bitpim-1.0.7+dfsg1/0000755001616600161660000000000011330125062012140 5ustar amuamubitpim-1.0.7+dfsg1/src/0000755001616600161660000000000011330124773012737 5ustar amuamubitpim-1.0.7+dfsg1/src/phone_media_codec.py0000644001616600161660000000465210240046376016726 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2005 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: phone_media_codec.py 2369 2005-05-10 05:56:14Z djpham $ """ Codec for converting phone media file names to local file names. """ # standard modules import codecs # wx modules import wx # BitPim modules escape_char='%' bad_chars={ '__WXMSW__': (escape_char, '/', '\\', '[', ']', '?', '*', ':', '"', '<', '>', '|', '=', ';'), '__WXMAC__': (escape_char, '/', ':'), '__WXGTK__': (escape_char, '/') } def phone_media_encode(input, errors='ignore'): """ Encodes the phone media file name into local storage file name """ assert errors=='ignore' l=[] for c in input: ord_c=ord(c) if ord_c<32 or ord_c>127 or \ c in bad_chars.get(wx.Platform, ()): l+=hex(ord_c).replace('0x', escape_char) else: l+=c return (str(''.join(l)), len(input)) def phone_media_decode(input, errors='ignore'): """ Decodes local system file name to phone media file name """ assert errors=='ignore' l=[] esc_str='' for c in input: if c==escape_char: # starting the escape sequence if len(esc_str): # current escape sequence is broken, ignore l+=esc_str esc_str=c elif len(esc_str): # in an esc sequence esc_str+=c if len(esc_str)==3: # got an %xx -> attempt to decode try: h=int(esc_str[1:], 16) l+=chr(h) except: # broken esc sequence, ignore l+=esc_str esc_str='' else: l+=c return (''.join(l), len(input)) class Codec(codecs.Codec): def encode(self, input,errors='strict'): return phone_media_encode(input,errors) def decode(self, input,errors='strict'): return phone_media_decode(input,errors) class StreamWriter(Codec,codecs.StreamWriter): pass class StreamReader(Codec,codecs.StreamReader): pass ### encodings module API codec_name='phone_media' def search_func(name): if name==codec_name: return (phone_media_encode, phone_media_decode, StreamReader, StreamWriter) bitpim-1.0.7+dfsg1/src/csv_calendar.py0000644001616600161660000005167010665135403015750 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: csv_calendar.py 4380 2007-08-29 00:17:07Z djpham $ "Deals with CSV calendar import/export stuff" # System modules from __future__ import with_statement import csv import datetime # wxPython modules import wx # Others # My modules import bpcalendar import common_calendar import helpids import guihelper module_debug=False #------------------------------------------------------------------------------- class ImportDataSource(common_calendar.ImportDataSource): # how to define, and retrieve calendar import data source message_str="Pick a CSV Calendar File" wildcard='*.csv' #------------------------------------------------------------------------------ ExportCSVDialogParent=common_calendar.ExportCalendarDialog class ExportCSVDialog(ExportCSVDialogParent): _default_file_name="calendar.csv" _wildcards="CSV files (*.csv)|*.csv" def __init__(self, parent, title): super(ExportCSVDialog, self).__init__(parent, title) def __get_str(self, entry, field): s=getattr(entry, field, '') if s is None: s='' if isinstance(s, unicode): return s.encode('ascii', 'ignore') else: return str(s) def _export(self): # do export filename=self.filenamectrl.GetValue() csv_event_template=( ('Start', 'start_str', None), ('End', 'end_str', None), ('Description', 'description', None), ('Location', 'location', None), ('Priority', 'priority', None), ('Alarm', 'alarm', None), ('All-Day', 'allday', None), ('Notes', 'notes', None), ('Categories', 'categories_str', None), ('Ringtone', 'ringtone', None), ('Wallpaper', 'wallpaper', None)) csv_repeat_template=( ('Repeat Type', 'repeat_type', None), ('Repeat Interval', 'interval', None), ('Repeat Interval2', 'interval2', None), ('Day-of-Week', 'dow_str', None), ('Excluded Dates', 'suppressed_str', None)) try: f=file(filename, 'wt') except: f=None if f is None: guihelper.MessageDialog(self, 'Failed to open file ['+filename+']', 'Export Error') return s=['"'+x[0]+'"' for x in csv_event_template]+\ ['"'+x[0]+'"' for x in csv_repeat_template] f.write(','.join(s)+'\n') all_items=self._selection.GetSelection()==0 dt=self._start_date.GetValue() range_start=(dt.GetYear(), dt.GetMonth()+1, dt.GetDay()) dt=self._end_date.GetValue() range_end=(dt.GetYear(), dt.GetMonth()+1, dt.GetDay()) #--- def __write_rec(f, cal_dict): for k,e in cal_dict.items(): if not all_items and \ (e.end < range_start or e.start>range_end): continue l=[] for field in csv_event_template: if field[2] is None: s=self.__get_str(e, field[1]) else: s=field[2](e, field[1]) l+=['"'+s.replace('"', '')+'"'] rpt=e.repeat if rpt is None: l+=['']*len(csv_repeat_template) else: for field in csv_repeat_template: if field[2] is None: s=self.__get_str(rpt, field[1]) else: s=field[2](rpt, field[1]) l+=['"'+s.replace('"', '')+'"'] f.write(','.join(l)+'\n') #--- cal_dict=self.GetParent().GetCalendarData() __write_rec(f, cal_dict) f.close() #------------------------------------------------------------------------------ class CSVCalendarImportData(object): __default_filter={ 'start': None, 'end': None, 'categories': None, 'rpt_events': False, 'no_alarm': False, 'ringtone': None, 'alarm_override':False, 'vibrate':False, 'alarm_value':0 } def __init__(self, file_name=None): self.__calendar_keys=( ('Start', 'start', self.__set_datetime), ('End', 'end', self.__set_datetime), ('Description', 'description', self.__set_str), ('Location', 'location', self.__set_str), ('Priority', 'priority', self.__set_priority), ('Alarm', 'alarm_value',self.__set_alarm), ('All-Day', 'allday', self.__set_bool), ('Notes', 'notes', self.__set_str), ('Categories', 'categories', self.__set_categories), ('Ringtone', 'ringtone', self.__set_str), ('Wallpaper', 'wallpaper', self.__set_str), ('Repeat Type', 'repeat_type', self.__set_repeat_type), ('Repeat Interval', 'repeat_interval', self.__set_int), ('Repeat Interval2', 'repeat_interval2', self.__set_int), ('Day-of-Week', 'repeat_dow', self.__set_dow), ('Excluded Dates', 'exceptions', self.__set_exceptions) ) self.__file_name=file_name self.__data=[] self.__filter=self.__default_filter self.read() def __accept(self, entry): # start & end time within specified filter if self.__filter['start'] is not None and \ entry['start'][:3]self.__filter['end'][:3] and \ entry['end'][:3]!=common_calendar.no_end_date[:3]: return False # check the catefory c=self.__filter['categories'] if c is None or not len(c): # no categories specified => all catefories allowed. return True if len([x for x in entry['categories'] if x in c]): return True return False def get(self): res={} single_rpt=self.__filter.get('rpt_events', False) for k in self.__data: try: if self.__accept(k): if k.get('repeat', False) and single_rpt: d=self.__generate_repeat_events(k) else: d=[k] for n in d: ce=bpcalendar.CalendarEntry() self.__populate_entry(n, ce) res[ce.id]=ce except: if module_debug: raise return res def get_category_list(self): l=[] for e in self.__data: l+=[x for x in e.get('categories', []) if x not in l] return l def set_filter(self, filter): self.__filter=filter def get_filter(self): return self.__filter def get_display_data(self): cnt=0 res={} single_rpt=self.__filter.get('rpt_events', False) for k in self.__data: if self.__accept(k): if k.get('repeat', False) and single_rpt: d=self.__generate_repeat_events(k) else: d=[k.copy()] for n in d: if self.__filter.get('no_alarm', False): n['alarm']=False res[cnt]=n cnt+=1 return res def get_file_name(self): if self.__file_name is not None: return self.__file_name return '' def read(self, file_name=None, dlg=None): if file_name is not None: self.__file_name=file_name if self.__file_name is None: # no file name specified return try: csv_file=file(self.__file_name, 'rb') except: return reader=csv.reader(csv_file) # retrieve the header and build the header keys h=reader.next() header_keys=[] for e in h: k=None for x in self.__calendar_keys: if e==x[0]: k=x break header_keys.append(k) # loop through the file, read each line, and parse it self.__data=[] for row in reader: d={} for i,e in enumerate(row): if header_keys[i] is None: continue elif header_keys[i][2] is None: self.__set_str(e, d, header_keys[i][1]) else: header_keys[i][2](e, d, header_keys[i][1]) self.__data.append(d) csv_file.close() def __populate_repeat_entry(self, e, ce): # populate repeat entry data if not e.get('repeat', False) or e.get('repeat_type', None) is None: # not a repeat event return rp=bpcalendar.RepeatEntry() rp_type=e['repeat_type'] rp_interval=e.get('repeat_interval', 1) rp_interval2=e.get('repeat_interval2', 1) rp_dow=e.get('repeat_dow', 0) if rp_type==rp.daily: # daily event rp.repeat_type=rp.daily rp.interval=rp_interval elif rp_type==rp.weekly or rp_type==rp.monthly: rp.repeat_type=rp_type rp.interval=rp_interval rp.interval2=rp_interval2 rp.dow=rp_dow elif rp_type==rp.yearly: rp.repeat_type=rp.yearly else: # not yet supported return # add the list of exceptions for k in e.get('exceptions', []): rp.add_suppressed(*k[:3]) # all done ce.repeat=rp def __populate_entry(self, e, ce): # populate an calendar entry with data ce.description=e.get('description', None) ce.location=e.get('location', None) v=e.get('priority', None) if v is not None: ce.priority=v if not self.__filter.get('no_alarm', False) and \ not self.__filter.get('alarm_override', False) and \ e.get('alarm', False): ce.alarm=e.get('alarm_value', 0) ce.ringtone=self.__filter.get('ringtone', "") ce.vibrate=self.__filter.get('vibrate', False) elif not self.__filter.get('no_alarm', False) and \ self.__filter.get('alarm_override', False): ce.alarm=self.__filter.get('alarm_value', 0) ce.ringtone=self.__filter.get('ringtone', "") ce.vibrate=self.__filter.get('vibrate', False) ce.allday=e.get('allday', False) ce_start=e.get('start', None) ce_end=e.get('end', None) if ce_start is None and ce_end is None: raise ValueError, "No start or end datetime" if ce_start is not None: ce.start=ce_start if ce_end is not None: ce.end=ce_end if ce_start is None: ce.start=ce.end elif ce_end is None: ce.end=ce.start ce.notes=e.get('notes', None) v=[] for k in e.get('categories', []): v.append({ 'category': k }) ce.categories=v # look at repeat self.__populate_repeat_entry(e, ce) def __generate_repeat_events(self, e): # generate multiple single events from this repeat event ce=bpcalendar.CalendarEntry() self.__populate_entry(e, ce) l=[] new_e=e.copy() new_e['repeat']=False for k in ('repeat_type', 'repeat_interval', 'repeat_dow'): if new_e.has_key(k): del new_e[k] s_date=datetime.datetime(*self.__filter['start']) e_date=datetime.datetime(*self.__filter['end']) one_day=datetime.timedelta(1) this_date=s_date while this_date<=e_date: date_l=(this_date.year, this_date.month, this_date.day) if ce.is_active(*date_l): new_e['start']=date_l+new_e['start'][3:] new_e['end']=date_l+new_e['end'][3:] l.append(new_e.copy()) this_date+=one_day return l def __set_str(self, v, d, key): d[key]=str(v) def __set_datetime(self, v, d, key): # the date time should be in this format: YYYY-MM-DD hh:mm # quick check for the format if v[4]!='-' or v[7]!='-' or v[10]!= ' ' or v[13]!=':': return d[key]=(int(v[:4]), int(v[5:7]), int(v[8:10]), int(v[11:13]), int(v[14:16])) def __set_priority(self, v, d, key): if len(v): d[key]=int(v) else: d[key]=None def __set_alarm(self, v, d, key): if len(v): d[key]=int(v) d['alarm']=d[key]!=-1 else: d[key]=None d['alarm']=False def __set_int(self, v, d, key): if not len(v): d[key]=None else: d[key]=int(v) def __set_bool(self, v, d, key): d[key]=v.upper()=='TRUE' def __set_categories(self, v, d, key): if v is None or not len(v): d[key]=[] else: d[key]=v.split(';') def __set_repeat_type(self, v, d, key): if len(v): d[key]=str(v) d['repeat']=True else: d['repeat']=False def __set_dow(self, v, d, key): dow=0 for e in v.split(';'): dow|=bpcalendar.RepeatEntry.dow_names.get(e, 0) d[key]=dow def __set_exceptions(self, v, d, key): l=[] for e in v.split(';'): if len(e): if e[4]=='-' and e[7]=='-': l.append( (int(e[:4]), int(e[5:7]), int(e[8:10])) ) d[key]=l #------------------------------------------------------------------------------ class CSVImportDialog(common_calendar.PreviewDialog): __column_labels=[ ('description', 'Description', 400, None), ('start', 'Start', 150, common_calendar.bp_date_str), ('end', 'End', 150, common_calendar.bp_date_str), ('repeat_type', 'Repeat', 80, common_calendar.bp_repeat_str), ('alarm', 'Alarm', 80, common_calendar.bp_alarm_str), ('categories', 'Category', 150, common_calendar.category_str) ] def __init__(self, parent, id, title): self.__oc=CSVCalendarImportData() common_calendar.PreviewDialog.__init__(self, parent, id, title, self.__column_labels, self.__oc.get_display_data(), config_name='import/calendar/csvdialog') def getcontrols(self, main_bs): hbs=wx.BoxSizer(wx.HORIZONTAL) # label hbs.Add(wx.StaticText(self, -1, "CSV File:"), 0, wx.ALL|wx.ALIGN_CENTRE, 2) # where the folder name goes self.folderctrl=wx.TextCtrl(self, -1, "", style=wx.TE_READONLY) self.folderctrl.SetValue(self.__oc.get_file_name()) hbs.Add(self.folderctrl, 1, wx.EXPAND|wx.ALL, 2) # browse button id_browse=wx.NewId() hbs.Add(wx.Button(self, id_browse, 'Browse ...'), 0, wx.EXPAND|wx.ALL, 2) main_bs.Add(hbs, 0, wx.EXPAND|wx.ALL, 5) main_bs.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5) wx.EVT_BUTTON(self, id_browse, self.OnBrowseFolder) def getpostcontrols(self, main_bs): main_bs.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5) hbs=wx.BoxSizer(wx.HORIZONTAL) id_import=wx.NewId() hbs.Add(wx.Button(self, id_import, 'Import'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) hbs.Add(wx.Button(self, wx.ID_OK, 'Replace All'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) hbs.Add(wx.Button(self, self.ID_ADD, 'Add'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) hbs.Add(wx.Button(self, self.ID_MERGE, 'Merge'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) hbs.Add(wx.Button(self, wx.ID_CANCEL, 'Cancel'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) id_filter=wx.NewId() hbs.Add(wx.Button(self, id_filter, 'Filter'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) hbs.Add(wx.Button(self, wx.ID_HELP, 'Help'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) main_bs.Add(hbs, 0, wx.ALIGN_CENTRE|wx.ALL, 5) wx.EVT_BUTTON(self, id_import, self.OnImport) wx.EVT_BUTTON(self, id_filter, self.OnFilter) wx.EVT_BUTTON(self, self.ID_ADD, self.OnEndModal) wx.EVT_BUTTON(self, self.ID_MERGE, self.OnEndModal) wx.EVT_BUTTON(self, wx.ID_HELP, lambda *_: wx.GetApp().displayhelpid(helpids.ID_DLG_CALENDAR_IMPORT)) @guihelper.BusyWrapper def OnImport(self, evt): with guihelper.WXDialogWrapper(wx.ProgressDialog('CSV Calendar Import', 'Importing CSV Calendar Data, please wait ...', parent=self)) as dlg: self.__oc.read(self.folderctrl.GetValue()) self.populate(self.__oc.get_display_data()) def OnBrowseFolder(self, evt): with guihelper.WXDialogWrapper(wx.FileDialog(self, "Pick a CSV Calendar File", wildcard='*.csv'), True) as (dlg, id): if id==wx.ID_OK: self.folderctrl.SetValue(dlg.GetPath()) def OnFilter(self, evt): cat_list=self.__oc.get_category_list() with guihelper.WXDialogWrapper(common_calendar.FilterDialog(self, -1, 'Filtering Parameters', cat_list), True) as (dlg, retcode): if retcode==wx.ID_OK: self.__oc.set_filter(dlg.get()) self.populate(self.__oc.get_display_data()) def OnEndModal(self, evt): self.EndModal(evt.GetId()) def get(self): return self.__oc.get() def get_categories(self): return self.__oc.get_category_list() #------------------------------------------------------------------------------- def ImportCal(folder, filters): _oc=CSVCalendarImportData(folder) _oc.set_filter(filters) _oc.read() res={ 'calendar':_oc.get() } return res #------------------------------------------------------------------------------- class CSVAutoConfCalDialog(wx.Dialog): def __init__(self, parent, id, title, folder, filters, style=wx.CAPTION|wx.MAXIMIZE_BOX| \ wx.SYSTEM_MENU|wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER): self._oc=CSVCalendarImportData() self._oc.set_filter(filters) self.__read=False wx.Dialog.__init__(self, parent, id=id, title=title, style=style) main_bs=wx.BoxSizer(wx.VERTICAL) hbs=wx.BoxSizer(wx.HORIZONTAL) # label hbs.Add(wx.StaticText(self, -1, "CSV Calendar File:"), 0, wx.ALL|wx.ALIGN_CENTRE, 2) # where the folder name goes self.folderctrl=wx.TextCtrl(self, -1, "", style=wx.TE_READONLY) self.folderctrl.SetValue(folder) hbs.Add(self.folderctrl, 1, wx.EXPAND|wx.ALL, 2) # browse button id_browse=wx.NewId() hbs.Add(wx.Button(self, id_browse, 'Browse ...'), 0, wx.EXPAND|wx.ALL, 2) main_bs.Add(hbs, 0, wx.EXPAND|wx.ALL, 5) main_bs.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5) wx.EVT_BUTTON(self, id_browse, self.OnBrowseFolder) hbs=wx.BoxSizer(wx.HORIZONTAL) hbs.Add(wx.Button(self, wx.ID_OK, 'OK'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) hbs.Add(wx.Button(self, wx.ID_CANCEL, 'Cancel'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) id_filter=wx.NewId() hbs.Add(wx.Button(self, id_filter, 'Filter'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) hbs.Add(wx.Button(self, wx.ID_HELP, 'Help'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) main_bs.Add(hbs, 0, wx.ALIGN_CENTRE|wx.ALL, 5) wx.EVT_BUTTON(self, id_filter, self.OnFilter) wx.EVT_BUTTON(self, wx.ID_HELP, lambda *_: wx.GetApp().displayhelpid(helpids.ID_DLG_CALENDAR_IMPORT)) self.SetSizer(main_bs) self.SetAutoLayout(True) main_bs.Fit(self) def OnBrowseFolder(self, evt): with guihelper.WXDialogWrapper(wx.FileDialog(self, "Pick a CSV Calendar File", wildcard='*.csv'), True) as (dlg, retcode): if retcode==wx.ID_OK: self.folderctrl.SetValue(dlg.GetPath()) self.__read=False def OnFilter(self, evt): # read the calender to get the category list if not self.__read: self._oc.read(self.folderctrl.GetValue()) self.__read=True cat_list=self._oc.get_category_list() with guihelper.WXDialogWrapper(common_calendar.AutoSyncFilterDialog(self, -1, 'Filtering Parameters', cat_list)) as dlg: dlg.set(self._oc.get_filter()) if dlg.ShowModal()==wx.ID_OK: self._oc.set_filter(dlg.get()) def GetFolder(self): return self.folderctrl.GetValue() def GetFilter(self): return self._oc.get_filter() bitpim-1.0.7+dfsg1/src/vcard.py0000644001616600161660000010702210662172605014416 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: vcard.py 4369 2007-08-20 01:59:33Z djpham $ """Code for reading and writing Vcard VCARD is defined in RFC 2425 and 2426 """ from __future__ import with_statement import sys import quopri import base64 import codecs import cStringIO import common import nameparser import phonenumber class VFileException(Exception): pass class VFile: _charset_aliases={ 'MACINTOSH': 'MAC_ROMAN' } def __init__(self, source): self.source=source self.saved=None def __iter__(self): return self def next(self): # Get the next non-blank line while True: # python desperately needs do-while line=self._getnextline() if line is None: raise StopIteration() if len(line)!=0: break # Hack for evolution. If ENCODING is QUOTED-PRINTABLE then it doesn't # offset the next line, so we look to see what the first char is normalcontinuations=True colon=line.find(':') if colon>0: s=line[:colon].lower().split(";") if "quoted-printable" in s or 'encoding=quoted-printable' in s: normalcontinuations=False while line[-1]=="=" or line[-2]=='=': if line[-1]=='=': i=-1 else: i=-2 nextl=self._getnextline() if nextl[0] in ("\t", " "): nextl=nextl[1:] line=line[:i]+nextl while normalcontinuations: nextline=self._lookahead() if nextline is None: break if len(nextline)==0: break if nextline[0]!=' ' and nextline[0]!='\t': break line+=self._getnextline()[1:] colon=line.find(':') if colon<1: # some evolution vcards don't even have colons # raise VFileException("Invalid property: "+line) if __debug__: print "Fixing up bad line",line colon=len(line) line+=":" b4=line[:colon] line=line[colon+1:].strip() # upper case and split on semicolons items=b4.upper().split(";") newitems=[] if isinstance(line, unicode): charset=None else: charset="LATIN-1" for i in items: # ::TODO:: probably delete anything preceding a '.' # (see 5.8.2 in rfc 2425) # look for charset parameter if i.startswith("CHARSET="): charset = i[8:] or "LATIN-1" continue # unencode anything that needs it if not i.startswith("ENCODING=") and not i=="QUOTED-PRINTABLE": # evolution doesn't bother with "ENCODING=" # ::TODO:: deal with backslashes, being especially careful with ones quoting semicolons newitems.append(i) continue try: if i=='QUOTED-PRINTABLE' or i=="ENCODING=QUOTED-PRINTABLE": # technically quoted printable is ascii only but we decode anyway since not all vcards comply line=quopri.decodestring(line) elif i=='ENCODING=B': line=base64.decodestring(line) charset=None else: raise VFileException("unknown encoding: "+i) except Exception,e: if isinstance(e,VFileException): raise e raise VFileException("Exception %s while processing encoding %s on data '%s'" % (str(e), i, line)) # ::TODO:: repeat above shenanigans looking for a VALUE= thingy and # convert line as in 5.8.4 of rfc 2425 if len(newitems)==0: raise VFileException("Line contains no property: %s" % (line,)) # charset frigging if charset is not None: try: decoder=codecs.getdecoder(self._charset_aliases.get(charset, charset)) line,_=decoder(line) except LookupError: raise VFileException("unknown character set '%s' in parameters %s" % (charset, b4)) if newitems==["BEGIN"] or newitems==["END"]: line=line.upper() return newitems,line def _getnextline(self): if self.saved is not None: line=self.saved self.saved=None return line else: return self._readandstripline() def _readandstripline(self): line=self.source.readline() if line is not None: if len(line)==0: return None elif line[-2:]=="\r\n": return line[:-2] elif line[-1]=='\r' or line[-1]=='\n': return line[:-1] return line def _lookahead(self): assert self.saved is None self.saved=self._readandstripline() return self.saved class VCards: "Understands vcards in a vfile" def __init__(self, vfile): self.vfile=vfile def __iter__(self): return self def next(self): # find vcard start field=value=None for field,value in self.vfile: if (field,value)!=(["BEGIN"], "VCARD"): continue found=True break if (field,value)!=(["BEGIN"], "VCARD"): # hit eof without any BEGIN:vcard raise StopIteration() # suck up lines lines=[] for field,value in self.vfile: if (field,value)!=(["END"], "VCARD"): lines.append( (field,value) ) continue break if (field,value)!=(["END"], "VCARD"): raise VFileException("There is a BEGIN:VCARD but no END:VCARD") return VCard(lines) class VCard: "A single vcard" def __init__(self, lines): self._version=(2,0) # which version of the vcard spec the card conforms to self._origin=None # which program exported the vcard self._data={} self._groups={} self.lines=[] # extract version field for f,v in lines: assert len(f) if f==["X-EVOLUTION-FILE-AS"]: # all evolution cards have this self._origin="evolution" if f[0].startswith("ITEM") and (f[0].endswith(".X-ABADR") or f[0].endswith(".X-ABLABEL")): self._origin="apple" if len(v) and v[0].find(">!$_") > v[0].find("_$!<") >=0: self.origin="apple" if f==["VERSION"]: ver=v.split(".") try: ver=[int(xx) for xx in ver] except ValueError: raise VFileException(v+" is not a valid vcard version") self._version=ver continue # convert {home,work}.{tel,label} to {tel,label};{home,work} # this probably dates from *very* early vcards if f[0]=="HOME.TEL": f[0:1]=["TEL", "HOME"] elif f[0]=="HOME.LABEL": f[0:1]=["LABEL", "HOME"] elif f[0]=="WORK.TEL": f[0:1]=["TEL", "WORK"] elif f[0]=="WORK.LABEL": f[0:1]=["LABEL", "WORK"] self.lines.append( (f,v) ) self._parse(self.lines, self._data) self._update_groups(self._data) def getdata(self): "Returns a dict of the data parsed out of the vcard" return self._data def _getfieldname(self, name, dict): """Returns the fieldname to use in the dict. For example, if name is "email" and there is no "email" field in dict, then "email" is returned. If there is already an "email" field then "email2" is returned, etc""" if name not in dict: return name for i in xrange(2,99999): if name+`i` not in dict: return name+`i` def _parse(self, lines, result): for field,value in lines: if len(value.strip())==0: # ignore blank values continue if '.' in field[0]: f=field[0][field[0].find('.')+1:] else: f=field[0] t=f.replace("-", "_") func=getattr(self, "_field_"+t, self._default_field) func(field, value, result) def _update_groups(self, result): """Update the groups info """ for k,e in self._groups.items(): self._setvalue(result, *e) # fields we ignore def _field_ignore(self, field, value, result): pass _field_LABEL=_field_ignore # we use the ADR field instead _field_BDAY=_field_ignore # not stored in bitpim _field_ROLE=_field_ignore # not stored in bitpim _field_CALURI=_field_ignore # not stored in bitpim _field_CALADRURI=_field_ignore # variant of above _field_FBURL=_field_ignore # not stored in bitpim _field_REV=_field_ignore # not stored in bitpim _field_KEY=_field_ignore # not stored in bitpim _field_SOURCE=_field_ignore # not stored in bitpim (although arguably part of serials) _field_PHOTO=_field_ignore # contained either binary image, or external URL, not used by BitPim # simple fields def _field_FN(self, field, value, result): result[self._getfieldname("name", result)]=self.unquote(value) def _field_TITLE(self, field, value, result): result[self._getfieldname("title", result)]=self.unquote(value) def _field_NICKNAME(self, field, value, result): # ::TODO:: technically this is a comma seperated list .. result[self._getfieldname("nickname", result)]=self.unquote(value) def _field_NOTE(self, field, value, result): result[self._getfieldname("notes", result)]=self.unquote(value) def _field_UID(self, field, value, result): result["uid"]=self.unquote(value) # note that we only store one UID (the "U" does stand for unique) # # Complex fields # def _field_N(self, field, value, result): value=self.splitandunquote(value) familyname=givenname=additionalnames=honorificprefixes=honorificsuffixes=None try: familyname=value[0] givenname=value[1] additionalnames=value[2] honorificprefixes=value[3] honorificsuffixes=value[4] except IndexError: pass if familyname is not None and len(familyname): result[self._getfieldname("last name", result)]=familyname if givenname is not None and len(givenname): result[self._getfieldname("first name", result)]=givenname if additionalnames is not None and len(additionalnames): result[self._getfieldname("middle name", result)]=additionalnames if honorificprefixes is not None and len(honorificprefixes): result[self._getfieldname("prefix", result)]=honorificprefixes if honorificsuffixes is not None and len(honorificsuffixes): result[self._getfieldname("suffix", result)]=honorificsuffixes _field_NAME=_field_N # early versions of vcard did this def _field_ORG(self, field, value, result): value=self.splitandunquote(value) if len(value): result[self._getfieldname("organisation", result)]=value[0] for f in value[1:]: result[self._getfieldname("organisational unit", result)]=f _field_O=_field_ORG # early versions of vcard did this def _field_EMAIL(self, field, value, result): value=self.unquote(value) # work out the types types=[] for f in field[1:]: if f.startswith("TYPE="): ff=f[len("TYPE="):].split(",") else: ff=[f] types.extend(ff) # the standard doesn't specify types of "home" and "work" but # does allow for random user defined types, so we look for them type=None for t in types: if t=="HOME": type="home" if t=="WORK": type="business" if t=="X400": return # we don't want no steenking X.400 preferred="PREF" in types if type is None: self._setvalue(result, "email", value, preferred) else: addr={'email': value, 'type': type} self._setvalue(result, "email", addr, preferred) def _field_URL(self, field, value, result): # the standard doesn't specify url types or a pref type, # but we implement it anyway value=self.unquote(value) # work out the types types=[] for f in field[1:]: if f.startswith("TYPE="): ff=f[len("TYPE="):].split(",") else: ff=[f] types.extend(ff) type=None for t in types: if t=="HOME": type="home" if t=="WORK": type="business" preferred="PREF" in types if type is None: self._setvalue(result, "url", value, preferred) else: addr={'url': value, 'type': type} self._setvalue(result, "url", addr, preferred) def _field_X_SPEEDDIAL(self, field, value, result): if '.' in field[0]: group=field[0][:field[0].find('.')] else: group=None if group is None: # this has to belong to a group!! print 'speedial has no group' else: self._setgroupvalue(result, 'phone', { 'speeddial': int(value) }, group, False) def _field_TEL(self, field, value, result): value=self.unquote(value) # see if this is part of a group if '.' in field[0]: group=field[0][:field[0].find('.')] else: group=None # work out the types types=[] for f in field[1:]: if f.startswith("TYPE="): ff=f[len("TYPE="):].split(",") else: ff=[f] types.extend(ff) # type munging - we map vcard types to simpler ones munge={ "BBS": "DATA", "MODEM": "DATA", "ISDN": "DATA", "CAR": "CELL", "PCS": "CELL" } types=[munge.get(t, t) for t in types] # reduce types to home, work, msg, pref, voice, fax, cell, video, pager, data types=[t for t in types if t in ("HOME", "WORK", "MSG", "PREF", "VOICE", "FAX", "CELL", "VIDEO", "PAGER", "DATA")] # if type is in this list and voice not explicitly mentioned then it is not a voice type antivoice=["FAX", "PAGER", "DATA"] if "VOICE" in types: voice=True else: voice=True # default is voice for f in antivoice: if f in types: voice=False break preferred="PREF" in types # vcard allows numbers to be multiple things at the same time, such as home voice, home fax # and work fax so we have to test for all variations # if neither work or home is specified, then no default (otherwise things get really complicated) iswork=False ishome=False if "WORK" in types: iswork=True if "HOME" in types: ishome=True if len(types)==0 or types==["PREF"]: iswork=True # special case when nothing else is specified value=phonenumber.normalise(value) if iswork and voice: self._setgroupvalue(result, "phone", {"type": "business", "number": value}, group, preferred) if ishome and voice: self._setgroupvalue(result, "phone", {"type": "home", "number": value}, group, preferred) if not iswork and not ishome and "FAX" in types: # fax without explicit work or home self._setgroupvalue(result, "phone", {"type": "fax", "number": value}, group, preferred) else: if iswork and "FAX" in types: self._setgroupvalue(result, "phone", {"type": "business fax", "number": value}, group, preferred) if ishome and "FAX" in types: self._setgroupvalue(result, "phone", {"type": "home fax", "number": value}, group, preferred) if "CELL" in types: self._setgroupvalue(result, "phone", {"type": "cell", "number": value}, group, preferred) if "PAGER" in types: self._setgroupvalue(result, "phone", {"type": "pager", "number": value}, group, preferred) if "DATA" in types: self._setgroupvalue(result, "phone", {"type": "data", "number": value}, group, preferred) def _setgroupvalue(self, result, type, value, group, preferred=False): """ Set value of an item of a group """ if group is None: # no groups specified return self._setvalue(result, type, value, preferred) group_type=self._groups.get(group, None) if group_type is None: # 1st one of the group self._groups[group]=[type, value, preferred] else: if type!=group_type[0]: print 'Group',group,'has different types:',type,groups_type[0] if preferred: group_type[2]=True group_type[1].update(value) def _setvalue(self, result, type, value, preferred=False): if type not in result: result[type]=value return if not preferred: result[self._getfieldname(type, result)]=value return # we need to insert our value at the begining values=[value] for suffix in [""]+range(2,99): if type+str(suffix) in result: values.append(result[type+str(suffix)]) else: break suffixes=[""]+range(2,len(values)+1) for l in range(len(suffixes)): result[type+str(suffixes[l])]=values[l] def _field_CATEGORIES(self, field, value, result): # comma seperated just for fun values=self.splitandunquote(value, seperator=",") values=[v.replace(";", "").strip() for v in values] # semi colon is used as seperator in bitpim text field values=[v for v in values if len(v)] v=result.get('categories', None) if v: result['categories']=';'.join([v, ";".join(values)]) else: result['categories']=';'.join(values) def _field_SOUND(self, field, value, result): # comma seperated just for fun values=self.splitandunquote(value, seperator=",") values=[v.replace(";", "").strip() for v in values] # semi colon is used as seperator in bitpim text field values=[v for v in values if len(v)] result[self._getfieldname("ringtones", result)]=";".join(values) _field_CATEGORY=_field_CATEGORIES # apple use "category" which is not in the spec def _field_ADR(self, field, value, result): # work out the type preferred=False type="business" for f in field[1:]: if f.startswith("TYPE="): ff=f[len("TYPE="):].split(",") else: ff=[f] for x in ff: if x=="HOME": type="home" if x=="PREF": preferred=True value=self.splitandunquote(value) pobox=extendedaddress=streetaddress=locality=region=postalcode=country=None try: pobox=value[0] extendedaddress=value[1] streetaddress=value[2] locality=value[3] region=value[4] postalcode=value[5] country=value[6] except IndexError: pass addr={} if pobox is not None and len(pobox): addr["pobox"]=pobox if extendedaddress is not None and len(extendedaddress): addr["street2"]=extendedaddress if streetaddress is not None and len(streetaddress): addr["street"]=streetaddress if locality is not None and len(locality): addr["city"]=locality if region is not None and len(region): addr["state"]=region if postalcode is not None and len(postalcode): addr["postalcode"]=postalcode if country is not None and len(country): addr["country"]=country if len(addr): addr["type"]=type self._setvalue(result, "address", addr, preferred) def _field_X_PALM(self, field, value, result): # handle a few PALM custom fields ff=field[0].split(".") f0=ff[0] f1=ff[1] if len(ff)>1 else '' if f0.startswith('X-PALM-CATEGORY') or f1.startswith('X-PALM-CATEGORY'): self._field_CATEGORIES(['CATEGORIES'], value, result) elif f0=='X-PALM-NICKNAME' or f1=='X-PALM-NICKNAME': self._field_NICKNAME(['NICKNAME'], value, result) else: if __debug__: print 'ignoring PALM custom field',field def _default_field(self, field, value, result): ff=field[0].split(".") f0=ff[0] f1=ff[1] if len(ff)>1 else '' if f0.startswith('X-PALM-') or f1.startswith('X-PALM-'): self._field_X_PALM(field, value, result) return elif f0.startswith("X-") or f1.startswith("X-"): if __debug__: print "ignoring custom field",field return if __debug__: print "no idea what do with" print "field",field print "value",value[:80] def unquote(self, value): # ::TODO:: do this properly (deal with all backslashes) return value.replace(r"\;", ";") \ .replace(r"\,", ",") \ .replace(r"\n", "\n") \ .replace(r"\r\n", "\r\n") \ .replace("\r\n", "\n") \ .replace("\r", "\n") def splitandunquote(self, value, seperator=";"): # also need a splitandsplitandunquote since some ; delimited fields are then comma delimited # short cut for normal case - no quoted seperators if value.find("\\"+seperator)<0: return [self.unquote(v) for v in value.split(seperator)] # funky quoting, do it the slow hard way res=[] build="" v=0 while v0 then first line is this width. if equal to zero then first line is same width as rest. if <0 then first line will go immediately to continuation. """ if firstlinewidth==0: firstlinewidth=width if len(line)0: res+=line[:firstlinewidth] line=line[firstlinewidth:] while len(line): res+="\n "+line[:width] if len(line)1 for v in vals: res+=out_line("TEL", ["TYPE=%s%s" % ("PREF," if _pref else "", _out_tel_mapping[v['type']])], phonenumber.format(v['number']), formatter) _pref=False return res def out_email_scp6600(vals, formatter): res='' for _idx in range(min(len(vals), 2)): v=vals[_idx] if v.get('email', None): res+=out_line('EMAIL', ['TYPE=INTERNET'], v['email'], formatter) return res def out_url_scp660(vals, formatter): if vals and vals[0].get('url', None): return out_line('URL', None, vals[0]['url'], formatter) return '' def out_adr_scp6600(vals, formatter): for v in vals: if v.get('type', None)=='home': _type='HOME' else: _type='WORK' return out_line("ADR", ['TYPE=%s'%_type], [v.get(k, "") for k in (None, "street2", "street", "city", "state", "postalcode", "country")], formatter) return '' # This is the order we write things out to the vcard. Although # vCard doesn't require an ordering, it looks nicer if it # is (eg name first) _field_order=("names", "wallpapers", "addresses", "numbers", "categories", "emails", "urls", "ringtones", "flags", "memos", "serials") def output_entry(entry, profile, limit_fields=None): # debug build assertion that limit_fields only contains fields we know about if __debug__ and limit_fields is not None: assert len([f for f in limit_fields if f not in _field_order])==0 fmt=profile["_formatter"] io=cStringIO.StringIO() io.write(out_line("BEGIN", None, "VCARD", None)) io.write(out_line("VERSION", None, profile["_version"], None)) if limit_fields is None: fields=_field_order else: fields=[f for f in _field_order if f in limit_fields] for f in fields: if f in entry and f in profile: func=profile[f] # does it have a limit? (nice scary introspection :-) if "limit" in func.func_code.co_varnames[:func.func_code.co_argcount]: lines=func(entry[f], fmt, limit=profile["_limit"]) else: lines=func(entry[f], fmt) if len(lines): io.write(lines) io.write(out_line("END", None, "VCARD", fmt)) return io.getvalue() profile_vcard2={ '_formatter': format_stringv2, '_limit': 1, '_version': "2.1", 'names': out_names, 'categories': out_categories, 'emails': out_emails, 'urls': out_urls, 'numbers': out_tel, 'addresses': out_adr, 'memos': out_note, } profile_vcard3=profile_vcard2.copy() profile_vcard3['_formatter']=format_stringv3 profile_vcard3['_version']="3.0" profile_apple=profile_vcard3.copy() profile_apple['categories']=out_categories_apple profile_full=profile_vcard3.copy() profile_full['_limit']=99999 profile_scp6600=profile_full.copy() del profile_scp6600['categories'] profile_scp6600.update( { 'numbers': out_tel_scp6600, 'emails': out_email_scp6600, 'urls': out_url_scp660, 'addresses': out_adr_scp6600, }) profiles={ 'vcard2': { 'description': "vCard v2.1", 'profile': profile_vcard2 }, 'vcard3': { 'description': "vCard v3.0", 'profile': profile_vcard3 }, 'apple': { 'description': "Apple", 'profile': profile_apple }, 'fullv3': { 'description': "Full vCard v3.0", 'profile': profile_full}, 'scp6600': { 'description': "Sanyo SCP-6600 (Katana)", 'profile': profile_scp6600 }, } if __name__=='__main__': def _wrap(func): try: return func() except: print common.formatexception() sys.exit(1) def dump_vcards(): for vcard in VCards(VFile(common.opentextfile(sys.argv[1]))): # pass print vcard def turn_around(): p="fullv3" if len(sys.argv)==4: p=sys.argv[4] print "Using profile", profiles[p]['description'] profile=profiles[p]['profile'] d={'result': {}} try: execfile(sys.argv[1], d,d) except UnicodeError: common.unicode_execfile(sys.argv[1], d,d) with file(sys.argv[2], "wt") as f: for k in d['result']['phonebook']: print >>f, output_entry(d['result']['phonebook'][k], profile) if len(sys.argv)==2: # import bp # bp.profile("vcard.prof", "dump_vcards()") _wrap(dump_vcards) elif len(sys.argv)==3 or len(sys.argv)==4: _wrap(turn_around) else: print """one arg: import the named vcard file two args: first arg is phonebook/index.idx file, write back out to arg2 in vcard format three args: same as two but last arg is profile to use. profiles are""", profiles.keys() bitpim-1.0.7+dfsg1/src/phonenumber.py0000644001616600161660000000327510675356437015661 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: phonenumber.py 4404 2007-09-23 03:27:27Z djpham $ """Code for normalising and formatting phone numbers This doesn't (yet) try to deal with international numbers. The rule is that if the string contains 10 digits (with an optional preceding one) then it is reduced to the 10 digits (all non-digit characters removed, optional leading one removed). If the string doesn't meet those criteria then it is passed through as is. For formatting, 10 digit strings are formatted in standard US notation. All others are left as is. """ import re _notdigits=re.compile("[^0-9]*") _tendigits=re.compile("^[0-9]{10}$") _sevendigits=re.compile("^[0-9]{7}$") def normalise(n): # this was meant to remove the long distance '1' prefix, # temporary disable it, will be done on a phone-by-phone case. return n nums="".join(re.split(_notdigits, n)) if len(nums)==10: return nums if len(nums)==11 and nums[0]=="1": return nums[1:] return n def format(n): if re.match(_tendigits, n) is not None: return "(%s) %s-%s" % (n[0:3], n[3:6], n[6:]) elif re.match(_sevendigits, n) is not None: return "%s-%s" %(n[:3], n[3:]) return n if __name__=='__main__': nums=("011441223518046", "+1-123-456-7890", "(123) 456-7890", "0041-2702885504", "19175551212", "9175551212", "123 456 7890", "123 456 7890 ext 17") for n in nums: print "%s\n norm: %s\n fmt: %s\n" % (n, normalise(n), format(normalise(n))) bitpim-1.0.7+dfsg1/src/newdb_wiz.py0000644001616600161660000002302110664607106015304 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2007 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: newdb_wiz.py 4378 2007-08-27 17:47:50Z djpham $ """ Wizard to create a new BitPim storage area. """ # system module from __future__ import with_statement import os import os.path # wx modules import wx import wx.wizard as wiz from wx.lib.expando import ExpandoTextCtrl # BitPim modules import bp_config import guihelper import setphone_wizard if guihelper.IsMSWindows(): from win32com import client parentpage=setphone_wizard.MyPage #------------------------------------------------------------------------------- class NamePage(parentpage): def __init__(self, parent): super(NamePage, self).__init__(parent, 'Select BitPim Storage Name') def GetMyControls(self): vbs=wx.BoxSizer(wx.VERTICAL) vbs.Add(wx.StaticText(self, -1, 'Storage Name:'), 0, wx.EXPAND|wx.ALL, 5) self.name=wx.TextCtrl(self, -1, '') vbs.Add(self.name, 0, wx.EXPAND|wx.ALL, 5) return vbs def ok(self): return bool(self.name.GetValue()) def get(self, data): data['name']=self.name.GetValue() def set(self, data): self.name.SetValue(data.get('name', '')) #------------------------------------------------------------------------------- class PathPage(parentpage): def __init__(self, parent): super(PathPage, self).__init__(parent, 'Select New Storage Dir') if guihelper.IsMSWindows(): shell=client.Dispatch("WScript.Shell") self.defaultdir=os.path.join(shell.SpecialFolders("MyDocuments"), 'Phones') else: self.defaultdir=os.path.expanduser('~/Phones') def GetMyControls(self): vbs=wx.BoxSizer(wx.VERTICAL) vbs.Add(wx.StaticText(self, -1, 'Storage Dir:'), 0, wx.EXPAND|wx.ALL, 5) self.path=ExpandoTextCtrl(self, -1, '', style=wx.TE_READONLY) self.path.SetBackgroundColour(self.GetBackgroundColour()) vbs.Add(self.path, 0, wx.EXPAND|wx.ALL, 5) btn=wx.Button(self, -1, 'Browse') wx.EVT_BUTTON(self, btn.GetId(), self.OnBrowse) vbs.Add(btn, 0, wx.ALL, 5) return vbs def ok(self): return bool(self.path.GetValue()) def get(self, data): data['path']=self.path.GetValue() def set(self, data): path=data.get('path', '') if not path: path=os.path.join(self.defaultdir, data.get('name', '')) self.path.SetValue(path) def OnBrowse(self, _): with guihelper.WXDialogWrapper(wx.DirDialog(self, defaultPath=self.path.GetLabel(), style=wx.DD_NEW_DIR_BUTTON), True) as (dlg, retcode): if retcode==wx.ID_OK: self.path.SetValue(dlg.GetPath()) #------------------------------------------------------------------------------- class OptionsPage(parentpage): def __init__(self, parent): super(OptionsPage, self).__init__(parent, 'Select Options') def GetMyControls(self): vbs=wx.BoxSizer(wx.VERTICAL) self.setting=wx.RadioBox(self, -1, 'Initial Config Settings:', choices=['Use Default Settings', 'Use Current Settings'], style=wx.RA_SPECIFY_ROWS) vbs.Add(self.setting, 0, wx.EXPAND|wx.ALL, 5) if guihelper.IsMSWindows(): sbs=wx.StaticBoxSizer(wx.StaticBox(self, -1, 'Shortcut Options:'), wx.VERTICAL) self.desktop=wx.CheckBox(self, -1, 'Create a shortcut on your Desktop') sbs.Add(self.desktop, 0, wx.EXPAND|wx.ALL, 5) self.startmenu=wx.CheckBox(self, -1, 'Create a shortcut in your Start Menu') sbs.Add(self.startmenu, 0, wx.EXPAND|wx.ALL, 5) vbs.Add(sbs, 0, wx.EXPAND|wx.ALL, 5) return vbs def get(self, data): data['currentsettings']=self.setting.GetSelection()==1 if guihelper.IsMSWindows(): data['desktop']=self.desktop.GetValue() data['startmenu']=self.startmenu.GetValue() def set(self, data): if data.get('currentsettings', False): self.setting.SetSelection(1) else: self.setting.SetSelection(0) if guihelper.IsMSWindows(): self.desktop.SetValue(data.get('desktop', False)) self.startmenu.SetValue(data.get('startmenu', False)) #------------------------------------------------------------------------------- class SummaryPage(parentpage): def __init__(self, parent): super(SummaryPage, self).__init__(parent, 'Selection Summary') def GetMyControls(self): vbs=wx.StaticBoxSizer(wx.StaticBox(self, -1, 'Selection Summary:'), wx.VERTICAL) self.summary=ExpandoTextCtrl(self, -1, '') self.summary.SetBackgroundColour(self.GetBackgroundColour()) vbs.Add(self.summary, 0, wx.EXPAND|wx.ALL, 5) self._box=vbs return vbs def set(self, data): text=['Name:\t%s'%data.get('name', '')] text.append('Dir:\t%s'%data.get('path', '')) if data.get('currentsettings', False): text.append('Use current BitPim settings.') else: text.append('Use default BitPim settings.') if guihelper.IsMSWindows(): if data.get('desktop', False): text.append('Create a shortcut on your Desktop.') if data.get('startmenu', False): text.append('Create a shortcut in your Start Menu.') self.summary.SetValue('\n\n'.join(text)) #------------------------------------------------------------------------------- class NewDBWizard(wiz.Wizard): def __init__(self, parent): super(NewDBWizard, self).__init__(parent, -1, 'New BitPim Storage Wizard') self.data={} namepage=NamePage(self) pathpage=PathPage(self) optionspage=OptionsPage(self) summarypage=SummaryPage(self) wiz.WizardPageSimple_Chain(namepage, pathpage) wiz.WizardPageSimple_Chain(pathpage, optionspage) wiz.WizardPageSimple_Chain(optionspage, summarypage) self.firstpage=namepage self.GetPageAreaSizer().Add(namepage, 1, wx.EXPAND|wx.ALL, 5) wiz.EVT_WIZARD_PAGE_CHANGING(self, self.GetId(), self.OnPageChanging) wiz.EVT_WIZARD_PAGE_CHANGED(self, self.GetId(), self.OnPageChanged) def RunWizard(self, firstPage=None): return super(NewDBWizard, self).RunWizard(firstPage or self.firstpage) def OnPageChanging(self, evt): pg=evt.GetPage() if not evt.GetDirection() or pg.ok(): pg.get(self.data) else: evt.Veto() def OnPageChanged(self, evt): evt.GetPage().set(self.data) def get(self): return self.data #------------------------------------------------------------------------------- def create_desktop_shortcut(name, filename): shell=client.Dispatch("WScript.Shell") desktopphones=os.path.join(shell.SpecialFolders("Desktop"), 'Phones') if not os.path.isdir(desktopphones): os.makedirs(desktopphones) target=os.path.join(desktopphones, name+'.lnk') try: os.remove(target) except: pass link=shell.CreateShortcut(target) link.TargetPath=filename link.Save() #------------------------------------------------------------------------------- def create_startmenu_shortcut(name, filename): shell=client.Dispatch("WScript.Shell") startmenu=os.path.join(shell.SpecialFolders("StartMenu"), 'Programs') startmenuphones=os.path.join(startmenu, 'Phones') if not os.path.isdir(startmenuphones): os.makedirs(startmenuphones) target=os.path.join(startmenuphones, name+'.lnk') try: os.remove(target) except: pass link=shell.CreateShortcut(target) link.TargetPath=filename link.Save() #------------------------------------------------------------------------------- def create_new_db(parent, config=None): # Create a new BitPim Storage area with guihelper.WXDialogWrapper(NewDBWizard(parent)) as wz: if wz.RunWizard(): data=wz.get() name=data.get('name', '') # Dir should aleady exist, but check anyway path=data.get('path', '') if not os.path.isdir(path): os.makedirs(path) # create a config file filename=os.path.join(path, '.bitpim') if data.get('currentsettings', False) and config: config.write(file(filename, 'wt')) conf=bp_config.Config(filename) conf.Write('name', name) # and optionally create shortcuts (Windows only) if guihelper.IsMSWindows(): if data.get('desktop', False): create_desktop_shortcut(name, filename) if data.get('startmenu', False): create_startmenu_shortcut(name, filename) #------------------------------------------------------------------------------- # Testing if __name__=="__main__": app=wx.PySimpleApp() f=wx.Frame(None, title='newdb_wizard') create_new_db(f) bitpim-1.0.7+dfsg1/src/brewcompressedimage.py0000644001616600161660000001710210367517310017343 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: brewcompressedimage.py 2781 2006-01-30 23:18:32Z djpham $ """Support for the BCI (Brew Compressed Image) format Currently this code can read a BCI file. You should call the L{getimage} function. """ """ integers are lsb 0000 - 0003 BCI\0 0004 - 0007 ? (x0844 = 2116) [length of file] 0008 - 000b ? (x0434 = 1076) [offset to first image 000c - 000d ? (1) 000e - 000f width 0010 - 0011 height 0012 - 0013 ? (1) 2 0014 - 0015 ? (1) 2 0016 - 0017 ? (1) 2 0018 - 0019 ? (0) 001a - 001b ? (8) [bits per pixel?] 001c - 001d ? (1) 001e - 001f ? [0x100 = 256 ] # number of entries in palette palette b,g,r,0 (32 bit entry) next palette 0000 - 0001 ? (2) palette number/id 0002 - 0003 number of entries in palette image 0000 - 0001 data length 0002 - 0003 ? (0) 0004 - 0005 width 0006 - 0007 height 0008 - 0009 ? (1) 000a - 000b ? (1) """ import common import zlib import cStringIO import wx class Display(wx.Frame): """Used for the builtin tester""" def __init__(self, file, parent=None): bmp=wx.BitmapFromImage(wx.Image(file)) wx.Frame.__init__(self, parent, -1, "Image Display") b=wx.StaticBitmap(self, -1, bmp) b.SetSize((bmp.GetWidth(), bmp.GetHeight())) self.Fit() self.Show(True) class MyImage: """An encapsulation of the image""" def __init__(self, width, height, bytes, palette): self.width=width self.height=height offset=0 import cStringIO data=cStringIO.StringIO() for row in range(height): # print "\r"+`row`, # 32 bit alignment while (offset%4)!=0: offset+=1 for col in range(width): v=ord(bytes[offset]) offset+=1 data.write(palette[v]) self.data=data.getvalue() # print def toImage(self, img=None): """Converts image to wxImage @rtype: wxImage """ if img is None: img=wx.EmptyImage(self.width, self.height) else: img.Destroy() img.Create(self.width, self.height) img.SetData(self.data) return img class BCIPalette: """An encapsulation of the palette""" def __init__(self, data=""): pal=[] for offset in range(0, len(data), 4): assert data[3]=="\x00" pal.append(data[offset+2]+data[offset+1]+data[offset]) self.pal=pal def __getitem__(self,e): return self.pal[e] class MemoryInputStream(wx.InputStream): def __init__(self, data): import cStringIO wx.InputStream.__init__(self,cStringIO.StringIO(data)) class FileInputStream(wx.InputStream): def __init__(self, name): self.f=open(name, "rb") wx.InputStream.__init__(self, self.f) def __del__(self): self.f.close() def getimage(stream, intoImage=None): """Returns a wxImage of the stream specified""" # try to read the entire thing in one gulp data=stream.read() # save hex version for debugging # f=open(file+".hex", "w") # f.write(common.datatohexstring(data)) # f.close() palettes={} ### verify format # header assert data[0x00:0x04]=='BCI\x00' # file length assert readlsb(data[0x04:0x08])<=len(data) # this would be == but the bci tool doesn't truncate the file! # image offset imageoffset=readlsb(data[0x08:0x0b]) assert imageoffset0 and height>0 # number of objects/frames/palettes? no idea on order numitem1=readlsb(data[0x12:0x14]) numitem2=readlsb(data[0x14:0x16]) numitem3=readlsb(data[0x16:0x18]) # print "number of objects/frames/palettes? no idea on order: %d, %d, %d" % (numitem1, numitem2, numitem3) numpalettes=numitem1 # just a guess numotherthing=numitem2 # no idea what they are, possibly 'frames' as in the doc numimages=numitem3 # images, probably 'object' as in the doc # ? (0) assert readlsb(data[0x18:0x1a])==0 # palette depth? bpp=readlsb(data[0x1a:0x1c]) # read the palettes offset=0x1c for _ in range(numpalettes): id=readlsb(data[offset:offset+2]) # print "palette id",id offset+=2 numentries=readlsb(data[offset:offset+2]) # print "contains",numentries,"entries" offset+=2 # f=open(file+".palette."+`id`+".hex", "w") # f.write(common.datatohexstring(data[offset:offset+numentries*4])) # f.close() pal=BCIPalette(data[offset:offset+numentries*4]) offset+=numentries*4 palettes[id]=pal # some other type of object, possibly frames as in the doc for _ in range(numotherthing): # we just ignore the contents for the moment # print common.datatohexstring(data[offset:offset+0x14]) offset+=0x14 # images for _ in range(numimages): szdata=readlsb(data[offset:offset+4]) width=readlsb(data[offset+4:offset+6]) height=readlsb(data[offset+6:offset+8]) id1=readlsb(data[offset+8:offset+0xa]) # image id? id2=readlsb(data[offset+0xa:offset+0xc]) # palette id? offset+=0xc buf=data[offset:offset+szdata] res=zlib.decompress(buf) # f=open(file+".image."+`id1`+".hex", "w") # f.write(common.datatohexstring(res)) # f.close() img=MyImage(width, height, res, palettes[id2]) return img.toImage(intoImage) def readlsb(data): """Read binary data in lsb""" res=0 shift=0 for i in data: res|=ord(i)< ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: bitflingscan.py 2741 2006-01-09 03:32:08Z sawecw $ """Scans the available bitfling ports in the same way as comscan and usbscan work as well as providing the rest of the BitFling interface""" import sys import common try: import bitfling.client as bitfling except ImportError: bitfling=None def IsBitFlingEnabled(): if bitfling is None: return False return True class BitFlingIsNotConfiguredException(Exception): pass class flinger: def __init__(self, certverifier=None): self.certverifier=certverifier self.unconfigure() def isconfigured(self): return self.username is not None and \ self.password is not None and \ self.host is not None and \ self.port is not None def _configure(self): if not self.isconfigured(): raise BitFlingIsNotConfiguredException("BitFling needs to be configured") if self.client is None: self.client=bitfling.client(self.username, self.password, self.host, self.port, self.certverifier) def configure(self, username, password, host, port): self.client=None self.username=username self.password=password self.host=host self.port=port def unconfigure(self): self.username=self.password=self.host=self.port=self.client=None def getversion(self): self._configure() return self.client.getversion() def SetCertVerifier(self, certverifier): self.certverifier=certverifier def scan(self): if not self.isconfigured(): return [] self._configure() ports=self.client.scan() for p in range(len(ports)): ports[p]['BitFling']=True ports[p]['name']='bitfling::'+ports[p]['name'] return ports # All the device methods def deviceopen(self, port, baud, timeout, hardwareflow, softwareflow): self._configure() return self.client.deviceopen(port, baud, timeout, hardwareflow, softwareflow) def deviceclose(self, handle): try: self._configure() # we don't care about close's failing self.client.deviceclose(handle) except: pass def devicesetbaudrate(self, handle, rate): self._configure() return self.client.devicesetbaudrate(handle, rate) def devicesetdtr(self, handle, dtr): self._configure() return self.client.devicesetdtr(handle, dtr) def devicesetrts(self, handle, rts): self._configure() return self.client.devicesetrts(handle, rts) def devicewrite(self, handle, data): self._configure() return self.client.devicewrite(handle, data) def devicesendatcommand(self, handle, sendatcommand, ignoreerror): self._configure() res=self.client.devicesendatcommand(handle, sendatcommand, ignoreerror) if res==0: raise elif res==1: res=[] return res def devicereaduntil(self, handle, char, numfailures): self._configure() return self.client.devicereaduntil(handle, char, numfailures) def deviceread(self, handle, numchars): self._configure() return self.client.deviceread(handle, numchars) def devicereadsome(self, handle, numchars): self._configure() return self.client.devicereadsome(handle, numchars) def devicewritethenreaduntil(self, handle, data, char, numfailures): self._configure() return self.client.devicewritethenreaduntil(handle, data, char, numfailures) # ensure there is a singleton flinger=flinger() encode=common.obfus_encode decode=common.obfus_decode # Unfortunately we have to do some magic to deal with threads # correctly. This code is called both from the gui/foreground thread # (eg when calling the scan function) as well as from the background # thread (eg when talking to a port over the protocol). We also have # to deal with certificate verification issues, since the cert # verification has to happen in the gui/foreground. # The way we solve this problem is to have a dedicated thread for # running the flinger code in. We hide this from the various callers # by automatically transferring control to the bitfling thread and # back again using Queue.Queue's import thread import threading import Queue class BitFlingWorkerThread(threading.Thread): def __init__(self): threading.Thread.__init__(self) self.setName("BitFling worker thread") self.setDaemon(True) self.q=Queue.Queue() self.resultqueues={} self.eventloops={} def run(self): while True: q,func,args,kwargs=self.q.get() try: res=func(*args, **kwargs) q.put( (res, None) ) except: q.put( (None, sys.exc_info()) ) def callfunc(self, func, args, kwargs): qres=self.getresultqueue() self.q.put( (qres, func, args, kwargs) ) # do we need event loop? loopfunc=self.eventloops.get(thread.get_ident(), None) if loopfunc is not None: while qres.empty(): loopfunc() res, exc = qres.get() if exc is not None: ex=exc[1] ex.gui_exc_info=exc raise ex return res def getresultqueue(self): """Return the thread specific result Queue object They are automatically allocated on demand""" q=self.resultqueues.get(thread.get_ident(), None) if q is not None: return q q=Queue.Queue() self.resultqueues[thread.get_ident()]=q return q def setthreadeventloop(self, eventfunc): """Sets the eventloopfunction used for this thread""" self.eventloops[thread.get_ident()]=eventfunc class CallWrapper: """Provides proxy method wrappers so that all method calls can be redirected to worker thread This works in a very similar way to how xmlrpclib wraps client side xmlrpc """ class MethodIndirect: def __init__(self, func): self.func=func def __call__(self, *args, **kwargs): return CallWrapper.worker.callfunc(self.func, args, kwargs) worker=None object=None def __init__(self, worker, object): CallWrapper.worker=worker CallWrapper.object=object def __getattr__(self, name): if hasattr(self.worker, name): return getattr(self.worker, name) v=getattr(self.object, name) if callable(v): return self.MethodIndirect(v) return v if IsBitFlingEnabled(): BitFlingWorkerThread=BitFlingWorkerThread() BitFlingWorkerThread.start() # wrap it all up flinger=CallWrapper(BitFlingWorkerThread, flinger) else: class flinger: def __getattr__(self, name): if name=="scan": return self.scan raise Exception("BitFling is not enabled") def __setattr__(self, name, value): raise Exception("BitFling is not enabled") def scan(self): return [] flinger=flinger() class CommConnection: # The constructor takes the same arguments as commport.CommConnection, but many # are ignored def __init__(self, logtarget, port, baud=115200, timeout=3, hardwareflow=0, softwareflow=0, autolistfunc=None, autolistargs=None, configparameters=None): assert port.startswith("bitfling::") self.logtarget=logtarget self.port=port self.baud=baud self.timeout=timeout self.hardwareflow=hardwareflow self.softwareflow=softwareflow self.handle=None self._openport() def _openport(self): if self.handle is not None: self.close() self.log("Opening port %s, %d baud, timeout %f, hardwareflow %d, softwareflow %d" % (self.port, self.baud, float(self.timeout), self.hardwareflow, self.softwareflow) ) self.handle=flinger.deviceopen(self.port[len("bitfling::"):], self.baud, self.timeout, self.hardwareflow, self.softwareflow) def IsAuto(self): return False def close(self): if self.handle is not None: flinger.deviceclose(self.handle) self.handle=None def reset(self): self._openport() def log(self, str): if self.logtarget: self.logtarget.log(self.port+": "+str) def logdata(self, str, data): if self.logtarget: self.logtarget.logdata(self.port+": "+str, data) def setbaudrate(self, rate): res=flinger.devicesetbaudrate(self.handle, rate) if res: self.baud=rate return res def setdtr(self, dtr): res=flinger.devicesetdtr(self.handle, dtr) return res def setrts(self, rts): res=flinger.devicesetrts(self.handle, rts) return res def write(self, data, log=True): if log: self.logdata("Writing", data) flinger.devicewrite(self.handle, data) def sendatcommand(self, atcommand, ignoreerror=False): res=flinger.devicesendatcommand(self.handle, atcommand, ignoreerror) return res def read(self, numchars=1, log=True): res=flinger.deviceread(self.handle, numchars) if log: self.logdata("Reading exact data - requested "+`numchars`, res) return res def readsome(self, log=True, numchars=-1): res=flinger.devicereadsome(self.handle, numchars) if log: self.logdata("Reading remaining data", res) return res def readuntil(self, char, log=True, logsuccess=True, numfailures=0): res=flinger.devicereaduntil(self.handle, char, numfailures) if log: pass # ::TODO: something when we get a timeout exception if logsuccess: self.logdata("Read completed", res) return res # composite methods which reduce round trips def writethenreaduntil(self, data, logwrite, char, logreaduntil=True, logreaduntilsuccess=True, numfailures=0): if logwrite: self.logdata("Writing", data) res=flinger.devicewritethenreaduntil(self.handle, data, char, numfailures) if logreaduntilsuccess: self.logdata("Read completed", res) return res bitpim-1.0.7+dfsg1/src/prototypes_moto.py0000644001616600161660000001024110454042735016600 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: prototypes_moto.py 3460 2006-07-08 23:55:09Z djpham $ """Implement specific prototypes class for Motorola phones""" import re import prototypes class CAL_DATE(prototypes.CSVSTRING): """Dates used for Calendar Events (mm-dd-yyyy)""" def __init__(self, *args, **kwargs): super(CAL_DATE, self).__init__(*args, **kwargs) self._valuedate=(0, 0, 0) # y,m,d if self._ismostderived(CAL_DATE): self._update(args, kwargs) def _converttostring(self, date): s='' if len(date)>=3: year,month,day=date[:3] if month>0 or day>0 or year>0: s='%2.2d-%2.2d-%4.4d'%(month, day, year) return s def _update(self, args, kwargs): for k in ('constant', 'default', 'value'): if kwargs.has_key(k): kwargs[k]=self._converttostring(kwargs[k]) if len(args)==0: pass elif len(args)==1: args=(self._converttostring(args[0]),) else: raise TypeError("expected (year,month,day) as arg") super(CAL_DATE, self)._update(args, kwargs) self._complainaboutunusedargs(CAL_DATE, kwargs) def getvalue(self): s=super(CAL_DATE, self).getvalue() val=s.split('-') if len(val)<2: year=0 month=0 day=0 else: year=int(val[2]) month=int(val[0]) day=int(val[1]) return (year, month, day) class CAL_TIME(prototypes.CSVSTRING): """Times used for Calendar Events (hh:mm)""" def __init__(self, *args, **kwargs): super(CAL_TIME, self).__init__(*args, **kwargs) self._valuetime=(0, 0) # h,m if self._ismostderived(CAL_TIME): self._update(args, kwargs) def _converttostring(self, date): s='' if len(date)>=2: s='%2.2d:%2.2d'%tuple(date[:2]) return s def _update(self, args, kwargs): for k in ('constant', 'default', 'value'): if kwargs.has_key(k): kwargs[k]=self._converttostring(kwargs[k]) if len(args)==0: pass elif len(args)==1: args=(self._converttostring(args[0]),) else: raise TypeError("expected (hour, min) as arg") super(CAL_TIME, self)._update(args, kwargs) self._complainaboutunusedargs(CAL_TIME, kwargs) def getvalue(self): s=super(CAL_TIME, self).getvalue() val=s.split(':') if len(val)==2: return (int(val[0]), int(val[1])) return (0, 0) class M_SMSDATETIME(prototypes.CSVSTRING): """ Represent date time with the format 'yyyy/M+/d+,h+:m+:s+' used by Motorola SMS messages. Currently works only 1 way: SMS Date Time -> ISO String """ _re_pattern='^\d\d+/\d+/\d+,\d+:\d+:\d+$' _re_compiled_pattern=None def __init__(self, *args, **kwargs): if M_SMSDATETIME._re_compiled_pattern is None: M_SMSDATETIME._re_compiled_pattern=re.compile(M_SMSDATETIME._re_pattern) super(M_SMSDATETIME, self).__init__(*args, **kwargs) if self._ismostderived(M_SMSDATETIME): self._update(args, kwargs) def _update(self, args, kwargs): super(M_SMSDATETIME, self)._update(args, kwargs) # strip blanks, and replace quotechar if self._value: self._value=self._value.strip(' ').replace('"', '') if self._value and \ not re.match(M_SMSDATETIME._re_compiled_pattern, self._value): raise ValueError('Correct Format: [yy]yy/[M]M/[d]d,[h]h:[m]m:[s]s') def getvalue(self): """Returns the ISO Format 'yyyyMMddThhmmss""" if self._value: _d,_t=self._value.strip(' ').replace('"', '').split(',') _d=_d.split('/') _t=_t.split(':') return '%s%s%sT%s%s%s'%(_d[0].zfill(4), _d[1].zfill(2), _d[2].zfill(2), _t[0].zfill(2), _t[1].zfill(2), _t[2].zfill(2)) bitpim-1.0.7+dfsg1/src/bitfling/0000755001616600161660000000000011330124771014533 5ustar amuamubitpim-1.0.7+dfsg1/src/bitfling/LICENSE0000644001616600161660000004656710024411116015551 0ustar amuamuThe code in BitPim is copyright by several people. Please note the comments at the top of each file, as well as version control history. The BitPim code is under the GNU General Public License as detailed below. Specific permission is granted for this code to be linked to OpenSSL (this is necessary becuse the OpenSSL license is not GPL-compatible). In addition, as a special exception, the BitPim copyright holders give permission to link the code of this program with the OpenSSL library (or with modified versions of OpenSSL), and distribute linked combinations including the two. You must obey the GNU General Public License in all respects for all of the code used other than OpenSSL. If you modify any files, you may extend this exception to your version of the file, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. Please also note that some code is taken from other projects with a GPL compatible license. This is noted in the specific files. BitPim also uses several other components with GPL compatible licenses. The online help details those components, credits the authors and details the licenses. --------------------------------------------------------------------- This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. --------------------------------------------------------------------- GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License.bitpim-1.0.7+dfsg1/src/bitfling/guihelper.py0000644001616600161660000001213310131133045017061 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: guihelper.py 1638 2004-10-07 03:21:09Z n9yty $ """Various convenience functions and widgets to assist the gui""" import time import os import sys import StringIO import traceback import wx # some library routines def IsMSWindows(): """Are we running on Windows? @rtype: Bool""" return wx.Platform=='__WXMSW__' def IsGtk(): """Are we running on GTK (Linux) @rtype: Bool""" return wx.Platform=='__WXGTK__' def IsMac(): """Are we running on Mac @rtype: Bool""" return wx.Platform=='__WXMAC__' class LogWindow(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self,parent, -1, style=wx.NO_FULL_REPAINT_ON_RESIZE) self.tb=wx.TextCtrl(self, 1, style=wx.TE_MULTILINE|wx.TE_RICH2|wx.NO_FULL_REPAINT_ON_RESIZE|wx.TE_DONTWRAP|wx.TE_READONLY) f=wx.Font(10, wx.MODERN, wx.NORMAL, wx.NORMAL ) ta=wx.TextAttr(font=f) self.tb.SetDefaultStyle(ta) self.sizer=wx.BoxSizer(wx.VERTICAL) self.sizer.Add(self.tb, 1, wx.EXPAND) self.SetSizer(self.sizer) self.SetAutoLayout(True) self.sizer.Fit(self) wx.EVT_IDLE(self, self.OnIdle) self.outstandingtext="" def Clear(self): self.tb.Clear() def OnIdle(self,_): if len(self.outstandingtext): self.tb.AppendText(self.outstandingtext) self.outstandingtext="" self.tb.ScrollLines(-1) def log(self, str): now=time.time() t=time.localtime(now) if len(str)==0 or str[0]=="&": # already has time etc stamps self.outstandingtext+=str[1:]+"\r\n" else: self.outstandingtext+="%d:%02d:%02d.%03d: %s\r\n" % ( t[3], t[4], t[5], int((now-int(now))*1000), str) def logexception(self, excinfo=None): str=formatexception(excinfo) self.log(str) def formatexception(excinfo=None, lastframes=8): """Pretty print exception, including local variable information. See Python Cookbook, recipe 14.4. @param excinfo: tuple of information returned from sys.exc_info when the exception occurred. If you don't supply this then information about the current exception being handled is used @param lastframes: local variables are shown for these number of frames @return: A pretty printed string """ if excinfo is None: excinfo=sys.exc_info() s=StringIO.StringIO() traceback.print_exception(*excinfo, **{'file': s}) tb=excinfo[2] while True: if not tb.tb_next: break tb=tb.tb_next stack=[] f=tb.tb_frame while f: stack.append(f) f=f.f_back stack.reverse() if len(stack)>lastframes: stack=stack[-lastframes:] print >>s, "\nVariables by last %d frames, innermost last" % (lastframes,) for frame in stack: print >>s, "" print >>s, "Frame %s in %s at line %s" % (frame.f_code.co_name, frame.f_code.co_filename, frame.f_lineno) for key,value in frame.f_locals.items(): # filter out modules if type(value)==type(sys): continue print >>s,"%15s = " % (key,), try: print >>s,`value`[:160] except: print >>s,"(Exception occurred printing value)" return s.getvalue() # Where to find bitmaps etc if IsMac(): p=os.getcwd() else: p=sys.path[0] if p.lower().endswith(".zip"): # zip importer in action p=os.path.dirname(p) resourcedirectory=os.path.join(os.path.abspath(p), "resources") def getresourcefile(filename): """Returns name of file by adding it to resource directory pathname No attempt is made to verify the file exists @rtype: string """ return os.path.join(resourcedirectory, filename) def run(*args): """Execute the command. The path is searched""" sl=os.spawnl if sys.platform!='win32': sl=os.spawnlp ret=apply(sl, (os.P_WAIT,args[0])+args) else: # win98 was fine with above code, winxp just chokes # so we call system() instead str="" for a in args: if len(a)==0: str+=' ""' elif a.find(' ')>=0: str+=' "'+a+'"' else: str+=" "+a str=str[1:] # remove first space # If you ever wanted proof how idiotic windows is, here it is # if there is a value enclosed in double quotes, it is # taken as the window title, even if it comes after all # the switches, so i have to supply one, otherwise it mistakes # the command to run as the window title ret=os.system('start /b /wait "%s" %s' % (args[0], str)) return ret bitpim-1.0.7+dfsg1/src/bitfling/xmlrpcstuff.py0000644001616600161660000005226410212247340017467 0ustar amuamu#!/usr/bin/env python # This file is double licensed as the BitPim License and the Python # licenses. It incorporates code from the standard Python library # which was then modified to work properly. # My own implementation of xmlrpc (both server and client) # It has a silly name so it doesn't class with standard Python # and library module names # This code initially tried to do XML-RPC over HTTP/1.1 persistent # connections over SSL (provided by M2Crypto). That turned out into a # big nightmare of trying to mash libraries to work together that # didn't really want to. # This new version uses SSH (provided by paramiko). # Server design # # Main thread (which could be a daemon thread for the rest of the program) # creates the listening socket, and starts the connection handler threads. # They all sit in a loop. They call accept, work on the lifetime of # a connection, and when it closes go back to accept. When they get a # request, it is dumped into a queue for the main thread to deal with, # who then dumps the results back into a queue for the connection thread. # Consequently we get the benefits of threading for dealing with event # stuff, but the actual request handling still seems single threaded. TRACE=False # standard modules import threading import Queue import time import sys import xmlrpclib import base64 import string import logging import os import socket # required add ons import paramiko # my modules if TRACE: import guihelper # to format exceptions import common class ServerChannel(paramiko.Channel): def __init__(self, chanid, peeraddr, username): self.chan=chanid self.peeraddr=peeraddr self.username=username paramiko.Channel.__init__(self, chanid) def readall(self, amount): result="" while amount: l=self.chan.recv(amount) if len(l)==0: return result # eof result+=l amount-=len(l) return result def XMLRPCLoop(self, conn): """Main loop that deals with the XML-RPC data @param conn: The connectionthread object we are working for """ while True: try: length=int(self.readall(8)) except ValueError: return xml=self.readall(length) response=conn.processxmlrpcrequest(xml, self.peeraddr, self.username) self.chan.sendall( ("%08d" % (len(response),))+response) class myServer(paramiko.ServerInterface): def __init__(self, peeraddr, onbehalfof): self.event = threading.Event() self.peeraddr=peeraddr self.onbehalfof=onbehalfof def get_allowed_auths(self, username): return "password" def check_auth_password(self, username, password): # we borrow the connection's queue object for this self.bf_auth_username="" conn=self.onbehalfof conn.log("Checking authentication for user "+`username`) msg=Server.Message(Server.Message.CMD_NEW_USER_REQUEST, conn.responsequeue, self.peeraddr, data=(username,password)) conn.requestqueue.put(msg) resp=conn.responsequeue.get() assert resp.cmd==resp.CMD_NEW_USER_RESPONSE if hasattr(resp, 'exception'): conn.logexception("Exception while checking authentication",resp.exception) return paramiko.AUTH_FAILED if resp.data: conn.log("Credentials ok for user "+`username`) self.bf_auth_username=username return paramiko.AUTH_SUCCESSFUL conn.log("Credentials not accepted for user "+`username`) return paramiko.AUTH_FAILED def check_channel_request(self, kind, chanid): if kind == 'bitfling': return paramiko.OPEN_SUCCEEDED return paramiko.OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED class Server(threading.Thread): class Message: """A message between a connection thread and the server object, or vice versa""" # These are in the order things happen. Logging happens all the time, and we # cycle XMLRPC requests and responses for the lifetime of a connection CMD_LOG=0 # data is log message CMD_LOG_EXCEPTION=1 # data is sys.exc_info() CMD_NEW_ACCEPT_REQUEST=2 CMD_NEW_ACCEPT_RESPONSE=3 CMD_NEW_USER_REQUEST=4 CMD_NEW_USER_RESPONSE=5 CMD_XMLRPC_REQUEST=6 CMD_XMLRPC_RESPONSE=7 CMD_CONNECTION_CLOSE=8 def __init__(self, cmd, respondqueue=None, clientaddr=None, data=None): self.cmd=cmd self.respondqueue=respondqueue self.clientaddr=clientaddr self.data=data def __repr__(self): d=`self.data` if len(d)>40: d=d[:40] str=`self.cmd` for i in dir(self): if i.startswith("CMD_") and getattr(self, i)==self.cmd: str=i break return "Message: cmd=%s data=%s" % (str, d) class ConnectionThread(threading.Thread): def __init__(self, server, listen, queue, name): """Constructor @param server: reference to server object @param listen: socket object that is in listening state @param queue: the queue object to send messages to @param name: name of this thread""" threading.Thread.__init__(self) self.setDaemon(True) self.setName(name) self.responsequeue=Queue.Queue() self.server=server self.requestqueue=queue self.listen=listen def log(self, str): now=time.time() t=time.localtime(now) timestr="&%d:%02d:%02d.%03d" % ( t[3], t[4], t[5], int((now-int(now))*1000)) msg=Server.Message(Server.Message.CMD_LOG, data="%s: %s: %s" % (timestr, self.getName(), str)) self.requestqueue.put(msg) def logexception(self, str, excinfo): if __debug__ and TRACE: print "exception %s\n%s" % (str, guihelper.formatexception(excinfo)) self.log(str) msg=Server.Message(Server.Message.CMD_LOG_EXCEPTION, data=excinfo) self.requestqueue.put(msg) def run(self): event=threading.Event() while not self.server.wantshutdown: if __debug__ and TRACE: print self.getName()+": About to call accept" try: transport=None event.clear() # blocking wait for new connection to come in sock, peeraddr = self.listen.accept() # ask if we allow this connection msg=Server.Message(Server.Message.CMD_NEW_ACCEPT_REQUEST, self.responsequeue, peeraddr) self.requestqueue.put(msg) resp=self.responsequeue.get() assert resp.cmd==resp.CMD_NEW_ACCEPT_RESPONSE ok=resp.data if not ok: self.log("Connection from "+`peeraddr`+" not accepted") sock.close() continue # startup ssh stuff self.log("Connection from "+`peeraddr`+" accepted") transport=paramiko.Transport(sock) transport.add_server_key(self.server.ssh_server_key) transport.setDaemon(True) srvr=myServer(peeraddr, self) transport.start_server(event,srvr) except: if __debug__ and TRACE: print self.getName()+": Exception in accept block\n"+guihelper.formatexception() self.logexception("Exception in accept", sys.exc_info()) if transport is not None: del transport sock.close() continue # wait for it to become an SSH connection event.wait() if not event.isSet() or not transport.is_active(): self.log("Connection from "+`peeraddr`+" didn't do SSH negotiation") transport.close() sock.close() continue if __debug__ and TRACE: print self.getName()+": SSH connection from "+`peeraddr` self.log("SSH negotiated from "+`peeraddr`) chan=None try: chan=transport.accept() serverchan=ServerChannel(chan,peeraddr,srvr.bf_auth_username) serverchan.XMLRPCLoop(self) except: self.logexception("Exception in XMLRPCLoop", sys.exc_info()) if chan is not None: chan.close() del chan if transport is not None: transport.close() del transport msg=Server.Message(Server.Message.CMD_CONNECTION_CLOSE, None, peeraddr) self.requestqueue.put(msg) self.log("Connection from "+`peeraddr`+" closed") def processxmlrpcrequest(self, data, client_addr, username): msg=Server.Message(Server.Message.CMD_XMLRPC_REQUEST, self.responsequeue, client_addr, data=(data, username)) if __debug__ and TRACE: self.log("%s: req %s" % (username, `data`)) self.requestqueue.put(msg) resp=self.responsequeue.get() assert resp.cmd==resp.CMD_XMLRPC_RESPONSE if hasattr(resp, "exception"): raise resp.exception return resp.data def __init__(self, host, port, servercert, connectionthreadcount=5, timecheck=60, connectionidlebreak=240): """Creates the listening thread and infrastructure. Don't forget to call start() if you want anything to be processed! You probably also want to call setDaemon(). Remember to load a certificate into the sslcontext. @param connectionthreadcount: How many threads are being used. If new connections arrive while the existing threads are busy in connections, then they will be ignored @param timecheck: How often shutdown requests are checked for in the main thread (only valid on Python 2.3+) @param connectionidlebreak: If an SSH connection is idle for this amount of time then it is closed """ threading.Thread.__init__(self) self.setName("Threading SSH server controller for %s:%d" % (host, port)) # setup logging l=logging.getLogger("paramiko") l.setLevel(logging.INFO) lh=FunctionLogHandler(self.OnLog) lh.setFormatter(logging.Formatter('%(levelname)-.3s [%(asctime)s] %(name)s: %(message)s', '%Y%m%d:%H%M%S')) l.addHandler(lh) self.ssh_server_key=servercert connection=socket.socket(socket.AF_INET, socket.SOCK_STREAM) connection.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) if not host: host="0.0.0.0" if __debug__ and TRACE: print "Binding to host %s port %d" % (host, port) connection.bind( (host, port) ) connection.listen(connectionthreadcount+5) self.timecheck=timecheck self.connectionidlebreak=connectionidlebreak self.wantshutdown=False self.workqueue=Queue.Queue() self.threadlist=[] for count in range(connectionthreadcount): conthread=self.ConnectionThread(self, connection, self.workqueue, "SSH worker thread %d/%d" % (count+1, connectionthreadcount)) conthread.start() self.threadlist.append(conthread) def shutdown(self): """Requests a shutdown of all threads""" self.wantshutdown=True def run23(self): while not self.wantshutdown: try: msg=self.workqueue.get(True, self.timecheck) except Queue.Empty: continue try: self.processmessage(msg) except: sys.excepthook(*sys.exc_info()) def run22(self): while not self.wantshutdown: try: msg=self.workqueue.get(True) except Queue.Empty: continue try: self.processmessage(msg) except: sys.excepthook(*sys.exc_info()) if sys.version_info>=(2,3): run=run23 else: run=run22 def processmessage(self, msg): if not isinstance(msg, Server.Message): self.OnUserMessage(msg) return if __debug__ and TRACE: if not msg.cmd in (msg.CMD_LOG, msg.CMD_LOG_EXCEPTION): print "Processing message "+`msg` resp=None if msg.cmd==msg.CMD_LOG: self.OnLog(msg.data) return elif msg.cmd==msg.CMD_LOG_EXCEPTION: self.OnLogException(msg.data) return elif msg.cmd==msg.CMD_NEW_ACCEPT_REQUEST: ok=self.OnNewAccept(msg.clientaddr) resp=Server.Message(Server.Message.CMD_NEW_ACCEPT_RESPONSE, data=ok) elif msg.cmd==msg.CMD_NEW_USER_REQUEST: ok=self.OnNewUser(msg.clientaddr, msg.data[0], msg.data[1]) resp=Server.Message(Server.Message.CMD_NEW_USER_RESPONSE, data=ok) elif msg.cmd==msg.CMD_XMLRPC_REQUEST: data=self.OnXmlRpcRequest(* (msg.data+(msg.clientaddr,))) resp=Server.Message(Server.Message.CMD_XMLRPC_RESPONSE, data=data) elif msg.cmd==msg.CMD_CONNECTION_CLOSE: self.OnConnectionClose(msg.clientaddr) else: assert False, "Unknown message command "+`msg.cmd` raise Exception("Internal processing error") if resp is not None: msg.respondqueue.put(resp) def OnLog(self, str): """Process a log message""" print str def OnLogException(self, exc): """Process an exception message""" print exc[:2] def OnNewAccept(self, clientaddr): """Decide if we accept a new new connection""" return True def OnNewUser(self, clientaddr, username, password): """Decide if a user is allowed to authenticate""" return True def OnConnectionClose(self, clientaddr): """Called when a connection closes""" if __debug__ and TRACE: print "Closed connection from "+`clientaddr` def OnUserMessage(self, msg): """Called when a message arrives in the workqueue""" def OnXmlRpcRequest(self, xmldata, username, clientaddr): """Called when an XML-RPC request arrives, but before the XML is parsed""" params, method = xmlrpclib.loads(xmldata) # call method try: response=self.OnMethodDispatch(method, params, username, clientaddr) # wrap response in a singleton tuple response = (response,) response = xmlrpclib.dumps(response, methodresponse=1) except xmlrpclib.Fault, fault: response = xmlrpclib.dumps(fault) except: self.OnLog("Exception processing method "+`method`) self.OnLogException(sys.exc_info()) # report exception back to server, with class name first # and then `object`. The client end may be able to # re-raise it obj=sys.exc_info()[1] try: klass="%s.%s" % (obj.__module__, obj.__name__) except: klass="%s.%s" % (obj.__class__.__module__, obj.__class__.__name__) response = xmlrpclib.dumps(xmlrpclib.Fault(17, "%s:%s" % (klass, obj))) return response def OnMethodDispatch(self, method, params, username, clientaddr): """Called once the XML-RPC request is parsed""" if __debug__ and TRACE: print "%s %s (user=%s, client=%s)" % (method, `tuple(params)`, username, `clientaddr`) if method=='add' and len(params)==2: return params[0]+params[1] raise xmlrpclib.Fault(10, "Unknown method "+method) # Copied from xmlrpclib. This version is slightly modified to be derived from # object. The reason is that if you print a _Method object, then the __str__ # method is called, which tries to do it over XML-RPC! Deriving from object # causes that and many other methods to be already present so it isn't a # problem. class _Method(object): # some magic to bind an XML-RPC method to an RPC server. # supports "nested" methods (e.g. examples.getStateName) def __init__(self, send, name): self.__send = send self.__name = name def __getattr__(self, name): return _Method(self.__send, "%s.%s" % (self.__name, name)) def __call__(self, *args): return self.__send(self.__name, args) class CertificateNotAcceptedException(Exception): pass class ServerProxy: logsetup=False def __init__(self, username, password, host, port, certverifier=None): if not self.logsetup: # paramiko.util.log_to_file('serverproxy.log') self.logsetup=True self.__username=username self.__password=password self.__host=host self.__port=port self.__channel=None self.__certverifier=certverifier def __str__(self): return "" % (self.__username, self.__host, self.__port) def __repr__(self): return "" % (self.__username, self.__host, self.__port) def __makeconnection(self): self.__channel=None sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect( (self.__host, self.__port) ) t=paramiko.Transport(sock) t.setDaemon(True) event=threading.Event() t.start_client(event) event.wait(15) if not t.is_active(): raise Exception("No SSH on the other end: %s/%d" % (self.__host, self.__port) ) key=t.get_remote_server_key() if self.__certverifier is not None: res=self.__certverifier( (self.__host, self.__port), key) if not res: raise CertificateNotAcceptedException("Certificate not accepted for %s @ %s:%d" % (self.__username, self.__host, self.__port)) if not t.is_active(): raise Exception("Session has failed while waiting for certificate to be verified") event=threading.Event() t.auth_password(self.__username, self.__password, event) event.wait() if not t.is_active(): raise Exception("Authentication to %s failed: Username %s, password %s" % (self.__host, `self.__username`, `self.__password`)) self.__channel=t.open_channel("bitfling") def __ensure_channel(self): if self.__channel is None: self.__makeconnection() if self.__channel is None: raise Exception("Unable to properly connect") def __getattr__(self, name): if name.startswith("__"): raise Exception("Bad method "+`name`) return _Method(self.__send, name) def __recvall(self, channel, amount): result="" while amount: l=channel.recv(amount) if len(l)==0: return result # eof result+=l amount-=len(l) return result def __send(self, methodname, args): self.__ensure_channel() request=xmlrpclib.dumps(args, methodname, encoding=None) # allow_none=False (allow_none is py2.3+) self.__channel.sendall( ("%08d" % (len(request),))+request) resplen=self.__recvall(self.__channel, 8) resplen=int(resplen) response=self.__recvall(self.__channel, resplen) p, u = xmlrpclib.getparser() p.feed(response) p.close() # if the response was a Fault, then it is raised by u.close() try: response=u.close() except xmlrpclib.Fault,e: if e.faultCode!=17: raise e klass,str=e.faultString.split(':', 1) raise common.getfullname(klass)(str) if len(response)==1: response=response[0] return response class FunctionLogHandler(logging.Handler): "Log handler that calls a specified function" def __init__(self, function, level=logging.NOTSET): logging.Handler.__init__(self, level) self.function=function def emit(self, record): self.function(record.getMessage()) if __name__=='__main__': if len(sys.argv)<2: print "You must supply arguments - one of" print " server" print " client" sys.exit(1) if sys.argv[1]=="server": #cert=paramiko.DSSKey() #cert.read_private_key_file(os.path.expanduser("~/.bitfling.key")) cert=paramiko.DSSKey.from_private_key_file("~/.bitfling.key") server=Server('', 12652, cert) server.setDaemon(True) server.start() time.sleep(1120) if sys.argv[1]=="client": server=ServerProxy('username', 'password', 'localhost', 12652) print server.add(3,4) print server.add("one", "two") bitpim-1.0.7+dfsg1/src/bitfling/bitfling.py0000644001616600161660000007127610620505172016717 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: bitfling.py 4228 2007-05-10 02:59:06Z djpham $ """This is the BitFling client It acts as an XML-RPC server over SSH. The UI consists of a tray icon (Windows) or a small icon (Linux, Mac) that you can click on to get the dialog.""" # Standard Modules import sys import cStringIO import os import random import sha import thread import fnmatch import socket import threading import time from xmlrpclib import Fault, Binary # wx stuff import wx import wx.html import wx.lib.newevent import wx.lib.masked.textctrl import wx.lib.mixins.listctrl # others import paramiko # My stuff try: import native.usb as usb except ImportError: usb=None import usbscan import comscan import commport import guihelper import xmlrpcstuff import version ID_CONFIG=wx.NewId() ID_LOG=wx.NewId() ID_RESCAN=wx.NewId() ID_EXIT=wx.NewId() XmlServerEvent, EVT_XMLSERVER = wx.lib.newevent.NewEvent() guithreadid=thread.get_ident() # in theory this should also work for GTK, but in practise it doesn't if guihelper.IsMSWindows(): parentclass=wx.TaskBarIcon else: parentclass=wx.Frame class MyTaskBarIcon(parentclass): def __init__(self, mw, menu): self.mw=mw self.menu=menu iconfile="bitfling.png" if parentclass is wx.Frame: parentclass.__init__(self, None, -1, "BitFling Window", size=(32,32), style=wx.FRAME_TOOL_WINDOW) self.genericinit(iconfile) else: parentclass.__init__(self) self.windowsinit(iconfile) self.leftdownpos=0,0 #wx.EVT_MENU(menu, ID_CONFIG, self.OnConfig) #wx.EVT_MENU(menu, ID_LOG, self.OnLog) wx.EVT_MENU(menu, ID_EXIT, self.OnExit) #wx.EVT_MENU(menu, ID_RESCAN, self.OnRescan) def GoAway(self): if parentclass is wx.Frame: self.Close(True) else: self.RemoveIcon() self.Destroy() def OnConfig(self,_): print "I would do config at this point" def OnLog(self,_): print "I would do log at this point" def OnHelp(self,_): print "I would do help at this point" def OnRescan(self, _): print "I would do rescan at this point" def OnExit(self,_): self.mw.Close(True) def OnRButtonUp(self, evt=None): if parentclass is wx.Frame: self.PopupMenu(self.menu, evt.GetPosition()) else: self.PopupMenu(self.menu) def OnLButtonUp(self, evt=None): if self.leftdownpos is None: return # cleared out by motion stuff if self.mw.IsShown(): self.mw.Show(False) else: self.mw.Show(True) self.mw.Raise() def OnLeftDown(self, evt): if guihelper.IsMSWindows(): self.leftdownpos=0 else: self.leftdownpos=evt.GetPosition() self.motionorigin=self.leftdownpos def OnMouseMotion(self, evt): if not evt.Dragging(): return if evt.RightIsDown() or evt.MiddleIsDown(): return if not evt.LeftIsDown(): return self.leftdownpos=None x,y=evt.GetPosition() xdelta=x-self.motionorigin[0] ydelta=y-self.motionorigin[1] screenx,screeny=self.GetPositionTuple() self.MoveXY(screenx+xdelta, screeny+ydelta) def windowsinit(self, iconfile): bitmap=wx.Bitmap(guihelper.getresourcefile(iconfile), wx.BITMAP_TYPE_PNG) icon=wx.EmptyIcon() icon.CopyFromBitmap(bitmap) self.SetIcon(icon, "BitFling") wx.EVT_TASKBAR_RIGHT_UP(self, self.OnRButtonUp) wx.EVT_TASKBAR_LEFT_UP(self, self.OnLButtonUp) #wx.EVT_TASKBAR_MOVE(self, self.OnMouseMotion) wx.EVT_TASKBAR_LEFT_DOWN(self, self.OnLeftDown) def genericinit(self, iconfile): self.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) bitmap=wx.Bitmap(guihelper.getresourcefile(iconfile), wx.BITMAP_TYPE_PNG) bit=wx.StaticBitmap(self, -1, bitmap) self.Show(True) wx.EVT_RIGHT_UP(bit, self.OnRButtonUp) wx.EVT_LEFT_UP(bit, self.OnLButtonUp) wx.EVT_MOTION(bit, self.OnMouseMotion) wx.EVT_LEFT_DOWN(bit, self.OnLeftDown) self.bit=bit class ConfigPanel(wx.Panel, wx.lib.mixins.listctrl.ColumnSorterMixin): def __init__(self, mw, parent, id=-1): wx.Panel.__init__(self, parent, id) self.mw=mw vbs=wx.BoxSizer(wx.VERTICAL) # General bs=wx.StaticBoxSizer(wx.StaticBox(self, -1, "General"), wx.HORIZONTAL) bs.Add(wx.StaticText(self, -1, "Fingerprint"), 0, wx.ALL|wx.ALIGN_CENTRE_VERTICAL, 5) self.fingerprint=wx.TextCtrl(self, -1, "a", style=wx.TE_READONLY, size=(300,-1)) bs.Add(self.fingerprint, 0, wx.EXPAND|wx.ALL|wx.ALIGN_CENTRE_VERTICAL, 5) bs.Add(wx.StaticText(self, -1, ""), 0, wx.ALL, 5) # spacer bs.Add(wx.StaticText(self, -1, "Port"), 0, wx.ALL|wx.ALIGN_CENTRE_VERTICAL, 5) self.porttext=wx.StaticText(self, -1, "") bs.Add(self.porttext, 0, wx.ALL|wx.ALIGN_CENTRE_VERTICAL, 5) vbs.Add(bs, 0, wx.EXPAND|wx.ALL, 5) # authorization bs=wx.StaticBoxSizer(wx.StaticBox(self, -1, "Authorization"), wx.VERTICAL) hbs=wx.BoxSizer(wx.HORIZONTAL) butadd=wx.Button(self, wx.NewId(), "Add ...") hbs.Add(butadd, 0, wx.ALL|wx.ALIGN_CENTRE_VERTICAL, 5) hbs.Add(wx.StaticText(self, -1, ""), 0, wx.ALL, 5) # spacer self.butedit=wx.Button(self, wx.NewId(), "Edit ...") self.butedit.Enable(False) hbs.Add(self.butedit, 0, wx.ALL|wx.ALIGN_CENTRE_VERTICAL, 5) hbs.Add(wx.StaticText(self, -1, ""), 0, wx.ALL, 5) # spacer self.butdelete=wx.Button(self, wx.NewId(), "Delete") self.butdelete.Enable(False) hbs.Add(self.butdelete, 0, wx.ALL|wx.ALIGN_CENTRE_VERTICAL, 5) bs.Add(hbs, 0, wx.EXPAND|wx.ALL, 5) wx.EVT_BUTTON(self, butadd.GetId(), self.OnAddAuth) wx.EVT_BUTTON(self, self.butedit.GetId(), self.OnEditAuth) wx.EVT_BUTTON(self, self.butdelete.GetId(), self.OnDeleteAuth) # and the authorization listview self.authlist=wx.ListCtrl(self, wx.NewId(), style=wx.LC_REPORT|wx.LC_SINGLE_SEL) self.authlist.InsertColumn(0, "User") self.authlist.InsertColumn(1, "Allowed Addresses") self.authlist.InsertColumn(2, "Expires") self.authlist.SetColumnWidth(0, 300) self.authlist.SetColumnWidth(1, 300) self.authlist.SetColumnWidth(2, 100) bs.Add(self.authlist, 1, wx.EXPAND|wx.ALL, 5) vbs.Add(bs, 1, wx.EXPAND|wx.ALL, 5) self.itemDataMap={} wx.lib.mixins.listctrl.ColumnSorterMixin.__init__(self,3) wx.EVT_LIST_ITEM_ACTIVATED(self.authlist, self.authlist.GetId(), self.OnEditAuth) wx.EVT_LIST_ITEM_SELECTED(self.authlist, self.authlist.GetId(), self.OnAuthListItemFondled) wx.EVT_LIST_ITEM_DESELECTED(self.authlist, self.authlist.GetId(), self.OnAuthListItemFondled) wx.EVT_LIST_ITEM_FOCUSED(self.authlist, self.authlist.GetId(), self.OnAuthListItemFondled) # devices bs=wx.StaticBoxSizer(wx.StaticBox(self, -1, "Devices"), wx.VERTICAL) buttoggle=wx.Button(self, wx.NewId(), "Toggle Allowed") bs.Add(buttoggle, 0, wx.ALL, 5) self.devicelist=wx.ListCtrl(self, wx.NewId(), style=wx.LC_REPORT|wx.LC_SINGLE_SEL) self.devicelist.InsertColumn(0, "Allowed") self.devicelist.InsertColumn(1, "Name") self.devicelist.InsertColumn(2, "Available") self.devicelist.InsertColumn(3, "Description") self.devicelist.SetColumnWidth(0, 100) self.devicelist.SetColumnWidth(1, 300) self.devicelist.SetColumnWidth(2, 100) self.devicelist.SetColumnWidth(3, 300) bs.Add(self.devicelist, 1, wx.EXPAND|wx.ALL, 5) vbs.Add(bs, 1, wx.EXPAND|wx.ALL, 5) self.setupauthorization() self.SortListItems() self.SetSizer(vbs) self.SetAutoLayout(True) def _updateauthitemmap(self, itemnum): pos=-1 if itemnum in self.itemDataMap: # find item by looking for ItemData, and set pos # to corresponding pos in list for i in range(self.authlist.GetItemCount()): if self.authlist.GetItemData(i)==itemnum: pos=i break assert pos!=-1 # clear the is connection allowed cache self.mw.icacache={} v=self.mw.authinfo[itemnum] username=v[0] expires=v[2] addresses=" ".join(v[3]) if pos<0: pos=self.authlist.GetItemCount() self.authlist.InsertStringItem(pos, username) else: self.authlist.SetStringItem(pos, 0, username) self.authlist.SetStringItem(pos, 2, `expires`) self.authlist.SetStringItem(pos, 1, addresses) self.authlist.SetItemData(pos, itemnum) self.itemDataMap[itemnum]=(username, addresses, expires) def GetListCtrl(self): "Used by the ColumnSorter mixin" return self.authlist def setupauthorization(self): dict={} items=[] for i in range(1000): if self.mw.config.HasEntry("user-"+`i`): username,password,expires,addresses=self.mw.config.Read("user-"+`i`).split(":") expires=int(expires) addresses=addresses.split() dict[i]=username,password,expires,addresses items.append(i) self.mw.authinfo=dict for i in items: self._updateauthitemmap(i) def OnAddAuth(self,_): dlg=AuthItemDialog(self, "Add Entry") if dlg.ShowModal()==wx.ID_OK: username,password,expires,addresses=dlg.GetValue() for i in range(1000): if i not in self.mw.authinfo: self.mw.config.Write("user-"+`i`, "%s:%s:%d:%s" % (username, password, expires, " ".join(addresses))) self.mw.config.Flush() self.mw.authinfo[i]=username,password,expires,addresses self._updateauthitemmap(i) self.SortListItems() break dlg.Destroy() def OnDeleteAuth(self, _): item=self._getselectedlistitem(self.authlist) key=self.authlist.GetItemData(item) del self.mw.authinfo[key] self.authlist.DeleteItem(item) self.mw.config.DeleteEntry("user-"+`key`) self.mw.config.Flush() def _getselectedlistitem(self, listctrl): "Finds the selected item in a listctrl since the wx methods don't actually work" i=-1 while True: nexti=listctrl.GetNextItem(i, state=wx.LIST_STATE_SELECTED) if nexti<0: break i=nexti return i return None def OnAuthListItemFondled(self, _): "Called whenever list items are selected, unselectected or similar fondling" selitem=self._getselectedlistitem(self.authlist) self.butedit.Enable(selitem is not None) self.butdelete.Enable(selitem is not None) def OnEditAuth(self, _): "Called to edit the currently selected entry" item=self._getselectedlistitem(self.authlist) key=self.authlist.GetItemData(item) username,password,expires,addresses=self.mw.authinfo[key] dlg=AuthItemDialog(self, "Edit Entry", username=username, password=password, expires=expires, addresses=addresses) if dlg.ShowModal()==wx.ID_OK: username,password,expires,addresses=dlg.GetValue() self.mw.authinfo[key]=username,password,expires,addresses self._updateauthitemmap(key) dlg.Destroy() class AuthItemDialog(wx.Dialog): _password_sentinel="\x01\x02\x03\x04\x05\x06\x07\x08" # magic value used to detect if user has changed the field def __init__(self, parent, title, username="New User", password="", expires=0, addresses=[]): wx.Dialog.__init__(self, parent, -1, title, style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER) p=self gs=wx.FlexGridSizer(4, 2, 5, 5) gs.AddGrowableCol(1) gs.AddGrowableRow(3) gs.Add(wx.StaticText(p, -1, "Username/Email")) self.username=wx.TextCtrl(self, -1, username) gs.Add(self.username,0, wx.EXPAND) gs.Add(wx.StaticText(p, -1, "Password")) self.password=wx.TextCtrl(self, -1, "", style=wx.TE_PASSWORD) self.origpassword=password if len(password): self.password.SetValue(self._password_sentinel) gs.Add(self.password, 0, wx.EXPAND) gs.Add(wx.StaticText(p, -1, "Expires")) self.expires=wx.lib.masked.textctrl.TextCtrl(p, -1, "", autoformat="EUDATETIMEYYYYMMDD.HHMM") gs.Add(self.expires) gs.Add(wx.StaticText(p, -1, "Allowed Addresses")) self.addresses=wx.TextCtrl(self, -1, "\n".join(addresses), style=wx.TE_MULTILINE) gs.Add(self.addresses, 1, wx.EXPAND) vbs=wx.BoxSizer(wx.VERTICAL) vbs.Add(gs,1, wx.EXPAND|wx.ALL, 5) vbs.Add(wx.StaticLine(self, -1, style=wx.LI_HORIZONTAL), 0, wx.EXPAND|wx.ALL, 5) vbs.Add(self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.HELP), 0, wx.ALIGN_CENTER|wx.ALL, 5) self.SetSizer(vbs) vbs.Fit(self) def GenPassword(self, string): # random salt salt="".join([chr(random.randint(0,127)) for x in range(8)]) saltstr="".join(["%02x" % (ord(x),) for x in salt]) # we use a sha of the salt followed by the string val=sha.new(salt+string) # return generated password as $ seperated hex strings return "$".join([saltstr, val.hexdigest()]) def GetValue(self): # ::TODO:: ensure no colons in username or addresses # figure out password if self.password.GetValue()!=self._password_sentinel: password=self.GenPassword(self.password.GetValue()) else: password=self.origpassword return [self.username.GetValue(), password, 0, self.addresses.GetValue().split()] class MainWindow(wx.Frame): def __init__(self, parent, id, title): self.taskwin=None # set later wx.Frame.__init__(self, parent, id, title, style=wx.RESIZE_BORDER|wx.SYSTEM_MENU|wx.CAPTION) sys.excepthook=self.excepthook self.authinfo={} # updated by config panel self.icacache={} # used by IsConnectionAllowed # Establish config stuff cfgstr='bitfling' if guihelper.IsMSWindows(): cfgstr="BitFling" # nicely capitalized on Windows self.config=wx.Config(cfgstr, style=wx.CONFIG_USE_LOCAL_FILE) # self.config.SetRecordDefaults(True) # for help to save prefs wx.GetApp().SetAppName(cfgstr) wx.GetApp().SetVendorName(cfgstr) self.setuphelp() wx.EVT_CLOSE(self, self.CloseRequested) panel=wx.Panel(self, -1) bs=wx.BoxSizer(wx.VERTICAL) self.nb=wx.Notebook(panel, -1) bs.Add(self.nb, 1, wx.EXPAND|wx.ALL, 5) bs.Add(wx.StaticLine(panel, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5) gs=wx.GridSizer(1,4, 5, 5) for name in ("Rescan", "Hide", "Help", "Exit" ): but=wx.Button(panel, wx.NewId(), name) setattr(self, name.lower(), but) gs.Add(but) bs.Add(gs,0,wx.ALIGN_CENTRE|wx.ALL, 5) panel.SetSizer(bs) panel.SetAutoLayout(True) # the notebook pages self.configpanel=ConfigPanel(self, self.nb) self.nb.AddPage(self.configpanel, "Configuration") self.lw=guihelper.LogWindow(self.nb) self.nb.AddPage(self.lw, "Log") wx.EVT_BUTTON(self, self.hide.GetId(), self.OnHideButton) wx.EVT_BUTTON(self, self.help.GetId(), self.OnHelpButton) wx.EVT_BUTTON(self, self.exit.GetId(), self.OnExitButton) EVT_XMLSERVER(self, self.OnXmlServerEvent) self.xmlrpcserver=None wx.CallAfter(self.StartIfICan) def setuphelp(self): """Does all the nonsense to get help working""" import wx.html # Add the Zip filesystem wx.FileSystem_AddHandler(wx.ZipFSHandler()) # Get the help working self.helpcontroller=wx.html.HtmlHelpController() self.helpcontroller.AddBook(guihelper.getresourcefile("bitpim.htb")) self.helpcontroller.UseConfig(self.config, "help") # now context help # (currently borken) # self.helpprovider=wx.HelpControllerHelpProvider(self.helpcontroller) # wx.HelpProvider_Set(provider) def IsConnectionAllowed(self, peeraddr, username=None, password=None): """Verifies if a connection is allowed If username and password are supplied (as should be the case if calling this method before executing some code) then they are checked as being from a valid address as well. If username and password are not supplied then this method checks if any of the authentication rules allow a connection from the peeraddr. This form is used immediately after calling accept() on a socket, but before doing anything else.""" # Note that this method is not called in the main thread, and any variables could be # updated underneath us. Be threadsafe and only use atomic methods on shared data! v=(peeraddr[0], username, password) if username is not None and password is None: self.Log("%s: No password supplied for user %s" % (peeraddr, `username`)) assert False, "No password supplied" return False # not allowed to have None as password print "ica of "+`v` val=self.icacache.get(v, None) if val is not None: allowed, expires = val if allowed: if self._has_expired(expires): msg="Connection from %s no longer allowed due to expiry" % (peeraddr[0],) if username is not None: msg+=". Username "+`username` self.Log(msg) return False return True return False ret_allowed=False ret_expiry=0 # an expiry of zero is infinite, so this will be overridden by any specific expiries for uname, pwd, expires, addresses in self.authinfo.values(): # values() is threadsafe # do any of the addresses match? if not self._does_address_match(peeraddr[0], addresses): continue # check username/password if username supplied if username is not None: if username!=uname: continue # check password if not self._verify_password(password, pwd): self.Log("Wrong password supplied for user %s from %s" % (`username`, peeraddr[0])) continue # remember expiry value (largest value) ret_expiry=max(ret_expiry, expires) ret_allowed=True if not ret_allowed: if username is not None: self.Log("No valid credentials for user %s from %s" % (username, peeraddr[0])) else: self.Log("No defined users for address "+`peeraddr`) # recurse so that correct log messages about expiry get generated self.icacache[v]=ret_allowed, ret_expiry return self.IsConnectionAllowed(peeraddr, username, password) def _verify_password(self, password, pwd): """Returns True if password matches pwd @param password: password supplied by user @param pwd: password as we store it (salt $ hash)""" salt,hash=pwd.split("$", 1) # turn salt back into binary x="" for i in range(0, len(salt), 2): x+=chr(int(salt[i:i+2], 16)) salt=x # we do this silly string stuff to avoid issues with encoding - it only works for iso 8859-1 str=[] str.extend([ord(x) for x in salt]) str.extend([ord(x) for x in password]) val=sha.new("".join([chr(x) for x in str])) print password, pwd, val.hexdigest(), val.hexdigest()==hash return val.hexdigest()==hash def _does_address_match(self, peeraddr, addresses): """Returns if the peeraddr matches any of the supplied addresses""" # note this function can be called from any thread. do not access any data for addr in addresses: # the easy case if peeraddr==addr: return True # is addr a glob pattern? if '*' in addr or '?' in addr or '[' in addr: if fnmatch.fnmatch(peeraddr, addr): return True # ::TODO:: addr/bits style checking - see Python cookbook 10.5 for code # ok, do dns lookup on it ips=[] try: ips=socket.getaddrinfo(addr, None) except: pass for _, _, _, _, ip in ips: if peeraddr==ip[0]: return True return False def _has_expired(self, expires): if expires==0: return False if time.time()>expires: return True return False def CloseRequested(self, evt): if evt.CanVeto(): self.Show(False) evt.Veto() return self.taskwin.GoAway() evt.Skip() sys.excepthook=sys.__excepthook__ def OnXmlServerEvent(self, msg): if msg.cmd=="log": self.Log(msg.data) elif msg.cmd=="logexception": self.LogException(msg.data) else: assert False, "bad message "+`msg` pass def OnExitButton(self, _): self.Close(True) def OnHideButton(self, _): self.Show(False) def OnHelpButton(self, _): import helpids self.helpcontroller.Display(helpids.ID_BITFLING) def Log(self, text): if thread.get_ident()!=guithreadid: wx.PostEvent(self, XmlServerEvent(cmd="log", data=text)) else: self.lw.log(text) def LogException(self, exc): if thread.get_ident()!=guithreadid: # need to send it to guithread wx.PostEvent(self, XmlServerEvent(cmd="log", data="Exception in thread "+threading.currentThread().getName())) wx.PostEvent(self, XmlServerEvent(cmd="logexception", data=exc)) else: self.lw.logexception(exc) def excepthook(self, *args): """Replacement exception handler that sends stuff to our log window""" self.LogException(args) def GetCertificateFilename(self): """Return certificate filename By default $HOME (or My Documents) / .bitfling.key but can be overridden with "certificatefile" config key""" if guihelper.IsMSWindows(): # we want subdir of my documents on windows # nice and painful from win32com.shell import shell, shellcon path=shell.SHGetFolderPath(0, shellcon.CSIDL_PERSONAL, None, 0) path=os.path.join(path, ".bitfling.key") else: path=os.path.expanduser("~/.bitfling.key") return self.config.Read("certificatefile", path) def StartIfICan(self): certfile=self.GetCertificateFilename() if not os.path.isfile(certfile): wx.BeginBusyCursor(wx.StockCursor(wx.CURSOR_ARROWWAIT)) bi=wx.BusyInfo("Creating BitFling host certificate and keys") try: generate_certificate(certfile) if not os.path.isfile(certfile): # ::TODO:: report that we failed certfile=None finally: del bi wx.EndBusyCursor() port=self.config.ReadInt("port", 12652) if port<1 or port>65535: port=None host=self.config.Read("bindaddress", "") if certfile is None or port is None: return self.Log("Starting on port "+`port`) key=paramiko.DSSKey.from_private_key_file(certfile) fp=paramiko.util.hexify(key.get_fingerprint()) self.configpanel.fingerprint.SetValue(fp) self.configpanel.porttext.SetLabel(`port`) self.configpanel.GetSizer().Layout() self.xmlrpcserver=BitFlingService(self, host, port, key) self.xmlrpcserver.setDaemon(True) self.xmlrpcserver.start() def generate_certificate(outfile): key=paramiko.DSSKey.generate() key.write_private_key_file(outfile, None) class XMLRPCService(xmlrpcstuff.Server): def __init__(self, mainwin, host, port, servercert): self.mainwin=mainwin xmlrpcstuff.Server.__init__(self, host, port, servercert) def OnLog(self, msg): wx.PostEvent(self.mainwin, XmlServerEvent(cmd="log", data=msg)) def OnLogException(self, exc): wx.PostEvent(self.mainwin, XmlServerEvent(cmd="logexception", data=exc)) def OnNewAccept(self, clientaddr): return self.mainwin.IsConnectionAllowed(clientaddr) def OnNewUser(self, clientaddr, username, password): return self.mainwin.IsConnectionAllowed(clientaddr, username, password) def OnMethodDispatch(self, method, params, username, clientaddr): method="exp_"+method if not hasattr(self, method): raise Fault(3, "No such method") context={ 'username': username, 'clientaddr': clientaddr } return getattr(self, method)(*params, **{'context': context}) class BitFlingService(XMLRPCService): def __init__(self, mainwin, host, port, servercert): XMLRPCService.__init__(self, mainwin, host, port, servercert) self.handles={} def stashhandle(self, context, comm): for i in range(10000): if i not in self.handles: self.handles[i]=[context, comm] return i def gethandle(self, context, num): # ::TODO:: check context has access return self.handles[num][1] # Only methods begining with exp are exported to XML-RPC def exp_scan(self, context): if usb is None: return comscan.comscan() else: return usbscan.usbscan()+comscan.comscan() def exp_getversion(self, context): return version.description def exp_deviceopen(self, port, baud, timeout, hardwareflow, softwareflow, context): # ::TODO:: None is pointer to log object return self.stashhandle(context, commport.CommConnection(None, port, baud, timeout, hardwareflow, softwareflow)) def exp_deviceclose(self, handle, context): comm=self.gethandle(context, handle) comm.close() del self.handles[handle] return True def exp_devicesetbaudrate(self, handle, rate, context): return self.gethandle(context, handle).setbaudrate(rate) def exp_devicesetdtr(self, handle, dtr, context): return self.gethandle(context, handle).setdtr(dtr) def exp_devicesetrts(self, handle, rts, context): return self.gethandle(context, handle).setrts(rts) def exp_devicewrite(self, handle, data, context): self.gethandle(context, handle).write(data.data) return len(data.data) def exp_devicesendatcommand(self, handle, atcommand, ignoreerror, context): "Special handling for empty lists and exceptions" try: res=self.gethandle(context, handle).sendatcommand(atcommand.data, ignoreerror=ignoreerror) if len(res)==0: res=1 except: res=0 return res def exp_devicereaduntil(self, handle, char, numfailures, context): return Binary(self.gethandle(context, handle).readuntil(char.data, numfailures=numfailures)) def exp_deviceread(self, handle, numchars, context): return Binary(self.gethandle(context, handle).read(numchars)) def exp_devicereadsome(self, handle, numchars, context): if numchars==-1: numchars=None return Binary(self.gethandle(context, handle).readsome(log=True,numchars=numchars)) def exp_devicewritethenreaduntil(self, handle, data, char, numfailures, context): return Binary(self.gethandle(context, handle).writethenreaduntil(data.data, False, char.data, False, False, numfailures)) def run(args): theApp=wx.PySimpleApp() menu=wx.Menu() #menu.Append(ID_CONFIG, "Configuration") #menu.Append(ID_LOG, "Log") #menu.Append(ID_RESCAN, "Rescan devices") menu.Append(ID_EXIT, "Exit") mw=MainWindow(None, -1, "BitFling") taskwin=MyTaskBarIcon(mw, menu) mw.taskwin=taskwin theApp.MainLoop() if __name__ == '__main__': run() bitpim-1.0.7+dfsg1/src/bitfling/client.py0000644001616600161660000000461110360354470016370 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: client.py 2741 2006-01-09 03:32:08Z sawecw $ """Code if you want to be a client of BitFling""" # Standard imports import sys from xmlrpclib import Binary # My imports import xmlrpcstuff class client: "A BitFling client" # Although we could just inherit straight from ServerProxy, this # code is here to help ensure calling convention, and in the # future deal with backwards compatibility issues. We also deal # with XMLRPC specific issues such as marshalling binary data def __init__(self, username, password, host, port, certverifier=None): "The URL should include username and password if any" self.server=xmlrpcstuff.ServerProxy(username, password, host, port, certverifier) def getversion(self): return self.server.getversion() def scan(self): return self.server.scan() def deviceopen(self, port, baud, timeout, hardwareflow, softwareflow): return self.server.deviceopen(port, baud, timeout, hardwareflow, softwareflow) def deviceclose(self, handle): return self.server.deviceclose(handle) def devicesetbaudrate(self, handle, rate): return self.server.devicesetbaudrate(handle, rate) def devicesetdtr(self, handle, dtr): return self.server.devicesetdtr(handle, dtr) def devicesetrts(self, handle, rts): return self.server.devicesetrts(handle, rts) def devicewrite(self, handle, data): return self.server.devicewrite(handle, Binary(data)) def devicesendatcommand(self, handle, atcommand, ignoreerror): return self.server.devicesendatcommand(handle, Binary(atcommand), ignoreerror) def devicereaduntil(self, handle, char, numfailures): return self.server.devicereaduntil(handle, Binary(char), numfailures).data def deviceread(self, handle, numchars): return self.server.deviceread(handle, numchars).data def devicereadsome(self, handle, numchars): return self.server.devicereadsome(handle, numchars).data def devicewritethenreaduntil(self, handle, data, char, numfailures): return self.server.devicewritethenreaduntil(handle, Binary(data), Binary(char), numfailures).data bitpim-1.0.7+dfsg1/src/bitfling/__init__.py0000644001616600161660000000017210016344005016636 0ustar amuamu# $Id: __init__.py 962 2004-02-23 09:29:41Z rogerb $ # This file does nothing except establish this directory as a module bitpim-1.0.7+dfsg1/src/bitfling/version.py0000644001616600161660000000325510212243155016573 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: version.py 2174 2005-03-05 05:41:01Z sawecw $ """Information about BitFling version number""" import time name="BitFling" version="0.1" release=0 # when rereleases of the same version happen, this gets incremented testver=2 # value of zero is non-test build versionstring=version if testver>0: versionstring+="-test"+`testver` if release>0: versionstring+="-"+`release` # dotted quad version as used on Windows (a.b.c.d where all must be digits only) # we use major.minor.point.last # last is <1000 for test releases, and 1000+release for real releases x=[int(x) for x in version.split(".")] if x[1]<10: # ie .6 not .62 x[1]=x[1]*10 assert x[1]>=10 and x[1]<=99 x.append(x[1]%10) # we don't normalise (ie 0.6 is left as 0.60 because 0.62 was shipped as 0.62.0.0 and 0.7 as 0.7.0.0 is less than that) # we can only fix this once the major version number changes # x[1]=x[1]/10 if testver: x.append(testver) else: x.append(1000+release) dqver=x[:] del x dqverstr=".".join([`x` for x in dqver]) author="Roger Binns" author_email="rogerb@users.sourceforge.net" url="http://bitpim.sourceforge.net" description="BitFling "+versionstring copyright="(C) 2004 Roger Binns and others - see http://bitpim.sf.net" if __name__=='__main__': # generated for the benefit of the help # purposely missing " around values print "#define VERSION", versionstring print "#define DATENOW", time.strftime("%d %B %Y") bitpim-1.0.7+dfsg1/src/bp_cli.py0000644001616600161660000004340210760441440014543 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2007 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: bp_cli.py 4599 2008-02-25 04:25:04Z djpham $ """Provide Command Line Interface (CLI) functionality """ from __future__ import with_statement # System modules import fnmatch import os import re # BitPim modules import bp_config import phones.com_brew as com_brew import common import commport import phones # Constants InvalidCommand_Error=1 NotImplemented_Error=2 InvalidDir_Error=3 DirExists_Error=4 _commands=frozenset(('ls', 'll', 'cp', 'mkdir', 'cli', 'rm', 'rmdir')) wildcards=re.compile('.*[\*+|\?+]') def valid_command(arg): """Check of this arg is a valid command or not @param arg: input arg, most likely passed from command line @returns: T if this is a valid command, F otherwise """ global _commands return arg.split(None)[0] in _commands class PhoneModelError(Exception): pass class CLI(object): """BitPim Command Line Interface implementation""" def __init__(self, arg, file_in, file_out, file_err, config_filename=None, comm_port=None, phone_model=None): """Constructor @param arg: command string including the command and its argument @param file_in: input stream file object @param file_out: output stream file object @param file_err: error strean file object @param config_filename: use this config file instead of the default @param comm_port: string name of the comm port to use (default to config file) @param phone_model: string phone model to use (default to config file) """ self.OK=False self._inCLI=False try: _cmd_line=arg.split(None) self.cmd=_cmd_line[0] self.args=_cmd_line[1:] self.config=bp_config.Config(config_filename) _commport=comm_port if comm_port else self.config.Read("lgvx4400port", None) _phonemodel=phone_model if phone_model else self.config.Read("phonetype", None) if os.environ.get('PHONE_FS', None): # running in BREW FS debug/sim mode self.commport=None else: self.commport=commport.CommConnection(self, _commport) try: self.phonemodule=common.importas(phones.module(_phonemodel)) except KeyError: raise PhoneModelError self.phone=self.phonemodule.Phone(self, self.commport) self._rootdir='' self._pwd=self._rootdir self._in=file_in self._out=file_out self._err=file_err # initialize the Brew file cache com_brew.file_cache=com_brew.FileCache(self.config.Read('path', '')) except common.CommsOpenFailure: file_err.write('Error: Failed to open comm port %s\n'%_commport) except PhoneModelError: file_err.write('Error: Phone Model %s not available\n'%_phonemodel) else: self.OK=True _phone_prefix='phone:' _phone_prefix_len=len(_phone_prefix) def _parse_args(self, args, force_phonefs=False): """Parse the args for a list of input and out args @param args: input agrs @returns: a dict that has 2 keys: 'source' and 'dest'. 'source' has a list of files and/or directories. 'dest' is either a file or dir. """ _res=[] for _item in args: if _item.startswith(self._phone_prefix): _dirname=_item[self._phone_prefix_len:] _phonefs=True else: _dirname=_item _phonefs=force_phonefs if _phonefs: if _dirname.startswith('/'): # absolute path _dirname=self.phone.join(self._rootdir, _dirname[1:]) else: _dirname=self.phone.join(self._pwd, _dirname) # check for wildcards global wildcards _name=self.phone.basename(_dirname) if wildcards.match(_name): _dirname=self.phone.dirname(_dirname) _wildcard=_name else: _wildcard=None # correct path if _phonefs: _path=None else: _path=os.path.join(*_dirname.split('/')) _res.append({ 'name': _dirname, 'phonefs': _phonefs, 'wildcard': _wildcard, 'path': _path }) return _res def run(self, cmdline=None): """Execute the specified command if specified, or the one currently stored @param cmdline: string command line @returns: (T, None) if the command completed successfully, (F, error code) otherwise """ if cmdline: _cmdline=cmdline.split(None) self.cmd=_cmdline[0] self.args=_cmdline[1:] _func=getattr(self, self.cmd, None) if _func is None: self._err.write('Error: invalid command: %s\n'%self.cmd) return (False, InvalidCommand_Error) return _func(self.args) def log(self, logstr): pass def logdata(self, logstr, logdata, dataclass=None, datatype=None): pass def progress(self, pos, maxcnt, desc): "Update the progress meter" pass def ls(self, args): """Do a directory listing @param args: string directory names @returns: (True, None) if successful, (False, error code) otherwise """ _src=self._parse_args(args, force_phonefs=True) if not _src: _src=[{ 'name': self._pwd, 'phonefs': True, 'path': None, 'wildcard': None }] for _dir in _src: try: _dirlist=self.phone.getfilesystem(_dir['name']) self._out.write('%s:\n'%_dir['name']) for _,_file in _dirlist.items(): if _dir['wildcard'] is None or \ fnmatch.fnmatch(self.phone.basename(_file['name']), _dir['wildcard']): self._out.write('%s\n'%_file['name']) except (phones.com_brew.BrewNoSuchDirectoryException, phones.com_brew.BrewBadPathnameException): self._out.write('Error: cannot access %s: no such file or directory\n'%_dir['name']) self._out.write('\n') return (True, None) def ll(self, args): """Do a long dir listing command @param args: string directory names @returns: (True, None) if successful, (False, error code) otherwise """ _src=self._parse_args(args, force_phonefs=True) if not _src: _src=[{ 'name': self._pwd, 'phonefs': True, 'path': None, 'wildcard': None }] for _dir in _src: try: _dirlist=self.phone.getfilesystem(_dir['name']) self._out.write('%s:\n'%_dir['name']) _maxsize=0 _maxdatelen=0 for _,_file in _dirlist.items(): if _file.get('type', '')=='file': _maxsize=max(_maxsize, _file.get('size', 0)) _maxdatelen=max(_maxdatelen, len(_file.get('date', (0, ''))[1])) _formatstr='%%(dir)1s %%(size)%(maxsizelen)is %%(date)%(maxdatelen)is %%(name)s\n'%\ { 'maxdatelen': _maxdatelen, 'maxsizelen': len(str(_maxsize)) } for _,_file in _dirlist.items(): if _dir['wildcard'] is None or \ fnmatch.fnmatch(self.phone.basename(_file['name']), _dir['wildcard']): _strdict={ 'name': _file['name'] } if _file['type']=='file': _strdict['dir']='' _strdict['size']=str(_file['size']) else: _strdict['dir']='d' _strdict['size']='' _strdict['date']=_file.get('date', (0, ''))[1] self._out.write(_formatstr%_strdict) except (phones.com_brew.BrewNoSuchDirectoryException, phones.com_brew.BrewBadPathnameException): self._out.write('Error: cannot access %s: no such file or directory\n'%_dir['name']) self._out.write('\n') return (True, None) def _cpfilefromphone(self, filename, destdir): # copy a single file from the phone to the dest dir with open(os.path.join(destdir, self.phone.basename(filename)), 'wb') as f: f.write(self.phone.getfilecontents(filename)) self._out.write('Copied file %(srcname)s to %(dirname)s\n'% { 'srcname': filename, 'dirname': destdir}) def _cpdirfromphone(self, dirname, destdir, wildcard): # copy all files under a phone dir to the dest dir for _, _item in self.phone.listfiles(dirname).items(): if wildcard is None or \ fnmatch.fnmatch(self.phone.basename(_item['name']), wildcard): self._cpfilefromphone(_item['name'], destdir) def _cpfromphone(self, args): # copy files from the phone _destdir=args[-1]['path'] if not os.path.isdir(_destdir): self._out.write('Error: %(dirname)s is not a valid local directory.\n'% {'dirname': _destdir }) return (False, InvalidDir_Error) for _item in args[:-1]: _name=_item['name'] if self.phone.isdir(_name): # this is a dir, cp all files under it self._cpdirfromphone(_name, _destdir, _item['wildcard']) elif self.phone.isfile(_name): # this is a file, just copy it self._cpfilefromphone(_name, _destdir) else: # not sure what it is self._out.write('Error: %(name)s does not exist\n'%{'name': _name}) return (True, None) def _cpfiletophone(self, name, destdir, phonefs=False, force=False): # copy a file to the phone _filename=self.phone.join(destdir, self.phone.basename(name) if phonefs else \ os.path.basename(name)) if not force: # check if file already exists if self.phone.exists(_filename): # file exists, warn self._out.write('Phone file %(name)s exists, overwrite (y/n): '%\ { 'name': _filename }) if self._in.readline()[0].upper()!='Y': return if phonefs: # cp from phone FS to phone FS self.phone.writefile(_filename, self.phone.getfilecontents(name)) else: # local to phone FS with open(name, 'rb') as f: self.phone.writefile(_filename, f.read()) self._out.write('Copied %(filename)s to %(dirname)s.\n'%\ { 'filename': name, 'dirname': destdir }) def _cpdirtophone(self, dirname, destdir, phonefs=False): # cp a dir to the phone if phonefs: # phone FS dir for _, _item in self.phone.listfiles(dirname).items(): self._cpfiletophone(_item['name'], destdir, phonefs=True) else: # local dir for _item in os.listdir(dirname): if os.path.isfile(_item): self._cpfiletophone(_item, destdir, phonefs=False) def _cptophone(self, args): # copy files to the phone _destdir=args[-1]['name'] if not self.phone.isdir(_destdir): self._out.write('Error: phone directory %(dirname)s is not exist.\n'%\ { 'dirname': _destdir }) return (False, InvalidDir_Error) for _item in args[:-1]: if _item['phonefs']: # this one on the phone _name=_item['name'] if self.phone.isdir(_name): self._cpdirtophone(_name, _destdir, phonefs=True) elif self.phone.isfile(_name): self._cpfiletophone(_name, _destdir, phonefs=True) else: self._out.write('Error: %(name)s does not exist.\n'%\ { 'name': _name }) else: # this one on the PC _name=_item['path'] if os.path.isdir(_name): self._cpdirtophone(_name, _destdir, phonefs=False) elif os.path.isfile(_name): self._cpfiletophone(_name, _destdir, phonefs=False) else: self._out.write('Error: %(name) does not exist.\n'%\ { 'name': _name }) return (True, None) def cp(self, args): """Transfer files between the phone filesystem and local filesystem @param args: string dir names @returns: (True, None) if successful, (False, error code) otherwise """ _args=self._parse_args(args, force_phonefs=False) # The syntax of the last argument indicates the direction of the transfer # If the last arg is a phone FS: copy to the phone # If the last arg is not a phone FS: copy from the phone. if _args[-1]['phonefs']: # copy to the phone return self._cptophone(_args) else: # copy from the phone return self._cpfromphone(_args) def mkdir(self, args): """Create one or more dirs on the phone FS. @param args: string dir names @returns: (True, None) if successful, (False, error code) otherwise """ _src=self._parse_args(args, force_phonefs=True) for _dir in _src: try: self.phone.mkdir(_dir['name']) except phones.com_brew.BrewDirectoryExistsException: self._out.write('Error: dir %(name)s exists.\n'% \ { 'name': _dir['name'] }) except phones.com_brew.BrewNoSuchDirectoryException: self._out.write('Error: Failed to create dir %(name)s.\n'%\ { 'name': _dir['name'] }) return (True, None) def cli(self, _): """Run a primitive interactive CLI sesssion. @params _: don't care @returns: always (True, None) """ if self._inCLI: # we're in our shell, bail return (True, None) self._inCLI=True ## try: while True: self._out.write('BitPim>') _cmdline=self._in.readline() if _cmdline.startswith('exit'): break self.run(_cmdline) ## finally: self._inCLI=False return (True, None) def cd(self, args): """Change the current working dir on the phone FS. @param args: dir name(s), only args[0] matters. @returns: (True, None) if successful, (False, error code) otherwise """ _dirs=self._parse_args(args, force_phonefs=True) if _dirs: _dirname=_dirs[0]['name'] if _dirname=='/': _dirname=self._rootdir if self.phone.exists(_dirname): self._pwd=_dirname else: self._out.write('Invalid dir: %s\n'%_dirname) return self.pwd(args) def cdu(self, args): """Change to current working dir on the phone up one level (parent). @param _: don't care @returns: (True, None) if successful, (False, error code) otherwise """ _updir=self.phone.dirname(self._pwd) if _updir: self._pwd=_updir return self.pwd(args) def pwd(self, _): """Print the current working dir(cwd/pwd) on the phone FS. @params _: don't care @returns: (True, None) """ self._out.write("%(name)s\n"%{ 'name': self._pwd }) return (True, None) cwd=pwd def rm(self, args): """delete one or more files on the phone FS. This command does not delete local files. @param args: file names @returns: (True, None) if successful, (False, error code) otherwise. """ _filenames=self._parse_args(args, force_phonefs=True) for _item in _filenames: _name=_item['name'] if self.phone.isfile(_name): self.phone.rmfile(_name) self._out.write('File %(name)s deleted\n'%{ 'name': _name }) else: self._out.write('Invalid file: %(name)s\n'%{ 'name': _name }) def rmdir(self, args): """Delete one or more phone FS directories. This command does not delete local directories. @param args: dir names. @returns: (True, None) if successful, (False, error code) otherwise. """ _dirnames=self._parse_args(args, force_phonefs=True) for _item in _dirnames: _name=_item['name'] if self.phone.isdir(_name): # this is a dir, check for empty if self.phone.hassubdirs(_name) or \ self.phone.listfiles(_name): self._out.write('Dir %(name)s is not empty.\n'%{'name': _name }) else: self.phone.rmdirs(_name) self._out.write('Dir %(name)s deleted.\n'% { 'name': _name }) else: self._out.write('Invalid dir: %(name)s\n'%{ 'name': _name}) bitpim-1.0.7+dfsg1/src/LICENSE0000644001616600161660000004165310407371534013760 0ustar amuamu--------------------------------------------------------------------- BitPim is free software (like in "free speech") and open source. The website is http://www.bitpim.org where you can find newer versions, and get support (support is only offered if you download from bitpim.org). --------------------------------------------------------------------- The code in BitPim is copyright by several people. Please note the comments at the top of each file, as well as version control history. The BitPim code is under the GNU General Public License as detailed below. Specific permission is granted for this code to be linked to OpenSSL (this is necessary becuse the OpenSSL license is not GPL-compatible). In addition, as a special exception, the BitPim copyright holders give permission to link the code of this program with the OpenSSL library (or with modified versions of OpenSSL), and distribute linked combinations including the two. You must obey the GNU General Public License in all respects for all of the code used other than OpenSSL. If you modify any files, you may extend this exception to your version of the file, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. Please also note that some code is taken from other projects with a GPL compatible license. This is noted in the specific files. BitPim also uses several other components with GPL compatible licenses. The online help details those components, credits the authors and details the licenses. --------------------------------------------------------------------- This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. --------------------------------------------------------------------- GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS bitpim-1.0.7+dfsg1/src/call_history.py0000644001616600161660000006211010763347474016023 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: call_history.py 4601 2008-03-04 22:37:48Z djpham $ """ Code to handle Call History data storage and display. The format of the Call History is standardized. It is an object with the following attributes: folder: string (where this item belongs) datetime: string 'YYYYMMDDThhmmss' or (y,m,d,h,m,s) number: string (the phone number of this call) name: string (optional name associated with this number) duration: int (optional duration of the call in minutes) To implement Call History feature for a phone module: Add an entry into Profile._supportedsyncs: ('call_history', 'read', None), Implement the following method in your Phone class: def getcallhistory(self, result, merge): ... return result The result dict key is 'call_history'. """ # standard modules from __future__ import with_statement import copy import sha import time # wx modules import wx import wx.lib.scrolledpanel as scrolled # BitPim modules import database import guiwidgets import guihelper import helpids import phonenumber import pubsub import today import widgets #------------------------------------------------------------------------------- class CallHistoryDataobject(database.basedataobject): _knownproperties=['folder', 'datetime', 'number', 'name', 'duration' ] _knownlistproperties=database.basedataobject._knownlistproperties.copy() def __init__(self, data=None): if data is None or not isinstance(data, CallHistoryEntry): return; self.update(data.get_db_dict()) callhistoryobjectfactory=database.dataobjectfactory(CallHistoryDataobject) #------------------------------------------------------------------------------- def GetDurationStr(duration): """convert duration int into an h:mm:ss formatted string""" if duration is None: return '' else: sec=duration%60 min=duration/60 hr=min/60 min=min%60 return "%d:%02d:%02d" % (hr, min, sec) #------------------------------------------------------------------------------- class CallHistoryEntry(object): Folder_Incoming='Incoming' Folder_Outgoing='Outgoing' Folder_Missed='Missed' Folder_Data='Data' Valid_Folders=(Folder_Incoming, Folder_Outgoing, Folder_Missed, Folder_Data) _folder_key='folder' _datetime_key='datetime' _number_key='number' _name_key='name' _duration_key='duration' _unknown_datetime='YYYY-MM-DD hh:mm:ss' _id_index=0 _max_id_index=999 def __init__(self): self._data={ 'serials': [] } self._create_id() def __eq__(self, rhs): return self.folder==rhs.folder and self.datetime==rhs.datetime and\ self.number==rhs.number def __ne__(self, rhs): return self.folder!=rhs.folder or self.datetime!=rhs.datetime or\ self.number!=rhs.number def get(self): return copy.deepcopy(self._data, {}) def set(self, d): self._data={} self._data.update(d) def get_db_dict(self): return self.get() def set_db_dict(self, d): self.set(d) def _create_id(self): "Create a BitPim serial for this entry" self._data.setdefault("serials", []).append(\ {"sourcetype": "bitpim", "id": '%.3f%03d'%(time.time(), CallHistoryEntry._id_index) }) if CallHistoryEntry._id_index s=self.datetime if s: s=s[4:6]+'/'+s[6:8]+' '+s[9:11]+':'+s[11:13]+' ' else: s='**/** **:** ' if name: s+=name elif self.name: s+=self.name else: s+=phonenumber.format(self.number) return s #------------------------------------------------------------------------------- class CallHistoryWidget(scrolled.ScrolledPanel, widgets.BitPimWidget): _data_key='call_history' stat_list=("Data", "Missed", "Incoming", "Outgoing", "All") def __init__(self, mainwindow, parent): super(CallHistoryWidget, self).__init__(parent, -1) self._main_window=mainwindow self.call_history_tree_nodes={} self._parent=parent self.read_only=False self.historical_date=None self._data={} self._name_map={} pubsub.subscribe(self._OnPBLookup, pubsub.RESPONSE_PB_LOOKUP) self.list_widget=CallHistoryList(self._main_window, self._parent, self) # main box sizer vbs=wx.BoxSizer(wx.VERTICAL) # data date adjuster hbs=wx.BoxSizer(wx.HORIZONTAL) static_bs=wx.StaticBoxSizer(wx.StaticBox(self, -1, 'Historical Data Status:'), wx.VERTICAL) self.historical_data_label=wx.StaticText(self, -1, 'Current Data') static_bs.Add(self.historical_data_label, 1, wx.EXPAND|wx.ALL, 5) hbs.Add(static_bs, 1, wx.EXPAND|wx.ALL, 5) vbs.Add(hbs, 0, wx.EXPAND|wx.ALL, 5) # main stats display self.total_calls=today.HyperLinkCtrl(self, -1, ' Total Calls: 0') today.EVT_HYPERLINK_LEFT(self, self.total_calls.GetId(), self.OnNodeSelection) self.total_in=today.HyperLinkCtrl(self, -1, ' Incoming Calls: 0') today.EVT_HYPERLINK_LEFT(self, self.total_in.GetId(), self.OnNodeSelection) self.total_out=today.HyperLinkCtrl(self, -1, ' Outgoing Calls: 0') today.EVT_HYPERLINK_LEFT(self, self.total_out.GetId(), self.OnNodeSelection) self.total_missed=today.HyperLinkCtrl(self, -1, ' Missed Calls: 0') today.EVT_HYPERLINK_LEFT(self, self.total_missed.GetId(), self.OnNodeSelection) self.total_data=today.HyperLinkCtrl(self, -1, ' Data Calls: 0') today.EVT_HYPERLINK_LEFT(self, self.total_data.GetId(), self.OnNodeSelection) self.duration_all=wx.StaticText(self, -1, ' Total Duration(h:m:s): 0') self.duration_in=wx.StaticText(self, -1, ' Incoming Duration(h:m:s): 0') self.duration_out=wx.StaticText(self, -1, ' Outgoing Duration(h:m:s): 0') self.duration_data=wx.StaticText(self, -1, ' Data Duration(h:m:s): 0') self._id_dict={ self.total_calls.GetId(): self.stat_list[4], self.total_in.GetId(): self.stat_list[2], self.total_out.GetId(): self.stat_list[3], self.total_missed.GetId(): self.stat_list[1], self.total_data.GetId(): self.stat_list[0], } vbs.Add(wx.StaticText(self, -1, ''), 0, wx.ALIGN_LEFT|wx.ALL, 2) vbs.Add(self.total_calls, 0, wx.ALIGN_LEFT|wx.ALL, 2) vbs.Add(self.total_in, 0, wx.ALIGN_LEFT|wx.ALL, 2) vbs.Add(self.total_out, 0, wx.ALIGN_LEFT|wx.ALL, 2) vbs.Add(self.total_missed, 0, wx.ALIGN_LEFT|wx.ALL, 2) vbs.Add(self.total_data, 0, wx.ALIGN_LEFT|wx.ALL, 2) vbs.Add(wx.StaticText(self, -1, ''), 0, wx.ALIGN_LEFT|wx.ALL, 2) vbs.Add(self.duration_all, 0, wx.ALIGN_LEFT|wx.ALL, 2) vbs.Add(self.duration_in, 0, wx.ALIGN_LEFT|wx.ALL, 2) vbs.Add(self.duration_out, 0, wx.ALIGN_LEFT|wx.ALL, 2) vbs.Add(self.duration_data, 0, wx.ALIGN_LEFT|wx.ALL, 2) # all done self.SetSizer(vbs) self.SetAutoLayout(True) vbs.Fit(self) self.SetupScrolling() self.SetBackgroundColour(wx.WHITE) # populate data self._populate() def OnNodeSelection(self, evt): # Request to select a subnode _node=self._id_dict.get(evt.GetId(), None) if _node and self.call_history_tree_nodes.get(_node, None): self.ActivateSelf(self.call_history_tree_nodes[_node]) def populate(self, dict, force=False): if self.read_only and not force: # historical data, bail return self._data=dict.get(self._data_key, {}) self._populate() def OnInit(self): for stat in self.stat_list: self.call_history_tree_nodes[stat]=self.AddSubPage(self.list_widget, stat, self._tree.calls) def GetRightClickMenuItems(self, node): result=[] result.append((widgets.BitPimWidget.MENU_NORMAL, guihelper.ID_EXPORT_CSV_CALL_HISTORY, "Export to CSV ...", "Export the call history to a csv file")) result.append((widgets.BitPimWidget.MENU_NORMAL, guihelper.ID_DATAHISTORICAL, "Historical Data ...", "Display Historical Data")) return result def HasHistoricalData(self): return True def OnHistoricalData(self): """Display current or historical data""" if self.read_only: current_choice=guiwidgets.HistoricalDataDialog.Historical_Data else: current_choice=guiwidgets.HistoricalDataDialog.Current_Data with guihelper.WXDialogWrapper(guiwidgets.HistoricalDataDialog(self, current_choice=current_choice, historical_date=self.historical_date, historical_events=\ self._main_window.database.getchangescount(self._data_key)), True) as (dlg, retcode): if retcode==wx.ID_OK: with guihelper.MWBusyWrapper(self._main_window): current_choice, self.historical_date=dlg.GetValue() r={} if current_choice==guiwidgets.HistoricalDataDialog.Current_Data: self.read_only=False msg_str='Current Data' self.getfromfs(r) else: self.read_only=True msg_str='Historical Data as of %s'%\ str(wx.DateTimeFromTimeT(self.historical_date)) self.getfromfs(r, self.historical_date) self.populate(r, True) self.historical_data_label.SetLabel(msg_str) self.list_widget.historical_data_label.SetLabel(msg_str) def _publish_today_data(self): keys=[(x.datetime, k) for k,x in self._data.items()] keys.sort() keys.reverse() today_event_in=today.TodayIncomingCallsEvent() today_event_miss=today.TodayMissedCallsEvent() for _,k in keys: if self._data[k].folder==CallHistoryEntry.Folder_Incoming: today_event_in.append(self._data[k].summary(self._name_map.get(self._data[k].number, None)), {'id':k}) if self._data[k].folder==CallHistoryEntry.Folder_Missed: today_event_miss.append(self._data[k].summary(self._name_map.get(self._data[k].number, None)), {'id':k}) today_event_in.broadcast() today_event_miss.broadcast() def _populate(self): # lookup phone book for names for k,e in self._data.items(): if e.name: if not self._name_map.has_key(e.number): self._name_map[e.number]=e.name else: if not self._name_map.has_key(e.number): pubsub.publish(pubsub.REQUEST_PB_LOOKUP, { 'item': e.number } ) self.list_widget.populate() #update stats self.CalculateStats() # tell today 'bout it self._publish_today_data() def CalculateStats(self): total=inc=out=miss=data=0 total_d=in_d=out_d=data_d=0 for k, e in self._data.items(): total+=1 if e.duration==None: dur=0 else: dur=e.duration total_d+=dur if e.folder==CallHistoryEntry.Folder_Incoming: inc+=1 in_d+=dur elif e.folder==CallHistoryEntry.Folder_Outgoing: out+=1 out_d+=dur elif e.folder==CallHistoryEntry.Folder_Missed: miss+=1 elif e.folder==CallHistoryEntry.Folder_Data: data+=1 data_d+=dur self.total_calls.SetLabel(' Total Calls: '+`total`) self.total_in.SetLabel(' Incoming Calls: '+`inc`) self.total_out.SetLabel(' Outgoing Calls: '+`out`) self.total_missed.SetLabel(' Missed Calls: '+`miss`) self.total_data.SetLabel(' Data Calls: '+`data`) self.duration_all.SetLabel(' Total Duration(h:m:s): '+GetDurationStr(total_d)) self.duration_in.SetLabel(' Incoming Duration(h:m:s): '+GetDurationStr(in_d)) self.duration_out.SetLabel(' Outgoing Duration(h:m:s): '+GetDurationStr(out_d)) self.duration_data.SetLabel(' Data Duration(h:m:s): '+GetDurationStr(data_d)) def _OnPBLookup(self, msg): d=msg.data k=d.get('item', None) name=d.get('name', None) if k is None: return self._name_map[k]=name def getdata(self, dict, want=None): dict[self._data_key]=copy.deepcopy(self._data) def _save_to_db(self, dict): if self.read_only: return db_rr={} for k,e in dict.items(): db_rr[k]=CallHistoryDataobject(e) database.ensurerecordtype(db_rr, callhistoryobjectfactory) self._main_window.database.savemajordict(self._data_key, db_rr) def populatefs(self, dict): if self.read_only: wx.MessageBox('You are viewing historical data which cannot be changed or saved', 'Cannot Save Call History Data', style=wx.OK|wx.ICON_ERROR) else: self._save_to_db(dict.get(self._data_key, {})) return dict def getfromfs(self, result, timestamp=None): dict=self._main_window.database.\ getmajordictvalues(self._data_key, callhistoryobjectfactory, at_time=timestamp) r={} for k,e in dict.items(): ce=CallHistoryEntry() ce.set_db_dict(e) r[ce.id]=ce result.update({ self._data_key: r}) return result def merge(self, dict): if self.read_only: wx.MessageBox('You are viewing historical data which cannot be changed or saved', 'Cannot Save Call History Data', style=wx.OK|wx.ICON_ERROR) return d=dict.get(self._data_key, {}) l=[e for k,e in self._data.items()] for k,e in d.items(): if e not in l: self._data[e.id]=e self._save_to_db(self._data) self._populate() def get_selected_data(self): # return a dict of selected items res={} for sel_idx in self.list_widget._item_list.GetSelections(): k=self.list_widget._item_list.GetItemData(sel_idx) if k: res[k]=self._data[k] return res def get_data(self): return self._data #------------------------------------------------------------------------------- class CallHistoryList(wx.Panel, widgets.BitPimWidget): _by_type=0 _by_date=1 _by_number=2 def __init__(self, mainwindow, parent, stats): super(CallHistoryList, self).__init__(parent, -1) self._main_window=mainwindow self._stats=stats self.nodes={} self.nodes_keys={} self._display_filter="All" # main box sizer vbs=wx.BoxSizer(wx.VERTICAL) # data date adjuster hbs=wx.BoxSizer(wx.HORIZONTAL) static_bs=wx.StaticBoxSizer(wx.StaticBox(self, -1, 'Historical Data Status:'), wx.VERTICAL) self.historical_data_label=wx.StaticText(self, -1, 'Current Data') static_bs.Add(self.historical_data_label, 1, wx.EXPAND|wx.ALL, 5) hbs.Add(static_bs, 1, wx.EXPAND|wx.ALL, 5) vbs.Add(hbs, 0, wx.EXPAND|wx.ALL, 5) # main list column_info=[] column_info.append(("Call Type", 80, False)) column_info.append(("Date", 120, False)) column_info.append(("Number", 100, False)) column_info.append(("Duration", 80, False)) column_info.append(("Name", 130, False)) self._item_list=guiwidgets.BitPimListCtrl(self, column_info) self._item_list.ResetView(self.nodes, self.nodes_keys) vbs.Add(self._item_list, 1, wx.EXPAND|wx.ALL, 5) vbs.Add(wx.StaticText(self, -1, ' Note: Click column headings to sort data'), 0, wx.ALIGN_CENTRE|wx.BOTTOM, 10) # all done today.bind_notification_event(self.OnTodaySelectionIncoming, today.Today_Group_IncomingCalls) today.bind_notification_event(self.OnTodaySelectionMissed, today.Today_Group_MissedCalls) self.today_data=None self.SetSizer(vbs) self.SetAutoLayout(True) vbs.Fit(self) def OnSelected(self, node): for stat in self._stats.stat_list: if self._stats.call_history_tree_nodes[stat]==node: if self._display_filter!=stat: self._display_filter=stat # for some reason GetTopItem return 0 (instead of -1) # when the list is empty if self._item_list.GetItemCount(): item=self._item_list.GetTopItem() # deselect all the items when changing view while item!=-1: self._item_list.Select(item, 0) item=self._item_list.GetNextItem(item) self.populate() self._on_today_selection() return def OnTodaySelectionIncoming(self, evt): node=self._stats.call_history_tree_nodes["Incoming"] self.today_data=evt.data self.ActivateSelf(node) def OnTodaySelectionMissed(self, evt): node=self._stats.call_history_tree_nodes["Missed"] self.today_data=evt.data self.ActivateSelf(node) def _on_today_selection(self): if self.today_data and self._item_list.GetItemCount(): item=self._item_list.GetTopItem() while item!=-1: if self.today_data['id']==self._item_list.GetItemData(item): self._item_list.Select(item, 1) self._item_list.EnsureVisible(item) else: self._item_list.Select(item, 0) item=self._item_list.GetNextItem(item) self.today_data=None def GetRightClickMenuItems(self, node): result=[] result.append((widgets.BitPimWidget.MENU_NORMAL, guihelper.ID_EDITSELECTALL, "Select All", "Select All Items")) result.append((widgets.BitPimWidget.MENU_NORMAL, guihelper.ID_EDITDELETEENTRY, "Delete Selected", "Delete Selected Items")) result.append((widgets.BitPimWidget.MENU_SPACER, 0, "", "")) result.append((widgets.BitPimWidget.MENU_NORMAL, guihelper.ID_EXPORT_CSV_CALL_HISTORY, "Export to CSV ...", "Export the call history to a csv file")) result.append((widgets.BitPimWidget.MENU_NORMAL, guihelper.ID_DATAHISTORICAL, "Historical Data ...", "Display Historical Data")) return result def CanSelectAll(self): if self._item_list.GetItemCount(): return True return False def OnSelectAll(self, _): item=self._item_list.GetTopItem() while item!=-1: self._item_list.Select(item) item=self._item_list.GetNextItem(item) def HasHistoricalData(self): return self._stats.HasHistoricalData() def OnHistoricalData(self): return self._stats.OnHistoricalData() def populate(self): self.nodes={} self.nodes_keys={} index=0 for k,e in self._stats._data.items(): if self._display_filter=="All" or e.folder==self._display_filter: name=e.name if name==None or name=="": temp=self._stats._name_map.get(e.number, None) if temp !=None: name=temp else: name="" self.nodes[index]=(e.folder, e.get_date_time_str(), phonenumber.format(e.number), e.durationstr, name) self.nodes_keys[index]=k index+=1 self._item_list.ResetView(self.nodes, self.nodes_keys) def CanDelete(self): if self._stats.read_only: return False sels_idx=self._item_list.GetFirstSelected() if sels_idx==-1: return False return True def GetDeleteInfo(self): return wx.ART_DEL_BOOKMARK, "Delete Call Record" def OnDelete(self, _): if self._stats.read_only: return sels_idx=self._item_list.GetSelections() if len(sels_idx): # delete them from the data list for i,item in sels_idx.items(): del self._stats._data[self._item_list.GetItemData(item)] self._item_list.Select(item, 0) self.populate() self._stats._save_to_db(self._stats._data) self._stats.CalculateStats() def GetHelpID(self): return helpids.ID_TAB_CALLHISTORY bitpim-1.0.7+dfsg1/src/bp.py0000755001616600161660000000766410711734767013746 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2003-2006 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: bp.py 4436 2007-10-30 23:10:47Z djpham $ """Main entry point to Bitpim It invokes BitPim in gui or commandline mode as appropriate @Note: Only gui mode is supported at the moment """ from __future__ import with_statement import sys import bp_cli # only gui mode support at the moment if __debug__: def profile(filename, command): import hotshot, hotshot.stats, os file=os.path.abspath(filename) profile=hotshot.Profile(file) profile.run(command) profile.close() del profile howmany=100 stats=hotshot.stats.load(file) stats.strip_dirs() stats.sort_stats('time', 'calls') stats.print_stats(100) stats.sort_stats('cum', 'calls') stats.print_stats(100) stats.sort_stats('calls', 'time') stats.print_stats(100) sys.exit(0) if __name__ == '__main__': import sys import getopt import os.path # in production builds we don't need the stupid warnings if sys.platform=="darwin" and len(sys.argv)>1 and sys.argv[1].startswith("-psn_"): # get rid of the process serial number on mac sys.argv=sys.argv[:1]+sys.argv[2:] try: _options, _args=getopt.gnu_getopt(sys.argv[1:], 'c:d:f:p:') _invalid_args=[x for x in _args if x not in ['debug', 'bitfling'] and \ not bp_cli.valid_command(x)] if _invalid_args: raise getopt.GetoptError('Invalid argument(s): '+','.join(_invalid_args)) except getopt.GetoptError: e=sys.exc_info()[1] _invalid_args=True _error_str=e.msg if _invalid_args: # invalid/unknown arguments try: import wx import guihelper _msg='%s\nUsage: %s [-c config file]|[-d config dir] [-p comm port] [-f phone model] [CLI Command] [debug] [bitfling]\n'%(_error_str, sys.argv[0]) sys.stderr.write(_msg) # try to display an error message box _app=wx.PySimpleApp() guihelper.MessageDialog(None, _msg, 'BitPim Error', style=wx.OK|wx.ICON_ERROR) finally: sys.exit(1) _kwargs={} # check for debug flag _debug=bool(_args and 'debug' in _args) # CLI commands present? _clicmd=len(_args)==1 and bp_cli.valid_command(_args[0]) if not _debug and not _clicmd: import warnings def ignorer(*args, **kwargs): pass warnings.showwarning=ignorer # on windows we set stdout, stderr to do nothing objects otherwise there # is an error after 4kb of output class _donowt: def __getattr__(self, _): return self def __call__(self, *args, **kwargs): pass # heck, do it for all platforms sys.stdout=_donowt() sys.stderr=_donowt() for _k,_v in _options: if _k=='-d': _kwargs['config_filename']=os.path.join(_v, '.bitpim') elif _k=='-c': _kwargs['config_filename']=_v elif _k=='-p': _kwargs['comm_port']=_v elif _k=='-f': _kwargs['phone_model']=_v if _args and _clicmd: # CLI detected _cli=bp_cli.CLI(_args[0], sys.stdin, sys.stdout, sys.stderr, **_kwargs) if _cli.OK: _cli.run() elif _args and 'bitfling' in _args: import bitfling.bitfling #if True: # profile("bitfling.prof", "bitfling.bitfling.run(sys.argv)") #else: bitfling.bitfling.run(sys.argv) else: import gui #if True: # profile("bitpim.prof", "gui.run(sys.argv)") #else: gui.run(sys.argv, _kwargs) bitpim-1.0.7+dfsg1/src/vcal_calendar.py0000644001616600161660000006227611060401304016070 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: vcal_calendar.py 4708 2008-09-06 04:10:44Z djpham $ "Deals with vcard calendar import stuff" # system modules from __future__ import with_statement import contextlib import copy import datetime # site modules import wx # local modules import bpcalendar import bptime import common_calendar import guihelper import helpids import vcard module_debug=False #------------------------------------------------------------------------------- class ImportDataSource(common_calendar.ImportDataSource): # how to define, and retrieve calendar import data source message_str="Pick a vCal Calendar File" wildcard='*.vcs;*.ics' #------------------------------------------------------------------------------- class vCalendarFile(object): def __init__(self, file_name=None): self._data=[] self._file_name=file_name def _open(self, name): return file(name, 'rt') def _read_block(self, vfile): """Read a BEGIN/END block and return a dict of values/params """ global module_debug d={} _inblk=False for n,l in vfile: if n[0]=='BEGIN': _blkname=l _inblk=True _vdata=[] elif n[0]=='END' and l==_blkname: d['BEGIN-END']={ 'value': l, 'params': self._read_block(_vdata) } _inblk=False elif _inblk: _vdata.append((n, l)) else: _params={} for _item in n[1:]: _l=_item.split('=') if len(_l)==1: _params[_l[0]]=None else: _params[_l[0]]=_l[1] # Some statement, i.e. EXDATE, may occur more than once, # in such cases, place the values into the list # This may break existing cases, but we'll fix them as # users report them _val={ 'value': l, 'params': _params } if d.has_key(n[0]): # multiple statements if isinstance(d[n[0]], dict): d[n[0]]=[d[n[0]], _val] else: d[n[0]].append(_val) else: d[n[0]]=_val if module_debug: print d,'\n' return d def read(self, file_name=None): self._data=[] if file_name is not None: self._file_name=file_name if self._file_name is None: # no file name specified return try: with contextlib.closing(self._open(self._file_name)) as f: vfile=vcard.VFile(f) has_data=False for n,l in vfile: if n[0]=='BEGIN' and l=='VEVENT': has_data=True _vdata=[] elif n[0]=='END' and l=='VEVENT': has_data=False self._data.append(self._read_block(_vdata)) elif has_data: _vdata.append((n, l)) except: if __debug__: raise def _get_data(self): return copy.deepcopy(self._data) data=property(fget=_get_data) #------------------------------------------------------------------------------- class VCalendarImportData(object): _default_filter={ 'start': None, 'end': None, 'categories': None, 'rpt_events': False, 'no_alarm': False, 'ringtone': None, 'alarm_override':False, 'vibrate':False, 'alarm_value':0 } _rrule_dow={ 'SU': 0x01, 'MO': 0x02, 'TU': 0x04, 'WE': 0x08, 'TH': 0x10, 'FR': 0x20, 'SA': 0x40 } _rrule_weekday=_rrule_dow['MO']|_rrule_dow['TU']|\ _rrule_dow['WE']|_rrule_dow['TH']|\ _rrule_dow['FR'] _source_data_class=vCalendarFile def __init__(self, file_name=None): self._file_name=file_name self._data=[] self._filter=self._default_filter self.read() def _accept(self, entry): # start & end time within specified filter if entry.get('repeat', False): # repeat event # need to populate to get an accurate end date ce=bpcalendar.CalendarEntry() self._populate_entry(entry, ce) if self._filter['start'] is not None and \ ce.end[:3]self._filter['end'][:3]: # event starts after our range return False else: # single event if self._filter['start'] is not None and \ entry['start'][:3]self._filter['end'][:3] and \ entry['end'][:3]!=common_calendar.no_end_date[:3]: return False # check the catefory c=self._filter['categories'] if c is None or not len(c): # no categories specified => all catefories allowed. return True if len([x for x in entry['categories'] if x in c]): return True return False def _populate_repeat_entry(self, e, ce): # populate repeat entry data if not e.get('repeat', False) or e.get('repeat_type', None) is None: # not a repeat event return rp=bpcalendar.RepeatEntry() rp_type=e['repeat_type'] rp_interval=e.get('repeat_interval', 1) rp_interval2=e.get('repeat_interval2', 1) rp_end=e.get('repeat_end', None) rp_num=e.get('repeat_num', None) rp_dow=e.get('repeat_dow', 0) if rp_type==rp.daily: # daily event rp.repeat_type=rp.daily rp.interval=rp_interval elif rp_type==rp.weekly or rp_type==rp.monthly: rp.repeat_type=rp_type rp.interval=rp_interval rp.interval2=rp_interval2 rp.dow=rp_dow elif rp_type==rp.yearly: rp.repeat_type=rp.yearly else: # not yet supported return rp.weekstart=e.get('repeat_wkst', 'MO') # setting the repeat duration/end-date of this event if rp_end is not None: # end date specified ce.end=rp_end[:3]+ce.end[3:] elif rp_num: # num of occurrences specified _dt=ce.start[:3] for i in range(rp_num-1): _dt=rp.next_date(_dt) ce.end=_dt[:3]+ce.end[3:] else: # forever duration ce.end=common_calendar.no_end_date[:3]+ce.end[3:] # add the list of exceptions for k in e.get('exceptions', []): rp.add_suppressed(*k[:3]) # all done ce.repeat=rp def _populate_entry(self, e, ce): # populate an calendar entry with data ce.description=e.get('description', None) ce.location=e.get('location', None) v=e.get('priority', None) if v is not None: ce.priority=v if not self._filter.get('no_alarm', False) and \ not self._filter.get('alarm_override', False) and \ e.get('alarm', False): ce.alarm=e.get('alarm_value', 0) ce.ringtone=self._filter.get('ringtone', "") ce.vibrate=self._filter.get('vibrate', False) elif not self._filter.get('no_alarm', False) and \ self._filter.get('alarm_override', False): ce.alarm=self._filter.get('alarm_value', 0) ce.ringtone=self._filter.get('ringtone', "") ce.vibrate=self._filter.get('vibrate', False) ce_start=e.get('start', None) ce_end=e.get('end', None) if ce_start is None and ce_end is None: raise ValueError, "No start or end datetime" if ce_start is not None: ce.start=ce_start if ce_end is not None: ce.end=ce_end if ce_start is None: ce.start=ce.end elif ce_end is None: ce.end=ce.start ce.notes=e.get('notes', None) v=[] for k in e.get('categories', []): v.append({ 'category': k }) ce.categories=v # look at repeat self._populate_repeat_entry(e, ce) ce.allday=e.get('allday', False) def _generate_repeat_events(self, e): # generate multiple single events from this repeat event ce=bpcalendar.CalendarEntry() self._populate_entry(e, ce) l=[] new_e=e.copy() new_e['repeat']=False for k in ('repeat_type', 'repeat_interval', 'repeat_dow'): if new_e.has_key(k): del new_e[k] s_date=datetime.datetime(*self._filter['start']) e_date=datetime.datetime(*self._filter['end']) one_day=datetime.timedelta(1) this_date=s_date while this_date<=e_date: date_l=(this_date.year, this_date.month, this_date.day) if ce.is_active(*date_l): new_e['start']=date_l+new_e['start'][3:] new_e['end']=date_l+new_e['end'][3:] l.append(new_e.copy()) this_date+=one_day return l def get(self): global module_debug res={} single_rpt=self._filter.get('rpt_events', False) for k in self._data: try: if self._accept(k): if k.get('repeat', False) and single_rpt: d=self._generate_repeat_events(k) else: d=[k] for n in d: ce=bpcalendar.CalendarEntry() self._populate_entry(n, ce) res[ce.id]=ce except: if module_debug: raise return res def get_category_list(self): l=[] for e in self._data: l+=[x for x in e.get('categories', []) if x not in l] return l def set_filter(self, filter): self._filter=filter def get_filter(self): return self._filter def _conv_cat(self, v, _): return [x.strip() for x in v['value'].split(",") if len(x)] def _conv_alarm(self, v, dd): try: alarm_date=bptime.BPTime(v['value'].split(';')[0]) start_date=bptime.BPTime(dd['start']) if alarm_date.get() | Wx MO TU s=v['value'].split(' ') dd['repeat_interval']=int(s[0][1:]) dow=0 for i in range(1, len(s)): n=s[i] if n[0].isdigit(): dd['repeat_end']=bptime.BPTime(n).get() elif n[0]=='#': dd['repeat_num']=int(n[1:]) else: # day-of-week dow=dow|self._rrule_dow.get(n, 0) if dow: dd['repeat_dow']=dow dd['repeat_type']='weekly' return True def _process_monthly_rule(self, v, dd): global module_debug try: # acceptable format: MD1 # or MP1 <[1-4]+ | 1-> s=v['value'].split(' ') if s[0][:2]!='MD' and s[0][:2]!='MP': return False dd['repeat_interval2']=int(s[0][2:]) if s[0][:2]=='MP': # every nth *day of every month n=s[1] if n in ['1+', '2+', '3+', '4+', '1-']: if n[1]=='-': dd['repeat_interval']=5 else: dd['repeat_interval']=int(n[0]) else: return False dd['repeat_dow']=self._rrule_dow.get(s[2], 0) else: dd['repeat_interval']=dd['repeat_dow']=0 dd['repeat_type']='monthly' n=s[-1] if len(n)>7 and n[:8].isdigit(): # end date/time specified dd['repeat_end']=bptime.BPTime(n).get() elif n[0]=='#': dd['repeat_num']=int(n[1:]) return True except: if module_debug: raise return False def _process_yearly_rule(self, v, dd): global module_debug try: # acceptable format YM1 s=v['value'].split(' ') if s[0]!='YM1': return False n=s[-1] if len(n)>7 and n[:8].isdigit(): # end date/time specified dd['repeat_end']=bptime.BPTime(n).get() elif n[0]=='#': dd['repeat_num']=int(n[1:]) dd['repeat_type']='yearly' return True except: if module_debug: raise return False def _conv_repeat(self, v, dd): func_dict={ 'D': self._process_daily_rule, 'W': self._process_weekly_rule, 'M': self._process_monthly_rule, 'Y': self._process_yearly_rule } c=v['value'][0] return func_dict.get(c, lambda *arg: False)(v, dd) def _conv_exceptions(self, v, _): try: _val=v if isinstance(v, (list, tuple)) else [v] r=[] for _item in _val: for n in _item['value'].split(';'): r.append(bptime.BPTime(n).get()) return r except: if __debug__: raise return [] _calendar_keys=[ ('CATEGORIES', 'categories', _conv_cat), ('DESCRIPTION', 'notes', _conv_str), ('DTSTART', 'start', _conv_date), ('DTEND', 'end', _conv_date), ('LOCATION', 'location', _conv_str), ('PRIORITY', 'priority', _conv_priority), ('SUMMARY', 'description', _conv_str), ('AALARM', 'alarm', _conv_alarm), ('DALARM', 'alarm', _conv_alarm), ('RRULE', 'repeat', _conv_repeat), ('EXDATE', 'exceptions', _conv_exceptions), ] def _convert(self, vcal, d): global module_debug for i in vcal: try: dd={'start': None, 'end': None } for j in self._calendar_keys: if i.has_key(j[0]): k=i[j[0]] if j[2] is not None: dd[j[1]]=j[2](self, k, dd) else: dd[j[1]]=k['value'] if dd['start'] is None and dd['end'] is None: # no start or end, drop this one continue if dd['start'] is None: dd['start']=dd['end'] elif dd['end'] is None: dd['end']=dd['start'] if dd.get('allday', False) and dd['end']>dd['start']: # All day event, adjust the end time as necessary dd['end']=(bptime.BPTime(dd['end'])-\ bptime.timedelta(days=1)).get()[:3]+(0, 0) if module_debug: print dd d.append(dd) except: if module_debug: raise def get_display_data(self): cnt=0 res={} single_rpt=self._filter.get('rpt_events', False) for k in self._data: if self._accept(k): if k.get('repeat', False) and single_rpt: d=self._generate_repeat_events(k) else: d=[k.copy()] for n in d: if self._filter.get('no_alarm', False): n['alarm']=False res[cnt]=n cnt+=1 return res def get_file_name(self): if self._file_name is not None: return self._file_name return '' def read(self, file_name=None, update_dlg=None): if file_name is not None: self._file_name=file_name if self._file_name is None: # no file name specified return v=self._source_data_class(self._file_name) v.read() self._convert(v.data, self._data) #------------------------------------------------------------------------------- class VcalImportCalDialog(common_calendar.PreviewDialog): _column_labels=[ ('description', 'Description', 400, None), ('start', 'Start', 150, common_calendar.bp_date_str), ('end', 'End', 150, common_calendar.bp_date_str), ('repeat_type', 'Repeat', 80, common_calendar.bp_repeat_str), ('alarm', 'Alarm', 80, common_calendar.bp_alarm_str), ('categories', 'Category', 150, common_calendar.category_str) ] _filetype_label="VCalendar File:" _data_type='vCalendar' _import_data_class=VCalendarImportData def __init__(self, parent, id, title): self._oc=self._import_data_class() common_calendar.PreviewDialog.__init__(self, parent, id, title, self._column_labels, self._oc.get_display_data(), config_name='import/calendar/vcaldialog') def getcontrols(self, main_bs): hbs=wx.BoxSizer(wx.HORIZONTAL) # label hbs.Add(wx.StaticText(self, -1, self._filetype_label), 0, wx.ALL|wx.ALIGN_CENTRE, 2) # where the folder name goes self.folderctrl=wx.TextCtrl(self, -1, "") #, style=wx.TE_READONLY) self.folderctrl.SetValue(self._oc.get_file_name()) hbs.Add(self.folderctrl, 1, wx.EXPAND|wx.ALL, 2) # browse button id_browse=wx.NewId() hbs.Add(wx.Button(self, id_browse, 'Browse ...'), 0, wx.EXPAND|wx.ALL, 2) main_bs.Add(hbs, 0, wx.EXPAND|wx.ALL, 5) main_bs.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5) wx.EVT_BUTTON(self, id_browse, self.OnBrowseFolder) def getpostcontrols(self, main_bs): main_bs.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5) hbs=wx.BoxSizer(wx.HORIZONTAL) id_import=wx.NewId() hbs.Add(wx.Button(self, id_import, 'Import'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) hbs.Add(wx.Button(self, wx.ID_OK, 'Replace All'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) hbs.Add(wx.Button(self, self.ID_ADD, 'Add'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) hbs.Add(wx.Button(self, self.ID_MERGE, 'Merge'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) hbs.Add(wx.Button(self, wx.ID_CANCEL, 'Cancel'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) id_filter=wx.NewId() hbs.Add(wx.Button(self, id_filter, 'Filter'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) hbs.Add(wx.Button(self, wx.ID_HELP, 'Help'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) main_bs.Add(hbs, 0, wx.ALIGN_CENTRE|wx.ALL, 5) wx.EVT_BUTTON(self, id_import, self.OnImport) wx.EVT_BUTTON(self, id_filter, self.OnFilter) wx.EVT_BUTTON(self, self.ID_ADD, self.OnEndModal) wx.EVT_BUTTON(self, self.ID_MERGE, self.OnEndModal) wx.EVT_BUTTON(self, wx.ID_HELP, lambda *_: wx.GetApp().displayhelpid(helpids.ID_DLG_CALENDAR_IMPORT)) @guihelper.BusyWrapper def OnImport(self, evt): with guihelper.WXDialogWrapper(wx.ProgressDialog('%s Import'%self._data_type, 'Importing %s Data, please wait ...'%self._data_type, parent=self)) as dlg: try: self._oc.read(self.folderctrl.GetValue()) self.populate(self._oc.get_display_data()) except (ValueError, IOError): guihelper.MessageDialog(self, 'Failed to get import data', 'Import Error', style=wx.OK|wx.ICON_ERROR) except: if __debug__: raise def OnBrowseFolder(self, evt): with guihelper.WXDialogWrapper(wx.FileDialog(self, "Pick a %s File"%self._data_type, wildcard='*.vcs;*.ics'), True) as (dlg, retcode): if retcode==wx.ID_OK: self.folderctrl.SetValue(dlg.GetPath()) def OnFilter(self, evt): cat_list=self._oc.get_category_list() with guihelper.WXDialogWrapper(common_calendar.FilterDialog(self, -1, 'Filtering Parameters', cat_list), True) as (dlg, retcode): if retcode==wx.ID_OK: self._oc.set_filter(dlg.get()) self.populate(self._oc.get_display_data()) def OnEndModal(self, evt): self.EndModal(evt.GetId()) def get(self): return self._oc.get() def get_categories(self): return self._oc.get_category_list() #------------------------------------------------------------------------------- def ImportCal(folder, filters): _oc=VCalendarImportData(folder) _oc.set_filter(filters) _oc.read() res={ 'calendar':_oc.get() } return res #------------------------------------------------------------------------------- class VCalAutoConfCalDialog(wx.Dialog): def __init__(self, parent, id, title, folder, filters, style=wx.CAPTION|wx.MAXIMIZE_BOX| \ wx.SYSTEM_MENU|wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER): self._oc=VCalendarImportData() self._oc.set_filter(filters) self._read=False wx.Dialog.__init__(self, parent, id=id, title=title, style=style) main_bs=wx.BoxSizer(wx.VERTICAL) hbs=wx.BoxSizer(wx.HORIZONTAL) # label hbs.Add(wx.StaticText(self, -1, "VCalendar File:"), 0, wx.ALL|wx.ALIGN_CENTRE, 2) # where the folder name goes self.folderctrl=wx.TextCtrl(self, -1, "", style=wx.TE_READONLY) self.folderctrl.SetValue(folder) hbs.Add(self.folderctrl, 1, wx.EXPAND|wx.ALL, 2) # browse button id_browse=wx.NewId() hbs.Add(wx.Button(self, id_browse, 'Browse ...'), 0, wx.EXPAND|wx.ALL, 2) main_bs.Add(hbs, 0, wx.EXPAND|wx.ALL, 5) main_bs.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5) wx.EVT_BUTTON(self, id_browse, self.OnBrowseFolder) hbs=wx.BoxSizer(wx.HORIZONTAL) hbs.Add(wx.Button(self, wx.ID_OK, 'OK'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) hbs.Add(wx.Button(self, wx.ID_CANCEL, 'Cancel'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) id_filter=wx.NewId() hbs.Add(wx.Button(self, id_filter, 'Filter'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) hbs.Add(wx.Button(self, wx.ID_HELP, 'Help'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) main_bs.Add(hbs, 0, wx.ALIGN_CENTRE|wx.ALL, 5) wx.EVT_BUTTON(self, id_filter, self.OnFilter) wx.EVT_BUTTON(self, wx.ID_HELP, lambda *_: wx.GetApp().displayhelpid(helpids.ID_DLG_CALENDAR_IMPORT)) self.SetSizer(main_bs) self.SetAutoLayout(True) main_bs.Fit(self) def OnBrowseFolder(self, evt): with guihelper.WXDialogWrapper(wx.FileDialog(self, "Pick a VCalendar File", wildcard='*.vcs'), True) as (dlg, retcode): if retcode==wx.ID_OK: self.folderctrl.SetValue(dlg.GetPath()) self._read=False def OnFilter(self, evt): # read the calender to get the category list if not self._read: self._oc.read(self.folderctrl.GetValue()) self._read=True cat_list=self._oc.get_category_list() with guihelper.WXDialogWrapper(common_calendar.AutoSyncFilterDialog(self, -1, 'Filtering Parameters', cat_list)) \ as dlg: dlg.set(self._oc.get_filter()) if dlg.ShowModal()==wx.ID_OK: self._oc.set_filter(dlg.get()) def GetFolder(self): return self.folderctrl.GetValue() def GetFilter(self): return self._oc.get_filter() bitpim-1.0.7+dfsg1/src/importexport.py0000644001616600161660000033060510664454771016111 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: importexport.py 4377 2007-08-27 04:58:33Z djpham $ "Deals with importing and exporting stuff" # System modules from __future__ import with_statement import contextlib import string import re import StringIO import os # wxPython modules import wx import wx.grid import wx.html # Others from thirdparty import DSV # My modules import common import guihelper import vcard import phonenumber import guiwidgets import nameparser import phonebook import pubsub import guihelper import csv_calendar import vcal_calendar import ical_calendar import gcal_calendar as gcal import playlist import wpl_file # control def GetPhonebookImports(): res=[] # Calendar Wizard res.append( (guihelper.ID_CALENDAR_WIZARD, 'Import Calendar Wizard...', 'Import Calendar Wizard', OnCalendarWizard) ) res.append( (wx.NewId(), 'Calendar Import Preset...', 'Calendar Import Preset...', OnCalendarPreset) ) res.append( (wx.NewId(), 'Auto Calendar Import', 'Auto Calendar Import', ( (guihelper.ID_AUTOSYNCSETTINGS, 'Settings', 'Configure Auto Calendar Import', None), (guihelper.ID_AUTOSYNCEXECUTE, 'Execute', 'Perform Auto Calendar Import', None)) )) # CSV - always possible res.append( (guihelper.ID_IMPORT_CSV_CONTACTS,"CSV Contacts...", "Import a CSV file for the phonebook", OnFileImportCSVContacts) ) res.append( (guihelper.ID_IMPORT_CSV_CALENDAR,"CSV Calendar...", "Import a CSV file for the calendar", OnFileImportCSVCalendar) ) # Vcards - always possible res.append( (guihelper.ID_IMPORT_VCARDS,"vCards...", "Import vCards for the phonebook", OnFileImportVCards) ) # Vcal - always possible res.append((guihelper.ID_IMPORT_VCALENDAR,'vCalendar...', 'Import vCalendar data for the calendar', OnFileImportVCal)) # iCal - always possible res.append((guihelper.ID_IMPORT_ICALENDAR, 'iCalendar...', 'Import iCalendar data for the calendar', OnFileImportiCal)) # Google Calendar - always possible res.append((guihelper.ID_IMPORT_GCALENDAR, 'Google Calendar...', 'Import Google Calendar data for the calendar', OnFileImportgCal)) # Outlook try: import native.outlook res.append( (guihelper.ID_IMPORT_OUTLOOK_CONTACTS,"Outlook Contacts...", "Import Outlook contacts for the phonebook", OnFileImportOutlookContacts) ) res.append( (guihelper.ID_IMPORT_OUTLOOK_CALENDAR,"Outlook Calendar...", "Import Outlook calendar for the calendar", OnFileImportOutlookCalendar) ) res.append( (guihelper.ID_IMPORT_OUTLOOK_NOTES,"Outlook Notes...", "Import Outlook notes for the memo", OnFileImportOutlookNotes) ) res.append( (guihelper.ID_IMPORT_OUTLOOK_TASKS,"Outlook Tasks...", "Import Outlook tasks for the todo", OnFileImportOutlookTasks) ) except: pass # Evolution try: import native.evolution res.append( (guihelper.ID_IMPORT_EVO_CONTACTS,"Evolution Contacts...", "Import Evolution contacts for the phonebook", OnFileImportEvolutionContacts) ) except ImportError: pass # Qtopia Desktop - always possible res.append( (guihelper.ID_IMPORT_QTOPIA_CONTACTS,"Qtopia Desktop...", "Import Qtopia Desktop contacts for the phonebook", OnFileImportQtopiaDesktopContacts) ) # eGroupware - always possible res.append( (guihelper.ID_IMPORT_GROUPWARE_CONTACTS,"eGroupware...", "Import eGroupware contacts for the phonebook", OnFileImporteGroupwareContacts) ) # WPL Playlist, always possible res.append( (guihelper.ID_IMPORT_WPL, 'WPL Play List...', 'Import WPL Play List', OnWPLImport)) return res def GetCalenderAutoSyncImports(): res=[] # CSV - always possible res.append( ("CSV Calendar", AutoConfCSVCalender, AutoImportCSVCalendar) ) # Vcal - always possible res.append(('vCalendar', AutoConfVCal, AutoImportVCal)) # Outlook try: import native.outlook res.append( ("Outlook", AutoConfOutlookCalender, AutoImportOutlookCalendar) ) except: print "Failed to get outlook" pass # Evolution return res def GetCalendarImports(): # return a list of calendar types data objects res=[] res.append({ 'type': 'CSV Calendar', 'source': csv_calendar.ImportDataSource, 'data': csv_calendar.CSVCalendarImportData }) res.append({ 'type': 'vCalendar', 'source': vcal_calendar.ImportDataSource, 'data': vcal_calendar.VCalendarImportData }) res.append({ 'type': 'iCalendar', 'source': ical_calendar.ImportDataSource, 'data': ical_calendar.iCalendarImportData }) res.append({ 'type': 'Google Calendar', 'source': gcal.ImportDataSource, 'data': gcal.gCalendarImportData }) try: import native.outlook import outlook_calendar res.append({ 'type': 'Outlook Calendar', 'source': outlook_calendar.ImportDataSource, 'data': outlook_calendar.OutlookCalendarImportData }) except: pass return res def TestOutlookIsInstalled(): import native.outlook try: native.outlook.getmapinamespace() except: guihelper.MessageDialog(None, 'Unable to initialise Outlook, Check that it is installed correctly.', 'Outlook Error', wx.OK|wx.ICON_ERROR) return False return True class PreviewGrid(wx.grid.Grid): def __init__(self, parent, id): wx.grid.Grid.__init__(self, parent, id, style=wx.WANTS_CHARS) wx.grid.EVT_GRID_CELL_LEFT_DCLICK(self, self.OnLeftDClick) # (Taken from the demo) I do this because I don't like the default # behaviour of not starting the cell editor on double clicks, but # only a second click. def OnLeftDClick(self, evt): if self.CanEnableCellControl(): self.EnableCellEditControl() class ImportDialog(wx.Dialog): "The dialog for importing phonebook stuff" # these are presented in the UI and are what the user can select. additional # column names are available but not specified possiblecolumns=["", "First Name", "Last Name", "Middle Name", "Name", "Nickname", "Email Address", "Web Page", "Fax", "Home Street", "Home City", "Home Postal Code", "Home State", "Home Country/Region", "Home Phone", "Home Fax", "Mobile Phone", "Home Web Page", "Business Street", "Business City", "Business Postal Code", "Business State", "Business Country/Region", "Business Web Page", "Business Phone", "Business Fax", "Pager", "Company", "Notes", "Private", "Category", "Categories"] bp_columns=[ # BitPim CSV fields 'names_title', 'names_first', 'names_middle', 'names_last', 'names_full', 'names_nickname', 'addresses_type', 'addresses_company', 'addresses_street', 'addresses_street2', 'addresses_city', 'addresses_state', 'addresses_postalcode', 'addresses_country', 'numbers_number', 'numbers_type', 'numbers_speeddial', 'emails_email', 'emails_type', 'urls_url', 'urls_type', 'categories_category', 'ringtones_ringtone', 'ringtones_use', 'wallpapers_wallpaper', 'wallpapers_use', 'memos_memo', 'flags_secret' ] # used for the filtering - any of the named columns have to be present for the data row # to be considered to have that type of column filternamecolumns=["First Name", "Last Name", "Middle Name", "Name", "Nickname"] filternumbercolumns=["Home Phone", "Home Fax", "Mobile Phone", "Business Phone", "Business Fax", "Pager", "Fax", "Phone"] filterhomeaddresscolumns=["Home Street", "Home City", "Home Postal Code", "Home State", "Home Country/Region"] filterbusinessaddresscolumns=["Business Street", "Business City", "Business Postal Code", "Business State", "Business Country/Region"] filteraddresscolumns=filterhomeaddresscolumns+filterbusinessaddresscolumns+["Address"] filteremailcolumns=["Email Address", "Email Addresses"] # used in mapping column names above into bitpim phonebook fields addressmap={ 'Street': 'street', 'City': 'city', 'Postal Code': 'postalcode', 'State': 'state', 'Country/Region': 'country', } namemap={ 'First Name': 'first', 'Last Name': 'last', 'Middle Name': 'middle', 'Name': 'full', 'Nickname': 'nickname' } numbermap={ "Home Phone": 'home', "Home Fax": 'fax', "Mobile Phone": 'cell', "Business Phone": 'office', "Business Fax": 'fax', "Pager": 'pager', "Fax": 'fax' } def __init__(self, parent, id, title, style=wx.CAPTION|wx.MAXIMIZE_BOX|\ wx.SYSTEM_MENU|wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER): wx.Dialog.__init__(self, parent, id=id, title=title, style=style) self.possiblecolumns+=self.bp_columns self.merge=True vbs=wx.BoxSizer(wx.VERTICAL) t,sz=self.gethtmlhelp() w=wx.html.HtmlWindow(self, -1, size=sz, style=wx.html.HW_SCROLLBAR_NEVER) w.SetPage(t) vbs.Add(w, 0, wx.EXPAND|wx.ALL,5) self.getcontrols(vbs) cfg=lambda key: wx.GetApp().config.ReadInt("importdialog/filter"+key, False) # Only records with ... row hbs=wx.BoxSizer(wx.HORIZONTAL) hbs.Add(wx.StaticText(self, -1, "Only rows with "), 0, wx.ALL|wx.ALIGN_CENTRE,2) self.wname=wx.CheckBox(self, wx.NewId(), "a name") self.wname.SetValue(cfg("name")) hbs.Add(self.wname, 0, wx.LEFT|wx.RIGHT|wx.ALIGN_CENTRE,7) self.wnumber=wx.CheckBox(self, wx.NewId(), "a number") self.wnumber.SetValue(cfg("phonenumber")) hbs.Add(self.wnumber, 0, wx.LEFT|wx.RIGHT|wx.ALIGN_CENTRE,7) self.waddress=wx.CheckBox(self, wx.NewId(), "an address") self.waddress.SetValue(cfg("postaladdress")) hbs.Add(self.waddress, 0, wx.LEFT|wx.RIGHT|wx.ALIGN_CENTRE,7) self.wemail=wx.CheckBox(self, wx.NewId(), "an email") self.wemail.SetValue(cfg("emailaddress")) hbs.Add(self.wemail, 0, wx.LEFT|wx.ALIGN_CENTRE,7) cats=wx.GetApp().config.Read("importdialog/filtercategories", "") if len(cats): self.categorieswanted=cats.split(";") else: self.categorieswanted=None self.categoriesbutton=wx.Button(self, wx.NewId(), "Categories...") hbs.Add(self.categoriesbutton, 0, wx.EXPAND|wx.LEFT|wx.RIGHT|wx.ALIGN_CENTRE, 10) self.categorieslabel=wx.StaticText(self, -1, "") if self.categorieswanted is None: self.categorieslabel.SetLabel("*ANY*") else: self.categorieslabel.SetLabel("; ".join(self.categorieswanted)) hbs.Add(self.categorieslabel, 1, wx.ALIGN_LEFT|wx.ALIGN_CENTRE_VERTICAL|wx.LEFT, 5) vbs.Add(hbs,0, wx.EXPAND|wx.ALL,5) # Full name options: Full Name, First M Last, or Last, First M self._name_option=wx.RadioBox(self, -1, 'Name Reformat', choices=['No Reformat', 'First M Last', 'Last, First M']) wx.EVT_RADIOBOX(self, self._name_option.GetId(), self.DataNeedsUpdate) vbs.Add(self._name_option, 0, wx.ALL, 5) # Preview grid row self.preview=PreviewGrid(self, wx.NewId()) self.preview.CreateGrid(10,10) self.preview.SetColLabelSize(0) self.preview.SetRowLabelSize(0) self.preview.SetMargins(1,0) vbs.Add(self.preview, 1, wx.EXPAND|wx.ALL, 5) # Static line and buttons vbs.Add(wx.StaticLine(self, -1, style=wx.LI_HORIZONTAL), 0, wx.EXPAND|wx.ALL,5) _button_sizer=self.CreateButtonSizer(wx.CANCEL|wx.HELP) _btn=wx.Button(self, -1, 'Merge') _button_sizer.Add(_btn, 0, wx.ALIGN_CENTER|wx.ALL, 5) wx.EVT_BUTTON(self, _btn.GetId(), self.OnOk) _btn=wx.Button(self, -1, 'Replace All') _button_sizer.Add(_btn, 0, wx.ALIGN_CENTER|wx.ALL, 5) wx.EVT_BUTTON(self, _btn.GetId(), self.OnReplaceAll) vbs.Add(_button_sizer, 0, wx.ALIGN_CENTER|wx.ALL, 5) self.SetSizer(vbs) for w in self.wname, self.wnumber, self.waddress, self.wemail: wx.EVT_CHECKBOX(self, w.GetId(), self.DataNeedsUpdate) wx.EVT_BUTTON(self, wx.ID_OK, self.OnOk) wx.EVT_CLOSE(self, self.OnClose) wx.EVT_BUTTON(self, self.categoriesbutton.GetId(), self.OnCategories) guiwidgets.set_size("importdialog", self, 90) self.DataNeedsUpdate() def DataNeedsUpdate(self, _=None): "The preview data needs to be updated" self.needsupdate=True wx.CallAfter(self.UpdateData) def OnGridCellChanged(self, event): "Called when the user has changed one of the columns" self.columns[event.GetCol()]=self.preview.GetCellValue(0, event.GetCol()) self.wcolumnsname.SetValue("Custom") if self.wname.GetValue() or self.wnumber.GetValue() or self.waddress.GetValue() or self.wemail.GetValue(): self.DataNeedsUpdate() def OnClose(self, event=None): # save various config pieces guiwidgets.save_size("importdialog", self.GetRect()) cfg=lambda key, value: wx.GetApp().config.WriteInt("importdialog/filter"+key, value) cfg("name", self.wname.GetValue()) cfg("phonenumber", self.wnumber.GetValue()) cfg("postaladdress", self.waddress.GetValue()) cfg("emailaddress", self.wemail.GetValue()) if self.categorieswanted is None: cats="" else: cats=";".join(self.categorieswanted) wx.GetApp().config.Write("importdialog/filtercategories", cats) wx.GetApp().config.Flush() if event is not None: event.Skip() def OnOk(self,_): "Ok button was pressed" if self.preview.IsCellEditControlEnabled(): self.preview.HideCellEditControl() self.preview.SaveEditControlValue() self.OnClose() # for some reason this isn't called automatically self.EndModal(wx.ID_OK) def OnReplaceAll(self, evt): "ReplaceAll button was pressed" self.merge=False self.OnOk(evt) def _reformat_name_firstmiddlelast(self, entry): # reformat the full name to be First Middle Last _name=entry.get('names', [None])[0] if not _name: return entry _s=nameparser.formatsimplefirstlast(_name) if _s: _name['full']=_s entry['names']=[_name] return entry def _reformat_name_lastfirtsmiddle(self, entry): # reformat the full name to be Last, First Middle _name=entry.get('names', [None])[0] if not _name: return entry _s=nameparser.formatsimplelastfirst(_name) if _s: _name['full']=_s entry['names']=[_name] return entry _reformat_name_func=(lambda self, entry: entry, _reformat_name_firstmiddlelast, _reformat_name_lastfirtsmiddle) def __build_entry(self, rec): entry={} # emails emails=[] if rec.has_key('Email Address'): for e in rec['Email Address']: if isinstance(e, dict): emails.append(e) else: emails.append({'email': e}) del rec['Email Address'] if rec.has_key("Email Addresses"): for e in rec['Email Addresses']: emails.append({'email': e}) del rec["Email Addresses"] if len(emails): entry['emails']=emails # addresses for prefix,fields in \ ( ("Home", self.filterhomeaddresscolumns), ("Business", self.filterbusinessaddresscolumns) ): addr={} for k in fields: if k in rec: # it has a field for this type shortk=k[len(prefix)+1:] addr['type']=prefix.lower() addr[self.addressmap[shortk]]=rec[k] del rec[k] if len(addr): if prefix=="Business" and rec.has_key("Company"): # fill in company info addr['type']=prefix.lower() addr['company']=rec["Company"] if not entry.has_key("addresses"): entry["addresses"]=[] entry["addresses"].append(addr) # address (dict form of addresses) if rec.has_key("Address"): # ensure result key exists if not entry.has_key("addresses"): entry["addresses"]=[] # find the company name company=rec.get("Company", None) for a in rec["Address"]: if a["type"]=="business": a["company"]=company addr={} for k in ("type", "company", "street", "street2", "city", "state", "postalcode", "country"): v=a.get(k, None) if v is not None: addr[k]=v entry["addresses"].append(addr) del rec["Address"] # numbers numbers=[] for field in self.filternumbercolumns: if field!="Phone" and rec.has_key(field): for val in rec[field]: numbers.append({'type': self.numbermap[field], 'number': phonenumber.normalise(val)}) del rec[field] # phones (dict form of numbers) if rec.has_key("Phone"): mapping={"business": "office", "business fax": "fax", "home fax": "fax"} for val in rec["Phone"]: number={"type": mapping.get(val["type"], val["type"]), "number": phonenumber.normalise(val["number"])} sd=val.get('speeddial', None) if sd is not None: number.update({ 'speeddial': sd }) numbers.append(number) del rec["Phone"] if len(numbers): entry["numbers"]=numbers # names name={} for field in self.filternamecolumns: if field in rec: name[self.namemap[field]]=rec[field] del rec[field] if len(name): entry["names"]=[name] # notes if rec.has_key("Notes"): notes=[] for note in rec["Notes"]: notes.append({'memo': note}) del rec["Notes"] entry["memos"]=notes # web pages urls=[] for type, key in ( (None, "Web Page"), ("home", "Home Web Page"), ("business", "Business Web Page") ): if rec.has_key(key): for url in rec[key]: if isinstance(url, dict): u=url else: u={'url': url} if type is not None: u['type']=type urls.append(u) del rec[key] if len(urls): entry["urls"]=urls # categories cats=[] if rec.has_key("Category"): cats=rec['Category'] del rec["Category"] if rec.has_key("Categories"): # multiple entries in the field, semi-colon seperated if isinstance(rec['Categories'], list): cats+=rec['Categories'] else: for cat in rec['Categories'].split(';'): cats.append(cat) del rec['Categories'] _cats=[] if self.categorieswanted is not None: for c in self.categorieswanted: if c in cats: _cats.append({'category': c }) if _cats: entry["categories"]=_cats # wallpapers l=[] r=rec.get('Wallpapers', None) if r is not None: if isinstance(r, list): l=[{'wallpaper': x, 'use': 'call' } for x in r] else: l=[{'wallpaper': x, 'use': 'call' } for x in r.split(';')] del rec['Wallpapers'] if len(l): entry['wallpapers']=l # ringtones l=[] r=rec.get('Ringtones', None) if r is not None: if isinstance(r, list): l=[{'ringtone': x, 'use': 'call'} for x in r] else: l=[{'ringtone': x, 'use': 'call'} for x in r.split(';')] del rec['Ringtones'] if len(l): entry['ringtones']=l # flags flags=[] if rec.has_key("Private"): private=True # lets see how they have done false if rec["Private"].lower() in ("false", "no", 0, "0"): private=False flags.append({'secret': private}) del rec["Private"] if len(flags): entry["flags"]=flags # unique serials serial={} for k in rec.keys(): if k.startswith("UniqueSerial-"): v=rec[k] del rec[k] k=k[len("UniqueSerial-"):] serial[k]=v if len(serial): assert serial.has_key("sourcetype") if len(serial)>1: # ie more than just sourcetype entry["serials"]=[serial] # Did we forget anything? # Company is part of other fields if rec.has_key("Company"): del rec["Company"] if len(rec): raise Exception( "Internal conversion failed to complete.\nStill to do: %s" % rec) return entry def __build_bp_entry(self, rec): entry={} for idx,col in enumerate(self.columns): # build the entry from the colum data key=col[:col.find('_')] field=col[col.find('_')+1:] v=rec[idx] if not len(v): v=None if not entry.has_key(key): entry[key]=[] done=False for field_idx,n in enumerate(entry[key]): if not n.has_key(field): entry[key][field_idx][field]=v done=True break if not done: entry[key].append({ field: v }) # go through and delete all blanks fields/dicts for k,e in entry.items(): for i1,d in enumerate(e): for k2,item in d.items(): if item is None: del entry[k][i1][k2] else: if k2=='speeddial': d[k2]=int(item) elif k2=='secret': d[k2]=True if item.lower() in ("false", "no", 0, "0"): d[k2]=False l=[x for x in entry[k] if len(x)] if len(l): entry[k]=l else: del entry[k] return entry def GetFormattedData(self): "Returns the data in BitPim phonebook format" bp_csv=True for c in self.columns: if c=="": continue if c not in self.bp_columns: bp_csv=False break res={} count=0 for record in self.data: if bp_csv: _entry=self.__build_bp_entry(record) else: # make a dict of the record rec={} for n in range(len(self.columns)): c=self.columns[n] if c=="": continue if record[n] is None or len(record[n])==0: continue if c not in self.bp_columns: bp_csv=False if c in self.filternumbercolumns or c in \ ["Category", "Notes", "Business Web Page", "Home Web Page", "Web Page", "Notes", "Phone", "Address", "Email Address"]: # these are multivalued if not rec.has_key(c): rec[c]=[] rec[c].append(record[n]) else: rec[c]=record[n] # entry is what we are building. fields are removed from rec as we process them _entry=self.__build_entry(rec) res[count]=self._reformat_name_func[self._name_option.GetSelection()](self, _entry) count+=1 return res def GetExtractCategoriesFunction(self): res="" for col,name in enumerate(self.columns): if name=="Categories": res+="_getpreviewformatted(row[%d], %s).split(';') + " % (col, `name`) elif name=="Category": res+="_getpreviewformatted(row[%d], %s) + " % (col, `name`) res+="[]" fn=compile(res, "_GetExtractCategoriesFunction_", 'eval') return lambda row: eval(fn, globals(), {'row': row}) def OnCategories(self, _): # find all categories in current unfiltered data savedcolumns,saveddata=self.columns, self.data if self.categorieswanted is not None: # we have to re-read the data if currently filtering categories! This is # because it would contain only the currently selected categories. self.ReReadData() catfn=self.GetExtractCategoriesFunction() cats=[] for row in self.data: for c in catfn(row): if c not in cats: cats.append(c) cats.sort() if len(cats) and cats[0]=="": cats=cats[1:] self.columns,self.data=savedcolumns, saveddata with guihelper.WXDialogWrapper(CategorySelectorDialog(self, self.categorieswanted, cats), True) as (dlg, retcode): if retcode==wx.ID_OK: self.categorieswanted=dlg.GetCategories() if self.categorieswanted is None: self.categorieslabel.SetLabel("*ALL*") else: self.categorieslabel.SetLabel("; ".join(self.categorieswanted)) self.DataNeedsUpdate() @guihelper.BusyWrapper def UpdateData(self): "Actually update the preview data" if not self.needsupdate: return self.needsupdate=False # reread the data self.ReReadData() # category filtering if self.categorieswanted is not None: newdata=[] catfn=self.GetExtractCategoriesFunction() for row in self.data: for cat in catfn(row): if cat in self.categorieswanted: newdata.append(row) break self.data=newdata # name/number/address/email filtering if self.wname.GetValue() or self.wnumber.GetValue() or self.waddress.GetValue() or self.wemail.GetValue(): newdata=[] for rownum in range(len(self.data)): # generate a list of fields for which this row has data fields=[] # how many filters are required req=0 # how many are present present=0 for n in range(len(self.columns)): v=self.data[rownum][n] if v is not None and len(v): fields.append(self.columns[n]) for widget,filter in ( (self.wname, self.filternamecolumns), (self.wnumber, self.filternumbercolumns), (self.waddress, self.filteraddresscolumns), (self.wemail, self.filteremailcolumns) ): if widget.GetValue(): req+=1 for f in fields: if f in filter: present+=1 break if req>present: break if present==req: newdata.append(self.data[rownum]) self.data=newdata self.FillPreview() def _preview_format_name_none(self, row, col, names_col): # no format needed return row[col] def _preview_format_name_lastfirtmiddle(self, row, col, names_col): # reformat to Last, First Middle _last=names_col.get('Last Name', names_col.get('names_last', None)) _first=names_col.get('First Name', names_col.get('names_first', None)) _middle=names_col.get('Middle Name', names_col.get('names_middle', None)) _full=names_col.get('Name', names_col.get('names_full', None)) _name_dict={} for _key,_value in (('full', _full), ('first', _first), ('middle', _middle), ('last', _last)): if _value is not None and row[_value]: _name_dict[_key]=row[_value] return nameparser.formatsimplelastfirst(_name_dict) def _preview_format_name_firstmiddlelast(self, row, col, names_col): # reformat to First Middle Last _last=names_col.get('Last Name', names_col.get('names_last', None)) _first=names_col.get('First Name', names_col.get('names_first', None)) _middle=names_col.get('Middle Name', names_col.get('names_middle', None)) _full=names_col.get('Name', names_col.get('names_full', None)) _name_dict={} for _key,_value in (('full', _full), ('first', _first), ('middle', _middle), ('last', _last)): if _value is not None and row[_value]: _name_dict[_key]=row[_value] return nameparser.formatsimplefirstlast(_name_dict) _preview_format_names_func=(_preview_format_name_none, _preview_format_name_firstmiddlelast, _preview_format_name_lastfirtmiddle) def FillPreview(self): self.preview.BeginBatch() if self.preview.GetNumberCols(): self.preview.DeleteCols(0,self.preview.GetNumberCols()) self.preview.DeleteRows(0,self.preview.GetNumberRows()) self.preview.ClearGrid() numrows=len(self.data) if numrows: numcols=max(map(lambda x: len(x), self.data)) else: numcols=len(self.columns) # add header row editor=wx.grid.GridCellChoiceEditor(self.possiblecolumns, False) self.preview.AppendRows(1) self.preview.AppendCols(numcols) _names_col={} for col in range(numcols): if 'Name' in self.columns[col] or \ 'names_' in self.columns[col]: _names_col[self.columns[col]]=col self.preview.SetCellValue(0, col, self.columns[col]) self.preview.SetCellEditor(0, col, editor) attr=wx.grid.GridCellAttr() attr.SetBackgroundColour(wx.GREEN) attr.SetFont(wx.Font(10,wx.SWISS, wx.NORMAL, wx.BOLD)) attr.SetReadOnly(not self.headerrowiseditable) self.preview.SetRowAttr(0,attr) # add each row oddattr=wx.grid.GridCellAttr() oddattr.SetBackgroundColour("OLDLACE") oddattr.SetReadOnly(True) evenattr=wx.grid.GridCellAttr() evenattr.SetBackgroundColour("ALICE BLUE") evenattr.SetReadOnly(True) _format_name=self._preview_format_names_func[self._name_option.GetSelection()] for row in range(numrows): self.preview.AppendRows(1) for col in range(numcols): if self.columns[col] in ('Name', 'names_full'): s=_format_name(self, self.data[row], col, _names_col) else: s=_getpreviewformatted(self.data[row][col], self.columns[col]) if len(s): self.preview.SetCellValue(row+1, col, s) self.preview.SetRowAttr(row+1, (evenattr,oddattr)[row%2]) self.preview.AutoSizeColumns() self.preview.AutoSizeRows() self.preview.EndBatch() def _getpreviewformatted(value, column): if value is None: return "" if isinstance(value, dict): if column=="Email Address": value="%s (%s)" %(value["email"], value["type"]) elif column=="Web Page": value="%s (%s)" %(value["url"], value["type"]) elif column=="Phone": value="%s (%s)" %(phonenumber.format(value["number"]), value["type"]) elif column=="Address": v=[] for f in ("company", "pobox", "street", "street2", "city", "state", "postalcode", "country"): vv=value.get(f, None) if vv is not None: v.append(vv) assert len(v) v[0]=v[0]+" (%s)" %(value['type'],) value="\n".join(v) else: print "don't know how to convert dict",value,"for preview column",column assert False elif isinstance(value, list): if column=="Email Addresses": value="\n".join(value) elif column=="Categories": value=";".join(value) else: print "don't know how to convert list",value,"for preview column",column assert False return common.strorunicode(value) class CategorySelectorDialog(wx.Dialog): def __init__(self, parent, categorieswanted, categoriesavailable): wx.Dialog.__init__(self, parent, title="Import Category Selector", style=wx.CAPTION|wx.MAXIMIZE_BOX|\ wx.SYSTEM_MENU|wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER) #, size=(640,480)) vbs=wx.BoxSizer(wx.VERTICAL) hbs=wx.BoxSizer(wx.HORIZONTAL) self.selected=wx.RadioButton(self, wx.NewId(), "Selected Below", style=wx.RB_GROUP) self.any=wx.RadioButton(self, wx.NewId(), "Any/All") hbs.Add(self.selected, 0, wx.ALL, 5) hbs.Add(self.any, 0, wx.ALL, 5) _up=wx.BitmapButton(self, -1, wx.ArtProvider.GetBitmap(guihelper.ART_ARROW_UP, wx.ART_TOOLBAR, wx.Size(16, 16))) _dn=wx.BitmapButton(self, -1, wx.ArtProvider.GetBitmap(guihelper.ART_ARROW_DOWN, wx.ART_TOOLBAR, wx.Size(16, 16))) hbs.Add(_up, 0, wx.ALL, 5) wx.EVT_BUTTON(self, _up.GetId(), self.OnMoveUp) wx.EVT_BUTTON(self, _dn.GetId(), self.OnMoveDown) hbs.Add(_dn, 0, wx.ALL, 5) vbs.Add(hbs, 0, wx.ALL, 5) self.categoriesavailable=categoriesavailable self.cats=wx.CheckListBox(self, wx.NewId(), choices=categoriesavailable) vbs.Add(self.cats, 1, wx.EXPAND|wx.ALL, 5) vbs.Add(wx.StaticLine(self, -1, style=wx.LI_HORIZONTAL), 0, wx.EXPAND|wx.ALL,5) vbs.Add(self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.HELP), 0, wx.ALIGN_CENTER|wx.ALL, 5) if categorieswanted is None: self.any.SetValue(True) self.selected.SetValue(False) else: self.any.SetValue(False) self.selected.SetValue(True) for c in categorieswanted: try: self.cats.Check(categoriesavailable.index(c)) except ValueError: pass # had one selected that wasn't in list wx.EVT_CHECKLISTBOX(self, self.cats.GetId(), self.OnCatsList) self.SetSizer(vbs) vbs.Fit(self) def OnCatsList(self, _): self.any.SetValue(False) self.selected.SetValue(True) def GetCategories(self): if self.any.GetValue(): return None return [self.cats.GetString(x) for x in range(len(self.categoriesavailable)) if self.cats.IsChecked(x)] def _populate(self): _sel_str=self.cats.GetStringSelection() _chk=self.GetCategories() if _chk is None: _chk=[] self.cats.Clear() for s in self.categoriesavailable: i=self.cats.Append(s) if s==_sel_str: self.cats.SetSelection(i) self.cats.Check(i, s in _chk) def OnMoveUp(self, _): _sel_idx=self.cats.GetSelection() if _sel_idx==wx.NOT_FOUND or not _sel_idx: # no selection or top item return # move the selected item one up self.categoriesavailable[_sel_idx], self.categoriesavailable[_sel_idx-1]=\ self.categoriesavailable[_sel_idx-1], self.categoriesavailable[_sel_idx] self._populate() def OnMoveDown(self, _): _sel_idx=self.cats.GetSelection() if _sel_idx==wx.NOT_FOUND or \ _sel_idx==len(self.categoriesavailable)-1: # no selection or bottom item return # move the selected item one up self.categoriesavailable[_sel_idx], self.categoriesavailable[_sel_idx+1]=\ self.categoriesavailable[_sel_idx+1], self.categoriesavailable[_sel_idx] self._populate() class ImportCSVDialog(ImportDialog): delimiternames={ '\t': "Tab", ' ': "Space", ',': "Comma" } def __init__(self, filename, parent, id, title): self.headerrowiseditable=True self.filename=filename self.UpdatePredefinedColumns() ImportDialog.__init__(self, parent, id, title) def gethtmlhelp(self): "Returns tuple of help text and size" bg=self.GetBackgroundColour() return 'Importing %s. BitPim has guessed the delimiter seperating each column, and the text qualifier that quotes values. You need to select what each column is by clicking in the top row, or select one of the predefined sets of columns.' % (bg.Red(), bg.Green(), bg.Blue(), self.filename), \ (600,100) def getcontrols(self, vbs): data=common.opentextfile(self.filename).read() # turn all EOL chars into \n and then ensure only one \n terminates each line data=data.replace("\r", "\n") oldlen=-1 while len(data)!=oldlen: oldlen=len(data) data=data.replace("\n\n", "\n") self.rawdata=data self.qualifier=DSV.guessTextQualifier(self.rawdata) if self.qualifier is None or len(self.qualifier)==0: self.qualifier='"' self.data=DSV.organizeIntoLines(self.rawdata, textQualifier=self.qualifier) self.delimiter=DSV.guessDelimiter(self.data) # sometimes it picks the letter 'w' if self.delimiter is not None and self.delimiter.lower() in "abcdefghijklmnopqrstuvwxyz": self.delimiter=None if self.delimiter is None: if self.filename.lower().endswith("tsv"): self.delimiter="\t" else: self.delimiter="," # complete processing the data otherwise we can't guess if first row is headers self.data=DSV.importDSV(self.data, delimiter=self.delimiter, textQualifier=self.qualifier, errorHandler=DSV.padRow) # Delimter and Qualifier row hbs=wx.BoxSizer(wx.HORIZONTAL) hbs.Add(wx.StaticText(self, -1, "Delimiter"), 0, wx.EXPAND|wx.ALL|wx.ALIGN_CENTRE, 2) self.wdelimiter=wx.ComboBox(self, wx.NewId(), self.PrettyDelimiter(self.delimiter), choices=self.delimiternames.values(), style=wx.CB_DROPDOWN|wx.WANTS_CHARS) hbs.Add(self.wdelimiter, 1, wx.EXPAND|wx.ALL, 2) hbs.Add(wx.StaticText(self, -1, "Text Qualifier"), 0, wx.EXPAND|wx.ALL|wx.ALIGN_CENTRE,2) self.wqualifier=wx.ComboBox(self, wx.NewId(), self.qualifier, choices=['"', "'", "(None)"], style=wx.CB_DROPDOWN|wx.WANTS_CHARS) hbs.Add(self.wqualifier, 1, wx.EXPAND|wx.ALL, 2) vbs.Add(hbs, 0, wx.EXPAND|wx.ALL, 5) # Pre-set columns, save and header row hbs=wx.BoxSizer(wx.HORIZONTAL) hbs.Add(wx.StaticText(self, -1, "Columns"), 0, wx.EXPAND|wx.ALL|wx.ALIGN_CENTRE, 2) self.wcolumnsname=wx.ComboBox(self, wx.NewId(), "Custom", choices=self.predefinedcolumns+["Custom"], style=wx.CB_READONLY|wx.CB_DROPDOWN|wx.WANTS_CHARS) hbs.Add(self.wcolumnsname, 1, wx.EXPAND|wx.ALL, 2) self.wfirstisheader=wx.CheckBox(self, wx.NewId(), "First row is header") self.wfirstisheader.SetValue(DSV.guessHeaders(self.data)) hbs.Add(self.wfirstisheader, 0, wx.EXPAND|wx.ALL|wx.ALIGN_CENTRE, 5) vbs.Add(hbs, 0, wx.EXPAND|wx.ALL, 5) # event handlers wx.EVT_CHECKBOX(self, self.wfirstisheader.GetId(), self.OnHeaderToggle) wx.grid.EVT_GRID_CELL_CHANGE(self, self.OnGridCellChanged) wx.EVT_TEXT(self, self.wdelimiter.GetId(), self.OnDelimiterChanged) wx.EVT_TEXT(self, self.wqualifier.GetId(), self.OnQualifierChanged) wx.EVT_TEXT(self, self.wcolumnsname.GetId(), self.OnColumnsNameChanged) def PrettyDelimiter(self, delim): "Returns a pretty version of the delimiter (eg Tab, Space instead of \t, ' ')" assert delim is not None if delim in self.delimiternames: return self.delimiternames[delim] return delim def UpdatePredefinedColumns(self): """Updates the list of pre-defined column names. We look for files with an extension of .pdc in the resource directory. The first line of the file is the description, and each remaining line corresponds to a column""" self.predefinedcolumns=[] for i in guihelper.getresourcefiles("*.pdc"): with contextlib.closing(common.opentextfile(i)) as f: self.predefinedcolumns.append(f.readline().strip()) def OnHeaderToggle(self, _): self.columns=None self.DataNeedsUpdate() def OnDelimiterChanged(self, _): "Called when the user has changed the delimiter" text=self.wdelimiter.GetValue() if hasattr(self, "lastwdelimitervalue") and self.lastwdelimitervalue==text: print "on delim changed ignored" return if len(text)!=1: if text in self.delimiternames.values(): for k in self.delimiternames: if self.delimiternames[k]==text: text=k else: if len(text)==0: text="Comma" else: text=text[-1] if text in self.delimiternames: text=self.delimiternames[text] self.wdelimiter.SetValue(text) self.delimiter=text self.columns=None self.DataNeedsUpdate() # these calls cause another OnDelimiterChanged callback to happen, so we have to stop the loop self.lastwdelimitervalue=self.wdelimiter.GetValue() wx.CallAfter(self.wdelimiter.SetInsertionPointEnd) wx.CallAfter(self.wdelimiter.SetMark, 0,len(self.wdelimiter.GetValue())) def OnQualifierChanged(self,_): "Called when the user has changed the qualifier" # Very similar to the above function text=self.wqualifier.GetValue() if hasattr(self, "lastwqualifiervalue") and self.lastwqualifiervalue==text: return if len(text)!=1: if text=='(None)': text=None else: if len(text)==0: self.wqualifier.SetValue('(None)') text=None else: text=text[-1] self.wqualifier.SetValue(text) self.qualifier=text self.columns=None self.DataNeedsUpdate() self.lastwqualifiervalue=self.wqualifier.GetValue() wx.CallAfter(self.wqualifier.SetInsertionPointEnd) wx.CallAfter(self.wqualifier.SetMark, 0,len(self.wqualifier.GetValue())) def OnColumnsNameChanged(self,_): if self.wcolumnsname.GetValue()=="Custom": return str=self.wcolumnsname.GetValue() for file in guihelper.getresourcefiles("*.pdc"): with contextlib.closing(common.opentextfile(file)) as f: desc=f.readline().strip() if desc==str: self.columns=map(string.strip, f.readlines()) for i in range(len(self.columns)): if self.columns[i] not in self.possiblecolumns: print self.columns[i],"is not a valid column name!" self.columns[i]="" self.DataNeedsUpdate() return print "didn't find pdc for",str def ReReadData(self): self.data=DSV.organizeIntoLines(self.rawdata, textQualifier=self.qualifier) self.data=DSV.importDSV(self.data, delimiter=self.delimiter, textQualifier=self.qualifier, errorHandler=DSV.padRow) self.FigureOutColumns() def FigureOutColumns(self): "Initialize the columns variable, using header row if there is one" numcols=max(map(lambda x: len(x), self.data)) # normalize number of columns for row in self.data: while len(row)"]*numcols guesscols=True while len(self.columns)") self.columns=self.columns[:numcols] if not self.wfirstisheader.GetValue(): return headers=self.data[0] self.data=self.data[1:] if not guesscols: return mungedcolumns=[] for c in self.possiblecolumns: mungedcolumns.append("".join(filter(lambda x: x in "abcdefghijklmnopqrstuvwxyz0123456789", c.lower()))) # look for header in possible columns for col,header in zip(range(numcols), headers): if header in self.possiblecolumns: self.columns[col]=header continue h="".join(filter(lambda x: x in "abcdefghijklmnopqrstuvwxyz0123456789", header.lower())) if h in mungedcolumns: self.columns[col]=self.possiblecolumns[mungedcolumns.index(h)] continue # here is where we would do some mapping class ImportOutlookDialog(ImportDialog): # the order of this mapping matters .... importmapping=( # first column is field in Outlook # second column is field in dialog (ImportDialog.possiblecolumns) ('FirstName', "First Name" ), ('LastName', "Last Name"), ('MiddleName', "Middle Name"), # ('FullName', ), -- this includes the prefix (aka title in Outlook) and the suffix # ('Title', ), -- the prefix (eg Dr, Mr, Mrs) ('Subject', "Name"), # this is first middle last suffix - note no prefix! # ('Suffix', ), -- Jr, Sr, III etc ('NickName', "Nickname"), ('Email1Address', "Email Address"), ('Email2Address', "Email Address"), ('Email3Address', "Email Address"), # Outlook is seriously screwed over web pages. It treats the Business Home Page # and Web Page as the same field, so we can't really tell the difference. ('WebPage', "Web Page"), ('OtherFaxNumber', "Fax" ), ('HomeAddressStreet', "Home Street"), ('HomeAddressCity', "Home City" ), ('HomeAddressPostalCode',"Home Postal Code" ), ('HomeAddressState', "Home State"), ('HomeAddressCountry', "Home Country/Region" ), ('HomeTelephoneNumber', "Home Phone"), ('Home2TelephoneNumber', "Home Phone"), ('HomeFaxNumber', "Home Fax"), ('MobileTelephoneNumber',"Mobile Phone"), ('PersonalHomePage', "Home Web Page"), ('BusinessAddressStreet',"Business Street"), ('BusinessAddressCity', "Business City"), ('BusinessAddressPostalCode', "Business Postal Code"), ('BusinessAddressState', "Business State"), ('BusinessAddressCountry', "Business Country/Region"), # ('BusinessHomePage',), -- no use, see Web Page above ('BusinessTelephoneNumber', "Business Phone"), ('Business2TelephoneNumber',"Business Phone"), ('BusinessFaxNumber', "Business Fax"), ('PagerNumber', "Pager"), ('CompanyName', "Company"), ('Body', "Notes"), # yes, really ('Categories', "Categories"), ('EntryID', "UniqueSerial-EntryID"), ) # These are all the fields we do nothing about ## ('Anniversary', ), ## ('AssistantName', ), ## ('AssistantTelephoneNumber', ), ## ('Birthday', ), ## ('BusinessAddress', ), ## ('BusinessAddressPostOfficeBox', ), ## ('CallbackTelephoneNumber', ), ## ('CarTelephoneNumber', ), ## ('Children', ), ## ('Class', ), ## ('CompanyAndFullName', ), ## ('CompanyLastFirstNoSpace', ), ## ('CompanyLastFirstSpaceOnly', ), ## ('CompanyMainTelephoneNumber', ), ## ('ComputerNetworkName', ), ## ('ConversationIndex', ), ## ('ConversationTopic', ), ## ('CreationTime', ), ## ('CustomerID', ), ## ('Department', ), ## ('FTPSite', ), ## ('FileAs', ), ## ('FullNameAndCompany', ), ## ('Gender', ), ## ('GovernmentIDNumber', ), ## ('Hobby', ), ## ('HomeAddress', ), ## ('HomeAddressPostOfficeBox', ), ## ('ISDNNumber', ), ## ('Importance', ), ## ('Initials', ), ## ('InternetFreeBusyAddress', ), ## ('JobTitle', ), ## ('Journal', ), ## ('Language', ), ## ('LastFirstAndSuffix', ), ## ('LastFirstNoSpace', ), ## ('LastFirstNoSpaceCompany', ), ## ('LastFirstSpaceOnly', ), ## ('LastFirstSpaceOnlyCompany', ), ## ('LastModificationTime', ), ## ('LastNameAndFirstName', ), ## ('MAPIOBJECT', ), ## ('MailingAddress', ), ## ('MailingAddressCity', ), ## ('MailingAddressCountry', ), ## ('MailingAddressPostalCode', ), ## ('MailingAddressState', ), ## ('MailingAddressStreet', ), ## ('ManagerName', ), ## ('MessageClass', ), ## ('Mileage', ), ## ('NetMeetingAlias', ), ## ('NetMeetingServer', ), ## ('NoAging', ), ## ('OfficeLocation', ), ## ('OrganizationalIDNumber', ), ## ('OtherAddress', ), ## ('OtherAddressCity', ), ## ('OtherAddressCountry', ), ## ('OtherAddressPostOfficeBox', ), ## ('OtherAddressPostalCode', ), ## ('OtherAddressState', ), ## ('OtherAddressStreet', ), ## ('OtherTelephoneNumber', ), ## ('OutlookInternalVersion', ), ## ('OutlookVersion', ), ## ('Parent', ), ## ('PrimaryTelephoneNumber', ), ## ('Profession', ), ## ('RadioTelephoneNumber', ), ## ('ReferredBy', ), ## ('Saved', ), ## ('SelectedMailingAddress', ), ## ('Sensitivity', ), ## ('Size', ), ## ('Spouse', ), ## ('TTYTDDTelephoneNumber', ), ## ('TelexNumber', ), ## ('UnRead', ), ## ('User1', ), ## ('User2', ), ## ('User3', ), ## ('User4', ), importmappingdict={} for o,i in importmapping: importmappingdict[o]=i def __init__(self, parent, id, title, outlook): self.headerrowiseditable=False self.outlook=outlook ImportDialog.__init__(self, parent, id, title) def gethtmlhelp(self): "Returns tuple of help text and size" bg=self.GetBackgroundColour() return 'Importing Outlook Contacts. Select the folder to import, and do any filtering necessary.' % (bg.Red(), bg.Green(), bg.Blue()), \ (600,30) def getcontrols(self, vbs): hbs=wx.BoxSizer(wx.HORIZONTAL) # label hbs.Add(wx.StaticText(self, -1, "Folder"), 0, wx.ALL|wx.ALIGN_CENTRE, 2) # where the folder name goes self.folderctrl=wx.TextCtrl(self, -1, "", style=wx.TE_READONLY) hbs.Add(self.folderctrl, 1, wx.EXPAND|wx.ALL, 2) # browse button self.folderbrowse=wx.Button(self, wx.NewId(), "Browse ...") hbs.Add(self.folderbrowse, 0, wx.EXPAND|wx.ALL, 2) vbs.Add(hbs, 0, wx.EXPAND|wx.ALL, 5) wx.EVT_BUTTON(self, self.folderbrowse.GetId(), self.OnBrowse) # sort out folder id=wx.GetApp().config.Read("outlook/contacts", "") self.folder=self.outlook.getfolderfromid(id, True) wx.GetApp().config.Write("outlook/contacts", self.outlook.getfolderid(self.folder)) self.folderctrl.SetValue(self.outlook.getfoldername(self.folder)) def OnBrowse(self, _): p=self.outlook.pickfolder() if p is None: return # user hit cancel self.folder=p wx.GetApp().config.Write("outlook/contacts", self.outlook.getfolderid(self.folder)) self.folderctrl.SetValue(self.outlook.getfoldername(self.folder)) self.DataNeedsUpdate() def ReReadData(self): # this can take a really long time if the user doesn't spot the dialog # asking for permission to access email addresses :-) items=self.outlook.getcontacts(self.folder, self.importmappingdict.keys()) # work out what keys are actually present keys={} for item in items: for k in item.keys(): keys[k]=1 # We now need to produce columns with BitPim names not the Outlook ones. # mappings are in self.importmapping want=[] for o,i in self.importmapping: if o in keys.keys(): want.append(o) # want now contains list of Outlook keys we want, and the order we want them in self.columns=[self.importmappingdict[k] for k in want] # deal with serials self.columns.append("UniqueSerial-FolderID") self.columns.append("UniqueSerial-sourcetype") moredata=[ self.outlook.getfolderid(self.folder), "outlook"] # build up data self.data=[] for item in items: row=[] for k in want: v=item.get(k, None) v=common.strorunicode(v) row.append(v) self.data.append(row+moredata) class ImportVCardDialog(ImportDialog): keymapper={ "name": "Name", "notes": "Notes", "uid": "UniqueSerial-uid", "last name": "Last Name", "first name": "First Name", "middle name": "Middle Name", "nickname": "Nickname", "categories": "Categories", "email": "Email Address", "url": "Web Page", "phone": "Phone", "address": "Address", "organisation": "Company", "wallpapers": "Wallpapers", "ringtones": "Ringtones" } def __init__(self, filename, parent, id, title): self.headerrowiseditable=False self.filename=filename self.vcardcolumns,self.vcarddata=None,None ImportDialog.__init__(self, parent, id, title) def gethtmlhelp(self): "Returns tuple of help text and size" bg=self.GetBackgroundColour() return 'Importing vCard Contacts. Verify the data and perform any filtering necessary.' % (bg.Red(), bg.Green(), bg.Blue()), \ (600,30) def getcontrols(self, vbs): # no extra controls return def ReReadData(self): if self.vcardcolumns is None or self.vcarddata is None: self.vcardcolumns,self.vcarddata=self.parsevcards(common.opentextfile(self.filename)) self.columns=self.vcardcolumns self.data=self.vcarddata def parsevcards(self, file): # returns columns, data data=[] keys={} for vc in vcard.VCards(vcard.VFile(file)): v=vc.getdata() data.append(v) for k in v: keys[k]=1 keys=keys.keys() # sort them into a natural order self.sortkeys(keys) # remove the ones we have no mapping for if __debug__: for k in keys: if _getstringbase(k)[0] not in self.keymapper: print "vcard import: no map for key "+k keys=[k for k in keys if _getstringbase(k)[0] in self.keymapper] columns=[self.keymapper[_getstringbase(k)[0]] for k in keys] # build up defaults defaults=[] for c in columns: if c in self.possiblecolumns: defaults.append("") else: defaults.append(None) # deal with serial/UniqueId if len([c for c in columns if c.startswith("UniqueSerial-")]): columns.append("UniqueSerial-sourcetype") extra=["vcard"] else: extra=[] # do some data munging newdata=[] for row in data: line=[] for i,k in enumerate(keys): line.append(row.get(k, defaults[i])) newdata.append(line+extra) # return our hard work return columns, newdata # name parts, name, nick, emails, urls, phone, addresses, categories, memos # things we ignore: title, prefix, suffix, organisational unit _preferredorder=["first name", "middle name", "last name", "name", "nickname", "phone", "address", "email", "url", "organisation", "categories", "notes"] def sortkeys(self, keys): po=self._preferredorder def funkycmpfunc(x, y, po=po): x=_getstringbase(x) y=_getstringbase(y) if x==y: return 0 if x[0]==y[0]: # if the same base, use the number to compare return cmp(x[1], y[1]) # find them in the preferred order list # (for some bizarre reason python doesn't have a method corresponding to # string.find on lists or tuples, and you only get index on lists # which throws an exception on not finding the item try: pos1=po.index(x[0]) except ValueError: pos1=-1 try: pos2=po.index(y[0]) except ValueError: pos2=-1 if pos1<0 and pos2<0: return cmp(x[0], y[0]) if pos1<0 and pos2>=0: return 1 if pos2<0 and pos1>=0: return -1 assert pos1>=0 and pos2>=0 return cmp(pos1, pos2) keys.sort(funkycmpfunc) def _getstringbase(v): mo=re.match(r"^(.*?)(\d+)$", v) if mo is None: return (v,1) return mo.group(1), int(mo.group(2)) class ImportEvolutionDialog(ImportVCardDialog): def __init__(self, parent, id, title, evolution): self.headerrowiseditable=False self.evolution=evolution self.evocolumns=None self.evodata=None ImportDialog.__init__(self, parent, id, title) def gethtmlhelp(self): "Returns tuple of help text and size" bg=self.GetBackgroundColour() return 'Importing Evolution Contacts. Select the folder to import, and do any filtering necessary.' % (bg.Red(), bg.Green(), bg.Blue()), \ (600,30) def getcontrols(self, vbs): hbs=wx.BoxSizer(wx.HORIZONTAL) # label hbs.Add(wx.StaticText(self, -1, "Folder"), 0, wx.ALL|wx.ALIGN_CENTRE, 2) # where the folder name goes self.folderctrl=wx.TextCtrl(self, -1, "", style=wx.TE_READONLY) hbs.Add(self.folderctrl, 1, wx.EXPAND|wx.ALL, 2) # browse button self.folderbrowse=wx.Button(self, wx.NewId(), "Browse ...") hbs.Add(self.folderbrowse, 0, wx.EXPAND|wx.ALL, 2) vbs.Add(hbs, 0, wx.EXPAND|wx.ALL, 5) wx.EVT_BUTTON(self, self.folderbrowse.GetId(), self.OnBrowse) # sort out folder id=wx.GetApp().config.Read("evolution/contacts", "") self.folder=self.evolution.getfolderfromid(id, True) print "folder is",self.folder wx.GetApp().config.Write("evolution/contacts", self.evolution.getfolderid(self.folder)) self.folderctrl.SetValue(self.evolution.getfoldername(self.folder)) def OnBrowse(self, _): p=self.evolution.pickfolder(self.folder) if p is None: return # user hit cancel self.folder=p wx.GetApp().config.Write("evolution/contacts", self.evolution.getfolderid(self.folder)) self.folderctrl.SetValue(self.evolution.getfoldername(self.folder)) self.evocolumns=None self.evodata=None self.DataNeedsUpdate() def ReReadData(self): if self.evocolumns is not None and self.evodata is not None: self.columns=self.evocolumns self.data=self.evodata return vcards="\r\n".join(self.evolution.getcontacts(self.folder)) columns,data=self.parsevcards(StringIO.StringIO(vcards)) columns.append("UniqueSerial-folderid") columns.append("UniqueSerial-sourcetype") moredata=[self.folder, "evolution"] for row in data: row.extend(moredata) self.evocolumns=self.columns=columns self.evodata=self.data=data class ImportQtopiaDesktopDialog(ImportDialog): # the order of this mapping matters .... importmapping=( # first column is field in Qtopia # second column is field in dialog (ImportDialog.possiblecolumns) ('FirstName', "First Name" ), ('LastName', "Last Name" ), ('MiddleName', "Middle Name"), ('Nickname', "Nickname"), ('Emails', "Email Addresses"), ('HomeStreet', "Home Street"), ('HomeCity', "Home City"), ('HomeZip', "Home Postal Code"), ('HomeState', "Home State" ), ('HomeCountry', "Home Country/Region" ), ('HomePhone', "Home Phone" ), ('HomeFax', "Home Fax" ), ('HomeMobile', "Mobile Phone" ), ('BusinessMobile', "Mobile Phone" ), ('HomeWebPage', "Home Web Page" ), ('BusinessStreet', "Business Street"), ('BusinessCity', "Business City" ), ('BusinessZip', "Business Postal Code" ), ('BusinessState', "Business State" ), ('BusinessCountry', "Business Country/Region", ), ('BusinessWebPage', "Business Web Page"), ('BusinessPhone', "Business Phone"), ('BusinessFax', "Business Fax" ), ('BusinessPager', "Pager" ), ('Company', "Company" ), ('Notes', "Notes" ), ('Categories', "Categories" ), ('Uid', "UniqueSerial-uid" ), ) ## # the fields we ignore ## ('Assistant', ) ## ('Children', ) ## ('DefaultEmail', ) ## ('Department', ) ## ('Dtmid', ) ## ('FileAs', ) ## ('Gender', ) ## ('JobTitle', ) ## ('Manager', ) ## ('Office', ) ## ('Profession', ) ## ('Spouse', ) ## ('Suffix', ) ## ('Title', ) importmappingdict={} for o,i in importmapping: importmappingdict[o]=i def __init__(self, parent, id, title): self.headerrowiseditable=False self.origcolumns=self.origdata=None ImportDialog.__init__(self, parent, id, title) def gethtmlhelp(self): "Returns tuple of help text and size" bg=self.GetBackgroundColour() return 'Importing Qtopia Desktop Contacts..' % (bg.Red(), bg.Green(), bg.Blue()), \ (600,30) def getcontrols(self, vbs): pass def ReReadData(self): if self.origcolumns is not None and self.origdata is not None: self.columns=self.origcolumns self.data=self.origdata return import native.qtopiadesktop filename=native.qtopiadesktop.getfilename() if not os.path.isfile(filename): wx.MessageBox(filename+" not found.", "Qtopia file not found", wx.ICON_EXCLAMATION|wx.OK) self.data={} self.columns=[] return items=native.qtopiadesktop.getcontacts() # work out what keys are actually present keys={} for item in items: for k in item.keys(): keys[k]=1 # We now need to produce columns with BitPim names not the Qtopia ones. # mappings are in self.importmapping want=[] for o,i in self.importmapping: if o in keys.keys(): want.append(o) # want now contains list of Qtopia keys we want, and the order we want them in self.columns=[self.importmappingdict[k] for k in want] # deal with serials self.columns.append("UniqueSerial-sourcetype") moredata=[ "qtopiadesktop"] # build up data self.data=[] for item in items: row=[] for k in want: v=item.get(k, None) row.append(v) self.data.append(row+moredata) self.origdata=self.data self.origcolumns=self.columns # The eGroupware login handling is a bit of a mess. Feel free to fix it. class eGroupwareLoginDialog(wx.Dialog): __pwdsentinel="\x01\x02\x01\x09\x01\x01\x14\x15" def __init__(self, parent, module, title="Login to eGroupware"): wx.Dialog.__init__(self, parent, -1, title, size=(400,-1)) self.module=module gs=wx.GridBagSizer(5,5) for row,label in enumerate( ("URL", "Domain", "Username", "Password") ): gs.Add(wx.StaticText(self, -1, label), flag=wx.ALIGN_RIGHT|wx.ALIGN_CENTRE_VERTICAL, pos=(row,0)) self.curl=wx.TextCtrl(self, -1) self.cdomain=wx.TextCtrl(self, -1) self.cuser=wx.TextCtrl(self, -1) self.cpassword=wx.TextCtrl(self, -1, style=wx.TE_PASSWORD) self.csavepassword=wx.CheckBox(self, -1, "Save") for row,widget in enumerate( (self.curl, self.cdomain, self.cuser) ): gs.Add(widget, flag=wx.EXPAND, pos=(row,1), span=(1,2)) gs.Add(self.cpassword, flag=wx.EXPAND, pos=(3,1)) gs.Add(self.csavepassword, flag=wx.ALIGN_CENTRE, pos=(3,2)) gs.AddGrowableCol(1) self.cmessage=wx.StaticText(self, -1, "Please enter your details") gs.Add(self.cmessage, flag=wx.EXPAND, pos=(4,0), span=(1,3)) vbs=wx.BoxSizer(wx.VERTICAL) vbs.Add(gs, 0, wx.EXPAND|wx.ALL,5) vbs.Add(wx.StaticLine(self, -1, style=wx.LI_HORIZONTAL), 0, wx.EXPAND|wx.ALL, 5) vbs.Add(self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.HELP), 0, wx.ALIGN_CENTER|wx.ALL, 5) # set initial values cfg=wx.GetApp().config self.curl.SetValue(cfg.Read("egroupware/url", "http://server.example.com/egroupware")) self.cdomain.SetValue(cfg.Read("egroupware/domain", "default")) try: import getpass defuser=getpass.getuser() except: defuser="user" self.cuser.SetValue(cfg.Read("egroupware/user", defuser)) p=cfg.Read("egroupware/password", "") if len(p): self.csavepassword.SetValue(True) self.cpassword.SetValue(self.__pwdsentinel) self.SetSizer(vbs) self.SetAutoLayout(True) vbs.Fit(self) # make the window a decent width self.SetDimensions(-1, -1, 500, -1, wx.SIZE_USE_EXISTING) wx.EVT_BUTTON(self, wx.ID_OK, self.OnOk) self.session=None def OnOk(self, evt): try: self.session=self._GetSession() evt.Skip() # end modal self.OnClose() return except Exception,e: self.cmessage.SetLabel(str(e)) # go around again def GetSession(self, auto=False): """Returns the Session object from the eGroupware library @param auto: If true then the user interface doesn't have to be shown""" if auto: try: self.session=self._GetSession() return self.session except Exception,e: self.cmessage.SetLabel(str(e)) self.ShowModal() return self.session def _GetSession(self): # lets see if the user has given us sensible params if self.curl.GetValue()=="http://server.example.com/egroupware": raise Exception("You must set the URL for the server") if len(self.cpassword.GetValue())==0: raise Exception("You must fill in the password") password=self.cpassword.GetValue() if password==self.__pwdsentinel: password=common.obfus_decode(wx.GetApp().config.Read("egroupware/password", "")) try: return self.module.getsession(self.curl.GetValue(), self.cuser.GetValue(), password, self.cdomain.GetValue()) finally: del password def OnClose(self, event=None): cfg=wx.GetApp().config cfg.Write("egroupware/url", self.curl.GetValue()) cfg.Write("egroupware/domain", self.cdomain.GetValue()) cfg.Write("egroupware/user", self.cuser.GetValue()) if self.csavepassword.GetValue(): p=self.cpassword.GetValue() if p!=self.__pwdsentinel: cfg.Write("egroupware/password", common.obfus_encode(p)) else: cfg.DeleteEntry("egroupware/password") class ImporteGroupwareDialog(ImportDialog): ID_CHANGE=wx.NewId() def __init__(self, parent, id, title, module): self.headerrowiseditable=False self.module=module ImportDialog.__init__(self, parent, id, title) self.sp=None def gethtmlhelp(self): "Returns tuple of help text and size" bg=self.GetBackgroundColour() return 'Importing eGroupware Contacts..' % (bg.Red(), bg.Green(), bg.Blue()), \ (600,30) def getcontrols(self, vbs): # need url, username, password and domain fields hbs=wx.BoxSizer(wx.HORIZONTAL) hbs.Add(wx.StaticText(self, -1, "URL"), 0, wx.ALIGN_CENTRE|wx.ALL,2) self.curl=wx.StaticText(self, -1) hbs.Add(self.curl, 3, wx.ALIGN_CENTRE_VERTICAL|wx.ALL, 2) hbs.Add(wx.StaticText(self, -1, "Domain"), 0, wx.ALIGN_CENTRE|wx.ALL,2) self.cdomain=wx.StaticText(self, -1) hbs.Add(self.cdomain, 1, wx.ALIGN_CENTRE_VERTICAL|wx.ALL, 2) hbs.Add(wx.StaticText(self, -1, "User"), 0, wx.ALIGN_CENTRE|wx.ALL,2) self.cuser=wx.StaticText(self, -1) hbs.Add(self.cuser, 1, wx.ALIGN_CENTRE_VERTICAL|wx.ALL, 2) self.cchange=wx.Button(self, self.ID_CHANGE, "Change ...") hbs.Add(self.cchange, 0, wx.ALL, 2) vbs.Add(hbs,0,wx.ALL,5) wx.EVT_BUTTON(self, self.ID_CHANGE, self.OnChangeCreds) self.setcreds() def OnChangeCreds(self,_): dlg=eGroupwareLoginDialog(self, self.module) newsp=dlg.GetSession() if newsp is not None: self.sp=newsp self.setcreds() self.DataNeedsUpdate() def setcreds(self): cfg=wx.GetApp().config self.curl.SetLabel(cfg.Read("egroupware/url", "http://server.example.com/egroupware")) self.cdomain.SetLabel(cfg.Read("egroupware/domain", "default")) try: import getpass defuser=getpass.getuser() except: defuser="user" self.cuser.SetLabel(cfg.Read("egroupware/user", defuser)) _preferred=( "Name", "First Name", "Middle Name", "Last Name", "Address", "Address2", "Email Address", "Email Address2", "Home Phone", "Mobile Phone", "Business Fax", "Pager", "Business Phone", "Notes", "Business Web Page", "Categories" ) def ReReadData(self): if self.sp is None: self.sp=eGroupwareLoginDialog(self, self.module).GetSession(auto=True) self.setcreds() self.data=[] self.columns=[] if self.sp is None: self.EndModal(wx.ID_CANCEL) return # work out what columns we have entries=[i for i in self.sp.getcontactspbformat()] cols=[] for e in entries: for k in e: if k not in cols: cols.append(k) # now put columns in prefered order cols.sort() self.columns=[] for p in self._preferred: if p in cols: self.columns.append(p) cols=[c for c in cols if c not in self.columns] self.columns.extend(cols) # make data self.data=[] for e in entries: self.data.append([e.get(c,None) for c in self.columns]) # strip trailing 2 off names in columns for i,c in enumerate(self.columns): if c.endswith("2"): self.columns[i]=c[:-1] def OnFileImportCSVContacts(parent): with guihelper.WXDialogWrapper(wx.FileDialog(parent, "Import CSV file", wildcard="CSV files (*.csv)|*.csv|Tab Separated file (*.tsv)|*.tsv|All files|*", style=wx.OPEN|wx.HIDE_READONLY|wx.CHANGE_DIR), True) as (dlg, retcode): if retcode==wx.ID_OK: path=dlg.GetPath() else: return with guihelper.WXDialogWrapper(ImportCSVDialog(path, parent, -1, "Import CSV file"), True) as (dlg, retcode): if retcode==wx.ID_OK: data=dlg.GetFormattedData() if data is not None: parent.GetActivePhonebookWidget().importdata(data, merge=dlg.merge) def OnFileImportVCards(parent): with guihelper.WXDialogWrapper(wx.FileDialog(parent, "Import vCards file", wildcard="vCard files (*.vcf)|*.vcf|All files|*", style=wx.OPEN|wx.HIDE_READONLY|wx.CHANGE_DIR), True) as (dlg, retcode): if retcode==wx.ID_OK: path=dlg.GetPath() else: return with guihelper.WXDialogWrapper(ImportVCardDialog(path, parent, -1, "Import vCard file"), True) as (dlg, retcode): if retcode==wx.ID_OK: data=dlg.GetFormattedData() if data is not None: parent.GetActivePhonebookWidget().importdata(data, merge=dlg.merge) def OnFileImportQtopiaDesktopContacts(parent): with guihelper.WXDialogWrapper(ImportQtopiaDesktopDialog(parent, -1, "Import Qtopia Desktop Contacts"), True) as (dlg, retcode): if retcode==wx.ID_OK: data=dlg.GetFormattedData() if data is not None: parent.GetActivePhonebookWidget().importdata(data, merge=dlg.merge) def OnFileImportOutlookContacts(parent): import native.outlook if not TestOutlookIsInstalled(): return with guihelper.WXDialogWrapper(ImportOutlookDialog(parent, -1, "Import Outlook Contacts", native.outlook), True) as (dlg, retcode): if retcode==wx.ID_OK: data=dlg.GetFormattedData() if data is not None: parent.GetActivePhonebookWidget().importdata(data, merge=dlg.merge) native.outlook.releaseoutlook() def OnFileImportEvolutionContacts(parent): import native.evolution with guihelper.WXDialogWrapper(ImportEvolutionDialog(parent, -1, "Import Evolution Contacts", native.evolution), True) as (dlg, retcode): if retcode==wx.ID_OK: data=dlg.GetFormattedData() if data is not None: parent.GetActivePhonebookWidget().importdata(data, merge=dlg.merge) def OnFileImporteGroupwareContacts(parent): import native.egroupware with guihelper.WXDialogWrapper(ImporteGroupwareDialog(parent, -1, "Import eGroupware Contacts", native.egroupware), True) as (dlg, retcode): if retcode==wx.ID_OK: data=dlg.GetFormattedData() if data is not None: parent.GetActivePhonebookWidget().importdata(data, merge=dlg.merge) def OnFileImportCommon(parent, dlg_class, dlg_title, widget, dict_key): with guihelper.WXDialogWrapper(dlg_class(parent, -1, dlg_title), True) as (dlg, res): if res==wx.ID_OK: pubsub.publish(pubsub.MERGE_CATEGORIES, dlg.get_categories()[:]) # and save the new data data_dict={ dict_key: dlg.get() } widget.populate(data_dict) widget.populatefs(data_dict) elif res==dlg_class.ID_ADD: # ask phonebook to merge our categories pubsub.publish(pubsub.MERGE_CATEGORIES, dlg.get_categories()[:]) # get existing data data_res=widget.getdata({}).get(dict_key, {}) # and add the new imported data data_res.update(dlg.get()) data_dict={ dict_key: data_res } # and save it widget.populate(data_dict) widget.populatefs(data_dict) elif res==dlg_class.ID_MERGE: # ask phonebook to merge our categories pubsub.publish(pubsub.MERGE_CATEGORIES, dlg.get_categories()[:]) # and merge the data widget.mergedata({ dict_key: dlg.get() }) def OnFileImportOutlookCalendar(parent): import native.outlook if not TestOutlookIsInstalled(): return import outlook_calendar import pubsub OnFileImportCommon(parent, outlook_calendar.OutlookImportCalDialog, 'Import Outlook Calendar', parent.GetActiveCalendarWidget(), 'calendar') native.outlook.releaseoutlook() def OnCalendarWizard(parent): import imp_cal_wizard OnFileImportCommon(parent, imp_cal_wizard.ImportCalendarWizard, 'Import Calendar Wizard', parent.GetActiveCalendarWidget(), 'calendar') def OnCalendarPreset(parent): import imp_cal_preset OnFileImportCommon(parent, imp_cal_preset.ImportCalendarPresetDialog, 'Import Calendar Preset', parent.GetActiveCalendarWidget(), 'calendar') def OnFileImportOutlookNotes(parent): import native.outlook if not TestOutlookIsInstalled(): return import outlook_notes OnFileImportCommon(parent, outlook_notes.OutlookImportNotesDialog, 'Import Outlook Notes', parent.GetActiveMemoWidget(), 'memo') native.outlook.releaseoutlook() def OnFileImportOutlookTasks(parent): import native.outlook if not TestOutlookIsInstalled(): return import outlook_tasks OnFileImportCommon(parent, outlook_tasks.OutlookImportTasksDialog, 'Import Outlook Tasks', parent.GetActiveTodoWidget(), 'todo') native.outlook.releaseoutlook() def OnFileImportVCal(parent): OnFileImportCommon(parent, vcal_calendar.VcalImportCalDialog, 'Import vCalendar', parent.GetActiveCalendarWidget(), 'calendar') def OnFileImportiCal(parent): OnFileImportCommon(parent, ical_calendar.iCalImportCalDialog, 'Import iCalendar', parent.GetActiveCalendarWidget(), 'calendar') def OnFileImportgCal(parent): OnFileImportCommon(parent, gcal.gCalImportDialog, 'Import Google Calendar', parent.GetActiveCalendarWidget(), 'calendar') def OnFileImportCSVCalendar(parent): OnFileImportCommon(parent, csv_calendar.CSVImportDialog, 'Import CSV Calendar', parent.GetActiveCalendarWidget(), 'calendar') ### ### AUTO_SYNC ### def AutoConfOutlookCalender(parent, folder, filters): import native.outlook if not TestOutlookIsInstalled(): return None, None import outlook_calendar config=() dlg=outlook_calendar.OutlookAutoConfCalDialog(parent, -1, 'Config Outlook Calendar AutoSync Settings', folder, filters) return AutoConfCommon(dlg) def AutoConfCSVCalender(parent, folder, filters): import csv_calendar config=() dlg=csv_calendar.CSVAutoConfCalDialog(parent, -1, 'Config CSV Calendar AutoSync Settings', folder, filters) return AutoConfCommon(dlg) def AutoConfVCal(parent, folder, filters): import vcal_calendar dlg=vcal_calendar.VCalAutoConfCalDialog(parent, -1, 'Config VCal AutoSync Settings', folder, filters) return AutoConfCommon(dlg) def AutoConfCommon(dlg): with guihelper.WXDialogWrapper(dlg, True) as (dlg, res): if res==wx.ID_OK: config=(dlg.GetFolder(), dlg.GetFilter()) else: config=() return res, config def AutoImportOutlookCalendar(parent, folder, filters): import native.outlook if not TestOutlookIsInstalled(): return 0 import outlook_calendar calendar_r=outlook_calendar.ImportCal(folder, filters) return AutoImportCalCommon(parent, calendar_r) def AutoImportVCal(parent, folder, filters): import vcal_calendar calendar_r=vcal_calendar.ImportCal(folder, filters) return AutoImportCalCommon(parent, calendar_r) def AutoImportCSVCalendar(parent, folder, filters): import csv_calendar calendar_r=csv_calendar.ImportCal(folder, filters) return AutoImportCalCommon(parent, calendar_r) def AutoImportCalCommon(parent, calendar_r): parent.calendarwidget.populate(calendar_r) parent.calendarwidget.populatefs(calendar_r) res=1 return res def OnAutoCalImportSettings(parent): pass def OnAutoCalImportExecute(parent): pass # Play list def OnWPLImport(parent): # get the wpl file name with guihelper.WXDialogWrapper(wx.FileDialog(parent, "Import wpl file", wildcard="wpl files (*.wpl)|*.wpl|All files|*", style=wx.OPEN|wx.HIDE_READONLY|wx.CHANGE_DIR), True) as (_dlg, _retcode): # parse & retrieve the data if _retcode==wx.ID_OK: _wpl=wpl_file.WPL(filename=_dlg.GetPath()) if not _wpl.title: return _pl_entry=playlist.PlaylistEntry() _pl_entry.name=_wpl.title _pl_entry.songs=[common.basename(x) for x in _wpl.songs] # populate the new data _widget=parent.GetActivePlaylistWidget() _pl_data={} _widget.getdata(_pl_data) _pl_data[playlist.playlist_key].append(_pl_entry) _widget.populate(_pl_data) _widget.populatefs(_pl_data) ### ### EXPORTS ### def GetPhonebookExports(): res=[] # Vcards - always possible res.append( (guihelper.ID_EXPORT_VCARD_CONTACTS, "vCards...", "Export the phonebook to vCards", OnFileExportVCards) ) # eGroupware - always possible res.append( (guihelper.ID_EXPORT_GROUPWARE_CONTACTS, "eGroupware...", "Export the phonebook to eGroupware", OnFileExporteGroupware) ) # CSV - always possible res.append( (guihelper.ID_EXPORT_CSV_CONTACTS, 'CSV Contacts...', 'Export the phonebook to CSV', OnFileExportCSV)) res.append( (guihelper.ID_EXPORT_CSV_CALENDAR, 'CSV Calendar...', 'Export the calendar to CSV', OnFileExportCSVCalendar) ) # iCal res.append( (guihelper.ID_EXPORT_ICALENDAR, 'iCalendar...', 'Export the calendar to iCalendar', OnFileExportiCalendar) ) # SMS - always possible res.append( (guihelper.ID_EXPORT_SMS, 'SMS...', 'Export SMS Messages', OnFileExportSMS)) # Call History - always possible res.append( (guihelper.ID_EXPORT_CSV_CALL_HISTORY, 'CSV Call History...', 'Export Call History to CSV', OnFileExportCallHistory)) # Media - always possible res.append( (guihelper.ID_EXPORT_MEDIA_TO_DIR, 'Media to Folder...', 'Export Media Files to a Folder on your computer', OnFileExportMediaDir)) res.append( (guihelper.ID_EXPORT_MEDIA_TO_ZIP, 'Media to Zip File...', 'Export Media Files to a Zip file', OnFileExportMediaZip)) return res class BaseExportDialog(wx.Dialog): def __init__(self, parent, title, style=wx.CAPTION|wx.MAXIMIZE_BOX|\ wx.SYSTEM_MENU|wx.DEFAULT_DIALOG_STYLE): wx.Dialog.__init__(self, parent, id=-1, title=title, style=style) self._phonebook_module=parent.GetActivePhonebookWidget() def GetSelectionGui(self, parent): "Returns a sizer containing the gui for selecting which items and which fields are exported" hbs=wx.BoxSizer(wx.HORIZONTAL) lsel=len(self._phonebook_module.GetSelectedRows()) lall=len(self._phonebook_module._data) rbs=wx.StaticBoxSizer(wx.StaticBox(self, -1, "Rows"), wx.VERTICAL) self.rows_selected=wx.RadioButton(self, wx.NewId(), "Selected (%d)" % (lsel,), style=wx.RB_GROUP) self.rows_all=wx.RadioButton(self, wx.NewId(), "All (%d)" % (lall,)) rbs.Add(self.rows_selected, 0, wx.EXPAND|wx.ALL, 2) rbs.Add(self.rows_all, 0, wx.EXPAND|wx.ALL, 2) hbs.Add(rbs, 3, wx.EXPAND|wx.ALL, 5) self.rows_selected.SetValue(lsel>1) self.rows_all.SetValue(not lsel>1) vbs2=wx.StaticBoxSizer(wx.StaticBox(self, -1, "Fields"), wx.VERTICAL) cb=[] for c in ("Everything", "Phone Numbers", "Addresses", "Email Addresses"): cb.append(wx.CheckBox(self, -1, c)) vbs2.Add(cb[-1], 0, wx.EXPAND|wx.ALL, 5) for c in cb: c.Enable(False) cb[0].SetValue(True) hbs.Add(vbs2, 4, wx.EXPAND|wx.ALL, 5) return hbs def GetPhoneBookItems(self, includecount=False): """Returns each item in the phonebook based on the settings for all vs selected. The fields are also trimmed to match what the user requested. @param includecount: If this is true then the return is a tuple of (item, number, max) and you can use number and max to update a progress bar. Note that some items may be skipped (eg if the user only wants records with phone numbers and some records don't have them) """ data=self._phonebook_module._data if self.rows_all.GetValue(): rowkeys=data.keys() else: rowkeys=self._phonebook_module.GetSelectedRowKeys() for i,k in enumerate(rowkeys[:]): # we use a dup of rowkeys since it can be altered while exporting # ::TODO:: look at fields setting if includecount: yield data[k],i,len(rowkeys) else: yield data[k] class ExportVCardDialog(BaseExportDialog): dialects=vcard.profiles.keys() dialects.sort() default_dialect='vcard2' def __init__(self, parent, title): BaseExportDialog.__init__(self, parent, title) # make the ui vbs=wx.BoxSizer(wx.VERTICAL) bs=wx.BoxSizer(wx.HORIZONTAL) bs.Add(wx.StaticText(self, -1, "File"), 0, wx.ALL|wx.ALIGN_CENTRE, 5) self.filenamectrl=wx.TextCtrl(self, -1, wx.GetApp().config.Read("vcard/export-file", "bitpim.vcf")) bs.Add(self.filenamectrl, 1, wx.ALL|wx.EXPAND, 5) self.browsectrl=wx.Button(self, wx.NewId(), "Browse...") bs.Add(self.browsectrl, 0, wx.ALL|wx.EXPAND, 5) wx.EVT_BUTTON(self, self.browsectrl.GetId(), self.OnBrowse) vbs.Add(bs, 0, wx.EXPAND|wx.ALL, 5) hbs2=wx.BoxSizer(wx.HORIZONTAL) # dialects hbs=wx.StaticBoxSizer(wx.StaticBox(self, -1, "Dialect"), wx.VERTICAL) self.dialectctrl=wx.ListBox(self, -1, style=wx.LB_SINGLE, choices=[vcard.profiles[d]['description'] for d in self.dialects]) default=wx.GetApp().config.Read("vcard/export-format", self.default_dialect) if default not in self.dialects: default=self.default_dialect self.dialectctrl.SetSelection(self.dialects.index(default)) hbs.Add(self.dialectctrl, 1, wx.ALL|wx.EXPAND, 5) hbs2.Add(hbs, 2, wx.EXPAND|wx.ALL, 10) hbs2.Add(self.GetSelectionGui(self), 5, wx.EXPAND|wx.ALL, 5) vbs.Add(hbs2, 0, wx.EXPAND|wx.ALL, 5) vbs.Add(wx.StaticLine(self, -1, style=wx.LI_HORIZONTAL), 0, wx.EXPAND|wx.ALL,5) vbs.Add(self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.HELP), 0, wx.ALIGN_CENTER|wx.ALL, 5) self.SetSizer(vbs) self.SetAutoLayout(True) vbs.Fit(self) wx.EVT_BUTTON(self, wx.ID_OK, self.OnOk) def OnBrowse(self, _): with guihelper.WXDialogWrapper(wx.FileDialog(self, defaultFile=self.filenamectrl.GetValue(), wildcard="vCard files (*.vcf)|*.vcf", style=wx.SAVE|wx.CHANGE_DIR), True) as (dlg, retcode): if retcode==wx.ID_OK: self.filenamectrl.SetValue(os.path.join(dlg.GetDirectory(), dlg.GetFilename())) def OnOk(self, _): # do export filename=self.filenamectrl.GetValue() dialect=None for k,v in vcard.profiles.items(): if v['description']==self.dialectctrl.GetStringSelection(): dialect=k break assert dialect is not None # ::TODO:: ask about overwriting existing file with file(filename, "wt") as f: for record in self.GetPhoneBookItems(): print >>f, vcard.output_entry(record, vcard.profiles[dialect]['profile']) # save settings since we were succesful wx.GetApp().config.Write("vcard/export-file", filename) wx.GetApp().config.Write("vcard/export-format", dialect) wx.GetApp().config.Flush() self.EndModal(wx.ID_OK) class ExportCSVDialog(BaseExportDialog): __pb_keys=( ('names', ('title', 'first', 'middle', 'last', 'full', 'nickname')), ('addresses', ('type', 'company', 'street', 'street2', 'city', 'state', 'postalcode', 'country')), ('numbers', ('number', 'type', 'speeddial')), ('emails', ('email', 'type')), ('urls', ('url', 'type')), ('categories', ('category',)), ('ringtones', ('ringtone', 'use')), ('wallpapers', ('wallpaper', 'use')), ('memos', ('memo',)), ('flags', ('secret',)) ) def __init__(self, parent, title): super(ExportCSVDialog, self).__init__(parent, title) # make the ui vbs=wx.BoxSizer(wx.VERTICAL) bs=wx.BoxSizer(wx.HORIZONTAL) bs.Add(wx.StaticText(self, -1, "File"), 0, wx.ALL|wx.ALIGN_CENTRE, 5) self.filenamectrl=wx.TextCtrl(self, -1, "bitpim.csv") bs.Add(self.filenamectrl, 1, wx.ALL|wx.EXPAND, 5) self.browsectrl=wx.Button(self, wx.NewId(), "Browse...") bs.Add(self.browsectrl, 0, wx.ALL|wx.EXPAND, 5) vbs.Add(bs, 0, wx.EXPAND|wx.ALL, 5) # selection GUI vbs.Add(self.GetSelectionGui(self), 5, wx.EXPAND|wx.ALL, 5) # the buttons vbs.Add(wx.StaticLine(self, -1, style=wx.LI_HORIZONTAL), 0, wx.EXPAND|wx.ALL,5) vbs.Add(self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.HELP), 0, wx.ALIGN_CENTER|wx.ALL, 5) # event handlers wx.EVT_BUTTON(self, self.browsectrl.GetId(), self.OnBrowse) wx.EVT_BUTTON(self, wx.ID_OK, self.OnOk) # all done self.SetSizer(vbs) self.SetAutoLayout(True) vbs.Fit(self) def OnBrowse(self, _): with guihelper.WXDialogWrapper(wx.FileDialog(self, defaultFile=self.filenamectrl.GetValue(), wildcard="CSV files (*.csv)|*.csv", style=wx.SAVE|wx.CHANGE_DIR), True) as (dlg, retcode): if retcode==wx.ID_OK: self.filenamectrl.SetValue(os.path.join(dlg.GetDirectory(), dlg.GetFilename())) def OnOk(self, _): # do export filename=self.filenamectrl.GetValue() # find out the length of each key key_count={} for e in self.__pb_keys: key_count[e[0]]=0 for record in self.GetPhoneBookItems(): for k in record: if key_count.has_key(k): key_count[k]=max(key_count[k], len(record[k])) with file(filename, 'wt') as f: l=[] for e in self.__pb_keys: if key_count[e[0]]: ll=[e[0]+'_'+x for x in e[1]] l+=ll*key_count[e[0]] f.write(','.join(l)+'\n') for record in self.GetPhoneBookItems(): ll=[] for e in self.__pb_keys: key=e[0] if key_count[key]: for i in range(key_count[key]): try: entry=record[key][i] except (KeyError, IndexError): entry={} for field in e[1]: _v=entry.get(field, '') if isinstance(_v, unicode): _v=_v.encode('ascii', 'ignore') ll.append('"'+str(_v).replace('"', '')+'"') f.write(','.join(ll)+'\n') f.flush() self.EndModal(wx.ID_OK) class ExporteGroupwareDialog(BaseExportDialog): ID_REFRESH=wx.NewId() ID_CHANGE=wx.NewId() _categorymessage="eGroupware doesn't create categories correctly via XML-RPC, so you should manually create them via the web interface. " \ "Click to see which ones should be manually created." def __init__(self, parent, title, module): BaseExportDialog.__init__(self, parent, title) self.module=module self.parent=parent # make the ui vbs=wx.BoxSizer(wx.VERTICAL) hbs=wx.BoxSizer(wx.HORIZONTAL) hbs.Add(wx.StaticText(self, -1, "URL"), 0, wx.ALIGN_CENTRE|wx.ALL,2) self.curl=wx.StaticText(self, -1) hbs.Add(self.curl, 3, wx.ALIGN_CENTRE_VERTICAL|wx.ALL, 2) hbs.Add(wx.StaticText(self, -1, "Domain"), 0, wx.ALIGN_CENTRE|wx.ALL,5) self.cdomain=wx.StaticText(self, -1) hbs.Add(self.cdomain, 1, wx.ALIGN_CENTRE_VERTICAL|wx.ALL, 2) hbs.Add(wx.StaticText(self, -1, "User"), 0, wx.ALIGN_CENTRE|wx.ALL,5) self.cuser=wx.StaticText(self, -1) hbs.Add(self.cuser, 1, wx.ALIGN_CENTRE_VERTICAL|wx.ALL, 5) self.cchange=wx.Button(self, self.ID_CHANGE, "Change ...") hbs.Add(self.cchange, 0, wx.ALL, 2) vbs.Add(hbs,0,wx.ALL,5) wx.EVT_BUTTON(self, self.ID_CHANGE, self.OnChangeCreds) self.sp=None self.setcreds() vbs.Add(self.GetSelectionGui(self), 0, wx.EXPAND|wx.ALL, 5) # category checker bs2=wx.StaticBoxSizer(wx.StaticBox(self, -1, "Category Checker"), wx.HORIZONTAL) bs2.Add(wx.Button(self, self.ID_REFRESH, "Check"), 0, wx.ALL, 5) self.categoryinfo=wx.TextCtrl(self, -1, self._categorymessage, style=wx.TE_MULTILINE|wx.TE_READONLY) bs2.Add(self.categoryinfo, 1, wx.EXPAND|wx.ALL, 2) vbs.Add(bs2, 0, wx.EXPAND|wx.ALL, 5) vbs.Add(wx.StaticLine(self, -1, style=wx.LI_HORIZONTAL), 0, wx.EXPAND|wx.ALL,5) bs2=wx.StaticBoxSizer(wx.StaticBox(self, -1, "Export Progress"), wx.VERTICAL) self.progress=wx.Gauge(self, -1, style=wx.GA_HORIZONTAL|wx.GA_SMOOTH) self.progress_text=wx.StaticText(self, -1, "") bs2.Add(self.progress, 0, wx.EXPAND|wx.ALL, 5) bs2.Add(self.progress_text, 0, wx.EXPAND|wx.ALL, 5) vbs.Add(bs2, 0, wx.EXPAND|wx.ALL, 5) vbs.Add(wx.StaticLine(self, -1, style=wx.LI_HORIZONTAL), 0, wx.EXPAND|wx.ALL,5) vbs.Add(self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.HELP), 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALL, 5) self.SetSizer(vbs) self.SetAutoLayout(True) # for some reason wx decides to make the dialog way taller # than needed. i can't figure out why. sometimes wx just # makes you go grrrrrrrr vbs.Fit(self) wx.EVT_BUTTON(self, self.ID_REFRESH, self.CategoryCheck) wx.EVT_BUTTON(self, wx.ID_OK, self.OnOk) def OnChangeCreds(self,_): dlg=eGroupwareLoginDialog(self, self.module) newsp=dlg.GetSession() if newsp is not None: self.sp=newsp self.setcreds() def setcreds(self): cfg=wx.GetApp().config self.curl.SetLabel(cfg.Read("egroupware/url", "http://server.example.com/egroupware")) self.cdomain.SetLabel(cfg.Read("egroupware/domain", "default")) try: import getpass defuser=getpass.getuser() except: defuser="user" self.cuser.SetLabel(cfg.Read("egroupware/user", defuser)) def CategoryCheck(self, evt=None): if evt is not None: evt.Skip() if self.sp is None: self.sp=eGroupwareLoginDialog(self, self.module).GetSession(auto=True) self.setcreds() self.FindWindowById(wx.ID_OK).Enable(self.sp is not None) self.FindWindowById(self.ID_REFRESH).Enable(self.sp is not None) # find which categories are missing cats=[] for e in self.GetPhoneBookItems(): for c in e.get("categories", []): cc=c["category"] if cc not in cats: cats.append(cc) cats.sort() egcats=[v['name'] for v in self.sp.getcategories()] nocats=[c for c in cats if c not in egcats] if len(nocats): self.categoryinfo.SetValue("eGroupware doesn't have the following categories, which you should manually add:\n\n"+", ".join(nocats)) else: self.categoryinfo.SetValue("eGroupware has all the categories you use") def OnOk(self, _): if self.sp is None: self.sp=eGroupwareLoginDialog(self, self.module).GetSession(auto=True) self.setcreds() if self.sp is None: return doesntexistaction=None catsmodified=True # load categories # write out each one setmax=-1 for record,pos,max in self.GetPhoneBookItems(includecount=True): if catsmodified: # get the list of categories cats=dict( [(v['name'], v['id']) for v in self.sp.getcategories()] ) if max!=setmax: setmax=max self.progress.SetRange(max) self.progress.SetValue(pos) self.progress_text.SetLabel(nameparser.formatsimplename(record.get("names", [{}])[0])) wx.SafeYield() catsmodified,rec=self.FormatRecord(record, cats) if rec['id']!=0: # we have an id, but the record could have been deleted on the eg server, so # we check if not self.sp.doescontactexist(rec['id']): if doesntexistaction is None: with guihelper.WXDialogWrapper(eGroupwareEntryGoneDlg(self, rec['fn']), True) as (dlg, _): action=dlg.GetAction() if dlg.ForAll(): doesntexistaction=action else: action=doesntexistaction if action==self._ACTION_RECREATE: rec['id']=0 elif action==self._ACTION_IGNORE: continue elif action==self._ACTION_DELETE: found=False for serial in record["serials"]: if serial["sourcetype"]=="bitpim": self.parent.GetActivePhonebookWidget().DeleteBySerial(serial) found=True break assert found continue newid=self.sp.writecontact(rec) found=False for serial in record["serials"]: if serial["sourcetype"]=="bitpim": self.parent.GetActivePhonebookWidget().UpdateSerial(serial, {"sourcetype": "egroupware", "id": newid}) found=True break assert found self.EndModal(wx.ID_OK) def FormatRecord(self, record, categories): """Convert record into egroupware fields We return a tuple of (egw formatted record, if we update categories) If the second part is True, the categories should be re-read from the server after writing the record.""" catsmodified=False # note that mappings must be carefully chosen to ensure that importing from egroupware # and then re-exporting doesn't change anything. res={'id': 0} # zero means create new record # find existing egroupware id for i in record.get("serials", []): if i['sourcetype']=='egroupware': res['id']=i['id'] break # name (nb we don't do prefix or suffix since bitpim doesn't know about them) res['n_given'],res['n_middle'],res['n_family']=nameparser.getparts(record.get("names", [{}])[0]) for nf in 'n_given', 'n_middle', 'n_family': if res[nf] is None: res[nf]="" # set None fields to blank string res['fn']=nameparser.formatsimplename(record.get("names", [{}])[0]) # addresses for t,prefix in ("business", "adr_one"), ("home", "adr_two"): a={} adr=record.get("addresses", []) for i in adr: if i['type']==t: for p2,k in ("_street", "street"), ("_locality", "city"), ("_region", "state"), \ ("_postalcode", "postalcode"), ("_countryname", "country"): res[prefix+p2]=i.get(k, "") if t=="business": res['org_name']=i.get("company","") break # email if "emails" in record: # this means we ignore emails without a type, but that can't be avoided with # how egroupware works for t,k in ("business", "email"), ("home", "email_home"): for i in record["emails"]: if i.get("type",None)==t: res[k]=i.get("email") res[k+"_type"]="INTERNET" break # categories cats={} for cat in record.get("categories", []): c=cat['category'] v=categories.get(c, None) if v is None: catsmodified=True for i in xrange(0,-999999,-1): if `i` not in cats: break else: i=`v` cats[i]=str(c) res['cat_id']=cats # phone numbers # t,k is bitpim type, egroupware type for t,k in ("home", "tel_home"), ("cell", "tel_cell"), ('fax','tel_fax'), \ ('pager', 'tel_pager'), ('office', 'tel_work'): if "numbers" in record: v="" for i in record['numbers']: if i['type']==t: v=i['number'] break res[k]=phonenumber.format(v) # miscellaneous others if "memos" in record: memos=record.get("memos", []) memos+=[{}] res['note']=memos[0].get("memo","") if "urls" in record: urls=record.get("urls", []) u="" for url in urls: if url.get("type", None)=="business": u=url["url"] break if len(u)==0: urls+=[{'url':""}] u=urls[0]["url"] res['url']=u # that should be everything return catsmodified,res _ACTION_RECREATE=1 _ACTION_IGNORE=2 _ACTION_DELETE=3 class eGroupwareEntryGoneDlg(wx.Dialog): choices=( ("Re-create entry on server", ExporteGroupwareDialog._ACTION_RECREATE), ("Delete the entry in BitPim", ExporteGroupwareDialog._ACTION_DELETE), ("Ignore this entry for now", ExporteGroupwareDialog._ACTION_IGNORE) ) def __init__(self, parent, details): wx.Dialog.__init__(self, parent, -1, title="Entry deleted on server") vbs=wx.BoxSizer(wx.VERTICAL) vbs.Add(wx.StaticText(self, -1, "The entry for \"%s\" has\nbeen deleted on the server." % (details,) ), 0, wx.EXPAND|wx.ALL, 5) self.rb=wx.RadioBox(self, -1, "Action to take", choices=[t for t,a in self.choices]) vbs.Add(self.rb, 0, wx.EXPAND|wx.ALL, 5) self.always=wx.CheckBox(self, -1, "Always take this action") vbs.Add(self.always, 0, wx.ALL|wx.ALIGN_CENTRE, 5) vbs.Add(wx.StaticLine(self, -1, style=wx.LI_HORIZONTAL), 0, wx.EXPAND|wx.ALL,5) vbs.Add(self.CreateButtonSizer(wx.OK|wx.HELP), 0, wx.ALIGN_CENTER|wx.ALL, 5) self.SetSizer(vbs) vbs.Fit(self) def GetAction(self): return self.choices[self.rb.GetSelection()][1] def ForAll(self): return self.always.GetValue() def OnFileExportVCards(parent): with guihelper.WXDialogWrapper(ExportVCardDialog(parent, "Export phonebook to vCards"), True): pass def OnFileExporteGroupware(parent): import native.egroupware with guihelper.WXDialogWrapper(ExporteGroupwareDialog(parent, "Export phonebook to eGroupware", native.egroupware), True): pass def OnFileExportCSV(parent): with guihelper.WXDialogWrapper(ExportCSVDialog(parent, "Export phonebook to CSV"), True): pass def OnFileExportCSVCalendar(parent): import csv_calendar with guihelper.WXDialogWrapper(csv_calendar.ExportCSVDialog(parent, 'Export Calendar to CSV'), True): pass def OnFileExportiCalendar(parent): with guihelper.WXDialogWrapper(ical_calendar.ExportDialog(parent, 'Export Calendar to iCalendar'), True): pass def OnFileExportSMS(parent): import sms_imexport with guihelper.WXDialogWrapper(sms_imexport.ExportSMSDialog(parent, 'Export SMS'), True): pass def OnFileExportCallHistory(parent): import call_history_export with guihelper.WXDialogWrapper(call_history_export.ExportCallHistoryDialog(parent, 'Export Call History'), True): pass def OnFileExportMediaZip(parent): import media_root with guihelper.WXDialogWrapper(media_root.ExportMediaToZipDialog(parent, 'Export Media to Zip')) as dlg: dlg.DoDialog() def OnFileExportMediaDir(parent): import media_root with guihelper.WXDialogWrapper(media_root.ExportMediaToDirDialog(parent, 'Media will be copied to selected folder')) as dlg: dlg.DoDialog() bitpim-1.0.7+dfsg1/src/usb_ids.py0000644001616600161660000003212310402434373014741 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2003 Steve Palm ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: usb_ids.py 2867 2006-03-05 01:03:55Z djpham $ """Parse the usb.ids file for quick access to the information contained therein""" import re vendor_re = re.compile(r"^([0-9A-Fa-f]{4,4})\s+(.*)$") device_re = re.compile(r"^\t([0-9A-Fa-f]{4,4})\s+(.*)$") iface_re = re.compile(r"^\t\t([0-9A-Fa-f]{2,2})\s+(.*)$") usbclass_re = re.compile(r"^C\s([0-9A-Fa-f]{2,2})\s+(.*)$") usbsubclass_re = re.compile(r"^\t([0-9A-Fa-f]{2,2})\s+(.*)$") usbprotocol_re = re.compile(r"^\t\t([0-9A-Fa-f]{2,2})\s+(.*)$") ### ### USB Info superclass ### class usbInfoObject: """ Super class for all types of USB vendor/device/interface/class/sublcass/protocol classes which will be descendants of this. I chose to make and use various children of this class, as it's possible they may have unique information of their own some time later, as well as allowing a more natural name/syntax based on object use. """ def __init__(self, id, description): """ Set our ID code, description, and prepare to accept children """ self.id = id self.description = description self.children = {}; def description(self): """ Return the description for this object """ return self.description def id(self): """ Return our ID code """ return self.id def addChild(self, child): """ Add a child to our list """ self.children[int(child.id, 16)] = child def getChild(self, child): """ If we have a child matching the request, return it """ if child in self.children: return self.children[child] else: return None def getChildren(self): """ Return a list of all our children """ return self.children.values() ### ### USB ID file superclass --- This is our master object ### class usb_ids: """ Class that represents the data in the usb.ids file It reads/parses the file and creates the objects to match """ def __init__(self, fname=None): """ Initialize the class. This includes reading the supplied file and creating/populating as many related objects as needed. """ self.vendorlist = VendorList() self.usbclasslist = USBClassList() self.inVendor = 0 self.inClass = 0 if fname is not None: self.add_data(fname) def add_data(self, fname): try: ufile = open(fname, "rt") try: aline = ufile.readline() while aline != "": # Remove any EOL characters while (aline[:-1] in ["\r", "\n"]): aline = aline[:-1] # Check for a vendor ID line m = vendor_re.match(aline) if (m): self.inVendor = 1 self.inClass = 0 self.curr_vendor = VendorID(m.group(1), m.group(2)) self.vendorlist.addVendor(m.group(1), self.curr_vendor) if (self.inVendor): # Check for a device ID line m = device_re.match(aline) if (m): self.curr_device = DeviceID(m.group(1), m.group(2)) self.curr_vendor.addDevice(self.curr_device) # Check for a interface ID line m = iface_re.match(aline) if (m): self.curr_device.addInterface(InterfaceID(m.group(1), m.group(2))) # Check for a USB Class line m = usbclass_re.match(aline) if (m): self.inClass = 1 self.inVendor = 0 self.curr_usbclass = USBClass(m.group(1), m.group(2)) self.usbclasslist.addClass(m.group(1), self.curr_usbclass) if (self.inClass): # Check for a USB SubClass line m = usbsubclass_re.match(aline) if (m): self.curr_usbsubclass = USBClassSubclass(m.group(1), m.group(2)) self.curr_usbclass.addSubclass(self.curr_usbsubclass) # Check for a USB Protocol line m = usbprotocol_re.match(aline) if (m): self.curr_usbsubclass.addProtocol(USBClassProtocol(m.group(1), m.group(2))) # Get next line (if it exists) aline = ufile.readline() except IOError: # We'll take a pass on it, live with what (if any) data we get pass except IOError: print ("Cannot open the USB ID file: %s" % fname) raise if (ufile): ufile.close() def lookupdevice(self, vendor, product=None, interface=None): return self.vendorlist.getVendorInfo(vendor, product, interface) def lookupclass(self, klass, subclass=None, protocol=None): return self.usbclasslist.getClassInfo(klass, subclass, protocol) def getVendorList(self): """ Return the object representing the list of vendors """ return self.vendorlist def getUSBClassList(self): """ Return the object representing the list of USB Classes """ return self.usbclasslist ### ### USB VendorID/DeviceID information related classes ### class VendorID(usbInfoObject): """ This class abstracts USB Vendor ID information It holds the description, and a list of Device ID's """ def addDevice(self, device): """ Put this device on our list """ self.addChild(device) def getDevice(self, device): """ Return the requested device by ID, if we have it """ return self.getChild(device) def getDevices(self): """ Return a list of our devices """ return self.getChildren() class DeviceID(usbInfoObject): """ This class abstracts USB Device ID information It holds the description and a list of the Interface ID's """ def addInterface(self, interface): """ Put this interface on our list """ self.addChild(interface) def getInterface(self, interface): """ Return the requested interface by ID, if we have it """ return self.getChild(interface) def getInterfaces(self): """ Return a list of our interfaces """ return self.getChildren() class InterfaceID(usbInfoObject): """ This class abstracts USB Interface information It holds the description """ pass class VendorList: """ This class is responsible for the collection of vendor data It allows you to ask for: - vendor info by VendorID - device info by VendorID/DeviceID - interface """ def __init__(self): """ Prepare a dict to handle all of our children vendor objects """ self.vendorlist = {} def addVendor(self, vID, vDesc): """ Put this vendor into our dictionary """ self.vendorlist[int(vID,16)] = vDesc def getVendorInfo(self, vID, dID=None, iID=None): """ Lookup info for vendor, device, interface - last two are optional """ # First things first... Get information if available.... self.vendor = self.device = self.iface = None self.vDesc = self.dDesc = self.iDesc = None # --- Vendor if vID in self.vendorlist: self.vendor = self.vendorlist[vID] self.vDesc = self.vendor.description # --- Device if self.vendor: self.device = self.vendor.getDevice(dID) if self.device: self.dDesc = self.device.description # --- Interface if self.device: self.iface = self.device.getInterface(iID) if self.iface: self.iDesc = self.iface.description # Now, decide how we were called, and return appropriately if ((dID is None) and (iID is None)): return (self.vDesc,) elif (iID is None): return (self.vDesc, self.dDesc) else: return (self.vDesc, self.dDesc, self.iDesc) def getVendorList(self): return self.vendorlist.values() ### ### USB Class information related classes ### class USBClass(usbInfoObject): """ This class abstracts USB Class information It holds the description, and a list of Subclasses """ def addSubclass(self, subclass): """ Put this subclass on our list """ self.addChild(subclass) def getSubclass(self, subclass): """ Return subclass by ID, if we have it """ return self.getChild(subclass) def getSubclasses(self): """ Return a list of our subclasses """ return self.getChildren() class USBClassSubclass(usbInfoObject): """ This class abstracts USB Device SubClass information It holds the description and a list of the protocols """ def addProtocol(self, protocol): """ Put this protocol on our list """ self.addChild(protocol) def getProtocol(self, protocol): """ Return protocol as ID, if we have it """ return self.getChild(protocol) def getProtocols(self): """ Return a list of our protocols """ return self.getChildren() class USBClassProtocol(usbInfoObject): """ This class abstracts USB Interface information It holds the description """ pass class USBClassList: """ This class is responsible for the collection of USB Class data It allows you to ask for: - USB Class info by Class ID - USB SubClass info by ClassID/SubclassID - USB Protocol info by ClassID/SubclassID/ProtocolID """ def __init__(self): self.classlist = {} def addClass(self, cID, cDesc): self.classlist[int(cID, 16)] = cDesc def getClassInfo(self, cID, sID=None, pID=None): """ Lookup info for class, subclass, protocol - last two are optional """ # First things first... Get information if available.... self.usbclass = self.subclass = self.protocol = None self.cDesc = self.sDesc = self.pDesc = None # --- USB Class if cID in self.classlist: self.usbclass = self.classlist[cID] self.cDesc = self.usbclass.description # --- USB Subclass if self.usbclass: self.subclass = self.usbclass.getSubclass(sID) if self.subclass: self.sDesc = self.subclass.description # --- USB Protocol if self.subclass: self.protocol = self.subclass.getProtocol(pID) if self.protocol: self.pDesc = self.protocol.description # Now, decide how we were called, and return appropriately if ((sID is None) and (pID is None)): return (self.cDesc,) elif (pID is None): return (self.cDesc, self.sDesc) else: return (self.cDesc, self.sDesc, self.pDesc) def getUSBClassList(self): return self.classlist.values() ### ### Interactive testing code ### if (__name__ == "__main__"): import os, guihelper def print_vendor_info(USBids): # Print out vendor / device / interface info vlist = USBids.getVendorList() for v in vlist.getVendorList(): print ("VENDOR: %s %s" % (v.id, v.description)) for d in v.getDevices(): print ("\tDEVICE: %s %s" % (d.id, d.description)) for i in d.getInterfaces(): print ("\t\tIFACE: %s %s" % (i.id, i.description)) def print_class_info(USBids): # Print out class / subclass / protocol clist = USBids.getUSBClassList() for c in clist.getUSBClassList(): print ("CLASS: %s %s" % (c.id, c.description)) for s in c.getSubclasses(): print ("\tSUBCLASS: %s %s" % (s.id, s.description)) for p in s.getProtocols(): print ("\t\tPROTOCOL: %s %s" % (p.id, p.description)) myUSBids = usb_ids(os.path.join(guihelper.resourcedirectory, "usb.ids")) # PRINT OUT THE WHOLE TREE AS A TEST CASE # print_vendor_info(myUSBids) # print_class_info(myUSBids) # Our list is now internally decimal, so to lookup/inquire by hex # You must convert to decimal before passing your inquiry in... # Test lookup for various bits of USB Vendor/Device/Interface information print "Inquire on Vendor 1452, Device 518, Iface 1 using various levels of detail:" vlist = myUSBids.getVendorList() print vlist.getVendorInfo(1452) print vlist.getVendorInfo(1452, 518) print vlist.getVendorInfo(1452, 518, 1) print # Test lookup for various bits of USB Class/Subclass/Protocol information print "Inquire on Class 8, Subclass 4, Protocol 0 using various levels of detail:" clist = myUSBids.getUSBClassList() print clist.getClassInfo(8) print clist.getClassInfo(8, 4) print clist.getClassInfo(8, 4, 0) print # For reference, this is how you'd inquire on hex values # print vlist.getVendorInfo(int("05ac", 16)) # print vlist.getVendorInfo(int("05ac", 16), int("0206", 16)) # print vlist.getVendorInfo(int("05ac", 16), int("0206", 16), int("01", 16)) # print clist.getClassInfo(int("08", 16)) # print clist.getClassInfo(int("08", 16), int("04", 16)) # print clist.getClassInfo(int("08", 16), int("04", 16), int("00", 16)) # The following are in hex just becuase that way I can visually match them # up with the entries in the test.ids file # Now, let's test for something that doesn't exist: print "Look up something with little detail in Internet file... 1004/6000/(00..02)" print vlist.getVendorInfo(int("1004", 16), int("6000", 16), int("00", 16)) print vlist.getVendorInfo(int("1004", 16), int("6000", 16), int("01", 16)) print vlist.getVendorInfo(int("1004", 16), int("6000", 16), int("02", 16)) print # Put the data in from our local copy print "Add in our test data to override internet data" myUSBids.add_data(os.path.join(guihelper.resourcedirectory, "test.ids")) print # Now, it should be there print "Check it again..." print vlist.getVendorInfo(int("1004", 16), int("6000", 16), int("00", 16)) print vlist.getVendorInfo(int("1004", 16), int("6000", 16), int("01", 16)) print vlist.getVendorInfo(int("1004", 16), int("6000", 16), int("02", 16)) bitpim-1.0.7+dfsg1/src/data_recording.py0000644001616600161660000002523311032054467016264 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: data_recording.py 4624 2008-06-30 03:55:35Z djpham $ """ Handle data recording stuff """ # System modules import cPickle import struct import threading import time # wx modules # BitPim modules import common import pubsub # constants DR_Version=(0, 0, 1, 0) # 00.10 DR_Signature='BitPimDR' DR_Rec_Marker='<-->' DR_Type_All=0xff DR_Type_Note=0x01 DR_Type_Write=0x02 DR_Type_Read=0x04 DR_Type_Read_ATResponse=0x08 DR_Type_Read_Some=0x10 DR_Type_Read_Until=0x20 DR_Type_Data=0x40 DR_Type_Name={ DR_Type_Note: 'Note', DR_Type_Write: 'Write', DR_Type_Read: 'Read', DR_Type_Read_ATResponse: 'Read ATResponse', DR_Type_Read_Some: 'Read Some', DR_Type_Read_Until: 'Read Until', DR_Type_Data: 'Data', } # exceptions class DataRecordingError(Exception): def __init__(self, value): Exception.__init__(self, value) # global varaibales DR_On=False DR_Play=False _the_recorder=None _the_player=None # public routines def record_to_file(file_name, append=False): "start a data recording session into the specified file" global DR_On, _the_recorder if DR_On and _the_recorder: _the_recorder.stop() _rec=DR_Rec_File(file_name, append) _rec.start() pubsub.publish(pubsub.DR_RECORD, data=_rec) def playback_from_file(file_name): "start a playback session from the specified file" global DR_Play, _the_player if DR_Play and _the_player: _the_player.stop() _player=DR_Read_File(file_name) _player.start() pubsub.publish(pubsub.DR_PLAY, data=_player) def stop(): "stop a recording and/or playback session" global DR_Play, DR_On, _the_recorder, _the_player if DR_On and _the_recorder: _the_recorder.stop() if DR_Play and _the_player: _the_player.stop() pubsub.publish(pubsub.DR_STOP) def register(start_recording=None, start_playback=None, stop=None): if start_recording: pubsub.subscribe(start_recording, pubsub.DR_RECORD) if start_playback: pubsub.subscribe(start_playback, pubsub.DR_PLAY) if stop: pubsub.subscribe(stop, pubsub.DR_STOP) def unregister(start_recording=None, start_playback=None, stop=None): if start_recording: pubsub.unsubscribe(start_recording) if start_playback: pubsub.unsubscribe(start_playback) if stop: pubsub.unsubscribe(stop) def get_data(data_type): global DR_Play, _the_player # return the next data packet of the type data_type if DR_Play and _the_player: return _the_player.get_data(data_type) raise DataRecordingError('Data Playback not active') def get_headers(): # return a list of headers used for setting the start point global DR_Play, _the_player if DR_Play and _the_player: return _the_player.get_headers() raise DataRecordingError('Data Playback not active') def set_start(start): # set/reset the start point of the recording file global DR_Play, _the_player if DR_Play and _the_player: _the_player.set_start(start) else: raise DataRecordingError('Data Playback not active') def record(dr_type, dr_data, dr_class=None): global DR_On, _the_recorder if DR_On and _the_recorder: _the_recorder.record(dr_type, dr_data, dr_class) elif __debug__: raise DataRecordingError('Data Recording not active') def filename(): "return the current file name being used for recording or playback" if _the_recorder: return _the_recorder._file_name elif _the_player: return _the_player._file_name #------------------------------------------------------------------------------- class DR_Record(object): def __init__(self, dr_type, dr_data, klass=None): self._type=dr_type self._data=dr_data self._time=time.time() if klass: try: self._class_module=klass.__module__ self._class_name=klass.__name__ except: klass=klass.__class__ self._class_module=klass.__module__ self._class_name=klass.__name__ else: self._class_module=None self._class_name=None def get(self): return self._data def set(self, data): self._data=data def __repr__(self): # return a string rep suitable for log, protocol log, and analyzer # display t=time.localtime(self._time) _s="%d:%02d:%02d.%03d " % (t[3], t[4], t[5], int((self._time-int(self._time))*1000)) if self._type==DR_Type_Note: _s+=self._data else: # data _s+=" %s - %d bytes\n" % (DR_Type_Name.get(self._type, 'Data'), len(self._data)) if self._class_module and self._class_name: _s+="<#! %s.%s !#>\n" % (self._class_module, self._class_name) _s+=common.datatohexstring(self._data) _s+='\n' return _s def summary(self): # return a summary string of this record global DR_Type_Name t=time.localtime(self._time) _s="%d:%02d:%02d.%03d " % (t[3], t[4], t[5], int((self._time-int(self._time))*1000)) if self._type==DR_Type_Note: _s+=self._data else: _s+=DR_Type_Name.get(self._type, '') if len(_s)>80: _s=_s[:75]+'<...>' return _s #------------------------------------------------------------------------------- class DR_File(object): def __init__(self, file_name): self._file_name=file_name self._file=None self._valid=False def _check_header(self): # check to ensure that this file has the right header try: return file(self._file_name, 'rb').read(len(DR_Signature))==DR_Signature except IOError: return False except: if __debug__: raise return False def stop(self): global DR_On self._file.close() DR_On=False #------------------------------------------------------------------------------- class DR_Rec_File(DR_File): def __init__(self, file_name, append=False): super(DR_Rec_File, self).__init__(file_name) self._pause=None if not append: self._file=file(self._file_name, 'wb') self._write_header() self._valid=True else: if self._check_header(): self._file=file(self._file_name, 'ab') self._valid=True else: self._valid=False def _write_header(self): # write the header to this file self._file.write(DR_Signature) _s='' for e in DR_Version: _s+=struct.pack('B', e) self._file.write(_s) def can_record(self): return bool(self._valid and self._file) def record(self, dr_type, dr_data, dr_class=None): if self._pause and (self._pause & dr_type): # not recording this type return if self._file: _t=threading.Thread(target=self._write_record, args=(dr_type, dr_data, dr_class)) _t.start() def _write_record(self, dr_type, dr_data, dr_class=None): _rec=DR_Record(dr_type, dr_data, dr_class) _s=cPickle.dumps(_rec) self._file.write(DR_Rec_Marker+struct.pack('=self._end_index: # end of data raise DataRecordingError('No more data available for playback') _idx=self._current_index for i,e in enumerate(self._data[_idx:]): if e._type==data_type: self._current_index+=i+1 return e.get() # no such data raise DataRecordingError('Failed to find playback data type') bitpim-1.0.7+dfsg1/src/filesystem.py0000644001616600161660000011334410667371563015520 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2005 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: filesystem.py 4390 2007-09-05 00:08:19Z djpham $ """The main gui code for BitPim""" # System modules from __future__ import with_statement import ConfigParser import thread, threading import Queue import time import os import cStringIO import zipfile import re import sys import shutil import types import datetime import sha import codecs import fileview import widgets # wx modules import wx import wx.lib.colourdb import wx.gizmos import wx.html import wx.lib.mixins.listctrl as listmix # my modules import guiwidgets import common import helpids import comdiagnose import guihelper import hexeditor import pubsub import phones.com_brew as com_brew import gui import widgets class FileSystemView(wx.SplitterWindow, widgets.BitPimWidget): def __init__(self, mainwindow, parent, id=-1): # the listbox and textbox in a splitter self.mainwindow=mainwindow wx.SplitterWindow.__init__(self, parent, id, style=wx.SP_LIVE_UPDATE) self.tree=FileSystemDirectoryView(mainwindow, self, wx.NewId(), style=(wx.TR_DEFAULT_STYLE|wx.TR_NO_LINES)&~wx.TR_TWIST_BUTTONS) self.list=FileSystemFileView(mainwindow, self, wx.NewId()) self.sash_pos=mainwindow.config.ReadInt("filesystemsplitterpos", 200) self.update_sash=False self.SplitVertically(self.tree, self.list, self.sash_pos) self.SetMinimumPaneSize(20) wx.EVT_SPLITTER_SASH_POS_CHANGED(self, id, self.OnSplitterPosChanged) pubsub.subscribe(self.OnPhoneModelChanged, pubsub.PHONE_MODEL_CHANGED) def __del__(self): pubsub.unsubscribe(self.OnPhoneModelChanged) def OnPhoneModelChanged(self, msg): # if the phone changes we reset ourselves self.list.ResetView() self.tree.ResetView() def OnSplitterPosChanged(self,_): if self.update_sash: self.sash_pos=self.GetSashPosition() self.mainwindow.config.WriteInt("filesystemsplitterpos", self.sash_pos) def OnPreActivate(self): self.update_sash=False def OnPostActivate(self): self.SetSashPosition(self.sash_pos) self.update_sash=True def OnPhoneReboot(self,_): mw=self.mainwindow mw.MakeCall( gui.Request(mw.wt.phonerebootrequest), gui.Callback(self.OnPhoneRebootResults) ) def OnPhoneRebootResults(self, exception, _): # special case - we always clear the comm connection # it is needed if the reboot succeeds, and if it didn't # we probably have bad comms anyway mw=self.mainwindow mw.wt.clearcomm() if mw.HandleException(exception): return def OnPhoneOffline(self,_): mw=self.mainwindow mw.MakeCall( gui.Request(mw.wt.phoneofflinerequest), gui.Callback(self.OnPhoneOfflineResults) ) def OnPhoneOfflineResults(self, exception, _): mw=self.mainwindow if mw.HandleException(exception): return def OnModemMode(self,_): mw=self.mainwindow mw.MakeCall( gui.Request(mw.wt.modemmoderequest), gui.Callback(self.OnModemModeResults) ) def OnModemModeResults(self, exception, _): mw=self.mainwindow if mw.HandleException(exception): return def ShowFiles(self, dir, refresh=False): self.list.ShowFiles(dir, refresh) def OnNewFileResults(self, parentdir, exception, _): mw=self.mainwindow if mw.HandleException(exception): return self.ShowFiles(parentdir, True) class FileSystemFileView(wx.ListCtrl, listmix.ColumnSorterMixin): def __init__(self, mainwindow, parent, id, style=wx.LC_REPORT|wx.LC_VIRTUAL|wx.LC_SINGLE_SEL): wx.ListCtrl.__init__(self, parent, id, style=style) self.parent=parent self.mainwindow=mainwindow self.datacolumn=False # used for debugging and inspection of values self.InsertColumn(0, "Name", width=300) self.InsertColumn(1, "Size", format=wx.LIST_FORMAT_RIGHT) self.InsertColumn(2, "Date", width=200) self.font=wx.TheFontList.FindOrCreateFont(10, family=wx.SWISS, style=wx.NORMAL, weight=wx.NORMAL) self.ResetView() if self.datacolumn: self.InsertColumn(3, "Extra Stuff", width=400) listmix.ColumnSorterMixin.__init__(self, 4) else: listmix.ColumnSorterMixin.__init__(self, 3) #sort by genre (column 2), A->Z ascending order (1) self.filemenu=wx.Menu() self.filemenu.Append(guihelper.ID_FV_SAVE, "Save ...") self.filemenu.Append(guihelper.ID_FV_HEXVIEW, "Hexdump") self.filemenu.AppendSeparator() self.filemenu.Append(guihelper.ID_FV_DELETE, "Delete") self.filemenu.Append(guihelper.ID_FV_OVERWRITE, "Overwrite ...") # generic menu self.genericmenu=wx.Menu() self.genericmenu.Append(guihelper.ID_FV_NEWFILE, "New File ...") self.genericmenu.AppendSeparator() self.genericmenu.Append(guihelper.ID_FV_OFFLINEPHONE, "Offline Phone") self.genericmenu.Append(guihelper.ID_FV_REBOOTPHONE, "Reboot Phone") self.genericmenu.Append(guihelper.ID_FV_MODEMMODE, "Go to modem mode") wx.EVT_MENU(self.genericmenu, guihelper.ID_FV_NEWFILE, self.OnNewFile) wx.EVT_MENU(self.genericmenu, guihelper.ID_FV_OFFLINEPHONE, parent.OnPhoneOffline) wx.EVT_MENU(self.genericmenu, guihelper.ID_FV_REBOOTPHONE, parent.OnPhoneReboot) wx.EVT_MENU(self.genericmenu, guihelper.ID_FV_MODEMMODE, parent.OnModemMode) wx.EVT_MENU(self.filemenu, guihelper.ID_FV_SAVE, self.OnFileSave) wx.EVT_MENU(self.filemenu, guihelper.ID_FV_HEXVIEW, self.OnHexView) wx.EVT_MENU(self.filemenu, guihelper.ID_FV_DELETE, self.OnFileDelete) wx.EVT_MENU(self.filemenu, guihelper.ID_FV_OVERWRITE, self.OnFileOverwrite) wx.EVT_RIGHT_DOWN(self.GetMainWindow(), self.OnRightDown) wx.EVT_RIGHT_UP(self.GetMainWindow(), self.OnRightUp) wx.EVT_LIST_ITEM_ACTIVATED(self,id, self.OnItemActivated) self.image_list=wx.ImageList(16, 16) a={"sm_up":"GO_UP","sm_dn":"GO_DOWN","w_idx":"WARNING","e_idx":"ERROR","i_idx":"QUESTION"} for k,v in a.items(): s="self.%s= self.image_list.Add(wx.ArtProvider_GetBitmap(wx.ART_%s,wx.ART_TOOLBAR,(16,16)))" % (k,v) exec(s) self.img_file=self.image_list.Add(wx.ArtProvider_GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, (16, 16))) self.SetImageList(self.image_list, wx.IMAGE_LIST_SMALL) #if guihelper.IsMSWindows(): # turn on drag-and-drag for windows #wx.EVT_MOTION(self, self.OnStartDrag) self.__dragging=False self.add_files=[] self.droptarget=fileview.MyFileDropTarget(self, True, False) self.SetDropTarget(self.droptarget) def OnPaint(self, evt): w,h=self.GetSize() self.Refresh() dc=wx.PaintDC(self) dc.BeginDrawing() dc.SetFont(self.font) x,y= dc.GetTextExtent("There are no items to show in this view") # center the text xx=(w-x)/2 if xx<0: xx=0 dc.DrawText("There are no items to show in this view", xx, h/3) dc.EndDrawing() def OnDropFiles(self, _, dummy, filenames): # There is a bug in that the most recently created tab # in the notebook that accepts filedrop receives these # files, not the most visible one. We find the currently # viewed tab in the notebook and send the files there if self.__dragging: # I'm the drag source, forget 'bout it ! return target=self # fallback t=self.mainwindow.GetCurrentActiveWidget() if isinstance(t, FileSystemFileView): # changing target in dragndrop target=t self.add_files=filenames target.OnAddFiles() def OnDragOver(self, x, y, d): # force copy (instead of move) return wx._misc.DragCopy def OnAddFiles(self): mw=self.mainwindow if not len(self.add_files): return for file in self.add_files: if file is None: continue if len(self.path): path=self.path+"/"+os.path.basename(file) else: path=os.path.basename(file) # you can't create files in root but I won't stop you contents=open(file, "rb").read() mw.MakeCall( gui.Request(mw.wt.writefile, path, contents), gui.Callback(self.OnAddFilesResults, self.path) ) self.add_files.remove(file) # can only add one file at a time break def OnAddFilesResults(self, parentdir, exception, _): mw=self.mainwindow if mw.HandleException(exception): return # add next file if there is one if not len(self.add_files): self.ShowFiles(parentdir, True) else: self.OnAddFiles() if guihelper.IsMSWindows(): # drag-and-drop files only works in Windows def OnStartDrag(self, evt): evt.Skip() if not evt.LeftIsDown(): return path=self.itemtopath(self.GetFirstSelected()) drag_source=wx.DropSource(self) file_names=wx.FileDataObject() file_names.AddFile(path) drag_source.SetData(file_names) self.__dragging=True res=drag_source.DoDragDrop(wx.Drag_CopyOnly) self.__dragging=False def OnRightUp(self, event): pt = event.GetPosition() item, flags = self.HitTest(pt) if item is not -1: self.Select(item) self.PopupMenu(self.filemenu, pt) else: self.PopupMenu(self.genericmenu, pt) def OnRightDown(self,event): # You have to capture right down otherwise it doesn't feed you right up pt = event.GetPosition(); item, flags = self.HitTest(pt) try: self.Select(item) except: pass def OnNewFile(self,_): with guihelper.WXDialogWrapper(wx.FileDialog(self, style=wx.OPEN|wx.HIDE_READONLY|wx.CHANGE_DIR), True) as (dlg, retcode): if retcode==wx.ID_OK: infile=dlg.GetPath() contents=open(infile, "rb").read() if len(self.path): path=self.path+"/"+os.path.basename(dlg.GetPath()) else: path=os.path.basename(dlg.GetPath()) # you can't create files in root but I won't stop you mw=self.mainwindow mw.MakeCall( gui.Request(mw.wt.writefile, path, contents), gui.Callback(self.parent.OnNewFileResults, self.path) ) def OnFileSave(self, _): path=self.itemtopath(self.GetFirstSelected()) mw=self.mainwindow mw.MakeCall( gui.Request(mw.wt.getfile, path), gui.Callback(self.OnFileSaveResults, path) ) def OnFileSaveResults(self, path, exception, contents): mw=self.mainwindow if mw.HandleException(exception): return bn=guihelper.basename(path) ext=guihelper.getextension(bn) if len(ext): ext="%s files (*.%s)|*.%s" % (ext.upper(), ext, ext) else: ext="All files|*" with guihelper.WXDialogWrapper(wx.FileDialog(self, "Save File As", defaultFile=bn, wildcard=ext, style=wx.SAVE|wx.OVERWRITE_PROMPT|wx.CHANGE_DIR), True) as (dlg, retcode): if retcode==wx.ID_OK: file(dlg.GetPath(), "wb").write(contents) def OnItemActivated(self,_): self.OnHexView(self) def OnHexView(self, _): path=self.itemtopath(self.GetFirstSelected()) mw=self.mainwindow mw.MakeCall( gui.Request(mw.wt.getfile, path), gui.Callback(self.OnHexViewResults, path) ) def OnHexViewResults(self, path, exception, result): mw=self.mainwindow if mw.HandleException(exception): return # ::TODO:: make this use HexEditor ## dlg=guiwidgets.MyFixedScrolledMessageDialog(self, common.datatohexstring(result), ## path+" Contents", helpids.ID_HEXVIEW_DIALOG) dlg=hexeditor.HexEditorDialog(self, result, path+" Contents") dlg.Show() def OnFileDelete(self, _): path=self.itemtopath(self.GetFirstSelected()) mw=self.mainwindow mw.MakeCall( gui.Request(mw.wt.rmfile, path), gui.Callback(self.OnFileDeleteResults, guihelper.dirname(path)) ) def OnFileDeleteResults(self, parentdir, exception, _): mw=self.mainwindow if mw.HandleException(exception): return self.ShowFiles(parentdir, True) def OnFileOverwrite(self,_): path=self.itemtopath(self.GetFirstSelected()) with guihelper.WXDialogWrapper(wx.FileDialog(self, style=wx.OPEN|wx.HIDE_READONLY|wx.CHANGE_DIR), True) as (dlg, retcode): if retcode==wx.ID_OK: infile=dlg.GetPath() contents=open(infile, "rb").read() mw=self.mainwindow mw.MakeCall( gui.Request(mw.wt.writefile, path, contents), gui.Callback(self.OnFileOverwriteResults, guihelper.dirname(path)) ) def OnFileOverwriteResults(self, parentdir, exception, _): mw=self.mainwindow if mw.HandleException(exception): return self.ShowFiles(parentdir, True) def ResetView(self): self.DeleteAllItems() self.files={} self.path=None self.itemDataMap = self.files self.itemIndexMap = self.files.keys() self.SetItemCount(0) def ShowFiles(self, path, refresh=False): mw=self.mainwindow if path == self.path and not refresh: return self.path=None mw.MakeCall( gui.Request(mw.wt.getfileonlylist, path), gui.Callback(self.OnShowFilesResults, path) ) def OnShowFilesResults(self, path, exception, result): mw=self.mainwindow if mw.HandleException(exception): return count=self.GetItemCount() self.path=path self.DeleteAllItems() self.files={} index=0 for file in result: index=index+1 f=guihelper.basename(file) if self.datacolumn: self.files[index]=(f, `result[file]['size']`, result[file]['date'][1], result[file]['data'], file) else: self.files[index]=(f, `result[file]['size']`, result[file]['date'][1], file) self.itemDataMap = self.files self.itemIndexMap = self.files.keys() self.SetItemCount(index) self.SortListItems() if count!=0 and index==0: wx.EVT_PAINT(self, self.OnPaint) elif count==0 and index!=0: self.Unbind(wx.EVT_PAINT) def itemtopath(self, item): index=self.itemIndexMap[item] if self.datacolumn: return self.itemDataMap[index][4] return self.itemDataMap[index][3] def SortItems(self,sorter=None): col=self._col sf=self._colSortFlag[col] #creating pairs [column item defined by col, key] items=[] for k,v in self.itemDataMap.items(): if col==1: items.append([int(v[col]),k]) else: items.append([v[col],k]) items.sort() k=[key for value, key in items] # False is descending if sf==False: k.reverse() self.itemIndexMap=k #redrawing the list self.Refresh() def GetListCtrl(self): return self def GetSortImages(self): return (self.sm_dn, self.sm_up) def OnGetItemText(self, item, col): index=self.itemIndexMap[item] s = self.itemDataMap[index][col] return s def OnGetItemImage(self, item): return self.img_file def OnGetItemAttr(self, item): return None class FileSystemDirectoryView(wx.TreeCtrl): def __init__(self, mainwindow, parent, id, style): wx.TreeCtrl.__init__(self, parent, id, style=style) self.parent=parent self.mainwindow=mainwindow wx.EVT_TREE_ITEM_EXPANDED(self, id, self.OnItemExpanded) wx.EVT_TREE_SEL_CHANGED(self,id, self.OnItemSelected) self.dirmenu=wx.Menu() self.dirmenu.Append(guihelper.ID_FV_NEWSUBDIR, "Make subdirectory ...") self.dirmenu.Append(guihelper.ID_FV_NEWFILE, "New File ...") self.dirmenu.AppendSeparator() self.dirmenu.Append(guihelper.ID_FV_BACKUP, "Backup directory ...") self.dirmenu.Append(guihelper.ID_FV_BACKUP_TREE, "Backup entire tree ...") self.dirmenu.Append(guihelper.ID_FV_RESTORE, "Restore ...") self.dirmenu.AppendSeparator() self.dirmenu.Append(guihelper.ID_FV_REFRESH, "Refresh") self.dirmenu.AppendSeparator() self.dirmenu.Append(guihelper.ID_FV_DELETE, "Delete") self.dirmenu.AppendSeparator() self.dirmenu.Append(guihelper.ID_FV_TOTAL_REFRESH, "Refresh Filesystem") self.dirmenu.Append(guihelper.ID_FV_OFFLINEPHONE, "Offline Phone") self.dirmenu.Append(guihelper.ID_FV_REBOOTPHONE, "Reboot Phone") self.dirmenu.Append(guihelper.ID_FV_MODEMMODE, "Go to modem mode") # generic menu self.genericmenu=wx.Menu() self.genericmenu.Append(guihelper.ID_FV_TOTAL_REFRESH, "Refresh Filesystem") self.genericmenu.Append(guihelper.ID_FV_OFFLINEPHONE, "Offline Phone") self.genericmenu.Append(guihelper.ID_FV_REBOOTPHONE, "Reboot Phone") self.genericmenu.Append(guihelper.ID_FV_MODEMMODE, "Go to modem mode") wx.EVT_MENU(self.genericmenu, guihelper.ID_FV_TOTAL_REFRESH, self.OnRefresh) wx.EVT_MENU(self.genericmenu, guihelper.ID_FV_OFFLINEPHONE, parent.OnPhoneOffline) wx.EVT_MENU(self.genericmenu, guihelper.ID_FV_REBOOTPHONE, parent.OnPhoneReboot) wx.EVT_MENU(self.genericmenu, guihelper.ID_FV_MODEMMODE, parent.OnModemMode) wx.EVT_MENU(self.dirmenu, guihelper.ID_FV_NEWSUBDIR, self.OnNewSubdir) wx.EVT_MENU(self.dirmenu, guihelper.ID_FV_NEWFILE, self.OnNewFile) wx.EVT_MENU(self.dirmenu, guihelper.ID_FV_DELETE, self.OnDirDelete) wx.EVT_MENU(self.dirmenu, guihelper.ID_FV_BACKUP, self.OnBackupDirectory) wx.EVT_MENU(self.dirmenu, guihelper.ID_FV_BACKUP_TREE, self.OnBackupTree) wx.EVT_MENU(self.dirmenu, guihelper.ID_FV_RESTORE, self.OnRestore) wx.EVT_MENU(self.dirmenu, guihelper.ID_FV_REFRESH, self.OnDirRefresh) wx.EVT_MENU(self.dirmenu, guihelper.ID_FV_TOTAL_REFRESH, self.OnRefresh) wx.EVT_MENU(self.dirmenu, guihelper.ID_FV_OFFLINEPHONE, parent.OnPhoneOffline) wx.EVT_MENU(self.dirmenu, guihelper.ID_FV_REBOOTPHONE, parent.OnPhoneReboot) wx.EVT_MENU(self.dirmenu, guihelper.ID_FV_MODEMMODE, parent.OnModemMode) wx.EVT_RIGHT_DOWN(self, self.OnRightDown) wx.EVT_RIGHT_UP(self, self.OnRightUp) self.image_list=wx.ImageList(16, 16) self.img_dir=self.image_list.Add(wx.ArtProvider_GetBitmap(guihelper.ART_FOLDER, wx.ART_OTHER, (16, 16))) self.img_dir_open=self.image_list.Add(wx.ArtProvider_GetBitmap(guihelper.ART_FOLDER_OPEN, wx.ART_OTHER, (16, 16))) self.SetImageList(self.image_list) self.add_files=[] self.add_target="" self.droptarget=fileview.MyFileDropTarget(self, True, True) self.SetDropTarget(self.droptarget) self.ResetView() def ResetView(self): self.first_time=True self.DeleteAllItems() self.root=self.AddRoot("/") self.item=self.root self.SetPyData(self.root, None) self.SetItemHasChildren(self.root, True) self.SetItemImage(self.root, self.img_dir) self.SetItemImage(self.root, self.img_dir_open, which=wx.TreeItemIcon_Expanded) self.SetPyData(self.AppendItem(self.root, "Retrieving..."), None) self.selections=[] self.dragging=False self.skip_dir_list=0 def OnDropFiles(self, x, y, filenames): target=self t=self.mainwindow.GetCurrentActiveWidget() if isinstance(t, FileSystemDirectoryView): # changing target in dragndrop target=t # make sure that the files are being dropped onto a real directory item, flags = self.HitTest((x, y)) if item.IsOk(): self.SelectItem(item) self.add_target=self.itemtopath(item) self.add_files=filenames target.OnAddFiles() self.dragging=False def OnDragOver(self, x, y, d): target=self t=self.mainwindow.GetCurrentActiveWidget() if isinstance(t, FileSystemDirectoryView): # changing target in dragndrop target=t # make sure that the files are being dropped onto a real directory item, flags = self.HitTest((x, y)) selections = self.GetSelections() if item.IsOk(): if selections != [item]: self.UnselectAll() self.SelectItem(item) return wx._misc.DragCopy elif selections: self.UnselectAll() return wx._misc.DragNone def _saveSelection(self): self.selections = self.GetSelections() self.UnselectAll() def _restoreSelection(self): self.UnselectAll() for i in self.selections: self.SelectItem(i) self.selections=[] def OnEnter(self, x, y, d): self._saveSelection() self.dragging=True return d def OnLeave(self): self.dragging=False self._restoreSelection() def OnAddFiles(self): mw=self.mainwindow if not len(self.add_files): return for file in self.add_files: if file is None: continue if len(self.add_target): path=self.add_target+"/"+os.path.basename(file) else: path=os.path.basename(file) # you can't create files in root but I won't stop you contents=open(file, "rb").read() mw.MakeCall( gui.Request(mw.wt.writefile, path, contents), gui.Callback(self.OnAddFilesResults, self.add_target) ) self.add_files.remove(file) # can only add one file at a time break def OnAddFilesResults(self, parentdir, exception, _): mw=self.mainwindow if mw.HandleException(exception): return # add next file if there is one if not len(self.add_files): self.parent.ShowFiles(parentdir, True) else: self.OnAddFiles() def OnRightUp(self, event): pt = event.GetPosition(); item, flags = self.HitTest(pt) if item.IsOk(): self.SelectItem(item) self.PopupMenu(self.dirmenu, pt) else: self.SelectItem(self.item) self.PopupMenu(self.genericmenu, pt) def OnRightDown(self, _): # You have to capture right down otherwise it doesn't feed you right up pass def OnItemSelected(self,_): if not self.dragging and not self.first_time: item=self.GetSelection() if item.IsOk() and item != self.item: path=self.itemtopath(item) self.parent.ShowFiles(path) if not self.skip_dir_list: self.OnDirListing(path) self.item=item def OnItemExpanded(self, event): if not self.skip_dir_list: item=event.GetItem() if self.first_time: self.GetFullFS() else: path=self.itemtopath(item) self.OnDirListing(path) def AddDirectory(self, location, name): new_item=self.AppendItem(location, name) self.SetPyData(new_item, None) self.SetItemImage(new_item, self.img_dir) self.SetItemImage(new_item, self.img_dir_open, which=wx.TreeItemIcon_Expanded) # workaround for bug, + does not get displayed if this is the first child if self.GetChildrenCount(location, False) == 1 and not self.IsExpanded(location): self.skip_dir_list+=1 self.Expand(location) self.Collapse(location) self.skip_dir_list-=1 return new_item def RemoveDirectory(self, parent, item): # if this is the last item in the parent we need to collapse the parent if self.GetChildrenCount(parent, False) == 1: self.Collapse(parent) self.Delete(item) def GetFullFS(self): mw=self.mainwindow mw.OnBusyStart() mw.GetStatusBar().progressminor(0, 100, 'Reading Phone File System ...') mw.MakeCall( gui.Request(mw.wt.fulldirlisting), gui.Callback(self.OnFullDirListingResults) ) def OnFullDirListingResults(self, exception, result): mw=self.mainwindow mw.OnBusyEnd() if mw.HandleException(exception): self.Collapse(self.root) return self.first_time=False self.skip_dir_list+=1 self.SelectItem(self.root) self.DeleteChildren(self.root) keys=result.keys() keys.sort() # build up the tree for k in keys: path, dir=os.path.split(k) item=self.pathtoitem(path) self.AddDirectory(item, dir) self.skip_dir_list-=1 self.parent.ShowFiles("") def OnDirListing(self, path): mw=self.mainwindow mw.MakeCall( gui.Request(mw.wt.singledirlisting, path), gui.Callback(self.OnDirListingResults, path) ) def OnDirListingResults(self, path, exception, result): mw=self.mainwindow if mw.HandleException(exception): return item=self.pathtoitem(path) l=[] child,cookie=self.GetFirstChild(item) for dummy in range(0,self.GetChildrenCount(item,False)): l.append(child) child,cookie=self.GetNextChild(item,cookie) # we now have a list of children in l sort=False for file in result: children=True f=guihelper.basename(file) found=None for i in l: if self.GetItemText(i)==f: found=i break if found is None: # this only happens if the phone has added the directory # after we got the initial file view, unusual but possible found=self.AddDirectory(item, f) self.OnDirListing(file) sort=True for i in l: # remove all children not present in result if not result.has_key(self.itemtopath(i)): self.RemoveDirectory(item, i) if sort: self.SortChildren(item) def OnNewSubdir(self, _): with guihelper.WXDialogWrapper(wx.TextEntryDialog(self, "Subdirectory name?", "Create Subdirectory", "newfolder"), True) as (dlg, retcode): if retcode==wx.ID_OK: item=self.GetSelection() parent=self.itemtopath(item) if len(parent): path=parent+"/"+dlg.GetValue() else: path=dlg.GetValue() mw=self.mainwindow mw.MakeCall( gui.Request(mw.wt.mkdir, path), gui.Callback(self.OnNewSubdirResults, path) ) def OnNewSubdirResults(self, new_path, exception, _): mw=self.mainwindow if mw.HandleException(exception): return path, dir=os.path.split(new_path) item=self.pathtoitem(path) self.AddDirectory(item, dir) self.SortChildren(item) self.Expand(item) # requery the phone just incase self.OnDirListing(path) def OnNewFile(self,_): parent=self.itemtopath(self.GetSelection()) with guihelper.WXDialogWrapper(wx.FileDialog(self, style=wx.OPEN|wx.HIDE_READONLY|wx.CHANGE_DIR), True) as (dlg, retcode): if retcode==wx.ID_OK: infile=dlg.GetPath() contents=open(infile, "rb").read() if len(parent): path=parent+"/"+os.path.basename(dlg.GetPath()) else: path=os.path.basename(dlg.GetPath()) # you can't create files in root but I won't stop you mw=self.mainwindow mw.MakeCall( gui.Request(mw.wt.writefile, path, contents), gui.Callback(self.OnNewFileResults, parent) ) def OnNewFileResults(self, parentdir, exception, _): mw=self.mainwindow if mw.HandleException(exception): return self.parent.ShowFiles(parentdir, True) def OnDirDelete(self, _): path=self.itemtopath(self.GetSelection()) mw=self.mainwindow mw.MakeCall( gui.Request(mw.wt.rmdirs, path), gui.Callback(self.OnDirDeleteResults, path) ) def OnDirDeleteResults(self, path, exception, _): mw=self.mainwindow if mw.HandleException(exception): return # remove the directory from the view parent, dir=os.path.split(path) parent_item=self.pathtoitem(parent) del_item=self.pathtoitem(path) self.RemoveDirectory(parent_item, del_item) # requery the phone just incase self.OnDirListing(parent) def OnBackupTree(self, _): self.OnBackup(recurse=100) def OnBackupDirectory(self, _): self.OnBackup() def OnBackup(self, recurse=0): path=self.itemtopath(self.GetSelection()) mw=self.mainwindow mw.MakeCall( gui.Request(mw.wt.getbackup, path, recurse), gui.Callback(self.OnBackupResults, path) ) def OnBackupResults(self, path, exception, backup): mw=self.mainwindow if mw.HandleException(exception): return bn=guihelper.basename(path) if len(bn)<1: bn="root" bn+=".zip" ext="Zip files|*.zip|All Files|*" with guihelper.WXDialogWrapper(wx.FileDialog(self, "Save File As", defaultFile=bn, wildcard=ext, style=wx.SAVE|wx.OVERWRITE_PROMPT|wx.CHANGE_DIR), True) as (dlg, retcode): if retcode==wx.ID_OK: file(dlg.GetPath(), "wb").write(backup) def OnRestore(self, _): ext="Zip files|*.zip|All Files|*" path=self.itemtopath(self.GetSelection()) bn=guihelper.basename(path) if len(bn)<1: bn="root" bn+=".zip" ext="Zip files|*.zip|All Files|*" with guihelper.WXDialogWrapper(wx.FileDialog(self, "Open backup file", defaultFile=bn, wildcard=ext, style=wx.OPEN|wx.HIDE_READONLY|wx.CHANGE_DIR), True) as (dlg, retcode): if retcode==wx.ID_OK: name=dlg.GetPath() if not zipfile.is_zipfile(name): with guihelper.WXDialogWrapper(guiwidgets.AlertDialogWithHelp(self.mainwindow, name+" is not a valid zipfile.", "Zip file required", lambda _: wx.GetApp().displayhelpid(helpids.ID_NOT_A_ZIPFILE), style=wx.OK|wx.ICON_ERROR), True): return zipf=zipfile.ZipFile(name, "r") xx=zipf.testzip() if xx is not None: with guihelper.WXDialogWrapper(guiwidgets.AlertDialogWithHelp(self.mainwindow, name+" has corrupted contents. Use a repair utility to fix it", "Zip file corrupted", lambda _: wx.GetApp().displayhelpid(helpids.ID_ZIPFILE_CORRUPTED), style=wx.OK|wx.ICON_ERROR), True): return RestoreDialog(self.mainwindow, "Restore files", zipf, path, self.OnRestoreOK).Show(True) def OnRestoreOK(self, zipf, names, parentdir): if len(names)==0: wx.MessageBox("You didn't select any files to restore!", "No files selected", wx.OK|wx.ICON_EXCLAMATION) return l=[] for zipname, fsname in names: l.append( (fsname, zipf.read(zipname)) ) mw=self.mainwindow mw.MakeCall( gui.Request(mw.wt.restorefiles, l), gui.Callback(self.OnRestoreResults, parentdir) ) def OnRestoreResults(self, parentdir, exception, results): mw=self.mainwindow if mw.HandleException(exception): return ok=filter(lambda s: s[0], results) fail=filter(lambda s: not s[0], results) # re-read the filesystem (if anything was restored) if len(parentdir): dirs=[] for _, name in results: while(len(name)>len(parentdir)): name=guihelper.dirname(name) if name not in dirs: dirs.append(name) dirs.sort() for d in dirs: self.OnDirListing(d) self.OnDirListing(parentdir) if len(ok) and len(fail)==0: dlg=wx.MessageDialog(mw, "All files restored ok", "All files restored", wx.OK|wx.ICON_INFORMATION) dlg.Show(True) return if len(fail) and len(ok)==0: wx.MessageBox("All files failed to restore", "No files restored", wx.OK|wx.ICON_ERROR) return op="Failed to restore some files. Check the log for reasons.:\n\n" for s,n in fail: op+=" "+n+"\n" wx.MessageBox(op, "Some restores failed", wx.OK|wx.ICON_ERROR) def OnDirRefresh(self, _): path=self.itemtopath(self.GetSelection()) self.parent.ShowFiles(path, True) self.OnDirListing(path) def OnRefresh(self, _): self.GetFullFS() def itemtopath(self, item): if item==self.root: return "" res=self.GetItemText(item) while True: parent=self.GetItemParent(item) if parent==self.root: return res item=parent res=self.GetItemText(item)+"/"+res # can't get here, but pychecker doesn't seem to realise assert False return "" def pathtoitem(self, path): if path=="": return self.root dirs=path.split('/') node=self.root for n in range(0, len(dirs)): foundnode=None child,cookie=self.GetFirstChild(node) for dummy in range(0, self.GetChildrenCount(node, False)): d=self.GetItemText(child) if d==dirs[n]: node=child foundnode=node break child,cookie=self.GetNextChild(node,cookie) if foundnode is not None: continue # make the node node=self.AppendItem(node, dirs[n]) self.SetPyData(node, None) return node class RestoreDialog(wx.Dialog): """A dialog that lists all the files that will be restored""" def __init__(self, parent, title, zipf, path, okcb): """Constructor @param path: Placed before names in the archive. Should not include a trailing slash. """ wx.Dialog.__init__(self, parent, -1, title, style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER) vbs=wx.BoxSizer(wx.VERTICAL) vbs.Add( wx.StaticText(self, -1, "Choose files to restore"), 0, wx.ALIGN_CENTRE|wx.ALL, 5) nl=zipf.namelist() nl.sort() prefix=path if len(prefix)=="/" or prefix=="": prefix="" else: prefix+="/" nnl=map(lambda i: prefix+i, nl) self.clb=wx.CheckListBox(self, -1, choices=nnl, style=wx.LB_SINGLE|wx.LB_HSCROLL|wx.LB_NEEDED_SB, size=wx.Size(200,300)) for i in range(len(nnl)): self.clb.Check(i, True) vbs.Add( self.clb, 1, wx.EXPAND|wx.ALL, 5) vbs.Add(wx.StaticLine(self, -1, style=wx.LI_HORIZONTAL), 0, wx.EXPAND|wx.ALL, 5) vbs.Add(self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.HELP), 0, wx.ALIGN_CENTER|wx.ALL, 5) self.SetSizer(vbs) self.SetAutoLayout(True) vbs.Fit(self) wx.EVT_BUTTON(self, wx.ID_HELP, lambda _: wx.GetApp().displayhelpid(helpids.ID_RESTOREDIALOG)) wx.EVT_BUTTON(self, wx.ID_OK, self.OnOK) self.okcb=okcb self.zipf=zipf self.nl=zip(nl, nnl) self.path=path def OnOK(self, _): names=[] for i in range(len(self.nl)): if self.clb.IsChecked(i): names.append(self.nl[i]) self.okcb(self.zipf, names, self.path) self.Show(False) self.Destroy() bitpim-1.0.7+dfsg1/src/common.py0000644001616600161660000007461410665135647014631 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2005 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: common.py 4381 2007-08-29 00:19:51Z djpham $ # Documentation """Various classes and functions that are used by GUI and command line versions of BitPim""" from __future__ import with_statement from contextlib import contextmanager # standard modules import string import cStringIO import StringIO import sys import traceback import tempfile import random import os import imp import unicodedata class FeatureNotAvailable(Exception): """The device doesn't support the feature""" def __init__(self, device, message="The device doesn't support the feature"): Exception.__init__(self, "%s: %s" % (device, message)) self.device=device self.message=message class IntegrityCheckFailed(Exception): def __init__(self, device, message): Exception.__init__(self, "%s: %s" % (device, message)) self.device=device self.message=message class PhoneBookBusyException(Exception): "The phonebook is busy on the phone" pass class HelperBinaryNotFound(Exception): def __init__(self, basename, fullname, paths): Exception.__init__(self, "Helper binary %s not found. It should be in one of %s" % (fullname, ", ".join(paths))) self.basename=basename self.fullname=fullname self.paths=paths class CommandExecutionFailed(Exception): def __init__(self, retcode, args, logstr=None): Exception.__init__(self, "Command execution failed with code %d: %s" % (retcode, " ".join(args))) self.retcode=retcode self.args=args self.logstr=logstr class ConversionNotSupported(Exception): def __init__(self, msg): Exception.__init__(self, msg) self.msg=msg class InSafeModeException(Exception): def __init__(self): Exception.__init__(self, "BitPim is in safe mode - this operation has been blocked") # generic comms exception and then various specialisations class CommsException(Exception): """Generic commmunications exception""" def __init__(self, message, device="<>"): Exception.__init__(self, "%s: %s" % (device, message)) self.device=device self.message=message class CommsNeedConfiguring(CommsException): """The communication settings need to be configured""" pass class CommsDeviceNeedsAttention(CommsException): """The communication port or device attached to it needs some manual intervention""" pass class CommsDataCorruption(CommsException): """There was some form of data corruption""" pass class CommsTimeout(CommsException): """Timeout while reading or writing the commport""" pass class CommsOpenFailure(CommsException): """Failed to open the communications port/device""" pass class CommsWrongPort(CommsException): """The wrong port has been selected, typically the modem port on an LG composite device""" pass class AutoPortsFailure(CommsException): """Failed to auto detect a useful port""" def __init__(self, portstried): self.device="auto" self.message="Failed to auto-detect the port to use. " if portstried is not None and len(portstried): self.message+="I tried "+", ".join(portstried) else: self.message+="I couldn't detect any candidate ports" CommsException.__init__(self, self.message, self.device) class PhoneStringDecodeException(Exception): def __init__(self, string=None, codec=None): self.string=string self.codec=codec Exception.__init__(self, "Unable to decode <%s> using codec <%s>" % (`string`, codec)) class PhoneStringEncodeException(Exception): def __init__(self, string=None, codec=None): self.string=string self.codec=codec Exception.__init__(self, "Unable to encode <%s> using codec <%s>" % (`string`, codec)) def datatohexstring(data): """Returns a pretty printed hexdump of the data @rtype: string""" res=cStringIO.StringIO() lchar="" lhex="00000000 " for count in range(0, len(data)): b=ord(data[count]) lhex=lhex+"%02x " % (b,) if b>=32 and string.printable.find(chr(b))>=0: lchar=lchar+chr(b) else: lchar=lchar+'.' if (count+1)%16==0: res.write(lhex+" "+lchar+"\n") lhex="%08x " % (count+1,) lchar="" if len(data): while (count+1)%16!=0: count=count+1 lhex=lhex+" " res.write(lhex+" "+lchar+"\n") return res.getvalue() def hexify(data): "Turns binary data into a hex string (like the output of MD5/SHA hexdigest)" return "".join(["%02x" % (ord(x),) for x in data]) def prettyprintdict(dictionary, indent=0): """Returns a pretty printed version of the dictionary The elements are sorted into alphabetical order, and printed one per line. Dictionaries within the values are also pretty printed suitably indented. @rtype: string""" res=cStringIO.StringIO() # the indent string istr=" " # opening brace res.write("%s{\n" % (istr*indent,)) indent+=1 # sort the keys keys=dictionary.keys() keys.sort() # print each key for k in keys: v=dictionary[k] # is it a dict if isinstance(v, dict): res.write("%s%s:\n%s\n" % (istr*indent, `k`, prettyprintdict(v, indent+1))) else: # is it a list of dicts? if isinstance(v, list): dicts=0 for item in v: if isinstance(item, dict): dicts+=1 if dicts and dicts==len(v): res.write("%s%s:\n%s[\n" % (istr*indent,`k`,istr*(indent+1))) for item in v: res.write(prettyprintdict(item, indent+2)) res.write("%s],\n" % (istr*(indent+1))) continue res.write("%s%s: %s,\n" % (istr*indent, `k`, `v`)) # closing brace indent-=1 if indent>0: comma="," else: comma="" res.write("%s}%s\n" % (istr*indent,comma)) return res.getvalue() class exceptionwrap: """A debugging assist class that helps in tracking down functions returning exceptions""" def __init__(self, callable): self.callable=callable def __call__(self, *args, **kwargs): try: return self.callable(*args, **kwargs) except: print "in exception wrapped call", `self.callable` print formatexception() raise def unicode_execfile(filename, dict1=0, dict2=0): # this version allows the path portion of the filename to # contain non-acsii characters, the filename itself cannot contain # ascii characters, execfile does not work if the filename contains # non-ascii characters curdir=os.getcwdu() filepath, file=os.path.split(filename) os.chdir(filepath) if dict1==0: execfile(file) elif dict2==0: execfile(file, dict1) else: execfile(file, dict1, dict2) os.chdir(curdir) def readversionedindexfile(filename, dict, versionhandlerfunc, currentversion): assert currentversion>0 try: execfile(filename, dict, dict) except UnicodeError: unicode_execfile(filename, dict, dict) if not dict.has_key('FILEVERSION'): version=0 else: version=dict['FILEVERSION'] del dict['FILEVERSION'] if version0 with file(filename, 'w') as f: for key in dict: v=dict[key] if isinstance(v, type({})): f.write("result['%s']=%s\n" % (key, prettyprintdict(dict[key]))) else: f.write("result['%s']=%s\n" % (key, `v`)) f.write("FILEVERSION=%d\n" % (currentversion,)) def formatexceptioneh(*excinfo): print formatexception(excinfo) def formatexception(excinfo=None, lastframes=8): """Pretty print exception, including local variable information. See Python Cookbook, recipe 14.4. @param excinfo: tuple of information returned from sys.exc_info when the exception occurred. If you don't supply this then information about the current exception being handled is used @param lastframes: local variables are shown for these number of frames @return: A pretty printed string """ if excinfo is None: excinfo=sys.exc_info() s=StringIO.StringIO() traceback.print_exception(*excinfo, **{'file': s}) tb=excinfo[2] stack=[] while tb: stack.append(tb.tb_frame) tb=tb.tb_next if len(stack)>lastframes: stack=stack[-lastframes:] print >>s, "\nVariables by last %d frames, innermost last" % (lastframes,) for frame in stack: print >>s, "" print >>s, "Frame %s in %s at line %s" % (frame.f_code.co_name, frame.f_code.co_filename, frame.f_lineno) for key,value in frame.f_locals.items(): # filter out modules if type(value)==type(sys): continue print >>s,"%15s = " % (key,), try: if type(value)==type({}): kk=value.keys() kk.sort() print >>s, "Keys",kk print >>s, "%15s " % ("",) , print >>s,`value`[:80] except: print >>s,"(Exception occurred printing value)" return s.getvalue() def gettempfilename(extension=None): "Returns a filename to be used for a temporary file" # safest Python 2.3 method if extension: x=tempfile.NamedTemporaryFile(suffix="."+extension) else: x=tempfile.NamedTemporaryFile() n=x.name x.close() del x return n def getfullname(name): """Returns the object corresponding to name. Imports will be done as necessary to resolve every part of the name""" mods=name.split('.') dict={} for i in range(len(mods)): # import everything try: exec "import %s" % (".".join(mods[:i])) in dict, dict except: pass # ok, we should have the name now return eval(name, dict, dict) def list_union(*lists): res=[] for l in lists: for item in l: if item not in res: res.append(item) return res def getkv(dict, key, updates=None): "Gets a key and value from a dict, returning as a dict potentially applying updates" d={key: dict[key].copy()} if updates: d[key].update(updates) return d # some obfuscation # obfuscate pwd _magic=[ord(x) for x in "IamAhaPp12&s]"] # the oldies are the best def obfus_encode(str): res=[] for i in range(len(str)): res.append(ord(str[i])^_magic[i%len(_magic)]) return "".join(["%02x" % (x,) for x in res]) def obfus_decode(str): res=[] for i in range(0, len(str), 2): res.append(int(str[i:i+2], 16)) x="" for i in range(len(res)): x+=chr(res[i]^_magic[i%len(_magic)]) return x # unicode byte order markers to codecs # this really should be part of the standard library # we try to import the encoding first. that has the side # effect of ensuring that the freeze tools pick up the # right bits of code as well import codecs _boms=[] # 64 bit try: import encodings.utf_64 _boms.append( (codecs.BOM64_BE, "utf_64") ) _boms.append( (codecs.BOM64_LE, "utf_64") ) except: pass # 32 bit try: import encodings.utf_32 _boms.append( (codecs.BOM_UTF32, "utf_32") ) _boms.append( (codecs.BOM_UTF32_BE, "utf_32") ) _boms.append( (codecs.BOM_UTF32_LE, "utf_32") ) except: pass # 16 bit try: import encodings.utf_16 _boms.append( (codecs.BOM_UTF16, "utf_16") ) _boms.append( (codecs.BOM_UTF16_BE, "utf_16_be") ) _boms.append( (codecs.BOM_UTF16_LE, "utf_16_le") ) except: pass # 8 bit try: import encodings.utf_8 _boms.append( (codecs.BOM_UTF8, "utf_8") ) except: pass # Work arounds for the idiots at Apple that decided not to even # include BOMs _boms.append( ("\0B\0E\0G\0I\0N\0:\0V\0C\0A\0R\0D", "utf_16_be") ) _boms.append( ("B\0E\0G\0I\0N\0:\0V\0C\0A\0R\0D\0", "utf_16_le") ) # NB: the 32 bit and 64 bit versions have the BOM constants defined in Py 2.3 # but no corresponding encodings module. They are here for completeness. # The order of above also matters since the first ones have longer # boms than the latter ones, and we need to be unambiguous _maxbomlen=max([len(bom) for bom,codec in _boms]) def opentextfile(name): """This function detects unicode byte order markers and if present uses the codecs module instead to open the file instead with appropriate unicode decoding, else returns the file using standard open function""" with file(name, 'rb') as f: start=f.read(_maxbomlen) for bom,codec in _boms: if start.startswith(bom): # some codecs don't do readline, so we have to vector via stringio # many postings also claim that the BOM is returned as the first # character but that hasn't been the case in my testing return StringIO.StringIO(codecs.open(name, "r", codec).read()) return file(name, "rtU") # don't you just love i18n # the following function is actually defined in guihelper and # inserted into this module. the intention is to ensure this # module doesn't have to import wx. The guihelper version # checks if wx is in unicode mode #def strorunicode(s): # if isinstance(s, unicode): return s # return str(s) def forceascii(s): return get_ascii_string(s, 'replace') # The CRC and escaping mechanisms are the same as used in PPP, HDLC and # various other standards. pppterminator="\x7e" def pppescape(data): return data.replace("\x7d", "\x7d\x5d") \ .replace("\x7e", "\x7d\x5e") def pppunescape(d): if d.find("\x7d")<0: return d res=list(d) try: start=0 while True: p=res.index("\x7d", start) res[p:p+2]=chr(ord(res[p+1])^0x20) start=p+1 except ValueError: return "".join(res) # See http://www.repairfaq.org/filipg/LINK/F_crc_v35.html for more info # on CRC _crctable=( 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, # 0 - 7 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, # 8 - 15 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, # 16 - 23 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, # 24 - 31 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, # 32 - 39 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, # 40 - 47 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, # 48 - 55 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, # 56 - 63 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, # 64 - 71 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, # 72 - 79 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, # 80 - 87 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, # 88 - 95 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, # 96 - 103 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, # 104 - 111 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, # 112 - 119 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, # 120 - 127 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, # 128 - 135 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, # 136 - 143 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, # 144 - 151 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, # 152 - 159 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, # 160 - 167 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, # 168 - 175 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, # 176 - 183 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, # 184 - 191 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, # 192 - 199 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, # 200 - 207 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, # 208 - 215 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, # 216 - 223 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, # 224 - 231 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, # 232 - 239 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, # 240 - 247 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78, # 248 - 255 ) def crc(data, initial=0xffff): "CRC calculation - returns 16 bit integer" res=initial for byte in data: curres=res res=res>>8 # zero extended val=(ord(byte)^curres) & 0xff val=_crctable[val] res=res^val res=(~res)&0xffff return res def crcs(data, initial=0xffff): "CRC calculation - returns 2 byte string LSB" r=crc(data, initial) return "%c%c" % ( r& 0xff, (r>>8)&0xff) ### ### Pathname processing (independent of host OS) ### def basename(name): if name.rfind('\\')>=0 or name.rfind('/')>=0: pos=max(name.rfind('\\'), name.rfind('/')) name=name[pos+1:] return name def dirname(name): if name.rfind('\\')>=0 or name.rfind('/')>=0: pos=max(name.rfind('\\'), name.rfind('/')) name=name[:pos] return name def stripext(name): if name.rfind('.')>=0: name=name[:name.rfind('.')] return name def getext(name): if name.rfind('.')>=0: return name[name.rfind('.')+1:] return '' #------------------------------------------------------------------------------- # number <-> string conversion routines def LSBUint16(v): if len(v)<2: return None return ord(v[0])+(ord(v[1])<<8) def LSBUint32(v): if len(v)<4: return None return ord(v[0])+(ord(v[1])<<8)+(ord(v[2])<<16)+(ord(v[3])<<24) def MSBUint16(v): if len(v)<2: return None return ord(v[1])+(ord(v[0])<<8) def MSBUint32(v): if len(v)<4: return None return ord(v[3])+(ord(v[2])<<8)+(ord(v[1])<<16)+(ord(v[0])<<24) def LSBstr16(v): return chr(v&0xff)+chr((v>>8)&0xff) def LSBstr32(v): return chr(v&0xff)+chr((v>>8)&0xff)+chr((v>>16)&0xff)+chr((v>>24)&0xff) def MSBstr16(v): return chr((v>>8)&0xff)+chr(v&0xff) def MSBstr32(v): return chr((v>>24)&0xff)+chr((v>>16)&0xff)+chr((v>>8)&0xff)+chr(v&0xff) ### ### Binary handling ### nibbles=("0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111") def tobinary(v): return nibbles[v>>4]+nibbles[v&0x0f] def frombinary(v): res=0 for i in v: res*=2 res+=bool(i=="1") return res # This could be done more efficiently through clever combinations of # masks and shifts but it is harder to write and debug (I tried :-) # and isn't any more effective on the short strings we work with def decodecharacterbits(bytes, bitsperchar, charconv=chr, terminator=None): """Decodes the characters out of a string of bytes where each character takes a fixed number of bits (eg 7) @param bytes: atring containing the raw bytes @param bitsperchar: number of bits making up each character @param charconv: the function used to convert the integer value into a character @param terminator: if this character is seen then it and the remaining bits are ignored""" bits="".join([tobinary(ord(c)) for c in bytes]) value=[] while len(bits): c=charconv(frombinary(bits[:bitsperchar])) if c==terminator: break value.append(c) bits=bits[bitsperchar:] return "".join(value) def encode_with_degrade(uni_string, codec='ascii', error_handling='strict'): temp_str='' if uni_string is None: return temp_str try: temp_str=uni_string.encode(codec) return temp_str except UnicodeError: pass # we'll have another go with dumbing down temp_str='' if codec=='ascii': temp_str=get_ascii_string(uni_string, error_handling) else: # go through all characters dumbing down the ones we cannot convert # we could do all at once but we only want to degrade characters the encoding # does not support for i in range(len(uni_string)): try: temp_char=uni_string[i].encode(codec) except UnicodeError: temp_char=get_ascii_string(uni_string[i], error_handling) temp_str+=temp_char return temp_str def get_ascii_string(uni_string, error_handling='strict'): "converts any type into an ascii byte string, for unicode string it will degrade if possible" if uni_string is None: return None if not isinstance(uni_string, (str, unicode)): # convert numbers into strings return str(uni_string) if not isinstance(uni_string, unicode): # we are already a byte string! return uni_string # normalise the string kd_str=unicodedata.normalize('NFKD', uni_string) stripped_str=u'' # go through removing all accoutrements from the character and convert some other characters # defined by unicode standard ver. 3.2.0 replace_chars= { u"\N{COMBINING GRAVE ACCENT}": u"", u"\N{COMBINING ACUTE ACCENT}": u"", u"\N{COMBINING CIRCUMFLEX ACCENT}": u"", u"\N{COMBINING TILDE}": u"", u"\N{COMBINING MACRON}": u"", u"\N{COMBINING OVERLINE}": u"", u"\N{COMBINING BREVE}": u"", u"\N{COMBINING DOT ABOVE}": u"", u"\N{COMBINING DIAERESIS}": u"", u"\N{COMBINING HOOK ABOVE}": u"", u"\N{COMBINING RING ABOVE}": u"", u"\N{COMBINING DOUBLE ACUTE ACCENT}": u"", u"\N{COMBINING CARON}": u"", u"\N{COMBINING VERTICAL LINE ABOVE}": u"", u"\N{COMBINING DOUBLE VERTICAL LINE ABOVE}": u"", u"\N{COMBINING DOUBLE GRAVE ACCENT}": u"", u"\N{COMBINING CANDRABINDU}": u"", u"\N{COMBINING INVERTED BREVE}": u"", u"\N{COMBINING TURNED COMMA ABOVE}": u"", u"\N{COMBINING COMMA ABOVE}": u"", u"\N{COMBINING REVERSED COMMA ABOVE}": u"", u"\N{COMBINING COMMA ABOVE RIGHT}": u"", u"\N{COMBINING GRAVE ACCENT BELOW}": u"", u"\N{COMBINING ACUTE ACCENT BELOW}": u"", u"\N{COMBINING LEFT TACK BELOW}": u"", u"\N{COMBINING RIGHT TACK BELOW}": u"", u"\N{COMBINING LEFT ANGLE ABOVE}": u"", u"\N{COMBINING HORN}": u"", u"\N{COMBINING LEFT HALF RING BELOW}": u"", u"\N{COMBINING UP TACK BELOW}": u"", u"\N{COMBINING DOWN TACK BELOW}": u"", u"\N{COMBINING PLUS SIGN BELOW}": u"", u"\N{COMBINING MINUS SIGN BELOW}": u"", u"\N{COMBINING PALATALIZED HOOK BELOW}": u"", u"\N{COMBINING RETROFLEX HOOK BELOW}": u"", u"\N{COMBINING DOT BELOW}": u"", u"\N{COMBINING DIAERESIS BELOW}": u"", u"\N{COMBINING RING BELOW}": u"", u"\N{COMBINING COMMA BELOW}": u"", u"\N{COMBINING CEDILLA}": u"", u"\N{COMBINING OGONEK}": u"", u"\N{COMBINING VERTICAL LINE BELOW}": u"", u"\N{COMBINING BRIDGE BELOW}": u"", u"\N{COMBINING INVERTED DOUBLE ARCH BELOW}": u"", u"\N{COMBINING CARON BELOW}": u"", u"\N{COMBINING CIRCUMFLEX ACCENT BELOW}": u"", u"\N{COMBINING BREVE BELOW}": u"", u"\N{COMBINING INVERTED BREVE BELOW}": u"", u"\N{COMBINING TILDE BELOW}": u"", u"\N{COMBINING MACRON BELOW}": u"", u"\N{COMBINING LOW LINE}": u"", u"\N{COMBINING DOUBLE LOW LINE}": u"", u"\N{COMBINING TILDE OVERLAY}": u"", u"\N{COMBINING SHORT STROKE OVERLAY}": u"", u"\N{COMBINING LONG STROKE OVERLAY}": u"", u"\N{COMBINING SHORT SOLIDUS OVERLAY}": u"", u"\N{COMBINING LONG SOLIDUS OVERLAY}": u"", u"\N{COMBINING RIGHT HALF RING BELOW}": u"", u"\N{COMBINING INVERTED BRIDGE BELOW}": u"", u"\N{COMBINING SQUARE BELOW}": u"", u"\N{COMBINING SEAGULL BELOW}": u"", u"\N{COMBINING X ABOVE}": u"", u"\N{COMBINING VERTICAL TILDE}": u"", u"\N{COMBINING DOUBLE OVERLINE}": u"", u"\N{COMBINING GRAVE TONE MARK}": u"", u"\N{COMBINING ACUTE TONE MARK}": u"", u"\N{COMBINING GREEK PERISPOMENI}": u"", u"\N{COMBINING GREEK KORONIS}": u"", u"\N{COMBINING GREEK DIALYTIKA TONOS}": u"", u"\N{COMBINING GREEK YPOGEGRAMMENI}": u"", u"\N{COMBINING BRIDGE ABOVE}": u"", u"\N{COMBINING EQUALS SIGN BELOW}": u"", u"\N{COMBINING DOUBLE VERTICAL LINE BELOW}": u"", u"\N{COMBINING LEFT ANGLE BELOW}": u"", u"\N{COMBINING NOT TILDE ABOVE}": u"", u"\N{COMBINING HOMOTHETIC ABOVE}": u"", u"\N{COMBINING ALMOST EQUAL TO ABOVE}": u"", u"\N{COMBINING LEFT RIGHT ARROW BELOW}": u"", u"\N{COMBINING UPWARDS ARROW BELOW}": u"", u"\N{COMBINING GRAPHEME JOINER}": u"", u'\N{BROKEN BAR}': '|', u'\N{CENT SIGN}': 'c', u'\N{COPYRIGHT SIGN}': '(C)', u'\N{DIVISION SIGN}': '/', u'\N{INVERTED EXCLAMATION MARK}': '!', u'\N{INVERTED QUESTION MARK}': '?', u'\N{LATIN CAPITAL LETTER AE}': 'Ae', u'\N{LATIN CAPITAL LETTER ETH}': 'Th', u'\N{LATIN CAPITAL LETTER THORN}': 'Th', u'\N{LATIN SMALL LETTER AE}': 'ae', u'\N{LATIN SMALL LETTER ETH}': 'th', u'\N{LATIN SMALL LETTER SHARP S}': 'ss', u'\N{LATIN SMALL LETTER THORN}': 'th', u'\N{LEFT-POINTING DOUBLE ANGLE QUOTATION MARK}': '<<', u'\N{MIDDLE DOT}': '*', u'\N{MULTIPLICATION SIGN}': '*', u'\N{PLUS-MINUS SIGN}': '+/-', u'\N{REGISTERED SIGN}': '(R)', u'\N{RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK}': '>>', u'\N{SOFT HYPHEN}': '-', u'\N{VULGAR FRACTION ONE HALF}': '1/2', u'\N{VULGAR FRACTION ONE QUARTER}': '1/4', u'\N{VULGAR FRACTION THREE QUARTERS}': '3/4', } for i in range(len(kd_str)): if kd_str[i] in replace_chars: stripped_str+=replace_chars[kd_str[i]] else: stripped_str+=kd_str[i] # now we have removed all the stuff we can try converting # error handling is managed by the calling routine temp_str=stripped_str.encode('ascii', error_handling) return temp_str ### ### Cache information against a file ### def statinfo(filename): """Returns a simplified version of os.stat results that can be used to tell if a file has changed. The normal structure returned also has things like last access time which should not be used to tell if a file has changed.""" try: s=os.stat(filename) return (s.st_mode, s.st_ino, s.st_dev, s.st_uid, s.st_gid, s.st_size, s.st_mtime, s.st_ctime) except: return None class FileCache: def __init__(self, lowwater=100, hiwater=140): self.items={} self.hiwater=hiwater self.lowwater=lowwater def get(self, filename): v=self.items.get(filename, None) if v is None: return None si,value=v # check freshness if si==statinfo(filename): return value return None def set(self, filename, value): # we deliberately return value make this easy to use in return statement if len(self.items)>=self.hiwater: while len(self.items)>self.lowwater: del self.items[random.choice(self.items.keys())] # yes there is a race condition with statinfo changing after program # has calculated value but before calling this function self.items[filename]=statinfo(filename),value return value # wrapper for __import__ def importas(name): return __import__(name, globals(), locals(), [name.split('.')[-1]]) # http://starship.python.net/crew/theller/moin.cgi/HowToDetermineIfRunningFromExe def main_is_frozen(): """ Return T if running from an exe, F otherwise """ return (hasattr(sys, "frozen") # new py2exe or hasattr(sys, "importers") # old py2exe or imp.is_frozen("__main__") # tools/freeze or os.path.isfile(sys.path[0])) # cxfreeze def get_main_dir(): """Return the absoluate path of the main BitPim dir """ if main_is_frozen(): if sys.platform!='win32': p=sys.path[0] if os.path.isfile(p): p=os.path.dirname(p) return p # windows running from exe, return as is return os.path.abspath(os.path.dirname(sys.executable)) # running from src, up one return os.path.split(os.path.abspath(os.path.dirname(sys.argv[0])))[0] if sys.platform=='win32': # From Tim Golden's Win32 How Do I ...? from win32api import GetFileVersionInfo, LOWORD, HIWORD def get_version_number (filename): """Return the version of a Windows DLL or EXE file """ try: info = GetFileVersionInfo (filename, "\\") ms = info['FileVersionMS'] ls = info['FileVersionLS'] return HIWORD (ms), LOWORD (ms), HIWORD (ls), LOWORD (ls) except: return None # simple generator that generates temp file name and del it afterward @contextmanager def usetempfile(ext): _name=gettempfilename(ext) try: yield _name finally: try: os.remove(_name) except OSError: # ignore if failed to del temp file pass bitpim-1.0.7+dfsg1/src/field_color.py0000644001616600161660000001200011320262071015554 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: field_color.py 4775 2010-01-04 03:44:57Z djpham $ """ Code to handle setting colors for fields in various BitPim Editor Dialogs. The idea is to show which fields are supported by the current phone model, which fields are not, and which fields are unknown (default). To use/enable this feature for your phone, define a dict value in your phone profile that specifies the applicability of various fields. It's probably best if you copy the default_field_info dict to your phone profile and set appropriate values. The value of each key can be either: None (don't know), True (applicable), False (not applicable), 0 (not applicable), int>0 (number of entries this phone can have). The name of this dict is 'field_color_data'. An example is included in module com_lgvx9800. """ import wx applicable_color=wx.BLUE notapplicable_color=wx.RED dunno_color=wx.BLACK default_field_info={ 'phonebook': { 'name': { 'first': None, 'middle': None, 'last': None, 'full': None, 'nickname': None }, 'number': { 'type': None, 'speeddial': None, 'number': None, 'ringtone': None, 'wallpaper': None }, 'email': None, 'email_details': { 'emailspeeddial': None, 'emailringtone': None, 'emailwallpaper': None }, 'address': { 'type': None, 'company': None, 'street': None, 'street2': None, 'city': None, 'state': None, 'postalcode': None, 'country': None }, 'url': None, 'memo': None, 'category': None, 'wallpaper': None, 'ringtone': None, 'storage': None, 'secret': None, 'ICE': None, 'im': None, }, 'calendar': { 'description': None, 'location': None, 'allday': None, 'start': None, 'end': None, 'priority': None, 'alarm': None, 'vibrate': None, 'repeat': None, 'memo': None, 'category': None, 'wallpaper': None, 'ringtone': None, }, 'memo': { 'subject': None, 'date': None, 'secret': None, 'category': None, 'memo': None, }, 'todo': { 'summary': None, 'status': None, 'due_date': None, 'percent_complete': None, 'completion_date': None, 'private': None, 'priority': None, 'category': None, 'memo': None, }, } current_field_info=default_field_info def build_field_info(widget, name=None): """Return the dict info for this widget """ global current_field_info _parent=widget.GetParent() if name: _names=[name] else: _names=[] while _parent: if hasattr(_parent, 'color_field_name'): if _parent.color_field_name not in _names: _names.append(_parent.color_field_name) _parent=_parent.GetParent() _names.reverse() _dict=current_field_info for n in _names: if not _dict.has_key(n): _dict[n]={} _dict=_dict[n] return _dict def get_children_count(widget): """Return the number of sibblings to this widget """ _parent=widget.GetParent() _cnt=0 if _parent: for _w in _parent.GetChildren(): if isinstance(_w, widget.__class__): _cnt+=1 return _cnt def get_color_info_from_profile(widget): """Walk up the widget chain to find the one that has the phone profile """ global current_field_info current_field_info=default_field_info _w=widget.GetParent() while _w: if hasattr(_w, 'phoneprofile'): # found it current_field_info=_w.phoneprofile.field_color_data return _w=_w.GetParent() def color(widget, name, tree=None): """Return the appropriate color for this field """ global current_field_info, default_field_info if tree: _dict=tree else: # need to build the field info dict _dict=build_field_info(widget) _val=_dict.get(name, None) _cnt=get_children_count(widget) if _val is None: if current_field_info==default_field_info: return dunno_color else: return notapplicable_color elif _val is False or not isinstance(_val, bool) and _cnt>_val: return notapplicable_color else: return applicable_color def build_color_field(widget, klass, args, name, tree=None): """ instantiate the widget, set the color, and return the widget """ _w=klass(*args) if _w: _w.SetForegroundColour(color(widget, name, tree)) return _w def reload_color_info(widget, widgets): get_color_info_from_profile(widget) _fc_dict=build_field_info(widget, widget.color_field_name) for (_w, name) in widgets: _w.SetForegroundColour(color(_w, name, _fc_dict)) bitpim-1.0.7+dfsg1/src/guihelper.py0000644001616600161660000003123511031323635015275 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: guihelper.py 4620 2008-06-28 02:53:17Z djpham $ "Various helper routines for gui based code" # These routines were initially in gui.py but that led to circular imports # which confused the heck out of pychecker # standard modules from __future__ import with_statement import contextlib import os import glob import sys # wx modules import wx # my modules import common # note we modify the common module contents ### ### The various IDs we use. Code below munges the integers into sequence ### # Main menu items ID_FILENEW=1 ID_FILEOPEN=1 ID_FILESAVE=1 ID_FILEIMPORT=1 ID_FILEEXPORT=1 ID_FILEPRINT=1 ID_FILEPRINTPREVIEW=1 ID_FILEEXIT=1 ID_EDITADDENTRY=1 ID_EDITDELETEENTRY=1 ID_EDITSELECTALL=1 ID_EDITSETTINGS=1 ID_EDITPHONEINFO=1 ID_EDITDETECT=1 ID_EDITCOPY=1 ID_EDITPASTE=1 ID_EDITRENAME=1 ID_DATAGETPHONE=1 ID_DATASENDPHONE=1 ID_DATAHISTORICAL=1 ID_DATANEWDB=1 ID_AUTOSYNCSETTINGS=1 ID_AUTOSYNCEXECUTE=1 ID_VIEWCOLUMNS=1 ID_VIEWPREVIEW=1 ID_VIEWLOGDATA=1 ID_VIEWCLEARLOGS=1 ID_VIEWFILESYSTEM=1 ID_HELPHELP=1 ID_HELPCONTENTS=1 ID_HELPTOUR=1 ID_HELPSUPPORT=1 ID_HELP_UPDATE=1 ID_HELPABOUT=1 ID_HELPPHONE=1 ID_HELPHOWTOS=1 ID_HELPFAQ=1 ID_DR_SETTINGS=1 ID_DEBUG_SCRIPT=1 ID_FILEVIEW_THUMBNAIL=1 ID_FILEVIEW_LIST=1 # file/filesystem viewer context menus ID_FV_SAVE=1 ID_FV_HEXVIEW=1 ID_FV_OVERWRITE=1 ID_FV_MOVE=1 ID_FV_NEWSUBDIR=1 ID_FV_NEWFILE=1 ID_FV_DELETE=1 ID_FV_OPEN=1 ID_FV_RENAME=1 ID_FV_REFRESH=1 ID_FV_PROPERTIES=1 ID_FV_ADD=1 ID_FV_BACKUP=1 ID_FV_BACKUP_TREE=1 ID_FV_RESTORE=1 ID_FV_PASTE=1 ID_FV_TOTAL_REFRESH=1 ID_FV_OFFLINEPHONE=1 ID_FV_REBOOTPHONE=1 ID_FV_MODEMMODE=1 ID_FV_COPY=1 ID_FV_REPLACE=1 # export/import IDs ID_EXPORT_VCARD_CONTACTS=1 ID_EXPORT_GROUPWARE_CONTACTS=1 ID_EXPORT_CSV_CONTACTS=1 ID_EXPORT_CSV_CALENDAR=1 ID_EXPORT_SMS=1 ID_EXPORT_CSV_CALL_HISTORY=1 ID_EXPORT_MEDIA_TO_DIR=1 ID_EXPORT_MEDIA_TO_ZIP=1 ID_IMPORT_CSV_CONTACTS=1 ID_IMPORT_CSV_CALENDAR=1 ID_IMPORT_VCARDS=1 ID_IMPORT_VCALENDAR=1 ID_IMPORT_ICALENDAR=1 ID_IMPORT_GCALENDAR=1 ID_IMPORT_OUTLOOK_CONTACTS=1 ID_IMPORT_OUTLOOK_CALENDAR=1 ID_IMPORT_OUTLOOK_NOTES=1 ID_IMPORT_OUTLOOK_TASKS=1 ID_IMPORT_EVO_CONTACTS=1 ID_IMPORT_QTOPIA_CONTACTS=1 ID_IMPORT_GROUPWARE_CONTACTS=1 ID_CALENDAR_WIZARD=1 ID_IMPORT_WPL=1 ID_EXPORT_ICALENDAR=1 # keep map around idmap={} # Start at 2 (if anything ends up being one then this code didn't spot it for idmapname in locals().keys(): if idmapname.startswith('ID_'): idnum=wx.NewId() # locals()[idmapname]=idnum exec "%s = %d" % (idmapname, idnum ) idmap[idnum]=idmapname ### ### Various functions not attached to classes ### # These are the mime-types as used internally in wxWidgets _wxmimemapping={ 'bmp': 'image/x-bmp', 'ico': 'image/x-ico', 'cur': 'image/x-cur', 'ani': 'image/x-ani', 'gif': 'image/gif', 'iff': 'image/iff', 'jpg': 'image/jpeg', 'jpeg': 'image/jpeg', 'pcx': 'image/pcx', 'png': 'image/png', 'pnm': 'image/pnm', 'xpm': 'image/xpm', } def getwxmimetype(filename): "Returns wx's mime type for the extension of filename, or None" return _wxmimemapping.get(getextension(filename.lower()), None) def BusyWrapper(method): def _busywrapper(*args, **kwargs): wx.BeginBusyCursor() try: return method(*args, **kwargs) finally: wx.EndBusyCursor() setattr(_busywrapper, "__doc__", getattr(method, "__doc__")) return _busywrapper @contextlib.contextmanager def MWBusyWrapper(mw): mw.OnBusyStart() try: yield mw finally: mw.OnBusyEnd() @contextlib.contextmanager def WXDialogWrapper(dlg, showmodal=False): """ A wrapper for the wx.Dialog class that automatically calls Destroy""" try: yield (dlg, dlg.ShowModal()) if showmodal else dlg finally: dlg.Destroy() @BusyWrapper def MessageDialog(*args, **kwargs): with WXDialogWrapper(wx.MessageDialog(*args, **kwargs), True): pass # Filename functions. These work on brew names which use forward slash / # as the directory delimiter. The builtin Python functions can't be used # as they are platform specific (eg they use \ on Windows) def getextension(str): """Returns the extension of a filename (characters after last period) An empty string is returned if the file has no extension. The period character is not returned""" str=basename(str) if str.rfind('.')>=0: return str[str.rfind('.')+1:] return "" def basename(str): """Returns the last part of the name (everything after last /)""" if str.rfind('/')<0: return str return str[str.rfind('/')+1:] def dirname(str): """Returns everything before the last / in the name""" if str.rfind('/')<0: return "" return str[:str.rfind('/')] def IsMSWindows(): """Are we running on Windows? @rtype: Bool""" return wx.Platform=='__WXMSW__' def IsGtk(): """Are we running on GTK (Linux) @rtype: Bool""" return wx.Platform=='__WXGTK__' def IsMac(): """Are we running on Mac @rtype: Bool""" return wx.Platform=='__WXMAC__' def getbitmap(name): """Gets a bitmap from the resource directory @rtype: wxBitmap """ return getimage(name).ConvertToBitmap() def getimage(name): """Gets an image from the resource directory @rtype: wx.Image """ for ext in ("", ".png", ".jpg"): if os.path.exists(getresourcefile(name+ext)): return wx.Image(getresourcefile(name+ext)) print "You need to make "+name+".png" return getimage('unknown') def getresourcefile(filename): """Returns name of file by adding it to resource directory pathname No attempt is made to verify the file exists @rtype: string """ return os.path.join(resourcedirectory, filename) def gethelpfilename(): """Returns what name we use for the helpfile Without trailing extension as wxBestHelpController figures that out""" # we look in a help subdirectory first which is # present in the developer tree j=os.path.join paths=( (helpdirectory, True), (resourcedirectory, False) ) if IsMSWindows(): name="bitpim.chm" else: name="bitpim.htb" for p,mention in paths: if os.path.isfile(j(p, name)): if mention: print "Using help file from "+p return j(p, "bitpim") assert False def getresourcefiles(wildcard): "Returns a list of filenames matching the wildcard in the resource directory" l=glob.glob(os.path.join(resourcedirectory, wildcard)) l.sort() return l # Where to find bitmaps etc resourcedirectory=os.path.join(common.get_main_dir(), 'resources') helpdirectory=os.path.join(common.get_main_dir(), 'help') # See strorunicode comment in common if wx.USE_UNICODE: def strorunicode(s): if s is None: return s if isinstance(s, unicode): return s return str(s) common.strorunicode=strorunicode del strorunicode else: def strorunicode(s): if s is None: return s try: return str(s) except UnicodeEncodeError: return s.encode("ascii", "replace") common.strorunicode=strorunicode del strorunicode # mime-type stuff def GetOpenCommand(mimetypes, filename): # go through list of mime-types until we can find a command for opening filename for mt in mimetypes: ft=wx.TheMimeTypesManager.GetFileTypeFromMimeType(mt) if ft is None: continue if IsGtk(): # protect file names with spaces cmd=ft.GetOpenCommand('"%s"'%filename) else: cmd=ft.GetOpenCommand(filename) if cmd is not None and len(cmd): return cmd return None # Art provider stuff # Our constants _ourart={ "ART_ADD_WALLPAPER": "add_picture", "ART_DEL_WALLPAPER": "delete_picture", "ART_ARROW_UP": "arrow_up", "ART_ARROW_DOWN": "arrow_down", "ART_ARROW_LEFT": "arrow_left", "ART_ARROW_RIGHT": "arrow_right", "ART_ADD_FIELD": "add_field", "ART_DEL_FIELD": "delete_field", "ART_ADD_CONTACT": "add_contact", "ART_DEL_CONTACT": "delete_contact", "ART_ADD_RINGER": "add_ringer", "ART_DEL_RINGER": "delete_ringer", "ART_ADD_MEMO": "add_memo", "ART_DEL_MEMO": "delete_memo", "ART_ADD_TODO": "add_todo", "ART_DEL_TODO": "delete_todo", "ART_ADD_SMS": "add_sms", "ART_DEL_SMS": "delete_sms", "ART_SEL_MEDIA": "select_media", "ART_SEL_IMAGE": "select_image", "ART_SEL_VIDEO": "select_video", "ART_SEL_CAMERA": "select_camera", "ART_SEL_SOUNDS": "select_sounds", "ART_SEL_PHONEBOOK": "select_phonebook", "ART_SEL_WALLPAPER": "select_wallpaper", "ART_SEL_RINGERS": "select_ringers", "ART_SEL_CALENDAR": "select_calendar", "ART_SEL_CALLHISTORY": "select_call_history", "ART_SEL_CALLS": "select_calls", "ART_SEL_SMS": "select_sms", "ART_SEL_MESSAGE": "select_message", "ART_SEL_FILE": "select_file", "ART_SEL_LOG": "select_log", "ART_SEL_MEMO": "select_memo", "ART_SEL_TODO": "select_todo", "ART_SEL_PLAYLIST": "select_playlist", "ART_SEL_PROTOCOL": "select_protocol", "ART_SEL_CONSOLE": "select_console", "ART_SEL_ROOT_IMAGE": "select_root", "ART_SEL_PHONE_ROOT": "phone_root", "ART_SEL_PHONE": "phone_root", "ART_DATAGETPHONE": "datagetphone", "ART_DATASENDPHONE": "datasendphone", "ART_AUTOSYNCEXECUTE": "autosyncexecute", "ART_HELPHELP": "helphelp", "ART_EDITPHONEINFO": "editphoneinfo", "ART_EDITDETECT": "editdetect", "ART_EDITSETTINGS": "editsettings", "ART_DATAHISTORICAL": "data_history", "ART_MEDIA_LIST_VIEW": "media_list_view", "ART_MEDIA_THUMB_VIEW": "media_thumb_view", "ART_FOLDER_OPEN": "folder_open", "ART_FOLDER": "folder" } # populate namespace for s in _ourart: globals()[s]=s class ArtProvider(wx.ArtProvider): """ArtProvider manages the art for the application""" def CreateBitmap(self, artid, client, size): """Loads a bitmap and returns it depending on the parameters """ if artid in _ourart: return getbitmap(_ourart[artid]) return wx.NullBitmap class MultiMessageBox: def __init__(self, parent, title="Bitpim", dlg_msg=""): self.__title=title self.__dlg_msg=dlg_msg self.__parent=parent self.__msgs={} def AddMessage(self, msg, priority=99): """ Add a message to the list of messages to be displayed Each message appears on it's own line """ # find the insertion point for the message # the key is in the format "priority.index", this creates a unique key which is # sortable in priority and insertion order loop=0 key="%d.%05d" % (priority, loop) while self.__msgs.has_key(key): loop=loop+1 key="%d.%05d" % (priority, loop) self.__msgs[key]={'msg': msg} return def ShowMessages(self, max_rows=0, max_columns=0): """ Displays the messages in a list in a dialog max_rows: Max visible messages, if number of messages exceed this a scroll bar will appear max_columns: Max visible width in characters returns: button pressed to exit dialog """ keys=self.__msgs.keys() keys.sort() out_list=[] for k in keys: msg=self.__msgs[k]['msg'] out_list.append(msg) #construct the dialog for display msg_dlg=wx.Dialog(self.__parent, -1, self.__title, style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.SYSTEM_MENU|wx.MAXIMIZE_BOX|wx.MINIMIZE_BOX) main_bs=wx.BoxSizer(wx.VERTICAL) main_bs.Add(wx.StaticText(msg_dlg, -1, self.__dlg_msg), 0, wx.ALL|wx.ALIGN_LEFT, 5) msgs=wx.ListBox(msg_dlg) msgs.Set(out_list) main_bs.Add(msgs, 0, wx.ALL|wx.EXPAND, 5) main_bs.Add(wx.Button(msg_dlg, wx.ID_OK, 'OK'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) msg_dlg.SetSizer(main_bs) msg_dlg.SetAutoLayout(True) main_bs.Fit(msg_dlg) # show the dialog res=msg_dlg.ShowModal() print "multi "+`res` msg_dlg.Destroy() return res def MsgCount(self): return len(self.__msgs) def ClearMessages(self): self.__msgs.clear() bitpim-1.0.7+dfsg1/src/widgets.py0000644001616600161660000001274710551327353014775 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2006-2006 Simon Capper ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: widgets.py 3890 2007-01-11 03:28:43Z djpham $ ### base class for all widgets import wx import re import helpids import bphtml class BitPimWidget: MENU_NORMAL=wx.ITEM_NORMAL MENU_SPACER=wx.ITEM_SEPARATOR MENU_CHECK=wx.ITEM_CHECK def __init__(self): pass def InitialiseWidget(self, tree, id, root, config, help_id=None): self.id=id self._tree=tree self.root=root self.config=config self.OnInit() if help_id==None: try: id_name=re.sub("[^A-Za-z]", "",self.GetWidgetName().upper()) self.help_id=getattr(helpids, "ID_TAB_"+id_name) except: self.help_id=helpids.ID_WELCOME else: self.help_id=help_id def OnInit(self): pass def AddSubPage(self, page, name, image=None, after=None): return self._tree.AddPage(self.id, page, name, image, after) def AddNode(self, name, image=None): return self._tree.AddNode(self, name, image) def OnSelected(self, node): """Default does nothing, override to provide specific functionality. node equals value returned from AddNode. """ pass def OnPopupMenu(self, parent, node, pt): menu=self.GetRightClickMenuItems(node) if len(menu): popup_menu=wx.Menu() for menu_item in menu: type, id, name, tooltip=menu_item if type==self.MENU_SPACER: # using append with a type of separator does not work for some reason? popup_menu.AppendSeparator() else: popup_menu.Append(id, name, tooltip, type) parent.PopupMenu(popup_menu, pt) self.OnRightClickMenuExit() def GetWidgetName(self): return self._tree.GetItemText(self.id) def GetHelpID(self): return self.help_id def ActivateSelf(self, id=None): if id==None: id=self.id self._tree.SelectItem(id) # override these functions to access menu/toolbar items # each command has a "Can" function, this controls greying # out options that are not supported by the widget def GetRightClickMenuItems(self, node): """Default does nothing, override to provide specific functionality. node equals value returned from AddNode. Return array of (type, ID, name, tootltip) tuples to be used in the popup menu Valid types are "menu", """ result=[] return result def OnRightClickMenuExit(self): pass def OnKeyDown(self, evt): pass def OnKeyUp(self, evt): pass def CanCopy(self): return False def OnCopy(self, evt): pass def CanPaste(self): return False def OnPaste(self, evt): pass def CanRename(self): return False def OnRename(self, evt): pass def CanDelete(self): return False def GetDeleteInfo(self): return wx.ART_DEL_BOOKMARK, "Delete" def OnDelete(self, evt): pass def CanAdd(self): return False def GetAddInfo(self): return wx.ART_ADD_BOOKMARK, "Add" def OnAdd(self, evt): pass def CanPrint(self): return False def OnPrintDialog(self, mainwindow, config): pass def CanSelectAll(self): return False def OnSelectAll(self, evt): pass def HasHistoricalData(self): return False def OnHistoricalData(self): pass def HasPreviewPane(self): return False def IsPreviewPaneEnabled(self): return False def OnViewPreview(self, on): pass def HasColumnSelector(self): return False def OnViewColumnSelector(self): pass def OnPreActivate(self): pass def OnPostActivate(self): pass class RootWidget(bphtml.HTMLWindow, BitPimWidget): # This page is copied out of the welcome.htm page of the BitPim help # Obviously, it needs to be in sync with the BitPim help. welcome_text=""" Welcome

Welcome

Welcome to BitPim.

If you are new to BitPim, please take the tour.

BitPim's homepage is www.bitpim.org. The project page is www.sourceforge.net/projects/bitpim.

You may be interested in upgrade information or the version history.

If you have any problems or questions please read the information about support.

Praise and contributions are always welcome!


""" def __init__(self, parent, id): wx.html.HtmlWindow.__init__(self, parent, id) self.SetPage(self.welcome_text) def OnLinkClicked(self, link): _ref=link.GetHref() if _ref.startswith('http'): # web link super(RootWidget, self).OnLinkClicked(link) else: # Help topic wx.GetApp().displayhelpid(str(_ref)) bitpim-1.0.7+dfsg1/src/comdiagnose.py0000644001616600161660000003021111045101740015566 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: comdiagnose.py 4656 2008-08-02 15:57:20Z hjelmn $ """Generate opinions on the attached com devices""" # Standard modules import re import sys # My modules import comscan import usbscan import bitflingscan def diagnose(portlist, phonemodule): """Returns data suitable for use in com port settings dialog @param portlist: A list of ports as returned by L{comscan.comscan}() @return: A list of tuples (whattodisplay, portselected, htmldiagnosis) """ res=[] # we sort into 3 lists # available # not available but active # the rest available=[] bfavailable=[] bfrest=[] notavailablebutactive=[] therest=[] for port in portlist: if port.has_key("available") and port["available"]: if port.has_key("BitFling"): bfavailable.append(port) else: available.append(port) continue if not port.has_key("BitFling") and (port.has_key("available") and port.has_key("active") and port["active"]): notavailablebutactive.append(port) continue if port.has_key("BitFling"): bfrest.append(port) else: therest.append(port) if len(available): whattodisplay="===== Available Ports ===== " portselected=None htmldiagnosis="

These ports are open and can be selected" res.append( (whattodisplay, portselected, htmldiagnosis) ) for port in available: likely=islikelyport(port, phonemodule) whattodisplay=port['description'] if likely: whattodisplay="(*) "+whattodisplay portselected=port['name'] if likely: htmldiagnosis="

This port is likely to be your phone. The port is available and can be selected.

"+genhtml(port) else: htmldiagnosis="

This port is available and can be selected.

"+genhtml(port) res.append( (whattodisplay, portselected, htmldiagnosis) ) if len(notavailablebutactive): whattodisplay="===== Ports not available =====" portselected=None htmldiagnosis="

These ports are active, but cannot be used because they are in use by another program or device driver, you do not have permissions to access them, or a device driver is required." res.append( (whattodisplay, portselected, htmldiagnosis) ) for port in notavailablebutactive: whattodisplay=port['description'] portselected=port['name'] htmldiagnosis="

This port is active but not available for use.

"+genhtml(port) res.append( (whattodisplay, portselected, htmldiagnosis) ) if len(therest): whattodisplay="===== Inoperable Ports =====" portselected=None htmldiagnosis="""

These ports are known to your operating system, but cannot be used. This may be because the device is not plugged in (such as on a USB to serial cable) or because you don't have sufficient permissions to use them.""" res.append( (whattodisplay, portselected, htmldiagnosis) ) for port in therest: whattodisplay=port['description'] portselected=port['name'] htmldiagnosis="""

This port should not be selected. If you believe it is the correct port, you should cause it to become available such as by plugging in the cable or ensuring you have correct permissions. Press refresh once you have done so and it should be listed under available. Note that the name may change as it becomes available.

"""+genhtml(port) res.append( (whattodisplay, portselected, htmldiagnosis) ) if len(bfavailable): whattodisplay="===== BitFling Available Ports ===== " portselected=None htmldiagnosis="

These BitFling ports are open and can be selected" res.append( (whattodisplay, portselected, htmldiagnosis) ) for port in bfavailable: likely=islikelyport(port, phonemodule) whattodisplay=port['description'] if likely: whattodisplay="(*) "+whattodisplay portselected=port['name'] if likely: htmldiagnosis="

This port is likely to be your phone. The port is available and can be selected.

"+genhtml(port) else: htmldiagnosis="

This port is available and can be selected.

"+genhtml(port) res.append( (whattodisplay, portselected, htmldiagnosis) ) if len(bfrest): whattodisplay="===== BitFling Other Ports ===== " portselected=None htmldiagnosis="

These BitFling ports exist but are not available" res.append( (whattodisplay, portselected, htmldiagnosis) ) for port in bfrest: likely=islikelyport(port, phonemodule) whattodisplay=port['description'] if likely: whattodisplay="(*) "+whattodisplay portselected=port['name'] if likely: htmldiagnosis="

This port is likely to be your phone. The port is available and can be selected.

"+genhtml(port) else: htmldiagnosis="

This port is available and can be selected.

"+genhtml(port) res.append( (whattodisplay, portselected, htmldiagnosis) ) return res def htmlify(text): text=re.sub("&", "&", text) text=re.sub("<", "<", text) text=re.sub(">", ">", text) return text def genhtml(port): """Returns nice html describing a port dict""" sfont='' efont='' res='\n' keys=port.keys() keys.sort() for k in keys: # property if k.startswith('usb-') and not k.endswith('string'): # ignore these continue res+='\n" res+="\n
PropertyValueDescription
'+sfont+k+efont+'\n' # value if k=='active' or k=='available': if port[k]: res+=sfont+"True"+efont else: res+=sfont+"False"+efont elif k=='driverdate': # XML-RPC converts tuples to lists, so we have to convert back again here res+=sfont+("%d-%d-%d" % tuple(port[k]))+efont elif k=='driverstatus': res+=sfont+`port[k]`+efont # should print it nicer at some point else: if isinstance(port[k], type("")): res+=sfont+htmlify(port[k])+efont else: res+=sfont+`port[k]`+efont res+='' # description if k=='name': res+=sfont+"This is the name the port is known to your operating system as"+efont elif k=='available': if port[k]: res+=sfont+"It was possible to open this port"+efont else: res+=sfont+"It was not possible to open this port"+efont elif k=='active': if port[k]: res+=sfont+"Your operating system shows this driver and port is correctly configured and a device attached"+efont else: res+=sfont+"This driver/port combination is not currently running"+efont elif k=='driverstatus': res+=sfont+"""This is low level detail. If problem is non-zero then you need to look in the control panel for an explanation as to why this driver/device is not working."""+efont elif k=='hardwareinstance': res+=sfont+"""This is how the device is named internally. For example USB devices include the vendor (VID) and product (PID) identities"""+efont elif k=="libusb": res+=sfont+"""This indicates if the usb library is in use to access this device. Operating system device drivers (if any) are bypassed when BitPim talks to the device"""+efont elif k=="driver-required": res+=sfont+"""This indicates if you must use a device driver, not direct USB access"""+efont elif k=="BitFling": res+=sfont+"""This indicates that the port is being accessed from a remote machine via BitFling,"""+efont elif k=="protocol": res+=sfont+"""This is the protocol the USB device claims to speak"""+efont elif k=="class": if port[k]=="serial": res+=sfont+"""This is a serial connection"""+efont elif port[k]=="modem": res+=sfont+"""This is a modem connection"""+efont else: res+=sfont+"""The port type (serial, modem etc)"""+efont elif k=='PID': res+=sfont+'Product ID'+efont elif k=='VID': res+=sfont+'Vendor ID'+efont else: res+=" " # tail it res+="
" return res def islikelyport(port, phonemodule): return islikelyportscore(port, phonemodule)>=0 def islikelyportscore(port, phonemodule): """Returns a port score. @return: -1 if no match, 0 best match, 1 next etc """ usbids=phonemodule.Profile.usbids deviceclasses=phonemodule.Profile.deviceclasses # it must be the right class if port.has_key("class") and port["class"] not in deviceclasses: return -1 score=0 # check the usbids for vid,pid,iface in usbids: score+=1 if port.has_key("libusb"): if port['usb-vendor#']==vid and \ port['usb-product#']==pid and \ port['usb-interface#']==iface: return score if port.has_key('hardwareinstance'): v=port['hardwareinstance'].lower() str="vid_%04x&pid_%04x" % (vid,pid) if v.find(str)>=0: return score # LG phones generall have ports named cu.name-BTDIAG-1 or cu.name-SerialPort-1 where name is the bluetooth id of the phone if sys.platform=='darwin' and (port['name'].lower().find('btdiag') > 0 or port['name'].lower().find('serialport') > 0): return score score+=10 # did it have a usb id that didn't match? if port.has_key("libusb"): return -1 # did the hardware instance have usb info? if port.has_key("hardwareinstance") and \ re.search("vid_([0-9a-f]){4}&pid_([0-9a-f]){4}", port['hardwareinstance'], re.I) is not None: return -1 # are we on non-windows platform? if so, just be happy if 'usb' is in the name or the driver name if sys.platform!='win32' and ( \ port['name'].lower().find('usb')>0 or port.get("driver","").lower().find('usb')>=0): return score # if we are on windows check to see if this phone supports bluetooth as we may have a bluetooth comport # we check that the bluetooth device contains the manufacturers ID for the phone, this filters # other bluetooth devices from the search, on windows the 'hardwareinstance' contains BTHENUM indicating # a bluetooth device and the manufacturer's ID if sys.platform=='win32' and (getattr(phonemodule.Profile, 'bluetooth_mfg_id', 0) != 0) and \ port['hardwareinstance'].find('BTHENUM\\')==0 and \ port['hardwareinstance'].find(getattr(phonemodule.Profile, 'bluetooth_mfg_id', 'XXX'))>0: return score # ok, not then return -1 def autoguessports(phonemodule): """Returns a list of ports (most likely first) for finding the phone on""" # this function also demonsrates the use of list comprehensions :-) res=[] # we only care about available ports ports=[(islikelyportscore(port, phonemodule), port) for port in comscan.comscan()+usbscan.usbscan()+bitflingscan.flinger.scan() if port['available']] # sort on score ports.sort() # return all ones with score >=0 return [ (port['name'], port) for score,port in ports if score>=0] if __name__=='__main__': import common print autoguessports(common.importas("phones.com_lgvx4400")) bitpim-1.0.7+dfsg1/src/guiwidgets.py0000644001616600161660000025753411050403014015467 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2003-2005 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: guiwidgets.py 4675 2008-08-12 21:52:12Z djpham $ """Most of the graphical user interface elements making up BitPim""" # standard modules from __future__ import with_statement import contextlib import os import sys import time import copy import StringIO import getpass import sha,md5 import gzip import base64 import thread import Queue import shutil import platform # wx. modules import wx import wx.html import wx.lib.intctrl import wx.lib.newevent import wx.lib.mixins.listctrl as listmix import wx.lib.stattext as stattext from wx.lib.masked import NumCtrl # my modules import apsw import common import version import helpids import comscan import usbscan import comdiagnose import analyser import guihelper import pubsub import bphtml import bitflingscan import aggregatedisplay import phone_media_codec import pubsub import widgets import phones import setphone_wizard import data_recording import xyaptu import serial ### ### BitFling cert stuff ### BitFlingCertificateVerificationEvent, EVT_BITFLINGCERTIFICATEVERIFICATION = wx.lib.newevent.NewEvent() #### #### A simple text widget that does nice pretty logging. #### class LogWindow(wx.Panel, widgets.BitPimWidget): theanalyser=None def __init__(self, parent): wx.Panel.__init__(self,parent, -1) # have to use rich2 otherwise fixed width font isn't used on windows self.tb=wx.TextCtrl(self, 1, style=wx.TE_MULTILINE| wx.TE_RICH2|wx.TE_DONTWRAP|wx.TE_READONLY) f=wx.Font(10, wx.MODERN, wx.NORMAL, wx.NORMAL ) ta=wx.TextAttr(font=f) self.tb.SetDefaultStyle(ta) self.sizer=wx.BoxSizer(wx.VERTICAL) self.sizer.Add(self.tb, 1, wx.EXPAND) self.SetSizer(self.sizer) self.SetAutoLayout(True) self.sizer.Fit(self) wx.EVT_IDLE(self, self.OnIdle) wx.EVT_SHOW(self, self.OnShow) self.outstandingtext=StringIO.StringIO() wx.EVT_KEY_UP(self.tb, self.OnKeyUp) def Clear(self): self.tb.Clear() def OnSelectAll(self, _): self.tb.SetSelection(-1, -1) def OnShow(self, show): if show.GetShow(): wx.CallAfter(self.CleanupView) def CleanupView(self): self.tb.SetInsertionPoint(0) self.tb.SetInsertionPointEnd() self.tb.Refresh() def OnIdle(self,_): if self.outstandingtext.tell(): # this code is written to be re-entrant newt=self.outstandingtext.getvalue() self.outstandingtext.seek(0) self.outstandingtext.truncate() self.tb.AppendText(newt) def log(self, str, nl=True): now=time.time() t=time.localtime(now) self.outstandingtext.write("%d:%02d:%02d.%03d " % ( t[3], t[4], t[5], int((now-int(now))*1000))) self.outstandingtext.write(str) if nl: self.outstandingtext.write("\n") def logdata(self, str, data, klass=None): o=self.outstandingtext self.log(str, nl=False) if data is not None: o.write(" Data - "+`len(data)`+" bytes\n") if klass is not None: try: o.write("<#! %s.%s !#>\n" % (klass.__module__, klass.__name__)) except: klass=klass.__class__ o.write("<#! %s.%s !#>\n" % (klass.__module__, klass.__name__)) o.write(common.datatohexstring(data)) o.write("\n") def OnKeyUp(self, evt): keycode=evt.GetKeyCode() if keycode==ord('P') and evt.ControlDown() and evt.AltDown(): # analyse what was selected data=self.tb.GetStringSelection() # or the whole buffer if it was nothing if data is None or len(data)==0: data=self.tb.GetValue() try: self.theanalyser.Show() except: self.theanalyser=None if self.theanalyser is None: self.theanalyser=analyser.Analyser(data=data) self.theanalyser.Show() self.theanalyser.newdata(data) evt.Skip() def GetValue(self): """return the log text""" return self.tb.GetValue() ### ### Dialog asking what you want to sync ### class GetPhoneDialog(wx.Dialog): # sync sources ("Pretty Name", "name used to query profile") sources= ( ('PhoneBook', 'phonebook'), ('Calendar', 'calendar'), ('Wallpaper', 'wallpaper'), ('Ringtone', 'ringtone'), ('Memo', 'memo'), ('Todo', 'todo'), ('SMS', 'sms'), ('Call History', 'call_history'), ('Play List', 'playlist'), ('T9 User DB','t9_udb')) # actions ("Pretty Name", "name used to query profile") actions = ( ("Get", "read"), ) NOTREQUESTED=0 MERGE=1 OVERWRITE=2 # type of action ("pretty name", "name used to query profile") types= ( ("Add", MERGE), ("Replace All", OVERWRITE)) typename={ MERGE: 'MERGE', OVERWRITE: 'OVERWRITE', NOTREQUESTED: 'NOTREQUESTED', } HELPID=helpids.ID_GET_PHONE_DATA def __init__(self, frame, title, id=-1): wx.Dialog.__init__(self, frame, id, title, style=wx.CAPTION|wx.SYSTEM_MENU|wx.DEFAULT_DIALOG_STYLE) gs=wx.FlexGridSizer(2+len(self.sources), 1+len(self.types),5 ,10) gs.AddGrowableCol(1) gs.AddMany( [ (wx.StaticText(self, -1, "Source"), 0, wx.EXPAND),]) for pretty,_ in self.types: gs.Add(wx.StaticText(self, -1, pretty), 0, wx.ALIGN_CENTRE) self._widgets={} for desc, source in self.sources: _cb=wx.CheckBox(self, wx.NewId(), desc) _cb.exclusive=False wx.EVT_CHECKBOX(self, _cb.GetId(), self.DoOkStatus) gs.Add(_cb, 0, wx.EXPAND) self._widgets[source]={ 'cb': _cb, 'rb': {}, } first=True for tdesc,tval in self.types: if first: style=wx.RB_GROUP first=0 else: style=0 _rb=wx.RadioButton(self, -1, "", style=style) if self._dowesupport(source, self.actions[0][1], tval): wx.EVT_RADIOBUTTON(self, _rb.GetId(), self.OnOptionSelected) else: _rb.SetValue(False) _rb.Enable(False) gs.Add(_rb, 0, wx.ALIGN_CENTRE) self._widgets[source]['rb'][tval]=_rb bs=wx.BoxSizer(wx.VERTICAL) bs.Add(gs, 0, wx.EXPAND|wx.ALL, 10) bs.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 7) but=self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.HELP) self._btn_ok=self.FindWindowById(wx.ID_OK) bs.Add(but, 0, wx.EXPAND|wx.ALL, 10) self.SetSizer(bs) self.SetAutoLayout(True) bs.Fit(self) wx.EVT_BUTTON(self, wx.ID_HELP, self.OnHelp) def _setting(self, sourcetype): _w=self._widgets[sourcetype] if not _w['cb'].GetValue(): # Not selected return self.NOTREQUESTED for _typeval,_rb in _w['rb'].items(): if _rb.GetValue(): return _typeval # should not get here raise ValueError def GetPhoneBookSetting(self): return self._setting("phonebook") def GetCalendarSetting(self): return self._setting("calendar") def GetWallpaperSetting(self): return self._setting("wallpaper") def GetRingtoneSetting(self): return self._setting("ringtone") def GetMemoSetting(self): return self._setting("memo") def GetTodoSetting(self): return self._setting("todo") def GetSMSSetting(self): return self._setting("sms") def GetCallHistorySetting(self): return self._setting("call_history") def GetPlaylistSetting(self): return self._setting('playlist') def GetT9Setting(self): return self._setting('t9_udb') def OnHelp(self,_): wx.GetApp().displayhelpid(self.HELPID) # this is what BitPim itself supports - the phones may support a subset _notsupported=( # ('phonebook', 'read', MERGE), # sort of is ('calendar', 'read', MERGE), ('wallpaper', 'read', MERGE), ('ringtone', 'read', MERGE), ('memo', 'read', MERGE), ('todo', 'read', MERGE), ('playlist', 'read', MERGE), ('t9_udb', 'read', MERGE)) def _dowesupport(self, source, action, type): if (source,action,type) in self._notsupported: return False return True def UpdateWithProfile(self, profile): assert len(self.types)==2 _action=self.actions[0][1] for source,_w in self._widgets.items(): _cb=_w['cb'] _cb.Enable(False) # are any radio buttons enabled _rb_on=False for _type,_rb in _w['rb'].items(): if self._dowesupport(source, _action, _type) and \ profile.SyncQuery(source, _action, self.typename[_type]): _cb.Enable(True) _cb.exclusive=profile.SyncQuery(source, _action, 'EXCLUSIVE') _rb.Enable(True) _rb_on|=bool(_rb.GetValue()) else: _rb.SetValue(False) _rb.Enable(False) if _cb.IsEnabled(): # make sure at least one radio button is set if not _rb_on: for _rb in _w['rb'].values(): if _rb.IsEnabled(): _rb.SetValue(True) break else: # uncheck of not enabled _cb.SetValue(False) def ShowModal(self): # we ensure the OK button is in the correct state self.DoOkStatus() return wx.Dialog.ShowModal(self) def _check_for_exclusive(self, w): if w.exclusive: # this one is exclusive, turn off all others for _w in self._widgets.values(): if _w['cb'] is not w: _w['cb'].SetValue(False) else: # this one is not exclusive, turn off all exclusive ones for _w in self._widgets.values(): if _w['cb'] is not w and \ _w['cb'].exclusive: _w['cb'].SetValue(False) def OnOptionSelected(self, evt): # User clicked on an option # Turn on the row to which this option belongs _rb=evt.GetEventObject() for _w1 in self._widgets.values(): if _rb in _w1['rb'].values(): _w1['cb'].SetValue(True) # and turn on the OK button self.DoOkStatus() return def DoOkStatus(self, evt=None): # ensure the OK button is in the right state if evt and evt.IsChecked(): enable=True self._check_for_exclusive(evt.GetEventObject()) else: enable=False for _w in self._widgets.values(): if _w['cb'].GetValue(): enable=True break self._btn_ok.Enable(enable) if evt is not None: evt.Skip() class SendPhoneDialog(GetPhoneDialog): HELPID=helpids.ID_SEND_PHONE_DATA # actions ("Pretty Name", "name used to query profile") actions = ( ("Send", "write"), ) def __init__(self, frame, title, id=-1): GetPhoneDialog.__init__(self, frame, title, id) # this is what BitPim itself doesn't supports - the phones may support less _notsupported=( ('call_history', 'write', None),) ### ### The master config dialog ### class ConfigDialog(wx.Dialog): phonemodels=phones.phonemodels update_choices=('Never', 'Daily', 'Weekly', 'Monthly') setme="" ID_DIRBROWSE=wx.NewId() ID_COMBROWSE=wx.NewId() ID_RETRY=wx.NewId() ID_BITFLING=wx.NewId() def __init__(self, mainwindow, frame, title="BitPim Settings", id=-1): wx.Dialog.__init__(self, frame, id, title, style=wx.CAPTION|wx.SYSTEM_MENU|wx.DEFAULT_DIALOG_STYLE) self.mw=mainwindow self.bitflingresponsequeues={} gs=wx.GridBagSizer(10, 10) gs.AddGrowableCol(1) _row=0 # safemode gs.Add( wx.StaticText(self, -1, "Read Only"), pos=(_row,0), flag=wx.ALIGN_CENTER_VERTICAL) self.safemode=wx.CheckBox(self, wx.NewId(), "Block writing anything to the phone") gs.Add( self.safemode, pos=(_row,1), flag=wx.ALIGN_CENTER_VERTICAL) _row+=1 # where we store our files gs.Add( wx.StaticText(self, -1, "Disk storage"), pos=(_row,0), flag=wx.ALIGN_CENTER_VERTICAL) gs.Add(wx.StaticText(self, -1, self.mw.config.Read('path', '')), pos=(_row,1), flag=wx.ALIGN_CENTER_VERTICAL) _row+=1 gs.Add(wx.StaticText(self, -1, 'Config File'), pos=(_row,0), flag=wx.ALIGN_CENTER_VERTICAL) gs.Add(wx.StaticText(self, -1, self.mw.config.Read('config')), pos=(_row,1), flag=wx.ALIGN_CENTER_VERTICAL) _row+=1 # phone type gs.Add( wx.StaticText(self, -1, "Phone Type"), pos=(_row,0), flag=wx.ALIGN_CENTER_VERTICAL) keys=self.phonemodels keys.sort() self.phonebox=wx.ComboBox(self, -1, "LG-VX4400", style=wx.CB_DROPDOWN|wx.CB_READONLY,choices=keys) self.phonebox.SetValue("LG-VX4400") gs.Add( self.phonebox, pos=(_row,1), flag=wx.ALIGN_CENTER_VERTICAL) _phone_btn=wx.Button(self, -1, 'Phone Wizard...') wx.EVT_BUTTON(self, _phone_btn.GetId(), self.OnPhoneWizard) gs.Add(_phone_btn, pos=(_row, 2), flag=wx.ALIGN_CENTER_VERTICAL) _row+=1 # com port gs.Add( wx.StaticText(self, -1, "Com Port"), pos=(_row,0), flag=wx.ALIGN_CENTER_VERTICAL) self.commbox=wx.TextCtrl(self, -1, self.setme, size=(200,-1)) gs.Add( self.commbox, pos=(_row,1), flag=wx.ALIGN_CENTER_VERTICAL) gs.Add( wx.Button(self, self.ID_COMBROWSE, "Browse ..."), pos=(_row,2), flag=wx.ALIGN_CENTER_VERTICAL) _row+=1 # com timeout gs.Add(wx.StaticText(self, -1, 'Com Timeout (sec)'), pos=(_row, 0), flag=wx.ALIGN_CENTER_VERTICAL) self.commtimeout=NumCtrl(self, -1, integerWidth=2, fractionWidth=1, allowNegative=False) gs.Add(self.commtimeout, pos=(_row, 1), flag=wx.ALIGN_CENTER_VERTICAL) _row+=1 # Automatic check for update gs.Add(wx.StaticText(self, -1, 'Check for Update'), pos=(_row,0), flag=wx.ALIGN_CENTER_VERTICAL) self.updatebox=wx.ComboBox(self, -1, self.update_choices[0], style=wx.CB_DROPDOWN|wx.CB_READONLY, choices=self.update_choices) gs.Add(self.updatebox, pos=(_row,1), flag=wx.ALIGN_CENTER_VERTICAL) _row+=1 # always start with the 'Today' tab gs.Add(wx.StaticText(self, -1, 'Startup'), pos=(_row,0), flag=wx.ALIGN_CENTER_VERTICAL) self.startup=wx.CheckBox(self, wx.NewId(), 'Always start with the Today tab') gs.Add(self.startup, pos=(_row,1), flag=wx.ALIGN_CENTER_VERTICAL) _row+=1 # whether or not to use TaskBarIcon if guihelper.IsMSWindows(): gs.Add(wx.StaticText(self, -1, 'Task Bar Icon'), pos=(_row,0), flag=wx.ALIGN_CENTER_VERTICAL) self.taskbaricon=wx.CheckBox(self, wx.NewId(), 'Place BitPim Icon in the System Tray when Minimized') gs.Add(self.taskbaricon, pos=(_row, 1), flag=wx.ALIGN_CENTER_VERTICAL) wx.EVT_CHECKBOX(self, self.taskbaricon.GetId(), self.OnTaskbarChkbox) _row+=1 self.taskbaricon1=wx.CheckBox(self, wx.NewId(), 'Place BitPim Icon in the System Tray when Closed') self.taskbaricon1.Enable(False) gs.Add(self.taskbaricon1, pos=(_row, 1), flag=wx.ALIGN_CENTER_VERTICAL) _row+=1 else: self.taskbaricon=None # whether or not to run autodetect at startup gs.Add(wx.StaticText(self, -1, 'Autodetect at Startup'), pos=(_row,0), flag=wx.ALIGN_CENTER_VERTICAL) self.autodetect_start=wx.CheckBox(self, wx.NewId(), 'Detect phone at bitpim startup') gs.Add(self.autodetect_start, pos=(_row, 1), flag=wx.ALIGN_CENTER_VERTICAL) _row+=1 # Splashscreen time gs.Add(wx.StaticText(self, -1, 'SplashScreen Time (sec)'), pos=(_row, 0), flag=wx.ALIGN_CENTER_VERTICAL) self.splashscreen=NumCtrl(self, -1, integerWidth=2, fractionWidth=1, allowNegative=False) gs.Add(self.splashscreen, pos=(_row, 1), flag=wx.ALIGN_CENTER_VERTICAL) _row+=1 # Developer's Console if __debug__: gs.Add(wx.StaticText(self, -1, 'Developer Console'), pos=(_row,0), flag=wx.ALIGN_CENTER_VERTICAL) self.dev_console=wx.CheckBox(self, wx.NewId(), 'Display Developer Console') gs.Add(self.dev_console, pos=(_row, 1), flag=wx.ALIGN_CENTER_VERTICAL) _row+=1 # bitfling if bitflingscan.IsBitFlingEnabled(): self.SetupBitFlingCertVerification() gs.Add( wx.StaticText( self, -1, "BitFling"), pos=(_row,0), flag=wx.ALIGN_CENTER_VERTICAL) self.bitflingenabled=wx.CheckBox(self, self.ID_BITFLING, "Enabled") gs.Add(self.bitflingenabled, pos=(_row,1), flag=wx.ALIGN_CENTER_VERTICAL) gs.Add( wx.Button(self, self.ID_BITFLING, "Settings ..."), pos=(_row,2), flag=wx.ALIGN_CENTER_VERTICAL) wx.EVT_BUTTON(self, self.ID_BITFLING, self.OnBitFlingSettings) wx.EVT_CHECKBOX(self, self.ID_BITFLING, self.ApplyBitFlingSettings) if self.mw.config.Read("bitfling/password","") \ == "": self.mw.config.WriteInt("bitfling/enabled", 0) self.bitflingenabled.SetValue(False) self.bitflingenabled.Enable(False) else: self.bitflingenabled=None # crud at the bottom bs=wx.BoxSizer(wx.VERTICAL) bs.Add(gs, 0, wx.EXPAND|wx.ALL, 10) bs.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 7) but=self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.HELP) bs.Add(but, 0, wx.CENTER|wx.ALL, 10) wx.EVT_BUTTON(self, wx.ID_HELP, self.OnHelp) wx.EVT_BUTTON(self, self.ID_COMBROWSE, self.OnComBrowse) wx.EVT_BUTTON(self, wx.ID_OK, self.OnOK) self.setdefaults() self.SetSizer(bs) self.SetAutoLayout(True) bs.Fit(self) # Retrieve saved settings... (we only care about position) set_size("ConfigDialog", self, screenpct=-1, aspect=3.5) wx.EVT_CLOSE(self, self.OnClose) def OnCancel(self, _): self.saveSize() def OnOK(self, _): self.saveSize() self.EndModal(wx.ID_OK) self.ApplyBitFlingSettings() def OnHelp(self, _): wx.GetApp().displayhelpid(helpids.ID_SETTINGS_DIALOG) def OnComBrowse(self, _): self.saveSize() if self.mw.wt is not None: self.mw.wt.clearcomm() # remember its size # w=self.mw.config.ReadInt("combrowsewidth", 640) # h=self.mw.config.ReadInt("combrowseheight", 480) p=self.mw.config.ReadInt("combrowsesash", 200) with guihelper.WXDialogWrapper(CommPortDialog(self, common.importas(phones.module(self.phonebox.GetValue())), defaultport=self.commbox.GetValue(), sashposition=p), True) as (dlg, res): self.mw.config.WriteInt("combrowsesash", dlg.sashposition) if res==wx.ID_OK: self.commbox.SetValue(dlg.GetPort()) def ApplyBitFlingSettings(self, _=None): if self.bitflingenabled is not None: if self.bitflingenabled.GetValue(): bitflingscan.flinger.configure(self.mw.config.Read("bitfling/username", ""), bitflingscan.decode(self.mw.config.Read("bitfling/password", "")), self.mw.config.Read("bitfling/host", ""), self.mw.config.ReadInt("bitfling/port", 12652)) else: bitflingscan.flinger.unconfigure() def OnBitFlingSettings(self, _): with guihelper.WXDialogWrapper(BitFlingSettingsDialog(None, self.mw.config), True) as (dlg, retcode): if retcode==wx.ID_OK: dlg.SaveSettings() self.ApplyBitFlingSettings() if self.mw.config.Read("bitfling/password","") \ != "": self.bitflingenabled.Enable(True) def SetupBitFlingCertVerification(self): "Setup all the voodoo needed for certificate verification to happen, not matter which thread wants it" EVT_BITFLINGCERTIFICATEVERIFICATION(self, self._wrapVerifyBitFlingCert) bitflingscan.flinger.SetCertVerifier(self.dispatchVerifyBitFlingCert) bitflingscan.flinger.setthreadeventloop(wx.SafeYield) def dispatchVerifyBitFlingCert(self, addr, key): """Handle a certificate verification from any thread The request is handed to the main gui thread, and then we wait for the results""" print thread.get_ident(),"dispatchVerifyBitFlingCert called" q=self.bitflingresponsequeues.get(thread.get_ident(), None) if q is None: q=Queue.Queue() self.bitflingresponsequeues[thread.get_ident()]=q print thread.get_ident(), "Posting BitFlingCertificateVerificationEvent" wx.PostEvent(self, BitFlingCertificateVerificationEvent(addr=addr, key=key, q=q)) print thread.get_ident(), "After posting BitFlingCertificateVerificationEvent, waiting for response" res, exc = q.get() print thread.get_ident(), "Got response", res, exc if exc is not None: ex=exc[1] ex.gui_exc_info=exc[2] raise ex return res def _wrapVerifyBitFlingCert(self, evt): """Receive the event in the main gui thread for cert verification We unpack the parameters, call the verification method""" print "_wrapVerifyBitFlingCert" addr, hostkey, q = evt.addr, evt.key, evt.q self.VerifyBitFlingCert(addr, hostkey, q) def VerifyBitFlingCert(self, addr, key, q): print "VerifyBitFlingCert for", addr, "type",key.get_name() # ::TODO:: reject if not dsa # get fingerprint fingerprint=common.hexify(key.get_fingerprint()) # do we already know about it? existing=wx.GetApp().config.Read("bitfling/certificates/%s" % (addr[0],), "") if len(existing): fp=existing if fp==fingerprint: q.put( (True, None) ) return # throw up the dialog print "asking user" dlg=AcceptCertificateDialog(None, wx.GetApp().config, addr, fingerprint, q) dlg.ShowModal() def OnClose(self, evt): self.saveSize() # Don't destroy the dialong, just put it away... self.EndModal(wx.ID_CANCEL) def OnTaskbarChkbox(self, evt): if evt.IsChecked(): self.taskbaricon1.Enable(True) else: self.taskbaricon1.SetValue(False) self.taskbaricon1.Enable(False) def setfromconfig(self): if len(self.mw.config.Read("lgvx4400port")): self.commbox.SetValue(self.mw.config.Read("lgvx4400port", "")) self.commtimeout.SetValue(self.mw.config.ReadFloat('commtimeout', 3.0)) if self.mw.config.Read("phonetype", "") in self.phonemodels: self.phonebox.SetValue(self.mw.config.Read("phonetype")) if self.bitflingenabled is not None: self.bitflingenabled.SetValue(self.mw.config.ReadInt("bitfling/enabled", 0)) self.ApplyBitFlingSettings() self.safemode.SetValue(self.mw.config.ReadInt("Safemode", 0)) self.updatebox.SetValue(self.mw.config.Read("updaterate", self.update_choices[0])) self.startup.SetValue(self.mw.config.ReadInt("startwithtoday", 0)) if self.taskbaricon: if self.mw.config.ReadInt('taskbaricon', 0): self.taskbaricon.SetValue(True) self.taskbaricon1.Enable(True) self.taskbaricon1.SetValue(self.mw.config.ReadInt('taskbaricon1', 0)) else: self.taskbaricon.SetValue(False) self.taskbaricon1.SetValue(False) self.taskbaricon1.Enable(False) self.autodetect_start.SetValue(self.mw.config.ReadInt("autodetectstart", 0)) self.splashscreen.SetValue(self.mw.config.ReadInt('splashscreentime', 2500)/1000.0) if __debug__: self.dev_console.SetValue(self.mw.config.ReadInt('console', 0)) def setdefaults(self): if self.commbox.GetValue()==self.setme: comm="auto" self.commbox.SetValue(comm) def updatevariables(self): path=self.mw.config.Read('path') self.mw.configpath=path self.mw.commportsetting=str(self.commbox.GetValue()) self.mw.config.Write("lgvx4400port", self.mw.commportsetting) self.mw.config.WriteFloat('commtimeout', float(self.commtimeout.GetValue())) if self.mw.wt is not None: self.mw.wt.clearcomm() # comm parameters (retry, timeouts, flow control etc) commparm={} commparm['retryontimeout']=self.mw.config.ReadInt("commretryontimeout", False) commparm['timeout']=self.mw.config.ReadFloat('commtimeout', 3.0) commparm['hardwareflow']=self.mw.config.ReadInt('commhardwareflow', False) commparm['softwareflow']=self.mw.config.ReadInt('commsoftwareflow', False) commparm['baud']=self.mw.config.ReadInt('commbaud', 115200) self.mw.commparams=commparm # phone model self.mw.config.Write("phonetype", self.phonebox.GetValue()) # do not touch this module importing code unless you check # that it also works with the freezing tools (py2exe, py2app, # cxfreeze etc). doing the sane sensible thing (__import__) # results in the wrong module being loaded! mod=phones.module(self.phonebox.GetValue()) exec("import "+mod) self.mw.phonemodule=eval(mod) self.mw.phoneprofile=self.mw.phonemodule.Profile() pubsub.publish(pubsub.PHONE_MODEL_CHANGED, self.mw.phonemodule) # bitfling if self.bitflingenabled is not None: self.mw.bitflingenabled=self.bitflingenabled.GetValue() self.mw.config.WriteInt("bitfling/enabled", self.mw.bitflingenabled) # safemode - make sure you have to restart to disable self.mw.config.WriteInt("SafeMode", self.safemode.GetValue()) if self.safemode.GetValue(): wx.GetApp().SAFEMODE=True wx.GetApp().ApplySafeMode() # check for update rate self.mw.config.Write('updaterate', self.updatebox.GetValue()) # startup option self.mw.config.WriteInt('startwithtoday', self.startup.GetValue()) # Task Bar Icon option if self.taskbaricon: self.mw.config.WriteInt('taskbaricon', self.taskbaricon.GetValue()) self.mw.config.WriteInt('taskbaricon1', self.taskbaricon1.GetValue()) else: self.mw.config.WriteInt('taskbaricon', 0) self.mw.config.WriteInt('taskbaricon1', 0) # startup autodetect option self.mw.config.WriteInt('autodetectstart', self.autodetect_start.GetValue()) # SplashScreen Time self.mw.config.WriteInt('splashscreentime', int(self.splashscreen.GetValue()*1000)) # developer console if __debug__: self.mw.config.WriteInt('console', self.dev_console.GetValue()) # ensure config is saved self.mw.config.Flush() # update the status bar self.mw.SetPhoneModelStatus() # update the cache path self.mw.update_cache_path() def needconfig(self): # Set base config self.setfromconfig() # do we know the phone? if self.mw.config.Read("phonetype", "") not in self.phonemodels: return True # are any at unknown settings if self.commbox.GetValue()==self.setme: # fill in and set defaults self.setdefaults() self.updatevariables() # any still unset? if self.commbox.GetValue()==self.setme: return True return False def ShowModal(self): self.setfromconfig() ec=wx.Dialog.ShowModal(self) if ec==wx.ID_OK: self.updatevariables() return ec def saveSize(self): save_size("ConfigDialog", self.GetRect()) def OnPhoneWizard(self, _): # clear the port if self.mw.wt is not None: self.mw.wt.clearcomm() # running the set phone wizard _wz=setphone_wizard.SetPhoneWizard(self) if _wz.RunWizard(): _res=_wz.get() self.commbox.SetValue(_res.get('com', '')) self.phonebox.SetValue(_res.get('phone', '')) ### ### The select a comm port dialog box ### class CommPortDialog(wx.Dialog): ID_LISTBOX=1 ID_TEXTBOX=2 ID_REFRESH=3 ID_SASH=4 ID_SAVE=5 def __init__(self, parent, selectedphone, id=-1, title="Choose a comm port", defaultport="auto", sashposition=0): wx.Dialog.__init__(self, parent, id, title, style=wx.CAPTION|wx.SYSTEM_MENU|wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER) self.parent=parent self.port=defaultport self.sashposition=sashposition self.selectedphone=selectedphone p=self # parent widget # the listbox and textbox in a splitter splitter=wx.SplitterWindow(p, self.ID_SASH, style=wx.SP_3D|wx.SP_LIVE_UPDATE) self.lb=wx.ListBox(splitter, self.ID_LISTBOX, style=wx.LB_SINGLE|wx.LB_HSCROLL|wx.LB_NEEDED_SB) self.tb=wx.html.HtmlWindow(splitter, self.ID_TEXTBOX, size=wx.Size(400,400)) # default style is auto scrollbar # On Mac, top pane will go to zero size on startup completely ignoring the sashposition passed in. # We ensure that the top pane is always visible ... splitter.SetMinimumPaneSize(100) splitter.SplitHorizontally(self.lb, self.tb, sashposition) # the buttons buttsizer=wx.GridSizer(1, 5) buttsizer.Add(wx.Button(p, wx.ID_OK, "OK"), 0, wx.ALL, 10) buttsizer.Add(wx.Button(p, self.ID_REFRESH, "Refresh"), 0, wx.ALL, 10) buttsizer.Add(wx.Button(p, self.ID_SAVE, "Save..."), 0, wx.ALL, 10) buttsizer.Add(wx.Button(p, wx.ID_HELP, "Help"), 0, wx.ALL, 10) buttsizer.Add(wx.Button(p, wx.ID_CANCEL, "Cancel"), 0, wx.ALL, 10) # vertical join of the two vbs=wx.BoxSizer(wx.VERTICAL) vbs.Add(splitter, 1, wx.EXPAND) vbs.Add(buttsizer, 0, wx.CENTER) # hook into self p.SetSizer(vbs) p.SetAutoLayout(True) vbs.Fit(p) # update dialog wx.CallAfter(self.OnRefresh) # hook in all the widgets wx.EVT_BUTTON(self, wx.ID_CANCEL, self.OnCancel) wx.EVT_BUTTON(self, wx.ID_HELP, self.OnHelp) wx.EVT_BUTTON(self, self.ID_REFRESH, self.OnRefresh) wx.EVT_BUTTON(self, self.ID_SAVE, self.OnSave) wx.EVT_BUTTON(self, wx.ID_OK, self.OnOk) wx.EVT_LISTBOX(self, self.ID_LISTBOX, self.OnListBox) wx.EVT_LISTBOX_DCLICK(self, self.ID_LISTBOX, self.OnListBox) wx.EVT_SPLITTER_SASH_POS_CHANGED(self, self.ID_SASH, self.OnSashChange) # Retrieve saved settings... Use 60% of screen if not specified set_size("CommDialog", self, screenpct=60) wx.EVT_CLOSE(self, self.OnClose) def OnSashChange(self, _=None): self.sashposition=self.FindWindowById(self.ID_SASH).GetSashPosition() def OnRefresh(self, _=None): self.tb.SetPage("

Refreshing ...") self.lb.Clear() self.Update() ports=comscan.comscan()+usbscan.usbscan() if bitflingscan.IsBitFlingEnabled(): ports=ports+bitflingscan.flinger.scan() self.portinfo=comdiagnose.diagnose(ports, self.selectedphone) if len(self.portinfo): self.portinfo=[ ("Automatic", "auto", "

BitPim will try to detect the correct port automatically when accessing your phone" ) ]+\ self.portinfo self.lb.Clear() sel=-1 for name, actual, description in self.portinfo: if sel<0 and self.GetPort()==actual: sel=self.lb.GetCount() self.lb.Append(name) if sel<0: sel=0 if self.lb.GetCount(): self.lb.SetSelection(sel) self.OnListBox() else: self.FindWindowById(wx.ID_OK).Enable(False) self.tb.SetPage("You do not have any com/serial ports on your system") def OnListBox(self, _=None): # enable/disable ok button p=self.portinfo[self.lb.GetSelection()] if p[1] is None: self.FindWindowById(wx.ID_OK).Enable(False) else: self.port=p[1] self.FindWindowById(wx.ID_OK).Enable(True) self.tb.SetPage(p[2]) def OnSave(self, _): html=StringIO.StringIO() print >>html, "BitPim port listing - %s" % (time.ctime(), ) print >>html, "

BitPim port listing - %s

" % (time.ctime(),) for long,actual,desc in self.portinfo: if actual is None or actual=="auto": continue print >>html, '' % (long,actual) print >>html, "" % (desc,) print >>html, "" print >>html, "
%s%s
%s

" with guihelper.WXDialogWrapper(wx.FileDialog(self, "Save port details as", defaultFile="bitpim-ports.html", wildcard="HTML files (*.html)|*.html", style=wx.SAVE|wx.OVERWRITE_PROMPT|wx.CHANGE_DIR), True) as (dlg, retcode): if retcode==wx.ID_OK: file(dlg.GetPath(), "wt").write(html.getvalue()) def OnCancel(self, _): self.saveSize() self.EndModal(wx.ID_CANCEL) def OnOk(self, _): self.saveSize() self.EndModal(wx.ID_OK) def OnHelp(self, _): wx.GetApp().displayhelpid(helpids.ID_COMMSETTINGS_DIALOG) def OnClose(self, evt): self.saveSize() # Don't destroy the dialong, just put it away... self.EndModal(wx.ID_CANCEL) def GetPort(self): return self.port def saveSize(self): save_size("CommDialog", self.GetRect()) ### ### Accept certificate dialog ### class AcceptCertificateDialog(wx.Dialog): def __init__(self, parent, config, addr, fingerprint, q): parent=self.FindAGoodParent(parent) wx.Dialog.__init__(self, parent, -1, "Accept certificate?", style=wx.CAPTION|wx.SYSTEM_MENU|wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER) self.config=config self.q=q self.addr=addr self.fingerprint=fingerprint hbs=wx.BoxSizer(wx.HORIZONTAL) hbs.Add(wx.StaticText(self, -1, "Host:"), 0, wx.ALL, 5) hbs.Add(wx.StaticText(self, -1, addr[0]), 0, wx.ALL, 5) hbs.Add(wx.StaticText(self, -1, " Fingerprint:"), 0, wx.ALL, 5) hbs.Add(wx.StaticText(self, -1, fingerprint), 1, wx.ALL, 5) vbs=wx.BoxSizer(wx.VERTICAL) vbs.Add(hbs, 0, wx.EXPAND|wx.ALL, 5) vbs.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 7) but=self.CreateButtonSizer(wx.YES|wx.NO|wx.HELP) vbs.Add(but, 0, wx.ALIGN_CENTER|wx.ALL, 10) self.SetSizer(vbs) vbs.Fit(self) wx.EVT_BUTTON(self, wx.ID_YES, self.OnYes) wx.EVT_BUTTON(self, wx.ID_NO, self.OnNo) wx.EVT_BUTTON(self, wx.ID_CANCEL, self.OnNo) def OnYes(self, _): wx.GetApp().config.Write("bitfling/certificates/%s" % (self.addr[0],), self.fingerprint) wx.GetApp().config.Flush() if self.IsModal(): self.EndModal(wx.ID_YES) else: self.Show(False) wx.CallAfter(self.Destroy) print "returning true from AcceptCertificateDialog" self.q.put( (True, None) ) def OnNo(self, _): if self.IsModal(): self.EndModal(wx.ID_NO) else: self.Show(False) wx.CallAfter(self.Destroy) print "returning false from AcceptCertificateDialog" self.q.put( (False, None) ) def FindAGoodParent(self, suggestion): win=wx.Window_FindFocus() while win is not None: try: if win.IsModal(): print "FindAGoodParent is",win return win except AttributeError: parent=win.GetParent() win=parent return suggestion ### ### BitFling settings dialog ### class BitFlingSettingsDialog(wx.Dialog): ID_USERNAME=wx.NewId() ID_PASSWORD=wx.NewId() ID_HOST=wx.NewId() ID_PORT=wx.NewId() ID_TEST=wx.NewId() passwordsentinel="@+_-3@<," def __init__(self, parent, config): wx.Dialog.__init__(self, parent, -1, "Edit BitFling settings", style=wx.CAPTION|wx.SYSTEM_MENU|wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER) self.config=config gs=wx.FlexGridSizer(1, 2, 5, 5) gs.AddGrowableCol(1) gs.AddMany([ (wx.StaticText(self, -1, "Username"), 0, wx.ALIGN_CENTER_VERTICAL), (wx.TextCtrl(self, self.ID_USERNAME), 1, wx.EXPAND), (wx.StaticText(self, -1, "Password"), 0, wx.ALIGN_CENTER_VERTICAL), (wx.TextCtrl(self, self.ID_PASSWORD, style=wx.TE_PASSWORD), 1, wx.EXPAND), (wx.StaticText(self, -1, "Host"), 0, wx.ALIGN_CENTER_VERTICAL), (wx.TextCtrl(self, self.ID_HOST), 1, wx.EXPAND), (wx.StaticText(self, -1, "Port"), 0, wx.ALIGN_CENTER_VERTICAL), (wx.lib.intctrl.IntCtrl(self, self.ID_PORT, value=12652, min=1, max=65535), 0) ]) vbs=wx.BoxSizer(wx.VERTICAL) vbs.Add(gs, 0, wx.EXPAND|wx.ALL, 5) vbs.Add((1,1), 1, wx.EXPAND) vbs.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 10) gs=wx.GridSizer(1,4, 5,5) gs.Add(wx.Button(self, wx.ID_OK, "OK")) gs.Add(wx.Button(self, self.ID_TEST, "Test")) gs.Add(wx.Button(self, wx.ID_HELP, "Help")) gs.Add(wx.Button(self, wx.ID_CANCEL, "Cancel")) vbs.Add(gs, 0, wx.ALIGN_CENTER|wx.ALL, 10) self.SetSizer(vbs) vbs.Fit(self) set_size("BitFlingConfigDialog", self, -20, 0.5) # event handlers wx.EVT_BUTTON(self, self.ID_TEST, self.OnTest) # fill in data defaultuser="user" try: defaultuser=getpass.getuser() except: pass self.FindWindowById(self.ID_USERNAME).SetValue(config.Read("bitfling/username", defaultuser)) if len(config.Read("bitfling/password", "")): self.FindWindowById(self.ID_PASSWORD).SetValue(self.passwordsentinel) self.FindWindowById(self.ID_HOST).SetValue(config.Read("bitfling/host", "")) self.FindWindowById(self.ID_PORT).SetValue(config.ReadInt("bitfling/port", 12652)) def ShowModal(self): res=wx.Dialog.ShowModal(self) save_size("BitFlingConfigDialog", self.GetRect()) return res def GetSettings(self): username=self.FindWindowById(self.ID_USERNAME).GetValue() pwd=self.FindWindowById(self.ID_PASSWORD).GetValue() if pwd==self.passwordsentinel: pwd=bitflingscan.decode(self.config.Read("bitfling/password", self.passwordsentinel)) host=self.FindWindowById(self.ID_HOST).GetValue() port=self.FindWindowById(self.ID_PORT).GetValue() return username, pwd, host, port def SaveSettings(self): "Copy settings from dialog fields into config object" username,pwd,host,port=self.GetSettings() self.config.Write("bitfling/username", username) self.config.Write("bitfling/password", bitflingscan.encode(pwd)) self.config.Write("bitfling/host", host) self.config.WriteInt("bitfling/port", port) def OnTest(self, _): wx.CallAfter(self._OnTest) def _OnTest(self, _=None): try: bitflingscan.flinger.configure(*self.GetSettings()) res=bitflingscan.flinger.getversion() guihelper.MessageDialog(self, "Succeeded. Remote version is %s" % (res,) , "Success", wx.OK|wx.ICON_INFORMATION) except Exception,ex: res="Failed: %s: %s" % sys.exc_info()[:2] if hasattr(ex, "gui_exc_info"): print common.formatexception( ex.gui_exc_info) else: print common.formatexception() guihelper.MessageDialog(self, res, "Failed", wx.OK|wx.ICON_ERROR) ### ### Various platform independent filename functions ### basename=common.basename stripext=common.stripext getext=common.getext ### ### A dialog showing a message in a fixed font, with a help button ### class MyFixedScrolledMessageDialog(wx.Dialog): """A dialog displaying a readonly text control with a fixed width font""" def __init__(self, parent, msg, caption, helpid, pos = wx.DefaultPosition, size = (850,600)): wx.Dialog.__init__(self, parent, -1, caption, pos, size, style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER) text=wx.TextCtrl(self, 1, style=wx.TE_MULTILINE | wx.TE_READONLY | wx.TE_RICH2 | wx.TE_DONTWRAP ) # Fixed width font f=wx.Font(10, wx.MODERN, wx.NORMAL, wx.NORMAL ) ta=wx.TextAttr(font=f) text.SetDefaultStyle(ta) text.AppendText(msg) # if i supply this in constructor then the font doesn't take text.SetInsertionPoint(0) text.ShowPosition(text.XYToPosition(0,0)) # vertical sizer vbs=wx.BoxSizer(wx.VERTICAL) vbs.Add(text, 1, wx.EXPAND|wx.ALL, 10) # buttons vbs.Add(self.CreateButtonSizer(wx.OK|wx.HELP), 0, wx.ALIGN_RIGHT|wx.ALL, 10) # plumb self.SetSizer(vbs) self.SetAutoLayout(True) wx.EVT_BUTTON(self, wx.ID_HELP, lambda _,helpid=helpid: wx.GetApp().displayhelpid(helpid)) ### ### Dialog that deals with exceptions ### import StringIO class ExceptionDialog(wx.Dialog): def __init__(self, parent, exception, title="Exception"): wx.Dialog.__init__(self, parent, title=title, style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.THICK_FRAME|wx.MAXIMIZE_BOX, size=(740, 580)) self.maintext=wx.TextCtrl(self, style=wx.TE_MULTILINE|wx.TE_READONLY|wx.TE_RICH2|wx.HSCROLL) vbs=wx.BoxSizer(wx.VERTICAL) vbs.Add(self.maintext, 1, wx.EXPAND|wx.ALL, 5) buttsizer=wx.GridSizer(1, 4) buttsizer.Add(wx.Button(self, wx.ID_CANCEL, "Abort BitPim"), 0, wx.ALL, 10) buttsizer.Add(wx.Button(self, wx.ID_HELP, "Help"), 0, wx.ALL, 10) buttsizer.Add(wx.Button(self, wx.ID_OK, "Continue"), 0, wx.ALL, 10) _id=wx.NewId() buttsizer.Add(wx.Button(self, _id, "Create Trouble Report"), 0, wx.ALL, 10) vbs.Add(buttsizer, 0, wx.ALIGN_RIGHT|wx.ALL, 5) wx.EVT_BUTTON(self, wx.ID_CANCEL, self.abort) wx.EVT_BUTTON(self, wx.ID_HELP, lambda _: wx.GetApp().displayhelpid(helpids.ID_EXCEPTION_DIALOG)) wx.EVT_BUTTON(self, _id, self.OnCreateReport) self.SetSizer(vbs) self._text="" self.addexception(exception) def abort(self,_): import os os._exit(1) def addexception(self, exception): s=StringIO.StringIO() s.write("BitPim version: "+version.versionstring+"-"+version.vendor+"\nAn unexpected exception has occurred.\nPlease see the help for details on what to do.\n\n") if hasattr(exception, 'gui_exc_info'): s.write(common.formatexception(exception.gui_exc_info)) else: s.write("Exception with no extra info.\n%s\n" % (exception.str(),)) self._text=s.getvalue() self.maintext.SetValue(self._text) def getexceptiontext(self): return self._text def OnCreateReport(self, _): with guihelper.WXDialogWrapper(CreateTroubleReportDialog(self.GetParent()), True) as (_dlg, retcode): if retcode==wx.ID_OK: try: self._create_report(_dlg.GetValue()) guihelper.MessageDialog(self, 'Trouble Report created successfully!', 'BitPim Trouble Report', style=wx.OK) except: guihelper.MessageDialog(self, 'Failed to Create Trouble Report', 'Trouble Report Error', style=wx.OK|wx.ICON_ERROR) def _create_report(self, vals): with contextlib.closing(gzip.GzipFile(vals['filename'], 'wb')) as _s: _s.write('BitPim Trouble Report\n') _s.write(time.asctime()+'\n') _s.write('BitPim Version: %s - %s\n'%(version.versionstring, version.vendor)) _s.write('Platorm: %s, Architecture: %s %s, Dist: %s %s %s\n'%\ ((platform.platform(),)+platform.architecture()+\ platform.dist())) # phone model if available try: _model=self.GetParent().phonemodule.Phone.desc except: _model='Not Available' _s.write('Phone Model: %s\n'%_model) _s.write('Name: %s\n'%vals['name']) _s.write('email: %s\n'%vals['email']) _s.write('Description: %s\n'%vals['description']) _s.write('Exception:\n%s\n'%self._text) # write out log data if evailable try: _log=self.GetParent().tree.lw.GetValue() except: # don't care if we can't get the log _log='Not Available' _s.write('BitPim Log:\n%s\n'%_log) # write out protocol data if available try: _log=self.GetParent().tree.lwdata.GetValue() except: _log='Not Available' _s.write('BitPim Protocol Data:\n%s\n'%_log) class CreateTroubleReportDialog(wx.Dialog): _default_filename='bpbug.gz' def __init__(self, parent): wx.Dialog.__init__(self, parent, -1, 'BitPim Trouble Report', style=wx.CAPTION|wx.SYSTEM_MENU|wx.DEFAULT_DIALOG_STYLE) gs=wx.GridBagSizer(10, 10) gs.AddGrowableCol(1) _width=300 _row=0 # Name gs.Add( wx.StaticText(self, -1, "Name:"), pos=(_row,0), flag=wx.ALIGN_CENTER_VERTICAL) self._name=wx.TextCtrl(self, -1, '', size=(_width,-1)) gs.Add(self._name, pos=(_row, 1), flag=wx.ALIGN_CENTER_VERTICAL) _row+=1 # email gs.Add( wx.StaticText(self, -1, "email:"), pos=(_row,0), flag=wx.ALIGN_CENTER_VERTICAL) self._email=wx.TextCtrl(self, -1, '', size=(_width,-1)) gs.Add(self._email, pos=(_row, 1), flag=wx.ALIGN_CENTER_VERTICAL) _row+=1 # trouble report file name gs.Add( wx.StaticText(self, -1, "File Name:"), pos=(_row,0), flag=wx.ALIGN_CENTER_VERTICAL) self._filename=wx.TextCtrl(self, -1, self._default_filename, size=(_width,-1)) gs.Add(self._filename, pos=(_row, 1), flag=wx.ALIGN_CENTER_VERTICAL) _browseid=wx.NewId() gs.Add(wx.Button(self, _browseid, 'Browse ...'), pos=(_row, 2), flag=wx.ALIGN_CENTER_VERTICAL) _row+=1 # Trouble Description gs.Add(wx.StaticText(self, -1, 'Trouble Description:'), pos=(_row, 0), flag=wx.ALIGN_CENTER_VERTICAL) self._desc=wx.TextCtrl(self, -1, '', style=wx.TE_MULTILINE|wx.TE_BESTWRAP, size=(_width, 100)) gs.Add(self._desc, pos=(_row, 1), flag=wx.ALIGN_CENTER_VERTICAL) _row+=1 # crud at the bottom bs=wx.BoxSizer(wx.VERTICAL) bs.Add(gs, 0, wx.EXPAND|wx.ALL, 10) bs.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 7) but=self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.HELP) bs.Add(but, 0, wx.CENTER|wx.ALL, 10) wx.EVT_BUTTON(self, wx.ID_HELP, self.OnHelp) wx.EVT_BUTTON(self, _browseid, self.OnBrowse) self.SetSizer(bs) self.SetAutoLayout(True) bs.Fit(self) def OnHelp(self, _): wx.GetApp().displayhelpid(helpids.ID_TROUBLEREPORT) def OnBrowse(self, _): # how to select a source, default to select a file with guihelper.WXDialogWrapper(wx.FileDialog(self, self._filename.GetValue(), defaultFile=self._filename.GetValue(), style=wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT, wildcard='gzip files|*.gz'), True) as (dlg, retcode): if retcode==wx.ID_OK: self._filename.SetValue(dlg.GetPath()) def GetValue(self): # return a dict of values of this dialog return { 'name': self._name.GetValue(), 'email': self._email.GetValue(), 'filename': self._filename.GetValue(), 'description': self._desc.GetValue(), } ### ### Too much freaking effort for a simple statusbar. Mostly copied from the demo. ### BUFFERED=0 class StatusText(stattext.GenStaticText): # Status value red=None green=None yellow=None def __init__(self, parent, ID, label, pos = wx.DefaultPosition, size = wx.DefaultSize, style = 0, name = "statustext"): # margin between the stoplight and the text self._text_margin=5 # relative size of the status stoplight, default to 100% of the height self._status_size=1.0 # color for the stop light if StatusText.red is None: StatusText.red=wx.RED StatusText.green=wx.GREEN StatusText.yellow=wx.NamedColour('YELLOW') self._stat=StatusText.green super(StatusText, self).__init__(parent, ID, label, pos=pos, style=style, name=name) def DoGetBestSize(self): """ Overridden base class virtual. Determines the best size of the control based on the label size and the current font. """ _s=super(StatusText, self).DoGetBestSize() _s.SetWidth(_s.GetWidth()+_s.GetHeight()*self._status_size+\ self._text_margin) self.CacheBestSize(_s) return _s def _draw_status(self, dc, w, h): # draw the status stoplight dc.BeginDrawing() dc.SetBrush(wx.Brush(self._stat, wx.SOLID)) _r=(h*self._status_size)/2 dc.DrawCircle(_r, h/2, _r) dc.EndDrawing def OnPaint(self, event): if BUFFERED: dc = wx.BufferedPaintDC(self) else: dc = wx.PaintDC(self) width, height = self.GetClientSize() if not width or not height: return if BUFFERED: clr = self.GetBackgroundColour() backBrush = wx.Brush(clr, wx.SOLID) if wx.Platform == "__WXMAC__" and clr == self.defBackClr: # if colour is still the default then use the striped background on Mac backBrush.MacSetTheme(1) # 1 == kThemeBrushDialogBackgroundActive dc.SetBackground(backBrush) dc.Clear() self._draw_status(dc, width, height) dc.SetTextForeground(self.GetForegroundColour()) dc.SetFont(self.GetFont()) label = self.GetLabel() style = self.GetWindowStyleFlag() y = 0 x=height*self._status_size+self._text_margin for line in label.split('\n'): if line == '': w, h = self.GetTextExtent('W') # empty lines have height too else: w, h = self.GetTextExtent(line) if style & wx.ALIGN_RIGHT: x = width - w if style & wx.ALIGN_CENTER: x = (width - w)/2 dc.DrawText(line, x, y) y += h def SetLabel(self, label, status=None): if status: self._stat=status super(StatusText, self).SetLabel(label) def SetStatus(self, status): self._stat=status self.Refresh() SB_Phone_Set=0 SB_Phone_Detected=1 SB_Phone_Unavailable=2 class MyStatusBar(wx.StatusBar): __total_panes=3 __version_index=2 __phone_model_index=2 __app_status_index=0 __gauge_index=1 __major_progress_index=2 __minor_progress_index=2 __help_str_index=2 __general_pane=2 __pane_width=[70, 180, -1] def __init__(self, parent, id=-1): wx.StatusBar.__init__(self, parent, id) self.__major_progress_text=self.__version_text=self.__phone_text='' self.sizechanged=False wx.EVT_SIZE(self, self.OnSize) wx.EVT_IDLE(self, self.OnIdle) self.gauge=wx.Gauge(self, 1000, 1) self._status=StatusText(self, -1, '', style=wx.ST_NO_AUTORESIZE) self._phone_model=StatusText(self, -1, '', style=wx.ST_NO_AUTORESIZE) self.SetFieldsCount(self.__total_panes) self.SetStatusWidths(self.__pane_width) ## self.Reposition() def OnSize(self,_): self.sizechanged=True def OnIdle(self,_): if not len(self.GetStatusText(self.__general_pane)): self.__set_version_phone_text() if self.sizechanged: try: self.Reposition() except: # this works around a bug in wx (on Windows only) # where we get a bogus exception. See SF bug # 873155 pass def Reposition(self): self.sizechanged = False rect=self.GetFieldRect(self.__gauge_index) self.gauge.SetPosition(wx.Point(rect.x+2, rect.y+2)) self.gauge.SetSize(wx.Size(rect.width-4, rect.height-4)) rect=self.GetFieldRect(self.__app_status_index) self._status.SetPosition(wx.Point(rect.x+2, rect.y+2)) self._status.SetSize(wx.Size(rect.width-4, rect.height-4)) rect=self.GetFieldRect(self.__phone_model_index) self._phone_model.SetPosition(wx.Point(rect.x+rect.width/2+2, rect.y+2)) self._phone_model.SetSize(wx.Size(rect.width/2-4, rect.height-4)) def progressminor(self, pos, max, desc=""): self.gauge.SetRange(max) self.gauge.SetValue(pos) if len(self.__major_progress_text): s=self.__major_progress_text if len(desc): s+=' - '+desc else: s=desc self.SetStatusText(s, self.__minor_progress_index) def progressmajor(self, pos, max, desc=""): if len(desc) and max: self.__major_progress_text="%d/%d %s" % (pos+1, max, desc) else: self.__major_progress_text=desc self.progressminor(0,1) def GetHelpPane(self): return self.__help_str_index def set_app_status_ready(self): self._status.SetLabel('Ready', StatusText.green) def set_app_status_busy(self): self._status.SetLabel('BUSY', StatusText.red) def set_phone_model(self, str='', status=SB_Phone_Set): if status==SB_Phone_Detected: self.__phone_text=str+' - Detected' _stat=StatusText.green elif status==SB_Phone_Set: self.__phone_text=str+' - Manually Set' _stat=StatusText.yellow else: self.__phone_text=str+' - Unavailable' _stat=StatusText.red self._phone_model.SetLabel(self.__phone_text, _stat) def set_versions(self, current, latest=''): s='BitPim '+current if len(latest): s+='/Latest '+latest else: s+='/Latest ' self.__version_text=s self.__set_version_phone_text() def __set_version_phone_text(self): self.SetStatusText(self.__version_text, self.__version_index) ### ### A MessageBox with a help button ### class AlertDialogWithHelp(wx.Dialog): """A dialog box with Ok button and a help button""" def __init__(self, parent, message, caption, helpfn, style=wx.DEFAULT_DIALOG_STYLE, icon=wx.ICON_EXCLAMATION): wx.Dialog.__init__(self, parent, -1, caption, style=style|wx.DEFAULT_DIALOG_STYLE) p=self # parent widget # horiz sizer for bitmap and text hbs=wx.BoxSizer(wx.HORIZONTAL) hbs.Add(wx.StaticBitmap(p, -1, wx.ArtProvider_GetBitmap(self.icontoart(icon), wx.ART_MESSAGE_BOX)), 0, wx.CENTER|wx.ALL, 10) hbs.Add(wx.StaticText(p, -1, message), 1, wx.CENTER|wx.ALL, 10) # the buttons buttsizer=self.CreateButtonSizer(wx.HELP|style) # Both vertical vbs=wx.BoxSizer(wx.VERTICAL) vbs.Add(hbs, 1, wx.EXPAND|wx.ALL, 10) vbs.Add(buttsizer, 0, wx.CENTER|wx.ALL, 10) # wire it in self.SetSizer(vbs) self.SetAutoLayout(True) vbs.Fit(self) wx.EVT_BUTTON(self, wx.ID_HELP, helpfn) def icontoart(self, id): if id&wx.ICON_EXCLAMATION: return wx.ART_WARNING if id&wx.ICON_INFORMATION: return wx.ART_INFORMATION # ::TODO:: rest of these # fallthru return wx.ART_INFORMATION ### ### Yet another dialog with user selectable buttons ### class AnotherDialog(wx.Dialog): """A dialog box with user supplied buttons""" def __init__(self, parent, message, caption, buttons, helpfn=None, style=wx.DEFAULT_DIALOG_STYLE, icon=wx.ICON_EXCLAMATION): """Constructor @param message: Text displayed in body of dialog @param caption: Title of dialog @param buttons: A list of tuples. Each tuple is a string and an integer id. The result of calling ShowModal() is the id @param helpfn: The function called if the user presses the help button (wx.ID_HELP) """ wx.Dialog.__init__(self, parent, -1, caption, style=style) p=self # parent widget # horiz sizer for bitmap and text hbs=wx.BoxSizer(wx.HORIZONTAL) hbs.Add(wx.StaticBitmap(p, -1, wx.ArtProvider_GetBitmap(self.icontoart(icon), wx.ART_MESSAGE_BOX)), 0, wx.CENTER|wx.ALL, 10) hbs.Add(wx.StaticText(p, -1, message), 1, wx.CENTER|wx.ALL, 10) # the buttons buttsizer=wx.BoxSizer(wx.HORIZONTAL) for label,id in buttons: buttsizer.Add( wx.Button(self, id, label), 0, wx.ALL|wx.ALIGN_CENTER, 5) if id!=wx.ID_HELP: wx.EVT_BUTTON(self, id, self.OnButton) else: wx.EVT_BUTTON(self, wx.ID_HELP, helpfn) # Both vertical vbs=wx.BoxSizer(wx.VERTICAL) vbs.Add(hbs, 1, wx.EXPAND|wx.ALL, 10) vbs.Add(buttsizer, 0, wx.CENTER|wx.ALL, 10) # wire it in self.SetSizer(vbs) self.SetAutoLayout(True) vbs.Fit(self) def OnButton(self, event): self.EndModal(event.GetId()) def icontoart(self, id): if id&wx.ICON_EXCLAMATION: return wx.ART_WARNING if id&wx.ICON_INFORMATION: return wx.ART_INFORMATION # ::TODO:: rest of these # fallthru return wx.ART_INFORMATION ### ### Window geometry/positioning memory ### def set_size(confname, window, screenpct=50, aspect=1.0): """Sets remembered/calculated dimensions/position for window @param confname: subkey to store/get this windows's settings from @param window: the window object itself @param screenpct: percentage of the screen the window should occupy. If this value is negative then the window will not be resized, only repositioned (unless the current size is silly) @param aspect: aspect ratio. If greater than one then it is how much wider than tall the window is, and if less than one then the other way round """ confobj=wx.GetApp().config # frig confname confname="windows/"+confname # Get screen size, scale according to percentage supplied screenSize = wx.GetClientDisplayRect() if (aspect >= 1): newWidth = screenSize.width * abs(screenpct) / 100 newHeight = screenSize.height * abs(screenpct) / aspect / 100 else: newWidth = screenSize.width * abs(screenpct) * aspect / 100 newHeight = screenSize.height * abs(screenpct) / 100 if screenpct<=0: rs_width,rs_height=window.GetSizeTuple() else: # Retrieve values (if any) from config database for this config object rs_width = confobj.ReadInt(confname + "/width", int(newWidth)) rs_height = confobj.ReadInt(confname + "/height", int(newHeight)) # suitable magic number to show not configured. it is an exercise for the reader # why it isn't -65536 (hint: virtual desktops) unconfigured=-65245 rs_x = confobj.ReadInt(confname + "/x", unconfigured) rs_y = confobj.ReadInt(confname + "/y", unconfigured) # Check for small window if rs_height < 96: rs_height = newHeight if rs_width < 96: rs_width = newWidth # Make sure window is no larger than about screen size # # determine ratio of original oversized window so we keep the ratio if we resize... rs_aspect = rs_width/rs_height if rs_aspect >= 1: if rs_width > screenSize.width: rs_width = screenSize.width if rs_height > (screenSize.height): rs_height = (screenSize.height / rs_aspect) - screenSize.y else: if rs_width > screenSize.width: rs_width = screenSize.width * rs_aspect if rs_height > screenSize.height - screenSize.y: rs_height = screenSize.height - screenSize.y # Off the screen? Just pull it back a little bit so it's visible.... if rs_x!=unconfigured and rs_x > screenSize.width: rs_x = screenSize.width - 50 if rs_x!=unconfigured and rs_x + rs_width < screenSize.x: rs_x = screenSize.x if rs_y!=unconfigured and rs_y > screenSize.height: rs_y = screenSize.height - 50 if rs_y!=unconfigured and rs_y + rs_height < screenSize.y: rs_y = screenSize.y if screenpct<=0 and (rs_width,rs_height)==window.GetSizeTuple(): # set position only, and no need to resize if rs_x!=unconfigured and rs_y!=unconfigured: print "setting %s to position %d, %d" % (confname, rs_x, rs_y) window.SetPosition(wx.Point(rs_x, rs_y)) else: if rs_x==unconfigured or rs_y==unconfigured: print "setting %s to size %d x %d" % (confname, rs_width, rs_height) window.SetSize(wx.Size(rs_width, rs_height)) else: print "setting %s to position %d, %d - size %d x %d" % (confname, rs_x, rs_y, rs_width, rs_height) window.SetDimensions(rs_x, rs_y, rs_width, rs_height) def save_size(confname, myRect): """Saves size to config. L{set_size} @param confname: Same string as in set_size @param myRect: Window size you want remembered, typically window.GetRect() """ confobj=wx.GetApp().config confname="windows/"+confname x = myRect.x y = myRect.y width = myRect.width height = myRect.height confobj.WriteInt(confname + "/x", x) confobj.WriteInt(confname + "/y", y) confobj.WriteInt(confname + "/width", width) confobj.WriteInt(confname + "/height", height) confobj.Flush() class LogProgressDialog(wx.ProgressDialog): """ display log string and progress bar at the same time """ def __init__(self, title, message, maximum=100, parent=None, style=wx.PD_AUTO_HIDE|wx.PD_APP_MODAL): super(LogProgressDialog, self).__init__(title, message, maximum, parent, style) self.__progress_value=0 def Update(self, value, newmsg='', skip=None): self.__progress_value=value super(LogProgressDialog, self).Update(value, newmsg, skip) def log(self, msgstr): super(LogProgressDialog, self).Update(self.__progress_value, msgstr) class AskPhoneNameDialog(wx.Dialog): def __init__(self, parent, message, caption="Enter phone owner's name", style=wx.DEFAULT_DIALOG_STYLE): """ Ask a user to enter an owner's name of a phone. Similar to the wx.TextEntryDialog but has 3 buttons, Ok, No Thanks, and Maybe latter. """ super(AskPhoneNameDialog, self).__init__(parent, -1, caption, style=style) vbs=wx.BoxSizer(wx.VERTICAL) vbs.Add(wx.StaticText(self, -1, message), 0, wx.ALL, 5) self.__text_ctrl=wx.TextCtrl(self, -1, style=wx.TE_PROCESS_ENTER) vbs.Add(self.__text_ctrl, 0, wx.EXPAND|wx.ALL, 5) vbs.Add(wx.StaticLine(self), 0, wx.EXPAND|wx.ALL, 5) hbs=wx.BoxSizer(wx.HORIZONTAL) ok_btn=wx.Button(self, wx.ID_OK, 'OK') hbs.Add(ok_btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5) cancel_btn=wx.Button(self, wx.ID_CANCEL, 'No Thanks') hbs.Add(cancel_btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5) maybe_btn=wx.Button(self, wx.NewId(), 'Maybe next time') hbs.Add(maybe_btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5) vbs.Add(hbs, 1, wx.ALL, 5) wx.EVT_BUTTON(self, maybe_btn.GetId(), self.__OnMaybe) wx.EVT_TEXT_ENTER(self, self.__text_ctrl.GetId(), self.__OnTextEnter) self.SetSizer(vbs) self.SetAutoLayout(True) vbs.Fit(self) def GetValue(self): return self.__text_ctrl.GetValue() def __OnMaybe(self, evt): self.EndModal(evt.GetId()) def __OnTextEnter(self, _): self.EndModal(wx.ID_OK) class HistoricalDataDialog(wx.Dialog): Current_Data=0 Historical_Data=1 _Historical_Date=1 _Historical_Event=2 def __init__(self, parent, caption='Historical Data Selection', current_choice=Current_Data, historical_date=None, historical_events=None): super(HistoricalDataDialog, self).__init__(parent, -1, caption) vbs=wx.BoxSizer(wx.VERTICAL) hbs=wx.BoxSizer(wx.HORIZONTAL) self.data_selector=wx.RadioBox(self, wx.NewId(), 'Data Selection:', choices=('Current', 'Historical Date', 'Historical Event'), style=wx.RA_SPECIFY_ROWS) self.data_selector.SetSelection(current_choice) wx.EVT_RADIOBOX(self, self.data_selector.GetId(), self.OnSelectData) hbs.Add(self.data_selector, 0, wx.ALL, 5) static_bs=wx.StaticBoxSizer(wx.StaticBox(self, -1, 'Historical Date:'), wx.VERTICAL) self.data_date=wx.DatePickerCtrl(self, style=wx.DP_DROPDOWN | wx.DP_SHOWCENTURY) if historical_date is not None: self.data_date.SetValue(wx.DateTimeFromTimeT(historical_date)) self.data_date.Enable(current_choice==self._Historical_Date) static_bs.Add(self.data_date, 1, wx.EXPAND, 0) hbs.Add(static_bs, 0, wx.ALL, 5) # historical events static_bs=wx.StaticBoxSizer(wx.StaticBox(self, -1, 'Historical Events:'), wx.VERTICAL) self.hist_events=wx.ListBox(self, -1, style=wx.LB_SINGLE) if historical_events: self._populate_historical_events(historical_events) self.hist_events.Enable(current_choice==self._Historical_Event) static_bs.Add(self.hist_events, 1, wx.EXPAND, 0) hbs.Add(static_bs, 0, wx.ALL, 5) vbs.Add(hbs, 1, wx.EXPAND|wx.ALL, 5) vbs.Add(wx.StaticLine(self), 0, wx.EXPAND|wx.ALL, 5) vbs.Add(self.CreateButtonSizer(wx.OK|wx.CANCEL), 0, wx.ALIGN_CENTER|wx.ALL, 5) self.SetSizer(vbs) self.SetAutoLayout(True) vbs.Fit(self) def OnSelectData(self, evt): self.data_date.Enable(evt.GetInt()==self._Historical_Date) self.hist_events.Enable(evt.GetInt()==self._Historical_Event) def GetValue(self): choice=self.data_selector.GetSelection() if choice==self.Current_Data: mode=self.Current_Data time_t=None elif choice==self._Historical_Date: dt=self.data_date.GetValue() dt.SetHour(23) dt.SetMinute(59) dt.SetSecond(59) mode=self.Historical_Data time_t=dt.GetTicks() else: sel=self.hist_events.GetSelection() if sel==wx.NOT_FOUND: mode=self.Current_Data time_t=None else: mode=self.Historical_Data time_t=self.hist_events.GetClientData(sel) return mode, time_t def _populate_historical_events(self, historical_events): keys=historical_events.keys() keys.sort() keys.reverse() for k in keys: # build the string self.hist_events.Append('%s %02d-Adds %02d-Dels %02d-Mods'%\ (time.strftime('%b %d, %y %H:%M:%S', time.localtime(k)), historical_events[k]['add'], historical_events[k]['del'], historical_events[k]['mod']), k) class BitPimListCtrl(wx.ListCtrl, listmix.ColumnSorterMixin): def __init__(self, parent, column_info): self.lcparent=parent wx.ListCtrl.__init__(self, self.lcparent, wx.NewId(), style=wx.LC_REPORT|wx.LC_VIRTUAL) index=0 self.column_type=[] for info in column_info: text, width, int_sort=info self.InsertColumn(index, text, width=width) self.column_type.append(int_sort) index+=1 self.handle_paint=False listmix.ColumnSorterMixin.__init__(self, index) self.font=wx.TheFontList.FindOrCreateFont(10, family=wx.SWISS, style=wx.NORMAL, weight=wx.NORMAL) self.image_list=wx.ImageList(16, 16) a={"sm_up":"GO_UP","sm_dn":"GO_DOWN","w_idx":"WARNING","e_idx":"ERROR","i_idx":"QUESTION"} for k,v in a.items(): s="self.%s= self.image_list.Add(wx.ArtProvider_GetBitmap(wx.ART_%s,wx.ART_TOOLBAR,(16,16)))" % (k,v) exec(s) self.SetImageList(self.image_list, wx.IMAGE_LIST_SMALL) def SortItems(self,sorter=None): col=self._col sf=self._colSortFlag[col] #creating pairs [column item defined by col, key] items=[] for k,v in self.itemDataMap.items(): if self.column_type[col]: items.append([int(v[col]),k]) else: items.append([v[col],k]) items.sort() k=[key for value, key in items] # False is descending if sf==False: k.reverse() self.itemIndexMap=k #redrawing the list self.Refresh() def GetListCtrl(self): return self def GetSortImages(self): return (self.sm_dn, self.sm_up) def OnGetItemText(self, item, col): index=self.itemIndexMap[item] s = self.itemDataMap[index][col] return s def OnGetItemImage(self, item): return -1 def OnGetItemAttr(self, item): return None def GetItemData(self, item): index=self.itemIndexMap[item] return self.itemPyDataMap[index] def SelectAll(self): item=self.GetTopItem() while item!=-1: self.Select(item) item=self.GetNextItem(item) def ResetView(self, display_data, data_keys): self.itemDataMap = display_data self.itemIndexMap = display_data.keys() self.itemPyDataMap = data_keys count=len(self.lcparent.nodes) self.SetItemCount(count) self.SortListItems() if count==0 and not self.handle_paint: wx.EVT_PAINT(self, self.OnPaint) self.handle_paint=True elif count!=0 and self.handle_paint: self.Unbind(wx.EVT_PAINT) self.handle_paint=False def OnPaint(self, evt): w,h=self.GetSize() self.Refresh() dc=wx.PaintDC(self) dc.BeginDrawing() dc.SetFont(self.font) x,y= dc.GetTextExtent("There are no items to show in this view") # center the text xx=(w-x)/2 if xx<0: xx=0 dc.DrawText("There are no items to show in this view", xx, h/3) dc.EndDrawing() def GetSelections(self): sels_idx={} index=0 sels_idx[index]=self.GetFirstSelected() # build up a list of all selected items while sels_idx[index]!=-1: index+=1 sels_idx[index]=self.GetNextSelected(sels_idx[index-1]) del sels_idx[index] return sels_idx class DRRecFileDialog(wx.Dialog): """ A dialog to ask for and provide the file name for a Data Recording file """ def __init__(self, parent): super(DRRecFileDialog, self).__init__(parent, -1, 'BitPim Data Recording') vbs=wx.BoxSizer(wx.VERTICAL) fgs=wx.GridBagSizer(5, 5) fgs.Add(wx.StaticText(self, -1, 'File Name:'), pos=(0,0), flag=wx.EXPAND|wx.ALL) self._file_name=wx.TextCtrl(self, -1, 'bitpim.dat') fgs.Add(self._file_name, pos=(0, 1), flag=wx.EXPAND|wx.ALL) _brw_btn=wx.Button(self, -1, 'Browse') fgs.Add(_brw_btn, pos=(0, 2), flag=wx.EXPAND|wx.ALL) wx.EVT_BUTTON(self, _brw_btn.GetId(), self.OnBrowse) fgs.Add(wx.StaticText(self, -1, 'Open Mode:'), pos=(1,0), flag=wx.EXPAND|wx.ALL) self._append=wx.CheckBox(self, -1, 'Append to existing file') fgs.Add(self._append, pos=(1, 1), flag=wx.EXPAND|wx.ALL) if __debug__: _setstart_btn=wx.Button(self, -1, 'Set Start') wx.EVT_BUTTON(self, _setstart_btn.GetId(), self.OnSetStart) fgs.Add(_setstart_btn, pos=(1, 2), flag=wx.EXPAND|wx.ALL) fgs.Add(wx.StaticText(self, -1, 'Status:'), pos=(2,0), flag=wx.EXPAND|wx.ALL) self._status=wx.StaticText(self, -1, 'None') fgs.Add(self._status, pos=(2,1), flag=wx.EXPAND|wx.ALL) vbs.Add(fgs, 0, wx.EXPAND|wx.ALL, 5) vbs.Add(wx.StaticLine(self), 0, wx.EXPAND|wx.ALL, 5) hbs=wx.BoxSizer(wx.HORIZONTAL) if __debug__: _btn=wx.Button(self, -1, 'View') wx.EVT_BUTTON(self,_btn.GetId(), self.OnView) hbs.Add(_btn, 0, wx.EXPAND|wx.ALL, 5) _btn=wx.Button(self, -1, 'Record') wx.EVT_BUTTON(self, _btn.GetId(), self.OnRecord) hbs.Add(_btn, 0, wx.EXPAND|wx.ALL, 5) if __debug__: _btn=wx.Button(self, -1, 'Play') wx.EVT_BUTTON(self, _btn.GetId(), self.OnPlay) hbs.Add(_btn, 0, wx.EXPAND|wx.ALL, 5) _btn=wx.Button(self, -1, 'Stop') wx.EVT_BUTTON(self, _btn.GetId(), self.OnStop) hbs.Add(_btn, 0, wx.EXPAND|wx.ALL, 5) _btn=wx.Button(self, wx.ID_CANCEL, 'Close') hbs.Add(_btn, 0, wx.EXPAND|wx.ALL, 5) vbs.Add(hbs, 0, wx.EXPAND|wx.ALL, 5) self._update_status() self.SetSizer(vbs) self.SetAutoLayout(True) vbs.Fit(self) def _update_status(self): _stat='None' _fname=None if data_recording.DR_On: _stat='Recording ...' _fname=data_recording.filename() elif data_recording.DR_Play: _stat='Playing back ...' _fname=data_recording.filename() else: _stat='None' self._status.SetLabel(_stat) if _fname: self._file_name.SetValue(_fname) def OnBrowse(self, _): _dlg=wx.FileDialog(self) _dlg.SetPath(self._file_name.GetValue()) with guihelper.WXDialogWrapper(_dlg, True) as (_dlg, retcode): if retcode==wx.ID_OK: self._file_name.SetValue(_dlg.GetPath()) def OnView(self, _): _dr_file=data_recording.DR_Read_File(self._file_name.GetValue()) analyser.Analyser(data=_dr_file.get_string_data()).Show() def OnRecord(self, _): data_recording.record_to_file(self._file_name.GetValue()) self._update_status() def OnPlay(self, _=None): data_recording.playback_from_file(self._file_name.GetValue()) self._update_status() def OnStop(self, _): data_recording.stop() self._update_status() def OnSetStart(self, _): if not data_recording.DR_Play: # not playing back, start playing self.OnPlay() with guihelper.WXDialogWrapper(wx.SingleChoiceDialog(self, 'Select the Starting Point', 'Data Recording Set Start', choices=data_recording.get_headers()), True) as (_dlg, retcode): if retcode==wx.ID_OK: data_recording.set_start(_dlg.GetSelection()) # About Dialog----------------------------------------------------------------- _license="""The BitPim code is under the GNU General Public License as detailed below. Specific permission is granted for this code to be linked to OpenSSL (this is necessary because the OpenSSL license is not GPL-compatible). In addition, as a special exception, the BitPim copyright holders give permission to link the code of this program with the OpenSSL library (or with modified versions of OpenSSL), and distribute linked combinations including the two. You must obey the GNU General Public License in all respects for all of the code used other than OpenSSL. If you modify any files, you may extend this exception to your version of the file, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. Please also note that some code is taken from other projects with a GPL compatible license. This is noted in the specific files. BitPim also uses several other components with GPL compatible licenses. The online help details those components, credits the authors and details the licenses. --------------------------------------------------------------------- This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Also see the BitPim Help for more details """ _copyright="""(C) 2003-2007 The code in BitPim is copyright by several people. Please note the comments at the top of each file, as well as version control history. """ _description=""" BitPim is a program that allows you to view and manipulate data on many CDMA phones from LG, Samsung, Sanyo and other manufacturers. This includes the PhoneBook, Calendar, WallPapers, RingTones (functionality varies by phone) and the Filesystem for most Qualcomm CDMA chipset based phones. To see when phones will be supported, which ones are already supported and which features are supported, see online help. [%s] """ def _component_string(): """return a CSV string of various software components being used by BitPim""" _res=[] _str=[] # Python version _str.append('Python %s'%sys.version.split()[0]) _str.append('wxPython %s'%wx.version()) _res.append(', '.join(_str)) _str=[] _str.append('APSW %s'%apsw.apswversion()) _str.append('SQLITE %s'%apsw.sqlitelibversion()) _res.append(', '.join(_str)) _str=[] _str.append('serial %s'%serial.VERSION) # pywin32 version try: _pywin32ver=file(os.path.join(sys.prefix,'lib','site-packages', 'pywin32.version.txt'), 'rt').read()[:-1] _str.append('pywin32 %s'%_pywin32ver) except: pass _res.append(', '.join(_str)) return '\n'.join(_res) def show_about_dlg(parent): global _license, _copyright, _description info = wx.AboutDialogInfo() info.Name = "BitPim" info.Version = version.versionstring+" - "+version.vendor info.Copyright=_copyright info.Description = _description%_component_string() info.WebSite = ("http://www.bitpim.org", "www.bitpim.org") info.Developers = [ "Joe Pham", "Stephen Wood", "Sean Burke", "Nathan Hjelm", "and others ..."] info.License = _license # Then we call wx.AboutBox giving it that info object wx.AboutBox(info) # Generic Print Dialog---------------------------------------------------------- class PrintDialog(wx.Dialog): """A generic print dialog from which other can subclass for their own use""" _template_filename=None _style_filename=None def __init__(self, widget, mainwindow, config, title): super(PrintDialog, self).__init__(mainwindow, -1, title) self._widget=widget self._xcp=self._html=self._dns=None self._tmp_file=common.gettempfilename("htm") # main box sizer vbs=wx.BoxSizer(wx.VERTICAL) # create the main contents of the dialog self._create_contents(vbs) # create the separator & default buttons self._create_buttons(vbs) # all done self.SetSizer(vbs) self.SetAutoLayout(True) vbs.Fit(self) def _create_contents(self, vbs): # subclass must implement raise NotImplementedError def _create_buttons(self, vbs): vbs.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5) hbs=wx.BoxSizer(wx.HORIZONTAL) for b in ((None, wx.ID_PRINT, self.OnPrint), ('Page Setup', wx.ID_PAGE_SETUP, self.OnPageSetup), (None, wx.ID_PREVIEW, self.OnPrintPreview), ('Save as HTML', -1, self.OnSaveHTML), (None, wx.ID_CLOSE, self.OnClose)): if b[0]: btn=wx.Button(self, b[1], b[0]) else: btn=wx.Button(self, b[1]) hbs.Add(btn, 0, wx.ALIGN_CENTER|wx.ALL, 5) if b[2] is not None: wx.EVT_BUTTON(self, btn.GetId(), b[2]) vbs.Add(hbs, 0, wx.ALIGN_CENTRE|wx.EXPAND|wx.ALL, 5) def _init_print_data(self): # Initialize the dns dict with empty data self._dns={ 'common': __import__('common') } self._dns['guihelper']=__import__('guihelper') self._dns['pagebreakstr']='
' def _get_print_data(self): raise NotImplementedError def _gen_print_data(self): # generate the html page of the print data if self._xcp is None: # build the whole document template self._xcp=xyaptu.xcopier(None) tmpl=file(guihelper.getresourcefile(self._template_filename), 'rt').read() self._xcp.setupxcopy(tmpl) if self._dns is None: self._init_print_data() self._get_print_data() self._html=self._xcp.xcopywithdns(self._dns.copy()) # apply styles sd={'styles': {}, '__builtins__': __builtins__ } try: if self._style_filename: execfile(guihelper.getresourcefile(self._style_filename), sd, sd) except UnicodeError: common.unicode_execfile(guihelper.getresourcefile(self._style_filename), sd, sd) try: self._html=bphtml.applyhtmlstyles(self._html, sd['styles']) except: if __debug__: file('debug.html', 'wt').write(self._html) raise # standard handlers def OnPrint(self, _): self._gen_print_data() wx.GetApp().htmlprinter.PrintText(self._html) def OnPageSetup(self, _): wx.GetApp().htmlprinter.PageSetup() def OnPrintPreview(self, _): self._gen_print_data() wx.GetApp().htmlprinter.PreviewText(self._html) def OnSaveHTML(self, _): with guihelper.WXDialogWrapper(wx.FileDialog(self, wildcard="Web Page (*.htm;*.html)|*.htm;*html", style=wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT), True) as (_dlg, retcode): if retcode==wx.ID_OK: self._gen_print_data() file(_dlg.GetPath(), 'wt').write(self._html) def OnClose(self, _): try: # remove the temp file, ignore exception if file does not exist os.remove(self._tmp_file) except: pass self.EndModal(wx.ID_CANCEL) # SMS Print Dialog-------------------------------------------------------------- class SMSPrintDialog(PrintDialog): _template_filename='sms.xy' _title='SMS Print' _item_name='SMS Messages' def __init__(self, smswidget, mainwindow, config): self._sel_data=smswidget.get_selected_data() self._data=smswidget.get_data() super(SMSPrintDialog, self).__init__(smswidget, mainwindow, config, self._title) def _create_contents(self, vbs): rbs=wx.StaticBoxSizer(wx.StaticBox(self, -1, self._item_name), wx.VERTICAL) lsel=len(self._sel_data) lall=len(self._data) self.rows_selected=wx.RadioButton(self, wx.NewId(), "Selected (%d)" % (lsel,), style=wx.RB_GROUP) self.rows_all=wx.RadioButton(self, wx.NewId(), "All (%d)" % (lall,)) if lsel==0: self.rows_selected.Enable(False) self.rows_selected.SetValue(0) self.rows_all.SetValue(1) rbs.Add(self.rows_selected, 0, wx.EXPAND|wx.ALL, 2) rbs.Add(self.rows_all, 0, wx.EXPAND|wx.ALL, 2) vbs.Add(rbs, 0, wx.EXPAND|wx.ALL, 5) def _init_print_data(self): # Initialize the dns dict with empty data super(SMSPrintDialog, self)._init_print_data() self._dns['items']={} self._dns['keys']=[] def _get_print_data(self): if self.rows_all.GetValue(): _items=self._data _keys=self._widget.get_keys() else: _items=self._sel_data _keys=self._widget.get_selected_keys() if not _keys: _keys=_items.keys() self._dns['items']=_items self._dns['keys']=_keys # Memo Print Dialog------------------------------------------------------------- class MemoPrintDialog(SMSPrintDialog): _template_filename='memo.xy' _title='Memo Print' _item_name='Memo Entries' bitpim-1.0.7+dfsg1/src/rangedslider.py0000644001616600161660000001654310217742617015773 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: rangedslider.py 2249 2005-03-22 07:13:19Z rogerb $ "A ranged slider that has a current position and a start/end" import wx import wx.lib.newevent import guihelper PosChangedEvent, EVT_POS_CHANGED = wx.lib.newevent.NewCommandEvent() ChangingEvent, EVT_CHANGING = wx.lib.newevent.NewCommandEvent() class RangedSlider(wx.PyWindow): THICKNESS=7 def __init__(self, parent, id=-1, size=wx.DefaultSize, pos=wx.DefaultPosition, style=0): wx.PyWindow.__init__(self, parent, id=id, size=size, pos=pos, style=style|wx.FULL_REPAINT_ON_RESIZE) self.bg=wx.Brush(parent.GetBackgroundColour()) self.imgcurrent=guihelper.getimage("ranged-slider-current") self.bmpcurrent=self.imgcurrent.ConvertToBitmap() self.imgstart=guihelper.getimage("ranged-slider-start") self.bmpstart=self.imgstart.ConvertToBitmap() self.imgend=guihelper.getimage("ranged-slider-end") self.bmpend=self.imgend.ConvertToBitmap() # first coord is added to desired x to get where to draw x # second is added to centre of line to get where to draw y self.hotcurrent=-self.imgcurrent.GetWidth()/2, -self.imgcurrent.GetHeight()+2 self.hotstart=-13, -20 self.hotend=-7,-20 self.pickers=(self.imgcurrent, self.bmpcurrent,self.hotcurrent), \ (self.imgstart, self.bmpstart, self.hotstart), \ (self.imgend, self.bmpend, self.hotend) self.padleft=2+max([0]+[-h[0] for _,_,h in self.pickers]) self.padright=2+max([0]+[i.GetWidth()+h[0] for i,_,h in self.pickers]) assert self.padleft>=2 assert self.padright>=2 self.padleft=max(self.padleft,self.padright) self.padright=self.padleft self.poscurrent=0.5 self.posstart=0.0 self.posend=1.0 self._bufbmp=None self.pen=wx.Pen(wx.NamedColour("LIGHTSTEELBLUE3"), self.THICKNESS) self.pen.SetCap(wx.CAP_BUTT) self.clickinfo=None wx.EVT_ERASE_BACKGROUND(self, lambda evt: None) wx.EVT_PAINT(self, self.OnPaint) wx.EVT_LEFT_DOWN(self, self.OnLeftDown) wx.EVT_LEFT_UP(self, self.OnLeftUp) wx.EVT_MOTION(self, self.OnMotion) def DoGetBestSize(self): sz=self.GetClientSize() halfheight=self.THICKNESS for i,_,h in self.pickers: halfheight=max(halfheight, abs(h[1]), abs(h[1]+i.GetHeight())) return min(100,sz.width),halfheight*2 def OnPaint(self, _): sz=self.GetClientSize() if self._bufbmp is None or sz.width>self._bufbmp.GetWidth() or sz.height>self._bufbmp.GetHeight(): self._bufbmp=wx.EmptyBitmap((sz.width+64)&~8, (sz.height+64)&~8) dc=wx.BufferedPaintDC(self, self._bufbmp, style=wx.BUFFER_VIRTUAL_AREA) dc.SetBackground(self.bg) dc.Clear() dc.SetPen(self.pen) y=sz.height/2 dc.DrawLine(self.padleft,y, sz.width-self.padright, y) dc.SetPen(wx.NullPen) start=self.padleft width=sz.width-self.padleft-self.padright dc.DrawBitmap(self.bmpcurrent, start+int(width*self.poscurrent)+self.hotcurrent[0], y+self.hotcurrent[1], True) dc.DrawBitmap(self.bmpstart, start+int(width*self.posstart)+self.hotstart[0], y+self.hotstart[1], True) dc.DrawBitmap(self.bmpend, start+int(width*self.posend)+self.hotend[0], y+self.hotend[1], True) def _isinimage(self, image, relx, rely): "Works out if click is in image, and not transparent area of image" if image.HasAlpha(): return image.GetAlpha(relx, rely)>0 if image.HasMask(): return not (image.GetRed(relx, rely)==image.GetMaskRed() and image.GetGreen(relx, rely)==image.GetMaskGreen() and image.GetBlue(relx, rely)==image.GetMaskBlue()) # we have no way of telling, so say yes return True def OnLeftDown(self, evt): x,y=evt.GetX(), evt.GetY() sz=self.GetClientSize() liney=sz.height/2 start=self.padleft width=sz.width-self.padleft-self.padright # now try to work out what was clicked on xx,yy=start+int(width*self.poscurrent)+self.hotcurrent[0], liney+self.hotcurrent[1] if xx<=x1: newpos=1.0 if self.clickinfo[0]==0: self.poscurrent=newpos elif self.clickinfo[0]==1: self.posstart=min(newpos,self.posend) elif self.clickinfo[0]==2: self.posend=max(newpos, self.posstart) if newpos!=origpos: wx.PostEvent(self, ChangingEvent(self.GetId())) self.Refresh(False) def OnLeftUp(self, evt): if self.clickinfo is not None and self.clickinfo[0]==0: wx.PostEvent(self, PosChangedEvent(self.GetId(), poscurrent=self.poscurrent)) # main API def GetCurrent(self): return self.poscurrent def SetCurrent(self, pos): assert 0<=pos<=1 self.poscurrent=pos self.Refresh(False) def GetStart(self): return self.posstart def SetStart(self, pos): assert 0<=pos<=1 self.posstart=pos self.Refresh(False) def GetEnd(self): return self.posend def SetEnd(self, pos): assert 0<=pos<=1 self.posend=pos self.Refresh(False) if __name__=='__main__': app=wx.PySimpleApp() import sys import common sys.excepthook=common.formatexceptioneh f=wx.Frame(None, title="Ranged Slider Tester") rs=RangedSlider(f) f.Show() app.MainLoop() bitpim-1.0.7+dfsg1/src/midifile.py0000644001616600161660000001620110511342314015064 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: midifile.py 3608 2006-10-06 02:51:56Z djpham $ import common module_debug=False class MIDIEvent(object): META_EVENT=0 SYSEX_EVENT=1 SYSEX1_EVENT=2 MIDI_EVENT=3 LAST_MIDI_EVENT=4 type_str=('Meta', 'SYSEX', 'SYSEX cont', 'MIDI', 'Last MIDI') def __init__(self, file, offset, last_cmd=None): self.__f=file self.__start=self.__ofs=offset self.__time_delta=self.__get_var_len() b=self.__get_int() if b==0xff: # meta event self.__get_meta_event() elif b==0xf0 or b==0xf7: # sysex event self.__get_sysex_event(b) else: # MIDI Channel event self.__get_midi_event(b, last_cmd) self.__total_len=self.__ofs-self.__start def __get_int(self): i=int(self.__f.GetByte(self.__ofs)) self.__ofs+=1 return i def __get_bytes(self, len): data=self.__f.GetBytes(self.__ofs, len) self.__ofs+=len return data def __get_var_len(self): t=0 b=self.__get_int() while (b&0x80): t=(t<<7)|(b&0x7f) b=self.__get_int() return (t<<7)|(b&0x7f) def __get_meta_event(self): self.__type=self.META_EVENT self.__cmd=self.__get_int() self.__len=self.__get_var_len() if self.__len: self.__param1=self.__get_bytes(self.__len) else: self.__param1=None self.__param2=None def __get_sysex_event(self, cmd): if cmd==0xf0: self.__type=self.SYSEX_EVENT else: self.__type=self.SYSEX1_EVENT self.__cmd=cmd self.__len=self.__get_var_len() if self.__len: self.__param1=self.__get_bytes(self.__len) else: self.__param1=None self.__param2=None def __get_midi_event(self, cmd, last_cmd): if cmd&0x80: # not a running command i=cmd self.__type=self.MIDI_EVENT self.__param1=self.__get_int() else: i=last_cmd self.__type=self.LAST_MIDI_EVENT self.__param1=cmd self.__cmd=(i&0xf0)>>4 self.__midi_channel=i&0x0f if self.__cmd==0x0c or self.__cmd==0x0d: self.__len=1 self.__param2=None else: self.__len=2 self.__param2=self.__get_int() def __get_type(self): return self.__type type=property(fget=__get_type) def __get_time_delta(self): return self.__time_delta time_delta=property(fget=__get_time_delta) def __get_total_len(self): return self.__total_len total_len=property(fget=__get_total_len) def __get_cmd(self): return self.__cmd cmd=property(fget=__get_cmd) def __get_midi_channel(self): return self.__midi_channel midi_channel=property(fget=__get_midi_channel) def __get_param_len(self): return self.__len param_len=property(fget=__get_param_len) def __get_params(self): return self.__param1, self.__param2 params=property(fget=__get_params) def __str__(self): if self.type==self.MIDI_EVENT or \ self.type==self.LAST_MIDI_EVENT: return '0x%04x: %s cmd: 0x%x, Channel: %d, Len: %d'%\ (self.time_delta, self.type_str[self.type], self.cmd, self.midi_channel, self.param_len) else: return '0x%04x: %s cmd: 0x%x, Len: %d'%\ (self.time_delta, self.type_str[self.type], self.cmd, self.param_len) class MIDITrack(object): def __init__(self, file, offset): self.__f=file self.__ofs=offset if module_debug: print 'New Track @ ofs:', offset if self.__f.GetBytes(self.__ofs, 4)!='MTrk': raise TypeError, 'not an MIDI track' self.__len=self.__f.GetMSBUint32(self.__ofs+4) ofs=self.__ofs+8 ofs_end=ofs+self.__len last_cmd=None self.__time_delta=0 self.__mpqn=None while ofs ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: comm_notify.py 4219 2007-05-09 02:15:50Z djpham $ """Handle notification of comm ports availability using DNOTIFY""" import fcntl import os import signal import sys import wx bpCOMM_NOTIFICATION_EVENT = wx.NewEventType() COMM_NOTIFICATION_EVENT = wx.PyEventBinder(bpCOMM_NOTIFICATION_EVENT, 0) default_port=5002 class CommNotificationEvent(wx.PyEvent): add=0 remove=1 def __init__(self): super(CommNotificationEvent, self).__init__() self.SetEventType=bpCOMM_NOTIFICATION_EVENT self.type=None self.comm=None class CommNotification(object): def __init__(self, mainwindow): self.mw=mainwindow self.evt=CommNotificationEvent() def add(self, comm): # a new comm has just been added self.evt.type=CommNotificationEvent.add if comm.startswith('/proc/bus/usb/') or \ comm.startswith('/dev/bus/usb/'): # this is a Linux hotplug USB port, which may have many interfaces. # can't figure which one so scan for all ports. self.evt.comm=None else: self.evt.comm=comm self.mw.OnCommNotification(self.evt) return True def remove(self, comm): # a new comm has just been deleted if comm.startswith('/proc/bus/usb/') or \ comm.startswith('/dev/bus/usb/'): # This is a Linux hotplug USB port, just ignore it return False self.evt.type=CommNotificationEvent.remove self.evt.comm=comm self.mw.OnCommNotification(self.evt) return True NotificationPath='/var/bitpim' NotificationFile='/var/bitpim/dnotify.log' def _process_notification(commobj): # read the log file & process its content # expecting a line: add|del global NotificationFile try: _s=file(NotificationFile, 'rt').read() _tkns=_s.split(' ') if len(_tkns)==2: if _tkns[0]=='add': commobj.add(_tkns[1]) else: commobj.remove(_tkns[1]) except: if __debug__: raise _global_fd=None _global_obj=None def _sigio_handler(*args, **kwargs): global _global_obj if _global_obj: wx.CallAfter(_process_notification, _global_obj) def run_server(mainwindow): global NotificationPath, _global_fd, _global_obj _global_obj=CommNotification(mainwindow) try: _global_fd=os.open(NotificationPath, os.O_RDONLY) except OSError: # Something's wrong with the dir, bail mainwindow.log('Failed to open dir '+NotificationPath) return False except: if __debug__: raise return False fcntl.fcntl(_global_fd, fcntl.F_NOTIFY, fcntl.DN_MODIFY|fcntl.DN_CREATE|fcntl.DN_MULTISHOT) mainwindow.log('USB Comm Watch started') return True def start_server(mainwindow): signal.signal(signal.SIGIO, _sigio_handler) return run_server(mainwindow) bitpim-1.0.7+dfsg1/src/t9editor.py0000644001616600161660000002554510664710522015071 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: t9editor.py 4379 2007-08-28 03:06:58Z djpham $ """ Code to handle T9 Editor The format of the T9 Words data is standardized. It is a list of dict that has the following standard fields: "words": an ordered list of dicts, each dict has the following fields: "word": string value of the actual T9 Word. To implement T9 Editor feature for your phone, do the following: 1. Add 2 entries into Profile._supportedsyncs: ... ('t9_udb', 'read', 'OVERWRITE'), ('t9_udb', 'write', 'OVERWRITE'), 2. Implement the following 2 methods in your Phone class: def gett9db(self, result) def savet9db(self, result, _merge) The result dict should contain: result[t9editor.dict_key]= See module phones.com_lgxv8500 for an example implementation. """ # wx Modules from __future__ import with_statement import wx import wx.gizmos as gizmos # BitPim modules import database import guihelper import helpids import widgets # module constants-------------------------------------------------------------- dict_key='T9 Data' #------------------------------------------------------------------------------- class T9WordsDataObject(database.basedataobject): _knownproperties=[] _knownlistproperties=database.basedataobject._knownlistproperties.copy() _knownlistproperties.update( { 'words': ['word'] }) def __init__(self, data=None): if data and isinstance(data, dict): self.update(data) t9wordsdataobjectfactory=database.dataobjectfactory(T9WordsDataObject) #------------------------------------------------------------------------------- class T9WordsList(object): _t9_dict={'0': '0', '1': '1', 'a': '2', 'b': '2', 'c': '2', '2': '2', 'd': '3', 'e': '3', 'f': '3', '3': '3', 'g': '4', 'h': '4', 'i': '4', '4': '4', 'j': '5', 'k': '5', 'l': '5', '5': '5', 'm': '6', 'n': '6', 'o': '6', '6': '6', 'p': '7', 'q': '7', 'r': '7', 's': '7', '7': '7', 't': '8', 'u': '8', 'v': '8', '8': '8', 'w': '9', 'x': '9', 'y': '9', 'z': '9', '9': '9', } def __init__(self): self._data={} def get(self): return copy.deepcopy(self._data, {}) def set(self, d): self._data={} self._data.update(d) def _set_or_del(self, key, v, v_list=[]): if v is None or v in v_list: if self._data.has_key(key): del self._data[key] else: self._data[key]=v def _get_keys(self): # return a list of available keys in this list _keys=[x for x,y in self._data.items() if y] _keys.sort() return _keys keys=property(fget=_get_keys) def _keyof(self, word): # return the T9 key of this word return ''.join([self._t9_dict.get(x.lower(), '1') for x in word]) def get_words(self, key=None): # return a list of words of group 'key', # if key is None, return the whole list _res=[] if key is None: _keys=self.keys _keys.sort() for _k in _keys: _res+=self.get_words(_k) else: return self._data.get(key, []) def del_word(self, word): # delete the specified word from the list _key=self._keyof(word) if self._data.has_key(_key): for _idx,_word in enumerate(self._data[_key]): if _word==word: del self._data[_key][_idx] if not self._data[_key]: # empty list del self._data[_key] return def append_word(self, word): # Append this word to our existing list self._data.setdefault(self._keyof(word), []).append(word) def set_words(self, words, key=None): # set the list of words for group 'key' # if key is None, set the whole database if key is None: # set the whole list self._data={} for _word in words: self.append_word(_word) else: _l=[] for _word in words: if self._keyof(_word)==key: _l.append(_word) self._data[key]=_l def clear(self): self._data={} def save(self, db): # save the current list to the database db global dict_key _rec=[] for _,_list in self._data.items(): _rec+=[ { 'word': x } for x in _list ] _dict={ dict_key: { 'words': _rec } } database.ensurerecordtype(_dict, t9wordsdataobjectfactory) db.savemajordict(dict_key, _dict) def load(self, db): # load from database db into the current list global dict_key _dict=db.getmajordictvalues(dict_key, t9wordsdataobjectfactory) self.clear() for _word in _dict.get(dict_key, {}).get('words', []): if _word.get('word', None): self.append_word(_word['word']) #------------------------------------------------------------------------------- class T9EditorWidget(wx.Panel, widgets.BitPimWidget): help_id=helpids.ID_TAB_T9EDITOR def __init__(self, mainwindow, parent): super(T9EditorWidget, self).__init__(parent, -1) self._mw=mainwindow self._t9list=T9WordsList() self.ignoredirty=False self.dirty=False # main box sizer vbs=wx.BoxSizer(wx.VERTICAL) # horizontal sizer for the main contents hbs=wx.BoxSizer(wx.HORIZONTAL) _svbs=wx.StaticBoxSizer(wx.StaticBox(self, -1, 'T9 Keys'), wx.VERTICAL) self._keys_lb=wx.ListBox(self, -1, style=wx.LB_SINGLE|wx.LB_HSCROLL|wx.LB_NEEDED_SB) wx.EVT_LISTBOX(self, self._keys_lb.GetId(), self._OnSelectKey) _svbs.Add(self._keys_lb, 1, wx.EXPAND|wx.ALL, 5) hbs.Add(_svbs, 1, wx.EXPAND|wx.ALL, 5) self._words_w=gizmos.EditableListBox(self, -1, 'T9 Words:', style=0) self._words_lb=self._words_w.GetListCtrl() wx.EVT_BUTTON(self._words_w, self._words_w.GetUpButton().GetId(), self._OnUpDown) wx.EVT_BUTTON(self._words_w, self._words_w.GetDownButton().GetId(), self._OnUpDown) hbs.Add(self._words_w, 3, wx.EXPAND|wx.ALL, 5) vbs.Add(hbs, 1, wx.EXPAND|wx.ALL, 5) vbs.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5) hbs=wx.BoxSizer(wx.HORIZONTAL) self._save_btn=wx.Button(self, wx.ID_SAVE) hbs.Add(self._save_btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5) hbs.Add(wx.Button(self, wx.ID_HELP), 0, wx.ALIGN_CENTRE|wx.ALL, 5) self._revert_btn=wx.Button(self, wx.ID_REVERT_TO_SAVED) hbs.Add(self._revert_btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5) wx.EVT_BUTTON(self, wx.ID_SAVE, self._OnSave) wx.EVT_BUTTON(self, wx.ID_REVERT_TO_SAVED, self._OnRevert) wx.EVT_BUTTON(self, wx.ID_HELP, lambda _: wx.GetApp().displayhelpid(self.help_id)) vbs.Add(hbs, 0, wx.ALIGN_CENTRE|wx.ALL, 5) self.SetSizer(vbs) self.SetAutoLayout(True) vbs.Fit(self) # populate data self._populate() # turn on dirty flag self.setdirty(False) def setdirty(self, val): if self.ignoredirty: return self.dirty=val self._save_btn.Enable(self.dirty) self._revert_btn.Enable(self.dirty) def _populate_each(self): # populate the word list based on the selected key _sel=self._keys_lb.GetStringSelection() self._words_lb.DeleteAllItems() if _sel: self._words_w.SetStrings(self._t9list.get_words(_sel)) def _populate(self): # clear both lists self._keys_lb.Clear() self._words_lb.DeleteAllItems() # populate the keys list for _key in self._t9list.keys: self._keys_lb.Append(_key) def populate(self, dict): global dict_key self._t9list=dict.get(dict_key, T9WordsList()) self._populate() def populatefs(self, dict): global dict_key self._t9list=dict.get(dict_key, T9WordsList()) self._t9list.save(self._mw.database) self._populate() return dict def getfromfs(self, result): self._t9list.load(self._mw.database) global dict_key result[dict_key]=self._t9list return result # called from various widget update callbacks def _re_order(self): # update the order of the list self._t9list.set_words(self._words_w.GetStrings(), self._keys_lb.GetStringSelection()) def _OnUpDown(self, evt): wx.CallAfter(self._re_order) self.OnMakeDirty() evt.Skip() def OnMakeDirty(self, _=None): """A public function you can call that will set the dirty flag""" if self.dirty or self.ignoredirty: # already dirty, no need to make it worse return self.setdirty(True) def OnDirty(self, _): self.setdirty(True) def _OnSave(self, _): self._t9list.save(self._mw.database) self.setdirty(False) def _OnRevert(self, _): self._t9list.load(self._mw.database) self._populate() self.setdirty(False) def _OnSelectKey(self, _): self._populate_each() def CanAdd(self): return True def OnAdd(self, _): with guihelper.WXDialogWrapper(wx.TextEntryDialog(self, 'Enter a new word:', 'T9 User Word'), True) as (_dlg, _retcode): if _retcode==wx.ID_OK: if _dlg.GetValue(): self.OnMakeDirty() self._t9list.append_word(_dlg.GetValue()) self._populate() def CanDelete(self): return self._words_lb.GetSelectedItemCount() def OnDelete(self, _): _idx=self._words_lb.GetNextItem(-1, state=wx.LIST_STATE_SELECTED) if _idx==-1: return self._t9list.del_word(self._words_w.GetStrings()[_idx]) self._words_lb.DeleteItem(_idx) # Check if this key is empty, if it is, delete it from the keys LB if self._words_lb.GetItemCount()<2: # this key is empty, delete it as well _idx=self._keys_lb.GetSelection() if _idx!=wx.NOT_FOUND: self._keys_lb.Delete(_idx) self.OnMakeDirty() wx.CallAfter(self._re_order) def getdata(self, result): global dict_key result[dict_key]=self._t9list return result bitpim-1.0.7+dfsg1/src/helpids.py0000644001616600161660000001065611317561520014751 0ustar amuamu# Automatically generated file # Generated by Id: genids.py 271 2003-09-01 21:04:18Z rogerb # DO NOT EDIT '''IDs that map from constants to sections within the help @Note: This is an autogenerated file. See my source for details. ''' ID_BITFLING="bitfling.htm" ID_BREW_ACCESS_DENIED="errors-access-blocked.htm" ID_COMMSDATAERROR="errors-datacomms.htm" ID_COMMSETTINGS_DIALOG="ref-commsettingsdialog.htm" ID_DEVICE_NEEDS_ATTENTION="errors-deviceneedsattention.htm" ID_DLG_AUDIOCONVERT="dialog-audioconversion.htm" ID_DLG_CALENDAR_IMPORT="dialog-calendarimport.htm" ID_DLG_CALENDAR_MERGE="dialog-calendarmerge.htm" ID_DLG_IMAGEPREVIEW="dialog-imagepreview.htm" ID_DLG_PBMERGEENTRIES="dialog-mergingphonebookentries.htm" ID_EDITING_CALENDAR_EVENTS="editingcalendarevents.htm" ID_EXCEPTION_DIALOG="errors-exception.htm" ID_FAILED_TO_AUTODETECT_PORT="errors-failedtoautodetectport.htm" ID_FAILED_TO_OPEN_DEVICE="errors-failedtoopendevice.htm" ID_FAQ="faq.htm" ID_GET_PHONE_DATA="dialog-getphonedata.htm" ID_HELPSUPPORT="support.htm" ID_HEXVIEW_DIALOG="ref-hexviewdialog.htm" ID_HOWTOS="howtos.htm" ID_HOWTOS_CALENDAR_IMPORT="howtos-calendarimport.htm" ID_INVALID_FILE_MESSAGE="error-invalidimagefile.htm" ID_LG_INTEGRITYCHECKFAILED="phones-lg-integritycheckfailed.htm" ID_MIME_EXEC_FAILED="errors-mimeexecfailed.htm" ID_NEWDB="dialog-newdb.htm" ID_NOT_A_ZIPFILE="error-zipfilerequired.htm" ID_NO_MIME_OPEN="errors-nomimeopencommand.htm" ID_NO_PVCONV="error-nopvconv.htm" ID_PHONEBOOKBUSY="error-phonebookbusy.htm" ID_PHONE_LGAX8600="phone-lgax8600.htm" ID_PHONE_LGC2000="phone-lgc2000.htm" ID_PHONE_LGG4015="phone-lgg4015.htm" ID_PHONE_LGLX570="phone-lglx570.htm" ID_PHONE_LGPM225="phone-lgpm225.htm" ID_PHONE_LGUX5000="phones-lgux5000.htm" ID_PHONE_LGVX10000="phone-lgvx10000.htm" ID_PHONE_LGVX11000="phone-lgvx11000.htm" ID_PHONE_LGVX3200="phone-lgvx3200.htm" ID_PHONE_LGVX4400="phone-lgvx4400.htm" ID_PHONE_LGVX4500="phone-lgvx4500.htm" ID_PHONE_LGVX4650="phone-lgvx4650.htm" ID_PHONE_LGVX5200="phone-lgvx5200.htm" ID_PHONE_LGVX5300="phone-lgvx5300.htm" ID_PHONE_LGVX6000="phone-lgvx6000.htm" ID_PHONE_LGVX6100="phone-lgvx6100.htm" ID_PHONE_LGVX7000="phone-lgvx7000.htm" ID_PHONE_LGVX8000="phone-lgvx8000.htm" ID_PHONE_LGVX8100="phone-lgvx8100.htm" ID_PHONE_LGVX8300="phone-lgvx8300.htm" ID_PHONE_LGVX8500="phone-lgvx8500.htm" ID_PHONE_LGVX8560="phone-lgvx8560.htm" ID_PHONE_LGVX8600="phone-lgvx8600.htm" ID_PHONE_LGVX8610="phone-lgvx8610.htm" ID_PHONE_LGVX8700="phone-lgvx8700.htm" ID_PHONE_LGVX8800="phone-lgvx8800.htm" ID_PHONE_LGVX9100="phone-lgvx9100.htm" ID_PHONE_LGVX9200="phone-lgvx9200.htm" ID_PHONE_LGVX9600="phone-lgvx9600.htm" ID_PHONE_LGVX9700="phone-lgvx9700.htm" ID_PHONE_LGVX9800="phone-lgvx9800.htm" ID_PHONE_LGVX9900="phone-lgvx9900.htm" ID_PHONE_MOTOE815="phone-motoe815.htm" ID_PHONE_MOTOE815M="phone-motoe815m.htm" ID_PHONE_MOTOK1M="phone-motok1m.htm" ID_PHONE_MOTOV325="phone-motov325.htm" ID_PHONE_MOTOV325M="phone-motov325m.htm" ID_PHONE_MOTOV3C="phone-motov3c.htm" ID_PHONE_MOTOV3CM="phone-motov3cm.htm" ID_PHONE_MOTOV3M="phone-motov3m.htm" ID_PHONE_MOTOV3MM="phone-motov3mm.htm" ID_PHONE_MOTOV710="phone-motov710.htm" ID_PHONE_MOTOV710M="phone-motov710m.htm" ID_PHONE_SAMSUNGOTHERS="phones-samsung.htm" ID_PHONE_SAMSUNGSCHA870="phone-samsungscha870.htm" ID_PHONE_SAMSUNGSCHA930="phone-samsungscha930.htm" ID_PHONE_SAMSUNGSCHA950="phone-samsungscha950.htm" ID_PHONE_SAMSUNGSCHU470="phone-samsungschu470.htm" ID_PHONE_SAMSUNGSCHU740="phone-samsungschu740.htm" ID_PHONE_SAMSUNGSCHU750="phone-samsungschu750.htm" ID_PHONE_SAMSUNGSPHM300="phone-samsungsphm300.htm" ID_PHONE_SANYOOTHERS="phones-sanyo.htm" ID_PHONE_SANYOSCP6600="phones-sanyo-scp6600.htm" ID_PHONE_TOSHIBAVM4050="phone-toshiba_vm4050.htm" ID_RESTOREDIALOG="dialog-restore.htm" ID_SEND_PHONE_DATA="dialog-sendphonedata.htm" ID_SETTINGS_DIALOG="ref-settings.htm" ID_TAB_CALENDAR="tab-calendar.htm" ID_TAB_CALLHISTORY="tab-callhistory.htm" ID_TAB_FILESYSTEM="tab-filesystem.htm" ID_TAB_LOG="tab-log.htm" ID_TAB_MEDIA="tab-media.htm" ID_TAB_MEMO="tab-memo.htm" ID_TAB_PHONEBOOK="tab-phonebook.htm" ID_TAB_PLAYLIST="tab-playlist.htm" ID_TAB_PROTOCOLLOG="tab-protocollog.htm" ID_TAB_SMS="tab-sms.htm" ID_TAB_T9EDITOR="tab-t9editor.htm" ID_TAB_TODAY="tab-today.htm" ID_TAB_TODO="tab-todo.htm" ID_TOUR="tour-master.htm" ID_TROUBLEREPORT="dialog-troublereport.htm" ID_UPGRADING="upgrading.htm" ID_VERSION_HISTORY="versionhistory.htm" ID_WELCOME="welcome.htm" ID_ZIPFILE_CORRUPTED="errors-zipfilecorrupted.htm" Table_of_Contents="rootcontents.htm" bitpim-1.0.7+dfsg1/src/bptime.py0000644001616600161660000001346311321251753014577 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: bptime.py 4777 2010-01-07 03:24:27Z djpham $ """ Module to handle BITPIM date & time """ import calendar import datetime import time timedelta=datetime.timedelta class BPTime(object): def __init__(self, v=None): self._date=self._time=None # I guess this is how python handles overloading ctors if isinstance(v, (str, unicode)): self.set_iso_str(v) elif isinstance(v, (tuple, list)): self.set(v) elif isinstance(v, datetime.date): self._date=v def _get_date(self): return self._date date=property(fget=_get_date) def _get_time(self): return self._time time=property(fget=_get_time) def __sub__(self, rhs): if isinstance(rhs, BPTime): # return the delta between 2 dates return datetime.datetime(*self.get())-datetime.datetime(*rhs.get()) elif isinstance(rhs, (int, timedelta)): # return the new date based on delta time _delta=rhs if isinstance(rhs, timedelta) else \ timedelta(seconds=rhs) dt=datetime.datetime(*self.get())-_delta return BPTime((dt.year, dt.month, dt.day, dt.hour, dt.minute)) else: raise TypeError def __add__(self, rhs): if isinstance(rhs, int): dt=datetime.datetime(*self.get())+datetime.timedelta(seconds=rhs) elif isinstance(rhs, datetime.timedelta): dt=datetime.datetime(*self.get())+rhs else: raise TypeError return BPTime((dt.year, dt.month, dt.day, dt.hour, dt.minute)) def __eq__(self, rhs): if isinstance(rhs, BPTime): return self.date==rhs.date return False def __ne__(self, rhs): if isinstance(rhs, BPTime): return self.date!=rhs.date return False def __lt__(self, rhs): if isinstance(rhs, BPTime): return self.daterhs.date return False def __ge__(self, rhs): if isinstance(rhs, BPTime): return self.date>=rhs.date return False def _utc_to_local(self, offset_str=None): # convert from utc time to local time if self._date is None or self._time is None: return gmt=calendar.timegm((self._date.year, self._date.month, self._date.day, self._time.hour, self._time.minute, 0)) if offset_str is not None: # need to apply offset offset_sec=int(offset_str[1:3])*3600.0+int(offset_str[3:5])*60.0 if offset_str[0]=='-': gmt+=offset_sec else: gmt-=offset_sec dt=datetime.datetime.fromtimestamp(gmt) self._date=dt.date() self._time=dt.time() def set_iso_str(self, v): # set the date/time according to the ISO string # acceptable formats: # YYYYMMDD, YYYYMMDDThhmm, YYYYMMDDThhmmss, YYYYMMDDThhmmssZ, # YYYYMMDDThhmmss+hhmm, YYYYMMDDThhmmss-hhmm v=str(v) len_v=len(v) if len_v<8: # not long enough even for the date return # date componebt self._date=datetime.date(int(v[:4]), int(v[4:6]), int(v[6:8])) self._time=None if len_v>12: # time component specified self._time=datetime.time(hour=int(v[9:11]), minute=int(v[11:13])) # check if timezone info is specified if v[-1]=='Z': # UTC time self._utc_to_local() elif v[-5]=='-' or v[-5]=='+': self._utc_to_local(v[-5:]) def iso_str(self, no_time=False, no_seconds=True): # return an ISO string representation s='' if self._date is not None: s='%04d%02d%02d'%(self._date.year, self._date.month, self._date.day) if self._time is not None and not no_time: s+='T%02d%02d'%(self._time.hour, self._time.minute) if not no_seconds: s+='00' return s def date_str(self): if self._date is None: s='' else: s='%04d-%02d-%02d'%(self._date.year, self._date.month, self._date.day) return s def time_str(self, am_pm=True, default=''): if self._time is None: s=default else: h=self._time.hour if am_pm: if h>11: ampm_str='pm' else: ampm_str='am' if h>12: h-=12 s='%02d:%02d%s'%(h, self._time.minute, ampm_str) else: s='%02d:%02d'%(h, self._time.minute) return s def get(self, default=(0,0,0,0,0)): if self._date is None: t=default[:3] else: t=(self._date.year, self._date.month, self._date.day) if self._time is None: t+=default[3:5] else: t+=(self._time.hour, self._time.minute) return t def set(self, v): self._date=self._time=None if len(v)>2: self._date=datetime.date(*v[:3]) if len(v)>4: self._time=datetime.time(*v[3:]) def mktime(self): # return a float compatible with time.time() return time.mktime(datetime.datetime.combine(self._date, self._time).timetuple()) bitpim-1.0.7+dfsg1/src/setphone_wizard.py0000644001616600161660000003170510556517300016525 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: setphone_wizard.py 3942 2007-01-27 00:37:20Z djpham $ """ Handle setting phone wizard """ # wx modules import wx import wx.wizard as wiz # BitPim modules import common import comscan import phone_detect import phones import usbscan #------------------------------------------------------------------------------- class MyPage(wiz.WizardPageSimple): """My Common Page Setup""" def __init__(self, parent, title, instruction=None): super(MyPage, self).__init__(parent) vs=wx.BoxSizer(wx.VERTICAL) _title = wx.StaticText(self, -1, title) _title.SetFont(wx.Font(18, wx.SWISS, wx.NORMAL, wx.BOLD)) vs.Add(_title, 0, wx.ALIGN_CENTRE|wx.ALL, 5) vs.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.ALL, 5) if instruction: _inst=wx.StaticText(self, -1, instruction) vs.Add(_inst, 0, wx.ALIGN_LEFT|wx.ALL, 5) # your own controls goes here _my_ctrl=self.GetMyControls() if _my_ctrl: vs.Add(_my_ctrl, 1, wx.EXPAND|wx.ALL, 5) self.SetSizer(vs) self.SetAutoLayout(True) vs.Fit(self) def GetMyControls(self): """Build your own controls here, which will be appended to the main sizer. Default to None. """ return None def ok(self): # ready to move to the next page? By default, yes return True def get(self, data): # return data to the main wizard, data is a dict pass def set(self, data): # pass current data to this page pass #------------------------------------------------------------------------------- class CommPortPage(MyPage): detail_fields=( # dict key, label, translator ('name', 'Name', None), ('description', 'Description', None), ('hardwareinstance', 'Hardware Info', None), ('driverprovider', 'Driver Provider', None), ('driverversion', 'Driver Version', None), ('driverdescription', 'Driver Description', None), ('class', 'Class', None), ('active', 'Active', None), ) def __init__(self, parent): super(CommPortPage, self).__init__(parent, 'Communication Port Setting', 'Set the serial port through which BitPim communicates with the phone.') self._ports=[{'name': 'auto', 'description': 'BitPim will try to detect the correct port automatically when accessing your phone'}]+\ [x for x in comscan.comscan()+usbscan.usbscan() \ if x.get('available', False)] self._populate() self._set_max_size() def GetMyControls(self): hs=wx.BoxSizer(wx.HORIZONTAL) _sbs1=wx.StaticBoxSizer(wx.StaticBox(self, -1, 'Available Ports'), wx.VERTICAL) self._ports_lb=wx.ListBox(self, -1, style=wx.LB_SINGLE|wx.LB_HSCROLL|wx.LB_ALWAYS_SB) wx.EVT_LISTBOX(self, self._ports_lb.GetId(), self.OnPortSelected) _sbs1.Add(self._ports_lb, 1, wx.EXPAND|wx.ALL, 5) hs.Add(_sbs1, 0, wx.EXPAND|wx.ALL, 5) _sbs2=wx.StaticBoxSizer(wx.StaticBox(self, -1, 'Port Detail'), wx.VERTICAL) fgs=wx.FlexGridSizer(0, 2, 5, 5) fgs.AddGrowableCol(1) self._w=[] for e in CommPortPage.detail_fields: fgs.Add(wx.StaticText(self, -1, e[1]), 0, wx.EXPAND|wx.ALL, 0) w=wx.StaticText(self, -1, 100*' ') fgs.Add(w, 0, wx.EXPAND|wx.LEFT, 5) self._w.append(w) _sbs2.Add(fgs, 1, wx.EXPAND|wx.ALL, 5) self._port_details_bs=_sbs2 hs.Add(_sbs2, 0, wx.EXPAND|wx.ALL, 5) return hs def ok(self): return self._ports_lb.GetSelection()!=wx.NOT_FOUND def get(self, data): data['com']=self._ports_lb.GetStringSelection() def _set_max_size(self): #go through all the ports and remember the biggest size _max_size=wx.Size(0,0) for e in self._ports: self._populate_each(e) _ms=self._port_details_bs.GetMinSize() _max_size[0]=max(_max_size[0], _ms[0]) _max_size[1]=max(_max_size[1], _ms[1]) self._port_details_bs.SetMinSize(_max_size) for w in self._w: w.SetLabel('') def Clear(self): self._ports_lb.Clear() for w in self._w: w.SetLabel('') def _populate(self): # populate the list box with available ports self.Clear() for e in self._ports: self._ports_lb.Append(e['name']) def _populate_each(self, data): for i,e in enumerate(CommPortPage.detail_fields): v=data.get(e[0], '') self._w[i].SetLabel(str(v)) self._port_details_bs.Layout() def OnPortSelected(self, evt): self._populate_each(self._ports[evt.GetInt()]) #------------------------------------------------------------------------------- class PhoneModelPage(MyPage): def __init__(self, parent): self._setbyme=False super(PhoneModelPage, self).__init__(parent, 'Phone Model Setting', 'Set your phone model.') self._populate() def GetMyControls(self): hs=wx.BoxSizer(wx.HORIZONTAL) _sbs=wx.StaticBoxSizer(wx.StaticBox(self, -1, 'Carriers'), wx.VERTICAL) self._carriers_lb=wx.ListBox(self, -1, style=wx.LB_MULTIPLE|wx.LB_HSCROLL|wx.LB_ALWAYS_SB) wx.EVT_LISTBOX(self, self._carriers_lb.GetId(), self.OnCarriersLB) _sbs.Add(self._carriers_lb, 1, wx.EXPAND|wx.ALL, 5) hs.Add(_sbs, 1, wx.EXPAND|wx.ALL, 5) _sbs=wx.StaticBoxSizer(wx.StaticBox(self, -1, 'Manufacturers'), wx.VERTICAL) self._manuf_lb=wx.ListBox(self, -1, style=wx.LB_SINGLE|wx.LB_HSCROLL|wx.LB_ALWAYS_SB) wx.EVT_LISTBOX(self, self._manuf_lb.GetId(), self.OnCarriersLB) _sbs.Add(self._manuf_lb, 1, wx.EXPAND|wx.ALL, 5) hs.Add(_sbs, 1, wx.EXPAND|wx.ALL, 5) _sbs=wx.StaticBoxSizer(wx.StaticBox(self, -1, 'Models'), wx.VERTICAL) self._models_lb=wx.ListBox(self, -1, style=wx.LB_SINGLE|wx.LB_HSCROLL|wx.LB_ALWAYS_SB) wx.EVT_LISTBOX(self, self._models_lb.GetId(), self.OnModelsLB) _sbs.Add(self._models_lb, 1, wx.EXPAND|wx.ALL, 5) self.help_btn=wx.Button(self, wx.ID_HELP) _sbs.Add(self.help_btn, 0, wx.ALL, 5) wx.EVT_BUTTON(self, self.help_btn.GetId(), self.OnHelp) self.help_btn.Enable(False) hs.Add(_sbs, 1, wx.EXPAND|wx.ALL, 5) return hs def _populate_models(self, carriers=None, brand=None): # populate the list of phones based on the carrier and/or brand self._models_lb.Clear() self.help_btn.Enable(False) _l=phones.phoneslist(brand, None) if carriers: for _c in carriers: _l=[x for x in phones.phoneslist(brand, _c) if x in _l] for e in _l: self._models_lb.Append(e) def _populate_carriers(self, selection=None): self._carriers_lb.Clear() for e in ['All']+phones.phonecarriers: self._carriers_lb.Append(e) if selection is not None: self._carriers_lb.SetSelection(0) def _populate(self): self._manuf_lb.Clear() for e in ['All']+phones.phonemanufacturers: self._manuf_lb.Append(e) self._manuf_lb.SetSelection(0) self._populate_carriers(0) self._populate_models() def ok(self): return self._models_lb.GetSelection()!=wx.NOT_FOUND def get(self, data): data['phone']=self._models_lb.GetStringSelection() def OnCarriersLB(self, evt): if self._setbyme: return _s=self._carriers_lb.GetSelections() if _s==wx.NOT_FOUND: return self._setbyme=True if 0 in _s: _carriers=None else: _carriers=[self._carriers_lb.GetString(x) for x in _s] _s=self._manuf_lb.GetStringSelection() if not _s or _s=='All': _brand=None else: _brand=_s self._populate_models(_carriers, _brand) self._setbyme=False def OnModelsLB(self, evt): if self._setbyme: return self._setbyme=True _model=evt.GetString() self._manuf_lb.SetStringSelection(phones.manufacturer(_model)) self._populate_carriers() for s in phones.carriers(_model): self._carriers_lb.SetStringSelection(s) self.help_btn.Enable(phones.helpid(_model) is not None) self._setbyme=False def OnHelp(self, _): model=self._models_lb.GetStringSelection() if not model: return helpid=phones.helpid(model) if helpid: wx.GetApp().displayhelpid(helpid) #------------------------------------------------------------------------------- class SummaryPage(MyPage): def __init__(self, parent): super(SummaryPage, self).__init__(parent, 'Summary') def GetMyControls(self): vs=wx.BoxSizer(wx.VERTICAL) _sbs=wx.StaticBoxSizer(wx.StaticBox(self, -1, 'User Selection'), wx.VERTICAL) _fgs=wx.FlexGridSizer(0, 2, 5, 5) _fgs.Add(wx.StaticText(self, -1, 'Phone Model:'), 0, wx.EXPAND|wx.ALL, 0) self._model=wx.StaticText(self, -1, '') _fgs.Add(self._model, 0, wx.EXPAND|wx.ALL, 0) _fgs.Add(wx.StaticText(self, -1, 'Port:'), 0, wx.EXPAND|wx.ALL, 0) self._port=wx.StaticText(self, -1, '') _fgs.Add(self._port, 0, wx.EXPAND|wx.ALL, 0) _fgs.Add(wx.StaticText(self, -1, 'Detection Status:'), 0, wx.EXPAND|wx.ALL, 0) self._status=wx.StaticText(self, -1, '') _fgs.Add(self._status, 0, wx.EXPAND|wx.ALL, 0) _sbs.Add(_fgs, 1, wx.EXPAND, 0) vs.Add(_sbs, 0, wx.EXPAND|wx.ALL, 5) self._det_btn=wx.Button(self, -1, 'Detect Phone') vs.Add(self._det_btn, 0, wx.ALL, 5) wx.EVT_BUTTON(self, self._det_btn.GetId(), self.OnDetect) return vs def set(self, data): self._status.SetLabel('') self._model_name=data.get('phone', '') self._model.SetLabel(self._model_name) self._com_port=data.get('com', '') self._port.SetLabel(self._com_port) _module=common.importas(phones.module(self._model_name)) self._det_btn.Enable(bool(self._model_name and \ (hasattr(_module.Phone, 'detectphone') or \ hasattr(_module.Profile, 'phone_model')))) def OnDetect(self, _): if self._com_port=='auto': _port_name=None else: _port_name=str(self._com_port) _res=phone_detect.DetectPhone().detect(using_port=_port_name, using_model=self._model_name) _status='FAILED' if _res and _res.get('phone_name', '')==self._model_name: _status='PASSED' self._status.SetLabel(_status) #------------------------------------------------------------------------------- class SetPhoneWizard(wiz.Wizard): def __init__(self, parent): super(SetPhoneWizard, self).__init__(parent, -1, 'Phone Setting Wizard') self._data={} commport_page=CommPortPage(self) phonemodel_page=PhoneModelPage(self) summary_page=SummaryPage(self) wiz.WizardPageSimple_Chain(phonemodel_page, commport_page) wiz.WizardPageSimple_Chain(commport_page, summary_page) self.first_page=phonemodel_page self.GetPageAreaSizer().Add(phonemodel_page, 1, wx.EXPAND|wx.ALL, 5) wiz.EVT_WIZARD_PAGE_CHANGING(self, self.GetId(), self.OnPageChanging) wiz.EVT_WIZARD_PAGE_CHANGED(self, self.GetId(), self.OnPageChanged) def RunWizard(self, firstPage=None): return super(SetPhoneWizard, self).RunWizard(firstPage or self.first_page) def OnPageChanging(self, evt): pg=evt.GetPage() if not evt.GetDirection() or pg.ok(): pg.get(self._data) else: evt.Veto() def OnPageChanged(self, evt): evt.GetPage().set(self._data) def get(self): return self._data #------------------------------------------------------------------------------- # Testing if __name__=="__main__": app=wx.PySimpleApp() f=wx.Frame(None, title='setphone_wizard') w=SetPhoneWizard(f) print w.RunWizard() print w._data w.Destroy() bitpim-1.0.7+dfsg1/src/media_root.py0000644001616600161660000002520310662172605015441 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Simon Capper ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### # standard modules from __future__ import with_statement import contextlib import os import cStringIO import copy import sha import time import string import zipfile # wx modules import wx # BitPim modules import database import common import guiwidgets import guihelper import pubsub import widgets import wallpaper import ringers class MediaWidget(wx.Panel, widgets.BitPimWidget): def __init__(self, mainwindow, parent): super(MediaWidget, self).__init__(parent, -1) self._main_window=mainwindow self.call_history_tree_nodes={} self._parent=parent # main box sizer self.vbs=wx.BoxSizer(wx.VERTICAL) # main stats display self.vbs.Add(wx.StaticText(self, -1, 'Media summary'), 0, wx.ALIGN_LEFT|wx.ALL, 2) # all done self.SetSizer(self.vbs) self.SetAutoLayout(True) self.vbs.Fit(self) self.ringernodes={} self.wallpapernodes={} self.widget_to_save=None self.origin_to_save="" self.SetBackgroundColour(wx.WHITE) self.ringerwidget=ringers.RingerView(self._main_window, parent, self) self.wallpaperwidget=wallpaper.WallpaperView(self._main_window, parent, self) pubsub.subscribe(self.OnPhoneModelChanged, pubsub.PHONE_MODEL_CHANGED) # populate data #self._populate() def DoMediaSummary(self): summary=[] summary=self.GetWidgetSummary(self.ringerwidget, summary) summary=self.GetWidgetSummary(self.wallpaperwidget, summary) self.vbs.Clear(deleteWindows=True) self.vbs.Add(wx.StaticText(self, -1, 'Media summary'), 0, wx.ALIGN_LEFT|wx.ALL, 2) hbs=wx.BoxSizer(wx.HORIZONTAL) name=wx.BoxSizer(wx.VERTICAL) count=wx.BoxSizer(wx.VERTICAL) size=wx.BoxSizer(wx.VERTICAL) name.Add(wx.StaticText(self, -1, 'Origin'), 0, wx.ALIGN_LEFT|wx.ALL, 2) count.Add(wx.StaticText(self, -1, 'Number Files'), 0, wx.ALIGN_LEFT|wx.ALL, 2) size.Add(wx.StaticText(self, -1, 'Size'), 0, wx.ALIGN_LEFT|wx.ALL, 2) total_files=0 total_size=0 for entry in summary: name.Add(wx.StaticText(self, -1, entry[0]), 0, wx.ALIGN_LEFT|wx.ALL, 2) count.Add(wx.StaticText(self, -1, str(entry[1])), 0, wx.ALIGN_LEFT|wx.ALL, 2) size.Add(wx.StaticText(self, -1, self.GetNiceSizeString(entry[2])), 0, wx.ALIGN_LEFT|wx.ALL, 2) total_files+=entry[1] total_size+=entry[2] hbs.Add(name, 0, wx.ALIGN_LEFT|wx.ALL, 2) hbs.Add(count, 0, wx.ALIGN_LEFT|wx.ALL, 2) hbs.Add(size, 0, wx.ALIGN_LEFT|wx.ALL, 2) self.vbs.Add(hbs, 0, wx.ALIGN_LEFT|wx.ALL, 2) self.vbs.Add(wx.StaticText(self, -1, "Total number of media files: %d" % total_files), 0, wx.ALIGN_LEFT|wx.ALL, 2) self.vbs.Add(wx.StaticText(self, -1, "Total size of media files: %s" % self.GetNiceSizeString(total_size)), 0, wx.ALIGN_LEFT|wx.ALL, 2) self.vbs.Layout() def GetNiceSizeString(self, size): orig=size size=float(size) if size < 1024: return "%d bytes" % size size=size/1024 if size < 1024: return "%.2f KB (%d bytes)" % (size, orig) size=size/1024 return "%.2f MB (%d bytes)" % (size, orig) def GetWidgetSummary(self, widget, res): for k,e in widget.sections: num_files=0 total_size=0 for item in e: total_size+=item.size num_files+=1 res.append((k.label, num_files, total_size)) return res def GetRightClickMenuItems(self, node): result=[] result.append((widgets.BitPimWidget.MENU_NORMAL, guihelper.ID_EXPORT_MEDIA_TO_DIR, "Export to Folder ..." , "Export the media to a folder on your hard drive")) result.append((widgets.BitPimWidget.MENU_NORMAL, guihelper.ID_EXPORT_MEDIA_TO_ZIP, "Export to Zip File ..." , "Export the media to a zip file")) return result def GetRinger(self): return self.ringerwidget def GetWallpaper(self): return self.wallpaperwidget def OnInit(self): self.AddMediaNode("ringers", self.ringerwidget, self._tree.ringers) self.AddMediaNode("sounds", self.ringerwidget, self._tree.sounds) self.AddMediaNode("images", self.wallpaperwidget, self._tree.image) self.ringerwidget.updateprofilevariables(self._main_window.phoneprofile) self.wallpaperwidget.updateprofilevariables(self._main_window.phoneprofile) self.DoMediaSummary() def OnPhoneModelChanged(self, msg): for name in self.ringernodes: self._tree.DeletePage(self.ringernodes[name]) self.ringernodes={} for name in self.wallpapernodes: self._tree.DeletePage(self.wallpapernodes[name]) self.wallpapernodes={} self.OnInit() self.ringerwidget.OnRefresh() self.wallpaperwidget.OnRefresh() def SaveToDir(self, directory): if self.widget_to_save==None: self.SaveWidgetToDir(directory, self.ringerwidget) self.SaveWidgetToDir(directory, self.wallpaperwidget) else: self.SaveWidgetToDir(directory, self.widget_to_save, self.origin_to_save) def SaveWidgetToDir(self, directory, widget, filter=""): for k,e in widget.sections: # skip unrequested origins if filter!="" and filter!=k.label: continue opath=self._main_window._fixup(os.path.join(directory, k.label)) try: os.makedirs(opath) except: pass if not os.path.isdir(opath): raise Exception("Unable to create export directory "+opath) for item in e: me=widget._data[item.datakey][item.key] if me.mediadata!=None and me.mediadata!='': fpath=self._main_window._fixup(os.path.join(opath, me.name)) with file(fpath, "wb") as f: f.write(me.mediadata) if me.timestamp!=None: os.utime(fpath, (me.timestamp, me.timestamp)) def SaveToZip(self, zip_file): # create the zipfile in a buffer # and write to disk after it is all created op=cStringIO.StringIO() with contextlib.closing(zipfile.ZipFile(op, "w", zipfile.ZIP_DEFLATED)) as zip: if self.widget_to_save==None: self.SaveWidgetToZip(zip, self.ringerwidget) self.SaveWidgetToZip(zip, self.wallpaperwidget) else: self.SaveWidgetToZip(zip, self.widget_to_save, self.origin_to_save) open(zip_file, "wb").write(op.getvalue()) def SaveWidgetToZip(self, zip, widget, filter=""): for k,e in widget.sections: # skip unrequested origins if filter!="" and filter!=k.label: continue for item in e: me=widget._data[item.datakey][item.key] if me.mediadata!=None and me.mediadata!='': zi=zipfile.ZipInfo() # zipfile does not like unicode. cp437 works on windows well, may be # a better choice than ascii, but no phones currently support anything # other than ascii for filenames name=k.label+"/"+me.name zi.filename=common.get_ascii_string(name, 'ignore') if me.timestamp==None: zi.date_time=(0,0,0,0,0,0) else: zi.date_time=time.localtime(me.timestamp)[:6] zi.compress_type=zipfile.ZIP_DEFLATED zip.writestr(zi, me.mediadata) def GetNodeList(self, widget): res=[] if widget==self.ringerwidget: for name in self.ringernodes: res.append(name) else: for name in self.wallpapernodes: res.append(name) res.sort() return res def AddMediaNode(self, node_name, widget, icon=None): if widget==self.ringerwidget: if node_name not in self.ringernodes: if icon==None: if string.find(node_name, "sound")!=-1: icon=self._tree.sounds else: icon=self._tree.ringers self.ringernodes[node_name]=self.AddSubPage(widget, node_name, icon) else: if node_name not in self.wallpapernodes: if icon==None: if string.find(node_name, "video")!=-1: icon=self._tree.video elif string.find(node_name, "camera")!=-1: icon=self._tree.camera else: icon=self._tree.image self.wallpapernodes[node_name]=self.AddSubPage(widget, node_name, icon) def GetNodeName(self, widget, node): if widget==self.ringerwidget: for name in self.ringernodes: if self.ringernodes[name]==node: return name else: for name in self.wallpapernodes: if self.wallpapernodes[name]==node: return name #------------------------------------------------------------------------------ class ExportMediaToDirDialog(wx.DirDialog): def __init__(self, parent, title): super(ExportMediaToDirDialog, self).__init__(parent, message=title, style=wx.DD_DEFAULT_STYLE|wx.DD_NEW_DIR_BUTTON) self.media_root=parent.GetActiveMediaWidget() def DoDialog(self): # do export rc=self.ShowModal() if rc==wx.ID_OK: self.media_root.SaveToDir(self.GetPath()) class ExportMediaToZipDialog(wx.FileDialog): def __init__(self, parent, title): self.media_root=parent.GetActiveMediaWidget() ext="Zip files (*.zip)|*.zip|All Files (*.*)|*" if self.media_root.widget_to_save!=None: default_file=self.media_root.origin_to_save+".zip" print "here 1 "+default_file else: default_file="media.zip" print "here 2 "+default_file super(ExportMediaToZipDialog, self).__init__(parent, title, defaultFile=default_file, wildcard=ext, style=wx.SAVE|wx.OVERWRITE_PROMPT|wx.CHANGE_DIR) def DoDialog(self): # do export rc=self.ShowModal() if rc==wx.ID_OK: self.media_root.SaveToZip(self.GetPath()) bitpim-1.0.7+dfsg1/src/database.py0000644001616600161660000013274211054350312015057 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: database.py 4697 2008-08-24 21:21:14Z djpham $ """Interface to the database""" from __future__ import with_statement import os import copy import time import sha import random import apsw import common ### ### The first section of this file deals with typical objects used to ### represent data items and various methods for wrapping them. ### class basedataobject(dict): """A base object derived from dict that is used for various records. Existing code can just continue to treat it as a dict. New code can treat it as dict, as well as access via attribute names (ie object["foo"] or object.foo). attribute name access will always give a result includes None if the name is not in the dict. As a bonus this class includes checking of attribute names and types in non-production runs. That will help catch typos etc. For production runs we may be receiving data that was written out by a newer version of BitPim so we don't check or error.""" # which properties we know about _knownproperties=[] # which ones we know about that should be a list of dicts _knownlistproperties={'serials': ['sourcetype', '*']} # which ones we know about that should be a dict _knowndictproperties={} if __debug__: # in debug code we check key name and value types def _check_property(self,name,value=None): # check it assert isinstance(name, (str, unicode)), "keys must be a string type" assert name in self._knownproperties or name in self._knownlistproperties or name in self._knowndictproperties, "unknown property named '"+name+"'" if value is None: return if name in getattr(self, "_knownlistproperties"): assert isinstance(value, list), "list properties ("+name+") must be given a list as value" # each list member must be a dict for v in value: self._check_property_dictvalue(name,v) return if name in getattr(self, "_knowndictproperties"): assert isinstance(value, dict), "dict properties ("+name+") must be given a dict as value" self._check_property_dictvalue(name,value) return # the value must be a basetype supported by apsw/SQLite assert isinstance(value, (str, unicode, buffer, int, long, float)), "only serializable types supported for values" def _check_property_dictvalue(self, name, value): assert isinstance(value, dict), "item(s) in "+name+" (a list) must be dicts" assert name in self._knownlistproperties or name in self._knowndictproperties if name in self._knownlistproperties: for key in value: assert key in self._knownlistproperties[name] or '*' in self._knownlistproperties[name], "dict key "+key+" as member of item in list "+name+" is not known" v=value[key] assert isinstance(v, (str, unicode, buffer, int, long, float)), "only serializable types supported for values" elif name in self._knowndictproperties: for key in value: assert key in self._knowndictproperties[name] or '*' in self._knowndictproperties[name], "dict key "+key+" as member of dict in item "+name+" is not known" v=value[key] assert isinstance(v, (str, unicode, buffer, int, long, float)), "only serializable types supported for values" def update(self, items): assert isinstance(items, dict), "update only supports dicts" # Feel free to fix this code ... for k in items: self._check_property(k, items[k]) super(basedataobject, self).update(items) def __getitem__(self, name): # check when they are retrieved, not set. I did try # catching the append method, but the layers of nested # namespaces got too confused self._check_property(name) v=super(basedataobject, self).__getitem__(name) self._check_property(name, v) return v def __setitem__(self, name, value): self._check_property(name, value) super(basedataobject,self).__setitem__(name, value) def __setattr__(self, name, value): # note that we map setattr to update the dict self._check_property(name, value) self.__setitem__(name, value) def __getattr__(self, name): if name not in self._knownproperties and name not in self._knownlistproperties and name not in self._knowndictproperties: raise AttributeError(name) self._check_property(name) if name in self.keys(): return self[name] return None def __delattr__(self, name): self._check_property(name) if name in self.keys(): del self[name] else: # non-debug mode - we don't do any attribute name/value type # checking as the data may (legitimately) be from a newer # version of the program. def __setattr__(self, name, value): # note that we map setattr to update the dict super(basedataobject,self).__setitem__(name, value) def __getattr__(self, name): # and getattr checks the dict if name not in self._knownproperties and name not in self._knownlistproperties and name not in self._knowndictproperties: raise AttributeError(name) if name in self.keys(): return self[name] return None def __delattr__(self, name): if name in self.keys(): del self[name] # various methods for manging serials def GetBitPimSerial(self): "Returns the BitPim serial for this item" if "serials" not in self: raise KeyError("no bitpim serial present") for v in self.serials: if v["sourcetype"]=="bitpim": return v["id"] raise KeyError("no bitpim serial present") # rng seeded at startup _persistrandom=random.Random() _shathingy=None def _getnextrandomid(self, item): """Returns random ids used to give unique serial numbers to items @param item: any object - its memory location is used to help randomness @returns: a 20 character hexdigit string """ if basedataobject._shathingy is None: basedataobject._shathingy=sha.new() basedataobject._shathingy.update(`basedataobject._persistrandom.random()`) basedataobject._shathingy.update(`id(self)`) basedataobject._shathingy.update(`basedataobject._persistrandom.random()`) basedataobject._shathingy.update(`id(item)`) return basedataobject._shathingy.hexdigest() def EnsureBitPimSerial(self): "Ensures this entry has a serial" if self.serials is None: self.serials=[] for v in self.serials: if v["sourcetype"]=="bitpim": return self.serials.append({'sourcetype': "bitpim", "id": self._getnextrandomid(self.serials)}) class dataobjectfactory: "Called by the code to read in objects when it needs a new object container" def __init__(self, dataobjectclass=basedataobject): self.dataobjectclass=dataobjectclass if __debug__: def newdataobject(self, values={}): v=self.dataobjectclass() if len(values): v.update(values) return v else: def newdataobject(self, values={}): return self.dataobjectclass(values) def extractbitpimserials(dict): """Returns a new dict with keys being the bitpim serial for each row. Each item must be derived from basedataobject""" res={} for record in dict.itervalues(): res[record.GetBitPimSerial()]=record return res def ensurebitpimserials(dict): """Ensures that all records have a BitPim serial. Each item must be derived from basedataobject""" for record in dict.itervalues(): record.EnsureBitPimSerial() def findentrywithbitpimserial(dict, serial): """Returns the entry from dict whose bitpim serial matches serial""" for record in dict.itervalues(): if record.GetBitPimSerial()==serial: return record raise KeyError("not item with serial "+serial+" found") def ensurerecordtype(dict, factory): for key,record in dict.iteritems(): if not isinstance(record, basedataobject): dict[key]=factory.newdataobject(record) # a factory that uses dicts to allocate new data objects dictdataobjectfactory=dataobjectfactory(dict) ### ### Actual database interaction is from this point on ### # Change this to True to see what is going on under the hood. It # will produce a lot of output! TRACE=False def ExclusiveWrapper(method): """Wrap a method so that it has an exclusive lock on the database (noone else can read or write) until it has finished""" # note that the existing threading safety checks in apsw will # catch any thread abuse issues. def _transactionwrapper(*args, **kwargs): # arg[0] should be a Database instance assert isinstance(args[0], Database) with args[0]: return method(*args, **kwargs) setattr(_transactionwrapper, "__doc__", getattr(method, "__doc__")) return _transactionwrapper def sqlquote(s): "returns an sqlite quoted string (the return value will begin and end with single quotes)" return "'"+s.replace("'", "''")+"'" def idquote(s): """returns an sqlite quoted identifier (eg for when a column name is also an SQL keyword The value returned is quoted in square brackets""" return '['+s+']' class IntegrityCheckFailed(Exception): pass class Database: # Make this class a context manager so it can be used with WITH blocks def __enter__(self): self.excounter+=1 self.transactionwrite=False if self.excounter==1: if TRACE: print "BEGIN EXCLUSIVE TRANSACTION" self.cursor.execute("BEGIN EXCLUSIVE TRANSACTION") self._schemacache={} return self def __exit__(self, ex_type, ex_value, tb): self.excounter-=1 if self.excounter==0: w=self.transactionwrite if tb is None: # no exception, so commit cmd="COMMIT TRANSACTION" if w else "END TRANSACTION" else: # an exception occurred, so rollback cmd="ROLLBACK TRANSACTION" if w else "END TRANSACTION" if TRACE: print cmd self.cursor.execute(cmd) def __del__(self): # connections have to be closed now self.connection.close(True) def __init__(self, filename, virtualtables=None): """ @param filename: database filename @param virtualtables: a list of dict specifying the virtual tables Each dict is expected to have the following keys: 'tablename': the name of the virtual table 'modulename': the name of the module that implements this virtual table 'moduleclass': the ModuleBase subclass that implements this virtual table 'args': arguments passed to instantiaion of the module class """ self.connection=apsw.Connection(filename) self.cursor=self.connection.cursor() # first tell sqlite to use the pre 3.4 format. this will allow downgrades self.cursor.execute("PRAGMA legacy_file_format=1") # nb you don't get an error for unknown pragmas # we always do an integrity check second icheck=[] print "database integrity check" for row in self.cursor.execute("PRAGMA integrity_check"): icheck.extend(row) print "database integrity check complete" icheck="\n".join(icheck) if icheck!="ok": raise IntegrityCheckFailed(icheck) # exclusive lock counter self.excounter=0 # this should be set to true by any code that writes - it is # used by the exclusivewrapper to tell if it should do a # commit/rollback or just a plain end self.transactionwrite=False # a cache of the table schemas self._schemacache={} self.sql=self.cursor.execute self.sqlmany=self.cursor.executemany if TRACE: self.cursor.setexectrace(self._sqltrace) self.cursor.setrowtrace(self._rowtrace) if virtualtables is not None: # virtual tables are specified for vtable in virtualtables: # register the module self.connection.createmodule(vtable['modulename'], vtable['moduleclass'](*vtable['args'])) if not self.doestableexist(vtable['tablename']): # and declare the virtual table self.sql('CREATE VIRTUAL TABLE %s USING %s;'%(idquote(vtable['tablename']), idquote(vtable['modulename']))) def _sqltrace(self, cmd, bindings): print "SQL:",cmd if bindings: print " bindings:",bindings return True def _rowtrace(self, *row): print "ROW:",row return row def sql(self, statement, params=()): "Executes statement and return a generator of the results" # this is replaced in init assert False def sqlmany(self, statement, params): "execute statements repeatedly with params" # this is replaced in init assert False def doestableexist(self, tablename): if tablename in self._schemacache: return True return bool(self.sql("select count(*) from sqlite_master where type='table' and name=%s" % (sqlquote(tablename),)).next()[0]) def getcolumns(self, tablename, onlynames=False): res=self._schemacache.get(tablename,None) if res is None: res=[] for colnum,name,type, _, default, primarykey in self.sql("pragma table_info("+idquote(tablename)+")"): if primarykey: type+=" primary key" res.append([colnum,name,type]) self._schemacache[tablename]=res if onlynames: return [name for colnum,name,type in res] return res @ExclusiveWrapper def savemajordict(self, tablename, dict, timestamp=None): """This is the entrypoint for saving a first level dictionary such as the phonebook or calendar. @param tablename: name of the table to use @param dict: The dictionary of record. The key must be the uniqueid for each record. The @L{extractbitpimserials} function can do the conversion for you for phonebook and similar formatted records. @param timestamp: the UTC time in seconds since the epoch. This is """ if timestamp is None: timestamp=time.time() # work on a shallow copy of dict dict=dict.copy() # make sure the table exists first if not self.doestableexist(tablename): # create table and include meta-fields self.transactionwrite=True self.sql("create table %s (__rowid__ integer primary key, __timestamp__, __deleted__ integer, __uid__ varchar)" % (idquote(tablename),)) # get the latest values for each guid ... current=self.getmajordictvalues(tablename) # compare what we have, and update/mark deleted as appropriate ... deleted=[k for k in current if k not in dict] new=[k for k in dict if k not in current] modified=[k for k in dict if k in current] # only potentially modified ... # deal with modified first dl=[] for i,k in enumerate(modified): if dict[k]==current[k]: # unmodified! del dict[k] dl.append(i) dl.reverse() for i in dl: del modified[i] # add deleted entries back into dict for d in deleted: assert d not in dict dict[d]=current[d] dict[d]["__deleted__"]=1 # now we only have new, changed and deleted entries left in dict # examine the keys in dict dk=[] for k in dict.keys(): # make a copy since we modify values, but it doesn't matter about deleted since we own those if k not in deleted: dict[k]=dict[k].copy() for kk in dict[k]: if kk not in dk: dk.append(kk) # verify that they don't start with __ assert len([k for k in dk if k.startswith("__") and not k=="__deleted__"])==0 # get database keys dbkeys=self.getcolumns(tablename, onlynames=True) # are any missing? missing=[k for k in dk if k not in dbkeys] if len(missing): creates=[] # for each missing key, we have to work out if the value # is a list or dict type (which we indirect to another table) for m in missing: islist=None isdict=None isnotindirect=None for r in dict.keys(): record=dict[r] v=record.get(m,None) if v is None: continue if isinstance(v, list): islist=record elif isinstance(v,type({})): isdict=record else: isnotindirect=record # in devel code, we check every single value # in production, we just use the first we find if not __debug__: break if islist is None and isdict is None and isnotindirect is None: # they have the key but no record has any values, so we ignore it del dk[dk.index(m)] continue # don't do this type abuse at home ... if int(islist is not None)+int(isdict is not None)+int(isnotindirect is not None)!=int(True): # can't have it more than one way raise ValueError("key %s for table %s has values with inconsistent types. eg LIST: %s, DICT: %s, NOTINDIRECT: %s" % (m,tablename,`islist`,`isdict`,`isnotindirect`)) if islist is not None: creates.append( (m, "indirectBLOB") ) continue if isdict: creates.append( (m, "indirectdictBLOB")) continue if isnotindirect is not None: creates.append( (m, "valueBLOB") ) continue assert False, "You can't possibly get here!" if len(creates): self._altertable(tablename, creates, [], createindex=1) # write out indirect values dbtkeys=self.getcolumns(tablename) # for every indirect, we have to replace the value with a pointer for _,n,t in dbtkeys: if t in ("indirectBLOB", "indirectdictBLOB"): indirects={} for r in dict.keys(): record=dict[r] v=record.get(n,None) if v is not None: if not len(v): # set zero length lists/dicts to None record[n]=None else: if t=="indirectdictBLOB": indirects[r]=[v] # make it a one item dict list else: indirects[r]=v if len(indirects): self.updateindirecttable(tablename+"__"+n, indirects) for r in indirects.keys(): dict[r][n]=indirects[r] # and now the main table for k in dict.keys(): record=dict[k] record["__uid__"]=k rk=[x for x,y in record.items() if y is not None] rk.sort() cmd=["insert into", idquote(tablename), "( [__timestamp__],"] cmd.append(",".join([idquote(r) for r in rk])) cmd.extend([")", "values", "(?,"]) cmd.append(",".join(["?" for r in rk])) cmd.append(")") self.sql(" ".join(cmd), [timestamp]+[record[r] for r in rk]) self.transactionwrite=True def updateindirecttable(self, tablename, indirects): # this is mostly similar to savemajordict, except we only deal # with lists of dicts, and we find existing records with the # same value if possible # does the table even exist? if not self.doestableexist(tablename): # create table and include meta-fields self.sql("create table %s (__rowid__ integer primary key)" % (idquote(tablename),)) self.transactionwrite=True # get the list of keys from indirects datakeys=[] for i in indirects.keys(): assert isinstance(indirects[i], list) for v in indirects[i]: assert isinstance(v, dict) for k in v.keys(): if k not in datakeys: assert not k.startswith("__") datakeys.append(k) # get the keys from the table dbkeys=self.getcolumns(tablename, onlynames=True) # are any missing? missing=[k for k in datakeys if k not in dbkeys] if len(missing): self._altertable(tablename, [(m,"valueBLOB") for m in missing], [], createindex=2) # for each row we now work out the indirect information for r in indirects: res=tablename+"," for record in indirects[r]: cmd=["select __rowid__ from", idquote(tablename), "where"] params=[] coals=[] for d in datakeys: v=record.get(d,None) if v is None: coals.append(idquote(d)) else: if cmd[-1]!="where": cmd.append("and") cmd.extend([idquote(d), "= ?"]) params.append(v) assert cmd[-1]!="where" # there must be at least one non-none column! if len(coals)==1: cmd.extend(["and",coals[0],"isnull"]) elif len(coals)>1: cmd.extend(["and coalesce(",",".join(coals),") isnull"]) found=None for found in self.sql(" ".join(cmd), params): # get matching row found=found[0] break if found is None: # add it cmd=["insert into", idquote(tablename), "("] params=[] for k in record: if cmd[-1]!="(": cmd.append(",") cmd.append(k) params.append(record[k]) cmd.extend([")", "values", "("]) cmd.append(",".join(["?" for p in params])) cmd.append("); select last_insert_rowid()") found=self.sql(" ".join(cmd), params).next()[0] self.transactionwrite=True res+=`found`+"," indirects[r]=res @ExclusiveWrapper def getmajordictvalues(self, tablename, factory=dictdataobjectfactory, at_time=None): if not self.doestableexist(tablename): return {} res={} uids=[u[0] for u in self.sql("select distinct __uid__ from %s" % (idquote(tablename),))] schema=self.getcolumns(tablename) for colnum,name,type in schema: if name=='__deleted__': deleted=colnum elif name=='__uid__': uid=colnum # get all relevant rows if isinstance(at_time, (int, float)): sql_string="select * from %s where __uid__=? and __timestamp__<=%f order by __rowid__ desc limit 1" % (idquote(tablename), float(at_time)) else: sql_string="select * from %s where __uid__=? order by __rowid__ desc limit 1" % (idquote(tablename),) indirects={} for row in self.sqlmany(sql_string, [(u,) for u in uids]): if row[deleted]: continue record=factory.newdataobject() for colnum,name,type in schema: if name.startswith("__") or type not in ("valueBLOB", "indirectBLOB", "indirectdictBLOB") or row[colnum] is None: continue if type=="valueBLOB": record[name]=row[colnum] continue assert type=="indirectBLOB" or type=="indirectdictBLOB" if name not in indirects: indirects[name]=[] indirects[name].append( (row[uid], row[colnum], type) ) res[row[uid]]=record # now get the indirects for name,values in indirects.iteritems(): for uid,v,type in values: fieldvalue=self._getindirect(v) if fieldvalue: if type=="indirectBLOB": res[uid][name]=fieldvalue else: res[uid][name]=fieldvalue[0] return res def _getindirect(self, what): """Gets a list of values (indirect) as described by what @param what: what to get - eg phonebook_serials,1,3,5, (note there is always a trailing comma) """ tablename,rows=what.split(',', 1) schema=self.getcolumns(tablename) res=[] for row in self.sqlmany("select * from %s where __rowid__=?" % (idquote(tablename),), [(int(long(r)),) for r in rows.split(',') if len(r)]): record={} for colnum,name,type in schema: if name.startswith("__") or type not in ("valueBLOB", "indirectBLOB", "indirectdictBLOB") or row[colnum] is None: continue if type=="valueBLOB": record[name]=row[colnum] continue assert type=="indirectBLOB" or type=="indirectdictBLOB" assert False, "indirect in indirect not handled" assert len(record),"Database._getindirect has zero len record" res.append(record) assert len(res), "Database._getindirect has zero len res" return res def _altertable(self, tablename, columnstoadd, columnstodel, createindex=0): """Alters the named table by deleting the specified columns, and adding the listed columns @param tablename: name of the table to alter @param columnstoadd: a list of (name,type) of the columns to add @param columnstodel: a list name of the columns to delete @param createindex: what sort of index to create. 0 means none, 1 means on just __uid__ and 2 is on all data columns """ # indexes are automatically dropped when table is dropped so we don't need to dbtkeys=[x for x in self.getcolumns(tablename) \ if x[1] not in columnstodel] # clean out cache entry since we are about to invalidate it del self._schemacache[tablename] self.transactionwrite=True cmd=["create", "temporary", "table", idquote("backup_"+tablename), "(", ','.join(['%s %s'%(idquote(n), t) for _,n,t in dbtkeys]), ")"] self.sql(" ".join(cmd)) # copy the values into the temporary table self.sql("insert into %s select %s from %s" % (idquote("backup_"+tablename), ','.join([idquote(n) for _,n,_ in dbtkeys]), idquote(tablename))) # drop the source table self.sql("drop table %s" % (idquote(tablename),)) # recreate the source table with new columns del cmd[1] # remove temporary cmd[2]=idquote(tablename) # change tablename cmd[-2]=','.join(['%s %s'%(idquote(n), t) for _,n,t in dbtkeys]+\ ['%s %s'%(idquote(n), t) for n,t in columnstoadd]) # new list of columns self.sql(" ".join(cmd)) # create index if needed if createindex: if createindex==1: cmd=["create index", idquote("__index__"+tablename), "on", idquote(tablename), "(__uid__)"] elif createindex==2: cmd=["create index", idquote("__index__"+tablename), "on", idquote(tablename), "("] cols=[] for _,n,t in dbtkeys: if not n.startswith("__"): cols.append(idquote(n)) for n,t in columnstoadd: cols.append(idquote(n)) cmd.extend([",".join(cols), ")"]) else: raise ValueError("bad createindex "+`createindex`) self.sql(" ".join(cmd)) # put values back in cmd=["insert into", idquote(tablename), '(', ','.join([idquote(n) for _,n,_ in dbtkeys]), ")", "select * from", idquote("backup_"+tablename)] self.sql(" ".join(cmd)) self.sql("drop table "+idquote("backup_"+tablename)) @ExclusiveWrapper def deleteold(self, tablename, uids=None, minvalues=3, maxvalues=5, keepoldest=93): """Deletes old entries from the database. The deletion is based on either criterion of maximum values or age of values matching. @param uids: You can limit the items deleted to this list of uids, or None for all entries. @param minvalues: always keep at least this number of values @param maxvalues: maximum values to keep for any entry (you can supply None in which case no old entries will be removed based on how many there are). @param keepoldest: values older than this number of days before now are removed. You can also supply None in which case no entries will be removed based on age. @returns: number of rows removed,number of rows remaining """ if not self.doestableexist(tablename): return (0,0) timecutoff=0 if keepoldest is not None: timecutoff=time.time()-(keepoldest*24*60*60) if maxvalues is None: maxvalues=sys.maxint-1 if uids is None: uids=[u[0] for u in self.sql("select distinct __uid__ from %s" % (idquote(tablename),))] deleterows=[] for uid in uids: deleting=False for count, (rowid, deleted, timestamp) in enumerate( self.sql("select __rowid__,__deleted__, __timestamp__ from %s where __uid__=? order by __rowid__ desc" % (idquote(tablename),), [uid])): if count=maxvalues or timestamp0: deleterows.append(rowid) continue self.sqlmany("delete from %s where __rowid__=?" % (idquote(tablename),), [(r,) for r in deleterows]) return len(deleterows), self.sql("select count(*) from "+idquote(tablename)).next()[0] @ExclusiveWrapper def savelist(self, tablename, values): """Just save a list of items (eg categories). There is no versioning or transaction history. Internally the table has two fields. One is the actual value and the other indicates if the item is deleted. """ # a tuple of the quoted table name tn=(idquote(tablename),) if not self.doestableexist(tablename): self.sql("create table %s (__rowid__ integer primary key, item, __deleted__ integer)" % tn) # some code to demonstrate my lack of experience with SQL .... delete=[] known=[] revive=[] for row, item, dead in self.sql("select __rowid__,item,__deleted__ from %s" % tn): known.append(item) if item in values: # we need this row if dead: revive.append((row,)) continue if dead: # don't need this entry and it is dead anyway continue delete.append((row,)) create=[(v,) for v in values if v not in known] # update table as appropriate self.sqlmany("update %s set __deleted__=0 where __rowid__=?" % tn, revive) self.sqlmany("update %s set __deleted__=1 where __rowid__=?" % tn, delete) self.sqlmany("insert into %s (item, __deleted__) values (?,0)" % tn, create) if __debug__: vdup=values[:] vdup.sort() vv=self.loadlist(tablename) vv.sort() assert vdup==vv @ExclusiveWrapper def loadlist(self, tablename): """Loads a list of items (eg categories)""" if not self.doestableexist(tablename): return [] return [v[0] for v in self.sql("select item from %s where __deleted__=0" % (idquote(tablename),))] @ExclusiveWrapper def getchangescount(self, tablename): """Return the number of additions, deletions, and modifications made to this table over time. Expected fields containted in this table: __timestamp__,__deleted__, __uid__ Assuming that both __rowid__ and __timestamp__ values are both ascending """ if not self.doestableexist(tablename): return {} tn=idquote(tablename) # get the unique dates of changes sql_cmd='select distinct __timestamp__ from %s' % tn # setting up the return dict res={} for t in self.sql(sql_cmd): res[t[0]]={ 'add': 0, 'del': 0, 'mod': 0 } # go through the table and count the changes existing_uid={} sql_cmd='select __timestamp__,__uid__,__deleted__ from %s order by __timestamp__ asc' % tn for e in self.sql(sql_cmd): tt=e[0] uid=e[1] del_flg=e[2] if existing_uid.has_key(uid): if del_flg: res[tt]['del']+=1 del existing_uid[uid] else: res[tt]['mod']+=1 else: existing_uid[uid]=None res[tt]['add']+=1 return res class ModuleBase(object): """Base class to implement a specific Virtual Table module with apsw. For more info: http://www.sqlite.org/cvstrac/wiki/wiki?p=VirtualTables http://www.sqlite.org/cvstrac/wiki/wiki?p=VirtualTableMethods http://www.sqlite.org/cvstrac/wiki/wiki?p=VirtualTableBestIndexMethod """ def __init__(self, field_names): self.connection=None self.table_name=None # the first field is ALWAYS __rowid__ to be consistent with Database self.field_names=('__rowid__',)+field_names def Create(self, connection, modulename, databasename, vtablename, *args): """Called when the virtual table is created. @param connection: an instance of apsw.Connection @param modulename: string name of the module being invoked @param databasename: string name of this database @param vtablename: string name of this new virtual table @param args: additional arguments sent from the CREATE VIRTUAL TABLE statement @returns: a tuple of 2 values: an sql string describing the table, and an object implementing it: Me! """ self.table_name=vtablename fields=['__rowid__ integer primary key'] for field in self.field_names[1:]: fields.append(idquote(field)+' valueBLOB') fields='(%s)'%','.join(fields) return ('create table %s %s;'%(idquote(vtablename), fields), self) def Connect(self, connection, modulename, databasename, vtablename, *args): """Connect to an existing virtual table, by default it is identical to Create """ return self.Create(connection, modulename, databasename, vtablename, *args) def Destroy(self): """Release a connection to a virtual table and destroy the underlying table implementation. By default, we do nothing. """ pass def Disconnect(self): """Release a connection to a virtual table. By default, we do nothing. """ pass def BestIndex(self, constraints, orderby): """Provide information on how to best access this table. Must be overriden by subclass. @param constraints: a tuple of (column #, op) defining a constraints @param orderby: a tuple of (column #, desc) defining the order by @returns a tuple of up to 5 values: 0: aConstraingUsage: a tuple of the same size as constraints. Each item is either None, argv index(int), or (argv index, omit(Bool)). 1: idxNum(int) 2: idxStr(string) 3: orderByConsumed(Bool) 4: estimatedCost(float) """ raise NotImplementedError def Begin(self): pass def Sync(self): pass def Commit(self): pass def Rollback(self): pass def Open(self): """Create/prepare a cursor used for subsequent reading. @returns: the implementor object: Me! """ return self def Close(self): """Close a cursor previously created by Open By default, do nothing """ pass def Filter(self, idxNum, idxStr, argv): """Begin a search of a virtual table. @param idxNum: int value passed by BestIndex @param idxStr: string valued passed by BestIndex @param argv: constraint parameters requested by BestIndex @returns: None """ raise NotImplementedError def Eof(self): """Determines if the current cursor points to a valid row. The Sqlite doc is wrong on this. @returns: True if NOT valid row, False otherwise """ raise NotImplementedError def Column(self, N): """Find the value for the N-th column of the current row. @param N: the N-th column @returns: value of the N-th column """ raise NotImplementedError def Next(self): """Move the cursor to the next row. @returns: None """ raise NotImplementedError def Rowid(self): """Return the rowid of the current row. @returns: the rowid(int) of the current row. """ raise NotImplementedError def UpdateDeleteRow(self, rowid): """Delete row rowid @param rowid: @returns: None """ raise NotImplementedError def UpdateInsertRow(self, rowid, fields): """Insert a new row of data into the table @param rowid: if not None, use this rowid. If None, create a new rowid @param fields: a tuple of the field values in the order declared in Create/Connet @returns: rowid of the new row. """ raise NotImplementedError def UpdateChangeRow(self, rowid, newrowid, fields): """Change the row of the current rowid with the new rowid and new values @param rowid: rowid of the current row @param newrowid: new rowid @param fields: a tuple of the field values in the order declared in Create/Connect @returns: rowid of the new row """ raise NotImplementedError if __name__=='__main__': import common import sys import time import os sys.excepthook=common.formatexceptioneh # our own hacked version for testing class phonebookdataobject(basedataobject): # no change to _knownproperties (all of ours are list properties) _knownlistproperties=basedataobject._knownlistproperties.copy() _knownlistproperties.update( {'names': ['title', 'first', 'middle', 'last', 'full', 'nickname'], 'categories': ['category'], 'emails': ['email', 'type'], 'urls': ['url', 'type'], 'ringtones': ['ringtone', 'use'], 'addresses': ['type', 'company', 'street', 'street2', 'city', 'state', 'postalcode', 'country'], 'wallpapers': ['wallpaper', 'use'], 'flags': ['secret'], 'memos': ['memo'], 'numbers': ['number', 'type', 'speeddial'], # serials is in parent object }) _knowndictproperties=basedataobject._knowndictproperties.copy() _knowndictproperties.update( {'repeat': ['daily', 'orange']} ) phonebookobjectfactory=dataobjectfactory(phonebookdataobject) # use the phonebook out of the examples directory try: execfile(os.getenv("DBTESTFILE", "examples/phonebook-index.idx")) except UnicodeError: common.unicode_execfile(os.getenv("DBTESTFILE", "examples/phonebook-index.idx")) ensurerecordtype(phonebook, phonebookobjectfactory) phonebookmaster=phonebook def testfunc(): global phonebook, TRACE, db # note that iterations increases the size of the # database/journal and will make each one take longer and # longer as the db/journal gets bigger if len(sys.argv)>=2: iterations=int(sys.argv[1]) else: iterations=1 if iterations >1: TRACE=False db=Database("testdb") b4=time.time() for i in xrange(iterations): phonebook=phonebookmaster.copy() # write it out db.savemajordict("phonebook", extractbitpimserials(phonebook)) # check what we get back is identical v=db.getmajordictvalues("phonebook") assert v==extractbitpimserials(phonebook) # do a deletion del phonebook[17] # james bond @ microsoft db.savemajordict("phonebook", extractbitpimserials(phonebook)) # and verify v=db.getmajordictvalues("phonebook") assert v==extractbitpimserials(phonebook) # modify a value phonebook[15]['addresses'][0]['city']="Bananarama" db.savemajordict("phonebook", extractbitpimserials(phonebook)) # and verify v=db.getmajordictvalues("phonebook") assert v==extractbitpimserials(phonebook) after=time.time() print "time per iteration is",(after-b4)/iterations,"seconds" print "total time was",after-b4,"seconds for",iterations,"iterations" if iterations>1: print "testing repeated reads" b4=time.time() for i in xrange(iterations*10): db.getmajordictvalues("phonebook") after=time.time() print "\ttime per iteration is",(after-b4)/(iterations*10),"seconds" print "\ttotal time was",after-b4,"seconds for",iterations*10,"iterations" print print "testing repeated writes" x=extractbitpimserials(phonebook) k=x.keys() b4=time.time() for i in xrange(iterations*10): # we remove 1/3rd of the entries on each iteration xcopy=x.copy() for l in range(i,i+len(k)/3): del xcopy[k[l%len(x)]] db.savemajordict("phonebook",xcopy) after=time.time() print "\ttime per iteration is",(after-b4)/(iterations*10),"seconds" print "\ttotal time was",after-b4,"seconds for",iterations*10,"iterations" if len(sys.argv)==3: # also run under hotspot then def profile(filename, command): import hotshot, hotshot.stats, os file=os.path.abspath(filename) profile=hotshot.Profile(file) profile.run(command) profile.close() del profile howmany=100 stats=hotshot.stats.load(file) stats.strip_dirs() stats.sort_stats('time', 'calls') stats.print_stats(100) stats.sort_stats('cum', 'calls') stats.print_stats(100) stats.sort_stats('calls', 'time') stats.print_stats(100) sys.exit(0) profile("dbprof", "testfunc()") else: testfunc() bitpim-1.0.7+dfsg1/src/memo.py0000644001616600161660000004420011077232567014257 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: memo.py 4714 2008-10-21 01:50:47Z djpham $ """ Code to handle memo/note items The format for the memo is standardized. It is a dict with the following fields: MemoEntry properties: subject - 'string subject' text - 'string text' categories - [{ 'category': 'string' }] secret - True/ date - date time/stamp 'Mmm dd, YYYY HH:MM' (Read only) id - unique id string that can be used as a dict key. MemoEntry methods: get() - return a copy of the memo dict. set(dict) - set the internal dict to the new dict. set_date_now() - set the date/time stamp to the current date/time set_date_isostr(iso_string) - set the date/time stamp to the ISO date string (YYYYMMDDTHHMMSS) To implement memo read/write for a phone module: Add 2 entries into Profile._supportedsyncs: ... ('memo', 'read', None), # all memo reading ('memo', 'write', 'OVERWRITE') # all memo writing implement the following 2 methods in your Phone class: def getmemo(self, result): ... return result def savememo(self, result, merge): ... return result The result dict key is 'memo'. """ # standard modules from __future__ import with_statement import copy import datetime import time # wx modules import wx # BitPim modules import bptime import calendarentryeditor as cal_editor import database import field_color import helpids import phonebookentryeditor as pb_editor import pubsub import today import guihelper import guiwidgets import widgets widgets_list=[] module_debug=False #------------------------------------------------------------------------------- class MemoDataObject(database.basedataobject): _knownproperties=['subject', 'date'] _knownlistproperties=database.basedataobject._knownlistproperties.copy() _knownlistproperties.update( {'categories': ['category'], 'flags': ['secret'], 'body': ['type', 'data', '*' ] }) def __init__(self, data=None): if data is None or not isinstance(data, MemoEntry): return; self.update(data.get_db_dict()) memoobjectfactory=database.dataobjectfactory(MemoDataObject) #------------------------------------------------------------------------------- class MemoEntry(object): _body_subject_len=12 # the # of chars from body to fill in for subj + ... _id_index=0 _max_id_index=999 def __init__(self): self._data={ 'body': [], 'serials': [] } self.set_date_now() self._create_id() def get(self): return copy.deepcopy(self._data, {}) def set(self, d): self._data={} self._data.update(d) def get_db_dict(self): return self.get() def set_db_dict(self, d): self.set(d) def _set_or_del(self, key, v, v_list=()): if v is None or v in v_list: if self._data.has_key(key): del self._data[key] else: self._data[key]=v def _get_subject(self): return self._data.get('subject', '') def _set_subject(self, v): self._set_or_del('subject', v, ('',)) subject=property(fget=_get_subject, fset=_set_subject) def _get_text(self): b=self._data.get('body', []) for n in b: if n.get('type', None)=='text': return n.get('data', '') return '' def _set_text(self, v): if v is None: v='' if not self.subject: self.subject=v[:self._body_subject_len]+'...' b=self._data.get('body', []) for n in b: if n.get('type', None)=='text': n['data']=v return self._data.setdefault('body', []).append(\ {'type': 'text', 'data': v }) text=property(fget=_get_text, fset=_set_text) def _get_secret(self): f=self._data.get('flags', []) for n in f: if n.has_key('secret'): return n['secret'] return False def _set_secret(self, v): f=self._data.get('flags', []) for i, n in enumerate(f): if n.has_key('secret'): if v is None or not v: del f[i] if not self._data['flags']: del self._data['flags'] else: n['secret']=v return if v is not None and v: self._data.setdefault('flags', []).append({'secret': v}) secret=property(fget=_get_secret, fset=_set_secret) def _get_categories(self): return self._data.get('categories', []) def _set_categories(self, v): self._set_or_del('categories', v, ([],)) categories=property(fget=_get_categories, fset=_set_categories) def set_date_now(self): # set the date/time stamp to now n=datetime.datetime.now() self._data['date']=n.strftime('%b %d, %Y %H:%M') def set_date_isostr(self, iso_string): n=bptime.BPTime(iso_string) self._data['date']=n.date.strftime('%b %d, %Y')+n.time.strftime(' %H:%M') def _get_date(self): return self._data.get('date', '') date=property(fget=_get_date) def _create_id(self): "Create a BitPim serial for this entry" self._data.setdefault("serials", []).append(\ {"sourcetype": "bitpim", "id": '%.3f%03d'%(time.time(), MemoEntry._id_index) }) if MemoEntry._id_index ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: aggregatedisplay.py 3298 2006-05-28 03:10:52Z skyjunky $ "Displays a number of sections each with a number of items" import wx import sys import guihelper ActivateEvent, EVT_ACTIVATE = wx.lib.newevent.NewCommandEvent() class BufferedPaintDC(wx.BufferedPaintDC): def __init__(self, *arg, **karg): super(BufferedPaintDC, self).__init__(*arg, **karg) self.view_start=(0,0) self.pos=(0,0) class Display(wx.ScrolledWindow): "This is the view" class HitTestResult: "Where a particular point corresponds to" IN_BACKGROUND=0 IN_SECTION=1 IN_ITEM=2 def __init__(self, **kwds): self.__dict__.update({ 'location': self.IN_BACKGROUND, 'sectionnum': None, 'section': None, 'sectionx': None, 'sectiony': None, 'itemnum': None, 'item': None, 'itemx': None, 'itemy': None, }) self.__dict__.update(kwds) def __str__(self): res="=0 and bb[0]=0 and bb[1]=bb[0] and bb[2]<=self.itemsize[i][0]+extrawidth assert bb[3]>=bb[1] and bb[3]<=self.itemsize[i][1] except: print "bb is",bb print "should be within",(self.itemsize[i][0]+extrawidth,self.itemsize[i][1]) self.boundingboxes[i][num]=bb num+=1 cury+=(len(self.items[i])+self.itemsperrow[i]-1)/self.itemsperrow[i]*(self.itemsize[i][1]+self.ITEMPADDING) # must do this or the world ends ... dc.SetDeviceOrigin(0,0) def OnLeftDown(self, evt): self.SetFocus() actualx,actualy=self.CalcUnscrolledPosition(evt.GetX(), evt.GetY()) res=self.HitTest(actualx, actualy) if res.item is None: if len(self.GetSelection()): self.ClearSelection() return # if neither control or shift is down then clear selection and add this item if not evt.ControlDown() and not evt.ShiftDown(): self.SetSelectedByNumber(res.sectionnum, res.itemnum, False) return # if control and shift are down then treat as just shift if evt.ShiftDown(): self.SetSelectedByNumber(res.sectionnum, res.itemnum, True) return assert evt.ControlDown() # we toggle the item self.selected[res.sectionnum][res.itemnum]=not self.selected[res.sectionnum][res.itemnum] self.Refresh(False) def OnLeftDClick(self, evt): actualx,actualy=self.CalcUnscrolledPosition(evt.GetX(), evt.GetY()) res=self.HitTest(actualx, actualy) if res.item is None: if len(self.GetSelection()): self.ClearSelection() return self.SetSelectedByNumber(res.sectionnum, res.itemnum, False) # make this the only selected item wx.PostEvent(self, ActivateEvent(self.GetId(), item=res.item)) def OnRightDown(self, evt): self.SetFocus() actualx,actualy=self.CalcUnscrolledPosition(evt.GetX(), evt.GetY()) res=self.HitTest(actualx, actualy) if res.item is None: self.ClearSelection() else: # if item is not in selection then change selection to item if not self.IsSelectedByNum(res.sectionnum, res.itemnum): self.SetSelectedByNumber(res.sectionnum, res.itemnum) def GetAllItems(self): """Returns all items The return value is a list. Each item in the list is a tuple of (sectionnumber, sectionobject, itemnumber, itemobject)""" res=[] for s,section in enumerate(self.sections): if self.active_section!=None and section.label!=self.active_section: continue for i,item in enumerate(self.items[s]): res.append( (s,section,i,item) ) return res def IsSelectedByNum(self, sectionnum, itemnum): "Returns if the itemnum from sectionnum is selected" return self.selected[sectionnum][itemnum] def IsSelectedByObject(self, itemobj): "Returns if the itemobject is selected" for s,section in enumerate(self.sections): if self.active_section!=None and section.label!=self.active_section: continue for i,item in enumerate(self.items[s]): if item is itemobj: return self.IsSelectedByNum(s,i) raise ValueError("no such item "+itemobj) def GetSelection(self): """Returns the selected items The return value is a list. Each item in the list is a tuple of (sectionnumber, sectionobject, itemnumber, itemobject)""" res=[] for s,section in enumerate(self.sections): if self.active_section!=None and section.label!=self.active_section: continue for i,item in enumerate(self.items[s]): if self.selected[s][i]: res.append( (s,section,i,item) ) return res def ClearSelection(self): self.selected=[ [False]*len(items) for items in self.items] self.Refresh(False) def SelectAll(self): self.selected=[ [True]*len(items) for items in self.items] self.Refresh(False) def SetSelectedByNumber(self, sectionnum, itemnum, add=False): if not add: self.ClearSelection() self.selected[sectionnum][itemnum]=True self.Refresh(False) def SetSelectedByObject(self, itemobj, add=False): if not add: self.ClearSelection() for s,section in enumerate(self.sections): if self.active_section!=None and section.label!=self.active_section: continue for i,item in enumerate(self.items[s]): if item is itemobj: self.selected[s][i]=True self.Refresh(False) return raise ValueError("no such item "+itemobj) def HitTest(self, pointx, pointy): # work out which item this corresponds to origin=self.GetViewStart()[1]*self.VSCROLLPIXELS # used later cury=0 for i, section in enumerate(self.sections): if self.active_section!=None and section.label!=self.active_section: continue if cury<=pointy<=cury+self.sectionheights[i]: # in the section return self.HitTestResult(location=self.HitTestResult.IN_SECTION, sectionnum=i, section=section, sectionx=pointx, sectiony=pointy-cury) if cury>pointy: return self.HitTestResult() cury+=self.sectionheights[i] extrawidth=(self._w-6)-(self.itemsize[i][0]+self.ITEMPADDING)*self.itemsperrow[i] extrawidth/=self.itemsperrow[i] if extrawidth<0: extrawidth=0 # now find items in this section num=0 while num= firstvisible and start <= lastvisible) or \ (start <= firstvisible and end >=lastvisible) class SectionHeader(object): "A generic section header implementation" def __init__(self, label): self.label=label self.InitAttributes() def InitAttributes(self): "Initialise our font and colours" self.font=wx.TheFontList.FindOrCreateFont(20, family=wx.SWISS, style=wx.NORMAL, weight=wx.NORMAL) self.font2=wx.TheFontList.FindOrCreateFont(20, family=wx.SWISS, style=wx.NORMAL, weight=wx.LIGHT) self.fontcolour=wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNTEXT) self.font2colour=wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNSHADOW) dc=wx.MemoryDC() # mac needs a bitmap selected in order to return textextent! if guihelper.IsMac(): dc.SelectObject(wx.EmptyBitmap(100,100)) w,h,d,l=dc.GetFullTextExtent("I", font=self.font) self.height=h+3 self.descent=d def GetHeight(self): return self.height def Draw(self, dc, width): oldc=dc.GetTextForeground() oldf=dc.GetFont() dc.DrawLine(3, self.height-self.descent, width-3, self.height-self.descent) dc.SetTextForeground(self.font2colour) dc.SetFont(self.font2) for xoff in (0,1,2): for yoff in (0,1,2): dc.DrawText(self.label, xoff+3, yoff) dc.SetTextForeground(self.fontcolour) dc.SetFont(self.font) dc.DrawText(self.label, 1+3,1) dc.SetTextForeground(oldc) dc.SetFont(oldf) class Item(object): """A generic item implementation. You don't need to inherit from this - it is mainly to document what you have to implement.""" def Draw(self, dc, width, height, selected): """Draw yourself into the available space. 0,0 will be your top left. Note that the width may be larger than the L{DataSource.GetItemSize} method returned because unused space is spread amongst the items. It will never be smaller than what was returned. You should set the clipping region if necessary. The main display code needs to know the bounding box for each item so that it can tell when an item has been clicked on, as opposed to the white space surrounding an item. By default it clears the bounding box and looks at what area you draw on in this function. If you return None, then that is what happens. Instead you may also return a 4 item tuple of (minx, miny, maxx, maxy) and that will be used. @param dc: The device context to draw into @param width: maximum space to use @param height: maximum space to use @param selected: if the item is currently selected""" raise NotImplementedError() class DataSource(object): """This is the model You don't need to inherit from this - it is mainly to document what you have to implement.""" def GetSections(self): "Return a list of section headers" raise NotImplementedError() def GetItemSize(self, sectionnumber, sectionheader): "Return (width, height of each item)" return (160, 80) def GetItemsFromSection(self,sectionnumber,sectionheader): """Return a list of the items for the section. @param sectionnumber: the index into the list returned by L{GetSections} @param sectionheader: the section header object from that list """ raise NotImplementedError() if __name__=="__main__": def demo(): import wx app=wx.PySimpleApp() import sys import common sys.excepthook=common.formatexceptioneh import wx.html import os import brewcompressedimage import wallpaper import fileinfo import conversions # find bitpim wallpaper directory config=wx.Config("bitpim", style=wx.CONFIG_USE_LOCAL_FILE) p=config.Read("path", "resources") pn=os.path.join(p, "wallpaper") if os.path.isdir(pn): p=pn imagespath=p images=[name for name in os.listdir(imagespath) if name[-4:] in (".bci", ".bit", ".bmp", ".jpg", ".png")] images.sort() #images=images[:9] print imagespath print images class WallpaperManager: def GetImageStatInformation(self,name): return wallpaper.statinfo(os.path.join(imagespath, name)) def GetImageConstructionInformation(self,file): file=os.path.join(imagespath, file) if file.endswith(".mp4") or not os.path.isfile(file): return guihelper.getresourcefile('wallpaper.png'), wx.Image if self.isBCI(file): return file, lambda name: brewcompressedimage.getimage(brewcompressedimage.FileInputStream(file)) # LG phones may return a proprietary wallpaper media file, LGBIT fi=fileinfo.identify_imagefile(file) if fi is not None and fi.format=='LGBIT': return file, conversions.convertfilelgbittobmp return file, wx.Image def isBCI(self, filename): # is it a bci file? return open(filename, "rb").read(4)=="BCI\x00" wx.FileSystem_AddHandler(wallpaper.BPFSHandler(WallpaperManager())) class TestItem(Item): def __init__(self, ds, secnum, itemnum, label): super(TestItem,self).__init__() self.label=label self.ds=ds self.secnum=secnum self.itemnum=itemnum def Draw(self, dc, width, height, selected): # uncomment to see exactly what size is given #dc.DrawRectangle(0,0,width,height) us=dc.GetUserScale() dc.SetClippingRegion(0,0,width,height) hdc=wx.html.HtmlDCRenderer() hdc.SetDC(dc, 1) hdc.SetSize(9999, 9999) # width is deliberately wide so that no wrapping happens hdc.SetHtmlText(self.genhtml(selected), '.', True) hdc.Render(0,0) del hdc # restore scale hdc messes dc.SetUserScale(*us) dc.DestroyClippingRegion() # Linux gets bounding box wrong, so we deliberately return actual size if guihelper.IsGtk(): return (0,0,width,height) elif guihelper.IsMSWindows(): return max(0,dc.MinX()), max(0, dc.MinY()), min(width, dc.MaxX()), min(height, dc.MaxY()) def genhtml(self, selected): if selected: selected='bgcolor="blue"' else: selected="" return """

%s
BMP format
123x925
Camera
""" \ % (selected, images[self.itemnum], self.ds.IMGSIZES[self.secnum][0], self.ds.IMGSIZES[self.secnum][1], self.label, ) class TestDS(DataSource): SECTIONS=("Camera", "Wallpaper", "Oranges", "Lemons") ITEMSIZES=( (240,240), (160,70), (48,48), (160,70) ) IMGSIZES=[ (w-110,h-20) for w,h in ITEMSIZES] IMGSIZES[2]=(16,16) def GetSections(self): return [SectionHeader(x) for x in self.SECTIONS] def GetItemsFromSection(self, sectionnumber, sectionheader): return [TestItem(self, sectionnumber, i, "%s-#%d" % (sectionheader.label,i)) for i in range(len(images))] def GetItemSize(self, sectionnumber, sectionheader): return self.ITEMSIZES[sectionnumber] f=wx.Frame(None, title="Aggregate Display Test") ds=TestDS() d=Display(f,ds, "wallpaper-watermark") f.Show() app.MainLoop() if __debug__ and True: def profile(filename, command): import hotshot, hotshot.stats, os file=os.path.abspath(filename) profile=hotshot.Profile(file) profile.run(command) profile.close() del profile howmany=100 stats=hotshot.stats.load(file) stats.strip_dirs() stats.sort_stats('time', 'calls') stats.print_stats(20) stats.sort_stats('cum', 'calls') stats.print_stats(20) stats.sort_stats('calls', 'time') stats.print_stats(20) sys.exit(0) profile("aggdisplay.prof", "demo()") else: demo() bitpim-1.0.7+dfsg1/src/imp_cal_preset.py0000644001616600161660000005156010665135403016310 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: imp_cal_preset.py 4380 2007-08-29 00:17:07Z djpham $ """ Handle Import Calendar Preset feature """ # System from __future__ import with_statement import calendar import copy import datetime import random import sha # wx import wx import wx.wizard as wiz # BitPim import common_calendar import database import guihelper import imp_cal_wizard import importexport import setphone_wizard # modules constants IMP_OPTION_REPLACEALL=0 IMP_OPTION_ADD=1 IMP_OPTION_PREVIEW=2 IMP_OPTION_MERGE=3 #------------------------------------------------------------------------------- class ImportCalendarDataObject(common_calendar.FilterDataObject): _knownproperties=common_calendar.FilterDataObject._knownproperties+\ ['name', 'type', 'source_id', 'option' ] _knownlistproperties=common_calendar.FilterDataObject._knownlistproperties allproperties=_knownproperties+\ [x for x in _knownlistproperties]+\ [x for x in common_calendar.FilterDataObject._knowndictproperties] importcalendarobjectfactory=database.dataobjectfactory(ImportCalendarDataObject) #------------------------------------------------------------------------------- class ImportCalendarEntry(dict): # a dict class that automatically generates an ID for use with # BitPim database. def __init__(self, data=None): super(ImportCalendarEntry, self).__init__() if data: self.update(data) _persistrandom=random.Random() def _create_id(self): "Create a BitPim serial for this entry" rand2=random.Random() # this random is seeded when this function is called num=sha.new() num.update(`self._persistrandom.random()`) num.update(`rand2.random()`) return num.hexdigest() def _get_id(self): s=self.get('serials', []) _id=None for n in s: if n.get('sourcetype', None)=='bitpim': _id=n.get('id', None) break if not _id: _id=self._create_id() self._set_id(_id) return _id def _set_id(self, id): s=self.get('serials', []) for n in s: if n.get('sourcetype', None)=='bitpim': n['id']=id return self.setdefault('serials', []).append({'sourcetype': 'bitpim', 'id': id } ) id=property(fget=_get_id, fset=_set_id) def validate_properties(self): # validate and remove non-persistent properties as defined in # ImportCalendarDataObject class _del_keys=[x for x in self \ if not x in ImportCalendarDataObject.allproperties] for _key in _del_keys: del self[_key] #------------------------------------------------------------------------------- class FilterDialog(common_calendar.FilterDialog): def __init__(self, parent, id, caption, data): super(FilterDialog, self).__init__(parent, id, caption, []) self.set(data) def _get_from_fs(self): pass def _save_to_fs(self, data): pass #------------------------------------------------------------------------------- class PresetNamePage(setphone_wizard.MyPage): def __init__(self, parent): super(PresetNamePage, self).__init__(parent, 'Calendar Import Preset Name') def GetMyControls(self): vbs=wx.BoxSizer(wx.VERTICAL) vbs.Add(wx.StaticText(self, -1, 'Preset Name:'), 0, wx.ALL|wx.EXPAND, 5) self._name=wx.TextCtrl(self, -1, '') vbs.Add(self._name, 0, wx.ALL|wx.EXPAND, 5) return vbs def ok(self): return bool(self._name.GetValue()) def get(self, data): data['name']=self._name.GetValue() def set(self, data): self._name.SetValue(data.get('name', '')) #------------------------------------------------------------------------------- class PresetFilterPage(setphone_wizard.MyPage): def __init__(self, parent): self._data={} super(PresetFilterPage, self).__init__(parent, 'Calendar Preset Filter') _col_names=({ 'label': 'Start Date:', 'attr': '_start' }, { 'label': 'End Date:', 'attr': '_end' }, { 'label': 'Preset Duration:', 'attr': '_preset' }, { 'label': 'Repeat Events:', 'attr': '_repeat' }, { 'label': 'Alarm Setting:', 'attr': '_alarm' }, { 'label': 'Alarm Vibrate:', 'attr': '_vibrate' }, { 'label': 'Alarm Ringtone:', 'attr': '_ringtone' }, { 'label': 'Alarm Value:', 'attr': '_alarm_value' }, ) def GetMyControls(self): gs=wx.GridBagSizer(5, 10) gs.AddGrowableCol(1) for _row, _col in enumerate(PresetFilterPage._col_names): gs.Add(wx.StaticText(self, -1, _col['label']), pos=(_row, 0), flag=wx.ALIGN_CENTER_VERTICAL) _w=wx.StaticText(self, -1, _col['attr']) setattr(self, _col['attr'], _w) gs.Add(_w, pos=(_row, 1), flag=wx.ALIGN_CENTER_VERTICAL) _btn=wx.Button(self, -1, 'Modify') wx.EVT_BUTTON(self, _btn.GetId(), self._OnFilter) gs.Add(_btn, pos=(_row+1, 0)) return gs def _OnFilter(self, _): with guihelper.WXDialogWrapper(FilterDialog(self, -1, 'Filtering Parameters', self._data), True) as (dlg, retcode): if retcode==wx.ID_OK: self._data.update(dlg.get()) self._populate() def _display(self, key, attr, fmt): # display the value field of this key _v=self._data.get(key, None) getattr(self, attr).SetLabel(_v is not None and eval(fmt) or '') def _populate(self): # populate the display with the filter parameters if self._data.get('preset_date', None) is None: _fmt="'%04d/%02d/%02d'%(_v[0], _v[1], _v[2])" else: _fmt="''" self._display('start', '_start', _fmt) self._display('end', '_end', _fmt) self._display('preset_date', '_preset', "['This Week', 'This Month', 'This Year', 'Next 7 Days'][_v]") self._display('rpt_events', '_repeat', "{ True: 'Import as mutil-single events', False: ''}[_v]") if self._data.get('no_alarm', None): _s='Disable All Alarms' elif self._data.get('alarm_override', None): _s='Set Alarm on All Events' else: _s='Use Alarm Settings from Import Source' self._alarm.SetLabel(_s) self._display('vibrate', '_vibrate', "{ True: 'Enable Vibrate for Alarms', False: ''}[_v]") self._display('ringtone', '_ringtone', "'%s'%((_v != 'Select:') and _v or '',)") self._display('alarm_value', '_alarm_value', "'%d'%_v") def get(self, data): data.update(self._data) def set(self, data): self._data=data self._populate() #------------------------------------------------------------------------------- class ImportOptionPage(imp_cal_wizard.ImportOptionPage): _choices=('Replace All', 'Add', 'Preview', 'Merge') #------------------------------------------------------------------------------- class ImportCalendarPresetWizard(wiz.Wizard): ID_ADD=wx.NewId() def __init__(self, parent, entry, id=-1, title='Calendar Import Preset Wizard'): super(ImportCalendarPresetWizard, self).__init__(parent, id, title) self._data=entry _import_name_page=PresetNamePage(self) _import_type_page=imp_cal_wizard.ImportTypePage(self) _import_source_page=imp_cal_wizard.ImportSourcePage(self) _import_filter_page=PresetFilterPage(self) _import_option=ImportOptionPage(self) wiz.WizardPageSimple_Chain(_import_name_page, _import_type_page) wiz.WizardPageSimple_Chain(_import_type_page, _import_source_page) wiz.WizardPageSimple_Chain(_import_source_page, _import_filter_page) wiz.WizardPageSimple_Chain(_import_filter_page, _import_option) self.first_page=_import_name_page self.GetPageAreaSizer().Add(self.first_page, 1, wx.EXPAND|wx.ALL, 5) wiz.EVT_WIZARD_PAGE_CHANGING(self, self.GetId(), self.OnPageChanging) wiz.EVT_WIZARD_PAGE_CHANGED(self, self.GetId(), self.OnPageChanged) def RunWizard(self, firstPage=None): return super(ImportCalendarPresetWizard, self).RunWizard(firstPage or self.first_page) def OnPageChanging(self, evt): pg=evt.GetPage() if not evt.GetDirection() or pg.ok(): pg.get(self._data) else: evt.Veto() def OnPageChanged(self, evt): evt.GetPage().set(self._data) def get(self): return self._data def GetActiveDatabase(self): return self.GetParent().GetActiveDatabase() def get_categories(self): if self._data.get('data_obj', None): return self._data['data_obj'].get_category_list() return [] #------------------------------------------------------------------------------- class CalendarPreviewDialog(wx.Dialog): ID_ADD=wx.NewId() ID_REPLACE=wx.NewId() ID_MERGE=wx.NewId() def __init__(self, parent, data): super(CalendarPreviewDialog, self).__init__(parent, -1, 'Calendar Import Preview') _vbs=wx.BoxSizer(wx.VERTICAL) _lb=wx.ListBox(self, -1, style=wx.LB_SINGLE|wx.LB_HSCROLL|wx.LB_NEEDED_SB, choices=['%04d/%02d/%02d %02d:%02d - '%x.start+x.description\ for _,x in data.items()]) _vbs.Add(_lb, 0, wx.EXPAND|wx.ALL, 5) _vbs.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5) _hbs=wx.BoxSizer(wx.HORIZONTAL) _btn=wx.Button(self, self.ID_REPLACE, 'Replace All') wx.EVT_BUTTON(self, self.ID_REPLACE, self._OnButton) _hbs.Add(_btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5) _btn=wx.Button(self, self.ID_ADD, 'Add') wx.EVT_BUTTON(self, self.ID_ADD, self._OnButton) _hbs.Add(_btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5) _btn=wx.Button(self, self.ID_MERGE, 'Merge') wx.EVT_BUTTON(self, self.ID_MERGE, self._OnButton) _hbs.Add(_btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5) _hbs.Add(wx.Button(self, wx.ID_CANCEL, 'Cancel'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) _vbs.Add(_hbs, 0, wx.EXPAND|wx.ALL, 5) self.SetSizer(_vbs) self.SetAutoLayout(True) _vbs.Fit(self) def _OnButton(self, evt): self.EndModal(evt.GetId()) #------------------------------------------------------------------------------- class ImportCalendarPresetDialog(wx.Dialog): ID_ADD=wx.NewId() ID_MERGE=wx.NewId() def __init__(self, parent, id, title): self._parent=parent self._data={} self._import_data=None self._buttons=[] super(ImportCalendarPresetDialog, self).__init__(parent, id, title, size=(500, 500)) _vbs=wx.BoxSizer(wx.VERTICAL) _static_bs=wx.StaticBoxSizer(wx.StaticBox(self, -1, 'Available Presets:'), wx.VERTICAL) self._name_lb=wx.ListBox(self, -1, style=wx.LB_SINGLE|wx.LB_NEEDED_SB) wx.EVT_LISTBOX(self, self._name_lb.GetId(), self._set_button_states) _static_bs.Add(self._name_lb, 0, wx.EXPAND|wx.ALL, 5) _vbs.Add(_static_bs, 0, wx.EXPAND|wx.ALL, 5) _vbs.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5) _hbs=wx.BoxSizer(wx.HORIZONTAL) _btn=wx.Button(self, -1, 'Import') wx.EVT_BUTTON(self, _btn.GetId(), self._OnRun) self._buttons.append(_btn) _hbs.Add(_btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5) _btn=wx.Button(self, wx.ID_NEW) wx.EVT_BUTTON(self, _btn.GetId(), self._OnNew) _hbs.Add(_btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5) _btn=wx.Button(self, -1, 'Edit') wx.EVT_BUTTON(self, _btn.GetId(), self._OnEdit) self._buttons.append(_btn) _hbs.Add(_btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5) _btn=wx.Button(self, wx.ID_DELETE) self._buttons.append(_btn) wx.EVT_BUTTON(self, _btn.GetId(), self._OnDel) _hbs.Add(_btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5) _hbs.Add(wx.Button(self, wx.ID_CANCEL), 0, wx.ALIGN_CENTRE|wx.ALL, 5) _vbs.Add(_hbs, 0, wx.ALIGN_CENTRE|wx.ALL, 5) self.SetSizerAndFit(_vbs) if guihelper.IsGtk(): # On Linux, without this, the dialog clips the buttons self.SetSizeHints(-1, 175) self._get_from_fs() self._populate() def _set_button_states(self, _=None): # set the appropriate states of the buttons depending on whether a # listbox item is selected or not _flg=self._name_lb.GetSelection()!=wx.NOT_FOUND [x.Enable(_flg) for x in self._buttons] def _preview_data(self): # Display a preview of data just imported with guihelper.WXDialogWrapper(CalendarPreviewDialog(self, self._import_data.get()), True) as (_dlg, _ret_code): if _ret_code==CalendarPreviewDialog.ID_REPLACE: return wx.ID_OK elif _ret_code==CalendarPreviewDialog.ID_ADD: return self.ID_ADD elif _ret_code==CalendarPreviewDialog.ID_MERGE: return self.ID_MERGE return wx.ID_CANCEL def _get_preset_thisweek(self): # return the dates of (today, Sat) _today=datetime.date.today() _dow=_today.isoweekday()%7 #Sun=0, Sat=6 _end=_today+datetime.timedelta(6-_dow) return ((_today.year, _today.month, _today.day), (_end.year, _end.month, _end.day)) def _get_preset_thismonth(self): # return the dates of (today, end-of-month) _today=datetime.date.today() _end=_today.replace(day=calendar.monthrange(_today.year,_today.month)[1]) return ((_today.year, _today.month, _today.day), (_end.year, _end.month, _end.day)) def _get_preset_thisyear(self): # return the dates of (today, end-of-year) _today=datetime.date.today() _end=_today.replace(month=12, day=31) return ((_today.year, _today.month, _today.day), (_end.year, _end.month, _end.day)) def _get_preset_next7(self): # return the dates of (today, today+6) _today=datetime.date.today() _end=_today+datetime.timedelta(days=6) return ((_today.year, _today.month, _today.day), (_end.year, _end.month, _end.day)) def _adjust_filter_dates(self, entry): # Adjust the start/end dates of the filter _preset_date=entry.get('preset_date', None) if _preset_date is None: # No Preset date, bail return entry['start'], entry['end']=getattr(self, ['_get_preset_thisweek', '_get_preset_thismonth', '_get_preset_thisyear', '_get_preset_next7'][_preset_date])() @guihelper.BusyWrapper def _OnRun(self, _): _idx=self._name_lb.GetSelection() if _idx==wx.NOT_FOUND: return _entry=self._data[self._name_lb.GetClientData(_idx)] _my_type=_entry['type'] _info=[x for x in importexport.GetCalendarImports() \ if x['type']==_my_type] if not _info: return _info=_info[0] self._import_data=_info['data']() _source=_info['source']() _source.id=_entry['source_id'] with guihelper.WXDialogWrapper(wx.ProgressDialog('Calendar Data Import', 'Importing data, please wait ...', parent=self)) as _dlg: self._import_data.read(_source.get(), _dlg) self._adjust_filter_dates(_entry) self._import_data.set_filter(_entry) global IMP_OPTION_PREVIEW, IMP_OPTION_REPLACEALL, IMP_OPTION_ADD, IMP_OPTION_MERGE _option=_entry.get('option', IMP_OPTION_PREVIEW) if _option==IMP_OPTION_PREVIEW: _ret_code=self._preview_data() elif _option==IMP_OPTION_ADD: _ret_code=self.ID_ADD elif _option==IMP_OPTION_MERGE: _ret_code=self.ID_MERGE else: _ret_code=wx.ID_OK self.EndModal(_ret_code) def _OnNew(self, _): _entry=ImportCalendarEntry() with guihelper.WXDialogWrapper(ImportCalendarPresetWizard(self, _entry)) \ as _wiz: if _wiz.RunWizard(): _entry=_wiz.get() self._data[_entry.id]=_entry self._save_to_fs() self._populate() def _OnEdit(self, _): _idx=self._name_lb.GetSelection() if _idx==wx.NOT_FOUND: return _key=self._name_lb.GetClientData(_idx) _entry=self._data[_key].copy() with guihelper.WXDialogWrapper(ImportCalendarPresetWizard(self, _entry)) \ as _wiz: if _wiz.RunWizard(): _entry=ImportCalendarEntry(_wiz.get()) del self._data[_key] self._data[_entry.id]=_entry self._save_to_fs() self._populate() def _OnDel(self, _): _idx=self._name_lb.GetSelection() if _idx==wx.NOT_FOUND: return _key=self._name_lb.GetClientData(_idx) del self._data[_key] self._save_to_fs() self._populate() def _populate(self): # populate the listbox with the name of the presets self._name_lb.Clear() for _key, _entry in self._data.items(): self._name_lb.Append(_entry['name'], _key) self._set_button_states() def _expand_item(self, entry): item={} item.update(entry) if item.has_key('categories'): del item['categories'] if item.has_key('start'): del item['start'] if entry['start']: item['start']=[{'year': entry['start'][0], 'month': entry['start'][1], 'day': entry['start'][2] }] if item.has_key('end'): del item['end'] if entry['end']: item['end']=[{'year': entry['end'][0], 'month': entry['end'][1], 'day': entry['end'][2] }] return item def _collapse_item(self, entry): item={} item.update(entry) item['categories']=None if item.has_key('start') and item['start']: _d0=item['start'][0] item['start']=(_d0['year'], _d0['month'], _d0['day']) else: item['start']=None if item.has_key('end') and item['end']: _d0=entry['end'][0] item['end']=(_d0['year'], _d0['month'], _d0['day']) else: item['end']=None return item def _get_from_fs(self): # read the presets data from DB _data=self._parent.GetActiveDatabase().getmajordictvalues('imp_cal_preset', importcalendarobjectfactory) self._data={} for _, _val in _data.items(): _entry=ImportCalendarEntry(self._collapse_item(_val)) self._data[_entry.id]=_entry self._populate() def _save_to_fs(self): _data={} for _key, _entry in self._data.items(): _entry.validate_properties() _data[_key]=self._expand_item(_entry) database.ensurerecordtype(_data, importcalendarobjectfactory) self._parent.GetActiveDatabase().savemajordict('imp_cal_preset', _data) def get(self): if self._import_data: return self._import_data.get() return {} def get_categories(self): if self._import_data: return self._import_data.get_category_list() return [] def GetActiveDatabase(self): return self._parent.GetActiveDatabase() #------------------------------------------------------------------------------- # Testing if __name__=="__main__": app=wx.PySimpleApp() f=wx.Frame(None, title='imp_cal_preset') _data=ImportCalendarEntry() _data.id with guihelper.WXDialogWrapper(ImportCalendarPresetWizard(f, _data)) \ as w: print 'RunWizard:',w.RunWizard() print 'Data:',w.get() bitpim-1.0.7+dfsg1/src/commport.py0000644001616600161660000004132610711734767015173 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: commport.py 4436 2007-10-30 23:10:47Z djpham $ """Encapsulates the serial port device""" import serial import sys import common import time import threading import data_recording try: import native.usb as usb except: usb=None # have to work around an annoying bug in LGE drivers try: import pywintypes except: pywintypes=None class CommTimeout(Exception): def __init__(self, str=None, partial=None): Exception.__init__(self, str) self.partial=partial class ATError(Exception): def __init__(self, str=None, partial=None): Exception.__init__(self, str) self.partial=partial class CommConnection: usbwhine=0 def __init__(self, logtarget, port, baud=115200, timeout=3, hardwareflow=0, softwareflow=0, autolistfunc=None, autolistargs=None, configparameters=None): self._brokennotifications=0 self.ser=None self.port=port self.logtarget=logtarget self.clearcounters() if usb is None and self.usbwhine<1: self.log("USB support is not available") self.success=False self.shouldloop=False self.ports=None self.autolistfunc=autolistfunc self.autolistargs=autolistargs self.configparameters=configparameters self.params=(baud,timeout,hardwareflow,softwareflow) self.readahead="" assert port!="auto" or (port=="auto" and autolistfunc is not None) if autolistfunc is not None: self._isauto=True else: self._isauto=False if port=="auto": self.log("Auto detected port requested") self.NextAutoPort() else: self._openport(self.port, *self.params) def IsAuto(self): return self._isauto def close(self): if self.ser is not None: try: # sometimes this gives invalid handles and similar issues self.ser.close() except: pass self.ser=None def _openport(self, port, baud, timeout, hardwareflow, softwareflow, description=None): if data_recording.DR_Play: # we're doing playback, ignore this self.log('Open of comm port ignored') return self.close() self.log("Opening port %s, %d baud, timeout %f, hardwareflow %d, softwareflow %d" % (port, baud, float(timeout), hardwareflow, softwareflow) ) if description is not None: self.log(description) # we try twice since some platforms fail the first time for dummy in range(2): try: self.close() if port.startswith("usb::"): self.ser=self._openusb(port, timeout) else: useport=port if sys.platform=='win32' and port.lower().startswith("com"): useport="\\\\?\\"+port self.ser=serial.Serial(useport, baud, timeout=timeout, rtscts=hardwareflow, xonxoff=softwareflow) self.log("Open of comm port suceeded") self.port=port self.clearcounters() return except serial.serialutil.SerialException,e: if dummy: self.log('Open of comm port failed') raise common.CommsOpenFailure(e.__str__(), port) time.sleep(2) def _openusb(self, name, timeout): self.close() if usb is None: self.log("USB module not available - unable to open "+name) raise Exception("USB module not available - unable to open "+name) _,wantedbus,wanteddev,wantediface=name.split("::") wantediface=int(wantediface) usb.UpdateLists() for bus in usb.AllBusses(): if bus.name()!=wantedbus: continue for device in bus.devices(): if device.name()!=wanteddev: continue for iface in device.interfaces(): if iface.number()!=wantediface: continue return _usbdevicewrapper(iface.openbulk(), timeout) self.log("Failed to find "+name+". You may need to rescan.") raise common.CommsOpenFailure("Failed to find usb device "+name) def reset(self): self._openport(self.port, *self.params) def _refreshautoports(self): # ensure we close current port first self.close() self.ports=self.autolistfunc(*self.autolistargs) assert self.ports is not None self.success=False self.portstried=self.ports def NextAutoPort(self): # do we need to refresh list? if (self.ports is None and self.autolistfunc is not None) or \ ( len(self.ports)==0 and (self.success or self.shouldloop)): self._refreshautoports() self.shouldloop=False # have we run out? if len(self.ports)==0: self.ports=None # so user can retry raise common.AutoPortsFailure(map(lambda x: x[0], self.portstried)) # try first in list self.log("Trying next auto port") description=self.ports[0][1]['description'] self.port=self.ports[0][0] self.ports=self.ports[1:] try: self._openport(self.port, *(self.params+(description,))) except common.CommsOpenFailure: self.NextAutoPort() def clearcounters(self): self.readbytes=0 self.readrequests=0 self.writebytes=0 self.writerequests=0 def log(self, str): if self.logtarget: self.logtarget.log(self.port+": "+str) def logdata(self, str, data, data_type=None): if self.logtarget: self.logtarget.logdata(self.port+": "+str, data, None, data_type) def setbaudrate(self, rate): """Change to the specified baud rate @rtype: Boolean @returns: True on success, False on failure """ try: self.ser.setBaudrate(rate) self.log("Changed port speed to "+`rate`) time.sleep(.5) return True except SilentException: return False except Exception,e: self.log("Port speed "+`rate`+" not supported") return False def setdtr(self, dtr): """Set or Clear DTR @rtype: Boolean @returns: True on success, False on failure """ try: self.ser.setDTR(dtr) self.log("DTR set to "+`dtr`) return True except SilentException: return False def setrts(self, rts): """Set or Clear RTS @rtype: Boolean @returns: True on success, False on failure """ try: self.ser.setRTS(rts) self.log("RTS set to "+`rts`) return True except SilentException: return False def _write(self, data, log=True): self.writerequests+=1 # if we're doing data play back, just ignore this, for now! if data_recording.DR_Play: return if log or data_recording.DR_On: self.logdata("Writing", data, data_recording.DR_Type_Write) self.ser.write(data) self.writebytes+=len(data) def write_thread(self, data, log): try: self._write(data, log) self._write_res=True except Exception,e: self.log('Write Exception: '+str(e)) def write(self, data, log=True): _t=threading.Thread(target=self.write_thread, args=(data, log)) self._write_res=False _t.start() _t.join(self.params[1]+1) if _t.isAlive(): _t._Thread__stop() if not self._write_res: raise CommTimeout() def sendatcommand(self, atcommand, ignoreerror=False, retry=False): #print "sendatcommand: "+atcommand if not data_recording.DR_Play: # Flush leftover characters b=self.ser.inWaiting() if b: self.read(b,0) fullline="AT"+atcommand self.write(str(fullline+"\r\n")) # Cache response try: self.readatresponse(ignoreerror) except CommTimeout: if retry: # try to read a response 1 more time self.readatresponse(ignoreerror) else: raise res=[] line=self.getcleanline() if line==fullline: line=self.getcleanline() while line!="OK" and line: if line=="ERROR": if not ignoreerror: raise ATError else: res.append(line) line=self.getcleanline() return res def peekline(self): return self.getcleanline(peek=True) def getcleanline(self, peek=False): i=0 sbuf=self.readahead if len(sbuf)==0: return "" while sbuf[i]!='\n' and sbuf[i]!='\r': i+=1 firstline=sbuf[0:i] if not peek: i+=1 while i=0 or (res.find("ERROR\r")>=0 and not ignoreerror): break continue r=self.read(1,0) if len(r): res=res+r continue break while len(res)>0 and (res[0]=='\n' or res[0]=='\r'): res=res[1:] if len(res)==0: self.logdata("Reading remaining data", '', data_recording.DR_Type_Read_ATResponse) raise CommTimeout() self.readbytes+=len(res) self.readahead=res if log or data_recording.DR_On: self.logdata("Reading remaining data", res, data_recording.DR_Type_Read_ATResponse) return def readline(self): return self.getcleanline(peek=False) def _isbrokendriver(self, e): if pywintypes is None or not isinstance(e, pywintypes.error) or e[0]!=121: return False return True def _brokendriverread(self, numchars): # we handle timeouts ourselves in this code self._brokennotifications+=1 if self._brokennotifications==3: self.log("This driver is broken - enabling workaround") basetime=time.time() while time.time()-basetime= numchars: break b=self.ser.inWaiting() if b: res=res+self.read(b,0) continue r=self.read(1,0) if len(r): res=res+r continue break if len(res)==0: raise CommTimeout() self.readbytes+=len(res) if log or data_recording.DR_On: self.logdata("Reading remaining data", res, data_recording.DR_Type_Read_Some) return res def readuntil(self, char, log=True, logsuccess=True, numfailures=0): # Keeps reading until it hits char self.readrequests+=1 if data_recording.DR_Play: return data_recording.get_data(data_recording.DR_Type_Read_Until) if False: # don't log this anymore self.logdata("Begin reading until 0x%02x" % (ord(char),), None) # set numfailures to non-zero for retries on timeouts res='' while len(res)==0 or res[-1]!=char: if hasattr(self.ser, 'readuntil'): # usb does it directly res2=self.ser.readuntil(char) b=-99999 else: b=self.ser.inWaiting() if b<1: b=1 res2=self.read(b,0) if len(res2)<1: if numfailures==0: if log: self.log("Timed out waiting for %02x, requested bytes %d - %d bytes read" % (ord(char), b, len(res))) self.logdata("Incomplete read was", res) self.readbytes+=len(res) raise CommTimeout(partial=res) else: numfailures-=1 self.log("Timed out - flushing and trying again") res=res+res2 self.readbytes+=len(res) if logsuccess or data_recording.DR_On: self.logdata("Read completed", res, data_recording.DR_Type_Read_Until) return res # these methods here consolidate calls, which makes the BitFling stuff a lot faster due # to fewer roundtrips def writethenreaduntil(self, data, logwrite, char, logreaduntil=True, logreaduntilsuccess=True, numfailures=1): self.write(data, logwrite) return self.readuntil(char, logreaduntil, logreaduntilsuccess, numfailures) class SilentException(Exception): pass class _usbdevicewrapper: def __init__(self, dev, timeout): self.dev=dev self.timeout=int(timeout*1000) def inWaiting(self): # This will cause one byte at a time reads in the other code. # It isn't really possible to fix until we have built in # buffering for the comm stuff. return 0 def read(self, numchars=1): return self.dev.read(numchars, self.timeout) def flushInput(self): self.dev.resetep() def write(self, data): self.dev.write(data, self.timeout) def close(self): self.dev.close() def readuntil(self, char): # try and get it all in one shot try: data=self.dev.read(999999, self.timeout) if len(data) and data[-1]==char: return data except usb.USBException: # ahh, buggy hardware or something self.dev.resetep() data="" # do it the old fashioned way basetime=time.time() while 1000*(time.time()-basetime) ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: calendarentryeditor.py 4708 2008-09-06 04:10:44Z djpham $ from __future__ import with_statement import calendar import copy import datetime import time import wx import wx.lib import wx.lib.masked.textctrl import wx.lib.intctrl import wx.lib.scrolledpanel as scrolled import bpcalendar import field_color import helpids import phonebookentryeditor as pb_editor import pubsub import guihelper import guiwidgets widgets_list=[] class RepeatEditor(pb_editor.DirtyUIBase): _repeat_type= { 'daily': 1, 'weekly': 2, 'monthly': 3, 'yearly': 4 } _repeat_options=('None', 'Daily', 'Weekly', 'Monthly', 'Yearly') _dow=('Sun', 'Mon', 'Tues', 'Wed', 'Thu', 'Fri', 'Sat') _monthly_nth_day=('First', 'Second', 'Third', 'Fourth', 'Last') _daily_option_index=0 _weekly_option_index=1 _monthly_option_index=2 _weekly_wkst_str=(None, 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun') _weekly_wkst_idx=(7, 1, 2, 3, 4, 5, 6) def __init__(self, parent, _): global widgets_list pb_editor.DirtyUIBase.__init__(self, parent) # overall container self._main_bs=wx.BoxSizer(wx.VERTICAL) # vertical sizebox & checkboxes for different repreat options hbs_1=wx.BoxSizer(wx.HORIZONTAL) self._repeat_option_rb = wx.RadioBox( self, -1, "Repeat Types:", wx.DefaultPosition, wx.DefaultSize, self._repeat_options, 1, wx.RA_SPECIFY_COLS) widgets_list.append((self._repeat_option_rb, 'repeat')) wx.EVT_RADIOBOX(self, self._repeat_option_rb.GetId(), self.OnRepeatType) hbs_1.Add(self._repeat_option_rb, 0, wx.LEFT, 5) # daily options widgets self._option_bs=wx.BoxSizer(wx.VERTICAL) _box=wx.StaticBox(self, -1, 'Daily Options:') widgets_list.append((_box, 'repeat')) vbs=wx.StaticBoxSizer(_box, wx.VERTICAL) hbs=wx.BoxSizer(wx.HORIZONTAL) self._dl_every_nday=wx.RadioButton(self, -1, 'Every ', style=wx.RB_GROUP) self._dl_every_nday.SetValue(True) self._dl_every_wday=wx.RadioButton(self, -1, 'Every Weekday') wx.EVT_RADIOBUTTON(self, self._dl_every_nday.GetId(), self.OnDirtyUI) wx.EVT_RADIOBUTTON(self, self._dl_every_wday.GetId(), self.OnDirtyUI) hbs.Add(self._dl_every_nday, 0, wx.LEFT, 0) self._dl_interval=wx.TextCtrl(self, -1, '1') wx.EVT_TEXT(self, self._dl_interval.GetId(), self.OnDirtyUI) hbs.Add(self._dl_interval, 0, wx.LEFT, 0) hbs.Add(wx.StaticText(self, -1, ' day(s)'), 0, wx.LEFT, 0) vbs.Add(hbs, 0, wx.LEFT|wx.TOP, 10) vbs.Add(self._dl_every_wday, 0, wx.LEFT, 10) self._option_bs.Add(vbs, 0, wx.LEFT, 5) self._daily_option_bs=vbs # weekly options widgets _box=wx.StaticBox(self, -1, 'Weekly Options:') widgets_list.append((_box, 'repeat')) vbs=wx.StaticBoxSizer(_box, wx.VERTICAL) hbs=wx.BoxSizer(wx.HORIZONTAL) hbs.Add(wx.StaticText(self, -1, 'Every '),0, wx.LEFT, 0) self._wl_interval=wx.TextCtrl(self, -1, '1') wx.EVT_TEXT(self, self._wl_interval.GetId(), self.OnDirtyUI) hbs.Add(self._wl_interval, 0, wx.LEFT, 0) hbs.Add(wx.StaticText(self, -1, ' week(s)'), 0, wx.LEFT, 0) vbs.Add(hbs, 0, wx.LEFT|wx.TOP, 10) vbs.Add(wx.StaticText(self, -1, 'On:'), 0, wx.LEFT, 10) hbs=wx.GridSizer(2, 4) self._wl_dow={} for i, n in enumerate(self._dow): self._wl_dow[i]=wx.CheckBox(self, -1, n) wx.EVT_CHECKBOX(self, self._wl_dow[i].GetId(), self.OnDirtyUI) hbs.Add(self._wl_dow[i], 0, wx.LEFT|wx.TOP, 5) vbs.Add(hbs, 0, wx.LEFT, 5) hbs=wx.BoxSizer(wx.HORIZONTAL) hbs.Add(wx.StaticText(self, -1, 'Week starts on:'), 0, wx.LEFT, 10) self._wl_wkst=wx.ComboBox(self, -1, value=self._dow[0], choices=self._dow, style=wx.CB_READONLY) wx.EVT_COMBOBOX(self, self._wl_wkst.GetId(), self.OnDirtyUI) hbs.Add(self._wl_wkst, 0, wx.LEFT, 5) vbs.Add(hbs, 0, wx.TOP, 10) self._option_bs.Add(vbs, 0, wx.LEFT, 5) self._weekly_option_bs=vbs # monthly option widgets _box=wx.StaticBox(self, -1, 'Monthly Options:') widgets_list.append((_box, 'repeat')) vbs=wx.StaticBoxSizer(_box, wx.VERTICAL) hbs=wx.BoxSizer(wx.HORIZONTAL) hbs.Add(wx.StaticText(self, -1, 'Every '),0, wx.LEFT, 0) self._ml_interval=wx.TextCtrl(self, -1, '1') wx.EVT_TEXT(self, self._ml_interval.GetId(), self.OnDirtyUI) hbs.Add(self._ml_interval, 0, wx.LEFT, 0) hbs.Add(wx.StaticText(self, -1, ' month(s)'), 0, wx.LEFT, 0) vbs.Add(hbs, 0, wx.LEFT|wx.TOP, 10) vbs.Add(wx.StaticText(self, -1, 'On:'), 0, wx.LEFT, 10) self._ml_every_nday=wx.RadioButton(self, -1, 'Every nth day', style=wx.RB_GROUP) self._ml_every_nday.SetValue(True) self._ml_every_wday=wx.RadioButton(self, -1, 'Every ') wx.EVT_RADIOBUTTON(self, self._ml_every_nday.GetId(), self.OnDirtyUI) wx.EVT_RADIOBUTTON(self, self._ml_every_wday.GetId(), self.OnDirtyUI) vbs.Add(self._ml_every_nday, 0, wx.LEFT|wx.TOP, 10) hbs=wx.BoxSizer(wx.HORIZONTAL) hbs.Add(self._ml_every_wday, 0, wx.LEFT, 0) self._ml_nth_day=wx.ComboBox(self, -1, value=self._monthly_nth_day[0], choices=self._monthly_nth_day, style=wx.CB_READONLY) self._ml_wday=wx.ComboBox(self, -1, value=self._dow[0], choices=self._dow, style=wx.CB_READONLY) wx.EVT_COMBOBOX(self, self._ml_nth_day.GetId(), self.OnDirtyUI) wx.EVT_COMBOBOX(self, self._ml_wday.GetId(), self.OnDirtyUI) hbs.Add(self._ml_nth_day, 0, wx.LEFT, 5) hbs.Add(self._ml_wday, 0, wx.LEFT, 5) vbs.Add(hbs, 0, wx.LEFT|wx.TOP, 10) self._option_bs.Add(vbs, 0, wx.LEFT, 5) self._monthly_option_bs=vbs hbs_1.Add(self._option_bs, 0, wx.LEFT, 5) self._main_bs.Add(hbs_1, 0, wx.LEFT|wx.TOP, 5) # the exceptions list _box=wx.StaticBox(self, -1, 'Excluded Dates:') widgets_list.append((_box, 'repeat')) hbs=wx.StaticBoxSizer(_box, wx.HORIZONTAL) self._exception_list=wx.ListBox(self, -1) hbs.Add(self._exception_list, 1, wx.LEFT|wx.TOP|wx.EXPAND, 5) exception_del=wx.Button(self, -1, 'Include') wx.EVT_BUTTON(self, exception_del.GetId(), self.OnIncludeException) hbs.Add(exception_del, 0, wx.LEFT|wx.TOP, 5) self._main_bs.Add(hbs, 1, wx.LEFT|wx.TOP|wx.EXPAND, 5) # all done self.SetSizer(self._main_bs) self.SetAutoLayout(True) self._main_bs.Fit(self) self.OnRepeatType(None) def populate(self, data): if data is None: self._repeat_option_rb.SetSelection(0) self._exception_list.Clear() self.OnRepeatType(None) return rt=data.repeat_type if rt==data.daily: self._repeat_option_rb.SetSelection(1) if data.interval: self._dl_every_nday.SetValue(True) self._dl_interval.SetValue(`data.interval`) else: self._dl_every_wday.SetValue(True) self._dl_interval.SetValue('') elif rt==data.weekly: self._repeat_option_rb.SetSelection(2) self._wl_interval.SetValue(`data.interval`) dow_mask=data.dow for i in range(len(self._wl_dow)): b=((1<', '1 - Highest', '2', '3', '4', '5 - Normal', '6', '7' ,'8', '9', '10 - Lowest'], wx.CB_DROPDOWN) else: c=n[self._class_index](self, -1) gs.Add(c, 0, wx.EXPAND, 0) n[self._w_index]=self._w[n[self._dict_key_index]]=c vbs.Add(gs, 0, wx.EXPAND|wx.ALL, 5) # event handlers wx.EVT_CHECKBOX(self, self._w['allday'].GetId(), self.OnAllday) wx.EVT_CHECKBOX(self, self._w['vibrate'].GetId(), self.OnDirtyUI) wx.EVT_COMBOBOX(self, self._w['priority'].GetId(), self.OnDirtyUI) # all done self.SetSizer(vbs) self.SetAutoLayout(True) vbs.Fit(self) def OnMakeDirty(self, evt): self.OnDirtyUI(evt) def OnAllday(self, evt): v=evt.IsChecked() self._w['start'].SetAllday(v) self._w['end'].SetAllday(v) self.OnDirtyUI(evt) def IsValid(self): # validate and return T if so or F otherwise # check for valid date/time entries for w in (self._w['start'], self._w['end']): if not w.IsValid() or w.IsEmpty(): w.SetFocus() wx.Bell() return False # whine if end is before start start=datetime.datetime(*self._w['start'].GetValue()) end=datetime.datetime(*self._w['end'].GetValue()) if start>end: # scold the user guihelper.MessageDialog(self, "End date and time is before start!", "Time Travel Attempt Detected", wx.OK|wx.ICON_EXCLAMATION) # move focus self._w['end'].SetFocus() return False return True def Set(self, data): self.ignore_dirty=True if data is None: for n in self._fields: n[self._w_index].Enable(False) else: for n in self._fields: w=n[self._w_index] w.Enable(True) if n[self._set_index] is None: w.SetValue(getattr(data, n[self._dict_key_index])) else: n[self._set_index](w, data) self.ignore_dirty=self.dirty=False def Get(self, data): self.ignore_dirty=self.dirty=False if data is None: return for n in self._fields: w=n[self._w_index] if n[self._get_index] is None: v=w.GetValue() else: v=n[self._get_index](w, None) setattr(data, n[self._dict_key_index], v) def _set_priority(self, w, entry): p=entry.priority if p is None: w.SetSelection(0) else: w.SetSelection(p) def _get_priority(self, w, _): s=w.GetSelection() if s: return s else: return None def _set_start_datetime(self, w, entry): w.SetAllday(entry.allday, entry.start) def _set_end_datetime(self, w, entry): w.SetAllday(entry.allday, entry.end) #------------------------------------------------------------------------------ class CategoryEditor(pb_editor.DirtyUIBase): # we have to have an entry with a special string for the unnamed string unnamed="Select:" def __init__(self, parent, pos): global widgets_list pb_editor.DirtyUIBase.__init__(self, parent) self.static_box=wx.StaticBox(self, -1, "Category") hs=wx.StaticBoxSizer(self.static_box, wx.HORIZONTAL) self.categories=[] self.category=wx.ListBox(self, -1, choices=self.categories) pubsub.subscribe(self.OnUpdateCategories, pubsub.ALL_CATEGORIES) pubsub.publish(pubsub.REQUEST_CATEGORIES) # a boxsizer for the master category list vbs=wx.BoxSizer(wx.VERTICAL) vbs.Add(wx.StaticText(self, -1, 'Master Category'), 0, wx.TOP|wx.LEFT, 5) vbs.Add(self.category, 1, wx.EXPAND|wx.ALL, 5) hs.Add(vbs, 1, wx.EXPAND|wx.ALL, 5) # a boxsizer for the buttons vbs=wx.BoxSizer(wx.VERTICAL) self.but=wx.Button(self, wx.NewId(), "Manage Categories:") add_btn=wx.Button(self, -1, 'Add ->') del_btn=wx.Button(self, -1, '<- Remove') vbs.Add(self.but, 0, wx.ALIGN_CENTRE|wx.ALL, 5) vbs.Add(add_btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5) vbs.Add(del_btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5) hs.Add(vbs, 0, wx.ALIGN_CENTRE|wx.ALL, 5) wx.EVT_BUTTON(self, add_btn.GetId(), self.OnAddCategory) wx.EVT_BUTTON(self, del_btn.GetId(), self.OnDelCategory) # box sizer for the selected category vbs=wx.BoxSizer(wx.VERTICAL) vbs.Add(wx.StaticText(self, -1, 'Selected Category:'), 0, wx.TOP|wx.LEFT, 5) self._my_category=wx.ListBox(self, -1) vbs.Add(self._my_category, 1, wx.EXPAND|wx.ALL, 5) hs.Add(vbs, 1, wx.EXPAND|wx.ALL, 5) wx.EVT_BUTTON(self, self.but.GetId(), self.OnManageCategories) self.SetSizer(hs) hs.Fit(self) def OnManageCategories(self, _): with guihelper.WXDialogWrapper(pb_editor.CategoryManager(self), True): pass def OnUpdateCategories(self, msg): cats=msg.data[:] if self.categories!=cats: self.categories=cats sel=self.category.GetStringSelection() self.category.Clear() for i in cats: self.category.Append(i) try: if len(sel): self.category.SetStringSelection(sel) except: pass def Get(self): self.ignore_dirty=self.dirty=False r=[] count=self._my_category.GetCount() if count==0: return r for i in range(count): r.append({ 'category': self._my_category.GetString(i) }) return r def Set(self, data): self.ignore_dirty=True self._my_category.Clear() if data is None or len(data)==0: # none or empty list, do nothing return for n in data: v=n.get('category', None) if v is not None: self._my_category.Append(v) self.ignore_dirty=self.dirty=False def OnAddCategory(self, evt): v=self.category.GetStringSelection() if not len(v): # no selection made, do nothing return self.ignore_dirty=True self._my_category.Append(v) self._my_category.SetStringSelection(v) self.ignore_dirty=False self.OnDirtyUI(evt) def OnDelCategory(self, evt): v=self._my_category.GetSelection() if v==wx.NOT_FOUND: # no selection, do nothing return self.ignore_dirty=True self._my_category.Delete(v) self.ignore_dirty=False self.OnDirtyUI(evt) #------------------------------------------------------------------------------ class Editor(wx.Dialog): # results on asking if the user wants to change the original (repeating) entry, just # this instance, or cancel ANSWER_ORIGINAL=1 ANSWER_THIS=2 ANSWER_CANCEL=3 _dict_key_index=0 _label_index=1 _get_index=2 _set_index=3 _w_index=4 # notebook items _general_page=0 _repeat_page=1 _notes_page=2 _categories_page=3 _wallpapers_page=4 _ringtones_page=5 _last_page=6 _items=[ ("General", None, GeneralEditor, None), ("Repeat", 'repeat', RepeatEditor, None), ("Notes", "notes", pb_editor.MemoEditor, 'memo'), ("Categories", "categories", CategoryEditor, 'category'), ("Wallpapers", "wallpapers", pb_editor.WallpaperEditor, 'wallpaper'), ("Ringtones", "ringtones", pb_editor.RingtoneEditor, 'ringtone'), ] color_field_name='calendar' def __init__(self, parent): global widgets_list wx.Dialog.__init__(self, parent, -1, 'Calendar Entry Editor', wx.DefaultPosition, style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER) # the parent is the BPCalenda widget, save it self.cw=parent # also the BPCalendar object # Tracking of the entries in the listbox. Each entry is a dict. Entries are just the # entries in a random order. entrymap maps from the order in the listbox to a # specific entry self.entries=[] self.entrymap=[] self._current_entry=None # Dirty tracking. We restrict what the user can do while editting an # entry to only be able to edit that entry. 'dirty' gets fired when # they make any updates. Annoyingly, controls generate change events # when they are updated programmatically as well as by user interaction. # ignoredirty is set when we are programmatically updating controls self.dirty=None self.ignoredirty=True # overall container vbs=wx.BoxSizer(wx.VERTICAL) self._prev_btn=wx.BitmapButton(self, wx.NewId(), wx.ArtProvider.GetBitmap(guihelper.ART_ARROW_LEFT), name="Previous Day") self._next_btn=wx.BitmapButton(self, wx.NewId(), wx.ArtProvider.GetBitmap(guihelper.ART_ARROW_RIGHT), name="Next Day") self.title=wx.StaticText(self, -1, "Date here", style=wx.ALIGN_CENTRE|wx.ST_NO_AUTORESIZE) # top row container hbs1=wx.BoxSizer(wx.HORIZONTAL) hbs1.Add(self._prev_btn, 0, wx.EXPAND) hbs1.Add(self.title, 1, wx.EXPAND) hbs1.Add(self._next_btn, 0, wx.EXPAND) vbs.Add(hbs1, 0, wx.TOP|wx.EXPAND, 10) # list box and two buttons below self.listbox=wx.ListBox(self, wx.NewId(), style=wx.LB_SINGLE|wx.LB_HSCROLL|wx.LB_NEEDED_SB) self._add_btn=wx.Button(self, wx.ID_NEW) hbs2=wx.BoxSizer(wx.HORIZONTAL) hbs2.Add(self._add_btn, 1, wx.ALIGN_CENTER|wx.LEFT|wx.RIGHT, border=5) # sizer for listbox lbs=wx.BoxSizer(wx.VERTICAL) lbs.Add(self.listbox, 1, wx.EXPAND|wx.BOTTOM, border=5) lbs.Add(hbs2, 0, wx.EXPAND) # right hand bit with all fields self._nb=wx.Notebook(self, -1) self._widgets=[] for i, (name, key, klass, color_name) in enumerate(self._items): if name in ('Ringtones', 'Wallpapers'): self._widgets.append(klass(self._nb, parent, False)) else: self._widgets.append(klass(self._nb, parent)) self._nb.AddPage(self._widgets[i], name) if color_name: widgets_list.append((self._widgets[i].static_box, color_name)) # buttons below fields self._delete_btn=wx.Button(self, wx.ID_DELETE) self._revert_btn=wx.Button(self, wx.ID_REVERT_TO_SAVED) self._save_btn=wx.Button(self, wx.ID_SAVE) hbs4=wx.BoxSizer(wx.HORIZONTAL) hbs4.Add(self._delete_btn, 1, wx.ALIGN_CENTRE|wx.LEFT, border=10) hbs4.Add(self._revert_btn, 1, wx.ALIGN_CENTRE|wx.LEFT|wx.RIGHT, border=10) hbs4.Add(self._save_btn, 1, wx.ALIGN_CENTRE|wx.RIGHT, border=10) # fields and buttons together vbs2=wx.BoxSizer(wx.VERTICAL) vbs2.Add(self._nb, 1, wx.EXPAND|wx.BOTTOM, border=5) vbs2.Add(hbs4, 0, wx.EXPAND|wx.ALIGN_CENTRE) # container for everything below title row hbs3=wx.BoxSizer(wx.HORIZONTAL) hbs3.Add(lbs, 1, wx.EXPAND|wx.ALL, 5) hbs3.Add(vbs2, 2, wx.EXPAND|wx.ALL, 5) vbs.Add(hbs3, 1, wx.EXPAND) # the standard buttons vbs.Add(wx.StaticLine(self, -1, style=wx.LI_HORIZONTAL), 0, wx.EXPAND|wx.ALL, 5) vbs.Add(self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.HELP), 0, wx.ALIGN_CENTRE|wx.ALL, 5) self.SetSizer(vbs) self.SetAutoLayout(True) vbs.Fit(self) # delete is disabled until an item is selected self._delete_btn.Enable(False) wx.EVT_LISTBOX(self, self.listbox.GetId(), self.OnListBoxItem) wx.EVT_LISTBOX_DCLICK(self, self.listbox.GetId(), self.OnListBoxItem) wx.EVT_BUTTON(self, wx.ID_SAVE, self.OnSaveButton) wx.EVT_BUTTON(self, wx.ID_REVERT_TO_SAVED, self.OnRevertButton) wx.EVT_BUTTON(self, wx.ID_NEW, self.OnNewButton) wx.EVT_BUTTON(self, wx.ID_DELETE, self.OnDeleteButton) wx.EVT_BUTTON(self, self._prev_btn.GetId(), self.OnPrevDayButton) wx.EVT_BUTTON(self, self._next_btn.GetId(), self.OnNextDayButton) # callbacks for the standard buttons wx.EVT_BUTTON(self, wx.ID_OK, self.OnOk) wx.EVT_BUTTON(self, wx.ID_CANCEL, self.OnCancel) wx.EVT_BUTTON(self, wx.ID_HELP, lambda _: wx.GetApp().displayhelpid(helpids.ID_EDITING_CALENDAR_EVENTS)) # DIRTY UI Event handlers for w in self._widgets: pb_editor.EVT_DIRTY_UI(self, w.GetId(), self.OnMakeDirty) self.ignoredirty=False self.setdirty(False) guiwidgets.set_size("CalendarEntryEditor", self, 52, 1.0) field_color.reload_color_info(self, widgets_list) pubsub.subscribe(self.OnPhoneChanged, pubsub.PHONE_MODEL_CHANGED) def OnPhoneChanged(self, _): # just reload the color info based on the new phone field_color.reload_color_info(self, widgets_list) self.Refresh() def OnListBoxItem(self, evt=None): """Callback for when user clicks on an event in the listbox""" self._current_entry=self.getcurrententry() if self._current_entry: self.updatefields(self._current_entry) self.setdirty(False) self._delete_btn.Enable(True) def getcurrententry(self): """Returns the entry currently being viewed @Note: this returns the unedited form of the entry""" i=self.listbox.GetSelection() if i==-1: return None return self.getentry(i) def getentry(self, num): """maps from entry number in listbox to an entry in entries @type num: int @rtype: entry(dict)""" return self.entries[self.entrymap[num]] def OnSaveButton(self, evt): """Callback for when user presses save""" # check if the dates are ok if not self._widgets[self._general_page].IsValid(): return # lets roll .. ## entry=self.getcurrententry() entry=self._current_entry # is it a repeat? res=self.ANSWER_ORIGINAL if entry.repeat is not None: # ask the user res=self.AskAboutRepeatChange() if res==self.ANSWER_CANCEL: return # where do we get newentry template from? if res==self.ANSWER_ORIGINAL: newentry=copy.copy(entry) else: newentry=self.cw.newentryfactory(*self.date) # update the fields from the general tab self._widgets[self._general_page].Get(newentry) if res==self.ANSWER_THIS: # change this event only, change the start & end date to this date newentry.start=list(self.date)+list(newentry.start[3:]) newentry.end=list(self.date)+list(newentry.end[3:]) # if we are changing a repeat, reset the new entry's repeat is off newentry.repeat=None else: # get data from the repeat tab newentry.repeat=self._widgets[self._repeat_page].Get() # and other tabs as well newentry.notes=self._widgets[self._notes_page].Get().get('memo', None) newentry.categories=self._widgets[self._categories_page].Get() newentry.wallpaper=self._widgets[self._wallpapers_page].Get().get('wallpaper', None) newentry.ringtone=self._widgets[self._ringtones_page].Get().get('ringtone', None) # got the data # update calendar widget if res==self.ANSWER_ORIGINAL: self.cw.ChangeEntry(entry, newentry) else: # delete the repeat and add this new entry self.cw.DeleteEntryRepeat(entry, *self.date) self.cw.AddEntry(newentry) if __debug__: print 'Editor.OnSaveButton: updated entry:' print newentry.get() print 'Equivalent DB dict:' print bpcalendar.CalendarDataObject(newentry) # tidy up self.setdirty(False) # did the user change the date on us? date=tuple(newentry.start[:3]) if tuple(self.date)!=date: self.cw.showday(*date) self.cw.setselection(*date) self.setdate(*date) else: self.refreshentries() self.updatelistbox(newentry.id) def OnOk(self, evt): # save the current entry & exit guiwidgets.save_size("CalendarEntryEditor", self.GetRect()) if self.dirty: self.OnSaveButton(None) self.setdirty(False) evt.Skip() def OnCancel(self, evt): # just exit guiwidgets.save_size("CalendarEntryEditor", self.GetRect()) self.setdirty(False) evt.Skip() def OnRevertButton(self, evt): # We basically pretend the user has selected the item in the listbox again (which they # can't actually do as it is disabled self.listbox.Enable() self.OnListBoxItem() def OnNewButton(self, evt): entry=self.cw.newentryfactory(*self.date) self.cw.AddEntry(entry) self.refreshentries() self.updatelistbox(entry.id) def OnDeleteButton(self, evt): entry=self._current_entry if entry is None: return # is it a repeat? res=self.ANSWER_ORIGINAL if entry.repeat is not None: # ask the user res=self.AskAboutRepeatDelete() if res==self.ANSWER_CANCEL: return enum=self.listbox.GetSelection() if enum+1=0: # entry before as we are deleting last entry newpos=self.getentry(enum-1).id else: newpos=None if res==self.ANSWER_ORIGINAL: self.cw.DeleteEntry(entry) else: self.cw.DeleteEntryRepeat(entry, *self.date) self.setdirty(False) self.refreshentries() self.updatelistbox(newpos) def OnPrevDayButton(self, evt): d=datetime.date(*self.date)-datetime.timedelta(1) self.setdate(d.year, d.month, d.day) self.cw.setday(d.year, d.month, d.day) def OnNextDayButton(self, evt): d=datetime.date(*self.date)+datetime.timedelta(1) self.setdate(d.year, d.month, d.day) self.cw.setday(d.year, d.month, d.day) def setdate(self, year, month, day, entry=None): """Sets the date we are editing entries for @Note: The list of entries is updated""" d=time.strftime("%A %d %B %Y", (year,month,day,0,0,0, calendar.weekday(year,month,day),1, 0)) self.date=year,month,day self.title.SetLabel(d) self.refreshentries() self.updatelistbox(entry and entry.id or None) self.updatefields(entry) def refreshentries(self): """re-requests the list of entries for the currently visible date from the main calendar""" self.entries=self.cw.getentrydata(*self.date) def updatelistbox(self, entrytoselect=None): """ Updates the contents of the listbox. It will re-sort the contents. @param entrytoselect: The integer id of an entry to select. Note that this is an event id, not an index """ self.listbox.Clear() selectitem=-1 self.entrymap=[] self._current_entry=None # decorate for index, entry in enumerate(self.entries): if entry.allday: e=( entry.start[3:5], entry.end[3:5], entry.description, index) else: e=(None, None, entry.description, index) self.entrymap.append(e) # time ordered self.entrymap.sort() # now undecorate self.entrymap=[index for ign0, ign1, ign2, index in self.entrymap] # add listbox entries for curpos, index in enumerate(self.entrymap): e=self.entries[index] if e.id==entrytoselect: selectitem=curpos self.listbox.Append(e.summary) # Select an item if requested if selectitem>=0: self.listbox.SetSelection(selectitem) self.OnListBoxItem() # update fields else: # disable fields since nothing is selected self.updatefields(None) # disable delete if there are no entries! if len(self.entries)==0: self._delete_btn.Enable(False) def updatefields(self, entry): self.ignoredirty=True self._widgets[self._general_page].Set(entry) # populate the other tabs with current entry data if entry is None: # clear everything out for i in range(self._repeat_page, self._last_page): self._widgets[i].Set(None) self._widgets[i].Enable(False) return # there's data, setting each page accordingly for i in range(self._repeat_page, self._last_page): self._widgets[i].Enable(True) self._widgets[self._repeat_page].Set(entry.repeat) self._widgets[self._notes_page].Set({ 'memo': entry.notes }) self._widgets[self._categories_page].Set(entry.categories) self._widgets[self._wallpapers_page].Set( \ { 'wallpaper': entry.wallpaper, 'type': 'calendar' }) self._widgets[self._ringtones_page].Set( \ { 'ringtone': entry.ringtone, 'type': 'calendar' }) self.ignoredirty=False # called from various widget update callbacks def OnMakeDirty(self, _=None): """A public function you can call that will set the dirty flag""" if self.dirty or self.ignoredirty or not self.IsShown(): # already dirty, no need to make it worse return self.setdirty(True) def setdirty(self, val): """Set the dirty flag The various buttons in the dialog are enabled/disabled as appropriate for the new state. @type val: Bool @param val: True to mark edit fields as different from entry (ie editing has taken place) False to make them as the same as the entry (ie no editing or the edits have been discarded) """ if self.ignoredirty: return self.dirty=val if self.dirty: # The data has been modified, so we only allow working # with this data # enable save, revert, delete self._save_btn.Enable(True) self._revert_btn.Enable(True) # disable close, left, right, new self._prev_btn.Enable(False) self._next_btn.Enable(False) self._add_btn.Enable(False) # can't play with listbox now self.listbox.Enable(False) else: # The data is now clean and saved/reverted or deleted # disable save, revert, self._save_btn.Enable(False) self._revert_btn.Enable(False) # enable delete, close, left, right, new self._delete_btn.Enable(len(self.entries)>0) # only enable if there are entries self._prev_btn.Enable(True) self._next_btn.Enable(True) self._add_btn.Enable(True) # can choose another item in listbox self.listbox.Enable(True) def AskAboutRepeatDelete(self): """Asks the user if they wish to delete the original (repeating) entry, or this instance @return: An C{ANSWER_} constant """ return self._AskAboutRecurringEvent("Delete recurring event?", "Do you want to delete all the recurring events, or just this one?", "Delete") def AskAboutRepeatChange(self): """Asks the user if they wish to change the original (repeating) entry, or this instance @return: An C{ANSWER_} constant """ return self._AskAboutRecurringEvent("Change recurring event?", "Do you want to change all the recurring events, or just this one?", "Change") def _AskAboutRecurringEvent(self, caption, text, prefix): with guihelper.WXDialogWrapper(RecurringDialog(self, caption, text, prefix), True) as (dlg, res): if res==dlg.ID_THIS: return self.ANSWER_THIS if res==dlg.ID_ALL: return self.ANSWER_ORIGINAL if res==dlg.ID_CANCEL: return self.ANSWER_CANCEL assert False #------------------------------------------------------------------------------ # We derive from wxPanel not the control directly. If we derive from # wx.MaskedTextCtrl then all hell breaks loose as our {Get|Set}Value # methods make the control malfunction big time class DVDateTimeControl(wx.Panel): """A datetime control customised to work in the dayview editor""" def __init__(self,parent,id): self._allday=False self._datetime_format="EUDATETIMEYYYYMMDD.HHMM" self._date_format='EUDATEYYYYMMDD.' wx.Panel.__init__(self, parent, -1) self.c=wx.lib.masked.textctrl.TextCtrl(\ self, id, "", autoformat=self._datetime_format, emptyInvalid=True, emptyBackgroundColour='Red', invalidBackgroundColour='Red') bs=wx.BoxSizer(wx.HORIZONTAL) bs.Add(self.c,0,wx.EXPAND) self.SetSizer(bs) self.SetAutoLayout(True) bs.Fit(self) wx.EVT_TEXT(self.c, id, parent.OnMakeDirty) def SetValue(self, v): if v is None: self.c.SetValue("") return if self._allday: str="%04d%02d%02d" % tuple(v[:3]) else: ap="AM" v=list(v) if v[3]>12: v[3]-=12 ap="PM" elif v[3]==0: v[3]=12 elif v[3]==12: ap="PM" v=v+[ap] # we have to supply what the user would type without the punctuation # (try figuring that out from the "doc") str="%04d%02d%02d%02d%02d%s" % tuple(v) self.c.SetValue( str ) self.c.Refresh() def GetValue(self): # The actual value including all punctuation is returned # GetPlainValue can get it with all digits run together str=self.c.GetValue() digits="0123456789" # turn it back into a list res=[] val=None for i in str: if i in digits: if val is None: val=0 val*=10 val+=int(i) else: if val is not None: res.append(val) val=None if val is not None: res.append(val) if len(res)==3: res += [0,0] elif len(res)==5: # fixup am/pm if str[-2]=='P' or str[-2]=='p': if res[3]!=12: # 12pm is midday and left alone res[3]+=12 elif res[3]==12: # 12 am res[3]=0 return res def IsValid(self): return self.c.IsValid() def IsEmpty(self): return self.c.IsEmpty() def SetAllday(self, allday, v=None): if allday==self._allday and v is None: return if v is None: v=self.GetValue() if allday != self._allday: self._allday=allday if self._allday: self.c.SetCtrlParameters(autoformat=self._date_format) else: self.c.SetCtrlParameters(autoformat=self._datetime_format) self.SetValue(v) #------------------------------------------------------------------------------ class DVIntControl(wx.lib.intctrl.IntCtrl): # shows integer values def __init__(self, parent, id): wx.lib.intctrl.IntCtrl.__init__(self, parent, id, limited=True) wx.lib.intctrl.EVT_INT(self, id, parent.OnMakeDirty) def SetValue(self, v): if v is None: v=-1 wx.lib.intctrl.IntCtrl.SetValue(self,int(v)) #------------------------------------------------------------------------------ class DVTextControl(wx.TextCtrl): def __init__(self, parent, id, value=""): if value is None: value="" wx.TextCtrl.__init__(self, parent, id, value) wx.EVT_TEXT(self, id, parent.OnMakeDirty) def SetValue(self, v): if v is None: v="" wx.TextCtrl.SetValue(self,v) #------------------------------------------------------------------------------- ### ### Dialog box for asking the user what they want to for a recurring event. ### Used when saving changes or deleting entries in the DayViewDialog ### class RecurringDialog(wx.Dialog): """Ask the user what they want to do about a recurring event You should only use this as a modal dialog. ShowModal() will return one of: - ID_THIS: change just this event - ID_ALL: change all events - ID_CANCEL: user cancelled dialog""" ID_THIS=1 ID_ALL=2 ID_CANCEL=3 ID_HELP=4 # hide from epydoc def __init__(self, parent, caption, text, prefix): """Constructor @param parent: frame to parent this to @param caption: caption of the dialog (eg C{"Change recurring event?"}) @param text: text displayed in the dialog (eg C{"This is a recurring event. What would you like to change?"}) @param prefix: text prepended to the buttons (eg the button says " this" so the prefix would be "Change" or "Delete") """ wx.Dialog.__init__(self, parent, -1, caption, style=wx.CAPTION) # eveything sits inside a vertical box sizer vbs=wx.BoxSizer(wx.VERTICAL) # the explanatory text t=wx.StaticText(self, -1, text) vbs.Add(t, 1, wx.EXPAND|wx.ALL,10) # horizontal line vbs.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 3) # buttons at bottom buttonsizer=wx.BoxSizer(wx.HORIZONTAL) for id, label in (self.ID_THIS, "%s %s" % (prefix, "this")), \ (self.ID_ALL, "%s %s" % (prefix, "all")), \ (self.ID_CANCEL, "Cancel"), \ (self.ID_HELP, "Help"): b=wx.Button(self, id, label) wx.EVT_BUTTON(self, id, self._onbutton) buttonsizer.Add(b, 5, wx.ALIGN_CENTER|wx.ALL, 5) # plumb in sizers vbs.Add(buttonsizer, 0, wx.EXPAND|wx.ALL,2) self.SetSizer(vbs) self.SetAutoLayout(True) vbs.Fit(self) def _onbutton(self, evt): if evt.GetId()==self.ID_HELP: pass # :::TODO::: some sort of help .. else: self.EndModal(evt.GetId()) bitpim-1.0.7+dfsg1/src/fixedscrolledpanel.py0000644001616600161660000001113310011646507017156 0ustar amuamu""" wx.ScrolledPanel with corrected behaviour. This file has been modified from the original and remains under the same license as the original. (The original is in the wx distribution as lib/scrolledpanel.py. The following changes were made: - Doesn't automatically scroll back to the top when SetupScrolling() is called - OnChildFocus is broken down into one method to get child focus window, and a second method to scroll to make it visible - MakeChildVisible (second method from above) now works correctly if the child is not a direct child of the panel - Changed to use 'import wx.' import style """ ### ### $Id: fixedscrolledpanel.py 911 2004-02-09 09:05:11Z rogerb $ #---------------------------------------------------------------------------- # Name: wx.ScrolledPanel.py # Author: Will Sadkin # Created: 03/21/2003 # Copyright: (c) 2003 by Will Sadkin # RCS-ID: Id: scrolledpanel.py,v 1.1.2.5 2003/09/24 00:22:50 RD Exp # License: wx.Windows license #---------------------------------------------------------------------------- # import wx class wxScrolledPanel( wx.ScrolledWindow ): """ wxScrolledPanel fills a "hole" in the implementation of wx.ScrolledWindow, providing automatic scrollbar and scrolling behavior and the tab traversal management that wx.ScrolledWindow lacks. This code was based on the original demo code showing how to do this, but is now available for general use as a proper class (and the demo is now converted to just use it.) """ def __init__(self, parent, id=-1, pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.TAB_TRAVERSAL, name = "scrolledpanel"): # RB: id parameter wasn't being passed wx.ScrolledWindow.__init__(self, parent, id, pos=pos, size=size, style=style, name=name) wx.EVT_CHILD_FOCUS(self, self.OnChildFocus) def SetupScrolling(self, scroll_x=True, scroll_y=True, rate_x=20, rate_y=20): """ This function sets up the event handling necessary to handle scrolling properly. It should be called within the __init__ function of any class that is derived from wx.ScrolledPanel, once the controls on the panel have been constructed and thus the size of the scrolling area can be determined. """ # The following is all that is needed to integrate the sizer and the # scrolled window. if not scroll_x: rate_x = 0 if not scroll_y: rate_y = 0 # Round up the virtual size to be a multiple of the scroll rate sizer = self.GetSizer() if sizer: w, h = sizer.GetMinSize() if rate_x: w += rate_x - (w % rate_x) if rate_y: h += rate_y - (h % rate_y) self.SetVirtualSize( (w, h) ) self.SetVirtualSizeHints( w, h ) self.SetScrollRate(rate_x, rate_y) # RB: line commented out ##wx.CallAfter(self.Scroll, 0, 0) # scroll back to top after initial events def OnChildFocus(self, evt): # If the child window that gets the focus is not visible, # this handler will try to scroll enough to see it. evt.Skip() child = evt.GetWindow() # RB: broke into two seperate methods self.MakeChildVisible(child) def MakeChildVisible(self, child): if child is self: # bizarrely this gets called return sppu_x, sppu_y = self.GetScrollPixelsPerUnit() vs_x, vs_y = self.GetViewStart() new_vs_x, new_vs_y = -1, -1 widget=child while widget.GetParent() is not self: widget=widget.GetParent() child=widget cpos = child.GetPosition() csz = child.GetSize() # is it before the left edge? if cpos.x < 0 and sppu_x > 0: new_vs_x = vs_x + (cpos.x / sppu_x) # is it above the top? if cpos.y < 0 and sppu_y > 0: new_vs_y = vs_y + (cpos.y / sppu_y) # is it past the right edge ? if cpos.x + csz.width > self.GetClientSize().width and sppu_x > 0: diff = (cpos.x + csz.width - self.GetClientSize().width) / sppu_x new_vs_x = vs_x + diff + 1 # is it below the bottom ? if cpos.y + csz.height > self.GetClientSize().height and sppu_y > 0: diff = (cpos.y + csz.height - self.GetClientSize().height) / sppu_y new_vs_y = vs_y + diff + 1 # if we need to adjust if new_vs_x != -1 or new_vs_y != -1: self.Scroll(new_vs_x, new_vs_y) bitpim-1.0.7+dfsg1/src/sqlite2_file.py0000644001616600161660000001442310454042735015702 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: sqlite2_file.py 3460 2006-07-08 23:55:09Z djpham $ """Handle reading data off an SQLit2 2.x data file""" # System modules import struct # SQLite2 constants # byte order format BO='<' # default to LE signature='** This file contains an SQLite 2.1 database **\x00' signature_len=len(signature) LE_string='\x28\x75\xe3\xda' BE_string='\xda\xe3\x75\x28' Page_Length=1024 Max_Cell_Data_Len=238 # SQLite 2.x file handling stuff------------------------------------------------ class InvalidFile(Exception): def __init__(self, bad_sig): global signature Exception.__init__(self, 'Invalid signature: expecting %s, got %s'%(signature, bad_sig)) self.bad_sig=bad_sig class InvalidByteOrder(Exception): def __init__(self, bad_data): Exception.__init__(self, 'Invalid Byte Order String: %s'%bad_data) self.bad_data=bad_data class BadTable(Exception): def __init__(self, name): Exception.__init__(self, 'Failed to find table: %s'%name) self.name=name class Cell(object): def __init__(self, data): global BO, Max_Cell_Data_Len self.prev_key=struct.unpack('%cI'%BO, data[:4])[0] _key_size=struct.unpack('%cH'%BO, data[4:6])[0] self.next_cell=struct.unpack('%cH'%BO, data[6:8])[0] _keysize_hi=struct.unpack('B', data[8])[0] _datasize_hi=struct.unpack('B', data[9])[0] _data_size=struct.unpack('%cH'%BO, data[10:12])[0] _key_size+=_keysize_hi<<16 _data_size+=_datasize_hi<<16 self.key=struct.unpack('%cI'%BO, data[12:16]) if _data_size>Max_Cell_Data_Len: self.data=data[16:250] self.overflow_page=struct.unpack('%cI'%BO, data[250:254])[0] else: self.data=data[16:16+_data_size] self.overflow_page=0 self.data_size=_data_size def get_data(self, page, db_file): global Max_Cell_Data_Len _res=[] if self.prev_key: _res=db_file.get_data(self.prev_key) _my_data=self.data if self.overflow_page: _my_data+=db_file.get_data(self.overflow_page, self.data_size-Max_Cell_Data_Len) _res.append(_my_data) if self.next_cell: _res+=page.get_cell_data(self.next_cell, db_file) return _res class Page(object): def __init__(self, data): global BO, Page_Length self.prev_key=struct.unpack('%cI'%BO, data[:4])[0] self.cell0=struct.unpack('%cH'%BO, data[4:6])[0] self.freeblock=struct.unpack('%cH'%BO, data[6:8])[0] self.data=data[:Page_Length] def get_cell_data(self, offset, db_file): return Cell(self.data[offset:]).get_data(self, db_file) def get_data(self, db_file, _=None): # return the payload of this page _res=[] if self.prev_key: _res=db_file.get_data(self.prev_key) _res+=self.get_cell_data(self.cell0, db_file) return _res class Page1(object): def __init__(self, data): global signature, BO, signature_len, LE_string, BE_string _sig=data[:signature_len] if _sig!=signature: raise InvalidFile(_sig) _idx=signature_len _bo_string=data[_idx:_idx+4] if _bo_string==LE_string: BO='<' elif _bo_string==BE_string: BO='>' else: raise InvalidByteOrder(_bo_string) _idx+=4 self.first_free_page=struct.unpack('%cI'%BO, data[_idx:_idx+4])[0] _idx+=4 self.freelist_pages=struct.unpack('%cI'%BO, data[_idx:_idx+4])[0] class OverflowPage(object): Max_Len=1020 def __init__(self, data): global BO, Page_Length self.next=struct.unpack('%cI'%BO, data[:4])[0] self.data=data[4:Page_Length] def get_data(self, db_file, data_size=None): if data_size: if data_size>self.Max_Len: _res=self.data if self.next: _res+=db_file.get_data(self.next, data_size-self.Max_Len) else: _res=self.data[:data_size] else: _res=self.data return _res class DBFile(object): def __init__(self, data): self.data=data self.page1=Page1(data) self.tables=self._get_tables() def get_data(self, page_num, data_size=None): global Page_Length if not page_num: return [] # We cheat here a bit since we know the page length is 1k ## _pg_ofs=(page_num-1)*Page_Length _pg_ofs=(page_num-1)<<10 if data_size: return OverflowPage(self.data[_pg_ofs:_pg_ofs+Page_Length]).get_data(self, data_size) return Page(self.data[_pg_ofs:_pg_ofs+Page_Length]).get_data(self) def extract_data(self, data, numofcols): # extract one string of data in to a list of numofcols _data_len=len(data) if _data_len<256: _ofs_size=1 elif _data_len<65536: _ofs_size=2 else: _ofs_size=3 _idx=(numofcols+1)*_ofs_size return data[_idx:].split('\x00')[:numofcols] def _get_tables(self): # build a list of tables in this DB _res={} # the master table is stored in page 2, and has 5 fields for _entry in self.get_data(2): _row=self.extract_data(_entry, 5) if _row[0]=='table': _res[_row[1]]={ 'name': _row[1], 'page': int(_row[3]), 'numofcols': _row[4].count(',')+1 } return _res def get_table_data(self, table_name): # return a list of rows of this table, each row is a list of values if not self.tables.has_key(table_name): raise BadTable(table_name) _page=self.tables[table_name]['page'] _numofcols=self.tables[table_name]['numofcols'] _res=[] for _entry in self.get_data(_page): _res.append(self.extract_data(_entry, _numofcols)) return _res bitpim-1.0.7+dfsg1/src/mp4_file.py0000644001616600161660000001304011154113447015006 0ustar amuamu### BITPIM ### ### Copyright (C) 2009 Nathan Hjelm ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### """ Deal with MPEG4 file format""" # System modules import struct # BitPim modules # constants MP4_File_Type_Header = "ftyp" MP4_STSZ_Atom_Tag = "stsz" MP4_MDHD_Atom_Tag = "mdhd" MP4_META_Atom_Tag = "meta" #------------------------------------------------------------------------------- class MP4_STSZ_Atom(object): def __init__ (self, data): if data[4:8] != MP4_STSZ_Atom_Tag: raise if struct.unpack ('>L', data[0:4])[0] < 0x14: raise self.numSamples = struct.unpack ('>L', data[16:20])[0] self.average = 0.0 self.audibleSamples = None _silentSamples = 0 # 8 for atom header + 12 for sample count and other stuff _dataOffset = 20 for i in range (self.numSamples): _sampleSize = struct.unpack ('>L', data[_dataOffset:_dataOffset+4])[0] if _sampleSize == 7: _silentSamples += 1 else: self.average += float(_sampleSize) _dataOffset += 4 self.audibleSamples = self.numSamples - _silentSamples self.average = self.average * 8.0/float(self.audibleSamples) def getBitrate(self, timescale): _bitrate = int((self.average * float(timescale)/1000.0)/1000.0) _lossless = None if _bitrate - 32 > 320: # handle lossless files self.average *= 1000.0/4096.0; _bitrate = int((self.average * float(timescale)/1000.0)/1000.0) return _bitrate class MP4_Media_Header(object): def __init__ (self, data): if data[4:8] != MP4_MDHD_Atom_Tag: raise self.timeScale = struct.unpack ('>L', data[20:24])[0] # song duration is in Hz/second self.duration = struct.unpack ('>L', data[24:28])[0] def getTimescale (self): return self.timeScale def getDuration (self): return self.duration/self.timeScale class MP4_Meta_Data(object): def __init__ (self, data): if data[4:8] != MP4_META_Atom_Tag: raise self.title = None self.album = None self.artist = None _offset = 12 while 1: _size = struct.unpack ('>L', data[offset:offset + 4])[0] _tag = data[offset+5:offset+8] _tag1 = data[offset+4:offset+8] _dataSize = struct.unpack ('>L', data[offset + 8:offset + 12])[0] _tagData = data[offset + 24:offset + 8 + _dataSize] if _tag1 == "free": break if _tag == "nam": self.title = _tagData if _tag == "ART": self.artist = _tagData if _tag == "alb": self.album = _tagData def getTitle (self): return self.title def getArtist (self): return self.artist def getAlbum (self): return self.album #------------------------------------------------------------------------------- class MP4_File(object): def __init__(self, file_wrapper): global Object_Table, ASF_Header_Object_GUID self.valid=False self.duration = None self.bitrate = None self.samplerate = None self.title = None self.artist = None self.album = None self.STSZAtom = None self.mediaHeader = None self.metaData = None if file_wrapper.size<24 or file_wrapper.GetBytes(4,4)!=MP4_File_Type_Header: return type_id = file_wrapper.GetBytes(8,4) if type_id != 'M4A ' and type_id != "mp42" and type_id != "isom": return # initial file offset (skipping the FTYP atom) _offset = struct.unpack ('>L', file_wrapper.GetBytes(0, 4))[0]; while 1: try: _size = struct.unpack ('>L', file_wrapper.GetBytes(_offset, 4))[0]; _type = file_wrapper.GetBytes(_offset + 4, 4); except: break if _size == 0: break try: if _type == MP4_STSZ_Atom_Tag and self.STSZAtom == None: self.STSZAtom = MP4_STSZ_Atom (file_wrapper.GetBytes (_offset, _size)) elif _type == MP4_MDHD_Atom_Tag and self.mediaHeader == None: self.mediaHeader = MP4_Media_Header (file_wrapper.GetBytes (_offset, _size)) elif _type == MP4_META_Atom_Tag: self.metaData = MP4_Meta_Data (file_wrapper.GetBytes (_offset, _size)) except: pass if not self.isContainerAtom(_type): _offset = _offset + _size else: _offset = _offset + 8 if self.mediaHeader: self.duration = self.mediaHeader.getDuration () self.samplerate = self.mediaHeader.getTimescale () if self.STSZAtom: self.STSZAtom.getBitrate (self.mediaHeader.getTimescale ()) self.valid = True if self.metaData: self.artist = self.metaData.getArtist () self.album = self.metaData.getAlbum () self.title = self.metaData.getTitle () def isContainerAtom (self, _type): return (_type == "trak" or _type == "mdia" or _type == "moov" or _type == "stbl" or _type == "minf" or _type == "dinf" or _type == "udta") bitpim-1.0.7+dfsg1/src/developer.py0000644001616600161660000000741510556567274015325 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: developer.py 3944 2007-01-27 06:18:36Z djpham $ "The magic developer console" import wx import wx.html import wx.py import widgets class DeveloperPanel(wx.Panel, widgets.BitPimWidget): def __init__(self, parent, locals=None): wx.Panel.__init__(self, parent) split=wx.SplitterWindow(self, style = wx.SP_3D| wx.SP_LIVE_UPDATE) if locals is None: self.locals={} else: self.locals=locals.copy() self.locals.update(self.getlocals()) cmd=wx.py.shell.Shell(split, locals=self.locals, introText=self.introtext) self.htmlw=wx.html.HtmlWindow(split) split.SetMinimumPaneSize(20) split.SplitHorizontally(cmd, self.htmlw) vbs=wx.BoxSizer(wx.VERTICAL) vbs.Add(split, 1, wx.EXPAND) self.SetSizer(vbs) introtext=""" Welcome to the BitPim developer shell You can do any standard Python stuff here you want. For example you can import the various modules, access functions and variables etc. The following shortcuts are also available: Database: sql("your sql here", bindings=()) -- runs query and displays results tables() -- displays list of all tables and their schema rows("tablename") -- shows all rows in named table Useful variables: wx -- the wxPython module app -- the application instance mw -- the main window instance """ def getlocals(self): return { 'sql': self.sql, 'wx': wx, 'app': wx.GetApp(), 'mw': wx.GetApp().frame, 'tables': self.tables, 'rows': self.rows, } def sql(self, cmd, bindings=()): "Executes sql statement and prints result" desc=False for row in self.locals['db'].sql(cmd,bindings): if not desc: print "#",self.locals['db'].cursor.getdescription() desc=True print row def tables(self): "Gets list of all tables" cursor=self.locals['db'].cursor html="

All tables

" html+="" for name,s in cursor.execute("select name,sql from sqlite_master where type='table' order by name"): html+="" % (name, htmlify(s)) html+="
 
%s
%s
" self.htmlw.SetPage(html) def rows(self, table, wheres=None): "Shows rows from table" cursor=self.locals['db'].cursor html="

All rows in %s

" % (htmlify(table),) statement="select * from [%s]"%table if wheres: statement+=" where "+wheres cursor.execute(statement) try: cursor.getdescription() except: html+="

No data" self.htmlw.SetPage(html) return html+="" html+="" for col in cursor.getdescription(): html+="" for vals in cursor: html+="" for v in vals: try: html+="" html+="
%s
%s" % (htmlify(col[0]), `col[1]`) html+="
%s" % (htmlify(str(v)),) except Exception,e: html+="Exception: %s"%htmlify(str(e)) html+="
" self.htmlw.SetPage(html) def htmlify(s): return s.replace("&", "&").replace("<", "<").replace(">", ">") bitpim-1.0.7+dfsg1/src/gcal_calendar.py0000644001616600161660000001511510664053762016063 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: gcal_calendar.py 4375 2007-08-25 16:25:22Z djpham $ "Deals with Google Calendar (gCalendar) import stuff" # system modules from __future__ import with_statement import urllib2 # site modules import wx # local modules import common_calendar import database import guihelper import ical_calendar as ical import vcal_calendar as vcal module_debug=False #------------------------------------------------------------------------------- class ImportDataSource(common_calendar.ImportDataSource): # how to define, and retrieve calendar import data source message_str='Select a Google Calendar iCal URL' def browse(self, parent=None): # how to select a source, default to select a file if parent is None or not hasattr(parent, 'GetActiveDatabase'): # need the database return with guihelper.WXDialogWrapper(SelectURLDialog(parent, self.message_str, parent.GetActiveDatabase()), True) as (dlg, retcode): if retcode==wx.ID_OK: self._source=dlg.GetPath() #------------------------------------------------------------------------------- URLDictKey='URLs' URLDictName='gCalURL' class URLDataObject(database.basedataobject): # object to store a list of URLs & names in the DB _knownlistproperties=database.basedataobject._knownlistproperties.copy() _knownlistproperties.update( { 'urls': [ 'url', 'name'] }) def __init__(self, data=None): if data: self.update(data) urlobjectfactory=database.dataobjectfactory(URLDataObject) #------------------------------------------------------------------------------- class gCalendarServer(vcal.vCalendarFile): def _open(self, name): return urllib2.urlopen(name) #------------------------------------------------------------------------------- parentclass=ical.iCalendarImportData class gCalendarImportData(parentclass): _source_data_class=gCalendarServer def read(self, file_name=None, update_dlg=None): try: super(gCalendarImportData, self).read(file_name, update_dlg) except urllib2.URLError: raise IOError #------------------------------------------------------------------------------- class gCalImportDialog(ical.iCalImportCalDialog): _filetype_label='Google Calendar iCal URL:' _data_type='Google Calendar' _import_data_class=gCalendarImportData def __init__(self, parent, id, title): self._db=parent.GetActiveDatabase() super(gCalImportDialog, self).__init__(parent, id, title) def OnBrowseFolder(self, _): with guihelper.WXDialogWrapper(SelectURLDialog(self, 'Select a Google Calendar iCal URL', self._db), True) as (dlg, retcode): if retcode==wx.ID_OK: self.folderctrl.SetValue(dlg.GetPath()) #------------------------------------------------------------------------------- class SelectURLDialog(wx.Dialog): def __init__(self, parent, message, database): super(SelectURLDialog, self).__init__(parent, -1, 'URL Selection') self._db=database self._data=[] vbs=wx.BoxSizer(wx.VERTICAL) vbs.Add(wx.StaticText(self, -1, message), 0, wx.EXPAND|wx.ALL, 5) self._choices=wx.ListBox(self, -1, style=wx.LB_SINGLE|wx.LB_HSCROLL|wx.LB_NEEDED_SB) wx.EVT_LISTBOX_DCLICK(self, self._choices.GetId(), self.OnOK) vbs.Add(self._choices, 0, wx.EXPAND|wx.ALL, 5) vbs.Add(wx.StaticLine(self), 0, wx.EXPAND|wx.ALL, 5) hbs=self.CreateStdDialogButtonSizer(wx.OK|wx.CANCEL) _btn=wx.Button(self, -1, 'New') wx.EVT_BUTTON(self, _btn.GetId(), self.OnNew) hbs.Add(_btn, 0, wx.EXPAND|wx.ALL, 5) _btn=wx.Button(self, -1, 'Delete') wx.EVT_BUTTON(self, _btn.GetId(), self.OnDel) hbs.Add(_btn, 0, wx.EXPAND|wx.ALL, 5) vbs.Add(hbs, 0, wx.EXPAND|wx.ALL, 5) self._get_from_fs() self.SetSizer(vbs) self.SetAutoLayout(True) vbs.Fit(self) def _get_from_fs(self): # retrieve data from the DB _db_data=self._db.getmajordictvalues(URLDictName, urlobjectfactory) self.set(_db_data.get(URLDictKey, {}).get('urls', [])) def _save_to_fs(self, data): _dict={ URLDictKey: { 'urls': data } } database.ensurerecordtype(_dict, urlobjectfactory) self._db.savemajordict(URLDictName, _dict) def set(self, data): self._data=data self._choices.Clear() for _item in self._data: self._choices.Append(_item['name'], _item['url']) def OnDel(self, _): _idx=self._choices.GetSelection() if _idx==wx.NOT_FOUND: return self._choices.Delete(_idx) del self._data[_idx] self._save_to_fs(self._data) def OnNew(self, _): with guihelper.WXDialogWrapper(NewURLDialog(self), True) as (_dlg, retcode): if retcode==wx.ID_OK: _name, _url=_dlg.get() self._choices.Append(_name, _url) self._data.append({ 'name': _name, 'url': _url }) self._save_to_fs(self._data) def OnOK(self, evt): self.EndModal(wx.ID_OK) def GetPath(self): _idx=self._choices.GetSelection() if _idx==wx.NOT_FOUND: return '' return self._choices.GetClientData(_idx) #------------------------------------------------------------------------------- class NewURLDialog(wx.Dialog): def __init__(self, parent): super(NewURLDialog, self).__init__(parent, -1, 'New URL Entry') vbs=wx.BoxSizer(wx.VERTICAL) vbs.Add(wx.StaticText(self, -1, 'URL:'), 0, wx.EXPAND|wx.ALL, 5) self._url=wx.TextCtrl(self, -1, '') vbs.Add(self._url, 0, wx.EXPAND|wx.ALL, 5) vbs.Add(wx.StaticText(self, -1, 'Name:'), 0, wx.EXPAND|wx.ALL, 5) self._name=wx.TextCtrl(self, -1, '') vbs.Add(self._name, 0, wx.EXPAND|wx.ALL, 5) vbs.Add(wx.StaticLine(self), 0, wx.EXPAND|wx.ALL, 5) vbs.Add(self.CreateStdDialogButtonSizer(wx.OK|wx.CANCEL), 0, wx.EXPAND|wx.ALL, 5) self.SetSizer(vbs) self.SetAutoLayout(True) vbs.Fit(self) def get(self): return self._name.GetValue(), self._url.GetValue() bitpim-1.0.7+dfsg1/src/prototypeslg.py0000644001616600161660000006640411077232654016104 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2005 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: prototypeslg.py 4715 2008-10-21 01:51:40Z djpham $ import bpcalendar import calendar import prototypes import re import time class LGCALDATE(prototypes.UINTlsb): def __init__(self, *args, **kwargs): """A date/time as used in the LG calendar""" super(LGCALDATE,self).__init__(*args, **kwargs) self._valuedate=(0,0,0,0,0) # year month day hour minute dict={'sizeinbytes': 4} dict.update(kwargs) if self._ismostderived(LGCALDATE): self._update(args, dict) def _update(self, args, kwargs): for k in 'constant', 'default', 'value': if kwargs.has_key(k): kwargs[k]=self._converttoint(kwargs[k]) if len(args)==0: pass elif len(args)==1: args=(self._converttoint(args[0]),) else: raise TypeError("expected (year,month,day,hour,minute) as arg") super(LGCALDATE,self)._update(args, kwargs) # we want the args self._complainaboutunusedargs(LGCALDATE,kwargs) assert self._sizeinbytes==4 def getvalue(self): """Unpack 32 bit value into date/time @rtype: tuple @return: (year, month, day, hour, minute) """ val=super(LGCALDATE,self).getvalue() min=val&0x3f # 6 bits val>>=6 hour=val&0x1f # 5 bits (uses 24 hour clock) val>>=5 day=val&0x1f # 5 bits val>>=5 month=val&0xf # 4 bits val>>=4 year=val&0xfff # 12 bits return (year, month, day, hour, min) def _converttoint(self, date): assert len(date)==5 year,month,day,hour,min=date if year>4095: year=4095 val=year val<<=4 val|=month val<<=5 val|=day val<<=5 val|=hour val<<=6 val|=min return val class LGCALREPEAT(prototypes.UINTlsb): def __init__(self, *args, **kwargs): """A 32-bit bitmapped value used to store repeat info for events in the LG calendar""" super(LGCALREPEAT,self).__init__(*args, **kwargs) # The meaning of the bits in this field # MSB LSB # 3 2 1 # 10987654321098765432109876543210 # 210 repeat_type # 0 exceptions, set to 1 if there are exceptions # 6543210 dow_weekly (weekly repeat type) # 210 dow (monthly repeat type) # 543210 interval # 3210 month_index # 543210 day_index # repeat_type: 0=none, 1=daily, 2=weekly, 3=monthly, 4=yearly, 5=weekdays, 6=XthDayEachMonth(e.g. 3rd Friday each month) # dow_weekly: Weekly repeat type only. Identical to bpcalender dow bits, multiple selections allowed(Bit0=sun,Bit1=mon,Bit2=tue,Bit3=wed,Bit4=thur,Bit5=fri,Bit6=sat) # dow_monthly: Monthly repeat type 6 only. (0=sun,1=mon,2=tue,3=wed,4=thur,5=fri,6=sat) # interval: repeat interval, eg. every 1 week, 2 weeks 4 weeks etc. Also be used for months, but bp does not support this. # month_index: For type 4 this is the month the event starts in # day_index: For type 6 this represents the number of the day that is the repeat, e.g. "2"nd tuesday # For type 3&4 this is the day of the month that the repeat occurs, usually the same as the start date. # bp does not support this not being the support date dict={'sizeinbytes': 4} dict.update(kwargs) if self._ismostderived(LGCALREPEAT): self._update(args, dict) def _update(self, args, kwargs): for k in 'constant', 'default', 'value': if kwargs.has_key(k): kwargs[k]=self._converttoint(kwargs[k]) if len(args)==0: pass elif len(args)==1: args=(self._converttoint(args[0]),) else: raise TypeError("expected (type, dow, interval) as arg") super(LGCALREPEAT,self)._update(args, kwargs) # we want the args self._complainaboutunusedargs(LGCALDATE,kwargs) assert self._sizeinbytes==4 def getvalue(self): val=super(LGCALREPEAT,self).getvalue() type=val&0x7 # 3 bits val>>=4 exceptions=val&0x1 val>>=1 #get day of week, only valid for some repeat types #format of data is also different for different repeat types interval2=(val>>9)&0x3f if type==6: # for monthly repeats dow=self._to_bp_dow[val&7] #day of month, valid for monthly repeat types, need to convert to bitpim format elif type==2: #weekly dow=val&0x7f # 7 bits, already matched bpcalender format else: dow=0 # get interval if type==6: val>>=20 interval=val&0x1f # day_index else: val>>=9 interval=val&0x3f return (type, dow, interval, interval2, exceptions) _caldomvalues={ 0x01: 0x0, #sun 0x02: 0x1, #mon 0x04: 0x2, #tue 0x08: 0x3, #wed 0x10: 0x4, #thur 0x20: 0x5, #fri 0x40: 0x6 #sat } _to_bp_dow={ 0: 0x01, # Sun 1: 0x02, # Mon 2: 0x04, # Tue 3: 0x08, # Wed 4: 0x10, # Thu 5: 0x20, # Fri 6: 0x40, # Sat } def _converttoint(self, repeat): if not isinstance(repeat, (tuple, list)): if __debug__: raise TypeError else: return 0 if len(repeat)!=5: if __debug__: raise ValueError else: return 0 type,dow,interval,interval2,exceptions=repeat val=0 # construct bitmapped value for repeat # look for weekday type val=interval if type==6 or type==3: val<<=11 val|=interval2 if type==4: #yearly val<<=11 val|=dow val<<=9 if type==2: val|=dow elif type==6: if self._caldomvalues.has_key(dow): val|=self._caldomvalues[dow] else: # invalid day-of-week for monthly type, just bail return 0 val<<=1 val|=exceptions val<<=4 val|=type return val class GPSDATE(prototypes.UINTlsb): _time_t_ofs=calendar.timegm((1980, 1, 6, 0, 0, 0)) _counter=0 def __init__(self, *args, **kwargs): """A date/time as used in the LG call history files, @keyword unique: (True/False, Optional) Ensure that each GSPDATE instance is unique. @keyword raiseonbadvalue: (default False) raise L{ValueError} if the GPSDATE value is bad. """ super(GPSDATE, self).__init__(*args, **kwargs) self._unique=False self._raiseonbadvalue=False dict={'sizeinbytes': 4} dict.update(kwargs) if self._ismostderived(GPSDATE): self._update(args, dict) def _update(self, args, kwargs): self._consumekw(kwargs, ('unique', 'raiseonbadvalue')) for k in 'constant', 'default', 'value': if kwargs.has_key(k): kwargs[k]=self._converttoint(kwargs[k]) if len(args)==0: pass elif len(args)==1: args=(self._converttoint(args[0]),) else: raise TypeError("expected (year,month,day,hour,minute,sec) as arg") super(GPSDATE, self)._update(args, kwargs) # we want the args self._complainaboutunusedargs(GPSDATE,kwargs) assert self._sizeinbytes==4 def getvalue(self): """Convert 32 bit value into date/time @rtype: tuple @return: (year, month, day, hour, minute, sec) """ try: return time.gmtime(self._time_t_ofs+super(GPSDATE, self).getvalue())[:6] except ValueError: if self._raiseonbadvalue: raise return (1980, 1, 6, 0, 0, 0) def _converttoint(self, date): assert len(date)==6 _val=calendar.timegm(date)-self._time_t_ofs if self._unique: _val+=GPSDATE._counter GPSDATE._counter+=1 if GPSDATE._counter==0xffff: GPSDATE._counter=0 return _val @classmethod def now(_): return time.gmtime()[:6] class GSMCALDATE(prototypes.CSVSTRING): """ Represent date string with format "YYMMDD*" This format is being used in LG GSM Calendar Evetns """ def __init__(self, *args, **kwargs): super(GSMCALDATE, self).__init__(*args, **kwargs) self._data=None self._readmode=True if self._ismostderived(GSMCALDATE): self._update(args, kwargs) def _set_data(self, v=None): if v: self._data=v[:3] else: self._data=(2000+int(self._value[:2]), int(self._value[2:4]), int(self._value[4:6])) def _set_value(self): self._value='%02d%02d%02d'%(self._data[0]-2000, self._data[1], self._data[2]) def _update(self, args, kwargs): self._consumekw(kwargs, ('readmode',)) if len(args)==1: if isinstance(args[0], (list, tuple)): super(GSMCALDATE, self)._update((), kwargs) self._set_data(args[0]) self._set_value() elif isinstance(args[0], (str, unicode)): super(GSMCALDATE, self)._update(args, kwargs) self._set_data() else: raise TypeError elif len(args)==0: super(GSMCALDATE, self)._update(args, kwargs) else: raise TypeError self._complainaboutunusedargs(GSMCALDATE, kwargs) def readfrombuffer(self, buf): super(GSMCALDATE, self).readfrombuffer(buf) if self._value: self._set_data() else: self._data=None def getvalue(self): """Returns the tuple of (year, month, day)""" if self._data is None: if self._value is None: raise prototypes.ValueNotSetException() self._set_data() if self._readmode: return self._data else: if self._quotechar: _quote=chr(self._quotechar) else: _quote='' return _quote+self._value+_quote class GSMCALTIME(GSMCALDATE): """ Represent date time with format "hhm" This format is being used in LG GSM Calendar Evetns """ def __init__(self, *args, **kwargs): super(GSMCALTIME, self).__init__(*args, **kwargs) if self._ismostderived(GSMCALTIME): self._update(args, kwargs) def _set_data(self, v=None): if v: self._data=v[:2] else: self._data=(int(self._value[:2]), int(self._value[2:4])) def _set_value(self): self._value='%02d%02d'%self._data class SMSDATETIME(prototypes.CSVSTRING): """ Represent date time with the format 'yy/MM/dd,hh:mm:ss+-zz' used by GSM SMS messages. Currently works only 1 way: SMS Date Time -> ISO String """ _re_pattern='^\d\d/\d\d/\d\d,\d\d:\d\d:\d\d[+\-]\d\d$' _re_compiled_pattern=None def __init__(self, *args, **kwargs): if SMSDATETIME._re_compiled_pattern is None: SMSDATETIME._re_compiled_pattern=re.compile(SMSDATETIME._re_pattern) super(SMSDATETIME, self).__init__(*args, **kwargs) if self._ismostderived(SMSDATETIME): self._update(args, kwargs) def _update(self, args, kwargs): super(SMSDATETIME, self)._update(args, kwargs) if self._value and \ not re.match(SMSDATETIME._re_compiled_pattern, self._value): raise ValueError('COrrect Format: yy/MM/dd,hh:mm:ss+-zz') def getvalue(self): """Returns the ISO Format 'YYYMMDDTHHMMSS+-mmss'""" if self._value: _s=self._value.split(',') return '20%sT%s00'%(_s[0].replace('/', ''), _s[1].replace(':', '')) class TELUSLGCALREPEAT(prototypes.UINTlsb): def __init__(self, *args, **kwargs): """A 32-bit bitmapped value used to store repeat info for events in the LG calendar""" super(TELUSLGCALREPEAT,self).__init__(*args, **kwargs) # The meaning of the bits in this field # MSB LSB # 3 2 1 # 10987654321098765432109876543210 # 210 repeat_type # 0 exceptions, set to 1 if there are exceptions # 6543210 dow_weekly (weekly repeat type) # 210 dow (monthly repeat type) # 543210 interval # 3210 month_index # 6543210 day_index # repeat_type: 0=none, 1=daily, 2=weekdays, 3=weekly, 4=Month Nth Xday, 5=monthly on date, 6=yearly Nth Xday in month, 7=yearly on date # dow_weekly: Weekly repeat type only. Identical to bpcalender dow bits, multiple selections allowed(Bit0=sun,Bit1=mon,Bit2=tue,Bit3=wed,Bit4=thur,Bit5=fri,Bit6=sat) # dow_monthly: Monthly repeat type 6 only. (0=sun,1=mon,2=tue,3=wed,4=thur,5=fri,6=sat) # interval: repeat interval, eg. every 1 week, 2 weeks 4 weeks etc. Also be used for months, but bp does not support this. # month_index: For type 4 this is the month the event starts in # day_index: For type 6 this represents the number of the day that is the repeat, e.g. "2"nd tuesday # For type 3&4 this is the day of the month that the repeat occurs, usually the same as the start date. # For type 0&2 set to 0x7F # For type 1&3 set to 0 dict={'sizeinbytes': 4} dict.update(kwargs) if self._ismostderived(TELUSLGCALREPEAT): self._update(args, dict) def _update(self, args, kwargs): for k in 'constant', 'default', 'value': if kwargs.has_key(k): kwargs[k]=self._converttoint(kwargs[k]) if len(args)==0: pass elif len(args)==1: args=(self._converttoint(args[0]),) else: raise TypeError("expected (type, dow, interval) as arg") super(TELUSLGCALREPEAT,self)._update(args, kwargs) # we want the args self._complainaboutunusedargs(TELUSLGCALREPEAT,kwargs) assert self._sizeinbytes==4 def getvalue(self): val=super(TELUSLGCALREPEAT,self).getvalue() type=val&0x7 # 3 bits val>>=4 exceptions=val&0x1 val>>=1 #get day of week, only valid for some repeat types #format of data is also different for different repeat types interval2=(val>>9)&0x3f if type==4: # for monthly repeats dow=self._to_bp_dow[val&7] #day of month, valid for monthly repeat types, need to convert to bitpim format elif type==3: #weekly dow=val&0x7f # 7 bits, already matched bpcalender format else: dow=0 # get interval if type==4: val>>=20 interval=val&0x1f # day_index else: val>>=9 interval=val&0x3f return (type, dow, interval, interval2, exceptions) _caldomvalues={ 0x01: 0x0, #sun 0x02: 0x1, #mon 0x04: 0x2, #tue 0x08: 0x3, #wed 0x10: 0x4, #thur 0x20: 0x5, #fri 0x40: 0x6 #sat } _to_bp_dow={ 0: 0x01, # Sun 1: 0x02, # Mon 2: 0x04, # Tue 3: 0x08, # Wed 4: 0x10, # Thu 5: 0x20, # Fri 6: 0x40, # Sat } def _converttoint(self, repeat): if not isinstance(repeat, (tuple, list)): if __debug__: raise TypeError else: return 0 if len(repeat)!=5: if __debug__: raise ValueError else: return 0 type,dow,interval,interval2,exceptions=repeat val=0 # construct bitmapped value for repeat val=interval if type==0 or type==2: val=0x7F val<<=11 val|=interval if type==4 or type==5: val<<=11 val|=interval2 if type==7: #yearly val<<=11 val|=dow val<<=9 if type==2: val|=dow elif type==4: val|=self._caldomvalues[dow] val<<=1 val|=exceptions val<<=4 val|=type return val #------------------------------------------------------------------------------- class T9USERDBBLOCK(prototypes.BaseProtogenClass): """ Special class to handle data blocks within the LG T9 User Database file. Perhaps, the prototypes syntax should be enhanced to more gracefully handle cases like this! """ # known types of this block FreeBlock_Type='Free Block' A0_Type='A0 Block' WordsList_Type='Words List' C_Type='C' Garbage_Type='Garbage' def __init__(self, *args, **kwargs): super(T9USERDBBLOCK, self).__init__(*args, **kwargs) self._value=None self._type=None if self._ismostderived(T9USERDBBLOCK): self._update(args, kwargs) def _update(self, args, kwargs): super(T9USERDBBLOCK, self)._update(args, kwargs) # we have no special keywords to process so complain away self._complainaboutunusedargs(T9USERDBBLOCK, kwargs) # Set our value if one was specified if len(args)==0: pass elif len(args)==1: self._set_value(args[0]) else: raise TypeError("Unexpected arguments "+`args`) def _set_value(self, v): # set the value of this block # the value must be a dict having 2 keys: 'type' and 'value' if not isinstance(v, dict): raise TypeError('Value must be a dict') if not v.has_key('type') or not v.has_key('value'): raise ValueError('Missing type or value keyword') _type=v['type'] _value=v['value'] if _type==self.FreeBlock_Type: # this is a free block, the value is an integer specifying # the length of this free block if not isinstance(_value, int): raise TypeError('Value must be an int') elif _type==self.WordsList_Type: # this is a list of words, the value is a list of dicts, # each dict should have 2 keys: 'word', 'weight'. # value['word'] is a string # value['weight'] is an int, default to 0xA000 if not isinstance(_value, list): raise TypeError('Value must be a list of dicts') elif _type==self.A0_Type: _value=0xA0 else: raise ValueError('Invalid type: '+_type) self._type=_type self._value=_value def _extract_words_list(self, buf): # read and construct a word list _res=[] _size=buf.peeknextbyte() while _size<0x80: _size=buf.getnextbyte() _weight=buf.getnextbyte()|(buf.getnextbyte()<<8) _res.append({ 'word': buf.getnextbytes(_size), 'weight': _weight }) _size=buf.peeknextbyte() return _res def readfrombuffer(self, buf): try: self._bufferstartoffset=buf.getcurrentoffset() _ch=buf.peeknextbyte() if _ch&0xF0==0xC0: self._type=self.C_Type self._value='' while True: b=buf.getnextbytes(1) self._value+=b if b=='\x09': self._value+=buf.getnextbytes(1) break elif _ch&0xF0==0xA0: self._type=self.A0_Type self._value=buf.getnextbyte() elif _ch&0xF0==0x80: self._type=self.FreeBlock_Type self._value=((buf.getnextbyte()&0x0F)<<8)|buf.getnextbyte() buf.getnextbytes(self._value-2) elif _ch<0x80: self._type=self.WordsList_Type self._value=self._extract_words_list(buf) else: raise ValueError('Unknown block type: 0x%02X'%_ch) except IndexError: # ignore garbage at the end self._type=self.Garbage_Type self._value=0 ## print 'type:',self._type ## print 'value:',self._value self._bufferendoffset=buf.getcurrentoffset() def getvalue(self): if self._value is None or self._type is None: raise ValueNotSetException() return { 'type': self._type, 'value': self._value } def packetsize(self): # return the size of this packet if self._value is None or self._type is None: raise ValueNotSetException() if self._type==self.C_Type or \ self._type==self.A0_Type: return len(self._value) if self._type==self.FreeBlock_Type: return self._value if self._type==self.WordsList_Type: _size=0 for _entry in self._value: _size+=len(_entry['word'])+3 return _size def writetobuffer(self, buf): if self._value is None or self._type is None: raise ValueNotSetException() self._bufferstartoffset=buf.getcurrentoffset() if self._type==self.C_Type: buf.appendbytes(self._value) elif self._type==self.A0_Type: buf.appendbyte(0xA0) elif self._type==self.FreeBlock_Type: buf.appendbyte(0x80|((self._value&0xF00)>>8)) buf.appendbyte(self._value&0xff) for _ in range(self._value-2): buf.appendbyte(0) elif self._type==self.WordsList_Type: for _entry in self._value: buf.appendbyte(len(_entry['word'])) _weight=_entry.get('weight', 0xA000) buf.appendbyte(_weight&0xff) buf.appendbyte((_weight&0xFF00)>>8) buf.appendbytes(_entry['word']) self._bufferendoffset=buf.getcurrentoffset() class LGHEXPN(prototypes.DATA): """ Phone numbers stored as hex. i.e. 0x5555551212f0 == 555-555-1212 """ def __init__(self, *args, **kwargs): """A date/time as used in the LG calendar""" super(LGHEXPN,self).__init__(*args, **kwargs) self._update(args, kwargs) def _update (self, args, kwargs): for k in 'constant', 'default', 'value': if kwargs.has_key(k): kwargs[k]=self._string_to_lghexpn (kwargs[k]) if len(args)==0: pass elif len(args)==1: args = (self._string_to_lghexpn (args[0]),) else: raise TypeError("Expected phone number string as arg") super(LGHEXPN,self)._update(args, kwargs) def _digit_to_char (self, digit): if digit <= 0x09: return chr (digit + ord('0')) elif digit == 0x0A: return '*' elif digit == 0x0B: return '#' elif digit == 0x0C: return 'W' elif digit == 0x0D: return 'P' else: # 0x0f is not an error raise def _char_to_digit (self, char): if char >= '0' and char <= '9': return ord(char) - ord('0') elif char == '*': return 0x0A elif char == '#': return 0x0B elif char == 'W': return 0x0C elif char == 'P': return 0x0D else: raise ValueError def _string_to_lghexpn (self, pn): val = '' byte = 0xf0 for i in range(0, len (pn)): digit = self._char_to_digit (pn[i]) if i % 2: val += chr(byte & (0xf0 | digit)) byte = 0xf0 else: byte = (digit << 4) | 0x0f # write terminating byte val += chr(byte) return val def getvalue(self): """Unpack hex phone number @rtype: string @return: phone number """ val=super(LGHEXPN,self).getvalue() pn = '' for byte in val: fd = ord(byte) >> 4 sd = ord(byte) & 0x0f try: pn += self._digit_to_char(fd) pn += self._digit_to_char(sd) except: # end of packed number, not an error break return pn class PBDateTime(prototypes.BaseProtogenClass): "Handle six 2-byte UINTs: y, m, d, h, m, s" def __init__(self, *args, **kwargs): """ Class to handle the date/time format of 6 2-byte UINTs: y, m, d, h, m, s @keyword default: (Optional) Our default value @keyword defaulttocurrenttime: (Optional) Default to the current date/time """ super(PBDateTime, self).__init__(*args, **kwargs) self._default=None self._defaulttocurrenttime=False self._value=None if self._ismostderived(PBDateTime): self._update(args, kwargs) def _update(self, args, kwargs): super(PBDateTime, self)._update(args, kwargs) self._consumekw(kwargs, ("default", "defaulttocurrenttime", "value")) self._complainaboutunusedargs(PBDateTime, kwargs) if len(args)==0: pass elif len(args)==1: self._value=args[0] else: raise TypeError("Unexpected arguments "+`args`) if self._value is None: # value not specified, check for either default or default to # current time if self._default: self._value=self._default elif self._defaulttocurrenttime: self._value=time.localtime()[:6] def readfrombuffer(self, buf): self._bufferstartoffset=buf.getcurrentoffset() _res=[] for i in range(6): _res.append(buf.getnextbyte()|(buf.getnextbyte()<<8)) self._value=_res self._bufferendoffset=buf.getcurrentoffset() def writetobuffer(self, buf): if self._value is None: raise ValueNotSetException() if not isinstance(self._value, (list, tuple)): raise TypeError('value needs to be a list/tuple') if len(self._value)!=6: raise TypeError('len of value needs to be 6') self._bufferstartoffset=buf.getcurrentoffset() for _num in self._value: buf.appendbyte(_num&0xff) buf.appendbyte((_num>>8)&0xff) self._bufferendoffset=buf.getcurrentoffset() def packetsize(self): """Size in bytes""" return 12 def getvalue(self): if self._value is None: raise ValueNotSetException() return self._value bitpim-1.0.7+dfsg1/src/thirdparty/0000755001616600161660000000000011330124335015123 5ustar amuamubitpim-1.0.7+dfsg1/src/thirdparty/DSV.py0000644001616600161660000012713010551013425016136 0ustar amuamu""" DSV.py - Cliff Wells, 2002 Import/export DSV (delimiter separated values, a generalization of CSV). $Id: DSV.py 3878 2007-01-09 22:28:37Z djpham $ Modified by Joe Pham to accommodate wxPython 2.8+ Basic use: from DSV import DSV data = file.read() qualifier = DSV.guessTextQualifier(data) # optional data = DSV.organizeIntoLines(data, textQualifier = qualifier) delimiter = DSV.guessDelimiter(data) # optional data = DSV.importDSV(data, delimiter = delimiter, textQualifier = qualifier) hasHeader = DSV.guessHeaders(data) # optional If you know the delimiters, qualifiers, etc, you may skip the optional 'guessing' steps as they rely on heuristics anyway (although they seem to work well, there is no guarantee they are correct). What they are best used for is to make a good guess regarding the data structure and then let the user confirm it. As such there is a 'wizard' to aid in this process (use this in lieu of the above code - requires wxPython): from DSV import DSV dlg = DSV.ImportWizardDialog(parent, -1, 'DSV Import Wizard', filename) dlg.ShowModal() headers, data = dlg.ImportData() # may also return None dlg.Destroy() The dlg.ImportData() method may also take a function as an optional argument specifying what it should do about malformed rows. See the example at the bottom of this file. A few common functions are provided in this file (padRow, skipRow, useRow). Requires Python 2.0 or later Wizards tested with wxPython 2.2.5/NT 4.0, 2.3.2/Win2000 and Linux/GTK (RedHat 7.x) """ __version__ = '1.4' """ Bugs/Caveats: - Although I've tested this stuff on varied data, I'm sure there are cases that I haven't seen that will choke any one of these routines (or at least return invalid data). This is beta code! - guessTextQualifier() algorithm is limited to quotes (double or single). - Surprising feature: Hitting on wxSpinCtrl causes seg fault under Linux/GTK (not Win32). Strangely, pressing seems ok. Therefore, I had to use wxSpinButton. Also, spurious spin events get generated for both of these controls (e.g. when calling wxBeginBusyCursor) - Keyboard navigation needs to be implemented on wizards - There may be issues with cr/lf translation, although I haven't yet seen any. Why another CSV tool?: - Because I needed a more flexible CSV importer, one that could accept different delimiters (not just commas or tabs), one that could make an intelligent guess regarding file structure (for user convenience), be compatible with the files output by MS Excel, and finally, be easily integrated with a wizard. All of the modules I have seen prior to this fell short on one count or another. - It seemed interesting. To do: - Better guessTextQualifier() algorithm. In the perfect world I envision, I can use any character as a text qualifier, not just quotes. - Finish wizards and move them into separate module. - Better guessHeaders() algorithm, although this is difficult. - Optimize maps() - try to eliminate lambda when possible - Optimize memory usage. Presently the entire file is loaded and then saved as a list. A better approach might be to analyze a smaller part of the file and then return an iterator to step through it. """ # Changelog # 1.4: # - Fixed small bug in demo (forgotten Destroy()) that caused a hang # when Cancel was pressed. # - Removed extraneous guessHeaders() call in wizard. I can only say, # "what the??" and remember to profile. This was a huge time waster. # # 1.3.9 # - Fixed real problem on Win32 in that wxProgressDialog must reach max # value in order to close. # # 1.3.8 # - Change demo to use wxApp rather than wxPySimpleApp as it seemed # to have problems on Win32 (per Kevin Altis) # # 1.37 # - Fix for font issue under GTK2 (thanks to Ahmad Baitalmal) # - Added some space below the Ok/Cancel buttons. # # 1.36 # - Bugfix submitted by "nobody" ;) on SF # # 1.3.4 to 1.3.5: # - Nigel Hathaway finds yet another bug (or two). Can't seem to make him # use something else, so they had to be fixed. It's especially difficult # to ignore him since he provided the fix. Very annoying. # - Problem with odd quote/delimiter combinations (SF bug #620284) # - Losing empty fields at beginning/end (#619771) # - Whitespace stripped from around string (#620115) # # 1.3.3 to 1.3.4(a): # - Fixed bug in exportDSV that failed to quote data containing delimiter # thanks to nhathaway@users.sourceforge.net # # 1.3 to 1.3.1: # - Test for presence of wxPython (since it's not required except for wizard) # - Changed "from wxPython.wx import *" to "from wxPython import wx" # - Changed sample csv file (darkwave.csv) to demonstrate embedded quotes import sys # import pre as re # sre was broken, appears okay now. Try this if there are problems. import re import copy import exceptions import string # RedHat 8.0 (or rather GTK2?) sets LANG = en_us.UTF-8 and apparently some # older apps (including wxGTK) can't handle this. The fix is to set LANG=C # before running the app. Thanks to Ahmad Baitalmal for supplying this info. import os os.putenv('LANG', 'C') ##try: ## from wxPython import wx, grid ##except ImportError: ## wx = None try: import wx import wx.grid as gridlib except ImportError: wx = None class InvalidDelimiter(exceptions.StandardError): pass class InvalidTextQualifier(exceptions.StandardError): pass class InvalidData(exceptions.StandardError): pass class InvalidNumberOfColumns(exceptions.StandardError): pass # ------------------------------------------------------------------------------ def guessTextQualifier(input): """ PROTOTYPE: guessTextQualifier(input) DESCRIPTION: tries to guess if the text qualifier (a character delimiting ambiguous data) is a single or double-quote (or None) ARGUMENTS: - input is raw data as a string RETURNS: single character or None """ # Algorithm: looks for text enclosed between two identical quotes (the probable # qualifier) which are preceded and followed by the same character (the # probable delimiter), for example: # ,'some text', # The quote with the most wins. data = input[:16 * 1024] # limit sample to 16k regexp = re.compile('(?:(?:^|\n)(?P["\']).*?(?P=b_quote))|' '(?:(?P.)(?P["\']).*?(?P=quote)(?=(?P=delim)|\n))|' '(?:(?P["\']).*?(?P=e_quote)$)', re.M | re.S) matches = filter(lambda i: reduce(lambda a, b: a + b, i), regexp.findall(data)) if not matches: return None quotes = {} for q in ('b_quote', 'quote', 'e_quote'): n = regexp.groupindex[q] - 1 for m in matches: key = m[n] if key: quotes[key] = quotes.get(key, 0) + 1 return reduce(lambda a, b, quotes = quotes: (quotes[a] > quotes[b]) and a or b, quotes.keys()) # ------------------------------------------------------------------------------ def guessDelimiter(input, textQualifier = '"'): """ PROTOTYPE: guessDelimiter(input, textQualifier = '\"') DESCRIPTION: Tries to guess the delimiter. ARGUMENTS: - input is raw data as string - textQualifier is a character used to delimit ambiguous data RETURNS: single character or None """ # Algorithm: the delimiter /should/ occur the same number of times on each # row. However, due to malformed data, it may not. We don't want an all or # nothing approach, so we allow for small variations in the number. # 1) build a table of the frequency of each character on every line. # 2) build a table of freqencies of this frequency (meta-frequency?), e.g. # "x occurred 5 times in 10 rows, 6 times in 1000 rows, 7 times in 2 rows" # 3) use the mode of the meta-frequency to decide what the frequency /should/ # be for that character # 4) find out how often the character actually meets that goal # 5) the character that best meets its goal is the delimiter # For performance reasons, the data is evaluated in chunks, so it can try # and evaluate the smallest portion of the data possible, evaluating additional # chunks as necessary. if type(input) != type([]): return None if len(input) < 2: return None if textQualifier: # eliminate text inside textQualifiers regexp = re.compile('%s(.*?)%s' % (textQualifier, textQualifier), re.S) subCode = compile("regexp.sub('', line)", '', 'eval') else: subCode = compile("line", '', 'eval') ascii = [chr(c) for c in range(127)] # 7-bit ASCII # build frequency tables chunkLength = min(10, len(input)) iteration = 0 charFrequency = {} modes = {} delims = {} start, end = 0, min(chunkLength, len(input)) while start < len(input): iteration += 1 for line in input[start:end]: l = eval(subCode) for char in ascii: metafrequency = charFrequency.get(char, {}) freq = l.strip().count(char) # must count even if frequency is 0 metafrequency[freq] = metafrequency.get(freq, 0) + 1 # value is the mode charFrequency[char] = metafrequency for char in charFrequency.keys(): items = charFrequency[char].items() if len(items) == 1 and items[0][0] == 0: continue # get the mode of the frequencies if len(items) > 1: modes[char] = reduce(lambda a, b: a[1] > b[1] and a or b, items) # adjust the mode - subtract the sum of all other frequencies items.remove(modes[char]) modes[char] = (modes[char][0], modes[char][1] - reduce(lambda a, b: (0, a[1] + b[1]), items)[1]) else: modes[char] = items[0] # build a list of possible delimiters modeList = modes.items() total = float(chunkLength * iteration) consistency = 1.0 # (rows of consistent data) / (number of rows) = 100% threshold = 0.9 # minimum consistency threshold while len(delims) == 0 and consistency >= threshold: for k, v in modeList: if v[0] > 0 and v[1] > 0: if (v[1]/total) >= consistency: delims[k] = v consistency -= 0.01 if len(delims) == 1: return delims.keys()[0] # analyze another chunkLength lines start = end end += chunkLength if not delims: return None # if there's more than one candidate, look at quoted data for clues. # while any character may be quoted, any delimiter that occurs as a # part of the data /must/ be quoted. if len(delims) > 1 and textQualifier is not None: regexp = re.compile('%s(.*?)%s' % (textQualifier, textQualifier), re.S) for line in input: inQuotes = "".join(regexp.findall(line)) for d in delims.keys(): if not d in inQuotes: del delims[d] if len(delims) == 1: return delims.keys()[0] # if there's *still* more than one, fall back to a 'preferred' list if len(delims) > 1: for d in ['\t', ',', ';', ' ', ':']: if d in delims.keys(): return d # finally, just return the first damn character in the list return delims.keys()[0] # ------------------------------------------------------------------------------ def modeOfLengths(input): """ PROTOTYPE: modeOfLengths(input) DESCRIPTION: Finds the mode (most frequently occurring value) of the lengths of the lines. ARGUMENTS: - input is list of lists of data RETURNS: mode as integer """ freq = {} for row in input: l = len(row) freq[l] = freq.get(l, 0) + 1 return reduce(lambda a, b, freq = freq: (freq[a] > freq[b]) and a or b, freq.keys()) # ------------------------------------------------------------------------------ def guessHeaders(input, columns = 0): """ PROTOTYPE: guessHeaders(input, columns = 0) DESCRIPTION: Decides whether row 0 is a header row ARGUMENTS: - input is a list of lists of data (as returned by importDSV) - columns is either the expected number of columns in each row or 0 RETURNS: - true if data has header row """ # Algorithm: creates a dictionary of types of data in each column. If any column # is of a single type (say, integers), *except* for the first row, then the first # row is presumed to be labels. If the type can't be determined, it is assumed to # be a string in which case the length of the string is the determining factor: if # all of the rows except for the first are the same length, it's a header. # Finally, a 'vote' is taken at the end for each column, adding or subtracting from # the likelihood of the first row being a header. if type(input) != type([]): raise InvalidData, "list expected." if len(input) < 2: return 0 if not columns: columns = modeOfLengths(input) columnTypes = {} for i in range(columns): columnTypes[i] = None for row in input[1:]: if len(row) != columns: continue # skip rows that have irregular number of columns for col in columnTypes.keys(): try: try: # is it a built-in type (besides string)? thisType = type(eval(row[col])) except OverflowError: # a long int? thisType = type(eval(row[col] + 'L')) thisType = type(0) # treat long ints as int except: # fallback to length of string thisType = len(row[col]) if thisType != columnTypes[col]: if columnTypes[col] is None: # add new column type columnTypes[col] = thisType else: # type is inconsistent, remove column from consideration del columnTypes[col] # finally, compare results against first row and vote on whether it's a header hasHeader = 0 for col, colType in columnTypes.items(): if type(colType) == type(0): # it's a length if len(input[0][col]) != colType: hasHeader += 1 else: hasHeader -= 1 else: # attempt typecast try: eval("%s(%s)" % (colType.__name__, input[0][col])) except: hasHeader += 1 else: hasHeader -= 1 return hasHeader > 0 # ------------------------------------------------------------------------------ def organizeIntoLines(input, textQualifier = '"', limit = None): """ PROTOTYPE: organizeIntoLines(input, textQualifier = '\"', limit = None) DESCRIPTION: Takes raw data (as from file.read()) and organizes it into lines. Newlines that occur within text qualifiers are treated as normal characters, not line delimiters. ARGUMENTS: - input is raw data as a string - textQualifier is a character used to delimit ambiguous data - limit is a integer specifying the maximum number of lines to organize RETURNS: list of strings """ # Algorithm: there should be an even number of text qualifiers on every line. # If there isn't, that means that the newline at the end of the line must occur # within qualifiers and doesn't really indicate the end of a record. data = input.split('\n') line = 0 while 1: try: while data[line].count(textQualifier) % 2: # while odd number data[line] = data[line] + '\n' + data[line + 1] # add the next line del data[line + 1] # delete the next line line += 1 if limit and line > limit: del data[limit:] # kill any lines that weren't processed break except: break # filter out empty lines # data = filter(lambda i: "".join(i), data) data = filter(string.join, data) return data # ------------------------------------------------------------------------------ # some common error handlers to pass to importDSV # others might do things like log errors to a file. # oldrow is the unparsed data, newrow is the parsed data def padRow(oldrow, newrow, columns, maxColumns): "pads all rows to the same length with empty strings" difference = maxColumns - len(newrow) return newrow + ([''] * difference) def skipRow(oldrow, newrow, columns, maxColumns): "skips any inconsistent rows" return None def useRow(oldrow, newrow, columns, maxColumns): "returns row unchanged" return newrow # ------------------------------------------------------------------------------ def importDSV(input, delimiter = ',', textQualifier = '"', columns = 0, updateFunction = None, errorHandler = None): """ PROTOTYPE: importDSV(input, delimiter = ',', textQualifier = '\"', columns = 0, updateFunction = None, errorHandler = None) DESCRIPTION: parses lines of data in CSV format ARGUMENTS: - input is a list of strings (built by organizeIntoLines) - delimiter is the character used to delimit columns - textQualifier is the character used to delimit ambiguous data - columns is the expected number of columns in each row or 0 - updateFunction is a callback function called once per record (could be used for updating progress bars). Its prototype is updateFunction(percentDone) - percentDone is an integer between 0 and 100 - errorHandler is a callback invoked whenever a row has an unexpected number of columns. Its prototype is errorHandler(oldrow, newrow, columns, maxColumns) where - oldrow is the unparsed data - newrow is the parsed data - columns is the expected length of a row - maxColumns is the longest row in the data RETURNS: list of lists of data """ if type(input) != type([]): raise InvalidData, "expected list of lists of strings" if type(delimiter) != type('') or not delimiter: raise InvalidDelimiter, `delimiter` ## if textQualifier: ## # fieldRex=re.compile('(?:(?:[,]|^)"(.*?)"(?=[,]|$))|(?:(?:[,]|^)([^",]*?)(?=[,]|$))') ## fieldRex = re.compile('(?:(?:[%s]|^)%s(.*?)%s(?=[%s]|$))|(?:(?:[%s]|^)([^%s%s]*?)(?=[%s]|$))' ## % (delimiter, textQualifier, textQualifier, delimiter, ## delimiter, textQualifier, delimiter, delimiter), ## re.S) ## else: ## fieldRex = re.compile('(?:[%s]|^)([^%s]*?)(?=[%s]|$)' ## % (delimiter, delimiter, delimiter), re.S) percent = 0.0 lineno = 0.0 newdata = [] maxColumns = 0 ## for line in input: ## line = line.strip() ## record = fieldRex.findall(line) ## print record ## if textQualifier: ## record = [(i[0] or i[1]) for i in record] ## if textQualifier: ## record = [c.replace(textQualifier * 2, textQualifier) for c in record] ## newdata.append(record) # This code was submitted by Nigel to replace the code commented out above. # It addresses several issues with embedded quotes and delimiters. It seems that # while off to a good start, regular expressions won't be able to handle certain # situations. i.e. '''"Say ""hello"", World", ""''' would seem to be a problem as # an embedded delimiter follows an embedded quote which throws off the re search. for line in input: if textQualifier: record = [] inquotes = 0 for s in line.split(delimiter): odd = s.count(textQualifier) % 2 if inquotes: accu += delimiter + s.replace(textQualifier * 2, delimiter).\ replace(textQualifier, '').replace(delimiter, textQualifier) if odd: record.append(accu) inquotes = 0 else: # 1.3.6 bugfix: deal with case where s = "" to denote an empty string if s.count(textQualifier): # discard whitespace outside of textQualifiers when they are used s = s.strip() # fix new problem with "" if s == textQualifier * 2: s = "" accu = s.replace(textQualifier * 2, delimiter).\ replace(textQualifier, '').replace(delimiter, textQualifier) if odd: inquotes = 1 else: record.append(accu) else: #record = map(lambda x: x.strip(), line.split(delimiter)) record = map(string.strip, line.split(delimiter)) newdata.append(record) # (end of replacement code) if updateFunction is not None: lineno = lineno + 1.0 newpercent = int((lineno / len(input)) * 100) if percent != newpercent: percent = newpercent if not updateFunction(percent): return None if not columns: columns = modeOfLengths(newdata) maxColumns = max([len(line) for line in newdata]) # consistency check for record in xrange(len(newdata)): length = len(newdata[record]) difference = length - columns if difference: if errorHandler is None: raise InvalidNumberOfColumns, "Expected %d, got %d" % (columns, length) else: newdata[record] = errorHandler(input[record], newdata[record], columns, maxColumns) # remove null values from data # newdata = filter(lambda i: i, newdata) newdata = filter(None, newdata) return newdata # ------------------------------------------------------------------------------ def exportDSV(input, delimiter = ',', textQualifier = '"', quoteall = 0): """ PROTOTYPE: exportDSV(input, delimiter = ',', textQualifier = '\"', quoteall = 0) DESCRIPTION: Exports to DSV (delimiter-separated values) format. ARGUMENTS: - input is list of lists of data (as returned by importDSV) - delimiter is character used to delimit columns - textQualifier is character used to delimit ambiguous data - quoteall is boolean specifying whether to quote all data or only data that requires it RETURNS: data as string """ if not delimiter or type(delimiter) != type(''): raise InvalidDelimiter if not textQualifier or type(delimiter) != type(''): raise InvalidTextQualifier # double-up all text qualifiers in data (i.e. can't becomes can''t) data = map(lambda i, q = textQualifier: map(lambda j, q = q: str(j).replace(q, q * 2), i), input) if quoteall: # quote every data value data = map(lambda i, q = textQualifier: map(lambda j, q = q: q + j + q, i), data) else: # quote only the values that contain qualifiers, delimiters or newlines data = map(lambda i, q = textQualifier, d = delimiter: map(lambda j, q = q, d = d: ((j.find(q) != -1 or j.find(d) != -1 or j.find('\n') != -1) and (q + j + q)) or j, i), data) # assemble each line with delimiters data = [delimiter.join(line) for line in data] # assemble all lines together, separated by newlines data = "\n".join(data) return data if wx is not None: # ------------------------------------------------------------------------------ class ImportWizardPanel_Delimiters(wx.Panel): """ CLASS(SUPERCLASS): ImportWizardPanel_Delimiters(wx.Panel) DESCRIPTION: A wx.Panel that provides a basic interface for validating and changing the parameters for importing a delimited text file. Similar to MS Excel's CSV import wizard. Can be used in a series of wizards or embedded in an application. PROTOTYPE: ImportWizardPanel_Delimiters(parent, id, file, data, isValidCallback = None, pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.TAB_TRAVERSAL, name = 'ImportWizardPanel') ARGUMENTS: - parent is the parent window - id is the id of this wizard panel - file is the name of the file being imported - data is the raw data to be parsed - isValidCallback is a callback function that accepts a single boolean argument If the argument is true, the wizard is in a valid state (all the settings are acceptable), if the argument is false, trying to import will likely cause an exception. METHODS: - GetDelimiters() returns list of characters used as delimiters - GetTextQualifiers() returns character used as text qualifier or None - GetHasHeaders() returns true if first row is header """ def __init__(self, parent, id, file, data, isValidCallback = None, pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.TAB_TRAVERSAL, name = "ImportWizardPanel"): wx.Panel.__init__(self, parent, id, pos, size, style, name) self.SetAutoLayout(True) mainSizer = wx.FlexGridSizer(3, 1) self.SetSizer(mainSizer) mainSizer.AddGrowableCol(0) self.initialized = False self.data = data self.isValidCallback = isValidCallback self.Validate = (isValidCallback and self.Validate) or self.BuildPreview dlg = wx.ProgressDialog("Import Wizard", "Analyzing %s... Please wait." % file, 3, parent, wx.PD_APP_MODAL | wx.PD_AUTO_HIDE) textQualifier = guessTextQualifier(data) dlg.Update(1) newdata = organizeIntoLines(data, textQualifier = textQualifier, limit = 100) dlg.Update(2) delimiter = guessDelimiter(newdata, textQualifier = textQualifier) dlg.Update(3) dlg.Destroy() # ------------- msg = ("This screen lets you set the delimiters your data contains.\n" "You can see how your data is affected in the preview below.") message1 = wx.StaticText(self, -1, msg) # ------------- delimiterBox = wx.BoxSizer(wx.HORIZONTAL) delimStaticBox = wx.StaticBox(self, -1, "Delimiters") delimStaticSizer = wx.StaticBoxSizer(delimStaticBox, wx.VERTICAL) delimGridSizer = wx.FlexGridSizer(2, 3) delims = { 'Tab': '\t', 'Semicolon': ';', 'Comma': ',', 'Space': ' ', } self.delimChecks = {} for label, value in delims.items(): self.delimChecks[value] = wx.CheckBox(self, -1, label) delimGridSizer.Add(self.delimChecks[value], 0, wx.ALL, 3) wx.EVT_CHECKBOX(self, self.delimChecks[value].GetId(), self.Validate) otherSizer = wx.BoxSizer(wx.HORIZONTAL) self.delimChecks['Other'] = wx.CheckBox(self, -1, 'Other:') wx.EVT_CHECKBOX(self, self.delimChecks['Other'].GetId(), self.Validate) self.otherDelim = wx.TextCtrl(self, -1, size = (20, -1)) wx.EVT_TEXT(self, self.otherDelim.GetId(), self.OnCustomDelim) if self.delimChecks.has_key(delimiter): self.delimChecks[delimiter].SetValue(True) elif delimiter is not None: self.delimChecks['Other'].SetValue(True) self.otherDelim.SetValue(delimiter) otherSizer.AddMany([ (self.delimChecks['Other'], 0, wx.ALL, 3), (self.otherDelim, 0, wx.ALIGN_CENTER), ]) delimGridSizer.Add(otherSizer) delimStaticSizer.Add(delimGridSizer, 1, wx.EXPAND) delimOtherSizer = wx.BoxSizer(wx.VERTICAL) self.consecutiveDelimsAs1 = wx.CheckBox(self, -1, "Treat consecutive delimiters as one") self.consecutiveDelimsAs1.Enable(False) tqSizer = wx.BoxSizer(wx.HORIZONTAL) self.textQualifierChoice = wx.Choice(self, -1, choices = ['"', "'", "{None}"]) wx.EVT_CHOICE(self, self.textQualifierChoice.GetId(), self.BuildPreview) if textQualifier is not None: self.textQualifierChoice.SetStringSelection(textQualifier) else: self.textQualifierChoice.SetStringSelection('{None}') tqSizer.AddMany([ (wx.StaticText(self, -1, "Text qualifier:"), 0, wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL), (self.textQualifierChoice, 0, wx.ALL | wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 5), ]) delimOtherSizer.AddMany([ (self.consecutiveDelimsAs1, 1, wx.EXPAND | wx.ALL, 5), (tqSizer, 1, wx.ALL | wx.ALIGN_CENTER, 5), ]) delimiterBox.AddMany([ (delimStaticSizer, 0, wx.ALIGN_CENTER), (delimOtherSizer, 0, wx.ALIGN_CENTER), ]) delimStaticBox.Fit() # ------------- self.displayRows = 6 previewSettingsBox = wx.BoxSizer(wx.HORIZONTAL) self.hasHeaderRow = wx.CheckBox(self, -1, "First row is header") wx.EVT_CHECKBOX(self, self.hasHeaderRow.GetId(), self.BuildPreview) if wx.Platform in ('__WX.WXGTK__', '__WX.WXMSW__'): # wx.SpinCtrl causes seg fault under GTK when is hit in text - use wx.SpinButton instead self.previewRowsText = wx.TextCtrl(self, -1, str(self.displayRows), size = (30, -1), style = wx.TE_PROCESS_ENTER) h = self.previewRowsText.GetSize().height self.previewRows = wx.SpinButton(self, -1, size = (-1, h), style = wx.SP_VERTICAL) self.previewRows.SetRange(self.displayRows, 100) self.previewRows.SetValue(self.displayRows) wx.EVT_SPIN(self, self.previewRows.GetId(), self.OnSpinPreviewRows) wx.EVT_TEXT_ENTER(self, self.previewRowsText.GetId(), self.OnTextPreviewRows) else: self.previewRows = wx.SpinCtrl(self, -1, str(self.displayRows), min = self.displayRows, max = 100, size = (50, -1)) wx.EVT_SPINCTRL(self, self.previewRows.GetId(), self.BuildPreview) previewSettingsBox.AddMany([ (self.hasHeaderRow, 1, wx.ALL | wx.EXPAND, 5), (wx.StaticText(self, -1, "Preview"), 0, wx.WEST | wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL, 10), ]) if wx.Platform in ('__WX.WXGTK__', '__WX.WXMSW__'): previewSettingsBox.Add(self.previewRowsText, 0, wx.ALIGN_CENTER | wx.ALL, 3) previewSettingsBox.AddMany([ (self.previewRows, 0, wx.ALIGN_CENTER | wx.ALL, 3), (wx.StaticText(self, -1, "rows"), 0, wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL), ]) # ------------- if delimiter is not None: previewData = importDSV(newdata[:self.displayRows], textQualifier = textQualifier, delimiter = delimiter, errorHandler = padRow) hasHeaders = guessHeaders(previewData) self.hasHeaderRow.SetValue(hasHeaders) cols = len(previewData[0]) else: previewData = [] hasHeaders = 0 cols = 1 previewStaticBox = wx.StaticBox(self, -1, "Data Preview") previewStaticSizer = wx.StaticBoxSizer(previewStaticBox, wx.VERTICAL) self.preview = gridlib.Grid(self, -1) self.preview.CreateGrid(self.displayRows, cols) self.preview.SetDefaultRowSize(self.preview.GetCharHeight() + 4, True) self.preview.EnableEditing(False) self.preview.SetColLabelSize(0) self.preview.SetRowLabelSize(0) self.preview.SetMargins(1, 0) self.initialized = True self.BuildPreview() rowheight = self.preview.GetRowSize(0) + 2 self.preview.SetSize((-1, rowheight * self.displayRows)) previewStaticSizer.Add(self.preview, 0, wx.ALL | wx.EXPAND, 5) # ------------- mainSizer.AddMany([ (message1, 0, wx.ALL, 5), (delimiterBox, 0, wx.ALL, 5), (previewSettingsBox, 0, wx.ALL, 5), (previewStaticSizer, 0, wx.ALL | wx.EXPAND, 5), ]) self.Layout() self.Fit() def OnSpinPreviewRows(self, event): self.previewRowsText.SetValue(str(event.GetPosition())) self.BuildPreview() def OnTextPreviewRows(self, event): try: v = int(self.previewRowsText.GetValue()) except: v = self.displayRows v = max(self.displayRows, v) v = min(v, 100) self.previewRowsText.SetValue(str(v)) self.previewRows.SetValue(v) self.BuildPreview() def Validate(self, event = None): hasDelimiter = reduce(lambda a, b: a + b, [cb.GetValue() for cb in self.delimChecks.values()]) if hasDelimiter == 1 and self.delimChecks['Other'].GetValue(): hasDelimiter = self.otherDelim.GetValue() != "" self.BuildPreview() self.isValidCallback(hasDelimiter) def BuildPreview(self, event = None): if not self.initialized: return # got triggered before initialization was completed if wx.Platform != '__WX.WXGTK__': wx.BeginBusyCursor() # causes a spurious spin event under GTK wx.Yield() # allow controls to update first, in case of slow preview self.preview.BeginBatch() self.preview.DeleteCols(0, self.preview.GetNumberCols()) self.preview.DeleteRows(0, self.preview.GetNumberRows()) self.preview.ClearGrid() textQualifier = self.textQualifierChoice.GetStringSelection() if textQualifier == '{None}': textQualifier = None other = self.otherDelim.GetValue() delimiter = map(lambda i, other = other: i[0] != 'Other' and i[0] or other, filter(lambda i: i[1].GetValue(), self.delimChecks.items())) delimiter = "".join(delimiter) rows = self.previewRows.GetValue() newdata = organizeIntoLines(self.data, textQualifier, limit = rows) try: previewData = importDSV(newdata[:rows], textQualifier = textQualifier, delimiter = delimiter, errorHandler = padRow) except InvalidDelimiter, e: previewData = map(lambda i: [i], newdata[:rows]) rows = min(rows, len(previewData)) hasHeaders = self.hasHeaderRow.GetValue() self.preview.AppendRows(rows - hasHeaders) cols = max([len(row) for row in previewData]) self.preview.AppendCols(cols) if hasHeaders: self.preview.SetColLabelSize(self.preview.GetRowSize(0)) for col in range(cols): try: self.preview.SetColLabelValue(col, str(previewData[0][col])) except: self.preview.SetColLabelValue(col, "") # self.preview.AutoSizeColumns(True) # size columns to headers else: self.preview.SetColLabelSize(0) for row in range(hasHeaders, rows): for col in range(cols): try: self.preview.SetCellValue(row - hasHeaders, col, str(previewData[row][col])) except: pass # if not hasHeaders: self.preview.AutoSizeColumns(True) # size columns to data rowheight = self.preview.GetRowSize(0) self.preview.SetRowSize(0, rowheight) self.preview.EndBatch() if wx.Platform != '__WX.WXGTK__': wx.EndBusyCursor() self.delimiters = delimiter self.textQualifier = textQualifier self.hasHeaders = hasHeaders def OnCustomDelim(self, event = None): self.delimChecks['Other'].SetValue(len(self.otherDelim.GetValue())) self.Validate() def GetDelimiters(self): return self.delimiters def GetTextQualifier(self): return self.textQualifier def GetHasHeaders(self): return self.hasHeaders # ------------------------------------------------------------------------------ class ImportWizardDialog(wx.Dialog): """ CLASS(SUPERCLASS): ImportWizardDialog(wx.Dialog) DESCRIPTION: A dialog allowing the user to preview and change the options for importing a file. PROTOTYPE: ImportWizardDialog(parent, id, title, file, pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.DEFAULT_DIALOG_STYLE, name = 'ImportWizardDialog') ARGUMENTS: - parent: the parent window - id: the id of this window - title: the title of this dialog - file: the file to import METHODS: - GetImportInfo() returns a tuple (delimiters, text qualifiers, has headers) - ImportData(errorHandler = skipRow) returns (headers, data), headers may be None errorHandler is a callback function that instructs the method on what to do with irregular rows. The default skipRow function simply discards the bad row (see importDSV() above). """ def __init__(self, parent, id, title, file, pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.DEFAULT_DIALOG_STYLE, name = "ImportWizardDialog"): wx.Dialog.__init__(self, parent, id, title, pos, size, style, name) self.SetAutoLayout(True) self.file = file f = open(file, 'r') self.data = f.read() f.close() sizer = wx.BoxSizer(wx.VERTICAL) self.delimPanel = ImportWizardPanel_Delimiters(self, -1, file, self.data, self.ValidState) buttonBox = self.ButtonBox() sizer.AddMany([ (self.delimPanel, 0, wx.ALL, 5), (buttonBox, 0, wx.SOUTH | wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_TOP, 0), ]) self.SetSizer(sizer) self.Layout() sizer.Fit(self.delimPanel) self.Fit() self.Centre() def ButtonBox(self): panel = wx.Panel(self, -1) panel.SetAutoLayout(True) sizer = wx.BoxSizer(wx.HORIZONTAL) panel.SetSizer(sizer) self.ok = wx.Button(panel, wx.ID_OK, "Ok") cancel = wx.Button(panel, wx.ID_CANCEL, "Cancel") sizer.AddMany([ (self.ok, 0, wx.ALIGN_TOP | wx.EAST | wx.SOUTH, 10), (cancel, 0, wx.ALIGN_TOP | wx.WEST | wx.SOUTH, 10), ]) panel.Layout() panel.Fit() return panel def GetImportInfo(self): return (self.delimPanel.GetDelimiters(), self.delimPanel.GetTextQualifier(), self.delimPanel.GetHasHeaders()) def ImportData(self, errorHandler = skipRow): delimiters, qualifier, hasHeaders = self.GetImportInfo() self.data = organizeIntoLines(self.data, textQualifier = qualifier) dlg = wx.ProgressDialog("Import DSV File", self.file, 100, self, wx.PD_CAN_ABORT | wx.PD_APP_MODAL | wx.PD_AUTO_HIDE) self.data = importDSV(self.data, delimiter = delimiters, textQualifier = qualifier, updateFunction = dlg.Update, errorHandler = errorHandler) if self.data is None: return None if hasHeaders: headers = copy.copy(self.data[0]) del self.data[0] else: headers = None return (headers, self.data) def ValidState(self, isValid): self.ok.Enable(isValid) # ------------------------------------------------------------------------------ if __name__ == '__main__': if wx is None: print "\nYou need wxPython to run this sample*." print "\n*Note that wxPython is _not_ necessary to use this module, but it is required" print "to use the wizard dialog (which the sample requires)." raise SystemExit def demo(): class SampleApp(wx.App): def OnInit(self): dlg = wx.FileDialog(None, "Choose a file", ".", "", "CSV files (*.csv)|*.csv|Text files (*.txt)|*.txt|All files (*.*)|*.*", wx.OPEN) if dlg.ShowModal() == wx.ID_OK: path = dlg.GetPath() dlg.Destroy() errorLog = open('import_error.log', 'a+') def logErrors(oldrow, newrow, expectedColumns, maxColumns, file = errorLog): # log the bad row to a file file.write(oldrow + '\n') dlg = ImportWizardDialog(None, -1, 'CSV Import Wizard (v.%s)' % __version__, path) if dlg.ShowModal() == wx.ID_OK: results = dlg.ImportData(errorHandler = logErrors) dlg.Destroy() errorLog.close() if results is not None: headers, data = results if True: # print the output to stdout if headers: print headers print 80*'=' for row in data: print row if True: # for testing export functionality if headers: print exportDSV([headers] + data) else: print exportDSV(data) else: dlg.Destroy() else: dlg.Destroy() return True app = SampleApp() app.MainLoop() # import profile # profile.run('demo()') demo() bitpim-1.0.7+dfsg1/src/thirdparty/__init__.py0000644001616600161660000000002410551013425017231 0ustar amuamu# keep python happy bitpim-1.0.7+dfsg1/src/outlook_tasks.py0000644001616600161660000001207110354725216016217 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: outlook_tasks.py 2703 2005-12-29 09:21:18Z djpham $ "Deals with Outlook Tasks import stuff" # System modules # wxPython modules import wx # BitPim modules import common_calendar import native.outlook as ol import outlook_calendar import outlook_notes import todo #------------------------------------------------------------------------------- # convertor funcs _outlook_status={ ol.outlook_com.constants.olTaskNotStarted: todo.TodoEntry.ST_NotStarted, ol.outlook_com.constants.olTaskInProgress: todo.TodoEntry.ST_InProgress, ol.outlook_com.constants.olTaskComplete: todo.TodoEntry.ST_Completed, ol.outlook_com.constants.olTaskWaiting: todo.TodoEntry.ST_NeedActions, ol.outlook_com.constants.olTaskDeferred: todo.TodoEntry.ST_Cancelled } _outlook_priority={ ol.outlook_com.constants.olImportanceLow: 10, ol.outlook_com.constants.olImportanceNormal: 5, ol.outlook_com.constants.olImportanceHigh: 1 } def _convert_status(dict, v, obj): return _outlook_status.get(v, None) def _convert_priority(dict, v, obj): return _outlook_priority.get(v, 5) def bp_date_str(dict, v): try: if v[0]>=common_calendar.no_end_date[0]: # no-end date, don't display it return '' return '%04d-%02d-%02d'% v[:3] except (ValueError, TypeError): return '' except: if __debug__: raise return '' def status_str(dict, v): if v: return todo.TodoEntry.ST_Names[v] else: return '' #------------------------------------------------------------------------------- class OutlookTasksImportData(outlook_notes.OutlookNotesImportData): _data_keys=[ # (Outlook field, MemoEntry field, convertor function) ('Status', 'status', _convert_status), ('DateCompleted', 'completion_date', outlook_calendar.to_bp_date), ('Complete', 'complete', None), ('Importance', 'priority', _convert_priority), ('PercentComplete', 'percent_complete', None), ('DueDate', 'due_date', outlook_calendar.to_bp_date), ('Subject', 'summary', None), ('Body', 'note', None), ('Categories', 'categories', outlook_calendar.convert_categories), ] _default_filter={ 'start': None, 'end': None, 'categories': None, 'non_completed': False, } _data_item_class=todo.TodoEntry _default_folder_type='tasks' def __init__(self, outlook): outlook_notes.OutlookNotesImportData.__init__(self, outlook) def _accept(self, e): # check for Completed tasks if self._filter['non_completed'] and e['complete']: return False # check for the due date if e['due_date']!=common_calendar.no_end_date: _date=e['due_date'][:3] if self._filter['start'] is not None and \ _dateself._filter['end'][:3]: return False c=self._filter.get('categories', None) if not c: # no categories specified => all catefories allowed. return True if [x for x in e['categories'] if x in c]: return True return False def _populate_entry(self, entry, new_entry): new_entry.status=entry.get('status', todo.TodoEntry.ST_NotStarted) if entry['completion_date']!=common_calendar.no_end_date: new_entry.completion_date='%04d%02d%02d'%entry['completion_date'][:3] new_entry.priority=entry.get('priority', 5) new_entry.percent_complete=entry.get('percent_complete', 0) if entry['due_date']!=common_calendar.no_end_date: new_entry.due_date='%04d%02d%02d'%entry['due_date'][:3] new_entry.summary=entry.get('summary', None) new_entry.note=entry.get('note', None) v=[] for k in entry.get('categories', []): v.append({ 'category': k }) new_entry.categories=v #------------------------------------------------------------------------------- class FilterDialog(outlook_notes.FilterDialog): _has_complete_option=True #------------------------------------------------------------------------------- class OutlookImportTasksDialog(outlook_calendar.OutlookImportCalDialog): _column_labels=[ ('due_date', 'Due Date', 200, bp_date_str), ('summary', 'Summary', 400, None), ('status', 'Status', 200, status_str), ('categories', 'Category', 200, common_calendar.category_str) ] _config_name='import/tasks/outlookdialog' _browse_label='Outlook Tasks Folder:' _progress_dlg_title='Outlook Tasks Import' _error_dlg_title='Outlook Tasks Import Error' _error_dlg_text='Outlook Tasks Items that failed to import:' _data_class=OutlookTasksImportData _filter_dlg_class=FilterDialog bitpim-1.0.7+dfsg1/src/prototypes.py0000644001616600161660000020145711323744222015551 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2005 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: prototypes.py 4784 2010-01-15 01:44:50Z djpham $ """The various types used in protocol descriptions To implement a type used for protocol descriptions, examine the code for UINTlsb in this file. Of note: - Inherit from BaseProtogenClass - Call superclass constructors using super() - Do not process any of the args or kwargs in the constructor unless you need them to alter how you are constructed - At the end of the constructor, call _update if you are the most derived class - In _update, call super()._update, and then delete keyword arguments as you process them (consider using L{BaseProtogenClass._consumekw} function) - If you are the most derived class, complain about unused keyword arguments (consider using L{BaseProtogenClass._complainaboutunusedargs} function) - set _bufferstartoffset and _bufferendoffset whenever you are read or written from a buffer - (optionally) define a getvalue() method that returns a better type. For example if your class is integer like then this would return a real int. If string like, then this will return a real string. - If you are a container, override iscontainer. You will also need to provide a containerelements() method which lets you iterate over the entries. containerelements method: - You should return tuples of (fieldname, fieldvalue, descriptionstring or None) - fieldvalue should be the actual object, not a pretty version (eg a USTRING not str) """ import sys import calendar import cStringIO import re import time import common class ProtogenException(Exception): """Base class for exceptions encountered with data marshalling""" def __init__(self, *args, **kwargs): Exception.__init__(self, *args, **kwargs) class SizeNotKnownException(ProtogenException): "Unable to marshal since size isn't known" def __init__(self): ProtogenException.__init__(self, "The size of this item is not known and hence cannot be en/decoded") class ValueNotSetException(ProtogenException): "Value not been set" def __init__(self): ProtogenException.__init__(self, "The value for this object has not been set.") class ValueException(ProtogenException): "Some sort of problem with the value" def __init__(self, str): ProtogenException.__init__(self,str) class NotTerminatedException(ProtogenException): "The value should have been terminated and wasn't" def __init__(self): ProtogenException.__init__(self,"The value should have been terminated and wasn't") class ValueLengthException(ProtogenException): "The value is the wrong size (too big or too small)" def __init__(self, sz, space): ProtogenException.__init__(self, "The value (length %d) is the wrong size for space %d" % (sz,space)) class MissingQuotesException(ProtogenException): "The value does not have quotes around it" def __init__(self): ProtogenException.__init__(self, "The value does not have the required quote characters around it") class BaseProtogenClass(object): """All types are derived from this""" def __init__(self, *args, **kwargs): pass def packetsize(self): "Returns size in bytes that we occupy" # This is implemented by writing to a buffer and seeing how big the result is. # The code generator used to make one per class but it was so rarely used (twice) # that this implementation is available instead b=buffer() self.writetobuffer(b) return len(b.getvalue()) def writetobuffer(self, buf): "Scribble ourselves to the buf" raise NotImplementedError("writetobuffer()") def readfrombuffer(self, buf): "Get our value from the buffer" raise NotImplementedError("readfrombuffer()") def getvalue(self): "Returns our underlying value if sensible (eg an integer, string or list) else returns self" return self def packetspan(self): """Returns tuple of begining,end offsets from last packet we were read or written from. Note that in normal Python style, end is one beyond the last byte we actually own""" return self._bufferstartoffset, self._bufferendoffset def _consumekw(self, dict, consumelist): """A helper function for easily setting internal values from the dict For each name in consumelist, we look for it in the dict and set self._name to the value from dict. The key is then deleted from the dict.""" for name in consumelist: if dict.has_key(name): setattr(self, "_"+name, dict[name]) del dict[name] def _complainaboutunusedargs(self, klass, dict): """A helper function that will raise an exception if there are unused keyword arguments. @Note: that we only complain if in the most derived class, so it is safe to always call this helper as the last line of your constructor. @param klass: This should be the class you are calling this function from @param dict: The keyword arguments still in play """ if len(dict) and self.__class__.__mro__[0]==klass: raise TypeError('Unexpected keyword args supplied: '+`dict`) def _ismostderived(self, klass): return self.__class__.__mro__[0]==klass def _update(self, args, kwargs): return def iscontainer(self): """Do we contain fields?""" return False def update(self, *args, **kwargs): self._update(args, kwargs) # help with logging def autologwrite(self, buf, logtitle=""): f=sys._getframe() # my frame f=f.f_back # my caller if f: f=f.f_back # their caller if f: caller=f.f_locals.get("self", None) if caller: try: caller.logdata(logtitle, buf.getvalue(), self) except: pass def autologread(self, buf, logtitle=""): f=sys._getframe() # my frame f=f.f_back # my caller if f: f=f.f_back # their caller if f: caller=f.f_locals.get("self", None) if caller: try: caller.logdata(logtitle, buf.getdata(), self) except: pass class UINTlsb(BaseProtogenClass): "An integer in Least Significant Byte first order" def __init__(self, *args, **kwargs): """ An integer value can be specified in the constructor, or as the value keyword arg. @keyword constant: (Optional) A constant value. All reads must have this value @keyword constantexception: (Optional) Type of exception raised when data doesn't match constant. @keyword sizeinbytes: (Mandatory for writing, else Optional) How big we are in bytes @keyword default: (Optional) Our default value @keyword value: (Optional) The value """ super(UINTlsb, self).__init__(*args, **kwargs) self._constant=None self._constantexception=ValueError self._sizeinbytes=None self._value=None self._default=None if self._ismostderived(UINTlsb): self._update(args,kwargs) def _update(self, args, kwargs): super(UINTlsb,self)._update(args, kwargs) self._consumekw(kwargs, ("constant", "constantexception", "sizeinbytes", "default", "value")) self._complainaboutunusedargs(UINTlsb,kwargs) # Set our value if one was specified if len(args)==0: pass elif len(args)==1: self._value=int(args[0]) else: raise TypeError("Unexpected arguments "+`args`) if self._value is None and self._default is not None: self._value=self._default if self._value is None and self._constant is not None: self._value=self._constant if self._constant is not None and self._constant!=self._value: raise self._constantexception("This field is a constant of %d. You tried setting it to %d" % (self._constant, self._value)) def readfrombuffer(self, buf): if self._sizeinbytes is None: raise SizeNotKnownException() self._bufferstartoffset=buf.getcurrentoffset() # lsb read res=0 shift=0 for dummy in range(self._sizeinbytes): res|=buf.getnextbyte()<>=8 self._bufferendoffset=buf.getcurrentoffset() def packetsize(self): if self._sizeinbytes is None: raise SizeNotKnownException() return self._sizeinbytes def getvalue(self): """Returns the integer we are""" if self._value is None: raise ValueNotSetException() return self._value class BOOLlsb(UINTlsb): "An Boolean in Least Significant Byte first order" def __init__(self, *args, **kwargs): """ A boolean value can be specified in the constructor. Keyword arguments are the same a UINTlsb """ super(BOOLlsb, self).__init__(*args, **kwargs) if self._ismostderived(BOOLlsb): self._update(args,kwargs) def _update(self, args, kwargs): super(BOOLlsb,self)._update(args,kwargs) self._complainaboutunusedargs(BOOLlsb,kwargs) self._boolme() def _boolme(self): if self._value is not None: self._value=bool(self._value) def readfrombuffer(self, buf): UINTlsb.readfrombuffer(self,buf) self._boolme() class STRING(BaseProtogenClass): "A text string DEPRECATED USE USTRING " def __init__(self, *args, **kwargs): """ A string value can be specified to this constructor, or in the value keyword arg. @keyword constant: (Optional) A constant value. All reads must have this value @keyword terminator: (Default=0) The string terminator (or None). If set there will always be a terminator when writing. The terminator is not returned when getting the value. @keyword pad: (Default=0) The padding byte if fixed length when writing, or stripped off when reading @keyword sizeinbytes: (Optional) Set if fixed length. If not set, then the terminator will be used to find the end of strings on reading. If not set and the terminator is None, then reads will be entire rest of buffer. @keyword maxsizeinbytes: (Optional) Max string length. Used together with terminator to limit the max length of the value. TODO: Need to add this to USTRING also. @keyword default: (Optional) Our default value @keyword raiseonunterminatedread: (Default True) raise L{NotTerminatedException} if there is no terminator on the value being read in. terminator must also be set. @keyword raiseontruncate: (Default True) raise L{ValueLengthException} if the supplied value is too large to fit within sizeinbytes. @keyword value: (Optional) Value @keyword pascal: (Default False) The string is preceded with one byte giving the length of the string (including terminator if there is one) """ super(STRING, self).__init__(*args, **kwargs) self._constant=None self._terminator=0 self._pad=0 self._sizeinbytes=None self._default=None self._raiseonunterminatedread=True self._raiseontruncate=True self._value=None self._pascal=False self._maxsizeinbytes=None if self._ismostderived(STRING): self._update(args,kwargs) def _update(self, args, kwargs): super(STRING,self)._update(args, kwargs) self._consumekw(kwargs, ("constant", "terminator", "pad", "pascal", "sizeinbytes", "default", "raiseonunterminatedread", "value", "raiseontruncate", "maxsizeinbytes")) self._complainaboutunusedargs(STRING,kwargs) # Set our value if one was specified if len(args)==0: pass elif len(args)==1: self._value=common.forceascii(args[0]) if self._constant is not None and self._constant!=self._value: raise ValueException("This field is a constant of '%s'. You tried setting it to '%s'" % (self._constant, self._value)) else: raise TypeError("Unexpected arguments "+`args`) if self._value is None and self._default is not None: self._value=self._default if self._value is not None: self._value=str(self._value) # no unicode here! l=len(self._value) if self._sizeinbytes is not None: if self._terminator is not None: l+=1 if l>self._sizeinbytes: if self._raiseontruncate: raise ValueLengthException(l, self._sizeinbytes) self._value=self._value[:self._sizeinbytes] if len(self._value) and self._terminator is not None: self._value=self._value[:-1] elif self._maxsizeinbytes is not None: if l>self._maxsizeinbytes: if self._raiseontruncate: raise ValueLengthException(l, self._maxsizeinbytes) self._value=self._value[:self._maxsizeinbytes] def readfrombuffer(self, buf): self._bufferstartoffset=buf.getcurrentoffset() flush=0 if self._pascal: if self._sizeinbytes is None: self._sizeinbytes=buf.getnextbyte() # allow for fixed size pascal strings else: temp=self._sizeinbytes-1 self._sizeinbytes=buf.getnextbyte() flush=temp-self._sizeinbytes if(temp < 0): raise ValueLengthException() if self._sizeinbytes is not None: # fixed size self._value=buf.getnextbytes(self._sizeinbytes) if self._terminator is not None: # using a terminator pos=self._value.find(chr(self._terminator)) if pos>=0: self._value=self._value[:pos] elif self._raiseonunterminatedread: raise NotTerminatedException() elif self._pad is not None: # else remove any padding while len(self._value) and self._value[-1]==chr(self._pad): self._value=self._value[:-1] else: if self._terminator is None: # read in entire rest of packet self._value=buf.getremainingbytes() else: # read up to terminator self._value="" while buf.hasmore(): self._value+=chr(buf.getnextbyte()) if self._value[-1]==chr(self._terminator): break if self._value[-1]!=chr(self._terminator): if self._raiseonunterminatedread: raise NotTerminatedException() else: self._value=self._value[:-1] if self._maxsizeinbytes is not None: self._value=self._value[:self._maxsizeinbytes] if self._constant is not None and self._value!=self._constant: raise ValueException("The value read was not the constant") # for fixed size pascal strings flush the remainder of the buffer if(flush): buf.getnextbytes(flush) self._bufferendoffset=buf.getcurrentoffset() def writetobuffer(self, buf): if self._value is None: raise ValueNotSetException() self._bufferstartoffset=buf.getcurrentoffset() # calculate length l=len(self._value) if self._terminator is not None: l+=1 if self._pascal: buf.appendbyte(l) l+=1 buf.appendbytes(self._value) if self._terminator is not None: buf.appendbyte(self._terminator) if self._sizeinbytes is not None: if l 4: raise ValueException("Terminator length outside allowed range of 1-4. You tried setting it to %d" % self._terminator_length) # detect correct terminator length if self._terminator == 0: if self._encoding.startswith("utf_16"): self._terminator_length = 2 elif self._encoding.startswith("utf_32"): self._terminator_length = 4 # Set our value if one was specified if len(args)==0: pass elif len(args)==1: self._value=args[0] else: raise TypeError("Unexpected arguments "+`args`) if self._value is None and self._default is not None: self._value=self._default if self._value is not None: # convert _value to unicode, non-string objects convert to string representation # allows strings to be initialised with integers etc. if not isinstance(self._value, (str, unicode)): # convert numbers into strings temp=str(self._value) self._value=unicode(temp, 'ascii', 'replace') # we should only receive unicode strings from bitpim, but... elif not isinstance(self._value, unicode): # there is a bug, the docs say this should work on unicode strings but it does not self._value=unicode(self._value, 'ascii', 'replace') if self._constant is not None and self._constant!=self._value: raise ValueException("This field is a constant of '%s'. You tried setting it to '%s'" % (self._constant, self._value)) # test that we can convert the string, also needed for "sizeinbytes" try: test=self.convert_for_write() except UnicodeEncodeError: raise common.PhoneStringEncodeException(self._value, uni_string_codec) if self._value is not None: max_size=None if self._sizeinbytes is not None: max_size=self._sizeinbytes elif self._maxsizeinbytes is not None: max_size=self._maxsizeinbytes if max_size is not None: l=len(test) if self._terminator is not None: l+=self._terminator_length if l>max_size: if self._raiseontruncate: raise ValueLengthException(l, self._sizeinbytes) # truncate, but the number of bytes might be larger than the number of # unicode characters depending on conversion self._value=self._value[:max_size] term_len=0 if self._terminator!=None: term_len=self._terminator_length # adjust for terminator and multibyte characters while (len(self.convert_for_write())+term_len)>max_size: self._value=self._value[:-1] def readfrombuffer(self, buf): self._bufferstartoffset=buf.getcurrentoffset() flush=0 _value='' if self._pascal: if self._sizeinbytes is None: self._sizeinbytes=buf.getnextbyte() # allow for fixed size pascal strings else: temp=self._sizeinbytes-1 self._sizeinbytes=buf.getnextbyte() flush=temp-self._sizeinbytes if(temp < 0): raise ValueLengthException() if self._sizeinbytes is not None: # fixed size _value=buf.getnextbytes(self._sizeinbytes) if self._terminator is not None: # using a terminator pos=-1 for i in range(0, self._sizeinbytes, self._terminator_length): term=0 for j in range(self._terminator_length): term+=ord(_value[i+j])<<(j*8) if term==self._terminator: pos=i break if pos>=0: _value=_value[:pos] elif self._raiseonunterminatedread: raise NotTerminatedException() elif self._pad is not None: # else remove any padding while len(_value) and _value[-1]==chr(self._pad): _value=_value[:-1] else: if self._terminator is None: # read in entire rest of packet _value=buf.getremainingbytes() else: # read up to terminator _value="" count=0 term=0 while buf.hasmore(): _value+=chr(buf.getnextbyte()) count+=1 if (count % self._terminator_length)==0: term=0 # see if we have a terminator for j in range(self._terminator_length): term=(term<<8)+ord(_value[count-1-j]) if term==self._terminator: break if term!=self._terminator and self._raiseonunterminatedread: raise NotTerminatedException() else: _value=_value[:-1] if self._maxsizeinbytes is not None: _value=_value[:self._maxsizeinbytes] if self._constant is not None and _value!=self._constant: raise ValueException("The value read was not the constant") # for fixed size pascal strings flush the remainder of the buffer if(flush): buf.getnextbytes(flush) self._bufferendoffset=buf.getcurrentoffset() # we will convert to unicode when the value is retrieved. # this prevents garbage that will never be used from causing an # exception. e.g. A deleted calendar record on some LG phones may contain # all f's, this causes an exception if we try to convert to unicode. self._value=_value def writetobuffer(self, buf): if self._value is None: raise ValueNotSetException() self._bufferstartoffset=buf.getcurrentoffset() # calculate length temp_str=self.convert_for_write() # this length is the character length of the string NOT the byte length (BIG DIFFERENCE) # the byte length is calculated below l=len(temp_str) if self._terminator is not None: l+=1 if self._pascal: buf.appendbyte(l) l+=1 buf.appendbytes(temp_str) term=self._terminator if self._terminator is not None: for j in range(self._terminator_length): buf.appendbyte((term & 0xFF)) term=term>>8 # calculate the byte length self._bufferendoffset=buf.getcurrentoffset() l = self._bufferendoffset - self._bufferstartoffset # pad the buffer if self._sizeinbytes is not None: if lself._maxsizeinbytes: if self._raiseontruncate: raise ValueLengthException(l, self._maxsizeinbytes) self._value=self._value[:self._maxsizeinbytes] def readfrombuffer(self, buf): self._bufferstartoffset=buf.getcurrentoffset() # First character better be a terminator # Raise on, first char not quote, trailing quote never found, character after last quote # not , or EOL. Will need an option to not raise if initial quote not found if self._terminator is None: # read in entire rest of packet # Ignore maxsizeinbytes # Check for leading and trailing quotes later self._value=buf.getremainingbytes() else: # Possibly quoted string. If first character is not a quote, read until # terminator or end of line. Exception will be thrown after reading if # the string was not quoted and it was supposed to be. self._value=chr(buf.getnextbyte()) if self._value == ',': self._value = '' else: inquotes=False if self._quotechar is not None: if self._value[0]==chr(self._quotechar): inquotes=True while buf.hasmore(): self._value+=chr(buf.getnextbyte()) if inquotes: if self._value[-1]==chr(self._quotechar): inquotes=False else: if self._value[-1]==chr(self._terminator): break if self._value[-1]==self._terminator: if self._raiseonunterminatedread: raise NotTerminatedException() else: self._value=self._value[:-1] if self._quotechar is not None and self._value: if self._value[0]==chr(self._quotechar) and self._value[-1]==chr(self._quotechar): self._value=self._value[1:-1] else: raise MissingQuotesException() if self._readescape: self._value=common.pppunescape(self._value) if self._constant is not None and self._value!=self._constant: raise ValueException("The value read was not the constant") self._bufferendoffset=buf.getcurrentoffset() def writetobuffer(self, buf): # Need to raise exception if string exceeds maxsizeinbytes if self._value is None: raise ValueNotSetException() if self._encoding and isinstance(self._value, unicode): try: _value=common.encode_with_degrade(self._value, self._encoding) except UnicodeError: if self._raiseonunicodeerror: raise common.PhoneStringEncodeException(self._value, self._encoding) else: # failed to encode, clear it out _value='' else: _value=self._value self._bufferstartoffset=buf.getcurrentoffset() if self._quotechar is not None: buf.appendbyte(self._quotechar) buf.appendbytes(_value) if self._quotechar is not None: buf.appendbyte(self._quotechar) if self._terminator is not None: buf.appendbyte(self._terminator) self._bufferendoffset=buf.getcurrentoffset() def packetsize(self): if self._sizeinbytes is not None: return self._sizeinbytes if self._value is None: raise ValueNotSetException() l=len(self._value) if self._terminator is not None: l+=1 return l def getvalue(self): """Returns the string we are""" if self._value is None: raise ValueNotSetException() # convert to unicode if we are not already if self._encoding and not isinstance(self._value, unicode): try: if self._raiseonunicodeerror: self._value=self._value.decode(self._encoding) else: self._value=self._value.decode(self._encoding, 'ignore') except UnicodeDecodeError: # this means the codec is set wrong for this phone !! raise common.PhoneStringDecodeException(self._value, self._encoding) return self._value class CSVINT(CSVSTRING): """Integers in CSV lines""" def __init__(self, *args, **kwargs): super(CSVINT,self).__init__(*args, **kwargs) self._quotechar=None if self._ismostderived(CSVINT): self._update(args,kwargs) def _update(self, args, kwargs): for k in 'constant', 'default', 'value': if kwargs.has_key(k): kwargs[k]=str(kwargs[k]) if len(args)==0: pass elif len(args)==1: args=(str(args[0]),) else: raise TypeError("expected integer as arg") super(CSVINT,self)._update(args,kwargs) self._complainaboutunusedargs(CSVINT,kwargs) def getvalue(self): """Convert the string into an integer @rtype: integer """ # Will probably want an flag to allow null strings, converting # them to a default value val=super(CSVINT,self).getvalue() try: ival=int(val) except: try: ival=int(self._default) except: raise ValueException("The field '%s' is not an integer" % (val)) return ival class CSVDATE(CSVSTRING): """Dates in CSV lines""" def __init__(self, *args, **kwargs): super(CSVDATE,self).__init__(*args, **kwargs) self._valuedate=(0,0,0) # Year month day self._quotechar=None if self._ismostderived(CSVDATE): self._update(args,kwargs) def _update(self, args, kwargs): for k in 'constant', 'default', 'value': if kwargs.has_key(k): kwargs[k]=self._converttostring(kwargs[k]) if len(args)==0: pass elif len(args)==1: args=(self._converttostring(args[0]),) else: raise TypeError("expected (year,month,day) as arg") super(CSVDATE,self)._update(args, kwargs) # we want the args self._complainaboutunusedargs(CSVDATE,kwargs) def getvalue(self): """Unpack the string into the date @rtype: tuple @return: (year, month, day) """ s=super(CSVDATE,self).getvalue() val=s.split("/") # List of of Month, day, year if len(val)<2: year = 0 month = 0 day = 0 else: year=int(val[2]) month=int(val[0]) day=int(val[1]) return (year, month, day) def _converttostring(self, date): if len(date)>=3: year,month,day=date[:3] if month>0 or day>0 or year>0: s='%2.2d/%2.2d/%4.4d'%(month, day, year) else: s="" else: s="" return s class CSVTIME(CSVSTRING): """Timestamp in CSV lines""" def __init__(self, *args, **kwargs): super(CSVTIME,self).__init__(*args, **kwargs) self._valuetime=(0,0,0,0,0,0) # Year month day, hour, minute, second self._quotechar=None if self._ismostderived(CSVTIME): self._update(args,kwargs) def _update(self, args, kwargs): for k in 'constant', 'default', 'value': if kwargs.has_key(k): kwargs[k]=self._converttostring(kwargs[k]) if len(args)==0: pass elif len(args)==1: args=(self._converttostring(args[0]),) else: raise TypeError("expected (year,month,day) as arg") super(CSVTIME,self)._update(args, kwargs) # we want the args self._complainaboutunusedargs(CSVTIME,kwargs) def getvalue(self): """Unpack the string into the date @rtype: tuple @return: (year, month, day) """ s=super(CSVTIME,self).getvalue() year=int(s[0:4]) month=int(s[4:6]) day=int(s[6:8]) hour=int(s[9:11]) minute=int(s[11:13]) second=int(s[13:15]) return (year, month, day, hour, minute, second) def _converttostring(self, time): if len(time)>=6: year,month,day,hour,minute,second=time[:6] s='%4.4d%2.2d%2.2dT%2.2d%2.2d%2.2d'%(year, month, day, hour, minute, second) else: s="" return s class COUNTEDBUFFEREDSTRING(BaseProtogenClass): """A string as used on Audiovox. There is a one byte header saying how long the string is, followed by the string in a fixed sized buffer""" def __init__(self, *args, **kwargs): """ A string value can be specified to this constructor, or in the value keyword arg. @keyword constant: (Optional) A constant value. All reads must have this value @keyword pad: (Default=32 - space) When writing, what to pad the rest of the buffer with @keyword default: (Optional) Our default value @keyword raiseontruncate: (Default True) raise L{ValueLengthException} if the supplied value is too large to fit within the buffer. @keyword value: (Optional) Value @keyword sizeinbytes: (Mandatory) Size of the buffer, including the count byte """ super(COUNTEDBUFFEREDSTRING,self).__init__(*args, **kwargs) self._constant=None self._pad=32 self._sizeinbytes=None self._default=None self._raiseontruncate=True self._value=None if self._ismostderived(COUNTEDBUFFEREDSTRING): self._update(args, kwargs) def _update(self, args, kwargs): super(COUNTEDBUFFEREDSTRING,self)._update(args, kwargs) self._consumekw(kwargs, ("constant", "pad", "sizeinbytes", "default", "raiseontruncate", "value")) self._complainaboutunusedargs(COUNTEDBUFFEREDSTRING,kwargs) # Set our value if one was specified if len(args)==0: pass elif len(args)==1: self._value=str(args[0]) if self._constant is not None and self._constant!=self._value: raise ValueException("This field is a constant of '%s'. You tried setting it to '%s'" % (self._constant, self._value)) else: raise TypeError("Unexpected arguments "+`args`) if self._value is None and self._default is not None: self._value=self._default if self._sizeinbytes is None: raise ValueException("sizeinbytes must be specified for COUNTEDBUFFEREDSTRING") if self._value is not None: l=len(self._value) if l>self._sizeinbytes-1: if self._raiseontruncate: raise ValueLengthException(l, self._sizeinbytes-1) self._value=self._value[:self._sizeinbytes-1] def readfrombuffer(self, buf): assert self._sizeinbytes is not None self._bufferstartoffset=buf.getcurrentoffset() strlen=buf.getnextbyte() if strlen>self._sizeinbytes-1: raise ValueException("counter specifies size of %d which is greater than remaining stringbuffer size of %d!" % (strlen, self._sizeinbytes-1)) self._value=buf.getnextbytes(self._sizeinbytes-1) # -1 due to counter byte self._value=self._value[:strlen] if self._constant is not None and self._value!=self._constant: raise ValueException("The value read was not the constant") self._bufferendoffset=buf.getcurrentoffset() def writetobuffer(self, buf): assert self._sizeinbytes is not None if self._value is None: raise ValueNotSetException() self._bufferstartoffset=buf.getcurrentoffset() buf.appendbyte(len(self._value)) buf.appendbytes(self._value) if len(self._value)+11 and len(self._default)!=self._sizeinbytes: raise ValueLengthException(len(self._default), self._sizeinbytes) def readfrombuffer(self, buf): self._bufferstartoffset=buf.getcurrentoffset() if self._storage: # read & store self._value=buf.getnextbytes(self._sizeinbytes) else: # just ignore it buf.discardnextbytes(self._sizeinbytes) self._bufferendoffset=buf.getcurrentoffset() def writetobuffer(self, buf): self._bufferstartoffset=buf.getcurrentoffset() buf.appendbytes(self.getvalue()) self._bufferendoffset=buf.getcurrentoffset() def packetsize(self): return self._sizeinbytes def getvalue(self): """Returns the bytes we are""" if self._value is not None: return self._value elif len(self._default)>1: return self._default else: return self._default*self._sizeinbytes class UNKNOWN(DATA): "A block of bytes whose purpose we don't know" def __init__(self, *args, **kwargs): """ Same arguments as L{DATA.__init__}. We default to a block of pad chars (usually \x00) """ dict={'pad':0 , 'default': ""} dict.update(kwargs) super(UNKNOWN,self).__init__(*args, **dict) if self._ismostderived(UNKNOWN): self._update(args,dict) def _update(self, args, kwargs): super(UNKNOWN,self)._update(args, kwargs) self._complainaboutunusedargs(UNKNOWN,kwargs) # Was a value specified? if len(args)==1: self._value=args[0] elif len(args)>1: raise TypeError("Unexpected arguments "+`args`) class LIST(BaseProtogenClass): """A list of items You can generally treat this class as though it is a list. Note that some list like methods haven't been implemented (there are so darn many!) If you are missing one you want to use, please add it to this class. """ def __init__(self, *args, **kwargs): """ You can pass objects to start the list with, or to the value keyword arg @keyword createdefault: (Default False) Creates default members of the list if enough were not supplied before writing. @keyword length: (Optional) How many items there are in the list @keyword raiseonbadlength: (Default True) raises L{ValueLengthException} if there are the wrong number of items in the list. Note that this checking is only done when writing or reading from a buffer. length must be set for this to have any effect. If you have createdefault set then having less than length elements will not cause the exception. @keyword elementclass: (Mandatory) The class of each element @keyword elementinitkwargs: (Optional) KWargs for the constructor of each element @keyword value: (Optional) Value """ self._thelist=[] super(LIST, self).__init__(*args, **kwargs) self._createdefault=False self._length=None self._raiseonbadlength=True self._raiseonincompleteread=True self._elementclass=None self._elementinitkwargs={} if self._ismostderived(LIST): self._update(args,kwargs) def _update(self, args, kwargs): super(LIST,self)._update(args, kwargs) self._consumekw(kwargs, ("createdefault","length","raiseonbadlength","elementclass","elementinitkwargs","raiseonincompleteread")) if kwargs.has_key("value"): self._thelist=list(kwargs['value']) del kwargs['value'] self._complainaboutunusedargs(LIST,kwargs) if self._elementclass is None: raise TypeError("elementclass argument was not supplied") if len(args): self.extend(args) def readfrombuffer(self,buf): self._bufferstartoffset=buf.getcurrentoffset() # delete all existing items self._thelist=[] if self._length is None: # read rest of buffer while buf.hasmore(): x=self._makeitem() x.readfrombuffer(buf) self._thelist.append(x) else: for dummy in range(self._length): # read specified number of items x=self._makeitem() try: x.readfrombuffer(buf) except IndexError: if self._raiseonincompleteread: raise IndexError("tried to read too many list items") self._thelist.append(x) self._bufferendoffset=buf.getcurrentoffset() def writetobuffer(self, buf): self._bufferstartoffset=buf.getcurrentoffset() self._ensurelength() for i in self: i.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def packetsize(self): self._ensurelength() sz=0 for item in self: sz+=item.packetsize() return sz def iscontainer(self): return True def containerelements(self): self._ensurelength() for i,v in enumerate(self._thelist): yield "["+`i`+"]",v,None # Provide various list methods. I initially tried just subclassing list, # but it was impossible to tell which methods needed to be reimplemented. # I was concerned about double conversions. # For example if my append turned the item into elementclass # and then the builtin list append called setitem to do the append, which I # also override so it then converts the elementclass into another # elementclass. def append(self, item): self._thelist.append(self._makeitem(item)) def extend(self, items): self._thelist.extend(map(self._makeitem, items)) def insert(self, index, item): self._thelist.insert(index, self._makeitem(item)) def __getitem__(self, index): return self._thelist[index] def __iter__(self): try: return self._thelist.__iter__() except: return self.__fallbackiter() def __fallbackiter(self): # used for Python 2.2 which doesn't have list.__iter__ for item in self._thelist: yield item def __len__(self): return self._thelist.__len__() def __setitem__(self, index, value): self._thelist.__setitem__(index, self._makeitem(value)) def __delitem__(self, index): self._thelist.__delitem__(index) def _makeitem(self, *args, **kwargs): "Creates a child element" # if already of the type, then return it if len(args)==1 and isinstance(args[0], self._elementclass): return args[0] d={} d.update(self._elementinitkwargs) d.update(kwargs) return self._elementclass(*args, **d) def _ensurelength(self): "Ensures we are the correct length" if self._createdefault and self._length is not None and len(self._thelist)len(self._data): raise IndexError('Trying to set offset beyond end of %d byte buffer'%len(self._data)) self._offset=ofs offset=property(fget=getcurrentoffset, fset=setcurrentoffset) def peeknextbyte(self, howmuch=0): "Returns value of next byte, but doesn't advance position" if self._offset+howmuch>=len(self._data): return None return ord(self._data[self._offset+howmuch]) def getnextbyte(self): "Returns next byte" if self._offset>=len(self._data): raise IndexError("trying to read one byte beyond end of "+`len(self._data)`+" byte buffer") res=ord(self._data[self._offset]) self._offset+=1 return res def getnextbytes(self, howmany): "Returns howmany bytes" assert howmany>=0 if self._offset+howmany>len(self._data): raise IndexError("Trying to read "+`howmany`+" bytes starting at "+`self._offset`+" which will go beyond end of "+`len(self._data)`+" byte buffer") res=self._data[self._offset:self._offset+howmany] self._offset+=howmany return res def peeknextbytes(self, howmany): if self._offset+howmany>len(self._data): return None return self._data[self._offset:self._offset+howmany] def getremainingbytes(self): "Returns rest of buffer" sz=len(self._data)-self._offset return self.getnextbytes(sz) def discardnextbytes(self, howmany): "Discards howmany bytes" if self._offset+howmany>len(self._data): raise IndexError("Trying to discard "+`howmany`+" bytes starting at "+`self._offset`+" which will go beyond end of "+`len(self._data)`+" byte buffer") self._offset+=howmany def discardremainingbytes(self): "Discards the rest of the buffer" self._offset=len(self._data) def hasmore(self): "Is there any data left?" return self._offset=0 and val<=255 self._buffer.write(chr(val)) self._offset+=1 assert self._offset==len(self._buffer.getvalue()) def appendbytes(self, bytes): "Adds bytes to end" self._buffer.write(bytes) self._offset+=len(bytes) assert self._offset==len(self._buffer.getvalue()) def getvalue(self): "Returns the buffer being built" return self._buffer.getvalue() def getdata(self): "Returns the data passed in" return self._data bitpim-1.0.7+dfsg1/src/todo.py0000644001616600161660000006402710721754365014300 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: todo.py 4459 2007-11-24 07:55:33Z djpham $ """ Code to handle Todo Items The format for the Todo items is standardized. It is a dict with the following fields: TodoEntry properties: summary - 'string subject' note - 'string note' due_date - 'YYYYMMDD' status - (None, NotStarted, InProgress, NeedActions, Completed, Cancelled) percent_complete - None, range(101) completion_date - 'YYYYMMDD' categories - [{ 'category': string }] private - True/ priority - range(1, 11) 1=Highest, 5=Normal, 10=Lowest TodoEntry Methods: get() - return a copy of the internal dict set(dict) - set the internal dict check_completion() - check the task for completion and if so set appropriate values completion() - set the task as completed and set appropriate values To implement Todo read/write for a phone module: Add 2 entries into Profile._supportedsyncs: ... ('todo', 'read', None), # all todo reading ('todo', 'write', 'OVERWRITE') # all todo writing implement the following 2 methods in your Phone class: def gettodo(self, result): ... return result def savetodo(self, result, merge): ... return result The result dict key is 'todo'. """ # standard modules from __future__ import with_statement import copy import datetime import time # wx modules import wx import wx.lib.calendar import wx.calendar as cal import wx.lib.scrolledpanel as scrolled # BitPim modules import calendarentryeditor as cal_editor import database import guihelper import helpids import field_color import phonebookentryeditor as pb_editor import pubsub import today import guihelper import widgets widgets_list=[] #------------------------------------------------------------------------------- class TodoDataObject(database.basedataobject): _knownproperties=['summary', 'note', 'due_date', 'status', 'percent_complete', 'completion_date', 'priority' ] _knownlistproperties=database.basedataobject._knownlistproperties.copy() _knownlistproperties.update( {'categories': ['category'], 'flags': ['secret'] }) def __init__(self, data=None): if data is None or not isinstance(data, TodoEntry): return; self.update(data.get_db_dict()) todoobjectfactory=database.dataobjectfactory(TodoDataObject) #------------------------------------------------------------------------------- class TodoEntry(object): ST_NotStarted=1 ST_InProgress=2 ST_NeedActions=3 ST_Completed=4 ST_Cancelled=5 ST_Last=6 ST_Range=xrange(ST_NotStarted, ST_Last) ST_Names=( '', 'Not Started', 'In Progess', 'Need Actions', 'Completed', 'Cancelled', 'LAST') PC_Range=xrange(101) # % Complete: 0-100% PR_Range=xrange(1, 11) _id_index=0 _max_id_index=999 def __init__(self): self._data={ 'serials': [] } self._create_id() def get(self): return copy.deepcopy(self._data, {}) def set(self, d): self._data={} self._data.update(d) def get_db_dict(self): return self.get() def set_db_dict(self, d): self.set(d) def complete(self): # complete this task: set relevant values to indicate so if self.status != self.ST_Completed: self.status=self.ST_Completed if self.percent_complete != 100: self.percent_complete=100 if not len(self.completion_date): self.completion_date=datetime.date.today().strftime('%Y%m%d') def check_completion(self): if self.status==self.ST_Completed or self.percent_complete==100 or \ len(self.completion_date): self.complete() def _set_or_del(self, key, v, v_list=[]): if v is None or v in v_list: if self._data.has_key(key): del self._data[key] else: self._data[key]=v def _create_id(self): "Create a BitPim serial for this entry" self._data.setdefault("serials", []).append(\ {"sourcetype": "bitpim", "id": '%.3f%03d'%(time.time(), TodoEntry._id_index) }) if TodoEntry._id_index', '0%', '10%', '20%', '30%', '40%', '50%', '60%', '70%', '80%', '90%', '100%'] super(PercentCompleteBox, self).__init__(parent, -1, self._choices[0], (-1,-1), (-1,-1), self._choices, wx.CB_READONLY) wx.EVT_COMBOBOX(self, self.GetId(), parent.OnMakeDirty) def GetValue(self): s=super(PercentCompleteBox, self).GetValue() for v,n in enumerate(self._choices): if n==s: break if v: return (v-1)*10 else: return None def SetValue(self, v): if v is None: v=0 else: v=(v/10)+1 super(PercentCompleteBox, self).SetValue(self._choices[v]) #------------------------------------------------------------------------------- class PriorityBox(wx.ComboBox): def __init__(self, parent, _= None): self._choices=['', '1 - Highest', '2', '3', '4', '5 - Normal', '6', '7', '8', '9', '10 - Lowest'] super(PriorityBox, self).__init__(parent, -1, self._choices[0], (-1, -1), (-1, -1), self._choices, wx.CB_READONLY) wx.EVT_COMBOBOX(self, self.GetId(), parent.OnMakeDirty) def GetValue(self): s=super(PriorityBox, self).GetValue() for v,n in enumerate(self._choices): if n==s: break if v: return v else: return None def SetValue(self, v): if v is None: v=0 super(PriorityBox, self).SetValue(self._choices[v]) #------------------------------------------------------------------------------- class DateControl(wx.Panel, widgets.BitPimWidget): def __init__(self, parent, _=None): super(DateControl, self).__init__(parent, -1) self._dt=None # main box sizer, a label, and a button self._hs=wx.BoxSizer(wx.HORIZONTAL) self._date_str=wx.StaticText(self, -1, '') self._date_btn=wx.Button(self, -1, 'Set Date') self._hs.Add(self._date_str, 0, wx.EXPAND|wx.LEFT|wx.RIGHT, 5) self._hs.Add(self._date_btn, 0, wx.EXPAND|wx.LEFT|wx.RIGHT, 5) # events wx.EVT_BUTTON(self, self._date_btn.GetId(), self._OnSetDate) # all done self.SetSizer(self._hs) self.SetAutoLayout(True) def _refresh(self): if self._dt is None: s='' else : s=self._dt.strftime('%Y-%m-%d') self._date_str.SetLabel(s) self._hs.Layout() self.GetParent().OnMakeDirty(None) def _OnSetDate(self, _): # bring up a calendar dlg if self._dt is None: dt=datetime.date.today() else: dt=self._dt with guihelper.WXDialogWrapper(wx.lib.calendar.CalenDlg(self, month=dt.month, day=dt.day, year=dt.year)) as dlg: dlg.Centre() if dlg.ShowModal() == wx.ID_OK: self._dt=datetime.date(dlg.calend.GetYear(), dlg.calend.GetMonth(), dlg.calend.GetDay()) self._refresh() def SetValue(self, v): # set a date string from the dict if v is None or not len(v): self._dt=None else: self._dt=datetime.date(int(v[:4]), int(v[4:6]), int(v[6:])) self._refresh() def GetValue(self): # return a date string YYYYMMDD if self._dt is None: return '' return self._dt.strftime('%Y%m%d') #------------------------------------------------------------------------------- class DirtyCheckBox(wx.CheckBox): def __init__(self, parent, _=None): super(DirtyCheckBox, self).__init__(parent, -1) wx.EVT_CHECKBOX(self, self.GetId(), parent.OnMakeDirty) #------------------------------------------------------------------------------- class GeneralEditor(pb_editor.DirtyUIBase): _dict_key_index=0 _label_index=1 _class_index=2 _get_index=3 _set_index=4 _w_index=5 _flg_index=6 def __init__(self, parent, _=None): global widgets_list super(GeneralEditor, self).__init__(parent) self._fields=[ ['summary', 'Summary:', cal_editor.DVTextControl, None, None, None, wx.EXPAND], ['status', 'Status:', StatusComboBox, None, None, None, 0], ['due_date', 'Due Date:', DateControl, None, None, None, wx.EXPAND], ['percent_complete', '% Complete:', PercentCompleteBox, None, None, None, 0], ['completion_date', 'Completion Date:', DateControl, None, None, None, wx.EXPAND], ['private', 'Private:', DirtyCheckBox, None, None, None, 0], ['priority', 'Priority:', PriorityBox, None, None, None, 0] ] gs=wx.FlexGridSizer(-1, 2, 5, 5) gs.AddGrowableCol(1) for n in self._fields: _txt=wx.StaticText(self, -1, n[self._label_index], style=wx.ALIGN_LEFT) widgets_list.append((_txt, n[self._dict_key_index])) gs.Add(_txt, 0, wx.EXPAND|wx.BOTTOM, 0) w=n[self._class_index](self, -1) gs.Add(w, 0, n[self._flg_index]|wx.BOTTOM, 5) n[self._w_index]=w # event handlers # all done self.SetSizer(gs) self.SetAutoLayout(True) gs.Fit(self) def OnMakeDirty(self, evt): self.OnDirtyUI(evt) def Set(self, data): self.ignore_dirty=True if data is None: for n in self._fields: n[self._w_index].Enable(False) else: for n in self._fields: w=n[self._w_index] w.Enable(True) w.SetValue(getattr(data, n[self._dict_key_index])) self.ignore_dirty=self.dirty=False def Get(self, data): self.ignore_dirty=self.dirty=False if data is None: return for n in self._fields: w=n[self._w_index] v=w.GetValue() ## if v is not None: setattr(data, n[self._dict_key_index], v) #------------------------------------------------------------------------------- class TodoWidget(wx.Panel, widgets.BitPimWidget): color_field_name='todo' def __init__(self, mainwindow, parent): global widgets_list super(TodoWidget, self).__init__(parent, -1) self._main_window=mainwindow self._data=self._data_map={} # main box sizer vbs=wx.BoxSizer(wx.VERTICAL) # horizontal sizer for the listbox and tabs hbs=wx.BoxSizer(wx.HORIZONTAL) # the list box self._item_list=wx.ListBox(self, wx.NewId(), style=wx.LB_SINGLE|wx.LB_HSCROLL|wx.LB_NEEDED_SB) hbs.Add(self._item_list, 1, wx.EXPAND|wx.BOTTOM, border=5) # the detailed info pane as a scrolled panel scrolled_panel=scrolled.ScrolledPanel(self, -1) vbs1=wx.BoxSizer(wx.VERTICAL) self._items=( (GeneralEditor, 0, None), (cal_editor.CategoryEditor, 1, 'category'), (pb_editor.MemoEditor, 1, 'memo') ) self._w=[] for n in self._items: w=n[0](scrolled_panel, -1) vbs1.Add(w, n[1], wx.EXPAND|wx.ALL, 5) self._w.append(w) if n[2]: widgets_list.append((w.static_box, n[2])) scrolled_panel.SetSizer(vbs1) scrolled_panel.SetAutoLayout(True) vbs1.Fit(scrolled_panel) scrolled_panel.SetupScrolling() hbs.Add(scrolled_panel, 3, wx.EXPAND|wx.ALL, border=5) # save references to the widgets self._general_editor_w=self._w[0] self._cat_editor_w=self._w[1] self._memo_editor_w=self._w[2] # the bottom buttons hbs1=wx.BoxSizer(wx.HORIZONTAL) self._save_btn=wx.Button(self, wx.ID_SAVE) self._revert_btn=wx.Button(self, wx.ID_REVERT_TO_SAVED) help_btn=wx.Button(self, wx.ID_HELP) hbs1.Add(self._save_btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5) hbs1.Add(help_btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5) hbs1.Add(self._revert_btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5) # all done vbs.Add(hbs, 1, wx.EXPAND|wx.ALL, 5) vbs.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5) vbs.Add(hbs1, 0, wx.ALIGN_CENTRE|wx.ALL, 5) self.SetSizer(vbs) self.SetAutoLayout(True) vbs.Fit(self) # event handlers wx.EVT_LISTBOX(self, self._item_list.GetId(), self._OnListBoxItem) wx.EVT_BUTTON(self, self._save_btn.GetId(), self._OnSave) wx.EVT_BUTTON(self, self._revert_btn.GetId(), self._OnRevert) wx.EVT_BUTTON(self, wx.ID_HELP, lambda _: wx.GetApp().displayhelpid(helpids.ID_TAB_TODO)) # DIRTY UI Event handlers for w in self._w: pb_editor.EVT_DIRTY_UI(self, w.GetId(), self.OnMakeDirty) # populate data self._populate() # turn on dirty flag self.ignoredirty=False self.setdirty(False) # register for Today selection today.bind_notification_event(self.OnTodaySelection, today.Today_Group_Todo) today.bind_request_event(self.OnTodayRequest) # color coded labels field_color.reload_color_info(self, widgets_list) pubsub.subscribe(self.OnPhoneChanged, pubsub.PHONE_MODEL_CHANGED) def OnPhoneChanged(self, _): # just reload the color info based on the new phone field_color.reload_color_info(self, widgets_list) self.Refresh() def _clear(self): self._item_list.Clear() self._clear_each() def _clear_each(self): for w in self._w: w.Set(None) w.Enable(False) self.Refresh() def _publish_today_events(self): now=datetime.datetime.now() _today='%04d%02d%02d'%(now.year, now.month, now.day) keys=self._data.keys() keys.sort() today_event=today.TodayTodoEvent() for k in keys: if self._data[k].is_active() and \ (not self._data[k].due_date or \ self._data[k].due_date<=_today): today_event.append(self._data[k].summary, { 'key': k, 'index': self._data_map[k] }) today_event.broadcast() def _publish_thisweek_events(self): now=datetime.datetime.now() _today='%04d%02d%02d'%(now.year, now.month, now.day) s=now+datetime.timedelta(7-now.isoweekday()%7) _sun='%04d%02d%02d'%(s.year, s.month, s.day) keys=self._data.keys() keys.sort() today_event=today.ThisWeekTodoEvent() dow_flg=[False]*7 for k in keys: due_date=self._data[k].due_date if due_date>_today and due_date<_sun: dt=datetime.datetime(int(due_date[:4]), int(due_date[4:6]), int(due_date[6:8])) _dow=dt.isoweekday()%7 if dow_flg[_dow]: _name=today.dow_initials[-1]+' '+self._data[k].summary else: dow_flg[_dow]=True _name=today.dow_initials[_dow]+' - '+self._data[k].summary today_event.append(_name, { 'key': k, 'index': self._data_map[k] }) today_event.broadcast() def OnTodayRequest(self, _): self._publish_today_events() self._publish_thisweek_events() def OnTodaySelection(self, evt): self.ActivateSelf() if evt.data: self._item_list.SetSelection(evt.data.get('index', wx.NOT_FOUND)) self._populate_each(evt.data.get('key', None)) def _populate(self): # populate new data self._clear() self._data_map={} # populate the list with data keys=self._data.keys() keys.sort() for k in keys: n=self._data[k] i=self._item_list.Append(n.summary) self._item_list.SetClientData(i, k) self._data_map[k]=i self._publish_today_events() self._publish_thisweek_events() def _populate_each(self, k): # populate the detailed info of the item keyed k if k is None: # clear out all the subfields self._clear_each() return # there're data, first enable the widgets self.ignoredirty=True for w in self._w: w.Enable(True) entry=self._data[k] # set the general detail self._general_editor_w.Set(entry) self._cat_editor_w.Set(entry.categories) self._memo_editor_w.Set({ 'memo': entry.note }) self.ignoredirty=False self.setdirty(False) # called from various widget update callbacks def OnMakeDirty(self, _=None): """A public function you can call that will set the dirty flag""" if self.dirty or self.ignoredirty or not self.IsShown(): # already dirty, no need to make it worse return self.setdirty(True) def setdirty(self, val): """Set the dirty flag""" if self.ignoredirty: return self.dirty=val self._item_list.Enable(not self.dirty) self._save_btn.Enable(self.dirty) self._revert_btn.Enable(self.dirty) def GetDeleteInfo(self): return guihelper.ART_DEL_TODO, "Delete Todo Item" def GetAddInfo(self): return guihelper.ART_ADD_TODO, "Add Todo Item" def CanAdd(self): if self.dirty: return False return True def OnAdd(self, _): # add a new memo item if self.dirty: # busy editing, cannot add now, just return return m=TodoEntry() m.summary='New Task' self._data[m.id]=m self._populate() self._save_to_db(self._data) self._item_list.Select(self._data_map[m.id]) self._populate_each(m.id) def CanDelete(self): sel_idx=self._item_list.GetSelection() if sel_idx is None or sel_idx==-1: # none selected return False return True def OnDelete(self, _): # delete the current selected item sel_idx=self._item_list.GetSelection() if sel_idx is None or sel_idx==-1: # none selected return self.ignoredirty=True k=self._item_list.GetClientData(sel_idx) self._item_list.Delete(sel_idx) self._clear_each() del self._data[k] del self._data_map[k] self._save_to_db(self._data) self.ignoredirty=False self.setdirty(False) def getdata(self,dict,want=None): dict['todo']=copy.deepcopy(self._data) return dict def populate(self, dict): self._data=dict.get('todo', {}) self._populate() def _save_to_db(self, todo_dict): db_rr={} for k, e in todo_dict.items(): db_rr[k]=TodoDataObject(e) database.ensurerecordtype(db_rr, todoobjectfactory) self._main_window.database.savemajordict('todo', db_rr) self._publish_today_events() self._publish_thisweek_events() def populatefs(self, dict): self._save_to_db(dict.get('todo', {})) return dict def getfromfs(self, result): # read data from the database todo_dict=self._main_window.database.\ getmajordictvalues('todo',todoobjectfactory) r={} for k,e in todo_dict.items(): ce=TodoEntry() ce.set_db_dict(e) r[ce.id]=ce result.update({ 'todo': r }) return result def _OnListBoxItem(self, evt): # an item was clicked on/selected self._populate_each(self._item_list.GetClientData(evt.GetInt())) self.Refresh() def _OnSave(self, evt): # save the current changes self.ignoredirty=True sel_idx=self._item_list.GetSelection() k=self._item_list.GetClientData(sel_idx) entry=self._data[k] self._general_editor_w.Get(entry) entry.note=self._memo_editor_w.Get().get('memo', None) entry.categories=self._cat_editor_w.Get() entry.check_completion() self._general_editor_w.Set(entry) self._item_list.SetString(sel_idx, entry.summary) self._save_to_db(self._data) self.ignoredirty=False self.setdirty(False) def _OnRevert(self, evt): self.ignoredirty=True self._item_list.Enable() sel_idx=self._item_list.GetSelection() if sel_idx!=wx.NOT_FOUND: k=self._item_list.GetClientData(sel_idx) self._populate_each(k) self.ignoredirty=False self.setdirty(False) #------------------------------------------------------------------------------- bitpim-1.0.7+dfsg1/src/gui.py0000644001616600161660000025515711274703471014121 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2005 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: gui.py 4768 2009-11-06 02:17:29Z hjelmn $ """The main gui code for BitPim""" # System modules from __future__ import with_statement import contextlib import thread, threading import Queue import time import os import cStringIO import zipfile import re import sys import shutil import types import datetime import sha import codecs # wx modules import wx import wx.lib.colourdb import wx.html # my modules import guiwidgets import common import version import helpids import comdiagnose import phonebook import importexport import guihelper import bphtml import bitflingscan import update import phoneinfo import phone_detect import phone_media_codec import pubsub import phones.com_brew as com_brew import auto_sync import phone_root import playlist import fileview import data_recording import analyser import t9editor import newdb_wiz import bp_config if guihelper.IsMSWindows(): import win32api import win32con import win32gui import msvcrt else: import fcntl ### ### Used to check our threading ### mainthreadid=thread.get_ident() helperthreadid=-1 # set later ### ### Used to handle Task Bar Icon feature (Windows only) ### if guihelper.IsMSWindows(): class TaskBarIcon(wx.TaskBarIcon): def __init__(self, mw): super(TaskBarIcon, self).__init__() self.mw=mw self._set_icon() wx.EVT_TASKBAR_LEFT_DCLICK(self, self.OnDclkRestore) def _create_menu(self): _menu=wx.Menu() _id=wx.NewId() if self.mw.IsIconized(): _menu.Append(_id, 'Restore') wx.EVT_MENU(self, _id, self.OnRestore) else: _menu.Append(_id, 'Minimize') wx.EVT_MENU(self, _id, self.OnMinimize) _menu.AppendSeparator() _id=wx.NewId() _menu.Append(_id, 'Close') wx.EVT_MENU(self, _id, self.OnClose) return _menu def _set_icon(self): _icon=wx.Icon(guihelper.getresourcefile('bitpim.ico'), wx.BITMAP_TYPE_ICO) if _icon.Ok(): self.SetIcon(_icon, 'BitPim') def CreatePopupMenu(self): return self._create_menu() def OnDclkRestore(self, _): self.mw.Iconize(False) wx.PostEvent(self.mw, wx.IconizeEvent(self.mw.GetId(), False)) def OnRestore(self, _): self.mw.Iconize(False) def OnMinimize(self, _): self.mw.Iconize(True) def OnClose(self, _): self.RemoveIcon() self.mw.Close() ### ### Implements a nice flexible callback object ### class Callback: "Callback class. Extra arguments can be supplied at call time" def __init__(self, method, *args, **kwargs): if __debug__: global mainthreadid assert mainthreadid==thread.get_ident() self.method=method self.args=args self.kwargs=kwargs def __call__(self, *args, **kwargs): if __debug__: global mainthreadid assert mainthreadid==thread.get_ident() d=self.kwargs.copy() d.update(kwargs) apply(self.method, self.args+args, d) class Request: def __init__(self, method, *args, **kwargs): # created in main thread if __debug__: global mainthreadid assert mainthreadid==thread.get_ident() self.method=method self.args=args self.kwargs=kwargs def __call__(self, *args, **kwargs): # called in helper thread if __debug__: global helperthreadid assert helperthreadid==thread.get_ident() d=self.kwargs.copy() d.update(kwargs) return apply(self.method, self.args+args, d) ### ### Event used for passing results back from helper thread ### class HelperReturnEvent(wx.PyEvent): def __init__(self, callback, *args, **kwargs): if __debug__: # verify being called in comm worker thread global helperthreadid ## assert helperthreadid==thread.get_ident() global EVT_CALLBACK wx.PyEvent.__init__(self) self.SetEventType(EVT_CALLBACK) self.cb=callback self.args=args self.kwargs=kwargs def __call__(self): if __debug__: global mainthreadid ## assert mainthreadid==thread.get_ident() return apply(self.cb, self.args, self.kwargs) ### ### Our helper thread where all the work gets done ### thesplashscreen=None # set to non-none if there is one class MySplashScreen(wx.SplashScreen): def __init__(self, app, config): self.app=app # how long are we going to be up for? time=config.ReadInt("splashscreentime", 2500) if time>0: bmp=guihelper.getbitmap("splashscreen") self.drawnameandnumber(bmp) wx.SplashScreen.__init__(self, bmp, wx.SPLASH_CENTRE_ON_SCREEN|wx.SPLASH_TIMEOUT, time, None, -1) wx.EVT_CLOSE(self, self.OnClose) self.Show() app.Yield(True) global thesplashscreen thesplashscreen=self return # timeout is <=0 so don't show splash screen self.goforit() def drawnameandnumber(self, bmp): dc=wx.MemoryDC() dc.SelectObject(bmp) # where we start writing x=23 y=40 # Product name if False: str=version.name dc.SetTextForeground( wx.NamedColour("MEDIUMORCHID4") ) dc.SetFont( self._gimmethedamnsizeirequested(25, wx.ROMAN, wx.NORMAL, wx.NORMAL) ) w,h=dc.GetTextExtent(str) dc.DrawText(str, x, y) y+=h+0 # Version number x=58 y=127 str=version.versionstring+"-"+version.vendor dc.SetTextForeground( wx.NamedColour("MEDIUMBLUE") ) dc.SetFont( self._gimmethedamnsizeirequested(15, wx.ROMAN, wx.NORMAL, wx.NORMAL) ) w,h=dc.GetTextExtent(str) dc.DrawText(str, x+10, y) y+=h+0 # all done dc.SelectObject(wx.NullBitmap) def _gimmethedamnsizeirequested(self, ps, family, style, weight): # on Linux we have to ask for bigger than we want if guihelper.IsGtk(): ps=ps*1.6 font=wx.TheFontList.FindOrCreateFont(int(ps), family, style, weight) return font def goforit(self): self.app.makemainwindow() def OnClose(self, evt): self.goforit() evt.Skip() class BitPimExit(Exception): pass class WorkerThreadFramework(threading.Thread): def __init__(self): threading.Thread.__init__(self, name="BitPim helper") self.q=Queue.Queue() def setdispatch(self, dispatchto): self.dispatchto=dispatchto def checkthread(self): # Function to verify we are running in the correct # thread. All functions in derived class should call this global helperthreadid assert helperthreadid==thread.get_ident() def run(self): global helperthreadid helperthreadid=thread.get_ident() first=1 while True: if not first: wx.PostEvent(self.dispatchto, HelperReturnEvent(self.dispatchto.endbusycb)) else: first=0 item=self.q.get() wx.PostEvent(self.dispatchto, HelperReturnEvent(self.dispatchto.startbusycb)) call=item[0] resultcb=item[1] ex=None res=None try: res=call() except Exception,e: ex=e if not hasattr(e,"gui_exc_info"): ex.gui_exc_info=sys.exc_info() wx.PostEvent(self.dispatchto, HelperReturnEvent(resultcb, ex, res)) if isinstance(ex, BitPimExit): # gracefully end this thread! break def progressminor(self, pos, max, desc=""): wx.PostEvent(self.dispatchto, HelperReturnEvent(self.dispatchto.progressminorcb, pos, max, desc)) def progressmajor(self, pos, max, desc=""): wx.PostEvent(self.dispatchto, HelperReturnEvent(self.dispatchto.progressmajorcb, pos, max, desc)) def progress(self, pos, max, desc=""): self.progressminor(pos, max, desc) def log(self, str): if self.dispatchto.wantlog: wx.PostEvent(self.dispatchto, HelperReturnEvent(self.dispatchto.logcb, str)) def logdata(self, str, data, klass=None, data_type=None): if self.dispatchto.wantlog: wx.PostEvent(self.dispatchto, HelperReturnEvent(self.dispatchto.logdatacb, str, data, klass, data_type)) #### #### Main application class. Runs the event loop etc #### # safe mode items def _notsafefunc(*args, **kwargs): raise common.InSafeModeException() class _NotSafeObject: def __getattr__(self, *args): _notsafefunc() def __setattr__(self, *args): _notsafefunc() _NotSafeObject=_NotSafeObject() class Event(object): """Simple Event class that supports Context Manager""" def __init__(self): self._event=threading.Event() def __enter__(self): self._event.set() def __exit__(self, exc_type, exc_value, tb): self._event.clear() def set(self): return self._event.set() def clear(self): return self._event.clear() def isSet(self): return self._event.isSet() def wait(self, timeout=None): return self._event.wait(timeout) EVT_CALLBACK=None class MainApp(wx.App): def __init__(self, argv, config_filename=None): self.frame=None self.SAFEMODE=False codecs.register(phone_media_codec.search_func) self._config_filename=config_filename # simple Event object to flag when entering/leaving critical section self.critical=Event() wx.App.__init__(self, redirect=False, useBestVisual=not guihelper.IsGtk()) def lock_file(self, filename): # if the file can be locked, lock it and return True. # return False otherwise. try: self.lockedfile=file(filename, 'w') except IOError: # failed to create the file, just bail self.lockedfile=None return True try: if guihelper.IsMSWindows(): msvcrt.locking(self.lockedfile.fileno(), msvcrt.LK_NBLCK, 1) else: # Linux & Mac fcntl.flock(self.lockedfile.fileno(), fcntl.LOCK_EX|fcntl.LOCK_NB) return True except IOError: return False def usingsamedb(self): # using a simple file locking method return not self.lock_file(os.path.join(self.config._path, '.lock')) def OnInit(self): self.made=False # Routine maintenance wx.lib.colourdb.updateColourDB() # Thread stuff global mainthreadid mainthreadid=thread.get_ident() # for help to save prefs cfgstr='bitpim' self.SetAppName(cfgstr) self.SetVendorName(cfgstr) # Establish config stuff self.config=bp_config.Config(self._config_filename) # Check to see if we're the 2nd instance running on the same DB if self.usingsamedb(): guihelper.MessageDialog(None, 'Another copy of BitPim is using the same data dir:\n%s'%self.config._path, 'BitPim Error', style=wx.OK|wx.ICON_ERROR) return False # this is for wx native use, like the freaking help controller ! self.wxconfig=wx.Config(cfgstr, style=wx.CONFIG_USE_LOCAL_FILE) # safe mode is read at startup and can't be changed self.SAFEMODE=self.config.ReadInt("SafeMode", False) # we used to initialise help here, but in wxPython the stupid help window # appeared on Windows just setting it up. We now defer setting it up # until it is needed self.helpcontroller=None # html easy printing self.htmlprinter=bphtml.HtmlEasyPrinting(None, self.config, "printing") global EVT_CALLBACK EVT_CALLBACK=wx.NewEventType() # initialize the Brew file cache com_brew.file_cache=com_brew.FileCache(self.config.Read('path', '')) # get the splash screen up MySplashScreen(self, self.config) return True def ApplySafeMode(self): # make very sure we are in safe mode if not self.SAFEMODE: return if self.frame is None: return # ensure various objects/functions are changed to not-safe objects={self.frame: ( "dlgsendphone", "OnDataSendPhone", "OnDataSendPhoneGotFundamentals", "OnDataSendPhoneResults"), self.frame.tree.filesystemwidget: ( "OnFileDelete", "OnFileOverwrite", "OnNewSubdir", "OnNewFile", "OnDirDelete", "OnRestore"), self.frame.wt: ( "senddata", "writewallpaper", "writeringtone", "writephonebook", "writecalendar", "rmfile", "writefile", "mkdir", "rmdir", "rmdirs", "restorefiles" ), self.frame.phoneprofile: ( "convertphonebooktophone", ), self.frame.phonemodule.Phone: ( "mkdir", "mkdirs", "rmdir", "rmfile", "rmdirs", "writefile", "savegroups", "savephonebook", "savecalendar", "savewallpapers", "saveringtones") } for obj, names in objects.iteritems(): if obj is None: continue for name in names: field=getattr(obj, name, None) if field is None or field is _notsafefunc or field is _NotSafeObject: continue if isinstance(field, (types.MethodType, types.FunctionType)): newval=_notsafefunc else: newval=_NotSafeObject setattr(obj, name, newval) # remove various menu items if we can find them removeids=(guihelper.ID_DATASENDPHONE, guihelper.ID_FV_OVERWRITE, guihelper.ID_FV_NEWSUBDIR, guihelper.ID_FV_NEWFILE, guihelper.ID_FV_DELETE, guihelper.ID_FV_RENAME, guihelper.ID_FV_RESTORE, guihelper.ID_FV_ADD) mb=self.frame.GetMenuBar() menus=[mb.GetMenu(i) for i in range(mb.GetMenuCount())] fsw=self.frame.tree.filesystemwidget if fsw is not None: menus.extend( [fsw.list.filemenu, fsw.tree.dirmenu, fsw.list.genericmenu] ) for menu in menus: for id in removeids: item=menu.FindItemById(id) if item is not None: menu.RemoveItem(item) ## def setuphelpiwant(self): ## """This is how the setuphelp code is supposed to be, but stuff is missing from wx""" ## self.helpcontroller=wx.BestHelpController() ## self.helpcontroller.Initialize(gethelpfilename) def _setuphelp(self): """Does all the nonsense to get help working""" if guihelper.IsMSWindows(): self.helpcontroller=True return elif guihelper.IsMac(): # we use apple's help mechanism from Carbon import AH path=os.path.abspath(os.path.join(guihelper.resourcedirectory, "..", "..", "..")) # path won't exist if we aren't a bundle if os.path.exists(path) and path.endswith(".app"): res=AH.AHRegisterHelpBook(path) self.helpcontroller=True return # Standard WX style help # htmlhelp isn't correctly wrapper in wx package # Add the Zip filesystem wx.FileSystem_AddHandler(wx.ZipFSHandler()) # Get the help working self.helpcontroller=wx.html.HtmlHelpController() self.helpcontroller.AddBook(guihelper.gethelpfilename()+".htb") self.helpcontroller.UseConfig(self.wxconfig, "help") # now context help # (currently borken) # self.helpprovider=wx.HelpControllerHelpProvider(self.helpcontroller) # wx.HelpProvider_Set(provider) def displayhelpid(self, id): """Display a specific Help Topic""" if self.helpcontroller is None: self._setuphelp() if guihelper.IsMSWindows(): import win32help fname=guihelper.gethelpfilename()+".chm>Help" if id is None: id=helpids.ID_WELCOME # display the topic _hwnd=win32gui.GetDesktopWindow() win32help.HtmlHelp(_hwnd, fname, win32help.HH_DISPLAY_TOPIC, id) # and sync the TOC win32help.HtmlHelp(_hwnd, fname, win32help.HH_SYNC, id) elif guihelper.IsMac() and self.helpcontroller is True: from Carbon import AH res=AH.AHGotoPage('BitPim Help', id, None) else: if id is None: self.helpcontroller.DisplayContents() else: self.helpcontroller.Display(id) def makemainwindow(self): if self.made: return # already been called self.made=True # make the main frame title='BitPim' name=self.config.Read('name', None) if name: title+=' - '+name self.frame=MainWindow(None, -1, title, self.config) self.frame.Connect(-1, -1, EVT_CALLBACK, self.frame.OnCallback) if guihelper.IsMac(): self.frame.MacSetMetalAppearance(True) # make the worker thread wt=WorkerThread() wt.setdispatch(self.frame) wt.setDaemon(1) wt.start() self.frame.wt=wt self.SetTopWindow(self.frame) self.SetExitOnFrameDelete(True) self.ApplySafeMode() wx.CallAfter(self.CheckDetectPhone) wx.CallAfter(self.CheckUpdate) # double-check the locked file if self.lockedfile is None: self.usingsamedb() update_delta={ 'Daily': 1, 'Weekly': 7, 'Monthly': 30 } def CheckUpdate(self): if version.isdevelopmentversion(): return if self.frame is None: return # tell the frame to do a check-for-update update_rate=self.config.Read('updaterate', '') if not len(update_rate) or update_rate =='Never': return last_update=self.config.Read('last_update', '') try: if len(last_update): last_date=datetime.date(int(last_update[:4]), int(last_update[4:6]), int(last_update[6:])) next_date=last_date+datetime.timedelta(\ self.update_delta.get(update_rate, 7)) else: next_date=last_date=datetime.date.today() except ValueError: # month day swap problem next_date=last_date=datetime.date.today() if datetime.date.today()")+3 guihelper.MessageDialog(self, str[p:], "Alert", style=wx.OK|wx.ICON_EXCLAMATION) self.OnLog("Alert dialog closed") log=OnLog def OnLogData(self, str, data, klass=None, data_type=None): if data_recording.DR_On: data_recording.record(data_recording.DR_Type_Note, str) data_recording.record(data_type or data_recording.DR_Type_Data, data, klass) if self.tree.lwdata is not None: self.tree.lwdata.logdata(str,data, klass) def excepthook(self, type, value, traceback): if not hasattr(value, "gui_exc_info"): value.gui_exc_info=(type,value,traceback) self.HandleException(value) def HandleException(self, exception): """returns true if this function handled the exception and the caller should not do any further processing""" if exception is None: return False assert isinstance(exception, Exception) self.CloseSplashScreen() # always close comm connection when we have any form of exception if self.wt is not None: self.wt.clearcomm() text=None title=None style=None # Here is where we turn the exception into something user friendly if isinstance(exception, common.CommsDeviceNeedsAttention): text="%s: %s" % (exception.device, exception.message) title="Device needs attention - "+exception.device style=wx.OK|wx.ICON_INFORMATION help=lambda _: wx.GetApp().displayhelpid(helpids.ID_DEVICE_NEEDS_ATTENTION) elif isinstance(exception, common.CommsOpenFailure): text="%s: %s" % (exception.device, exception.message) title="Failed to open communications - "+exception.device style=wx.OK|wx.ICON_INFORMATION help=lambda _: wx.GetApp().displayhelpid(helpids.ID_FAILED_TO_OPEN_DEVICE) elif isinstance(exception, common.AutoPortsFailure): text=exception.message title="Failed to automatically detect port" style=wx.OK|wx.ICON_INFORMATION help=lambda _: wx.GetApp().displayhelpid(helpids.ID_FAILED_TO_AUTODETECT_PORT) elif isinstance(exception, common.HelperBinaryNotFound) and exception.basename=="pvconv": text="The Qualcomm PureVoice converter program (%s) was not found.\nPlease see the help. Directories looked in are:\n\n " +\ "\n ".join(exception.paths) text=text % (exception.fullname,) title="Failed to find PureVoice converter" style=wx.OK|wx.ICON_INFORMATION help=lambda _: wx.GetApp().displayhelpid(helpids.ID_NO_PVCONV) elif isinstance(exception, common.PhoneBookBusyException): text="The phonebook is busy on your phone.\nExit back to the main screen and then repeat the operation." title="Phonebook busy on phone" style=wx.OK|wx.ICON_INFORMATION help=lambda _: wx.GetApp().displayhelpid(helpids.ID_PHONEBOOKBUSY) elif isinstance(exception, common.IntegrityCheckFailed): text="The phonebook on your phone is partially corrupt. Please read the\nhelp for more details on the cause and fix" title="IntegrityCheckFailed" style=wx.OK|wx.ICON_EXCLAMATION help=lambda _: wx.GetApp().displayhelpid(helpids.ID_LG_INTEGRITYCHECKFAILED) elif isinstance(exception, common.CommsDataCorruption): text=exception.message+"\nPlease see the help." title="Communications Error - "+exception.device style=wx.OK|wx.ICON_EXCLAMATION help=lambda _: wx.GetApp().displayhelpid(helpids.ID_COMMSDATAERROR) elif isinstance(exception, com_brew.BrewAccessDeniedException): text="Access to the file/directory has been blocked on this phone by the phone provider" title="Access Denied" style=wx.OK|wx.ICON_EXCLAMATION help=lambda _: wx.GetApp().displayhelpid(helpids.ID_BREW_ACCESS_DENIED) elif isinstance(exception, common.PhoneStringEncodeException): text="Unable to convert the text <%s> into a format your phone can understand, change the text to contain only %s characters" % (exception.string, `exception.codec`) title="Text Conversion Error" style=wx.OK|wx.ICON_EXCLAMATION help=lambda _: wx.GetApp().displayhelpid(helpids.ID_BREW_ACCESS_DENIED) if text is not None: self.OnLog("Error: "+title+"\n"+text) with guihelper.WXDialogWrapper(guiwidgets.AlertDialogWithHelp(self,text, title, help, style=style), True): pass return True if self.exceptiondialog is None: self.excepttime=time.time() self.exceptcount=0 self.exceptiondialog=guiwidgets.ExceptionDialog(self, exception) try: self.OnLog("Exception: "+self.exceptiondialog.getexceptiontext()) except AttributeError: # this can happen if main gui hasn't been built yet pass else: self.exceptcount+=1 if self.exceptcount<10: print "Ignoring an exception as the exception dialog is already up" try: self.OnLog("Exception during exception swallowed") except AttributeError: # this can happen if main gui hasn't been built yet pass return True self.exceptiondialog.ShowModal() self.exceptiondialog.Destroy() self.exceptiondialog=None return True # midnight timer stuff def _OnTimer(self, _): self.MakeCall(Request(self._pub_timer), Callback(self._OnTimerReturn)) def _pub_timer(self): pubsub.publish(pubsub.MIDNIGHT) def _OnTimerReturn(self, exceptions, result): self._timer.Start(((3600*24)+1)*1000, True) def _setup_midnight_timer(self): _today=datetime.datetime.now() _timer_val=24*3600-_today.hour*3600-_today.minute*60-_today.second+1 self._timer=wx.Timer(self) wx.EVT_TIMER(self, self._timer.GetId(), self._OnTimer) self._timer.Start(_timer_val*1000, True) print _timer_val,'seconds till midnight' # Data Recording stuff def OnDataRecording(self, _): with guihelper.WXDialogWrapper(guiwidgets.DRRecFileDialog(self), True): pass # plumbing for the multi-threading def OnCallback(self, event): assert isinstance(event, HelperReturnEvent) event() def MakeCall(self, request, cbresult): assert isinstance(request, Request) assert isinstance(cbresult, Callback) self.wt.q.put( (request, cbresult) ) # remember our size and position def saveSize(self): guiwidgets.save_size("MainWin", self.GetRect()) ### ### Container for midi files ### #class MidiFileList(wx.ListCtrl): # pass ### ### Class that does all the comms and other stuff in a seperate ### thread. ### class WorkerThread(WorkerThreadFramework): def __init__(self): WorkerThreadFramework.__init__(self) self.commphone=None data_recording.register(self.OnDataRecording, self.OnDataRecording, self.OnDataRecording) def exit(self): if __debug__: self.checkthread() for i in range(0,0): self.progressmajor(i, 2, "Shutting down helper thread") time.sleep(1) self.log("helper thread shut down") raise BitPimExit("helper thread shutdown") def clearcomm(self): if self.commphone is None: return self.commphone.close() self.commphone=None def setupcomm(self): if __debug__: self.checkthread() if self.commphone is None: import commport if self.dispatchto.commportsetting is None or \ len(self.dispatchto.commportsetting)==0: raise common.CommsNeedConfiguring("Comm port not configured", "DEVICE") if self.dispatchto.commportsetting=="auto": autofunc=comdiagnose.autoguessports else: autofunc=None comcfg=self.dispatchto.commparams name=self.dispatchto.commportsetting if name.startswith("bitfling::"): klass=bitflingscan.CommConnection else: klass=commport.CommConnection comport=klass(self, self.dispatchto.commportsetting, autolistfunc=autofunc, autolistargs=(self.dispatchto.phonemodule,), baud=comcfg['baud'], timeout=comcfg['timeout'], hardwareflow=comcfg['hardwareflow'], softwareflow=comcfg['softwareflow'], configparameters=comcfg) try: self.commphone=self.dispatchto.phonemodule.Phone(self, comport) except: comport.close() raise def getfundamentals(self): if __debug__: self.checkthread() self.setupcomm() results={} self.commphone.getfundamentals(results) return results def getdata(self, req, todo): if __debug__: self.checkthread() self.setupcomm() results=self.getfundamentals() com_brew.file_cache.esn=results.get('uniqueserial', None) willcall=[] sync={} for i in ( (req.GetPhoneBookSetting, self.commphone.getphonebook, "Phone Book", "phonebook"), (req.GetCalendarSetting, self.commphone.getcalendar, "Calendar", "calendar",), (req.GetWallpaperSetting, self.commphone.getwallpapers, "Wallpaper", "wallpaper"), (req.GetRingtoneSetting, self.commphone.getringtones, "Ringtones", "ringtone"), (req.GetMemoSetting, self.commphone.getmemo, "Memo", "memo"), (req.GetTodoSetting, self.commphone.gettodo, "Todo", "todo"), (req.GetSMSSetting, self.commphone.getsms, "SMS", "sms"), (req.GetCallHistorySetting, self.commphone.getcallhistory, 'Call History', 'call_history'), (req.GetPlaylistSetting, self.commphone.getplaylist, 'Play List', 'playlist'), (req.GetT9Setting, self.commphone.gett9db, 'T9 DB', t9editor.dict_key), ): st=i[0]() if st==req.MERGE: sync[i[3]]="MERGE" willcall.append(i) elif st==req.OVERWRITE: sync[i[3]]="OVERWRITE" willcall.append(i) results['sync']=sync count=0 for i in willcall: self.progressmajor(count, len(willcall), i[2]) count+=1 i[1](results) for xx in todo: func=xx[0] desc=xx[1] args=[results] if len(xx)>2: args.extend(xx[2:]) apply(func, args) return results def senddata(self, dict, todo): count=0 for xx in todo: func=xx[0] desc=xx[1] args=[dict] if len(xx)>2: args.extend(xx[2:]) self.progressmajor(count,len(todo),desc) apply(func, args) count+=1 return dict def writewallpaper(self, data, merge): if __debug__: self.checkthread() self.setupcomm() return self.commphone.savewallpapers(data, merge) def writeringtone(self, data, merge): if __debug__: self.checkthread() self.setupcomm() return self.commphone.saveringtones(data, merge) def writephonebook(self, data): if __debug__: self.checkthread() self.setupcomm() return self.commphone.savephonebook(data) def rebootcheck(self, results): if __debug__: self.checkthread() if results.has_key('rebootphone'): self.log("BitPim is rebooting your phone for changes to take effect") delay=0 if results.has_key('reboot_delay'): delay=results['reboot_delay'] self.phonerebootrequest(delay) self.clearcomm() elif results.get('clearcomm', False): # some model (eg Moto) needs to clear comm after certain mode self.clearcomm() def writecalendar(self, data, merge): if __debug__: self.checkthread() self.setupcomm() return self.commphone.savecalendar(data, merge) def writememo(self, data, merge): if __debug__: self.checkthread() self.setupcomm() return self.commphone.savememo(data, merge) def writetodo(self, data, merge): if __debug__: self.checkthread() self.setupcomm() return self.commphone.savetodo(data, merge) def writesms(self, data, merge): if __debug__: self.checkthread() self.setupcomm() return self.commphone.savesms(data, merge) def writeplaylist(self, data, merge): if __debug__: self.checkthread() self.setupcomm() return self.commphone.saveplaylist(data, merge) def writet9(self, data, merge): if __debug__: self.checkthread() self.setupcomm() return self.commphone.savet9db(data, merge) def getphoneinfo(self): if __debug__: self.checkthread() self.setupcomm() if hasattr(self.commphone, 'getphoneinfo'): phone_info=phoneinfo.PhoneInfo() getattr(self.commphone, 'getphoneinfo')(phone_info) return phone_info def detectphone(self, using_port=None, using_model=None, delay=0): self.clearcomm() time.sleep(delay) return phone_detect.DetectPhone(self).detect(using_port, using_model) # various file operations for the benefit of the filesystem viewer def dirlisting(self, path, recurse=0): if __debug__: self.checkthread() self.setupcomm() try: return self.commphone.getfilesystem(path, recurse) except: self.log('Failed to read dir: '+path) return {} def getfileonlylist(self, path): if __debug__: self.checkthread() self.setupcomm() try: return self.commphone.listfiles(path) except: self.log('Failed to read filesystem') return {} def getdironlylist(self, path, recurse): results=self.commphone.listsubdirs(path) subdir_list=[x['name'] for k,x in results.items()] if recurse: for _subdir in subdir_list: try: results.update(self.getdironlylist(_subdir, recurse)) except: self.log('Failed to list directories in ' +_subdir) return results def fulldirlisting(self): if __debug__: self.checkthread() self.setupcomm() try: return self.getdironlylist("", True) except: self.log('Failed to read filesystem') return {} def singledirlisting(self, path): if __debug__: self.checkthread() self.setupcomm() try: return self.getdironlylist(path, False) except: self.log('Failed to read filesystem') return {} def getfile(self, path): if __debug__: self.checkthread() self.setupcomm() return self.commphone.getfilecontents(path) def rmfile(self,path): if __debug__: self.checkthread() self.setupcomm() return self.commphone.rmfile(path) def writefile(self,path,contents): if __debug__: self.checkthread() self.setupcomm() return self.commphone.writefile(path, contents) def mkdir(self,path): if __debug__: self.checkthread() self.setupcomm() return self.commphone.mkdir(path) def rmdir(self,path): if __debug__: self.checkthread() self.setupcomm() return self.commphone.rmdir(path) def rmdirs(self,path): if __debug__: self.checkthread() self.setupcomm() return self.commphone.rmdirs(path) # offline/reboot/modemmode def phonerebootrequest(self, reboot_delay=0): if __debug__: self.checkthread() self.setupcomm() return self.commphone.offlinerequest(reset=True, delay=reboot_delay) def phoneofflinerequest(self): if __debug__: self.checkthread() self.setupcomm() return self.commphone.offlinerequest() def modemmoderequest(self): if __debug__: self.checkthread() self.setupcomm() return self.commphone.modemmoderequest() # backups etc def getbackup(self,path,recurse=0): if __debug__: self.checkthread() self.setupcomm() self.progressmajor(0,0,"Listing files") files=self.dirlisting(path, recurse) if path=="/" or path=="": strip=0 # root dir else: strip=len(path)+1 # child keys=files.keys() keys.sort() op=cStringIO.StringIO() with contextlib.closing(zipfile.ZipFile(op, "w", zipfile.ZIP_DEFLATED)) as zip: count=0 for k in keys: try: count+=1 if files[k]['type']!='file': continue self.progressmajor(count, len(keys)+1, "Getting files") # get the contents contents=self.getfile(k) # an artificial sleep. if you get files too quickly, the 4400 eventually # runs out of buffers and returns truncated packets time.sleep(0.3) # add to zip file zi=zipfile.ZipInfo() # zipfile does not like unicode. cp437 works on windows well, may be # a better choice than ascii, but no phones currently support anything # other than ascii for filenames if k[strip]=='/': zi.filename=common.get_ascii_string(k[strip+1:], 'ignore') else: zi.filename=common.get_ascii_string(k[strip:], 'ignore') if files[k]['date'][0]==0: zi.date_time=(0,0,0,0,0,0) else: zi.date_time=time.gmtime(files[k]['date'][0])[:6] zi.compress_type=zipfile.ZIP_DEFLATED zip.writestr(zi, contents) except: self.log('Failed to read file: '+k) return op.getvalue() def restorefiles(self, files): if __debug__: self.checkthread() self.setupcomm() results=[] seendirs=[] count=0 for name, contents in files: self.progressmajor(count, len(files), "Restoring files") count+=1 d=guihelper.dirname(name) if d not in seendirs: seendirs.append(d) self.commphone.mkdirs(d) self.writefile(name, contents) results.append( (True, name) ) # add a deliberate sleep - some phones (eg vx7000) get overwhelmed when writing # lots of files in a tight loop time.sleep(0.3) return results def OnDataRecording(self, _=None): self.clearcomm() #------------------------------------------------------------------------------- # For windows platform only if guihelper.IsMSWindows(): import struct class DeviceChanged: DBT_DEVICEARRIVAL = 0x8000 DBT_DEVICEQUERYREMOVE = 0x8001 DBT_DEVICEQUERYREMOVEFAILED = 0x8002 DBT_DEVICEREMOVEPENDING = 0x8003 DBT_DEVICEREMOVECOMPLETE = 0x8004 DBT_DEVICETYPESPECIFIC = 0x8005 DBT_DEVNODES_CHANGED = 7 DBT_CONFIGCHANGED = 0x18 DBT_DEVTYP_OEM = 0 DBT_DEVTYP_DEVNODE = 1 DBT_DEVTYP_VOLUME = 2 DBT_DEVTYP_PORT = 3 DBT_DEVTYP_NET = 4 DBTF_MEDIA = 0x0001 DBTF_NET = 0x0002 def __init__(self, wparam, lparam): self._info=None for name in dir(self): if name.startswith("DBT") and \ not name.startswith("DBT_DEVTYP") and \ getattr(self,name)==wparam: self._info=(name, dict(self._decode_struct(lparam))) def GetEventInfo(self): return self._info def _decode_struct(self, lparam): if lparam==0: return () format = "iii" buf = win32gui.PyMakeBuffer(struct.calcsize(format), lparam) dbch_size, dbch_devicetype, dbch_reserved = struct.unpack(format, buf) buf = win32gui.PyMakeBuffer(dbch_size, lparam) # we know true size now if dbch_devicetype==self.DBT_DEVTYP_PORT: name="" for b in buf[struct.calcsize(format):]: if b!="\x00": name+=b continue break return ("name", name), if dbch_devicetype==self.DBT_DEVTYP_VOLUME: # yes, the last item is a WORD, not a DWORD like the hungarian would lead you to think format="iiiih0i" dbcv_size, dbcv_devicetype, dbcv_reserved, dbcv_unitmask, dbcv_flags = struct.unpack(format, buf) units=[chr(ord('A')+x) for x in range(26) if dbcv_unitmask&(2**x)] flag="" for name in dir(self): if name.startswith("DBTF_") and getattr(self, name)==dbcv_flags: flag=name break return ("drives", units), ("flag", flag) print "unhandled devicetype struct", dbch_devicetype return () bitpim-1.0.7+dfsg1/src/sms_tab.py0000644001616600161660000006016311323744222014746 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: sms_tab.py 4784 2010-01-15 01:44:50Z djpham $ """ Code to handle the SMS Tab of the BitPim main display. The read flag is not required for outbox and saved message, delivery status is not needed for saved and inbox message, from is not required for save and outbox, to is not required for inbox etc. """ # standard modules from __future__ import with_statement import copy # wx modules import wx import wx.gizmos as gizmos import wx.lib.scrolledpanel as scrolled # BitPim modules import common import database import guiwidgets import helpids import phonebookentryeditor as pb_editor import phonenumber import pubsub import sms import today import guihelper import guiwidgets import widgets import xyaptu #------------------------------------------------------------------------------- class StaticText(wx.StaticText): def __init__(self, parent, _=None): super(StaticText, self).__init__(parent, -1) def SetValue(self, v): if v.find('subject') and (v.find('\n')>-1): v=v.split('\n')[0] if len(v)==10 and v.isdigit(): v='(%03d)-%03d-%04d'%(int(v[:3]),int(v[3:6]),int(v[6:10])) elif len(v)==11 and v.isdigit() and v[0]=='1': v='1-(%03d)-%03d-%04d'%(int(v[1:4]),int(v[4:7]),int(v[7:11])) self.SetLabel(v) #------------------------------------------------------------------------------- class TimeStamp(wx.StaticText): def __init__(self, parent, _=None): super(TimeStamp, self).__init__(parent, -1) def SetValue(self, v): if v: self.SetLabel('%04d-%02d-%02d %02d:%02d:%02d'%( int(v[:4]), int(v[4:6]), int(v[6:8]), int(v[9:11]), int(v[11:13]), int(v[13:]))) else: self.SetLabel('') #------------------------------------------------------------------------------- class DeliveryStatus(wx.StaticText): def __init__(self, parent, _=None): super(DeliveryStatus, self).__init__(parent, -1) def SetValue(self, v): self.SetLabel('\n'.join(v)) #------------------------------------------------------------------------------- class SMSInfo(pb_editor.DirtyUIBase): _dict_key_index=0 _label_index=1 _class_index=2 _get_index=3 _set_index=4 _w_index=5 _flg_index=6 _not_used_fields={ ## sms.SMSEntry.Folder_Inbox: ('delivery_status', '_to'), ## sms.SMSEntry.Folder_Sent: ('read', '_from'), ## sms.SMSEntry.Folder_Saved: ('delivery_status',) } sms.SMSEntry.Folder_Inbox: ('delivery_status',), sms.SMSEntry.Folder_Sent: ('read',), sms.SMSEntry.Folder_Saved: ('delivery_status',) } def __init__(self, parent, _=None): super(SMSInfo, self).__init__(parent) self._fields=[ ['_from', 'From:', StaticText, None, None, None, 0], ['_to', 'To:', StaticText, None, None, None, 0], ['callback', 'Callback #:', StaticText, None, None, None, 0], ['subject', 'Subject:', StaticText, None, None, None, 0], ['datetime', 'Date:', TimeStamp, None, None, None, 0], ['priority_str', 'Priority:', StaticText, None, None, None, 0], ['read', 'Read?:', wx.CheckBox, None, None, None, 0], ['locked', 'Locked:', wx.CheckBox, None, None, None, 0], ['delivery_status', 'Delivery Status:', DeliveryStatus, None, None, None, wx.EXPAND], ] gs=wx.FlexGridSizer(-1, 2, 5, 5) gs.AddGrowableCol(1) for n in self._fields: gs.Add(wx.StaticText(self, -1, n[self._label_index], style=wx.ALIGN_LEFT),0, wx.EXPAND|wx.BOTTOM, 0) w=n[self._class_index](self, -1) gs.Add(w, 0, n[self._flg_index]|wx.BOTTOM, 0) n[self._w_index]=w # all done self.SetSizer(gs) self.SetAutoLayout(True) gs.Fit(self) self._gs=gs def OnMakeDirty(self, evt): self.OnDirtyUI(evt) def Set(self, data): self.ignore_dirty=True if data is None: for n in self._fields: if n[self._class_index]==StaticText or n[self._class_index]==DeliveryStatus or \ n[self._class_index]==TimeStamp: w=n[self._w_index] w.SetValue('') if n[self._class_index]==wx.CheckBox: f=n[self._w_index] f.SetValue(False) else: _bad_fields=self._not_used_fields.get(data.folder, ()) for i,n in enumerate(self._fields): w=n[self._w_index] if n[self._dict_key_index] in _bad_fields: self._gs.Show(i*2, False) self._gs.Show(i*2+1, False) else: self._gs.Show(i*2, True) self._gs.Show(i*2+1, True) w.SetValue(getattr(data, n[self._dict_key_index])) self._gs.Layout() self.ignore_dirty=self.dirty=False def Clear(self): self.Set(None) #------------------------------------------------------------------------------- class SMSWidget(wx.Panel, widgets.BitPimWidget): _data_key='sms' _canned_data_key='canned_msg' msg_type_list=(sms.SMSEntry.Folder_Saved, sms.SMSEntry.Folder_Sent, sms.SMSEntry.Folder_Inbox, 'All') def __init__(self, mainwindow, parent): super(SMSWidget, self).__init__(parent, -1) self._main_window=mainwindow #self._data=self._canned_data={} self._data={} self._parent=parent self.sms_tree_nodes={} # main box sizer vbs=wx.BoxSizer(wx.VERTICAL) # data date adjuster hbs=wx.BoxSizer(wx.HORIZONTAL) self.read_only=False self.historical_date=None static_bs=wx.StaticBoxSizer(wx.StaticBox(self, -1, 'Historical Data Status:'), wx.VERTICAL) self.historical_data_label=wx.StaticText(self, -1, 'Current Data') static_bs.Add(self.historical_data_label, 1, wx.EXPAND|wx.ALL, 5) hbs.Add(static_bs, 1, wx.EXPAND|wx.ALL, 5) vbs.Add(hbs, 0, wx.EXPAND|wx.ALL, 5) static_bs1=wx.StaticBoxSizer(wx.StaticBox(self, -1, 'Canned Messages:'), wx.HORIZONTAL) self.canned_list=gizmos.EditableListBox(self, -1, 'User Defined Canned Messages:') static_bs1.Add(self.canned_list, 1, wx.EXPAND|wx.ALL, 5) vbs1=wx.BoxSizer(wx.VERTICAL) vbs1.Add(wx.StaticText(self, -1, ' Built-in Canned Messages:'), 0, wx.ALL, 0) self.builtin_canned_list=wx.ListBox(self, -1) vbs1.Add(self.builtin_canned_list, 1, wx.EXPAND|wx.ALL, 5) static_bs1.Add(vbs1, 1, wx.EXPAND|wx.ALL, 5) vbs.Add(static_bs1, 1, wx.EXPAND|wx.ALL, 5) self.save_btn=wx.Button(self, wx.ID_SAVE) vbs.Add(self.save_btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5) self.list_widget=SMSList(self._main_window, self._parent, self) wx.EVT_BUTTON(self, self.save_btn.GetId(), self.OnSaveCannedMsg) # all done self.SetSizer(vbs) self.SetAutoLayout(True) vbs.Fit(self) def OnInit(self): for stat in self.msg_type_list: self.sms_tree_nodes[stat]=self.AddSubPage(self.list_widget, stat, self._tree.message) def GetRightClickMenuItems(self, node): result=[] result.append((widgets.BitPimWidget.MENU_NORMAL, guihelper.ID_EXPORT_SMS, "Export SMS ...", "Export the SMS")) result.append((widgets.BitPimWidget.MENU_NORMAL, guihelper.ID_DATAHISTORICAL, "Historical Data ...", "Display Historical Data")) return result def _populate(self): self.list_widget.populate() # populate the canned data self.canned_list.SetStrings( self._canned_data.user_list) self.builtin_canned_list.Set(self._canned_data.builtin_list) def OnSaveCannedMsg(self, _): if self.read_only: wx.MessageBox('You are viewing historical data which cannot be changed or saved', 'Cannot Save SMS Data', style=wx.OK|wx.ICON_ERROR) return self._canned_data.user_list=self.canned_list.GetStrings() self._save_to_db(canned_msg_dict=self._canned_data) def GetDeleteInfo(self): return guihelper.ART_DEL_SMS, "Delete SMS" def GetAddInfo(self): return guihelper.ART_ADD_SMS, "Add SMS" def getdata(self,dict,want=None): dict[self._data_key]=copy.deepcopy(self._data, {}) dict[self._canned_data_key]=self._canned_data.get().get( self._canned_data_key, {}) def get_selected_data(self): # return a dict of selected items res={} for sel_idx in self.list_widget._item_list.GetSelections().values(): k=self.list_widget._item_list.GetItemData(sel_idx) if k: res[k]=self._data[k] return res def get_data(self): return self._data def get_keys(self): """Return the list of keys as being displayed""" return self.list_widget.GetAllKeys() def get_selected_keys(self): """Return the list of keys of selected items being displayed""" return self.list_widget.GetSelectedKeys() def populate(self, dict, force=False): if self.read_only and not force: return if not self.read_only: self._canned_data=sms.CannedMsgEntry() self._canned_data.set({ self._canned_data_key: dict.get(self._canned_data_key, [])}) self._data=dict.get(self._data_key, {}) self._populate() def _save_to_db(self, sms_dict=None, canned_msg_dict=None): if self.read_only: return if sms_dict is not None: db_rr={} for k, e in sms_dict.items(): db_rr[k]=sms.SMSDataObject(e) database.ensurerecordtype(db_rr, sms.smsobjectfactory) self._main_window.database.savemajordict(self._data_key, db_rr) if canned_msg_dict is not None: db_rr={} db_rr[self._canned_data_key]=sms.CannedMsgDataObject( canned_msg_dict) database.ensurerecordtype(db_rr, sms.cannedmsgobjectfactory) self._main_window.database.savemajordict(self._canned_data_key, db_rr) def populatefs(self, dict): if self.read_only: wx.MessageBox('You are viewing historical data which cannot be changed or saved', 'Cannot Save SMS Data', style=wx.OK|wx.ICON_ERROR) return canned_msg=sms.CannedMsgEntry() canned_msg.set({ self._canned_data_key: dict.get(self._canned_data_key, [])}) self._save_to_db(sms_dict=dict.get(self._data_key, []), canned_msg_dict=canned_msg) return dict def getfromfs(self, result, timestamp=None): # read data from the database sms_dict=self._main_window.database.\ getmajordictvalues(self._data_key, sms.smsobjectfactory, at_time=timestamp) r={} for k,e in sms_dict.items(): ce=sms.SMSEntry() ce.set_db_dict(e) r[ce.id]=ce result.update({ self._data_key: r }) # read the canned messages canned_msg_dict=self._main_window.database.\ getmajordictvalues(self._canned_data_key, sms.cannedmsgobjectfactory) for k,e in canned_msg_dict.items(): ce=sms.CannedMsgEntry() ce.set_db_dict(e) result.update(ce.get()) return result def merge(self, dict): # merge this data with our data # the merge criteria is simple: reject if msg_id's are same if self.read_only: wx.MessageBox('You are viewing historical data which cannot be changed or saved', 'Cannot Save SMS Data', style=wx.OK|wx.ICON_ERROR) return existing_id=[e.msg_id for k,e in self._data.items()] d=dict.get(self._data_key, {}) for k,e in d.items(): if e.msg_id not in existing_id: self._data[e.id]=e # save the canned data self._canned_data=sms.CannedMsgEntry() self._canned_data.set({ self._canned_data_key: dict.get(self._canned_data_key, []) } ) # populate the display and save the data self._populate() self._save_to_db(sms_dict=self._data, canned_msg_dict=self._canned_data) def HasHistoricalData(self): return True def OnHistoricalData(self): """Display current or historical data""" if self.read_only: current_choice=guiwidgets.HistoricalDataDialog.Historical_Data else: current_choice=guiwidgets.HistoricalDataDialog.Current_Data with guihelper.WXDialogWrapper(guiwidgets.HistoricalDataDialog(self, current_choice=current_choice, historical_date=self.historical_date, historical_events=\ self._main_window.database.getchangescount(self._data_key)), True) as (dlg, retcode): if retcode==wx.ID_OK: with guihelper.MWBusyWrapper(self._main_window): current_choice, self.historical_date=dlg.GetValue() r={} if current_choice==guiwidgets.HistoricalDataDialog.Current_Data: self.read_only=False msg_str='Current Data' self.getfromfs(r) else: self.read_only=True msg_str='Historical Data as of %s'%\ str(wx.DateTimeFromTimeT(self.historical_date)) self.getfromfs(r, self.historical_date) self.populate(r, True) self.historical_data_label.SetLabel(msg_str) self.list_widget.historical_data_label.SetLabel(msg_str) def OnPrintDialog(self, mainwindow, config): with guihelper.WXDialogWrapper(guiwidgets.SMSPrintDialog(self, mainwindow, config), True): pass def CanPrint(self): return True #------------------------------------------------------------------------------- class SMSList(wx.Panel, widgets.BitPimWidget): _by_type=0 _by_date=1 _by_number=2 _me_name='' def __init__(self, mainwindow, parent, stats): super(SMSList, self).__init__(parent, -1) self._main_window=mainwindow self._stats=stats self.nodes={} self.nodes_keys={} self._display_filter="All" self._name_map={} self._data_map={} # main box sizer vbs=wx.BoxSizer(wx.VERTICAL) # data date adjuster hbs=wx.BoxSizer(wx.HORIZONTAL) static_bs=wx.StaticBoxSizer(wx.StaticBox(self, -1, 'Historical Data Status:'), wx.VERTICAL) self.historical_data_label=wx.StaticText(self, -1, 'Current Data') static_bs.Add(self.historical_data_label, 1, wx.EXPAND|wx.ALL, 5) hbs.Add(static_bs, 1, wx.EXPAND|wx.ALL, 5) vbs.Add(hbs, 0, wx.EXPAND|wx.ALL, 5) # main list hbmessage=wx.BoxSizer(wx.HORIZONTAL) column_info=[] column_info.append(("From", 105, False)) column_info.append(("To", 120, False)) column_info.append(("Date", 180, False)) self._item_list=guiwidgets.BitPimListCtrl(self, column_info) self._item_list.ResetView(self.nodes, self.nodes_keys) vbs0=wx.BoxSizer(wx.VERTICAL) vbs0.Add(self._item_list, 1, wx.EXPAND|wx.ALL, 5) vbs0.Add(wx.StaticText(self, -1, ' Note: Click column headings to sort data'), 0, wx.ALIGN_CENTRE|wx.BOTTOM, 10) hbmessage.Add(vbs0, 1, wx.EXPAND|wx.ALL, 5) vbs1=wx.BoxSizer(wx.VERTICAL) self._item_info=SMSInfo(self) vbs1.Add(self._item_info, 0, wx.EXPAND|wx.ALL, 5) self._item_text=pb_editor.MemoEditor(self, -1) vbs1.Add(self._item_text, 1, wx.EXPAND|wx.ALL, 5) hbmessage.Add(vbs1, 0, wx.EXPAND|wx.ALL, 5) hbmessage.SetItemMinSize(1, (350, 20)) vbs.Add(hbmessage, 1, wx.EXPAND|wx.ALL, 5) wx.EVT_LIST_ITEM_SELECTED(self, self._item_list.GetId(), self._OnSelChanged) pubsub.subscribe(self._OnPBLookup, pubsub.RESPONSE_PB_LOOKUP) # register for Today selection self.today_data=None today.bind_notification_event(self.OnTodaySelection, today.Today_Group_IncomingSMS) # all done self.SetSizer(vbs) self.SetAutoLayout(True) vbs.Fit(self) def CanCopy(self): return self._item_text.CanCopy() def OnCopy(self, _): self._item_text.Copy() def OnSelected(self, node): for stat in self._stats.msg_type_list: if self._stats.sms_tree_nodes[stat]==node: if self._display_filter!=stat: self._display_filter=stat # for some reason GetTopItem return 0 (instead of -1) # when the list is empty if self._item_list.GetItemCount(): item=self._item_list.GetTopItem() # deselect all the items when changing view while item!=-1: self._item_list.Select(item, 0) item=self._item_list.GetNextItem(item) self._item_info.Clear() self._item_text.Set(None) self.populate() self._on_today_selection() return def GetRightClickMenuItems(self, node): result=[] result.append((widgets.BitPimWidget.MENU_NORMAL, guihelper.ID_EDITSELECTALL, "Select All", "Select All Items")) result.append((widgets.BitPimWidget.MENU_NORMAL, guihelper.ID_EDITDELETEENTRY, "Delete Selected", "Delete Selected Items")) result.append((widgets.BitPimWidget.MENU_SPACER, 0, "", "")) result.append((widgets.BitPimWidget.MENU_NORMAL, guihelper.ID_EXPORT_SMS, "Export SMS ...", "Export the SMS")) result.append((widgets.BitPimWidget.MENU_NORMAL, guihelper.ID_DATAHISTORICAL, "Historical Data ...", "Display Historical Data")) return result def CanSelectAll(self): if self._item_list.GetItemCount(): return True return False def _OnPBLookup(self, msg): d=msg.data k=d.get('item', None) name=d.get('name', None) if k is None: return self._name_map[k]=name def publish_today_data(self): keys=[(x.datetime,k) for k,x in self._stats._data.items()] keys.sort() keys.reverse() today_event=today.TodaySMSEvent() for _,k in keys: if self._stats._data[k].folder==sms.SMSEntry.Folder_Inbox: today_event.append(self._stats._data[k].text, { 'id': k } ) today_event.broadcast() def OnTodaySelection(self, evt): inbox_node=self._stats.sms_tree_nodes[sms.SMSEntry.Folder_Inbox] self.today_data=evt.data self.ActivateSelf(inbox_node) def _on_today_selection(self): if self.today_data and self._item_list.GetItemCount(): item=self._item_list.GetTopItem() while item>=0: if self.today_data['id']==self._item_list.GetItemData(item): self._item_list.Select(item, 1) self._item_list.EnsureVisible(item) else: self._item_list.Select(item, 0) item=self._item_list.GetNextItem(item) self.today_data=None def OnSelectAll(self, _): item=self._item_list.GetTopItem() while item!=-1: self._item_list.Select(item) item=self._item_list.GetNextItem(item) def _number2name(self, numstr): # Lookup name from number string _s=self._name_map.get(numstr, None) if _s is None: return phonenumber.format(numstr) return _s def _OnSelChanged(self, evt): # an item was clicked on/selected item=evt.GetIndex() k=self._item_list.GetItemData(item) # populate the detailed info of the item keyed k if k is None: # clear out all the subfields self._item_info.Clear() self._item_text.Set(None) return entry=self._stats._data.get(k, None) if entry is None: return # set the general detail e=copy.deepcopy(entry) # lookup names if available e._from=self._me_name if e.folder in (e.Folder_Sent, e.Folder_Saved) else \ self._number2name(e._from) e._to=self._me_name if e.folder==e.Folder_Inbox else self._number2name(e._to) e.callback=self._number2name(e.callback) self._item_info.Set(e) self._item_text.Set({'memo': e.text}) def HasHistoricalData(self): return self._stats.HasHistoricalData() def OnHistoricalData(self): return self._stats.OnHistoricalData() def populate(self): self.nodes={} self.nodes_keys={} index=0 for k,e in self._stats._data.items(): if len(e._from) and not self._name_map.has_key(e._from): pubsub.publish(pubsub.REQUEST_PB_LOOKUP, { 'item': e._from } ) if len(e._to) and not self._name_map.has_key(e._to): pubsub.publish(pubsub.REQUEST_PB_LOOKUP, { 'item': e._to } ) if len(e.callback) and not self._name_map.has_key(e.callback): pubsub.publish(pubsub.REQUEST_PB_LOOKUP, { 'item': e.callback } ) if self._display_filter=='All' or e.folder==self._display_filter: _from=self._me_name if e.folder in (e.Folder_Sent, e.Folder_Saved) \ else self._number2name(e._from) _to=self._me_name if e.folder==e.Folder_Inbox \ else self._number2name(e._to) self.nodes[index]=(_from, _to, e.get_date_time_str()) self.nodes_keys[index]=k self._data_map[k]=index index+=1 self._item_list.ResetView(self.nodes, self.nodes_keys) self.publish_today_data() def CanDelete(self): if self._stats.read_only: return False sels_idx=self._item_list.GetFirstSelected() if sels_idx==-1: return False return True def GetDeleteInfo(self): return guihelper.ART_DEL_SMS, "Delete Message" def OnDelete(self, _): if self._stats.read_only: return sels_idx=self._item_list.GetSelections() if len(sels_idx): # delete them from the data list for i,item in sels_idx.items(): del self._stats._data[self._item_list.GetItemData(item)] self._item_list.Select(item, 0) self.populate() self._stats._save_to_db(self._stats._data) def GetHelpID(self): return helpids.ID_TAB_SMS def OnPrintDialog(self, mainwindow, config): self._stats.OnPrintDialog(mainwindow, config) def CanPrint(self): return True def GetAllKeys(self): return [ self._item_list.GetItemData(x) \ for x in range(self._item_list.GetItemCount()) ] def GetSelectedKeys(self): _sel_items=self._item_list.GetSelections() _keys=_sel_items.keys() _keys.sort() return [ self._item_list.GetItemData(_sel_items[x]) \ for x in _keys ] bitpim-1.0.7+dfsg1/src/fileview.py0000644001616600161660000014406011154117036015126 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2003-2006 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: fileview.py 4732 2009-03-06 03:53:02Z hjelmn $ ### ### File viewer ### from __future__ import with_statement import os import copy import cStringIO import time import base64 import phone_media_codec import wx import guihelper import aggregatedisplay import pubsub import common import widgets import guiwidgets import shutil import database import helpids import tempfile basename=common.basename stripext=common.stripext getext=common.getext #------------------------------------------------------------------------------- class MediaDataObject(database.basedataobject): # modified_datatime is unix time _knownproperties=['name', 'origin', 'index', 'timestamp'] _knownlistproperties=database.basedataobject._knownlistproperties.copy() _knownlistproperties.update( { 'mediadata': ['data'] }) def __init__(self, data=None): if data is None or not isinstance(data, MediaEntry): return; self.update(data.get_db_dict()) mediaobjectfactory=database.dataobjectfactory(MediaDataObject) #------------------------------------------------------------------------------- class MediaEntry(object): _id_index=0 _max_id_index=999 def __init__(self): self._data={ 'serials': [] } self._create_id() def get(self): res=copy.deepcopy(self._data, None, {}) # account for the medidadata field if res.has_key('mediadata'): if res['mediadata'] is not None: res['mediadata']=[{'data': buffer(res['mediadata']) }] else: del res['mediadata'] return res def set(self, d): self._data={} self._data.update(d) # check for mediadata if d.get('mediadata', None) is not None: self._data['mediadata']=str(d['mediadata'][0]['data']) def get_db_dict(self): return self.get() def set_db_dict(self, d): self.set(d) def _create_id(self): "Create a BitPim serial for this entry" self._data.setdefault("serials", []).append(\ {"sourcetype": "bitpim", "id": '%.3f%03d'%(time.time(), MediaEntry._id_index) }) if MediaEntry._id_indexlimit: break # back off 1 in case the new text's a tad long if i: i-=1 text=text[:i]+term w,h=dc.GetTextExtent(text) assert w<=widthavailable dc.DrawText(text, x, y) return w,h media_codec=phone_media_codec.codec_name class MyFileDropTarget(wx.FileDropTarget): def __init__(self, target, drag_over=False, enter_leave=False): wx.FileDropTarget.__init__(self) self.target=target self.drag_over=drag_over self.enter_leave=enter_leave def OnDropFiles(self, x, y, filenames): return self.target.OnDropFiles(x,y,filenames) def OnDragOver(self, x, y, d): if self.drag_over: return self.target.OnDragOver(x,y,d) return wx.FileDropTarget.OnDragOver(self, x, y, d) def OnEnter(self, x, y, d): if self.enter_leave: return self.target.OnEnter(x,y,d) return wx.FileDropTarget.OnEnter(self, x, y, d) def OnLeave(self): if self.enter_leave: return self.target.OnLeave() return wx.FileDropTarget.OnLeave(self) class FileView(wx.Panel, widgets.BitPimWidget): # Various DC objects used for drawing the items. We have to calculate them in the constructor as # the app object hasn't been constructed when this file is imported. item_selection_brush=None item_selection_pen=None item_line_font=None item_term="..." item_guardspace=None # Files we should ignore skiplist= ( 'desktop.ini', 'thumbs.db', 'zbthumbnail.info' ) database_key="" # how much data do we want in call to getdata NONE=0 SELECTED=1 ALL=2 # maximum length of a filename maxlen=-1 # set via phone profile # acceptable characters in a filename filenamechars=None # set via phone profile # Default Help page, children can override helpid=helpids.ID_TAB_MEDIA def __init__(self, mainwindow, parent, media_root, watermark=None): wx.Panel.__init__(self,parent,style=wx.CLIP_CHILDREN) # adjust the DB to accommodate the new schema if necessary self._fixupdb(mainwindow.database) # item attributes if self.item_selection_brush is None: self.item_selection_brush=wx.TheBrushList.FindOrCreateBrush("MEDIUMPURPLE2", wx.SOLID) self.item_selection_pen=wx.ThePenList.FindOrCreatePen("MEDIUMPURPLE2", 1, wx.SOLID) f1=wx.TheFontList.FindOrCreateFont(10, wx.SWISS, wx.NORMAL, wx.BOLD) f2=wx.TheFontList.FindOrCreateFont(10, wx.SWISS, wx.NORMAL, wx.NORMAL) self.item_line_font=[f1, f2, f2, f2] dc=wx.MemoryDC() dc.SelectObject(wx.EmptyBitmap(100,100)) self.item_guardspace=dc.GetTextExtent(self.item_term)[0] del dc # no redraw ickiness # wx.EVT_ERASE_BACKGROUND(self, lambda evt: None) self.parent=parent self.mainwindow=mainwindow self.thedir=None self.wildcard="I forgot to set wildcard in derived class|*" self.__dragging=False self._in_context_menu=False self.media_root=media_root self.show_thumbnail=True self.active_section="" # origins that should not be used for phonebook self.excluded_origins=() # use the aggregatedisplay to do the actual item display self.aggdisp=aggregatedisplay.Display(self, self, watermark) # we are our own datasource self.vbs=wx.BoxSizer(wx.VERTICAL) ### toolbar self.tb=wx.ToolBar(self, -1, style=wx.TB_3DBUTTONS|wx.TB_HORIZONTAL) self.tb.SetToolBitmapSize(wx.Size(18,18)) sz=self.tb.GetToolBitmapSize() # list and thumbnail tools self.tb.AddRadioLabelTool(guihelper.ID_FILEVIEW_THUMBNAIL, "Thumbnail", wx.ArtProvider.GetBitmap(guihelper.ART_MEDIA_THUMB_VIEW, wx.ART_TOOLBAR, sz), wx.ArtProvider.GetBitmap(guihelper.ART_MEDIA_THUMB_VIEW, wx.ART_TOOLBAR, sz), "Show Thumbnails", "Show items as thumbnails") self.tb.AddRadioLabelTool(guihelper.ID_FILEVIEW_LIST, "List", wx.ArtProvider.GetBitmap(guihelper.ART_MEDIA_LIST_VIEW, wx.ART_TOOLBAR, sz), wx.ArtProvider.GetBitmap(guihelper.ART_MEDIA_LIST_VIEW, wx.ART_TOOLBAR, sz), "Show List", "Show items in a list") self.vbs.Add(self.tb, 0, wx.EXPAND|wx.ALL, 1) self.aggr_sizer=self.vbs.Add(self.aggdisp, 1, wx.EXPAND|wx.ALL, 2) # main list column_info=self.GetColumnNames() self.item_list=guiwidgets.BitPimListCtrl(self, column_info) self.nodes={} self.nodes_keys={} self.item_list.ResetView(self.nodes, self.nodes_keys) self.item_sizer=self.vbs.Add(self.item_list, 1, wx.EXPAND|wx.ALL, 2) self.item_sizer.Show(False) self.note=self.vbs.Add(wx.StaticText(self, -1, ' Note: Click column headings to sort data'), 0, wx.ALIGN_CENTRE|wx.BOTTOM, 10) self.note.Show(False) self.SetSizer(self.vbs) timerid=wx.NewId() self.thetimer=wx.Timer(self, timerid) wx.EVT_TIMER(self, timerid, self.OnTooltipTimer) self.motionpos=None wx.EVT_MOUSE_EVENTS(self.aggdisp, self.OnMouseEvent) self.tipwindow=None if True: # guihelper.IsMSWindows() or guihelper.IsGtk(): # turn on drag-and-drag for all platforms wx.EVT_MOTION(self.aggdisp, self.OnStartDrag) # Menus self.itemmenu=wx.Menu() self.itemmenu.Append(guihelper.ID_FV_OPEN, "Open") self.itemmenu.Append(guihelper.ID_FV_SAVE, "Save ...") self.itemmenu.AppendSeparator() if guihelper.IsMSWindows(): self.itemmenu.Append(guihelper.ID_FV_COPY, "Copy") self.itemmenu.Append(guihelper.ID_FV_DELETE, "Delete") self.itemmenu.Append(guihelper.ID_FV_RENAME, "Rename") self.movemenu=wx.Menu() self.itemmenu.AppendMenu(guihelper.ID_FV_MOVE, "Move to", self.movemenu) self.itemmenu.AppendSeparator() self.itemmenu.Append(guihelper.ID_FV_REPLACE, "Replace") # self.itemmenu.Append(guihelper.ID_FV_RENAME, "Rename") self.itemmenu.Append(guihelper.ID_FV_REFRESH, "Refresh") self.bgmenu=wx.Menu() self.bgmenu.Append(guihelper.ID_FV_ADD, "Add ...") self.bgmenu.Append(guihelper.ID_FV_PASTE, "Paste") self.bgmenu.Append(guihelper.ID_FV_REFRESH, "Refresh") wx.EVT_MENU(self.tb, guihelper.ID_FILEVIEW_THUMBNAIL, self.OnThumbnailView) wx.EVT_MENU(self.tb, guihelper.ID_FILEVIEW_LIST, self.OnListView) wx.EVT_MENU(self.itemmenu, guihelper.ID_FV_OPEN, self.OnLaunch) wx.EVT_MENU(self.itemmenu, guihelper.ID_FV_SAVE, self.OnSave) if guihelper.IsMSWindows(): wx.EVT_MENU(self.itemmenu, guihelper.ID_FV_COPY, self.OnCopy) wx.EVT_MENU(self.itemmenu, guihelper.ID_FV_DELETE, self.OnDelete) wx.EVT_MENU(self.itemmenu, guihelper.ID_FV_RENAME, self.OnRename) wx.EVT_MENU(self.itemmenu, guihelper.ID_FV_REPLACE, self.OnReplace) wx.EVT_MENU(self.itemmenu, guihelper.ID_FV_REFRESH, lambda evt: self.OnRefresh()) wx.EVT_MENU(self.bgmenu, guihelper.ID_FV_ADD, self.OnAdd) wx.EVT_MENU(self.bgmenu, guihelper.ID_FV_PASTE, self.OnPaste) wx.EVT_MENU(self.bgmenu, guihelper.ID_FV_REFRESH, lambda evt: self.OnRefresh) wx.EVT_RIGHT_UP(self.aggdisp, self.OnRightClick) wx.EVT_LIST_ITEM_RIGHT_CLICK(self.item_list, self.item_list.GetId(), self.OnRightClick) aggregatedisplay.EVT_ACTIVATE(self.aggdisp, self.aggdisp.GetId(), self.OnLaunch) wx.EVT_LIST_ITEM_ACTIVATED(self.item_list, self.item_list.GetId(), self.OnLaunch) self.droptarget=MyFileDropTarget(self) self.SetDropTarget(self.droptarget) wx.EVT_SIZE(self, self.OnSize) wx.EVT_IDLE(self, self.OnIdle) wx.EVT_KEY_DOWN(self.aggdisp, self.OnKeyDown) wx.EVT_KEY_UP(self.aggdisp, self.OnKeyUp) self.tb.Realize() pubsub.subscribe(self.OnMediaInfo, pubsub.REQUEST_MEDIA_INFO) pubsub.subscribe(self.OnMediaOpen, pubsub.REQUEST_MEDIA_OPEN) def OnIdle(self, _): "Save out changed data" if self.modified: self.modified=False self._populatefs(self._data) self.OnListRequest() # broadcast changes def OnKeyDown(self, evt): if guihelper.IsGtk(): if evt.GetKeyCode()==wx.WXK_SHIFT: self._shift_down=True else: self._shift_down=evt.ShiftDown() evt.Skip() def OnKeyUp(self, evt): if guihelper.IsGtk(): if evt.GetKeyCode()==wx.WXK_SHIFT: self._shift_down=False else: self._shift_down=evt.ShiftDown() evt.Skip() def OnThumbnailView(self, _): self.thetimer.Stop() self.show_thumbnail=True self.item_sizer.Show(False) self.note.Show(False) self.aggr_sizer.Show(True) self.aggdisp.SetFocus() self.vbs.Layout() def OnListView(self, _): self.thetimer.Stop() self.show_thumbnail=False self.aggr_sizer.Show(False) # resize to hide the thumbnails otherwise it still gets the mouse scroll events. self.aggdisp.SetSize((1,1)) self.item_sizer.Show(True) self.item_list.SetFocus() self.note.Show(True) self.vbs.Layout() def OnSelected(self, node): self.active_section=self.media_root.GetNodeName(self, node) self.aggdisp.SetActiveSection(self.active_section) self.MakeMoveMenu() self.OnRefreshList() def GetRightClickMenuItems(self, node): # we set these values so that the event hander knows only to save # this origin rather than all media, we clear these values after # the menu is dismissed (see OnRightClickMenuExit below) self.media_root.widget_to_save=self self.media_root.origin_to_save=self.active_section result=[] result.append((widgets.BitPimWidget.MENU_NORMAL, guihelper.ID_EDITADDENTRY, "Add to %s" % self.active_section, "Add a new media items")) result.append((widgets.BitPimWidget.MENU_NORMAL, guihelper.ID_EDITDELETEENTRY, "Delete Selected", "Delete Selected Items")) result.append((widgets.BitPimWidget.MENU_NORMAL, guihelper.ID_EDITSELECTALL, "Select All", "Select All Items")) if guihelper.IsMSWindows(): result.append((widgets.BitPimWidget.MENU_NORMAL, guihelper.ID_EDITCOPY, "Copy", "Copy Selected Items")) result.append((widgets.BitPimWidget.MENU_SPACER, 0, "", "")) result.append((widgets.BitPimWidget.MENU_NORMAL, guihelper.ID_EXPORT_MEDIA_TO_DIR, "Export %s to Folder ..." % self.active_section, "Export the media to a folder on your hard drive")) result.append((widgets.BitPimWidget.MENU_NORMAL, guihelper.ID_EXPORT_MEDIA_TO_ZIP, "Export %s to Zip File ..." % self.active_section, "Export the media to a zip file")) return result def OnRightClickMenuExit(self): # clear these values now that the event has been processed self.media_root.widget_to_save=None self.media_root.origin_to_save="" def MakeMoveMenu(self): # redo the move menu menuItems = self.movemenu.GetMenuItems() for i, menuItem in enumerate(menuItems): self.Unbind(wx.EVT_MENU, id=menuItem.GetId()) self.movemenu.DeleteItem(menuItem) # get the list of origins origins=self.media_root.GetNodeList(self) origins.remove(self.active_section) if len(origins): for origin in origins: mid=wx.NewId() self.movemenu.Append(mid, origin) wx.EVT_MENU(self, mid, self.OnMoveItem) def GetColumnNames(self): columns=[] columns.append(("Name", 120, False)) columns.append(("Size/bytes", 80, True)) columns.append(("Date Modified", 120, False)) columns.append(("File Details", 380, False)) return columns def OnSize(self, evt): # stop the tool tip from poping up when we're resizing! if self.thetimer.IsRunning(): self.thetimer.Stop() evt.Skip() def OnRightClick(self, evt): """Popup the right click context menu @param widget: which widget to popup in @param position: position in widget @param onitem: True if the context menu is for an item """ if len(self.GetSelectedItems()): menu=self.itemmenu item=self.GetSelectedItems()[0] single=len(self.GetSelectedItems())==1 menu.Enable(guihelper.ID_FV_RENAME, single) # we always launch on mac if not guihelper.IsMac(): menu.FindItemById(guihelper.ID_FV_OPEN).Enable(guihelper.GetOpenCommand(item.mimetypes, item.name) is not None) else: menu=self.bgmenu menu.Enable(guihelper.ID_FV_PASTE, self.CanPaste()) if menu is None: return # we're putting up the context menu, quit the tool tip timer. self._in_context_menu=True self.aggdisp.PopupMenu(menu, evt.GetPosition()) self._in_context_menu=False def OnMoveItem(self, evt): new_origin=None items=self.GetSelectedItems() new_origin=self.movemenu.FindItemById(evt.GetId()).GetLabel() for item in items: if new_origin!=None and new_origin in self.media_root.GetNodeList(self): # make sure this name is not already used for i in self._data[self.database_key]: if self._data[self.database_key][i].origin==new_origin and \ self._data[self.database_key][i].name==item.name: wx.MessageBox("A file with the same name already exists in %s!" % new_origin, "Move Error", wx.OK|wx.ICON_EXCLAMATION) return wx.BeginBusyCursor() item.ChangeOriginInIndex(new_origin) self.OnRefresh() wx.EndBusyCursor() def _launch(self, item): # Open/Launch the specified item me=self._data[self.database_key][item.key] fname=self._gettempfile(me) if guihelper.IsMac(): import findertools findertools.launch(fname) return cmd=guihelper.GetOpenCommand(item.mimetypes, fname) if cmd is None: wx.Bell() else: wx.Execute(cmd, wx.EXEC_ASYNC) @guihelper.BusyWrapper def OnLaunch(self, _): self._launch(self.GetSelectedItems()[0]) if True: # guihelper.IsMSWindows() or guihelper.IsGtk(): # drag-and-drop files should work on all platforms def OnStartDrag(self, evt): evt.Skip() if not evt.LeftIsDown(): return items=self.GetSelectedItems() if not len(items): return drag_source=wx.DropSource(self) file_names=wx.FileDataObject() for item in items: me=self._data[self.database_key][item.key] fname=self._gettempfile(me) if not os.path.isfile(fname): continue file_names.AddFile(fname) drag_source.SetData(file_names) self.__dragging=True res=drag_source.DoDragDrop(wx.Drag_AllowMove) self.__dragging=False # check of any of the files have been removed, # can't trust result returned by DoDragDrop for item in items: me=self._data[self.database_key][item.key] fname=self._gettempfile(me) if not os.path.isfile(fname): item.RemoveFromIndex() def OnMouseEvent(self, evt): self.motionpos=evt.GetPosition() # on windows if we quickly move the mouse out of bitpim window we never get an event and we will pop up # the tooltip when we should not, so we check the position after the timeout and see if it has moved. self.abs_mouse_pos=wx.GetMousePosition() evt.Skip() self.thetimer.Stop() if evt.AltDown() or evt.MetaDown() or evt.ControlDown() or \ evt.ShiftDown() or evt.Dragging() or evt.IsButton() or \ self._in_context_menu or not self.show_thumbnail: return self.thetimer.Start(1750, wx.TIMER_ONE_SHOT) def OnTooltipTimer(self, _): if self._in_context_menu or not self.show_thumbnail or \ wx.GetApp().critical.isSet(): # we're putting up a context menu or main app is busy, forget this return # see if we have moved if self.abs_mouse_pos!=wx.GetMousePosition(): return x,y=self.aggdisp.CalcUnscrolledPosition(*self.motionpos) res=self.aggdisp.HitTest(x,y) if res.item is not None: try: self.tipwindow.Destroy() except: pass self.tipwindow=res.item.DisplayTooltip(self.aggdisp, res.itemrectscrolled) def OnRefresh(self): # update aggregate view self.aggdisp.UpdateItems() self.OnRefreshList() self.media_root.DoMediaSummary() def OnRefreshList(self): # update list view self.nodes={} self.nodes_keys={} index=0 for k,e in self.sections: if self.active_section==None or k.label==self.active_section: for item in e: # replace linefeeds in description dlist=item.long.splitlines() d="" for l in dlist: if len(d): d+=" - " d+=l self.nodes[index]=(item.name, str(item.size), item.timestamp, d) self.nodes_keys[index]=item index+=1 self.item_list.ResetView(self.nodes, self.nodes_keys) def GetSelectedItems(self): if self.show_thumbnail: return [item for _,_,_,item in self.aggdisp.GetSelection()] res=[] sel=self.item_list.GetSelections() for sel_idx in sel: res.append(self.item_list.GetItemData(sel[sel_idx])) return res def GetAllItems(self): return [item for _,_,_,item in self.aggdisp.GetAllItems()] def CanSelectAll(self): return self.item_list.GetItemCount() > 0 def OnSelectAll(self, _): self.aggdisp.SelectAll() self.item_list.SelectAll() def OnSave(self, _): # If one item is selected we ask for a filename to save. If # multiple then we ask for a directory, and users don't get # the choice to affect the names of files. Note that we don't # allow users to select a different format for the file - we # just copy it as is. items=self.GetSelectedItems() if len(items)==1: ext=getext(items[0].name) if ext=="": ext="*" else: ext="*."+ext with guihelper.WXDialogWrapper(wx.FileDialog(self, "Save item", wildcard=ext, defaultFile=items[0].name, style=wx.SAVE|wx.OVERWRITE_PROMPT|wx.CHANGE_DIR), True) as (dlg, retcode): if retcode==wx.ID_OK: file(dlg.GetPath(), "wb").write(self._data[items[0].datakey][items[0].key].mediadata) if self._data[items[0].datakey][items[0].key].timestamp!=None: os.utime(dlg.GetPath(), (self._data[items[0].datakey][items[0].key].timestamp, self._data[items[0].datakey][items[0].key].timestamp)) else: with guihelper.WXDialogWrapper(wx.DirDialog(self, "Save items to", style=wx.DD_DEFAULT_STYLE|wx.DD_NEW_DIR_BUTTON), True) as (dlg, retcode): if retcode==wx.ID_OK: for item in items: fname=item.name.encode(media_codec) fname=os.path.join(dlg.GetPath(), basename(fname)) file(fname, 'wb').write(self._data[item.datakey][item.key].mediadata) if self._data[item.datakey][item.key].timestamp!=None: os.utime(fname, (self._data[item.datakey][item.key].timestamp, self._data[item.datakey][item.key].timestamp)) if guihelper.IsMSWindows(): def OnCopy(self, _): items=self.GetSelectedItems() if not len(items): # nothing selected return file_names=wx.FileDataObject() for item in items: me=self._data[self.database_key][item.key] fname=self._gettempfile(me) if not os.path.isfile(fname): continue file_names.AddFile(fname) if wx.TheClipboard.Open(): wx.TheClipboard.SetData(file_names) wx.TheClipboard.Close() def CanCopy(self): return len(self.GetSelectedItems()) if guihelper.IsGtk(): # Gtk just pastes the file names as text onto the Clipboard def OnPaste(self, _=None): if not wx.TheClipboard.Open(): # can't access the clipboard return if wx.TheClipboard.IsSupported(wx.DataFormat(wx.DF_UNICODETEXT)): file_names=wx.TextDataObject() has_data=wx.TheClipboard.GetData(file_names) else: has_data=False wx.TheClipboard.Close() if has_data: # collect file names if any. _names=[x for x in file_names.GetText().split('\n') \ if os.path.isfile(x) ] if _names: self.OnAddFiles(_names) def CanPaste(self): """ Return True if can accept clipboard data, False otherwise """ if not wx.TheClipboard.Open(): return False r=wx.TheClipboard.IsSupported(wx.DataFormat(wx.DF_UNICODETEXT)) if r: file_names=wx.TextDataObject() r=wx.TheClipboard.GetData(file_names) if r: for _name in file_names.GetText().split('\n'): if not os.path.isfile(_name): r=False break wx.TheClipboard.Close() return r else: def OnPaste(self, _=None): if not wx.TheClipboard.Open(): # can't access the clipboard return if wx.TheClipboard.IsSupported(wx.DataFormat(wx.DF_FILENAME)): file_names=wx.FileDataObject() has_data=wx.TheClipboard.GetData(file_names) else: has_data=False wx.TheClipboard.Close() if has_data: self.OnAddFiles(file_names.GetFilenames()) def CanPaste(self): """ Return True if can accept clipboard data, False otherwise """ if not wx.TheClipboard.Open(): return False r=wx.TheClipboard.IsSupported(wx.DataFormat(wx.DF_FILENAME)) wx.TheClipboard.Close() return r def CanDelete(self): if len(self.GetSelectedItems()): return True return False def OnDelete(self,_): items=self.GetSelectedItems() for item in items: item.RemoveFromIndex() self.OnRefresh() def AddToIndex(self, file, origin, data, dict, timestamp=None, index=-1): # see if it is already in the origin if dict.has_key(self.database_key): for i in dict[self.database_key]: # see if the media is already in the database # if so update the existing entry, the display objects have references to the keys, if # we delete items the keys go bad and we require a refresh if dict[self.database_key][i].name==file and dict[self.database_key][i].origin==origin: # update the index if index>=0: dict[self.database_key][i].index=index # update the timestamp if timestamp!=None: dict[self.database_key][i].timestamp=timestamp # if there is no data dont update the dict # when indexes are updates the data is not provided if data!=None and data!='': dict[self.database_key][i].mediadata=data return else: dict[self.database_key]={} entry=MediaEntry() entry.name=file entry.origin=origin entry.mediadata=data entry.index=index entry.timestamp=timestamp dict[self.database_key][entry.id]=entry self.modified=True def _fixupdb(self, db): # fixup the database to accommodate the new schema adjustflg=False for _,_name,_type in db.getcolumns(self.database_key): if _name=='mediadata' and _type!='indirectBLOB': # old schema, need to adjust adjustflg=True break # adjust the table: replace the mediadata field if adjustflg: db._altertable(self.database_key, [('mediadata', 'indirectBLOB')], ['mediadata'], 1) def _gettempfile(self, item): # store the the media data in a temporary file and return the full file # path filename=os.path.join(tempfile.gettempdir(), item.name.encode(media_codec)) file(filename, 'wb').write(item.mediadata) return filename def _filename(self, item): # return the filename associated with a media file if hasattr(item, 'origin'): _origin=item.origin _name=item.name else: _origin=item.get('origin', '') _name=item.get('name', '') relative_name=os.path.join(_origin, _name.encode(media_codec)) return os.path.join(self.mainwindow.blob_path, relative_name) def _save_to_db(self, dict): db_rr={} for k,e in dict.items(): db_rr[k]=MediaDataObject(e) # the media data does not go into the actual database, we store it # in a regular file to minimise the database size, it # gets very big if the data is stored in it and starts to get slow. database.ensurerecordtype(db_rr, mediaobjectfactory) self.mainwindow.database.savemajordict(self.database_key, db_rr) def _load_from_db(self, result): dict=self.mainwindow.database.\ getmajordictvalues(self.database_key, mediaobjectfactory) r={} for k,e in dict.items(): ce=MediaEntry() ce.set_db_dict(e) if ce.mediadata is None: # try reading the data from the "old" way try: ce.mediadata=file(self._filename(ce), 'rb').read() except: # abandon data that has no file it probably means that # blobs directory is corrupted, maybe the user deleted # the file themselves pass r[ce.id]=ce result.update({ self.database_key: r}) return result def convert_to_dict(self, result, res=None): if res==None: res={} for rec in result[self.database_key]: fname=result[self.database_key][rec]['name'] # legacy format does not always contain origin if result[self.database_key][rec].has_key('origin'): origin=result[self.database_key][rec]['origin'] else: origin=self.default_origin data, timestamp=self.get_media_data(result, fname, origin) # None and '' are treated differently by viewer. data=='' means we could not read from # the phone but we still want to display, # None means we do not want to display like the builtin media if data=='': # no data read, see if we have this file in the dict already and use its data, # provides a workaround for phones that don't let us read the ringtones back # which we wrote in the first place for i in self._data[self.database_key]: if self._data[self.database_key][i].name==result[self.database_key][rec]['name'] \ and self._data[self.database_key][i].origin==result[self.database_key][rec]['origin'] \ and self._data[self.database_key][i].mediadata!=None: data=self._data[self.database_key][i].mediadata self.AddToIndex(result[self.database_key][rec]['name'], origin, data, res, timestamp, rec) return res def get_media_data(self, result, name, origin): data=None timestamp=None # unix time if result.has_key(self.media_key): if result[self.media_key].has_key("new_media_version"): if result[self.media_key].has_key(origin): if result[self.media_key][origin].has_key(name): data=result[self.media_key][origin][name]['data'] if result[self.media_key][origin][name].has_key('timestamp'): timestamp=result[self.media_key][origin][name]['timestamp'] pass # old style data with no origin info, means that the filenames have # to be unique across all the origins for the widget elif result[self.media_key].has_key(name): data=result[self.media_key][name] return data, timestamp def updateindex(self, index): self._data=self.convert_to_dict(index, self._data) # delete unused medias del_list=[] for i in self._data[self.database_key]: found=False for rec in index[self.database_key]: if self._data[self.database_key][i].name==index[self.database_key][rec]['name'] \ and self._data[self.database_key][i].origin==index[self.database_key][rec]['origin']: found=True break if not found: del_list.append(i) for i in del_list: del self._data[self.database_key][i] self.modified=True def populatefs(self, dict): res={} dict=self.convert_to_dict(dict) return self._populatefs(dict) def _populatefs(self, dict): self._save_to_db(dict.get(self.database_key, {})) return dict def populate(self, dict): if not dict.has_key('media_from_db'): # update the existing dict (the key are referenced from the display objects, doing a refresh causes # a long delay self._data=self.convert_to_dict(dict, self._data) # delete unused medias del_list=[] for i in self._data[self.database_key]: found=False for rec in dict[self.database_key]: if self._data[self.database_key][i].name==dict[self.database_key][rec]['name'] \ and self._data[self.database_key][i].origin==dict[self.database_key][rec]['origin']: found=True break if not found: del_list.append(i) for i in del_list: del self._data[self.database_key][i] self.modified=True self.OnRefresh() else: if dict[self.database_key]!=self._data[self.database_key]: self._data[self.database_key]=dict[self.database_key].copy() self.modified=True self.OnRefresh() def getfromfs(self, result): if self.mainwindow.database.doestableexist(self.database_key): result=self._load_from_db(result) else: # if there is no data in the database then try to read the legacy media res={} res=self.legacygetfromfs(res, self.media_key, self.database_key, self.CURRENTFILEVERSION) # if we got anything save into the database and delete the old index file if res.has_key(self.database_key) and len(res[self.database_key])!=0: result.update(self.convert_to_dict(res)) self._populatefs(result) self.delete_old_media() else: result=self._load_from_db(result) result['media_from_db']=1 return result def legacygetfromfs(self, result, key, indexkey, currentversion): dict={} index_found=False if os.path.isdir(self.thedir): for file in os.listdir(self.thedir): if file=='index.idx': d={} d['result']={} common.readversionedindexfile(os.path.join(self.thedir, file), d, self.versionupgrade, currentversion) result.update(d['result']) index_found=True elif file.lower() in self.skiplist: # ignore windows detritus continue elif key is not None: dict[file.decode(media_codec)]=open(os.path.join(self.thedir, file), "rb").read() if index_found: if key is not None: result[key]=dict if indexkey not in result: result[indexkey]={} return result def delete_old_media(self): # No longer do this since it messes up the virtual tables setup! pass def OnDropFiles(self, _, dummy, filenames): # There is a bug in that the most recently created tab # in the notebook that accepts filedrop receives these # files, not the most visible one. We find the currently # viewed tab in the notebook and send the files there if self.__dragging: # I'm the drag source, forget 'bout it ! return target=self # fallback t=self._tree.mw.GetCurrentActiveWidget() if isinstance(t, FileView): # changing target in dragndrop target=t target.OnAddFiles(filenames) def CanAdd(self): return True def OnAdd(self, _=None): with guihelper.WXDialogWrapper(wx.FileDialog(self, "Choose files", style=wx.OPEN|wx.MULTIPLE, wildcard=self.wildcard), True) as (dlg, retcode): if retcode==wx.ID_OK: self.OnAddFiles(dlg.GetPaths()) def CanRename(self): return len(self.GetSelectedItems())==1 # subclass needs to define this media_notification_type=None def OnRename(self, _=None): items=self.GetSelectedItems() if len(items)!=1: # either none or more than 1 items selected return old_name=items[0].name with guihelper.WXDialogWrapper(wx.TextEntryDialog(self, "Enter a new name:", "Item Rename", old_name), True) as (dlg, retcode): if retcode==wx.ID_OK: new_name=dlg.GetValue() if len(new_name) and new_name!=old_name: items[0].name=new_name items[0].RenameInIndex(new_name) pubsub.publish(pubsub.MEDIA_NAME_CHANGED, data={ pubsub.media_change_type: self.media_notification_type, pubsub.media_old_name: old_name, pubsub.media_new_name: new_name }) def OnAddFiles(self,_): raise NotImplementedError def OnReplace(self, _=None): items=self.GetSelectedItems() if len(items)!=1: # either none or more than 1 items selected return with guihelper.WXDialogWrapper(wx.FileDialog(self, "Choose file", style=wx.OPEN, wildcard=self.wildcard), True) as (dlg, retcode): if retcode==wx.ID_OK: self.ReplaceContents(items[0].name, items[0].origin, dlg.GetPath()) items[0].Refresh() def get_media_name_from_filename(self, filename, newext=''): path,filename=os.path.split(filename) # degrade to ascii degraded_fname=common.encode_with_degrade(filename, 'ascii', 'ignore') # decode with media codec in case it contains escape characters degraded_fname=degraded_fname.decode(media_codec) if not 'A' in self.filenamechars: degraded_fname=degraded_fname.lower() if not 'a' in self.filenamechars: degraded_fname=degraded_fname.upper() if len(newext): degraded_fname=stripext(degraded_fname) media_name="".join([x for x in degraded_fname if x in self.filenamechars]) media_name=media_name.replace(" "," ").replace(" ", " ") # remove double spaces media_name=media_name.replace(".m4a",".mp4") # change file extension of mpeg4 files if len(newext): media_name+='.'+newext if len(media_name)>self.maxlen: chop=len(media_name)-self.maxlen media_name=stripext(media_name)[:-chop].strip()+'.'+getext(media_name) return media_name def getdata(self,dict,want=NONE): items=None media_index={} media_data={} old_dict={} data_key=0 if want==self.SELECTED: items=self.GetSelectedItems() if len(items)==0: want=self.ALL if want==self.SELECTED: if items is not None: media_data={} i=0 for item in items: me=self._data[item.datakey][item.key] if me.mediadata!=None: media_data[data_key]={'name': me.name, 'data': me.mediadata, 'origin': me.origin} data_key+=1 # convert into the old format index_cnt=-1 for i in self._data[self.database_key]: me=self._data[self.database_key][i] # make sure the index is unique if me.index in media_index: while index_cnt in media_index: index_cnt-=1 index=index_cnt else: index=me.index media_index[index]={'name': me.name, 'origin': me.origin} if want==self.ALL and me.mediadata!=None: media_data[data_key]={'name': me.name, 'data': me.mediadata, 'origin': me.origin} data_key+=1 old_dict[self.database_key]=media_index dict.update(old_dict) dict[self.media_key]=media_data return dict def CompareItems(self, a, b): s1=a.name.lower() s2=b.name.lower() if s1 ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: calendarcontrol.py 4407 2007-09-25 20:39:48Z djpham $ """A calendar control that shows several weeks in one go The design is inspired by the Alan Cooper article U{http://www.cooper.com/articles/art_goal_directed_design.htm} about goal directed design. I also have to apologise for it not quite living up to that vision :-) It is fairly feature complete and supports all sorts of interaction, scrolling and customization of appearance""" import wx import wx.lib.rcsizer import wx.calendar import cStringIO import calendar import time import widgets import tipwin class FontscaleCache(dict): """A cache used internally to remember how much to shrink fonts by""" # cache results of what the scale factor is to fit a number of lines in a space is def get(self, y, attr, numentries): return dict.get(self, (y, id(attr), numentries), 1) def set(self, y, attr, numentries, scale): self[(y, id(attr), numentries)]=scale def uncache(self, *args): # clear out any cached attrs listed in args (eg when they are changed) keys=self.keys() l2=[id(x) for x in args] for y, idattr, numentries in keys: if idattr in l2: del self[ (y, idattr, numentries) ] thefontscalecache=FontscaleCache() class CalendarCellAttributes: """A class represnting appearance attributes for an individual day. You should subclass this if you wish to change the appearance from the defaults""" def __init__(self): # Set some defaults #self.cellbackground=wx.TheBrushList.FindOrCreateBrush(wx.Colour(230,255,255), wx.SOLID) self.cellbackground=wx.Brush(wx.Colour(197,255,255), wx.SOLID) self.labelfont=wx.Font(14, wx.SWISS, wx.NORMAL, wx.NORMAL ) self.labelforeground=wx.NamedColour("CORNFLOWER BLUE") self.labelalign=wx.ALIGN_RIGHT self.timefont=wx.Font(8, wx.SWISS, wx.NORMAL, wx.NORMAL ) self.timeforeground=wx.NamedColour("ORCHID") self.entryfont=wx.Font(9, wx.SWISS, wx.NORMAL, wx.NORMAL ) self.entryforeground=wx.NamedColour("BLACK") self.miltime=False self.initdone=True def __setattr__(self, k, v): self.__dict__[k]=v if hasattr(self, 'initdone'): thefontscalecache.uncache(self) def isrightaligned(self): """Is the number representing the day right aligned within the cell? @rtype: Bool @return: True is it should be shown right aligned""" return self.labelalign==wx.ALIGN_RIGHT def ismiltime(self): """Are times shown in military (aka 24 hour) time? @rtype: Bool @return: True is militart/24 hour format should be used""" return self.miltime def setforcellbackground(self, dc): """Set the cell background attributes Colour @type dc: wx.DC""" dc.SetBackground(self.cellbackground) def setforlabel(self, dc, fontscale=1): """Set the attributes for the day label Colour, font @type dc: wx.DC @param fontscale: You should multiply the font point size by this number @type fontscale: float """ dc.SetTextForeground(self.labelforeground) return self.setscaledfont(dc, self.labelfont, fontscale) def setfortime(self,dc, fontscale=1): """Set the attributes for the time of an event text Colour, font @type dc: wx.DC @param fontscale: You should multiply the font point size by this number @type fontscale: float """ dc.SetTextForeground(self.timeforeground) return self.setscaledfont(dc, self.timefont, fontscale) def setforentry(self, dc, fontscale=1): """Set the attributes for the label of an event text Colour, font @type dc: wx.DC @param fontscale: You should multiply the font point size by this number @type fontscale: float """ dc.SetTextForeground(self.entryforeground) return self.setscaledfont(dc, self.entryfont, fontscale) def setscaledfont(self, dc, font, fontscale): """Changes the in the device context to the supplied font suitably scaled @type dc: wx.DC @type font: wx.Font @type fontscale: float @return: Returns True if the scaling succeeded, and False if the font was already too small to scale smaller (the smallest size will still have been selected into the device context) @rtype: Bool""" if fontscale==1: dc.SetFont(font) return True ps=int(font.GetPointSize()*fontscale) if ps<2: ps=2 f=wx.TheFontList.FindOrCreateFont(int(ps), font.GetFamily(), font.GetStyle(), font.GetWeight()) dc.SetFont(f) if ps==2: return False return True # a hack - this used to be an instance, but wx 2.5 doesn't allow using brushes/pens etc until # app instance is created DefaultCalendarCellAttributes=None def GetCalendarCellAttributes(attr=None): if attr is not None: return attr global DefaultCalendarCellAttributes if DefaultCalendarCellAttributes is None: DefaultCalendarCellAttributes=CalendarCellAttributes() return DefaultCalendarCellAttributes class CalendarCell(wx.PyWindow): """A control that is used for each day in the calendar As the user scrolls around the calendar, each cell is updated with new dates rather than creating new CalendarCell objects. Internally it uses a backing buffer so that redraws are quick and flicker free.""" fontscalecache=FontscaleCache() def __init__(self, parent, id, attr=DefaultCalendarCellAttributes, style=wx.SIMPLE_BORDER): wx.PyWindow.__init__(self, parent, id, style=style|wx.WANTS_CHARS|wx.FULL_REPAINT_ON_RESIZE) self.attr=GetCalendarCellAttributes(attr) self.day=33 self.year=2033 self.month=3 self.buffer=None self.needsupdate=True self.entries=() self._tipwindow=None wx.EVT_PAINT(self, self.OnPaint) wx.EVT_SIZE(self, self.OnSize) wx.EVT_ENTER_WINDOW(self, self.OnEnterWindow) wx.EVT_LEAVE_WINDOW(self, self.OnLeaveWindow) self._timer=wx.Timer(self) wx.EVT_TIMER(self, self._timer.GetId(), self.OnTimer) self.OnSize(None) def DoGetBestSize(self): return (10,10) def setdate(self, year, month, day): """Set the date we are""" self.year=year self.month=month self.day=day self.needsupdate=True self.Refresh(False) def setattr(self, attr): """Sets what CalendarCellAtrributes we use for appearance @type attr: CalendarCellAtrributes""" self.attr=GetCalendarCellAttributes(attr) self.needsupdate=True self.Refresh(False) def setentries(self, entries): """Sets the entries we will display @type entries: list @param entries: A list of entries. Format is ( ( hour, minute, description), (hour, minute, decription) ... ). hour is in 24 hour """ self.entries=entries self.needsupdate=True self.Refresh(False) def getdate(self): """Returns what date we are currently displaying @rtype: tuple @return: tuple of (year, month, day)""" return (self.year, self.month, self.day) def OnSize(self, evt=None): """Callback for when we are resized""" self.width, self.height = self.GetClientSizeTuple() self.needsupdate=True if evt is not None: evt.Skip() def redraw(self): """Causes a forced redraw into our back buffer""" if self.buffer is None or \ self.buffer.GetWidth()!=self.width or \ self.buffer.GetHeight()!=self.height: if self.buffer is not None: del self.buffer self.buffer=wx.EmptyBitmap(self.width, self.height) mdc=wx.MemoryDC() mdc.SelectObject(self.buffer) self.attr.setforcellbackground(mdc) mdc.Clear() self.draw(mdc) mdc.SelectObject(wx.NullBitmap) del mdc def _tipstr(self): # return a summary of events for displaying in a tooltip _res=[] lastap="" for h,m,desc in self.entries: if h is None: _res.append('\t'+desc) else: _text, lastap=self._timestr(h, m, lastap) _res.append('%s\t%s'%(_text, desc)) return '\n'.join(_res) def OnPaint(self, _=None): """Callback for when we need to repaint""" if self.needsupdate: self.needsupdate=False self.redraw() dc=wx.PaintDC(self) dc.DrawBitmap(self.buffer, 0, 0, False) def _timestr(self, h, m, lastap=''): text="" if self.attr.ismiltime(): ap="" else: ap="a" if h>=12: ap="p" h%=12 if h==0: h=12 if ap==lastap: ap="" else: lastap=ap if h<10: text+=" " return (text+"%d:%02d%s" % (h,m,ap), lastap) def draw(self, dc): """Draw ourselves @type dc: wx.DC""" # do the label self.attr.setforlabel(dc) w,h=dc.GetTextExtent(`self.day`) x=1 if self.attr.isrightaligned(): x=self.width-(w+5) dc.DrawText(`self.day`, x, 0) if len(self.entries)==0: return entrystart=h # +5 dc.DestroyClippingRegion() dc.SetClippingRegion( 0, entrystart, self.width, self.height-entrystart) fontscale=thefontscalecache.get(self.height-entrystart, self.attr, len(self.entries)) iteration=0 # this loop scales the contents to fit the space available # we do it as a loop because even when we ask for a smaller font # after finding out that it was too big the first time, the # smaller font may not be as small as we requested while 1: y=entrystart iteration+=1 # now calculate how much space is needed for the time fields self.attr.setfortime(dc, fontscale) boundingspace=2 space,_=dc.GetTextExtent("i") timespace,timeheight=dc.GetTextExtent("mm:mm") if self.attr.ismiltime(): ampm=0 else: ampm,_=dc.GetTextExtent("a") r=self.attr.setforentry(dc, fontscale) if not r: iteration=-1 # font can't be made this small _,entryheight=dc.GetTextExtent("I") firstrowheight=max(timeheight, entryheight) # Now draw each item lastap="" for h,m,desc in self.entries: x=0 if h is not None: self.attr.setfortime(dc, fontscale) # bounding x+=boundingspace # we don't draw anything yet timey=y if timeheightself.height: dc.Clear() # how much too big were we? fontscale=fontscale*float(self.height-entrystart)/(y-entrystart) # print iteration, y, self.height, fontscale else: thefontscalecache.set(self.height-entrystart, self.attr, len(self.entries), fontscale) break def OnEnterWindow(self, _): if self.entries: self._timer.Start(1000, wx.TIMER_ONE_SHOT) def OnLeaveWindow(self, _): self._timer.Stop() def OnTimer(self, _): if not self.entries or wx.GetApp().critical.isSet(): return _rect=self.GetRect() _x,_y=self.GetParent().ClientToScreen(_rect[:2]) _rect.SetX(_x) _rect.SetY(_y) if self._tipwindow: self._tipwindow.Destroy() self._tipwindow=tipwin.TipWindow(self, self._tipstr(), 1024, _rect) class CalendarLabel(wx.PyWindow): """The label window on the left of the day cells that shows the month with rotated text It uses double buffering etc for a flicker free experience""" def __init__(self, parent, cells, id=-1): wx.PyWindow.__init__(self, parent, id, style=wx.FULL_REPAINT_ON_RESIZE) self.needsupdate=True self.buffer=None self.cells=cells wx.EVT_PAINT(self, self.OnPaint) wx.EVT_SIZE(self, self.OnSize) self.setfont(wx.Font(20, wx.SWISS, wx.NORMAL, wx.BOLD )) self.settextcolour(wx.NamedColour("BLACK")) self.OnSize(None) def DoGetBestSize(self): return (10,10) def OnSize(self, _=None): self.width, self.height = self.GetClientSizeTuple() self.needsupdate=True def OnPaint(self, _=None): if self.needsupdate: self.needsupdate=False self.redraw() dc=wx.PaintDC(self) dc.DrawBitmap(self.buffer, 0, 0, False) def setfont(self, font): self.font=font def settextcolour(self, colour): self.colour=colour def changenotify(self): self.needsupdate=True self.Refresh() def redraw(self): if self.buffer is None or \ self.buffer.GetWidth()!=self.width or \ self.buffer.GetHeight()!=self.height: if self.buffer is not None: del self.buffer self.buffer=wx.EmptyBitmap(self.width, self.height) mdc=wx.MemoryDC() mdc.SelectObject(self.buffer) mdc.SetBackground(wx.TheBrushList.FindOrCreateBrush(self.GetBackgroundColour(), wx.SOLID)) mdc.Clear() self.draw(mdc) mdc.SelectObject(wx.NullBitmap) del mdc def draw(self, dc): # find the lines for each cell row=0 while row=0 then it will be forced to appear in that row """ # check first cell y,m,d=self.rows[0][0].year, self.rows[0][0].month, self.rows[0][0].day if rowtoshow==-1: if yeary or (year>=y and month>m) or (year>=y and month>=m and day>d): rowtoshow=self.numrows-1 if rowtoshow!=-1: d=calendar.weekday(year, month, day) d=(d+1)%7 d=day-d # go back to begining of week d-=7*rowtoshow # then begining of screen y,m,d=normalizedate(year, month, d) for row in range(0,self.numrows): self.updaterow(row, *normalizedate(y, m, d+7*row)) self.label.changenotify() self.ensureallpainted() def isvisible(self, year, month, day): """Tests if the date is visible to the user @rtype: Bool """ y,m,d=self.rows[0][0].year, self.rows[0][0].month, self.rows[0][0].day if yeary or (year>=y and month>m) or (year>=y and month>=m and day>d): return False return True def RefreshEntry(self, year, month, day): """Causes that date's entries to be refreshed. Call this if you have changed the data for one day. Note that your OnGetEntries will only be called if the date is currently visible.""" if self.isvisible(year,month,day): # ::TODO:: find correct cell and only update that self.RefreshAllEntries() def RefreshAllEntries(self): """Call this if you have completely changed all your data. OnGetEntries will be called for each visible day.""" for row in self.rows: for cell in row: cell.setentries(self.OnGetEntries(cell.year, cell.month, cell.day)) def setselection(self, year, month, day): """Selects the specifed date if it is visible""" self.selecteddate=(year,month,day) d=calendar.weekday(year, month, day) d=(d+1)%7 for row in range(0, self.numrows): cell=self.rows[row][d] if cell.year==year and cell.month==month and cell.day==day: self._unselect() self.rows[row][d].setattr(self.attrselectedcell) self.selectedcell=(row,d) self.ensureallpainted() return def _unselect(self): if self.selectedcell!=(-1,-1): self.updatecell(*self.selectedcell) self.selectedcell=(-1,-1) def updatecell(self, row, column, y=-1, m=-1, d=-1): if y!=-1: self.rows[row][column].setdate(y,m,d) if self.rows[row][column].month%2: self.rows[row][column].setattr(self.attroddmonth) else: self.rows[row][column].setattr(self.attrevenmonth) if y!=-1 and row==0 and column==0: self.year.SetLabel(`y`) if y!=-1: self.rows[row][column].setentries(self.OnGetEntries(y,m,d)) def updaterow(self, row, y, m, d): daysinmonth=monthrange(y, m) for c in range(0,7): self.updatecell(row, c, y, m, d) if d==daysinmonth: d=1 m+=1 if m==13: m=1 y+=1 daysinmonth=monthrange(y, m) else: d+=1 # The following methods should be implemented in derived class. # Implementations here are to make it be a nice demo if not subclassed def OnGetEntries(self, year, month, day): """Return a list of entries for the specified y,m,d. B{You must implement this method in a derived class} The format is ( (hour,min,desc), (hour,min,desc)... ) Hour should be in 24 hour format. You should sort the entries. Note that Calendar does not cache any results so you will be asked for the same dates as the user scrolls around.""" return ( (1, 88, "Early morning"), (10,15, "Some explanatory text" ), (10,30, "It is %04d-%02d-%02d" % (year,month,day)), (11,11, "Look at me!"), (12,30, "More text here"), (15,30, "A very large amount of text that will never fit"), (20,30, "Evening drinks"), ) def OnEdit(self, year, month, day): """The user wishes to edit the entries for the specified date B{You should implement this method in a derived class} """ print "The user wants to edit %04d-%02d-%02d" % (year,month,day) class PopupCalendar(wx.Dialog): """The control that pops up when you click the year button""" def __init__(self, parent, calendar, style=wx.SIMPLE_BORDER): wx.Dialog.__init__(self, parent, -1, '', style=wx.STAY_ON_TOP|style) self.calendar=calendar self.control=wx.calendar.CalendarCtrl(self, 1, style=wx.calendar.CAL_SUNDAY_FIRST, pos=(0,0)) sz=self.control.GetBestSize() self.SetSize(sz) wx.calendar.EVT_CALENDAR(self, self.control.GetId(), self.OnCalSelected) def Popup(self, year, month, day, event): d=wx.DateTimeFromDMY(day, month-1, year) self.control.SetDate(d) btn=event.GetEventObject() pos=btn.ClientToScreen( (0,0) ) sz=btn.GetSize() self.Move( (pos[0], pos[1]+sz.height ) ) self.ShowModal() def OnCalSelected(self, evt): dt=evt.GetDate() self.calendar.setday(dt.GetYear(), dt.GetMonth()+1, dt.GetDay()) self.calendar.ensureallpainted() self.EndModal(1) _monthranges=[0, 31, -1, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] def monthrange(year, month): """How many days are in the specified month? @rtype: int""" if month==2: return calendar.monthrange(year, month)[1] return _monthranges[month] def normalizedate(year, month, day): """Return a valid date (and an excellent case for metric time) And example is the 32nd of January is first of Feb, or Jan -2 is December 29th of previous year. You should call this after doing arithmetic on dates (for example you can just subtract 14 from the current day and then call this to get the correct date for two weeks ago. @rtype: tuple @return: (year, month, day) """ while day<1 or month<1 or month>12 or (day>28 and day>monthrange(year, month)): if day<1: month-=1 if month<1: month=12 year-=1 num=monthrange(year, month) day=num+day continue if day>28 and day>monthrange(year, month): num=calendar.monthrange(year, month)[1] month+=1 if month>12: month=1 year+=1 day=day-num continue if month<1: year-=1 month=month+12 continue if month>12: year+=1 month-=12 continue assert False, "can't get here" return year, month, day # Up and down bitmap icons def getupbitmapData(): """Returns raw data for the up icon""" return \ '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00 \x00\x00\x00\x10\x08\x06\ \x00\x00\x00w\x00}Y\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\ \x00}IDATx\x9c\xbd\xd5K\x0e\xc0 \x08\x04P\xe0\x04\xdc\xff\x94\xdc\xa0\xdd6\ \xad\xca\xf0)n\\\xa83/1FVU\xca\x0e3\xbbT\x95\xd3\x01D$\x95\xf2\xe7<\nx\x97V\ \x10a\xc0\xae,\x8b\x08\x01\xbc\x92\x0c\x02\x06\xa0\xe1Q\x04\x04\x88\x86F\xf6\ \xbb\x80\xec\xdd\xa2\xe7\x8e\x80\xea\x13C\xceo\x01\xd5r4g\t\xe8*G\xf2>\x80\ \xeer/W\x90M\x7f"\xe4\xb48\x81\x90\xc9\xf2\x15\x82+\xdfq\xc7\xb8\x01;]o#\xdc\ D \x03\x00\x00\x00\x00IEND\xaeB`\x82' def getupbitmapBitmap(): """Returns a wx.Bitmap of the up icon""" return wx.BitmapFromImage(getupbitmapImage()) def getupbitmapImage(): """Returns wx.Image of the up icon""" stream = cStringIO.StringIO(getupbitmapData()) return wx.ImageFromStream(stream) def getdownbitmapData(): """Returns raw data for the down icon""" return \ '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00 \x00\x00\x00\x10\x08\x06\ \x00\x00\x00w\x00}Y\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\ \x00\x80IDATx\x9c\xc5\xd3\xd1\r\x80 \x0c\x04\xd0B\x1c\xe0\xf6\x9f\xb2\x1b\ \xe8\x97\t\x91R\xda\x02\x95/!r\xf7bj\x01@\x7f\xae\xeb}`\xe6;\xbb\x1c@\xa9\ \xed&\xbb\x9c\x88\xa8J\x87Y\xe5\x1d \x03\xf1\xcd\xef\x00\'\x11R\xae\x088\x81\ \x18\xe5\r\x01;\x11Z\x8e\n\xd8\x81\x98\xdd\x9f\x02V\x10\x96{&@\x04a}\xdf\x0c\ \xf0\x84z\xb0.\x80%\xdc\xfb\xa5\xdc\x00\xad$2+!\x80T\x16\x1d\xd40\xa0-]\xf9U\ \x1f\xf8\xca\t\xael-\x16\x86\x00\x00\x00\x00IEND\xaeB`\x82' def getdownbitmapBitmap(): """Returns a wx.Bitmap of the down icon""" return wx.BitmapFromImage(getdownbitmapImage()) def getdownbitmapImage(): """Returns wx.Image of the down icon""" stream = cStringIO.StringIO(getdownbitmapData()) return wx.ImageFromStream(stream) # If run by self, then is a nice demo if __name__=="__main__": class MainWindow(wx.Frame): def __init__(self, parent, id, title): wx.Frame.__init__(self, parent, id, title, size=(640,480), style=wx.DEFAULT_FRAME_STYLE) #self.control=CalendarCell(self, 1) # test just the cell #hbs=wx.BoxSizer(wx.VERTICAL) self.control=Calendar(self) #hbs.Add(self.control, 1, wx.EXPAND) #self.SetSizer(hbs) self.Show(True) app=wx.PySimpleApp() frame=MainWindow(None, -1, "Calendar Test") if False: # change to True to do profiling import profile profile.run("app.MainLoop()", "fooprof") else: app.MainLoop() bitpim-1.0.7+dfsg1/src/outlook_calendar.py0000644001616600161660000006364510676030322016652 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: outlook_calendar.py 4405 2007-09-24 21:49:06Z djpham $ "Deals with Outlook calendar import stuff" # System modules from __future__ import with_statement import datetime import pywintypes import sys import time # wxPython modules import wx import wx.calendar import wx.lib.mixins.listctrl as listmix # Others # My modules import bpcalendar import common import common_calendar import guihelper import guiwidgets import helpids import native.outlook # common convertor functions def to_bp_date(dict, v, oc): # convert a pyTime to (y, m, d, h, m) if not isinstance(v, pywintypes.TimeType): raise TypeError, 'illegal type' if v.year>common_calendar.no_end_date[0]: return common_calendar.no_end_date return (v.year, v.month, v.day, v.hour, v.minute) def bp_repeat_str(dict, v): if v is None: return '' elif v==OutlookCalendarImportData.olRecursDaily: return 'Daily' elif v==OutlookCalendarImportData.olRecursWeekly: return 'Weekly' elif v==OutlookCalendarImportData.olRecursMonthly or \ v==OutlookCalendarImportData.olRecursMonthNth: return 'Monthly' elif v==OutlookCalendarImportData.olRecursYearly: return 'Yearly' else: return '' def convert_categories(dict, v, oc): return [x.strip() for x in v.split(",") if len(x)] def set_recurrence(item, dict, oc): oc.update_display() if not dict['repeat']: # no reccurrence, ignore dict['repeat']=None return True # get the recurrence pattern and map it to BP Calendar return oc.process_repeat(item, dict) #------------------------------------------------------------------------------- class ImportDataSource(common_calendar.ImportDataSource): # how to define, and retrieve calendar import data source def browse(self, parent=None): # how to select a source self._source=native.outlook.pickfolder() def name(self): # return a string name for the source if self._source: return native.outlook.getfoldername(self._source) return '' def _get_id(self): if self._source: return native.outlook.getfolderid(self._source) return None def _set_id(self, id): self._source=None if id: self._source=native.outlook.getfolderfromid(id, False, 'calendar') id=property(fget=_get_id, fset=_set_id) #------------------------------------------------------------------------------- class OutlookCalendarImportData: _non_auto_sync_calendar_keys=[ # (Outlook field, BP Calendar field, convertor function) ('Subject', 'description', None), ('Location', 'location', None), ('Start', 'start', to_bp_date), ('End', 'end', to_bp_date), ('Categories', 'categories', convert_categories), ('IsRecurring', 'repeat', None), ('ReminderSet', 'alarm', None), ('ReminderMinutesBeforeStart', 'alarm_value', None), ('Importance', 'priority', None), ('Body', 'notes', None), ('AllDayEvent', 'allday', None) ] # the auto_sync calender fields do not support the "body" of the appointment # accessing this field causes an outlook warning to appear which prevents automation _auto_sync_calendar_keys=[ # (Outlook field, BP Calendar field, convertor function) ('Subject', 'description', None), ('Location', 'location', None), ('Start', 'start', to_bp_date), ('End', 'end', to_bp_date), ('Categories', 'categories', convert_categories), ('IsRecurring', 'repeat', None), ('ReminderSet', 'alarm', None), ('ReminderMinutesBeforeStart', 'alarm_value', None), ('Importance', 'priority', None), ('AllDayEvent', 'allday', None) ] _recurrence_keys=[ # (Outlook field, BP Calendar field, convertor function) ('NoEndDate', 'NoEndDate', None), ('PatternStartDate', 'PatternStartDate', to_bp_date), ('PatternEndDate', 'PatternEndDate', to_bp_date), ('Instance', 'Instance', None), ('DayOfWeekMask', 'DayOfWeekMask', None), ('Interval', 'Interval', None), ('Occurrences', 'Occurrences', None), ('RecurrenceType', 'RecurrenceType', None) ] _exception_keys=[ # (Outlook field, BP Calendar field, convertor function) ('OriginalDate', 'exception_date', to_bp_date), ('Deleted', 'deleted', None) ] _default_filter={ 'start': None, 'end': None, 'categories': None, 'rpt_events': False, 'no_alarm': False, 'ringtone': None, 'alarm_override':False, 'vibrate':False, 'alarm_value':0 } # Outlook constants olRecursDaily = native.outlook.outlook_com.constants.olRecursDaily olRecursMonthNth = native.outlook.outlook_com.constants.olRecursMonthNth olRecursMonthly = native.outlook.outlook_com.constants.olRecursMonthly olRecursWeekly = native.outlook.outlook_com.constants.olRecursWeekly olRecursYearNth = native.outlook.outlook_com.constants.olRecursYearNth olRecursYearly = native.outlook.outlook_com.constants.olRecursYearly olImportanceHigh = native.outlook.outlook_com.constants.olImportanceHigh olImportanceLow = native.outlook.outlook_com.constants.olImportanceLow olImportanceNormal = native.outlook.outlook_com.constants.olImportanceNormal def __init__(self, outlook=native.outlook, auto_sync_only=0): self._outlook=outlook self._data=[] self._error_list=[] self._single_data=[] self._folder=None self._filter=self._default_filter self._total_count=0 self._current_count=0 self._update_dlg=None self._exception_list=[] if auto_sync_only: self._calendar_keys=self._auto_sync_calendar_keys else: self._calendar_keys=self._non_auto_sync_calendar_keys def _accept(self, entry): s_date=entry['start'][:3] e_date=entry['end'][:3] if entry.get('repeat', False): # repeat event, must not fall outside the range if self._filter['start'] is not None and \ e_dateself._filter['end'][:3]: return False else: # non-repeat event, must fall within the range if self._filter['start'] is not None and \ e_dateself._filter['end'][:3]: return False # check the catefory c=self._filter.get('categories', None) if c is None or not len(c): # no categories specified => all catefories allowed. return True if len([x for x in entry['categories'] if x in c]): return True return False def _populate_entry(self, e, ce): # populate an calendar entry with outlook data ce.description=e.get('description', None) ce.location=e.get('location', None) v=e.get('priority', None) if v is not None: if v==self.olImportanceNormal: ce.priority=ce.priority_normal elif v==self.olImportanceLow: ce.priority=ce.priority_low elif v==self.olImportanceHigh: ce.priority=ce.priority_high if not self._filter.get('no_alarm', False) and \ not self._filter.get('alarm_override', False) and \ e.get('alarm', False): ce.alarm=e.get('alarm_value', 0) ce.ringtone=self._filter.get('ringtone', "") ce.vibrate=self._filter.get('vibrate', False) elif not self._filter.get('no_alarm', False) and \ self._filter.get('alarm_override', False): ce.alarm=self._filter.get('alarm_value', 0) ce.ringtone=self._filter.get('ringtone', "") ce.vibrate=self._filter.get('vibrate', False) ce.allday=e.get('allday', False) if ce.allday: if not e.get('repeat', False): ce.start=e['start'][:3]+(0,0) # for non-recurrent allday events, Outlook always set the # end date to 1-extra day. _dt=datetime.datetime(*e['end'])-datetime.timedelta(1) ce.end=(_dt.year, _dt.month, _dt.day, 23, 59) else: # unless it is a repeating all day event! # we can now handle allday events that span more than one day! ce.start=e['start'][:3]+(0,0) ce.end=e['end'][:3]+(23,59) else: ce.start=e['start'] ce.end=e['end'] ce.notes=e.get('notes', None) v=[] for k in e.get('categories', []): v.append({ 'category': k }) ce.categories=v # look at repeat events if not e.get('repeat', False): # not a repeat event, just return return rp=bpcalendar.RepeatEntry() rt=e['repeat_type'] r_interval=e.get('repeat_interval', 0) r_interval2=e.get('repeat_interval2', 1) r_dow=e.get('repeat_dow', 0) if rt==self.olRecursDaily: rp.repeat_type=rp.daily elif rt==self.olRecursWeekly: if r_interval: # weekly event rp.repeat_type=rp.weekly else: # mon-fri event rp.repeat_type=rp.daily elif rt==self.olRecursMonthly or rt==self.olRecursMonthNth: rp.repeat_type=rp.monthly else: rp.repeat_type=rp.yearly if rp.repeat_type==rp.daily: rp.interval=r_interval elif rp.repeat_type==rp.weekly or rp.repeat_type==rp.monthly: rp.interval=r_interval rp.interval2=r_interval2 rp.dow=r_dow # check for invalid monthly type if rp.repeat_type==rp.monthly and \ rp.dow in (rp.dow_weekday, rp.dow_weekend): rp.dow=0 # add the list of exceptions for k in e.get('exceptions', []): rp.add_suppressed(*k[:3]) ce.repeat=rp def _generate_repeat_events(self, e): # generate multiple single events from this repeat event ce=bpcalendar.CalendarEntry() self._populate_entry(e, ce) l=[] new_e=e.copy() new_e['repeat']=False for k in ('repeat_type', 'repeat_interval', 'repeat_dow'): if new_e.has_key(k): del new_e[k] s_date=datetime.datetime(*self._filter['start']) e_date=datetime.datetime(*self._filter['end']) one_day=datetime.timedelta(1) this_date=s_date while this_date<=e_date: date_l=(this_date.year, this_date.month, this_date.day) if ce.is_active(*date_l): new_e['start']=date_l+new_e['start'][3:] new_e['end']=date_l+new_e['end'][3:] l.append(new_e.copy()) this_date+=one_day return l def get(self): res={} single_rpt=self._filter.get('rpt_events', False) for k in self._data: if self._accept(k): if k.get('repeat', False) and single_rpt: d=self._generate_repeat_events(k) else: d=[k] for n in d: ce=bpcalendar.CalendarEntry() self._populate_entry(n, ce) res[ce.id]=ce return res def get_display_data(self): cnt=0 res={} single_rpt=self._filter.get('rpt_events', False) no_alarm=self._filter.get('no_alarm', False) for k in self._data: if self._accept(k): if k.get('repeat', False) and single_rpt: d=self._generate_repeat_events(k) else: d=[k.copy()] for n in d: if no_alarm: n['alarm']=False res[cnt]=n cnt+=1 return res def get_category_list(self): l=[] for e in self._data: l+=[x for x in e.get('categories', []) if x not in l] return l def pick_folder(self): return self._outlook.pickfolder() def set_folder(self, f): if f is None: # default folder self._folder=self._outlook.getfolderfromid('', True, 'calendar') else: self._folder=f def get_folder_id(self): return self._outlook.getfolderid(self._folder) def set_folder_id(self, id): if id is None or id=="": self.set_folder(None) else: self._folder=self._outlook.getfolderfromid(id) def set_filter(self, filter): self._filter=filter def get_filter(self): return self._filter def get_folder_name(self): if self._folder is None: return '' return self._outlook.getfoldername(self._folder) def read(self, folder=None, update_dlg=None): # folder from which to read if folder is not None: self._folder=folder if self._folder is None: self._folder=self._outlook.getfolderfromid('', True, 'calendar') self._update_dlg=update_dlg self._total_count=self._folder.Items.Count self._current_count=0 self._exception_list=[] self._data, self._error_list=self._outlook.getdata(self._folder, self._calendar_keys, {}, self, set_recurrence) # add in the exception list, .. or shoule we keep it separate ?? self._data+=self._exception_list def _set_repeat_dates(self, dict, r): dict['start']=r['PatternStartDate'][:3]+dict['start'][3:] dict['end']=r['PatternEndDate'][:3]+dict['end'][3:] dict['repeat_type']=r['RecurrenceType'] def _is_daily_or_weekly(self, dict, r): if r['RecurrenceType']==self.olRecursDaily or \ r['RecurrenceType']==self.olRecursWeekly: self._set_repeat_dates(dict, r) dict['repeat_interval']=r['Interval'] dict['repeat_dow']=r['DayOfWeekMask'] return True return False def _is_monthly(self, dict, r): if r['RecurrenceType']==self.olRecursMonthly or \ r['RecurrenceType']==self.olRecursMonthNth: self._set_repeat_dates(dict, r) dict['repeat_interval2']=r['Interval'] if r['RecurrenceType']==self.olRecursMonthNth: dict['repeat_interval']=r['Instance'] dict['repeat_dow']=r['DayOfWeekMask'] return True return False def _is_yearly(self, dict, r): if r['RecurrenceType']==self.olRecursYearly and \ r['Interval']==12: self._set_repeat_dates(dict, r) return True return False def _process_exceptions(self, dict, r): # check for and process exceptions for this event r_ex=r.Exceptions if not r_ex.Count: # no exception, bail return for i in range(1, r_ex.Count+1): ex=self._outlook.getitemdata(r_ex.Item(i), {}, self._exception_keys, self) dict.setdefault('exceptions', []).append(ex['exception_date']) if not ex['deleted']: # if this instance has been changed, then need to get it appt=self._outlook.getitemdata(r_ex.Item(i).AppointmentItem, {}, self._calendar_keys, self) # by definition, this instance cannot be a repeat event appt['repeat']=False appt['end']=appt['start'][:3]+appt['end'][3:] # and add it to the exception list self._exception_list.append(appt) def process_repeat(self, item, dict): # get the recurrence info that we need. rec_pat=item.GetRecurrencePattern() r=self._outlook.getitemdata(rec_pat, {}, self._recurrence_keys, self) if self._is_daily_or_weekly(dict, r) or \ self._is_monthly(dict, r) or \ self._is_yearly(dict, r): self._process_exceptions(dict, rec_pat) return True # invalide repeat type, turn this event into a regular event dict['repeat']=False dict['end']=dict['start'][:3]+dict['end'][3:] dict['notes']+=' [BITPIM: Unrecognized repeat event, repeat event discarded]' return True def update_display(self): # update the progress dialog if specified self._current_count += 1 if self._update_dlg is not None: self._update_dlg.Update(100*self._current_count/self._total_count) def has_errors(self): return bool(self._error_list) def get_error_list(self): # return a list of strings of failed items res=[] for d in self._error_list: # the format is 'YY-MM-DD hh:mm Description' if available _start=d.get('start', None) s='' if _start: if len(_start)>4: s='%02d-%02d-%02d %02d:%02d '%_start[:5] elif len(_start)>2: s='%02d-%02d-%02d '%_start[:3] _desc=d.get('description', None) if _desc: s+=_desc if not s: s='' res.append(s) return res #------------------------------------------------------------------------------- class OutlookImportCalDialog(common_calendar.PreviewDialog): _column_labels=[ ('description', 'Description', 400, None), ('start', 'Start', 150, common_calendar.bp_date_str), ('end', 'End', 150, common_calendar.bp_date_str), ('repeat_type', 'Repeat', 80, bp_repeat_str), ('alarm', 'Alarm', 80, common_calendar.bp_alarm_str), ('categories', 'Category', 150, common_calendar.category_str) ] _config_name='import/calendar/outlookdialog' _browse_label='Outlook Calendar Folder:' _progress_dlg_title='Outlook Calendar Import' _error_dlg_title='Outlook Calendar Import Error' _error_dlg_text='Outlook Calendar Items that failed to import:' _data_class=OutlookCalendarImportData _filter_dlg_class=common_calendar.FilterDialog def __init__(self, parent, id, title): self._oc=self._data_class(native.outlook) self._oc.set_folder(None) common_calendar.PreviewDialog.__init__(self, parent, id, title, self._column_labels, self._oc.get_display_data(), config_name=self._config_name) def getcontrols(self, main_bs): hbs=wx.BoxSizer(wx.HORIZONTAL) # label hbs.Add(wx.StaticText(self, -1, self._browse_label), 0, wx.ALL|wx.ALIGN_CENTRE, 2) # where the folder name goes self.folderctrl=wx.TextCtrl(self, -1, "", style=wx.TE_READONLY) self.folderctrl.SetValue(self._oc.get_folder_name()) hbs.Add(self.folderctrl, 1, wx.EXPAND|wx.ALL, 2) # browse button id_browse=wx.NewId() hbs.Add(wx.Button(self, id_browse, 'Browse ...'), 0, wx.EXPAND|wx.ALL, 2) main_bs.Add(hbs, 0, wx.EXPAND|wx.ALL, 5) main_bs.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5) wx.EVT_BUTTON(self, id_browse, self.OnBrowseFolder) def getpostcontrols(self, main_bs): main_bs.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5) hbs=wx.BoxSizer(wx.HORIZONTAL) id_import=wx.NewId() hbs.Add(wx.Button(self, id_import, 'Import'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) hbs.Add(wx.Button(self, wx.ID_OK, 'Replace All'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) hbs.Add(wx.Button(self, self.ID_ADD, 'Add'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) hbs.Add(wx.Button(self, self.ID_MERGE, 'Merge'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) hbs.Add(wx.Button(self, wx.ID_CANCEL, 'Cancel'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) id_filter=wx.NewId() hbs.Add(wx.Button(self, id_filter, 'Filter'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) hbs.Add(wx.Button(self, wx.ID_HELP, 'Help'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) main_bs.Add(hbs, 0, wx.ALIGN_CENTRE|wx.ALL, 5) wx.EVT_BUTTON(self, id_import, self.OnImport) wx.EVT_BUTTON(self, id_filter, self.OnFilter) wx.EVT_BUTTON(self, self.ID_ADD, self.OnEndModal) wx.EVT_BUTTON(self, self.ID_MERGE, self.OnEndModal) wx.EVT_BUTTON(self, wx.ID_HELP, lambda *_: wx.GetApp().displayhelpid(helpids.ID_DLG_CALENDAR_IMPORT)) @guihelper.BusyWrapper def OnImport(self, evt): with guihelper.WXDialogWrapper(wx.ProgressDialog(self._progress_dlg_title, 'Importing Outlook Data, please wait ...\n(Please also watch out for the Outlook Permission Request dialog)', parent=self)) as dlg: self._oc.read(None, dlg) self.populate(self._oc.get_display_data()) if self._oc.has_errors(): # display the list of failed items with guihelper.WXDialogWrapper(wx.SingleChoiceDialog(self, self._error_dlg_text, self._error_dlg_title, self._oc.get_error_list()), True): pass def OnBrowseFolder(self, evt): f=self._oc.pick_folder() if f is None: return # user hit cancel self._oc.set_folder(f) self.folderctrl.SetValue(self._oc.get_folder_name()) def OnFilter(self, evt): cat_list=self._oc.get_category_list() with guihelper.WXDialogWrapper(self._filter_dlg_class(self, -1, 'Filtering Parameters', cat_list), True) as (dlg, retcode): if retcode==wx.ID_OK: self._oc.set_filter(dlg.get()) self.populate(self._oc.get_display_data()) def OnEndModal(self, evt): self.EndModal(evt.GetId()) def get(self): return self._oc.get() def get_categories(self): return self._oc.get_category_list() #------------------------------------------------------------------------------- def ImportCal(folder, filters): _oc=OutlookCalendarImportData(native.outlook, auto_sync_only=1) _oc.set_folder_id(folder) _oc.set_filter(filters) _oc.read() res={ 'calendar':_oc.get() } return res #------------------------------------------------------------------------------- class OutlookAutoConfCalDialog(wx.Dialog): def __init__(self, parent, id, title, folder, filters, style=wx.CAPTION|wx.MAXIMIZE_BOX| \ wx.SYSTEM_MENU|wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER): self._oc=OutlookCalendarImportData(native.outlook, auto_sync_only=1) self._oc.set_folder_id(folder) self._oc.set_filter(filters) self.__read=False wx.Dialog.__init__(self, parent, id=id, title=title, style=style) main_bs=wx.BoxSizer(wx.VERTICAL) hbs=wx.BoxSizer(wx.HORIZONTAL) # label hbs.Add(wx.StaticText(self, -1, "Outlook Calendar Folder:"), 0, wx.ALL|wx.ALIGN_CENTRE, 2) # where the folder name goes self.folderctrl=wx.TextCtrl(self, -1, "", style=wx.TE_READONLY) self.folderctrl.SetValue(self._oc.get_folder_name()) hbs.Add(self.folderctrl, 1, wx.EXPAND|wx.ALL, 2) # browse button id_browse=wx.NewId() hbs.Add(wx.Button(self, id_browse, 'Browse ...'), 0, wx.EXPAND|wx.ALL, 2) main_bs.Add(hbs, 0, wx.EXPAND|wx.ALL, 5) main_bs.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5) wx.EVT_BUTTON(self, id_browse, self.OnBrowseFolder) hbs=wx.BoxSizer(wx.HORIZONTAL) hbs.Add(wx.Button(self, wx.ID_OK, 'OK'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) hbs.Add(wx.Button(self, wx.ID_CANCEL, 'Cancel'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) id_filter=wx.NewId() hbs.Add(wx.Button(self, id_filter, 'Filter'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) hbs.Add(wx.Button(self, wx.ID_HELP, 'Help'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) main_bs.Add(hbs, 0, wx.ALIGN_CENTRE|wx.ALL, 5) wx.EVT_BUTTON(self, id_filter, self.OnFilter) wx.EVT_BUTTON(self, wx.ID_HELP, lambda *_: wx.GetApp().displayhelpid(helpids.ID_DLG_CALENDAR_IMPORT)) self.SetSizer(main_bs) self.SetAutoLayout(True) main_bs.Fit(self) def OnBrowseFolder(self, evt): f=self._oc.pick_folder() if f is None: return # user hit cancel self._oc.set_folder(f) self.folderctrl.SetValue(self._oc.get_folder_name()) self.__read=False def OnFilter(self, evt): # read the calender to get the category list if not self.__read: self._oc.read() self.__read=True cat_list=self._oc.get_category_list() with guihelper.WXDialogWrapper(common_calendar.AutoSyncFilterDialog(self, -1, 'Filtering Parameters', cat_list)) as dlg: dlg.set(self._oc.get_filter()) if dlg.ShowModal()==wx.ID_OK: self._oc.set_filter(dlg.get()) def GetFolder(self): return self._oc.get_folder_id() def GetFilter(self): return self._oc.get_filter() bitpim-1.0.7+dfsg1/src/xyaptu.py0000644001616600161660000002544010113310406014634 0ustar amuamu#!/usr/bin/env python """ This code is taken from the ASPN Python cookbook. I have combined YAPTU and XYAPTU into a single file. The copyright, warranty and license remain with the original authors. Please consult these two URLs - U{http://aspn.activestate.com/ASPN/Python/Cookbook/Recipe/52305} - U{http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/162292} The following changes were made: - Removed very lengthy examples from the end (see the above URLs for them) - Added: setupxcopy() takes the template text and remembers it - Added: xcopywithdns() does the copy with supplied DNS (Document Name Space which is a dict of variables) and remembered template and returns the resulting string - Exception handling for statements was added (xyaptu only did it for expressions) - The default behaviour for exceptions now puts a dump of the exception into the generated output as an HTML style comment so you can view source to find out what has happened. My common library exception formatter (which also dumps local variables) is used. """ import sys import re import string import common ## "Yet Another Python Templating Utility, Version 1.2" # utility stuff to avoid tests in the mainline code class _nevermatch: "Polymorphic with a regex that never matches" def match(self, line): return None _never = _nevermatch() # one reusable instance of it suffices def identity(string, why): "A do-nothing-special-to-the-input, just-return-it function" return string def nohandle(*args): "A do-nothing handler that just re-raises the exception" raise # and now the real thing class copier: "Smart-copier (YAPTU) class" def copyblock(self, i=0, last=None): "Main copy method: process lines [i,last) of block" def repl(match, self=self): "return the eval of a found expression, for replacement" # uncomment for debug: print '!!! replacing',match.group(1) expr = self.preproc(match.group(1), 'eval') try: return common.strorunicode(eval(expr, self.globals, self.locals)) except: return common.strorunicode(self.handle(expr)) block = self.locals['_bl'] if last is None: last = len(block) while i Executing: {"+stat+"}" try: exec stat in self.globals,self.locals except: # not as good as it could be self.ouf.write(str(self.handle(stat,self.locals,self.globals))) i=j+1 else: # normal line, just copy with substitution self.ouf.write(self.regex.sub(repl,line)) i=i+1 def __init__(self, regex=_never, dict={}, restat=_never, restend=_never, recont=_never, preproc=identity, handle=nohandle, ouf=sys.stdout): "Initialize self's attributes" self.regex = regex self.globals = dict self.locals = { '_cb':self.copyblock } self.restat = restat self.restend = restend self.recont = recont self.preproc = preproc self.handle = handle self.ouf = ouf def copy(self, block=None, inf=sys.stdin): "Entry point: copy-with-processing a file, or a block of lines" if block is None: block = inf.readlines() self.locals['_bl'] = block self.copyblock() ##"XYAPTU: Lightweight XML/HTML Document Template Engine for Python" ##__version__ = '1.0.0' ##__author__= [ ## 'Alex Martelli (aleax@aleax.it)', ## 'Mario Ruggier (mario@ruggier.org)' ##] ##__copyright__ = '(c) Python Style Copyright. All Rights Reserved. No Warranty.' ##__dependencies__ = ['YAPTU 1.2, http://aspn.activestate.com/ASPN/Python/Cookbook/Recipe/52305'] ##__history__= { ## '1.0.0' : '2002/11/13: First Released Version', ##} class xcopier(copier): ' xcopier class, inherits from yaptu.copier ' def __init__(self, dns, rExpr=None, rOpen=None, rClose=None, rClause=None, ouf=sys.stdout, dbg=0, dbgOuf=sys.stdout): ' set default regular expressions required by yaptu.copier ' # Default regexps for yaptu delimeters (what xyaptu tags are first converted to) # These must be in sync with what is output in self._x2y_translate _reExpression = re.compile('_:@([^:@]+)@:_') _reOpen = re.compile('\++yaptu ') _reClose = re.compile('--yaptu') _reClause = re.compile('==yaptu ') rExpr = rExpr or _reExpression rOpen = rOpen or _reOpen rClose = rClose or _reClose rClause = rClause or _reClause # Debugging self.dbg = dbg self.dbgOuf = dbgOuf _preproc = self._preProcess if dbg: _preproc = self._preProcessDbg # Call super init copier.__init__(self, rExpr, dns, rOpen, rClose, rClause, preproc=_preproc, handle=self._handleBadExps, ouf=ouf) def xcopy(self, inputText): ''' Converts the value of the input stream (or contents of input filename) from xyaptu format to yaptu format, and invokes yaptu.copy ''' # Translate (xyaptu) input to (yaptu) input, and call yaptu.copy() from StringIO import StringIO yinf = StringIO(self._x2y_translate(inputText)) self.copy(inf=yinf) yinf.close() def setupxcopy(self, inputText): from StringIO import StringIO yinf = StringIO(self._x2y_translate(inputText)) # we have to build the list since you can only run # readline/s once on a file self.remembered=[line for line in yinf.readlines()] def xcopywithdns(self, dns): from StringIO import StringIO self.globals=dns out=StringIO() self.ouf=out self.copy(self.remembered) return out.getvalue() def _x2y_translate(self, xStr): ' Converts xyaptu markup in input string to yaptu delimeters ' # Define regexps to match xml elements on. # The variations (all except for py-expr, py-close) we look for are: # | # ignored text | # {python code} # ${py-expr} | $py-expr | reExpr = re.compile(r''' \$\{([^}]+)\} | # ${py-expr} \$([_\w]+) | # $py-expr | [^<]* | ([^<]*) ''', re.VERBOSE) # reLine = re.compile(r''' | [^<]* | ([^<]*) ''', re.VERBOSE) # reOpen = re.compile(r''' | [^<]* | ([^<]*) ''', re.VERBOSE) # reClause = re.compile(r''' | [^<]* | ([^<]*) ''', re.VERBOSE) # reClose = re.compile(r''' | .* ''', re.VERBOSE) # Call-back functions for re substitutions # These must be in sync with what is expected in self.__init__ def rexpr(match,self=self): return '_:@%s@:_' % match.group(match.lastindex) def rline(match,self=self): return '\n++yaptu %s #\n--yaptu \n' % match.group(match.lastindex) def ropen(match,self=self): return '\n++yaptu %s \n' % match.group(match.lastindex) def rclause(match,self=self): return '\n==yaptu %s \n' % match.group(match.lastindex) def rclose(match,self=self): return '\n--yaptu \n' # Substitutions xStr = reExpr.sub(rexpr, xStr) xStr = reLine.sub(rline, xStr) xStr = reOpen.sub(ropen, xStr) xStr = reClause.sub(rclause, xStr) xStr = reClose.sub(rclose, xStr) # When in debug mode, keep a copy of intermediate template format if self.dbg: _sep = '====================\n' self.dbgOuf.write('%sIntermediate YAPTU format:\n%s\n%s' % (_sep, xStr, _sep)) return xStr # Handle expressions that do not evaluate def _handleBadExps(self, s, locals=None, globals=None): ' Handle expressions that do not evaluate ' if self.dbg: self.dbgOuf.write('!!! ERROR: failed to evaluate expression: %s \n' % s) res="" print common.formatexception() return res+('***! %s !***' % s) # Preprocess code def _preProcess(self, s, why): ' Preprocess embedded python statements and expressions ' return self._xmlDecode(s) def _preProcessDbg(self, s, why): ' Preprocess embedded python statements and expressions ' self.dbgOuf.write('!!! DBG: %s %s \n' % (s, why)) return self._xmlDecode(s) # Decode utility for XML/HTML special characters _xmlCodes = [ ['"', '"'], ['>', '>'], ['<', '<'], ['&', '&'], ] def _xmlDecode(self, s): ' Returns the ASCII decoded version of the given HTML string. ' codes = self._xmlCodes for code in codes: s = string.replace(s, code[1], code[0]) return s bitpim-1.0.7+dfsg1/src/phonebookentryeditor.py0000644001616600161660000023300211320262071017557 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: phonebookentryeditor.py 4775 2010-01-04 03:44:57Z djpham $ from __future__ import with_statement import wx import fixedscrolledpanel import pubsub import bphtml import database import nameparser import wallpaper import guihelper import field_color import helpids """The dialog for editing a phonebook entry""" # global ringone & wallpaper list _ringtone_list=None _wallpaper_list=None # NavToolBar-------------------------------------------------------------------- class NavToolBar(wx.ToolBar): _id_up=wx.NewId() _id_down=wx.NewId() _id_del=wx.NewId() def __init__(self, parent, horizontal=True): self._parent=parent self._grandpa=parent.GetParent() _style=wx.TB_FLAT if horizontal: _style|=wx.TB_HORIZONTAL else: _style|=wx.TB_VERTICAL super(NavToolBar, self).__init__(parent, -1, style=_style) self.SetToolBitmapSize(wx.Size(16, 16)) sz=self.GetToolBitmapSize() self.AddLabelTool(NavToolBar._id_up, "Up", wx.ArtProvider.GetBitmap(guihelper.ART_ARROW_UP, wx.ART_TOOLBAR, sz), shortHelp="Move field up") self.AddLabelTool(NavToolBar._id_down, "Down", wx.ArtProvider.GetBitmap(guihelper.ART_ARROW_DOWN, wx.ART_TOOLBAR, sz), shortHelp="Move field down") self.AddLabelTool(NavToolBar._id_del, "Delete", wx.ArtProvider.GetBitmap(guihelper.ART_DEL_FIELD, wx.ART_TOOLBAR, sz), shortHelp="Delete field") if hasattr(self._grandpa, 'MoveField'): wx.EVT_TOOL(self, NavToolBar._id_up, self.OnMoveUp) wx.EVT_TOOL(self, NavToolBar._id_down, self.OnMoveDown) if hasattr(self._grandpa, 'DeleteField'): wx.EVT_TOOL(self, NavToolBar._id_del, self.OnDelete) self.Realize() def OnMoveUp(self, _): self._grandpa.MoveField(self._parent, -1) def OnMoveDown(self, _): self._grandpa.MoveField(self._parent, +1) def OnDelete(self, _): self._grandpa.DeleteField(self._parent) # DirtyUIBase------------------------------------------------------------------- myEVT_DIRTY_UI=wx.NewEventType() EVT_DIRTY_UI=wx.PyEventBinder(myEVT_DIRTY_UI, 1) class DirtyUIBase(wx.Panel): """ Base class to add the capability to generate a DirtyUI event""" def __init__(self, parent): wx.Panel.__init__(self, parent, -1) self.dirty=self.ignore_dirty=False def OnDirtyUI(self, evt): if self.dirty or self.ignore_dirty: return self.dirty=True self.GetEventHandler().ProcessEvent(\ wx.PyCommandEvent(myEVT_DIRTY_UI, self.GetId())) def Clean(self): self.dirty=False self.ignore_dirty=False def Ignore(self, ignore=True): self.ignore_dirty=ignore def Enable(self, enable=True): super(DirtyUIBase, self).Enable(enable) self.Refresh() # My ListBox class-------------------------------------------------------------- class ListBox(wx.ListBox): """BitPim ListBox class that caches the selection string necessary for this implementation. """ def __init__(self, *args, **kwargs): super(ListBox, self).__init__(*args, **kwargs) self._selstr='' wx.EVT_LISTBOX(self, self.GetId(), self._OnSelected) def _OnSelected(self, evt): self._selstr=evt.GetString() evt.Skip() def GetStringSelection(self): return self._selstr def SetStringSelection(self, selection): try: super(ListBox, self).SetStringSelection(selection) self._selstr=selection except: self._selstr='' def SetSelection(self, idx): try: super(ListBox, self).SetSelection(idx) self._selstr=self.GetString(idx) except: self._selstr='' # RingtoneEditor---------------------------------------------------------------- class MediaPreviewWindow(bphtml.HTMLWindow): """A subclass of BitPim HTMLWindow that launches a media item when clicked""" def OnLinkClicked(self, evt): pubsub.publish(pubsub.REQUEST_MEDIA_OPEN, (evt.GetHref(), None)) class RingtoneEditor(DirtyUIBase): "Edit a ringtone" # this is almost an exact clone of the wallpaper editor unnamed="Select:" unknownselprefix=": " choices=["call", "message", "calendar"] ID_LIST=wx.NewId() _bordersize=3 def __init__(self, parent, _, has_type=True, navtoolbar=False): DirtyUIBase.__init__(self, parent) _box=field_color.build_color_field(self, wx.StaticBox, (self, -1, "Ringtone"), 'ringtone') hs=wx.StaticBoxSizer(_box, wx.HORIZONTAL) self.static_box=_box vs=wx.BoxSizer(wx.VERTICAL) self.preview=MediaPreviewWindow(self, -1) self.preview.SetBorders(self._bordersize) vs.Add(self.preview, 1, wx.EXPAND|wx.ALL, 5) self.type=wx.ComboBox(self, -1, "call", choices=self.choices, style=wx.CB_READONLY) self.type.SetSelection(0) vs.Add(self.type, 0, wx.ALIGN_CENTRE|wx.ALL, 5) # Hide the 'type' combo box if not requested if not has_type: vs.Hide(1) hs.Add(vs, 1, wx.EXPAND|wx.ALL, 5) self.ringtone=ListBox(self, self.ID_LIST, choices=[self.unnamed], size=(-1,200)) hs.Add(self.ringtone, 1, wx.EXPAND|wx.ALL, 5) if navtoolbar: hs.Add(NavToolBar(self, False), 0, wx.EXPAND|wx.BOTTOM, 5) self.SetSizer(hs) hs.Fit(self) pubsub.subscribe(self.OnRingtoneUpdates, pubsub.ALL_RINGTONES) wx.CallAfter(pubsub.publish, pubsub.REQUEST_RINGTONES) # make the call once we are onscreen pubsub.subscribe(self.OnPreviewUpdate, pubsub.RESPONSE_MEDIA_INFO) wx.EVT_LISTBOX(self, self.ID_LIST, self.OnLBClicked) wx.EVT_LISTBOX_DCLICK(self, self.ID_LIST, self.OnLBClicked) def __del__(self): pubsub.unsubscribe(self.OnRingtoneUpdates) pubsub.unsubscribe(self.OnPreviewUpdate) super(RingtoneEditor, self).__del__() def OnRingtoneUpdates(self, msg): # wxPython/wxWidget bug: ListBox.Clear emits a wx.EVT_LISTBOX event # it shouldn't self.Ignore() tones=msg.data[:] cur=self._get() self.ringtone.Clear() self.ringtone.Append(self.unnamed) for p in tones: self.ringtone.Append(p) self._set(cur) self.Clean() def OnLBClicked(self, evt=None): if self.ringtone.GetSelection()==wx.NOT_FOUND: return self.OnDirtyUI(evt) self._updaterequested=False v=self._get().get('ringtone', None) self.SetPreview(v) _preview_html='

%s' def OnPreviewUpdate(self, msg): # Media tab replies with some description about the selected media item if msg.data['client'] is self: # this one's for moi! if msg.data['canopen']: _s='%s
'%(msg.data['desc'][0], msg.data['desc'][0]) +\ '
'.join(msg.data['desc'][1:]) else: _s='
'.join(msg.data['desc']) self.preview.SetPage(self._preview_html%_s) def SetPreview(self, name): if name is None or name==self.unnamed: self.preview.SetPage('') else: self.preview.SetPage(self._preview_html%name) pubsub.publish(pubsub.REQUEST_MEDIA_INFO, (self, name, None)) def _set(self, data): if data is None: wp=self.unnamed type='call' else: wp=data.get("ringtone", self.unnamed) type=data.get("use", "call") self.SetPreview(wp) if type=='calendar': self.type.SetSelection(2) elif type=="message": self.type.SetSelection(1) else: self.type.SetSelection(0) # zero len? if len(wp)==0: self.ringtone.SetSelection(0) return # try using straight forward name try: self.ringtone.SetStringSelection(wp) return except: pass # ok, with unknownselprefix try: self.ringtone.SetStringSelection(self.unknownselprefix+wp) return except: pass # ok, just add it self.ringtone.InsertItems([self.unknownselprefix+wp], 1) self.ringtone.SetStringSelection(self.unknownselprefix+wp) def Set(self, data): self.Ignore(True) self._set(data) self.Clean() def _get(self): res={} rt=self.ringtone.GetStringSelection() if rt==self.unnamed: return res if rt.startswith(self.unknownselprefix): rt=rt[len(self.unknownselprefix):] if len(rt): res['ringtone']=rt res['use']=self.type.GetStringSelection() return res def Get(self): self.Clean() return self._get() # WallpaperEditor--------------------------------------------------------------- class WallpaperEditor(DirtyUIBase): unnamed="Select:" unknownselprefix=": " choices=["call", "message", "calendar"] ID_LIST=wx.NewId() _bordersize=3 # border inside HTML widget def __init__(self, parent, _, has_type=True, navtoolbar=False): DirtyUIBase.__init__(self, parent) _box=field_color.build_color_field(self, wx.StaticBox, (self, -1, "Wallpaper"), 'wallpaper') #if it is definitely specified in field color data that you don't want the selection, then don't show it #type_needed=field_color.color(self, 'wallpaper_type', None) #if type_needed==wx.RED: # has_type=False hs=wx.StaticBoxSizer(_box, wx.HORIZONTAL) self.static_box=_box vs=wx.BoxSizer(wx.VERTICAL) self.preview=wallpaper.WallpaperPreview(self) self.type=wx.ComboBox(self, -1, "call", choices=self.choices, style=wx.CB_READONLY) self.type.SetSelection(0) vs.Add(self.preview, 1, wx.EXPAND|wx.ALL, 5) vs.Add(self.type, 0, wx.ALIGN_CENTRE|wx.ALL, 5) # Hide the 'type' combo box if not requested if not has_type: vs.Hide(1) hs.Add(vs, 1, wx.EXPAND|wx.ALL, 5) self.wallpaper=ListBox(self, self.ID_LIST, choices=[self.unnamed], size=(-1,200), style=wx.LB_SINGLE) hs.Add(self.wallpaper, 1, wx.EXPAND|wx.ALL, 5) if navtoolbar: hs.Add(NavToolBar(self, False), 0, wx.EXPAND|wx.BOTTOM, 5) self.SetSizer(hs) hs.Fit(self) pubsub.subscribe(self.OnWallpaperUpdates, pubsub.ALL_WALLPAPERS) wx.CallAfter(pubsub.publish, pubsub.REQUEST_WALLPAPERS) # make the call once we are onscreen wx.EVT_LISTBOX(self, self.ID_LIST, self.OnLBClicked) wx.EVT_LISTBOX_DCLICK(self, self.ID_LIST, self.OnLBClicked) def __del__(self): pubsub.unsubscribe(self.OnWallpaperUpdates) super(WallpaperEditor, self).__del__() def OnWallpaperUpdates(self, msg): "Receives pubsub message with wallpaper list" # wxPython/wxWidget bug: ListBox.Clear emits a wx.EVT_LISTBOX event # it shouldn't self.Ignore() papers=msg.data[:] cur=self._get() self.wallpaper.Clear() self.wallpaper.Append(self.unnamed) for p in papers: self.wallpaper.Append(p) self._set(cur) self.Clean() def OnLBClicked(self, evt=None): if self.wallpaper.GetSelection()==wx.NOT_FOUND: return self.OnDirtyUI(evt) v=self.Get().get('wallpaper', None) self.SetPreview(v) def SetPreview(self, name): if name is None or name is self.unnamed: self.preview.SetImage(None) else: self.preview.SetImage(name) def _set(self, data): if data is None: wp=self.unnamed type='call' else: wp=data.get("wallpaper", self.unnamed) type=data.get("use", "call") self.SetPreview(wp) if type=="message": self.type.SetSelection(1) elif type=='calendar': self.type.SetSelection(2) else: self.type.SetSelection(0) if len(wp)==0: self.wallpaper.SetSelection(0) return # try using straight forward name try: self.wallpaper.SetStringSelection(wp) return except: pass # ok, with unknownselprefix try: self.wallpaper.SetStringSelection(self.unknownselprefix+wp) return except: pass # ok, just add it self.wallpaper.InsertItems([self.unknownselprefix+wp], 1) self.wallpaper.SetStringSelection(self.unknownselprefix+wp) def Set(self, data): self.Ignore() self._set(data) self.Clean() def _get(self): res={} wp=self.wallpaper.GetStringSelection() if wp==self.unnamed: return res if wp.startswith(self.unknownselprefix): wp=wp[len(self.unknownselprefix):] if len(wp): res['wallpaper']=wp res['use']=self.type.GetStringSelection() return res def Get(self): self.Clean() return self._get() # CategoryManager--------------------------------------------------------------- class CategoryManager(wx.Dialog): ID_LIST=wx.NewId() def __init__(self, parent, title="Manage Categories"): wx.Dialog.__init__(self, parent, -1, title, style=wx.CAPTION|wx.SYSTEM_MENU|wx.DEFAULT_DIALOG_STYLE| wx.RESIZE_BORDER) vs=wx.BoxSizer(wx.VERTICAL) hs=wx.BoxSizer(wx.HORIZONTAL) self.delbut=wx.Button(self, wx.NewId(), "Delete") self.addbut=wx.Button(self, wx.NewId(), "Add") self.add=wx.TextCtrl(self, -1) self.preview=wallpaper.WallpaperPreview(self) hs.Add(self.delbut,0, wx.EXPAND|wx.ALL, 5) hs.Add(self.addbut,0, wx.EXPAND|wx.ALL, 5) hs.Add(self.add, 1, wx.EXPAND|wx.ALL, 5) vs.Add(hs, 0, wx.EXPAND|wx.ALL, 5) self.thelistb=wx.ListBox(self, self.ID_LIST, size=(100, 250), style=wx.LB_SORT) self.addlistb=wx.ListBox(self, -1, style=wx.LB_SORT) self.dellistb=wx.ListBox(self, -1, style=wx.LB_SORT) hs=wx.BoxSizer(wx.HORIZONTAL) vs2=wx.BoxSizer(wx.VERTICAL) vs2.Add(wx.StaticText(self, -1, " Wallpaper"), 0, wx.ALL, 2) vs2.Add(self.preview, 1, wx.EXPAND|wx.ALL, 0) self.editbut=wx.Button(self, wx.NewId(), "Edit Wallpaper") vs2.Add(self.editbut, 0, wx.EXPAND|wx.ALL, 5) hs.Add(vs2, 1, wx.ALL|wx.EXPAND, 5) vs2=wx.BoxSizer(wx.VERTICAL) vs2.Add(wx.StaticText(self, -1, " List"), 0, wx.ALL, 2) vs2.Add(self.thelistb, 1, wx.ALL|wx.EXPAND, 5) hs.Add(vs2, 1, wx.ALL|wx.EXPAND, 5) vs2=wx.BoxSizer(wx.VERTICAL) vs2.Add(wx.StaticText(self, -1, " Added"), 0, wx.ALL, 2) vs2.Add(self.addlistb, 1, wx.ALL|wx.EXPAND, 5) hs.Add(vs2, 1, wx.ALL|wx.EXPAND, 5) vs2=wx.BoxSizer(wx.VERTICAL) vs2.Add(wx.StaticText(self, -1, " Deleted"), 0, wx.ALL, 2) vs2.Add(self.dellistb, 1, wx.ALL|wx.EXPAND, 5) hs.Add(vs2, 1, wx.ALL|wx.EXPAND, 5) vs.Add(hs, 1, wx.EXPAND|wx.ALL, 5) vs.Add(wx.StaticLine(self, -1, style=wx.LI_HORIZONTAL), 0, wx.EXPAND|wx.ALL, 5) vs.Add(self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.HELP), 0, wx.ALIGN_CENTRE|wx.ALL, 5) self.SetSizer(vs) vs.Fit(self) self.curlist=None self.dellist=[] self.addlist=[] self.wps=None self.groups=None pubsub.subscribe(self.OnUpdateCategories, pubsub.ALL_CATEGORIES) pubsub.publish(pubsub.REQUEST_CATEGORIES) pubsub.subscribe(self.OnWallpaperUpdates, pubsub.ALL_WALLPAPERS) pubsub.publish(pubsub.REQUEST_WALLPAPERS) pubsub.subscribe(self.OnUpdateCategoryWallpapers, pubsub.GROUP_WALLPAPERS) pubsub.publish(pubsub.REQUEST_GROUP_WALLPAPERS) wx.EVT_BUTTON(self, self.editbut.GetId(), self.OnEdit) wx.EVT_BUTTON(self, self.addbut.GetId(), self.OnAdd) wx.EVT_BUTTON(self, self.delbut.GetId(), self.OnDelete) wx.EVT_BUTTON(self, wx.ID_OK, self.OnOk) wx.EVT_BUTTON(self, wx.ID_CANCEL, self.OnCancel) wx.EVT_BUTTON(self, wx.ID_HELP, lambda _: wx.GetApp().displayhelpid(helpids.ID_CATEGORY_MANAGER)) wx.EVT_LISTBOX(self, self.ID_LIST, self.OnLBClicked) wx.EVT_LISTBOX_DCLICK(self, self.ID_LIST, self.OnLBClicked) def __del__(self): pubsub.unsubscribe(self.OnUpdateCategories) pubsub.unsubscribe(self.OnWallpaperUpdates) pubsub.unsubscribe(self.OnUpdateCategoryWallpapers) super(CategoryManager, self).__del__() def OnUpdateCategoryWallpapers(self, msg): groups_wp=msg.data[:] if self.groups is None: self.groups = groups_wp def OnWallpaperUpdates(self, msg): "Receives pubsub message with wallpaper list" papers=msg.data[:] if self.wps is None: self.wps = papers def OnUpdateCategories(self, msg): cats=msg.data[:] if self.curlist is None: self.curlist=cats # add in any new entries that may have appeared for i in cats: if i not in self.curlist and i not in self.dellist: self.curlist.append(i) self.addlist.append(i) self.curlist.sort() self.addlist.sort() self.UpdateLBs() def OnLBClicked(self, evt=None): if self.thelistb.GetSelection()==wx.NOT_FOUND: return groupname=self.curlist[self.thelistb.GetSelection()] try: wallpaper=self.returnWP(groupname) except: wallpaper=None if wallpaper==None: self.SetPreview(None) else: try: v_index=self.wps.index(wallpaper) v=self.wps[v_index] self.SetPreview(v) except: self.SetPreview(None) def SetPreview(self, name): if name is None: self.preview.SetImage(None) else: self.preview.SetImage(name) def UpdateLBs(self): for lb,l in (self.thelistb, self.curlist), (self.addlistb, self.addlist), (self.dellistb, self.dellist): lb.Clear() for i in l: lb.Append(i) def returnWP(self, groupname): try: gwp=self.groups[:] for entry in gwp: l=entry.split(":", 1) name=l[0] wp=l[1] if name==groupname: if wp==0: return None else: return wp return None except: return None def setWP(self, groupname, wallpaper): gwp=self.groups[:] new_entry=str(groupname)+":"+str(wallpaper) entry_to_remove=None for entry in gwp: l=entry.split(":", 1) name=l[0] wp=l[1] if name==groupname: entry_to_remove=entry break if entry_to_remove is not None: gwp.remove(entry_to_remove) gwp.append(new_entry) self.groups=gwp def OnOk(self, _): pubsub.publish(pubsub.SET_CATEGORIES, self.curlist) pubsub.publish(pubsub.SET_GROUP_WALLPAPERS, self.groups) self.Show(False) self.Destroy() def OnCancel(self, _): self.Show(False) self.Destroy() def OnEdit(self, _): datakey="group_wallpapers" title="Edit Category Wallpaper" populate_data=[] _key=self.thelistb.GetSelection() if _key > -1: _groupname=self.curlist[_key] wp_name=self.returnWP(_groupname) if wp_name is None: populate_data.append({}) else: populate_data.append({"wallpaper": wp_name}) with guihelper.WXDialogWrapper(SingleFieldEditor(self, datakey, title, populate_data), True) as (dlg, retcode): if retcode==wx.ID_OK: _data=dlg.GetData() if _data: new_wp=_data[0] #only want the first entry since you can only get 1 wallpaper per group new_wp_name=new_wp.get('wallpaper', None) if new_wp_name is not None: self.setWP(_groupname, new_wp_name) #set new wallpaper else: new_wp_name=None self.setWP(_groupname, 0) #clear wallpaper self.SetPreview(new_wp_name) def OnAdd(self, _): v=self.add.GetValue() self.add.SetValue("") self.add.SetFocus() if len(v)==0: return if v not in self.curlist: self.curlist.append(v) self.curlist.sort() #add group to self.groups self.groups.append(str(v)+":0") if v not in self.addlist: self.addlist.append(v) self.addlist.sort() if v in self.dellist: i=self.dellist.index(v) del self.dellist[i] self.UpdateLBs() def OnDelete(self,_): try: v=self.thelistb.GetStringSelection() if v is None or len(v)==0: return except: return i=self.curlist.index(v) del self.curlist[i] entry_to_remove=None for entry in self.groups: l=entry.split(":", 1) name=l[0] if name==v: entry_to_remove=entry break if entry_to_remove is not None: self.groups.remove(entry_to_remove) if v in self.addlist: i=self.addlist.index(v) del self.addlist[i] self.dellist.append(v) self.dellist.sort() self.UpdateLBs() # CategoryEditor---------------------------------------------------------------- class CategoryEditor(DirtyUIBase): # we have to have an entry with a special string for the unnamed string unnamed="Select:" def __init__(self, parent, pos, navtoolbar=False): DirtyUIBase.__init__(self, parent) _box=field_color.build_color_field(self, wx.StaticBox, (self, -1, "Category"), 'category') hs=wx.StaticBoxSizer(_box, wx.HORIZONTAL) self.categories=[self.unnamed] self.category=wx.ListBox(self, -1, choices=self.categories) pubsub.subscribe(self.OnUpdateCategories, pubsub.ALL_CATEGORIES) pubsub.publish(pubsub.REQUEST_CATEGORIES) hs.Add(self.category, 1, wx.EXPAND|wx.ALL, 5) if pos==0: self.but=wx.Button(self, wx.NewId(), "Manage Categories") hs.Add(self.but, 2, wx.ALIGN_CENTRE|wx.ALL, 5) wx.EVT_BUTTON(self, self.but.GetId(), self.OnManageCategories) else: hs.Add(wx.StaticText(self, -1, ""), 2, wx.ALIGN_CENTRE|wx.ALL, 5) wx.EVT_LISTBOX(self, self.category.GetId(), self.OnDirtyUI) wx.EVT_LISTBOX_DCLICK(self, self.category.GetId(), self.OnDirtyUI) if navtoolbar: hs.Add(NavToolBar(self, False), 0, wx.EXPAND|wx.BOTTOM, 5) self.SetSizer(hs) hs.Fit(self) def __del__(self): pubsub.unsubscribe(self.OnUpdateCategories) super(CategoryEditor, self).__del__() def OnManageCategories(self, _): with guihelper.WXDialogWrapper(CategoryManager(self), True): pass def OnUpdateCategories(self, msg): cats=msg.data[:] cats=[self.unnamed]+cats if self.categories!=cats: self.categories=cats sel=self.category.GetStringSelection() self.category.Clear() for i in cats: self.category.Append(i) try: self.category.SetStringSelection(sel) except: # the above fails if the category we are is deleted self.category.SetStringSelection(self.unnamed) def Get(self): self.Clean() v=self.category.GetStringSelection() if len(v) and v!=self.unnamed: return {'category': v} return {} def Set(self, data): self.Ignore() if data is None: v=self.unnamed else: v=data.get("category", self.unnamed) try: self.category.SetStringSelection(v) except: assert v!=self.unnamed self.category.SetStringSelection(self.unnamed) self.Clean() # MemoEditor-------------------------------------------------------------------- class MemoEditor(DirtyUIBase): def __init__(self, parent, _, navtoolbar=False): DirtyUIBase.__init__(self, parent) _box=field_color.build_color_field(self, wx.StaticBox, (self, -1, "Memo"), 'memo') vs=wx.StaticBoxSizer(_box, wx.HORIZONTAL) self.static_box=_box self.memo=wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE) vs.Add(self.memo, 1, wx.EXPAND|wx.ALL, 5) wx.EVT_TEXT(self, self.memo.GetId(), self.OnDirtyUI) if navtoolbar: vs.Add(NavToolBar(self, horizontal=False), 0, wx.EXPAND|wx.BOTTOM, 5) self.SetSizer(vs) vs.Fit(self) def Set(self, data): self.Ignore() if data is None: s='' else: s=data.get('memo', '') self.memo.SetValue(s) self.Clean() def Get(self): self.Clean() if len(self.memo.GetValue()): return {'memo': self.memo.GetValue()} return {} # copy/cut/paste routines def CanCopy(self): return self.memo.CanCopy() def Copy(self): return self.memo.Copy() def CanPaste(self): return self.memo.CanPaste() def Paste(self): return self.memo.Paste() def CanCut(self): return self.memo.CanCut() def Cut(self): return self.memo.Cut() # NumberEditor------------------------------------------------------------------ class NumberEditor(DirtyUIBase): choices=[ ("None", "none"), ("Home", "home"), ("Office", "office"), ("Cell", "cell"), ("Fax", "fax"), ("Pager", "pager"), ("Data", "data"), ("Main", "main")] _None_Value='None' def __init__(self, parent, _, navtoolbar=False): DirtyUIBase.__init__(self, parent) _field_color_dict=field_color.build_field_info(self, 'number') hs=wx.StaticBoxSizer(field_color.build_color_field(self, wx.StaticBox, (self, -1, "Number details"), 'details', _field_color_dict), wx.VERTICAL) _hs_top=wx.BoxSizer(wx.HORIZONTAL) _txt=field_color.build_color_field(self, wx.StaticText, (self, -1, "Type"), 'type', _field_color_dict) _hs_top.Add(_txt, 0, wx.ALIGN_CENTRE|wx.ALL, 5) self.type=wx.ComboBox(self, -1, "Cell", choices=[desc for desc,name in self.choices], style=wx.CB_READONLY) _hs_top.Add(self.type, 0, wx.EXPAND|wx.ALL, 5) _txt=field_color.build_color_field(self, wx.StaticText, (self, -1, "SpeedDial"), 'speeddial', _field_color_dict) _hs_top.Add(_txt, 0, wx.ALIGN_CENTRE|wx.ALL, 5) self.speeddial=wx.TextCtrl(self, -1, "", size=(32,10)) _hs_top.Add(self.speeddial, 0, wx.EXPAND|wx.ALL, 5) _txt=field_color.build_color_field(self, wx.StaticText, (self, -1, "Number"), 'number', _field_color_dict) _hs_top.Add(_txt, 0, wx.ALIGN_CENTRE|wx.ALL, 5) self.number=wx.TextCtrl(self, -1, "") _hs_top.Add(self.number, 1, wx.EXPAND|wx.ALL, 5) # add a toolbar w/ the Up/Down/Del buttons if navtoolbar: _hs_top.Add(NavToolBar(self), 0, wx.EXPAND|wx.BOTTOM, 5) hs.Add(_hs_top, 0, wx.EXPAND|wx.ALL, 0) # the bottom section _hs_bot=wx.BoxSizer(wx.HORIZONTAL) _txt=field_color.build_color_field(self, wx.StaticText, (self, -1, "Ringtone"), 'ringtone', _field_color_dict) _hs_bot.Add(_txt, 0, wx.ALIGN_CENTRE|wx.ALL, 5) self.ringtone=wx.ComboBox(self, -1) _hs_bot.Add(self.ringtone, 0, wx.EXPAND|wx.ALL, 5) _txt=field_color.build_color_field(self, wx.StaticText, (self, -1, "Wallpaper"), 'wallpaper', _field_color_dict) _hs_bot.Add(_txt, 0, wx.ALIGN_CENTRE|wx.ALL, 5) self.wallpaper=wx.ComboBox(self, -1) _hs_bot.Add(self.wallpaper, 0, wx.EXPAND|wx.ALL, 5) hs.Add(_hs_bot, 0, wx.EXPAND|wx.ALL, 0) global _wallpaper_list, _ringtone_list pubsub.subscribe(self.OnWallpaperUpdates, pubsub.ALL_WALLPAPERS) if _wallpaper_list is None: pubsub.publish(pubsub.REQUEST_WALLPAPERS) else: self._populate_wallpaper() pubsub.subscribe(self.OnRingtoneUpdates, pubsub.ALL_RINGTONES) if _ringtone_list is None: pubsub.publish(pubsub.REQUEST_RINGTONES) else: self._populate_ringtone() wx.EVT_TEXT(self, self.type.GetId(), self.OnDirtyUI) wx.EVT_TEXT(self, self.speeddial.GetId(), self.OnDirtyUI) wx.EVT_TEXT(self, self.number.GetId(), self.OnDirtyUI) wx.EVT_TEXT(self, self.ringtone.GetId(), self.OnDirtyUI) wx.EVT_TEXT(self, self.wallpaper.GetId(), self.OnDirtyUI) self.SetSizer(hs) hs.Fit(self) def __del__(self): pubsub.unsubscribe(self.OnWallpaperUpdates) pubsub.unsubscribe(self.OnRingtoneUpdates) super(NumberEditor, self).__del__() def _populate_cb(self, cb_widget, data): cb_widget.Clear() cb_widget.Append(self._None_Value) for _entry in data: cb_widget.Append(_entry) def _set_cb_sel(self, cb_widget, str_sel): if str_sel: _sel=str_sel else: _sel=self._None_Value try: cb_widget.SetStringSelection(_sel) except: cb_widget.Append(sel) cb_widget.SetStringSelection(_sel) def _get_cb_sel(self, cb_widget): _sel=cb_widget.GetStringSelection() if not _sel or _sel==self._None_Value: return None return _sel def _populate_ringtone(self): """Populate the combo box with ringtone data""" self.Ignore() _str_sel=self.ringtone.GetStringSelection() global _ringtone_list self._populate_cb(self.ringtone, _ringtone_list) self._set_cb_sel(self.ringtone, _str_sel) self.Clean() def _populate_wallpaper(self): """Ppulate the combo box with wallpaper data""" self.Ignore() _str_sel=self.wallpaper.GetStringSelection() global _wallpaper_list self._populate_cb(self.wallpaper, _wallpaper_list) self._set_cb_sel(self.wallpaper, _str_sel) self.Clean() def OnWallpaperUpdates(self, msg): global _wallpaper_list _wallpaper_list=msg.data[:] self._populate_wallpaper() def OnRingtoneUpdates(self, msg): global _ringtone_list _ringtone_list=msg.data[:] self._populate_ringtone() def Set(self, data): self.Ignore() sd=data.get("speeddial", "") if isinstance(sd,(int, long)): sd='%d'%sd self.speeddial.SetValue(sd) self.number.SetValue(data.get("number", "")) # ringtone & wallpaper self._set_cb_sel(self.ringtone, data.get('ringtone', None)) self._set_cb_sel(self.wallpaper, data.get('wallpaper', None)) # number of type v=data.get("type", "cell") for i in range(len(self.choices)): if self.choices[i][1]==v: self.type.SetSelection(i) self.Clean() return self.type.SetSelection(0) self.Clean() def Get(self): self.Clean() res={} if len(self.number.GetValue())==0: return res res['number']=self.number.GetValue() if len(self.speeddial.GetValue()): res['speeddial']=self.speeddial.GetValue() try: res['speeddial']=int(res['speeddial']) except: pass res['type']=self.choices[self.type.GetSelection()][1] _sel=self._get_cb_sel(self.ringtone) if _sel: res['ringtone']=_sel _sel=self._get_cb_sel(self.wallpaper) if _sel: res['wallpaper']=_sel return res # EmailEditor------------------------------------------------------------------- class EmailEditor(DirtyUIBase): ID_TYPE=wx.NewId() _None_Value='None' def __init__(self, parent, _, navtoolbar=False): super(EmailEditor, self).__init__(parent) _field_color_dict=field_color.build_field_info(self, 'email_details') _box=field_color.build_color_field(self, wx.StaticBox, (self, -1, 'Email Address'), 'email') hs=wx.StaticBoxSizer(_box, wx.VERTICAL) # top section _hs_top=wx.BoxSizer(wx.HORIZONTAL) self.type=wx.ComboBox(self, self.ID_TYPE, "", choices=["", "Home", "Business"], style=wx.CB_READONLY) _hs_top.Add(self.type, 0, wx.EXPAND|wx.ALL, 5) self.email=wx.TextCtrl(self, -1, "") _hs_top.Add(self.email, 1, wx.EXPAND|wx.ALL, 5) if navtoolbar: _hs_top.Add(NavToolBar(self), 0, wx.EXPAND|wx.BOTTOM, 5) hs.Add(_hs_top, 0, wx.EXPAND|wx.ALL, 0) # bottom section _hs_bot=wx.BoxSizer(wx.HORIZONTAL) _txt=field_color.build_color_field(self, wx.StaticText, (self, -1, "SpeedDial"), 'emailspeeddial', _field_color_dict) _hs_bot.Add(_txt, 0, wx.ALIGN_CENTRE|wx.ALL, 5) self.speeddial=wx.TextCtrl(self, -1, "", size=(32,10)) _hs_bot.Add(self.speeddial, 0, wx.EXPAND|wx.ALL, 5) _txt=field_color.build_color_field(self, wx.StaticText, (self, -1, "Ringtone"), 'emailringtone', _field_color_dict) _hs_bot.Add(_txt, 0, wx.ALIGN_CENTRE|wx.ALL, 5) self.ringtone=wx.ComboBox(self, -1) _hs_bot.Add(self.ringtone, 0, wx.EXPAND|wx.ALL, 5) _txt=field_color.build_color_field(self, wx.StaticText, (self, -1, "Wallpaper"), 'emailwallpaper', _field_color_dict) _hs_bot.Add(_txt, 0, wx.ALIGN_CENTRE|wx.ALL, 5) self.wallpaper=wx.ComboBox(self, -1) _hs_bot.Add(self.wallpaper, 0, wx.EXPAND|wx.ALL, 5) hs.Add(_hs_bot, 0, wx.EXPAND|wx.ALL, 0) global _wallpaper_list, _ringtone_list pubsub.subscribe(self.OnWallpaperUpdates, pubsub.ALL_WALLPAPERS) if _wallpaper_list is None: pubsub.publish(pubsub.REQUEST_WALLPAPERS) else: self._populate_wallpaper() pubsub.subscribe(self.OnRingtoneUpdates, pubsub.ALL_RINGTONES) if _ringtone_list is None: pubsub.publish(pubsub.REQUEST_RINGTONES) else: self._populate_ringtone() wx.EVT_TEXT(self, self.type.GetId(), self.OnDirtyUI) wx.EVT_TEXT(self, self.email.GetId(), self.OnDirtyUI) wx.EVT_TEXT(self, self.speeddial.GetId(), self.OnDirtyUI) wx.EVT_TEXT(self, self.ringtone.GetId(), self.OnDirtyUI) wx.EVT_TEXT(self, self.wallpaper.GetId(), self.OnDirtyUI) self.SetSizer(hs) hs.Fit(self) def __del__(self): pubsub.unsubscribe(self.OnWallpaperUpdates) pubsub.unsubscribe(self.OnRingtoneUpdates) super(NumberEditor, self).__del__() def _populate_cb(self, cb_widget, data): cb_widget.Clear() cb_widget.Append(self._None_Value) for _entry in data: cb_widget.Append(_entry) def _set_cb_sel(self, cb_widget, str_sel): if str_sel: _sel=str_sel else: _sel=self._None_Value try: cb_widget.SetStringSelection(_sel) except: cb_widget.Append(sel) cb_widget.SetStringSelection(_sel) def _get_cb_sel(self, cb_widget): _sel=cb_widget.GetStringSelection() if not _sel or _sel==self._None_Value: return None return _sel def _populate_ringtone(self): """Populate the combo box with ringtone data""" self.Ignore() _str_sel=self.ringtone.GetStringSelection() global _ringtone_list self._populate_cb(self.ringtone, _ringtone_list) self._set_cb_sel(self.ringtone, _str_sel) self.Clean() def _populate_wallpaper(self): """Ppulate the combo box with wallpaper data""" self.Ignore() _str_sel=self.wallpaper.GetStringSelection() global _wallpaper_list self._populate_cb(self.wallpaper, _wallpaper_list) self._set_cb_sel(self.wallpaper, _str_sel) self.Clean() def OnWallpaperUpdates(self, msg): global _wallpaper_list _wallpaper_list=msg.data[:] self._populate_wallpaper() def OnRingtoneUpdates(self, msg): global _ringtone_list _ringtone_list=msg.data[:] self._populate_ringtone() def Set(self, data): self.Ignore() self.email.SetValue(data.get("email", "")) sd=data.get("speeddial", "") if isinstance(sd, int): sd=`sd` self.speeddial.SetValue(sd) self._set_cb_sel(self.ringtone, data.get('ringtone', None)) self._set_cb_sel(self.wallpaper, data.get('wallpaper', None)) v=data.get("type", "") if v=="home": self.type.SetSelection(1) elif v=="business": self.type.SetSelection(2) else: self.type.SetSelection(0) self.Clean() def Get(self): self.Clean() res={} if len(self.email.GetValue())==0: return res res['email']=self.email.GetValue() if len(self.speeddial.GetValue()): res['speeddial']=self.speeddial.GetValue() try: res['speeddial']=int(res['speeddial']) except: pass if self.type.GetSelection()==1: res['type']='home' elif self.type.GetSelection()==2: res['type']='business' _sel=self._get_cb_sel(self.ringtone) if _sel: res['ringtone']=_sel _sel=self._get_cb_sel(self.wallpaper) if _sel: res['wallpaper']=_sel return res # URLEditor--------------------------------------------------------------------- class URLEditor(DirtyUIBase): ID_TYPE=wx.NewId() def __init__(self, parent, _, navtoolbar=False): super(URLEditor, self).__init__(parent) _box=field_color.build_color_field(self, wx.StaticBox, (self, -1, "URL"), 'url') hs=wx.StaticBoxSizer(_box, wx.HORIZONTAL) self.type=wx.ComboBox(self, self.ID_TYPE, "", choices=["", "Home", "Business"], style=wx.CB_READONLY) hs.Add(self.type, 0, wx.EXPAND|wx.ALL, 5) self.url=wx.TextCtrl(self, -1, "") hs.Add(self.url, 1, wx.EXPAND|wx.ALL, 5) if navtoolbar: hs.Add(NavToolBar(self), 0, wx.EXPAND|wx.BOTTOM, 5) wx.EVT_TEXT(self, self.type.GetId(), self.OnDirtyUI) wx.EVT_TEXT(self, self.url.GetId(), self.OnDirtyUI) self.SetSizer(hs) hs.Fit(self) def Set(self, data): self.Ignore() self.url.SetValue(data.get("url", "")) v=data.get("type", "") if v=="home": self.type.SetSelection(1) elif v=="business": self.type.SetSelection(2) else: self.type.SetSelection(0) self.Clean() def Get(self): self.Clean() res={} if len(self.url.GetValue())==0: return res res['url']=self.url.GetValue() if self.type.GetSelection()==1: res['type']='home' elif self.type.GetSelection()==2: res['type']='business' return res # IM Editor--------------------------------------------------------------------- class IMEditor(DirtyUIBase): ID_TYPE=wx.NewId() _type_choices=('', 'AIM', 'Yahoo!', 'WL Messenger') def __init__(self, parent, _, navtoolbar=False): super(IMEditor, self).__init__(parent) _box=field_color.build_color_field(self, wx.StaticBox, (self, -1, "IM Name"), 'im') hs=wx.StaticBoxSizer(_box, wx.HORIZONTAL) self.type=wx.ComboBox(self, self.ID_TYPE, "", choices=self._type_choices, style=wx.CB_READONLY) hs.Add(self.type, 0, wx.EXPAND|wx.ALL, 5) self.name=wx.TextCtrl(self, -1, "") hs.Add(self.name, 1, wx.EXPAND|wx.ALL, 5) if navtoolbar: hs.Add(NavToolBar(self), 0, wx.EXPAND|wx.BOTTOM, 5) wx.EVT_TEXT(self, self.type.GetId(), self.OnDirtyUI) wx.EVT_TEXT(self, self.name.GetId(), self.OnDirtyUI) self.SetSizer(hs) hs.Fit(self) def Set(self, data): self.Ignore() self.name.SetValue(data.get("username", "")) v=data.get("type", "") if v in self._type_choices: self.type.SetValue(v) else: self.type.SetSelection(0) self.Clean() def Get(self): self.Clean() res={} if len(self.name.GetValue())==0: return res res['username']=self.name.GetValue() res['type']=self.type.GetValue() return res # AddressEditor----------------------------------------------------------------- class AddressEditor(DirtyUIBase): ID_TYPE=wx.NewId() fieldinfos=("street", "Street"), ("street2", "Street2"), ("city", "City"), \ ("state", "State"), ("postalcode", "Postal/Zipcode"), ("country", "Country/Region") def __init__(self, parent, _, navtoolbar=False): super(AddressEditor, self).__init__(parent) _fc_dict=field_color.build_field_info(self, 'address') _hs=wx.StaticBoxSizer(field_color.build_color_field(self, wx.StaticBox, (self, -1, "Address Details"), 'details', _fc_dict), wx.HORIZONTAL) vs=wx.BoxSizer(wx.VERTICAL) hs=wx.BoxSizer(wx.HORIZONTAL) hs.Add(field_color.build_color_field(self, wx.StaticText, (self, -1, "Type"), 'type', _fc_dict), 0, wx.ALIGN_CENTRE|wx.ALL, 5) self.type=wx.ComboBox(self, self.ID_TYPE, "Home", choices=["Home", "Business"], style=wx.CB_READONLY) hs.Add(self.type, 0, wx.EXPAND|wx.ALL, 5) hs.Add(field_color.build_color_field(self, wx.StaticText, (self, -1, "Company"), 'company', _fc_dict), 0, wx.ALIGN_CENTRE|wx.ALL, 5) self.company=wx.TextCtrl(self, -1, "") hs.Add(self.company, 1, wx.EXPAND|wx.ALL, 5) gs=wx.FlexGridSizer(6,2,2,5) for name,desc in self.fieldinfos: gs.Add(field_color.build_color_field(self, wx.StaticText, (self, -1, desc), name, _fc_dict), 0, wx.ALIGN_CENTRE) setattr(self, name, wx.TextCtrl(self, -1, "")) gs.Add(getattr(self,name), 1, wx.EXPAND) gs.AddGrowableCol(1) vs.Add(hs,0,wx.EXPAND|wx.ALL, 5) vs.Add(gs,0,wx.EXPAND|wx.ALL, 5) _hs.Add(vs, 0, wx.EXPAND|wx.ALL, 5) if navtoolbar: _hs.Add(NavToolBar(self, horizontal=False), 0, wx.EXPAND|wx.BOTTOM, 5) # ::TODO:: disable company when type is home wx.EVT_TEXT(self, self.type.GetId(), self.OnDirtyUI) wx.EVT_TEXT(self, self.company.GetId(), self.OnDirtyUI) for name,_ in self.fieldinfos: wx.EVT_TEXT(self, getattr(self, name).GetId(), self.OnDirtyUI) self.SetSizer(_hs) vs.Fit(self) def Set(self, data): self.Ignore() # most fields for name,ignore in self.fieldinfos: getattr(self, name).SetValue(data.get(name, "")) # special cases self.company.SetValue(data.get("company", "")) if data.get("type", "home")=="home": self.type.SetValue("Home") else: self.type.SetValue("Business") self.Clean() def Get(self): self.Clean() res={} # most fields for name,ignore in self.fieldinfos: w=getattr(self, name) if len(w.GetValue()): res[name]=w.GetValue() # special cases if self.type.GetSelection()==1: if len(self.company.GetValue()): res['company']=self.company.GetValue() # only add in type field if any other type field is set if len(res): res['type']=['home', 'business'][self.type.GetSelection()] return res # NameEditor-------------------------------------------------------------------- class NameEditor(DirtyUIBase): def __init__(self, parent, _, navtoolbar=False): super(NameEditor, self).__init__(parent) _fc_dict=field_color.build_field_info(self, 'name') _hs=wx.StaticBoxSizer(field_color.build_color_field(self, wx.StaticBox, (self, -1, 'Name Details'), 'details', _fc_dict), wx.HORIZONTAL) vs=wx.BoxSizer(wx.VERTICAL) hstop=wx.BoxSizer(wx.HORIZONTAL) hsbot=wx.BoxSizer(wx.HORIZONTAL) hstop.Add(field_color.build_color_field(self, wx.StaticText, (self, -1, "First"), 'first', _fc_dict), 0, wx.ALIGN_CENTRE|wx.ALL,5) self.first=wx.TextCtrl(self, -1, "") hstop.Add(self.first, 1, wx.EXPAND|wx.ALL, 5) hstop.Add(field_color.build_color_field(self, wx.StaticText, (self, -1, "Middle"), 'middle', _fc_dict), 0, wx.ALIGN_CENTRE|wx.ALL,5) self.middle=wx.TextCtrl(self, -1, "") hstop.Add(self.middle, 1, wx.EXPAND|wx.ALL, 5) hstop.Add(field_color.build_color_field(self, wx.StaticText, (self, -1, "Last"), 'last', _fc_dict), 0, wx.ALIGN_CENTRE|wx.ALL,5) self.last=wx.TextCtrl(self, -1, "") hstop.Add(self.last, 1, wx.EXPAND|wx.ALL, 5) hsbot.Add(field_color.build_color_field(self, wx.StaticText, (self, -1, "Full"), 'full', _fc_dict), 0, wx.ALIGN_CENTRE|wx.ALL,5) self.full=wx.TextCtrl(self, -1, "") hsbot.Add(self.full, 4, wx.EXPAND|wx.ALL, 5) hsbot.Add(field_color.build_color_field(self, wx.StaticText, (self, -1, "Nickname"), 'nickname', _fc_dict), 0, wx.ALIGN_CENTRE|wx.ALL,5) self.nickname=wx.TextCtrl(self, -1, "") hsbot.Add(self.nickname, 1, wx.EXPAND|wx.ALL, 5) vs.Add(hstop, 0, wx.EXPAND|wx.ALL, 5) vs.Add(hsbot, 0, wx.EXPAND|wx.ALL, 5) _hs.Add(vs, 0, wx.EXPAND|wx.ALL, 5) # add a toolbar w/ the Up/Down/Del buttons if navtoolbar: _hs.Add(NavToolBar(self, horizontal=False), 0, wx.EXPAND, 0) for _name in ('first', 'middle', 'last', 'full', 'nickname'): wx.EVT_TEXT(self, getattr(self, _name).GetId(), self.OnDirtyUI) # use the sizer and resize ourselves according to space needed by sizer self.SetSizer(_hs) vs.Fit(self) def Set(self, data): self.Ignore() self.first.SetValue(data.get("first", "")) self.middle.SetValue(data.get("middle", "")) self.last.SetValue(data.get("last", "")) self.full.SetValue(data.get("full", "")) self.nickname.SetValue(data.get("nickname", "")) self.Clean() def Get(self): self.Clean() res={} for name,widget in ( "first", self.first), ("middle", self.middle), ("last", self.last), \ ("full", self.full), ("nickname", self.nickname): if len(widget.GetValue()): res[name]=widget.GetValue() return res # MiscEditor----------------------------------------------------------------- class MiscEditor(DirtyUIBase): def __init__(self, parent, _, navtoolbar=False): super(MiscEditor, self).__init__(parent) _fc_dict=field_color.build_field_info(self, 'phonebook') vs=wx.StaticBoxSizer(wx.StaticBox(self, -1, "Misc Details"), wx.VERTICAL) # storage field hs=wx.BoxSizer(wx.HORIZONTAL) hs.Add(field_color.build_color_field(self, wx.StaticText, (self, -1, "Storage Option:"), 'storage', _fc_dict), 0, wx.ALIGN_CENTRE|wx.ALL, 5) self._storage=wx.ComboBox(self, -1, 'Phone', choices=["Phone", "SIM"], style=wx.CB_READONLY) wx.EVT_COMBOBOX(self, self._storage.GetId(), self.OnDirtyUI) hs.Add(self._storage, 0, wx.EXPAND|wx.LEFT, 5) vs.Add(hs, 0, wx.EXPAND|wx.ALL, 5) # secret field self._secret=field_color.build_color_field(self, wx.CheckBox, (self, -1, 'This entry is private/secret'), 'secret', _fc_dict) wx.EVT_CHECKBOX(self, self._secret.GetId(), self.OnDirtyUI) vs.Add(self._secret, 0, wx.EXPAND|wx.ALL, 5) # all done self.SetSizer(vs) vs.Fit(self) def Set(self, data): self._storage.SetValue('SIM' if data.get('sim', False) else 'Phone') self._secret.SetValue(data.get('secret', False)) def Get(self): _res={} if self._storage.GetValue()=='SIM': _res['sim']=True if self._secret.GetValue(): _res['secret']=True return _res # ICEEditor----------------------------------------------------------------- class ICEEditor(DirtyUIBase): def __init__(self, parent, _, navtoolbar=False): super(ICEEditor, self).__init__(parent) _fc_dict=field_color.build_field_info(self, 'phonebook') vs=wx.StaticBoxSizer(field_color.build_color_field(self, wx.StaticBox, (self, -1, "ICE Details"), 'ICE', _fc_dict), wx.VERTICAL) # ICE field hs=wx.BoxSizer(wx.HORIZONTAL) hs.Add(field_color.build_color_field(self, wx.StaticText, (self, -1, "Assign this contact as:"), 'ICE', _fc_dict), 0, wx.ALIGN_CENTRE|wx.ALL, 5) self._ice=wx.ComboBox(self, -1, 'None', choices=['None', 'ICE 1', 'ICE 2', 'ICE 3'], style=wx.CB_READONLY) wx.EVT_COMBOBOX(self, self._ice.GetId(), self.OnDirtyUI) hs.Add(self._ice, 0, wx.EXPAND|wx.LEFT, 5) vs.Add(hs, 0, wx.EXPAND|wx.ALL, 5) # all done self.SetSizer(vs) vs.Fit(self) def Set(self, data): if data.has_key('iceindex'): _val=data['iceindex']+1 else: _val=0 self._ice.SetSelection(_val) def Get(self): _res={} _val=self._ice.GetSelection() if _val: _res['iceindex']=_val-1 return _res # FavoriteEditor----------------------------------------------------------------- class FavoriteEditor(DirtyUIBase): def __init__(self, parent, _, navtoolbar=False): super(FavoriteEditor, self).__init__(parent) _fc_dict=field_color.build_field_info(self, 'phonebook') vs=wx.StaticBoxSizer(field_color.build_color_field(self, wx.StaticBox, (self, -1, "Favorite Details"), 'Favorite', _fc_dict), wx.VERTICAL) # Favorite field hs=wx.BoxSizer(wx.HORIZONTAL) hs.Add(field_color.build_color_field(self, wx.StaticText, (self, -1, "Assign this contact as:"), 'Favorite', _fc_dict), 0, wx.ALIGN_CENTRE|wx.ALL, 5) self._favorite=wx.ComboBox(self, -1, 'None', choices=['None'] + ['Favorite ' + `n` for n in range(1,10)], style=wx.CB_READONLY) wx.EVT_COMBOBOX(self, self._favorite.GetId(), self.OnDirtyUI) hs.Add(self._favorite, 0, wx.EXPAND|wx.LEFT, 5) vs.Add(hs, 0, wx.EXPAND|wx.ALL, 5) # all done self.SetSizer(vs) vs.Fit(self) def Set(self, data): if data.has_key('favoriteindex'): _val=data['favoriteindex']+1 else: _val=0 self._favorite.SetSelection(_val) def Get(self): _res={} _val=self._favorite.GetSelection() if _val: _res['favoriteindex']=_val-1 return _res # EditorManager----------------------------------------------------------------- class EditorManager(fixedscrolledpanel.wxScrolledPanel): ID_DOWN=wx.NewId() ID_UP=wx.NewId() ID_ADD=wx.NewId() ID_DELETE=wx.NewId() instruction_text=""" \n\nPress Add above to add a field. Press Delete to remove the field your cursor is on. You can use Up and Down to change the priority of items. For example, some phones store the first five numbers in the numbers tab, and treat the first number as the default to call. Other phones can only store one email address so only the first one would be stored. """ def __init__(self, parent, childclass): """Constructor @param parent: Parent window @param childclass: One of the *Editor classes which is used as a factory for making the widgets that correspond to each value""" fixedscrolledpanel.wxScrolledPanel.__init__(self, parent) self.dirty_ui_handler=getattr(parent, 'OnDirtyUI', None) self.sizer=wx.BoxSizer(wx.VERTICAL) self.SetSizer(self.sizer) self.widgets=[] self.childclass=childclass self.instructions=wx.StaticText(self, -1, EditorManager.instruction_text) self.sizer.Add(self.instructions, 0, wx.ALIGN_CENTER ) self.SetupScrolling() def Get(self): """Returns a list of dicts corresponding to the values""" res=[] for i in self.widgets: g=i.Get() if len(g): res.append(g) return res def Populate(self, data): """Fills in the editors according to the list of dicts in data The editor widgets are created and destroyed as needed""" callsus=False while len(data)>len(self.widgets): callsus=True _w=self.childclass(self, len(self.widgets), navtoolbar=True) if self.dirty_ui_handler: EVT_DIRTY_UI(self, _w.GetId(), self.dirty_ui_handler) self.widgets.append(_w) self.sizer.Add(_w, 0, wx.EXPAND|wx.ALL, 10) while len(self.widgets)>len(data): callsus=True self.sizer.Remove(self.widgets[-1]) self.widgets[-1].Destroy() del self.widgets[-1] for num in range(len(data)): self.widgets[num].Clean() self.widgets[num].Set(data[num]) callsus=self.DoInstructionsLayout() or callsus if callsus: self.sizer.Layout() self.SetupScrolling() def DoInstructionsLayout(self): "Returns True if Layout should be called" if len(self.widgets): if self.instructions.IsShown(): self.sizer.Remove(self.instructions) self.instructions.Show(False) return True else: if not self.instructions.IsShown(): self.sizer.Add(self.instructions, 0, wx.ALIGN_CENTER ) self.instructions.Show(True) return True return False def GetCurrentWidgetIndex(self): """Returns the index of the currently selected editor widget @raise IndexError: if there is no selected one""" focuswin=wx.Window.FindFocus() win=focuswin while win is not None and win not in self.widgets: win=win.GetParent() if win is None: raise IndexError("no idea who is selected") if win not in self.widgets: raise IndexError("no idea what that thing is") pos=self.widgets.index(win) return pos def Add(self): """Adds a new widget at the currently selected location""" gets=[x.Get() for x in self.widgets] try: pos=self.GetCurrentWidgetIndex() except IndexError: pos=len(gets)-1 _w=self.childclass(self, len(self.widgets), navtoolbar=True) if self.dirty_ui_handler: EVT_DIRTY_UI(self, _w.GetId(), self.dirty_ui_handler) self.dirty_ui_handler(None) self.widgets.append(_w) self.sizer.Add(_w, 0, wx.EXPAND|wx.ALL, 10) self.DoInstructionsLayout() self.sizer.Layout() self.SetupScrolling() if len(self.widgets)>1: for num,value in zip( range(pos+2, len(self.widgets)), gets[pos+1:]): self.widgets[num].Set(value) self.widgets[pos+1].Set({}) self.widgets[pos+1].SetFocus() else: self.widgets[0].SetFocus() def MoveField(self, field, delta): try: pos=self.widgets.index(field) except IndexError: wx.Bell() return if pos+delta<0: print "that would go off top" return if pos+delta>=len(self.widgets): print "that would go off bottom" return if self.dirty_ui_handler: self.dirty_ui_handler(None) gets=[x.Get() for x in self.widgets] # swap value path,settings=self.GetWidgetPathAndSettings(self.widgets[pos], field) self.widgets[pos+delta].Set(gets[pos]) self.widgets[pos].Set(gets[pos+delta]) self.SetWidgetPathAndSettings(self.widgets[pos+delta], path, settings) def DeleteField(self, field): """Deletes the currently select widget""" # ignore if there is nothing to delete if len(self.widgets)==0: return # get the current value of all widgets gets=[x.Get() for x in self.widgets] try: pos=self.widgets.index(field) except IndexError: wx.Bell() return if self.dirty_ui_handler: self.dirty_ui_handler(None) # remove the last widget (the UI, not the value) self.sizer.Remove(self.widgets[-1]) self.widgets[-1].Destroy() del self.widgets[-1] # if we deleted last item and it had focus, move focus # to second to last item if len(self.widgets): if pos==len(self.widgets): self.widgets[pos-1].SetFocus() self.DoInstructionsLayout() self.sizer.Layout() self.SetupScrolling() # update from one we deleted to end for i in range(pos, len(self.widgets)): self.widgets[i].Set(gets[i+1]) if len(self.widgets): # change focus if we deleted the last widget if pos=len(self.widgets): print "that would go off bottom" return gets=[x.Get() for x in self.widgets] # swap value path,settings=self.GetWidgetPathAndSettings(self.widgets[pos], focuswin) self.widgets[pos+delta].Set(gets[pos]) self.widgets[pos].Set(gets[pos+delta]) self.SetWidgetPathAndSettings(self.widgets[pos+delta], path, settings) def GetWidgetPathAndSettings(self, widgetfrom, controlfrom): """Finds the specified control within the editor widgetfrom. The values are for calling L{SetWidgetPathAndSettings}. Returns a tuple of (path, settings). path corresponds to the hierarchy with an editor (eg a panel contains a radiobox contains the radio button widget). settings means something to L{SetWidgetPathAndSettings}. For example, if the widget is a text widget it contains the current insertion point and selection.""" # we find where the control is in the hierarchy of widgetfrom path=[] # this is the same algorithm getpwd uses on Unix win=controlfrom while win is not widgetfrom: p=win.GetParent() kiddies=p.GetChildren() found=False for kid in range(len(kiddies)): if kiddies[kid] is win: path=[kid]+path win=p found=True break if found: continue print "i don't appear to be my parent's child!!!" return # save some settings we know about settings=[] if isinstance(controlfrom, wx.TextCtrl): settings=[controlfrom.GetInsertionPoint(), controlfrom.GetSelection()] return path,settings def SetWidgetPathAndSettings(self,widgetto,path,settings): """See L{GetWidgetPathAndSettings}""" # now have the path. follow it in widgetto print path win=widgetto for p in path: kids=win.GetChildren() win=kids[p] controlto=win controlto.SetFocus() if isinstance(controlto, wx.TextCtrl): controlto.SetInsertionPoint(settings[0]) controlto.SetSelection(settings[1][0], settings[1][1]) def SetFocusOnValue(self, index): """Sets focus to the editor widget corresponding to the supplied index""" wx.CallAfter(self.widgets[index].SetFocus) # Editor------------------------------------------------------------------------ class Editor(wx.Dialog): "The Editor Dialog itself. It contains panes for the various field types." ID_DOWN=wx.NewId() ID_UP=wx.NewId() ID_ADD=wx.NewId() ID_DELETE=wx.NewId() color_field_name='phonebook' # the tabs and classes within them tabsfactory=[ ("Names", "names", NameEditor), ("Numbers", "numbers", NumberEditor), ("Emails", "emails", EmailEditor), ("Addresses", "addresses", AddressEditor), ("URLs", "urls", URLEditor), ("Memos", "memos", MemoEditor), ("Categories", "categories", CategoryEditor), ("Wallpapers", "wallpapers", WallpaperEditor), ("Ringtones", "ringtones", RingtoneEditor), ("ICE", 'ice', ICEEditor), ("Favorite", "favorite", FavoriteEditor), ("IM Names", "ims", IMEditor), ("Misc", 'flags', MiscEditor), ] def __init__(self, parent, data, title="Edit PhoneBook Entry", keytoopenon=None, dataindex=None, factory=database.dictdataobjectfactory, readonly=False, datakey=None, movement=False): """Constructor for phonebookentryeditor dialog @param parent: parent window @param data: dict of values to edit @param title: window title @param keytoopenon: The key to open on. This is the key as stored in the data such as "names", "numbers" @param dataindex: Which value within the tab specified by keytoopenon to set focus to @param readonly: Indicates read-only data. """ global _ringtone_list, _wallpaper_list wx.Dialog.__init__(self, parent, -1, title, size=(900,580), style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER) field_color.get_color_info_from_profile(self) _ringtone_list=None _wallpaper_list=None self._data_key=datakey if movement and datakey is None and __debug__: self.log('Movement and datakey is None') raise ValueError # make a copy of the data we are going to work on self.dirty_widgets={ True: [], False: [] } self.data=factory.newdataobject(data) vs=wx.BoxSizer(wx.VERTICAL) # the title & direction button _hbs=wx.BoxSizer(wx.HORIZONTAL) self._title=wx.StaticText(self, -1, "Name here", style=wx.ALIGN_CENTRE|wx.ST_NO_AUTORESIZE) _add_btn=wx.BitmapButton(self, wx.NewId(), wx.ArtProvider.GetBitmap(guihelper.ART_ADD_FIELD), name="Prev Item") if movement: _prev_btn=wx.BitmapButton(self, wx.NewId(), wx.ArtProvider.GetBitmap(guihelper.ART_ARROW_LEFT), name="Prev Item") _next_btn=wx.BitmapButton(self, wx.NewId(), wx.ArtProvider.GetBitmap(guihelper.ART_ARROW_RIGHT), name="Next Item") self.dirty_widgets[False].append(_prev_btn) self.dirty_widgets[False].append(_next_btn) _hbs.Add(_prev_btn, 0, wx.EXPAND, 0) _hbs.Add(_add_btn, 0, wx.EXPAND|wx.LEFT, 10) _hbs.Add(self._title, 1, wx.EXPAND, 0) _hbs.Add(_next_btn, 0, wx.EXPAND, 0) wx.EVT_BUTTON(self, _prev_btn.GetId(), self.OnMovePrev) wx.EVT_BUTTON(self, _next_btn.GetId(), self.OnMoveNext) else: _hbs.Add(_add_btn, 0, wx.EXPAND|wx.LEFT, 10) _hbs.Add(self._title, 1, wx.EXPAND, 0) wx.EVT_BUTTON(self, _add_btn.GetId(), self.Add) vs.Add(_hbs, 0, wx.ALL|wx.EXPAND, 5) nb=wx.Notebook(self, -1) self.nb=nb self.nb.OnDirtyUI=self.OnDirtyUI vs.Add(nb,1,wx.EXPAND|wx.ALL,5) self.tabs=[] # instantiate the nb widgets for name,key,klass in self.tabsfactory: widget=EditorManager(self.nb, klass) nb.AddPage(widget,name) if key==keytoopenon or keytoopenon in key: nb.SetSelection(len(self.tabs)) self.tabs.append(widget) # populate the data self.Populate() # and focus on the right one if specified for _idx, (name,key,klass) in enumerate(self.tabsfactory): if key and key==keytoopenon and dataindex is not None: self.tabs[_idx].SetFocusOnValue(dataindex) vs.Add(wx.StaticLine(self, -1, style=wx.LI_HORIZONTAL), 0, wx.EXPAND|wx.ALL, 5) _btn_sizer=wx.StdDialogButtonSizer() if not readonly: _btn_sizer.AddButton(wx.Button(self, wx.ID_OK)) if self._data_key is not None: _w=wx.Button(self, wx.ID_APPLY) self.dirty_widgets[True].append(_w) _btn_sizer.AddButton(_w) wx.EVT_BUTTON(self, wx.ID_APPLY, self.OnApply) _btn_sizer.AddButton(wx.Button(self, wx.ID_CANCEL)) _w=wx.Button(self, wx.ID_REVERT_TO_SAVED) self.dirty_widgets[True].append(_w) _btn_sizer.SetNegativeButton(_w) _btn_sizer.Realize() vs.Add(_btn_sizer, 0, wx.ALIGN_CENTRE|wx.ALL, 5) self.SetSizer(vs) wx.EVT_BUTTON(self, wx.ID_REVERT_TO_SAVED, self.Revert) wx.EVT_TOOL(self, self.ID_UP, self.MoveUp) wx.EVT_TOOL(self, self.ID_DOWN, self.MoveDown) wx.EVT_TOOL(self, self.ID_ADD, self.Add) wx.EVT_TOOL(self, self.ID_DELETE, self.Delete) self.ignore_dirty=False self.dirty=False self.setdirty(False) def Revert(self, _): # reload data self.Populate() self.setdirty(False) def OnDirtyUI(self, _): self.setdirty() def setdirty(self, flg=True): if self.ignore_dirty: return self.dirty=flg for w in self.dirty_widgets[self.dirty]: w.Enable(True) for w in self.dirty_widgets[not self.dirty]: w.Enable(False) def OnApply(self, _): # Save the current data self.GetParent().SaveData(self.GetData(), self.GetDataKey()) self.setdirty(False) def Populate(self): # populate various widget with data self._set_title() for _idx, (name,key,klass) in enumerate(self.tabsfactory): if key is None: # the fields are in data, not in data[key] self.tabs[_idx].Populate([self.data]) else: self.tabs[_idx].Populate(self.data.get(key, {})) def GetData(self): res=self.data for i in range(len(self.tabsfactory)): widget=self.nb.GetPage(i) data=widget.Get() key=self.tabsfactory[i][1] if len(data): if key is None: res.update(data[0]) else: res[key]=data else: # remove the key try: if key is not None: del res[key] except KeyError: # which may not have existed ... pass return res def GetDataKey(self): return self._data_key def MoveUp(self, _): self.nb.GetPage(self.nb.GetSelection()).Move(-1) self.setdirty() def MoveDown(self, _): self.nb.GetPage(self.nb.GetSelection()).Move(+1) self.setdirty() def Add(self, _): self.nb.GetPage(self.nb.GetSelection()).Add() def Delete(self, _): self.nb.GetPage(self.nb.GetSelection()).Delete() self.setdirty() def _set_title(self): if hasattr(self, '_title'): self._title.SetLabel(nameparser.getfullname(self.data['names'][0])) def OnMoveNext(self, _): _key,_data=self.GetParent().GetNextEntry(True) if _data: self.data=_data self._data_key=_key self.Populate() def OnMovePrev(self, _): _key,_data=self.GetParent().GetNextEntry(False) if _data: self.data=_data self._data_key=_key self.Populate() # SingleFieldEditor------------------------------------------------------------- class SingleFieldEditor(wx.Dialog): "Edit a single field for a groups of entries" ID_DOWN=wx.NewId() ID_UP=wx.NewId() ID_ADD=wx.NewId() ID_DELETE=wx.NewId() tabsfactory={ 'categories': ("Categories", "categories", CategoryEditor), 'wallpapers': ("Wallpapers", "wallpapers", WallpaperEditor), 'group_wallpapers': ("Group Wallpapers", "group_wallpapers", WallpaperEditor), 'ringtones': ("Ringtones", "ringtones", RingtoneEditor) } color_field_name='phonebook' def __init__(self, parent, key, caption="Edit PhoneBook Entry", populatedata=None): if not self.tabsfactory.has_key(key): raise KeyError super(SingleFieldEditor, self).__init__(parent, -1, caption, size=(740,580), style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER) field_color.get_color_info_from_profile(self) self._key=key vs=wx.BoxSizer(wx.VERTICAL) _hbs=wx.BoxSizer(wx.HORIZONTAL) _add_btn=wx.BitmapButton(self, wx.NewId(), wx.ArtProvider.GetBitmap(guihelper.ART_ADD_FIELD), name="Prev Item") _hbs.Add(_add_btn, 0, wx.EXPAND|wx.LEFT, 10) wx.EVT_BUTTON(self, _add_btn.GetId(), self.Add) vs.Add(_hbs, 0, wx.ALL|wx.EXPAND, 5) self.nb=wx.Notebook(self, -1) vs.Add(self.nb,1,wx.EXPAND|wx.ALL,5) # instantiate the nb widgets name,key,klass=self.tabsfactory[key] if name in ('Group Wallpapers'): #instantiate WallpaperEditor class with arguments, because I can't pass in args thru EditorManager #widget=klass(self.nb, parent, False) widget=EditorManager(self.nb, klass) #hide the add widget button since we aren't using EditorManager #vs.Hide(0) if populatedata is not None: widget.Populate(populatedata) else: widget=EditorManager(self.nb, klass) self.nb.AddPage(widget,name) vs.Add(wx.StaticLine(self, -1, style=wx.LI_HORIZONTAL), 0, wx.EXPAND|wx.ALL, 5) _btn_sizer=self.CreateButtonSizer(wx.OK|wx.CANCEL) vs.Add(_btn_sizer, 0, wx.ALIGN_CENTRE|wx.ALL, 5) self.SetSizer(vs) wx.EVT_TOOL(self, self.ID_UP, self.MoveUp) wx.EVT_TOOL(self, self.ID_DOWN, self.MoveDown) wx.EVT_TOOL(self, self.ID_ADD, self.Add) wx.EVT_TOOL(self, self.ID_DELETE, self.Delete) def MoveUp(self, _): self.nb.GetPage(0).Move(-1) def MoveDown(self, _): self.nb.GetPage(0).Move(+1) def Add(self, _): self.nb.GetPage(0).Add() def Delete(self, _): self.nb.GetPage(0).Delete() def GetData(self): return self.nb.GetPage(0).Get() # main-------------------------------------------------------------------------- if __name__=='__main__': # data to edit data={ 'names': [ { 'full': 'John Smith'}, { 'nickname': 'I Love Testing'} ], 'categories': [ {'category': 'business'}, {'category': 'friend' } ], # 'emails': [ {'email': 'ex1@example.com'}, {'email': 'ex2@example.net', 'type': 'home'} ], 'urls': [ {'url': 'www.example.com'}, {'url': 'http://www.example.net', 'type': 'home'} ], 'ringtones': [ {'ringtone': 'mi2.mid', 'use': 'call'}, {'ringtone': 'dots.mid', 'use': 'message'}], 'addresses': [ {'type': 'home', 'street': '123 Main Street', 'city': 'Main Town', 'state': 'CA', 'postalcode': '12345'}, {'type': 'business', 'company': 'Acme Widgets Inc', 'street': '444 Industrial Way', 'street2': 'Square Business Park', 'city': 'City Of Quality', 'state': 'Northern', 'postalcode': 'GHGJJ-12324', 'country': 'Nations United'} ], 'wallpapers': [{'wallpaper': 'pic1.bmp', 'use': 'call'}, {'wallpaper': 'alert.jpg', 'use': 'message'}], 'flags': [ {'secret': True}, {'wierd': 'orange'} ], 'memos': [ {'memo': 'Some stuff about this person " is usually welcome'}, {'memo': 'A second note'}], 'numbers': [ {'number': '123-432-2342', 'type': 'home', 'speeddial': 3}, {'number': '121=+4321/4', 'type': 'fax'}] } app=wx.PySimpleApp() with guihelper.WXDialogWrapper(Editor(None,data), True): pass bitpim-1.0.7+dfsg1/src/native/0000755001616600161660000000000011330125063014216 5ustar amuamubitpim-1.0.7+dfsg1/src/native/av/0000755001616600161660000000000011330124364014627 5ustar amuamubitpim-1.0.7+dfsg1/src/native/av/bmp2avi/0000755001616600161660000000000011330124365016170 5ustar amuamubitpim-1.0.7+dfsg1/src/native/av/bmp2avi/Makefile0000644001616600161660000000116110426575120017633 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: Makefile 3200 2006-05-05 07:10:08Z rogerb $ # There used to be a fairly elegant makefile. Replaced with something # more trivial but easier to use while packaging. Note that we deliberately # do not specify $CXX, $LDFLAGS etc as the distro will provide them SRC=avi_file.cxx bmp_file.cxx b2a.cxx bmp2avi.lbin bmp2avi.mbin bmp2avi.exe: $(SRC) $(CXX) $(EXTRADEFINES) -O2 -o $@ $(SRC) bitpim-1.0.7+dfsg1/src/native/av/bmp2avi/b2a.cxx0000644001616600161660000000616510205310507017363 0ustar amuamu// BITPIM // // Copyright (C) 2005 Joe Pham // // This program is free software; you can redistribute it and/or modify // it under the terms of the BitPim license as detailed in the LICENSE file. // // $Id: b2a.cxx 2117 2005-02-18 06:55:03Z djpham $ #include #include #include "byte_order.h" #include "avi_file.h" #include "bmp_file.h" using namespace std; static void get_options(int argc, char *argv[]); static void print_help_and_exit(const string &exe_name, const int exit_code); // global optional variables string in_file_name(""), out_file_name(""); unsigned int fps(4); // default to 4 frames/second unsigned int frame_num(0); // default to the 1st frame bool build_avi(true); // default to build AVI from BMP files static void build_avi_file(void) { FILE *f(fopen(in_file_name.c_str(), "rb")); if (!f) { cerr << "Failed to open BMP file " << in_file_name << endl; exit(2); } BMPFile bmp_file(f); fclose(f); if(!bmp_file.valid()) { cerr << in_file_name << " is not a valid BMP file" << endl; exit(3); } if(bmp_file.get_bpp() !=24) { // only works with 24-bit BMP file cerr << in_file_name << " is not a 24-bit BMP file" << endl; exit(4); } FILE *riff_f(fopen(out_file_name.c_str(), "rb")); riffList *riff; if (!riff_f) { // cerr << "File " << out_file_name << " does not exist, creating one" << endl; riff=new riffList(bmp_file, 4); } else { // cerr << "File " << out_file_name << " exists, adding this new frame to it" << endl; riff=new riffList(riff_f); fclose(riff_f); riff->add_frame(bmp_file); } FILE *f_out(fopen(out_file_name.c_str(), "wb")); if(!f_out) { cerr << "Failed to open output file: " << out_file_name << endl; exit(5); } riff->write(f_out); fclose(f_out); // just for fun delete riff; } static void extract_bmp_frame(void) { FILE *f(fopen(in_file_name.c_str(), "rb")); if(!f) { cerr << "Failed to open file " << in_file_name << endl; exit(1); } riffList riff(f); fclose(f); BMPFile *bmp(riff.extract_frame(frame_num)); if(!bmp) { cerr << "Failed to extract frame from AVI file" << endl; exit(2); } FILE *f_out(fopen(out_file_name.c_str(), "wb")); bmp->write(f_out); fclose(f_out); delete bmp; } int main(int argc, char *argv[]) { get_options(argc, argv); if(build_avi) build_avi_file(); else extract_bmp_frame(); } void print_help_and_exit(const string &exe_name, const int exit_code) { cerr << "Usage :" << exe_name << " [-help] [-f | -t ] -i -o " << endl; exit(exit_code); } void get_options(int argc, char *argv[]) { string exe_name(argv[0]); for(int i=1;i // // This program is free software; you can redistribute it and/or modify // it under the terms of the BitPim license as detailed in the LICENSE file. // // $Id: avi_file.cxx 2117 2005-02-18 06:55:03Z djpham $ #include "avi_file.h" #include "byte_order.h" // endian conversion routines AVIMAINHEADER endian(const AVIMAINHEADER &hdr) { AVIMAINHEADER h={ LSB32(hdr.dwMicroSecPerFrame), LSB32(hdr.dwMaxBytesPerSec), LSB32(hdr.dwPaddingGranularity), LSB32(hdr.dwFlags), LSB32(hdr.dwTotalFrames), LSB32(hdr.dwInitialFrames), LSB32(hdr.dwStreams), LSB32(hdr.dwSuggestedBufferSize), LSB32(hdr.dwWidth), LSB32(hdr.dwHeight), 0, 0, 0, 0 }; return h; } AVISTREAMHEADER endian(const AVISTREAMHEADER &hdr) { AVISTREAMHEADER h; memcpy(h.fccType, hdr.fccType, 4); memcpy(h.fccHandler, hdr.fccHandler, 4); h.dwFlags=LSB32(hdr.dwFlags); h.wPriority=LSB16(hdr.wPriority); h.wLanguage=LSB16(hdr.wLanguage); h.dwInitialFrames=LSB32(hdr.dwInitialFrames); h.dwScale=LSB32(hdr.dwScale); h.dwRate=LSB32(hdr.dwRate); h.dwStart=LSB32(hdr.dwStart); h.dwLength=LSB32(hdr.dwLength); h.dwSuggestedBufferSize=LSB32(hdr.dwSuggestedBufferSize); h.dwQuality=LSB32(hdr.dwQuality); h.dwSampleSize=LSB32(hdr.dwSampleSize); h.rcFrame.left=LSB16(hdr.rcFrame.left); h.rcFrame.top=LSB16(hdr.rcFrame.top); h.rcFrame.right=LSB16(hdr.rcFrame.right); h.rcFrame.bottom=LSB16(hdr.rcFrame.bottom); return h; } BITMAPINFOHEADER endian(const BITMAPINFOHEADER &hdr) { BITMAPINFOHEADER h={ LSB32(hdr.biSize), LSB32(hdr.biWidth), LSB32(hdr.biHeight), LSB16(hdr.biPlanes), LSB16(hdr.biBitCount), LSB32(hdr.biCompression), LSB32(hdr.biSizeImage), LSB32(hdr.biXPelsPerMeter), LSB32(hdr.biYPelsPerMeter), LSB32(hdr.biClrUsed), LSB32(hdr.biClrImportant) }; return h; } RGBQUAD endian(const RGBQUAD &hdr) { return hdr; } aIndex endian(const aIndex &hdr) { aIndex h; memcpy(h.dwChunkId, hdr.dwChunkId, 4); h.dwFlags=LSB32(hdr.dwFlags); h.dwOffset=LSB32(hdr.dwOffset); h.dwSize=LSB32(hdr.dwSize); return h; } ///////////////////////////////////////////////////////////////////////////////////////////////// AVIChunk::AVIChunk(): id(""), size(0), data(NULL) { } AVIChunk::AVIChunk(FILE *file_in): id(""), size(0), data(NULL) { read(file_in); } AVIChunk::AVIChunk(const string &id, const unsigned int size, void *_data): id(id), size(size), data(NULL) { if(size) { data=new unsigned char[size]; memcpy(data, _data, size); } } AVIChunk::~AVIChunk() { if (data) delete [] data; } unsigned int AVIChunk::get_buffer_size() { return size+8; } unsigned int AVIChunk::get_size() { return size; } string AVIChunk::get_id() { return id; } unsigned char *AVIChunk::get_data(void) { return data; } void AVIChunk::read_hdr(FILE *file_in) { char s[5];s[4]=0; if(feof(file_in)) return; fread(s, 4, 1, file_in); id=s; fread(&size, 4, 1, file_in); size=LSB32(size); } void AVIChunk::read(FILE *file_in) { read_hdr(file_in); // cerr << "Reading AVI Chunk: " << id << ", size: " << size << endl; if (size) { if (data) delete [] data; data=new unsigned char[size]; fread(data, size, 1, file_in); } } void AVIChunk::write_hdr(FILE *file_out) { char s[5];s[4]=0; strncpy(s, id.c_str(), 4); fwrite(s, 4, 1, file_out); unsigned int sz(LSB32(size)); fwrite(&sz, 4, 1, file_out); } void AVIChunk::write(FILE *file_out) { write_hdr(file_out); if (size) fwrite(data, size, 1, file_out); } void AVIChunk::info(ostream &os) { os << "\nChunk ID: " << id << endl; os << " Size: " << size << endl; } void AVIChunk::update_size() { } ///////////////////////////////////////////////////////////////////////////////////////////////// AVIList::AVIList(): id(""), type(""), size(0), data(NULL) { } AVIList::AVIList(FILE *file_in): id(""), type(""), size(0), data(NULL) { read(file_in); } AVIList::AVIList(const string &id, const string &type, const unsigned int size, void *_data): id(id), type(type), size(size), data(NULL) { if(size) { data=new unsigned char[size]; memcpy(data, _data, size); } } AVIList::~AVIList() { if (data) delete [] data; } unsigned int AVIList::get_buffer_size() { return size+12; } unsigned int AVIList::get_size() { return size+4; } string AVIList::get_id() { return id; } string AVIList::get_type() { return type; } void AVIList::read_hdr(FILE *file_in) { char s[5];s[4]=0; fread(s, 4, 1, file_in); id=s; fread(&size, 4, 1, file_in); size=LSB32(size); size -=4; fread(s, 4, 1, file_in); type=s; } void AVIList::read(FILE *file_in) { read_hdr(file_in); if(data) { delete [] data; data=NULL; } if (size) { data=new unsigned char[size]; fread(data, size, 1, file_in); } } void AVIList::write_hdr(FILE *file_out) { char s[5];s[4]=0; strncpy(s, id.c_str(), 4); fwrite(s, 4, 1, file_out); unsigned int i(size+4); i=LSB32(i); fwrite(&i, 4, 1, file_out); strncpy(s, type.c_str(), 4); fwrite(s, 4, 1, file_out); } void AVIList::write(FILE *file_out) { write_hdr(file_out); if (size) fwrite(data, size, 1, file_out); } void AVIList::info(ostream &os) { os << "List ID: " << id << endl; os << " Size: " << size << endl; os << " Type: " << type << endl; } void AVIList::update_size() { } ///////////////////////////////////////////////////////////////////////////////////////////////// avihChunk::avihChunk(FILE *file_in): AVIChunk() { read(file_in); } avihChunk::avihChunk(): AVIChunk() { id="avih"; size=sizeof(avi_hdr); } avihChunk::avihChunk(const AVIMAINHEADER &main_hdr): AVIChunk() { id="avih"; avi_hdr=main_hdr; size=sizeof(avi_hdr); } avihChunk::~avihChunk() { } unsigned int avihChunk::get_buffer_size() { return AVIChunk::get_buffer_size(); } void avihChunk::read(FILE *file_in) { read_hdr(file_in); if (size != sizeof(avi_hdr)) cerr << "AVI Header struct size mismatch!" << endl; if(size) { fread(&avi_hdr, size, 1, file_in); avi_hdr=endian(avi_hdr); } } void avihChunk::write(FILE *file_out) { write_hdr(file_out); AVIMAINHEADER hdr(endian(avi_hdr)); fwrite(&hdr, size, 1, file_out); } void avihChunk::info(ostream &os) { AVIChunk::info(os); os.setf(ios::showbase); os << "Main AVI Header:" << endl; os << " dwMicroSecPerFrame: " << hex << avi_hdr.dwMicroSecPerFrame << "=" << dec << avi_hdr.dwMicroSecPerFrame<< endl; os << " dwMaxBytesPerSec: " << hex << avi_hdr.dwMaxBytesPerSec << "=" << dec << avi_hdr.dwMaxBytesPerSec<< endl; os << " dwPaddingGranularity: " << hex << avi_hdr.dwPaddingGranularity << "=" << dec << avi_hdr.dwPaddingGranularity<< endl; os << " dwFlags: " << hex << avi_hdr.dwFlags << "=" << dec << avi_hdr.dwFlags<< endl; os << " dwTotalFrames: " << hex << avi_hdr.dwTotalFrames << "=" << dec << avi_hdr.dwTotalFrames<< endl; os << " dwInitialFrames: " << hex << avi_hdr.dwInitialFrames << "=" << dec << avi_hdr.dwInitialFrames<< endl; os << " dwStreams: " << hex << avi_hdr.dwStreams << "=" << dec << avi_hdr.dwStreams<< endl; os << " dwSuggestedBufferSize: " << hex << avi_hdr.dwSuggestedBufferSize << "=" << dec << avi_hdr.dwSuggestedBufferSize<< endl; os << " dwWidth: " << hex << avi_hdr.dwWidth << "=" << dec << avi_hdr.dwWidth<< endl; os << " dwHeight: " << hex << avi_hdr.dwHeight << "=" << dec << avi_hdr.dwHeight<< endl; } void avihChunk::update_size() { size=sizeof(avi_hdr); } void avihChunk::add_frame(const BMPFile &bmp) { avi_hdr.dwTotalFrames++; } ///////////////////////////////////////////////////////////////////////////////////////////////// hdrlList::hdrlList(FILE *file_in): AVIList(), avih(NULL) { read(file_in); } hdrlList::hdrlList(): AVIList(), avih(NULL) { id="LIST"; type="hdrl"; } hdrlList::hdrlList(const AVIMAINHEADER &main_hdr, const AVISTREAMHEADER &stream_hdr, const BITMAPINFO &bitmap_info): AVIList(), avih(NULL) { id="LIST"; type="hdrl"; avih=new avihChunk(main_hdr); strl.push_back(new strlList(stream_hdr, bitmap_info)); update_size(); } hdrlList::~hdrlList() { if(avih) delete avih; for(int i=0;iwrite(file_out); for(int i=0;iwrite(file_out); } void hdrlList::info(ostream &os) { AVIList::info(os); if(avih) avih->info(os); for(int i=0;iinfo(os); } void hdrlList::update_size() { // update everyone's size if (avih) { avih->update_size(); size = avih->get_buffer_size(); } else size=0; for(int i=0; iupdate_size(); size += strl[i]->get_buffer_size(); } } void hdrlList::add_frame(const BMPFile &bmp) { avih->add_frame(bmp); strl.back()->add_frame(bmp); } BITMAPINFOHEADER hdrlList::get_bitmap_hdr(void) { return strl.back()->get_bitmap_hdr(); } ///////////////////////////////////////////////////////////////////////////////////////////////// strhChunk::strhChunk(FILE *file_in): AVIChunk() { read(file_in); } strhChunk::strhChunk(): AVIChunk() { id="strh"; size=sizeof(stream_hdr); } strhChunk::strhChunk(const AVISTREAMHEADER &strm_hdr): AVIChunk() { id="strh"; stream_hdr=strm_hdr; size=sizeof(stream_hdr); } strhChunk::~strhChunk() { } unsigned int strhChunk::get_buffer_size() { return AVIChunk::get_buffer_size(); } void strhChunk::read(FILE *file_in) { read_hdr(file_in); fread(&stream_hdr, size, 1, file_in); stream_hdr=endian(stream_hdr); } void strhChunk::write(FILE *file_out) { write_hdr(file_out); AVISTREAMHEADER hdr(endian(stream_hdr)); fwrite(&hdr, size, 1, file_out); } void strhChunk::info(ostream &os) { AVIChunk::info(os); os.setf(ios::showbase); char s[5];s[4]=0; os << "AVI Stream Header:" << endl; strncpy(s, stream_hdr.fccType, 4);s[4]=0; os << " fccType: " << s << endl; strncpy(s, stream_hdr.fccHandler, 4);s[4]=0; os << " fccHandler: " << s << endl; os << " dwFlags: " << hex << stream_hdr.dwFlags << "=" << dec << stream_hdr.dwFlags << endl; os << " wPriority: " << hex << stream_hdr.wPriority << "=" << dec << stream_hdr.wPriority << endl; os << " wLanguage: " << hex << stream_hdr.wLanguage << "=" << dec << stream_hdr.wLanguage << endl; os << " dwInitialFrames: " << hex << stream_hdr.dwInitialFrames << "=" << dec << stream_hdr.dwInitialFrames << endl; os << " dwScale: " << hex << stream_hdr.dwScale << "=" << dec << stream_hdr.dwScale << endl; os << " dwRate: " << hex << stream_hdr.dwRate << "=" << dec << stream_hdr.dwRate << endl; os << " dwStart: " << hex << stream_hdr.dwStart << "=" << dec << stream_hdr.dwStart << endl; os << " dwLength: " << hex << stream_hdr.dwLength << "=" << dec << stream_hdr.dwLength << endl; os << " dwSuggestedBufferSize: " << hex << stream_hdr.dwSuggestedBufferSize << "=" << dec << stream_hdr.dwSuggestedBufferSize << endl; os << " dwQuality: " << hex << stream_hdr.dwQuality << "=" << dec << stream_hdr.dwQuality << endl; os << " dwSampleSize: " << hex << stream_hdr.dwSampleSize << "=" << dec << stream_hdr.dwSampleSize << endl; os << " left: " << hex << stream_hdr.rcFrame.left << "=" << dec << stream_hdr.rcFrame.left << endl; os << " top: " << hex << stream_hdr.rcFrame.top << "=" << dec << stream_hdr.rcFrame.top << endl; os << " right: " << hex << stream_hdr.rcFrame.right << "=" << dec << stream_hdr.rcFrame.right << endl; os << " bottom: " << hex << stream_hdr.rcFrame.bottom << "=" << dec << stream_hdr.rcFrame.bottom << endl; } void strhChunk::update_size() { size=sizeof(stream_hdr); } void strhChunk::add_frame(const BMPFile &bmp) { stream_hdr.dwLength++; } ///////////////////////////////////////////////////////////////////////////////////////////////// strfChunk::strfChunk(FILE *file_in): AVIChunk() { read(file_in); } strfChunk::strfChunk(): AVIChunk() { id="strf"; size=sizeof(bitmap_info); } strfChunk::strfChunk(const BITMAPINFO &bmp_info): AVIChunk() { id="strf"; bitmap_info=bmp_info; size=sizeof(bitmap_info.bmiHeader); } strfChunk::~strfChunk() { } unsigned int strfChunk::get_buffer_size() { return AVIChunk::get_buffer_size(); } void strfChunk::read(FILE *file_in) { read_hdr(file_in); fread(&bitmap_info, size, 1, file_in); bitmap_info.bmiHeader=endian(bitmap_info.bmiHeader); } void strfChunk::write(FILE *file_out) { write_hdr(file_out); BITMAPINFO bi(bitmap_info); bi.bmiHeader=endian(bi.bmiHeader); fwrite(&bi, size, 1, file_out); } void strfChunk::info(ostream &os) { AVIChunk::info(os); os.setf(ios::showbase); BITMAPINFOHEADER bmi_hdr(bitmap_info.bmiHeader); os << "Bitmap Info Header:" << endl; os << " biSize:" << hex << bmi_hdr.biSize << "=" << dec << bmi_hdr.biSize << endl; os << " biWidth:" << hex << bmi_hdr.biWidth << "=" << dec << bmi_hdr.biWidth << endl; os << " biHeight:" << hex << bmi_hdr.biHeight << "=" << dec << bmi_hdr.biHeight << endl; os << " biPlanes:" << hex << bmi_hdr.biPlanes << "=" << dec << bmi_hdr.biPlanes << endl; os << " biBitCount:" << hex << bmi_hdr.biBitCount << "=" << dec << bmi_hdr.biBitCount << endl; os << " biCompression:" << hex << bmi_hdr.biCompression << "=" << dec << bmi_hdr.biCompression << endl; os << " biSizeImage:" << hex << bmi_hdr.biSizeImage << "=" << dec << bmi_hdr.biSizeImage << endl; os << " biXPelsPerMeter:" << hex << bmi_hdr.biXPelsPerMeter << "=" << dec << bmi_hdr.biXPelsPerMeter << endl; os << " biYPelsPerMeter:" << hex << bmi_hdr.biYPelsPerMeter << "=" << dec << bmi_hdr.biYPelsPerMeter << endl; os << " biClrUsed:" << hex << bmi_hdr.biClrUsed << "=" << dec << bmi_hdr.biClrUsed << endl; os << " biClrImportant:" << hex << bmi_hdr.biClrImportant << "=" << dec << bmi_hdr.biClrImportant << endl; } void strfChunk::update_size() { } BITMAPINFOHEADER strfChunk::get_bitmap_hdr(void) { return bitmap_info.bmiHeader; } ///////////////////////////////////////////////////////////////////////////////////////////////// idx1Chunk::idx1Chunk(): AVIChunk() { id="idx1"; size=0; } idx1Chunk::idx1Chunk(FILE *file_in): AVIChunk() { read(file_in); } idx1Chunk::idx1Chunk(const aIndex &idx): AVIChunk() { id="idx1"; index.push_back(idx); update_size(); } idx1Chunk::~idx1Chunk() { } unsigned int idx1Chunk::get_buffer_size() { AVIChunk::get_buffer_size(); } void idx1Chunk::read(FILE *file_in) { read_hdr(file_in); int k(sizeof(aIndex)), i(size/k); aIndex an_idx; for(int j=0;jwrite(file_out); if(strf) strf->write(file_out); } void strlList::info(ostream &os) { AVIList::info(os); if(strh) strh->info(os); if(strf) strf->info(os); } void strlList::update_size() { if(strh) { strh->update_size(); size=strh->get_buffer_size(); } else size=0; if(strf) { strf->update_size(); size+=strf->get_buffer_size(); } } void strlList::add_frame(const BMPFile &bmp) { strh->add_frame(bmp); } BITMAPINFOHEADER strlList::get_bitmap_hdr(void) { return strf->get_bitmap_hdr(); } ///////////////////////////////////////////////////////////////////////////////////////////////// moviList::moviList(FILE *file_in): AVIList() { read(file_in); } moviList::moviList(): AVIList() { id="LIST"; type="movi"; } moviList::moviList(AVIChunk *chunk): AVIList() { id="LIST"; type="movi"; chunk_list.push_back(chunk); update_size(); } moviList::~moviList() { for(int i=0;iwrite(file_out); } void moviList::info(ostream &os) { AVIList::info(os); for(int i=0;iinfo(os); } } void moviList::update_size() { size=0; for(int i=0; iupdate_size(); size+=chunk_list[i]->get_buffer_size(); } } void moviList::add_frame(const BMPFile &bmp) { // add a new frame to this list chunk_list.push_back(new AVIChunk("00db", bmp.get_size(), bmp.get_data())); } AVIChunk *moviList::get_chunk(const int frame_num) { if(frame_num>=chunk_list.size()) return NULL; return chunk_list[frame_num]; } ///////////////////////////////////////////////////////////////////////////////////////////////// riffList::riffList(FILE *file_in): AVIList(), hdrl(NULL), movi(NULL), idx1(NULL) { read(file_in); } riffList::riffList(): AVIList(), hdrl(NULL), movi(NULL), idx1(NULL) { id="RIFF"; type="AVI "; } riffList::riffList(const BMPFile &bmp, const unsigned int fps): AVIList(), hdrl(NULL), movi(NULL), idx1(NULL) { id="RIFF"; type="AVI "; BMPFile::BMPINFO bmp_info(bmp.get_info()); AVIMAINHEADER main_hdr; AVISTREAMHEADER stream_hdr; BITMAPINFO bitmap_info; memset(&main_hdr, 0, sizeof(main_hdr)); memset(&stream_hdr, 0, sizeof(stream_hdr)); memset(&bitmap_info, 0, sizeof(bitmap_info)); main_hdr.dwMicroSecPerFrame=1000000/fps; main_hdr.dwMaxBytesPerSec=bmp.get_size()*fps; main_hdr.dwFlags=AVIFILEINFO_HASINDEX|AVIFILEINFO_TRUSTCKTYPE; main_hdr.dwTotalFrames=1; main_hdr.dwStreams=1; main_hdr.dwSuggestedBufferSize=bmp.get_size(); main_hdr.dwWidth=bmp_info.width; main_hdr.dwHeight=bmp_info.height; memcpy(stream_hdr.fccType, "vids", 4); memset(stream_hdr.fccHandler, 0, 4); stream_hdr.dwScale=1; stream_hdr.dwRate=fps; stream_hdr.dwLength=1; stream_hdr.dwSuggestedBufferSize=bmp.get_size(); stream_hdr.rcFrame.right=bmp_info.width; stream_hdr.rcFrame.bottom=bmp_info.height; BITMAPINFOHEADER bmi; memset(&bmi, 0, sizeof(bmi)); bmi.biSize=sizeof(bmi); bmi.biWidth=bmp_info.width; bmi.biHeight=bmp_info.height; bmi.biPlanes=bmp_info.planes; bmi.biBitCount=bmp_info.bpp; bmi.biCompression=bmp_info.compression; bitmap_info.bmiHeader=bmi; hdrl=new hdrlList(main_hdr, stream_hdr, bitmap_info); movi=new moviList(new AVIChunk("00db", bmp.get_size(), bmp.get_data())); aIndex an_idx; memcpy(an_idx.dwChunkId, "00db", 4); an_idx.dwFlags=AVIIF_KEYFRAME; an_idx.dwOffset=4; an_idx.dwSize=bmp.get_size(); idx1=new idx1Chunk(an_idx); update_size(); } riffList::~riffList() { if(hdrl) delete hdrl; if(movi) delete movi; if(idx1) delete idx1; } unsigned int riffList::get_buffer_size() { return AVIList::get_buffer_size(); } void riffList::read(FILE *file_in) { read_hdr(file_in); if (id!="RIFF") { cerr << "RIFF not found" << endl; return; } if(hdrl) delete hdrl; hdrl=new hdrlList(file_in); if(movi) delete movi; movi=new moviList(file_in); idx1=new idx1Chunk(file_in); } void riffList::write(FILE *file_out) { write_hdr(file_out); if(hdrl) hdrl->write(file_out); if(movi) movi->write(file_out); if(idx1) idx1->write(file_out); } void riffList::info(ostream &os) { AVIList::info(os); if (hdrl) hdrl->info(os); if(movi) movi->info(os); if(idx1) idx1->info(os); } void riffList::update_size() { size=0; if(hdrl) { hdrl->update_size(); size+=hdrl->get_buffer_size(); } if(movi) { movi->update_size(); size+=movi->get_buffer_size(); } if(idx1) { idx1->update_size(); size+=idx1->get_buffer_size(); } } void riffList::add_frame(const BMPFile &bmp) { // TODO: need to do some basic checking to ensure sames resolution, size, etc ... hdrl->add_frame(bmp); movi->add_frame(bmp); idx1->add_frame(bmp); update_size(); } BMPFile *riffList::extract_frame(const unsigned int frame_num) { BITMAPINFOHEADER bitmap_hdr(hdrl->get_bitmap_hdr()); AVIChunk *chunk(movi->get_chunk(frame_num)); if(chunk==NULL) return NULL; BMPFile::BMPINFO bmp_info={ bitmap_hdr.biWidth, bitmap_hdr.biHeight, bitmap_hdr.biPlanes, bitmap_hdr.biBitCount, bitmap_hdr.biCompression, chunk->get_size() }; return new BMPFile(bmp_info, chunk->get_data()); } ///////////////////////////////////////////////////////////////////////////////////////////////// bitpim-1.0.7+dfsg1/src/native/av/bmp2avi/bmp_file.h0000644001616600161660000000275610205310507020123 0ustar amuamu// BITPIM // // Copyright (C) 2005 Joe Pham // // This program is free software; you can redistribute it and/or modify // it under the terms of the BitPim license as detailed in the LICENSE file. // // $Id: bmp_file.h 2117 2005-02-18 06:55:03Z djpham $ #ifndef __BMP_FILE_HH__ #define __BMP_FILE_HH__ #include #include using namespace std; class BMPFile { private: unsigned int width, height, compression; unsigned short planes, bpp; unsigned int data_size; bool ok; unsigned char *data; public: typedef struct _bmp_info { unsigned int width; unsigned int height; unsigned short planes; unsigned short bpp; unsigned int compression; unsigned int data_size; } BMPINFO; typedef struct _bmp_header { // char id[2]; unsigned int file_size; unsigned int reserved_1; unsigned int data_offset; unsigned int header_size; unsigned int width; unsigned int height; unsigned short planes; unsigned short bpp; unsigned int compression; unsigned int data_size; unsigned int h_resolution; unsigned int v_resolution; unsigned int n_colors; unsigned int imp_colors; unsigned int palete[0x100]; } BMPHEADER; BMPFile(); BMPFile(FILE *file_in); BMPFile(const BMPINFO &bmp_info, unsigned char *data); ~BMPFile(); bool valid() const; BMPINFO get_info(void) const; unsigned int get_size() const; unsigned char *get_data() const; unsigned short get_bpp() const; void info(ostream &os) const; void write(FILE *file_out); }; #endif bitpim-1.0.7+dfsg1/src/native/av/bmp2avi/byte_order.h0000644001616600161660000000147710205310507020503 0ustar amuamu// BITPIM // // Copyright (C) 2005 Joe Pham // // This program is free software; you can redistribute it and/or modify // it under the terms of the BitPim license as detailed in the LICENSE file. // // $Id: byte_order.h 2117 2005-02-18 06:55:03Z djpham $ #ifndef __BYTE_ORDER_HH__ #define __BYTE_ORDER_HH__ #define SWAP16(x) (((x>>8) & 0x00ff) |\ ((x<<8) & 0xff00)) #define SWAP32(x) (((x>>24) & 0x000000ff) |\ ((x>>8) & 0x0000ff00) |\ ((x<<8) & 0x00ff0000) |\ ((x<<24) & 0xff000000)) #ifdef __BIG_ENDIAN__ #define MSB16(x) (x) #define MSB32(x) (x) #define LSB16(x) SWAP16((x)) #define LSB32(x) SWAP32((x)) #else #define MSB16(x) SWAP16((x)) #define MSB32(x) SWAP32((x)) #define LSB16(x) (x) #define LSB32(x) (x) #endif #endif bitpim-1.0.7+dfsg1/src/native/av/bmp2avi/bmp_file.cxx0000644001616600161660000000614110205310507020466 0ustar amuamu// BITPIM // // Copyright (C) 2005 Joe Pham // // This program is free software; you can redistribute it and/or modify // it under the terms of the BitPim license as detailed in the LICENSE file. // // $Id: bmp_file.cxx 2117 2005-02-18 06:55:03Z djpham $ #include #include #include "bmp_file.h" #include "byte_order.h" using namespace std; BMPFile::BMPFile(): width(0), height(0), compression(0), planes(0), bpp(0), data_size(0), ok(false), data(NULL) { } BMPFile::BMPFile(const BMPINFO &bmp_info, unsigned char *_data): ok(true) { width=bmp_info.width; height=bmp_info.height; compression=bmp_info.compression; planes=bmp_info.planes; bpp=bmp_info.bpp; data_size=bmp_info.data_size; data=new unsigned char[data_size]; memcpy(data, _data, data_size); } BMPFile::BMPFile(FILE *file_in): width(0), height(0), compression(0), planes(0), bpp(0), data_size(0), ok(false), data(NULL) { char s[3];s[2]=0; fread(s, 2, 1, file_in); if(string(s)!="BM") { // not a BMP file cerr << "Not a BMP file." << endl; return; } ok=true; // read the info unsigned int file_size; fread(&file_size, 4, 1, file_in); file_size=LSB32(file_size); fseek(file_in, 4, SEEK_CUR); unsigned int data_offset; fread(&data_offset, 4, 1, file_in); data_offset=LSB32(data_offset); fseek(file_in, 4, SEEK_CUR); fread(&width, 4, 1, file_in); width=LSB32(width); fread(&height, 4, 1, file_in); height=LSB32(height); fread(&planes, 2, 1, file_in); planes=LSB16(planes); fread(&bpp, 2, 1, file_in); bpp=LSB16(bpp); fread(&compression, 4, 1, file_in); compression=LSB32(compression); // read the data data_size=file_size-data_offset; fseek(file_in, data_offset, SEEK_SET); data=new unsigned char[data_size]; fread(data, data_size, 1, file_in); } BMPFile::~BMPFile() { if(data) delete [] data; } bool BMPFile::valid() const { return ok; } BMPFile::BMPINFO BMPFile::get_info(void) const { BMPINFO bmp_info={ width, height, planes, bpp, compression, data_size }; return bmp_info; } unsigned char *BMPFile::get_data() const { return data; } void BMPFile::info(ostream &os) const { if (!ok) { os << "Not a valid BMP file" << endl; return; } os.setf(ios::showbase); os << "Resolution: " << width << "x" << height << endl; os << "BPP: " << bpp << ", planes: " << planes << ", compression: " << compression << endl; os << "Data size: " << hex << data_size << "=" << dec << data_size << endl; os << "Data: "; for(int i=0;i<16;i++) { unsigned short j(data[i]); os << " " << hex << j; } os << endl; } unsigned int BMPFile::get_size() const { return data_size; } unsigned short BMPFile::get_bpp() const { return bpp; } void BMPFile::write(FILE *file_out) { BMPHEADER hdr; unsigned int hdr_size(sizeof(hdr)+2); memset(&hdr, 0, sizeof(hdr)); hdr.file_size=LSB32(hdr_size+data_size); hdr.data_offset=LSB32(hdr_size); hdr.header_size=LSB32(0x28); hdr.width=LSB32(width); hdr.height=LSB32(height); hdr.planes=LSB16(planes); hdr.bpp=LSB16(bpp); hdr.compression=LSB32(compression); fwrite("BM", 2, 1, file_out); fwrite(&hdr, sizeof(hdr), 1, file_out); fwrite(data, data_size, 1, file_out); } bitpim-1.0.7+dfsg1/src/native/av/bmp2avi/avi_file.h0000644001616600161660000001471210205310507020117 0ustar amuamu// BITPIM // // Copyright (C) 2005 Joe Pham // // This program is free software; you can redistribute it and/or modify // it under the terms of the BitPim license as detailed in the LICENSE file. // // $Id: avi_file.h 2117 2005-02-18 06:55:03Z djpham $ #ifndef __BMP2AVI_HH__ #define __BMP2AVI_HH__ #include #include #include #include #include #include #include "bmp_file.h" using namespace std; typedef unsigned int DWORD; typedef unsigned short WORD; typedef long LONG; typedef unsigned char FOURCC[4]; #define AVIIF_KEYFRAME 0x10 #define AVIFILEINFO_HASINDEX 0x10 #define AVIFILEINFO_MUSTUSEINDEX 0x20 #define AVIFILEINFO_TRUSTCKTYPE 0x800 typedef struct _avimainheader { // char fcc[4]; // DWORD cb; DWORD dwMicroSecPerFrame; DWORD dwMaxBytesPerSec; DWORD dwPaddingGranularity; DWORD dwFlags; DWORD dwTotalFrames; DWORD dwInitialFrames; DWORD dwStreams; DWORD dwSuggestedBufferSize; DWORD dwWidth; DWORD dwHeight; DWORD dwReserved[4]; } AVIMAINHEADER; AVIMAINHEADER endian(const AVIMAINHEADER &hdr); typedef struct _avistreamheader { // char fcc[4]; // DWORD cb; char fccType[4]; char fccHandler[4]; DWORD dwFlags; WORD wPriority; WORD wLanguage; DWORD dwInitialFrames; DWORD dwScale; DWORD dwRate; DWORD dwStart; DWORD dwLength; DWORD dwSuggestedBufferSize; DWORD dwQuality; DWORD dwSampleSize; struct { short left; short top; short right; short bottom; } rcFrame; } AVISTREAMHEADER; AVISTREAMHEADER endian(const AVISTREAMHEADER &hdr); typedef struct _bitmapinforheader { DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } BITMAPINFOHEADER, *PBITMAPINFOHEADER; BITMAPINFOHEADER endian(const BITMAPINFOHEADER &hdr); typedef struct _rgbquad { unsigned char rgbBlue; unsigned char rgbGreen; unsigned char rgbRed; unsigned char rgbReserved; } RGBQUAD; RGBQUAD endian(const RGBQUAD &hdr); typedef struct _bitmapinfo { BITMAPINFOHEADER bmiHeader; RGBQUAD bmiColors[1]; } BITMAPINFO, *PBITMAPINFO; typedef struct _avioldindex_entry { char dwChunkId[4]; DWORD dwFlags; DWORD dwOffset; DWORD dwSize; } aIndex; aIndex endian(const aIndex &hdr); class AVIChunk { protected: string id; unsigned int size; unsigned char *data; void read_hdr(FILE *file_in); void write_hdr(FILE *file_out); public: AVIChunk(FILE *file_in); AVIChunk(const string &id, const unsigned int size, void *data); AVIChunk(); ~AVIChunk(); void write(FILE *file_out); void read(FILE *file_in); unsigned int get_buffer_size(); unsigned int get_size(); unsigned char *get_data(void); string get_id(); void info(ostream &os); void update_size(); }; class AVIList { protected: string id, type; unsigned int size; unsigned char *data; void read_hdr(FILE *file_in); void write_hdr(FILE *file_out); public: AVIList(FILE *file_in); AVIList(const string &id, const string &type, const unsigned int size, void *data); AVIList(); ~AVIList(); void write(FILE *file_out); void read(FILE *file_in); unsigned int get_buffer_size(); unsigned int get_size(); string get_id(); string get_type(); void info(ostream &os); void update_size(); }; class avihChunk: protected AVIChunk { private: AVIMAINHEADER avi_hdr; public: avihChunk(FILE *file_in); avihChunk(const AVIMAINHEADER &main_hdr); avihChunk(); ~avihChunk(); unsigned int get_buffer_size(); void read(FILE *file_in); void write(FILE *file_out); void info(ostream &os); void update_size(); void add_frame(const BMPFile &bmp); }; class strhChunk: protected AVIChunk { private: AVISTREAMHEADER stream_hdr; public: strhChunk(FILE *file_in); strhChunk(const AVISTREAMHEADER &stream_hdr); strhChunk(); ~strhChunk(); unsigned int get_buffer_size(); void read(FILE *file_in); void write(FILE *file_out); void info(ostream &os); void update_size(); void add_frame(const BMPFile &bmp); }; class strfChunk: protected AVIChunk { private: BITMAPINFO bitmap_info; public: strfChunk(FILE *file_in); strfChunk(const BITMAPINFO &bitmap_info); strfChunk(); ~strfChunk(); unsigned int get_buffer_size(); void read(FILE *file_in); void write(FILE *file_out); void info(ostream &os); void update_size(); BITMAPINFOHEADER get_bitmap_hdr(void); }; typedef vector IndexVector; class idx1Chunk:protected AVIChunk { private: IndexVector index; public: idx1Chunk(); idx1Chunk(FILE *file_in); idx1Chunk(const aIndex &idx); ~idx1Chunk(); unsigned int get_buffer_size(); void read(FILE *file_in); void write(FILE *file_out); void info(ostream &os); void update_size(); void add_frame(const BMPFile &bmp); }; class strlList: protected AVIList { private: strhChunk *strh; strfChunk *strf; public: strlList(FILE *file_in); strlList(const AVISTREAMHEADER &stream_hdr, const BITMAPINFO &bitmap_info); strlList(); ~strlList(); unsigned int get_buffer_size(); void read(FILE *file_in); void write(FILE *file_out); void info(ostream &os); void update_size(); void add_frame(const BMPFile &bmp); BITMAPINFOHEADER get_bitmap_hdr(void); }; typedef vector ChunkListType; class moviList: protected AVIList { private: ChunkListType chunk_list; public: moviList(FILE *file_in); moviList(AVIChunk *chunk); moviList(); ~moviList(); unsigned int get_buffer_size(); void read(FILE *file_in); void write(FILE *file_out); void info(ostream &os); void update_size(); void add_frame(const BMPFile &bmp); AVIChunk *get_chunk(const int frame_num); }; typedef vector strlVector; class hdrlList: protected AVIList { private: avihChunk *avih; strlVector strl; public: hdrlList(FILE *file_in); hdrlList(); hdrlList(const AVIMAINHEADER &main_hdr, const AVISTREAMHEADER &stream_hdr, const BITMAPINFO &bitmap_info); ~hdrlList(); unsigned int get_buffer_size(); void read(FILE *file_in); void write(FILE *file_out); void info(ostream &os); void update_size(); void add_frame(const BMPFile &bmp); BITMAPINFOHEADER get_bitmap_hdr(void); }; class riffList: protected AVIList { private: hdrlList *hdrl; moviList *movi; idx1Chunk *idx1; public: riffList(FILE *file_in); riffList(const BMPFile &bmp, const unsigned int fps); riffList(); ~riffList(); unsigned int get_buffer_size(); void read(FILE *file_in); void write(FILE *file_out); void info(ostream &os); void update_size(); void add_frame(const BMPFile &bmp); BMPFile *extract_frame(const unsigned int frame_num); }; #endif bitpim-1.0.7+dfsg1/src/native/usb/0000755001616600161660000000000011330124372015011 5ustar amuamubitpim-1.0.7+dfsg1/src/native/usb/macbuild.sh0000755001616600161660000000061111274703471017140 0ustar amuamuPYTHONVER=python2.5 INCLUDEDIR=/System/Library/Frameworks/Python.framework/Versions/2.5/include/$PYTHONVER swig -version 2>&1 | grep Version swig -python `libusb-config --cflags` libusb.i gcc -Wall -O2 -bundle -undefined suppress -flat_namespace -I $INCLUDEDIR -I /usr/local/include -o _libusb.so libusb_wrap.c `libusb-config --libs` `libusb-config --cflags` -framework Python -arch i386 bitpim-1.0.7+dfsg1/src/native/usb/build.sh0000755001616600161660000000043010657157167016467 0ustar amuamuPYTHONVER=python2.5 INCLUDEDIR=`$PYTHONVER -c "import distutils.sysconfig; print distutils.sysconfig.get_python_inc()"` swig -python -I/usr/include libusb.i gcc -fPIC -Wall -fno-strict-aliasing -O2 -g -shared -I $INCLUDEDIR -o _libusb.so libusb_wrap.c -lusb strip _libusb.so bitpim-1.0.7+dfsg1/src/native/usb/usb.py0000644001616600161660000003032011053440660016155 0ustar amuamu### ### A wrapper for the libusb wrapper of the libusb library :-) ### ### This code is in the Public Domain. (libusb and the wrapper ### are LGPL) ### from __future__ import generators import sys if sys.platform=='win32': try: import win32api handle=win32api.LoadLibrary("libusb0.dll") win32api.FreeLibrary(handle) except: raise ImportError("libusb needs to be installed for this module to work") import libusb as usb # grab some constants and put them in our namespace for sym in dir(usb): if sym.startswith("USB_CLASS_") or sym.startswith("USB_DT"): exec "%s=usb.%s" %(sym, sym) del sym TRACE=False class USBException(Exception): def __init__(self): Exception.__init__(self, usb.usb_strerror()) def UpdateLists(): """Updates the lists of busses and devices @return: A tuple of (change in number of busses, change in number of devices) """ return usb.usb_find_busses(), usb.usb_find_devices() class USBBus: "Wraps a bus" def __init__(self, usb_bus): self.bus=usb_bus def name(self): return self.bus.dirname def devices(self): dev=self.bus.devices while dev is not None: if dev.config is not None: yield USBDevice(dev) dev=dev.next raise StopIteration() class USBDevice: "Wraps a device" def __init__(self, usb_device): self.usb=usb # save it so that it can't be GC before us self.dev=usb_device self.handle=usb.usb_open(self.dev) if TRACE: print "usb_open(%s)=%s" % (self.dev,self.handle) if self.handle is None: raise USBException() def __del__(self): self.close() def close(self): if self.handle is not None: if TRACE: print "usb_close(%s)" % (self.handle,) self.usb.usb_close(self.handle) self.handle=None self.usb=None def number(self): return self.dev.bInterfaceNumber def name(self): return self.dev.filename def vendor(self): return self.dev.descriptor.idVendor def vendorstring(self): return self._getstring("iManufacturer") def productstring(self): return self._getstring("iProduct") def serialnumber(self): return self._getstring("iSerialNumber") def _getstring(self, fieldname): n=getattr(self.dev.descriptor, fieldname) if n: res,string=usb.usb_get_string_simple(self.handle, n, 1024) if TRACE: print "usb_get_string_simple(%s, %d, %d)=%d,%s" % (self.handle, n, 1024, res, string) if res<0: raise USBException() return string return None def product(self): return self.dev.descriptor.idProduct def interfaces(self): for i in range(self.dev.config.bNumInterfaces): yield USBInterface(self, usb.usb_interface_index(self.dev.config.interface, i)) raise StopIteration() def classdetails(self): "returns a tuple of device class, devicesubclass, deviceprotocol (all ints)" return self.dev.descriptor.bDeviceClass, \ self.dev.descriptor.bDeviceSubClass, \ self.dev.descriptor.bDeviceProtocol class USBInterface: # currently we only deal with first configuration def __init__(self, device, iface, alt=None): self.iface=iface self.device=device self.desc=alt or iface.altsetting def number(self): return self.desc.bInterfaceNumber def altnumber(self): return self.desc.bAlternateSetting def classdetails(self): return self.desc.bInterfaceClass, \ self.desc.bInterfaceSubClass, \ self.desc.bInterfaceProtocol def openbulk(self,epinno=None,epoutno=None): "Returns a filelike object you can use to read and write" # find the endpoints match=lambda ep1, ep2: (ep1 is None) or (ep2 is None) or ((ep1 & 0x7f) == (ep2 & 0x7f)) epin=None epout=None for ep in self.endpoints(): if ep.isbulk(): if ep.direction()==ep.IN: if (not epin) and match(epinno,ep.address()): epin=ep else: if (not epout) and match(epoutno,ep.address()): epout=ep assert epin is not None assert epout is not None # set the configuration if TRACE: print "getting configvalue" v=self.device.dev.config.bConfigurationValue if TRACE: print "value is",v,"now about to set config" res=usb.usb_set_configuration(self.device.handle, v) if TRACE: print "usb_set_configurationds(%s, %d)=%d" % (self.device.handle,v,res) print "config set" # grab the interface print "claiming",self.number() res=usb.usb_claim_interface(self.device.handle, self.number()) if TRACE: print "usb_claim_interface(%s, %d)=%d" % (self.device.handle, self.number(), res) if res<0: raise USBException() # set the alt setting res=usb.usb_set_altinterface(self.device.handle, self.altnumber()) if TRACE: print "usb_set_alt_interface(%s, %d)=%d" % (self.device.handle, self.altnumber(), res) if res<0: # Setting the alternate interface causes problems with some phones (VX-10000) # reset the device and reclaim the interface if there was problem setting the # alternate interface. usb.usb_reset(self.device.handle) usb.usb_release_interface (self.device.handle, self.number()) res=usb.usb_claim_interface(self.device.handle, self.number()) if res<0: raise USBException() # we now have the file return USBFile(self, epin, epout) def alternates(self): for i in range(self.iface.num_altsetting): yield USBInterface(self.device,self.iface,usb.usb_interface_descriptor_index(self.iface.altsetting,i)) # a generator raises its StopIteration() by itself def endpoints(self): for i in range(self.desc.bNumEndpoints): yield USBEndpoint(usb.usb_endpoint_descriptor_index(self.desc.endpoint, i)) raise StopIteration() class USBEndpoint: # type of endpoint TYPE_CONTROL=usb.USB_ENDPOINT_TYPE_CONTROL TYPE_ISOCHRONOUS=usb.USB_ENDPOINT_TYPE_ISOCHRONOUS TYPE_BULK=usb.USB_ENDPOINT_TYPE_BULK TYPE_INTERRUPT=usb.USB_ENDPOINT_TYPE_INTERRUPT # direction for bulk IN=usb.USB_ENDPOINT_IN OUT=usb.USB_ENDPOINT_OUT def __init__(self, ep): self.ep=ep def type(self): return self.ep.bmAttributes&usb.USB_ENDPOINT_TYPE_MASK def address(self): return self.ep.bEndpointAddress def maxpacketsize(self): return self.ep.wMaxPacketSize def isbulk(self): return self.type()==self.TYPE_BULK def direction(self): assert self.isbulk() return self.ep.bEndpointAddress&usb.USB_ENDPOINT_DIR_MASK class USBFile: def __init__(self, iface, epin, epout): self.usb=usb # save this so that our destructor can run self.claimed=True self.iface=iface self.epin=epin self.epout=epout self.addrin=epin.address() self.addrout=epout.address() self.insize=epin.maxpacketsize() self.outsize=epout.maxpacketsize() def __del__(self): self.close() def resetep(self, resetin=True, resetout=True): if resetin: res=usb.usb_clear_halt(self.iface.device.handle, self.addrin) if TRACE: print "usb_clear_halt(%s,%d)=%d" % (self.iface.device.handle, self.addrin, res) res=usb.usb_resetep(self.iface.device.handle, self.addrin) if TRACE: print "usb_resetep(%s,%d)=%d" % (self.iface.device.handle, self.addrin, res) if resetout: res=usb.usb_clear_halt(self.iface.device.handle, self.addrout) if TRACE: print "usb_clear_halt(%s,%d)=%d" % (self.iface.device.handle, self.addrout, res) res=usb.usb_resetep(self.iface.device.handle, self.addrout) if TRACE: print "usb_resetep(%s,%d)=%d" % (self.iface.device.handle, self.addrout, res) def read(self,howmuch=1024, timeout=1000): data="" while howmuch>0: res,str=usb.usb_bulk_read_wrapped(self.iface.device.handle, self.addrin, self.insize, int(timeout)) if TRACE: print "usb_bulk_read(%s,%d,%d,%d)=%d,%s" % (self.iface.device.handle, self.addrin, self.insize, timeout, res, `str`) if res<0: if len(data)>0: return data e=USBException() raise e if res==0: return data data+=str howmuch-=len(str) if howmuch and len(str)!=self.insize: # short read, no more data break return data def write(self, data, timeout=1000): first=True while first or len(data): first=False res=usb.usb_bulk_write(self.iface.device.handle, self.addrout, data[:min(len(data), self.outsize)], timeout) if TRACE: print "usb_bulk_write(%s, %d, %d bytes, %d)=%d" % (self.iface.device.handle, self.addrout, min(len(data), self.outsize), timeout, res) if res<0: raise USBException() data=data[res:] def close(self): if self.claimed: self.resetep() self.usb.usb_release_interface(self.iface.device.handle, self.iface.number()) self.usb=None self.claimed=False def OpenDevice(vendorid, productid, interfaceid): for bus in AllBusses(): for device in bus.devices(): if device.vendor()==vendorid and device.product()==productid: for iface in device.interfaces(): if iface.number()==interfaceid: return iface.openbulk() raise ValueError( "vendor 0x%x product 0x%x interface %d not found" % (vendorid, productid, interfaceid)) def classtostring(klass): "Returns the class as a string" for sym in dir(usb): if sym.startswith("USB_CLASS_") and klass==getattr(usb, sym): return sym return `klass` def eptypestring(type): for sym in dir(USBEndpoint): if sym.startswith("TYPE_") and type==getattr(USBEndpoint, sym): return sym return `type` def AllBusses(): bus=usb.usb_get_busses() while bus is not None: yield USBBus(bus) bus=bus.next raise StopIteration() # initialise usb.usb_init() # sadly no way to tell if this has failed if __name__=='__main__': bus,dev=UpdateLists() print "%d busses, %d devices" % (bus,dev) for bus in AllBusses(): print bus.name() for device in bus.devices(): print " %x/%x %s" % (device.vendor(), device.product(), device.name()) klass,subclass,proto=device.classdetails() print " class %s subclass %d protocol %d" % (classtostring(klass), subclass, proto) for i in device.vendorstring, device.productstring, device.serialnumber: try: print " "+i() except: pass for iface in device.interfaces(): print " interface number %d" % (iface.number(),) klass,subclass,proto=iface.classdetails() print " class %s subclass %d protocol %d" % (classtostring(klass), subclass, proto) for ep in iface.endpoints(): print " endpointaddress 0x%x" % (ep.address(),) print " "+eptypestring(ep.type()), if ep.isbulk(): if ep.direction()==ep.IN: print "IN" else: print "OUT" else: print print "" print "" print "" print "opening device" cell=OpenDevice(0x1004, 0x6000, 2) print "device opened, about to write" cell.write("\x59\x0c\xc4\xc1\x7e") print "wrote, about to read" res=cell.read(12) print "read %d bytes" % (len(res),) print `res` cell.close() bitpim-1.0.7+dfsg1/src/native/usb/libusb.i0000644001616600161660000000536210725122514016454 0ustar amuamu%module libusb %{ #include "usb.h" // deal with data being returned int usb_bulk_read_wrapped(usb_dev_handle *dev, int ep, char *bytesoutbuffer, int *bytesoutbuffersize, int timeout) { int res; Py_BEGIN_ALLOW_THREADS res=usb_bulk_read(dev, ep, bytesoutbuffer, *bytesoutbuffersize, timeout); Py_END_ALLOW_THREADS if (res<=0) *bytesoutbuffersize=0; else *bytesoutbuffersize=res; return res; } int usb_interrupt_read_wrapped(usb_dev_handle *dev, int ep, char *bytesoutbuffer, int *bytesoutbuffersize, int timeout) { int res; Py_BEGIN_ALLOW_THREADS res=usb_interrupt_read(dev, ep, bytesoutbuffer, *bytesoutbuffersize, timeout); Py_END_ALLOW_THREADS if (res<=0) *bytesoutbuffersize=0; else *bytesoutbuffersize=res; return res; } // access a pointer as an array struct usb_interface *usb_interface_index(struct usb_interface *iface, unsigned index) { return iface+index; } struct usb_endpoint_descriptor *usb_endpoint_descriptor_index(struct usb_endpoint_descriptor *ep, unsigned index) { return ep+index; } struct usb_interface_descriptor *usb_interface_descriptor_index(struct usb_interface_descriptor *iface, unsigned index) { return iface+index; } %} // we don't modify any fields %immutable; // cstring manipulation %include cstring.i // in usb_get_string{,_simple} %cstring_output_maxsize(char *buf, size_t buflen); // usb_bulk_write - binary string with length %apply (char *STRING, int LENGTH) { (char *bytes, int size) } // usb_interrupt_write - binary string with length %apply (char *STRING, int LENGTH) { (char *bytes, int size) } // these types occur in Linux and SWIG doesn't know they are ints unless we tell typedef unsigned short u_int16_t; typedef unsigned char u_int8_t; // Debian's usb.h now uses these type names instead for ANSI compliance, // but SWIG doesn't automatically recognize them either. typedef unsigned short uint16_t; typedef unsigned char uint8_t; #define __attribute__(x) %include usb.h // various wrappers and convenience functions // these help treat pointers as arrays struct usb_interface *usb_interface_index(struct usb_interface *iface, unsigned index); struct usb_endpoint_descriptor *usb_endpoint_descriptor_index(struct usb_endpoint_descriptor *ep, unsigned index); struct usb_interface_descriptor *usb_interface_descriptor_index(struct usb_interface_descriptor *iface, unsigned index); // a wrapper so that we can deal with buffer length issues %cstring_output_withsize(char *bytesoutbuffer, int *bytesoutbuffersize); int usb_bulk_read_wrapped(struct usb_dev_handle *dev, int ep, char *bytesoutbuffer, int *bytesoutbuffersize, int timeout); int usb_interrupt_read_wrapped(struct usb_dev_handle *dev, int ep, char *bytesoutbuffer, int *bytesoutbuffersize, int timeout); bitpim-1.0.7+dfsg1/src/native/usb/__init__.py0000644001616600161660000000076410403504744017136 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### ### This software is under the same license as libusb ### ### $Id: styles.xy,v 1.4 2003/12/07 06:23:44 rogerb Exp$ # Drop libusb support for Windows import sys if sys.platform=='win32': raise ImportError("libusb not supported on win32") # Keep python happy that this is a module # bring everything into ournamespace from usb import * # if this is unavailable, the above would have failed anyway import libusb bitpim-1.0.7+dfsg1/src/native/wab/0000755001616600161660000000000011330124400014761 5ustar amuamubitpim-1.0.7+dfsg1/src/native/wab/pywab.swg0000644001616600161660000000014407744737136016662 0ustar amuamu%module pywabimpl %{ #include #include #include "pywab.h" %} %include pywab.hbitpim-1.0.7+dfsg1/src/native/wab/pywab.h0000644001616600161660000003217007746441474016314 0ustar amuamu/* * $Id: pywab.h 449 2003-10-25 09:32:44Z rogerb $ * * This file is parsed by both Swig and C++ * */ #ifdef SWIG %immutable; // nothing is modifiable %include "cstring.i" #endif class entryid { void *data; size_t len; entryid(entryid &); // copying and assignment not allowed void operator=(entryid &); public: entryid(): data(0), len(0) { } #ifndef SWIG entryid(void *, size_t); #endif ~entryid(); #ifndef SWIG LPENTRYID getdata() const { return (LPENTRYID)data; } size_t getlen() const { return len; } #endif }; #ifndef SWIG class refcounter { int count; public: refcounter() : count(0) {} void AddRef() { count++; } bool Release() { count--; return count==0; } }; #endif /* One of these is created by the Initialize function */ class wabmodule { HMODULE hModule; LPWABOPEN openfn; LPADRBOOK addrbook; LPWABOBJECT wabobject; refcounter *refcount; // private constructor wabmodule(HMODULE &hm, LPWABOPEN &op, LPADRBOOK &bk, LPWABOBJECT &wo) : hModule(hm), openfn(op), addrbook(bk), wabobject(wo), refcount(new refcounter()) { refcount->AddRef(); } friend wabmodule* Initialize(bool, const char *); public: #ifndef SWIG wabmodule(const wabmodule&); void FreeObject(LPSRowSet rows); void FreeObject(LPSPropTagArray ta); #endif ~wabmodule(); #ifdef SWIG %newobject getpab; %newobject openobject; #endif entryid *getpab(void); class wabobject *openobject(const entryid&); }; class wabobject { LPUNKNOWN iface; ULONG type; class wabmodule module; wabobject(wabobject&); //copying and assignment not allowed void operator=(wabobject&); // private contstructor wabobject(const wabmodule& mod, ULONG t, LPUNKNOWN iface); friend class wabmodule; public: ~wabobject(); unsigned long gettype() const { return type; } #ifdef SWIG %newobject getcontentstable; #endif class wabtable* getcontentstable(unsigned long flags); }; class wabtable { LPMAPITABLE table; class wabmodule module; wabtable(wabtable&); //copying and assignment not allowed void operator=(wabtable&); // private constructor wabtable(const wabmodule &mod, LPMAPITABLE t) : table(t), module(mod) {} friend class wabobject; public: #ifdef SWIG %newobject makeentryid; %cstring_output_allocate_size(char **TheData, size_t *TheLength,); #endif entryid* makeentryid(unsigned long pointer, unsigned long len); void makebinarystring(char **TheData, size_t *TheLength, unsigned long pointer, unsigned long len); ~wabtable(); int getrowcount(); bool enableallcolumns(); bool enablecolumns(class proptagarray &); #ifdef SWIG %newobject getnextrow; #endif class wabrow* getnextrow(); }; class proptagarray { ULONG *array; friend class wabtable; public: inline proptagarray(unsigned length) : array(new ULONG[length+1]) {array[0]=length;} inline ~proptagarray() { delete [] array; } inline void setitem(unsigned which, unsigned long value) { array[which+1]=value; } }; class wabrow { LPSRowSet rowset; class wabmodule module; wabrow(wabrow&); //copying and assignment not allowed void operator=(wabrow&); // private constructor wabrow(const wabmodule &mod, LPSRowSet r) : rowset(r), module(mod) {} friend class wabtable; public: ~wabrow(); unsigned numproperties(); const char *getpropertyname(unsigned which); const char *getpropertyvalue(unsigned which); bool IsEmpty(); }; #ifdef SWIG // this is here to convince swig to make a class named constants with the various // members. we do some sed magic on the swig generated code to get the correct // values class constants { constants(); ~constants(); public: // PR_CONTAINER_FLAGS static enum {AB_FIND_ON_OPEN, AB_MODIFIABLE, AB_RECIPIENTS, AB_SUBCONTAINERS, AB_UNMODIFIABLE} ; // IABContainer::GetContentsTable static enum {WAB_LOCAL_CONTAINERS, WAB_PROFILE_CONTENTS} ; // PR_OBJECT_TYPE static enum {MAPI_STORE, MAPI_ADDRBOOK, MAPI_FOLDER, MAPI_ABCONT, MAPI_MESSAGE, MAPI_MAILUSER, MAPI_ATTACH, MAPI_DISTLIST, MAPI_PROFSECT, MAPI_STATUS, MAPI_SESSION, MAPI_FORMINFO }; // PR_DISPLAY_TYPE static enum {DT_AGENT, DT_DISTLIST, DT_FOLDER, DT_FOLDER_LINK, DT_FORUM, DT_GLOBAL, DT_LOCAL, DT_MAILUSER, DT_MODIFIABLE, DT_NOT_SPECIFIC, DT_ORGANIZATION, DT_PRIVATE_DISTLIST, DT_REMOTE_MAILUSER, DT_WAN}; // All the pr names - generated with 'genprops spew' static enum { PR_7BIT_DISPLAY_NAME, PR_AB_PROVIDER_ID, PR_ACCESS, PR_ACCESS_LEVEL, PR_ACCOUNT, PR_ACCOUNT_A, PR_ACCOUNT_W, PR_ADDRTYPE, PR_ADDRTYPE_A, PR_ADDRTYPE_W, PR_ALTERNATE_RECIPIENT, PR_ANR, PR_ANR_A, PR_ANR_W, PR_ASSISTANT, PR_ASSISTANT_A, PR_ASSISTANT_TELEPHONE_NUMBER, PR_ASSISTANT_TELEPHONE_NUMBER_A, PR_ASSISTANT_TELEPHONE_NUMBER_W, PR_ASSISTANT_W, PR_ASSOC_CONTENT_COUNT, PR_BEEPER_TELEPHONE_NUMBER, PR_BEEPER_TELEPHONE_NUMBER_A, PR_BEEPER_TELEPHONE_NUMBER_W, PR_BIRTHDAY, PR_BUSINESS2_TELEPHONE_NUMBER, PR_BUSINESS2_TELEPHONE_NUMBER_A, PR_BUSINESS2_TELEPHONE_NUMBER_W, PR_BUSINESS_ADDRESS_CITY, PR_BUSINESS_ADDRESS_COUNTRY, PR_BUSINESS_ADDRESS_POSTAL_CODE, PR_BUSINESS_ADDRESS_POST_OFFICE_BOX, PR_BUSINESS_ADDRESS_POST_OFFICE_BOX_A, PR_BUSINESS_ADDRESS_POST_OFFICE_BOX_W, PR_BUSINESS_ADDRESS_STATE_OR_PROVINCE, PR_BUSINESS_ADDRESS_STREET, PR_BUSINESS_FAX_NUMBER, PR_BUSINESS_FAX_NUMBER_A, PR_BUSINESS_FAX_NUMBER_W, PR_BUSINESS_HOME_PAGE, PR_BUSINESS_HOME_PAGE_A, PR_BUSINESS_HOME_PAGE_W, PR_BUSINESS_TELEPHONE_NUMBER, PR_BUSINESS_TELEPHONE_NUMBER_A, PR_BUSINESS_TELEPHONE_NUMBER_W, PR_CALLBACK_TELEPHONE_NUMBER, PR_CALLBACK_TELEPHONE_NUMBER_A, PR_CALLBACK_TELEPHONE_NUMBER_W, PR_CAR_TELEPHONE_NUMBER, PR_CAR_TELEPHONE_NUMBER_A, PR_CAR_TELEPHONE_NUMBER_W, PR_CELLULAR_TELEPHONE_NUMBER, PR_CELLULAR_TELEPHONE_NUMBER_A, PR_CELLULAR_TELEPHONE_NUMBER_W, PR_CHILDRENS_NAMES, PR_CHILDRENS_NAMES_A, PR_CHILDRENS_NAMES_W, PR_COMMENT, PR_COMMENT_A, PR_COMMENT_W, PR_COMPANY_MAIN_PHONE_NUMBER, PR_COMPANY_MAIN_PHONE_NUMBER_A, PR_COMPANY_MAIN_PHONE_NUMBER_W, PR_COMPANY_NAME, PR_COMPANY_NAME_A, PR_COMPANY_NAME_W, PR_COMPUTER_NETWORK_NAME, PR_COMPUTER_NETWORK_NAME_A, PR_COMPUTER_NETWORK_NAME_W, PR_CONTACT_ADDRTYPES, PR_CONTACT_ADDRTYPES_A, PR_CONTACT_ADDRTYPES_W, PR_CONTACT_DEFAULT_ADDRESS_INDEX, PR_CONTACT_EMAIL_ADDRESSES, PR_CONTACT_EMAIL_ADDRESSES_A, PR_CONTACT_EMAIL_ADDRESSES_W, PR_CONTACT_ENTRYIDS, PR_CONTACT_VERSION, PR_CONTAINER_CLASS, PR_CONTAINER_CLASS_A, PR_CONTAINER_CLASS_W, PR_CONTAINER_CONTENTS, PR_CONTAINER_FLAGS, PR_CONTAINER_HIERARCHY, PR_CONTAINER_MODIFY_VERSION, PR_CONTENTS_SORT_ORDER, PR_CONTENT_COUNT, PR_CONTENT_UNREAD, PR_CONVERSION_PROHIBITED, PR_COUNTRY, PR_COUNTRY_A, PR_COUNTRY_W, PR_CREATE_TEMPLATES, PR_CREATION_TIME, PR_CUSTOMER_ID, PR_CUSTOMER_ID_A, PR_CUSTOMER_ID_W, PR_DEFAULT_VIEW_ENTRYID, PR_DEF_CREATE_DL, PR_DEF_CREATE_MAILUSER, PR_DEPARTMENT_NAME, PR_DEPARTMENT_NAME_A, PR_DEPARTMENT_NAME_W, PR_DEPTH, PR_DETAILS_TABLE, PR_DISCLOSE_RECIPIENTS, PR_DISPLAY_NAME, PR_DISPLAY_NAME_A, PR_DISPLAY_NAME_PREFIX, PR_DISPLAY_NAME_PREFIX_A, PR_DISPLAY_NAME_PREFIX_W, PR_DISPLAY_NAME_W, PR_DISPLAY_TYPE, PR_EMAIL_ADDRESS, PR_EMAIL_ADDRESS_A, PR_EMAIL_ADDRESS_W, PR_ENTRYID, PR_FOLDER_ASSOCIATED_CONTENTS, PR_FOLDER_TYPE, PR_FTP_SITE, PR_FTP_SITE_A, PR_FTP_SITE_W, PR_GENDER, PR_GENERATION, PR_GENERATION_A, PR_GENERATION_W, PR_GIVEN_NAME, PR_GIVEN_NAME_A, PR_GIVEN_NAME_W, PR_GOVERNMENT_ID_NUMBER, PR_GOVERNMENT_ID_NUMBER_A, PR_GOVERNMENT_ID_NUMBER_W, PR_HOBBIES, PR_HOBBIES_A, PR_HOBBIES_W, PR_HOME2_TELEPHONE_NUMBER, PR_HOME2_TELEPHONE_NUMBER_A, PR_HOME2_TELEPHONE_NUMBER_W, PR_HOME_ADDRESS_CITY, PR_HOME_ADDRESS_CITY_A, PR_HOME_ADDRESS_CITY_W, PR_HOME_ADDRESS_COUNTRY, PR_HOME_ADDRESS_COUNTRY_A, PR_HOME_ADDRESS_COUNTRY_W, PR_HOME_ADDRESS_POSTAL_CODE, PR_HOME_ADDRESS_POSTAL_CODE_A, PR_HOME_ADDRESS_POSTAL_CODE_W, PR_HOME_ADDRESS_POST_OFFICE_BOX, PR_HOME_ADDRESS_POST_OFFICE_BOX_A, PR_HOME_ADDRESS_POST_OFFICE_BOX_W, PR_HOME_ADDRESS_STATE_OR_PROVINCE, PR_HOME_ADDRESS_STATE_OR_PROVINCE_A, PR_HOME_ADDRESS_STATE_OR_PROVINCE_W, PR_HOME_ADDRESS_STREET, PR_HOME_ADDRESS_STREET_A, PR_HOME_ADDRESS_STREET_W, PR_HOME_FAX_NUMBER, PR_HOME_FAX_NUMBER_A, PR_HOME_FAX_NUMBER_W, PR_HOME_TELEPHONE_NUMBER, PR_HOME_TELEPHONE_NUMBER_A, PR_HOME_TELEPHONE_NUMBER_W, PR_ICON, PR_INITIALS, PR_INITIALS_A, PR_INITIALS_W, PR_INSTANCE_KEY, PR_ISDN_NUMBER, PR_ISDN_NUMBER_A, PR_ISDN_NUMBER_W, PR_KEYWORD, PR_KEYWORD_A, PR_KEYWORD_W, PR_LANGUAGE, PR_LANGUAGE_A, PR_LANGUAGE_W, PR_LAST_MODIFICATION_TIME, PR_LOCALITY, PR_LOCALITY_A, PR_LOCALITY_W, PR_LOCATION, PR_LOCATION_A, PR_LOCATION_W, PR_MAIL_PERMISSION, PR_MANAGER_NAME, PR_MANAGER_NAME_A, PR_MANAGER_NAME_W, PR_MAPPING_SIGNATURE, PR_MHS_COMMON_NAME, PR_MHS_COMMON_NAME_A, PR_MHS_COMMON_NAME_W, PR_MIDDLE_NAME, PR_MIDDLE_NAME_A, PR_MIDDLE_NAME_W, PR_MINI_ICON, PR_MOBILE_TELEPHONE_NUMBER, PR_MOBILE_TELEPHONE_NUMBER_A, PR_MOBILE_TELEPHONE_NUMBER_W, PR_NICKNAME, PR_NICKNAME_A, PR_NICKNAME_W, PR_OBJECT_TYPE, PR_OFFICE2_TELEPHONE_NUMBER, PR_OFFICE2_TELEPHONE_NUMBER_A, PR_OFFICE2_TELEPHONE_NUMBER_W, PR_OFFICE_LOCATION, PR_OFFICE_LOCATION_A, PR_OFFICE_LOCATION_W, PR_OFFICE_TELEPHONE_NUMBER, PR_OFFICE_TELEPHONE_NUMBER_A, PR_OFFICE_TELEPHONE_NUMBER_W, PR_ORGANIZATIONAL_ID_NUMBER, PR_ORGANIZATIONAL_ID_NUMBER_A, PR_ORGANIZATIONAL_ID_NUMBER_W, PR_ORIGINAL_DISPLAY_NAME, PR_ORIGINAL_DISPLAY_NAME_A, PR_ORIGINAL_DISPLAY_NAME_W, PR_ORIGINAL_ENTRYID, PR_ORIGINAL_SEARCH_KEY, PR_OTHER_ADDRESS_CITY, PR_OTHER_ADDRESS_CITY_A, PR_OTHER_ADDRESS_CITY_W, PR_OTHER_ADDRESS_COUNTRY, PR_OTHER_ADDRESS_COUNTRY_A, PR_OTHER_ADDRESS_COUNTRY_W, PR_OTHER_ADDRESS_POSTAL_CODE, PR_OTHER_ADDRESS_POSTAL_CODE_A, PR_OTHER_ADDRESS_POSTAL_CODE_W, PR_OTHER_ADDRESS_POST_OFFICE_BOX, PR_OTHER_ADDRESS_POST_OFFICE_BOX_A, PR_OTHER_ADDRESS_POST_OFFICE_BOX_W, PR_OTHER_ADDRESS_STATE_OR_PROVINCE, PR_OTHER_ADDRESS_STATE_OR_PROVINCE_A, PR_OTHER_ADDRESS_STATE_OR_PROVINCE_W, PR_OTHER_ADDRESS_STREET, PR_OTHER_ADDRESS_STREET_A, PR_OTHER_ADDRESS_STREET_W, PR_OTHER_TELEPHONE_NUMBER, PR_OTHER_TELEPHONE_NUMBER_A, PR_OTHER_TELEPHONE_NUMBER_W, PR_PAGER_TELEPHONE_NUMBER, PR_PAGER_TELEPHONE_NUMBER_A, PR_PAGER_TELEPHONE_NUMBER_W, PR_PERSONAL_HOME_PAGE, PR_PERSONAL_HOME_PAGE_A, PR_PERSONAL_HOME_PAGE_W, PR_POSTAL_ADDRESS, PR_POSTAL_ADDRESS_A, PR_POSTAL_ADDRESS_W, PR_POSTAL_CODE, PR_POSTAL_CODE_A, PR_POSTAL_CODE_W, PR_POST_OFFICE_BOX, PR_POST_OFFICE_BOX_A, PR_POST_OFFICE_BOX_W, PR_PREFERRED_BY_NAME, PR_PREFERRED_BY_NAME_A, PR_PREFERRED_BY_NAME_W, PR_PRIMARY_CAPABILITY, PR_PRIMARY_FAX_NUMBER, PR_PRIMARY_FAX_NUMBER_A, PR_PRIMARY_FAX_NUMBER_W, PR_PRIMARY_TELEPHONE_NUMBER, PR_PRIMARY_TELEPHONE_NUMBER_A, PR_PRIMARY_TELEPHONE_NUMBER_W, PR_PROFESSION, PR_PROFESSION_A, PR_PROFESSION_W, PR_PROVIDER_DISPLAY, PR_PROVIDER_DISPLAY_A, PR_PROVIDER_DISPLAY_W, PR_PROVIDER_DLL_NAME, PR_PROVIDER_DLL_NAME_A, PR_PROVIDER_DLL_NAME_W, PR_PROVIDER_ORDINAL, PR_PROVIDER_UID, PR_RADIO_TELEPHONE_NUMBER, PR_RADIO_TELEPHONE_NUMBER_A, PR_RADIO_TELEPHONE_NUMBER_W, PR_RECIPIENT_TYPE, PR_RECORD_KEY, PR_RESOURCE_FLAGS, PR_ROWID, PR_ROW_TYPE, PR_SEARCH, PR_SEARCH_KEY, PR_SELECTABLE, PR_SEND_INTERNET_ENCODING, PR_SEND_RICH_INFO, PR_SPOUSE_NAME, PR_SPOUSE_NAME_A, PR_SPOUSE_NAME_W, PR_STATE_OR_PROVINCE, PR_STATE_OR_PROVINCE_A, PR_STATE_OR_PROVINCE_W, PR_STATUS, PR_STORE_ENTRYID, PR_STORE_RECORD_KEY, PR_STREET_ADDRESS, PR_STREET_ADDRESS_A, PR_STREET_ADDRESS_W, PR_SUBFOLDERS, PR_SURNAME, PR_SURNAME_A, PR_SURNAME_W, PR_TELEX_NUMBER, PR_TELEX_NUMBER_A, PR_TELEX_NUMBER_W, PR_TEMPLATEID, PR_TITLE, PR_TITLE_A, PR_TITLE_W, PR_TRANSMITABLE_DISPLAY_NAME, PR_TRANSMITABLE_DISPLAY_NAME_A, PR_TRANSMITABLE_DISPLAY_NAME_W, PR_TTYTDD_PHONE_NUMBER, PR_TTYTDD_PHONE_NUMBER_A, PR_TTYTDD_PHONE_NUMBER_W, PR_USER_CERTIFICATE, PR_USER_X509_CERTIFICATE, PR_WEDDING_ANNIVERSARY, }; // generated with genprops spew static enum { MAPI_E_AMBIGUOUS_RECIP, MAPI_E_BAD_CHARWIDTH, MAPI_E_BAD_COLUMN, MAPI_E_BAD_VALUE, MAPI_E_BUSY, MAPI_E_CALL_FAILED, MAPI_E_COLLISION, MAPI_E_COMPUTED, MAPI_E_CORRUPT_DATA, MAPI_E_DECLINE_COPY, MAPI_E_DISK_ERROR, MAPI_E_END_OF_SESSION, MAPI_E_EXTENDED_ERROR, MAPI_E_FAILONEPROVIDER, MAPI_E_FOLDER_CYCLE, MAPI_E_INTERFACE_NOT_SUPPORTED, MAPI_E_INVALID_BOOKMARK, MAPI_E_INVALID_ENTRYID, MAPI_E_INVALID_OBJECT, MAPI_E_INVALID_PARAMETER, MAPI_E_INVALID_TYPE, MAPI_E_LOGON_FAILED, MAPI_E_MISSING_REQUIRED_COLUMN, MAPI_E_NETWORK_ERROR, MAPI_E_NOT_ENOUGH_DISK, MAPI_E_NOT_ENOUGH_MEMORY, MAPI_E_NOT_ENOUGH_RESOURCES, MAPI_E_NOT_FOUND, MAPI_E_NOT_INITIALIZED, MAPI_E_NO_ACCESS, MAPI_E_NO_SUPPORT, MAPI_E_OBJECT_CHANGED, MAPI_E_OBJECT_DELETED, MAPI_E_SESSION_LIMIT, MAPI_E_STRING_TOO_LONG, MAPI_E_TABLE_EMPTY, MAPI_E_TABLE_TOO_BIG, MAPI_E_TIMEOUT, MAPI_E_TOO_BIG, MAPI_E_TOO_COMPLEX, MAPI_E_TYPE_NO_SUPPORT, MAPI_E_UNABLE_TO_ABORT, MAPI_E_UNABLE_TO_COMPLETE, MAPI_E_UNCONFIGURED, MAPI_E_UNEXPECTED_ID, MAPI_E_UNEXPECTED_TYPE, MAPI_E_UNKNOWN_ENTRYID, MAPI_E_UNKNOWN_FLAGS, MAPI_E_USER_CANCEL, MAPI_E_VERSION, MAPI_W_APPROX_COUNT, MAPI_W_ERRORS_RETURNED, MAPI_W_NO_SERVICE, MAPI_W_PARTIAL_COMPLETION, MAPI_W_POSITION_CHANGED, }; }; #endif #ifdef SWIG %newobject Initialize; #endif wabmodule* Initialize(bool enableprofiles=true, const char *INPUT=NULL); extern char *errorstring; extern unsigned long errorcode; bitpim-1.0.7+dfsg1/src/native/wab/p2econfig.py0000644001616600161660000000013707746441436017243 0ustar amuamufrom distutils.core import setup import py2exe setup(name="wabby", scripts=['wab.py']) bitpim-1.0.7+dfsg1/src/native/wab/unapply.sed0000644001616600161660000000004107746441552017173 0ustar amuamus/apply.\([^,]*\),args/\1(*args/gbitpim-1.0.7+dfsg1/src/native/wab/test.WAB0000644001616600161660000063023007744737136016335 0ustar amuamuœËËuÒ‘XÀOyV¤_g H¤ ЄdD ЄÌЄÌä!Є˜´¦Є„+ ôÞ¤ ÀF€32854€32855€32856€32857€32812€32813€32814€328022„Á…вª<öv €32769€32770€32771€32772€32773 €32774 €32775 €32776 €32777 €32778à~­+«6Ñ›¬ Éœ‹€MsgrID'%X„YZc,d`.e¶*f-gX/ZZZZZZZZZZZZZZZZb<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#b<#Another one–¨#–Œçx‚ t#cBartholemew Howesx 0x YFrank Dobson‹x ˆñœEx @x XIn Another One– ºx–x x–x2–à1–ein yet morex–D–x–x–x–x–x–fJulla Kalerrrvo Pelax øºx ZMain Identity's Contacts*x*this is in sharedx–øD–x x–x–HD–Xì gyet moreŒç`C t,d¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8¬…Èm­ˆœˆœ°IÀ0œÄî5Ô> ¸0 x 8Dobsonÿÿÿçìðø. XHowesÿÿÿçìðø. YPelaÿÿÿçìðø. ZPelaÿÿÿçìðø. ZPelaÿÿÿçìðø. ZPelaÿÿÿçìðø. ZBartholemewHñäáçw ÿÿÿˆñˆñYFrankÜ«çw%#œEHñäáçw œEÿÿÿˆñˆñXJukkaÜ«çw65ÅHñäáçw ÅÿÿÿˆñˆñZOneÜ«çwQp Hñäáçw  ÿÿÿˆñŠñVOneÜ«çwQp Hñäáçw  ÿÿÿˆñŠñVOneÜ«çwQp Hñäáçw  ÿÿÿˆñŠñVabcd@example.comˆñìòÀõwX¤çwxCŽÄ5Xabcde@cs.tut.fiňñìòÀõwX¤çwxCŽÄ5Zbart@netscape.comˆñìòÀõwX¤çwxCŽÄ5Yin another oneðˆúw02–ÿÿÿÿ–02–ein yet more@–Üúðˆúwxõwÿÿÿÿ–Mfthis is in sharedD–gwxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows.wxPython-users@lists.wxwindows. $$:@0€€ € €fþ0ÿ@0êQÙö«nÀN{2EF50F84-DA4A-419B-9B06-6EC140EF16B7}€ €N{2EF50F84-DA4A-419B-9B06-6EC140EF16B7} €fa      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abþ02Main Identity's Contactsÿ ± €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0,Ï·ä¬nÃ0konkew@rpi.edu0 SMTP0Warren Konkelÿþ Ù €@000þ0ÿ €!À‘­ÓQϤ©ªGú¤@0Lš|â®nÃ0Rsubmit.q64fIul9z3J6vzNI@spam.spamcop.net0spamcopþ0 SMTPÿ © €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0@]EoÃ0*neon98rt@hotmail.com0 SMTP0c pÿþ ÿ €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0–ûËNoÃ0Dbitpim-user@lists.sourceforge.net0 SMTP0Dbitpim-user@lists.sourceforge.netÿþ ¿ €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0BX/roÃ0"bob@cringely.com0 SMTP0&Robert X. Cringelyÿþ  €@000þ0ÿ €!À‘­ÓQϤ©ªGú¤@0bM€oÃ0FwxPython-users@lists.wxwindows.org0FwxPython-users@lists.wxwindows.orgþ0 SMTPÿ  Ó €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0¤Vlogistix@cathoderaymission.net0 SMTP0logistixÿ þ  Ë €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0BC!™ÚpÃ0*webmaster@python.org0 SMTP0*webmaster@python.orgÿ þ  ¿ €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0ž ¤ÞâpÃ0$omnikron@lvcm.com0 SMTP0$omnikron@lvcm.comÿ þ  €@000þ0ÿ €!À‘­ÓQϤ©ªGú¤@0Hå™épÃ0Fanthemion-devtools@yahoogroups.com0Fanthemion-devtools@yahoogroups.comþ0 SMTPÿ Ï €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0¦T›:vqÃ0,odye@bellatlantic.net0 SMTP0,odye@bellatlantic.netÿþ µ €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0溟҃qÃ0,rogerb@rogerbinns.com0 SMTP0grotgrotÿþ ¹ €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0JF½†qÃ0&W.Koster@rc.rug.nl0 SMTP0Willem Kosterÿþ à €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0ªÁÃëŠqÃ0&AYoung@rainbow.com0 SMTP0&AYoung@rainbow.comÿþ Ï €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0ªÁÃëŠqÃ0,chris.holland@cox.net0 SMTP0,chris.holland@cox.netÿþ ó €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0`ÎQ?rÃ0>imapspambegone@yahoogroups.com0 SMTP0>imapspambegone@yahoogroups.comÿþ Ë €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0¼Ê¬×?rÃ0*krisdr@optonline.net0 SMTP0*krisdr@optonline.netÿþ å €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0€ÖÑ[NrÃ06admin@rembrandtstudios.com0 SMTP08Rembrandt Photography & DVDÿþ Õ €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0ŽwÁ·ŠrÃ0<scott.stephenson@adelphia.net0 SMTP0"Scott Stephensonÿþ ³ €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0ί›rÃ0JOgden@aol.com0 SMTP0JOgden@aol.comÿþ µ €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0*öhl"sÃ0mct@toren.net0 SMTP0"Michael C. Torenÿþ Í €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0tš‰=sÃ08guyc@mainspringventures.com0 SMTP0Guy Churchwardÿþ ¿ €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0º1ŠŠsÃ0*lorie@tarantella.com0 SMTP0Loretta Goudieÿþ Å €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0üçRÎÐsÃ0.sylviaj@tarantella.com0 SMTP0 Sylvia Johnstonÿþ à €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0¦“štÃ0&MickeyM108@aol.com0 SMTP0&MickeyM108@aol.comÿþ Á €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0A† ó'tÃ00davidcougle@hotmail.com0 SMTP0David Cougleÿþ  €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0OÑ*6tÃ0Fbitpim-devel@lists.sourceforge.net0 SMTP0Fbitpim-devel@lists.sourceforge.netÿþ  µ €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0@•ŠG«tÃ0,tbain@alumni.duke.edu0 SMTP0Tim Bainÿ þ! # €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0Ä·›¶ãtÃ0Vctypes-devel-request@lists.sourceforge.net0 SMTP0Vctypes-devel-request@lists.sourceforge.netÿ!þ" # €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0ø÷œmätÃ0Vctypes-users-request@lists.sourceforge.net0 SMTP0Vctypes-users-request@lists.sourceforge.netÿ"þ$ Ÿ €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0è7Ýp.vÃ0”jrefinfo-sc.1063041997.mfghlcpgkgpbjolmplcn-rogerb=rogerbinns.com@ssr.com0 SMTP0”jrefinfo-sc.1063041997.mfghlcpgkgpbjolmplcn-rogerb=rogerbinns.com@ssr.comÿ$þ% ± €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0~T®VovÃ0jra@samba.org0 SMTP0Jeremy Allisonÿ%þ& ¿ €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0Bœ¾„vÃ0$groon2k@yahoo.com0 SMTP0$groon2k@yahoo.comÿ&þ' Ñ €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0pu3ÑŽvÃ0Bscottcraig@users.sourceforge.net0 SMTP0Scott Craigÿ'þ( Á €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0¼@!¿hwÃ0.ForgivenByJC@nc.rr.com0 SMTP0John Franklinÿ(þ) Ë €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0Êj—êÙwÃ0*gary@leightworks.com0 SMTP0*gary@leightworks.comÿ)þ* Ç €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0®Øƒ²ÝwÃ00noreply@sourceforge.net0 SMTP0 SourceForge.netÿ*þ+ ­ €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0è–¼`€xÃ0"rshapiro@bbn.com0 SMTP0R Shapiroÿ+þ, · €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0Xža›xÃ0(scott.craig@shaw.ca0 SMTP0Scott Craigÿ,þ- ï €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0Ü­ÎzÃ0<vx4400support@yahoogroups.com0 SMTP0<vx4400support@yahoogroups.comÿ-þ. ¿ €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0Èx"{Ã0 etc@jeffven.com0 SMTP0(ron (etc) jeffries ÿ.þ/ à €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0ìXGµ´{Ã0&casey.craig@gm.com0 SMTP0&casey.craig@gm.comÿ/þ0 Á €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0jÜçÓ|Ã00John.Guislin@citrix.com0 SMTP0John Guislinÿ0þ1 Ó €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0ˆ›øh[}Ã0.wrobertdavis@yahoo.com0 SMTP0.wrobertdavis@yahoo.comÿ1þ2 ¯ €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0@ö§š}Ã0$clee@svapanti.com0 SMTP0christinaÿ2þ3 ã €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0”ÖS~Ã06Thomas.Raskin@wakefern.com0 SMTP06Thomas.Raskin@wakefern.comÿ3þ4 Ï €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0àäJG~Ã0"mcyman@yahoo.com0 SMTP06Robert and Peggy Pohorenceÿ4þ5 ³ €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0B$Y=ÍÃ00pepe_le_pew70@yahoo.com0 SMTP0 Tearsÿ5þ6 Ç €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0z±É¢ÍÃ00gpayet@localharvest.org0 SMTP0 Guillermo Payetÿ6þ7 ± €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0ÂÍÍáÃ0$tom@tomtracey.com0 SMTP0Tom Traceyÿ7þ8 • €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0“”#Ó€Ã0jk@lge.com0 SMTP0¬…Èm­ÿ8þ9 · €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0!YÒmÖ€Ã0(mwagman@charter.net0 SMTP0Mike Wagmanÿ9þ: ß €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0,¦Dà:Ã04exsquiddy@yahoogroups.com0 SMTP04exsquiddy@yahoogroups.comÿ:þ; ¡ €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0z )JÃ0tykim@lge.com0 SMTP0TY Kimÿ;þ< É €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0hËIJ5‚Ã02goldsobel@gseis.ucla.edu0 SMTP0 David Goldsobelÿ<þ= µ €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0ˆs´‚Ã0"cliechti@gmx.net0 SMTP0Chris Liechtiÿ=þ> ¿ €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0¸A²¶Ã‚Ã0*bfrazer@oasgroup.com0 SMTP0Brad W. Frazerÿ>þ? É €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0lH²ë‚Ã0*fortolanijr@kpmg.com0 SMTP0(OrtolaniJr, Frank Rÿ?þ@ é €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0žžo÷ë‚Ã0LPeter.Wurmsdobler@eurothermdrives.com0 SMTP0&Wurmsdobler, Peterÿ@þA  €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@06»eƒÃ0Lumlbuilder-user@lists.sourceforge.net0 SMTP0Lumlbuilder-user@lists.sourceforge.netÿAþB à €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0¶“M’ƒÃ0&neal@metaslash.com0 SMTP0&neal@metaslash.comÿBþC å €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0k7„X„Ã00guychurchward@yahoo.com0 SMTP0>Guy Churchward - Yahoo AccountÿCþD ã €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0œÆq]a„Ã06webmaster@straightdope.com0 SMTP06webmaster@straightdope.comÿDþE Ó €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0´’Ó_s„Ã0.tbeasley@yahoo-inc.com0 SMTP0.tbeasley@yahoo-inc.comÿEþF · €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0ò^Àn0…Ã0,reshapiro@comcast.net0 SMTP0R ShapiroÿFþG ¿ €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0Õâù…Ã0:wsanders.bob@bob.efgroup.com0 SMTP0swdev2ÿGþH Ó €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0ˆö 7ĆÃ0.scott159@optonline.net0 SMTP0.scott159@optonline.netÿHþI Ó €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0üdÇņÃ0@franklini@users.sourceforge.net0 SMTP0John FranklinÿIþJ Ñ €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0,bÒÿ†Ã0>sbrinson@warriorwebdesigns.com0 SMTP0Scott BrinsonÿJþK ß €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0d?ôÿ†Ã04Brianschula@bmcknight.net0 SMTP04Brianschula@bmcknight.netÿKþL © €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0úà‡Ý:ˆÃ0ftw@hp.com0 SMTP0Farrell WoodsÿLþM ¹ €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0"þZcˆÃ0.christina@svapanti.com0 SMTP0christinaÿMþN Ù €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0¼é|UqˆÃ02jzb@dissociatedpress.net0 SMTP00Joe 'Zonker' BrockmeierÿNþO » €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0j*ŒˆÃ0(agonzalez@yahoo.com0 SMTP0Alan GonzalezÿOþP ¯ €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0°“u,šˆÃ0&HondaMan@nc.rr.com0 SMTP0HondaManÿPþQ Ï €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0¢Ÿ`„©ˆÃ0,riss@lifeafternet.com0 SMTP0,riss@lifeafternet.comÿQþR Ý €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0|¢g‰Ã0,lcastro@scanda.com.mx0 SMTP0:Castro Skertchly Luis CarlosÿRþS Ë €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0Œ¥Ž3‰Ã0:sawecw@users.sourceforge.net0 SMTP0Stephen WoodÿSþT ½ €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0JŸIVd‰Ã00windwalker@adelphia.net0 SMTP0WindWalkerÿTþU ³ €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0pèr‰Ã0SD73TA@aol.com0 SMTP0SD73TA@aol.comÿUþV 00ÿ €::$::q:::0þ@0ÿV €!À‘­ÓQϤ©ªGú¤:T:My company$:980098098098: 908908908098098q::Another:One0One Anotherþ@0(q˜‹ÃW \\‰ÿ €q:U:00T:V:::0 :$:0`:a:b:_:c:::þ@0ÿW €!À‘­ÓQϤ©ªGú¤q:U:0 SMTP0email1T: SMTP SMTPV:$email1email2:My Surname:My Firstname00My Firstname My Surname :123123123123$:213123123120Some notes`:countrya:zipb: state_:In a cityc:An addrtess:"Company, company:Title,Title2þ@0¸ s˜‹ÃX LLÿ €q:U:00T:V:::0P:$:::)::þ@0ÿX €!À‘­ÓQϤ©ªGú¤q:U:0 SMTP0"abcd@example.comT: SMTP SMTPV:L"abcd@example.com"abcd@example.net:Dobson: Frank0Frank DobsonP:<http://home.example.net/~ancd$: +1-919-555-9564: +1-919-555-9515: +1-919-555-9515): 1234 Ford Drive:<Lotus Development Corporationþ@0žŽŒv˜‹ÃY €€á@0q:U:00T:V:ÿ::0P:Z:[:Y:]:::$::Q:':):@A:@B:M:X:H:0 €:þ@0ìóNËÃq:U:0 SMTP0$bart@netscape.comT: SMTPV:($bart@netscape.comÿY: Howes:Bartholemew0$Bartholemew HowesP:&http://homewebpageZ:reg[:zipY:Home cirty]:Home address:job title:<Netscape Communications Corp.$: +1-415-555-4164: +1-415-555-3419Q:2http://vusiness web page':Mountain View):.501 E. Middlefield Rd.@A:Ð&6RY…Ã@B:ÐfÁ$þÃM:X:$child1child2H:spouse0some notes €!À‘­ÓQϤ©ªGú¤: +1-415-555-3419þZ ttEÿ €::$::&:*:':):: :P:Z:[:Y:]:q:U:00T:V:D:::0þ@0ÿZ €!À‘­ÓQϤ©ªGú¤:Jsenior adviser / erityisasiantuntija:jTIEKE Finnish Information Society Development Centre$:"+358 9 5555 0399:"+358 9 5555 0397&:Finland*: 00100':Helsinki)::Salomonkatu 17 A, 10th floor:"+358 40 5555 617 : +358 9 555 2675P::http://www.cs.tut.fi/~abcde/Z:Finland[:FIN-02210Y: Espoo]:4Päivänsäteenkulla 9 as. 2q:U:0 SMTP0 abcde@cs.tut.fiT: SMTP SMTPV:F abcde@cs.tut.fiabcde@tieke.fiD: Abcde: Pela: Jukka0*Julla Kalerrrvo Pelaþ@0lÄ©x˜‹Ã[ DDéÿ €:$:):q:U:00T:V:::0:þ@0ÿ[ €!À‘­ÓQϤ©ªGú¤:,Microsoft Corporation$: +1-206-555-7329):$One Microsoft Wayq:U:0 SMTP0"user@example.comT: SMTPV:&"user@example.com: Bond: James0James Bond: +1-206-555-4544þ@0Ôzäy˜‹Ã\ É €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0¨l›‹Ã0.valladares@prodigy.net0 SMTP0$MILTON VALLADARESÿ\þ] à €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0˜H±}Û‹Ã0.kristena@whale-com.com0 SMTP0Kristen Axlineÿ]þ^ Ë €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0$¡hŒÃ0.somestranger@yahoo.com0 SMTP0&Claudio Tinnirelloÿ^þ_ ½ €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0’,b ŒÃ00whatzup_623@hotmail.com0 SMTP0Shawn Corpÿ_þ` Û €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0ö[ZÃ02natecars@natecarlson.com0 SMTP02natecars@natecarlson.comÿ`þa ± €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@06¸3ÿÇÃ0&a.baru@comcast.net0 SMTP0Alex Baruÿaþb ¹ €@0000ÿþ €!À‘­ÓQϤ©ªGú¤@0¼ÏÎŽŽÃ0(saw@genhomepage.com0 SMTP0Stephen Woodÿbþc º@0 € €fþ0ÿ@0LÔ†Ëà €N{00000000-0000-0000-0000-000000000000} €fþ0Another oneÿc $$[@0ÿ0þf € €€€@0LÔ†ËÃÿ02Main Identity's Contactsþfa      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab € €N{2EF50F84-DA4A-419B-9B06-6EC140EF16B7}€%À‘­ÓQϤ©ªGú¤c€N{2EF50F84-DA4A-419B-9B06-6EC140EF16B7}d ´@0 € €fþ0ÿ@0ô§î‹Ëà €N{00000000-0000-0000-0000-000000000000} €fþ0yet moreÿde ,, €@0q:U:00T:V:0ÿþ €!À‘­ÓQϤ©ªGú¤c@0 `Ç Q‘Ãq:U:0 SMTP0in another oneT: SMTPV:"in another one0In Another Oneÿeþc Â@0 € €fþ0ÿ@0LÔ†Ëà €N{00000000-0000-0000-0000-000000000000} €f eþ0Another oneÿcf ,, €@0q:U:00T:V:0ÿþ €!À‘­ÓQϤ©ªGú¤d@0"ÿ¨Q‘Ãq:U:0 SMTP0in yet moreT: SMTPV:in yet more0in yet moreÿfþd ¼@0 € €fþ0ÿ@0ô§î‹Ëà €N{00000000-0000-0000-0000-000000000000} €f fþ0yet moreÿdg ((ø@0q:U:00T:V:0ÿþ@0"„ôÝ]‘Ãq:U:0 SMTP0$this is in sharedT: SMTPV:($this is in shared0$this is in sharedÿgþbitpim-1.0.7+dfsg1/src/native/wab/genprops.py0000644001616600161660000000243607746441422017223 0ustar amuamu# $Id: genprops.py 447 2003-10-25 09:32:02Z rogerb $ # Generates the file used for listing property names errors=[] f=open(r"c:\projects\fixedwab\wabcode.h", "r") for line in f: line=line.split() if len(line)<3: continue if line[0]=='#define' and line[1].startswith('MAPI_'): l=line[1] errors.append(line[1]) f.close() errors.sort() props=[] f=open(r"c:\projects\fixedwab\wabtags.h", "r") for line in f: line=line.split() if len(line)<3: continue if line[0]=='#define' and line[1].startswith('PR_'): l=line[1] if l.startswith('PROP_ID_SECURE'): continue props.append(line[1]) f.close() props.sort() f=open("_genprops.h", "w") print >>f, "// AUTOMATICALLY GENERATED BY $Id: genprops.py 447 2003-10-25 09:32:02Z rogerb $ - do not edit" for i in props: print >>f, "PR(%s)," %(i,) f.close() def printlist(thelist): pos=0 for p in thelist: if pos==0: print " ", pos=2 if pos+len(p)>72: print "\n ", pos=2 print p+",", pos+=len(p)+2 print import sys if len(sys.argv)>1: if sys.argv[1]!='spew': print "Unknown argument", sys.argv[1] sys.exit(1) printlist(props) print printlist(errors) bitpim-1.0.7+dfsg1/src/native/wab/build.bat0000644001616600161660000000065707746436031016606 0ustar amuamugenprops.py "c:\program files\swig-1.3.19\swig.exe" -python -c++ -noexcept -o _pywabimpl.cpp pywab.swg sed -f unapply.sed < pywabimpl.py >xx.py del pywabimpl.py ren xx.py pywabimpl.py @rem remove our constants hackery sed s/constants:://g < _pywabimpl.cpp > pywabimpl.cpp @del _pywabimpl.cpp g++ -g -Wall -shared -L c:\python23\libs -I c:\python23\include -I c:\projects\fixedwab -o _pywabimpl.dll pywabimpl.cpp wab.cpp -lpython23bitpim-1.0.7+dfsg1/src/native/wab/wab.py0000644001616600161660000001204007746441633016133 0ustar amuamuimport pywabimpl class WABException(Exception): def __init__(self,str): Exception.__init__(self,str) class MAPIException(Exception): def __init__(self, code, str): self.code=code Exception.__init__(self,str) def doexception(): code=pywabimpl.cvar.errorcode for i in dir(constants): if (i.startswith('MAPI_E') or i.startswith('MAPI_W')) and \ getattr(constants,i)==code: raise MAPIException(code, i) raise WABException(pywabimpl.cvar.errorstring) constants=pywabimpl.constants class WAB: def __init__(self, enableprofiles=True, filename=None): if filename is None: filename="" # ::TODO:: - the filename is ignored if enableprofiles is true, so # exception if one is supplied # Double check filename exists if one is supplied since # the wab library doesn't actually error on non-existent file self._wab=pywabimpl.Initialize(enableprofiles, filename) if self._wab is None: raise doexception() def rootentry(self): return pywabimpl.entryid() def getpabentry(self): pe=self._wab.getpab() if pe is None: raise doexception() return pe def getrootentry(self): return pywabimpl.entryid() def openobject(self, entryid): x=self._wab.openobject(entryid) if x is None: raise doexception() if x.gettype()==constants.MAPI_ABCONT: return Container(x) return x class Table: def __init__(self, obj): self.obj=obj def __iter__(self): return self def enableallcolumns(self, bruteforce=False): if bruteforce: props=[] for i in dir(constants): if i.startswith('PR_'): if i.endswith("_A") or i.endswith("_W"): continue props.append(getattr(constants,i)) p=pywabimpl.proptagarray(len(props)) for num,value in zip(range(len(props)), props): p.setitem(num, value) if not self.obj.enablecolumns(p): raise doexception() else: if not self.obj.enableallcolumns(): raise doexception() def next(self): row=self.obj.getnextrow() if row is None: raise doexception() if row.IsEmpty(): raise StopIteration() # we return a dict, built from row res={} for i in range(row.numproperties()): k=row.getpropertyname(i) if len(k)==0: continue v=self._convertvalue(k, row.getpropertyvalue(i)) if v is not None: res[k]=v return res def count(self): i=self.obj.getrowcount() if i<0: raise doexception() return i def _convertvalue(self,key,v): x=v.find(':') t=v[:x] v=v[x+1:] if t=='int': return int(v) elif t=='string': return v elif t=='PT_ERROR': return None elif t=='bool': return bool(v) elif key=='PR_ENTRYID': v=v.split(',') return self.obj.makeentryid(int(v[0]), int(v[1])) elif t=='binary': v=v.split(',') return self.obj.makebinarystring(int(v[0]), int(v[1])) elif t=='strings': res=[] pos=0 while pos='0' and v[pos]<='9': ll=ll*10+int(v[pos]) pos+=1 assert v[pos]==':' pos+=1 res.append(v[pos:pos+ll]) pos+=ll return res print "Dunno how to handle key %s type %s value %s" % (key,t,v) return "%s:%s" % (t,v) class Container: def __init__(self, obj): self.obj=obj def items(self, flags=0): """Returns items in the container @param flags: WAB_LOCAL_CONTAINERS,WAB_PROFILE_CONTENTS """ x=self.obj.getcontentstable(flags) if x is None: raise doexception() return Table(x) if __name__=='__main__': import sys fn=None if len(sys.argv)>1: fn=sys.argv[1] wab=WAB(False, fn) else: wab=WAB() root=wab.openobject(wab.getrootentry()) for container in root.items(constants.WAB_LOCAL_CONTAINERS|constants.WAB_PROFILE_CONTENTS): print container['PR_DISPLAY_NAME'] people=wab.openobject(container['PR_ENTRYID']) items=people.items() items.enableallcolumns(True) # we use brute force since the correct WAB way doesn't work for i in items: print " ",i['PR_DISPLAY_NAME'] keys=i.keys() keys.sort() for k in keys: if k=='PR_DISPLAY_NAME': continue s=" "+k+" "+`i[k]` if len(s)>78: s=s[:78] print s bitpim-1.0.7+dfsg1/src/native/wab/wab.cpp0000644001616600161660000003055107746441600016266 0ustar amuamu#include #include #include #include #include "pywab.h" char *errorstring=NULL; ULONG errorcode=0; static HMODULE themodule; static void errorme(HRESULT hr, const char *format, ...) { va_list arglist; va_start(arglist, format); char *tmp=(char*)malloc(4096); vsnprintf(tmp, 4096, format, arglist); va_end(arglist); LPSTR sysmsg=NULL; errorcode=hr; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&sysmsg, 0, NULL ); if (!errorstring) errorstring=(char*)malloc(16384); snprintf(errorstring, 16384, "%s: HResult: %lu System message %s", tmp, hr, sysmsg?sysmsg:""); free(tmp); LocalFree(sysmsg); } wabmodule::~wabmodule() { if(refcount->Release()) { addrbook->Release(); wabobject->Release(); FreeLibrary(hModule); delete refcount; refcount=0; } } wabmodule::wabmodule(const wabmodule &rhs) : hModule(rhs.hModule), openfn(rhs.openfn), addrbook(rhs.addrbook), wabobject(rhs.wabobject), refcount(rhs.refcount) { refcount->AddRef(); } wabmodule* Initialize(bool enableprofiles, const char *filename) { HMODULE hModule=0; LPWABOPEN openfn=0; LPADRBOOK lpaddrbook=0; LPWABOBJECT lpwabobject=0; TCHAR szWABDllPath[MAX_PATH]; const TCHAR* loadeddllname=NULL; { DWORD dwType = 0; ULONG cbData = sizeof(szWABDllPath); HKEY hKey = NULL; *szWABDllPath = '\0'; // First we look under the default WAB DLL path location in the // Registry. // WAB_DLL_PATH_KEY is defined in wabapi.h // if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, WAB_DLL_PATH_KEY, 0, KEY_READ, &hKey)) RegQueryValueEx( hKey, "", NULL, &dwType, (LPBYTE) szWABDllPath, &cbData); if(hKey) RegCloseKey(hKey); // if the Registry came up blank, we do a loadlibrary on the wab32.dll // WAB_DLL_NAME is defined in wabapi.h // loadeddllname=(lstrlen(szWABDllPath)) ? szWABDllPath : WAB_DLL_NAME; hModule = LoadLibrary(loadeddllname); if(!hModule) { errorme(0, "Failed to load WAB library %s", loadeddllname); return NULL; } themodule=hModule; } // get the entry point // openfn = (LPWABOPEN) GetProcAddress(hModule, "WABOpen"); if(!openfn) { errorme(0, "Failed to find function WABOpen in dll %s", loadeddllname); FreeLibrary(hModule); } // open the file { WAB_PARAM wp={0}; wp.cbSize=sizeof(WAB_PARAM); if (!filename) filename=""; wp.szFileName=(TCHAR*)filename; if(enableprofiles) wp.ulFlags=WAB_ENABLE_PROFILES; HRESULT hr=openfn(&lpaddrbook, &lpwabobject, &wp, 0); if (HR_FAILED(hr)) { errorme(hr, "Failed to open address book %s", strlen(filename)?filename:""); FreeLibrary(hModule); return false; } } // it worked - return results return new wabmodule(hModule, openfn, lpaddrbook, lpwabobject); } void wabmodule::FreeObject(LPSRowSet rows) { if (!rows) return; for (unsigned int row=0; rowcRows; row++) wabobject->FreeBuffer(rows->aRow[row].lpProps); wabobject->FreeBuffer(rows); } void wabmodule::FreeObject(LPSPropTagArray pa) { wabobject->FreeBuffer(pa); } entryid* wabmodule::getpab() { ULONG cbpabeid; LPENTRYID pabeid; HRESULT hr=addrbook->GetPAB(&cbpabeid, &pabeid); if (HR_FAILED(hr)) { errorme(hr, "Failed to get Personal Address Book entryid"); return NULL; } entryid* eid=new entryid(pabeid, cbpabeid); wabobject->FreeBuffer(pabeid); return eid; } wabobject* wabmodule::openobject(const entryid& eid) { ULONG objtype; LPUNKNOWN iface; HRESULT hr=addrbook->OpenEntry(eid.getlen(), eid.getdata(), NULL, MAPI_BEST_ACCESS, &objtype, &iface); if (HR_FAILED(hr)) { errorme(hr, "Failed to openentry"); return NULL; } return new class wabobject(*this, objtype, iface); // quite why 'class' has to be there, i don't know } wabobject::~wabobject() { iface->Release(); } wabobject::wabobject(const wabmodule& mod, ULONG t, LPUNKNOWN i) : iface(i), type(t), module(mod) { } wabtable* wabobject::getcontentstable(unsigned long flags) { if(type!=MAPI_ABCONT) { errorme(0, "Object is not a container"); return NULL; } LPMAPITABLE table; HRESULT hr=((LPABCONT)iface)->GetContentsTable(flags, &table); if (HR_FAILED(hr)) { errorme(hr, "Failed to GetContentsTable"); return NULL; } return new wabtable(module, table); } wabtable::~wabtable() { table->Release(); } int wabtable::getrowcount() { ULONG l; HRESULT hr=table->GetRowCount(0, &l); if (HR_FAILED(hr)) { errorme(hr, "Failed to get rowcount"); return -1; } return (int)l; } wabrow* wabtable::getnextrow() { LPSRowSet rowset; HRESULT hr=table->QueryRows(1,0, &rowset); if (HR_FAILED(hr)) { errorme(hr, "Failed to get next row"); return NULL; } return new wabrow(module, rowset); } // returns true on success bool wabtable::enableallcolumns() { LPSPropTagArray props; HRESULT hr=table->QueryColumns(TBL_ALL_COLUMNS, &props); if (HR_FAILED(hr)) { errorme(hr, "Failed to get list of all columns"); return false; } hr=table->SetColumns(props, 0); module.FreeObject(props); if (HR_FAILED(hr)) { errorme(hr, "Failed to turn on all columns"); return false; } return true; } bool wabtable::enablecolumns(proptagarray &pta) { // we do some nasty voodo here. SPropTagArray is actually a ULONG of // how many members and then that many ULONGS (the underlying property // type) all nicely wrapped in a structure. We just use one huge // array which will have the same memory layout HRESULT hr=table->SetColumns( (LPSPropTagArray) pta.array, 0); if (HR_FAILED(hr)) { errorme(hr, "Failed to turn on specied %lu columns", pta.array[0]); return false; } return true; } wabrow::~wabrow() { module.FreeObject(rowset); } bool wabrow::IsEmpty() { return rowset->cRows==0; } // see mapitypes.h for these names and ranges static struct { ULONG id; const char* name; } propnames[]={ #define PR(t) { PROP_ID(t), #t } #include "_genprops.h" #undef PR { 0, NULL } }; static char*propbuffy=NULL; const char *property_name(unsigned id) { const int buflen=4096; unsigned i=0; do { if (propnames[i].id==id) return propnames[i].name; i++; } while (propnames[i].name); if(!propbuffy) propbuffy=(char*)malloc(buflen); // main categories if (id>=0x0001 && id<=0x0bff) snprintf(propbuffy, buflen, "MAPI_defined envelope property %04x", id); else if (id>=0x0c00 && id<=0x0dff) snprintf(propbuffy, buflen, "MAPI_defined per-recipient property %04x", id); else if (id>=0x0e00 && id<=0x0fff) snprintf(propbuffy, buflen, "MAPI_defined non-transmittable property %04x", id); else if (id>=0x1000 && id<=0x2fff) snprintf(propbuffy, buflen, "MAPI_defined message content property %04x", id); else if (id>=0x4000 && id<=0x57ff) snprintf(propbuffy, buflen, "Transport defined envelope property %04x", id); else if (id>=0x5800 && id<=0x5fff) snprintf(propbuffy, buflen, "Transport defined per-recipient property %04x", id); else if (id>=0x6000 && id<=0x65ff) snprintf(propbuffy, buflen, "User-defined non-transmittable property %04x", id); else if (id>=0x6600 && id<=0x67ff) snprintf(propbuffy, buflen, "Provider defined internal non-transmittable property %04x", id); else if (id>=0x6800 && id<=0x7bff) snprintf(propbuffy, buflen, "Message class-defined content property %04x", id); else if (id>=0x7c00 && id<=0x7fff) snprintf(propbuffy, buflen, "Messafe class-defined non-transmittable property %04x", id); else if (id>=0x8000 && id<=0xfffe) snprintf(propbuffy, buflen, "User defined Name-to-id property %04x", id); // mapi defined stuff else if (id>=0x3000 && id<=0x33ff) snprintf(propbuffy, buflen, "Common property %04x", id); else if (id>=0x3400 && id<=0x35ff) snprintf(propbuffy, buflen, "Message store object %04x", id); else if (id>=0x3600 && id<=0x36ff) snprintf(propbuffy, buflen, "Folder or AB container %04x", id); else if (id>=0x3700 && id<=0x38ff) snprintf(propbuffy, buflen, "Attachment %04x", id); else if (id>=0x3900 && id<=0x39ff) snprintf(propbuffy, buflen, "Address book %04x", id); else if (id>=0x3a00 && id<=0x3bff) snprintf(propbuffy, buflen, "Mail user %04x", id); else if (id>=0x3c00 && id<=0x3cff) snprintf(propbuffy, buflen, "Distribution list %04x", id); else if (id>=0x3d00 && id<=0x3dff) snprintf(propbuffy, buflen, "Profile section %04x", id); else if (id>=0x3e00 && id<=0x3fff) snprintf(propbuffy, buflen, "Status object %04x", id); else snprintf(propbuffy, buflen, "NO IDEA WHAT THIS IS %04x", id); return propbuffy; } static inline unsigned numdigits(unsigned i) { unsigned res=0; while(++res,i) i/=10; return res; } static char *valuebuffy=NULL; const char *property_value(unsigned int type, const union _PV &value) { const unsigned int buflen=65536; if (!valuebuffy) valuebuffy=(char*)malloc(buflen); if (type==PT_I2 || type==PT_SHORT) snprintf(valuebuffy, buflen, "int:%d", (int)value.i); else if (type==PT_I4 || type==PT_LONG) snprintf(valuebuffy, buflen, "int:%ld", value.l); else if (type==PT_BOOLEAN) snprintf(valuebuffy, buflen, "bool:%d", (int)value.b); else if (type==PT_STRING8) snprintf(valuebuffy, buflen, "string:%s", value.lpszA); else if (type==PT_BINARY) snprintf(valuebuffy, buflen, "binary:%lu,%lu", (unsigned long)value.bin.lpb, (unsigned long)value.bin.cb); else if (type==PT_MV_STRING8) { unsigned spaceneeded=strlen("strings:"); for (unsigned i=0;ibuflen) { free(valuebuffy); valuebuffy=(char*)malloc(spaceneeded); } char *pos=valuebuffy; pos+=sprintf(valuebuffy, "strings:"); for (unsigned i=0;i", type); return valuebuffy; } unsigned wabrow::numproperties() { if (rowset->cRows<1) return 0; return rowset->aRow[0].cValues; } const char* wabrow::getpropertyname(unsigned which) { if (rowset->cRows<1) return NULL; SPropValue &val=rowset->aRow[0].lpProps[which]; return property_name(PROP_ID(val.ulPropTag)); } const char *wabrow::getpropertyvalue(unsigned which) { if (rowset->cRows<1) return NULL; SPropValue &val=rowset->aRow[0].lpProps[which]; return property_value(PROP_TYPE(val.ulPropTag), val.Value); } // this depends on unsigned long being big enough to hold a void pointer entryid* wabtable::makeentryid(unsigned long pointer, unsigned long len) { return new entryid((void*)pointer, len); } void wabtable::makebinarystring(char **result, size_t *resultlen, unsigned long pointer, unsigned long len) { *result=(char*)pointer; *resultlen=len; } entryid::entryid(void *d, size_t l) : data(0), len(l) { if(len) { data=malloc(l); memcpy(data, d, l); } } entryid::~entryid() { if(data) free(data); } bitpim-1.0.7+dfsg1/src/native/egroupware/0000755001616600161660000000000011330124364016401 5ustar amuamubitpim-1.0.7+dfsg1/src/native/egroupware/egroupware.py0000644001616600161660000001704710150306375021147 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: egroupware.py 1770 2004-11-22 06:53:49Z rogerb $ """Be at one with eGroupware We talk to eGroupware using its xmlrpc interface. Unfortunately the interface has several quality issues, so we try to work around them in this code. """ import xmlrpclib import urlparse import time import datetime def getsession(url, user, password, domain="default"): # fixup whatever the user max have given us scheme, location, path, query, fragment = urlparse.urlsplit(url) if scheme is None and location is None and query is None: url="http://"+url if url[-1]!="/": url+="/" url+="xmlrpc.php" sp=xmlrpclib.ServerProxy(url) res=sp.system.login({"username": user, "password": password, "domain": domain}) if "sessionid" not in res or "kp3" not in res: raise Exception("Invalid username or password") scheme, location, path, query, fragment = urlparse.urlsplit(url) if location.find("@")>=0: location=location[location.find("@")+1:] newurl=urlparse.urlunsplit( (scheme, "%s:%s@%s" % (res["sessionid"], res["kp3"], location), path, query, fragment) ) return Session(xmlrpclib.ServerProxy(newurl), res) class Session: def __init__(self, sp, ifo): self.sp=sp self.__ifo=ifo def __del__(self): self.sp.system.logout(self.__ifo) self.sp=None self.__ifo=None def getyearcalendar(self, year): return getcalendar((year,), (year,)) def getcalendar(self, start=(), end=()): if len(start)!=6 or len(end)!=6: t=time.localtime() startdefs=(t[0], 1, 1, 0,0,0) enddefs=(t[0],12,31,23,59,60) start=start+startdefs[len(start):] end=end+enddefs[len(end):] start="%04d-%02d-%02dT%02d:%02d:%02d" % start end="%04d-%02d-%02dT%02d:%02d:%02d" % end for item in self.sp.calendar.bocalendar.search({"start": start, "end": end}): for k in item.keys(): if isinstance(item[k], xmlrpclib.DateTime): v=str(item[k]) v=[int(x) for x in v[0:4], v[5:7], v[8:10], v[11:13], v[14:16], v[17:19]] if v==[0,0,0,0,0,0]: del item[k] else: item[k]=datetime.datetime(*v) yield item def doescontactexist(self, id): try: return self.sp.addressbook.boaddressbook.read({'id': id}) except xmlrpclib.Fault, f: # in theory only fault 10 - Entry does not (longer) exist! # should be looked for. Unfortunately egroupware has a # bug and returns fault 9 - Access denied if the id # doesn't exist. So we consider any failure to mean # that the id doesn't exist. Reported as SF bug #1057984 print "eg contact doesn't exist, fault", f return False def getcontacts(self): "returns all contacts" # internally we read them a group at a time offset=0 limit=5 # NB an offset of zero causes egroupware to return ALL contacts ignoring limit! # This has been filed as bug 1040738 at SourceForge against eGroupware. It # won't hurt unless you have huge number of contacts as egroupware will try # to return all of them at once. Alternatively make the simple fix as in # the bug report while True: contacts=self.sp.addressbook.boaddressbook.search({'start': offset, 'limit': limit}) if len(contacts)==0: raise StopIteration() for i in contacts: yield i if len(contacts) # # This file is under the BitPim license. # # Alternatively you can use it under any OSI certified license as listed # at http://www.opensource.org/licenses/alphabetical # # Jaro/Winkler string match algorithm. There is a native C # implementation in this directory as well. There is an excellent # paper on the "quality" of various string matching algorithms at # http://www.isi.edu/info-agents/workshops/ijcai03/papers/Cohen-p.pdf # as well as Java implementations by the same authors at # http://secondstring.sf.net # # Most implementations make copies of the source strings, scribble '*' # all over the copies, and will compute the entire commonchars even if # the lengths won't match early on. # # My version uses a bitset to track which chars have been seen when # looking for the common ones, won't give misleading results if '*' is # present in the string and various other goodness. # # The general algorithm is as follows: # # - Compute the matching characters from s1 in s2. The range # searched is half of the length of the shortest string on either # side of the current position. Characters should only be matched # once (we use a bitset to mark matched chars - many # implementations make a copied string and replace the characters # with '*' # # - Repeat the process with s2 in s1 # # - If the matching chars are zero or different length, then return # zero. # # - Do the math as show below, which also takes into account how # different the two match strings are (transitions) # # - The Winkler addition gives a bonus for how many characters at # the begining of both strings are the same since most strings # that are the same have misspellings later in the string. # # Note that if you want caseless comparison then the strings should be # converted beforehand. It isn't efficient to do it in this code. # # This implementation treats all characters equally. A refinement is # partial scores for similar characters (such as 'i' and 'y' or 'b' # and 'd'). That requires training on a body of strings so we don't # bother. def jarow(s1, s2, winkleradjust=0): if len(s1)==0 or len(s2)==0: return 0 if s1==s2: return 1 halflen=min(len(s1)/2+1, len(s2)/2+1) s1pos=0 s1seenins2=[0]*len(s2) s2pos=0 s2seenins1=[0]*len(s1) transpositions=0 commonlen=0 while s1pos=len(s1) or common>=len(s2): break if s1[common]!=s2[common]: break dist = dist + common * 0.1 * (1-dist) return dist bitpim-1.0.7+dfsg1/src/native/strings/setup.py0000644001616600161660000000040010163505072017420 0ustar amuamufrom distutils.core import setup, Extension module1 = Extension('jarow', sources = ['jarow.c']) setup (name = 'JaroWinkler', version = '1.0', description = 'Jaro Winkler String Matcher', ext_modules = [module1]) bitpim-1.0.7+dfsg1/src/native/strings/__init__.py0000644001616600161660000000065410163505072020032 0ustar amuamu# There is a Python and a C implementation of Jaro/Winkler available in this # directory - we try for C first if __debug__: try: import jarow as j except: print "Using (slow) Python version of Jaro/Winkler. Build C module in native/strings." import jarowpy as j jarow=j.jarow del j else: # production must always use native version import jarow as j jarow=j.jarow del j bitpim-1.0.7+dfsg1/src/native/strings/jarow.c0000644001616600161660000001325710163510173017210 0ustar amuamu/* * C implementation of the Jaro Winkler string similarity algorithm. * See the Python file in this directory which this is a derived * version of. * * This file uses a nasty trick to produce two versions of the * function for both 8 bit chars and what Python is using for Unicode * (sometimes 16 bit chars, sometimes 32 bit chars). In C++ one could * use templates, but this is far more fun. * */ #ifndef TEMPLATING #include /* a modified version of the standard Python bitset.h as Python doesn't export the symbols */ #include "bitset.h" #define MIN(x,y) (((x)<(y))?(x):(y)) #define TEMPLATING #define JWCHARP char* #define CHAR int #define NOCHAR -1 #define FUNCTION jarowchar #include "jarow.c" #undef JWCHARP #undef CHAR #undef NOCHAR #undef FUNCTION #define JWCHARP Py_UNICODE* #define CHAR unsigned int #define NOCHAR 0xffffffffu #define FUNCTION jarowunicode #include "jarow.c" #undef JWCHARP #undef CHAR #undef NOCHAR #undef FUNCTION #undef TEMPLATING #endif /* TEMPLATING */ #ifdef TEMPLATING /* length is in chars not bytes */ static double FUNCTION(JWCHARP s1, unsigned lens1, JWCHARP s2, unsigned lens2, unsigned winklercommonchars) { unsigned i, halflen, s1pos=0, s2pos=0, transpositions=0, commonlen=0; bitset s1seenins2=0, s2seenins1=0; CHAR s1char, s2char; double score=0; /* if either string is empty then result is always zero */ if (lens1==0 || lens2==0) return 0; /* if the strings are identical then it is 1.0 */ if (lens1==lens2 && 0==memcmp(s1, s2, lens1*sizeof(s1[0]))) return 1.0; halflen=MIN(lens1/2+1, lens2/2+1); s1seenins2=newbitset(lens2); s2seenins1=newbitset(lens1); #define STRBEGIN(curpos,offset) ((offset>curpos)?0:curpos-offset) #define STREND(curpos,offset,slen) ((curpos+offset>slen)?slen:curpos+offset) while (s1pos=lens1 || commonlen>=lens2) break; if (s1[commonlen]!=s2[commonlen]) break; commonlen++; } score+=commonlen*0.1*(1-score); } finally: delbitset(s1seenins2); delbitset(s2seenins1); return score; } #endif /* TEMPLATING */ #ifndef TEMPLATING /* Python entry point */ static PyObject * jarow(PyObject *self, PyObject *args) { PyObject *s1, *s2; int winklerchars=0; double result; if(!PyArg_ParseTuple(args, "OO|i:jarow(string,string[,winklerchars=0])", &s1, &s2, &winklerchars)) return NULL; if(PyString_CheckExact(s1) && PyString_CheckExact(s2)) { result=jarowchar(PyString_AS_STRING(s1), PyString_GET_SIZE(s1), PyString_AS_STRING(s2), PyString_GET_SIZE(s2), winklerchars); } else if (PyUnicode_CheckExact(s1) && PyUnicode_CheckExact(s2)) { result=jarowunicode(PyUnicode_AS_UNICODE(s1), PyUnicode_GET_SIZE(s1), PyUnicode_AS_UNICODE(s2), PyUnicode_GET_SIZE(s2), winklerchars); } else if (PyString_CheckExact(s1) && PyUnicode_CheckExact(s2)) { s1=PyUnicode_FromObject(s1); if(!s1) return NULL; result=jarowunicode(PyUnicode_AS_UNICODE(s1), PyUnicode_GET_SIZE(s1), PyUnicode_AS_UNICODE(s2), PyUnicode_GET_SIZE(s2), winklerchars); Py_DECREF(s1); } else if (PyUnicode_CheckExact(s1) && PyString_CheckExact(s2)) { s2=PyUnicode_FromObject(s2); if(!s2) return NULL; result=jarowunicode(PyUnicode_AS_UNICODE(s1), PyUnicode_GET_SIZE(s1), PyUnicode_AS_UNICODE(s2), PyUnicode_GET_SIZE(s2), winklerchars); Py_DECREF(s2); } else { return PyErr_Format(PyExc_TypeError, "The first two parameters must be some combination of string or unicode objects"); } return PyFloat_FromDouble(result); } static PyMethodDef JarowMethods[] = { {"jarow", jarow, METH_VARARGS, "Do a Jaro-Winkler string match"}, {NULL, NULL, 0, NULL} /* Sentinel */ }; PyMODINIT_FUNC initjarow(void) { Py_InitModule("jarow", JarowMethods); } #endif /* TEMPLATING */ bitpim-1.0.7+dfsg1/src/native/__init__.py0000644001616600161660000000002407764722205016344 0ustar amuamu# keep python happy bitpim-1.0.7+dfsg1/src/native/evolution/0000755001616600161660000000000011330124364016245 5ustar amuamubitpim-1.0.7+dfsg1/src/native/evolution/evolution.py0000644001616600161660000002044310075140460020646 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Roger Binns ### Copyright (C) 2004 Peter Pletcher ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: evolution.py 1442 2004-07-14 05:14:24Z rogerb $ "Be at one with Evolution" # Evolution mostly sucks when compared to Outlook. The UI and functionality # for the address book is a literal copy. There is no API as such and we # just have to delve around the filesystem # root directory is ~/evolution # folders are any directory containing a file named folder-metadata.xml # note that folders can be nested # # the folder name is the directory name. The folder-metadata.xml file # does contain description tag, but it isn't normally displayed and # is usually empty for user created folders # # if the folder contains any addressbook entries, then there will # be an addressbook.db file # # the file should be opened using bsddb # import bsddb # db=bsddb.hashopen("addressbook.db", "r") # db.keys() lists keys, db[key] gets item # # the item contains exactly one field which is a null terminated string # containing a vcard import sys import os import re if sys.platform!="linux2": raise ImportError() try: import bsddb except: raise ImportError() userdir=os.path.expanduser("~") evolutionpath="evolution/local" evolutionbasedir=os.path.join(userdir, evolutionpath) evolutionexporter = { 'command' : "evolution-addressbook-export", 'folderid' : "", 'name' : "", 'type' : ["address book"] } def getcontacts(folder): """Returns the contacts as a list of string vcards Note that the Windows EOL convention is used""" if folder == evolutionexporter['folderid']: return getcontacts_evoexporter() dir=os.path.expanduser(folder) p=os.path.join(dir, "addressbook.db") if not os.path.isfile(p): # ok, this is not an address book folder if not os.path.isfile(os.path.join(dir, "folder-metadata.xml")): raise ValueError("Supplied folder is not a folder! "+folder) raise ValueError("Folder does not contain contacts! "+folder) res=[] db=bsddb.hashopen(p, 'r') for key in db.keys(): if key.startswith("PAS-DB-VERSION"): # no need for this field continue data=db[key] while data[-1]=="\x00": # often has actual null on the end data=data[:-1] res.append(data) db.close() return res class EvolutionExportException(Exception): pass def getcontacts_evoexporter(): """Get the cards by running evolution-addressbook-export Note that this code returns all the contacts as a single string item. It seemed silly to split them apart when the caller then just puts them back together as one string""" evo_export = os.popen(evolutionexporter['command']) evo_cards = evo_export.read() evo_export_status = evo_export.close() if evo_export_status is not None: raise EvolutionExportException("%s failed with code %s" % (evolutionexporter['command'], `evo_export_status`)) return [evo_cards] def getfsfolders(basedir=evolutionbasedir): res={} children=[] for f in os.listdir(basedir): p=os.path.join(basedir, f) # deal with child folders (depth first) if os.path.isdir(p): f=getfsfolders(p) if len(f): children.extend(f) continue # if we have any children, sort them if len(children): lc=[ (child['name'], child) for child in children] # decorate lc.sort() # sort children=[child for _, child in lc] # un-decorate # do we have a meta-data file? if not os.path.isfile(os.path.join(basedir, "folder-metadata.xml")): return children # ok, what type is this folder t=[] for file,type in ( ("mbox", "mailbox"), ("calendar.ics", "calendar"), ("addressbook.db", "address book"), ("tasks.ics", "tasks") ): if os.path.isfile(os.path.join(basedir, file)): t.append(type) entry={} entry['dirpath']=basedir entry['name']=os.path.basename(basedir) entry['folderid']=basedir.replace(userdir, "~", 1) entry['type']=t if len(children): entry['children']=children # tell children who their daddy is for c in children: c['parent']=entry return [entry] def getspecialfolders(): "Return a list of any special folders" # the only one we look for currently is evolution-addressbook-export # command evo_version = os.popen(evolutionexporter['command'] + " --version") evo_version_result = evo_version.read() evo_version_status = evo_version.close() if evo_version_status is not None: return [] # it doesn't work with earlier versions of evolution, so we do a version # check if evo_version_result.startswith("Gnome evolution 1.4"): return [evolutionexporter] else: return [] def getfolders(): return getspecialfolders()+getfsfolders() def pickfolder(selectedid=None, parent=None, title="Select Evolution Folder"): # we do the imports etc in the function so that this file won't # require gui code unless this function is called import wx import wx.gizmos dlg=wx.Dialog(parent, -1, title, style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER, size=(450,350)) vbs=wx.BoxSizer(wx.VERTICAL) tl=wx.gizmos.TreeListCtrl(dlg, -1, style=wx.TR_DEFAULT_STYLE|wx.TR_HIDE_ROOT) tl.AddColumn("Name") tl.SetMainColumn(0) tl.AddColumn("Type") tl.SetColumnWidth(0, 300) def addnode(parent, item, selected): node=tl.AppendItem(parent, item['name']) if selected==item['folderid']: tl.SelectItem(node) tl.SetItemText(node, ", ".join(item['type']), 1) tl.SetPyData(node, item) if item.has_key("children"): for child in item['children']: addnode(node, child, selected) tl.Expand(node) root=tl.AddRoot("?") tl.SetPyData(root, None) for f in getfolders(): addnode(root, f, selectedid) # select first folder if nothing is selected if tl.GetPyData(tl.GetSelection()) is None: child,_=tl.GetFirstChild(root, 1234) tl.SelectItem(child) vbs.Add(tl, 1, wx.EXPAND|wx.ALL, 5) vbs.Add(wx.StaticLine(dlg, -1, style=wx.LI_HORIZONTAL), 0, wx.EXPAND|wx.ALL, 5) vbs.Add(dlg.CreateButtonSizer(wx.OK|wx.CANCEL|wx.HELP), 0, wx.ALIGN_CENTRE|wx.ALL, 5) dlg.SetSizer(vbs) dlg.SetAutoLayout(True) if dlg.ShowModal()==wx.ID_OK: folderid=tl.GetPyData(tl.GetSelection())['folderid'] else: folderid=None dlg.Destroy() return folderid # we use a pathname like "~/evolution/local/Contacts" as the folder id # and the same as a "folder" class Match: def __init__(self, folder): self.folder=folder def getfolderfromid(id, default=False): "Return a folder object given the id" f=_findfolder(id) if f is not None: return f['folderid'] if default: # look for a default for f in getfolders(): if "address book" in f['type']: return f["folderid"] # brute force return getfolders()[0]['folderid'] return None def __findfolder(node, id): "Recursive function to locate a folder, using Match exception to return the found folder" if node['folderid']==id: raise Match(node) for c in node.get("children", []): __findfolder(c, id) def _findfolder(id): for f in getfolders(): try: __findfolder(f, id) except Match,m: return m.folder # we found it return None def getfoldername(id): f=_findfolder(id) if f is None: raise AttributeError("No such folder "+id) n=[] while f: n=[f['name']]+n f=f.get('parent',None) return " / ".join(n) def getfolderid(folder): return folder if __name__=="__main__": # a folder selector import wx import wx.gizmos app=wx.PySimpleApp() folder=pickfolder() print folder print "\n".join(getcontacts(folder)) bitpim-1.0.7+dfsg1/src/native/evolution/__init__.py0000644001616600161660000000005210063522260020352 0ustar amuamu# module definer from evolution import * bitpim-1.0.7+dfsg1/src/native/qtopiadesktop/0000755001616600161660000000000011330124365017111 5ustar amuamubitpim-1.0.7+dfsg1/src/native/qtopiadesktop/qtopiadesktop.py0000644001616600161660000000711110116264444022356 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: qtopiadesktop.py 1559 2004-09-04 07:05:08Z rogerb $ """Be at one with Qtopia desktop (eg as used by the Zaurus)""" # See recipe 12.6 in the Python Cookbook for the XML parsing bit import xml.parsers.expat import os import encodings.ascii class XMLParser: def __init__(self, filename): parser=xml.parsers.expat.ParserCreate() parser.CharacterDataHandler=self._handleCharData parser.StartElementHandler=self._handleStartElement parser.EndElementHandler=self._handleEndElement parser.ParseFile(open(filename, "rt")) def _handleCharData(self, data): pass def _handleEndElement(self, name): pass def _handleStartElement(self, name, attrs): raise NotImplementedException() class CategoriesParser(XMLParser): def __init__(self, filename="Categories.xml"): filename=getqdpath(filename) self._data={} XMLParser.__init__(self, filename) def _handleStartElement(self, name, attrs): if name!="Category": return self._data[int(ununicodify(attrs["id"]))]=ununicodify(attrs["name"]) def categories(self): return self._data class ABParser(XMLParser): def __init__(self, filename="addressbook/addressbook.xml", categories={}): filename=getqdpath(filename) self.categories=categories self._data=[] XMLParser.__init__(self, filename) def _handleStartElement(self, name, attrs): if name!="Contact": return d=cleandict(attrs) # fixup fields # d["Uid"]=int(d["Uid"]) - leaving as string for moment since semantics of value are not clear (eg does two's complement of number mean the same thing?) # categories c=d.get("Categories", "") cats=[] if len(c): c=[int(x) for x in c.split(";")] for cat in c: if self.categories.has_key(cat): cats.append(self.categories[cat]) else: if __debug__: print "couldn't find category",cat,"in",`self.categories` if len(cats): d["Categories"]=cats else: if d.has_key("Categories"): del d["Categories"] # emails if d.has_key("Emails"): d["Emails"]=d["Emails"].split() # ::TODO:: gender also needs to be munged self._data.append(d) def contacts(self): return self._data def getqdpath(filename): filename=os.path.expanduser(os.path.join("~/.palmtopcenter", filename)) if filename.startswith("~"): # windows 98, no home directory present filename="c:\\"+filename[1:] return os.path.abspath(filename) def getfilename(): "Returns the filename we need" return getqdpath("addressbook/addressbook.xml") # XML returns all the values as strings, so these two routines # help strip out the unicode bit def cleandict(d): # remove all unicode from the dict newd={} for k,v in d.items(): newd[ununicodify(k)]=ununicodify(v) return newd def ununicodify(value): try: return str(value) except UnicodeEncodeError: return value.encode("ascii", 'xmlcharrefreplace') def getcontacts(): cats=CategoriesParser() ab=ABParser(categories=cats.categories()) return ab.contacts() if __name__=="__main__": print getcontacts() bitpim-1.0.7+dfsg1/src/native/qtopiadesktop/__init__.py0000644001616600161660000000005610067512741021230 0ustar amuamu# module definer from qtopiadesktop import * bitpim-1.0.7+dfsg1/src/today.py0000644001616600161660000003226410763347474014456 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: today.py 4601 2008-03-04 22:37:48Z djpham $ """ Code to handle BitPim Today tab. """ # standard modules # wx modules import wx import wx.lib.scrolledpanel as scrolled import wx.lib.hyperlink as hl # BitPim modules import aggregatedisplay as aggr import pubsub import widgets # Today REQUEST_TAB_CHANGED keys, types, and constants Tab_Today=0 Tab_PhoneBook=1 Tab_Wallpaper=2 Tab_Ringers=3 Tab_Calendar=4 Tab_Memo=5 Tab_Todo=6 Tab_SMS=7 Tab_CallHistory=8 # TODAY_DATA keys, types, and constants Today_Section='section' Today_Groups='groups' Today_Group_Tab='tab_index' Today_Items='items' Today_Item_Name='name' Today_Item_Data='item_data' # Sections Today_Section_Today='Today' Today_Section_ThisWeek='This Week' # Groups Today_Group_Calendar='Calendar:' Today_Group_Todo='Todo List:' Today_Group_Memo='Memo:' Today_Group_IncomingSMS='SMS Inbox:' Today_Group_IncomingCalls='Incoming Calls:' Today_Group_MissedCalls='Missed Calls:' dow_initials=('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', ' ') EVT_TODAY_ITEM_SELECTED=wx.NewEventType() #------------------------------------------------------------------------------- class NotificationEvent(object): def __init__(self, evt_handler, client_data=None): self._evt_handler=evt_handler self.client_data=client_data self.data=None def send(self): self._evt_handler(self) #------------------------------------------------------------------------------- class NotificationEventHandler(object): def __init__(self): self._evt_table={} def append(self, evt_handler, group, client_data=None): evt=NotificationEvent(evt_handler, client_data) self._evt_table.setdefault(group, []).append(evt) def process(self, group, evt): for e in self._evt_table.get(group, []): e.data=evt e.send() #------------------------------------------------------------------------------- evt_handler=None def bind_notification_event(_evt_handler, group, client_data=None): global evt_handler if evt_handler is None: evt_handler=NotificationEventHandler() evt_handler.append(_evt_handler, group, client_data) #------------------------------------------------------------------------------- class BaseEvent(object): def __init__(self, section, group): self.section=section self.group=group self._items=[] def append(self, item_name, item_data=None): # append a data item to this event self._items.append({ Today_Item_Name: item_name, Today_Item_Data: item_data }) def _set_names(self, names): self._items=[{ Today_Item_Name: x, Today_Item_Data: None } \ for x in names] def _get_names(self): return [x[Today_Item_Name] for x in self._items] names=property(fget=_get_names, fset=_set_names) def _get_items(self): return self._items items=property(fget=_get_items) def broadcast(self): # broadcast this event pubsub.publish(pubsub.NEW_DATA_AVAILABLE, data=self) @classmethod def bind(_, func): pubsub.subscribe(func, pubsub.NEW_DATA_AVAILABLE) #------------------------------------------------------------------------------- class TodayCalendarEvent(BaseEvent): def __init__(self): super(TodayCalendarEvent, self).__init__(Today_Section_Today, Today_Group_Calendar) class ThisWeekCalendarEvent(BaseEvent): def __init__(self): super(ThisWeekCalendarEvent, self).__init__(Today_Section_ThisWeek, Today_Group_Calendar) class TodayTodoEvent(BaseEvent): def __init__(self): super(TodayTodoEvent, self).__init__(Today_Section_Today, Today_Group_Todo) class ThisWeekTodoEvent(BaseEvent): def __init__(self): super(ThisWeekTodoEvent, self).__init__(Today_Section_ThisWeek, Today_Group_Todo) class TodayMemoEvent(BaseEvent): def __init__(self): super(TodayMemoEvent, self).__init__(Today_Section_Today, Today_Group_Memo) class TodaySMSEvent(BaseEvent): def __init__(self): super(TodaySMSEvent, self).__init__(Today_Section_Today, Today_Group_IncomingSMS) class TodayIncomingCallsEvent(BaseEvent): def __init__(self): super(TodayIncomingCallsEvent, self).__init__(Today_Section_Today, Today_Group_IncomingCalls) class TodayMissedCallsEvent(BaseEvent): def __init__(self): super(TodayMissedCallsEvent, self).__init__(Today_Section_Today, Today_Group_MissedCalls) # Request Today Event----------------------------------------------------------- def bind_request_event(evt_handler): pubsub.subscribe(evt_handler, pubsub.REQUEST_TODAY_DATA) def send_request_event(): pubsub.publish(pubsub.REQUEST_TODAY_DATA) #------------------------------------------------------------------------------- EVT_HYPERLINK_LEFT=hl.EVT_HYPERLINK_LEFT class HyperLinkCtrl(hl.HyperLinkCtrl): def __init__(self, *args, **kargs): super(HyperLinkCtrl, self).__init__(*args, **kargs) self.AutoBrowse(False) self.DoPopup(False) self.client_data=None def SetToolTip(self, tip): if isinstance(tip, (str, unicode)): super(HyperLinkCtrl, self).SetToolTip(wx.ToolTip(tip)) else: super(HyperLinkCtrl, self).SetToolTip(tip) def SetLabel(self, label): super(HyperLinkCtrl, self).SetLabel(label) self.SetToolTip(label) #------------------------------------------------------------------------------- class StaticText(wx.StaticText): _max_item_len=30 _postfix='...' _max_client_len=_max_item_len-len(_postfix) def __init__(self, *args, **kargs): super(StaticText, self).__init__(*args, **kargs) def SetLabel(self, label): if len(label)>self._max_item_len: label=label[:self._max_client_len]+self._postfix super(StaticText, self).SetLabel(label) #------------------------------------------------------------------------------- class ItemHyperLink(HyperLinkCtrl): _max_item_len=30 _postfix='...' _max_client_len=_max_item_len-len(_postfix) def __init__(self, *args, **kargs): super(ItemHyperLink, self).__init__(*args, **kargs) self.client_data=None def SetLabel(self, label, client_data=None): # if label contains linefeed truncate if label.find('\n')>-1: label=label.split('\n')[0]+self._postfix if len(label)>self._max_item_len: label=label[:self._max_client_len]+self._postfix super(ItemHyperLink, self).SetLabel(label) self.client_data=client_data #------------------------------------------------------------------------------- class GroupWidget(wx.Panel, widgets.BitPimWidget): max_total_items=10 max_items=9 _title_font=None _item_font=None _last_item={ Today_Item_Name: '... more ...', Today_Item_Data: None } def __init__(self, parent, _name): super(GroupWidget, self).__init__(parent, wx.NewId()) self.name=_name.get('name', '') self.tab_index=_name.get('tab_index', None) self._data=[] self._widgets=[] if not self._title_font: self._title_font=wx.Font(12, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD) self._item_font=wx.Font(10, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL) bs=wx.StaticBoxSizer(wx.StaticBox(self, -1, ''), wx.VERTICAL) title=HyperLinkCtrl(self, -1, self.name) if self._title_font.Ok(): title.SetFont(self._title_font) hl.EVT_HYPERLINK_LEFT(self, title.GetId(), self.OnItemSelected) bs.Add(title, 0, wx.ALL, 5) vbs=wx.BoxSizer(wx.VERTICAL) for i in range(self.max_total_items): w=ItemHyperLink(self, -1, '') if self._item_font.Ok(): w.SetFont(self._item_font) hl.EVT_HYPERLINK_LEFT(self, w.GetId(), self.OnItemSelected) vbs.Add(w, 0, wx.RIGHT|wx.LEFT, 5) vbs.Hide(i) self._widgets.append(w) bs.Add(vbs, 1, wx.LEFT, 10) self._vbs=vbs bs.Fit(self) self.SetSizer(bs) self.SetAutoLayout(True) def Draw(self, dc, width, height, selected): x=dc.pos[0]-dc.view_start[0] y=dc.pos[1]-dc.view_start[1] self.SetDimensions(x, y, width, height) def OnHyperlinkLeft(self, evt): if self.tab_index: pubsub.publish(pubsub.REQUEST_TAB_CHANGED, data=self.tab_index) def OnItemSelected(self, evt): if evt_handler: self.OnHyperlinkLeft(evt) evt_handler.process(self.name, evt.GetEventObject().client_data) def Set(self, data): data_len=len(data) if data_len>self.max_total_items: self._data=data[:self.max_items] self._data.append(self._last_item) data_len=self.max_total_items else: self._data=data for i in range(data_len): self._widgets[i].SetLabel(self._data[i].get(Today_Item_Name, ''), self._data[i].get(Today_Item_Data, None)) self._vbs.Show(i) for i in range(data_len, self.max_total_items): self._vbs.Hide(i) self._vbs.Layout() self.Fit() self.Refresh() def not_empty(self): return self._data #------------------------------------------------------------------------------- class SectionHeader(aggr.SectionHeader): default_width=10 default_height=10 def __init__(self, label): super(SectionHeader, self).__init__(label) self._items=[] def Add(self, item): self._items.append(item) def GetAllItems(self): return self._items def GetItems(self): l=[] for x in self._items: if x.not_empty(): l.append(x) x.Show() else: x.Hide() return l def GetItemSize(self): w=self.default_width h=self.default_height for e in self._items: w1,h1=e.GetSizeTuple() w=max(w, w1) h=max(h,h1) return (w,h) def not_empty(self): return self.GetItems() #------------------------------------------------------------------------------- class TodayWidget(aggr.Display, widgets.BitPimWidget): _section_names=('Today','This Week') _item_names=(({ 'name': Today_Group_Calendar, 'tab_index': Tab_Calendar }, { 'name': Today_Group_Todo, 'tab_index': Tab_Todo }, { 'name': Today_Group_Memo, 'tab_index': Tab_Memo }, { 'name': Today_Group_IncomingSMS, 'tab_index': Tab_SMS }, { 'name': Today_Group_IncomingCalls, 'tab_index': Tab_CallHistory }, { 'name': Today_Group_MissedCalls, 'tab_index': Tab_CallHistory }), ({ 'name': Today_Group_Calendar, 'tab_index': Tab_Calendar }, { 'name': Today_Group_Todo, 'tab_index': Tab_Todo } )) def __init__(self, mainwindow, parent): self._sections=[] super(TodayWidget, self).__init__(parent, self) self._main_window=mainwindow # sections & items info self._sections=[SectionHeader(s) for s in self._section_names] for i,group in enumerate(self._item_names): for name in group: w=GroupWidget(self, name) self._sections[i].Add(w) # all done # populate data self.UpdateItems() # register for pubsub events BaseEvent.bind(self.OnNewData) pubsub.subscribe(self._OnMidnight, pubsub.MIDNIGHT) def GetSections(self): "Return a list of section headers" return [x for x in self._sections if x.not_empty()] def GetItemSize(self, sectionnumber, sectionheader): "Return (width, height of each item)" return sectionheader.GetItemSize() def GetItemsFromSection(self,sectionnumber,sectionheader): return sectionheader.GetItems() def _populate(self, data): section_name=data.section group_name=data.group for s in self._sections: if s.label!=section_name: continue for group in s.GetAllItems(): if group.name==group_name: group.Set(data.items) break break self.UpdateItems() self.Refresh() def OnNewData(self, msg=None): if msg is None: return self._populate(msg.data) def _OnMidnight(self, _): send_request_event() bitpim-1.0.7+dfsg1/src/analyser.py0000644001616600161660000002776010414066244015143 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: analyser.py 3037 2006-04-03 00:30:28Z rogerb $ """Graphical view of protocol data and a decode of it""" import sys import re import traceback import wx import StringIO import struct import common import prototypes import hexeditor class Eventlist(wx.ListCtrl): "List control showing the various events" def __init__(self, parent, id=-1, events=[]): self.events=events wx.ListCtrl.__init__(self, parent, id, style=wx.LC_REPORT|wx.LC_VIRTUAL) self.InsertColumn(0, "Time") self.InsertColumn(1, "Size") self.InsertColumn(2, "Class") self.InsertColumn(3, "Description") self.SetColumnWidth(0, 100) self.SetColumnWidth(1, 50) self.SetColumnWidth(2, 200) self.SetColumnWidth(3, 1000) self.SetItemCount(len(events)) def newdata(self, events): self.DeleteAllItems() self.events=events self.SetItemCount(len(events)) def OnGetItemText(self, index, col): curtime, curdesc, curclass, curdata=self.events[index] if col==0: return curtime if col==1: if len(curdata): return "%5d" % (len(curdata),) return "" if col==2: return curclass if col==3: return curdesc assert False def OnGetItemImage(self, item): return -1 class Analyser(wx.Frame): """A top level frame for analysing protocol data""" _pane_widths=[-2, -3, -4] _pos_pane_index=0 _sel_pane_index=1 _val_pane_index=2 def __init__(self, parent=None, id=-1, title="BitPim Protocol Analyser", data=None): """Start the show @param data: data to show. If None, then it will be obtained from the clipboard """ wx.Frame.__init__(self, parent, id, title, size=(800,750), style=wx.DEFAULT_FRAME_STYLE) # add a status bar to display various status items self.CreateStatusBar(len(self._pane_widths)) self.SetStatusWidths(self._pane_widths) topsplit=wx.SplitterWindow(self, -1, style=wx.SP_3D|wx.SP_LIVE_UPDATE) self.list=Eventlist(topsplit, 12) botsplit=wx.SplitterWindow(topsplit, -1, style=wx.SP_3D|wx.SP_LIVE_UPDATE) topsplit.SplitHorizontally(self.list, botsplit, 300) self.tree=wx.TreeCtrl(botsplit, 23, style=wx.TR_DEFAULT_STYLE) self.hex=hexeditor.HexEditor(botsplit, _set_pos=self.set_pos, _set_sel=self.set_sel, _set_val=self.set_val) botsplit.SplitHorizontally(self.tree, self.hex, 200) if data is None: data=self.getclipboarddata() self.newdata(data) wx.EVT_LIST_ITEM_SELECTED(self, self.list.GetId(), self.OnListBoxItem) wx.EVT_LIST_ITEM_ACTIVATED(self, self.list.GetId(), self.OnListBoxItem) wx.EVT_TREE_SEL_CHANGED(self, self.tree.GetId(), self.OnTreeSelection) self.Show() def newdata(self, data): "We have new data - the old data is tossed" self.parsedata(data) self.list.newdata(self.packets) def OnListBoxItem(self,evt): "The user selected an event in the listbox" index=evt.m_itemIndex curtime, curdesc, curclass, curdata=self.packets[index] self.errorinfo="" self.hex.SetData("") self.hex.highlightrange(-1,-1) if len(curdata): self.hex.SetData(curdata) # self.hex.ShowPosition(self.hex.XYToPosition(0,0)) else: self.hex.SetData(curdesc) # self.hex.ShowPosition(self.hex.XYToPosition(0,0)) self.tree.DeleteAllItems() if len(curclass): b=prototypes.buffer(curdata) try: klass=common.getfullname(curclass) except Exception,e: self.errorme("Finding class",e) wx.TipWindow(self.tree,self.errorinfo) return try: obj=klass() except Exception,e: self.errorme("Instantiating object",e) wx.TipWindow(self.tree,self.errorinfo) return try: obj.readfrombuffer(b, autolog=False) except Exception,e: self.errorme("Reading from buffer",e) # no return, we persevere root=self.tree.AddRoot(curclass) try: self.tree.SetPyData(root, obj.packetspan()) except: self.errorme("Object did not construct correctly") # no return, we persevere self.addtreeitems(obj, root) if len(self.errorinfo): wx.TipWindow(self.tree,self.errorinfo) def addtreeitems(self, obj, parent): "Add fields from obj to parent node" try: for name,field,desc in obj.containerelements(): if desc is None: desc="" else: desc=" - "+desc iscontainer=False try: iscontainer=field.iscontainer() except: pass # Add ourselves s=field.__class__.__name__+" "+name if iscontainer: c=field.__class__ s+=": <%s.%s>" % (c.__module__, c.__name__) else: try: v=field.getvalue() except Exception,e: v="" s+=": " if isinstance(v, int) and not isinstance(v, type(True)): s+="%d 0x%x" % (v,v) else: s+=`v` if len(desc): s+=desc node=self.tree.AppendItem(parent, s) try: self.tree.SetPyData(node, field.packetspan()) except: pass if iscontainer: self.addtreeitems(field, node) except Exception,e: str="" self.tree.AppendItem(parent,str) def OnTreeSelection(self, evt): "User selected an item in the tree" item=evt.GetItem() try: start,end=self.tree.GetPyData(item) except: self.hex.highlightrange(-1,-1) return self.hex.highlightrange(start,end) # self.hex.ShowPosition(begin) def errorme(self, desc, exception=None): "Put exception information into the hex pane and output traceback to console" if exception is not None: x=StringIO.StringIO() print >>x,exception.__str__(), self.errorinfo+=x.getvalue()+" : " print >>sys.stderr, common.formatexception() self.errorinfo+=desc+"\n" def getclipboarddata(self): """Gets text data on clipboard""" do=wx.TextDataObject() wx.TheClipboard.Open() success=wx.TheClipboard.GetData(do) wx.TheClipboard.Close() if not success: wx.MessageBox("Whatever is in the clipboard isn't text", "No way Dude") return "" return do.GetText() patevent=re.compile(r"^(\d?\d:\d\d:\d\d\.\d\d\d)(.*)") patdataevent=re.compile(r"^(\d?\d:\d\d:\d\d\.\d\d\d)(.*)(Data - \d+ bytes.*)") patdatarow=re.compile(r"^([0-9A-Fa-f]{8})(.*)") patclass=re.compile(r"^<#!\s+(.*)\s+!#>") def parsedata(self, data): """Fills in our internal data structures based on contents of data""" # santise all the data by doing the eol nonsense data=data.replace("\r", "\n") lastlen=0 while lastlen!=len(data): lastlen=len(data) data=data.replace("\n\n", "\n") self.packets=[] curtime=curdesc=curclass=curdata="" indata=False for line in data.split('\n'): # ignore blank lines if len(line.strip())==0: continue mo=self.patclass.match(line) if mo is not None: # found a class description curclass=mo.group(1) indata=True continue # if indata, try for some more if indata: mo=self.patdatarow.match(line) if mo is not None: # found another data row pos=int(mo.group(1), 16) assert pos==len(curdata) for i in range(9, min(len(line), 9+16*3), 3): # at most 16 bytes s=line[i:i+2] if len(s)!=2 or s==" ": # last line with trailing spaces continue b=int(s,16) curdata+=chr(b) continue # end of data, save it indata=False self.packets.append( (curtime, curdesc, curclass, curdata) ) curtime=curdesc=curclass=curdata="" # and move on # data event? mo=self.patdataevent.match(line) if mo is not None: self.packets.append( (curtime, curdesc, curclass, curdata) ) curtime=curdesc=curclass=curdata="" curtime=mo.group(1) curdesc=mo.group(2)+mo.group(3) indata=True continue # ordinary event? mo=self.patevent.match(line) if mo is not None: self.packets.append( (curtime, curdesc, curclass, curdata) ) curtime=curdesc=curclass=curdata="" curtime=mo.group(1) curdesc=mo.group(2) indata=True continue # No idea what it is, just add on end of desc if len(curdesc): curdesc+="\n" curdesc+=line # Add whatever is in variables at end self.packets.append( (curtime, curdesc, curclass, curdata) ) # remove all blank lines # filter, reduce, map and lambda all in one go! self.packets=filter(lambda item: reduce(lambda x,y: x+y, map(len, item)), self.packets) def set_pos(self, pos): """Display the current buffer offset in the format of Pos: 0x12=18 """ if pos is None: s='' else: s='Pos: 0x%X=%d'%(pos, pos) self.SetStatusText(s, self._pos_pane_index) def set_sel(self, sel_start, sel_end): if sel_start is None or sel_start==-1 or\ sel_end is None or sel_end==-1: s='' else: sel_len=sel_end-sel_start sel_end-=1 s='Sel: 0x%X=%d to 0x%X=%d (0x%X=%d bytes)'%( sel_start, sel_start, sel_end, sel_end, sel_len, sel_len) self.SetStatusText(s, self._sel_pane_index) def set_val(self, v): if v: # char s='Val: 0x%02X=%d'%(ord(v[0]), ord(v[0])) if len(v)>1: # short u_s=struct.unpack('3: # int/long u_i=struct.unpack('"): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.writetobuffer(buf) try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.readfrombuffer(buf) self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,UINT): self.__field_entry=value else: self.__field_entry=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_number(self): try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,UINT): self.__field_number=value else: self.__field_number=UINT(value,**{'sizeinbytes': 1, 'default': 0xff}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('entry', self.__field_entry, None) yield ('number', self.__field_number, None) class speeddials(BaseProtogenClass): __fields=['speeddials'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddials,self).__init__(**dict) if self.__class__ is speeddials: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddials,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddials,kwargs) if len(args): dict2={'length': NUMSPEEDDIALS, 'elementclass': speeddial} dict2.update(kwargs) kwargs=dict2 self.__field_speeddials=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_speeddials(self): try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) return self.__field_speeddials.getvalue() def __setfield_speeddials(self, value): if isinstance(value,LIST): self.__field_speeddials=value else: self.__field_speeddials=LIST(value,**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) def __delfield_speeddials(self): del self.__field_speeddials speeddials=property(__getfield_speeddials, __setfield_speeddials, __delfield_speeddials, None) def iscontainer(self): return True def containerelements(self): yield ('speeddials', self.__field_speeddials, None) class indexentry(BaseProtogenClass): __fields=['index', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_index.writetobuffer(buf) try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 50, 'default': ""}) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_index.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 50, 'default': ""}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 50, 'default': ""}) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 50, 'default': ""}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('name', self.__field_name, None) class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['numactiveitems', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('items', self.__field_items, None) class pbgroup(BaseProtogenClass): "A single group" __fields=['icon', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroup,self).__init__(**dict) if self.__class__ is pbgroup: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroup,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroup,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_icon.writetobuffer(buf) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_icon=UINT(**{'sizeinbytes': 1}) self.__field_icon.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_icon(self): return self.__field_icon.getvalue() def __setfield_icon(self, value): if isinstance(value,UINT): self.__field_icon=value else: self.__field_icon=UINT(value,**{'sizeinbytes': 1}) def __delfield_icon(self): del self.__field_icon icon=property(__getfield_icon, __setfield_icon, __delfield_icon, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('icon', self.__field_icon, None) yield ('name', self.__field_name, None) class pbgroups(BaseProtogenClass): "Phonebook groups" __fields=['groups'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroups,self).__init__(**dict) if self.__class__ is pbgroups: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroups,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroups,kwargs) if len(args): dict2={'elementclass': pbgroup} dict2.update(kwargs) kwargs=dict2 self.__field_groups=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_groups(self): try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) return self.__field_groups.getvalue() def __setfield_groups(self, value): if isinstance(value,LIST): self.__field_groups=value else: self.__field_groups=LIST(value,**{'elementclass': pbgroup}) def __delfield_groups(self): del self.__field_groups groups=property(__getfield_groups, __setfield_groups, __delfield_groups, None) def iscontainer(self): return True def containerelements(self): yield ('groups', self.__field_groups, None) class pbentry(BaseProtogenClass): __fields=['serial1', 'entrysize', 'serial2', 'entrynumber', 'name', 'group', 'emails', 'url', 'ringtone', 'msgringtone', 'secret', 'memo', 'wallpaper', 'unknown1', 'numbertypes', 'numbers', 'unknown20c'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_serial1.writetobuffer(buf) self.__field_entrysize.writetobuffer(buf) self.__field_serial2.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_group.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgux5000_94, 'length': NUMEMAILS}) self.__field_emails.writetobuffer(buf) self.__field_url.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_msgringtone.writetobuffer(buf) self.__field_secret.writetobuffer(buf) self.__field_memo.writetobuffer(buf) self.__field_wallpaper.writetobuffer(buf) try: self.__field_unknown1 except: self.__field_unknown1=UINT(**{'sizeinbytes': 9, 'default': 0 }) self.__field_unknown1.writetobuffer(buf) try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgux5000_103, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgux5000_105, 'length': NUMPHONENUMBERS}) self.__field_numbers.writetobuffer(buf) try: self.__field_unknown20c except: self.__field_unknown20c=UNKNOWN() self.__field_unknown20c.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_entrysize=UINT(**{'sizeinbytes': 2}) self.__field_entrysize.readfrombuffer(buf) self.__field_serial2=UINT(**{'sizeinbytes': 4}) self.__field_serial2.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 2}) self.__field_entrynumber.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 2}) self.__field_group.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_lgux5000_94, 'length': NUMEMAILS}) self.__field_emails.readfrombuffer(buf) self.__field_url=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_url.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_msgringtone=UINT(**{'sizeinbytes': 1}) self.__field_msgringtone.readfrombuffer(buf) self.__field_secret=BOOL(**{'sizeinbytes': 1}) self.__field_secret.readfrombuffer(buf) self.__field_memo=USTRING(**{'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) self.__field_memo.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 1}) self.__field_wallpaper.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 9, 'default': 0 }) self.__field_unknown1.readfrombuffer(buf) self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgux5000_103, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.readfrombuffer(buf) self.__field_numbers=LIST(**{'elementclass': _gen_p_lgux5000_105, 'length': NUMPHONENUMBERS}) self.__field_numbers.readfrombuffer(buf) self.__field_unknown20c=UNKNOWN() self.__field_unknown20c.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_entrysize(self): return self.__field_entrysize.getvalue() def __setfield_entrysize(self, value): if isinstance(value,UINT): self.__field_entrysize=value else: self.__field_entrysize=UINT(value,**{'sizeinbytes': 2}) def __delfield_entrysize(self): del self.__field_entrysize entrysize=property(__getfield_entrysize, __setfield_entrysize, __delfield_entrysize, None) def __getfield_serial2(self): return self.__field_serial2.getvalue() def __setfield_serial2(self, value): if isinstance(value,UINT): self.__field_serial2=value else: self.__field_serial2=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial2(self): del self.__field_serial2 serial2=property(__getfield_serial2, __setfield_serial2, __delfield_serial2, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 2}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 2}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgux5000_94, 'length': NUMEMAILS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_lgux5000_94, 'length': NUMEMAILS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, None) def __getfield_url(self): return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,USTRING): self.__field_url=value else: self.__field_url=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "ringtone index for a call") def __getfield_msgringtone(self): return self.__field_msgringtone.getvalue() def __setfield_msgringtone(self, value): if isinstance(value,UINT): self.__field_msgringtone=value else: self.__field_msgringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_msgringtone(self): del self.__field_msgringtone msgringtone=property(__getfield_msgringtone, __setfield_msgringtone, __delfield_msgringtone, "ringtone index for a text message") def __getfield_secret(self): return self.__field_secret.getvalue() def __setfield_secret(self, value): if isinstance(value,BOOL): self.__field_secret=value else: self.__field_secret=BOOL(value,**{'sizeinbytes': 1}) def __delfield_secret(self): del self.__field_secret secret=property(__getfield_secret, __setfield_secret, __delfield_secret, None) def __getfield_memo(self): return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,USTRING): self.__field_memo=value else: self.__field_memo=USTRING(value,**{'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 1}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_unknown1(self): try: self.__field_unknown1 except: self.__field_unknown1=UINT(**{'sizeinbytes': 9, 'default': 0 }) return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 9, 'default': 0 }) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_numbertypes(self): try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgux5000_103, 'length': NUMPHONENUMBERS}) return self.__field_numbertypes.getvalue() def __setfield_numbertypes(self, value): if isinstance(value,LIST): self.__field_numbertypes=value else: self.__field_numbertypes=LIST(value,**{'elementclass': _gen_p_lgux5000_103, 'length': NUMPHONENUMBERS}) def __delfield_numbertypes(self): del self.__field_numbertypes numbertypes=property(__getfield_numbertypes, __setfield_numbertypes, __delfield_numbertypes, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgux5000_105, 'length': NUMPHONENUMBERS}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'elementclass': _gen_p_lgux5000_105, 'length': NUMPHONENUMBERS}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_unknown20c(self): try: self.__field_unknown20c except: self.__field_unknown20c=UNKNOWN() return self.__field_unknown20c.getvalue() def __setfield_unknown20c(self, value): if isinstance(value,UNKNOWN): self.__field_unknown20c=value else: self.__field_unknown20c=UNKNOWN(value,) def __delfield_unknown20c(self): del self.__field_unknown20c unknown20c=property(__getfield_unknown20c, __setfield_unknown20c, __delfield_unknown20c, None) def iscontainer(self): return True def containerelements(self): yield ('serial1', self.__field_serial1, None) yield ('entrysize', self.__field_entrysize, None) yield ('serial2', self.__field_serial2, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('name', self.__field_name, None) yield ('group', self.__field_group, None) yield ('emails', self.__field_emails, None) yield ('url', self.__field_url, None) yield ('ringtone', self.__field_ringtone, "ringtone index for a call") yield ('msgringtone', self.__field_msgringtone, "ringtone index for a text message") yield ('secret', self.__field_secret, None) yield ('memo', self.__field_memo, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('unknown1', self.__field_unknown1, None) yield ('numbertypes', self.__field_numbertypes, None) yield ('numbers', self.__field_numbers, None) yield ('unknown20c', self.__field_unknown20c, None) class _gen_p_lgux5000_94(BaseProtogenClass): 'Anonymous inner class' __fields=['email'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgux5000_94,self).__init__(**dict) if self.__class__ is _gen_p_lgux5000_94: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgux5000_94,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgux5000_94,kwargs) if len(args): dict2={'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_email=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_email.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_email=USTRING(**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_email.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def iscontainer(self): return True def containerelements(self): yield ('email', self.__field_email, None) class _gen_p_lgux5000_103(BaseProtogenClass): 'Anonymous inner class' __fields=['numbertype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgux5000_103,self).__init__(**dict) if self.__class__ is _gen_p_lgux5000_103: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgux5000_103,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgux5000_103,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_numbertype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numbertype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numbertype=UINT(**{'sizeinbytes': 1}) self.__field_numbertype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numbertype(self): return self.__field_numbertype.getvalue() def __setfield_numbertype(self, value): if isinstance(value,UINT): self.__field_numbertype=value else: self.__field_numbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_numbertype(self): del self.__field_numbertype numbertype=property(__getfield_numbertype, __setfield_numbertype, __delfield_numbertype, None) def iscontainer(self): return True def containerelements(self): yield ('numbertype', self.__field_numbertype, None) class _gen_p_lgux5000_105(BaseProtogenClass): 'Anonymous inner class' __fields=['number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgux5000_105,self).__init__(**dict) if self.__class__ is _gen_p_lgux5000_105: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgux5000_105,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgux5000_105,kwargs) if len(args): dict2={'sizeinbytes': 49, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_number=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) class pbreadentryresponse(BaseProtogenClass): "Results of reading one entry" __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbreadentryresponse,self).__init__(**dict) if self.__class__ is pbreadentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbreadentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbreadentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbupdateentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbupdateentryrequest,self).__init__(**dict) if self.__class__ is pbupdateentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbupdateentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbupdateentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x04, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbappendentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbappendentryrequest,self).__init__(**dict) if self.__class__ is pbappendentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbappendentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbappendentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x03, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class scheduleexception(BaseProtogenClass): __fields=['pos', 'day', 'month', 'year'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexception,self).__init__(**dict) if self.__class__ is scheduleexception: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexception,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexception,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_day.writetobuffer(buf) self.__field_month.writetobuffer(buf) self.__field_year.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_day=UINT(**{'sizeinbytes': 1}) self.__field_day.readfrombuffer(buf) self.__field_month=UINT(**{'sizeinbytes': 1}) self.__field_month.readfrombuffer(buf) self.__field_year=UINT(**{'sizeinbytes': 2}) self.__field_year.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "Refers to event id (position in schedule file) that this suppresses") def __getfield_day(self): return self.__field_day.getvalue() def __setfield_day(self, value): if isinstance(value,UINT): self.__field_day=value else: self.__field_day=UINT(value,**{'sizeinbytes': 1}) def __delfield_day(self): del self.__field_day day=property(__getfield_day, __setfield_day, __delfield_day, None) def __getfield_month(self): return self.__field_month.getvalue() def __setfield_month(self, value): if isinstance(value,UINT): self.__field_month=value else: self.__field_month=UINT(value,**{'sizeinbytes': 1}) def __delfield_month(self): del self.__field_month month=property(__getfield_month, __setfield_month, __delfield_month, None) def __getfield_year(self): return self.__field_year.getvalue() def __setfield_year(self, value): if isinstance(value,UINT): self.__field_year=value else: self.__field_year=UINT(value,**{'sizeinbytes': 2}) def __delfield_year(self): del self.__field_year year=property(__getfield_year, __setfield_year, __delfield_year, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "Refers to event id (position in schedule file) that this suppresses") yield ('day', self.__field_day, None) yield ('month', self.__field_month, None) yield ('year', self.__field_year, None) class scheduleexceptionfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexceptionfile,self).__init__(**dict) if self.__class__ is scheduleexceptionfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexceptionfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexceptionfile,kwargs) if len(args): dict2={'elementclass': scheduleexception} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': scheduleexception}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class scheduleevent(BaseProtogenClass): __fields=['pos', 'start', 'end', 'repeat', 'daybitmap', 'alarmminutes', 'alarmhours', 'alarmtype', 'snoozedelay', 'ringtone', 'description', 'unknown1', 'hasvoice', 'voiceid', 'unknown2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleevent,self).__init__(**dict) if self.__class__ is scheduleevent: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleevent,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleevent,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) self.__field_daybitmap.writetobuffer(buf) self.__field_alarmminutes.writetobuffer(buf) self.__field_alarmhours.writetobuffer(buf) self.__field_alarmtype.writetobuffer(buf) try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_description.writetobuffer(buf) try: self.__field_unknown1 except: self.__field_unknown1=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_unknown1.writetobuffer(buf) self.__field_hasvoice.writetobuffer(buf) self.__field_voiceid.writetobuffer(buf) try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_unknown2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_start=LGCALDATE(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=LGCALDATE(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_repeat=UINT(**{'sizeinbytes': 1}) self.__field_repeat.readfrombuffer(buf) self.__field_daybitmap=UINT(**{'sizeinbytes': 3}) self.__field_daybitmap.readfrombuffer(buf) self.__field_alarmminutes=UINT(**{'sizeinbytes': 1}) self.__field_alarmminutes.readfrombuffer(buf) self.__field_alarmhours=UINT(**{'sizeinbytes': 1}) self.__field_alarmhours.readfrombuffer(buf) self.__field_alarmtype=UINT(**{'sizeinbytes': 1}) self.__field_alarmtype.readfrombuffer(buf) self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_description=USTRING(**{'sizeinbytes': 35, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_description.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_unknown1.readfrombuffer(buf) self.__field_hasvoice=UINT(**{'sizeinbytes': 2}) self.__field_hasvoice.readfrombuffer(buf) self.__field_voiceid=UINT(**{'sizeinbytes': 2}) self.__field_voiceid.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_unknown2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "position within file, used as an event id") def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,LGCALDATE): self.__field_start=value else: self.__field_start=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,LGCALDATE): self.__field_end=value else: self.__field_end=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,UINT): self.__field_repeat=value else: self.__field_repeat=UINT(value,**{'sizeinbytes': 1}) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, "Repeat?") def __getfield_daybitmap(self): return self.__field_daybitmap.getvalue() def __setfield_daybitmap(self, value): if isinstance(value,UINT): self.__field_daybitmap=value else: self.__field_daybitmap=UINT(value,**{'sizeinbytes': 3}) def __delfield_daybitmap(self): del self.__field_daybitmap daybitmap=property(__getfield_daybitmap, __setfield_daybitmap, __delfield_daybitmap, "which days a weekly repeat event happens on?") def __getfield_alarmminutes(self): return self.__field_alarmminutes.getvalue() def __setfield_alarmminutes(self, value): if isinstance(value,UINT): self.__field_alarmminutes=value else: self.__field_alarmminutes=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmminutes(self): del self.__field_alarmminutes alarmminutes=property(__getfield_alarmminutes, __setfield_alarmminutes, __delfield_alarmminutes, "a value of 100 indicates not set") def __getfield_alarmhours(self): return self.__field_alarmhours.getvalue() def __setfield_alarmhours(self, value): if isinstance(value,UINT): self.__field_alarmhours=value else: self.__field_alarmhours=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmhours(self): del self.__field_alarmhours alarmhours=property(__getfield_alarmhours, __setfield_alarmhours, __delfield_alarmhours, "a value of 100 indicates not set") def __getfield_alarmtype(self): return self.__field_alarmtype.getvalue() def __setfield_alarmtype(self, value): if isinstance(value,UINT): self.__field_alarmtype=value else: self.__field_alarmtype=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmtype(self): del self.__field_alarmtype alarmtype=property(__getfield_alarmtype, __setfield_alarmtype, __delfield_alarmtype, "preset alarm reminder type") def __getfield_snoozedelay(self): try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_snoozedelay.getvalue() def __setfield_snoozedelay(self, value): if isinstance(value,UINT): self.__field_snoozedelay=value else: self.__field_snoozedelay=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_snoozedelay(self): del self.__field_snoozedelay snoozedelay=property(__getfield_snoozedelay, __setfield_snoozedelay, __delfield_snoozedelay, "in minutes?") def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_description(self): return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,USTRING): self.__field_description=value else: self.__field_description=USTRING(value,**{'sizeinbytes': 35, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def __getfield_unknown1(self): try: self.__field_unknown1 except: self.__field_unknown1=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, "This seems to always be two zeros") def __getfield_hasvoice(self): return self.__field_hasvoice.getvalue() def __setfield_hasvoice(self, value): if isinstance(value,UINT): self.__field_hasvoice=value else: self.__field_hasvoice=UINT(value,**{'sizeinbytes': 2}) def __delfield_hasvoice(self): del self.__field_hasvoice hasvoice=property(__getfield_hasvoice, __setfield_hasvoice, __delfield_hasvoice, "This event has an associated voice memo if 1") def __getfield_voiceid(self): return self.__field_voiceid.getvalue() def __setfield_voiceid(self, value): if isinstance(value,UINT): self.__field_voiceid=value else: self.__field_voiceid=UINT(value,**{'sizeinbytes': 2}) def __delfield_voiceid(self): del self.__field_voiceid voiceid=property(__getfield_voiceid, __setfield_voiceid, __delfield_voiceid, "sch/schexxx.qcp is the voice memo (xxx = voiceid - 0x0f)") def __getfield_unknown2(self): try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, "This seems to always be yet two more zeros") def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "position within file, used as an event id") yield ('start', self.__field_start, None) yield ('end', self.__field_end, None) yield ('repeat', self.__field_repeat, "Repeat?") yield ('daybitmap', self.__field_daybitmap, "which days a weekly repeat event happens on?") yield ('alarmminutes', self.__field_alarmminutes, "a value of 100 indicates not set") yield ('alarmhours', self.__field_alarmhours, "a value of 100 indicates not set") yield ('alarmtype', self.__field_alarmtype, "preset alarm reminder type") yield ('snoozedelay', self.__field_snoozedelay, "in minutes?") yield ('ringtone', self.__field_ringtone, None) yield ('description', self.__field_description, None) yield ('unknown1', self.__field_unknown1, "This seems to always be two zeros") yield ('hasvoice', self.__field_hasvoice, "This event has an associated voice memo if 1") yield ('voiceid', self.__field_voiceid, "sch/schexxx.qcp is the voice memo (xxx = voiceid - 0x0f)") yield ('unknown2', self.__field_unknown2, "This seems to always be yet two more zeros") class schedulefile(BaseProtogenClass): __fields=['numactiveitems', 'events'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(schedulefile,self).__init__(**dict) if self.__class__ is schedulefile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(schedulefile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(schedulefile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{'elementclass': scheduleevent}) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('events', self.__field_events, None) class camindexentry(BaseProtogenClass): __fields=['index', 'name', 'taken', 'dunno'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(camindexentry,self).__init__(**dict) if self.__class__ is camindexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(camindexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(camindexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_index.writetobuffer(buf) try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 11, 'default': ""}) self.__field_name.writetobuffer(buf) try: self.__field_taken except: self.__field_taken=LGCALDATE(**{'sizeinbytes': 4}) self.__field_taken.writetobuffer(buf) try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default': 0x00ff0100}) self.__field_dunno.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_index.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 11, 'default': ""}) self.__field_name.readfrombuffer(buf) self.__field_taken=LGCALDATE(**{'sizeinbytes': 4}) self.__field_taken.readfrombuffer(buf) self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default': 0x00ff0100}) self.__field_dunno.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 11, 'default': ""}) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 11, 'default': ""}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_taken(self): try: self.__field_taken except: self.__field_taken=LGCALDATE(**{'sizeinbytes': 4}) return self.__field_taken.getvalue() def __setfield_taken(self, value): if isinstance(value,LGCALDATE): self.__field_taken=value else: self.__field_taken=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_taken(self): del self.__field_taken taken=property(__getfield_taken, __setfield_taken, __delfield_taken, None) def __getfield_dunno(self): try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default': 0x00ff0100}) return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 4, 'default': 0x00ff0100}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('name', self.__field_name, None) yield ('taken', self.__field_taken, None) yield ('dunno', self.__field_dunno, None) class campicsdat(BaseProtogenClass): "the cam/pics.dat file" __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(campicsdat,self).__init__(**dict) if self.__class__ is campicsdat: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(campicsdat,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(campicsdat,kwargs) if len(args): dict2={'length': 60, 'elementclass': camindexentry, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'length': 60, 'elementclass': camindexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'length': 60, 'elementclass': camindexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'length': 60, 'elementclass': camindexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'length': 60, 'elementclass': camindexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class call(BaseProtogenClass): __fields=['GPStime', 'unknown1', 'duration', 'number', 'name', 'numberlength', 'unknown2', 'pbnumbertype', 'unknown3', 'pbentrynum', 'unknown9'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(call,self).__init__(**dict) if self.__class__ is call: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(call,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(call,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_numberlength.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_pbnumbertype.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_pbentrynum.writetobuffer(buf) self.__field_unknown9.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 4}) self.__field_unknown1.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_numberlength=UINT(**{'sizeinbytes': 1}) self.__field_numberlength.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_pbnumbertype=UINT(**{'sizeinbytes': 1}) self.__field_pbnumbertype.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 2}) self.__field_unknown3.readfrombuffer(buf) self.__field_pbentrynum=UINT(**{'sizeinbytes': 2}) self.__field_pbentrynum.readfrombuffer(buf) self.__field_unknown9=UINT(**{'sizeinbytes': 9}) self.__field_unknown9.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numberlength(self): return self.__field_numberlength.getvalue() def __setfield_numberlength(self, value): if isinstance(value,UINT): self.__field_numberlength=value else: self.__field_numberlength=UINT(value,**{'sizeinbytes': 1}) def __delfield_numberlength(self): del self.__field_numberlength numberlength=property(__getfield_numberlength, __setfield_numberlength, __delfield_numberlength, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_pbnumbertype(self): return self.__field_pbnumbertype.getvalue() def __setfield_pbnumbertype(self, value): if isinstance(value,UINT): self.__field_pbnumbertype=value else: self.__field_pbnumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_pbnumbertype(self): del self.__field_pbnumbertype pbnumbertype=property(__getfield_pbnumbertype, __setfield_pbnumbertype, __delfield_pbnumbertype, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_pbentrynum(self): return self.__field_pbentrynum.getvalue() def __setfield_pbentrynum(self, value): if isinstance(value,UINT): self.__field_pbentrynum=value else: self.__field_pbentrynum=UINT(value,**{'sizeinbytes': 2}) def __delfield_pbentrynum(self): del self.__field_pbentrynum pbentrynum=property(__getfield_pbentrynum, __setfield_pbentrynum, __delfield_pbentrynum, None) def __getfield_unknown9(self): return self.__field_unknown9.getvalue() def __setfield_unknown9(self, value): if isinstance(value,UINT): self.__field_unknown9=value else: self.__field_unknown9=UINT(value,**{'sizeinbytes': 9}) def __delfield_unknown9(self): del self.__field_unknown9 unknown9=property(__getfield_unknown9, __setfield_unknown9, __delfield_unknown9, None) def iscontainer(self): return True def containerelements(self): yield ('GPStime', self.__field_GPStime, None) yield ('unknown1', self.__field_unknown1, None) yield ('duration', self.__field_duration, None) yield ('number', self.__field_number, None) yield ('name', self.__field_name, None) yield ('numberlength', self.__field_numberlength, None) yield ('unknown2', self.__field_unknown2, None) yield ('pbnumbertype', self.__field_pbnumbertype, None) yield ('unknown3', self.__field_unknown3, None) yield ('pbentrynum', self.__field_pbentrynum, None) yield ('unknown9', self.__field_unknown9, None) class callhistory(BaseProtogenClass): __fields=['numcalls', 'unknown1', 'calls'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callhistory,self).__init__(**dict) if self.__class__ is callhistory: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callhistory,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callhistory,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numcalls.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numcalls=UINT(**{'sizeinbytes': 4}) self.__field_numcalls.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numcalls(self): return self.__field_numcalls.getvalue() def __setfield_numcalls(self, value): if isinstance(value,UINT): self.__field_numcalls=value else: self.__field_numcalls=UINT(value,**{'sizeinbytes': 4}) def __delfield_numcalls(self): del self.__field_numcalls numcalls=property(__getfield_numcalls, __setfield_numcalls, __delfield_numcalls, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_calls(self): try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) return self.__field_calls.getvalue() def __setfield_calls(self, value): if isinstance(value,LIST): self.__field_calls=value else: self.__field_calls=LIST(value,**{'elementclass': call}) def __delfield_calls(self): del self.__field_calls calls=property(__getfield_calls, __setfield_calls, __delfield_calls, None) def iscontainer(self): return True def containerelements(self): yield ('numcalls', self.__field_numcalls, None) yield ('unknown1', self.__field_unknown1, None) yield ('calls', self.__field_calls, None) class firmwareresponse(BaseProtogenClass): __fields=['command', 'date1', 'time1', 'date2', 'time2', 'firmware'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(firmwareresponse,self).__init__(**dict) if self.__class__ is firmwareresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(firmwareresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(firmwareresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_date1.writetobuffer(buf) self.__field_time1.writetobuffer(buf) self.__field_date2.writetobuffer(buf) self.__field_time2.writetobuffer(buf) self.__field_firmware.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_date1=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date1.readfrombuffer(buf) self.__field_time1=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time1.readfrombuffer(buf) self.__field_date2=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date2.readfrombuffer(buf) self.__field_time2=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time2.readfrombuffer(buf) self.__field_firmware=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_firmware.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_date1(self): return self.__field_date1.getvalue() def __setfield_date1(self, value): if isinstance(value,USTRING): self.__field_date1=value else: self.__field_date1=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date1(self): del self.__field_date1 date1=property(__getfield_date1, __setfield_date1, __delfield_date1, None) def __getfield_time1(self): return self.__field_time1.getvalue() def __setfield_time1(self, value): if isinstance(value,USTRING): self.__field_time1=value else: self.__field_time1=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time1(self): del self.__field_time1 time1=property(__getfield_time1, __setfield_time1, __delfield_time1, None) def __getfield_date2(self): return self.__field_date2.getvalue() def __setfield_date2(self, value): if isinstance(value,USTRING): self.__field_date2=value else: self.__field_date2=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date2(self): del self.__field_date2 date2=property(__getfield_date2, __setfield_date2, __delfield_date2, None) def __getfield_time2(self): return self.__field_time2.getvalue() def __setfield_time2(self, value): if isinstance(value,USTRING): self.__field_time2=value else: self.__field_time2=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time2(self): del self.__field_time2 time2=property(__getfield_time2, __setfield_time2, __delfield_time2, None) def __getfield_firmware(self): return self.__field_firmware.getvalue() def __setfield_firmware(self, value): if isinstance(value,USTRING): self.__field_firmware=value else: self.__field_firmware=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_firmware(self): del self.__field_firmware firmware=property(__getfield_firmware, __setfield_firmware, __delfield_firmware, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('date1', self.__field_date1, None) yield ('time1', self.__field_time1, None) yield ('date2', self.__field_date2, None) yield ('time2', self.__field_time2, None) yield ('firmware', self.__field_firmware, None) class recipient_record(BaseProtogenClass): __fields=['unknown1', 'number', 'status', 'timesent', 'timereceived', 'unknown2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(recipient_record,self).__init__(**dict) if self.__class__ is recipient_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(recipient_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(recipient_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_timereceived.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UINT(**{'sizeinbytes': 14}) self.__field_unknown1.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49}) self.__field_number.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_timereceived=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timereceived.readfrombuffer(buf) self.__field_unknown2=DATA(**{'sizeinbytes': 40}) self.__field_unknown2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 14}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_timereceived(self): return self.__field_timereceived.getvalue() def __setfield_timereceived(self, value): if isinstance(value,LGCALDATE): self.__field_timereceived=value else: self.__field_timereceived=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timereceived(self): del self.__field_timereceived timereceived=property(__getfield_timereceived, __setfield_timereceived, __delfield_timereceived, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,DATA): self.__field_unknown2=value else: self.__field_unknown2=DATA(value,**{'sizeinbytes': 40}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('number', self.__field_number, None) yield ('status', self.__field_status, None) yield ('timesent', self.__field_timesent, None) yield ('timereceived', self.__field_timereceived, None) yield ('unknown2', self.__field_unknown2, None) class sms_saved(BaseProtogenClass): __fields=['outboxmsg', 'GPStime', 'outbox', 'inbox'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_saved,self).__init__(**dict) if self.__class__ is sms_saved: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_saved,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_saved,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_outboxmsg.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) if self.outboxmsg: self.__field_outbox.writetobuffer(buf) if not self.outboxmsg: self.__field_inbox.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_outboxmsg=UINT(**{'sizeinbytes': 4}) self.__field_outboxmsg.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) if self.outboxmsg: self.__field_outbox=sms_out() self.__field_outbox.readfrombuffer(buf) if not self.outboxmsg: self.__field_inbox=sms_in() self.__field_inbox.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_outboxmsg(self): return self.__field_outboxmsg.getvalue() def __setfield_outboxmsg(self, value): if isinstance(value,UINT): self.__field_outboxmsg=value else: self.__field_outboxmsg=UINT(value,**{'sizeinbytes': 4}) def __delfield_outboxmsg(self): del self.__field_outboxmsg outboxmsg=property(__getfield_outboxmsg, __setfield_outboxmsg, __delfield_outboxmsg, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_outbox(self): return self.__field_outbox.getvalue() def __setfield_outbox(self, value): if isinstance(value,sms_out): self.__field_outbox=value else: self.__field_outbox=sms_out(value,) def __delfield_outbox(self): del self.__field_outbox outbox=property(__getfield_outbox, __setfield_outbox, __delfield_outbox, None) def __getfield_inbox(self): return self.__field_inbox.getvalue() def __setfield_inbox(self, value): if isinstance(value,sms_in): self.__field_inbox=value else: self.__field_inbox=sms_in(value,) def __delfield_inbox(self): del self.__field_inbox inbox=property(__getfield_inbox, __setfield_inbox, __delfield_inbox, None) def iscontainer(self): return True def containerelements(self): yield ('outboxmsg', self.__field_outboxmsg, None) yield ('GPStime', self.__field_GPStime, None) if self.outboxmsg: yield ('outbox', self.__field_outbox, None) if not self.outboxmsg: yield ('inbox', self.__field_inbox, None) class sms_out(BaseProtogenClass): __fields=['index', 'locked', 'unknown1', 'timesent', 'subject', 'unknown2', 'num_msg_elements', 'messages', 'unknown6', 'priority', 'unknown7', 'unknown8', 'callback', 'recipients'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_out,self).__init__(**dict) if self.__class__ is sms_out: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_out,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_out,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) self.__field_messages.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_unknown7.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) self.__field_callback.writetobuffer(buf) try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record, 'length': 10}) self.__field_recipients.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 3}) self.__field_unknown1.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_unknown2=DATA(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) self.__field_messages.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 2}) self.__field_unknown6.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_unknown7=DATA(**{'sizeinbytes': 13}) self.__field_unknown7.readfrombuffer(buf) self.__field_unknown8=DATA(**{'sizeinbytes': 3}) self.__field_unknown8.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 23}) self.__field_callback.readfrombuffer(buf) self.__field_recipients=LIST(**{'elementclass': recipient_record, 'length': 10}) self.__field_recipients.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,DATA): self.__field_unknown2=value else: self.__field_unknown2=DATA(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_messages(self): try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) return self.__field_messages.getvalue() def __setfield_messages(self, value): if isinstance(value,LIST): self.__field_messages=value else: self.__field_messages=LIST(value,**{'elementclass': msg_record, 'length': 7}) def __delfield_messages(self): del self.__field_messages messages=property(__getfield_messages, __setfield_messages, __delfield_messages, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_unknown7(self): return self.__field_unknown7.getvalue() def __setfield_unknown7(self, value): if isinstance(value,DATA): self.__field_unknown7=value else: self.__field_unknown7=DATA(value,**{'sizeinbytes': 13}) def __delfield_unknown7(self): del self.__field_unknown7 unknown7=property(__getfield_unknown7, __setfield_unknown7, __delfield_unknown7, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,DATA): self.__field_unknown8=value else: self.__field_unknown8=DATA(value,**{'sizeinbytes': 3}) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 23}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_recipients(self): try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record, 'length': 10}) return self.__field_recipients.getvalue() def __setfield_recipients(self, value): if isinstance(value,LIST): self.__field_recipients=value else: self.__field_recipients=LIST(value,**{'elementclass': recipient_record, 'length': 10}) def __delfield_recipients(self): del self.__field_recipients recipients=property(__getfield_recipients, __setfield_recipients, __delfield_recipients, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('locked', self.__field_locked, None) yield ('unknown1', self.__field_unknown1, None) yield ('timesent', self.__field_timesent, None) yield ('subject', self.__field_subject, None) yield ('unknown2', self.__field_unknown2, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('messages', self.__field_messages, None) yield ('unknown6', self.__field_unknown6, None) yield ('priority', self.__field_priority, None) yield ('unknown7', self.__field_unknown7, None) yield ('unknown8', self.__field_unknown8, None) yield ('callback', self.__field_callback, None) yield ('recipients', self.__field_recipients, None) class SMSINBOXMSGFRAGMENT(BaseProtogenClass): __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSINBOXMSGFRAGMENT,self).__init__(**dict) if self.__class__ is SMSINBOXMSGFRAGMENT: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSINBOXMSGFRAGMENT,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSINBOXMSGFRAGMENT,kwargs) if len(args): dict2={'elementclass': _gen_p_lgux5000_262, 'length': 181} dict2.update(kwargs) kwargs=dict2 self.__field_msg=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgux5000_262, 'length': 181}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=LIST(**{'elementclass': _gen_p_lgux5000_262, 'length': 181}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgux5000_262, 'length': 181}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgux5000_262, 'length': 181}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class _gen_p_lgux5000_262(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgux5000_262,self).__init__(**dict) if self.__class__ is _gen_p_lgux5000_262: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgux5000_262,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgux5000_262,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class sms_in(BaseProtogenClass): __fields=['msg_index1', 'msg_index2', 'unknown2', 'unknown3', 'timesent', 'unknown', 'callback_length', 'callback', 'sender_length', 'sender', 'unknown4', 'lg_time', 'GPStime', 'unknown5', 'read', 'locked', 'unknown8', 'priority', 'flags', 'subject', 'bin_header1', 'bin_header2', 'multipartID', 'unknown6', 'bin_header3', 'num_msg_elements', 'msglengths', 'msgs', 'unknown5', 'senders_name', 'unknown6'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_in,self).__init__(**dict) if self.__class__ is sms_in: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_in,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_in,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msg_index1.writetobuffer(buf) self.__field_msg_index2.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self.__field_callback_length.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_sender_length.writetobuffer(buf) try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgux5000_275, 'length': 38}) self.__field_sender.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_lg_time.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_flags.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_bin_header1.writetobuffer(buf) self.__field_bin_header2.writetobuffer(buf) self.__field_multipartID.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_bin_header3.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgux5000_293, 'length': 20}) self.__field_msglengths.writetobuffer(buf) try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_senders_name.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg_index1=UINT(**{'sizeinbytes': 4}) self.__field_msg_index1.readfrombuffer(buf) self.__field_msg_index2=UINT(**{'sizeinbytes': 4}) self.__field_msg_index2.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2}) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 4}) self.__field_unknown3.readfrombuffer(buf) self.__field_timesent=SMSDATE(**{'sizeinbytes': 6}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown=UINT(**{'sizeinbytes': 3}) self.__field_unknown.readfrombuffer(buf) self.__field_callback_length=UINT(**{'sizeinbytes': 1}) self.__field_callback_length.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 38}) self.__field_callback.readfrombuffer(buf) self.__field_sender_length=UINT(**{'sizeinbytes': 1}) self.__field_sender_length.readfrombuffer(buf) self.__field_sender=LIST(**{'elementclass': _gen_p_lgux5000_275, 'length': 38}) self.__field_sender.readfrombuffer(buf) self.__field_unknown4=DATA(**{'sizeinbytes': 15}) self.__field_unknown4.readfrombuffer(buf) self.__field_lg_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_lg_time.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 2}) self.__field_unknown5.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 1}) self.__field_read.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown8=UINT(**{'sizeinbytes': 2}) self.__field_unknown8.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_flags=DATA(**{'sizeinbytes': 6}) self.__field_flags.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_bin_header1=UINT(**{'sizeinbytes': 1}) self.__field_bin_header1.readfrombuffer(buf) self.__field_bin_header2=UINT(**{'sizeinbytes': 1}) self.__field_bin_header2.readfrombuffer(buf) self.__field_multipartID=UINT(**{'sizeinbytes': 1}) self.__field_multipartID.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 3}) self.__field_unknown6.readfrombuffer(buf) self.__field_bin_header3=UINT(**{'sizeinbytes': 1}) self.__field_bin_header3.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgux5000_293, 'length': 20}) self.__field_msglengths.readfrombuffer(buf) self.__field_msgs=LIST(**{'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.readfrombuffer(buf) self.__field_unknown5=DATA(**{'sizeinbytes': 68}) self.__field_unknown5.readfrombuffer(buf) self.__field_senders_name=USTRING(**{'sizeinbytes': 33}) self.__field_senders_name.readfrombuffer(buf) self.__field_unknown6=DATA(**{'sizeinbytes': 169}) self.__field_unknown6.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg_index1(self): return self.__field_msg_index1.getvalue() def __setfield_msg_index1(self, value): if isinstance(value,UINT): self.__field_msg_index1=value else: self.__field_msg_index1=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index1(self): del self.__field_msg_index1 msg_index1=property(__getfield_msg_index1, __setfield_msg_index1, __delfield_msg_index1, None) def __getfield_msg_index2(self): return self.__field_msg_index2.getvalue() def __setfield_msg_index2(self, value): if isinstance(value,UINT): self.__field_msg_index2=value else: self.__field_msg_index2=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index2(self): del self.__field_msg_index2 msg_index2=property(__getfield_msg_index2, __setfield_msg_index2, __delfield_msg_index2, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,SMSDATE): self.__field_timesent=value else: self.__field_timesent=SMSDATE(value,**{'sizeinbytes': 6}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UINT): self.__field_unknown=value else: self.__field_unknown=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def __getfield_callback_length(self): return self.__field_callback_length.getvalue() def __setfield_callback_length(self, value): if isinstance(value,UINT): self.__field_callback_length=value else: self.__field_callback_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_length(self): del self.__field_callback_length callback_length=property(__getfield_callback_length, __setfield_callback_length, __delfield_callback_length, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 38}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_sender_length(self): return self.__field_sender_length.getvalue() def __setfield_sender_length(self, value): if isinstance(value,UINT): self.__field_sender_length=value else: self.__field_sender_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_sender_length(self): del self.__field_sender_length sender_length=property(__getfield_sender_length, __setfield_sender_length, __delfield_sender_length, None) def __getfield_sender(self): try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgux5000_275, 'length': 38}) return self.__field_sender.getvalue() def __setfield_sender(self, value): if isinstance(value,LIST): self.__field_sender=value else: self.__field_sender=LIST(value,**{'elementclass': _gen_p_lgux5000_275, 'length': 38}) def __delfield_sender(self): del self.__field_sender sender=property(__getfield_sender, __setfield_sender, __delfield_sender, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,DATA): self.__field_unknown4=value else: self.__field_unknown4=DATA(value,**{'sizeinbytes': 15}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_lg_time(self): return self.__field_lg_time.getvalue() def __setfield_lg_time(self, value): if isinstance(value,LGCALDATE): self.__field_lg_time=value else: self.__field_lg_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_lg_time(self): del self.__field_lg_time lg_time=property(__getfield_lg_time, __setfield_lg_time, __delfield_lg_time, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 1}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,UINT): self.__field_unknown8=value else: self.__field_unknown8=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_flags(self): return self.__field_flags.getvalue() def __setfield_flags(self, value): if isinstance(value,DATA): self.__field_flags=value else: self.__field_flags=DATA(value,**{'sizeinbytes': 6}) def __delfield_flags(self): del self.__field_flags flags=property(__getfield_flags, __setfield_flags, __delfield_flags, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_bin_header1(self): return self.__field_bin_header1.getvalue() def __setfield_bin_header1(self, value): if isinstance(value,UINT): self.__field_bin_header1=value else: self.__field_bin_header1=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header1(self): del self.__field_bin_header1 bin_header1=property(__getfield_bin_header1, __setfield_bin_header1, __delfield_bin_header1, None) def __getfield_bin_header2(self): return self.__field_bin_header2.getvalue() def __setfield_bin_header2(self, value): if isinstance(value,UINT): self.__field_bin_header2=value else: self.__field_bin_header2=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header2(self): del self.__field_bin_header2 bin_header2=property(__getfield_bin_header2, __setfield_bin_header2, __delfield_bin_header2, None) def __getfield_multipartID(self): return self.__field_multipartID.getvalue() def __setfield_multipartID(self, value): if isinstance(value,UINT): self.__field_multipartID=value else: self.__field_multipartID=UINT(value,**{'sizeinbytes': 1}) def __delfield_multipartID(self): del self.__field_multipartID multipartID=property(__getfield_multipartID, __setfield_multipartID, __delfield_multipartID, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_bin_header3(self): return self.__field_bin_header3.getvalue() def __setfield_bin_header3(self, value): if isinstance(value,UINT): self.__field_bin_header3=value else: self.__field_bin_header3=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header3(self): del self.__field_bin_header3 bin_header3=property(__getfield_bin_header3, __setfield_bin_header3, __delfield_bin_header3, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_msglengths(self): try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgux5000_293, 'length': 20}) return self.__field_msglengths.getvalue() def __setfield_msglengths(self, value): if isinstance(value,LIST): self.__field_msglengths=value else: self.__field_msglengths=LIST(value,**{'elementclass': _gen_p_lgux5000_293, 'length': 20}) def __delfield_msglengths(self): del self.__field_msglengths msglengths=property(__getfield_msglengths, __setfield_msglengths, __delfield_msglengths, None) def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,DATA): self.__field_unknown5=value else: self.__field_unknown5=DATA(value,**{'sizeinbytes': 68}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_senders_name(self): return self.__field_senders_name.getvalue() def __setfield_senders_name(self, value): if isinstance(value,USTRING): self.__field_senders_name=value else: self.__field_senders_name=USTRING(value,**{'sizeinbytes': 33}) def __delfield_senders_name(self): del self.__field_senders_name senders_name=property(__getfield_senders_name, __setfield_senders_name, __delfield_senders_name, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,DATA): self.__field_unknown6=value else: self.__field_unknown6=DATA(value,**{'sizeinbytes': 169}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def iscontainer(self): return True def containerelements(self): yield ('msg_index1', self.__field_msg_index1, None) yield ('msg_index2', self.__field_msg_index2, None) yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) yield ('timesent', self.__field_timesent, None) yield ('unknown', self.__field_unknown, None) yield ('callback_length', self.__field_callback_length, None) yield ('callback', self.__field_callback, None) yield ('sender_length', self.__field_sender_length, None) yield ('sender', self.__field_sender, None) yield ('unknown4', self.__field_unknown4, None) yield ('lg_time', self.__field_lg_time, None) yield ('GPStime', self.__field_GPStime, None) yield ('unknown5', self.__field_unknown5, None) yield ('read', self.__field_read, None) yield ('locked', self.__field_locked, None) yield ('unknown8', self.__field_unknown8, None) yield ('priority', self.__field_priority, None) yield ('flags', self.__field_flags, None) yield ('subject', self.__field_subject, None) yield ('bin_header1', self.__field_bin_header1, None) yield ('bin_header2', self.__field_bin_header2, None) yield ('multipartID', self.__field_multipartID, None) yield ('unknown6', self.__field_unknown6, None) yield ('bin_header3', self.__field_bin_header3, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('msglengths', self.__field_msglengths, None) yield ('msgs', self.__field_msgs, None) yield ('unknown5', self.__field_unknown5, None) yield ('senders_name', self.__field_senders_name, None) yield ('unknown6', self.__field_unknown6, None) class _gen_p_lgux5000_275(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgux5000_275,self).__init__(**dict) if self.__class__ is _gen_p_lgux5000_275: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgux5000_275,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgux5000_275,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of senders phone number") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of senders phone number") class _gen_p_lgux5000_293(BaseProtogenClass): 'Anonymous inner class' __fields=['msglength'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgux5000_293,self).__init__(**dict) if self.__class__ is _gen_p_lgux5000_293: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgux5000_293,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgux5000_293,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_msglength=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msglength.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msglength=UINT(**{'sizeinbytes': 1}) self.__field_msglength.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msglength(self): return self.__field_msglength.getvalue() def __setfield_msglength(self, value): if isinstance(value,UINT): self.__field_msglength=value else: self.__field_msglength=UINT(value,**{'sizeinbytes': 1}) def __delfield_msglength(self): del self.__field_msglength msglength=property(__getfield_msglength, __setfield_msglength, __delfield_msglength, "lengths of individual messages in septets") def iscontainer(self): return True def containerelements(self): yield ('msglength', self.__field_msglength, "lengths of individual messages in septets") class sms_quick_text(BaseProtogenClass): __fields=['msgs'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_quick_text,self).__init__(**dict) if self.__class__ is sms_quick_text: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_quick_text,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_quick_text,kwargs) if len(args): dict2={'elementclass': _gen_p_lgux5000_309, } dict2.update(kwargs) kwargs=dict2 self.__field_msgs=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgux5000_309, }) self.__field_msgs.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msgs=LIST(**{'elementclass': _gen_p_lgux5000_309, }) self.__field_msgs.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgux5000_309, }) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'elementclass': _gen_p_lgux5000_309, }) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def iscontainer(self): return True def containerelements(self): yield ('msgs', self.__field_msgs, None) class _gen_p_lgux5000_309(BaseProtogenClass): 'Anonymous inner class' __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgux5000_309,self).__init__(**dict) if self.__class__ is _gen_p_lgux5000_309: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgux5000_309,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgux5000_309,kwargs) if len(args): dict2={'encoding': PHONE_ENCODING} dict2.update(kwargs) kwargs=dict2 self.__field_msg=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=USTRING(**{'encoding': PHONE_ENCODING}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{'encoding': PHONE_ENCODING}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class textmemo(BaseProtogenClass): __fields=['text'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemo,self).__init__(**dict) if self.__class__ is textmemo: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemo,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemo,kwargs) if len(args): dict2={'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } dict2.update(kwargs) kwargs=dict2 self.__field_text=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_text.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_text=USTRING(**{'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_text.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,USTRING): self.__field_text=value else: self.__field_text=USTRING(value,**{'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def iscontainer(self): return True def containerelements(self): yield ('text', self.__field_text, None) class textmemofile(BaseProtogenClass): __fields=['itemcount', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemofile,self).__init__(**dict) if self.__class__ is textmemofile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemofile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemofile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_itemcount.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_itemcount=UINT(**{'sizeinbytes': 4}) self.__field_itemcount.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_itemcount(self): return self.__field_itemcount.getvalue() def __setfield_itemcount(self, value): if isinstance(value,UINT): self.__field_itemcount=value else: self.__field_itemcount=UINT(value,**{'sizeinbytes': 4}) def __delfield_itemcount(self): del self.__field_itemcount itemcount=property(__getfield_itemcount, __setfield_itemcount, __delfield_itemcount, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': textmemo }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('itemcount', self.__field_itemcount, None) yield ('items', self.__field_items, None) bitpim-1.0.7+dfsg1/src/phones/p_lgvx11000.p0000644001616600161660000002001011274703471016273 0ustar amuamu### BITPIM ( -*- python -*- ) ### ### Copyright (C) 2009 Nathan Hjelm ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### %{ """Various descriptions of data specific to LG VX11000""" # groups - same as VX-8700 (added group wallpaper bit) # phonebook - LG Phonebook v1.0 (same as VX-8550) # schedule - same as VX-8550 # memos - same as VX-8550 # sms - same as VX-9100 # index file - same as VX-9700 # favorites - same as VX-9600 from p_lgvx9600 import * # SMS index files inbox_index = "dload/inbox.dat" outbox_index = "dload/outbox.dat" drafts_index = "dload/drafts.dat" # Phonebook addresses pa_file_name = "pim/pbaddress.dat" pb_group_filename = "pim/pbgroup.dat" #Group Picture ID Path Index File GroupWPPathIndexFile='pim/pbGroupPixIdSetAsPath.dat' # Phonebook favorites favorites_file_name = "pim/pbFavorite.dat" NUMFAVORITES=10 #verified these constants specific to VX11000 PHONEBOOKENTRYSIZE=512 NUMSPEEDDIALS=1000 FIRSTSPEEDDIAL=1 LASTSPEEDDIAL=999 NUMEMERGENCYCONTACTS=3 NUMPHONEBOOKENTRIES=1000 NUMEMAILS=2 NUMPHONENUMBERS=5 MAXCALENDARDESCRIPTION=32 MAX_PHONEBOOK_GROUPS=30 MEMOLENGTH=300 SMS_CANNED_MAX_ITEMS=30 SMS_CANNED_MAX_LENGTH=100 NUMCALENDARENTRIES=300 #TODO: need to verify this number PA_ENTRY_SOR = "" %} # Call history PACKET call: 4 GPSDATE GPStime # no. of seconds since 0h 1-6-80, based off local time. 4 UINT unk0 # different for each call 4 UINT duration # seconds, not certain about length of this field 49 USTRING {'raiseonunterminatedread': False} number 36 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 1 UINT numberlength # length of phone number 1 UINT status # 0=outgoing, 1=incoming, 2=missed, etc 1 UINT pbnumbertype # 1=cell, 2=home, 3=office, 4=cell2, 5=fax, 6=vmail, 0xFF=not in phone book 4 UINT unk1 # always seems to be 0 2 UINT pbentrynum # entry number in phonebook 76 DATA number_location # set by pay software # same as the VX-8560 without the unknown entry at the beginning of the file PACKET callhistory: 4 UINT numcalls 1 UINT unk1 * LIST {'elementclass': call, 'length': self.numcalls} +calls # pbspeed.dat PACKET speeddial: 2 UINT {'default': 0xffff} +entry "0-based entry number" 1 UINT {'default': 0xff} +number "number type" %{ def valid(self): return self.entry!=0xffff %} PACKET speeddials: * LIST {'length': NUMSPEEDDIALS, 'elementclass': speeddial} +speeddials # /pim/pbentry.dat format PACKET pbfileentry: 5 STRING { 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff\xff' } +entry_tag if self.entry_tag==PB_ENTRY_SOR: 1 UINT { 'default': 0xff } + unk4 * PBDateTime { 'defaulttocurrenttime': True } +mod_date 6 STRING { 'terminator': None, 'default': '\xff\xff\xff\xff\xff\xff' } +unk0 4 UINT entry_number1 # 1 based entry number -- might be just 2 bytes long 2 UINT entry_number0 # 0 based entry number 34 USTRING { 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } +name 2 UINT { 'default': 0 } +group 58 UNKNOWN +unk1 * LIST {'length': NUMEMAILS} +emails: 49 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} email 2 UINT { 'default': 0xffff } +ringtone 2 UINT { 'default': 0 } +wallpaper * LIST {'length': NUMPHONENUMBERS} +numbertypes: 1 UINT { 'default': 0 } numbertype 1 UINT { 'default': 0 } +unk2 * LIST {'length': NUMPHONENUMBERS} +numberindices: 2 UINT { 'default': 0xffff } numberindex 2 UINT { 'default': 0xffff } +addressindex 2 UINT { 'default': 0xffff } +unk3 260 USTRING { 'raiseonunterminatedread': False, 'default': '', 'encoding': PHONE_ENCODING } +memo # maybe 6 USTRING { 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''} +exit_tag else: # this is a blank entry, fill it up with 0xFF 507 DATA { 'default': '\xff'*507 } +dontcare %{ def valid(self): global PB_ENTRY_SOR return self.entry_tag==PB_ENTRY_SOR and ord(self.name[0]) != 0xff %} PACKET pbfile: * LIST { 'elementclass': pbfileentry, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True} +items 6 STRING { 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False } +eof_tag 10 STRING { 'raiseonunterminatedread': False, 'raiseontruncate': False } +model_name * PBDateTime { 'defaulttocurrenttime': True } +mod_date 477 DATA { 'default': '\x00'*221 } + blanks 7 STRING { 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False } +eof_close_tag PACKET pafileentry: 5 STRING { 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff\xff' } +entry_tag if self.entry_tag==PA_ENTRY_SOR: 1 UINT { 'default': 0x00 }+pad * PBDateTime { 'defaulttocurrenttime': True } +mod_date 6 UNKNOWN +zeros 2 UINT +index 2 UINT +pb_entry 52 USTRING { 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' } +street 52 USTRING { 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' } +city 52 USTRING { 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' } +state 13 USTRING { 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' } +zip_code 52 USTRING { 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' } +country 6 USTRING { 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''} +exit_tag else: # this is a blank entry, fill it up with 0xFF 250 DATA { 'default': '\xff'*250 } +dontcare %{ def valid(self): global PA_ENTRY_SOR return self.entry_tag==PA_ENTRY_SOR %} PACKET pafile: * LIST { 'elementclass': pafileentry, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True } +items PACKET pbgroup: 33 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' } +name 2 UINT { 'default': 0 } +groupid 1 UINT { 'default': 0 } +user_added "=1 when was added by user" 2 UINT { 'default': 0 } +wallpaper PACKET pbgroups: "Phonebook groups" * LIST {'elementclass': pbgroup, 'raiseonincompleteread': False, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True} +groups # Favorites -- added on the Versa (LG VX-9600) PACKET favorite: 2 UINT { 'default': 0xffff } +pb_index # contact or group id 1 UINT { 'default': 0xff } +fav_type # 1 - contact, 2 - group %{ def has_pbentry(self): return self.pb_index != 0xffff and self.fav_type == 1 %} PACKET favorites: * LIST { 'elementclass': favorite, 'length': NUMFAVORITES } +items %{ def set_favorite(self, index, entity_index, ispbentry): if index < NUMFAVORITES: self.items[index].pb_index = entity_index if ispbentry: self.items[index].fav_type = 1 else: self.items[index].fav_type = 2 %} PACKET GroupPicID_PathIndexEntry: 255 USTRING { 'encoding': PHONE_ENCODING, 'default': '' } +pathname PACKET GroupPicID_PathIndexFile: * LIST { 'elementclass': GroupPicID_PathIndexEntry, 'raiseonincompleteread': False, 'createdefault': True} +items bitpim-1.0.7+dfsg1/src/phones/com_motov710m.py0000644001616600161660000002407510733033631017222 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_motov710m.py 4516 2007-12-21 22:00:57Z djpham $ """Communicate with Motorola phones using AT commands""" # system modules import time # BitPim modules import bp_obex import common import com_motov710 import p_motov710 import helpids parentphone=com_motov710.Phone class Phone(parentphone): """ Talk to a Motorola V710 phone""" desc='Moto-V710m' helpid=helpids.ID_PHONE_MOTOV710M protocolclass=p_motov710 serialsname='motov710m' MODEOBEX='modeobex' def __init__(self, logtarget, commport): parentphone.__init__(self, logtarget, commport) self.obex=None # mode routines def _setmodeobex(self): self.setmode(self.MODEMODEM) self.log('Switching OBEX') _req=self.protocolclass.modeset() _req.mode=self.protocolclass.MODE_OBEX self.sendATcommand(_req, None) time.sleep(0.5) self.obex=bp_obex.FolderBrowsingService(self, self.comm) if self.obex.connect(): return True del self.obex self.obex=None return False def _setmodeobextomodem(self): if self.obex: self.log('Switching from OBEX to modem') self.obex.disconnect() del self.obex self.obex=None return True # Ringtones stuff---------------------------------------------------------- def _read_obex_media(self, index_key, media_key, media_path, fundamentals): # read media files through OBEX in case BREW fails # need to be in OBEX mode _media=fundamentals.get(media_key, {}) _dir_list=fundamentals.get(media_path, {}) for _key,_entry in fundamentals.get(index_key, {}).items(): if _entry.get('filename', None) and \ not _media.has_key(_entry['name']): # this one associates with a file AND has not been read try: _filename=media_path+'/'+common.basename(_entry['filename']) _filesize=_dir_list.get(_entry['filename'], {}).get('size', None) _media[_entry['name']]=self.obex.getfilecontents(_filename, _filesize) except: self.log('Failed to read media file.') if __debug__: raise return _media def getringtones(self, fundamentals): """Retrieve ringtones data""" self.log('Reading ringtones') self.setmode(self.MODEPHONEBOOK) self.setmode(self.MODEBREW) try: fundamentals['audio']=self.listfiles(self.protocolclass.RT_PATH) except: fundamentals['audio']={} self.setmode(self.MODEOBEX) try: fundamentals['ringtone']=self._read_obex_media('ringtone-index', 'ringtone', 'audio', fundamentals) except: if __debug__: self.setmode(self.MODEMODEM) raise self.setmode(self.MODEMODEM) del fundamentals['audio'] return fundamentals def _get_del_new_list(self, index_key, media_key, merge, fundamentals, origins): """Return a list of media being deleted and being added""" _index=fundamentals.get(index_key, {}) _media=fundamentals.get(media_key, {}) _index_file_list=[_entry['name'] for _entry in _index.values() \ if _entry.has_key('filename') and \ _entry.get('origin', None) in origins ] _bp_file_list=[_entry['name'] for _entry in _media.values() \ if _entry.get('origin', None) in origins ] if merge: # just add the new files, don't delete anything _del_list=[] _new_list=_bp_file_list else: # Delete specified files and add everything _del_list=[x for x in _index_file_list if x not in _bp_file_list] _new_list=_bp_file_list return _del_list, _new_list def _del_files(self, index_key, media_path, _del_list, fundamentals): """Delete specified media files, need to be in OBEX mode""" _index=fundamentals.get(index_key, {}) for _file in _del_list: _file_name=media_path+'/'+_file try: self.obex.rmfile(_file_name) except Exception, e: self.log('Failed to delete OBEX file %s: %s'%(_file_name, `e`)) def _replace_files(self, index_key, media_key, new_list, fundamentals): """Replace existing files with new contents using BREW""" _index=fundamentals.get(index_key, {}) _media=fundamentals.get(media_key, {}) for _file in new_list: _data=self._item_from_index(_file, 'data', _media) if not _data: self.log('Failed to write file %s due to no data'%_file) continue _file_name=self._item_from_index(_file, 'filename', _index) if _file_name: # existing file, check if the same one _stat=self.statfile(_file_name) if _stat and _stat['size']!=len(_data): # different size, replace it try: self.writefile(_file_name, _data) except: self.log('Failed to write BREW file '+_file_name) if __debug__: raise def _add_files(self, index_key, media_key, media_path, new_list, fundamentals): """Add new file using OBEX""" _index=fundamentals.get(index_key, {}) _media=fundamentals.get(media_key, {}) for _file in new_list: _data=self._item_from_index(_file, 'data', _media) if not _data: self.log('Failed to write file %s due to no data'%_file) continue if self._item_from_index(_file, None, _index) is None: # new file _file_name=media_path+'/'+_file try: self.obex.writefile(_file_name, _data) except: self.log('Failed to write OBEX file '+_file_name) if __debug__: raise def saveringtones(self, fundamentals, merge): """Save ringtones to the phone""" self.log('Writing ringtones to the phone') self.setmode(self.MODEPHONEBOOK) self.setmode(self.MODEBREW) try: _del_list, _new_list=self._get_del_new_list('ringtone-index', 'ringtone', merge, fundamentals, frozenset(['ringers'])) # replace files, need to be in BREW mode self._replace_files('ringtone-index', 'ringtone', _new_list, fundamentals) # delete files, need to be in OBEX mode self.setmode(self.MODEOBEX) self._del_files('ringtone-index', 'audio', _del_list, fundamentals) # and add new files, need to be in OBEX mode self._add_files('ringtone-index', 'ringtone', 'audio', _new_list, fundamentals) except: if __debug__: self.setmode(self.MODEMODEM) raise self.setmode(self.MODEMODEM) return fundamentals def savewallpapers(self, fundamentals, merge): """Save wallpapers to the phone""" self.log('Writing wallpapers to the phone') self.setmode(self.MODEPHONEBOOK) self.setmode(self.MODEBREW) try: _del_list, _new_list=self._get_del_new_list('wallpaper-index', 'wallpapers', merge, fundamentals, frozenset(['images'])) # replace files, need to be in BREW mode self._replace_files('wallpaper-index', 'wallpapers', _new_list, fundamentals) # delete files, need to be in OBEX mode self.setmode(self.MODEOBEX) self._del_files('wallpaper-index', 'picture', _del_list, fundamentals) # and add new files, need to be in OBEX mode self._add_files('wallpaper-index', 'wallpapers', 'picture', _new_list, fundamentals) except: if __debug__: self.setmode(self.MODEMODEM) raise self.setmode(self.MODEMODEM) return fundamentals #------------------------------------------------------------------------------ parentprofile=com_motov710.Profile class Profile(parentprofile): serialsname=Phone.serialsname phone_model='V710M' _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'read', None), # all calendar reading ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('ringtone', 'read', None), # all ringtone reading ('ringtone', 'write', None), ('ringtone', 'write', 'OVERWRITE'), ('wallpaper', 'read', None), # all wallpaper reading ('wallpaper', 'write', None), ('wallpaper', 'write', 'OVERWRITE'), ('sms', 'read', None), ) bitpim-1.0.7+dfsg1/src/phones/p_moto.p0000644001616600161660000002216110733033631015711 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: $ %{ """Various descriptions of data specific to Motorola phones""" from prototypes import * from prototypes_moto import * from p_etsi import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb # charset constant CHARSET_8859_1="8859-1" CHARSET_8859_A="8859-A" CHARSET_8859_C="8859-C" CHARSET_8859_H="8859-H" CHARSET_ASCII="ASCII" CHARSET_GSM="GSM" CHARSET_KSC5601="KSC5601" CHARSET_UCS2="UCS2" CHARSET_UTF8="UTF8" # phone mode constant MODE_MODEM=0 MODE_PHONEBOOK=2 MODE_OBEX=22 # phonebook constant PB_DIALED='DC' PB_MISSED='MC' PB_MAIN='AD' PB_INCOMING='RC' PB_QUICKDIAL='QD' LOCAL_TYPE_LOCAL=129 LOCAL_TYPE_INTERNATIONAL=145 LOCAL_TYPE_UNKNOWN=128 NUMBER_TYPE_WORK=0 NUMBER_TYPE_HOME=1 NUMBER_TYPE_MAIN=2 NUMBER_TYPE_MOBILE=3 NUMBER_TYPE_FAX=4 NUMBER_TYPE_PAGER=5 NUMBER_TYPE_EMAIL=6 NUMBER_TYPE_MAILING_LIST=7 NUMBER_TYPE_MOBILE2=8 NUMBER_TYPE_EMAIL2=9 NUMBER_TYPE=frozenset([NUMBER_TYPE_WORK, NUMBER_TYPE_HOME, NUMBER_TYPE_MAIN, NUMBER_TYPE_MOBILE, NUMBER_TYPE_FAX, NUMBER_TYPE_PAGER, NUMBER_TYPE_MOBILE2]) EMAIL_TYPE=frozenset([NUMBER_TYPE_EMAIL, NUMBER_TYPE_EMAIL2]) NUMBER_TYPE_NAME={ NUMBER_TYPE_WORK: 'office', NUMBER_TYPE_HOME: 'home', NUMBER_TYPE_MAIN: 'main', NUMBER_TYPE_MOBILE: 'cell', NUMBER_TYPE_FAX: 'fax', NUMBER_TYPE_PAGER: 'pager', NUMBER_TYPE_MOBILE2: 'cell', } NUMBER_TYPE_CODE={ 'office': NUMBER_TYPE_WORK, 'home': NUMBER_TYPE_HOME, 'main': NUMBER_TYPE_MAIN, 'cell': NUMBER_TYPE_MOBILE, 'fax': NUMBER_TYPE_FAX, 'pager': NUMBER_TYPE_PAGER } PB_MAX_NUMBER_LEN=32 PB_MAX_NAME_LEN=24 PB_MAX_EMAIL_LEN=48 PB_TOTAL_ENTRIES=500 PB_RANGE=xrange(1,PB_TOTAL_ENTRIES+1) PB_TOTAL_MISSED_CALLS=60 PB_TOTAL_DIALED_CALLS=60 PB_TOTAL_RECEIVED_CALLS=60 PB_TOTAL_GROUP=30 PB_GROUP_RANGE=xrange(1, PB_TOTAL_GROUP+1) PB_GROUP_NAME_LEN=24 RT_BUILTIN=0x0C RT_CUSTOM=0x0D RT_INDEX_FILE='/MyToneDB.db' # SMS Stuff SMS_INBOX="IM" SMS_OUTBOX="OM" SMS_INFO="BM" SMS_DRAFTS="DM" SMS_COMBINE="MT" SMS_REC_UNREAD="REC UNREAD" SMS_REC_READ="REC READ" SMS_STO_UNSENT="STO UNSENT" SMS_STO_SENT="STO SENT" SMS_ALL="ALL" SMS_HEADER_ONLY="HEADER ONLY" SMS_INDEX_RANGE=xrange(1, 353) %} # Misc Phone Info stuff PACKET esnrequest: * CSVSTRING { 'quotechar': None, 'terminator': None, 'default': '+CGSN' } +command PACKET esnresponse: * CSVSTRING { 'quotechar': None, 'terminator': ord(' '), 'default': '+CGSN:' } command 3 DATA esnlabel * CSVSTRING { 'quotechar': None, 'terminator': None } esn PACKET string_resp: * CSVSTRING { 'quotechar': None, 'terminator': ord(' ') } command * CSVSTRING { 'quotechar': None, 'terminator': None } value PACKET manufacturer_req: * CSVSTRING { 'quotechar': None, 'terminator': None, 'default': '+GMI' } +command PACKET model_req: * CSVSTRING { 'quotechar': None, 'terminator': None, 'default': '+GMM' } +command PACKET number_req: * CSVSTRING { 'quotechar': None, 'terminator': None, 'default': '+CNUM' } +command PACKET firmware_req: * CSVSTRING { 'quotechar': None, 'terminator': None, 'default': '+GMR' } +command PACKET signal_req: * CSVSTRING { 'quotechar': None, 'terminator': None, 'default': '+CSQ?' } +command PACKET signal_resp: * CSVSTRING { 'quotechar': None, 'terminator': ord(' ') } command * CSVINT rssi * CSVINT { 'terminator': None } ber PACKET battery_req: * CSVSTRING { 'quotechar': None, 'terminator': None, 'default': '+CBC' } +command PACKET battery_resp: * CSVSTRING { 'quotechar': None, 'terminator': ord(' ') } command * CSVINT status * CSVINT { 'terminator': None } level PACKET modereq: * CSVSTRING { 'quotechar': None, 'terminator': None, 'default': '+MODE?' } +command PACKET moderesp: * CSVSTRING { 'quotechar': None, 'terminator': ord(' '), 'default': '+MODE:' } command * CSVINT { 'terminator': None } mode PACKET modeset: * CSVSTRING { 'quotechar': None, 'terminator': None, 'default': '+MODE=' } +command * CSVINT { 'terminator': None, 'default': 0 } +mode PACKET charset_set_req: * CSVSTRING { 'quotechar': None, 'terminator': None, 'default': '+CSCS=' } +command * CSVSTRING { 'terminator': None } +charset PACKET featurereq: * CSVSTRING { 'quotechar': None, 'terminator': None, 'default': '+MAID?' } +command PACKET featureresp: * CSVSTRING { 'quotechar': None, 'terminator': ord(' '), 'default': '+MAID:' } command * CSVINT has_phonebook * CSVINT has_datebook * CSVINT has_sms * CSVINT has_mo_sms * CSVINT has_email * CSVINT has_multi_phonebooks * CSVINT has_sim * CSVINT has_shared_phonebook * CSVINT has_multi_dest_addr * CSVINT has_ringtone_id * CSVINT has_voicetag * CSVSTRING { 'quotechar': None, 'terminator': None } +dunno # Phonebook stuff PACKET select_phonebook_req: * CSVSTRING { 'quotechar': None, 'terminator': None, 'default': '+CPBS=' } +command * CSVSTRING { 'terminator': None, 'default': PB_MAIN } +pb_type PACKET read_pb_simple_req: * CSVSTRING { 'quotechar': None, 'terminator': None, 'default': '+CPBR=' } +command * CSVINT { 'default': 1 } +start_index * CSVINT { 'terminator': None, 'default': self.start_index } +end_index PACKET read_pb_simple_resp: * CSVSTRING { 'quotechar': None, 'terminator': ord(' '), 'default': '+CPBR:' } +command * CSVINT index * CSVSTRING number * CSVINT local_type * CSVSTRING { 'terminator': None } name PACKET read_pb_req: * CSVSTRING { 'quotechar': None, 'terminator': None, 'default': '+MPBR=' } +command * CSVINT { 'default': 1 } +start_index * CSVINT { 'terminator': None, 'default': self.start_index } +end_index PACKET read_pb_resp: * CSVSTRING { 'quotechar': None, 'terminator': ord(' '), 'default': '+MPBR:' } command * CSVINT index * CSVSTRING number * CSVINT local_type * CSVSTRING name * CSVINT number_type * CSVINT voice_tag * CSVINT ringtone * CSVINT backlight * CSVINT is_primary * CSVINT group * CSVINT icon * CSVINT first_last_enabled * CSVINT subfield_index * CSVSTRING picture_name * CSVSTRING { 'quotechar': None, 'terminator': None } dunno PACKET write_pb_req: * CSVSTRING { 'quotechar': None, 'terminator': None, 'default': '+MPBW=' } +command * CSVINT index * CSVSTRING { 'maxsizeinbytes': PB_MAX_NUMBER_LEN, 'raiseontruncate': False } number * CSVINT { 'default': LOCAL_TYPE_LOCAL } +local_type * CSVSTRING { 'maxsizeinbytes': PB_MAX_NAME_LEN, 'raiseontruncate': False } name * CSVINT number_type * CSVINT { 'default': 0 } +voice_tag * CSVINT { 'default': 255 } +ringtone * CSVINT { 'default': 0 } +backlight * CSVINT { 'default': 0 } +is_primary * CSVINT { 'default': 1 } +group * CSVINT { 'default': 255 } +icon * CSVINT { 'default': 255 } +first_last_enabled * CSVINT { 'default': 0 } +subfield_index * CSVSTRING { 'terminator': None, 'default': "" } +picture_name PACKET del_pb_req: * CSVSTRING { 'quotechar': None, 'terminator': None, 'default': '+MPBW=' } +command * CSVINT { 'terminator': None } index # SMS Stuff PACKET sms_sel_req: * CSVSTRING { 'quotechar': None, 'terminator': None, 'default': '+CPMS=' } +command * CSVSTRING { 'default': SMS_COMBINE } +mem1 * CSVSTRING { 'default': SMS_OUTBOX } +mem2 * CSVSTRING { 'terminator': None, 'default': SMS_INBOX } +mem3 PACKET sms_m_read_resp: * CSVSTRING { 'quotechar': None, 'terminator': ord(' '), 'default': '+MMGR:' } command P BOOL { 'default': True } +has_date P BOOL { 'default': False } +date_terminated * CSVSTRING sms_type if self.has_date: * CSVSTRING { 'quotechar': None } sms_addr if self.date_terminated: * M_SMSDATETIME sms_date else: * M_SMSDATETIME { 'quotechar': None, 'terminator': None } sms_date else: * CSVSTRING { 'terminator': None, 'quotechar': None } sms_addr PACKET sms_list_req: * CSVSTRING { 'quotechar': None, 'terminator': None, 'default': '+MMGL=' } +command * CSVSTRING { 'terminator': None, 'default': SMS_HEADER_ONLY } +listtype PACKET sms_list_resp: * CSVSTRING { 'quotechar': None, 'terminator': ord(' '), 'default': '+MMGL:' } command * CSVINT index * DATA dontcare bitpim-1.0.7+dfsg1/src/phones/p_lgvx8000.py0000644001616600161660000021214510466234100016414 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VX8000""" from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx7000 except as noted # below from p_lgvx7000 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb class indexentry(BaseProtogenClass): __fields=['index', 'type', 'filename', 'date', 'dunno'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_type.writetobuffer(buf) self.__field_filename.writetobuffer(buf) try: self.__field_date except: self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_date.writetobuffer(buf) self.__field_dunno.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self.__field_type=UINT(**{'sizeinbytes': 2}) self.__field_type.readfrombuffer(buf) self.__field_filename=USTRING(**{'sizeinbytes': 64}) self.__field_filename.readfrombuffer(buf) self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_date.readfrombuffer(buf) self.__field_dunno=UINT(**{'sizeinbytes': 4}) self.__field_dunno.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_type(self): return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,UINT): self.__field_type=value else: self.__field_type=UINT(value,**{'sizeinbytes': 2}) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, None) def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'sizeinbytes': 64}) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, "includes full pathname") def __getfield_date(self): try: self.__field_date except: self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,UINT): self.__field_date=value else: self.__field_date=UINT(value,**{'sizeinbytes': 4, 'default': 0}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, "i think this is bitfield of the date") def __getfield_dunno(self): return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 4}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('type', self.__field_type, None) yield ('filename', self.__field_filename, "includes full pathname") yield ('date', self.__field_date, "i think this is bitfield of the date") yield ('dunno', self.__field_dunno, None) class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): dict2={'elementclass': indexentry, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class msg_record(BaseProtogenClass): __fields=['binary', 'unknown3', 'unknown4', 'unknown6', 'length', 'msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(msg_record,self).__init__(**dict) if self.__class__ is msg_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(msg_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(msg_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_binary.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_length.writetobuffer(buf) try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8000_79, 'length': 220}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_binary=UINT(**{'sizeinbytes': 1}) self.__field_binary.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1}) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 1}) self.__field_unknown4.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 1}) self.__field_unknown6.readfrombuffer(buf) self.__field_length=UINT(**{'sizeinbytes': 1}) self.__field_length.readfrombuffer(buf) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8000_79, 'length': 220}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_binary(self): return self.__field_binary.getvalue() def __setfield_binary(self, value): if isinstance(value,UINT): self.__field_binary=value else: self.__field_binary=UINT(value,**{'sizeinbytes': 1}) def __delfield_binary(self): del self.__field_binary binary=property(__getfield_binary, __setfield_binary, __delfield_binary, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_length(self): return self.__field_length.getvalue() def __setfield_length(self, value): if isinstance(value,UINT): self.__field_length=value else: self.__field_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_length(self): del self.__field_length length=property(__getfield_length, __setfield_length, __delfield_length, None) def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8000_79, 'length': 220}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx8000_79, 'length': 220}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('binary', self.__field_binary, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) yield ('unknown6', self.__field_unknown6, None) yield ('length', self.__field_length, None) yield ('msg', self.__field_msg, None) class _gen_p_lgvx8000_79(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8000_79,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8000_79: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8000_79,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8000_79,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class recipient_record(BaseProtogenClass): __fields=['unknown1', 'number', 'status', 'timesent', 'timereceived', 'unknown2', 'unknown3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(recipient_record,self).__init__(**dict) if self.__class__ is recipient_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(recipient_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(recipient_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_timereceived.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=DATA(**{'sizeinbytes': 33}) self.__field_unknown1.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49}) self.__field_number.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_timereceived=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timereceived.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=DATA(**{'sizeinbytes': 40}) self.__field_unknown3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,DATA): self.__field_unknown1=value else: self.__field_unknown1=DATA(value,**{'sizeinbytes': 33}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_timereceived(self): return self.__field_timereceived.getvalue() def __setfield_timereceived(self, value): if isinstance(value,LGCALDATE): self.__field_timereceived=value else: self.__field_timereceived=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timereceived(self): del self.__field_timereceived timereceived=property(__getfield_timereceived, __setfield_timereceived, __delfield_timereceived, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,DATA): self.__field_unknown3=value else: self.__field_unknown3=DATA(value,**{'sizeinbytes': 40}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('number', self.__field_number, None) yield ('status', self.__field_status, None) yield ('timesent', self.__field_timesent, None) yield ('timereceived', self.__field_timereceived, None) yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) class sms_saved(BaseProtogenClass): __fields=['outboxmsg', 'pad', 'outbox', 'inbox'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_saved,self).__init__(**dict) if self.__class__ is sms_saved: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_saved,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_saved,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_outboxmsg.writetobuffer(buf) self.__field_pad.writetobuffer(buf) if self.outboxmsg: self.__field_outbox.writetobuffer(buf) if not self.outboxmsg: self.__field_inbox.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_outboxmsg=UINT(**{'sizeinbytes': 4}) self.__field_outboxmsg.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 4}) self.__field_pad.readfrombuffer(buf) if self.outboxmsg: self.__field_outbox=sms_out() self.__field_outbox.readfrombuffer(buf) if not self.outboxmsg: self.__field_inbox=sms_in() self.__field_inbox.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_outboxmsg(self): return self.__field_outboxmsg.getvalue() def __setfield_outboxmsg(self, value): if isinstance(value,UINT): self.__field_outboxmsg=value else: self.__field_outboxmsg=UINT(value,**{'sizeinbytes': 4}) def __delfield_outboxmsg(self): del self.__field_outboxmsg outboxmsg=property(__getfield_outboxmsg, __setfield_outboxmsg, __delfield_outboxmsg, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 4}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_outbox(self): return self.__field_outbox.getvalue() def __setfield_outbox(self, value): if isinstance(value,sms_out): self.__field_outbox=value else: self.__field_outbox=sms_out(value,) def __delfield_outbox(self): del self.__field_outbox outbox=property(__getfield_outbox, __setfield_outbox, __delfield_outbox, None) def __getfield_inbox(self): return self.__field_inbox.getvalue() def __setfield_inbox(self, value): if isinstance(value,sms_in): self.__field_inbox=value else: self.__field_inbox=sms_in(value,) def __delfield_inbox(self): del self.__field_inbox inbox=property(__getfield_inbox, __setfield_inbox, __delfield_inbox, None) def iscontainer(self): return True def containerelements(self): yield ('outboxmsg', self.__field_outboxmsg, None) yield ('pad', self.__field_pad, None) if self.outboxmsg: yield ('outbox', self.__field_outbox, None) if not self.outboxmsg: yield ('inbox', self.__field_inbox, None) class sms_out(BaseProtogenClass): __fields=['index', 'locked', 'unknown2', 'timesent', 'unknown2', 'subject', 'unknown4', 'num_msg_elements', 'messages', 'unknown1', 'priority', 'unknown5', 'callback', 'recipients', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_out,self).__init__(**dict) if self.__class__ is sms_out: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_out,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_out,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) self.__field_messages.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_callback.writetobuffer(buf) try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) self.__field_recipients.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown2=UNKNOWN(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown2=UNKNOWN(**{'sizeinbytes': 6}) self.__field_unknown2.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21}) self.__field_subject.readfrombuffer(buf) self.__field_unknown4=UNKNOWN(**{'sizeinbytes': 1}) self.__field_unknown4.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 2}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) self.__field_messages.readfrombuffer(buf) self.__field_unknown1=UNKNOWN(**{'sizeinbytes': 14}) self.__field_unknown1.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_unknown5=UNKNOWN(**{'sizeinbytes': 1}) self.__field_unknown5.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 35}) self.__field_callback.readfrombuffer(buf) self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) self.__field_recipients.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UNKNOWN): self.__field_unknown2=value else: self.__field_unknown2=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UNKNOWN): self.__field_unknown2=value else: self.__field_unknown2=UNKNOWN(value,**{'sizeinbytes': 6}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UNKNOWN): self.__field_unknown4=value else: self.__field_unknown4=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 2}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_messages(self): try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) return self.__field_messages.getvalue() def __setfield_messages(self, value): if isinstance(value,LIST): self.__field_messages=value else: self.__field_messages=LIST(value,**{'elementclass': msg_record, 'length': 7}) def __delfield_messages(self): del self.__field_messages messages=property(__getfield_messages, __setfield_messages, __delfield_messages, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UNKNOWN): self.__field_unknown1=value else: self.__field_unknown1=UNKNOWN(value,**{'sizeinbytes': 14}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UNKNOWN): self.__field_unknown5=value else: self.__field_unknown5=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 35}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_recipients(self): try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) return self.__field_recipients.getvalue() def __setfield_recipients(self, value): if isinstance(value,LIST): self.__field_recipients=value else: self.__field_recipients=LIST(value,**{'elementclass': recipient_record,'length': 9}) def __delfield_recipients(self): del self.__field_recipients recipients=property(__getfield_recipients, __setfield_recipients, __delfield_recipients, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('locked', self.__field_locked, None) yield ('unknown2', self.__field_unknown2, None) yield ('timesent', self.__field_timesent, None) yield ('unknown2', self.__field_unknown2, None) yield ('subject', self.__field_subject, None) yield ('unknown4', self.__field_unknown4, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('messages', self.__field_messages, None) yield ('unknown1', self.__field_unknown1, None) yield ('priority', self.__field_priority, None) yield ('unknown5', self.__field_unknown5, None) yield ('callback', self.__field_callback, None) yield ('recipients', self.__field_recipients, None) yield ('pad', self.__field_pad, None) class SMSINBOXMSGFRAGMENT(BaseProtogenClass): __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSINBOXMSGFRAGMENT,self).__init__(**dict) if self.__class__ is SMSINBOXMSGFRAGMENT: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSINBOXMSGFRAGMENT,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSINBOXMSGFRAGMENT,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx8000_117, 'length': 181} dict2.update(kwargs) kwargs=dict2 self.__field_msg=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8000_117, 'length': 181}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8000_117, 'length': 181}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8000_117, 'length': 181}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx8000_117, 'length': 181}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class _gen_p_lgvx8000_117(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8000_117,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8000_117: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8000_117,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8000_117,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class sms_in(BaseProtogenClass): __fields=['unknown1', 'timesent', 'unknown2', 'callback_length', 'callback', 'sender_length', 'sender', 'unknown3', 'lg_time', 'unknown4', 'GPStime', 'unknown5', 'read', 'locked', 'unknown6', 'priority', 'subject', 'bin_header1', 'bin_header2', 'unknown7', 'multipartID', 'bin_header3', 'num_msg_elements', 'msglengths', 'unknown8', 'msgs', 'unknown9'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_in,self).__init__(**dict) if self.__class__ is sms_in: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_in,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_in,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_callback_length.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_sender_length.writetobuffer(buf) try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx8000_127, 'length': 38}) self.__field_sender.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_lg_time.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_bin_header1.writetobuffer(buf) self.__field_bin_header2.writetobuffer(buf) self.__field_unknown7.writetobuffer(buf) self.__field_multipartID.writetobuffer(buf) self.__field_bin_header3.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx8000_145, 'length': 10}) self.__field_msglengths.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.writetobuffer(buf) self.__field_unknown9.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UNKNOWN(**{'sizeinbytes': 10}) self.__field_unknown1.readfrombuffer(buf) self.__field_timesent=SMSDATE(**{'sizeinbytes': 6}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 3}) self.__field_unknown2.readfrombuffer(buf) self.__field_callback_length=UINT(**{'sizeinbytes': 1}) self.__field_callback_length.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 38}) self.__field_callback.readfrombuffer(buf) self.__field_sender_length=UINT(**{'sizeinbytes': 1}) self.__field_sender_length.readfrombuffer(buf) self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx8000_127, 'length': 38}) self.__field_sender.readfrombuffer(buf) self.__field_unknown3=DATA(**{'sizeinbytes': 12}) self.__field_unknown3.readfrombuffer(buf) self.__field_lg_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_lg_time.readfrombuffer(buf) self.__field_unknown4=UNKNOWN(**{'sizeinbytes': 3}) self.__field_unknown4.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 4}) self.__field_unknown5.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 1}) self.__field_read.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 8}) self.__field_unknown6.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21}) self.__field_subject.readfrombuffer(buf) self.__field_bin_header1=UINT(**{'sizeinbytes': 1}) self.__field_bin_header1.readfrombuffer(buf) self.__field_bin_header2=UINT(**{'sizeinbytes': 1}) self.__field_bin_header2.readfrombuffer(buf) self.__field_unknown7=UINT(**{'sizeinbytes': 4}) self.__field_unknown7.readfrombuffer(buf) self.__field_multipartID=UINT(**{'sizeinbytes': 2}) self.__field_multipartID.readfrombuffer(buf) self.__field_bin_header3=UINT(**{'sizeinbytes': 1}) self.__field_bin_header3.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx8000_145, 'length': 10}) self.__field_msglengths.readfrombuffer(buf) self.__field_unknown8=UNKNOWN(**{'sizeinbytes': 10}) self.__field_unknown8.readfrombuffer(buf) self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.readfrombuffer(buf) self.__field_unknown9=UNKNOWN() self.__field_unknown9.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UNKNOWN): self.__field_unknown1=value else: self.__field_unknown1=UNKNOWN(value,**{'sizeinbytes': 10}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,SMSDATE): self.__field_timesent=value else: self.__field_timesent=SMSDATE(value,**{'sizeinbytes': 6}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_callback_length(self): return self.__field_callback_length.getvalue() def __setfield_callback_length(self, value): if isinstance(value,UINT): self.__field_callback_length=value else: self.__field_callback_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_length(self): del self.__field_callback_length callback_length=property(__getfield_callback_length, __setfield_callback_length, __delfield_callback_length, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 38}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_sender_length(self): return self.__field_sender_length.getvalue() def __setfield_sender_length(self, value): if isinstance(value,UINT): self.__field_sender_length=value else: self.__field_sender_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_sender_length(self): del self.__field_sender_length sender_length=property(__getfield_sender_length, __setfield_sender_length, __delfield_sender_length, None) def __getfield_sender(self): try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx8000_127, 'length': 38}) return self.__field_sender.getvalue() def __setfield_sender(self, value): if isinstance(value,LIST): self.__field_sender=value else: self.__field_sender=LIST(value,**{'elementclass': _gen_p_lgvx8000_127, 'length': 38}) def __delfield_sender(self): del self.__field_sender sender=property(__getfield_sender, __setfield_sender, __delfield_sender, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,DATA): self.__field_unknown3=value else: self.__field_unknown3=DATA(value,**{'sizeinbytes': 12}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_lg_time(self): return self.__field_lg_time.getvalue() def __setfield_lg_time(self, value): if isinstance(value,LGCALDATE): self.__field_lg_time=value else: self.__field_lg_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_lg_time(self): del self.__field_lg_time lg_time=property(__getfield_lg_time, __setfield_lg_time, __delfield_lg_time, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UNKNOWN): self.__field_unknown4=value else: self.__field_unknown4=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 1}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 8}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_bin_header1(self): return self.__field_bin_header1.getvalue() def __setfield_bin_header1(self, value): if isinstance(value,UINT): self.__field_bin_header1=value else: self.__field_bin_header1=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header1(self): del self.__field_bin_header1 bin_header1=property(__getfield_bin_header1, __setfield_bin_header1, __delfield_bin_header1, None) def __getfield_bin_header2(self): return self.__field_bin_header2.getvalue() def __setfield_bin_header2(self, value): if isinstance(value,UINT): self.__field_bin_header2=value else: self.__field_bin_header2=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header2(self): del self.__field_bin_header2 bin_header2=property(__getfield_bin_header2, __setfield_bin_header2, __delfield_bin_header2, None) def __getfield_unknown7(self): return self.__field_unknown7.getvalue() def __setfield_unknown7(self, value): if isinstance(value,UINT): self.__field_unknown7=value else: self.__field_unknown7=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown7(self): del self.__field_unknown7 unknown7=property(__getfield_unknown7, __setfield_unknown7, __delfield_unknown7, None) def __getfield_multipartID(self): return self.__field_multipartID.getvalue() def __setfield_multipartID(self, value): if isinstance(value,UINT): self.__field_multipartID=value else: self.__field_multipartID=UINT(value,**{'sizeinbytes': 2}) def __delfield_multipartID(self): del self.__field_multipartID multipartID=property(__getfield_multipartID, __setfield_multipartID, __delfield_multipartID, None) def __getfield_bin_header3(self): return self.__field_bin_header3.getvalue() def __setfield_bin_header3(self, value): if isinstance(value,UINT): self.__field_bin_header3=value else: self.__field_bin_header3=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header3(self): del self.__field_bin_header3 bin_header3=property(__getfield_bin_header3, __setfield_bin_header3, __delfield_bin_header3, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_msglengths(self): try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx8000_145, 'length': 10}) return self.__field_msglengths.getvalue() def __setfield_msglengths(self, value): if isinstance(value,LIST): self.__field_msglengths=value else: self.__field_msglengths=LIST(value,**{'elementclass': _gen_p_lgvx8000_145, 'length': 10}) def __delfield_msglengths(self): del self.__field_msglengths msglengths=property(__getfield_msglengths, __setfield_msglengths, __delfield_msglengths, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,UNKNOWN): self.__field_unknown8=value else: self.__field_unknown8=UNKNOWN(value,**{'sizeinbytes': 10}) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def __getfield_unknown9(self): return self.__field_unknown9.getvalue() def __setfield_unknown9(self, value): if isinstance(value,UNKNOWN): self.__field_unknown9=value else: self.__field_unknown9=UNKNOWN(value,) def __delfield_unknown9(self): del self.__field_unknown9 unknown9=property(__getfield_unknown9, __setfield_unknown9, __delfield_unknown9, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('timesent', self.__field_timesent, None) yield ('unknown2', self.__field_unknown2, None) yield ('callback_length', self.__field_callback_length, None) yield ('callback', self.__field_callback, None) yield ('sender_length', self.__field_sender_length, None) yield ('sender', self.__field_sender, None) yield ('unknown3', self.__field_unknown3, None) yield ('lg_time', self.__field_lg_time, None) yield ('unknown4', self.__field_unknown4, None) yield ('GPStime', self.__field_GPStime, None) yield ('unknown5', self.__field_unknown5, None) yield ('read', self.__field_read, None) yield ('locked', self.__field_locked, None) yield ('unknown6', self.__field_unknown6, None) yield ('priority', self.__field_priority, None) yield ('subject', self.__field_subject, None) yield ('bin_header1', self.__field_bin_header1, None) yield ('bin_header2', self.__field_bin_header2, None) yield ('unknown7', self.__field_unknown7, None) yield ('multipartID', self.__field_multipartID, None) yield ('bin_header3', self.__field_bin_header3, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('msglengths', self.__field_msglengths, None) yield ('unknown8', self.__field_unknown8, None) yield ('msgs', self.__field_msgs, None) yield ('unknown9', self.__field_unknown9, None) class _gen_p_lgvx8000_127(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8000_127,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8000_127: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8000_127,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8000_127,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of senders phone number") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of senders phone number") class _gen_p_lgvx8000_145(BaseProtogenClass): 'Anonymous inner class' __fields=['msglength'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8000_145,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8000_145: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8000_145,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8000_145,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_msglength=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msglength.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msglength=UINT(**{'sizeinbytes': 1}) self.__field_msglength.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msglength(self): return self.__field_msglength.getvalue() def __setfield_msglength(self, value): if isinstance(value,UINT): self.__field_msglength=value else: self.__field_msglength=UINT(value,**{'sizeinbytes': 1}) def __delfield_msglength(self): del self.__field_msglength msglength=property(__getfield_msglength, __setfield_msglength, __delfield_msglength, "lengths of individual messages in septets") def iscontainer(self): return True def containerelements(self): yield ('msglength', self.__field_msglength, "lengths of individual messages in septets") bitpim-1.0.7+dfsg1/src/phones/p_lgvx11000.py0000644001616600161660000030661011274703471016501 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VX11000""" # groups - same as VX-8700 (added group wallpaper bit) # phonebook - LG Phonebook v1.0 (same as VX-8550) # schedule - same as VX-8550 # memos - same as VX-8550 # sms - same as VX-9100 # index file - same as VX-9700 # favorites - same as VX-9600 from p_lgvx9600 import * # SMS index files inbox_index = "dload/inbox.dat" outbox_index = "dload/outbox.dat" drafts_index = "dload/drafts.dat" # Phonebook addresses pa_file_name = "pim/pbaddress.dat" pb_group_filename = "pim/pbgroup.dat" #Group Picture ID Path Index File GroupWPPathIndexFile='pim/pbGroupPixIdSetAsPath.dat' # Phonebook favorites favorites_file_name = "pim/pbFavorite.dat" NUMFAVORITES=10 #verified these constants specific to VX11000 PHONEBOOKENTRYSIZE=512 NUMSPEEDDIALS=1000 FIRSTSPEEDDIAL=1 LASTSPEEDDIAL=999 NUMEMERGENCYCONTACTS=3 NUMPHONEBOOKENTRIES=1000 NUMEMAILS=2 NUMPHONENUMBERS=5 MAXCALENDARDESCRIPTION=32 MAX_PHONEBOOK_GROUPS=30 MEMOLENGTH=300 SMS_CANNED_MAX_ITEMS=30 SMS_CANNED_MAX_LENGTH=100 NUMCALENDARENTRIES=300 #TODO: need to verify this number PA_ENTRY_SOR = "" class call(BaseProtogenClass): __fields=['GPStime', 'unk0', 'duration', 'number', 'name', 'numberlength', 'status', 'pbnumbertype', 'unk1', 'pbentrynum', 'number_location'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(call,self).__init__(**dict) if self.__class__ is call: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(call,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(call,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_unk0.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_numberlength.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_pbnumbertype.writetobuffer(buf) self.__field_unk1.writetobuffer(buf) self.__field_pbentrynum.writetobuffer(buf) self.__field_number_location.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unk0=UINT(**{'sizeinbytes': 4}) self.__field_unk0.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_numberlength=UINT(**{'sizeinbytes': 1}) self.__field_numberlength.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_pbnumbertype=UINT(**{'sizeinbytes': 1}) self.__field_pbnumbertype.readfrombuffer(buf) self.__field_unk1=UINT(**{'sizeinbytes': 4}) self.__field_unk1.readfrombuffer(buf) self.__field_pbentrynum=UINT(**{'sizeinbytes': 2}) self.__field_pbentrynum.readfrombuffer(buf) self.__field_number_location=DATA(**{'sizeinbytes': 76}) self.__field_number_location.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unk0(self): return self.__field_unk0.getvalue() def __setfield_unk0(self, value): if isinstance(value,UINT): self.__field_unk0=value else: self.__field_unk0=UINT(value,**{'sizeinbytes': 4}) def __delfield_unk0(self): del self.__field_unk0 unk0=property(__getfield_unk0, __setfield_unk0, __delfield_unk0, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numberlength(self): return self.__field_numberlength.getvalue() def __setfield_numberlength(self, value): if isinstance(value,UINT): self.__field_numberlength=value else: self.__field_numberlength=UINT(value,**{'sizeinbytes': 1}) def __delfield_numberlength(self): del self.__field_numberlength numberlength=property(__getfield_numberlength, __setfield_numberlength, __delfield_numberlength, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_pbnumbertype(self): return self.__field_pbnumbertype.getvalue() def __setfield_pbnumbertype(self, value): if isinstance(value,UINT): self.__field_pbnumbertype=value else: self.__field_pbnumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_pbnumbertype(self): del self.__field_pbnumbertype pbnumbertype=property(__getfield_pbnumbertype, __setfield_pbnumbertype, __delfield_pbnumbertype, None) def __getfield_unk1(self): return self.__field_unk1.getvalue() def __setfield_unk1(self, value): if isinstance(value,UINT): self.__field_unk1=value else: self.__field_unk1=UINT(value,**{'sizeinbytes': 4}) def __delfield_unk1(self): del self.__field_unk1 unk1=property(__getfield_unk1, __setfield_unk1, __delfield_unk1, None) def __getfield_pbentrynum(self): return self.__field_pbentrynum.getvalue() def __setfield_pbentrynum(self, value): if isinstance(value,UINT): self.__field_pbentrynum=value else: self.__field_pbentrynum=UINT(value,**{'sizeinbytes': 2}) def __delfield_pbentrynum(self): del self.__field_pbentrynum pbentrynum=property(__getfield_pbentrynum, __setfield_pbentrynum, __delfield_pbentrynum, None) def __getfield_number_location(self): return self.__field_number_location.getvalue() def __setfield_number_location(self, value): if isinstance(value,DATA): self.__field_number_location=value else: self.__field_number_location=DATA(value,**{'sizeinbytes': 76}) def __delfield_number_location(self): del self.__field_number_location number_location=property(__getfield_number_location, __setfield_number_location, __delfield_number_location, None) def iscontainer(self): return True def containerelements(self): yield ('GPStime', self.__field_GPStime, None) yield ('unk0', self.__field_unk0, None) yield ('duration', self.__field_duration, None) yield ('number', self.__field_number, None) yield ('name', self.__field_name, None) yield ('numberlength', self.__field_numberlength, None) yield ('status', self.__field_status, None) yield ('pbnumbertype', self.__field_pbnumbertype, None) yield ('unk1', self.__field_unk1, None) yield ('pbentrynum', self.__field_pbentrynum, None) yield ('number_location', self.__field_number_location, None) class callhistory(BaseProtogenClass): __fields=['numcalls', 'unk1', 'calls'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callhistory,self).__init__(**dict) if self.__class__ is callhistory: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callhistory,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callhistory,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numcalls.writetobuffer(buf) self.__field_unk1.writetobuffer(buf) try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call, 'length': self.numcalls}) self.__field_calls.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numcalls=UINT(**{'sizeinbytes': 4}) self.__field_numcalls.readfrombuffer(buf) self.__field_unk1=UINT(**{'sizeinbytes': 1}) self.__field_unk1.readfrombuffer(buf) self.__field_calls=LIST(**{'elementclass': call, 'length': self.numcalls}) self.__field_calls.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numcalls(self): return self.__field_numcalls.getvalue() def __setfield_numcalls(self, value): if isinstance(value,UINT): self.__field_numcalls=value else: self.__field_numcalls=UINT(value,**{'sizeinbytes': 4}) def __delfield_numcalls(self): del self.__field_numcalls numcalls=property(__getfield_numcalls, __setfield_numcalls, __delfield_numcalls, None) def __getfield_unk1(self): return self.__field_unk1.getvalue() def __setfield_unk1(self, value): if isinstance(value,UINT): self.__field_unk1=value else: self.__field_unk1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unk1(self): del self.__field_unk1 unk1=property(__getfield_unk1, __setfield_unk1, __delfield_unk1, None) def __getfield_calls(self): try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call, 'length': self.numcalls}) return self.__field_calls.getvalue() def __setfield_calls(self, value): if isinstance(value,LIST): self.__field_calls=value else: self.__field_calls=LIST(value,**{'elementclass': call, 'length': self.numcalls}) def __delfield_calls(self): del self.__field_calls calls=property(__getfield_calls, __setfield_calls, __delfield_calls, None) def iscontainer(self): return True def containerelements(self): yield ('numcalls', self.__field_numcalls, None) yield ('unk1', self.__field_unk1, None) yield ('calls', self.__field_calls, None) class speeddial(BaseProtogenClass): __fields=['entry', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddial,self).__init__(**dict) if self.__class__ is speeddial: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddial,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddial,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.writetobuffer(buf) try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.readfrombuffer(buf) self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,UINT): self.__field_entry=value else: self.__field_entry=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, "0-based entry number") def __getfield_number(self): try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,UINT): self.__field_number=value else: self.__field_number=UINT(value,**{'sizeinbytes': 1, 'default': 0xff}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, "number type") def iscontainer(self): return True def containerelements(self): yield ('entry', self.__field_entry, "0-based entry number") yield ('number', self.__field_number, "number type") def valid(self): return self.entry!=0xffff class speeddials(BaseProtogenClass): __fields=['speeddials'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddials,self).__init__(**dict) if self.__class__ is speeddials: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddials,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddials,kwargs) if len(args): dict2={'length': NUMSPEEDDIALS, 'elementclass': speeddial} dict2.update(kwargs) kwargs=dict2 self.__field_speeddials=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_speeddials(self): try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) return self.__field_speeddials.getvalue() def __setfield_speeddials(self, value): if isinstance(value,LIST): self.__field_speeddials=value else: self.__field_speeddials=LIST(value,**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) def __delfield_speeddials(self): del self.__field_speeddials speeddials=property(__getfield_speeddials, __setfield_speeddials, __delfield_speeddials, None) def iscontainer(self): return True def containerelements(self): yield ('speeddials', self.__field_speeddials, None) class pbfileentry(BaseProtogenClass): __fields=['entry_tag', 'unk4', 'mod_date', 'unk0', 'entry_number1', 'entry_number0', 'name', 'group', 'unk1', 'emails', 'ringtone', 'wallpaper', 'numbertypes', 'unk2', 'numberindices', 'addressindex', 'unk3', 'memo', 'exit_tag', 'dontcare'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbfileentry,self).__init__(**dict) if self.__class__ is pbfileentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbfileentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbfileentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry_tag except: self.__field_entry_tag=STRING(**{'sizeinbytes': 5, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff\xff' }) self.__field_entry_tag.writetobuffer(buf) if self.entry_tag==PB_ENTRY_SOR: try: self.__field_unk4 except: self.__field_unk4=UINT(**{'sizeinbytes': 1, 'default': 0xff }) self.__field_unk4.writetobuffer(buf) try: self.__field_mod_date except: self.__field_mod_date=PBDateTime(**{ 'defaulttocurrenttime': True }) self.__field_mod_date.writetobuffer(buf) try: self.__field_unk0 except: self.__field_unk0=STRING(**{'sizeinbytes': 6, 'terminator': None, 'default': '\xff\xff\xff\xff\xff\xff' }) self.__field_unk0.writetobuffer(buf) self.__field_entry_number1.writetobuffer(buf) self.__field_entry_number0.writetobuffer(buf) try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 34, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_name.writetobuffer(buf) try: self.__field_group except: self.__field_group=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_group.writetobuffer(buf) try: self.__field_unk1 except: self.__field_unk1=UNKNOWN(**{'sizeinbytes': 58}) self.__field_unk1.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx11000_105, 'length': NUMEMAILS}) self.__field_emails.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_ringtone.writetobuffer(buf) try: self.__field_wallpaper except: self.__field_wallpaper=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_wallpaper.writetobuffer(buf) try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx11000_109, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.writetobuffer(buf) try: self.__field_unk2 except: self.__field_unk2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_unk2.writetobuffer(buf) try: self.__field_numberindices except: self.__field_numberindices=LIST(**{'elementclass': _gen_p_lgvx11000_112, 'length': NUMPHONENUMBERS}) self.__field_numberindices.writetobuffer(buf) try: self.__field_addressindex except: self.__field_addressindex=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_addressindex.writetobuffer(buf) try: self.__field_unk3 except: self.__field_unk3=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_unk3.writetobuffer(buf) try: self.__field_memo except: self.__field_memo=USTRING(**{'sizeinbytes': 260, 'raiseonunterminatedread': False, 'default': '', 'encoding': PHONE_ENCODING }) self.__field_memo.writetobuffer(buf) try: self.__field_exit_tag except: self.__field_exit_tag=USTRING(**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) self.__field_exit_tag.writetobuffer(buf) else: try: self.__field_dontcare except: self.__field_dontcare=DATA(**{'sizeinbytes': 507, 'default': '\xff'*507 }) self.__field_dontcare.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry_tag=STRING(**{'sizeinbytes': 5, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff\xff' }) self.__field_entry_tag.readfrombuffer(buf) if self.entry_tag==PB_ENTRY_SOR: self.__field_unk4=UINT(**{'sizeinbytes': 1, 'default': 0xff }) self.__field_unk4.readfrombuffer(buf) self.__field_mod_date=PBDateTime(**{ 'defaulttocurrenttime': True }) self.__field_mod_date.readfrombuffer(buf) self.__field_unk0=STRING(**{'sizeinbytes': 6, 'terminator': None, 'default': '\xff\xff\xff\xff\xff\xff' }) self.__field_unk0.readfrombuffer(buf) self.__field_entry_number1=UINT(**{'sizeinbytes': 4}) self.__field_entry_number1.readfrombuffer(buf) self.__field_entry_number0=UINT(**{'sizeinbytes': 2}) self.__field_entry_number0.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 34, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_name.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_group.readfrombuffer(buf) self.__field_unk1=UNKNOWN(**{'sizeinbytes': 58}) self.__field_unk1.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx11000_105, 'length': NUMEMAILS}) self.__field_emails.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_ringtone.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_wallpaper.readfrombuffer(buf) self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx11000_109, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.readfrombuffer(buf) self.__field_unk2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_unk2.readfrombuffer(buf) self.__field_numberindices=LIST(**{'elementclass': _gen_p_lgvx11000_112, 'length': NUMPHONENUMBERS}) self.__field_numberindices.readfrombuffer(buf) self.__field_addressindex=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_addressindex.readfrombuffer(buf) self.__field_unk3=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_unk3.readfrombuffer(buf) self.__field_memo=USTRING(**{'sizeinbytes': 260, 'raiseonunterminatedread': False, 'default': '', 'encoding': PHONE_ENCODING }) self.__field_memo.readfrombuffer(buf) self.__field_exit_tag=USTRING(**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) self.__field_exit_tag.readfrombuffer(buf) else: self.__field_dontcare=DATA(**{'sizeinbytes': 507, 'default': '\xff'*507 }) self.__field_dontcare.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry_tag(self): try: self.__field_entry_tag except: self.__field_entry_tag=STRING(**{'sizeinbytes': 5, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff\xff' }) return self.__field_entry_tag.getvalue() def __setfield_entry_tag(self, value): if isinstance(value,STRING): self.__field_entry_tag=value else: self.__field_entry_tag=STRING(value,**{'sizeinbytes': 5, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff\xff' }) def __delfield_entry_tag(self): del self.__field_entry_tag entry_tag=property(__getfield_entry_tag, __setfield_entry_tag, __delfield_entry_tag, None) def __getfield_unk4(self): try: self.__field_unk4 except: self.__field_unk4=UINT(**{'sizeinbytes': 1, 'default': 0xff }) return self.__field_unk4.getvalue() def __setfield_unk4(self, value): if isinstance(value,UINT): self.__field_unk4=value else: self.__field_unk4=UINT(value,**{'sizeinbytes': 1, 'default': 0xff }) def __delfield_unk4(self): del self.__field_unk4 unk4=property(__getfield_unk4, __setfield_unk4, __delfield_unk4, None) def __getfield_mod_date(self): try: self.__field_mod_date except: self.__field_mod_date=PBDateTime(**{ 'defaulttocurrenttime': True }) return self.__field_mod_date.getvalue() def __setfield_mod_date(self, value): if isinstance(value,PBDateTime): self.__field_mod_date=value else: self.__field_mod_date=PBDateTime(value,**{ 'defaulttocurrenttime': True }) def __delfield_mod_date(self): del self.__field_mod_date mod_date=property(__getfield_mod_date, __setfield_mod_date, __delfield_mod_date, None) def __getfield_unk0(self): try: self.__field_unk0 except: self.__field_unk0=STRING(**{'sizeinbytes': 6, 'terminator': None, 'default': '\xff\xff\xff\xff\xff\xff' }) return self.__field_unk0.getvalue() def __setfield_unk0(self, value): if isinstance(value,STRING): self.__field_unk0=value else: self.__field_unk0=STRING(value,**{'sizeinbytes': 6, 'terminator': None, 'default': '\xff\xff\xff\xff\xff\xff' }) def __delfield_unk0(self): del self.__field_unk0 unk0=property(__getfield_unk0, __setfield_unk0, __delfield_unk0, None) def __getfield_entry_number1(self): return self.__field_entry_number1.getvalue() def __setfield_entry_number1(self, value): if isinstance(value,UINT): self.__field_entry_number1=value else: self.__field_entry_number1=UINT(value,**{'sizeinbytes': 4}) def __delfield_entry_number1(self): del self.__field_entry_number1 entry_number1=property(__getfield_entry_number1, __setfield_entry_number1, __delfield_entry_number1, None) def __getfield_entry_number0(self): return self.__field_entry_number0.getvalue() def __setfield_entry_number0(self, value): if isinstance(value,UINT): self.__field_entry_number0=value else: self.__field_entry_number0=UINT(value,**{'sizeinbytes': 2}) def __delfield_entry_number0(self): del self.__field_entry_number0 entry_number0=property(__getfield_entry_number0, __setfield_entry_number0, __delfield_entry_number0, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 34, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 34, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_group(self): try: self.__field_group except: self.__field_group=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_unk1(self): try: self.__field_unk1 except: self.__field_unk1=UNKNOWN(**{'sizeinbytes': 58}) return self.__field_unk1.getvalue() def __setfield_unk1(self, value): if isinstance(value,UNKNOWN): self.__field_unk1=value else: self.__field_unk1=UNKNOWN(value,**{'sizeinbytes': 58}) def __delfield_unk1(self): del self.__field_unk1 unk1=property(__getfield_unk1, __setfield_unk1, __delfield_unk1, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx11000_105, 'length': NUMEMAILS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_lgvx11000_105, 'length': NUMEMAILS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_wallpaper(self): try: self.__field_wallpaper except: self.__field_wallpaper=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_numbertypes(self): try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx11000_109, 'length': NUMPHONENUMBERS}) return self.__field_numbertypes.getvalue() def __setfield_numbertypes(self, value): if isinstance(value,LIST): self.__field_numbertypes=value else: self.__field_numbertypes=LIST(value,**{'elementclass': _gen_p_lgvx11000_109, 'length': NUMPHONENUMBERS}) def __delfield_numbertypes(self): del self.__field_numbertypes numbertypes=property(__getfield_numbertypes, __setfield_numbertypes, __delfield_numbertypes, None) def __getfield_unk2(self): try: self.__field_unk2 except: self.__field_unk2=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_unk2.getvalue() def __setfield_unk2(self, value): if isinstance(value,UINT): self.__field_unk2=value else: self.__field_unk2=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_unk2(self): del self.__field_unk2 unk2=property(__getfield_unk2, __setfield_unk2, __delfield_unk2, None) def __getfield_numberindices(self): try: self.__field_numberindices except: self.__field_numberindices=LIST(**{'elementclass': _gen_p_lgvx11000_112, 'length': NUMPHONENUMBERS}) return self.__field_numberindices.getvalue() def __setfield_numberindices(self, value): if isinstance(value,LIST): self.__field_numberindices=value else: self.__field_numberindices=LIST(value,**{'elementclass': _gen_p_lgvx11000_112, 'length': NUMPHONENUMBERS}) def __delfield_numberindices(self): del self.__field_numberindices numberindices=property(__getfield_numberindices, __setfield_numberindices, __delfield_numberindices, None) def __getfield_addressindex(self): try: self.__field_addressindex except: self.__field_addressindex=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) return self.__field_addressindex.getvalue() def __setfield_addressindex(self, value): if isinstance(value,UINT): self.__field_addressindex=value else: self.__field_addressindex=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_addressindex(self): del self.__field_addressindex addressindex=property(__getfield_addressindex, __setfield_addressindex, __delfield_addressindex, None) def __getfield_unk3(self): try: self.__field_unk3 except: self.__field_unk3=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) return self.__field_unk3.getvalue() def __setfield_unk3(self, value): if isinstance(value,UINT): self.__field_unk3=value else: self.__field_unk3=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_unk3(self): del self.__field_unk3 unk3=property(__getfield_unk3, __setfield_unk3, __delfield_unk3, None) def __getfield_memo(self): try: self.__field_memo except: self.__field_memo=USTRING(**{'sizeinbytes': 260, 'raiseonunterminatedread': False, 'default': '', 'encoding': PHONE_ENCODING }) return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,USTRING): self.__field_memo=value else: self.__field_memo=USTRING(value,**{'sizeinbytes': 260, 'raiseonunterminatedread': False, 'default': '', 'encoding': PHONE_ENCODING }) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def __getfield_exit_tag(self): try: self.__field_exit_tag except: self.__field_exit_tag=USTRING(**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) return self.__field_exit_tag.getvalue() def __setfield_exit_tag(self, value): if isinstance(value,USTRING): self.__field_exit_tag=value else: self.__field_exit_tag=USTRING(value,**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) def __delfield_exit_tag(self): del self.__field_exit_tag exit_tag=property(__getfield_exit_tag, __setfield_exit_tag, __delfield_exit_tag, None) def __getfield_dontcare(self): try: self.__field_dontcare except: self.__field_dontcare=DATA(**{'sizeinbytes': 507, 'default': '\xff'*507 }) return self.__field_dontcare.getvalue() def __setfield_dontcare(self, value): if isinstance(value,DATA): self.__field_dontcare=value else: self.__field_dontcare=DATA(value,**{'sizeinbytes': 507, 'default': '\xff'*507 }) def __delfield_dontcare(self): del self.__field_dontcare dontcare=property(__getfield_dontcare, __setfield_dontcare, __delfield_dontcare, None) def iscontainer(self): return True def containerelements(self): yield ('entry_tag', self.__field_entry_tag, None) if self.entry_tag==PB_ENTRY_SOR: yield ('unk4', self.__field_unk4, None) yield ('mod_date', self.__field_mod_date, None) yield ('unk0', self.__field_unk0, None) yield ('entry_number1', self.__field_entry_number1, None) yield ('entry_number0', self.__field_entry_number0, None) yield ('name', self.__field_name, None) yield ('group', self.__field_group, None) yield ('unk1', self.__field_unk1, None) yield ('emails', self.__field_emails, None) yield ('ringtone', self.__field_ringtone, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('numbertypes', self.__field_numbertypes, None) yield ('unk2', self.__field_unk2, None) yield ('numberindices', self.__field_numberindices, None) yield ('addressindex', self.__field_addressindex, None) yield ('unk3', self.__field_unk3, None) yield ('memo', self.__field_memo, None) yield ('exit_tag', self.__field_exit_tag, None) else: yield ('dontcare', self.__field_dontcare, None) def valid(self): global PB_ENTRY_SOR return self.entry_tag==PB_ENTRY_SOR and ord(self.name[0]) != 0xff class _gen_p_lgvx11000_105(BaseProtogenClass): 'Anonymous inner class' __fields=['email'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx11000_105,self).__init__(**dict) if self.__class__ is _gen_p_lgvx11000_105: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx11000_105,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx11000_105,kwargs) if len(args): dict2={'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_email=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_email.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_email=USTRING(**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_email.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def iscontainer(self): return True def containerelements(self): yield ('email', self.__field_email, None) class _gen_p_lgvx11000_109(BaseProtogenClass): 'Anonymous inner class' __fields=['numbertype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx11000_109,self).__init__(**dict) if self.__class__ is _gen_p_lgvx11000_109: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx11000_109,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx11000_109,kwargs) if len(args): dict2={'sizeinbytes': 1, 'default': 0 } dict2.update(kwargs) kwargs=dict2 self.__field_numbertype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numbertype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numbertype=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_numbertype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numbertype(self): return self.__field_numbertype.getvalue() def __setfield_numbertype(self, value): if isinstance(value,UINT): self.__field_numbertype=value else: self.__field_numbertype=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_numbertype(self): del self.__field_numbertype numbertype=property(__getfield_numbertype, __setfield_numbertype, __delfield_numbertype, None) def iscontainer(self): return True def containerelements(self): yield ('numbertype', self.__field_numbertype, None) class _gen_p_lgvx11000_112(BaseProtogenClass): 'Anonymous inner class' __fields=['numberindex'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx11000_112,self).__init__(**dict) if self.__class__ is _gen_p_lgvx11000_112: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx11000_112,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx11000_112,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff } dict2.update(kwargs) kwargs=dict2 self.__field_numberindex=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numberindex.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numberindex=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_numberindex.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numberindex(self): return self.__field_numberindex.getvalue() def __setfield_numberindex(self, value): if isinstance(value,UINT): self.__field_numberindex=value else: self.__field_numberindex=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_numberindex(self): del self.__field_numberindex numberindex=property(__getfield_numberindex, __setfield_numberindex, __delfield_numberindex, None) def iscontainer(self): return True def containerelements(self): yield ('numberindex', self.__field_numberindex, None) class pbfile(BaseProtogenClass): __fields=['items', 'eof_tag', 'model_name', 'mod_date', 'blanks', 'eof_close_tag'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbfile,self).__init__(**dict) if self.__class__ is pbfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbfile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': pbfileentry, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_items.writetobuffer(buf) try: self.__field_eof_tag except: self.__field_eof_tag=STRING(**{'sizeinbytes': 6, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_eof_tag.writetobuffer(buf) try: self.__field_model_name except: self.__field_model_name=STRING(**{'sizeinbytes': 10, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_model_name.writetobuffer(buf) try: self.__field_mod_date except: self.__field_mod_date=PBDateTime(**{ 'defaulttocurrenttime': True }) self.__field_mod_date.writetobuffer(buf) try: self.__field_blanks except: self.__field_blanks=DATA(**{'sizeinbytes': 477, 'default': '\x00'*221 }) self.__field_blanks.writetobuffer(buf) try: self.__field_eof_close_tag except: self.__field_eof_close_tag=STRING(**{'sizeinbytes': 7, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_eof_close_tag.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': pbfileentry, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self.__field_eof_tag=STRING(**{'sizeinbytes': 6, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_eof_tag.readfrombuffer(buf) self.__field_model_name=STRING(**{'sizeinbytes': 10, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_model_name.readfrombuffer(buf) self.__field_mod_date=PBDateTime(**{ 'defaulttocurrenttime': True }) self.__field_mod_date.readfrombuffer(buf) self.__field_blanks=DATA(**{'sizeinbytes': 477, 'default': '\x00'*221 }) self.__field_blanks.readfrombuffer(buf) self.__field_eof_close_tag=STRING(**{'sizeinbytes': 7, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_eof_close_tag.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': pbfileentry, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': pbfileentry, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def __getfield_eof_tag(self): try: self.__field_eof_tag except: self.__field_eof_tag=STRING(**{'sizeinbytes': 6, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) return self.__field_eof_tag.getvalue() def __setfield_eof_tag(self, value): if isinstance(value,STRING): self.__field_eof_tag=value else: self.__field_eof_tag=STRING(value,**{'sizeinbytes': 6, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_eof_tag(self): del self.__field_eof_tag eof_tag=property(__getfield_eof_tag, __setfield_eof_tag, __delfield_eof_tag, None) def __getfield_model_name(self): try: self.__field_model_name except: self.__field_model_name=STRING(**{'sizeinbytes': 10, 'raiseonunterminatedread': False, 'raiseontruncate': False }) return self.__field_model_name.getvalue() def __setfield_model_name(self, value): if isinstance(value,STRING): self.__field_model_name=value else: self.__field_model_name=STRING(value,**{'sizeinbytes': 10, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_model_name(self): del self.__field_model_name model_name=property(__getfield_model_name, __setfield_model_name, __delfield_model_name, None) def __getfield_mod_date(self): try: self.__field_mod_date except: self.__field_mod_date=PBDateTime(**{ 'defaulttocurrenttime': True }) return self.__field_mod_date.getvalue() def __setfield_mod_date(self, value): if isinstance(value,PBDateTime): self.__field_mod_date=value else: self.__field_mod_date=PBDateTime(value,**{ 'defaulttocurrenttime': True }) def __delfield_mod_date(self): del self.__field_mod_date mod_date=property(__getfield_mod_date, __setfield_mod_date, __delfield_mod_date, None) def __getfield_blanks(self): try: self.__field_blanks except: self.__field_blanks=DATA(**{'sizeinbytes': 477, 'default': '\x00'*221 }) return self.__field_blanks.getvalue() def __setfield_blanks(self, value): if isinstance(value,DATA): self.__field_blanks=value else: self.__field_blanks=DATA(value,**{'sizeinbytes': 477, 'default': '\x00'*221 }) def __delfield_blanks(self): del self.__field_blanks blanks=property(__getfield_blanks, __setfield_blanks, __delfield_blanks, None) def __getfield_eof_close_tag(self): try: self.__field_eof_close_tag except: self.__field_eof_close_tag=STRING(**{'sizeinbytes': 7, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) return self.__field_eof_close_tag.getvalue() def __setfield_eof_close_tag(self, value): if isinstance(value,STRING): self.__field_eof_close_tag=value else: self.__field_eof_close_tag=STRING(value,**{'sizeinbytes': 7, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_eof_close_tag(self): del self.__field_eof_close_tag eof_close_tag=property(__getfield_eof_close_tag, __setfield_eof_close_tag, __delfield_eof_close_tag, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) yield ('eof_tag', self.__field_eof_tag, None) yield ('model_name', self.__field_model_name, None) yield ('mod_date', self.__field_mod_date, None) yield ('blanks', self.__field_blanks, None) yield ('eof_close_tag', self.__field_eof_close_tag, None) class pafileentry(BaseProtogenClass): __fields=['entry_tag', 'pad', 'mod_date', 'zeros', 'index', 'pb_entry', 'street', 'city', 'state', 'zip_code', 'country', 'exit_tag', 'dontcare'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pafileentry,self).__init__(**dict) if self.__class__ is pafileentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pafileentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pafileentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry_tag except: self.__field_entry_tag=STRING(**{'sizeinbytes': 5, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff\xff' }) self.__field_entry_tag.writetobuffer(buf) if self.entry_tag==PA_ENTRY_SOR: try: self.__field_pad except: self.__field_pad=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) self.__field_pad.writetobuffer(buf) try: self.__field_mod_date except: self.__field_mod_date=PBDateTime(**{ 'defaulttocurrenttime': True }) self.__field_mod_date.writetobuffer(buf) try: self.__field_zeros except: self.__field_zeros=UNKNOWN(**{'sizeinbytes': 6}) self.__field_zeros.writetobuffer(buf) try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.writetobuffer(buf) try: self.__field_pb_entry except: self.__field_pb_entry=UINT(**{'sizeinbytes': 2}) self.__field_pb_entry.writetobuffer(buf) try: self.__field_street except: self.__field_street=USTRING(**{'sizeinbytes': 52, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) self.__field_street.writetobuffer(buf) try: self.__field_city except: self.__field_city=USTRING(**{'sizeinbytes': 52, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) self.__field_city.writetobuffer(buf) try: self.__field_state except: self.__field_state=USTRING(**{'sizeinbytes': 52, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) self.__field_state.writetobuffer(buf) try: self.__field_zip_code except: self.__field_zip_code=USTRING(**{'sizeinbytes': 13, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) self.__field_zip_code.writetobuffer(buf) try: self.__field_country except: self.__field_country=USTRING(**{'sizeinbytes': 52, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) self.__field_country.writetobuffer(buf) try: self.__field_exit_tag except: self.__field_exit_tag=USTRING(**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) self.__field_exit_tag.writetobuffer(buf) else: try: self.__field_dontcare except: self.__field_dontcare=DATA(**{'sizeinbytes': 250, 'default': '\xff'*250 }) self.__field_dontcare.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry_tag=STRING(**{'sizeinbytes': 5, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff\xff' }) self.__field_entry_tag.readfrombuffer(buf) if self.entry_tag==PA_ENTRY_SOR: self.__field_pad=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) self.__field_pad.readfrombuffer(buf) self.__field_mod_date=PBDateTime(**{ 'defaulttocurrenttime': True }) self.__field_mod_date.readfrombuffer(buf) self.__field_zeros=UNKNOWN(**{'sizeinbytes': 6}) self.__field_zeros.readfrombuffer(buf) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self.__field_pb_entry=UINT(**{'sizeinbytes': 2}) self.__field_pb_entry.readfrombuffer(buf) self.__field_street=USTRING(**{'sizeinbytes': 52, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) self.__field_street.readfrombuffer(buf) self.__field_city=USTRING(**{'sizeinbytes': 52, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) self.__field_city.readfrombuffer(buf) self.__field_state=USTRING(**{'sizeinbytes': 52, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) self.__field_state.readfrombuffer(buf) self.__field_zip_code=USTRING(**{'sizeinbytes': 13, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) self.__field_zip_code.readfrombuffer(buf) self.__field_country=USTRING(**{'sizeinbytes': 52, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) self.__field_country.readfrombuffer(buf) self.__field_exit_tag=USTRING(**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) self.__field_exit_tag.readfrombuffer(buf) else: self.__field_dontcare=DATA(**{'sizeinbytes': 250, 'default': '\xff'*250 }) self.__field_dontcare.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry_tag(self): try: self.__field_entry_tag except: self.__field_entry_tag=STRING(**{'sizeinbytes': 5, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff\xff' }) return self.__field_entry_tag.getvalue() def __setfield_entry_tag(self, value): if isinstance(value,STRING): self.__field_entry_tag=value else: self.__field_entry_tag=STRING(value,**{'sizeinbytes': 5, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff\xff' }) def __delfield_entry_tag(self): del self.__field_entry_tag entry_tag=property(__getfield_entry_tag, __setfield_entry_tag, __delfield_entry_tag, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UINT): self.__field_pad=value else: self.__field_pad=UINT(value,**{'sizeinbytes': 1, 'default': 0x00 }) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_mod_date(self): try: self.__field_mod_date except: self.__field_mod_date=PBDateTime(**{ 'defaulttocurrenttime': True }) return self.__field_mod_date.getvalue() def __setfield_mod_date(self, value): if isinstance(value,PBDateTime): self.__field_mod_date=value else: self.__field_mod_date=PBDateTime(value,**{ 'defaulttocurrenttime': True }) def __delfield_mod_date(self): del self.__field_mod_date mod_date=property(__getfield_mod_date, __setfield_mod_date, __delfield_mod_date, None) def __getfield_zeros(self): try: self.__field_zeros except: self.__field_zeros=UNKNOWN(**{'sizeinbytes': 6}) return self.__field_zeros.getvalue() def __setfield_zeros(self, value): if isinstance(value,UNKNOWN): self.__field_zeros=value else: self.__field_zeros=UNKNOWN(value,**{'sizeinbytes': 6}) def __delfield_zeros(self): del self.__field_zeros zeros=property(__getfield_zeros, __setfield_zeros, __delfield_zeros, None) def __getfield_index(self): try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2}) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_pb_entry(self): try: self.__field_pb_entry except: self.__field_pb_entry=UINT(**{'sizeinbytes': 2}) return self.__field_pb_entry.getvalue() def __setfield_pb_entry(self, value): if isinstance(value,UINT): self.__field_pb_entry=value else: self.__field_pb_entry=UINT(value,**{'sizeinbytes': 2}) def __delfield_pb_entry(self): del self.__field_pb_entry pb_entry=property(__getfield_pb_entry, __setfield_pb_entry, __delfield_pb_entry, None) def __getfield_street(self): try: self.__field_street except: self.__field_street=USTRING(**{'sizeinbytes': 52, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) return self.__field_street.getvalue() def __setfield_street(self, value): if isinstance(value,USTRING): self.__field_street=value else: self.__field_street=USTRING(value,**{'sizeinbytes': 52, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) def __delfield_street(self): del self.__field_street street=property(__getfield_street, __setfield_street, __delfield_street, None) def __getfield_city(self): try: self.__field_city except: self.__field_city=USTRING(**{'sizeinbytes': 52, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) return self.__field_city.getvalue() def __setfield_city(self, value): if isinstance(value,USTRING): self.__field_city=value else: self.__field_city=USTRING(value,**{'sizeinbytes': 52, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) def __delfield_city(self): del self.__field_city city=property(__getfield_city, __setfield_city, __delfield_city, None) def __getfield_state(self): try: self.__field_state except: self.__field_state=USTRING(**{'sizeinbytes': 52, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) return self.__field_state.getvalue() def __setfield_state(self, value): if isinstance(value,USTRING): self.__field_state=value else: self.__field_state=USTRING(value,**{'sizeinbytes': 52, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) def __delfield_state(self): del self.__field_state state=property(__getfield_state, __setfield_state, __delfield_state, None) def __getfield_zip_code(self): try: self.__field_zip_code except: self.__field_zip_code=USTRING(**{'sizeinbytes': 13, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) return self.__field_zip_code.getvalue() def __setfield_zip_code(self, value): if isinstance(value,USTRING): self.__field_zip_code=value else: self.__field_zip_code=USTRING(value,**{'sizeinbytes': 13, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) def __delfield_zip_code(self): del self.__field_zip_code zip_code=property(__getfield_zip_code, __setfield_zip_code, __delfield_zip_code, None) def __getfield_country(self): try: self.__field_country except: self.__field_country=USTRING(**{'sizeinbytes': 52, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) return self.__field_country.getvalue() def __setfield_country(self, value): if isinstance(value,USTRING): self.__field_country=value else: self.__field_country=USTRING(value,**{'sizeinbytes': 52, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) def __delfield_country(self): del self.__field_country country=property(__getfield_country, __setfield_country, __delfield_country, None) def __getfield_exit_tag(self): try: self.__field_exit_tag except: self.__field_exit_tag=USTRING(**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) return self.__field_exit_tag.getvalue() def __setfield_exit_tag(self, value): if isinstance(value,USTRING): self.__field_exit_tag=value else: self.__field_exit_tag=USTRING(value,**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) def __delfield_exit_tag(self): del self.__field_exit_tag exit_tag=property(__getfield_exit_tag, __setfield_exit_tag, __delfield_exit_tag, None) def __getfield_dontcare(self): try: self.__field_dontcare except: self.__field_dontcare=DATA(**{'sizeinbytes': 250, 'default': '\xff'*250 }) return self.__field_dontcare.getvalue() def __setfield_dontcare(self, value): if isinstance(value,DATA): self.__field_dontcare=value else: self.__field_dontcare=DATA(value,**{'sizeinbytes': 250, 'default': '\xff'*250 }) def __delfield_dontcare(self): del self.__field_dontcare dontcare=property(__getfield_dontcare, __setfield_dontcare, __delfield_dontcare, None) def iscontainer(self): return True def containerelements(self): yield ('entry_tag', self.__field_entry_tag, None) if self.entry_tag==PA_ENTRY_SOR: yield ('pad', self.__field_pad, None) yield ('mod_date', self.__field_mod_date, None) yield ('zeros', self.__field_zeros, None) yield ('index', self.__field_index, None) yield ('pb_entry', self.__field_pb_entry, None) yield ('street', self.__field_street, None) yield ('city', self.__field_city, None) yield ('state', self.__field_state, None) yield ('zip_code', self.__field_zip_code, None) yield ('country', self.__field_country, None) yield ('exit_tag', self.__field_exit_tag, None) else: yield ('dontcare', self.__field_dontcare, None) def valid(self): global PA_ENTRY_SOR return self.entry_tag==PA_ENTRY_SOR class pafile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pafile,self).__init__(**dict) if self.__class__ is pafile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pafile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pafile,kwargs) if len(args): dict2={ 'elementclass': pafileentry, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': pafileentry, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': pafileentry, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': pafileentry, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': pafileentry, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class pbgroup(BaseProtogenClass): __fields=['name', 'groupid', 'user_added', 'wallpaper'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroup,self).__init__(**dict) if self.__class__ is pbgroup: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroup,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroup,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) self.__field_name.writetobuffer(buf) try: self.__field_groupid except: self.__field_groupid=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_groupid.writetobuffer(buf) try: self.__field_user_added except: self.__field_user_added=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_user_added.writetobuffer(buf) try: self.__field_wallpaper except: self.__field_wallpaper=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_wallpaper.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_name=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) self.__field_name.readfrombuffer(buf) self.__field_groupid=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_groupid.readfrombuffer(buf) self.__field_user_added=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_user_added.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_wallpaper.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_groupid(self): try: self.__field_groupid except: self.__field_groupid=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_groupid.getvalue() def __setfield_groupid(self, value): if isinstance(value,UINT): self.__field_groupid=value else: self.__field_groupid=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_groupid(self): del self.__field_groupid groupid=property(__getfield_groupid, __setfield_groupid, __delfield_groupid, None) def __getfield_user_added(self): try: self.__field_user_added except: self.__field_user_added=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_user_added.getvalue() def __setfield_user_added(self, value): if isinstance(value,UINT): self.__field_user_added=value else: self.__field_user_added=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_user_added(self): del self.__field_user_added user_added=property(__getfield_user_added, __setfield_user_added, __delfield_user_added, "=1 when was added by user") def __getfield_wallpaper(self): try: self.__field_wallpaper except: self.__field_wallpaper=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def iscontainer(self): return True def containerelements(self): yield ('name', self.__field_name, None) yield ('groupid', self.__field_groupid, None) yield ('user_added', self.__field_user_added, "=1 when was added by user") yield ('wallpaper', self.__field_wallpaper, None) class pbgroups(BaseProtogenClass): "Phonebook groups" __fields=['groups'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroups,self).__init__(**dict) if self.__class__ is pbgroups: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroups,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroups,kwargs) if len(args): dict2={'elementclass': pbgroup, 'raiseonincompleteread': False, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_groups=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup, 'raiseonincompleteread': False, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True}) self.__field_groups.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_groups=LIST(**{'elementclass': pbgroup, 'raiseonincompleteread': False, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True}) self.__field_groups.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_groups(self): try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup, 'raiseonincompleteread': False, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True}) return self.__field_groups.getvalue() def __setfield_groups(self, value): if isinstance(value,LIST): self.__field_groups=value else: self.__field_groups=LIST(value,**{'elementclass': pbgroup, 'raiseonincompleteread': False, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True}) def __delfield_groups(self): del self.__field_groups groups=property(__getfield_groups, __setfield_groups, __delfield_groups, None) def iscontainer(self): return True def containerelements(self): yield ('groups', self.__field_groups, None) class favorite(BaseProtogenClass): __fields=['pb_index', 'fav_type'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(favorite,self).__init__(**dict) if self.__class__ is favorite: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(favorite,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(favorite,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_pb_index except: self.__field_pb_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_pb_index.writetobuffer(buf) try: self.__field_fav_type except: self.__field_fav_type=UINT(**{'sizeinbytes': 1, 'default': 0xff }) self.__field_fav_type.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pb_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_pb_index.readfrombuffer(buf) self.__field_fav_type=UINT(**{'sizeinbytes': 1, 'default': 0xff }) self.__field_fav_type.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pb_index(self): try: self.__field_pb_index except: self.__field_pb_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) return self.__field_pb_index.getvalue() def __setfield_pb_index(self, value): if isinstance(value,UINT): self.__field_pb_index=value else: self.__field_pb_index=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_pb_index(self): del self.__field_pb_index pb_index=property(__getfield_pb_index, __setfield_pb_index, __delfield_pb_index, None) def __getfield_fav_type(self): try: self.__field_fav_type except: self.__field_fav_type=UINT(**{'sizeinbytes': 1, 'default': 0xff }) return self.__field_fav_type.getvalue() def __setfield_fav_type(self, value): if isinstance(value,UINT): self.__field_fav_type=value else: self.__field_fav_type=UINT(value,**{'sizeinbytes': 1, 'default': 0xff }) def __delfield_fav_type(self): del self.__field_fav_type fav_type=property(__getfield_fav_type, __setfield_fav_type, __delfield_fav_type, None) def iscontainer(self): return True def containerelements(self): yield ('pb_index', self.__field_pb_index, None) yield ('fav_type', self.__field_fav_type, None) def has_pbentry(self): return self.pb_index != 0xffff and self.fav_type == 1 class favorites(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(favorites,self).__init__(**dict) if self.__class__ is favorites: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(favorites,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(favorites,kwargs) if len(args): dict2={ 'elementclass': favorite, 'length': NUMFAVORITES } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': favorite, 'length': NUMFAVORITES }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': favorite, 'length': NUMFAVORITES }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': favorite, 'length': NUMFAVORITES }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': favorite, 'length': NUMFAVORITES }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) def set_favorite(self, index, entity_index, ispbentry): if index < NUMFAVORITES: self.items[index].pb_index = entity_index if ispbentry: self.items[index].fav_type = 1 else: self.items[index].fav_type = 2 class GroupPicID_PathIndexEntry(BaseProtogenClass): __fields=['pathname'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(GroupPicID_PathIndexEntry,self).__init__(**dict) if self.__class__ is GroupPicID_PathIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(GroupPicID_PathIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(GroupPicID_PathIndexEntry,kwargs) if len(args): dict2={'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' } dict2.update(kwargs) kwargs=dict2 self.__field_pathname=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_pathname except: self.__field_pathname=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' }) self.__field_pathname.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pathname=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' }) self.__field_pathname.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pathname(self): try: self.__field_pathname except: self.__field_pathname=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' }) return self.__field_pathname.getvalue() def __setfield_pathname(self, value): if isinstance(value,USTRING): self.__field_pathname=value else: self.__field_pathname=USTRING(value,**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' }) def __delfield_pathname(self): del self.__field_pathname pathname=property(__getfield_pathname, __setfield_pathname, __delfield_pathname, None) def iscontainer(self): return True def containerelements(self): yield ('pathname', self.__field_pathname, None) class GroupPicID_PathIndexFile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(GroupPicID_PathIndexFile,self).__init__(**dict) if self.__class__ is GroupPicID_PathIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(GroupPicID_PathIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(GroupPicID_PathIndexFile,kwargs) if len(args): dict2={ 'elementclass': GroupPicID_PathIndexEntry, 'raiseonincompleteread': False, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': GroupPicID_PathIndexEntry, 'raiseonincompleteread': False, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': GroupPicID_PathIndexEntry, 'raiseonincompleteread': False, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': GroupPicID_PathIndexEntry, 'raiseonincompleteread': False, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': GroupPicID_PathIndexEntry, 'raiseonincompleteread': False, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) bitpim-1.0.7+dfsg1/src/phones/com_lgvx9200.py0000644001616600161660000000761211326746361016754 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2009 Nathan Hjelm ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### """ Communicate with the LG VX9200 cell phone. """ # BitPim modules import common import com_brew import prototypes import com_lgvx11000 import p_lgvx9200 import helpids import sms #------------------------------------------------------------------------------- parentphone=com_lgvx11000.Phone class Phone(parentphone): desc="LG-VX9200 (enV3)" helpid=helpids.ID_PHONE_LGVX9200 protocolclass=p_lgvx9200 serialsname='lgvx9200' my_model='VX9200' builtinringtones= ('Low Beep Once', 'Low Beeps', 'Loud Beep Once', 'Loud Beeps', 'Door Bell', 'VZW Default Tone') + \ tuple(['Ringtone '+`n` for n in range(1,17)]) + ('No Ring',) def setDMversion(self): self._DMv5=False self._DMv6=True self._timeout=5 # Assume a quick timeout on newer phones # - getgroups - same as LG VX-8700 # - getwallpaperindices - LGUncountedIndexedMedia # - getringtoneindices - LGUncountedIndexedMedia # - DM Version - 6 # - phonebook - LG Phonebook v1 Extended # - SMS - same dir structure as the VX-8800 #------------------------------------------------------------------------------- parentprofile=com_lgvx11000.Profile class Profile(parentprofile): BP_Calendar_Version=3 protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_model=Phone.my_model phone_manufacturer='LG Electronics Inc' # inside screen resoluation WALLPAPER_WIDTH = 320 WALLPAPER_HEIGHT = 240 imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images(sd)")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video(sd)")) # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", {'width': 190, 'height': 96, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 320, 'height': 240, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 320, 'height': 240, 'format': "JPEG"})) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading ('memo', 'read', None), # all memo list reading ## ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('sms', 'write', 'OVERWRITE'), # all SMS list writing ('memo', 'write', 'OVERWRITE'), # all memo list writing ## ('playlist', 'read', 'OVERWRITE'), ## ('playlist', 'write', 'OVERWRITE'), ('t9_udb', 'write', 'OVERWRITE'), ) if __debug__: _supportedsyncs+=( ('t9_udb', 'read', 'OVERWRITE'), ) bitpim-1.0.7+dfsg1/src/phones/p_lgvx8100.py0000644001616600161660000040354610466234100016424 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VX8000""" from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx7000 except as noted # below from p_lgvx7000 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb # vx8100 uses a type based index for speed dials instead of positional like the vx4400 SPEEDDIALINDEX=1 MAXCALENDARDESCRIPTION=32 MAX_PHONEBOOK_GROUPS=30 CALENDAR_HAS_SEPARATE_END_TIME_AND_DATE=0 SMS_CANNED_MAX_ITEMS=18 SMS_CANNED_MAX_LENGTH=101 BREW_FILE_SYSTEM=2 # Media type MEDIA_TYPE_RINGTONE=0x0201 MEDIA_TYPE_IMAGE=0x0100 MEDIA_TYPE_SOUND=0x0402 MEDIA_TYPE_SDIMAGE=0x0008 MEDIA_TYPE_SDSOUND=0x000C MEDIA_TYPE_VIDEO=0x0304 MEDIA_RINGTONE_DEFAULT_ICON=1 MEDIA_IMAGE_DEFAULT_ICON=0 MEDIA_VIDEO_DEFAULT_ICON=0 PHONE_ENCODING='iso8859_1' # need to call stat to get the file time/data broken_filelist_date=True class indexentry(BaseProtogenClass): __fields=['index', 'type', 'filename', 'icon', 'date', 'dunno', 'size'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_type.writetobuffer(buf) self.__field_filename.writetobuffer(buf) try: self.__field_icon except: self.__field_icon=UINT(**{'sizeinbytes': 4, 'default':0}) self.__field_icon.writetobuffer(buf) try: self.__field_date except: self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_date.writetobuffer(buf) self.__field_dunno.writetobuffer(buf) try: self.__field_size except: self.__field_size=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_size.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self.__field_type=UINT(**{'sizeinbytes': 2}) self.__field_type.readfrombuffer(buf) self.__field_filename=USTRING(**{'sizeinbytes': 60, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_filename.readfrombuffer(buf) self.__field_icon=UINT(**{'sizeinbytes': 4, 'default':0}) self.__field_icon.readfrombuffer(buf) self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_date.readfrombuffer(buf) self.__field_dunno=UINT(**{'sizeinbytes': 4}) self.__field_dunno.readfrombuffer(buf) self.__field_size=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_size.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_type(self): return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,UINT): self.__field_type=value else: self.__field_type=UINT(value,**{'sizeinbytes': 2}) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, None) def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'sizeinbytes': 60, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, "includes full pathname") def __getfield_icon(self): try: self.__field_icon except: self.__field_icon=UINT(**{'sizeinbytes': 4, 'default':0}) return self.__field_icon.getvalue() def __setfield_icon(self, value): if isinstance(value,UINT): self.__field_icon=value else: self.__field_icon=UINT(value,**{'sizeinbytes': 4, 'default':0}) def __delfield_icon(self): del self.__field_icon icon=property(__getfield_icon, __setfield_icon, __delfield_icon, None) def __getfield_date(self): try: self.__field_date except: self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,UINT): self.__field_date=value else: self.__field_date=UINT(value,**{'sizeinbytes': 4, 'default': 0}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, "i think this is bitfield of the date") def __getfield_dunno(self): return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 4}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def __getfield_size(self): try: self.__field_size except: self.__field_size=UINT(**{'sizeinbytes': 4, 'default': 0}) return self.__field_size.getvalue() def __setfield_size(self, value): if isinstance(value,UINT): self.__field_size=value else: self.__field_size=UINT(value,**{'sizeinbytes': 4, 'default': 0}) def __delfield_size(self): del self.__field_size size=property(__getfield_size, __setfield_size, __delfield_size, "size of the file, can be set to zero") def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('type', self.__field_type, None) yield ('filename', self.__field_filename, "includes full pathname") yield ('icon', self.__field_icon, None) yield ('date', self.__field_date, "i think this is bitfield of the date") yield ('dunno', self.__field_dunno, None) yield ('size', self.__field_size, "size of the file, can be set to zero") class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): dict2={'elementclass': indexentry, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class pbgroup(BaseProtogenClass): "A single group" __fields=['name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroup,self).__init__(**dict) if self.__class__ is pbgroup: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroup,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroup,kwargs) if len(args): dict2={'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } dict2.update(kwargs) kwargs=dict2 self.__field_name=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_name=USTRING(**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('name', self.__field_name, None) class pbgroups(BaseProtogenClass): "Phonebook groups" __fields=['groups'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroups,self).__init__(**dict) if self.__class__ is pbgroups: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroups,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroups,kwargs) if len(args): dict2={'elementclass': pbgroup} dict2.update(kwargs) kwargs=dict2 self.__field_groups=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_groups(self): try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) return self.__field_groups.getvalue() def __setfield_groups(self, value): if isinstance(value,LIST): self.__field_groups=value else: self.__field_groups=LIST(value,**{'elementclass': pbgroup}) def __delfield_groups(self): del self.__field_groups groups=property(__getfield_groups, __setfield_groups, __delfield_groups, None) def iscontainer(self): return True def containerelements(self): yield ('groups', self.__field_groups, None) class scheduleexception(BaseProtogenClass): __fields=['pos', 'day', 'month', 'year'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexception,self).__init__(**dict) if self.__class__ is scheduleexception: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexception,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexception,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_day.writetobuffer(buf) self.__field_month.writetobuffer(buf) self.__field_year.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_day=UINT(**{'sizeinbytes': 1}) self.__field_day.readfrombuffer(buf) self.__field_month=UINT(**{'sizeinbytes': 1}) self.__field_month.readfrombuffer(buf) self.__field_year=UINT(**{'sizeinbytes': 2}) self.__field_year.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "Refers to event id (position in schedule file) that this suppresses") def __getfield_day(self): return self.__field_day.getvalue() def __setfield_day(self, value): if isinstance(value,UINT): self.__field_day=value else: self.__field_day=UINT(value,**{'sizeinbytes': 1}) def __delfield_day(self): del self.__field_day day=property(__getfield_day, __setfield_day, __delfield_day, None) def __getfield_month(self): return self.__field_month.getvalue() def __setfield_month(self, value): if isinstance(value,UINT): self.__field_month=value else: self.__field_month=UINT(value,**{'sizeinbytes': 1}) def __delfield_month(self): del self.__field_month month=property(__getfield_month, __setfield_month, __delfield_month, None) def __getfield_year(self): return self.__field_year.getvalue() def __setfield_year(self, value): if isinstance(value,UINT): self.__field_year=value else: self.__field_year=UINT(value,**{'sizeinbytes': 2}) def __delfield_year(self): del self.__field_year year=property(__getfield_year, __setfield_year, __delfield_year, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "Refers to event id (position in schedule file) that this suppresses") yield ('day', self.__field_day, None) yield ('month', self.__field_month, None) yield ('year', self.__field_year, None) class scheduleexceptionfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexceptionfile,self).__init__(**dict) if self.__class__ is scheduleexceptionfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexceptionfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexceptionfile,kwargs) if len(args): dict2={'elementclass': scheduleexception} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': scheduleexception}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class scheduleevent(BaseProtogenClass): __fields=['pos', 'description', 'start', 'end', 'repeat', 'alarmindex_vibrate', 'ringtone', 'unknown1', 'alarmminutes', 'alarmhours', 'unknown2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleevent,self).__init__(**dict) if self.__class__ is scheduleevent: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleevent,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleevent,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_description.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) self.__field_alarmindex_vibrate.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_alarmminutes.writetobuffer(buf) self.__field_alarmhours.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_description=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_description.readfrombuffer(buf) self.__field_start=LGCALDATE(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=LGCALDATE(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_repeat=LGCALREPEAT(**{'sizeinbytes': 4}) self.__field_repeat.readfrombuffer(buf) self.__field_alarmindex_vibrate=UINT(**{'sizeinbytes': 1}) self.__field_alarmindex_vibrate.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_alarmminutes=UINT(**{'sizeinbytes': 1}) self.__field_alarmminutes.readfrombuffer(buf) self.__field_alarmhours=UINT(**{'sizeinbytes': 1}) self.__field_alarmhours.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "position within file, used as an event id") def __getfield_description(self): return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,USTRING): self.__field_description=value else: self.__field_description=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,LGCALDATE): self.__field_start=value else: self.__field_start=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,LGCALDATE): self.__field_end=value else: self.__field_end=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,LGCALREPEAT): self.__field_repeat=value else: self.__field_repeat=LGCALREPEAT(value,**{'sizeinbytes': 4}) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_alarmindex_vibrate(self): return self.__field_alarmindex_vibrate.getvalue() def __setfield_alarmindex_vibrate(self, value): if isinstance(value,UINT): self.__field_alarmindex_vibrate=value else: self.__field_alarmindex_vibrate=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmindex_vibrate(self): del self.__field_alarmindex_vibrate alarmindex_vibrate=property(__getfield_alarmindex_vibrate, __setfield_alarmindex_vibrate, __delfield_alarmindex_vibrate, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_alarmminutes(self): return self.__field_alarmminutes.getvalue() def __setfield_alarmminutes(self, value): if isinstance(value,UINT): self.__field_alarmminutes=value else: self.__field_alarmminutes=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmminutes(self): del self.__field_alarmminutes alarmminutes=property(__getfield_alarmminutes, __setfield_alarmminutes, __delfield_alarmminutes, "a value of 0xFF indicates not set") def __getfield_alarmhours(self): return self.__field_alarmhours.getvalue() def __setfield_alarmhours(self, value): if isinstance(value,UINT): self.__field_alarmhours=value else: self.__field_alarmhours=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmhours(self): del self.__field_alarmhours alarmhours=property(__getfield_alarmhours, __setfield_alarmhours, __delfield_alarmhours, "a value of 0xFF indicates not set") def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "position within file, used as an event id") yield ('description', self.__field_description, None) yield ('start', self.__field_start, None) yield ('end', self.__field_end, None) yield ('repeat', self.__field_repeat, None) yield ('alarmindex_vibrate', self.__field_alarmindex_vibrate, None) yield ('ringtone', self.__field_ringtone, None) yield ('unknown1', self.__field_unknown1, None) yield ('alarmminutes', self.__field_alarmminutes, "a value of 0xFF indicates not set") yield ('alarmhours', self.__field_alarmhours, "a value of 0xFF indicates not set") yield ('unknown2', self.__field_unknown2, None) class schedulefile(BaseProtogenClass): __fields=['numactiveitems', 'events'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(schedulefile,self).__init__(**dict) if self.__class__ is schedulefile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(schedulefile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(schedulefile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{'elementclass': scheduleevent}) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('events', self.__field_events, None) class call(BaseProtogenClass): __fields=['GPStime', 'unknown2', 'duration', 'number', 'name', 'numberlength', 'pbnumbertype', 'unknown2', 'pbentrynum'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(call,self).__init__(**dict) if self.__class__ is call: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(call,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(call,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_numberlength.writetobuffer(buf) self.__field_pbnumbertype.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_pbentrynum.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 4}) self.__field_unknown2.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_numberlength=UINT(**{'sizeinbytes': 2}) self.__field_numberlength.readfrombuffer(buf) self.__field_pbnumbertype=UINT(**{'sizeinbytes': 1}) self.__field_pbnumbertype.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 3}) self.__field_unknown2.readfrombuffer(buf) self.__field_pbentrynum=UINT(**{'sizeinbytes': 2}) self.__field_pbentrynum.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numberlength(self): return self.__field_numberlength.getvalue() def __setfield_numberlength(self, value): if isinstance(value,UINT): self.__field_numberlength=value else: self.__field_numberlength=UINT(value,**{'sizeinbytes': 2}) def __delfield_numberlength(self): del self.__field_numberlength numberlength=property(__getfield_numberlength, __setfield_numberlength, __delfield_numberlength, None) def __getfield_pbnumbertype(self): return self.__field_pbnumbertype.getvalue() def __setfield_pbnumbertype(self, value): if isinstance(value,UINT): self.__field_pbnumbertype=value else: self.__field_pbnumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_pbnumbertype(self): del self.__field_pbnumbertype pbnumbertype=property(__getfield_pbnumbertype, __setfield_pbnumbertype, __delfield_pbnumbertype, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_pbentrynum(self): return self.__field_pbentrynum.getvalue() def __setfield_pbentrynum(self, value): if isinstance(value,UINT): self.__field_pbentrynum=value else: self.__field_pbentrynum=UINT(value,**{'sizeinbytes': 2}) def __delfield_pbentrynum(self): del self.__field_pbentrynum pbentrynum=property(__getfield_pbentrynum, __setfield_pbentrynum, __delfield_pbentrynum, None) def iscontainer(self): return True def containerelements(self): yield ('GPStime', self.__field_GPStime, None) yield ('unknown2', self.__field_unknown2, None) yield ('duration', self.__field_duration, None) yield ('number', self.__field_number, None) yield ('name', self.__field_name, None) yield ('numberlength', self.__field_numberlength, None) yield ('pbnumbertype', self.__field_pbnumbertype, None) yield ('unknown2', self.__field_unknown2, None) yield ('pbentrynum', self.__field_pbentrynum, None) class callhistory(BaseProtogenClass): __fields=['numcalls', 'unknown1', 'calls'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callhistory,self).__init__(**dict) if self.__class__ is callhistory: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callhistory,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callhistory,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numcalls.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numcalls=UINT(**{'sizeinbytes': 4}) self.__field_numcalls.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numcalls(self): return self.__field_numcalls.getvalue() def __setfield_numcalls(self, value): if isinstance(value,UINT): self.__field_numcalls=value else: self.__field_numcalls=UINT(value,**{'sizeinbytes': 4}) def __delfield_numcalls(self): del self.__field_numcalls numcalls=property(__getfield_numcalls, __setfield_numcalls, __delfield_numcalls, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_calls(self): try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) return self.__field_calls.getvalue() def __setfield_calls(self, value): if isinstance(value,LIST): self.__field_calls=value else: self.__field_calls=LIST(value,**{'elementclass': call}) def __delfield_calls(self): del self.__field_calls calls=property(__getfield_calls, __setfield_calls, __delfield_calls, None) def iscontainer(self): return True def containerelements(self): yield ('numcalls', self.__field_numcalls, None) yield ('unknown1', self.__field_unknown1, None) yield ('calls', self.__field_calls, None) class msg_record(BaseProtogenClass): __fields=['unknown1', 'binary', 'unknown3', 'unknown4', 'unknown6', 'length', 'msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(msg_record,self).__init__(**dict) if self.__class__ is msg_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(msg_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(msg_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_binary.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_length.writetobuffer(buf) try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8100_179, 'length': 219}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_binary=UINT(**{'sizeinbytes': 1}) self.__field_binary.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1}) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 1}) self.__field_unknown4.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 1}) self.__field_unknown6.readfrombuffer(buf) self.__field_length=UINT(**{'sizeinbytes': 1}) self.__field_length.readfrombuffer(buf) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8100_179, 'length': 219}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_binary(self): return self.__field_binary.getvalue() def __setfield_binary(self, value): if isinstance(value,UINT): self.__field_binary=value else: self.__field_binary=UINT(value,**{'sizeinbytes': 1}) def __delfield_binary(self): del self.__field_binary binary=property(__getfield_binary, __setfield_binary, __delfield_binary, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_length(self): return self.__field_length.getvalue() def __setfield_length(self, value): if isinstance(value,UINT): self.__field_length=value else: self.__field_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_length(self): del self.__field_length length=property(__getfield_length, __setfield_length, __delfield_length, None) def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8100_179, 'length': 219}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx8100_179, 'length': 219}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('binary', self.__field_binary, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) yield ('unknown6', self.__field_unknown6, None) yield ('length', self.__field_length, None) yield ('msg', self.__field_msg, None) class _gen_p_lgvx8100_179(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8100_179,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8100_179: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8100_179,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8100_179,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class recipient_record(BaseProtogenClass): __fields=['unknown1', 'number', 'status', 'timesent', 'timereceived', 'unknown2', 'unknown3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(recipient_record,self).__init__(**dict) if self.__class__ is recipient_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(recipient_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(recipient_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_timereceived.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=DATA(**{'sizeinbytes': 45}) self.__field_unknown1.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49}) self.__field_number.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_timereceived=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timereceived.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=DATA(**{'sizeinbytes': 40}) self.__field_unknown3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,DATA): self.__field_unknown1=value else: self.__field_unknown1=DATA(value,**{'sizeinbytes': 45}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_timereceived(self): return self.__field_timereceived.getvalue() def __setfield_timereceived(self, value): if isinstance(value,LGCALDATE): self.__field_timereceived=value else: self.__field_timereceived=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timereceived(self): del self.__field_timereceived timereceived=property(__getfield_timereceived, __setfield_timereceived, __delfield_timereceived, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,DATA): self.__field_unknown3=value else: self.__field_unknown3=DATA(value,**{'sizeinbytes': 40}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('number', self.__field_number, None) yield ('status', self.__field_status, None) yield ('timesent', self.__field_timesent, None) yield ('timereceived', self.__field_timereceived, None) yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) class sms_saved(BaseProtogenClass): __fields=['outboxmsg', 'GPStime', 'outbox', 'inbox'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_saved,self).__init__(**dict) if self.__class__ is sms_saved: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_saved,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_saved,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_outboxmsg.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) if self.outboxmsg: self.__field_outbox.writetobuffer(buf) if not self.outboxmsg: self.__field_inbox.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_outboxmsg=UINT(**{'sizeinbytes': 4}) self.__field_outboxmsg.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) if self.outboxmsg: self.__field_outbox=sms_out() self.__field_outbox.readfrombuffer(buf) if not self.outboxmsg: self.__field_inbox=sms_in() self.__field_inbox.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_outboxmsg(self): return self.__field_outboxmsg.getvalue() def __setfield_outboxmsg(self, value): if isinstance(value,UINT): self.__field_outboxmsg=value else: self.__field_outboxmsg=UINT(value,**{'sizeinbytes': 4}) def __delfield_outboxmsg(self): del self.__field_outboxmsg outboxmsg=property(__getfield_outboxmsg, __setfield_outboxmsg, __delfield_outboxmsg, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_outbox(self): return self.__field_outbox.getvalue() def __setfield_outbox(self, value): if isinstance(value,sms_out): self.__field_outbox=value else: self.__field_outbox=sms_out(value,) def __delfield_outbox(self): del self.__field_outbox outbox=property(__getfield_outbox, __setfield_outbox, __delfield_outbox, None) def __getfield_inbox(self): return self.__field_inbox.getvalue() def __setfield_inbox(self, value): if isinstance(value,sms_in): self.__field_inbox=value else: self.__field_inbox=sms_in(value,) def __delfield_inbox(self): del self.__field_inbox inbox=property(__getfield_inbox, __setfield_inbox, __delfield_inbox, None) def iscontainer(self): return True def containerelements(self): yield ('outboxmsg', self.__field_outboxmsg, None) yield ('GPStime', self.__field_GPStime, None) if self.outboxmsg: yield ('outbox', self.__field_outbox, None) if not self.outboxmsg: yield ('inbox', self.__field_inbox, None) class sms_out(BaseProtogenClass): __fields=['index', 'unknown1', 'locked', 'timesent', 'unknown2', 'GPStime', 'subject', 'unknown4', 'num_msg_elements', 'messages', 'unknown5', 'priority', 'unknown7', 'unknown8', 'callback', 'recipients'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_out,self).__init__(**dict) if self.__class__ is sms_out: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_out,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_out,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) self.__field_messages.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_unknown7.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) self.__field_callback.writetobuffer(buf) try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 10}) self.__field_recipients.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2}) self.__field_unknown2.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 1}) self.__field_unknown4.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) self.__field_messages.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 1}) self.__field_unknown5.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_unknown7=DATA(**{'sizeinbytes': 12}) self.__field_unknown7.readfrombuffer(buf) self.__field_unknown8=DATA(**{'sizeinbytes': 3}) self.__field_unknown8.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 23}) self.__field_callback.readfrombuffer(buf) self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 10}) self.__field_recipients.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_messages(self): try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) return self.__field_messages.getvalue() def __setfield_messages(self, value): if isinstance(value,LIST): self.__field_messages=value else: self.__field_messages=LIST(value,**{'elementclass': msg_record, 'length': 7}) def __delfield_messages(self): del self.__field_messages messages=property(__getfield_messages, __setfield_messages, __delfield_messages, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_unknown7(self): return self.__field_unknown7.getvalue() def __setfield_unknown7(self, value): if isinstance(value,DATA): self.__field_unknown7=value else: self.__field_unknown7=DATA(value,**{'sizeinbytes': 12}) def __delfield_unknown7(self): del self.__field_unknown7 unknown7=property(__getfield_unknown7, __setfield_unknown7, __delfield_unknown7, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,DATA): self.__field_unknown8=value else: self.__field_unknown8=DATA(value,**{'sizeinbytes': 3}) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 23}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_recipients(self): try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 10}) return self.__field_recipients.getvalue() def __setfield_recipients(self, value): if isinstance(value,LIST): self.__field_recipients=value else: self.__field_recipients=LIST(value,**{'elementclass': recipient_record,'length': 10}) def __delfield_recipients(self): del self.__field_recipients recipients=property(__getfield_recipients, __setfield_recipients, __delfield_recipients, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('unknown1', self.__field_unknown1, None) yield ('locked', self.__field_locked, None) yield ('timesent', self.__field_timesent, None) yield ('unknown2', self.__field_unknown2, None) yield ('GPStime', self.__field_GPStime, None) yield ('subject', self.__field_subject, None) yield ('unknown4', self.__field_unknown4, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('messages', self.__field_messages, None) yield ('unknown5', self.__field_unknown5, None) yield ('priority', self.__field_priority, None) yield ('unknown7', self.__field_unknown7, None) yield ('unknown8', self.__field_unknown8, None) yield ('callback', self.__field_callback, None) yield ('recipients', self.__field_recipients, None) class SMSINBOXMSGFRAGMENT(BaseProtogenClass): __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSINBOXMSGFRAGMENT,self).__init__(**dict) if self.__class__ is SMSINBOXMSGFRAGMENT: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSINBOXMSGFRAGMENT,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSINBOXMSGFRAGMENT,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx8100_218, 'length': 181} dict2.update(kwargs) kwargs=dict2 self.__field_msg=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8100_218, 'length': 181}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8100_218, 'length': 181}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8100_218, 'length': 181}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx8100_218, 'length': 181}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class _gen_p_lgvx8100_218(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8100_218,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8100_218: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8100_218,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8100_218,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class sms_in(BaseProtogenClass): __fields=['msg_index1', 'msg_index2', 'unknown2', 'timesent', 'unknown', 'callback_length', 'callback', 'sender_length', 'sender', 'unknown3', 'lg_time', 'unknown4', 'GPStime', 'unknown5', 'read', 'locked', 'unknown8', 'priority', 'unknown11', 'subject', 'bin_header1', 'bin_header2', 'unknown6', 'multipartID', 'unknown14', 'bin_header3', 'num_msg_elements', 'msglengths', 'msgs', 'unknown12', 'senders_name', 'unknown9'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_in,self).__init__(**dict) if self.__class__ is sms_in: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_in,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_in,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msg_index1.writetobuffer(buf) self.__field_msg_index2.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self.__field_callback_length.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_sender_length.writetobuffer(buf) try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx8100_230, 'length': 38}) self.__field_sender.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_lg_time.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_unknown11.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_bin_header1.writetobuffer(buf) self.__field_bin_header2.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_multipartID.writetobuffer(buf) self.__field_unknown14.writetobuffer(buf) self.__field_bin_header3.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx8100_250, 'length': 20}) self.__field_msglengths.writetobuffer(buf) try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.writetobuffer(buf) self.__field_unknown12.writetobuffer(buf) self.__field_senders_name.writetobuffer(buf) self.__field_unknown9.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg_index1=UINT(**{'sizeinbytes': 4}) self.__field_msg_index1.readfrombuffer(buf) self.__field_msg_index2=UINT(**{'sizeinbytes': 4}) self.__field_msg_index2.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2}) self.__field_unknown2.readfrombuffer(buf) self.__field_timesent=SMSDATE(**{'sizeinbytes': 6}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown=UINT(**{'sizeinbytes': 3}) self.__field_unknown.readfrombuffer(buf) self.__field_callback_length=UINT(**{'sizeinbytes': 1}) self.__field_callback_length.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 38}) self.__field_callback.readfrombuffer(buf) self.__field_sender_length=UINT(**{'sizeinbytes': 1}) self.__field_sender_length.readfrombuffer(buf) self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx8100_230, 'length': 38}) self.__field_sender.readfrombuffer(buf) self.__field_unknown3=DATA(**{'sizeinbytes': 12}) self.__field_unknown3.readfrombuffer(buf) self.__field_lg_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_lg_time.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 3}) self.__field_unknown4.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 4}) self.__field_unknown5.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 1}) self.__field_read.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown8=UINT(**{'sizeinbytes': 2}) self.__field_unknown8.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_unknown11=DATA(**{'sizeinbytes': 6}) self.__field_unknown11.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_bin_header1=UINT(**{'sizeinbytes': 1}) self.__field_bin_header1.readfrombuffer(buf) self.__field_bin_header2=UINT(**{'sizeinbytes': 1}) self.__field_bin_header2.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 2}) self.__field_unknown6.readfrombuffer(buf) self.__field_multipartID=UINT(**{'sizeinbytes': 2}) self.__field_multipartID.readfrombuffer(buf) self.__field_unknown14=UINT(**{'sizeinbytes': 2}) self.__field_unknown14.readfrombuffer(buf) self.__field_bin_header3=UINT(**{'sizeinbytes': 1}) self.__field_bin_header3.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx8100_250, 'length': 20}) self.__field_msglengths.readfrombuffer(buf) self.__field_msgs=LIST(**{'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.readfrombuffer(buf) self.__field_unknown12=DATA(**{'sizeinbytes': 60}) self.__field_unknown12.readfrombuffer(buf) self.__field_senders_name=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING}) self.__field_senders_name.readfrombuffer(buf) self.__field_unknown9=DATA(**{'sizeinbytes': 169}) self.__field_unknown9.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg_index1(self): return self.__field_msg_index1.getvalue() def __setfield_msg_index1(self, value): if isinstance(value,UINT): self.__field_msg_index1=value else: self.__field_msg_index1=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index1(self): del self.__field_msg_index1 msg_index1=property(__getfield_msg_index1, __setfield_msg_index1, __delfield_msg_index1, None) def __getfield_msg_index2(self): return self.__field_msg_index2.getvalue() def __setfield_msg_index2(self, value): if isinstance(value,UINT): self.__field_msg_index2=value else: self.__field_msg_index2=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index2(self): del self.__field_msg_index2 msg_index2=property(__getfield_msg_index2, __setfield_msg_index2, __delfield_msg_index2, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,SMSDATE): self.__field_timesent=value else: self.__field_timesent=SMSDATE(value,**{'sizeinbytes': 6}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UINT): self.__field_unknown=value else: self.__field_unknown=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def __getfield_callback_length(self): return self.__field_callback_length.getvalue() def __setfield_callback_length(self, value): if isinstance(value,UINT): self.__field_callback_length=value else: self.__field_callback_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_length(self): del self.__field_callback_length callback_length=property(__getfield_callback_length, __setfield_callback_length, __delfield_callback_length, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 38}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_sender_length(self): return self.__field_sender_length.getvalue() def __setfield_sender_length(self, value): if isinstance(value,UINT): self.__field_sender_length=value else: self.__field_sender_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_sender_length(self): del self.__field_sender_length sender_length=property(__getfield_sender_length, __setfield_sender_length, __delfield_sender_length, None) def __getfield_sender(self): try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx8100_230, 'length': 38}) return self.__field_sender.getvalue() def __setfield_sender(self, value): if isinstance(value,LIST): self.__field_sender=value else: self.__field_sender=LIST(value,**{'elementclass': _gen_p_lgvx8100_230, 'length': 38}) def __delfield_sender(self): del self.__field_sender sender=property(__getfield_sender, __setfield_sender, __delfield_sender, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,DATA): self.__field_unknown3=value else: self.__field_unknown3=DATA(value,**{'sizeinbytes': 12}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_lg_time(self): return self.__field_lg_time.getvalue() def __setfield_lg_time(self, value): if isinstance(value,LGCALDATE): self.__field_lg_time=value else: self.__field_lg_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_lg_time(self): del self.__field_lg_time lg_time=property(__getfield_lg_time, __setfield_lg_time, __delfield_lg_time, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 1}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,UINT): self.__field_unknown8=value else: self.__field_unknown8=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_unknown11(self): return self.__field_unknown11.getvalue() def __setfield_unknown11(self, value): if isinstance(value,DATA): self.__field_unknown11=value else: self.__field_unknown11=DATA(value,**{'sizeinbytes': 6}) def __delfield_unknown11(self): del self.__field_unknown11 unknown11=property(__getfield_unknown11, __setfield_unknown11, __delfield_unknown11, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_bin_header1(self): return self.__field_bin_header1.getvalue() def __setfield_bin_header1(self, value): if isinstance(value,UINT): self.__field_bin_header1=value else: self.__field_bin_header1=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header1(self): del self.__field_bin_header1 bin_header1=property(__getfield_bin_header1, __setfield_bin_header1, __delfield_bin_header1, None) def __getfield_bin_header2(self): return self.__field_bin_header2.getvalue() def __setfield_bin_header2(self, value): if isinstance(value,UINT): self.__field_bin_header2=value else: self.__field_bin_header2=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header2(self): del self.__field_bin_header2 bin_header2=property(__getfield_bin_header2, __setfield_bin_header2, __delfield_bin_header2, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_multipartID(self): return self.__field_multipartID.getvalue() def __setfield_multipartID(self, value): if isinstance(value,UINT): self.__field_multipartID=value else: self.__field_multipartID=UINT(value,**{'sizeinbytes': 2}) def __delfield_multipartID(self): del self.__field_multipartID multipartID=property(__getfield_multipartID, __setfield_multipartID, __delfield_multipartID, None) def __getfield_unknown14(self): return self.__field_unknown14.getvalue() def __setfield_unknown14(self, value): if isinstance(value,UINT): self.__field_unknown14=value else: self.__field_unknown14=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown14(self): del self.__field_unknown14 unknown14=property(__getfield_unknown14, __setfield_unknown14, __delfield_unknown14, None) def __getfield_bin_header3(self): return self.__field_bin_header3.getvalue() def __setfield_bin_header3(self, value): if isinstance(value,UINT): self.__field_bin_header3=value else: self.__field_bin_header3=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header3(self): del self.__field_bin_header3 bin_header3=property(__getfield_bin_header3, __setfield_bin_header3, __delfield_bin_header3, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_msglengths(self): try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx8100_250, 'length': 20}) return self.__field_msglengths.getvalue() def __setfield_msglengths(self, value): if isinstance(value,LIST): self.__field_msglengths=value else: self.__field_msglengths=LIST(value,**{'elementclass': _gen_p_lgvx8100_250, 'length': 20}) def __delfield_msglengths(self): del self.__field_msglengths msglengths=property(__getfield_msglengths, __setfield_msglengths, __delfield_msglengths, None) def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def __getfield_unknown12(self): return self.__field_unknown12.getvalue() def __setfield_unknown12(self, value): if isinstance(value,DATA): self.__field_unknown12=value else: self.__field_unknown12=DATA(value,**{'sizeinbytes': 60}) def __delfield_unknown12(self): del self.__field_unknown12 unknown12=property(__getfield_unknown12, __setfield_unknown12, __delfield_unknown12, None) def __getfield_senders_name(self): return self.__field_senders_name.getvalue() def __setfield_senders_name(self, value): if isinstance(value,USTRING): self.__field_senders_name=value else: self.__field_senders_name=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING}) def __delfield_senders_name(self): del self.__field_senders_name senders_name=property(__getfield_senders_name, __setfield_senders_name, __delfield_senders_name, None) def __getfield_unknown9(self): return self.__field_unknown9.getvalue() def __setfield_unknown9(self, value): if isinstance(value,DATA): self.__field_unknown9=value else: self.__field_unknown9=DATA(value,**{'sizeinbytes': 169}) def __delfield_unknown9(self): del self.__field_unknown9 unknown9=property(__getfield_unknown9, __setfield_unknown9, __delfield_unknown9, None) def iscontainer(self): return True def containerelements(self): yield ('msg_index1', self.__field_msg_index1, None) yield ('msg_index2', self.__field_msg_index2, None) yield ('unknown2', self.__field_unknown2, None) yield ('timesent', self.__field_timesent, None) yield ('unknown', self.__field_unknown, None) yield ('callback_length', self.__field_callback_length, None) yield ('callback', self.__field_callback, None) yield ('sender_length', self.__field_sender_length, None) yield ('sender', self.__field_sender, None) yield ('unknown3', self.__field_unknown3, None) yield ('lg_time', self.__field_lg_time, None) yield ('unknown4', self.__field_unknown4, None) yield ('GPStime', self.__field_GPStime, None) yield ('unknown5', self.__field_unknown5, None) yield ('read', self.__field_read, None) yield ('locked', self.__field_locked, None) yield ('unknown8', self.__field_unknown8, None) yield ('priority', self.__field_priority, None) yield ('unknown11', self.__field_unknown11, None) yield ('subject', self.__field_subject, None) yield ('bin_header1', self.__field_bin_header1, None) yield ('bin_header2', self.__field_bin_header2, None) yield ('unknown6', self.__field_unknown6, None) yield ('multipartID', self.__field_multipartID, None) yield ('unknown14', self.__field_unknown14, None) yield ('bin_header3', self.__field_bin_header3, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('msglengths', self.__field_msglengths, None) yield ('msgs', self.__field_msgs, None) yield ('unknown12', self.__field_unknown12, None) yield ('senders_name', self.__field_senders_name, None) yield ('unknown9', self.__field_unknown9, None) class _gen_p_lgvx8100_230(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8100_230,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8100_230: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8100_230,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8100_230,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of senders phone number") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of senders phone number") class _gen_p_lgvx8100_250(BaseProtogenClass): 'Anonymous inner class' __fields=['msglength'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8100_250,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8100_250: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8100_250,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8100_250,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_msglength=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msglength.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msglength=UINT(**{'sizeinbytes': 1}) self.__field_msglength.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msglength(self): return self.__field_msglength.getvalue() def __setfield_msglength(self, value): if isinstance(value,UINT): self.__field_msglength=value else: self.__field_msglength=UINT(value,**{'sizeinbytes': 1}) def __delfield_msglength(self): del self.__field_msglength msglength=property(__getfield_msglength, __setfield_msglength, __delfield_msglength, "lengths of individual messages in septets") def iscontainer(self): return True def containerelements(self): yield ('msglength', self.__field_msglength, "lengths of individual messages in septets") class sms_quick_text(BaseProtogenClass): __fields=['msgs'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_quick_text,self).__init__(**dict) if self.__class__ is sms_quick_text: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_quick_text,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_quick_text,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx8100_264, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_msgs=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx8100_264, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) self.__field_msgs.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx8100_264, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) self.__field_msgs.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx8100_264, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'elementclass': _gen_p_lgvx8100_264, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def iscontainer(self): return True def containerelements(self): yield ('msgs', self.__field_msgs, None) class _gen_p_lgvx8100_264(BaseProtogenClass): 'Anonymous inner class' __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8100_264,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8100_264: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8100_264,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8100_264,kwargs) if len(args): dict2={'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""} dict2.update(kwargs) kwargs=dict2 self.__field_msg=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class textmemo(BaseProtogenClass): __fields=['text', 'memotime'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemo,self).__init__(**dict) if self.__class__ is textmemo: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemo,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemo,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_text.writetobuffer(buf) self.__field_memotime.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_text=USTRING(**{'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_text.readfrombuffer(buf) self.__field_memotime=LGCALDATE(**{'sizeinbytes': 4}) self.__field_memotime.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,USTRING): self.__field_text=value else: self.__field_text=USTRING(value,**{'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def __getfield_memotime(self): return self.__field_memotime.getvalue() def __setfield_memotime(self, value): if isinstance(value,LGCALDATE): self.__field_memotime=value else: self.__field_memotime=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_memotime(self): del self.__field_memotime memotime=property(__getfield_memotime, __setfield_memotime, __delfield_memotime, None) def iscontainer(self): return True def containerelements(self): yield ('text', self.__field_text, None) yield ('memotime', self.__field_memotime, None) class textmemofile(BaseProtogenClass): __fields=['itemcount', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemofile,self).__init__(**dict) if self.__class__ is textmemofile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemofile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemofile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_itemcount.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_itemcount=UINT(**{'sizeinbytes': 4}) self.__field_itemcount.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_itemcount(self): return self.__field_itemcount.getvalue() def __setfield_itemcount(self, value): if isinstance(value,UINT): self.__field_itemcount=value else: self.__field_itemcount=UINT(value,**{'sizeinbytes': 4}) def __delfield_itemcount(self): del self.__field_itemcount itemcount=property(__getfield_itemcount, __setfield_itemcount, __delfield_itemcount, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': textmemo }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('itemcount', self.__field_itemcount, None) yield ('items', self.__field_items, None) class firmwareresponse(BaseProtogenClass): __fields=['command', 'date1', 'time1', 'date2', 'time2', 'firmware'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(firmwareresponse,self).__init__(**dict) if self.__class__ is firmwareresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(firmwareresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(firmwareresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_date1.writetobuffer(buf) self.__field_time1.writetobuffer(buf) self.__field_date2.writetobuffer(buf) self.__field_time2.writetobuffer(buf) self.__field_firmware.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_date1=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date1.readfrombuffer(buf) self.__field_time1=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time1.readfrombuffer(buf) self.__field_date2=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date2.readfrombuffer(buf) self.__field_time2=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time2.readfrombuffer(buf) self.__field_firmware=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_firmware.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_date1(self): return self.__field_date1.getvalue() def __setfield_date1(self, value): if isinstance(value,USTRING): self.__field_date1=value else: self.__field_date1=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date1(self): del self.__field_date1 date1=property(__getfield_date1, __setfield_date1, __delfield_date1, None) def __getfield_time1(self): return self.__field_time1.getvalue() def __setfield_time1(self, value): if isinstance(value,USTRING): self.__field_time1=value else: self.__field_time1=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time1(self): del self.__field_time1 time1=property(__getfield_time1, __setfield_time1, __delfield_time1, None) def __getfield_date2(self): return self.__field_date2.getvalue() def __setfield_date2(self, value): if isinstance(value,USTRING): self.__field_date2=value else: self.__field_date2=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date2(self): del self.__field_date2 date2=property(__getfield_date2, __setfield_date2, __delfield_date2, None) def __getfield_time2(self): return self.__field_time2.getvalue() def __setfield_time2(self, value): if isinstance(value,USTRING): self.__field_time2=value else: self.__field_time2=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time2(self): del self.__field_time2 time2=property(__getfield_time2, __setfield_time2, __delfield_time2, None) def __getfield_firmware(self): return self.__field_firmware.getvalue() def __setfield_firmware(self, value): if isinstance(value,USTRING): self.__field_firmware=value else: self.__field_firmware=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_firmware(self): del self.__field_firmware firmware=property(__getfield_firmware, __setfield_firmware, __delfield_firmware, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('date1', self.__field_date1, None) yield ('time1', self.__field_time1, None) yield ('date2', self.__field_date2, None) yield ('time2', self.__field_time2, None) yield ('firmware', self.__field_firmware, None) bitpim-1.0.7+dfsg1/src/phones/p_lgg4015.py0000644001616600161660000050715510555026112016220 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG G4015""" from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_etsi import * from p_lg import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb # general constants MEDIA_RINGTONE=0 MEDIA_WALLPAPER=1 GROUP_INDEX_RANGE=xrange(8) MIN_RINGTONE_INDEX=0 MAX_RINGTONE_INDEX=19 MIN_WALLPAPER_INDEX=0 MAX_WALLPAPER_INDEX=19 CHARSET_IRA='IRA' CHARSET_BASE64='Base64' CHARSET_GSM='GSM' CHARSET_HEX='HEX' CHARSET_PCCP437='PCCP437' CHARSET_PCDN='PCDN' CHARSET_8859_1='8859-1' CHARSET_UCS2='UCS2' # Calendar constants CAL_TOTAL_ENTRIES=30 CAL_MIN_INDEX=0 CAL_MAX_INDEX=29 CAL_DESC_LEN=30 CAL_REP_NONE=0 CAL_REP_DAILY=1 CAL_REP_WEEKLY=2 CAL_REP_MONTHLY=3 CAL_REP_YEARLY=4 CAL_ALARM_NONE=0 CAL_ALARM_ONTIME=1 CAL_ALARM_15MIN=2 CAL_ALARM_30MIN=3 CAL_ALARM_1HR=4 CAL_ALARM_1DAY=5 CAL_ALARM_VALUE={ CAL_ALARM_NONE: -1, CAL_ALARM_ONTIME: 0, CAL_ALARM_15MIN: 15, CAL_ALARM_30MIN: 30, CAL_ALARM_1HR: 60, CAL_ALARM_1DAY: 1440 } CAL_ALARM_LIST=((1440, CAL_ALARM_1DAY), (60, CAL_ALARM_1HR), (30, CAL_ALARM_30MIN), (15, CAL_ALARM_15MIN), (0, CAL_ALARM_ONTIME), (-1, CAL_ALARM_NONE)) # Phonebook constans PB_MEMORY_SIM='AD' PB_MEMORY_MAIN='ME' PB_MEMORY_LAST_DIALED='LD' PB_MEMORY_LAST_RECEIVED='LR' PB_MEMORY_LAST_MISSED='LM' PB_MAIN_TOTAL_ENTRIES=255 PB_MAIN_MIN_INDEX=0 PB_MAIN_MAX_INDEX=254 PB_SIM_TOTAL_ENTRIES=250 PB_SIM_MIN_INDEX=1 PB_SIM_MAX_INDEX=250 PB_NUMBER_LEN=40 # max size of a number string PB_NAME_LEN=20 # max size of a contact name PB_EMAIL_LEN=40 PB_MEMO_LEN=50 PB_SIM_NAME_LEN=16 PB_LD_MIN_INDEX=1 PB_LD_MAX_INDEX=10 PB_LR_MIN_INDEX=1 PB_LR_MAX_INDEX=20 PB_LM_MIN_INDEX=1 PB_LM_MAX_INDEX=10 PB_CALL_HISTORY_INFO=( ('Getting Last Dialed Calls', PB_MEMORY_LAST_DIALED, PB_LD_MIN_INDEX, PB_LD_MAX_INDEX), ('Getting Last Received Calls', PB_MEMORY_LAST_RECEIVED, PB_LR_MIN_INDEX, PB_LR_MAX_INDEX), ('Getting Missed Calls', PB_MEMORY_LAST_MISSED, PB_LM_MIN_INDEX, PB_LM_MAX_INDEX)) # Memo constants MEMO_MIN_INDEX=0 MEMO_MAX_INDEX=19 MEMO_READ_CMD='+CMDR' MEMO_WRITE_CMD='+CMDW' # SMS Constants SMS_MEMORY_PHONE='ME' SMS_MEMORY_SIM='SM' SMS_MEMORY_SELECT_CMD='+CPMS' SMS_FORMAT_TEXT=1 SMS_FORMAT_PDU=0 SMS_FORMAT_CMD='+CMGF' SMS_MSG_REC_UNREAD='REC UNREAD' SMS_MSG_REC_READ='REC READ' SMS_MSG_STO_UNSENT='STO UNSENT' SMS_MSG_STO_SENT='STO SENT' SMS_MSG_ALL='ALL' SMS_MSG_LIST_CMD='+CMGL' class calendar_read_req(BaseProtogenClass): __fields=['command', 'start_index', 'end_index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(calendar_read_req,self).__init__(**dict) if self.__class__ is calendar_read_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(calendar_read_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(calendar_read_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CXDR=' }) self.__field_command.writetobuffer(buf) try: self.__field_start_index except: self.__field_start_index=CSVINT() self.__field_start_index.writetobuffer(buf) try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None }) self.__field_end_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CXDR=' }) self.__field_command.readfrombuffer(buf) self.__field_start_index=CSVINT() self.__field_start_index.readfrombuffer(buf) self.__field_end_index=CSVINT(**{ 'terminator': None }) self.__field_end_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CXDR=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+CXDR=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_start_index(self): try: self.__field_start_index except: self.__field_start_index=CSVINT() return self.__field_start_index.getvalue() def __setfield_start_index(self, value): if isinstance(value,CSVINT): self.__field_start_index=value else: self.__field_start_index=CSVINT(value,) def __delfield_start_index(self): del self.__field_start_index start_index=property(__getfield_start_index, __setfield_start_index, __delfield_start_index, None) def __getfield_end_index(self): try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None }) return self.__field_end_index.getvalue() def __setfield_end_index(self, value): if isinstance(value,CSVINT): self.__field_end_index=value else: self.__field_end_index=CSVINT(value,**{ 'terminator': None }) def __delfield_end_index(self): del self.__field_end_index end_index=property(__getfield_end_index, __setfield_end_index, __delfield_end_index, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('start_index', self.__field_start_index, None) yield ('end_index', self.__field_end_index, None) class calendar_read_resp(BaseProtogenClass): __fields=['command', 'index', 'repeat', 'alarm', 'date', 'time', 'description'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(calendar_read_resp,self).__init__(**dict) if self.__class__ is calendar_read_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(calendar_read_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(calendar_read_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) self.__field_alarm.writetobuffer(buf) self.__field_date.writetobuffer(buf) self.__field_time.writetobuffer(buf) self.__field_description.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '+CXDR:'}) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT() self.__field_index.readfrombuffer(buf) self.__field_repeat=CSVINT() self.__field_repeat.readfrombuffer(buf) self.__field_alarm=CSVINT() self.__field_alarm.readfrombuffer(buf) self.__field_date=GSMCALDATE() self.__field_date.readfrombuffer(buf) self.__field_time=GSMCALTIME() self.__field_time.readfrombuffer(buf) self.__field_description=CSVSTRING(**{ 'terminator': None }) self.__field_description.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '+CXDR:'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,CSVINT): self.__field_repeat=value else: self.__field_repeat=CSVINT(value,) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_alarm(self): return self.__field_alarm.getvalue() def __setfield_alarm(self, value): if isinstance(value,CSVINT): self.__field_alarm=value else: self.__field_alarm=CSVINT(value,) def __delfield_alarm(self): del self.__field_alarm alarm=property(__getfield_alarm, __setfield_alarm, __delfield_alarm, None) def __getfield_date(self): return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,GSMCALDATE): self.__field_date=value else: self.__field_date=GSMCALDATE(value,) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, None) def __getfield_time(self): return self.__field_time.getvalue() def __setfield_time(self, value): if isinstance(value,GSMCALTIME): self.__field_time=value else: self.__field_time=GSMCALTIME(value,) def __delfield_time(self): del self.__field_time time=property(__getfield_time, __setfield_time, __delfield_time, None) def __getfield_description(self): return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,CSVSTRING): self.__field_description=value else: self.__field_description=CSVSTRING(value,**{ 'terminator': None }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) yield ('repeat', self.__field_repeat, None) yield ('alarm', self.__field_alarm, None) yield ('date', self.__field_date, None) yield ('time', self.__field_time, None) yield ('description', self.__field_description, None) class calendar_write_check_req(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(calendar_write_check_req,self).__init__(**dict) if self.__class__ is calendar_write_check_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(calendar_write_check_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(calendar_write_check_req,kwargs) if len(args): dict2={ 'terminator': None, 'default': '+CXDW' } dict2.update(kwargs) kwargs=dict2 self.__field_command=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CXDW' }) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CXDW' }) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CXDW' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+CXDW' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class calendar_write_check_resp(BaseProtogenClass): __fields=['command', 'index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(calendar_write_check_resp,self).__init__(**dict) if self.__class__ is calendar_write_check_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(calendar_write_check_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(calendar_write_check_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': ord(' '), 'constant': '+CXDW:' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT(**{ 'terminator': None }) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': ord(' '), 'constant': '+CXDW:' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,**{ 'terminator': None }) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) class calendar_write_req(BaseProtogenClass): __fields=['command', 'index', 'repeat', 'alarm', 'date', 'time', 'description'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(calendar_write_req,self).__init__(**dict) if self.__class__ is calendar_write_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(calendar_write_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(calendar_write_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CXDW=' }) self.__field_command.writetobuffer(buf) try: self.__field_index except: self.__field_index=CSVINT() self.__field_index.writetobuffer(buf) try: self.__field_repeat except: self.__field_repeat=CSVINT() self.__field_repeat.writetobuffer(buf) try: self.__field_alarm except: self.__field_alarm=CSVINT() self.__field_alarm.writetobuffer(buf) try: self.__field_date except: self.__field_date=GSMCALDATE() self.__field_date.writetobuffer(buf) try: self.__field_time except: self.__field_time=GSMCALTIME() self.__field_time.writetobuffer(buf) try: self.__field_description except: self.__field_description=CSVSTRING(**{ 'terminator': None, 'maxsizeinbytes': CAL_DESC_LEN, 'raiseontruncate': False }) self.__field_description.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CXDW=' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT() self.__field_index.readfrombuffer(buf) self.__field_repeat=CSVINT() self.__field_repeat.readfrombuffer(buf) self.__field_alarm=CSVINT() self.__field_alarm.readfrombuffer(buf) self.__field_date=GSMCALDATE() self.__field_date.readfrombuffer(buf) self.__field_time=GSMCALTIME() self.__field_time.readfrombuffer(buf) self.__field_description=CSVSTRING(**{ 'terminator': None, 'maxsizeinbytes': CAL_DESC_LEN, 'raiseontruncate': False }) self.__field_description.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CXDW=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+CXDW=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): try: self.__field_index except: self.__field_index=CSVINT() return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_repeat(self): try: self.__field_repeat except: self.__field_repeat=CSVINT() return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,CSVINT): self.__field_repeat=value else: self.__field_repeat=CSVINT(value,) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_alarm(self): try: self.__field_alarm except: self.__field_alarm=CSVINT() return self.__field_alarm.getvalue() def __setfield_alarm(self, value): if isinstance(value,CSVINT): self.__field_alarm=value else: self.__field_alarm=CSVINT(value,) def __delfield_alarm(self): del self.__field_alarm alarm=property(__getfield_alarm, __setfield_alarm, __delfield_alarm, None) def __getfield_date(self): try: self.__field_date except: self.__field_date=GSMCALDATE() return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,GSMCALDATE): self.__field_date=value else: self.__field_date=GSMCALDATE(value,) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, None) def __getfield_time(self): try: self.__field_time except: self.__field_time=GSMCALTIME() return self.__field_time.getvalue() def __setfield_time(self, value): if isinstance(value,GSMCALTIME): self.__field_time=value else: self.__field_time=GSMCALTIME(value,) def __delfield_time(self): del self.__field_time time=property(__getfield_time, __setfield_time, __delfield_time, None) def __getfield_description(self): try: self.__field_description except: self.__field_description=CSVSTRING(**{ 'terminator': None, 'maxsizeinbytes': CAL_DESC_LEN, 'raiseontruncate': False }) return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,CSVSTRING): self.__field_description=value else: self.__field_description=CSVSTRING(value,**{ 'terminator': None, 'maxsizeinbytes': CAL_DESC_LEN, 'raiseontruncate': False }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) yield ('repeat', self.__field_repeat, None) yield ('alarm', self.__field_alarm, None) yield ('date', self.__field_date, None) yield ('time', self.__field_time, None) yield ('description', self.__field_description, None) class calendar_del_req(BaseProtogenClass): __fields=['command', 'index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(calendar_del_req,self).__init__(**dict) if self.__class__ is calendar_del_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(calendar_del_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(calendar_del_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CXDW=' }) self.__field_command.writetobuffer(buf) try: self.__field_index except: self.__field_index=CSVINT(**{ 'terminator': None }) self.__field_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CXDW=' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT(**{ 'terminator': None }) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CXDW=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+CXDW=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): try: self.__field_index except: self.__field_index=CSVINT(**{ 'terminator': None }) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,**{ 'terminator': None }) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) class media_selector_req(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(media_selector_req,self).__init__(**dict) if self.__class__ is media_selector_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(media_selector_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(media_selector_req,kwargs) if len(args): dict2={ 'terminator': None, 'default': '+DDLS?' } dict2.update(kwargs) kwargs=dict2 self.__field_command=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLS?' }) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLS?' }) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLS?' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+DDLS?' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class media_selector_resp(BaseProtogenClass): __fields=['command', 'media_type'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(media_selector_resp,self).__init__(**dict) if self.__class__ is media_selector_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(media_selector_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(media_selector_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_media_type.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': ord(' '), 'constant': '+DDLS:' }) self.__field_command.readfrombuffer(buf) self.__field_media_type=CSVINT(**{ 'terminator': None }) self.__field_media_type.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': ord(' '), 'constant': '+DDLS:' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_media_type(self): return self.__field_media_type.getvalue() def __setfield_media_type(self, value): if isinstance(value,CSVINT): self.__field_media_type=value else: self.__field_media_type=CSVINT(value,**{ 'terminator': None }) def __delfield_media_type(self): del self.__field_media_type media_type=property(__getfield_media_type, __setfield_media_type, __delfield_media_type, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('media_type', self.__field_media_type, None) class media_selector_set(BaseProtogenClass): __fields=['command', 'media_type'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(media_selector_set,self).__init__(**dict) if self.__class__ is media_selector_set: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(media_selector_set,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(media_selector_set,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLS=' }) self.__field_command.writetobuffer(buf) try: self.__field_media_type except: self.__field_media_type=CSVINT(**{ 'terminator': None }) self.__field_media_type.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLS=' }) self.__field_command.readfrombuffer(buf) self.__field_media_type=CSVINT(**{ 'terminator': None }) self.__field_media_type.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLS=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+DDLS=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_media_type(self): try: self.__field_media_type except: self.__field_media_type=CSVINT(**{ 'terminator': None }) return self.__field_media_type.getvalue() def __setfield_media_type(self, value): if isinstance(value,CSVINT): self.__field_media_type=value else: self.__field_media_type=CSVINT(value,**{ 'terminator': None }) def __delfield_media_type(self): del self.__field_media_type media_type=property(__getfield_media_type, __setfield_media_type, __delfield_media_type, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('media_type', self.__field_media_type, None) class media_list_req(BaseProtogenClass): __fields=['command', 'start_index', 'end_index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(media_list_req,self).__init__(**dict) if self.__class__ is media_list_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(media_list_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(media_list_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLR=' }) self.__field_command.writetobuffer(buf) try: self.__field_start_index except: self.__field_start_index=CSVINT() self.__field_start_index.writetobuffer(buf) try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None }) self.__field_end_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLR=' }) self.__field_command.readfrombuffer(buf) self.__field_start_index=CSVINT() self.__field_start_index.readfrombuffer(buf) self.__field_end_index=CSVINT(**{ 'terminator': None }) self.__field_end_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLR=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+DDLR=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_start_index(self): try: self.__field_start_index except: self.__field_start_index=CSVINT() return self.__field_start_index.getvalue() def __setfield_start_index(self, value): if isinstance(value,CSVINT): self.__field_start_index=value else: self.__field_start_index=CSVINT(value,) def __delfield_start_index(self): del self.__field_start_index start_index=property(__getfield_start_index, __setfield_start_index, __delfield_start_index, None) def __getfield_end_index(self): try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None }) return self.__field_end_index.getvalue() def __setfield_end_index(self, value): if isinstance(value,CSVINT): self.__field_end_index=value else: self.__field_end_index=CSVINT(value,**{ 'terminator': None }) def __delfield_end_index(self): del self.__field_end_index end_index=property(__getfield_end_index, __setfield_end_index, __delfield_end_index, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('start_index', self.__field_start_index, None) yield ('end_index', self.__field_end_index, None) class media_list_resp(BaseProtogenClass): __fields=['command', 'index', 'file_name', 'media_name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(media_list_resp,self).__init__(**dict) if self.__class__ is media_list_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(media_list_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(media_list_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_file_name.writetobuffer(buf) self.__field_media_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '+DDLR:'}) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT() self.__field_index.readfrombuffer(buf) self.__field_file_name=CSVSTRING() self.__field_file_name.readfrombuffer(buf) self.__field_media_name=CSVSTRING(**{ 'terminator': None }) self.__field_media_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '+DDLR:'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_file_name(self): return self.__field_file_name.getvalue() def __setfield_file_name(self, value): if isinstance(value,CSVSTRING): self.__field_file_name=value else: self.__field_file_name=CSVSTRING(value,) def __delfield_file_name(self): del self.__field_file_name file_name=property(__getfield_file_name, __setfield_file_name, __delfield_file_name, None) def __getfield_media_name(self): return self.__field_media_name.getvalue() def __setfield_media_name(self, value): if isinstance(value,CSVSTRING): self.__field_media_name=value else: self.__field_media_name=CSVSTRING(value,**{ 'terminator': None }) def __delfield_media_name(self): del self.__field_media_name media_name=property(__getfield_media_name, __setfield_media_name, __delfield_media_name, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) yield ('file_name', self.__field_file_name, None) yield ('media_name', self.__field_media_name, None) class del_media_req(BaseProtogenClass): __fields=['command', 'file_name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(del_media_req,self).__init__(**dict) if self.__class__ is del_media_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(del_media_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(del_media_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLD=0,' }) self.__field_command.writetobuffer(buf) try: self.__field_file_name except: self.__field_file_name=CSVSTRING(**{ 'terminator': None }) self.__field_file_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLD=0,' }) self.__field_command.readfrombuffer(buf) self.__field_file_name=CSVSTRING(**{ 'terminator': None }) self.__field_file_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLD=0,' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+DDLD=0,' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_file_name(self): try: self.__field_file_name except: self.__field_file_name=CSVSTRING(**{ 'terminator': None }) return self.__field_file_name.getvalue() def __setfield_file_name(self, value): if isinstance(value,CSVSTRING): self.__field_file_name=value else: self.__field_file_name=CSVSTRING(value,**{ 'terminator': None }) def __delfield_file_name(self): del self.__field_file_name file_name=property(__getfield_file_name, __setfield_file_name, __delfield_file_name, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('file_name', self.__field_file_name, None) class write_media_req(BaseProtogenClass): __fields=['command', 'index', 'file_name', 'media_name', 'data_len', 'media_type', 'dunno1', 'dunno2', 'dunno3', 'dunno4'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(write_media_req,self).__init__(**dict) if self.__class__ is write_media_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(write_media_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(write_media_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLW=' }) self.__field_command.writetobuffer(buf) try: self.__field_index except: self.__field_index=CSVINT() self.__field_index.writetobuffer(buf) try: self.__field_file_name except: self.__field_file_name=CSVSTRING() self.__field_file_name.writetobuffer(buf) try: self.__field_media_name except: self.__field_media_name=CSVSTRING() self.__field_media_name.writetobuffer(buf) self.__field_data_len.writetobuffer(buf) self.__field_media_type.writetobuffer(buf) try: self.__field_dunno1 except: self.__field_dunno1=CSVINT(**{ 'default': 0 }) self.__field_dunno1.writetobuffer(buf) try: self.__field_dunno2 except: self.__field_dunno2=CSVINT(**{ 'default': 0 }) self.__field_dunno2.writetobuffer(buf) try: self.__field_dunno3 except: self.__field_dunno3=CSVINT(**{ 'default': 0 }) self.__field_dunno3.writetobuffer(buf) try: self.__field_dunno4 except: self.__field_dunno4=CSVINT(**{ 'default': 0, 'terminator': ord('\r') }) self.__field_dunno4.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLW=' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT() self.__field_index.readfrombuffer(buf) self.__field_file_name=CSVSTRING() self.__field_file_name.readfrombuffer(buf) self.__field_media_name=CSVSTRING() self.__field_media_name.readfrombuffer(buf) self.__field_data_len=CSVINT() self.__field_data_len.readfrombuffer(buf) self.__field_media_type=CSVINT() self.__field_media_type.readfrombuffer(buf) self.__field_dunno1=CSVINT(**{ 'default': 0 }) self.__field_dunno1.readfrombuffer(buf) self.__field_dunno2=CSVINT(**{ 'default': 0 }) self.__field_dunno2.readfrombuffer(buf) self.__field_dunno3=CSVINT(**{ 'default': 0 }) self.__field_dunno3.readfrombuffer(buf) self.__field_dunno4=CSVINT(**{ 'default': 0, 'terminator': ord('\r') }) self.__field_dunno4.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLW=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+DDLW=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): try: self.__field_index except: self.__field_index=CSVINT() return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_file_name(self): try: self.__field_file_name except: self.__field_file_name=CSVSTRING() return self.__field_file_name.getvalue() def __setfield_file_name(self, value): if isinstance(value,CSVSTRING): self.__field_file_name=value else: self.__field_file_name=CSVSTRING(value,) def __delfield_file_name(self): del self.__field_file_name file_name=property(__getfield_file_name, __setfield_file_name, __delfield_file_name, None) def __getfield_media_name(self): try: self.__field_media_name except: self.__field_media_name=CSVSTRING() return self.__field_media_name.getvalue() def __setfield_media_name(self, value): if isinstance(value,CSVSTRING): self.__field_media_name=value else: self.__field_media_name=CSVSTRING(value,) def __delfield_media_name(self): del self.__field_media_name media_name=property(__getfield_media_name, __setfield_media_name, __delfield_media_name, None) def __getfield_data_len(self): return self.__field_data_len.getvalue() def __setfield_data_len(self, value): if isinstance(value,CSVINT): self.__field_data_len=value else: self.__field_data_len=CSVINT(value,) def __delfield_data_len(self): del self.__field_data_len data_len=property(__getfield_data_len, __setfield_data_len, __delfield_data_len, None) def __getfield_media_type(self): return self.__field_media_type.getvalue() def __setfield_media_type(self, value): if isinstance(value,CSVINT): self.__field_media_type=value else: self.__field_media_type=CSVINT(value,) def __delfield_media_type(self): del self.__field_media_type media_type=property(__getfield_media_type, __setfield_media_type, __delfield_media_type, None) def __getfield_dunno1(self): try: self.__field_dunno1 except: self.__field_dunno1=CSVINT(**{ 'default': 0 }) return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,CSVINT): self.__field_dunno1=value else: self.__field_dunno1=CSVINT(value,**{ 'default': 0 }) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_dunno2(self): try: self.__field_dunno2 except: self.__field_dunno2=CSVINT(**{ 'default': 0 }) return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,CSVINT): self.__field_dunno2=value else: self.__field_dunno2=CSVINT(value,**{ 'default': 0 }) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_dunno3(self): try: self.__field_dunno3 except: self.__field_dunno3=CSVINT(**{ 'default': 0 }) return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,CSVINT): self.__field_dunno3=value else: self.__field_dunno3=CSVINT(value,**{ 'default': 0 }) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_dunno4(self): try: self.__field_dunno4 except: self.__field_dunno4=CSVINT(**{ 'default': 0, 'terminator': ord('\r') }) return self.__field_dunno4.getvalue() def __setfield_dunno4(self, value): if isinstance(value,CSVINT): self.__field_dunno4=value else: self.__field_dunno4=CSVINT(value,**{ 'default': 0, 'terminator': ord('\r') }) def __delfield_dunno4(self): del self.__field_dunno4 dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) yield ('file_name', self.__field_file_name, None) yield ('media_name', self.__field_media_name, None) yield ('data_len', self.__field_data_len, None) yield ('media_type', self.__field_media_type, None) yield ('dunno1', self.__field_dunno1, None) yield ('dunno2', self.__field_dunno2, None) yield ('dunno3', self.__field_dunno3, None) yield ('dunno4', self.__field_dunno4, None) class list_group_req(BaseProtogenClass): __fields=['command', 'start_index', 'end_index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(list_group_req,self).__init__(**dict) if self.__class__ is list_group_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(list_group_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(list_group_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPGR=' }) self.__field_command.writetobuffer(buf) try: self.__field_start_index except: self.__field_start_index=CSVINT() self.__field_start_index.writetobuffer(buf) try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None }) self.__field_end_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPGR=' }) self.__field_command.readfrombuffer(buf) self.__field_start_index=CSVINT() self.__field_start_index.readfrombuffer(buf) self.__field_end_index=CSVINT(**{ 'terminator': None }) self.__field_end_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPGR=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+CPGR=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_start_index(self): try: self.__field_start_index except: self.__field_start_index=CSVINT() return self.__field_start_index.getvalue() def __setfield_start_index(self, value): if isinstance(value,CSVINT): self.__field_start_index=value else: self.__field_start_index=CSVINT(value,) def __delfield_start_index(self): del self.__field_start_index start_index=property(__getfield_start_index, __setfield_start_index, __delfield_start_index, None) def __getfield_end_index(self): try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None }) return self.__field_end_index.getvalue() def __setfield_end_index(self, value): if isinstance(value,CSVINT): self.__field_end_index=value else: self.__field_end_index=CSVINT(value,**{ 'terminator': None }) def __delfield_end_index(self): del self.__field_end_index end_index=property(__getfield_end_index, __setfield_end_index, __delfield_end_index, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('start_index', self.__field_start_index, None) yield ('end_index', self.__field_end_index, None) class list_group_resp(BaseProtogenClass): __fields=['command', 'index', 'group_name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(list_group_resp,self).__init__(**dict) if self.__class__ is list_group_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(list_group_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(list_group_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_group_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': ord(' '), 'constant': '+CPGR:' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT() self.__field_index.readfrombuffer(buf) self.__field_group_name=CSVSTRING(**{ 'terminator': None }) self.__field_group_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': ord(' '), 'constant': '+CPGR:' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_group_name(self): return self.__field_group_name.getvalue() def __setfield_group_name(self, value): if isinstance(value,CSVSTRING): self.__field_group_name=value else: self.__field_group_name=CSVSTRING(value,**{ 'terminator': None }) def __delfield_group_name(self): del self.__field_group_name group_name=property(__getfield_group_name, __setfield_group_name, __delfield_group_name, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) yield ('group_name', self.__field_group_name, None) class charset_set_req(BaseProtogenClass): __fields=['command', 'charset'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(charset_set_req,self).__init__(**dict) if self.__class__ is charset_set_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(charset_set_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(charset_set_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CSCS=' }) self.__field_command.writetobuffer(buf) try: self.__field_charset except: self.__field_charset=CSVSTRING(**{ 'terminator': None }) self.__field_charset.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CSCS=' }) self.__field_command.readfrombuffer(buf) self.__field_charset=CSVSTRING(**{ 'terminator': None }) self.__field_charset.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CSCS=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+CSCS=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_charset(self): try: self.__field_charset except: self.__field_charset=CSVSTRING(**{ 'terminator': None }) return self.__field_charset.getvalue() def __setfield_charset(self, value): if isinstance(value,CSVSTRING): self.__field_charset=value else: self.__field_charset=CSVSTRING(value,**{ 'terminator': None }) def __delfield_charset(self): del self.__field_charset charset=property(__getfield_charset, __setfield_charset, __delfield_charset, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('charset', self.__field_charset, None) class select_storage_req(BaseProtogenClass): __fields=['command', 'storage'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(select_storage_req,self).__init__(**dict) if self.__class__ is select_storage_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(select_storage_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(select_storage_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBS=' }) self.__field_command.writetobuffer(buf) try: self.__field_storage except: self.__field_storage=CSVSTRING(**{ 'terminator': None }) self.__field_storage.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBS=' }) self.__field_command.readfrombuffer(buf) self.__field_storage=CSVSTRING(**{ 'terminator': None }) self.__field_storage.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBS=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+CPBS=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_storage(self): try: self.__field_storage except: self.__field_storage=CSVSTRING(**{ 'terminator': None }) return self.__field_storage.getvalue() def __setfield_storage(self, value): if isinstance(value,CSVSTRING): self.__field_storage=value else: self.__field_storage=CSVSTRING(value,**{ 'terminator': None }) def __delfield_storage(self): del self.__field_storage storage=property(__getfield_storage, __setfield_storage, __delfield_storage, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('storage', self.__field_storage, None) class select_storage_resp(BaseProtogenClass): __fields=['command', 'storage', 'used_slots_count', 'total_slots_count', 'dunno'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(select_storage_resp,self).__init__(**dict) if self.__class__ is select_storage_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(select_storage_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(select_storage_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_storage.writetobuffer(buf) self.__field_used_slots_count.writetobuffer(buf) self.__field_total_slots_count.writetobuffer(buf) self.__field_dunno.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': ord(' '), 'constant': '+CPBS:' }) self.__field_command.readfrombuffer(buf) self.__field_storage=CSVSTRING() self.__field_storage.readfrombuffer(buf) self.__field_used_slots_count=CSVINT() self.__field_used_slots_count.readfrombuffer(buf) self.__field_total_slots_count=CSVINT() self.__field_total_slots_count.readfrombuffer(buf) self.__field_dunno=CSVINT(**{ 'terminator': None }) self.__field_dunno.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': ord(' '), 'constant': '+CPBS:' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_storage(self): return self.__field_storage.getvalue() def __setfield_storage(self, value): if isinstance(value,CSVSTRING): self.__field_storage=value else: self.__field_storage=CSVSTRING(value,) def __delfield_storage(self): del self.__field_storage storage=property(__getfield_storage, __setfield_storage, __delfield_storage, None) def __getfield_used_slots_count(self): return self.__field_used_slots_count.getvalue() def __setfield_used_slots_count(self, value): if isinstance(value,CSVINT): self.__field_used_slots_count=value else: self.__field_used_slots_count=CSVINT(value,) def __delfield_used_slots_count(self): del self.__field_used_slots_count used_slots_count=property(__getfield_used_slots_count, __setfield_used_slots_count, __delfield_used_slots_count, None) def __getfield_total_slots_count(self): return self.__field_total_slots_count.getvalue() def __setfield_total_slots_count(self, value): if isinstance(value,CSVINT): self.__field_total_slots_count=value else: self.__field_total_slots_count=CSVINT(value,) def __delfield_total_slots_count(self): del self.__field_total_slots_count total_slots_count=property(__getfield_total_slots_count, __setfield_total_slots_count, __delfield_total_slots_count, None) def __getfield_dunno(self): return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,CSVINT): self.__field_dunno=value else: self.__field_dunno=CSVINT(value,**{ 'terminator': None }) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('storage', self.__field_storage, None) yield ('used_slots_count', self.__field_used_slots_count, None) yield ('total_slots_count', self.__field_total_slots_count, None) yield ('dunno', self.__field_dunno, None) class read_phonebook_req(BaseProtogenClass): __fields=['command', 'start_index', 'end_index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(read_phonebook_req,self).__init__(**dict) if self.__class__ is read_phonebook_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(read_phonebook_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(read_phonebook_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBR=' }) self.__field_command.writetobuffer(buf) try: self.__field_start_index except: self.__field_start_index=CSVINT() self.__field_start_index.writetobuffer(buf) try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None }) self.__field_end_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBR=' }) self.__field_command.readfrombuffer(buf) self.__field_start_index=CSVINT() self.__field_start_index.readfrombuffer(buf) self.__field_end_index=CSVINT(**{ 'terminator': None }) self.__field_end_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBR=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+CPBR=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_start_index(self): try: self.__field_start_index except: self.__field_start_index=CSVINT() return self.__field_start_index.getvalue() def __setfield_start_index(self, value): if isinstance(value,CSVINT): self.__field_start_index=value else: self.__field_start_index=CSVINT(value,) def __delfield_start_index(self): del self.__field_start_index start_index=property(__getfield_start_index, __setfield_start_index, __delfield_start_index, None) def __getfield_end_index(self): try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None }) return self.__field_end_index.getvalue() def __setfield_end_index(self, value): if isinstance(value,CSVINT): self.__field_end_index=value else: self.__field_end_index=CSVINT(value,**{ 'terminator': None }) def __delfield_end_index(self): del self.__field_end_index end_index=property(__getfield_end_index, __setfield_end_index, __delfield_end_index, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('start_index', self.__field_start_index, None) yield ('end_index', self.__field_end_index, None) class read_phonebook_resp(BaseProtogenClass): __fields=['sim', 'command', 'index', 'group', 'mobile', 'mobile_type', 'home', 'home_type', 'office', 'office_type', 'name', 'email', 'memo'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(read_phonebook_resp,self).__init__(**dict) if self.__class__ is read_phonebook_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(read_phonebook_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(read_phonebook_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_sim except: self.__field_sim=BOOL(**{ 'default': False }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_group.writetobuffer(buf) self.__field_mobile.writetobuffer(buf) self.__field_mobile_type.writetobuffer(buf) self.__field_home.writetobuffer(buf) self.__field_home_type.writetobuffer(buf) self.__field_office.writetobuffer(buf) self.__field_office_type.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_email.writetobuffer(buf) self.__field_memo.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': ord(' '), 'constant': '+CPBR:' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT() self.__field_index.readfrombuffer(buf) self.__field_group=CSVINT() self.__field_group.readfrombuffer(buf) self.__field_mobile=CSVSTRING() self.__field_mobile.readfrombuffer(buf) self.__field_mobile_type=CSVINT() self.__field_mobile_type.readfrombuffer(buf) self.__field_home=CSVSTRING() self.__field_home.readfrombuffer(buf) self.__field_home_type=CSVINT() self.__field_home_type.readfrombuffer(buf) self.__field_office=CSVSTRING() self.__field_office.readfrombuffer(buf) self.__field_office_type=CSVINT() self.__field_office_type.readfrombuffer(buf) self.__field_name=CSVSTRING() self.__field_name.readfrombuffer(buf) self.__field_email=CSVSTRING() self.__field_email.readfrombuffer(buf) self.__field_memo=CSVSTRING() self.__field_memo.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_sim(self): try: self.__field_sim except: self.__field_sim=BOOL(**{ 'default': False }) return self.__field_sim.getvalue() def __setfield_sim(self, value): if isinstance(value,BOOL): self.__field_sim=value else: self.__field_sim=BOOL(value,**{ 'default': False }) def __delfield_sim(self): del self.__field_sim sim=property(__getfield_sim, __setfield_sim, __delfield_sim, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': ord(' '), 'constant': '+CPBR:' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,CSVINT): self.__field_group=value else: self.__field_group=CSVINT(value,) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_mobile(self): return self.__field_mobile.getvalue() def __setfield_mobile(self, value): if isinstance(value,CSVSTRING): self.__field_mobile=value else: self.__field_mobile=CSVSTRING(value,) def __delfield_mobile(self): del self.__field_mobile mobile=property(__getfield_mobile, __setfield_mobile, __delfield_mobile, None) def __getfield_mobile_type(self): return self.__field_mobile_type.getvalue() def __setfield_mobile_type(self, value): if isinstance(value,CSVINT): self.__field_mobile_type=value else: self.__field_mobile_type=CSVINT(value,) def __delfield_mobile_type(self): del self.__field_mobile_type mobile_type=property(__getfield_mobile_type, __setfield_mobile_type, __delfield_mobile_type, None) def __getfield_home(self): return self.__field_home.getvalue() def __setfield_home(self, value): if isinstance(value,CSVSTRING): self.__field_home=value else: self.__field_home=CSVSTRING(value,) def __delfield_home(self): del self.__field_home home=property(__getfield_home, __setfield_home, __delfield_home, None) def __getfield_home_type(self): return self.__field_home_type.getvalue() def __setfield_home_type(self, value): if isinstance(value,CSVINT): self.__field_home_type=value else: self.__field_home_type=CSVINT(value,) def __delfield_home_type(self): del self.__field_home_type home_type=property(__getfield_home_type, __setfield_home_type, __delfield_home_type, None) def __getfield_office(self): return self.__field_office.getvalue() def __setfield_office(self, value): if isinstance(value,CSVSTRING): self.__field_office=value else: self.__field_office=CSVSTRING(value,) def __delfield_office(self): del self.__field_office office=property(__getfield_office, __setfield_office, __delfield_office, None) def __getfield_office_type(self): return self.__field_office_type.getvalue() def __setfield_office_type(self, value): if isinstance(value,CSVINT): self.__field_office_type=value else: self.__field_office_type=CSVINT(value,) def __delfield_office_type(self): del self.__field_office_type office_type=property(__getfield_office_type, __setfield_office_type, __delfield_office_type, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,CSVSTRING): self.__field_name=value else: self.__field_name=CSVSTRING(value,) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,CSVSTRING): self.__field_email=value else: self.__field_email=CSVSTRING(value,) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def __getfield_memo(self): return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,CSVSTRING): self.__field_memo=value else: self.__field_memo=CSVSTRING(value,) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def iscontainer(self): return True def containerelements(self): yield ('sim', self.__field_sim, None) yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) yield ('group', self.__field_group, None) yield ('mobile', self.__field_mobile, None) yield ('mobile_type', self.__field_mobile_type, None) yield ('home', self.__field_home, None) yield ('home_type', self.__field_home_type, None) yield ('office', self.__field_office, None) yield ('office_type', self.__field_office_type, None) yield ('name', self.__field_name, None) yield ('email', self.__field_email, None) yield ('memo', self.__field_memo, None) class read_sim_phonebook_resp(BaseProtogenClass): __fields=['command', 'index', 'group', 'mobile', 'mobile_type', 'name', 'home', 'office', 'email', 'memo', 'sim'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(read_sim_phonebook_resp,self).__init__(**dict) if self.__class__ is read_sim_phonebook_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(read_sim_phonebook_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(read_sim_phonebook_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_home except: self.__field_home=USTRING(**{ 'terminator': None, 'default': '' }) try: self.__field_office except: self.__field_office=USTRING(**{ 'terminator': None, 'default': '' }) try: self.__field_email except: self.__field_email=USTRING(**{ 'terminator': None, 'default': '' }) try: self.__field_memo except: self.__field_memo=USTRING(**{ 'terminator': None, 'default': '' }) try: self.__field_sim except: self.__field_sim=BOOL(**{ 'default': True }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_group.writetobuffer(buf) self.__field_mobile.writetobuffer(buf) self.__field_mobile_type.writetobuffer(buf) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': ord(' '), 'constant': '+CPBR:' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT() self.__field_index.readfrombuffer(buf) self.__field_group=CSVINT() self.__field_group.readfrombuffer(buf) self.__field_mobile=CSVSTRING() self.__field_mobile.readfrombuffer(buf) self.__field_mobile_type=CSVINT() self.__field_mobile_type.readfrombuffer(buf) self.__field_name=CSVSTRING() self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': ord(' '), 'constant': '+CPBR:' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,CSVINT): self.__field_group=value else: self.__field_group=CSVINT(value,) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_mobile(self): return self.__field_mobile.getvalue() def __setfield_mobile(self, value): if isinstance(value,CSVSTRING): self.__field_mobile=value else: self.__field_mobile=CSVSTRING(value,) def __delfield_mobile(self): del self.__field_mobile mobile=property(__getfield_mobile, __setfield_mobile, __delfield_mobile, None) def __getfield_mobile_type(self): return self.__field_mobile_type.getvalue() def __setfield_mobile_type(self, value): if isinstance(value,CSVINT): self.__field_mobile_type=value else: self.__field_mobile_type=CSVINT(value,) def __delfield_mobile_type(self): del self.__field_mobile_type mobile_type=property(__getfield_mobile_type, __setfield_mobile_type, __delfield_mobile_type, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,CSVSTRING): self.__field_name=value else: self.__field_name=CSVSTRING(value,) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_home(self): try: self.__field_home except: self.__field_home=USTRING(**{ 'terminator': None, 'default': '' }) return self.__field_home.getvalue() def __setfield_home(self, value): if isinstance(value,USTRING): self.__field_home=value else: self.__field_home=USTRING(value,**{ 'terminator': None, 'default': '' }) def __delfield_home(self): del self.__field_home home=property(__getfield_home, __setfield_home, __delfield_home, None) def __getfield_office(self): try: self.__field_office except: self.__field_office=USTRING(**{ 'terminator': None, 'default': '' }) return self.__field_office.getvalue() def __setfield_office(self, value): if isinstance(value,USTRING): self.__field_office=value else: self.__field_office=USTRING(value,**{ 'terminator': None, 'default': '' }) def __delfield_office(self): del self.__field_office office=property(__getfield_office, __setfield_office, __delfield_office, None) def __getfield_email(self): try: self.__field_email except: self.__field_email=USTRING(**{ 'terminator': None, 'default': '' }) return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{ 'terminator': None, 'default': '' }) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def __getfield_memo(self): try: self.__field_memo except: self.__field_memo=USTRING(**{ 'terminator': None, 'default': '' }) return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,USTRING): self.__field_memo=value else: self.__field_memo=USTRING(value,**{ 'terminator': None, 'default': '' }) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def __getfield_sim(self): try: self.__field_sim except: self.__field_sim=BOOL(**{ 'default': True }) return self.__field_sim.getvalue() def __setfield_sim(self, value): if isinstance(value,BOOL): self.__field_sim=value else: self.__field_sim=BOOL(value,**{ 'default': True }) def __delfield_sim(self): del self.__field_sim sim=property(__getfield_sim, __setfield_sim, __delfield_sim, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) yield ('group', self.__field_group, None) yield ('mobile', self.__field_mobile, None) yield ('mobile_type', self.__field_mobile_type, None) yield ('name', self.__field_name, None) yield ('home', self.__field_home, None) yield ('office', self.__field_office, None) yield ('email', self.__field_email, None) yield ('memo', self.__field_memo, None) yield ('sim', self.__field_sim, None) class del_phonebook_req(BaseProtogenClass): __fields=['command', 'index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(del_phonebook_req,self).__init__(**dict) if self.__class__ is del_phonebook_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(del_phonebook_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(del_phonebook_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBW=' }) self.__field_command.writetobuffer(buf) try: self.__field_index except: self.__field_index=CSVINT(**{ 'terminator': None }) self.__field_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBW=' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT(**{ 'terminator': None }) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBW=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+CPBW=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): try: self.__field_index except: self.__field_index=CSVINT(**{ 'terminator': None }) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,**{ 'terminator': None }) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) class update_phonebook_resp(BaseProtogenClass): __fields=['command', 'index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(update_phonebook_resp,self).__init__(**dict) if self.__class__ is update_phonebook_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(update_phonebook_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(update_phonebook_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': ord(' '), 'constant': '+CPBW:' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT(**{ 'terminator': None }) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': ord(' '), 'constant': '+CPBW:' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,**{ 'terminator': None }) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) class write_phonebook_req(BaseProtogenClass): __fields=['command', 'group', 'mobile', 'mobile_type', 'home', 'home_type', 'office', 'office_type', 'name', 'email', 'memo'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(write_phonebook_req,self).__init__(**dict) if self.__class__ is write_phonebook_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(write_phonebook_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(write_phonebook_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBW=,' }) self.__field_command.writetobuffer(buf) try: self.__field_group except: self.__field_group=CSVINT() self.__field_group.writetobuffer(buf) try: self.__field_mobile except: self.__field_mobile=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) self.__field_mobile.writetobuffer(buf) try: self.__field_mobile_type except: self.__field_mobile_type=CSVINT(**{ 'default': 255 }) self.__field_mobile_type.writetobuffer(buf) try: self.__field_home except: self.__field_home=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) self.__field_home.writetobuffer(buf) try: self.__field_home_type except: self.__field_home_type=CSVINT(**{ 'default': 255 }) self.__field_home_type.writetobuffer(buf) try: self.__field_office except: self.__field_office=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) self.__field_office.writetobuffer(buf) try: self.__field_office_type except: self.__field_office_type=CSVINT(**{ 'default': 255 }) self.__field_office_type.writetobuffer(buf) try: self.__field_name except: self.__field_name=CSVSTRING(**{ 'maxsizeinbytes': PB_NAME_LEN, 'raiseontruncate': False }) self.__field_name.writetobuffer(buf) try: self.__field_email except: self.__field_email=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_EMAIL_LEN, 'raiseontruncate': False }) self.__field_email.writetobuffer(buf) try: self.__field_memo except: self.__field_memo=CSVSTRING(**{ 'terminator': None, 'default': '', 'maxsizeinbytes': PB_MEMO_LEN, 'raiseontruncate': False }) self.__field_memo.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBW=,' }) self.__field_command.readfrombuffer(buf) self.__field_group=CSVINT() self.__field_group.readfrombuffer(buf) self.__field_mobile=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) self.__field_mobile.readfrombuffer(buf) self.__field_mobile_type=CSVINT(**{ 'default': 255 }) self.__field_mobile_type.readfrombuffer(buf) self.__field_home=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) self.__field_home.readfrombuffer(buf) self.__field_home_type=CSVINT(**{ 'default': 255 }) self.__field_home_type.readfrombuffer(buf) self.__field_office=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) self.__field_office.readfrombuffer(buf) self.__field_office_type=CSVINT(**{ 'default': 255 }) self.__field_office_type.readfrombuffer(buf) self.__field_name=CSVSTRING(**{ 'maxsizeinbytes': PB_NAME_LEN, 'raiseontruncate': False }) self.__field_name.readfrombuffer(buf) self.__field_email=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_EMAIL_LEN, 'raiseontruncate': False }) self.__field_email.readfrombuffer(buf) self.__field_memo=CSVSTRING(**{ 'terminator': None, 'default': '', 'maxsizeinbytes': PB_MEMO_LEN, 'raiseontruncate': False }) self.__field_memo.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBW=,' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+CPBW=,' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_group(self): try: self.__field_group except: self.__field_group=CSVINT() return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,CSVINT): self.__field_group=value else: self.__field_group=CSVINT(value,) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_mobile(self): try: self.__field_mobile except: self.__field_mobile=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) return self.__field_mobile.getvalue() def __setfield_mobile(self, value): if isinstance(value,CSVSTRING): self.__field_mobile=value else: self.__field_mobile=CSVSTRING(value,**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) def __delfield_mobile(self): del self.__field_mobile mobile=property(__getfield_mobile, __setfield_mobile, __delfield_mobile, None) def __getfield_mobile_type(self): try: self.__field_mobile_type except: self.__field_mobile_type=CSVINT(**{ 'default': 255 }) return self.__field_mobile_type.getvalue() def __setfield_mobile_type(self, value): if isinstance(value,CSVINT): self.__field_mobile_type=value else: self.__field_mobile_type=CSVINT(value,**{ 'default': 255 }) def __delfield_mobile_type(self): del self.__field_mobile_type mobile_type=property(__getfield_mobile_type, __setfield_mobile_type, __delfield_mobile_type, None) def __getfield_home(self): try: self.__field_home except: self.__field_home=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) return self.__field_home.getvalue() def __setfield_home(self, value): if isinstance(value,CSVSTRING): self.__field_home=value else: self.__field_home=CSVSTRING(value,**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) def __delfield_home(self): del self.__field_home home=property(__getfield_home, __setfield_home, __delfield_home, None) def __getfield_home_type(self): try: self.__field_home_type except: self.__field_home_type=CSVINT(**{ 'default': 255 }) return self.__field_home_type.getvalue() def __setfield_home_type(self, value): if isinstance(value,CSVINT): self.__field_home_type=value else: self.__field_home_type=CSVINT(value,**{ 'default': 255 }) def __delfield_home_type(self): del self.__field_home_type home_type=property(__getfield_home_type, __setfield_home_type, __delfield_home_type, None) def __getfield_office(self): try: self.__field_office except: self.__field_office=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) return self.__field_office.getvalue() def __setfield_office(self, value): if isinstance(value,CSVSTRING): self.__field_office=value else: self.__field_office=CSVSTRING(value,**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) def __delfield_office(self): del self.__field_office office=property(__getfield_office, __setfield_office, __delfield_office, None) def __getfield_office_type(self): try: self.__field_office_type except: self.__field_office_type=CSVINT(**{ 'default': 255 }) return self.__field_office_type.getvalue() def __setfield_office_type(self, value): if isinstance(value,CSVINT): self.__field_office_type=value else: self.__field_office_type=CSVINT(value,**{ 'default': 255 }) def __delfield_office_type(self): del self.__field_office_type office_type=property(__getfield_office_type, __setfield_office_type, __delfield_office_type, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=CSVSTRING(**{ 'maxsizeinbytes': PB_NAME_LEN, 'raiseontruncate': False }) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,CSVSTRING): self.__field_name=value else: self.__field_name=CSVSTRING(value,**{ 'maxsizeinbytes': PB_NAME_LEN, 'raiseontruncate': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_email(self): try: self.__field_email except: self.__field_email=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_EMAIL_LEN, 'raiseontruncate': False }) return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,CSVSTRING): self.__field_email=value else: self.__field_email=CSVSTRING(value,**{ 'default': '', 'maxsizeinbytes': PB_EMAIL_LEN, 'raiseontruncate': False }) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def __getfield_memo(self): try: self.__field_memo except: self.__field_memo=CSVSTRING(**{ 'terminator': None, 'default': '', 'maxsizeinbytes': PB_MEMO_LEN, 'raiseontruncate': False }) return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,CSVSTRING): self.__field_memo=value else: self.__field_memo=CSVSTRING(value,**{ 'terminator': None, 'default': '', 'maxsizeinbytes': PB_MEMO_LEN, 'raiseontruncate': False }) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('group', self.__field_group, None) yield ('mobile', self.__field_mobile, None) yield ('mobile_type', self.__field_mobile_type, None) yield ('home', self.__field_home, None) yield ('home_type', self.__field_home_type, None) yield ('office', self.__field_office, None) yield ('office_type', self.__field_office_type, None) yield ('name', self.__field_name, None) yield ('email', self.__field_email, None) yield ('memo', self.__field_memo, None) class write_sim_phonebook_req(BaseProtogenClass): __fields=['command', 'group', 'number', 'number_type', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(write_sim_phonebook_req,self).__init__(**dict) if self.__class__ is write_sim_phonebook_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(write_sim_phonebook_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(write_sim_phonebook_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBW=,' }) self.__field_command.writetobuffer(buf) try: self.__field_group except: self.__field_group=CSVINT(**{ 'default': 0 }) self.__field_group.writetobuffer(buf) try: self.__field_number except: self.__field_number=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) self.__field_number.writetobuffer(buf) try: self.__field_number_type except: self.__field_number_type=CSVINT(**{ 'default': 255 }) self.__field_number_type.writetobuffer(buf) try: self.__field_name except: self.__field_name=CSVSTRING(**{ 'terminator': None, 'maxsizeinbytes': PB_SIM_NAME_LEN, 'raiseontruncate': False }) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBW=,' }) self.__field_command.readfrombuffer(buf) self.__field_group=CSVINT(**{ 'default': 0 }) self.__field_group.readfrombuffer(buf) self.__field_number=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) self.__field_number.readfrombuffer(buf) self.__field_number_type=CSVINT(**{ 'default': 255 }) self.__field_number_type.readfrombuffer(buf) self.__field_name=CSVSTRING(**{ 'terminator': None, 'maxsizeinbytes': PB_SIM_NAME_LEN, 'raiseontruncate': False }) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBW=,' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+CPBW=,' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_group(self): try: self.__field_group except: self.__field_group=CSVINT(**{ 'default': 0 }) return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,CSVINT): self.__field_group=value else: self.__field_group=CSVINT(value,**{ 'default': 0 }) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_number(self): try: self.__field_number except: self.__field_number=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,CSVSTRING): self.__field_number=value else: self.__field_number=CSVSTRING(value,**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_number_type(self): try: self.__field_number_type except: self.__field_number_type=CSVINT(**{ 'default': 255 }) return self.__field_number_type.getvalue() def __setfield_number_type(self, value): if isinstance(value,CSVINT): self.__field_number_type=value else: self.__field_number_type=CSVINT(value,**{ 'default': 255 }) def __delfield_number_type(self): del self.__field_number_type number_type=property(__getfield_number_type, __setfield_number_type, __delfield_number_type, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=CSVSTRING(**{ 'terminator': None, 'maxsizeinbytes': PB_SIM_NAME_LEN, 'raiseontruncate': False }) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,CSVSTRING): self.__field_name=value else: self.__field_name=CSVSTRING(value,**{ 'terminator': None, 'maxsizeinbytes': PB_SIM_NAME_LEN, 'raiseontruncate': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('group', self.__field_group, None) yield ('number', self.__field_number, None) yield ('number_type', self.__field_number_type, None) yield ('name', self.__field_name, None) class memo_read_req(BaseProtogenClass): __fields=['command', 'start_index', 'end_index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(memo_read_req,self).__init__(**dict) if self.__class__ is memo_read_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(memo_read_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(memo_read_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': MEMO_READ_CMD+'=' }) self.__field_command.writetobuffer(buf) try: self.__field_start_index except: self.__field_start_index=CSVINT(**{ 'default': MEMO_MIN_INDEX }) self.__field_start_index.writetobuffer(buf) try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None, 'default': MEMO_MAX_INDEX }) self.__field_end_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': MEMO_READ_CMD+'=' }) self.__field_command.readfrombuffer(buf) self.__field_start_index=CSVINT(**{ 'default': MEMO_MIN_INDEX }) self.__field_start_index.readfrombuffer(buf) self.__field_end_index=CSVINT(**{ 'terminator': None, 'default': MEMO_MAX_INDEX }) self.__field_end_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': MEMO_READ_CMD+'=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': MEMO_READ_CMD+'=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_start_index(self): try: self.__field_start_index except: self.__field_start_index=CSVINT(**{ 'default': MEMO_MIN_INDEX }) return self.__field_start_index.getvalue() def __setfield_start_index(self, value): if isinstance(value,CSVINT): self.__field_start_index=value else: self.__field_start_index=CSVINT(value,**{ 'default': MEMO_MIN_INDEX }) def __delfield_start_index(self): del self.__field_start_index start_index=property(__getfield_start_index, __setfield_start_index, __delfield_start_index, None) def __getfield_end_index(self): try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None, 'default': MEMO_MAX_INDEX }) return self.__field_end_index.getvalue() def __setfield_end_index(self, value): if isinstance(value,CSVINT): self.__field_end_index=value else: self.__field_end_index=CSVINT(value,**{ 'terminator': None, 'default': MEMO_MAX_INDEX }) def __delfield_end_index(self): del self.__field_end_index end_index=property(__getfield_end_index, __setfield_end_index, __delfield_end_index, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('start_index', self.__field_start_index, None) yield ('end_index', self.__field_end_index, None) class memo_read_resp(BaseProtogenClass): __fields=['command', 'index', 'text'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(memo_read_resp,self).__init__(**dict) if self.__class__ is memo_read_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(memo_read_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(memo_read_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_text.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': ord(' '), 'constant': MEMO_READ_CMD+':' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT() self.__field_index.readfrombuffer(buf) self.__field_text=CSVSTRING(**{ 'terminator': None }) self.__field_text.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': ord(' '), 'constant': MEMO_READ_CMD+':' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,CSVSTRING): self.__field_text=value else: self.__field_text=CSVSTRING(value,**{ 'terminator': None }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) yield ('text', self.__field_text, None) class memo_write_req(BaseProtogenClass): __fields=['command', 'text'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(memo_write_req,self).__init__(**dict) if self.__class__ is memo_write_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(memo_write_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(memo_write_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': MEMO_WRITE_CMD+'=,' }) self.__field_command.writetobuffer(buf) try: self.__field_text except: self.__field_text=CSVSTRING(**{ 'terminator': None }) self.__field_text.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': MEMO_WRITE_CMD+'=,' }) self.__field_command.readfrombuffer(buf) self.__field_text=CSVSTRING(**{ 'terminator': None }) self.__field_text.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': MEMO_WRITE_CMD+'=,' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': MEMO_WRITE_CMD+'=,' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_text(self): try: self.__field_text except: self.__field_text=CSVSTRING(**{ 'terminator': None }) return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,CSVSTRING): self.__field_text=value else: self.__field_text=CSVSTRING(value,**{ 'terminator': None }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('text', self.__field_text, None) class memo_del_req(BaseProtogenClass): __fields=['command', 'index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(memo_del_req,self).__init__(**dict) if self.__class__ is memo_del_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(memo_del_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(memo_del_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': MEMO_WRITE_CMD+'=' }) self.__field_command.writetobuffer(buf) try: self.__field_index except: self.__field_index=CSVINT(**{ 'terminator': None }) self.__field_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': MEMO_WRITE_CMD+'=' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT(**{ 'terminator': None }) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': MEMO_WRITE_CMD+'=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': MEMO_WRITE_CMD+'=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): try: self.__field_index except: self.__field_index=CSVINT(**{ 'terminator': None }) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,**{ 'terminator': None }) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) class sms_format_req(BaseProtogenClass): __fields=['command', 'format'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_format_req,self).__init__(**dict) if self.__class__ is sms_format_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_format_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_format_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': SMS_FORMAT_CMD+'=' }) self.__field_command.writetobuffer(buf) try: self.__field_format except: self.__field_format=CSVINT(**{ 'terminator': None, 'default': SMS_FORMAT_TEXT }) self.__field_format.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': SMS_FORMAT_CMD+'=' }) self.__field_command.readfrombuffer(buf) self.__field_format=CSVINT(**{ 'terminator': None, 'default': SMS_FORMAT_TEXT }) self.__field_format.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': SMS_FORMAT_CMD+'=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': SMS_FORMAT_CMD+'=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_format(self): try: self.__field_format except: self.__field_format=CSVINT(**{ 'terminator': None, 'default': SMS_FORMAT_TEXT }) return self.__field_format.getvalue() def __setfield_format(self, value): if isinstance(value,CSVINT): self.__field_format=value else: self.__field_format=CSVINT(value,**{ 'terminator': None, 'default': SMS_FORMAT_TEXT }) def __delfield_format(self): del self.__field_format format=property(__getfield_format, __setfield_format, __delfield_format, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('format', self.__field_format, None) class sms_memory_select_req(BaseProtogenClass): __fields=['command', 'list_memory'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_memory_select_req,self).__init__(**dict) if self.__class__ is sms_memory_select_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_memory_select_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_memory_select_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': SMS_MEMORY_SELECT_CMD+'=' }) self.__field_command.writetobuffer(buf) try: self.__field_list_memory except: self.__field_list_memory=CSVSTRING(**{ 'terminator': None }) self.__field_list_memory.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': SMS_MEMORY_SELECT_CMD+'=' }) self.__field_command.readfrombuffer(buf) self.__field_list_memory=CSVSTRING(**{ 'terminator': None }) self.__field_list_memory.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': SMS_MEMORY_SELECT_CMD+'=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': SMS_MEMORY_SELECT_CMD+'=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_list_memory(self): try: self.__field_list_memory except: self.__field_list_memory=CSVSTRING(**{ 'terminator': None }) return self.__field_list_memory.getvalue() def __setfield_list_memory(self, value): if isinstance(value,CSVSTRING): self.__field_list_memory=value else: self.__field_list_memory=CSVSTRING(value,**{ 'terminator': None }) def __delfield_list_memory(self): del self.__field_list_memory list_memory=property(__getfield_list_memory, __setfield_list_memory, __delfield_list_memory, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('list_memory', self.__field_list_memory, None) class sms_msg_list_req(BaseProtogenClass): __fields=['command', 'msg_type'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_msg_list_req,self).__init__(**dict) if self.__class__ is sms_msg_list_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_msg_list_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_msg_list_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': SMS_MSG_LIST_CMD+'=' }) self.__field_command.writetobuffer(buf) try: self.__field_msg_type except: self.__field_msg_type=CSVSTRING(**{ 'terminator': None, 'default': SMS_MSG_ALL }) self.__field_msg_type.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': SMS_MSG_LIST_CMD+'=' }) self.__field_command.readfrombuffer(buf) self.__field_msg_type=CSVSTRING(**{ 'terminator': None, 'default': SMS_MSG_ALL }) self.__field_msg_type.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': SMS_MSG_LIST_CMD+'=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': SMS_MSG_LIST_CMD+'=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_msg_type(self): try: self.__field_msg_type except: self.__field_msg_type=CSVSTRING(**{ 'terminator': None, 'default': SMS_MSG_ALL }) return self.__field_msg_type.getvalue() def __setfield_msg_type(self, value): if isinstance(value,CSVSTRING): self.__field_msg_type=value else: self.__field_msg_type=CSVSTRING(value,**{ 'terminator': None, 'default': SMS_MSG_ALL }) def __delfield_msg_type(self): del self.__field_msg_type msg_type=property(__getfield_msg_type, __setfield_msg_type, __delfield_msg_type, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('msg_type', self.__field_msg_type, None) class sms_msg_list_header(BaseProtogenClass): __fields=['command', 'index', 'msg_type', 'address', 'address_name', 'timestamp', 'address_type', 'data_len'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_msg_list_header,self).__init__(**dict) if self.__class__ is sms_msg_list_header: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_msg_list_header,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_msg_list_header,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_msg_type.writetobuffer(buf) self.__field_address.writetobuffer(buf) self.__field_address_name.writetobuffer(buf) self.__field_timestamp.writetobuffer(buf) self.__field_address_type.writetobuffer(buf) self.__field_data_len.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': ord(' '), 'constant': SMS_MSG_LIST_CMD+':' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT() self.__field_index.readfrombuffer(buf) self.__field_msg_type=CSVSTRING() self.__field_msg_type.readfrombuffer(buf) self.__field_address=CSVSTRING() self.__field_address.readfrombuffer(buf) self.__field_address_name=CSVSTRING() self.__field_address_name.readfrombuffer(buf) self.__field_timestamp=SMSDATETIME() self.__field_timestamp.readfrombuffer(buf) self.__field_address_type=CSVINT() self.__field_address_type.readfrombuffer(buf) self.__field_data_len=CSVINT(**{ 'terminator': None }) self.__field_data_len.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': ord(' '), 'constant': SMS_MSG_LIST_CMD+':' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_msg_type(self): return self.__field_msg_type.getvalue() def __setfield_msg_type(self, value): if isinstance(value,CSVSTRING): self.__field_msg_type=value else: self.__field_msg_type=CSVSTRING(value,) def __delfield_msg_type(self): del self.__field_msg_type msg_type=property(__getfield_msg_type, __setfield_msg_type, __delfield_msg_type, None) def __getfield_address(self): return self.__field_address.getvalue() def __setfield_address(self, value): if isinstance(value,CSVSTRING): self.__field_address=value else: self.__field_address=CSVSTRING(value,) def __delfield_address(self): del self.__field_address address=property(__getfield_address, __setfield_address, __delfield_address, None) def __getfield_address_name(self): return self.__field_address_name.getvalue() def __setfield_address_name(self, value): if isinstance(value,CSVSTRING): self.__field_address_name=value else: self.__field_address_name=CSVSTRING(value,) def __delfield_address_name(self): del self.__field_address_name address_name=property(__getfield_address_name, __setfield_address_name, __delfield_address_name, None) def __getfield_timestamp(self): return self.__field_timestamp.getvalue() def __setfield_timestamp(self, value): if isinstance(value,SMSDATETIME): self.__field_timestamp=value else: self.__field_timestamp=SMSDATETIME(value,) def __delfield_timestamp(self): del self.__field_timestamp timestamp=property(__getfield_timestamp, __setfield_timestamp, __delfield_timestamp, None) def __getfield_address_type(self): return self.__field_address_type.getvalue() def __setfield_address_type(self, value): if isinstance(value,CSVINT): self.__field_address_type=value else: self.__field_address_type=CSVINT(value,) def __delfield_address_type(self): del self.__field_address_type address_type=property(__getfield_address_type, __setfield_address_type, __delfield_address_type, None) def __getfield_data_len(self): return self.__field_data_len.getvalue() def __setfield_data_len(self, value): if isinstance(value,CSVINT): self.__field_data_len=value else: self.__field_data_len=CSVINT(value,**{ 'terminator': None }) def __delfield_data_len(self): del self.__field_data_len data_len=property(__getfield_data_len, __setfield_data_len, __delfield_data_len, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) yield ('msg_type', self.__field_msg_type, None) yield ('address', self.__field_address, None) yield ('address_name', self.__field_address_name, None) yield ('timestamp', self.__field_timestamp, None) yield ('address_type', self.__field_address_type, None) yield ('data_len', self.__field_data_len, None) bitpim-1.0.7+dfsg1/src/phones/com_sanyo2300.py0000644001616600161660000000400510521225023017067 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_sanyo2300.py 3635 2006-10-29 22:24:19Z sawecw $ """Talk to the Sanyo VI-2300 cell phone""" # my modules import common import p_sanyo2300 import com_brew import com_phone import com_sanyo import com_sanyomedia import com_sanyonewer import prototypes # Order is like the PM-8200 numbertypetab=( 'cell', 'home', 'office', 'pager', 'fax', 'data', 'none' ) class Phone(com_sanyonewer.Phone): "Talk to the Sanyo VI-2300 cell phone" desc="SCP-2300" FIRST_MEDIA_DIRECTORY=2 LAST_MEDIA_DIRECTORY=3 imagelocations=( # offset, directory #, indexflag, type, maximumentries ) protocolclass=p_sanyo2300 serialsname='vi2300' builtinringtones=( 'None', 'Vibrate', 'Ringer & Voice', '', '', '', '', '', '', 'Tone 1', 'Tone 2', 'Tone 3', 'Tone 4', 'Tone 5', 'Tone 6', 'Tone 7', 'Tone 8', '', '', '', '', '', '', '', '', '', '', '', '', 'Gymnopedie', 'Hungarian Dance No. 5', 'Dies Irae from Requiem', 'The Moment', 'Asian Jingle', 'Habanera', 'Ska Big Band', 'Asian Melody', 'Clair de Lune', 'Kung-fu') calendar_defaultringtone=4 def __init__(self, logtarget, commport): com_sanyonewer.Phone.__init__(self, logtarget, commport) self.mode=self.MODENONE self.numbertypetab=numbertypetab class Profile(com_sanyonewer.Profile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='SANYO' phone_model='SCP-2300/US' WALLPAPER_WIDTH=128 WALLPAPER_HEIGHT=112 OVERSIZE_PERCENTAGE=100 def __init__(self): com_sanyonewer.Profile.__init__(self) self.numbertypetab=numbertypetab bitpim-1.0.7+dfsg1/src/phones/com_samsungspha840_telus.py0000644001616600161660000005700310554051740021451 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Denis Tonn ### Inspiration and code liberally adopted from: ### Stephen A. Wood and Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id$ """Communicate with a Samsung SPH-A840 from Telus Canada""" # Notes: # # This Phone does not cleanly return from BREW mode, so everything is # done through modem mode. # # Groups are handled differently on this phone, so I have hard coded # them. In any event, there is no way to query them as part of a # PBentry. Restoring data to a phone loses group assignments. # at#pbgrw does not modify group names - seems to be ignored in phone # even though it returns OK. # # Cannot query/extract Ringtones so that is hard coded. Built in tones # are ok and can be changed through BitPim. # # Cannot query/extract Wallpaper so builtin values are hardcoded and # everything else is maintained through a write to phone # # Special case email and url fields. If these are blank they MUST have # a quoted space in the write or phone data is corrupted. # # uslot 1 should not be used. I have not done anything in this code to # prevent it, but the phone will complain if you try and edit a # pbentry with uslot = 1. Change the "location" on the phone and it's # fine. # # There is no way of setting (or unsetting) a "secret" pbentry on this # phone. # # Calendar writes fail (ERROR) unless start_time and end_time are the # same. # # Occasionally the phone will have position 0 as the speeddial number, # when it has only one number even when that number isn't in position # 0. # import time import datetime import sha import re import struct import bpcalendar import prototypes import todo import memo import common import commport import p_brew import p_samsungspha840_telus import com_brew import com_phone import com_samsung_packet import helpids numbertypetab=('home','office','cell','pager','fax') ### Phone class parentphone=com_samsung_packet.Phone class Phone(parentphone): "Talk to a Samsung SPH-A840 phone (Telus)" __read_timeout=0.5 __cal_end_datetime_value=None __cal_alarm_values={0: -1, 1: 0, 2: 10, 3: 30, 4: 60 } __cal_max_name_len=32 _cal_max_events_per_day=5 desc="SPH-A840 (Telus)" helpid=helpids.ID_PHONE_SAMSUNGOTHERS protocolclass=p_samsungspha840_telus serialsname='spha840T' builtin_ringtones=( (0, ['Default Tone']), (1, ['Ring %02d'%x for x in range(1, 6)]), (6, ['Melody %02d'%x for x in range(1, 6)]), ) # wallpaper values # 8 = no image # 3 = human 1-20 # 4 = animal 1-15 # 5 = others 1-10 # 2 = gallery - and wallpaper_pic_path points to the file name # 7 = image clips # wallpaper_modifier # selects specific image in human, animal, others # selects offset in file for image clips # must be 0 if no image # value ignored if gallery image builtin_pictures=( (0, ['Human %02d'%x for x in range(1, 21)]), (30, ['Animal %02d'%x for x in range(1, 16)]), (60, ['Other %02d'%x for x in range(1, 11)]), (80, ['On Phone Image']), ) def __init__(self, logtarget, commport): com_samsung_packet.Phone.__init__(self, logtarget, commport) self.numbertypetab=numbertypetab self.mode=self.MODENONE def getfundamentals(self, results): """Gets information fundamental to interoperating with the phone and UI.""" # use a hash of ESN and other stuff (being paranoid) self.log("Retrieving fundamental phone information") self.log("Phone serial number") self.setmode(self.MODEMODEM) results['uniqueserial']=sha.new(self.get_esn()).hexdigest() # getting ringtone-index self.log("Setting up Built in Ring Tone index") results['ringtone-index']=self._get_builtin_index(self.builtin_ringtones) # getting wallpaper-index self.log("Setting up Built in Wallpaper index") results['wallpaper-index']=self.get_wallpaper_index() self.log("Ignoring Corrupted Phone group information") # groups are hard coded since this phone corrupts the read of groups results['groups']=self.read_groups() self.log("Fundamentals retrieved") return results def _get_builtin_index(self, builtin_list): _res={} for _starting_idx,_list in builtin_list: _idx=_starting_idx for _entry in _list: _res[_idx]={ 'name': _entry, 'origin': 'builtin' } _idx+=1 return _res def get_wallpaper_index(self): _res=self._get_builtin_index(self.builtin_pictures) return _res def pblinerepair(self, line): "Extend incomplete lines" nfields=24 # Can we get this from packet def? ncommas=self.countcommas(line) if ncommas<0: # Un terminated quote line+='"' ncommas = -ncommas if nfields-ncommas>1: line=line+","*(nfields-ncommas-1) return line def countcommas(self, line): inquote=False ncommas=0 for c in line: if c == '"': inquote = not inquote elif not inquote and c == ',': ncommas+=1 if inquote: ncommas = -ncommas return ncommas def savewallpapers(self, result): raise NotImplementedError() def saveringtones(self, result): raise NotImplementedError() def getringtones(self, results): raise NotImplementedError() def getwallpapers(self, results): raise NotImplementedError() def read_groups(self): # This phone returns crap for group names which causes an assertion error in the database # because of duplicate "blank" names in the groups. # so to bypass I have set the group names manually g={} g[0]={'name': "Friends"} g[1]={'name': "Business"} g[2]={'name': "Family"} g[3]={'name': "General"} g[4]={'name': "No Group"} return g def savegroups(self, data): """This phone doesn't save or read groups properly so we are skipping the save""" return # # # Called by extractphonebookentry to extract wallpaper from phone entry data # # def _extract_wallpaper(self, res, entry, fundamentals): # wallpaper values # 8 = no image # 3 = human 1-20 res index 1-20 # 4 = animal 1-15 res index 30-45 # 5 = others 1-10 res index 60-70 # 2 = gallery - and wallpaper_pic_path points to the file name # 6 or 7 = image clips - modifier selects offset in image file # 1 = I assume downloaded - never downloaded a wallpaper # gallery and images and downloads are treated separately as index 80 # - save just keeps whatever wallpaper data the phone already has and is not managed by bitpim # wallpaper_modifier # selects specific image in human, animal, others # selects offset in file for image clips # must be 0 if no image # value ignored if gallery image file name _wp_index=fundamentals.get('wallpaper-index', {}) if entry.wallpaper==8: return # no image if entry.wallpaper in (0,1,2,6,7): wallpaper_index=80 # use "on phone" dict entry name in bitpim and recycle current phone data if entry.wallpaper==3: wallpaper_index=entry.wallpaper_modifier if entry.wallpaper==4: wallpaper_index=30+entry.wallpaper_modifier if entry.wallpaper==5: wallpaper_index=60+entry.wallpaper_modifier # get the name out of the dict _wp_name=_wp_index.get(wallpaper_index, {}).get('name', None) if _wp_name: res['wallpapers']=[{ 'wallpaper': _wp_name, 'use': 'call' }] # # # Called by extractphonebookentry to extract ringtone from phone entry data # # def _extract_ringtone(self, res, entry, fundamentals): _rt_index=fundamentals.get('ringtone-index', {}) _rt_name=_rt_index.get(entry.ringtone, {}).get('name', None) if _rt_name: res['ringtones']=[{ 'ringtone': _rt_name, 'use': 'call' }] # # # Called by getphonebook to extract single phone entry data # # def extractphonebookentry(self, entry, fundamentals): res={} res['serials']=[ {'sourcetype': self.serialsname, 'slot': entry.slot, 'sourceuniqueid': fundamentals['uniqueserial']} ] # only one name res['names']=[ {'full': entry.name} ] # only one category cat=fundamentals['groups'].get(entry.group, {'name': "Unassigned"})['name'] if cat!="Unassigned": res['categories']=[ {'category': cat} ] # only one email if len(entry.email): res['emails']=[ {'email': entry.email} ] # only one url if len(entry.url): res['urls']=[ {'url': entry.url} ] res['numbers']=[] secret=0 speeddialtype=entry.speeddial speeddial_has_been_set=0 # need this for fix for bad phonebook data numberindex=0 for type in self.numbertypetab: if len(entry.numbers[numberindex].number): numhash={'number': entry.numbers[numberindex].number, 'type': type } # if entry.numbers[numberindex].secret==1: # secret=1 self.log("ENTRY -speeddial : "+str(speeddialtype)+" -index : "+str(numberindex)+" -uslot : "+str(entry.slot)) # fix possible bad phone data - always force dial entry to first number as safety measure # Otherwise we will lose the uslot data completely if speeddial_has_been_set==0: numhash['speeddial']=entry.uslot speeddial_has_been_set=1 if speeddialtype==numberindex: numhash['speeddial']=entry.uslot speeddial_has_been_set=1 self.log("EXIT -speeddial : "+str(speeddialtype)+" -index : "+str(numberindex)+" -uslot : "+str(entry.slot)) res['numbers'].append(numhash) numberindex+=1 # Field after each number is secret flag. Setting secret on # phone sets secret flag for every defined phone number res['flags']=[ {'secret': secret} ] _args=(res, entry, fundamentals) self._extract_wallpaper(*_args) self._extract_ringtone(*_args) return res # # # Get the phone book # # def getphonebook(self, result): """Read the phonebook data.""" pbook={} self.setmode(self.MODEPHONEBOOK) count=0 req=self.protocolclass.phonebookslotrequest() lastname="" for slot in range(1,self.protocolclass.NUMPHONEBOOKENTRIES+1): req.slot=slot res=self.sendpbcommand(req, self.protocolclass.phonebookslotresponse, fixup=self.pblinerepair) if len(res) > 0: lastname=res[0].entry.name if len(lastname)>0: self.log(`slot`+": "+lastname+" uSlot : "+str(res[0].entry.uslot)) entry=self.extractphonebookentry(res[0].entry, result) pbook[count]=entry count+=1 self.progress(slot, self.protocolclass.NUMPHONEBOOKENTRIES, lastname) result['phonebook']=pbook cats=[] for i in result['groups']: if result['groups'][i]['name']!='Unassigned': cats.append(result['groups'][i]['name']) result['categories']=cats self.setmode(self.MODEMODEM) return pbook # # # Called by savephonebook to create an initial phone book entry # # def makeentry(self, entry, data): e=self.protocolclass.pbentry() for k in entry: # special treatment for lists if k=='numbertypes' or k=='secrets': continue # get a phone index for the ring tone name if k=='ringtone': _rt_index=data.get('ringtone-index', {}) for rgt in _rt_index.keys(): _rt_name=_rt_index.get(rgt, {}).get('name', None) if _rt_name==entry['ringtone']: e.ringtone=rgt # and save it for the phonebook entry continue # get a a pair of indexs for the wallpaper name - wallpaper and wallpaper_modifier elif k=='wallpaper': # setup default values - no image e.wallpaper=8 e.wallpaper_modifier=0 e.wallpaper_file="" # now see if we have anything stored in the database _wp_index=data.get('wallpaper-index', {}) for wpn in _wp_index.keys(): _wp_name=_wp_index.get(wpn, {}).get('name', None) if _wp_name==entry['wallpaper']: # found the name, now convert to a pair of phone indexes if wpn<30: # built in Human type, modifier is wpn e.wallpaper=3 e.wallpaper_modifier=wpn if wpn>29 and wpn<60: # built in Animals type, modifier is wpn-30 e.wallpaper=4 e.wallpaper_modifier=wpn-30 if wpn>59 and wpn<80: # built in Others type, modifier is wpn-60 e.wallpaper=5 e.wallpaper_modifier=wpn-60 if wpn==80: # on phone - special processing in caller code e.wallpaper=8 e.wallpaper_modifier=8 # will not be stored on phone just a sig continue elif k=='numbers': for numberindex in range(self.protocolclass.NUMPHONENUMBERS): enpn=self.protocolclass.phonenumber() e.numbers.append(enpn) for i in range(len(entry[k])): numberindex=entry['numbertypes'][i] e.numbers[numberindex].number=entry[k][i] # e.numbers[numberindex].secret=entry['secrets'][i] e.numbers[numberindex].secret=0 continue # everything else we just set setattr(e, k, entry[k]) return e # # # Save the phone book # # def savephonebook(self, data): "Saves out the phonebook" pb=data['phonebook'] keys=pb.keys() keys.sort() keys=keys[:self.protocolclass.NUMPHONEBOOKENTRIES] self.setmode(self.MODEPHONEBOOK) # 1- Read the existing phonebook so that we cache birthday field and wallpaper file path and stuff # 2- Erase all entries. uslots={} names={} birthdays={} wallpaper_s={} wallpaper_files={} wallpaper_modifiers={} req=self.protocolclass.phonebookslotrequest() self.log('Erasing '+self.desc+' phonebook') progressmax=self.protocolclass.NUMPHONEBOOKENTRIES+len(keys) for slot in range(1,self.protocolclass.NUMPHONEBOOKENTRIES+1): req.slot=slot self.progress(slot,progressmax,"Erasing "+`slot`) try: res=self.sendpbcommand(req,self.protocolclass.phonebookslotresponse, fixup=self.pblinerepair) if len(res) > 0: self.log("Starting capture data for : "+res[0].entry.name) names[slot]=res[0].entry.name birthdays[slot]=res[0].entry.birthday wallpaper_s[slot]=res[0].entry.wallpaper wallpaper_files[slot]=res[0].entry.wallpaper_file wallpaper_modifiers[slot]=res[0].entry.wallpaper_modifier self.log("Captured data for : "+res[0].entry.name) self.log("User Slot from phone: "+str(res[0].entry.uslot)) else: names[slot]="" except: names[slot]="" self.log("Slot "+`slot`+" Empty slot or read failed") reqerase=self.protocolclass.phonebooksloterase() reqerase.slot=slot self.sendpbcommand(reqerase, self.protocolclass.phonebookslotupdateresponse) # Skip this.. the group save commands don't work # self.savegroups(data) for i in range(len(keys)): slot=keys[i] req=self.protocolclass.phonebookslotupdaterequest() req.entry=self.makeentry(pb[slot],data) # groups are not handled through the phonebook data on this phone req.entry.group=self.protocolclass.DEFAULT_GROUP # force a single space into email and url if they are zero length if len(req.entry.email)==0: req.entry.email=" " if len(req.entry.url)==0: req.entry.url=" " # restore the stuff we may not have in the database if names[slot]==req.entry.name: req.entry.birthday=birthdays[slot] # no analogy on bitpim database, just keep with entry # test for internal sig and keep whatever wallpaper is already on the phone if req.entry.wallpaper==self.protocolclass.DEFAULT_WALLPAPER and req.entry.wallpaper_modifier==8: # yup, keep previous stuff req.entry.wallpaper=wallpaper_s[slot] req.entry.wallpaper_file=wallpaper_files[slot] req.entry.wallpaper_modifier=wallpaper_modifiers[slot] # make sure the default wallpaper has no modifier applied if req.entry.wallpaper==self.protocolclass.DEFAULT_WALLPAPER: req.entry.wallpaper_modifier=self.protocolclass.DEFAULT_WALLPAPER_MODIFIER self.log('Writing entry '+`slot`+" - "+req.entry.name+" uSlot : "+str(req.entry.uslot)) self.log('Request: '+str(req)) self.progress(i+self.protocolclass.NUMPHONEBOOKENTRIES,progressmax,"Writing "+req.entry.name) self.sendpbcommand(req, self.protocolclass.phonebookslotupdateresponse) self.progress(progressmax+1,progressmax+1, "Phone book write completed") self.setmode(self.MODEMODEM) return data # # # Get the phone Calendar # # def getcalendar(self, result): entries = {} self.log("Getting calendar entries") self.setmode(self.MODEPHONEBOOK) req=self.protocolclass.eventrequest() cal_cnt=0 for slot in range(self.protocolclass.NUMCALENDAREVENTS): req.slot=slot res=self.sendpbcommand(req,self.protocolclass.eventresponse) if len(res) > 0: self.progress(slot+1, self.protocolclass.NUMCALENDAREVENTS, res[0].eventname) # build a calendar entry entry=bpcalendar.CalendarEntry() # start time date entry.start=res[0].start[0:5] if res[0].end: # valid end time entry.end=res[0].start[0:5] else: entry.end=entry.start # description entry.description=res[0].eventname try: alarm=self.__cal_alarm_values[res[0].alarm] except: alarm=None entry.alarm=alarm # update calendar dict entries[entry.id]=entry cal_cnt += 1 result['calendar']=entries self.setmode(self.MODEMODEM) return result # # # Save the phone Calendar # # def savecalendar(self, dict, merge): self.log("Sending calendar entries") cal=self.process_calendar(dict['calendar']) # testing if __debug__: print 'processed calendar: ', len(cal), ' items' for c in cal: print c.description,':', c.start self.setmode(self.MODEPHONEBOOK) self.log("Saving calendar entries") cal_cnt=0 req=self.protocolclass.eventupdaterequest() l = self.protocolclass.NUMCALENDAREVENTS for c in cal: # Save this entry to phone # self.log('Item %d' %k) # pos req.slot=cal_cnt # start date time # print "Start ",c.start req.start=list(c.start)+[0] # end date time must be the same as start time for this phone write req.end=req.start # time stamp req.timestamp=list(time.localtime(time.time())[0:6]) # print "Alarm ",c.alarm req.alarm=c.alarm # Name, check for bad char & proper length # name=c.description.replace('"', '') name=c.description if len(name)>self.__cal_max_name_len: name=name[:self.__cal_max_name_len] req.eventname=name # and save it self.progress(cal_cnt+1, l, "Updating "+name) self.sendpbcommand(req,self.protocolclass.eventupdateresponse) cal_cnt += 1 # delete the rest of the calendar slots self.log('Deleting unused entries') for k in range(cal_cnt, l): self.progress(k, l, "Deleting entry %d" % k) reqerase=self.protocolclass.eventsloterase() reqerase.slot=k self.sendpbcommand(reqerase, self.protocolclass.eventupdateresponse) self.setmode(self.MODEMODEM) return dict #### Profile class parentprofile=com_samsung_packet.Profile class Profile(parentprofile): deviceclasses=("modem",) BP_Calendar_Version=3 protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='SAMSUNG ELECTRONICS CO.,LTD.' phone_model='SCH-A850 /180' def __init__(self): parentprofile.__init__(self) self.numbertypetab=numbertypetab _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'read', None), # all calendar reading ('calendar', 'write', 'OVERWRITE') # only overwriting calendar ) # fill in the list of ringtone/sound origins on your phone ringtoneorigins=('ringers') #e.g. #ringtoneorigins=('ringers', 'sounds') class Samsung_Calendar: _cal_alarm_values={ 10: 2, 30: 3, 60: 4, -1: 0, 0: 1 } def __init__(self, calendar_entry, new_date=None): self._start=self._end=self._alarm=self._desc=None self._extract_cal_info(calendar_entry, new_date) def _extract_cal_info(self, cal_entry, new_date): s=cal_entry.start if new_date is not None: s=new_date[:3]+s[3:] self._start=s self._end=cal_entry.end self._desc=cal_entry.description # approximate the alarm value self._alarm=0 alarm=cal_entry.alarm _keys=self._cal_alarm_values.keys() _keys.sort() _keys.reverse() for k in _keys: if alarm>=k: self._alarm=self._cal_alarm_values[k] break def __lt__(self, rhs): return self.startrhs.start def __ge__(self, rhs): return self.start>=rhs.start def _get_start(self): return self._start start=property(fget=_get_start) def _get_end(self): return self._end end=property(fget=_get_end) def _get_desc(self): return self._desc description=property(fget=_get_desc) def _get_alarm(self): return self._alarm alarm=property(fget=_get_alarm) bitpim-1.0.7+dfsg1/src/phones/p_lgvx3200.p0000644001616600161660000002560210442561507016230 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lgvx3200.p 3352 2006-06-10 15:20:39Z skyjunky $ %{ """Various descriptions of data specific to LG VX3200""" from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx4400 except as noted below from p_lgvx4400 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=1 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=200 MAXCALENDARDESCRIPTION=38 NUMEMAILS=3 NUMPHONENUMBERS=5 NORINGTONE=0 NOMSGRINGTONE=0 NOWALLPAPER=0 MEMOLENGTH=33 numbertypetab=( 'home', 'home2', 'office', 'office2', 'cell', 'cell2', 'pager', 'fax', 'fax2', 'none', 'vmbox' ) %} PACKET speeddial: 2 UINT {'default': 0xffff} +entry 1 UINT {'default': 0xff} +number PACKET speeddials: * LIST {'length': NUMSPEEDDIALS, 'elementclass': speeddial} +speeddials PACKET pbreadentryresponse: "Results of reading one entry" * pbheader header * pbentry entry PACKET pbupdateentryrequest: * pbheader {'command': 0x04, 'flag': 0x01} +header * pbentry entry PACKET pbappendentryrequest: * pbheader {'command': 0x03, 'flag': 0x01} +header * pbentry entry # All STRINGS have raiseonterminatedread as False since the phone does # occassionally leave out the terminator byte # Note if you change the length of any of these fields, you also # need to modify com_lgvx4400 to give a different truncateat parameter # in the convertphonebooktophone method PACKET pbentry: 4 UINT serial1 2 UINT {'constant': 0x0202} +entrysize 4 UINT serial2 2 UINT entrynumber 23 USTRING {'raiseonunterminatedread': False} name 2 UINT group * LIST {'length': NUMEMAILS} +emails: 49 USTRING {'raiseonunterminatedread': False} email 49 USTRING {'raiseonunterminatedread': False} url 1 UINT ringtone "ringtone index for a call" 1 UINT msgringtone "ringtone index for a text message" 1 BOOL secret * USTRING {'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH} memo 1 UINT wallpaper * LIST {'length': NUMPHONENUMBERS} +numbertypes: 1 UINT numbertype * LIST {'length': NUMPHONENUMBERS} +numbers: 49 USTRING {'raiseonunterminatedread': False} number * UNKNOWN +unknown20c PACKET pbgroup: "A single group" 1 UINT icon 23 USTRING name PACKET pbgroups: "Phonebook groups" * LIST {'elementclass': pbgroup} +groups PACKET indexentry: 2 UINT {'default': 0xffff} +index 40 USTRING {'default': ""} +name PACKET indexfile: "Used for tracking wallpaper and ringtones" # A bit of a silly design again. Entries with an index of 0xffff are # 'blank'. Thus it is possible for numactiveitems and the actual # number of valid entries to be mismatched. P UINT {'constant': 30} maxitems 2 UINT numactiveitems * LIST {'length': self.maxitems, 'elementclass': indexentry, 'createdefault': True} +items ### ### The calendar ### # # The calendar consists of one file listing events and an exception # file that lists exceptions. These exceptions suppress a particular # instance of a repeated event. For example, if you setup something # to happen monthly, but changed the 1st february event, then the # schedule will contain the repeating event, and the 1st feb one, # and the suppresions/exceptions file will point to the repeating # event and suppress the 1st feb. # The phone uses the position within the file to give an event an id PACKET scheduleexception: 4 UINT pos "Refers to event id (position in schedule file) that this suppresses" 1 UINT day 1 UINT month 2 UINT year PACKET scheduleexceptionfile: * LIST {'elementclass': scheduleexception} +items ## The VX3200 has the 4 bytes (unknown) below PACKET scheduleevent: 4 UINT pos "position within file, used as an event id" 4 UINT { 'default': 0 } +unknown 4 LGCALDATE start 4 LGCALDATE end 1 UINT repeat 3 UINT daybitmap "which days a weekly repeat event happens on" 1 UINT alarmminutes "a value of 100 indicates not set" 1 UINT alarmhours "a value of 100 indicates not set" 1 UINT alarmtype 1 UINT { 'default': 0 } +snoozedelay 1 UINT ringtone 39 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False } description PACKET schedulefile: 2 UINT numactiveitems * LIST {'elementclass': scheduleevent} +events # # Call History # PACKET call: 4 GPSDATE GPStime #no. of seconds since 0h 1-6-80, based off local time. 4 UINT unknown1 # different for each call 4 UINT duration #seconds, not certain about length of this field 49 USTRING {'raiseonunterminatedread': False} number 36 USTRING {'raiseonunterminatedread': False} name 1 UINT numberlength # length of phone number 6 UNKNOWN unknown PACKET callhistory: 4 UINT numcalls 1 UINT unknown1 * LIST {'elementclass': call} +calls ### ### SMS ### # # There are 3 types of SMS records, The inbox, outbox and unsent (pending) # Unlike other records in the phone each message is stored in a separate file # All messages are in the 'sms' directory in the root of the phone # Inbox messages are in files called 'inbox000.dat', the number 000 varies for # each message, typically there are no gaps in the numbering, but gaps can appear # if a message is deleted. # Outbox message are named 'outbox000.dat', unsent messages are named 'sf00.dat', # only two digit file name that suggests a max of 100 message for this type. # Messages in the outbox get updated when the message is received by the recipient, # they contain a delivery flag and a delivery time for all the possible 10 recipients. # The vx8100 supports SMS contatination, this allows you to send text messages that are # longer than 160 characters. The format is different for these type of messages, but # it is supported by this implementation. # The vx8100 also allows you to put small graphics, sounds and animations in a message. # This implementation does not support these, if they are contained in a message they # will be ignored and just the text will be shown when you view the message in bitpim. # The text in the the messages is stored in 7-bit characters, so they have # to be unpacked, in concatinated messages and messages with embeded graphics etc. the # format uses the GSM 03.38 specified format, a good example of this can be found at # "http://www.dreamfabric.com/sms/hello.html". # For simple messages less than 161 characters with no graphics the format is simpler, # the 7-bit characters are just packed into memory in the order they appear in the # message. PACKET msg_record: # the first few fields in this packet have something to do with the type of SMS # message contained. EMS and concatinated text are coded differently than a # simple text message 1 UINT unknown1 # 0 1 UINT binary # 0=simple text, 1=binary/concatinated 1 UINT unknown3 # 0=simple text, 1=binary/concatinated 1 UINT unknown4 # 0 1 UINT unknown6 # 2=simple text, 9=binary/concatinated 1 UINT length * LIST {'length': 219} +msg: 1 UINT byte "individual byte of message" PACKET recipient_record: 1 UINT status # 1 when sent, 5 when received, 2 failed to send 4 LGCALDATE timesent 4 LGCALDATE timereceived 12 UNKNOWN unknown 49 USTRING number PACKET sms_saved: 4 UINT outboxmsg 4 UNKNOWN pad # used for GPStime on some phones if self.outboxmsg: * sms_out outbox if not self.outboxmsg: * sms_in inbox PACKET sms_out: 4 UINT index # starting from 1, unique 1 UINT locked # 1=locked 4 LGCALDATE timesent # time the message was sent 21 USTRING subject 1 UINT num_msg_elements # up to 10 * LIST {'elementclass': msg_record, 'length': 1} +messages 39 UNKNOWN unknown 1 UINT priority # 0=normal, 1=high 49 USTRING callback * LIST {'elementclass': recipient_record,'length': 9 } +recipients PACKET SMSINBOXMSGFRAGMENT: * LIST {'length': 181} +msg: # this size could be wrong 1 UINT byte "individual byte of message" PACKET sms_in: 4 UINT msg_index1 4 UINT msg_index2 # equal to the numerical part of the filename eg inbox002.dat 2 UINT unknown2 # set to 0 for simple message and 3 for binary, 9 for page 4 UINT unknown3 # set to 0 6 SMSDATE timesent 3 UINT unknown 1 UINT callback_length # 0 for no callback number 34 USTRING callback 1 UINT sender_length * LIST {'length': 38} +sender: 1 UINT byte "individual byte of senders phone number" 12 DATA unknown4 # set to zeros 4 LGCALDATE lg_time # time the message was sent 3 UNKNOWN unknown1 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 2 UINT unknown5 # zero 1 UINT read # 1 if message has been read, 0 otherwise 1 UINT locked # 1 if the message is locked, 0 otherwise 2 UINT unknown8 # zero 1 UINT priority # 1 if the message is high priority, 0 otherwise 5 DATA flags # message flags, read, priority, locked etc 21 USTRING subject 1 UINT bin_header1 # 0 in simple message 1 if the message contains a binary header 1 UINT bin_header2 # 0 in simple message 9 if the message contains a binary header 2 UINT unknown6 # zeros 2 UINT multipartID # multi-part message ID, used for concatinated messages only 1 UINT bin_header3 # 0 in simple message 2 if the message contains a binary header 1 UNKNOWN unknown2 1 UINT num_msg_elements # max 10 elements (guessing on max here) * LIST {'length': 1 } +msglengths: 1 UINT msglength "lengths of individual messages in septets" * LIST {'length': 1, 'elementclass': SMSINBOXMSGFRAGMENT} +msgs # 181 bytes per message, uncertain on this, no multipart message available # 20 messages, 7-bit ascii for simple text. for binary header # first byte is header length not including the length byte # rest depends on content of header, not known at this time. # text alway follows the header although the format it different # than a simple SMS 44 DATA unknown5 33 USTRING senders_name * DATA unknown6 # ?? inlcudes senders phone number in ascii PACKET sms_quick_text: # the vx4400 has variable length NULL terminated strings null terminated in it's canned messages # file sms/mediacan000.dat, not sure about the max * LIST {} +msgs: * USTRING {} msg # ### ### Text Memos ### PACKET textmemo: 151 USTRING { 'raiseonunterminatedread': False, 'raiseontruncate': False } text PACKET textmemofile: 4 UINT itemcount * LIST { 'elementclass': textmemo } +items bitpim-1.0.7+dfsg1/src/phones/com_samsungschu740.py0000644001616600161660000003623611321251753020247 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_samsungschu740.py 4777 2010-01-07 03:24:27Z djpham $ """Communicate with the Samsung SCH-U740 Phone""" # System Modules import re import wx # BitPim Modules import call_history import common import com_brew import com_samsungscha950 as scha950 import helpids import prototypes import p_samsungschu740 as p_schu740 parentphone=scha950.Phone class Phone(parentphone): desc='SCH-U740' helpid=helpids.ID_PHONE_SAMSUNGSCHU740 protocolclass=p_schu740 serialsname='schu740' ringtone_noring_range='range_tones_preloaded_el_13' ringtone_default_range='range_tones_preloaded_el_01' builtin_ringtones={ 'VZW Default Tone': ringtone_default_range, 'Bell 1': 'range_tones_preloaded_el_02', 'Bell 2': 'range_tones_preloaded_el_03', 'Bell 3': 'range_tones_preloaded_el_04', 'Melody 1': 'range_tones_preloaded_el_05', 'Melody 2': 'range_tones_preloaded_el_06', 'Melody 3': 'range_tones_preloaded_el_07', 'Melody 4': 'range_tones_preloaded_el_08', 'Melody 5': 'range_tones_preloaded_el_09', 'Melody 6': 'range_tones_preloaded_el_10', 'Beep Once': 'range_tones_preloaded_el_11', 'No Ring': ringtone_noring_range, } # can we use Sounds as ringtones? builtin_sounds={} ## builtin_sounds={ ## 'Birthday': 'range_sound_preloaded_el_birthday', ## 'Crowd Roar': 'range_sound_preloaded_el_crowed_roar', ## 'Train': 'range_sound_preloaded_el_train', ## 'Rainforest': 'range_sound_preloaded_el_rainforest', ## 'Clapping': 'range_sound_preloaded_el_clapping', ## # same as ringtones ?? ## 'Sound Beep Once': 'range_sound_preloaded_el_beep_once', ## 'Sound No Ring': 'range_sound_preloaded_el_no_rings', ## } builtin_wallpapers={ 'Preloaded1': 'range_f_wallpaper_preloaded_el_01', 'Preloaded2': 'range_f_wallpaper_preloaded_el_02', 'Preloaded3': 'range_f_wallpaper_preloaded_el_03', 'Preloaded4': 'range_f_wallpaper_preloaded_el_04', 'Preloaded5': 'range_f_wallpaper_preloaded_el_05', 'Preloaded6': 'range_f_wallpaper_preloaded_el_06', 'Preloaded7': 'range_f_wallpaper_preloaded_el_07', 'Preloaded8': 'range_f_wallpaper_preloaded_el_08', } builtin_groups={ 1: 'Business', 2: 'Colleague', 3: 'Family', 4: 'Friends' } my_model='SCH-U740/DM' my_manufacturer='SAMSUNG' detected_model='u740' def __init__(self, logtarget, commport): "Calls all the constructors and sets initial modes" parentphone.__init__(self, logtarget, commport) global PBEntry self.pbentryclass=PBEntry def _get_file_wallpaper_index(self, idx, result, indexfilename, origin): try: _buf=prototypes.buffer(self.getfilecontents(indexfilename)) except (com_brew.BrewNoSuchFileException, com_brew.BrewBadPathnameException, com_brew.BrewFileLockedException, com_brew.BrewAccessDeniedException): return idx except: if __debug__: raise return idx _index_file=self.protocolclass.RPictureIndexFile() _index_file.readfrombuffer(_buf) for _entry in _index_file.items: if _entry.pictype==self.protocolclass.PIC_TYPE_USERS: if _entry.pathname.startswith('/ff/'): _file_name=_entry.pathname[4:] else: _file_name=_entry.pathname result[idx]={ 'name': common.basename(_entry.pathname), 'filename': _file_name, 'origin': origin, } idx+=1 return idx def get_wallpaper_index(self): _res={} _idx=self._get_builtin_wallpaper_index(0, _res) _idx=self._get_file_wallpaper_index(_idx, _res, self.protocolclass.PIC_INDEX_FILE_NAME, 'images') _idx=self._get_file_wallpaper_index(_idx, _res, self.protocolclass.VIDEO_INDEX_FILE_NAME, 'video') return _res # Ringtone stuff def saveringtones(self, fundamentals, merge): """Save ringtones to the phone""" self.log('Writing ringtones to the phone') try: _del_list, _new_list=self._get_del_new_list('ringtone-index', 'ringtone', merge, fundamentals) if __debug__: self.log('Delete list: '+','.join(_del_list)) self.log('New list: '+','.join(_new_list)) self._add_files('ringtone-index', 'ringtone', _new_list, fundamentals) self._update_media_index(self.protocolclass.WRingtoneIndexFile, self.protocolclass.WRingtoneIndexEntry, [self.protocolclass.RT_PATH], self.protocolclass.RT_EXCLUDED_FILES, self.protocolclass.RT_INDEX_FILE_NAME) self._update_media_index(self.protocolclass.WSoundsIndexFile, self.protocolclass.WSoundsIndexEntry, [self.protocolclass.SND_PATH], self.protocolclass.SND_EXCLUDED_FILES, self.protocolclass.SND_INDEX_FILE_NAME) fundamentals['rebootphone']=True except: if __debug__: raise return fundamentals # Wallpaper stuff----------------------------------------------------------- def savewallpapers(self, fundamentals, merge): # send wallpapers to the phone """Save ringtones to the phone""" self.log('Writing wallpapers to the phone') try: _del_list, _new_list=self._get_del_new_list('wallpaper-index', 'wallpapers', merge, fundamentals, ('video',)) if __debug__: self.log('Delete list: '+','.join(_del_list)) self.log('New list: '+','.join(_new_list)) self._add_files('wallpaper-index', 'wallpapers', _new_list, fundamentals) self._update_media_index(self.protocolclass.WPictureIndexFile, self.protocolclass.WPictureIndexEntry, [self.protocolclass.PIC_PATH], self.protocolclass.PIC_EXCLUDED_FILES, self.protocolclass.PIC_INDEX_FILE_NAME) fundamentals['rebootphone']=True except: if __debug__: raise return fundamentals # Phonebook stuff----------------------------------------------------------- def _rescale_and_cache(self, wp, filename, idx, fundamentals): # rescale the wp and add it to the cache dir try: _data=self.getfilecontents(filename, True) _tmpname=common.gettempfilename('tmp') file(_tmpname, 'wb').write(_data) _img=wx.Image(_tmpname) if not _img.Ok(): self.log('Failed to understand image: '+filename) return _img.Rescale(self.protocolclass.PB_WP_CACHE_WIDTH, self.protocolclass.PB_WP_CACHE_HEIGHT) _img.SaveFile(_tmpname, wx.BITMAP_TYPE_JPEG) _newfilename='%(prefix)s/%(index)d.jpg'%\ { 'prefix': self.protocolclass.PB_WP_CACHE_PATH, 'index': idx } _data=file(_tmpname, 'rb').read() self.writefile(_newfilename, _data) return _newfilename except: if __debug__: self.log('Failed to add cache image: '+wp) raise def _add_wp_cache(self, wp, idx, fundamentals): # check to see if it already exists _wp_range=fundamentals.get('wallpaper-range', {}) # add this wallpaper into the cache dir _wp_index=fundamentals.get('wallpaper-index', {}) # look for the file name _filename=self._get_wp_filename(wp, _wp_index) if not _filename: # couldn't find the filename return # copy the image file, rescale, and put it in the cache dir _newfilename=self._rescale_and_cache(wp, _filename, idx, fundamentals) if _newfilename: # rescale successful, update the dict _wp_range[wp]='/ff/'+_newfilename _wp_range[wp]='/ff/%(filename)s|%(wpname)s'%\ { 'filename': _newfilename, 'wpname': common.stripext(wp), } fundamentals['wallpaper-range']=_wp_range # CalendarEntry class----------------------------------------------------------- parentcalendarentry=scha950.CalendarEntry class CalendarEntry(parentcalendarentry): pass # PBEntry class----------------------------------------------------------------- parentpbentry=scha950.PBEntry class PBEntry(parentpbentry): def _build_memo(self, memo): if memo: self.pb.note=memo def _build(self, entry): parentpbentry._build(self, entry) self._build_memo(entry.get('memos', [{}])[0].get('memo', None)) def _extract_wallpaper(self, entry, p_class): if not self.pb.has_wallpaper: return _idx=self.pb.wallpaper.rfind('|')+1 # really ugly hack here !!! _wp=self.pb.wallpaper[_idx:] if not _wp.startswith('Preloaded'): # assume that the name has extension .jpg _wp+='.jpg' entry['wallpapers']=[{ 'wallpaper': _wp, 'use': 'call' }] def _extract_memo(self, entry, p_class): # extract the note portion from the phone into BitPim dict if self.pb.has_note: entry['memos']=[{ 'memo': self.pb.note }] def getvalue(self): _entry=parentpbentry.getvalue(self) self._extract_memo(_entry, self.phone.protocolclass) return _entry # Profile class----------------------------------------------------------------- parentprofile=scha950.Profile class Profile(parentprofile): serialsname=Phone.serialsname WALLPAPER_WIDTH=176 WALLPAPER_HEIGHT=220 # 128x96: outside LCD autodetect_delay=3 usbids=( ( 0x04e8, 0x6640, 2),) deviceclasses=("serial",) BP_Calendar_Version=3 # For phone detection phone_manufacturer=Phone.my_manufacturer phone_model=Phone.my_model # arbitrary ringtone file size limit RINGTONE_LIMITS= { 'MAXSIZE': 100000 } WALLPAPER_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789 ._:" RINGTONE_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789 ._:" # fill in the list of ringtone/sound origins on your phone ringtoneorigins=('ringers', 'sounds') # ringtone origins that are not available for the contact assignment excluded_ringtone_origins=('sounds',) imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video")) # wallpaper origins that are not available for the contact assignment excluded_wallpaper_origins=('video',) # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 220, 'height': 184, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 128, 'height': 96, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", {'width': 128, 'height': 96, 'format': "JPEG"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets def __init__(self): parentprofile.__init__(self) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'read', None), # all calendar reading ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('ringtone', 'read', None), # all ringtone reading ('ringtone', 'write', 'MERGE'), ('wallpaper', 'read', None), # all wallpaper reading ('wallpaper', 'write', 'MERGE'), ('memo', 'read', None), # all memo list reading DJP ('memo', 'write', 'OVERWRITE'), # all memo list writing DJP ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading DJP ) field_color_data={ 'phonebook': { 'name': { 'first': 1, 'middle': 1, 'last': 1, 'full': 1, 'nickname': 0, 'details': 1 }, 'number': { 'type': 5, 'speeddial': 5, 'number': 5, 'details': 5, 'ringtone': False, 'wallpaper': False }, 'email': 2, 'email_details': { 'emailspeeddial': False, 'emailringtone': False, 'emailwallpaper': False }, 'address': { 'type': 0, 'company': 0, 'street': 0, 'street2': 0, 'city': 0, 'state': 0, 'postalcode': 0, 'country': 0, 'details': 0 }, 'url': 0, 'memo': 1, 'category': 1, 'wallpaper': 1, 'ringtone': 1, 'storage': 0, }, 'calendar': { 'description': True, 'location': True, 'allday': False, 'start': True, 'end': True, 'priority': False, 'alarm': True, 'vibrate': True, 'repeat': True, 'memo': False, 'category': False, 'wallpaper': False, 'ringtone': True, }, 'memo': { 'subject': False, 'date': False, 'secret': False, 'category': False, 'memo': True, }, 'todo': { 'summary': False, 'status': False, 'due_date': False, 'percent_complete': False, 'completion_date': False, 'private': False, 'priority': False, 'category': False, 'memo': False, }, } bitpim-1.0.7+dfsg1/src/phones/com_samsungschu750.py0000644001616600161660000004027211321531342020236 0ustar amuamu### BITPIM ### ### Copyright (C) 2009 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_samsungschu750.py 4778 2010-01-08 04:21:54Z djpham $ """Communicate with the Samsung SCH-U750 (Alias 2) Phone""" # System modules # BitPim modules import common import commport import com_brew import com_samsungschu470 as schu470 import p_samsungschu750 as p_schu750 import helpids import prototypes parentphone=schu470.Phone class Phone(com_brew.RealBrewProtocol2, parentphone): desc='SCH-U750' helpid=helpids.ID_PHONE_SAMSUNGSCHU750 protocolclass=p_schu750 serialsname='schu750' my_model='SCH-U750/DM' my_manufacturer='SAMSUNG' detected_model='U750' ringtone_noring_range='range_tones_preloaded_el_22' ringtone_default_range='range_tones_preloaded_el_01' builtin_ringtones={ 'VZW Default Tone': ringtone_default_range, 'Animato': 'range_tones_preloaded_el_02', 'Belly Dance': 'range_tones_preloaded_el_03', 'Chair In The Sky': 'range_tones_preloaded_el_04', 'Classic Bell': 'range_tones_preloaded_el_05', "Club In The 80's": 'range_tones_preloaded_el_06', 'Club Mix': 'range_tones_preloaded_el_07', 'Crossing Tone': 'range_tones_preloaded_el_08', 'Fell Groovy': 'range_tones_preloaded_el_09', 'Fuss & Feathers': 'range_tones_preloaded_el_10', 'Gutta Tone': 'range_tones_preloaded_el_11', 'Hip Hop Guy': 'range_tones_preloaded_el_12', 'Late Night': 'range_tones_preloaded_el_13', 'Mix Master': 'range_tones_preloaded_el_14', 'Popple Tone': 'range_tones_preloaded_el_15', 'Serene Tone': 'range_tones_preloaded_el_16', 'Sonic Boom': 'range_tones_preloaded_el_17', 'Spanish Guitar': 'range_tones_preloaded_el_18', 'The Floor': 'range_tones_preloaded_el_19', 'Trip To Heaven': 'range_tones_preloaded_el_20', 'Beep Once': 'range_tones_preloaded_el_21', 'No Ring': ringtone_noring_range, } builtin_sounds={ 'Clapping': 'range_sound_preloaded_el_clapping', 'Crowd Roar': 'range_sound_preloaded_el_crowed_roar', 'Happy Birthday': 'range_sound_preloaded_el_birthday', 'Rainforest': 'range_sound_preloaded_el_rainforest', 'Train': 'range_sound_preloaded_el_train', # same as ringtones ?? 'Sound Beep Once': 'range_sound_preloaded_el_beep_once', 'Sound No Ring': 'range_sound_preloaded_el_no_rings', } # We can't use bult-in wallpapers for contact ID builtin_wallpapers={} def __init__(self, logtarget, commport): "Calls all the constructors and sets initial modes" parentphone.__init__(self, logtarget, commport) global PBEntry, CalendarEntry self.pbentryclass=PBEntry self.calendarclass=CalendarEntry # ringtone stuff----------------------------------------------------------- def _get_file_ringtone_index(self, idx, result, index_file_name, index_file_class, origin): try: _buf=prototypes.buffer(self.getfilecontents(index_file_name)) except (com_brew.BrewNoSuchFileException, com_brew.BrewBadPathnameException, com_brew.BrewFileLockedException, com_brew.BrewAccessDeniedException): return idx except: if __debug__: raise return idx _index_file=index_file_class() _index_file.readfrombuffer(_buf) for _entry in _index_file.items: if _entry.pathname.startswith('/ff/'): _file_name=_entry.pathname[4:] else: _file_name=_entry.pathname if not _file_name.startswith(self.protocolclass.SND_PRELOADED_PREFIX): result[idx]= { 'name': common.basename(_entry.pathname), 'filename': _file_name, 'origin': origin, } idx+=1 return idx def get_ringtone_index(self): _res={} _idx=self._get_builtin_ringtone_index(0, _res) # Cannot get any of the ringtones (ringers) index # get the index of Sounds items _idx=self._get_file_ringtone_index(_idx, _res, self.protocolclass.SND_INDEX_FILE_NAME, self.protocolclass.RSoundsIndexFile, 'sounds') return _res def _append_sounds_index_file(self, new_files_list): """Update the Sounds index file with new/added files""" self.log("Appending Sounds index file") # read in existing index entries from index file _old_snd=self.readobject(self.protocolclass.SND_INDEX_FILE_NAME, self.protocolclass.RSoundsIndexFile) _new_snd=self.protocolclass.WSoundsIndexFile() for _v in _old_snd.items: _new_snd.items.append(self.protocolclass.WSoundsIndexEntry(name='', pathname=_v.pathname[4:], eor='|'+_v.misc+'\x0A')) # now append new entries for _f in new_files_list: _new_snd.items.append(self.protocolclass.WSoundsIndexEntry(name='', pathname=self.protocolclass.SND_PATH+'/'+_f)) # and write it out self.writeobject(self.protocolclass.SND_INDEX_FILE_NAME, _new_snd) def saveringtones(self, fundamentals, merge): """Save ringtones to the phone""" self.log('Writing ringtones to the phone') try: _del_list, _new_list=self._get_del_new_list('ringtone-index', 'ringtone', merge, fundamentals) if __debug__: self.log('Delete list: '+','.join(_del_list)) self.log('New list: '+','.join(_new_list)) _added_files_list=self._add_files('ringtone-index', 'ringtone', _new_list, fundamentals) if _added_files_list: self._append_sounds_index_file(_added_files_list) fundamentals['rebootphone']=True except: if __debug__: raise return fundamentals # SMS Stuff---------------------------------------------------------------- def _build_locked_field(self, entry, buf): _locked=self.protocolclass.UINT(sizeinbytes=2) _locked.readfrombuffer(buf) entry.locked=bool(_locked.getvalue() & 0x100) # Phone Detection----------------------------------------------------------- def is_mode_brew(self): # Borrowed from the VX4400 req=self.protocolclass.testing0crequest() respc=self.protocolclass.data for baud in 0, 38400, 115200: if baud: if not self.comm.setbaudrate(baud): continue try: self.sendbrewcommand(req, respc, callsetmode=False) return True except com_phone.modeignoreerrortypes: pass return False @classmethod def detectphone(_, coms, likely_ports, res, _module, _log): if not likely_ports: # cannot detect any likely ports return None for port in likely_ports: if not res.has_key(port): res[port]={ 'mode_modem': None, 'mode_brew': None, 'manufacturer': None, 'model': None, 'firmware_version': None, 'esn': None, 'firmwareresponse': None } try: if res[port]['model']: # been found, not much we can do now continue p=_module.Phone(_log, commport.CommConnection(_log, port, timeout=1)) # Force to check for BREW if not res[port]['mode_brew']: res[port]['mode_brew']=p.is_mode_brew() if res[port]['mode_brew']: p.check_my_phone(res[port]) p.comm.close() except: if __debug__: raise # CalendarEntry class----------------------------------------------------------- parentcalendarentry=schu470.CalendarEntry class CalendarEntry(parentcalendarentry): """Transient class to handle calendar data being sent to, retrieved from the phone. """ # routines to build phone data from BitPim dict def _build(self, entry): # populate this object with data from BitPim self.cal.titlelen=len(entry.desc_loc) self.cal.title=entry.desc_loc self.cal.start=entry.start self.cal.end=entry.end self.cal.repeat=self._build_repeat(entry) self.cal.alarm=self._build_alarm(entry) self.cal.alert=self._build_alert(entry) self.cal.duration=self._build_duration(entry) self.cal.timezone=self._build_tz() self.cal.creationtime=self.phone._time_now() _ringtone=self.phone.get_ringtone_range(entry.ringtone, self.fundamentals) self.cal.ringtonelen=len(_ringtone) self.cal.ringtone=_ringtone # routines to extract data from the phone into BitPim dict def _extract_end(self): return self.cal.end[:5] # PBEntry class----------------------------------------------------------------- parentpbentry=schu470.PBEntry class PBEntry(parentpbentry): _IM_Type_String={ 1: 'AIM', 2: 'Yahoo!', 3: 'WL Messenger' } _IM_Type_Index={ 'AIM': 1, 'Yahoo!': 2, 'WL Messenger': 3 } # routines to convert BitPim dict into phone's data def _build_address(self, address): if address: self.pb.address=address def _build_IM(self, im): if im: self.pb.im_type=self._IM_Type_Index.get(im.get('type', ''), 1) self.pb.im_name=im.get('username', '') def _build(self, entry): parentpbentry._build(self, entry) self._build_address(entry.get('addresses', [{}])[0]) self._build_IM(entry.get('ims', [{}])[0]) # routines to convert phone's data into BitPim dict def _extract_group(self, entry, p_class): if not self.pb.has_group: # no group specified return _groups=self.fundamentals.get('groups', {}) _res=[] # each group is turned on/off via each bit of the _groups value for _index, _item in _groups.items(): if (1<<_index)&self.pb.group: _res.append({ 'category': _item['name'] }) if _res: entry['categories']=_res def _extract_wallpaper(self, entry, p_class): if not self.pb.has_cached_wp: return # really ugly hack here !!! _wp=self.pb.cached_wp.split('|')[1] # BitPim can only deal with non-builtin wallpapers if not _wp.startswith('Preloaded'): # assume that the name has extension .jpg entry['wallpapers']=[{ 'wallpaper': _wp+'.jpg', 'use': 'call' }] def _extract_IM(self, entry, p_class): if self.pb.has_im_name: entry['ims']=[{ 'type': self._IM_Type_String.get(self.pb.im_type, ''), 'username': self.pb.im_name }] def _extract_address(self, entry, p_class): if self.pb.has_address: entry['addresses']=[self.pb.address] def getvalue(self): _entry=parentpbentry.getvalue(self) self._extract_IM(_entry, self.phone.protocolclass) self._extract_address(_entry, self.phone.protocolclass) return _entry # Profile class----------------------------------------------------------------- parentprofile=schu470.Profile class Profile(parentprofile): serialsname=Phone.serialsname WALLPAPER_WIDTH=240 WALLPAPER_HEIGHT=274 # 128x96: outside LCD autodetect_delay=3 usbids=( ( 0x04e8, 0x6640, 2),) deviceclasses=("serial",) BP_Calendar_Version=3 # For phone detection phone_manufacturer=Phone.my_manufacturer phone_model=Phone.my_model # arbitrary ringtone file size limit RINGTONE_LIMITS= { 'MAXSIZE': 100000 } WALLPAPER_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789 ._:" RINGTONE_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789 ._:" # fill in the list of ringtone/sound origins on your phone ringtoneorigins=('sounds',) # ringtone origins that are not available for the contact assignment excluded_ringtone_origins=() imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video")) # wallpaper origins that are not available for the contact assignment excluded_wallpaper_origins=('video',) # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 240, 'height': 274, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 80, 'height': 106, 'format': "JPEG"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets def __init__(self): parentprofile.__init__(self) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'read', None), # all calendar reading ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('ringtone', 'read', None), # all ringtone reading ('ringtone', 'write', 'MERGE'), ('wallpaper', 'read', None), # all wallpaper reading ('wallpaper', 'write', 'MERGE'), ('memo', 'read', None), # all memo list reading DJP ('memo', 'write', 'OVERWRITE'), # all memo list writing DJP ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading DJP ) field_color_data={ 'phonebook': { 'name': { 'first': 1, 'middle': 1, 'last': 1, 'full': 1, 'nickname': 0, 'details': 1 }, 'number': { 'type': 5, 'speeddial': 5, 'number': 5, 'details': 5, 'ringtone': False, 'wallpaper': False }, 'email': 2, 'email_details': { 'emailspeeddial': False, 'emailringtone': False, 'emailwallpaper': False }, 'address': { 'type': 0, 'company': 0, 'street': 1, 'street2': 0, 'city': 1, 'state': 1, 'postalcode': 1, 'country': 1, 'details': 1 }, 'url': 0, 'memo': 1, 'category': 1, 'wallpaper': 1, 'ringtone': 1, 'storage': 0, 'im': 1, }, 'calendar': { 'description': True, 'location': True, 'allday': False, 'start': True, 'end': True, 'priority': False, 'alarm': True, 'vibrate': True, 'repeat': True, 'memo': False, 'category': False, 'wallpaper': False, 'ringtone': True, }, 'memo': { 'subject': False, 'date': False, 'secret': False, 'category': False, 'memo': True, }, 'todo': { 'summary': False, 'status': False, 'due_date': False, 'percent_complete': False, 'completion_date': False, 'private': False, 'priority': False, 'category': False, 'memo': False, }, } bitpim-1.0.7+dfsg1/src/phones/p_moto.py0000644001616600161660000041074410733033631016112 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Motorola phones""" from prototypes import * from prototypes_moto import * from p_etsi import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb # charset constant CHARSET_8859_1="8859-1" CHARSET_8859_A="8859-A" CHARSET_8859_C="8859-C" CHARSET_8859_H="8859-H" CHARSET_ASCII="ASCII" CHARSET_GSM="GSM" CHARSET_KSC5601="KSC5601" CHARSET_UCS2="UCS2" CHARSET_UTF8="UTF8" # phone mode constant MODE_MODEM=0 MODE_PHONEBOOK=2 MODE_OBEX=22 # phonebook constant PB_DIALED='DC' PB_MISSED='MC' PB_MAIN='AD' PB_INCOMING='RC' PB_QUICKDIAL='QD' LOCAL_TYPE_LOCAL=129 LOCAL_TYPE_INTERNATIONAL=145 LOCAL_TYPE_UNKNOWN=128 NUMBER_TYPE_WORK=0 NUMBER_TYPE_HOME=1 NUMBER_TYPE_MAIN=2 NUMBER_TYPE_MOBILE=3 NUMBER_TYPE_FAX=4 NUMBER_TYPE_PAGER=5 NUMBER_TYPE_EMAIL=6 NUMBER_TYPE_MAILING_LIST=7 NUMBER_TYPE_MOBILE2=8 NUMBER_TYPE_EMAIL2=9 NUMBER_TYPE=frozenset([NUMBER_TYPE_WORK, NUMBER_TYPE_HOME, NUMBER_TYPE_MAIN, NUMBER_TYPE_MOBILE, NUMBER_TYPE_FAX, NUMBER_TYPE_PAGER, NUMBER_TYPE_MOBILE2]) EMAIL_TYPE=frozenset([NUMBER_TYPE_EMAIL, NUMBER_TYPE_EMAIL2]) NUMBER_TYPE_NAME={ NUMBER_TYPE_WORK: 'office', NUMBER_TYPE_HOME: 'home', NUMBER_TYPE_MAIN: 'main', NUMBER_TYPE_MOBILE: 'cell', NUMBER_TYPE_FAX: 'fax', NUMBER_TYPE_PAGER: 'pager', NUMBER_TYPE_MOBILE2: 'cell', } NUMBER_TYPE_CODE={ 'office': NUMBER_TYPE_WORK, 'home': NUMBER_TYPE_HOME, 'main': NUMBER_TYPE_MAIN, 'cell': NUMBER_TYPE_MOBILE, 'fax': NUMBER_TYPE_FAX, 'pager': NUMBER_TYPE_PAGER } PB_MAX_NUMBER_LEN=32 PB_MAX_NAME_LEN=24 PB_MAX_EMAIL_LEN=48 PB_TOTAL_ENTRIES=500 PB_RANGE=xrange(1,PB_TOTAL_ENTRIES+1) PB_TOTAL_MISSED_CALLS=60 PB_TOTAL_DIALED_CALLS=60 PB_TOTAL_RECEIVED_CALLS=60 PB_TOTAL_GROUP=30 PB_GROUP_RANGE=xrange(1, PB_TOTAL_GROUP+1) PB_GROUP_NAME_LEN=24 RT_BUILTIN=0x0C RT_CUSTOM=0x0D RT_INDEX_FILE='/MyToneDB.db' # SMS Stuff SMS_INBOX="IM" SMS_OUTBOX="OM" SMS_INFO="BM" SMS_DRAFTS="DM" SMS_COMBINE="MT" SMS_REC_UNREAD="REC UNREAD" SMS_REC_READ="REC READ" SMS_STO_UNSENT="STO UNSENT" SMS_STO_SENT="STO SENT" SMS_ALL="ALL" SMS_HEADER_ONLY="HEADER ONLY" SMS_INDEX_RANGE=xrange(1, 353) class esnrequest(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(esnrequest,self).__init__(**dict) if self.__class__ is esnrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(esnrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(esnrequest,kwargs) if len(args): dict2={ 'quotechar': None, 'terminator': None, 'default': '+CGSN' } dict2.update(kwargs) kwargs=dict2 self.__field_command=CSVSTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+CGSN' }) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+CGSN' }) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+CGSN' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None, 'default': '+CGSN' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class esnresponse(BaseProtogenClass): __fields=['command', 'esnlabel', 'esn'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(esnresponse,self).__init__(**dict) if self.__class__ is esnresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(esnresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(esnresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_esnlabel.writetobuffer(buf) self.__field_esn.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': ord(' '), 'default': '+CGSN:' }) self.__field_command.readfrombuffer(buf) self.__field_esnlabel=DATA(**{'sizeinbytes': 3}) self.__field_esnlabel.readfrombuffer(buf) self.__field_esn=CSVSTRING(**{ 'quotechar': None, 'terminator': None }) self.__field_esn.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': ord(' '), 'default': '+CGSN:' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_esnlabel(self): return self.__field_esnlabel.getvalue() def __setfield_esnlabel(self, value): if isinstance(value,DATA): self.__field_esnlabel=value else: self.__field_esnlabel=DATA(value,**{'sizeinbytes': 3}) def __delfield_esnlabel(self): del self.__field_esnlabel esnlabel=property(__getfield_esnlabel, __setfield_esnlabel, __delfield_esnlabel, None) def __getfield_esn(self): return self.__field_esn.getvalue() def __setfield_esn(self, value): if isinstance(value,CSVSTRING): self.__field_esn=value else: self.__field_esn=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None }) def __delfield_esn(self): del self.__field_esn esn=property(__getfield_esn, __setfield_esn, __delfield_esn, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('esnlabel', self.__field_esnlabel, None) yield ('esn', self.__field_esn, None) class string_resp(BaseProtogenClass): __fields=['command', 'value'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(string_resp,self).__init__(**dict) if self.__class__ is string_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(string_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(string_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_value.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': ord(' ') }) self.__field_command.readfrombuffer(buf) self.__field_value=CSVSTRING(**{ 'quotechar': None, 'terminator': None }) self.__field_value.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': ord(' ') }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_value(self): return self.__field_value.getvalue() def __setfield_value(self, value): if isinstance(value,CSVSTRING): self.__field_value=value else: self.__field_value=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None }) def __delfield_value(self): del self.__field_value value=property(__getfield_value, __setfield_value, __delfield_value, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('value', self.__field_value, None) class manufacturer_req(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(manufacturer_req,self).__init__(**dict) if self.__class__ is manufacturer_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(manufacturer_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(manufacturer_req,kwargs) if len(args): dict2={ 'quotechar': None, 'terminator': None, 'default': '+GMI' } dict2.update(kwargs) kwargs=dict2 self.__field_command=CSVSTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+GMI' }) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+GMI' }) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+GMI' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None, 'default': '+GMI' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class model_req(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(model_req,self).__init__(**dict) if self.__class__ is model_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(model_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(model_req,kwargs) if len(args): dict2={ 'quotechar': None, 'terminator': None, 'default': '+GMM' } dict2.update(kwargs) kwargs=dict2 self.__field_command=CSVSTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+GMM' }) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+GMM' }) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+GMM' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None, 'default': '+GMM' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class number_req(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(number_req,self).__init__(**dict) if self.__class__ is number_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(number_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(number_req,kwargs) if len(args): dict2={ 'quotechar': None, 'terminator': None, 'default': '+CNUM' } dict2.update(kwargs) kwargs=dict2 self.__field_command=CSVSTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+CNUM' }) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+CNUM' }) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+CNUM' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None, 'default': '+CNUM' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class firmware_req(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(firmware_req,self).__init__(**dict) if self.__class__ is firmware_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(firmware_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(firmware_req,kwargs) if len(args): dict2={ 'quotechar': None, 'terminator': None, 'default': '+GMR' } dict2.update(kwargs) kwargs=dict2 self.__field_command=CSVSTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+GMR' }) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+GMR' }) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+GMR' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None, 'default': '+GMR' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class signal_req(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(signal_req,self).__init__(**dict) if self.__class__ is signal_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(signal_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(signal_req,kwargs) if len(args): dict2={ 'quotechar': None, 'terminator': None, 'default': '+CSQ?' } dict2.update(kwargs) kwargs=dict2 self.__field_command=CSVSTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+CSQ?' }) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+CSQ?' }) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+CSQ?' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None, 'default': '+CSQ?' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class signal_resp(BaseProtogenClass): __fields=['command', 'rssi', 'ber'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(signal_resp,self).__init__(**dict) if self.__class__ is signal_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(signal_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(signal_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_rssi.writetobuffer(buf) self.__field_ber.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': ord(' ') }) self.__field_command.readfrombuffer(buf) self.__field_rssi=CSVINT() self.__field_rssi.readfrombuffer(buf) self.__field_ber=CSVINT(**{ 'terminator': None }) self.__field_ber.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': ord(' ') }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_rssi(self): return self.__field_rssi.getvalue() def __setfield_rssi(self, value): if isinstance(value,CSVINT): self.__field_rssi=value else: self.__field_rssi=CSVINT(value,) def __delfield_rssi(self): del self.__field_rssi rssi=property(__getfield_rssi, __setfield_rssi, __delfield_rssi, None) def __getfield_ber(self): return self.__field_ber.getvalue() def __setfield_ber(self, value): if isinstance(value,CSVINT): self.__field_ber=value else: self.__field_ber=CSVINT(value,**{ 'terminator': None }) def __delfield_ber(self): del self.__field_ber ber=property(__getfield_ber, __setfield_ber, __delfield_ber, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('rssi', self.__field_rssi, None) yield ('ber', self.__field_ber, None) class battery_req(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(battery_req,self).__init__(**dict) if self.__class__ is battery_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(battery_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(battery_req,kwargs) if len(args): dict2={ 'quotechar': None, 'terminator': None, 'default': '+CBC' } dict2.update(kwargs) kwargs=dict2 self.__field_command=CSVSTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+CBC' }) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+CBC' }) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+CBC' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None, 'default': '+CBC' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class battery_resp(BaseProtogenClass): __fields=['command', 'status', 'level'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(battery_resp,self).__init__(**dict) if self.__class__ is battery_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(battery_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(battery_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_level.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': ord(' ') }) self.__field_command.readfrombuffer(buf) self.__field_status=CSVINT() self.__field_status.readfrombuffer(buf) self.__field_level=CSVINT(**{ 'terminator': None }) self.__field_level.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': ord(' ') }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,CSVINT): self.__field_status=value else: self.__field_status=CSVINT(value,) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_level(self): return self.__field_level.getvalue() def __setfield_level(self, value): if isinstance(value,CSVINT): self.__field_level=value else: self.__field_level=CSVINT(value,**{ 'terminator': None }) def __delfield_level(self): del self.__field_level level=property(__getfield_level, __setfield_level, __delfield_level, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('status', self.__field_status, None) yield ('level', self.__field_level, None) class modereq(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(modereq,self).__init__(**dict) if self.__class__ is modereq: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(modereq,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(modereq,kwargs) if len(args): dict2={ 'quotechar': None, 'terminator': None, 'default': '+MODE?' } dict2.update(kwargs) kwargs=dict2 self.__field_command=CSVSTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MODE?' }) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MODE?' }) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MODE?' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None, 'default': '+MODE?' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class moderesp(BaseProtogenClass): __fields=['command', 'mode'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(moderesp,self).__init__(**dict) if self.__class__ is moderesp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(moderesp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(moderesp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_mode.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': ord(' '), 'default': '+MODE:' }) self.__field_command.readfrombuffer(buf) self.__field_mode=CSVINT(**{ 'terminator': None }) self.__field_mode.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': ord(' '), 'default': '+MODE:' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_mode(self): return self.__field_mode.getvalue() def __setfield_mode(self, value): if isinstance(value,CSVINT): self.__field_mode=value else: self.__field_mode=CSVINT(value,**{ 'terminator': None }) def __delfield_mode(self): del self.__field_mode mode=property(__getfield_mode, __setfield_mode, __delfield_mode, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('mode', self.__field_mode, None) class modeset(BaseProtogenClass): __fields=['command', 'mode'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(modeset,self).__init__(**dict) if self.__class__ is modeset: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(modeset,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(modeset,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MODE=' }) self.__field_command.writetobuffer(buf) try: self.__field_mode except: self.__field_mode=CSVINT(**{ 'terminator': None, 'default': 0 }) self.__field_mode.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MODE=' }) self.__field_command.readfrombuffer(buf) self.__field_mode=CSVINT(**{ 'terminator': None, 'default': 0 }) self.__field_mode.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MODE=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None, 'default': '+MODE=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_mode(self): try: self.__field_mode except: self.__field_mode=CSVINT(**{ 'terminator': None, 'default': 0 }) return self.__field_mode.getvalue() def __setfield_mode(self, value): if isinstance(value,CSVINT): self.__field_mode=value else: self.__field_mode=CSVINT(value,**{ 'terminator': None, 'default': 0 }) def __delfield_mode(self): del self.__field_mode mode=property(__getfield_mode, __setfield_mode, __delfield_mode, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('mode', self.__field_mode, None) class charset_set_req(BaseProtogenClass): __fields=['command', 'charset'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(charset_set_req,self).__init__(**dict) if self.__class__ is charset_set_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(charset_set_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(charset_set_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+CSCS=' }) self.__field_command.writetobuffer(buf) try: self.__field_charset except: self.__field_charset=CSVSTRING(**{ 'terminator': None }) self.__field_charset.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+CSCS=' }) self.__field_command.readfrombuffer(buf) self.__field_charset=CSVSTRING(**{ 'terminator': None }) self.__field_charset.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+CSCS=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None, 'default': '+CSCS=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_charset(self): try: self.__field_charset except: self.__field_charset=CSVSTRING(**{ 'terminator': None }) return self.__field_charset.getvalue() def __setfield_charset(self, value): if isinstance(value,CSVSTRING): self.__field_charset=value else: self.__field_charset=CSVSTRING(value,**{ 'terminator': None }) def __delfield_charset(self): del self.__field_charset charset=property(__getfield_charset, __setfield_charset, __delfield_charset, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('charset', self.__field_charset, None) class featurereq(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(featurereq,self).__init__(**dict) if self.__class__ is featurereq: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(featurereq,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(featurereq,kwargs) if len(args): dict2={ 'quotechar': None, 'terminator': None, 'default': '+MAID?' } dict2.update(kwargs) kwargs=dict2 self.__field_command=CSVSTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MAID?' }) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MAID?' }) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MAID?' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None, 'default': '+MAID?' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class featureresp(BaseProtogenClass): __fields=['command', 'has_phonebook', 'has_datebook', 'has_sms', 'has_mo_sms', 'has_email', 'has_multi_phonebooks', 'has_sim', 'has_shared_phonebook', 'has_multi_dest_addr', 'has_ringtone_id', 'has_voicetag', 'dunno'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(featureresp,self).__init__(**dict) if self.__class__ is featureresp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(featureresp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(featureresp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_has_phonebook.writetobuffer(buf) self.__field_has_datebook.writetobuffer(buf) self.__field_has_sms.writetobuffer(buf) self.__field_has_mo_sms.writetobuffer(buf) self.__field_has_email.writetobuffer(buf) self.__field_has_multi_phonebooks.writetobuffer(buf) self.__field_has_sim.writetobuffer(buf) self.__field_has_shared_phonebook.writetobuffer(buf) self.__field_has_multi_dest_addr.writetobuffer(buf) self.__field_has_ringtone_id.writetobuffer(buf) self.__field_has_voicetag.writetobuffer(buf) try: self.__field_dunno except: self.__field_dunno=CSVSTRING(**{ 'quotechar': None, 'terminator': None }) self.__field_dunno.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': ord(' '), 'default': '+MAID:' }) self.__field_command.readfrombuffer(buf) self.__field_has_phonebook=CSVINT() self.__field_has_phonebook.readfrombuffer(buf) self.__field_has_datebook=CSVINT() self.__field_has_datebook.readfrombuffer(buf) self.__field_has_sms=CSVINT() self.__field_has_sms.readfrombuffer(buf) self.__field_has_mo_sms=CSVINT() self.__field_has_mo_sms.readfrombuffer(buf) self.__field_has_email=CSVINT() self.__field_has_email.readfrombuffer(buf) self.__field_has_multi_phonebooks=CSVINT() self.__field_has_multi_phonebooks.readfrombuffer(buf) self.__field_has_sim=CSVINT() self.__field_has_sim.readfrombuffer(buf) self.__field_has_shared_phonebook=CSVINT() self.__field_has_shared_phonebook.readfrombuffer(buf) self.__field_has_multi_dest_addr=CSVINT() self.__field_has_multi_dest_addr.readfrombuffer(buf) self.__field_has_ringtone_id=CSVINT() self.__field_has_ringtone_id.readfrombuffer(buf) self.__field_has_voicetag=CSVINT() self.__field_has_voicetag.readfrombuffer(buf) self.__field_dunno=CSVSTRING(**{ 'quotechar': None, 'terminator': None }) self.__field_dunno.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': ord(' '), 'default': '+MAID:' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_has_phonebook(self): return self.__field_has_phonebook.getvalue() def __setfield_has_phonebook(self, value): if isinstance(value,CSVINT): self.__field_has_phonebook=value else: self.__field_has_phonebook=CSVINT(value,) def __delfield_has_phonebook(self): del self.__field_has_phonebook has_phonebook=property(__getfield_has_phonebook, __setfield_has_phonebook, __delfield_has_phonebook, None) def __getfield_has_datebook(self): return self.__field_has_datebook.getvalue() def __setfield_has_datebook(self, value): if isinstance(value,CSVINT): self.__field_has_datebook=value else: self.__field_has_datebook=CSVINT(value,) def __delfield_has_datebook(self): del self.__field_has_datebook has_datebook=property(__getfield_has_datebook, __setfield_has_datebook, __delfield_has_datebook, None) def __getfield_has_sms(self): return self.__field_has_sms.getvalue() def __setfield_has_sms(self, value): if isinstance(value,CSVINT): self.__field_has_sms=value else: self.__field_has_sms=CSVINT(value,) def __delfield_has_sms(self): del self.__field_has_sms has_sms=property(__getfield_has_sms, __setfield_has_sms, __delfield_has_sms, None) def __getfield_has_mo_sms(self): return self.__field_has_mo_sms.getvalue() def __setfield_has_mo_sms(self, value): if isinstance(value,CSVINT): self.__field_has_mo_sms=value else: self.__field_has_mo_sms=CSVINT(value,) def __delfield_has_mo_sms(self): del self.__field_has_mo_sms has_mo_sms=property(__getfield_has_mo_sms, __setfield_has_mo_sms, __delfield_has_mo_sms, None) def __getfield_has_email(self): return self.__field_has_email.getvalue() def __setfield_has_email(self, value): if isinstance(value,CSVINT): self.__field_has_email=value else: self.__field_has_email=CSVINT(value,) def __delfield_has_email(self): del self.__field_has_email has_email=property(__getfield_has_email, __setfield_has_email, __delfield_has_email, None) def __getfield_has_multi_phonebooks(self): return self.__field_has_multi_phonebooks.getvalue() def __setfield_has_multi_phonebooks(self, value): if isinstance(value,CSVINT): self.__field_has_multi_phonebooks=value else: self.__field_has_multi_phonebooks=CSVINT(value,) def __delfield_has_multi_phonebooks(self): del self.__field_has_multi_phonebooks has_multi_phonebooks=property(__getfield_has_multi_phonebooks, __setfield_has_multi_phonebooks, __delfield_has_multi_phonebooks, None) def __getfield_has_sim(self): return self.__field_has_sim.getvalue() def __setfield_has_sim(self, value): if isinstance(value,CSVINT): self.__field_has_sim=value else: self.__field_has_sim=CSVINT(value,) def __delfield_has_sim(self): del self.__field_has_sim has_sim=property(__getfield_has_sim, __setfield_has_sim, __delfield_has_sim, None) def __getfield_has_shared_phonebook(self): return self.__field_has_shared_phonebook.getvalue() def __setfield_has_shared_phonebook(self, value): if isinstance(value,CSVINT): self.__field_has_shared_phonebook=value else: self.__field_has_shared_phonebook=CSVINT(value,) def __delfield_has_shared_phonebook(self): del self.__field_has_shared_phonebook has_shared_phonebook=property(__getfield_has_shared_phonebook, __setfield_has_shared_phonebook, __delfield_has_shared_phonebook, None) def __getfield_has_multi_dest_addr(self): return self.__field_has_multi_dest_addr.getvalue() def __setfield_has_multi_dest_addr(self, value): if isinstance(value,CSVINT): self.__field_has_multi_dest_addr=value else: self.__field_has_multi_dest_addr=CSVINT(value,) def __delfield_has_multi_dest_addr(self): del self.__field_has_multi_dest_addr has_multi_dest_addr=property(__getfield_has_multi_dest_addr, __setfield_has_multi_dest_addr, __delfield_has_multi_dest_addr, None) def __getfield_has_ringtone_id(self): return self.__field_has_ringtone_id.getvalue() def __setfield_has_ringtone_id(self, value): if isinstance(value,CSVINT): self.__field_has_ringtone_id=value else: self.__field_has_ringtone_id=CSVINT(value,) def __delfield_has_ringtone_id(self): del self.__field_has_ringtone_id has_ringtone_id=property(__getfield_has_ringtone_id, __setfield_has_ringtone_id, __delfield_has_ringtone_id, None) def __getfield_has_voicetag(self): return self.__field_has_voicetag.getvalue() def __setfield_has_voicetag(self, value): if isinstance(value,CSVINT): self.__field_has_voicetag=value else: self.__field_has_voicetag=CSVINT(value,) def __delfield_has_voicetag(self): del self.__field_has_voicetag has_voicetag=property(__getfield_has_voicetag, __setfield_has_voicetag, __delfield_has_voicetag, None) def __getfield_dunno(self): try: self.__field_dunno except: self.__field_dunno=CSVSTRING(**{ 'quotechar': None, 'terminator': None }) return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,CSVSTRING): self.__field_dunno=value else: self.__field_dunno=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None }) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('has_phonebook', self.__field_has_phonebook, None) yield ('has_datebook', self.__field_has_datebook, None) yield ('has_sms', self.__field_has_sms, None) yield ('has_mo_sms', self.__field_has_mo_sms, None) yield ('has_email', self.__field_has_email, None) yield ('has_multi_phonebooks', self.__field_has_multi_phonebooks, None) yield ('has_sim', self.__field_has_sim, None) yield ('has_shared_phonebook', self.__field_has_shared_phonebook, None) yield ('has_multi_dest_addr', self.__field_has_multi_dest_addr, None) yield ('has_ringtone_id', self.__field_has_ringtone_id, None) yield ('has_voicetag', self.__field_has_voicetag, None) yield ('dunno', self.__field_dunno, None) class select_phonebook_req(BaseProtogenClass): __fields=['command', 'pb_type'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(select_phonebook_req,self).__init__(**dict) if self.__class__ is select_phonebook_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(select_phonebook_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(select_phonebook_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+CPBS=' }) self.__field_command.writetobuffer(buf) try: self.__field_pb_type except: self.__field_pb_type=CSVSTRING(**{ 'terminator': None, 'default': PB_MAIN }) self.__field_pb_type.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+CPBS=' }) self.__field_command.readfrombuffer(buf) self.__field_pb_type=CSVSTRING(**{ 'terminator': None, 'default': PB_MAIN }) self.__field_pb_type.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+CPBS=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None, 'default': '+CPBS=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_pb_type(self): try: self.__field_pb_type except: self.__field_pb_type=CSVSTRING(**{ 'terminator': None, 'default': PB_MAIN }) return self.__field_pb_type.getvalue() def __setfield_pb_type(self, value): if isinstance(value,CSVSTRING): self.__field_pb_type=value else: self.__field_pb_type=CSVSTRING(value,**{ 'terminator': None, 'default': PB_MAIN }) def __delfield_pb_type(self): del self.__field_pb_type pb_type=property(__getfield_pb_type, __setfield_pb_type, __delfield_pb_type, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('pb_type', self.__field_pb_type, None) class read_pb_simple_req(BaseProtogenClass): __fields=['command', 'start_index', 'end_index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(read_pb_simple_req,self).__init__(**dict) if self.__class__ is read_pb_simple_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(read_pb_simple_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(read_pb_simple_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+CPBR=' }) self.__field_command.writetobuffer(buf) try: self.__field_start_index except: self.__field_start_index=CSVINT(**{ 'default': 1 }) self.__field_start_index.writetobuffer(buf) try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None, 'default': self.start_index }) self.__field_end_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+CPBR=' }) self.__field_command.readfrombuffer(buf) self.__field_start_index=CSVINT(**{ 'default': 1 }) self.__field_start_index.readfrombuffer(buf) self.__field_end_index=CSVINT(**{ 'terminator': None, 'default': self.start_index }) self.__field_end_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+CPBR=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None, 'default': '+CPBR=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_start_index(self): try: self.__field_start_index except: self.__field_start_index=CSVINT(**{ 'default': 1 }) return self.__field_start_index.getvalue() def __setfield_start_index(self, value): if isinstance(value,CSVINT): self.__field_start_index=value else: self.__field_start_index=CSVINT(value,**{ 'default': 1 }) def __delfield_start_index(self): del self.__field_start_index start_index=property(__getfield_start_index, __setfield_start_index, __delfield_start_index, None) def __getfield_end_index(self): try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None, 'default': self.start_index }) return self.__field_end_index.getvalue() def __setfield_end_index(self, value): if isinstance(value,CSVINT): self.__field_end_index=value else: self.__field_end_index=CSVINT(value,**{ 'terminator': None, 'default': self.start_index }) def __delfield_end_index(self): del self.__field_end_index end_index=property(__getfield_end_index, __setfield_end_index, __delfield_end_index, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('start_index', self.__field_start_index, None) yield ('end_index', self.__field_end_index, None) class read_pb_simple_resp(BaseProtogenClass): __fields=['command', 'index', 'number', 'local_type', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(read_pb_simple_resp,self).__init__(**dict) if self.__class__ is read_pb_simple_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(read_pb_simple_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(read_pb_simple_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': ord(' '), 'default': '+CPBR:' }) self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_local_type.writetobuffer(buf) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': ord(' '), 'default': '+CPBR:' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT() self.__field_index.readfrombuffer(buf) self.__field_number=CSVSTRING() self.__field_number.readfrombuffer(buf) self.__field_local_type=CSVINT() self.__field_local_type.readfrombuffer(buf) self.__field_name=CSVSTRING(**{ 'terminator': None }) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': ord(' '), 'default': '+CPBR:' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': ord(' '), 'default': '+CPBR:' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,CSVSTRING): self.__field_number=value else: self.__field_number=CSVSTRING(value,) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_local_type(self): return self.__field_local_type.getvalue() def __setfield_local_type(self, value): if isinstance(value,CSVINT): self.__field_local_type=value else: self.__field_local_type=CSVINT(value,) def __delfield_local_type(self): del self.__field_local_type local_type=property(__getfield_local_type, __setfield_local_type, __delfield_local_type, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,CSVSTRING): self.__field_name=value else: self.__field_name=CSVSTRING(value,**{ 'terminator': None }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) yield ('number', self.__field_number, None) yield ('local_type', self.__field_local_type, None) yield ('name', self.__field_name, None) class read_pb_req(BaseProtogenClass): __fields=['command', 'start_index', 'end_index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(read_pb_req,self).__init__(**dict) if self.__class__ is read_pb_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(read_pb_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(read_pb_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MPBR=' }) self.__field_command.writetobuffer(buf) try: self.__field_start_index except: self.__field_start_index=CSVINT(**{ 'default': 1 }) self.__field_start_index.writetobuffer(buf) try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None, 'default': self.start_index }) self.__field_end_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MPBR=' }) self.__field_command.readfrombuffer(buf) self.__field_start_index=CSVINT(**{ 'default': 1 }) self.__field_start_index.readfrombuffer(buf) self.__field_end_index=CSVINT(**{ 'terminator': None, 'default': self.start_index }) self.__field_end_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MPBR=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None, 'default': '+MPBR=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_start_index(self): try: self.__field_start_index except: self.__field_start_index=CSVINT(**{ 'default': 1 }) return self.__field_start_index.getvalue() def __setfield_start_index(self, value): if isinstance(value,CSVINT): self.__field_start_index=value else: self.__field_start_index=CSVINT(value,**{ 'default': 1 }) def __delfield_start_index(self): del self.__field_start_index start_index=property(__getfield_start_index, __setfield_start_index, __delfield_start_index, None) def __getfield_end_index(self): try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None, 'default': self.start_index }) return self.__field_end_index.getvalue() def __setfield_end_index(self, value): if isinstance(value,CSVINT): self.__field_end_index=value else: self.__field_end_index=CSVINT(value,**{ 'terminator': None, 'default': self.start_index }) def __delfield_end_index(self): del self.__field_end_index end_index=property(__getfield_end_index, __setfield_end_index, __delfield_end_index, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('start_index', self.__field_start_index, None) yield ('end_index', self.__field_end_index, None) class read_pb_resp(BaseProtogenClass): __fields=['command', 'index', 'number', 'local_type', 'name', 'number_type', 'voice_tag', 'ringtone', 'backlight', 'is_primary', 'group', 'icon', 'first_last_enabled', 'subfield_index', 'picture_name', 'dunno'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(read_pb_resp,self).__init__(**dict) if self.__class__ is read_pb_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(read_pb_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(read_pb_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_local_type.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_number_type.writetobuffer(buf) self.__field_voice_tag.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_backlight.writetobuffer(buf) self.__field_is_primary.writetobuffer(buf) self.__field_group.writetobuffer(buf) self.__field_icon.writetobuffer(buf) self.__field_first_last_enabled.writetobuffer(buf) self.__field_subfield_index.writetobuffer(buf) self.__field_picture_name.writetobuffer(buf) self.__field_dunno.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': ord(' '), 'default': '+MPBR:' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT() self.__field_index.readfrombuffer(buf) self.__field_number=CSVSTRING() self.__field_number.readfrombuffer(buf) self.__field_local_type=CSVINT() self.__field_local_type.readfrombuffer(buf) self.__field_name=CSVSTRING() self.__field_name.readfrombuffer(buf) self.__field_number_type=CSVINT() self.__field_number_type.readfrombuffer(buf) self.__field_voice_tag=CSVINT() self.__field_voice_tag.readfrombuffer(buf) self.__field_ringtone=CSVINT() self.__field_ringtone.readfrombuffer(buf) self.__field_backlight=CSVINT() self.__field_backlight.readfrombuffer(buf) self.__field_is_primary=CSVINT() self.__field_is_primary.readfrombuffer(buf) self.__field_group=CSVINT() self.__field_group.readfrombuffer(buf) self.__field_icon=CSVINT() self.__field_icon.readfrombuffer(buf) self.__field_first_last_enabled=CSVINT() self.__field_first_last_enabled.readfrombuffer(buf) self.__field_subfield_index=CSVINT() self.__field_subfield_index.readfrombuffer(buf) self.__field_picture_name=CSVSTRING() self.__field_picture_name.readfrombuffer(buf) self.__field_dunno=CSVSTRING(**{ 'quotechar': None, 'terminator': None }) self.__field_dunno.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': ord(' '), 'default': '+MPBR:' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,CSVSTRING): self.__field_number=value else: self.__field_number=CSVSTRING(value,) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_local_type(self): return self.__field_local_type.getvalue() def __setfield_local_type(self, value): if isinstance(value,CSVINT): self.__field_local_type=value else: self.__field_local_type=CSVINT(value,) def __delfield_local_type(self): del self.__field_local_type local_type=property(__getfield_local_type, __setfield_local_type, __delfield_local_type, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,CSVSTRING): self.__field_name=value else: self.__field_name=CSVSTRING(value,) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_number_type(self): return self.__field_number_type.getvalue() def __setfield_number_type(self, value): if isinstance(value,CSVINT): self.__field_number_type=value else: self.__field_number_type=CSVINT(value,) def __delfield_number_type(self): del self.__field_number_type number_type=property(__getfield_number_type, __setfield_number_type, __delfield_number_type, None) def __getfield_voice_tag(self): return self.__field_voice_tag.getvalue() def __setfield_voice_tag(self, value): if isinstance(value,CSVINT): self.__field_voice_tag=value else: self.__field_voice_tag=CSVINT(value,) def __delfield_voice_tag(self): del self.__field_voice_tag voice_tag=property(__getfield_voice_tag, __setfield_voice_tag, __delfield_voice_tag, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,CSVINT): self.__field_ringtone=value else: self.__field_ringtone=CSVINT(value,) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_backlight(self): return self.__field_backlight.getvalue() def __setfield_backlight(self, value): if isinstance(value,CSVINT): self.__field_backlight=value else: self.__field_backlight=CSVINT(value,) def __delfield_backlight(self): del self.__field_backlight backlight=property(__getfield_backlight, __setfield_backlight, __delfield_backlight, None) def __getfield_is_primary(self): return self.__field_is_primary.getvalue() def __setfield_is_primary(self, value): if isinstance(value,CSVINT): self.__field_is_primary=value else: self.__field_is_primary=CSVINT(value,) def __delfield_is_primary(self): del self.__field_is_primary is_primary=property(__getfield_is_primary, __setfield_is_primary, __delfield_is_primary, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,CSVINT): self.__field_group=value else: self.__field_group=CSVINT(value,) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_icon(self): return self.__field_icon.getvalue() def __setfield_icon(self, value): if isinstance(value,CSVINT): self.__field_icon=value else: self.__field_icon=CSVINT(value,) def __delfield_icon(self): del self.__field_icon icon=property(__getfield_icon, __setfield_icon, __delfield_icon, None) def __getfield_first_last_enabled(self): return self.__field_first_last_enabled.getvalue() def __setfield_first_last_enabled(self, value): if isinstance(value,CSVINT): self.__field_first_last_enabled=value else: self.__field_first_last_enabled=CSVINT(value,) def __delfield_first_last_enabled(self): del self.__field_first_last_enabled first_last_enabled=property(__getfield_first_last_enabled, __setfield_first_last_enabled, __delfield_first_last_enabled, None) def __getfield_subfield_index(self): return self.__field_subfield_index.getvalue() def __setfield_subfield_index(self, value): if isinstance(value,CSVINT): self.__field_subfield_index=value else: self.__field_subfield_index=CSVINT(value,) def __delfield_subfield_index(self): del self.__field_subfield_index subfield_index=property(__getfield_subfield_index, __setfield_subfield_index, __delfield_subfield_index, None) def __getfield_picture_name(self): return self.__field_picture_name.getvalue() def __setfield_picture_name(self, value): if isinstance(value,CSVSTRING): self.__field_picture_name=value else: self.__field_picture_name=CSVSTRING(value,) def __delfield_picture_name(self): del self.__field_picture_name picture_name=property(__getfield_picture_name, __setfield_picture_name, __delfield_picture_name, None) def __getfield_dunno(self): return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,CSVSTRING): self.__field_dunno=value else: self.__field_dunno=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None }) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) yield ('number', self.__field_number, None) yield ('local_type', self.__field_local_type, None) yield ('name', self.__field_name, None) yield ('number_type', self.__field_number_type, None) yield ('voice_tag', self.__field_voice_tag, None) yield ('ringtone', self.__field_ringtone, None) yield ('backlight', self.__field_backlight, None) yield ('is_primary', self.__field_is_primary, None) yield ('group', self.__field_group, None) yield ('icon', self.__field_icon, None) yield ('first_last_enabled', self.__field_first_last_enabled, None) yield ('subfield_index', self.__field_subfield_index, None) yield ('picture_name', self.__field_picture_name, None) yield ('dunno', self.__field_dunno, None) class write_pb_req(BaseProtogenClass): __fields=['command', 'index', 'number', 'local_type', 'name', 'number_type', 'voice_tag', 'ringtone', 'backlight', 'is_primary', 'group', 'icon', 'first_last_enabled', 'subfield_index', 'picture_name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(write_pb_req,self).__init__(**dict) if self.__class__ is write_pb_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(write_pb_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(write_pb_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MPBW=' }) self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_number.writetobuffer(buf) try: self.__field_local_type except: self.__field_local_type=CSVINT(**{ 'default': LOCAL_TYPE_LOCAL }) self.__field_local_type.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_number_type.writetobuffer(buf) try: self.__field_voice_tag except: self.__field_voice_tag=CSVINT(**{ 'default': 0 }) self.__field_voice_tag.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=CSVINT(**{ 'default': 255 }) self.__field_ringtone.writetobuffer(buf) try: self.__field_backlight except: self.__field_backlight=CSVINT(**{ 'default': 0 }) self.__field_backlight.writetobuffer(buf) try: self.__field_is_primary except: self.__field_is_primary=CSVINT(**{ 'default': 0 }) self.__field_is_primary.writetobuffer(buf) try: self.__field_group except: self.__field_group=CSVINT(**{ 'default': 1 }) self.__field_group.writetobuffer(buf) try: self.__field_icon except: self.__field_icon=CSVINT(**{ 'default': 255 }) self.__field_icon.writetobuffer(buf) try: self.__field_first_last_enabled except: self.__field_first_last_enabled=CSVINT(**{ 'default': 255 }) self.__field_first_last_enabled.writetobuffer(buf) try: self.__field_subfield_index except: self.__field_subfield_index=CSVINT(**{ 'default': 0 }) self.__field_subfield_index.writetobuffer(buf) try: self.__field_picture_name except: self.__field_picture_name=CSVSTRING(**{ 'terminator': None, 'default': "" }) self.__field_picture_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MPBW=' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT() self.__field_index.readfrombuffer(buf) self.__field_number=CSVSTRING(**{ 'maxsizeinbytes': PB_MAX_NUMBER_LEN, 'raiseontruncate': False }) self.__field_number.readfrombuffer(buf) self.__field_local_type=CSVINT(**{ 'default': LOCAL_TYPE_LOCAL }) self.__field_local_type.readfrombuffer(buf) self.__field_name=CSVSTRING(**{ 'maxsizeinbytes': PB_MAX_NAME_LEN, 'raiseontruncate': False }) self.__field_name.readfrombuffer(buf) self.__field_number_type=CSVINT() self.__field_number_type.readfrombuffer(buf) self.__field_voice_tag=CSVINT(**{ 'default': 0 }) self.__field_voice_tag.readfrombuffer(buf) self.__field_ringtone=CSVINT(**{ 'default': 255 }) self.__field_ringtone.readfrombuffer(buf) self.__field_backlight=CSVINT(**{ 'default': 0 }) self.__field_backlight.readfrombuffer(buf) self.__field_is_primary=CSVINT(**{ 'default': 0 }) self.__field_is_primary.readfrombuffer(buf) self.__field_group=CSVINT(**{ 'default': 1 }) self.__field_group.readfrombuffer(buf) self.__field_icon=CSVINT(**{ 'default': 255 }) self.__field_icon.readfrombuffer(buf) self.__field_first_last_enabled=CSVINT(**{ 'default': 255 }) self.__field_first_last_enabled.readfrombuffer(buf) self.__field_subfield_index=CSVINT(**{ 'default': 0 }) self.__field_subfield_index.readfrombuffer(buf) self.__field_picture_name=CSVSTRING(**{ 'terminator': None, 'default': "" }) self.__field_picture_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MPBW=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None, 'default': '+MPBW=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,CSVSTRING): self.__field_number=value else: self.__field_number=CSVSTRING(value,**{ 'maxsizeinbytes': PB_MAX_NUMBER_LEN, 'raiseontruncate': False }) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_local_type(self): try: self.__field_local_type except: self.__field_local_type=CSVINT(**{ 'default': LOCAL_TYPE_LOCAL }) return self.__field_local_type.getvalue() def __setfield_local_type(self, value): if isinstance(value,CSVINT): self.__field_local_type=value else: self.__field_local_type=CSVINT(value,**{ 'default': LOCAL_TYPE_LOCAL }) def __delfield_local_type(self): del self.__field_local_type local_type=property(__getfield_local_type, __setfield_local_type, __delfield_local_type, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,CSVSTRING): self.__field_name=value else: self.__field_name=CSVSTRING(value,**{ 'maxsizeinbytes': PB_MAX_NAME_LEN, 'raiseontruncate': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_number_type(self): return self.__field_number_type.getvalue() def __setfield_number_type(self, value): if isinstance(value,CSVINT): self.__field_number_type=value else: self.__field_number_type=CSVINT(value,) def __delfield_number_type(self): del self.__field_number_type number_type=property(__getfield_number_type, __setfield_number_type, __delfield_number_type, None) def __getfield_voice_tag(self): try: self.__field_voice_tag except: self.__field_voice_tag=CSVINT(**{ 'default': 0 }) return self.__field_voice_tag.getvalue() def __setfield_voice_tag(self, value): if isinstance(value,CSVINT): self.__field_voice_tag=value else: self.__field_voice_tag=CSVINT(value,**{ 'default': 0 }) def __delfield_voice_tag(self): del self.__field_voice_tag voice_tag=property(__getfield_voice_tag, __setfield_voice_tag, __delfield_voice_tag, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=CSVINT(**{ 'default': 255 }) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,CSVINT): self.__field_ringtone=value else: self.__field_ringtone=CSVINT(value,**{ 'default': 255 }) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_backlight(self): try: self.__field_backlight except: self.__field_backlight=CSVINT(**{ 'default': 0 }) return self.__field_backlight.getvalue() def __setfield_backlight(self, value): if isinstance(value,CSVINT): self.__field_backlight=value else: self.__field_backlight=CSVINT(value,**{ 'default': 0 }) def __delfield_backlight(self): del self.__field_backlight backlight=property(__getfield_backlight, __setfield_backlight, __delfield_backlight, None) def __getfield_is_primary(self): try: self.__field_is_primary except: self.__field_is_primary=CSVINT(**{ 'default': 0 }) return self.__field_is_primary.getvalue() def __setfield_is_primary(self, value): if isinstance(value,CSVINT): self.__field_is_primary=value else: self.__field_is_primary=CSVINT(value,**{ 'default': 0 }) def __delfield_is_primary(self): del self.__field_is_primary is_primary=property(__getfield_is_primary, __setfield_is_primary, __delfield_is_primary, None) def __getfield_group(self): try: self.__field_group except: self.__field_group=CSVINT(**{ 'default': 1 }) return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,CSVINT): self.__field_group=value else: self.__field_group=CSVINT(value,**{ 'default': 1 }) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_icon(self): try: self.__field_icon except: self.__field_icon=CSVINT(**{ 'default': 255 }) return self.__field_icon.getvalue() def __setfield_icon(self, value): if isinstance(value,CSVINT): self.__field_icon=value else: self.__field_icon=CSVINT(value,**{ 'default': 255 }) def __delfield_icon(self): del self.__field_icon icon=property(__getfield_icon, __setfield_icon, __delfield_icon, None) def __getfield_first_last_enabled(self): try: self.__field_first_last_enabled except: self.__field_first_last_enabled=CSVINT(**{ 'default': 255 }) return self.__field_first_last_enabled.getvalue() def __setfield_first_last_enabled(self, value): if isinstance(value,CSVINT): self.__field_first_last_enabled=value else: self.__field_first_last_enabled=CSVINT(value,**{ 'default': 255 }) def __delfield_first_last_enabled(self): del self.__field_first_last_enabled first_last_enabled=property(__getfield_first_last_enabled, __setfield_first_last_enabled, __delfield_first_last_enabled, None) def __getfield_subfield_index(self): try: self.__field_subfield_index except: self.__field_subfield_index=CSVINT(**{ 'default': 0 }) return self.__field_subfield_index.getvalue() def __setfield_subfield_index(self, value): if isinstance(value,CSVINT): self.__field_subfield_index=value else: self.__field_subfield_index=CSVINT(value,**{ 'default': 0 }) def __delfield_subfield_index(self): del self.__field_subfield_index subfield_index=property(__getfield_subfield_index, __setfield_subfield_index, __delfield_subfield_index, None) def __getfield_picture_name(self): try: self.__field_picture_name except: self.__field_picture_name=CSVSTRING(**{ 'terminator': None, 'default': "" }) return self.__field_picture_name.getvalue() def __setfield_picture_name(self, value): if isinstance(value,CSVSTRING): self.__field_picture_name=value else: self.__field_picture_name=CSVSTRING(value,**{ 'terminator': None, 'default': "" }) def __delfield_picture_name(self): del self.__field_picture_name picture_name=property(__getfield_picture_name, __setfield_picture_name, __delfield_picture_name, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) yield ('number', self.__field_number, None) yield ('local_type', self.__field_local_type, None) yield ('name', self.__field_name, None) yield ('number_type', self.__field_number_type, None) yield ('voice_tag', self.__field_voice_tag, None) yield ('ringtone', self.__field_ringtone, None) yield ('backlight', self.__field_backlight, None) yield ('is_primary', self.__field_is_primary, None) yield ('group', self.__field_group, None) yield ('icon', self.__field_icon, None) yield ('first_last_enabled', self.__field_first_last_enabled, None) yield ('subfield_index', self.__field_subfield_index, None) yield ('picture_name', self.__field_picture_name, None) class del_pb_req(BaseProtogenClass): __fields=['command', 'index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(del_pb_req,self).__init__(**dict) if self.__class__ is del_pb_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(del_pb_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(del_pb_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MPBW=' }) self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MPBW=' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT(**{ 'terminator': None }) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MPBW=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None, 'default': '+MPBW=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,**{ 'terminator': None }) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) class sms_sel_req(BaseProtogenClass): __fields=['command', 'mem1', 'mem2', 'mem3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_sel_req,self).__init__(**dict) if self.__class__ is sms_sel_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_sel_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_sel_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+CPMS=' }) self.__field_command.writetobuffer(buf) try: self.__field_mem1 except: self.__field_mem1=CSVSTRING(**{ 'default': SMS_COMBINE }) self.__field_mem1.writetobuffer(buf) try: self.__field_mem2 except: self.__field_mem2=CSVSTRING(**{ 'default': SMS_OUTBOX }) self.__field_mem2.writetobuffer(buf) try: self.__field_mem3 except: self.__field_mem3=CSVSTRING(**{ 'terminator': None, 'default': SMS_INBOX }) self.__field_mem3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+CPMS=' }) self.__field_command.readfrombuffer(buf) self.__field_mem1=CSVSTRING(**{ 'default': SMS_COMBINE }) self.__field_mem1.readfrombuffer(buf) self.__field_mem2=CSVSTRING(**{ 'default': SMS_OUTBOX }) self.__field_mem2.readfrombuffer(buf) self.__field_mem3=CSVSTRING(**{ 'terminator': None, 'default': SMS_INBOX }) self.__field_mem3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+CPMS=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None, 'default': '+CPMS=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_mem1(self): try: self.__field_mem1 except: self.__field_mem1=CSVSTRING(**{ 'default': SMS_COMBINE }) return self.__field_mem1.getvalue() def __setfield_mem1(self, value): if isinstance(value,CSVSTRING): self.__field_mem1=value else: self.__field_mem1=CSVSTRING(value,**{ 'default': SMS_COMBINE }) def __delfield_mem1(self): del self.__field_mem1 mem1=property(__getfield_mem1, __setfield_mem1, __delfield_mem1, None) def __getfield_mem2(self): try: self.__field_mem2 except: self.__field_mem2=CSVSTRING(**{ 'default': SMS_OUTBOX }) return self.__field_mem2.getvalue() def __setfield_mem2(self, value): if isinstance(value,CSVSTRING): self.__field_mem2=value else: self.__field_mem2=CSVSTRING(value,**{ 'default': SMS_OUTBOX }) def __delfield_mem2(self): del self.__field_mem2 mem2=property(__getfield_mem2, __setfield_mem2, __delfield_mem2, None) def __getfield_mem3(self): try: self.__field_mem3 except: self.__field_mem3=CSVSTRING(**{ 'terminator': None, 'default': SMS_INBOX }) return self.__field_mem3.getvalue() def __setfield_mem3(self, value): if isinstance(value,CSVSTRING): self.__field_mem3=value else: self.__field_mem3=CSVSTRING(value,**{ 'terminator': None, 'default': SMS_INBOX }) def __delfield_mem3(self): del self.__field_mem3 mem3=property(__getfield_mem3, __setfield_mem3, __delfield_mem3, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('mem1', self.__field_mem1, None) yield ('mem2', self.__field_mem2, None) yield ('mem3', self.__field_mem3, None) class sms_m_read_resp(BaseProtogenClass): __fields=['command', 'has_date', 'date_terminated', 'sms_type', 'sms_addr', 'sms_date', 'sms_date', 'sms_addr'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_m_read_resp,self).__init__(**dict) if self.__class__ is sms_m_read_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_m_read_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_m_read_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_has_date except: self.__field_has_date=BOOL(**{ 'default': True }) try: self.__field_date_terminated except: self.__field_date_terminated=BOOL(**{ 'default': False }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_sms_type.writetobuffer(buf) if self.has_date: self.__field_sms_addr.writetobuffer(buf) if self.date_terminated: self.__field_sms_date.writetobuffer(buf) else: self.__field_sms_date.writetobuffer(buf) else: self.__field_sms_addr.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': ord(' '), 'default': '+MMGR:' }) self.__field_command.readfrombuffer(buf) self.__field_sms_type=CSVSTRING() self.__field_sms_type.readfrombuffer(buf) if self.has_date: self.__field_sms_addr=CSVSTRING(**{ 'quotechar': None }) self.__field_sms_addr.readfrombuffer(buf) if self.date_terminated: self.__field_sms_date=M_SMSDATETIME() self.__field_sms_date.readfrombuffer(buf) else: self.__field_sms_date=M_SMSDATETIME(**{ 'quotechar': None, 'terminator': None }) self.__field_sms_date.readfrombuffer(buf) else: self.__field_sms_addr=CSVSTRING(**{ 'terminator': None, 'quotechar': None }) self.__field_sms_addr.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': ord(' '), 'default': '+MMGR:' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_has_date(self): try: self.__field_has_date except: self.__field_has_date=BOOL(**{ 'default': True }) return self.__field_has_date.getvalue() def __setfield_has_date(self, value): if isinstance(value,BOOL): self.__field_has_date=value else: self.__field_has_date=BOOL(value,**{ 'default': True }) def __delfield_has_date(self): del self.__field_has_date has_date=property(__getfield_has_date, __setfield_has_date, __delfield_has_date, None) def __getfield_date_terminated(self): try: self.__field_date_terminated except: self.__field_date_terminated=BOOL(**{ 'default': False }) return self.__field_date_terminated.getvalue() def __setfield_date_terminated(self, value): if isinstance(value,BOOL): self.__field_date_terminated=value else: self.__field_date_terminated=BOOL(value,**{ 'default': False }) def __delfield_date_terminated(self): del self.__field_date_terminated date_terminated=property(__getfield_date_terminated, __setfield_date_terminated, __delfield_date_terminated, None) def __getfield_sms_type(self): return self.__field_sms_type.getvalue() def __setfield_sms_type(self, value): if isinstance(value,CSVSTRING): self.__field_sms_type=value else: self.__field_sms_type=CSVSTRING(value,) def __delfield_sms_type(self): del self.__field_sms_type sms_type=property(__getfield_sms_type, __setfield_sms_type, __delfield_sms_type, None) def __getfield_sms_addr(self): return self.__field_sms_addr.getvalue() def __setfield_sms_addr(self, value): if isinstance(value,CSVSTRING): self.__field_sms_addr=value else: self.__field_sms_addr=CSVSTRING(value,**{ 'quotechar': None }) def __delfield_sms_addr(self): del self.__field_sms_addr sms_addr=property(__getfield_sms_addr, __setfield_sms_addr, __delfield_sms_addr, None) def __getfield_sms_date(self): return self.__field_sms_date.getvalue() def __setfield_sms_date(self, value): if isinstance(value,M_SMSDATETIME): self.__field_sms_date=value else: self.__field_sms_date=M_SMSDATETIME(value,) def __delfield_sms_date(self): del self.__field_sms_date sms_date=property(__getfield_sms_date, __setfield_sms_date, __delfield_sms_date, None) def __getfield_sms_date(self): return self.__field_sms_date.getvalue() def __setfield_sms_date(self, value): if isinstance(value,M_SMSDATETIME): self.__field_sms_date=value else: self.__field_sms_date=M_SMSDATETIME(value,**{ 'quotechar': None, 'terminator': None }) def __delfield_sms_date(self): del self.__field_sms_date sms_date=property(__getfield_sms_date, __setfield_sms_date, __delfield_sms_date, None) def __getfield_sms_addr(self): return self.__field_sms_addr.getvalue() def __setfield_sms_addr(self, value): if isinstance(value,CSVSTRING): self.__field_sms_addr=value else: self.__field_sms_addr=CSVSTRING(value,**{ 'terminator': None, 'quotechar': None }) def __delfield_sms_addr(self): del self.__field_sms_addr sms_addr=property(__getfield_sms_addr, __setfield_sms_addr, __delfield_sms_addr, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('has_date', self.__field_has_date, None) yield ('date_terminated', self.__field_date_terminated, None) yield ('sms_type', self.__field_sms_type, None) if self.has_date: yield ('sms_addr', self.__field_sms_addr, None) if self.date_terminated: yield ('sms_date', self.__field_sms_date, None) else: yield ('sms_date', self.__field_sms_date, None) else: yield ('sms_addr', self.__field_sms_addr, None) class sms_list_req(BaseProtogenClass): __fields=['command', 'listtype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_list_req,self).__init__(**dict) if self.__class__ is sms_list_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_list_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_list_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MMGL=' }) self.__field_command.writetobuffer(buf) try: self.__field_listtype except: self.__field_listtype=CSVSTRING(**{ 'terminator': None, 'default': SMS_HEADER_ONLY }) self.__field_listtype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MMGL=' }) self.__field_command.readfrombuffer(buf) self.__field_listtype=CSVSTRING(**{ 'terminator': None, 'default': SMS_HEADER_ONLY }) self.__field_listtype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MMGL=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None, 'default': '+MMGL=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_listtype(self): try: self.__field_listtype except: self.__field_listtype=CSVSTRING(**{ 'terminator': None, 'default': SMS_HEADER_ONLY }) return self.__field_listtype.getvalue() def __setfield_listtype(self, value): if isinstance(value,CSVSTRING): self.__field_listtype=value else: self.__field_listtype=CSVSTRING(value,**{ 'terminator': None, 'default': SMS_HEADER_ONLY }) def __delfield_listtype(self): del self.__field_listtype listtype=property(__getfield_listtype, __setfield_listtype, __delfield_listtype, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('listtype', self.__field_listtype, None) class sms_list_resp(BaseProtogenClass): __fields=['command', 'index', 'dontcare'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_list_resp,self).__init__(**dict) if self.__class__ is sms_list_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_list_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_list_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_dontcare.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': ord(' '), 'default': '+MMGL:' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT() self.__field_index.readfrombuffer(buf) self.__field_dontcare=DATA() self.__field_dontcare.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': ord(' '), 'default': '+MMGL:' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_dontcare(self): return self.__field_dontcare.getvalue() def __setfield_dontcare(self, value): if isinstance(value,DATA): self.__field_dontcare=value else: self.__field_dontcare=DATA(value,) def __delfield_dontcare(self): del self.__field_dontcare dontcare=property(__getfield_dontcare, __setfield_dontcare, __delfield_dontcare, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) yield ('dontcare', self.__field_dontcare, None) bitpim-1.0.7+dfsg1/src/phones/com_sanyo2400.py0000644001616600161660000000545010544634455017117 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id$ """Talk to the Sanyo SCP-2400 cell phone""" # standard modules import re import time import sha # my modules import common import p_brew import p_sanyo8300 import p_sanyo2400 import com_brew import com_phone import com_sanyo import com_sanyomedia import com_sanyonewer import com_sanyo3100 import prototypes import bpcalendar numbertypetab=( 'cell', 'home', 'office', 'pager', 'fax', 'data', 'none' ) class Phone(com_sanyo3100.Phone): "Talk to the Sanyo SCP-2400 cell phone" desc="SCP-2400" FIRST_MEDIA_DIRECTORY=1 LAST_MEDIA_DIRECTORY=2 imagelocations=( # offset, directory #, indexflag, type, maximumentries ) protocolclass=p_sanyo2400 serialsname='scp2400' builtinringtones=( 'None', 'Vibrate', 'Ringer & Voice', '', '', '', '', '', '', 'Tone 1', 'Tone 2', 'Tone 3', 'Tone 4', 'Tone 5', 'Tone 6', 'Tone 7', 'Tone 8', '', '', '', '', '', '', '', '', '', '', '', '', 'Tschaik.Swanlake', 'Satie Gymnop.#1', 'Hungarian Dance', 'Beethoven Sym.5', 'Greensleeves', 'Foster Ky. Home', 'The Moment', 'Asian Jingle', 'Disco') calendar_defaultringtone=0 calendar_defaultcaringtone=0 def __init__(self, logtarget, commport): com_sanyo3100.Phone.__init__(self, logtarget, commport) self.mode=self.MODENONE self.numbertypetab=numbertypetab my_model='SCP-2400/US' my_manufacturer='SANYO' parentprofile=com_sanyo3100.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer=Phone.my_manufacturer phone_model=Phone.my_model WALLPAPER_WIDTH=176 WALLPAPER_HEIGHT=220 # which usb ids correspond to us _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # Read sms messages ('todo', 'read', None), # Read todos ) def __init__(self): parentprofile.__init__(self) com_sanyonewer.Profile.__init__(self) self.numbertypetab=numbertypetab bitpim-1.0.7+dfsg1/src/phones/com_lgvx9400.py0000644001616600161660000000677210665140752016761 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2007 Nathan Hjelm ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### The communication protocol appears to be identical to the VX-8700. ### ### Testing credits: Erich Volande """ Communicate with the LG VX9400 cell phone """ # BitPim modules import common import com_phone import com_brew import prototypes import commport import p_brew import helpids import com_lgvx8700 import com_lgvx8100 import p_lgvx9400 #------------------------------------------------------------------------------- parentphone=com_lgvx8700.Phone class Phone(parentphone): "Talk to LG VX-9400 cell phone" desc="LG-VX9400" # Need to create a Help page for this phone helpid=None protocolclass=p_lgvx9400 serialsname='lgvx9400' my_model='VX9400' def setDMversion(self): self._DMv5=True # T9MVZV02 takes about 15 seconds to kick out of DM self._timer = 15 def getgroups(self, results): return com_lgvx8100.Phone.getgroups (self, results) # Fundamentals: # - get_esn - same as LG VX-8300 # - getgroups - same as LG VX-8100 # - getwallpaperindices - LGUncountedIndexedMedia # - getringtoneindices - LGUncountedIndexedMedia # - DM Version - 5 #------------------------------------------------------------------------------- parentprofile=com_lgvx8700.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='VX9400' # inside screen resoluation WALLPAPER_WIDTH=240 WALLPAPER_HEIGHT=320 imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images(sd)")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video(sd)")) # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 240, 'height': 275, 'format': "JPEG"})) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading ('memo', 'read', None), # all memo list reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('sms', 'write', 'OVERWRITE'), # all SMS list writing ('memo', 'write', 'OVERWRITE'), # all memo list writing ('t9_udb', 'write', 'OVERWRITE'), ) if __debug__: _supportedsyncs+=( ('t9_udb', 'read', 'OVERWRITE'), ) bitpim-1.0.7+dfsg1/src/phones/com_motov325.py0000644001616600161660000000443410737325377017063 0ustar amuamu### BITPIM ### ### Copyright (C) 2007 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_motov325.py 4541 2008-01-04 03:41:51Z djpham $ """Communicate with Motorola phones using AT commands""" import time import common import com_motov3m as v3m import helpids import p_motov325 parentphone=v3m.Phone class Phone(parentphone): desc='Moto-V325' helpid=helpids.ID_PHONE_MOTOV325 protocolclass=p_motov325 serialsname='motov325' builtinringtones=( (0, ('Silent',)), (5, ('Vibe Dot', 'Vibe Dash', 'Vibe Dot Dot', 'Vibe Dot Dash', 'Vibe Pulse')), (11, ('Alert', 'Standard', 'Bells', 'Triads', 'Up and Down')), (30, ('Moonlit Haze', 'Nightlife', 'Wind Chime', 'Random', 'Bit & Bytes', 'Door Bell', 'Ding', 'One Moment', 'Provincial', 'Harmonics', 'Interlude', 'Snaggle', 'Cosmic')), ) def getwallpapers(self, fundamentals): """Retrieve wallpaper data""" # The V325 needs some time to switch from BREW back to MODEM mode # without this sleep, the switch will always come back with ERROR self.log('Waiting for the phone to switch back to mode modem') time.sleep(2) return parentphone.getwallpapers(self, fundamentals) #------------------------------------------------------------------------------ parentprofile=v3m.Profile class Profile(parentprofile): serialsname=Phone.serialsname # use for auto-detection phone_manufacturer='Motorola' phone_model='V325 ' common_model_name='V325' generic_phone_model='Motorola V325 Phone' # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 176, 'height': 184, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 96, 'height': 72, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "fullscreen", {'width': 176, 'height': 220, 'format': "JPEG"})) bitpim-1.0.7+dfsg1/src/phones/p_samsung_packet.py0000644001616600161660000034013310723167110020131 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Sanyo phones""" from prototypes import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMCALENDAREVENTS=70 NUMTODOENTRIES=9 NUMMEMOENTRIES=9 DEFAULT_RINGTONE=20 DEFAULT_WALLPAPER=20 class phonenumber(BaseProtogenClass): __fields=['number', 'secret'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonenumber,self).__init__(**dict) if self.__class__ is phonenumber: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonenumber,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonenumber,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_number except: self.__field_number=CSVSTRING(**{'quotechar': None, 'default': ""}) self.__field_number.writetobuffer(buf) try: self.__field_secret except: self.__field_secret=CSVINT(**{'default': 0}) self.__field_secret.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=CSVSTRING(**{'quotechar': None, 'default': ""}) self.__field_number.readfrombuffer(buf) self.__field_secret=CSVINT(**{'default': 0}) self.__field_secret.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): try: self.__field_number except: self.__field_number=CSVSTRING(**{'quotechar': None, 'default': ""}) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,CSVSTRING): self.__field_number=value else: self.__field_number=CSVSTRING(value,**{'quotechar': None, 'default': ""}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_secret(self): try: self.__field_secret except: self.__field_secret=CSVINT(**{'default': 0}) return self.__field_secret.getvalue() def __setfield_secret(self, value): if isinstance(value,CSVINT): self.__field_secret=value else: self.__field_secret=CSVINT(value,**{'default': 0}) def __delfield_secret(self): del self.__field_secret secret=property(__getfield_secret, __setfield_secret, __delfield_secret, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) yield ('secret', self.__field_secret, None) class phonebookslotrequest(BaseProtogenClass): __fields=['command', 'slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebookslotrequest,self).__init__(**dict) if self.__class__ is phonebookslotrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebookslotrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebookslotrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKR='}) self.__field_command.writetobuffer(buf) try: self.__field_slot except: self.__field_slot=CSVINT(**{'terminator': None}) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKR='}) self.__field_command.readfrombuffer(buf) self.__field_slot=CSVINT(**{'terminator': None}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKR='}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '#PBOKR='}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_slot(self): try: self.__field_slot except: self.__field_slot=CSVINT(**{'terminator': None}) return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,CSVINT): self.__field_slot=value else: self.__field_slot=CSVINT(value,**{'terminator': None}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, "Internal Slot") def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('slot', self.__field_slot, "Internal Slot") class phonebooksloterase(BaseProtogenClass): __fields=['command', 'slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebooksloterase,self).__init__(**dict) if self.__class__ is phonebooksloterase: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebooksloterase,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebooksloterase,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKW='}) self.__field_command.writetobuffer(buf) try: self.__field_slot except: self.__field_slot=CSVINT(**{'terminator': None}) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKW='}) self.__field_command.readfrombuffer(buf) self.__field_slot=CSVINT(**{'terminator': None}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKW='}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '#PBOKW='}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_slot(self): try: self.__field_slot except: self.__field_slot=CSVINT(**{'terminator': None}) return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,CSVINT): self.__field_slot=value else: self.__field_slot=CSVINT(value,**{'terminator': None}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, "Internal Slot") def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('slot', self.__field_slot, "Internal Slot") class phonebookslotupdateresponse(BaseProtogenClass): __fields=['pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebookslotupdateresponse,self).__init__(**dict) if self.__class__ is phonebookslotupdateresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebookslotupdateresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebookslotupdateresponse,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_pad=UNKNOWN(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('pad', self.__field_pad, None) class groupnamerequest(BaseProtogenClass): __fields=['command', 'gid'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(groupnamerequest,self).__init__(**dict) if self.__class__ is groupnamerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(groupnamerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(groupnamerequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBGRR='}) self.__field_command.writetobuffer(buf) try: self.__field_gid except: self.__field_gid=CSVINT(**{'terminator': None}) self.__field_gid.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBGRR='}) self.__field_command.readfrombuffer(buf) self.__field_gid=CSVINT(**{'terminator': None}) self.__field_gid.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBGRR='}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '#PBGRR='}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_gid(self): try: self.__field_gid except: self.__field_gid=CSVINT(**{'terminator': None}) return self.__field_gid.getvalue() def __setfield_gid(self, value): if isinstance(value,CSVINT): self.__field_gid=value else: self.__field_gid=CSVINT(value,**{'terminator': None}) def __delfield_gid(self): del self.__field_gid gid=property(__getfield_gid, __setfield_gid, __delfield_gid, "Group #") def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('gid', self.__field_gid, "Group #") class groupnamesetrequest(BaseProtogenClass): __fields=['command', 'gid', 'groupname', 'ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(groupnamesetrequest,self).__init__(**dict) if self.__class__ is groupnamesetrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(groupnamesetrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(groupnamesetrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBGRW='}) self.__field_command.writetobuffer(buf) try: self.__field_gid except: self.__field_gid=CSVINT() self.__field_gid.writetobuffer(buf) try: self.__field_groupname except: self.__field_groupname=CSVSTRING() self.__field_groupname.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=CSVINT(**{'terminator': None, 'default': 0}) self.__field_ringtone.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBGRW='}) self.__field_command.readfrombuffer(buf) self.__field_gid=CSVINT() self.__field_gid.readfrombuffer(buf) self.__field_groupname=CSVSTRING() self.__field_groupname.readfrombuffer(buf) self.__field_ringtone=CSVINT(**{'terminator': None, 'default': 0}) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBGRW='}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '#PBGRW='}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_gid(self): try: self.__field_gid except: self.__field_gid=CSVINT() return self.__field_gid.getvalue() def __setfield_gid(self, value): if isinstance(value,CSVINT): self.__field_gid=value else: self.__field_gid=CSVINT(value,) def __delfield_gid(self): del self.__field_gid gid=property(__getfield_gid, __setfield_gid, __delfield_gid, "Group #") def __getfield_groupname(self): try: self.__field_groupname except: self.__field_groupname=CSVSTRING() return self.__field_groupname.getvalue() def __setfield_groupname(self, value): if isinstance(value,CSVSTRING): self.__field_groupname=value else: self.__field_groupname=CSVSTRING(value,) def __delfield_groupname(self): del self.__field_groupname groupname=property(__getfield_groupname, __setfield_groupname, __delfield_groupname, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=CSVINT(**{'terminator': None, 'default': 0}) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,CSVINT): self.__field_ringtone=value else: self.__field_ringtone=CSVINT(value,**{'terminator': None, 'default': 0}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "Ringtone assignment") def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('gid', self.__field_gid, "Group #") yield ('groupname', self.__field_groupname, None) yield ('ringtone', self.__field_ringtone, "Ringtone assignment") class groupnamesetrequest(BaseProtogenClass): __fields=['command', 'gid', 'groupname', 'ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(groupnamesetrequest,self).__init__(**dict) if self.__class__ is groupnamesetrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(groupnamesetrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(groupnamesetrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBGRW='}) self.__field_command.writetobuffer(buf) try: self.__field_gid except: self.__field_gid=CSVINT() self.__field_gid.writetobuffer(buf) try: self.__field_groupname except: self.__field_groupname=CSVSTRING() self.__field_groupname.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=CSVINT(**{'terminator': None, 'default': 0}) self.__field_ringtone.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBGRW='}) self.__field_command.readfrombuffer(buf) self.__field_gid=CSVINT() self.__field_gid.readfrombuffer(buf) self.__field_groupname=CSVSTRING() self.__field_groupname.readfrombuffer(buf) self.__field_ringtone=CSVINT(**{'terminator': None, 'default': 0}) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBGRW='}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '#PBGRW='}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_gid(self): try: self.__field_gid except: self.__field_gid=CSVINT() return self.__field_gid.getvalue() def __setfield_gid(self, value): if isinstance(value,CSVINT): self.__field_gid=value else: self.__field_gid=CSVINT(value,) def __delfield_gid(self): del self.__field_gid gid=property(__getfield_gid, __setfield_gid, __delfield_gid, "Group #") def __getfield_groupname(self): try: self.__field_groupname except: self.__field_groupname=CSVSTRING() return self.__field_groupname.getvalue() def __setfield_groupname(self, value): if isinstance(value,CSVSTRING): self.__field_groupname=value else: self.__field_groupname=CSVSTRING(value,) def __delfield_groupname(self): del self.__field_groupname groupname=property(__getfield_groupname, __setfield_groupname, __delfield_groupname, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=CSVINT(**{'terminator': None, 'default': 0}) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,CSVINT): self.__field_ringtone=value else: self.__field_ringtone=CSVINT(value,**{'terminator': None, 'default': 0}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "Ringtone assignment") def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('gid', self.__field_gid, "Group #") yield ('groupname', self.__field_groupname, None) yield ('ringtone', self.__field_ringtone, "Ringtone assignment") class eventrequest(BaseProtogenClass): __fields=['command', 'slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventrequest,self).__init__(**dict) if self.__class__ is eventrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PISHR='}) self.__field_command.writetobuffer(buf) try: self.__field_slot except: self.__field_slot=CSVINT(**{'terminator': None}) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PISHR='}) self.__field_command.readfrombuffer(buf) self.__field_slot=CSVINT(**{'terminator': None}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PISHR='}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '#PISHR='}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_slot(self): try: self.__field_slot except: self.__field_slot=CSVINT(**{'terminator': None}) return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,CSVINT): self.__field_slot=value else: self.__field_slot=CSVINT(value,**{'terminator': None}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('slot', self.__field_slot, None) class eventresponse(BaseProtogenClass): __fields=['command', 'slot', 'start', 'end', 'timestamp', 'alarm', 'dunno', 'eventname'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventresponse,self).__init__(**dict) if self.__class__ is eventresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_timestamp.writetobuffer(buf) self.__field_alarm.writetobuffer(buf) self.__field_dunno.writetobuffer(buf) self.__field_eventname.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '#PISHR:'}) self.__field_command.readfrombuffer(buf) self.__field_slot=CSVINT() self.__field_slot.readfrombuffer(buf) self.__field_start=CSVTIME() self.__field_start.readfrombuffer(buf) self.__field_end=CSVTIME() self.__field_end.readfrombuffer(buf) self.__field_timestamp=CSVTIME() self.__field_timestamp.readfrombuffer(buf) self.__field_alarm=CSVINT() self.__field_alarm.readfrombuffer(buf) self.__field_dunno=CSVSTRING(**{'quotechar': None}) self.__field_dunno.readfrombuffer(buf) self.__field_eventname=CSVSTRING(**{'terminator': None}) self.__field_eventname.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '#PISHR:'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,CSVINT): self.__field_slot=value else: self.__field_slot=CSVINT(value,) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,CSVTIME): self.__field_start=value else: self.__field_start=CSVTIME(value,) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,CSVTIME): self.__field_end=value else: self.__field_end=CSVTIME(value,) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_timestamp(self): return self.__field_timestamp.getvalue() def __setfield_timestamp(self, value): if isinstance(value,CSVTIME): self.__field_timestamp=value else: self.__field_timestamp=CSVTIME(value,) def __delfield_timestamp(self): del self.__field_timestamp timestamp=property(__getfield_timestamp, __setfield_timestamp, __delfield_timestamp, None) def __getfield_alarm(self): return self.__field_alarm.getvalue() def __setfield_alarm(self, value): if isinstance(value,CSVINT): self.__field_alarm=value else: self.__field_alarm=CSVINT(value,) def __delfield_alarm(self): del self.__field_alarm alarm=property(__getfield_alarm, __setfield_alarm, __delfield_alarm, "0: 10 minutes, 1: 30 minutes, 2: 60 minutes, 3: No Alarm, 4: On Time") def __getfield_dunno(self): return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,CSVSTRING): self.__field_dunno=value else: self.__field_dunno=CSVSTRING(value,**{'quotechar': None}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def __getfield_eventname(self): return self.__field_eventname.getvalue() def __setfield_eventname(self, value): if isinstance(value,CSVSTRING): self.__field_eventname=value else: self.__field_eventname=CSVSTRING(value,**{'terminator': None}) def __delfield_eventname(self): del self.__field_eventname eventname=property(__getfield_eventname, __setfield_eventname, __delfield_eventname, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('slot', self.__field_slot, None) yield ('start', self.__field_start, None) yield ('end', self.__field_end, None) yield ('timestamp', self.__field_timestamp, None) yield ('alarm', self.__field_alarm, "0: 10 minutes, 1: 30 minutes, 2: 60 minutes, 3: No Alarm, 4: On Time") yield ('dunno', self.__field_dunno, None) yield ('eventname', self.__field_eventname, None) class eventupdaterequest(BaseProtogenClass): __fields=['command', 'slot', 'start', 'end', 'timestamp', 'alarm', 'eventname'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventupdaterequest,self).__init__(**dict) if self.__class__ is eventupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PISHW='}) self.__field_command.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_timestamp.writetobuffer(buf) self.__field_alarm.writetobuffer(buf) self.__field_eventname.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PISHW='}) self.__field_command.readfrombuffer(buf) self.__field_slot=CSVINT() self.__field_slot.readfrombuffer(buf) self.__field_start=CSVTIME() self.__field_start.readfrombuffer(buf) self.__field_end=CSVTIME() self.__field_end.readfrombuffer(buf) self.__field_timestamp=CSVTIME() self.__field_timestamp.readfrombuffer(buf) self.__field_alarm=CSVINT() self.__field_alarm.readfrombuffer(buf) self.__field_eventname=CSVSTRING(**{'terminator': None}) self.__field_eventname.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PISHW='}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '#PISHW='}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,CSVINT): self.__field_slot=value else: self.__field_slot=CSVINT(value,) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,CSVTIME): self.__field_start=value else: self.__field_start=CSVTIME(value,) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,CSVTIME): self.__field_end=value else: self.__field_end=CSVTIME(value,) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_timestamp(self): return self.__field_timestamp.getvalue() def __setfield_timestamp(self, value): if isinstance(value,CSVTIME): self.__field_timestamp=value else: self.__field_timestamp=CSVTIME(value,) def __delfield_timestamp(self): del self.__field_timestamp timestamp=property(__getfield_timestamp, __setfield_timestamp, __delfield_timestamp, None) def __getfield_alarm(self): return self.__field_alarm.getvalue() def __setfield_alarm(self, value): if isinstance(value,CSVINT): self.__field_alarm=value else: self.__field_alarm=CSVINT(value,) def __delfield_alarm(self): del self.__field_alarm alarm=property(__getfield_alarm, __setfield_alarm, __delfield_alarm, "0: 10 minutes, 1: 30 minutes, 2: 60 minutes, 3: No Alarm, 4: On Time") def __getfield_eventname(self): return self.__field_eventname.getvalue() def __setfield_eventname(self, value): if isinstance(value,CSVSTRING): self.__field_eventname=value else: self.__field_eventname=CSVSTRING(value,**{'terminator': None}) def __delfield_eventname(self): del self.__field_eventname eventname=property(__getfield_eventname, __setfield_eventname, __delfield_eventname, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('slot', self.__field_slot, None) yield ('start', self.__field_start, None) yield ('end', self.__field_end, None) yield ('timestamp', self.__field_timestamp, None) yield ('alarm', self.__field_alarm, "0: 10 minutes, 1: 30 minutes, 2: 60 minutes, 3: No Alarm, 4: On Time") yield ('eventname', self.__field_eventname, None) class eventsloterase(BaseProtogenClass): __fields=['command', 'slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventsloterase,self).__init__(**dict) if self.__class__ is eventsloterase: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventsloterase,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventsloterase,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PISHW='}) self.__field_command.writetobuffer(buf) try: self.__field_slot except: self.__field_slot=CSVINT(**{'terminator': None}) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PISHW='}) self.__field_command.readfrombuffer(buf) self.__field_slot=CSVINT(**{'terminator': None}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PISHW='}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '#PISHW='}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_slot(self): try: self.__field_slot except: self.__field_slot=CSVINT(**{'terminator': None}) return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,CSVINT): self.__field_slot=value else: self.__field_slot=CSVINT(value,**{'terminator': None}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('slot', self.__field_slot, None) class eventupdateresponse(BaseProtogenClass): __fields=['pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventupdateresponse,self).__init__(**dict) if self.__class__ is eventupdateresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventupdateresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventupdateresponse,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_pad=UNKNOWN(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('pad', self.__field_pad, None) class todorequest(BaseProtogenClass): __fields=['command', 'slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(todorequest,self).__init__(**dict) if self.__class__ is todorequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(todorequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(todorequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PITDR='}) self.__field_command.writetobuffer(buf) try: self.__field_slot except: self.__field_slot=CSVINT(**{'terminator': None}) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PITDR='}) self.__field_command.readfrombuffer(buf) self.__field_slot=CSVINT(**{'terminator': None}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PITDR='}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '#PITDR='}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_slot(self): try: self.__field_slot except: self.__field_slot=CSVINT(**{'terminator': None}) return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,CSVINT): self.__field_slot=value else: self.__field_slot=CSVINT(value,**{'terminator': None}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('slot', self.__field_slot, None) class todoresponse(BaseProtogenClass): __fields=['command', 'slot', 'priority', 'duedate', 'timestamp', 'status', 'subject'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(todoresponse,self).__init__(**dict) if self.__class__ is todoresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(todoresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(todoresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_duedate.writetobuffer(buf) self.__field_timestamp.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'default': '#PITDR:'}) self.__field_command.readfrombuffer(buf) self.__field_slot=CSVINT() self.__field_slot.readfrombuffer(buf) self.__field_priority=CSVINT() self.__field_priority.readfrombuffer(buf) self.__field_duedate=CSVTIME() self.__field_duedate.readfrombuffer(buf) self.__field_timestamp=CSVTIME() self.__field_timestamp.readfrombuffer(buf) self.__field_status=CSVSTRING(**{'quotechar': None}) self.__field_status.readfrombuffer(buf) self.__field_subject=CSVSTRING(**{'terminator': None}) self.__field_subject.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'default': '#PITDR:'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,CSVINT): self.__field_slot=value else: self.__field_slot=CSVINT(value,) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,CSVINT): self.__field_priority=value else: self.__field_priority=CSVINT(value,) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_duedate(self): return self.__field_duedate.getvalue() def __setfield_duedate(self, value): if isinstance(value,CSVTIME): self.__field_duedate=value else: self.__field_duedate=CSVTIME(value,) def __delfield_duedate(self): del self.__field_duedate duedate=property(__getfield_duedate, __setfield_duedate, __delfield_duedate, None) def __getfield_timestamp(self): return self.__field_timestamp.getvalue() def __setfield_timestamp(self, value): if isinstance(value,CSVTIME): self.__field_timestamp=value else: self.__field_timestamp=CSVTIME(value,) def __delfield_timestamp(self): del self.__field_timestamp timestamp=property(__getfield_timestamp, __setfield_timestamp, __delfield_timestamp, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,CSVSTRING): self.__field_status=value else: self.__field_status=CSVSTRING(value,**{'quotechar': None}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,CSVSTRING): self.__field_subject=value else: self.__field_subject=CSVSTRING(value,**{'terminator': None}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('slot', self.__field_slot, None) yield ('priority', self.__field_priority, None) yield ('duedate', self.__field_duedate, None) yield ('timestamp', self.__field_timestamp, None) yield ('status', self.__field_status, None) yield ('subject', self.__field_subject, None) class todoupdaterequest(BaseProtogenClass): __fields=['command', 'slot', 'priority', 'duedate', 'timestamp', 'subject'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(todoupdaterequest,self).__init__(**dict) if self.__class__ is todoupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(todoupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(todoupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PITDW='}) self.__field_command.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_duedate.writetobuffer(buf) self.__field_timestamp.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PITDW='}) self.__field_command.readfrombuffer(buf) self.__field_slot=CSVINT() self.__field_slot.readfrombuffer(buf) self.__field_priority=CSVINT() self.__field_priority.readfrombuffer(buf) self.__field_duedate=CSVTIME() self.__field_duedate.readfrombuffer(buf) self.__field_timestamp=CSVTIME() self.__field_timestamp.readfrombuffer(buf) self.__field_subject=CSVSTRING(**{'terminator': None}) self.__field_subject.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PITDW='}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '#PITDW='}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,CSVINT): self.__field_slot=value else: self.__field_slot=CSVINT(value,) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,CSVINT): self.__field_priority=value else: self.__field_priority=CSVINT(value,) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_duedate(self): return self.__field_duedate.getvalue() def __setfield_duedate(self, value): if isinstance(value,CSVTIME): self.__field_duedate=value else: self.__field_duedate=CSVTIME(value,) def __delfield_duedate(self): del self.__field_duedate duedate=property(__getfield_duedate, __setfield_duedate, __delfield_duedate, None) def __getfield_timestamp(self): return self.__field_timestamp.getvalue() def __setfield_timestamp(self, value): if isinstance(value,CSVTIME): self.__field_timestamp=value else: self.__field_timestamp=CSVTIME(value,) def __delfield_timestamp(self): del self.__field_timestamp timestamp=property(__getfield_timestamp, __setfield_timestamp, __delfield_timestamp, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,CSVSTRING): self.__field_subject=value else: self.__field_subject=CSVSTRING(value,**{'terminator': None}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('slot', self.__field_slot, None) yield ('priority', self.__field_priority, None) yield ('duedate', self.__field_duedate, None) yield ('timestamp', self.__field_timestamp, None) yield ('subject', self.__field_subject, None) class todoerase(BaseProtogenClass): __fields=['command', 'slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(todoerase,self).__init__(**dict) if self.__class__ is todoerase: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(todoerase,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(todoerase,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PITDW='}) self.__field_command.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PITDW='}) self.__field_command.readfrombuffer(buf) self.__field_slot=CSVINT(**{'terminator': None}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PITDW='}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '#PITDW='}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,CSVINT): self.__field_slot=value else: self.__field_slot=CSVINT(value,**{'terminator': None}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('slot', self.__field_slot, None) class todoupdateresponse(BaseProtogenClass): __fields=['pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(todoupdateresponse,self).__init__(**dict) if self.__class__ is todoupdateresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(todoupdateresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(todoupdateresponse,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_pad=UNKNOWN(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('pad', self.__field_pad, None) class memorequest(BaseProtogenClass): __fields=['command', 'slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(memorequest,self).__init__(**dict) if self.__class__ is memorequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(memorequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(memorequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PIMMR='}) self.__field_command.writetobuffer(buf) try: self.__field_slot except: self.__field_slot=CSVINT(**{'terminator': None}) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PIMMR='}) self.__field_command.readfrombuffer(buf) self.__field_slot=CSVINT(**{'terminator': None}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PIMMR='}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '#PIMMR='}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_slot(self): try: self.__field_slot except: self.__field_slot=CSVINT(**{'terminator': None}) return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,CSVINT): self.__field_slot=value else: self.__field_slot=CSVINT(value,**{'terminator': None}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('slot', self.__field_slot, None) class memoresponse(BaseProtogenClass): __fields=['command', 'slot', 'timestamp', 'status', 'text'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(memoresponse,self).__init__(**dict) if self.__class__ is memoresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(memoresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(memoresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_timestamp.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_text.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'default': '#PIMMR:'}) self.__field_command.readfrombuffer(buf) self.__field_slot=CSVINT() self.__field_slot.readfrombuffer(buf) self.__field_timestamp=CSVTIME() self.__field_timestamp.readfrombuffer(buf) self.__field_status=CSVSTRING(**{'quotechar': None}) self.__field_status.readfrombuffer(buf) self.__field_text=CSVSTRING(**{'terminator': None}) self.__field_text.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'default': '#PIMMR:'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,CSVINT): self.__field_slot=value else: self.__field_slot=CSVINT(value,) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_timestamp(self): return self.__field_timestamp.getvalue() def __setfield_timestamp(self, value): if isinstance(value,CSVTIME): self.__field_timestamp=value else: self.__field_timestamp=CSVTIME(value,) def __delfield_timestamp(self): del self.__field_timestamp timestamp=property(__getfield_timestamp, __setfield_timestamp, __delfield_timestamp, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,CSVSTRING): self.__field_status=value else: self.__field_status=CSVSTRING(value,**{'quotechar': None}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,CSVSTRING): self.__field_text=value else: self.__field_text=CSVSTRING(value,**{'terminator': None}) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('slot', self.__field_slot, None) yield ('timestamp', self.__field_timestamp, None) yield ('status', self.__field_status, None) yield ('text', self.__field_text, None) class memoupdaterequest(BaseProtogenClass): __fields=['command', 'slot', 'timestamp', 'text'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(memoupdaterequest,self).__init__(**dict) if self.__class__ is memoupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(memoupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(memoupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PIMMW='}) self.__field_command.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_timestamp.writetobuffer(buf) self.__field_text.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PIMMW='}) self.__field_command.readfrombuffer(buf) self.__field_slot=CSVINT() self.__field_slot.readfrombuffer(buf) self.__field_timestamp=CSVTIME() self.__field_timestamp.readfrombuffer(buf) self.__field_text=CSVSTRING(**{'terminator': None}) self.__field_text.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PIMMW='}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '#PIMMW='}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,CSVINT): self.__field_slot=value else: self.__field_slot=CSVINT(value,) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_timestamp(self): return self.__field_timestamp.getvalue() def __setfield_timestamp(self, value): if isinstance(value,CSVTIME): self.__field_timestamp=value else: self.__field_timestamp=CSVTIME(value,) def __delfield_timestamp(self): del self.__field_timestamp timestamp=property(__getfield_timestamp, __setfield_timestamp, __delfield_timestamp, None) def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,CSVSTRING): self.__field_text=value else: self.__field_text=CSVSTRING(value,**{'terminator': None}) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('slot', self.__field_slot, None) yield ('timestamp', self.__field_timestamp, None) yield ('text', self.__field_text, None) class memoerase(BaseProtogenClass): __fields=['command', 'slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(memoerase,self).__init__(**dict) if self.__class__ is memoerase: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(memoerase,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(memoerase,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PIMMW='}) self.__field_command.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PIMMW='}) self.__field_command.readfrombuffer(buf) self.__field_slot=CSVINT(**{'terminator': None}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PIMMW='}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '#PIMMW='}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,CSVINT): self.__field_slot=value else: self.__field_slot=CSVINT(value,**{'terminator': None}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('slot', self.__field_slot, None) class memoupdateresponse(BaseProtogenClass): __fields=['pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(memoupdateresponse,self).__init__(**dict) if self.__class__ is memoupdateresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(memoupdateresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(memoupdateresponse,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_pad=UNKNOWN(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('pad', self.__field_pad, None) class esnrequest(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(esnrequest,self).__init__(**dict) if self.__class__ is esnrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(esnrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(esnrequest,kwargs) if len(args): dict2={'quotechar': None, 'terminator': None, 'default': '+GSN'} dict2.update(kwargs) kwargs=dict2 self.__field_command=CSVSTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+GSN'}) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+GSN'}) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+GSN'}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '+GSN'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class esnresponse(BaseProtogenClass): __fields=['command', 'esn'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(esnresponse,self).__init__(**dict) if self.__class__ is esnresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(esnresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(esnresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_esn.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'default': '+GSN'}) self.__field_command.readfrombuffer(buf) self.__field_esn=CSVSTRING(**{'quotechar': None, 'terminator': None}) self.__field_esn.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'default': '+GSN'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_esn(self): return self.__field_esn.getvalue() def __setfield_esn(self, value): if isinstance(value,CSVSTRING): self.__field_esn=value else: self.__field_esn=CSVSTRING(value,**{'quotechar': None, 'terminator': None}) def __delfield_esn(self): del self.__field_esn esn=property(__getfield_esn, __setfield_esn, __delfield_esn, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('esn', self.__field_esn, None) class manufacturerreq(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(manufacturerreq,self).__init__(**dict) if self.__class__ is manufacturerreq: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(manufacturerreq,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(manufacturerreq,kwargs) if len(args): dict2={ 'quotechar': None, 'terminator': None, 'default': '+GMI' } dict2.update(kwargs) kwargs=dict2 self.__field_command=CSVSTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+GMI' }) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+GMI' }) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+GMI' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None, 'default': '+GMI' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class manufacturerresp(BaseProtogenClass): __fields=['command', 'manufacturer'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(manufacturerresp,self).__init__(**dict) if self.__class__ is manufacturerresp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(manufacturerresp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(manufacturerresp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_manufacturer.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': ord(' ') }) self.__field_command.readfrombuffer(buf) self.__field_manufacturer=STRING(**{'terminator': None }) self.__field_manufacturer.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': ord(' ') }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_manufacturer(self): return self.__field_manufacturer.getvalue() def __setfield_manufacturer(self, value): if isinstance(value,STRING): self.__field_manufacturer=value else: self.__field_manufacturer=STRING(value,**{'terminator': None }) def __delfield_manufacturer(self): del self.__field_manufacturer manufacturer=property(__getfield_manufacturer, __setfield_manufacturer, __delfield_manufacturer, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('manufacturer', self.__field_manufacturer, None) class modelreq(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(modelreq,self).__init__(**dict) if self.__class__ is modelreq: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(modelreq,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(modelreq,kwargs) if len(args): dict2={ 'terminator': None, 'default': '+GMM' } dict2.update(kwargs) kwargs=dict2 self.__field_command=STRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=STRING(**{ 'terminator': None, 'default': '+GMM' }) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=STRING(**{ 'terminator': None, 'default': '+GMM' }) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=STRING(**{ 'terminator': None, 'default': '+GMM' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,STRING): self.__field_command=value else: self.__field_command=STRING(value,**{ 'terminator': None, 'default': '+GMM' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class modelresp(BaseProtogenClass): __fields=['command', 'model'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(modelresp,self).__init__(**dict) if self.__class__ is modelresp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(modelresp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(modelresp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_model.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=STRING(**{ 'terminator': ord(' ') }) self.__field_command.readfrombuffer(buf) self.__field_model=STRING(**{ 'terminator': None }) self.__field_model.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,STRING): self.__field_command=value else: self.__field_command=STRING(value,**{ 'terminator': ord(' ') }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_model(self): return self.__field_model.getvalue() def __setfield_model(self, value): if isinstance(value,STRING): self.__field_model=value else: self.__field_model=STRING(value,**{ 'terminator': None }) def __delfield_model(self): del self.__field_model model=property(__getfield_model, __setfield_model, __delfield_model, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('model', self.__field_model, None) class batterylevelreq(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(batterylevelreq,self).__init__(**dict) if self.__class__ is batterylevelreq: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(batterylevelreq,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(batterylevelreq,kwargs) if len(args): dict2={ 'terminator': None, 'default':'+CBC?' } dict2.update(kwargs) kwargs=dict2 self.__field_command=STRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=STRING(**{ 'terminator': None, 'default':'+CBC?' }) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=STRING(**{ 'terminator': None, 'default':'+CBC?' }) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=STRING(**{ 'terminator': None, 'default':'+CBC?' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,STRING): self.__field_command=value else: self.__field_command=STRING(value,**{ 'terminator': None, 'default':'+CBC?' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class batterylevelresp(BaseProtogenClass): __fields=['command', 'zero', 'level'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(batterylevelresp,self).__init__(**dict) if self.__class__ is batterylevelresp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(batterylevelresp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(batterylevelresp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_zero.writetobuffer(buf) self.__field_level.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=STRING(**{ 'terminator': ord(' ') }) self.__field_command.readfrombuffer(buf) self.__field_zero=CSVINT() self.__field_zero.readfrombuffer(buf) self.__field_level=CSVINT(**{ 'terminator': None }) self.__field_level.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,STRING): self.__field_command=value else: self.__field_command=STRING(value,**{ 'terminator': ord(' ') }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_zero(self): return self.__field_zero.getvalue() def __setfield_zero(self, value): if isinstance(value,CSVINT): self.__field_zero=value else: self.__field_zero=CSVINT(value,) def __delfield_zero(self): del self.__field_zero zero=property(__getfield_zero, __setfield_zero, __delfield_zero, None) def __getfield_level(self): return self.__field_level.getvalue() def __setfield_level(self, value): if isinstance(value,CSVINT): self.__field_level=value else: self.__field_level=CSVINT(value,**{ 'terminator': None }) def __delfield_level(self): del self.__field_level level=property(__getfield_level, __setfield_level, __delfield_level, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('zero', self.__field_zero, None) yield ('level', self.__field_level, None) def _levelstr(self): return '%d%%'%self.level levelstr=property(fget=_levelstr) bitpim-1.0.7+dfsg1/src/phones/p_lgvx4400.p0000644001616600161660000003077211153373721016236 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lgvx4400.p 4726 2009-03-04 03:38:57Z djpham $ %{ """Various descriptions of data specific to LG VX4400""" import re from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=1 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=200 MAXCALENDARDESCRIPTION=38 MAX_PHONEBOOK_GROUPS=10 NUMEMAILS=3 NUMPHONENUMBERS=5 pb_group_filename='pim/pbgroup.dat' NORINGTONE=0 NOMSGRINGTONE=0 NOWALLPAPER=0 MEMOLENGTH=33 SMS_CANNED_MAX_ITEMS=18 SMS_CANNED_MAX_LENGTH=101 SMS_CANNED_FILENAME="sms/mediacan000.dat" SMS_PATTERNS={'Inbox': re.compile(r"^.*/inbox[0-9][0-9][0-9]\.dat$"), 'Sent': re.compile(r"^.*/outbox[0-9][0-9][0-9]\.dat$"), 'Saved': re.compile(r"^.*/sf[0-9][0-9]\.dat$"), } numbertypetab=( 'home', 'home2', 'office', 'office2', 'cell', 'cell2', 'pager', 'fax', 'fax2', 'none' ) # Calendar parameters NUMCALENDARENTRIES=300 # ?? for VX4400 CAL_REP_NONE=0x10 CAL_REP_DAILY=0x11 CAL_REP_MONFRI=0x12 CAL_REP_WEEKLY=0x13 CAL_REP_MONTHLY=0x14 CAL_REP_YEARLY=0x15 CAL_DOW_SUN=0x0800 CAL_DOW_MON=0x0400 CAL_DOW_TUE=0x0200 CAL_DOW_WED=0x0100 CAL_DOW_THU=0x0080 CAL_DOW_FRI=0x0040 CAL_DOW_SAT=0x0020 CAL_DOW_EXCEPTIONS=0x0010 CAL_REMINDER_NONE=0 CAL_REMINDER_ONTIME=1 CAL_REMINDER_5MIN=2 CAL_REMINDER_10MIN=3 CAL_REMINDER_1HOUR=4 CAL_REMINDER_1DAY=5 CAL_REMINDER_2DAYS=6 CAL_REPEAT_DATE=(4095, 12, 31) cal_dir='sch' cal_data_file_name='sch/schedule.dat' cal_exception_file_name='sch/schexception.dat' cal_has_voice_id=False # Text Memo const text_memo_file='sch/memo.dat' PHONE_ENCODING='iso8859_1' %} PACKET speeddial: 1 UINT {'default': 0xff} +entry 1 UINT {'default': 0xff} +number PACKET speeddials: * LIST {'length': NUMSPEEDDIALS, 'elementclass': speeddial} +speeddials PACKET pbreadentryresponse: "Results of reading one entry" * pbheader header * pbentry entry PACKET pbupdateentryrequest: * pbheader {'command': 0x04, 'flag': 0x01} +header * pbentry entry PACKET pbappendentryrequest: * pbheader {'command': 0x03, 'flag': 0x01} +header * pbentry entry # All STRINGS have raiseonterminatedread as False since the phone does # occassionally leave out the terminator byte # Note if you change the length of any of these fields, you also # need to modify com_lgvx4400 to give a different truncateat parameter # in the convertphonebooktophone method PACKET pbentry: 4 UINT serial1 2 UINT {'constant': 0x0202} +entrysize 4 UINT serial2 2 UINT entrynumber 23 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 2 UINT group * LIST {'length': NUMEMAILS} +emails: 49 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} email 49 USTRING {'raiseonunterminatedread': False} url 1 UINT ringtone "ringtone index for a call" 1 UINT msgringtone "ringtone index for a text message" 1 BOOL secret * USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH} memo 1 UINT wallpaper * LIST {'length': NUMPHONENUMBERS} +numbertypes: 1 UINT numbertype * LIST {'length': NUMPHONENUMBERS} +numbers: 49 USTRING {'raiseonunterminatedread': False} number * UNKNOWN +unknown20c PACKET pbgroup: "A single group" 1 UINT icon 23 USTRING {'encoding': PHONE_ENCODING} name PACKET pbgroups: "Phonebook groups" * LIST {'elementclass': pbgroup} +groups PACKET indexentry: 2 UINT {'default': 0xffff} +index 40 USTRING {'default': ""} +name PACKET indexfile: "Used for tracking wallpaper and ringtones" # A bit of a silly design again. Entries with an index of 0xffff are # 'blank'. Thus it is possible for numactiveitems and the actual # number of valid entries to be mismatched. P UINT {'constant': 30} maxitems 2 UINT numactiveitems * LIST {'length': self.maxitems, 'elementclass': indexentry, 'createdefault': True} +items ### ### The calendar ### # # The calendar consists of one file listing events and an exception # file that lists exceptions. These exceptions suppress a particular # instance of a repeated event. For example, if you setup something # to happen monthly, but changed the 1st february event, then the # schedule will contain the repeating event, and the 1st feb one, # and the suppresions/exceptions file will point to the repeating # event and suppress the 1st feb. # The phone uses the position within the file to give an event an id PACKET scheduleexception: 4 UINT pos "Refers to event id (position in schedule file) that this suppresses" 1 UINT day 1 UINT month 2 UINT year PACKET scheduleexceptionfile: * LIST {'elementclass': scheduleexception} +items PACKET scheduleevent: P UINT { 'constant': 60 } packet_size "Faster than packetsize()" 4 UINT pos "position within file, used as an event id" 4 LGCALDATE start 4 LGCALDATE end 1 UINT repeat 2 UINT daybitmap "which days a weekly repeat event happens on" 1 UINT { 'default': 0 } +pad2 1 UINT alarmminutes "a value of 100 indicates not set" 1 UINT alarmhours "a value of 100 indicates not set" 1 UINT alarmtype "preset alarm reminder type" 1 UINT { 'default': 0 } +snoozedelay "in minutes, not for this phone" 1 UINT ringtone 39 USTRING {'encoding': PHONE_ENCODING, 'raiseontruncate': False, 'raiseonunterminatedread': False } description PACKET schedulefile: 2 UINT numactiveitems * LIST {'elementclass': scheduleevent} +events PACKET call: 4 GPSDATE GPStime #no. of seconds since 0h 1-6-80, based off local time. 4 UINT unknown1 # different for each call 4 UINT duration #seconds, not certain about length of this field 49 USTRING {'raiseonunterminatedread': False} number 36 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 1 UINT numberlength # length of phone number 1 UINT unknown2 # set to 1 on some calls 1 UINT pbnumbertype # 1=cell, 2=home, 3=office, 4=cell2, 5=fax, 6=vmail, 0xFF=not in phone book 2 UINT unknown3 # always seems to be 0 1 UINT pbentrynum #entry number in phonebook PACKET callhistory: 4 UINT numcalls 1 UINT unknown1 * LIST {'elementclass': call} +calls ### ### SMS ### # # There are 3 types of SMS records, The inbox, outbox and unsent (pending) # Unlike other records in the phone each message is stored in a separate file # All messages are in the 'sms' directory in the root of the phone # Inbox messages are in files called 'inbox000.dat', the number 000 varies for # each message, typically there are no gaps in the numbering, but gaps can appear # if a message is deleted. # Outbox message are named 'outbox000.dat', unsent messages are named 'sf00.dat', # only two digit file name that suggests a max of 100 message for this type. # Messages in the outbox get updated when the message is received by the recipient, # they contain a delivery flag and a delivery time for all the possible 10 recipients. # The vx8100 supports SMS contatination, this allows you to send text messages that are # longer than 160 characters. The format is different for these type of messages, but # it is supported by this implementation. # The vx8100 also allows you to put small graphics, sounds and animations in a message. # This implementation does not support these, if they are contained in a message they # will be ignored and just the text will be shown when you view the message in bitpim. # The text in the the messages is stored in 7-bit characters, so they have # to be unpacked, in concatinated messages and messages with embeded graphics etc. the # format uses the GSM 03.38 specified format, a good example of this can be found at # "http://www.dreamfabric.com/sms/hello.html". # For simple messages less than 161 characters with no graphics the format is simpler, # the 7-bit characters are just packed into memory in the order they appear in the # message. PACKET msg_record: # the first few fields in this packet have something to do with the type of SMS # message contained. EMS and concatinated text are coded differently than a # simple text message 1 UINT unknown1 # 0 1 UINT binary # 0=simple text, 1=binary/concatinated 1 UINT unknown3 # 0=simple text, 1=binary/concatinated 1 UINT unknown4 # 0 1 UINT unknown6 # 2=simple text, 9=binary/concatinated 1 UINT length * LIST {'length': 219} +msg: 1 UINT byte "individual byte of message" PACKET recipient_record: 2 UINT unknown1 49 USTRING number 1 UINT status # 1 when sent, 5 when received, 2 failed to send 4 LGCALDATE timesent 4 LGCALDATE timereceived 8 DATA unknown2 PACKET sms_saved: 4 UINT outboxmsg 4 UNKNOWN pad # used for GPStime on some phones if self.outboxmsg: * sms_out outbox if not self.outboxmsg: * sms_in inbox PACKET sms_out: 4 UINT index # starting from 1, unique 1 UINT locked # 1=locked 3 UINT unknown1 # zero 4 LGCALDATE timesent # time the message was sent 21 USTRING {'encoding': PHONE_ENCODING } subject 151 DATA unknown2 1 UINT num_msg_elements # up to 10 * LIST {'elementclass': msg_record, 'length': 10} +messages 1 UINT unknown5 1 UINT priority # 0=normal, 1=high 14 DATA unknown7 49 USTRING callback * LIST {'elementclass': recipient_record,'length': 10} +recipients PACKET SMSINBOXMSGFRAGMENT: * LIST {'length': 181} +msg: # this size could be wrong 1 UINT byte "individual byte of message" PACKET sms_in: 4 UINT msg_index1 4 UINT msg_index2 # equal to the numerical part of the filename eg inbox002.dat 2 UINT unknown2 # set to 0 for simple message and 3 for binary, 9 for page 4 UINT unknown3 # set to 0 6 SMSDATE timesent 3 UINT unknown 1 UINT callback_length # 0 for no callback number 38 USTRING callback 1 UINT sender_length * LIST {'length': 38} +sender: 1 UINT byte "individual byte of senders phone number" 15 DATA unknown4 # set to zeros 4 LGCALDATE lg_time # time the message was sent 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 2 UINT unknown5 # zero 1 UINT read # 1 if message has been read, 0 otherwise 1 UINT locked # 1 if the message is locked, 0 otherwise 2 UINT unknown8 # zero 1 UINT priority # 1 if the message is high priority, 0 otherwise 5 DATA flags # message flags, read, priority, locked etc 21 USTRING {'encoding': PHONE_ENCODING } subject 1 UINT bin_header1 # 0 in simple message 1 if the message contains a binary header 1 UINT bin_header2 # 0 in simple message 9 if the message contains a binary header 2 UINT unknown6 # zeros 2 UINT multipartID # multi-part message ID, used for concatinated messages only 1 UINT bin_header3 # 0 in simple message 2 if the message contains a binary header 1 UINT num_msg_elements # max 10 elements (guessing on max here) * LIST {'length': 10} +msglengths: 1 UINT msglength "lengths of individual messages in septets" * LIST {'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT} +msgs # 181 bytes per message, uncertain on this, no multipart message available # 20 messages, 7-bit ascii for simple text. for binary header # first byte is header length not including the length byte # rest depends on content of header, not known at this time. # text alway follows the header although the format it different # than a simple SMS 437 DATA unknown5 33 USTRING senders_name 169 DATA unknown6 # ?? inlcudes senders phone number in ascii PACKET sms_quick_text: # the vx4400 has variable length NULL terminated strings null terminated in it's canned messages # file sms/mediacan000.dat, not sure about the max * LIST {} +msgs: * USTRING {'encoding': PHONE_ENCODING} msg # ### ### Text Memos ### PACKET textmemo: 151 USTRING { 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } text PACKET textmemofile: 4 UINT itemcount * LIST { 'elementclass': textmemo } +items bitpim-1.0.7+dfsg1/src/phones/p_lgvx8300.py0000644001616600161660000043776210507114324016436 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VX8300""" from common import PhoneBookBusyException from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx8100 except as noted # below from p_lgvx8100 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb BREW_FILE_SYSTEM=0 PHONE_ENCODING='iso-8859-1' NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=500 MAXCALENDARDESCRIPTION=32 CALENDAR_HAS_SEPARATE_END_TIME_AND_DATE=1 NUMEMAILS=2 NUMPHONENUMBERS=5 # need to call stat to get the file time/data broken_filelist_date=True class indexentry(BaseProtogenClass): __fields=['filename', 'size', 'date', 'type'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_filename.writetobuffer(buf) self.__field_size.writetobuffer(buf) try: self.__field_date except: self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_date.writetobuffer(buf) self.__field_type.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_filename=USTRING(**{'sizeinbytes': 256, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_filename.readfrombuffer(buf) self.__field_size=UINT(**{'sizeinbytes': 4}) self.__field_size.readfrombuffer(buf) self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_date.readfrombuffer(buf) self.__field_type=UINT(**{'sizeinbytes': 4}) self.__field_type.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'sizeinbytes': 256, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, "full pathname") def __getfield_size(self): return self.__field_size.getvalue() def __setfield_size(self, value): if isinstance(value,UINT): self.__field_size=value else: self.__field_size=UINT(value,**{'sizeinbytes': 4}) def __delfield_size(self): del self.__field_size size=property(__getfield_size, __setfield_size, __delfield_size, None) def __getfield_date(self): try: self.__field_date except: self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,UINT): self.__field_date=value else: self.__field_date=UINT(value,**{'sizeinbytes': 4, 'default': 0}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, None) def __getfield_type(self): return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,UINT): self.__field_type=value else: self.__field_type=UINT(value,**{'sizeinbytes': 4}) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, None) def iscontainer(self): return True def containerelements(self): yield ('filename', self.__field_filename, "full pathname") yield ('size', self.__field_size, None) yield ('date', self.__field_date, None) yield ('type', self.__field_type, None) class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): dict2={'elementclass': indexentry, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class pbentry(BaseProtogenClass): __fields=['serial1', 'entrysize', 'serial2', 'entrynumber', 'name', 'group', 'emails', 'ringtone', 'msgringtone', 'wallpaper', 'numbertypes', 'numbers', 'unknown'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_serial1.writetobuffer(buf) try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x181, 'constantexception': PhoneBookBusyException}) self.__field_entrysize.writetobuffer(buf) self.__field_serial2.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_group.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx8300_73, 'length': NUMEMAILS}) self.__field_emails.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 2, 'default': 0xFFFF}) self.__field_ringtone.writetobuffer(buf) try: self.__field_msgringtone except: self.__field_msgringtone=UINT(**{'sizeinbytes': 2, 'default': 0xFFFF}) self.__field_msgringtone.writetobuffer(buf) try: self.__field_wallpaper except: self.__field_wallpaper=UINT(**{'sizeinbytes': 2, 'default': 0}) self.__field_wallpaper.writetobuffer(buf) try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx8300_78, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx8300_80, 'length': NUMPHONENUMBERS}) self.__field_numbers.writetobuffer(buf) try: self.__field_unknown except: self.__field_unknown=UNKNOWN() self.__field_unknown.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x181, 'constantexception': PhoneBookBusyException}) self.__field_entrysize.readfrombuffer(buf) self.__field_serial2=UINT(**{'sizeinbytes': 4}) self.__field_serial2.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 2}) self.__field_entrynumber.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 2}) self.__field_group.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx8300_73, 'length': NUMEMAILS}) self.__field_emails.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 2, 'default': 0xFFFF}) self.__field_ringtone.readfrombuffer(buf) self.__field_msgringtone=UINT(**{'sizeinbytes': 2, 'default': 0xFFFF}) self.__field_msgringtone.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 2, 'default': 0}) self.__field_wallpaper.readfrombuffer(buf) self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx8300_78, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.readfrombuffer(buf) self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx8300_80, 'length': NUMPHONENUMBERS}) self.__field_numbers.readfrombuffer(buf) self.__field_unknown=UNKNOWN() self.__field_unknown.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_entrysize(self): try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x181, 'constantexception': PhoneBookBusyException}) return self.__field_entrysize.getvalue() def __setfield_entrysize(self, value): if isinstance(value,UINT): self.__field_entrysize=value else: self.__field_entrysize=UINT(value,**{'sizeinbytes': 2, 'constant': 0x181, 'constantexception': PhoneBookBusyException}) def __delfield_entrysize(self): del self.__field_entrysize entrysize=property(__getfield_entrysize, __setfield_entrysize, __delfield_entrysize, None) def __getfield_serial2(self): return self.__field_serial2.getvalue() def __setfield_serial2(self, value): if isinstance(value,UINT): self.__field_serial2=value else: self.__field_serial2=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial2(self): del self.__field_serial2 serial2=property(__getfield_serial2, __setfield_serial2, __delfield_serial2, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 2}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 2}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx8300_73, 'length': NUMEMAILS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_lgvx8300_73, 'length': NUMEMAILS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 2, 'default': 0xFFFF}) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 2, 'default': 0xFFFF}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "ringtone index for a call") def __getfield_msgringtone(self): try: self.__field_msgringtone except: self.__field_msgringtone=UINT(**{'sizeinbytes': 2, 'default': 0xFFFF}) return self.__field_msgringtone.getvalue() def __setfield_msgringtone(self, value): if isinstance(value,UINT): self.__field_msgringtone=value else: self.__field_msgringtone=UINT(value,**{'sizeinbytes': 2, 'default': 0xFFFF}) def __delfield_msgringtone(self): del self.__field_msgringtone msgringtone=property(__getfield_msgringtone, __setfield_msgringtone, __delfield_msgringtone, "ringtone index for a text message") def __getfield_wallpaper(self): try: self.__field_wallpaper except: self.__field_wallpaper=UINT(**{'sizeinbytes': 2, 'default': 0}) return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 2, 'default': 0}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_numbertypes(self): try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx8300_78, 'length': NUMPHONENUMBERS}) return self.__field_numbertypes.getvalue() def __setfield_numbertypes(self, value): if isinstance(value,LIST): self.__field_numbertypes=value else: self.__field_numbertypes=LIST(value,**{'elementclass': _gen_p_lgvx8300_78, 'length': NUMPHONENUMBERS}) def __delfield_numbertypes(self): del self.__field_numbertypes numbertypes=property(__getfield_numbertypes, __setfield_numbertypes, __delfield_numbertypes, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx8300_80, 'length': NUMPHONENUMBERS}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'elementclass': _gen_p_lgvx8300_80, 'length': NUMPHONENUMBERS}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_unknown(self): try: self.__field_unknown except: self.__field_unknown=UNKNOWN() return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UNKNOWN): self.__field_unknown=value else: self.__field_unknown=UNKNOWN(value,) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def iscontainer(self): return True def containerelements(self): yield ('serial1', self.__field_serial1, None) yield ('entrysize', self.__field_entrysize, None) yield ('serial2', self.__field_serial2, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('name', self.__field_name, None) yield ('group', self.__field_group, None) yield ('emails', self.__field_emails, None) yield ('ringtone', self.__field_ringtone, "ringtone index for a call") yield ('msgringtone', self.__field_msgringtone, "ringtone index for a text message") yield ('wallpaper', self.__field_wallpaper, None) yield ('numbertypes', self.__field_numbertypes, None) yield ('numbers', self.__field_numbers, None) yield ('unknown', self.__field_unknown, None) class _gen_p_lgvx8300_73(BaseProtogenClass): 'Anonymous inner class' __fields=['email'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8300_73,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8300_73: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8300_73,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8300_73,kwargs) if len(args): dict2={'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_email=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_email.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_email=USTRING(**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_email.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def iscontainer(self): return True def containerelements(self): yield ('email', self.__field_email, None) class _gen_p_lgvx8300_78(BaseProtogenClass): 'Anonymous inner class' __fields=['numbertype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8300_78,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8300_78: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8300_78,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8300_78,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_numbertype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numbertype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numbertype=UINT(**{'sizeinbytes': 1}) self.__field_numbertype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numbertype(self): return self.__field_numbertype.getvalue() def __setfield_numbertype(self, value): if isinstance(value,UINT): self.__field_numbertype=value else: self.__field_numbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_numbertype(self): del self.__field_numbertype numbertype=property(__getfield_numbertype, __setfield_numbertype, __delfield_numbertype, None) def iscontainer(self): return True def containerelements(self): yield ('numbertype', self.__field_numbertype, None) class _gen_p_lgvx8300_80(BaseProtogenClass): 'Anonymous inner class' __fields=['number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8300_80,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8300_80: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8300_80,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8300_80,kwargs) if len(args): dict2={'sizeinbytes': 49, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_number=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) class pbreadentryresponse(BaseProtogenClass): "Results of reading one entry" __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbreadentryresponse,self).__init__(**dict) if self.__class__ is pbreadentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbreadentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbreadentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbupdateentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbupdateentryrequest,self).__init__(**dict) if self.__class__ is pbupdateentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbupdateentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbupdateentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x04, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbappendentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbappendentryrequest,self).__init__(**dict) if self.__class__ is pbappendentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbappendentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbappendentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x03, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class scheduleexception(BaseProtogenClass): __fields=['pos', 'day', 'month', 'year'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexception,self).__init__(**dict) if self.__class__ is scheduleexception: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexception,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexception,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_day.writetobuffer(buf) self.__field_month.writetobuffer(buf) self.__field_year.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_day=UINT(**{'sizeinbytes': 1}) self.__field_day.readfrombuffer(buf) self.__field_month=UINT(**{'sizeinbytes': 1}) self.__field_month.readfrombuffer(buf) self.__field_year=UINT(**{'sizeinbytes': 2}) self.__field_year.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "Refers to event id (position in schedule file) that this suppresses") def __getfield_day(self): return self.__field_day.getvalue() def __setfield_day(self, value): if isinstance(value,UINT): self.__field_day=value else: self.__field_day=UINT(value,**{'sizeinbytes': 1}) def __delfield_day(self): del self.__field_day day=property(__getfield_day, __setfield_day, __delfield_day, None) def __getfield_month(self): return self.__field_month.getvalue() def __setfield_month(self, value): if isinstance(value,UINT): self.__field_month=value else: self.__field_month=UINT(value,**{'sizeinbytes': 1}) def __delfield_month(self): del self.__field_month month=property(__getfield_month, __setfield_month, __delfield_month, None) def __getfield_year(self): return self.__field_year.getvalue() def __setfield_year(self, value): if isinstance(value,UINT): self.__field_year=value else: self.__field_year=UINT(value,**{'sizeinbytes': 2}) def __delfield_year(self): del self.__field_year year=property(__getfield_year, __setfield_year, __delfield_year, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "Refers to event id (position in schedule file) that this suppresses") yield ('day', self.__field_day, None) yield ('month', self.__field_month, None) yield ('year', self.__field_year, None) class scheduleexceptionfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexceptionfile,self).__init__(**dict) if self.__class__ is scheduleexceptionfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexceptionfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexceptionfile,kwargs) if len(args): dict2={'elementclass': scheduleexception} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': scheduleexception}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class scheduleevent(BaseProtogenClass): __fields=['pos', 'description', 'start', 'end_time', 'end_date', 'repeat', 'alarmindex_vibrate', 'ringtone', 'unknown1', 'alarmminutes', 'alarmhours', 'ringpath'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleevent,self).__init__(**dict) if self.__class__ is scheduleevent: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleevent,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleevent,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_description.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end_time.writetobuffer(buf) self.__field_end_date.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) self.__field_alarmindex_vibrate.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) try: self.__field_unknown1 except: self.__field_unknown1=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_unknown1.writetobuffer(buf) self.__field_alarmminutes.writetobuffer(buf) self.__field_alarmhours.writetobuffer(buf) try: self.__field_ringpath except: self.__field_ringpath=USTRING(**{'sizeinbytes': 256, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) self.__field_ringpath.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_description=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_description.readfrombuffer(buf) self.__field_start=LGCALDATE(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_end_time.readfrombuffer(buf) self.__field_end_date=LGCALDATE(**{'sizeinbytes': 4}) self.__field_end_date.readfrombuffer(buf) self.__field_repeat=LGCALREPEAT(**{'sizeinbytes': 4}) self.__field_repeat.readfrombuffer(buf) self.__field_alarmindex_vibrate=UINT(**{'sizeinbytes': 1}) self.__field_alarmindex_vibrate.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_unknown1.readfrombuffer(buf) self.__field_alarmminutes=UINT(**{'sizeinbytes': 1}) self.__field_alarmminutes.readfrombuffer(buf) self.__field_alarmhours=UINT(**{'sizeinbytes': 1}) self.__field_alarmhours.readfrombuffer(buf) self.__field_ringpath=USTRING(**{'sizeinbytes': 256, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) self.__field_ringpath.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "position within file, used as an event id") def __getfield_description(self): return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,USTRING): self.__field_description=value else: self.__field_description=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,LGCALDATE): self.__field_start=value else: self.__field_start=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end_time(self): return self.__field_end_time.getvalue() def __setfield_end_time(self, value): if isinstance(value,LGCALDATE): self.__field_end_time=value else: self.__field_end_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_end_time(self): del self.__field_end_time end_time=property(__getfield_end_time, __setfield_end_time, __delfield_end_time, None) def __getfield_end_date(self): return self.__field_end_date.getvalue() def __setfield_end_date(self, value): if isinstance(value,LGCALDATE): self.__field_end_date=value else: self.__field_end_date=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_end_date(self): del self.__field_end_date end_date=property(__getfield_end_date, __setfield_end_date, __delfield_end_date, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,LGCALREPEAT): self.__field_repeat=value else: self.__field_repeat=LGCALREPEAT(value,**{'sizeinbytes': 4}) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_alarmindex_vibrate(self): return self.__field_alarmindex_vibrate.getvalue() def __setfield_alarmindex_vibrate(self, value): if isinstance(value,UINT): self.__field_alarmindex_vibrate=value else: self.__field_alarmindex_vibrate=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmindex_vibrate(self): del self.__field_alarmindex_vibrate alarmindex_vibrate=property(__getfield_alarmindex_vibrate, __setfield_alarmindex_vibrate, __delfield_alarmindex_vibrate, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_unknown1(self): try: self.__field_unknown1 except: self.__field_unknown1=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_alarmminutes(self): return self.__field_alarmminutes.getvalue() def __setfield_alarmminutes(self, value): if isinstance(value,UINT): self.__field_alarmminutes=value else: self.__field_alarmminutes=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmminutes(self): del self.__field_alarmminutes alarmminutes=property(__getfield_alarmminutes, __setfield_alarmminutes, __delfield_alarmminutes, "a value of 0xFF indicates not set") def __getfield_alarmhours(self): return self.__field_alarmhours.getvalue() def __setfield_alarmhours(self, value): if isinstance(value,UINT): self.__field_alarmhours=value else: self.__field_alarmhours=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmhours(self): del self.__field_alarmhours alarmhours=property(__getfield_alarmhours, __setfield_alarmhours, __delfield_alarmhours, "a value of 0xFF indicates not set") def __getfield_ringpath(self): try: self.__field_ringpath except: self.__field_ringpath=USTRING(**{'sizeinbytes': 256, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) return self.__field_ringpath.getvalue() def __setfield_ringpath(self, value): if isinstance(value,USTRING): self.__field_ringpath=value else: self.__field_ringpath=USTRING(value,**{'sizeinbytes': 256, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) def __delfield_ringpath(self): del self.__field_ringpath ringpath=property(__getfield_ringpath, __setfield_ringpath, __delfield_ringpath, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "position within file, used as an event id") yield ('description', self.__field_description, None) yield ('start', self.__field_start, None) yield ('end_time', self.__field_end_time, None) yield ('end_date', self.__field_end_date, None) yield ('repeat', self.__field_repeat, None) yield ('alarmindex_vibrate', self.__field_alarmindex_vibrate, None) yield ('ringtone', self.__field_ringtone, None) yield ('unknown1', self.__field_unknown1, None) yield ('alarmminutes', self.__field_alarmminutes, "a value of 0xFF indicates not set") yield ('alarmhours', self.__field_alarmhours, "a value of 0xFF indicates not set") yield ('ringpath', self.__field_ringpath, None) class schedulefile(BaseProtogenClass): __fields=['numactiveitems', 'events'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(schedulefile,self).__init__(**dict) if self.__class__ is schedulefile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(schedulefile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(schedulefile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{'elementclass': scheduleevent}) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('events', self.__field_events, None) class call(BaseProtogenClass): __fields=['GPStime', 'unknown2', 'duration', 'number', 'name', 'numberlength', 'pbnumbertype', 'unknown2', 'pbentrynum'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(call,self).__init__(**dict) if self.__class__ is call: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(call,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(call,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_numberlength.writetobuffer(buf) self.__field_pbnumbertype.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_pbentrynum.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 4}) self.__field_unknown2.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_numberlength=UINT(**{'sizeinbytes': 1}) self.__field_numberlength.readfrombuffer(buf) self.__field_pbnumbertype=UINT(**{'sizeinbytes': 1}) self.__field_pbnumbertype.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 5}) self.__field_unknown2.readfrombuffer(buf) self.__field_pbentrynum=UINT(**{'sizeinbytes': 2}) self.__field_pbentrynum.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numberlength(self): return self.__field_numberlength.getvalue() def __setfield_numberlength(self, value): if isinstance(value,UINT): self.__field_numberlength=value else: self.__field_numberlength=UINT(value,**{'sizeinbytes': 1}) def __delfield_numberlength(self): del self.__field_numberlength numberlength=property(__getfield_numberlength, __setfield_numberlength, __delfield_numberlength, None) def __getfield_pbnumbertype(self): return self.__field_pbnumbertype.getvalue() def __setfield_pbnumbertype(self, value): if isinstance(value,UINT): self.__field_pbnumbertype=value else: self.__field_pbnumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_pbnumbertype(self): del self.__field_pbnumbertype pbnumbertype=property(__getfield_pbnumbertype, __setfield_pbnumbertype, __delfield_pbnumbertype, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 5}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_pbentrynum(self): return self.__field_pbentrynum.getvalue() def __setfield_pbentrynum(self, value): if isinstance(value,UINT): self.__field_pbentrynum=value else: self.__field_pbentrynum=UINT(value,**{'sizeinbytes': 2}) def __delfield_pbentrynum(self): del self.__field_pbentrynum pbentrynum=property(__getfield_pbentrynum, __setfield_pbentrynum, __delfield_pbentrynum, None) def iscontainer(self): return True def containerelements(self): yield ('GPStime', self.__field_GPStime, None) yield ('unknown2', self.__field_unknown2, None) yield ('duration', self.__field_duration, None) yield ('number', self.__field_number, None) yield ('name', self.__field_name, None) yield ('numberlength', self.__field_numberlength, None) yield ('pbnumbertype', self.__field_pbnumbertype, None) yield ('unknown2', self.__field_unknown2, None) yield ('pbentrynum', self.__field_pbentrynum, None) class callhistory(BaseProtogenClass): __fields=['numcalls', 'unknown1', 'calls'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callhistory,self).__init__(**dict) if self.__class__ is callhistory: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callhistory,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callhistory,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numcalls.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numcalls=UINT(**{'sizeinbytes': 4}) self.__field_numcalls.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numcalls(self): return self.__field_numcalls.getvalue() def __setfield_numcalls(self, value): if isinstance(value,UINT): self.__field_numcalls=value else: self.__field_numcalls=UINT(value,**{'sizeinbytes': 4}) def __delfield_numcalls(self): del self.__field_numcalls numcalls=property(__getfield_numcalls, __setfield_numcalls, __delfield_numcalls, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_calls(self): try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) return self.__field_calls.getvalue() def __setfield_calls(self, value): if isinstance(value,LIST): self.__field_calls=value else: self.__field_calls=LIST(value,**{'elementclass': call}) def __delfield_calls(self): del self.__field_calls calls=property(__getfield_calls, __setfield_calls, __delfield_calls, None) def iscontainer(self): return True def containerelements(self): yield ('numcalls', self.__field_numcalls, None) yield ('unknown1', self.__field_unknown1, None) yield ('calls', self.__field_calls, None) class msg_record(BaseProtogenClass): __fields=['unknown1', 'binary', 'unknown3', 'unknown4', 'unknown6', 'length', 'msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(msg_record,self).__init__(**dict) if self.__class__ is msg_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(msg_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(msg_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_binary.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_length.writetobuffer(buf) try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8300_202, 'length': 219}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_binary=UINT(**{'sizeinbytes': 1}) self.__field_binary.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1}) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 1}) self.__field_unknown4.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 1}) self.__field_unknown6.readfrombuffer(buf) self.__field_length=UINT(**{'sizeinbytes': 1}) self.__field_length.readfrombuffer(buf) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8300_202, 'length': 219}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_binary(self): return self.__field_binary.getvalue() def __setfield_binary(self, value): if isinstance(value,UINT): self.__field_binary=value else: self.__field_binary=UINT(value,**{'sizeinbytes': 1}) def __delfield_binary(self): del self.__field_binary binary=property(__getfield_binary, __setfield_binary, __delfield_binary, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_length(self): return self.__field_length.getvalue() def __setfield_length(self, value): if isinstance(value,UINT): self.__field_length=value else: self.__field_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_length(self): del self.__field_length length=property(__getfield_length, __setfield_length, __delfield_length, None) def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8300_202, 'length': 219}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx8300_202, 'length': 219}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('binary', self.__field_binary, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) yield ('unknown6', self.__field_unknown6, None) yield ('length', self.__field_length, None) yield ('msg', self.__field_msg, None) class _gen_p_lgvx8300_202(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8300_202,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8300_202: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8300_202,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8300_202,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class recipient_record(BaseProtogenClass): __fields=['unknown1', 'number', 'status', 'timesent', 'timereceived', 'unknown2', 'unknown3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(recipient_record,self).__init__(**dict) if self.__class__ is recipient_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(recipient_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(recipient_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_timereceived.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=DATA(**{'sizeinbytes': 34}) self.__field_unknown1.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49}) self.__field_number.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_timereceived=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timereceived.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=DATA(**{'sizeinbytes': 53}) self.__field_unknown3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,DATA): self.__field_unknown1=value else: self.__field_unknown1=DATA(value,**{'sizeinbytes': 34}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_timereceived(self): return self.__field_timereceived.getvalue() def __setfield_timereceived(self, value): if isinstance(value,LGCALDATE): self.__field_timereceived=value else: self.__field_timereceived=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timereceived(self): del self.__field_timereceived timereceived=property(__getfield_timereceived, __setfield_timereceived, __delfield_timereceived, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,DATA): self.__field_unknown3=value else: self.__field_unknown3=DATA(value,**{'sizeinbytes': 53}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('number', self.__field_number, None) yield ('status', self.__field_status, None) yield ('timesent', self.__field_timesent, None) yield ('timereceived', self.__field_timereceived, None) yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) class sms_saved(BaseProtogenClass): __fields=['outboxmsg', 'GPStime', 'outbox', 'inbox'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_saved,self).__init__(**dict) if self.__class__ is sms_saved: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_saved,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_saved,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_outboxmsg.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) if self.outboxmsg: self.__field_outbox.writetobuffer(buf) if not self.outboxmsg: self.__field_inbox.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_outboxmsg=UINT(**{'sizeinbytes': 4}) self.__field_outboxmsg.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) if self.outboxmsg: self.__field_outbox=sms_out() self.__field_outbox.readfrombuffer(buf) if not self.outboxmsg: self.__field_inbox=sms_in() self.__field_inbox.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_outboxmsg(self): return self.__field_outboxmsg.getvalue() def __setfield_outboxmsg(self, value): if isinstance(value,UINT): self.__field_outboxmsg=value else: self.__field_outboxmsg=UINT(value,**{'sizeinbytes': 4}) def __delfield_outboxmsg(self): del self.__field_outboxmsg outboxmsg=property(__getfield_outboxmsg, __setfield_outboxmsg, __delfield_outboxmsg, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_outbox(self): return self.__field_outbox.getvalue() def __setfield_outbox(self, value): if isinstance(value,sms_out): self.__field_outbox=value else: self.__field_outbox=sms_out(value,) def __delfield_outbox(self): del self.__field_outbox outbox=property(__getfield_outbox, __setfield_outbox, __delfield_outbox, None) def __getfield_inbox(self): return self.__field_inbox.getvalue() def __setfield_inbox(self, value): if isinstance(value,sms_in): self.__field_inbox=value else: self.__field_inbox=sms_in(value,) def __delfield_inbox(self): del self.__field_inbox inbox=property(__getfield_inbox, __setfield_inbox, __delfield_inbox, None) def iscontainer(self): return True def containerelements(self): yield ('outboxmsg', self.__field_outboxmsg, None) yield ('GPStime', self.__field_GPStime, None) if self.outboxmsg: yield ('outbox', self.__field_outbox, None) if not self.outboxmsg: yield ('inbox', self.__field_inbox, None) class sms_out(BaseProtogenClass): __fields=['index', 'unknown1', 'locked', 'timesent', 'unknown2', 'GPStime', 'subject', 'num_msg_elements', 'messages', 'unknown1', 'priority', 'unknown5', 'callback', 'recipients', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_out,self).__init__(**dict) if self.__class__ is sms_out: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_out,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_out,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) self.__field_messages.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_callback.writetobuffer(buf) try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) self.__field_recipients.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2}) self.__field_unknown2.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 24, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) self.__field_messages.readfrombuffer(buf) self.__field_unknown1=UNKNOWN(**{'sizeinbytes': 15}) self.__field_unknown1.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_unknown5=UNKNOWN(**{'sizeinbytes': 1}) self.__field_unknown5.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 35}) self.__field_callback.readfrombuffer(buf) self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) self.__field_recipients.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 24, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_messages(self): try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) return self.__field_messages.getvalue() def __setfield_messages(self, value): if isinstance(value,LIST): self.__field_messages=value else: self.__field_messages=LIST(value,**{'elementclass': msg_record, 'length': 7}) def __delfield_messages(self): del self.__field_messages messages=property(__getfield_messages, __setfield_messages, __delfield_messages, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UNKNOWN): self.__field_unknown1=value else: self.__field_unknown1=UNKNOWN(value,**{'sizeinbytes': 15}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UNKNOWN): self.__field_unknown5=value else: self.__field_unknown5=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 35}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_recipients(self): try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) return self.__field_recipients.getvalue() def __setfield_recipients(self, value): if isinstance(value,LIST): self.__field_recipients=value else: self.__field_recipients=LIST(value,**{'elementclass': recipient_record,'length': 9}) def __delfield_recipients(self): del self.__field_recipients recipients=property(__getfield_recipients, __setfield_recipients, __delfield_recipients, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('unknown1', self.__field_unknown1, None) yield ('locked', self.__field_locked, None) yield ('timesent', self.__field_timesent, None) yield ('unknown2', self.__field_unknown2, None) yield ('GPStime', self.__field_GPStime, None) yield ('subject', self.__field_subject, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('messages', self.__field_messages, None) yield ('unknown1', self.__field_unknown1, None) yield ('priority', self.__field_priority, None) yield ('unknown5', self.__field_unknown5, None) yield ('callback', self.__field_callback, None) yield ('recipients', self.__field_recipients, None) yield ('pad', self.__field_pad, None) class SMSINBOXMSGFRAGMENT(BaseProtogenClass): __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSINBOXMSGFRAGMENT,self).__init__(**dict) if self.__class__ is SMSINBOXMSGFRAGMENT: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSINBOXMSGFRAGMENT,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSINBOXMSGFRAGMENT,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx8300_240, 'length': 181} dict2.update(kwargs) kwargs=dict2 self.__field_msg=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8300_240, 'length': 181}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8300_240, 'length': 181}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8300_240, 'length': 181}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx8300_240, 'length': 181}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class _gen_p_lgvx8300_240(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8300_240,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8300_240: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8300_240,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8300_240,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class sms_in(BaseProtogenClass): __fields=['unknown1', 'lg_time', 'unknown2', 'GPStime', 'timesent', 'callback_length', 'callback', 'sender_length', 'sender', 'unknown3', 'unknown4', 'read', 'locked', 'priority', 'subject', 'bin_header1', 'bin_header2', 'unknown7', 'multipartID', 'bin_header3', 'unknown8', 'num_msg_elements', 'msglengths', 'unknown9', 'msgs', 'unknown10'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_in,self).__init__(**dict) if self.__class__ is sms_in: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_in,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_in,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_lg_time.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_callback_length.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_sender_length.writetobuffer(buf) try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx8300_252, 'length': 38}) self.__field_sender.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_bin_header1.writetobuffer(buf) self.__field_bin_header2.writetobuffer(buf) self.__field_unknown7.writetobuffer(buf) self.__field_multipartID.writetobuffer(buf) self.__field_bin_header3.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx8300_267, 'length': 10}) self.__field_msglengths.writetobuffer(buf) self.__field_unknown9.writetobuffer(buf) try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.writetobuffer(buf) self.__field_unknown10.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_unknown1.readfrombuffer(buf) self.__field_lg_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_lg_time.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_timesent=SMSDATE(**{'sizeinbytes': 6}) self.__field_timesent.readfrombuffer(buf) self.__field_callback_length=UINT(**{'sizeinbytes': 1}) self.__field_callback_length.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 39}) self.__field_callback.readfrombuffer(buf) self.__field_sender_length=UINT(**{'sizeinbytes': 1}) self.__field_sender_length.readfrombuffer(buf) self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx8300_252, 'length': 38}) self.__field_sender.readfrombuffer(buf) self.__field_unknown3=DATA(**{'sizeinbytes': 12}) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=UNKNOWN(**{'sizeinbytes': 6}) self.__field_unknown4.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 1}) self.__field_read.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 24, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_bin_header1=UINT(**{'sizeinbytes': 1}) self.__field_bin_header1.readfrombuffer(buf) self.__field_bin_header2=UINT(**{'sizeinbytes': 1}) self.__field_bin_header2.readfrombuffer(buf) self.__field_unknown7=UINT(**{'sizeinbytes': 1}) self.__field_unknown7.readfrombuffer(buf) self.__field_multipartID=UINT(**{'sizeinbytes': 2}) self.__field_multipartID.readfrombuffer(buf) self.__field_bin_header3=UINT(**{'sizeinbytes': 1}) self.__field_bin_header3.readfrombuffer(buf) self.__field_unknown8=UINT(**{'sizeinbytes': 5}) self.__field_unknown8.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx8300_267, 'length': 10}) self.__field_msglengths.readfrombuffer(buf) self.__field_unknown9=UNKNOWN(**{'sizeinbytes': 10}) self.__field_unknown9.readfrombuffer(buf) self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.readfrombuffer(buf) self.__field_unknown10=UNKNOWN() self.__field_unknown10.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UNKNOWN): self.__field_unknown1=value else: self.__field_unknown1=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_lg_time(self): return self.__field_lg_time.getvalue() def __setfield_lg_time(self, value): if isinstance(value,LGCALDATE): self.__field_lg_time=value else: self.__field_lg_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_lg_time(self): del self.__field_lg_time lg_time=property(__getfield_lg_time, __setfield_lg_time, __delfield_lg_time, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,SMSDATE): self.__field_timesent=value else: self.__field_timesent=SMSDATE(value,**{'sizeinbytes': 6}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_callback_length(self): return self.__field_callback_length.getvalue() def __setfield_callback_length(self, value): if isinstance(value,UINT): self.__field_callback_length=value else: self.__field_callback_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_length(self): del self.__field_callback_length callback_length=property(__getfield_callback_length, __setfield_callback_length, __delfield_callback_length, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 39}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_sender_length(self): return self.__field_sender_length.getvalue() def __setfield_sender_length(self, value): if isinstance(value,UINT): self.__field_sender_length=value else: self.__field_sender_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_sender_length(self): del self.__field_sender_length sender_length=property(__getfield_sender_length, __setfield_sender_length, __delfield_sender_length, None) def __getfield_sender(self): try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx8300_252, 'length': 38}) return self.__field_sender.getvalue() def __setfield_sender(self, value): if isinstance(value,LIST): self.__field_sender=value else: self.__field_sender=LIST(value,**{'elementclass': _gen_p_lgvx8300_252, 'length': 38}) def __delfield_sender(self): del self.__field_sender sender=property(__getfield_sender, __setfield_sender, __delfield_sender, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,DATA): self.__field_unknown3=value else: self.__field_unknown3=DATA(value,**{'sizeinbytes': 12}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UNKNOWN): self.__field_unknown4=value else: self.__field_unknown4=UNKNOWN(value,**{'sizeinbytes': 6}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 1}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 24, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_bin_header1(self): return self.__field_bin_header1.getvalue() def __setfield_bin_header1(self, value): if isinstance(value,UINT): self.__field_bin_header1=value else: self.__field_bin_header1=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header1(self): del self.__field_bin_header1 bin_header1=property(__getfield_bin_header1, __setfield_bin_header1, __delfield_bin_header1, None) def __getfield_bin_header2(self): return self.__field_bin_header2.getvalue() def __setfield_bin_header2(self, value): if isinstance(value,UINT): self.__field_bin_header2=value else: self.__field_bin_header2=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header2(self): del self.__field_bin_header2 bin_header2=property(__getfield_bin_header2, __setfield_bin_header2, __delfield_bin_header2, None) def __getfield_unknown7(self): return self.__field_unknown7.getvalue() def __setfield_unknown7(self, value): if isinstance(value,UINT): self.__field_unknown7=value else: self.__field_unknown7=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown7(self): del self.__field_unknown7 unknown7=property(__getfield_unknown7, __setfield_unknown7, __delfield_unknown7, None) def __getfield_multipartID(self): return self.__field_multipartID.getvalue() def __setfield_multipartID(self, value): if isinstance(value,UINT): self.__field_multipartID=value else: self.__field_multipartID=UINT(value,**{'sizeinbytes': 2}) def __delfield_multipartID(self): del self.__field_multipartID multipartID=property(__getfield_multipartID, __setfield_multipartID, __delfield_multipartID, None) def __getfield_bin_header3(self): return self.__field_bin_header3.getvalue() def __setfield_bin_header3(self, value): if isinstance(value,UINT): self.__field_bin_header3=value else: self.__field_bin_header3=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header3(self): del self.__field_bin_header3 bin_header3=property(__getfield_bin_header3, __setfield_bin_header3, __delfield_bin_header3, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,UINT): self.__field_unknown8=value else: self.__field_unknown8=UINT(value,**{'sizeinbytes': 5}) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_msglengths(self): try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx8300_267, 'length': 10}) return self.__field_msglengths.getvalue() def __setfield_msglengths(self, value): if isinstance(value,LIST): self.__field_msglengths=value else: self.__field_msglengths=LIST(value,**{'elementclass': _gen_p_lgvx8300_267, 'length': 10}) def __delfield_msglengths(self): del self.__field_msglengths msglengths=property(__getfield_msglengths, __setfield_msglengths, __delfield_msglengths, None) def __getfield_unknown9(self): return self.__field_unknown9.getvalue() def __setfield_unknown9(self, value): if isinstance(value,UNKNOWN): self.__field_unknown9=value else: self.__field_unknown9=UNKNOWN(value,**{'sizeinbytes': 10}) def __delfield_unknown9(self): del self.__field_unknown9 unknown9=property(__getfield_unknown9, __setfield_unknown9, __delfield_unknown9, None) def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def __getfield_unknown10(self): return self.__field_unknown10.getvalue() def __setfield_unknown10(self, value): if isinstance(value,UNKNOWN): self.__field_unknown10=value else: self.__field_unknown10=UNKNOWN(value,) def __delfield_unknown10(self): del self.__field_unknown10 unknown10=property(__getfield_unknown10, __setfield_unknown10, __delfield_unknown10, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('lg_time', self.__field_lg_time, None) yield ('unknown2', self.__field_unknown2, None) yield ('GPStime', self.__field_GPStime, None) yield ('timesent', self.__field_timesent, None) yield ('callback_length', self.__field_callback_length, None) yield ('callback', self.__field_callback, None) yield ('sender_length', self.__field_sender_length, None) yield ('sender', self.__field_sender, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) yield ('read', self.__field_read, None) yield ('locked', self.__field_locked, None) yield ('priority', self.__field_priority, None) yield ('subject', self.__field_subject, None) yield ('bin_header1', self.__field_bin_header1, None) yield ('bin_header2', self.__field_bin_header2, None) yield ('unknown7', self.__field_unknown7, None) yield ('multipartID', self.__field_multipartID, None) yield ('bin_header3', self.__field_bin_header3, None) yield ('unknown8', self.__field_unknown8, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('msglengths', self.__field_msglengths, None) yield ('unknown9', self.__field_unknown9, None) yield ('msgs', self.__field_msgs, None) yield ('unknown10', self.__field_unknown10, None) class _gen_p_lgvx8300_252(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8300_252,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8300_252: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8300_252,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8300_252,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of senders phone number") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of senders phone number") class _gen_p_lgvx8300_267(BaseProtogenClass): 'Anonymous inner class' __fields=['msglength'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8300_267,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8300_267: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8300_267,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8300_267,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_msglength=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msglength.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msglength=UINT(**{'sizeinbytes': 1}) self.__field_msglength.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msglength(self): return self.__field_msglength.getvalue() def __setfield_msglength(self, value): if isinstance(value,UINT): self.__field_msglength=value else: self.__field_msglength=UINT(value,**{'sizeinbytes': 1}) def __delfield_msglength(self): del self.__field_msglength msglength=property(__getfield_msglength, __setfield_msglength, __delfield_msglength, "lengths of individual messages in septets") def iscontainer(self): return True def containerelements(self): yield ('msglength', self.__field_msglength, "lengths of individual messages in septets") class sms_quick_text(BaseProtogenClass): __fields=['msgs'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_quick_text,self).__init__(**dict) if self.__class__ is sms_quick_text: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_quick_text,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_quick_text,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx8300_280, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_msgs=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx8300_280, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) self.__field_msgs.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx8300_280, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) self.__field_msgs.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx8300_280, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'elementclass': _gen_p_lgvx8300_280, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def iscontainer(self): return True def containerelements(self): yield ('msgs', self.__field_msgs, None) class _gen_p_lgvx8300_280(BaseProtogenClass): 'Anonymous inner class' __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8300_280,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8300_280: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8300_280,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8300_280,kwargs) if len(args): dict2={'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""} dict2.update(kwargs) kwargs=dict2 self.__field_msg=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class textmemo(BaseProtogenClass): __fields=['text', 'dunno', 'memotime'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemo,self).__init__(**dict) if self.__class__ is textmemo: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemo,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemo,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_text.writetobuffer(buf) try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default' : 0x1000000}) self.__field_dunno.writetobuffer(buf) self.__field_memotime.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_text=USTRING(**{'sizeinbytes': 152, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_text.readfrombuffer(buf) self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default' : 0x1000000}) self.__field_dunno.readfrombuffer(buf) self.__field_memotime=LGCALDATE(**{'sizeinbytes': 4}) self.__field_memotime.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,USTRING): self.__field_text=value else: self.__field_text=USTRING(value,**{'sizeinbytes': 152, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def __getfield_dunno(self): try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default' : 0x1000000}) return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 4, 'default' : 0x1000000}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def __getfield_memotime(self): return self.__field_memotime.getvalue() def __setfield_memotime(self, value): if isinstance(value,LGCALDATE): self.__field_memotime=value else: self.__field_memotime=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_memotime(self): del self.__field_memotime memotime=property(__getfield_memotime, __setfield_memotime, __delfield_memotime, None) def iscontainer(self): return True def containerelements(self): yield ('text', self.__field_text, None) yield ('dunno', self.__field_dunno, None) yield ('memotime', self.__field_memotime, None) class textmemofile(BaseProtogenClass): __fields=['itemcount', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemofile,self).__init__(**dict) if self.__class__ is textmemofile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemofile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemofile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_itemcount.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_itemcount=UINT(**{'sizeinbytes': 4}) self.__field_itemcount.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_itemcount(self): return self.__field_itemcount.getvalue() def __setfield_itemcount(self, value): if isinstance(value,UINT): self.__field_itemcount=value else: self.__field_itemcount=UINT(value,**{'sizeinbytes': 4}) def __delfield_itemcount(self): del self.__field_itemcount itemcount=property(__getfield_itemcount, __setfield_itemcount, __delfield_itemcount, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': textmemo }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('itemcount', self.__field_itemcount, None) yield ('items', self.__field_items, None) bitpim-1.0.7+dfsg1/src/phones/p_lgvx4500.p0000644001616600161660000002677010442561507016243 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lgvx4500.p 3352 2006-06-10 15:20:39Z skyjunky $ %{ """Various descriptions of data specific to LG VX4500""" from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx4400 except as noted # below from p_lgvx4400 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=500 MAXCALENDARDESCRIPTION=38 NUMEMAILS=3 NUMPHONENUMBERS=5 MEMOLENGTH=65 # Calendar parameters NUMCALENDARENTRIES=300 CAL_REP_NONE=0x10 CAL_REP_DAILY=0x11 CAL_REP_MONFRI=0x12 CAL_REP_WEEKLY=0x13 CAL_REP_MONTHLY=0x14 CAL_REP_YEARLY=0x15 CAL_DOW_SUN=0x0800 CAL_DOW_MON=0x0400 CAL_DOW_TUE=0x0200 CAL_DOW_WED=0x0100 CAL_DOW_THU=0x0080 CAL_DOW_FRI=0x0040 CAL_DOW_SAT=0x0020 CAL_DOW_EXCEPTIONS=0x0010 CAL_REMINDER_NONE=0 CAL_REMINDER_ONTIME=1 CAL_REMINDER_5MIN=2 CAL_REMINDER_10MIN=3 CAL_REMINDER_1HOUR=4 CAL_REMINDER_1DAY=5 CAL_REMINDER_2DAYS=6 CAL_NO_VOICE=0xffff CAL_REPEAT_DATE=(2100, 12, 31) cal_dir='sch' cal_voice_ext='.qcp' # full name='sche000.qcp' cal_data_file_name='sch/schedule.dat' cal_exception_file_name='sch/schexception.dat' cal_voice_id_ofs=0x0f cal_has_voice_id=True %} PACKET speeddial: 2 UINT {'default': 0xffff} +entry 1 UINT {'default': 0xff} +number PACKET speeddials: * LIST {'length': NUMSPEEDDIALS, 'elementclass': speeddial} +speeddials PACKET indexentry: 2 UINT {'default': 0xffff} +index 50 USTRING {'default': ""} +name PACKET indexfile: "Used for tracking wallpaper and ringtones" # A bit of a silly design again. Entries with an index of 0xffff are # 'blank'. Thus it is possible for numactiveitems and the actual # number of valid entries to be mismatched. 2 UINT numactiveitems * LIST {'elementclass': indexentry, 'createdefault': True} +items # All STRINGS have raiseonterminatedread as False since the phone does # occassionally leave out the terminator byte # Note if you change the length of any of these fields, you also # need to modify com_lgvx4500 to give a different truncateat parameter # in the convertphonebooktophone method PACKET pbentry: 4 UINT serial1 2 UINT entrysize 4 UINT serial2 2 UINT entrynumber 23 USTRING {'raiseonunterminatedread': False} name 2 UINT group * LIST {'length': NUMEMAILS} +emails: 49 USTRING {'raiseonunterminatedread': False} email 49 USTRING {'raiseonunterminatedread': False} url 1 UINT ringtone "ringtone index for a call" 1 UINT msgringtone "ringtone index for a text message" 1 BOOL secret * USTRING {'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH} memo 1 UINT wallpaper * LIST {'length': NUMPHONENUMBERS} +numbertypes: 1 UINT numbertype * LIST {'length': NUMPHONENUMBERS} +numbers: 49 USTRING {'raiseonunterminatedread': False} number * UNKNOWN +unknown20c PACKET pbreadentryresponse: "Results of reading one entry" * pbheader header * pbentry entry PACKET pbupdateentryrequest: * pbheader {'command': 0x04, 'flag': 0x01} +header * pbentry entry PACKET pbappendentryrequest: * pbheader {'command': 0x03, 'flag': 0x01} +header * pbentry entry ### ### The calendar ### # # The calendar consists of one file listing events and an exception # file that lists exceptions. These exceptions suppress a particular # instance of a repeated event. For example, if you setup something # to happen monthly, but changed the 1st february event, then the # schedule will contain the repeating event, and the 1st feb one, # and the suppresions/exceptions file will point to the repeating # event and suppress the 1st feb. # The phone uses the position within the file to give an event an id PACKET scheduleexception: 4 UINT pos "Refers to event id (position in schedule file) that this suppresses" 1 UINT day 1 UINT month 2 UINT year PACKET scheduleexceptionfile: * LIST {'elementclass': scheduleexception} +items PACKET scheduleevent: 4 UINT pos "position within file, used as an event id" 4 LGCALDATE start 4 LGCALDATE end 1 UINT repeat 2 UINT daybitmap "which days a weekly repeat event happens on" 1 UINT { 'default': 0 } +pad2 1 UINT alarmminutes "a value of 100 indicates not set" 1 UINT alarmhours "a value of 100 indicates not set" 1 UINT alarmtype "preset alarm reminder type" 1 UINT { 'default': 0 } +snoozedelay "in minutes, not for this phone" 1 UINT ringtone 37 USTRING {'raiseontruncate': False, 'raiseonunterminatedread': False } description 2 UINT hasvoice 2 UINT voiceid 2 UINT { 'default': 0 } +pad3 PACKET schedulefile: 2 UINT numactiveitems * LIST {'elementclass': scheduleevent} +events PACKET call: 4 GPSDATE GPStime #no. of seconds since 0h 1-6-80, based off local time. 4 UINT unknown1 # different for each call 4 UINT duration #seconds, not certain about length of this field 49 USTRING {'raiseonunterminatedread': False} number 36 USTRING {'raiseonunterminatedread': False} name 1 UINT numberlength # length of phone number 1 UINT unknown2 # set to 1 on some calls 1 UINT pbnumbertype # 1=cell, 2=home, 3=office, 4=cell2, 5=fax, 6=vmail, 0xFF=not in phone book 2 UINT unknown3 # always seems to be 0 2 UINT pbentrynum #entry number in phonebook PACKET callhistory: 4 UINT numcalls 1 UINT unknown1 * LIST {'elementclass': call} +calls PACKET firmwareresponse: 1 UINT command 11 USTRING {'terminator': None} date1 8 USTRING {'terminator': None} time1 11 USTRING {'terminator': None} date2 8 USTRING {'terminator': None} time2 8 USTRING {'terminator': None} firmware ### ### SMS ### # # There are 3 types of SMS records, The inbox, outbox and unsent (pending) # Unlike other records in the phone each message is stored in a separate file # All messages are in the 'sms' directory in the root of the phone # Inbox messages are in files called 'inbox000.dat', the number 000 varies for # each message, typically there are no gaps in the numbering, but gaps can appear # if a message is deleted. # Outbox message are named 'outbox000.dat', unsent messages are named 'sf00.dat', # only two digit file name that suggests a max of 100 message for this type. # Messages in the outbox get updated when the message is received by the recipient, # they contain a delivery flag and a delivery time for all the possible 10 recipients. # The vx8100 supports SMS contatination, this allows you to send text messages that are # longer than 160 characters. The format is different for these type of messages, but # it is supported by this implementation. # The vx8100 also allows you to put small graphics, sounds and animations in a message. # This implementation does not support these, if they are contained in a message they # will be ignored and just the text will be shown when you view the message in bitpim. # The text in the the messages is stored in 7-bit characters, so they have # to be unpacked, in concatinated messages and messages with embeded graphics etc. the # format uses the GSM 03.38 specified format, a good example of this can be found at # "http://www.dreamfabric.com/sms/hello.html". # For simple messages less than 161 characters with no graphics the format is simpler, # the 7-bit characters are just packed into memory in the order they appear in the # message. PACKET msg_record: # the first few fields in this packet have something to do with the type of SMS # message contained. EMS and concatinated text are coded differently than a # simple text message 1 UINT unknown1 # 0 1 UINT binary # 0=simple text, 1=binary/concatinated 1 UINT unknown3 # 0=simple text, 1=binary/concatinated 1 UINT unknown4 # 0 1 UINT unknown6 # 2=simple text, 9=binary/concatinated 1 UINT length * LIST {'length': 219} +msg: 1 UINT byte "individual byte of message" PACKET recipient_record: 49 USTRING number 1 UINT status # 1 when sent, 5 when received, 2 failed to send 4 LGCALDATE timesent 4 LGCALDATE timereceived 54 DATA unknown2 PACKET sms_saved: 4 UINT outboxmsg 4 UNKNOWN pad # used for GPStime on some phones if self.outboxmsg: * sms_out outbox if not self.outboxmsg: * sms_in inbox PACKET sms_out: 4 UINT index # starting from 1, unique 1 UINT locked # 1=locked 3 UINT unknown1 # zero 4 LGCALDATE timesent # time the message was sent 21 USTRING subject 1 DATA unknown2 1 UINT num_msg_elements # up to 10 * LIST {'elementclass': msg_record, 'length': 7} +messages 18 UINT unknown5 1 UINT priority # 0=normal, 1=high 23 USTRING callback 14 DATA unknown6 * LIST {'elementclass': recipient_record,'length': 9} +recipients * DATA unknown7 PACKET SMSINBOXMSGFRAGMENT: * LIST {'length': 181} +msg: # this size could be wrong 1 UINT byte "individual byte of message" PACKET sms_in: 4 UINT msg_index1 4 UINT msg_index2 # equal to the numerical part of the filename eg inbox002.dat 2 UINT unknown2 # set to 0 for simple message and 3 for binary, 9 for page 4 UINT unknown3 # set to 0 6 SMSDATE timesent 3 UINT unknown 1 UINT callback_length # 0 for no callback number 38 USTRING callback 1 UINT sender_length * LIST {'length': 38} +sender: 1 UINT byte "individual byte of senders phone number" 15 DATA unknown4 # set to zeros 4 LGCALDATE lg_time # time the message was sent 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 2 UINT unknown5 # zero 1 UINT read # 1 if message has been read, 0 otherwise 1 UINT locked # 1 if the message is locked, 0 otherwise 2 UINT unknown8 # zero 1 UINT priority # 1 if the message is high priority, 0 otherwise 5 DATA flags # message flags, read, priority, locked etc 21 USTRING subject 1 UINT bin_header1 # 0 in simple message 1 if the message contains a binary header 1 UINT bin_header2 # 0 in simple message 9 if the message contains a binary header 2 UINT unknown6 # zeros 2 UINT multipartID # multi-part message ID, used for concatinated messages only 1 UINT bin_header3 # 0 in simple message 2 if the message contains a binary header 1 UINT unknown9 1 UINT num_msg_elements # max 10 elements (guessing on max here) * LIST {'length': 10} +msglengths: 1 UINT msglength "lengths of individual messages in septets" 10 UINT unknown10 * LIST {'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT} +msgs # 181 bytes per message, uncertain on this, no multipart message available # 20 messages, 7-bit ascii for simple text. for binary header # first byte is header length not including the length byte # rest depends on content of header, not known at this time. # text alway follows the header although the format it different # than a simple SMS * DATA unknown5 PACKET sms_quick_text: # the vx4400 has variable length NULL terminated strings null terminated in it's canned messages # file sms/mediacan000.dat, not sure about the max * LIST {} +msgs: * USTRING {} msg # bitpim-1.0.7+dfsg1/src/phones/p_lgvx4600.p0000644001616600161660000000527110442561507016235 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lgvx4600.p 3352 2006-06-10 15:20:39Z skyjunky $ %{ """Various descriptions of data specific to LG VX4600""" from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx4400 except as noted # below from p_lgvx4400 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=1 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=500 MAXCALENDARDESCRIPTION=38 NUMEMAILS=1 NUMPHONENUMBERS=5 MEMOLENGTH=49 %} # desc file used for wallpaper and ringtone indices PACKET mediadesc: 4 UINT totalsize "media file size with size of this file (156 bytes) added" 4 UINT {'constant': 0} +dunno1 4 UINT index "index number" 4 UINT {'default': 0x7824c97a} +magic1 "probably a date" 4 UINT {'default': 0x7824c97a} +magic2 "probably a date" 4 UINT {'default': 0x7824c97a} +magic3 "probably a date" 4 UINT {'constant': 0} +dunno2 32 USTRING {'default': 'body'} filename 32 USTRING {'default': 'identity'} +whoknows 32 USTRING mimetype 32 USTRING {'default': ""} +whoknows2 # All STRINGS have raiseonterminatedread as False since the phone does # occassionally leave out the terminator byte # Note if you change the length of any of these fields, you also # need to modify com_lgvx4600 to give a different truncateat parameter # in the convertphonebooktophone method PACKET pbentry: 4 UINT serial1 2 UINT {'constant': 0x0190} +entrysize 4 UINT serial2 2 UINT entrynumber 23 USTRING {'raiseonunterminatedread': False} name 2 UINT group * LIST {'length': NUMEMAILS} +emails: 73 USTRING {'raiseonunterminatedread': False} email 72 USTRING {'raiseonunterminatedread': False} url 2 UINT ringtone "ringtone index for a call" 1 BOOL secret * USTRING {'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH} memo 2 UINT wallpaper * LIST {'length': NUMPHONENUMBERS} +numbertypes: 1 UINT numbertype * LIST {'length': NUMPHONENUMBERS} +numbers: 33 USTRING {'raiseonunterminatedread': False} number * UNKNOWN +unknown20c PACKET pbreadentryresponse: "Results of reading one entry" * pbheader header * pbentry entry PACKET pbupdateentryrequest: * pbheader {'command': 0x04, 'flag': 0x01} +header * pbentry entry PACKET pbappendentryrequest: * pbheader {'command': 0x03, 'flag': 0x01} +header * pbentry entry bitpim-1.0.7+dfsg1/src/phones/p_lgvx4650.p0000644001616600161660000003033110450373160016230 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lgvx4650.p 3434 2006-06-28 03:24:32Z skyjunky $ %{ """Various descriptions of data specific to LG VX4650""" from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx4400 except as noted # below from p_lgvx4400 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMPHONEBOOKENTRIES=500 pb_file_name='pim/pbentry.dat' # Calendar parameters NUMCALENDARENTRIES=300 CAL_REP_NONE=0x10 CAL_REP_DAILY=0x11 CAL_REP_MONFRI=0x12 CAL_REP_WEEKLY=0x13 CAL_REP_MONTHLY=0x14 CAL_REP_YEARLY=0x15 CAL_DOW_SUN=0x0800 CAL_DOW_MON=0x0400 CAL_DOW_TUE=0x0200 CAL_DOW_WED=0x0100 CAL_DOW_THU=0x0080 CAL_DOW_FRI=0x0040 CAL_DOW_SAT=0x0020 CAL_DOW_EXCEPTIONS=0x0010 CAL_REMINDER_NONE=0 CAL_REMINDER_ONTIME=1 CAL_REMINDER_5MIN=2 CAL_REMINDER_10MIN=3 CAL_REMINDER_1HOUR=4 CAL_REMINDER_1DAY=5 CAL_REMINDER_2DAYS=6 CAL_NO_VOICE=0xffff CAL_REPEAT_DATE=(2100, 12, 31) cal_dir='sch' cal_voice_ext='.qcp' # full name='sche000.qcp' cal_data_file_name='sch/schedule.dat' cal_exception_file_name='sch/schexception.dat' cal_voice_id_ofs=0x0f cal_has_voice_id=True # Text Memo const text_memo_file='sch/memo.dat' # Call History const incoming_call_file='pim/incoming_log.dat' outgoing_call_file='pim/outgoing_log.dat' missed_call_file='pim/missed_log.dat' # SMS const sms_dir='sms' sms_ext='.dat' sms_inbox_prefix='sms/inbox' sms_inbox_name_len=len(sms_inbox_prefix)+3+len(sms_ext) sms_saved_prefix='sms/sf' sms_saved_name_len=len(sms_saved_prefix)+2+len(sms_ext) sms_outbox_prefix='sms/outbox' sms_outbox_name_len=len(sms_outbox_prefix)+3+len(sms_ext) sms_canned_file='sms/mediacan000.dat' SMS_CANNED_MAX_ITEMS=18 PHONE_ENCODING='iso8859_1' %} PACKET firmwarerequest: 1 UINT {'constant': 0x00} +command PACKET firmwareresponse: 1 UINT command 11 USTRING {'terminator': None} date1 8 USTRING {'terminator': None} time1 11 USTRING {'terminator': None} date2 8 USTRING {'terminator': None} time2 8 USTRING {'terminator': None} firmwareversion * DATA dunno PACKET speeddial: 2 UINT {'default': 0xff} +entry 1 UINT {'default': 0xff} +number PACKET speeddials: * LIST {'length': NUMSPEEDDIALS, 'elementclass': speeddial} +speeddials PACKET pbreadentryresponse: "Results of reading one entry" * pbheader header * pbentry entry PACKET pbupdateentryrequest: * pbheader {'command': 0x04, 'flag': 0x01} +header * pbentry entry PACKET pbappendentryrequest: * pbheader {'command': 0x03, 'flag': 0x01} +header * pbentry entry # All STRINGS have raiseonterminatedread as False since the phone does # occassionally leave out the terminator byte # Note if you change the length of any of these fields, you also # need to modify com_lgvx4400 to give a different truncateat parameter # in the convertphonebooktophone method PACKET pbentry: 4 UINT serial1 2 UINT {'constant': 0x0202} +entrysize 4 UINT serial2 2 UINT entrynumber 23 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 2 UINT group * LIST {'length': NUMEMAILS} +emails: 49 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} email 49 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} url 1 UINT ringtone "ringtone index for a call" 1 UINT msgringtone "ringtone index for a text message" 1 BOOL secret * USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH} memo 1 UINT wallpaper * LIST {'length': NUMPHONENUMBERS} +numbertypes: 1 UINT numbertype * LIST {'length': NUMPHONENUMBERS} +numbers: 49 USTRING {'raiseonunterminatedread': False} number * UNKNOWN +unknown20c PACKET pbfileentry: 4 UINT serial1 25 UNKNOWN data1 2 UINT group 232 UNKNOWN data2 1 UINT wallpaper 15 UNKNOWN data3 PACKET pbfile: * LIST { 'elementclass': pbfileentry } items PACKET indexentry: 2 UINT {'default': 0xffff} +index 45 USTRING {'default': ""} +name PACKET indexfile: "Used for tracking wallpaper and ringtones" # A bit of a silly design again. Entries with an index of 0xffff are # 'blank'. Thus it is possible for numactiveitems and the actual # number of valid entries to be mismatched. P UINT {'constant': 30} maxitems 2 UINT numactiveitems * LIST {'length': self.maxitems, 'elementclass': indexentry, 'createdefault': True} +items ### ### The calendar ### # # The calendar consists of one file listing events and an exception # file that lists exceptions. These exceptions suppress a particular # instance of a repeated event. For example, if you setup something # to happen monthly, but changed the 1st february event, then the # schedule will contain the repeating event, and the 1st feb one, # and the suppresions/exceptions file will point to the repeating # event and suppress the 1st feb. # The phone uses the position within the file to give an event an id PACKET scheduleexception: 4 UINT pos "Refers to event id (position in schedule file) that this suppresses" 1 UINT day 1 UINT month 2 UINT year PACKET scheduleexceptionfile: * LIST {'elementclass': scheduleexception} +items ## The VX4650 has the 4 bytes (unknown) below PACKET scheduleevent: ## P UINT { 'constant': 64 } packet_size "Faster than packetsize()" 4 UINT pos "position within file, used as an event id" 4 UINT { 'default': 0 } +pad1 4 LGCALDATE start 4 LGCALDATE end 1 UINT repeat 2 UINT daybitmap "which days a weekly repeat event happens on" 1 UINT { 'default': 0 } +pad2 1 UINT alarmminutes "a value of 100 indicates not set" 1 UINT alarmhours "a value of 100 indicates not set" 1 UINT alarmtype "preset alarm reminder type" 1 UINT { 'default': 0 } +snoozedelay "in minutes, not for this phone" 1 UINT ringtone 36 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } description 1 UINT hasvoice 2 UINT voiceid PACKET schedulefile: 2 UINT numactiveitems * LIST {'elementclass': scheduleevent} +events # Text Memos PACKET textmemo: 151 USTRING { 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } text PACKET textmemofile: 4 UINT itemcount * LIST { 'elementclass': textmemo } +items # calling history file PACKET callentry: 4 GPSDATE datetime 4 UNKNOWN pad1 4 UINT duration 49 USTRING { 'raiseonunterminatedread': False } number 36 USTRING { 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False } name 60 UNKNOWN pad2 PACKET callhistoryfile: 4 UINT itemcount 1 UNKNOWN pad1 * LIST { 'elementclass': callentry } +items PACKET SMSCannedMsg: 101 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' } +text PACKET SMSCannedFile: * LIST { 'length': SMS_CANNED_MAX_ITEMS, 'elementclass': SMSCannedMsg } +items ### ### SMS ### # # There are 3 types of SMS records, The inbox, outbox and unsent (pending) # Unlike other records in the phone each message is stored in a separate file # All messages are in the 'sms' directory in the root of the phone # Inbox messages are in files called 'inbox000.dat', the number 000 varies for # each message, typically there are no gaps in the numbering, but gaps can appear # if a message is deleted. # Outbox message are named 'outbox000.dat', unsent messages are named 'sf00.dat', # only two digit file name that suggests a max of 100 message for this type. # Messages in the outbox get updated when the message is received by the recipient, # they contain a delivery flag and a delivery time for all the possible 10 recipients. # The vx8100 supports SMS contatination, this allows you to send text messages that are # longer than 160 characters. The format is different for these type of messages, but # it is supported by this implementation. # The vx8100 also allows you to put small graphics, sounds and animations in a message. # This implementation does not support these, if they are contained in a message they # will be ignored and just the text will be shown when you view the message in bitpim. # The text in the the messages is stored in 7-bit characters, so they have # to be unpacked, in concatinated messages and messages with embeded graphics etc. the # format uses the GSM 03.38 specified format, a good example of this can be found at # "http://www.dreamfabric.com/sms/hello.html". # For simple messages less than 161 characters with no graphics the format is simpler, # the 7-bit characters are just packed into memory in the order they appear in the # message. PACKET msg_record: # the first few fields in this packet have something to do with the type of SMS # message contained. EMS and concatinated text are coded differently than a # simple text message 1 UINT binary # 0=simple text, 1=binary/concatinated 1 UINT unknown3 # 0=simple text, 1=binary/concatinated 1 UINT unknown4 # 0 1 UINT unknown6 # 2=simple text, 9=binary/concatinated 1 UINT length * LIST {'length': 220} +msg: 1 UINT byte "individual byte of message" PACKET recipient_record: 49 USTRING number 2 UINT status # 1 when sent, 5 when received, 2 failed to send 4 LGCALDATE timesent 4 LGCALDATE timereceived 49 UNKNOWN unknown2 PACKET sms_saved: 4 UINT outboxmsg 4 UNKNOWN pad if self.outboxmsg: * sms_out outbox if not self.outboxmsg: * sms_in inbox PACKET sms_out: 4 UINT index # starting from 1, unique 1 UINT locked # 1=locked 4 LGCALDATE timesent # time the message was sent 21 USTRING subject 2 UINT num_msg_elements # up to 10 * LIST {'elementclass': msg_record, 'length': 7} +messages 15 UNKNOWN unknown1 1 UINT priority # 0=normal, 1=high 35 USTRING callback * LIST {'elementclass': recipient_record,'length': 9} +recipients * UNKNOWN pad PACKET SMSINBOXMSGFRAGMENT: * LIST {'length': 181} +msg: # this size could be wrong 1 UINT byte "individual byte of message" PACKET sms_in: 14 UNKNOWN unknown1 6 SMSDATE timesent 3 UINT unknown2 1 UINT callback_length # 0 for no callback number 38 USTRING callback 1 UINT sender_length * LIST {'length': 38} +sender: 1 UINT byte "individual byte of senders phone number" 12 DATA unknown3 # set to zeros 4 LGCALDATE lg_time # time the message was sent 3 UNKNOWN unknown4 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 2 UINT unknown5 # zero 1 UINT read # 1 if message has been read, 0 otherwise 1 UINT locked # 1 if the message is locked, 0 otherwise 8 UINT unknown6 # zero 1 UINT priority # 1 if the message is high priority, 0 otherwise 21 USTRING {'encoding': PHONE_ENCODING} subject 1 UINT bin_header1 # 0 in simple message 1 if the message contains a binary header 1 UINT bin_header2 # 0 in simple message 9 if the message contains a binary header 2 UINT unknown7 # zeros 2 UINT multipartID # multi-part message ID, used for concatinated messages only 1 UINT bin_header3 # 0 in simple message 2 if the message contains a binary header 1 UINT num_msg_elements # max 10 elements (guessing on max here) * LIST {'length': 10} +msglengths: 1 UINT msglength "lengths of individual messages in septets" 10 UNKNOWN unknown8 * LIST {'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT} +msgs # 181 bytes per message, uncertain on this, no multipart message available # 20 messages, 7-bit ascii for simple text. for binary header # first byte is header length not including the length byte # rest depends on content of header, not known at this time. # text alway follows the header although the format it different # than a simple SMS * UNKNOWN unknown9 bitpim-1.0.7+dfsg1/src/phones/p_lgvx8350.py0000644001616600161660000000031411042423044016413 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VX8350""" from p_lgvx8550 import * # same as the VX-8550 except as noted below bitpim-1.0.7+dfsg1/src/phones/p_lgvx5200.p0000644001616600161660000001645310445704035016234 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2005 Roger Binns ### Copyright (C) 2005 Simon Capper ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### %{ """Various descriptions of data specific to LG VX5200""" from common import PhoneBookBusyException from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx8100 except as noted # below from p_lgvx8100 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb BREW_FILE_SYSTEM=0 PHONE_ENCODING='iso8859_1' # need to call stat to get the file time/data broken_filelist_date=True %} PACKET indexentry: 2 UINT index 2 UINT type 60 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False } filename "includes full pathname" 4 UINT {'default':0} +icon 4 UINT {'default': 0} +date "i think this is bitfield of the date" 4 UINT dunno PACKET indexfile: "Used for tracking wallpaper and ringtones" * LIST {'elementclass': indexentry, 'createdefault': True} +items ### ### SMS ### # # There are 3 types of SMS records, The inbox, outbox and unsent (pending) # Unlike other records in the phone each message is stored in a separate file # All messages are in the 'sms' directory in the root of the phone # Inbox messages are in files called 'inbox000.dat', the number 000 varies for # each message, typically there are no gaps in the numbering, but gaps can appear # if a message is deleted. # Outbox message are named 'outbox000.dat', unsent messages are named 'sf00.dat', # only two digit file name that suggests a max of 100 message for this type. # Messages in the outbox get updated when the message is received by the recipient, # they contain a delivery flag and a delivery time for all the possible 10 recipients. # The vx8100 supports SMS contatination, this allows you to send text messages that are # longer than 160 characters. The format is different for these type of messages, but # it is supported by this implementation. # The vx8100 also allows you to put small graphics, sounds and animations in a message. # This implementation does not support these, if they are contained in a message they # will be ignored and just the text will be shown when you view the message in bitpim. # The text in the the messages is stored in 7-bit characters, so they have # to be unpacked, in concatinated messages and messages with embeded graphics etc. the # format uses the GSM 03.38 specified format, a good example of this can be found at # "http://www.dreamfabric.com/sms/hello.html". # For simple messages less than 161 characters with no graphics the format is simpler, # the 7-bit characters are just packed into memory in the order they appear in the # message. PACKET msg_record: # the first few fields in this packet have something to do with the type of SMS # message contained. EMS and concatinated text are coded differently than a # simple text message 1 UINT unknown1 # 0 1 UINT binary # 0=simple text, 1=binary/concatinated 1 UINT unknown3 # 0=simple text, 1=binary/concatinated 1 UINT unknown4 # 0 1 UINT unknown6 # 2=simple text, 9=binary/concatinated 1 UINT length * LIST {'length': 219} +msg: 1 UINT byte "individual byte of message" PACKET recipient_record: 33 DATA unknown1 # contains recipient name from phonebook on this phone 49 USTRING number 1 UINT status # 1 when sent, 5 when received 4 LGCALDATE timesent 4 LGCALDATE timereceived 1 UINT unknown2 # 0 when not received, set to 1 when received 40 DATA unknown3 PACKET sms_saved: 4 UINT outboxmsg 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone if self.outboxmsg: * sms_out outbox if not self.outboxmsg: * sms_in inbox PACKET sms_out: 4 UINT index # starting from 1, unique 1 UINT unknown1 # zero 1 UINT locked # 1=locked 4 LGCALDATE timesent # time the message was sent 2 UINT unknown2 # zero 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 21 USTRING {'encoding': PHONE_ENCODING} subject 1 UNKNOWN unknown4 1 UINT num_msg_elements # up to 7 * LIST {'elementclass': msg_record, 'length': 7} +messages 15 UNKNOWN unknown1 1 UINT priority # 0=normal, 1=high 1 UNKNOWN unknown5 35 USTRING callback * LIST {'elementclass': recipient_record,'length': 9} +recipients * UNKNOWN pad PACKET SMSINBOXMSGFRAGMENT: * LIST {'length': 181} +msg: # this size could be wrong 1 UINT byte "individual byte of message" PACKET sms_in: 10 UNKNOWN unknown1 6 SMSDATE timesent 3 UINT unknown2 1 UINT callback_length # 0 for no callback number 38 USTRING callback 1 UINT sender_length * LIST {'length': 38} +sender: 1 UINT byte "individual byte of senders phone number" 12 DATA unknown3 # set to zeros 4 LGCALDATE lg_time # time the message was sent 3 UNKNOWN unknown4 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 4 UINT unknown5 # zero 1 UINT read # 1 if message has been read, 0 otherwise 1 UINT locked # 1 if the message is locked, 0 otherwise 8 UINT unknown6 # zero 1 UINT priority # 1 if the message is high priority, 0 otherwise 21 USTRING {'encoding': PHONE_ENCODING} subject 1 UINT bin_header1 # 0 in simple message 1 if the message contains a binary header 1 UINT bin_header2 # 0 in simple message 9 if the message contains a binary header 4 UINT unknown7 # zeros 2 UINT multipartID # multi-part message ID, used for concatinated messages only 1 UINT bin_header3 # 0 in simple message 2 if the message contains a binary header 1 UINT num_msg_elements # max 10 elements (guessing on max here) * LIST {'length': 10} +msglengths: 1 UINT msglength "lengths of individual messages in septets" 10 UNKNOWN unknown8 * LIST {'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT} +msgs # 181 bytes per message, uncertain on this, no multipart message available # 20 messages, 7-bit ascii for simple text. for binary header # first byte is header length not including the length byte # rest depends on content of header, not known at this time. # text alway follows the header although the format it different # than a simple SMS * UNKNOWN unknown9 PACKET sms_quick_text: * LIST { 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True} +msgs: 101 USTRING {'encoding': PHONE_ENCODING, 'default': ""} +msg # include terminating NULL # Text Memos. LG memo support is weak, it only supports the raw text and none of # the features that other phones support, when you run bitpim you see loads of # options that do not work in the vx8100 on the memo page PACKET textmemo: 4 UINT { 'constant':1 } +dunno 4 GPSDATE GPStime # time the memo was writen 4 LGCALDATE memotime # time the memo was writen LG time 152 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } text PACKET textmemofile: 4 UINT itemcount * LIST { 'elementclass': textmemo } +items bitpim-1.0.7+dfsg1/src/phones/p_lgvx5300.p0000644001616600161660000002752410554051564016241 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2006 Roger Binns ### Copyright (C) 2005-2006 Simon Capper ### Copyright (C) 2006 Michael Cohen ### Copyright (C) 2006 Bart Massey ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lgvx5300.p 3917 2007-01-19 05:13:24Z djpham $ %{ """Various descriptions of data specific to LG VX5300""" from common import PhoneBookBusyException from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx8100 except as noted # below from p_lgvx8100 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb BREW_FILE_SYSTEM=0 PHONE_ENCODING='iso-8859-1' NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=500 MAXCALENDARDESCRIPTION=32 CALENDAR_HAS_SEPARATE_END_TIME_AND_DATE=1 NUMEMAILS=2 NUMPHONENUMBERS=5 # need to call stat to get the file time/data broken_filelist_date=True %} PACKET indexentry: 256 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } filename "full pathname" 4 UINT size 4 UINT {'default': 0} +date 4 UINT type PACKET indexfile: "Used for tracking wallpaper and ringtones" * LIST {'elementclass': indexentry, 'createdefault': True} +items # All STRINGS have raiseonterminatedread as False since the phone does # occassionally leave out the terminator byte # Note if you change the length of any of these fields, you also # need to modify com_lgvx7000 to give a different truncateat parameter # in the convertphonebooktophone method PACKET pbentry: 4 UINT serial1 2 UINT {'constant': 0x181, 'constantexception': PhoneBookBusyException} +entrysize 4 UINT serial2 2 UINT entrynumber 23 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 2 UINT group * LIST {'length': NUMEMAILS} +emails: 49 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} email 2 UINT {'default': 0xFFFF} +ringtone "ringtone index for a call" 2 UINT {'default': 0xFFFF} +msgringtone "ringtone index for a text message" 2 UINT {'default': 0} +wallpaper * LIST {'length': NUMPHONENUMBERS} +numbertypes: 1 UINT numbertype * LIST {'length': NUMPHONENUMBERS} +numbers: 49 USTRING {'raiseonunterminatedread': False} number * UNKNOWN +unknown PACKET pbreadentryresponse: "Results of reading one entry" * pbheader header * pbentry entry PACKET pbupdateentryrequest: * pbheader {'command': 0x04, 'flag': 0x01} +header * pbentry entry PACKET pbappendentryrequest: * pbheader {'command': 0x03, 'flag': 0x01} +header * pbentry entry ### ### The calendar ### # # The calendar consists of one file listing events and an exception # file that lists exceptions. These exceptions suppress a particular # instance of a repeated event. For example, if you setup something # to happen monthly, but changed the 1st february event, then the # schedule will contain the repeating event, and the 1st feb one, # and the suppresions/exceptions file will point to the repeating # event and suppress the 1st feb. # The phone uses the position within the file to give an event an id PACKET scheduleexception: 4 UINT pos "Refers to event id (position in schedule file) that this suppresses" 1 UINT day 1 UINT month 2 UINT year PACKET scheduleexceptionfile: * LIST {'elementclass': scheduleexception} +items # 314 bytes per record, maybe they plan to add a memo field at some point?? PACKET scheduleevent: 4 UINT pos "position within file, used as an event id" 33 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } description 4 LGCALDATE start 4 LGCALDATE end_time 4 LGCALDATE end_date 4 LGCALREPEAT repeat # complicated bit mapped field 1 UINT alarmindex_vibrate #LSBit of this set vibrate ON(0)/OFF(1), the 7 MSBits are the alarm index #the alarmindex is the index into the amount of time in advance of the #event to notify the user. It is directly related to the alarmminutes #and alarmhours below, valid values are # 8=2days, 7=1day, 6=2hours, 5=1hour, 4=15mins, 3=10mins, 2=5mins, 1=0mins, 0=NoAlarm 1 UINT ringtone 1 UINT { 'default': 0 } +unknown1 1 UINT alarmminutes "a value of 0xFF indicates not set" 1 UINT alarmhours "a value of 0xFF indicates not set" 256 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' } +ringpath # MIC If ringtone = 0x64 (decimal 100), this field is used to specify # the full path of the ringer, either on the phone or on the microSD card PACKET schedulefile: 2 UINT numactiveitems * LIST {'elementclass': scheduleevent} +events PACKET call: 4 GPSDATE GPStime #no. of seconds since 0h 1-6-80, based off local time. 4 UINT unknown2 # different for each call 4 UINT duration #seconds, not certain about length of this field 49 USTRING {'raiseonunterminatedread': False} number 36 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 1 UINT numberlength # length of phone number 1 UINT pbnumbertype # 1=cell, 2=home, 3=office, 4=cell2, 5=fax, 6=vmail, 0xFF=not in phone book 5 UINT unknown2 # 2 UINT pbentrynum #entry number in phonebook PACKET callhistory: 4 UINT numcalls 1 UINT unknown1 * LIST {'elementclass': call} +calls ### ### SMS ### # # There are 3 types of SMS records, The inbox, outbox and unsent (pending) # Unlike other records in the phone each message is stored in a separate file # All messages are in the 'sms' directory in the root of the phone # Inbox messages are in files called 'inbox000.dat', the number 000 varies for # each message, typically there are no gaps in the numbering, but gaps can appear # if a message is deleted. # Outbox message are named 'outbox000.dat', unsent messages are named 'sf00.dat', # only two digit file name that suggests a max of 100 message for this type. # Messages in the outbox get updated when the message is received by the recipient, # they contain a delivery flag and a delivery time for all the possible 10 recipients. # The vx8100 supports SMS contatination, this allows you to send text messages that are # longer than 160 characters. The format is different for these type of messages, but # it is supported by this implementation. # The vx8100 also allows you to put small graphics, sounds and animations in a message. # This implementation does not support these, if they are contained in a message they # will be ignored and just the text will be shown when you view the message in bitpim. # The text in the the messages is stored in 7-bit characters, so they have # to be unpacked, in concatinated messages and messages with embeded graphics etc. the # format uses the GSM 03.38 specified format, a good example of this can be found at # "http://www.dreamfabric.com/sms/hello.html". # For simple messages less than 161 characters with no graphics the format is simpler, # the 7-bit characters are just packed into memory in the order they appear in the # message. PACKET msg_record: # the first few fields in this packet have something to do with the type of SMS # message contained. EMS and concatinated text are coded differently than a # simple text message 1 UINT unknown1 # 0 1 UINT binary # 0=simple text, 1=binary/concatinated 1 UINT unknown3 # 0=simple text, 1=binary/concatinated 1 UINT unknown4 # 0 1 UINT unknown6 # 2=simple text, 9=binary/concatinated 1 UINT length * LIST {'length': 219} +msg: 1 UINT byte "individual byte of message" PACKET recipient_record: 34 DATA unknown1 # contains recipient name from phonebook on this phone 49 USTRING number 1 UINT status # 1 when sent, 5 when received 4 LGCALDATE timesent 4 LGCALDATE timereceived 1 UINT unknown2 # 0 when not received, set to 1 when received 53 DATA unknown3 PACKET sms_saved: 4 UINT outboxmsg 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone if self.outboxmsg: * sms_out outbox if not self.outboxmsg: * sms_in inbox PACKET sms_out: 4 UINT index # starting from 1, unique 1 UINT unknown1 # zero 1 UINT locked # 1=locked 4 LGCALDATE timesent # time the message was sent 2 UINT unknown2 # zero 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 24 USTRING {'encoding': PHONE_ENCODING} subject 1 UINT num_msg_elements # up to 7 * LIST {'elementclass': msg_record, 'length': 7} +messages 15 UNKNOWN unknown1 1 UINT priority # 0=normal, 1=high 1 UNKNOWN unknown5 35 USTRING callback * LIST {'elementclass': recipient_record,'length': 9} +recipients * UNKNOWN pad PACKET SMSINBOXMSGFRAGMENT: * LIST {'length': 181} +msg: # this size could be wrong 1 UINT byte "individual byte of message" PACKET sms_in: 7 UNKNOWN unknown1 4 LGCALDATE lg_time # time the message was sent 1 UINT unknown2 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 6 SMSDATE timesent 1 UINT callback_length # 0 for no callback number 39 USTRING callback 1 UINT sender_length * LIST {'length': 38} +sender: 1 UINT byte "individual byte of senders phone number" 12 DATA unknown3 # set to zeros 6 UNKNOWN unknown4 1 UINT read # 1 if message has been read, 0 otherwise 1 UINT locked # 1 if the message is locked, 0 otherwise 1 UINT priority # 1 if the message is high priority, 0 otherwise 24 USTRING {'encoding': PHONE_ENCODING} subject 1 UINT bin_header1 # 0 in simple message 1 if the message contains a binary header 1 UINT bin_header2 # 0 in simple message 9 if the message contains a binary header 1 UINT unknown7 # zeros 2 UINT multipartID # multi-part message ID, used for concatinated messages only 1 UINT bin_header3 # 0 in simple message 2 if the message contains a binary header 5 UINT unknown8 # zeros 1 UINT num_msg_elements # max 10 elements (guessing on max here) * LIST {'length': 10} +msglengths: 1 UINT msglength "lengths of individual messages in septets" 10 UNKNOWN unknown9 * LIST {'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT} +msgs # 181 bytes per message, uncertain on this, no multipart message available # 20 messages, 7-bit ascii for simple text. for binary header # first byte is header length not including the length byte # rest depends on content of header, not known at this time. # text alway follows the header although the format it different # than a simple SMS * UNKNOWN unknown10 PACKET sms_quick_text: * LIST { 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True} +msgs: 101 USTRING {'encoding': PHONE_ENCODING, 'default': ""} +msg # include terminating NULL # Text Memos. LG memo support is weak, it only supports the raw text and none of # the features that other phones support, when you run bitpim you see loads of # options that do not work in the vx8100 on the memo page PACKET textmemo: 152 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } text 4 UINT {'default' : 0x1000000} +dunno 4 LGCALDATE memotime # time the memo was writen LG time PACKET textmemofile: 4 UINT itemcount * LIST { 'elementclass': textmemo } +items bitpim-1.0.7+dfsg1/src/phones/p_lgax8600.py0000644001616600161660000032454511235353414016412 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE ##from common import PhoneBookBusyException from p_lgvx9900 import * from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * from p_brew import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb BREW_FILE_SYSTEM=2 NOMSGRINGTONE=1 NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=500 pb_file_name='pim/pbentry.dat' PHONE_ENCODING='iso-8859-1' # Media type MEDIA_TYPE_RINGTONE=0x0201 MEDIA_TYPE_IMAGE=0x400 MEDIA_TYPE_SOUND=0x0402 MEDIA_TYPE_SDIMAGE=0x0008 MEDIA_TYPE_SDSOUND=0x000C MEDIA_TYPE_VIDEO=0x0304 MEDIA_RINGTONE_DEFAULT_ICON=1 MEDIA_IMAGE_DEFAULT_ICON=0 MEDIA_VIDEO_DEFAULT_ICON=0 # need to call stat to get the file time/data broken_filelist_date=True # Calendar parameters NUMCALENDARENTRIES=300 # vx8100 uses a type based index for speed dials instead of positional like the vx4400 SPEEDDIALINDEX=1 MAXCALENDARDESCRIPTION=32 CALENDAR_HAS_SEPARATE_END_TIME_AND_DATE=0 class LockKeyReq(BaseProtogenClass): __fields=['cmd', 'lock'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(LockKeyReq,self).__init__(**dict) if self.__class__ is LockKeyReq: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(LockKeyReq,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(LockKeyReq,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0x21 }) self.__field_cmd.writetobuffer(buf) try: self.__field_lock except: self.__field_lock=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_lock.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0x21 }) self.__field_cmd.readfrombuffer(buf) self.__field_lock=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_lock.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0x21 }) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'default': 0x21 }) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_lock(self): try: self.__field_lock except: self.__field_lock=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_lock.getvalue() def __setfield_lock(self, value): if isinstance(value,UINT): self.__field_lock=value else: self.__field_lock=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_lock(self): del self.__field_lock lock=property(__getfield_lock, __setfield_lock, __delfield_lock, "0=Lock, 1=Unlock") def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('lock', self.__field_lock, "0=Lock, 1=Unlock") class KeyPressReq(BaseProtogenClass): __fields=['cmd', 'hold', 'key'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(KeyPressReq,self).__init__(**dict) if self.__class__ is KeyPressReq: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(KeyPressReq,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(KeyPressReq,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0x20 }) self.__field_cmd.writetobuffer(buf) try: self.__field_hold except: self.__field_hold=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_hold.writetobuffer(buf) self.__field_key.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0x20 }) self.__field_cmd.readfrombuffer(buf) self.__field_hold=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_hold.readfrombuffer(buf) self.__field_key=STRING(**{'sizeinbytes': 1, 'terminator': None, 'sizeinbytes': 1 }) self.__field_key.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0x20 }) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'default': 0x20 }) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_hold(self): try: self.__field_hold except: self.__field_hold=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_hold.getvalue() def __setfield_hold(self, value): if isinstance(value,UINT): self.__field_hold=value else: self.__field_hold=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_hold(self): del self.__field_hold hold=property(__getfield_hold, __setfield_hold, __delfield_hold, None) def __getfield_key(self): return self.__field_key.getvalue() def __setfield_key(self, value): if isinstance(value,STRING): self.__field_key=value else: self.__field_key=STRING(value,**{'sizeinbytes': 1, 'terminator': None, 'sizeinbytes': 1 }) def __delfield_key(self): del self.__field_key key=property(__getfield_key, __setfield_key, __delfield_key, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('hold', self.__field_hold, None) yield ('key', self.__field_key, None) class indexentry(BaseProtogenClass): __fields=['index', 'type', 'filename', 'icon', 'date', 'dunno', 'size', 'dunno1'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_type.writetobuffer(buf) self.__field_filename.writetobuffer(buf) try: self.__field_icon except: self.__field_icon=UINT(**{'sizeinbytes': 4, 'default':0}) self.__field_icon.writetobuffer(buf) try: self.__field_date except: self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_date.writetobuffer(buf) self.__field_dunno.writetobuffer(buf) try: self.__field_size except: self.__field_size=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_size.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self.__field_type=UINT(**{'sizeinbytes': 2}) self.__field_type.readfrombuffer(buf) self.__field_filename=USTRING(**{'sizeinbytes': 256, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_filename.readfrombuffer(buf) self.__field_icon=UINT(**{'sizeinbytes': 4, 'default':0}) self.__field_icon.readfrombuffer(buf) self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_date.readfrombuffer(buf) self.__field_dunno=UINT(**{'sizeinbytes': 4}) self.__field_dunno.readfrombuffer(buf) self.__field_size=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_size.readfrombuffer(buf) self.__field_dunno1=UINT(**{'sizeinbytes': 4}) self.__field_dunno1.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_type(self): return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,UINT): self.__field_type=value else: self.__field_type=UINT(value,**{'sizeinbytes': 2}) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, None) def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'sizeinbytes': 256, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, "includes full pathname") def __getfield_icon(self): try: self.__field_icon except: self.__field_icon=UINT(**{'sizeinbytes': 4, 'default':0}) return self.__field_icon.getvalue() def __setfield_icon(self, value): if isinstance(value,UINT): self.__field_icon=value else: self.__field_icon=UINT(value,**{'sizeinbytes': 4, 'default':0}) def __delfield_icon(self): del self.__field_icon icon=property(__getfield_icon, __setfield_icon, __delfield_icon, None) def __getfield_date(self): try: self.__field_date except: self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,UINT): self.__field_date=value else: self.__field_date=UINT(value,**{'sizeinbytes': 4, 'default': 0}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, "i think this is bitfield of the date") def __getfield_dunno(self): return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 4}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def __getfield_size(self): try: self.__field_size except: self.__field_size=UINT(**{'sizeinbytes': 4, 'default': 0}) return self.__field_size.getvalue() def __setfield_size(self, value): if isinstance(value,UINT): self.__field_size=value else: self.__field_size=UINT(value,**{'sizeinbytes': 4, 'default': 0}) def __delfield_size(self): del self.__field_size size=property(__getfield_size, __setfield_size, __delfield_size, "size of the file, can be set to zero") def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UINT): self.__field_dunno1=value else: self.__field_dunno1=UINT(value,**{'sizeinbytes': 4}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('type', self.__field_type, None) yield ('filename', self.__field_filename, "includes full pathname") yield ('icon', self.__field_icon, None) yield ('date', self.__field_date, "i think this is bitfield of the date") yield ('dunno', self.__field_dunno, None) yield ('size', self.__field_size, "size of the file, can be set to zero") yield ('dunno1', self.__field_dunno1, None) class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): dict2={'elementclass': indexentry, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class speeddial(BaseProtogenClass): __fields=['entry', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddial,self).__init__(**dict) if self.__class__ is speeddial: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddial,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddial,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.writetobuffer(buf) try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.readfrombuffer(buf) self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,UINT): self.__field_entry=value else: self.__field_entry=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_number(self): try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,UINT): self.__field_number=value else: self.__field_number=UINT(value,**{'sizeinbytes': 1, 'default': 0xff}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('entry', self.__field_entry, None) yield ('number', self.__field_number, None) class speeddials(BaseProtogenClass): __fields=['speeddials'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddials,self).__init__(**dict) if self.__class__ is speeddials: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddials,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddials,kwargs) if len(args): dict2={'length': NUMSPEEDDIALS, 'elementclass': speeddial} dict2.update(kwargs) kwargs=dict2 self.__field_speeddials=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_speeddials(self): try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) return self.__field_speeddials.getvalue() def __setfield_speeddials(self, value): if isinstance(value,LIST): self.__field_speeddials=value else: self.__field_speeddials=LIST(value,**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) def __delfield_speeddials(self): del self.__field_speeddials speeddials=property(__getfield_speeddials, __setfield_speeddials, __delfield_speeddials, None) def iscontainer(self): return True def containerelements(self): yield ('speeddials', self.__field_speeddials, None) class pbgroup(BaseProtogenClass): __fields=['name', 'ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroup,self).__init__(**dict) if self.__class__ is pbgroup: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroup,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroup,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_name.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_ringtone.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_name=USTRING(**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_name.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def iscontainer(self): return True def containerelements(self): yield ('name', self.__field_name, None) yield ('ringtone', self.__field_ringtone, None) class pbgroups(BaseProtogenClass): "Phonebook groups" __fields=['groups'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroups,self).__init__(**dict) if self.__class__ is pbgroups: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroups,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroups,kwargs) if len(args): dict2={'elementclass': pbgroup} dict2.update(kwargs) kwargs=dict2 self.__field_groups=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_groups(self): try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) return self.__field_groups.getvalue() def __setfield_groups(self, value): if isinstance(value,LIST): self.__field_groups=value else: self.__field_groups=LIST(value,**{'elementclass': pbgroup}) def __delfield_groups(self): del self.__field_groups groups=property(__getfield_groups, __setfield_groups, __delfield_groups, None) def iscontainer(self): return True def containerelements(self): yield ('groups', self.__field_groups, None) class pbinforequest(BaseProtogenClass): "Random information about the phone" __fields=['header', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbinforequest,self).__init__(**dict) if self.__class__ is pbinforequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbinforequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbinforequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x15, 'flag': 0x01}) self.__field_header.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 6}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x15, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 6}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x15, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x15, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 6}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 6}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('pad', self.__field_pad, None) class pbinforesponse(BaseProtogenClass): __fields=['header', 'dunno1', 'firstentry', 'numentries', 'dunno2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbinforesponse,self).__init__(**dict) if self.__class__ is pbinforesponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbinforesponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbinforesponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_firstentry.writetobuffer(buf) self.__field_numentries.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_dunno1=UNKNOWN(**{'sizeinbytes': 10}) self.__field_dunno1.readfrombuffer(buf) self.__field_firstentry=UINT(**{'sizeinbytes': 4}) self.__field_firstentry.readfrombuffer(buf) self.__field_numentries=UINT(**{'sizeinbytes': 2}) self.__field_numentries.readfrombuffer(buf) self.__field_dunno2=UNKNOWN() self.__field_dunno2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UNKNOWN): self.__field_dunno1=value else: self.__field_dunno1=UNKNOWN(value,**{'sizeinbytes': 10}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_firstentry(self): return self.__field_firstentry.getvalue() def __setfield_firstentry(self, value): if isinstance(value,UINT): self.__field_firstentry=value else: self.__field_firstentry=UINT(value,**{'sizeinbytes': 4}) def __delfield_firstentry(self): del self.__field_firstentry firstentry=property(__getfield_firstentry, __setfield_firstentry, __delfield_firstentry, None) def __getfield_numentries(self): return self.__field_numentries.getvalue() def __setfield_numentries(self, value): if isinstance(value,UINT): self.__field_numentries=value else: self.__field_numentries=UINT(value,**{'sizeinbytes': 2}) def __delfield_numentries(self): del self.__field_numentries numentries=property(__getfield_numentries, __setfield_numentries, __delfield_numentries, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UNKNOWN): self.__field_dunno2=value else: self.__field_dunno2=UNKNOWN(value,) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('dunno1', self.__field_dunno1, None) yield ('firstentry', self.__field_firstentry, None) yield ('numentries', self.__field_numentries, None) yield ('dunno2', self.__field_dunno2, None) class pbfileentry(BaseProtogenClass): __fields=['serial1', 'entrynumber', 'data1', 'ringtone', 'group', 'wallpaper', 'data2', 'unknown'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbfileentry,self).__init__(**dict) if self.__class__ is pbfileentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbfileentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbfileentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_serial1.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_data1.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_group.writetobuffer(buf) self.__field_wallpaper.writetobuffer(buf) self.__field_data2.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 2}) self.__field_entrynumber.readfrombuffer(buf) self.__field_data1=DATA(**{'sizeinbytes': 172}) self.__field_data1.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 2}) self.__field_ringtone.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 2}) self.__field_group.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 2}) self.__field_wallpaper.readfrombuffer(buf) self.__field_data2=DATA(**{'sizeinbytes': 256}) self.__field_data2.readfrombuffer(buf) self.__field_unknown=UNKNOWN() self.__field_unknown.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 2}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_data1(self): return self.__field_data1.getvalue() def __setfield_data1(self, value): if isinstance(value,DATA): self.__field_data1=value else: self.__field_data1=DATA(value,**{'sizeinbytes': 172}) def __delfield_data1(self): del self.__field_data1 data1=property(__getfield_data1, __setfield_data1, __delfield_data1, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 2}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 2}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 2}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_data2(self): return self.__field_data2.getvalue() def __setfield_data2(self, value): if isinstance(value,DATA): self.__field_data2=value else: self.__field_data2=DATA(value,**{'sizeinbytes': 256}) def __delfield_data2(self): del self.__field_data2 data2=property(__getfield_data2, __setfield_data2, __delfield_data2, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UNKNOWN): self.__field_unknown=value else: self.__field_unknown=UNKNOWN(value,) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def iscontainer(self): return True def containerelements(self): yield ('serial1', self.__field_serial1, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('data1', self.__field_data1, None) yield ('ringtone', self.__field_ringtone, None) yield ('group', self.__field_group, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('data2', self.__field_data2, None) yield ('unknown', self.__field_unknown, None) class pbfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbfile,self).__init__(**dict) if self.__class__ is pbfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbfile,kwargs) if len(args): dict2={ 'elementclass': pbfileentry } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': pbfileentry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': pbfileentry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class wallpaper_id(BaseProtogenClass): __fields=['path'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(wallpaper_id,self).__init__(**dict) if self.__class__ is wallpaper_id: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(wallpaper_id,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(wallpaper_id,kwargs) if len(args): dict2={'sizeinbytes': 80, 'terminator': None, 'pad': 0xFF, 'default': "" } dict2.update(kwargs) kwargs=dict2 self.__field_path=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_path except: self.__field_path=USTRING(**{'sizeinbytes': 80, 'terminator': None, 'pad': 0xFF, 'default': "" }) self.__field_path.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_path=USTRING(**{'sizeinbytes': 80, 'terminator': None, 'pad': 0xFF, 'default': "" }) self.__field_path.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_path(self): try: self.__field_path except: self.__field_path=USTRING(**{'sizeinbytes': 80, 'terminator': None, 'pad': 0xFF, 'default': "" }) return self.__field_path.getvalue() def __setfield_path(self, value): if isinstance(value,USTRING): self.__field_path=value else: self.__field_path=USTRING(value,**{'sizeinbytes': 80, 'terminator': None, 'pad': 0xFF, 'default': "" }) def __delfield_path(self): del self.__field_path path=property(__getfield_path, __setfield_path, __delfield_path, None) def iscontainer(self): return True def containerelements(self): yield ('path', self.__field_path, None) class wallpaper_id_file(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(wallpaper_id_file,self).__init__(**dict) if self.__class__ is wallpaper_id_file: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(wallpaper_id_file,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(wallpaper_id_file,kwargs) if len(args): dict2={ 'length': NUMPHONEBOOKENTRIES, 'elementclass': wallpaper_id, 'createdefault': True } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'length': NUMPHONEBOOKENTRIES, 'elementclass': wallpaper_id, 'createdefault': True }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'length': NUMPHONEBOOKENTRIES, 'elementclass': wallpaper_id, 'createdefault': True }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'length': NUMPHONEBOOKENTRIES, 'elementclass': wallpaper_id, 'createdefault': True }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'length': NUMPHONEBOOKENTRIES, 'elementclass': wallpaper_id, 'createdefault': True }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class PathIndexEntry(BaseProtogenClass): __fields=['pathname'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PathIndexEntry,self).__init__(**dict) if self.__class__ is PathIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PathIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PathIndexEntry,kwargs) if len(args): dict2={'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' } dict2.update(kwargs) kwargs=dict2 self.__field_pathname=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_pathname except: self.__field_pathname=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' }) self.__field_pathname.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pathname=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' }) self.__field_pathname.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pathname(self): try: self.__field_pathname except: self.__field_pathname=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' }) return self.__field_pathname.getvalue() def __setfield_pathname(self, value): if isinstance(value,USTRING): self.__field_pathname=value else: self.__field_pathname=USTRING(value,**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' }) def __delfield_pathname(self): del self.__field_pathname pathname=property(__getfield_pathname, __setfield_pathname, __delfield_pathname, None) def iscontainer(self): return True def containerelements(self): yield ('pathname', self.__field_pathname, None) class PathIndexFile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PathIndexFile,self).__init__(**dict) if self.__class__ is PathIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PathIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PathIndexFile,kwargs) if len(args): dict2={ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class scheduleexception(BaseProtogenClass): __fields=['pos', 'day', 'month', 'year'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexception,self).__init__(**dict) if self.__class__ is scheduleexception: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexception,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexception,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_day.writetobuffer(buf) self.__field_month.writetobuffer(buf) self.__field_year.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_day=UINT(**{'sizeinbytes': 1}) self.__field_day.readfrombuffer(buf) self.__field_month=UINT(**{'sizeinbytes': 1}) self.__field_month.readfrombuffer(buf) self.__field_year=UINT(**{'sizeinbytes': 2}) self.__field_year.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "Refers to event id (position in schedule file) that this suppresses") def __getfield_day(self): return self.__field_day.getvalue() def __setfield_day(self, value): if isinstance(value,UINT): self.__field_day=value else: self.__field_day=UINT(value,**{'sizeinbytes': 1}) def __delfield_day(self): del self.__field_day day=property(__getfield_day, __setfield_day, __delfield_day, None) def __getfield_month(self): return self.__field_month.getvalue() def __setfield_month(self, value): if isinstance(value,UINT): self.__field_month=value else: self.__field_month=UINT(value,**{'sizeinbytes': 1}) def __delfield_month(self): del self.__field_month month=property(__getfield_month, __setfield_month, __delfield_month, None) def __getfield_year(self): return self.__field_year.getvalue() def __setfield_year(self, value): if isinstance(value,UINT): self.__field_year=value else: self.__field_year=UINT(value,**{'sizeinbytes': 2}) def __delfield_year(self): del self.__field_year year=property(__getfield_year, __setfield_year, __delfield_year, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "Refers to event id (position in schedule file) that this suppresses") yield ('day', self.__field_day, None) yield ('month', self.__field_month, None) yield ('year', self.__field_year, None) class scheduleexceptionfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexceptionfile,self).__init__(**dict) if self.__class__ is scheduleexceptionfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexceptionfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexceptionfile,kwargs) if len(args): dict2={'elementclass': scheduleexception} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': scheduleexception}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class scheduleevent(BaseProtogenClass): __fields=['pos', 'description', 'start', 'end', 'repeat', 'alarmindex_vibrate', 'ringtone', 'alarmminutes', 'alarmhours', 'unknown1', 'unknown2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleevent,self).__init__(**dict) if self.__class__ is scheduleevent: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleevent,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleevent,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_description.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) self.__field_alarmindex_vibrate.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_alarmminutes.writetobuffer(buf) self.__field_alarmhours.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_description=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_description.readfrombuffer(buf) self.__field_start=LGCALDATE(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=LGCALDATE(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_repeat=LGCALREPEAT(**{'sizeinbytes': 4}) self.__field_repeat.readfrombuffer(buf) self.__field_alarmindex_vibrate=UINT(**{'sizeinbytes': 1}) self.__field_alarmindex_vibrate.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 2}) self.__field_ringtone.readfrombuffer(buf) self.__field_alarmminutes=UINT(**{'sizeinbytes': 1}) self.__field_alarmminutes.readfrombuffer(buf) self.__field_alarmhours=UINT(**{'sizeinbytes': 1}) self.__field_alarmhours.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2}) self.__field_unknown2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "position within file, used as an event id") def __getfield_description(self): return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,USTRING): self.__field_description=value else: self.__field_description=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,LGCALDATE): self.__field_start=value else: self.__field_start=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,LGCALDATE): self.__field_end=value else: self.__field_end=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,LGCALREPEAT): self.__field_repeat=value else: self.__field_repeat=LGCALREPEAT(value,**{'sizeinbytes': 4}) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_alarmindex_vibrate(self): return self.__field_alarmindex_vibrate.getvalue() def __setfield_alarmindex_vibrate(self, value): if isinstance(value,UINT): self.__field_alarmindex_vibrate=value else: self.__field_alarmindex_vibrate=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmindex_vibrate(self): del self.__field_alarmindex_vibrate alarmindex_vibrate=property(__getfield_alarmindex_vibrate, __setfield_alarmindex_vibrate, __delfield_alarmindex_vibrate, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 2}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_alarmminutes(self): return self.__field_alarmminutes.getvalue() def __setfield_alarmminutes(self, value): if isinstance(value,UINT): self.__field_alarmminutes=value else: self.__field_alarmminutes=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmminutes(self): del self.__field_alarmminutes alarmminutes=property(__getfield_alarmminutes, __setfield_alarmminutes, __delfield_alarmminutes, "a value of 0xFF indicates not set") def __getfield_alarmhours(self): return self.__field_alarmhours.getvalue() def __setfield_alarmhours(self, value): if isinstance(value,UINT): self.__field_alarmhours=value else: self.__field_alarmhours=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmhours(self): del self.__field_alarmhours alarmhours=property(__getfield_alarmhours, __setfield_alarmhours, __delfield_alarmhours, "a value of 0xFF indicates not set") def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "position within file, used as an event id") yield ('description', self.__field_description, None) yield ('start', self.__field_start, None) yield ('end', self.__field_end, None) yield ('repeat', self.__field_repeat, None) yield ('alarmindex_vibrate', self.__field_alarmindex_vibrate, None) yield ('ringtone', self.__field_ringtone, None) yield ('alarmminutes', self.__field_alarmminutes, "a value of 0xFF indicates not set") yield ('alarmhours', self.__field_alarmhours, "a value of 0xFF indicates not set") yield ('unknown1', self.__field_unknown1, None) yield ('unknown2', self.__field_unknown2, None) class schedulefile(BaseProtogenClass): __fields=['numactiveitems', 'events'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(schedulefile,self).__init__(**dict) if self.__class__ is schedulefile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(schedulefile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(schedulefile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{'elementclass': scheduleevent}) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('events', self.__field_events, None) class ULReq(BaseProtogenClass): "" __fields=['cmd', 'unlock_code', 'unlock_key', 'zero'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ULReq,self).__init__(**dict) if self.__class__ is ULReq: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ULReq,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ULReq,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0xFE }) self.__field_cmd.writetobuffer(buf) try: self.__field_unlock_code except: self.__field_unlock_code=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) self.__field_unlock_code.writetobuffer(buf) self.__field_unlock_key.writetobuffer(buf) try: self.__field_zero except: self.__field_zero=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) self.__field_zero.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0xFE }) self.__field_cmd.readfrombuffer(buf) self.__field_unlock_code=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) self.__field_unlock_code.readfrombuffer(buf) self.__field_unlock_key=UINT(**{'sizeinbytes': 4}) self.__field_unlock_key.readfrombuffer(buf) self.__field_zero=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) self.__field_zero.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0xFE }) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'default': 0xFE }) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_unlock_code(self): try: self.__field_unlock_code except: self.__field_unlock_code=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) return self.__field_unlock_code.getvalue() def __setfield_unlock_code(self, value): if isinstance(value,UINT): self.__field_unlock_code=value else: self.__field_unlock_code=UINT(value,**{'sizeinbytes': 1, 'default': 0x00 }) def __delfield_unlock_code(self): del self.__field_unlock_code unlock_code=property(__getfield_unlock_code, __setfield_unlock_code, __delfield_unlock_code, None) def __getfield_unlock_key(self): return self.__field_unlock_key.getvalue() def __setfield_unlock_key(self, value): if isinstance(value,UINT): self.__field_unlock_key=value else: self.__field_unlock_key=UINT(value,**{'sizeinbytes': 4}) def __delfield_unlock_key(self): del self.__field_unlock_key unlock_key=property(__getfield_unlock_key, __setfield_unlock_key, __delfield_unlock_key, None) def __getfield_zero(self): try: self.__field_zero except: self.__field_zero=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) return self.__field_zero.getvalue() def __setfield_zero(self, value): if isinstance(value,UINT): self.__field_zero=value else: self.__field_zero=UINT(value,**{'sizeinbytes': 1, 'default': 0x00 }) def __delfield_zero(self): del self.__field_zero zero=property(__getfield_zero, __setfield_zero, __delfield_zero, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('unlock_code', self.__field_unlock_code, None) yield ('unlock_key', self.__field_unlock_key, None) yield ('zero', self.__field_zero, None) class ULRes(BaseProtogenClass): "" __fields=['cmd', 'unlock_code', 'unlock_key', 'unlock_ok'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ULRes,self).__init__(**dict) if self.__class__ is ULRes: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ULRes,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ULRes,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_cmd.writetobuffer(buf) self.__field_unlock_code.writetobuffer(buf) self.__field_unlock_key.writetobuffer(buf) self.__field_unlock_ok.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1}) self.__field_cmd.readfrombuffer(buf) self.__field_unlock_code=UINT(**{'sizeinbytes': 1}) self.__field_unlock_code.readfrombuffer(buf) self.__field_unlock_key=UINT(**{'sizeinbytes': 4}) self.__field_unlock_key.readfrombuffer(buf) self.__field_unlock_ok=UINT(**{'sizeinbytes': 1}) self.__field_unlock_ok.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_unlock_code(self): return self.__field_unlock_code.getvalue() def __setfield_unlock_code(self, value): if isinstance(value,UINT): self.__field_unlock_code=value else: self.__field_unlock_code=UINT(value,**{'sizeinbytes': 1}) def __delfield_unlock_code(self): del self.__field_unlock_code unlock_code=property(__getfield_unlock_code, __setfield_unlock_code, __delfield_unlock_code, None) def __getfield_unlock_key(self): return self.__field_unlock_key.getvalue() def __setfield_unlock_key(self, value): if isinstance(value,UINT): self.__field_unlock_key=value else: self.__field_unlock_key=UINT(value,**{'sizeinbytes': 4}) def __delfield_unlock_key(self): del self.__field_unlock_key unlock_key=property(__getfield_unlock_key, __setfield_unlock_key, __delfield_unlock_key, None) def __getfield_unlock_ok(self): return self.__field_unlock_ok.getvalue() def __setfield_unlock_ok(self, value): if isinstance(value,UINT): self.__field_unlock_ok=value else: self.__field_unlock_ok=UINT(value,**{'sizeinbytes': 1}) def __delfield_unlock_ok(self): del self.__field_unlock_ok unlock_ok=property(__getfield_unlock_ok, __setfield_unlock_ok, __delfield_unlock_ok, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('unlock_code', self.__field_unlock_code, None) yield ('unlock_key', self.__field_unlock_key, None) yield ('unlock_ok', self.__field_unlock_ok, None) class textmemo(BaseProtogenClass): __fields=['text', 'memotime'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemo,self).__init__(**dict) if self.__class__ is textmemo: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemo,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemo,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_text.writetobuffer(buf) self.__field_memotime.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_text=USTRING(**{'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_text.readfrombuffer(buf) self.__field_memotime=LGCALDATE(**{'sizeinbytes': 4}) self.__field_memotime.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,USTRING): self.__field_text=value else: self.__field_text=USTRING(value,**{'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def __getfield_memotime(self): return self.__field_memotime.getvalue() def __setfield_memotime(self, value): if isinstance(value,LGCALDATE): self.__field_memotime=value else: self.__field_memotime=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_memotime(self): del self.__field_memotime memotime=property(__getfield_memotime, __setfield_memotime, __delfield_memotime, None) def iscontainer(self): return True def containerelements(self): yield ('text', self.__field_text, None) yield ('memotime', self.__field_memotime, None) class textmemofile(BaseProtogenClass): __fields=['itemcount', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemofile,self).__init__(**dict) if self.__class__ is textmemofile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemofile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemofile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_itemcount.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_itemcount=UINT(**{'sizeinbytes': 4}) self.__field_itemcount.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_itemcount(self): return self.__field_itemcount.getvalue() def __setfield_itemcount(self, value): if isinstance(value,UINT): self.__field_itemcount=value else: self.__field_itemcount=UINT(value,**{'sizeinbytes': 4}) def __delfield_itemcount(self): del self.__field_itemcount itemcount=property(__getfield_itemcount, __setfield_itemcount, __delfield_itemcount, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': textmemo }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('itemcount', self.__field_itemcount, None) yield ('items', self.__field_items, None) class call(BaseProtogenClass): __fields=['GPStime', 'unknown2', 'duration', 'number', 'name', 'numberlength', 'pbnumbertype', 'unknown2', 'pbentrynum', 'unknown3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(call,self).__init__(**dict) if self.__class__ is call: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(call,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(call,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_numberlength.writetobuffer(buf) self.__field_pbnumbertype.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_pbentrynum.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 4}) self.__field_unknown2.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_numberlength=UINT(**{'sizeinbytes': 2}) self.__field_numberlength.readfrombuffer(buf) self.__field_pbnumbertype=UINT(**{'sizeinbytes': 1}) self.__field_pbnumbertype.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 3}) self.__field_unknown2.readfrombuffer(buf) self.__field_pbentrynum=UINT(**{'sizeinbytes': 2}) self.__field_pbentrynum.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 58}) self.__field_unknown3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numberlength(self): return self.__field_numberlength.getvalue() def __setfield_numberlength(self, value): if isinstance(value,UINT): self.__field_numberlength=value else: self.__field_numberlength=UINT(value,**{'sizeinbytes': 2}) def __delfield_numberlength(self): del self.__field_numberlength numberlength=property(__getfield_numberlength, __setfield_numberlength, __delfield_numberlength, None) def __getfield_pbnumbertype(self): return self.__field_pbnumbertype.getvalue() def __setfield_pbnumbertype(self, value): if isinstance(value,UINT): self.__field_pbnumbertype=value else: self.__field_pbnumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_pbnumbertype(self): del self.__field_pbnumbertype pbnumbertype=property(__getfield_pbnumbertype, __setfield_pbnumbertype, __delfield_pbnumbertype, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_pbentrynum(self): return self.__field_pbentrynum.getvalue() def __setfield_pbentrynum(self, value): if isinstance(value,UINT): self.__field_pbentrynum=value else: self.__field_pbentrynum=UINT(value,**{'sizeinbytes': 2}) def __delfield_pbentrynum(self): del self.__field_pbentrynum pbentrynum=property(__getfield_pbentrynum, __setfield_pbentrynum, __delfield_pbentrynum, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 58}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def iscontainer(self): return True def containerelements(self): yield ('GPStime', self.__field_GPStime, None) yield ('unknown2', self.__field_unknown2, None) yield ('duration', self.__field_duration, None) yield ('number', self.__field_number, None) yield ('name', self.__field_name, None) yield ('numberlength', self.__field_numberlength, None) yield ('pbnumbertype', self.__field_pbnumbertype, None) yield ('unknown2', self.__field_unknown2, None) yield ('pbentrynum', self.__field_pbentrynum, None) yield ('unknown3', self.__field_unknown3, None) class callhistory(BaseProtogenClass): __fields=['numcalls', 'unknown1', 'calls'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callhistory,self).__init__(**dict) if self.__class__ is callhistory: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callhistory,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callhistory,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numcalls.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numcalls=UINT(**{'sizeinbytes': 4}) self.__field_numcalls.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numcalls(self): return self.__field_numcalls.getvalue() def __setfield_numcalls(self, value): if isinstance(value,UINT): self.__field_numcalls=value else: self.__field_numcalls=UINT(value,**{'sizeinbytes': 4}) def __delfield_numcalls(self): del self.__field_numcalls numcalls=property(__getfield_numcalls, __setfield_numcalls, __delfield_numcalls, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_calls(self): try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) return self.__field_calls.getvalue() def __setfield_calls(self, value): if isinstance(value,LIST): self.__field_calls=value else: self.__field_calls=LIST(value,**{'elementclass': call}) def __delfield_calls(self): del self.__field_calls calls=property(__getfield_calls, __setfield_calls, __delfield_calls, None) def iscontainer(self): return True def containerelements(self): yield ('numcalls', self.__field_numcalls, None) yield ('unknown1', self.__field_unknown1, None) yield ('calls', self.__field_calls, None) bitpim-1.0.7+dfsg1/src/phones/p_lgvx5500.p0000644001616600161660000000607711273577630016251 0ustar amuamu### ( -*- Python -*- ) ### Copyright (C) 2009 Nathan Hjelm ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### %{ """Various descriptions of data specific to LG VX5500""" from p_lgvx9700 import * # same as the VX-9700 except as noted below %} # /pim/pbentry.dat format PACKET pbfileentry: 5 STRING { 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff\xff' } +entry_tag if self.entry_tag==PB_ENTRY_SOR: * PBDateTime { 'defaulttocurrenttime': True } +mod_date 6 STRING { 'terminator': None, 'default': '\xff\xff\xff\xff\xff\xff' } +unk0 4 UINT entry_number1 # 1 based entry number -- might be just 2 bytes long 2 UINT entry_number0 # 0 based entry number 66 USTRING { 'encoding': 'utf_16_le', 'raiseonunterminatedread': False, 'raiseontruncate': False } +name 2 UINT { 'default': 0 } +group * LIST {'length': NUMEMAILS} +emails: 49 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} email 2 UINT { 'default': 0xffff } +ringtone 2 UINT { 'default': 0 } +wallpaper * LIST {'length': NUMPHONENUMBERS} +numbertypes: 1 UINT { 'default': 0 } numbertype * LIST {'length': NUMPHONENUMBERS} +numberindices: 2 UINT { 'default': 0xffff } numberindex 36 USTRING { 'raiseonunterminatedread': False, 'default': '', 'encoding': PHONE_ENCODING } +memo # maybe 6 USTRING { 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''} +exit_tag else: # this is a blank entry, fill it up with 0xFF 251 DATA { 'default': '\xff'*251 } +dontcare %{ def valid(self): global PB_ENTRY_SOR return self.entry_tag==PB_ENTRY_SOR and ord(self.name[0]) != 0xff %} PACKET pbfile: * LIST { 'elementclass': pbfileentry, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True} +items 6 STRING { 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False } +eof_tag 10 STRING { 'raiseonunterminatedread': False, 'raiseontruncate': False } +model_name * PBDateTime { 'defaulttocurrenttime': True } +mod_date 221 DATA { 'default': '\x00'*221 } + blanks 7 STRING { 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False } +eof_close_tag # pbgroup.dat PACKET pbgroup: 66 USTRING {'encoding': 'utf_16_le', 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''} +name 2 UINT { 'default': 0 } +groupid 1 UINT {'default': 0} +user_added "=1 when was added by user" PACKET pbgroups: "Phonebook groups" * LIST {'elementclass': pbgroup, 'raiseonincompleteread': False, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True} +groups bitpim-1.0.7+dfsg1/src/phones/p_motok1m.py0000644001616600161660000000153410733033631016514 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Motorola V3c phones""" from prototypes import * from prototypes_moto import * from p_etsi import * from p_moto import * from p_motov710 import * PB_TOTAL_ENTRIES=1000 PB_RANGE=xrange(1,PB_TOTAL_ENTRIES+1) # System files in the WP subdir that are not wallpapers/images WP_EXCLUDED_FILES=frozenset(['..dir.dat', 'amthumb.db', 'customer_closing.gif', 'customer_opening.gif']) RT_PATH='motorola/shared/ringtone' SND_PATH='motorola/shared/audio' OBEX_Filename_Prefix='motorola/shared/' OBEX_Filename_Prefix_Len=len(OBEX_Filename_Prefix) def OBEXName(filename): if filename.startswith(OBEX_Filename_Prefix): return filename[OBEX_Filename_Prefix_Len:] raise ValueError bitpim-1.0.7+dfsg1/src/phones/com_samsungscha310.py0000644001616600161660000005117710661407437020225 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_samsungscha310.py 4365 2007-08-17 21:11:59Z djpham $ """Communicate with a Samsung SCH-A310""" # lib modules import sha # my modules import common import commport import com_brew import com_phone import com_samsung class Phone(com_samsung.Phone): "Talk to the Samsung SCH-A310 Cell Phone" desc="SCH-A310" serialsname='scha310' __groups_range=xrange(5) __phone_entries_range=xrange(1,501) __pb_max_entries=23 __pb_max_speeddials=500 __pb_entry=0 __pb_mem_loc=1 __pb_group=2 __pb_ringtone=3 __pb_name=4 __pb_speed_dial=5 __pb_secret=6 __pb_home_num=7 __pb_office_num=9 __pb_mobile_num=11 __pb_pager_num=13 __pb_fax_num=15 __pb_no_label_num=17 __pb_blanks=(19, 20) __pb_email=21 __pb_date_time_stamp=22 __pb_numbers= ({'home': __pb_home_num}, {'office': __pb_office_num}, {'cell': __pb_mobile_num}, {'pager': __pb_pager_num}, {'fax': __pb_fax_num}, {'none': __pb_no_label_num}) __pb_max_name_len=12 __pb_max_number_len=32 __pb_max_emails=1 builtinringtones=( 'Inactive', 'Bell 1', 'Bell 2', 'Bell 3', 'Bell 4', 'Bell 5', 'Melody 1', 'Melody 2', 'Melody 3', 'Melody 4', 'Melody 5', 'Melody 6', 'Melody 7', 'Melody 8', 'Melody 9', 'Melody 10', 'Melody 11', 'Melody 12', 'Melody 13', 'Melody 14', 'Melody 15', 'Melody 16') __cal_end_datetime_value=None def __init__(self, logtarget, commport): "Calls all the constructors and sets initial modes" com_samsung.Phone.__init__(self, logtarget, commport) self.mode=self.MODENONE def getfundamentals(self, results): """Gets information fundamental to interopating with the phone and UI. Currently this is: - 'uniqueserial' a unique serial number representing the phone - 'groups' the phonebook groups - 'wallpaper-index' map index numbers to names - 'ringtone-index' map index numbers to ringtone names This method is called before we read the phonebook data or before we write phonebook data. """ if not self.is_online(): self.log("Failed to talk to phone") return results self.setmode(self.MODEPHONEBOOK) # use a hash of ESN and other stuff (being paranoid) self.log("Retrieving fundamental phone information") self.log("Reading phone serial number") results['uniqueserial']=sha.new(self.get_esn()).hexdigest() # now read groups self.log("Reading group information") g=self.get_groups(self.__groups_range) groups={} for i in range(len(g)): if len(g[i]): groups[i]={ 'name': g[i] } results['groups']=groups # get the ringtones self.log('Reading ringtone index') results['ringtone-index']=self.get_ringtone_index() self.setmode(self.MODEMODEM) self.log("Fundamentals retrieved") return results def get_ringtone_index(self): try: s=self.comm.sendatcommand('#PUGSN?') if len(s)==0: return {} except commport.ATError: return {} r={} for k in s[1:]: s3=k.split(',') r[int(s3[0])]={ 'name': s3[2], 'origin': 'builtin' } return r def _get_phonebook(self, result, show_progress=True): """Reads the phonebook data. The L{getfundamentals} information will already be in result.""" self.setmode(self.MODEPHONEBOOK) c=len(self.__phone_entries_range) k=0 pb_book={} for j in self.__phone_entries_range: pb_entry=self.get_phone_entry(j); if len(pb_entry)==self.__pb_max_entries: pb_book[k]=self._extract_phone_entry(pb_entry, result) if show_progress: self.progress(j, c, 'Reading '+pb_entry[self.__pb_name]) k+=1 else: if show_progress: self.progress(j, c, 'Blank entry: %d' % j) self.setmode(self.MODEMODEM) return pb_book def getphonebook(self,result): """Reads the phonebook data. The L{getfundamentals} information will already be in result.""" if not self.is_online(): self.log("Failed to talk to phone") return {} pb_book=self._get_phonebook(result) result['phonebook']=pb_book return pb_book def _extract_phone_entry(self, entry, fundamentals): res={} # serials res['serials']=[ {'sourcetype': self.serialsname, 'sourceuniqueid': fundamentals['uniqueserial'], 'serial1': entry[self.__pb_entry], 'serial2': entry[self.__pb_mem_loc] }] # only one name res['names']=[ {'full': entry[self.__pb_name].strip('"') } ] # only one category g=fundamentals['groups'] i=int(entry[self.__pb_group]) res['categories']=[ {'category': g[i]['name'] } ] # emails s=entry[self.__pb_email].strip('"') if len(s): res['emails']=[ { 'email': s } ] # urls # private res['flags']=[ { 'secret': entry[self.__pb_secret]=='1' } ] # memos # wallpapers # ringtones r=fundamentals['ringtone-index'] try: ringtone_name=r[int(entry[self.__pb_ringtone])]['name'] except: ringtone_name=entry[self.__pb_ringtone] res['ringtones']=[ { 'ringtone': ringtone_name, 'use': 'call' } ] # numbers speed_dial=int(entry[self.__pb_speed_dial]) res['numbers']=[] for k in range(len(self.__pb_numbers)): n=self.__pb_numbers[k] for key in n: if len(entry[n[key]]): if speed_dial==k: res['numbers'].append({ 'number': entry[n[key]], 'type': key, 'speeddial': int(entry[self.__pb_mem_loc])}) else: res['numbers'].append({ 'number': entry[n[key]], 'type': key }) return res def savephonebook(self, data): "Saves out the phonebook" if not self.is_online(): self.log("Failed to talk to phone") return data pb_book=data['phonebook'] pb_groups=data['groups'] self.log('Validating phonebook entries.') del_entries=[] for k in pb_book: if not self.__validate_entry(pb_book[k], pb_groups): self.log('Invalid entry, entry will be not be sent.') del_entries.append(k) for k in del_entries: self.log('Deleting entry '+pb_book[k]['names'][0]['full']) del pb_book[k] self._has_duplicate_speeddial(pb_book) self.log('All entries validated') pb_locs=[False]*(len(self.__phone_entries_range)+1) pb_mem=[False]*len(pb_locs) # get existing phonebook from the phone self.log("Getting current phonebook from the phone") current_pb=self._get_phonebook(data, True) # check and adjust for speeddial changes self.log("Processing speeddial data") for k in pb_book: self._update_speeddial(pb_book[k]) # check for deleted entries and delete them self.setmode(self.MODEPHONEBOOK) self.log("Processing deleted entries") for k1 in current_pb: s1=current_pb[k1]['serials'][0]['serial1'] found=False for k2 in pb_book: if self._same_serial1(s1, pb_book[k2]): found=True break if found: pb_locs[int(current_pb[k1]['serials'][0]['serial1'])]=True pb_mem[int(current_pb[k1]['serials'][0]['serial2'])]=True else: self.log("Deleted item: "+current_pb[k1]['names'][0]['full']) # delete the entries from data and the phone self.progress(0, 10, "Deleting "+current_pb[k1]['names'][0]['full']) self._del_phone_entry(current_pb[k1]) mem_idx, loc_idx = self.__pb_max_speeddials, 1 # check for new entries & update serials self.log("Processing new & updated entries") serials_update=[] progresscur, progressmax=1,len(pb_book) ringtone_index=data['ringtone-index'] for k in pb_book: if progresscur>len(self.__phone_entries_range): self.log('Max phone entries exceeded: '+str(progresscur)) break e=pb_book[k] if not self._has_serial1(e): while pb_locs[loc_idx]: loc_idx += 1 pb_locs[loc_idx]=True sd=self._get_speeddial(e) if sd: mem_index=sd pb_mem[sd]=True else: while pb_mem[mem_idx]: mem_idx -= 1 pb_mem[mem_idx]=True mem_index=mem_idx self._set_speeddial(e, mem_idx) s1={ 'sourcetype': self.serialsname, 'sourceuniqueid': data['uniqueserial'], 'serial1': `loc_idx`, 'serial2': `mem_index` } e['serials'].append(s1) self.log("New entries: Name: "+e['names'][0]['full']+", s1: "+`loc_idx`+", s2: "+`mem_index`) serials_update.append((self._bitpim_serials(e), s1)) self.progress(progresscur, progressmax, "Updating "+e['names'][0]['full']) if not self._write_phone_entry(e, pb_groups, ringtone_index): self.log("Failed to save entry: "+e['names'][0]['full']) progresscur += 1 # update existing and new entries data["serialupdates"]=serials_update self.log("Done") self.setmode(self.MODEMODEM) return data # validate a phonebook entry, return True if good, False otherwise def __validate_entry(self, pb_entry, pb_groups): try: # validate name & alias name=pb_entry['names'][0]['full'].replace('"', '') if len(name)>self.__pb_max_name_len: name=name[:self.__pb_max_name_len] if pb_entry['names'][0]['full']!=name: pb_entry['names'][0]['full']=name # validate numbers has_number_or_email=False if pb_entry.has_key('numbers'): for n in pb_entry['numbers']: num=self.phonize(n['number']) if len(num)>self.__pb_max_number_len: num=num[:self.__pb_max_number_len] if num != n['number']: self.log('Updating number from '+n['number']+' to '+num) n['number']=num try: self._get_number_type(n['type']) except: self.log(n['number']+': setting type to home.') n['type']='home' has_number_or_email=True # validate emails if pb_entry.has_key('emails'): if len(pb_entry['emails'])>self.__pb_max_emails: self.log(name+': Each entry can only have %s emails. The rest will be ignored.'%str(self.__pb_max_emails)) email=pb_entry['emails'][0]['email'] email.replace('"', '') if len(email)>self.__pb_max_number_len: email=email[:self.__pb_max_number_len] if email!=pb_entry['emails'][0]['email']: pb_entry['emails'][0]['email']=email has_number_or_email=True if not has_number_or_email: self.log(name+': Entry has no numbers or emails') # return False so this entry can be deleted from the dict return False # validate groups found=False if pb_entry.has_key('categories') and len(pb_entry['categories']): pb_cat=pb_entry['categories'][0]['category'] for k in pb_groups: if pb_groups[k]['name']==pb_cat: found=True break if not found: self.log(name+': category set to '+pb_groups[0]['name']) pb_entry['categories']=[{'category': pb_groups[0]['name']}] # validate ringtones found=False if pb_entry.has_key('ringtones') and len(pb_entry['ringtones']): pb_rt=pb_entry['ringtones'][0]['ringtone'] # can only set to builtin-ringtone for k in self.builtinringtones: if k==pb_rt: found=True break if not found: self.log(name+': ringtone set to '+self.builtinringtones[0]) pb_entry['ringtones']=[{'ringtone': self.builtinringtones[0], 'use': 'call' }] # everything's cool return True except: raise def _has_duplicate_speeddial(self, pb_book): b=[False]*(self.__pb_max_speeddials+1) for k in pb_book: try: for k1, kk in enumerate(pb_book[k]['numbers']): sd=kk['speeddial'] if sd and b[sd]: # speed dial is in used, remove this one del pb_book[k]['numbers'][k1]['speeddial'] self.log('speeddial %d exists, deleted'%sd) else: b[sd]=True except: pass return False def _update_speeddial(self, pb_entry): try: s=self._my_serials(pb_entry) s1=int(s['serial2']) sd=self._get_speeddial(pb_entry) if not sd: # speed dial not set, set it to current mem slot self._set_speeddial(pb_entry, s1) elif sd!=s1: # speed dial set to a different slot, mark it self._del_my_serials(pb_entry) except: pass def _get_speeddial(self, pb_entry): n=pb_entry.get('numbers', []) for k in n: try: if k['speeddial']: return k['speeddial'] except: pass return 0 def _set_speeddial(self, pb_entry, sd): if not pb_entry.has_key('numbers'): # no numbers key, just return return for k in pb_entry['numbers']: if k.has_key('speeddial'): k['speeddial']=sd return pb_entry['numbers'][0]['speeddial']=sd def _del_phone_entry(self, pb_entry): try: return self.save_phone_entry(self._my_serials(pb_entry)['serial1']) except: return False def _same_serial1(self, s1, pb_entry): for k in pb_entry['serials']: if k['sourcetype']==self.serialsname and k.has_key('serial1'): return k['serial1']==s1 return False def _has_serial1(self, pb_entry): for k in pb_entry['serials']: if k['sourcetype']==self.serialsname and k.has_key('serial1'): return True return False def _bitpim_serials(self, pb_entry): for k in pb_entry['serials']: if k['sourcetype']=="bitpim": return k return {} def _del_my_serials(self, pb_entry): for k in range(len(pb_entry['serials'])): if pb_entry['serials'][k]['sourcetype']==self.serialsname: del pb_entry['serials'][k] return def _my_serials(self, pb_entry): for k in pb_entry['serials']: if k['sourcetype']==self.serialsname: return k return {} def _get_number_type(self, type): n=self.__pb_numbers for k in range(len(n)): if n[k].has_key(type): return k, n[k][type] raise common.IntegrityCheckFailed(self.desc, "Invalid Number Type") def _write_phone_entry(self, pb_entry, groups, ringtone_index): # setting up a list to send to the phone, all fields preset to '0' e=['0']*self.__pb_max_entries # setting the entry # and memory location # serials=self._my_serials(pb_entry) e[self.__pb_entry]=serials['serial1'] e[self.__pb_mem_loc]=serials['serial2'] # groups/categories grp=0 try: grp_name=pb_entry['categories'][0]['category'] for k in range(len(groups)): if groups[k]['name']==grp_name: grp=k break except: # invalid group or no group specified, default to group 0 grp, pb_entry['categories']=0, [{'category': groups[0]['name']}] e[self.__pb_group]=`grp` # ringtones e[self.__pb_ringtone]=None try: rt=pb_entry['ringtones'][0]['ringtone'] for k, n in enumerate(self.builtinringtones): if n==rt: e[self.__pb_ringtone]=`k` break except: pass if e[self.__pb_ringtone] is None: e[self.__pb_ringtone]='0' pb_entry['ringtones']=[ { 'ringtone': self.builtinringtones[0], 'use': 'call' } ] # name e[self.__pb_name]='"'+pb_entry['names'][0]['full']+'"' # private/secret secret='0' try: if pb_entry['flags'][0]['secret']: secret='1' except: pass e[self.__pb_secret]=secret # numbers & speed dial # preset to empty for k in range(len(self.__pb_numbers)): for kk in self.__pb_numbers[k]: e[self.__pb_numbers[k][kk]]='' e[self.__pb_numbers[k][kk]+1]='' speed_dial='0' n=pb_entry.get('numbers', []) for k in range(len(n)): try: nk=n[k] kkk, kk=self._get_number_type(nk['type']) except: # invalid type, default to 'home' nk['type']='home' kkk, kk=0, self.__pb_home_num e[kk],e[kk+1]=self.phonize(nk['number']), secret try: if nk['speeddial']: speed_dial=`kkk` except: pass e[self.__pb_speed_dial]=speed_dial # email email='' try: email=pb_entry['emails'][0]['email'] except: pass e[self.__pb_email]='"'+email+'"' for k in self.__pb_blanks: e[k]='' e[self.__pb_date_time_stamp]=self.get_time_stamp() # final check to determine if this entry has changed. # if it has not then do nothing and just return ee=self.get_phone_entry(int(e[self.__pb_entry])) if len(ee): # valid phone entry, do comparison # DSV took " out, need put them back in ee[self.__pb_name]='"'+ee[self.__pb_name]+'"' ee[self.__pb_email]='"'+ee[self.__pb_email]+'"' k=self.__pb_max_entries-2 if e[0:k]==ee[0:k]: return True return self.save_phone_entry('0,'+','.join(e)) getphoneinfo=com_samsung.Phone._getphoneinfo getringtones=None getwallpapers=None getmedia=None class Profile(com_samsung.Profile): serialsname='scha310' # use for auto-detection phone_manufacturer='SAMSUNG ELECTRONICS' phone_model='SCH-A310/148' def __init__(self): com_samsung.Profile.__init__(self) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'read', None), # all calendar reading ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ) def convertphonebooktophone(self, helper, data): return data; bitpim-1.0.7+dfsg1/src/phones/com_lgvx10000.py0000644001616600161660000000712111050407201016772 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2007 Nathan Hjelm ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### $Id: com_lgvx10000.py 4677 2008-08-12 22:28:17Z hjelmn $ """ Communicate with the LG VX10000 cell phone. """ # BitPim modules import common import com_brew import prototypes import com_lgvx8800 import p_lgvx10000 import helpids #------------------------------------------------------------------------------- parentphone=com_lgvx8800.Phone class Phone(parentphone): desc="LG-VX10000" helpid=helpids.ID_PHONE_LGVX10000 protocolclass=p_lgvx10000 serialsname='lgvx10000' my_model='VX10000' # Fundamentals: # - get_esn - same as LG VX-8300 # - getgroups - same as LG VX-8700 # - getwallpaperindices - LGUncountedIndexedMedia # - getringtoneindices - LGUncountedIndexedMedia # - DM Version - 5 or 6 # - phonebook - same as LG VX-8550 #------------------------------------------------------------------------------- parentprofile=com_lgvx8800.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='VX10000' # inside screen resoluation WALLPAPER_WIDTH = 400 WALLPAPER_HEIGHT = 240 imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images(sd)")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video(sd)")) # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", {'width': 240, 'height': 400, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 400, 'height': 240, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 120, 'height': 100, 'format': "JPEG"})) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading ('memo', 'read', None), # all memo list reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('sms', 'write', 'OVERWRITE'), # all SMS list writing ('memo', 'write', 'OVERWRITE'), # all memo list writing ## ('playlist', 'read', 'OVERWRITE'), ## ('playlist', 'write', 'OVERWRITE'), ('t9_udb', 'write', 'OVERWRITE'), ) if __debug__: _supportedsyncs+=( ('t9_udb', 'read', 'OVERWRITE'), ) bitpim-1.0.7+dfsg1/src/phones/com_lgvx9600.py0000644001616600161660000001210611153373614016745 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2009 Nathan Hjelm ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgvx9600.py 4725 2009-03-04 03:37:48Z djpham $ """ Communicate with the LG VX9600 cell phone. """ # BitPim modules import common import com_brew import prototypes import com_lgvx9700 import p_lgvx9600 import helpids import sms #------------------------------------------------------------------------------- parentphone=com_lgvx9700.Phone class Phone(parentphone): desc="LG-VX9600 (Versa)" helpid=helpids.ID_PHONE_LGVX9600 protocolclass=p_lgvx9600 serialsname='lgvx9600' my_model='VX9600' # built-in ringtones are represented by mp3 files that don't appear in /dload/myringtone.dat builtinringtones= ('Low Beep Once', 'Low Beeps', 'Loud Beep Once', 'Loud Beeps', 'Door Bell', 'VZW Default Ringtone', 'Telephone Ring', 'Simple Alert', 'Business Ring', 'Low Bell', 'Move Bell', 'Bubble Ring', 'Timeless', 'Voice of the Nature', 'Calling Trip', 'Latin Fever', 'Ride a Tiger', 'Allure', 'Limousine Blues', 'Surf the Groove', 'This Time', 'Under Cover of Darkness', 'Morning Call', 'Bee', 'Deep Blue Calling', 'East of Rain', 'No Ring',) ringtonelocations= ( # type index file default dir external dir max type Index ( 'ringers', 'dload/myringtone.dat','brew/mod/10889/ringtones','mmc1/ringers', 100, 0x01, 100), ( 'sounds', 'dload/mysound.dat', 'brew/mod/18067', '', 100, 0x02, None), ( 'sounds(sd)', 'dload/sd_sound.dat', 'mmc1/my_sounds', '', 100, 0x02, None), ( 'music', 'dload/efs_music.dat', 'my_music', '', 100, 0x104, None), ( 'music(sd)', 'dload/sd_music.dat', 'mmc1/my_music', '', 100, 0x14, None), ) def setDMversion(self): self._DMv5=False self._DMv6=True self._timeout=5 # Assume a quick timeout on newer phones # Fundamentals: # - get_esn - same as LG VX-8300 # - getgroups - same as LG VX-8700 # - getwallpaperindices - LGUncountedIndexedMedia # - getringtoneindices - LGUncountedIndexedMedia # - DM Version - 6 # - phonebook - same as LG VX-8550 # - SMS - same as LG VX-9700 #------------------------------------------------------------------------------- parentprofile=com_lgvx9700.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='VX9600' # inside screen resoluation WALLPAPER_WIDTH = 480 WALLPAPER_HEIGHT = 240 imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images(sd)")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video(sd)")) # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", {'width': 240, 'height': 480, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 480, 'height': 240, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 120, 'height': 100, 'format': "JPEG"})) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading ('memo', 'read', None), # all memo list reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('sms', 'write', 'OVERWRITE'), # all SMS list writing ('memo', 'write', 'OVERWRITE'), # all memo list writing ## ('playlist', 'read', 'OVERWRITE'), ## ('playlist', 'write', 'OVERWRITE'), ('t9_udb', 'write', 'OVERWRITE'), ) if __debug__: _supportedsyncs+=( ('t9_udb', 'read', 'OVERWRITE'), ) bitpim-1.0.7+dfsg1/src/phones/p_lgvx6000.p0000644001616600161660000002304710442561507016232 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lgvx6000.p 3352 2006-06-10 15:20:39Z skyjunky $ %{ """Various descriptions of data specific to LG VX6000""" from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx4400 except as noted # below from p_lgvx4400 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=500 MAXCALENDARDESCRIPTION=38 # Calendar parameters NUMCALENDARENTRIES=300 CAL_REP_NONE=0x10 CAL_REP_DAILY=0x11 CAL_REP_MONFRI=0x12 CAL_REP_WEEKLY=0x13 CAL_REP_MONTHLY=0x14 CAL_REP_YEARLY=0x15 CAL_DOW_SUN=0x0800 CAL_DOW_MON=0x0400 CAL_DOW_TUE=0x0200 CAL_DOW_WED=0x0100 CAL_DOW_THU=0x0080 CAL_DOW_FRI=0x0040 CAL_DOW_SAT=0x0020 CAL_DOW_EXCEPTIONS=0x0010 CAL_REMINDER_NONE=0 CAL_REMINDER_ONTIME=1 CAL_REMINDER_5MIN=2 CAL_REMINDER_10MIN=3 CAL_REMINDER_1HOUR=4 CAL_REMINDER_1DAY=5 CAL_REMINDER_2DAYS=6 CAL_REPEAT_DATE=(2100, 12, 31) cal_dir='sch' cal_data_file_name='sch/schedule.dat' cal_exception_file_name='sch/schexception.dat' cal_has_voice_id=False %} PACKET speeddial: 2 UINT {'default': 0xffff} +entry 1 UINT {'default': 0xff} +number PACKET speeddials: * LIST {'length': NUMSPEEDDIALS, 'elementclass': speeddial} +speeddials PACKET indexentry: 2 UINT {'default': 0xffff} +index 50 USTRING {'default': ""} +name PACKET indexfile: "Used for tracking wallpaper and ringtones" # A bit of a silly design again. Entries with an index of 0xffff are # 'blank'. Thus it is possible for numactiveitems and the actual # number of valid entries to be mismatched. 2 UINT numactiveitems * LIST {'elementclass': indexentry, 'createdefault': True} +items PACKET camindexentry: 1 UINT {'default': 0} +index 11 USTRING {'default': ""} +name 4 LGCALDATE +taken 4 UINT {'default': 0x00ff0100} +dunno PACKET campicsdat: "the cam/pics.dat file" * LIST {'length': 20, 'elementclass': camindexentry, 'createdefault': True} +items ### ### The calendar ### PACKET scheduleexception: 4 UINT pos "Refers to event id (position in schedule file) that this suppresses" 1 UINT day 1 UINT month 2 UINT year PACKET scheduleexceptionfile: * LIST {'elementclass': scheduleexception} +items PACKET scheduleevent: P UINT { 'constant': 60 } packet_size "Faster than packetsize()" 4 UINT pos "position within file, used as an event id" 4 LGCALDATE start 4 LGCALDATE end 1 UINT repeat 2 UINT daybitmap "which days a weekly repeat event happens on" 1 UINT { 'default': 0 } +pad2 1 UINT alarmminutes "a value of 100 indicates not set" 1 UINT alarmhours "a value of 100 indicates not set" 1 UINT alarmtype "preset alarm reminder type" 1 UINT { 'default': 0 } +snoozedelay "in minutes, not for this phone" 1 UINT ringtone 39 USTRING {'raiseontruncate': False, 'raiseonunterminatedread': False } description PACKET schedulefile: 2 UINT numactiveitems * LIST {'elementclass': scheduleevent} +events ### ### Call History ### PACKET call: 4 GPSDATE GPStime #no. of seconds since 0h 1-6-80, based off local time. 4 UINT unknown1 # different for each call 4 UINT duration #seconds, not certain about length of this field 49 USTRING {'raiseonunterminatedread': False} number 36 USTRING {'raiseonunterminatedread': False} name 1 UINT numberlength # length of phone number 1 UINT unknown2 # set to 1 on some calls 1 UINT pbnumbertype # 1=cell, 2=home, 3=office, 4=cell2, 5=fax, 6=vmail, 0xFF=not in phone book 2 UINT unknown3 # always seems to be 0 2 UINT pbentrynum #entry number in phonebook PACKET callhistory: 4 UINT numcalls 1 UINT unknown1 * LIST {'elementclass': call} +calls ### ### SMS ### # # There are 3 types of SMS records, The inbox, outbox and unsent (pending) # Unlike other records in the phone each message is stored in a separate file # All messages are in the 'sms' directory in the root of the phone # Inbox messages are in files called 'inbox000.dat', the number 000 varies for # each message, typically there are no gaps in the numbering, but gaps can appear # if a message is deleted. # Outbox message are named 'outbox000.dat', unsent messages are named 'sf00.dat', # only two digit file name that suggests a max of 100 message for this type. # Messages in the outbox get updated when the message is received by the recipient, # they contain a delivery flag and a delivery time for all the possible 10 recipients. # The vx8100 supports SMS contatination, this allows you to send text messages that are # longer than 160 characters. The format is different for these type of messages, but # it is supported by this implementation. # The vx8100 also allows you to put small graphics, sounds and animations in a message. # This implementation does not support these, if they are contained in a message they # will be ignored and just the text will be shown when you view the message in bitpim. # The text in the the messages is stored in 7-bit characters, so they have # to be unpacked, in concatinated messages and messages with embeded graphics etc. the # format uses the GSM 03.38 specified format, a good example of this can be found at # "http://www.dreamfabric.com/sms/hello.html". # For simple messages less than 161 characters with no graphics the format is simpler, # the 7-bit characters are just packed into memory in the order they appear in the # message. PACKET msg_record: # the first few fields in this packet have something to do with the type of SMS # message contained. EMS and concatinated text are coded differently than a # simple text message 1 UINT unknown1 # 0 1 UINT binary # 0=simple text, 1=binary/concatinated 1 UINT unknown3 # 0=simple text, 1=binary/concatinated 1 UINT unknown4 # 0 1 UINT unknown6 # 2=simple text, 9=binary/concatinated 1 UINT length * LIST {'length': 219} +msg: 1 UINT byte "individual byte of message" PACKET recipient_record: 2 UINT unknown1 49 USTRING number 1 UINT status # 1 when sent, 5 when received, 2 failed to send 4 LGCALDATE timesent 4 LGCALDATE timereceived 8 DATA unknown2 PACKET sms_saved: 4 UINT outboxmsg 4 UNKNOWN pad # used for GPStime on some phones if self.outboxmsg: * sms_out outbox if not self.outboxmsg: * sms_in inbox PACKET sms_out: P USTRING { 'default': '' } callback 4 UINT index # starting from 1, unique 1 UINT locked # 1=locked 3 UINT unknown1 # zero 4 LGCALDATE timesent # time the message was sent 21 USTRING subject 151 DATA unknown2 1 UINT num_msg_elements # up to 10 * LIST {'elementclass': msg_record, 'length': 10} +messages 1 UINT unknown5 1 UINT priority # 0=normal, 1=high 39 DATA unknown7 * LIST {'elementclass': recipient_record,'length': 10} +recipients PACKET SMSINBOXMSGFRAGMENT: * LIST {'length': 181} +msg: # this size could be wrong 1 UINT byte "individual byte of message" PACKET sms_in: 4 UINT msg_index1 4 UINT msg_index2 # equal to the numerical part of the filename eg inbox002.dat 2 UINT unknown2 # set to 0 for simple message and 3 for binary, 9 for page 4 UINT unknown3 # set to 0 6 SMSDATE timesent 3 UINT unknown 1 UINT callback_length # 0 for no callback number 38 USTRING callback 1 UINT sender_length * LIST {'length': 38} +sender: 1 UINT byte "individual byte of senders phone number" 15 DATA unknown4 # set to zeros 4 LGCALDATE lg_time # time the message was sent 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 2 UINT unknown5 # zero 1 UINT read # 1 if message has been read, 0 otherwise 1 UINT locked # 1 if the message is locked, 0 otherwise 2 UINT unknown8 # zero 1 UINT priority # 1 if the message is high priority, 0 otherwise 5 DATA flags # message flags, read, priority, locked etc 21 USTRING subject 1 UINT bin_header1 # 0 in simple message 1 if the message contains a binary header 1 UINT bin_header2 # 0 in simple message 9 if the message contains a binary header 2 UINT unknown6 # zeros 2 UINT multipartID # multi-part message ID, used for concatinated messages only 1 UINT bin_header3 # 0 in simple message 2 if the message contains a binary header 1 UINT num_msg_elements # max 10 elements (guessing on max here) * LIST {'length': 10} +msglengths: 1 UINT msglength "lengths of individual messages in septets" * LIST {'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT} +msgs # 181 bytes per message, uncertain on this, no multipart message available # 20 messages, 7-bit ascii for simple text. for binary header # first byte is header length not including the length byte # rest depends on content of header, not known at this time. # text alway follows the header although the format it different # than a simple SMS 437 DATA unknown5 33 USTRING senders_name 169 DATA unknown6 # ?? inlcudes senders phone number in ascii PACKET sms_quick_text: # the vx4400 has variable length NULL terminated strings null terminated in it's canned messages # file sms/mediacan000.dat, not sure about the max * LIST {} +msgs: * USTRING {} msg # bitpim-1.0.7+dfsg1/src/phones/p_lgvx6100.p0000644001616600161660000002740110445704035016227 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### Copyright (C) 2004 John O'Shaughnessy ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lgvx6100.p 3387 2006-06-20 05:31:09Z rogerb $ %{ """Various descriptions of data specific to LG VX6100""" from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx4400 except as noted # below from p_lgvx4400 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=500 MAXCALENDARDESCRIPTION=38 NUMEMAILS=3 NUMPHONENUMBERS=5 MEMOLENGTH=65 PHONE_ENCODING='iso8859_1' CAL_NO_VOICE=0xffff CAL_REPEAT_DATE=(2999, 12, 31) cal_has_voice_id=True cal_voice_id_ofs=0x11 cal_voice_ext='.qcp' # full name='sche000.qcp' %} PACKET speeddial: 2 UINT {'default': 0xffff} +entry 1 UINT {'default': 0xff} +number PACKET speeddials: * LIST {'length': NUMSPEEDDIALS, 'elementclass': speeddial} +speeddials PACKET indexentry: 2 UINT {'default': 0xffff} +index 50 USTRING {'default': ""} +name PACKET indexfile: "Used for tracking wallpaper and ringtones" # A bit of a silly design again. Entries with an index of 0xffff are # 'blank'. Thus it is possible for numactiveitems and the actual # number of valid entries to be mismatched. 2 UINT numactiveitems * LIST {'elementclass': indexentry, 'createdefault': True} +items PACKET pbgroup: "A single group" 1 UINT icon 23 USTRING {'encoding': PHONE_ENCODING} name PACKET pbgroups: "Phonebook groups" * LIST {'elementclass': pbgroup} +groups # All STRINGS have raiseonterminatedread as False since the phone does # occassionally leave out the terminator byte # Note if you change the length of any of these fields, you also # need to modify com_lgvx4500 to give a different truncateat parameter # in the convertphonebooktophone method PACKET pbentry: 4 UINT serial1 2 UINT entrysize 4 UINT serial2 2 UINT entrynumber 23 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 2 UINT group * LIST {'length': NUMEMAILS} +emails: 49 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} email 49 USTRING {'raiseonunterminatedread': False} url 1 UINT ringtone "ringtone index for a call" 1 UINT msgringtone "ringtone index for a text message" 1 BOOL secret * USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH} memo 1 UINT wallpaper * LIST {'length': NUMPHONENUMBERS} +numbertypes: 1 UINT numbertype * LIST {'length': NUMPHONENUMBERS} +numbers: 49 USTRING {'raiseonunterminatedread': False} number * UNKNOWN +unknown20c PACKET pbreadentryresponse: "Results of reading one entry" * pbheader header * pbentry entry PACKET pbupdateentryrequest: * pbheader {'command': 0x04, 'flag': 0x01} +header * pbentry entry PACKET pbappendentryrequest: * pbheader {'command': 0x03, 'flag': 0x01} +header * pbentry entry ### ### The calendar ### # # The calendar consists of one file listing events and an exception # file that lists exceptions. These exceptions suppress a particular # instance of a repeated event. For example, if you setup something # to happen monthly, but changed the 1st february event, then the # schedule will contain the repeating event, and the 1st feb one, # and the suppresions/exceptions file will point to the repeating # event and suppress the 1st feb. # The phone uses the position within the file to give an event an id PACKET scheduleexception: 4 UINT pos "Refers to event id (position in schedule file) that this suppresses" 1 UINT day 1 UINT month 2 UINT year PACKET scheduleexceptionfile: * LIST {'elementclass': scheduleexception} +items PACKET scheduleevent: 4 UINT pos "position within file, used as an event id" 4 LGCALDATE start 4 LGCALDATE end 1 UINT repeat "Repeat?" 3 UINT daybitmap "which days a weekly repeat event happens on?" 1 UINT alarmminutes "a value of 100 indicates not set" 1 UINT alarmhours "a value of 100 indicates not set" 1 UINT alarmtype "preset alarm reminder type" 1 UINT { 'default': 0 } +snoozedelay "in minutes?" 1 UINT ringtone 35 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } description 2 UINT { 'default': 0 } +unknown1 "This seems to always be two zeros" 2 UINT hasvoice "This event has an associated voice memo if 1" 2 UINT voiceid "sch/schexxx.qcp is the voice memo (xxx = voiceid - 0x0f)" 2 UINT { 'default': 0 } +unknown2 "This seems to always be yet two more zeros" PACKET schedulefile: 2 UINT numactiveitems * LIST {'elementclass': scheduleevent} +events PACKET camindexentry: 1 UINT {'default': 0} +index 11 USTRING {'default': ""} +name 4 LGCALDATE +taken 4 UINT {'default': 0x00ff0100} +dunno PACKET campicsdat: "the cam/pics.dat file" * LIST {'length': 60, 'elementclass': camindexentry, 'createdefault': True} +items PACKET call: 4 GPSDATE GPStime #no. of seconds since 0h 1-6-80, based off local time. 4 UINT unknown1 # different for each call 4 UINT duration #seconds, not certain about length of this field 49 USTRING {'raiseonunterminatedread': False} number 36 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 1 UINT numberlength # length of phone number 1 UINT unknown2 # set to 1 on some calls 1 UINT pbnumbertype # 1=cell, 2=home, 3=office, 4=cell2, 5=fax, 6=vmail, 0xFF=not in phone book 2 UINT unknown3 # always seems to be 0 2 UINT pbentrynum #entry number in phonebook PACKET callhistory: 4 UINT numcalls 1 UINT unknown1 * LIST {'elementclass': call} +calls PACKET firmwareresponse: 1 UINT command 11 USTRING {'terminator': None} date1 8 USTRING {'terminator': None} time1 11 USTRING {'terminator': None} date2 8 USTRING {'terminator': None} time2 8 USTRING {'terminator': None} firmware ### ### SMS ### # # There are 3 types of SMS records, The inbox, outbox and unsent (pending) # Unlike other records in the phone each message is stored in a separate file # All messages are in the 'sms' directory in the root of the phone # Inbox messages are in files called 'inbox000.dat', the number 000 varies for # each message, typically there are no gaps in the numbering, but gaps can appear # if a message is deleted. # Outbox message are named 'outbox000.dat', unsent messages are named 'sf00.dat', # only two digit file name that suggests a max of 100 message for this type. # Messages in the outbox get updated when the message is received by the recipient, # they contain a delivery flag and a delivery time for all the possible 10 recipients. # The vx8100 supports SMS contatination, this allows you to send text messages that are # longer than 160 characters. The format is different for these type of messages, but # it is supported by this implementation. # The vx8100 also allows you to put small graphics, sounds and animations in a message. # This implementation does not support these, if they are contained in a message they # will be ignored and just the text will be shown when you view the message in bitpim. # The text in the the messages is stored in 7-bit characters, so they have # to be unpacked, in concatinated messages and messages with embeded graphics etc. the # format uses the GSM 03.38 specified format, a good example of this can be found at # "http://www.dreamfabric.com/sms/hello.html". # For simple messages less than 161 characters with no graphics the format is simpler, # the 7-bit characters are just packed into memory in the order they appear in the # message. PACKET recipient_record: 14 UINT unknown1 49 USTRING number 1 UINT status # 1 when sent, 5 when received, 2 failed to send 4 LGCALDATE timesent 4 LGCALDATE timereceived 40 DATA unknown2 PACKET sms_saved: 4 UINT outboxmsg 4 GPSDATE GPStime # num seconds since 0h 1-6-80 if self.outboxmsg: * sms_out outbox if not self.outboxmsg: * sms_in inbox PACKET sms_out: 4 UINT index # starting from 1, unique 1 UINT locked # 1=locked 3 UINT unknown1 # zero 4 LGCALDATE timesent # time the message was sent 21 USTRING {'encoding': PHONE_ENCODING} subject 1 DATA unknown2 1 UINT num_msg_elements # up to 7 * LIST {'elementclass': msg_record, 'length': 7} +messages 2 UINT unknown6 1 UINT priority # 0=normal, 1=high 13 DATA unknown7 3 DATA unknown8 # set to 01,00,00 23 USTRING callback * LIST {'elementclass': recipient_record, 'length': 10} +recipients PACKET SMSINBOXMSGFRAGMENT: * LIST {'length': 181} +msg: # this size could be wrong 1 UINT byte "individual byte of message" PACKET sms_in: 4 UINT msg_index1 4 UINT msg_index2 2 UINT unknown2 # set to 0 4 UINT unknown3 # set to 0 6 SMSDATE timesent 3 UINT unknown 1 UINT callback_length # 0 for no callback number 38 USTRING callback 1 UINT sender_length * LIST {'length': 38} +sender: 1 UINT byte "individual byte of senders phone number" 15 DATA unknown4 # set to zeros 4 LGCALDATE lg_time # time the message was sent 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 2 UINT unknown5 # zero 1 UINT read # 1 if message has been read, 0 otherwise 1 UINT locked # 1 if the message is locked, 0 otherwise 2 UINT unknown8 1 UINT priority # 1 if the message is high priority, 0 otherwise 6 DATA flags # message flags 21 USTRING {'encoding': PHONE_ENCODING} subject 1 UINT bin_header1 # 0 in simple message 1 if the message contains a binary header 1 UINT bin_header2 # 0 in simple message 9 if the message contains a binary header 1 UINT multipartID # multi-part message ID, used for concatinated messages only 3 UINT unknown6 # zeros 1 UINT bin_header3 # 0 in simple message 2 if the message contains a binary header 1 UINT num_msg_elements # max 20 elements (guessing on max here) * LIST {'length': 20} +msglengths: 1 UINT msglength "lengths of individual messages in septets" * LIST {'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT} +msgs # 181 bytes per message, # 20 messages, 7-bit ascii for simple text. for binary header # first byte is header length not including the length byte # rest depends on content of header, not known at this time. # text alway follows the header although the format it different # than a simple SMS 68 DATA unknown5 33 USTRING senders_name 169 DATA unknown6 # ?? inlcudes senders phone number in ascii PACKET sms_quick_text: # the vx4400 has variable length NULL terminated strings null terminated in it's canned messages # file sms/mediacan000.dat, not sure about the max * LIST {} +msgs: * USTRING {'encoding': PHONE_ENCODING} msg # # Text Memos. LG memo support is weak, it only supports the raw text and none of # the features that other phones support, when you run bitpim you see loads of # options that do not work in the vx8100 on the memo page PACKET textmemo: 151 USTRING { 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } text PACKET textmemofile: 4 UINT itemcount * LIST { 'elementclass': textmemo } +items bitpim-1.0.7+dfsg1/src/phones/p_lgvx8500.py0000644001616600161660000042575710671602221016441 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VX8500""" from common import PhoneBookBusyException from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx8300 except as noted below from p_brew import * from p_lgvx8300 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb # Phonebook stuff RTPathIndexFile='pim/pbRingIdSetAsPath.dat' MsgRTIndexFile='pim/pbMsgRingIdSetAsPath.dat' WPPathIndexFile='pim/pbPictureIdSetAsPath.dat' pb_file_name='pim/pbentry.dat' # Calendar stuff ##NUMCALENDARENTRIES=?? #Play List stuff PLIndexFileName='dload/aodplaylist.lgpl' PLFilePath='dload' PLExt='.clgpl' PLMaxSize=50 # Max number of items per playlist # T9 User Database, how do we handle the Spanish DB? T9USERDBFILENAME='t9udb/t9udb_eng.dat' Default_Header='\x36\x00' \ '\x00\x00\x00\x00\x00\x00\x00\x00' Default_Header2= '\xFB\x07\xF6\x0F\xF1\x17' \ '\xEC\x1F\xE7\x27\xE2\x2F\xDD\x37' \ '\xD8\x3F\xD3\x47' class pbfileentry(BaseProtogenClass): __fields=['serial1', 'entrynumber', 'data1', 'ringtone', 'msgringtone', 'wallpaper', 'data2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbfileentry,self).__init__(**dict) if self.__class__ is pbfileentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbfileentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbfileentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_serial1.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_data1.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_msgringtone.writetobuffer(buf) self.__field_wallpaper.writetobuffer(buf) self.__field_data2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 2}) self.__field_entrynumber.readfrombuffer(buf) self.__field_data1=DATA(**{'sizeinbytes': 123}) self.__field_data1.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 2}) self.__field_ringtone.readfrombuffer(buf) self.__field_msgringtone=UINT(**{'sizeinbytes': 2}) self.__field_msgringtone.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 2}) self.__field_wallpaper.readfrombuffer(buf) self.__field_data2=DATA(**{'sizeinbytes': 250}) self.__field_data2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 2}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_data1(self): return self.__field_data1.getvalue() def __setfield_data1(self, value): if isinstance(value,DATA): self.__field_data1=value else: self.__field_data1=DATA(value,**{'sizeinbytes': 123}) def __delfield_data1(self): del self.__field_data1 data1=property(__getfield_data1, __setfield_data1, __delfield_data1, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 2}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_msgringtone(self): return self.__field_msgringtone.getvalue() def __setfield_msgringtone(self, value): if isinstance(value,UINT): self.__field_msgringtone=value else: self.__field_msgringtone=UINT(value,**{'sizeinbytes': 2}) def __delfield_msgringtone(self): del self.__field_msgringtone msgringtone=property(__getfield_msgringtone, __setfield_msgringtone, __delfield_msgringtone, None) def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 2}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_data2(self): return self.__field_data2.getvalue() def __setfield_data2(self, value): if isinstance(value,DATA): self.__field_data2=value else: self.__field_data2=DATA(value,**{'sizeinbytes': 250}) def __delfield_data2(self): del self.__field_data2 data2=property(__getfield_data2, __setfield_data2, __delfield_data2, None) def iscontainer(self): return True def containerelements(self): yield ('serial1', self.__field_serial1, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('data1', self.__field_data1, None) yield ('ringtone', self.__field_ringtone, None) yield ('msgringtone', self.__field_msgringtone, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('data2', self.__field_data2, None) class pbfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbfile,self).__init__(**dict) if self.__class__ is pbfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbfile,kwargs) if len(args): dict2={ 'elementclass': pbfileentry } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': pbfileentry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': pbfileentry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class PathIndexEntry(BaseProtogenClass): __fields=['pathname'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PathIndexEntry,self).__init__(**dict) if self.__class__ is PathIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PathIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PathIndexEntry,kwargs) if len(args): dict2={'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' } dict2.update(kwargs) kwargs=dict2 self.__field_pathname=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_pathname except: self.__field_pathname=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' }) self.__field_pathname.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pathname=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' }) self.__field_pathname.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pathname(self): try: self.__field_pathname except: self.__field_pathname=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' }) return self.__field_pathname.getvalue() def __setfield_pathname(self, value): if isinstance(value,USTRING): self.__field_pathname=value else: self.__field_pathname=USTRING(value,**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' }) def __delfield_pathname(self): del self.__field_pathname pathname=property(__getfield_pathname, __setfield_pathname, __delfield_pathname, None) def iscontainer(self): return True def containerelements(self): yield ('pathname', self.__field_pathname, None) class PathIndexFile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PathIndexFile,self).__init__(**dict) if self.__class__ is PathIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PathIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PathIndexFile,kwargs) if len(args): dict2={ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class PLIndexEntry(BaseProtogenClass): __fields=['pathname'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PLIndexEntry,self).__init__(**dict) if self.__class__ is PLIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PLIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PLIndexEntry,kwargs) if len(args): dict2={'sizeinbytes': 255, 'encoding': PHONE_ENCODING } dict2.update(kwargs) kwargs=dict2 self.__field_pathname=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pathname.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pathname=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING }) self.__field_pathname.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pathname(self): return self.__field_pathname.getvalue() def __setfield_pathname(self, value): if isinstance(value,USTRING): self.__field_pathname=value else: self.__field_pathname=USTRING(value,**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING }) def __delfield_pathname(self): del self.__field_pathname pathname=property(__getfield_pathname, __setfield_pathname, __delfield_pathname, None) def iscontainer(self): return True def containerelements(self): yield ('pathname', self.__field_pathname, None) class PLIndexFile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PLIndexFile,self).__init__(**dict) if self.__class__ is PLIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PLIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PLIndexFile,kwargs) if len(args): dict2={ 'elementclass': PLIndexEntry, 'createdefault': True } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': PLIndexEntry, 'createdefault': True }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': PLIndexEntry, 'createdefault': True }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': PLIndexEntry, 'createdefault': True }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': PLIndexEntry, 'createdefault': True }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class PLSongEntry(BaseProtogenClass): __fields=['pathname', 'tunename', 'artistname', 'albumname', 'genre', 'dunno1', 'date', 'size', 'zero'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PLSongEntry,self).__init__(**dict) if self.__class__ is PLSongEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PLSongEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PLSongEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pathname.writetobuffer(buf) try: self.__field_tunename except: self.__field_tunename=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': self.pathname }) self.__field_tunename.writetobuffer(buf) try: self.__field_artistname except: self.__field_artistname=USTRING(**{'sizeinbytes': 100, 'encoding': PHONE_ENCODING, 'default': 'Unknown' }) self.__field_artistname.writetobuffer(buf) try: self.__field_albumname except: self.__field_albumname=USTRING(**{'sizeinbytes': 100, 'encoding': PHONE_ENCODING, 'default': 'Unknown' }) self.__field_albumname.writetobuffer(buf) try: self.__field_genre except: self.__field_genre=USTRING(**{'sizeinbytes': 102, 'encoding': PHONE_ENCODING, 'default': 'Unknown' }) self.__field_genre.writetobuffer(buf) try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 4, 'default': 2 }) self.__field_dunno1.writetobuffer(buf) try: self.__field_date except: self.__field_date=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) self.__field_date.writetobuffer(buf) self.__field_size.writetobuffer(buf) try: self.__field_zero except: self.__field_zero=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_zero.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pathname=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING }) self.__field_pathname.readfrombuffer(buf) self.__field_tunename=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': self.pathname }) self.__field_tunename.readfrombuffer(buf) self.__field_artistname=USTRING(**{'sizeinbytes': 100, 'encoding': PHONE_ENCODING, 'default': 'Unknown' }) self.__field_artistname.readfrombuffer(buf) self.__field_albumname=USTRING(**{'sizeinbytes': 100, 'encoding': PHONE_ENCODING, 'default': 'Unknown' }) self.__field_albumname.readfrombuffer(buf) self.__field_genre=USTRING(**{'sizeinbytes': 102, 'encoding': PHONE_ENCODING, 'default': 'Unknown' }) self.__field_genre.readfrombuffer(buf) self.__field_dunno1=UINT(**{'sizeinbytes': 4, 'default': 2 }) self.__field_dunno1.readfrombuffer(buf) self.__field_date=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) self.__field_date.readfrombuffer(buf) self.__field_size=UINT(**{'sizeinbytes': 4}) self.__field_size.readfrombuffer(buf) self.__field_zero=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_zero.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pathname(self): return self.__field_pathname.getvalue() def __setfield_pathname(self, value): if isinstance(value,USTRING): self.__field_pathname=value else: self.__field_pathname=USTRING(value,**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING }) def __delfield_pathname(self): del self.__field_pathname pathname=property(__getfield_pathname, __setfield_pathname, __delfield_pathname, None) def __getfield_tunename(self): try: self.__field_tunename except: self.__field_tunename=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': self.pathname }) return self.__field_tunename.getvalue() def __setfield_tunename(self, value): if isinstance(value,USTRING): self.__field_tunename=value else: self.__field_tunename=USTRING(value,**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': self.pathname }) def __delfield_tunename(self): del self.__field_tunename tunename=property(__getfield_tunename, __setfield_tunename, __delfield_tunename, None) def __getfield_artistname(self): try: self.__field_artistname except: self.__field_artistname=USTRING(**{'sizeinbytes': 100, 'encoding': PHONE_ENCODING, 'default': 'Unknown' }) return self.__field_artistname.getvalue() def __setfield_artistname(self, value): if isinstance(value,USTRING): self.__field_artistname=value else: self.__field_artistname=USTRING(value,**{'sizeinbytes': 100, 'encoding': PHONE_ENCODING, 'default': 'Unknown' }) def __delfield_artistname(self): del self.__field_artistname artistname=property(__getfield_artistname, __setfield_artistname, __delfield_artistname, None) def __getfield_albumname(self): try: self.__field_albumname except: self.__field_albumname=USTRING(**{'sizeinbytes': 100, 'encoding': PHONE_ENCODING, 'default': 'Unknown' }) return self.__field_albumname.getvalue() def __setfield_albumname(self, value): if isinstance(value,USTRING): self.__field_albumname=value else: self.__field_albumname=USTRING(value,**{'sizeinbytes': 100, 'encoding': PHONE_ENCODING, 'default': 'Unknown' }) def __delfield_albumname(self): del self.__field_albumname albumname=property(__getfield_albumname, __setfield_albumname, __delfield_albumname, None) def __getfield_genre(self): try: self.__field_genre except: self.__field_genre=USTRING(**{'sizeinbytes': 102, 'encoding': PHONE_ENCODING, 'default': 'Unknown' }) return self.__field_genre.getvalue() def __setfield_genre(self, value): if isinstance(value,USTRING): self.__field_genre=value else: self.__field_genre=USTRING(value,**{'sizeinbytes': 102, 'encoding': PHONE_ENCODING, 'default': 'Unknown' }) def __delfield_genre(self): del self.__field_genre genre=property(__getfield_genre, __setfield_genre, __delfield_genre, None) def __getfield_dunno1(self): try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 4, 'default': 2 }) return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UINT): self.__field_dunno1=value else: self.__field_dunno1=UINT(value,**{'sizeinbytes': 4, 'default': 2 }) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_date(self): try: self.__field_date except: self.__field_date=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,GPSDATE): self.__field_date=value else: self.__field_date=GPSDATE(value,**{'sizeinbytes': 4, 'default': GPSDATE.now() }) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, None) def __getfield_size(self): return self.__field_size.getvalue() def __setfield_size(self, value): if isinstance(value,UINT): self.__field_size=value else: self.__field_size=UINT(value,**{'sizeinbytes': 4}) def __delfield_size(self): del self.__field_size size=property(__getfield_size, __setfield_size, __delfield_size, None) def __getfield_zero(self): try: self.__field_zero except: self.__field_zero=UINT(**{'sizeinbytes': 4, 'default': 0 }) return self.__field_zero.getvalue() def __setfield_zero(self, value): if isinstance(value,UINT): self.__field_zero=value else: self.__field_zero=UINT(value,**{'sizeinbytes': 4, 'default': 0 }) def __delfield_zero(self): del self.__field_zero zero=property(__getfield_zero, __setfield_zero, __delfield_zero, None) def iscontainer(self): return True def containerelements(self): yield ('pathname', self.__field_pathname, None) yield ('tunename', self.__field_tunename, None) yield ('artistname', self.__field_artistname, None) yield ('albumname', self.__field_albumname, None) yield ('genre', self.__field_genre, None) yield ('dunno1', self.__field_dunno1, None) yield ('date', self.__field_date, None) yield ('size', self.__field_size, None) yield ('zero', self.__field_zero, None) class PLPlayListFile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PLPlayListFile,self).__init__(**dict) if self.__class__ is PLPlayListFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PLPlayListFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PLPlayListFile,kwargs) if len(args): dict2={ 'elementclass': PLSongEntry, 'createdefault': True } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': PLSongEntry, 'createdefault': True }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': PLSongEntry, 'createdefault': True }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': PLSongEntry, 'createdefault': True }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': PLSongEntry, 'createdefault': True }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class msg_record(BaseProtogenClass): __fields=['binary', 'unknown3', 'unknown4', 'unknown6', 'length', 'msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(msg_record,self).__init__(**dict) if self.__class__ is msg_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(msg_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(msg_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_binary.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_length.writetobuffer(buf) try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8500_114, 'length': 219}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_binary=UINT(**{'sizeinbytes': 1}) self.__field_binary.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1}) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 1}) self.__field_unknown4.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 1}) self.__field_unknown6.readfrombuffer(buf) self.__field_length=UINT(**{'sizeinbytes': 1}) self.__field_length.readfrombuffer(buf) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8500_114, 'length': 219}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_binary(self): return self.__field_binary.getvalue() def __setfield_binary(self, value): if isinstance(value,UINT): self.__field_binary=value else: self.__field_binary=UINT(value,**{'sizeinbytes': 1}) def __delfield_binary(self): del self.__field_binary binary=property(__getfield_binary, __setfield_binary, __delfield_binary, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_length(self): return self.__field_length.getvalue() def __setfield_length(self, value): if isinstance(value,UINT): self.__field_length=value else: self.__field_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_length(self): del self.__field_length length=property(__getfield_length, __setfield_length, __delfield_length, None) def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8500_114, 'length': 219}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx8500_114, 'length': 219}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('binary', self.__field_binary, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) yield ('unknown6', self.__field_unknown6, None) yield ('length', self.__field_length, None) yield ('msg', self.__field_msg, None) class _gen_p_lgvx8500_114(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8500_114,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8500_114: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8500_114,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8500_114,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class recipient_record(BaseProtogenClass): __fields=['unknown1', 'number', 'status', 'dunno1', 'timesent', 'timereceived', 'unknown2', 'unknown3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(recipient_record,self).__init__(**dict) if self.__class__ is recipient_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(recipient_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(recipient_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_timereceived.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=DATA(**{'sizeinbytes': 33}) self.__field_unknown1.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 50}) self.__field_number.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_dunno1=UNKNOWN(**{'sizeinbytes': 3}) self.__field_dunno1.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_timereceived=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timereceived.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=DATA(**{'sizeinbytes': 57}) self.__field_unknown3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,DATA): self.__field_unknown1=value else: self.__field_unknown1=DATA(value,**{'sizeinbytes': 33}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 50}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UNKNOWN): self.__field_dunno1=value else: self.__field_dunno1=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_timereceived(self): return self.__field_timereceived.getvalue() def __setfield_timereceived(self, value): if isinstance(value,LGCALDATE): self.__field_timereceived=value else: self.__field_timereceived=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timereceived(self): del self.__field_timereceived timereceived=property(__getfield_timereceived, __setfield_timereceived, __delfield_timereceived, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,DATA): self.__field_unknown3=value else: self.__field_unknown3=DATA(value,**{'sizeinbytes': 57}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('number', self.__field_number, None) yield ('status', self.__field_status, None) yield ('dunno1', self.__field_dunno1, None) yield ('timesent', self.__field_timesent, None) yield ('timereceived', self.__field_timereceived, None) yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) class sms_saved(BaseProtogenClass): __fields=['outboxmsg', 'GPStime', 'outbox'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_saved,self).__init__(**dict) if self.__class__ is sms_saved: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_saved,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_saved,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_outboxmsg except: self.__field_outboxmsg=BOOL(**{ 'default': True }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_outbox.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_outbox=sms_out() self.__field_outbox.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_outboxmsg(self): try: self.__field_outboxmsg except: self.__field_outboxmsg=BOOL(**{ 'default': True }) return self.__field_outboxmsg.getvalue() def __setfield_outboxmsg(self, value): if isinstance(value,BOOL): self.__field_outboxmsg=value else: self.__field_outboxmsg=BOOL(value,**{ 'default': True }) def __delfield_outboxmsg(self): del self.__field_outboxmsg outboxmsg=property(__getfield_outboxmsg, __setfield_outboxmsg, __delfield_outboxmsg, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_outbox(self): return self.__field_outbox.getvalue() def __setfield_outbox(self, value): if isinstance(value,sms_out): self.__field_outbox=value else: self.__field_outbox=sms_out(value,) def __delfield_outbox(self): del self.__field_outbox outbox=property(__getfield_outbox, __setfield_outbox, __delfield_outbox, None) def iscontainer(self): return True def containerelements(self): yield ('outboxmsg', self.__field_outboxmsg, None) yield ('GPStime', self.__field_GPStime, None) yield ('outbox', self.__field_outbox, None) class sms_out(BaseProtogenClass): __fields=['index', 'locked', 'timesent', 'unknown2', 'subject', 'num_msg_elements', 'messages', 'unknown1', 'priority', 'unknown5', 'callback', 'recipients', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_out,self).__init__(**dict) if self.__class__ is sms_out: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_out,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_out,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) self.__field_messages.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_callback.writetobuffer(buf) try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) self.__field_recipients.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown2=UNKNOWN(**{'sizeinbytes': 7}) self.__field_unknown2.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 61, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) self.__field_messages.readfrombuffer(buf) self.__field_unknown1=UNKNOWN(**{'sizeinbytes': 8}) self.__field_unknown1.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_unknown5=UNKNOWN(**{'sizeinbytes': 16}) self.__field_unknown5.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 73}) self.__field_callback.readfrombuffer(buf) self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) self.__field_recipients.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UNKNOWN): self.__field_unknown2=value else: self.__field_unknown2=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 61, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_messages(self): try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) return self.__field_messages.getvalue() def __setfield_messages(self, value): if isinstance(value,LIST): self.__field_messages=value else: self.__field_messages=LIST(value,**{'elementclass': msg_record, 'length': 7}) def __delfield_messages(self): del self.__field_messages messages=property(__getfield_messages, __setfield_messages, __delfield_messages, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UNKNOWN): self.__field_unknown1=value else: self.__field_unknown1=UNKNOWN(value,**{'sizeinbytes': 8}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UNKNOWN): self.__field_unknown5=value else: self.__field_unknown5=UNKNOWN(value,**{'sizeinbytes': 16}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 73}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_recipients(self): try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) return self.__field_recipients.getvalue() def __setfield_recipients(self, value): if isinstance(value,LIST): self.__field_recipients=value else: self.__field_recipients=LIST(value,**{'elementclass': recipient_record,'length': 9}) def __delfield_recipients(self): del self.__field_recipients recipients=property(__getfield_recipients, __setfield_recipients, __delfield_recipients, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('locked', self.__field_locked, None) yield ('timesent', self.__field_timesent, None) yield ('unknown2', self.__field_unknown2, None) yield ('subject', self.__field_subject, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('messages', self.__field_messages, None) yield ('unknown1', self.__field_unknown1, None) yield ('priority', self.__field_priority, None) yield ('unknown5', self.__field_unknown5, None) yield ('callback', self.__field_callback, None) yield ('recipients', self.__field_recipients, None) yield ('pad', self.__field_pad, None) class SMSINBOXMSGFRAGMENT(BaseProtogenClass): __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSINBOXMSGFRAGMENT,self).__init__(**dict) if self.__class__ is SMSINBOXMSGFRAGMENT: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSINBOXMSGFRAGMENT,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSINBOXMSGFRAGMENT,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx8500_148, 'length': 181} dict2.update(kwargs) kwargs=dict2 self.__field_msg=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8500_148, 'length': 181}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8500_148, 'length': 181}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8500_148, 'length': 181}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx8500_148, 'length': 181}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class _gen_p_lgvx8500_148(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8500_148,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8500_148: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8500_148,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8500_148,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class sms_in(BaseProtogenClass): __fields=['unknown1', 'lg_time', 'unknown2', 'GPStime', 'timesent', 'read', 'locked', 'priority', 'dunno1', 'subject', 'dunno2', 'num_msg_elements', 'msglengths', 'unknown9', 'msgs', 'dunno3', 'sender_length', 'sender', 'dunno4', 'callback_length', 'callback', 'PAD', 'bin_header1', 'bin_header2', 'multipartID', 'bin_header3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_in,self).__init__(**dict) if self.__class__ is sms_in: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_in,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_in,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_bin_header1 except: self.__field_bin_header1=UINT(**{ 'default': 0 }) try: self.__field_bin_header2 except: self.__field_bin_header2=UINT(**{ 'default': 0 }) try: self.__field_multipartID except: self.__field_multipartID=UINT(**{ 'default': 0 }) try: self.__field_bin_header3 except: self.__field_bin_header3=UINT(**{ 'default': 0 }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_lg_time.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx8500_165, 'length': 10}) self.__field_msglengths.writetobuffer(buf) self.__field_unknown9.writetobuffer(buf) try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.writetobuffer(buf) self.__field_dunno3.writetobuffer(buf) self.__field_sender_length.writetobuffer(buf) try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx8500_171, 'length': 49}) self.__field_sender.writetobuffer(buf) self.__field_dunno4.writetobuffer(buf) self.__field_callback_length.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_PAD.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_unknown1.readfrombuffer(buf) self.__field_lg_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_lg_time.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_timesent=SMSDATE(**{'sizeinbytes': 6}) self.__field_timesent.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 1}) self.__field_read.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_dunno1=UNKNOWN(**{'sizeinbytes': 6}) self.__field_dunno1.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False }) self.__field_subject.readfrombuffer(buf) self.__field_dunno2=UNKNOWN(**{'sizeinbytes': 47}) self.__field_dunno2.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx8500_165, 'length': 10}) self.__field_msglengths.readfrombuffer(buf) self.__field_unknown9=UNKNOWN(**{'sizeinbytes': 10}) self.__field_unknown9.readfrombuffer(buf) self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.readfrombuffer(buf) self.__field_dunno3=UNKNOWN(**{'sizeinbytes': 2594}) self.__field_dunno3.readfrombuffer(buf) self.__field_sender_length=UINT(**{'sizeinbytes': 1}) self.__field_sender_length.readfrombuffer(buf) self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx8500_171, 'length': 49}) self.__field_sender.readfrombuffer(buf) self.__field_dunno4=UNKNOWN(**{'sizeinbytes': 3}) self.__field_dunno4.readfrombuffer(buf) self.__field_callback_length=UINT(**{'sizeinbytes': 1}) self.__field_callback_length.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 55}) self.__field_callback.readfrombuffer(buf) self.__field_PAD=UNKNOWN() self.__field_PAD.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UNKNOWN): self.__field_unknown1=value else: self.__field_unknown1=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_lg_time(self): return self.__field_lg_time.getvalue() def __setfield_lg_time(self, value): if isinstance(value,LGCALDATE): self.__field_lg_time=value else: self.__field_lg_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_lg_time(self): del self.__field_lg_time lg_time=property(__getfield_lg_time, __setfield_lg_time, __delfield_lg_time, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,SMSDATE): self.__field_timesent=value else: self.__field_timesent=SMSDATE(value,**{'sizeinbytes': 6}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 1}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UNKNOWN): self.__field_dunno1=value else: self.__field_dunno1=UNKNOWN(value,**{'sizeinbytes': 6}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False }) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UNKNOWN): self.__field_dunno2=value else: self.__field_dunno2=UNKNOWN(value,**{'sizeinbytes': 47}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_msglengths(self): try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx8500_165, 'length': 10}) return self.__field_msglengths.getvalue() def __setfield_msglengths(self, value): if isinstance(value,LIST): self.__field_msglengths=value else: self.__field_msglengths=LIST(value,**{'elementclass': _gen_p_lgvx8500_165, 'length': 10}) def __delfield_msglengths(self): del self.__field_msglengths msglengths=property(__getfield_msglengths, __setfield_msglengths, __delfield_msglengths, None) def __getfield_unknown9(self): return self.__field_unknown9.getvalue() def __setfield_unknown9(self, value): if isinstance(value,UNKNOWN): self.__field_unknown9=value else: self.__field_unknown9=UNKNOWN(value,**{'sizeinbytes': 10}) def __delfield_unknown9(self): del self.__field_unknown9 unknown9=property(__getfield_unknown9, __setfield_unknown9, __delfield_unknown9, None) def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def __getfield_dunno3(self): return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,UNKNOWN): self.__field_dunno3=value else: self.__field_dunno3=UNKNOWN(value,**{'sizeinbytes': 2594}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_sender_length(self): return self.__field_sender_length.getvalue() def __setfield_sender_length(self, value): if isinstance(value,UINT): self.__field_sender_length=value else: self.__field_sender_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_sender_length(self): del self.__field_sender_length sender_length=property(__getfield_sender_length, __setfield_sender_length, __delfield_sender_length, None) def __getfield_sender(self): try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx8500_171, 'length': 49}) return self.__field_sender.getvalue() def __setfield_sender(self, value): if isinstance(value,LIST): self.__field_sender=value else: self.__field_sender=LIST(value,**{'elementclass': _gen_p_lgvx8500_171, 'length': 49}) def __delfield_sender(self): del self.__field_sender sender=property(__getfield_sender, __setfield_sender, __delfield_sender, None) def __getfield_dunno4(self): return self.__field_dunno4.getvalue() def __setfield_dunno4(self, value): if isinstance(value,UNKNOWN): self.__field_dunno4=value else: self.__field_dunno4=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_dunno4(self): del self.__field_dunno4 dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None) def __getfield_callback_length(self): return self.__field_callback_length.getvalue() def __setfield_callback_length(self, value): if isinstance(value,UINT): self.__field_callback_length=value else: self.__field_callback_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_length(self): del self.__field_callback_length callback_length=property(__getfield_callback_length, __setfield_callback_length, __delfield_callback_length, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 55}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_PAD(self): return self.__field_PAD.getvalue() def __setfield_PAD(self, value): if isinstance(value,UNKNOWN): self.__field_PAD=value else: self.__field_PAD=UNKNOWN(value,) def __delfield_PAD(self): del self.__field_PAD PAD=property(__getfield_PAD, __setfield_PAD, __delfield_PAD, None) def __getfield_bin_header1(self): try: self.__field_bin_header1 except: self.__field_bin_header1=UINT(**{ 'default': 0 }) return self.__field_bin_header1.getvalue() def __setfield_bin_header1(self, value): if isinstance(value,UINT): self.__field_bin_header1=value else: self.__field_bin_header1=UINT(value,**{ 'default': 0 }) def __delfield_bin_header1(self): del self.__field_bin_header1 bin_header1=property(__getfield_bin_header1, __setfield_bin_header1, __delfield_bin_header1, None) def __getfield_bin_header2(self): try: self.__field_bin_header2 except: self.__field_bin_header2=UINT(**{ 'default': 0 }) return self.__field_bin_header2.getvalue() def __setfield_bin_header2(self, value): if isinstance(value,UINT): self.__field_bin_header2=value else: self.__field_bin_header2=UINT(value,**{ 'default': 0 }) def __delfield_bin_header2(self): del self.__field_bin_header2 bin_header2=property(__getfield_bin_header2, __setfield_bin_header2, __delfield_bin_header2, None) def __getfield_multipartID(self): try: self.__field_multipartID except: self.__field_multipartID=UINT(**{ 'default': 0 }) return self.__field_multipartID.getvalue() def __setfield_multipartID(self, value): if isinstance(value,UINT): self.__field_multipartID=value else: self.__field_multipartID=UINT(value,**{ 'default': 0 }) def __delfield_multipartID(self): del self.__field_multipartID multipartID=property(__getfield_multipartID, __setfield_multipartID, __delfield_multipartID, None) def __getfield_bin_header3(self): try: self.__field_bin_header3 except: self.__field_bin_header3=UINT(**{ 'default': 0 }) return self.__field_bin_header3.getvalue() def __setfield_bin_header3(self, value): if isinstance(value,UINT): self.__field_bin_header3=value else: self.__field_bin_header3=UINT(value,**{ 'default': 0 }) def __delfield_bin_header3(self): del self.__field_bin_header3 bin_header3=property(__getfield_bin_header3, __setfield_bin_header3, __delfield_bin_header3, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('lg_time', self.__field_lg_time, None) yield ('unknown2', self.__field_unknown2, None) yield ('GPStime', self.__field_GPStime, None) yield ('timesent', self.__field_timesent, None) yield ('read', self.__field_read, None) yield ('locked', self.__field_locked, None) yield ('priority', self.__field_priority, None) yield ('dunno1', self.__field_dunno1, None) yield ('subject', self.__field_subject, None) yield ('dunno2', self.__field_dunno2, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('msglengths', self.__field_msglengths, None) yield ('unknown9', self.__field_unknown9, None) yield ('msgs', self.__field_msgs, None) yield ('dunno3', self.__field_dunno3, None) yield ('sender_length', self.__field_sender_length, None) yield ('sender', self.__field_sender, None) yield ('dunno4', self.__field_dunno4, None) yield ('callback_length', self.__field_callback_length, None) yield ('callback', self.__field_callback, None) yield ('PAD', self.__field_PAD, None) yield ('bin_header1', self.__field_bin_header1, None) yield ('bin_header2', self.__field_bin_header2, None) yield ('multipartID', self.__field_multipartID, None) yield ('bin_header3', self.__field_bin_header3, None) class _gen_p_lgvx8500_165(BaseProtogenClass): 'Anonymous inner class' __fields=['msglength'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8500_165,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8500_165: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8500_165,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8500_165,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_msglength=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msglength.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msglength=UINT(**{'sizeinbytes': 1}) self.__field_msglength.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msglength(self): return self.__field_msglength.getvalue() def __setfield_msglength(self, value): if isinstance(value,UINT): self.__field_msglength=value else: self.__field_msglength=UINT(value,**{'sizeinbytes': 1}) def __delfield_msglength(self): del self.__field_msglength msglength=property(__getfield_msglength, __setfield_msglength, __delfield_msglength, "lengths of individual messages in septets") def iscontainer(self): return True def containerelements(self): yield ('msglength', self.__field_msglength, "lengths of individual messages in septets") class _gen_p_lgvx8500_171(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8500_171,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8500_171: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8500_171,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8500_171,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of senders phone number") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of senders phone number") class sms_quick_text(BaseProtogenClass): __fields=['msgs'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_quick_text,self).__init__(**dict) if self.__class__ is sms_quick_text: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_quick_text,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_quick_text,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx8500_185, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_msgs=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx8500_185, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) self.__field_msgs.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx8500_185, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) self.__field_msgs.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx8500_185, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'elementclass': _gen_p_lgvx8500_185, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def iscontainer(self): return True def containerelements(self): yield ('msgs', self.__field_msgs, None) class _gen_p_lgvx8500_185(BaseProtogenClass): 'Anonymous inner class' __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8500_185,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8500_185: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8500_185,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8500_185,kwargs) if len(args): dict2={'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""} dict2.update(kwargs) kwargs=dict2 self.__field_msg=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class LockKeyReq(BaseProtogenClass): __fields=['cmd', 'lock'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(LockKeyReq,self).__init__(**dict) if self.__class__ is LockKeyReq: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(LockKeyReq,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(LockKeyReq,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0x21 }) self.__field_cmd.writetobuffer(buf) try: self.__field_lock except: self.__field_lock=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_lock.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0x21 }) self.__field_cmd.readfrombuffer(buf) self.__field_lock=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_lock.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0x21 }) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'default': 0x21 }) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_lock(self): try: self.__field_lock except: self.__field_lock=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_lock.getvalue() def __setfield_lock(self, value): if isinstance(value,UINT): self.__field_lock=value else: self.__field_lock=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_lock(self): del self.__field_lock lock=property(__getfield_lock, __setfield_lock, __delfield_lock, "0=Lock, 1=Unlock") def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('lock', self.__field_lock, "0=Lock, 1=Unlock") class KeyPressReq(BaseProtogenClass): __fields=['cmd', 'hold', 'key'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(KeyPressReq,self).__init__(**dict) if self.__class__ is KeyPressReq: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(KeyPressReq,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(KeyPressReq,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0x20 }) self.__field_cmd.writetobuffer(buf) try: self.__field_hold except: self.__field_hold=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_hold.writetobuffer(buf) self.__field_key.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0x20 }) self.__field_cmd.readfrombuffer(buf) self.__field_hold=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_hold.readfrombuffer(buf) self.__field_key=STRING(**{'sizeinbytes': 1, 'terminator': None, 'sizeinbytes': 1 }) self.__field_key.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0x20 }) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'default': 0x20 }) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_hold(self): try: self.__field_hold except: self.__field_hold=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_hold.getvalue() def __setfield_hold(self, value): if isinstance(value,UINT): self.__field_hold=value else: self.__field_hold=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_hold(self): del self.__field_hold hold=property(__getfield_hold, __setfield_hold, __delfield_hold, None) def __getfield_key(self): return self.__field_key.getvalue() def __setfield_key(self, value): if isinstance(value,STRING): self.__field_key=value else: self.__field_key=STRING(value,**{'sizeinbytes': 1, 'terminator': None, 'sizeinbytes': 1 }) def __delfield_key(self): del self.__field_key key=property(__getfield_key, __setfield_key, __delfield_key, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('hold', self.__field_hold, None) yield ('key', self.__field_key, None) class t9udbfile(BaseProtogenClass): __fields=['file_length', 'unknown1', 'word_count', 'unknown2', 'free_space', 'unknown3', 'extra_cnt', 'unknown4', 'extras', 'A0', 'blocks'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(t9udbfile,self).__init__(**dict) if self.__class__ is t9udbfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(t9udbfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(t9udbfile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_file_length except: self.__field_file_length=UINT(**{'sizeinbytes': 2, 'default': 0x5000 }) self.__field_file_length.writetobuffer(buf) try: self.__field_unknown1 except: self.__field_unknown1=DATA(**{'sizeinbytes': 6, 'default': '\x7B\x1B\x00\x00\x01\x00' }) self.__field_unknown1.writetobuffer(buf) self.__field_word_count.writetobuffer(buf) try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 2, 'default': 0x00 }) self.__field_unknown2.writetobuffer(buf) self.__field_free_space.writetobuffer(buf) try: self.__field_unknown3 except: self.__field_unknown3=DATA(**{'sizeinbytes': 10, 'default': Default_Header }) self.__field_unknown3.writetobuffer(buf) try: self.__field_extra_cnt except: self.__field_extra_cnt=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_extra_cnt.writetobuffer(buf) try: self.__field_unknown4 except: self.__field_unknown4=DATA(**{'sizeinbytes': 18, 'default': Default_Header2 }) self.__field_unknown4.writetobuffer(buf) if self.extra_cnt: try: self.__field_extras except: self.__field_extras=LIST(**{'elementclass': _gen_p_lgvx8500_211, 'length': self.extra_cnt }) self.__field_extras.writetobuffer(buf) try: self.__field_A0 except: self.__field_A0=UINT(**{'sizeinbytes': 1, 'constant': 0xA0 }) self.__field_A0.writetobuffer(buf) try: self.__field_blocks except: self.__field_blocks=LIST(**{'elementclass': _gen_p_lgvx8500_214, 'createdefault': True }) self.__field_blocks.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_file_length=UINT(**{'sizeinbytes': 2, 'default': 0x5000 }) self.__field_file_length.readfrombuffer(buf) self.__field_unknown1=DATA(**{'sizeinbytes': 6, 'default': '\x7B\x1B\x00\x00\x01\x00' }) self.__field_unknown1.readfrombuffer(buf) self.__field_word_count=UINT(**{'sizeinbytes': 2}) self.__field_word_count.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2, 'default': 0x00 }) self.__field_unknown2.readfrombuffer(buf) self.__field_free_space=UINT(**{'sizeinbytes': 2}) self.__field_free_space.readfrombuffer(buf) self.__field_unknown3=DATA(**{'sizeinbytes': 10, 'default': Default_Header }) self.__field_unknown3.readfrombuffer(buf) self.__field_extra_cnt=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_extra_cnt.readfrombuffer(buf) self.__field_unknown4=DATA(**{'sizeinbytes': 18, 'default': Default_Header2 }) self.__field_unknown4.readfrombuffer(buf) if self.extra_cnt: self.__field_extras=LIST(**{'elementclass': _gen_p_lgvx8500_211, 'length': self.extra_cnt }) self.__field_extras.readfrombuffer(buf) self.__field_A0=UINT(**{'sizeinbytes': 1, 'constant': 0xA0 }) self.__field_A0.readfrombuffer(buf) self.__field_blocks=LIST(**{'elementclass': _gen_p_lgvx8500_214, 'createdefault': True }) self.__field_blocks.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_file_length(self): try: self.__field_file_length except: self.__field_file_length=UINT(**{'sizeinbytes': 2, 'default': 0x5000 }) return self.__field_file_length.getvalue() def __setfield_file_length(self, value): if isinstance(value,UINT): self.__field_file_length=value else: self.__field_file_length=UINT(value,**{'sizeinbytes': 2, 'default': 0x5000 }) def __delfield_file_length(self): del self.__field_file_length file_length=property(__getfield_file_length, __setfield_file_length, __delfield_file_length, None) def __getfield_unknown1(self): try: self.__field_unknown1 except: self.__field_unknown1=DATA(**{'sizeinbytes': 6, 'default': '\x7B\x1B\x00\x00\x01\x00' }) return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,DATA): self.__field_unknown1=value else: self.__field_unknown1=DATA(value,**{'sizeinbytes': 6, 'default': '\x7B\x1B\x00\x00\x01\x00' }) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_word_count(self): return self.__field_word_count.getvalue() def __setfield_word_count(self, value): if isinstance(value,UINT): self.__field_word_count=value else: self.__field_word_count=UINT(value,**{'sizeinbytes': 2}) def __delfield_word_count(self): del self.__field_word_count word_count=property(__getfield_word_count, __setfield_word_count, __delfield_word_count, None) def __getfield_unknown2(self): try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 2, 'default': 0x00 }) return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2, 'default': 0x00 }) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_free_space(self): return self.__field_free_space.getvalue() def __setfield_free_space(self, value): if isinstance(value,UINT): self.__field_free_space=value else: self.__field_free_space=UINT(value,**{'sizeinbytes': 2}) def __delfield_free_space(self): del self.__field_free_space free_space=property(__getfield_free_space, __setfield_free_space, __delfield_free_space, None) def __getfield_unknown3(self): try: self.__field_unknown3 except: self.__field_unknown3=DATA(**{'sizeinbytes': 10, 'default': Default_Header }) return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,DATA): self.__field_unknown3=value else: self.__field_unknown3=DATA(value,**{'sizeinbytes': 10, 'default': Default_Header }) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_extra_cnt(self): try: self.__field_extra_cnt except: self.__field_extra_cnt=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_extra_cnt.getvalue() def __setfield_extra_cnt(self, value): if isinstance(value,UINT): self.__field_extra_cnt=value else: self.__field_extra_cnt=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_extra_cnt(self): del self.__field_extra_cnt extra_cnt=property(__getfield_extra_cnt, __setfield_extra_cnt, __delfield_extra_cnt, None) def __getfield_unknown4(self): try: self.__field_unknown4 except: self.__field_unknown4=DATA(**{'sizeinbytes': 18, 'default': Default_Header2 }) return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,DATA): self.__field_unknown4=value else: self.__field_unknown4=DATA(value,**{'sizeinbytes': 18, 'default': Default_Header2 }) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_extras(self): try: self.__field_extras except: self.__field_extras=LIST(**{'elementclass': _gen_p_lgvx8500_211, 'length': self.extra_cnt }) return self.__field_extras.getvalue() def __setfield_extras(self, value): if isinstance(value,LIST): self.__field_extras=value else: self.__field_extras=LIST(value,**{'elementclass': _gen_p_lgvx8500_211, 'length': self.extra_cnt }) def __delfield_extras(self): del self.__field_extras extras=property(__getfield_extras, __setfield_extras, __delfield_extras, None) def __getfield_A0(self): try: self.__field_A0 except: self.__field_A0=UINT(**{'sizeinbytes': 1, 'constant': 0xA0 }) return self.__field_A0.getvalue() def __setfield_A0(self, value): if isinstance(value,UINT): self.__field_A0=value else: self.__field_A0=UINT(value,**{'sizeinbytes': 1, 'constant': 0xA0 }) def __delfield_A0(self): del self.__field_A0 A0=property(__getfield_A0, __setfield_A0, __delfield_A0, None) def __getfield_blocks(self): try: self.__field_blocks except: self.__field_blocks=LIST(**{'elementclass': _gen_p_lgvx8500_214, 'createdefault': True }) return self.__field_blocks.getvalue() def __setfield_blocks(self, value): if isinstance(value,LIST): self.__field_blocks=value else: self.__field_blocks=LIST(value,**{'elementclass': _gen_p_lgvx8500_214, 'createdefault': True }) def __delfield_blocks(self): del self.__field_blocks blocks=property(__getfield_blocks, __setfield_blocks, __delfield_blocks, None) def iscontainer(self): return True def containerelements(self): yield ('file_length', self.__field_file_length, None) yield ('unknown1', self.__field_unknown1, None) yield ('word_count', self.__field_word_count, None) yield ('unknown2', self.__field_unknown2, None) yield ('free_space', self.__field_free_space, None) yield ('unknown3', self.__field_unknown3, None) yield ('extra_cnt', self.__field_extra_cnt, None) yield ('unknown4', self.__field_unknown4, None) if self.extra_cnt: yield ('extras', self.__field_extras, None) yield ('A0', self.__field_A0, None) yield ('blocks', self.__field_blocks, None) class _gen_p_lgvx8500_211(BaseProtogenClass): 'Anonymous inner class' __fields=['extra'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8500_211,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8500_211: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8500_211,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8500_211,kwargs) if len(args): dict2={'sizeinbytes': 1, 'default': 0 } dict2.update(kwargs) kwargs=dict2 self.__field_extra=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_extra except: self.__field_extra=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_extra.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_extra=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_extra.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_extra(self): try: self.__field_extra except: self.__field_extra=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_extra.getvalue() def __setfield_extra(self, value): if isinstance(value,UINT): self.__field_extra=value else: self.__field_extra=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_extra(self): del self.__field_extra extra=property(__getfield_extra, __setfield_extra, __delfield_extra, None) def iscontainer(self): return True def containerelements(self): yield ('extra', self.__field_extra, None) class _gen_p_lgvx8500_214(BaseProtogenClass): 'Anonymous inner class' __fields=['block'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8500_214,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8500_214: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8500_214,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8500_214,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_block=T9USERDBBLOCK(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_block.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_block=T9USERDBBLOCK() self.__field_block.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_block(self): return self.__field_block.getvalue() def __setfield_block(self, value): if isinstance(value,T9USERDBBLOCK): self.__field_block=value else: self.__field_block=T9USERDBBLOCK(value,) def __delfield_block(self): del self.__field_block block=property(__getfield_block, __setfield_block, __delfield_block, None) def iscontainer(self): return True def containerelements(self): yield ('block', self.__field_block, None) class DMKeyReq(BaseProtogenClass): __fields=['cmd', 'body'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(DMKeyReq,self).__init__(**dict) if self.__class__ is DMKeyReq: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(DMKeyReq,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(DMKeyReq,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0xFE }) self.__field_cmd.writetobuffer(buf) try: self.__field_body except: self.__field_body=STRING(**{'sizeinbytes': 6, 'terminator': None, 'default': '\x00\x00\x00\x00\x00\x00' }) self.__field_body.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0xFE }) self.__field_cmd.readfrombuffer(buf) self.__field_body=STRING(**{'sizeinbytes': 6, 'terminator': None, 'default': '\x00\x00\x00\x00\x00\x00' }) self.__field_body.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0xFE }) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'default': 0xFE }) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_body(self): try: self.__field_body except: self.__field_body=STRING(**{'sizeinbytes': 6, 'terminator': None, 'default': '\x00\x00\x00\x00\x00\x00' }) return self.__field_body.getvalue() def __setfield_body(self, value): if isinstance(value,STRING): self.__field_body=value else: self.__field_body=STRING(value,**{'sizeinbytes': 6, 'terminator': None, 'default': '\x00\x00\x00\x00\x00\x00' }) def __delfield_body(self): del self.__field_body body=property(__getfield_body, __setfield_body, __delfield_body, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('body', self.__field_body, None) class DMKeyResp(BaseProtogenClass): __fields=['cmd', 'code', 'key', 'one'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(DMKeyResp,self).__init__(**dict) if self.__class__ is DMKeyResp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(DMKeyResp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(DMKeyResp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_cmd.writetobuffer(buf) self.__field_code.writetobuffer(buf) self.__field_key.writetobuffer(buf) self.__field_one.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1}) self.__field_cmd.readfrombuffer(buf) self.__field_code=UINT(**{'sizeinbytes': 1}) self.__field_code.readfrombuffer(buf) self.__field_key=UINT(**{'sizeinbytes': 4}) self.__field_key.readfrombuffer(buf) self.__field_one=UINT(**{'sizeinbytes': 1}) self.__field_one.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_code(self): return self.__field_code.getvalue() def __setfield_code(self, value): if isinstance(value,UINT): self.__field_code=value else: self.__field_code=UINT(value,**{'sizeinbytes': 1}) def __delfield_code(self): del self.__field_code code=property(__getfield_code, __setfield_code, __delfield_code, None) def __getfield_key(self): return self.__field_key.getvalue() def __setfield_key(self, value): if isinstance(value,UINT): self.__field_key=value else: self.__field_key=UINT(value,**{'sizeinbytes': 4}) def __delfield_key(self): del self.__field_key key=property(__getfield_key, __setfield_key, __delfield_key, None) def __getfield_one(self): return self.__field_one.getvalue() def __setfield_one(self, value): if isinstance(value,UINT): self.__field_one=value else: self.__field_one=UINT(value,**{'sizeinbytes': 1}) def __delfield_one(self): del self.__field_one one=property(__getfield_one, __setfield_one, __delfield_one, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('code', self.__field_code, None) yield ('key', self.__field_key, None) yield ('one', self.__field_one, None) class DMReq(BaseProtogenClass): __fields=['cmd', 'one', 'key', 'zero'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(DMReq,self).__init__(**dict) if self.__class__ is DMReq: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(DMReq,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(DMReq,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0xFE }) self.__field_cmd.writetobuffer(buf) try: self.__field_one except: self.__field_one=UINT(**{'sizeinbytes': 1, 'default': 1 }) self.__field_one.writetobuffer(buf) self.__field_key.writetobuffer(buf) try: self.__field_zero except: self.__field_zero=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_zero.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0xFE }) self.__field_cmd.readfrombuffer(buf) self.__field_one=UINT(**{'sizeinbytes': 1, 'default': 1 }) self.__field_one.readfrombuffer(buf) self.__field_key=UINT(**{'sizeinbytes': 4}) self.__field_key.readfrombuffer(buf) self.__field_zero=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_zero.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0xFE }) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'default': 0xFE }) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_one(self): try: self.__field_one except: self.__field_one=UINT(**{'sizeinbytes': 1, 'default': 1 }) return self.__field_one.getvalue() def __setfield_one(self, value): if isinstance(value,UINT): self.__field_one=value else: self.__field_one=UINT(value,**{'sizeinbytes': 1, 'default': 1 }) def __delfield_one(self): del self.__field_one one=property(__getfield_one, __setfield_one, __delfield_one, None) def __getfield_key(self): return self.__field_key.getvalue() def __setfield_key(self, value): if isinstance(value,UINT): self.__field_key=value else: self.__field_key=UINT(value,**{'sizeinbytes': 4}) def __delfield_key(self): del self.__field_key key=property(__getfield_key, __setfield_key, __delfield_key, None) def __getfield_zero(self): try: self.__field_zero except: self.__field_zero=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_zero.getvalue() def __setfield_zero(self, value): if isinstance(value,UINT): self.__field_zero=value else: self.__field_zero=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_zero(self): del self.__field_zero zero=property(__getfield_zero, __setfield_zero, __delfield_zero, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('one', self.__field_one, None) yield ('key', self.__field_key, None) yield ('zero', self.__field_zero, None) class DMResp(BaseProtogenClass): __fields=['cmd', 'one', 'key', 'zero2one'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(DMResp,self).__init__(**dict) if self.__class__ is DMResp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(DMResp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(DMResp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_cmd.writetobuffer(buf) self.__field_one.writetobuffer(buf) self.__field_key.writetobuffer(buf) self.__field_zero2one.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1}) self.__field_cmd.readfrombuffer(buf) self.__field_one=UINT(**{'sizeinbytes': 1}) self.__field_one.readfrombuffer(buf) self.__field_key=UINT(**{'sizeinbytes': 4}) self.__field_key.readfrombuffer(buf) self.__field_zero2one=UINT(**{'sizeinbytes': 1}) self.__field_zero2one.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_one(self): return self.__field_one.getvalue() def __setfield_one(self, value): if isinstance(value,UINT): self.__field_one=value else: self.__field_one=UINT(value,**{'sizeinbytes': 1}) def __delfield_one(self): del self.__field_one one=property(__getfield_one, __setfield_one, __delfield_one, None) def __getfield_key(self): return self.__field_key.getvalue() def __setfield_key(self, value): if isinstance(value,UINT): self.__field_key=value else: self.__field_key=UINT(value,**{'sizeinbytes': 4}) def __delfield_key(self): del self.__field_key key=property(__getfield_key, __setfield_key, __delfield_key, None) def __getfield_zero2one(self): return self.__field_zero2one.getvalue() def __setfield_zero2one(self, value): if isinstance(value,UINT): self.__field_zero2one=value else: self.__field_zero2one=UINT(value,**{'sizeinbytes': 1}) def __delfield_zero2one(self): del self.__field_zero2one zero2one=property(__getfield_zero2one, __setfield_zero2one, __delfield_zero2one, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('one', self.__field_one, None) yield ('key', self.__field_key, None) yield ('zero2one', self.__field_zero2one, None) bitpim-1.0.7+dfsg1/src/phones/p_lgvx8550.py0000644001616600161660000033563211042423044016433 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VX8550""" from p_lgvx8700 import * # same as the VX-8700 except as noted below NUMPHONEBOOKENTRIES=1000 NUMPHONENUMBERENTRIES=5000 NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=1 LASTSPEEDDIAL=99 NUMCALENDARENTRIES=300 NUMEMERGENCYCONTACTS=3 # sizes of pbfileentry and pnfileentry PHONEBOOKENTRYSIZE=256 PHONENUMBERENTRYSIZE=64 NUM_EMAILS=2 NUMPHONENUMBERS=5 pb_file_name = 'pim/pbentry.dat' pb_recordid_filename = 'pim/record_id.dat' pn_file_name = 'pim/pbnumber.dat' speed_file_name = 'pim/pbspeed.dat' ice_file_name = 'pim/pbiceentry.dat' PB_ENTRY_SOR='' PB_NUMBER_SOR='' class speeddial(BaseProtogenClass): __fields=['entry', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddial,self).__init__(**dict) if self.__class__ is speeddial: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddial,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddial,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.writetobuffer(buf) try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.readfrombuffer(buf) self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,UINT): self.__field_entry=value else: self.__field_entry=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, "0-based entry number") def __getfield_number(self): try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,UINT): self.__field_number=value else: self.__field_number=UINT(value,**{'sizeinbytes': 1, 'default': 0xff}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, "number type") def iscontainer(self): return True def containerelements(self): yield ('entry', self.__field_entry, "0-based entry number") yield ('number', self.__field_number, "number type") def valid(self): return self.entry!=0xffff class speeddials(BaseProtogenClass): __fields=['speeddials'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddials,self).__init__(**dict) if self.__class__ is speeddials: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddials,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddials,kwargs) if len(args): dict2={'length': NUMSPEEDDIALS, 'elementclass': speeddial} dict2.update(kwargs) kwargs=dict2 self.__field_speeddials=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_speeddials(self): try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) return self.__field_speeddials.getvalue() def __setfield_speeddials(self, value): if isinstance(value,LIST): self.__field_speeddials=value else: self.__field_speeddials=LIST(value,**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) def __delfield_speeddials(self): del self.__field_speeddials speeddials=property(__getfield_speeddials, __setfield_speeddials, __delfield_speeddials, None) def iscontainer(self): return True def containerelements(self): yield ('speeddials', self.__field_speeddials, None) class pbfileentry(BaseProtogenClass): __fields=['entry_tag', 'mod_date', 'unk0', 'entry_number1', 'entry_number0', 'name', 'group', 'emails', 'ringtone', 'wallpaper', 'numbertypes', 'numberindices', 'memo', 'exit_tag', 'dontcare'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbfileentry,self).__init__(**dict) if self.__class__ is pbfileentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbfileentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbfileentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry_tag except: self.__field_entry_tag=STRING(**{'sizeinbytes': 5, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff\xff' }) self.__field_entry_tag.writetobuffer(buf) if self.entry_tag==PB_ENTRY_SOR: try: self.__field_mod_date except: self.__field_mod_date=PBDateTime(**{ 'defaulttocurrenttime': True }) self.__field_mod_date.writetobuffer(buf) try: self.__field_unk0 except: self.__field_unk0=STRING(**{'sizeinbytes': 6, 'terminator': None, 'default': '\xff\xff\xff\xff\xff\xff' }) self.__field_unk0.writetobuffer(buf) self.__field_entry_number1.writetobuffer(buf) self.__field_entry_number0.writetobuffer(buf) try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_name.writetobuffer(buf) try: self.__field_group except: self.__field_group=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_group.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx8550_72, 'length': NUMEMAILS}) self.__field_emails.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_ringtone.writetobuffer(buf) try: self.__field_wallpaper except: self.__field_wallpaper=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_wallpaper.writetobuffer(buf) try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx8550_76, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.writetobuffer(buf) try: self.__field_numberindices except: self.__field_numberindices=LIST(**{'elementclass': _gen_p_lgvx8550_78, 'length': NUMPHONENUMBERS}) self.__field_numberindices.writetobuffer(buf) try: self.__field_memo except: self.__field_memo=USTRING(**{'sizeinbytes': 69, 'raiseonunterminatedread': False, 'default': '', 'encoding': PHONE_ENCODING }) self.__field_memo.writetobuffer(buf) try: self.__field_exit_tag except: self.__field_exit_tag=USTRING(**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) self.__field_exit_tag.writetobuffer(buf) else: try: self.__field_dontcare except: self.__field_dontcare=DATA(**{'sizeinbytes': 251, 'default': '\xff'*251 }) self.__field_dontcare.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry_tag=STRING(**{'sizeinbytes': 5, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff\xff' }) self.__field_entry_tag.readfrombuffer(buf) if self.entry_tag==PB_ENTRY_SOR: self.__field_mod_date=PBDateTime(**{ 'defaulttocurrenttime': True }) self.__field_mod_date.readfrombuffer(buf) self.__field_unk0=STRING(**{'sizeinbytes': 6, 'terminator': None, 'default': '\xff\xff\xff\xff\xff\xff' }) self.__field_unk0.readfrombuffer(buf) self.__field_entry_number1=UINT(**{'sizeinbytes': 4}) self.__field_entry_number1.readfrombuffer(buf) self.__field_entry_number0=UINT(**{'sizeinbytes': 2}) self.__field_entry_number0.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_name.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_group.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx8550_72, 'length': NUMEMAILS}) self.__field_emails.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_ringtone.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_wallpaper.readfrombuffer(buf) self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx8550_76, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.readfrombuffer(buf) self.__field_numberindices=LIST(**{'elementclass': _gen_p_lgvx8550_78, 'length': NUMPHONENUMBERS}) self.__field_numberindices.readfrombuffer(buf) self.__field_memo=USTRING(**{'sizeinbytes': 69, 'raiseonunterminatedread': False, 'default': '', 'encoding': PHONE_ENCODING }) self.__field_memo.readfrombuffer(buf) self.__field_exit_tag=USTRING(**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) self.__field_exit_tag.readfrombuffer(buf) else: self.__field_dontcare=DATA(**{'sizeinbytes': 251, 'default': '\xff'*251 }) self.__field_dontcare.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry_tag(self): try: self.__field_entry_tag except: self.__field_entry_tag=STRING(**{'sizeinbytes': 5, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff\xff' }) return self.__field_entry_tag.getvalue() def __setfield_entry_tag(self, value): if isinstance(value,STRING): self.__field_entry_tag=value else: self.__field_entry_tag=STRING(value,**{'sizeinbytes': 5, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff\xff' }) def __delfield_entry_tag(self): del self.__field_entry_tag entry_tag=property(__getfield_entry_tag, __setfield_entry_tag, __delfield_entry_tag, None) def __getfield_mod_date(self): try: self.__field_mod_date except: self.__field_mod_date=PBDateTime(**{ 'defaulttocurrenttime': True }) return self.__field_mod_date.getvalue() def __setfield_mod_date(self, value): if isinstance(value,PBDateTime): self.__field_mod_date=value else: self.__field_mod_date=PBDateTime(value,**{ 'defaulttocurrenttime': True }) def __delfield_mod_date(self): del self.__field_mod_date mod_date=property(__getfield_mod_date, __setfield_mod_date, __delfield_mod_date, None) def __getfield_unk0(self): try: self.__field_unk0 except: self.__field_unk0=STRING(**{'sizeinbytes': 6, 'terminator': None, 'default': '\xff\xff\xff\xff\xff\xff' }) return self.__field_unk0.getvalue() def __setfield_unk0(self, value): if isinstance(value,STRING): self.__field_unk0=value else: self.__field_unk0=STRING(value,**{'sizeinbytes': 6, 'terminator': None, 'default': '\xff\xff\xff\xff\xff\xff' }) def __delfield_unk0(self): del self.__field_unk0 unk0=property(__getfield_unk0, __setfield_unk0, __delfield_unk0, None) def __getfield_entry_number1(self): return self.__field_entry_number1.getvalue() def __setfield_entry_number1(self, value): if isinstance(value,UINT): self.__field_entry_number1=value else: self.__field_entry_number1=UINT(value,**{'sizeinbytes': 4}) def __delfield_entry_number1(self): del self.__field_entry_number1 entry_number1=property(__getfield_entry_number1, __setfield_entry_number1, __delfield_entry_number1, None) def __getfield_entry_number0(self): return self.__field_entry_number0.getvalue() def __setfield_entry_number0(self, value): if isinstance(value,UINT): self.__field_entry_number0=value else: self.__field_entry_number0=UINT(value,**{'sizeinbytes': 2}) def __delfield_entry_number0(self): del self.__field_entry_number0 entry_number0=property(__getfield_entry_number0, __setfield_entry_number0, __delfield_entry_number0, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_group(self): try: self.__field_group except: self.__field_group=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx8550_72, 'length': NUMEMAILS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_lgvx8550_72, 'length': NUMEMAILS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_wallpaper(self): try: self.__field_wallpaper except: self.__field_wallpaper=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_numbertypes(self): try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx8550_76, 'length': NUMPHONENUMBERS}) return self.__field_numbertypes.getvalue() def __setfield_numbertypes(self, value): if isinstance(value,LIST): self.__field_numbertypes=value else: self.__field_numbertypes=LIST(value,**{'elementclass': _gen_p_lgvx8550_76, 'length': NUMPHONENUMBERS}) def __delfield_numbertypes(self): del self.__field_numbertypes numbertypes=property(__getfield_numbertypes, __setfield_numbertypes, __delfield_numbertypes, None) def __getfield_numberindices(self): try: self.__field_numberindices except: self.__field_numberindices=LIST(**{'elementclass': _gen_p_lgvx8550_78, 'length': NUMPHONENUMBERS}) return self.__field_numberindices.getvalue() def __setfield_numberindices(self, value): if isinstance(value,LIST): self.__field_numberindices=value else: self.__field_numberindices=LIST(value,**{'elementclass': _gen_p_lgvx8550_78, 'length': NUMPHONENUMBERS}) def __delfield_numberindices(self): del self.__field_numberindices numberindices=property(__getfield_numberindices, __setfield_numberindices, __delfield_numberindices, None) def __getfield_memo(self): try: self.__field_memo except: self.__field_memo=USTRING(**{'sizeinbytes': 69, 'raiseonunterminatedread': False, 'default': '', 'encoding': PHONE_ENCODING }) return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,USTRING): self.__field_memo=value else: self.__field_memo=USTRING(value,**{'sizeinbytes': 69, 'raiseonunterminatedread': False, 'default': '', 'encoding': PHONE_ENCODING }) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def __getfield_exit_tag(self): try: self.__field_exit_tag except: self.__field_exit_tag=USTRING(**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) return self.__field_exit_tag.getvalue() def __setfield_exit_tag(self, value): if isinstance(value,USTRING): self.__field_exit_tag=value else: self.__field_exit_tag=USTRING(value,**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) def __delfield_exit_tag(self): del self.__field_exit_tag exit_tag=property(__getfield_exit_tag, __setfield_exit_tag, __delfield_exit_tag, None) def __getfield_dontcare(self): try: self.__field_dontcare except: self.__field_dontcare=DATA(**{'sizeinbytes': 251, 'default': '\xff'*251 }) return self.__field_dontcare.getvalue() def __setfield_dontcare(self, value): if isinstance(value,DATA): self.__field_dontcare=value else: self.__field_dontcare=DATA(value,**{'sizeinbytes': 251, 'default': '\xff'*251 }) def __delfield_dontcare(self): del self.__field_dontcare dontcare=property(__getfield_dontcare, __setfield_dontcare, __delfield_dontcare, None) def iscontainer(self): return True def containerelements(self): yield ('entry_tag', self.__field_entry_tag, None) if self.entry_tag==PB_ENTRY_SOR: yield ('mod_date', self.__field_mod_date, None) yield ('unk0', self.__field_unk0, None) yield ('entry_number1', self.__field_entry_number1, None) yield ('entry_number0', self.__field_entry_number0, None) yield ('name', self.__field_name, None) yield ('group', self.__field_group, None) yield ('emails', self.__field_emails, None) yield ('ringtone', self.__field_ringtone, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('numbertypes', self.__field_numbertypes, None) yield ('numberindices', self.__field_numberindices, None) yield ('memo', self.__field_memo, None) yield ('exit_tag', self.__field_exit_tag, None) else: yield ('dontcare', self.__field_dontcare, None) def valid(self): global PB_ENTRY_SOR return self.entry_tag==PB_ENTRY_SOR and ord(self.name[0]) != 0xff class _gen_p_lgvx8550_72(BaseProtogenClass): 'Anonymous inner class' __fields=['email'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8550_72,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8550_72: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8550_72,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8550_72,kwargs) if len(args): dict2={'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_email=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_email.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_email=USTRING(**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_email.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def iscontainer(self): return True def containerelements(self): yield ('email', self.__field_email, None) class _gen_p_lgvx8550_76(BaseProtogenClass): 'Anonymous inner class' __fields=['numbertype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8550_76,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8550_76: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8550_76,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8550_76,kwargs) if len(args): dict2={'sizeinbytes': 1, 'default': 0 } dict2.update(kwargs) kwargs=dict2 self.__field_numbertype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numbertype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numbertype=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_numbertype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numbertype(self): return self.__field_numbertype.getvalue() def __setfield_numbertype(self, value): if isinstance(value,UINT): self.__field_numbertype=value else: self.__field_numbertype=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_numbertype(self): del self.__field_numbertype numbertype=property(__getfield_numbertype, __setfield_numbertype, __delfield_numbertype, None) def iscontainer(self): return True def containerelements(self): yield ('numbertype', self.__field_numbertype, None) class _gen_p_lgvx8550_78(BaseProtogenClass): 'Anonymous inner class' __fields=['numberindex'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8550_78,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8550_78: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8550_78,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8550_78,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff } dict2.update(kwargs) kwargs=dict2 self.__field_numberindex=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numberindex.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numberindex=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_numberindex.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numberindex(self): return self.__field_numberindex.getvalue() def __setfield_numberindex(self, value): if isinstance(value,UINT): self.__field_numberindex=value else: self.__field_numberindex=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_numberindex(self): del self.__field_numberindex numberindex=property(__getfield_numberindex, __setfield_numberindex, __delfield_numberindex, None) def iscontainer(self): return True def containerelements(self): yield ('numberindex', self.__field_numberindex, None) class pbfile(BaseProtogenClass): __fields=['items', 'eof_tag', 'model_name', 'mod_date', 'blanks', 'eof_close_tag'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbfile,self).__init__(**dict) if self.__class__ is pbfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbfile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': pbfileentry, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_items.writetobuffer(buf) try: self.__field_eof_tag except: self.__field_eof_tag=STRING(**{'sizeinbytes': 6, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_eof_tag.writetobuffer(buf) try: self.__field_model_name except: self.__field_model_name=STRING(**{'sizeinbytes': 10, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_model_name.writetobuffer(buf) try: self.__field_mod_date except: self.__field_mod_date=PBDateTime(**{ 'defaulttocurrenttime': True }) self.__field_mod_date.writetobuffer(buf) try: self.__field_blanks except: self.__field_blanks=DATA(**{'sizeinbytes': 221, 'default': '\x00'*221 }) self.__field_blanks.writetobuffer(buf) try: self.__field_eof_close_tag except: self.__field_eof_close_tag=STRING(**{'sizeinbytes': 7, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_eof_close_tag.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': pbfileentry, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self.__field_eof_tag=STRING(**{'sizeinbytes': 6, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_eof_tag.readfrombuffer(buf) self.__field_model_name=STRING(**{'sizeinbytes': 10, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_model_name.readfrombuffer(buf) self.__field_mod_date=PBDateTime(**{ 'defaulttocurrenttime': True }) self.__field_mod_date.readfrombuffer(buf) self.__field_blanks=DATA(**{'sizeinbytes': 221, 'default': '\x00'*221 }) self.__field_blanks.readfrombuffer(buf) self.__field_eof_close_tag=STRING(**{'sizeinbytes': 7, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_eof_close_tag.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': pbfileentry, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': pbfileentry, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def __getfield_eof_tag(self): try: self.__field_eof_tag except: self.__field_eof_tag=STRING(**{'sizeinbytes': 6, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) return self.__field_eof_tag.getvalue() def __setfield_eof_tag(self, value): if isinstance(value,STRING): self.__field_eof_tag=value else: self.__field_eof_tag=STRING(value,**{'sizeinbytes': 6, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_eof_tag(self): del self.__field_eof_tag eof_tag=property(__getfield_eof_tag, __setfield_eof_tag, __delfield_eof_tag, None) def __getfield_model_name(self): try: self.__field_model_name except: self.__field_model_name=STRING(**{'sizeinbytes': 10, 'raiseonunterminatedread': False, 'raiseontruncate': False }) return self.__field_model_name.getvalue() def __setfield_model_name(self, value): if isinstance(value,STRING): self.__field_model_name=value else: self.__field_model_name=STRING(value,**{'sizeinbytes': 10, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_model_name(self): del self.__field_model_name model_name=property(__getfield_model_name, __setfield_model_name, __delfield_model_name, None) def __getfield_mod_date(self): try: self.__field_mod_date except: self.__field_mod_date=PBDateTime(**{ 'defaulttocurrenttime': True }) return self.__field_mod_date.getvalue() def __setfield_mod_date(self, value): if isinstance(value,PBDateTime): self.__field_mod_date=value else: self.__field_mod_date=PBDateTime(value,**{ 'defaulttocurrenttime': True }) def __delfield_mod_date(self): del self.__field_mod_date mod_date=property(__getfield_mod_date, __setfield_mod_date, __delfield_mod_date, None) def __getfield_blanks(self): try: self.__field_blanks except: self.__field_blanks=DATA(**{'sizeinbytes': 221, 'default': '\x00'*221 }) return self.__field_blanks.getvalue() def __setfield_blanks(self, value): if isinstance(value,DATA): self.__field_blanks=value else: self.__field_blanks=DATA(value,**{'sizeinbytes': 221, 'default': '\x00'*221 }) def __delfield_blanks(self): del self.__field_blanks blanks=property(__getfield_blanks, __setfield_blanks, __delfield_blanks, None) def __getfield_eof_close_tag(self): try: self.__field_eof_close_tag except: self.__field_eof_close_tag=STRING(**{'sizeinbytes': 7, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) return self.__field_eof_close_tag.getvalue() def __setfield_eof_close_tag(self, value): if isinstance(value,STRING): self.__field_eof_close_tag=value else: self.__field_eof_close_tag=STRING(value,**{'sizeinbytes': 7, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_eof_close_tag(self): del self.__field_eof_close_tag eof_close_tag=property(__getfield_eof_close_tag, __setfield_eof_close_tag, __delfield_eof_close_tag, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) yield ('eof_tag', self.__field_eof_tag, None) yield ('model_name', self.__field_model_name, None) yield ('mod_date', self.__field_mod_date, None) yield ('blanks', self.__field_blanks, None) yield ('eof_close_tag', self.__field_eof_close_tag, None) class pnfileentry(BaseProtogenClass): __fields=['entry_tag', 'pad00', 'mod_date', 'unk0', 'pn_id', 'pe_id', 'pn_order', 'phone_number', 'ntype', 'unk2', 'exit_tag', 'blanks'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pnfileentry,self).__init__(**dict) if self.__class__ is pnfileentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pnfileentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pnfileentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry_tag except: self.__field_entry_tag=STRING(**{'sizeinbytes': 4, 'terminator': None, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff'}) self.__field_entry_tag.writetobuffer(buf) if self.entry_tag != '\xff\xff\xff\xff': try: self.__field_pad00 except: self.__field_pad00=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad00.writetobuffer(buf) try: self.__field_mod_date except: self.__field_mod_date=PBDateTime(**{'defaulttocurrenttime': True }) self.__field_mod_date.writetobuffer(buf) try: self.__field_unk0 except: self.__field_unk0=STRING(**{'sizeinbytes': 6, 'default': '', 'raiseonunterminatedread': False }) self.__field_unk0.writetobuffer(buf) self.__field_pn_id.writetobuffer(buf) self.__field_pe_id.writetobuffer(buf) self.__field_pn_order.writetobuffer(buf) self.__field_phone_number.writetobuffer(buf) self.__field_ntype.writetobuffer(buf) try: self.__field_unk2 except: self.__field_unk2=UINT(**{'sizeinbytes': 3, 'default': 0 }) self.__field_unk2.writetobuffer(buf) try: self.__field_exit_tag except: self.__field_exit_tag=USTRING(**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) self.__field_exit_tag.writetobuffer(buf) else: try: self.__field_blanks except: self.__field_blanks=DATA(**{'sizeinbytes': 60, 'default': '\xFF'*60 }) self.__field_blanks.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry_tag=STRING(**{'sizeinbytes': 4, 'terminator': None, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff'}) self.__field_entry_tag.readfrombuffer(buf) if self.entry_tag != '\xff\xff\xff\xff': self.__field_pad00=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad00.readfrombuffer(buf) self.__field_mod_date=PBDateTime(**{'defaulttocurrenttime': True }) self.__field_mod_date.readfrombuffer(buf) self.__field_unk0=STRING(**{'sizeinbytes': 6, 'default': '', 'raiseonunterminatedread': False }) self.__field_unk0.readfrombuffer(buf) self.__field_pn_id=UINT(**{'sizeinbytes': 2}) self.__field_pn_id.readfrombuffer(buf) self.__field_pe_id=UINT(**{'sizeinbytes': 2}) self.__field_pe_id.readfrombuffer(buf) self.__field_pn_order=UINT(**{'sizeinbytes': 1}) self.__field_pn_order.readfrombuffer(buf) self.__field_phone_number=LGHEXPN(**{'sizeinbytes': 25}) self.__field_phone_number.readfrombuffer(buf) self.__field_ntype=UINT(**{'sizeinbytes': 2}) self.__field_ntype.readfrombuffer(buf) self.__field_unk2=UINT(**{'sizeinbytes': 3, 'default': 0 }) self.__field_unk2.readfrombuffer(buf) self.__field_exit_tag=USTRING(**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) self.__field_exit_tag.readfrombuffer(buf) else: self.__field_blanks=DATA(**{'sizeinbytes': 60, 'default': '\xFF'*60 }) self.__field_blanks.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry_tag(self): try: self.__field_entry_tag except: self.__field_entry_tag=STRING(**{'sizeinbytes': 4, 'terminator': None, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff'}) return self.__field_entry_tag.getvalue() def __setfield_entry_tag(self, value): if isinstance(value,STRING): self.__field_entry_tag=value else: self.__field_entry_tag=STRING(value,**{'sizeinbytes': 4, 'terminator': None, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff'}) def __delfield_entry_tag(self): del self.__field_entry_tag entry_tag=property(__getfield_entry_tag, __setfield_entry_tag, __delfield_entry_tag, None) def __getfield_pad00(self): try: self.__field_pad00 except: self.__field_pad00=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_pad00.getvalue() def __setfield_pad00(self, value): if isinstance(value,UINT): self.__field_pad00=value else: self.__field_pad00=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_pad00(self): del self.__field_pad00 pad00=property(__getfield_pad00, __setfield_pad00, __delfield_pad00, None) def __getfield_mod_date(self): try: self.__field_mod_date except: self.__field_mod_date=PBDateTime(**{'defaulttocurrenttime': True }) return self.__field_mod_date.getvalue() def __setfield_mod_date(self, value): if isinstance(value,PBDateTime): self.__field_mod_date=value else: self.__field_mod_date=PBDateTime(value,**{'defaulttocurrenttime': True }) def __delfield_mod_date(self): del self.__field_mod_date mod_date=property(__getfield_mod_date, __setfield_mod_date, __delfield_mod_date, None) def __getfield_unk0(self): try: self.__field_unk0 except: self.__field_unk0=STRING(**{'sizeinbytes': 6, 'default': '', 'raiseonunterminatedread': False }) return self.__field_unk0.getvalue() def __setfield_unk0(self, value): if isinstance(value,STRING): self.__field_unk0=value else: self.__field_unk0=STRING(value,**{'sizeinbytes': 6, 'default': '', 'raiseonunterminatedread': False }) def __delfield_unk0(self): del self.__field_unk0 unk0=property(__getfield_unk0, __setfield_unk0, __delfield_unk0, None) def __getfield_pn_id(self): return self.__field_pn_id.getvalue() def __setfield_pn_id(self, value): if isinstance(value,UINT): self.__field_pn_id=value else: self.__field_pn_id=UINT(value,**{'sizeinbytes': 2}) def __delfield_pn_id(self): del self.__field_pn_id pn_id=property(__getfield_pn_id, __setfield_pn_id, __delfield_pn_id, None) def __getfield_pe_id(self): return self.__field_pe_id.getvalue() def __setfield_pe_id(self, value): if isinstance(value,UINT): self.__field_pe_id=value else: self.__field_pe_id=UINT(value,**{'sizeinbytes': 2}) def __delfield_pe_id(self): del self.__field_pe_id pe_id=property(__getfield_pe_id, __setfield_pe_id, __delfield_pe_id, None) def __getfield_pn_order(self): return self.__field_pn_order.getvalue() def __setfield_pn_order(self, value): if isinstance(value,UINT): self.__field_pn_order=value else: self.__field_pn_order=UINT(value,**{'sizeinbytes': 1}) def __delfield_pn_order(self): del self.__field_pn_order pn_order=property(__getfield_pn_order, __setfield_pn_order, __delfield_pn_order, "0-based order of this phone within this contact") def __getfield_phone_number(self): return self.__field_phone_number.getvalue() def __setfield_phone_number(self, value): if isinstance(value,LGHEXPN): self.__field_phone_number=value else: self.__field_phone_number=LGHEXPN(value,**{'sizeinbytes': 25}) def __delfield_phone_number(self): del self.__field_phone_number phone_number=property(__getfield_phone_number, __setfield_phone_number, __delfield_phone_number, None) def __getfield_ntype(self): return self.__field_ntype.getvalue() def __setfield_ntype(self, value): if isinstance(value,UINT): self.__field_ntype=value else: self.__field_ntype=UINT(value,**{'sizeinbytes': 2}) def __delfield_ntype(self): del self.__field_ntype ntype=property(__getfield_ntype, __setfield_ntype, __delfield_ntype, None) def __getfield_unk2(self): try: self.__field_unk2 except: self.__field_unk2=UINT(**{'sizeinbytes': 3, 'default': 0 }) return self.__field_unk2.getvalue() def __setfield_unk2(self, value): if isinstance(value,UINT): self.__field_unk2=value else: self.__field_unk2=UINT(value,**{'sizeinbytes': 3, 'default': 0 }) def __delfield_unk2(self): del self.__field_unk2 unk2=property(__getfield_unk2, __setfield_unk2, __delfield_unk2, None) def __getfield_exit_tag(self): try: self.__field_exit_tag except: self.__field_exit_tag=USTRING(**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) return self.__field_exit_tag.getvalue() def __setfield_exit_tag(self, value): if isinstance(value,USTRING): self.__field_exit_tag=value else: self.__field_exit_tag=USTRING(value,**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) def __delfield_exit_tag(self): del self.__field_exit_tag exit_tag=property(__getfield_exit_tag, __setfield_exit_tag, __delfield_exit_tag, None) def __getfield_blanks(self): try: self.__field_blanks except: self.__field_blanks=DATA(**{'sizeinbytes': 60, 'default': '\xFF'*60 }) return self.__field_blanks.getvalue() def __setfield_blanks(self, value): if isinstance(value,DATA): self.__field_blanks=value else: self.__field_blanks=DATA(value,**{'sizeinbytes': 60, 'default': '\xFF'*60 }) def __delfield_blanks(self): del self.__field_blanks blanks=property(__getfield_blanks, __setfield_blanks, __delfield_blanks, None) def iscontainer(self): return True def containerelements(self): yield ('entry_tag', self.__field_entry_tag, None) if self.entry_tag != '\xff\xff\xff\xff': yield ('pad00', self.__field_pad00, None) yield ('mod_date', self.__field_mod_date, None) yield ('unk0', self.__field_unk0, None) yield ('pn_id', self.__field_pn_id, None) yield ('pe_id', self.__field_pe_id, None) yield ('pn_order', self.__field_pn_order, "0-based order of this phone within this contact") yield ('phone_number', self.__field_phone_number, None) yield ('ntype', self.__field_ntype, None) yield ('unk2', self.__field_unk2, None) yield ('exit_tag', self.__field_exit_tag, None) else: yield ('blanks', self.__field_blanks, None) def valid(self): return self.phone_number != None def malformed(self): # malformed (yet valid) entries have been seen on several phones including the VX-8550 and VX-10000 return self.entry_tag != PB_NUMBER_SOR class pnfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pnfile,self).__init__(**dict) if self.__class__ is pnfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pnfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pnfile,kwargs) if len(args): dict2={ 'elementclass': pnfileentry, 'createdefault': True, 'length': NUMPHONENUMBERENTRIES } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': pnfileentry, 'createdefault': True, 'length': NUMPHONENUMBERENTRIES }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': pnfileentry, 'createdefault': True, 'length': NUMPHONENUMBERENTRIES }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': pnfileentry, 'createdefault': True, 'length': NUMPHONENUMBERENTRIES }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': pnfileentry, 'createdefault': True, 'length': NUMPHONENUMBERENTRIES }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class PathIndexEntry(BaseProtogenClass): __fields=['pathname'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PathIndexEntry,self).__init__(**dict) if self.__class__ is PathIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PathIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PathIndexEntry,kwargs) if len(args): dict2={'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' } dict2.update(kwargs) kwargs=dict2 self.__field_pathname=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_pathname except: self.__field_pathname=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' }) self.__field_pathname.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pathname=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' }) self.__field_pathname.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pathname(self): try: self.__field_pathname except: self.__field_pathname=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' }) return self.__field_pathname.getvalue() def __setfield_pathname(self, value): if isinstance(value,USTRING): self.__field_pathname=value else: self.__field_pathname=USTRING(value,**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' }) def __delfield_pathname(self): del self.__field_pathname pathname=property(__getfield_pathname, __setfield_pathname, __delfield_pathname, None) def iscontainer(self): return True def containerelements(self): yield ('pathname', self.__field_pathname, None) class PathIndexFile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PathIndexFile,self).__init__(**dict) if self.__class__ is PathIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PathIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PathIndexFile,kwargs) if len(args): dict2={ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class RecordIdEntry(BaseProtogenClass): __fields=['idnum'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(RecordIdEntry,self).__init__(**dict) if self.__class__ is RecordIdEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(RecordIdEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(RecordIdEntry,kwargs) if len(args): dict2={'sizeinbytes': 4} dict2.update(kwargs) kwargs=dict2 self.__field_idnum=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_idnum.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_idnum=UINT(**{'sizeinbytes': 4}) self.__field_idnum.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_idnum(self): return self.__field_idnum.getvalue() def __setfield_idnum(self, value): if isinstance(value,UINT): self.__field_idnum=value else: self.__field_idnum=UINT(value,**{'sizeinbytes': 4}) def __delfield_idnum(self): del self.__field_idnum idnum=property(__getfield_idnum, __setfield_idnum, __delfield_idnum, None) def iscontainer(self): return True def containerelements(self): yield ('idnum', self.__field_idnum, None) class iceentry(BaseProtogenClass): "ICE index entries" __fields=['entry_assigned', 'entry_number', 'pb_index', 'dontcare'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(iceentry,self).__init__(**dict) if self.__class__ is iceentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(iceentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(iceentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry_assigned except: self.__field_entry_assigned=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_entry_assigned.writetobuffer(buf) try: self.__field_entry_number except: self.__field_entry_number=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_entry_number.writetobuffer(buf) try: self.__field_pb_index except: self.__field_pb_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_pb_index.writetobuffer(buf) try: self.__field_dontcare except: self.__field_dontcare=DATA(**{'sizeinbytes': 82, 'default': '\x00'*82 }) self.__field_dontcare.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry_assigned=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_entry_assigned.readfrombuffer(buf) self.__field_entry_number=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_entry_number.readfrombuffer(buf) self.__field_pb_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_pb_index.readfrombuffer(buf) self.__field_dontcare=DATA(**{'sizeinbytes': 82, 'default': '\x00'*82 }) self.__field_dontcare.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry_assigned(self): try: self.__field_entry_assigned except: self.__field_entry_assigned=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_entry_assigned.getvalue() def __setfield_entry_assigned(self, value): if isinstance(value,UINT): self.__field_entry_assigned=value else: self.__field_entry_assigned=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_entry_assigned(self): del self.__field_entry_assigned entry_assigned=property(__getfield_entry_assigned, __setfield_entry_assigned, __delfield_entry_assigned, "0 if not assigned, 1 if assigned") def __getfield_entry_number(self): try: self.__field_entry_number except: self.__field_entry_number=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) return self.__field_entry_number.getvalue() def __setfield_entry_number(self, value): if isinstance(value,UINT): self.__field_entry_number=value else: self.__field_entry_number=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_entry_number(self): del self.__field_entry_number entry_number=property(__getfield_entry_number, __setfield_entry_number, __delfield_entry_number, "0-based ICE entry number") def __getfield_pb_index(self): try: self.__field_pb_index except: self.__field_pb_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_pb_index.getvalue() def __setfield_pb_index(self, value): if isinstance(value,UINT): self.__field_pb_index=value else: self.__field_pb_index=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_pb_index(self): del self.__field_pb_index pb_index=property(__getfield_pb_index, __setfield_pb_index, __delfield_pb_index, "0-based phone book entry number") def __getfield_dontcare(self): try: self.__field_dontcare except: self.__field_dontcare=DATA(**{'sizeinbytes': 82, 'default': '\x00'*82 }) return self.__field_dontcare.getvalue() def __setfield_dontcare(self, value): if isinstance(value,DATA): self.__field_dontcare=value else: self.__field_dontcare=DATA(value,**{'sizeinbytes': 82, 'default': '\x00'*82 }) def __delfield_dontcare(self): del self.__field_dontcare dontcare=property(__getfield_dontcare, __setfield_dontcare, __delfield_dontcare, None) def iscontainer(self): return True def containerelements(self): yield ('entry_assigned', self.__field_entry_assigned, "0 if not assigned, 1 if assigned") yield ('entry_number', self.__field_entry_number, "0-based ICE entry number") yield ('pb_index', self.__field_pb_index, "0-based phone book entry number") yield ('dontcare', self.__field_dontcare, None) def valid(self): return self.entry_assigned==1 and \ self.entry_number"): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': iceentry, 'createdefault': True, 'length': NUMEMERGENCYCONTACTS }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': iceentry, 'createdefault': True, 'length': NUMEMERGENCYCONTACTS }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': iceentry, 'createdefault': True, 'length': NUMEMERGENCYCONTACTS }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': iceentry, 'createdefault': True, 'length': NUMEMERGENCYCONTACTS }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class scheduleevent(BaseProtogenClass): __fields=['packet_size', 'pos', 'description', 'cdate', 'mdate', 'start', 'end_time', 'end_date', 'repeat', 'alarmindex_vibrate', 'ringtone', 'unknown1', 'alarmminutes', 'alarmhours', 'unknown2', 'unknown3', 'unknown4', 'serial_number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleevent,self).__init__(**dict) if self.__class__ is scheduleevent: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleevent,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleevent,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_packet_size except: self.__field_packet_size=UINT(**{ 'constant': 138 }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_pos except: self.__field_pos=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_pos.writetobuffer(buf) try: self.__field_description except: self.__field_description=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) self.__field_description.writetobuffer(buf) try: self.__field_cdate except: self.__field_cdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) self.__field_cdate.writetobuffer(buf) try: self.__field_mdate except: self.__field_mdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) self.__field_mdate.writetobuffer(buf) try: self.__field_start except: self.__field_start=LGCALDATE(**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) self.__field_start.writetobuffer(buf) try: self.__field_end_time except: self.__field_end_time=LGCALDATE(**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) self.__field_end_time.writetobuffer(buf) try: self.__field_end_date except: self.__field_end_date=LGCALDATE(**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) self.__field_end_date.writetobuffer(buf) try: self.__field_repeat except: self.__field_repeat=LGCALREPEAT(**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) self.__field_repeat.writetobuffer(buf) try: self.__field_alarmindex_vibrate except: self.__field_alarmindex_vibrate=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_alarmindex_vibrate.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_ringtone.writetobuffer(buf) try: self.__field_unknown1 except: self.__field_unknown1=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_unknown1.writetobuffer(buf) try: self.__field_alarmminutes except: self.__field_alarmminutes=UINT(**{'sizeinbytes': 1, 'default': 0xff }) self.__field_alarmminutes.writetobuffer(buf) try: self.__field_alarmhours except: self.__field_alarmhours=UINT(**{'sizeinbytes': 1, 'default': 0xff }) self.__field_alarmhours.writetobuffer(buf) try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_unknown2.writetobuffer(buf) try: self.__field_unknown3 except: self.__field_unknown3=UINT(**{'sizeinbytes': 2, 'default': 0x01FB }) self.__field_unknown3.writetobuffer(buf) try: self.__field_unknown4 except: self.__field_unknown4=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_unknown4.writetobuffer(buf) try: self.__field_serial_number except: self.__field_serial_number=USTRING(**{'sizeinbytes': 65, 'default': '000000ca-00000000-0000000000-VX855V01', 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_serial_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_pos.readfrombuffer(buf) self.__field_description=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) self.__field_description.readfrombuffer(buf) self.__field_cdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) self.__field_cdate.readfrombuffer(buf) self.__field_mdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) self.__field_mdate.readfrombuffer(buf) self.__field_start=LGCALDATE(**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) self.__field_start.readfrombuffer(buf) self.__field_end_time=LGCALDATE(**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) self.__field_end_time.readfrombuffer(buf) self.__field_end_date=LGCALDATE(**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) self.__field_end_date.readfrombuffer(buf) self.__field_repeat=LGCALREPEAT(**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) self.__field_repeat.readfrombuffer(buf) self.__field_alarmindex_vibrate=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_alarmindex_vibrate.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_ringtone.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_unknown1.readfrombuffer(buf) self.__field_alarmminutes=UINT(**{'sizeinbytes': 1, 'default': 0xff }) self.__field_alarmminutes.readfrombuffer(buf) self.__field_alarmhours=UINT(**{'sizeinbytes': 1, 'default': 0xff }) self.__field_alarmhours.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 2, 'default': 0x01FB }) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_unknown4.readfrombuffer(buf) self.__field_serial_number=USTRING(**{'sizeinbytes': 65, 'default': '000000ca-00000000-0000000000-VX855V01', 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_serial_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_packet_size(self): return self.__field_packet_size.getvalue() def __setfield_packet_size(self, value): if isinstance(value,UINT): self.__field_packet_size=value else: self.__field_packet_size=UINT(value,**{ 'constant': 138 }) def __delfield_packet_size(self): del self.__field_packet_size packet_size=property(__getfield_packet_size, __setfield_packet_size, __delfield_packet_size, None) def __getfield_pos(self): try: self.__field_pos except: self.__field_pos=UINT(**{'sizeinbytes': 4, 'default': 0 }) return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4, 'default': 0 }) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "position within file, used as an event id") def __getfield_description(self): try: self.__field_description except: self.__field_description=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,USTRING): self.__field_description=value else: self.__field_description=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def __getfield_cdate(self): try: self.__field_cdate except: self.__field_cdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) return self.__field_cdate.getvalue() def __setfield_cdate(self, value): if isinstance(value,GPSDATE): self.__field_cdate=value else: self.__field_cdate=GPSDATE(value,**{'sizeinbytes': 4, 'default': GPSDATE.now() }) def __delfield_cdate(self): del self.__field_cdate cdate=property(__getfield_cdate, __setfield_cdate, __delfield_cdate, None) def __getfield_mdate(self): try: self.__field_mdate except: self.__field_mdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) return self.__field_mdate.getvalue() def __setfield_mdate(self, value): if isinstance(value,GPSDATE): self.__field_mdate=value else: self.__field_mdate=GPSDATE(value,**{'sizeinbytes': 4, 'default': GPSDATE.now() }) def __delfield_mdate(self): del self.__field_mdate mdate=property(__getfield_mdate, __setfield_mdate, __delfield_mdate, None) def __getfield_start(self): try: self.__field_start except: self.__field_start=LGCALDATE(**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,LGCALDATE): self.__field_start=value else: self.__field_start=LGCALDATE(value,**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end_time(self): try: self.__field_end_time except: self.__field_end_time=LGCALDATE(**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) return self.__field_end_time.getvalue() def __setfield_end_time(self, value): if isinstance(value,LGCALDATE): self.__field_end_time=value else: self.__field_end_time=LGCALDATE(value,**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) def __delfield_end_time(self): del self.__field_end_time end_time=property(__getfield_end_time, __setfield_end_time, __delfield_end_time, None) def __getfield_end_date(self): try: self.__field_end_date except: self.__field_end_date=LGCALDATE(**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) return self.__field_end_date.getvalue() def __setfield_end_date(self, value): if isinstance(value,LGCALDATE): self.__field_end_date=value else: self.__field_end_date=LGCALDATE(value,**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) def __delfield_end_date(self): del self.__field_end_date end_date=property(__getfield_end_date, __setfield_end_date, __delfield_end_date, None) def __getfield_repeat(self): try: self.__field_repeat except: self.__field_repeat=LGCALREPEAT(**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,LGCALREPEAT): self.__field_repeat=value else: self.__field_repeat=LGCALREPEAT(value,**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_alarmindex_vibrate(self): try: self.__field_alarmindex_vibrate except: self.__field_alarmindex_vibrate=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_alarmindex_vibrate.getvalue() def __setfield_alarmindex_vibrate(self, value): if isinstance(value,UINT): self.__field_alarmindex_vibrate=value else: self.__field_alarmindex_vibrate=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_alarmindex_vibrate(self): del self.__field_alarmindex_vibrate alarmindex_vibrate=property(__getfield_alarmindex_vibrate, __setfield_alarmindex_vibrate, __delfield_alarmindex_vibrate, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_unknown1(self): try: self.__field_unknown1 except: self.__field_unknown1=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_alarmminutes(self): try: self.__field_alarmminutes except: self.__field_alarmminutes=UINT(**{'sizeinbytes': 1, 'default': 0xff }) return self.__field_alarmminutes.getvalue() def __setfield_alarmminutes(self, value): if isinstance(value,UINT): self.__field_alarmminutes=value else: self.__field_alarmminutes=UINT(value,**{'sizeinbytes': 1, 'default': 0xff }) def __delfield_alarmminutes(self): del self.__field_alarmminutes alarmminutes=property(__getfield_alarmminutes, __setfield_alarmminutes, __delfield_alarmminutes, "a value of 0xFF indicates not set") def __getfield_alarmhours(self): try: self.__field_alarmhours except: self.__field_alarmhours=UINT(**{'sizeinbytes': 1, 'default': 0xff }) return self.__field_alarmhours.getvalue() def __setfield_alarmhours(self, value): if isinstance(value,UINT): self.__field_alarmhours=value else: self.__field_alarmhours=UINT(value,**{'sizeinbytes': 1, 'default': 0xff }) def __delfield_alarmhours(self): del self.__field_alarmhours alarmhours=property(__getfield_alarmhours, __setfield_alarmhours, __delfield_alarmhours, "a value of 0xFF indicates not set") def __getfield_unknown2(self): try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): try: self.__field_unknown3 except: self.__field_unknown3=UINT(**{'sizeinbytes': 2, 'default': 0x01FB }) return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 2, 'default': 0x01FB }) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): try: self.__field_unknown4 except: self.__field_unknown4=UINT(**{'sizeinbytes': 4, 'default': 0 }) return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 4, 'default': 0 }) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_serial_number(self): try: self.__field_serial_number except: self.__field_serial_number=USTRING(**{'sizeinbytes': 65, 'default': '000000ca-00000000-0000000000-VX855V01', 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) return self.__field_serial_number.getvalue() def __setfield_serial_number(self, value): if isinstance(value,USTRING): self.__field_serial_number=value else: self.__field_serial_number=USTRING(value,**{'sizeinbytes': 65, 'default': '000000ca-00000000-0000000000-VX855V01', 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_serial_number(self): del self.__field_serial_number serial_number=property(__getfield_serial_number, __setfield_serial_number, __delfield_serial_number, None) def iscontainer(self): return True def containerelements(self): yield ('packet_size', self.__field_packet_size, None) yield ('pos', self.__field_pos, "position within file, used as an event id") yield ('description', self.__field_description, None) yield ('cdate', self.__field_cdate, None) yield ('mdate', self.__field_mdate, None) yield ('start', self.__field_start, None) yield ('end_time', self.__field_end_time, None) yield ('end_date', self.__field_end_date, None) yield ('repeat', self.__field_repeat, None) yield ('alarmindex_vibrate', self.__field_alarmindex_vibrate, None) yield ('ringtone', self.__field_ringtone, None) yield ('unknown1', self.__field_unknown1, None) yield ('alarmminutes', self.__field_alarmminutes, "a value of 0xFF indicates not set") yield ('alarmhours', self.__field_alarmhours, "a value of 0xFF indicates not set") yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) yield ('serial_number', self.__field_serial_number, None) class schedulefile(BaseProtogenClass): __fields=['numactiveitems', 'events'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(schedulefile,self).__init__(**dict) if self.__class__ is schedulefile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(schedulefile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(schedulefile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{ 'elementclass': scheduleevent, 'length': NUMCALENDARENTRIES, 'createdefault': True }) self.__field_events.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_events=LIST(**{ 'elementclass': scheduleevent, 'length': NUMCALENDARENTRIES, 'createdefault': True }) self.__field_events.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{ 'elementclass': scheduleevent, 'length': NUMCALENDARENTRIES, 'createdefault': True }) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{ 'elementclass': scheduleevent, 'length': NUMCALENDARENTRIES, 'createdefault': True }) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('events', self.__field_events, None) class scheduleringerfile(BaseProtogenClass): __fields=['numringers', 'ringerpaths'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleringerfile,self).__init__(**dict) if self.__class__ is scheduleringerfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleringerfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleringerfile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numringers.writetobuffer(buf) try: self.__field_ringerpaths except: self.__field_ringerpaths=LIST(**{'elementclass': _gen_p_lgvx8550_205}) self.__field_ringerpaths.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numringers=UINT(**{'sizeinbytes': 4}) self.__field_numringers.readfrombuffer(buf) self.__field_ringerpaths=LIST(**{'elementclass': _gen_p_lgvx8550_205}) self.__field_ringerpaths.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numringers(self): return self.__field_numringers.getvalue() def __setfield_numringers(self, value): if isinstance(value,UINT): self.__field_numringers=value else: self.__field_numringers=UINT(value,**{'sizeinbytes': 4}) def __delfield_numringers(self): del self.__field_numringers numringers=property(__getfield_numringers, __setfield_numringers, __delfield_numringers, None) def __getfield_ringerpaths(self): try: self.__field_ringerpaths except: self.__field_ringerpaths=LIST(**{'elementclass': _gen_p_lgvx8550_205}) return self.__field_ringerpaths.getvalue() def __setfield_ringerpaths(self, value): if isinstance(value,LIST): self.__field_ringerpaths=value else: self.__field_ringerpaths=LIST(value,**{'elementclass': _gen_p_lgvx8550_205}) def __delfield_ringerpaths(self): del self.__field_ringerpaths ringerpaths=property(__getfield_ringerpaths, __setfield_ringerpaths, __delfield_ringerpaths, None) def iscontainer(self): return True def containerelements(self): yield ('numringers', self.__field_numringers, None) yield ('ringerpaths', self.__field_ringerpaths, None) class _gen_p_lgvx8550_205(BaseProtogenClass): 'Anonymous inner class' __fields=['path'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8550_205,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8550_205: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8550_205,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8550_205,kwargs) if len(args): dict2={'sizeinbytes': 256, 'encoding': PHONE_ENCODING, 'raiseontruncate': True } dict2.update(kwargs) kwargs=dict2 self.__field_path=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_path.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_path=USTRING(**{'sizeinbytes': 256, 'encoding': PHONE_ENCODING, 'raiseontruncate': True }) self.__field_path.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_path(self): return self.__field_path.getvalue() def __setfield_path(self, value): if isinstance(value,USTRING): self.__field_path=value else: self.__field_path=USTRING(value,**{'sizeinbytes': 256, 'encoding': PHONE_ENCODING, 'raiseontruncate': True }) def __delfield_path(self): del self.__field_path path=property(__getfield_path, __setfield_path, __delfield_path, None) def iscontainer(self): return True def containerelements(self): yield ('path', self.__field_path, None) class textmemo(BaseProtogenClass): __fields=['cdate', 'text', 'memotime', 'zeros'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemo,self).__init__(**dict) if self.__class__ is textmemo: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemo,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemo,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cdate except: self.__field_cdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now(), 'unique': True }) self.__field_cdate.writetobuffer(buf) self.__field_text.writetobuffer(buf) self.__field_memotime.writetobuffer(buf) try: self.__field_zeros except: self.__field_zeros=UNKNOWN(**{'sizeinbytes': 3}) self.__field_zeros.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now(), 'unique': True }) self.__field_cdate.readfrombuffer(buf) self.__field_text=USTRING(**{'sizeinbytes': 301, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_text.readfrombuffer(buf) self.__field_memotime=LGCALDATE(**{'sizeinbytes': 4}) self.__field_memotime.readfrombuffer(buf) self.__field_zeros=UNKNOWN(**{'sizeinbytes': 3}) self.__field_zeros.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cdate(self): try: self.__field_cdate except: self.__field_cdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now(), 'unique': True }) return self.__field_cdate.getvalue() def __setfield_cdate(self, value): if isinstance(value,GPSDATE): self.__field_cdate=value else: self.__field_cdate=GPSDATE(value,**{'sizeinbytes': 4, 'default': GPSDATE.now(), 'unique': True }) def __delfield_cdate(self): del self.__field_cdate cdate=property(__getfield_cdate, __setfield_cdate, __delfield_cdate, None) def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,USTRING): self.__field_text=value else: self.__field_text=USTRING(value,**{'sizeinbytes': 301, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def __getfield_memotime(self): return self.__field_memotime.getvalue() def __setfield_memotime(self, value): if isinstance(value,LGCALDATE): self.__field_memotime=value else: self.__field_memotime=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_memotime(self): del self.__field_memotime memotime=property(__getfield_memotime, __setfield_memotime, __delfield_memotime, None) def __getfield_zeros(self): try: self.__field_zeros except: self.__field_zeros=UNKNOWN(**{'sizeinbytes': 3}) return self.__field_zeros.getvalue() def __setfield_zeros(self, value): if isinstance(value,UNKNOWN): self.__field_zeros=value else: self.__field_zeros=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_zeros(self): del self.__field_zeros zeros=property(__getfield_zeros, __setfield_zeros, __delfield_zeros, None) def iscontainer(self): return True def containerelements(self): yield ('cdate', self.__field_cdate, None) yield ('text', self.__field_text, None) yield ('memotime', self.__field_memotime, None) yield ('zeros', self.__field_zeros, None) class textmemofile(BaseProtogenClass): __fields=['itemcount', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemofile,self).__init__(**dict) if self.__class__ is textmemofile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemofile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemofile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_itemcount.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_itemcount=UINT(**{'sizeinbytes': 4}) self.__field_itemcount.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_itemcount(self): return self.__field_itemcount.getvalue() def __setfield_itemcount(self, value): if isinstance(value,UINT): self.__field_itemcount=value else: self.__field_itemcount=UINT(value,**{'sizeinbytes': 4}) def __delfield_itemcount(self): del self.__field_itemcount itemcount=property(__getfield_itemcount, __setfield_itemcount, __delfield_itemcount, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': textmemo }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('itemcount', self.__field_itemcount, None) yield ('items', self.__field_items, None) bitpim-1.0.7+dfsg1/src/phones/p_lgvx8560.py0000644001616600161660000003302211041535641016426 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VX8560/VX8610""" # groups - same as VX-8700 # speeds - same as VX-8550 # sms - same as VX-9100/VX-9700 # calendar - same as VX-8550 from p_lgvx9700 import * # memo - same as VX-8550 from p_lgvx8550 import textmemo,textmemofile # indexentry - same as VX-8800 # indexfile - same as VX-8800 from p_lgvx8800 import indexfile,indexentry class call(BaseProtogenClass): __fields=['GPStime', 'unk0', 'duration', 'number', 'name', 'numberlength', 'status', 'pbnumbertype', 'unk1', 'pbentrynum', 'unk2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(call,self).__init__(**dict) if self.__class__ is call: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(call,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(call,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_unk0.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_numberlength.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_pbnumbertype.writetobuffer(buf) self.__field_unk1.writetobuffer(buf) self.__field_pbentrynum.writetobuffer(buf) self.__field_unk2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unk0=UINT(**{'sizeinbytes': 4}) self.__field_unk0.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_numberlength=UINT(**{'sizeinbytes': 1}) self.__field_numberlength.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_pbnumbertype=UINT(**{'sizeinbytes': 1}) self.__field_pbnumbertype.readfrombuffer(buf) self.__field_unk1=UINT(**{'sizeinbytes': 4}) self.__field_unk1.readfrombuffer(buf) self.__field_pbentrynum=UINT(**{'sizeinbytes': 4}) self.__field_pbentrynum.readfrombuffer(buf) self.__field_unk2=DATA(**{'sizeinbytes': 24}) self.__field_unk2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unk0(self): return self.__field_unk0.getvalue() def __setfield_unk0(self, value): if isinstance(value,UINT): self.__field_unk0=value else: self.__field_unk0=UINT(value,**{'sizeinbytes': 4}) def __delfield_unk0(self): del self.__field_unk0 unk0=property(__getfield_unk0, __setfield_unk0, __delfield_unk0, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numberlength(self): return self.__field_numberlength.getvalue() def __setfield_numberlength(self, value): if isinstance(value,UINT): self.__field_numberlength=value else: self.__field_numberlength=UINT(value,**{'sizeinbytes': 1}) def __delfield_numberlength(self): del self.__field_numberlength numberlength=property(__getfield_numberlength, __setfield_numberlength, __delfield_numberlength, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_pbnumbertype(self): return self.__field_pbnumbertype.getvalue() def __setfield_pbnumbertype(self, value): if isinstance(value,UINT): self.__field_pbnumbertype=value else: self.__field_pbnumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_pbnumbertype(self): del self.__field_pbnumbertype pbnumbertype=property(__getfield_pbnumbertype, __setfield_pbnumbertype, __delfield_pbnumbertype, None) def __getfield_unk1(self): return self.__field_unk1.getvalue() def __setfield_unk1(self, value): if isinstance(value,UINT): self.__field_unk1=value else: self.__field_unk1=UINT(value,**{'sizeinbytes': 4}) def __delfield_unk1(self): del self.__field_unk1 unk1=property(__getfield_unk1, __setfield_unk1, __delfield_unk1, None) def __getfield_pbentrynum(self): return self.__field_pbentrynum.getvalue() def __setfield_pbentrynum(self, value): if isinstance(value,UINT): self.__field_pbentrynum=value else: self.__field_pbentrynum=UINT(value,**{'sizeinbytes': 4}) def __delfield_pbentrynum(self): del self.__field_pbentrynum pbentrynum=property(__getfield_pbentrynum, __setfield_pbentrynum, __delfield_pbentrynum, None) def __getfield_unk2(self): return self.__field_unk2.getvalue() def __setfield_unk2(self, value): if isinstance(value,DATA): self.__field_unk2=value else: self.__field_unk2=DATA(value,**{'sizeinbytes': 24}) def __delfield_unk2(self): del self.__field_unk2 unk2=property(__getfield_unk2, __setfield_unk2, __delfield_unk2, None) def iscontainer(self): return True def containerelements(self): yield ('GPStime', self.__field_GPStime, None) yield ('unk0', self.__field_unk0, None) yield ('duration', self.__field_duration, None) yield ('number', self.__field_number, None) yield ('name', self.__field_name, None) yield ('numberlength', self.__field_numberlength, None) yield ('status', self.__field_status, None) yield ('pbnumbertype', self.__field_pbnumbertype, None) yield ('unk1', self.__field_unk1, None) yield ('pbentrynum', self.__field_pbentrynum, None) yield ('unk2', self.__field_unk2, None) class callhistory(BaseProtogenClass): __fields=['unk0', 'numcalls', 'unk1', 'calls'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callhistory,self).__init__(**dict) if self.__class__ is callhistory: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callhistory,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callhistory,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unk0.writetobuffer(buf) self.__field_numcalls.writetobuffer(buf) self.__field_unk1.writetobuffer(buf) try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unk0=UINT(**{'sizeinbytes': 4, 'default': 0x00020000 }) self.__field_unk0.readfrombuffer(buf) self.__field_numcalls=UINT(**{'sizeinbytes': 4}) self.__field_numcalls.readfrombuffer(buf) self.__field_unk1=UINT(**{'sizeinbytes': 1}) self.__field_unk1.readfrombuffer(buf) self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unk0(self): return self.__field_unk0.getvalue() def __setfield_unk0(self, value): if isinstance(value,UINT): self.__field_unk0=value else: self.__field_unk0=UINT(value,**{'sizeinbytes': 4, 'default': 0x00020000 }) def __delfield_unk0(self): del self.__field_unk0 unk0=property(__getfield_unk0, __setfield_unk0, __delfield_unk0, None) def __getfield_numcalls(self): return self.__field_numcalls.getvalue() def __setfield_numcalls(self, value): if isinstance(value,UINT): self.__field_numcalls=value else: self.__field_numcalls=UINT(value,**{'sizeinbytes': 4}) def __delfield_numcalls(self): del self.__field_numcalls numcalls=property(__getfield_numcalls, __setfield_numcalls, __delfield_numcalls, None) def __getfield_unk1(self): return self.__field_unk1.getvalue() def __setfield_unk1(self, value): if isinstance(value,UINT): self.__field_unk1=value else: self.__field_unk1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unk1(self): del self.__field_unk1 unk1=property(__getfield_unk1, __setfield_unk1, __delfield_unk1, None) def __getfield_calls(self): try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) return self.__field_calls.getvalue() def __setfield_calls(self, value): if isinstance(value,LIST): self.__field_calls=value else: self.__field_calls=LIST(value,**{'elementclass': call}) def __delfield_calls(self): del self.__field_calls calls=property(__getfield_calls, __setfield_calls, __delfield_calls, None) def iscontainer(self): return True def containerelements(self): yield ('unk0', self.__field_unk0, None) yield ('numcalls', self.__field_numcalls, None) yield ('unk1', self.__field_unk1, None) yield ('calls', self.__field_calls, None) bitpim-1.0.7+dfsg1/src/phones/com_lgvx9700.py0000644001616600161660000001453711050671160016751 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2008 Nathan Hjelm ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgvx9700.py 4678 2008-08-13 23:46:56Z djpham $ """ Communicate with the LG VX9700 cell phone. """ # BitPim modules import common import com_brew import prototypes import com_lgvx10000 import p_lgvx9700 import helpids import sms #------------------------------------------------------------------------------- parentphone=com_lgvx10000.Phone class Phone(parentphone): desc="LG-VX9700 (Dare)" helpid=helpids.ID_PHONE_LGVX9700 protocolclass=p_lgvx9700 serialsname='lgvx9700' my_model='VX9700' builtinringtones= ('Low Beep Once', 'Low Beeps', 'Loud Beep Once', 'Loud Beeps', 'VZW Default Ringtone', 'Home Phone', 'Simple Beep', 'Short Note Beep', 'Old Bell', 'Move Bell', 'Wahwah', 'Just Fine', 'Froggy Night', 'Whistling Wizard', 'Like a Movie', 'Deep Blue Sea', 'Sweet & Twenty', 'Funky Band', 'Why Not', 'Mystique', 'Evening Grow', 'This Time', 'Hawaiian Punch', 'L.O.V.E.', 'Night Sky', 'No Ring',) def setDMversion(self): self._DMv5=False self._DMv6=True self._timeout=5 # Assume a quick timeout on newer phones # Fundamentals: # - get_esn - same as LG VX-8300 # - getgroups - same as LG VX-8700 # - getwallpaperindices - LGUncountedIndexedMedia # - getringtoneindices - LGUncountedIndexedMedia # - DM Version - 6 # - phonebook - same as LG VX-8550 # - SMS - same dir structure as the VX-8800 def _getoutboxmessage(self, sf): entry=sms.SMSEntry() entry.folder=entry.Folder_Sent entry.datetime="%d%02d%02dT%02d%02d%02d" % ((sf.timesent)) # add all the recipients for r in sf.recipients: if r.number: confirmed=(r.status==5) confirmed_date=None if confirmed: confirmed_date="%d%02d%02dT%02d%02d%02d" % r.timereceived entry.add_recipient(r.number, confirmed, confirmed_date) entry.subject=sf.subject txt="" if sf.num_msg_elements==1 and not sf.messages[0].binary: txt=self._get_text_from_sms_msg_without_header(sf.messages[0].msg, sf.messages[0].length) else: for i in range(sf.num_msg_elements): txt+=self._get_text_from_sms_msg_with_header(sf.messages[i].msg, sf.messages[i].length) entry.text=unicode(txt, errors='ignore') if sf.priority==0: entry.priority=sms.SMSEntry.Priority_Normal else: entry.priority=sms.SMSEntry.Priority_High entry.locked=sf.locked entry.callback=sf.callback return entry def _getinboxmessage(self, sf): entry=sms.SMSEntry() entry.folder=entry.Folder_Inbox entry.datetime="%d%02d%02dT%02d%02d%02d" % (sf.GPStime) entry._from=sf.sender if sf.sender else sf.sender_name entry.subject=sf.subject entry.locked=sf.locked if sf.priority==0: entry.priority=sms.SMSEntry.Priority_Normal else: entry.priority=sms.SMSEntry.Priority_High entry.read=sf.read txt="" _decode_func=self._get_text_from_sms_msg_with_header if \ sf.msgs[1].msg_length else \ self._get_text_from_sms_msg_without_header for _entry in sf.msgs: if _entry.msg_length: txt+=_decode_func(_entry.msg_data.msg, _entry.msg_length) entry.text=unicode(txt, errors='ignore') entry.callback=sf.callback return entry #------------------------------------------------------------------------------- parentprofile=com_lgvx10000.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='VX9700' # inside screen resoluation WALLPAPER_WIDTH = 400 WALLPAPER_HEIGHT = 240 imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images(sd)")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video(sd)")) # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", {'width': 240, 'height': 400, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 400, 'height': 240, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 120, 'height': 100, 'format': "JPEG"})) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading ('memo', 'read', None), # all memo list reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('sms', 'write', 'OVERWRITE'), # all SMS list writing ('memo', 'write', 'OVERWRITE'), # all memo list writing ## ('playlist', 'read', 'OVERWRITE'), ## ('playlist', 'write', 'OVERWRITE'), ('t9_udb', 'write', 'OVERWRITE'), ) if __debug__: _supportedsyncs+=( ('t9_udb', 'read', 'OVERWRITE'), ) bitpim-1.0.7+dfsg1/src/phones/p_lgvx7000.p0000644001616600161660000002414210445704035016226 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2005 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lgvx7000.p 3387 2006-06-20 05:31:09Z rogerb $ %{ """Various descriptions of data specific to LG VX7000""" from common import PhoneBookBusyException from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx4400 except as noted # below from p_lgvx4400 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NORINGTONE=65535 # -1 in two bytes NOMSGRINGTONE=65535 # -1 in two bytes NOWALLPAPER=0 # of course it wouldn't be 65535 ... NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=500 MAXCALENDARDESCRIPTION=38 NUMEMAILS=2 NUMPHONENUMBERS=5 PHONE_ENCODING='iso8859_1' # Text Memo const text_memo_file='sch/memo.dat' # SMS const sms_dir='sms' sms_ext='.dat' sms_inbox_prefix='sms/inbox' sms_inbox_name_len=len(sms_inbox_prefix)+3+len(sms_ext) sms_saved_prefix='sms/sf' sms_saved_name_len=len(sms_saved_prefix)+2+len(sms_ext) sms_outbox_prefix='sms/outbox' sms_outbox_name_len=len(sms_outbox_prefix)+3+len(sms_ext) sms_canned_file='sms/mediacan000.dat' SMS_CANNED_MAX_ITEMS=18 # Call History const incoming_call_file='pim/incoming_log.dat' outgoing_call_file='pim/outgoing_log.dat' missed_call_file='pim/missed_log.dat' # The numbertype tab is different than all other LG phones numbertypetab= ( None, 'cell', 'home', 'office', 'cell2', 'fax' ) %} PACKET speeddial: 2 UINT {'default': 0xffff} +entry 1 UINT {'default': 0xff} +number PACKET speeddials: * LIST {'length': NUMSPEEDDIALS, 'elementclass': speeddial} +speeddials PACKET indexentry: 2 UINT index 2 UINT type 84 USTRING filename "includes full pathname" 4 UINT {'default': 0} +date "i think this is bitfield of the date" 4 UINT dunno PACKET indexfile: "Used for tracking wallpaper and ringtones" * LIST {'elementclass': indexentry, 'createdefault': True} +items PACKET sizefile: "Used for tracking the total size used by a particular type of media" 4 UINT size # All STRINGS have raiseonterminatedread as False since the phone does # occassionally leave out the terminator byte # Note if you change the length of any of these fields, you also # need to modify com_lgvx7000 to give a different truncateat parameter # in the convertphonebooktophone method PACKET pbentry: 4 UINT serial1 2 UINT {'constant': 0x181, 'constantexception': PhoneBookBusyException} +entrysize 4 UINT serial2 2 UINT entrynumber 23 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 2 UINT group * LIST {'length': NUMEMAILS} +emails: 49 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} email 2 UINT ringtone "ringtone index for a call" 2 UINT msgringtone "ringtone index for a text message" 2 UINT wallpaper * LIST {'length': NUMPHONENUMBERS} +numbertypes: 1 UINT numbertype * LIST {'length': NUMPHONENUMBERS} +numbers: 49 USTRING {'raiseonunterminatedread': False} number * UNKNOWN +unknown PACKET pbreadentryresponse: "Results of reading one entry" * pbheader header * pbentry entry PACKET pbupdateentryrequest: * pbheader {'command': 0x04, 'flag': 0x01} +header * pbentry entry PACKET pbappendentryrequest: * pbheader {'command': 0x03, 'flag': 0x01} +header * pbentry entry # Schedule (Calendar) PACKET scheduleexception: 4 UINT pos "Refers to event id (position in schedule file) that this suppresses" 1 UINT day 1 UINT month 2 UINT year PACKET scheduleexceptionfile: * LIST {'elementclass': scheduleexception} +items PACKET scheduleevent: 4 UINT pos "position within file, used as an event id" 4 LGCALDATE start 4 LGCALDATE end 1 UINT repeat 2 UINT daybitmap "which days a weekly repeat event happens on" 1 UINT alarmminutes "a value of 100 indicates not set" 1 UINT alarmhours "a value of 100 indicates not set" 1 UINT alarmtype "preset alarm reminder type" 1 UINT { 'default': 0 } +snoozedelay "in minutes, not for this phone" 1 UINT ringtone 4 UINT { 'default': 0 } +pad2 39 USTRING {'encoding': PHONE_ENCODING, 'raiseontruncate': False, 'raiseonunterminatedread': False } description PACKET schedulefile: 2 UINT numactiveitems * LIST {'elementclass': scheduleevent} +events # Text Memos PACKET textmemo: 151 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } text PACKET textmemofile: 4 UINT itemcount * LIST { 'elementclass': textmemo } +items # calling history file PACKET callentry: 4 GPSDATE GPStime 4 UNKNOWN pad1 4 UINT duration 49 USTRING { 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False } number 36 USTRING { 'raiseonunterminatedread': False } name 8 UNKNOWN pad2 PACKET callhistory: 4 UINT numcalls 1 UNKNOWN pad1 * LIST { 'elementclass': callentry } +calls ### ### SMS ### # # There are 3 types of SMS records, The inbox, outbox and unsent (pending) # Unlike other records in the phone each message is stored in a separate file # All messages are in the 'sms' directory in the root of the phone # Inbox messages are in files called 'inbox000.dat', the number 000 varies for # each message, typically there are no gaps in the numbering, but gaps can appear # if a message is deleted. # Outbox message are named 'outbox000.dat', unsent messages are named 'sf00.dat', # only two digit file name that suggests a max of 100 message for this type. # Messages in the outbox get updated when the message is received by the recipient, # they contain a delivery flag and a delivery time for all the possible 10 recipients. # The vx8100 supports SMS contatination, this allows you to send text messages that are # longer than 160 characters. The format is different for these type of messages, but # it is supported by this implementation. # The vx8100 also allows you to put small graphics, sounds and animations in a message. # This implementation does not support these, if they are contained in a message they # will be ignored and just the text will be shown when you view the message in bitpim. # The text in the the messages is stored in 7-bit characters, so they have # to be unpacked, in concatinated messages and messages with embeded graphics etc. the # format uses the GSM 03.38 specified format, a good example of this can be found at # "http://www.dreamfabric.com/sms/hello.html". # For simple messages less than 161 characters with no graphics the format is simpler, # the 7-bit characters are just packed into memory in the order they appear in the # message. PACKET msg_record: # the first few fields in this packet have something to do with the type of SMS # message contained. EMS and concatinated text are coded differently than a # simple text message 1 UINT binary # 0=simple text, 1=binary/concatinated 1 UINT unknown3 # 0=simple text, 1=binary/concatinated 1 UINT unknown4 # 0 1 UINT unknown6 # 2=simple text, 9=binary/concatinated 1 UINT length * LIST {'length': 220} +msg: 1 UINT byte "individual byte of message" PACKET recipient_record: 49 USTRING number 2 UINT status # 1 when sent, 5 when received, 2 failed to send 4 LGCALDATE timesent 4 LGCALDATE timereceived 49 UNKNOWN unknown2 PACKET sms_saved: 4 UINT outboxmsg 4 UNKNOWN pad if self.outboxmsg: * sms_out outbox if not self.outboxmsg: * sms_in inbox PACKET sms_out: 4 UINT index # starting from 1, unique 1 UINT locked # 1=locked 1 UNKNOWN unknown2 4 LGCALDATE timesent # time the message was sent 6 UNKNOWN unknown2 21 USTRING {'encoding': PHONE_ENCODING}subject 1 UNKNOWN unknown4 2 UINT num_msg_elements # up to 10 * LIST {'elementclass': msg_record, 'length': 7} +messages 14 UNKNOWN unknown1 1 UINT priority # 0=normal, 1=high 1 UNKNOWN unknown5 35 USTRING callback * LIST {'elementclass': recipient_record,'length': 9} +recipients * UNKNOWN pad PACKET SMSINBOXMSGFRAGMENT: * LIST {'length': 181} +msg: # this size could be wrong 1 UINT byte "individual byte of message" PACKET sms_in: 10 UNKNOWN unknown1 6 SMSDATE timesent 3 UINT unknown2 1 UINT callback_length # 0 for no callback number 38 USTRING callback 1 UINT sender_length * LIST {'length': 38} +sender: 1 UINT byte "individual byte of senders phone number" 12 DATA unknown3 # set to zeros 4 LGCALDATE lg_time # time the message was sent 3 UNKNOWN unknown4 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 4 UINT unknown5 # zero 1 UINT read # 1 if message has been read, 0 otherwise 1 UINT locked # 1 if the message is locked, 0 otherwise 8 UINT unknown6 # zero 1 UINT priority # 1 if the message is high priority, 0 otherwise 21 USTRING {'encoding': PHONE_ENCODING} subject 1 UINT bin_header1 # 0 in simple message 1 if the message contains a binary header 1 UINT bin_header2 # 0 in simple message 9 if the message contains a binary header 4 UINT unknown7 # zeros 2 UINT multipartID # multi-part message ID, used for concatinated messages only 1 UINT bin_header3 # 0 in simple message 2 if the message contains a binary header 1 UINT num_msg_elements # max 10 elements (guessing on max here) * LIST {'length': 10} +msglengths: 1 UINT msglength "lengths of individual messages in septets" 10 UNKNOWN unknown8 * LIST {'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT} +msgs # 181 bytes per message, uncertain on this, no multipart message available # 20 messages, 7-bit ascii for simple text. for binary header # first byte is header length not including the length byte # rest depends on content of header, not known at this time. # text alway follows the header although the format it different # than a simple SMS * UNKNOWN unknown9 bitpim-1.0.7+dfsg1/src/phones/p_lgvx8600.py0000644001616600161660000010002010574665711016426 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx8500 except as noted below from p_lgvx8500 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb #Play List stuff PLIndexFileName='dload/pl_mgr.dat' PLFilePath='my_music' PLExt='.vpl' PLMaxSize=50 # Max number of items per playlist class call(BaseProtogenClass): __fields=['GPStime', 'dunno1', 'duration', 'dunno2', 'pbentrynum', 'numberlength', 'dunno3', 'pbnumbertype', 'dunno4', 'name', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(call,self).__init__(**dict) if self.__class__ is call: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(call,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(call,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_pbentrynum.writetobuffer(buf) self.__field_numberlength.writetobuffer(buf) self.__field_dunno3.writetobuffer(buf) self.__field_pbnumbertype.writetobuffer(buf) self.__field_dunno4.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_dunno1=UINT(**{'sizeinbytes': 4}) self.__field_dunno1.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_dunno2=UINT(**{'sizeinbytes': 2}) self.__field_dunno2.readfrombuffer(buf) self.__field_pbentrynum=UINT(**{'sizeinbytes': 2}) self.__field_pbentrynum.readfrombuffer(buf) self.__field_numberlength=UINT(**{'sizeinbytes': 1}) self.__field_numberlength.readfrombuffer(buf) self.__field_dunno3=UINT(**{'sizeinbytes': 1}) self.__field_dunno3.readfrombuffer(buf) self.__field_pbnumbertype=UINT(**{'sizeinbytes': 1}) self.__field_pbnumbertype.readfrombuffer(buf) self.__field_dunno4=UINT(**{'sizeinbytes': 2}) self.__field_dunno4.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UINT): self.__field_dunno1=value else: self.__field_dunno1=UINT(value,**{'sizeinbytes': 4}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UINT): self.__field_dunno2=value else: self.__field_dunno2=UINT(value,**{'sizeinbytes': 2}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_pbentrynum(self): return self.__field_pbentrynum.getvalue() def __setfield_pbentrynum(self, value): if isinstance(value,UINT): self.__field_pbentrynum=value else: self.__field_pbentrynum=UINT(value,**{'sizeinbytes': 2}) def __delfield_pbentrynum(self): del self.__field_pbentrynum pbentrynum=property(__getfield_pbentrynum, __setfield_pbentrynum, __delfield_pbentrynum, None) def __getfield_numberlength(self): return self.__field_numberlength.getvalue() def __setfield_numberlength(self, value): if isinstance(value,UINT): self.__field_numberlength=value else: self.__field_numberlength=UINT(value,**{'sizeinbytes': 1}) def __delfield_numberlength(self): del self.__field_numberlength numberlength=property(__getfield_numberlength, __setfield_numberlength, __delfield_numberlength, None) def __getfield_dunno3(self): return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,UINT): self.__field_dunno3=value else: self.__field_dunno3=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_pbnumbertype(self): return self.__field_pbnumbertype.getvalue() def __setfield_pbnumbertype(self, value): if isinstance(value,UINT): self.__field_pbnumbertype=value else: self.__field_pbnumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_pbnumbertype(self): del self.__field_pbnumbertype pbnumbertype=property(__getfield_pbnumbertype, __setfield_pbnumbertype, __delfield_pbnumbertype, None) def __getfield_dunno4(self): return self.__field_dunno4.getvalue() def __setfield_dunno4(self, value): if isinstance(value,UINT): self.__field_dunno4=value else: self.__field_dunno4=UINT(value,**{'sizeinbytes': 2}) def __delfield_dunno4(self): del self.__field_dunno4 dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('GPStime', self.__field_GPStime, None) yield ('dunno1', self.__field_dunno1, None) yield ('duration', self.__field_duration, None) yield ('dunno2', self.__field_dunno2, None) yield ('pbentrynum', self.__field_pbentrynum, None) yield ('numberlength', self.__field_numberlength, None) yield ('dunno3', self.__field_dunno3, None) yield ('pbnumbertype', self.__field_pbnumbertype, None) yield ('dunno4', self.__field_dunno4, None) yield ('name', self.__field_name, None) yield ('number', self.__field_number, None) class callhistory(BaseProtogenClass): __fields=['numcalls', 'unknown1', 'calls'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callhistory,self).__init__(**dict) if self.__class__ is callhistory: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callhistory,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callhistory,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numcalls.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numcalls=UINT(**{'sizeinbytes': 4}) self.__field_numcalls.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numcalls(self): return self.__field_numcalls.getvalue() def __setfield_numcalls(self, value): if isinstance(value,UINT): self.__field_numcalls=value else: self.__field_numcalls=UINT(value,**{'sizeinbytes': 4}) def __delfield_numcalls(self): del self.__field_numcalls numcalls=property(__getfield_numcalls, __setfield_numcalls, __delfield_numcalls, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_calls(self): try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) return self.__field_calls.getvalue() def __setfield_calls(self, value): if isinstance(value,LIST): self.__field_calls=value else: self.__field_calls=LIST(value,**{'elementclass': call}) def __delfield_calls(self): del self.__field_calls calls=property(__getfield_calls, __setfield_calls, __delfield_calls, None) def iscontainer(self): return True def containerelements(self): yield ('numcalls', self.__field_numcalls, None) yield ('unknown1', self.__field_unknown1, None) yield ('calls', self.__field_calls, None) class PLIndexEntry(BaseProtogenClass): __fields=['pathname', 'dunno'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PLIndexEntry,self).__init__(**dict) if self.__class__ is PLIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PLIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PLIndexEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pathname.writetobuffer(buf) try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default': 0x105 }) self.__field_dunno.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pathname=USTRING(**{'sizeinbytes': 264, 'encoding': PHONE_ENCODING }) self.__field_pathname.readfrombuffer(buf) self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default': 0x105 }) self.__field_dunno.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pathname(self): return self.__field_pathname.getvalue() def __setfield_pathname(self, value): if isinstance(value,USTRING): self.__field_pathname=value else: self.__field_pathname=USTRING(value,**{'sizeinbytes': 264, 'encoding': PHONE_ENCODING }) def __delfield_pathname(self): del self.__field_pathname pathname=property(__getfield_pathname, __setfield_pathname, __delfield_pathname, None) def __getfield_dunno(self): try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default': 0x105 }) return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 4, 'default': 0x105 }) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def iscontainer(self): return True def containerelements(self): yield ('pathname', self.__field_pathname, None) yield ('dunno', self.__field_dunno, None) class PLIndexFile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PLIndexFile,self).__init__(**dict) if self.__class__ is PLIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PLIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PLIndexFile,kwargs) if len(args): dict2={ 'elementclass': PLIndexEntry, 'createdefault': True } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': PLIndexEntry, 'createdefault': True }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': PLIndexEntry, 'createdefault': True }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': PLIndexEntry, 'createdefault': True }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': PLIndexEntry, 'createdefault': True }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class PLSongEntry(BaseProtogenClass): __fields=['pathname', 'tunename', 'artistname', 'albumname', 'genre', 'dunno1', 'date', 'size', 'zero'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PLSongEntry,self).__init__(**dict) if self.__class__ is PLSongEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PLSongEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PLSongEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pathname.writetobuffer(buf) try: self.__field_tunename except: self.__field_tunename=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': self.pathname }) self.__field_tunename.writetobuffer(buf) try: self.__field_artistname except: self.__field_artistname=USTRING(**{'sizeinbytes': 100, 'encoding': PHONE_ENCODING, 'default': 'Unknown' }) self.__field_artistname.writetobuffer(buf) try: self.__field_albumname except: self.__field_albumname=USTRING(**{'sizeinbytes': 100, 'encoding': PHONE_ENCODING, 'default': 'Unknown' }) self.__field_albumname.writetobuffer(buf) try: self.__field_genre except: self.__field_genre=USTRING(**{'sizeinbytes': 102, 'encoding': PHONE_ENCODING, 'default': 'Unknown' }) self.__field_genre.writetobuffer(buf) try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 4, 'default': 2 }) self.__field_dunno1.writetobuffer(buf) try: self.__field_date except: self.__field_date=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) self.__field_date.writetobuffer(buf) self.__field_size.writetobuffer(buf) try: self.__field_zero except: self.__field_zero=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_zero.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pathname=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING }) self.__field_pathname.readfrombuffer(buf) self.__field_tunename=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': self.pathname }) self.__field_tunename.readfrombuffer(buf) self.__field_artistname=USTRING(**{'sizeinbytes': 100, 'encoding': PHONE_ENCODING, 'default': 'Unknown' }) self.__field_artistname.readfrombuffer(buf) self.__field_albumname=USTRING(**{'sizeinbytes': 100, 'encoding': PHONE_ENCODING, 'default': 'Unknown' }) self.__field_albumname.readfrombuffer(buf) self.__field_genre=USTRING(**{'sizeinbytes': 102, 'encoding': PHONE_ENCODING, 'default': 'Unknown' }) self.__field_genre.readfrombuffer(buf) self.__field_dunno1=UINT(**{'sizeinbytes': 4, 'default': 2 }) self.__field_dunno1.readfrombuffer(buf) self.__field_date=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) self.__field_date.readfrombuffer(buf) self.__field_size=UINT(**{'sizeinbytes': 4}) self.__field_size.readfrombuffer(buf) self.__field_zero=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_zero.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pathname(self): return self.__field_pathname.getvalue() def __setfield_pathname(self, value): if isinstance(value,USTRING): self.__field_pathname=value else: self.__field_pathname=USTRING(value,**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING }) def __delfield_pathname(self): del self.__field_pathname pathname=property(__getfield_pathname, __setfield_pathname, __delfield_pathname, None) def __getfield_tunename(self): try: self.__field_tunename except: self.__field_tunename=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': self.pathname }) return self.__field_tunename.getvalue() def __setfield_tunename(self, value): if isinstance(value,USTRING): self.__field_tunename=value else: self.__field_tunename=USTRING(value,**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': self.pathname }) def __delfield_tunename(self): del self.__field_tunename tunename=property(__getfield_tunename, __setfield_tunename, __delfield_tunename, None) def __getfield_artistname(self): try: self.__field_artistname except: self.__field_artistname=USTRING(**{'sizeinbytes': 100, 'encoding': PHONE_ENCODING, 'default': 'Unknown' }) return self.__field_artistname.getvalue() def __setfield_artistname(self, value): if isinstance(value,USTRING): self.__field_artistname=value else: self.__field_artistname=USTRING(value,**{'sizeinbytes': 100, 'encoding': PHONE_ENCODING, 'default': 'Unknown' }) def __delfield_artistname(self): del self.__field_artistname artistname=property(__getfield_artistname, __setfield_artistname, __delfield_artistname, None) def __getfield_albumname(self): try: self.__field_albumname except: self.__field_albumname=USTRING(**{'sizeinbytes': 100, 'encoding': PHONE_ENCODING, 'default': 'Unknown' }) return self.__field_albumname.getvalue() def __setfield_albumname(self, value): if isinstance(value,USTRING): self.__field_albumname=value else: self.__field_albumname=USTRING(value,**{'sizeinbytes': 100, 'encoding': PHONE_ENCODING, 'default': 'Unknown' }) def __delfield_albumname(self): del self.__field_albumname albumname=property(__getfield_albumname, __setfield_albumname, __delfield_albumname, None) def __getfield_genre(self): try: self.__field_genre except: self.__field_genre=USTRING(**{'sizeinbytes': 102, 'encoding': PHONE_ENCODING, 'default': 'Unknown' }) return self.__field_genre.getvalue() def __setfield_genre(self, value): if isinstance(value,USTRING): self.__field_genre=value else: self.__field_genre=USTRING(value,**{'sizeinbytes': 102, 'encoding': PHONE_ENCODING, 'default': 'Unknown' }) def __delfield_genre(self): del self.__field_genre genre=property(__getfield_genre, __setfield_genre, __delfield_genre, None) def __getfield_dunno1(self): try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 4, 'default': 2 }) return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UINT): self.__field_dunno1=value else: self.__field_dunno1=UINT(value,**{'sizeinbytes': 4, 'default': 2 }) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_date(self): try: self.__field_date except: self.__field_date=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,GPSDATE): self.__field_date=value else: self.__field_date=GPSDATE(value,**{'sizeinbytes': 4, 'default': GPSDATE.now() }) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, None) def __getfield_size(self): return self.__field_size.getvalue() def __setfield_size(self, value): if isinstance(value,UINT): self.__field_size=value else: self.__field_size=UINT(value,**{'sizeinbytes': 4}) def __delfield_size(self): del self.__field_size size=property(__getfield_size, __setfield_size, __delfield_size, None) def __getfield_zero(self): try: self.__field_zero except: self.__field_zero=UINT(**{'sizeinbytes': 4, 'default': 0 }) return self.__field_zero.getvalue() def __setfield_zero(self, value): if isinstance(value,UINT): self.__field_zero=value else: self.__field_zero=UINT(value,**{'sizeinbytes': 4, 'default': 0 }) def __delfield_zero(self): del self.__field_zero zero=property(__getfield_zero, __setfield_zero, __delfield_zero, None) def iscontainer(self): return True def containerelements(self): yield ('pathname', self.__field_pathname, None) yield ('tunename', self.__field_tunename, None) yield ('artistname', self.__field_artistname, None) yield ('albumname', self.__field_albumname, None) yield ('genre', self.__field_genre, None) yield ('dunno1', self.__field_dunno1, None) yield ('date', self.__field_date, None) yield ('size', self.__field_size, None) yield ('zero', self.__field_zero, None) class PLPlayListFile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PLPlayListFile,self).__init__(**dict) if self.__class__ is PLPlayListFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PLPlayListFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PLPlayListFile,kwargs) if len(args): dict2={ 'elementclass': PLSongEntry, 'createdefault': True } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': PLSongEntry, 'createdefault': True }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': PLSongEntry, 'createdefault': True }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': PLSongEntry, 'createdefault': True }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': PLSongEntry, 'createdefault': True }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) bitpim-1.0.7+dfsg1/src/phones/p_lglx260.p0000644001616600161660000003035211047222660016133 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Simon Cappper ### Copyright (C) 2008 Joe Siegrist ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### %{ # Based on p_lglx5500.p """Various descriptions of data specific to LG LX260""" from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx4400 except as noted # below from p_lgvx4400 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NOWALLPAPER=1 NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=499 MAXCALENDARDESCRIPTION=38 MAX_PHONEBOOK_GROUPS=0 NUMEMAILS=3 NUMPHONENUMBERS=5 MEMOLENGTH=32 # Calendar parameters NUMCALENDARENTRIES=300 CAL_REP_NONE=0x10 CAL_REP_DAILY=0x11 CAL_REP_MONFRI=0x12 CAL_REP_WEEKLY=0x13 CAL_REP_MONTHLY=0x14 CAL_REP_YEARLY=0x15 CAL_DOW_SUN=0x0800 CAL_DOW_MON=0x0400 CAL_DOW_TUE=0x0200 CAL_DOW_WED=0x0100 CAL_DOW_THU=0x0080 CAL_DOW_FRI=0x0040 CAL_DOW_SAT=0x0020 CAL_DOW_EXCEPTIONS=0x0010 CAL_REMINDER_NONE=0 CAL_REMINDER_ONTIME=1 CAL_REMINDER_5MIN=2 CAL_REMINDER_10MIN=3 CAL_REMINDER_1HOUR=4 CAL_REMINDER_1DAY=5 CAL_REMINDER_2DAYS=6 CAL_NO_VOICE=0xffff CAL_REPEAT_DATE=(2100, 12, 31) numbertypetab=( 'cell', 'home', 'office', 'fax', 'pager' ) cal_dir='sch' cal_voice_ext='.qcp' # full name='sche000.qcp' cal_data_file_name='sch/schedule.dat' cal_exception_file_name='sch/schexception.dat' cal_voice_id_ofs=0x0f cal_has_voice_id=True PHONE_ENCODING='iso8859_1' %} PACKET pbgroup: "A single group" 1 UINT icon 23 USTRING {'encoding': PHONE_ENCODING} name PACKET pbgroups: "Phonebook groups" * LIST {'elementclass': pbgroup} +groups PACKET speeddial: 2 UINT {'default': 0xffff} +entry 1 UINT {'default': 0xff} +number PACKET speeddials: * LIST {'length': NUMSPEEDDIALS, 'elementclass': speeddial} +speeddials PACKET indexentry: 2 UINT {'default': 0xffff} +index 50 USTRING {'default': ""} +name PACKET indexfile: "Used for tracking wallpaper and ringtones" # A bit of a silly design again. Entries with an index of 0xffff are # 'blank'. Thus it is possible for numactiveitems and the actual # number of valid entries to be mismatched. 2 UINT numactiveitems * LIST {'elementclass': indexentry, 'createdefault': True} +items # All STRINGS have raiseonterminatedread as False since the phone does # occassionally leave out the terminator byte # Note if you change the length of any of these fields, you also # need to modify com_lgLX260 to give a different truncatate parameter # in the convertphonebooktophone method PACKET pbentry: P UINT {'default': 0} wallpaper 4 UINT serial1 2 UINT {'constant': 0x02A0} +entrysize 4 UINT serial2 2 UINT entrynumber 2 UINT {'default': 0} +unknown0 33 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': True} name 40 UNKNOWN +unknown1 2 UINT group 7 UNKNOWN +unknown1a 33 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': True} memo * LIST {'length': NUMEMAILS} +emails: 73 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': True} email 73 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': True} url 1 UINT {'default': 0xff} +unknownf1 1 UINT {'default': 0xff} +unknownf2 1 UINT {'default': 0xff} +unknownf3 1 UINT {'default': 0xff} +unknownf4 1 UINT {'default': 0xff} +unknownf5 * LIST {'length': NUMPHONENUMBERS} +numbertypes: 1 UINT numbertype * LIST {'length': NUMPHONENUMBERS} +numbers: 49 USTRING {'raiseonunterminatedread': True} number 1 UINT {'default': 0} +unknown2 PACKET pbreadentryresponse: "Results of reading one entry" * pbheader header * pbentry entry PACKET pbupdateentryrequest: * pbheader {'command': 0x04, 'flag': 0x01} +header * pbentry entry PACKET pbappendentryrequest: * pbheader {'command': 0x03, 'flag': 0x01} +header * pbentry entry ### ### The calendar ### # # The calendar consists of one file listing events and an exception # file that lists exceptions. These exceptions suppress a particular # instance of a repeated event. For example, if you setup something # to happen monthly, but changed the 1st february event, then the # schedule will contain the repeating event, and the 1st feb one, # and the suppresions/exceptions file will point to the repeating # event and suppress the 1st feb. # The phone uses the position within the file to give an event an id PACKET scheduleexception: 4 UINT pos "Refers to event id (position in schedule file) that this suppresses" 1 UINT day 1 UINT month 2 UINT year PACKET scheduleexceptionfile: * LIST {'elementclass': scheduleexception} +items PACKET scheduleevent: 4 UINT pos "position within file, used as an event id" 4 LGCALDATE start 4 LGCALDATE end 1 UINT repeat 2 UINT daybitmap "which days a weekly repeat event happens on" 1 UINT { 'default': 0 } +pad2 1 UINT alarmminutes "a value of 100 indicates not set" 1 UINT alarmhours "a value of 100 indicates not set" 1 UINT alarmtype "preset alarm reminder type" 1 UINT { 'default': 0 } +snoozedelay "in minutes, not for this phone" 1 UINT ringtone 37 USTRING {'encoding': PHONE_ENCODING, 'raiseontruncate': False, 'raiseonunterminatedread': False } description 2 UINT hasvoice 2 UINT voiceid 2 UINT { 'default': 0 } +pad3 PACKET schedulefile: 2 UINT numactiveitems * LIST {'elementclass': scheduleevent} +events PACKET call: 4 GPSDATE GPStime #no. of seconds since 0h 1-6-80, based off local time. 4 UINT unknown1 # different for each call 4 UINT duration #seconds, not certain about length of this field 49 USTRING {'raiseonunterminatedread': False} number 36 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 1 UINT numberlength # length of phone number 1 UINT unknown2 # set to 1 on some calls 1 UINT pbnumbertype # 1=cell, 2=home, 3=office, 4=cell2, 5=fax, 6=vmail, 0xFF=not in phone book 2 UINT unknown3 # always seems to be 0 2 UINT pbentrynum #entry number in phonebook PACKET callhistory: 4 UINT numcalls 1 UINT unknown1 * LIST {'elementclass': call} +calls PACKET firmwareresponse: 1 UINT command 11 USTRING {'terminator': None} date1 8 USTRING {'terminator': None} time1 11 USTRING {'terminator': None} date2 8 USTRING {'terminator': None} time2 8 USTRING {'terminator': None} firmware ### ### SMS ### # # There are 3 types of SMS records, The inbox, outbox and unsent (pending) # Unlike other records in the phone each message is stored in a separate file # All messages are in the 'sms' directory in the root of the phone # Inbox messages are in files called 'inbox000.dat', the number 000 varies for # each message, typically there are no gaps in the numbering, but gaps can appear # if a message is deleted. # Outbox message are named 'outbox000.dat', unsent messages are named 'sf00.dat', # only two digit file name that suggests a max of 100 message for this type. # Messages in the outbox get updated when the message is received by the recipient, # they contain a delivery flag and a delivery time for all the possible 10 recipients. # The vx8100 supports SMS contatination, this allows you to send text messages that are # longer than 160 characters. The format is different for these type of messages, but # it is supported by this implementation. # The vx8100 also allows you to put small graphics, sounds and animations in a message. # This implementation does not support these, if they are contained in a message they # will be ignored and just the text will be shown when you view the message in bitpim. # The text in the the messages is stored in 7-bit characters, so they have # to be unpacked, in concatinated messages and messages with embeded graphics etc. the # format uses the GSM 03.38 specified format, a good example of this can be found at # "http://www.dreamfabric.com/sms/hello.html". # For simple messages less than 161 characters with no graphics the format is simpler, # the 7-bit characters are just packed into memory in the order they appear in the # message. PACKET msg_record: # the first few fields in this packet have something to do with the type of SMS # message contained. EMS and concatinated text are coded differently than a # simple text message 1 UINT unknown1 # 0 1 UINT binary # 0=simple text, 1=binary/concatinated 1 UINT unknown3 # 0=simple text, 1=binary/concatinated 1 UINT unknown4 # 0 1 UINT unknown6 # 2=simple text, 9=binary/concatinated 1 UINT length * LIST {'length': 219} +msg: 1 UINT byte "individual byte of message" PACKET recipient_record: 40 DATA unknown 49 USTRING number 1 UINT status # 1 when sent, 5 when received, 2 failed to send 2 UINT unknown1 4 LGCALDATE timesent 4 LGCALDATE timereceived 104 DATA unknown2 PACKET sms_saved: 4 UINT outboxmsg 4 UNKNOWN pad # used for GPStime on some phones if self.outboxmsg: * sms_out outbox if not self.outboxmsg: * sms_in inbox PACKET sms_out: 4 UINT index # starting from 1, unique 1 UINT locked # 1=locked 3 UINT unknown1 # zero 4 LGCALDATE timesent # time the message was sent 21 USTRING {'encoding': PHONE_ENCODING} subject 1 DATA unknown2 1 UINT num_msg_elements # up to 10 * LIST {'elementclass': msg_record, 'length': 10} +messages 2253 UINT unknown5 1 UINT priority # 0=normal, 1=high 23 USTRING callback 14 DATA unknown6 * LIST {'elementclass': recipient_record,'length': 9} +recipients * DATA unknown7 PACKET SMSINBOXMSGFRAGMENT: * LIST {'length': 181} +msg: # this size could be wrong 1 UINT byte "individual byte of message" PACKET sms_in: 4 UINT msg_index1 4 UINT msg_index2 # equal to the numerical part of the filename eg inbox002.dat 2 UINT unknown2 # set to 0 for simple message and 3 for binary, 9 for page 4 UINT unknown3 # set to 0 6 SMSDATE timesent 3 UINT unknown 1 UINT callback_length # 0 for no callback number 38 USTRING callback 1 UINT sender_length * LIST {'length': 38} +sender: 1 UINT byte "individual byte of senders phone number" 15 DATA unknown4 # set to zeros 4 LGCALDATE lg_time # time the message was sent 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 2 UINT unknown5 # zero 1 UINT read # 1 if message has been read, 0 otherwise 1 UINT locked # 1 if the message is locked, 0 otherwise 2 UINT unknown8 # zero 1 UINT priority # 1 if the message is high priority, 0 otherwise 5 DATA flags # message flags, read, priority, locked etc 21 USTRING {'encoding': PHONE_ENCODING} subject 1 UINT bin_header1 # 0 in simple message 1 if the message contains a binary header 1 UINT bin_header2 # 0 in simple message 9 if the message contains a binary header 2 UINT unknown6 # zeros 2 UINT multipartID # multi-part message ID, used for concatinated messages only 1 UINT bin_header3 # 0 in simple message 2 if the message contains a binary header 1 UINT unknown9 1 UINT num_msg_elements # max 10 elements (guessing on max here) * LIST {'length': 10} +msglengths: 1 UINT msglength "lengths of individual messages in septets" 10 UINT unknown10 * LIST {'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT} +msgs # 181 bytes per message, uncertain on this, no multipart message available # 20 messages, 7-bit ascii for simple text. for binary header # first byte is header length not including the length byte # rest depends on content of header, not known at this time. # text alway follows the header although the format it different # than a simple SMS * DATA unknown5 PACKET sms_quick_text: # the vx4400 has variable length NULL terminated strings null terminated in it's canned messages # file sms/mediacan000.dat, not sure about the max * LIST {} +msgs: * USTRING {'encoding': PHONE_ENCODING} msg # bitpim-1.0.7+dfsg1/src/phones/p_lglx570.p0000644001616600161660000001631311057641171016143 0ustar amuamu### BITPIM ### ### Copyright (C) 2008 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lglx570.p 4707 2008-09-04 02:05:45Z djpham $ %{ """Various descriptions of data specific to LG LX570 (Musiq)""" import re from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lgvx4400 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb MEMOLENGTH=33 NUMEMAILS=3 NUMPHONENUMBERS=5 NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=1 LASTSPEEDDIAL=99 SPEEDDIALINDEX=0 numbertypetab=( 'cell', 'home', 'office', 'fax', 'pager', 'none' ) PB_FILENAME='DB/SysDB/vCardSchema.vol' RT_MC_INDEX_FILENAME='setas/mcRingerIndex.map' RT_VM_INDEX_FILENAME='setas/voicememoRingerIndex.map' RT_MC_PATH='melodyComposer' RT_VM_PATH='VoiceDB/All/Memos' SMS_CANNED_MAX_ITEMS=40 SMS_CANNED_MAX_LENGTH=101 SMS_CANNED_FILENAME="sms/canned_msg.dat" SMS_PATTERNS={'Inbox': re.compile(r"^.*/inbox[0-9][0-9][0-9]\.dat$"), 'Sent': re.compile(r"^.*/outbox[0-9][0-9][0-9]\.dat$"), } %} # Media stuff PACKET indexentry: 1 UINT index 1 UINT mediatype 40 USTRING {'default': ""} +name PACKET indexfile: "Used for tracking wallpaper and ringtones" # A bit of a silly design again. Entries with an index of 0xffff are # 'blank'. Thus it is possible for numactiveitems and the actual # number of valid entries to be mismatched. 2 UINT numactiveitems * LIST {'elementclass': indexentry, 'createdefault': True} +items # phonebook stuff PACKET pbreadentryresponse: "Results of reading one entry" * pbheader header * pbentry entry PACKET pbupdateentryrequest: * pbheader {'command': 0x04, 'flag': 0x01} +header * pbentry entry PACKET pbappendentryrequest: * pbheader {'command': 0x03, 'flag': 0x01} +header * pbentry entry # All STRINGS have raiseonterminatedread as False since the phone does # occassionally leave out the terminator byte' # Note if you change the length of any of these fields, you also # need to modify com_lgvx4400 to give a different truncateat parameter # in the convertphonebooktophone method # This phone model does not contain any wallpaper data PACKET pbentry: 4 UINT serial1 2 UINT {'constant': 0x029E} +entrysize 4 UINT serial2 4 UINT entrynumber 73 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 2 UINT group 1 UINT { 'default': 0 } +dunno1 2 UINT ringtone # for built-in "single tone" only 2 UINT { 'default': 0 } +dunno2 * USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH} memo * LIST {'length': NUMEMAILS} +emails: 73 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} email 73 USTRING {'raiseonunterminatedread': False} url * LIST { 'length': NUMPHONENUMBERS } +speeddials: 1 UINT { 'default': 0xff } +speeddial * LIST {'length': NUMPHONENUMBERS} +numbertypes: 1 UINT numbertype * LIST {'length': NUMPHONENUMBERS} +numbers: 49 USTRING {'raiseonunterminatedread': False} number 2 UINT { 'default': 0 } +dunno3 P UINT { 'default': 0 } +wallpaper PACKET pbgroup: "A single group" 2 UINT header if self.valid: 2 UINT blocksize 9 DATA dunno2 2 UINT groupid 16 DATA dunno3 * USTRING { 'encoding': PHONE_ENCODING, 'sizeinbytes': self.namesize } name %{ def _getnamesize(self): # Return the length of the name, the size of data block must be on a # 4-byte word boundary _rem4=self.blocksize%4 if _rem4: return self.blocksize+4-_rem4-27 else: return self.blocksize-27 namesize=property(fget=_getnamesize) def _getvalid(self): return self.header!=0xffff valid=property(fget=_getvalid) %} PACKET pbgroups: "Phonebook groups" * LIST {'elementclass': pbgroup} +groups ### Text Memos ### PACKET textmemo: 1001 USTRING { 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } text PACKET textmemofile: 4 UINT itemcount * LIST { 'elementclass': textmemo } +items ### ### SMS ### # # There are 3 types of SMS records, The inbox, outbox and unsent (pending) # Unlike other records in the phone each message is stored in a separate file # All messages are in the 'sms' directory in the root of the phone # Inbox messages are in files called 'inbox000.dat', the number 000 varies for # each message, typically there are no gaps in the numbering, but gaps can appear # if a message is deleted. # Outbox and draft message are named 'outbox000.dat'. # Messages in the outbox get updated when the message is received by the recipient, # they contain a delivery flag and a delivery time for all the possible 10 recipients. # The pm225 stores SMS in plain text (unlike some other LG phones) PACKET recipient_record: 8 UINT unknown1 33 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 73 USTRING number 1 UINT status # 1 when sent, 2 when received 1 UINT unknown3 4 LGCALDATE time # sent if status=1, received when status=2 12 DATA unknown2 PACKET sms_out: 4 UINT index # starting from 1, unique 1 UINT locked # 1=locked 3 UINT unknown1 # zero 4 LGCALDATE timesent # time the message was sent 2 DATA dunno1 1 UINT saved # 0 for outbox, 1 for draft 5 DATA dunno2 1 UINT priority "0=normal, 1=urgent" 15 DATA dunno2 20 USTRING callback 160 USTRING {'encoding': PHONE_ENCODING} msg * LIST {'elementclass': recipient_record, 'length': 10} +recipients PACKET SMSINBOXMSGFRAGMENT: * LIST {'length': 181} +msg: # this size could be wrong 1 UINT byte "individual byte of message" PACKET sms_in: 4 UINT unknown1 # all zeros 4 UINT msg_index2 2 UINT unknown2 # set to 0 6 SMSDATE timesent 3 UINT unknown 1 UINT callback_length # 0 for no callback number 42 USTRING callback 1 UINT sender_length * LIST {'length': 38} +sender: 1 UINT byte "individual byte of senders phone number" 15 DATA unknown4 # set to zeros 4 LGCALDATE lg_time # time the message was sent 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 5 DATA dunno1 1 UINT read # 1 if message has been read, 0 otherwise (kind of a guess, not enough data to be sure) 1 UINT locked # 1 if the message is locked, 0 otherwise 7 DATA unknown5 # these are flags, not enough data to decode #1 UINT priority # 1 if the message is high priority, 0 otherwise 74 USTRING {'encoding': PHONE_ENCODING} subject 2 UINT msglength 1030 USTRING {'encoding': PHONE_ENCODING} msg PACKET sms_quick_text: 101 USTRING {'encoding': PHONE_ENCODING, 'default': ""} +msg # include terminating NULL PACKET sms_canned_file: 2 UINT { 'default': len(self.msgs) } +num_active * LIST {'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True, 'elementclass': sms_quick_text} +msgs bitpim-1.0.7+dfsg1/src/phones/com_motov710.py0000644001616600161660000010145210762160702017042 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_motov710.py 4600 2008-03-01 04:55:30Z djpham $ """Communicate with Motorola phones using AT commands""" # system modules import datetime import sha # BitPim modules import bpcalendar import common import commport import com_brew import com_moto_cdma import fileinfo import nameparser import prototypes import p_motov710 import helpids class Phone(com_moto_cdma.Phone): """ Talk to a Motorola V710 phone""" desc='Moto-V710' helpid=helpids.ID_PHONE_MOTOV710 protocolclass=p_motov710 serialsname='motov710' builtinringtones=( (0, ('Silent',)), (5, ('Vibe Dot', 'Vibe Dash', 'Vibe Dot Dot', 'Vibe Dot Dash', 'Vibe Pulse')), (11, ('Alert', 'Standard', 'Bells', 'Triads', 'Up and Down', 'Jitters', 'Upbeat')), (22, ('Guitar Strings', 'High Impact')), (30, ('Moonlit Haze', 'Nightlife', 'Wind Chime', 'Random', 'Bit & Bytes', 'Door Bell', 'Ding', 'One Moment', 'Provincial', 'Harmonics', 'Interlude', 'Snaggle', 'Cosmic', 'Gyroscope')), (49, ('Chimes high', 'Chimes low', 'Ding', 'TaDa', 'Notify', 'Drum', 'Claps', 'Fanfare', 'Chord high', 'Chord low')) ) def __init__(self, logtarget, commport): com_moto_cdma.Phone.__init__(self, logtarget, commport) self._group_count=None # fundamentals stuff-------------------------------------------------------- def _get_groups(self): if self._group_count is None: self._group_count=self.protocolclass.PB_TOTAL_GROUP try: _req=self.protocolclass.group_count_req() _res=self.sendATcommand(_req, self.protocolclass.group_count_resp) if len(_res)==1 and _res[0].countstring.startswith('(1-'): self._group_count=int(_res[0].countstring[3:-1]) self.log('Group Count: %d' % self._group_count) except: if __debug__: raise _req=self.protocolclass.read_group_req(end_index=self._group_count) _res=self.sendATcommand(_req, self.protocolclass.read_group_resp) res={} for e in _res: res[e.index]={ 'name': e.name, 'ringtone': e.ringtone } return res def _save_groups(self, fundamentals): """Save the Group(Category) data""" # get the current group _groups=fundamentals.get('groups', {}) # remember the assigned ringtone name _name2ringtone={} for _key,_entry in _groups.items(): _name2ringtone[_entry['name']]=_entry['ringtone'] # setting up the list of existing group names _keys=_groups.keys() _keys.sort() _group_list=[_groups[x]['name'] for x in _keys] # new group names as reported by phonebook _cats=fundamentals.get('categories', []) if 'General' not in _cats: # Make sure General is the 1st one in the list _cats.append('General') # build a new list of new group names _new_list=[x for x in _group_list if x in _cats] _new_list+=[x for x in _cats if x not in _group_list] _new_group={} for _idx,_entry in enumerate(_new_list): _new_group[_idx+1]={ 'name': _entry, 'ringtone': _name2ringtone.get(_entry, None) } _rt_name_index=fundamentals.get('ringtone-name-index', {}) # deleting existing group entries _req=self.protocolclass.read_group_req() _res=self.sendATcommand(_req, self.protocolclass.read_group_resp) _req=self.protocolclass.del_group_req() for e in _res: if e.index==1: # Group 'General': can't delete, add, or modify continue _req.index=e.index self.sendATcommand(_req, None) # and save the new ones _req=self.protocolclass.write_group_req() for _key,_entry in _new_group.items(): if _key==1: continue _req.index=_key _req.name=_entry['name'] _req.ringtone=_rt_name_index.get(_entry.get('ringtone', None), 255) self.sendATcommand(_req, None) fundamentals['groups']=_new_group def _get_ringtone_index(self): res={} # first the builtin ones for _l in self.builtinringtones: _idx=_l[0] for _e in _l[1]: res[_idx]={ 'name': _e, 'origin': 'builtin' } _idx+=1 # now the custome one _buf=prototypes.buffer(self.getfilecontents( self.protocolclass.RT_INDEX_FILE)) _idx_file=self.protocolclass.ringtone_index_file() _idx_file.readfrombuffer(_buf, logtitle='Read ringtone index file') for _entry in _idx_file.items: _filename=self.decode_utf16(_entry.name) res[_entry.index]={ 'name': common.basename(_filename), 'filename': _filename, 'type': _entry.ringtone_type, 'origin': 'ringers' } return res def _get_wallpaper_index(self): res={} _files=self.listfiles(self.protocolclass.WP_PATH).keys() _files.sort() _wp_path_len=len(self.protocolclass.WP_PATH)+1 for _index,_filename in enumerate(_files): _name=common.basename(_filename) if _name not in self.protocolclass.WP_EXCLUDED_FILES: res[_index]={ 'name': _name, 'filename': _filename, 'origin': 'images' } return res # phonebook stuff----------------------------------------------------------- def _populate_pb_misc(self, pb_entry, pb_sub_entry, key_name, entry, fundamentals): """Populate ringtone, wallpaper to a number, email, or mail list """ # any ringtones? _rt_index=fundamentals.get('ringtone-index', {}) _rt_name=_rt_index.get(entry.ringtone, {}).get('name', None) if _rt_name: pb_sub_entry['ringtone']=_rt_name # any wallpaper if entry.picture_name: pb_sub_entry['wallpaper']=common.basename(entry.picture_name) if entry.is_primary: # primary entry: insert it to the front pb_entry[key_name]=[pb_sub_entry]+pb_entry.get(key_name, []) else: # append it to the end pb_entry.setdefault(key_name, []).append(pb_sub_entry) def _populate_pb_number(self, pb_entry, entry, fundamentals): """extract the number into BitPim phonebook entry""" _number_type=self.protocolclass.NUMBER_TYPE_NAME.get(entry.number_type, None) _number={ 'number': entry.number, 'type': _number_type, 'speeddial': entry.index } self._populate_pb_misc(pb_entry, _number, 'numbers', entry, fundamentals) # and mark it fundamentals['sd_dict'][entry.index]=entry.number def _populate_pb_email(self, pb_entry, entry, fundamentals): """Extract the email component""" _email={ 'email': entry.number, 'speeddial': entry.index } self._populate_pb_misc(pb_entry, _email, 'emails', entry, fundamentals) # and mark it fundamentals['sd_dict'][entry.index]=entry.number def _populate_pb_maillist(self, pb_entry, entry, fundamentals): """Extract the mailing list component""" _num_list=entry.number.split(' ') for _idx,_entry in enumerate(_num_list): _num_list[_idx]=int(_entry) _maillist={ 'entry': _num_list, 'speeddial': entry.index } self._populate_pb_misc(pb_entry, _maillist, 'maillist', entry, fundamentals) # and mark it fundamentals['sd_dict'][entry.index]=entry.number def _populate_pb_entry(self, pb_entry, entry, fundamentals): """Populate a BitPim phonebook entry with one from the phone """ # extract the number, email, or mailing list _num_type=entry.number_type if _num_type in self.protocolclass.NUMBER_TYPE: self._populate_pb_number(pb_entry, entry, fundamentals) elif _num_type in self.protocolclass.EMAIL_TYPE: self._populate_pb_email(pb_entry, entry, fundamentals) # this is a mail list, which is not currently supported ## else: ## self._populate_pb_maillist(pb_entry, entry, fundamentals) def _build_pb_entry(self, entry, pb_book, fundamentals): """Build a BitPim phonebook entry based on phone data. """ # check of this entry belong to an existing name try: _idx=fundamentals['pb_list'].index(entry.name) except ValueError: _idx=None if _idx is None: # new name entry _idx=len(fundamentals['pb_list']) fundamentals['pb_list'].append(entry.name) _group=fundamentals.get('groups', {}).get(entry.group, None) pb_book[_idx]={ 'names': [{ 'full': entry.name }] } if _group.get('name', None): pb_book[_idx]['categories']=[{'category': _group['name'] }] self._populate_pb_entry(pb_book[_idx], entry, fundamentals) def _update_a_mail_list(self, entry, sd_dict): for _entry in entry['maillist']: _name_list=[] for m in _entry['entry']: if sd_dict.has_key(m): _name_list.append(sd_dict[m]) ## _entry['entry']=_name_list _entry['entry']='\x00\x00'.join(_name_list) def _update_mail_list(self, pb_book, fundamentals): """Translate the contents of each mail list from speed-dial into the corresponding names or numbers. """ _sd_dict=fundamentals.get('sd_dict', {}) for _key,_entry in pb_book.items(): if _entry.has_key('maillist'): self._update_a_mail_list(_entry, _sd_dict) def _del_pb_entry(self, entry_index): """Delete the phonebook entry index from the phone""" _req=self.protocolclass.del_pb_req() _req.index=entry_index try: self.sendATcommand(_req, None) except commport.ATError: self.log('Failed to delete contact index %d'%entry_index) except: self.log('Failed to delete contact index %d'%entry_index) if __debug__: raise def _get_group_code(self, entry, fundamentals): """Return the group index of the group. Return 1(General) if none found """ _grp_name=entry.get('categories', [{}])[0].get('category', None) if not _grp_name: return 1 for _key,_entry in fundamentals.get('groups', {}).items(): if _entry.get('name', None)==_grp_name: return _key return 1 def _get_ringtone_code(self, entry, fundamentals): """Return the ringtone code of this entry""" # check the global ringtone setting first _ringtone_name=fundamentals.get('phoneringtone', None) if not _ringtone_name: _ringtone_name=entry.get('ringtone', None) # and then individual number ringtone if not _ringtone_name: return 255 for _key,_entry in fundamentals.get('ringtone-index', {}).items(): if _entry['name']==_ringtone_name: return _key return 255 def _get_wallpaper_name(self, entry, fundamentals): """Return the full path name for the wallpaper""" # Check for global wallpaper setting first _wp_name=fundamentals.get('phonewallpaper', None) # then check for individual number ringtone if not _wp_name: _wp_name=entry.get('wallpaper', None) if not _wp_name: return '' return '/a/'+self.protocolclass.WP_PATH+'/'+_wp_name def _get_primary_code(self, fundamentals): if fundamentals['primary']: return 0 fundamentals['primary']=True return 1 def _build_pb_maillist(self, entry, fundamentals): """Translate the mail list from text name to indices""" _sd_list=fundamentals.get('sd-slots', []) _names_list=entry.get('entry', '').split('\x00\x00') _codes_list=[] for _name in _names_list: try: _codes_list.append('%d'%_sd_list.index(_name)) except ValueError: pass return ' '.join(_codes_list) def _set_pb_entry_misc(self, req, entry, fundamentals): """Set the ringtone, wallpaper, and primary parameters""" req.ringtone=self._get_ringtone_code(entry, fundamentals) req.is_primary=self._get_primary_code(fundamentals) req.picture_name=self._get_wallpaper_name(entry, fundamentals) def _write_pb_entry_numbers(self, entry, req, fundamentals): """Write all the numbers to the phone""" req.local_type=self.protocolclass.LOCAL_TYPE_LOCAL _cell1=False for _entry in entry.get('numbers', []): req.index=_entry['speeddial'] if req.index>self.protocolclass.PB_TOTAL_ENTRIES: # out of range continue req.number=_entry['number'] req.number_type=self.protocolclass.NUMBER_TYPE_CODE.get( _entry['type'], self.protocolclass.NUMBER_TYPE_WORK) if req.number_type==self.protocolclass.NUMBER_TYPE_MOBILE: if _cell1: # this is cell2 req.number_type=self.protocolclass.NUMBER_TYPE_MOBILE2 else: _cell1=True self._set_pb_entry_misc(req, _entry, fundamentals) self._del_pb_entry(req.index) self.sendATcommand(req, None) def _write_pb_entry_emails(self, entry, req, fundamentals): """Write all emails to the phone""" req.number_type=self.protocolclass.NUMBER_TYPE_EMAIL req.local_type=self.protocolclass.LOCAL_TYPE_UNKNOWN _email1=False for _entry in entry.get('emails', []): req.index=_entry['speeddial'] if req.index>self.protocolclass.PB_TOTAL_ENTRIES: continue req.number=_entry['email'] if _email1: # this is email2 req.number_type=self.protocolclass.NUMBER_TYPE_EMAIL2 else: _email1=True self._set_pb_entry_misc(req, _entry, fundamentals) self._del_pb_entry(req.index) self.sendATcommand(req, None) def _write_pb_entry_maillist(self, entry, req, fundamentals): """Write all the mail lists to the phone""" req.number_type=self.protocolclass.NUMBER_TYPE_MAILING_LIST req.local_type=self.protocolclass.LOCAL_TYPE_UNKNOWN for _entry in entry.get('maillist', []): req.index=_entry['speeddial'] if req.index>self.protcolclass.PB_TOTAL_ENTRIES: continue req.number=self._build_pb_maillist(_entry, fundamentals) self._set_pb_entry_misc(req, _entry, fundamentals) self._del_pb_entry(req.index) self.sendATcommand(req, None) def _write_pb_entry(self, entry, fundamentals): """Write an phonebook entry to the phone""" _req=self.protocolclass.write_pb_req() _req.name=nameparser.getfullname(entry['names'][0]) _req.group=self._get_group_code(entry, fundamentals) fundamentals['primary']=False fundamentals['phonewallpaper']=entry.get('wallpapers', [{}])[0].get('wallpaper', None) fundamentals['phoneringtone']=entry.get('ringtones', [{}])[0].get('ringtone', None) # first, write out the numbers self._write_pb_entry_numbers(entry, _req, fundamentals) # then email self._write_pb_entry_emails(entry, _req, fundamentals) # and mail list # self._write_pb_entry_maillist(entry, _req, fundamentals) del fundamentals['primary'], fundamentals['phonewallpaper'], fundamentals['phoneringtone'] def _write_pb_entries(self, fundamentals): """Write out the phonebook to the phone""" _pb_book=fundamentals.get('phonebook', {}) _total_entries=len(_pb_book) _cnt=0 for _key,_entry in _pb_book.items(): try: _name=nameparser.getfullname(_entry['names'][0]) except: _name='' _cnt+=1 self.progress(_cnt, _total_entries, 'Writing contact %d: %s'%(_cnt, _name)) self._write_pb_entry(_entry, fundamentals) # delete all unused slots for _index,_entry in enumerate(fundamentals.get('sd-slots', [])): if not _entry: self.progress(_index, self.protocolclass.PB_TOTAL_ENTRIES, 'Deleting contact slot %d'%_index) self._del_pb_entry(_index) # Calendar stuff------------------------------------------------------------ def _dow(self, ymd): """Return a bitmap dayofweek""" return 1<<(datetime.date(*ymd).isoweekday()%7) def _build_repeat_part(self, entry, calendar, fundamentals): """Build and return a repeat object of this entry""" _rep=None _repeat_type=entry.repeat_type if _repeat_type==self.protocolclass.CAL_REP_DAILY: _rep=bpcalendar.RepeatEntry() _rep.interval=1 elif _repeat_type==self.protocolclass.CAL_REP_WEEKLY: _rep=bpcalendar.RepeatEntry(bpcalendar.RepeatEntry.weekly) _rep.interval=1 elif _repeat_type==self.protocolclass.CAL_REP_MONTHLY: _rep=bpcalendar.RepeatEntry(bpcalendar.RepeatEntry.monthly) _rep.interval2=1 _rep.dow=0 elif _repeat_type==self.protocolclass.CAL_REP_MONTHLY_NTH: _rep=bpcalendar.RepeatEntry(bpcalendar.RepeatEntry.monthly) _rep.interval=_rep.get_nthweekday(entry.start_date) _rep.interval2=1 _rep.dow=self._dow(entry.start_date) elif _repeat_type==self.protocolclass.CAL_REP_YEARLY: _rep=bpcalendar.RepeatEntry(bpcalendar.RepeatEntry.yearly) return _rep def _build_regular_cal_entry(self, entry, calendar, fundamentals): """ Build a regular BitPim entry frm phone data""" _bp_entry=bpcalendar.CalendarEntry() _bp_entry.id=`entry.index` _bp_entry.desc_loc=entry.title _bp_entry.start=entry.start_date+entry.start_time _t0=datetime.datetime(*_bp_entry.start) _t1=_t0+datetime.timedelta(minutes=entry.duration) _bp_entry.end=(_t1.year, _t1.month, _t1.day, _t1.hour, _t1.minute) if entry.alarm_timed and entry.alarm_enabled: _t3=datetime.datetime(*(entry.alarm_date+entry.alarm_time)) if _t0>=_t3: _bp_entry.alarm=(_t0-_t3).seconds/60 # repeat _rep=self._build_repeat_part(entry, calendar, fundamentals) if _rep: # this is a recurrent event, adjust the end date _bp_entry.repeat=_rep _bp_entry.end=bpcalendar.CalendarEntry.no_end_date+_bp_entry.end[3:] calendar[_bp_entry.id]=_bp_entry def _process_exceptions(self, calendar): """Process all exceptions""" for _idx,_exc in calendar.get('exceptions', []): if not calendar.has_key(`_idx`): continue _rep=calendar[`_idx`].repeat if _rep: _date=calendar[`_idx`].start[:3] for _i in range(_exc): _date=_rep.next_date(_date) calendar[`_idx`].suppress_repeat_entry(*_date) def _build_cal_entry(self, entry, calendar, fundamentals): """Build a BitPim calendar object from phonebook data""" if hasattr(entry, 'title'): # this is a regular entry self._build_regular_cal_entry(entry, calendar, fundamentals) else: # this is an exception to a regular entry calendar['exceptions'].append((entry.index, entry.ex_event)) def _build_phone_repeat_entry(self, entry, calendar): """Build the repeat part of this phone entry""" _rep=calendar.repeat if _rep: #this is a repeat event if _rep.repeat_type==_rep.daily: entry.repeat_type=self.protocolclass.CAL_REP_DAILY elif _rep.repeat_type==_rep.weekly: entry.repeat_type=self.protocolclass.CAL_REP_WEEKLY elif _rep.repeat_type==_rep.monthly: if _rep.dow: entry.repeat_type=self.protocolclass.CAL_REP_MONTHLY_NTH else: entry.repeat_type=self.protocolclass.CAL_REP_MONTHLY else: entry.repeat_type=self.protocolclass.CAL_REP_YEARLY else: entry.repeat_type=self.protocolclass.CAL_REP_NONE def _build_phone_alarm_entry(self, entry, calendar): _alarm=calendar.alarm if _alarm is None or _alarm==-1: entry.alarm_timed=1 entry.alarm_enabled=0 entry.alarm_time=(0,0) entry.alarm_date=(2000,0,0) else: entry.alarm_timed=1 entry.alarm_enabled=1 _d1=datetime.datetime(*calendar.start)-datetime.timedelta(minutes=_alarm) entry.alarm_date=(_d1.year, _d1.month, _d1.day) entry.alarm_time=(_d1.hour, _d1.minute) def _build_phone_entry(self, entry, calendar): """Build a phone entry based on a BitPim calendar entry""" entry.title=calendar.desc_loc entry.start_time=calendar.start[3:] entry.start_date=calendar.start[:3] entry.duration=(datetime.datetime(*calendar.start[:3]+calendar.end[3:])- datetime.datetime(*calendar.start)).seconds/60 self._build_phone_repeat_entry(entry, calendar) self._build_phone_alarm_entry(entry, calendar) def _build_phone_exception_entry(self, entry, calendar, exceptions): """Build a phone exception entry based on a BitPim entry""" _rep=calendar.repeat _end_date=calendar.end[:3] _date=calendar.start[:3] _ex_date=exceptions.get()[:3] _cnt=0 while _date<=_end_date: if _date==_ex_date: entry.nth_event=_cnt return True _date=_rep.next_date(_date) _cnt+=1 return False def _write_calendar_entries(self, fundamentals): """Write the calendar entries to the phone""" _calendar=fundamentals.get('calendar', {}) _req=self.protocolclass.calendar_write_req() _req_ex=self.protocolclass.calendar_write_ex_req() _max_entry=self.protocolclass.CAL_MAX_ENTRY _total_entries=len(_calendar) _cal_cnt=0 for _,_cal in _calendar.items(): if _cal_cnt>_max_entry:\ # enough entries written break self._build_phone_entry(_req, _cal) _req.index=_cal_cnt self.progress(_cal_cnt, _total_entries, 'Writing event: %s'%_cal.description) self.sendATcommand(_req, None) if _cal.repeat: for _ex in _cal.repeat.suppressed[:self.protocolclass.CAL_TOTAL_ENTRY_EXCEPTIONS]: if self._build_phone_exception_entry(_req_ex, _cal, _ex): _req_ex.index=_cal_cnt self.sendATcommand(_req_ex, None) _cal_cnt+=1 # and delete the rest for _index in range(_cal_cnt, self.protocolclass.CAL_TOTAL_ENTRIES): self.progress(_index, _total_entries, 'Deleting event #%d'%_index) self.del_calendar_entry(_index) # Ringtones stuff---------------------------------------------------------- def _get_new_list(self, index_key, media_key, fundamentals): """Return a list of media being replaced""" _index=fundamentals.get(index_key, {}) _media=fundamentals.get(media_key, {}) _index_file_list=[_entry['name'] for _,_entry in _index.items() \ if _entry.has_key('filename')] _bp_file_list=[_entry['name'] for _,_entry in _media.items()] return [x for x in _bp_file_list if x in _index_file_list] def _item_from_index(self, name, item_key, index_dict): for _key,_entry in index_dict.items(): if _entry.get('name', None)==name: if item_key: # return a field return _entry.get(item_key, None) else: # return the key return _key def _replace_files(self, index_key, media_key, new_list, fundamentals): """Replace existing media files with new contents""" _index=fundamentals.get(index_key, {}) _media=fundamentals.get(media_key, {}) for _file in new_list: _data=self._item_from_index(_file, 'data', _media) if not _data: self.log('Failed to write file %s due to no data'%_file) continue _file_name=self._item_from_index(_file, 'filename', _index) if _file_name: # existing file, check if the same one _stat=self.statfile(_file_name) if _stat and _stat['size']!=len(_data): # and write out the data try: self.writefile(_file_name, _data) except: self.log('Failed to write file '+_file_name) if __debug__: raise def saveringtones(self, fundamentals, merge): """Save ringtones to the phone""" self.log('Writing ringtones to the phone') self.setmode(self.MODEPHONEBOOK) self.setmode(self.MODEBREW) try: _new_list=self._get_new_list('ringtone-index', 'ringtone', fundamentals) # replace files self._replace_files('ringtone-index', 'ringtone', _new_list, fundamentals) except: if __debug__: self.setmode(self.MODEMODEM) raise self.setmode(self.MODEMODEM) return fundamentals def savewallpapers(self, fundamentals, merge): """Save wallpapers to the phone""" self.log('Writing wallpapers to the phone') self.setmode(self.MODEPHONEBOOK) self.setmode(self.MODEBREW) try: _new_list=self._get_new_list('wallpaper-index', 'wallpapers', fundamentals) # replace files self._replace_files('wallpaper-index', 'wallpapers', _new_list, fundamentals) except: if __debug__: self.setmode(self.MODEMODEM) raise self.setmode(self.MODEMODEM) return fundamentals # Phone Detection routine @classmethod def detectphone(_, coms, likely_ports, res, _module, _log): for port in likely_ports: _model=res.get(port, {}).get('model', None) if _model==_module.Profile.phone_model: return port elif _model==_module.Profile.generic_phone_model: # this is a V710, try to get the actual model try: _comm=commport.CommConnection(_log, port) _comm.sendatcommand('+MODE=2') _comm.sendatcommand('') _s=_comm.sendatcommand('+GMM')[0] _comm.sendatcommand('+MODE=0') _comm.close() _model=_s.split(': ')[1].split(',')[-1].replace('"', '').split('=')[1] if _model==_module.Profile.common_model_name: _model=_module.Profile.phone_model res[port]['model']=_model if _model==_module.Profile.phone_model: return port except: _comm.close() if __debug__: raise #------------------------------------------------------------------------------ parentprofile=com_moto_cdma.Profile class Profile(parentprofile): serialsname=Phone.serialsname WALLPAPER_WIDTH=176 WALLPAPER_HEIGHT=220 MAX_WALLPAPER_BASENAME_LENGTH=37 WALLPAPER_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789()_ .-" WALLPAPER_CONVERT_FORMAT="jpg" # Motorola OEM USB Cable usbids=( ( 0x22B8, 0x2A22, 1), ( 0x22B8, 0x2A62, 1)) deviceclasses=("modem",) # use for auto-detection phone_manufacturer='Motorola' phone_model='V710 ' common_model_name='V710' generic_phone_model='Motorola CDMA v710 Phone' # all dumped in "images" imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) def GetImageOrigins(self): return self.imageorigins # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 176, 'height': 200, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", {'width': 176, 'height': 140, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "fullscreen", {'width': 176, 'height': 220, 'format': "JPEG"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets def __init__(self): parentprofile.__init__(self) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'read', None), # all calendar reading ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('ringtone', 'read', None), # all ringtone reading ('ringtone', 'write', 'OVERWRITE'), ('wallpaper', 'read', None), # all wallpaper reading ('wallpaper', 'write', 'OVERWRITE'), ('sms', 'read', None), # all SMS list reading DJP ) def convertphonebooktophone(self, helper, data): return data def QueryAudio(self, origin, currentextension, afi): # we don't modify any of these if afi.format in ("MIDI", "QCP", "PMD"): return currentextension, afi # examine mp3 if afi.format=="MP3": if afi.channels==1 and 8<=afi.bitrate<=64 and 16000<=afi.samplerate<=22050: return currentextension, afi # convert it return ("mp3", fileinfo.AudioFileInfo(afi, **{'format': 'MP3', 'channels': 1, 'bitrate': 48, 'samplerate': 44100})) field_color_data={ 'phonebook': { 'name': { 'first': 1, 'middle': 1, 'last': 1, 'full': 1, 'nickname': 0, 'details': 1 }, 'number': { # not sure what the limit on these numbers 'type': True, 'speeddial': True, 'number': True, 'details': True, 'ringtone': True, 'wallpaper': True }, 'email': True, 'email_details': { 'emailspeeddial': True, 'emailringtone': True, 'emailwallpaper': True }, 'address': { 'type': 0, 'company': 0, 'street': 0, 'street2': 0, 'city': 0, 'state': 0, 'postalcode': 0, 'country': 0, 'details': 0 }, 'url': 0, 'memo': 0, 'category': 1, 'wallpaper': 1, 'ringtone': 1, 'storage': 0, }, 'calendar': { 'description': True, 'location': True, 'allday': False, 'start': True, 'end': True, 'priority': False, 'alarm': True, 'vibrate': False, 'repeat': True, 'memo': False, 'category': False, 'wallpaper': False, 'ringtone': False, }, 'memo': { 'subject': False, 'date': False, 'secret': False, 'category': False, 'memo': False, }, 'todo': { 'summary': False, 'status': False, 'due_date': False, 'percent_complete': False, 'completion_date': False, 'private': False, 'priority': False, 'category': False, 'memo': False, }, } bitpim-1.0.7+dfsg1/src/phones/com_lgvx9800.py0000644001616600161660000006333210646567205016765 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgvx9800.py 4305 2007-07-16 04:05:25Z djpham $ """Communicate with the LG VX9800 cell phone """ # standard modules import re import time import cStringIO import sha # my modules import common import commport import copy import com_lgvx4400 import p_brew import p_lgvx9800 import com_lgvx8100 import com_brew import com_phone import com_lg import prototypes import bpcalendar import call_history import sms import memo import playlist import helpids class Phone(com_lgvx8100.Phone): "Talk to the LG VX9800 cell phone" desc="LG-VX9800" helpid=helpids.ID_PHONE_LGVX9800 protocolclass=p_lgvx9800 serialsname='lgvx9800' my_model='VX9800' builtinringtones= ('Low Beep Once', 'Low Beeps', 'Loud Beep Once', 'Loud Beeps', 'VZW Default Tone') + \ tuple(['Ringtone '+`n` for n in range(1,11)]) + \ ('No Ring',) ringtonelocations= ( # type index-file size-file directory-to-use lowest-index-to-use maximum-entries type-major icon index_offset ( 'ringers', 'dload/my_ringtone.dat', 'dload/my_ringtonesize.dat', 'brew/16452/lk/mr', 100, 150, 0x201, 1, 0), # the sound index file uses the same index as the ringers, bitpim does not support this (yet) ( 'sounds', 'dload/mysound.dat', 'dload/mysoundsize.dat', 'brew/16452/ms', 100, 150, 0x402, 0, 151), ) calendarlocation="sch/schedule.dat" calendarexceptionlocation="sch/schexception.dat" calenderrequiresreboot=0 memolocation="sch/memo.dat" builtinwallpapers = () # none wallpaperlocations= ( ( 'images', 'dload/image.dat', 'dload/imagesize.dat', 'brew/16452/mp', 100, 50, 0, 0, 0), ( 'video', 'dload/video.dat', None, 'brew/16452/mf', 1000, 50, 0x0304, 0, 0), ) # for removable media (miniSD cards) _rs_path='mmc1/' _rs_ringers_path=_rs_path+'ringers' _rs_images_path=_rs_path+'images' media_info={ 'ringers': { 'localpath': 'brew/16452/lk/mr', 'rspath': _rs_ringers_path, 'vtype': protocolclass.MEDIA_TYPE_RINGTONE, 'icon': protocolclass.MEDIA_RINGTONE_DEFAULT_ICON, 'index': 100, # starting index 'maxsize': 155, 'indexfile': 'dload/my_ringtone.dat', 'sizefile': 'dload/my_ringtonesize.dat', 'dunno': 0, 'date': False, }, 'sounds': { 'localpath': 'brew/16452/ms', 'rspath': None, 'vtype': protocolclass.MEDIA_TYPE_SOUND, 'icon': protocolclass.MEDIA_IMAGE_DEFAULT_ICON, 'index': 100, 'maxsize': 155, 'indexfile': 'dload/mysound.dat', 'sizefile': 'dload/mysoundsize.dat', 'dunno': 0, 'date': False }, 'images': { 'localpath': 'brew/16452/mp', 'rspath': _rs_images_path, 'vtype': protocolclass.MEDIA_TYPE_IMAGE, 'icon': protocolclass.MEDIA_IMAGE_DEFAULT_ICON, 'index': 100, 'maxsize': 155, 'indexfile': 'dload/image.dat', 'sizefile': 'dload/imagesize.dat', 'dunno': 0, 'date': False }, 'video': { 'localpath': 'brew/16452/mf', 'rspath': None, 'vtype': protocolclass.MEDIA_TYPE_VIDEO, 'icon': protocolclass.MEDIA_VIDEO_DEFAULT_ICON, 'index': 1000, 'maxsize': 155, 'indexfile': 'dload/video.dat', 'sizefile': 'dload/videosize.dat', 'dunno': 0, 'date': True }, } def __init__(self, logtarget, commport): com_lgvx8100.Phone.__init__(self, logtarget, commport) p_brew.PHONE_ENCODING=self.protocolclass.PHONE_ENCODING self.mode=self.MODENONE def get_esn(self, data=None): # return the ESN of this phone return self.get_brew_esn() def get_detect_data(self, res): com_lgvx8100.Phone.get_detect_data(self, res) res[self.esn_file_key]=self.get_esn() # Fundamentals: # - get_esn - same as LG VX-8300 # - getgroups - same as LG VX-8100 # - getwallpaperindices - LGNewIndexedMedia2 # - getrintoneindices - LGNewIndexedMedia2 # - DM Version - N/A # Media stuff--------------------------------------------------------------- def _is_rs_file(self, filename): return filename.startswith(self._rs_path) def getmedia(self, maps, results, key): origins={} # signal that we are using the new media storage that includes the origin and timestamp origins['new_media_version']=1 for type, indexfile, sizefile, directory, lowestindex, maxentries, typemajor, def_icon, idx_ofs in maps: media={} for item in self.getindex(indexfile): data=None timestamp=None try: stat_res=self.statfile(item.filename) if stat_res!=None: timestamp=stat_res['date'][0] if not self._is_rs_file(item.filename): data=self.getfilecontents(item.filename, True) except (com_brew.BrewNoSuchFileException,com_brew.BrewBadPathnameException,com_brew.BrewNameTooLongException): self.log("It was in the index, but not on the filesystem") except com_brew.BrewAccessDeniedException: # firmware wouldn't let us read this file, just mark it then self.log('Failed to read file: '+item.filename) data='' except: if __debug__: raise self.log('Failed to read file: '+item.filename) data='' if data!=None: media[common.basename(item.filename)]={ 'data': data, 'timestamp': timestamp} origins[type]=media results[key]=origins return results def _mark_files(self, local_files, rs_files, local_dir): # create empty local files as markers for remote files _empty_files=[common.basename(x) for x,_entry in local_files.items() \ if not _entry['size']] _remote_files=[common.basename(x) for x in rs_files] for _file in _remote_files: if _file not in _empty_files: # mark this one self.writefile(local_dir+'/'+_file, '') for _file in _empty_files: if _file not in _remote_files: # remote file no longer exists, del the marker self.rmfile(local_dir+'/'+_file) def _write_index_file(self, type): _info=self.media_info.get(type, None) if not _info: return _files={} _local_dir=_info['localpath'] _rs_dir=_info['rspath'] _vtype=_info['vtype'] _icon=_info['icon'] _index=_info['index'] _maxsize=_info['maxsize'] _dunno=_info['dunno'] indexfile=_info['indexfile'] sizefile=_info['sizefile'] _need_date=_info['date'] try: _files=self.listfiles(_local_dir) except (com_brew.BrewNoSuchDirectoryException, com_brew.BrewBadPathnameException): pass try: if _rs_dir: _rs_files=self.listfiles(_rs_dir) if type=='ringers': self._mark_files(_files, _rs_files, _local_dir) _files.update(_rs_files) except (com_brew.BrewNoSuchDirectoryException, com_brew.BrewBadPathnameException): # dir does not exist, no media files available pass # del all the markers (empty files) ringers if type=='ringers': _keys=_files.keys() for _key in _keys: if not _files[_key]['size']: del _files[_key] # dict of all indices _idx_keys={} for _i in xrange(_index, _index+_maxsize): _idx_keys[_i]=True # assign existing indices for _item in self.getindex(indexfile): if _files.has_key(_item.filename): _files[_item.filename]['index']=_item.index _idx_keys[_item.index]=False # available new indices _idx_keys_list=[k for k,x in _idx_keys.items() if x] _idx_keys_list.sort() _idx_cnt=0 # assign new indices _file_list=[x for x in _files if not _files[x].get('index', None)] _file_list.sort() if len(_file_list)>len(_idx_keys_list): _file_list=_file_list[:len(_idx_keys_list)] for i in _file_list: _files[i]['index']=_idx_keys_list[_idx_cnt] _idx_cnt+=1 # (index, file name) list for writing _res_list=[(x['index'],k) for k,x in _files.items() if x.get('index', None)] _res_list.sort() _res_list.reverse() # writing the index file ifile=self.protocolclass.indexfile() _file_size=0 for index,idx in _res_list: _fs_size=_files[idx]['size'] ie=self.protocolclass.indexentry() ie.index=index ie.type=_vtype ie.filename=idx if _need_date: # need to fill in the date value _stat=self.statfile(_files[idx]['name']) if _stat: ie.date=_stat['datevalue']-time.timezone ie.dunno=_dunno ie.icon=_icon ie.size=_fs_size ifile.items.append(ie) if not self._is_rs_file(idx): _file_size+=_fs_size buf=prototypes.buffer() ifile.writetobuffer(buf, logtitle="Index file "+indexfile) self.log("Writing index file "+indexfile+" for type "+type+" with "+`len(_res_list)`+" entries.") self.writefile(indexfile, buf.getvalue()) # writing the size file if sizefile: szfile=self.protocolclass.sizefile() szfile.size=_file_size buf=prototypes.buffer() szfile.writetobuffer(buf, logtitle="Updated size file for "+type) self.log("You are using a total of "+`_file_size`+" bytes for "+type) self.writefile(sizefile, buf.getvalue()) def savemedia(self, mediakey, mediaindexkey, maps, results, merge, reindexfunction): """Actually saves out the media @param mediakey: key of the media (eg 'wallpapers' or 'ringtones') @param mediaindexkey: index key (eg 'wallpaper-index') @param maps: list index files and locations @param results: results dict @param merge: are we merging or overwriting what is there? @param reindexfunction: the media is re-indexed at the end. this function is called to do it """ # take copies of the lists as we modify them wp=results[mediakey].copy() # the media we want to save wpi=results[mediaindexkey].copy() # what is already in the index files # remove builtins for k in wpi.keys(): if wpi[k].get('origin', "")=='builtin': del wpi[k] # build up list into init init={} for type,_,_,_,lowestindex,_,typemajor,_,_ in maps: init[type]={} for k in wpi.keys(): if wpi[k]['origin']==type: index=k name=wpi[k]['name'] fullname=wpi[k]['filename'] vtype=wpi[k]['vtype'] icon=wpi[k]['icon'] data=None del wpi[k] for w in wp.keys(): # does wp contain a reference to this same item? if wp[w]['name']==name and wp[w]['origin']==type: data=wp[w]['data'] del wp[w] if not merge and data is None: # delete the entry continue ## assert index>=lowestindex init[type][index]={'name': name, 'data': data, 'filename': fullname, 'vtype': vtype, 'icon': icon} # init now contains everything from wallpaper-index # wp contains items that we still need to add, and weren't in the existing index assert len(wpi)==0 print init.keys() # now look through wallpapers and see if anything was assigned a particular # origin for w in wp.keys(): o=wp[w].get("origin", "") if o is not None and len(o) and o in init: idx=-1 while idx in init[o]: idx-=1 init[o][idx]=wp[w] del wp[w] # wp will now consist of items that weren't assigned any particular place # so put them in the first available space for type,_,_,_,lowestindex,maxentries,typemajor,def_icon,_ in maps: # fill it up for w in wp.keys(): if len(init[type])>=maxentries: break idx=-1 while idx in init[type]: idx-=1 init[type][idx]=wp[w] del wp[w] # time to write the files out for type, indexfile, sizefile, directory, lowestindex, maxentries,typemajor,def_icon,_ in maps: # get the index file so we can work out what to delete names=[init[type][x]['name'] for x in init[type]] for item in self.getindex(indexfile): if common.basename(item.filename) not in names and \ not self._is_rs_file(item.filename): self.log(item.filename+" is being deleted") self.rmfile(item.filename) # fixup the indices fixups=[k for k in init[type].keys() if klength data=entry['data'] if data is None: assert merge continue # we are doing an add and don't have data for this existing entry if fstat is not None and len(data)==fstat['size']: self.log("Not writing "+filename+" as a file of the same name and length already exists.") else: self.writefile(filename, data) # write out index self._write_index_file(type) return reindexfunction(results) # Phonebook stuff----------------------------------------------------------- def savephonebook(self, data): "Saves out the phonebook" res=com_lgvx8100.Phone.savephonebook(self, data) # fix up the Wallpaper ID issue _wp_paths=self.protocolclass.wallpaper_id_file() _path_entry=self.protocolclass.wallpaper_id() # clear out all entries for i in range(self.protocolclass.NUMPHONEBOOKENTRIES): _wp_paths.items.append(_path_entry) # go through each entry and update the wallpaper path _buf=prototypes.buffer(self.getfilecontents( self.protocolclass.pb_file_name)) _pb_entries=self.protocolclass.pbfile() _pb_entries.readfrombuffer(_buf, logtitle="Read phonebook file "+self.protocolclass.pb_file_name) _wp_index=res.get('wallpaper-index', {}) for _entry in _pb_entries.items: try: if _entry.wallpaper==0 or _entry.wallpaper==0xffff: # no picture ID assigned continue _filename=_wp_index[_entry.wallpaper]['filename'] if _filename: _path_str=_filename+'\x00' _path=self.protocolclass.wallpaper_id() _path.path=_path_str _wp_paths.items[_entry.entrynumber]=_path except: if __debug__: raise _buf=prototypes.buffer() _wp_paths.writetobuffer(_buf, logtitle="Updated wallpaper ids "+self.protocolclass.wallpaper_id_file_name) self.writefile(self.protocolclass.wallpaper_id_file_name, _buf.getvalue()) # SMS Stuff----------------------------------------------------------------- def _readsms(self): res={} # go through the sms directory looking for messages for item in self.listfiles("sms").values(): folder=None for f,pat in self.protocolclass.SMS_PATTERNS.items(): if pat.match(item['name']): folder=f break if folder: buf=prototypes.buffer(self.getfilecontents(item['name'], True)) self.logdata("SMS message file " +item['name'], buf.getdata()) if folder=='Inbox': sf=self.protocolclass.sms_in() sf.readfrombuffer(buf, logtitle="SMS inbox item") entry=self._getinboxmessage(sf) res[entry.id]=entry elif folder=='Sent': sf=self.protocolclass.sms_out() sf.readfrombuffer(buf, logtitle="SMS sent item") entry=self._getoutboxmessage(sf) res[entry.id]=entry elif folder=='Saved': sf=self.protocolclass.sms_saved() sf.readfrombuffer(buf, logtitle="SMS saved item") if sf.inboxmsg: entry=self._getinboxmessage(sf.inbox) else: entry=self._getoutboxmessage(sf.outbox) entry.folder=entry.Folder_Saved res[entry.id]=entry return res # Playlist stuff------------------------------------------------------------ def _read_pl_list(self, file_name): _buf=prototypes.buffer(self.getfilecontents(file_name)) _pl_index=self.protocolclass.playlistfile() _pl_index.readfrombuffer(_buf, logtitle="Read playlist "+file_name) _songs=[x.name[self.protocolclass.mp3_dir_len:] for x in _pl_index.items] _entry=playlist.PlaylistEntry() if file_name.endswith(self.protocolclass.pl_extension): _entry.name=file_name[self.protocolclass.pl_dir_len:\ -self.protocolclass.pl_extension_len] else: _entry.name=file_name[self.protocolclass.pl_dir_len:] _entry.songs=_songs return _entry def getplaylist(self, result): # return the mp3 playlists if available # first, read the list of all mp3 songs _mp3_list=[] try: _files=self.listfiles(self.protocolclass.mp3_dir) _file_list=_files.keys() _file_list.sort() _mp3_list=[x[self.protocolclass.mp3_dir_len:] for x in _file_list ] except: if __debug__: raise result[playlist.masterlist_key]=_mp3_list # then read the playlist _pl_list=[] try: _files=self.listfiles(self.protocolclass.pl_dir) _file_list=_files.keys() _file_list.sort() for _f in _file_list: _pl_list.append(self._read_pl_list(_f)) except: if __debug__: raise result[playlist.playlist_key]=_pl_list return result def _write_playlists(self, pl, all_songs): for _pl_item in pl: try: _pl_file=self.protocolclass.playlistfile() for _song in _pl_item.songs: _song_name=self.protocolclass.mp3_dir+'/'+_song if all_songs.has_key(_song_name): _entry=self.protocolclass.playlistentry() _entry.name=_song_name _pl_file.items.append(_entry) if len(_pl_file.items): # don't write out an empty list _buf=prototypes.buffer() _file_name=self.protocolclass.pl_dir+'/'+_pl_item.name+\ self.protocolclass.pl_extension _pl_file.writetobuffer(_buf, logtitle="Updating playlist "+_file_name) self.writefile(_file_name, _buf.getvalue()) except: if __debug__: raise def saveplaylist(self, result, merge): # check to see if the pl_dir exist if not self.exists(self.protocolclass.pl_dir): self.log('Playlist dir does not exist. Bail') return result # get the list of available mp3 files _all_songs=self.listfiles(self.protocolclass.mp3_dir) # delete all existing playlists _files=self.listfiles(self.protocolclass.pl_dir) for _f in _files: try: self.rmfile(_f) except: if __debug__: raise # update the new playlists self._write_playlists(result.get(playlist.playlist_key, []), _all_songs) return result #------------------------------------------------------------------------------- parentprofile=com_lgvx8100.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='VX9800' WALLPAPER_WIDTH=320 WALLPAPER_HEIGHT=256 MAX_WALLPAPER_BASENAME_LENGTH=32 WALLPAPER_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789()_ .-" WALLPAPER_CONVERT_FORMAT="jpg" # the 9800 uses "W" for wait in the dialstring, it does not support "T" DIALSTRING_CHARS="[^0-9PW#*]" MAX_RINGTONE_BASENAME_LENGTH=32 RINGTONE_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789()_ .-" # there is an origin named 'aod' - no idea what it is for except maybe # 'all other downloads' # the vx8100 supports bluetooth for connectivity to the PC, define the "bluetooth_mgd_id" # to enable bluetooth discovery during phone detection # the bluetooth address starts with LG's the three-octet OUI, all LG phone # addresses start with this, it provides a way to identify LG bluetooth devices # during phone discovery # OUI=Organizationally Unique Identifier # see http://standards.ieee.org/regauth/oui/index.shtml for more info bluetooth_mfg_id="001256" # the 8100 doesn't have seperate origins - they are all dumped in "images" imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video")) def GetImageOrigins(self): return self.imageorigins ringtoneorigins=('ringers', 'sounds') excluded_ringtone_origins=('sounds') excluded_wallpaper_origins=('video') # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 320, 'height': 230, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", {'width': 320, 'height': 198, 'format': "JPEG"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets def __init__(self): parentprofile.__init__(self) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading ('memo', 'read', None), # all memo list reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('sms', 'write', 'OVERWRITE'), # all SMS list writing ('memo', 'write', 'OVERWRITE'), # all memo list writing ('playlist', 'read', 'OVERWRITE'), ('playlist', 'write', 'OVERWRITE'), ) bitpim-1.0.7+dfsg1/src/phones/p_lgvx8000.p0000644001616600161660000001405110442561507016227 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2005 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lgvx8000.p 3352 2006-06-10 15:20:39Z skyjunky $ %{ """Various descriptions of data specific to LG VX8000""" from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx7000 except as noted # below from p_lgvx7000 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb %} PACKET indexentry: 2 UINT index 2 UINT type # they shortened this from 84 chars in the vx7000 64 USTRING filename "includes full pathname" 4 UINT {'default': 0} +date "i think this is bitfield of the date" 4 UINT dunno PACKET indexfile: "Used for tracking wallpaper and ringtones" * LIST {'elementclass': indexentry, 'createdefault': True} +items ### ### SMS ### # # There are 3 types of SMS records, The inbox, outbox and unsent (pending) # Unlike other records in the phone each message is stored in a separate file # All messages are in the 'sms' directory in the root of the phone # Inbox messages are in files called 'inbox000.dat', the number 000 varies for # each message, typically there are no gaps in the numbering, but gaps can appear # if a message is deleted. # Outbox message are named 'outbox000.dat', unsent messages are named 'sf00.dat', # only two digit file name that suggests a max of 100 message for this type. # Messages in the outbox get updated when the message is received by the recipient, # they contain a delivery flag and a delivery time for all the possible 10 recipients. # The vx8100 supports SMS contatination, this allows you to send text messages that are # longer than 160 characters. The format is different for these type of messages, but # it is supported by this implementation. # The vx8100 also allows you to put small graphics, sounds and animations in a message. # This implementation does not support these, if they are contained in a message they # will be ignored and just the text will be shown when you view the message in bitpim. # The text in the the messages is stored in 7-bit characters, so they have # to be unpacked, in concatinated messages and messages with embeded graphics etc. the # format uses the GSM 03.38 specified format, a good example of this can be found at # "http://www.dreamfabric.com/sms/hello.html". # For simple messages less than 161 characters with no graphics the format is simpler, # the 7-bit characters are just packed into memory in the order they appear in the # message. PACKET msg_record: # the first few fields in this packet have something to do with the type of SMS # message contained. EMS and concatinated text are coded differently than a # simple text message 1 UINT binary # 0=simple text, 1=binary/concatinated 1 UINT unknown3 # 0=simple text, 1=binary/concatinated 1 UINT unknown4 # 0 1 UINT unknown6 # 2=simple text, 9=binary/concatinated 1 UINT length * LIST {'length': 220} +msg: 1 UINT byte "individual byte of message" PACKET recipient_record: 33 DATA unknown1 # contains recipient name from phonebook on this phone 49 USTRING number 1 UINT status # 1 when sent, 5 when received 4 LGCALDATE timesent 4 LGCALDATE timereceived 1 UINT unknown2 # 0 when not received, set to 1 when received 40 DATA unknown3 PACKET sms_saved: 4 UINT outboxmsg 4 UNKNOWN pad if self.outboxmsg: * sms_out outbox if not self.outboxmsg: * sms_in inbox PACKET sms_out: 4 UINT index # starting from 1, unique 1 UINT locked # 1=locked 1 UNKNOWN unknown2 4 LGCALDATE timesent # time the message was sent 6 UNKNOWN unknown2 21 USTRING subject 1 UNKNOWN unknown4 2 UINT num_msg_elements # up to 10 * LIST {'elementclass': msg_record, 'length': 7} +messages 14 UNKNOWN unknown1 1 UINT priority # 0=normal, 1=high 1 UNKNOWN unknown5 35 USTRING callback * LIST {'elementclass': recipient_record,'length': 9} +recipients * UNKNOWN pad PACKET SMSINBOXMSGFRAGMENT: * LIST {'length': 181} +msg: # this size could be wrong 1 UINT byte "individual byte of message" PACKET sms_in: 10 UNKNOWN unknown1 6 SMSDATE timesent 3 UINT unknown2 1 UINT callback_length # 0 for no callback number 38 USTRING callback 1 UINT sender_length * LIST {'length': 38} +sender: 1 UINT byte "individual byte of senders phone number" 12 DATA unknown3 # set to zeros 4 LGCALDATE lg_time # time the message was sent 3 UNKNOWN unknown4 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 4 UINT unknown5 # zero 1 UINT read # 1 if message has been read, 0 otherwise 1 UINT locked # 1 if the message is locked, 0 otherwise 8 UINT unknown6 # zero 1 UINT priority # 1 if the message is high priority, 0 otherwise 21 USTRING subject 1 UINT bin_header1 # 0 in simple message 1 if the message contains a binary header 1 UINT bin_header2 # 0 in simple message 9 if the message contains a binary header 4 UINT unknown7 # zeros 2 UINT multipartID # multi-part message ID, used for concatinated messages only 1 UINT bin_header3 # 0 in simple message 2 if the message contains a binary header 1 UINT num_msg_elements # max 10 elements (guessing on max here) * LIST {'length': 10} +msglengths: 1 UINT msglength "lengths of individual messages in septets" 10 UNKNOWN unknown8 * LIST {'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT} +msgs # 181 bytes per message, uncertain on this, no multipart message available # 20 messages, 7-bit ascii for simple text. for binary header # first byte is header length not including the length byte # rest depends on content of header, not known at this time. # text alway follows the header although the format it different # than a simple SMS * UNKNOWN unknown9 bitpim-1.0.7+dfsg1/src/phones/p_lgvx8100.p0000644001616600161660000002572210454051620016230 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2005 Roger Binns ### Copyright (C) 2005 Simon Capper ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lgvx8100.p 3461 2006-07-09 00:53:36Z skyjunky $ %{ """Various descriptions of data specific to LG VX8000""" from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx7000 except as noted # below from p_lgvx7000 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb # vx8100 uses a type based index for speed dials instead of positional like the vx4400 SPEEDDIALINDEX=1 MAXCALENDARDESCRIPTION=32 MAX_PHONEBOOK_GROUPS=30 CALENDAR_HAS_SEPARATE_END_TIME_AND_DATE=0 SMS_CANNED_MAX_ITEMS=18 SMS_CANNED_MAX_LENGTH=101 BREW_FILE_SYSTEM=2 # Media type MEDIA_TYPE_RINGTONE=0x0201 MEDIA_TYPE_IMAGE=0x0100 MEDIA_TYPE_SOUND=0x0402 MEDIA_TYPE_SDIMAGE=0x0008 MEDIA_TYPE_SDSOUND=0x000C MEDIA_TYPE_VIDEO=0x0304 MEDIA_RINGTONE_DEFAULT_ICON=1 MEDIA_IMAGE_DEFAULT_ICON=0 MEDIA_VIDEO_DEFAULT_ICON=0 PHONE_ENCODING='iso8859_1' # need to call stat to get the file time/data broken_filelist_date=True %} PACKET indexentry: 2 UINT index 2 UINT type 60 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False } filename "includes full pathname" 4 UINT {'default':0} +icon 4 UINT {'default': 0} +date "i think this is bitfield of the date" 4 UINT dunno 4 UINT {'default': 0} +size "size of the file, can be set to zero" PACKET indexfile: "Used for tracking wallpaper and ringtones" * LIST {'elementclass': indexentry, 'createdefault': True} +items PACKET pbgroup: "A single group" 23 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } name PACKET pbgroups: "Phonebook groups" * LIST {'elementclass': pbgroup} +groups ### ### The calendar ### # # The calendar consists of one file listing events and an exception # file that lists exceptions. These exceptions suppress a particular # instance of a repeated event. For example, if you setup something # to happen monthly, but changed the 1st february event, then the # schedule will contain the repeating event, and the 1st feb one, # and the suppresions/exceptions file will point to the repeating # event and suppress the 1st feb. # The phone uses the position within the file to give an event an id PACKET scheduleexception: 4 UINT pos "Refers to event id (position in schedule file) that this suppresses" 1 UINT day 1 UINT month 2 UINT year PACKET scheduleexceptionfile: * LIST {'elementclass': scheduleexception} +items PACKET scheduleevent: 4 UINT pos "position within file, used as an event id" 33 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } description 4 LGCALDATE start 4 LGCALDATE end 4 LGCALREPEAT repeat # complicated bit mapped field 1 UINT alarmindex_vibrate #LSBit of this set vibrate ON(0)/OFF(1), the 7 MSBits are the alarm index #the alarmindex is the index into the amount of time in advance of the #event to notify the user. It is directly related to the alarmminutes #and alarmhours below, valid values are # 8=2days, 7=1day, 6=2hours, 5=1hour, 4=15mins, 3=10mins, 2=5mins, 1=0mins, 0=NoAlarm 1 UINT ringtone 1 UINT unknown1 1 UINT alarmminutes "a value of 0xFF indicates not set" 1 UINT alarmhours "a value of 0xFF indicates not set" 1 UINT unknown2 PACKET schedulefile: 2 UINT numactiveitems * LIST {'elementclass': scheduleevent} +events PACKET call: 4 GPSDATE GPStime #no. of seconds since 0h 1-6-80, based off local time. 4 UINT unknown2 # different for each call 4 UINT duration #seconds, not certain about length of this field 49 USTRING {'raiseonunterminatedread': False} number 36 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 2 UINT numberlength # length of phone number 1 UINT pbnumbertype # 1=cell, 2=home, 3=office, 4=cell2, 5=fax, 6=vmail, 0xFF=not in phone book 3 UINT unknown2 # always seems to be 0 2 UINT pbentrynum #entry number in phonebook PACKET callhistory: 4 UINT numcalls 1 UINT unknown1 * LIST {'elementclass': call} +calls ### ### SMS ### # # There are 3 types of SMS records, The inbox, outbox and unsent (pending) # Unlike other records in the phone each message is stored in a separate file # All messages are in the 'sms' directory in the root of the phone # Inbox messages are in files called 'inbox000.dat', the number 000 varies for # each message, typically there are no gaps in the numbering, but gaps can appear # if a message is deleted. # Outbox message are named 'outbox000.dat', unsent messages are named 'sf00.dat', # only two digit file name that suggests a max of 100 message for this type. # Messages in the outbox get updated when the message is received by the recipient, # they contain a delivery flag and a delivery time for all the possible 10 recipients. # The vx8100 supports SMS contatination, this allows you to send text messages that are # longer than 160 characters. The format is different for these type of messages, but # it is supported by this implementation. # The vx8100 also allows you to put small graphics, sounds and animations in a message. # This implementation does not support these, if they are contained in a message they # will be ignored and just the text will be shown when you view the message in bitpim. # The text in the the messages is stored in 7-bit characters, so they have # to be unpacked, in concatinated messages and messages with embeded graphics etc. the # format uses the GSM 03.38 specified format, a good example of this can be found at # "http://www.dreamfabric.com/sms/hello.html". # For simple messages less than 161 characters with no graphics the format is simpler, # the 7-bit characters are just packed into memory in the order they appear in the # message. PACKET msg_record: # the first few fields in this packet have something to do with the type of SMS # message contained. EMS and concatinated text are coded differently than a # simple text message 1 UINT unknown1 # 0 1 UINT binary # 0=simple text, 1=binary/concatinated 1 UINT unknown3 # 0=simple text, 1=binary/concatinated 1 UINT unknown4 # 0 1 UINT unknown6 # 2=simple text, 9=binary/concatinated 1 UINT length * LIST {'length': 219} +msg: 1 UINT byte "individual byte of message" PACKET recipient_record: 45 DATA unknown1 49 USTRING number 1 UINT status # 1 when sent, 5 when received 4 LGCALDATE timesent 4 LGCALDATE timereceived 1 UINT unknown2 # 0 when not received, set to 1 when received 40 DATA unknown3 PACKET sms_saved: 4 UINT outboxmsg 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone if self.outboxmsg: * sms_out outbox if not self.outboxmsg: * sms_in inbox PACKET sms_out: 4 UINT index # starting from 1, unique 1 UINT unknown1 # zero 1 UINT locked # zero 4 LGCALDATE timesent # time the message was sent 2 UINT unknown2 # zero 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 21 USTRING {'encoding': PHONE_ENCODING} subject 1 UINT unknown4 1 UINT num_msg_elements # up to 7 * LIST {'elementclass': msg_record, 'length': 7} +messages 1 UINT unknown5 1 UINT priority # 0=normal, 1=high 12 DATA unknown7 3 DATA unknown8 # set to 01,00,01 23 USTRING callback * LIST {'elementclass': recipient_record,'length': 10} +recipients PACKET SMSINBOXMSGFRAGMENT: * LIST {'length': 181} +msg: 1 UINT byte "individual byte of message" PACKET sms_in: 4 UINT msg_index1 4 UINT msg_index2 # equal to the numerical part of the filename eg inbox002.dat 2 UINT unknown2 # set to 0 for simple message and 3 for binary 6 SMSDATE timesent 3 UINT unknown 1 UINT callback_length 38 USTRING callback 1 UINT sender_length * LIST {'length': 38} +sender: 1 UINT byte "individual byte of senders phone number" 12 DATA unknown3 # set to zeros 4 LGCALDATE lg_time # time the message was sent 3 UINT unknown4 # set to zeros 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 4 UINT unknown5 # zero 1 UINT read # 1 if message has been read, 0 otherwise 1 UINT locked # 1 if the message is locked, 0 otherwise 2 UINT unknown8 # zero 1 UINT priority # 1 if the message is high priority, 0 otherwise 6 DATA unknown11 # zero 21 USTRING {'encoding': PHONE_ENCODING} subject 1 UINT bin_header1 # 0 in simple message 1 if the message contains a binary header 1 UINT bin_header2 # 0 in simple message 9 if the message contains a binary header 2 UINT unknown6 # zeros 2 UINT multipartID # multi-part message ID, used for concatinated messages only 2 UINT unknown14 1 UINT bin_header3 # 0 in simple message 2 if the message contains a binary header 1 UINT num_msg_elements # max 20 elements (guessing on max here) * LIST {'length': 20} +msglengths: 1 UINT msglength "lengths of individual messages in septets" * LIST {'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT} +msgs # 181 bytes per message, # 20 messages, 7-bit ascii for simple text. for binary header # first byte is header length not including the length byte # rest depends on content of header, not known at this time. # text alway follows the header although the format it different # than a simple SMS 60 DATA unknown12 33 USTRING {'encoding': PHONE_ENCODING} senders_name 169 DATA unknown9 # ?? inlcudes senders phone number in ascii PACKET sms_quick_text: * LIST {'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True} +msgs: 101 USTRING {'encoding': PHONE_ENCODING, 'default': ""} +msg # include terminating NULL # Text Memos. LG memo support is weak, it only supports the raw text and none of # the features that other phones support, when you run bitpim you see loads of # options that do not work in the vx8100 on the memo page PACKET textmemo: 151 USTRING { 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } text 4 LGCALDATE memotime # time the memo was writen PACKET textmemofile: 4 UINT itemcount * LIST { 'elementclass': textmemo } +items PACKET firmwareresponse: 1 UINT command 11 USTRING {'terminator': None} date1 8 USTRING {'terminator': None} time1 11 USTRING {'terminator': None} date2 8 USTRING {'terminator': None} time2 8 USTRING {'terminator': None} firmware bitpim-1.0.7+dfsg1/src/phones/p_lgvx8300.p0000644001616600161660000002734710507114324016237 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2006 Roger Binns ### Copyright (C) 2005-2006 Simon Capper ### Copyright (C) 2006 Michael Cohen ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### %{ """Various descriptions of data specific to LG VX8300""" from common import PhoneBookBusyException from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx8100 except as noted # below from p_lgvx8100 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb BREW_FILE_SYSTEM=0 PHONE_ENCODING='iso-8859-1' NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=500 MAXCALENDARDESCRIPTION=32 CALENDAR_HAS_SEPARATE_END_TIME_AND_DATE=1 NUMEMAILS=2 NUMPHONENUMBERS=5 # need to call stat to get the file time/data broken_filelist_date=True %} PACKET indexentry: 256 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } filename "full pathname" 4 UINT size 4 UINT {'default': 0} +date 4 UINT type PACKET indexfile: "Used for tracking wallpaper and ringtones" * LIST {'elementclass': indexentry, 'createdefault': True} +items # All STRINGS have raiseonterminatedread as False since the phone does # occassionally leave out the terminator byte # Note if you change the length of any of these fields, you also # need to modify com_lgvx7000 to give a different truncateat parameter # in the convertphonebooktophone method PACKET pbentry: 4 UINT serial1 2 UINT {'constant': 0x181, 'constantexception': PhoneBookBusyException} +entrysize 4 UINT serial2 2 UINT entrynumber 23 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 2 UINT group * LIST {'length': NUMEMAILS} +emails: 49 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} email 2 UINT {'default': 0xFFFF} +ringtone "ringtone index for a call" 2 UINT {'default': 0xFFFF} +msgringtone "ringtone index for a text message" 2 UINT {'default': 0} +wallpaper * LIST {'length': NUMPHONENUMBERS} +numbertypes: 1 UINT numbertype * LIST {'length': NUMPHONENUMBERS} +numbers: 49 USTRING {'raiseonunterminatedread': False} number * UNKNOWN +unknown PACKET pbreadentryresponse: "Results of reading one entry" * pbheader header * pbentry entry PACKET pbupdateentryrequest: * pbheader {'command': 0x04, 'flag': 0x01} +header * pbentry entry PACKET pbappendentryrequest: * pbheader {'command': 0x03, 'flag': 0x01} +header * pbentry entry ### ### The calendar ### # # The calendar consists of one file listing events and an exception # file that lists exceptions. These exceptions suppress a particular # instance of a repeated event. For example, if you setup something # to happen monthly, but changed the 1st february event, then the # schedule will contain the repeating event, and the 1st feb one, # and the suppresions/exceptions file will point to the repeating # event and suppress the 1st feb. # The phone uses the position within the file to give an event an id PACKET scheduleexception: 4 UINT pos "Refers to event id (position in schedule file) that this suppresses" 1 UINT day 1 UINT month 2 UINT year PACKET scheduleexceptionfile: * LIST {'elementclass': scheduleexception} +items # 314 bytes per record, maybe they plan to add a memo field at some point?? PACKET scheduleevent: 4 UINT pos "position within file, used as an event id" 33 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } description 4 LGCALDATE start 4 LGCALDATE end_time 4 LGCALDATE end_date 4 LGCALREPEAT repeat # complicated bit mapped field 1 UINT alarmindex_vibrate #LSBit of this set vibrate ON(0)/OFF(1), the 7 MSBits are the alarm index #the alarmindex is the index into the amount of time in advance of the #event to notify the user. It is directly related to the alarmminutes #and alarmhours below, valid values are # 8=2days, 7=1day, 6=2hours, 5=1hour, 4=15mins, 3=10mins, 2=5mins, 1=0mins, 0=NoAlarm 1 UINT ringtone 1 UINT { 'default': 0 } +unknown1 1 UINT alarmminutes "a value of 0xFF indicates not set" 1 UINT alarmhours "a value of 0xFF indicates not set" 256 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' } +ringpath # MIC If ringtone = 0x64 (decimal 100), this field is used to specify # the full path of the ringer, either on the phone or on the microSD card PACKET schedulefile: 2 UINT numactiveitems * LIST {'elementclass': scheduleevent} +events PACKET call: 4 GPSDATE GPStime #no. of seconds since 0h 1-6-80, based off local time. 4 UINT unknown2 # different for each call 4 UINT duration #seconds, not certain about length of this field 49 USTRING {'raiseonunterminatedread': False} number 36 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 1 UINT numberlength # length of phone number 1 UINT pbnumbertype # 1=cell, 2=home, 3=office, 4=cell2, 5=fax, 6=vmail, 0xFF=not in phone book 5 UINT unknown2 # 2 UINT pbentrynum #entry number in phonebook PACKET callhistory: 4 UINT numcalls 1 UINT unknown1 * LIST {'elementclass': call} +calls ### ### SMS ### # # There are 3 types of SMS records, The inbox, outbox and unsent (pending) # Unlike other records in the phone each message is stored in a separate file # All messages are in the 'sms' directory in the root of the phone # Inbox messages are in files called 'inbox000.dat', the number 000 varies for # each message, typically there are no gaps in the numbering, but gaps can appear # if a message is deleted. # Outbox message are named 'outbox000.dat', unsent messages are named 'sf00.dat', # only two digit file name that suggests a max of 100 message for this type. # Messages in the outbox get updated when the message is received by the recipient, # they contain a delivery flag and a delivery time for all the possible 10 recipients. # The vx8100 supports SMS contatination, this allows you to send text messages that are # longer than 160 characters. The format is different for these type of messages, but # it is supported by this implementation. # The vx8100 also allows you to put small graphics, sounds and animations in a message. # This implementation does not support these, if they are contained in a message they # will be ignored and just the text will be shown when you view the message in bitpim. # The text in the the messages is stored in 7-bit characters, so they have # to be unpacked, in concatinated messages and messages with embeded graphics etc. the # format uses the GSM 03.38 specified format, a good example of this can be found at # "http://www.dreamfabric.com/sms/hello.html". # For simple messages less than 161 characters with no graphics the format is simpler, # the 7-bit characters are just packed into memory in the order they appear in the # message. PACKET msg_record: # the first few fields in this packet have something to do with the type of SMS # message contained. EMS and concatinated text are coded differently than a # simple text message 1 UINT unknown1 # 0 1 UINT binary # 0=simple text, 1=binary/concatinated 1 UINT unknown3 # 0=simple text, 1=binary/concatinated 1 UINT unknown4 # 0 1 UINT unknown6 # 2=simple text, 9=binary/concatinated 1 UINT length * LIST {'length': 219} +msg: 1 UINT byte "individual byte of message" PACKET recipient_record: 34 DATA unknown1 # contains recipient name from phonebook on this phone 49 USTRING number 1 UINT status # 1 when sent, 5 when received 4 LGCALDATE timesent 4 LGCALDATE timereceived 1 UINT unknown2 # 0 when not received, set to 1 when received 53 DATA unknown3 PACKET sms_saved: 4 UINT outboxmsg 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone if self.outboxmsg: * sms_out outbox if not self.outboxmsg: * sms_in inbox PACKET sms_out: 4 UINT index # starting from 1, unique 1 UINT unknown1 # zero 1 UINT locked # 1=locked 4 LGCALDATE timesent # time the message was sent 2 UINT unknown2 # zero 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 24 USTRING {'encoding': PHONE_ENCODING} subject 1 UINT num_msg_elements # up to 7 * LIST {'elementclass': msg_record, 'length': 7} +messages 15 UNKNOWN unknown1 1 UINT priority # 0=normal, 1=high 1 UNKNOWN unknown5 35 USTRING callback * LIST {'elementclass': recipient_record,'length': 9} +recipients * UNKNOWN pad PACKET SMSINBOXMSGFRAGMENT: * LIST {'length': 181} +msg: # this size could be wrong 1 UINT byte "individual byte of message" PACKET sms_in: 7 UNKNOWN unknown1 4 LGCALDATE lg_time # time the message was sent 1 UINT unknown2 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 6 SMSDATE timesent 1 UINT callback_length # 0 for no callback number 39 USTRING callback 1 UINT sender_length * LIST {'length': 38} +sender: 1 UINT byte "individual byte of senders phone number" 12 DATA unknown3 # set to zeros 6 UNKNOWN unknown4 1 UINT read # 1 if message has been read, 0 otherwise 1 UINT locked # 1 if the message is locked, 0 otherwise 1 UINT priority # 1 if the message is high priority, 0 otherwise 24 USTRING {'encoding': PHONE_ENCODING} subject 1 UINT bin_header1 # 0 in simple message 1 if the message contains a binary header 1 UINT bin_header2 # 0 in simple message 9 if the message contains a binary header 1 UINT unknown7 # zeros 2 UINT multipartID # multi-part message ID, used for concatinated messages only 1 UINT bin_header3 # 0 in simple message 2 if the message contains a binary header 5 UINT unknown8 # zeros 1 UINT num_msg_elements # max 10 elements (guessing on max here) * LIST {'length': 10} +msglengths: 1 UINT msglength "lengths of individual messages in septets" 10 UNKNOWN unknown9 * LIST {'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT} +msgs # 181 bytes per message, uncertain on this, no multipart message available # 20 messages, 7-bit ascii for simple text. for binary header # first byte is header length not including the length byte # rest depends on content of header, not known at this time. # text alway follows the header although the format it different # than a simple SMS * UNKNOWN unknown10 PACKET sms_quick_text: * LIST { 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True} +msgs: 101 USTRING {'encoding': PHONE_ENCODING, 'default': ""} +msg # include terminating NULL # Text Memos. LG memo support is weak, it only supports the raw text and none of # the features that other phones support, when you run bitpim you see loads of # options that do not work in the vx8100 on the memo page PACKET textmemo: 152 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } text 4 UINT {'default' : 0x1000000} +dunno 4 LGCALDATE memotime # time the memo was writen LG time PACKET textmemofile: 4 UINT itemcount * LIST { 'elementclass': textmemo } +items bitpim-1.0.7+dfsg1/src/phones/p_lgvx8350.p0000644001616600161660000000066211041434775016244 0ustar amuamu### BITPIM ### ### Copyright (C) 2007 Nathan Hjelm ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lgvx8350.p 4639 2008-07-22 19:50:21Z djpham $ %{ """Various descriptions of data specific to LG VX8350""" from p_lgvx8550 import * # same as the VX-8550 except as noted below %} bitpim-1.0.7+dfsg1/src/phones/p_lgvx8700.py0000644001616600161660000013442511045365054016436 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx9900 except as noted below from p_lgvx9900 import * from p_lgvx8500 import t9udbfile # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb BREW_FILE_SYSTEM = 2 BREW_READ_SIZE = 0x400 BREW_WRITE_SIZE = 0x1A00 MAX_PHONEBOOK_GROUPS=30 # Phonebook stuff RTPathIndexFile='pim/pbRingIdSetAsPath.dat' WPPathIndexFile='pim/pbPictureIdSetAsPath.dat' pb_file_name='pim/pbentry.dat' pb_group_filename='pim/pbgroup.dat' T9USERDBFILENAME='t9udb/t9udb_eng.dat' class pbgroup(BaseProtogenClass): __fields=['name', 'groupid', 'user_added'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroup,self).__init__(**dict) if self.__class__ is pbgroup: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroup,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroup,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) self.__field_name.writetobuffer(buf) try: self.__field_groupid except: self.__field_groupid=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_groupid.writetobuffer(buf) try: self.__field_user_added except: self.__field_user_added=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_user_added.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_name=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) self.__field_name.readfrombuffer(buf) self.__field_groupid=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_groupid.readfrombuffer(buf) self.__field_user_added=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_user_added.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_groupid(self): try: self.__field_groupid except: self.__field_groupid=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_groupid.getvalue() def __setfield_groupid(self, value): if isinstance(value,UINT): self.__field_groupid=value else: self.__field_groupid=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_groupid(self): del self.__field_groupid groupid=property(__getfield_groupid, __setfield_groupid, __delfield_groupid, None) def __getfield_user_added(self): try: self.__field_user_added except: self.__field_user_added=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_user_added.getvalue() def __setfield_user_added(self, value): if isinstance(value,UINT): self.__field_user_added=value else: self.__field_user_added=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_user_added(self): del self.__field_user_added user_added=property(__getfield_user_added, __setfield_user_added, __delfield_user_added, "=1 when was added by user") def iscontainer(self): return True def containerelements(self): yield ('name', self.__field_name, None) yield ('groupid', self.__field_groupid, None) yield ('user_added', self.__field_user_added, "=1 when was added by user") class pbgroups(BaseProtogenClass): "Phonebook groups" __fields=['groups'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroups,self).__init__(**dict) if self.__class__ is pbgroups: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroups,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroups,kwargs) if len(args): dict2={'elementclass': pbgroup, 'raiseonincompleteread': False, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_groups=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup, 'raiseonincompleteread': False, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True}) self.__field_groups.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_groups=LIST(**{'elementclass': pbgroup, 'raiseonincompleteread': False, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True}) self.__field_groups.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_groups(self): try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup, 'raiseonincompleteread': False, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True}) return self.__field_groups.getvalue() def __setfield_groups(self, value): if isinstance(value,LIST): self.__field_groups=value else: self.__field_groups=LIST(value,**{'elementclass': pbgroup, 'raiseonincompleteread': False, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True}) def __delfield_groups(self): del self.__field_groups groups=property(__getfield_groups, __setfield_groups, __delfield_groups, None) def iscontainer(self): return True def containerelements(self): yield ('groups', self.__field_groups, None) class pbfileentry(BaseProtogenClass): __fields=['serial1', 'entrynumber', 'data1', 'ringtone', 'wallpaper', 'data2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbfileentry,self).__init__(**dict) if self.__class__ is pbfileentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbfileentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbfileentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_serial1.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_data1.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_wallpaper.writetobuffer(buf) self.__field_data2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 2}) self.__field_entrynumber.readfrombuffer(buf) self.__field_data1=DATA(**{'sizeinbytes': 133}) self.__field_data1.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 2}) self.__field_ringtone.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 2}) self.__field_wallpaper.readfrombuffer(buf) self.__field_data2=DATA(**{'sizeinbytes': 15}) self.__field_data2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 2}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_data1(self): return self.__field_data1.getvalue() def __setfield_data1(self, value): if isinstance(value,DATA): self.__field_data1=value else: self.__field_data1=DATA(value,**{'sizeinbytes': 133}) def __delfield_data1(self): del self.__field_data1 data1=property(__getfield_data1, __setfield_data1, __delfield_data1, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 2}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 2}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_data2(self): return self.__field_data2.getvalue() def __setfield_data2(self, value): if isinstance(value,DATA): self.__field_data2=value else: self.__field_data2=DATA(value,**{'sizeinbytes': 15}) def __delfield_data2(self): del self.__field_data2 data2=property(__getfield_data2, __setfield_data2, __delfield_data2, None) def iscontainer(self): return True def containerelements(self): yield ('serial1', self.__field_serial1, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('data1', self.__field_data1, None) yield ('ringtone', self.__field_ringtone, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('data2', self.__field_data2, None) class pbfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbfile,self).__init__(**dict) if self.__class__ is pbfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbfile,kwargs) if len(args): dict2={ 'elementclass': pbfileentry } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': pbfileentry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': pbfileentry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class PathIndexEntry(BaseProtogenClass): __fields=['pathname'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PathIndexEntry,self).__init__(**dict) if self.__class__ is PathIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PathIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PathIndexEntry,kwargs) if len(args): dict2={'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' } dict2.update(kwargs) kwargs=dict2 self.__field_pathname=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_pathname except: self.__field_pathname=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' }) self.__field_pathname.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pathname=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' }) self.__field_pathname.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pathname(self): try: self.__field_pathname except: self.__field_pathname=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' }) return self.__field_pathname.getvalue() def __setfield_pathname(self, value): if isinstance(value,USTRING): self.__field_pathname=value else: self.__field_pathname=USTRING(value,**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' }) def __delfield_pathname(self): del self.__field_pathname pathname=property(__getfield_pathname, __setfield_pathname, __delfield_pathname, None) def iscontainer(self): return True def containerelements(self): yield ('pathname', self.__field_pathname, None) class PathIndexFile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PathIndexFile,self).__init__(**dict) if self.__class__ is PathIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PathIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PathIndexFile,kwargs) if len(args): dict2={ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class scheduleevent(BaseProtogenClass): __fields=['pos', 'description', 'cdate', 'mdate', 'start', 'end_time', 'end_date', 'repeat', 'alarmindex_vibrate', 'ringtone', 'unknown1', 'alarmminutes', 'alarmhours', 'unknown2', 'unknown3', 'unknown4'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleevent,self).__init__(**dict) if self.__class__ is scheduleevent: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleevent,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleevent,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_description.writetobuffer(buf) try: self.__field_cdate except: self.__field_cdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) self.__field_cdate.writetobuffer(buf) try: self.__field_mdate except: self.__field_mdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) self.__field_mdate.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end_time.writetobuffer(buf) self.__field_end_date.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) self.__field_alarmindex_vibrate.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_alarmminutes.writetobuffer(buf) self.__field_alarmhours.writetobuffer(buf) try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_unknown2.writetobuffer(buf) try: self.__field_unknown3 except: self.__field_unknown3=UINT(**{'sizeinbytes': 2, 'default': 0x01FA }) self.__field_unknown3.writetobuffer(buf) try: self.__field_unknown4 except: self.__field_unknown4=USTRING(**{'sizeinbytes': 69, 'default': '', 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_unknown4.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_description=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_description.readfrombuffer(buf) self.__field_cdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) self.__field_cdate.readfrombuffer(buf) self.__field_mdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) self.__field_mdate.readfrombuffer(buf) self.__field_start=LGCALDATE(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_end_time.readfrombuffer(buf) self.__field_end_date=LGCALDATE(**{'sizeinbytes': 4}) self.__field_end_date.readfrombuffer(buf) self.__field_repeat=LGCALREPEAT(**{'sizeinbytes': 4}) self.__field_repeat.readfrombuffer(buf) self.__field_alarmindex_vibrate=UINT(**{'sizeinbytes': 1}) self.__field_alarmindex_vibrate.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_alarmminutes=UINT(**{'sizeinbytes': 1}) self.__field_alarmminutes.readfrombuffer(buf) self.__field_alarmhours=UINT(**{'sizeinbytes': 1}) self.__field_alarmhours.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 2, 'default': 0x01FA }) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=USTRING(**{'sizeinbytes': 69, 'default': '', 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_unknown4.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "position within file, used as an event id") def __getfield_description(self): return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,USTRING): self.__field_description=value else: self.__field_description=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def __getfield_cdate(self): try: self.__field_cdate except: self.__field_cdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) return self.__field_cdate.getvalue() def __setfield_cdate(self, value): if isinstance(value,GPSDATE): self.__field_cdate=value else: self.__field_cdate=GPSDATE(value,**{'sizeinbytes': 4, 'default': GPSDATE.now() }) def __delfield_cdate(self): del self.__field_cdate cdate=property(__getfield_cdate, __setfield_cdate, __delfield_cdate, None) def __getfield_mdate(self): try: self.__field_mdate except: self.__field_mdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) return self.__field_mdate.getvalue() def __setfield_mdate(self, value): if isinstance(value,GPSDATE): self.__field_mdate=value else: self.__field_mdate=GPSDATE(value,**{'sizeinbytes': 4, 'default': GPSDATE.now() }) def __delfield_mdate(self): del self.__field_mdate mdate=property(__getfield_mdate, __setfield_mdate, __delfield_mdate, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,LGCALDATE): self.__field_start=value else: self.__field_start=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end_time(self): return self.__field_end_time.getvalue() def __setfield_end_time(self, value): if isinstance(value,LGCALDATE): self.__field_end_time=value else: self.__field_end_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_end_time(self): del self.__field_end_time end_time=property(__getfield_end_time, __setfield_end_time, __delfield_end_time, None) def __getfield_end_date(self): return self.__field_end_date.getvalue() def __setfield_end_date(self, value): if isinstance(value,LGCALDATE): self.__field_end_date=value else: self.__field_end_date=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_end_date(self): del self.__field_end_date end_date=property(__getfield_end_date, __setfield_end_date, __delfield_end_date, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,LGCALREPEAT): self.__field_repeat=value else: self.__field_repeat=LGCALREPEAT(value,**{'sizeinbytes': 4}) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_alarmindex_vibrate(self): return self.__field_alarmindex_vibrate.getvalue() def __setfield_alarmindex_vibrate(self, value): if isinstance(value,UINT): self.__field_alarmindex_vibrate=value else: self.__field_alarmindex_vibrate=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmindex_vibrate(self): del self.__field_alarmindex_vibrate alarmindex_vibrate=property(__getfield_alarmindex_vibrate, __setfield_alarmindex_vibrate, __delfield_alarmindex_vibrate, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_alarmminutes(self): return self.__field_alarmminutes.getvalue() def __setfield_alarmminutes(self, value): if isinstance(value,UINT): self.__field_alarmminutes=value else: self.__field_alarmminutes=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmminutes(self): del self.__field_alarmminutes alarmminutes=property(__getfield_alarmminutes, __setfield_alarmminutes, __delfield_alarmminutes, "a value of 0xFF indicates not set") def __getfield_alarmhours(self): return self.__field_alarmhours.getvalue() def __setfield_alarmhours(self, value): if isinstance(value,UINT): self.__field_alarmhours=value else: self.__field_alarmhours=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmhours(self): del self.__field_alarmhours alarmhours=property(__getfield_alarmhours, __setfield_alarmhours, __delfield_alarmhours, "a value of 0xFF indicates not set") def __getfield_unknown2(self): try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): try: self.__field_unknown3 except: self.__field_unknown3=UINT(**{'sizeinbytes': 2, 'default': 0x01FA }) return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 2, 'default': 0x01FA }) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): try: self.__field_unknown4 except: self.__field_unknown4=USTRING(**{'sizeinbytes': 69, 'default': '', 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,USTRING): self.__field_unknown4=value else: self.__field_unknown4=USTRING(value,**{'sizeinbytes': 69, 'default': '', 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "position within file, used as an event id") yield ('description', self.__field_description, None) yield ('cdate', self.__field_cdate, None) yield ('mdate', self.__field_mdate, None) yield ('start', self.__field_start, None) yield ('end_time', self.__field_end_time, None) yield ('end_date', self.__field_end_date, None) yield ('repeat', self.__field_repeat, None) yield ('alarmindex_vibrate', self.__field_alarmindex_vibrate, None) yield ('ringtone', self.__field_ringtone, None) yield ('unknown1', self.__field_unknown1, None) yield ('alarmminutes', self.__field_alarmminutes, "a value of 0xFF indicates not set") yield ('alarmhours', self.__field_alarmhours, "a value of 0xFF indicates not set") yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) class schedulefile(BaseProtogenClass): __fields=['numactiveitems', 'events'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(schedulefile,self).__init__(**dict) if self.__class__ is schedulefile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(schedulefile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(schedulefile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{'elementclass': scheduleevent}) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('events', self.__field_events, None) class textmemo(BaseProtogenClass): __fields=['text', 'memotime'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemo,self).__init__(**dict) if self.__class__ is textmemo: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemo,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemo,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_text.writetobuffer(buf) self.__field_memotime.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_text=USTRING(**{'sizeinbytes': 301, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_text.readfrombuffer(buf) self.__field_memotime=LGCALDATE(**{'sizeinbytes': 4}) self.__field_memotime.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,USTRING): self.__field_text=value else: self.__field_text=USTRING(value,**{'sizeinbytes': 301, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def __getfield_memotime(self): return self.__field_memotime.getvalue() def __setfield_memotime(self, value): if isinstance(value,LGCALDATE): self.__field_memotime=value else: self.__field_memotime=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_memotime(self): del self.__field_memotime memotime=property(__getfield_memotime, __setfield_memotime, __delfield_memotime, None) def iscontainer(self): return True def containerelements(self): yield ('text', self.__field_text, None) yield ('memotime', self.__field_memotime, None) class textmemofile(BaseProtogenClass): __fields=['itemcount', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemofile,self).__init__(**dict) if self.__class__ is textmemofile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemofile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemofile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_itemcount.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_itemcount=UINT(**{'sizeinbytes': 4}) self.__field_itemcount.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_itemcount(self): return self.__field_itemcount.getvalue() def __setfield_itemcount(self, value): if isinstance(value,UINT): self.__field_itemcount=value else: self.__field_itemcount=UINT(value,**{'sizeinbytes': 4}) def __delfield_itemcount(self): del self.__field_itemcount itemcount=property(__getfield_itemcount, __setfield_itemcount, __delfield_itemcount, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': textmemo }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('itemcount', self.__field_itemcount, None) yield ('items', self.__field_items, None) bitpim-1.0.7+dfsg1/src/phones/p_lgvx8500.p0000644001616600161660000001616410671602221016234 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lgvx8500.p 4395 2007-09-11 21:11:45Z djpham $ ### %{ """Various descriptions of data specific to LG VX8500""" from common import PhoneBookBusyException from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx8300 except as noted below from p_brew import * from p_lgvx8300 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb # Phonebook stuff RTPathIndexFile='pim/pbRingIdSetAsPath.dat' MsgRTIndexFile='pim/pbMsgRingIdSetAsPath.dat' WPPathIndexFile='pim/pbPictureIdSetAsPath.dat' pb_file_name='pim/pbentry.dat' # Calendar stuff ##NUMCALENDARENTRIES=?? #Play List stuff PLIndexFileName='dload/aodplaylist.lgpl' PLFilePath='dload' PLExt='.clgpl' PLMaxSize=50 # Max number of items per playlist # T9 User Database, how do we handle the Spanish DB? T9USERDBFILENAME='t9udb/t9udb_eng.dat' Default_Header='\x36\x00' \ '\x00\x00\x00\x00\x00\x00\x00\x00' Default_Header2= '\xFB\x07\xF6\x0F\xF1\x17' \ '\xEC\x1F\xE7\x27\xE2\x2F\xDD\x37' \ '\xD8\x3F\xD3\x47' %} # Phonebook stuff PACKET pbfileentry: 4 UINT serial1 2 UINT entrynumber 123 DATA data1 2 UINT ringtone 2 UINT msgringtone 2 UINT wallpaper 250 DATA data2 PACKET pbfile: * LIST { 'elementclass': pbfileentry } items PACKET PathIndexEntry: 255 USTRING { 'encoding': PHONE_ENCODING, 'default': '' } +pathname PACKET PathIndexFile: * LIST { 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES } +items # Playlist stuff PACKET PLIndexEntry: 255 USTRING { 'encoding': PHONE_ENCODING } pathname PACKET PLIndexFile: * LIST { 'elementclass': PLIndexEntry, 'createdefault': True } +items PACKET PLSongEntry: 255 USTRING { 'encoding': PHONE_ENCODING } pathname 255 USTRING { 'encoding': PHONE_ENCODING, 'default': self.pathname } +tunename 100 USTRING { 'encoding': PHONE_ENCODING, 'default': 'Unknown' } +artistname 100 USTRING { 'encoding': PHONE_ENCODING, 'default': 'Unknown' } +albumname 102 USTRING { 'encoding': PHONE_ENCODING, 'default': 'Unknown' } +genre 4 UINT { 'default': 2 } +dunno1 4 GPSDATE { 'default': GPSDATE.now() } +date 4 UINT size 4 UINT { 'default': 0 } +zero PACKET PLPlayListFile: * LIST { 'elementclass': PLSongEntry, 'createdefault': True } +items # SMS stuff PACKET msg_record: # the first few fields in this packet have something to do with the type of SMS # message contained. EMS and concatinated text are coded differently than a # simple text message 1 UINT binary # 0=simple text, 1=binary/concatinated 1 UINT unknown3 # 0=simple text, 1=binary/concatinated 1 UINT unknown4 # 0 1 UINT unknown6 # 2=simple text, 9=binary/concatinated 1 UINT length * LIST {'length': 219} +msg: 1 UINT byte "individual byte of message" PACKET recipient_record: 33 DATA unknown1 # contains recipient name from phonebook on this phone 50 USTRING number 1 UINT status # 1 when sent, 5 when received 3 UNKNOWN dunno1 4 LGCALDATE timesent 4 LGCALDATE timereceived 1 UINT unknown2 # 0 when not received, set to 1 when received 57 DATA unknown3 PACKET sms_saved: P BOOL { 'default': True } +outboxmsg 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone * sms_out outbox PACKET sms_out: 4 UINT index # starting from 1, unique 1 UINT locked # 1=locked 4 LGCALDATE timesent # time the message was sent 7 UNKNOWN unknown2 # zero 61 USTRING {'encoding': PHONE_ENCODING} subject 1 UINT num_msg_elements # up to 7 * LIST {'elementclass': msg_record, 'length': 7} +messages 8 UNKNOWN unknown1 1 UINT priority # 0=normal, 1=high 16 UNKNOWN unknown5 73 USTRING callback * LIST {'elementclass': recipient_record,'length': 9} +recipients * UNKNOWN pad PACKET SMSINBOXMSGFRAGMENT: * LIST {'length': 181} +msg: # this size could be wrong 1 UINT byte "individual byte of message" PACKET sms_in: 7 UNKNOWN unknown1 4 LGCALDATE lg_time # time the message was sent 1 UINT unknown2 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 6 SMSDATE timesent 1 UINT read 1 UINT locked 1 UINT priority 6 UNKNOWN dunno1 23 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False } subject 47 UNKNOWN dunno2 1 UINT num_msg_elements # max 10 elements (guessing on max here) * LIST {'length': 10} +msglengths: 1 UINT msglength "lengths of individual messages in septets" 10 UNKNOWN unknown9 * LIST {'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT} +msgs 2594 UNKNOWN dunno3 1 UINT sender_length * LIST {'length': 49} +sender: 1 UINT byte "individual byte of senders phone number" 3 UNKNOWN dunno4 1 UINT callback_length # 0 for no callback number 55 USTRING callback * UNKNOWN PAD # this stuff is required by the code, but couldn't figure it out, # so just fake it P UINT { 'default': 0 } +bin_header1 P UINT { 'default': 0 } +bin_header2 P UINT { 'default': 0 } +multipartID P UINT { 'default': 0 } +bin_header3 PACKET sms_quick_text: * LIST { 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True} +msgs: 101 USTRING {'encoding': PHONE_ENCODING, 'default': ""} +msg # include terminating NULL # Misc stuff PACKET LockKeyReq: 1 UINT { 'default': 0x21 } +cmd 2 UINT { 'default': 0 } +lock "0=Lock, 1=Unlock" PACKET KeyPressReq: 1 UINT { 'default': 0x20 } +cmd 1 UINT { 'default': 0 } +hold 1 STRING { 'terminator': None, 'sizeinbytes': 1 } key # T9 User Database PACKET t9udbfile: 2 UINT { 'default': 0x5000 } +file_length 6 DATA { 'default': '\x7B\x1B\x00\x00\x01\x00' } +unknown1 2 UINT word_count 2 UINT { 'default': 0x00 } +unknown2 2 UINT free_space 10 DATA { 'default': Default_Header } +unknown3 2 UINT { 'default': 0 } +extra_cnt 18 DATA { 'default': Default_Header2 } +unknown4 if self.extra_cnt: * LIST { 'length': self.extra_cnt } +extras: 1 UINT { 'default': 0 } +extra 1 UINT { 'constant': 0xA0 } +A0 * LIST { 'createdefault': True } +blocks: * T9USERDBBLOCK block # DM stuff PACKET DMKeyReq: 1 UINT { 'default': 0xFE } +cmd 6 STRING { 'terminator': None, 'default': '\x00\x00\x00\x00\x00\x00' } +body PACKET DMKeyResp: 1 UINT cmd 1 UINT code 4 UINT key 1 UINT one PACKET DMReq: 1 UINT { 'default': 0xFE } +cmd 1 UINT { 'default': 1 } +one 4 UINT key 1 UINT { 'default': 0 } +zero PACKET DMResp: 1 UINT cmd 1 UINT one 4 UINT key 1 UINT zero2one bitpim-1.0.7+dfsg1/src/phones/p_lgvx8550.p0000644001616600161660000002115711041434775016250 0ustar amuamu### ( -*- Python -*- ) ### Copyright (C) 2007-2008 Nathan Hjelm ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lgvx8550.p 4639 2008-07-22 19:50:21Z djpham $ %{ """Various descriptions of data specific to LG VX8550""" from p_lgvx8700 import * # same as the VX-8700 except as noted below NUMPHONEBOOKENTRIES=1000 NUMPHONENUMBERENTRIES=5000 NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=1 LASTSPEEDDIAL=99 NUMCALENDARENTRIES=300 NUMEMERGENCYCONTACTS=3 # sizes of pbfileentry and pnfileentry PHONEBOOKENTRYSIZE=256 PHONENUMBERENTRYSIZE=64 NUM_EMAILS=2 NUMPHONENUMBERS=5 pb_file_name = 'pim/pbentry.dat' pb_recordid_filename = 'pim/record_id.dat' pn_file_name = 'pim/pbnumber.dat' speed_file_name = 'pim/pbspeed.dat' ice_file_name = 'pim/pbiceentry.dat' PB_ENTRY_SOR='' PB_NUMBER_SOR='' %} # Phonebook stuff # *NOTE* # The VX-8550 appears to be the first LG Verizon phone not to use the LG phonebook protocol. The VX-8550 responds to phonebook commands with # a bad brew command error. # pbspeed.dat PACKET speeddial: 2 UINT {'default': 0xffff} +entry "0-based entry number" 1 UINT {'default': 0xff} +number "number type" %{ def valid(self): return self.entry!=0xffff %} PACKET speeddials: * LIST {'length': NUMSPEEDDIALS, 'elementclass': speeddial} +speeddials # /pim/pbentry.dat format PACKET pbfileentry: 5 STRING { 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff\xff' } +entry_tag if self.entry_tag==PB_ENTRY_SOR: * PBDateTime { 'defaulttocurrenttime': True } +mod_date 6 STRING { 'terminator': None, 'default': '\xff\xff\xff\xff\xff\xff' } +unk0 4 UINT entry_number1 # 1 based entry number -- might be just 2 bytes long 2 UINT entry_number0 # 0 based entry number 33 USTRING { 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } +name 2 UINT { 'default': 0 } +group * LIST {'length': NUMEMAILS} +emails: 49 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} email 2 UINT { 'default': 0xffff } +ringtone 2 UINT { 'default': 0 } +wallpaper * LIST {'length': NUMPHONENUMBERS} +numbertypes: 1 UINT { 'default': 0 } numbertype * LIST {'length': NUMPHONENUMBERS} +numberindices: 2 UINT { 'default': 0xffff } numberindex 69 USTRING { 'raiseonunterminatedread': False, 'default': '', 'encoding': PHONE_ENCODING } +memo # maybe 6 USTRING { 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''} +exit_tag else: # this is a blank entry, fill it up with 0xFF 251 DATA { 'default': '\xff'*251 } +dontcare %{ def valid(self): global PB_ENTRY_SOR return self.entry_tag==PB_ENTRY_SOR and ord(self.name[0]) != 0xff %} PACKET pbfile: * LIST { 'elementclass': pbfileentry, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True} +items 6 STRING { 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False } +eof_tag 10 STRING { 'raiseonunterminatedread': False, 'raiseontruncate': False } +model_name * PBDateTime { 'defaulttocurrenttime': True } +mod_date 221 DATA { 'default': '\x00'*221 } + blanks 7 STRING { 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False } +eof_close_tag # /pim/pbnumber.dat format PACKET pnfileentry: 4 STRING { 'terminator': None, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff'} +entry_tag # some entries don't have this?? if self.entry_tag != '\xff\xff\xff\xff': # this is a valid slot 1 UINT { 'default': 0 } +pad00 # year, month, day, hour, min, sec * PBDateTime {'defaulttocurrenttime': True } +mod_date 6 STRING { 'default': '', 'raiseonunterminatedread': False } +unk0 2 UINT pn_id # 0 based 2 UINT pe_id # 0 based 1 UINT pn_order "0-based order of this phone within this contact" 25 LGHEXPN phone_number 2 UINT ntype 3 UINT { 'default': 0 } +unk2 6 USTRING { 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''} +exit_tag # some entries don't have this?? else: # empty slot: all 0xFF 60 DATA { 'default': '\xFF'*60 } +blanks %{ def valid(self): return self.phone_number != None def malformed(self): # malformed (yet valid) entries have been seen on several phones including the VX-8550 and VX-10000 return self.entry_tag != PB_NUMBER_SOR %} PACKET pnfile: * LIST { 'elementclass': pnfileentry, 'createdefault': True, 'length': NUMPHONENUMBERENTRIES } +items PACKET PathIndexEntry: 255 USTRING { 'encoding': PHONE_ENCODING, 'default': '' } +pathname PACKET PathIndexFile: * LIST { 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES } +items # record_id.dat PACKET RecordIdEntry: 4 UINT idnum # ICE # /pim/pbiceentry.dat PACKET iceentry: "ICE index entries" 2 UINT { 'default': 0 } +entry_assigned "0 if not assigned, 1 if assigned" 2 UINT { 'default': 0xffff } +entry_number "0-based ICE entry number" # don't care when not assigned 2 UINT { 'default': 0 } +pb_index "0-based phone book entry number" 82 DATA { 'default': '\x00'*82 } +dontcare %{ def valid(self): return self.entry_assigned==1 and \ self.entry_number ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lgvx8560.p 4640 2008-07-23 05:03:29Z djpham $ %{ """Various descriptions of data specific to LG VX8560/VX8610""" # groups - same as VX-8700 # speeds - same as VX-8550 # sms - same as VX-9100/VX-9700 # calendar - same as VX-8550 from p_lgvx9700 import * # memo - same as VX-8550 from p_lgvx8550 import textmemo,textmemofile # indexentry - same as VX-8800 # indexfile - same as VX-8800 from p_lgvx8800 import indexfile,indexentry %} # Call history PACKET call: 4 GPSDATE GPStime # no. of seconds since 0h 1-6-80, based off local time. 4 UINT unk0 # different for each call 4 UINT duration # seconds, not certain about length of this field 49 USTRING {'raiseonunterminatedread': False} number 36 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 1 UINT numberlength # length of phone number 1 UINT status # 0=outgoing, 1=incoming, 2=missed, etc 1 UINT pbnumbertype # 1=cell, 2=home, 3=office, 4=cell2, 5=fax, 6=vmail, 0xFF=not in phone book 4 UINT unk1 # always seems to be 0 4 UINT pbentrynum #entry number in phonebook 24 DATA unk2 PACKET callhistory: 4 UINT { 'default': 0x00020000 } unk0 4 UINT numcalls 1 UINT unk1 * LIST {'elementclass': call} +calls bitpim-1.0.7+dfsg1/src/phones/p_lgvx8600.p0000644001616600161660000000434410574665711016251 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### %{ from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx8500 except as noted below from p_lgvx8500 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb #Play List stuff PLIndexFileName='dload/pl_mgr.dat' PLFilePath='my_music' PLExt='.vpl' PLMaxSize=50 # Max number of items per playlist %} PACKET call: 4 GPSDATE GPStime #no. of seconds since 0h 1-6-80, based off local time. 4 UINT dunno1 # different for each call 4 UINT duration #seconds, not certain about length of this field 2 UINT dunno2 # 2 UINT pbentrynum #entry number in phonebook 1 UINT numberlength # length of phone number 1 UINT dunno3 1 UINT pbnumbertype # 1=cell, 2=home, 3=office, 4=cell2, 5=fax, 6=vmail, 0xFF=not in phone book 2 UINT dunno4 36 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 49 USTRING {'raiseonunterminatedread': False} number PACKET callhistory: 4 UINT numcalls 1 UINT unknown1 * LIST {'elementclass': call} +calls # Playlist stuff PACKET PLIndexEntry: 264 USTRING { 'encoding': PHONE_ENCODING } pathname 4 UINT { 'default': 0x105 } +dunno PACKET PLIndexFile: * LIST { 'elementclass': PLIndexEntry, 'createdefault': True } +items PACKET PLSongEntry: 255 USTRING { 'encoding': PHONE_ENCODING } pathname 255 USTRING { 'encoding': PHONE_ENCODING, 'default': self.pathname } +tunename 100 USTRING { 'encoding': PHONE_ENCODING, 'default': 'Unknown' } +artistname 100 USTRING { 'encoding': PHONE_ENCODING, 'default': 'Unknown' } +albumname 102 USTRING { 'encoding': PHONE_ENCODING, 'default': 'Unknown' } +genre 4 UINT { 'default': 2 } +dunno1 4 GPSDATE { 'default': GPSDATE.now() } +date 4 UINT size 4 UINT { 'default': 0 } +zero PACKET PLPlayListFile: * LIST { 'elementclass': PLSongEntry, 'createdefault': True } +items bitpim-1.0.7+dfsg1/src/phones/p_lgvx8700.p0000644001616600161660000000724611045365054016245 0ustar amuamu### BITPIM -*- Python -*- ### ### Copyright (C) 2007-2008 Nathan Hjelm ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### %{ from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx9900 except as noted below from p_lgvx9900 import * from p_lgvx8500 import t9udbfile # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb BREW_FILE_SYSTEM = 2 BREW_READ_SIZE = 0x400 BREW_WRITE_SIZE = 0x1A00 MAX_PHONEBOOK_GROUPS=30 # Phonebook stuff RTPathIndexFile='pim/pbRingIdSetAsPath.dat' WPPathIndexFile='pim/pbPictureIdSetAsPath.dat' pb_file_name='pim/pbentry.dat' pb_group_filename='pim/pbgroup.dat' T9USERDBFILENAME='t9udb/t9udb_eng.dat' %} # phonebook stuff # pbgroup.dat # The VX8700 and newer phones have a fixed size pbgroup.dat, hence the need to fill up with # unused slots. PACKET pbgroup: 33 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' } +name 2 UINT { 'default': 0 } +groupid 1 UINT {'default': 0} +user_added "=1 when was added by user" PACKET pbgroups: "Phonebook groups" * LIST {'elementclass': pbgroup, 'raiseonincompleteread': False, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True} +groups PACKET pbfileentry: 4 UINT serial1 2 UINT entrynumber 133 DATA data1 2 UINT ringtone 2 UINT wallpaper 15 DATA data2 PACKET pbfile: * LIST { 'elementclass': pbfileentry } items PACKET PathIndexEntry: 255 USTRING { 'encoding': PHONE_ENCODING, 'default': '' } +pathname PACKET PathIndexFile: * LIST { 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES } +items # calendar PACKET scheduleevent: 4 UINT pos "position within file, used as an event id" 33 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } description 4 GPSDATE { 'default': GPSDATE.now() } +cdate # creation date 4 GPSDATE { 'default': GPSDATE.now() } +mdate # modification date 4 LGCALDATE start 4 LGCALDATE end_time 4 LGCALDATE end_date 4 LGCALREPEAT repeat # complicated bit mapped field 1 UINT alarmindex_vibrate #LSBit of this set vibrate ON(0)/OFF(1), the 7 MSBits are the alarm index #the alarmindex is the index into the amount of time in advance of the #event to notify the user. It is directly related to the alarmminutes #and alarmhours below, valid values are # 8=2days, 7=1day, 6=2hours, 5=1hour, 4=15mins, 3=10mins, 2=5mins, 1=0mins, 0=NoAlarm 1 UINT ringtone 1 UINT unknown1 1 UINT alarmminutes "a value of 0xFF indicates not set" 1 UINT alarmhours "a value of 0xFF indicates not set" 1 UINT { 'default': 0 } +unknown2 2 UINT { 'default': 0x01FA } +unknown3 69 USTRING { 'default': '', 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } +unknown4 PACKET schedulefile: 2 UINT numactiveitems * LIST {'elementclass': scheduleevent} +events PACKET textmemo: 301 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } text 4 LGCALDATE memotime # time the memo was writen LG time PACKET textmemofile: 4 UINT itemcount * LIST { 'elementclass': textmemo } +items bitpim-1.0.7+dfsg1/src/phones/p_lgvx8800.p0000644001616600161660000001072511041434775016245 0ustar amuamu### BITPIM ( -*- Python -*- ) ### ### Copyright (C) 2007-2008 Nathan Hjelm ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lgvx8800.p 4639 2008-07-22 19:50:21Z djpham $ %{ """Various descriptions of data specific to LG VX8800""" from p_lgvx8550 import * # SMS index files inbox_index = "dload/inbox.dat" outbox_index = "dload/outbox.dat" drafts_index = "dload/drafts.dat" %} # Index files PACKET indexentry: 256 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } filename "full pathname" 4 UINT size 4 UINT {'default': 0} +date 4 UINT type 4 UINT {'default': 0} +unknown PACKET indexfile: "Used for tracking wallpaper and ringtones" * LIST {'elementclass': indexentry, 'createdefault': True} +items # Memos PACKET textmemo: 4 GPSDATE { 'default': GPSDATE.now(), 'unique': True } +cdate 304 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } text 4 LGCALDATE memotime # time the memo was writen LG time PACKET textmemofile: 4 UINT itemcount * LIST { 'elementclass': textmemo } +items # SMS stuff PACKET msg_record: # the first few fields in this packet have something to do with the type of SMS # message contained. EMS and concatinated text are coded differently than a # simple text message 1 UINT binary # 0=simple text, 1=binary/concatinated 1 UINT unknown3 # 0=simple text, 1=binary/concatinated 1 UINT unknown4 # 0 1 UINT unknown6 # 2=simple text, 9=binary/concatinated 1 UINT length * LIST {'length': 220} +msg: 1 UINT byte "individual byte of message" PACKET recipient_record: 33 DATA unknown1 # contains recipient name from phonebook on this phone 50 USTRING number 3 UNKNOWN dunno1 1 UINT status # 1 when sent, 5 when received 4 LGCALDATE timesent 4 LGCALDATE timereceived 1 UINT unknown2 # 0 when not received, set to 1 when received 54 DATA unknown3 PACKET sms_saved: 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone * sms_out outbox PACKET sms_out: 4 UINT index # starting from 1, unique 1 UINT locked # 1=locked 4 LGCALDATE timesent # time the message was sent (possibly composed) 3 UNKNOWN unknown2 # zero 4 GPSDATE GPStimesent # zero in drafts 61 USTRING {'encoding': PHONE_ENCODING} subject 1 UINT num_msg_elements # up to 7 * LIST {'elementclass': msg_record, 'length': 7} +messages 1 UNKNOWN unknown1 1 UINT priority # 0=normal, 2=high 16 UNKNOWN unknown5 73 USTRING callback * LIST {'elementclass': recipient_record,'length': 9} +recipients * UNKNOWN pad # contains 10th recipient PACKET SMSINBOXMSGFRAGMENT: * LIST {'length': 220} +msg: # this size could be wrong 1 UINT byte "individual byte of message" PACKET sms_in: 7 UNKNOWN unknown1 4 LGCALDATE lg_time # time the message was sent 1 UINT unknown2 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 6 SMSDATE timesent 1 UINT read 1 UINT locked 1 UINT priority 6 UNKNOWN dunno1 23 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False } subject 47 UNKNOWN dunno2 1 UINT num_msg_elements # max 10 elements (guessing on max here) * LIST {'length': 20} +msglengths: 1 UINT msglength "lengths of individual messages in septets" * LIST {'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT} +msgs 4 UNKNOWN dunno3 1 UINT sender_length * LIST {'length': 49} +sender: 1 UINT byte "individual byte of senders phone number" 3 UNKNOWN dunno4 1 UINT callback_length # 0 for no callback number 22 USTRING callback 33 USTRING callback_name 49 USTRING callback2 * UNKNOWN PAD # this stuff is required by the code, but couldn't figure it out, # so just fake it P UINT { 'default': 0 } +bin_header1 P UINT { 'default': 0 } +bin_header2 P UINT { 'default': 0 } +multipartID P UINT { 'default': 0 } +bin_header3 PACKET sms_quick_text: * LIST { 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True} +msgs: 101 USTRING {'encoding': PHONE_ENCODING, 'default': ""} +msg # include terminating NULL bitpim-1.0.7+dfsg1/src/phones/com_samsungscha650.py0000644001616600161660000011131510661407437020223 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_samsungscha650.py 4365 2007-08-17 21:11:59Z djpham $ """Communicate with a Samsung SCH-A650""" # lib modules import copy import re import sha # my modules import common import commport import com_brew import com_samsung import com_phone import conversions import fileinfo import memo import nameparser import p_samsungscha650 import prototypes import call_history #------------------------------------------------------------------------------- class Phone(com_samsung.Phone): "Talk to the Samsung SCH-A650 Cell Phone" desc="SCH-A650" serialsname='scha650' protocolclass=p_samsungscha650 parent_phone=com_samsung.Phone __groups_range=xrange(5) __phone_entries_range=xrange(1,501) __pb_max_entries=25 __pb_max_speeddials=500 __pb_entry=0 __pb_mem_loc=1 __pb_group=2 __pb_ringtone=3 __pb_name=4 __pb_speed_dial=5 __pb_home_num=7 __pb_office_num=9 __pb_mobile_num=11 __pb_pager_num=13 __pb_fax_num=15 __pb_alias=17 __pb_email=21 __pb_four=22 __pb_blanks=(19, 20) __pb_date_time_stamp=24 __pb_numbers= ({'home': __pb_home_num}, {'office': __pb_office_num}, {'cell': __pb_mobile_num}, {'pager': __pb_pager_num}, {'fax': __pb_fax_num}) __pb_max_name_len=22 __pb_max_number_len=32 __pb_max_emails=1 # 'type name', 'type index name', 'origin', 'dir path', 'max file name length', 'max file name count' __ringtone_info=('ringtone', 'ringtone-index', 'ringtone', 'user/sound/ringer', 17, 20) __wallpaper_info=('wallpapers', 'wallpaper-index', 'images', 'nvm/brew/shared', 17, 10) def __init__(self, logtarget, commport): "Calls all the constructors and sets initial modes" com_samsung.Phone.__init__(self, logtarget, commport) self.mode=self.MODENONE def getfundamentals(self, results): """Gets information fundamental to interopating with the phone and UI. Currently this is: - 'uniqueserial' a unique serial number representing the phone - 'groups' the phonebook groups - 'wallpaper-index' map index numbers to names - 'ringtone-index' map index numbers to ringtone names This method is called before we read the phonebook data or before we write phonebook data. """ self.setmode(self.MODEPHONEBOOK) # use a hash of ESN and other stuff (being paranoid) self.log("Retrieving fundamental phone information") self.log("Reading phone serial number") results['uniqueserial']=sha.new(self.get_esn()).hexdigest() # now read groups self.log("Reading group information") g=self.get_groups(self.__groups_range) groups={} for i, g_i in enumerate(g): if len(g_i): groups[i]={ 'name': g_i } results['groups']=groups # getting rintone-index self.setmode(self.MODEBREW) rt_index=RingtoneIndex(self) results['ringtone-index']=rt_index.get() # getting wallpaper-index img_index=ImageIndex(self) results['wallpaper-index']=img_index.get() self.setmode(self.MODEMODEM) self.log("Fundamentals retrieved") return results def getphonebook(self,result): """Reads the phonebook data. The L{getfundamentals} information will already be in result.""" self.setmode(self.MODEBREW) pb=PhoneBook(self) pb.read() pb_book=pb.get_dict(result) result['phonebook']=pb_book self.setmode(self.MODEMODEM) return pb_book def savephonebook(self, data): "Saves out the phonebook" pb_book=data['phonebook'] pb_groups=data['groups'] ringtone_index=data.get('ringtone-index', {}) self.log('Validating phonebook entries.') del_entries=[] for k in pb_book: if not self.__validate_entry(pb_book[k], pb_groups, ringtone_index): self.log('Invalid entry, entry will be not be sent.') del_entries.append(k) for k in del_entries: self.log('Deleting entry '+\ nameparser.getfullname(pb_book[k]['names'][0])) del pb_book[k] self._has_duplicate_speeddial(pb_book) self.log('All entries validated') pb_locs=[False]*(len(self.__phone_entries_range)+1) pb_mem=[False]*len(pb_locs) # get existing phonebook from the phone self.log("Getting current phonebook from the phone") self.setmode(self.MODEBREW) phone_book=PhoneBook(self) phone_book.read() current_pb=phone_book.get_dict(data) self.setmode(self.MODEMODEM) # check and adjust for speeddial changes self.log("Processing speeddial data") for k in pb_book: self._update_speeddial(pb_book[k]) # check for deleted entries and delete them self.setmode(self.MODEPHONEBOOK) self.log("Processing deleted entries") for k1 in current_pb: s1=current_pb[k1]['serials'][0]['serial1'] found=False for k2 in pb_book: if self._same_serial1(s1, pb_book[k2]): found=True break if found: pb_locs[int(current_pb[k1]['serials'][0]['serial1'])]=True pb_mem[int(current_pb[k1]['serials'][0]['serial2'])]=True else: self.log("Deleted item: "+\ nameparser.getfullname(current_pb[k1]['names'][0])) # delete the entries from data and the phone self.progress(0, 10, "Deleting "+\ nameparser.getfullname(\ current_pb[k1]['names'][0])) self._del_phone_entry(current_pb[k1]) mem_idx, loc_idx = self.__pb_max_speeddials, 1 # check for new entries & update serials self.log("Processing new & updated entries") serials_update=[] progresscur, progressmax=1,len(pb_book) for k in pb_book: if progresscur>len(self.__phone_entries_range): self.log('Max phone entries exceeded: '+str(progresscur)) break e=pb_book[k] if not self._has_serial1(e): while pb_locs[loc_idx]: loc_idx += 1 pb_locs[loc_idx]=True sd=self._get_speeddial(e) if sd: mem_index=sd pb_mem[sd]=True else: while pb_mem[mem_idx]: mem_idx -= 1 pb_mem[mem_idx]=True mem_index=mem_idx self._set_speeddial(e, mem_idx) s1={ 'sourcetype': self.serialsname, 'sourceuniqueid': data['uniqueserial'], 'serial1': `loc_idx`, 'serial2': `mem_index` } e['serials'].append(s1) self.log("New entries: Name: "+\ nameparser.getfullname(e['names'][0])+\ ", s1: "+`loc_idx`+", s2: "+`mem_index`) serials_update.append((self._bitpim_serials(e), s1)) self.progress(progresscur, progressmax, "Updating "+\ nameparser.getfullname(e['names'][0])) if not self._write_phone_entry(e, pb_groups, ringtone_index, phone_book): self.log("Failed to save entry: "+\ nameparser.getfullname(e['names'][0])) progresscur += 1 data["serialupdates"]=serials_update self.log("Done") self.setmode(self.MODEMODEM) return data # validate a phonebook entry, return True if good, False otherwise def __validate_entry(self, pb_entry, pb_groups, ringtone_index): try: # validate name & alias name=nameparser.getfullname(pb_entry['names'][0]).replace('"', '') if len(name)>self.__pb_max_name_len: name=name[:self.__pb_max_name_len] pb_entry['names'][0].setdefault('full', name) if pb_entry['names'][0].has_key('nickname'): name=re.sub('[,"]', '', pb_entry['names'][0]['nickname']) if len(name)>self.__pb_max_name_len: name=name[:self.__pb_max_name_len] if pb_entry['names'][0]['nickname']!=name: pb_entry['names'][0]['nickname']=name # validate numbers has_number_or_email=False if pb_entry.has_key('numbers'): for n in pb_entry['numbers']: num=self.phonize(n['number']) if len(num)>self.__pb_max_number_len: num=num[:self.__pb_max_number_len] if num != n['number']: self.log('Updating number from '+n['number']+' to '+num) n['number']=num try: self._get_number_type(n['type']) except: self.log(n['number']+': setting type to home.') n['type']='home' has_number_or_email=True # validate emails if pb_entry.has_key('emails'): if len(pb_entry['emails'])>self.__pb_max_emails: self.log(name+': Each entry can only have %s emails. The rest will be ignored.'%str(self.__pb_max_emails)) email=pb_entry['emails'][0]['email'].replace('"', '') if len(email)>self.__pb_max_number_len: email=email[:self.__pb_max_number_len] if email!=pb_entry['emails'][0]['email']: pb_entry['emails'][0]['email']=email has_number_or_email=True if not has_number_or_email: self.log(name+': Entry has no numbers or emails') # return False so this entry can be deleted from the dict return False # validate groups found=False if pb_entry.has_key('categories') and len(pb_entry['categories']): pb_cat=pb_entry['categories'][0]['category'] for k in pb_groups: if pb_groups[k]['name']==pb_cat: found=True break if not found: self.log(name+': category set to '+pb_groups[0]['name']) pb_entry['categories']=[{'category': pb_groups[0]['name']}] # validate ringtones found=False if pb_entry.has_key('ringtones') and len(pb_entry['ringtones']): pb_rt=pb_entry['ringtones'][0]['ringtone'] # can only set to builtin-ringtone for k, rt in ringtone_index.items(): if pb_rt==rt['name']: found=True break if not found: rt=ringtone_index[0]['name'] self.log(name+': ringtone set to '+rt) pb_entry['ringtones']=[{'ringtone': rt, 'use': 'call' }] # everything's cool return True except: raise def _has_duplicate_speeddial(self, pb_book): b=[False]*(self.__pb_max_speeddials+1) for k in pb_book: try: for k1, kk in enumerate(pb_book[k]['numbers']): sd=kk['speeddial'] if sd and b[sd]: # speed dial is in used, remove this one del pb_book[k]['numbers'][k1]['speeddial'] self.log('speeddial %d exists, deleted'%sd) else: b[sd]=True except: pass return False def _update_speeddial(self, pb_entry): try: s=self._my_serials(pb_entry) s1=int(s['serial2']) sd=self._get_speeddial(pb_entry) if not sd: # speed dial not set, set it to current mem slot self._set_speeddial(pb_entry, s1) elif sd!=s1: # speed dial set to a different slot, mark it self._del_my_serials(pb_entry) except: pass def _get_speeddial(self, pb_entry): n=pb_entry.get('numbers', []) for k in n: try: if k['speeddial']: return k['speeddial'] except: pass return 0 def _set_speeddial(self, pb_entry, sd): if not pb_entry.has_key('numbers'): # no numbers key, just return return for k in pb_entry['numbers']: if k.has_key('speeddial'): k['speeddial']=sd return pb_entry['numbers'][0]['speeddial']=sd def _del_phone_entry(self, pb_entry): try: return self.save_phone_entry(self._my_serials(pb_entry)['serial1']) except: return False def _same_serial1(self, s1, pb_entry): for k in pb_entry['serials']: if k['sourcetype']==self.serialsname and k.has_key('serial1'): return k['serial1']==s1 return False def _has_serial1(self, pb_entry): for k in pb_entry['serials']: if k['sourcetype']==self.serialsname and k.has_key('serial1'): return True return False def _bitpim_serials(self, pb_entry): for k in pb_entry['serials']: if k['sourcetype']=="bitpim": return k return {} def _del_my_serials(self, pb_entry): for k in range(len(pb_entry['serials'])): if pb_entry['serials'][k]['sourcetype']==self.serialsname: del pb_entry['serials'][k] return def _my_serials(self, pb_entry): for k in pb_entry['serials']: if k['sourcetype']==self.serialsname: return k return {} def _get_number_type(self, type): n=self.__pb_numbers for k in range(len(n)): if n[k].has_key(type): return k, n[k][type] raise common.IntegrityCheckFailed(self.desc, "Invalid Number Type") def _write_phone_entry(self, pb_entry, groups, ringtone_index, phone_book): # setting up a list to send to the phone, all fields preset to '0' e=['0']*self.__pb_max_entries # setting the entry # and memory location # serials=self._my_serials(pb_entry) e[self.__pb_entry]=serials['serial1'] e[self.__pb_mem_loc]=serials['serial2'] # groups/categories grp=0 try: grp_name=pb_entry['categories'][0]['category'] for k in range(len(groups)): if groups[k]['name']==grp_name: grp=k break except: # invalid group or no group specified, default to group 0 grp, pb_entry['categories']=0, [{'category': groups[0]['name']}] e[self.__pb_group]=`grp` # ringtones e[self.__pb_ringtone]='0' # default to Inactive try: rt=pb_entry['ringtones'][0]['ringtone'] for k, n in ringtone_index.items(): if rt==n['name']: e[self.__pb_ringtone]=`k` break except: pass # name & alias e[self.__pb_name]='"'+nameparser.getfullname(pb_entry['names'][0])+'"' nick_name='' try: nick_name=pb_entry['names'][0]['nickname'] except: pass e[self.__pb_alias]=nick_name if len(nick_name): e[self.__pb_alias+1]='0' else: e[self.__pb_alias+1]='' # numbers & speed dial # preset to empty for k in range(len(self.__pb_numbers)): for kk in self.__pb_numbers[k]: e[self.__pb_numbers[k][kk]]='' e[self.__pb_numbers[k][kk]+1]='' speed_dial='0' n=pb_entry.get('numbers', []) for k in range(len(n)): try: nk=n[k] kkk, kk=self._get_number_type(nk['type']) except: # invalid type, default to 'home' nk['type']='home' kkk, kk=0, self.__pb_home_num e[kk],e[kk+1]=self.phonize(nk['number']),'0' try: if nk['speeddial']: speed_dial=`kkk` except: pass e[self.__pb_speed_dial]=speed_dial # email email='' try: email=pb_entry['emails'][0]['email'] except: pass e[self.__pb_email]='"'+email+'"' e[self.__pb_four]='4' for k in self.__pb_blanks: e[k]='' e[self.__pb_date_time_stamp]=self.get_time_stamp() # final check to determine if this entry has changed. # if it has not then do nothing and just return ee=self.get_phone_entry(int(e[self.__pb_entry]), self.__pb_alias, self.__pb_max_entries) if len(ee)==self.__pb_max_entries: # DSV took the " out, need to put them back in for comparison ee[self.__pb_name]='"'+ee[self.__pb_name]+'"' ee[self.__pb_email]='"'+ee[self.__pb_email]+'"' # set the correct ringtone index ee[self.__pb_ringtone]=str(phone_book.get_ringtone(\ int(e[self.__pb_mem_loc]))) k=self.__pb_max_entries-2 if e[0:k]==ee[0:k]: return True return self.save_phone_entry('0,'+','.join(e)) def getringtones(self, result): self.setmode(self.MODEBREW) m=FileEntries(self, self.__ringtone_info) rt_info=RingtoneIndex(self).get_download_info() r=m.get_media(result, rt_info) self.setmode(self.MODEMODEM) return r def saveringtones(self, result, merge): self.setmode(self.MODEBREW) m=FileEntries(self, self.__ringtone_info) result['rebootphone']=1 # So we end up back in AT mode r=m.save_media(result, RingtoneIndex(self).get_download_info()) self.setmode(self.MODEMODEM) return r def getwallpapers(self, result): self.setmode(self.MODEBREW) m=FileEntries(self, self.__wallpaper_info) img_info=ImageIndex(self).get_download_info() r=m.get_media(result, img_info) self.setmode(self.MODEMODEM) return r def savewallpapers(self, result, merge): self.setmode(self.MODEBREW) m=FileEntries(self, self.__wallpaper_info) r=m.save_media(result, ImageIndex(self).get_download_info()) result['rebootphone']=1 self.setmode(self.MODEMODEM) return r getmemo=parent_phone._getmemo savememo=parent_phone._savememo gettodo=parent_phone._gettodo savetodo=parent_phone._savetodo getsms=parent_phone._getsms savesms=parent_phone._savesms getphoneinfo=parent_phone._getphoneinfo getmedia=None #------------------------------------------------------------------------------- class Profile(com_samsung.Profile): serialsname='scha650' WALLPAPER_WIDTH=128 WALLPAPER_HEIGHT=160 MAX_WALLPAPER_BASENAME_LENGTH=17 WALLPAPER_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789_*[]=<>;|?:% ." WALLPAPER_CONVERT_FORMAT="png" MAX_RINGTONE_BASENAME_LENGTH=17 RINGTONE_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789_*[]=<>;|?:% ." RINGTONE_LIMITS= { 'MAXSIZE': 30000 } # use for auto-detection phone_manufacturer='SAMSUNG ELECTRONICS' phone_model='SCH-A650/163' def __init__(self): com_samsung.Profile.__init__(self) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'read', None), # all calendar reading ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('ringtone', 'read', None), # all ringtone reading ('ringtone', 'write', 'OVERWRITE'), ('wallpaper', 'read', None), # all wallpaper reading ('wallpaper', 'write', 'OVERWRITE'), ('memo', 'read', None), # all memo list reading DJP ('memo', 'write', 'OVERWRITE'), # all memo list writing DJP ('todo', 'read', None), # all todo list reading DJP ('todo', 'write', 'OVERWRITE'), # all todo list writing DJP ('sms', 'read', None), # all SMS list reading DJP ) if __debug__: _supportedsyncs+=(('sms', 'write', 'OVERWRITE'),) def convertphonebooktophone(self, helper, data): return data __audio_ext={ 'MIDI': 'mid', 'QCP': 'qcp', 'PMD': 'pmd' } def QueryAudio(self, origin, currentextension, afi): # we don't modify any of these if afi.format in ("MIDI", "QCP", "PMD"): for k,n in self.RINGTONE_LIMITS.items(): setattr(afi, k, n) return currentextension, afi d=self.RINGTONE_LIMITS.copy() d['format']='QCP' return ('qcp', fileinfo.AudioFileInfo(afi, **d)) # fill in your own image origins using these # use this temorarily until the stock one is finalized imageorigins={} imageorigins.update(common.getkv(com_samsung.Profile.stockimageorigins, "images")) imagetargets={} imagetargets.update(common.getkv(com_samsung.Profile.stockimagetargets, "wallpaper", {'width': 128, 'height': 128, 'format': "PNG"})) imagetargets.update(common.getkv(com_samsung.Profile.stockimagetargets, "fullscreen", {'width': 128, 'height': 160, 'format': "PNG"})) def GetImageOrigins(self): # Note: only return origins that you can write back to the phone return self.imageorigins def GetTargetsForImageOrigin(self, origin): if origin=='images': return self.imagetargets #------------------------------------------------------------------------------- class FileEntries: def __init__(self, phone, info): self.__phone=phone self.__file_type, self.__index_type, self.__origin, self.__path, self.__max_file_len, self.__max_file_count=info def get_media(self, result, download_info=None): self.__phone.log('Getting media for type '+self.__file_type) if download_info is None: return self.__get_media_by_dir(result) else: return self.__get_media_by_index(result, download_info) def __get_media_by_dir(self, result): media=result.get(self.__file_type, {}) idx=result.get(self.__index_type, {}) file_cnt, idx_k=0, len(idx) path_len=len(self.__path)+1 try: file_list=self.__phone.getfilesystem(self.__path, 0) for k in file_list: try: index=k[path_len:] # print k, index media[index]=self.__phone.getfilecontents(k, True) idx[idx_k]={ 'name': index, 'origin': self.__origin } idx_k+=1 file_cnt += 1 except: self.__phone.log('Failed to read file '+k) except: self.__phone.log('Failed to read dir '+self.__path) result[self.__file_type]=media result[self.__index_type]=idx if file_cnt > self.__max_file_count: self.__phone.log('This phone only supports %d %s. %d %s read, weird things may happen.' % \ (self.__max_file_count, self.__file_type, file_cnt, self.__file_type)) return result def __get_media_by_index(self, result, rt_info): media=result.get(self.__file_type, {}) media_index=result.get(self.__index_type, {}) for k, m in media_index.items(): file_key=m.get('name', None) file_name=rt_info.get(file_key, None) if file_key is not None and file_name is not None: try : media[file_key]=self.__phone.getfilecontents(file_name, True) except: self.__phone.log('Failed to read file '+file_name) result[self.__file_type]=media return result def save_media(self, result, dl_info): self.__phone.log('Saving media for type '+self.__file_type) media, idx=result[self.__file_type], result[self.__index_type] # check for files selected for deletion media_names=[media[k]['name'] for k in media] dl_info_keys=dl_info.keys() deleted_keys=[k for k in dl_info_keys if k not in media_names] new_keys=[k for k in media if media[k]['name'] not in dl_info_keys] # deleting files for k in deleted_keys: file_name=dl_info[k] self.__phone.log('Deleting file: '+file_name) try: self.__phone.rmfile(file_name) except: self.__phone.log('Failed to delete file: '+file_name) # writing new files # make sure dir exists to write new files if len(new_keys): try: self.__phone.mkdirs(self.__path) except: pass file_count=0 for k in new_keys: n=media[k] origin=n.get('origin', None) if origin is not None and origin != self.__origin: continue if len(n['name']) > self.__max_file_len: self.__phone.log('%s %s name is too long and not sent to phone'% \ (self.__file_type, n['name'])) continue file_count+=1 if file_count>self.__max_file_count: # max # of files reached, bailing out self.__phone.log('This phone only supports %d %s. Save operation stopped.'%\ (self.__max_file_count, self.__file_type)) break file_name=self.__path+'/'+n['name'] if self.__origin=='images': # try to optimize it if it's a png image file file_contents=conversions.convertto8bitpng_joe(n['data']) else: file_contents=n['data'] self.__phone.log('Writing file: '+file_name) try: self.__phone.writefile(file_name, file_contents) except: self.__phone.log('Failed to write file: '+file_name) media[k]['origin']=self.__origin return result #------------------------------------------------------------------------------- class RingtoneIndex: __builtin_ringtones=( 'Inactive', 'Bell 1', 'Bell 2', 'Bell 3', 'Bell 4', 'Bell 5', 'Melody 1', 'Melody 2', 'Melody 3', 'Melody 4', 'Melody 5', 'Melody 6', 'Melody 7', 'Melody 8', 'Melody 9', 'Melody 10') def __init__(self, phone): self.__phone=phone def get_builtin_index(self): r={} for k, n in enumerate(self.__builtin_ringtones): r[k]={ 'name': n, 'origin': 'builtin' } return r def get_download_index(self): r={} try: rt_idx=self.__phone.protocolclass.ringtones() buf=prototypes.buffer(self.__phone.getfilecontents( \ self.__phone.protocolclass.ringtone_index_file_name)) rt_idx.readfrombuffer(buf, logtitle="Read ringtone index file") idx=len(self.__builtin_ringtones) l=len(self.__phone.protocolclass.ringtone_file_path)+1 for i in range(self.__phone.protocolclass.max_ringtone_entries): e=rt_idx.entry[i] if e.name_len: r[idx+i]={ 'name': e.file_name[l:e.file_name_len], 'origin': 'ringtone' } except: pass return r def get(self): r=self.get_builtin_index() r.update(self.get_download_index()) return r def get_download_info(self): r={} try: rt_idx=self.__phone.protocolclass.ringtones() buf=prototypes.buffer(self.__phone.getfilecontents( \ self.__phone.protocolclass.ringtone_index_file_name)) rt_idx.readfrombuffer(buf, logtitle="Read ringtone download index") l=len(self.__phone.protocolclass.ringtone_file_path)+1 for i in range(self.__phone.protocolclass.max_ringtone_entries): e=rt_idx.entry[i] if e.name_len: r[e.file_name[l:e.file_name_len]]=e.file_name[:e.file_name_len] except: pass return r #------------------------------------------------------------------------------- class ImageIndex: __builtin_images=( 'Clock1', 'Dual Clock', 'Calendar', 'Aquarium', 'Landscape', 'Water Drop' ) def __init__(self, phone): self.__phone=phone def get_builtin_index(self): r={} for k, n in enumerate(self.__builtin_images): r[k]={ 'name': n, 'origin': 'builtin' } return r def get_download_index(self): r={} try: img_idx=self.__phone.protocolclass.images() buf=prototypes.buffer(self.__phone.getfilecontents( \ self.__phone.protocolclass.image_index_file_name)) img_idx.readfrombuffer(buf, logtitle="Read image download index") idx=len(self.__builtin_images) l=len(self.__phone.protocolclass.image_file_path)+1 for i in range(self.__phone.protocolclass.max_image_entries): e=img_idx.entry[i] if e.name_len: r[idx+i]={ 'name': e.file_name[l:e.file_name_len], 'origin': 'images' } except: raise return r def get(self): r=self.get_builtin_index() r.update(self.get_download_index()) return r def get_download_info(self): r={} try: img_idx=self.__phone.protocolclass.images() buf=prototypes.buffer(self.__phone.getfilecontents( \ self.__phone.protocolclass.image_index_file_name)) img_idx.readfrombuffer(buf, logtitle="Read image download index") l=len(self.__phone.protocolclass.image_file_path)+1 for i in range(self.__phone.protocolclass.max_image_entries): e=img_idx.entry[i] if e.name_len: r[e.file_name[l:e.file_name_len]]=e.file_name[:e.file_name_len] except: pass return r #------------------------------------------------------------------------------- class PhoneNumbers: def __init__(self, phone): self.__phone=phone self.__numbers=None def read(self): try: buf=prototypes.buffer(self.__phone.getfilecontents(\ self.__phone.protocolclass.number_file_name)) self.__numbers=self.__phone.protocolclass.numbers() self.__numbers.readfrombuffer(buf, logtitle="Read number file "+self.__phone.protocolclass.number_file_name) except: self.__phone.log('Failed to read numbers file') self.__numbers=[] def get(self, index, default=None): if index>=self.__phone.protocolclass.max_number_entries: return default e=self.__numbers.entry[index] if e.valid: return e.name[:e.length] return default #------------------------------------------------------------------------------- class PhoneBook: __pb_numbers= ({'home': 'home_num_index' }, {'office': 'office_num_index' }, {'cell': 'mobile_num_index' }, {'pager': 'pager_num_index' }, {'fax': 'fax_num_index' }) def __init__(self, phone): self.__phone=phone self.__pb=None self.__numbers=None self.__groups=None self.__rt_index=None self.__id=None self.__slots=None def read(self): try: buf=prototypes.buffer(self.__phone.getfilecontents(\ self.__phone.protocolclass.pb_file_name)) self.__pb=self.__phone.protocolclass.pbbook() self.__pb.readfrombuffer(buf, logtitle="Read "+self.__phone.protocolclass.pb_file_name) except: self.__pb=[] self.__phone.log('Failed to read phonebook') def get_ringtone(self, index): """ Return the ringtone index of this entry. """ if self.__pb is None: self.read() rt=self.__pb.entry[index].ringer_type if rt: rt-=71 return rt def __extract_entry(self, e, pb_cnt, mem_index): res={} # serials res['serials']=[ {'sourcetype': self.__phone.serialsname, 'sourceuniqueid': self.__id, 'serial1': `pb_cnt`, 'serial2': `mem_index` }] # only one name res['names']=[ {'full': e.name } ] if e.alias_num_index: res['names'][0]['nickname']=self.__numbers.get(e.alias_num_index, '') # only one category res['categories']=[ {'category': self.__groups[e.group_num]['name'] } ] # emails if e.email_index: res['emails']=[ { 'email': self.__numbers.get(e.email_index, '') } ] # urls: N/A # private: N/A # memos: N/A # wallpapers: N/A # ringtones rt=e.ringer_type if rt: rt-=71 res['ringtones']=[ { 'ringtone': self.__rt_index[rt]['name'], 'use': 'call' } ] # numbers speed_dial=e.speed_dial_index res['numbers']=[] for k, a in enumerate(self.__pb_numbers): for key, attr in a.items(): idx=getattr(e, attr, 0) if idx: num=self.__numbers.get(idx, '') if idx==speed_dial: res['numbers'].append({ 'number': num, 'type': key, 'speeddial': mem_index } ) else: res['numbers'].append({ 'number': num, 'type': key }) # done return res def get_dict(self, result): # read the phonebook if not already done so if self.__pb is None: self.read() # read the phone numbers if self.__numbers is None: self.__numbers=PhoneNumbers(self.__phone) self.__numbers.read() # read the slot entries if self.__slots is None: self.__slots=PBSlot(self.__phone) self.__slots.read() # get fundamental info self.__groups=result.get('groups', {}) self.__rt_index=result.get('ringtone-index', {}) self.__id=result.get('uniqueserial', '') # loop through the phonebook and extract each entry r={} for pb_cnt, i in enumerate(self.__slots): if i==0: # empty slot continue e=self.__pb.entry[i] if e.mem_index: if i != e.mem_index: self.__phone.log('i: %d, mem_index: %d'%(i, e.mem_index)) r[pb_cnt]=self.__extract_entry(e, pb_cnt, i) return r #------------------------------------------------------------------------------- class PBSlot: """ Class to handle Phonebook entry slot -> memory slot """ def __init__(self, phone): self.__phone=phone self.__slots=None def read(self): try: buf=prototypes.buffer(self.__phone.getfilecontents(\ self.__phone.protocolclass.slot_file_name)) self.__slots=self.__phone.protocolclass.pbslots() self.__slots.readfrombuffer(buf, logtitle="Read slots file "+self.__phone.protocolclass.slot_file_name) except: self.__slots=[] self.__phone.log('Failed to read slot file') def __getitem__(self, key): if type(key) is not int: raise KeyError if key<0 or key>=self.__phone.protocolclass.max_pb_slots: raise IndexError if self.__slots is None: self.read() return self.__slots.slot[key].pbbook_index bitpim-1.0.7+dfsg1/src/phones/com_lgvx9900.py0000644001616600161660000001251510646567205016763 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgvx9900.py 4305 2007-07-16 04:05:25Z djpham $ """ Communicate with the LG VX9900 cell phone, which is a cross between the VX9800 and the VX8500 """ # BitPim modules import common import com_lg import com_lgvx9800 import p_lgvx9900 import helpids #------------------------------------------------------------------------------- parentphone=com_lgvx9800.Phone class Phone(com_lg.LGUncountedIndexedMedia, parentphone): "Talk to the LG VX9900 cell phone" desc="LG-VX9900" helpid=helpids.ID_PHONE_LGVX9900 protocolclass=p_lgvx9900 serialsname='lgvx9900' my_model='VX9900' # rintones and wallpaper info, copy from VX8500, may need to change to match # what the phone actually has external_storage_root='mmc1/' builtinringtones= ('Low Beep Once', 'Low Beeps', 'Loud Beep Once', 'Loud Beeps', 'VZW Default Ringtone') + \ tuple(['Ringtone '+`n` for n in range(1,13)]) + \ ('No Ring',) ringtonelocations= ( # type index file default dir external dir max type Index ( 'ringers', 'dload/myringtone.dat','brew/16452/lk/mr','mmc1/ringers', 100, 0x01, 100), ( 'sounds', 'dload/mysound.dat', 'brew/16452/ms', '', 100, 0x02, None), ( 'sounds(sd)', 'dload/sd_sound.dat', 'mmc1/my_sounds', '', 100, 0x02, None), ( 'music', 'dload/efs_music.dat', 'my_music', '', 100, 0x104, None), ( 'music(sd)', 'dload/sd_music.dat', 'mmc1/my_music', '', 100, 0x14, None), ) wallpaperlocations= ( # type index file default dir external dir max type Index ( 'images', 'dload/image.dat', 'brew/16452/mp', '', 100, 0x00, 100), ( 'images(sd)', 'dload/sd_image.dat', 'mmc1/my_pix', '', 100, 0x10, None), ( 'video', 'dload/video.dat', 'brew/16452/mf', '', 100, 0x03, None), ( 'video(sd)', 'dload/sd_video.dat', 'mmc1/my_flix', '', 100, 0x13, None), ) def __init__(self, logtarget, commport): parentphone.__init__(self, logtarget, commport) def setDMversion(self): _fw_version=self.get_firmware_version()[-1] # T99VZV02 uses DMv5 self._DMv5=self.my_model=='VX9900' and _fw_version>'1' # Fundamentals: # - get_esn - same as LG VX-8300 # - getgroups - same as LG VX-8100 # - getwallpaperindices - LGUncountedIndexedMedia # - getrintoneindices - LGUncountedIndexedMedia # - DM Version - T99VZV01: N/A, T99VZV02: 5 #------------------------------------------------------------------------------- parentprofile=com_lgvx9800.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='VX9900' WALLPAPER_WIDTH=320 WALLPAPER_HEIGHT=256 imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images(sd)")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video(sd)")) def GetImageOrigins(self): return self.imageorigins ringtoneorigins=('ringers', 'sounds', 'sounds(sd)',' music', 'music(sd)') excluded_ringtone_origins=('sounds', 'sounds(sd)', 'music', 'music(sd)') # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 320, 'height': 204, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", {'width': 160, 'height': 99, 'format': "JPEG"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading ('memo', 'read', None), # all memo list reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ## ('sms', 'write', 'OVERWRITE'), # all SMS list writing ('memo', 'write', 'OVERWRITE'), # all memo list writing ## ('playlist', 'read', 'OVERWRITE'), ## ('playlist', 'write', 'OVERWRITE'), ) bitpim-1.0.7+dfsg1/src/phones/com_motov3cm.py0000644001616600161660000000201710626435215017215 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_motov3cm.py 4255 2007-05-28 02:12:29Z djpham $ """Communicate with Motorola V3cm phones using AT commands""" # BitPim modules import com_motov710m import p_motov3c import helpids parentphone=com_motov710m.Phone class Phone(parentphone): desc='Moto-V3cm' helpid=helpids.ID_PHONE_MOTOV3CM serialsname='motov3cm' protocolclass=p_motov3c def __init__(self, logtarget, commport): parentphone.__init__(self, logtarget, commport) #------------------------------------------------------------------------------ parentprofile=com_motov710m.Profile class Profile(parentprofile): serialsname=Phone.serialsname # use for auto-detection phone_manufacturer='Motorola' phone_model='V3cm' common_model_name='V3c' generic_phone_model='Motorola CDMA V3c Phone' bitpim-1.0.7+dfsg1/src/phones/p_lgvx9100.p0000644001616600161660000003161111041000662016214 0ustar amuamu### BITPIM ### ### Copyright (C) 2008 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lgvx9100.p 4636 2008-07-21 03:25:38Z djpham $ %{ """Various descriptions of data specific to LG VX9100""" import time from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx9800 except as noted # below from p_lgvx8550 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=1000 FIRSTSPEEDDIAL=1 LASTSPEEDDIAL=999 NUMEMERGENCYCONTACTS=3 BREW_FILE_SYSTEM=2 INDEX_RT_TYPE=257 INDEX_SOUND_TYPE=2 INDEX_VIDEO_TYPE=3 INDEX_IMAGE_TYPE=0 INDEX_SDIMAGE_TYPE=16 INDEX_SDVIDEO_TYPE=19 INDEX_SDSOUND_TYPE=18 MAX_PHONEBOOK_GROUPS=30 PB_ENTRY_SOR='' PB_ENTRY_EOF='\x00VX9100\x00\x00\x00\x00\xD8\x07\x06\x00\x10\x00\x0F\x00\x14\x00\x30'+'\x00'*222+'\x00' PB_NUMBER_SOR='' pb_group_filename='pim/pbgroup.dat' pb_recordid_filename='pim/record_id.dat' pb_ice_file_name = 'pim/pbiceentry.dat' NUMCALENDARENTRIES=300 # SMS index files inbox_index = "dload/inbox.dat" outbox_index = "dload/outbox.dat" drafts_index = "dload/drafts.dat" %} # Media index file format PACKET indexentry: 256 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } filename "full pathname" 4 UINT size 4 GPSDATE {'default': GPSDATE.now()} +date 4 UINT type 4 UINT { 'default': 0 } +dunno PACKET indexfile: "Used for tracking wallpaper and ringtones" * LIST {'elementclass': indexentry, 'createdefault': True} +items # phonebook stuff # pbgroup.dat # The VX9100 has a fixed size pbgroup.dat, hence the need to fill up with # unused slots. PACKET pbgroup: 33 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' } +name 2 UINT { 'default': 0 } +groupid 1 UINT {'default': 0} +user_added "=1 when was added by user" PACKET pbgroups: "Phonebook groups" * LIST {'elementclass': pbgroup, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True} +groups # pbspeed.dat PACKET speeddial: 2 UINT {'default': 0xffff} +entry "0-based entry number" 1 UINT {'default': 0xff} +number "number type" %{ def valid(self): return self.entry!=0xffff %} PACKET speeddials: * LIST {'length': NUMSPEEDDIALS, 'elementclass': speeddial} +speeddials # /pim/pbentry.dat format PACKET pbfileentry: 4 STRING { 'terminator': None, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff'} +entry_tag if self.entry_tag==PB_ENTRY_SOR: # this is a valid entry 1 UINT { 'default': 0 } +pad00 * PBDateTime { 'defaulttocurrenttime': True } +mod_date 6 STRING { 'terminator': None, 'default': '\xff\xff\xff\xff\xff\xff' } +unk0 4 UINT entry_number1 # 1 based entry number -- might be just 2 bytes long 2 UINT entry_number0 # 0 based entry number 33 USTRING { 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } +name 2 UINT { 'default': 0 } +group * LIST {'length': NUMEMAILS} +emails: 49 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} email 2 UINT { 'default': 0xffff } +ringtone 2 UINT { 'default': 0 } +wallpaper * LIST {'length': NUMPHONENUMBERS} +numbertypes: 1 UINT { 'default': 0 } numbertype * LIST {'length': NUMPHONENUMBERS} +numberindices: 2 UINT { 'default': 0xffff } numberindex 69 USTRING { 'raiseonunterminatedread': False, 'default': '', 'encoding': PHONE_ENCODING } +memo # maybe 6 USTRING { 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''} +exit_tag else: # this is a blank entry, fill it up with 0xFF 252 DATA { 'default': '\xff'*252 } +dontcare %{ def valid(self): global PB_ENTRY_SOR return self.entry_tag==PB_ENTRY_SOR %} PACKET pbfile: * LIST { 'elementclass': pbfileentry, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True} +items 6 STRING { 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False } +eof_tag 10 STRING { 'default': 'VX9100' } +model_name * PBDateTime { 'defaulttocurrenttime': True } +mod_date 221 STRING { 'default': '' } +blanks 7 STRING { 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False } +eof_close_tag # /pim/pbnumber.dat format PACKET pnfileentry: 4 STRING { 'terminator': None, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff'} +entry_tag # some entries don't have this?? if self.entry_tag==PB_NUMBER_SOR: # this is a valid slot 1 UINT { 'default': 0 } +pad00 # year, month, day, hour, min, sec * PBDateTime {'defaulttocurrenttime': True } +mod_date 6 STRING { 'default': '', 'raiseonunterminatedread': False } +unk0 2 UINT pn_id # 0 based 2 UINT pe_id # 0 based 1 UINT pn_order "0-based order of this phone within this contact" 25 LGHEXPN phone_number 2 UINT type 3 UINT { 'default': 0 } +unk2 6 USTRING { 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''} +exit_tag # some entries don't have this?? else: # empty slot: all 0xFF 60 DATA { 'default': '\xFF'*60 } +blanks %{ def valid(self): global PB_NUMBER_SOR return self.entry_tag==PB_NUMBER_SOR %} PACKET pnfile: * LIST { 'elementclass': pnfileentry, 'createdefault': True, 'length': NUMPHONENUMBERENTRIES } +items PACKET PathIndexEntry: 255 USTRING { 'encoding': PHONE_ENCODING, 'default': '' } +pathname PACKET PathIndexFile: * LIST { 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES } +items # record_id.dat PACKET RecordIdEntry: 4 UINT idnum # pciceentry.dat PACKET iceentry: "ICE index entries" 2 UINT { 'default': 0x0000 } +entry_assigned "0 if not assigned, 1 if assigned" 2 UINT { 'default': 0xFFFF } +entry_number "0-based ICE entry number when assigned, 0xffff if unassigned" 2 UINT { 'default': 0x0000 } +pb_index "0-based phone book entry number" 82 DATA { 'default': '\x00'*82 } +dontcare %{ def valid(self): return self.entry_assigned==1 and \ self.entry_number ### Copyright (C) 2004 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_samsungscha670.py 4365 2007-08-17 21:11:59Z djpham $ ### The bulk of this code was borrowed from com_samsungscha650.py ### and modified so that operations work with the sch-a670. """Communicate with a Samsung SCH-A670""" # lib modules import re import sha import time # my modules import common import commport import com_brew import com_samsung import com_phone import conversions import fileinfo import nameparser import p_samsungscha670 import prototypes class Phone(com_samsung.Phone): "Talk to the Samsung SCH-A670 Cell Phone" desc="SCH-A670" serialsname='scha670' protocolclass=p_samsungscha670 parent_phone=com_samsung.Phone __groups_range=xrange(5) __phone_entries_range=xrange(1,501) __pb_atpbokw_field_count=26 # This is a rename from __pb_max_entries in a650 code # which I found confusing __pb_max_speeddials=500 __pb_entry=0 __pb_mem_loc=1 __pb_group=2 __pb_ringtone=3 __pb_name=4 __pb_speed_dial=5 __pb_home_num=7 __pb_office_num=9 __pb_mobile_num=11 __pb_pager_num=13 __pb_fax_num=15 __pb_alias=17 __pb_blanks=(19, 20) __pb_email=21 __pb_image_assign=22 # 3, 4 or 5 depending on if picture ID assigned __pb_image_id=23 # when above is 4, has caller-id wallpaper id __pb_contact_image=24 # Path to "Picture ID" image __pb_date_time_stamp=25 __pb_numbers= ({'home': __pb_home_num}, {'office': __pb_office_num}, {'cell': __pb_mobile_num}, {'pager': __pb_pager_num}, {'fax': __pb_fax_num}) __pb_max_name_len=22 __pb_max_number_len=32 __pb_max_emails=1 __pb_max_email_chars=48 # Not currently used, but shouldn't it be? __pb_max_alias_chars=48 # Not currently used, but shouldn't it be? __wp_photo_dir="digital_cam" __wp_header_bytes=96 # Extra bytes in front of jpg __wp_ts_offset=47 # Timestamp in yyyymmddHHMMSS format starts here __wp_index_file = "nvm/nvm/brew_image" __rt_index_file = "nvm/nvm/brew_melody" __rt_dir = "brew/ringer" __wp_dir = "brew/shared" # The extra "User" entries are a temporary fix to allow round trip integrity of user # assigned ringtones for caller ID. Need to read /nvm/nvm/brew_melody to get true names # of ringtones. builtinringtones=( 'Inactive', 'Bell 1', 'Bell 2', 'Bell 3', 'Bell 4', 'Bell 5', 'Melody 1', 'Melody 2', 'Melody 3', 'Melody 4', 'Melody 5', 'Melody 6', 'Melody 7', 'Melody 8', 'Melody 9', 'Melody 10', 'User 00', 'User 01', 'User 02', 'User 03', 'User 04', 'User 05', 'User 06', 'User 07', 'User 08', 'User 09', 'User 10', 'User 11', 'User 12', 'User 13', 'User 14', 'User 15', 'User 16', 'User 17', 'User 18', 'User 19') allringtones={} # 'type name', 'type index name', 'origin', 'dir path', 'max file name length', 'max file name count' __ringtone_info=('ringtone', 'ringtone-index', 'ringtone', 'brew/ringer', 19, 20) __wallpaper_info=('wallpapers', 'wallpaper-index', 'images', 'mms_image', 19, 10) ## __wallpaper_info=('wallpapers', 'wallpaper-index', 'wallpapers', 'brew/shared', 19, 10) __camerapix_info=('wallpapers', 'wallpaper-index', 'camera', 'digital_cam', 19, 40) __video0_info=('wallpapers', 'wallpaper-index', 'video', 'camcoder0', None, None) __video1_info=('wallpapers', 'wallpaper-index', 'video', 'camcoder1', None, None) def __init__(self, logtarget, commport): "Calls all the constructors and sets initial modes" com_samsung.Phone.__init__(self, logtarget, commport) self.mode=self.MODENONE def getfundamentals(self, results): """Gets information fundamental to interoperating with the phone and UI. Currently this is: - 'uniqueserial' a unique serial number representing the phone - 'groups' the phonebook groups - 'wallpaper-index' map index numbers to names - 'ringtone-index' map index numbers to ringtone names This method is called before we read the phonebook data or before we write phonebook data. """ self.setmode(self.MODEPHONEBOOK) # use a hash of ESN and other stuff (being paranoid) self.log("Retrieving fundamental phone information") self.log("Reading phone serial number") results['uniqueserial']=sha.new(self.get_esn()).hexdigest() # now read groups self.log("Reading group information") g=self.get_groups(self.__groups_range) groups={} for i, g_i in enumerate(g): if len(g_i): groups[i]={ 'name': g_i } results['groups']=groups # getting rintone-index self.setmode(self.MODEBREW) rt_index=RingtoneIndex(self) results['ringtone-index']=rt_index.get() # getting wallpaper-index img_index=ImageIndex(self) results['wallpaper-index']=img_index.get() self.setmode(self.MODEMODEM) self.log("Fundamentals retrieved") return results def get_builtin_ringtone_index(self): # Joe's version r={} for k, n in enumerate(self.builtinringtones): r[k]={ 'name': n, 'origin': 'builtin' } return r def ATget_builtin_ringtone_index(self): # Vic's version using AT command r={} s=self.comm.sendatcommand("#PUGSN?") for rt in s[1:]: this_r = rt.split(",") r[int(this_r[0])] = { 'name': this_r[2], 'origin': 'builtin' } self.allringtones[int(this_r[0])] = this_r[2] return r def get_user_rt_index(self, r): # IDs on phone needed for caller-ID bi_cnt = len(r) rtlist = self.getfilecontents(self.__rt_index_file) offset=0 while offset < (40 * 77): rtid = ord(rtlist[offset+1]) rtlen = ord(rtlist[offset+74]) rtname = rtlist[offset+23:offset+23+rtlen][len(self.__rt_dir)+1:] if rtlen > 0: r[rtid + bi_cnt] = { 'name': rtname, 'origin': 'ringtone' } self.allringtones[rtid + bi_cnt] = rtname offset+=77 return r def get_wallpaper_index(self): # IDs on phone needed for caller-ID wpi = {} imglist = self.getfilecontents(self.__wp_index_file) offset=0 while offset < (30 * 76): imgid = ord(imglist[offset+1]) imglen = ord(imglist[offset+73]) imgname = imglist[offset+22:offset+22+imglen][len(self.__wp_dir)+1:] if imglen > 0: wpi[imgid] = { 'name': imgname, 'origin': 'wallpaper' } offset+=76 return wpi def _get_phonebook(self, result, show_progress=True): """Reads the phonebook data. The L{getfundamentals} information will already be in result.""" self.setmode(self.MODEPHONEBOOK) c=len(self.__phone_entries_range) k=0 pb_book={} for j in self.__phone_entries_range: # print "Getting entry: ", j pb_entry=self.get_phone_entry(j) if len(pb_entry)==self.__pb_atpbokw_field_count: pb_book[k]=self._extract_phone_entry(pb_entry, result) k+=1 # print pb_book[k], i if show_progress: self.progress(j, c, 'Reading '+pb_entry[self.__pb_name]) else: if show_progress: self.progress(j, c, 'Blank entry: %d' % j) self.setmode(self.MODEMODEM) return pb_book def getphonebook(self,result): """Reads the phonebook data. The L{getfundamentals} information will already be in result.""" pb_book=self._get_phonebook(result) result['phonebook']=pb_book return pb_book def _extract_phone_entry(self, entry, fundamentals): res={} # serials res['serials']=[ {'sourcetype': self.serialsname, 'sourceuniqueid': fundamentals['uniqueserial'], 'serial1': entry[self.__pb_entry], 'serial2': entry[self.__pb_mem_loc] }] # only one name res['names']=[ {'full': unicode(entry[self.__pb_name].replace('"', ''), errors='ignore') } ] if len(entry[self.__pb_alias]): res['urls']=[ {'url': entry[self.__pb_alias] } ] # only one category g=fundamentals['groups'] i=int(entry[self.__pb_group]) res['categories']=[ {'category': g[i]['name'] } ] # emails s=entry[self.__pb_email].replace('"', '') if len(s): res['emails']=[ { 'email': s } ] # urls # private # memos # wallpapers if entry[self.__pb_image_assign]=='3': # the image is 'Gallery' with the string 'digital_cam/Imagexxx' res['wallpapers']=[ { 'wallpaper': entry[self.__pb_contact_image].split( "/")[1]+".jpg", 'use': 'call' } ] elif entry[self.__pb_image_assign]=='4': # the entry is an index into wallpaper-index wp_index=fundamentals.get('wallpaper-index', {}) try: res['wallpapers']=[{ 'wallpaper': wp_index[int(entry[self.__pb_image_id])]['name'], 'use': 'call'} ] except: pass # ringtones try: rt_index=fundamentals.get('ringtone-index', {}) res['ringtones']=[ { 'ringtone': rt_index[int(entry[self.__pb_ringtone])]['name'], 'use': 'call' } ] except: res['ringtones']=[ { 'ringtone': self.builtinringtones[0], 'use': 'call' } ] # numbers speed_dial=int(entry[self.__pb_speed_dial]) res['numbers']=[] for k, n in enumerate(self.__pb_numbers): for key in n: if len(entry[n[key]]): if speed_dial==k: res['numbers'].append({ 'number': entry[n[key]], 'type': key, 'speeddial': int(entry[self.__pb_mem_loc])}) else: res['numbers'].append({ 'number': entry[n[key]], 'type': key }) # done return res def savephonebook(self, data): "Saves out the phonebook" pb_book=data['phonebook'] pb_groups=data['groups'] ringtone_index=data.get('ringtone-index', {}) self.log('Validating phonebook entries.') del_entries=[] for k in pb_book: if not self.__validate_entry(pb_book[k], pb_groups, ringtone_index): self.log('Invalid entry, entry will be not be sent.') del_entries.append(k) for k in del_entries: self.log('Deleting entry '+\ nameparser.getfullname(pb_book[k]['names'][0])) del pb_book[k] self._has_duplicate_speeddial(pb_book) self.log('All entries validated') pb_locs=[False]*(len(self.__phone_entries_range)+1) pb_mem=[False]*len(pb_locs) # get existing phonebook from the phone self.log("Getting current phonebook from the phone") current_pb=self._get_phonebook(data) # check and adjust for speeddial changes self.log("Processing speeddial data") for k in pb_book: self._update_speeddial(pb_book[k]) # check for deleted entries and delete them self.setmode(self.MODEPHONEBOOK) self.log("Processing deleted entries") for k1 in current_pb: s1=current_pb[k1]['serials'][0]['serial1'] found=False for k2 in pb_book: if self._same_serial1(s1, pb_book[k2]): found=True break if found: pb_locs[int(current_pb[k1]['serials'][0]['serial1'])]=True pb_mem[int(current_pb[k1]['serials'][0]['serial2'])]=True else: self.log("Deleted item: "+\ nameparser.getfullname(current_pb[k1]['names'][0])) # delete the entries from data and the phone self.progress(0, 10, "Deleting "+\ nameparser.getfullname(\ current_pb[k1]['names'][0])) self._del_phone_entry(current_pb[k1]) mem_idx, loc_idx = self.__pb_max_speeddials, 1 # check for new entries & update serials self.log("Processing new & updated entries") serials_update=[] progresscur, progressmax=1,len(pb_book) for k in pb_book: if progresscur>len(self.__phone_entries_range): self.log('Max phone entries exceeded: '+str(progresscur)) break e=pb_book[k] if not self._has_serial1(e): while pb_locs[loc_idx]: loc_idx += 1 pb_locs[loc_idx]=True sd=self._get_speeddial(e) if sd: mem_index=sd pb_mem[sd]=True else: while pb_mem[mem_idx]: mem_idx -= 1 pb_mem[mem_idx]=True mem_index=mem_idx self._set_speeddial(e, mem_idx) s1={ 'sourcetype': self.serialsname, 'sourceuniqueid': data['uniqueserial'], 'serial1': `loc_idx`, 'serial2': `mem_index` } e['serials'].append(s1) self.log("New entries: Name: "+\ nameparser.getfullname(e['names'][0])+", s1: "+`loc_idx`+", s2: "+`mem_index`) serials_update.append((self._bitpim_serials(e), s1)) self.progress(progresscur, progressmax, "Updating "+\ nameparser.getfullname(e['names'][0])) if not self._write_phone_entry(e, data): self.log("Failed to save entry: "+\ nameparser.getfullname(e['names'][0])) progresscur += 1 data["serialupdates"]=serials_update self.log("Done") self.setmode(self.MODEMODEM) return data # validate a phonebook entry, return True if good, False otherwise def __validate_entry(self, pb_entry, pb_groups, ringtone_index): try: # validate name name=nameparser.getfullname(pb_entry['names'][0]).replace('"', '') if len(name)>self.__pb_max_name_len: name=name[:self.__pb_max_name_len] pb_entry['names'][0].setdefault('full', name) # validate url/alias url=pb_entry.get('urls', [{}])[0].get('url', None) if url is not None: url=re.sub('[,"]', '', url) if len(url)>self.__pb_max_alias_chars: url=url[:self.__pb_max_alias_chars] pb_entry['urls']=[ { 'url': url } ] # validate numbers has_number_or_email=False if pb_entry.has_key('numbers'): for n in pb_entry['numbers']: num=self.phonize(n['number']) if len(num)>self.__pb_max_number_len: num=num[:self.__pb_max_number_len] if num != n['number']: self.log('Updating number from '+n['number']+' to '+num) n['number']=num try: self._get_number_type(n['type']) except: self.log(n['number']+': setting type to home.') n['type']='home' has_number_or_email=True # validate emails if pb_entry.has_key('emails'): if len(pb_entry['emails'])>self.__pb_max_emails: self.log(name+': Each entry can only have %s emails. The rest will be ignored.'%str(self.__pb_max_emails)) email=pb_entry['emails'][0]['email'].replace('"', '') if len(email)>self.__pb_max_email_chars: email=email[:self.__pb_max_email_chars] if email!=pb_entry['emails'][0]['email']: pb_entry['emails'][0]['email']=email has_number_or_email=True if not has_number_or_email: self.log(name+': Entry has no numbers or emails') # return False so this entry can be deleted from the dict return False # validate groups found=False if pb_entry.has_key('categories') and len(pb_entry['categories']): pb_cat=pb_entry['categories'][0]['category'] for k in pb_groups: if pb_groups[k]['name']==pb_cat: found=True break if not found: self.log(name+': category set to '+pb_groups[0]['name']) pb_entry['categories']=[{'category': pb_groups[0]['name']}] # validate ringtones found=False if pb_entry.has_key('ringtones') and len(pb_entry['ringtones']): pb_rt=pb_entry['ringtones'][0]['ringtone'] for k, rt in ringtone_index.items(): if pb_rt==rt['name']: found=True break if not found: rt=ringtone_index[0]['name'] self.log(name+': ringtone set to '+rt) pb_entry['ringtones']=[{'ringtone': rt, 'use': 'call' }] # to to: validate wallpaper # everything's cool return True except: raise def _has_duplicate_speeddial(self, pb_book): b=[False]*(self.__pb_max_speeddials+1) for k in pb_book: try: for k1, kk in enumerate(pb_book[k]['numbers']): sd=kk['speeddial'] if sd and b[sd]: # speed dial is in used, remove this one del pb_book[k]['numbers'][k1]['speeddial'] self.log('speeddial %d exists, deleted'%sd) else: b[sd]=True except: pass return False def _update_speeddial(self, pb_entry): try: s=self._my_serials(pb_entry) s1=int(s['serial2']) sd=self._get_speeddial(pb_entry) if not sd: # speed dial not set, set it to current mem slot self._set_speeddial(pb_entry, s1) elif sd!=s1: # speed dial set to a different slot, mark it self._del_my_serials(pb_entry) except: pass def _get_speeddial(self, pb_entry): n=pb_entry.get('numbers', []) for k in n: try: if k['speeddial']: return k['speeddial'] except: pass return 0 def _set_speeddial(self, pb_entry, sd): if not pb_entry.has_key('numbers'): # no numbers key, just return return for k in pb_entry['numbers']: if k.has_key('speeddial'): k['speeddial']=sd return pb_entry['numbers'][0]['speeddial']=sd def _del_phone_entry(self, pb_entry): try: return self.save_phone_entry(self._my_serials(pb_entry)['serial1']) except: return False def _same_serial1(self, s1, pb_entry): for k in pb_entry['serials']: if k['sourcetype']==self.serialsname and k.has_key('serial1'): return k['serial1']==s1 return False def _has_serial1(self, pb_entry): for k in pb_entry['serials']: if k['sourcetype']==self.serialsname and k.has_key('serial1'): return True return False def _bitpim_serials(self, pb_entry): for k in pb_entry['serials']: if k['sourcetype']=="bitpim": return k return {} def _del_my_serials(self, pb_entry): for k in range(len(pb_entry['serials'])): if pb_entry['serials'][k]['sourcetype']==self.serialsname: del pb_entry['serials'][k] return def _my_serials(self, pb_entry): for k in pb_entry['serials']: if k['sourcetype']==self.serialsname: return k return {} def _get_number_type(self, type): n=self.__pb_numbers for k in range(len(n)): if n[k].has_key(type): return k, n[k][type] raise common.IntegrityCheckFailed(self.desc, "Invalid Number Type") def _write_phone_entry(self, pb_entry, data): # setting up a list to send to the phone, all fields preset to '0' e=['0']*self.__pb_atpbokw_field_count # setting the entry # and memory location # serials=self._my_serials(pb_entry) e[self.__pb_entry]=serials['serial1'] e[self.__pb_mem_loc]=serials['serial2'] # groups/categories groups=data.get('groups', {}) e[self.__pb_group]='0' try: grp_name=pb_entry['categories'][0]['category'] for k, n in groups.items(): if n.get('name', None)==grp_name: e[self.__pb_group]=`k` break except: pass # ringtones ringtone_index=data.get('ringtone-index', {}) e[self.__pb_ringtone]='0' try: rt=pb_entry['ringtones'][0]['ringtone'] for k, n in ringtone_index.items(): if rt==n.get('name', None): e[self.__pb_ringtone]=`k` break except: pass # name & alias/url e[self.__pb_name]='"'+nameparser.getfullname(\ pb_entry['names'][0])+'"' url='' try: url=pb_entry['urls'][0]['url'] except: pass e[self.__pb_alias]=url if len(url): e[self.__pb_alias+1]='0' else: e[self.__pb_alias+1]='' # numbers & speed dial # preset to empty for k in range(len(self.__pb_numbers)): for kk in self.__pb_numbers[k]: e[self.__pb_numbers[k][kk]]='' e[self.__pb_numbers[k][kk]+1]='' speed_dial='0' n=pb_entry.get('numbers', []) for k in range(len(n)): try: nk=n[k] kkk, kk=self._get_number_type(nk['type']) except: # invalid type, default to 'home' nk['type']='home' kkk, kk=0, self.__pb_home_num e[kk],e[kk+1]=self.phonize(nk['number']),'0' try: if nk['speeddial']: speed_dial=`kkk` except: pass e[self.__pb_speed_dial]=speed_dial # email email='' try: email=pb_entry['emails'][0]['email'] except: pass e[self.__pb_email]='"'+email+'"' # wallpaper: phonebook entry "caller id" image # Default: No image assigned e[self.__pb_image_assign]='5' e[self.__pb_image_id]='0' e[self.__pb_contact_image]='""' try: imgName = pb_entry['wallpapers'][0]['wallpaper'] image_index=data.get('wallpaper-index', {}) for k, n in image_index.items(): if imgName==n.get('name', None): if k>self.protocolclass.max_image_entries: # this is a 'Gallery' entry e[self.__pb_image_assign]='3' e[self.__pb_contact_image]='"'+self.__wp_photo_dir+'/'+imgName.split('.')[0]+'"' e[self.__pb_image_id]='0' else: # 'My Image' entry e[self.__pb_image_assign]='4' e[self.__pb_image_id]=`k` e[self.__pb_contact_image]='""' break except: pass for k in self.__pb_blanks: e[k]='' e[self.__pb_date_time_stamp]=self.get_time_stamp() # final check to determine if this entry has changed. # if it has not then do nothing an just return ee=self.get_phone_entry(int(e[self.__pb_entry])) if len(ee)==self.__pb_atpbokw_field_count: # DSV took the " out, need to put them back in for comparison ee[self.__pb_name]='"'+ee[self.__pb_name]+'"' ee[self.__pb_email]='"'+ee[self.__pb_email]+'"' ee[self.__pb_contact_image]='"'+ee[self.__pb_contact_image]+'"' # exclude the timestamp field k=self.__pb_atpbokw_field_count-1 if e[:k]==ee[:k]: return True return self.save_phone_entry('0,'+','.join(e)) def getringtones(self, result): self.setmode(self.MODEBREW) m=FileEntries(self, self.__ringtone_info) rt_info=RingtoneIndex(self).get_download_info() r=m.get_media(result, rt_info) self.setmode(self.MODEMODEM) return r def saveringtones(self, result, merge): self.setmode(self.MODEBREW) m=FileEntries(self, self.__ringtone_info) result['rebootphone']=1 # So we end up back in AT mode r=m.save_media(result, RingtoneIndex(self).get_download_info()) self.setmode(self.MODEMODEM) return r def getwallpapers(self, result): self.setmode(self.MODEBREW) m=FileEntries(self, self.__wallpaper_info) img_info=ImageIndex(self).get_download_info() m.get_media(result, img_info) FileEntries(self, self.__video0_info).get_video(result, 'Video001.avi') r=FileEntries(self, self.__video1_info).get_video(result, 'Video002.avi') self.setmode(self.MODEMODEM) return r def savewallpapers(self, result, merge): self.setmode(self.MODEBREW) m=FileEntries(self, self.__wallpaper_info) r=m.save_media(result, ImageIndex(self).get_download_info()) result['rebootphone']=1 self.setmode(self.MODEMODEM) return r getmemo=parent_phone._getmemo savememo=parent_phone._savememo gettodo=parent_phone._gettodo savetodo=parent_phone._savetodo getsms=parent_phone._getsms savesms=parent_phone._savesms getphoneinfo=parent_phone._getphoneinfo getmedia=None class Profile(com_samsung.Profile): serialsname='scha670' WALLPAPER_WIDTH=128 WALLPAPER_HEIGHT=128 MAX_WALLPAPER_BASENAME_LENGTH=19 WALLPAPER_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789_ ." ## WALLPAPER_CONVERT_FORMAT="bmp" WALLPAPER_CONVERT_FORMAT="jpg" MAX_RINGTONE_BASENAME_LENGTH=19 RINGTONE_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789_ ." RINGTONE_LIMITS= { 'MAXSIZE': 30000 } # use for auto-detection phone_manufacturer='SAMSUNG ELECTRONICS' phone_model='SCH-A670/164' def __init__(self): com_samsung.Profile.__init__(self) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'read', None), # all calendar reading ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('ringtone', 'read', None), # all ringtone reading ('ringtone', 'write', 'OVERWRITE'), ('wallpaper', 'read', None), # all wallpaper reading ('wallpaper', 'write', 'OVERWRITE'), ('memo', 'read', None), # all memo list reading DJP ('memo', 'write', 'OVERWRITE'), # all memo list writing DJP ('todo', 'read', None), # all todo list reading DJP ('todo', 'write', 'OVERWRITE'), # all todo list writing DJP ('sms', 'read', None), # all SMS list reading DJP ) if __debug__: _supportedsyncs+=(('sms', 'write', 'OVERWRITE'),) def convertphonebooktophone(self, helper, data): return data __audio_ext={ 'MIDI': 'mid', 'PMD': 'pmd', 'QCP': 'pmd' } def QueryAudio(self, origin, currentextension, afi): # we don't modify any of these if afi.format in ("MIDI", "PMD", "QCP"): for k,n in self.RINGTONE_LIMITS.items(): setattr(afi, k, n) return currentextension, afi d=self.RINGTONE_LIMITS.copy() d['format']='QCP' return ('pmd', fileinfo.AudioFileInfo(afi, **d)) imageorigins={} imageorigins.update(common.getkv(com_samsung.Profile.stockimageorigins, "images")) imagetargets={} imagetargets.update(common.getkv(com_samsung.Profile.stockimagetargets, "wallpaper", {'width': 128, 'height': 128, 'format': "PNG"})) imagetargets.update(common.getkv(com_samsung.Profile.stockimagetargets, "fullscreen", {'width': 128, 'height': 160, 'format': "PNG"})) imagetargets.update(common.getkv(com_samsung.Profile.stockimagetargets, "pictureid", {'width': 96, 'height': 96, 'format': "JPEG"})) def GetImageOrigins(self): # Note: only return origins that you can write back to the phone return self.imageorigins def GetTargetsForImageOrigin(self, origin): # right now, supporting just 'images' origin if origin=='images': return self.imagetargets class FileEntries: def __init__(self, phone, info): self.__phone=phone self.__file_type, self.__index_type, self.__origin, self.__path, self.__max_file_len, self.__max_file_count=info def get_media(self, result, download_info=None): self.__phone.log('Getting media for type '+self.__file_type) if download_info is None: return self.__get_media_by_dir(result) else: return self.__get_media_by_index(result, download_info) def __get_media_by_dir(self, result): media=result.get(self.__file_type, {}) idx=result.get(self.__index_type, {}) file_cnt, idx_k=0, len(idx) path_len=len(self.__path)+1 try: file_list=self.__phone.listfiles(self.__path) for k in file_list: try: index=k[path_len:] # print k, index media[index]=self.__phone.getfilecontents(k, True) idx[idx_k]={ 'name': index, 'origin': self.__origin } idx_k+=1 file_cnt += 1 except: self.__phone.log('Failed to read file '+k) except: self.__phone.log('Failed to read dir '+self.__path) result[self.__file_type]=media result[self.__index_type]=idx if file_cnt > self.__max_file_count: self.__phone.log('This phone only supports %d %s. %d %s read, weird things may happen.' % \ (self.__max_file_count, self.__file_type, file_cnt, self.__file_type)) return result def __get_media_by_index(self, result, rt_info): media=result.get(self.__file_type, {}) media_index=result.get(self.__index_type, {}) mms_img_path=self.__phone.protocolclass.mms_image_path mms_img_len=len(mms_img_path) for k, m in media_index.items(): file_key=m.get('name', None) file_name=rt_info.get(file_key, None) if file_key is not None and file_name is not None: try : contents=self.__phone.getfilecontents(file_name, True) img_origin=m.get('origin', None) if img_origin=='images': if file_name[:mms_img_len]==mms_img_path: # mms image file, skip the header contents=contents[52:] elif img_origin=='camera': # Camera pix file, need to be touched up # patch code to make it work right now, need to recode m['date']=\ ( int(contents[47:51]), int(contents[51:53]), int(contents[53:55]), int(contents[55:57]), int(contents[57:59])) contents=contents[96:] if contents[-1]=='\xff': contents+='\x00' media[file_key]=contents except: self.__phone.log('Failed to read file '+file_name) if __debug__: raise result[self.__file_type]=media return result def get_video(self, result, video_file_name): if not conversions.helperavailable('bmp2avi'): # helper not available , just bail self.__phone.log('Helper bmp2avi not found, cannot retrieve '+\ video_file_name) return result self.__phone.log('Getting video file '+video_file_name) media=result.get(self.__file_type, {}) idx=result.get(self.__index_type, {}) tmp_avi_name=common.gettempfilename("avi") try: file_list=self.__phone.listfiles(self.__path) except com_brew.BrewNoSuchDirectoryException: file_list={} except: file_list={} if __debug__: raise if not len(file_list): # empty directory return result file_keys=file_list.keys() file_keys.sort(); for k in file_keys: try: conversions.convertjpgtoavi(self.__phone.getfilecontents(k, True)[96:], tmp_avi_name) except: self.__phone.log('Failed to read video files') if __debug__: raise # got the avi file, now prep to send it back if len(idx): idx_k=max(idx.keys())+1 else: idx_k=0 media[video_file_name]=open(tmp_avi_name, 'rb').read() idx[idx_k]={ 'name': video_file_name, 'origin': 'video' } result[self.__file_type]=media result[self.__index_type]=idx try: os.remove(tmp_avi_name) except: pass return result __mms_max_file_name_len=35 def __mms_header(self, img_name, img_type, img_data_len): if len(img_name)>=self.__mms_max_file_name_len: name=img_name[:self.__mms_max_file_name_len-1] else: name=img_name return str('\x06'+str(name)+\ '\x00'*(self.__mms_max_file_name_len-len(name))+\ common.LSBstr32(img_data_len)+chr(img_type)+\ '\x00'*11) def __mms_file_name(self): now = time.localtime(time.time()) return '%02d%02d%02d%02d%02d%02d'%((now[0]%2000,)+now[1:6]) def _to_mms_JPEG(self, img_name, img_data_len): return (self.__mms_file_name(), self.__mms_header(img_name, 0, img_data_len)) def _to_mms_BMP(self, img_name, img_data_len): return (self.__mms_file_name(), self.__mms_header(img_name, 1, img_data_len)) def _to_mms_PNG(self, img_name, img_data_len): return (self.__mms_file_name(), self.__mms_header(img_name, 2, img_data_len)) def _to_mms_GIF(self, img_name, img_data_len): return (self.__mms_file_name(), self.__mms_header(img_name, 3, img_data_len)) def save_media(self, result, dl_info): self.__phone.log('Saving media for type '+self.__file_type) media, idx=result[self.__file_type], result[self.__index_type] # check for files selected for deletion media_names=[media[k]['name'] for k in media] dl_info_keys=dl_info.keys() deleted_keys=[k for k in dl_info_keys if k not in media_names] new_keys=[k for k in media if media[k]['name'] not in dl_info_keys] # deleting files campix_file_path=self.__phone.protocolclass.cam_pix_file_path campix_file_len=len(campix_file_path) for k in deleted_keys: file_name=dl_info[k] if file_name[:campix_file_len]==campix_file_path: # campera pix, do nothing continue self.__phone.log('Deleting file: '+file_name) try: self.__phone.rmfile(file_name) except: self.__phone.log('Failed to delete file: '+file_name) # writing new files # make sure dir exists to write new files if len(new_keys): try: self.__phone.mkdirs(self.__path) # yet another hack self.__phone.mkdirs('brew/shared') except: pass file_count=0 for k in new_keys: n=media[k] origin=n.get('origin', None) if origin is not None and origin != self.__origin: continue if len(n['name']) > self.__max_file_len: self.__phone.log('%s %s name is too long and not sent to phone'% \ (self.__file_type, n['name'])) continue file_count+=1 if file_count>self.__max_file_count: # max # of files reached, bailing out self.__phone.log('This phone only supports %d %s. Save operation stopped.'%\ (self.__max_file_count, self.__file_type)) break if self.__origin=='images': file_info=fileinfo.identify_imagestring(n['data']) if file_info.format in ('JPEG', 'GIF', 'BMP'): # jpeg/gif/bmp file/picture ID files (mms_file_name, file_hdr)=\ getattr(self, '_to_mms_'+file_info.format)( n['name'], len(n['data'])) file_name=self.__path+'/'+mms_file_name file_contents=file_hdr+n['data'] elif file_info.format=='PNG': # wallpaper files file_name='brew/shared/'+n['name'] # try to optimize png image files file_contents=conversions.convertto8bitpng_joe(n['data']) else: # unknown file type, skip it continue else: file_name=self.__path+'/'+n['name'] file_contents=n['data'] self.__phone.log('Writing file: '+file_name) try: self.__phone.writefile(file_name, file_contents) except: self.__phone.log('Failed to write file: '+file_name) media[k]['origin']=self.__origin return result class RingtoneIndex: __builtin_ringtones=( 'Inactive', 'Bell 1', 'Bell 2', 'Bell 3', 'Bell 4', 'Bell 5', 'Melody 1', 'Melody 2', 'Melody 3', 'Melody 4', 'Melody 5', 'Melody 6', 'Melody 7', 'Melody 8', 'Melody 9', 'Melody 10') def __init__(self, phone): self.__phone=phone def get_builtin_index(self): r={} for k, n in enumerate(self.__builtin_ringtones): r[k]={ 'name': n, 'origin': 'builtin' } return r def get_download_index(self): r={} try: rt_idx=self.__phone.protocolclass.ringtones() buf=prototypes.buffer(self.__phone.getfilecontents( \ self.__phone.protocolclass.ringtone_index_file_name)) rt_idx.readfrombuffer(buf, logtitle="Read ringtone download index") idx=len(self.__builtin_ringtones) l=len(self.__phone.protocolclass.ringtone_file_path)+1 for i in range(self.__phone.protocolclass.max_ringtone_entries): e=rt_idx.entry[i] if e.name_len: r[idx+i]={ 'name': e.file_name[l:e.file_name_len], 'origin': 'ringtone' } except: pass return r def get(self): r=self.get_builtin_index() r.update(self.get_download_index()) return r def get_download_info(self): r={} try: rt_idx=self.__phone.protocolclass.ringtones() buf=prototypes.buffer(self.__phone.getfilecontents( \ self.__phone.protocolclass.ringtone_index_file_name)) rt_idx.readfrombuffer(buf, logtitle="Read ringtone download index") l=len(self.__phone.protocolclass.ringtone_file_path)+1 for i in range(self.__phone.protocolclass.max_ringtone_entries): e=rt_idx.entry[i] if e.name_len: r[e.file_name[l:e.file_name_len]]=e.file_name[:e.file_name_len] except: pass return r class ImageIndex: def __init__(self, phone): self.__phone=phone def get_download_index(self): r={} try: # first, read 'My Image' index img_idx=self.__phone.protocolclass.images() buf=prototypes.buffer(self.__phone.getfilecontents( \ self.__phone.protocolclass.image_index_file_name)) img_idx.readfrombuffer(buf, logtitle="Read image download index") l=len(self.__phone.protocolclass.image_file_path)+1 mms_img_path=self.__phone.protocolclass.mms_image_path mms_img_len=len(mms_img_path) for i in range(self.__phone.protocolclass.max_image_entries): e=img_idx.entry[i] if e.name_len and e.file_name_len: if e.file_name[:mms_img_len]==mms_img_path: # this is an mms_image file idx_name=e.name[:e.name_len] else: # other image files idx_name=e.file_name[l:e.file_name_len] r[i]={ 'name': idx_name, 'origin': 'images' } # then read the camera pix image index ('Gallery') # starting index should be max_image_entries+1 idx=self.__phone.protocolclass.max_image_entries+1 try: dir_l=self.__phone.listfiles(\ self.__phone.protocolclass.cam_pix_file_path) except com_brew.BrewNoSuchDirectoryException: dir_l={} l=len(self.__phone.protocolclass.cam_pix_file_path)+1 for f in dir_l: r[idx]={ 'name': f[l:]+'.jpg', 'origin': 'camera' } idx += 1 except: raise return r def get(self): return self.get_download_index() def get_download_info(self): r={} try: # first, 'My Image' entries img_idx=self.__phone.protocolclass.images() buf=prototypes.buffer(self.__phone.getfilecontents( \ self.__phone.protocolclass.image_index_file_name)) img_idx.readfrombuffer(buf, logtitle="Read image download index") l=len(self.__phone.protocolclass.image_file_path)+1 mms_img_path=self.__phone.protocolclass.mms_image_path mms_img_len=len(mms_img_path) for i in range(self.__phone.protocolclass.max_image_entries): e=img_idx.entry[i] if e.name_len and e.file_name_len: if e.file_name[:mms_img_len]==mms_img_path: idx_name=e.name[:e.name_len] else: idx_name=e.file_name[l:e.file_name_len] r[idx_name]=e.file_name[:e.file_name_len] # then 'Gallery' entries try: dir_l=self.__phone.listfiles(\ self.__phone.protocolclass.cam_pix_file_path) except com_brew.BrewNoSuchDirectoryException: dir_l={} l=len(self.__phone.protocolclass.cam_pix_file_path)+1 for f in dir_l: r[f[l:]+'.jpg']=f except: pass return r bitpim-1.0.7+dfsg1/src/phones/p_lgvx9200.p0000644001616600161660000001025411316717273016237 0ustar amuamu### BITPIM ( -*- python -*- ) ### ### Copyright (C) 2009-2010 Nathan Hjelm ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### %{ """Various descriptions of data specific to LG VX9200""" # groups - same as VX-8700 # phonebook - LG Phonebook v1.0 Extended (same as VX-11K) # schedule - same as VX-8550 # memos - same as VX-8550 # sms - same as VX-9100 # index file - same as VX-9700 from p_lgvx11000 import * # SMS index files inbox_index = "dload/inbox.dat" outbox_index = "dload/outbox.dat" drafts_index = "dload/drafts.dat" %} # Call history PACKET call: 4 GPSDATE GPStime # no. of seconds since 0h 1-6-80, based off local time. 4 UINT unk0 # different for each call 4 UINT duration # seconds, not certain about length of this field 49 USTRING {'raiseonunterminatedread': False} number 36 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 1 UINT numberlength # length of phone number 1 UINT status # 0=outgoing, 1=incoming, 2=missed, etc 1 UINT pbnumbertype # 1=cell, 2=home, 3=office, 4=cell2, 5=fax, 6=vmail, 0xFF=not in phone book 4 UINT unk1 # always seems to be 0 2 UINT pbentrynum # entry number in phonebook 75 DATA number_location # set by pay software PACKET callhistory: 4 UINT { 'default': 0x00020000 } unk0 4 UINT numcalls 1 UINT unk1 * LIST {'elementclass': call, 'length': self.numcalls} +calls # Index files PACKET indexentry: 256 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } filename "full pathname" 4 UINT size 4 UINT {'default': 0} +date 4 UINT type 4 UINT {'default': 0} +unk0 PACKET indexfile: "Used for tracking wallpaper and ringtones" * LIST {'elementclass': indexentry, 'createdefault': True} +items # /pim/pbnumber.dat format PACKET pnfileentry: 4 STRING { 'terminator': None, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff'} +entry_tag # some entries don't have this?? if self.entry_tag != '\xff\xff\xff\xff': # this is a valid slot 2 UINT { 'default': 0 } +pad00 # year, month, day, hour, min, sec * PBDateTime {'defaulttocurrenttime': True } +mod_date 6 STRING { 'default': '', 'raiseonunterminatedread': False } +unk0 2 UINT pn_id # 0 based 2 UINT pe_id # 0 based 1 UINT { 'default': 0 } +unknown00 1 UINT pn_order "0-based order of this phone within this contact" 25 LGHEXPN phone_number 1 UINT { 'default': 1 } +unknown01 1 UINT ntype 1 UINT { 'default': 0 } +unknown02 6 USTRING { 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''} +exit_tag # some entries don't have this?? else: # empty slot: all 0xFF 60 DATA { 'default': '\xFF'*60 } +blanks %{ def valid(self): return self.phone_number != None def malformed(self): # malformed (yet valid) entries have been seen on several phones including the VX-8550 and VX-10000 return self.entry_tag != PB_NUMBER_SOR %} PACKET pnfile: * LIST { 'elementclass': pnfileentry, 'createdefault': True, 'length': NUMPHONENUMBERENTRIES } +items # pbgroup.dat # The VX9100 has a fixed size pbgroup.dat, hence the need to fill up with # unused slots. PACKET pbgroup: 34 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' } +name 2 UINT { 'default': 0 } +groupid 1 UINT { 'default': 0 } +user_added "=1 when was added by user -- not really" 2 UINT { 'default': 0 } +unk0 PACKET pbgroups: "Phonebook groups" * LIST {'elementclass': pbgroup, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True} +groups bitpim-1.0.7+dfsg1/src/phones/com_sanyo.py0000644001616600161660000016741411324011474016605 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2007 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_sanyo.py 4785 2010-01-15 07:03:24Z hjelmn $ """Phonebook conversations with Sanyo phones""" # standard modules import re import time import cStringIO import sha import datetime # BitPim modules import com_brew import com_phone import p_sanyo import prototypes import common import conversions import bpcalendar import call_history import sms import todo import helpids numbertypetab=( 'home', 'office', 'cell', 'pager', 'data', 'fax', 'none' ) class SanyoCommandException(Exception): def __init__(self, errnum, str=None): if str is None: str="Sanyo Packet Error 0x%02x" % (errnum,) Exception.__init__(self, str) self.errnum=errnum class SanyoPhonebook: "Talk to a Sanyo Sprint Phone such as SCP-4900, SCP-5300, or SCP-8100" # phone uses Jan 1, 1980 as epoch. Python uses Jan 1, 1970. This is difference # plus a fudge factor of 5 days for no reason I can find _sanyoepochtounix=315532800+432000; pbterminator="\x7e" MODEPHONEBOOK="modephonebook" # can speak the phonebook protocol calendar_defaultringtone=0 calendar_defaultcaringtone=0 calendar_voicenumber=0 phonebook_voicenumber=0 def __init__(self): self.numbertypetab=numbertypetab def get_esn(self): req=self.protocolclass.esnrequest() res=self.sendpbcommand(req, self.protocolclass.esnresponse) return '%08X'%res.esn def _setmodephonebook(self): self.setmode(self.MODEBREW) req=p_sanyo.firmwarerequest() respc=p_sanyo.firmwareresponse try: self.sendpbcommand(req, respc, callsetmode=False) return 1 except com_phone.modeignoreerrortypes: pass try: self.comm.setbaudrate(38400) self.sendpbcommand(req, respc, callsetmode=False) return 1 except com_phone.modeignoreerrortypes: pass return 0 def getmediaindices(self, results): """Get all the media indices @param results: places results in this dict """ # Do all media types in one function to avoid having to scan through # directories more than once ringermedia={} imagemedia={} c=1 for name in self.builtinimages: if name: imagemedia[c]={'name': name, 'origin': 'builtin' } # print c,name c+=1 results['wallpaper-index']=imagemedia c=1 for name in self.builtinringtones: if name: ringermedia[c]={'name': name, 'origin': 'builtin' } # print c,name c+=1 results['ringtone-index']=ringermedia return wallpaper = self.getsanyobuffer(self.protocolclass.wallpaperbuffer) for i in range(0, self.protocolclass._NUMPBSLOTS): if wallpaper.wallpapers[i].flag: print i, wallpaper.wallpapers[i].word1, wallpaper.wallpapers[i].word2 req=self.protocolclass.bufferpartrequest() req.header.command=0xc8 req.header.packettype=0x0c res=self.sendpbcommand(req, self.protocolclass.bufferpartresponse) #req.header.command=0x69 #req.header.packettype=0x0f #res=self.sendpbcommand(req, self.protocolclass.bufferpartresponse) #req.header.command=0x6a #res=self.sendpbcommand(req, self.protocolclass.bufferpartresponse) #req.header.command=0x6b #res=self.sendpbcommand(req, self.protocolclass.bufferpartresponse) req.header.packettype=0x0c req.header.command=0x49 res=self.sendpbcommand(req, self.protocolclass.bufferpartresponse) req.header.command=0xc8 res=self.sendpbcommand(req, self.protocolclass.bufferpartresponse) if not self.serialsname == 'scp4900': # 4900 doesn't like this req.header.command=0xc9 res=self.sendpbcommand(req, self.protocolclass.bufferpartresponse) return def getmediaindex(self, builtins, maps, results, key): """Gets the media (wallpaper/ringtone) index @param builtins: the builtin list on the phone @param results: places results in this dict @param maps: the list of index files and locations @param key: key to place results in """ self.log("Reading "+key) media={} # builtins c=1 for name in builtins: if name: media[c]={'name': name, 'origin': 'builtin' } # print c,name c+=1 results[key]=media return media def getwallpaperindices(self, results): return self.getmediaindex(self.builtinimages, self.imagelocations, results, 'wallpaper-index') def getringtoneindices(self, results): return self.getmediaindex(self.builtinringtones, self.ringtonelocations, results, 'ringtone-index') def getsanyobuffer(self, responseclass): # Read buffer parts and concatenate them together bufres=responseclass() desc="Reading "+bufres.comment data=cStringIO.StringIO() bufp=0 command=bufres.startcommand buffersize=bufres.bufsize req=self.protocolclass.bufferpartrequest() if command==0xd7: req.header.packettype=0x0c # Special Case for 5500 Class phones for offset in range(0, buffersize, req.bufpartsize): self.progress(data.tell(), buffersize, desc) req.header.command=command res=self.sendpbcommand(req, self.protocolclass.bufferpartresponse); data.write(res.data) command+=1 self.progress(1,1,desc) data=data.getvalue() self.log("expected size "+`buffersize`+" actual "+`len(data)`) assert buffersize==len(data) buffer=prototypes.buffer(data) bufres.readfrombuffer(buffer, logtitle="Sanyo buffer response") return bufres def sendsanyobuffer(self, bufreq): comment=bufreq.comment buffer=prototypes.buffer() bufreq.writetobuffer(buffer, logtitle="Send sanyo buffer") buffer=buffer.getvalue() self.log("Writing "+comment+" "+` len(buffer) `+" bytes") desc="Writing "+comment req=self.protocolclass.bufferpartupdaterequest() bufpartsize=req.bufpartsize numblocks=len(buffer)/bufpartsize offset=0 command=bufreq.startcommand if command==0xd7: req.header.packettype=0x0c for offset in range(0, len(buffer), bufpartsize): self.progress(offset/bufpartsize, numblocks, desc) req.header.command=command block=buffer[offset:] l=min(len(block), bufpartsize) block=block[:l] req.data=block command+=1 self.sendpbcommand(req, self.protocolclass.bufferpartresponse, writemode=True) def sendpbcommand(self, request, responseclass, callsetmode=True, writemode=False, numsendretry=0, returnerror=False): if writemode: numretry=3 else: numretry=0 if callsetmode: self.setmode(self.MODEPHONEBOOK) buffer=prototypes.buffer() request.writetobuffer(buffer, logtitle="Sanyo phonebook request") data=buffer.getvalue() firsttwo=data[:2] data=common.pppescape(data+common.crcs(data))+common.pppterminator isendretry=numsendretry while isendretry>=0: try: rdata=self.comm.writethenreaduntil(data, False, common.pppterminator, logreaduntilsuccess=False, numfailures=numretry) break except com_phone.modeignoreerrortypes: if isendretry>0: self.log("Resending request packet...") time.sleep(0.3) else: self.comm.success=False self.mode=self.MODENONE self.raisecommsdnaexception("manipulating the phonebook") isendretry-=1 self.comm.success=True origdata=rdata # sometimes there is junk at the beginning, eg if the user # turned off the phone and back on again. So if there is more # than one 7e in the escaped data we should start after the # second to last one d=rdata.rfind(common.pppterminator,0,-1) if d>=0: self.log("Multiple Sanyo packets in data - taking last one starting at "+`d+1`) self.logdata("Original Sanyo data", origdata, None) rdata=rdata[d+1:] # turn it back to normal data=common.pppunescape(rdata) # Sometimes there is other crap at the beginning. But it might # be a Sanyo error byte. So strip off bytes from the beginning # until the crc agrees, or we get to the first two bytes of the # request packet. d=data.find(firsttwo) crc=data[-3:-1] crcok=False for i in range(0,d+1): trydata=data[i:-3] if common.crcs(trydata)==crc: crcok=True break if not crcok: self.logdata("first two",firsttwo, None) self.logdata("Original Sanyo data", origdata, None) self.logdata("Working on Sanyo data", data, None) raise common.CommsDataCorruption("Sanyo packet failed CRC check", self.desc) res=responseclass() if d>0: if d==i: self.log("Junk at beginning of Sanyo packet, data at "+`d`) self.logdata("Original Sanyo data", origdata, None) self.logdata("Working on Sanyo data", data, None) else: if returnerror: res=self.protocolclass.sanyoerror() else: self.log("Sanyo Error code "+`ord(data[0])`) self.logdata("sanyo phonebook response", data, None) raise SanyoCommandException(ord(data[0])) data=trydata # parse data buffer=prototypes.buffer(data) res.readfrombuffer(buffer, logtitle="sanyo phonebook response") return res def getfundamentals(self, results): """Gets information fundamental to interopating with the phone and UI.""" # use a hash of ESN and other stuff (being paranoid) print "HASRINGPICBUF=",self.protocolclass.HASRINGPICBUF self.log("Retrieving fundamental phone information") self.log("Phone serial number") results['uniqueserial']=sha.new(self.getfilecontents("nvm/$SYS.ESN")).hexdigest() #self.getwallpaperindices(results) #self.getringtoneindices(results) self.getmediaindices(results) self.log("Fundamentals retrieved") return results def sanyosort(self, a, b): "Sanyo sort order. Case insensitive, letters first" x=a[1] y=b[1] # This is right only for first column if(x[0:1].isalpha() and not y[0:1].isalpha()): return -1 if(y[0:1].isalpha() and not x[0:1].isalpha()): return 1 return cmp(x.lower(), y.lower()) def getsms(self, result): gsms = {} self.log("Getting sms entries") req=self.protocolclass.messagerequest() for box in range(2): if box==0: req=self.protocolclass.messagerequest() respc=self.protocolclass.messageresponse else: req=self.protocolclass.messagesentrequest() respc=self.protocolclass.messagesentresponse for slot in range(self.protocolclass.NUMMESSAGESLOTS): req.slot=slot res=self.sendpbcommand(req, respc) if res.entry.dunno4==2: entry=sms.SMSEntry() entry.datetime="%04d%02d%02dT%02d%02d%02d" % ((2000 + res.entry.year, res.entry.month, res.entry.day, res.entry.hour,res.entry.minute, res.entry.second)) if box==0: entry.folder=entry.Folder_Inbox entry._from=res.entry.phonenum else: entry.folder=entry.Folder_Sent entry._to=res.entry.phonenum #entry.add_recipient(res.entry.phonenum,confirmed=True) if res.entry.read==17: entry.read=1 else: entry.read=0 entry.callback=res.entry.callback entry.subject=res.entry.message[:12] self.log(res.entry.message[:8]) if res.entry.priority==100: entry.priority=sms.SMSEntry.Priority_Normal if res.entry.priority==200: entry.priority=sms.SMSEntry.Priority_High entry.text=res.entry.message gsms[entry.id]=entry result['sms']=gsms return result def gettodo(self, result): gtodo = {} self.log("Getting todo entries") req=self.protocolclass.todorequest() for slot in range(self.protocolclass.NUMTODOSLOTS): req.slot=slot res=self.sendpbcommand(req, self.protocolclass.todoresponse) entry=todo.TodoEntry() if res.entry.flag: entry.summary=res.entry.todo if res.entry.priority==2: entry.status=4 if res.entry.priority==0: entry.priority=5 if res.entry.priority==1: entry.priority=1 gtodo[entry.id]=entry result['todo']=gtodo return result def getphonebook(self,result): pbook={} # Get Sort buffer so we know which of the 300 phone book slots # are in use. sortstuff = self.getsanyobuffer(self.protocolclass.pbsortbuffer) # Get the ringer and wall paper assignments if self.protocolclass.HASRINGPICBUF: ringpic = self.getsanyobuffer(self.protocolclass.ringerpicbuffer) speedslot=[] speedtype=[] for i in range(self.protocolclass._NUMSPEEDDIALS): speedslot.append(sortstuff.speeddialindex[i].pbslotandtype & 0xfff) numtype=(sortstuff.speeddialindex[i].pbslotandtype>>12)-1 if(numtype >= 0 and numtype <= len(self.numbertypetab)): speedtype.append(self.numbertypetab[numtype]) else: speedtype.append("") numentries=sortstuff.slotsused self.log("There are %d entries" % (numentries,)) count = 0 # Number of phonebook entries numcount = 0 # Number of phone numbers numemail = 0 # Number of emails numurl = 0 # Number of urls res=self.protocolclass.phonebookentry() usedefaultnum = 'defaultnum' in res.getfields() print "usedefaultnum =",usedefaultnum req=self.protocolclass.phonebookslotrequest() for i in range(0, self.protocolclass._NUMPBSLOTS): if sortstuff.usedflags[i].used: ### Read current entry req.slot = i res=self.sendpbcommand(req, self.protocolclass.phonebookslotresponse) self.log("Read entry "+`i`+" - "+res.entry.name) entry=self.extractphonebookentry(res.entry, result) # Speed dials for j in range(len(speedslot)): if(speedslot[j]==req.slot): for k in range(len(entry['numbers'])): if(entry['numbers'][k]['type']==speedtype[j]): entry['numbers'][k]['speeddial']=j+2 break if self.protocolclass.HASRINGPICBUF: # ringtones if ringpic.ringtones[i].ringtone>0: print res.entry.name,ringpic.ringtones[i].ringtone try: tone=result['ringtone-index'][ringpic.ringtones[i].ringtone]['name'] except: tone=self.serialsname+"Index_"+`ringpic.ringtones[i].ringtone` entry['ringtones']=[{'ringtone': tone, 'use': 'call'}] # wallpapers if ringpic.wallpapers[i].wallpaper>0: try: paper=result['wallpaper-index'][ringpic.wallpapers[i].wallpaper]['name'] except: paper=self.serialsname+"Index_"+`ringpic.wallpapers[i].wallpaper` entry['wallpapers']=[{'wallpaper': paper, 'use': 'call'}] # Set default number, swap with first number if usedefaultnum: firsttype=res.entry.defaultnum-1 if firsttype < len(self.numbertypetab): defaulttype=self.numbertypetab[firsttype] k=0 for j in range(len(entry['numbers'])): if entry['numbers'][j]['type'] == defaulttype: k=j break if k>0: exchange=entry['numbers'][k] for kk in range(k,0,-1): entry['numbers'][kk]=entry['numbers'][kk-1] entry['numbers'][0]=exchange pbook[count]=entry self.progress(count, numentries, res.entry.name) count+=1 numcount+=len(entry['numbers']) if entry.has_key('emails'): numemail+=len(entry['emails']) if entry.has_key('urls'): numurl+=len(entry['urls']) self.progress(numentries, numentries, "Phone book read completed") self.log("Phone contains "+`count`+" contacts, "+`numcount`+" phone numbers, "+`numemail`+" Emails, "+`numurl`+" URLs") result['phonebook']=pbook return pbook def extractphonebookentry(self, entry, fundamentals): """Return a phonebook entry in BitPim format""" res={} # serials res['serials']=[ {'sourcetype': self.serialsname, 'serial1': entry.slot, 'serial2': entry.slotdup, 'sourceuniqueid': fundamentals['uniqueserial']} ] # only one name res['names']=[ {'full': entry.name} ] # only one email if len(entry.email): res['emails']=[ {'email': entry.email} ] # only one url if len(entry.url): res['urls']=[ {'url': entry.url} ] # private res['flags']=[ {'secret': entry.secret } ] # 7 phone numbers res['numbers']=[] numberindex = 0 for type in self.numbertypetab: if len(entry.numbers[numberindex].number): res['numbers'].append({'number': entry.numbers[numberindex].number, 'type': type }) numberindex+=1 return res def _findmediaindex(self, index, name, pbentryname, type): if name is None: return 0 for i in index: if index[i]['name']==name: return i # Not found in index, assume Vision download pos=name.find('_') if(pos>=0): i=int(name[pos+1:]) return i return 0 def makeentry(self, entry, dict): # dict is unused at moment, will be used later to convert string ringtone/wallpaper to numbers?? # This is stolen from com_lgvx4400 and modified for the Sanyo as # we start to develop a vague understanding of what it is for. e=self.protocolclass.phonebookentry() for k in entry: # special treatment for lists if k=='ringtones' or k=='wallpapers' or k=='numbertypes': continue if k=='numbers': for numberindex in range(self.protocolclass.NUMPHONENUMBERS): enpn=self.protocolclass.phonenumber() e.numbers.append(enpn) for i in range(len(entry[k])): numberindex=entry['numbertypes'][i] e.numbers[numberindex].number=entry[k][i] e.numbers[numberindex].number_len=len(e.numbers[numberindex].number) continue # everything else we just set setattr(e,k,entry[k]) return e def writewait(self): """Loop until phone status indicates ready to write""" for i in range(100): req=self.protocolclass.statusrequest() res=self.sendpbcommand(req, self.protocolclass.statusresponse) # print res.flag0, res.ready, res.flag2, res.flag3 if res.ready==res.readyvalue: return time.sleep(0.1) self.log("Phone did not transfer to ready to write state") self.log("Waiting a bit longer and trying anyway") return def savephonebook(self, data): # Overwrite the phonebook in the phone with the data. # As we write the phone book slots out, we need to build up # the indices in the callerid, ringpic and pbsort buffers. # We could save some writing by reading the phonebook slots first # and then only writing those that are different, but all the buffers # would still need to be written. # newphonebook={} self.mode=self.MODENONE self.setmode(self.MODEBREW) # see note in getphonebook in com_lgvx4400 for why this is necessary self.setmode(self.MODEPHONEBOOK) ### ### Create Sanyo buffers and Initialize lists ### sortstuff=self.protocolclass.pbsortbuffer() ringpic=self.protocolclass.ringerpicbuffer() callerid=self.protocolclass.calleridbuffer() res=self.protocolclass.phonebookentry() usedefaultnum = 'defaultnum' in res.getfields() for i in range(self.protocolclass._NUMPBSLOTS): sortstuff.usedflags.append(0) sortstuff.firsttypes.append(0) sortstuff.sortorder.append(0xffff) sortstuff.sortorder2.append(0xffff) sortstuff.emails.append(0xffff) sortstuff.urls.append(0xffff) ringpic.ringtones.append(0) ringpic.wallpapers.append(0) for i in range(self.protocolclass._NUMSPEEDDIALS): sortstuff.speeddialindex.append(0xffff) for i in range(self.protocolclass._NUMLONGNUMBERS): sortstuff.longnumbersindex.append(0xffff) ### ### Initialize mappings ### namemap=[] emailmap=[] urlmap=[] callerid.numentries=0 pbook=data['phonephonebook'] # Get converted phonebook self.log("Putting phone into write mode") req=self.protocolclass.beginendupdaterequest() req.beginend=1 # Start update res=self.sendpbcommand(req, self.protocolclass.beginendupdateresponse, writemode=True) self.writewait() keys=pbook.keys() keys.sort() sortstuff.slotsused=len(keys) sortstuff.numemail=0 sortstuff.numurl=0 progresscur=0 progressmax=len(keys) self.log("Writing %d entries to phone" % (len(keys),)) nlongphonenumbers=0 nonumbercount=0 for ikey in keys: ii=pbook[ikey] slot=ii['slot'] # Or should we just use i for the slot # Will depend on Profile to keep the serial numbers in range progresscur+=1 self.progress(progresscur, progressmax, "Writing "+ii['name']) self.log("Writing entry "+`slot`+" - "+ii['name']) entry=self.makeentry(ii, data) if not usedefaultnum: delattr(entry,'defaultnum') req=self.protocolclass.phonebookslotupdaterequest() req.entry=entry res=self.sendpbcommand(req, self.protocolclass.phonebookslotresponse, writemode=True) # Put entry into newphonebooks entry=self.extractphonebookentry(entry, data) entry['ringtones']=[{'ringtone': ii['ringtone'], 'use': 'call'}] entry['wallpapers']=[{'wallpaper': ii['wallpaper'], 'use': 'call'}] # Accumulate information in and needed for buffers sortstuff.usedflags[slot].used=1 if(len(ii['numbers'])): sortstuff.firsttypes[slot].firsttype=min(ii['numbertypes'])+1 else: if(len(ii['email'])): sortstuff.firsttypes[slot].firsttype=8 nonumbercount+=1 elif(len(ii['url'])): sortstuff.firsttypes[slot].firsttype=9 nonumbercount+=1 else: sortstuff.firsttypes[slot].firsttype=0 # Fill in Caller ID buffer # Want to move this out of this loop. Callerid buffer is 500 numbers, but # can potentially hold 2100 numbers. Would like to preferentially put the # first number for each name in this buffer. # If more than 500 numbers are in phone, the phone won't let you add # any more. So we should probably respect this limit. for i in range(len(ii['numbers'])): nindex=ii['numbertypes'][i] speeddial=ii['speeddials'][i] code=slot+((nindex+1)<<12) if(speeddial>=2 and speeddial<=self.protocolclass._NUMSPEEDDIALS+1): sortstuff.speeddialindex[speeddial-2]=code for k in range(len(entry['numbers'])): if(entry['numbers'][k]['type']==nindex): entry['numbers'][k]['speeddial']=speeddial break if(callerid.numentriesself.protocolclass._LONGPHONENUMBERLEN): if(nlongphonenumbers0: time.sleep(1.0) res=self.sendpbcommand(req, self.protocolclass.sanyosendfileresponse, returnerror=True) if not 'errorcode' in res.getfields(): break waitcount-=1 if waitcount==0: raise SanyoCommandException(res.errorcode) req=self.protocolclass.sanyosendfilesize() req.filesize=len(contents) self.sendpbcommand(req, self.protocolclass.sanyosendfileresponse) req=self.protocolclass.sanyosendfilefragment() packetsize=req.payloadsize # time.sleep(1.0) offset=0 count=0 numblocks=len(contents)/packetsize+1 for offset in range(0, len(contents), packetsize): count+=1 if count % 5==0: self.progress(count,numblocks,desc) req.header.command=offset req.data=contents[offset:min(offset+packetsize,len(contents))] # self.sendpbcommand(req, self.protocolclass.sanyosendfileresponse, numsendretry=2) self.sendpbcommand(req, self.protocolclass.sanyosendfileresponse, writemode=True, returnerror=True) if 'errorcode' in res.getfields(): self.log(name+" not written due to error code "+`res.errorcode`) return False req=self.protocolclass.sanyosendfileterminator() try: res=self.sendpbcommand(req, self.protocolclass.sanyosendfileresponse, writemode=True, returnerror=True) # The returned value in res.header.faset may mean something if 'errorcode' in res.getfields(): self.log(name+" not written due to error code "+`res.errorcode`) return False except: self.log("Exception on writing terminator for file "+name) self.log("Continuing...") end=time.time() if end-start>3: self.log("Wrote "+`len(contents)`+" bytes at "+`int(len(contents)/(end-start))`+" bytes/second") return True def getcalendar(self,result): # Read the event list from the phone. Proof of principle code. # For now, join the event name and location into a single event. # description. # Todo: # Read Call Alarms (reminder to call someone) # Read call history into calendar. # calres={} progressmax=self.protocolclass._NUMEVENTSLOTS+self.protocolclass._NUMCALLALARMSLOTS req=self.protocolclass.eventrequest() count=0 try: reqflag=self.protocolclass.eventslotinuserequest() except: reqflag=0 for i in range(0, self.protocolclass._NUMEVENTSLOTS): self.progress(i,progressmax,"Events") if reqflag: reqflag.slot=i resflag=self.sendpbcommand(reqflag, self.protocolclass.eventslotinuseresponse) if not resflag.flag: continue req.slot = i res=self.sendpbcommand(req, self.protocolclass.eventresponse) if not reqflag: if not res.entry.flag: continue self.log("Read calendar event "+`i`+" - "+res.entry.eventname+", alarm ID "+`res.entry.ringtone`) entry=bpcalendar.CalendarEntry() #entry.pos=i entry.changeserial=res.entry.serial entry.description=res.entry.eventname entry.location=res.entry.location starttime=res.entry.start entry.start=self.decodedate(starttime) entry.end=self.decodedate(res.entry.end) repeat=self._calrepeatvalues[res.entry.period] entry.repeat = self.makerepeat(repeat,entry.start) if res.entry.alarm==0xffffffff: entry.alarm=res.entry.alarmdiff/60 else: alarmtime=res.entry.alarm entry.alarm=(starttime-alarmtime)/60 ringtone=res.entry.ringtone print "ringtone=",ringtone if self.calendar_voicenumber and ringtone == self.calendar_voicenumber: ringtone=self.phonebook_voicenumber if ringtone in self.calendar_tonerange: print "Adjusting ringtone by",-self.calendar_toneoffset ringtone-=self.calendar_toneoffset print "ringtone=",ringtone if ringtone!=self.calendar_defaultringtone: if result['ringtone-index'].has_key(ringtone): entry.ringtone=result['ringtone-index'][ringtone]['name'] entry.snoozedelay=0 calres[entry.id]=entry count+=1 req=self.protocolclass.callalarmrequest() for i in range(0, self.protocolclass._NUMCALLALARMSLOTS): self.progress(self.protocolclass._NUMEVENTSLOTS,progressmax,"Call Alarms") req.slot=i res=self.sendpbcommand(req, self.protocolclass.callalarmresponse) if res.entry.flag and res.entry.date: self.log("Read call alarm entry "+`i`+" - "+res.entry.phonenum+", alarm ID "+`res.entry.ringtone`) entry=bpcalendar.CalendarEntry() #entry.pos=i+self.protocolclass._NUMEVENTSLOTS # Make unique entry.changeserial=res.entry.serial entry.description=res.entry.phonenum starttime=res.entry.date entry.start=self.decodedate(starttime) entry.end=entry.start repeat=self._calrepeatvalues[res.entry.period] entry.repeat = self.makerepeat(repeat,entry.start) entry.alarm=0 if res.entry.ringtone!=self.calendar_defaultcaringtone: entry.ringtone=result['ringtone-index'][res.entry.ringtone]['name'] entry.snoozedelay=0 calres[entry.id]=entry count+=1 result['calendar']=calres return result def makerepeat(self, repeatword, startdate): if repeatword is None: repeat_entry=None else: repeat_entry=bpcalendar.RepeatEntry() if repeatword=='daily': repeat_entry.repeat_type=repeat_entry.daily repeat_entry.interval=1 elif repeatword=='monfri': repeat_entry.repeat_type=repeat_entry.daily repeat_entry.interval=0 elif repeatword=='weekly': repeat_entry.repeat_type=repeat_entry.weekly repeat_entry.interval=1 dow=datetime.date(*startdate[:3]).isoweekday()%7 repeat_entry.dow=1<=0 and entry.id<256: e.serial=entry.id else: e.serial=0 req.entry=e res=self.sendpbcommand(req, respc, writemode=True) # Blank out unused slots if reqflag: req=reqflag req.flag=0 else: e=self.protocolclass.evententry() e.flag=0 # Unused slot e.eventname="" e.eventname_len=0 e.location="" e.location_len=0 e.start=0 e.end=0 e.period=0 e.dom=0 e.ringtone=0 e.alarm=0 e.alarmdiff=0 req=self.protocolclass.eventupdaterequest() req.entry=e for eventslot in range(eventslot,self.protocolclass._NUMEVENTSLOTS): self.progress(eventslot+callslot, progressmax, "Writing unused") self.log("Write calendar event slot "+`eventslot`+ " - Unused") if reqflag: req.slot=eventslot else: req.entry.slot=eventslot res=self.sendpbcommand(req, self.protocolclass.eventresponse, writemode=True) e=self.protocolclass.callalarmentry() e.flag=0 # Unused slot e.name="" e.name_len=0 e.phonenum="" e.phonenum_len=0 e.date=0 e.datedup=0 e.period=0 e.dom=0 e.ringtone=0 e.phonenumbertype=0 e.phonenumberslot=0 req=self.protocolclass.callalarmupdaterequest() req.entry=e for callslot in range(callslot,self.protocolclass._NUMCALLALARMSLOTS): self.progress(eventslot+callslot, progressmax, "Writing unused") self.log("Write calendar call alarm slot "+`callslot`+ " - Unused") req.entry.slot=callslot res=self.sendpbcommand(req, self.protocolclass.callalarmresponse, writemode=True) self.progress(progressmax, progressmax, "Calendar write done") dict['rebootphone'] = True return dict def getcallhistory(self, result): res={} self._readhistory(self.protocolclass.OUTGOING,'Outgoing',res) self._readhistory(self.protocolclass.MISSED,'Missed',res) self._readhistory(self.protocolclass.INCOMING,'Incoming',res) result['call_history']=res return result def _readhistory(self, type, folder, res): req=self.protocolclass.historyrequest() req.type=type for slot in range(self.protocolclass.NUMCALLHISTORY): req.slot=slot call=self.sendpbcommand(req, self.protocolclass.historyresponse) if call.entry.phonenum=='' and call.entry.name=='': continue entry=call_history.CallHistoryEntry() entry.folder=folder entry.name=call.entry.name entry.number=call.entry.phonenum entry.datetime=((call.entry.date)) res[entry.id]=entry def getphoneinfo(self, phone_info): self.log('Getting Phone Info') try: phone_info.append('ESN:', self.get_esn()) phone_info.append('Manufacturer:', 'Sanyo') req=self.protocolclass.lockcoderequest() try: res=self.sendpbcommand(req, self.protocolclass.lockcoderesponse) phone_info.append('Lock Code:', res.lockcode) except: pass req=self.protocolclass.sanyofirmwarerequest() res=self.sendpbcommand(req, self.protocolclass.sanyofirmwareresponse) phone_info.append('Firmware Version:',res.firmware) if 'prl' in res.getfields(): phone_info.append('PRL:', res.prl) if 'phonemodel' in res.getfields(): phone_info.append('Model:', res.phonemodel) else: phone_info.append('Model:', self.desc) req=self.protocolclass.phonenumberrequest() res=self.sendpbcommand(req, self.protocolclass.phonenumberresponse) phone_info.append('Phone Number:', res.myphonenumber) req=self.protocolclass.reconditionedrequest() res=self.sendpbcommand(req, self.protocolclass.reconditionedresponse) if res.reconditioned: recon='Yes' else: recon='No' phone_info.append('Reconditioned:',recon) except: pass return def decodedate(self,val): """Unpack 32 bit value into date/time @rtype: tuple @return: (year, month, day, hour, minute) """ return list(time.gmtime(val+self._sanyoepochtounix)[:5]) _calrepeatvalues={ 0: None, 1: 'daily', 2: 'weekly', 3: 'monthly', 4: 'yearly' } def phonize(str): """Convert the phone number into something the phone understands All digits, P, T, * and # are kept, everything else is removed""" # Note: when looking at phone numbers on the phone, you will see # "H" instead of "P". However, phone saves this internally as "P". return re.sub("[^0-9PT#*]", "", str) class Profile(com_phone.Profile): serialsname='sanyo' WALLPAPER_WIDTH=120 WALLPAPER_HEIGHT=128 OVERSIZE_PERCENTAGE=100 MAX_WALLPAPER_BASENAME_LENGTH=19 WALLPAPER_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 .`~!@#$%^&()-_=+[{]};\'" WALLPAPER_CONVERT_FORMAT="png" MAX_RINGTONE_BASENAME_LENGTH=19 RINGTONE_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 .`~!@#$%^&()-_=+[{]};\'" # which usb ids correspond to us usbids=( ( 0x0474, 0x0701, 1), # VID=Sanyo, PID=4900 internal USB interface ) # which device classes we are. deviceclasses=("modem",) BP_Calendar_Version=3 def __init__(self): self.numbertypetab=numbertypetab com_phone.Profile.__init__(self) # which sync types we deal with _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), ('ringtone', 'write', 'MERGE'), ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), ) ### # Processes phone book for writing to Sanyo. But does not leave phone book # in a bitpim compatible format. Need to understand exactly what bitpim # is expecting the method to do. def convertphonebooktophone(self, helper, data): "Converts the data to what will be used by the phone" results={} slotsused={} for pbentry in data['phonebook']: entry=data['phonebook'][pbentry] serial1=helper.getserial(entry.get('serials', []), self.serialsname, data['uniqueserial'], 'serial1', -1) if(serial1 >= 0 and serial1 < self.protocolclass._NUMPBSLOTS): slotsused[serial1]=1 lastunused=0 # One more than last unused slot for pbentry in data['phonebook']: e={} # entry out entry=data['phonebook'][pbentry] # entry in try: try: e['name']=helper.getfullname(entry.get('names', []),1,1,16)[0] except: e['name']='' e['name_len']=len(e['name']) serial1=helper.getserial(entry.get('serials', []), self.serialsname, data['uniqueserial'], 'serial1', -1) if(serial1 >= 0 and serial1 < self.protocolclass._NUMPBSLOTS): e['slot']=serial1 else: # A new entry. Must find unused slot while(slotsused.has_key(lastunused)): lastunused+=1 if(lastunused >= self.protocolclass._NUMPBSLOTS): raise helper.ConversionFailed() e['slot']=lastunused slotsused[lastunused]=1 e['slotdup']=e['slot'] e['email']=helper.makeone(helper.getemails(entry.get('emails', []),0,1,self.protocolclass._MAXEMAILLEN), "") e['email_len']=len(e['email']) e['url']=helper.makeone(helper.geturls(entry.get('urls', []), 0,1,self.protocolclass._MAXEMAILLEN), "") e['url_len']=len(e['url']) # Could put memo in email or url numbers=helper.getnumbers(entry.get('numbers', []),0,7) e['numbertypes']=[] e['numbers']=[] e['speeddials']=[] unusednumbers=[] # Hold duplicate types here typesused={} defaultnum=0 for num in numbers: typename=num['type'] if(typesused.has_key(typename)): unusednumbers.append(num) continue typesused[typename]=1 for typenum,tnsearch in enumerate(self.numbertypetab): if typename==tnsearch: if defaultnum==0: defaultnum=typenum+1 number=phonize(num['number']) if len(number)>self.protocolclass._MAXNUMBERLEN: # get this number from somewhere sensible # :: TODO:: number is too long and we have to either truncate it or ignore it? number=number[:self.protocolclass._MAXNUMBERLEN] e['numbers'].append(number) if(num.has_key('speeddial')): e['speeddials'].append(num['speeddial']) else: e['speeddials'].append(-1) e['numbertypes'].append(typenum) break # Now stick the unused numbers in unused types trytype=len(self.numbertypetab) for num in unusednumbers: while trytype>0: trytype-=1 if not typesused.has_key(self.numbertypetab[trytype]): break else: break if defaultnum==0: defaultnum=trytype+1 number=phonize(num['number']) if len(number)>self.protocolclass._MAXNUMBERLEN: # get this number from somewhere sensible # :: TODO:: number is too long and we have to either truncate it or ignore it? number=number[:self.protocolclass._MAXNUMBERLEN] e['numbers'].append(number) e['numbertypes'].append(trytype) if(num.has_key('speeddial')): e['speeddials'].append(num['speeddial']) else: e['speeddials'].append(-1) if defaultnum==0: if e['url_len'] > 0: defaultnum=8 elif e['email_len'] > 0: defaultnum=9 e['ringtone']=helper.getringtone(entry.get('ringtones', []), 'call', None) e['wallpaper']=helper.getwallpaper(entry.get('wallpapers', []), 'call', None) e['secret']=helper.getflag(entry.get('flags', []), 'secret', False) e['defaultnum']=defaultnum results[pbentry]=e except helper.ConversionFailed: #self.log("No Free Slot for "+e['name']) print "No Free Slot for "+e['name'] continue data['phonephonebook']=results return data class Phone(SanyoPhonebook,com_phone.Phone,com_brew.BrewProtocol): "Talk to a Sanyo Sprint Phone such as SCP-4900, SCP-5300, or SCP-8100" desc="Sanyo" helpid=helpids.ID_PHONE_SANYOOTHERS imagelocations=() ringtonelocations=() builtinimages=() builtinringtones=() def __init__(self, logtarget, commport): "Call all the contructors and sets initial modes" com_phone.Phone.__init__(self, logtarget, commport) com_brew.BrewProtocol.__init__(self) SanyoPhonebook.__init__(self) self.log("Attempting to contact phone") self.mode=self.MODENONE getwallpapers=None getringtones=None bitpim-1.0.7+dfsg1/src/phones/p_lgvx9400.p0000644001616600161660000000624010645762275016247 0ustar amuamu### BITPIM ### ### Copyright (C) 2007 Nathan Hjelm ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### Testing credits: Erich Volande %{ """Various descriptions of data specific to LG VX9400""" from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx9900 except as noted # below from p_lgvx9900 import * BREW_FILE_SYSTEM = 2 BREW_READ_SIZE = 0x400 BREW_WRITE_SIZE = 0x1F00 # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb CALENDAR_HAS_SEPARATE_END_TIME_AND_DATE=1 # Phonebook stuff RTPathIndexFile='pim/pbRingIdSetAsPath.dat' WPPathIndexFile='pim/pbPictureIdSetAsPath.dat' pb_file_name='pim/pbentry.dat' %} PACKET scheduleevent: 4 UINT pos "position within file, used as an event id" 33 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } description 4 GPSDATE { 'default': GPSDATE.now() } +cdate # creation date 4 GPSDATE { 'default': GPSDATE.now() } +mdate # modification date 4 LGCALDATE start 4 LGCALDATE end_time 4 LGCALDATE end_date 4 LGCALREPEAT repeat # complicated bit mapped field 1 UINT alarmindex_vibrate # LSBit of this set vibrate ON(0)/OFF(1), the 7 MSBits are the alarm index # the alarmindex is the index into the amount of time in advance of the # event to notify the user. It is directly related to the alarmminutes # and alarmhours below, valid values are # 8=2days, 7=1day, 6=2hours, 5=1hour, 4=15mins, 3=10mins, 2=5mins, 1=0mins, 0=NoAlarm 1 UINT ringtone 1 UINT unknown1 1 UINT alarmminutes "a value of 0xFF indicates not set" 1 UINT alarmhours "a value of 0xFF indicates not set" 1 UINT { 'default': 0 } +unknown2 2 UINT { 'default': 0 } +unknown3 256 USTRING { 'default': '', 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } +unknown4 # serial number # field value # 1 000000c9 ?? # 2 some sort of 32-bit serial number or checksum in hex # 3 esn # 4 phone software version 64 USTRING { 'default': '000000c9-00000000-00000000-T9MVZV02', 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } +serial_number PACKET schedulefile: 2 UINT numactiveitems * LIST {'elementclass': scheduleevent} +events PACKET pbfileentry: 4 UINT serial1 2 UINT entrynumber 127 UNKNOWN data1 2 UINT ringtone 2 UINT wallpaper 248 UNKNOWN data2 PACKET pbfile: * LIST { 'elementclass': pbfileentry } items PACKET PathIndexEntry: 255 USTRING { 'encoding': PHONE_ENCODING, 'default': '' } +pathname PACKET PathIndexFile: * LIST { 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES } +items bitpim-1.0.7+dfsg1/src/phones/p_lgvx8800.py0000644001616600161660000024261211042423044016424 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VX8800""" from p_lgvx8550 import * # SMS index files inbox_index = "dload/inbox.dat" outbox_index = "dload/outbox.dat" drafts_index = "dload/drafts.dat" class indexentry(BaseProtogenClass): __fields=['filename', 'size', 'date', 'type', 'unknown'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_filename.writetobuffer(buf) self.__field_size.writetobuffer(buf) try: self.__field_date except: self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_date.writetobuffer(buf) self.__field_type.writetobuffer(buf) try: self.__field_unknown except: self.__field_unknown=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_unknown.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_filename=USTRING(**{'sizeinbytes': 256, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_filename.readfrombuffer(buf) self.__field_size=UINT(**{'sizeinbytes': 4}) self.__field_size.readfrombuffer(buf) self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_date.readfrombuffer(buf) self.__field_type=UINT(**{'sizeinbytes': 4}) self.__field_type.readfrombuffer(buf) self.__field_unknown=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_unknown.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'sizeinbytes': 256, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, "full pathname") def __getfield_size(self): return self.__field_size.getvalue() def __setfield_size(self, value): if isinstance(value,UINT): self.__field_size=value else: self.__field_size=UINT(value,**{'sizeinbytes': 4}) def __delfield_size(self): del self.__field_size size=property(__getfield_size, __setfield_size, __delfield_size, None) def __getfield_date(self): try: self.__field_date except: self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,UINT): self.__field_date=value else: self.__field_date=UINT(value,**{'sizeinbytes': 4, 'default': 0}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, None) def __getfield_type(self): return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,UINT): self.__field_type=value else: self.__field_type=UINT(value,**{'sizeinbytes': 4}) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, None) def __getfield_unknown(self): try: self.__field_unknown except: self.__field_unknown=UINT(**{'sizeinbytes': 4, 'default': 0}) return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UINT): self.__field_unknown=value else: self.__field_unknown=UINT(value,**{'sizeinbytes': 4, 'default': 0}) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def iscontainer(self): return True def containerelements(self): yield ('filename', self.__field_filename, "full pathname") yield ('size', self.__field_size, None) yield ('date', self.__field_date, None) yield ('type', self.__field_type, None) yield ('unknown', self.__field_unknown, None) class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): dict2={'elementclass': indexentry, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class textmemo(BaseProtogenClass): __fields=['cdate', 'text', 'memotime'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemo,self).__init__(**dict) if self.__class__ is textmemo: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemo,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemo,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cdate except: self.__field_cdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now(), 'unique': True }) self.__field_cdate.writetobuffer(buf) self.__field_text.writetobuffer(buf) self.__field_memotime.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now(), 'unique': True }) self.__field_cdate.readfrombuffer(buf) self.__field_text=USTRING(**{'sizeinbytes': 304, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_text.readfrombuffer(buf) self.__field_memotime=LGCALDATE(**{'sizeinbytes': 4}) self.__field_memotime.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cdate(self): try: self.__field_cdate except: self.__field_cdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now(), 'unique': True }) return self.__field_cdate.getvalue() def __setfield_cdate(self, value): if isinstance(value,GPSDATE): self.__field_cdate=value else: self.__field_cdate=GPSDATE(value,**{'sizeinbytes': 4, 'default': GPSDATE.now(), 'unique': True }) def __delfield_cdate(self): del self.__field_cdate cdate=property(__getfield_cdate, __setfield_cdate, __delfield_cdate, None) def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,USTRING): self.__field_text=value else: self.__field_text=USTRING(value,**{'sizeinbytes': 304, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def __getfield_memotime(self): return self.__field_memotime.getvalue() def __setfield_memotime(self, value): if isinstance(value,LGCALDATE): self.__field_memotime=value else: self.__field_memotime=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_memotime(self): del self.__field_memotime memotime=property(__getfield_memotime, __setfield_memotime, __delfield_memotime, None) def iscontainer(self): return True def containerelements(self): yield ('cdate', self.__field_cdate, None) yield ('text', self.__field_text, None) yield ('memotime', self.__field_memotime, None) class textmemofile(BaseProtogenClass): __fields=['itemcount', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemofile,self).__init__(**dict) if self.__class__ is textmemofile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemofile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemofile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_itemcount.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_itemcount=UINT(**{'sizeinbytes': 4}) self.__field_itemcount.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_itemcount(self): return self.__field_itemcount.getvalue() def __setfield_itemcount(self, value): if isinstance(value,UINT): self.__field_itemcount=value else: self.__field_itemcount=UINT(value,**{'sizeinbytes': 4}) def __delfield_itemcount(self): del self.__field_itemcount itemcount=property(__getfield_itemcount, __setfield_itemcount, __delfield_itemcount, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': textmemo }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('itemcount', self.__field_itemcount, None) yield ('items', self.__field_items, None) class msg_record(BaseProtogenClass): __fields=['binary', 'unknown3', 'unknown4', 'unknown6', 'length', 'msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(msg_record,self).__init__(**dict) if self.__class__ is msg_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(msg_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(msg_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_binary.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_length.writetobuffer(buf) try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8800_62, 'length': 220}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_binary=UINT(**{'sizeinbytes': 1}) self.__field_binary.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1}) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 1}) self.__field_unknown4.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 1}) self.__field_unknown6.readfrombuffer(buf) self.__field_length=UINT(**{'sizeinbytes': 1}) self.__field_length.readfrombuffer(buf) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8800_62, 'length': 220}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_binary(self): return self.__field_binary.getvalue() def __setfield_binary(self, value): if isinstance(value,UINT): self.__field_binary=value else: self.__field_binary=UINT(value,**{'sizeinbytes': 1}) def __delfield_binary(self): del self.__field_binary binary=property(__getfield_binary, __setfield_binary, __delfield_binary, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_length(self): return self.__field_length.getvalue() def __setfield_length(self, value): if isinstance(value,UINT): self.__field_length=value else: self.__field_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_length(self): del self.__field_length length=property(__getfield_length, __setfield_length, __delfield_length, None) def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8800_62, 'length': 220}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx8800_62, 'length': 220}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('binary', self.__field_binary, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) yield ('unknown6', self.__field_unknown6, None) yield ('length', self.__field_length, None) yield ('msg', self.__field_msg, None) class _gen_p_lgvx8800_62(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8800_62,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8800_62: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8800_62,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8800_62,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class recipient_record(BaseProtogenClass): __fields=['unknown1', 'number', 'dunno1', 'status', 'timesent', 'timereceived', 'unknown2', 'unknown3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(recipient_record,self).__init__(**dict) if self.__class__ is recipient_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(recipient_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(recipient_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_timereceived.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=DATA(**{'sizeinbytes': 33}) self.__field_unknown1.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 50}) self.__field_number.readfrombuffer(buf) self.__field_dunno1=UNKNOWN(**{'sizeinbytes': 3}) self.__field_dunno1.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_timereceived=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timereceived.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=DATA(**{'sizeinbytes': 54}) self.__field_unknown3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,DATA): self.__field_unknown1=value else: self.__field_unknown1=DATA(value,**{'sizeinbytes': 33}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 50}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UNKNOWN): self.__field_dunno1=value else: self.__field_dunno1=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_timereceived(self): return self.__field_timereceived.getvalue() def __setfield_timereceived(self, value): if isinstance(value,LGCALDATE): self.__field_timereceived=value else: self.__field_timereceived=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timereceived(self): del self.__field_timereceived timereceived=property(__getfield_timereceived, __setfield_timereceived, __delfield_timereceived, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,DATA): self.__field_unknown3=value else: self.__field_unknown3=DATA(value,**{'sizeinbytes': 54}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('number', self.__field_number, None) yield ('dunno1', self.__field_dunno1, None) yield ('status', self.__field_status, None) yield ('timesent', self.__field_timesent, None) yield ('timereceived', self.__field_timereceived, None) yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) class sms_saved(BaseProtogenClass): __fields=['GPStime', 'outbox'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_saved,self).__init__(**dict) if self.__class__ is sms_saved: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_saved,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_saved,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_outbox.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_outbox=sms_out() self.__field_outbox.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_outbox(self): return self.__field_outbox.getvalue() def __setfield_outbox(self, value): if isinstance(value,sms_out): self.__field_outbox=value else: self.__field_outbox=sms_out(value,) def __delfield_outbox(self): del self.__field_outbox outbox=property(__getfield_outbox, __setfield_outbox, __delfield_outbox, None) def iscontainer(self): return True def containerelements(self): yield ('GPStime', self.__field_GPStime, None) yield ('outbox', self.__field_outbox, None) class sms_out(BaseProtogenClass): __fields=['index', 'locked', 'timesent', 'unknown2', 'GPStimesent', 'subject', 'num_msg_elements', 'messages', 'unknown1', 'priority', 'unknown5', 'callback', 'recipients', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_out,self).__init__(**dict) if self.__class__ is sms_out: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_out,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_out,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_GPStimesent.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) self.__field_messages.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_callback.writetobuffer(buf) try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) self.__field_recipients.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown2=UNKNOWN(**{'sizeinbytes': 3}) self.__field_unknown2.readfrombuffer(buf) self.__field_GPStimesent=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStimesent.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 61, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) self.__field_messages.readfrombuffer(buf) self.__field_unknown1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_unknown5=UNKNOWN(**{'sizeinbytes': 16}) self.__field_unknown5.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 73}) self.__field_callback.readfrombuffer(buf) self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) self.__field_recipients.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UNKNOWN): self.__field_unknown2=value else: self.__field_unknown2=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_GPStimesent(self): return self.__field_GPStimesent.getvalue() def __setfield_GPStimesent(self, value): if isinstance(value,GPSDATE): self.__field_GPStimesent=value else: self.__field_GPStimesent=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStimesent(self): del self.__field_GPStimesent GPStimesent=property(__getfield_GPStimesent, __setfield_GPStimesent, __delfield_GPStimesent, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 61, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_messages(self): try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) return self.__field_messages.getvalue() def __setfield_messages(self, value): if isinstance(value,LIST): self.__field_messages=value else: self.__field_messages=LIST(value,**{'elementclass': msg_record, 'length': 7}) def __delfield_messages(self): del self.__field_messages messages=property(__getfield_messages, __setfield_messages, __delfield_messages, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UNKNOWN): self.__field_unknown1=value else: self.__field_unknown1=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UNKNOWN): self.__field_unknown5=value else: self.__field_unknown5=UNKNOWN(value,**{'sizeinbytes': 16}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 73}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_recipients(self): try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) return self.__field_recipients.getvalue() def __setfield_recipients(self, value): if isinstance(value,LIST): self.__field_recipients=value else: self.__field_recipients=LIST(value,**{'elementclass': recipient_record,'length': 9}) def __delfield_recipients(self): del self.__field_recipients recipients=property(__getfield_recipients, __setfield_recipients, __delfield_recipients, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('locked', self.__field_locked, None) yield ('timesent', self.__field_timesent, None) yield ('unknown2', self.__field_unknown2, None) yield ('GPStimesent', self.__field_GPStimesent, None) yield ('subject', self.__field_subject, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('messages', self.__field_messages, None) yield ('unknown1', self.__field_unknown1, None) yield ('priority', self.__field_priority, None) yield ('unknown5', self.__field_unknown5, None) yield ('callback', self.__field_callback, None) yield ('recipients', self.__field_recipients, None) yield ('pad', self.__field_pad, None) class SMSINBOXMSGFRAGMENT(BaseProtogenClass): __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSINBOXMSGFRAGMENT,self).__init__(**dict) if self.__class__ is SMSINBOXMSGFRAGMENT: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSINBOXMSGFRAGMENT,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSINBOXMSGFRAGMENT,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx8800_96, 'length': 220} dict2.update(kwargs) kwargs=dict2 self.__field_msg=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8800_96, 'length': 220}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8800_96, 'length': 220}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx8800_96, 'length': 220}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx8800_96, 'length': 220}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class _gen_p_lgvx8800_96(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8800_96,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8800_96: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8800_96,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8800_96,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class sms_in(BaseProtogenClass): __fields=['unknown1', 'lg_time', 'unknown2', 'GPStime', 'timesent', 'read', 'locked', 'priority', 'dunno1', 'subject', 'dunno2', 'num_msg_elements', 'msglengths', 'msgs', 'dunno3', 'sender_length', 'sender', 'dunno4', 'callback_length', 'callback', 'callback_name', 'callback2', 'PAD', 'bin_header1', 'bin_header2', 'multipartID', 'bin_header3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_in,self).__init__(**dict) if self.__class__ is sms_in: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_in,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_in,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_bin_header1 except: self.__field_bin_header1=UINT(**{ 'default': 0 }) try: self.__field_bin_header2 except: self.__field_bin_header2=UINT(**{ 'default': 0 }) try: self.__field_multipartID except: self.__field_multipartID=UINT(**{ 'default': 0 }) try: self.__field_bin_header3 except: self.__field_bin_header3=UINT(**{ 'default': 0 }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_lg_time.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx8800_113, 'length': 20}) self.__field_msglengths.writetobuffer(buf) try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.writetobuffer(buf) self.__field_dunno3.writetobuffer(buf) self.__field_sender_length.writetobuffer(buf) try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx8800_118, 'length': 49}) self.__field_sender.writetobuffer(buf) self.__field_dunno4.writetobuffer(buf) self.__field_callback_length.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_callback_name.writetobuffer(buf) self.__field_callback2.writetobuffer(buf) self.__field_PAD.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_unknown1.readfrombuffer(buf) self.__field_lg_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_lg_time.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_timesent=SMSDATE(**{'sizeinbytes': 6}) self.__field_timesent.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 1}) self.__field_read.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_dunno1=UNKNOWN(**{'sizeinbytes': 6}) self.__field_dunno1.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False }) self.__field_subject.readfrombuffer(buf) self.__field_dunno2=UNKNOWN(**{'sizeinbytes': 47}) self.__field_dunno2.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx8800_113, 'length': 20}) self.__field_msglengths.readfrombuffer(buf) self.__field_msgs=LIST(**{'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.readfrombuffer(buf) self.__field_dunno3=UNKNOWN(**{'sizeinbytes': 4}) self.__field_dunno3.readfrombuffer(buf) self.__field_sender_length=UINT(**{'sizeinbytes': 1}) self.__field_sender_length.readfrombuffer(buf) self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx8800_118, 'length': 49}) self.__field_sender.readfrombuffer(buf) self.__field_dunno4=UNKNOWN(**{'sizeinbytes': 3}) self.__field_dunno4.readfrombuffer(buf) self.__field_callback_length=UINT(**{'sizeinbytes': 1}) self.__field_callback_length.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 22}) self.__field_callback.readfrombuffer(buf) self.__field_callback_name=USTRING(**{'sizeinbytes': 33}) self.__field_callback_name.readfrombuffer(buf) self.__field_callback2=USTRING(**{'sizeinbytes': 49}) self.__field_callback2.readfrombuffer(buf) self.__field_PAD=UNKNOWN() self.__field_PAD.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UNKNOWN): self.__field_unknown1=value else: self.__field_unknown1=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_lg_time(self): return self.__field_lg_time.getvalue() def __setfield_lg_time(self, value): if isinstance(value,LGCALDATE): self.__field_lg_time=value else: self.__field_lg_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_lg_time(self): del self.__field_lg_time lg_time=property(__getfield_lg_time, __setfield_lg_time, __delfield_lg_time, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,SMSDATE): self.__field_timesent=value else: self.__field_timesent=SMSDATE(value,**{'sizeinbytes': 6}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 1}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UNKNOWN): self.__field_dunno1=value else: self.__field_dunno1=UNKNOWN(value,**{'sizeinbytes': 6}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False }) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UNKNOWN): self.__field_dunno2=value else: self.__field_dunno2=UNKNOWN(value,**{'sizeinbytes': 47}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_msglengths(self): try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx8800_113, 'length': 20}) return self.__field_msglengths.getvalue() def __setfield_msglengths(self, value): if isinstance(value,LIST): self.__field_msglengths=value else: self.__field_msglengths=LIST(value,**{'elementclass': _gen_p_lgvx8800_113, 'length': 20}) def __delfield_msglengths(self): del self.__field_msglengths msglengths=property(__getfield_msglengths, __setfield_msglengths, __delfield_msglengths, None) def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def __getfield_dunno3(self): return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,UNKNOWN): self.__field_dunno3=value else: self.__field_dunno3=UNKNOWN(value,**{'sizeinbytes': 4}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_sender_length(self): return self.__field_sender_length.getvalue() def __setfield_sender_length(self, value): if isinstance(value,UINT): self.__field_sender_length=value else: self.__field_sender_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_sender_length(self): del self.__field_sender_length sender_length=property(__getfield_sender_length, __setfield_sender_length, __delfield_sender_length, None) def __getfield_sender(self): try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx8800_118, 'length': 49}) return self.__field_sender.getvalue() def __setfield_sender(self, value): if isinstance(value,LIST): self.__field_sender=value else: self.__field_sender=LIST(value,**{'elementclass': _gen_p_lgvx8800_118, 'length': 49}) def __delfield_sender(self): del self.__field_sender sender=property(__getfield_sender, __setfield_sender, __delfield_sender, None) def __getfield_dunno4(self): return self.__field_dunno4.getvalue() def __setfield_dunno4(self, value): if isinstance(value,UNKNOWN): self.__field_dunno4=value else: self.__field_dunno4=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_dunno4(self): del self.__field_dunno4 dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None) def __getfield_callback_length(self): return self.__field_callback_length.getvalue() def __setfield_callback_length(self, value): if isinstance(value,UINT): self.__field_callback_length=value else: self.__field_callback_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_length(self): del self.__field_callback_length callback_length=property(__getfield_callback_length, __setfield_callback_length, __delfield_callback_length, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 22}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_callback_name(self): return self.__field_callback_name.getvalue() def __setfield_callback_name(self, value): if isinstance(value,USTRING): self.__field_callback_name=value else: self.__field_callback_name=USTRING(value,**{'sizeinbytes': 33}) def __delfield_callback_name(self): del self.__field_callback_name callback_name=property(__getfield_callback_name, __setfield_callback_name, __delfield_callback_name, None) def __getfield_callback2(self): return self.__field_callback2.getvalue() def __setfield_callback2(self, value): if isinstance(value,USTRING): self.__field_callback2=value else: self.__field_callback2=USTRING(value,**{'sizeinbytes': 49}) def __delfield_callback2(self): del self.__field_callback2 callback2=property(__getfield_callback2, __setfield_callback2, __delfield_callback2, None) def __getfield_PAD(self): return self.__field_PAD.getvalue() def __setfield_PAD(self, value): if isinstance(value,UNKNOWN): self.__field_PAD=value else: self.__field_PAD=UNKNOWN(value,) def __delfield_PAD(self): del self.__field_PAD PAD=property(__getfield_PAD, __setfield_PAD, __delfield_PAD, None) def __getfield_bin_header1(self): try: self.__field_bin_header1 except: self.__field_bin_header1=UINT(**{ 'default': 0 }) return self.__field_bin_header1.getvalue() def __setfield_bin_header1(self, value): if isinstance(value,UINT): self.__field_bin_header1=value else: self.__field_bin_header1=UINT(value,**{ 'default': 0 }) def __delfield_bin_header1(self): del self.__field_bin_header1 bin_header1=property(__getfield_bin_header1, __setfield_bin_header1, __delfield_bin_header1, None) def __getfield_bin_header2(self): try: self.__field_bin_header2 except: self.__field_bin_header2=UINT(**{ 'default': 0 }) return self.__field_bin_header2.getvalue() def __setfield_bin_header2(self, value): if isinstance(value,UINT): self.__field_bin_header2=value else: self.__field_bin_header2=UINT(value,**{ 'default': 0 }) def __delfield_bin_header2(self): del self.__field_bin_header2 bin_header2=property(__getfield_bin_header2, __setfield_bin_header2, __delfield_bin_header2, None) def __getfield_multipartID(self): try: self.__field_multipartID except: self.__field_multipartID=UINT(**{ 'default': 0 }) return self.__field_multipartID.getvalue() def __setfield_multipartID(self, value): if isinstance(value,UINT): self.__field_multipartID=value else: self.__field_multipartID=UINT(value,**{ 'default': 0 }) def __delfield_multipartID(self): del self.__field_multipartID multipartID=property(__getfield_multipartID, __setfield_multipartID, __delfield_multipartID, None) def __getfield_bin_header3(self): try: self.__field_bin_header3 except: self.__field_bin_header3=UINT(**{ 'default': 0 }) return self.__field_bin_header3.getvalue() def __setfield_bin_header3(self, value): if isinstance(value,UINT): self.__field_bin_header3=value else: self.__field_bin_header3=UINT(value,**{ 'default': 0 }) def __delfield_bin_header3(self): del self.__field_bin_header3 bin_header3=property(__getfield_bin_header3, __setfield_bin_header3, __delfield_bin_header3, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('lg_time', self.__field_lg_time, None) yield ('unknown2', self.__field_unknown2, None) yield ('GPStime', self.__field_GPStime, None) yield ('timesent', self.__field_timesent, None) yield ('read', self.__field_read, None) yield ('locked', self.__field_locked, None) yield ('priority', self.__field_priority, None) yield ('dunno1', self.__field_dunno1, None) yield ('subject', self.__field_subject, None) yield ('dunno2', self.__field_dunno2, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('msglengths', self.__field_msglengths, None) yield ('msgs', self.__field_msgs, None) yield ('dunno3', self.__field_dunno3, None) yield ('sender_length', self.__field_sender_length, None) yield ('sender', self.__field_sender, None) yield ('dunno4', self.__field_dunno4, None) yield ('callback_length', self.__field_callback_length, None) yield ('callback', self.__field_callback, None) yield ('callback_name', self.__field_callback_name, None) yield ('callback2', self.__field_callback2, None) yield ('PAD', self.__field_PAD, None) yield ('bin_header1', self.__field_bin_header1, None) yield ('bin_header2', self.__field_bin_header2, None) yield ('multipartID', self.__field_multipartID, None) yield ('bin_header3', self.__field_bin_header3, None) class _gen_p_lgvx8800_113(BaseProtogenClass): 'Anonymous inner class' __fields=['msglength'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8800_113,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8800_113: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8800_113,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8800_113,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_msglength=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msglength.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msglength=UINT(**{'sizeinbytes': 1}) self.__field_msglength.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msglength(self): return self.__field_msglength.getvalue() def __setfield_msglength(self, value): if isinstance(value,UINT): self.__field_msglength=value else: self.__field_msglength=UINT(value,**{'sizeinbytes': 1}) def __delfield_msglength(self): del self.__field_msglength msglength=property(__getfield_msglength, __setfield_msglength, __delfield_msglength, "lengths of individual messages in septets") def iscontainer(self): return True def containerelements(self): yield ('msglength', self.__field_msglength, "lengths of individual messages in septets") class _gen_p_lgvx8800_118(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8800_118,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8800_118: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8800_118,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8800_118,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of senders phone number") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of senders phone number") class sms_quick_text(BaseProtogenClass): __fields=['msgs'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_quick_text,self).__init__(**dict) if self.__class__ is sms_quick_text: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_quick_text,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_quick_text,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx8800_134, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_msgs=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx8800_134, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) self.__field_msgs.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx8800_134, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) self.__field_msgs.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx8800_134, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'elementclass': _gen_p_lgvx8800_134, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def iscontainer(self): return True def containerelements(self): yield ('msgs', self.__field_msgs, None) class _gen_p_lgvx8800_134(BaseProtogenClass): 'Anonymous inner class' __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx8800_134,self).__init__(**dict) if self.__class__ is _gen_p_lgvx8800_134: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx8800_134,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx8800_134,kwargs) if len(args): dict2={'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""} dict2.update(kwargs) kwargs=dict2 self.__field_msg=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) bitpim-1.0.7+dfsg1/src/phones/p_lgvx9600.p0000644001616600161660000000474011235353305016236 0ustar amuamu### BITPIM ( -*- python -*- ) ### ### Copyright (C) 2008 Nathan Hjelm ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lgvx9600.p 4754 2009-08-02 18:11:17Z hjelmn $ %{ """Various descriptions of data specific to LG VX9700""" # groups - same as VX-8700 # phonebook - LG Phonebook v1.0 (same as VX-8550) # schedule - same as VX-8550 # sms - same as VX-9700 # memos - same as VX-8550 # call history - same as VX-9700 from p_lgvx9700 import * # SMS index files inbox_index = "dload/inbox.dat" outbox_index = "dload/outbox.dat" drafts_index = "dload/drafts.dat" # Phonebook favorites favorites_file_name = "pim/pbFavorite.dat" NUMFAVORITES=10 %} # Call history PACKET call: 4 GPSDATE GPStime # no. of seconds since 0h 1-6-80, based off local time. 4 UINT unk0 # different for each call 4 UINT duration # seconds, not certain about length of this field 49 USTRING {'raiseonunterminatedread': False} number 36 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 1 UINT numberlength # length of phone number 1 UINT status # 0=outgoing, 1=incoming, 2=missed, etc 1 UINT pbnumbertype # 1=cell, 2=home, 3=office, 4=cell2, 5=fax, 6=vmail, 0xFF=not in phone book 4 UINT unk1 # always seems to be 0 2 UINT pbentrynum #entry number in phonebook 27 DATA unk2 PACKET callhistory: 4 UINT numcalls 1 UINT unk1 * LIST {'elementclass': call} +calls # Favorites -- added on the Versa (LG VX-9600) PACKET favorite: 2 UINT { 'default': 0 } +unk0 2 UINT { 'default': 0xffff } +pb_index # contact or group id 4 UINT { 'default': 0 } +unk1 4 UINT { 'default': 0x45 } +unk2 %{ def has_pbentry(self): return self.pb_index != 0xffff %} PACKET favorites: 2 UINT { 'default': 0 } +count * LIST { 'elementclass': favorite, 'length': self.count } +items * LIST { 'length': NUMFAVORITES - self.count } pad: 12 DATA { 'default': '\xff'*507 } +dontcare %{ def set_favorite(self, index, entity_index, ispbentry): # index is not used for the VX-9600 if ispbentry and count < NUMFAVORITES: new_favorite = self.favorite () new_favorite.pb_index = entity_index self.items.append (new_favorite) self.count += 1 %} bitpim-1.0.7+dfsg1/src/phones/p_lgvx9700.p0000644001616600161660000000427711152574543016253 0ustar amuamu### BITPIM ( -*- python -*- ) ### ### Copyright (C) 2008 Nathan Hjelm ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lgvx9700.p 4719 2009-03-01 21:08:51Z hjelmn $ %{ """Various descriptions of data specific to LG VX9700""" # groups - same as VX-8700 # phonebook - LG Phonebook v1.0 (same as VX-8550) # schedule - same as VX-8550 from p_lgvx8550 import * # sms - same as VX-9100 from p_lgvx9100 import msg_record,recipient_record,sms_saved,sms_out,SMSINBOXMSGFRAGMENT,sms_in # SMS index files inbox_index = "dload/inbox.dat" outbox_index = "dload/outbox.dat" drafts_index = "dload/drafts.dat" %} # Index files PACKET indexentry: 256 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } filename "full pathname" 4 UINT size 4 UINT {'default': 0} +date 4 UINT type 4 UINT {'default': 0} +unk0 4 UINT {'default': 0} +unk1 4 UINT {'default': 0} +unk2 PACKET indexfile: "Used for tracking wallpaper and ringtones" * LIST {'elementclass': indexentry, 'createdefault': True} +items # Call history PACKET call: 4 GPSDATE GPStime # no. of seconds since 0h 1-6-80, based off local time. 4 UINT unk0 # different for each call 4 UINT duration # seconds, not certain about length of this field 49 USTRING {'raiseonunterminatedread': False} number 36 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 1 UINT numberlength # length of phone number 1 UINT status # 0=outgoing, 1=incoming, 2=missed, etc 1 UINT pbnumbertype # 1=cell, 2=home, 3=office, 4=cell2, 5=fax, 6=vmail, 0xFF=not in phone book 4 UINT unk1 # always seems to be 0 4 UINT pbentrynum #entry number in phonebook 24 DATA unk2 # same as the VX-8560 without the unknown entry at the beginning of the file PACKET callhistory: 4 UINT numcalls 1 UINT unk1 * LIST {'elementclass': call, 'length': self.numcalls} +calls bitpim-1.0.7+dfsg1/src/phones/p_lgtm520.p0000644001616600161660000000465110442561507016136 0ustar amuamu### BITPIM ### ### Copyright (C) 2003 Scott Craig ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### %{ """Various descriptions of data specific to LG TM520""" from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb %} PACKET pbreadentryresponse: "Results of reading one entry" * pbheader header * pbentry entry PACKET pbupdateentryrequest: * pbheader {'command': 0x04, 'flag': 0x01} +header * pbentry entry PACKET pbappendentryrequest: * pbheader {'command': 0x03, 'flag': 0x01} +header * pbentry entry # All STRINGS have raiseonterminatedread as False since the phone does # occassionally leave out the terminator byte PACKET numentry: 33 USTRING {'raiseonunterminatedread': False} number 1 UINT chksum PACKET pbentry: "Results of reading one entry" P UINT {'constant': 1} numberofemails P UINT {'constant': 5} numberofphonenumbers 4 UINT serial1 " == order created" 2 UINT {'constant': 0xf5} +entrysize 4 UINT serial2 "Same as serial1" 1 UINT entrynumber 17 USTRING {'raiseonunterminatedread': False} name 1 BOOL secret 1 UINT default "Default number" * LIST {'length': self.numberofphonenumbers, 'elementclass': numentry, 'createdefault': True} +numbers 1 UINT ringtone "ringtone index for a call, 0x17 for custom" 1 BOOL voicetag 49 USTRING {'raiseonunterminatedread': False} +email PACKET ringentry: 1 UINT index "Phonebook entry number" 40 USTRING {'raiseonunterminatedread': False} name "Path of custom ringer, or default" PACKET ringindex: P UINT {'constant': 199} maxitems * LIST {'length': self.maxitems, 'elementclass': ringentry, 'createdefault': True} +items PACKET scheduleevent: 1 UINT state "02 for an new entry, 01 for a modified entry, 00 for blank entry" 1 UINT pos "position within file, used as an event id" 1 UINT alarm "00 => created, 80 => modified/never been used, B0 => alarm" 4 UINT date 1 UINT repeat "01 => used, 02 => daily" 32 USTRING {'raiseonunterminatedread': False} description # Maximum of 50 entries, first one is the wake-up alarm PACKET schedulefile: * LIST {'length': 50, 'elementclass': scheduleevent} +events bitpim-1.0.7+dfsg1/src/phones/p_lgvx9800.p0000644001616600161660000003326110542342021016231 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lgvx9800.p 3788 2006-12-20 23:15:29Z djpham $ %{ """Various descriptions of data specific to LG VX9800""" from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx8100 except as noted # below from p_lgvx8100 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb # phonebooks constants NUMPHONEBOOKENTRIES=1000 NUMEMAILS=2 NUMPHONENUMBERS=5 pb_file_name='pim/pbentry.dat' wallpaper_id_file_name='pim/pbPictureIdSetAsPath.dat' WALLPAPER_ID_PATH_MAX_LEN=80 # Media type MEDIA_TYPE_RINGTONE=0x0201 MEDIA_TYPE_IMAGE=0x0100 MEDIA_TYPE_SOUND=0x0402 MEDIA_TYPE_SDIMAGE=0x0008 MEDIA_TYPE_SDSOUND=0x000C MEDIA_TYPE_VIDEO=0x0304 MEDIA_RINGTONE_DEFAULT_ICON=1 MEDIA_IMAGE_DEFAULT_ICON=0 MEDIA_VIDEO_DEFAULT_ICON=0 # Calendar parameters NUMCALENDARENTRIES=300 # vx8100 uses a type based index for speed dials instead of positional like the vx4400 SPEEDDIALINDEX=1 MAXCALENDARDESCRIPTION=32 SMS_CANNED_MAX_ITEMS=18 SMS_CANNED_MAX_LENGTH=101 BREW_FILE_SYSTEM=1 PHONE_ENCODING='iso-8859-1' # playlist constants pl_dir='mmc1/my_mp3_playlist' pl_dir_len=len(pl_dir)+1 pl_extension='.pl' pl_extension_len=len(pl_extension) mp3_dir='mmc1/my_mp3' mp3_dir_len=len(mp3_dir)+1 # account for the last '/' mp3_index_file='dload/my_mp3.dat' # need to call stat to get the file time/data broken_filelist_date=True %} PACKET indexentry: 2 UINT index 2 UINT type 80 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } filename "includes full pathname" 4 UINT {'default':0} +icon 4 UINT {'default': 0} +date "i think this is bitfield of the date" 4 UINT dunno 4 UINT {'default': 0} +size "size of the file, can be set to zero" PACKET indexfile: "Used for tracking wallpaper and ringtones" * LIST {'elementclass': indexentry, 'createdefault': True} +items PACKET playlistentry: 84 USTRING { 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } name 4 UINT { 'default': 0 } +date 4 UINT { 'default': 0 } +dunno1 4 UINT { 'default': 0 } +dunno2 4 UINT { 'default': 1 } +dunno3 PACKET playlistfile: * LIST { 'elementclass': playlistentry } +items PACKET pbgroup: "A single group" 23 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } name PACKET pbgroups: "Phonebook groups" * LIST {'elementclass': pbgroup} +groups PACKET pbinforequest: "Random information about the phone" * pbheader {'command': 0x15, 'flag': 0x01} +header 6 UNKNOWN +pad PACKET pbinforesponse: * pbheader header 10 UNKNOWN dunno1 4 UINT firstentry 2 UINT numentries # fields from this point on differ by model and are not decoded correctly * UNKNOWN dunno2 PACKET pbentry: 4 UINT serial1 2 UINT {'constant': 0x01BE, 'constantexception': PhoneBookBusyException} +entrysize 4 UINT serial2 2 UINT entrynumber 23 USTRING {'encoding': PHONE_ENCODING,'raiseonunterminatedread': False} name 2 UINT { 'default': 0 } +group * LIST {'length': NUMEMAILS} +emails: 49 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} email 2 UINT { 'default': 0xffff } +ringtone "ringtone index for a call" 2 UINT { 'default': 0xffff } +msgringtone "ringtone index for a text message" 2 UINT { 'default': 0 } +wallpaper * LIST {'length': NUMPHONENUMBERS} +numbertypes: 1 UINT numbertype * LIST {'length': NUMPHONENUMBERS} +numbers: 49 USTRING {'raiseonunterminatedread': False} number 61 USTRING {'default': '', 'raiseonunterminatedread': False} +memo * UNKNOWN +unknown PACKET pbfileentry: 4 UINT serial1 2 UINT entrynumber 127 UNKNOWN data1 2 UINT wallpaper 76 UNKNOWN data2 PACKET pbfile: * LIST { 'elementclass': pbfileentry } items PACKET wallpaper_id: 80 USTRING { 'terminator': None, 'pad': 0xFF, 'default': "" } +path PACKET wallpaper_id_file: * LIST { 'length': NUMPHONEBOOKENTRIES, 'elementclass': wallpaper_id, 'createdefault': True } +items PACKET pbreadentryresponse: "Results of reading one entry" * pbheader header * pbentry entry PACKET pbupdateentryrequest: * pbheader {'command': 0x04, 'flag': 0x01} +header * pbentry entry PACKET pbappendentryrequest: * pbheader {'command': 0x03, 'flag': 0x01} +header * pbentry entry ### ### The calendar ### # # The calendar consists of one file listing events and an exception # file that lists exceptions. These exceptions suppress a particular # instance of a repeated event. For example, if you setup something # to happen monthly, but changed the 1st february event, then the # schedule will contain the repeating event, and the 1st feb one, # and the suppresions/exceptions file will point to the repeating # event and suppress the 1st feb. # The phone uses the position within the file to give an event an id PACKET scheduleexception: 4 UINT pos "Refers to event id (position in schedule file) that this suppresses" 1 UINT day 1 UINT month 2 UINT year PACKET scheduleexceptionfile: * LIST {'elementclass': scheduleexception} +items PACKET scheduleevent: 4 UINT pos "position within file, used as an event id" 33 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } description 4 LGCALDATE start 4 LGCALDATE end 4 LGCALREPEAT repeat # complicated bit mapped field 1 UINT alarmindex_vibrate #LSBit of this set vibrate ON(0)/OFF(1), the 7 MSBits are the alarm index #the alarmindex is the index into the amount of time in advance of the #event to notify the user. It is directly related to the alarmminutes #and alarmhours below, valid values are # 8=2days, 7=1day, 6=2hours, 5=1hour, 4=15mins, 3=10mins, 2=5mins, 1=0mins, 0=NoAlarm 1 UINT ringtone 1 UINT unknown1 1 UINT alarmminutes "a value of 0xFF indicates not set" 1 UINT alarmhours "a value of 0xFF indicates not set" 1 UINT unknown2 PACKET schedulefile: 2 UINT numactiveitems * LIST {'elementclass': scheduleevent} +events PACKET call: 4 GPSDATE GPStime #no. of seconds since 0h 1-6-80, based off local time. 4 UINT unknown2 # different for each call 4 UINT duration #seconds, not certain about length of this field 49 USTRING {'raiseonunterminatedread': False} number 36 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 2 UINT numberlength # length of phone number 1 UINT pbnumbertype # 1=cell, 2=home, 3=office, 4=cell2, 5=fax, 6=vmail, 0xFF=not in phone book 3 UINT unknown2 # always seems to be 0 2 UINT pbentrynum #entry number in phonebook PACKET callhistory: 4 UINT numcalls 1 UINT unknown1 * LIST {'elementclass': call} +calls ### ### SMS ### # # There are 3 types of SMS records, The inbox, outbox and unsent (pending) # Unlike other records in the phone each message is stored in a separate file # All messages are in the 'sms' directory in the root of the phone # Inbox messages are in files called 'inbox000.dat', the number 000 varies for # each message, typically there are no gaps in the numbering, but gaps can appear # if a message is deleted. # Outbox message are named 'outbox000.dat', unsent messages are named 'sf00.dat', # only two digit file name that suggests a max of 100 message for this type. # Messages in the outbox get updated when the message is received by the recipient, # they contain a delivery flag and a delivery time for all the possible 10 recipients. # The vx8100 supports SMS contatination, this allows you to send text messages that are # longer than 160 characters. The format is different for these type of messages, but # it is supported by this implementation. # The vx8100 also allows you to put small graphics, sounds and animations in a message. # This implementation does not support these, if they are contained in a message they # will be ignored and just the text will be shown when you view the message in bitpim. # The text in the the messages is stored in 7-bit characters, so they have # to be unpacked, in concatinated messages and messages with embeded graphics etc. the # format uses the GSM 03.38 specified format, a good example of this can be found at # "http://www.dreamfabric.com/sms/hello.html". # For simple messages less than 161 characters with no graphics the format is simpler, # the 7-bit characters are just packed into memory in the order they appear in the # message. PACKET recipient_record: 45 DATA unknown1 49 USTRING number 1 UINT status # 1 when sent, 5 when received 4 LGCALDATE timesent 4 LGCALDATE timereceived 1 UINT unknown2 # 0 when not received, set to 1 when received 40 DATA unknown3 PACKET sms_saved: 4 UINT inboxmsg 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone if not self.inboxmsg: * sms_out outbox if self.inboxmsg: * sms_in inbox PACKET msg_record: # the first few fields in this packet have something to do with the type of SMS # message contained. EMS and concatinated text are coded differently than a # simple text message 1 UINT binary # 0=simple text, 1=binary/concatinated 1 UINT unknown3 # 0=simple text, 1=binary/concatinated 1 UINT unknown4 # 0 1 UINT unknown6 # 2=simple text, 9=binary/concatinated 1 UINT length * LIST {'length': 220} +msg: 1 UINT byte "individual byte of message" PACKET sms_out: 4 UINT index # starting from 1, unique 1 UINT unknown1 # zero 1 UINT locked # zero 4 LGCALDATE timesent # time the message was sent 2 UINT unknown2 # zero 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 21 USTRING {'encoding': PHONE_ENCODING} subject 1 UINT unknown4 1 UINT num_msg_elements # up to 7 1 UINT unknown6 * LIST {'elementclass': msg_record, 'length': 7} +messages 1 UINT priority # 0=normal, 1=high 12 DATA unknown7 3 DATA unknown8 # set to 01,00,01 23 USTRING callback * LIST {'elementclass': recipient_record,'length': 10} +recipients * UNKNOWN unknown8 PACKET SMSINBOXMSGFRAGMENT: * LIST {'length': 181} +msg: 1 UINT byte "individual byte of message" PACKET sms_in: 4 UINT msg_index1 4 UINT msg_index2 # equal to the numerical part of the filename eg inbox002.dat 2 UINT unknown2 # set to 0 for simple message and 3 for binary 6 SMSDATE timesent 3 UINT unknown 1 UINT callback_length 38 USTRING callback 1 UINT sender_length * LIST {'length': 38} +sender: 1 UINT byte "individual byte of senders phone number" 12 DATA unknown3 # set to zeros 4 LGCALDATE lg_time # time the message was sent 3 UINT unknown4 # set to zeros 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 4 UINT unknown5 # zero 1 UINT read # 1 if message has been read, 0 otherwise 1 UINT locked # 1 if the message is locked, 0 otherwise 2 UINT unknown8 # zero 1 UINT priority # 1 if the message is high priority, 0 otherwise 6 DATA unknown11 # zero 21 USTRING {'encoding': PHONE_ENCODING} subject 1 UINT bin_header1 # 0 in simple message 1 if the message contains a binary header 1 UINT bin_header2 # 0 in simple message 9 if the message contains a binary header 2 UINT unknown6 # zeros 2 UINT multipartID # multi-part message ID, used for concatinated messages only 2 UINT unknown14 1 UINT bin_header3 # 0 in simple message 2 if the message contains a binary header 1 UINT num_msg_elements # max 20 elements (guessing on max here) * LIST {'length': 20} +msglengths: 1 UINT msglength "lengths of individual messages in septets" * LIST {'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT} +msgs # 181 bytes per message, # 20 messages, 7-bit ascii for simple text. for binary header # first byte is header length not including the length byte # rest depends on content of header, not known at this time. # text alway follows the header although the format it different # than a simple SMS 101 DATA unknown12 59 USTRING {'encoding': PHONE_ENCODING} senders_name * DATA unknown9 # ?? inlcudes senders phone number in ascii PACKET sms_quick_text: * LIST {'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True} +msgs: 101 USTRING {'encoding': PHONE_ENCODING, 'default': ""} +msg # include terminating NULL # Text Memos. LG memo support is weak, it only supports the raw text and none of # the features that other phones support, when you run bitpim you see loads of # options that do not work in the vx8100 on the memo page PACKET textmemo: 301 USTRING { 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } text 4 LGCALDATE memotime # time the memo was writen PACKET textmemofile: 4 UINT itemcount * LIST { 'elementclass': textmemo } +items PACKET firmwareresponse: 1 UINT command 11 USTRING {'terminator': None} date1 8 USTRING {'terminator': None} time1 11 USTRING {'terminator': None} date2 8 USTRING {'terminator': None} time2 8 USTRING {'terminator': None} firmware bitpim-1.0.7+dfsg1/src/phones/p_lgvx9900.p0000644001616600161660000001115711042522524016236 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### Copyright (C) 2006 Caesar Naples ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lgvx9900.p 4647 2008-07-26 04:17:24Z djpham $ %{ """Various descriptions of data specific to LG VX9900""" from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx9800 except as noted # below from p_lgvx9800 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb CALENDAR_HAS_SEPARATE_END_TIME_AND_DATE=1 from p_lgvx8300 import scheduleexception from p_lgvx8300 import scheduleevent from p_lgvx8300 import scheduleexceptionfile from p_lgvx8300 import schedulefile from p_lgvx8300 import indexentry from p_lgvx8300 import indexfile from p_lgvx8300 import call from p_lgvx8300 import callhistory ##from p_lgvx8500 import msg_record ##from p_lgvx8500 import recipient_record ##from p_lgvx8500 import sms_saved ##from p_lgvx8500 import sms_out ##from p_lgvx8500 import SMSINBOXMSGFRAGMENT ##from p_lgvx8500 import sms_in ##from p_lgvx8500 import sms_quick_text %} PACKET textmemo: 304 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } text 4 UINT {'default' : 0x1000000} +dunno 4 LGCALDATE memotime # time the memo was writen LG time PACKET textmemofile: 4 UINT itemcount * LIST { 'elementclass': textmemo } +items # SMS stuff PACKET msg_record: # the first few fields in this packet have something to do with the type of SMS # message contained. EMS and concatinated text are coded differently than a # simple text message 1 UINT binary # 0=simple text, 1=binary/concatinated 1 UINT unknown3 # 0=simple text, 1=binary/concatinated 1 UINT unknown4 # 0 1 UINT unknown6 # 2=simple text, 9=binary/concatinated 1 UINT length * LIST {'length': 220} +msg: 1 UINT byte "individual byte of message" PACKET recipient_record: 33 DATA unknown1 # contains name if available 53 USTRING number 1 UINT status # 1 when sent, 5 when received 4 LGCALDATE timesent 4 LGCALDATE timereceived 1 UINT unknown2 # 0 when not received, set to 1 when received 54 DATA unknown3 PACKET sms_saved: P BOOL { 'default': True } +outboxmsg 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone * sms_out outbox PACKET sms_out: 4 UINT index # starting from 1, unique 1 UINT locked # 1=locked 4 LGCALDATE timesent # time the message was sent 7 UNKNOWN unknown2 # zero 61 USTRING {'encoding': PHONE_ENCODING} subject 1 UINT num_msg_elements # up to 7 * LIST {'elementclass': msg_record, 'length': 7} +messages 18 UNKNOWN unknown1 # Don't know where the priority field is P UINT { 'default': 0 } +priority # 0=normal, 1=high ## 16 UNKNOWN unknown5 73 USTRING callback # Can't figure out the recipient record, so set just 1 for now * LIST {'elementclass': recipient_record,'length': 9} +recipients PACKET SMSINBOXMSGFRAGMENT: * LIST {'length': 220} +msg: # this size could be wrong 1 UINT byte "individual byte of message" PACKET sms_in: 7 UNKNOWN unknown1 4 LGCALDATE lg_time # time the message was sent 1 UINT unknown2 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 6 SMSDATE timesent 1 UINT read 1 UINT locked 1 UINT priority 6 UNKNOWN dunno1 23 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False } subject 47 UNKNOWN dunno2 1 UINT num_msg_elements # max 20 elements (guessing on max here) * LIST {'length': 20} +msglengths: 1 UINT msglength "lengths of individual messages in septets" * LIST {'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT} +msgs 4 UNKNOWN dunno3 1 UINT sender_length * LIST {'length': 49} +sender: 1 UINT byte "individual byte of senders phone number" 3 UNKNOWN dunno4 1 UINT callback_length # 0 for no callback number 22 USTRING callback # this stuff is required by the code, but couldn't figure it out, # so just fake it P UINT { 'default': 0 } +bin_header1 P UINT { 'default': 0 } +bin_header2 P UINT { 'default': 0 } +multipartID P UINT { 'default': 0 } +bin_header3 PACKET sms_quick_text: * LIST { 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True} +msgs: 101 USTRING {'encoding': PHONE_ENCODING, 'default': ""} +msg # include terminating NULL bitpim-1.0.7+dfsg1/src/phones/com_motov3mm.py0000644001616600161660000001367710737325377017257 0ustar amuamu### BITPIM ### ### Copyright (C) 2007 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_motov3mm.py 4541 2008-01-04 03:41:51Z djpham $ """Communicate with Motorola phones using AT commands""" import time import common import com_motov710m as v710m import com_motov3m as v3m import prototypes import p_motov3m import helpids parentphone=v710m.Phone class Phone(parentphone): """ Talk to a Motorola V3mM phone""" desc='Moto-V3mM' helpid=helpids.ID_PHONE_MOTOV3MM protocolclass=p_motov3m serialsname='motov3mm' MODEOBEX='modeobex' builtinringtones=( (0, ('Silent',)), (5, ('Vibe Dot', 'Vibe Dash', 'Vibe Dot Dot', 'Vibe Dot Dash', 'Vibe Pulse')), ) def __init__(self, logtarget, commport): parentphone.__init__(self, logtarget, commport) self.obex=None def _get_wallpaper_index(self): res={} _files=self.listfiles(self.protocolclass.WP_PATH).keys() _files.sort() for _index,_filename in enumerate(_files): _name=common.basename(_filename) if self.protocolclass.valid_wp_filename(_name): res[_index]={ 'name': _name, 'filename': _filename, 'origin': 'images' } return res def _get_ringtone_index(self): res={} # first the builtin ones for _l in self.builtinringtones: _idx=_l[0] for _e in _l[1]: res[_idx]={ 'name': _e, 'origin': 'builtin' } _idx+=1 # now the custome one _buf=prototypes.buffer(self.getfilecontents( self.protocolclass.RT_INDEX_FILE)) _idx_file=self.protocolclass.ringtone_index_file() _idx_file.readfrombuffer(_buf, logtitle='Read ringtone index file') for _entry in _idx_file.items: _filename=self.decode_utf16(_entry.name) _name=common.basename(_filename) if self.protocolclass.valid_rt_filename(_name): res[_entry.index]={ 'name': _name, 'filename': _filename, 'type': _entry.ringtone_type, 'origin': 'ringers' } return res def getringtones(self, fundamentals): """Retrieve ringtones data""" self.log('Reading ringtones') self.setmode(self.MODEOBEX) _res={} _rt_index=fundamentals.get('ringtone-index', {}) for _entry in _rt_index.values(): if _entry.has_key('filename'): try: _res[_entry['name']]=self.obex.getfilecontents( self.protocolclass.OBEXName(_entry['filename'])) except: self.log('Failed to read media file %s'%_entry['filename']) fundamentals['ringtone']=_res self.setmode(self.MODEMODEM) return fundamentals def saveringtones(self, fundamentals, merge): """Save ringtones to the phone""" self.log('Writing ringtones to the phone') try: _del_list, _new_list=self._get_del_new_list('ringtone-index', 'ringtone', merge, fundamentals, frozenset(['ringers'])) # delete files, need to be in OBEX mode self.setmode(self.MODEOBEX) self._del_files('ringtone-index', 'audio', _del_list, fundamentals) # and add new files, need to be in OBEX mode self._add_files('ringtone-index', 'ringtone', 'audio', _new_list, fundamentals) except: if __debug__: self.setmode(self.MODEMODEM) raise self.setmode(self.MODEMODEM) return fundamentals def savewallpapers(self, fundamentals, merge): """Save wallpapers to the phone""" self.log('Writing wallpapers to the phone') try: _del_list, _new_list=self._get_del_new_list('wallpaper-index', 'wallpapers', merge, fundamentals, frozenset(['images'])) # delete files, need to be in OBEX mode self.setmode(self.MODEOBEX) self._del_files('wallpaper-index', 'picture', _del_list, fundamentals) # and add new files, need to be in OBEX mode self._add_files('wallpaper-index', 'wallpapers', 'picture', _new_list, fundamentals) except: if __debug__: self.setmode(self.MODEMODEM) raise self.setmode(self.MODEMODEM) return fundamentals #------------------------------------------------------------------------------- parentprofile=v3m.Profile class Profile(parentprofile): serialsname=Phone.serialsname phone_model='V3mM' _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'read', None), # all calendar reading ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('ringtone', 'read', None), # all ringtone reading ('ringtone', 'write', None), ('ringtone', 'write', 'OVERWRITE'), ('wallpaper', 'read', None), # all wallpaper reading ('wallpaper', 'write', None), ('wallpaper', 'write', 'OVERWRITE'), ('sms', 'read', None), ) bitpim-1.0.7+dfsg1/src/phones/com_lgcx9200.py0000644001616600161660000000761211272357005016722 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2009 Nathan Hjelm ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### """ Communicate with the LG CX9200 cell phone. """ # BitPim modules import common import com_brew import prototypes import com_lgvx9200 import p_lgvx9200 import helpids import sms #------------------------------------------------------------------------------- p_lgcx9200=p_lgvx9200 parentphone=com_lgvx9200.Phone class Phone(parentphone): desc="LG-CX9200 (Keybo 2)" helpid=helpids.ID_PHONE_LGVX9200 protocolclass=p_lgvx9200 serialsname='lgcx9200' my_model='CX9200' builtinringtones= ('Low Beep Once', 'Low Beeps', 'Loud Beep Once', 'Loud Beeps', 'Door Bell') + \ tuple(['Ringtone '+`n` for n in range(1,18)]) + ('No Ring',) def setDMversion(self): self._DMv5=False self._DMv6=True self._timeout=5 # Assume a quick timeout on newer phones # - getgroups - same as LG VX-8700 # - getwallpaperindices - LGUncountedIndexedMedia # - getringtoneindices - LGUncountedIndexedMedia # - DM Version - 6 # - phonebook - LG Phonebook v1 Extended # - SMS - same dir structure as the VX-8800 #------------------------------------------------------------------------------- parentprofile=com_lgvx9200.Profile class Profile(parentprofile): BP_Calendar_Version=3 protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_model=Phone.my_model phone_manufacturer='LG Electronics Inc' # inside screen resoluation WALLPAPER_WIDTH = 320 WALLPAPER_HEIGHT = 240 imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images(sd)")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video(sd)")) # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", {'width': 190, 'height': 96, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 320, 'height': 240, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 320, 'height': 240, 'format': "JPEG"})) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading ('memo', 'read', None), # all memo list reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('sms', 'write', 'OVERWRITE'), # all SMS list writing ('memo', 'write', 'OVERWRITE'), # all memo list writing ## ('playlist', 'read', 'OVERWRITE'), ## ('playlist', 'write', 'OVERWRITE'), ('t9_udb', 'write', 'OVERWRITE'), ) if __debug__: _supportedsyncs+=( ('t9_udb', 'read', 'OVERWRITE'), ) bitpim-1.0.7+dfsg1/src/phones/p_samsungsphn200.py0000644001616600161660000005260010466234100017712 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Proposed descriptions of data usign AT commands""" from prototypes import * from p_samsung_packet import * # We use LSB for all integer like fields in diagnostic mode UINT=UINTlsb BOOL=BOOLlsb # NUMPHONEBOOKENTRIES=239 NUMPHONENUMBERS=6 NUMCALENDAREVENTS=70 MAXNUMBERLEN=32 NUMTODOENTRIES=20 NUMGROUPS=4 class pbentry(BaseProtogenClass): __fields=['url', 'birthday', 'slot', 'name', 'dunno1', 'numbers'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_url except: self.__field_url=USTRING(**{'default': ""}) try: self.__field_birthday except: self.__field_birthday=CSVDATE(**{'default': ""}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_name.writetobuffer(buf) try: self.__field_dunno1 except: self.__field_dunno1=CSVINT(**{'default': 255}) self.__field_dunno1.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': phonenumber}) self.__field_numbers.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=CSVINT() self.__field_slot.readfrombuffer(buf) self.__field_name=CSVSTRING() self.__field_name.readfrombuffer(buf) self.__field_dunno1=CSVINT(**{'default': 255}) self.__field_dunno1.readfrombuffer(buf) self.__field_numbers=LIST(**{'elementclass': phonenumber}) self.__field_numbers.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_url(self): try: self.__field_url except: self.__field_url=USTRING(**{'default': ""}) return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,USTRING): self.__field_url=value else: self.__field_url=USTRING(value,**{'default': ""}) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_birthday(self): try: self.__field_birthday except: self.__field_birthday=CSVDATE(**{'default': ""}) return self.__field_birthday.getvalue() def __setfield_birthday(self, value): if isinstance(value,CSVDATE): self.__field_birthday=value else: self.__field_birthday=CSVDATE(value,**{'default': ""}) def __delfield_birthday(self): del self.__field_birthday birthday=property(__getfield_birthday, __setfield_birthday, __delfield_birthday, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,CSVINT): self.__field_slot=value else: self.__field_slot=CSVINT(value,) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, "Internal Slot") def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,CSVSTRING): self.__field_name=value else: self.__field_name=CSVSTRING(value,) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_dunno1(self): try: self.__field_dunno1 except: self.__field_dunno1=CSVINT(**{'default': 255}) return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,CSVINT): self.__field_dunno1=value else: self.__field_dunno1=CSVINT(value,**{'default': 255}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': phonenumber}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'elementclass': phonenumber}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def iscontainer(self): return True def containerelements(self): yield ('url', self.__field_url, None) yield ('birthday', self.__field_birthday, None) yield ('slot', self.__field_slot, "Internal Slot") yield ('name', self.__field_name, None) yield ('dunno1', self.__field_dunno1, None) yield ('numbers', self.__field_numbers, None) class phonenumber(BaseProtogenClass): __fields=['last_number', 'numbertype', 'number', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonenumber,self).__init__(**dict) if self.__class__ is phonenumber: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonenumber,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonenumber,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_last_number except: self.__field_last_number=BOOL(**{'default': True}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_numbertype except: self.__field_numbertype=CSVINT() self.__field_numbertype.writetobuffer(buf) if not self.last_number: try: self.__field_number except: self.__field_number=CSVSTRING(**{'quotechar': None, 'default': ""}) self.__field_number.writetobuffer(buf) if self.last_number: try: self.__field_number except: self.__field_number=CSVSTRING(**{'quotechar': None, 'default': "", 'terminator': None}) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numbertype=CSVINT() self.__field_numbertype.readfrombuffer(buf) if not self.last_number: self.__field_number=CSVSTRING(**{'quotechar': None, 'default': ""}) self.__field_number.readfrombuffer(buf) if self.last_number: self.__field_number=CSVSTRING(**{'quotechar': None, 'default': "", 'terminator': None}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_last_number(self): try: self.__field_last_number except: self.__field_last_number=BOOL(**{'default': True}) return self.__field_last_number.getvalue() def __setfield_last_number(self, value): if isinstance(value,BOOL): self.__field_last_number=value else: self.__field_last_number=BOOL(value,**{'default': True}) def __delfield_last_number(self): del self.__field_last_number last_number=property(__getfield_last_number, __setfield_last_number, __delfield_last_number, None) def __getfield_numbertype(self): try: self.__field_numbertype except: self.__field_numbertype=CSVINT() return self.__field_numbertype.getvalue() def __setfield_numbertype(self, value): if isinstance(value,CSVINT): self.__field_numbertype=value else: self.__field_numbertype=CSVINT(value,) def __delfield_numbertype(self): del self.__field_numbertype numbertype=property(__getfield_numbertype, __setfield_numbertype, __delfield_numbertype, None) def __getfield_number(self): try: self.__field_number except: self.__field_number=CSVSTRING(**{'quotechar': None, 'default': ""}) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,CSVSTRING): self.__field_number=value else: self.__field_number=CSVSTRING(value,**{'quotechar': None, 'default': ""}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_number(self): try: self.__field_number except: self.__field_number=CSVSTRING(**{'quotechar': None, 'default': "", 'terminator': None}) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,CSVSTRING): self.__field_number=value else: self.__field_number=CSVSTRING(value,**{'quotechar': None, 'default': "", 'terminator': None}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('last_number', self.__field_last_number, None) yield ('numbertype', self.__field_numbertype, None) if not self.last_number: yield ('number', self.__field_number, None) if self.last_number: yield ('number', self.__field_number, None) class phonebookslotrequest(BaseProtogenClass): __fields=['command', 'slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebookslotrequest,self).__init__(**dict) if self.__class__ is phonebookslotrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebookslotrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebookslotrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKR='}) self.__field_command.writetobuffer(buf) try: self.__field_slot except: self.__field_slot=CSVINT(**{'terminator': None}) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKR='}) self.__field_command.readfrombuffer(buf) self.__field_slot=CSVINT(**{'terminator': None}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKR='}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '#PBOKR='}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_slot(self): try: self.__field_slot except: self.__field_slot=CSVINT(**{'terminator': None}) return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,CSVINT): self.__field_slot=value else: self.__field_slot=CSVINT(value,**{'terminator': None}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, "Internal Slot") def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('slot', self.__field_slot, "Internal Slot") class phonebookslotresponse(BaseProtogenClass): __fields=['command', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebookslotresponse,self).__init__(**dict) if self.__class__ is phonebookslotresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebookslotresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebookslotresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '#PBOKR:'}) self.__field_command.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '#PBOKR:'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('entry', self.__field_entry, None) class phonebookslotupdaterequest(BaseProtogenClass): __fields=['command', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebookslotupdaterequest,self).__init__(**dict) if self.__class__ is phonebookslotupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebookslotupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebookslotupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKW='}) self.__field_command.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKW='}) self.__field_command.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKW='}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '#PBOKW='}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('entry', self.__field_entry, None) bitpim-1.0.7+dfsg1/src/phones/com_samsungscha870.py0000644001616600161660000004301110743003111020202 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### Copyright (C) 2006 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_samsungscha870.py 4569 2008-01-15 01:03:05Z djpham $ """Communicate with the Samsung SCH-A870 Phone""" # System Models # BitPim modules import bpcalendar import common import helpids import com_samsungscha950 as com_a950 import p_samsungscha950 as p_a950 import p_samsungscha870 as p_a870 import prototypes parentphone=com_a950.Phone class Phone(parentphone): desc='SCH-A870' helpid=helpids.ID_PHONE_SAMSUNGSCHA870 protocolclass=p_a870 serialsname='scha870' # Detection stuff my_model='SCH-A870/187' my_manufacturer='SAMSUNG' detected_model='A870' ringtone_noring_range='range_tones_preloaded_el_15' ringtone_default_range='range_tones_preloaded_el_01' builtin_ringtones={ 'VZW Default Tone': 0x52, 'Melody 1': 0x56, 'Melody 2': 0x57, 'Melody 3': 0x58, 'Melody 4': 0x59, 'Melody 5': 0x5A, 'Melody 6': 0x5B, 'Bell 1': 0x53, 'Bell 2': 0x54, 'Bell 3': 0x55, 'Beep Once': 0x93, 'No Ring': 0xC2, 'Default': None, } builtin_sounds={ 'Clapping': 0x5C, 'Crowd': 0x5D, 'Happy Birthday': 0x5E, 'Rain Forest': 0x5F, 'Train': 0x60, # same as ringtones ?? } builtin_wallpapers={ 'No Picture': None, } def __init__(self, logtarget, commport): "Calls all the constructors and sets initial modes" parentphone.__init__(self, logtarget, commport) global PBEntry, CalendarEntry self.pbentryclass=PBEntry self.calendarclass=CalendarEntry def getfilecontents(self, filename, use_cache=False): if filename and filename[0]!='/': return parentphone.getfilecontents(self, '/'+filename, use_cache) return parentphone.getfilecontents(self, filename, use_cache) def get_groups(self): _res={} _buf=prototypes.buffer(self.getfilecontents(self.protocolclass.GROUP_INDEX_FILE_NAME)) _index_file=self.protocolclass.GroupIndexFile() _index_file.readfrombuffer(_buf) for _entry in _index_file.items: if _entry.name: _res[_entry.index-1]={ 'name': _entry.name } return _res def _get_dir_index(self, idx, result, pathname, origin, excludenames=()): # build the index list by listing contents of the specified dir for _path in self.listfiles(pathname): _file=common.basename(_path) if _file in excludenames: continue result[idx]={ 'name': _file, 'filename': _path, 'origin': origin, } idx+=1 return idx def get_ringtone_index(self): _res={} _idx=self._get_builtin_ringtone_index(0, _res) _idx=self._get_dir_index(_idx, _res, self.protocolclass.RT_PATH, 'ringers', self.protocolclass.RT_EXCLUDED_FILES) _idx=self._get_dir_index(_idx, _res, self.protocolclass.SND_PATH, 'sounds', self.protocolclass.SND_EXCLUDED_FILES) return _res def _get_file_wallpaper_index(self, idx, result): try: _buf=prototypes.buffer(self.getfilecontents(self.protocolclass.PIC_INDEX_FILE_NAME)) except (com_brew.BrewNoSuchFileException, com_brew.BrewBadPathnameException, com_brew.BrewFileLockedException, com_brew.BrewAccessDeniedException): return idx except: if __debug__: raise return idx _index_file=self.protocolclass.PictureIndexFile() _index_file.readfrombuffer(_buf) for _entry in _index_file.items: result[idx]={ 'name': _entry.name, 'filename': _entry.pathname, 'origin': 'images', } idx+=1 return idx def get_wallpaper_index(self): _res={} _idx=self._get_builtin_wallpaper_index(0, _res) _idx=self._get_file_wallpaper_index(_idx, _res) return _res def _get_del_new_list(self, index_key, media_key, merge, fundamentals, origins): """Return a list of media being deleted and being added""" _index=fundamentals.get(index_key, {}) _media=fundamentals.get(media_key, {}) _index_file_list=[_entry['name'] for _entry in _index.values() \ if _entry.has_key('filename') and \ _entry.get('origin', None) in origins ] _bp_file_list=[_entry['name'] for _entry in _media.values() \ if _entry.get('origin', None) in origins ] if merge: # just add the new files, don't delete anything _del_list=[] _new_list=_bp_file_list else: # Delete specified files and add everything _del_list=[x for x in _index_file_list if x not in _bp_file_list] _new_list=_bp_file_list return _del_list, _new_list def saveringtones(self, fundamentals, merge): """Save ringtones to the phone""" self.log('Writing ringtones to the phone') try: _del_list, _new_list=self._get_del_new_list('ringtone-index', 'ringtone', merge, fundamentals, frozenset(('ringers', 'sounds'))) if __debug__: self.log('Delete list: '+','.join(_del_list)) self.log('New list: '+','.join(_new_list)) self._replace_files('ringtone-index', 'ringtone', _new_list, fundamentals) self._add_files('ringtone-index', 'ringtone', _new_list, fundamentals) fundamentals['rebootphone']=True except: if __debug__: raise return fundamentals def _add_files(self, index_key, media_key, new_list, fundamentals): """Add new file using BEW""" _index=fundamentals.get(index_key, {}) _media=fundamentals.get(media_key, {}) _files_added=[] for _file in new_list: _data=self._item_from_index(_file, 'data', _media) if not _data: self.log('Failed to write file %s due to no data'%_file) continue if self._item_from_index(_file, None, _index) is None: # new file _origin=self._item_from_index(_file, 'origin', _media) if _origin=='ringers': _path=self.protocolclass.RT_PATH elif _origin=='sounds': _path=self.protocolclass.SND_PATH elif _origin=='images': _path=self.protocolclass.PIC_PATH else: selg.log('File %s has unknown origin, skip!'%_file) continue _file_name=_path+'/'+_file try: self.writefile(_file_name, _data) _files_added.append({ 'filename': _file, 'filesize': len(_data) }) except: self.log('Failed to write file '+_file_name) if __debug__: raise return _files_added def _update_wp_index_file(self, filelist): # update the wp/picture index file with list of new files if not filelist: # no new files to update, bail return _index_file=self.protocolclass.PictureIndexFile() try: # read existing index items ... _data=self.getfilecontents(self.protocolclass.PIC_INDEX_FILE_NAME) if _data: _index_file.readfrombuffer(prototypes.buffer(_data)) except (com_brew.BrewNoSuchFileException, com_brew.BrewBadPathnameException, com_brew.BrewFileLockedException, com_brew.BrewAccessDeniedException): pass # and append the new files for _fileitem in filelist: _index_file.items.append(self.protocolclass.PictureIndexEntry(**_fileitem)) # and write out the new index file _buffer=prototypes.buffer() _index_file.writetobuffer(_buffer) self.writefile(self.protocolclass.PIC_INDEX_FILE_NAME, _buffer.getvalue()) def savewallpapers(self, fundamentals, merge): # send wallpapers to the phone """Save ringtones to the phone""" self.log('Writing wallpapers to the phone') try: _del_list, _new_list=self._get_del_new_list('wallpaper-index', 'wallpapers', merge, fundamentals, frozenset(['images'])) if __debug__: self.log('Delete list: '+','.join(_del_list)) self.log('New list: '+','.join(_new_list)) self._replace_files('wallpaper-index', 'wallpapers', _new_list, fundamentals) _files_added=self._add_files('wallpaper-index', 'wallpapers', _new_list, fundamentals) self._update_wp_index_file(_files_added) fundamentals['rebootphone']=True except: if __debug__: raise return fundamentals def _read_ringtone_range(self, fundamentals): pass def _add_wp_cache(self, wp, idx, fundamentals): # check to see if it already exists pass # PBEntry class----------------------------------------------------------------- parentpbentry=com_a950.PBEntry class PBEntry(parentpbentry): # Building a phonebook rec from a bp phone dict----------------------------- def _build_number(self, number, ringtone, primary): # build a number rec _num_type=self._pb_type_dict.get(number['type'], None) if not _num_type: # we don's support this type return # check for cell2 if _num_type=='cell' and self.pb.cell.number: _num_type='cell2' # build a number entry _entry=self.phone.protocolclass.ss_number_entry() _entry.number=number['number'] _sd=number.get('speeddial', None) if _sd is not None: _entry.speeddial=_sd if primary: _entry.primary=1 # add it to the contact setattr(self.pb, _num_type, _entry) def _build_wallpaper(self, wallpaper): # set the wallpaper if specified if not wallpaper: return for _rt in self.fundamentals.get('wallpaper-index', {}).values(): if _rt.get('name', None)==wallpaper and \ _rt.get('filename', None): self.pb.wallpaper='%(name)s|%(pathname)s'% { 'name': _rt['name'], 'pathname': _rt['filename'] } break def _build_ringtone(self, ringtone): # set the ringtone if specified if not ringtone: self.pb.ringtone='Default' return for _wp in self.fundamentals.get('ringtone-index', {}).values(): if _wp.get('name', None)==ringtone: if _wp.get('filename', None): self.pb.ringtone=_wp['filename'] if _wp['filename'][0]=='/' \ else '/'+_wp['filename'] elif _wp.get('origin', None)=='builtin': self.pb.ringtone=_wp['name'] break def _build(self, entry): # Build a phone dict base on the phone data super(PBEntry, self)._build(entry) self._build_ringtone(entry.get('ringtones', [{}])[0].get('ringtone', None)) # Extracting data from the phone-------------------------------------------- def _extract_wallpaper(self, entry, p_class): if self.pb.info&p_class.PB_FLG_WP and \ self.pb.wallpaper: entry['wallpapers']=[{ 'wallpaper': self.pb.wallpaper.partition('|')[0], 'use': 'call' }] def _extract_ringtone(self, entry, p_class): if self.pb.info&p_class.PB_FLG_CRINGTONE and \ self.pb.ringtone: entry['ringtones']=[{ 'ringtone': common.basename(self.pb.ringtone), 'use': 'call' }] def getvalue(self): _entry=super(PBEntry, self).getvalue() self._extract_ringtone(_entry, self.phone.protocolclass) return _entry # CalendarEntry class----------------------------------------------------------- calendarentryparent=com_a950.CalendarEntry class CalendarEntry(calendarentryparent): """Transient class to handle calendar data being sent to, retrieved from the phone. """ # Extracting routine-------------------------------------------------------- def _extract_ringtone(self): # extract the builtin ringtone value, if possible for _rt_name, _rt_code in self.phone.builtin_ringtones.items(): if _rt_code==self.cal.ringtoneindex: return _rt_name for _rt_name, _rt_code in self.phone.builtin_sounds.items(): if _rt_code==self.cal.ringtoneindex: return _rt_name def getvalue(self): # return a BitPim calendar entry equivalence _entry=bpcalendar.CalendarEntry() _entry.desc_loc=self.cal.title _entry.start=self.cal.start _entry.end=self._extract_end() _entry.alarm=self._extract_alarm() _entry.ringtone=self._extract_ringtone() _entry.vibrate=self.cal.alert==self.ALERT_VIBRATE return _entry # building routines--------------------------------------------------------- def _build_ringtone(self, entry): _rt_name=entry.ringtone if self.phone.builtin_ringtones.get(_rt_name, None): return self.phone.builtin_ringtones[_rt_name] elif self.phone.builtin_sounds.get(_rt_name, None): return self.phone.builtin_sounds[_rt_name] else: return 0 def _build(self, entry): # populate this object with data from BitPim self.cal.titlelen=len(entry.desc_loc) self.cal.title=entry.desc_loc self.cal.start=entry.start self.cal.exptime=entry.end[3:5] self.cal.alarm=self._build_alarm(entry) self.cal.alert=self._build_alert(entry) self.cal.duration=self._build_duration(entry) self.cal.ringtoneindex=self._build_ringtone(entry) #------------------------------------------------------------------------------- parentprofile=com_a950.Profile class Profile(parentprofile): serialsname=Phone.serialsname # main LCD resolution, (external LCD is 96x96) WALLPAPER_WIDTH=128 WALLPAPER_HEIGHT=160 # For phone detection phone_manufacturer=Phone.my_manufacturer phone_model=Phone.my_model autodetect_delay=5 # "Warning" media size limit RINGTONE_LIMITS= { 'MAXSIZE': 290000 } # fill in the list of ringtone/sound origins on your phone ringtoneorigins=('ringers', 'sounds') # ringtone origins that are not available for the contact assignment excluded_ringtone_origins=() # all dumped in "images" imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) def GetImageOrigins(self): return self.imageorigins # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 128, 'height': 128, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 96, 'height': 84, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "fullscreen", {'width': 128, 'height': 160, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", {'width': 96, 'height': 84, 'format': "JPEG"})) def __init__(self): parentprofile.__init__(self) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'read', None), # all calendar reading ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('ringtone', 'read', None), # all ringtone reading ('ringtone', 'write', 'MERGE'), ('wallpaper', 'read', None), # all wallpaper reading ('wallpaper', 'write', 'MERGE'), ('memo', 'read', None), # all memo list reading DJP ('memo', 'write', 'OVERWRITE'), # all memo list writing DJP ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading DJP ) bitpim-1.0.7+dfsg1/src/phones/com_lgvx3200.py0000644001616600161660000006134310554051740016737 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Bruce Schurmann ### Copyright (C) 2003-2005 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgvx3200.py 3918 2007-01-19 05:15:12Z djpham $ """Communicate with the LG VX3200 cell phone The VX3200 is somewhat similar to the VX4400 """ # standard modules import time import cStringIO import sha import re # my modules import common import copy import helpids import p_lgvx3200 import com_lgvx4400 import com_brew import com_phone import com_lg import prototypes import phone_media_codec import conversions media_codec=phone_media_codec.codec_name class Phone(com_lgvx4400.Phone): "Talk to the LG VX3200 cell phone" desc="LG-VX3200" helpid=helpids.ID_PHONE_LGVX3200 wallpaperindexfilename="download/dloadindex/brewImageIndex.map" ringerindexfilename="download/dloadindex/brewRingerIndex.map" protocolclass=p_lgvx3200 serialsname='lgvx3200' # more VX3200 indices imagelocations=( # offset, index file, files location, type, maximumentries ( 11, "download/dloadindex/brewImageIndex.map", "download", "images", 3) , ) ringtonelocations=( # offset, index file, files location, type, maximumentries ( 27, "download/dloadindex/brewRingerIndex.map", "user/sound/ringer", "ringers", 30), ) builtinimages= ('Sport 1', 'Sport 2', 'Nature 1', 'Nature 2', 'Animal', 'Martini', 'Goldfish', 'Umbrellas', 'Mountain climb', 'Country road') # There are a few more builtins but they cannot be sent to the phone in phonebook # entries so I am leaving them out. builtinringtones= ('Ring 1', 'Ring 2', 'Ring 3', 'Ring 4', 'Ring 5', 'Ring 6', 'Ring 7', 'Ring 8', 'Annen Polka', 'Pachelbel Canon', 'Hallelujah', 'La Traviata', 'Leichte Kavallerie Overture', 'Mozart Symphony No.40', 'Bach Minuet', 'Farewell', 'Mozart Piano Sonata', 'Sting', 'O solemio', 'Pizzicata Polka', 'Stars and Stripes Forever', 'Pineapple Rag', 'When the Saints Go Marching In', 'Latin', 'Carol 1', 'Carol 2') def __init__(self, logtarget, commport): com_lgvx4400.Phone.__init__(self,logtarget,commport) self.mode=self.MODENONE self.mediacache=self.DirCache(self) def makeentry(self, counter, entry, dict): e=com_lgvx4400.Phone.makeentry(self, counter, entry, dict) e.entrysize=0x202 return e def getindex(self, indexfile): "Read an index file" index={} # Hack for LG-VX3200 - wallpaper index file is not real if re.search("ImageIndex", indexfile) is not None: # A little special treatment for wallpaper related media files # Sneek a peek at the file because if it is zero len we do not index it ind=0 for ifile in 'wallpaper', 'poweron', 'poweroff': ifilefull="download/"+ifile+".bit" try: mediafiledata=self.mediacache.readfile(ifilefull) if len(mediafiledata)!=0: index[ind]=ifile ind = ind + 1 self.log("Index file "+indexfile+" entry added: "+ifile) except: pass else: # A little special treatment for ringer related media files try: buf=prototypes.buffer(self.getfilecontents(indexfile)) except com_brew.BrewNoSuchFileException: # file may not exist return index g=self.protocolclass.indexfile() g.readfrombuffer(buf, logtitle="Read index file "+indexfile) for i in g.items: if i.index!=0xffff: ifile=re.sub("\.mid|\.MID", "", i.name) self.log("Index file "+indexfile+" entry added: "+ifile) index[i.index]=ifile return index def getmedia(self, maps, result, key): """Returns the contents of media as a dict where the key is a name as returned by getindex, and the value is the contents of the media""" media={} # the maps type=None for offset,indexfile,location,type,maxentries in maps: index=self.getindex(indexfile) for i in index: if type=="images": # Wallpaper media files are all BIT type mediafilename=index[i]+".bit" else: # Ringer media files are all MID suffixed mediafilename=index[i]+".mid" try: media[index[i]]=self.mediacache.readfile(location+"/"+mediafilename) except com_brew.BrewNoSuchFileException: self.log("Missing index file: "+location+"/"+mediafilename) result[key]=media return result def savemedia(self, mediakey, mediaindexkey, maps, results, merge, reindexfunction): """Actually saves out the media @param mediakey: key of the media (eg 'wallpapers' or 'ringtone') @param mediaindexkey: index key (eg 'wallpaper-index') @param maps: list index files and locations @param results: results dict @param merge: are we merging or overwriting what is there? @param reindexfunction: the media is re-indexed at the end. this function is called to do it """ print results.keys() # I humbly submit this as the longest function in the bitpim code ... # wp and wpi are used as variable names as this function was originally # written to do wallpaper. it works just fine for ringtones as well # # LG-VX3200 special notes: # The index entries for both the wallpaper and ringers are # hacked just a bit AND are hacked in slightly different # ways. In addition to that the media for the wallpapers is # currently in BMP format inside the program and must be # converted to BIT (LG proprietary) on the way out. # # In the following: # wp has file references that nave no suffixes # wpi has file references that are mixed, i.e. some have file suffixes (comes from UI that way) wp=results[mediakey].copy() wpi=results[mediaindexkey].copy() # Walk through wp and remove any suffixes that make their way in via the UI for k in wp.keys(): wp[k]['name']=re.sub("\....$", "", wp[k]['name']) # remove builtins for k in wpi.keys(): if wpi[k]['origin']=='builtin': del wpi[k] # build up list into init init={} for offset,indexfile,location,type,maxentries in maps: init[type]={} for k in wpi.keys(): if wpi[k]['origin']==type: index=k-offset name=wpi[k]['name'] data=None del wpi[k] for w in wp.keys(): if wp[w]['name']==name and wp[w]['origin']==type: data=wp[w]['data'] del wp[w] if not merge and data is None: # delete the entry continue init[type][index]={'name': name, 'data': data} # init now contains everything from wallpaper-index print init.keys() # now look through wallpapers and see if anything remaining was assigned a particular # origin for w in wp.keys(): o=wp[w].get("origin", "") if o is not None and len(o) and o in init: idx=-1 while idx in init[o]: idx-=1 init[o][idx]=wp[w] del wp[w] # we now have init[type] with the entries and index number as key (negative indices are # unallocated). Proceed to deal with each one, taking in stuff from wp as we have space for offset,indexfile,location,type,maxentries in maps: if type=="camera": break index=init[type] try: dirlisting=self.getfilesystem(location) except com_brew.BrewNoSuchDirectoryException: self.mkdirs(location) dirlisting={} # rename keys to basename for i in dirlisting.keys(): dirlisting[i[len(location)+1:]]=dirlisting[i] del dirlisting[i] # what we will be deleting dellist=[] if not merge: # get existing wpi for this location wpi=results[mediaindexkey] for i in wpi: entry=wpi[i] if entry['origin']==type: # it is in the original index, are we writing it back out? delit=True for idx in index: if index[idx]['name']==entry['name']: delit=False break if delit: # Add the media file suffixes back to match real filenames on phone if type=="ringers": entryname=entry['name']+".mid" else: entryname=entry['name']+".bit" if entryname in dirlisting: dellist.append(entryname) else: self.log("%s in %s index but not filesystem" % (entryname, type)) # go ahead and delete unwanted files print "deleting",dellist for f in dellist: self.mediacache.rmfile(location+"/"+f) # LG-VX3200 special case: # We only keep (upload) wallpaper images if there was a legit # one on the phone to begin with. This code will weed out any # attempts to the contrary. if type=="images": losem=[] # get existing wpi for this location wpi=results[mediaindexkey] for idx in index: delit=True for i in wpi: entry=wpi[i] if entry['origin']==type: if index[idx]['name']==entry['name']: delit=False break if delit: self.log("Inhibited upload of illegit image (not originally on phone): "+index[idx]['name']) losem.append(idx) # Now actually remove any illegit images from upload attempt for idx in losem: del index[idx] # slurp up any from wp we can take while len(index)maxentries: keys=index.keys() keys.sort() for k in keys[maxentries:]: idx=-1 while idx in wp: idx-=1 wp[idx]=index[k] del index[k] # Now add the proper media file suffixes back to the internal index # prior to the finish up steps coming for k in index.keys(): if type=="ringers": index[k]['name']=index[k]['name']+".mid" else: index[k]['name']=index[k]['name']+".bit" # write out the new index keys=index.keys() keys.sort() ifile=self.protocolclass.indexfile() ifile.numactiveitems=len(keys) for k in keys: entry=self.protocolclass.indexentry() entry.index=k entry.name=index[k]['name'] ifile.items.append(entry) while len(ifile.items)5: e['group']=0 #self.log("Custom Groups in PB not supported - setting to No Group for "+e['name']) print "Custom Groups in PB not supported - setting to No Group for "+e['name'] else: e['group']=key else: # sorry no space for this category e['group']=0 # email addresses emails=helper.getemails(entry.get('emails', []) ,0,self.protocolclass.NUMEMAILS,48) e['emails']=helper.filllist(emails, self.protocolclass.NUMEMAILS, "") # url e['url']=helper.makeone(helper.geturls(entry.get('urls', []), 0,1,48), "") # memo (-1 is to leave space for null terminator - not all software puts it in, but we do) e['memo']=helper.makeone(helper.getmemos(entry.get('memos', []), 0, 1, self.protocolclass.MEMOLENGTH-1), "") # phone numbers # there must be at least one email address or phonenumber minnumbers=1 if len(emails): minnumbers=0 numbers=helper.getnumbers(entry.get('numbers', []),minnumbers,self.protocolclass.NUMPHONENUMBERS) e['numbertypes']=[] e['numbers']=[] for numindex in range(len(numbers)): num=numbers[numindex] # deal with type b4=len(e['numbertypes']) type=num['type'] for i,t in enumerate(self.protocolclass.numbertypetab): if type==t: # some voodoo to ensure the second home becomes home2 if i in e['numbertypes'] and t[-1]!='2': type+='2' continue e['numbertypes'].append(i) break if t=='none': # conveniently last entry e['numbertypes'].append(i) break if len(e['numbertypes'])==b4: # we couldn't find a type for the number continue # deal with number number=self.phonize(num['number']) if len(number)==0: # no actual digits in the number continue if len(number)>48: # get this number from somewhere sensible # ::TODO:: number is too long and we have to either truncate it or ignore it? number=number[:48] # truncate for moment e['numbers'].append(number) # deal with speed dial sd=num.get("speeddial", -1) if self.protocolclass.NUMSPEEDDIALS: if sd>=self.protocolclass.FIRSTSPEEDDIAL and sd<=self.protocolclass.LASTSPEEDDIAL: speeds[sd]=(e['bitpimserial'], numindex) e['numbertypes']=helper.filllist(e['numbertypes'], 5, 0) e['numbers']=helper.filllist(e['numbers'], 5, "") # ringtones, wallpaper # LG VX3200 only supports writing the first 26 builtin ringers in pb ecring=helper.getringtone(entry.get('ringtones', []), 'call', None) if ecring is not None: if ecring not in Phone.builtinringtones: #self.log("Ringers past Carol 2 in PB not supported - setting to Default Ringer for "+e['name']) print "Ringers past Carol 2 in PB not supported - setting to Default Ringer for "+e['name']+" id was: "+ecring ecring=None e['ringtone']=ecring emring=helper.getringtone(entry.get('ringtones', []), 'message', None) if emring is not None: if emring not in Phone.builtinringtones: #self.log("Ringers past Carol 2 in PB not supported - setting to Default MsgRinger for "+e['name']) print "Ringers past Carol 2 in PB not supported - setting to Default MsgRinger for "+e['name']+" id was: "+emring emring=None e['msgringtone']=emring # LG VX3200 does not support writing wallpaper in pb ewall=helper.getwallpaper(entry.get('wallpapers', []), 'call', None) if ewall is not None: #self.log("Custom Wallpapers in PB not supported - setting to Default Wallpaper for "+e['name']) print "Custom Wallpapers in PB not supported - setting to Default Wallpaper for "+e['name'] e['wallpaper']=None # flags e['secret']=helper.getflag(entry.get('flags',[]), 'secret', False) results[pbentry]=e except helper.ConversionFailed: continue if self.protocolclass.NUMSPEEDDIALS: data['speeddials']=speeds data['phonebook']=results return data _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar # ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), # merge and overwrite wallpaper ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('call_history', 'read', None), ('memo', 'read', None), # all memo list reading DJP ('memo', 'write', 'OVERWRITE'), # all memo list writing DJP ('sms', 'read', None), ('sms', 'write', 'OVERWRITE'), ) WALLPAPER_WIDTH=128 WALLPAPER_HEIGHT=128 MAX_WALLPAPER_BASENAME_LENGTH=19 WALLPAPER_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789 ." WALLPAPER_CONVERT_FORMAT="bmp" MAX_RINGTONE_BASENAME_LENGTH=19 RINGTONE_FILENAME_CHARS="abcdefghijklmnopqrstuvxwyz0123456789 ." imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) def GetImageOrigins(self): return self.imageorigins # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 128, 'height': 128, 'format': "BMP"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets def __init__(self): parentprofile.__init__(self) bitpim-1.0.7+dfsg1/src/phones/com_samsungscha930.py0000644001616600161660000001554710604002154020216 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_samsungscha930.py 4174 2007-04-01 19:13:48Z djpham $ """Communicate with the Samsung SCH-A930 Phone""" # System Models import fnmatch # BitPim modules import common import com_samsungscha950 as com_a950 import p_samsungscha950 as p_a950 import p_samsungscha930 as p_a930 import helpids class Phone(com_a950.Phone): desc='SCH-A930' helpid=helpids.ID_PHONE_SAMSUNGSCHA930 protocolclass=p_a930 serialsname='scha930' # Detection stuff my_model='SCH-A930/DM' my_manufacturer='SAMSUNG' detected_model='A930' ringtone_noring_range='range_tones_preloaded_el_15' ringtone_default_range='range_tones_preloaded_el_01' builtin_ringtones={ 'VZW Default Tone': ringtone_default_range, 'Melody 1': 'range_tones_preloaded_el_05', 'Melody 2': 'range_tones_preloaded_el_06', 'Melody 3': 'range_tones_preloaded_el_07', 'Melody 4': 'range_tones_preloaded_el_08', 'Melody 5': 'range_tones_preloaded_el_09', 'Melody 6': 'range_tones_preloaded_el_10', 'Bell 1': 'range_tones_preloaded_el_02', 'Bell 2': 'range_tones_preloaded_el_03', 'Bell 3': 'range_tones_preloaded_el_04', 'Beep Once': 'range_tones_preloaded_el_11', 'No Ring': ringtone_noring_range, } builtin_sounds={ 'Birthday': 'range_sound_preloaded_el_birthday', 'Clapping': 'range_sound_preloaded_el_clapping', 'Crowd Roar': 'range_sound_preloaded_el_crowed_roar', 'Rainforest': 'range_sound_preloaded_el_rainforest', 'Train': 'range_sound_preloaded_el_train', # same as ringtones ?? 'Sound Beep Once': 'range_sound_preloaded_el_beep_once', 'Sound No Ring': 'range_sound_preloaded_el_no_rings', } builtin_wallpapers={ 'Preloaded1': 'range_f_wallpaper_preloaded_el_01', 'Preloaded2': 'range_f_wallpaper_preloaded_el_02', 'Preloaded3': 'range_f_wallpaper_preloaded_el_03', 'Preloaded4': 'range_f_wallpaper_preloaded_el_04', 'Preloaded5': 'range_f_wallpaper_preloaded_el_05', 'Preloaded6': 'range_f_wallpaper_preloaded_el_06', 'Preloaded7': 'range_f_wallpaper_preloaded_el_07', 'Preloaded8': 'range_f_wallpaper_preloaded_el_08', } # adding video to the wallpaper stuff def _get_video_index(self, idx, result): # just scan the dir for *.3g2 files _files=self.listfiles(self.protocolclass.FLIX_PATH) for _,_f in _files.items(): _filename=_f['name'] _name=common.basename(_filename) if fnmatch.fnmatch(_name, '*.3g2'): result[idx]= { 'name': _name, 'filename': _filename, 'origin': 'video', } idx+=1 return idx def get_wallpaper_index(self): _res={} _idx=self._get_file_wallpaper_index(0, _res) self._get_video_index(_idx, _res) return _res def savewallpapers(self, fundamentals, merge): # send wallpapers to the phone """Save ringtones to the phone""" self.log('Writing wallpapers to the phone') try: _del_list, _new_list=self._get_del_new_list('wallpaper-index', 'wallpapers', merge, fundamentals, ('video',)) if __debug__: self.log('Delete list: '+','.join(_del_list)) self.log('New list: '+','.join(_new_list)) self._replace_files('wallpaper-index', 'wallpapers', _new_list, fundamentals) self._del_files('wallpaper-index', _del_list, fundamentals) self._add_files('wallpaper-index', 'wallpapers', _new_list, fundamentals) self._update_media_index(self.protocolclass.WPictureIndexFile, self.protocolclass.WPictureIndexEntry, [self.protocolclass.PIC_PATH, self.protocolclass.PIC_PATH2], self.protocolclass.PIC_EXCLUDED_FILES, self.protocolclass.PIC_INDEX_FILE_NAME) fundamentals['rebootphone']=True except: if __debug__: raise return fundamentals #------------------------------------------------------------------------------- parentprofile=com_a950.Profile class Profile(parentprofile): serialsname=Phone.serialsname # For phone detection phone_manufacturer=Phone.my_manufacturer phone_model=Phone.my_model # "Warning" media size limit RINGTONE_LIMITS= { 'MAXSIZE': 290000 } # fill in the list of ringtone/sound origins on your phone ringtoneorigins=('ringers',) # all dumped in "images" imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video")) def GetImageOrigins(self): return self.imageorigins # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 176, 'height': 186, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 128, 'height': 96, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "fullscreen", {'width': 176, 'height': 220, 'format': "JPEG"})) def __init__(self): parentprofile.__init__(self) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'read', None), # all calendar reading ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('ringtone', 'read', None), # all ringtone reading ('ringtone', 'write', 'MERGE'), ('wallpaper', 'read', None), # all wallpaper reading ('wallpaper', 'write', None), ('memo', 'read', None), # all memo list reading DJP ('memo', 'write', 'OVERWRITE'), # all memo list writing DJP ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading DJP ) bitpim-1.0.7+dfsg1/src/phones/com_sanyo3100.py0000644001616600161660000001250610734365725017117 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_sanyo3100.py 4528 2007-12-26 05:51:17Z sawecw $ """Talk to the Sanyo SCP-3100 cell phone""" # standard modules import re import time import sha # my modules import common import com_sanyo8300 import p_brew import p_sanyo8300 import p_sanyo3100 import commport import com_brew import com_phone import com_sanyo import com_sanyomedia import com_sanyonewer import prototypes import bpcalendar numbertypetab=( 'cell', 'home', 'office', 'pager', 'fax', 'data', 'none' ) class Phone(com_sanyo8300.Phone): "Talk to the Sanyo PM3100 cell phone" desc="SCP3100" # WOrking directories 1,2,4 FIRST_MEDIA_DIRECTORY=1 LAST_MEDIA_DIRECTORY=2 imagelocations=( # offset, directory #, indexflag, type, maximumentries ) protocolclass=p_sanyo3100 serialsname='scp3100' builtinringtones=( 'None', 'Vibrate', '', '', '', '', '', '', '', 'Tone 1', 'Tone 2', 'Tone 3', 'Tone 4', 'Tone 5', 'Tone 6', 'Tone 7', 'Tone 8', '', '', '', '', '', '', '', '', '', '', '', '', 'Hungarian Dance No.5', 'Asian Jingle', 'Ska Big Band', 'Habanera', 'Clair de Lune', 'Nocturne', 'Techno Beat', 'Jazz Melody','','','','','','','','','','','','','','','','','','','Ringer & Voice') calendar_defaultringtone=4 calendar_defaultcaringtone=4 def __init__(self, logtarget, commport): com_sanyo8300.Phone.__init__(self, logtarget, commport) self.mode=self.MODENONE self.numbertypetab=numbertypetab # Phone Detection----------------------------------------------------------- def is_mode_brew(self): # Borrowed from the VX4400 req=self.protocolclass.firmwarerequest() respc=p_brew.testing0cresponse for baud in 0, 38400, 115200: if baud: if not self.comm.setbaudrate(baud): continue try: self.sendbrewcommand(req, respc, callsetmode=False) return True except com_phone.modeignoreerrortypes: pass return False def check_my_phone(self, res): # check if this is an 6600 try: _req=self.protocolclass.sanyofirmwarerequest() _resp=self.sendbrewcommand(_req, self.protocolclass.sanyofirmwareresponse) if _resp.phonemodel[:len(self.detected_model)]==self.detected_model: # yup, this's it! res['model']=self.my_model res['manufacturer']=self.my_manufacturer res['esn']=self.get_esn() except: if __debug__: raise @classmethod def detectphone(_, coms, likely_ports, res, _module, _log): if not likely_ports: # cannot detect any likely ports return None for port in likely_ports: if not res.has_key(port): res[port]={ 'mode_modem': None, 'mode_brew': None, 'manufacturer': None, 'model': None, 'firmware_version': None, 'esn': None, 'firmwareresponse': None } try: if res[port]['mode_brew']==False or \ res[port]['model']: # either phone is not in BREW, or a model has already # been found, not much we can do now continue p=_module.Phone(_log, commport.CommConnection(_log, port, timeout=1)) if res[port]['mode_brew'] is None: res[port]['mode_brew']=p.is_mode_brew() if res[port]['mode_brew']: p.check_my_phone(res[port]) p.comm.close() except com_brew.BrewBadBrewCommandException: pass except: if __debug__: raise my_model='SCP3100' detected_model='SCP-3100/US' my_manufacturer='SANYO' parentprofile=com_sanyo8300.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer=Phone.my_manufacturer phone_model=Phone.my_model _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # Read sms messages ('todo', 'read', None), # Read todos ) # which usb ids correspond to us usbids=( ( 0x0474, 0x071F, 1),) # VID=Sanyo, deviceclasses=("serial",) def __init__(self): parentprofile.__init__(self) com_sanyonewer.Profile.__init__(self) self.numbertypetab=numbertypetab bitpim-1.0.7+dfsg1/src/phones/com_samsungscha950.py0000644001616600161660000016220511323744222020222 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_samsungscha950.py 4784 2010-01-15 01:44:50Z djpham $ """Communicate with the Samsung SCH-A950 Phone""" # System Models import calendar import datetime import sha import time import wx # BitPim modules import bpcalendar import call_history import common import commport import com_brew import com_phone import datetime import fileinfo import memo import nameparser import prototypes import pubsub import p_samsungscha950 import sqlite2_file import sms import helpids class Phone(com_phone.Phone, com_brew.BrewProtocol): desc='SCH-A950' helpid=helpids.ID_PHONE_SAMSUNGSCHA950 protocolclass=p_samsungscha950 serialsname='scha950' ringtone_noring_range='range_tones_preloaded_el_15' ringtone_default_range='range_tones_preloaded_el_01' builtin_ringtones={ 'VZW Default Tone': ringtone_default_range, 'Melody 1': 'range_tones_preloaded_el_02', 'Melody 2': 'range_tones_preloaded_el_03', 'Bell 1': 'range_tones_preloaded_el_04', 'Bell 2': 'range_tones_preloaded_el_05', 'Beep Once': 'range_tones_preloaded_el_06', 'No Ring': ringtone_noring_range, } builtin_sounds={ 'Birthday': 'range_sound_preloaded_el_birthday', 'Crowd Roar': 'range_sound_preloaded_el_crowed_roar', 'Train': 'range_sound_preloaded_el_train', 'Rainforest': 'range_sound_preloaded_el_rainforest', 'Clapping': 'range_sound_preloaded_el_clapping', # same as ringtones ?? 'Sound Beep Once': 'range_sound_preloaded_el_beep_once', 'Sound No Ring': 'range_sound_preloaded_el_no_rings', } builtin_wallpapers={ 'Wallpaper 1': 'range_f_wallpaper_preloaded_el_01', 'Wallpaper 2': 'range_f_wallpaper_preloaded_el_02', 'Wallpaper 3': 'range_f_wallpaper_preloaded_el_03', 'Wallpaper 4': 'range_f_wallpaper_preloaded_el_04', 'Wallpaper 5': 'range_f_wallpaper_preloaded_el_05', 'Wallpaper 6': 'range_f_wallpaper_preloaded_el_06', 'Wallpaper 7': 'range_f_wallpaper_preloaded_el_07', 'Wallpaper 8': 'range_f_wallpaper_preloaded_el_08', 'Wallpaper 9': 'range_f_wallpaper_preloaded_el_09', } builtin_groups={ 1: 'Business', 2: 'Colleague', 3: 'Family', 4: 'Friends' } def __init__(self, logtarget, commport): "Calls all the constructors and sets initial modes" com_phone.Phone.__init__(self, logtarget, commport) com_brew.BrewProtocol.__init__(self) self.pbentryclass=PBEntry self.calendarclass=CalendarEntry # born to be in BREW mode! self.mode=self.MODEBREW # common stuff def get_esn(self): if hasattr(self, '_fs_path'): # we're debugging, just return something return '12345678' _req=self.protocolclass.ESN_req() _resp=self.sendbrewcommand(_req, self.protocolclass.ESN_resp) return '%08X'%_resp.esn def _time_now(self): return datetime.datetime.now().timetuple()[:5] def get_groups(self): _res={ 0: { 'name': 'No Group' } } try: _file_name=None _path_name=self.protocolclass.GROUP_INDEX_FILE_NAME for i in range(256): _name='%s%d'%(_path_name, i) if self.exists(_name): _file_name=_name break if not _file_name: return _res _index_file=self.readobject(_file_name, self.protocolclass.GroupIndexFile) for _entry in _index_file.items[1:]: if _entry.name: _res[_entry.index]={ 'name': _entry.name } elif self.builtin_groups.get(_entry.index, None): _res[_entry.index]={ 'name': self.builtin_groups[_entry.index] } except IndexError: pass except: if __debug__: raise return _res def _get_builtin_ringtone_index(self, idx, result): for _entry in self.builtin_ringtones: result[idx]= { 'name': _entry, 'origin': 'builtin', } idx+=1 for _entry in self.builtin_sounds: result[idx]={ 'name': _entry, 'origin': 'builtin', } idx+=1 return idx def _get_file_ringtone_index(self, idx, result, index_file_name, index_file_class, origin): try: _buf=prototypes.buffer(self.getfilecontents(index_file_name)) except (com_brew.BrewNoSuchFileException, com_brew.BrewBadPathnameException, com_brew.BrewFileLockedException, com_brew.BrewAccessDeniedException): return idx except: if __debug__: raise return idx _index_file=index_file_class() _index_file.readfrombuffer(_buf) for _entry in _index_file.items: if _entry.pathname.startswith('/ff/'): _file_name=_entry.pathname[4:] else: _file_name=_entry.pathname result[idx]= { 'name': common.basename(_entry.pathname), 'filename': _file_name, 'origin': origin, } idx+=1 return idx def get_ringtone_index(self): _res={} _idx=self._get_builtin_ringtone_index(0, _res) _idx=self._get_file_ringtone_index(_idx, _res, self.protocolclass.RT_INDEX_FILE_NAME, self.protocolclass.RRingtoneIndexFile, 'ringers') _idx=self._get_file_ringtone_index(_idx, _res, self.protocolclass.SND_INDEX_FILE_NAME, self.protocolclass.RSoundsIndexFile, 'sounds') return _res def _get_builtin_wallpaper_index(self, idx, result): for _entry in self.builtin_wallpapers: result[idx]={ 'name': _entry, 'origin': 'builtin', } idx+=1 return idx def _get_file_wallpaper_index(self, idx, result): try: _buf=prototypes.buffer(self.getfilecontents(self.protocolclass.PIC_INDEX_FILE_NAME)) except (com_brew.BrewNoSuchFileException, com_brew.BrewBadPathnameException, com_brew.BrewFileLockedException, com_brew.BrewAccessDeniedException): return idx except: if __debug__: raise return idx _index_file=self.protocolclass.RPictureIndexFile() _index_file.readfrombuffer(_buf) for _entry in _index_file.items[1:]: if _entry.pathname.startswith('/ff/'): _file_name=_entry.pathname[4:] else: _file_name=_entry.pathname result[idx]={ 'name': _entry.name, 'filename': _file_name, 'origin': 'images', } idx+=1 return idx def get_wallpaper_index(self): _res={} _idx=self._get_file_wallpaper_index(0, _res) return _res def _read_ringtone_range(self, fundamentals): _res={} try: _data=self.getfilecontents(self.protocolclass.PREF_DB_FILE_NAME) _db=sqlite2_file.DBFile(_data) for _row in _db.get_table_data('dynamic_range_els'): _res[_row[2]]=_row[0] except: if __debug__: raise fundamentals['ringtone-range']=_res def get_ringtone_range(self, name, fundamentals): if not name: # return No Rings return self.ringtone_default_range # check the builtin ringtones if self.builtin_ringtones.has_key(name): return self.builtin_ringtones[name] if self.builtin_sounds.has_key(name): return self.builtin_sounds[name] if not fundamentals.has_key('ringtone-range'): self._read_ringtone_range(fundamentals) _rt_range=fundamentals['ringtone-range'] return _rt_range.get(name, None) def ringtone_name_from_range(self, range, fundamentals): # check for builtin ringtones for _key,_value in self.builtin_ringtones.items(): if range==_value: return _key # check for builtin sounds for _key,_value in self.builtin_sounds.items(): if range==_value: return _key # now check for the "custom" ones if not fundamentals.has_key('ringtone-range'): self._read_ringtone_range(fundamentals) for _key,_value in fundamentals['ringtone-range'].items(): if _value==range: return _key def getfundamentals(self, results): """Gets information fundamental to interopating with the phone and UI. Currently this is: - 'uniqueserial' a unique serial number representing the phone - 'groups' the phonebook groups - 'wallpaper-index' map index numbers to names - 'ringtone-index' map index numbers to ringtone names This method is called before we read the phonebook data or before we write phonebook data. """ # use a hash of ESN and other stuff (being paranoid) self.log("Retrieving fundamental phone information") self.log("Phone serial number") results['uniqueserial']=sha.new(self.get_esn()).hexdigest() results['groups']=self.get_groups() results['ringtone-index']=self.get_ringtone_index() results['wallpaper-index']=self.get_wallpaper_index() return results # Ringtone Stuff------------------------------------------------------------ def _get_media_from_index(self, index_key, media_key, fundamentals): _index=fundamentals.get(index_key, {}) _media={} for _entry in _index.values(): if _entry.has_key('filename') and _entry['filename']: try: _media[_entry['name']]=self.getfilecontents(_entry['filename'], True) except: self.log('Failed to read file %s'%_entry['filename']) fundamentals[media_key]=_media return fundamentals def getringtones(self, fundamentals): # reading ringers & sounds files return self._get_media_from_index('ringtone-index', 'ringtone', fundamentals) def _get_del_new_list(self, index_key, media_key, merge, fundamentals, ignored_origins=()): """Return a list of media being deleted and being added""" _index=fundamentals.get(index_key, {}) _media=fundamentals.get(media_key, {}) _index_file_list=[_entry['name'] for _,_entry in _index.items() \ if _entry.has_key('filename') and \ _entry.get('origin', None) not in ignored_origins] _bp_file_list=[_entry['name'] for _,_entry in _media.items() \ if _entry.get('origin', None) not in ignored_origins] if merge: # just add the new files, don't delete anything _del_list=[] _new_list=_bp_file_list else: # Delete specified files and add everything _del_list=[x for x in _index_file_list if x not in _bp_file_list] _new_list=_bp_file_list return _del_list, _new_list def _item_from_index(self, name, item_key, index_dict): for _key,_entry in index_dict.items(): if _entry.get('name', None)==name: if item_key: # return a field return _entry.get(item_key, None) else: # return the key return _key def _del_files(self, index_key, _del_list, fundamentals): """Delete specified media files, need to be in OBEX mode""" _index=fundamentals.get(index_key, {}) for _file in _del_list: _file_name=self._item_from_index(_file, 'filename', _index) if _file_name: try: self.rmfile(_file_name) except Exception, e: self.log('Failed to delete file %s: %s'%(_file_name, str(e))) def _replace_files(self, index_key, media_key, new_list, fundamentals): """Replace existing files with new contents using BREW""" _index=fundamentals.get(index_key, {}) _media=fundamentals.get(media_key, {}) for _file in new_list: _data=self._item_from_index(_file, 'data', _media) if not _data: self.log('Failed to write file %s due to no data'%_file) continue _file_name=self._item_from_index(_file, 'filename', _index) if _file_name: # existing file, check if the same one _stat=self.statfile(_file_name) if _stat and _stat['size']!=len(_data): # different size, replace it try: self.writefile(_file_name, _data) except: self.log('Failed to write BREW file '+_file_name) if __debug__: raise def _add_files(self, index_key, media_key, new_list, fundamentals): """Add new file using BREW""" _index=fundamentals.get(index_key, {}) _media=fundamentals.get(media_key, {}) _res=[] for _file in new_list: _data=self._item_from_index(_file, 'data', _media) if not _data: self.log('Failed to write file %s due to no data'%_file) continue if self._item_from_index(_file, None, _index) is None: # new file _origin=self._item_from_index(_file, 'origin', _media) if _origin=='ringers': _path=self.protocolclass.RT_PATH elif _origin=='sounds': _path=self.protocolclass.SND_PATH elif _origin=='images': _path=self.protocolclass.PIC_PATH else: selg.log('File %s has unknown origin, skip!'%_file) continue _file_name=_path+'/'+_file try: self.writefile(_file_name, _data) _res.append(_file) except: self.log('Failed to write file '+_file_name) if __debug__: raise return _res def _update_media_index(self, index_file_class, index_entry_class, media_path, excluded_files, index_file_name): # Update the index file _index_file=index_file_class() _filelists={} for _path in media_path: _filelists.update(self.listfiles(_path)) _files=_filelists.keys() _files.sort() for _f in _files: _file_name=common.basename(_f) if _file_name in excluded_files: # do not include this one continue _entry=index_entry_class() _entry.name=_file_name _entry.pathname=_f _index_file.items.append(_entry) _buf=prototypes.buffer() _index_file.writetobuffer(_buf) self.writefile(index_file_name, _buf.getvalue()) ## file(common.basename(index_file_name), 'wb').write(_buf.getvalue()) def saveringtones(self, fundamentals, merge): """Save ringtones to the phone""" self.log('Writing ringtones to the phone') try: _del_list, _new_list=self._get_del_new_list('ringtone-index', 'ringtone', merge, fundamentals) if __debug__: self.log('Delete list: '+','.join(_del_list)) self.log('New list: '+','.join(_new_list)) self._replace_files('ringtone-index', 'ringtone', _new_list, fundamentals) self._del_files('ringtone-index', _del_list, fundamentals) self._add_files('ringtone-index', 'ringtone', _new_list, fundamentals) self._update_media_index(self.protocolclass.WRingtoneIndexFile, self.protocolclass.WRingtoneIndexEntry, [self.protocolclass.RT_PATH, self.protocolclass.RT_PATH2], self.protocolclass.RT_EXCLUDED_FILES, self.protocolclass.RT_INDEX_FILE_NAME) self._update_media_index(self.protocolclass.WSoundsIndexFile, self.protocolclass.WSoundsIndexEntry, [self.protocolclass.SND_PATH, self.protocolclass.SND_PATH2], self.protocolclass.SND_EXCLUDED_FILES, self.protocolclass.SND_INDEX_FILE_NAME) fundamentals['rebootphone']=True except: if __debug__: raise return fundamentals # Wallpaper stuff----------------------------------------------------------- def getwallpapers(self, fundamentals): # reading pictures & wallpapers return self._get_media_from_index('wallpaper-index', 'wallpapers', fundamentals) def savewallpapers(self, fundamentals, merge): # send wallpapers to the phone """Save ringtones to the phone""" self.log('Writing wallpapers to the phone') try: _del_list, _new_list=self._get_del_new_list('wallpaper-index', 'wallpapers', merge, fundamentals) if __debug__: self.log('Delete list: '+','.join(_del_list)) self.log('New list: '+','.join(_new_list)) self._replace_files('wallpaper-index', 'wallpapers', _new_list, fundamentals) self._del_files('wallpaper-index', _del_list, fundamentals) self._add_files('wallpaper-index', 'wallpapers', _new_list, fundamentals) self._update_media_index(self.protocolclass.WPictureIndexFile, self.protocolclass.WPictureIndexEntry, [self.protocolclass.PIC_PATH, self.protocolclass.PIC_PATH2], self.protocolclass.PIC_EXCLUDED_FILES, self.protocolclass.PIC_INDEX_FILE_NAME) fundamentals['rebootphone']=True except: if __debug__: raise return fundamentals # Calendar stuff------------------------------------------------------------ def _read_calendar_index(self): return self.readobject(self.protocolclass.CAL_INDEX_FILE_NAME, self.protocolclass.CalIndexFile, 'Reading Calendar Index File') def getcalendar(self, fundamentals): self.log('Reading calendar') _cal_index=self._read_calendar_index() _res={} _buf=prototypes.buffer() for _cnt in range(_cal_index.numofevents): _cal_file_name='%s%04d'%(self.protocolclass.CAL_FILE_NAME_PREFIX, _cal_index.events[_cnt].index) _buf.reset(self.getfilecontents(_cal_file_name)) _bpcal=self.calendarclass(self, _buf, fundamentals).getvalue() _res[_bpcal.id]=_bpcal fundamentals['calendar']=_res return fundamentals def _del_existing_cal_entries(self): self.log('Deleting existing calendar entries') _cal_index=self._read_calendar_index() for _idx in range(_cal_index.numofevents): _cal_file_name='%s%04d'%(self.protocolclass.CAL_FILE_NAME_PREFIX, _cal_index.events[_idx].index) try: self.rmfile(_cal_file_name) except: self.log('Failed to delete file: '+_cal_file_name) return _cal_index.next_index def _write_cal_entries(self, next_index, fundamentals): # write each and every calendar entries, each in a separate file _cal_dict=fundamentals.get('calendar', {}) _idx=next_index _cnt=0 for _key,_entry in _cal_dict.items(): if _cnt>=self.protocolclass.CAL_MAX_EVENTS: # enough events already! break try: _cal_entry=self.calendarclass(self, _entry, fundamentals) _cal_file_name='%s%04d'%(self.protocolclass.CAL_FILE_NAME_PREFIX, _idx) self.writeobject(_cal_file_name, _cal_entry, 'Writing Calendar Entry') _idx+=1 _cnt+=1 except: self.log('Failed to write calendar entry') if __debug__: raise return _idx def _write_cal_index(self, next_index, fundamentals): _cal_index=self._read_calendar_index() # clear out the old entries for _idx in range(_cal_index.numofevents): _cal_index.events[_idx].index=0 for _idx in range(_cal_index.numofactiveevents): _cal_index.activeevents[_idx].index=0 # update with new info _old_next_index=_cal_index.next_index _num_entries=next_index-_old_next_index _cal_index.next_index=next_index _cal_index.numofevents=_num_entries _cal_index.numofactiveevents=_num_entries _cnt=0 for _idx in range(_old_next_index, next_index): _cal_index.events[_cnt].index=_idx _cal_index.activeevents[_cnt].index=_idx _cnt+=1 self.writeobject(self.protocolclass.CAL_INDEX_FILE_NAME, _cal_index, 'Writing Calendar Index File') def savecalendar(self, fundamentals, merge): self.log("Sending calendar entries") _next_idx=self._del_existing_cal_entries() _next_idx=self._write_cal_entries(_next_idx, fundamentals) self._write_cal_index(_next_idx, fundamentals) # need to reboot the phone afterward fundamentals['rebootphone']=True return fundamentals # Memo/Notepad stuff-------------------------------------------------------- def getmemo(self, fundamentals): self.log('Reading note pad items') _index_file=self._read_calendar_index() _res={} for _idx in range(_index_file.numofnotes): _file_name='%s%04d'%(self.protocolclass.NP_FILE_NAME_PREFIX, _index_file.notes[_idx].index) _note=self.readobject(_file_name, self.protocolclass.NotePadEntry) _memo=memo.MemoEntry() _memo.text=_note.text _memo.set_date_isostr('%04d%02d%02dT%02d%02d00'%_note.modified[:5]) _res[_memo.id]=_memo fundamentals['memo']=_res return fundamentals def _del_existing_memo_entries(self): self.log('Deleting existing memo entries') _file_index=self._read_calendar_index() for _idx in range(_file_index.numofnotes): _file_name='%s%04d'%(self.protocolclass.NP_FILE_NAME_PREFIX, _file_index.notes[_idx].index) try: self.rmfile(_file_name) except: self.log('Failed to delete file: '+_file_name) return _file_index.next_index def _write_memo_entries(self, next_index, fundamentals): # write each and every memo entries, each in a separate file _memo_dict=fundamentals.get('memo', {}) _idx=next_index _cnt=0 for _key,_entry in _memo_dict.items(): if _cnt>=self.protocolclass.NP_MAX_ENTRIES: # enough memo already! break try: _memo_entry=self.protocolclass.NotePadEntry() _text_len=min(self.protocolclass.NP_MAX_LEN, len(_entry.text)) _memo_entry.textlen=_text_len _memo_entry.text=_entry.text[:_text_len] _memo_entry.creation=self._time_now() _file_name='%s%04d'%(self.protocolclass.NP_FILE_NAME_PREFIX, _idx) self.writeobject(_file_name, _memo_entry, logtitle='Writing memo entry') _idx+=1 _cnt+=1 except: self.log('Failed to write memo endar entry') if __debug__: raise return _idx def _write_memo_index(self, next_index, fundamentals): _file_index=self._read_calendar_index() # clear out the old entries for _idx in range(_file_index.numofnotes): _file_index.notes[_idx].index=0 # update with new info _old_next_index=_file_index.next_index _num_entries=next_index-_old_next_index _file_index.next_index=next_index _file_index.numofnotes=_num_entries _cnt=0 for _idx in range(_old_next_index, next_index): _file_index.notes[_cnt].index=_idx _cnt+=1 self.writeobject(self.protocolclass.CAL_INDEX_FILE_NAME, _file_index, logtitle='Writing calendar/memo file index') def savememo(self, fundamentals, merge): self.log('Writing memo/notepad items') _next_index=self._del_existing_memo_entries() _next_index=self._write_memo_entries(_next_index, fundamentals) self._write_memo_index(_next_index, fundamentals) fundamentals['rebootphone']=True return fundamentals # Phone Detection----------------------------------------------------------- my_model='SCH-A950/DM' my_manufacturer='SAMSUNG' detected_model='A950' def is_mode_brew(self): # Borrowed from the VX4400 req=self.protocolclass.memoryconfigrequest() respc=self.protocolclass.memoryconfigresponse for baud in 0, 38400, 115200: if baud: if not self.comm.setbaudrate(baud): continue try: self.sendbrewcommand(req, respc, callsetmode=False) return True except (com_phone.modeignoreerrortypes, ValueError): pass return False def check_my_phone(self, res): # check if this is an A950 try: _req=self.protocolclass.firmwarerequest() _resp=self.sendbrewcommand(_req, self.protocolclass.DefaultResponse) if _resp.data[31:35]==self.detected_model: # yup, this's it! res['model']=self.my_model res['manufacturer']=self.my_manufacturer res['esn']=self.get_esn() except: if __debug__: raise @classmethod def detectphone(_, coms, likely_ports, res, _module, _log): if not likely_ports: # cannot detect any likely ports return None for port in likely_ports: if not res.has_key(port): res[port]={ 'mode_modem': None, 'mode_brew': None, 'manufacturer': None, 'model': None, 'firmware_version': None, 'esn': None, 'firmwareresponse': None } try: if res[port]['mode_brew']==False or \ res[port]['model']: # either phone is not in BREW, or a model has already # been found, not much we can do now continue p=_module.Phone(_log, commport.CommConnection(_log, port, timeout=1)) if res[port]['mode_brew'] is None: res[port]['mode_brew']=p.is_mode_brew() if res[port]['mode_brew']: p.check_my_phone(res[port]) p.comm.close() except: if __debug__: raise #Phonebook stuff------------------------------------------------------------ def _del_private_dicts(self, fundamentals): # delete the stuff that we created for _key in ('ringtone-range', 'wallpaper-range'): if fundamentals.has_key(_key): del fundamentals[_key] def _extract_entries(self, filename, res, fundamentals): try: _buf=prototypes.buffer(self.getfilecontents(filename)) _rec_file=self.protocolclass.PBFileHeader() _rec_file.readfrombuffer(_buf) _entry=self.protocolclass.PBEntry() for _len in _rec_file.lens: if _len.itemlen: _buf_ofs=_buf.offset _entry.readfrombuffer(_buf) _buf.offset=_buf_ofs+_len.itemlen res[len(res)]=self.pbentryclass(self, _entry, fundamentals).getvalue() except: self.log('Failed to read file: %s'%filename) if __debug__: raise def getphonebook(self, fundamentals): self.log('Reading phonebook contacts') _file_cnt=0 _res={} while True: _file_name='%s%04d'%(self.protocolclass.PB_ENTRY_FILE_PREFIX, _file_cnt) if self.exists(_file_name): self._extract_entries(_file_name, _res, fundamentals) _file_cnt+=1 else: break fundamentals['phonebook']=_res fundamentals['categories']=[x['name'] for _,x in \ fundamentals.get('groups', {}).items()] self._del_private_dicts(fundamentals) return fundamentals def _get_wp_filename(self, wp, wp_index): # return the filename associated with this wallpaper for _,_entry in wp_index.items(): if _entry.get('name', None)==wp: return _entry.get('filename', None) def _rescale_and_cache(self, wp, filename, idx, fundamentals): # rescale the wp and add it to the cache dir try: _data=self.getfilecontents(filename, True) _tmpname=common.gettempfilename('tmp') file(_tmpname, 'wb').write(_data) _img=wx.Image(_tmpname) if not _img.Ok(): self.log('Failed to understand image: '+filename) return _img.Rescale(self.protocolclass.PB_WP_CACHE_WIDTH, self.protocolclass.PB_WP_CACHE_HEIGHT) _img.SaveFile(_tmpname, wx.BITMAP_TYPE_JPEG) _newfilename=self.protocolclass.PB_WP_CACHE_PATH+'/$'+filename.replace('/', '$') _data=file(_tmpname, 'rb').read() self.writefile(_newfilename, _data) return _newfilename except: if __debug__: self.log('Failed to add cache image: '+wp) raise def _add_wp_cache(self, wp, idx, fundamentals): # check to see if it already exists _wp_range=fundamentals.get('wallpaper-range', {}) if _wp_range.has_key(wp): # already in there return # add this wallpaper into the cache dir _wp_index=fundamentals.get('wallpaper-index', {}) # look for the file name _filename=self._get_wp_filename(wp, _wp_index) if not _filename: # couldn't find the filename return # copy the image file, rescale, and put it in the cache dir _newfilename=self._rescale_and_cache(wp, _filename, idx, fundamentals) if _newfilename: # rescale successful, update the dict _wp_range[wp]='/ff/'+_newfilename fundamentals['wallpaper-range']=_wp_range def get_wallpaper_range(self, wallpaper, fundamentals): # return the wallpaper cache name for the specific wallpaper return fundamentals.get('wallpaper-range', {}).get(wallpaper, None) def savephonebook(self, fundamentals): self.log('Writing phonebook contacts') self._read_ringtone_range(fundamentals) _pb_dict=fundamentals.get('phonebook', {}) # alphabetize the list based on name _pb_list=[(nameparser.getfullname(_entry['names'][0]), _key) \ for _key,_entry in _pb_dict.items()] _pb_list.sort() _req=self.protocolclass.ss_pb_clear_req() _rp=self.sendbrewcommand(_req, self.protocolclass.ss_pb_clear_resp) if _rp.flg: self.log('Failed to clear phonebook') self._del_private_dicts(fundamentals) return fundamentals _req=self.protocolclass.ss_pb_write_req() _total_cnt=len(_pb_list) _cnt=1 for _name,_key in _pb_list: try: _entry=_pb_dict[_key] # set up all the picture ID (wallpaper) images _wp=_entry.get('wallpapers', [{}])[0].get('wallpaper', None) if _wp: self._add_wp_cache(_wp, _cnt, fundamentals) # setting up a new contact to send over _pbentry=self.pbentryclass(self, _entry, fundamentals) _req.entry=_pbentry.pb _cnt+=1 self.progress(_cnt, _total_cnt, 'Writing entry" %s'%_req.entry.name) _resp=self.sendbrewcommand(_req, self.protocolclass.ss_pb_write_resp) except: self.log('Failed to write entry') if __debug__: raise fundamentals['rebootphone']=True self._del_private_dicts(fundamentals) return fundamentals # Call History stuff-------------------------------------------------------- def _get_ch_index(self): # read the index file and return the number of incoming, outgoing, and # missed calls try: _req=self.readobject(self.protocolclass.CL_INDEX_FILE, self.protocolclass.cl_index_file, logtitle='Reading Call Log Index File') return ([x.index for x in _req.incoming[:_req.incoming_count]], [x.index for x in _req.outgoing[:_req.outgoing_count]], [x.index for x in _req.missed[:_req.missed_count]]) except com_brew.BrewNoSuchFileException: return ([], [], []) except: if __debug__: raise return ([], [], []) def _get_ch(self, call_list, folder, res): # read the call history files _req=self.protocolclass.cl_file() _buf=prototypes.buffer() for _idx in call_list: try: _buf.reset(self.getfilecontents( '%s%02d'%(self.protocolclass.CL_PREFIX, _idx))) _req.readfrombuffer(_buf, 'Reading Call Log File') if _req.valid: _entry=call_history.CallHistoryEntry() _entry.folder=folder _entry.number=_req.number _entry.datetime=_req.datetime if _req.duration: _entry.duration=_req.duration res[_entry.id]=_entry except com_brew.BrewNoSuchFileException: pass except: if __debug__: raise def getcallhistory(self, fundamentals): # retrieve the call history data from the phone res={} _incoming_list, _outgoing_list, _missed_list=self._get_ch_index() self._get_ch(_incoming_list, call_history.CallHistoryEntry.Folder_Incoming, res) self._get_ch(_outgoing_list, call_history.CallHistoryEntry.Folder_Outgoing, res) self._get_ch(_missed_list, call_history.CallHistoryEntry.Folder_Missed, res) fundamentals['call_history']=res # SMS Stuff---------------------------------------------------------------- def _build_common_msg(self, entry, sms_hdr): entry.text=sms_hdr.body.msg entry.datetime=sms_hdr.body.datetime[:5] if sms_hdr.body.has_callback: entry.callback=sms_hdr.body.callback if sms_hdr.body.has_priority: if sms_hdr.body.priority: entry.priority=sms.SMSEntry.Priority_High else: entry.priority=sms.SMSEntry.Priority_Normal def _build_locked_field(self, entry, buf): _locked=self.protocolclass.UINT(sizeinbytes=4) _locked.readfrombuffer(buf) entry.locked=bool(_locked.getvalue()) def _build_in_msg(self, sms_hdr, buf, res): _entry=sms.SMSEntry() _entry.folder=sms.SMSEntry.Folder_Inbox _entry._from=sms_hdr.body.addr0 self._build_common_msg(_entry, sms_hdr) _entry.read=sms_hdr.body.msg_stat[0].status==self.protocolclass.SMS_STATUS_READ self._build_locked_field(_entry, buf) res[_entry.id]=_entry def _build_sent_msg(self, sms_hdr, buf, res): _entry=sms.SMSEntry() _entry.folder=sms.SMSEntry.Folder_Sent self._build_common_msg(_entry, sms_hdr) _confirmed_flg=False for _stat in sms_hdr.body.msg_stat: if _stat.status==self.protocolclass.SMS_STATUS_DELIVERED: _confirmed_flg=True break if _confirmed_flg: _datetime_list=self.protocolclass.sms_delivered_datetime() _datetime_list.readfrombuffer(buf, 'Reading Confirmed Datetime field') for _idx in range(10): if getattr(sms_hdr.body, 'addr_len%d'%_idx): if sms_hdr.body.msg_stat[_idx].status==self.protocolclass.SMS_STATUS_DELIVERED: _entry.add_recipient(getattr(sms_hdr.body, 'addr%d'%_idx), True, _datetime_list.datetime[_idx].datetime[:5]) else: _entry.add_recipient(getattr(sms_hdr.body, 'addr%d'%_idx)) self._build_locked_field(_entry, buf) res[_entry.id]=_entry def _build_draft_msg(self, sms_hdr, buf, res): _entry=sms.SMSEntry() _entry.folder=sms.SMSEntry.Folder_Saved self._build_common_msg(_entry, sms_hdr) self._build_locked_field(_entry, buf) for _idx in range(10): if getattr(sms_hdr.body, 'addr_len%d'%_idx): _entry.add_recipient(getattr(sms_hdr.body, 'addr%d'%_idx)) res[_entry.id]=_entry def _read_sms(self, filename, res, fundamentals): _buf=prototypes.buffer(self.getfilecontents(filename)) _sms=self.protocolclass.sms_header() _sms.readfrombuffer(_buf, 'Reading SMS File') if not _sms.is_txt_msg.value: # not a text message return if _sms.in_msg.value: self._build_in_msg(_sms, _buf, res) elif _sms.sent_msg.value: self._build_sent_msg(_sms, _buf, res) else: self._build_draft_msg(_sms, _buf, res) def getsms(self, fundamentals): res={} for _filename in self.listfiles(self.protocolclass.SMS_PATH): try: self._read_sms(_filename, res, fundamentals) except: self.log('Failed to read SMS File '+_filename) if __debug__: raise fundamentals['sms']=res fundamentals['canned_msg']=[] return fundamentals # CalendarEntry class----------------------------------------------------------- class CalendarEntry(object): """Transient class to handle calendar data being sent to, retrieved from the phone. """ # Repeat Constants REP_NONE=0 REP_ONCE=0 REP_DAILY=2 REP_WEEKLY=5 REP_MONTHLY=6 REP_YEARLY=7 # Alarm constants ALARM_ONTIME=0 ALARM_5M=1 ALARM_10M=2 ALARM_15M=3 ALARM_30M=4 ALARM_1HR=5 ALARM_3HR=6 ALARM_5HR=7 ALARM_1D=8 # Alert ALERT_TONE=0 ALERT_VIBRATE=1 ALERT_LIGHT=2 # Timezone TZ_EST=0 TZ_EDT=1 TZ_CST=2 TZ_CDT=3 TZ_MST=4 TZ_MDT=5 TZ_PST=6 TZ_PDT=7 TZ_AKST=8 TZ_AKDT=9 TZ_HAST=10 TZ_HADT=11 TZ_GMT=12 def __init__(self, phone, value, fundamentals): self.phone=phone self.fundamentals=fundamentals self.cal=phone.protocolclass.CalEntry() if isinstance(value, bpcalendar.CalendarEntry): self._build(value) elif isinstance(value, prototypes.buffer): self.cal.readfrombuffer(value) else: raise TypeError('Expecting type bpcalendar.CalendarEntry or prototypes.buffer') def writetobuffer(self, buf, logtitle=None): self.cal.writetobuffer(buf, logtitle=logtitle) # building routines--------------------------------------------------------- _build_repeat_dict={ bpcalendar.RepeatEntry.daily: REP_DAILY, bpcalendar.RepeatEntry.weekly: REP_WEEKLY, bpcalendar.RepeatEntry.monthly: REP_MONTHLY, bpcalendar.RepeatEntry.yearly: REP_YEARLY, } _build_alarm_dict={ 0: ALARM_ONTIME, 5: ALARM_5M, 10: ALARM_10M, 15: ALARM_15M, 30: ALARM_30M, 60: ALARM_1HR, 180: ALARM_3HR, 300: ALARM_5HR, 1440: ALARM_1D, } _build_tz_dict={ 0: TZ_GMT, 18000: TZ_EST, 21600: TZ_CST, 25200: TZ_MST, 28800: TZ_PST, 32400: TZ_AKST, 36000: TZ_HAST, } def _build_duration(self, entry): return (datetime.datetime(*entry.end)-\ datetime.datetime(*entry.start)).seconds def _build_repeat(self, entry): rep=entry.repeat if not rep: return self.REP_ONCE return self._build_repeat_dict.get(rep.repeat_type, self.REP_ONCE) def _build_alarm(self, entry): _keys=self._build_alarm_dict.keys() _keys.sort() _alarm=entry.alarm for k in _keys: if _alarm<=k: return self._build_alarm_dict[k] return self.ALARM_ONTIME def _build_alert(self, entry): if entry.vibrate: return self.ALERT_VIBRATE return self.ALERT_TONE _tz_code=None def _build_tz(self): if CalendarEntry._tz_code is None: CalendarEntry._tz_code=self._build_tz_dict.get(time.timezone, self.TZ_EST) if time.localtime()[-1]==1: # daylight saving time CalendarEntry._tz_code+=1 return CalendarEntry._tz_code def _build(self, entry): # populate this object with data from BitPim self.cal.titlelen=len(entry.desc_loc) self.cal.title=entry.desc_loc self.cal.start=entry.start self.cal.exptime=entry.end[3:5] self.cal.repeat=self._build_repeat(entry) self.cal.alarm=self._build_alarm(entry) self.cal.alert=self._build_alert(entry) self.cal.duration=self._build_duration(entry) self.cal.timezone=self._build_tz() _now=self.phone._time_now() self.cal.creationtime=_now self.cal.modifiedtime=_now _ringtone=self.phone.get_ringtone_range(entry.ringtone, self.fundamentals) self.cal.ringtonelen=len(_ringtone) self.cal.ringtone=_ringtone # Extracting routine-------------------------------------------------------- def _extract_end(self): return (datetime.datetime(*self.cal.start)+\ datetime.timedelta(seconds=self.cal.duration)).timetuple()[:5] def _extract_alarm(self): for _value,_code in self._build_alarm_dict.items(): if self.cal.alarm==_code: return _value def _extract_repeat(self): if self.cal.repeat==self.REP_ONCE: return None _rep_type=None for _type, _code in self._build_repeat_dict.items(): if self.cal.repeat==_code: _rep_type=_type break if not _rep_type: return None _rep=bpcalendar.RepeatEntry(_rep_type) if _rep_type==_rep.daily: _rep.interval=1 elif _rep_type==_rep.weekly: _rep.interval=1 elif _rep_type==_rep.monthly: _rep.interval2=1 _rep.dow=0 return _rep def getvalue(self): # return a BitPim calendar entry equivalence _entry=bpcalendar.CalendarEntry() _entry.desc_loc=self.cal.title _entry.start=self.cal.start _entry.end=self._extract_end() _entry.alarm=self._extract_alarm() _entry.repeat=self._extract_repeat() if _entry.repeat: # forever repeat event _entry.end=_entry.no_end_date+_entry.end[3:] _entry.ringtone=self.phone.ringtone_name_from_range(self.cal.ringtone, self.fundamentals) _entry.vibrate=self.cal.alert==self.ALERT_VIBRATE return _entry # PBEntry class----------------------------------------------------------------- class PBEntry(object): def __init__(self, phone, data, fundamentals): self.phone=phone self.fundamentals=fundamentals if isinstance(data, phone.protocolclass.PBEntry): self.pb=data elif isinstance(data, dict): # assume it's a phonebook dict self.pb=phone.protocolclass.ss_pb_entry() self._build(data) else: raise TypeError('Should be PBEntry or phone dict') def writetobuffer(self, buf, logtitle=None): self.pb.writetobuffer(buf, logtitle=logtitle) # Building a phonebook rec from a bp phone dict----------------------------- _pb_type_dict={ 'home': 'home', 'office': 'work', 'cell': 'cell', 'fax': 'fax', } def _build_number(self, number, ringtone, primary): # build a number rec _num_type=self._pb_type_dict.get(number['type'], None) if not _num_type: # we don's support this type return # check for cell2 if _num_type=='cell' and self.pb.cell.number: _num_type='cell2' # build a number entry _entry=self.phone.protocolclass.ss_number_entry() _entry.number=number['number'] _sd=number.get('speeddial', None) if ringtone: _rt=self.phone.get_ringtone_range(ringtone, self.fundamentals) else: _rt=None if _sd is not None: _entry.speeddial=_sd if _rt is not None: _entry.ringtone=_rt if primary: _entry.primary=1 # add it to the contact setattr(self.pb, _num_type, _entry) def _build_email(self, emails): # build an email rec if len(emails) and emails[0].get('email', None): # at least 1 email self.pb.email=emails[0]['email'] if len(emails)>1 and emails[1].get('email', None): # 2 or more emails self.pb.email2=emails[1]['email'] def _build_group(self, cat): # set the group if specified if not cat: return _cat_list=self.fundamentals.get('groups', {}) for _key,_cat in _cat_list.items(): if _key and _cat.get('name', None)==cat: self.pb.group=_key break def _build_wallpaper(self, wallpaper): # set the wallpaper if specified if not wallpaper: return _wp=self.phone.get_wallpaper_range(wallpaper, self.fundamentals) if _wp: self.pb.wallpaper=_wp def _build(self, entry): # Build a phone dict base on the phone data self.pb.name=nameparser.getfullname(entry['names'][0]) # global ringtone _ringtone=entry.get('ringtones', [{}])[0].get('ringtone', None) # build the numbers _primary=True # the first number is the primary one for _number in entry.get('numbers', []): self._build_number(_number, _ringtone, _primary) _primary=False # build the email self._build_email(entry.get('emails', [])) # group self._build_group(entry.get('categories', [{}])[0].get('category', None)) # wallpaper self._build_wallpaper(entry.get('wallpapers', [{}])[0].get('wallpaper', None)) # Extracting data from the phone-------------------------------------------- def _extract_emails(self, entry, p_class): # extract emails if self.pb.has_email: entry['emails']=[{ 'email': self.pb.email }] if self.pb.has_email2: entry.setdefault('emails', []).append({ 'email': self.pb.email2 }) _number_type_dict={ 'cell': (Phone.protocolclass.PB_FLG_CELL, 'cell'), 'home': (Phone.protocolclass.PB_FLG_HOME, 'home'), 'work': (Phone.protocolclass.PB_FLG_WORK, 'office'), 'fax': (Phone.protocolclass.PB_FLG_FAX, 'fax'), 'cell2': (Phone.protocolclass.PB_FLG_CELL2, 'cell'), } def _extract_numbers(self, entry, p_class): # extract phone numbers entry['numbers']=[] for _key,_info_list in self._number_type_dict.items(): if self.pb.info&_info_list[0]: _num_entry=getattr(self.pb, _key) _number={ 'number': _num_entry.number, 'type': _info_list[1] } if _num_entry.has_speeddial: _number['speeddial']=_num_entry.speeddial if _num_entry.has_ringtone and \ not entry.has_key('ringtones'): _ringtone=self.phone.ringtone_name_from_range( _num_entry.ringtone, self.fundamentals) if _ringtone: entry['ringtones']=[{ 'ringtone': _ringtone, 'use': 'call' }] if _num_entry.is_primary: # this is the primary number, insert to the beginning entry['numbers']=[_number]+entry['numbers'] else: entry['numbers'].append(_number) def _extract_group(self, entry, p_class): if not self.pb.has_group: # no group specified return _groups=self.fundamentals.get('groups', {}) if _groups.has_key(self.pb.group): entry['categories']=[{ 'category': _groups[self.pb.group]['name'] }] def _extract_wallpaper(self, entry, p_class): if not self.pb.has_wallpaper: return _idx=self.pb.wallpaper.rfind('$')+1 _wp=self.pb.wallpaper[_idx:] entry['wallpapers']=[{ 'wallpaper': _wp, 'use': 'call' }] def getvalue(self): _entry={} _p_class=self.phone.protocolclass _entry['names']=[{ 'full': self.pb.name }] self._extract_emails(_entry, _p_class) self._extract_numbers(_entry, _p_class) self._extract_group(_entry, _p_class) self._extract_wallpaper(_entry, _p_class) return _entry #------------------------------------------------------------------------------- parentprofile=com_phone.Profile class Profile(parentprofile): serialsname=Phone.serialsname WALLPAPER_WIDTH=176 WALLPAPER_HEIGHT=220 # 128x96: outside LCD autodetect_delay=3 usbids=( ( 0x04e8, 0x6640, 2),) deviceclasses=("serial",) BP_Calendar_Version=3 # For phone detection phone_manufacturer=Phone.my_manufacturer phone_model=Phone.my_model # arbitrary ringtone file size limit RINGTONE_LIMITS= { 'MAXSIZE': 100000 } WALLPAPER_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789 ._:" RINGTONE_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789 ._:" def __init__(self): parentprofile.__init__(self) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'read', None), # all calendar reading ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('ringtone', 'read', None), # all ringtone reading ('ringtone', 'write', 'MERGE'), ('wallpaper', 'read', None), # all wallpaper reading ('wallpaper', 'write', None), ('memo', 'read', None), # all memo list reading DJP ('memo', 'write', 'OVERWRITE'), # all memo list writing DJP ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading DJP ) def QueryAudio(self, origin, currentextension, afi): _max_size=self.RINGTONE_LIMITS['MAXSIZE'] setattr(afi, 'MAXSIZE', _max_size) # we don't modify any of these if afi.format in ("MIDI", "QCP", "PMD"): return currentextension, afi # examine mp3 if afi.format=="MP3": if afi.channels==1 and 8<=afi.bitrate<=64 and 16000<=afi.samplerate<=22050: return currentextension, afi # convert it return ("mp3", fileinfo.AudioFileInfo(afi, **{'format': 'MP3', 'channels': 2, 'bitrate': 48, 'samplerate': 44100, 'MAXSIZE': _max_size })) # all dumped in "images" imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) def GetImageOrigins(self): return self.imageorigins # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 176, 'height': 186, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", {'width': 128, 'height': 96, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "fullscreen", {'width': 176, 'height': 220, 'format': "JPEG"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets def convertphonebooktophone(self, helper, data): return data field_color_data={ 'phonebook': { 'name': { 'first': 1, 'middle': 1, 'last': 1, 'full': 1, 'nickname': 0, 'details': 1 }, 'number': { 'type': 5, 'speeddial': 5, 'number': 5, 'details': 5, 'ringtone': False, 'wallpaper': False }, 'email': 2, 'email_details': { 'emailspeeddial': False, 'emailringtone': False, 'emailwallpaper': False }, 'address': { 'type': 0, 'company': 0, 'street': 0, 'street2': 0, 'city': 0, 'state': 0, 'postalcode': 0, 'country': 0, 'details': 0 }, 'url': 0, 'memo': 0, 'category': 1, 'wallpaper': 1, 'ringtone': 1, 'storage': 0, }, 'calendar': { 'description': True, 'location': True, 'allday': False, 'start': True, 'end': True, 'priority': False, 'alarm': True, 'vibrate': True, 'repeat': True, 'memo': False, 'category': False, 'wallpaper': False, 'ringtone': True, }, 'memo': { 'subject': False, 'date': False, 'secret': False, 'category': False, 'memo': True, }, 'todo': { 'summary': False, 'status': False, 'due_date': False, 'percent_complete': False, 'completion_date': False, 'private': False, 'priority': False, 'category': False, 'memo': False, }, } bitpim-1.0.7+dfsg1/src/phones/p_sanyomedia.p0000644001616600161660000000653710442561507017102 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_sanyomedia.p 3352 2006-06-10 15:20:39Z skyjunky $ %{ """Descriptions of Sanyo Media Packets""" from prototypes import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb %} # Experimental packet descriptions for media upload. Eventually move into # p_sanyo.p # Eventually move to p_sanyo.p because this header is # used by many phones. # faset values: # 0x02 Phonebook protocol read # 0x03 Phonebook protocol write # 0x05 Sanyo4900 media upload # 0x10 PACKET sanyomediaheader: 2 UINT {'constant': 0xfa} +fa 1 UINT {'default': 0x09} +faset 2 UINT command 2 UINT {'default': 0xffff} +pad PACKET sanyochangedir: * sanyomediaheader {'command': 0x71} +header 170 UNKNOWN +pad 2 UINT dirindex PACKET sanyochangedirresponse: * sanyomediaheader header 169 UNKNOWN +pad 1 UINT status 2 UINT dirindex PACKET sanyonumfilesrequest: * sanyomediaheader {'command': 0x72} +header 172 UNKNOWN +pad PACKET sanyonumfilesresponse: * sanyomediaheader header 165 UNKNOWN +pad1 1 UINT count 6 UNKNOWN +pad2 PACKET sanyomediafilenamerequest: * sanyomediaheader {'command': 0x73} +header 161 UNKNOWN +pad1 1 UINT index 10 UNKNOWN +pad2 PACKET sanyomediafilenameresponse: * sanyomediaheader header 1 UINT pad1 154 USTRING filename 1 UINT num1 1 UNKNOWN pad2 1 UINT num2 1 UNKNOWN pad3 1 UINT num3 1 UNKNOWN pad4 1 UINT num4 10 UNKNOWN pad5 PACKET sanyomediafragmentrequest: * sanyomediaheader {'command': 0x74} +header 155 UNKNOWN +pad1 1 UINT fileindex 16 UNKNOWN +pad2 PACKET sanyomediafragmentresponse: * sanyomediaheader header 1 UNKNOWN pad1 150 DATA data 1 UINT length 3 UNKNOWN pad2 1 UINT fileindex 15 UNKNOWN pad3 1 UINT more PACKET sanyomediafilegragment: * sanyomediaheader +header 2 UINT {'constant': 0} +word 1 UINT {'constant': 150} +len 150 DATA data 21 UNKNOWN +pad PACKET sanyomediaresponse: * sanyomediaheader header * UNKNOWN UNKNOWN PACKET sanyosendfilename: * sanyomediaheader {'command': 0xffa1, 'pad': 0, 'faset': 0x05} +header 1 UINT {'constant': 0x96} +payloadsize 150 USTRING {'default': ""} +filename 21 UNKNOWN +pad PACKET sanyosendfilesize: * sanyomediaheader {'command': 0xffc1, 'pad': 0, 'faset': 0x05} +header 1 UINT {'constant': 0x96} +payloadsize 1 UNKNOWN +pad1 2 UINT filesize 168 UNKNOWN +pad2 PACKET sanyosendfilefragment: * sanyomediaheader {'pad': 0, 'faset': 0x05} +header 1 UINT {'constant': 0x96} +payloadsize 150 DATA data 21 UNKNOWN +pad PACKET sanyosendfileterminator: * sanyomediaheader {'command': 0xffe1, 'pad': 0, 'faset': 0x05} +header 1 UINT {'constant': 0x96} +payloadsize 171 UNKNOWN +pad PACKET sanyosendfileresponse: * sanyomediaheader +header 1 UINT payloadsize 171 UNKNOWN pad PACKET sanyomediathingyrequest: 2 UINT {'constant': 0xfa} +fa 1 UINT faset 2 UINT {'default': 0x0} +value PACKET sanyomediathingyresponse: 2 UINT fa 1 UINT faset 2 UINT value bitpim-1.0.7+dfsg1/src/phones/p_samsungsphn400.py0000644001616600161660000016261410466234100017723 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Sanyo phones""" from prototypes import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb class getphonestatus(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(getphonestatus,self).__init__(**dict) if self.__class__ is getphonestatus: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(getphonestatus,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(getphonestatus,kwargs) if len(args): dict2={'sizeinbytes': 1, 'constant': 0x0c} dict2.update(kwargs) kwargs=dict2 self.__field_command=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x0c}) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x0c}) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x0c}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1, 'constant': 0x0c}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class getphoneresponse(BaseProtogenClass): __fields=['pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(getphoneresponse,self).__init__(**dict) if self.__class__ is getphoneresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(getphoneresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(getphoneresponse,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_pad=UNKNOWN(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('pad', self.__field_pad, None) class firmwarerequest(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(firmwarerequest,self).__init__(**dict) if self.__class__ is firmwarerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(firmwarerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(firmwarerequest,kwargs) if len(args): dict2={'sizeinbytes': 1, 'constant': 0x00} dict2.update(kwargs) kwargs=dict2 self.__field_command=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1, 'constant': 0x00}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class firmwareresponse(BaseProtogenClass): __fields=['command', 'date1', 'time1', 'date2', 'time2', 'string1', 'dunno1'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(firmwareresponse,self).__init__(**dict) if self.__class__ is firmwareresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(firmwareresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(firmwareresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_date1.writetobuffer(buf) self.__field_time1.writetobuffer(buf) self.__field_date2.writetobuffer(buf) self.__field_time2.writetobuffer(buf) self.__field_string1.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_date1=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date1.readfrombuffer(buf) self.__field_time1=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time1.readfrombuffer(buf) self.__field_date2=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date2.readfrombuffer(buf) self.__field_time2=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time2.readfrombuffer(buf) self.__field_string1=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_string1.readfrombuffer(buf) self.__field_dunno1=UNKNOWN(**{'sizeinbytes': 8}) self.__field_dunno1.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_date1(self): return self.__field_date1.getvalue() def __setfield_date1(self, value): if isinstance(value,USTRING): self.__field_date1=value else: self.__field_date1=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date1(self): del self.__field_date1 date1=property(__getfield_date1, __setfield_date1, __delfield_date1, None) def __getfield_time1(self): return self.__field_time1.getvalue() def __setfield_time1(self, value): if isinstance(value,USTRING): self.__field_time1=value else: self.__field_time1=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time1(self): del self.__field_time1 time1=property(__getfield_time1, __setfield_time1, __delfield_time1, None) def __getfield_date2(self): return self.__field_date2.getvalue() def __setfield_date2(self, value): if isinstance(value,USTRING): self.__field_date2=value else: self.__field_date2=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date2(self): del self.__field_date2 date2=property(__getfield_date2, __setfield_date2, __delfield_date2, None) def __getfield_time2(self): return self.__field_time2.getvalue() def __setfield_time2(self, value): if isinstance(value,USTRING): self.__field_time2=value else: self.__field_time2=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time2(self): del self.__field_time2 time2=property(__getfield_time2, __setfield_time2, __delfield_time2, None) def __getfield_string1(self): return self.__field_string1.getvalue() def __setfield_string1(self, value): if isinstance(value,USTRING): self.__field_string1=value else: self.__field_string1=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_string1(self): del self.__field_string1 string1=property(__getfield_string1, __setfield_string1, __delfield_string1, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UNKNOWN): self.__field_dunno1=value else: self.__field_dunno1=UNKNOWN(value,**{'sizeinbytes': 8}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('date1', self.__field_date1, None) yield ('time1', self.__field_time1, None) yield ('date2', self.__field_date2, None) yield ('time2', self.__field_time2, None) yield ('string1', self.__field_string1, None) yield ('dunno1', self.__field_dunno1, None) class esnrequest(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(esnrequest,self).__init__(**dict) if self.__class__ is esnrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(esnrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(esnrequest,kwargs) if len(args): dict2={'sizeinbytes': 1, 'constant': 0x01} dict2.update(kwargs) kwargs=dict2 self.__field_command=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x01}) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x01}) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x01}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1, 'constant': 0x01}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class beginendupdaterequest(BaseProtogenClass): __fields=['command', 'beginend'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(beginendupdaterequest,self).__init__(**dict) if self.__class__ is beginendupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(beginendupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(beginendupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x29}) self.__field_command.writetobuffer(buf) self.__field_beginend.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x29}) self.__field_command.readfrombuffer(buf) self.__field_beginend=UINT(**{'sizeinbytes': 1}) self.__field_beginend.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x29}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1, 'constant': 0x29}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_beginend(self): return self.__field_beginend.getvalue() def __setfield_beginend(self, value): if isinstance(value,UINT): self.__field_beginend=value else: self.__field_beginend=UINT(value,**{'sizeinbytes': 1}) def __delfield_beginend(self): del self.__field_beginend beginend=property(__getfield_beginend, __setfield_beginend, __delfield_beginend, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('beginend', self.__field_beginend, None) class samheader(BaseProtogenClass): __fields=['readwrite', 'attribute'] def __init__(self, *args, **kwargs): dict={} # User specified arguments in the packet description dict.update({'readwrite': 0x26}) # What was supplied to this function dict.update(kwargs) # Parent constructor super(samheader,self).__init__(**dict) if self.__class__ is samheader: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(samheader,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(samheader,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_readwrite.writetobuffer(buf) self.__field_attribute.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_readwrite=UINT(**{'sizeinbytes': 1}) self.__field_readwrite.readfrombuffer(buf) self.__field_attribute=UINT(**{'sizeinbytes': 2}) self.__field_attribute.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_readwrite(self): return self.__field_readwrite.getvalue() def __setfield_readwrite(self, value): if isinstance(value,UINT): self.__field_readwrite=value else: self.__field_readwrite=UINT(value,**{'sizeinbytes': 1}) def __delfield_readwrite(self): del self.__field_readwrite readwrite=property(__getfield_readwrite, __setfield_readwrite, __delfield_readwrite, None) def __getfield_attribute(self): return self.__field_attribute.getvalue() def __setfield_attribute(self, value): if isinstance(value,UINT): self.__field_attribute=value else: self.__field_attribute=UINT(value,**{'sizeinbytes': 2}) def __delfield_attribute(self): del self.__field_attribute attribute=property(__getfield_attribute, __setfield_attribute, __delfield_attribute, None) def iscontainer(self): return True def containerelements(self): yield ('readwrite', self.__field_readwrite, None) yield ('attribute', self.__field_attribute, None) class phonebooknamerequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebooknamerequest,self).__init__(**dict) if self.__class__ is phonebooknamerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebooknamerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebooknamerequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=samheader(**{'attribute': 0x026B}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=samheader(**{'attribute': 0x026B}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=samheader(**{'attribute': 0x026B}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,samheader): self.__field_header=value else: self.__field_header=samheader(value,**{'attribute': 0x026B}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 129}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class phonebookname(BaseProtogenClass): __fields=['pad1', 'nonzeroifused', 'pspeed', 'numbers', 'pemail', 'purl', 'dunno2', 'name', 'pad2', 'pad2', 'sometimesfive'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebookname,self).__init__(**dict) if self.__class__ is phonebookname: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebookname,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebookname,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pad1.writetobuffer(buf) self.__field_nonzeroifused.writetobuffer(buf) self.__field_pspeed.writetobuffer(buf) self.__field_numbers.writetobuffer(buf) self.__field_pemail.writetobuffer(buf) self.__field_purl.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_pad2.writetobuffer(buf) self.__field_pad2.writetobuffer(buf) self.__field_sometimesfive.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.readfrombuffer(buf) self.__field_nonzeroifused=UINT(**{'sizeinbytes': 2}) self.__field_nonzeroifused.readfrombuffer(buf) self.__field_pspeed=UINT(**{'sizeinbytes': 2}) self.__field_pspeed.readfrombuffer(buf) self.__field_numbers=LIST(**{'elementclass': _gen_p_samsungsphn400_62, 'length': 7}) self.__field_numbers.readfrombuffer(buf) self.__field_pemail=UINT(**{'sizeinbytes': 2}) self.__field_pemail.readfrombuffer(buf) self.__field_purl=UINT(**{'sizeinbytes': 2}) self.__field_purl.readfrombuffer(buf) self.__field_dunno2=UINT(**{'sizeinbytes': 2}) self.__field_dunno2.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 12}) self.__field_name.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad2.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 87}) self.__field_pad2.readfrombuffer(buf) self.__field_sometimesfive=UINT(**{'sizeinbytes': 2, 'default': 5}) self.__field_sometimesfive.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pad1(self): return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_nonzeroifused(self): return self.__field_nonzeroifused.getvalue() def __setfield_nonzeroifused(self, value): if isinstance(value,UINT): self.__field_nonzeroifused=value else: self.__field_nonzeroifused=UINT(value,**{'sizeinbytes': 2}) def __delfield_nonzeroifused(self): del self.__field_nonzeroifused nonzeroifused=property(__getfield_nonzeroifused, __setfield_nonzeroifused, __delfield_nonzeroifused, None) def __getfield_pspeed(self): return self.__field_pspeed.getvalue() def __setfield_pspeed(self, value): if isinstance(value,UINT): self.__field_pspeed=value else: self.__field_pspeed=UINT(value,**{'sizeinbytes': 2}) def __delfield_pspeed(self): del self.__field_pspeed pspeed=property(__getfield_pspeed, __setfield_pspeed, __delfield_pspeed, None) def __getfield_numbers(self): return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'elementclass': _gen_p_samsungsphn400_62, 'length': 7}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_pemail(self): return self.__field_pemail.getvalue() def __setfield_pemail(self, value): if isinstance(value,UINT): self.__field_pemail=value else: self.__field_pemail=UINT(value,**{'sizeinbytes': 2}) def __delfield_pemail(self): del self.__field_pemail pemail=property(__getfield_pemail, __setfield_pemail, __delfield_pemail, None) def __getfield_purl(self): return self.__field_purl.getvalue() def __setfield_purl(self, value): if isinstance(value,UINT): self.__field_purl=value else: self.__field_purl=UINT(value,**{'sizeinbytes': 2}) def __delfield_purl(self): del self.__field_purl purl=property(__getfield_purl, __setfield_purl, __delfield_purl, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UINT): self.__field_dunno2=value else: self.__field_dunno2=UINT(value,**{'sizeinbytes': 2}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 12}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_pad2(self): return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_pad2(self): return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 87}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_sometimesfive(self): return self.__field_sometimesfive.getvalue() def __setfield_sometimesfive(self, value): if isinstance(value,UINT): self.__field_sometimesfive=value else: self.__field_sometimesfive=UINT(value,**{'sizeinbytes': 2, 'default': 5}) def __delfield_sometimesfive(self): del self.__field_sometimesfive sometimesfive=property(__getfield_sometimesfive, __setfield_sometimesfive, __delfield_sometimesfive, None) def iscontainer(self): return True def containerelements(self): yield ('pad1', self.__field_pad1, None) yield ('nonzeroifused', self.__field_nonzeroifused, None) yield ('pspeed', self.__field_pspeed, None) yield ('numbers', self.__field_numbers, None) yield ('pemail', self.__field_pemail, None) yield ('purl', self.__field_purl, None) yield ('dunno2', self.__field_dunno2, None) yield ('name', self.__field_name, None) yield ('pad2', self.__field_pad2, None) yield ('pad2', self.__field_pad2, None) yield ('sometimesfive', self.__field_sometimesfive, None) class _gen_p_samsungsphn400_62(BaseProtogenClass): 'Anonymous inner class' __fields=['pnumber'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_samsungsphn400_62,self).__init__(**dict) if self.__class__ is _gen_p_samsungsphn400_62: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_samsungsphn400_62,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_samsungsphn400_62,kwargs) if len(args): dict2={'sizeinbytes': 2} dict2.update(kwargs) kwargs=dict2 self.__field_pnumber=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pnumber.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pnumber=UINT(**{'sizeinbytes': 2}) self.__field_pnumber.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pnumber(self): return self.__field_pnumber.getvalue() def __setfield_pnumber(self, value): if isinstance(value,UINT): self.__field_pnumber=value else: self.__field_pnumber=UINT(value,**{'sizeinbytes': 2}) def __delfield_pnumber(self): del self.__field_pnumber pnumber=property(__getfield_pnumber, __setfield_pnumber, __delfield_pnumber, None) def iscontainer(self): return True def containerelements(self): yield ('pnumber', self.__field_pnumber, None) class phonebooknameresponse(BaseProtogenClass): __fields=['header', 'slot', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebooknameresponse,self).__init__(**dict) if self.__class__ is phonebooknameresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebooknameresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebooknameresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=samheader() self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_entry=phonebookname() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,samheader): self.__field_header=value else: self.__field_header=samheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,phonebookname): self.__field_entry=value else: self.__field_entry=phonebookname(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class phonebooknumbersrequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebooknumbersrequest,self).__init__(**dict) if self.__class__ is phonebooknumbersrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebooknumbersrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebooknumbersrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=samheader(**{'attribute': 0x026A}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=samheader(**{'attribute': 0x026A}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=samheader(**{'attribute': 0x026A}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,samheader): self.__field_header=value else: self.__field_header=samheader(value,**{'attribute': 0x026A}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 129}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class phonebooknumbers(BaseProtogenClass): __fields=['pad', 'number_len', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebooknumbers,self).__init__(**dict) if self.__class__ is phonebooknumbers: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebooknumbers,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebooknumbers,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pad.writetobuffer(buf) self.__field_number_len.writetobuffer(buf) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pad=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad.readfrombuffer(buf) self.__field_number_len=UINT(**{'sizeinbytes': 1}) self.__field_number_len.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 32, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 2}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_number_len(self): return self.__field_number_len.getvalue() def __setfield_number_len(self, value): if isinstance(value,UINT): self.__field_number_len=value else: self.__field_number_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_number_len(self): del self.__field_number_len number_len=property(__getfield_number_len, __setfield_number_len, __delfield_number_len, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 32, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('pad', self.__field_pad, None) yield ('number_len', self.__field_number_len, None) yield ('number', self.__field_number, None) class phonebooknumbersresponse(BaseProtogenClass): __fields=['header', 'slot', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebooknumbersresponse,self).__init__(**dict) if self.__class__ is phonebooknumbersresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebooknumbersresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebooknumbersresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=samheader() self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_entry=phonebooknumbers() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,samheader): self.__field_header=value else: self.__field_header=samheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,phonebooknumbers): self.__field_entry=value else: self.__field_entry=phonebooknumbers(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class attributerequest(BaseProtogenClass): __fields=['command', 'attribute', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(attributerequest,self).__init__(**dict) if self.__class__ is attributerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(attributerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(attributerequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x26}) self.__field_command.writetobuffer(buf) self.__field_attribute.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 259}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x26}) self.__field_command.readfrombuffer(buf) self.__field_attribute=UINT(**{'sizeinbytes': 2}) self.__field_attribute.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 259}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x26}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1, 'constant': 0x26}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_attribute(self): return self.__field_attribute.getvalue() def __setfield_attribute(self, value): if isinstance(value,UINT): self.__field_attribute=value else: self.__field_attribute=UINT(value,**{'sizeinbytes': 2}) def __delfield_attribute(self): del self.__field_attribute attribute=property(__getfield_attribute, __setfield_attribute, __delfield_attribute, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 259}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 259}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('attribute', self.__field_attribute, None) yield ('pad', self.__field_pad, None) bitpim-1.0.7+dfsg1/src/phones/com_sanyo3200.py0000644001616600161660000000602610734365725017120 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Stephen Wood ### Copyright (C) 2007 Yan Ke ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_sanyo3200.py 4086 2007-03-11 04:49:43Z yke $ """Talk to the Sanyo SCP-3200 cell phone""" # standard modules import re import time import sha # my modules import common import p_brew import p_sanyo8300 import p_sanyo3200 import com_brew import com_phone import com_sanyo import com_sanyomedia import com_sanyonewer import com_sanyo3100 import com_sanyo8300 import prototypes import bpcalendar import call_history numbertypetab=( 'cell', 'home', 'office', 'pager', 'fax', 'data', 'none' ) class Phone(com_sanyo3100.Phone): "Talk to the Sanyo SCP-3200 cell phone" desc="SCP-3200" # WOrking directories 1,2,4 FIRST_MEDIA_DIRECTORY=1 LAST_MEDIA_DIRECTORY=2 imagelocations=( # offset, directory #, indexflag, type, maximumentries ) protocolclass=p_sanyo3200 serialsname='scp3200' builtinringtones=( 'None', 'Vibrate', '', '', '', '', '', '', '', 'Tone 1', 'Tone 2', 'Tone 3', 'Tone 4', 'Tone 5', 'Tone 6', 'Tone 7', 'Tone 8', '', '', '', '', '', '', '', '', '', '', '', '', 'Hungarian Dance No.5', 'Asian Jingle', 'Ska Big Band', 'Habanera', 'Clair de Lune', 'Nocturne', 'Techno Beat', 'Jazz Melody','','','','','','','','','','','','','','','','','','','Ringer & Voice') calendar_defaultringtone=4 calendar_defaultcaringtone=4 def __init__(self, logtarget, commport): com_sanyo8300.Phone.__init__(self, logtarget, commport) self.mode=self.MODENONE self.numbertypetab=numbertypetab # Phone Detection----------------------------------------------------------- my_model='SCP3200' detected_model='SCP-3200/US' my_manufacturer='SANYO' parentprofile=com_sanyo3100.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer=Phone.my_manufacturer phone_model=Phone.my_model _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading # ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook # ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'read', None), # all wallpaper reading # ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading # ('sms', 'read', None), # Read sms messages ('todo', 'read', None), # Read todos ) def __init__(self): parentprofile.__init__(self) com_sanyonewer.Profile.__init__(self) self.numbertypetab=numbertypetab bitpim-1.0.7+dfsg1/src/phones/p_lgvx9100.py0000644001616600161660000054743311041000662016423 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VX9100""" import time from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx9800 except as noted # below from p_lgvx8550 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=1000 FIRSTSPEEDDIAL=1 LASTSPEEDDIAL=999 NUMEMERGENCYCONTACTS=3 BREW_FILE_SYSTEM=2 INDEX_RT_TYPE=257 INDEX_SOUND_TYPE=2 INDEX_VIDEO_TYPE=3 INDEX_IMAGE_TYPE=0 INDEX_SDIMAGE_TYPE=16 INDEX_SDVIDEO_TYPE=19 INDEX_SDSOUND_TYPE=18 MAX_PHONEBOOK_GROUPS=30 PB_ENTRY_SOR='' PB_ENTRY_EOF='\x00VX9100\x00\x00\x00\x00\xD8\x07\x06\x00\x10\x00\x0F\x00\x14\x00\x30'+'\x00'*222+'\x00' PB_NUMBER_SOR='' pb_group_filename='pim/pbgroup.dat' pb_recordid_filename='pim/record_id.dat' pb_ice_file_name = 'pim/pbiceentry.dat' NUMCALENDARENTRIES=300 # SMS index files inbox_index = "dload/inbox.dat" outbox_index = "dload/outbox.dat" drafts_index = "dload/drafts.dat" class indexentry(BaseProtogenClass): __fields=['filename', 'size', 'date', 'type', 'dunno'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_filename.writetobuffer(buf) self.__field_size.writetobuffer(buf) try: self.__field_date except: self.__field_date=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now()}) self.__field_date.writetobuffer(buf) self.__field_type.writetobuffer(buf) try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_dunno.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_filename=USTRING(**{'sizeinbytes': 256, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_filename.readfrombuffer(buf) self.__field_size=UINT(**{'sizeinbytes': 4}) self.__field_size.readfrombuffer(buf) self.__field_date=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now()}) self.__field_date.readfrombuffer(buf) self.__field_type=UINT(**{'sizeinbytes': 4}) self.__field_type.readfrombuffer(buf) self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_dunno.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'sizeinbytes': 256, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, "full pathname") def __getfield_size(self): return self.__field_size.getvalue() def __setfield_size(self, value): if isinstance(value,UINT): self.__field_size=value else: self.__field_size=UINT(value,**{'sizeinbytes': 4}) def __delfield_size(self): del self.__field_size size=property(__getfield_size, __setfield_size, __delfield_size, None) def __getfield_date(self): try: self.__field_date except: self.__field_date=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now()}) return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,GPSDATE): self.__field_date=value else: self.__field_date=GPSDATE(value,**{'sizeinbytes': 4, 'default': GPSDATE.now()}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, None) def __getfield_type(self): return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,UINT): self.__field_type=value else: self.__field_type=UINT(value,**{'sizeinbytes': 4}) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, None) def __getfield_dunno(self): try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default': 0 }) return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 4, 'default': 0 }) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def iscontainer(self): return True def containerelements(self): yield ('filename', self.__field_filename, "full pathname") yield ('size', self.__field_size, None) yield ('date', self.__field_date, None) yield ('type', self.__field_type, None) yield ('dunno', self.__field_dunno, None) class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): dict2={'elementclass': indexentry, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class pbgroup(BaseProtogenClass): __fields=['name', 'groupid', 'user_added'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroup,self).__init__(**dict) if self.__class__ is pbgroup: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroup,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroup,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) self.__field_name.writetobuffer(buf) try: self.__field_groupid except: self.__field_groupid=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_groupid.writetobuffer(buf) try: self.__field_user_added except: self.__field_user_added=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_user_added.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_name=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) self.__field_name.readfrombuffer(buf) self.__field_groupid=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_groupid.readfrombuffer(buf) self.__field_user_added=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_user_added.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_groupid(self): try: self.__field_groupid except: self.__field_groupid=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_groupid.getvalue() def __setfield_groupid(self, value): if isinstance(value,UINT): self.__field_groupid=value else: self.__field_groupid=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_groupid(self): del self.__field_groupid groupid=property(__getfield_groupid, __setfield_groupid, __delfield_groupid, None) def __getfield_user_added(self): try: self.__field_user_added except: self.__field_user_added=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_user_added.getvalue() def __setfield_user_added(self, value): if isinstance(value,UINT): self.__field_user_added=value else: self.__field_user_added=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_user_added(self): del self.__field_user_added user_added=property(__getfield_user_added, __setfield_user_added, __delfield_user_added, "=1 when was added by user") def iscontainer(self): return True def containerelements(self): yield ('name', self.__field_name, None) yield ('groupid', self.__field_groupid, None) yield ('user_added', self.__field_user_added, "=1 when was added by user") class pbgroups(BaseProtogenClass): "Phonebook groups" __fields=['groups'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroups,self).__init__(**dict) if self.__class__ is pbgroups: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroups,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroups,kwargs) if len(args): dict2={'elementclass': pbgroup, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_groups=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True}) self.__field_groups.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_groups=LIST(**{'elementclass': pbgroup, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True}) self.__field_groups.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_groups(self): try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True}) return self.__field_groups.getvalue() def __setfield_groups(self, value): if isinstance(value,LIST): self.__field_groups=value else: self.__field_groups=LIST(value,**{'elementclass': pbgroup, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True}) def __delfield_groups(self): del self.__field_groups groups=property(__getfield_groups, __setfield_groups, __delfield_groups, None) def iscontainer(self): return True def containerelements(self): yield ('groups', self.__field_groups, None) class speeddial(BaseProtogenClass): __fields=['entry', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddial,self).__init__(**dict) if self.__class__ is speeddial: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddial,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddial,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.writetobuffer(buf) try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.readfrombuffer(buf) self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,UINT): self.__field_entry=value else: self.__field_entry=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, "0-based entry number") def __getfield_number(self): try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,UINT): self.__field_number=value else: self.__field_number=UINT(value,**{'sizeinbytes': 1, 'default': 0xff}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, "number type") def iscontainer(self): return True def containerelements(self): yield ('entry', self.__field_entry, "0-based entry number") yield ('number', self.__field_number, "number type") def valid(self): return self.entry!=0xffff class speeddials(BaseProtogenClass): __fields=['speeddials'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddials,self).__init__(**dict) if self.__class__ is speeddials: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddials,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddials,kwargs) if len(args): dict2={'length': NUMSPEEDDIALS, 'elementclass': speeddial} dict2.update(kwargs) kwargs=dict2 self.__field_speeddials=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_speeddials(self): try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) return self.__field_speeddials.getvalue() def __setfield_speeddials(self, value): if isinstance(value,LIST): self.__field_speeddials=value else: self.__field_speeddials=LIST(value,**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) def __delfield_speeddials(self): del self.__field_speeddials speeddials=property(__getfield_speeddials, __setfield_speeddials, __delfield_speeddials, None) def iscontainer(self): return True def containerelements(self): yield ('speeddials', self.__field_speeddials, None) class pbfileentry(BaseProtogenClass): __fields=['entry_tag', 'pad00', 'mod_date', 'unk0', 'entry_number1', 'entry_number0', 'name', 'group', 'emails', 'ringtone', 'wallpaper', 'numbertypes', 'numberindices', 'memo', 'exit_tag', 'dontcare'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbfileentry,self).__init__(**dict) if self.__class__ is pbfileentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbfileentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbfileentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry_tag except: self.__field_entry_tag=STRING(**{'sizeinbytes': 4, 'terminator': None, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff'}) self.__field_entry_tag.writetobuffer(buf) if self.entry_tag==PB_ENTRY_SOR: try: self.__field_pad00 except: self.__field_pad00=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad00.writetobuffer(buf) try: self.__field_mod_date except: self.__field_mod_date=PBDateTime(**{ 'defaulttocurrenttime': True }) self.__field_mod_date.writetobuffer(buf) try: self.__field_unk0 except: self.__field_unk0=STRING(**{'sizeinbytes': 6, 'terminator': None, 'default': '\xff\xff\xff\xff\xff\xff' }) self.__field_unk0.writetobuffer(buf) self.__field_entry_number1.writetobuffer(buf) self.__field_entry_number0.writetobuffer(buf) try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_name.writetobuffer(buf) try: self.__field_group except: self.__field_group=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_group.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx9100_126, 'length': NUMEMAILS}) self.__field_emails.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_ringtone.writetobuffer(buf) try: self.__field_wallpaper except: self.__field_wallpaper=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_wallpaper.writetobuffer(buf) try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx9100_130, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.writetobuffer(buf) try: self.__field_numberindices except: self.__field_numberindices=LIST(**{'elementclass': _gen_p_lgvx9100_132, 'length': NUMPHONENUMBERS}) self.__field_numberindices.writetobuffer(buf) try: self.__field_memo except: self.__field_memo=USTRING(**{'sizeinbytes': 69, 'raiseonunterminatedread': False, 'default': '', 'encoding': PHONE_ENCODING }) self.__field_memo.writetobuffer(buf) try: self.__field_exit_tag except: self.__field_exit_tag=USTRING(**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) self.__field_exit_tag.writetobuffer(buf) else: try: self.__field_dontcare except: self.__field_dontcare=DATA(**{'sizeinbytes': 252, 'default': '\xff'*252 }) self.__field_dontcare.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry_tag=STRING(**{'sizeinbytes': 4, 'terminator': None, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff'}) self.__field_entry_tag.readfrombuffer(buf) if self.entry_tag==PB_ENTRY_SOR: self.__field_pad00=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad00.readfrombuffer(buf) self.__field_mod_date=PBDateTime(**{ 'defaulttocurrenttime': True }) self.__field_mod_date.readfrombuffer(buf) self.__field_unk0=STRING(**{'sizeinbytes': 6, 'terminator': None, 'default': '\xff\xff\xff\xff\xff\xff' }) self.__field_unk0.readfrombuffer(buf) self.__field_entry_number1=UINT(**{'sizeinbytes': 4}) self.__field_entry_number1.readfrombuffer(buf) self.__field_entry_number0=UINT(**{'sizeinbytes': 2}) self.__field_entry_number0.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_name.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_group.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx9100_126, 'length': NUMEMAILS}) self.__field_emails.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_ringtone.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_wallpaper.readfrombuffer(buf) self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx9100_130, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.readfrombuffer(buf) self.__field_numberindices=LIST(**{'elementclass': _gen_p_lgvx9100_132, 'length': NUMPHONENUMBERS}) self.__field_numberindices.readfrombuffer(buf) self.__field_memo=USTRING(**{'sizeinbytes': 69, 'raiseonunterminatedread': False, 'default': '', 'encoding': PHONE_ENCODING }) self.__field_memo.readfrombuffer(buf) self.__field_exit_tag=USTRING(**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) self.__field_exit_tag.readfrombuffer(buf) else: self.__field_dontcare=DATA(**{'sizeinbytes': 252, 'default': '\xff'*252 }) self.__field_dontcare.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry_tag(self): try: self.__field_entry_tag except: self.__field_entry_tag=STRING(**{'sizeinbytes': 4, 'terminator': None, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff'}) return self.__field_entry_tag.getvalue() def __setfield_entry_tag(self, value): if isinstance(value,STRING): self.__field_entry_tag=value else: self.__field_entry_tag=STRING(value,**{'sizeinbytes': 4, 'terminator': None, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff'}) def __delfield_entry_tag(self): del self.__field_entry_tag entry_tag=property(__getfield_entry_tag, __setfield_entry_tag, __delfield_entry_tag, None) def __getfield_pad00(self): try: self.__field_pad00 except: self.__field_pad00=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_pad00.getvalue() def __setfield_pad00(self, value): if isinstance(value,UINT): self.__field_pad00=value else: self.__field_pad00=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_pad00(self): del self.__field_pad00 pad00=property(__getfield_pad00, __setfield_pad00, __delfield_pad00, None) def __getfield_mod_date(self): try: self.__field_mod_date except: self.__field_mod_date=PBDateTime(**{ 'defaulttocurrenttime': True }) return self.__field_mod_date.getvalue() def __setfield_mod_date(self, value): if isinstance(value,PBDateTime): self.__field_mod_date=value else: self.__field_mod_date=PBDateTime(value,**{ 'defaulttocurrenttime': True }) def __delfield_mod_date(self): del self.__field_mod_date mod_date=property(__getfield_mod_date, __setfield_mod_date, __delfield_mod_date, None) def __getfield_unk0(self): try: self.__field_unk0 except: self.__field_unk0=STRING(**{'sizeinbytes': 6, 'terminator': None, 'default': '\xff\xff\xff\xff\xff\xff' }) return self.__field_unk0.getvalue() def __setfield_unk0(self, value): if isinstance(value,STRING): self.__field_unk0=value else: self.__field_unk0=STRING(value,**{'sizeinbytes': 6, 'terminator': None, 'default': '\xff\xff\xff\xff\xff\xff' }) def __delfield_unk0(self): del self.__field_unk0 unk0=property(__getfield_unk0, __setfield_unk0, __delfield_unk0, None) def __getfield_entry_number1(self): return self.__field_entry_number1.getvalue() def __setfield_entry_number1(self, value): if isinstance(value,UINT): self.__field_entry_number1=value else: self.__field_entry_number1=UINT(value,**{'sizeinbytes': 4}) def __delfield_entry_number1(self): del self.__field_entry_number1 entry_number1=property(__getfield_entry_number1, __setfield_entry_number1, __delfield_entry_number1, None) def __getfield_entry_number0(self): return self.__field_entry_number0.getvalue() def __setfield_entry_number0(self, value): if isinstance(value,UINT): self.__field_entry_number0=value else: self.__field_entry_number0=UINT(value,**{'sizeinbytes': 2}) def __delfield_entry_number0(self): del self.__field_entry_number0 entry_number0=property(__getfield_entry_number0, __setfield_entry_number0, __delfield_entry_number0, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_group(self): try: self.__field_group except: self.__field_group=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx9100_126, 'length': NUMEMAILS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_lgvx9100_126, 'length': NUMEMAILS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_wallpaper(self): try: self.__field_wallpaper except: self.__field_wallpaper=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_numbertypes(self): try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx9100_130, 'length': NUMPHONENUMBERS}) return self.__field_numbertypes.getvalue() def __setfield_numbertypes(self, value): if isinstance(value,LIST): self.__field_numbertypes=value else: self.__field_numbertypes=LIST(value,**{'elementclass': _gen_p_lgvx9100_130, 'length': NUMPHONENUMBERS}) def __delfield_numbertypes(self): del self.__field_numbertypes numbertypes=property(__getfield_numbertypes, __setfield_numbertypes, __delfield_numbertypes, None) def __getfield_numberindices(self): try: self.__field_numberindices except: self.__field_numberindices=LIST(**{'elementclass': _gen_p_lgvx9100_132, 'length': NUMPHONENUMBERS}) return self.__field_numberindices.getvalue() def __setfield_numberindices(self, value): if isinstance(value,LIST): self.__field_numberindices=value else: self.__field_numberindices=LIST(value,**{'elementclass': _gen_p_lgvx9100_132, 'length': NUMPHONENUMBERS}) def __delfield_numberindices(self): del self.__field_numberindices numberindices=property(__getfield_numberindices, __setfield_numberindices, __delfield_numberindices, None) def __getfield_memo(self): try: self.__field_memo except: self.__field_memo=USTRING(**{'sizeinbytes': 69, 'raiseonunterminatedread': False, 'default': '', 'encoding': PHONE_ENCODING }) return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,USTRING): self.__field_memo=value else: self.__field_memo=USTRING(value,**{'sizeinbytes': 69, 'raiseonunterminatedread': False, 'default': '', 'encoding': PHONE_ENCODING }) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def __getfield_exit_tag(self): try: self.__field_exit_tag except: self.__field_exit_tag=USTRING(**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) return self.__field_exit_tag.getvalue() def __setfield_exit_tag(self, value): if isinstance(value,USTRING): self.__field_exit_tag=value else: self.__field_exit_tag=USTRING(value,**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) def __delfield_exit_tag(self): del self.__field_exit_tag exit_tag=property(__getfield_exit_tag, __setfield_exit_tag, __delfield_exit_tag, None) def __getfield_dontcare(self): try: self.__field_dontcare except: self.__field_dontcare=DATA(**{'sizeinbytes': 252, 'default': '\xff'*252 }) return self.__field_dontcare.getvalue() def __setfield_dontcare(self, value): if isinstance(value,DATA): self.__field_dontcare=value else: self.__field_dontcare=DATA(value,**{'sizeinbytes': 252, 'default': '\xff'*252 }) def __delfield_dontcare(self): del self.__field_dontcare dontcare=property(__getfield_dontcare, __setfield_dontcare, __delfield_dontcare, None) def iscontainer(self): return True def containerelements(self): yield ('entry_tag', self.__field_entry_tag, None) if self.entry_tag==PB_ENTRY_SOR: yield ('pad00', self.__field_pad00, None) yield ('mod_date', self.__field_mod_date, None) yield ('unk0', self.__field_unk0, None) yield ('entry_number1', self.__field_entry_number1, None) yield ('entry_number0', self.__field_entry_number0, None) yield ('name', self.__field_name, None) yield ('group', self.__field_group, None) yield ('emails', self.__field_emails, None) yield ('ringtone', self.__field_ringtone, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('numbertypes', self.__field_numbertypes, None) yield ('numberindices', self.__field_numberindices, None) yield ('memo', self.__field_memo, None) yield ('exit_tag', self.__field_exit_tag, None) else: yield ('dontcare', self.__field_dontcare, None) def valid(self): global PB_ENTRY_SOR return self.entry_tag==PB_ENTRY_SOR class _gen_p_lgvx9100_126(BaseProtogenClass): 'Anonymous inner class' __fields=['email'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx9100_126,self).__init__(**dict) if self.__class__ is _gen_p_lgvx9100_126: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx9100_126,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx9100_126,kwargs) if len(args): dict2={'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_email=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_email.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_email=USTRING(**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_email.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def iscontainer(self): return True def containerelements(self): yield ('email', self.__field_email, None) class _gen_p_lgvx9100_130(BaseProtogenClass): 'Anonymous inner class' __fields=['numbertype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx9100_130,self).__init__(**dict) if self.__class__ is _gen_p_lgvx9100_130: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx9100_130,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx9100_130,kwargs) if len(args): dict2={'sizeinbytes': 1, 'default': 0 } dict2.update(kwargs) kwargs=dict2 self.__field_numbertype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numbertype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numbertype=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_numbertype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numbertype(self): return self.__field_numbertype.getvalue() def __setfield_numbertype(self, value): if isinstance(value,UINT): self.__field_numbertype=value else: self.__field_numbertype=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_numbertype(self): del self.__field_numbertype numbertype=property(__getfield_numbertype, __setfield_numbertype, __delfield_numbertype, None) def iscontainer(self): return True def containerelements(self): yield ('numbertype', self.__field_numbertype, None) class _gen_p_lgvx9100_132(BaseProtogenClass): 'Anonymous inner class' __fields=['numberindex'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx9100_132,self).__init__(**dict) if self.__class__ is _gen_p_lgvx9100_132: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx9100_132,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx9100_132,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff } dict2.update(kwargs) kwargs=dict2 self.__field_numberindex=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numberindex.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numberindex=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_numberindex.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numberindex(self): return self.__field_numberindex.getvalue() def __setfield_numberindex(self, value): if isinstance(value,UINT): self.__field_numberindex=value else: self.__field_numberindex=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_numberindex(self): del self.__field_numberindex numberindex=property(__getfield_numberindex, __setfield_numberindex, __delfield_numberindex, None) def iscontainer(self): return True def containerelements(self): yield ('numberindex', self.__field_numberindex, None) class pbfile(BaseProtogenClass): __fields=['items', 'eof_tag', 'model_name', 'mod_date', 'blanks', 'eof_close_tag'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbfile,self).__init__(**dict) if self.__class__ is pbfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbfile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': pbfileentry, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_items.writetobuffer(buf) try: self.__field_eof_tag except: self.__field_eof_tag=STRING(**{'sizeinbytes': 6, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_eof_tag.writetobuffer(buf) try: self.__field_model_name except: self.__field_model_name=STRING(**{'sizeinbytes': 10, 'default': 'VX9100' }) self.__field_model_name.writetobuffer(buf) try: self.__field_mod_date except: self.__field_mod_date=PBDateTime(**{ 'defaulttocurrenttime': True }) self.__field_mod_date.writetobuffer(buf) try: self.__field_blanks except: self.__field_blanks=STRING(**{'sizeinbytes': 221, 'default': '' }) self.__field_blanks.writetobuffer(buf) try: self.__field_eof_close_tag except: self.__field_eof_close_tag=STRING(**{'sizeinbytes': 7, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_eof_close_tag.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': pbfileentry, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self.__field_eof_tag=STRING(**{'sizeinbytes': 6, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_eof_tag.readfrombuffer(buf) self.__field_model_name=STRING(**{'sizeinbytes': 10, 'default': 'VX9100' }) self.__field_model_name.readfrombuffer(buf) self.__field_mod_date=PBDateTime(**{ 'defaulttocurrenttime': True }) self.__field_mod_date.readfrombuffer(buf) self.__field_blanks=STRING(**{'sizeinbytes': 221, 'default': '' }) self.__field_blanks.readfrombuffer(buf) self.__field_eof_close_tag=STRING(**{'sizeinbytes': 7, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_eof_close_tag.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': pbfileentry, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': pbfileentry, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def __getfield_eof_tag(self): try: self.__field_eof_tag except: self.__field_eof_tag=STRING(**{'sizeinbytes': 6, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) return self.__field_eof_tag.getvalue() def __setfield_eof_tag(self, value): if isinstance(value,STRING): self.__field_eof_tag=value else: self.__field_eof_tag=STRING(value,**{'sizeinbytes': 6, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_eof_tag(self): del self.__field_eof_tag eof_tag=property(__getfield_eof_tag, __setfield_eof_tag, __delfield_eof_tag, None) def __getfield_model_name(self): try: self.__field_model_name except: self.__field_model_name=STRING(**{'sizeinbytes': 10, 'default': 'VX9100' }) return self.__field_model_name.getvalue() def __setfield_model_name(self, value): if isinstance(value,STRING): self.__field_model_name=value else: self.__field_model_name=STRING(value,**{'sizeinbytes': 10, 'default': 'VX9100' }) def __delfield_model_name(self): del self.__field_model_name model_name=property(__getfield_model_name, __setfield_model_name, __delfield_model_name, None) def __getfield_mod_date(self): try: self.__field_mod_date except: self.__field_mod_date=PBDateTime(**{ 'defaulttocurrenttime': True }) return self.__field_mod_date.getvalue() def __setfield_mod_date(self, value): if isinstance(value,PBDateTime): self.__field_mod_date=value else: self.__field_mod_date=PBDateTime(value,**{ 'defaulttocurrenttime': True }) def __delfield_mod_date(self): del self.__field_mod_date mod_date=property(__getfield_mod_date, __setfield_mod_date, __delfield_mod_date, None) def __getfield_blanks(self): try: self.__field_blanks except: self.__field_blanks=STRING(**{'sizeinbytes': 221, 'default': '' }) return self.__field_blanks.getvalue() def __setfield_blanks(self, value): if isinstance(value,STRING): self.__field_blanks=value else: self.__field_blanks=STRING(value,**{'sizeinbytes': 221, 'default': '' }) def __delfield_blanks(self): del self.__field_blanks blanks=property(__getfield_blanks, __setfield_blanks, __delfield_blanks, None) def __getfield_eof_close_tag(self): try: self.__field_eof_close_tag except: self.__field_eof_close_tag=STRING(**{'sizeinbytes': 7, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) return self.__field_eof_close_tag.getvalue() def __setfield_eof_close_tag(self, value): if isinstance(value,STRING): self.__field_eof_close_tag=value else: self.__field_eof_close_tag=STRING(value,**{'sizeinbytes': 7, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_eof_close_tag(self): del self.__field_eof_close_tag eof_close_tag=property(__getfield_eof_close_tag, __setfield_eof_close_tag, __delfield_eof_close_tag, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) yield ('eof_tag', self.__field_eof_tag, None) yield ('model_name', self.__field_model_name, None) yield ('mod_date', self.__field_mod_date, None) yield ('blanks', self.__field_blanks, None) yield ('eof_close_tag', self.__field_eof_close_tag, None) class pnfileentry(BaseProtogenClass): __fields=['entry_tag', 'pad00', 'mod_date', 'unk0', 'pn_id', 'pe_id', 'pn_order', 'phone_number', 'type', 'unk2', 'exit_tag', 'blanks'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pnfileentry,self).__init__(**dict) if self.__class__ is pnfileentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pnfileentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pnfileentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry_tag except: self.__field_entry_tag=STRING(**{'sizeinbytes': 4, 'terminator': None, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff'}) self.__field_entry_tag.writetobuffer(buf) if self.entry_tag==PB_NUMBER_SOR: try: self.__field_pad00 except: self.__field_pad00=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad00.writetobuffer(buf) try: self.__field_mod_date except: self.__field_mod_date=PBDateTime(**{'defaulttocurrenttime': True }) self.__field_mod_date.writetobuffer(buf) try: self.__field_unk0 except: self.__field_unk0=STRING(**{'sizeinbytes': 6, 'default': '', 'raiseonunterminatedread': False }) self.__field_unk0.writetobuffer(buf) self.__field_pn_id.writetobuffer(buf) self.__field_pe_id.writetobuffer(buf) self.__field_pn_order.writetobuffer(buf) self.__field_phone_number.writetobuffer(buf) self.__field_type.writetobuffer(buf) try: self.__field_unk2 except: self.__field_unk2=UINT(**{'sizeinbytes': 3, 'default': 0 }) self.__field_unk2.writetobuffer(buf) try: self.__field_exit_tag except: self.__field_exit_tag=USTRING(**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) self.__field_exit_tag.writetobuffer(buf) else: try: self.__field_blanks except: self.__field_blanks=DATA(**{'sizeinbytes': 60, 'default': '\xFF'*60 }) self.__field_blanks.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry_tag=STRING(**{'sizeinbytes': 4, 'terminator': None, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff'}) self.__field_entry_tag.readfrombuffer(buf) if self.entry_tag==PB_NUMBER_SOR: self.__field_pad00=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad00.readfrombuffer(buf) self.__field_mod_date=PBDateTime(**{'defaulttocurrenttime': True }) self.__field_mod_date.readfrombuffer(buf) self.__field_unk0=STRING(**{'sizeinbytes': 6, 'default': '', 'raiseonunterminatedread': False }) self.__field_unk0.readfrombuffer(buf) self.__field_pn_id=UINT(**{'sizeinbytes': 2}) self.__field_pn_id.readfrombuffer(buf) self.__field_pe_id=UINT(**{'sizeinbytes': 2}) self.__field_pe_id.readfrombuffer(buf) self.__field_pn_order=UINT(**{'sizeinbytes': 1}) self.__field_pn_order.readfrombuffer(buf) self.__field_phone_number=LGHEXPN(**{'sizeinbytes': 25}) self.__field_phone_number.readfrombuffer(buf) self.__field_type=UINT(**{'sizeinbytes': 2}) self.__field_type.readfrombuffer(buf) self.__field_unk2=UINT(**{'sizeinbytes': 3, 'default': 0 }) self.__field_unk2.readfrombuffer(buf) self.__field_exit_tag=USTRING(**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) self.__field_exit_tag.readfrombuffer(buf) else: self.__field_blanks=DATA(**{'sizeinbytes': 60, 'default': '\xFF'*60 }) self.__field_blanks.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry_tag(self): try: self.__field_entry_tag except: self.__field_entry_tag=STRING(**{'sizeinbytes': 4, 'terminator': None, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff'}) return self.__field_entry_tag.getvalue() def __setfield_entry_tag(self, value): if isinstance(value,STRING): self.__field_entry_tag=value else: self.__field_entry_tag=STRING(value,**{'sizeinbytes': 4, 'terminator': None, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff'}) def __delfield_entry_tag(self): del self.__field_entry_tag entry_tag=property(__getfield_entry_tag, __setfield_entry_tag, __delfield_entry_tag, None) def __getfield_pad00(self): try: self.__field_pad00 except: self.__field_pad00=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_pad00.getvalue() def __setfield_pad00(self, value): if isinstance(value,UINT): self.__field_pad00=value else: self.__field_pad00=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_pad00(self): del self.__field_pad00 pad00=property(__getfield_pad00, __setfield_pad00, __delfield_pad00, None) def __getfield_mod_date(self): try: self.__field_mod_date except: self.__field_mod_date=PBDateTime(**{'defaulttocurrenttime': True }) return self.__field_mod_date.getvalue() def __setfield_mod_date(self, value): if isinstance(value,PBDateTime): self.__field_mod_date=value else: self.__field_mod_date=PBDateTime(value,**{'defaulttocurrenttime': True }) def __delfield_mod_date(self): del self.__field_mod_date mod_date=property(__getfield_mod_date, __setfield_mod_date, __delfield_mod_date, None) def __getfield_unk0(self): try: self.__field_unk0 except: self.__field_unk0=STRING(**{'sizeinbytes': 6, 'default': '', 'raiseonunterminatedread': False }) return self.__field_unk0.getvalue() def __setfield_unk0(self, value): if isinstance(value,STRING): self.__field_unk0=value else: self.__field_unk0=STRING(value,**{'sizeinbytes': 6, 'default': '', 'raiseonunterminatedread': False }) def __delfield_unk0(self): del self.__field_unk0 unk0=property(__getfield_unk0, __setfield_unk0, __delfield_unk0, None) def __getfield_pn_id(self): return self.__field_pn_id.getvalue() def __setfield_pn_id(self, value): if isinstance(value,UINT): self.__field_pn_id=value else: self.__field_pn_id=UINT(value,**{'sizeinbytes': 2}) def __delfield_pn_id(self): del self.__field_pn_id pn_id=property(__getfield_pn_id, __setfield_pn_id, __delfield_pn_id, None) def __getfield_pe_id(self): return self.__field_pe_id.getvalue() def __setfield_pe_id(self, value): if isinstance(value,UINT): self.__field_pe_id=value else: self.__field_pe_id=UINT(value,**{'sizeinbytes': 2}) def __delfield_pe_id(self): del self.__field_pe_id pe_id=property(__getfield_pe_id, __setfield_pe_id, __delfield_pe_id, None) def __getfield_pn_order(self): return self.__field_pn_order.getvalue() def __setfield_pn_order(self, value): if isinstance(value,UINT): self.__field_pn_order=value else: self.__field_pn_order=UINT(value,**{'sizeinbytes': 1}) def __delfield_pn_order(self): del self.__field_pn_order pn_order=property(__getfield_pn_order, __setfield_pn_order, __delfield_pn_order, "0-based order of this phone within this contact") def __getfield_phone_number(self): return self.__field_phone_number.getvalue() def __setfield_phone_number(self, value): if isinstance(value,LGHEXPN): self.__field_phone_number=value else: self.__field_phone_number=LGHEXPN(value,**{'sizeinbytes': 25}) def __delfield_phone_number(self): del self.__field_phone_number phone_number=property(__getfield_phone_number, __setfield_phone_number, __delfield_phone_number, None) def __getfield_type(self): return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,UINT): self.__field_type=value else: self.__field_type=UINT(value,**{'sizeinbytes': 2}) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, None) def __getfield_unk2(self): try: self.__field_unk2 except: self.__field_unk2=UINT(**{'sizeinbytes': 3, 'default': 0 }) return self.__field_unk2.getvalue() def __setfield_unk2(self, value): if isinstance(value,UINT): self.__field_unk2=value else: self.__field_unk2=UINT(value,**{'sizeinbytes': 3, 'default': 0 }) def __delfield_unk2(self): del self.__field_unk2 unk2=property(__getfield_unk2, __setfield_unk2, __delfield_unk2, None) def __getfield_exit_tag(self): try: self.__field_exit_tag except: self.__field_exit_tag=USTRING(**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) return self.__field_exit_tag.getvalue() def __setfield_exit_tag(self, value): if isinstance(value,USTRING): self.__field_exit_tag=value else: self.__field_exit_tag=USTRING(value,**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) def __delfield_exit_tag(self): del self.__field_exit_tag exit_tag=property(__getfield_exit_tag, __setfield_exit_tag, __delfield_exit_tag, None) def __getfield_blanks(self): try: self.__field_blanks except: self.__field_blanks=DATA(**{'sizeinbytes': 60, 'default': '\xFF'*60 }) return self.__field_blanks.getvalue() def __setfield_blanks(self, value): if isinstance(value,DATA): self.__field_blanks=value else: self.__field_blanks=DATA(value,**{'sizeinbytes': 60, 'default': '\xFF'*60 }) def __delfield_blanks(self): del self.__field_blanks blanks=property(__getfield_blanks, __setfield_blanks, __delfield_blanks, None) def iscontainer(self): return True def containerelements(self): yield ('entry_tag', self.__field_entry_tag, None) if self.entry_tag==PB_NUMBER_SOR: yield ('pad00', self.__field_pad00, None) yield ('mod_date', self.__field_mod_date, None) yield ('unk0', self.__field_unk0, None) yield ('pn_id', self.__field_pn_id, None) yield ('pe_id', self.__field_pe_id, None) yield ('pn_order', self.__field_pn_order, "0-based order of this phone within this contact") yield ('phone_number', self.__field_phone_number, None) yield ('type', self.__field_type, None) yield ('unk2', self.__field_unk2, None) yield ('exit_tag', self.__field_exit_tag, None) else: yield ('blanks', self.__field_blanks, None) def valid(self): global PB_NUMBER_SOR return self.entry_tag==PB_NUMBER_SOR class pnfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pnfile,self).__init__(**dict) if self.__class__ is pnfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pnfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pnfile,kwargs) if len(args): dict2={ 'elementclass': pnfileentry, 'createdefault': True, 'length': NUMPHONENUMBERENTRIES } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': pnfileentry, 'createdefault': True, 'length': NUMPHONENUMBERENTRIES }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': pnfileentry, 'createdefault': True, 'length': NUMPHONENUMBERENTRIES }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': pnfileentry, 'createdefault': True, 'length': NUMPHONENUMBERENTRIES }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': pnfileentry, 'createdefault': True, 'length': NUMPHONENUMBERENTRIES }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class PathIndexEntry(BaseProtogenClass): __fields=['pathname'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PathIndexEntry,self).__init__(**dict) if self.__class__ is PathIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PathIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PathIndexEntry,kwargs) if len(args): dict2={'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' } dict2.update(kwargs) kwargs=dict2 self.__field_pathname=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_pathname except: self.__field_pathname=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' }) self.__field_pathname.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pathname=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' }) self.__field_pathname.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pathname(self): try: self.__field_pathname except: self.__field_pathname=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' }) return self.__field_pathname.getvalue() def __setfield_pathname(self, value): if isinstance(value,USTRING): self.__field_pathname=value else: self.__field_pathname=USTRING(value,**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' }) def __delfield_pathname(self): del self.__field_pathname pathname=property(__getfield_pathname, __setfield_pathname, __delfield_pathname, None) def iscontainer(self): return True def containerelements(self): yield ('pathname', self.__field_pathname, None) class PathIndexFile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PathIndexFile,self).__init__(**dict) if self.__class__ is PathIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PathIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PathIndexFile,kwargs) if len(args): dict2={ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class RecordIdEntry(BaseProtogenClass): __fields=['idnum'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(RecordIdEntry,self).__init__(**dict) if self.__class__ is RecordIdEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(RecordIdEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(RecordIdEntry,kwargs) if len(args): dict2={'sizeinbytes': 4} dict2.update(kwargs) kwargs=dict2 self.__field_idnum=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_idnum.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_idnum=UINT(**{'sizeinbytes': 4}) self.__field_idnum.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_idnum(self): return self.__field_idnum.getvalue() def __setfield_idnum(self, value): if isinstance(value,UINT): self.__field_idnum=value else: self.__field_idnum=UINT(value,**{'sizeinbytes': 4}) def __delfield_idnum(self): del self.__field_idnum idnum=property(__getfield_idnum, __setfield_idnum, __delfield_idnum, None) def iscontainer(self): return True def containerelements(self): yield ('idnum', self.__field_idnum, None) class iceentry(BaseProtogenClass): "ICE index entries" __fields=['entry_assigned', 'entry_number', 'pb_index', 'dontcare'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(iceentry,self).__init__(**dict) if self.__class__ is iceentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(iceentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(iceentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry_assigned except: self.__field_entry_assigned=UINT(**{'sizeinbytes': 2, 'default': 0x0000 }) self.__field_entry_assigned.writetobuffer(buf) try: self.__field_entry_number except: self.__field_entry_number=UINT(**{'sizeinbytes': 2, 'default': 0xFFFF }) self.__field_entry_number.writetobuffer(buf) try: self.__field_pb_index except: self.__field_pb_index=UINT(**{'sizeinbytes': 2, 'default': 0x0000 }) self.__field_pb_index.writetobuffer(buf) try: self.__field_dontcare except: self.__field_dontcare=DATA(**{'sizeinbytes': 82, 'default': '\x00'*82 }) self.__field_dontcare.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry_assigned=UINT(**{'sizeinbytes': 2, 'default': 0x0000 }) self.__field_entry_assigned.readfrombuffer(buf) self.__field_entry_number=UINT(**{'sizeinbytes': 2, 'default': 0xFFFF }) self.__field_entry_number.readfrombuffer(buf) self.__field_pb_index=UINT(**{'sizeinbytes': 2, 'default': 0x0000 }) self.__field_pb_index.readfrombuffer(buf) self.__field_dontcare=DATA(**{'sizeinbytes': 82, 'default': '\x00'*82 }) self.__field_dontcare.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry_assigned(self): try: self.__field_entry_assigned except: self.__field_entry_assigned=UINT(**{'sizeinbytes': 2, 'default': 0x0000 }) return self.__field_entry_assigned.getvalue() def __setfield_entry_assigned(self, value): if isinstance(value,UINT): self.__field_entry_assigned=value else: self.__field_entry_assigned=UINT(value,**{'sizeinbytes': 2, 'default': 0x0000 }) def __delfield_entry_assigned(self): del self.__field_entry_assigned entry_assigned=property(__getfield_entry_assigned, __setfield_entry_assigned, __delfield_entry_assigned, "0 if not assigned, 1 if assigned") def __getfield_entry_number(self): try: self.__field_entry_number except: self.__field_entry_number=UINT(**{'sizeinbytes': 2, 'default': 0xFFFF }) return self.__field_entry_number.getvalue() def __setfield_entry_number(self, value): if isinstance(value,UINT): self.__field_entry_number=value else: self.__field_entry_number=UINT(value,**{'sizeinbytes': 2, 'default': 0xFFFF }) def __delfield_entry_number(self): del self.__field_entry_number entry_number=property(__getfield_entry_number, __setfield_entry_number, __delfield_entry_number, "0-based ICE entry number when assigned, 0xffff if unassigned") def __getfield_pb_index(self): try: self.__field_pb_index except: self.__field_pb_index=UINT(**{'sizeinbytes': 2, 'default': 0x0000 }) return self.__field_pb_index.getvalue() def __setfield_pb_index(self, value): if isinstance(value,UINT): self.__field_pb_index=value else: self.__field_pb_index=UINT(value,**{'sizeinbytes': 2, 'default': 0x0000 }) def __delfield_pb_index(self): del self.__field_pb_index pb_index=property(__getfield_pb_index, __setfield_pb_index, __delfield_pb_index, "0-based phone book entry number") def __getfield_dontcare(self): try: self.__field_dontcare except: self.__field_dontcare=DATA(**{'sizeinbytes': 82, 'default': '\x00'*82 }) return self.__field_dontcare.getvalue() def __setfield_dontcare(self, value): if isinstance(value,DATA): self.__field_dontcare=value else: self.__field_dontcare=DATA(value,**{'sizeinbytes': 82, 'default': '\x00'*82 }) def __delfield_dontcare(self): del self.__field_dontcare dontcare=property(__getfield_dontcare, __setfield_dontcare, __delfield_dontcare, None) def iscontainer(self): return True def containerelements(self): yield ('entry_assigned', self.__field_entry_assigned, "0 if not assigned, 1 if assigned") yield ('entry_number', self.__field_entry_number, "0-based ICE entry number when assigned, 0xffff if unassigned") yield ('pb_index', self.__field_pb_index, "0-based phone book entry number") yield ('dontcare', self.__field_dontcare, None) def valid(self): return self.entry_assigned==1 and \ self.entry_number"): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': iceentry, 'createdefault': True, 'length': NUMEMERGENCYCONTACTS }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': iceentry, 'createdefault': True, 'length': NUMEMERGENCYCONTACTS }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': iceentry, 'createdefault': True, 'length': NUMEMERGENCYCONTACTS }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': iceentry, 'createdefault': True, 'length': NUMEMERGENCYCONTACTS }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class scheduleevent(BaseProtogenClass): __fields=['packet_size', 'pos', 'description', 'cdate', 'mdate', 'start', 'end_time', 'end_date', 'repeat', 'alarmindex_vibrate', 'ringtone', 'unknown1', 'alarmminutes', 'alarmhours', 'unknown2', 'unknown3', 'unknown4', 'serial_number', 'blanks'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleevent,self).__init__(**dict) if self.__class__ is scheduleevent: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleevent,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleevent,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_packet_size except: self.__field_packet_size=UINT(**{ 'constant': 138 }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_pos except: self.__field_pos=UINT(**{'sizeinbytes': 4, 'default': 0xffffffff }) self.__field_pos.writetobuffer(buf) if self.pos!=0xffffffff: try: self.__field_description except: self.__field_description=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) self.__field_description.writetobuffer(buf) try: self.__field_cdate except: self.__field_cdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) self.__field_cdate.writetobuffer(buf) try: self.__field_mdate except: self.__field_mdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) self.__field_mdate.writetobuffer(buf) try: self.__field_start except: self.__field_start=LGCALDATE(**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) self.__field_start.writetobuffer(buf) try: self.__field_end_time except: self.__field_end_time=LGCALDATE(**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) self.__field_end_time.writetobuffer(buf) try: self.__field_end_date except: self.__field_end_date=LGCALDATE(**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) self.__field_end_date.writetobuffer(buf) try: self.__field_repeat except: self.__field_repeat=LGCALREPEAT(**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) self.__field_repeat.writetobuffer(buf) try: self.__field_alarmindex_vibrate except: self.__field_alarmindex_vibrate=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_alarmindex_vibrate.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_ringtone.writetobuffer(buf) try: self.__field_unknown1 except: self.__field_unknown1=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_unknown1.writetobuffer(buf) try: self.__field_alarmminutes except: self.__field_alarmminutes=UINT(**{'sizeinbytes': 1, 'default': 0xff }) self.__field_alarmminutes.writetobuffer(buf) try: self.__field_alarmhours except: self.__field_alarmhours=UINT(**{'sizeinbytes': 1, 'default': 0xff }) self.__field_alarmhours.writetobuffer(buf) try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_unknown2.writetobuffer(buf) try: self.__field_unknown3 except: self.__field_unknown3=UINT(**{'sizeinbytes': 2, 'default': 0x01FC }) self.__field_unknown3.writetobuffer(buf) try: self.__field_unknown4 except: self.__field_unknown4=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_unknown4.writetobuffer(buf) try: self.__field_serial_number except: self.__field_serial_number=USTRING(**{'sizeinbytes': 65, 'default': '000000d1-00000000-0000000000-VX910V03', 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_serial_number.writetobuffer(buf) else: try: self.__field_blanks except: self.__field_blanks=STRING(**{'sizeinbytes': 134, 'default': '', 'terminator': 0xff, 'pad': 0xff }) self.__field_blanks.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4, 'default': 0xffffffff }) self.__field_pos.readfrombuffer(buf) if self.pos!=0xffffffff: self.__field_description=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) self.__field_description.readfrombuffer(buf) self.__field_cdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) self.__field_cdate.readfrombuffer(buf) self.__field_mdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) self.__field_mdate.readfrombuffer(buf) self.__field_start=LGCALDATE(**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) self.__field_start.readfrombuffer(buf) self.__field_end_time=LGCALDATE(**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) self.__field_end_time.readfrombuffer(buf) self.__field_end_date=LGCALDATE(**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) self.__field_end_date.readfrombuffer(buf) self.__field_repeat=LGCALREPEAT(**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) self.__field_repeat.readfrombuffer(buf) self.__field_alarmindex_vibrate=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_alarmindex_vibrate.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_ringtone.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_unknown1.readfrombuffer(buf) self.__field_alarmminutes=UINT(**{'sizeinbytes': 1, 'default': 0xff }) self.__field_alarmminutes.readfrombuffer(buf) self.__field_alarmhours=UINT(**{'sizeinbytes': 1, 'default': 0xff }) self.__field_alarmhours.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 2, 'default': 0x01FC }) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_unknown4.readfrombuffer(buf) self.__field_serial_number=USTRING(**{'sizeinbytes': 65, 'default': '000000d1-00000000-0000000000-VX910V03', 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_serial_number.readfrombuffer(buf) else: self.__field_blanks=STRING(**{'sizeinbytes': 134, 'default': '', 'terminator': 0xff, 'pad': 0xff }) self.__field_blanks.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_packet_size(self): return self.__field_packet_size.getvalue() def __setfield_packet_size(self, value): if isinstance(value,UINT): self.__field_packet_size=value else: self.__field_packet_size=UINT(value,**{ 'constant': 138 }) def __delfield_packet_size(self): del self.__field_packet_size packet_size=property(__getfield_packet_size, __setfield_packet_size, __delfield_packet_size, None) def __getfield_pos(self): try: self.__field_pos except: self.__field_pos=UINT(**{'sizeinbytes': 4, 'default': 0xffffffff }) return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4, 'default': 0xffffffff }) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "position within file, used as an event id") def __getfield_description(self): try: self.__field_description except: self.__field_description=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,USTRING): self.__field_description=value else: self.__field_description=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def __getfield_cdate(self): try: self.__field_cdate except: self.__field_cdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) return self.__field_cdate.getvalue() def __setfield_cdate(self, value): if isinstance(value,GPSDATE): self.__field_cdate=value else: self.__field_cdate=GPSDATE(value,**{'sizeinbytes': 4, 'default': GPSDATE.now() }) def __delfield_cdate(self): del self.__field_cdate cdate=property(__getfield_cdate, __setfield_cdate, __delfield_cdate, None) def __getfield_mdate(self): try: self.__field_mdate except: self.__field_mdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) return self.__field_mdate.getvalue() def __setfield_mdate(self, value): if isinstance(value,GPSDATE): self.__field_mdate=value else: self.__field_mdate=GPSDATE(value,**{'sizeinbytes': 4, 'default': GPSDATE.now() }) def __delfield_mdate(self): del self.__field_mdate mdate=property(__getfield_mdate, __setfield_mdate, __delfield_mdate, None) def __getfield_start(self): try: self.__field_start except: self.__field_start=LGCALDATE(**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,LGCALDATE): self.__field_start=value else: self.__field_start=LGCALDATE(value,**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end_time(self): try: self.__field_end_time except: self.__field_end_time=LGCALDATE(**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) return self.__field_end_time.getvalue() def __setfield_end_time(self, value): if isinstance(value,LGCALDATE): self.__field_end_time=value else: self.__field_end_time=LGCALDATE(value,**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) def __delfield_end_time(self): del self.__field_end_time end_time=property(__getfield_end_time, __setfield_end_time, __delfield_end_time, None) def __getfield_end_date(self): try: self.__field_end_date except: self.__field_end_date=LGCALDATE(**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) return self.__field_end_date.getvalue() def __setfield_end_date(self, value): if isinstance(value,LGCALDATE): self.__field_end_date=value else: self.__field_end_date=LGCALDATE(value,**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) def __delfield_end_date(self): del self.__field_end_date end_date=property(__getfield_end_date, __setfield_end_date, __delfield_end_date, None) def __getfield_repeat(self): try: self.__field_repeat except: self.__field_repeat=LGCALREPEAT(**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,LGCALREPEAT): self.__field_repeat=value else: self.__field_repeat=LGCALREPEAT(value,**{'sizeinbytes': 4, 'default': (0,0,0,0,0) }) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_alarmindex_vibrate(self): try: self.__field_alarmindex_vibrate except: self.__field_alarmindex_vibrate=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_alarmindex_vibrate.getvalue() def __setfield_alarmindex_vibrate(self, value): if isinstance(value,UINT): self.__field_alarmindex_vibrate=value else: self.__field_alarmindex_vibrate=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_alarmindex_vibrate(self): del self.__field_alarmindex_vibrate alarmindex_vibrate=property(__getfield_alarmindex_vibrate, __setfield_alarmindex_vibrate, __delfield_alarmindex_vibrate, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_unknown1(self): try: self.__field_unknown1 except: self.__field_unknown1=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_alarmminutes(self): try: self.__field_alarmminutes except: self.__field_alarmminutes=UINT(**{'sizeinbytes': 1, 'default': 0xff }) return self.__field_alarmminutes.getvalue() def __setfield_alarmminutes(self, value): if isinstance(value,UINT): self.__field_alarmminutes=value else: self.__field_alarmminutes=UINT(value,**{'sizeinbytes': 1, 'default': 0xff }) def __delfield_alarmminutes(self): del self.__field_alarmminutes alarmminutes=property(__getfield_alarmminutes, __setfield_alarmminutes, __delfield_alarmminutes, "a value of 0xFF indicates not set") def __getfield_alarmhours(self): try: self.__field_alarmhours except: self.__field_alarmhours=UINT(**{'sizeinbytes': 1, 'default': 0xff }) return self.__field_alarmhours.getvalue() def __setfield_alarmhours(self, value): if isinstance(value,UINT): self.__field_alarmhours=value else: self.__field_alarmhours=UINT(value,**{'sizeinbytes': 1, 'default': 0xff }) def __delfield_alarmhours(self): del self.__field_alarmhours alarmhours=property(__getfield_alarmhours, __setfield_alarmhours, __delfield_alarmhours, "a value of 0xFF indicates not set") def __getfield_unknown2(self): try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): try: self.__field_unknown3 except: self.__field_unknown3=UINT(**{'sizeinbytes': 2, 'default': 0x01FC }) return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 2, 'default': 0x01FC }) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): try: self.__field_unknown4 except: self.__field_unknown4=UINT(**{'sizeinbytes': 4, 'default': 0 }) return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 4, 'default': 0 }) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_serial_number(self): try: self.__field_serial_number except: self.__field_serial_number=USTRING(**{'sizeinbytes': 65, 'default': '000000d1-00000000-0000000000-VX910V03', 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) return self.__field_serial_number.getvalue() def __setfield_serial_number(self, value): if isinstance(value,USTRING): self.__field_serial_number=value else: self.__field_serial_number=USTRING(value,**{'sizeinbytes': 65, 'default': '000000d1-00000000-0000000000-VX910V03', 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_serial_number(self): del self.__field_serial_number serial_number=property(__getfield_serial_number, __setfield_serial_number, __delfield_serial_number, None) def __getfield_blanks(self): try: self.__field_blanks except: self.__field_blanks=STRING(**{'sizeinbytes': 134, 'default': '', 'terminator': 0xff, 'pad': 0xff }) return self.__field_blanks.getvalue() def __setfield_blanks(self, value): if isinstance(value,STRING): self.__field_blanks=value else: self.__field_blanks=STRING(value,**{'sizeinbytes': 134, 'default': '', 'terminator': 0xff, 'pad': 0xff }) def __delfield_blanks(self): del self.__field_blanks blanks=property(__getfield_blanks, __setfield_blanks, __delfield_blanks, None) def iscontainer(self): return True def containerelements(self): yield ('packet_size', self.__field_packet_size, None) yield ('pos', self.__field_pos, "position within file, used as an event id") if self.pos!=0xffffffff: yield ('description', self.__field_description, None) yield ('cdate', self.__field_cdate, None) yield ('mdate', self.__field_mdate, None) yield ('start', self.__field_start, None) yield ('end_time', self.__field_end_time, None) yield ('end_date', self.__field_end_date, None) yield ('repeat', self.__field_repeat, None) yield ('alarmindex_vibrate', self.__field_alarmindex_vibrate, None) yield ('ringtone', self.__field_ringtone, None) yield ('unknown1', self.__field_unknown1, None) yield ('alarmminutes', self.__field_alarmminutes, "a value of 0xFF indicates not set") yield ('alarmhours', self.__field_alarmhours, "a value of 0xFF indicates not set") yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) yield ('serial_number', self.__field_serial_number, None) else: yield ('blanks', self.__field_blanks, None) class schedulefile(BaseProtogenClass): __fields=['numactiveitems', 'events'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(schedulefile,self).__init__(**dict) if self.__class__ is schedulefile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(schedulefile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(schedulefile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{ 'elementclass': scheduleevent, 'length': NUMCALENDARENTRIES, 'createdefault': True }) self.__field_events.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_events=LIST(**{ 'elementclass': scheduleevent, 'length': NUMCALENDARENTRIES, 'createdefault': True }) self.__field_events.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{ 'elementclass': scheduleevent, 'length': NUMCALENDARENTRIES, 'createdefault': True }) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{ 'elementclass': scheduleevent, 'length': NUMCALENDARENTRIES, 'createdefault': True }) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('events', self.__field_events, None) class scheduleringerfile(BaseProtogenClass): __fields=['numringers', 'ringerpaths'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleringerfile,self).__init__(**dict) if self.__class__ is scheduleringerfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleringerfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleringerfile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numringers.writetobuffer(buf) try: self.__field_ringerpaths except: self.__field_ringerpaths=LIST(**{'elementclass': _gen_p_lgvx9100_265}) self.__field_ringerpaths.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numringers=UINT(**{'sizeinbytes': 4}) self.__field_numringers.readfrombuffer(buf) self.__field_ringerpaths=LIST(**{'elementclass': _gen_p_lgvx9100_265}) self.__field_ringerpaths.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numringers(self): return self.__field_numringers.getvalue() def __setfield_numringers(self, value): if isinstance(value,UINT): self.__field_numringers=value else: self.__field_numringers=UINT(value,**{'sizeinbytes': 4}) def __delfield_numringers(self): del self.__field_numringers numringers=property(__getfield_numringers, __setfield_numringers, __delfield_numringers, None) def __getfield_ringerpaths(self): try: self.__field_ringerpaths except: self.__field_ringerpaths=LIST(**{'elementclass': _gen_p_lgvx9100_265}) return self.__field_ringerpaths.getvalue() def __setfield_ringerpaths(self, value): if isinstance(value,LIST): self.__field_ringerpaths=value else: self.__field_ringerpaths=LIST(value,**{'elementclass': _gen_p_lgvx9100_265}) def __delfield_ringerpaths(self): del self.__field_ringerpaths ringerpaths=property(__getfield_ringerpaths, __setfield_ringerpaths, __delfield_ringerpaths, None) def iscontainer(self): return True def containerelements(self): yield ('numringers', self.__field_numringers, None) yield ('ringerpaths', self.__field_ringerpaths, None) class _gen_p_lgvx9100_265(BaseProtogenClass): 'Anonymous inner class' __fields=['path'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx9100_265,self).__init__(**dict) if self.__class__ is _gen_p_lgvx9100_265: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx9100_265,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx9100_265,kwargs) if len(args): dict2={'sizeinbytes': 256, 'encoding': PHONE_ENCODING, 'raiseontruncate': True } dict2.update(kwargs) kwargs=dict2 self.__field_path=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_path.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_path=USTRING(**{'sizeinbytes': 256, 'encoding': PHONE_ENCODING, 'raiseontruncate': True }) self.__field_path.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_path(self): return self.__field_path.getvalue() def __setfield_path(self, value): if isinstance(value,USTRING): self.__field_path=value else: self.__field_path=USTRING(value,**{'sizeinbytes': 256, 'encoding': PHONE_ENCODING, 'raiseontruncate': True }) def __delfield_path(self): del self.__field_path path=property(__getfield_path, __setfield_path, __delfield_path, None) def iscontainer(self): return True def containerelements(self): yield ('path', self.__field_path, None) class msg_record(BaseProtogenClass): __fields=['lastone', 'msglen', 'binary', 'unknown3', 'unknown4', 'unknown6', 'length', 'msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(msg_record,self).__init__(**dict) if self.__class__ is msg_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(msg_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(msg_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_lastone except: self.__field_lastone=BOOL(**{ 'default': False }) try: self.__field_msglen except: self.__field_msglen=UINT(**{ 'default': 220 if self.lastone else 223 }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_binary.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_length.writetobuffer(buf) try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx9100_280, 'length': self.msglen }) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_binary=UINT(**{'sizeinbytes': 1}) self.__field_binary.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1}) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 1}) self.__field_unknown4.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 1}) self.__field_unknown6.readfrombuffer(buf) self.__field_length=UINT(**{'sizeinbytes': 1}) self.__field_length.readfrombuffer(buf) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx9100_280, 'length': self.msglen }) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_lastone(self): try: self.__field_lastone except: self.__field_lastone=BOOL(**{ 'default': False }) return self.__field_lastone.getvalue() def __setfield_lastone(self, value): if isinstance(value,BOOL): self.__field_lastone=value else: self.__field_lastone=BOOL(value,**{ 'default': False }) def __delfield_lastone(self): del self.__field_lastone lastone=property(__getfield_lastone, __setfield_lastone, __delfield_lastone, None) def __getfield_msglen(self): try: self.__field_msglen except: self.__field_msglen=UINT(**{ 'default': 220 if self.lastone else 223 }) return self.__field_msglen.getvalue() def __setfield_msglen(self, value): if isinstance(value,UINT): self.__field_msglen=value else: self.__field_msglen=UINT(value,**{ 'default': 220 if self.lastone else 223 }) def __delfield_msglen(self): del self.__field_msglen msglen=property(__getfield_msglen, __setfield_msglen, __delfield_msglen, None) def __getfield_binary(self): return self.__field_binary.getvalue() def __setfield_binary(self, value): if isinstance(value,UINT): self.__field_binary=value else: self.__field_binary=UINT(value,**{'sizeinbytes': 1}) def __delfield_binary(self): del self.__field_binary binary=property(__getfield_binary, __setfield_binary, __delfield_binary, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_length(self): return self.__field_length.getvalue() def __setfield_length(self, value): if isinstance(value,UINT): self.__field_length=value else: self.__field_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_length(self): del self.__field_length length=property(__getfield_length, __setfield_length, __delfield_length, None) def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx9100_280, 'length': self.msglen }) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx9100_280, 'length': self.msglen }) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('lastone', self.__field_lastone, None) yield ('msglen', self.__field_msglen, None) yield ('binary', self.__field_binary, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) yield ('unknown6', self.__field_unknown6, None) yield ('length', self.__field_length, None) yield ('msg', self.__field_msg, None) class _gen_p_lgvx9100_280(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx9100_280,self).__init__(**dict) if self.__class__ is _gen_p_lgvx9100_280: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx9100_280,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx9100_280,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class recipient_record(BaseProtogenClass): __fields=['lastone', 'unknown1', 'number', 'numberlen', 'status', 'dunno1', 'timesent', 'timereceived', 'unknown2', 'unknown3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(recipient_record,self).__init__(**dict) if self.__class__ is recipient_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(recipient_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(recipient_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_lastone except: self.__field_lastone=BOOL(**{ 'default': False }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_numberlen.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_timereceived.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=DATA(**{'sizeinbytes': 33}) self.__field_unknown1.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49}) self.__field_number.readfrombuffer(buf) self.__field_numberlen=UINT(**{'sizeinbytes': 1}) self.__field_numberlen.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_dunno1=UNKNOWN(**{'sizeinbytes': 8}) self.__field_dunno1.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_timereceived=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timereceived.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=DATA(**{ 'sizeinbytes': 142 if self.lastone else 147 }) self.__field_unknown3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_lastone(self): try: self.__field_lastone except: self.__field_lastone=BOOL(**{ 'default': False }) return self.__field_lastone.getvalue() def __setfield_lastone(self, value): if isinstance(value,BOOL): self.__field_lastone=value else: self.__field_lastone=BOOL(value,**{ 'default': False }) def __delfield_lastone(self): del self.__field_lastone lastone=property(__getfield_lastone, __setfield_lastone, __delfield_lastone, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,DATA): self.__field_unknown1=value else: self.__field_unknown1=DATA(value,**{'sizeinbytes': 33}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_numberlen(self): return self.__field_numberlen.getvalue() def __setfield_numberlen(self, value): if isinstance(value,UINT): self.__field_numberlen=value else: self.__field_numberlen=UINT(value,**{'sizeinbytes': 1}) def __delfield_numberlen(self): del self.__field_numberlen numberlen=property(__getfield_numberlen, __setfield_numberlen, __delfield_numberlen, "length of the number") def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UNKNOWN): self.__field_dunno1=value else: self.__field_dunno1=UNKNOWN(value,**{'sizeinbytes': 8}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_timereceived(self): return self.__field_timereceived.getvalue() def __setfield_timereceived(self, value): if isinstance(value,LGCALDATE): self.__field_timereceived=value else: self.__field_timereceived=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timereceived(self): del self.__field_timereceived timereceived=property(__getfield_timereceived, __setfield_timereceived, __delfield_timereceived, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,DATA): self.__field_unknown3=value else: self.__field_unknown3=DATA(value,**{ 'sizeinbytes': 142 if self.lastone else 147 }) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def iscontainer(self): return True def containerelements(self): yield ('lastone', self.__field_lastone, None) yield ('unknown1', self.__field_unknown1, None) yield ('number', self.__field_number, None) yield ('numberlen', self.__field_numberlen, "length of the number") yield ('status', self.__field_status, None) yield ('dunno1', self.__field_dunno1, None) yield ('timesent', self.__field_timesent, None) yield ('timereceived', self.__field_timereceived, None) yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) class sms_saved(BaseProtogenClass): __fields=['outboxmsg', 'GPStime', 'outbox'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_saved,self).__init__(**dict) if self.__class__ is sms_saved: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_saved,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_saved,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_outboxmsg except: self.__field_outboxmsg=BOOL(**{ 'default': True }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_outbox.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_outbox=sms_out() self.__field_outbox.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_outboxmsg(self): try: self.__field_outboxmsg except: self.__field_outboxmsg=BOOL(**{ 'default': True }) return self.__field_outboxmsg.getvalue() def __setfield_outboxmsg(self, value): if isinstance(value,BOOL): self.__field_outboxmsg=value else: self.__field_outboxmsg=BOOL(value,**{ 'default': True }) def __delfield_outboxmsg(self): del self.__field_outboxmsg outboxmsg=property(__getfield_outboxmsg, __setfield_outboxmsg, __delfield_outboxmsg, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_outbox(self): return self.__field_outbox.getvalue() def __setfield_outbox(self, value): if isinstance(value,sms_out): self.__field_outbox=value else: self.__field_outbox=sms_out(value,) def __delfield_outbox(self): del self.__field_outbox outbox=property(__getfield_outbox, __setfield_outbox, __delfield_outbox, None) def iscontainer(self): return True def containerelements(self): yield ('outboxmsg', self.__field_outboxmsg, None) yield ('GPStime', self.__field_GPStime, None) yield ('outbox', self.__field_outbox, None) class sms_out(BaseProtogenClass): __fields=['unk0', 'index', 'locked', 'unk1', 'timestamp', 'timesent', 'subject', 'num_msg_elements', 'priority', 'unk2', 'callback', 'rcps', 'rcplast', 'msgs', 'msglast', 'pad1'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_out,self).__init__(**dict) if self.__class__ is sms_out: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_out,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_out,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unk0.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unk1.writetobuffer(buf) self.__field_timestamp.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_unk2.writetobuffer(buf) self.__field_callback.writetobuffer(buf) try: self.__field_rcps except: self.__field_rcps=LIST(**{ 'elementclass': recipient_record,'length': 9 }) self.__field_rcps.writetobuffer(buf) try: self.__field_rcplast except: self.__field_rcplast=recipient_record(**{ 'lastone': True }) self.__field_rcplast.writetobuffer(buf) try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': msg_record, 'length': 6}) self.__field_msgs.writetobuffer(buf) try: self.__field_msglast except: self.__field_msglast=msg_record(**{ 'lastone': True }) self.__field_msglast.writetobuffer(buf) self.__field_pad1.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unk0=UINT(**{'sizeinbytes': 4}) self.__field_unk0.readfrombuffer(buf) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unk1=UNKNOWN(**{'sizeinbytes': 3}) self.__field_unk1.readfrombuffer(buf) self.__field_timestamp=GPSDATE(**{'sizeinbytes': 4}) self.__field_timestamp.readfrombuffer(buf) self.__field_timesent=GPSDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 61, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 2}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 2}) self.__field_priority.readfrombuffer(buf) self.__field_unk2=UNKNOWN(**{'sizeinbytes': 2}) self.__field_unk2.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 29}) self.__field_callback.readfrombuffer(buf) self.__field_rcps=LIST(**{ 'elementclass': recipient_record,'length': 9 }) self.__field_rcps.readfrombuffer(buf) self.__field_rcplast=recipient_record(**{ 'lastone': True }) self.__field_rcplast.readfrombuffer(buf) self.__field_msgs=LIST(**{'elementclass': msg_record, 'length': 6}) self.__field_msgs.readfrombuffer(buf) self.__field_msglast=msg_record(**{ 'lastone': True }) self.__field_msglast.readfrombuffer(buf) self.__field_pad1=UNKNOWN() self.__field_pad1.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unk0(self): return self.__field_unk0.getvalue() def __setfield_unk0(self, value): if isinstance(value,UINT): self.__field_unk0=value else: self.__field_unk0=UINT(value,**{'sizeinbytes': 4}) def __delfield_unk0(self): del self.__field_unk0 unk0=property(__getfield_unk0, __setfield_unk0, __delfield_unk0, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unk1(self): return self.__field_unk1.getvalue() def __setfield_unk1(self, value): if isinstance(value,UNKNOWN): self.__field_unk1=value else: self.__field_unk1=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_unk1(self): del self.__field_unk1 unk1=property(__getfield_unk1, __setfield_unk1, __delfield_unk1, None) def __getfield_timestamp(self): return self.__field_timestamp.getvalue() def __setfield_timestamp(self, value): if isinstance(value,GPSDATE): self.__field_timestamp=value else: self.__field_timestamp=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_timestamp(self): del self.__field_timestamp timestamp=property(__getfield_timestamp, __setfield_timestamp, __delfield_timestamp, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,GPSDATE): self.__field_timesent=value else: self.__field_timesent=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 61, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 2}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 2}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_unk2(self): return self.__field_unk2.getvalue() def __setfield_unk2(self, value): if isinstance(value,UNKNOWN): self.__field_unk2=value else: self.__field_unk2=UNKNOWN(value,**{'sizeinbytes': 2}) def __delfield_unk2(self): del self.__field_unk2 unk2=property(__getfield_unk2, __setfield_unk2, __delfield_unk2, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 29}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_rcps(self): try: self.__field_rcps except: self.__field_rcps=LIST(**{ 'elementclass': recipient_record,'length': 9 }) return self.__field_rcps.getvalue() def __setfield_rcps(self, value): if isinstance(value,LIST): self.__field_rcps=value else: self.__field_rcps=LIST(value,**{ 'elementclass': recipient_record,'length': 9 }) def __delfield_rcps(self): del self.__field_rcps rcps=property(__getfield_rcps, __setfield_rcps, __delfield_rcps, None) def __getfield_rcplast(self): try: self.__field_rcplast except: self.__field_rcplast=recipient_record(**{ 'lastone': True }) return self.__field_rcplast.getvalue() def __setfield_rcplast(self, value): if isinstance(value,recipient_record): self.__field_rcplast=value else: self.__field_rcplast=recipient_record(value,**{ 'lastone': True }) def __delfield_rcplast(self): del self.__field_rcplast rcplast=property(__getfield_rcplast, __setfield_rcplast, __delfield_rcplast, None) def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': msg_record, 'length': 6}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'elementclass': msg_record, 'length': 6}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def __getfield_msglast(self): try: self.__field_msglast except: self.__field_msglast=msg_record(**{ 'lastone': True }) return self.__field_msglast.getvalue() def __setfield_msglast(self, value): if isinstance(value,msg_record): self.__field_msglast=value else: self.__field_msglast=msg_record(value,**{ 'lastone': True }) def __delfield_msglast(self): del self.__field_msglast msglast=property(__getfield_msglast, __setfield_msglast, __delfield_msglast, None) def __getfield_pad1(self): return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def iscontainer(self): return True def containerelements(self): yield ('unk0', self.__field_unk0, None) yield ('index', self.__field_index, None) yield ('locked', self.__field_locked, None) yield ('unk1', self.__field_unk1, None) yield ('timestamp', self.__field_timestamp, None) yield ('timesent', self.__field_timesent, None) yield ('subject', self.__field_subject, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('priority', self.__field_priority, None) yield ('unk2', self.__field_unk2, None) yield ('callback', self.__field_callback, None) yield ('rcps', self.__field_rcps, None) yield ('rcplast', self.__field_rcplast, None) yield ('msgs', self.__field_msgs, None) yield ('msglast', self.__field_msglast, None) yield ('pad1', self.__field_pad1, None) _msg=None def _get_msg(self): if self._msg is None: self._msg=[x for x in self.msgs]+[self.msglast] return self._msg messages=property(fget=_get_msg) _rcp=None def _get_recipients(self): if self._rcp is None: self._rcp=[x for x in self.rcps]+[self.rcplast] return self._rcp recipients=property(fget=_get_recipients) class SMSINBOXMSGFRAGMENT(BaseProtogenClass): __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSINBOXMSGFRAGMENT,self).__init__(**dict) if self.__class__ is SMSINBOXMSGFRAGMENT: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSINBOXMSGFRAGMENT,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSINBOXMSGFRAGMENT,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx9100_333, 'length': 222 } dict2.update(kwargs) kwargs=dict2 self.__field_msg=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx9100_333, 'length': 222 }) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx9100_333, 'length': 222 }) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx9100_333, 'length': 222 }) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx9100_333, 'length': 222 }) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class _gen_p_lgvx9100_333(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx9100_333,self).__init__(**dict) if self.__class__ is _gen_p_lgvx9100_333: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx9100_333,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx9100_333,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class sms_in(BaseProtogenClass): __fields=['unk0', 'index', 'unk1', 'GPStime', 'timesent', 'unk2', 'gtimesent', 'read', 'locked', 'priority', 'dunno1', 'subject', 'msgs', 'sender', 'sender_length', 'unk3', 'sender_name', 'callback', 'callback_length'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_in,self).__init__(**dict) if self.__class__ is sms_in: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_in,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_in,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unk0.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_unk1.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unk2.writetobuffer(buf) self.__field_gtimesent.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_subject.writetobuffer(buf) try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx9100_350, 'length': 20 }) self.__field_msgs.writetobuffer(buf) self.__field_sender.writetobuffer(buf) self.__field_sender_length.writetobuffer(buf) self.__field_unk3.writetobuffer(buf) self.__field_sender_name.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_callback_length.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unk0=UINT(**{'sizeinbytes': 4}) self.__field_unk0.readfrombuffer(buf) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_unk1=UINT(**{'sizeinbytes': 4}) self.__field_unk1.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_timesent=SMSDATE(**{'sizeinbytes': 6}) self.__field_timesent.readfrombuffer(buf) self.__field_unk2=UINT(**{'sizeinbytes': 2}) self.__field_unk2.readfrombuffer(buf) self.__field_gtimesent=GPSDATE(**{'sizeinbytes': 4}) self.__field_gtimesent.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 1}) self.__field_read.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_dunno1=UNKNOWN(**{'sizeinbytes': 15}) self.__field_dunno1.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 64, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False }) self.__field_subject.readfrombuffer(buf) self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx9100_350, 'length': 20 }) self.__field_msgs.readfrombuffer(buf) self.__field_sender=USTRING(**{'sizeinbytes': 49}) self.__field_sender.readfrombuffer(buf) self.__field_sender_length=UINT(**{'sizeinbytes': 1}) self.__field_sender_length.readfrombuffer(buf) self.__field_unk3=UINT(**{'sizeinbytes': 2}) self.__field_unk3.readfrombuffer(buf) self.__field_sender_name=USTRING(**{'sizeinbytes': 33}) self.__field_sender_name.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 49}) self.__field_callback.readfrombuffer(buf) self.__field_callback_length=UINT(**{'sizeinbytes': 1}) self.__field_callback_length.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unk0(self): return self.__field_unk0.getvalue() def __setfield_unk0(self, value): if isinstance(value,UINT): self.__field_unk0=value else: self.__field_unk0=UINT(value,**{'sizeinbytes': 4}) def __delfield_unk0(self): del self.__field_unk0 unk0=property(__getfield_unk0, __setfield_unk0, __delfield_unk0, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_unk1(self): return self.__field_unk1.getvalue() def __setfield_unk1(self, value): if isinstance(value,UINT): self.__field_unk1=value else: self.__field_unk1=UINT(value,**{'sizeinbytes': 4}) def __delfield_unk1(self): del self.__field_unk1 unk1=property(__getfield_unk1, __setfield_unk1, __delfield_unk1, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,SMSDATE): self.__field_timesent=value else: self.__field_timesent=SMSDATE(value,**{'sizeinbytes': 6}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unk2(self): return self.__field_unk2.getvalue() def __setfield_unk2(self, value): if isinstance(value,UINT): self.__field_unk2=value else: self.__field_unk2=UINT(value,**{'sizeinbytes': 2}) def __delfield_unk2(self): del self.__field_unk2 unk2=property(__getfield_unk2, __setfield_unk2, __delfield_unk2, None) def __getfield_gtimesent(self): return self.__field_gtimesent.getvalue() def __setfield_gtimesent(self, value): if isinstance(value,GPSDATE): self.__field_gtimesent=value else: self.__field_gtimesent=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_gtimesent(self): del self.__field_gtimesent gtimesent=property(__getfield_gtimesent, __setfield_gtimesent, __delfield_gtimesent, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 1}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UNKNOWN): self.__field_dunno1=value else: self.__field_dunno1=UNKNOWN(value,**{'sizeinbytes': 15}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 64, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False }) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx9100_350, 'length': 20 }) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'elementclass': _gen_p_lgvx9100_350, 'length': 20 }) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def __getfield_sender(self): return self.__field_sender.getvalue() def __setfield_sender(self, value): if isinstance(value,USTRING): self.__field_sender=value else: self.__field_sender=USTRING(value,**{'sizeinbytes': 49}) def __delfield_sender(self): del self.__field_sender sender=property(__getfield_sender, __setfield_sender, __delfield_sender, None) def __getfield_sender_length(self): return self.__field_sender_length.getvalue() def __setfield_sender_length(self, value): if isinstance(value,UINT): self.__field_sender_length=value else: self.__field_sender_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_sender_length(self): del self.__field_sender_length sender_length=property(__getfield_sender_length, __setfield_sender_length, __delfield_sender_length, None) def __getfield_unk3(self): return self.__field_unk3.getvalue() def __setfield_unk3(self, value): if isinstance(value,UINT): self.__field_unk3=value else: self.__field_unk3=UINT(value,**{'sizeinbytes': 2}) def __delfield_unk3(self): del self.__field_unk3 unk3=property(__getfield_unk3, __setfield_unk3, __delfield_unk3, None) def __getfield_sender_name(self): return self.__field_sender_name.getvalue() def __setfield_sender_name(self, value): if isinstance(value,USTRING): self.__field_sender_name=value else: self.__field_sender_name=USTRING(value,**{'sizeinbytes': 33}) def __delfield_sender_name(self): del self.__field_sender_name sender_name=property(__getfield_sender_name, __setfield_sender_name, __delfield_sender_name, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 49}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_callback_length(self): return self.__field_callback_length.getvalue() def __setfield_callback_length(self, value): if isinstance(value,UINT): self.__field_callback_length=value else: self.__field_callback_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_length(self): del self.__field_callback_length callback_length=property(__getfield_callback_length, __setfield_callback_length, __delfield_callback_length, None) def iscontainer(self): return True def containerelements(self): yield ('unk0', self.__field_unk0, None) yield ('index', self.__field_index, None) yield ('unk1', self.__field_unk1, None) yield ('GPStime', self.__field_GPStime, None) yield ('timesent', self.__field_timesent, None) yield ('unk2', self.__field_unk2, None) yield ('gtimesent', self.__field_gtimesent, None) yield ('read', self.__field_read, None) yield ('locked', self.__field_locked, None) yield ('priority', self.__field_priority, None) yield ('dunno1', self.__field_dunno1, None) yield ('subject', self.__field_subject, None) yield ('msgs', self.__field_msgs, None) yield ('sender', self.__field_sender, None) yield ('sender_length', self.__field_sender_length, None) yield ('unk3', self.__field_unk3, None) yield ('sender_name', self.__field_sender_name, None) yield ('callback', self.__field_callback, None) yield ('callback_length', self.__field_callback_length, None) class _gen_p_lgvx9100_350(BaseProtogenClass): 'Anonymous inner class' __fields=['msg_id', 'msg_length', 'msg_data'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx9100_350,self).__init__(**dict) if self.__class__ is _gen_p_lgvx9100_350: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx9100_350,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx9100_350,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msg_id.writetobuffer(buf) self.__field_msg_length.writetobuffer(buf) self.__field_msg_data.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg_id=UINT(**{'sizeinbytes': 1}) self.__field_msg_id.readfrombuffer(buf) self.__field_msg_length=UINT(**{'sizeinbytes': 1}) self.__field_msg_length.readfrombuffer(buf) self.__field_msg_data=SMSINBOXMSGFRAGMENT() self.__field_msg_data.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg_id(self): return self.__field_msg_id.getvalue() def __setfield_msg_id(self, value): if isinstance(value,UINT): self.__field_msg_id=value else: self.__field_msg_id=UINT(value,**{'sizeinbytes': 1}) def __delfield_msg_id(self): del self.__field_msg_id msg_id=property(__getfield_msg_id, __setfield_msg_id, __delfield_msg_id, None) def __getfield_msg_length(self): return self.__field_msg_length.getvalue() def __setfield_msg_length(self, value): if isinstance(value,UINT): self.__field_msg_length=value else: self.__field_msg_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_msg_length(self): del self.__field_msg_length msg_length=property(__getfield_msg_length, __setfield_msg_length, __delfield_msg_length, None) def __getfield_msg_data(self): return self.__field_msg_data.getvalue() def __setfield_msg_data(self, value): if isinstance(value,SMSINBOXMSGFRAGMENT): self.__field_msg_data=value else: self.__field_msg_data=SMSINBOXMSGFRAGMENT(value,) def __delfield_msg_data(self): del self.__field_msg_data msg_data=property(__getfield_msg_data, __setfield_msg_data, __delfield_msg_data, None) def iscontainer(self): return True def containerelements(self): yield ('msg_id', self.__field_msg_id, None) yield ('msg_length', self.__field_msg_length, None) yield ('msg_data', self.__field_msg_data, None) bitpim-1.0.7+dfsg1/src/phones/p_lgvx9200.py0000644001616600161660000014116711316717273016440 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VX9200""" # groups - same as VX-8700 # phonebook - LG Phonebook v1.0 Extended (same as VX-11K) # schedule - same as VX-8550 # memos - same as VX-8550 # sms - same as VX-9100 # index file - same as VX-9700 from p_lgvx11000 import * # SMS index files inbox_index = "dload/inbox.dat" outbox_index = "dload/outbox.dat" drafts_index = "dload/drafts.dat" class call(BaseProtogenClass): __fields=['GPStime', 'unk0', 'duration', 'number', 'name', 'numberlength', 'status', 'pbnumbertype', 'unk1', 'pbentrynum', 'number_location'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(call,self).__init__(**dict) if self.__class__ is call: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(call,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(call,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_unk0.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_numberlength.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_pbnumbertype.writetobuffer(buf) self.__field_unk1.writetobuffer(buf) self.__field_pbentrynum.writetobuffer(buf) self.__field_number_location.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unk0=UINT(**{'sizeinbytes': 4}) self.__field_unk0.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_numberlength=UINT(**{'sizeinbytes': 1}) self.__field_numberlength.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_pbnumbertype=UINT(**{'sizeinbytes': 1}) self.__field_pbnumbertype.readfrombuffer(buf) self.__field_unk1=UINT(**{'sizeinbytes': 4}) self.__field_unk1.readfrombuffer(buf) self.__field_pbentrynum=UINT(**{'sizeinbytes': 2}) self.__field_pbentrynum.readfrombuffer(buf) self.__field_number_location=DATA(**{'sizeinbytes': 75}) self.__field_number_location.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unk0(self): return self.__field_unk0.getvalue() def __setfield_unk0(self, value): if isinstance(value,UINT): self.__field_unk0=value else: self.__field_unk0=UINT(value,**{'sizeinbytes': 4}) def __delfield_unk0(self): del self.__field_unk0 unk0=property(__getfield_unk0, __setfield_unk0, __delfield_unk0, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numberlength(self): return self.__field_numberlength.getvalue() def __setfield_numberlength(self, value): if isinstance(value,UINT): self.__field_numberlength=value else: self.__field_numberlength=UINT(value,**{'sizeinbytes': 1}) def __delfield_numberlength(self): del self.__field_numberlength numberlength=property(__getfield_numberlength, __setfield_numberlength, __delfield_numberlength, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_pbnumbertype(self): return self.__field_pbnumbertype.getvalue() def __setfield_pbnumbertype(self, value): if isinstance(value,UINT): self.__field_pbnumbertype=value else: self.__field_pbnumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_pbnumbertype(self): del self.__field_pbnumbertype pbnumbertype=property(__getfield_pbnumbertype, __setfield_pbnumbertype, __delfield_pbnumbertype, None) def __getfield_unk1(self): return self.__field_unk1.getvalue() def __setfield_unk1(self, value): if isinstance(value,UINT): self.__field_unk1=value else: self.__field_unk1=UINT(value,**{'sizeinbytes': 4}) def __delfield_unk1(self): del self.__field_unk1 unk1=property(__getfield_unk1, __setfield_unk1, __delfield_unk1, None) def __getfield_pbentrynum(self): return self.__field_pbentrynum.getvalue() def __setfield_pbentrynum(self, value): if isinstance(value,UINT): self.__field_pbentrynum=value else: self.__field_pbentrynum=UINT(value,**{'sizeinbytes': 2}) def __delfield_pbentrynum(self): del self.__field_pbentrynum pbentrynum=property(__getfield_pbentrynum, __setfield_pbentrynum, __delfield_pbentrynum, None) def __getfield_number_location(self): return self.__field_number_location.getvalue() def __setfield_number_location(self, value): if isinstance(value,DATA): self.__field_number_location=value else: self.__field_number_location=DATA(value,**{'sizeinbytes': 75}) def __delfield_number_location(self): del self.__field_number_location number_location=property(__getfield_number_location, __setfield_number_location, __delfield_number_location, None) def iscontainer(self): return True def containerelements(self): yield ('GPStime', self.__field_GPStime, None) yield ('unk0', self.__field_unk0, None) yield ('duration', self.__field_duration, None) yield ('number', self.__field_number, None) yield ('name', self.__field_name, None) yield ('numberlength', self.__field_numberlength, None) yield ('status', self.__field_status, None) yield ('pbnumbertype', self.__field_pbnumbertype, None) yield ('unk1', self.__field_unk1, None) yield ('pbentrynum', self.__field_pbentrynum, None) yield ('number_location', self.__field_number_location, None) class callhistory(BaseProtogenClass): __fields=['unk0', 'numcalls', 'unk1', 'calls'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callhistory,self).__init__(**dict) if self.__class__ is callhistory: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callhistory,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callhistory,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unk0.writetobuffer(buf) self.__field_numcalls.writetobuffer(buf) self.__field_unk1.writetobuffer(buf) try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call, 'length': self.numcalls}) self.__field_calls.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unk0=UINT(**{'sizeinbytes': 4, 'default': 0x00020000 }) self.__field_unk0.readfrombuffer(buf) self.__field_numcalls=UINT(**{'sizeinbytes': 4}) self.__field_numcalls.readfrombuffer(buf) self.__field_unk1=UINT(**{'sizeinbytes': 1}) self.__field_unk1.readfrombuffer(buf) self.__field_calls=LIST(**{'elementclass': call, 'length': self.numcalls}) self.__field_calls.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unk0(self): return self.__field_unk0.getvalue() def __setfield_unk0(self, value): if isinstance(value,UINT): self.__field_unk0=value else: self.__field_unk0=UINT(value,**{'sizeinbytes': 4, 'default': 0x00020000 }) def __delfield_unk0(self): del self.__field_unk0 unk0=property(__getfield_unk0, __setfield_unk0, __delfield_unk0, None) def __getfield_numcalls(self): return self.__field_numcalls.getvalue() def __setfield_numcalls(self, value): if isinstance(value,UINT): self.__field_numcalls=value else: self.__field_numcalls=UINT(value,**{'sizeinbytes': 4}) def __delfield_numcalls(self): del self.__field_numcalls numcalls=property(__getfield_numcalls, __setfield_numcalls, __delfield_numcalls, None) def __getfield_unk1(self): return self.__field_unk1.getvalue() def __setfield_unk1(self, value): if isinstance(value,UINT): self.__field_unk1=value else: self.__field_unk1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unk1(self): del self.__field_unk1 unk1=property(__getfield_unk1, __setfield_unk1, __delfield_unk1, None) def __getfield_calls(self): try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call, 'length': self.numcalls}) return self.__field_calls.getvalue() def __setfield_calls(self, value): if isinstance(value,LIST): self.__field_calls=value else: self.__field_calls=LIST(value,**{'elementclass': call, 'length': self.numcalls}) def __delfield_calls(self): del self.__field_calls calls=property(__getfield_calls, __setfield_calls, __delfield_calls, None) def iscontainer(self): return True def containerelements(self): yield ('unk0', self.__field_unk0, None) yield ('numcalls', self.__field_numcalls, None) yield ('unk1', self.__field_unk1, None) yield ('calls', self.__field_calls, None) class indexentry(BaseProtogenClass): __fields=['filename', 'size', 'date', 'type', 'unk0'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_filename.writetobuffer(buf) self.__field_size.writetobuffer(buf) try: self.__field_date except: self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_date.writetobuffer(buf) self.__field_type.writetobuffer(buf) try: self.__field_unk0 except: self.__field_unk0=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_unk0.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_filename=USTRING(**{'sizeinbytes': 256, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_filename.readfrombuffer(buf) self.__field_size=UINT(**{'sizeinbytes': 4}) self.__field_size.readfrombuffer(buf) self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_date.readfrombuffer(buf) self.__field_type=UINT(**{'sizeinbytes': 4}) self.__field_type.readfrombuffer(buf) self.__field_unk0=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_unk0.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'sizeinbytes': 256, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, "full pathname") def __getfield_size(self): return self.__field_size.getvalue() def __setfield_size(self, value): if isinstance(value,UINT): self.__field_size=value else: self.__field_size=UINT(value,**{'sizeinbytes': 4}) def __delfield_size(self): del self.__field_size size=property(__getfield_size, __setfield_size, __delfield_size, None) def __getfield_date(self): try: self.__field_date except: self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,UINT): self.__field_date=value else: self.__field_date=UINT(value,**{'sizeinbytes': 4, 'default': 0}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, None) def __getfield_type(self): return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,UINT): self.__field_type=value else: self.__field_type=UINT(value,**{'sizeinbytes': 4}) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, None) def __getfield_unk0(self): try: self.__field_unk0 except: self.__field_unk0=UINT(**{'sizeinbytes': 4, 'default': 0}) return self.__field_unk0.getvalue() def __setfield_unk0(self, value): if isinstance(value,UINT): self.__field_unk0=value else: self.__field_unk0=UINT(value,**{'sizeinbytes': 4, 'default': 0}) def __delfield_unk0(self): del self.__field_unk0 unk0=property(__getfield_unk0, __setfield_unk0, __delfield_unk0, None) def iscontainer(self): return True def containerelements(self): yield ('filename', self.__field_filename, "full pathname") yield ('size', self.__field_size, None) yield ('date', self.__field_date, None) yield ('type', self.__field_type, None) yield ('unk0', self.__field_unk0, None) class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): dict2={'elementclass': indexentry, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class pnfileentry(BaseProtogenClass): __fields=['entry_tag', 'pad00', 'mod_date', 'unk0', 'pn_id', 'pe_id', 'unknown00', 'pn_order', 'phone_number', 'unknown01', 'ntype', 'unknown02', 'exit_tag', 'blanks'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pnfileentry,self).__init__(**dict) if self.__class__ is pnfileentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pnfileentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pnfileentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry_tag except: self.__field_entry_tag=STRING(**{'sizeinbytes': 4, 'terminator': None, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff'}) self.__field_entry_tag.writetobuffer(buf) if self.entry_tag != '\xff\xff\xff\xff': try: self.__field_pad00 except: self.__field_pad00=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_pad00.writetobuffer(buf) try: self.__field_mod_date except: self.__field_mod_date=PBDateTime(**{'defaulttocurrenttime': True }) self.__field_mod_date.writetobuffer(buf) try: self.__field_unk0 except: self.__field_unk0=STRING(**{'sizeinbytes': 6, 'default': '', 'raiseonunterminatedread': False }) self.__field_unk0.writetobuffer(buf) self.__field_pn_id.writetobuffer(buf) self.__field_pe_id.writetobuffer(buf) try: self.__field_unknown00 except: self.__field_unknown00=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_unknown00.writetobuffer(buf) self.__field_pn_order.writetobuffer(buf) self.__field_phone_number.writetobuffer(buf) try: self.__field_unknown01 except: self.__field_unknown01=UINT(**{'sizeinbytes': 1, 'default': 1 }) self.__field_unknown01.writetobuffer(buf) self.__field_ntype.writetobuffer(buf) try: self.__field_unknown02 except: self.__field_unknown02=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_unknown02.writetobuffer(buf) try: self.__field_exit_tag except: self.__field_exit_tag=USTRING(**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) self.__field_exit_tag.writetobuffer(buf) else: try: self.__field_blanks except: self.__field_blanks=DATA(**{'sizeinbytes': 60, 'default': '\xFF'*60 }) self.__field_blanks.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry_tag=STRING(**{'sizeinbytes': 4, 'terminator': None, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff'}) self.__field_entry_tag.readfrombuffer(buf) if self.entry_tag != '\xff\xff\xff\xff': self.__field_pad00=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_pad00.readfrombuffer(buf) self.__field_mod_date=PBDateTime(**{'defaulttocurrenttime': True }) self.__field_mod_date.readfrombuffer(buf) self.__field_unk0=STRING(**{'sizeinbytes': 6, 'default': '', 'raiseonunterminatedread': False }) self.__field_unk0.readfrombuffer(buf) self.__field_pn_id=UINT(**{'sizeinbytes': 2}) self.__field_pn_id.readfrombuffer(buf) self.__field_pe_id=UINT(**{'sizeinbytes': 2}) self.__field_pe_id.readfrombuffer(buf) self.__field_unknown00=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_unknown00.readfrombuffer(buf) self.__field_pn_order=UINT(**{'sizeinbytes': 1}) self.__field_pn_order.readfrombuffer(buf) self.__field_phone_number=LGHEXPN(**{'sizeinbytes': 25}) self.__field_phone_number.readfrombuffer(buf) self.__field_unknown01=UINT(**{'sizeinbytes': 1, 'default': 1 }) self.__field_unknown01.readfrombuffer(buf) self.__field_ntype=UINT(**{'sizeinbytes': 1}) self.__field_ntype.readfrombuffer(buf) self.__field_unknown02=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_unknown02.readfrombuffer(buf) self.__field_exit_tag=USTRING(**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) self.__field_exit_tag.readfrombuffer(buf) else: self.__field_blanks=DATA(**{'sizeinbytes': 60, 'default': '\xFF'*60 }) self.__field_blanks.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry_tag(self): try: self.__field_entry_tag except: self.__field_entry_tag=STRING(**{'sizeinbytes': 4, 'terminator': None, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff'}) return self.__field_entry_tag.getvalue() def __setfield_entry_tag(self, value): if isinstance(value,STRING): self.__field_entry_tag=value else: self.__field_entry_tag=STRING(value,**{'sizeinbytes': 4, 'terminator': None, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff'}) def __delfield_entry_tag(self): del self.__field_entry_tag entry_tag=property(__getfield_entry_tag, __setfield_entry_tag, __delfield_entry_tag, None) def __getfield_pad00(self): try: self.__field_pad00 except: self.__field_pad00=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_pad00.getvalue() def __setfield_pad00(self, value): if isinstance(value,UINT): self.__field_pad00=value else: self.__field_pad00=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_pad00(self): del self.__field_pad00 pad00=property(__getfield_pad00, __setfield_pad00, __delfield_pad00, None) def __getfield_mod_date(self): try: self.__field_mod_date except: self.__field_mod_date=PBDateTime(**{'defaulttocurrenttime': True }) return self.__field_mod_date.getvalue() def __setfield_mod_date(self, value): if isinstance(value,PBDateTime): self.__field_mod_date=value else: self.__field_mod_date=PBDateTime(value,**{'defaulttocurrenttime': True }) def __delfield_mod_date(self): del self.__field_mod_date mod_date=property(__getfield_mod_date, __setfield_mod_date, __delfield_mod_date, None) def __getfield_unk0(self): try: self.__field_unk0 except: self.__field_unk0=STRING(**{'sizeinbytes': 6, 'default': '', 'raiseonunterminatedread': False }) return self.__field_unk0.getvalue() def __setfield_unk0(self, value): if isinstance(value,STRING): self.__field_unk0=value else: self.__field_unk0=STRING(value,**{'sizeinbytes': 6, 'default': '', 'raiseonunterminatedread': False }) def __delfield_unk0(self): del self.__field_unk0 unk0=property(__getfield_unk0, __setfield_unk0, __delfield_unk0, None) def __getfield_pn_id(self): return self.__field_pn_id.getvalue() def __setfield_pn_id(self, value): if isinstance(value,UINT): self.__field_pn_id=value else: self.__field_pn_id=UINT(value,**{'sizeinbytes': 2}) def __delfield_pn_id(self): del self.__field_pn_id pn_id=property(__getfield_pn_id, __setfield_pn_id, __delfield_pn_id, None) def __getfield_pe_id(self): return self.__field_pe_id.getvalue() def __setfield_pe_id(self, value): if isinstance(value,UINT): self.__field_pe_id=value else: self.__field_pe_id=UINT(value,**{'sizeinbytes': 2}) def __delfield_pe_id(self): del self.__field_pe_id pe_id=property(__getfield_pe_id, __setfield_pe_id, __delfield_pe_id, None) def __getfield_unknown00(self): try: self.__field_unknown00 except: self.__field_unknown00=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_unknown00.getvalue() def __setfield_unknown00(self, value): if isinstance(value,UINT): self.__field_unknown00=value else: self.__field_unknown00=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_unknown00(self): del self.__field_unknown00 unknown00=property(__getfield_unknown00, __setfield_unknown00, __delfield_unknown00, None) def __getfield_pn_order(self): return self.__field_pn_order.getvalue() def __setfield_pn_order(self, value): if isinstance(value,UINT): self.__field_pn_order=value else: self.__field_pn_order=UINT(value,**{'sizeinbytes': 1}) def __delfield_pn_order(self): del self.__field_pn_order pn_order=property(__getfield_pn_order, __setfield_pn_order, __delfield_pn_order, "0-based order of this phone within this contact") def __getfield_phone_number(self): return self.__field_phone_number.getvalue() def __setfield_phone_number(self, value): if isinstance(value,LGHEXPN): self.__field_phone_number=value else: self.__field_phone_number=LGHEXPN(value,**{'sizeinbytes': 25}) def __delfield_phone_number(self): del self.__field_phone_number phone_number=property(__getfield_phone_number, __setfield_phone_number, __delfield_phone_number, None) def __getfield_unknown01(self): try: self.__field_unknown01 except: self.__field_unknown01=UINT(**{'sizeinbytes': 1, 'default': 1 }) return self.__field_unknown01.getvalue() def __setfield_unknown01(self, value): if isinstance(value,UINT): self.__field_unknown01=value else: self.__field_unknown01=UINT(value,**{'sizeinbytes': 1, 'default': 1 }) def __delfield_unknown01(self): del self.__field_unknown01 unknown01=property(__getfield_unknown01, __setfield_unknown01, __delfield_unknown01, None) def __getfield_ntype(self): return self.__field_ntype.getvalue() def __setfield_ntype(self, value): if isinstance(value,UINT): self.__field_ntype=value else: self.__field_ntype=UINT(value,**{'sizeinbytes': 1}) def __delfield_ntype(self): del self.__field_ntype ntype=property(__getfield_ntype, __setfield_ntype, __delfield_ntype, None) def __getfield_unknown02(self): try: self.__field_unknown02 except: self.__field_unknown02=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_unknown02.getvalue() def __setfield_unknown02(self, value): if isinstance(value,UINT): self.__field_unknown02=value else: self.__field_unknown02=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_unknown02(self): del self.__field_unknown02 unknown02=property(__getfield_unknown02, __setfield_unknown02, __delfield_unknown02, None) def __getfield_exit_tag(self): try: self.__field_exit_tag except: self.__field_exit_tag=USTRING(**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) return self.__field_exit_tag.getvalue() def __setfield_exit_tag(self, value): if isinstance(value,USTRING): self.__field_exit_tag=value else: self.__field_exit_tag=USTRING(value,**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) def __delfield_exit_tag(self): del self.__field_exit_tag exit_tag=property(__getfield_exit_tag, __setfield_exit_tag, __delfield_exit_tag, None) def __getfield_blanks(self): try: self.__field_blanks except: self.__field_blanks=DATA(**{'sizeinbytes': 60, 'default': '\xFF'*60 }) return self.__field_blanks.getvalue() def __setfield_blanks(self, value): if isinstance(value,DATA): self.__field_blanks=value else: self.__field_blanks=DATA(value,**{'sizeinbytes': 60, 'default': '\xFF'*60 }) def __delfield_blanks(self): del self.__field_blanks blanks=property(__getfield_blanks, __setfield_blanks, __delfield_blanks, None) def iscontainer(self): return True def containerelements(self): yield ('entry_tag', self.__field_entry_tag, None) if self.entry_tag != '\xff\xff\xff\xff': yield ('pad00', self.__field_pad00, None) yield ('mod_date', self.__field_mod_date, None) yield ('unk0', self.__field_unk0, None) yield ('pn_id', self.__field_pn_id, None) yield ('pe_id', self.__field_pe_id, None) yield ('unknown00', self.__field_unknown00, None) yield ('pn_order', self.__field_pn_order, "0-based order of this phone within this contact") yield ('phone_number', self.__field_phone_number, None) yield ('unknown01', self.__field_unknown01, None) yield ('ntype', self.__field_ntype, None) yield ('unknown02', self.__field_unknown02, None) yield ('exit_tag', self.__field_exit_tag, None) else: yield ('blanks', self.__field_blanks, None) def valid(self): return self.phone_number != None def malformed(self): # malformed (yet valid) entries have been seen on several phones including the VX-8550 and VX-10000 return self.entry_tag != PB_NUMBER_SOR class pnfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pnfile,self).__init__(**dict) if self.__class__ is pnfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pnfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pnfile,kwargs) if len(args): dict2={ 'elementclass': pnfileentry, 'createdefault': True, 'length': NUMPHONENUMBERENTRIES } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': pnfileentry, 'createdefault': True, 'length': NUMPHONENUMBERENTRIES }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': pnfileentry, 'createdefault': True, 'length': NUMPHONENUMBERENTRIES }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': pnfileentry, 'createdefault': True, 'length': NUMPHONENUMBERENTRIES }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': pnfileentry, 'createdefault': True, 'length': NUMPHONENUMBERENTRIES }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class pbgroup(BaseProtogenClass): __fields=['name', 'groupid', 'user_added', 'unk0'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroup,self).__init__(**dict) if self.__class__ is pbgroup: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroup,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroup,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 34, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) self.__field_name.writetobuffer(buf) try: self.__field_groupid except: self.__field_groupid=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_groupid.writetobuffer(buf) try: self.__field_user_added except: self.__field_user_added=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_user_added.writetobuffer(buf) try: self.__field_unk0 except: self.__field_unk0=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_unk0.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_name=USTRING(**{'sizeinbytes': 34, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) self.__field_name.readfrombuffer(buf) self.__field_groupid=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_groupid.readfrombuffer(buf) self.__field_user_added=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_user_added.readfrombuffer(buf) self.__field_unk0=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_unk0.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 34, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 34, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_groupid(self): try: self.__field_groupid except: self.__field_groupid=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_groupid.getvalue() def __setfield_groupid(self, value): if isinstance(value,UINT): self.__field_groupid=value else: self.__field_groupid=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_groupid(self): del self.__field_groupid groupid=property(__getfield_groupid, __setfield_groupid, __delfield_groupid, None) def __getfield_user_added(self): try: self.__field_user_added except: self.__field_user_added=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_user_added.getvalue() def __setfield_user_added(self, value): if isinstance(value,UINT): self.__field_user_added=value else: self.__field_user_added=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_user_added(self): del self.__field_user_added user_added=property(__getfield_user_added, __setfield_user_added, __delfield_user_added, "=1 when was added by user -- not really") def __getfield_unk0(self): try: self.__field_unk0 except: self.__field_unk0=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_unk0.getvalue() def __setfield_unk0(self, value): if isinstance(value,UINT): self.__field_unk0=value else: self.__field_unk0=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_unk0(self): del self.__field_unk0 unk0=property(__getfield_unk0, __setfield_unk0, __delfield_unk0, None) def iscontainer(self): return True def containerelements(self): yield ('name', self.__field_name, None) yield ('groupid', self.__field_groupid, None) yield ('user_added', self.__field_user_added, "=1 when was added by user -- not really") yield ('unk0', self.__field_unk0, None) class pbgroups(BaseProtogenClass): "Phonebook groups" __fields=['groups'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroups,self).__init__(**dict) if self.__class__ is pbgroups: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroups,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroups,kwargs) if len(args): dict2={'elementclass': pbgroup, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_groups=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True}) self.__field_groups.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_groups=LIST(**{'elementclass': pbgroup, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True}) self.__field_groups.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_groups(self): try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True}) return self.__field_groups.getvalue() def __setfield_groups(self, value): if isinstance(value,LIST): self.__field_groups=value else: self.__field_groups=LIST(value,**{'elementclass': pbgroup, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True}) def __delfield_groups(self): del self.__field_groups groups=property(__getfield_groups, __setfield_groups, __delfield_groups, None) def iscontainer(self): return True def containerelements(self): yield ('groups', self.__field_groups, None) bitpim-1.0.7+dfsg1/src/phones/p_sanyo4900.py0000644001616600161660000000103510122742673016574 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Sanyo SCP-4900""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * import p_sanyo # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 _NUMCALLHISTORY=20 _MAXNUMBERLEN=48 _MAXEMAILLEN=48 #for sym in dir(p_sanyo): # print sym bitpim-1.0.7+dfsg1/src/phones/p_sanyo4920.py0000644001616600161660000000110310122742673016572 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Sanyo RL-4920""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 _NUMCALLHISTORY=20 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 #for sym in dir(p_sanyo): # print sym bitpim-1.0.7+dfsg1/src/phones/p_motov325.p0000644001616600161660000000122610737325377016347 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_motov325.p 4541 2008-01-04 03:41:51Z djpham $ %{ """Various descriptions of data specific to Motorola V325 phones""" from prototypes import * from prototypes_moto import * from p_etsi import * from p_moto import * from p_motov3m import * import fnmatch # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb PB_TOTAL_ENTRIES=500 PB_RANGE=xrange(1,PB_TOTAL_ENTRIES+1) MOTO_SHARED_PATH='motorola/shared' %} bitpim-1.0.7+dfsg1/src/phones/p_sanyo4930.py0000644001616600161660000037434210572177653016626 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Sanyo RL-4930""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=500 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 _NUMCALLHISTORY=20 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 HASRINGPICBUF=0 class qcpheader(BaseProtogenClass): __fields=['readwrite', 'command', 'packettype'] def __init__(self, *args, **kwargs): dict={} # User specified arguments in the packet description dict.update({'readwrite': 0x26}) # What was supplied to this function dict.update(kwargs) # Parent constructor super(qcpheader,self).__init__(**dict) if self.__class__ is qcpheader: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(qcpheader,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(qcpheader,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_readwrite.writetobuffer(buf) self.__field_command.writetobuffer(buf) self.__field_packettype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_readwrite=UINT(**{'sizeinbytes': 1}) self.__field_readwrite.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_packettype=UINT(**{'sizeinbytes': 1}) self.__field_packettype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_readwrite(self): return self.__field_readwrite.getvalue() def __setfield_readwrite(self, value): if isinstance(value,UINT): self.__field_readwrite=value else: self.__field_readwrite=UINT(value,**{'sizeinbytes': 1}) def __delfield_readwrite(self): del self.__field_readwrite readwrite=property(__getfield_readwrite, __setfield_readwrite, __delfield_readwrite, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_packettype(self): return self.__field_packettype.getvalue() def __setfield_packettype(self, value): if isinstance(value,UINT): self.__field_packettype=value else: self.__field_packettype=UINT(value,**{'sizeinbytes': 1}) def __delfield_packettype(self): del self.__field_packettype packettype=property(__getfield_packettype, __setfield_packettype, __delfield_packettype, None) def iscontainer(self): return True def containerelements(self): yield ('readwrite', self.__field_readwrite, None) yield ('command', self.__field_command, None) yield ('packettype', self.__field_packettype, None) class qcpwriteheader(BaseProtogenClass): __fields=['readwrite', 'command', 'packettype'] def __init__(self, *args, **kwargs): dict={} # User specified arguments in the packet description dict.update({'readwrite': 0x27}) # What was supplied to this function dict.update(kwargs) # Parent constructor super(qcpwriteheader,self).__init__(**dict) if self.__class__ is qcpwriteheader: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(qcpwriteheader,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(qcpwriteheader,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_readwrite.writetobuffer(buf) self.__field_command.writetobuffer(buf) self.__field_packettype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_readwrite=UINT(**{'sizeinbytes': 1}) self.__field_readwrite.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_packettype=UINT(**{'sizeinbytes': 1}) self.__field_packettype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_readwrite(self): return self.__field_readwrite.getvalue() def __setfield_readwrite(self, value): if isinstance(value,UINT): self.__field_readwrite=value else: self.__field_readwrite=UINT(value,**{'sizeinbytes': 1}) def __delfield_readwrite(self): del self.__field_readwrite readwrite=property(__getfield_readwrite, __setfield_readwrite, __delfield_readwrite, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_packettype(self): return self.__field_packettype.getvalue() def __setfield_packettype(self, value): if isinstance(value,UINT): self.__field_packettype=value else: self.__field_packettype=UINT(value,**{'sizeinbytes': 1}) def __delfield_packettype(self): del self.__field_packettype packettype=property(__getfield_packettype, __setfield_packettype, __delfield_packettype, None) def iscontainer(self): return True def containerelements(self): yield ('readwrite', self.__field_readwrite, None) yield ('command', self.__field_command, None) yield ('packettype', self.__field_packettype, None) class pbsortbuffer(BaseProtogenClass): "Various arrays for sorting the phone book, speed dial, determining which" __fields=['startcommand', 'bufsize', 'comment', 'usedflags', 'slotsused', 'slotsused2', 'numemail', 'numurl', 'firsttypes', 'sortorder', 'pbfirstletters', 'sortorder2', 'speeddialindex', 'longnumbersindex', 'emails', 'emailfirstletters', 'urls', 'urlfirstletters', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbsortbuffer,self).__init__(**dict) if self.__class__ is pbsortbuffer: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbsortbuffer,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbsortbuffer,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_startcommand except: self.__field_startcommand=UINT(**{'constant': 0x3c}) try: self.__field_bufsize except: self.__field_bufsize=UINT(**{'constant': 7168}) try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "sort buffer"}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_usedflags except: self.__field_usedflags=LIST(**{'elementclass': _gen_p_sanyo4930_57, 'length': _NUMPBSLOTS, 'createdefault': True}) self.__field_usedflags.writetobuffer(buf) self.__field_slotsused.writetobuffer(buf) self.__field_slotsused2.writetobuffer(buf) self.__field_numemail.writetobuffer(buf) self.__field_numurl.writetobuffer(buf) try: self.__field_firsttypes except: self.__field_firsttypes=LIST(**{'elementclass': _gen_p_sanyo4930_63, 'length': _NUMPBSLOTS}) self.__field_firsttypes.writetobuffer(buf) try: self.__field_sortorder except: self.__field_sortorder=LIST(**{'elementclass': _gen_p_sanyo4930_65, 'length': _NUMPBSLOTS}) self.__field_sortorder.writetobuffer(buf) self.__field_pbfirstletters.writetobuffer(buf) try: self.__field_sortorder2 except: self.__field_sortorder2=LIST(**{'elementclass': _gen_p_sanyo4930_68, 'length': _NUMPBSLOTS}) self.__field_sortorder2.writetobuffer(buf) try: self.__field_speeddialindex except: self.__field_speeddialindex=LIST(**{'elementclass': _gen_p_sanyo4930_70, 'length': _NUMSPEEDDIALS}) self.__field_speeddialindex.writetobuffer(buf) try: self.__field_longnumbersindex except: self.__field_longnumbersindex=LIST(**{'elementclass': _gen_p_sanyo4930_72, 'length': _NUMLONGNUMBERS}) self.__field_longnumbersindex.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_sanyo4930_74, 'length': _NUMPBSLOTS}) self.__field_emails.writetobuffer(buf) self.__field_emailfirstletters.writetobuffer(buf) try: self.__field_urls except: self.__field_urls=LIST(**{'elementclass': _gen_p_sanyo4930_77, 'length': _NUMPBSLOTS}) self.__field_urls.writetobuffer(buf) self.__field_urlfirstletters.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN() self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_usedflags=LIST(**{'elementclass': _gen_p_sanyo4930_57, 'length': _NUMPBSLOTS, 'createdefault': True}) self.__field_usedflags.readfrombuffer(buf) self.__field_slotsused=UINT(**{'sizeinbytes': 2}) self.__field_slotsused.readfrombuffer(buf) self.__field_slotsused2=UINT(**{'sizeinbytes': 2}) self.__field_slotsused2.readfrombuffer(buf) self.__field_numemail=UINT(**{'sizeinbytes': 2}) self.__field_numemail.readfrombuffer(buf) self.__field_numurl=UINT(**{'sizeinbytes': 2}) self.__field_numurl.readfrombuffer(buf) self.__field_firsttypes=LIST(**{'elementclass': _gen_p_sanyo4930_63, 'length': _NUMPBSLOTS}) self.__field_firsttypes.readfrombuffer(buf) self.__field_sortorder=LIST(**{'elementclass': _gen_p_sanyo4930_65, 'length': _NUMPBSLOTS}) self.__field_sortorder.readfrombuffer(buf) self.__field_pbfirstletters=USTRING(**{'terminator': None, 'sizeinbytes': _NUMPBSLOTS}) self.__field_pbfirstletters.readfrombuffer(buf) self.__field_sortorder2=LIST(**{'elementclass': _gen_p_sanyo4930_68, 'length': _NUMPBSLOTS}) self.__field_sortorder2.readfrombuffer(buf) self.__field_speeddialindex=LIST(**{'elementclass': _gen_p_sanyo4930_70, 'length': _NUMSPEEDDIALS}) self.__field_speeddialindex.readfrombuffer(buf) self.__field_longnumbersindex=LIST(**{'elementclass': _gen_p_sanyo4930_72, 'length': _NUMLONGNUMBERS}) self.__field_longnumbersindex.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_sanyo4930_74, 'length': _NUMPBSLOTS}) self.__field_emails.readfrombuffer(buf) self.__field_emailfirstletters=USTRING(**{'terminator': None, 'sizeinbytes': _NUMPBSLOTS}) self.__field_emailfirstletters.readfrombuffer(buf) self.__field_urls=LIST(**{'elementclass': _gen_p_sanyo4930_77, 'length': _NUMPBSLOTS}) self.__field_urls.readfrombuffer(buf) self.__field_urlfirstletters=USTRING(**{'terminator': None, 'sizeinbytes': _NUMPBSLOTS}) self.__field_urlfirstletters.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_startcommand(self): return self.__field_startcommand.getvalue() def __setfield_startcommand(self, value): if isinstance(value,UINT): self.__field_startcommand=value else: self.__field_startcommand=UINT(value,**{'constant': 0x3c}) def __delfield_startcommand(self): del self.__field_startcommand startcommand=property(__getfield_startcommand, __setfield_startcommand, __delfield_startcommand, "Starting command for R/W buf parts") def __getfield_bufsize(self): return self.__field_bufsize.getvalue() def __setfield_bufsize(self, value): if isinstance(value,UINT): self.__field_bufsize=value else: self.__field_bufsize=UINT(value,**{'constant': 7168}) def __delfield_bufsize(self): del self.__field_bufsize bufsize=property(__getfield_bufsize, __setfield_bufsize, __delfield_bufsize, None) def __getfield_comment(self): try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "sort buffer"}) return self.__field_comment.getvalue() def __setfield_comment(self, value): if isinstance(value,USTRING): self.__field_comment=value else: self.__field_comment=USTRING(value,**{'default': "sort buffer"}) def __delfield_comment(self): del self.__field_comment comment=property(__getfield_comment, __setfield_comment, __delfield_comment, None) def __getfield_usedflags(self): try: self.__field_usedflags except: self.__field_usedflags=LIST(**{'elementclass': _gen_p_sanyo4930_57, 'length': _NUMPBSLOTS, 'createdefault': True}) return self.__field_usedflags.getvalue() def __setfield_usedflags(self, value): if isinstance(value,LIST): self.__field_usedflags=value else: self.__field_usedflags=LIST(value,**{'elementclass': _gen_p_sanyo4930_57, 'length': _NUMPBSLOTS, 'createdefault': True}) def __delfield_usedflags(self): del self.__field_usedflags usedflags=property(__getfield_usedflags, __setfield_usedflags, __delfield_usedflags, None) def __getfield_slotsused(self): return self.__field_slotsused.getvalue() def __setfield_slotsused(self, value): if isinstance(value,UINT): self.__field_slotsused=value else: self.__field_slotsused=UINT(value,**{'sizeinbytes': 2}) def __delfield_slotsused(self): del self.__field_slotsused slotsused=property(__getfield_slotsused, __setfield_slotsused, __delfield_slotsused, None) def __getfield_slotsused2(self): return self.__field_slotsused2.getvalue() def __setfield_slotsused2(self, value): if isinstance(value,UINT): self.__field_slotsused2=value else: self.__field_slotsused2=UINT(value,**{'sizeinbytes': 2}) def __delfield_slotsused2(self): del self.__field_slotsused2 slotsused2=property(__getfield_slotsused2, __setfield_slotsused2, __delfield_slotsused2, "Always seems to be the same. Why duplicated?") def __getfield_numemail(self): return self.__field_numemail.getvalue() def __setfield_numemail(self, value): if isinstance(value,UINT): self.__field_numemail=value else: self.__field_numemail=UINT(value,**{'sizeinbytes': 2}) def __delfield_numemail(self): del self.__field_numemail numemail=property(__getfield_numemail, __setfield_numemail, __delfield_numemail, "Num of slots with email") def __getfield_numurl(self): return self.__field_numurl.getvalue() def __setfield_numurl(self, value): if isinstance(value,UINT): self.__field_numurl=value else: self.__field_numurl=UINT(value,**{'sizeinbytes': 2}) def __delfield_numurl(self): del self.__field_numurl numurl=property(__getfield_numurl, __setfield_numurl, __delfield_numurl, "Num of slots with URL") def __getfield_firsttypes(self): try: self.__field_firsttypes except: self.__field_firsttypes=LIST(**{'elementclass': _gen_p_sanyo4930_63, 'length': _NUMPBSLOTS}) return self.__field_firsttypes.getvalue() def __setfield_firsttypes(self, value): if isinstance(value,LIST): self.__field_firsttypes=value else: self.__field_firsttypes=LIST(value,**{'elementclass': _gen_p_sanyo4930_63, 'length': _NUMPBSLOTS}) def __delfield_firsttypes(self): del self.__field_firsttypes firsttypes=property(__getfield_firsttypes, __setfield_firsttypes, __delfield_firsttypes, None) def __getfield_sortorder(self): try: self.__field_sortorder except: self.__field_sortorder=LIST(**{'elementclass': _gen_p_sanyo4930_65, 'length': _NUMPBSLOTS}) return self.__field_sortorder.getvalue() def __setfield_sortorder(self, value): if isinstance(value,LIST): self.__field_sortorder=value else: self.__field_sortorder=LIST(value,**{'elementclass': _gen_p_sanyo4930_65, 'length': _NUMPBSLOTS}) def __delfield_sortorder(self): del self.__field_sortorder sortorder=property(__getfield_sortorder, __setfield_sortorder, __delfield_sortorder, None) def __getfield_pbfirstletters(self): return self.__field_pbfirstletters.getvalue() def __setfield_pbfirstletters(self, value): if isinstance(value,USTRING): self.__field_pbfirstletters=value else: self.__field_pbfirstletters=USTRING(value,**{'terminator': None, 'sizeinbytes': _NUMPBSLOTS}) def __delfield_pbfirstletters(self): del self.__field_pbfirstletters pbfirstletters=property(__getfield_pbfirstletters, __setfield_pbfirstletters, __delfield_pbfirstletters, None) def __getfield_sortorder2(self): try: self.__field_sortorder2 except: self.__field_sortorder2=LIST(**{'elementclass': _gen_p_sanyo4930_68, 'length': _NUMPBSLOTS}) return self.__field_sortorder2.getvalue() def __setfield_sortorder2(self, value): if isinstance(value,LIST): self.__field_sortorder2=value else: self.__field_sortorder2=LIST(value,**{'elementclass': _gen_p_sanyo4930_68, 'length': _NUMPBSLOTS}) def __delfield_sortorder2(self): del self.__field_sortorder2 sortorder2=property(__getfield_sortorder2, __setfield_sortorder2, __delfield_sortorder2, "Is this the same") def __getfield_speeddialindex(self): try: self.__field_speeddialindex except: self.__field_speeddialindex=LIST(**{'elementclass': _gen_p_sanyo4930_70, 'length': _NUMSPEEDDIALS}) return self.__field_speeddialindex.getvalue() def __setfield_speeddialindex(self, value): if isinstance(value,LIST): self.__field_speeddialindex=value else: self.__field_speeddialindex=LIST(value,**{'elementclass': _gen_p_sanyo4930_70, 'length': _NUMSPEEDDIALS}) def __delfield_speeddialindex(self): del self.__field_speeddialindex speeddialindex=property(__getfield_speeddialindex, __setfield_speeddialindex, __delfield_speeddialindex, None) def __getfield_longnumbersindex(self): try: self.__field_longnumbersindex except: self.__field_longnumbersindex=LIST(**{'elementclass': _gen_p_sanyo4930_72, 'length': _NUMLONGNUMBERS}) return self.__field_longnumbersindex.getvalue() def __setfield_longnumbersindex(self, value): if isinstance(value,LIST): self.__field_longnumbersindex=value else: self.__field_longnumbersindex=LIST(value,**{'elementclass': _gen_p_sanyo4930_72, 'length': _NUMLONGNUMBERS}) def __delfield_longnumbersindex(self): del self.__field_longnumbersindex longnumbersindex=property(__getfield_longnumbersindex, __setfield_longnumbersindex, __delfield_longnumbersindex, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_sanyo4930_74, 'length': _NUMPBSLOTS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_sanyo4930_74, 'length': _NUMPBSLOTS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, "Sorted list of slots with Email") def __getfield_emailfirstletters(self): return self.__field_emailfirstletters.getvalue() def __setfield_emailfirstletters(self, value): if isinstance(value,USTRING): self.__field_emailfirstletters=value else: self.__field_emailfirstletters=USTRING(value,**{'terminator': None, 'sizeinbytes': _NUMPBSLOTS}) def __delfield_emailfirstletters(self): del self.__field_emailfirstletters emailfirstletters=property(__getfield_emailfirstletters, __setfield_emailfirstletters, __delfield_emailfirstletters, "First letters in sort order") def __getfield_urls(self): try: self.__field_urls except: self.__field_urls=LIST(**{'elementclass': _gen_p_sanyo4930_77, 'length': _NUMPBSLOTS}) return self.__field_urls.getvalue() def __setfield_urls(self, value): if isinstance(value,LIST): self.__field_urls=value else: self.__field_urls=LIST(value,**{'elementclass': _gen_p_sanyo4930_77, 'length': _NUMPBSLOTS}) def __delfield_urls(self): del self.__field_urls urls=property(__getfield_urls, __setfield_urls, __delfield_urls, "Sorted list of slots with a URL") def __getfield_urlfirstletters(self): return self.__field_urlfirstletters.getvalue() def __setfield_urlfirstletters(self, value): if isinstance(value,USTRING): self.__field_urlfirstletters=value else: self.__field_urlfirstletters=USTRING(value,**{'terminator': None, 'sizeinbytes': _NUMPBSLOTS}) def __delfield_urlfirstletters(self): del self.__field_urlfirstletters urlfirstletters=property(__getfield_urlfirstletters, __setfield_urlfirstletters, __delfield_urlfirstletters, "First letters in sort order") def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN() return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('startcommand', self.__field_startcommand, "Starting command for R/W buf parts") yield ('bufsize', self.__field_bufsize, None) yield ('comment', self.__field_comment, None) yield ('usedflags', self.__field_usedflags, None) yield ('slotsused', self.__field_slotsused, None) yield ('slotsused2', self.__field_slotsused2, "Always seems to be the same. Why duplicated?") yield ('numemail', self.__field_numemail, "Num of slots with email") yield ('numurl', self.__field_numurl, "Num of slots with URL") yield ('firsttypes', self.__field_firsttypes, None) yield ('sortorder', self.__field_sortorder, None) yield ('pbfirstletters', self.__field_pbfirstletters, None) yield ('sortorder2', self.__field_sortorder2, "Is this the same") yield ('speeddialindex', self.__field_speeddialindex, None) yield ('longnumbersindex', self.__field_longnumbersindex, None) yield ('emails', self.__field_emails, "Sorted list of slots with Email") yield ('emailfirstletters', self.__field_emailfirstletters, "First letters in sort order") yield ('urls', self.__field_urls, "Sorted list of slots with a URL") yield ('urlfirstletters', self.__field_urlfirstletters, "First letters in sort order") yield ('pad', self.__field_pad, None) class _gen_p_sanyo4930_57(BaseProtogenClass): 'Anonymous inner class' __fields=['used'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo4930_57,self).__init__(**dict) if self.__class__ is _gen_p_sanyo4930_57: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo4930_57,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo4930_57,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_used=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_used.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_used=UINT(**{'sizeinbytes': 1}) self.__field_used.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_used(self): return self.__field_used.getvalue() def __setfield_used(self, value): if isinstance(value,UINT): self.__field_used=value else: self.__field_used=UINT(value,**{'sizeinbytes': 1}) def __delfield_used(self): del self.__field_used used=property(__getfield_used, __setfield_used, __delfield_used, "1 if slot in use") def iscontainer(self): return True def containerelements(self): yield ('used', self.__field_used, "1 if slot in use") class _gen_p_sanyo4930_63(BaseProtogenClass): 'Anonymous inner class' __fields=['firsttype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo4930_63,self).__init__(**dict) if self.__class__ is _gen_p_sanyo4930_63: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo4930_63,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo4930_63,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_firsttype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_firsttype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_firsttype=UINT(**{'sizeinbytes': 1}) self.__field_firsttype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_firsttype(self): return self.__field_firsttype.getvalue() def __setfield_firsttype(self, value): if isinstance(value,UINT): self.__field_firsttype=value else: self.__field_firsttype=UINT(value,**{'sizeinbytes': 1}) def __delfield_firsttype(self): del self.__field_firsttype firsttype=property(__getfield_firsttype, __setfield_firsttype, __delfield_firsttype, "First phone number type in each slot") def iscontainer(self): return True def containerelements(self): yield ('firsttype', self.__field_firsttype, "First phone number type in each slot") class _gen_p_sanyo4930_65(BaseProtogenClass): 'Anonymous inner class' __fields=['pbslot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo4930_65,self).__init__(**dict) if self.__class__ is _gen_p_sanyo4930_65: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo4930_65,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo4930_65,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_pbslot=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pbslot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbslot=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbslot(self): return self.__field_pbslot.getvalue() def __setfield_pbslot(self, value): if isinstance(value,UINT): self.__field_pbslot=value else: self.__field_pbslot=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pbslot(self): del self.__field_pbslot pbslot=property(__getfield_pbslot, __setfield_pbslot, __delfield_pbslot, None) def iscontainer(self): return True def containerelements(self): yield ('pbslot', self.__field_pbslot, None) class _gen_p_sanyo4930_68(BaseProtogenClass): 'Anonymous inner class' __fields=['pbslot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo4930_68,self).__init__(**dict) if self.__class__ is _gen_p_sanyo4930_68: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo4930_68,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo4930_68,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_pbslot=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pbslot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbslot=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbslot(self): return self.__field_pbslot.getvalue() def __setfield_pbslot(self, value): if isinstance(value,UINT): self.__field_pbslot=value else: self.__field_pbslot=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pbslot(self): del self.__field_pbslot pbslot=property(__getfield_pbslot, __setfield_pbslot, __delfield_pbslot, None) def iscontainer(self): return True def containerelements(self): yield ('pbslot', self.__field_pbslot, None) class _gen_p_sanyo4930_70(BaseProtogenClass): 'Anonymous inner class' __fields=['pbslotandtype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo4930_70,self).__init__(**dict) if self.__class__ is _gen_p_sanyo4930_70: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo4930_70,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo4930_70,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_pbslotandtype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pbslotandtype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbslotandtype=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslotandtype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbslotandtype(self): return self.__field_pbslotandtype.getvalue() def __setfield_pbslotandtype(self, value): if isinstance(value,UINT): self.__field_pbslotandtype=value else: self.__field_pbslotandtype=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pbslotandtype(self): del self.__field_pbslotandtype pbslotandtype=property(__getfield_pbslotandtype, __setfield_pbslotandtype, __delfield_pbslotandtype, None) def iscontainer(self): return True def containerelements(self): yield ('pbslotandtype', self.__field_pbslotandtype, None) class _gen_p_sanyo4930_72(BaseProtogenClass): 'Anonymous inner class' __fields=['pbslotandtype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo4930_72,self).__init__(**dict) if self.__class__ is _gen_p_sanyo4930_72: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo4930_72,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo4930_72,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_pbslotandtype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pbslotandtype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbslotandtype=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslotandtype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbslotandtype(self): return self.__field_pbslotandtype.getvalue() def __setfield_pbslotandtype(self, value): if isinstance(value,UINT): self.__field_pbslotandtype=value else: self.__field_pbslotandtype=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pbslotandtype(self): del self.__field_pbslotandtype pbslotandtype=property(__getfield_pbslotandtype, __setfield_pbslotandtype, __delfield_pbslotandtype, None) def iscontainer(self): return True def containerelements(self): yield ('pbslotandtype', self.__field_pbslotandtype, None) class _gen_p_sanyo4930_74(BaseProtogenClass): 'Anonymous inner class' __fields=['pbslot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo4930_74,self).__init__(**dict) if self.__class__ is _gen_p_sanyo4930_74: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo4930_74,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo4930_74,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_pbslot=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pbslot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbslot=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbslot(self): return self.__field_pbslot.getvalue() def __setfield_pbslot(self, value): if isinstance(value,UINT): self.__field_pbslot=value else: self.__field_pbslot=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pbslot(self): del self.__field_pbslot pbslot=property(__getfield_pbslot, __setfield_pbslot, __delfield_pbslot, None) def iscontainer(self): return True def containerelements(self): yield ('pbslot', self.__field_pbslot, None) class _gen_p_sanyo4930_77(BaseProtogenClass): 'Anonymous inner class' __fields=['pbslot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo4930_77,self).__init__(**dict) if self.__class__ is _gen_p_sanyo4930_77: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo4930_77,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo4930_77,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_pbslot=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pbslot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbslot=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbslot(self): return self.__field_pbslot.getvalue() def __setfield_pbslot(self, value): if isinstance(value,UINT): self.__field_pbslot=value else: self.__field_pbslot=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pbslot(self): del self.__field_pbslot pbslot=property(__getfield_pbslot, __setfield_pbslot, __delfield_pbslot, None) def iscontainer(self): return True def containerelements(self): yield ('pbslot', self.__field_pbslot, None) class calleridbuffer(BaseProtogenClass): "Index so that phone can show a name instead of number" __fields=['maxentries', 'startcommand', 'bufsize', 'comment', 'numentries', 'items', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(calleridbuffer,self).__init__(**dict) if self.__class__ is calleridbuffer: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(calleridbuffer,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(calleridbuffer,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_maxentries except: self.__field_maxentries=UINT(**{'constant': 700}) try: self.__field_startcommand except: self.__field_startcommand=UINT(**{'constant': 0x46}) try: self.__field_bufsize except: self.__field_bufsize=UINT(**{'constant': 9216}) try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "callerid"}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numentries.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{'length': self.maxentries, 'elementclass': calleridentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN() self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numentries=UINT(**{'sizeinbytes': 2}) self.__field_numentries.readfrombuffer(buf) self.__field_items=LIST(**{'length': self.maxentries, 'elementclass': calleridentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_maxentries(self): return self.__field_maxentries.getvalue() def __setfield_maxentries(self, value): if isinstance(value,UINT): self.__field_maxentries=value else: self.__field_maxentries=UINT(value,**{'constant': 700}) def __delfield_maxentries(self): del self.__field_maxentries maxentries=property(__getfield_maxentries, __setfield_maxentries, __delfield_maxentries, None) def __getfield_startcommand(self): return self.__field_startcommand.getvalue() def __setfield_startcommand(self, value): if isinstance(value,UINT): self.__field_startcommand=value else: self.__field_startcommand=UINT(value,**{'constant': 0x46}) def __delfield_startcommand(self): del self.__field_startcommand startcommand=property(__getfield_startcommand, __setfield_startcommand, __delfield_startcommand, "Starting command for R/W buf parts") def __getfield_bufsize(self): return self.__field_bufsize.getvalue() def __setfield_bufsize(self, value): if isinstance(value,UINT): self.__field_bufsize=value else: self.__field_bufsize=UINT(value,**{'constant': 9216}) def __delfield_bufsize(self): del self.__field_bufsize bufsize=property(__getfield_bufsize, __setfield_bufsize, __delfield_bufsize, None) def __getfield_comment(self): try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "callerid"}) return self.__field_comment.getvalue() def __setfield_comment(self, value): if isinstance(value,USTRING): self.__field_comment=value else: self.__field_comment=USTRING(value,**{'default': "callerid"}) def __delfield_comment(self): del self.__field_comment comment=property(__getfield_comment, __setfield_comment, __delfield_comment, None) def __getfield_numentries(self): return self.__field_numentries.getvalue() def __setfield_numentries(self, value): if isinstance(value,UINT): self.__field_numentries=value else: self.__field_numentries=UINT(value,**{'sizeinbytes': 2}) def __delfield_numentries(self): del self.__field_numentries numentries=property(__getfield_numentries, __setfield_numentries, __delfield_numentries, "Number phone numbers") def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'length': self.maxentries, 'elementclass': calleridentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'length': self.maxentries, 'elementclass': calleridentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN() return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('maxentries', self.__field_maxentries, None) yield ('startcommand', self.__field_startcommand, "Starting command for R/W buf parts") yield ('bufsize', self.__field_bufsize, None) yield ('comment', self.__field_comment, None) yield ('numentries', self.__field_numentries, "Number phone numbers") yield ('items', self.__field_items, None) yield ('pad', self.__field_pad, None) class evententry(BaseProtogenClass): __fields=['slot', 'eventname', 'pad1', 'eventname_len', 'start', 'end', 'location', 'pad2', 'location_len', 'alarmdiff', 'period', 'dom', 'alarm', 'pad3', 'serial', 'pad4', 'ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(evententry,self).__init__(**dict) if self.__class__ is evententry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(evententry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(evententry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_eventname.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.writetobuffer(buf) self.__field_eventname_len.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_location.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad2.writetobuffer(buf) self.__field_location_len.writetobuffer(buf) self.__field_alarmdiff.writetobuffer(buf) self.__field_period.writetobuffer(buf) self.__field_dom.writetobuffer(buf) self.__field_alarm.writetobuffer(buf) try: self.__field_pad3 except: self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad3.writetobuffer(buf) try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.writetobuffer(buf) try: self.__field_pad4 except: self.__field_pad4=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad4.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_eventname=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_eventname.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.readfrombuffer(buf) self.__field_eventname_len=UINT(**{'sizeinbytes': 1}) self.__field_eventname_len.readfrombuffer(buf) self.__field_start=UINT(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=UINT(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_location=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_location.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad2.readfrombuffer(buf) self.__field_location_len=UINT(**{'sizeinbytes': 1}) self.__field_location_len.readfrombuffer(buf) self.__field_alarmdiff=UINT(**{'sizeinbytes': 4}) self.__field_alarmdiff.readfrombuffer(buf) self.__field_period=UINT(**{'sizeinbytes': 1}) self.__field_period.readfrombuffer(buf) self.__field_dom=UINT(**{'sizeinbytes': 1}) self.__field_dom.readfrombuffer(buf) self.__field_alarm=UINT(**{'sizeinbytes': 4}) self.__field_alarm.readfrombuffer(buf) self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad3.readfrombuffer(buf) self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.readfrombuffer(buf) self.__field_pad4=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad4.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 2}) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_eventname(self): return self.__field_eventname.getvalue() def __setfield_eventname(self, value): if isinstance(value,USTRING): self.__field_eventname=value else: self.__field_eventname=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_eventname(self): del self.__field_eventname eventname=property(__getfield_eventname, __setfield_eventname, __delfield_eventname, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_eventname_len(self): return self.__field_eventname_len.getvalue() def __setfield_eventname_len(self, value): if isinstance(value,UINT): self.__field_eventname_len=value else: self.__field_eventname_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_eventname_len(self): del self.__field_eventname_len eventname_len=property(__getfield_eventname_len, __setfield_eventname_len, __delfield_eventname_len, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,UINT): self.__field_start=value else: self.__field_start=UINT(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, "# seconds since Jan 1, 1980 approximately") def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,UINT): self.__field_end=value else: self.__field_end=UINT(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_location(self): return self.__field_location.getvalue() def __setfield_location(self, value): if isinstance(value,USTRING): self.__field_location=value else: self.__field_location=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_location(self): del self.__field_location location=property(__getfield_location, __setfield_location, __delfield_location, None) def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_location_len(self): return self.__field_location_len.getvalue() def __setfield_location_len(self, value): if isinstance(value,UINT): self.__field_location_len=value else: self.__field_location_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_location_len(self): del self.__field_location_len location_len=property(__getfield_location_len, __setfield_location_len, __delfield_location_len, None) def __getfield_alarmdiff(self): return self.__field_alarmdiff.getvalue() def __setfield_alarmdiff(self, value): if isinstance(value,UINT): self.__field_alarmdiff=value else: self.__field_alarmdiff=UINT(value,**{'sizeinbytes': 4}) def __delfield_alarmdiff(self): del self.__field_alarmdiff alarmdiff=property(__getfield_alarmdiff, __setfield_alarmdiff, __delfield_alarmdiff, "Displayed alarm time") def __getfield_period(self): return self.__field_period.getvalue() def __setfield_period(self, value): if isinstance(value,UINT): self.__field_period=value else: self.__field_period=UINT(value,**{'sizeinbytes': 1}) def __delfield_period(self): del self.__field_period period=property(__getfield_period, __setfield_period, __delfield_period, "No, Daily, Weekly, Monthly, Yearly") def __getfield_dom(self): return self.__field_dom.getvalue() def __setfield_dom(self, value): if isinstance(value,UINT): self.__field_dom=value else: self.__field_dom=UINT(value,**{'sizeinbytes': 1}) def __delfield_dom(self): del self.__field_dom dom=property(__getfield_dom, __setfield_dom, __delfield_dom, "Day of month for the event") def __getfield_alarm(self): return self.__field_alarm.getvalue() def __setfield_alarm(self, value): if isinstance(value,UINT): self.__field_alarm=value else: self.__field_alarm=UINT(value,**{'sizeinbytes': 4}) def __delfield_alarm(self): del self.__field_alarm alarm=property(__getfield_alarm, __setfield_alarm, __delfield_alarm, None) def __getfield_pad3(self): try: self.__field_pad3 except: self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad3.getvalue() def __setfield_pad3(self, value): if isinstance(value,UNKNOWN): self.__field_pad3=value else: self.__field_pad3=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad3(self): del self.__field_pad3 pad3=property(__getfield_pad3, __setfield_pad3, __delfield_pad3, None) def __getfield_serial(self): try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_serial.getvalue() def __setfield_serial(self, value): if isinstance(value,UINT): self.__field_serial=value else: self.__field_serial=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_serial(self): del self.__field_serial serial=property(__getfield_serial, __setfield_serial, __delfield_serial, "Some kind of serial number") def __getfield_pad4(self): try: self.__field_pad4 except: self.__field_pad4=UNKNOWN(**{'sizeinbytes': 3}) return self.__field_pad4.getvalue() def __setfield_pad4(self, value): if isinstance(value,UNKNOWN): self.__field_pad4=value else: self.__field_pad4=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_pad4(self): del self.__field_pad4 pad4=property(__getfield_pad4, __setfield_pad4, __delfield_pad4, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 2}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('eventname', self.__field_eventname, None) yield ('pad1', self.__field_pad1, None) yield ('eventname_len', self.__field_eventname_len, None) yield ('start', self.__field_start, "# seconds since Jan 1, 1980 approximately") yield ('end', self.__field_end, None) yield ('location', self.__field_location, None) yield ('pad2', self.__field_pad2, None) yield ('location_len', self.__field_location_len, None) yield ('alarmdiff', self.__field_alarmdiff, "Displayed alarm time") yield ('period', self.__field_period, "No, Daily, Weekly, Monthly, Yearly") yield ('dom', self.__field_dom, "Day of month for the event") yield ('alarm', self.__field_alarm, None) yield ('pad3', self.__field_pad3, None) yield ('serial', self.__field_serial, "Some kind of serial number") yield ('pad4', self.__field_pad4, None) yield ('ringtone', self.__field_ringtone, None) class eventrequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventrequest,self).__init__(**dict) if self.__class__ is eventrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x23}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x23}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x23}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,**{'packettype': 0x0c, 'command': 0x23}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 129}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class eventresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventresponse,self).__init__(**dict) if self.__class__ is eventresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader() self.__field_header.readfrombuffer(buf) self.__field_entry=evententry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,evententry): self.__field_entry=value else: self.__field_entry=evententry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class eventslotinuserequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventslotinuserequest,self).__init__(**dict) if self.__class__ is eventslotinuserequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventslotinuserequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventslotinuserequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpheader(**{'readwrite': 0x26, 'packettype': 0x0d, 'command': 0x74}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader(**{'readwrite': 0x26, 'packettype': 0x0d, 'command': 0x74}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpheader(**{'readwrite': 0x26, 'packettype': 0x0d, 'command': 0x74}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,**{'readwrite': 0x26, 'packettype': 0x0d, 'command': 0x74}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 129}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class eventslotinuseresponse(BaseProtogenClass): __fields=['header', 'slot', 'flag', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventslotinuseresponse,self).__init__(**dict) if self.__class__ is eventslotinuseresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventslotinuseresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventslotinuseresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader() self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, None) yield ('pad', self.__field_pad, None) class eventslotinuseupdaterequest(BaseProtogenClass): __fields=['header', 'slot', 'flag', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventslotinuseupdaterequest,self).__init__(**dict) if self.__class__ is eventslotinuseupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventslotinuseupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventslotinuseupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0d, 'command': 0x74}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 124}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpwriteheader(**{'packettype': 0x0d, 'command': 0x74}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 124}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0d, 'command': 0x74}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpwriteheader): self.__field_header=value else: self.__field_header=qcpwriteheader(value,**{'packettype': 0x0d, 'command': 0x74}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 124}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 124}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, None) yield ('pad', self.__field_pad, None) class eventupdaterequest(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventupdaterequest,self).__init__(**dict) if self.__class__ is eventupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x23}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 56}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x23}) self.__field_header.readfrombuffer(buf) self.__field_entry=evententry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 56}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x23}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpwriteheader): self.__field_header=value else: self.__field_header=qcpwriteheader(value,**{'packettype': 0x0c, 'command':0x23}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,evententry): self.__field_entry=value else: self.__field_entry=evententry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 56}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 56}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class callalarmrequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmrequest,self).__init__(**dict) if self.__class__ is callalarmrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x24}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x24}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x24}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,**{'packettype': 0x0c, 'command': 0x24}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 129}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class callalarmresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmresponse,self).__init__(**dict) if self.__class__ is callalarmresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader() self.__field_header.readfrombuffer(buf) self.__field_entry=callalarmentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,callalarmentry): self.__field_entry=value else: self.__field_entry=callalarmentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class callalarmupdaterequest(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmupdaterequest,self).__init__(**dict) if self.__class__ is callalarmupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x24}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 40}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x24}) self.__field_header.readfrombuffer(buf) self.__field_entry=callalarmentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 40}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x24}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpwriteheader): self.__field_header=value else: self.__field_header=qcpwriteheader(value,**{'packettype': 0x0c, 'command':0x24}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,callalarmentry): self.__field_entry=value else: self.__field_entry=callalarmentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 40}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 40}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class callalarmslotinuserequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmslotinuserequest,self).__init__(**dict) if self.__class__ is callalarmslotinuserequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmslotinuserequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmslotinuserequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0d, 'command': 0x76}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader(**{'packettype': 0x0d, 'command': 0x76}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0d, 'command': 0x76}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,**{'packettype': 0x0d, 'command': 0x76}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 129}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class callalarmslotinuseresponse(BaseProtogenClass): __fields=['header', 'slot', 'flag', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmslotinuseresponse,self).__init__(**dict) if self.__class__ is callalarmslotinuseresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmslotinuseresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmslotinuseresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader() self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, None) yield ('pad', self.__field_pad, None) class callalarmentry(BaseProtogenClass): __fields=['slot', 'pad0', 'phonenum', 'phonenum_len', 'date', 'period', 'dom', 'datedup', 'name', 'pad1', 'name_len', 'phonenumbertype', 'phonenumberslot', 'pad2', 'serial', 'pad3', 'ringtone', 'pad4', 'flag'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmentry,self).__init__(**dict) if self.__class__ is callalarmentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) try: self.__field_pad0 except: self.__field_pad0=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad0.writetobuffer(buf) self.__field_phonenum.writetobuffer(buf) self.__field_phonenum_len.writetobuffer(buf) self.__field_date.writetobuffer(buf) self.__field_period.writetobuffer(buf) self.__field_dom.writetobuffer(buf) self.__field_datedup.writetobuffer(buf) self.__field_name.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.writetobuffer(buf) self.__field_name_len.writetobuffer(buf) self.__field_phonenumbertype.writetobuffer(buf) self.__field_phonenumberslot.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad2.writetobuffer(buf) try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.writetobuffer(buf) try: self.__field_pad3 except: self.__field_pad3=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad3.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 1, 'default': 0xfc}) self.__field_ringtone.writetobuffer(buf) try: self.__field_pad4 except: self.__field_pad4=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad4.writetobuffer(buf) try: self.__field_flag except: self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad0=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad0.readfrombuffer(buf) self.__field_phonenum=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_phonenum.readfrombuffer(buf) self.__field_phonenum_len=UINT(**{'sizeinbytes': 1}) self.__field_phonenum_len.readfrombuffer(buf) self.__field_date=UINT(**{'sizeinbytes': 4}) self.__field_date.readfrombuffer(buf) self.__field_period=UINT(**{'sizeinbytes': 1}) self.__field_period.readfrombuffer(buf) self.__field_dom=UINT(**{'sizeinbytes': 1}) self.__field_dom.readfrombuffer(buf) self.__field_datedup=UINT(**{'sizeinbytes': 4}) self.__field_datedup.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_name.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.readfrombuffer(buf) self.__field_name_len=UINT(**{'sizeinbytes': 1}) self.__field_name_len.readfrombuffer(buf) self.__field_phonenumbertype=UINT(**{'sizeinbytes': 1}) self.__field_phonenumbertype.readfrombuffer(buf) self.__field_phonenumberslot=UINT(**{'sizeinbytes': 2}) self.__field_phonenumberslot.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad2.readfrombuffer(buf) self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.readfrombuffer(buf) self.__field_pad3=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad3.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1, 'default': 0xfc}) self.__field_ringtone.readfrombuffer(buf) self.__field_pad4=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad4.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad0(self): try: self.__field_pad0 except: self.__field_pad0=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad0.getvalue() def __setfield_pad0(self, value): if isinstance(value,UNKNOWN): self.__field_pad0=value else: self.__field_pad0=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad0(self): del self.__field_pad0 pad0=property(__getfield_pad0, __setfield_pad0, __delfield_pad0, "Not the flag?") def __getfield_phonenum(self): return self.__field_phonenum.getvalue() def __setfield_phonenum(self, value): if isinstance(value,USTRING): self.__field_phonenum=value else: self.__field_phonenum=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_phonenum(self): del self.__field_phonenum phonenum=property(__getfield_phonenum, __setfield_phonenum, __delfield_phonenum, None) def __getfield_phonenum_len(self): return self.__field_phonenum_len.getvalue() def __setfield_phonenum_len(self, value): if isinstance(value,UINT): self.__field_phonenum_len=value else: self.__field_phonenum_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_phonenum_len(self): del self.__field_phonenum_len phonenum_len=property(__getfield_phonenum_len, __setfield_phonenum_len, __delfield_phonenum_len, None) def __getfield_date(self): return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,UINT): self.__field_date=value else: self.__field_date=UINT(value,**{'sizeinbytes': 4}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, "# seconds since Jan 1, 1980 approximately") def __getfield_period(self): return self.__field_period.getvalue() def __setfield_period(self, value): if isinstance(value,UINT): self.__field_period=value else: self.__field_period=UINT(value,**{'sizeinbytes': 1}) def __delfield_period(self): del self.__field_period period=property(__getfield_period, __setfield_period, __delfield_period, "No, Daily, Weekly, Monthly, Yearly") def __getfield_dom(self): return self.__field_dom.getvalue() def __setfield_dom(self, value): if isinstance(value,UINT): self.__field_dom=value else: self.__field_dom=UINT(value,**{'sizeinbytes': 1}) def __delfield_dom(self): del self.__field_dom dom=property(__getfield_dom, __setfield_dom, __delfield_dom, "Day of month for the event") def __getfield_datedup(self): return self.__field_datedup.getvalue() def __setfield_datedup(self, value): if isinstance(value,UINT): self.__field_datedup=value else: self.__field_datedup=UINT(value,**{'sizeinbytes': 4}) def __delfield_datedup(self): del self.__field_datedup datedup=property(__getfield_datedup, __setfield_datedup, __delfield_datedup, "Copy of the date. Always the same???") def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_name_len(self): return self.__field_name_len.getvalue() def __setfield_name_len(self, value): if isinstance(value,UINT): self.__field_name_len=value else: self.__field_name_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_name_len(self): del self.__field_name_len name_len=property(__getfield_name_len, __setfield_name_len, __delfield_name_len, None) def __getfield_phonenumbertype(self): return self.__field_phonenumbertype.getvalue() def __setfield_phonenumbertype(self, value): if isinstance(value,UINT): self.__field_phonenumbertype=value else: self.__field_phonenumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_phonenumbertype(self): del self.__field_phonenumbertype phonenumbertype=property(__getfield_phonenumbertype, __setfield_phonenumbertype, __delfield_phonenumbertype, "1: Home, 2: Work, ...") def __getfield_phonenumberslot(self): return self.__field_phonenumberslot.getvalue() def __setfield_phonenumberslot(self, value): if isinstance(value,UINT): self.__field_phonenumberslot=value else: self.__field_phonenumberslot=UINT(value,**{'sizeinbytes': 2}) def __delfield_phonenumberslot(self): del self.__field_phonenumberslot phonenumberslot=property(__getfield_phonenumberslot, __setfield_phonenumberslot, __delfield_phonenumberslot, None) def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_serial(self): try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_serial.getvalue() def __setfield_serial(self, value): if isinstance(value,UINT): self.__field_serial=value else: self.__field_serial=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_serial(self): del self.__field_serial serial=property(__getfield_serial, __setfield_serial, __delfield_serial, None) def __getfield_pad3(self): try: self.__field_pad3 except: self.__field_pad3=UNKNOWN(**{'sizeinbytes': 2}) return self.__field_pad3.getvalue() def __setfield_pad3(self, value): if isinstance(value,UNKNOWN): self.__field_pad3=value else: self.__field_pad3=UNKNOWN(value,**{'sizeinbytes': 2}) def __delfield_pad3(self): del self.__field_pad3 pad3=property(__getfield_pad3, __setfield_pad3, __delfield_pad3, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 1, 'default': 0xfc}) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1, 'default': 0xfc}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_pad4(self): try: self.__field_pad4 except: self.__field_pad4=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad4.getvalue() def __setfield_pad4(self, value): if isinstance(value,UNKNOWN): self.__field_pad4=value else: self.__field_pad4=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad4(self): del self.__field_pad4 pad4=property(__getfield_pad4, __setfield_pad4, __delfield_pad4, " This may be the ringtone. Need to understand ") def __getfield_flag(self): try: self.__field_flag except: self.__field_flag=UINT(**{'sizeinbytes': 1}) return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('pad0', self.__field_pad0, "Not the flag?") yield ('phonenum', self.__field_phonenum, None) yield ('phonenum_len', self.__field_phonenum_len, None) yield ('date', self.__field_date, "# seconds since Jan 1, 1980 approximately") yield ('period', self.__field_period, "No, Daily, Weekly, Monthly, Yearly") yield ('dom', self.__field_dom, "Day of month for the event") yield ('datedup', self.__field_datedup, "Copy of the date. Always the same???") yield ('name', self.__field_name, None) yield ('pad1', self.__field_pad1, None) yield ('name_len', self.__field_name_len, None) yield ('phonenumbertype', self.__field_phonenumbertype, "1: Home, 2: Work, ...") yield ('phonenumberslot', self.__field_phonenumberslot, None) yield ('pad2', self.__field_pad2, None) yield ('serial', self.__field_serial, None) yield ('pad3', self.__field_pad3, None) yield ('ringtone', self.__field_ringtone, None) yield ('pad4', self.__field_pad4, " This may be the ringtone. Need to understand ") yield ('flag', self.__field_flag, None) bitpim-1.0.7+dfsg1/src/phones/p_lgvx9400.py0000644001616600161660000010303310645762275016436 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VX9400""" from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx9900 except as noted # below from p_lgvx9900 import * BREW_FILE_SYSTEM = 2 BREW_READ_SIZE = 0x400 BREW_WRITE_SIZE = 0x1F00 # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb CALENDAR_HAS_SEPARATE_END_TIME_AND_DATE=1 # Phonebook stuff RTPathIndexFile='pim/pbRingIdSetAsPath.dat' WPPathIndexFile='pim/pbPictureIdSetAsPath.dat' pb_file_name='pim/pbentry.dat' class scheduleevent(BaseProtogenClass): __fields=['pos', 'description', 'cdate', 'mdate', 'start', 'end_time', 'end_date', 'repeat', 'alarmindex_vibrate', 'ringtone', 'unknown1', 'alarmminutes', 'alarmhours', 'unknown2', 'unknown3', 'unknown4', 'serial_number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleevent,self).__init__(**dict) if self.__class__ is scheduleevent: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleevent,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleevent,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_description.writetobuffer(buf) try: self.__field_cdate except: self.__field_cdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) self.__field_cdate.writetobuffer(buf) try: self.__field_mdate except: self.__field_mdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) self.__field_mdate.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end_time.writetobuffer(buf) self.__field_end_date.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) self.__field_alarmindex_vibrate.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_alarmminutes.writetobuffer(buf) self.__field_alarmhours.writetobuffer(buf) try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_unknown2.writetobuffer(buf) try: self.__field_unknown3 except: self.__field_unknown3=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_unknown3.writetobuffer(buf) try: self.__field_unknown4 except: self.__field_unknown4=USTRING(**{'sizeinbytes': 256, 'default': '', 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_unknown4.writetobuffer(buf) try: self.__field_serial_number except: self.__field_serial_number=USTRING(**{'sizeinbytes': 64, 'default': '000000c9-00000000-00000000-T9MVZV02', 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_serial_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_description=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_description.readfrombuffer(buf) self.__field_cdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) self.__field_cdate.readfrombuffer(buf) self.__field_mdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) self.__field_mdate.readfrombuffer(buf) self.__field_start=LGCALDATE(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_end_time.readfrombuffer(buf) self.__field_end_date=LGCALDATE(**{'sizeinbytes': 4}) self.__field_end_date.readfrombuffer(buf) self.__field_repeat=LGCALREPEAT(**{'sizeinbytes': 4}) self.__field_repeat.readfrombuffer(buf) self.__field_alarmindex_vibrate=UINT(**{'sizeinbytes': 1}) self.__field_alarmindex_vibrate.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_alarmminutes=UINT(**{'sizeinbytes': 1}) self.__field_alarmminutes.readfrombuffer(buf) self.__field_alarmhours=UINT(**{'sizeinbytes': 1}) self.__field_alarmhours.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=USTRING(**{'sizeinbytes': 256, 'default': '', 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_unknown4.readfrombuffer(buf) self.__field_serial_number=USTRING(**{'sizeinbytes': 64, 'default': '000000c9-00000000-00000000-T9MVZV02', 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_serial_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "position within file, used as an event id") def __getfield_description(self): return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,USTRING): self.__field_description=value else: self.__field_description=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def __getfield_cdate(self): try: self.__field_cdate except: self.__field_cdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) return self.__field_cdate.getvalue() def __setfield_cdate(self, value): if isinstance(value,GPSDATE): self.__field_cdate=value else: self.__field_cdate=GPSDATE(value,**{'sizeinbytes': 4, 'default': GPSDATE.now() }) def __delfield_cdate(self): del self.__field_cdate cdate=property(__getfield_cdate, __setfield_cdate, __delfield_cdate, None) def __getfield_mdate(self): try: self.__field_mdate except: self.__field_mdate=GPSDATE(**{'sizeinbytes': 4, 'default': GPSDATE.now() }) return self.__field_mdate.getvalue() def __setfield_mdate(self, value): if isinstance(value,GPSDATE): self.__field_mdate=value else: self.__field_mdate=GPSDATE(value,**{'sizeinbytes': 4, 'default': GPSDATE.now() }) def __delfield_mdate(self): del self.__field_mdate mdate=property(__getfield_mdate, __setfield_mdate, __delfield_mdate, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,LGCALDATE): self.__field_start=value else: self.__field_start=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end_time(self): return self.__field_end_time.getvalue() def __setfield_end_time(self, value): if isinstance(value,LGCALDATE): self.__field_end_time=value else: self.__field_end_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_end_time(self): del self.__field_end_time end_time=property(__getfield_end_time, __setfield_end_time, __delfield_end_time, None) def __getfield_end_date(self): return self.__field_end_date.getvalue() def __setfield_end_date(self, value): if isinstance(value,LGCALDATE): self.__field_end_date=value else: self.__field_end_date=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_end_date(self): del self.__field_end_date end_date=property(__getfield_end_date, __setfield_end_date, __delfield_end_date, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,LGCALREPEAT): self.__field_repeat=value else: self.__field_repeat=LGCALREPEAT(value,**{'sizeinbytes': 4}) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_alarmindex_vibrate(self): return self.__field_alarmindex_vibrate.getvalue() def __setfield_alarmindex_vibrate(self, value): if isinstance(value,UINT): self.__field_alarmindex_vibrate=value else: self.__field_alarmindex_vibrate=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmindex_vibrate(self): del self.__field_alarmindex_vibrate alarmindex_vibrate=property(__getfield_alarmindex_vibrate, __setfield_alarmindex_vibrate, __delfield_alarmindex_vibrate, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_alarmminutes(self): return self.__field_alarmminutes.getvalue() def __setfield_alarmminutes(self, value): if isinstance(value,UINT): self.__field_alarmminutes=value else: self.__field_alarmminutes=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmminutes(self): del self.__field_alarmminutes alarmminutes=property(__getfield_alarmminutes, __setfield_alarmminutes, __delfield_alarmminutes, "a value of 0xFF indicates not set") def __getfield_alarmhours(self): return self.__field_alarmhours.getvalue() def __setfield_alarmhours(self, value): if isinstance(value,UINT): self.__field_alarmhours=value else: self.__field_alarmhours=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmhours(self): del self.__field_alarmhours alarmhours=property(__getfield_alarmhours, __setfield_alarmhours, __delfield_alarmhours, "a value of 0xFF indicates not set") def __getfield_unknown2(self): try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): try: self.__field_unknown3 except: self.__field_unknown3=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): try: self.__field_unknown4 except: self.__field_unknown4=USTRING(**{'sizeinbytes': 256, 'default': '', 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,USTRING): self.__field_unknown4=value else: self.__field_unknown4=USTRING(value,**{'sizeinbytes': 256, 'default': '', 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_serial_number(self): try: self.__field_serial_number except: self.__field_serial_number=USTRING(**{'sizeinbytes': 64, 'default': '000000c9-00000000-00000000-T9MVZV02', 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) return self.__field_serial_number.getvalue() def __setfield_serial_number(self, value): if isinstance(value,USTRING): self.__field_serial_number=value else: self.__field_serial_number=USTRING(value,**{'sizeinbytes': 64, 'default': '000000c9-00000000-00000000-T9MVZV02', 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_serial_number(self): del self.__field_serial_number serial_number=property(__getfield_serial_number, __setfield_serial_number, __delfield_serial_number, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "position within file, used as an event id") yield ('description', self.__field_description, None) yield ('cdate', self.__field_cdate, None) yield ('mdate', self.__field_mdate, None) yield ('start', self.__field_start, None) yield ('end_time', self.__field_end_time, None) yield ('end_date', self.__field_end_date, None) yield ('repeat', self.__field_repeat, None) yield ('alarmindex_vibrate', self.__field_alarmindex_vibrate, None) yield ('ringtone', self.__field_ringtone, None) yield ('unknown1', self.__field_unknown1, None) yield ('alarmminutes', self.__field_alarmminutes, "a value of 0xFF indicates not set") yield ('alarmhours', self.__field_alarmhours, "a value of 0xFF indicates not set") yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) yield ('serial_number', self.__field_serial_number, None) class schedulefile(BaseProtogenClass): __fields=['numactiveitems', 'events'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(schedulefile,self).__init__(**dict) if self.__class__ is schedulefile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(schedulefile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(schedulefile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{'elementclass': scheduleevent}) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('events', self.__field_events, None) class pbfileentry(BaseProtogenClass): __fields=['serial1', 'entrynumber', 'data1', 'ringtone', 'wallpaper', 'data2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbfileentry,self).__init__(**dict) if self.__class__ is pbfileentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbfileentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbfileentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_serial1.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_data1.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_wallpaper.writetobuffer(buf) self.__field_data2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 2}) self.__field_entrynumber.readfrombuffer(buf) self.__field_data1=UNKNOWN(**{'sizeinbytes': 127}) self.__field_data1.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 2}) self.__field_ringtone.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 2}) self.__field_wallpaper.readfrombuffer(buf) self.__field_data2=UNKNOWN(**{'sizeinbytes': 248}) self.__field_data2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 2}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_data1(self): return self.__field_data1.getvalue() def __setfield_data1(self, value): if isinstance(value,UNKNOWN): self.__field_data1=value else: self.__field_data1=UNKNOWN(value,**{'sizeinbytes': 127}) def __delfield_data1(self): del self.__field_data1 data1=property(__getfield_data1, __setfield_data1, __delfield_data1, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 2}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 2}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_data2(self): return self.__field_data2.getvalue() def __setfield_data2(self, value): if isinstance(value,UNKNOWN): self.__field_data2=value else: self.__field_data2=UNKNOWN(value,**{'sizeinbytes': 248}) def __delfield_data2(self): del self.__field_data2 data2=property(__getfield_data2, __setfield_data2, __delfield_data2, None) def iscontainer(self): return True def containerelements(self): yield ('serial1', self.__field_serial1, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('data1', self.__field_data1, None) yield ('ringtone', self.__field_ringtone, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('data2', self.__field_data2, None) class pbfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbfile,self).__init__(**dict) if self.__class__ is pbfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbfile,kwargs) if len(args): dict2={ 'elementclass': pbfileentry } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': pbfileentry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': pbfileentry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class PathIndexEntry(BaseProtogenClass): __fields=['pathname'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PathIndexEntry,self).__init__(**dict) if self.__class__ is PathIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PathIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PathIndexEntry,kwargs) if len(args): dict2={'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' } dict2.update(kwargs) kwargs=dict2 self.__field_pathname=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_pathname except: self.__field_pathname=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' }) self.__field_pathname.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pathname=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' }) self.__field_pathname.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pathname(self): try: self.__field_pathname except: self.__field_pathname=USTRING(**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' }) return self.__field_pathname.getvalue() def __setfield_pathname(self, value): if isinstance(value,USTRING): self.__field_pathname=value else: self.__field_pathname=USTRING(value,**{'sizeinbytes': 255, 'encoding': PHONE_ENCODING, 'default': '' }) def __delfield_pathname(self): del self.__field_pathname pathname=property(__getfield_pathname, __setfield_pathname, __delfield_pathname, None) def iscontainer(self): return True def containerelements(self): yield ('pathname', self.__field_pathname, None) class PathIndexFile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PathIndexFile,self).__init__(**dict) if self.__class__ is PathIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PathIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PathIndexFile,kwargs) if len(args): dict2={ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) bitpim-1.0.7+dfsg1/src/phones/p_motov325.py0000644001616600161660000000067710737325377016551 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Motorola V325 phones""" from prototypes import * from prototypes_moto import * from p_etsi import * from p_moto import * from p_motov3m import * import fnmatch # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb PB_TOTAL_ENTRIES=500 PB_RANGE=xrange(1,PB_TOTAL_ENTRIES+1) MOTO_SHARED_PATH='motorola/shared' bitpim-1.0.7+dfsg1/src/phones/p_toshibavm4050.p0000644001616600161660000001237210445704035017246 0ustar amuamu### BITPIM ### ### BITPIM ### ### Copyright (C) 2006 Simon Capper ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_toshibavm4050.p 3387 2006-06-20 05:31:09Z rogerb $ %{ """Various descriptions of data specific to Audiovox CDM8900""" from prototypes import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSLOTS=300 MAXPHONENUMBERLEN=32 MAXPHONENUMBERS=5 MAXNAMELEN=16 MAXEMAILLEN=48 MAXMEMOLEN=48 MAXEMAILS=3 numbertypetab=( 'phone', 'home', 'office','cell', 'pager', 'fax' ) PHONE_ENCODING='iso8859_1' %} PACKET pbnumber: 1 UINT {'default': 0} +valid # 1 when number is valid, record can contain garbage so this must be checked 1 UINT {'default': 0} +type # see numbertypetab above 1 UINT {'default': 5} +ringer_group # 5=default, 1=pattern1, 2=pattern2, 3=melody, 1 UINT {'default': 0} +pad0 #zeros 2 UINT {'default': 0} +ringer_index # index in the ringer_group 2 UINT {'default': 0} +pad1 #zeros 1 UINT {'default': 0} +secret # individual numbers are secret on this phone 33 USTRING {'terminator': None, 'pascal': True, 'default': ""} +number 48 UNKNOWN +pad2 # zeros PACKET pbemail: 1 UINT {'default': 0} +valid # 1 when number is valid, record can contain garbage so this must be checked 1 UINT {'default': 1} +dunno1 2 UINT {'default': 0} +dunno2 1 UINT {'default': 5} +dunno3 4 UINT {'default': 0} +dunno4 49 USTRING {'encoding': PHONE_ENCODING, 'terminator': None, 'pascal': True, 'default': ""} +email PACKET pbentry: 2 UINT slot # 2 UINT {'default': 0x0101} +pad2 # 0x0101 1 UINT {'default': 0} +pad3 # zero 37 USTRING {'encoding': PHONE_ENCODING, 'terminator': None, 'pascal': True} name * LIST {'length': MAXPHONENUMBERS, 'elementclass': pbnumber, 'createdefault': True} +numbers * LIST {'length': MAXEMAILS, 'elementclass': pbemail, 'createdefault': True} +emails 2 UINT {'default': 0x0001} +dunno 49 USTRING {'encoding': PHONE_ENCODING, 'terminator': None, 'pascal': True, 'default': ""} +web_page 81 UNKNOWN +pad5 PACKET setphoneattribrequest: 1 UINT {'constant': 0x27} +cmd 1 UINT {'constant': 0xF0} +cmd2 1 UINT {'constant': 0x7F} +cmd3 1 UINT {'constant': 0x01} +flag 129 UINT {'constant': 0x00} +data PACKET setphoneattribresponse: 1 UINT {'constant': 0x27} +cmd 1 UINT {'constant': 0xF0} +cmd2 1 UINT {'constant': 0x7F} +cmd3 1 UINT flag * DATA +pad PACKET tosh_swapheaderrequest: "The bit in front on all toshiba request packets" 1 UINT {'constant': 0xF1} +cmd 1 UINT {'constant': 0x0F} +cmd2 1 UINT command PACKET tosh_swapheaderresponse: "The bit in front on all toshiba request packets" 1 UINT {'constant': 0xF1} +cmd 1 UINT {'constant': 0x0F} +cmd2 PACKET tosh_getpbentryrequest: """ Read an entry from a slot """ * tosh_swapheaderrequest {'command': 0x02} +header 2 UINT {'constant': 0x03} +cmd 2 UINT {'constant': 0x00} +pad 2 UINT {'constant': 0x04} +data_type 2 UINT entry_index 2 UINT {'constant': 0x00} +pad PACKET tosh_getpbentryresponse: * tosh_swapheaderresponse +header 1 UINT {'constant': 0x02} +cmd 2 UINT {'constant': 0x00} +read 2 UINT {'constant': 0x04} +data_type 4 UINT swap_ok # 0 is OK, all F's failed PACKET tosh_setpbentryrequest: """ Inserts a new entry into an empty slot """ * tosh_swapheaderrequest {'command': 0x02} +header 2 UINT {'constant': 0x03} +cmd 2 UINT {'constant': 0x100} +write 2 UINT {'constant': 0x04} +data_type 2 UINT entry_index 2 UINT {'constant': 0x00} +pad PACKET tosh_setpbentryresponse: * tosh_swapheaderresponse +header 1 UINT {'constant': 0x02} +cmd 4 UINT swap_ok # 0 is OK, all F's failed PACKET tosh_modifypbentryrequest: """ Modifies/deletes an existing entry delete occurs if the swap file does not exist when this command is issued """ * tosh_swapheaderrequest {'command': 0x02} +header 2 UINT {'constant': 0x03} +cmd 2 UINT {'constant': 0x200} +write 2 UINT {'constant': 0x04} +data_type 2 UINT entry_index 2 UINT {'constant': 0x00} +pad PACKET tosh_modifypbentryresponse: * tosh_swapheaderresponse +header 1 UINT {'constant': 0x02} +cmd 4 UINT swap_ok # 0 is OK, all F's failed PACKET tosh_enableswapdatarequest: * tosh_swapheaderrequest {'command': 0x00} +header PACKET tosh_enableswapdataresponse: * tosh_swapheaderresponse +header 1 UINT {'constant': 0x00} +cmd3 2 UINT {'constant': 0x00} +cmd4 PACKET tosh_disableswapdatarequest: * tosh_swapheaderrequest {'command': 0x01} +header PACKET tosh_disableswapdataresponse: * tosh_swapheaderresponse +header 1 UINT {'constant': 0x01} +cmd3 2 UINT {'constant': 0x00} +cmd4 # test packets, not used PACKET tosh_getunknownrecordrequest: * tosh_swapheaderrequest {'command': 0x02} +header 2 UINT data_type 2 UINT {'constant': 0x00} +pad 2 UINT {'constant': 0x00} +cmd 2 UINT data_index 2 UINT {'constant': 0x00} +pad PACKET tosh_getunknownrecordresponse: * tosh_swapheaderresponse +header * DATA +data # 4 UINT swap_ok # 0 is OK, all F's failed bitpim-1.0.7+dfsg1/src/phones/p_motov710.p0000644001616600161660000001071710762160702016335 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: $ %{ """Various descriptions of data specific to Motorola phones""" from prototypes import * from prototypes_moto import * from p_etsi import * from p_moto import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb PB_TOTAL_GROUP=30 PB_GROUP_RANGE=xrange(1, PB_TOTAL_GROUP+1) PB_GROUP_NAME_LEN=24 RT_BUILTIN=0x0C RT_CUSTOM=0x0D RT_INDEX_FILE='/MyToneDB.db' RT_PATH='motorola/shared/audio' WP_PATH='motorola/shared/picture' WP_EXCLUDED_FILES=frozenset([]) # Calendar const CAL_TOTAL_ENTRIES=500 CAL_MAX_ENTRY=499 CAL_TOTAL_ENTRY_EXCEPTIONS=8 CAL_TITLE_LEN=64 CAL_REP_NONE=0 CAL_REP_DAILY=1 CAL_REP_WEEKLY=2 CAL_REP_MONTHLY=3 CAL_REP_MONTHLY_NTH=4 CAL_REP_YEARLY=5 CAL_ALARM_NOTIME='00:00' CAL_ALARM_NODATE='00-00-2000' %} PACKET group_count_req: * CSVSTRING { 'quotechar': None, 'terminator': None, 'default': '+MPGR=?' } +command PACKET group_count_resp: * CSVSTRING { 'quotechar': None, 'terminator': ord(' '), 'default': '+MPGR:' } command * CSVSTRING { 'quotechar': None } countstring * DATA dontcare PACKET read_group_req: * CSVSTRING { 'quotechar': None, 'terminator': None, 'default': '+MPGR=' } +command * CSVINT { 'default': 1 } +start_index * CSVINT { 'terminator': None, 'default': PB_TOTAL_GROUP } +end_index PACKET read_group_resp: * CSVSTRING { 'quotechar': None, 'terminator': ord(' '), 'default': '+MPGR:' } command * CSVINT index * CSVSTRING name * CSVINT ringtone * DATA dunno PACKET del_group_req: * CSVSTRING { 'quotechar': None, 'terminator': None, 'default': '+MPGW=' } +command * CSVINT { 'terminator': None } index PACKET write_group_req: * CSVSTRING { 'quotechar': None, 'terminator': None, 'default': '+MPGW=' } +command * CSVINT index * CSVSTRING { 'maxsizeinbytes': PB_GROUP_NAME_LEN, 'raiseontruncate': False } name * CSVINT { 'terminator': None, 'default': 255 } +ringtone PACKET ringtone_index_entry: P BOOL { 'default': True } +read_mode if self.read_mode: 508 DATA { 'pad': None } name if not self.read_mode: 508 DATA name 1 UINT index 1 UINT ringtone_type 6 DATA { 'default': '' } +dunno PACKET ringtone_index_file: * LIST { 'elementclass': ringtone_index_entry, 'createdefault': True} +items # Calendar stuff PACKET calendar_lock_req: * CSVSTRING { 'quotechar': None, 'terminator': None, 'default': '+MDBL=' } +command * CSVINT { 'terminator': None } lock PACKET calendar_read_req: * CSVSTRING { 'quotechar': None, 'terminator': None, 'default': '+MDBR=' } +command * CSVINT { 'default': 0 } +start_index * CSVINT { 'terminator': None, 'default': CAL_MAX_ENTRY } +end_index PACKET calendar_req_resp: * CSVSTRING { 'quotechar': None, 'terminator': ord(' '), 'default': '+MDBR:' } command * CSVINT index if self.command=='+MDBR:': * CSVSTRING title * CSVINT alarm_timed * CSVINT alarm_enabled * CAL_TIME start_time * CAL_DATE start_date * CSVINT duration * CAL_TIME alarm_time * CAL_DATE alarm_date * CSVINT { 'terminator': None } repeat_type if self.command=='+MDBRE:': * CSVINT ex_event * CSVINT { 'terminator': None } ex_event_flag PACKET calendar_write_req: * CSVSTRING { 'quotechar': None, 'terminator': None, 'default': '+MDBW=' } +command * CSVINT index * CSVSTRING {'maxsizeinbytes': CAL_TITLE_LEN } title * CSVINT { 'default': 0 } +alarm_timed * CSVINT { 'default': 0 } +alarm_enabled * CAL_TIME start_time * CAL_DATE start_date * CSVINT duration * CAL_TIME alarm_time * CAL_DATE alarm_date * CSVINT { 'terminator': None, 'default': 0 } +repeat_type PACKET calendar_write_ex_req: * CSVSTRING { 'quotechar': None, 'terminator': None, 'default': '+MDBWE=' } +command * CSVINT index * CSVINT nth_event * CSVINT { 'terminator': None, 'default': 1 } +ex_event_flag bitpim-1.0.7+dfsg1/src/phones/p_motov3c.py0000644001616600161660000000051010555026112016506 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Motorola V3c phones""" from prototypes import * from prototypes_moto import * from p_etsi import * from p_moto import * from p_motov710 import * PB_TOTAL_ENTRIES=1000 PB_RANGE=xrange(1,PB_TOTAL_ENTRIES+1) bitpim-1.0.7+dfsg1/src/phones/p_samsungspha460.p0000644001616600161660000000371310521224555017522 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Stephen A. Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_samsungspha460.p 3633 2006-10-29 22:21:33Z sawecw $ %{ """Proposed descriptions of data usign AT commands""" from prototypes import * from p_samsung_packet import * # We use LSB for all integer like fields in diagnostic mode UINT=UINTlsb BOOL=BOOLlsb # NUMPHONEBOOKENTRIES=250 NUMPHONENUMBERS=6 NUMCALENDAREVENTS=70 MAXNUMBERLEN=32 NUMTODOENTRIES=20 NUMGROUPS=4 %} # Packets describe single line AT responses or commands with no carriage # returns or line feeds. PACKET pbentry: P USTRING {'default': ""} +url P CSVDATE {'default': ""} +birthday * CSVINT slot "Internal Slot" * CSVINT uslot "User Slot, Speed dial" * CSVINT group * CSVINT {'default': 20} +ringtone * CSVSTRING name * CSVINT speeddial "Which phone number assigned to speed dial uslot" * CSVINT {'default': 0} +dunno1 * LIST {'length': NUMPHONENUMBERS, 'createdefault': True, 'elementclass': phonenumber} +numbers * CSVSTRING {'quotechar': None, 'default': ""} +dunno3 * CSVSTRING {'quotechar': None, 'default': ""} +dunno4 * CSVSTRING email * CSVTIME {'terminator': None, 'default': (1980,1,1,12,0,0)} +timestamp "Use terminator None for last item" PACKET phonebookslotresponse: * CSVSTRING {'quotechar': None, 'terminator': ord(' '), 'constant': '#PBOKR:'} command * pbentry entry PACKET phonebookslotupdaterequest: * CSVSTRING {'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'} +command * pbentry entry PACKET groupnameresponse: * CSVSTRING {'quotechar': None, 'terminator': ord(' '), 'constant': '#PBGRR:'} command * groupnameentry entry PACKET groupnameentry: * CSVINT gid * CSVSTRING {'terminator': None} groupname PACKET unparsedresponse: * UNKNOWN pad bitpim-1.0.7+dfsg1/src/phones/p_motov3m.py0000644001616600161660000000217510735610475016544 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Motorola V3m phones""" from prototypes import * from prototypes_moto import * from p_etsi import * from p_moto import * from p_motov710 import * import fnmatch # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb PB_TOTAL_ENTRIES=1000 PB_RANGE=xrange(1,PB_TOTAL_ENTRIES+1) _WP_EXCLUSION=frozenset(['*.ran*', 'customer_opening.gif', 'customer_closing.gif']) _RT_EXCLUSION=frozenset(['*.mp_']) def valid_wp_filename(filename): global _WP_EXCLUSION for _name in _WP_EXCLUSION: if fnmatch.fnmatch(filename, _name): return False return True def valid_rt_filename(filename): global _RT_EXCLUSION for _name in _RT_EXCLUSION: if fnmatch.fnmatch(filename, _name): return False return True OBEX_Filename_Prefix='motorola/shared/' OBEX_Filename_Prefix_Len=len(OBEX_Filename_Prefix) def OBEXName(filename): if filename.startswith(OBEX_Filename_Prefix): return filename[OBEX_Filename_Prefix_Len:] raise ValueError bitpim-1.0.7+dfsg1/src/phones/com_lgvx11000.py0000644001616600161660000011266111326746361017024 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2009 Nathan Hjelm ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### """ Communicate with the LG VX11000 cell phone. """ # BitPim modules import common import com_brew import prototypes import com_lgvx9700 import p_lgvx11000 import helpids import sms import field_color import phonenumber import wx import database DEBUG1=False #------------------------------------------------------------------------------- parentphone=com_lgvx9700.Phone class Phone(parentphone): desc="LG-VX11000 (enV Touch)" helpid=helpids.ID_PHONE_LGVX11000 protocolclass=p_lgvx11000 serialsname='lgvx11000' my_model='VX11000' builtinringtones= ('Low Beep Once', 'Low Beeps', 'Loud Beep Once', 'Loud Beeps', 'Door Bell', 'VZW Default Tone', 'Basic Ring', 'Telephone Ring', 'Soft Ring', 'Simple Beep', 'Galaxy Beep', 'Bellution', 'Good Morning', 'Rodeo Clown', 'Voice Of The Nature', 'Latin Fever', 'Allure', 'Surf The Groove', 'Ride A Tiger', 'This Time', 'Deep Blue Calling', 'Fairy Palaces', 'Central Park', 'Balmy Climate', 'Spring Legend', 'East of Rain', 'No Ring',) ringtonelocations= ( # type index file default dir external dir max type index ('ringers', 'dload/myringtone.dat','brew/mod/10889/ringtones', '', 100, 0x01, 100), ( 'sounds', 'dload/mysound.dat', 'brew/mod/18067', '', 100, 0x02, None), ( 'sounds(sd)', 'dload/sd_sound.dat', 'mmc1/my_sounds', '', 100, 0x02, None), ( 'music', 'dload/efs_music.dat', 'my_music', '', 100, 0x104, None), ( 'music(sd)', 'dload/sd_music.dat', 'mmc1/my_music', '', 100, 0x14, None), ) #add picture ids to list of wallpapers, seems to be new for this phone wallpaperlocations= ( # type index file default dir external dir max type Index ( 'images', 'dload/image.dat', 'brew/mod/10888', '', 100, 0x00, 100), ( 'images(sd)', 'dload/sd_image.dat', 'mmc1/my_pix', '', 100, 0x10, None), ( 'video', 'dload/video.dat', 'brew/mod/10890', '', 100, 0x03, None), ( 'video(sd)', 'dload/sd_video.dat', 'mmc1/my_flix', '', 100, 0x13, None), ( 'picture ids','set_as_pic_id_dir/setas_pic_id.dat', 'set_as_pic_id_dir', '', 999, 0x00, None), ) def setDMversion(self): self._DMv5=False self._DMv6=True self._timeout=5 # Assume a quick timeout on newer phones def getphoneinfo(self, phone_info): self.log('Getting Phone Info') try: s=self.getfilecontents('brew/version.txt') if s[:7]==self.my_model: phone_info.append('Manufacturer:', Profile.phone_manufacturer) phone_info.append('Model:', self.my_model) phone_info.append('Name:', self.desc[12:21]) phone_info.append('ESN:', self.get_brew_esn()) phone_info.append('Firmware Version:', self.get_firmware_version()) #get the phone number from 'My Name Card' namecard=self.getfilecontents2('pim/pbmyentry.dat', 208, 10) phone_info.append('Phone Number:', phonenumber.format(namecard)) except Exception, e: pass return # Fundamentals: # - get_esn - same as LG VX-8300 # - getgroups - new implementation here due to group picture ids and no 'No Group' on this phone # - getwallpaperindices - LGUncountedIndexedMedia # - getringtoneindices - LGUncountedIndexedMedia # - DM Version - 6 # - phonebook - same as LG VX-8550, with some slight differences with picture ids, speed dials # - SMS - same dir structure as the VX-8800 def getgroups(self, results): "Read groups" # Reads groups that use explicit IDs self.log("Reading group information") g=self.readobject(self.protocolclass.pb_group_filename, self.protocolclass.pbgroups, 'Reading groups data') self.log("Reading Group Picture IDs") group_picid_pathf=self._get_group_path_index(self.protocolclass.GroupWPPathIndexFile) _groupwp_ids=self._build_media_dict(results, group_picid_pathf, 'wallpaper-index') groups={} for i in range(len(g.groups)): _group = g.groups[i] if _group.name: try: if _group.wallpaper == 0x64: #indexes between _groupwp_ids and g.groups correspond to each other #the group id does not match up to anything for group picture id purposes paper = _groupwp_ids.get(group_picid_pathf.items[i].pathname, None) else: paper = self.protocolclass.NOWALLPAPER if paper is None: raise groups[_group.groupid]= { 'name': _group.name, 'user_added': _group.user_added, 'wallpaper': paper } #groups can have wallpaper on this phone except: self.log("can't find wallpaper for group index: " + str(_group.groupid) + ": " + str(_group.name)) results['groups'] = groups return groups def savegroups(self, data): groups=data.get('groups', {}) keys=groups.keys() keys.sort() keys.reverse() g=self.protocolclass.pbgroups() wp_index=data.get('wallpaper-index', {}) group_picid_pathf=self.protocolclass.GroupPicID_PathIndexFile() #Don't write the no group entry, it doesn't exist on this phone! for i in keys: if not i: continue #already wrote this one out # now write the rest in reverse ID order group_entry = groups[i] new_entry = self.protocolclass.pbgroup(name=groups[i]['name'], groupid=i, user_added=groups[i].get('user_added', 1), wallpaper=0) for key in group_entry: if key == 'wallpaper': if group_entry['wallpaper']==self.protocolclass.NOWALLPAPER: new_entry.wallpaper = self._findmediainindex(data['wallpaper-index'], None, group_entry['name'], 'wallpaper') else: new_entry.wallpaper = self._findmediainindex(data['wallpaper-index'], group_entry['wallpaper'], group_entry['name'], 'wallpaper') try: _filename = wp_index[new_entry.wallpaper]['filename'] group_picid_pathf.items.append(self.protocolclass.GroupPicID_PathIndexEntry(pathname=_filename)) new_entry.wallpaper = 0x64 except: group_picid_pathf.items.append(self.protocolclass.GroupPicID_PathIndexEntry()) g.groups.append(new_entry) #write group picture ids self.log("Writing group picture ID") self.writeobject(self.protocolclass.GroupWPPathIndexFile, group_picid_pathf, logtitle='Writing group wallpaper paths', uselocalfs=DEBUG1) #write groups self.writeobject(self.protocolclass.pb_group_filename, g, logtitle='Writing phonebook groups', uselocalfs=DEBUG1) def _build_favorites_dict(self): if hasattr(self.protocolclass, 'favorites'): self.log("Reading favorites") # Return an favorites dict for building phone entries _res={} _favorites=self.readobject(self.protocolclass.favorites_file_name, self.protocolclass.favorites, logtitle='Reading favorites') for _idx,_entry in enumerate(_favorites.items): if _entry.has_pbentry (): _res[_entry.pb_index]=_idx return _res else: return None def _get_group_path_index(self, index_file): buf = prototypes.buffer(self.getfilecontents(index_file)) _path_file=self.protocolclass.GroupPicID_PathIndexFile(); _path_file.readfrombuffer(buf, logtitle="Read group wallpaper path index: " + index_file) return _path_file def getphonebook (self, result): """Reads the phonebook data. The L{getfundamentals} information will already be in result.""" # Read speed dials first -- same file format as the VX-8100 _speeds=self._get_speeddials() # Read the emergency contacts list self.log("Reading ICE entries") _ices=self._build_ice_dict() # Read favorites (if available) _favorites=self._build_favorites_dict () self.log("Reading phonebook entries") pb_entries=self.readobject(self.protocolclass.pb_file_name, self.protocolclass.pbfile, logtitle='Reading phonebook entries') self.log("Reading phone numbers") pb_numbers=self.readobject(self.protocolclass.pn_file_name, self.protocolclass.pnfile, logtitle='Reading phonebook numbers') #handle errors people are having when pa_file doesn't exist try: # check for addresses support if hasattr(self.protocolclass, 'pafile'): self.log("Reading addresses") pb_addresses = self.readobject(self.protocolclass.pa_file_name, self.protocolclass.pafile, logtitle='Reading addresses') else: pb_addresses = None except: pb_addresses = None self.log("Reading Ringtone IDs") ring_pathf=self._get_path_index(self.protocolclass.RTPathIndexFile) _rt_ids=self._build_media_dict(result, ring_pathf, 'ringtone-index') self.log("Reading Picture IDs") picid_pathf=self._get_path_index(self.protocolclass.WPPathIndexFile) _wp_ids=self._build_media_dict(result, picid_pathf, 'wallpaper-index') pbook={} for _cnt in range(self.protocolclass.NUMPHONEBOOKENTRIES): pb_entry=pb_entries.items[_cnt] if not pb_entry.valid(): continue try: self.log("Parse entry "+`_cnt`+" - " + pb_entry.name) pbook[_cnt]=self.extractphonebookentry(pb_entry, pb_numbers, pb_addresses, _speeds, _ices, _favorites, result, _rt_ids.get(ring_pathf.items[_cnt].pathname, None), _wp_ids.get(picid_pathf.items[_cnt].pathname, None)) self.progress(_cnt, self.protocolclass.NUMPHONEBOOKENTRIES, pb_entry.name) except common.PhoneBookBusyException: raise except Exception, e: # Something's wrong with this entry, log it and skip self.log('Failed to parse entry %d'%_cnt) self.log('Exception %s raised'%`e`) if __debug__: raise self.progress(self.protocolclass.NUMPHONEBOOKENTRIES, self.protocolclass.NUMPHONEBOOKENTRIES, "Phone book read completed") result['phonebook']=pbook #add a simple list of categories to result dict cats=[] for i in result['groups']: if result['groups'][i]['name']!='No Group': cats.append(result['groups'][i]['name']) result['categories']=cats #add a simple list of categories with their wallpapers to result dict group_wps=[] for i in result['groups']: groupinfo=result['groups'][i] name=str(groupinfo.get('name')) wp_name=str(groupinfo.get('wallpaper')) group_wps.append(name+":"+wp_name) result['group_wallpapers']=group_wps return pbook def extractphonebookentry(self, entry, numbers, addresses, speeds, ices, favorites, fundamentals, rt_name, wp_name): """Return a phonebook entry in BitPim format. This is called from getphonebook.""" res={} # serials res['serials']=[ {'sourcetype': self.serialsname, 'sourceuniqueid': fundamentals['uniqueserial'], 'serial1': entry.entry_number1, 'serial2': entry.entry_number1 } ] # only one name res['names']=[ {'full': entry.name} ] # only one category cat=fundamentals['groups'].get(entry.group, {'name': "No Group"})['name'] if cat!="No Group": res['categories']=[ {'category': cat} ] # emails res['emails']=[] for i in entry.emails: if len(i.email): res['emails'].append( {'email': i.email} ) if not len(res['emails']): del res['emails'] # it was empty # wallpapers if entry.wallpaper!=self.protocolclass.NOWALLPAPER: try: if entry.wallpaper == 0x64: paper = wp_name else: paper = fundamentals['wallpaper-index'][entry.wallpaper]['name'] if paper is None: raise res['wallpapers']=[ {'wallpaper': paper, 'use': 'call'} ] except: self.log("can't find wallpaper for index: " + str(entry.wallpaper)) # ringtones if entry.ringtone != self.protocolclass.NORINGTONE: try: if entry.ringtone == 0x64: tone = rt_name else: tone = fundamentals['ringtone-index'][entry.ringtone]['name'] if tone is None: raise res['ringtones']=[ {'ringtone': tone, 'use': 'call'} ] except: self.log("can't find ringtone for index: " + str(entry.ringtone)) if addresses is not None and entry.addressindex != 0xffff: for _address in addresses.items: if _address.valid() and _address.index == entry.addressindex: res['addresses'] = [ { 'street': _address.street, 'city': _address.city, 'state': _address.state, 'postalcode': _address.zip_code, 'country': _address.country }] break # assume we are like the VX-8100 in this regard -- looks correct res=self._assignpbtypeandspeeddialsbytype(entry, numbers, speeds, res) # assign the ICE entry to the associated contact to keep them in sync res=self._assigniceentry(entry, numbers, ices, res) # adding the favorite entry res=self._assignfavoriteentry(entry, favorites, res) return res def _assignfavoriteentry(self, entry, favorites, res): if favorites.has_key(entry.entry_number0): # this contact entry is an favorite entry res['favorite']=[ { 'favoriteindex': favorites[entry.entry_number0] } ] return res def savephonebook (self, data): "Saves out the phonebook" #take the simple list of categories with their wallpapers and add it to result dict new_group_dict={} group_wps=data.get('group_wallpapers', {}) for i in range(len(group_wps)): groupwp_entry=group_wps[i] entry_list=groupwp_entry.split(":", 1) #split on colon a maximum of once name=entry_list[0] wp=entry_list[1] for key in data['groups']: group_entry=data['groups'][key] if name==group_entry.get('name'): group_entry['wallpaper']=wp new_group_dict[key]=group_entry data['groups']=new_group_dict self.savegroups (data) ring_pathf=self.protocolclass.PathIndexFile() picid_pathf=self.protocolclass.PathIndexFile() # the pbentry.dat will be overwritten so there is no need to delete entries pbook = data.get('phonebook', {}) keys = pbook.keys () keys.sort () _rt_index=data.get('ringtone-index', {}) _wp_index=data.get('wallpaper-index', {}) entry_num0 = 0 entry_num1 = self._get_next_pb_id() pb_entries = self.protocolclass.pbfile(model_name=self.my_model) pn_entries = self.protocolclass.pnfile() # some phones store addresses as well if hasattr(self.protocolclass, 'pafile'): pa_entries = self.protocolclass.pafile() else: pa_entries = None ice_entries = self.protocolclass.iceentryfile() for i in range(self.protocolclass.NUMEMERGENCYCONTACTS): ice_entries.items.append (self.protocolclass.iceentry()) speeddials={} # favorites can be groups or contacts. read favorites to preserve group favorites if hasattr (self.protocolclass, 'favorites'): favorites = self.readobject(self.protocolclass.favorites_file_name, self.protocolclass.favorites, logtitle='Reading favorites') for _entry in favorites.items: # all phonebook favorite will be invalid after writing the phonebook # (except for entries we set) so delete all phonebook favorites if _entry.fav_type == 1: _entry.fav_type = 0xff _entry.pb_index = 0xffff else: favorites = None for i in keys: pb_entries.items.append(self.make_entry (pn_entries, pa_entries, favorites, speeddials, ice_entries, entry_num0, entry_num1, pbook[i], data, ring_pathf,_rt_index, picid_pathf, _wp_index)) entry_num0 += 1 if entry_num0 >= self.protocolclass.NUMPHONEBOOKENTRIES: self.log ("Maximum number of phonebook entries reached") break if entry_num1==0xffffffff: entry_num1=0 else: entry_num1+=1 # write phonebook entries self.log ("Writing phonebook entries") self.writeobject(self.protocolclass.pb_file_name, pb_entries, logtitle='Writing phonebook entries', uselocalfs=DEBUG1) # write phone numbers self.log ("Writing phone numbers") self.writeobject(self.protocolclass.pn_file_name, pn_entries, logtitle='Writing phonebook numbers', uselocalfs=DEBUG1) if pa_entries is not None: # write addresses self.log ("Writing addresses") self.writeobject(self.protocolclass.pa_file_name, pa_entries, logtitle="Writing addresses", uselocalfs=DEBUG1) # write ringtone index self.log('Writing ringtone ID') self.writeobject(self.protocolclass.RTPathIndexFile, ring_pathf, logtitle='Writing ringtone paths', uselocalfs=DEBUG1) # write wallpaper index self.log('Writing picture ID') self.writeobject(self.protocolclass.WPPathIndexFile, picid_pathf, logtitle='Writing wallpaper paths', uselocalfs=DEBUG1) # write ICE index self.log('Writing ICE entries') self.writeobject(self.protocolclass.ice_file_name, ice_entries, logtitle='Writing ICE entries', uselocalfs=DEBUG1) # update speed dials req=self.protocolclass.speeddials() # slot 0 is always unused req.speeddials.append(self.protocolclass.speeddial()) # if empty, slot 1 is for voicemail if speeddials.has_key(1): answer = wx.MessageBox("You have assigned speed dial #1 in your PhoneBook.\nAre you sure you want to overwrite the 'Voicemail' speed dial?", "Caution overwriting speed dial", wx.YES_NO|wx.ICON_EXCLAMATION|wx.STAY_ON_TOP) if answer == wx.YES: req.speeddials.append(self.protocolclass.speeddial(entry=speeddials[1]['entry'],number=speeddials[1]['type'])) else: req.speeddials.append(self.protocolclass.speeddial(entry=1000,number=6)) else: req.speeddials.append(self.protocolclass.speeddial(entry=1000,number=6)) for i in range(2, self.protocolclass.NUMSPEEDDIALS): sd=self.protocolclass.speeddial() if speeddials.has_key(i): if i==411: answer = wx.MessageBox("You have assigned speed dial #411 in your PhoneBook.\nAre you sure you want to overwrite the 'Directory Assistance' speed dial?", "Caution overwriting speed dial", wx.YES_NO|wx.ICON_EXCLAMATION|wx.STAY_ON_TOP) if answer == wx.YES: sd.entry=speeddials[i]['entry'] sd.number=speeddials[i]['type'] else: req.speeddials.append(sd) continue #they dont want to assign 411 so skip to next iteration sd.entry=speeddials[i]['entry'] sd.number=speeddials[i]['type'] req.speeddials.append(sd) self.log('Writing speed dials') self.writeobject(self.protocolclass.speed_file_name, req, logtitle='Writing speed dials data', uselocalfs=DEBUG1) if favorites is not None: self.log('Writing favorites') self.writeobject(self.protocolclass.favorites_file_name, favorites, logtitle='Writing favorites', uselocalfs=DEBUG1) # update the next pbentries ID self._save_next_pb_id(entry_num1) data["rebootphone"]=True return data def make_pa_entry (self, pb_entry, address_index, address): new_entry = self.protocolclass.pafileentry(entry_tag=self.protocolclass.PA_ENTRY_SOR) new_entry.index = address_index new_entry.pb_entry = pb_entry new_entry.street = address['street'] new_entry.city = address['city'] new_entry.state = address['state'] new_entry.zip_code = address['postalcode'] new_entry.country = address['country'] return new_entry def make_entry (self, pn_entries, pa_entries, favorites, speeddials, ice_entries, entry_num0, entry_num1, pb_entry, data, ring_pathf, rt_index, picid_pathf, wp_index): """ Create a pbfileentry from a bitpim phonebook entry """ new_entry = self.protocolclass.pbfileentry(entry_tag=self.protocolclass.PB_ENTRY_SOR) # entry IDs new_entry.entry_number0 = entry_num0 new_entry.entry_number1 = entry_num1 for key in pb_entry: if key in ('emails', 'numbertypes'): l = getattr (new_entry, key) for item in pb_entry[key]: l.append(item) elif key == 'numbers': l = getattr (new_entry, 'numberindices') for i in range(0, self.protocolclass.NUMPHONENUMBERS): new_pn_id = len (pn_entries.items) if new_pn_id == self.protocolclass.NUMPHONENUMBERENTRIES: # this state should not be possible. should this raise an exception? self.log ("Maximum number of phone numbers reached") break try: pn_entries.items.append(self.make_pn_entry (pb_entry[key][i],pb_entry['numbertypes'][i], new_pn_id, i, entry_num0)) l.append (new_pn_id) except: l.append (0xffff) elif key == 'speeddials': for _sd,_num_type in zip(pb_entry['speeddials'], pb_entry['numbertypes']): if _sd is not None: speeddials[_sd]={ 'entry': entry_num0, 'type': _num_type } elif key == 'ice': # In Case of Emergency _ice = pb_entry['ice'] if _ice is not None and len(_ice) > 0: _ice_entry = _ice[0]['iceindex'] ice_entries.items[_ice_entry] = self.make_ice_entry (_ice_entry, entry_num0) elif key == 'favorite': _favorite = pb_entry['favorite'] if favorites is not None and _favorite is not None and len(_favorite) > 0: favorites.items[_favorite[0]['favoriteindex']].fav_type = 1 # phone number favorites.items[_favorite[0]['favoriteindex']].pb_index = entry_num0 # phone number elif key == 'addresses': _addresses = pb_entry['addresses'] address_id = len (pa_entries.items) if pa_entries is not None and _addresses is not None and len(_addresses) > 0: new_entry.addressindex = address_id pa_entries.items.append(self.make_pa_entry (entry_num0, address_id, _addresses[0])) elif key == 'ringtone': new_entry.ringtone = self._findmediainindex(data['ringtone-index'], pb_entry['ringtone'], pb_entry['name'], 'ringtone') try: _filename = rt_index[new_entry.ringtone]['filename'] ring_pathf.items.append(self.protocolclass.PathIndexEntry(pathname=_filename)) new_entry.ringtone = 0x64 except: ring_pathf.items.append(self.protocolclass.PathIndexEntry()) elif key == 'wallpaper': new_entry.wallpaper = self._findmediainindex(data['wallpaper-index'], pb_entry['wallpaper'], pb_entry['name'], 'wallpaper') try: _filename = wp_index[new_entry.wallpaper]['filename'] picid_pathf.items.append(self.protocolclass.PathIndexEntry(pathname=_filename)) new_entry.wallpaper = 0x64 except: picid_pathf.items.append(self.protocolclass.PathIndexEntry()) elif key in new_entry.getfields(): setattr (new_entry, key, pb_entry[key]) return new_entry #------------------------------------------------------------------------------- parentprofile=com_lgvx9700.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='VX11000' # inside screen resolution WALLPAPER_WIDTH = 800 WALLPAPER_HEIGHT = 480 ringtoneorigins=('ringers', 'sounds', 'sounds(sd)',' music', 'music(sd)') excluded_ringtone_origins=('music', 'music(sd)') # wallpaper origins that are not available for the contact assignment excluded_wallpaper_origins=('video','video(sd)') imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images(sd)")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video(sd)")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "picture ids")) # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", {'width': 480, 'height': 800, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 800, 'height': 480, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 320, 'height': 240, 'format': "JPEG"})) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading ('memo', 'read', None), # all memo list reading ## ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('sms', 'write', 'OVERWRITE'), # all SMS list writing ('memo', 'write', 'OVERWRITE'), # all memo list writing ## ('playlist', 'read', 'OVERWRITE'), ## ('playlist', 'write', 'OVERWRITE'), ## ('t9_udb', 'write', 'OVERWRITE'), ) if __debug__: _supportedsyncs+=( ('t9_udb', 'read', 'OVERWRITE'), ('t9_udb', 'write', 'OVERWRITE'), ('playlist', 'read', None), ('playlist', 'write', 'OVERWRITE'), ('playlist', 'write', 'MERGE'), ) field_color_data={ 'phonebook': { 'name': { 'first': False, 'middle': False, 'last': False, 'full': 1, 'nickname': False, 'details': 1 }, 'number': { 'type': 5, 'speeddial': 5, 'number': 5, 'ringtone': False, 'wallpaper': False, 'details': 5 }, 'email': 2, 'email_details': { 'emailspeeddial': False, 'emailringtone': False, 'emailwallpaper': False }, 'address': { 'type': False, 'company': False, 'street': 1, 'street2': False, 'city': 1, 'state': 1, 'postalcode': 1, 'country': 1, 'details': 1 }, 'url': 0, 'memo': 0, 'category': 1, 'wallpaper': 1, 'group_wallpaper': 1, #'wallpaper_type': False, 'ringtone': 1, 'storage': False, 'secret': False, 'ICE': 1, 'Favorite': 1, }, 'calendar': { 'description': True, 'location': False, 'allday': False, 'start': True, 'end': True, 'priority': False, 'alarm': True, 'vibrate': True, 'repeat': True, 'memo': False, 'category': False, 'wallpaper': False, 'ringtone': True, }, 'memo': { 'subject': False, 'date': True, 'secret': False, 'category': False, 'memo': True, }, 'todo': { 'summary': False, 'status': False, 'due_date': False, 'percent_complete': False, 'completion_date': False, 'private': False, 'priority': False, 'category': False, 'memo': False, }, } def convertphonebooktophone(self, helper, data): """Converts the data to what will be used by the phone @param data: contains the dict returned by getfundamentals as well as where the results go""" results={} self.normalisegroups(helper, data) for pbentry in data['phonebook']: if len(results)==self.protocolclass.NUMPHONEBOOKENTRIES: break e={} # entry out entry=data['phonebook'][pbentry] # entry in try: # serials serial1=helper.getserial(entry.get('serials', []), self.serialsname, data['uniqueserial'], 'serial1', 0) serial2=helper.getserial(entry.get('serials', []), self.serialsname, data['uniqueserial'], 'serial2', serial1) e['serial1']=serial1 e['serial2']=serial2 for ss in entry["serials"]: if ss["sourcetype"]=="bitpim": e['bitpimserial']=ss assert e['bitpimserial'] # name e['name']=helper.getfullname(entry.get('names', []),1,1,32)[0] # ice e['ice']=entry.get('ice', None) # favorites e['favorite']=entry.get('favorite', None) # address e['addresses']=entry.get('addresses', None) # categories/groups cat=helper.makeone(helper.getcategory(entry.get('categories', []),0,1,32), None) if cat is None: e['group']=0 else: key,value=self._getgroup(cat, data['groups']) if key is not None: e['group']=key else: # sorry no space for this category e['group']=0 # email addresses emails=helper.getemails(entry.get('emails', []) ,0,self.protocolclass.NUMEMAILS,48) e['emails']=helper.filllist(emails, self.protocolclass.NUMEMAILS, "") # phone numbers # there must be at least one email address or phonenumber minnumbers=1 if len(emails): minnumbers=0 numbers=helper.getnumbers(entry.get('numbers', []),minnumbers,self.protocolclass.NUMPHONENUMBERS) e['numbertypes']=[] e['numbers']=[] e['speeddials']=[] for numindex in range(len(numbers)): num=numbers[numindex] # deal with type b4=len(e['numbertypes']) type=num['type'] for i,t in enumerate(self.protocolclass.numbertypetab): if type==t: # some voodoo to ensure the second home becomes home2 if i in e['numbertypes'] and t[-1]!='2': type+='2' continue e['numbertypes'].append(i) break if t=='none': # conveniently last entry e['numbertypes'].append(i) break if len(e['numbertypes'])==b4: # we couldn't find a type for the number helper.add_error_message('Number %s (%s/%s) not supported and ignored.'% (num['number'], e['name'], num['type'])) continue # deal with number number=self.phonize(num['number']) if len(number)==0: # no actual digits in the number continue if len(number) > 48: # get this number from somewhere sensible # ::TODO:: number is too long and we have to either truncate it or ignore it? number=number[:48] # truncate for moment e['numbers'].append(number) # deal with speed dial sd=num.get("speeddial", None) if sd is not None and \ sd>=self.protocolclass.FIRSTSPEEDDIAL and \ sd<=self.protocolclass.LASTSPEEDDIAL: e['speeddials'].append(sd) else: e['speeddials'].append(None) if len(e['numbers']) ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_samsungspha620.p 3352 2006-06-10 15:20:39Z skyjunky $ %{ """Proposed descriptions of data usign AT commands""" from prototypes import * from p_samsung_packet import * # We use LSB for all integer like fields in diagnostic mode UINT=UINTlsb BOOL=BOOLlsb # NUMPHONEBOOKENTRIES=300 NUMEMAILS=3 NUMPHONENUMBERS=6 MAXNUMBERLEN=32 NUMTODOENTRIES=9 NUMSMSENTRIES=94 NUMGROUPS=4 AMSREGISTRY="ams/AmsRegistry" ENDTRANSACTION="ams/EndTransaction" RINGERPREFIX="ams/Ringers/cnts" WALLPAPERPREFIX="ams/Screen Savers/cnts" %} # Packets describe single line AT responses or commands with no carriage # returns or line feeds. PACKET pbentry: * CSVINT slot "Internal Slot" * CSVINT uslot "User Slot, Speed dial" * CSVINT group * CSVINT {'default': 20} +ringtone * CSVSTRING name * CSVINT speeddial "Which phone number assigned to speed dial uslot" * CSVINT {'default': 0} +dunno1 * LIST {'length': NUMPHONENUMBERS, 'createdefault': True, 'elementclass': phonenumber} +numbers * CSVSTRING {'quotechar': None, 'default': ""} +dunno3 * CSVSTRING {'quotechar': None, 'default': ""} +dunno4 * CSVSTRING email * CSVSTRING url * CSVDATE {'default': ""} +birthday * CSVINT {'default': 20} +wallpaper * CSVTIME {'terminator': None, 'default': (1980,1,1,12,0,0)} +timestamp "Use terminator None for last item" PACKET phonebookslotresponse: * CSVSTRING {'quotechar': None, 'terminator': ord(' '), 'constant': '#PBOKR:'} command * pbentry entry PACKET phonebookslotupdaterequest: * CSVSTRING {'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'} +command * pbentry entry PACKET groupnameresponse: * CSVSTRING {'quotechar': None, 'terminator': ord(' '), 'constant': '#PBGRR:'} command * groupnameentry entry PACKET groupnameentry: * CSVINT gid * CSVSTRING groupname * CSVINT ringtone "Ringtone assignment?" * CSVSTRING {'quotechar': None} dunno2 "A single character C or S" * CSVTIME {'terminator': None} timestamp PACKET unparsedresponse: * UNKNOWN pad PACKET filepbentry: 1 UINT dunno1 1 UINT dunno2 1 UINT dunno3 1 UINT dunno4 1 UINT dunno5 1 UINT dunno6 1 UINT dunno7 1 UINT dunno8 1 UINT dunno9 2 UINT slot 1 UINT dunno10 1 UINT dunno11 1 UINT dunno12 1 UINT dunno13 1 UINT dunno14 1 UINT dunno15 1 UINT dunno16 1 UINT dunno17 1 UINT dunno18 1 UINT dunno19 1 UINT dunno20 1 UINT dunno21 1 UINT name_len 21 USTRING {'raiseonunterminatedread': False } name 11 USTRING birthday 1 UINT group_num PACKET pbbook: * pbentry dummy * LIST { 'length': 300, 'elementclass': filepbentry } +entry PACKET image: 1 UINT inuse 1 UINT pic_type "1: Man, 2: Animals, 3: Other, 4: Downloads, 5: Pic Wallet" 1 UINT pic_id # Picture downloads in /ams/Pictures # Screensaver downloads in /ams/Screen Savers PACKET avatars: * image dummy * LIST {'length': NUMPHONEBOOKENTRIES, 'elementclass': image} +entry PACKET ringer: 1 UINT inuse 1 UINT ring_type "0: Default: 1: Ringtones, 2: Melodies, 3: Downloads, 4: Single Tone" 1 UINT ring_id "0x45 Tone 1, 0x4a = Tone 6, 0x51=Ringtone 1, 5b=Fur Elise" # 0x45-0x4c Tone 1-9 # 0x51-0x5a Ringtone 1-10 # 0x5b-0x64 Fuer Elise - Boardwalk # PACKET amsregistry: * LIST {'length': 150} items: 4 UINT zeros 2 UINT sixtyfour * LIST {'length': 320} info: 2 UINT dir_ptr 2 UINT num2 2 UINT name_ptr 2 UINT version_ptr 2 UINT vendor_ptr 2 UINT downloaddomain_ptr 2 UINT num7 2 UINT num8 4 UINT num9 2 UINT filetype "12: Ringer, 13 Screen Saver, 15 Apps" 2 UINT mimetype_ptr 2 UINT num12 2 UINT num13 2 UINT num14 2 UINT num15 2 UINT num16 2 UINT num17 * LIST {'length': 100} info2: 2 UINT val1 2 UINT val2 2 UINT val3 2 UINT val4 2 UINT val5 2 UINT val6 2 UINT val7 2 UINT val8 2 UINT val9 2 UINT val10 23000 DATA strings 2 UINT num1 2 UINT num2 2 UINT nfiles 2 UINT num4 bitpim-1.0.7+dfsg1/src/phones/p_samsungspha640.p0000644001616600161660000000360211012454574017521 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Stephen A. Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_samsungspha620.p 3352 2006-06-10 15:20:39Z skyjunky $ %{ """Proposed descriptions of data usign AT commands""" from prototypes import * from p_samsung_packet import * from p_samsungspha620 import * # We use LSB for all integer like fields in diagnostic mode UINT=UINTlsb BOOL=BOOLlsb # NUMPHONEBOOKENTRIES=300 NUMEMAILS=3 NUMPHONENUMBERS=6 MAXNUMBERLEN=72 NUMTODOENTRIES=9 NUMSMSENTRIES=94 NUMCALENDAREVENTS=70 NUMGROUPS=4 AMSREGISTRY="ams/AmsRegistry" ENDTRANSACTION="ams/EndTransaction" RINGERPREFIX="ams/Ringers/cnts" WALLPAPERPREFIX="ams/Screen Savers/cnts" %} # Packets describe single line AT responses or commands with no carriage # returns or line feeds. PACKET pbentry: P USTRING {'default': ""} +url P CSVDATE {'default': ""} +birthday * CSVINT slot "Internal Slot" * CSVINT uslot "User Slot, Speed dial" * CSVINT group * CSVINT {'default': 20} +ringtone * CSVSTRING name * CSVINT speeddial "Which phone number assigned to speed dial uslot" * CSVINT {'default': 0} +dunno1 * LIST {'length': NUMPHONENUMBERS, 'createdefault': True, 'elementclass': phonenumber} +numbers * CSVSTRING {'quotechar': None, 'default': ""} +dunno3 * CSVSTRING {'quotechar': None, 'default': ""} +dunno4 * CSVSTRING email * CSVTIME {'terminator': None, 'default': (1980,1,1,12,0,0)} +timestamp "Use terminator None for last item" PACKET phonebookslotresponse: * CSVSTRING {'quotechar': None, 'terminator': ord(' '), 'constant': '#PBOKR:'} command * pbentry entry PACKET phonebookslotupdaterequest: * CSVSTRING {'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'} +command * pbentry entry bitpim-1.0.7+dfsg1/src/phones/p_samsungspha660.p0000644001616600161660000000125310370305764017525 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Stephen A. Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_samsungspha660.p 2790 2006-02-02 04:35:00Z sawecw $ %{ """Proposed descriptions of data usign AT commands""" from prototypes import * from p_samsung_packet import * from p_samsungspha620 import * # We use LSB for all integer like fields in diagnostic mode UINT=UINTlsb BOOL=BOOLlsb # NUMPHONEBOOKENTRIES=300 NUMEMAILS=3 NUMPHONENUMBERS=6 MAXNUMBERLEN=32 NUMTODOENTRIES=9 NUMSMSENTRIES=94 NUMGROUPS=4 AMSREGISTRY="ams/AmsRegistry" %} bitpim-1.0.7+dfsg1/src/phones/p_samsungspha680.p0000644001616600161660000000123610454042735017527 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Stephen A. Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id$ %{ """Proposed descriptions of data usign AT commands""" from prototypes import * from p_samsung_packet import * from p_samsungspha620 import * # We use LSB for all integer like fields in diagnostic mode UINT=UINTlsb BOOL=BOOLlsb # NUMPHONEBOOKENTRIES=300 NUMEMAILS=3 NUMPHONENUMBERS=6 MAXNUMBERLEN=32 NUMTODOENTRIES=9 NUMSMSENTRIES=94 NUMGROUPS=4 AMSREGISTRY="ams/AmsRegistry" DEFAULT_RINGTONE=0 DEFAULT_WALLPAPER=0 %} bitpim-1.0.7+dfsg1/src/phones/p_samsungspha740.p0000644001616600161660000000132410373545661017530 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Stephen A. Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_samsungspha740.p 2801 2006-02-12 05:46:25Z sawecw $ %{ """Proposed descriptions of data usign AT commands""" from prototypes import * from p_samsung_packet import * from p_samsungspha620 import * # We use LSB for all integer like fields in diagnostic mode UINT=UINTlsb BOOL=BOOLlsb # NUMPHONEBOOKENTRIES=300 NUMEMAILS=3 NUMPHONENUMBERS=6 MAXNUMBERLEN=32 NUMTODOENTRIES=9 NUMSMSENTRIES=94 NUMGROUPS=4 AMSREGISTRY="ams/AmsRegistry" DEFAULT_RINGTONE=0 DEFAULT_WALLPAPER=0 %} bitpim-1.0.7+dfsg1/src/phones/p_samsungspha790.p0000644001616600161660000000405610454042735017534 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: $ %{ from prototypes import * from p_samsung_packet import * # We use LSB for all integer like fields in diagnostic mode UINT=UINTlsb BOOL=BOOLlsb # # Phonebook constants NUMPHONEBOOKENTRIES=500 NUMEMAILS=1 NUMPHONENUMBERS=5 MAXNUMBERLEN=32 NUMGROUPS=7 MAXNAMELEN=32 NUMSPEEDDIALS=100 # Wallpaper WP_CAMERA_PATH='digital_cam/jpeg' NUMTODOENTRIES=9 %} PACKET pbentry: * CSVINT slot "Internal Slot" * CSVINT uslot "User Slot, Speed dial" * CSVSTRING name * CSVINT wallpaper * CSVINT primary # Which one is the primary one? * LIST {'length': NUMPHONENUMBERS, 'createdefault': True, 'elementclass': phonenumber} numbers * CSVSTRING email * CSVSTRING url * CSVSTRING nick * CSVSTRING memo * CSVINT group * CSVINT ringtone * CSVTIME {'terminator': None } timestamp PACKET phonebookslotresponse: * CSVSTRING {'quotechar': None, 'terminator': ord(' '), 'constant': '#PBOKR:'} command * pbentry entry PACKET speeddial_entry: 1 UINT on_flg1 1 UINT on_flg2 2 UINT uslot 1 UINT which PACKET speeddial_file: * LIST { 'elementclass': speeddial_entry } items PACKET groupnameresponse: * CSVSTRING {'quotechar': None, 'terminator': ord(' '), 'constant': '#PBGRR:'} command * groupnameentry entry PACKET groupnameentry: * CSVINT gid * CSVSTRING groupname * CSVINT ringtone "Ringtone assignment?" * CSVSTRING {'quotechar': None} dunno2 "A single character C or S" * CSVTIME {'terminator': None} timestamp PACKET groupnamesetrequest: * CSVSTRING {'quotechar': None, 'terminator': None, 'default': '#PBGRW='} +command * CSVINT gid "Group #" * CSVSTRING groupname * CSVINT { 'default': 0 } +ringtone # Default Tone for now * CSVTIME {'terminator': None, 'default': (1980,1,1,12,0,0) } +timestamp bitpim-1.0.7+dfsg1/src/phones/p_samsungspha840.p0000644001616600161660000000132410373545570017530 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Stephen A. Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_samsungspha840.p 2800 2006-02-12 05:45:28Z sawecw $ %{ """Proposed descriptions of data usign AT commands""" from prototypes import * from p_samsung_packet import * from p_samsungspha620 import * # We use LSB for all integer like fields in diagnostic mode UINT=UINTlsb BOOL=BOOLlsb # NUMPHONEBOOKENTRIES=300 NUMEMAILS=3 NUMPHONENUMBERS=6 MAXNUMBERLEN=32 NUMTODOENTRIES=9 NUMSMSENTRIES=94 NUMGROUPS=4 AMSREGISTRY="ams/AmsRegistry" DEFAULT_RINGTONE=0 DEFAULT_WALLPAPER=0 %} bitpim-1.0.7+dfsg1/src/phones/p_samsungspha900.p0000644001616600161660000000673011017154737017530 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Stephen A. Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_samsungspha900.p 2801 2006-02-12 05:46:25Z sawecw $ %{ """Proposed descriptions of data usign AT commands""" from prototypes import * # We use LSB for all integer like fields in diagnostic mode UINT=UINTlsb BOOL=BOOLlsb # NUMPHONEBOOKENTRIES=500 NUMEMAILS=3 NUMPHONENUMBERS=5 MAXNUMBERLEN=32 NUMTODOENTRIES=9 NUMSMSENTRIES=94 MAXMEMOLEN=72 NUMGROUPS=4 AMSREGISTRY="ams/AmsRegistry" DEFAULT_RINGTONE=0 DEFAULT_WALLPAPER=0 %} PACKET firmwarerequest: 1 UINT {'constant': 0x00} +command PACKET firmwareresponse: 1 UINT command * UNKNOWN unknown PACKET numberheader: 1 UINT {'default': 0x26} +head1 1 UINT {'constant': 0x39} +head2 1 UINT {'constant': 0x0} +head3 PACKET nameheader: 1 UINT {'default': 0xd3} +head1 1 UINT {'constant': 0x59} +head2 1 UINT {'constant': 0x0e} +head3 PACKET numberrequest: * numberheader +header 2 UINT slot 128 UNKNOWN +pad PACKET numberresponse: * numberheader header 2 UINT slot * numberentry entry * UNKNOWN pad PACKET numberentry: 1 UNKNOWN +pad1 1 UINT pos 1 UINT numbertype 2 UNKNOWN +pad2 1 UINT numlen 48 USTRING {'raiseonunterminatedread': False} num PACKET numberupdaterequest: * numberheader {'head1': 0x27} +header 2 UINT slot * numberentry +entry PACKET namerequest: * nameheader +header 2 UINT slot 140 UNKNOWN +pad PACKET nameresponse: * nameheader header 2 UINT slot * nameentry entry * UNKNOWN pad PACKET nameentry: 2 UINT bitmask 2 UNKNOWN +p2 * LIST {'length': NUMPHONENUMBERS} +numberps: 2 UINT {'default': 0} slot 2 UINT {'default': 0} +emailp 2 UINT {'default': 0} +urlp 2 UNKNOWN +p3 1 UINT name_len 2 UNKNOWN +pad1 20 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False} name 1 UNKNOWN +pad2 20 USTRING {'raiseonunterminatedread': False, 'default': ""} +nickname 1 UNKNOWN +pad3 72 USTRING {'raiseonunterminatedread': False, 'default': "", 'raiseontruncate': False} +memo PACKET nameupdaterequest: * nameheader {'head1': 0xd4} +header 2 UINT slot * nameentry +entry 3 UNKNOWN +pad PACKET beginendupdaterequest: 1 UINT {'constant': 0x29} +command 2 UINT beginend PACKET beginendupdateresponse: 1 UINT command 2 UINT beginend PACKET statusrequest: 1 UINT {'constant': 0x0c} +command PACKET statusresponse: P UINT {'constant': 0x0} readyvalue 1 UINT command 3 UNKNOWN dunno1 4 UINT esn 1 UINT flag0 14 UNKNOWN dunno2 1 UINT ready 1 UINT dunno3 1 UINT flag2 6 UNKNOWN dunno4 1 UINT flag3 * UNKNOWN unknown PACKET writeenable: 1 UINT {'constant': 0x46} +c1 1 UINT {'constant': 0x01} +c2 1 UINT {'constant': 0xf2} +c3 1 UINT {'constant': 0x03} +c4 1 UINT {'constant': 0x0f} +c5 1 UINT {'constant': 0x5f} +c6 1 UINT {'constant': 0x67} +c7 1 UINT {'constant': 0x8f} +c8 1 UINT {'constant': 0xf9} +c9 1 UINT {'constant': 0xa2} +c10 1 UINT {'constant': 0x3f} +c11 1 UINT {'constant': 0x7d} +c12 1 UINT {'constant': 0x5e} +c13 1 UINT {'constant': 0x35} +c14 1 UINT {'constant': 0x5c} +c15 1 UINT {'constant': 0x7e} +c16 PACKET writeenableresponse: * UNKNOWN unknown bitpim-1.0.7+dfsg1/src/phones/p_lgvx9600.py0000644001616600161660000006254011235353414016432 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VX9700""" # groups - same as VX-8700 # phonebook - LG Phonebook v1.0 (same as VX-8550) # schedule - same as VX-8550 # sms - same as VX-9700 # memos - same as VX-8550 # call history - same as VX-9700 from p_lgvx9700 import * # SMS index files inbox_index = "dload/inbox.dat" outbox_index = "dload/outbox.dat" drafts_index = "dload/drafts.dat" # Phonebook favorites favorites_file_name = "pim/pbFavorite.dat" NUMFAVORITES=10 class call(BaseProtogenClass): __fields=['GPStime', 'unk0', 'duration', 'number', 'name', 'numberlength', 'status', 'pbnumbertype', 'unk1', 'pbentrynum', 'unk2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(call,self).__init__(**dict) if self.__class__ is call: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(call,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(call,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_unk0.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_numberlength.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_pbnumbertype.writetobuffer(buf) self.__field_unk1.writetobuffer(buf) self.__field_pbentrynum.writetobuffer(buf) self.__field_unk2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unk0=UINT(**{'sizeinbytes': 4}) self.__field_unk0.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_numberlength=UINT(**{'sizeinbytes': 1}) self.__field_numberlength.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_pbnumbertype=UINT(**{'sizeinbytes': 1}) self.__field_pbnumbertype.readfrombuffer(buf) self.__field_unk1=UINT(**{'sizeinbytes': 4}) self.__field_unk1.readfrombuffer(buf) self.__field_pbentrynum=UINT(**{'sizeinbytes': 2}) self.__field_pbentrynum.readfrombuffer(buf) self.__field_unk2=DATA(**{'sizeinbytes': 27}) self.__field_unk2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unk0(self): return self.__field_unk0.getvalue() def __setfield_unk0(self, value): if isinstance(value,UINT): self.__field_unk0=value else: self.__field_unk0=UINT(value,**{'sizeinbytes': 4}) def __delfield_unk0(self): del self.__field_unk0 unk0=property(__getfield_unk0, __setfield_unk0, __delfield_unk0, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numberlength(self): return self.__field_numberlength.getvalue() def __setfield_numberlength(self, value): if isinstance(value,UINT): self.__field_numberlength=value else: self.__field_numberlength=UINT(value,**{'sizeinbytes': 1}) def __delfield_numberlength(self): del self.__field_numberlength numberlength=property(__getfield_numberlength, __setfield_numberlength, __delfield_numberlength, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_pbnumbertype(self): return self.__field_pbnumbertype.getvalue() def __setfield_pbnumbertype(self, value): if isinstance(value,UINT): self.__field_pbnumbertype=value else: self.__field_pbnumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_pbnumbertype(self): del self.__field_pbnumbertype pbnumbertype=property(__getfield_pbnumbertype, __setfield_pbnumbertype, __delfield_pbnumbertype, None) def __getfield_unk1(self): return self.__field_unk1.getvalue() def __setfield_unk1(self, value): if isinstance(value,UINT): self.__field_unk1=value else: self.__field_unk1=UINT(value,**{'sizeinbytes': 4}) def __delfield_unk1(self): del self.__field_unk1 unk1=property(__getfield_unk1, __setfield_unk1, __delfield_unk1, None) def __getfield_pbentrynum(self): return self.__field_pbentrynum.getvalue() def __setfield_pbentrynum(self, value): if isinstance(value,UINT): self.__field_pbentrynum=value else: self.__field_pbentrynum=UINT(value,**{'sizeinbytes': 2}) def __delfield_pbentrynum(self): del self.__field_pbentrynum pbentrynum=property(__getfield_pbentrynum, __setfield_pbentrynum, __delfield_pbentrynum, None) def __getfield_unk2(self): return self.__field_unk2.getvalue() def __setfield_unk2(self, value): if isinstance(value,DATA): self.__field_unk2=value else: self.__field_unk2=DATA(value,**{'sizeinbytes': 27}) def __delfield_unk2(self): del self.__field_unk2 unk2=property(__getfield_unk2, __setfield_unk2, __delfield_unk2, None) def iscontainer(self): return True def containerelements(self): yield ('GPStime', self.__field_GPStime, None) yield ('unk0', self.__field_unk0, None) yield ('duration', self.__field_duration, None) yield ('number', self.__field_number, None) yield ('name', self.__field_name, None) yield ('numberlength', self.__field_numberlength, None) yield ('status', self.__field_status, None) yield ('pbnumbertype', self.__field_pbnumbertype, None) yield ('unk1', self.__field_unk1, None) yield ('pbentrynum', self.__field_pbentrynum, None) yield ('unk2', self.__field_unk2, None) class callhistory(BaseProtogenClass): __fields=['numcalls', 'unk1', 'calls'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callhistory,self).__init__(**dict) if self.__class__ is callhistory: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callhistory,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callhistory,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numcalls.writetobuffer(buf) self.__field_unk1.writetobuffer(buf) try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numcalls=UINT(**{'sizeinbytes': 4}) self.__field_numcalls.readfrombuffer(buf) self.__field_unk1=UINT(**{'sizeinbytes': 1}) self.__field_unk1.readfrombuffer(buf) self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numcalls(self): return self.__field_numcalls.getvalue() def __setfield_numcalls(self, value): if isinstance(value,UINT): self.__field_numcalls=value else: self.__field_numcalls=UINT(value,**{'sizeinbytes': 4}) def __delfield_numcalls(self): del self.__field_numcalls numcalls=property(__getfield_numcalls, __setfield_numcalls, __delfield_numcalls, None) def __getfield_unk1(self): return self.__field_unk1.getvalue() def __setfield_unk1(self, value): if isinstance(value,UINT): self.__field_unk1=value else: self.__field_unk1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unk1(self): del self.__field_unk1 unk1=property(__getfield_unk1, __setfield_unk1, __delfield_unk1, None) def __getfield_calls(self): try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) return self.__field_calls.getvalue() def __setfield_calls(self, value): if isinstance(value,LIST): self.__field_calls=value else: self.__field_calls=LIST(value,**{'elementclass': call}) def __delfield_calls(self): del self.__field_calls calls=property(__getfield_calls, __setfield_calls, __delfield_calls, None) def iscontainer(self): return True def containerelements(self): yield ('numcalls', self.__field_numcalls, None) yield ('unk1', self.__field_unk1, None) yield ('calls', self.__field_calls, None) class favorite(BaseProtogenClass): __fields=['unk0', 'pb_index', 'unk1', 'unk2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(favorite,self).__init__(**dict) if self.__class__ is favorite: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(favorite,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(favorite,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_unk0 except: self.__field_unk0=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_unk0.writetobuffer(buf) try: self.__field_pb_index except: self.__field_pb_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_pb_index.writetobuffer(buf) try: self.__field_unk1 except: self.__field_unk1=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_unk1.writetobuffer(buf) try: self.__field_unk2 except: self.__field_unk2=UINT(**{'sizeinbytes': 4, 'default': 0x45 }) self.__field_unk2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unk0=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_unk0.readfrombuffer(buf) self.__field_pb_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_pb_index.readfrombuffer(buf) self.__field_unk1=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_unk1.readfrombuffer(buf) self.__field_unk2=UINT(**{'sizeinbytes': 4, 'default': 0x45 }) self.__field_unk2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unk0(self): try: self.__field_unk0 except: self.__field_unk0=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_unk0.getvalue() def __setfield_unk0(self, value): if isinstance(value,UINT): self.__field_unk0=value else: self.__field_unk0=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_unk0(self): del self.__field_unk0 unk0=property(__getfield_unk0, __setfield_unk0, __delfield_unk0, None) def __getfield_pb_index(self): try: self.__field_pb_index except: self.__field_pb_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) return self.__field_pb_index.getvalue() def __setfield_pb_index(self, value): if isinstance(value,UINT): self.__field_pb_index=value else: self.__field_pb_index=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_pb_index(self): del self.__field_pb_index pb_index=property(__getfield_pb_index, __setfield_pb_index, __delfield_pb_index, None) def __getfield_unk1(self): try: self.__field_unk1 except: self.__field_unk1=UINT(**{'sizeinbytes': 4, 'default': 0 }) return self.__field_unk1.getvalue() def __setfield_unk1(self, value): if isinstance(value,UINT): self.__field_unk1=value else: self.__field_unk1=UINT(value,**{'sizeinbytes': 4, 'default': 0 }) def __delfield_unk1(self): del self.__field_unk1 unk1=property(__getfield_unk1, __setfield_unk1, __delfield_unk1, None) def __getfield_unk2(self): try: self.__field_unk2 except: self.__field_unk2=UINT(**{'sizeinbytes': 4, 'default': 0x45 }) return self.__field_unk2.getvalue() def __setfield_unk2(self, value): if isinstance(value,UINT): self.__field_unk2=value else: self.__field_unk2=UINT(value,**{'sizeinbytes': 4, 'default': 0x45 }) def __delfield_unk2(self): del self.__field_unk2 unk2=property(__getfield_unk2, __setfield_unk2, __delfield_unk2, None) def iscontainer(self): return True def containerelements(self): yield ('unk0', self.__field_unk0, None) yield ('pb_index', self.__field_pb_index, None) yield ('unk1', self.__field_unk1, None) yield ('unk2', self.__field_unk2, None) def has_pbentry(self): return self.pb_index != 0xffff class favorites(BaseProtogenClass): __fields=['count', 'items', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(favorites,self).__init__(**dict) if self.__class__ is favorites: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(favorites,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(favorites,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_count except: self.__field_count=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_count.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': favorite, 'length': self.count }) self.__field_items.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_count=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_count.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': favorite, 'length': self.count }) self.__field_items.readfrombuffer(buf) self.__field_pad=LIST(**{'elementclass': _gen_p_lgvx9600_68, 'length': NUMFAVORITES - self.count }) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_count(self): try: self.__field_count except: self.__field_count=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_count.getvalue() def __setfield_count(self, value): if isinstance(value,UINT): self.__field_count=value else: self.__field_count=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_count(self): del self.__field_count count=property(__getfield_count, __setfield_count, __delfield_count, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': favorite, 'length': self.count }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': favorite, 'length': self.count }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,LIST): self.__field_pad=value else: self.__field_pad=LIST(value,**{'elementclass': _gen_p_lgvx9600_68, 'length': NUMFAVORITES - self.count }) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('count', self.__field_count, None) yield ('items', self.__field_items, None) yield ('pad', self.__field_pad, None) def set_favorite(self, index, entity_index, ispbentry): # index is not used for the VX-9600 if ispbentry and count < NUMFAVORITES: new_favorite = self.favorite () new_favorite.pb_index = entity_index self.items.append (new_favorite) self.count += 1 class _gen_p_lgvx9600_68(BaseProtogenClass): 'Anonymous inner class' __fields=['dontcare'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx9600_68,self).__init__(**dict) if self.__class__ is _gen_p_lgvx9600_68: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx9600_68,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx9600_68,kwargs) if len(args): dict2={'sizeinbytes': 12, 'default': '\xff'*507 } dict2.update(kwargs) kwargs=dict2 self.__field_dontcare=DATA(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_dontcare except: self.__field_dontcare=DATA(**{'sizeinbytes': 12, 'default': '\xff'*507 }) self.__field_dontcare.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_dontcare=DATA(**{'sizeinbytes': 12, 'default': '\xff'*507 }) self.__field_dontcare.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_dontcare(self): try: self.__field_dontcare except: self.__field_dontcare=DATA(**{'sizeinbytes': 12, 'default': '\xff'*507 }) return self.__field_dontcare.getvalue() def __setfield_dontcare(self, value): if isinstance(value,DATA): self.__field_dontcare=value else: self.__field_dontcare=DATA(value,**{'sizeinbytes': 12, 'default': '\xff'*507 }) def __delfield_dontcare(self): del self.__field_dontcare dontcare=property(__getfield_dontcare, __setfield_dontcare, __delfield_dontcare, None) def iscontainer(self): return True def containerelements(self): yield ('dontcare', self.__field_dontcare, None) bitpim-1.0.7+dfsg1/src/phones/com_moto_cdma.py0000644001616600161660000001113710574665627017431 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_moto.py 3641 2006-11-08 02:43:05Z sawecw $ """Communicate with Motorola CDMA phones using AT commands""" import commport import com_moto import com_brew class Phone(com_moto.Phone, com_brew.BrewProtocol): _switch_mode_cmd='\x44\x58\xf4\x7e' def __init__(self, logtarget, commport): com_moto.Phone.__init__(self, logtarget, commport) com_brew.BrewProtocol.__init__(self) def _setmodephonebooktobrew(self): self.setmode(self.MODEMODEM) self.setmode(self.MODEBREW) return True def _setmodemodemtobrew(self): self.log('Switching from modem to BREW') try: self.comm.sendatcommand('$QCDMG') return True except: pass # give it another try self.log('Retry switching from modem to BREW') try: self.comm.sendatcommand('$QCDMG') return True except commport.ATError: return False except: if __debug__: self.log('Got an excepetion') return False def _setmodebrew(self): # switch from None to BREW self.log('Switching from None to BREW') # do it the long, but sure, way: 1st try to switch to modem if not self._setmodemodem(): # can't switch to modem, give up return False # then switch from modem to BREW return self._setmodemodemtobrew() def _setmodebrewtomodem(self): self.log('Switching from BREW to modem') try: self.comm.write(self._switch_mode_cmd, False) self.comm.readsome(numchars=5, log=False) return True except: pass # give it a 2nd try try: self.comm.write(self._switch_mode_cmd, False) self.comm.readsome(numchars=5, log=False) return True except: return False def _setmodemodem(self): # ask parent to do it if super(Phone,self)._setmodemodem(): return True # could be in BREW mode, try switch over self.log('trying to switch from BREW mode') if not self._setmodebrewtomodem(): return False try: self.comm.sendatcommand('E0V1') self.set_mode(self.protocolclass.MODE_MODEM) return True except: return False # Ringtones & wallpaper sutff------------------------------------------------------------ def _read_media(self, index_key, fundamentals): """Read the contents of media files and return""" _media={} for _key,_entry in fundamentals.get(index_key, {}).items(): if _entry.get('filename', None): # this one associates with a file, try to read it try: _media[_entry['name']]=self.getfilecontents(_entry['filename'], True) except (com_brew.BrewNoSuchFileException, com_brew.BrewBadPathnameException, com_brew.BrewNameTooLongException, com_brew.BrewAccessDeniedException): self.log("Failed to read media file: %s"%_entry['name']) except: self.log('Failed to read media file.') if __debug__: raise return _media def getringtones(self, fundamentals): """Retrieve ringtones data""" self.log('Reading ringtones') self.setmode(self.MODEPHONEBOOK) self.setmode(self.MODEBREW) try: fundamentals['ringtone']=self._read_media('ringtone-index', fundamentals) except: if __debug__: raise self.setmode(self.MODEMODEM) return fundamentals def getwallpapers(self, fundamentals): """Retrieve wallpaper data""" self.log('Reading wallpapers') self.setmode(self.MODEPHONEBOOK) self.setmode(self.MODEBREW) try: fundamentals['wallpapers']=self._read_media('wallpaper-index', fundamentals) except: if __debug__: raise self.setmode(self.MODEMODEM) return fundamentals class Profile(com_moto.Profile): pass bitpim-1.0.7+dfsg1/src/phones/p_lgvx9700.py0000644001616600161660000005547411152574543016451 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VX9700""" # groups - same as VX-8700 # phonebook - LG Phonebook v1.0 (same as VX-8550) # schedule - same as VX-8550 from p_lgvx8550 import * # sms - same as VX-9100 from p_lgvx9100 import msg_record,recipient_record,sms_saved,sms_out,SMSINBOXMSGFRAGMENT,sms_in # SMS index files inbox_index = "dload/inbox.dat" outbox_index = "dload/outbox.dat" drafts_index = "dload/drafts.dat" class indexentry(BaseProtogenClass): __fields=['filename', 'size', 'date', 'type', 'unk0', 'unk1', 'unk2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_filename.writetobuffer(buf) self.__field_size.writetobuffer(buf) try: self.__field_date except: self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_date.writetobuffer(buf) self.__field_type.writetobuffer(buf) try: self.__field_unk0 except: self.__field_unk0=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_unk0.writetobuffer(buf) try: self.__field_unk1 except: self.__field_unk1=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_unk1.writetobuffer(buf) try: self.__field_unk2 except: self.__field_unk2=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_unk2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_filename=USTRING(**{'sizeinbytes': 256, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_filename.readfrombuffer(buf) self.__field_size=UINT(**{'sizeinbytes': 4}) self.__field_size.readfrombuffer(buf) self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_date.readfrombuffer(buf) self.__field_type=UINT(**{'sizeinbytes': 4}) self.__field_type.readfrombuffer(buf) self.__field_unk0=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_unk0.readfrombuffer(buf) self.__field_unk1=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_unk1.readfrombuffer(buf) self.__field_unk2=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_unk2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'sizeinbytes': 256, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, "full pathname") def __getfield_size(self): return self.__field_size.getvalue() def __setfield_size(self, value): if isinstance(value,UINT): self.__field_size=value else: self.__field_size=UINT(value,**{'sizeinbytes': 4}) def __delfield_size(self): del self.__field_size size=property(__getfield_size, __setfield_size, __delfield_size, None) def __getfield_date(self): try: self.__field_date except: self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,UINT): self.__field_date=value else: self.__field_date=UINT(value,**{'sizeinbytes': 4, 'default': 0}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, None) def __getfield_type(self): return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,UINT): self.__field_type=value else: self.__field_type=UINT(value,**{'sizeinbytes': 4}) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, None) def __getfield_unk0(self): try: self.__field_unk0 except: self.__field_unk0=UINT(**{'sizeinbytes': 4, 'default': 0}) return self.__field_unk0.getvalue() def __setfield_unk0(self, value): if isinstance(value,UINT): self.__field_unk0=value else: self.__field_unk0=UINT(value,**{'sizeinbytes': 4, 'default': 0}) def __delfield_unk0(self): del self.__field_unk0 unk0=property(__getfield_unk0, __setfield_unk0, __delfield_unk0, None) def __getfield_unk1(self): try: self.__field_unk1 except: self.__field_unk1=UINT(**{'sizeinbytes': 4, 'default': 0}) return self.__field_unk1.getvalue() def __setfield_unk1(self, value): if isinstance(value,UINT): self.__field_unk1=value else: self.__field_unk1=UINT(value,**{'sizeinbytes': 4, 'default': 0}) def __delfield_unk1(self): del self.__field_unk1 unk1=property(__getfield_unk1, __setfield_unk1, __delfield_unk1, None) def __getfield_unk2(self): try: self.__field_unk2 except: self.__field_unk2=UINT(**{'sizeinbytes': 4, 'default': 0}) return self.__field_unk2.getvalue() def __setfield_unk2(self, value): if isinstance(value,UINT): self.__field_unk2=value else: self.__field_unk2=UINT(value,**{'sizeinbytes': 4, 'default': 0}) def __delfield_unk2(self): del self.__field_unk2 unk2=property(__getfield_unk2, __setfield_unk2, __delfield_unk2, None) def iscontainer(self): return True def containerelements(self): yield ('filename', self.__field_filename, "full pathname") yield ('size', self.__field_size, None) yield ('date', self.__field_date, None) yield ('type', self.__field_type, None) yield ('unk0', self.__field_unk0, None) yield ('unk1', self.__field_unk1, None) yield ('unk2', self.__field_unk2, None) class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): dict2={'elementclass': indexentry, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class call(BaseProtogenClass): __fields=['GPStime', 'unk0', 'duration', 'number', 'name', 'numberlength', 'status', 'pbnumbertype', 'unk1', 'pbentrynum', 'unk2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(call,self).__init__(**dict) if self.__class__ is call: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(call,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(call,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_unk0.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_numberlength.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_pbnumbertype.writetobuffer(buf) self.__field_unk1.writetobuffer(buf) self.__field_pbentrynum.writetobuffer(buf) self.__field_unk2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unk0=UINT(**{'sizeinbytes': 4}) self.__field_unk0.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_numberlength=UINT(**{'sizeinbytes': 1}) self.__field_numberlength.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_pbnumbertype=UINT(**{'sizeinbytes': 1}) self.__field_pbnumbertype.readfrombuffer(buf) self.__field_unk1=UINT(**{'sizeinbytes': 4}) self.__field_unk1.readfrombuffer(buf) self.__field_pbentrynum=UINT(**{'sizeinbytes': 4}) self.__field_pbentrynum.readfrombuffer(buf) self.__field_unk2=DATA(**{'sizeinbytes': 24}) self.__field_unk2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unk0(self): return self.__field_unk0.getvalue() def __setfield_unk0(self, value): if isinstance(value,UINT): self.__field_unk0=value else: self.__field_unk0=UINT(value,**{'sizeinbytes': 4}) def __delfield_unk0(self): del self.__field_unk0 unk0=property(__getfield_unk0, __setfield_unk0, __delfield_unk0, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numberlength(self): return self.__field_numberlength.getvalue() def __setfield_numberlength(self, value): if isinstance(value,UINT): self.__field_numberlength=value else: self.__field_numberlength=UINT(value,**{'sizeinbytes': 1}) def __delfield_numberlength(self): del self.__field_numberlength numberlength=property(__getfield_numberlength, __setfield_numberlength, __delfield_numberlength, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_pbnumbertype(self): return self.__field_pbnumbertype.getvalue() def __setfield_pbnumbertype(self, value): if isinstance(value,UINT): self.__field_pbnumbertype=value else: self.__field_pbnumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_pbnumbertype(self): del self.__field_pbnumbertype pbnumbertype=property(__getfield_pbnumbertype, __setfield_pbnumbertype, __delfield_pbnumbertype, None) def __getfield_unk1(self): return self.__field_unk1.getvalue() def __setfield_unk1(self, value): if isinstance(value,UINT): self.__field_unk1=value else: self.__field_unk1=UINT(value,**{'sizeinbytes': 4}) def __delfield_unk1(self): del self.__field_unk1 unk1=property(__getfield_unk1, __setfield_unk1, __delfield_unk1, None) def __getfield_pbentrynum(self): return self.__field_pbentrynum.getvalue() def __setfield_pbentrynum(self, value): if isinstance(value,UINT): self.__field_pbentrynum=value else: self.__field_pbentrynum=UINT(value,**{'sizeinbytes': 4}) def __delfield_pbentrynum(self): del self.__field_pbentrynum pbentrynum=property(__getfield_pbentrynum, __setfield_pbentrynum, __delfield_pbentrynum, None) def __getfield_unk2(self): return self.__field_unk2.getvalue() def __setfield_unk2(self, value): if isinstance(value,DATA): self.__field_unk2=value else: self.__field_unk2=DATA(value,**{'sizeinbytes': 24}) def __delfield_unk2(self): del self.__field_unk2 unk2=property(__getfield_unk2, __setfield_unk2, __delfield_unk2, None) def iscontainer(self): return True def containerelements(self): yield ('GPStime', self.__field_GPStime, None) yield ('unk0', self.__field_unk0, None) yield ('duration', self.__field_duration, None) yield ('number', self.__field_number, None) yield ('name', self.__field_name, None) yield ('numberlength', self.__field_numberlength, None) yield ('status', self.__field_status, None) yield ('pbnumbertype', self.__field_pbnumbertype, None) yield ('unk1', self.__field_unk1, None) yield ('pbentrynum', self.__field_pbentrynum, None) yield ('unk2', self.__field_unk2, None) class callhistory(BaseProtogenClass): __fields=['numcalls', 'unk1', 'calls'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callhistory,self).__init__(**dict) if self.__class__ is callhistory: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callhistory,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callhistory,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numcalls.writetobuffer(buf) self.__field_unk1.writetobuffer(buf) try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call, 'length': self.numcalls}) self.__field_calls.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numcalls=UINT(**{'sizeinbytes': 4}) self.__field_numcalls.readfrombuffer(buf) self.__field_unk1=UINT(**{'sizeinbytes': 1}) self.__field_unk1.readfrombuffer(buf) self.__field_calls=LIST(**{'elementclass': call, 'length': self.numcalls}) self.__field_calls.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numcalls(self): return self.__field_numcalls.getvalue() def __setfield_numcalls(self, value): if isinstance(value,UINT): self.__field_numcalls=value else: self.__field_numcalls=UINT(value,**{'sizeinbytes': 4}) def __delfield_numcalls(self): del self.__field_numcalls numcalls=property(__getfield_numcalls, __setfield_numcalls, __delfield_numcalls, None) def __getfield_unk1(self): return self.__field_unk1.getvalue() def __setfield_unk1(self, value): if isinstance(value,UINT): self.__field_unk1=value else: self.__field_unk1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unk1(self): del self.__field_unk1 unk1=property(__getfield_unk1, __setfield_unk1, __delfield_unk1, None) def __getfield_calls(self): try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call, 'length': self.numcalls}) return self.__field_calls.getvalue() def __setfield_calls(self, value): if isinstance(value,LIST): self.__field_calls=value else: self.__field_calls=LIST(value,**{'elementclass': call, 'length': self.numcalls}) def __delfield_calls(self): del self.__field_calls calls=property(__getfield_calls, __setfield_calls, __delfield_calls, None) def iscontainer(self): return True def containerelements(self): yield ('numcalls', self.__field_numcalls, None) yield ('unk1', self.__field_unk1, None) yield ('calls', self.__field_calls, None) bitpim-1.0.7+dfsg1/src/phones/p_toshibavm4050.py0000644001616600161660000031745610466234100017444 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Audiovox CDM8900""" from prototypes import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSLOTS=300 MAXPHONENUMBERLEN=32 MAXPHONENUMBERS=5 MAXNAMELEN=16 MAXEMAILLEN=48 MAXMEMOLEN=48 MAXEMAILS=3 numbertypetab=( 'phone', 'home', 'office','cell', 'pager', 'fax' ) PHONE_ENCODING='iso8859_1' class pbnumber(BaseProtogenClass): __fields=['valid', 'type', 'ringer_group', 'pad0', 'ringer_index', 'pad1', 'secret', 'number', 'pad2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbnumber,self).__init__(**dict) if self.__class__ is pbnumber: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbnumber,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbnumber,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_valid except: self.__field_valid=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_valid.writetobuffer(buf) try: self.__field_type except: self.__field_type=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_type.writetobuffer(buf) try: self.__field_ringer_group except: self.__field_ringer_group=UINT(**{'sizeinbytes': 1, 'default': 5}) self.__field_ringer_group.writetobuffer(buf) try: self.__field_pad0 except: self.__field_pad0=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_pad0.writetobuffer(buf) try: self.__field_ringer_index except: self.__field_ringer_index=UINT(**{'sizeinbytes': 2, 'default': 0}) self.__field_ringer_index.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UINT(**{'sizeinbytes': 2, 'default': 0}) self.__field_pad1.writetobuffer(buf) try: self.__field_secret except: self.__field_secret=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_secret.writetobuffer(buf) try: self.__field_number except: self.__field_number=USTRING(**{'sizeinbytes': 33, 'terminator': None, 'pascal': True, 'default': ""}) self.__field_number.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 48}) self.__field_pad2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_valid=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_valid.readfrombuffer(buf) self.__field_type=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_type.readfrombuffer(buf) self.__field_ringer_group=UINT(**{'sizeinbytes': 1, 'default': 5}) self.__field_ringer_group.readfrombuffer(buf) self.__field_pad0=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_pad0.readfrombuffer(buf) self.__field_ringer_index=UINT(**{'sizeinbytes': 2, 'default': 0}) self.__field_ringer_index.readfrombuffer(buf) self.__field_pad1=UINT(**{'sizeinbytes': 2, 'default': 0}) self.__field_pad1.readfrombuffer(buf) self.__field_secret=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_secret.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 33, 'terminator': None, 'pascal': True, 'default': ""}) self.__field_number.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 48}) self.__field_pad2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_valid(self): try: self.__field_valid except: self.__field_valid=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_valid.getvalue() def __setfield_valid(self, value): if isinstance(value,UINT): self.__field_valid=value else: self.__field_valid=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_valid(self): del self.__field_valid valid=property(__getfield_valid, __setfield_valid, __delfield_valid, None) def __getfield_type(self): try: self.__field_type except: self.__field_type=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,UINT): self.__field_type=value else: self.__field_type=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, None) def __getfield_ringer_group(self): try: self.__field_ringer_group except: self.__field_ringer_group=UINT(**{'sizeinbytes': 1, 'default': 5}) return self.__field_ringer_group.getvalue() def __setfield_ringer_group(self, value): if isinstance(value,UINT): self.__field_ringer_group=value else: self.__field_ringer_group=UINT(value,**{'sizeinbytes': 1, 'default': 5}) def __delfield_ringer_group(self): del self.__field_ringer_group ringer_group=property(__getfield_ringer_group, __setfield_ringer_group, __delfield_ringer_group, None) def __getfield_pad0(self): try: self.__field_pad0 except: self.__field_pad0=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_pad0.getvalue() def __setfield_pad0(self, value): if isinstance(value,UINT): self.__field_pad0=value else: self.__field_pad0=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_pad0(self): del self.__field_pad0 pad0=property(__getfield_pad0, __setfield_pad0, __delfield_pad0, None) def __getfield_ringer_index(self): try: self.__field_ringer_index except: self.__field_ringer_index=UINT(**{'sizeinbytes': 2, 'default': 0}) return self.__field_ringer_index.getvalue() def __setfield_ringer_index(self, value): if isinstance(value,UINT): self.__field_ringer_index=value else: self.__field_ringer_index=UINT(value,**{'sizeinbytes': 2, 'default': 0}) def __delfield_ringer_index(self): del self.__field_ringer_index ringer_index=property(__getfield_ringer_index, __setfield_ringer_index, __delfield_ringer_index, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UINT(**{'sizeinbytes': 2, 'default': 0}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UINT): self.__field_pad1=value else: self.__field_pad1=UINT(value,**{'sizeinbytes': 2, 'default': 0}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_secret(self): try: self.__field_secret except: self.__field_secret=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_secret.getvalue() def __setfield_secret(self, value): if isinstance(value,UINT): self.__field_secret=value else: self.__field_secret=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_secret(self): del self.__field_secret secret=property(__getfield_secret, __setfield_secret, __delfield_secret, None) def __getfield_number(self): try: self.__field_number except: self.__field_number=USTRING(**{'sizeinbytes': 33, 'terminator': None, 'pascal': True, 'default': ""}) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 33, 'terminator': None, 'pascal': True, 'default': ""}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 48}) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 48}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def iscontainer(self): return True def containerelements(self): yield ('valid', self.__field_valid, None) yield ('type', self.__field_type, None) yield ('ringer_group', self.__field_ringer_group, None) yield ('pad0', self.__field_pad0, None) yield ('ringer_index', self.__field_ringer_index, None) yield ('pad1', self.__field_pad1, None) yield ('secret', self.__field_secret, None) yield ('number', self.__field_number, None) yield ('pad2', self.__field_pad2, None) class pbemail(BaseProtogenClass): __fields=['valid', 'dunno1', 'dunno2', 'dunno3', 'dunno4', 'email'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbemail,self).__init__(**dict) if self.__class__ is pbemail: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbemail,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbemail,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_valid except: self.__field_valid=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_valid.writetobuffer(buf) try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 1, 'default': 1}) self.__field_dunno1.writetobuffer(buf) try: self.__field_dunno2 except: self.__field_dunno2=UINT(**{'sizeinbytes': 2, 'default': 0}) self.__field_dunno2.writetobuffer(buf) try: self.__field_dunno3 except: self.__field_dunno3=UINT(**{'sizeinbytes': 1, 'default': 5}) self.__field_dunno3.writetobuffer(buf) try: self.__field_dunno4 except: self.__field_dunno4=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_dunno4.writetobuffer(buf) try: self.__field_email except: self.__field_email=USTRING(**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'terminator': None, 'pascal': True, 'default': ""}) self.__field_email.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_valid=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_valid.readfrombuffer(buf) self.__field_dunno1=UINT(**{'sizeinbytes': 1, 'default': 1}) self.__field_dunno1.readfrombuffer(buf) self.__field_dunno2=UINT(**{'sizeinbytes': 2, 'default': 0}) self.__field_dunno2.readfrombuffer(buf) self.__field_dunno3=UINT(**{'sizeinbytes': 1, 'default': 5}) self.__field_dunno3.readfrombuffer(buf) self.__field_dunno4=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_dunno4.readfrombuffer(buf) self.__field_email=USTRING(**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'terminator': None, 'pascal': True, 'default': ""}) self.__field_email.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_valid(self): try: self.__field_valid except: self.__field_valid=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_valid.getvalue() def __setfield_valid(self, value): if isinstance(value,UINT): self.__field_valid=value else: self.__field_valid=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_valid(self): del self.__field_valid valid=property(__getfield_valid, __setfield_valid, __delfield_valid, None) def __getfield_dunno1(self): try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 1, 'default': 1}) return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UINT): self.__field_dunno1=value else: self.__field_dunno1=UINT(value,**{'sizeinbytes': 1, 'default': 1}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_dunno2(self): try: self.__field_dunno2 except: self.__field_dunno2=UINT(**{'sizeinbytes': 2, 'default': 0}) return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UINT): self.__field_dunno2=value else: self.__field_dunno2=UINT(value,**{'sizeinbytes': 2, 'default': 0}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_dunno3(self): try: self.__field_dunno3 except: self.__field_dunno3=UINT(**{'sizeinbytes': 1, 'default': 5}) return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,UINT): self.__field_dunno3=value else: self.__field_dunno3=UINT(value,**{'sizeinbytes': 1, 'default': 5}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_dunno4(self): try: self.__field_dunno4 except: self.__field_dunno4=UINT(**{'sizeinbytes': 4, 'default': 0}) return self.__field_dunno4.getvalue() def __setfield_dunno4(self, value): if isinstance(value,UINT): self.__field_dunno4=value else: self.__field_dunno4=UINT(value,**{'sizeinbytes': 4, 'default': 0}) def __delfield_dunno4(self): del self.__field_dunno4 dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None) def __getfield_email(self): try: self.__field_email except: self.__field_email=USTRING(**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'terminator': None, 'pascal': True, 'default': ""}) return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'terminator': None, 'pascal': True, 'default': ""}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def iscontainer(self): return True def containerelements(self): yield ('valid', self.__field_valid, None) yield ('dunno1', self.__field_dunno1, None) yield ('dunno2', self.__field_dunno2, None) yield ('dunno3', self.__field_dunno3, None) yield ('dunno4', self.__field_dunno4, None) yield ('email', self.__field_email, None) class pbentry(BaseProtogenClass): __fields=['slot', 'pad2', 'pad3', 'name', 'numbers', 'emails', 'dunno', 'web_page', 'pad5'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UINT(**{'sizeinbytes': 2, 'default': 0x0101}) self.__field_pad2.writetobuffer(buf) try: self.__field_pad3 except: self.__field_pad3=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_pad3.writetobuffer(buf) self.__field_name.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'length': MAXPHONENUMBERS, 'elementclass': pbnumber, 'createdefault': True}) self.__field_numbers.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'length': MAXEMAILS, 'elementclass': pbemail, 'createdefault': True}) self.__field_emails.writetobuffer(buf) try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 2, 'default': 0x0001}) self.__field_dunno.writetobuffer(buf) try: self.__field_web_page except: self.__field_web_page=USTRING(**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'terminator': None, 'pascal': True, 'default': ""}) self.__field_web_page.writetobuffer(buf) try: self.__field_pad5 except: self.__field_pad5=UNKNOWN(**{'sizeinbytes': 81}) self.__field_pad5.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_pad2=UINT(**{'sizeinbytes': 2, 'default': 0x0101}) self.__field_pad2.readfrombuffer(buf) self.__field_pad3=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_pad3.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 37, 'encoding': PHONE_ENCODING, 'terminator': None, 'pascal': True}) self.__field_name.readfrombuffer(buf) self.__field_numbers=LIST(**{'length': MAXPHONENUMBERS, 'elementclass': pbnumber, 'createdefault': True}) self.__field_numbers.readfrombuffer(buf) self.__field_emails=LIST(**{'length': MAXEMAILS, 'elementclass': pbemail, 'createdefault': True}) self.__field_emails.readfrombuffer(buf) self.__field_dunno=UINT(**{'sizeinbytes': 2, 'default': 0x0001}) self.__field_dunno.readfrombuffer(buf) self.__field_web_page=USTRING(**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'terminator': None, 'pascal': True, 'default': ""}) self.__field_web_page.readfrombuffer(buf) self.__field_pad5=UNKNOWN(**{'sizeinbytes': 81}) self.__field_pad5.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UINT(**{'sizeinbytes': 2, 'default': 0x0101}) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UINT): self.__field_pad2=value else: self.__field_pad2=UINT(value,**{'sizeinbytes': 2, 'default': 0x0101}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_pad3(self): try: self.__field_pad3 except: self.__field_pad3=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_pad3.getvalue() def __setfield_pad3(self, value): if isinstance(value,UINT): self.__field_pad3=value else: self.__field_pad3=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_pad3(self): del self.__field_pad3 pad3=property(__getfield_pad3, __setfield_pad3, __delfield_pad3, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 37, 'encoding': PHONE_ENCODING, 'terminator': None, 'pascal': True}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'length': MAXPHONENUMBERS, 'elementclass': pbnumber, 'createdefault': True}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'length': MAXPHONENUMBERS, 'elementclass': pbnumber, 'createdefault': True}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'length': MAXEMAILS, 'elementclass': pbemail, 'createdefault': True}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'length': MAXEMAILS, 'elementclass': pbemail, 'createdefault': True}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, None) def __getfield_dunno(self): try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 2, 'default': 0x0001}) return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 2, 'default': 0x0001}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def __getfield_web_page(self): try: self.__field_web_page except: self.__field_web_page=USTRING(**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'terminator': None, 'pascal': True, 'default': ""}) return self.__field_web_page.getvalue() def __setfield_web_page(self, value): if isinstance(value,USTRING): self.__field_web_page=value else: self.__field_web_page=USTRING(value,**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'terminator': None, 'pascal': True, 'default': ""}) def __delfield_web_page(self): del self.__field_web_page web_page=property(__getfield_web_page, __setfield_web_page, __delfield_web_page, None) def __getfield_pad5(self): try: self.__field_pad5 except: self.__field_pad5=UNKNOWN(**{'sizeinbytes': 81}) return self.__field_pad5.getvalue() def __setfield_pad5(self, value): if isinstance(value,UNKNOWN): self.__field_pad5=value else: self.__field_pad5=UNKNOWN(value,**{'sizeinbytes': 81}) def __delfield_pad5(self): del self.__field_pad5 pad5=property(__getfield_pad5, __setfield_pad5, __delfield_pad5, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('pad2', self.__field_pad2, None) yield ('pad3', self.__field_pad3, None) yield ('name', self.__field_name, None) yield ('numbers', self.__field_numbers, None) yield ('emails', self.__field_emails, None) yield ('dunno', self.__field_dunno, None) yield ('web_page', self.__field_web_page, None) yield ('pad5', self.__field_pad5, None) class setphoneattribrequest(BaseProtogenClass): __fields=['cmd', 'cmd2', 'cmd3', 'flag', 'data'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(setphoneattribrequest,self).__init__(**dict) if self.__class__ is setphoneattribrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(setphoneattribrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(setphoneattribrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x27}) self.__field_cmd.writetobuffer(buf) try: self.__field_cmd2 except: self.__field_cmd2=UINT(**{'sizeinbytes': 1, 'constant': 0xF0}) self.__field_cmd2.writetobuffer(buf) try: self.__field_cmd3 except: self.__field_cmd3=UINT(**{'sizeinbytes': 1, 'constant': 0x7F}) self.__field_cmd3.writetobuffer(buf) try: self.__field_flag except: self.__field_flag=UINT(**{'sizeinbytes': 1, 'constant': 0x01}) self.__field_flag.writetobuffer(buf) try: self.__field_data except: self.__field_data=UINT(**{'sizeinbytes': 129, 'constant': 0x00}) self.__field_data.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x27}) self.__field_cmd.readfrombuffer(buf) self.__field_cmd2=UINT(**{'sizeinbytes': 1, 'constant': 0xF0}) self.__field_cmd2.readfrombuffer(buf) self.__field_cmd3=UINT(**{'sizeinbytes': 1, 'constant': 0x7F}) self.__field_cmd3.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1, 'constant': 0x01}) self.__field_flag.readfrombuffer(buf) self.__field_data=UINT(**{'sizeinbytes': 129, 'constant': 0x00}) self.__field_data.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x27}) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'constant': 0x27}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_cmd2(self): try: self.__field_cmd2 except: self.__field_cmd2=UINT(**{'sizeinbytes': 1, 'constant': 0xF0}) return self.__field_cmd2.getvalue() def __setfield_cmd2(self, value): if isinstance(value,UINT): self.__field_cmd2=value else: self.__field_cmd2=UINT(value,**{'sizeinbytes': 1, 'constant': 0xF0}) def __delfield_cmd2(self): del self.__field_cmd2 cmd2=property(__getfield_cmd2, __setfield_cmd2, __delfield_cmd2, None) def __getfield_cmd3(self): try: self.__field_cmd3 except: self.__field_cmd3=UINT(**{'sizeinbytes': 1, 'constant': 0x7F}) return self.__field_cmd3.getvalue() def __setfield_cmd3(self, value): if isinstance(value,UINT): self.__field_cmd3=value else: self.__field_cmd3=UINT(value,**{'sizeinbytes': 1, 'constant': 0x7F}) def __delfield_cmd3(self): del self.__field_cmd3 cmd3=property(__getfield_cmd3, __setfield_cmd3, __delfield_cmd3, None) def __getfield_flag(self): try: self.__field_flag except: self.__field_flag=UINT(**{'sizeinbytes': 1, 'constant': 0x01}) return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1, 'constant': 0x01}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, None) def __getfield_data(self): try: self.__field_data except: self.__field_data=UINT(**{'sizeinbytes': 129, 'constant': 0x00}) return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,UINT): self.__field_data=value else: self.__field_data=UINT(value,**{'sizeinbytes': 129, 'constant': 0x00}) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('cmd2', self.__field_cmd2, None) yield ('cmd3', self.__field_cmd3, None) yield ('flag', self.__field_flag, None) yield ('data', self.__field_data, None) class setphoneattribresponse(BaseProtogenClass): __fields=['cmd', 'cmd2', 'cmd3', 'flag', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(setphoneattribresponse,self).__init__(**dict) if self.__class__ is setphoneattribresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(setphoneattribresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(setphoneattribresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x27}) self.__field_cmd.writetobuffer(buf) try: self.__field_cmd2 except: self.__field_cmd2=UINT(**{'sizeinbytes': 1, 'constant': 0xF0}) self.__field_cmd2.writetobuffer(buf) try: self.__field_cmd3 except: self.__field_cmd3=UINT(**{'sizeinbytes': 1, 'constant': 0x7F}) self.__field_cmd3.writetobuffer(buf) self.__field_flag.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=DATA() self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x27}) self.__field_cmd.readfrombuffer(buf) self.__field_cmd2=UINT(**{'sizeinbytes': 1, 'constant': 0xF0}) self.__field_cmd2.readfrombuffer(buf) self.__field_cmd3=UINT(**{'sizeinbytes': 1, 'constant': 0x7F}) self.__field_cmd3.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_pad=DATA() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x27}) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'constant': 0x27}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_cmd2(self): try: self.__field_cmd2 except: self.__field_cmd2=UINT(**{'sizeinbytes': 1, 'constant': 0xF0}) return self.__field_cmd2.getvalue() def __setfield_cmd2(self, value): if isinstance(value,UINT): self.__field_cmd2=value else: self.__field_cmd2=UINT(value,**{'sizeinbytes': 1, 'constant': 0xF0}) def __delfield_cmd2(self): del self.__field_cmd2 cmd2=property(__getfield_cmd2, __setfield_cmd2, __delfield_cmd2, None) def __getfield_cmd3(self): try: self.__field_cmd3 except: self.__field_cmd3=UINT(**{'sizeinbytes': 1, 'constant': 0x7F}) return self.__field_cmd3.getvalue() def __setfield_cmd3(self, value): if isinstance(value,UINT): self.__field_cmd3=value else: self.__field_cmd3=UINT(value,**{'sizeinbytes': 1, 'constant': 0x7F}) def __delfield_cmd3(self): del self.__field_cmd3 cmd3=property(__getfield_cmd3, __setfield_cmd3, __delfield_cmd3, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=DATA() return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,DATA): self.__field_pad=value else: self.__field_pad=DATA(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('cmd2', self.__field_cmd2, None) yield ('cmd3', self.__field_cmd3, None) yield ('flag', self.__field_flag, None) yield ('pad', self.__field_pad, None) class tosh_swapheaderrequest(BaseProtogenClass): "The bit in front on all toshiba request packets" __fields=['cmd', 'cmd2', 'command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(tosh_swapheaderrequest,self).__init__(**dict) if self.__class__ is tosh_swapheaderrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(tosh_swapheaderrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(tosh_swapheaderrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0xF1}) self.__field_cmd.writetobuffer(buf) try: self.__field_cmd2 except: self.__field_cmd2=UINT(**{'sizeinbytes': 1, 'constant': 0x0F}) self.__field_cmd2.writetobuffer(buf) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0xF1}) self.__field_cmd.readfrombuffer(buf) self.__field_cmd2=UINT(**{'sizeinbytes': 1, 'constant': 0x0F}) self.__field_cmd2.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0xF1}) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'constant': 0xF1}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_cmd2(self): try: self.__field_cmd2 except: self.__field_cmd2=UINT(**{'sizeinbytes': 1, 'constant': 0x0F}) return self.__field_cmd2.getvalue() def __setfield_cmd2(self, value): if isinstance(value,UINT): self.__field_cmd2=value else: self.__field_cmd2=UINT(value,**{'sizeinbytes': 1, 'constant': 0x0F}) def __delfield_cmd2(self): del self.__field_cmd2 cmd2=property(__getfield_cmd2, __setfield_cmd2, __delfield_cmd2, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('cmd2', self.__field_cmd2, None) yield ('command', self.__field_command, None) class tosh_swapheaderresponse(BaseProtogenClass): "The bit in front on all toshiba request packets" __fields=['cmd', 'cmd2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(tosh_swapheaderresponse,self).__init__(**dict) if self.__class__ is tosh_swapheaderresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(tosh_swapheaderresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(tosh_swapheaderresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0xF1}) self.__field_cmd.writetobuffer(buf) try: self.__field_cmd2 except: self.__field_cmd2=UINT(**{'sizeinbytes': 1, 'constant': 0x0F}) self.__field_cmd2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0xF1}) self.__field_cmd.readfrombuffer(buf) self.__field_cmd2=UINT(**{'sizeinbytes': 1, 'constant': 0x0F}) self.__field_cmd2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0xF1}) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'constant': 0xF1}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_cmd2(self): try: self.__field_cmd2 except: self.__field_cmd2=UINT(**{'sizeinbytes': 1, 'constant': 0x0F}) return self.__field_cmd2.getvalue() def __setfield_cmd2(self, value): if isinstance(value,UINT): self.__field_cmd2=value else: self.__field_cmd2=UINT(value,**{'sizeinbytes': 1, 'constant': 0x0F}) def __delfield_cmd2(self): del self.__field_cmd2 cmd2=property(__getfield_cmd2, __setfield_cmd2, __delfield_cmd2, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('cmd2', self.__field_cmd2, None) class tosh_getpbentryrequest(BaseProtogenClass): """ Read an entry from a slot """ __fields=['header', 'cmd', 'pad', 'data_type', 'entry_index', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(tosh_getpbentryrequest,self).__init__(**dict) if self.__class__ is tosh_getpbentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(tosh_getpbentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(tosh_getpbentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=tosh_swapheaderrequest(**{'command': 0x02}) self.__field_header.writetobuffer(buf) try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 2, 'constant': 0x03}) self.__field_cmd.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) self.__field_pad.writetobuffer(buf) try: self.__field_data_type except: self.__field_data_type=UINT(**{'sizeinbytes': 2, 'constant': 0x04}) self.__field_data_type.writetobuffer(buf) self.__field_entry_index.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=tosh_swapheaderrequest(**{'command': 0x02}) self.__field_header.readfrombuffer(buf) self.__field_cmd=UINT(**{'sizeinbytes': 2, 'constant': 0x03}) self.__field_cmd.readfrombuffer(buf) self.__field_pad=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) self.__field_pad.readfrombuffer(buf) self.__field_data_type=UINT(**{'sizeinbytes': 2, 'constant': 0x04}) self.__field_data_type.readfrombuffer(buf) self.__field_entry_index=UINT(**{'sizeinbytes': 2}) self.__field_entry_index.readfrombuffer(buf) self.__field_pad=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=tosh_swapheaderrequest(**{'command': 0x02}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,tosh_swapheaderrequest): self.__field_header=value else: self.__field_header=tosh_swapheaderrequest(value,**{'command': 0x02}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 2, 'constant': 0x03}) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 2, 'constant': 0x03}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UINT): self.__field_pad=value else: self.__field_pad=UINT(value,**{'sizeinbytes': 2, 'constant': 0x00}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_data_type(self): try: self.__field_data_type except: self.__field_data_type=UINT(**{'sizeinbytes': 2, 'constant': 0x04}) return self.__field_data_type.getvalue() def __setfield_data_type(self, value): if isinstance(value,UINT): self.__field_data_type=value else: self.__field_data_type=UINT(value,**{'sizeinbytes': 2, 'constant': 0x04}) def __delfield_data_type(self): del self.__field_data_type data_type=property(__getfield_data_type, __setfield_data_type, __delfield_data_type, None) def __getfield_entry_index(self): return self.__field_entry_index.getvalue() def __setfield_entry_index(self, value): if isinstance(value,UINT): self.__field_entry_index=value else: self.__field_entry_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_entry_index(self): del self.__field_entry_index entry_index=property(__getfield_entry_index, __setfield_entry_index, __delfield_entry_index, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UINT): self.__field_pad=value else: self.__field_pad=UINT(value,**{'sizeinbytes': 2, 'constant': 0x00}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('cmd', self.__field_cmd, None) yield ('pad', self.__field_pad, None) yield ('data_type', self.__field_data_type, None) yield ('entry_index', self.__field_entry_index, None) yield ('pad', self.__field_pad, None) class tosh_getpbentryresponse(BaseProtogenClass): __fields=['header', 'cmd', 'read', 'data_type', 'swap_ok'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(tosh_getpbentryresponse,self).__init__(**dict) if self.__class__ is tosh_getpbentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(tosh_getpbentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(tosh_getpbentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=tosh_swapheaderresponse() self.__field_header.writetobuffer(buf) try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x02}) self.__field_cmd.writetobuffer(buf) try: self.__field_read except: self.__field_read=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) self.__field_read.writetobuffer(buf) try: self.__field_data_type except: self.__field_data_type=UINT(**{'sizeinbytes': 2, 'constant': 0x04}) self.__field_data_type.writetobuffer(buf) self.__field_swap_ok.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=tosh_swapheaderresponse() self.__field_header.readfrombuffer(buf) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x02}) self.__field_cmd.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) self.__field_read.readfrombuffer(buf) self.__field_data_type=UINT(**{'sizeinbytes': 2, 'constant': 0x04}) self.__field_data_type.readfrombuffer(buf) self.__field_swap_ok=UINT(**{'sizeinbytes': 4}) self.__field_swap_ok.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=tosh_swapheaderresponse() return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,tosh_swapheaderresponse): self.__field_header=value else: self.__field_header=tosh_swapheaderresponse(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x02}) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'constant': 0x02}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_read(self): try: self.__field_read except: self.__field_read=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 2, 'constant': 0x00}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_data_type(self): try: self.__field_data_type except: self.__field_data_type=UINT(**{'sizeinbytes': 2, 'constant': 0x04}) return self.__field_data_type.getvalue() def __setfield_data_type(self, value): if isinstance(value,UINT): self.__field_data_type=value else: self.__field_data_type=UINT(value,**{'sizeinbytes': 2, 'constant': 0x04}) def __delfield_data_type(self): del self.__field_data_type data_type=property(__getfield_data_type, __setfield_data_type, __delfield_data_type, None) def __getfield_swap_ok(self): return self.__field_swap_ok.getvalue() def __setfield_swap_ok(self, value): if isinstance(value,UINT): self.__field_swap_ok=value else: self.__field_swap_ok=UINT(value,**{'sizeinbytes': 4}) def __delfield_swap_ok(self): del self.__field_swap_ok swap_ok=property(__getfield_swap_ok, __setfield_swap_ok, __delfield_swap_ok, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('cmd', self.__field_cmd, None) yield ('read', self.__field_read, None) yield ('data_type', self.__field_data_type, None) yield ('swap_ok', self.__field_swap_ok, None) class tosh_setpbentryrequest(BaseProtogenClass): """ Inserts a new entry into an empty slot """ __fields=['header', 'cmd', 'write', 'data_type', 'entry_index', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(tosh_setpbentryrequest,self).__init__(**dict) if self.__class__ is tosh_setpbentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(tosh_setpbentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(tosh_setpbentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=tosh_swapheaderrequest(**{'command': 0x02}) self.__field_header.writetobuffer(buf) try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 2, 'constant': 0x03}) self.__field_cmd.writetobuffer(buf) try: self.__field_write except: self.__field_write=UINT(**{'sizeinbytes': 2, 'constant': 0x100}) self.__field_write.writetobuffer(buf) try: self.__field_data_type except: self.__field_data_type=UINT(**{'sizeinbytes': 2, 'constant': 0x04}) self.__field_data_type.writetobuffer(buf) self.__field_entry_index.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=tosh_swapheaderrequest(**{'command': 0x02}) self.__field_header.readfrombuffer(buf) self.__field_cmd=UINT(**{'sizeinbytes': 2, 'constant': 0x03}) self.__field_cmd.readfrombuffer(buf) self.__field_write=UINT(**{'sizeinbytes': 2, 'constant': 0x100}) self.__field_write.readfrombuffer(buf) self.__field_data_type=UINT(**{'sizeinbytes': 2, 'constant': 0x04}) self.__field_data_type.readfrombuffer(buf) self.__field_entry_index=UINT(**{'sizeinbytes': 2}) self.__field_entry_index.readfrombuffer(buf) self.__field_pad=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=tosh_swapheaderrequest(**{'command': 0x02}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,tosh_swapheaderrequest): self.__field_header=value else: self.__field_header=tosh_swapheaderrequest(value,**{'command': 0x02}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 2, 'constant': 0x03}) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 2, 'constant': 0x03}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_write(self): try: self.__field_write except: self.__field_write=UINT(**{'sizeinbytes': 2, 'constant': 0x100}) return self.__field_write.getvalue() def __setfield_write(self, value): if isinstance(value,UINT): self.__field_write=value else: self.__field_write=UINT(value,**{'sizeinbytes': 2, 'constant': 0x100}) def __delfield_write(self): del self.__field_write write=property(__getfield_write, __setfield_write, __delfield_write, None) def __getfield_data_type(self): try: self.__field_data_type except: self.__field_data_type=UINT(**{'sizeinbytes': 2, 'constant': 0x04}) return self.__field_data_type.getvalue() def __setfield_data_type(self, value): if isinstance(value,UINT): self.__field_data_type=value else: self.__field_data_type=UINT(value,**{'sizeinbytes': 2, 'constant': 0x04}) def __delfield_data_type(self): del self.__field_data_type data_type=property(__getfield_data_type, __setfield_data_type, __delfield_data_type, None) def __getfield_entry_index(self): return self.__field_entry_index.getvalue() def __setfield_entry_index(self, value): if isinstance(value,UINT): self.__field_entry_index=value else: self.__field_entry_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_entry_index(self): del self.__field_entry_index entry_index=property(__getfield_entry_index, __setfield_entry_index, __delfield_entry_index, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UINT): self.__field_pad=value else: self.__field_pad=UINT(value,**{'sizeinbytes': 2, 'constant': 0x00}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('cmd', self.__field_cmd, None) yield ('write', self.__field_write, None) yield ('data_type', self.__field_data_type, None) yield ('entry_index', self.__field_entry_index, None) yield ('pad', self.__field_pad, None) class tosh_setpbentryresponse(BaseProtogenClass): __fields=['header', 'cmd', 'swap_ok'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(tosh_setpbentryresponse,self).__init__(**dict) if self.__class__ is tosh_setpbentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(tosh_setpbentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(tosh_setpbentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=tosh_swapheaderresponse() self.__field_header.writetobuffer(buf) try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x02}) self.__field_cmd.writetobuffer(buf) self.__field_swap_ok.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=tosh_swapheaderresponse() self.__field_header.readfrombuffer(buf) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x02}) self.__field_cmd.readfrombuffer(buf) self.__field_swap_ok=UINT(**{'sizeinbytes': 4}) self.__field_swap_ok.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=tosh_swapheaderresponse() return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,tosh_swapheaderresponse): self.__field_header=value else: self.__field_header=tosh_swapheaderresponse(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x02}) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'constant': 0x02}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_swap_ok(self): return self.__field_swap_ok.getvalue() def __setfield_swap_ok(self, value): if isinstance(value,UINT): self.__field_swap_ok=value else: self.__field_swap_ok=UINT(value,**{'sizeinbytes': 4}) def __delfield_swap_ok(self): del self.__field_swap_ok swap_ok=property(__getfield_swap_ok, __setfield_swap_ok, __delfield_swap_ok, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('cmd', self.__field_cmd, None) yield ('swap_ok', self.__field_swap_ok, None) class tosh_modifypbentryrequest(BaseProtogenClass): """ Modifies/deletes an existing entry delete occurs if the swap file does not exist when this command is issued """ __fields=['header', 'cmd', 'write', 'data_type', 'entry_index', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(tosh_modifypbentryrequest,self).__init__(**dict) if self.__class__ is tosh_modifypbentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(tosh_modifypbentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(tosh_modifypbentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=tosh_swapheaderrequest(**{'command': 0x02}) self.__field_header.writetobuffer(buf) try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 2, 'constant': 0x03}) self.__field_cmd.writetobuffer(buf) try: self.__field_write except: self.__field_write=UINT(**{'sizeinbytes': 2, 'constant': 0x200}) self.__field_write.writetobuffer(buf) try: self.__field_data_type except: self.__field_data_type=UINT(**{'sizeinbytes': 2, 'constant': 0x04}) self.__field_data_type.writetobuffer(buf) self.__field_entry_index.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=tosh_swapheaderrequest(**{'command': 0x02}) self.__field_header.readfrombuffer(buf) self.__field_cmd=UINT(**{'sizeinbytes': 2, 'constant': 0x03}) self.__field_cmd.readfrombuffer(buf) self.__field_write=UINT(**{'sizeinbytes': 2, 'constant': 0x200}) self.__field_write.readfrombuffer(buf) self.__field_data_type=UINT(**{'sizeinbytes': 2, 'constant': 0x04}) self.__field_data_type.readfrombuffer(buf) self.__field_entry_index=UINT(**{'sizeinbytes': 2}) self.__field_entry_index.readfrombuffer(buf) self.__field_pad=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=tosh_swapheaderrequest(**{'command': 0x02}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,tosh_swapheaderrequest): self.__field_header=value else: self.__field_header=tosh_swapheaderrequest(value,**{'command': 0x02}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 2, 'constant': 0x03}) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 2, 'constant': 0x03}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_write(self): try: self.__field_write except: self.__field_write=UINT(**{'sizeinbytes': 2, 'constant': 0x200}) return self.__field_write.getvalue() def __setfield_write(self, value): if isinstance(value,UINT): self.__field_write=value else: self.__field_write=UINT(value,**{'sizeinbytes': 2, 'constant': 0x200}) def __delfield_write(self): del self.__field_write write=property(__getfield_write, __setfield_write, __delfield_write, None) def __getfield_data_type(self): try: self.__field_data_type except: self.__field_data_type=UINT(**{'sizeinbytes': 2, 'constant': 0x04}) return self.__field_data_type.getvalue() def __setfield_data_type(self, value): if isinstance(value,UINT): self.__field_data_type=value else: self.__field_data_type=UINT(value,**{'sizeinbytes': 2, 'constant': 0x04}) def __delfield_data_type(self): del self.__field_data_type data_type=property(__getfield_data_type, __setfield_data_type, __delfield_data_type, None) def __getfield_entry_index(self): return self.__field_entry_index.getvalue() def __setfield_entry_index(self, value): if isinstance(value,UINT): self.__field_entry_index=value else: self.__field_entry_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_entry_index(self): del self.__field_entry_index entry_index=property(__getfield_entry_index, __setfield_entry_index, __delfield_entry_index, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UINT): self.__field_pad=value else: self.__field_pad=UINT(value,**{'sizeinbytes': 2, 'constant': 0x00}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('cmd', self.__field_cmd, None) yield ('write', self.__field_write, None) yield ('data_type', self.__field_data_type, None) yield ('entry_index', self.__field_entry_index, None) yield ('pad', self.__field_pad, None) class tosh_modifypbentryresponse(BaseProtogenClass): __fields=['header', 'cmd', 'swap_ok'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(tosh_modifypbentryresponse,self).__init__(**dict) if self.__class__ is tosh_modifypbentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(tosh_modifypbentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(tosh_modifypbentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=tosh_swapheaderresponse() self.__field_header.writetobuffer(buf) try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x02}) self.__field_cmd.writetobuffer(buf) self.__field_swap_ok.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=tosh_swapheaderresponse() self.__field_header.readfrombuffer(buf) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x02}) self.__field_cmd.readfrombuffer(buf) self.__field_swap_ok=UINT(**{'sizeinbytes': 4}) self.__field_swap_ok.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=tosh_swapheaderresponse() return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,tosh_swapheaderresponse): self.__field_header=value else: self.__field_header=tosh_swapheaderresponse(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x02}) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'constant': 0x02}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_swap_ok(self): return self.__field_swap_ok.getvalue() def __setfield_swap_ok(self, value): if isinstance(value,UINT): self.__field_swap_ok=value else: self.__field_swap_ok=UINT(value,**{'sizeinbytes': 4}) def __delfield_swap_ok(self): del self.__field_swap_ok swap_ok=property(__getfield_swap_ok, __setfield_swap_ok, __delfield_swap_ok, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('cmd', self.__field_cmd, None) yield ('swap_ok', self.__field_swap_ok, None) class tosh_enableswapdatarequest(BaseProtogenClass): __fields=['header'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(tosh_enableswapdatarequest,self).__init__(**dict) if self.__class__ is tosh_enableswapdatarequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(tosh_enableswapdatarequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(tosh_enableswapdatarequest,kwargs) if len(args): dict2={'command': 0x00} dict2.update(kwargs) kwargs=dict2 self.__field_header=tosh_swapheaderrequest(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=tosh_swapheaderrequest(**{'command': 0x00}) self.__field_header.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=tosh_swapheaderrequest(**{'command': 0x00}) self.__field_header.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=tosh_swapheaderrequest(**{'command': 0x00}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,tosh_swapheaderrequest): self.__field_header=value else: self.__field_header=tosh_swapheaderrequest(value,**{'command': 0x00}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) class tosh_enableswapdataresponse(BaseProtogenClass): __fields=['header', 'cmd3', 'cmd4'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(tosh_enableswapdataresponse,self).__init__(**dict) if self.__class__ is tosh_enableswapdataresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(tosh_enableswapdataresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(tosh_enableswapdataresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=tosh_swapheaderresponse() self.__field_header.writetobuffer(buf) try: self.__field_cmd3 except: self.__field_cmd3=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_cmd3.writetobuffer(buf) try: self.__field_cmd4 except: self.__field_cmd4=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) self.__field_cmd4.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=tosh_swapheaderresponse() self.__field_header.readfrombuffer(buf) self.__field_cmd3=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_cmd3.readfrombuffer(buf) self.__field_cmd4=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) self.__field_cmd4.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=tosh_swapheaderresponse() return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,tosh_swapheaderresponse): self.__field_header=value else: self.__field_header=tosh_swapheaderresponse(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_cmd3(self): try: self.__field_cmd3 except: self.__field_cmd3=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) return self.__field_cmd3.getvalue() def __setfield_cmd3(self, value): if isinstance(value,UINT): self.__field_cmd3=value else: self.__field_cmd3=UINT(value,**{'sizeinbytes': 1, 'constant': 0x00}) def __delfield_cmd3(self): del self.__field_cmd3 cmd3=property(__getfield_cmd3, __setfield_cmd3, __delfield_cmd3, None) def __getfield_cmd4(self): try: self.__field_cmd4 except: self.__field_cmd4=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) return self.__field_cmd4.getvalue() def __setfield_cmd4(self, value): if isinstance(value,UINT): self.__field_cmd4=value else: self.__field_cmd4=UINT(value,**{'sizeinbytes': 2, 'constant': 0x00}) def __delfield_cmd4(self): del self.__field_cmd4 cmd4=property(__getfield_cmd4, __setfield_cmd4, __delfield_cmd4, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('cmd3', self.__field_cmd3, None) yield ('cmd4', self.__field_cmd4, None) class tosh_disableswapdatarequest(BaseProtogenClass): __fields=['header'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(tosh_disableswapdatarequest,self).__init__(**dict) if self.__class__ is tosh_disableswapdatarequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(tosh_disableswapdatarequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(tosh_disableswapdatarequest,kwargs) if len(args): dict2={'command': 0x01} dict2.update(kwargs) kwargs=dict2 self.__field_header=tosh_swapheaderrequest(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=tosh_swapheaderrequest(**{'command': 0x01}) self.__field_header.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=tosh_swapheaderrequest(**{'command': 0x01}) self.__field_header.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=tosh_swapheaderrequest(**{'command': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,tosh_swapheaderrequest): self.__field_header=value else: self.__field_header=tosh_swapheaderrequest(value,**{'command': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) class tosh_disableswapdataresponse(BaseProtogenClass): __fields=['header', 'cmd3', 'cmd4'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(tosh_disableswapdataresponse,self).__init__(**dict) if self.__class__ is tosh_disableswapdataresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(tosh_disableswapdataresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(tosh_disableswapdataresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=tosh_swapheaderresponse() self.__field_header.writetobuffer(buf) try: self.__field_cmd3 except: self.__field_cmd3=UINT(**{'sizeinbytes': 1, 'constant': 0x01}) self.__field_cmd3.writetobuffer(buf) try: self.__field_cmd4 except: self.__field_cmd4=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) self.__field_cmd4.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=tosh_swapheaderresponse() self.__field_header.readfrombuffer(buf) self.__field_cmd3=UINT(**{'sizeinbytes': 1, 'constant': 0x01}) self.__field_cmd3.readfrombuffer(buf) self.__field_cmd4=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) self.__field_cmd4.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=tosh_swapheaderresponse() return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,tosh_swapheaderresponse): self.__field_header=value else: self.__field_header=tosh_swapheaderresponse(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_cmd3(self): try: self.__field_cmd3 except: self.__field_cmd3=UINT(**{'sizeinbytes': 1, 'constant': 0x01}) return self.__field_cmd3.getvalue() def __setfield_cmd3(self, value): if isinstance(value,UINT): self.__field_cmd3=value else: self.__field_cmd3=UINT(value,**{'sizeinbytes': 1, 'constant': 0x01}) def __delfield_cmd3(self): del self.__field_cmd3 cmd3=property(__getfield_cmd3, __setfield_cmd3, __delfield_cmd3, None) def __getfield_cmd4(self): try: self.__field_cmd4 except: self.__field_cmd4=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) return self.__field_cmd4.getvalue() def __setfield_cmd4(self, value): if isinstance(value,UINT): self.__field_cmd4=value else: self.__field_cmd4=UINT(value,**{'sizeinbytes': 2, 'constant': 0x00}) def __delfield_cmd4(self): del self.__field_cmd4 cmd4=property(__getfield_cmd4, __setfield_cmd4, __delfield_cmd4, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('cmd3', self.__field_cmd3, None) yield ('cmd4', self.__field_cmd4, None) class tosh_getunknownrecordrequest(BaseProtogenClass): __fields=['header', 'data_type', 'pad', 'cmd', 'data_index', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(tosh_getunknownrecordrequest,self).__init__(**dict) if self.__class__ is tosh_getunknownrecordrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(tosh_getunknownrecordrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(tosh_getunknownrecordrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=tosh_swapheaderrequest(**{'command': 0x02}) self.__field_header.writetobuffer(buf) self.__field_data_type.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) self.__field_pad.writetobuffer(buf) try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) self.__field_cmd.writetobuffer(buf) self.__field_data_index.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=tosh_swapheaderrequest(**{'command': 0x02}) self.__field_header.readfrombuffer(buf) self.__field_data_type=UINT(**{'sizeinbytes': 2}) self.__field_data_type.readfrombuffer(buf) self.__field_pad=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) self.__field_pad.readfrombuffer(buf) self.__field_cmd=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) self.__field_cmd.readfrombuffer(buf) self.__field_data_index=UINT(**{'sizeinbytes': 2}) self.__field_data_index.readfrombuffer(buf) self.__field_pad=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=tosh_swapheaderrequest(**{'command': 0x02}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,tosh_swapheaderrequest): self.__field_header=value else: self.__field_header=tosh_swapheaderrequest(value,**{'command': 0x02}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_data_type(self): return self.__field_data_type.getvalue() def __setfield_data_type(self, value): if isinstance(value,UINT): self.__field_data_type=value else: self.__field_data_type=UINT(value,**{'sizeinbytes': 2}) def __delfield_data_type(self): del self.__field_data_type data_type=property(__getfield_data_type, __setfield_data_type, __delfield_data_type, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UINT): self.__field_pad=value else: self.__field_pad=UINT(value,**{'sizeinbytes': 2, 'constant': 0x00}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 2, 'constant': 0x00}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_data_index(self): return self.__field_data_index.getvalue() def __setfield_data_index(self, value): if isinstance(value,UINT): self.__field_data_index=value else: self.__field_data_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_data_index(self): del self.__field_data_index data_index=property(__getfield_data_index, __setfield_data_index, __delfield_data_index, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UINT): self.__field_pad=value else: self.__field_pad=UINT(value,**{'sizeinbytes': 2, 'constant': 0x00}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('data_type', self.__field_data_type, None) yield ('pad', self.__field_pad, None) yield ('cmd', self.__field_cmd, None) yield ('data_index', self.__field_data_index, None) yield ('pad', self.__field_pad, None) class tosh_getunknownrecordresponse(BaseProtogenClass): __fields=['header', 'data'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(tosh_getunknownrecordresponse,self).__init__(**dict) if self.__class__ is tosh_getunknownrecordresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(tosh_getunknownrecordresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(tosh_getunknownrecordresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=tosh_swapheaderresponse() self.__field_header.writetobuffer(buf) try: self.__field_data except: self.__field_data=DATA() self.__field_data.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=tosh_swapheaderresponse() self.__field_header.readfrombuffer(buf) self.__field_data=DATA() self.__field_data.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=tosh_swapheaderresponse() return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,tosh_swapheaderresponse): self.__field_header=value else: self.__field_header=tosh_swapheaderresponse(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_data(self): try: self.__field_data except: self.__field_data=DATA() return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,DATA): self.__field_data=value else: self.__field_data=DATA(value,) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('data', self.__field_data, None) bitpim-1.0.7+dfsg1/src/phones/p_lgtm520.py0000644001616600161660000011465310466234100016323 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG TM520""" from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb class pbreadentryresponse(BaseProtogenClass): "Results of reading one entry" __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbreadentryresponse,self).__init__(**dict) if self.__class__ is pbreadentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbreadentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbreadentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbupdateentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbupdateentryrequest,self).__init__(**dict) if self.__class__ is pbupdateentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbupdateentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbupdateentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x04, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbappendentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbappendentryrequest,self).__init__(**dict) if self.__class__ is pbappendentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbappendentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbappendentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x03, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class numentry(BaseProtogenClass): __fields=['number', 'chksum'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(numentry,self).__init__(**dict) if self.__class__ is numentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(numentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(numentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self.__field_chksum.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=USTRING(**{'sizeinbytes': 33, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self.__field_chksum=UINT(**{'sizeinbytes': 1}) self.__field_chksum.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 33, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_chksum(self): return self.__field_chksum.getvalue() def __setfield_chksum(self, value): if isinstance(value,UINT): self.__field_chksum=value else: self.__field_chksum=UINT(value,**{'sizeinbytes': 1}) def __delfield_chksum(self): del self.__field_chksum chksum=property(__getfield_chksum, __setfield_chksum, __delfield_chksum, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) yield ('chksum', self.__field_chksum, None) class pbentry(BaseProtogenClass): "Results of reading one entry" __fields=['numberofemails', 'numberofphonenumbers', 'serial1', 'entrysize', 'serial2', 'entrynumber', 'name', 'secret', 'default', 'numbers', 'ringtone', 'voicetag', 'email'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_numberofemails except: self.__field_numberofemails=UINT(**{'constant': 1}) try: self.__field_numberofphonenumbers except: self.__field_numberofphonenumbers=UINT(**{'constant': 5}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_serial1.writetobuffer(buf) try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0xf5}) self.__field_entrysize.writetobuffer(buf) self.__field_serial2.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_secret.writetobuffer(buf) self.__field_default.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'length': self.numberofphonenumbers, 'elementclass': numentry, 'createdefault': True}) self.__field_numbers.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_voicetag.writetobuffer(buf) try: self.__field_email except: self.__field_email=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_email.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0xf5}) self.__field_entrysize.readfrombuffer(buf) self.__field_serial2=UINT(**{'sizeinbytes': 4}) self.__field_serial2.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 1}) self.__field_entrynumber.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 17, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_secret=BOOL(**{'sizeinbytes': 1}) self.__field_secret.readfrombuffer(buf) self.__field_default=UINT(**{'sizeinbytes': 1}) self.__field_default.readfrombuffer(buf) self.__field_numbers=LIST(**{'length': self.numberofphonenumbers, 'elementclass': numentry, 'createdefault': True}) self.__field_numbers.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_voicetag=BOOL(**{'sizeinbytes': 1}) self.__field_voicetag.readfrombuffer(buf) self.__field_email=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_email.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numberofemails(self): return self.__field_numberofemails.getvalue() def __setfield_numberofemails(self, value): if isinstance(value,UINT): self.__field_numberofemails=value else: self.__field_numberofemails=UINT(value,**{'constant': 1}) def __delfield_numberofemails(self): del self.__field_numberofemails numberofemails=property(__getfield_numberofemails, __setfield_numberofemails, __delfield_numberofemails, None) def __getfield_numberofphonenumbers(self): return self.__field_numberofphonenumbers.getvalue() def __setfield_numberofphonenumbers(self, value): if isinstance(value,UINT): self.__field_numberofphonenumbers=value else: self.__field_numberofphonenumbers=UINT(value,**{'constant': 5}) def __delfield_numberofphonenumbers(self): del self.__field_numberofphonenumbers numberofphonenumbers=property(__getfield_numberofphonenumbers, __setfield_numberofphonenumbers, __delfield_numberofphonenumbers, None) def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, " == order created") def __getfield_entrysize(self): try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0xf5}) return self.__field_entrysize.getvalue() def __setfield_entrysize(self, value): if isinstance(value,UINT): self.__field_entrysize=value else: self.__field_entrysize=UINT(value,**{'sizeinbytes': 2, 'constant': 0xf5}) def __delfield_entrysize(self): del self.__field_entrysize entrysize=property(__getfield_entrysize, __setfield_entrysize, __delfield_entrysize, None) def __getfield_serial2(self): return self.__field_serial2.getvalue() def __setfield_serial2(self, value): if isinstance(value,UINT): self.__field_serial2=value else: self.__field_serial2=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial2(self): del self.__field_serial2 serial2=property(__getfield_serial2, __setfield_serial2, __delfield_serial2, "Same as serial1") def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 1}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 17, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_secret(self): return self.__field_secret.getvalue() def __setfield_secret(self, value): if isinstance(value,BOOL): self.__field_secret=value else: self.__field_secret=BOOL(value,**{'sizeinbytes': 1}) def __delfield_secret(self): del self.__field_secret secret=property(__getfield_secret, __setfield_secret, __delfield_secret, None) def __getfield_default(self): return self.__field_default.getvalue() def __setfield_default(self, value): if isinstance(value,UINT): self.__field_default=value else: self.__field_default=UINT(value,**{'sizeinbytes': 1}) def __delfield_default(self): del self.__field_default default=property(__getfield_default, __setfield_default, __delfield_default, "Default number") def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'length': self.numberofphonenumbers, 'elementclass': numentry, 'createdefault': True}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'length': self.numberofphonenumbers, 'elementclass': numentry, 'createdefault': True}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "ringtone index for a call, 0x17 for custom") def __getfield_voicetag(self): return self.__field_voicetag.getvalue() def __setfield_voicetag(self, value): if isinstance(value,BOOL): self.__field_voicetag=value else: self.__field_voicetag=BOOL(value,**{'sizeinbytes': 1}) def __delfield_voicetag(self): del self.__field_voicetag voicetag=property(__getfield_voicetag, __setfield_voicetag, __delfield_voicetag, None) def __getfield_email(self): try: self.__field_email except: self.__field_email=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def iscontainer(self): return True def containerelements(self): yield ('numberofemails', self.__field_numberofemails, None) yield ('numberofphonenumbers', self.__field_numberofphonenumbers, None) yield ('serial1', self.__field_serial1, " == order created") yield ('entrysize', self.__field_entrysize, None) yield ('serial2', self.__field_serial2, "Same as serial1") yield ('entrynumber', self.__field_entrynumber, None) yield ('name', self.__field_name, None) yield ('secret', self.__field_secret, None) yield ('default', self.__field_default, "Default number") yield ('numbers', self.__field_numbers, None) yield ('ringtone', self.__field_ringtone, "ringtone index for a call, 0x17 for custom") yield ('voicetag', self.__field_voicetag, None) yield ('email', self.__field_email, None) class ringentry(BaseProtogenClass): __fields=['index', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ringentry,self).__init__(**dict) if self.__class__ is ringentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ringentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ringentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 1}) self.__field_index.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 40, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 1}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, "Phonebook entry number") def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 40, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, "Path of custom ringer, or default") def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, "Phonebook entry number") yield ('name', self.__field_name, "Path of custom ringer, or default") class ringindex(BaseProtogenClass): __fields=['maxitems', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ringindex,self).__init__(**dict) if self.__class__ is ringindex: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ringindex,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ringindex,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_maxitems except: self.__field_maxitems=UINT(**{'constant': 199}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'length': self.maxitems, 'elementclass': ringentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'length': self.maxitems, 'elementclass': ringentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_maxitems(self): return self.__field_maxitems.getvalue() def __setfield_maxitems(self, value): if isinstance(value,UINT): self.__field_maxitems=value else: self.__field_maxitems=UINT(value,**{'constant': 199}) def __delfield_maxitems(self): del self.__field_maxitems maxitems=property(__getfield_maxitems, __setfield_maxitems, __delfield_maxitems, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'length': self.maxitems, 'elementclass': ringentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'length': self.maxitems, 'elementclass': ringentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('maxitems', self.__field_maxitems, None) yield ('items', self.__field_items, None) class scheduleevent(BaseProtogenClass): __fields=['state', 'pos', 'alarm', 'date', 'repeat', 'description'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleevent,self).__init__(**dict) if self.__class__ is scheduleevent: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleevent,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleevent,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_state.writetobuffer(buf) self.__field_pos.writetobuffer(buf) self.__field_alarm.writetobuffer(buf) self.__field_date.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) self.__field_description.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_state=UINT(**{'sizeinbytes': 1}) self.__field_state.readfrombuffer(buf) self.__field_pos=UINT(**{'sizeinbytes': 1}) self.__field_pos.readfrombuffer(buf) self.__field_alarm=UINT(**{'sizeinbytes': 1}) self.__field_alarm.readfrombuffer(buf) self.__field_date=UINT(**{'sizeinbytes': 4}) self.__field_date.readfrombuffer(buf) self.__field_repeat=UINT(**{'sizeinbytes': 1}) self.__field_repeat.readfrombuffer(buf) self.__field_description=USTRING(**{'sizeinbytes': 32, 'raiseonunterminatedread': False}) self.__field_description.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_state(self): return self.__field_state.getvalue() def __setfield_state(self, value): if isinstance(value,UINT): self.__field_state=value else: self.__field_state=UINT(value,**{'sizeinbytes': 1}) def __delfield_state(self): del self.__field_state state=property(__getfield_state, __setfield_state, __delfield_state, "02 for an new entry, 01 for a modified entry, 00 for blank entry") def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 1}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "position within file, used as an event id") def __getfield_alarm(self): return self.__field_alarm.getvalue() def __setfield_alarm(self, value): if isinstance(value,UINT): self.__field_alarm=value else: self.__field_alarm=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarm(self): del self.__field_alarm alarm=property(__getfield_alarm, __setfield_alarm, __delfield_alarm, "00 => created, 80 => modified/never been used, B0 => alarm") def __getfield_date(self): return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,UINT): self.__field_date=value else: self.__field_date=UINT(value,**{'sizeinbytes': 4}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,UINT): self.__field_repeat=value else: self.__field_repeat=UINT(value,**{'sizeinbytes': 1}) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, "01 => used, 02 => daily") def __getfield_description(self): return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,USTRING): self.__field_description=value else: self.__field_description=USTRING(value,**{'sizeinbytes': 32, 'raiseonunterminatedread': False}) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def iscontainer(self): return True def containerelements(self): yield ('state', self.__field_state, "02 for an new entry, 01 for a modified entry, 00 for blank entry") yield ('pos', self.__field_pos, "position within file, used as an event id") yield ('alarm', self.__field_alarm, "00 => created, 80 => modified/never been used, B0 => alarm") yield ('date', self.__field_date, None) yield ('repeat', self.__field_repeat, "01 => used, 02 => daily") yield ('description', self.__field_description, None) class schedulefile(BaseProtogenClass): __fields=['events'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(schedulefile,self).__init__(**dict) if self.__class__ is schedulefile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(schedulefile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(schedulefile,kwargs) if len(args): dict2={'length': 50, 'elementclass': scheduleevent} dict2.update(kwargs) kwargs=dict2 self.__field_events=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_events except: self.__field_events=LIST(**{'length': 50, 'elementclass': scheduleevent}) self.__field_events.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_events=LIST(**{'length': 50, 'elementclass': scheduleevent}) self.__field_events.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{'length': 50, 'elementclass': scheduleevent}) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{'length': 50, 'elementclass': scheduleevent}) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def iscontainer(self): return True def containerelements(self): yield ('events', self.__field_events, None) bitpim-1.0.7+dfsg1/src/phones/p_motov710.py0000644001616600161660000021061710762160702016527 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Motorola phones""" from prototypes import * from prototypes_moto import * from p_etsi import * from p_moto import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb PB_TOTAL_GROUP=30 PB_GROUP_RANGE=xrange(1, PB_TOTAL_GROUP+1) PB_GROUP_NAME_LEN=24 RT_BUILTIN=0x0C RT_CUSTOM=0x0D RT_INDEX_FILE='/MyToneDB.db' RT_PATH='motorola/shared/audio' WP_PATH='motorola/shared/picture' WP_EXCLUDED_FILES=frozenset([]) # Calendar const CAL_TOTAL_ENTRIES=500 CAL_MAX_ENTRY=499 CAL_TOTAL_ENTRY_EXCEPTIONS=8 CAL_TITLE_LEN=64 CAL_REP_NONE=0 CAL_REP_DAILY=1 CAL_REP_WEEKLY=2 CAL_REP_MONTHLY=3 CAL_REP_MONTHLY_NTH=4 CAL_REP_YEARLY=5 CAL_ALARM_NOTIME='00:00' CAL_ALARM_NODATE='00-00-2000' class group_count_req(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(group_count_req,self).__init__(**dict) if self.__class__ is group_count_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(group_count_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(group_count_req,kwargs) if len(args): dict2={ 'quotechar': None, 'terminator': None, 'default': '+MPGR=?' } dict2.update(kwargs) kwargs=dict2 self.__field_command=CSVSTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MPGR=?' }) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MPGR=?' }) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MPGR=?' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None, 'default': '+MPGR=?' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class group_count_resp(BaseProtogenClass): __fields=['command', 'countstring', 'dontcare'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(group_count_resp,self).__init__(**dict) if self.__class__ is group_count_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(group_count_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(group_count_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_countstring.writetobuffer(buf) self.__field_dontcare.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': ord(' '), 'default': '+MPGR:' }) self.__field_command.readfrombuffer(buf) self.__field_countstring=CSVSTRING(**{ 'quotechar': None }) self.__field_countstring.readfrombuffer(buf) self.__field_dontcare=DATA() self.__field_dontcare.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': ord(' '), 'default': '+MPGR:' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_countstring(self): return self.__field_countstring.getvalue() def __setfield_countstring(self, value): if isinstance(value,CSVSTRING): self.__field_countstring=value else: self.__field_countstring=CSVSTRING(value,**{ 'quotechar': None }) def __delfield_countstring(self): del self.__field_countstring countstring=property(__getfield_countstring, __setfield_countstring, __delfield_countstring, None) def __getfield_dontcare(self): return self.__field_dontcare.getvalue() def __setfield_dontcare(self, value): if isinstance(value,DATA): self.__field_dontcare=value else: self.__field_dontcare=DATA(value,) def __delfield_dontcare(self): del self.__field_dontcare dontcare=property(__getfield_dontcare, __setfield_dontcare, __delfield_dontcare, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('countstring', self.__field_countstring, None) yield ('dontcare', self.__field_dontcare, None) class read_group_req(BaseProtogenClass): __fields=['command', 'start_index', 'end_index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(read_group_req,self).__init__(**dict) if self.__class__ is read_group_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(read_group_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(read_group_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MPGR=' }) self.__field_command.writetobuffer(buf) try: self.__field_start_index except: self.__field_start_index=CSVINT(**{ 'default': 1 }) self.__field_start_index.writetobuffer(buf) try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None, 'default': PB_TOTAL_GROUP }) self.__field_end_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MPGR=' }) self.__field_command.readfrombuffer(buf) self.__field_start_index=CSVINT(**{ 'default': 1 }) self.__field_start_index.readfrombuffer(buf) self.__field_end_index=CSVINT(**{ 'terminator': None, 'default': PB_TOTAL_GROUP }) self.__field_end_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MPGR=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None, 'default': '+MPGR=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_start_index(self): try: self.__field_start_index except: self.__field_start_index=CSVINT(**{ 'default': 1 }) return self.__field_start_index.getvalue() def __setfield_start_index(self, value): if isinstance(value,CSVINT): self.__field_start_index=value else: self.__field_start_index=CSVINT(value,**{ 'default': 1 }) def __delfield_start_index(self): del self.__field_start_index start_index=property(__getfield_start_index, __setfield_start_index, __delfield_start_index, None) def __getfield_end_index(self): try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None, 'default': PB_TOTAL_GROUP }) return self.__field_end_index.getvalue() def __setfield_end_index(self, value): if isinstance(value,CSVINT): self.__field_end_index=value else: self.__field_end_index=CSVINT(value,**{ 'terminator': None, 'default': PB_TOTAL_GROUP }) def __delfield_end_index(self): del self.__field_end_index end_index=property(__getfield_end_index, __setfield_end_index, __delfield_end_index, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('start_index', self.__field_start_index, None) yield ('end_index', self.__field_end_index, None) class read_group_resp(BaseProtogenClass): __fields=['command', 'index', 'name', 'ringtone', 'dunno'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(read_group_resp,self).__init__(**dict) if self.__class__ is read_group_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(read_group_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(read_group_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_dunno.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': ord(' '), 'default': '+MPGR:' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT() self.__field_index.readfrombuffer(buf) self.__field_name=CSVSTRING() self.__field_name.readfrombuffer(buf) self.__field_ringtone=CSVINT() self.__field_ringtone.readfrombuffer(buf) self.__field_dunno=DATA() self.__field_dunno.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': ord(' '), 'default': '+MPGR:' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,CSVSTRING): self.__field_name=value else: self.__field_name=CSVSTRING(value,) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,CSVINT): self.__field_ringtone=value else: self.__field_ringtone=CSVINT(value,) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_dunno(self): return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,DATA): self.__field_dunno=value else: self.__field_dunno=DATA(value,) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) yield ('name', self.__field_name, None) yield ('ringtone', self.__field_ringtone, None) yield ('dunno', self.__field_dunno, None) class del_group_req(BaseProtogenClass): __fields=['command', 'index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(del_group_req,self).__init__(**dict) if self.__class__ is del_group_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(del_group_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(del_group_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MPGW=' }) self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MPGW=' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT(**{ 'terminator': None }) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MPGW=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None, 'default': '+MPGW=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,**{ 'terminator': None }) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) class write_group_req(BaseProtogenClass): __fields=['command', 'index', 'name', 'ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(write_group_req,self).__init__(**dict) if self.__class__ is write_group_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(write_group_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(write_group_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MPGW=' }) self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_name.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=CSVINT(**{ 'terminator': None, 'default': 255 }) self.__field_ringtone.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MPGW=' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT() self.__field_index.readfrombuffer(buf) self.__field_name=CSVSTRING(**{ 'maxsizeinbytes': PB_GROUP_NAME_LEN, 'raiseontruncate': False }) self.__field_name.readfrombuffer(buf) self.__field_ringtone=CSVINT(**{ 'terminator': None, 'default': 255 }) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MPGW=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None, 'default': '+MPGW=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,CSVSTRING): self.__field_name=value else: self.__field_name=CSVSTRING(value,**{ 'maxsizeinbytes': PB_GROUP_NAME_LEN, 'raiseontruncate': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=CSVINT(**{ 'terminator': None, 'default': 255 }) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,CSVINT): self.__field_ringtone=value else: self.__field_ringtone=CSVINT(value,**{ 'terminator': None, 'default': 255 }) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) yield ('name', self.__field_name, None) yield ('ringtone', self.__field_ringtone, None) class ringtone_index_entry(BaseProtogenClass): __fields=['read_mode', 'name', 'name', 'index', 'ringtone_type', 'dunno'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ringtone_index_entry,self).__init__(**dict) if self.__class__ is ringtone_index_entry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ringtone_index_entry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ringtone_index_entry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_read_mode except: self.__field_read_mode=BOOL(**{ 'default': True }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if self.read_mode: self.__field_name.writetobuffer(buf) if not self.read_mode: self.__field_name.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_ringtone_type.writetobuffer(buf) try: self.__field_dunno except: self.__field_dunno=DATA(**{'sizeinbytes': 6, 'default': '' }) self.__field_dunno.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) if self.read_mode: self.__field_name=DATA(**{'sizeinbytes': 508, 'pad': None }) self.__field_name.readfrombuffer(buf) if not self.read_mode: self.__field_name=DATA(**{'sizeinbytes': 508}) self.__field_name.readfrombuffer(buf) self.__field_index=UINT(**{'sizeinbytes': 1}) self.__field_index.readfrombuffer(buf) self.__field_ringtone_type=UINT(**{'sizeinbytes': 1}) self.__field_ringtone_type.readfrombuffer(buf) self.__field_dunno=DATA(**{'sizeinbytes': 6, 'default': '' }) self.__field_dunno.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_read_mode(self): try: self.__field_read_mode except: self.__field_read_mode=BOOL(**{ 'default': True }) return self.__field_read_mode.getvalue() def __setfield_read_mode(self, value): if isinstance(value,BOOL): self.__field_read_mode=value else: self.__field_read_mode=BOOL(value,**{ 'default': True }) def __delfield_read_mode(self): del self.__field_read_mode read_mode=property(__getfield_read_mode, __setfield_read_mode, __delfield_read_mode, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,DATA): self.__field_name=value else: self.__field_name=DATA(value,**{'sizeinbytes': 508, 'pad': None }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,DATA): self.__field_name=value else: self.__field_name=DATA(value,**{'sizeinbytes': 508}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 1}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_ringtone_type(self): return self.__field_ringtone_type.getvalue() def __setfield_ringtone_type(self, value): if isinstance(value,UINT): self.__field_ringtone_type=value else: self.__field_ringtone_type=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone_type(self): del self.__field_ringtone_type ringtone_type=property(__getfield_ringtone_type, __setfield_ringtone_type, __delfield_ringtone_type, None) def __getfield_dunno(self): try: self.__field_dunno except: self.__field_dunno=DATA(**{'sizeinbytes': 6, 'default': '' }) return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,DATA): self.__field_dunno=value else: self.__field_dunno=DATA(value,**{'sizeinbytes': 6, 'default': '' }) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def iscontainer(self): return True def containerelements(self): yield ('read_mode', self.__field_read_mode, None) if self.read_mode: yield ('name', self.__field_name, None) if not self.read_mode: yield ('name', self.__field_name, None) yield ('index', self.__field_index, None) yield ('ringtone_type', self.__field_ringtone_type, None) yield ('dunno', self.__field_dunno, None) class ringtone_index_file(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ringtone_index_file,self).__init__(**dict) if self.__class__ is ringtone_index_file: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ringtone_index_file,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ringtone_index_file,kwargs) if len(args): dict2={ 'elementclass': ringtone_index_entry, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': ringtone_index_entry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': ringtone_index_entry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': ringtone_index_entry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': ringtone_index_entry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class calendar_lock_req(BaseProtogenClass): __fields=['command', 'lock'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(calendar_lock_req,self).__init__(**dict) if self.__class__ is calendar_lock_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(calendar_lock_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(calendar_lock_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MDBL=' }) self.__field_command.writetobuffer(buf) self.__field_lock.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MDBL=' }) self.__field_command.readfrombuffer(buf) self.__field_lock=CSVINT(**{ 'terminator': None }) self.__field_lock.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MDBL=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None, 'default': '+MDBL=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_lock(self): return self.__field_lock.getvalue() def __setfield_lock(self, value): if isinstance(value,CSVINT): self.__field_lock=value else: self.__field_lock=CSVINT(value,**{ 'terminator': None }) def __delfield_lock(self): del self.__field_lock lock=property(__getfield_lock, __setfield_lock, __delfield_lock, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('lock', self.__field_lock, None) class calendar_read_req(BaseProtogenClass): __fields=['command', 'start_index', 'end_index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(calendar_read_req,self).__init__(**dict) if self.__class__ is calendar_read_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(calendar_read_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(calendar_read_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MDBR=' }) self.__field_command.writetobuffer(buf) try: self.__field_start_index except: self.__field_start_index=CSVINT(**{ 'default': 0 }) self.__field_start_index.writetobuffer(buf) try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None, 'default': CAL_MAX_ENTRY }) self.__field_end_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MDBR=' }) self.__field_command.readfrombuffer(buf) self.__field_start_index=CSVINT(**{ 'default': 0 }) self.__field_start_index.readfrombuffer(buf) self.__field_end_index=CSVINT(**{ 'terminator': None, 'default': CAL_MAX_ENTRY }) self.__field_end_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MDBR=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None, 'default': '+MDBR=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_start_index(self): try: self.__field_start_index except: self.__field_start_index=CSVINT(**{ 'default': 0 }) return self.__field_start_index.getvalue() def __setfield_start_index(self, value): if isinstance(value,CSVINT): self.__field_start_index=value else: self.__field_start_index=CSVINT(value,**{ 'default': 0 }) def __delfield_start_index(self): del self.__field_start_index start_index=property(__getfield_start_index, __setfield_start_index, __delfield_start_index, None) def __getfield_end_index(self): try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None, 'default': CAL_MAX_ENTRY }) return self.__field_end_index.getvalue() def __setfield_end_index(self, value): if isinstance(value,CSVINT): self.__field_end_index=value else: self.__field_end_index=CSVINT(value,**{ 'terminator': None, 'default': CAL_MAX_ENTRY }) def __delfield_end_index(self): del self.__field_end_index end_index=property(__getfield_end_index, __setfield_end_index, __delfield_end_index, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('start_index', self.__field_start_index, None) yield ('end_index', self.__field_end_index, None) class calendar_req_resp(BaseProtogenClass): __fields=['command', 'index', 'title', 'alarm_timed', 'alarm_enabled', 'start_time', 'start_date', 'duration', 'alarm_time', 'alarm_date', 'repeat_type', 'ex_event', 'ex_event_flag'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(calendar_req_resp,self).__init__(**dict) if self.__class__ is calendar_req_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(calendar_req_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(calendar_req_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) if self.command=='+MDBR:': self.__field_title.writetobuffer(buf) self.__field_alarm_timed.writetobuffer(buf) self.__field_alarm_enabled.writetobuffer(buf) self.__field_start_time.writetobuffer(buf) self.__field_start_date.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_alarm_time.writetobuffer(buf) self.__field_alarm_date.writetobuffer(buf) self.__field_repeat_type.writetobuffer(buf) if self.command=='+MDBRE:': self.__field_ex_event.writetobuffer(buf) self.__field_ex_event_flag.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': ord(' '), 'default': '+MDBR:' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT() self.__field_index.readfrombuffer(buf) if self.command=='+MDBR:': self.__field_title=CSVSTRING() self.__field_title.readfrombuffer(buf) self.__field_alarm_timed=CSVINT() self.__field_alarm_timed.readfrombuffer(buf) self.__field_alarm_enabled=CSVINT() self.__field_alarm_enabled.readfrombuffer(buf) self.__field_start_time=CAL_TIME() self.__field_start_time.readfrombuffer(buf) self.__field_start_date=CAL_DATE() self.__field_start_date.readfrombuffer(buf) self.__field_duration=CSVINT() self.__field_duration.readfrombuffer(buf) self.__field_alarm_time=CAL_TIME() self.__field_alarm_time.readfrombuffer(buf) self.__field_alarm_date=CAL_DATE() self.__field_alarm_date.readfrombuffer(buf) self.__field_repeat_type=CSVINT(**{ 'terminator': None }) self.__field_repeat_type.readfrombuffer(buf) if self.command=='+MDBRE:': self.__field_ex_event=CSVINT() self.__field_ex_event.readfrombuffer(buf) self.__field_ex_event_flag=CSVINT(**{ 'terminator': None }) self.__field_ex_event_flag.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': ord(' '), 'default': '+MDBR:' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_title(self): return self.__field_title.getvalue() def __setfield_title(self, value): if isinstance(value,CSVSTRING): self.__field_title=value else: self.__field_title=CSVSTRING(value,) def __delfield_title(self): del self.__field_title title=property(__getfield_title, __setfield_title, __delfield_title, None) def __getfield_alarm_timed(self): return self.__field_alarm_timed.getvalue() def __setfield_alarm_timed(self, value): if isinstance(value,CSVINT): self.__field_alarm_timed=value else: self.__field_alarm_timed=CSVINT(value,) def __delfield_alarm_timed(self): del self.__field_alarm_timed alarm_timed=property(__getfield_alarm_timed, __setfield_alarm_timed, __delfield_alarm_timed, None) def __getfield_alarm_enabled(self): return self.__field_alarm_enabled.getvalue() def __setfield_alarm_enabled(self, value): if isinstance(value,CSVINT): self.__field_alarm_enabled=value else: self.__field_alarm_enabled=CSVINT(value,) def __delfield_alarm_enabled(self): del self.__field_alarm_enabled alarm_enabled=property(__getfield_alarm_enabled, __setfield_alarm_enabled, __delfield_alarm_enabled, None) def __getfield_start_time(self): return self.__field_start_time.getvalue() def __setfield_start_time(self, value): if isinstance(value,CAL_TIME): self.__field_start_time=value else: self.__field_start_time=CAL_TIME(value,) def __delfield_start_time(self): del self.__field_start_time start_time=property(__getfield_start_time, __setfield_start_time, __delfield_start_time, None) def __getfield_start_date(self): return self.__field_start_date.getvalue() def __setfield_start_date(self, value): if isinstance(value,CAL_DATE): self.__field_start_date=value else: self.__field_start_date=CAL_DATE(value,) def __delfield_start_date(self): del self.__field_start_date start_date=property(__getfield_start_date, __setfield_start_date, __delfield_start_date, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,CSVINT): self.__field_duration=value else: self.__field_duration=CSVINT(value,) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_alarm_time(self): return self.__field_alarm_time.getvalue() def __setfield_alarm_time(self, value): if isinstance(value,CAL_TIME): self.__field_alarm_time=value else: self.__field_alarm_time=CAL_TIME(value,) def __delfield_alarm_time(self): del self.__field_alarm_time alarm_time=property(__getfield_alarm_time, __setfield_alarm_time, __delfield_alarm_time, None) def __getfield_alarm_date(self): return self.__field_alarm_date.getvalue() def __setfield_alarm_date(self, value): if isinstance(value,CAL_DATE): self.__field_alarm_date=value else: self.__field_alarm_date=CAL_DATE(value,) def __delfield_alarm_date(self): del self.__field_alarm_date alarm_date=property(__getfield_alarm_date, __setfield_alarm_date, __delfield_alarm_date, None) def __getfield_repeat_type(self): return self.__field_repeat_type.getvalue() def __setfield_repeat_type(self, value): if isinstance(value,CSVINT): self.__field_repeat_type=value else: self.__field_repeat_type=CSVINT(value,**{ 'terminator': None }) def __delfield_repeat_type(self): del self.__field_repeat_type repeat_type=property(__getfield_repeat_type, __setfield_repeat_type, __delfield_repeat_type, None) def __getfield_ex_event(self): return self.__field_ex_event.getvalue() def __setfield_ex_event(self, value): if isinstance(value,CSVINT): self.__field_ex_event=value else: self.__field_ex_event=CSVINT(value,) def __delfield_ex_event(self): del self.__field_ex_event ex_event=property(__getfield_ex_event, __setfield_ex_event, __delfield_ex_event, None) def __getfield_ex_event_flag(self): return self.__field_ex_event_flag.getvalue() def __setfield_ex_event_flag(self, value): if isinstance(value,CSVINT): self.__field_ex_event_flag=value else: self.__field_ex_event_flag=CSVINT(value,**{ 'terminator': None }) def __delfield_ex_event_flag(self): del self.__field_ex_event_flag ex_event_flag=property(__getfield_ex_event_flag, __setfield_ex_event_flag, __delfield_ex_event_flag, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) if self.command=='+MDBR:': yield ('title', self.__field_title, None) yield ('alarm_timed', self.__field_alarm_timed, None) yield ('alarm_enabled', self.__field_alarm_enabled, None) yield ('start_time', self.__field_start_time, None) yield ('start_date', self.__field_start_date, None) yield ('duration', self.__field_duration, None) yield ('alarm_time', self.__field_alarm_time, None) yield ('alarm_date', self.__field_alarm_date, None) yield ('repeat_type', self.__field_repeat_type, None) if self.command=='+MDBRE:': yield ('ex_event', self.__field_ex_event, None) yield ('ex_event_flag', self.__field_ex_event_flag, None) class calendar_write_req(BaseProtogenClass): __fields=['command', 'index', 'title', 'alarm_timed', 'alarm_enabled', 'start_time', 'start_date', 'duration', 'alarm_time', 'alarm_date', 'repeat_type'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(calendar_write_req,self).__init__(**dict) if self.__class__ is calendar_write_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(calendar_write_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(calendar_write_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MDBW=' }) self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_title.writetobuffer(buf) try: self.__field_alarm_timed except: self.__field_alarm_timed=CSVINT(**{ 'default': 0 }) self.__field_alarm_timed.writetobuffer(buf) try: self.__field_alarm_enabled except: self.__field_alarm_enabled=CSVINT(**{ 'default': 0 }) self.__field_alarm_enabled.writetobuffer(buf) self.__field_start_time.writetobuffer(buf) self.__field_start_date.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_alarm_time.writetobuffer(buf) self.__field_alarm_date.writetobuffer(buf) try: self.__field_repeat_type except: self.__field_repeat_type=CSVINT(**{ 'terminator': None, 'default': 0 }) self.__field_repeat_type.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MDBW=' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT() self.__field_index.readfrombuffer(buf) self.__field_title=CSVSTRING(**{'maxsizeinbytes': CAL_TITLE_LEN }) self.__field_title.readfrombuffer(buf) self.__field_alarm_timed=CSVINT(**{ 'default': 0 }) self.__field_alarm_timed.readfrombuffer(buf) self.__field_alarm_enabled=CSVINT(**{ 'default': 0 }) self.__field_alarm_enabled.readfrombuffer(buf) self.__field_start_time=CAL_TIME() self.__field_start_time.readfrombuffer(buf) self.__field_start_date=CAL_DATE() self.__field_start_date.readfrombuffer(buf) self.__field_duration=CSVINT() self.__field_duration.readfrombuffer(buf) self.__field_alarm_time=CAL_TIME() self.__field_alarm_time.readfrombuffer(buf) self.__field_alarm_date=CAL_DATE() self.__field_alarm_date.readfrombuffer(buf) self.__field_repeat_type=CSVINT(**{ 'terminator': None, 'default': 0 }) self.__field_repeat_type.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MDBW=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None, 'default': '+MDBW=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_title(self): return self.__field_title.getvalue() def __setfield_title(self, value): if isinstance(value,CSVSTRING): self.__field_title=value else: self.__field_title=CSVSTRING(value,**{'maxsizeinbytes': CAL_TITLE_LEN }) def __delfield_title(self): del self.__field_title title=property(__getfield_title, __setfield_title, __delfield_title, None) def __getfield_alarm_timed(self): try: self.__field_alarm_timed except: self.__field_alarm_timed=CSVINT(**{ 'default': 0 }) return self.__field_alarm_timed.getvalue() def __setfield_alarm_timed(self, value): if isinstance(value,CSVINT): self.__field_alarm_timed=value else: self.__field_alarm_timed=CSVINT(value,**{ 'default': 0 }) def __delfield_alarm_timed(self): del self.__field_alarm_timed alarm_timed=property(__getfield_alarm_timed, __setfield_alarm_timed, __delfield_alarm_timed, None) def __getfield_alarm_enabled(self): try: self.__field_alarm_enabled except: self.__field_alarm_enabled=CSVINT(**{ 'default': 0 }) return self.__field_alarm_enabled.getvalue() def __setfield_alarm_enabled(self, value): if isinstance(value,CSVINT): self.__field_alarm_enabled=value else: self.__field_alarm_enabled=CSVINT(value,**{ 'default': 0 }) def __delfield_alarm_enabled(self): del self.__field_alarm_enabled alarm_enabled=property(__getfield_alarm_enabled, __setfield_alarm_enabled, __delfield_alarm_enabled, None) def __getfield_start_time(self): return self.__field_start_time.getvalue() def __setfield_start_time(self, value): if isinstance(value,CAL_TIME): self.__field_start_time=value else: self.__field_start_time=CAL_TIME(value,) def __delfield_start_time(self): del self.__field_start_time start_time=property(__getfield_start_time, __setfield_start_time, __delfield_start_time, None) def __getfield_start_date(self): return self.__field_start_date.getvalue() def __setfield_start_date(self, value): if isinstance(value,CAL_DATE): self.__field_start_date=value else: self.__field_start_date=CAL_DATE(value,) def __delfield_start_date(self): del self.__field_start_date start_date=property(__getfield_start_date, __setfield_start_date, __delfield_start_date, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,CSVINT): self.__field_duration=value else: self.__field_duration=CSVINT(value,) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_alarm_time(self): return self.__field_alarm_time.getvalue() def __setfield_alarm_time(self, value): if isinstance(value,CAL_TIME): self.__field_alarm_time=value else: self.__field_alarm_time=CAL_TIME(value,) def __delfield_alarm_time(self): del self.__field_alarm_time alarm_time=property(__getfield_alarm_time, __setfield_alarm_time, __delfield_alarm_time, None) def __getfield_alarm_date(self): return self.__field_alarm_date.getvalue() def __setfield_alarm_date(self, value): if isinstance(value,CAL_DATE): self.__field_alarm_date=value else: self.__field_alarm_date=CAL_DATE(value,) def __delfield_alarm_date(self): del self.__field_alarm_date alarm_date=property(__getfield_alarm_date, __setfield_alarm_date, __delfield_alarm_date, None) def __getfield_repeat_type(self): try: self.__field_repeat_type except: self.__field_repeat_type=CSVINT(**{ 'terminator': None, 'default': 0 }) return self.__field_repeat_type.getvalue() def __setfield_repeat_type(self, value): if isinstance(value,CSVINT): self.__field_repeat_type=value else: self.__field_repeat_type=CSVINT(value,**{ 'terminator': None, 'default': 0 }) def __delfield_repeat_type(self): del self.__field_repeat_type repeat_type=property(__getfield_repeat_type, __setfield_repeat_type, __delfield_repeat_type, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) yield ('title', self.__field_title, None) yield ('alarm_timed', self.__field_alarm_timed, None) yield ('alarm_enabled', self.__field_alarm_enabled, None) yield ('start_time', self.__field_start_time, None) yield ('start_date', self.__field_start_date, None) yield ('duration', self.__field_duration, None) yield ('alarm_time', self.__field_alarm_time, None) yield ('alarm_date', self.__field_alarm_date, None) yield ('repeat_type', self.__field_repeat_type, None) class calendar_write_ex_req(BaseProtogenClass): __fields=['command', 'index', 'nth_event', 'ex_event_flag'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(calendar_write_ex_req,self).__init__(**dict) if self.__class__ is calendar_write_ex_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(calendar_write_ex_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(calendar_write_ex_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MDBWE=' }) self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_nth_event.writetobuffer(buf) try: self.__field_ex_event_flag except: self.__field_ex_event_flag=CSVINT(**{ 'terminator': None, 'default': 1 }) self.__field_ex_event_flag.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MDBWE=' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT() self.__field_index.readfrombuffer(buf) self.__field_nth_event=CSVINT() self.__field_nth_event.readfrombuffer(buf) self.__field_ex_event_flag=CSVINT(**{ 'terminator': None, 'default': 1 }) self.__field_ex_event_flag.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MDBWE=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None, 'default': '+MDBWE=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_nth_event(self): return self.__field_nth_event.getvalue() def __setfield_nth_event(self, value): if isinstance(value,CSVINT): self.__field_nth_event=value else: self.__field_nth_event=CSVINT(value,) def __delfield_nth_event(self): del self.__field_nth_event nth_event=property(__getfield_nth_event, __setfield_nth_event, __delfield_nth_event, None) def __getfield_ex_event_flag(self): try: self.__field_ex_event_flag except: self.__field_ex_event_flag=CSVINT(**{ 'terminator': None, 'default': 1 }) return self.__field_ex_event_flag.getvalue() def __setfield_ex_event_flag(self, value): if isinstance(value,CSVINT): self.__field_ex_event_flag=value else: self.__field_ex_event_flag=CSVINT(value,**{ 'terminator': None, 'default': 1 }) def __delfield_ex_event_flag(self): del self.__field_ex_event_flag ex_event_flag=property(__getfield_ex_event_flag, __setfield_ex_event_flag, __delfield_ex_event_flag, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) yield ('nth_event', self.__field_nth_event, None) yield ('ex_event_flag', self.__field_ex_event_flag, None) bitpim-1.0.7+dfsg1/src/phones/com_lgvi125.py0000644001616600161660000015405210661407437016652 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Andrew Zitnay ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgvi125.py 4365 2007-08-17 21:11:59Z djpham $ """Communicate with the LG VI125 cell phone""" # standard modules import datetime import re import time import cStringIO import sha # my modules import bpcalendar import common import commport import copy import p_lgvi125 import p_brew import com_brew import com_phone import com_lg import prototypes import fileinfo import call_history import sms class Phone(com_phone.Phone,com_brew.BrewProtocol,com_lg.LGPhonebook,com_lg.LGIndexedMedia): "Talk to the LG VI125 cell phone" desc="LG-VI125" wallpaperindexfilename="dloadindex/brewImageIndex.map" ringerindexfilename="dloadindex/brewRingerIndex.map" protocolclass=p_lgvi125 serialsname='lgvi125' imagelocations=( # offset, index file, files location, type, maximumentries ( 10, "dloadindex/brewImageIndex.map", "brew/shared", "images", 30), ) ringtonelocations=( # offset, index file, files location, type, maximumentries ( 50, "dloadindex/brewRingerIndex.map", "user/sound/ringer", "ringers", 30), ) builtinimages=('Balloons', 'Soccer', 'Basketball', 'Bird', 'Sunflower', 'Puppy', 'Mountain House', 'Beach') builtinringtones=( 'Ring 1', 'Ring 2', 'Ring 3', 'Ring 4', 'Ring 5', 'Ring 6', 'Alert 1', 'Alert 2', 'Alert 3', 'Alert 4', 'Alert 5', 'Alert 6', 'Moon light', 'Bumble Bee', 'Latin', 'Baroque', 'Lovable baby', 'LG sound', 'Love Song', 'Badinerie', 'Follow Me', 'Head & Shoulder', 'Lake Trance', 'Beethovan', 'Lets Play', 'Piano Concerto No.1', 'Pleasure', 'Leichte Kavallerie', 'Up & Down Melody', 'Vivaldi - Winter' ) def __init__(self, logtarget, commport): "Calls all the constructors and sets initial modes" com_phone.Phone.__init__(self, logtarget, commport) com_brew.BrewProtocol.__init__(self) com_lg.LGPhonebook.__init__(self) com_lg.LGIndexedMedia.__init__(self) self.log("Attempting to contact phone") self.mode=self.MODENONE self._cal_has_voice_id=hasattr(self.protocolclass, 'cal_has_voice_id') \ and self.protocolclass.cal_has_voice_id def getfundamentals(self, results): """Gets information fundamental to interopating with the phone and UI. Currently this is: - 'uniqueserial' a unique serial number representing the phone - 'groups' the phonebook groups - 'wallpaper-index' map index numbers to names - 'ringtone-index' map index numbers to ringtone names This method is called before we read the phonebook data or before we write phonebook data. """ # use a hash of ESN and other stuff (being paranoid) self.log("Retrieving fundamental phone information") self.log("Phone serial number") results['uniqueserial']=sha.new(self.getfilecontents("nvm/$SYS.ESN")).hexdigest() # now read groups self.log("Reading group information") buf=prototypes.buffer(self.getfilecontents("pim/pbookgroup.dat")) g=self.protocolclass.pbgroups() g.readfrombuffer(buf) self.logdata("Groups read", buf.getdata(), g) groups={} for i in range(len(g.groups)): if len(g.groups[i].name) and g.groups[i].number!=255: # sometimes have zero length names groups[g.groups[i].number]={ 'ring': g.groups[i].ring, 'name': g.groups[i].name } results['groups']=groups self.getwallpaperindices(results) self.getringtoneindices(results) self.log("Fundamentals retrieved") return results def savesms(self, result, merge): self._setquicktext(result) result['rebootphone']=True return result def _setquicktext(self, result): sf=self.protocolclass.sms_quick_text() quicktext=result.get('canned_msg', []) count=0 for entry in quicktext: if count < self.protocolclass.SMS_CANNED_MAX_ITEMS: sf.msgs.append(entry['text'][:self.protocolclass.SMS_CANNED_MAX_LENGTH-1]) count+=1 else: break if count!=0: # don't create the file if there are no entries buf=prototypes.buffer() sf.writetobuffer(buf) self.logdata("Writing calendar", buf.getvalue(), sf) self.writefile(self.protocolclass.SMS_CANNED_FILENAME, buf.getvalue()) return def getsms(self, result): # get the quicktext (LG name for canned messages) result['canned_msg']=self._getquicktext() result['sms']=self._readsms() return result def _readsms(self): res={} # go through the sms directory looking for messages for item in self.getfilesystem("sms").values(): if item['type']=='file': folder=None for f,pat in self.protocolclass.SMS_PATTERNS.items(): if pat.match(item['name']): folder=f break if folder: buf=prototypes.buffer(self.getfilecontents(item['name'], True)) self.logdata("SMS message file " +item['name'], buf.getdata()) if folder=='Inbox': sf=self.protocolclass.sms_in() sf.readfrombuffer(buf) entry=self._getinboxmessage(sf) res[entry.id]=entry elif folder=='Sent': sf=self.protocolclass.sms_out() sf.readfrombuffer(buf) entry=self._getoutboxmessage(sf) res[entry.id]=entry elif folder=='Saved': sf=self.protocolclass.sms_saved() sf.readfrombuffer(buf) if sf.outboxmsg: entry=self._getoutboxmessage(sf.outbox) else: entry=self._getinboxmessage(sf.inbox) entry.folder=entry.Folder_Saved res[entry.id]=entry return res def _getquicktext(self): quicks=[] try: buf=prototypes.buffer(self.getfilecontents("sms/mediacan000.dat")) sf=self.protocolclass.sms_quick_text() sf.readfrombuffer(buf) self.logdata("SMS quicktext file sms/mediacan000.dat", buf.getdata(), sf) for rec in sf.msgs: if rec.msg!="": quicks.append({ 'text': rec.msg, 'type': sms.CannedMsgEntry.user_type }) except com_brew.BrewNoSuchFileException: pass # do nothing if file doesn't exist return quicks def _getinboxmessage(self, sf): entry=sms.SMSEntry() entry.folder=entry.Folder_Inbox entry.datetime="%d%02d%02dT%02d%02d%02d" % (sf.GPStime) entry._from=self._getsender(sf.sender, sf.sender_length) entry.subject=sf.subject entry.locked=sf.locked if sf.priority==0: entry.priority=sms.SMSEntry.Priority_Normal else: entry.priority=sms.SMSEntry.Priority_High entry.read=sf.read txt="" if sf.num_msg_elements==1 and sf.bin_header1==0: txt=self._get_text_from_sms_msg_without_header(sf.msgs[0].msg, sf.msglengths[0].msglength) else: for i in range(sf.num_msg_elements): txt+=self._get_text_from_sms_msg_with_header(sf.msgs[i].msg, sf.msglengths[i].msglength) entry.text=unicode(txt, errors='ignore') entry.callback=sf.callback return entry def _getoutboxmessage(self, sf): entry=sms.SMSEntry() entry.folder=entry.Folder_Sent entry.datetime="%d%02d%02dT%02d%02d00" % ((sf.timesent)) # add all the recipients for r in sf.recipients: if r.number: confirmed=(r.status==5) confirmed_date=None if confirmed: confirmed_date="%d%02d%02dT%02d%02d00" % r.timereceived entry.add_recipient(r.number, confirmed, confirmed_date) entry.subject=sf.subject txt="" if sf.num_msg_elements==1 and not sf.messages[0].binary: txt=self._get_text_from_sms_msg_without_header(sf.messages[0].msg, sf.messages[0].length) else: for i in range(sf.num_msg_elements): txt+=self._get_text_from_sms_msg_with_header(sf.messages[i].msg, sf.messages[i].length) entry.text=unicode(txt, errors='ignore') if sf.priority==0: entry.priority=sms.SMSEntry.Priority_Normal else: entry.priority=sms.SMSEntry.Priority_High entry.locked=sf.locked entry.callback=sf.callback return entry def _get_text_from_sms_msg_without_header(self, msg, num_septets): out="" for i in range(num_septets): tmp = (msg[(i*7)/8].byte<<8) | msg[((i*7)/8) + 1].byte bit_index = 9 - ((i*7) % 8) out += chr((tmp >> bit_index) & 0x7f) return out def _get_text_from_sms_msg_with_header(self, msg, num_septets): data_len = ((msg[0].byte+1)*8+6)/7 seven_bits={} raw={} out={} # re-order the text into the correct order for separating into # 7-bit characters for i in range(0, (num_septets*7)/8+8, 7): for k in range(7): raw[i+6-k]=msg[i+k].byte # extract the 7-bit chars for i in range(num_septets+7): tmp = (raw[(i*7)/8]<<8) | raw[((i*7)/8) + 1] bit_index = 9 - ((i*7) % 8) seven_bits[i] = (tmp >> bit_index) & 0x7f # correct the byte order and remove the data portion of the message i=0 for i in range(0, num_septets+7, 8): for k in range(8): if(i+7-k-data_len>=0): if i+k1000: self.log("The phone is lying about how many entries are in the phonebook so we are doing it the hard way") numentries=0 firstserial=None loop=xrange(0,1000) hardway=True else: self.log("There are %d entries" % (numentries,)) loop=xrange(0, numentries) hardway=False # reset cursor self.sendpbcommand(self.protocolclass.pbinitrequest(), self.protocolclass.pbinitresponse) problemsdetected=False dupecheck={} for i in loop: if hardway: numentries+=1 req=self.protocolclass.pbreadentryrequest() res=self.sendpbcommand(req, self.protocolclass.pbreadentryresponse) self.log("Read entry "+`i`+" - "+res.entry.name) entry=self.extractphonebookentry(res.entry, result) if hardway and firstserial is None: firstserial=res.entry.serial1 pbook[i]=entry if res.entry.serial1 in dupecheck: self.log("Entry %s has same serial as entry %s. This will cause problems." % (`entry`, dupecheck[res.entry.serial1])) problemsdetected=True else: dupecheck[res.entry.serial1]=entry self.progress(i, numentries, res.entry.name) #### Advance to next entry req=self.protocolclass.pbnextentryrequest() res=self.sendpbcommand(req, self.protocolclass.pbnextentryresponse) if hardway: # look to see if we have looped if res.serial==firstserial or res.serial==0: break self.progress(numentries, numentries, "Phone book read completed") if problemsdetected: self.log("There are duplicate serial numbers. See above for details.") raise common.IntegrityCheckFailed(self.desc, "Data in phonebook is inconsistent. There are multiple entries with the same serial number. See the log.") result['phonebook']=pbook cats=[] for i in result['groups']: if result['groups'][i]['name']!='No Group': cats.append(result['groups'][i]['name']) result['categories']=cats print "returning keys",result.keys() return pbook def savegroups(self, data): groups=data['groups'] keys=groups.keys() keys.sort() g=self.protocolclass.pbgroups() sg=self.protocolclass.pbseqgroups() for k in keys: e=self.protocolclass.pbgroup() e.number=k e.unknown1=48 e.ring=groups[k]['ring'] e.unknown7=0 e.unknown8=0 e.name=groups[k]['name'] g.groups.append(e) e=self.protocolclass.pbseqgroup() e.number=k e.unknown=48 sg.seqgroups.append(e) for k in xrange(k+1,20): e=self.protocolclass.pbseqgroup() e.number=0 e.unknown=0 sg.seqgroups.append(e) groupnums=[] for k in range(self.protocolclass.NUMMAPGROUPS): groupnums.append(-1); for k in data['phonebook'].keys(): groupnums[data['phonebook'][k]['serial1']]=data['phonebook'][k]['group'] mg=self.protocolclass.pbmapgroups() for k in range(len(groupnums)): e=self.protocolclass.pbmapgroup() if (groupnums[k]==-1): e.number=255 e.unknown=255 else: e.number=groupnums[k] e.unknown=48 mg.mapgroups.append(e) buffer=prototypes.buffer() g.writetobuffer(buffer) self.logdata("New group file", buffer.getvalue(), g) self.writefile("pim/pbookgroup.dat", buffer.getvalue()) buffer=prototypes.buffer() sg.writetobuffer(buffer) self.logdata("New seqgroup file", buffer.getvalue(), sg) self.writefile("pim/pbookseqgroup.dat", buffer.getvalue()) buffer=prototypes.buffer() mg.writetobuffer(buffer) self.logdata("New mapgroup file", buffer.getvalue(), mg) self.writefile("pim/pbookmapgroup.dat", buffer.getvalue()) def savephonebook(self, data): "Saves out the phonebook" self.savegroups(data) progressmax=len(data['phonebook'].keys()) # To write the phone book, we scan through all existing entries # and record their record number and serial. # We then delete any entries that aren't in data # We then write out our records, using overwrite or append # commands as necessary serialupdates=[] existingpbook={} # keep track of the phonebook that is on the phone self.mode=self.MODENONE self.setmode(self.MODEBREW) # see note in getphonebook() for why this is necessary self.setmode(self.MODEPHONEBOOK) # similar loop to reading req=self.protocolclass.pbinforequest() res=self.sendpbcommand(req, self.protocolclass.pbinforesponse) numexistingentries=res.numentries if numexistingentries<0 or numexistingentries>1000: self.log("The phone is lying about how many entries are in the phonebook so we are doing it the hard way") numexistingentries=0 firstserial=None loop=xrange(0,1000) hardway=True else: self.log("There are %d existing entries" % (numexistingentries,)) progressmax+=numexistingentries loop=xrange(0, numexistingentries) hardway=False progresscur=0 # reset cursor self.sendpbcommand(self.protocolclass.pbinitrequest(), self.protocolclass.pbinitresponse) for i in loop: ### Read current entry if hardway: numexistingentries+=1 progressmax+=1 req=self.protocolclass.pbreadentryrequest() res=self.sendpbcommand(req, self.protocolclass.pbreadentryresponse) entry={ 'number': res.entry.serial1, 'serial1': res.entry.serial1, 'serial2': res.entry.serial2, 'name': res.entry.name} assert entry['serial1']==entry['serial2'] # always the same self.log("Reading entry "+`i`+" - "+entry['name']) if hardway and firstserial is None: firstserial=res.entry.serial1 existingpbook[i]=entry self.progress(progresscur, progressmax, "existing "+entry['name']) #### Advance to next entry req=self.protocolclass.pbnextentryrequest() res=self.sendpbcommand(req, self.protocolclass.pbnextentryresponse) progresscur+=1 if hardway: # look to see if we have looped if res.serial==firstserial or res.serial==0: break # we have now looped around back to begining # Find entries that have been deleted pbook=data['phonebook'] dellist=[] for i in range(0, numexistingentries): ii=existingpbook[i] serial=ii['serial1'] item=self._findserial(serial, pbook) if item is None: dellist.append(i) progressmax+=len(dellist) # more work to do # Delete those entries for i in dellist: progresscur+=1 numexistingentries-=1 # keep count right ii=existingpbook[i] self.log("Deleting entry "+`i`+" - "+ii['name']) req=self.protocolclass.pbdeleteentryrequest() req.entrynumber=ii['serial1'] req.serial1=ii['serial1'] req.serial2=ii['serial2'] self.sendpbcommand(req, self.protocolclass.pbdeleteentryresponse) self.progress(progresscur, progressmax, "Deleting "+ii['name']) # also remove them from existingpbook del existingpbook[i] # counter to keep track of record number (otherwise appends don't work) counter=0 # Now rewrite out existing entries keys=existingpbook.keys() existingserials=[] keys.sort() # do in same order as existingpbook for i in keys: progresscur+=1 ii=pbook[self._findserial(existingpbook[i]['serial1'], pbook)] self.log("Rewriting entry "+`i`+" - "+ii['name']) self.progress(progresscur, progressmax, "Rewriting "+ii['name']) entry=self.makeentry(counter, ii, data) counter+=1 existingserials.append(existingpbook[i]['serial1']) req=self.protocolclass.pbupdateentryrequest() req.entry=entry res=self.sendpbcommand(req, self.protocolclass.pbupdateentryresponse) serialupdates.append( ( ii["bitpimserial"], {'sourcetype': self.serialsname, 'serial1': res.serial1, 'serial2': res.serial1, 'sourceuniqueid': data['uniqueserial']}) ) assert ii['serial1']==res.serial1 # serial should stay the same # Finally write out new entries keys=pbook.keys() keys.sort() for i in keys: ii=pbook[i] print "looking for "+`ii['serial1']`+" "+`ii['name']` if ii['serial1'] in existingserials: continue # already wrote this one out print "found new" progresscur+=1 entry=self.makeentry(counter, ii, data) counter+=1 self.log("Appending entry "+ii['name']) self.progress(progresscur, progressmax, "Writing "+ii['name']) req=self.protocolclass.pbappendentryrequest() req.entry=entry res=self.sendpbcommand(req, self.protocolclass.pbappendentryresponse) serialupdates.append( ( ii["bitpimserial"], {'sourcetype': self.serialsname, 'serial1': res.newserial, 'serial2': res.newserial, 'sourceuniqueid': data['uniqueserial']}) ) data["serialupdates"]=serialupdates return data def _findserial(self, serial, dict): """Searches dict to find entry with matching serial. If not found, returns None""" for i in dict: if dict[i]['serial1']==serial: return i return None def _normaliseindices(self, d): "turn all negative keys into positive ones for index" res={} keys=d.keys() keys.sort() keys.reverse() for k in keys: if k<0: for c in range(999999): if c not in keys and c not in res: break res[c]=d[k] else: res[k]=d[k] return res def extractphonebookentry(self, entry, fundamentals): """Return a phonebook entry in BitPim format. This is called from getphonebook.""" res={} # serials res['serials']=[ {'sourcetype': self.serialsname, 'serial1': entry.serial1, 'serial2': entry.serial2, 'sourceuniqueid': fundamentals['uniqueserial']} ] # only one name res['names']=[ {'full': entry.name} ] # only one category cat=fundamentals['groups'].get(entry.group, {'name': "No Group"})['name'] if cat!="No Group": res['categories']=[ {'category': cat} ] # emails res['emails']=[] for i in entry.emails: if len(i.email): res['emails'].append( {'email': i.email} ) if not len(res['emails']): del res['emails'] # it was empty # urls if 'url' in entry.getfields() and len(entry.url): res['urls']=[ {'url': entry.url} ] # memos if 'memo' in entry.getfields() and len(entry.memo): res['memos']=[ {'memo': entry.memo } ] # ringtones res['ringtones']=[] if 'ringtone' in entry.getfields() and entry.ringtone!=self.protocolclass.NORINGTONE: try: tone=fundamentals['ringtone-index'][entry.ringtone]['name'] res['ringtones'].append({'ringtone': tone, 'use': 'call'}) except: print "can't find ringtone for index",entry.ringtone if len(res['ringtones'])==0: del res['ringtones'] res=self._assignpbtypeandspeeddials(entry, res) return res def _assignpbtypeandspeeddials(self, entry, res): # numbers res['numbers']=[] for i in range(self.protocolclass.NUMPHONENUMBERS): num=entry.numbers[i].number type=entry.numbertypes[i].numbertype speeddial=entry.numberspeeddials[i].numberspeeddial if len(num): t=self.protocolclass.numbertypetab[type] if t[-1]=='2': t=t[:-1] if speeddial==255: res['numbers'].append({'number': num, 'type': t}) else: res['numbers'].append({'number': num, 'type': t, 'speeddial': speeddial}) return res def _findmediainindex(self, index, name, pbentryname, type): if type=="ringtone": default=self.protocolclass.NORINGTONE elif type=="message ringtone": default=self.protocolclass.NOMSGRINGTONE elif type=="wallpaper": default=self.protocolclass.NOWALLPAPER else: assert False, "unknown type "+type if name is None: return default for i in index: if index[i]['name']==name: return i self.log("%s: Unable to find %s %s in the index. Setting to default." % (pbentryname, type, name)) return default def makeentry(self, counter, entry, data): """Creates pbentry object @param counter: The new entry number @param entry: The phonebook object (as returned from convertphonebooktophone) that we are using as the source @param data: The main dictionary, which we use to get access to media indices amongst other things """ e=self.protocolclass.pbentry() e.avatar=0 for k in entry: # special treatment for lists if k in ('emails', 'numbers', 'numbertypes', 'numberspeeddials'): l=getattr(e,k) for item in entry[k]: l.append(item) elif k=='ringtone': e.ringtone=self._findmediainindex(data['ringtone-index'], entry['ringtone'], entry['name'], 'ringtone') elif k in e.getfields(): # everything else we just set setattr(e,k,entry[k]) e.unknown7=0 e.group=0 # couldn't figure out groups; this at least sets it to No Group e.unknown12=1 # couldn't figure out ringtone; this at least sets it to Default return e def is_mode_brew(self): req=p_brew.memoryconfigrequest() respc=p_brew.memoryconfigresponse for baud in 0, 38400, 115200: if baud: if not self.comm.setbaudrate(baud): continue try: self.sendbrewcommand(req, respc, callsetmode=False) return True except com_phone.modeignoreerrortypes: pass return False brew_version_txt_key='ams_version.txt' brew_version_file='ams/version.txt' lgpbinfo_key='lgpbinfo' esn_file_key='esn_file' esn_file='nvm/$SYS.ESN' my_model='VI125' def get_detect_data(self, res): # get the data needed for detection if not res.has_key(self.brew_version_txt_key): # read the BREW version.txt file, which may contain phone model info print 'reading BREW version.txt' try: # read this file s=self.getfilecontents(self.brew_version_file) res[self.brew_version_txt_key]=s except com_brew.BrewNoSuchFileException: res[self.brew_version_txt_key]=None except: if __debug__: raise res[self.brew_version_txt_key]=None # get pbinfo data, which also may include phone model if not res.has_key(self.lgpbinfo_key): print 'getting pbinfo' try: req=self.protocolclass.pbinforequest() resp=self.sendpbcommand(req, self.protocolclass.pbstartsyncresponse) res[self.lgpbinfo_key]=resp.unknown except: if __debug__: raise res[self.lgpbinfo_key]=None # attempt the get the ESN if not res.has_key(self.esn_file_key): print 'reading ESN file: '+`self.esn_file`+' end' try: s=self.getfilecontents(self.esn_file) res[self.esn_file_key]=s except: res[self.esn_file_key]=None def get_esn(self, data=None): # return the ESN for this phone try: if data is None: s=self.getfilecontents(self.esn_file) else: s=data if s: s=s[85:89] return '%02X%02X%02X%02X'%(ord(s[3]), ord(s[2]), ord(s[1]), ord(s[0])) except: if __debug__: raise def eval_detect_data(self, res): found=False if res.get(self.brew_version_txt_key, None) is not None: found=res[self.brew_version_txt_key][:len(self.my_model)]==self.my_model if not found and res.get(self.lgpbinfo_key, None): found=res[self.lgpbinfo_key].find(self.my_model)!=-1 if found: res['model']=self.my_model res['manufacturer']='LG Electronics Inc' s=res.get(self.esn_file_key, None) if s: res['esn']=self.get_esn(s) @classmethod def detectphone(_, coms, likely_ports, res, _module, _log): if not likely_ports: # cannot detect any likely ports return None for port in likely_ports: if not res.has_key(port): res[port]={ 'mode_modem': None, 'mode_brew': None, 'manufacturer': None, 'model': None, 'firmware_version': None, 'esn': None, 'firmwareresponse': None } try: if res[port]['mode_brew']==False or \ res[port]['model']: # either phone is not in BREW, or a model has already # been found, not much we can do now continue p=_module.Phone(_log, commport.CommConnection(_log, port, timeout=1)) if res[port]['mode_brew'] is None: res[port]['mode_brew']=p.is_mode_brew() if res[port]['mode_brew']: p.get_detect_data(res[port]) p.eval_detect_data(res[port]) p.comm.close() except: if __debug__: raise # Calendar stuff------------------------------------------------------------ def getcalendar(self,result): # Read exceptions file first try: buf=prototypes.buffer(self.getfilecontents( self.protocolclass.cal_exception_file_name)) ex=self.protocolclass.scheduleexceptionfile() ex.readfrombuffer(buf) self.logdata("Calendar exceptions", buf.getdata(), ex) exceptions={} for i in ex.items: exceptions.setdefault(i.pos, []).append( (i.year,i.month,i.day) ) except com_brew.BrewNoSuchFileException: exceptions={} # Now read schedule try: buf=prototypes.buffer(self.getfilecontents( self.protocolclass.cal_data_file_name)) if len(buf.getdata())<2: # file is empty, and hence same as non-existent raise com_brew.BrewNoSuchFileException() sc=self.protocolclass.schedulefile() self.logdata("Calendar", buf.getdata(), sc) sc.readfrombuffer(buf) sc.readfrombuffer(buf) res=self.get_cal(sc, exceptions, result.get('ringtone-index', {})) except com_brew.BrewNoSuchFileException: res={} result['calendar']=res return result def savecalendar(self, dict, merge): # ::TODO:: obey merge param # get the list of available voice alarm files voice_files={} if self._cal_has_voice_id: try: file_list=self.getfilesystem(self.protocolclass.cal_dir) for k in file_list.keys(): if k.endswith(self.protocolclass.cal_voice_ext): voice_files[int(k[8:11])]=k except: self.log('Failed to list Calendar Voice Files') # build the schedule file sc=self.protocolclass.schedulefile() sc_ex=self.set_cal(sc, dict.get('calendar', {}), dict.get('ringtone-index', {}), voice_files) buf=prototypes.buffer() sc.writetobuffer(buf) self.writefile(self.protocolclass.cal_data_file_name, buf.getvalue()) # build the exceptions exceptions_file=self.protocolclass.scheduleexceptionfile() for k,l in sc_ex.items(): for x in l: _ex=self.protocolclass.scheduleexception() _ex.pos=k _ex.year, _ex.month, _ex.day=x exceptions_file.items.append(_ex) buf=prototypes.buffer() exceptions_file.writetobuffer(buf) self.writefile(self.protocolclass.cal_exception_file_name, buf.getvalue()) # clear out any alarm voice files that may have been deleted if self._cal_has_voice_id: for k,e in voice_files.items(): try: self.rmfile(e) except: self.log('Failed to delete file '+e) return dict _repeat_values={ protocolclass.CAL_REP_DAILY: bpcalendar.RepeatEntry.daily, protocolclass.CAL_REP_MONFRI: bpcalendar.RepeatEntry.daily, protocolclass.CAL_REP_WEEKLY: bpcalendar.RepeatEntry.weekly, protocolclass.CAL_REP_MONTHLY: bpcalendar.RepeatEntry.monthly, protocolclass.CAL_REP_YEARLY: bpcalendar.RepeatEntry.yearly } def _build_cal_repeat(self, event, exceptions): rep_val=Phone._repeat_values.get(event.repeat, None) if not rep_val: return None rep=bpcalendar.RepeatEntry(rep_val) if event.repeat==self.protocolclass.CAL_REP_MONFRI: rep.interval=rep.dow=0 elif event.repeat!=self.protocolclass.CAL_REP_YEARLY: rep.interval=1 rep.dow=0 # do exceptions cal_ex=exceptions.get(event.pos, []) for e in cal_ex: rep.add_suppressed(*e) return rep def _get_voice_id(self, event, entry): if event.hasvoice: entry.voice=event.voiceid def _build_cal_entry(self, event, exceptions, ringtone_index): # return a copy of bpcalendar object based on my values # general fields entry=bpcalendar.CalendarEntry() entry.start=event.start entry.end=event.end entry.description=event.description # check for allday event if entry.start[3:]==(0, 0) and entry.end[3:]==(23, 59): entry.allday=True # alarm if event.alarmtype: entry.alarm=event.alarmhours*60+event.alarmminutes # ringtone rt_idx=event.ringtone # hack to account for the VX4650 weird ringtone setup if rt_idx<50: # 1st part of builtin ringtones, need offset by 1 rt_idx+=1 entry.ringtone=ringtone_index.get(rt_idx, {'name': None} )['name'] # voice ID if applicable if self._cal_has_voice_id: self._get_voice_id(event, entry) # repeat info entry.repeat=self._build_cal_repeat(event, exceptions) return entry def get_cal(self, sch_file, exceptions, ringtone_index): res={} for event in sch_file.events: if event.pos==-1: # blank entry continue cal_event=self._build_cal_entry(event, exceptions, ringtone_index) res[cal_event.id]=cal_event return res _alarm_info={ -1: (protocolclass.CAL_REMINDER_NONE, 100, 100), 0: (protocolclass.CAL_REMINDER_ONTIME, 0, 0), 5: (protocolclass.CAL_REMINDER_5MIN, 5, 0), 10: (protocolclass.CAL_REMINDER_10MIN, 10, 0), 60: (protocolclass.CAL_REMINDER_1HOUR, 0, 1), 1440: (protocolclass.CAL_REMINDER_1DAY, 0, 24), 2880: (protocolclass.CAL_REMINDER_2DAYS, 0, 48) } _default_alarm=(protocolclass.CAL_REMINDER_NONE, 100, 100) # default alarm is off _phone_dow={ 1: protocolclass.CAL_DOW_SUN, 2: protocolclass.CAL_DOW_MON, 4: protocolclass.CAL_DOW_TUE, 8: protocolclass.CAL_DOW_WED, 16: protocolclass.CAL_DOW_THU, 32: protocolclass.CAL_DOW_FRI, 64: protocolclass.CAL_DOW_SAT } def _set_repeat_event(self, event, entry, exceptions): rep_val=self.protocolclass.CAL_REP_NONE day_bitmap=0 rep=entry.repeat if rep: rep_type=rep.repeat_type if rep_type==bpcalendar.RepeatEntry.yearly: rep_val=self.protocolclass.CAL_REP_YEARLY else: rep_interval=rep.interval rep_dow=rep.dow if rep_type==bpcalendar.RepeatEntry.daily: if rep_interval==0: rep_val=self.protocolclass.CAL_REP_MONFRI elif rep_interval==1: rep_val=self.protocolclass.CAL_REP_DAILY elif rep_type==bpcalendar.RepeatEntry.weekly: start_dow=1<=k: _alarm_key=k break event.alarmtype, event.alarmminutes, event.alarmhours=Phone._alarm_info.get( _alarm_key, self._default_alarm) def _set_voice_id(self, event, entry, voice_files): if entry.voice and \ voice_files.has_key(entry.voice-self.protocolclass.cal_voice_id_ofs): event.hasvoice=1 event.voiceid=entry.voice del voice_files[entry.voice-self.protocolclass.cal_voice_id_ofs] else: event.hasvoice=0 event.voiceid=self.protocolclass.CAL_NO_VOICE def _set_cal_event(self, event, entry, exceptions, ringtone_index, voice_files): # desc event.description=entry.description # start & end times if entry.allday: event.start=entry.start[:3]+(0,0) event.end=entry.start[:3]+(23,59) else: event.start=entry.start event.end=entry.start[:3]+entry.end[3:] # make sure the event lasts in 1 calendar day if event.end=_today): event=self.protocolclass.scheduleevent() event.pos=_pos self._set_cal_event(event, e, exceptions, ringtone_index, voice_files) sch_file.events.append(event) if not _packet_size: _packet_size=event.packetsize() _pos+=_packet_size return exceptions def _get_phone_number(self): # return the phone number of this phone s='' try: buf=self.getfilecontents('nvm/nvm/nvm_0000') ofs=0xce if buf[ofs]=='\x01': ofs+=1 while buf[ofs]!='\x01': s+=buf[ofs] ofs+=1 except: if __debug__: raise return s def getfirmwareinformation(self): self.log("Getting firmware information") req=p_brew.firmwarerequest() res=self.sendbrewcommand(req, self.protocolclass.firmwareresponse) return res def getphoneinfo(self, phone_info): # returning some basic phone info # double check if this's the right phone. try: if self.getfilecontents(self.brew_version_file)[:len(self.my_model)]==self.my_model: phone_info.model=self.my_model phone_info.manufacturer=Profile.phone_manufacturer phone_info.phone_number=self._get_phone_number() phone_info.firmware_version=self.getfirmwareinformation().firmwareversion phone_info.esn=self.get_esn() except: if __debug__: raise def phonize(str): """Convert the phone number into something the phone understands All digits, P, T, * and # are kept, everything else is removed""" return re.sub("[^0-9PT#*]", "", str) parentprofile=com_phone.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='VI125' WALLPAPER_WIDTH=120 WALLPAPER_HEIGHT=98 MAX_WALLPAPER_BASENAME_LENGTH=19 WALLPAPER_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789 ." WALLPAPER_CONVERT_FORMAT="bmp" MAX_RINGTONE_BASENAME_LENGTH=19 RINGTONE_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789 ." # which usb ids correspond to us usbids_straight=( ( 0x1004, 0x6000, 2), )# VID=LG Electronics, PID=LG VI125 -internal USB diagnostics interface usbids_usbtoserial=( ( 0x067b, 0x2303, None), # VID=Prolific, PID=USB to serial ( 0x0403, 0x6001, None), # VID=FTDI, PID=USB to serial ( 0x0731, 0x2003, None), # VID=Susteen, PID=Universal USB to serial ) usbids=usbids_straight+usbids_usbtoserial # which device classes we are. not we are not modem! deviceclasses=("serial",) # nb we don't allow save to camera so it isn't listed here imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) def GetImageOrigins(self): return self.imageorigins # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 120, 'height': 98, 'format': "BMP"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 120, 'height': 98, 'format': "BMP"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "fullscreen", {'width': 120, 'height': 133, 'format': "BMP"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets def __init__(self): parentprofile.__init__(self) def _getgroup(self, name, groups): for key in groups: if groups[key]['name']==name: return key,groups[key] return None,None def normalisegroups(self, helper, data): "Assigns groups based on category data" pad=[] keys=data['groups'].keys() keys.sort() for k in keys: if k: # ignore key 0 which is 'No Group' name=data['groups'][k]['name'] pad.append(name) groups=helper.getmostpopularcategories(10, data['phonebook'], ["No Group"], 22, pad) # alpha sort groups.sort() # newgroups newgroups={} # put in No group newgroups[0]={'ring': 0, 'name': 'No Group'} # populate for name in groups: # existing entries remain unchanged if name=="No Group": continue key,value=self._getgroup(name, data['groups']) if key is not None and key!=0: newgroups[key]=value # new entries get whatever numbers are free for name in groups: key,value=self._getgroup(name, newgroups) if key is None: for key in range(1,100000): if key not in newgroups: newgroups[key]={'ring': 0, 'name': name} break # yay, done if data['groups']!=newgroups: data['groups']=newgroups data['rebootphone']=True def convertphonebooktophone(self, helper, data): """Converts the data to what will be used by the phone @param data: contains the dict returned by getfundamentals as well as where the results go""" results={} self.normalisegroups(helper, data) for pbentry in data['phonebook']: if len(results)==self.protocolclass.NUMPHONEBOOKENTRIES: break e={} # entry out entry=data['phonebook'][pbentry] # entry in try: # serial serial1=helper.getserial(entry.get('serials', []), self.serialsname, data['uniqueserial'], 'serial1', 0) serial2=helper.getserial(entry.get('serials', []), self.serialsname, data['uniqueserial'], 'serial2', serial1) e['serial1']=serial1 e['serial2']=serial2 for ss in entry["serials"]: if ss["sourcetype"]=="bitpim": e['bitpimserial']=ss assert e['bitpimserial'] # name e['name']=helper.getfullname(entry.get('names', []),1,1,22)[0] # categories/groups cat=helper.makeone(helper.getcategory(entry.get('categories', []),0,1,22), None) if cat is None: e['group']=0 else: key,value=self._getgroup(cat, data['groups']) if key is not None: e['group']=key else: # sorry no space for this category e['group']=0 # email addresses emails=helper.getemails(entry.get('emails', []) ,0,self.protocolclass.NUMEMAILS,48) e['emails']=helper.filllist(emails, self.protocolclass.NUMEMAILS, "") # url e['url']=helper.makeone(helper.geturls(entry.get('urls', []), 0,1,48), "") # memo (-1 is to leave space for null terminator - not all software puts it in, but we do) e['memo']=helper.makeone(helper.getmemos(entry.get('memos', []), 0, 1, self.protocolclass.MEMOLENGTH-1), "") # phone numbers # there must be at least one email address or phonenumber minnumbers=1 if len(emails): minnumbers=0 numbers=helper.getnumbers(entry.get('numbers', []),minnumbers,self.protocolclass.NUMPHONENUMBERS) e['numberspeeddials']=[] e['numbertypes']=[] e['numbers']=[] for numindex in range(len(numbers)): num=numbers[numindex] # deal with type b4=len(e['numbertypes']) type=num['type'] for i,t in enumerate(self.protocolclass.numbertypetab): if type==t: # some voodoo to ensure the second home becomes home2 if i in e['numbertypes'] and t[-1]!='2': type+='2' continue e['numbertypes'].append(i) break if t=='none': # conveniently last entry e['numbertypes'].append(i) break if len(e['numbertypes'])==b4: # we couldn't find a type for the number continue # deal with number number=phonize(num['number']) if len(number)==0: # no actual digits in the number continue if len(number)>48: # get this number from somewhere sensible # ::TODO:: number is too long and we have to either truncate it or ignore it? number=number[:48] # truncate for moment e['numbers'].append(number) # deal with speed dial sd=num.get("speeddial", -1) if self.protocolclass.NUMSPEEDDIALS: if sd>=self.protocolclass.FIRSTSPEEDDIAL and sd<=self.protocolclass.LASTSPEEDDIAL: e['numberspeeddials'].append(sd) else: e['numberspeeddials'].append(255) e['numberspeeddials']=helper.filllist(e['numberspeeddials'], 5, 255) e['numbertypes']=helper.filllist(e['numbertypes'], 5, 0) e['numbers']=helper.filllist(e['numbers'], 5, "") # ringtone e['ringtone']=helper.getringtone(entry.get('ringtones', []), 'call', None) # flags e['secret']=helper.getflag(entry.get('flags',[]), 'secret', False) results[pbentry]=e except helper.ConversionFailed: continue data['phonebook']=results return data _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading #('calendar', 'read', None), # all calendar reading #('wallpaper', 'read', None), # all wallpaper reading #('ringtone', 'read', None), # all ringtone reading #('call_history', 'read', None),# all call history list reading #('sms', 'read', None), # all SMS list reading #('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook #('calendar', 'write', 'OVERWRITE'), # only overwriting calendar #('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper #('wallpaper', 'write', 'OVERWRITE'), #('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone #('ringtone', 'write', 'OVERWRITE'), #('sms', 'write', 'OVERWRITE'), # all SMS list writing ) def QueryAudio(self, origin, currentextension, afi): # we don't modify any of these if afi.format in ("MIDI", "QCP", "PMD"): return currentextension, afi # examine mp3 if afi.format=="MP3": if afi.channels==1 and 8<=afi.bitrate<=64 and 16000<=afi.samplerate<=22050: return currentextension, afi # convert it return ("mp3", fileinfo.AudioFileInfo(afi, **{'format': 'MP3', 'channels': 1, 'bitrate': 32, 'samplerate': 22050})) bitpim-1.0.7+dfsg1/src/phones/p_lgvx9800.py0000644001616600161660000057551710542342021016441 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VX9800""" from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx8100 except as noted # below from p_lgvx8100 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb # phonebooks constants NUMPHONEBOOKENTRIES=1000 NUMEMAILS=2 NUMPHONENUMBERS=5 pb_file_name='pim/pbentry.dat' wallpaper_id_file_name='pim/pbPictureIdSetAsPath.dat' WALLPAPER_ID_PATH_MAX_LEN=80 # Media type MEDIA_TYPE_RINGTONE=0x0201 MEDIA_TYPE_IMAGE=0x0100 MEDIA_TYPE_SOUND=0x0402 MEDIA_TYPE_SDIMAGE=0x0008 MEDIA_TYPE_SDSOUND=0x000C MEDIA_TYPE_VIDEO=0x0304 MEDIA_RINGTONE_DEFAULT_ICON=1 MEDIA_IMAGE_DEFAULT_ICON=0 MEDIA_VIDEO_DEFAULT_ICON=0 # Calendar parameters NUMCALENDARENTRIES=300 # vx8100 uses a type based index for speed dials instead of positional like the vx4400 SPEEDDIALINDEX=1 MAXCALENDARDESCRIPTION=32 SMS_CANNED_MAX_ITEMS=18 SMS_CANNED_MAX_LENGTH=101 BREW_FILE_SYSTEM=1 PHONE_ENCODING='iso-8859-1' # playlist constants pl_dir='mmc1/my_mp3_playlist' pl_dir_len=len(pl_dir)+1 pl_extension='.pl' pl_extension_len=len(pl_extension) mp3_dir='mmc1/my_mp3' mp3_dir_len=len(mp3_dir)+1 # account for the last '/' mp3_index_file='dload/my_mp3.dat' # need to call stat to get the file time/data broken_filelist_date=True class indexentry(BaseProtogenClass): __fields=['index', 'type', 'filename', 'icon', 'date', 'dunno', 'size'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_type.writetobuffer(buf) self.__field_filename.writetobuffer(buf) try: self.__field_icon except: self.__field_icon=UINT(**{'sizeinbytes': 4, 'default':0}) self.__field_icon.writetobuffer(buf) try: self.__field_date except: self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_date.writetobuffer(buf) self.__field_dunno.writetobuffer(buf) try: self.__field_size except: self.__field_size=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_size.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self.__field_type=UINT(**{'sizeinbytes': 2}) self.__field_type.readfrombuffer(buf) self.__field_filename=USTRING(**{'sizeinbytes': 80, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_filename.readfrombuffer(buf) self.__field_icon=UINT(**{'sizeinbytes': 4, 'default':0}) self.__field_icon.readfrombuffer(buf) self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_date.readfrombuffer(buf) self.__field_dunno=UINT(**{'sizeinbytes': 4}) self.__field_dunno.readfrombuffer(buf) self.__field_size=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_size.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_type(self): return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,UINT): self.__field_type=value else: self.__field_type=UINT(value,**{'sizeinbytes': 2}) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, None) def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'sizeinbytes': 80, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, "includes full pathname") def __getfield_icon(self): try: self.__field_icon except: self.__field_icon=UINT(**{'sizeinbytes': 4, 'default':0}) return self.__field_icon.getvalue() def __setfield_icon(self, value): if isinstance(value,UINT): self.__field_icon=value else: self.__field_icon=UINT(value,**{'sizeinbytes': 4, 'default':0}) def __delfield_icon(self): del self.__field_icon icon=property(__getfield_icon, __setfield_icon, __delfield_icon, None) def __getfield_date(self): try: self.__field_date except: self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,UINT): self.__field_date=value else: self.__field_date=UINT(value,**{'sizeinbytes': 4, 'default': 0}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, "i think this is bitfield of the date") def __getfield_dunno(self): return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 4}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def __getfield_size(self): try: self.__field_size except: self.__field_size=UINT(**{'sizeinbytes': 4, 'default': 0}) return self.__field_size.getvalue() def __setfield_size(self, value): if isinstance(value,UINT): self.__field_size=value else: self.__field_size=UINT(value,**{'sizeinbytes': 4, 'default': 0}) def __delfield_size(self): del self.__field_size size=property(__getfield_size, __setfield_size, __delfield_size, "size of the file, can be set to zero") def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('type', self.__field_type, None) yield ('filename', self.__field_filename, "includes full pathname") yield ('icon', self.__field_icon, None) yield ('date', self.__field_date, "i think this is bitfield of the date") yield ('dunno', self.__field_dunno, None) yield ('size', self.__field_size, "size of the file, can be set to zero") class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): dict2={'elementclass': indexentry, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class playlistentry(BaseProtogenClass): __fields=['name', 'date', 'dunno1', 'dunno2', 'dunno3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(playlistentry,self).__init__(**dict) if self.__class__ is playlistentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(playlistentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(playlistentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_name.writetobuffer(buf) try: self.__field_date except: self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_date.writetobuffer(buf) try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_dunno1.writetobuffer(buf) try: self.__field_dunno2 except: self.__field_dunno2=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_dunno2.writetobuffer(buf) try: self.__field_dunno3 except: self.__field_dunno3=UINT(**{'sizeinbytes': 4, 'default': 1 }) self.__field_dunno3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_name=USTRING(**{'sizeinbytes': 84, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_name.readfrombuffer(buf) self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_date.readfrombuffer(buf) self.__field_dunno1=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_dunno1.readfrombuffer(buf) self.__field_dunno2=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_dunno2.readfrombuffer(buf) self.__field_dunno3=UINT(**{'sizeinbytes': 4, 'default': 1 }) self.__field_dunno3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 84, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_date(self): try: self.__field_date except: self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0 }) return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,UINT): self.__field_date=value else: self.__field_date=UINT(value,**{'sizeinbytes': 4, 'default': 0 }) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, None) def __getfield_dunno1(self): try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 4, 'default': 0 }) return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UINT): self.__field_dunno1=value else: self.__field_dunno1=UINT(value,**{'sizeinbytes': 4, 'default': 0 }) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_dunno2(self): try: self.__field_dunno2 except: self.__field_dunno2=UINT(**{'sizeinbytes': 4, 'default': 0 }) return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UINT): self.__field_dunno2=value else: self.__field_dunno2=UINT(value,**{'sizeinbytes': 4, 'default': 0 }) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_dunno3(self): try: self.__field_dunno3 except: self.__field_dunno3=UINT(**{'sizeinbytes': 4, 'default': 1 }) return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,UINT): self.__field_dunno3=value else: self.__field_dunno3=UINT(value,**{'sizeinbytes': 4, 'default': 1 }) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def iscontainer(self): return True def containerelements(self): yield ('name', self.__field_name, None) yield ('date', self.__field_date, None) yield ('dunno1', self.__field_dunno1, None) yield ('dunno2', self.__field_dunno2, None) yield ('dunno3', self.__field_dunno3, None) class playlistfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(playlistfile,self).__init__(**dict) if self.__class__ is playlistfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(playlistfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(playlistfile,kwargs) if len(args): dict2={ 'elementclass': playlistentry } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': playlistentry }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': playlistentry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': playlistentry }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': playlistentry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class pbgroup(BaseProtogenClass): "A single group" __fields=['name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroup,self).__init__(**dict) if self.__class__ is pbgroup: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroup,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroup,kwargs) if len(args): dict2={'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } dict2.update(kwargs) kwargs=dict2 self.__field_name=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_name=USTRING(**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('name', self.__field_name, None) class pbgroups(BaseProtogenClass): "Phonebook groups" __fields=['groups'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroups,self).__init__(**dict) if self.__class__ is pbgroups: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroups,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroups,kwargs) if len(args): dict2={'elementclass': pbgroup} dict2.update(kwargs) kwargs=dict2 self.__field_groups=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_groups(self): try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) return self.__field_groups.getvalue() def __setfield_groups(self, value): if isinstance(value,LIST): self.__field_groups=value else: self.__field_groups=LIST(value,**{'elementclass': pbgroup}) def __delfield_groups(self): del self.__field_groups groups=property(__getfield_groups, __setfield_groups, __delfield_groups, None) def iscontainer(self): return True def containerelements(self): yield ('groups', self.__field_groups, None) class pbinforequest(BaseProtogenClass): "Random information about the phone" __fields=['header', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbinforequest,self).__init__(**dict) if self.__class__ is pbinforequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbinforequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbinforequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x15, 'flag': 0x01}) self.__field_header.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 6}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x15, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 6}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x15, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x15, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 6}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 6}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('pad', self.__field_pad, None) class pbinforesponse(BaseProtogenClass): __fields=['header', 'dunno1', 'firstentry', 'numentries', 'dunno2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbinforesponse,self).__init__(**dict) if self.__class__ is pbinforesponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbinforesponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbinforesponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_firstentry.writetobuffer(buf) self.__field_numentries.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_dunno1=UNKNOWN(**{'sizeinbytes': 10}) self.__field_dunno1.readfrombuffer(buf) self.__field_firstentry=UINT(**{'sizeinbytes': 4}) self.__field_firstentry.readfrombuffer(buf) self.__field_numentries=UINT(**{'sizeinbytes': 2}) self.__field_numentries.readfrombuffer(buf) self.__field_dunno2=UNKNOWN() self.__field_dunno2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UNKNOWN): self.__field_dunno1=value else: self.__field_dunno1=UNKNOWN(value,**{'sizeinbytes': 10}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_firstentry(self): return self.__field_firstentry.getvalue() def __setfield_firstentry(self, value): if isinstance(value,UINT): self.__field_firstentry=value else: self.__field_firstentry=UINT(value,**{'sizeinbytes': 4}) def __delfield_firstentry(self): del self.__field_firstentry firstentry=property(__getfield_firstentry, __setfield_firstentry, __delfield_firstentry, None) def __getfield_numentries(self): return self.__field_numentries.getvalue() def __setfield_numentries(self, value): if isinstance(value,UINT): self.__field_numentries=value else: self.__field_numentries=UINT(value,**{'sizeinbytes': 2}) def __delfield_numentries(self): del self.__field_numentries numentries=property(__getfield_numentries, __setfield_numentries, __delfield_numentries, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UNKNOWN): self.__field_dunno2=value else: self.__field_dunno2=UNKNOWN(value,) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('dunno1', self.__field_dunno1, None) yield ('firstentry', self.__field_firstentry, None) yield ('numentries', self.__field_numentries, None) yield ('dunno2', self.__field_dunno2, None) class pbentry(BaseProtogenClass): __fields=['serial1', 'entrysize', 'serial2', 'entrynumber', 'name', 'group', 'emails', 'ringtone', 'msgringtone', 'wallpaper', 'numbertypes', 'numbers', 'memo', 'unknown'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_serial1.writetobuffer(buf) try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x01BE, 'constantexception': PhoneBookBusyException}) self.__field_entrysize.writetobuffer(buf) self.__field_serial2.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_name.writetobuffer(buf) try: self.__field_group except: self.__field_group=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_group.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx9800_132, 'length': NUMEMAILS}) self.__field_emails.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_ringtone.writetobuffer(buf) try: self.__field_msgringtone except: self.__field_msgringtone=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_msgringtone.writetobuffer(buf) try: self.__field_wallpaper except: self.__field_wallpaper=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_wallpaper.writetobuffer(buf) try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx9800_137, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx9800_139, 'length': NUMPHONENUMBERS}) self.__field_numbers.writetobuffer(buf) try: self.__field_memo except: self.__field_memo=USTRING(**{'sizeinbytes': 61, 'default': '', 'raiseonunterminatedread': False}) self.__field_memo.writetobuffer(buf) try: self.__field_unknown except: self.__field_unknown=UNKNOWN() self.__field_unknown.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x01BE, 'constantexception': PhoneBookBusyException}) self.__field_entrysize.readfrombuffer(buf) self.__field_serial2=UINT(**{'sizeinbytes': 4}) self.__field_serial2.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 2}) self.__field_entrynumber.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING,'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_group.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx9800_132, 'length': NUMEMAILS}) self.__field_emails.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_ringtone.readfrombuffer(buf) self.__field_msgringtone=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_msgringtone.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_wallpaper.readfrombuffer(buf) self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx9800_137, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.readfrombuffer(buf) self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx9800_139, 'length': NUMPHONENUMBERS}) self.__field_numbers.readfrombuffer(buf) self.__field_memo=USTRING(**{'sizeinbytes': 61, 'default': '', 'raiseonunterminatedread': False}) self.__field_memo.readfrombuffer(buf) self.__field_unknown=UNKNOWN() self.__field_unknown.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_entrysize(self): try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x01BE, 'constantexception': PhoneBookBusyException}) return self.__field_entrysize.getvalue() def __setfield_entrysize(self, value): if isinstance(value,UINT): self.__field_entrysize=value else: self.__field_entrysize=UINT(value,**{'sizeinbytes': 2, 'constant': 0x01BE, 'constantexception': PhoneBookBusyException}) def __delfield_entrysize(self): del self.__field_entrysize entrysize=property(__getfield_entrysize, __setfield_entrysize, __delfield_entrysize, None) def __getfield_serial2(self): return self.__field_serial2.getvalue() def __setfield_serial2(self, value): if isinstance(value,UINT): self.__field_serial2=value else: self.__field_serial2=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial2(self): del self.__field_serial2 serial2=property(__getfield_serial2, __setfield_serial2, __delfield_serial2, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 2}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING,'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_group(self): try: self.__field_group except: self.__field_group=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx9800_132, 'length': NUMEMAILS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_lgvx9800_132, 'length': NUMEMAILS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "ringtone index for a call") def __getfield_msgringtone(self): try: self.__field_msgringtone except: self.__field_msgringtone=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) return self.__field_msgringtone.getvalue() def __setfield_msgringtone(self, value): if isinstance(value,UINT): self.__field_msgringtone=value else: self.__field_msgringtone=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_msgringtone(self): del self.__field_msgringtone msgringtone=property(__getfield_msgringtone, __setfield_msgringtone, __delfield_msgringtone, "ringtone index for a text message") def __getfield_wallpaper(self): try: self.__field_wallpaper except: self.__field_wallpaper=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_numbertypes(self): try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx9800_137, 'length': NUMPHONENUMBERS}) return self.__field_numbertypes.getvalue() def __setfield_numbertypes(self, value): if isinstance(value,LIST): self.__field_numbertypes=value else: self.__field_numbertypes=LIST(value,**{'elementclass': _gen_p_lgvx9800_137, 'length': NUMPHONENUMBERS}) def __delfield_numbertypes(self): del self.__field_numbertypes numbertypes=property(__getfield_numbertypes, __setfield_numbertypes, __delfield_numbertypes, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx9800_139, 'length': NUMPHONENUMBERS}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'elementclass': _gen_p_lgvx9800_139, 'length': NUMPHONENUMBERS}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_memo(self): try: self.__field_memo except: self.__field_memo=USTRING(**{'sizeinbytes': 61, 'default': '', 'raiseonunterminatedread': False}) return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,USTRING): self.__field_memo=value else: self.__field_memo=USTRING(value,**{'sizeinbytes': 61, 'default': '', 'raiseonunterminatedread': False}) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def __getfield_unknown(self): try: self.__field_unknown except: self.__field_unknown=UNKNOWN() return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UNKNOWN): self.__field_unknown=value else: self.__field_unknown=UNKNOWN(value,) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def iscontainer(self): return True def containerelements(self): yield ('serial1', self.__field_serial1, None) yield ('entrysize', self.__field_entrysize, None) yield ('serial2', self.__field_serial2, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('name', self.__field_name, None) yield ('group', self.__field_group, None) yield ('emails', self.__field_emails, None) yield ('ringtone', self.__field_ringtone, "ringtone index for a call") yield ('msgringtone', self.__field_msgringtone, "ringtone index for a text message") yield ('wallpaper', self.__field_wallpaper, None) yield ('numbertypes', self.__field_numbertypes, None) yield ('numbers', self.__field_numbers, None) yield ('memo', self.__field_memo, None) yield ('unknown', self.__field_unknown, None) class _gen_p_lgvx9800_132(BaseProtogenClass): 'Anonymous inner class' __fields=['email'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx9800_132,self).__init__(**dict) if self.__class__ is _gen_p_lgvx9800_132: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx9800_132,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx9800_132,kwargs) if len(args): dict2={'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_email=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_email.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_email=USTRING(**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_email.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def iscontainer(self): return True def containerelements(self): yield ('email', self.__field_email, None) class _gen_p_lgvx9800_137(BaseProtogenClass): 'Anonymous inner class' __fields=['numbertype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx9800_137,self).__init__(**dict) if self.__class__ is _gen_p_lgvx9800_137: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx9800_137,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx9800_137,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_numbertype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numbertype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numbertype=UINT(**{'sizeinbytes': 1}) self.__field_numbertype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numbertype(self): return self.__field_numbertype.getvalue() def __setfield_numbertype(self, value): if isinstance(value,UINT): self.__field_numbertype=value else: self.__field_numbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_numbertype(self): del self.__field_numbertype numbertype=property(__getfield_numbertype, __setfield_numbertype, __delfield_numbertype, None) def iscontainer(self): return True def containerelements(self): yield ('numbertype', self.__field_numbertype, None) class _gen_p_lgvx9800_139(BaseProtogenClass): 'Anonymous inner class' __fields=['number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx9800_139,self).__init__(**dict) if self.__class__ is _gen_p_lgvx9800_139: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx9800_139,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx9800_139,kwargs) if len(args): dict2={'sizeinbytes': 49, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_number=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) class pbfileentry(BaseProtogenClass): __fields=['serial1', 'entrynumber', 'data1', 'wallpaper', 'data2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbfileentry,self).__init__(**dict) if self.__class__ is pbfileentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbfileentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbfileentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_serial1.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_data1.writetobuffer(buf) self.__field_wallpaper.writetobuffer(buf) self.__field_data2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 2}) self.__field_entrynumber.readfrombuffer(buf) self.__field_data1=UNKNOWN(**{'sizeinbytes': 127}) self.__field_data1.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 2}) self.__field_wallpaper.readfrombuffer(buf) self.__field_data2=UNKNOWN(**{'sizeinbytes': 76}) self.__field_data2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 2}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_data1(self): return self.__field_data1.getvalue() def __setfield_data1(self, value): if isinstance(value,UNKNOWN): self.__field_data1=value else: self.__field_data1=UNKNOWN(value,**{'sizeinbytes': 127}) def __delfield_data1(self): del self.__field_data1 data1=property(__getfield_data1, __setfield_data1, __delfield_data1, None) def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 2}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_data2(self): return self.__field_data2.getvalue() def __setfield_data2(self, value): if isinstance(value,UNKNOWN): self.__field_data2=value else: self.__field_data2=UNKNOWN(value,**{'sizeinbytes': 76}) def __delfield_data2(self): del self.__field_data2 data2=property(__getfield_data2, __setfield_data2, __delfield_data2, None) def iscontainer(self): return True def containerelements(self): yield ('serial1', self.__field_serial1, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('data1', self.__field_data1, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('data2', self.__field_data2, None) class pbfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbfile,self).__init__(**dict) if self.__class__ is pbfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbfile,kwargs) if len(args): dict2={ 'elementclass': pbfileentry } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': pbfileentry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': pbfileentry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class wallpaper_id(BaseProtogenClass): __fields=['path'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(wallpaper_id,self).__init__(**dict) if self.__class__ is wallpaper_id: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(wallpaper_id,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(wallpaper_id,kwargs) if len(args): dict2={'sizeinbytes': 80, 'terminator': None, 'pad': 0xFF, 'default': "" } dict2.update(kwargs) kwargs=dict2 self.__field_path=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_path except: self.__field_path=USTRING(**{'sizeinbytes': 80, 'terminator': None, 'pad': 0xFF, 'default': "" }) self.__field_path.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_path=USTRING(**{'sizeinbytes': 80, 'terminator': None, 'pad': 0xFF, 'default': "" }) self.__field_path.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_path(self): try: self.__field_path except: self.__field_path=USTRING(**{'sizeinbytes': 80, 'terminator': None, 'pad': 0xFF, 'default': "" }) return self.__field_path.getvalue() def __setfield_path(self, value): if isinstance(value,USTRING): self.__field_path=value else: self.__field_path=USTRING(value,**{'sizeinbytes': 80, 'terminator': None, 'pad': 0xFF, 'default': "" }) def __delfield_path(self): del self.__field_path path=property(__getfield_path, __setfield_path, __delfield_path, None) def iscontainer(self): return True def containerelements(self): yield ('path', self.__field_path, None) class wallpaper_id_file(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(wallpaper_id_file,self).__init__(**dict) if self.__class__ is wallpaper_id_file: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(wallpaper_id_file,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(wallpaper_id_file,kwargs) if len(args): dict2={ 'length': NUMPHONEBOOKENTRIES, 'elementclass': wallpaper_id, 'createdefault': True } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'length': NUMPHONEBOOKENTRIES, 'elementclass': wallpaper_id, 'createdefault': True }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'length': NUMPHONEBOOKENTRIES, 'elementclass': wallpaper_id, 'createdefault': True }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'length': NUMPHONEBOOKENTRIES, 'elementclass': wallpaper_id, 'createdefault': True }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'length': NUMPHONEBOOKENTRIES, 'elementclass': wallpaper_id, 'createdefault': True }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class pbreadentryresponse(BaseProtogenClass): "Results of reading one entry" __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbreadentryresponse,self).__init__(**dict) if self.__class__ is pbreadentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbreadentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbreadentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbupdateentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbupdateentryrequest,self).__init__(**dict) if self.__class__ is pbupdateentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbupdateentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbupdateentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x04, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbappendentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbappendentryrequest,self).__init__(**dict) if self.__class__ is pbappendentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbappendentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbappendentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x03, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class scheduleexception(BaseProtogenClass): __fields=['pos', 'day', 'month', 'year'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexception,self).__init__(**dict) if self.__class__ is scheduleexception: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexception,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexception,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_day.writetobuffer(buf) self.__field_month.writetobuffer(buf) self.__field_year.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_day=UINT(**{'sizeinbytes': 1}) self.__field_day.readfrombuffer(buf) self.__field_month=UINT(**{'sizeinbytes': 1}) self.__field_month.readfrombuffer(buf) self.__field_year=UINT(**{'sizeinbytes': 2}) self.__field_year.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "Refers to event id (position in schedule file) that this suppresses") def __getfield_day(self): return self.__field_day.getvalue() def __setfield_day(self, value): if isinstance(value,UINT): self.__field_day=value else: self.__field_day=UINT(value,**{'sizeinbytes': 1}) def __delfield_day(self): del self.__field_day day=property(__getfield_day, __setfield_day, __delfield_day, None) def __getfield_month(self): return self.__field_month.getvalue() def __setfield_month(self, value): if isinstance(value,UINT): self.__field_month=value else: self.__field_month=UINT(value,**{'sizeinbytes': 1}) def __delfield_month(self): del self.__field_month month=property(__getfield_month, __setfield_month, __delfield_month, None) def __getfield_year(self): return self.__field_year.getvalue() def __setfield_year(self, value): if isinstance(value,UINT): self.__field_year=value else: self.__field_year=UINT(value,**{'sizeinbytes': 2}) def __delfield_year(self): del self.__field_year year=property(__getfield_year, __setfield_year, __delfield_year, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "Refers to event id (position in schedule file) that this suppresses") yield ('day', self.__field_day, None) yield ('month', self.__field_month, None) yield ('year', self.__field_year, None) class scheduleexceptionfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexceptionfile,self).__init__(**dict) if self.__class__ is scheduleexceptionfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexceptionfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexceptionfile,kwargs) if len(args): dict2={'elementclass': scheduleexception} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': scheduleexception}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class scheduleevent(BaseProtogenClass): __fields=['pos', 'description', 'start', 'end', 'repeat', 'alarmindex_vibrate', 'ringtone', 'unknown1', 'alarmminutes', 'alarmhours', 'unknown2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleevent,self).__init__(**dict) if self.__class__ is scheduleevent: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleevent,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleevent,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_description.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) self.__field_alarmindex_vibrate.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_alarmminutes.writetobuffer(buf) self.__field_alarmhours.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_description=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_description.readfrombuffer(buf) self.__field_start=LGCALDATE(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=LGCALDATE(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_repeat=LGCALREPEAT(**{'sizeinbytes': 4}) self.__field_repeat.readfrombuffer(buf) self.__field_alarmindex_vibrate=UINT(**{'sizeinbytes': 1}) self.__field_alarmindex_vibrate.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_alarmminutes=UINT(**{'sizeinbytes': 1}) self.__field_alarmminutes.readfrombuffer(buf) self.__field_alarmhours=UINT(**{'sizeinbytes': 1}) self.__field_alarmhours.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "position within file, used as an event id") def __getfield_description(self): return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,USTRING): self.__field_description=value else: self.__field_description=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,LGCALDATE): self.__field_start=value else: self.__field_start=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,LGCALDATE): self.__field_end=value else: self.__field_end=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,LGCALREPEAT): self.__field_repeat=value else: self.__field_repeat=LGCALREPEAT(value,**{'sizeinbytes': 4}) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_alarmindex_vibrate(self): return self.__field_alarmindex_vibrate.getvalue() def __setfield_alarmindex_vibrate(self, value): if isinstance(value,UINT): self.__field_alarmindex_vibrate=value else: self.__field_alarmindex_vibrate=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmindex_vibrate(self): del self.__field_alarmindex_vibrate alarmindex_vibrate=property(__getfield_alarmindex_vibrate, __setfield_alarmindex_vibrate, __delfield_alarmindex_vibrate, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_alarmminutes(self): return self.__field_alarmminutes.getvalue() def __setfield_alarmminutes(self, value): if isinstance(value,UINT): self.__field_alarmminutes=value else: self.__field_alarmminutes=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmminutes(self): del self.__field_alarmminutes alarmminutes=property(__getfield_alarmminutes, __setfield_alarmminutes, __delfield_alarmminutes, "a value of 0xFF indicates not set") def __getfield_alarmhours(self): return self.__field_alarmhours.getvalue() def __setfield_alarmhours(self, value): if isinstance(value,UINT): self.__field_alarmhours=value else: self.__field_alarmhours=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmhours(self): del self.__field_alarmhours alarmhours=property(__getfield_alarmhours, __setfield_alarmhours, __delfield_alarmhours, "a value of 0xFF indicates not set") def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "position within file, used as an event id") yield ('description', self.__field_description, None) yield ('start', self.__field_start, None) yield ('end', self.__field_end, None) yield ('repeat', self.__field_repeat, None) yield ('alarmindex_vibrate', self.__field_alarmindex_vibrate, None) yield ('ringtone', self.__field_ringtone, None) yield ('unknown1', self.__field_unknown1, None) yield ('alarmminutes', self.__field_alarmminutes, "a value of 0xFF indicates not set") yield ('alarmhours', self.__field_alarmhours, "a value of 0xFF indicates not set") yield ('unknown2', self.__field_unknown2, None) class schedulefile(BaseProtogenClass): __fields=['numactiveitems', 'events'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(schedulefile,self).__init__(**dict) if self.__class__ is schedulefile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(schedulefile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(schedulefile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{'elementclass': scheduleevent}) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('events', self.__field_events, None) class call(BaseProtogenClass): __fields=['GPStime', 'unknown2', 'duration', 'number', 'name', 'numberlength', 'pbnumbertype', 'unknown2', 'pbentrynum'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(call,self).__init__(**dict) if self.__class__ is call: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(call,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(call,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_numberlength.writetobuffer(buf) self.__field_pbnumbertype.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_pbentrynum.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 4}) self.__field_unknown2.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_numberlength=UINT(**{'sizeinbytes': 2}) self.__field_numberlength.readfrombuffer(buf) self.__field_pbnumbertype=UINT(**{'sizeinbytes': 1}) self.__field_pbnumbertype.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 3}) self.__field_unknown2.readfrombuffer(buf) self.__field_pbentrynum=UINT(**{'sizeinbytes': 2}) self.__field_pbentrynum.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numberlength(self): return self.__field_numberlength.getvalue() def __setfield_numberlength(self, value): if isinstance(value,UINT): self.__field_numberlength=value else: self.__field_numberlength=UINT(value,**{'sizeinbytes': 2}) def __delfield_numberlength(self): del self.__field_numberlength numberlength=property(__getfield_numberlength, __setfield_numberlength, __delfield_numberlength, None) def __getfield_pbnumbertype(self): return self.__field_pbnumbertype.getvalue() def __setfield_pbnumbertype(self, value): if isinstance(value,UINT): self.__field_pbnumbertype=value else: self.__field_pbnumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_pbnumbertype(self): del self.__field_pbnumbertype pbnumbertype=property(__getfield_pbnumbertype, __setfield_pbnumbertype, __delfield_pbnumbertype, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_pbentrynum(self): return self.__field_pbentrynum.getvalue() def __setfield_pbentrynum(self, value): if isinstance(value,UINT): self.__field_pbentrynum=value else: self.__field_pbentrynum=UINT(value,**{'sizeinbytes': 2}) def __delfield_pbentrynum(self): del self.__field_pbentrynum pbentrynum=property(__getfield_pbentrynum, __setfield_pbentrynum, __delfield_pbentrynum, None) def iscontainer(self): return True def containerelements(self): yield ('GPStime', self.__field_GPStime, None) yield ('unknown2', self.__field_unknown2, None) yield ('duration', self.__field_duration, None) yield ('number', self.__field_number, None) yield ('name', self.__field_name, None) yield ('numberlength', self.__field_numberlength, None) yield ('pbnumbertype', self.__field_pbnumbertype, None) yield ('unknown2', self.__field_unknown2, None) yield ('pbentrynum', self.__field_pbentrynum, None) class callhistory(BaseProtogenClass): __fields=['numcalls', 'unknown1', 'calls'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callhistory,self).__init__(**dict) if self.__class__ is callhistory: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callhistory,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callhistory,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numcalls.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numcalls=UINT(**{'sizeinbytes': 4}) self.__field_numcalls.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numcalls(self): return self.__field_numcalls.getvalue() def __setfield_numcalls(self, value): if isinstance(value,UINT): self.__field_numcalls=value else: self.__field_numcalls=UINT(value,**{'sizeinbytes': 4}) def __delfield_numcalls(self): del self.__field_numcalls numcalls=property(__getfield_numcalls, __setfield_numcalls, __delfield_numcalls, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_calls(self): try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) return self.__field_calls.getvalue() def __setfield_calls(self, value): if isinstance(value,LIST): self.__field_calls=value else: self.__field_calls=LIST(value,**{'elementclass': call}) def __delfield_calls(self): del self.__field_calls calls=property(__getfield_calls, __setfield_calls, __delfield_calls, None) def iscontainer(self): return True def containerelements(self): yield ('numcalls', self.__field_numcalls, None) yield ('unknown1', self.__field_unknown1, None) yield ('calls', self.__field_calls, None) class recipient_record(BaseProtogenClass): __fields=['unknown1', 'number', 'status', 'timesent', 'timereceived', 'unknown2', 'unknown3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(recipient_record,self).__init__(**dict) if self.__class__ is recipient_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(recipient_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(recipient_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_timereceived.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=DATA(**{'sizeinbytes': 45}) self.__field_unknown1.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49}) self.__field_number.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_timereceived=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timereceived.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=DATA(**{'sizeinbytes': 40}) self.__field_unknown3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,DATA): self.__field_unknown1=value else: self.__field_unknown1=DATA(value,**{'sizeinbytes': 45}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_timereceived(self): return self.__field_timereceived.getvalue() def __setfield_timereceived(self, value): if isinstance(value,LGCALDATE): self.__field_timereceived=value else: self.__field_timereceived=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timereceived(self): del self.__field_timereceived timereceived=property(__getfield_timereceived, __setfield_timereceived, __delfield_timereceived, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,DATA): self.__field_unknown3=value else: self.__field_unknown3=DATA(value,**{'sizeinbytes': 40}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('number', self.__field_number, None) yield ('status', self.__field_status, None) yield ('timesent', self.__field_timesent, None) yield ('timereceived', self.__field_timereceived, None) yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) class sms_saved(BaseProtogenClass): __fields=['inboxmsg', 'GPStime', 'outbox', 'inbox'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_saved,self).__init__(**dict) if self.__class__ is sms_saved: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_saved,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_saved,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_inboxmsg.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) if not self.inboxmsg: self.__field_outbox.writetobuffer(buf) if self.inboxmsg: self.__field_inbox.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_inboxmsg=UINT(**{'sizeinbytes': 4}) self.__field_inboxmsg.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) if not self.inboxmsg: self.__field_outbox=sms_out() self.__field_outbox.readfrombuffer(buf) if self.inboxmsg: self.__field_inbox=sms_in() self.__field_inbox.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_inboxmsg(self): return self.__field_inboxmsg.getvalue() def __setfield_inboxmsg(self, value): if isinstance(value,UINT): self.__field_inboxmsg=value else: self.__field_inboxmsg=UINT(value,**{'sizeinbytes': 4}) def __delfield_inboxmsg(self): del self.__field_inboxmsg inboxmsg=property(__getfield_inboxmsg, __setfield_inboxmsg, __delfield_inboxmsg, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_outbox(self): return self.__field_outbox.getvalue() def __setfield_outbox(self, value): if isinstance(value,sms_out): self.__field_outbox=value else: self.__field_outbox=sms_out(value,) def __delfield_outbox(self): del self.__field_outbox outbox=property(__getfield_outbox, __setfield_outbox, __delfield_outbox, None) def __getfield_inbox(self): return self.__field_inbox.getvalue() def __setfield_inbox(self, value): if isinstance(value,sms_in): self.__field_inbox=value else: self.__field_inbox=sms_in(value,) def __delfield_inbox(self): del self.__field_inbox inbox=property(__getfield_inbox, __setfield_inbox, __delfield_inbox, None) def iscontainer(self): return True def containerelements(self): yield ('inboxmsg', self.__field_inboxmsg, None) yield ('GPStime', self.__field_GPStime, None) if not self.inboxmsg: yield ('outbox', self.__field_outbox, None) if self.inboxmsg: yield ('inbox', self.__field_inbox, None) class msg_record(BaseProtogenClass): __fields=['binary', 'unknown3', 'unknown4', 'unknown6', 'length', 'msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(msg_record,self).__init__(**dict) if self.__class__ is msg_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(msg_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(msg_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_binary.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_length.writetobuffer(buf) try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx9800_288, 'length': 220}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_binary=UINT(**{'sizeinbytes': 1}) self.__field_binary.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1}) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 1}) self.__field_unknown4.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 1}) self.__field_unknown6.readfrombuffer(buf) self.__field_length=UINT(**{'sizeinbytes': 1}) self.__field_length.readfrombuffer(buf) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx9800_288, 'length': 220}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_binary(self): return self.__field_binary.getvalue() def __setfield_binary(self, value): if isinstance(value,UINT): self.__field_binary=value else: self.__field_binary=UINT(value,**{'sizeinbytes': 1}) def __delfield_binary(self): del self.__field_binary binary=property(__getfield_binary, __setfield_binary, __delfield_binary, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_length(self): return self.__field_length.getvalue() def __setfield_length(self, value): if isinstance(value,UINT): self.__field_length=value else: self.__field_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_length(self): del self.__field_length length=property(__getfield_length, __setfield_length, __delfield_length, None) def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx9800_288, 'length': 220}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx9800_288, 'length': 220}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('binary', self.__field_binary, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) yield ('unknown6', self.__field_unknown6, None) yield ('length', self.__field_length, None) yield ('msg', self.__field_msg, None) class _gen_p_lgvx9800_288(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx9800_288,self).__init__(**dict) if self.__class__ is _gen_p_lgvx9800_288: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx9800_288,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx9800_288,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class sms_out(BaseProtogenClass): __fields=['index', 'unknown1', 'locked', 'timesent', 'unknown2', 'GPStime', 'subject', 'unknown4', 'num_msg_elements', 'unknown6', 'messages', 'priority', 'unknown7', 'unknown8', 'callback', 'recipients', 'unknown8'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_out,self).__init__(**dict) if self.__class__ is sms_out: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_out,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_out,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) self.__field_messages.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_unknown7.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) self.__field_callback.writetobuffer(buf) try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 10}) self.__field_recipients.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2}) self.__field_unknown2.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 1}) self.__field_unknown4.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 1}) self.__field_unknown6.readfrombuffer(buf) self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) self.__field_messages.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_unknown7=DATA(**{'sizeinbytes': 12}) self.__field_unknown7.readfrombuffer(buf) self.__field_unknown8=DATA(**{'sizeinbytes': 3}) self.__field_unknown8.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 23}) self.__field_callback.readfrombuffer(buf) self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 10}) self.__field_recipients.readfrombuffer(buf) self.__field_unknown8=UNKNOWN() self.__field_unknown8.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_messages(self): try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) return self.__field_messages.getvalue() def __setfield_messages(self, value): if isinstance(value,LIST): self.__field_messages=value else: self.__field_messages=LIST(value,**{'elementclass': msg_record, 'length': 7}) def __delfield_messages(self): del self.__field_messages messages=property(__getfield_messages, __setfield_messages, __delfield_messages, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_unknown7(self): return self.__field_unknown7.getvalue() def __setfield_unknown7(self, value): if isinstance(value,DATA): self.__field_unknown7=value else: self.__field_unknown7=DATA(value,**{'sizeinbytes': 12}) def __delfield_unknown7(self): del self.__field_unknown7 unknown7=property(__getfield_unknown7, __setfield_unknown7, __delfield_unknown7, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,DATA): self.__field_unknown8=value else: self.__field_unknown8=DATA(value,**{'sizeinbytes': 3}) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 23}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_recipients(self): try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 10}) return self.__field_recipients.getvalue() def __setfield_recipients(self, value): if isinstance(value,LIST): self.__field_recipients=value else: self.__field_recipients=LIST(value,**{'elementclass': recipient_record,'length': 10}) def __delfield_recipients(self): del self.__field_recipients recipients=property(__getfield_recipients, __setfield_recipients, __delfield_recipients, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,UNKNOWN): self.__field_unknown8=value else: self.__field_unknown8=UNKNOWN(value,) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('unknown1', self.__field_unknown1, None) yield ('locked', self.__field_locked, None) yield ('timesent', self.__field_timesent, None) yield ('unknown2', self.__field_unknown2, None) yield ('GPStime', self.__field_GPStime, None) yield ('subject', self.__field_subject, None) yield ('unknown4', self.__field_unknown4, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('unknown6', self.__field_unknown6, None) yield ('messages', self.__field_messages, None) yield ('priority', self.__field_priority, None) yield ('unknown7', self.__field_unknown7, None) yield ('unknown8', self.__field_unknown8, None) yield ('callback', self.__field_callback, None) yield ('recipients', self.__field_recipients, None) yield ('unknown8', self.__field_unknown8, None) class SMSINBOXMSGFRAGMENT(BaseProtogenClass): __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSINBOXMSGFRAGMENT,self).__init__(**dict) if self.__class__ is SMSINBOXMSGFRAGMENT: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSINBOXMSGFRAGMENT,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSINBOXMSGFRAGMENT,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx9800_311, 'length': 181} dict2.update(kwargs) kwargs=dict2 self.__field_msg=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx9800_311, 'length': 181}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx9800_311, 'length': 181}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx9800_311, 'length': 181}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx9800_311, 'length': 181}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class _gen_p_lgvx9800_311(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx9800_311,self).__init__(**dict) if self.__class__ is _gen_p_lgvx9800_311: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx9800_311,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx9800_311,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class sms_in(BaseProtogenClass): __fields=['msg_index1', 'msg_index2', 'unknown2', 'timesent', 'unknown', 'callback_length', 'callback', 'sender_length', 'sender', 'unknown3', 'lg_time', 'unknown4', 'GPStime', 'unknown5', 'read', 'locked', 'unknown8', 'priority', 'unknown11', 'subject', 'bin_header1', 'bin_header2', 'unknown6', 'multipartID', 'unknown14', 'bin_header3', 'num_msg_elements', 'msglengths', 'msgs', 'unknown12', 'senders_name', 'unknown9'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_in,self).__init__(**dict) if self.__class__ is sms_in: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_in,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_in,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msg_index1.writetobuffer(buf) self.__field_msg_index2.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self.__field_callback_length.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_sender_length.writetobuffer(buf) try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx9800_323, 'length': 38}) self.__field_sender.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_lg_time.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_unknown11.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_bin_header1.writetobuffer(buf) self.__field_bin_header2.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_multipartID.writetobuffer(buf) self.__field_unknown14.writetobuffer(buf) self.__field_bin_header3.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx9800_343, 'length': 20}) self.__field_msglengths.writetobuffer(buf) try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.writetobuffer(buf) self.__field_unknown12.writetobuffer(buf) self.__field_senders_name.writetobuffer(buf) self.__field_unknown9.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg_index1=UINT(**{'sizeinbytes': 4}) self.__field_msg_index1.readfrombuffer(buf) self.__field_msg_index2=UINT(**{'sizeinbytes': 4}) self.__field_msg_index2.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2}) self.__field_unknown2.readfrombuffer(buf) self.__field_timesent=SMSDATE(**{'sizeinbytes': 6}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown=UINT(**{'sizeinbytes': 3}) self.__field_unknown.readfrombuffer(buf) self.__field_callback_length=UINT(**{'sizeinbytes': 1}) self.__field_callback_length.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 38}) self.__field_callback.readfrombuffer(buf) self.__field_sender_length=UINT(**{'sizeinbytes': 1}) self.__field_sender_length.readfrombuffer(buf) self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx9800_323, 'length': 38}) self.__field_sender.readfrombuffer(buf) self.__field_unknown3=DATA(**{'sizeinbytes': 12}) self.__field_unknown3.readfrombuffer(buf) self.__field_lg_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_lg_time.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 3}) self.__field_unknown4.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 4}) self.__field_unknown5.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 1}) self.__field_read.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown8=UINT(**{'sizeinbytes': 2}) self.__field_unknown8.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_unknown11=DATA(**{'sizeinbytes': 6}) self.__field_unknown11.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_bin_header1=UINT(**{'sizeinbytes': 1}) self.__field_bin_header1.readfrombuffer(buf) self.__field_bin_header2=UINT(**{'sizeinbytes': 1}) self.__field_bin_header2.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 2}) self.__field_unknown6.readfrombuffer(buf) self.__field_multipartID=UINT(**{'sizeinbytes': 2}) self.__field_multipartID.readfrombuffer(buf) self.__field_unknown14=UINT(**{'sizeinbytes': 2}) self.__field_unknown14.readfrombuffer(buf) self.__field_bin_header3=UINT(**{'sizeinbytes': 1}) self.__field_bin_header3.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx9800_343, 'length': 20}) self.__field_msglengths.readfrombuffer(buf) self.__field_msgs=LIST(**{'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.readfrombuffer(buf) self.__field_unknown12=DATA(**{'sizeinbytes': 101}) self.__field_unknown12.readfrombuffer(buf) self.__field_senders_name=USTRING(**{'sizeinbytes': 59, 'encoding': PHONE_ENCODING}) self.__field_senders_name.readfrombuffer(buf) self.__field_unknown9=DATA() self.__field_unknown9.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg_index1(self): return self.__field_msg_index1.getvalue() def __setfield_msg_index1(self, value): if isinstance(value,UINT): self.__field_msg_index1=value else: self.__field_msg_index1=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index1(self): del self.__field_msg_index1 msg_index1=property(__getfield_msg_index1, __setfield_msg_index1, __delfield_msg_index1, None) def __getfield_msg_index2(self): return self.__field_msg_index2.getvalue() def __setfield_msg_index2(self, value): if isinstance(value,UINT): self.__field_msg_index2=value else: self.__field_msg_index2=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index2(self): del self.__field_msg_index2 msg_index2=property(__getfield_msg_index2, __setfield_msg_index2, __delfield_msg_index2, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,SMSDATE): self.__field_timesent=value else: self.__field_timesent=SMSDATE(value,**{'sizeinbytes': 6}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UINT): self.__field_unknown=value else: self.__field_unknown=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def __getfield_callback_length(self): return self.__field_callback_length.getvalue() def __setfield_callback_length(self, value): if isinstance(value,UINT): self.__field_callback_length=value else: self.__field_callback_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_length(self): del self.__field_callback_length callback_length=property(__getfield_callback_length, __setfield_callback_length, __delfield_callback_length, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 38}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_sender_length(self): return self.__field_sender_length.getvalue() def __setfield_sender_length(self, value): if isinstance(value,UINT): self.__field_sender_length=value else: self.__field_sender_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_sender_length(self): del self.__field_sender_length sender_length=property(__getfield_sender_length, __setfield_sender_length, __delfield_sender_length, None) def __getfield_sender(self): try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx9800_323, 'length': 38}) return self.__field_sender.getvalue() def __setfield_sender(self, value): if isinstance(value,LIST): self.__field_sender=value else: self.__field_sender=LIST(value,**{'elementclass': _gen_p_lgvx9800_323, 'length': 38}) def __delfield_sender(self): del self.__field_sender sender=property(__getfield_sender, __setfield_sender, __delfield_sender, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,DATA): self.__field_unknown3=value else: self.__field_unknown3=DATA(value,**{'sizeinbytes': 12}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_lg_time(self): return self.__field_lg_time.getvalue() def __setfield_lg_time(self, value): if isinstance(value,LGCALDATE): self.__field_lg_time=value else: self.__field_lg_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_lg_time(self): del self.__field_lg_time lg_time=property(__getfield_lg_time, __setfield_lg_time, __delfield_lg_time, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 1}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,UINT): self.__field_unknown8=value else: self.__field_unknown8=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_unknown11(self): return self.__field_unknown11.getvalue() def __setfield_unknown11(self, value): if isinstance(value,DATA): self.__field_unknown11=value else: self.__field_unknown11=DATA(value,**{'sizeinbytes': 6}) def __delfield_unknown11(self): del self.__field_unknown11 unknown11=property(__getfield_unknown11, __setfield_unknown11, __delfield_unknown11, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_bin_header1(self): return self.__field_bin_header1.getvalue() def __setfield_bin_header1(self, value): if isinstance(value,UINT): self.__field_bin_header1=value else: self.__field_bin_header1=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header1(self): del self.__field_bin_header1 bin_header1=property(__getfield_bin_header1, __setfield_bin_header1, __delfield_bin_header1, None) def __getfield_bin_header2(self): return self.__field_bin_header2.getvalue() def __setfield_bin_header2(self, value): if isinstance(value,UINT): self.__field_bin_header2=value else: self.__field_bin_header2=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header2(self): del self.__field_bin_header2 bin_header2=property(__getfield_bin_header2, __setfield_bin_header2, __delfield_bin_header2, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_multipartID(self): return self.__field_multipartID.getvalue() def __setfield_multipartID(self, value): if isinstance(value,UINT): self.__field_multipartID=value else: self.__field_multipartID=UINT(value,**{'sizeinbytes': 2}) def __delfield_multipartID(self): del self.__field_multipartID multipartID=property(__getfield_multipartID, __setfield_multipartID, __delfield_multipartID, None) def __getfield_unknown14(self): return self.__field_unknown14.getvalue() def __setfield_unknown14(self, value): if isinstance(value,UINT): self.__field_unknown14=value else: self.__field_unknown14=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown14(self): del self.__field_unknown14 unknown14=property(__getfield_unknown14, __setfield_unknown14, __delfield_unknown14, None) def __getfield_bin_header3(self): return self.__field_bin_header3.getvalue() def __setfield_bin_header3(self, value): if isinstance(value,UINT): self.__field_bin_header3=value else: self.__field_bin_header3=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header3(self): del self.__field_bin_header3 bin_header3=property(__getfield_bin_header3, __setfield_bin_header3, __delfield_bin_header3, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_msglengths(self): try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx9800_343, 'length': 20}) return self.__field_msglengths.getvalue() def __setfield_msglengths(self, value): if isinstance(value,LIST): self.__field_msglengths=value else: self.__field_msglengths=LIST(value,**{'elementclass': _gen_p_lgvx9800_343, 'length': 20}) def __delfield_msglengths(self): del self.__field_msglengths msglengths=property(__getfield_msglengths, __setfield_msglengths, __delfield_msglengths, None) def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def __getfield_unknown12(self): return self.__field_unknown12.getvalue() def __setfield_unknown12(self, value): if isinstance(value,DATA): self.__field_unknown12=value else: self.__field_unknown12=DATA(value,**{'sizeinbytes': 101}) def __delfield_unknown12(self): del self.__field_unknown12 unknown12=property(__getfield_unknown12, __setfield_unknown12, __delfield_unknown12, None) def __getfield_senders_name(self): return self.__field_senders_name.getvalue() def __setfield_senders_name(self, value): if isinstance(value,USTRING): self.__field_senders_name=value else: self.__field_senders_name=USTRING(value,**{'sizeinbytes': 59, 'encoding': PHONE_ENCODING}) def __delfield_senders_name(self): del self.__field_senders_name senders_name=property(__getfield_senders_name, __setfield_senders_name, __delfield_senders_name, None) def __getfield_unknown9(self): return self.__field_unknown9.getvalue() def __setfield_unknown9(self, value): if isinstance(value,DATA): self.__field_unknown9=value else: self.__field_unknown9=DATA(value,) def __delfield_unknown9(self): del self.__field_unknown9 unknown9=property(__getfield_unknown9, __setfield_unknown9, __delfield_unknown9, None) def iscontainer(self): return True def containerelements(self): yield ('msg_index1', self.__field_msg_index1, None) yield ('msg_index2', self.__field_msg_index2, None) yield ('unknown2', self.__field_unknown2, None) yield ('timesent', self.__field_timesent, None) yield ('unknown', self.__field_unknown, None) yield ('callback_length', self.__field_callback_length, None) yield ('callback', self.__field_callback, None) yield ('sender_length', self.__field_sender_length, None) yield ('sender', self.__field_sender, None) yield ('unknown3', self.__field_unknown3, None) yield ('lg_time', self.__field_lg_time, None) yield ('unknown4', self.__field_unknown4, None) yield ('GPStime', self.__field_GPStime, None) yield ('unknown5', self.__field_unknown5, None) yield ('read', self.__field_read, None) yield ('locked', self.__field_locked, None) yield ('unknown8', self.__field_unknown8, None) yield ('priority', self.__field_priority, None) yield ('unknown11', self.__field_unknown11, None) yield ('subject', self.__field_subject, None) yield ('bin_header1', self.__field_bin_header1, None) yield ('bin_header2', self.__field_bin_header2, None) yield ('unknown6', self.__field_unknown6, None) yield ('multipartID', self.__field_multipartID, None) yield ('unknown14', self.__field_unknown14, None) yield ('bin_header3', self.__field_bin_header3, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('msglengths', self.__field_msglengths, None) yield ('msgs', self.__field_msgs, None) yield ('unknown12', self.__field_unknown12, None) yield ('senders_name', self.__field_senders_name, None) yield ('unknown9', self.__field_unknown9, None) class _gen_p_lgvx9800_323(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx9800_323,self).__init__(**dict) if self.__class__ is _gen_p_lgvx9800_323: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx9800_323,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx9800_323,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of senders phone number") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of senders phone number") class _gen_p_lgvx9800_343(BaseProtogenClass): 'Anonymous inner class' __fields=['msglength'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx9800_343,self).__init__(**dict) if self.__class__ is _gen_p_lgvx9800_343: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx9800_343,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx9800_343,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_msglength=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msglength.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msglength=UINT(**{'sizeinbytes': 1}) self.__field_msglength.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msglength(self): return self.__field_msglength.getvalue() def __setfield_msglength(self, value): if isinstance(value,UINT): self.__field_msglength=value else: self.__field_msglength=UINT(value,**{'sizeinbytes': 1}) def __delfield_msglength(self): del self.__field_msglength msglength=property(__getfield_msglength, __setfield_msglength, __delfield_msglength, "lengths of individual messages in septets") def iscontainer(self): return True def containerelements(self): yield ('msglength', self.__field_msglength, "lengths of individual messages in septets") class sms_quick_text(BaseProtogenClass): __fields=['msgs'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_quick_text,self).__init__(**dict) if self.__class__ is sms_quick_text: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_quick_text,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_quick_text,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx9800_357, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_msgs=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx9800_357, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) self.__field_msgs.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx9800_357, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) self.__field_msgs.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx9800_357, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'elementclass': _gen_p_lgvx9800_357, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def iscontainer(self): return True def containerelements(self): yield ('msgs', self.__field_msgs, None) class _gen_p_lgvx9800_357(BaseProtogenClass): 'Anonymous inner class' __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx9800_357,self).__init__(**dict) if self.__class__ is _gen_p_lgvx9800_357: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx9800_357,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx9800_357,kwargs) if len(args): dict2={'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""} dict2.update(kwargs) kwargs=dict2 self.__field_msg=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class textmemo(BaseProtogenClass): __fields=['text', 'memotime'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemo,self).__init__(**dict) if self.__class__ is textmemo: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemo,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemo,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_text.writetobuffer(buf) self.__field_memotime.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_text=USTRING(**{'sizeinbytes': 301, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_text.readfrombuffer(buf) self.__field_memotime=LGCALDATE(**{'sizeinbytes': 4}) self.__field_memotime.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,USTRING): self.__field_text=value else: self.__field_text=USTRING(value,**{'sizeinbytes': 301, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def __getfield_memotime(self): return self.__field_memotime.getvalue() def __setfield_memotime(self, value): if isinstance(value,LGCALDATE): self.__field_memotime=value else: self.__field_memotime=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_memotime(self): del self.__field_memotime memotime=property(__getfield_memotime, __setfield_memotime, __delfield_memotime, None) def iscontainer(self): return True def containerelements(self): yield ('text', self.__field_text, None) yield ('memotime', self.__field_memotime, None) class textmemofile(BaseProtogenClass): __fields=['itemcount', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemofile,self).__init__(**dict) if self.__class__ is textmemofile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemofile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemofile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_itemcount.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_itemcount=UINT(**{'sizeinbytes': 4}) self.__field_itemcount.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_itemcount(self): return self.__field_itemcount.getvalue() def __setfield_itemcount(self, value): if isinstance(value,UINT): self.__field_itemcount=value else: self.__field_itemcount=UINT(value,**{'sizeinbytes': 4}) def __delfield_itemcount(self): del self.__field_itemcount itemcount=property(__getfield_itemcount, __setfield_itemcount, __delfield_itemcount, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': textmemo }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('itemcount', self.__field_itemcount, None) yield ('items', self.__field_items, None) class firmwareresponse(BaseProtogenClass): __fields=['command', 'date1', 'time1', 'date2', 'time2', 'firmware'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(firmwareresponse,self).__init__(**dict) if self.__class__ is firmwareresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(firmwareresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(firmwareresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_date1.writetobuffer(buf) self.__field_time1.writetobuffer(buf) self.__field_date2.writetobuffer(buf) self.__field_time2.writetobuffer(buf) self.__field_firmware.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_date1=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date1.readfrombuffer(buf) self.__field_time1=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time1.readfrombuffer(buf) self.__field_date2=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date2.readfrombuffer(buf) self.__field_time2=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time2.readfrombuffer(buf) self.__field_firmware=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_firmware.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_date1(self): return self.__field_date1.getvalue() def __setfield_date1(self, value): if isinstance(value,USTRING): self.__field_date1=value else: self.__field_date1=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date1(self): del self.__field_date1 date1=property(__getfield_date1, __setfield_date1, __delfield_date1, None) def __getfield_time1(self): return self.__field_time1.getvalue() def __setfield_time1(self, value): if isinstance(value,USTRING): self.__field_time1=value else: self.__field_time1=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time1(self): del self.__field_time1 time1=property(__getfield_time1, __setfield_time1, __delfield_time1, None) def __getfield_date2(self): return self.__field_date2.getvalue() def __setfield_date2(self, value): if isinstance(value,USTRING): self.__field_date2=value else: self.__field_date2=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date2(self): del self.__field_date2 date2=property(__getfield_date2, __setfield_date2, __delfield_date2, None) def __getfield_time2(self): return self.__field_time2.getvalue() def __setfield_time2(self, value): if isinstance(value,USTRING): self.__field_time2=value else: self.__field_time2=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time2(self): del self.__field_time2 time2=property(__getfield_time2, __setfield_time2, __delfield_time2, None) def __getfield_firmware(self): return self.__field_firmware.getvalue() def __setfield_firmware(self, value): if isinstance(value,USTRING): self.__field_firmware=value else: self.__field_firmware=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_firmware(self): del self.__field_firmware firmware=property(__getfield_firmware, __setfield_firmware, __delfield_firmware, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('date1', self.__field_date1, None) yield ('time1', self.__field_time1, None) yield ('date2', self.__field_date2, None) yield ('time2', self.__field_time2, None) yield ('firmware', self.__field_firmware, None) bitpim-1.0.7+dfsg1/src/phones/p_sanyo5300.py0000644001616600161660000000073610122742673016576 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Sanyo SCP-5300""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 _NUMCALLHISTORY=20 _MAXNUMBERLEN=48 _MAXEMAILLEN=48 bitpim-1.0.7+dfsg1/src/phones/com_lgpm225.py0000644001616600161660000015223210554051740016640 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Simon Capper ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### """Communicate with the LG PM225 (Sprint) cell phone""" # standard modules import re import time import cStringIO import sha # my modules import p_lgpm225 import p_brew import common import commport import com_brew import com_phone import com_lg import com_lgvx4400 import helpids import prototypes import call_history import sms import fileinfo import memo class Phone(com_lgvx4400.Phone): "Talk to the LG PM225 cell phone" desc="LG PM225" helpid=helpids.ID_PHONE_LGPM225 protocolclass=p_lgpm225 serialsname='lgpm225' # read only locations, for regular ringers/wallpaper this phone stores # the information in a different location imagelocations=( # offset, index file, files location, type, maximumentries (0x600, "setas/dcamIndex.map", "Dcam/Wallet", "camera", 50, 6), ) ringtonelocations=( # offset, index file, files location, type, maximumentries (0x1100, "setas/voicememoRingerIndex.map", "VoiceDB/All/Memos", "voice_memo", 50, 11), ) builtinimages=('Spectrum', 'Speed', 'Drops', 'Country Road', 'Houses','Tulip', 'Flower', 'Lines', 'Network', 'Abstract') builtinringtones=( 'Tone 1', 'Tone 2', 'Tone 3', 'Tone 4', 'Tone 5', 'Tone 6', 'Alert 1', 'Alert 2', 'Alert 3', 'Alert 4', 'Alert 5', 'Alert 6', 'Moonlight', 'Bumble Bee', 'Latin', 'Baroque', 'Lovable Baby', 'LG Sound', 'Love Song', 'Badinerie', 'Follow Me', 'Head, Shoulders, Knees & Toes', 'Lake Trance', 'Beethoven', 'Let''s Play', 'Piano Concerto No.1', 'Pleasure', 'Leichte Kavallerie', 'Up & Down Melody', 'Vivaldi - Winter') def __init__(self, logtarget, commport): "Calls all the constructors and sets initial modes" com_phone.Phone.__init__(self, logtarget, commport) com_brew.BrewProtocol.__init__(self) com_lg.LGPhonebook.__init__(self) self.log("Attempting to contact phone") self._cal_has_voice_id=hasattr(self.protocolclass, 'cal_has_voice_id') \ and self.protocolclass.cal_has_voice_id self.mode=self.MODENONE #----- PhoneBook ----------------------------------------------------------------------- def getfundamentals(self, results): """Gets information fundamental to interoperating with the phone and UI. Currently this is: - 'uniqueserial' a unique serial number representing the phone - 'groups' the phonebook groups This method is called before we read the phonebook data or before we write phonebook data. """ # use a hash of ESN and other stuff (being paranoid) self.log("Retrieving fundamental phone information") self.log("Phone serial number") results['uniqueserial']=sha.new(self.getfilecontents("nvm/$SYS.ESN")).hexdigest() self.log(results) # now read groups self.log("Reading group information") buf=prototypes.buffer(self.getfilecontents("pim/pbookgroup.dat")) g=self.protocolclass.pbgroups() g.readfrombuffer(buf, logtitle="Groups read") groups={} for i in range(len(g.groups)): if len(g.groups[i].name): # sometimes have zero length names groups[g.groups[i].group_id]={'name': g.groups[i].name } results['groups']=groups self.getwallpaperindices(results) self.getringtoneindices(results) self.log("Fundamentals retrieved") return results def syncbegin(self): self.mode = self.MODEPHONEBOOK self.sendpbcommand(self.protocolclass.pbstartsyncrequest(), self.protocolclass.pbstartsyncresponse) def syncend(self): req=self.protocolclass.pbendsyncrequest() self.sendpbcommand(req, self.protocolclass.pbendsyncresponse) def getphonebook(self,result): """Reads the phonebook data. The L{getfundamentals} information will already be in result.""" pbook={} # Bug in the phone. if you repeatedly read the phone book it starts # returning a random number as the number of entries. We get around # this by switching into brew mode which clears that. self.mode=self.MODENONE self.setmode(self.MODEBREW) self.log("Reading number of phonebook entries") self.mode = self.MODEBREW res=self.sendpbcommand(self.protocolclass.pbinforequest(), self.protocolclass.pbinforesponse) numentries = res.numentries self.log("There are %d entries" % (numentries,)) for i in range(0, numentries): ### Read current entry req=self.protocolclass.pbreadentryrequest() res=self.sendpbcommand(req, self.protocolclass.pbreadentryresponse) self.log("Read entry "+`i`+" - "+res.entry.name) entry=self.extractphonebookentry(res.entry, result) pbook[res.entry.entrynumber]=entry self.progress(i, numentries, res.entry.name) #### Advance to next entry req=self.protocolclass.pbnextentryrequest() self.sendpbcommand(req, self.protocolclass.pbnextentryresponse) pbook=self.get_phonebook_media(pbook, result) self.progress(numentries, numentries, "Phone book read completed") self.log("Phone book read completed") result['phonebook']=pbook cats=[] for i in result['groups']: if result['groups'][i]['name']!='No Group': cats.append(result['groups'][i]['name']) result['categories']=cats return pbook def get_phonebook_media(self, pbook, fundamentals): """This phone does not provide ringtone and image info for contacts in the regular packets so we have to read the filesystem directly """ buf=prototypes.buffer(self.getfilecontents(self.protocolclass.phonebook_media)) g=self.protocolclass.pb_contact_media_file() g.readfrombuffer(buf, logtitle="PB Media read") for i in range(len(g.contacts)): # adjust wallpaper for stock if (g.contacts[i].wallpaper & 0xFF00)==0x100: g.contacts[i].wallpaper-=0x100 if __debug__: tone="None" paper="None" try: tone=fundamentals['ringtone-index'][g.contacts[i].ringer]['name'] except: pass try: paper=fundamentals['wallpaper-index'][g.contacts[i].wallpaper]['name'] except: pass self.log("media entry "+g.contacts[i].name+" ringer "+`tone`+" ("+`g.contacts[i].ringer`+")") self.log("media entry "+g.contacts[i].name+" wallpaper "+`paper`+" ("+`g.contacts[i].wallpaper`+")") if g.contacts[i].index in pbook: self.log("Index "+`g.contacts[i].index`+" found") if g.contacts[i].ringer: try: tone=fundamentals['ringtone-index'][g.contacts[i].ringer]['name'] pbook[g.contacts[i].index]['ringtones']=[{'ringtone': tone, 'use': 'call'}] except: self.log("Exception in ringtone assignment") if g.contacts[i].wallpaper: try: paper=fundamentals['wallpaper-index'][g.contacts[i].wallpaper]['name'] pbook[g.contacts[i].index]['wallpapers']=[{'wallpaper': paper, 'use': 'call'}] except: self.log("Exception in wallpaper assignment") else: self.log("Index "+`g.contacts[i].index`+" not found") return pbook def extractphonebookentry(self, entry, fundamentals): """Return a phonebook entry in BitPim format. This is called from getphonebook.""" res={} # serials res['serials']=[ {'sourcetype': self.serialsname, 'serial1': entry.serial1, 'sourceuniqueid': fundamentals['uniqueserial']} ] # only one name res['names']=[ {'full': entry.name} ] # only one category cat=fundamentals['groups'].get(entry.group, {'name': "No Group"})['name'] if cat!="No Group": res['categories']=[ {'category': cat} ] # emails res['emails']=[] for i in entry.emails: if len(i.email): res['emails'].append( {'email': i.email} ) if not len(res['emails']): del res['emails'] # it was empty # urls if 'url' in entry.getfields() and len(entry.url): res['urls']=[ {'url': entry.url} ] # private if 'secret' in entry.getfields() and entry.secret: # we only supply secret if it is true res['flags']=[ {'secret': entry.secret } ] # memos if 'memo' in entry.getfields() and len(entry.memo): res['memos']=[ {'memo': entry.memo } ] # numbers res['numbers']=[] for i in range(self.protocolclass.NUMPHONENUMBERS): num=entry.numbers[i].number type=entry.numbertypes[i].numbertype speeddial=entry.numberspeeds[i].numberspeed if len(num): t=self.protocolclass.numbertypetab[type] if speeddial != 0xFF: # invalid entry res['numbers'].append({'number': num, 'type': t, 'speeddial': speeddial}) else: res['numbers'].append({'number': num, 'type': t}) return res def makeentry(self, counter, entry, data): """Creates pbentry object @param counter: The new entry number @param entry: The phonebook object (as returned from convertphonebooktophone) that we are using as the source @param data: The main dictionary, which we use to get access to media indices amongst other things """ e=self.protocolclass.pbentry() e.entrynumber=counter for k in entry: # special treatment for lists if k in ('emails', 'numbers', 'numbertypes', 'numberspeeds'): l=getattr(e,k) for item in entry[k]: l.append(item) elif k=='ringtone': try: e.ringtone=self._findmediainindex(data['ringtone-index'], entry['ringtone'], entry['name'], 'ringtone') except: pass elif k=='msgringtone': pass # not supported by phone #e.msgringtone=self._findmediainindex(data['ringtone-index'], entry['msgringtone'], entry['name'], 'message ringtone') elif k=='wallpaper': try: e.wallpaper=self._findmediainindex(data['wallpaper-index'], entry['wallpaper'], entry['name'], 'wallpaper') # adjust for stock wallpaper if e.wallpaper < 0x100: e.wallpaper+=0x100 except: pass elif k in e.getfields(): # everything else we just set setattr(e,k,entry[k]) return e def save_phonebook_media(self, pb_entries): """This phone does not provide ringtone and image info for contacts in the regular packets so we have to write the filesystem directly """ # we read the file, modify it and write it back buf=prototypes.buffer(self.getfilecontents(self.protocolclass.phonebook_media)) g=self.protocolclass.pb_contact_media_file() g.readfrombuffer(buf, logtitle="PB Media read") rc=False for i in range(len(g.contacts)): if g.contacts[i].index in pb_entries: if g.contacts[i].ringer!=pb_entries[g.contacts[i].index].ringtone: g.contacts[i].ringer=pb_entries[g.contacts[i].index].ringtone rc=True if g.contacts[i].wallpaper!=pb_entries[g.contacts[i].index].wallpaper: g.contacts[i].wallpaper=pb_entries[g.contacts[i].index].wallpaper rc=True if rc: buf=prototypes.buffer() g.writetobuffer(buf, logtitle="Writing PB media file") self.writefile(self.protocolclass.phonebook_media, buf.getvalue()) else: self.log("PB media file up to date, no write required") return rc def savegroups(self, data): groups=data['groups'] keys=groups.keys() keys.sort() g=self.protocolclass.pbgroups() for k in keys: e=self.protocolclass.pbgroup() e.group_id=k e.rectype = 0x30 e.name=groups[k]['name'] g.groups.append(e) buffer=prototypes.buffer() g.writetobuffer(buffer, logtitle="New group file") self.writefile("pim/pbookgroup.dat", buffer.getvalue()) def savephonebook(self, data): "Saves out the phonebook" self.savegroups(data) # if __debug__: # # for testing without a real phone, the packets are stored in a # # file and can be examined # counter=0 # pb_entries={} # for i in data['phonebook'].keys(): # ii=data['phonebook'][i] # entry=self.makeentry(counter, ii, data) # counter+=1 # req=self.protocolclass.pbupdateentryrequest() # req.entry=entry # req.header.sequence=counter # buffer=prototypes.buffer() # req.writetobuffer(buffer, logtitle="New contents for pim/pb"+`counter`+".dat") # self.writefile("pim/pb"+`counter`+".dat", buffer.getvalue()) # pb_entries[counter]=entry # self.save_phonebook_media(pb_entries) # set up progress bar on main window progressmax=len(data['phonebook'].keys()) # To write the phone book, we scan through all existing entries # and record their record number and serials. # We then delete any entries that aren't in data # We then write out our records, using overwrite or append # commands as necessary serialupdates=[] pb_entries={} existingpbook={} # keep track of the phonebook that is on the phone self.mode=self.MODENONE self.setmode(self.MODEBREW) # see note in getphonebook() for why this is necessary self.setmode(self.MODEPHONEBOOK) # similar loop to reading req=self.protocolclass.pbinforequest() res=self.sendpbcommand(req, self.protocolclass.pbinforesponse) numexistingentries=res.numentries self.log("There are %d existing entries" % (numexistingentries,)) progressmax+=numexistingentries loop=xrange(0, numexistingentries) progresscur=0 # reset cursor self.sendpbcommand(self.protocolclass.pbinitrequest(), self.protocolclass.pbinitresponse) for i in loop: ### Read current entry req=self.protocolclass.pbreadentryrequest() res=self.sendpbcommand(req, self.protocolclass.pbreadentryresponse) entry={ 'number': res.entry.entrynumber, 'serial1': res.entry.serial1, 'name': res.entry.name} self.log("Reading entry "+`i`+" - "+str(entry['serial1'])+" - "+entry['name']) existingpbook[i]=entry self.progress(progresscur, progressmax, "existing "+entry['name']) #### Advance to next entry req=self.protocolclass.pbnextentryrequest() res=self.sendpbcommand(req, self.protocolclass.pbnextentryresponse) progresscur+=1 # we have now looped around back to begining # Find entries that have been deleted pbook=data['phonebook'] dellist=[] for i in loop: ii=existingpbook[i] serial=ii['serial1'] item=self._findserial(serial, pbook) if item is None: dellist.append(i) progressmax+=len(dellist) # more work to do # Delete those entries for i in dellist: progresscur+=1 numexistingentries-=1 # keep count right ii=existingpbook[i] self.log("Deleting entry "+`i`+" - "+str(ii['serial1'])+" - "+ii['name']) req=self.protocolclass.pbdeleteentryrequest() req.serial1=ii['serial1'] req.serial2=ii['serial1'] req.entrynumber=ii['number'] self.sendpbcommand(req, self.protocolclass.pbdeleteentryresponse) self.progress(progresscur, progressmax, "Deleting "+ii['name']) # also remove them from existingpbook del existingpbook[i] # Now rewrite out existing entries self.log("Rewrite existing entries") keys=existingpbook.keys() existingserials=[] keys.sort() # do in same order as existingpbook for i in keys: progresscur+=1 ii=pbook[self._findserial(existingpbook[i]['serial1'], pbook)] self.log("Rewriting entry "+`i`+" - "+ii['name']) self.progress(progresscur, progressmax, "Rewriting "+ii['name']) entry=self.makeentry(existingpbook[i]['serial1'], ii, data) existingserials.append(existingpbook[i]['serial1']) req=self.protocolclass.pbupdateentryrequest() req.entry=entry res=self.sendpbcommand(req, self.protocolclass.pbupdateentryresponse) serialupdates.append( ( ii["bitpimserial"], {'sourcetype': self.serialsname, 'serial1': res.serial1, 'sourceuniqueid': data['uniqueserial']})) assert ii['serial1']==res.serial1 # serial should stay the same pb_entries[res.serial1]=entry # Finally write out new entries counter=0 keys=pbook.keys() self.log("Write new entries") keys.sort() for i in keys: ii=pbook[i] if ii['serial1'] in existingserials: continue # already wrote this one out # find an unused serial number while True: if counter in existingserials: counter+=1 else: break progresscur+=1 entry=self.makeentry(counter, ii, data) self.log("Appending entry "+ii['name']) self.progress(progresscur, progressmax, "Writing "+ii['name']) req=self.protocolclass.pbappendentryrequest() req.entry=entry res=self.sendpbcommand(req, self.protocolclass.pbappendentryresponse) serialupdates.append( ( ii["bitpimserial"], {'sourcetype': self.serialsname, 'serial1': res.newserial, 'sourceuniqueid': data['uniqueserial']})) pb_entries[res.newserial]=entry counter+=1 # update the media file data['serialupdates']=serialupdates changed=self.save_phonebook_media(pb_entries) if changed: data["rebootphone"]=True return data #----- SMS --------------------------------------------------------------------------- def _readsms(self): res={} # go through the sms directory looking for messages for item in self.listfiles("sms").values(): folder=None for f,pat in self.protocolclass.SMS_PATTERNS.items(): if pat.match(item['name']): folder=f break if folder: buf=prototypes.buffer(self.getfilecontents(item['name'], True)) self.logdata("SMS message file " +item['name'], buf.getdata()) if folder=='Inbox': sf=self.protocolclass.sms_in() sf.readfrombuffer(buf, logtitle="SMS inbox item") entry=self._getinboxmessage(sf) res[entry.id]=entry elif folder=='Sent': sf=self.protocolclass.sms_out() sf.readfrombuffer(buf, logtitle="SMS sent item") entry=self._getoutboxmessage(sf) res[entry.id]=entry return res def _setquicktext(self, result): sf=self.protocolclass.sms_canned_file() quicktext=result.get('canned_msg', []) count=0 for entry in quicktext: if count < self.protocolclass.SMS_CANNED_MAX_ITEMS: msg_entry=self.protocolclass.sms_quick_text() msg_entry.msg=entry['text'][:self.protocolclass.SMS_CANNED_MAX_LENGTH-1] sf.msgs.append(msg_entry) count+=1 else: break if count!=0: # don't create the file if there are no entries sf.num_active=count buf=prototypes.buffer() sf.writetobuffer(buf, logtitle="Writing quicktext") self.writefile(self.protocolclass.SMS_CANNED_FILENAME, buf.getvalue()) return def _getquicktext(self): quicks=[] try: buf=prototypes.buffer(self.getfilecontents(self.protocolclass.SMS_CANNED_FILENAME)) sf=self.protocolclass.sms_canned_file() sf.readfrombuffer(buf, logtitle="SMS quicktext file sms/canned_msg.dat") for rec in sf.msgs: if rec.msg!="": quicks.append({ 'text': rec.msg, 'type': sms.CannedMsgEntry.user_type }) except com_brew.BrewNoSuchFileException: pass # do nothing if file doesn't exist return quicks def _getinboxmessage(self, sf): entry=sms.SMSEntry() entry.folder=entry.Folder_Inbox entry.datetime="%d%02d%02dT%02d%02d%02d" % (sf.GPStime) entry._from=self._getsender(sf.sender, sf.sender_length) entry.subject=sf.subject entry.locked=sf.locked # if sf.priority==0: # entry.priority=sms.SMSEntry.Priority_Normal # else: # entry.priority=sms.SMSEntry.Priority_High entry.read=sf.read entry.text=sf.msg entry.callback=sf.callback return entry def _getoutboxmessage(self, sf): entry=sms.SMSEntry() if not sf.saved: entry.folder=entry.Folder_Sent else: entry.folder=entry.Folder_Saved entry.datetime="%d%02d%02dT%02d%02d00" % ((sf.timesent)) # add all the recipients for r in sf.recipients: if r.number: confirmed=(r.status==2) confirmed_date=None if confirmed: confirmed_date="%d%02d%02dT%02d%02d00" % r.time entry.add_recipient(r.number, confirmed, confirmed_date) entry.subject=sf.msg[:28] entry.text=sf.msg # if sf.priority==0: # entry.priority=sms.SMSEntry.Priority_Normal # else: # entry.priority=sms.SMSEntry.Priority_High entry.locked=sf.locked entry.callback=sf.callback return entry #----- Media ----------------------------------------------------------------------- # this phone can take MP3 files, but you have to use the vnd.qcelp MIME type # this makes renaming the files (from the ##.dat format) back to a real # name difficult, we assume all vnd.qcelp files are mp3 files as this is the # most common format __mimetype={ 'mid': 'audio/midi', 'qcp': 'audio/vnd.qcelp', 'jar': 'application/java-archive', 'jpg': 'image/jpg', 'jpeg': 'image/jpeg', 'gif': 'image/gif', 'bmp': 'image/bmp', 'png': 'image/png', 'mp3': 'audio/vnd.qcelp'} __reverse_mimetype={ 'audio/midi': 'mid', 'audio/vnd.qcelp': 'mp3', 'application/java-archive': 'jar', 'image/jpg': 'jpg', 'image/jpeg': 'jpeg', 'image/gif': 'gif', 'image/bmp': 'bmp', 'image/png': 'png', 'audio/mp3': 'mp3'} __app_extensions={ 'jar':'' } def getwallpaperindices(self, results): return self.getmediaindex(self.builtinimages, self.imagelocations, results, 'wallpaper-index') def getringtoneindices(self, results): return self.getmediaindex(self.builtinringtones, self.ringtonelocations, results, 'ringtone-index') def getwallpapers(self, result): return self.getmedia(self.imagelocations, result, 'wallpapers') def getringtones(self, result): return self.getmedia(self.ringtonelocations, result, 'ringtone') def savewallpapers(self, results, merge): return self.savemedia('wallpapers', 'wallpaper-index', results, merge, self.getwallpaperindices) def saveringtones(self, results, merge): return self.savemedia('ringtone', 'ringtone-index', results, merge, self.getringtoneindices) def getindex(self, indexfile): "Read an index file" index={} try: buf=prototypes.buffer(self.getfilecontents(indexfile)) except com_brew.BrewNoSuchFileException: # file may not exist return index g=self.protocolclass.indexfile() g.readfrombuffer(buf, logtitle="Read indexfile "+indexfile) for i in g.items: if i.index!=0xffff and len(i.name): index[i.index]=i.name return index def get_content_file(self, key): index={} if key=='ringtone' or key=='ringtone-index': type='Ringers' index_const=self.protocolclass.ringerconst*0x100 indexfile=self.getindex(self.protocolclass.ringerindex) else: type='Screen Savers' index_const=self.protocolclass.imageconst*0x100 indexfile=self.getindex(self.protocolclass.imageindex) try: buf=prototypes.buffer(self.getfilecontents(self.protocolclass.content_file_name)) g=self.protocolclass.content_file() g.readfrombuffer(buf, logtitle="Content file "+self.protocolclass.content_file_name) for i in g.items: if i.type=='!C' and i.content_type==type: try: # construct a user friendly filename ext=self.__reverse_mimetype[i.mime_type] # find the "file" in the index file and get it's index # if the index was created by bitpim it will be the same # as the unfriendly filename, but this is not guarenteed found=False for j in indexfile.keys(): # convert to int to strip leading zero try: if int(common.stripext(indexfile[j]))==int(i.index1): index[j + index_const]=i.name1+'.'+ext found=True break; except: pass if not found: self.log("Unable to find index entry for "+i.name1+". Index : "+`i.index1`) except: pass except com_brew.BrewNoSuchFileException: pass return index, indexfile, index_const def getmedia(self, maps, result, key): """Returns the contents of media as a dict where the key is a name as returned by getindex, and the value is the contents of the media""" media={} # first read the maps type=None for offset,indexfile,location,type,maxentries,const in maps: index=self.getindex(indexfile) for i in index: try: media[index[i]]=self.getfilecontents(location+"/"+index[i], True) except (com_brew.BrewNoSuchFileException,com_brew.BrewBadPathnameException,com_brew.BrewNameTooLongException): self.log("It was in the index, but not on the filesystem") # secondly read the content file index, indexfile, index_const=self.get_content_file(key) for i in index: try: buf=prototypes.buffer(self.getfilecontents(self.protocolclass.media_directory+'/'+indexfile[i-index_const], True)) _fname=index[i] # This would be nice but this will read the entire file which will slow the media retrieval down # ext=common.getext(_fname) # if ext=='mp3': # # see if it is really an mp3, we will need to rename it # try: # qcp_header=self.protocolclass.qcp_media_header() # qcp_header.readfrombuffer(buf, logtitle="qcp header") # except: # exception will be thrown if header does not match # _fname=common.stripext(index[i])+'.'+'qcp' media[_fname]=buf.getdata() except (com_brew.BrewNoSuchFileException,com_brew.BrewBadPathnameException,com_brew.BrewNameTooLongException): self.log("It was in the index, but not on the filesystem") self.log("Contents not in the filesystem") result[key]=media return result def getmediaindex(self, builtins, maps, results, key): """Gets the media (wallpaper/ringtone) index @param builtins: the builtin list on the phone @param results: places results in this dict @param maps: the list of index files and locations @param key: key to place results in """ self.log("Reading "+key) media={} # builtins c=1 for name in builtins: media[c]={'name': name, 'origin': 'builtin' } c+=1 # the maps type=None for offset,indexfile,location,type,maxentries,const in maps: index=self.getindex(indexfile) for i in index: media[i+offset]={'name': index[i], 'origin': type} # secondly read the content file if key=='ringtone-index': type='ringers' else: type='images' index,_,_=self.get_content_file(key) for i in index: media[i]={'name': index[i], 'origin': type} results[key]=media return media def savemedia(self, mediakey, mediaindexkey, results, merge, reindexfunction): """Actually saves out the media @param mediakey: key of the media (eg 'wallpapers' or 'ringtones') @param mediaindexkey: index key (eg 'wallpaper-index') @param maps: list index files and locations @param results: results dict @param merge: are we merging or overwriting what is there? @param reindexfunction: the media is re-indexed at the end. this function is called to do it """ content_changed=False media=results[mediakey].copy() #figure out if the origin we are interested in if mediaindexkey=='ringtone-index': type='ringers' content_type="Ringers" indexfile=self.protocolclass.ringerindex index_const=self.protocolclass.ringerconst max_media_entries=self.protocolclass.max_ringers # remove voice_memos for i in media.keys(): try: if media[i]['origin']=='voice_memo': del media[i] except: pass else: type='images' content_type="Screen Savers" indexfile=self.protocolclass.imageindex index_const=self.protocolclass.imageconst max_media_entries=self.protocolclass.max_images # remove camera images for i in media.keys(): try: if media[i]['origin']=='camera': del media[i] except: pass #read content file off the phone content={} try: buf=prototypes.buffer(self.getfilecontents(self.protocolclass.content_file_name)) g=self.protocolclass.content_file() g.readfrombuffer(buf, logtitle="Read content file") for i in g.items: # type !C always appears first if i.type=='!C': content[int(i.index1)]= {'C': i} elif i.type=='!E': content[int(i.index2)]['E']=i except (com_brew.BrewNoSuchFileException,com_brew.BrewBadPathnameException,com_brew.BrewNameTooLongException): pass # get a list of files in the media directory so we can figure out what to delete # and what needs to be copied onto the phone dirlisting=self.getfilesystem(self.protocolclass.media_directory) # strip path from directory listing for i in dirlisting.keys(): dirlisting[i[len(self.protocolclass.media_directory)+1:]]=dirlisting[i] del dirlisting[i] # build up list of existing media items into init, remove missing items from content list init={} for k in content.keys(): if content[k]['C'].content_type==content_type: index=k name=content[k]['C'].name1 size=int(content[k]['C'].size) data=None # find the media content file, check that the size matches for w in media: if common.stripext(media[w]['name'])==name and media[w]['data']!=None: size_fix=((3024+len(media[w]['data']))/1008)*1008 if size_fix==size: data=media[w]['data'] del media[w] break # remove unused entries from index and filesystem if not merge and data is None: # delete the entry del content[k] content_changed=True # we have to remove the data file, the gcd file and the url file _fname='%02d.dat' % k if _fname in dirlisting: self.rmfile(self.protocolclass.media_directory+'/'+_fname) del dirlisting[_fname] gcdname='%02d.gcd' % k if gcdname in dirlisting: self.rmfile(self.protocolclass.media_directory+'/'+gcdname) del dirlisting[gcdname] urlname='%02d.url' % k if urlname in dirlisting: self.rmfile(self.protocolclass.media_directory+'/'+urlname) del dirlisting[urlname] continue init[index]={'name': name, 'data': data} # go through adding new media not currently on the phone # assign these item keys in the content media applications={} for sp in range(100): if len(media.keys()) == 0: break if sp not in content: #found a hole for w in media.keys(): C,E,add_to_index=self.make_new_media_entry(media[w], sp, type) if add_to_index=='index': content[sp]= {'C': C, 'E': E} init[sp]=media[w] content_changed=True elif add_to_index=='content': content[sp]= {'C': C, 'E': E} applications[sp]=media[w] content_changed=True else: self.log("Unknown media type for "+`media[w]['name']`+". Not written to phone.") sp-=1 del media[w] break if len(media.keys()): self.log("Phone index full, some media not written to phone") # write out the new index, there are two files on this phone # the content file and the media index, kinda dumb having two copies # of the same thing # content_file content_count=0 keys=content.keys() keys.sort() cfile=self.protocolclass.content_file() # add in the !C types first for k in keys: content_count+=1 cfile.items.append(content[k]['C']) for k in keys: cfile.items.append(content[k]['E']) #terminator entry=self.protocolclass.content_entry() entry.type='!F' cfile.items.append(entry) buffer=prototypes.buffer() cfile.writetobuffer(buffer, logtitle="Updated content file "+self.protocolclass.content_file_name) self.writefile(self.protocolclass.content_file_name, buffer.getvalue()) countfile=self.protocolclass.content_count() countfile.count=`content_count` buffer=prototypes.buffer() countfile.writetobuffer(buffer, logtitle="Updated content count file "+self.protocolclass.content_count_file_name) self.writefile(self.protocolclass.content_count_file_name, buffer.getvalue()) # now write out the index file (this is like the verizon LG phones) keys=init.keys() keys.sort() ifile=self.protocolclass.indexfile() ifile.numactiveitems=len(keys) for k in keys: entry=self.protocolclass.indexentry() entry.index=k entry.const=index_const entry.name='%02d.dat' % k ifile.items.append(entry) # fill the remainder of the entries with unused keys for k in range(max_media_entries): if k in keys: continue entry=self.protocolclass.indexentry() entry.index=k entry.const=index_const ifile.items.append(entry) buffer=prototypes.buffer() ifile.writetobuffer(buffer, logtitle="Updated index file "+indexfile) self.writefile(indexfile, buffer.getvalue()) # Write out files - we compare against existing dir listing and don't rewrite if they # are the same size for k in keys: entry=init[k] data=entry.get("data", None) _fname='%02d.dat' % k gcdname='%02d.gcd' % k urlname='%02d.url' % k if data is None: if _fname not in dirlisting: self.log("Index error. I have no data for "+entry['name']+" and it isn't already in the filesystem") continue contentsize=len(data) urlcontents='file://'+entry['name'] gcdcontents=self.makegcd(entry['name'],contentsize) if _fname in dirlisting and len(data)==dirlisting[_fname]['size']: self.log("Skipping writing %s/%s as there is already a file of the same length" % (self.protocolclass.media_directory,entry['name'])) # repair gcd and url incase they are missing if gcdname not in dirlisting: self.writefile(self.protocolclass.media_directory+"/"+gcdname, gcdcontents) if urlname not in dirlisting: self.writefile(self.protocolclass.media_directory+"/"+urlname, urlcontents) continue self.writefile(self.protocolclass.media_directory+"/"+_fname, data) self.writefile(self.protocolclass.media_directory+"/"+gcdname, gcdcontents) self.writefile(self.protocolclass.media_directory+"/"+urlname, urlcontents) # write out applications for k in applications.keys(): entry=applications[k] data=entry.get("data", None) _fname='%02d.jar' % k jadname='%02d.jad' % k urlname='%02d.url' % k if data is None: if _fname not in dirlisting: self.log("Index error. I have no data for "+entry['name']+" and it isn't already in the filesystem") print "here2" continue contentsize=len(data) urlcontents='file://'+entry['name'] jadcontents=self.makejad(entry['name'],contentsize) print "here3" if _fname in dirlisting and len(data)==dirlisting[_fname]['size']: self.log("Skipping writing %s/%s as there is already a file of the same length" % (self.protocolclass.media_directory,entry['name'])) # repair jad and url incase they are missing if jadname not in dirlisting: self.writefile(self.protocolclass.media_directory+"/"+jadname, jadcontents) if urlname not in dirlisting: self.writefile(self.protocolclass.media_directory+"/"+urlname, urlcontents) print "here4" continue print "here5" self.writefile(self.protocolclass.media_directory+"/"+_fname, data) self.writefile(self.protocolclass.media_directory+"/"+jadname, jadcontents) self.writefile(self.protocolclass.media_directory+"/"+urlname, urlcontents) del results[mediakey] # done with it reindexfunction(results) if content_changed: results["rebootphone"]=True return results def make_new_media_entry(self, entry, index, type): c=self.protocolclass.content_entry() e=self.protocolclass.content_entry() name=common.stripext(entry['name']) ext=common.getext(entry['name']) data=entry.get("data", None) add_to_index='index' c.type='!C' c.index1=index c.name1=name try: c.mime_type=self.__mimetype[ext] except: # bad file type add_to_index='none' return c, e, add_to_index if c.mime_type=='application/java-archive': c.content_type='Games' e.location_maybe='midlet:'+name add_to_index='content' elif type=='ringers': c.content_type='Ringers' else: c.content_type='Screen Savers' c.size=`((3024+len(data))/1008)*1008` e.type='!E' e.index2=index e.name2=name return c, e, add_to_index def makegcd(self,filename,size): "Build a GCD file for filename" ext=common.getext(filename.lower()) noextname=common.stripext(filename) try: mimetype=self.__mimetype[ext] gcdcontent="Content-Type: "+mimetype+"\nContent-Name: "+noextname+"\nContent-Version: 1.0\nContent-Vendor: BitPim\nContent-URL: file://"+filename+"\nContent-Size: "+`size`+"\nContent-Description: Content for V10044 LG PM225"+"\n\n\n" except: gcdcontent="Content-Name: "+noextname+"\nContent-Version: 1.0\nContent-Vendor: BitPim\nContent-URL: file://"+filename+"\nContent-Size: "+`size`+"\n\n\n" return gcdcontent def makejad(self,filename,size): "Build a JAD file for filename" ext=common.getext(filename.lower()) noextname=common.stripext(filename) jadcontent="MIDlet-1: "+noextname+", "+noextname+".png, BitPim\nMIDlet-Jar-Size: "+`size`+"\nMIDlet-Jar-URL: "+filename+"\nMIDlet-Name: "+noextname+"\nMIDlet-Vendor: Unknown\nMIDlet-Version: 1.0\nMicroEdition-Configuration: CLDC-1.0\nMicroEdition-Profile: MIDP-1.0\nContent-Folder: Games\n\n\n" return jadcontent #----- Phone Detection ----------------------------------------------------------- brew_version_file='ams/version.txt' brew_version_txt_key='ams_version.txt' my_model='PM225' def getphoneinfo(self, phone_info): self.log('Getting Phone Info') try: s=self.getfilecontents('ams/version.txt') if s[:5]==self.my_model: phone_info.append('Model:', self.my_model) phone_info.append('ESN:', self.get_brew_esn()) req=p_brew.firmwarerequest() #res=self.sendbrewcommand(req, self.protocolclass.firmwareresponse) #phone_info.append('Firmware Version:', res.firmware) txt=self.getfilecontents("nvm/nvm/nvm_0000")[207:217] phone_info.append('Phone Number:', txt) except: pass return parentprofile=com_lgvx4400.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='PM225' # from Sprint brew_required=True RINGTONE_LIMITS= { 'MAXSIZE': 250000 } WALLPAPER_WIDTH=160 WALLPAPER_HEIGHT=120 MAX_WALLPAPER_BASENAME_LENGTH=30 WALLPAPER_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 .-_" WALLPAPER_CONVERT_FORMAT="jpg" MAX_RINGTONE_BASENAME_LENGTH=30 RINGTONE_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 .-_" DIALSTRING_CHARS="[^0-9PT#*]" # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 160, 'height': 120, 'format': "JPEG"})) # delay auto-detection when the phone is plugged in (in seconds) autodetect_delay=3 def convertphonebooktophone(self, helper, data): """Converts the data to what will be used by the phone @param data: contains the dict returned by getfundamentals as well as where the results go""" results={} speeds={} for pbentry in data['phonebook']: if len(results)==self.protocolclass.NUMPHONEBOOKENTRIES: break e={} # entry out entry=data['phonebook'][pbentry] # entry in try: # serials, can't use 0 as default as the phone uses this for the first entry serial1=helper.getserial(entry.get('serials', []), self.serialsname, data['uniqueserial'], 'serial1', 0xFFFFFFFF) e['serial1']=serial1 for ss in entry["serials"]: if ss["sourcetype"]=="bitpim": e['bitpimserial']=ss assert e['bitpimserial'] # name e['name']=helper.getfullname(entry.get('names', []),1,1,32)[0] # categories/groups cat=helper.makeone(helper.getcategory(entry.get('categories', []),0,1,32), None) if cat is None: e['group']=0 else: key,value=self._getgroup(cat, data['groups']) if key is not None: e['group']=key else: # sorry no space for this category e['group']=0 # email addresses emails=helper.getemails(entry.get('emails', []) ,0,self.protocolclass.NUMEMAILS,72) e['emails']=helper.filllist(emails, self.protocolclass.NUMEMAILS, "") # url e['url']=helper.makeone(helper.geturls(entry.get('urls', []), 0,1,74), "") # memo (-1 is to leave space for null terminator - not all software puts it in, but we do) e['memo']=helper.makeone(helper.getmemos(entry.get('memos', []), 0, 1, self.protocolclass.MEMOLENGTH-1), "") # phone numbers # there must be at least one email address or phonenumber minnumbers=1 if len(emails): minnumbers=0 numbers=helper.getnumbers(entry.get('numbers', []),minnumbers,self.protocolclass.NUMPHONENUMBERS) e['numberspeeds']=[] e['numbertypes']=[] e['numbers']=[] for numindex in range(len(numbers)): num=numbers[numindex] # deal with type b4=len(e['numbertypes']) type=num['type'] for i,t in enumerate(self.protocolclass.numbertypetab): if type==t: e['numbertypes'].append(i) break if t=='none': # conveniently last entry e['numbertypes'].append(i) break if len(e['numbertypes'])==b4: # we couldn't find a type for the number helper.add_error_message("%s has number %s of type %s, the phone does not support this type" % (e['name'], num['number'], num['type'])) continue # deal with number number=self.phonize(num['number']) if len(number)==0: # no actual digits in the number continue if len(number)>48: # get this number from somewhere sensible # ::TODO:: number is too long and we have to either truncate it or ignore it? number=number[:48] # truncate for moment e['numbers'].append(number) # deal with speed dial sd=num.get("speeddial", 0xFF) if sd>=self.protocolclass.FIRSTSPEEDDIAL and sd<=self.protocolclass.LASTSPEEDDIAL: e['numberspeeds'].append(sd) else: e['numberspeeds'].append(0xFF) e['numberspeeds']=helper.filllist(e['numberspeeds'], 5, 0xFF) e['numbertypes']=helper.filllist(e['numbertypes'], 5, 0) e['numbers']=helper.filllist(e['numbers'], 5, "") # ringtones, wallpaper e['ringtone']=helper.getringtone(entry.get('ringtones', []), 'call', None) # e['msgringtone']=helper.getringtone(entry.get('ringtones', []), 'message', None) e['wallpaper']=helper.getwallpaper(entry.get('wallpapers', []), 'call', None) # flags e['secret']=helper.getflag(entry.get('flags',[]), 'secret', False) results[pbentry]=e except helper.ConversionFailed: continue data['phonebook']=results return data _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('memo', 'read', None), # all memo list reading ('sms', 'read', None), # all SMS list reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('memo', 'write', 'OVERWRITE'), # all memo list writing ('sms', 'write', 'OVERWRITE'), # all SMS list writing ) def QueryAudio(self, origin, currentextension, afi): # we don't modify any of these if afi.format in ("MIDI", "QCP"): return currentextension, afi # examine mp3 if afi.format=="MP3": if afi.channels==1 and 8<=afi.bitrate<=128 and 16000<=afi.samplerate<=44100: return currentextension, afi # convert it return ("mp3", fileinfo.AudioFileInfo(afi, **{'format': 'MP3', 'channels': 1, 'bitrate': 32, 'samplerate': 22050})) field_color_data={ 'phonebook': { 'name': { 'first': 0, 'middle': 0, 'last': 0, 'full': 1, 'nickname': 0, 'details': 1 }, 'number': { 'type': 5, 'speeddial': 5, 'number': 5, 'details': 5 }, 'email': 3, 'address': { 'type': 0, 'company': 0, 'street': 0, 'street2': 0, 'city': 0, 'state': 0, 'postalcode': 0, 'country': 0, 'details': 0 }, 'url': 1, 'memo': 1, 'category': 1, 'wallpaper': 1, 'ringtone': 1, 'storage': 0, }, 'calendar': { 'description': True, 'location': False, 'allday': True, 'start': True, 'end': True, 'priority': False, 'alarm': True, 'vibrate': False, 'repeat': True, 'memo': False, 'category': False, 'wallpaper': False, 'ringtone': True, }, 'memo': { 'subject': True, 'date': False, 'secret': False, 'category': False, 'memo': True, }, 'todo': { 'summary': False, 'status': False, 'due_date': False, 'percent_complete': False, 'completion_date': False, 'private': False, 'priority': False, 'category': False, 'memo': False, }, } bitpim-1.0.7+dfsg1/src/phones/p_lgvx9900.py0000644001616600161660000021416211235353414016434 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VX9900""" from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx9800 except as noted # below from p_lgvx9800 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb CALENDAR_HAS_SEPARATE_END_TIME_AND_DATE=1 from p_lgvx8300 import scheduleexception from p_lgvx8300 import scheduleevent from p_lgvx8300 import scheduleexceptionfile from p_lgvx8300 import schedulefile from p_lgvx8300 import indexentry from p_lgvx8300 import indexfile from p_lgvx8300 import call from p_lgvx8300 import callhistory ##from p_lgvx8500 import msg_record ##from p_lgvx8500 import recipient_record ##from p_lgvx8500 import sms_saved ##from p_lgvx8500 import sms_out ##from p_lgvx8500 import SMSINBOXMSGFRAGMENT ##from p_lgvx8500 import sms_in ##from p_lgvx8500 import sms_quick_text class textmemo(BaseProtogenClass): __fields=['text', 'dunno', 'memotime'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemo,self).__init__(**dict) if self.__class__ is textmemo: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemo,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemo,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_text.writetobuffer(buf) try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default' : 0x1000000}) self.__field_dunno.writetobuffer(buf) self.__field_memotime.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_text=USTRING(**{'sizeinbytes': 304, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_text.readfrombuffer(buf) self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default' : 0x1000000}) self.__field_dunno.readfrombuffer(buf) self.__field_memotime=LGCALDATE(**{'sizeinbytes': 4}) self.__field_memotime.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,USTRING): self.__field_text=value else: self.__field_text=USTRING(value,**{'sizeinbytes': 304, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def __getfield_dunno(self): try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default' : 0x1000000}) return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 4, 'default' : 0x1000000}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def __getfield_memotime(self): return self.__field_memotime.getvalue() def __setfield_memotime(self, value): if isinstance(value,LGCALDATE): self.__field_memotime=value else: self.__field_memotime=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_memotime(self): del self.__field_memotime memotime=property(__getfield_memotime, __setfield_memotime, __delfield_memotime, None) def iscontainer(self): return True def containerelements(self): yield ('text', self.__field_text, None) yield ('dunno', self.__field_dunno, None) yield ('memotime', self.__field_memotime, None) class textmemofile(BaseProtogenClass): __fields=['itemcount', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemofile,self).__init__(**dict) if self.__class__ is textmemofile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemofile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemofile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_itemcount.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_itemcount=UINT(**{'sizeinbytes': 4}) self.__field_itemcount.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_itemcount(self): return self.__field_itemcount.getvalue() def __setfield_itemcount(self, value): if isinstance(value,UINT): self.__field_itemcount=value else: self.__field_itemcount=UINT(value,**{'sizeinbytes': 4}) def __delfield_itemcount(self): del self.__field_itemcount itemcount=property(__getfield_itemcount, __setfield_itemcount, __delfield_itemcount, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': textmemo }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('itemcount', self.__field_itemcount, None) yield ('items', self.__field_items, None) class msg_record(BaseProtogenClass): __fields=['binary', 'unknown3', 'unknown4', 'unknown6', 'length', 'msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(msg_record,self).__init__(**dict) if self.__class__ is msg_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(msg_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(msg_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_binary.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_length.writetobuffer(buf) try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx9900_70, 'length': 220}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_binary=UINT(**{'sizeinbytes': 1}) self.__field_binary.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1}) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 1}) self.__field_unknown4.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 1}) self.__field_unknown6.readfrombuffer(buf) self.__field_length=UINT(**{'sizeinbytes': 1}) self.__field_length.readfrombuffer(buf) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx9900_70, 'length': 220}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_binary(self): return self.__field_binary.getvalue() def __setfield_binary(self, value): if isinstance(value,UINT): self.__field_binary=value else: self.__field_binary=UINT(value,**{'sizeinbytes': 1}) def __delfield_binary(self): del self.__field_binary binary=property(__getfield_binary, __setfield_binary, __delfield_binary, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_length(self): return self.__field_length.getvalue() def __setfield_length(self, value): if isinstance(value,UINT): self.__field_length=value else: self.__field_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_length(self): del self.__field_length length=property(__getfield_length, __setfield_length, __delfield_length, None) def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx9900_70, 'length': 220}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx9900_70, 'length': 220}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('binary', self.__field_binary, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) yield ('unknown6', self.__field_unknown6, None) yield ('length', self.__field_length, None) yield ('msg', self.__field_msg, None) class _gen_p_lgvx9900_70(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx9900_70,self).__init__(**dict) if self.__class__ is _gen_p_lgvx9900_70: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx9900_70,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx9900_70,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class recipient_record(BaseProtogenClass): __fields=['unknown1', 'number', 'status', 'timesent', 'timereceived', 'unknown2', 'unknown3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(recipient_record,self).__init__(**dict) if self.__class__ is recipient_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(recipient_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(recipient_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_timereceived.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=DATA(**{'sizeinbytes': 33}) self.__field_unknown1.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 53}) self.__field_number.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_timereceived=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timereceived.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=DATA(**{'sizeinbytes': 54}) self.__field_unknown3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,DATA): self.__field_unknown1=value else: self.__field_unknown1=DATA(value,**{'sizeinbytes': 33}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 53}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_timereceived(self): return self.__field_timereceived.getvalue() def __setfield_timereceived(self, value): if isinstance(value,LGCALDATE): self.__field_timereceived=value else: self.__field_timereceived=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timereceived(self): del self.__field_timereceived timereceived=property(__getfield_timereceived, __setfield_timereceived, __delfield_timereceived, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,DATA): self.__field_unknown3=value else: self.__field_unknown3=DATA(value,**{'sizeinbytes': 54}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('number', self.__field_number, None) yield ('status', self.__field_status, None) yield ('timesent', self.__field_timesent, None) yield ('timereceived', self.__field_timereceived, None) yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) class sms_saved(BaseProtogenClass): __fields=['outboxmsg', 'GPStime', 'outbox'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_saved,self).__init__(**dict) if self.__class__ is sms_saved: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_saved,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_saved,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_outboxmsg except: self.__field_outboxmsg=BOOL(**{ 'default': True }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_outbox.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_outbox=sms_out() self.__field_outbox.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_outboxmsg(self): try: self.__field_outboxmsg except: self.__field_outboxmsg=BOOL(**{ 'default': True }) return self.__field_outboxmsg.getvalue() def __setfield_outboxmsg(self, value): if isinstance(value,BOOL): self.__field_outboxmsg=value else: self.__field_outboxmsg=BOOL(value,**{ 'default': True }) def __delfield_outboxmsg(self): del self.__field_outboxmsg outboxmsg=property(__getfield_outboxmsg, __setfield_outboxmsg, __delfield_outboxmsg, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_outbox(self): return self.__field_outbox.getvalue() def __setfield_outbox(self, value): if isinstance(value,sms_out): self.__field_outbox=value else: self.__field_outbox=sms_out(value,) def __delfield_outbox(self): del self.__field_outbox outbox=property(__getfield_outbox, __setfield_outbox, __delfield_outbox, None) def iscontainer(self): return True def containerelements(self): yield ('outboxmsg', self.__field_outboxmsg, None) yield ('GPStime', self.__field_GPStime, None) yield ('outbox', self.__field_outbox, None) class sms_out(BaseProtogenClass): __fields=['index', 'locked', 'timesent', 'unknown2', 'subject', 'num_msg_elements', 'messages', 'unknown1', 'priority', 'callback', 'recipients'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_out,self).__init__(**dict) if self.__class__ is sms_out: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_out,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_out,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_priority except: self.__field_priority=UINT(**{ 'default': 0 }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) self.__field_messages.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_callback.writetobuffer(buf) try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) self.__field_recipients.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown2=UNKNOWN(**{'sizeinbytes': 7}) self.__field_unknown2.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 61, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) self.__field_messages.readfrombuffer(buf) self.__field_unknown1=UNKNOWN(**{'sizeinbytes': 18}) self.__field_unknown1.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 73}) self.__field_callback.readfrombuffer(buf) self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) self.__field_recipients.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UNKNOWN): self.__field_unknown2=value else: self.__field_unknown2=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 61, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_messages(self): try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) return self.__field_messages.getvalue() def __setfield_messages(self, value): if isinstance(value,LIST): self.__field_messages=value else: self.__field_messages=LIST(value,**{'elementclass': msg_record, 'length': 7}) def __delfield_messages(self): del self.__field_messages messages=property(__getfield_messages, __setfield_messages, __delfield_messages, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UNKNOWN): self.__field_unknown1=value else: self.__field_unknown1=UNKNOWN(value,**{'sizeinbytes': 18}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_priority(self): try: self.__field_priority except: self.__field_priority=UINT(**{ 'default': 0 }) return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{ 'default': 0 }) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 73}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_recipients(self): try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) return self.__field_recipients.getvalue() def __setfield_recipients(self, value): if isinstance(value,LIST): self.__field_recipients=value else: self.__field_recipients=LIST(value,**{'elementclass': recipient_record,'length': 9}) def __delfield_recipients(self): del self.__field_recipients recipients=property(__getfield_recipients, __setfield_recipients, __delfield_recipients, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('locked', self.__field_locked, None) yield ('timesent', self.__field_timesent, None) yield ('unknown2', self.__field_unknown2, None) yield ('subject', self.__field_subject, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('messages', self.__field_messages, None) yield ('unknown1', self.__field_unknown1, None) yield ('priority', self.__field_priority, None) yield ('callback', self.__field_callback, None) yield ('recipients', self.__field_recipients, None) class SMSINBOXMSGFRAGMENT(BaseProtogenClass): __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSINBOXMSGFRAGMENT,self).__init__(**dict) if self.__class__ is SMSINBOXMSGFRAGMENT: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSINBOXMSGFRAGMENT,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSINBOXMSGFRAGMENT,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx9900_104, 'length': 220} dict2.update(kwargs) kwargs=dict2 self.__field_msg=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx9900_104, 'length': 220}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx9900_104, 'length': 220}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx9900_104, 'length': 220}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx9900_104, 'length': 220}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class _gen_p_lgvx9900_104(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx9900_104,self).__init__(**dict) if self.__class__ is _gen_p_lgvx9900_104: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx9900_104,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx9900_104,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class sms_in(BaseProtogenClass): __fields=['unknown1', 'lg_time', 'unknown2', 'GPStime', 'timesent', 'read', 'locked', 'priority', 'dunno1', 'subject', 'dunno2', 'num_msg_elements', 'msglengths', 'msgs', 'dunno3', 'sender_length', 'sender', 'dunno4', 'callback_length', 'callback', 'bin_header1', 'bin_header2', 'multipartID', 'bin_header3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_in,self).__init__(**dict) if self.__class__ is sms_in: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_in,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_in,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_bin_header1 except: self.__field_bin_header1=UINT(**{ 'default': 0 }) try: self.__field_bin_header2 except: self.__field_bin_header2=UINT(**{ 'default': 0 }) try: self.__field_multipartID except: self.__field_multipartID=UINT(**{ 'default': 0 }) try: self.__field_bin_header3 except: self.__field_bin_header3=UINT(**{ 'default': 0 }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_lg_time.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx9900_121, 'length': 20}) self.__field_msglengths.writetobuffer(buf) try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.writetobuffer(buf) self.__field_dunno3.writetobuffer(buf) self.__field_sender_length.writetobuffer(buf) try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx9900_126, 'length': 49}) self.__field_sender.writetobuffer(buf) self.__field_dunno4.writetobuffer(buf) self.__field_callback_length.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_unknown1.readfrombuffer(buf) self.__field_lg_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_lg_time.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_timesent=SMSDATE(**{'sizeinbytes': 6}) self.__field_timesent.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 1}) self.__field_read.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_dunno1=UNKNOWN(**{'sizeinbytes': 6}) self.__field_dunno1.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False }) self.__field_subject.readfrombuffer(buf) self.__field_dunno2=UNKNOWN(**{'sizeinbytes': 47}) self.__field_dunno2.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx9900_121, 'length': 20}) self.__field_msglengths.readfrombuffer(buf) self.__field_msgs=LIST(**{'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.readfrombuffer(buf) self.__field_dunno3=UNKNOWN(**{'sizeinbytes': 4}) self.__field_dunno3.readfrombuffer(buf) self.__field_sender_length=UINT(**{'sizeinbytes': 1}) self.__field_sender_length.readfrombuffer(buf) self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx9900_126, 'length': 49}) self.__field_sender.readfrombuffer(buf) self.__field_dunno4=UNKNOWN(**{'sizeinbytes': 3}) self.__field_dunno4.readfrombuffer(buf) self.__field_callback_length=UINT(**{'sizeinbytes': 1}) self.__field_callback_length.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 22}) self.__field_callback.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UNKNOWN): self.__field_unknown1=value else: self.__field_unknown1=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_lg_time(self): return self.__field_lg_time.getvalue() def __setfield_lg_time(self, value): if isinstance(value,LGCALDATE): self.__field_lg_time=value else: self.__field_lg_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_lg_time(self): del self.__field_lg_time lg_time=property(__getfield_lg_time, __setfield_lg_time, __delfield_lg_time, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,SMSDATE): self.__field_timesent=value else: self.__field_timesent=SMSDATE(value,**{'sizeinbytes': 6}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 1}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UNKNOWN): self.__field_dunno1=value else: self.__field_dunno1=UNKNOWN(value,**{'sizeinbytes': 6}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False }) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UNKNOWN): self.__field_dunno2=value else: self.__field_dunno2=UNKNOWN(value,**{'sizeinbytes': 47}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_msglengths(self): try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx9900_121, 'length': 20}) return self.__field_msglengths.getvalue() def __setfield_msglengths(self, value): if isinstance(value,LIST): self.__field_msglengths=value else: self.__field_msglengths=LIST(value,**{'elementclass': _gen_p_lgvx9900_121, 'length': 20}) def __delfield_msglengths(self): del self.__field_msglengths msglengths=property(__getfield_msglengths, __setfield_msglengths, __delfield_msglengths, None) def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def __getfield_dunno3(self): return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,UNKNOWN): self.__field_dunno3=value else: self.__field_dunno3=UNKNOWN(value,**{'sizeinbytes': 4}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_sender_length(self): return self.__field_sender_length.getvalue() def __setfield_sender_length(self, value): if isinstance(value,UINT): self.__field_sender_length=value else: self.__field_sender_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_sender_length(self): del self.__field_sender_length sender_length=property(__getfield_sender_length, __setfield_sender_length, __delfield_sender_length, None) def __getfield_sender(self): try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx9900_126, 'length': 49}) return self.__field_sender.getvalue() def __setfield_sender(self, value): if isinstance(value,LIST): self.__field_sender=value else: self.__field_sender=LIST(value,**{'elementclass': _gen_p_lgvx9900_126, 'length': 49}) def __delfield_sender(self): del self.__field_sender sender=property(__getfield_sender, __setfield_sender, __delfield_sender, None) def __getfield_dunno4(self): return self.__field_dunno4.getvalue() def __setfield_dunno4(self, value): if isinstance(value,UNKNOWN): self.__field_dunno4=value else: self.__field_dunno4=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_dunno4(self): del self.__field_dunno4 dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None) def __getfield_callback_length(self): return self.__field_callback_length.getvalue() def __setfield_callback_length(self, value): if isinstance(value,UINT): self.__field_callback_length=value else: self.__field_callback_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_length(self): del self.__field_callback_length callback_length=property(__getfield_callback_length, __setfield_callback_length, __delfield_callback_length, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 22}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_bin_header1(self): try: self.__field_bin_header1 except: self.__field_bin_header1=UINT(**{ 'default': 0 }) return self.__field_bin_header1.getvalue() def __setfield_bin_header1(self, value): if isinstance(value,UINT): self.__field_bin_header1=value else: self.__field_bin_header1=UINT(value,**{ 'default': 0 }) def __delfield_bin_header1(self): del self.__field_bin_header1 bin_header1=property(__getfield_bin_header1, __setfield_bin_header1, __delfield_bin_header1, None) def __getfield_bin_header2(self): try: self.__field_bin_header2 except: self.__field_bin_header2=UINT(**{ 'default': 0 }) return self.__field_bin_header2.getvalue() def __setfield_bin_header2(self, value): if isinstance(value,UINT): self.__field_bin_header2=value else: self.__field_bin_header2=UINT(value,**{ 'default': 0 }) def __delfield_bin_header2(self): del self.__field_bin_header2 bin_header2=property(__getfield_bin_header2, __setfield_bin_header2, __delfield_bin_header2, None) def __getfield_multipartID(self): try: self.__field_multipartID except: self.__field_multipartID=UINT(**{ 'default': 0 }) return self.__field_multipartID.getvalue() def __setfield_multipartID(self, value): if isinstance(value,UINT): self.__field_multipartID=value else: self.__field_multipartID=UINT(value,**{ 'default': 0 }) def __delfield_multipartID(self): del self.__field_multipartID multipartID=property(__getfield_multipartID, __setfield_multipartID, __delfield_multipartID, None) def __getfield_bin_header3(self): try: self.__field_bin_header3 except: self.__field_bin_header3=UINT(**{ 'default': 0 }) return self.__field_bin_header3.getvalue() def __setfield_bin_header3(self, value): if isinstance(value,UINT): self.__field_bin_header3=value else: self.__field_bin_header3=UINT(value,**{ 'default': 0 }) def __delfield_bin_header3(self): del self.__field_bin_header3 bin_header3=property(__getfield_bin_header3, __setfield_bin_header3, __delfield_bin_header3, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('lg_time', self.__field_lg_time, None) yield ('unknown2', self.__field_unknown2, None) yield ('GPStime', self.__field_GPStime, None) yield ('timesent', self.__field_timesent, None) yield ('read', self.__field_read, None) yield ('locked', self.__field_locked, None) yield ('priority', self.__field_priority, None) yield ('dunno1', self.__field_dunno1, None) yield ('subject', self.__field_subject, None) yield ('dunno2', self.__field_dunno2, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('msglengths', self.__field_msglengths, None) yield ('msgs', self.__field_msgs, None) yield ('dunno3', self.__field_dunno3, None) yield ('sender_length', self.__field_sender_length, None) yield ('sender', self.__field_sender, None) yield ('dunno4', self.__field_dunno4, None) yield ('callback_length', self.__field_callback_length, None) yield ('callback', self.__field_callback, None) yield ('bin_header1', self.__field_bin_header1, None) yield ('bin_header2', self.__field_bin_header2, None) yield ('multipartID', self.__field_multipartID, None) yield ('bin_header3', self.__field_bin_header3, None) class _gen_p_lgvx9900_121(BaseProtogenClass): 'Anonymous inner class' __fields=['msglength'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx9900_121,self).__init__(**dict) if self.__class__ is _gen_p_lgvx9900_121: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx9900_121,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx9900_121,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_msglength=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msglength.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msglength=UINT(**{'sizeinbytes': 1}) self.__field_msglength.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msglength(self): return self.__field_msglength.getvalue() def __setfield_msglength(self, value): if isinstance(value,UINT): self.__field_msglength=value else: self.__field_msglength=UINT(value,**{'sizeinbytes': 1}) def __delfield_msglength(self): del self.__field_msglength msglength=property(__getfield_msglength, __setfield_msglength, __delfield_msglength, "lengths of individual messages in septets") def iscontainer(self): return True def containerelements(self): yield ('msglength', self.__field_msglength, "lengths of individual messages in septets") class _gen_p_lgvx9900_126(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx9900_126,self).__init__(**dict) if self.__class__ is _gen_p_lgvx9900_126: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx9900_126,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx9900_126,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of senders phone number") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of senders phone number") class sms_quick_text(BaseProtogenClass): __fields=['msgs'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_quick_text,self).__init__(**dict) if self.__class__ is sms_quick_text: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_quick_text,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_quick_text,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx9900_139, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_msgs=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx9900_139, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) self.__field_msgs.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx9900_139, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) self.__field_msgs.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx9900_139, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'elementclass': _gen_p_lgvx9900_139, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def iscontainer(self): return True def containerelements(self): yield ('msgs', self.__field_msgs, None) class _gen_p_lgvx9900_139(BaseProtogenClass): 'Anonymous inner class' __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx9900_139,self).__init__(**dict) if self.__class__ is _gen_p_lgvx9900_139: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx9900_139,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx9900_139,kwargs) if len(args): dict2={'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""} dict2.update(kwargs) kwargs=dict2 self.__field_msg=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) bitpim-1.0.7+dfsg1/src/phones/p_samsungspha460.py0000644001616600161660000006577210521224555017730 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Proposed descriptions of data usign AT commands""" from prototypes import * from p_samsung_packet import * # We use LSB for all integer like fields in diagnostic mode UINT=UINTlsb BOOL=BOOLlsb # NUMPHONEBOOKENTRIES=250 NUMPHONENUMBERS=6 NUMCALENDAREVENTS=70 MAXNUMBERLEN=32 NUMTODOENTRIES=20 NUMGROUPS=4 class pbentry(BaseProtogenClass): __fields=['url', 'birthday', 'slot', 'uslot', 'group', 'ringtone', 'name', 'speeddial', 'dunno1', 'numbers', 'dunno3', 'dunno4', 'email', 'timestamp'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_url except: self.__field_url=USTRING(**{'default': ""}) try: self.__field_birthday except: self.__field_birthday=CSVDATE(**{'default': ""}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_uslot.writetobuffer(buf) self.__field_group.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=CSVINT(**{'default': 20}) self.__field_ringtone.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_speeddial.writetobuffer(buf) try: self.__field_dunno1 except: self.__field_dunno1=CSVINT(**{'default': 0}) self.__field_dunno1.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'length': NUMPHONENUMBERS, 'createdefault': True, 'elementclass': phonenumber}) self.__field_numbers.writetobuffer(buf) try: self.__field_dunno3 except: self.__field_dunno3=CSVSTRING(**{'quotechar': None, 'default': ""}) self.__field_dunno3.writetobuffer(buf) try: self.__field_dunno4 except: self.__field_dunno4=CSVSTRING(**{'quotechar': None, 'default': ""}) self.__field_dunno4.writetobuffer(buf) self.__field_email.writetobuffer(buf) try: self.__field_timestamp except: self.__field_timestamp=CSVTIME(**{'terminator': None, 'default': (1980,1,1,12,0,0)}) self.__field_timestamp.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=CSVINT() self.__field_slot.readfrombuffer(buf) self.__field_uslot=CSVINT() self.__field_uslot.readfrombuffer(buf) self.__field_group=CSVINT() self.__field_group.readfrombuffer(buf) self.__field_ringtone=CSVINT(**{'default': 20}) self.__field_ringtone.readfrombuffer(buf) self.__field_name=CSVSTRING() self.__field_name.readfrombuffer(buf) self.__field_speeddial=CSVINT() self.__field_speeddial.readfrombuffer(buf) self.__field_dunno1=CSVINT(**{'default': 0}) self.__field_dunno1.readfrombuffer(buf) self.__field_numbers=LIST(**{'length': NUMPHONENUMBERS, 'createdefault': True, 'elementclass': phonenumber}) self.__field_numbers.readfrombuffer(buf) self.__field_dunno3=CSVSTRING(**{'quotechar': None, 'default': ""}) self.__field_dunno3.readfrombuffer(buf) self.__field_dunno4=CSVSTRING(**{'quotechar': None, 'default': ""}) self.__field_dunno4.readfrombuffer(buf) self.__field_email=CSVSTRING() self.__field_email.readfrombuffer(buf) self.__field_timestamp=CSVTIME(**{'terminator': None, 'default': (1980,1,1,12,0,0)}) self.__field_timestamp.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_url(self): try: self.__field_url except: self.__field_url=USTRING(**{'default': ""}) return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,USTRING): self.__field_url=value else: self.__field_url=USTRING(value,**{'default': ""}) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_birthday(self): try: self.__field_birthday except: self.__field_birthday=CSVDATE(**{'default': ""}) return self.__field_birthday.getvalue() def __setfield_birthday(self, value): if isinstance(value,CSVDATE): self.__field_birthday=value else: self.__field_birthday=CSVDATE(value,**{'default': ""}) def __delfield_birthday(self): del self.__field_birthday birthday=property(__getfield_birthday, __setfield_birthday, __delfield_birthday, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,CSVINT): self.__field_slot=value else: self.__field_slot=CSVINT(value,) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, "Internal Slot") def __getfield_uslot(self): return self.__field_uslot.getvalue() def __setfield_uslot(self, value): if isinstance(value,CSVINT): self.__field_uslot=value else: self.__field_uslot=CSVINT(value,) def __delfield_uslot(self): del self.__field_uslot uslot=property(__getfield_uslot, __setfield_uslot, __delfield_uslot, "User Slot, Speed dial") def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,CSVINT): self.__field_group=value else: self.__field_group=CSVINT(value,) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=CSVINT(**{'default': 20}) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,CSVINT): self.__field_ringtone=value else: self.__field_ringtone=CSVINT(value,**{'default': 20}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,CSVSTRING): self.__field_name=value else: self.__field_name=CSVSTRING(value,) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_speeddial(self): return self.__field_speeddial.getvalue() def __setfield_speeddial(self, value): if isinstance(value,CSVINT): self.__field_speeddial=value else: self.__field_speeddial=CSVINT(value,) def __delfield_speeddial(self): del self.__field_speeddial speeddial=property(__getfield_speeddial, __setfield_speeddial, __delfield_speeddial, "Which phone number assigned to speed dial uslot") def __getfield_dunno1(self): try: self.__field_dunno1 except: self.__field_dunno1=CSVINT(**{'default': 0}) return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,CSVINT): self.__field_dunno1=value else: self.__field_dunno1=CSVINT(value,**{'default': 0}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'length': NUMPHONENUMBERS, 'createdefault': True, 'elementclass': phonenumber}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'length': NUMPHONENUMBERS, 'createdefault': True, 'elementclass': phonenumber}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_dunno3(self): try: self.__field_dunno3 except: self.__field_dunno3=CSVSTRING(**{'quotechar': None, 'default': ""}) return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,CSVSTRING): self.__field_dunno3=value else: self.__field_dunno3=CSVSTRING(value,**{'quotechar': None, 'default': ""}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_dunno4(self): try: self.__field_dunno4 except: self.__field_dunno4=CSVSTRING(**{'quotechar': None, 'default': ""}) return self.__field_dunno4.getvalue() def __setfield_dunno4(self, value): if isinstance(value,CSVSTRING): self.__field_dunno4=value else: self.__field_dunno4=CSVSTRING(value,**{'quotechar': None, 'default': ""}) def __delfield_dunno4(self): del self.__field_dunno4 dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None) def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,CSVSTRING): self.__field_email=value else: self.__field_email=CSVSTRING(value,) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def __getfield_timestamp(self): try: self.__field_timestamp except: self.__field_timestamp=CSVTIME(**{'terminator': None, 'default': (1980,1,1,12,0,0)}) return self.__field_timestamp.getvalue() def __setfield_timestamp(self, value): if isinstance(value,CSVTIME): self.__field_timestamp=value else: self.__field_timestamp=CSVTIME(value,**{'terminator': None, 'default': (1980,1,1,12,0,0)}) def __delfield_timestamp(self): del self.__field_timestamp timestamp=property(__getfield_timestamp, __setfield_timestamp, __delfield_timestamp, "Use terminator None for last item") def iscontainer(self): return True def containerelements(self): yield ('url', self.__field_url, None) yield ('birthday', self.__field_birthday, None) yield ('slot', self.__field_slot, "Internal Slot") yield ('uslot', self.__field_uslot, "User Slot, Speed dial") yield ('group', self.__field_group, None) yield ('ringtone', self.__field_ringtone, None) yield ('name', self.__field_name, None) yield ('speeddial', self.__field_speeddial, "Which phone number assigned to speed dial uslot") yield ('dunno1', self.__field_dunno1, None) yield ('numbers', self.__field_numbers, None) yield ('dunno3', self.__field_dunno3, None) yield ('dunno4', self.__field_dunno4, None) yield ('email', self.__field_email, None) yield ('timestamp', self.__field_timestamp, "Use terminator None for last item") class phonebookslotresponse(BaseProtogenClass): __fields=['command', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebookslotresponse,self).__init__(**dict) if self.__class__ is phonebookslotresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebookslotresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebookslotresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '#PBOKR:'}) self.__field_command.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '#PBOKR:'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('entry', self.__field_entry, None) class phonebookslotupdaterequest(BaseProtogenClass): __fields=['command', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebookslotupdaterequest,self).__init__(**dict) if self.__class__ is phonebookslotupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebookslotupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebookslotupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'}) self.__field_command.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'}) self.__field_command.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('entry', self.__field_entry, None) class groupnameresponse(BaseProtogenClass): __fields=['command', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(groupnameresponse,self).__init__(**dict) if self.__class__ is groupnameresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(groupnameresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(groupnameresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '#PBGRR:'}) self.__field_command.readfrombuffer(buf) self.__field_entry=groupnameentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '#PBGRR:'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,groupnameentry): self.__field_entry=value else: self.__field_entry=groupnameentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('entry', self.__field_entry, None) class groupnameentry(BaseProtogenClass): __fields=['gid', 'groupname'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(groupnameentry,self).__init__(**dict) if self.__class__ is groupnameentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(groupnameentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(groupnameentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_gid.writetobuffer(buf) self.__field_groupname.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_gid=CSVINT() self.__field_gid.readfrombuffer(buf) self.__field_groupname=CSVSTRING(**{'terminator': None}) self.__field_groupname.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_gid(self): return self.__field_gid.getvalue() def __setfield_gid(self, value): if isinstance(value,CSVINT): self.__field_gid=value else: self.__field_gid=CSVINT(value,) def __delfield_gid(self): del self.__field_gid gid=property(__getfield_gid, __setfield_gid, __delfield_gid, None) def __getfield_groupname(self): return self.__field_groupname.getvalue() def __setfield_groupname(self, value): if isinstance(value,CSVSTRING): self.__field_groupname=value else: self.__field_groupname=CSVSTRING(value,**{'terminator': None}) def __delfield_groupname(self): del self.__field_groupname groupname=property(__getfield_groupname, __setfield_groupname, __delfield_groupname, None) def iscontainer(self): return True def containerelements(self): yield ('gid', self.__field_gid, None) yield ('groupname', self.__field_groupname, None) class unparsedresponse(BaseProtogenClass): __fields=['pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(unparsedresponse,self).__init__(**dict) if self.__class__ is unparsedresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(unparsedresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(unparsedresponse,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_pad=UNKNOWN(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('pad', self.__field_pad, None) bitpim-1.0.7+dfsg1/src/phones/p_sanyo5400.py0000644001616600161660000000110410122742673016565 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Sanyo SCP-5400""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 _NUMCALLHISTORY=20 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 #for sym in dir(p_sanyo): # print sym bitpim-1.0.7+dfsg1/src/phones/com_lgpm325.py0000644001616600161660000001020210554051740016627 0ustar amuamu### BITPIM ### ### Copyright (C) 2005, 2006 Brent Roettger ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgpm325.py 3918 2007-01-19 05:15:12Z djpham $ """Communicate with the LG LX325/PM325 (Sprint) cell phone""" # standard modules import re import time import cStringIO import sha # my modules import p_lgpm225 import p_lgpm325 import p_brew import common import commport import com_brew import com_phone import com_lg import com_lgpm225 import prototypes import call_history import sms import fileinfo import memo class Phone(com_lgpm225.Phone): "Talk to the LG LX325/PM325 cell phone" desc="LG PM325" helpid=None protocolclass=p_lgpm325 serialsname='lgpm325' # read only locations, for regular ringers/wallpaper this phone stores # the information in a different location imagelocations=( # offset, index file, files location, type, maximumentries (0x600, "setas/dcamIndex.map", "Dcam/Wallet", "camera", 50, 6), ) ringtonelocations=( # offset, index file, files location, type, maximumentries (0x1100, "setas/voicememoRingerIndex.map", "VoiceDB/All/Memos", "voice_memo", 50, 11), ) # builtinimages=('Starfish', 'Goldfish', 'Leaves', 'Bicycle', 'Speed', # 'Autumn', 'Island', 'Winter', 'Bamboo', 'Yellow Flowers', 'Snow') builtinimages=( ) builtinringtones=( 'Tone 1', 'Tone 2', 'Tone 3', 'Tone 4', 'Tone 5', 'Tone 6', 'Alert 1', 'Alert 2', 'Alert 3', 'Alert 4', 'Alert 5', 'Alert 6', 'Jazztic', 'Rock & Roll', 'Grand Waltz', 'Toccata and Fugue', 'Sunday Afternoon', 'Bumble Bee', 'Circus Band', 'Cuckoo Waltz', 'Latin', 'CanCan', 'Play tag', 'Eine kleine Nachtmusik', 'Symphony No.25 in G Minor', 'Capriccio a minor', 'Moonlight', 'A Nameless Girl', 'From the New World', 'They Called Me Elvis') def __init__(self, logtarget, commport): "Calls all the constructors and sets initial modes" com_phone.Phone.__init__(self, logtarget, commport) com_brew.BrewProtocol.__init__(self) com_lg.LGPhonebook.__init__(self) self.log("Attempting to contact phone") self._cal_has_voice_id=hasattr(self.protocolclass, 'cal_has_voice_id') \ and self.protocolclass.cal_has_voice_id self.mode=self.MODENONE #----- Phone Detection ----------------------------------------------------------- brew_version_file='ams/version.txt' brew_version_txt_key='ams_version.txt' my_model='LX325' # AKA the PM325 from Sprint #----- Profile Class ------------------------------------------------------------- parentprofile=com_lgpm225.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='LX325' # aka the PM325 from Sprint brew_required=True DIALSTRING_CHARS="[^0-9PT#*]" _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('memo', 'read', None), # all memo list reading ('sms', 'read', None), # all SMS list reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('memo', 'write', 'OVERWRITE'), # all memo list writing ('sms', 'write', 'OVERWRITE'), # all SMS list writing ) bitpim-1.0.7+dfsg1/src/phones/p_sanyo8100_bell.py0000644001616600161660000017661410535711164017605 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Sanyo SCP-8100""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 _NUMCALLHISTORY=20 _MAXNUMBERLEN=48 _MAXEMAILLEN=48 class phonenumber(BaseProtogenClass): __fields=['number_len', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonenumber,self).__init__(**dict) if self.__class__ is phonenumber: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonenumber,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonenumber,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_number_len except: self.__field_number_len=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_number_len.writetobuffer(buf) try: self.__field_number except: self.__field_number=USTRING(**{'sizeinbytes': 49, 'default': ""}) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number_len=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_number_len.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'default': ""}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number_len(self): try: self.__field_number_len except: self.__field_number_len=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_number_len.getvalue() def __setfield_number_len(self, value): if isinstance(value,UINT): self.__field_number_len=value else: self.__field_number_len=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_number_len(self): del self.__field_number_len number_len=property(__getfield_number_len, __setfield_number_len, __delfield_number_len, None) def __getfield_number(self): try: self.__field_number except: self.__field_number=USTRING(**{'sizeinbytes': 49, 'default': ""}) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'default': ""}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('number_len', self.__field_number_len, None) yield ('number', self.__field_number, None) class phonebookentry(BaseProtogenClass): __fields=['slot', 'slotdup', 'name', 'numbers', 'email_len', 'email', 'url_len', 'url', 'secret', 'name_len'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebookentry,self).__init__(**dict) if self.__class__ is phonebookentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebookentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebookentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_slotdup.writetobuffer(buf) self.__field_name.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'length': 7, 'createdefault': True, 'elementclass': phonenumber}) self.__field_numbers.writetobuffer(buf) try: self.__field_email_len except: self.__field_email_len=UINT(**{'sizeinbytes': 1}) self.__field_email_len.writetobuffer(buf) try: self.__field_email except: self.__field_email=USTRING(**{'sizeinbytes': 49, 'default': ""}) self.__field_email.writetobuffer(buf) try: self.__field_url_len except: self.__field_url_len=UINT(**{'sizeinbytes': 1}) self.__field_url_len.writetobuffer(buf) try: self.__field_url except: self.__field_url=USTRING(**{'sizeinbytes': 49, 'default': ""}) self.__field_url.writetobuffer(buf) try: self.__field_secret except: self.__field_secret=BOOL(**{'sizeinbytes': 1}) self.__field_secret.writetobuffer(buf) self.__field_name_len.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_slotdup=UINT(**{'sizeinbytes': 2}) self.__field_slotdup.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_name.readfrombuffer(buf) self.__field_numbers=LIST(**{'length': 7, 'createdefault': True, 'elementclass': phonenumber}) self.__field_numbers.readfrombuffer(buf) self.__field_email_len=UINT(**{'sizeinbytes': 1}) self.__field_email_len.readfrombuffer(buf) self.__field_email=USTRING(**{'sizeinbytes': 49, 'default': ""}) self.__field_email.readfrombuffer(buf) self.__field_url_len=UINT(**{'sizeinbytes': 1}) self.__field_url_len.readfrombuffer(buf) self.__field_url=USTRING(**{'sizeinbytes': 49, 'default': ""}) self.__field_url.readfrombuffer(buf) self.__field_secret=BOOL(**{'sizeinbytes': 1}) self.__field_secret.readfrombuffer(buf) self.__field_name_len=UINT(**{'sizeinbytes': 1}) self.__field_name_len.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_slotdup(self): return self.__field_slotdup.getvalue() def __setfield_slotdup(self, value): if isinstance(value,UINT): self.__field_slotdup=value else: self.__field_slotdup=UINT(value,**{'sizeinbytes': 2}) def __delfield_slotdup(self): del self.__field_slotdup slotdup=property(__getfield_slotdup, __setfield_slotdup, __delfield_slotdup, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'length': 7, 'createdefault': True, 'elementclass': phonenumber}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'length': 7, 'createdefault': True, 'elementclass': phonenumber}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_email_len(self): try: self.__field_email_len except: self.__field_email_len=UINT(**{'sizeinbytes': 1}) return self.__field_email_len.getvalue() def __setfield_email_len(self, value): if isinstance(value,UINT): self.__field_email_len=value else: self.__field_email_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_email_len(self): del self.__field_email_len email_len=property(__getfield_email_len, __setfield_email_len, __delfield_email_len, None) def __getfield_email(self): try: self.__field_email except: self.__field_email=USTRING(**{'sizeinbytes': 49, 'default': ""}) return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 49, 'default': ""}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def __getfield_url_len(self): try: self.__field_url_len except: self.__field_url_len=UINT(**{'sizeinbytes': 1}) return self.__field_url_len.getvalue() def __setfield_url_len(self, value): if isinstance(value,UINT): self.__field_url_len=value else: self.__field_url_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_url_len(self): del self.__field_url_len url_len=property(__getfield_url_len, __setfield_url_len, __delfield_url_len, None) def __getfield_url(self): try: self.__field_url except: self.__field_url=USTRING(**{'sizeinbytes': 49, 'default': ""}) return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,USTRING): self.__field_url=value else: self.__field_url=USTRING(value,**{'sizeinbytes': 49, 'default': ""}) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_secret(self): try: self.__field_secret except: self.__field_secret=BOOL(**{'sizeinbytes': 1}) return self.__field_secret.getvalue() def __setfield_secret(self, value): if isinstance(value,BOOL): self.__field_secret=value else: self.__field_secret=BOOL(value,**{'sizeinbytes': 1}) def __delfield_secret(self): del self.__field_secret secret=property(__getfield_secret, __setfield_secret, __delfield_secret, None) def __getfield_name_len(self): return self.__field_name_len.getvalue() def __setfield_name_len(self, value): if isinstance(value,UINT): self.__field_name_len=value else: self.__field_name_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_name_len(self): del self.__field_name_len name_len=property(__getfield_name_len, __setfield_name_len, __delfield_name_len, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('slotdup', self.__field_slotdup, None) yield ('name', self.__field_name, None) yield ('numbers', self.__field_numbers, None) yield ('email_len', self.__field_email_len, None) yield ('email', self.__field_email, None) yield ('url_len', self.__field_url_len, None) yield ('url', self.__field_url, None) yield ('secret', self.__field_secret, None) yield ('name_len', self.__field_name_len, None) class phonebookslotresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebookslotresponse,self).__init__(**dict) if self.__class__ is phonebookslotresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebookslotresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebookslotresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=phonebookentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,phonebookentry): self.__field_entry=value else: self.__field_entry=phonebookentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class phonebookslotupdaterequest(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebookslotupdaterequest,self).__init__(**dict) if self.__class__ is phonebookslotupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebookslotupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebookslotupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x0c, 'command': 0x28}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 500}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyowriteheader(**{'packettype': 0x0c, 'command': 0x28}) self.__field_header.readfrombuffer(buf) self.__field_entry=phonebookentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 500}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x0c, 'command': 0x28}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyowriteheader): self.__field_header=value else: self.__field_header=sanyowriteheader(value,**{'packettype': 0x0c, 'command': 0x28}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,phonebookentry): self.__field_entry=value else: self.__field_entry=phonebookentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 500}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 500}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class evententry(BaseProtogenClass): __fields=['slot', 'flag', 'eventname', 'pad1', 'eventname_len', 'start', 'end', 'location', 'pad2', 'location_len', 'pad3', 'alarmdiff', 'period', 'dom', 'alarm', 'serial', 'pad4', 'ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(evententry,self).__init__(**dict) if self.__class__ is evententry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(evententry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(evententry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) self.__field_eventname.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.writetobuffer(buf) self.__field_eventname_len.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_location.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad2.writetobuffer(buf) self.__field_location_len.writetobuffer(buf) try: self.__field_pad3 except: self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad3.writetobuffer(buf) self.__field_alarmdiff.writetobuffer(buf) self.__field_period.writetobuffer(buf) self.__field_dom.writetobuffer(buf) self.__field_alarm.writetobuffer(buf) try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.writetobuffer(buf) try: self.__field_pad4 except: self.__field_pad4=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad4.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_eventname=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_eventname.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.readfrombuffer(buf) self.__field_eventname_len=UINT(**{'sizeinbytes': 1}) self.__field_eventname_len.readfrombuffer(buf) self.__field_start=UINT(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=UINT(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_location=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_location.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad2.readfrombuffer(buf) self.__field_location_len=UINT(**{'sizeinbytes': 1}) self.__field_location_len.readfrombuffer(buf) self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad3.readfrombuffer(buf) self.__field_alarmdiff=UINT(**{'sizeinbytes': 4}) self.__field_alarmdiff.readfrombuffer(buf) self.__field_period=UINT(**{'sizeinbytes': 1}) self.__field_period.readfrombuffer(buf) self.__field_dom=UINT(**{'sizeinbytes': 1}) self.__field_dom.readfrombuffer(buf) self.__field_alarm=UINT(**{'sizeinbytes': 4}) self.__field_alarm.readfrombuffer(buf) self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.readfrombuffer(buf) self.__field_pad4=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad4.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, "0: Not used, 1: Scheduled, 2: Already Happened") def __getfield_eventname(self): return self.__field_eventname.getvalue() def __setfield_eventname(self, value): if isinstance(value,USTRING): self.__field_eventname=value else: self.__field_eventname=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_eventname(self): del self.__field_eventname eventname=property(__getfield_eventname, __setfield_eventname, __delfield_eventname, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_eventname_len(self): return self.__field_eventname_len.getvalue() def __setfield_eventname_len(self, value): if isinstance(value,UINT): self.__field_eventname_len=value else: self.__field_eventname_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_eventname_len(self): del self.__field_eventname_len eventname_len=property(__getfield_eventname_len, __setfield_eventname_len, __delfield_eventname_len, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,UINT): self.__field_start=value else: self.__field_start=UINT(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, "# seconds since Jan 1, 1980 approximately") def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,UINT): self.__field_end=value else: self.__field_end=UINT(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_location(self): return self.__field_location.getvalue() def __setfield_location(self, value): if isinstance(value,USTRING): self.__field_location=value else: self.__field_location=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_location(self): del self.__field_location location=property(__getfield_location, __setfield_location, __delfield_location, None) def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_location_len(self): return self.__field_location_len.getvalue() def __setfield_location_len(self, value): if isinstance(value,UINT): self.__field_location_len=value else: self.__field_location_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_location_len(self): del self.__field_location_len location_len=property(__getfield_location_len, __setfield_location_len, __delfield_location_len, None) def __getfield_pad3(self): try: self.__field_pad3 except: self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad3.getvalue() def __setfield_pad3(self, value): if isinstance(value,UNKNOWN): self.__field_pad3=value else: self.__field_pad3=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad3(self): del self.__field_pad3 pad3=property(__getfield_pad3, __setfield_pad3, __delfield_pad3, None) def __getfield_alarmdiff(self): return self.__field_alarmdiff.getvalue() def __setfield_alarmdiff(self, value): if isinstance(value,UINT): self.__field_alarmdiff=value else: self.__field_alarmdiff=UINT(value,**{'sizeinbytes': 4}) def __delfield_alarmdiff(self): del self.__field_alarmdiff alarmdiff=property(__getfield_alarmdiff, __setfield_alarmdiff, __delfield_alarmdiff, "Displayed alarm time") def __getfield_period(self): return self.__field_period.getvalue() def __setfield_period(self, value): if isinstance(value,UINT): self.__field_period=value else: self.__field_period=UINT(value,**{'sizeinbytes': 1}) def __delfield_period(self): del self.__field_period period=property(__getfield_period, __setfield_period, __delfield_period, "No, Daily, Weekly, Monthly, Yearly") def __getfield_dom(self): return self.__field_dom.getvalue() def __setfield_dom(self, value): if isinstance(value,UINT): self.__field_dom=value else: self.__field_dom=UINT(value,**{'sizeinbytes': 1}) def __delfield_dom(self): del self.__field_dom dom=property(__getfield_dom, __setfield_dom, __delfield_dom, "Day of month for the event") def __getfield_alarm(self): return self.__field_alarm.getvalue() def __setfield_alarm(self, value): if isinstance(value,UINT): self.__field_alarm=value else: self.__field_alarm=UINT(value,**{'sizeinbytes': 4}) def __delfield_alarm(self): del self.__field_alarm alarm=property(__getfield_alarm, __setfield_alarm, __delfield_alarm, None) def __getfield_serial(self): try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_serial.getvalue() def __setfield_serial(self, value): if isinstance(value,UINT): self.__field_serial=value else: self.__field_serial=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_serial(self): del self.__field_serial serial=property(__getfield_serial, __setfield_serial, __delfield_serial, "Some kind of serial number") def __getfield_pad4(self): try: self.__field_pad4 except: self.__field_pad4=UNKNOWN(**{'sizeinbytes': 3}) return self.__field_pad4.getvalue() def __setfield_pad4(self, value): if isinstance(value,UNKNOWN): self.__field_pad4=value else: self.__field_pad4=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_pad4(self): del self.__field_pad4 pad4=property(__getfield_pad4, __setfield_pad4, __delfield_pad4, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "0: Beep, 1: Voice, 2: Silent") def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, "0: Not used, 1: Scheduled, 2: Already Happened") yield ('eventname', self.__field_eventname, None) yield ('pad1', self.__field_pad1, None) yield ('eventname_len', self.__field_eventname_len, None) yield ('start', self.__field_start, "# seconds since Jan 1, 1980 approximately") yield ('end', self.__field_end, None) yield ('location', self.__field_location, None) yield ('pad2', self.__field_pad2, None) yield ('location_len', self.__field_location_len, None) yield ('pad3', self.__field_pad3, None) yield ('alarmdiff', self.__field_alarmdiff, "Displayed alarm time") yield ('period', self.__field_period, "No, Daily, Weekly, Monthly, Yearly") yield ('dom', self.__field_dom, "Day of month for the event") yield ('alarm', self.__field_alarm, None) yield ('serial', self.__field_serial, "Some kind of serial number") yield ('pad4', self.__field_pad4, None) yield ('ringtone', self.__field_ringtone, "0: Beep, 1: Voice, 2: Silent") class eventresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventresponse,self).__init__(**dict) if self.__class__ is eventresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=evententry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,evententry): self.__field_entry=value else: self.__field_entry=evententry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class eventupdaterequest(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventupdaterequest,self).__init__(**dict) if self.__class__ is eventupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x0c, 'command':0x23}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 400}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyowriteheader(**{'packettype': 0x0c, 'command':0x23}) self.__field_header.readfrombuffer(buf) self.__field_entry=evententry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 400}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x0c, 'command':0x23}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyowriteheader): self.__field_header=value else: self.__field_header=sanyowriteheader(value,**{'packettype': 0x0c, 'command':0x23}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,evententry): self.__field_entry=value else: self.__field_entry=evententry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 400}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 400}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class callalarmentry(BaseProtogenClass): __fields=['ringtone', 'slot', 'flag', 'dunno1', 'phonenum', 'phonenum_len', 'date', 'period', 'dom', 'datedup', 'name', 'pad1', 'name_len', 'phonenumbertype', 'phonenumberslot', 'serial'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmentry,self).__init__(**dict) if self.__class__ is callalarmentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'constant': 0}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_dunno1.writetobuffer(buf) self.__field_phonenum.writetobuffer(buf) self.__field_phonenum_len.writetobuffer(buf) self.__field_date.writetobuffer(buf) self.__field_period.writetobuffer(buf) self.__field_dom.writetobuffer(buf) self.__field_datedup.writetobuffer(buf) self.__field_name.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.writetobuffer(buf) self.__field_name_len.writetobuffer(buf) self.__field_phonenumbertype.writetobuffer(buf) self.__field_phonenumberslot.writetobuffer(buf) try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_dunno1=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_dunno1.readfrombuffer(buf) self.__field_phonenum=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_phonenum.readfrombuffer(buf) self.__field_phonenum_len=UINT(**{'sizeinbytes': 1}) self.__field_phonenum_len.readfrombuffer(buf) self.__field_date=UINT(**{'sizeinbytes': 4}) self.__field_date.readfrombuffer(buf) self.__field_period=UINT(**{'sizeinbytes': 1}) self.__field_period.readfrombuffer(buf) self.__field_dom=UINT(**{'sizeinbytes': 1}) self.__field_dom.readfrombuffer(buf) self.__field_datedup=UINT(**{'sizeinbytes': 4}) self.__field_datedup.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_name.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.readfrombuffer(buf) self.__field_name_len=UINT(**{'sizeinbytes': 1}) self.__field_name_len.readfrombuffer(buf) self.__field_phonenumbertype=UINT(**{'sizeinbytes': 1}) self.__field_phonenumbertype.readfrombuffer(buf) self.__field_phonenumberslot=UINT(**{'sizeinbytes': 2}) self.__field_phonenumberslot.readfrombuffer(buf) self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'constant': 0}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, "0: Not used, 1: Scheduled, 2: Already Happened") def __getfield_dunno1(self): try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UINT): self.__field_dunno1=value else: self.__field_dunno1=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, "Related to Snooze?") def __getfield_phonenum(self): return self.__field_phonenum.getvalue() def __setfield_phonenum(self, value): if isinstance(value,USTRING): self.__field_phonenum=value else: self.__field_phonenum=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_phonenum(self): del self.__field_phonenum phonenum=property(__getfield_phonenum, __setfield_phonenum, __delfield_phonenum, None) def __getfield_phonenum_len(self): return self.__field_phonenum_len.getvalue() def __setfield_phonenum_len(self, value): if isinstance(value,UINT): self.__field_phonenum_len=value else: self.__field_phonenum_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_phonenum_len(self): del self.__field_phonenum_len phonenum_len=property(__getfield_phonenum_len, __setfield_phonenum_len, __delfield_phonenum_len, None) def __getfield_date(self): return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,UINT): self.__field_date=value else: self.__field_date=UINT(value,**{'sizeinbytes': 4}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, "# seconds since Jan 1, 1980 approximately") def __getfield_period(self): return self.__field_period.getvalue() def __setfield_period(self, value): if isinstance(value,UINT): self.__field_period=value else: self.__field_period=UINT(value,**{'sizeinbytes': 1}) def __delfield_period(self): del self.__field_period period=property(__getfield_period, __setfield_period, __delfield_period, "No, Daily, Weekly, Monthly, Yearly") def __getfield_dom(self): return self.__field_dom.getvalue() def __setfield_dom(self, value): if isinstance(value,UINT): self.__field_dom=value else: self.__field_dom=UINT(value,**{'sizeinbytes': 1}) def __delfield_dom(self): del self.__field_dom dom=property(__getfield_dom, __setfield_dom, __delfield_dom, "Day of month for the event") def __getfield_datedup(self): return self.__field_datedup.getvalue() def __setfield_datedup(self, value): if isinstance(value,UINT): self.__field_datedup=value else: self.__field_datedup=UINT(value,**{'sizeinbytes': 4}) def __delfield_datedup(self): del self.__field_datedup datedup=property(__getfield_datedup, __setfield_datedup, __delfield_datedup, "Copy of the date. Always the same???") def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_name_len(self): return self.__field_name_len.getvalue() def __setfield_name_len(self, value): if isinstance(value,UINT): self.__field_name_len=value else: self.__field_name_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_name_len(self): del self.__field_name_len name_len=property(__getfield_name_len, __setfield_name_len, __delfield_name_len, None) def __getfield_phonenumbertype(self): return self.__field_phonenumbertype.getvalue() def __setfield_phonenumbertype(self, value): if isinstance(value,UINT): self.__field_phonenumbertype=value else: self.__field_phonenumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_phonenumbertype(self): del self.__field_phonenumbertype phonenumbertype=property(__getfield_phonenumbertype, __setfield_phonenumbertype, __delfield_phonenumbertype, "1: Home, 2: Work, ...") def __getfield_phonenumberslot(self): return self.__field_phonenumberslot.getvalue() def __setfield_phonenumberslot(self, value): if isinstance(value,UINT): self.__field_phonenumberslot=value else: self.__field_phonenumberslot=UINT(value,**{'sizeinbytes': 2}) def __delfield_phonenumberslot(self): del self.__field_phonenumberslot phonenumberslot=property(__getfield_phonenumberslot, __setfield_phonenumberslot, __delfield_phonenumberslot, None) def __getfield_serial(self): try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_serial.getvalue() def __setfield_serial(self, value): if isinstance(value,UINT): self.__field_serial=value else: self.__field_serial=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_serial(self): del self.__field_serial serial=property(__getfield_serial, __setfield_serial, __delfield_serial, None) def iscontainer(self): return True def containerelements(self): yield ('ringtone', self.__field_ringtone, None) yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, "0: Not used, 1: Scheduled, 2: Already Happened") yield ('dunno1', self.__field_dunno1, "Related to Snooze?") yield ('phonenum', self.__field_phonenum, None) yield ('phonenum_len', self.__field_phonenum_len, None) yield ('date', self.__field_date, "# seconds since Jan 1, 1980 approximately") yield ('period', self.__field_period, "No, Daily, Weekly, Monthly, Yearly") yield ('dom', self.__field_dom, "Day of month for the event") yield ('datedup', self.__field_datedup, "Copy of the date. Always the same???") yield ('name', self.__field_name, None) yield ('pad1', self.__field_pad1, None) yield ('name_len', self.__field_name_len, None) yield ('phonenumbertype', self.__field_phonenumbertype, "1: Home, 2: Work, ...") yield ('phonenumberslot', self.__field_phonenumberslot, None) yield ('serial', self.__field_serial, None) class callalarmresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmresponse,self).__init__(**dict) if self.__class__ is callalarmresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=callalarmentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,callalarmentry): self.__field_entry=value else: self.__field_entry=callalarmentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class callalarmupdaterequest(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmupdaterequest,self).__init__(**dict) if self.__class__ is callalarmupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x0c, 'command':0x24}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 400}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyowriteheader(**{'packettype': 0x0c, 'command':0x24}) self.__field_header.readfrombuffer(buf) self.__field_entry=callalarmentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 400}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x0c, 'command':0x24}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyowriteheader): self.__field_header=value else: self.__field_header=sanyowriteheader(value,**{'packettype': 0x0c, 'command':0x24}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,callalarmentry): self.__field_entry=value else: self.__field_entry=callalarmentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 400}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 400}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) bitpim-1.0.7+dfsg1/src/phones/p_sanyo5500.py0000644001616600161660000000107310122742673016573 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Sanyo SCP-5500""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 # Need to check. Is max phone will hold 32/96 or 33/97 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 bitpim-1.0.7+dfsg1/src/phones/p_samsungspha620.py0000644001616600161660000026614710466234100017720 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Proposed descriptions of data usign AT commands""" from prototypes import * from p_samsung_packet import * # We use LSB for all integer like fields in diagnostic mode UINT=UINTlsb BOOL=BOOLlsb # NUMPHONEBOOKENTRIES=300 NUMEMAILS=3 NUMPHONENUMBERS=6 MAXNUMBERLEN=32 NUMTODOENTRIES=9 NUMSMSENTRIES=94 NUMGROUPS=4 AMSREGISTRY="ams/AmsRegistry" ENDTRANSACTION="ams/EndTransaction" RINGERPREFIX="ams/Ringers/cnts" WALLPAPERPREFIX="ams/Screen Savers/cnts" class pbentry(BaseProtogenClass): __fields=['slot', 'uslot', 'group', 'ringtone', 'name', 'speeddial', 'dunno1', 'numbers', 'dunno3', 'dunno4', 'email', 'url', 'birthday', 'wallpaper', 'timestamp'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_uslot.writetobuffer(buf) self.__field_group.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=CSVINT(**{'default': 20}) self.__field_ringtone.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_speeddial.writetobuffer(buf) try: self.__field_dunno1 except: self.__field_dunno1=CSVINT(**{'default': 0}) self.__field_dunno1.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'length': NUMPHONENUMBERS, 'createdefault': True, 'elementclass': phonenumber}) self.__field_numbers.writetobuffer(buf) try: self.__field_dunno3 except: self.__field_dunno3=CSVSTRING(**{'quotechar': None, 'default': ""}) self.__field_dunno3.writetobuffer(buf) try: self.__field_dunno4 except: self.__field_dunno4=CSVSTRING(**{'quotechar': None, 'default': ""}) self.__field_dunno4.writetobuffer(buf) self.__field_email.writetobuffer(buf) self.__field_url.writetobuffer(buf) try: self.__field_birthday except: self.__field_birthday=CSVDATE(**{'default': ""}) self.__field_birthday.writetobuffer(buf) try: self.__field_wallpaper except: self.__field_wallpaper=CSVINT(**{'default': 20}) self.__field_wallpaper.writetobuffer(buf) try: self.__field_timestamp except: self.__field_timestamp=CSVTIME(**{'terminator': None, 'default': (1980,1,1,12,0,0)}) self.__field_timestamp.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=CSVINT() self.__field_slot.readfrombuffer(buf) self.__field_uslot=CSVINT() self.__field_uslot.readfrombuffer(buf) self.__field_group=CSVINT() self.__field_group.readfrombuffer(buf) self.__field_ringtone=CSVINT(**{'default': 20}) self.__field_ringtone.readfrombuffer(buf) self.__field_name=CSVSTRING() self.__field_name.readfrombuffer(buf) self.__field_speeddial=CSVINT() self.__field_speeddial.readfrombuffer(buf) self.__field_dunno1=CSVINT(**{'default': 0}) self.__field_dunno1.readfrombuffer(buf) self.__field_numbers=LIST(**{'length': NUMPHONENUMBERS, 'createdefault': True, 'elementclass': phonenumber}) self.__field_numbers.readfrombuffer(buf) self.__field_dunno3=CSVSTRING(**{'quotechar': None, 'default': ""}) self.__field_dunno3.readfrombuffer(buf) self.__field_dunno4=CSVSTRING(**{'quotechar': None, 'default': ""}) self.__field_dunno4.readfrombuffer(buf) self.__field_email=CSVSTRING() self.__field_email.readfrombuffer(buf) self.__field_url=CSVSTRING() self.__field_url.readfrombuffer(buf) self.__field_birthday=CSVDATE(**{'default': ""}) self.__field_birthday.readfrombuffer(buf) self.__field_wallpaper=CSVINT(**{'default': 20}) self.__field_wallpaper.readfrombuffer(buf) self.__field_timestamp=CSVTIME(**{'terminator': None, 'default': (1980,1,1,12,0,0)}) self.__field_timestamp.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,CSVINT): self.__field_slot=value else: self.__field_slot=CSVINT(value,) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, "Internal Slot") def __getfield_uslot(self): return self.__field_uslot.getvalue() def __setfield_uslot(self, value): if isinstance(value,CSVINT): self.__field_uslot=value else: self.__field_uslot=CSVINT(value,) def __delfield_uslot(self): del self.__field_uslot uslot=property(__getfield_uslot, __setfield_uslot, __delfield_uslot, "User Slot, Speed dial") def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,CSVINT): self.__field_group=value else: self.__field_group=CSVINT(value,) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=CSVINT(**{'default': 20}) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,CSVINT): self.__field_ringtone=value else: self.__field_ringtone=CSVINT(value,**{'default': 20}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,CSVSTRING): self.__field_name=value else: self.__field_name=CSVSTRING(value,) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_speeddial(self): return self.__field_speeddial.getvalue() def __setfield_speeddial(self, value): if isinstance(value,CSVINT): self.__field_speeddial=value else: self.__field_speeddial=CSVINT(value,) def __delfield_speeddial(self): del self.__field_speeddial speeddial=property(__getfield_speeddial, __setfield_speeddial, __delfield_speeddial, "Which phone number assigned to speed dial uslot") def __getfield_dunno1(self): try: self.__field_dunno1 except: self.__field_dunno1=CSVINT(**{'default': 0}) return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,CSVINT): self.__field_dunno1=value else: self.__field_dunno1=CSVINT(value,**{'default': 0}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'length': NUMPHONENUMBERS, 'createdefault': True, 'elementclass': phonenumber}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'length': NUMPHONENUMBERS, 'createdefault': True, 'elementclass': phonenumber}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_dunno3(self): try: self.__field_dunno3 except: self.__field_dunno3=CSVSTRING(**{'quotechar': None, 'default': ""}) return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,CSVSTRING): self.__field_dunno3=value else: self.__field_dunno3=CSVSTRING(value,**{'quotechar': None, 'default': ""}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_dunno4(self): try: self.__field_dunno4 except: self.__field_dunno4=CSVSTRING(**{'quotechar': None, 'default': ""}) return self.__field_dunno4.getvalue() def __setfield_dunno4(self, value): if isinstance(value,CSVSTRING): self.__field_dunno4=value else: self.__field_dunno4=CSVSTRING(value,**{'quotechar': None, 'default': ""}) def __delfield_dunno4(self): del self.__field_dunno4 dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None) def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,CSVSTRING): self.__field_email=value else: self.__field_email=CSVSTRING(value,) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def __getfield_url(self): return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,CSVSTRING): self.__field_url=value else: self.__field_url=CSVSTRING(value,) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_birthday(self): try: self.__field_birthday except: self.__field_birthday=CSVDATE(**{'default': ""}) return self.__field_birthday.getvalue() def __setfield_birthday(self, value): if isinstance(value,CSVDATE): self.__field_birthday=value else: self.__field_birthday=CSVDATE(value,**{'default': ""}) def __delfield_birthday(self): del self.__field_birthday birthday=property(__getfield_birthday, __setfield_birthday, __delfield_birthday, None) def __getfield_wallpaper(self): try: self.__field_wallpaper except: self.__field_wallpaper=CSVINT(**{'default': 20}) return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,CSVINT): self.__field_wallpaper=value else: self.__field_wallpaper=CSVINT(value,**{'default': 20}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_timestamp(self): try: self.__field_timestamp except: self.__field_timestamp=CSVTIME(**{'terminator': None, 'default': (1980,1,1,12,0,0)}) return self.__field_timestamp.getvalue() def __setfield_timestamp(self, value): if isinstance(value,CSVTIME): self.__field_timestamp=value else: self.__field_timestamp=CSVTIME(value,**{'terminator': None, 'default': (1980,1,1,12,0,0)}) def __delfield_timestamp(self): del self.__field_timestamp timestamp=property(__getfield_timestamp, __setfield_timestamp, __delfield_timestamp, "Use terminator None for last item") def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, "Internal Slot") yield ('uslot', self.__field_uslot, "User Slot, Speed dial") yield ('group', self.__field_group, None) yield ('ringtone', self.__field_ringtone, None) yield ('name', self.__field_name, None) yield ('speeddial', self.__field_speeddial, "Which phone number assigned to speed dial uslot") yield ('dunno1', self.__field_dunno1, None) yield ('numbers', self.__field_numbers, None) yield ('dunno3', self.__field_dunno3, None) yield ('dunno4', self.__field_dunno4, None) yield ('email', self.__field_email, None) yield ('url', self.__field_url, None) yield ('birthday', self.__field_birthday, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('timestamp', self.__field_timestamp, "Use terminator None for last item") class phonebookslotresponse(BaseProtogenClass): __fields=['command', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebookslotresponse,self).__init__(**dict) if self.__class__ is phonebookslotresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebookslotresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebookslotresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '#PBOKR:'}) self.__field_command.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '#PBOKR:'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('entry', self.__field_entry, None) class phonebookslotupdaterequest(BaseProtogenClass): __fields=['command', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebookslotupdaterequest,self).__init__(**dict) if self.__class__ is phonebookslotupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebookslotupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebookslotupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'}) self.__field_command.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'}) self.__field_command.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('entry', self.__field_entry, None) class groupnameresponse(BaseProtogenClass): __fields=['command', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(groupnameresponse,self).__init__(**dict) if self.__class__ is groupnameresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(groupnameresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(groupnameresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '#PBGRR:'}) self.__field_command.readfrombuffer(buf) self.__field_entry=groupnameentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '#PBGRR:'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,groupnameentry): self.__field_entry=value else: self.__field_entry=groupnameentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('entry', self.__field_entry, None) class groupnameentry(BaseProtogenClass): __fields=['gid', 'groupname', 'ringtone', 'dunno2', 'timestamp'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(groupnameentry,self).__init__(**dict) if self.__class__ is groupnameentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(groupnameentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(groupnameentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_gid.writetobuffer(buf) self.__field_groupname.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_timestamp.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_gid=CSVINT() self.__field_gid.readfrombuffer(buf) self.__field_groupname=CSVSTRING() self.__field_groupname.readfrombuffer(buf) self.__field_ringtone=CSVINT() self.__field_ringtone.readfrombuffer(buf) self.__field_dunno2=CSVSTRING(**{'quotechar': None}) self.__field_dunno2.readfrombuffer(buf) self.__field_timestamp=CSVTIME(**{'terminator': None}) self.__field_timestamp.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_gid(self): return self.__field_gid.getvalue() def __setfield_gid(self, value): if isinstance(value,CSVINT): self.__field_gid=value else: self.__field_gid=CSVINT(value,) def __delfield_gid(self): del self.__field_gid gid=property(__getfield_gid, __setfield_gid, __delfield_gid, None) def __getfield_groupname(self): return self.__field_groupname.getvalue() def __setfield_groupname(self, value): if isinstance(value,CSVSTRING): self.__field_groupname=value else: self.__field_groupname=CSVSTRING(value,) def __delfield_groupname(self): del self.__field_groupname groupname=property(__getfield_groupname, __setfield_groupname, __delfield_groupname, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,CSVINT): self.__field_ringtone=value else: self.__field_ringtone=CSVINT(value,) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "Ringtone assignment?") def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,CSVSTRING): self.__field_dunno2=value else: self.__field_dunno2=CSVSTRING(value,**{'quotechar': None}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, "A single character C or S") def __getfield_timestamp(self): return self.__field_timestamp.getvalue() def __setfield_timestamp(self, value): if isinstance(value,CSVTIME): self.__field_timestamp=value else: self.__field_timestamp=CSVTIME(value,**{'terminator': None}) def __delfield_timestamp(self): del self.__field_timestamp timestamp=property(__getfield_timestamp, __setfield_timestamp, __delfield_timestamp, None) def iscontainer(self): return True def containerelements(self): yield ('gid', self.__field_gid, None) yield ('groupname', self.__field_groupname, None) yield ('ringtone', self.__field_ringtone, "Ringtone assignment?") yield ('dunno2', self.__field_dunno2, "A single character C or S") yield ('timestamp', self.__field_timestamp, None) class unparsedresponse(BaseProtogenClass): __fields=['pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(unparsedresponse,self).__init__(**dict) if self.__class__ is unparsedresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(unparsedresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(unparsedresponse,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_pad=UNKNOWN(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('pad', self.__field_pad, None) class filepbentry(BaseProtogenClass): __fields=['dunno1', 'dunno2', 'dunno3', 'dunno4', 'dunno5', 'dunno6', 'dunno7', 'dunno8', 'dunno9', 'slot', 'dunno10', 'dunno11', 'dunno12', 'dunno13', 'dunno14', 'dunno15', 'dunno16', 'dunno17', 'dunno18', 'dunno19', 'dunno20', 'dunno21', 'name_len', 'name', 'birthday', 'group_num'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(filepbentry,self).__init__(**dict) if self.__class__ is filepbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(filepbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(filepbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_dunno1.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_dunno3.writetobuffer(buf) self.__field_dunno4.writetobuffer(buf) self.__field_dunno5.writetobuffer(buf) self.__field_dunno6.writetobuffer(buf) self.__field_dunno7.writetobuffer(buf) self.__field_dunno8.writetobuffer(buf) self.__field_dunno9.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_dunno10.writetobuffer(buf) self.__field_dunno11.writetobuffer(buf) self.__field_dunno12.writetobuffer(buf) self.__field_dunno13.writetobuffer(buf) self.__field_dunno14.writetobuffer(buf) self.__field_dunno15.writetobuffer(buf) self.__field_dunno16.writetobuffer(buf) self.__field_dunno17.writetobuffer(buf) self.__field_dunno18.writetobuffer(buf) self.__field_dunno19.writetobuffer(buf) self.__field_dunno20.writetobuffer(buf) self.__field_dunno21.writetobuffer(buf) self.__field_name_len.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_birthday.writetobuffer(buf) self.__field_group_num.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_dunno1=UINT(**{'sizeinbytes': 1}) self.__field_dunno1.readfrombuffer(buf) self.__field_dunno2=UINT(**{'sizeinbytes': 1}) self.__field_dunno2.readfrombuffer(buf) self.__field_dunno3=UINT(**{'sizeinbytes': 1}) self.__field_dunno3.readfrombuffer(buf) self.__field_dunno4=UINT(**{'sizeinbytes': 1}) self.__field_dunno4.readfrombuffer(buf) self.__field_dunno5=UINT(**{'sizeinbytes': 1}) self.__field_dunno5.readfrombuffer(buf) self.__field_dunno6=UINT(**{'sizeinbytes': 1}) self.__field_dunno6.readfrombuffer(buf) self.__field_dunno7=UINT(**{'sizeinbytes': 1}) self.__field_dunno7.readfrombuffer(buf) self.__field_dunno8=UINT(**{'sizeinbytes': 1}) self.__field_dunno8.readfrombuffer(buf) self.__field_dunno9=UINT(**{'sizeinbytes': 1}) self.__field_dunno9.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_dunno10=UINT(**{'sizeinbytes': 1}) self.__field_dunno10.readfrombuffer(buf) self.__field_dunno11=UINT(**{'sizeinbytes': 1}) self.__field_dunno11.readfrombuffer(buf) self.__field_dunno12=UINT(**{'sizeinbytes': 1}) self.__field_dunno12.readfrombuffer(buf) self.__field_dunno13=UINT(**{'sizeinbytes': 1}) self.__field_dunno13.readfrombuffer(buf) self.__field_dunno14=UINT(**{'sizeinbytes': 1}) self.__field_dunno14.readfrombuffer(buf) self.__field_dunno15=UINT(**{'sizeinbytes': 1}) self.__field_dunno15.readfrombuffer(buf) self.__field_dunno16=UINT(**{'sizeinbytes': 1}) self.__field_dunno16.readfrombuffer(buf) self.__field_dunno17=UINT(**{'sizeinbytes': 1}) self.__field_dunno17.readfrombuffer(buf) self.__field_dunno18=UINT(**{'sizeinbytes': 1}) self.__field_dunno18.readfrombuffer(buf) self.__field_dunno19=UINT(**{'sizeinbytes': 1}) self.__field_dunno19.readfrombuffer(buf) self.__field_dunno20=UINT(**{'sizeinbytes': 1}) self.__field_dunno20.readfrombuffer(buf) self.__field_dunno21=UINT(**{'sizeinbytes': 1}) self.__field_dunno21.readfrombuffer(buf) self.__field_name_len=UINT(**{'sizeinbytes': 1}) self.__field_name_len.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 21, 'raiseonunterminatedread': False }) self.__field_name.readfrombuffer(buf) self.__field_birthday=USTRING(**{'sizeinbytes': 11}) self.__field_birthday.readfrombuffer(buf) self.__field_group_num=UINT(**{'sizeinbytes': 1}) self.__field_group_num.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UINT): self.__field_dunno1=value else: self.__field_dunno1=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UINT): self.__field_dunno2=value else: self.__field_dunno2=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_dunno3(self): return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,UINT): self.__field_dunno3=value else: self.__field_dunno3=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_dunno4(self): return self.__field_dunno4.getvalue() def __setfield_dunno4(self, value): if isinstance(value,UINT): self.__field_dunno4=value else: self.__field_dunno4=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno4(self): del self.__field_dunno4 dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None) def __getfield_dunno5(self): return self.__field_dunno5.getvalue() def __setfield_dunno5(self, value): if isinstance(value,UINT): self.__field_dunno5=value else: self.__field_dunno5=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno5(self): del self.__field_dunno5 dunno5=property(__getfield_dunno5, __setfield_dunno5, __delfield_dunno5, None) def __getfield_dunno6(self): return self.__field_dunno6.getvalue() def __setfield_dunno6(self, value): if isinstance(value,UINT): self.__field_dunno6=value else: self.__field_dunno6=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno6(self): del self.__field_dunno6 dunno6=property(__getfield_dunno6, __setfield_dunno6, __delfield_dunno6, None) def __getfield_dunno7(self): return self.__field_dunno7.getvalue() def __setfield_dunno7(self, value): if isinstance(value,UINT): self.__field_dunno7=value else: self.__field_dunno7=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno7(self): del self.__field_dunno7 dunno7=property(__getfield_dunno7, __setfield_dunno7, __delfield_dunno7, None) def __getfield_dunno8(self): return self.__field_dunno8.getvalue() def __setfield_dunno8(self, value): if isinstance(value,UINT): self.__field_dunno8=value else: self.__field_dunno8=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno8(self): del self.__field_dunno8 dunno8=property(__getfield_dunno8, __setfield_dunno8, __delfield_dunno8, None) def __getfield_dunno9(self): return self.__field_dunno9.getvalue() def __setfield_dunno9(self, value): if isinstance(value,UINT): self.__field_dunno9=value else: self.__field_dunno9=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno9(self): del self.__field_dunno9 dunno9=property(__getfield_dunno9, __setfield_dunno9, __delfield_dunno9, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_dunno10(self): return self.__field_dunno10.getvalue() def __setfield_dunno10(self, value): if isinstance(value,UINT): self.__field_dunno10=value else: self.__field_dunno10=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno10(self): del self.__field_dunno10 dunno10=property(__getfield_dunno10, __setfield_dunno10, __delfield_dunno10, None) def __getfield_dunno11(self): return self.__field_dunno11.getvalue() def __setfield_dunno11(self, value): if isinstance(value,UINT): self.__field_dunno11=value else: self.__field_dunno11=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno11(self): del self.__field_dunno11 dunno11=property(__getfield_dunno11, __setfield_dunno11, __delfield_dunno11, None) def __getfield_dunno12(self): return self.__field_dunno12.getvalue() def __setfield_dunno12(self, value): if isinstance(value,UINT): self.__field_dunno12=value else: self.__field_dunno12=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno12(self): del self.__field_dunno12 dunno12=property(__getfield_dunno12, __setfield_dunno12, __delfield_dunno12, None) def __getfield_dunno13(self): return self.__field_dunno13.getvalue() def __setfield_dunno13(self, value): if isinstance(value,UINT): self.__field_dunno13=value else: self.__field_dunno13=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno13(self): del self.__field_dunno13 dunno13=property(__getfield_dunno13, __setfield_dunno13, __delfield_dunno13, None) def __getfield_dunno14(self): return self.__field_dunno14.getvalue() def __setfield_dunno14(self, value): if isinstance(value,UINT): self.__field_dunno14=value else: self.__field_dunno14=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno14(self): del self.__field_dunno14 dunno14=property(__getfield_dunno14, __setfield_dunno14, __delfield_dunno14, None) def __getfield_dunno15(self): return self.__field_dunno15.getvalue() def __setfield_dunno15(self, value): if isinstance(value,UINT): self.__field_dunno15=value else: self.__field_dunno15=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno15(self): del self.__field_dunno15 dunno15=property(__getfield_dunno15, __setfield_dunno15, __delfield_dunno15, None) def __getfield_dunno16(self): return self.__field_dunno16.getvalue() def __setfield_dunno16(self, value): if isinstance(value,UINT): self.__field_dunno16=value else: self.__field_dunno16=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno16(self): del self.__field_dunno16 dunno16=property(__getfield_dunno16, __setfield_dunno16, __delfield_dunno16, None) def __getfield_dunno17(self): return self.__field_dunno17.getvalue() def __setfield_dunno17(self, value): if isinstance(value,UINT): self.__field_dunno17=value else: self.__field_dunno17=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno17(self): del self.__field_dunno17 dunno17=property(__getfield_dunno17, __setfield_dunno17, __delfield_dunno17, None) def __getfield_dunno18(self): return self.__field_dunno18.getvalue() def __setfield_dunno18(self, value): if isinstance(value,UINT): self.__field_dunno18=value else: self.__field_dunno18=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno18(self): del self.__field_dunno18 dunno18=property(__getfield_dunno18, __setfield_dunno18, __delfield_dunno18, None) def __getfield_dunno19(self): return self.__field_dunno19.getvalue() def __setfield_dunno19(self, value): if isinstance(value,UINT): self.__field_dunno19=value else: self.__field_dunno19=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno19(self): del self.__field_dunno19 dunno19=property(__getfield_dunno19, __setfield_dunno19, __delfield_dunno19, None) def __getfield_dunno20(self): return self.__field_dunno20.getvalue() def __setfield_dunno20(self, value): if isinstance(value,UINT): self.__field_dunno20=value else: self.__field_dunno20=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno20(self): del self.__field_dunno20 dunno20=property(__getfield_dunno20, __setfield_dunno20, __delfield_dunno20, None) def __getfield_dunno21(self): return self.__field_dunno21.getvalue() def __setfield_dunno21(self, value): if isinstance(value,UINT): self.__field_dunno21=value else: self.__field_dunno21=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno21(self): del self.__field_dunno21 dunno21=property(__getfield_dunno21, __setfield_dunno21, __delfield_dunno21, None) def __getfield_name_len(self): return self.__field_name_len.getvalue() def __setfield_name_len(self, value): if isinstance(value,UINT): self.__field_name_len=value else: self.__field_name_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_name_len(self): del self.__field_name_len name_len=property(__getfield_name_len, __setfield_name_len, __delfield_name_len, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 21, 'raiseonunterminatedread': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_birthday(self): return self.__field_birthday.getvalue() def __setfield_birthday(self, value): if isinstance(value,USTRING): self.__field_birthday=value else: self.__field_birthday=USTRING(value,**{'sizeinbytes': 11}) def __delfield_birthday(self): del self.__field_birthday birthday=property(__getfield_birthday, __setfield_birthday, __delfield_birthday, None) def __getfield_group_num(self): return self.__field_group_num.getvalue() def __setfield_group_num(self, value): if isinstance(value,UINT): self.__field_group_num=value else: self.__field_group_num=UINT(value,**{'sizeinbytes': 1}) def __delfield_group_num(self): del self.__field_group_num group_num=property(__getfield_group_num, __setfield_group_num, __delfield_group_num, None) def iscontainer(self): return True def containerelements(self): yield ('dunno1', self.__field_dunno1, None) yield ('dunno2', self.__field_dunno2, None) yield ('dunno3', self.__field_dunno3, None) yield ('dunno4', self.__field_dunno4, None) yield ('dunno5', self.__field_dunno5, None) yield ('dunno6', self.__field_dunno6, None) yield ('dunno7', self.__field_dunno7, None) yield ('dunno8', self.__field_dunno8, None) yield ('dunno9', self.__field_dunno9, None) yield ('slot', self.__field_slot, None) yield ('dunno10', self.__field_dunno10, None) yield ('dunno11', self.__field_dunno11, None) yield ('dunno12', self.__field_dunno12, None) yield ('dunno13', self.__field_dunno13, None) yield ('dunno14', self.__field_dunno14, None) yield ('dunno15', self.__field_dunno15, None) yield ('dunno16', self.__field_dunno16, None) yield ('dunno17', self.__field_dunno17, None) yield ('dunno18', self.__field_dunno18, None) yield ('dunno19', self.__field_dunno19, None) yield ('dunno20', self.__field_dunno20, None) yield ('dunno21', self.__field_dunno21, None) yield ('name_len', self.__field_name_len, None) yield ('name', self.__field_name, None) yield ('birthday', self.__field_birthday, None) yield ('group_num', self.__field_group_num, None) class pbbook(BaseProtogenClass): __fields=['dummy', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbbook,self).__init__(**dict) if self.__class__ is pbbook: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbbook,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbbook,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_dummy.writetobuffer(buf) try: self.__field_entry except: self.__field_entry=LIST(**{ 'length': 300, 'elementclass': filepbentry }) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_dummy=pbentry() self.__field_dummy.readfrombuffer(buf) self.__field_entry=LIST(**{ 'length': 300, 'elementclass': filepbentry }) self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_dummy(self): return self.__field_dummy.getvalue() def __setfield_dummy(self, value): if isinstance(value,pbentry): self.__field_dummy=value else: self.__field_dummy=pbentry(value,) def __delfield_dummy(self): del self.__field_dummy dummy=property(__getfield_dummy, __setfield_dummy, __delfield_dummy, None) def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=LIST(**{ 'length': 300, 'elementclass': filepbentry }) return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,LIST): self.__field_entry=value else: self.__field_entry=LIST(value,**{ 'length': 300, 'elementclass': filepbentry }) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('dummy', self.__field_dummy, None) yield ('entry', self.__field_entry, None) class image(BaseProtogenClass): __fields=['inuse', 'pic_type', 'pic_id'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(image,self).__init__(**dict) if self.__class__ is image: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(image,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(image,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_inuse.writetobuffer(buf) self.__field_pic_type.writetobuffer(buf) self.__field_pic_id.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_inuse=UINT(**{'sizeinbytes': 1}) self.__field_inuse.readfrombuffer(buf) self.__field_pic_type=UINT(**{'sizeinbytes': 1}) self.__field_pic_type.readfrombuffer(buf) self.__field_pic_id=UINT(**{'sizeinbytes': 1}) self.__field_pic_id.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_inuse(self): return self.__field_inuse.getvalue() def __setfield_inuse(self, value): if isinstance(value,UINT): self.__field_inuse=value else: self.__field_inuse=UINT(value,**{'sizeinbytes': 1}) def __delfield_inuse(self): del self.__field_inuse inuse=property(__getfield_inuse, __setfield_inuse, __delfield_inuse, None) def __getfield_pic_type(self): return self.__field_pic_type.getvalue() def __setfield_pic_type(self, value): if isinstance(value,UINT): self.__field_pic_type=value else: self.__field_pic_type=UINT(value,**{'sizeinbytes': 1}) def __delfield_pic_type(self): del self.__field_pic_type pic_type=property(__getfield_pic_type, __setfield_pic_type, __delfield_pic_type, "1: Man, 2: Animals, 3: Other, 4: Downloads, 5: Pic Wallet") def __getfield_pic_id(self): return self.__field_pic_id.getvalue() def __setfield_pic_id(self, value): if isinstance(value,UINT): self.__field_pic_id=value else: self.__field_pic_id=UINT(value,**{'sizeinbytes': 1}) def __delfield_pic_id(self): del self.__field_pic_id pic_id=property(__getfield_pic_id, __setfield_pic_id, __delfield_pic_id, None) def iscontainer(self): return True def containerelements(self): yield ('inuse', self.__field_inuse, None) yield ('pic_type', self.__field_pic_type, "1: Man, 2: Animals, 3: Other, 4: Downloads, 5: Pic Wallet") yield ('pic_id', self.__field_pic_id, None) class avatars(BaseProtogenClass): __fields=['dummy', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(avatars,self).__init__(**dict) if self.__class__ is avatars: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(avatars,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(avatars,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_dummy.writetobuffer(buf) try: self.__field_entry except: self.__field_entry=LIST(**{'length': NUMPHONEBOOKENTRIES, 'elementclass': image}) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_dummy=image() self.__field_dummy.readfrombuffer(buf) self.__field_entry=LIST(**{'length': NUMPHONEBOOKENTRIES, 'elementclass': image}) self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_dummy(self): return self.__field_dummy.getvalue() def __setfield_dummy(self, value): if isinstance(value,image): self.__field_dummy=value else: self.__field_dummy=image(value,) def __delfield_dummy(self): del self.__field_dummy dummy=property(__getfield_dummy, __setfield_dummy, __delfield_dummy, None) def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=LIST(**{'length': NUMPHONEBOOKENTRIES, 'elementclass': image}) return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,LIST): self.__field_entry=value else: self.__field_entry=LIST(value,**{'length': NUMPHONEBOOKENTRIES, 'elementclass': image}) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('dummy', self.__field_dummy, None) yield ('entry', self.__field_entry, None) class ringer(BaseProtogenClass): __fields=['inuse', 'ring_type', 'ring_id'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ringer,self).__init__(**dict) if self.__class__ is ringer: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ringer,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ringer,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_inuse.writetobuffer(buf) self.__field_ring_type.writetobuffer(buf) self.__field_ring_id.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_inuse=UINT(**{'sizeinbytes': 1}) self.__field_inuse.readfrombuffer(buf) self.__field_ring_type=UINT(**{'sizeinbytes': 1}) self.__field_ring_type.readfrombuffer(buf) self.__field_ring_id=UINT(**{'sizeinbytes': 1}) self.__field_ring_id.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_inuse(self): return self.__field_inuse.getvalue() def __setfield_inuse(self, value): if isinstance(value,UINT): self.__field_inuse=value else: self.__field_inuse=UINT(value,**{'sizeinbytes': 1}) def __delfield_inuse(self): del self.__field_inuse inuse=property(__getfield_inuse, __setfield_inuse, __delfield_inuse, None) def __getfield_ring_type(self): return self.__field_ring_type.getvalue() def __setfield_ring_type(self, value): if isinstance(value,UINT): self.__field_ring_type=value else: self.__field_ring_type=UINT(value,**{'sizeinbytes': 1}) def __delfield_ring_type(self): del self.__field_ring_type ring_type=property(__getfield_ring_type, __setfield_ring_type, __delfield_ring_type, "0: Default: 1: Ringtones, 2: Melodies, 3: Downloads, 4: Single Tone") def __getfield_ring_id(self): return self.__field_ring_id.getvalue() def __setfield_ring_id(self, value): if isinstance(value,UINT): self.__field_ring_id=value else: self.__field_ring_id=UINT(value,**{'sizeinbytes': 1}) def __delfield_ring_id(self): del self.__field_ring_id ring_id=property(__getfield_ring_id, __setfield_ring_id, __delfield_ring_id, "0x45 Tone 1, 0x4a = Tone 6, 0x51=Ringtone 1, 5b=Fur Elise") def iscontainer(self): return True def containerelements(self): yield ('inuse', self.__field_inuse, None) yield ('ring_type', self.__field_ring_type, "0: Default: 1: Ringtones, 2: Melodies, 3: Downloads, 4: Single Tone") yield ('ring_id', self.__field_ring_id, "0x45 Tone 1, 0x4a = Tone 6, 0x51=Ringtone 1, 5b=Fur Elise") class amsregistry(BaseProtogenClass): __fields=['items', 'info', 'info2', 'strings', 'num1', 'num2', 'nfiles', 'num4'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(amsregistry,self).__init__(**dict) if self.__class__ is amsregistry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(amsregistry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(amsregistry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_items.writetobuffer(buf) self.__field_info.writetobuffer(buf) self.__field_info2.writetobuffer(buf) self.__field_strings.writetobuffer(buf) self.__field_num1.writetobuffer(buf) self.__field_num2.writetobuffer(buf) self.__field_nfiles.writetobuffer(buf) self.__field_num4.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': _gen_p_samsungspha620_134, 'length': 150}) self.__field_items.readfrombuffer(buf) self.__field_info=LIST(**{'elementclass': _gen_p_samsungspha620_137, 'length': 320}) self.__field_info.readfrombuffer(buf) self.__field_info2=LIST(**{'elementclass': _gen_p_samsungspha620_155, 'length': 100}) self.__field_info2.readfrombuffer(buf) self.__field_strings=DATA(**{'sizeinbytes': 23000}) self.__field_strings.readfrombuffer(buf) self.__field_num1=UINT(**{'sizeinbytes': 2}) self.__field_num1.readfrombuffer(buf) self.__field_num2=UINT(**{'sizeinbytes': 2}) self.__field_num2.readfrombuffer(buf) self.__field_nfiles=UINT(**{'sizeinbytes': 2}) self.__field_nfiles.readfrombuffer(buf) self.__field_num4=UINT(**{'sizeinbytes': 2}) self.__field_num4.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': _gen_p_samsungspha620_134, 'length': 150}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def __getfield_info(self): return self.__field_info.getvalue() def __setfield_info(self, value): if isinstance(value,LIST): self.__field_info=value else: self.__field_info=LIST(value,**{'elementclass': _gen_p_samsungspha620_137, 'length': 320}) def __delfield_info(self): del self.__field_info info=property(__getfield_info, __setfield_info, __delfield_info, None) def __getfield_info2(self): return self.__field_info2.getvalue() def __setfield_info2(self, value): if isinstance(value,LIST): self.__field_info2=value else: self.__field_info2=LIST(value,**{'elementclass': _gen_p_samsungspha620_155, 'length': 100}) def __delfield_info2(self): del self.__field_info2 info2=property(__getfield_info2, __setfield_info2, __delfield_info2, None) def __getfield_strings(self): return self.__field_strings.getvalue() def __setfield_strings(self, value): if isinstance(value,DATA): self.__field_strings=value else: self.__field_strings=DATA(value,**{'sizeinbytes': 23000}) def __delfield_strings(self): del self.__field_strings strings=property(__getfield_strings, __setfield_strings, __delfield_strings, None) def __getfield_num1(self): return self.__field_num1.getvalue() def __setfield_num1(self, value): if isinstance(value,UINT): self.__field_num1=value else: self.__field_num1=UINT(value,**{'sizeinbytes': 2}) def __delfield_num1(self): del self.__field_num1 num1=property(__getfield_num1, __setfield_num1, __delfield_num1, None) def __getfield_num2(self): return self.__field_num2.getvalue() def __setfield_num2(self, value): if isinstance(value,UINT): self.__field_num2=value else: self.__field_num2=UINT(value,**{'sizeinbytes': 2}) def __delfield_num2(self): del self.__field_num2 num2=property(__getfield_num2, __setfield_num2, __delfield_num2, None) def __getfield_nfiles(self): return self.__field_nfiles.getvalue() def __setfield_nfiles(self, value): if isinstance(value,UINT): self.__field_nfiles=value else: self.__field_nfiles=UINT(value,**{'sizeinbytes': 2}) def __delfield_nfiles(self): del self.__field_nfiles nfiles=property(__getfield_nfiles, __setfield_nfiles, __delfield_nfiles, None) def __getfield_num4(self): return self.__field_num4.getvalue() def __setfield_num4(self, value): if isinstance(value,UINT): self.__field_num4=value else: self.__field_num4=UINT(value,**{'sizeinbytes': 2}) def __delfield_num4(self): del self.__field_num4 num4=property(__getfield_num4, __setfield_num4, __delfield_num4, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) yield ('info', self.__field_info, None) yield ('info2', self.__field_info2, None) yield ('strings', self.__field_strings, None) yield ('num1', self.__field_num1, None) yield ('num2', self.__field_num2, None) yield ('nfiles', self.__field_nfiles, None) yield ('num4', self.__field_num4, None) class _gen_p_samsungspha620_134(BaseProtogenClass): 'Anonymous inner class' __fields=['zeros', 'sixtyfour'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_samsungspha620_134,self).__init__(**dict) if self.__class__ is _gen_p_samsungspha620_134: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_samsungspha620_134,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_samsungspha620_134,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_zeros.writetobuffer(buf) self.__field_sixtyfour.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_zeros=UINT(**{'sizeinbytes': 4}) self.__field_zeros.readfrombuffer(buf) self.__field_sixtyfour=UINT(**{'sizeinbytes': 2}) self.__field_sixtyfour.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_zeros(self): return self.__field_zeros.getvalue() def __setfield_zeros(self, value): if isinstance(value,UINT): self.__field_zeros=value else: self.__field_zeros=UINT(value,**{'sizeinbytes': 4}) def __delfield_zeros(self): del self.__field_zeros zeros=property(__getfield_zeros, __setfield_zeros, __delfield_zeros, None) def __getfield_sixtyfour(self): return self.__field_sixtyfour.getvalue() def __setfield_sixtyfour(self, value): if isinstance(value,UINT): self.__field_sixtyfour=value else: self.__field_sixtyfour=UINT(value,**{'sizeinbytes': 2}) def __delfield_sixtyfour(self): del self.__field_sixtyfour sixtyfour=property(__getfield_sixtyfour, __setfield_sixtyfour, __delfield_sixtyfour, None) def iscontainer(self): return True def containerelements(self): yield ('zeros', self.__field_zeros, None) yield ('sixtyfour', self.__field_sixtyfour, None) class _gen_p_samsungspha620_137(BaseProtogenClass): 'Anonymous inner class' __fields=['dir_ptr', 'num2', 'name_ptr', 'version_ptr', 'vendor_ptr', 'downloaddomain_ptr', 'num7', 'num8', 'num9', 'filetype', 'mimetype_ptr', 'num12', 'num13', 'num14', 'num15', 'num16', 'num17'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_samsungspha620_137,self).__init__(**dict) if self.__class__ is _gen_p_samsungspha620_137: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_samsungspha620_137,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_samsungspha620_137,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_dir_ptr.writetobuffer(buf) self.__field_num2.writetobuffer(buf) self.__field_name_ptr.writetobuffer(buf) self.__field_version_ptr.writetobuffer(buf) self.__field_vendor_ptr.writetobuffer(buf) self.__field_downloaddomain_ptr.writetobuffer(buf) self.__field_num7.writetobuffer(buf) self.__field_num8.writetobuffer(buf) self.__field_num9.writetobuffer(buf) self.__field_filetype.writetobuffer(buf) self.__field_mimetype_ptr.writetobuffer(buf) self.__field_num12.writetobuffer(buf) self.__field_num13.writetobuffer(buf) self.__field_num14.writetobuffer(buf) self.__field_num15.writetobuffer(buf) self.__field_num16.writetobuffer(buf) self.__field_num17.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_dir_ptr=UINT(**{'sizeinbytes': 2}) self.__field_dir_ptr.readfrombuffer(buf) self.__field_num2=UINT(**{'sizeinbytes': 2}) self.__field_num2.readfrombuffer(buf) self.__field_name_ptr=UINT(**{'sizeinbytes': 2}) self.__field_name_ptr.readfrombuffer(buf) self.__field_version_ptr=UINT(**{'sizeinbytes': 2}) self.__field_version_ptr.readfrombuffer(buf) self.__field_vendor_ptr=UINT(**{'sizeinbytes': 2}) self.__field_vendor_ptr.readfrombuffer(buf) self.__field_downloaddomain_ptr=UINT(**{'sizeinbytes': 2}) self.__field_downloaddomain_ptr.readfrombuffer(buf) self.__field_num7=UINT(**{'sizeinbytes': 2}) self.__field_num7.readfrombuffer(buf) self.__field_num8=UINT(**{'sizeinbytes': 2}) self.__field_num8.readfrombuffer(buf) self.__field_num9=UINT(**{'sizeinbytes': 4}) self.__field_num9.readfrombuffer(buf) self.__field_filetype=UINT(**{'sizeinbytes': 2}) self.__field_filetype.readfrombuffer(buf) self.__field_mimetype_ptr=UINT(**{'sizeinbytes': 2}) self.__field_mimetype_ptr.readfrombuffer(buf) self.__field_num12=UINT(**{'sizeinbytes': 2}) self.__field_num12.readfrombuffer(buf) self.__field_num13=UINT(**{'sizeinbytes': 2}) self.__field_num13.readfrombuffer(buf) self.__field_num14=UINT(**{'sizeinbytes': 2}) self.__field_num14.readfrombuffer(buf) self.__field_num15=UINT(**{'sizeinbytes': 2}) self.__field_num15.readfrombuffer(buf) self.__field_num16=UINT(**{'sizeinbytes': 2}) self.__field_num16.readfrombuffer(buf) self.__field_num17=UINT(**{'sizeinbytes': 2}) self.__field_num17.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_dir_ptr(self): return self.__field_dir_ptr.getvalue() def __setfield_dir_ptr(self, value): if isinstance(value,UINT): self.__field_dir_ptr=value else: self.__field_dir_ptr=UINT(value,**{'sizeinbytes': 2}) def __delfield_dir_ptr(self): del self.__field_dir_ptr dir_ptr=property(__getfield_dir_ptr, __setfield_dir_ptr, __delfield_dir_ptr, None) def __getfield_num2(self): return self.__field_num2.getvalue() def __setfield_num2(self, value): if isinstance(value,UINT): self.__field_num2=value else: self.__field_num2=UINT(value,**{'sizeinbytes': 2}) def __delfield_num2(self): del self.__field_num2 num2=property(__getfield_num2, __setfield_num2, __delfield_num2, None) def __getfield_name_ptr(self): return self.__field_name_ptr.getvalue() def __setfield_name_ptr(self, value): if isinstance(value,UINT): self.__field_name_ptr=value else: self.__field_name_ptr=UINT(value,**{'sizeinbytes': 2}) def __delfield_name_ptr(self): del self.__field_name_ptr name_ptr=property(__getfield_name_ptr, __setfield_name_ptr, __delfield_name_ptr, None) def __getfield_version_ptr(self): return self.__field_version_ptr.getvalue() def __setfield_version_ptr(self, value): if isinstance(value,UINT): self.__field_version_ptr=value else: self.__field_version_ptr=UINT(value,**{'sizeinbytes': 2}) def __delfield_version_ptr(self): del self.__field_version_ptr version_ptr=property(__getfield_version_ptr, __setfield_version_ptr, __delfield_version_ptr, None) def __getfield_vendor_ptr(self): return self.__field_vendor_ptr.getvalue() def __setfield_vendor_ptr(self, value): if isinstance(value,UINT): self.__field_vendor_ptr=value else: self.__field_vendor_ptr=UINT(value,**{'sizeinbytes': 2}) def __delfield_vendor_ptr(self): del self.__field_vendor_ptr vendor_ptr=property(__getfield_vendor_ptr, __setfield_vendor_ptr, __delfield_vendor_ptr, None) def __getfield_downloaddomain_ptr(self): return self.__field_downloaddomain_ptr.getvalue() def __setfield_downloaddomain_ptr(self, value): if isinstance(value,UINT): self.__field_downloaddomain_ptr=value else: self.__field_downloaddomain_ptr=UINT(value,**{'sizeinbytes': 2}) def __delfield_downloaddomain_ptr(self): del self.__field_downloaddomain_ptr downloaddomain_ptr=property(__getfield_downloaddomain_ptr, __setfield_downloaddomain_ptr, __delfield_downloaddomain_ptr, None) def __getfield_num7(self): return self.__field_num7.getvalue() def __setfield_num7(self, value): if isinstance(value,UINT): self.__field_num7=value else: self.__field_num7=UINT(value,**{'sizeinbytes': 2}) def __delfield_num7(self): del self.__field_num7 num7=property(__getfield_num7, __setfield_num7, __delfield_num7, None) def __getfield_num8(self): return self.__field_num8.getvalue() def __setfield_num8(self, value): if isinstance(value,UINT): self.__field_num8=value else: self.__field_num8=UINT(value,**{'sizeinbytes': 2}) def __delfield_num8(self): del self.__field_num8 num8=property(__getfield_num8, __setfield_num8, __delfield_num8, None) def __getfield_num9(self): return self.__field_num9.getvalue() def __setfield_num9(self, value): if isinstance(value,UINT): self.__field_num9=value else: self.__field_num9=UINT(value,**{'sizeinbytes': 4}) def __delfield_num9(self): del self.__field_num9 num9=property(__getfield_num9, __setfield_num9, __delfield_num9, None) def __getfield_filetype(self): return self.__field_filetype.getvalue() def __setfield_filetype(self, value): if isinstance(value,UINT): self.__field_filetype=value else: self.__field_filetype=UINT(value,**{'sizeinbytes': 2}) def __delfield_filetype(self): del self.__field_filetype filetype=property(__getfield_filetype, __setfield_filetype, __delfield_filetype, "12: Ringer, 13 Screen Saver, 15 Apps") def __getfield_mimetype_ptr(self): return self.__field_mimetype_ptr.getvalue() def __setfield_mimetype_ptr(self, value): if isinstance(value,UINT): self.__field_mimetype_ptr=value else: self.__field_mimetype_ptr=UINT(value,**{'sizeinbytes': 2}) def __delfield_mimetype_ptr(self): del self.__field_mimetype_ptr mimetype_ptr=property(__getfield_mimetype_ptr, __setfield_mimetype_ptr, __delfield_mimetype_ptr, None) def __getfield_num12(self): return self.__field_num12.getvalue() def __setfield_num12(self, value): if isinstance(value,UINT): self.__field_num12=value else: self.__field_num12=UINT(value,**{'sizeinbytes': 2}) def __delfield_num12(self): del self.__field_num12 num12=property(__getfield_num12, __setfield_num12, __delfield_num12, None) def __getfield_num13(self): return self.__field_num13.getvalue() def __setfield_num13(self, value): if isinstance(value,UINT): self.__field_num13=value else: self.__field_num13=UINT(value,**{'sizeinbytes': 2}) def __delfield_num13(self): del self.__field_num13 num13=property(__getfield_num13, __setfield_num13, __delfield_num13, None) def __getfield_num14(self): return self.__field_num14.getvalue() def __setfield_num14(self, value): if isinstance(value,UINT): self.__field_num14=value else: self.__field_num14=UINT(value,**{'sizeinbytes': 2}) def __delfield_num14(self): del self.__field_num14 num14=property(__getfield_num14, __setfield_num14, __delfield_num14, None) def __getfield_num15(self): return self.__field_num15.getvalue() def __setfield_num15(self, value): if isinstance(value,UINT): self.__field_num15=value else: self.__field_num15=UINT(value,**{'sizeinbytes': 2}) def __delfield_num15(self): del self.__field_num15 num15=property(__getfield_num15, __setfield_num15, __delfield_num15, None) def __getfield_num16(self): return self.__field_num16.getvalue() def __setfield_num16(self, value): if isinstance(value,UINT): self.__field_num16=value else: self.__field_num16=UINT(value,**{'sizeinbytes': 2}) def __delfield_num16(self): del self.__field_num16 num16=property(__getfield_num16, __setfield_num16, __delfield_num16, None) def __getfield_num17(self): return self.__field_num17.getvalue() def __setfield_num17(self, value): if isinstance(value,UINT): self.__field_num17=value else: self.__field_num17=UINT(value,**{'sizeinbytes': 2}) def __delfield_num17(self): del self.__field_num17 num17=property(__getfield_num17, __setfield_num17, __delfield_num17, None) def iscontainer(self): return True def containerelements(self): yield ('dir_ptr', self.__field_dir_ptr, None) yield ('num2', self.__field_num2, None) yield ('name_ptr', self.__field_name_ptr, None) yield ('version_ptr', self.__field_version_ptr, None) yield ('vendor_ptr', self.__field_vendor_ptr, None) yield ('downloaddomain_ptr', self.__field_downloaddomain_ptr, None) yield ('num7', self.__field_num7, None) yield ('num8', self.__field_num8, None) yield ('num9', self.__field_num9, None) yield ('filetype', self.__field_filetype, "12: Ringer, 13 Screen Saver, 15 Apps") yield ('mimetype_ptr', self.__field_mimetype_ptr, None) yield ('num12', self.__field_num12, None) yield ('num13', self.__field_num13, None) yield ('num14', self.__field_num14, None) yield ('num15', self.__field_num15, None) yield ('num16', self.__field_num16, None) yield ('num17', self.__field_num17, None) class _gen_p_samsungspha620_155(BaseProtogenClass): 'Anonymous inner class' __fields=['val1', 'val2', 'val3', 'val4', 'val5', 'val6', 'val7', 'val8', 'val9', 'val10'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_samsungspha620_155,self).__init__(**dict) if self.__class__ is _gen_p_samsungspha620_155: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_samsungspha620_155,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_samsungspha620_155,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_val1.writetobuffer(buf) self.__field_val2.writetobuffer(buf) self.__field_val3.writetobuffer(buf) self.__field_val4.writetobuffer(buf) self.__field_val5.writetobuffer(buf) self.__field_val6.writetobuffer(buf) self.__field_val7.writetobuffer(buf) self.__field_val8.writetobuffer(buf) self.__field_val9.writetobuffer(buf) self.__field_val10.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_val1=UINT(**{'sizeinbytes': 2}) self.__field_val1.readfrombuffer(buf) self.__field_val2=UINT(**{'sizeinbytes': 2}) self.__field_val2.readfrombuffer(buf) self.__field_val3=UINT(**{'sizeinbytes': 2}) self.__field_val3.readfrombuffer(buf) self.__field_val4=UINT(**{'sizeinbytes': 2}) self.__field_val4.readfrombuffer(buf) self.__field_val5=UINT(**{'sizeinbytes': 2}) self.__field_val5.readfrombuffer(buf) self.__field_val6=UINT(**{'sizeinbytes': 2}) self.__field_val6.readfrombuffer(buf) self.__field_val7=UINT(**{'sizeinbytes': 2}) self.__field_val7.readfrombuffer(buf) self.__field_val8=UINT(**{'sizeinbytes': 2}) self.__field_val8.readfrombuffer(buf) self.__field_val9=UINT(**{'sizeinbytes': 2}) self.__field_val9.readfrombuffer(buf) self.__field_val10=UINT(**{'sizeinbytes': 2}) self.__field_val10.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_val1(self): return self.__field_val1.getvalue() def __setfield_val1(self, value): if isinstance(value,UINT): self.__field_val1=value else: self.__field_val1=UINT(value,**{'sizeinbytes': 2}) def __delfield_val1(self): del self.__field_val1 val1=property(__getfield_val1, __setfield_val1, __delfield_val1, None) def __getfield_val2(self): return self.__field_val2.getvalue() def __setfield_val2(self, value): if isinstance(value,UINT): self.__field_val2=value else: self.__field_val2=UINT(value,**{'sizeinbytes': 2}) def __delfield_val2(self): del self.__field_val2 val2=property(__getfield_val2, __setfield_val2, __delfield_val2, None) def __getfield_val3(self): return self.__field_val3.getvalue() def __setfield_val3(self, value): if isinstance(value,UINT): self.__field_val3=value else: self.__field_val3=UINT(value,**{'sizeinbytes': 2}) def __delfield_val3(self): del self.__field_val3 val3=property(__getfield_val3, __setfield_val3, __delfield_val3, None) def __getfield_val4(self): return self.__field_val4.getvalue() def __setfield_val4(self, value): if isinstance(value,UINT): self.__field_val4=value else: self.__field_val4=UINT(value,**{'sizeinbytes': 2}) def __delfield_val4(self): del self.__field_val4 val4=property(__getfield_val4, __setfield_val4, __delfield_val4, None) def __getfield_val5(self): return self.__field_val5.getvalue() def __setfield_val5(self, value): if isinstance(value,UINT): self.__field_val5=value else: self.__field_val5=UINT(value,**{'sizeinbytes': 2}) def __delfield_val5(self): del self.__field_val5 val5=property(__getfield_val5, __setfield_val5, __delfield_val5, None) def __getfield_val6(self): return self.__field_val6.getvalue() def __setfield_val6(self, value): if isinstance(value,UINT): self.__field_val6=value else: self.__field_val6=UINT(value,**{'sizeinbytes': 2}) def __delfield_val6(self): del self.__field_val6 val6=property(__getfield_val6, __setfield_val6, __delfield_val6, None) def __getfield_val7(self): return self.__field_val7.getvalue() def __setfield_val7(self, value): if isinstance(value,UINT): self.__field_val7=value else: self.__field_val7=UINT(value,**{'sizeinbytes': 2}) def __delfield_val7(self): del self.__field_val7 val7=property(__getfield_val7, __setfield_val7, __delfield_val7, None) def __getfield_val8(self): return self.__field_val8.getvalue() def __setfield_val8(self, value): if isinstance(value,UINT): self.__field_val8=value else: self.__field_val8=UINT(value,**{'sizeinbytes': 2}) def __delfield_val8(self): del self.__field_val8 val8=property(__getfield_val8, __setfield_val8, __delfield_val8, None) def __getfield_val9(self): return self.__field_val9.getvalue() def __setfield_val9(self, value): if isinstance(value,UINT): self.__field_val9=value else: self.__field_val9=UINT(value,**{'sizeinbytes': 2}) def __delfield_val9(self): del self.__field_val9 val9=property(__getfield_val9, __setfield_val9, __delfield_val9, None) def __getfield_val10(self): return self.__field_val10.getvalue() def __setfield_val10(self, value): if isinstance(value,UINT): self.__field_val10=value else: self.__field_val10=UINT(value,**{'sizeinbytes': 2}) def __delfield_val10(self): del self.__field_val10 val10=property(__getfield_val10, __setfield_val10, __delfield_val10, None) def iscontainer(self): return True def containerelements(self): yield ('val1', self.__field_val1, None) yield ('val2', self.__field_val2, None) yield ('val3', self.__field_val3, None) yield ('val4', self.__field_val4, None) yield ('val5', self.__field_val5, None) yield ('val6', self.__field_val6, None) yield ('val7', self.__field_val7, None) yield ('val8', self.__field_val8, None) yield ('val9', self.__field_val9, None) yield ('val10', self.__field_val10, None) bitpim-1.0.7+dfsg1/src/phones/p_samsungspha640.py0000644001616600161660000004611711012454574017722 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Proposed descriptions of data usign AT commands""" from prototypes import * from p_samsung_packet import * from p_samsungspha620 import * # We use LSB for all integer like fields in diagnostic mode UINT=UINTlsb BOOL=BOOLlsb # NUMPHONEBOOKENTRIES=300 NUMEMAILS=3 NUMPHONENUMBERS=6 MAXNUMBERLEN=72 NUMTODOENTRIES=9 NUMSMSENTRIES=94 NUMCALENDAREVENTS=70 NUMGROUPS=4 AMSREGISTRY="ams/AmsRegistry" ENDTRANSACTION="ams/EndTransaction" RINGERPREFIX="ams/Ringers/cnts" WALLPAPERPREFIX="ams/Screen Savers/cnts" class pbentry(BaseProtogenClass): __fields=['url', 'birthday', 'slot', 'uslot', 'group', 'ringtone', 'name', 'speeddial', 'dunno1', 'numbers', 'dunno3', 'dunno4', 'email', 'timestamp'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_url except: self.__field_url=USTRING(**{'default': ""}) try: self.__field_birthday except: self.__field_birthday=CSVDATE(**{'default': ""}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_uslot.writetobuffer(buf) self.__field_group.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=CSVINT(**{'default': 20}) self.__field_ringtone.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_speeddial.writetobuffer(buf) try: self.__field_dunno1 except: self.__field_dunno1=CSVINT(**{'default': 0}) self.__field_dunno1.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'length': NUMPHONENUMBERS, 'createdefault': True, 'elementclass': phonenumber}) self.__field_numbers.writetobuffer(buf) try: self.__field_dunno3 except: self.__field_dunno3=CSVSTRING(**{'quotechar': None, 'default': ""}) self.__field_dunno3.writetobuffer(buf) try: self.__field_dunno4 except: self.__field_dunno4=CSVSTRING(**{'quotechar': None, 'default': ""}) self.__field_dunno4.writetobuffer(buf) self.__field_email.writetobuffer(buf) try: self.__field_timestamp except: self.__field_timestamp=CSVTIME(**{'terminator': None, 'default': (1980,1,1,12,0,0)}) self.__field_timestamp.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=CSVINT() self.__field_slot.readfrombuffer(buf) self.__field_uslot=CSVINT() self.__field_uslot.readfrombuffer(buf) self.__field_group=CSVINT() self.__field_group.readfrombuffer(buf) self.__field_ringtone=CSVINT(**{'default': 20}) self.__field_ringtone.readfrombuffer(buf) self.__field_name=CSVSTRING() self.__field_name.readfrombuffer(buf) self.__field_speeddial=CSVINT() self.__field_speeddial.readfrombuffer(buf) self.__field_dunno1=CSVINT(**{'default': 0}) self.__field_dunno1.readfrombuffer(buf) self.__field_numbers=LIST(**{'length': NUMPHONENUMBERS, 'createdefault': True, 'elementclass': phonenumber}) self.__field_numbers.readfrombuffer(buf) self.__field_dunno3=CSVSTRING(**{'quotechar': None, 'default': ""}) self.__field_dunno3.readfrombuffer(buf) self.__field_dunno4=CSVSTRING(**{'quotechar': None, 'default': ""}) self.__field_dunno4.readfrombuffer(buf) self.__field_email=CSVSTRING() self.__field_email.readfrombuffer(buf) self.__field_timestamp=CSVTIME(**{'terminator': None, 'default': (1980,1,1,12,0,0)}) self.__field_timestamp.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_url(self): try: self.__field_url except: self.__field_url=USTRING(**{'default': ""}) return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,USTRING): self.__field_url=value else: self.__field_url=USTRING(value,**{'default': ""}) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_birthday(self): try: self.__field_birthday except: self.__field_birthday=CSVDATE(**{'default': ""}) return self.__field_birthday.getvalue() def __setfield_birthday(self, value): if isinstance(value,CSVDATE): self.__field_birthday=value else: self.__field_birthday=CSVDATE(value,**{'default': ""}) def __delfield_birthday(self): del self.__field_birthday birthday=property(__getfield_birthday, __setfield_birthday, __delfield_birthday, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,CSVINT): self.__field_slot=value else: self.__field_slot=CSVINT(value,) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, "Internal Slot") def __getfield_uslot(self): return self.__field_uslot.getvalue() def __setfield_uslot(self, value): if isinstance(value,CSVINT): self.__field_uslot=value else: self.__field_uslot=CSVINT(value,) def __delfield_uslot(self): del self.__field_uslot uslot=property(__getfield_uslot, __setfield_uslot, __delfield_uslot, "User Slot, Speed dial") def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,CSVINT): self.__field_group=value else: self.__field_group=CSVINT(value,) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=CSVINT(**{'default': 20}) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,CSVINT): self.__field_ringtone=value else: self.__field_ringtone=CSVINT(value,**{'default': 20}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,CSVSTRING): self.__field_name=value else: self.__field_name=CSVSTRING(value,) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_speeddial(self): return self.__field_speeddial.getvalue() def __setfield_speeddial(self, value): if isinstance(value,CSVINT): self.__field_speeddial=value else: self.__field_speeddial=CSVINT(value,) def __delfield_speeddial(self): del self.__field_speeddial speeddial=property(__getfield_speeddial, __setfield_speeddial, __delfield_speeddial, "Which phone number assigned to speed dial uslot") def __getfield_dunno1(self): try: self.__field_dunno1 except: self.__field_dunno1=CSVINT(**{'default': 0}) return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,CSVINT): self.__field_dunno1=value else: self.__field_dunno1=CSVINT(value,**{'default': 0}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'length': NUMPHONENUMBERS, 'createdefault': True, 'elementclass': phonenumber}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'length': NUMPHONENUMBERS, 'createdefault': True, 'elementclass': phonenumber}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_dunno3(self): try: self.__field_dunno3 except: self.__field_dunno3=CSVSTRING(**{'quotechar': None, 'default': ""}) return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,CSVSTRING): self.__field_dunno3=value else: self.__field_dunno3=CSVSTRING(value,**{'quotechar': None, 'default': ""}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_dunno4(self): try: self.__field_dunno4 except: self.__field_dunno4=CSVSTRING(**{'quotechar': None, 'default': ""}) return self.__field_dunno4.getvalue() def __setfield_dunno4(self, value): if isinstance(value,CSVSTRING): self.__field_dunno4=value else: self.__field_dunno4=CSVSTRING(value,**{'quotechar': None, 'default': ""}) def __delfield_dunno4(self): del self.__field_dunno4 dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None) def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,CSVSTRING): self.__field_email=value else: self.__field_email=CSVSTRING(value,) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def __getfield_timestamp(self): try: self.__field_timestamp except: self.__field_timestamp=CSVTIME(**{'terminator': None, 'default': (1980,1,1,12,0,0)}) return self.__field_timestamp.getvalue() def __setfield_timestamp(self, value): if isinstance(value,CSVTIME): self.__field_timestamp=value else: self.__field_timestamp=CSVTIME(value,**{'terminator': None, 'default': (1980,1,1,12,0,0)}) def __delfield_timestamp(self): del self.__field_timestamp timestamp=property(__getfield_timestamp, __setfield_timestamp, __delfield_timestamp, "Use terminator None for last item") def iscontainer(self): return True def containerelements(self): yield ('url', self.__field_url, None) yield ('birthday', self.__field_birthday, None) yield ('slot', self.__field_slot, "Internal Slot") yield ('uslot', self.__field_uslot, "User Slot, Speed dial") yield ('group', self.__field_group, None) yield ('ringtone', self.__field_ringtone, None) yield ('name', self.__field_name, None) yield ('speeddial', self.__field_speeddial, "Which phone number assigned to speed dial uslot") yield ('dunno1', self.__field_dunno1, None) yield ('numbers', self.__field_numbers, None) yield ('dunno3', self.__field_dunno3, None) yield ('dunno4', self.__field_dunno4, None) yield ('email', self.__field_email, None) yield ('timestamp', self.__field_timestamp, "Use terminator None for last item") class phonebookslotresponse(BaseProtogenClass): __fields=['command', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebookslotresponse,self).__init__(**dict) if self.__class__ is phonebookslotresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebookslotresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebookslotresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '#PBOKR:'}) self.__field_command.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '#PBOKR:'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('entry', self.__field_entry, None) class phonebookslotupdaterequest(BaseProtogenClass): __fields=['command', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebookslotupdaterequest,self).__init__(**dict) if self.__class__ is phonebookslotupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebookslotupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebookslotupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'}) self.__field_command.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'}) self.__field_command.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('entry', self.__field_entry, None) bitpim-1.0.7+dfsg1/src/phones/p_samsungspha660.py0000644001616600161660000000071110370305764017714 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Proposed descriptions of data usign AT commands""" from prototypes import * from p_samsung_packet import * from p_samsungspha620 import * # We use LSB for all integer like fields in diagnostic mode UINT=UINTlsb BOOL=BOOLlsb # NUMPHONEBOOKENTRIES=300 NUMEMAILS=3 NUMPHONENUMBERS=6 MAXNUMBERLEN=32 NUMTODOENTRIES=9 NUMSMSENTRIES=94 NUMGROUPS=4 AMSREGISTRY="ams/AmsRegistry" bitpim-1.0.7+dfsg1/src/phones/p_samsungspha680.py0000644001616600161660000000076110454042735017722 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Proposed descriptions of data usign AT commands""" from prototypes import * from p_samsung_packet import * from p_samsungspha620 import * # We use LSB for all integer like fields in diagnostic mode UINT=UINTlsb BOOL=BOOLlsb # NUMPHONEBOOKENTRIES=300 NUMEMAILS=3 NUMPHONENUMBERS=6 MAXNUMBERLEN=32 NUMTODOENTRIES=9 NUMSMSENTRIES=94 NUMGROUPS=4 AMSREGISTRY="ams/AmsRegistry" DEFAULT_RINGTONE=0 DEFAULT_WALLPAPER=0 bitpim-1.0.7+dfsg1/src/phones/p_sanyo5600.py0000644001616600161660000035202110535762440016600 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Sanyo MM-5600""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 # Need to check. Is max phone will hold 32/96 or 33/97 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 HASRINGPICBUF=1 class qcpheader(BaseProtogenClass): __fields=['readwrite', 'command', 'packettype'] def __init__(self, *args, **kwargs): dict={} # User specified arguments in the packet description dict.update({'readwrite': 0x26}) # What was supplied to this function dict.update(kwargs) # Parent constructor super(qcpheader,self).__init__(**dict) if self.__class__ is qcpheader: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(qcpheader,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(qcpheader,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_readwrite.writetobuffer(buf) self.__field_command.writetobuffer(buf) self.__field_packettype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_readwrite=UINT(**{'sizeinbytes': 1}) self.__field_readwrite.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_packettype=UINT(**{'sizeinbytes': 1}) self.__field_packettype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_readwrite(self): return self.__field_readwrite.getvalue() def __setfield_readwrite(self, value): if isinstance(value,UINT): self.__field_readwrite=value else: self.__field_readwrite=UINT(value,**{'sizeinbytes': 1}) def __delfield_readwrite(self): del self.__field_readwrite readwrite=property(__getfield_readwrite, __setfield_readwrite, __delfield_readwrite, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_packettype(self): return self.__field_packettype.getvalue() def __setfield_packettype(self, value): if isinstance(value,UINT): self.__field_packettype=value else: self.__field_packettype=UINT(value,**{'sizeinbytes': 1}) def __delfield_packettype(self): del self.__field_packettype packettype=property(__getfield_packettype, __setfield_packettype, __delfield_packettype, None) def iscontainer(self): return True def containerelements(self): yield ('readwrite', self.__field_readwrite, None) yield ('command', self.__field_command, None) yield ('packettype', self.__field_packettype, None) class qcpwriteheader(BaseProtogenClass): __fields=['readwrite', 'command', 'packettype'] def __init__(self, *args, **kwargs): dict={} # User specified arguments in the packet description dict.update({'readwrite': 0x27}) # What was supplied to this function dict.update(kwargs) # Parent constructor super(qcpwriteheader,self).__init__(**dict) if self.__class__ is qcpwriteheader: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(qcpwriteheader,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(qcpwriteheader,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_readwrite.writetobuffer(buf) self.__field_command.writetobuffer(buf) self.__field_packettype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_readwrite=UINT(**{'sizeinbytes': 1}) self.__field_readwrite.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_packettype=UINT(**{'sizeinbytes': 1}) self.__field_packettype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_readwrite(self): return self.__field_readwrite.getvalue() def __setfield_readwrite(self, value): if isinstance(value,UINT): self.__field_readwrite=value else: self.__field_readwrite=UINT(value,**{'sizeinbytes': 1}) def __delfield_readwrite(self): del self.__field_readwrite readwrite=property(__getfield_readwrite, __setfield_readwrite, __delfield_readwrite, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_packettype(self): return self.__field_packettype.getvalue() def __setfield_packettype(self, value): if isinstance(value,UINT): self.__field_packettype=value else: self.__field_packettype=UINT(value,**{'sizeinbytes': 1}) def __delfield_packettype(self): del self.__field_packettype packettype=property(__getfield_packettype, __setfield_packettype, __delfield_packettype, None) def iscontainer(self): return True def containerelements(self): yield ('readwrite', self.__field_readwrite, None) yield ('command', self.__field_command, None) yield ('packettype', self.__field_packettype, None) class eventrequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventrequest,self).__init__(**dict) if self.__class__ is eventrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x23}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x23}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x23}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,**{'packettype': 0x0c, 'command': 0x23}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 129}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class eventslotinuserequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventslotinuserequest,self).__init__(**dict) if self.__class__ is eventslotinuserequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventslotinuserequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventslotinuserequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpheader(**{'readwrite': 0x26, 'packettype': 0x0d, 'command': 0x74}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader(**{'readwrite': 0x26, 'packettype': 0x0d, 'command': 0x74}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpheader(**{'readwrite': 0x26, 'packettype': 0x0d, 'command': 0x74}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,**{'readwrite': 0x26, 'packettype': 0x0d, 'command': 0x74}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 129}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class evententry(BaseProtogenClass): __fields=['slot', 'eventname', 'pad1', 'eventname_len', 'start', 'end', 'location', 'pad2', 'location_len', 'alarmdiff', 'period', 'dom', 'alarm', 'pad3', 'serial', 'pad4', 'ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(evententry,self).__init__(**dict) if self.__class__ is evententry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(evententry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(evententry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_eventname.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.writetobuffer(buf) self.__field_eventname_len.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_location.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad2.writetobuffer(buf) self.__field_location_len.writetobuffer(buf) self.__field_alarmdiff.writetobuffer(buf) self.__field_period.writetobuffer(buf) self.__field_dom.writetobuffer(buf) self.__field_alarm.writetobuffer(buf) try: self.__field_pad3 except: self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad3.writetobuffer(buf) try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.writetobuffer(buf) try: self.__field_pad4 except: self.__field_pad4=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad4.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_eventname=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_eventname.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.readfrombuffer(buf) self.__field_eventname_len=UINT(**{'sizeinbytes': 1}) self.__field_eventname_len.readfrombuffer(buf) self.__field_start=UINT(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=UINT(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_location=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_location.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad2.readfrombuffer(buf) self.__field_location_len=UINT(**{'sizeinbytes': 1}) self.__field_location_len.readfrombuffer(buf) self.__field_alarmdiff=UINT(**{'sizeinbytes': 4}) self.__field_alarmdiff.readfrombuffer(buf) self.__field_period=UINT(**{'sizeinbytes': 1}) self.__field_period.readfrombuffer(buf) self.__field_dom=UINT(**{'sizeinbytes': 1}) self.__field_dom.readfrombuffer(buf) self.__field_alarm=UINT(**{'sizeinbytes': 4}) self.__field_alarm.readfrombuffer(buf) self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad3.readfrombuffer(buf) self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.readfrombuffer(buf) self.__field_pad4=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad4.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 2}) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_eventname(self): return self.__field_eventname.getvalue() def __setfield_eventname(self, value): if isinstance(value,USTRING): self.__field_eventname=value else: self.__field_eventname=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_eventname(self): del self.__field_eventname eventname=property(__getfield_eventname, __setfield_eventname, __delfield_eventname, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_eventname_len(self): return self.__field_eventname_len.getvalue() def __setfield_eventname_len(self, value): if isinstance(value,UINT): self.__field_eventname_len=value else: self.__field_eventname_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_eventname_len(self): del self.__field_eventname_len eventname_len=property(__getfield_eventname_len, __setfield_eventname_len, __delfield_eventname_len, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,UINT): self.__field_start=value else: self.__field_start=UINT(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, "# seconds since Jan 1, 1980 approximately") def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,UINT): self.__field_end=value else: self.__field_end=UINT(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_location(self): return self.__field_location.getvalue() def __setfield_location(self, value): if isinstance(value,USTRING): self.__field_location=value else: self.__field_location=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_location(self): del self.__field_location location=property(__getfield_location, __setfield_location, __delfield_location, None) def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_location_len(self): return self.__field_location_len.getvalue() def __setfield_location_len(self, value): if isinstance(value,UINT): self.__field_location_len=value else: self.__field_location_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_location_len(self): del self.__field_location_len location_len=property(__getfield_location_len, __setfield_location_len, __delfield_location_len, None) def __getfield_alarmdiff(self): return self.__field_alarmdiff.getvalue() def __setfield_alarmdiff(self, value): if isinstance(value,UINT): self.__field_alarmdiff=value else: self.__field_alarmdiff=UINT(value,**{'sizeinbytes': 4}) def __delfield_alarmdiff(self): del self.__field_alarmdiff alarmdiff=property(__getfield_alarmdiff, __setfield_alarmdiff, __delfield_alarmdiff, "Displayed alarm time") def __getfield_period(self): return self.__field_period.getvalue() def __setfield_period(self, value): if isinstance(value,UINT): self.__field_period=value else: self.__field_period=UINT(value,**{'sizeinbytes': 1}) def __delfield_period(self): del self.__field_period period=property(__getfield_period, __setfield_period, __delfield_period, "No, Daily, Weekly, Monthly, Yearly") def __getfield_dom(self): return self.__field_dom.getvalue() def __setfield_dom(self, value): if isinstance(value,UINT): self.__field_dom=value else: self.__field_dom=UINT(value,**{'sizeinbytes': 1}) def __delfield_dom(self): del self.__field_dom dom=property(__getfield_dom, __setfield_dom, __delfield_dom, "Day of month for the event") def __getfield_alarm(self): return self.__field_alarm.getvalue() def __setfield_alarm(self, value): if isinstance(value,UINT): self.__field_alarm=value else: self.__field_alarm=UINT(value,**{'sizeinbytes': 4}) def __delfield_alarm(self): del self.__field_alarm alarm=property(__getfield_alarm, __setfield_alarm, __delfield_alarm, None) def __getfield_pad3(self): try: self.__field_pad3 except: self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad3.getvalue() def __setfield_pad3(self, value): if isinstance(value,UNKNOWN): self.__field_pad3=value else: self.__field_pad3=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad3(self): del self.__field_pad3 pad3=property(__getfield_pad3, __setfield_pad3, __delfield_pad3, None) def __getfield_serial(self): try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_serial.getvalue() def __setfield_serial(self, value): if isinstance(value,UINT): self.__field_serial=value else: self.__field_serial=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_serial(self): del self.__field_serial serial=property(__getfield_serial, __setfield_serial, __delfield_serial, "Some kind of serial number") def __getfield_pad4(self): try: self.__field_pad4 except: self.__field_pad4=UNKNOWN(**{'sizeinbytes': 3}) return self.__field_pad4.getvalue() def __setfield_pad4(self, value): if isinstance(value,UNKNOWN): self.__field_pad4=value else: self.__field_pad4=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_pad4(self): del self.__field_pad4 pad4=property(__getfield_pad4, __setfield_pad4, __delfield_pad4, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 2}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('eventname', self.__field_eventname, None) yield ('pad1', self.__field_pad1, None) yield ('eventname_len', self.__field_eventname_len, None) yield ('start', self.__field_start, "# seconds since Jan 1, 1980 approximately") yield ('end', self.__field_end, None) yield ('location', self.__field_location, None) yield ('pad2', self.__field_pad2, None) yield ('location_len', self.__field_location_len, None) yield ('alarmdiff', self.__field_alarmdiff, "Displayed alarm time") yield ('period', self.__field_period, "No, Daily, Weekly, Monthly, Yearly") yield ('dom', self.__field_dom, "Day of month for the event") yield ('alarm', self.__field_alarm, None) yield ('pad3', self.__field_pad3, None) yield ('serial', self.__field_serial, "Some kind of serial number") yield ('pad4', self.__field_pad4, None) yield ('ringtone', self.__field_ringtone, None) class eventresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventresponse,self).__init__(**dict) if self.__class__ is eventresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader() self.__field_header.readfrombuffer(buf) self.__field_entry=evententry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,evententry): self.__field_entry=value else: self.__field_entry=evententry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class eventslotinuseresponse(BaseProtogenClass): __fields=['header', 'slot', 'flag', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventslotinuseresponse,self).__init__(**dict) if self.__class__ is eventslotinuseresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventslotinuseresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventslotinuseresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader() self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, None) yield ('pad', self.__field_pad, None) class eventslotinuseupdaterequest(BaseProtogenClass): __fields=['header', 'slot', 'flag', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventslotinuseupdaterequest,self).__init__(**dict) if self.__class__ is eventslotinuseupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventslotinuseupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventslotinuseupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0d, 'command': 0x74}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 124}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpwriteheader(**{'packettype': 0x0d, 'command': 0x74}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 124}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0d, 'command': 0x74}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpwriteheader): self.__field_header=value else: self.__field_header=qcpwriteheader(value,**{'packettype': 0x0d, 'command': 0x74}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 124}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 124}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, None) yield ('pad', self.__field_pad, None) class eventupdaterequest(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventupdaterequest,self).__init__(**dict) if self.__class__ is eventupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x23}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 56}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x23}) self.__field_header.readfrombuffer(buf) self.__field_entry=evententry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 56}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x23}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpwriteheader): self.__field_header=value else: self.__field_header=qcpwriteheader(value,**{'packettype': 0x0c, 'command':0x23}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,evententry): self.__field_entry=value else: self.__field_entry=evententry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 56}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 56}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class callalarmrequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmrequest,self).__init__(**dict) if self.__class__ is callalarmrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x24}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x24}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x24}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,**{'packettype': 0x0c, 'command': 0x24}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 129}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class callalarmresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmresponse,self).__init__(**dict) if self.__class__ is callalarmresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader() self.__field_header.readfrombuffer(buf) self.__field_entry=callalarmentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,callalarmentry): self.__field_entry=value else: self.__field_entry=callalarmentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class callalarmupdaterequest(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmupdaterequest,self).__init__(**dict) if self.__class__ is callalarmupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x24}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 40}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x24}) self.__field_header.readfrombuffer(buf) self.__field_entry=callalarmentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 40}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x24}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpwriteheader): self.__field_header=value else: self.__field_header=qcpwriteheader(value,**{'packettype': 0x0c, 'command':0x24}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,callalarmentry): self.__field_entry=value else: self.__field_entry=callalarmentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 40}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 40}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class callalarmslotinuserequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmslotinuserequest,self).__init__(**dict) if self.__class__ is callalarmslotinuserequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmslotinuserequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmslotinuserequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0d, 'command': 0x76}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader(**{'packettype': 0x0d, 'command': 0x76}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0d, 'command': 0x76}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,**{'packettype': 0x0d, 'command': 0x76}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 129}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class callalarmslotinuseresponse(BaseProtogenClass): __fields=['header', 'slot', 'flag', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmslotinuseresponse,self).__init__(**dict) if self.__class__ is callalarmslotinuseresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmslotinuseresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmslotinuseresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader() self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, None) yield ('pad', self.__field_pad, None) class callalarmentry(BaseProtogenClass): __fields=['slot', 'pad0', 'phonenum', 'phonenum_len', 'date', 'period', 'dom', 'datedup', 'name', 'pad1', 'name_len', 'phonenumbertype', 'phonenumberslot', 'pad2', 'serial', 'pad3', 'ringtone', 'pad4', 'flag'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmentry,self).__init__(**dict) if self.__class__ is callalarmentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) try: self.__field_pad0 except: self.__field_pad0=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad0.writetobuffer(buf) self.__field_phonenum.writetobuffer(buf) self.__field_phonenum_len.writetobuffer(buf) self.__field_date.writetobuffer(buf) self.__field_period.writetobuffer(buf) self.__field_dom.writetobuffer(buf) self.__field_datedup.writetobuffer(buf) self.__field_name.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.writetobuffer(buf) self.__field_name_len.writetobuffer(buf) self.__field_phonenumbertype.writetobuffer(buf) self.__field_phonenumberslot.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad2.writetobuffer(buf) try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.writetobuffer(buf) try: self.__field_pad3 except: self.__field_pad3=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad3.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 1, 'default': 0xfc}) self.__field_ringtone.writetobuffer(buf) try: self.__field_pad4 except: self.__field_pad4=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad4.writetobuffer(buf) try: self.__field_flag except: self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad0=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad0.readfrombuffer(buf) self.__field_phonenum=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_phonenum.readfrombuffer(buf) self.__field_phonenum_len=UINT(**{'sizeinbytes': 1}) self.__field_phonenum_len.readfrombuffer(buf) self.__field_date=UINT(**{'sizeinbytes': 4}) self.__field_date.readfrombuffer(buf) self.__field_period=UINT(**{'sizeinbytes': 1}) self.__field_period.readfrombuffer(buf) self.__field_dom=UINT(**{'sizeinbytes': 1}) self.__field_dom.readfrombuffer(buf) self.__field_datedup=UINT(**{'sizeinbytes': 4}) self.__field_datedup.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_name.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.readfrombuffer(buf) self.__field_name_len=UINT(**{'sizeinbytes': 1}) self.__field_name_len.readfrombuffer(buf) self.__field_phonenumbertype=UINT(**{'sizeinbytes': 1}) self.__field_phonenumbertype.readfrombuffer(buf) self.__field_phonenumberslot=UINT(**{'sizeinbytes': 2}) self.__field_phonenumberslot.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad2.readfrombuffer(buf) self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.readfrombuffer(buf) self.__field_pad3=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad3.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1, 'default': 0xfc}) self.__field_ringtone.readfrombuffer(buf) self.__field_pad4=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad4.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad0(self): try: self.__field_pad0 except: self.__field_pad0=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad0.getvalue() def __setfield_pad0(self, value): if isinstance(value,UNKNOWN): self.__field_pad0=value else: self.__field_pad0=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad0(self): del self.__field_pad0 pad0=property(__getfield_pad0, __setfield_pad0, __delfield_pad0, "Not the flag?") def __getfield_phonenum(self): return self.__field_phonenum.getvalue() def __setfield_phonenum(self, value): if isinstance(value,USTRING): self.__field_phonenum=value else: self.__field_phonenum=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_phonenum(self): del self.__field_phonenum phonenum=property(__getfield_phonenum, __setfield_phonenum, __delfield_phonenum, None) def __getfield_phonenum_len(self): return self.__field_phonenum_len.getvalue() def __setfield_phonenum_len(self, value): if isinstance(value,UINT): self.__field_phonenum_len=value else: self.__field_phonenum_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_phonenum_len(self): del self.__field_phonenum_len phonenum_len=property(__getfield_phonenum_len, __setfield_phonenum_len, __delfield_phonenum_len, None) def __getfield_date(self): return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,UINT): self.__field_date=value else: self.__field_date=UINT(value,**{'sizeinbytes': 4}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, "# seconds since Jan 1, 1980 approximately") def __getfield_period(self): return self.__field_period.getvalue() def __setfield_period(self, value): if isinstance(value,UINT): self.__field_period=value else: self.__field_period=UINT(value,**{'sizeinbytes': 1}) def __delfield_period(self): del self.__field_period period=property(__getfield_period, __setfield_period, __delfield_period, "No, Daily, Weekly, Monthly, Yearly") def __getfield_dom(self): return self.__field_dom.getvalue() def __setfield_dom(self, value): if isinstance(value,UINT): self.__field_dom=value else: self.__field_dom=UINT(value,**{'sizeinbytes': 1}) def __delfield_dom(self): del self.__field_dom dom=property(__getfield_dom, __setfield_dom, __delfield_dom, "Day of month for the event") def __getfield_datedup(self): return self.__field_datedup.getvalue() def __setfield_datedup(self, value): if isinstance(value,UINT): self.__field_datedup=value else: self.__field_datedup=UINT(value,**{'sizeinbytes': 4}) def __delfield_datedup(self): del self.__field_datedup datedup=property(__getfield_datedup, __setfield_datedup, __delfield_datedup, "Copy of the date. Always the same???") def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_name_len(self): return self.__field_name_len.getvalue() def __setfield_name_len(self, value): if isinstance(value,UINT): self.__field_name_len=value else: self.__field_name_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_name_len(self): del self.__field_name_len name_len=property(__getfield_name_len, __setfield_name_len, __delfield_name_len, None) def __getfield_phonenumbertype(self): return self.__field_phonenumbertype.getvalue() def __setfield_phonenumbertype(self, value): if isinstance(value,UINT): self.__field_phonenumbertype=value else: self.__field_phonenumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_phonenumbertype(self): del self.__field_phonenumbertype phonenumbertype=property(__getfield_phonenumbertype, __setfield_phonenumbertype, __delfield_phonenumbertype, "1: Home, 2: Work, ...") def __getfield_phonenumberslot(self): return self.__field_phonenumberslot.getvalue() def __setfield_phonenumberslot(self, value): if isinstance(value,UINT): self.__field_phonenumberslot=value else: self.__field_phonenumberslot=UINT(value,**{'sizeinbytes': 2}) def __delfield_phonenumberslot(self): del self.__field_phonenumberslot phonenumberslot=property(__getfield_phonenumberslot, __setfield_phonenumberslot, __delfield_phonenumberslot, None) def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_serial(self): try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_serial.getvalue() def __setfield_serial(self, value): if isinstance(value,UINT): self.__field_serial=value else: self.__field_serial=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_serial(self): del self.__field_serial serial=property(__getfield_serial, __setfield_serial, __delfield_serial, None) def __getfield_pad3(self): try: self.__field_pad3 except: self.__field_pad3=UNKNOWN(**{'sizeinbytes': 2}) return self.__field_pad3.getvalue() def __setfield_pad3(self, value): if isinstance(value,UNKNOWN): self.__field_pad3=value else: self.__field_pad3=UNKNOWN(value,**{'sizeinbytes': 2}) def __delfield_pad3(self): del self.__field_pad3 pad3=property(__getfield_pad3, __setfield_pad3, __delfield_pad3, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 1, 'default': 0xfc}) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1, 'default': 0xfc}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_pad4(self): try: self.__field_pad4 except: self.__field_pad4=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad4.getvalue() def __setfield_pad4(self, value): if isinstance(value,UNKNOWN): self.__field_pad4=value else: self.__field_pad4=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad4(self): del self.__field_pad4 pad4=property(__getfield_pad4, __setfield_pad4, __delfield_pad4, " This may be the ringtone. Need to understand ") def __getfield_flag(self): try: self.__field_flag except: self.__field_flag=UINT(**{'sizeinbytes': 1}) return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('pad0', self.__field_pad0, "Not the flag?") yield ('phonenum', self.__field_phonenum, None) yield ('phonenum_len', self.__field_phonenum_len, None) yield ('date', self.__field_date, "# seconds since Jan 1, 1980 approximately") yield ('period', self.__field_period, "No, Daily, Weekly, Monthly, Yearly") yield ('dom', self.__field_dom, "Day of month for the event") yield ('datedup', self.__field_datedup, "Copy of the date. Always the same???") yield ('name', self.__field_name, None) yield ('pad1', self.__field_pad1, None) yield ('name_len', self.__field_name_len, None) yield ('phonenumbertype', self.__field_phonenumbertype, "1: Home, 2: Work, ...") yield ('phonenumberslot', self.__field_phonenumberslot, None) yield ('pad2', self.__field_pad2, None) yield ('serial', self.__field_serial, None) yield ('pad3', self.__field_pad3, None) yield ('ringtone', self.__field_ringtone, None) yield ('pad4', self.__field_pad4, " This may be the ringtone. Need to understand ") yield ('flag', self.__field_flag, None) class todorequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(todorequest,self).__init__(**dict) if self.__class__ is todorequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(todorequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(todorequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x25}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x25}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x25}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,**{'packettype': 0x0c, 'command': 0x25}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 129}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class todoentry(BaseProtogenClass): __fields=['slot', 'flag', 'todo', 'pad1', 'todo_len', 'priority', 'dunno', 'order'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(todoentry,self).__init__(**dict) if self.__class__ is todoentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(todoentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(todoentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) self.__field_todo.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.writetobuffer(buf) self.__field_todo_len.writetobuffer(buf) self.__field_priority.writetobuffer(buf) try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 1}) self.__field_dunno.writetobuffer(buf) self.__field_order.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_todo=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False}) self.__field_todo.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.readfrombuffer(buf) self.__field_todo_len=UINT(**{'sizeinbytes': 1}) self.__field_todo_len.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_dunno=UINT(**{'sizeinbytes': 1}) self.__field_dunno.readfrombuffer(buf) self.__field_order=UINT(**{'sizeinbytes': 1}) self.__field_order.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, "0: Not used, 1: Used") def __getfield_todo(self): return self.__field_todo.getvalue() def __setfield_todo(self, value): if isinstance(value,USTRING): self.__field_todo=value else: self.__field_todo=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False}) def __delfield_todo(self): del self.__field_todo todo=property(__getfield_todo, __setfield_todo, __delfield_todo, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_todo_len(self): return self.__field_todo_len.getvalue() def __setfield_todo_len(self, value): if isinstance(value,UINT): self.__field_todo_len=value else: self.__field_todo_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_todo_len(self): del self.__field_todo_len todo_len=property(__getfield_todo_len, __setfield_todo_len, __delfield_todo_len, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, "0: Normal, 1: Urgent, 2: Done") def __getfield_dunno(self): try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 1}) return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, "Maybe always zero") def __getfield_order(self): return self.__field_order.getvalue() def __setfield_order(self, value): if isinstance(value,UINT): self.__field_order=value else: self.__field_order=UINT(value,**{'sizeinbytes': 1}) def __delfield_order(self): del self.__field_order order=property(__getfield_order, __setfield_order, __delfield_order, "Gets sorted on screen in this order") def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, "0: Not used, 1: Used") yield ('todo', self.__field_todo, None) yield ('pad1', self.__field_pad1, None) yield ('todo_len', self.__field_todo_len, None) yield ('priority', self.__field_priority, "0: Normal, 1: Urgent, 2: Done") yield ('dunno', self.__field_dunno, "Maybe always zero") yield ('order', self.__field_order, "Gets sorted on screen in this order") class todoresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(todoresponse,self).__init__(**dict) if self.__class__ is todoresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(todoresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(todoresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader() self.__field_header.readfrombuffer(buf) self.__field_entry=todoentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,todoentry): self.__field_entry=value else: self.__field_entry=todoentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class sanyomediafilenameresponse(BaseProtogenClass): __fields=['header', 'pad1', 'filename', 'num1', 'pad2', 'num2', 'pad3', 'num5', 'pad4', 'num4', 'pad5', 'num3', 'pad5'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyomediafilenameresponse,self).__init__(**dict) if self.__class__ is sanyomediafilenameresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyomediafilenameresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyomediafilenameresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_pad1.writetobuffer(buf) self.__field_filename.writetobuffer(buf) self.__field_num1.writetobuffer(buf) self.__field_pad2.writetobuffer(buf) self.__field_num2.writetobuffer(buf) self.__field_pad3.writetobuffer(buf) self.__field_num5.writetobuffer(buf) self.__field_pad4.writetobuffer(buf) self.__field_num4.writetobuffer(buf) self.__field_pad5.writetobuffer(buf) self.__field_num3.writetobuffer(buf) self.__field_pad5.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyomediaheader() self.__field_header.readfrombuffer(buf) self.__field_pad1=UINT(**{'sizeinbytes': 1}) self.__field_pad1.readfrombuffer(buf) self.__field_filename=USTRING(**{'sizeinbytes': 154}) self.__field_filename.readfrombuffer(buf) self.__field_num1=UINT(**{'sizeinbytes': 1}) self.__field_num1.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad2.readfrombuffer(buf) self.__field_num2=UINT(**{'sizeinbytes': 1}) self.__field_num2.readfrombuffer(buf) self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad3.readfrombuffer(buf) self.__field_num5=UINT(**{'sizeinbytes': 1}) self.__field_num5.readfrombuffer(buf) self.__field_pad4=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad4.readfrombuffer(buf) self.__field_num4=UINT(**{'sizeinbytes': 1}) self.__field_num4.readfrombuffer(buf) self.__field_pad5=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad5.readfrombuffer(buf) self.__field_num3=UINT(**{'sizeinbytes': 1}) self.__field_num3.readfrombuffer(buf) self.__field_pad5=UNKNOWN(**{'sizeinbytes': 8}) self.__field_pad5.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyomediaheader): self.__field_header=value else: self.__field_header=sanyomediaheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_pad1(self): return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UINT): self.__field_pad1=value else: self.__field_pad1=UINT(value,**{'sizeinbytes': 1}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'sizeinbytes': 154}) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, None) def __getfield_num1(self): return self.__field_num1.getvalue() def __setfield_num1(self, value): if isinstance(value,UINT): self.__field_num1=value else: self.__field_num1=UINT(value,**{'sizeinbytes': 1}) def __delfield_num1(self): del self.__field_num1 num1=property(__getfield_num1, __setfield_num1, __delfield_num1, None) def __getfield_pad2(self): return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_num2(self): return self.__field_num2.getvalue() def __setfield_num2(self, value): if isinstance(value,UINT): self.__field_num2=value else: self.__field_num2=UINT(value,**{'sizeinbytes': 1}) def __delfield_num2(self): del self.__field_num2 num2=property(__getfield_num2, __setfield_num2, __delfield_num2, None) def __getfield_pad3(self): return self.__field_pad3.getvalue() def __setfield_pad3(self, value): if isinstance(value,UNKNOWN): self.__field_pad3=value else: self.__field_pad3=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad3(self): del self.__field_pad3 pad3=property(__getfield_pad3, __setfield_pad3, __delfield_pad3, None) def __getfield_num5(self): return self.__field_num5.getvalue() def __setfield_num5(self, value): if isinstance(value,UINT): self.__field_num5=value else: self.__field_num5=UINT(value,**{'sizeinbytes': 1}) def __delfield_num5(self): del self.__field_num5 num5=property(__getfield_num5, __setfield_num5, __delfield_num5, None) def __getfield_pad4(self): return self.__field_pad4.getvalue() def __setfield_pad4(self, value): if isinstance(value,UNKNOWN): self.__field_pad4=value else: self.__field_pad4=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad4(self): del self.__field_pad4 pad4=property(__getfield_pad4, __setfield_pad4, __delfield_pad4, None) def __getfield_num4(self): return self.__field_num4.getvalue() def __setfield_num4(self, value): if isinstance(value,UINT): self.__field_num4=value else: self.__field_num4=UINT(value,**{'sizeinbytes': 1}) def __delfield_num4(self): del self.__field_num4 num4=property(__getfield_num4, __setfield_num4, __delfield_num4, None) def __getfield_pad5(self): return self.__field_pad5.getvalue() def __setfield_pad5(self, value): if isinstance(value,UNKNOWN): self.__field_pad5=value else: self.__field_pad5=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad5(self): del self.__field_pad5 pad5=property(__getfield_pad5, __setfield_pad5, __delfield_pad5, None) def __getfield_num3(self): return self.__field_num3.getvalue() def __setfield_num3(self, value): if isinstance(value,UINT): self.__field_num3=value else: self.__field_num3=UINT(value,**{'sizeinbytes': 1}) def __delfield_num3(self): del self.__field_num3 num3=property(__getfield_num3, __setfield_num3, __delfield_num3, None) def __getfield_pad5(self): return self.__field_pad5.getvalue() def __setfield_pad5(self, value): if isinstance(value,UNKNOWN): self.__field_pad5=value else: self.__field_pad5=UNKNOWN(value,**{'sizeinbytes': 8}) def __delfield_pad5(self): del self.__field_pad5 pad5=property(__getfield_pad5, __setfield_pad5, __delfield_pad5, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('pad1', self.__field_pad1, None) yield ('filename', self.__field_filename, None) yield ('num1', self.__field_num1, None) yield ('pad2', self.__field_pad2, None) yield ('num2', self.__field_num2, None) yield ('pad3', self.__field_pad3, None) yield ('num5', self.__field_num5, None) yield ('pad4', self.__field_pad4, None) yield ('num4', self.__field_num4, None) yield ('pad5', self.__field_pad5, None) yield ('num3', self.__field_num3, None) yield ('pad5', self.__field_pad5, None) class ringerpicbuffer(BaseProtogenClass): "Index of ringer and picture assignments" __fields=['numpbslots', 'startcommand', 'bufsize', 'comment', 'ringtones', 'wallpapers', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ringerpicbuffer,self).__init__(**dict) if self.__class__ is ringerpicbuffer: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ringerpicbuffer,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ringerpicbuffer,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_numpbslots except: self.__field_numpbslots=UINT(**{'constant': _NUMPBSLOTS}) try: self.__field_startcommand except: self.__field_startcommand=UINT(**{'constant': 0x5a}) try: self.__field_bufsize except: self.__field_bufsize=UINT(**{'constant': 2048}) try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "ringer/picture assignments"}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_ringtones except: self.__field_ringtones=LIST(**{'elementclass': _gen_p_sanyo5600_188, 'length': _NUMPBSLOTS}) self.__field_ringtones.writetobuffer(buf) try: self.__field_wallpapers except: self.__field_wallpapers=LIST(**{'elementclass': _gen_p_sanyo5600_190, 'length': _NUMPBSLOTS}) self.__field_wallpapers.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 424}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_ringtones=LIST(**{'elementclass': _gen_p_sanyo5600_188, 'length': _NUMPBSLOTS}) self.__field_ringtones.readfrombuffer(buf) self.__field_wallpapers=LIST(**{'elementclass': _gen_p_sanyo5600_190, 'length': _NUMPBSLOTS}) self.__field_wallpapers.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 424}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numpbslots(self): return self.__field_numpbslots.getvalue() def __setfield_numpbslots(self, value): if isinstance(value,UINT): self.__field_numpbslots=value else: self.__field_numpbslots=UINT(value,**{'constant': _NUMPBSLOTS}) def __delfield_numpbslots(self): del self.__field_numpbslots numpbslots=property(__getfield_numpbslots, __setfield_numpbslots, __delfield_numpbslots, "Number of phone book slots") def __getfield_startcommand(self): return self.__field_startcommand.getvalue() def __setfield_startcommand(self, value): if isinstance(value,UINT): self.__field_startcommand=value else: self.__field_startcommand=UINT(value,**{'constant': 0x5a}) def __delfield_startcommand(self): del self.__field_startcommand startcommand=property(__getfield_startcommand, __setfield_startcommand, __delfield_startcommand, "Starting command for R/W buf parts") def __getfield_bufsize(self): return self.__field_bufsize.getvalue() def __setfield_bufsize(self, value): if isinstance(value,UINT): self.__field_bufsize=value else: self.__field_bufsize=UINT(value,**{'constant': 2048}) def __delfield_bufsize(self): del self.__field_bufsize bufsize=property(__getfield_bufsize, __setfield_bufsize, __delfield_bufsize, None) def __getfield_comment(self): try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "ringer/picture assignments"}) return self.__field_comment.getvalue() def __setfield_comment(self, value): if isinstance(value,USTRING): self.__field_comment=value else: self.__field_comment=USTRING(value,**{'default': "ringer/picture assignments"}) def __delfield_comment(self): del self.__field_comment comment=property(__getfield_comment, __setfield_comment, __delfield_comment, None) def __getfield_ringtones(self): try: self.__field_ringtones except: self.__field_ringtones=LIST(**{'elementclass': _gen_p_sanyo5600_188, 'length': _NUMPBSLOTS}) return self.__field_ringtones.getvalue() def __setfield_ringtones(self, value): if isinstance(value,LIST): self.__field_ringtones=value else: self.__field_ringtones=LIST(value,**{'elementclass': _gen_p_sanyo5600_188, 'length': _NUMPBSLOTS}) def __delfield_ringtones(self): del self.__field_ringtones ringtones=property(__getfield_ringtones, __setfield_ringtones, __delfield_ringtones, None) def __getfield_wallpapers(self): try: self.__field_wallpapers except: self.__field_wallpapers=LIST(**{'elementclass': _gen_p_sanyo5600_190, 'length': _NUMPBSLOTS}) return self.__field_wallpapers.getvalue() def __setfield_wallpapers(self, value): if isinstance(value,LIST): self.__field_wallpapers=value else: self.__field_wallpapers=LIST(value,**{'elementclass': _gen_p_sanyo5600_190, 'length': _NUMPBSLOTS}) def __delfield_wallpapers(self): del self.__field_wallpapers wallpapers=property(__getfield_wallpapers, __setfield_wallpapers, __delfield_wallpapers, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 424}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 424}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('numpbslots', self.__field_numpbslots, "Number of phone book slots") yield ('startcommand', self.__field_startcommand, "Starting command for R/W buf parts") yield ('bufsize', self.__field_bufsize, None) yield ('comment', self.__field_comment, None) yield ('ringtones', self.__field_ringtones, None) yield ('wallpapers', self.__field_wallpapers, None) yield ('pad', self.__field_pad, None) class _gen_p_sanyo5600_188(BaseProtogenClass): 'Anonymous inner class' __fields=['ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo5600_188,self).__init__(**dict) if self.__class__ is _gen_p_sanyo5600_188: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo5600_188,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo5600_188,kwargs) if len(args): dict2={'sizeinbytes': 2} dict2.update(kwargs) kwargs=dict2 self.__field_ringtone=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_ringtone.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_ringtone=UINT(**{'sizeinbytes': 2}) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 2}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "ringtone index") def iscontainer(self): return True def containerelements(self): yield ('ringtone', self.__field_ringtone, "ringtone index") class _gen_p_sanyo5600_190(BaseProtogenClass): 'Anonymous inner class' __fields=['wallpaper'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo5600_190,self).__init__(**dict) if self.__class__ is _gen_p_sanyo5600_190: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo5600_190,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo5600_190,kwargs) if len(args): dict2={'sizeinbytes': 2} dict2.update(kwargs) kwargs=dict2 self.__field_wallpaper=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_wallpaper.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_wallpaper=UINT(**{'sizeinbytes': 2}) self.__field_wallpaper.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 2}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, "wallpaper index") def iscontainer(self): return True def containerelements(self): yield ('wallpaper', self.__field_wallpaper, "wallpaper index") bitpim-1.0.7+dfsg1/src/phones/p_lgvx3200.py0000644001616600161660000046010610466234100016413 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VX3200""" from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx4400 except as noted below from p_lgvx4400 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=1 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=200 MAXCALENDARDESCRIPTION=38 NUMEMAILS=3 NUMPHONENUMBERS=5 NORINGTONE=0 NOMSGRINGTONE=0 NOWALLPAPER=0 MEMOLENGTH=33 numbertypetab=( 'home', 'home2', 'office', 'office2', 'cell', 'cell2', 'pager', 'fax', 'fax2', 'none', 'vmbox' ) class speeddial(BaseProtogenClass): __fields=['entry', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddial,self).__init__(**dict) if self.__class__ is speeddial: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddial,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddial,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.writetobuffer(buf) try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.readfrombuffer(buf) self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,UINT): self.__field_entry=value else: self.__field_entry=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_number(self): try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,UINT): self.__field_number=value else: self.__field_number=UINT(value,**{'sizeinbytes': 1, 'default': 0xff}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('entry', self.__field_entry, None) yield ('number', self.__field_number, None) class speeddials(BaseProtogenClass): __fields=['speeddials'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddials,self).__init__(**dict) if self.__class__ is speeddials: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddials,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddials,kwargs) if len(args): dict2={'length': NUMSPEEDDIALS, 'elementclass': speeddial} dict2.update(kwargs) kwargs=dict2 self.__field_speeddials=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_speeddials(self): try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) return self.__field_speeddials.getvalue() def __setfield_speeddials(self, value): if isinstance(value,LIST): self.__field_speeddials=value else: self.__field_speeddials=LIST(value,**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) def __delfield_speeddials(self): del self.__field_speeddials speeddials=property(__getfield_speeddials, __setfield_speeddials, __delfield_speeddials, None) def iscontainer(self): return True def containerelements(self): yield ('speeddials', self.__field_speeddials, None) class pbreadentryresponse(BaseProtogenClass): "Results of reading one entry" __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbreadentryresponse,self).__init__(**dict) if self.__class__ is pbreadentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbreadentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbreadentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbupdateentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbupdateentryrequest,self).__init__(**dict) if self.__class__ is pbupdateentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbupdateentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbupdateentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x04, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbappendentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbappendentryrequest,self).__init__(**dict) if self.__class__ is pbappendentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbappendentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbappendentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x03, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbentry(BaseProtogenClass): __fields=['serial1', 'entrysize', 'serial2', 'entrynumber', 'name', 'group', 'emails', 'url', 'ringtone', 'msgringtone', 'secret', 'memo', 'wallpaper', 'numbertypes', 'numbers', 'unknown20c'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_serial1.writetobuffer(buf) try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x0202}) self.__field_entrysize.writetobuffer(buf) self.__field_serial2.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_group.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx3200_79, 'length': NUMEMAILS}) self.__field_emails.writetobuffer(buf) self.__field_url.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_msgringtone.writetobuffer(buf) self.__field_secret.writetobuffer(buf) self.__field_memo.writetobuffer(buf) self.__field_wallpaper.writetobuffer(buf) try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx3200_87, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx3200_89, 'length': NUMPHONENUMBERS}) self.__field_numbers.writetobuffer(buf) try: self.__field_unknown20c except: self.__field_unknown20c=UNKNOWN() self.__field_unknown20c.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x0202}) self.__field_entrysize.readfrombuffer(buf) self.__field_serial2=UINT(**{'sizeinbytes': 4}) self.__field_serial2.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 2}) self.__field_entrynumber.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 23, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 2}) self.__field_group.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx3200_79, 'length': NUMEMAILS}) self.__field_emails.readfrombuffer(buf) self.__field_url=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_url.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_msgringtone=UINT(**{'sizeinbytes': 1}) self.__field_msgringtone.readfrombuffer(buf) self.__field_secret=BOOL(**{'sizeinbytes': 1}) self.__field_secret.readfrombuffer(buf) self.__field_memo=USTRING(**{'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) self.__field_memo.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 1}) self.__field_wallpaper.readfrombuffer(buf) self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx3200_87, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.readfrombuffer(buf) self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx3200_89, 'length': NUMPHONENUMBERS}) self.__field_numbers.readfrombuffer(buf) self.__field_unknown20c=UNKNOWN() self.__field_unknown20c.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_entrysize(self): try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x0202}) return self.__field_entrysize.getvalue() def __setfield_entrysize(self, value): if isinstance(value,UINT): self.__field_entrysize=value else: self.__field_entrysize=UINT(value,**{'sizeinbytes': 2, 'constant': 0x0202}) def __delfield_entrysize(self): del self.__field_entrysize entrysize=property(__getfield_entrysize, __setfield_entrysize, __delfield_entrysize, None) def __getfield_serial2(self): return self.__field_serial2.getvalue() def __setfield_serial2(self, value): if isinstance(value,UINT): self.__field_serial2=value else: self.__field_serial2=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial2(self): del self.__field_serial2 serial2=property(__getfield_serial2, __setfield_serial2, __delfield_serial2, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 2}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 23, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 2}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx3200_79, 'length': NUMEMAILS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_lgvx3200_79, 'length': NUMEMAILS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, None) def __getfield_url(self): return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,USTRING): self.__field_url=value else: self.__field_url=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "ringtone index for a call") def __getfield_msgringtone(self): return self.__field_msgringtone.getvalue() def __setfield_msgringtone(self, value): if isinstance(value,UINT): self.__field_msgringtone=value else: self.__field_msgringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_msgringtone(self): del self.__field_msgringtone msgringtone=property(__getfield_msgringtone, __setfield_msgringtone, __delfield_msgringtone, "ringtone index for a text message") def __getfield_secret(self): return self.__field_secret.getvalue() def __setfield_secret(self, value): if isinstance(value,BOOL): self.__field_secret=value else: self.__field_secret=BOOL(value,**{'sizeinbytes': 1}) def __delfield_secret(self): del self.__field_secret secret=property(__getfield_secret, __setfield_secret, __delfield_secret, None) def __getfield_memo(self): return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,USTRING): self.__field_memo=value else: self.__field_memo=USTRING(value,**{'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 1}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_numbertypes(self): try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx3200_87, 'length': NUMPHONENUMBERS}) return self.__field_numbertypes.getvalue() def __setfield_numbertypes(self, value): if isinstance(value,LIST): self.__field_numbertypes=value else: self.__field_numbertypes=LIST(value,**{'elementclass': _gen_p_lgvx3200_87, 'length': NUMPHONENUMBERS}) def __delfield_numbertypes(self): del self.__field_numbertypes numbertypes=property(__getfield_numbertypes, __setfield_numbertypes, __delfield_numbertypes, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx3200_89, 'length': NUMPHONENUMBERS}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'elementclass': _gen_p_lgvx3200_89, 'length': NUMPHONENUMBERS}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_unknown20c(self): try: self.__field_unknown20c except: self.__field_unknown20c=UNKNOWN() return self.__field_unknown20c.getvalue() def __setfield_unknown20c(self, value): if isinstance(value,UNKNOWN): self.__field_unknown20c=value else: self.__field_unknown20c=UNKNOWN(value,) def __delfield_unknown20c(self): del self.__field_unknown20c unknown20c=property(__getfield_unknown20c, __setfield_unknown20c, __delfield_unknown20c, None) def iscontainer(self): return True def containerelements(self): yield ('serial1', self.__field_serial1, None) yield ('entrysize', self.__field_entrysize, None) yield ('serial2', self.__field_serial2, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('name', self.__field_name, None) yield ('group', self.__field_group, None) yield ('emails', self.__field_emails, None) yield ('url', self.__field_url, None) yield ('ringtone', self.__field_ringtone, "ringtone index for a call") yield ('msgringtone', self.__field_msgringtone, "ringtone index for a text message") yield ('secret', self.__field_secret, None) yield ('memo', self.__field_memo, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('numbertypes', self.__field_numbertypes, None) yield ('numbers', self.__field_numbers, None) yield ('unknown20c', self.__field_unknown20c, None) class _gen_p_lgvx3200_79(BaseProtogenClass): 'Anonymous inner class' __fields=['email'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx3200_79,self).__init__(**dict) if self.__class__ is _gen_p_lgvx3200_79: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx3200_79,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx3200_79,kwargs) if len(args): dict2={'sizeinbytes': 49, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_email=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_email.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_email=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_email.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def iscontainer(self): return True def containerelements(self): yield ('email', self.__field_email, None) class _gen_p_lgvx3200_87(BaseProtogenClass): 'Anonymous inner class' __fields=['numbertype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx3200_87,self).__init__(**dict) if self.__class__ is _gen_p_lgvx3200_87: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx3200_87,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx3200_87,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_numbertype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numbertype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numbertype=UINT(**{'sizeinbytes': 1}) self.__field_numbertype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numbertype(self): return self.__field_numbertype.getvalue() def __setfield_numbertype(self, value): if isinstance(value,UINT): self.__field_numbertype=value else: self.__field_numbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_numbertype(self): del self.__field_numbertype numbertype=property(__getfield_numbertype, __setfield_numbertype, __delfield_numbertype, None) def iscontainer(self): return True def containerelements(self): yield ('numbertype', self.__field_numbertype, None) class _gen_p_lgvx3200_89(BaseProtogenClass): 'Anonymous inner class' __fields=['number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx3200_89,self).__init__(**dict) if self.__class__ is _gen_p_lgvx3200_89: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx3200_89,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx3200_89,kwargs) if len(args): dict2={'sizeinbytes': 49, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_number=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) class pbgroup(BaseProtogenClass): "A single group" __fields=['icon', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroup,self).__init__(**dict) if self.__class__ is pbgroup: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroup,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroup,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_icon.writetobuffer(buf) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_icon=UINT(**{'sizeinbytes': 1}) self.__field_icon.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 23}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_icon(self): return self.__field_icon.getvalue() def __setfield_icon(self, value): if isinstance(value,UINT): self.__field_icon=value else: self.__field_icon=UINT(value,**{'sizeinbytes': 1}) def __delfield_icon(self): del self.__field_icon icon=property(__getfield_icon, __setfield_icon, __delfield_icon, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 23}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('icon', self.__field_icon, None) yield ('name', self.__field_name, None) class pbgroups(BaseProtogenClass): "Phonebook groups" __fields=['groups'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroups,self).__init__(**dict) if self.__class__ is pbgroups: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroups,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroups,kwargs) if len(args): dict2={'elementclass': pbgroup} dict2.update(kwargs) kwargs=dict2 self.__field_groups=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_groups(self): try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) return self.__field_groups.getvalue() def __setfield_groups(self, value): if isinstance(value,LIST): self.__field_groups=value else: self.__field_groups=LIST(value,**{'elementclass': pbgroup}) def __delfield_groups(self): del self.__field_groups groups=property(__getfield_groups, __setfield_groups, __delfield_groups, None) def iscontainer(self): return True def containerelements(self): yield ('groups', self.__field_groups, None) class indexentry(BaseProtogenClass): __fields=['index', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_index.writetobuffer(buf) try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 40, 'default': ""}) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_index.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 40, 'default': ""}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 40, 'default': ""}) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 40, 'default': ""}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('name', self.__field_name, None) class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['maxitems', 'numactiveitems', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_maxitems except: self.__field_maxitems=UINT(**{'constant': 30}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{'length': self.maxitems, 'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_items=LIST(**{'length': self.maxitems, 'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_maxitems(self): return self.__field_maxitems.getvalue() def __setfield_maxitems(self, value): if isinstance(value,UINT): self.__field_maxitems=value else: self.__field_maxitems=UINT(value,**{'constant': 30}) def __delfield_maxitems(self): del self.__field_maxitems maxitems=property(__getfield_maxitems, __setfield_maxitems, __delfield_maxitems, None) def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'length': self.maxitems, 'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'length': self.maxitems, 'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('maxitems', self.__field_maxitems, None) yield ('numactiveitems', self.__field_numactiveitems, None) yield ('items', self.__field_items, None) class scheduleexception(BaseProtogenClass): __fields=['pos', 'day', 'month', 'year'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexception,self).__init__(**dict) if self.__class__ is scheduleexception: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexception,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexception,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_day.writetobuffer(buf) self.__field_month.writetobuffer(buf) self.__field_year.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_day=UINT(**{'sizeinbytes': 1}) self.__field_day.readfrombuffer(buf) self.__field_month=UINT(**{'sizeinbytes': 1}) self.__field_month.readfrombuffer(buf) self.__field_year=UINT(**{'sizeinbytes': 2}) self.__field_year.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "Refers to event id (position in schedule file) that this suppresses") def __getfield_day(self): return self.__field_day.getvalue() def __setfield_day(self, value): if isinstance(value,UINT): self.__field_day=value else: self.__field_day=UINT(value,**{'sizeinbytes': 1}) def __delfield_day(self): del self.__field_day day=property(__getfield_day, __setfield_day, __delfield_day, None) def __getfield_month(self): return self.__field_month.getvalue() def __setfield_month(self, value): if isinstance(value,UINT): self.__field_month=value else: self.__field_month=UINT(value,**{'sizeinbytes': 1}) def __delfield_month(self): del self.__field_month month=property(__getfield_month, __setfield_month, __delfield_month, None) def __getfield_year(self): return self.__field_year.getvalue() def __setfield_year(self, value): if isinstance(value,UINT): self.__field_year=value else: self.__field_year=UINT(value,**{'sizeinbytes': 2}) def __delfield_year(self): del self.__field_year year=property(__getfield_year, __setfield_year, __delfield_year, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "Refers to event id (position in schedule file) that this suppresses") yield ('day', self.__field_day, None) yield ('month', self.__field_month, None) yield ('year', self.__field_year, None) class scheduleexceptionfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexceptionfile,self).__init__(**dict) if self.__class__ is scheduleexceptionfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexceptionfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexceptionfile,kwargs) if len(args): dict2={'elementclass': scheduleexception} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': scheduleexception}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class scheduleevent(BaseProtogenClass): __fields=['pos', 'unknown', 'start', 'end', 'repeat', 'daybitmap', 'alarmminutes', 'alarmhours', 'alarmtype', 'snoozedelay', 'ringtone', 'description'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleevent,self).__init__(**dict) if self.__class__ is scheduleevent: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleevent,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleevent,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) try: self.__field_unknown except: self.__field_unknown=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_unknown.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) self.__field_daybitmap.writetobuffer(buf) self.__field_alarmminutes.writetobuffer(buf) self.__field_alarmhours.writetobuffer(buf) self.__field_alarmtype.writetobuffer(buf) try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_description.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_unknown=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_unknown.readfrombuffer(buf) self.__field_start=LGCALDATE(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=LGCALDATE(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_repeat=UINT(**{'sizeinbytes': 1}) self.__field_repeat.readfrombuffer(buf) self.__field_daybitmap=UINT(**{'sizeinbytes': 3}) self.__field_daybitmap.readfrombuffer(buf) self.__field_alarmminutes=UINT(**{'sizeinbytes': 1}) self.__field_alarmminutes.readfrombuffer(buf) self.__field_alarmhours=UINT(**{'sizeinbytes': 1}) self.__field_alarmhours.readfrombuffer(buf) self.__field_alarmtype=UINT(**{'sizeinbytes': 1}) self.__field_alarmtype.readfrombuffer(buf) self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_description=USTRING(**{'sizeinbytes': 39, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_description.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "position within file, used as an event id") def __getfield_unknown(self): try: self.__field_unknown except: self.__field_unknown=UINT(**{'sizeinbytes': 4, 'default': 0 }) return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UINT): self.__field_unknown=value else: self.__field_unknown=UINT(value,**{'sizeinbytes': 4, 'default': 0 }) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,LGCALDATE): self.__field_start=value else: self.__field_start=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,LGCALDATE): self.__field_end=value else: self.__field_end=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,UINT): self.__field_repeat=value else: self.__field_repeat=UINT(value,**{'sizeinbytes': 1}) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_daybitmap(self): return self.__field_daybitmap.getvalue() def __setfield_daybitmap(self, value): if isinstance(value,UINT): self.__field_daybitmap=value else: self.__field_daybitmap=UINT(value,**{'sizeinbytes': 3}) def __delfield_daybitmap(self): del self.__field_daybitmap daybitmap=property(__getfield_daybitmap, __setfield_daybitmap, __delfield_daybitmap, "which days a weekly repeat event happens on") def __getfield_alarmminutes(self): return self.__field_alarmminutes.getvalue() def __setfield_alarmminutes(self, value): if isinstance(value,UINT): self.__field_alarmminutes=value else: self.__field_alarmminutes=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmminutes(self): del self.__field_alarmminutes alarmminutes=property(__getfield_alarmminutes, __setfield_alarmminutes, __delfield_alarmminutes, "a value of 100 indicates not set") def __getfield_alarmhours(self): return self.__field_alarmhours.getvalue() def __setfield_alarmhours(self, value): if isinstance(value,UINT): self.__field_alarmhours=value else: self.__field_alarmhours=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmhours(self): del self.__field_alarmhours alarmhours=property(__getfield_alarmhours, __setfield_alarmhours, __delfield_alarmhours, "a value of 100 indicates not set") def __getfield_alarmtype(self): return self.__field_alarmtype.getvalue() def __setfield_alarmtype(self, value): if isinstance(value,UINT): self.__field_alarmtype=value else: self.__field_alarmtype=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmtype(self): del self.__field_alarmtype alarmtype=property(__getfield_alarmtype, __setfield_alarmtype, __delfield_alarmtype, None) def __getfield_snoozedelay(self): try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_snoozedelay.getvalue() def __setfield_snoozedelay(self, value): if isinstance(value,UINT): self.__field_snoozedelay=value else: self.__field_snoozedelay=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_snoozedelay(self): del self.__field_snoozedelay snoozedelay=property(__getfield_snoozedelay, __setfield_snoozedelay, __delfield_snoozedelay, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_description(self): return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,USTRING): self.__field_description=value else: self.__field_description=USTRING(value,**{'sizeinbytes': 39, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "position within file, used as an event id") yield ('unknown', self.__field_unknown, None) yield ('start', self.__field_start, None) yield ('end', self.__field_end, None) yield ('repeat', self.__field_repeat, None) yield ('daybitmap', self.__field_daybitmap, "which days a weekly repeat event happens on") yield ('alarmminutes', self.__field_alarmminutes, "a value of 100 indicates not set") yield ('alarmhours', self.__field_alarmhours, "a value of 100 indicates not set") yield ('alarmtype', self.__field_alarmtype, None) yield ('snoozedelay', self.__field_snoozedelay, None) yield ('ringtone', self.__field_ringtone, None) yield ('description', self.__field_description, None) class schedulefile(BaseProtogenClass): __fields=['numactiveitems', 'events'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(schedulefile,self).__init__(**dict) if self.__class__ is schedulefile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(schedulefile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(schedulefile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{'elementclass': scheduleevent}) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('events', self.__field_events, None) class call(BaseProtogenClass): __fields=['GPStime', 'unknown1', 'duration', 'number', 'name', 'numberlength', 'unknown'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(call,self).__init__(**dict) if self.__class__ is call: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(call,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(call,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_numberlength.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 4}) self.__field_unknown1.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 36, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_numberlength=UINT(**{'sizeinbytes': 1}) self.__field_numberlength.readfrombuffer(buf) self.__field_unknown=UNKNOWN(**{'sizeinbytes': 6}) self.__field_unknown.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 36, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numberlength(self): return self.__field_numberlength.getvalue() def __setfield_numberlength(self, value): if isinstance(value,UINT): self.__field_numberlength=value else: self.__field_numberlength=UINT(value,**{'sizeinbytes': 1}) def __delfield_numberlength(self): del self.__field_numberlength numberlength=property(__getfield_numberlength, __setfield_numberlength, __delfield_numberlength, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UNKNOWN): self.__field_unknown=value else: self.__field_unknown=UNKNOWN(value,**{'sizeinbytes': 6}) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def iscontainer(self): return True def containerelements(self): yield ('GPStime', self.__field_GPStime, None) yield ('unknown1', self.__field_unknown1, None) yield ('duration', self.__field_duration, None) yield ('number', self.__field_number, None) yield ('name', self.__field_name, None) yield ('numberlength', self.__field_numberlength, None) yield ('unknown', self.__field_unknown, None) class callhistory(BaseProtogenClass): __fields=['numcalls', 'unknown1', 'calls'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callhistory,self).__init__(**dict) if self.__class__ is callhistory: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callhistory,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callhistory,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numcalls.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numcalls=UINT(**{'sizeinbytes': 4}) self.__field_numcalls.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numcalls(self): return self.__field_numcalls.getvalue() def __setfield_numcalls(self, value): if isinstance(value,UINT): self.__field_numcalls=value else: self.__field_numcalls=UINT(value,**{'sizeinbytes': 4}) def __delfield_numcalls(self): del self.__field_numcalls numcalls=property(__getfield_numcalls, __setfield_numcalls, __delfield_numcalls, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_calls(self): try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) return self.__field_calls.getvalue() def __setfield_calls(self, value): if isinstance(value,LIST): self.__field_calls=value else: self.__field_calls=LIST(value,**{'elementclass': call}) def __delfield_calls(self): del self.__field_calls calls=property(__getfield_calls, __setfield_calls, __delfield_calls, None) def iscontainer(self): return True def containerelements(self): yield ('numcalls', self.__field_numcalls, None) yield ('unknown1', self.__field_unknown1, None) yield ('calls', self.__field_calls, None) class msg_record(BaseProtogenClass): __fields=['unknown1', 'binary', 'unknown3', 'unknown4', 'unknown6', 'length', 'msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(msg_record,self).__init__(**dict) if self.__class__ is msg_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(msg_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(msg_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_binary.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_length.writetobuffer(buf) try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx3200_213, 'length': 219}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_binary=UINT(**{'sizeinbytes': 1}) self.__field_binary.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1}) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 1}) self.__field_unknown4.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 1}) self.__field_unknown6.readfrombuffer(buf) self.__field_length=UINT(**{'sizeinbytes': 1}) self.__field_length.readfrombuffer(buf) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx3200_213, 'length': 219}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_binary(self): return self.__field_binary.getvalue() def __setfield_binary(self, value): if isinstance(value,UINT): self.__field_binary=value else: self.__field_binary=UINT(value,**{'sizeinbytes': 1}) def __delfield_binary(self): del self.__field_binary binary=property(__getfield_binary, __setfield_binary, __delfield_binary, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_length(self): return self.__field_length.getvalue() def __setfield_length(self, value): if isinstance(value,UINT): self.__field_length=value else: self.__field_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_length(self): del self.__field_length length=property(__getfield_length, __setfield_length, __delfield_length, None) def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx3200_213, 'length': 219}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx3200_213, 'length': 219}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('binary', self.__field_binary, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) yield ('unknown6', self.__field_unknown6, None) yield ('length', self.__field_length, None) yield ('msg', self.__field_msg, None) class _gen_p_lgvx3200_213(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx3200_213,self).__init__(**dict) if self.__class__ is _gen_p_lgvx3200_213: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx3200_213,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx3200_213,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class recipient_record(BaseProtogenClass): __fields=['status', 'timesent', 'timereceived', 'unknown', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(recipient_record,self).__init__(**dict) if self.__class__ is recipient_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(recipient_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(recipient_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_status.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_timereceived.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_timereceived=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timereceived.readfrombuffer(buf) self.__field_unknown=UNKNOWN(**{'sizeinbytes': 12}) self.__field_unknown.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_timereceived(self): return self.__field_timereceived.getvalue() def __setfield_timereceived(self, value): if isinstance(value,LGCALDATE): self.__field_timereceived=value else: self.__field_timereceived=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timereceived(self): del self.__field_timereceived timereceived=property(__getfield_timereceived, __setfield_timereceived, __delfield_timereceived, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UNKNOWN): self.__field_unknown=value else: self.__field_unknown=UNKNOWN(value,**{'sizeinbytes': 12}) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('status', self.__field_status, None) yield ('timesent', self.__field_timesent, None) yield ('timereceived', self.__field_timereceived, None) yield ('unknown', self.__field_unknown, None) yield ('number', self.__field_number, None) class sms_saved(BaseProtogenClass): __fields=['outboxmsg', 'pad', 'outbox', 'inbox'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_saved,self).__init__(**dict) if self.__class__ is sms_saved: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_saved,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_saved,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_outboxmsg.writetobuffer(buf) self.__field_pad.writetobuffer(buf) if self.outboxmsg: self.__field_outbox.writetobuffer(buf) if not self.outboxmsg: self.__field_inbox.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_outboxmsg=UINT(**{'sizeinbytes': 4}) self.__field_outboxmsg.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 4}) self.__field_pad.readfrombuffer(buf) if self.outboxmsg: self.__field_outbox=sms_out() self.__field_outbox.readfrombuffer(buf) if not self.outboxmsg: self.__field_inbox=sms_in() self.__field_inbox.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_outboxmsg(self): return self.__field_outboxmsg.getvalue() def __setfield_outboxmsg(self, value): if isinstance(value,UINT): self.__field_outboxmsg=value else: self.__field_outboxmsg=UINT(value,**{'sizeinbytes': 4}) def __delfield_outboxmsg(self): del self.__field_outboxmsg outboxmsg=property(__getfield_outboxmsg, __setfield_outboxmsg, __delfield_outboxmsg, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 4}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_outbox(self): return self.__field_outbox.getvalue() def __setfield_outbox(self, value): if isinstance(value,sms_out): self.__field_outbox=value else: self.__field_outbox=sms_out(value,) def __delfield_outbox(self): del self.__field_outbox outbox=property(__getfield_outbox, __setfield_outbox, __delfield_outbox, None) def __getfield_inbox(self): return self.__field_inbox.getvalue() def __setfield_inbox(self, value): if isinstance(value,sms_in): self.__field_inbox=value else: self.__field_inbox=sms_in(value,) def __delfield_inbox(self): del self.__field_inbox inbox=property(__getfield_inbox, __setfield_inbox, __delfield_inbox, None) def iscontainer(self): return True def containerelements(self): yield ('outboxmsg', self.__field_outboxmsg, None) yield ('pad', self.__field_pad, None) if self.outboxmsg: yield ('outbox', self.__field_outbox, None) if not self.outboxmsg: yield ('inbox', self.__field_inbox, None) class sms_out(BaseProtogenClass): __fields=['index', 'locked', 'timesent', 'subject', 'num_msg_elements', 'messages', 'unknown', 'priority', 'callback', 'recipients'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_out,self).__init__(**dict) if self.__class__ is sms_out: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_out,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_out,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 1}) self.__field_messages.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_callback.writetobuffer(buf) try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9 }) self.__field_recipients.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21}) self.__field_subject.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 1}) self.__field_messages.readfrombuffer(buf) self.__field_unknown=UNKNOWN(**{'sizeinbytes': 39}) self.__field_unknown.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 49}) self.__field_callback.readfrombuffer(buf) self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9 }) self.__field_recipients.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_messages(self): try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 1}) return self.__field_messages.getvalue() def __setfield_messages(self, value): if isinstance(value,LIST): self.__field_messages=value else: self.__field_messages=LIST(value,**{'elementclass': msg_record, 'length': 1}) def __delfield_messages(self): del self.__field_messages messages=property(__getfield_messages, __setfield_messages, __delfield_messages, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UNKNOWN): self.__field_unknown=value else: self.__field_unknown=UNKNOWN(value,**{'sizeinbytes': 39}) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 49}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_recipients(self): try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9 }) return self.__field_recipients.getvalue() def __setfield_recipients(self, value): if isinstance(value,LIST): self.__field_recipients=value else: self.__field_recipients=LIST(value,**{'elementclass': recipient_record,'length': 9 }) def __delfield_recipients(self): del self.__field_recipients recipients=property(__getfield_recipients, __setfield_recipients, __delfield_recipients, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('locked', self.__field_locked, None) yield ('timesent', self.__field_timesent, None) yield ('subject', self.__field_subject, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('messages', self.__field_messages, None) yield ('unknown', self.__field_unknown, None) yield ('priority', self.__field_priority, None) yield ('callback', self.__field_callback, None) yield ('recipients', self.__field_recipients, None) class SMSINBOXMSGFRAGMENT(BaseProtogenClass): __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSINBOXMSGFRAGMENT,self).__init__(**dict) if self.__class__ is SMSINBOXMSGFRAGMENT: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSINBOXMSGFRAGMENT,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSINBOXMSGFRAGMENT,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx3200_244, 'length': 181} dict2.update(kwargs) kwargs=dict2 self.__field_msg=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx3200_244, 'length': 181}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx3200_244, 'length': 181}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx3200_244, 'length': 181}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx3200_244, 'length': 181}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class _gen_p_lgvx3200_244(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx3200_244,self).__init__(**dict) if self.__class__ is _gen_p_lgvx3200_244: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx3200_244,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx3200_244,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class sms_in(BaseProtogenClass): __fields=['msg_index1', 'msg_index2', 'unknown2', 'unknown3', 'timesent', 'unknown', 'callback_length', 'callback', 'sender_length', 'sender', 'unknown4', 'lg_time', 'unknown1', 'GPStime', 'unknown5', 'read', 'locked', 'unknown8', 'priority', 'flags', 'subject', 'bin_header1', 'bin_header2', 'unknown6', 'multipartID', 'bin_header3', 'unknown2', 'num_msg_elements', 'msglengths', 'msgs', 'unknown5', 'senders_name', 'unknown6'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_in,self).__init__(**dict) if self.__class__ is sms_in: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_in,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_in,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msg_index1.writetobuffer(buf) self.__field_msg_index2.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self.__field_callback_length.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_sender_length.writetobuffer(buf) try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx3200_257, 'length': 38}) self.__field_sender.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_lg_time.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_flags.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_bin_header1.writetobuffer(buf) self.__field_bin_header2.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_multipartID.writetobuffer(buf) self.__field_bin_header3.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx3200_277, 'length': 1 }) self.__field_msglengths.writetobuffer(buf) try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 1, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_senders_name.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg_index1=UINT(**{'sizeinbytes': 4}) self.__field_msg_index1.readfrombuffer(buf) self.__field_msg_index2=UINT(**{'sizeinbytes': 4}) self.__field_msg_index2.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2}) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 4}) self.__field_unknown3.readfrombuffer(buf) self.__field_timesent=SMSDATE(**{'sizeinbytes': 6}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown=UINT(**{'sizeinbytes': 3}) self.__field_unknown.readfrombuffer(buf) self.__field_callback_length=UINT(**{'sizeinbytes': 1}) self.__field_callback_length.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 34}) self.__field_callback.readfrombuffer(buf) self.__field_sender_length=UINT(**{'sizeinbytes': 1}) self.__field_sender_length.readfrombuffer(buf) self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx3200_257, 'length': 38}) self.__field_sender.readfrombuffer(buf) self.__field_unknown4=DATA(**{'sizeinbytes': 12}) self.__field_unknown4.readfrombuffer(buf) self.__field_lg_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_lg_time.readfrombuffer(buf) self.__field_unknown1=UNKNOWN(**{'sizeinbytes': 3}) self.__field_unknown1.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 2}) self.__field_unknown5.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 1}) self.__field_read.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown8=UINT(**{'sizeinbytes': 2}) self.__field_unknown8.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_flags=DATA(**{'sizeinbytes': 5}) self.__field_flags.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21}) self.__field_subject.readfrombuffer(buf) self.__field_bin_header1=UINT(**{'sizeinbytes': 1}) self.__field_bin_header1.readfrombuffer(buf) self.__field_bin_header2=UINT(**{'sizeinbytes': 1}) self.__field_bin_header2.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 2}) self.__field_unknown6.readfrombuffer(buf) self.__field_multipartID=UINT(**{'sizeinbytes': 2}) self.__field_multipartID.readfrombuffer(buf) self.__field_bin_header3=UINT(**{'sizeinbytes': 1}) self.__field_bin_header3.readfrombuffer(buf) self.__field_unknown2=UNKNOWN(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx3200_277, 'length': 1 }) self.__field_msglengths.readfrombuffer(buf) self.__field_msgs=LIST(**{'length': 1, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.readfrombuffer(buf) self.__field_unknown5=DATA(**{'sizeinbytes': 44}) self.__field_unknown5.readfrombuffer(buf) self.__field_senders_name=USTRING(**{'sizeinbytes': 33}) self.__field_senders_name.readfrombuffer(buf) self.__field_unknown6=DATA() self.__field_unknown6.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg_index1(self): return self.__field_msg_index1.getvalue() def __setfield_msg_index1(self, value): if isinstance(value,UINT): self.__field_msg_index1=value else: self.__field_msg_index1=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index1(self): del self.__field_msg_index1 msg_index1=property(__getfield_msg_index1, __setfield_msg_index1, __delfield_msg_index1, None) def __getfield_msg_index2(self): return self.__field_msg_index2.getvalue() def __setfield_msg_index2(self, value): if isinstance(value,UINT): self.__field_msg_index2=value else: self.__field_msg_index2=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index2(self): del self.__field_msg_index2 msg_index2=property(__getfield_msg_index2, __setfield_msg_index2, __delfield_msg_index2, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,SMSDATE): self.__field_timesent=value else: self.__field_timesent=SMSDATE(value,**{'sizeinbytes': 6}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UINT): self.__field_unknown=value else: self.__field_unknown=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def __getfield_callback_length(self): return self.__field_callback_length.getvalue() def __setfield_callback_length(self, value): if isinstance(value,UINT): self.__field_callback_length=value else: self.__field_callback_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_length(self): del self.__field_callback_length callback_length=property(__getfield_callback_length, __setfield_callback_length, __delfield_callback_length, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 34}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_sender_length(self): return self.__field_sender_length.getvalue() def __setfield_sender_length(self, value): if isinstance(value,UINT): self.__field_sender_length=value else: self.__field_sender_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_sender_length(self): del self.__field_sender_length sender_length=property(__getfield_sender_length, __setfield_sender_length, __delfield_sender_length, None) def __getfield_sender(self): try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx3200_257, 'length': 38}) return self.__field_sender.getvalue() def __setfield_sender(self, value): if isinstance(value,LIST): self.__field_sender=value else: self.__field_sender=LIST(value,**{'elementclass': _gen_p_lgvx3200_257, 'length': 38}) def __delfield_sender(self): del self.__field_sender sender=property(__getfield_sender, __setfield_sender, __delfield_sender, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,DATA): self.__field_unknown4=value else: self.__field_unknown4=DATA(value,**{'sizeinbytes': 12}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_lg_time(self): return self.__field_lg_time.getvalue() def __setfield_lg_time(self, value): if isinstance(value,LGCALDATE): self.__field_lg_time=value else: self.__field_lg_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_lg_time(self): del self.__field_lg_time lg_time=property(__getfield_lg_time, __setfield_lg_time, __delfield_lg_time, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UNKNOWN): self.__field_unknown1=value else: self.__field_unknown1=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 1}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,UINT): self.__field_unknown8=value else: self.__field_unknown8=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_flags(self): return self.__field_flags.getvalue() def __setfield_flags(self, value): if isinstance(value,DATA): self.__field_flags=value else: self.__field_flags=DATA(value,**{'sizeinbytes': 5}) def __delfield_flags(self): del self.__field_flags flags=property(__getfield_flags, __setfield_flags, __delfield_flags, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_bin_header1(self): return self.__field_bin_header1.getvalue() def __setfield_bin_header1(self, value): if isinstance(value,UINT): self.__field_bin_header1=value else: self.__field_bin_header1=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header1(self): del self.__field_bin_header1 bin_header1=property(__getfield_bin_header1, __setfield_bin_header1, __delfield_bin_header1, None) def __getfield_bin_header2(self): return self.__field_bin_header2.getvalue() def __setfield_bin_header2(self, value): if isinstance(value,UINT): self.__field_bin_header2=value else: self.__field_bin_header2=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header2(self): del self.__field_bin_header2 bin_header2=property(__getfield_bin_header2, __setfield_bin_header2, __delfield_bin_header2, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_multipartID(self): return self.__field_multipartID.getvalue() def __setfield_multipartID(self, value): if isinstance(value,UINT): self.__field_multipartID=value else: self.__field_multipartID=UINT(value,**{'sizeinbytes': 2}) def __delfield_multipartID(self): del self.__field_multipartID multipartID=property(__getfield_multipartID, __setfield_multipartID, __delfield_multipartID, None) def __getfield_bin_header3(self): return self.__field_bin_header3.getvalue() def __setfield_bin_header3(self, value): if isinstance(value,UINT): self.__field_bin_header3=value else: self.__field_bin_header3=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header3(self): del self.__field_bin_header3 bin_header3=property(__getfield_bin_header3, __setfield_bin_header3, __delfield_bin_header3, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UNKNOWN): self.__field_unknown2=value else: self.__field_unknown2=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_msglengths(self): try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx3200_277, 'length': 1 }) return self.__field_msglengths.getvalue() def __setfield_msglengths(self, value): if isinstance(value,LIST): self.__field_msglengths=value else: self.__field_msglengths=LIST(value,**{'elementclass': _gen_p_lgvx3200_277, 'length': 1 }) def __delfield_msglengths(self): del self.__field_msglengths msglengths=property(__getfield_msglengths, __setfield_msglengths, __delfield_msglengths, None) def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 1, 'elementclass': SMSINBOXMSGFRAGMENT}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'length': 1, 'elementclass': SMSINBOXMSGFRAGMENT}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,DATA): self.__field_unknown5=value else: self.__field_unknown5=DATA(value,**{'sizeinbytes': 44}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_senders_name(self): return self.__field_senders_name.getvalue() def __setfield_senders_name(self, value): if isinstance(value,USTRING): self.__field_senders_name=value else: self.__field_senders_name=USTRING(value,**{'sizeinbytes': 33}) def __delfield_senders_name(self): del self.__field_senders_name senders_name=property(__getfield_senders_name, __setfield_senders_name, __delfield_senders_name, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,DATA): self.__field_unknown6=value else: self.__field_unknown6=DATA(value,) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def iscontainer(self): return True def containerelements(self): yield ('msg_index1', self.__field_msg_index1, None) yield ('msg_index2', self.__field_msg_index2, None) yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) yield ('timesent', self.__field_timesent, None) yield ('unknown', self.__field_unknown, None) yield ('callback_length', self.__field_callback_length, None) yield ('callback', self.__field_callback, None) yield ('sender_length', self.__field_sender_length, None) yield ('sender', self.__field_sender, None) yield ('unknown4', self.__field_unknown4, None) yield ('lg_time', self.__field_lg_time, None) yield ('unknown1', self.__field_unknown1, None) yield ('GPStime', self.__field_GPStime, None) yield ('unknown5', self.__field_unknown5, None) yield ('read', self.__field_read, None) yield ('locked', self.__field_locked, None) yield ('unknown8', self.__field_unknown8, None) yield ('priority', self.__field_priority, None) yield ('flags', self.__field_flags, None) yield ('subject', self.__field_subject, None) yield ('bin_header1', self.__field_bin_header1, None) yield ('bin_header2', self.__field_bin_header2, None) yield ('unknown6', self.__field_unknown6, None) yield ('multipartID', self.__field_multipartID, None) yield ('bin_header3', self.__field_bin_header3, None) yield ('unknown2', self.__field_unknown2, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('msglengths', self.__field_msglengths, None) yield ('msgs', self.__field_msgs, None) yield ('unknown5', self.__field_unknown5, None) yield ('senders_name', self.__field_senders_name, None) yield ('unknown6', self.__field_unknown6, None) class _gen_p_lgvx3200_257(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx3200_257,self).__init__(**dict) if self.__class__ is _gen_p_lgvx3200_257: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx3200_257,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx3200_257,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of senders phone number") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of senders phone number") class _gen_p_lgvx3200_277(BaseProtogenClass): 'Anonymous inner class' __fields=['msglength'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx3200_277,self).__init__(**dict) if self.__class__ is _gen_p_lgvx3200_277: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx3200_277,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx3200_277,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_msglength=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msglength.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msglength=UINT(**{'sizeinbytes': 1}) self.__field_msglength.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msglength(self): return self.__field_msglength.getvalue() def __setfield_msglength(self, value): if isinstance(value,UINT): self.__field_msglength=value else: self.__field_msglength=UINT(value,**{'sizeinbytes': 1}) def __delfield_msglength(self): del self.__field_msglength msglength=property(__getfield_msglength, __setfield_msglength, __delfield_msglength, "lengths of individual messages in septets") def iscontainer(self): return True def containerelements(self): yield ('msglength', self.__field_msglength, "lengths of individual messages in septets") class sms_quick_text(BaseProtogenClass): __fields=['msgs'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_quick_text,self).__init__(**dict) if self.__class__ is sms_quick_text: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_quick_text,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_quick_text,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx3200_293, } dict2.update(kwargs) kwargs=dict2 self.__field_msgs=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx3200_293, }) self.__field_msgs.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx3200_293, }) self.__field_msgs.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx3200_293, }) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'elementclass': _gen_p_lgvx3200_293, }) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def iscontainer(self): return True def containerelements(self): yield ('msgs', self.__field_msgs, None) class _gen_p_lgvx3200_293(BaseProtogenClass): 'Anonymous inner class' __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx3200_293,self).__init__(**dict) if self.__class__ is _gen_p_lgvx3200_293: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx3200_293,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx3200_293,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_msg=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=USTRING(**{}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class textmemo(BaseProtogenClass): __fields=['text'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemo,self).__init__(**dict) if self.__class__ is textmemo: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemo,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemo,kwargs) if len(args): dict2={'sizeinbytes': 151, 'raiseonunterminatedread': False, 'raiseontruncate': False } dict2.update(kwargs) kwargs=dict2 self.__field_text=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_text.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_text=USTRING(**{'sizeinbytes': 151, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_text.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,USTRING): self.__field_text=value else: self.__field_text=USTRING(value,**{'sizeinbytes': 151, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def iscontainer(self): return True def containerelements(self): yield ('text', self.__field_text, None) class textmemofile(BaseProtogenClass): __fields=['itemcount', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemofile,self).__init__(**dict) if self.__class__ is textmemofile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemofile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemofile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_itemcount.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_itemcount=UINT(**{'sizeinbytes': 4}) self.__field_itemcount.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_itemcount(self): return self.__field_itemcount.getvalue() def __setfield_itemcount(self, value): if isinstance(value,UINT): self.__field_itemcount=value else: self.__field_itemcount=UINT(value,**{'sizeinbytes': 4}) def __delfield_itemcount(self): del self.__field_itemcount itemcount=property(__getfield_itemcount, __setfield_itemcount, __delfield_itemcount, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': textmemo }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('itemcount', self.__field_itemcount, None) yield ('items', self.__field_items, None) bitpim-1.0.7+dfsg1/src/phones/p_samsungspha740.py0000644001616600161660000000076110373546155017724 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Proposed descriptions of data usign AT commands""" from prototypes import * from p_samsung_packet import * from p_samsungspha620 import * # We use LSB for all integer like fields in diagnostic mode UINT=UINTlsb BOOL=BOOLlsb # NUMPHONEBOOKENTRIES=300 NUMEMAILS=3 NUMPHONENUMBERS=6 MAXNUMBERLEN=32 NUMTODOENTRIES=9 NUMSMSENTRIES=94 NUMGROUPS=4 AMSREGISTRY="ams/AmsRegistry" DEFAULT_RINGTONE=0 DEFAULT_WALLPAPER=0 bitpim-1.0.7+dfsg1/src/phones/com_lgvx4400.py0000644001616600161660000017426411041000662016736 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgvx4400.py 4636 2008-07-21 03:25:38Z djpham $ """Communicate with the LG VX4400 cell phone""" # standard modules import datetime import re import time import cStringIO import sha # my modules import bpcalendar import common import commport import copy import p_lgvx4400 import p_brew import com_brew import com_phone import com_lg import helpids import prototypes import fileinfo import call_history import sms import memo class Phone(com_phone.Phone,com_brew.BrewProtocol,com_lg.LGPhonebook,com_lg.LGIndexedMedia): "Talk to the LG VX4400 cell phone" desc="LG-VX4400" helpid=helpids.ID_PHONE_LGVX4400 wallpaperindexfilename="dloadindex/brewImageIndex.map" ringerindexfilename="dloadindex/brewRingerIndex.map" protocolclass=p_lgvx4400 serialsname='lgvx4400' imagelocations=( # offset, index file, files location, type, maximumentries ( 10, "dloadindex/brewImageIndex.map", "brew/shared", "images", 30), ) ringtonelocations=( # offset, index file, files location, type, maximumentries ( 50, "dloadindex/brewRingerIndex.map", "user/sound/ringer", "ringers", 30), ) builtinimages=('Balloons', 'Soccer', 'Basketball', 'Bird', 'Sunflower', 'Puppy', 'Mountain House', 'Beach') builtinringtones=( 'Ring 1', 'Ring 2', 'Ring 3', 'Ring 4', 'Ring 5', 'Ring 6', 'Voices of Spring', 'Twinkle Twinkle', 'The Toreadors', 'Badinerie', 'The Spring', 'Liberty Bell', 'Trumpet Concerto', 'Eine Kleine', 'Silken Ladder', 'Nocturne', 'Csikos Post', 'Turkish March', 'Mozart Aria', 'La Traviata', 'Rag Time', 'Radetzky March', 'Can-Can', 'Sabre Dance', 'Magic Flute', 'Carmen' ) def __init__(self, logtarget, commport): "Calls all the constructors and sets initial modes" com_phone.Phone.__init__(self, logtarget, commport) com_brew.BrewProtocol.__init__(self) com_lg.LGPhonebook.__init__(self) com_lg.LGIndexedMedia.__init__(self) self.log("Attempting to contact phone") self.mode=self.MODENONE self._cal_has_voice_id=hasattr(self.protocolclass, 'cal_has_voice_id') \ and self.protocolclass.cal_has_voice_id def getfundamentals(self, results): """Gets information fundamental to interopating with the phone and UI. Currently this is: - 'uniqueserial' a unique serial number representing the phone - 'groups' the phonebook groups - 'wallpaper-index' map index numbers to names - 'ringtone-index' map index numbers to ringtone names This method is called before we read the phonebook data or before we write phonebook data. """ # use a hash of ESN and other stuff (being paranoid) self.log("Retrieving fundamental phone information") self.log("Phone serial number") results['uniqueserial']=sha.new(self.get_esn()).hexdigest() self.getgroups(results) self.getwallpaperindices(results) self.getringtoneindices(results) self.log("Fundamentals retrieved") return results def savesms(self, result, merge): self._setquicktext(result) result['rebootphone']=True return result def _setquicktext(self, result): sf=self.protocolclass.sms_quick_text() quicktext=result.get('canned_msg', []) count=0 for entry in quicktext: if count < self.protocolclass.SMS_CANNED_MAX_ITEMS: sf.msgs.append(entry['text'][:self.protocolclass.SMS_CANNED_MAX_LENGTH-1]) count+=1 else: break if count!=0: # don't create the file if there are no entries buf=prototypes.buffer() sf.writetobuffer(buf, logtitle="Writing calendar") self.writefile(self.protocolclass.SMS_CANNED_FILENAME, buf.getvalue()) return def getsms(self, result): # get the quicktext (LG name for canned messages) result['canned_msg']=self._getquicktext() result['sms']=self._readsms() return result def _readsms(self): res={} # go through the sms directory looking for messages for item in self.listfiles("sms").values(): folder=None for f,pat in self.protocolclass.SMS_PATTERNS.items(): if pat.match(item['name']): folder=f break if folder: buf=prototypes.buffer(self.getfilecontents(item['name'], True)) self.logdata("SMS message file " +item['name'], buf.getdata()) if folder=='Inbox': sf=self.protocolclass.sms_in() sf.readfrombuffer(buf, logtitle="SMS inbox item") entry=self._getinboxmessage(sf) res[entry.id]=entry elif folder=='Sent': sf=self.protocolclass.sms_out() sf.readfrombuffer(buf, logtitle="SMS sent item") entry=self._getoutboxmessage(sf) res[entry.id]=entry elif folder=='Saved': sf=self.protocolclass.sms_saved() sf.readfrombuffer(buf, logtitle="SMS saved item") if sf.outboxmsg: entry=self._getoutboxmessage(sf.outbox) else: entry=self._getinboxmessage(sf.inbox) entry.folder=entry.Folder_Saved res[entry.id]=entry return res def _getquicktext(self): quicks=[] try: buf=prototypes.buffer(self.getfilecontents("sms/mediacan000.dat")) sf=self.protocolclass.sms_quick_text() sf.readfrombuffer(buf, logtitle="SMS quicktext file sms/mediacan000.dat") for rec in sf.msgs: if rec.msg!="": quicks.append({ 'text': rec.msg, 'type': sms.CannedMsgEntry.user_type }) except com_brew.BrewNoSuchFileException: pass # do nothing if file doesn't exist return quicks def _getinboxmessage(self, sf): entry=sms.SMSEntry() entry.folder=entry.Folder_Inbox entry.datetime="%d%02d%02dT%02d%02d%02d" % (sf.GPStime) entry._from=self._getsender(sf.sender, sf.sender_length) entry.subject=sf.subject entry.locked=sf.locked if sf.priority==0: entry.priority=sms.SMSEntry.Priority_Normal else: entry.priority=sms.SMSEntry.Priority_High entry.read=sf.read txt="" if sf.num_msg_elements==1 and sf.bin_header1==0: txt=self._get_text_from_sms_msg_without_header(sf.msgs[0].msg, sf.msglengths[0].msglength) else: for i in range(sf.num_msg_elements): txt+=self._get_text_from_sms_msg_with_header(sf.msgs[i].msg, sf.msglengths[i].msglength) entry.text=unicode(txt, errors='ignore') entry.callback=sf.callback return entry def _getoutboxmessage(self, sf): entry=sms.SMSEntry() entry.folder=entry.Folder_Sent entry.datetime="%d%02d%02dT%02d%02d00" % sf.timesent[:5] # add all the recipients for r in sf.recipients: if r.number: confirmed=(r.status==5) confirmed_date=None if confirmed: confirmed_date="%d%02d%02dT%02d%02d00" % r.timereceived entry.add_recipient(r.number, confirmed, confirmed_date) entry.subject=sf.subject txt="" if sf.num_msg_elements==1 and not sf.messages[0].binary: txt=self._get_text_from_sms_msg_without_header(sf.messages[0].msg, sf.messages[0].length) else: for i in range(sf.num_msg_elements): txt+=self._get_text_from_sms_msg_with_header(sf.messages[i].msg, sf.messages[i].length) entry.text=unicode(txt, errors='ignore') if sf.priority==0: entry.priority=sms.SMSEntry.Priority_Normal else: entry.priority=sms.SMSEntry.Priority_High entry.locked=sf.locked entry.callback=sf.callback return entry def _get_text_from_sms_msg_without_header(self, msg, num_septets): out="" for i in range(num_septets): tmp = (msg[(i*7)/8].byte<<8) | msg[((i*7)/8) + 1].byte bit_index = 9 - ((i*7) % 8) out += chr((tmp >> bit_index) & 0x7f) return out def _get_text_from_sms_msg_with_header(self, msg, num_septets): data_len = ((msg[0].byte+1)*8+6)/7 seven_bits={} raw={} out={} # re-order the text into the correct order for separating into # 7-bit characters for i in range(0, (num_septets*7)/8+8, 7): for k in range(7): raw[i+6-k]=msg[i+k].byte # extract the 7-bit chars for i in range(num_septets+7): tmp = (raw[(i*7)/8]<<8) | raw[((i*7)/8) + 1] bit_index = 9 - ((i*7) % 8) seven_bits[i] = (tmp >> bit_index) & 0x7f # correct the byte order and remove the data portion of the message i=0 for i in range(0, num_septets+7, 8): for k in range(8): if(i+7-k-data_len>=0): if i+kself.protocolclass.NUMPHONEBOOKENTRIES: continue l=speeds.get(sd.speeddials[i].entry, []) l.append((i, sd.speeddials[i].number)) speeds[sd.speeddials[i].entry]=l except com_brew.BrewNoSuchFileException: pass pbook={} # Bug in the phone. if you repeatedly read the phone book it starts # returning a random number as the number of entries. We get around # this by switching into brew mode which clears that. self.mode=self.MODENONE self.setmode(self.MODEBREW) self.log("Reading number of phonebook entries") req=self.protocolclass.pbinforequest() res=self.sendpbcommand(req, self.protocolclass.pbinforesponse) numentries=res.numentries if numentries<0 or numentries>1000: self.log("The phone is lying about how many entries are in the phonebook so we are doing it the hard way") numentries=0 firstserial=None loop=xrange(0,1000) hardway=True else: self.log("There are %d entries" % (numentries,)) loop=xrange(0, numentries) hardway=False # reset cursor self.sendpbcommand(self.protocolclass.pbinitrequest(), self.protocolclass.pbinitresponse) problemsdetected=False dupecheck={} for i in loop: try: if hardway: numentries+=1 req=self.protocolclass.pbreadentryrequest() res=self.sendpbcommand(req, self.protocolclass.pbreadentryresponse) self.log("Read entry "+`i`+" - "+res.entry.name) entry=self.extractphonebookentry(res.entry, speeds, result) if hardway and firstserial is None: firstserial=res.entry.serial1 pbook[i]=entry if res.entry.serial1 in dupecheck: self.log("Entry %s has same serial as entry %s. This will cause problems." % (`entry`, dupecheck[res.entry.serial1])) problemsdetected=True else: dupecheck[res.entry.serial1]=entry self.progress(i, numentries, res.entry.name) except common.PhoneBookBusyException: raise except Exception, e: # Something's wrong with this entry, log it and skip self.log('Failed to read entry %d'%i) self.log('Exception %s raised'%`e`) if __debug__: raise #### Advance to next entry req=self.protocolclass.pbnextentryrequest() res=self.sendpbcommand(req, self.protocolclass.pbnextentryresponse) if hardway: # look to see if we have looped if res.serial==firstserial or res.serial==0: break self.progress(numentries, numentries, "Phone book read completed") if problemsdetected: self.log("There are duplicate serial numbers. See above for details.") raise common.IntegrityCheckFailed(self.desc, "Data in phonebook is inconsistent. There are multiple entries with the same serial number. See the log.") result['phonebook']=pbook cats=[] for i in result['groups']: if result['groups'][i]['name']!='No Group': cats.append(result['groups'][i]['name']) result['categories']=cats print "returning keys",result.keys() return pbook def getgroups(self, results): self.log("Reading group information") buf=prototypes.buffer(self.getfilecontents("pim/pbgroup.dat")) g=self.protocolclass.pbgroups() g.readfrombuffer(buf, logtitle="Groups read") groups={} for i in range(len(g.groups)): if len(g.groups[i].name): # sometimes have zero length names groups[i]={ 'icon': g.groups[i].icon, 'name': g.groups[i].name } results['groups']=groups return groups def savegroups(self, data): groups=data['groups'] keys=groups.keys() keys.sort() g=self.protocolclass.pbgroups() for k in keys: e=self.protocolclass.pbgroup() e.icon=groups[k]['icon'] e.name=groups[k]['name'] g.groups.append(e) buffer=prototypes.buffer() g.writetobuffer(buffer, logtitle="New group file") self.writefile("pim/pbgroup.dat", buffer.getvalue()) def savephonebook(self, data): "Saves out the phonebook" self.savegroups(data) progressmax=len(data['phonebook'].keys()) # if we are going to write out speeddials, we have to re-read the entire # phonebook again if data.get('speeddials',None) is not None: progressmax+=len(data['phonebook'].keys()) # To write the phone book, we scan through all existing entries # and record their record number and serials. # We then delete any entries that aren't in data # We then write out our records, using overwrite or append # commands as necessary serialupdates=[] existingpbook={} # keep track of the phonebook that is on the phone self.mode=self.MODENONE self.setmode(self.MODEBREW) # see note in getphonebook() for why this is necessary self.setmode(self.MODEPHONEBOOK) # similar loop to reading req=self.protocolclass.pbinforequest() res=self.sendpbcommand(req, self.protocolclass.pbinforesponse) numexistingentries=res.numentries if numexistingentries<0 or numexistingentries>1000: self.log("The phone is lying about how many entries are in the phonebook so we are doing it the hard way") numexistingentries=0 firstserial=None loop=xrange(0,1000) hardway=True else: self.log("There are %d existing entries" % (numexistingentries,)) progressmax+=numexistingentries loop=xrange(0, numexistingentries) hardway=False progresscur=0 # reset cursor self.sendpbcommand(self.protocolclass.pbinitrequest(), self.protocolclass.pbinitresponse) for i in loop: ### Read current entry if hardway: numexistingentries+=1 progressmax+=1 req=self.protocolclass.pbreadentryrequest() res=self.sendpbcommand(req, self.protocolclass.pbreadentryresponse) entry={ 'number': res.entry.entrynumber, 'serial1': res.entry.serial1, 'serial2': res.entry.serial2, 'name': res.entry.name} assert entry['serial1']==entry['serial2'] # always the same self.log("Reading entry "+`i`+" - "+entry['name']) if hardway and firstserial is None: firstserial=res.entry.serial1 existingpbook[i]=entry self.progress(progresscur, progressmax, "existing "+entry['name']) #### Advance to next entry req=self.protocolclass.pbnextentryrequest() res=self.sendpbcommand(req, self.protocolclass.pbnextentryresponse) progresscur+=1 if hardway: # look to see if we have looped if res.serial==firstserial or res.serial==0: break # we have now looped around back to begining # Find entries that have been deleted pbook=data['phonebook'] dellist=[] for i in range(0, numexistingentries): ii=existingpbook[i] serial=ii['serial1'] item=self._findserial(serial, pbook) if item is None: dellist.append(i) progressmax+=len(dellist) # more work to do # Delete those entries for i in dellist: progresscur+=1 numexistingentries-=1 # keep count right ii=existingpbook[i] self.log("Deleting entry "+`i`+" - "+ii['name']) req=self.protocolclass.pbdeleteentryrequest() req.serial1=ii['serial1'] req.serial2=ii['serial2'] req.entrynumber=ii['number'] self.sendpbcommand(req, self.protocolclass.pbdeleteentryresponse) self.progress(progresscur, progressmax, "Deleting "+ii['name']) # also remove them from existingpbook del existingpbook[i] # counter to keep track of record number (otherwise appends don't work) counter=0 # Now rewrite out existing entries keys=existingpbook.keys() existingserials=[] keys.sort() # do in same order as existingpbook for i in keys: progresscur+=1 ii=pbook[self._findserial(existingpbook[i]['serial1'], pbook)] self.log("Rewriting entry "+`i`+" - "+ii['name']) self.progress(progresscur, progressmax, "Rewriting "+ii['name']) entry=self.makeentry(counter, ii, data) counter+=1 existingserials.append(existingpbook[i]['serial1']) req=self.protocolclass.pbupdateentryrequest() req.entry=entry res=self.sendpbcommand(req, self.protocolclass.pbupdateentryresponse) serialupdates.append( ( ii["bitpimserial"], {'sourcetype': self.serialsname, 'serial1': res.serial1, 'serial2': res.serial1, 'sourceuniqueid': data['uniqueserial']}) ) assert ii['serial1']==res.serial1 # serial should stay the same # Finally write out new entries keys=pbook.keys() keys.sort() for i in keys: try: ii=pbook[i] if ii['serial1'] in existingserials: continue # already wrote this one out progresscur+=1 entry=self.makeentry(counter, ii, data) counter+=1 self.log("Appending entry "+ii['name']) self.progress(progresscur, progressmax, "Writing "+ii['name']) req=self.protocolclass.pbappendentryrequest() req.entry=entry res=self.sendpbcommand(req, self.protocolclass.pbappendentryresponse) serialupdates.append( ( ii["bitpimserial"], {'sourcetype': self.serialsname, 'serial1': res.newserial, 'serial2': res.newserial, 'sourceuniqueid': data['uniqueserial']}) ) except: self.log('Failed to write entry: '+ii['name']) if __debug__: raise data["serialupdates"]=serialupdates # deal with the speeddials if data.get("speeddials",None) is not None: # Yes, we have to read the ENTIRE phonebook again. This # is because we don't know which entry numbers actually # got assigned to the various entries, and we need the # actual numbers to assign to the speed dials newspeeds={} if len(data['speeddials']): # Move cursor to begining of phonebook self.mode=self.MODENONE self.setmode(self.MODEBREW) # see note in getphonebook() for why this is necessary self.setmode(self.MODEPHONEBOOK) self.log("Searching for speed dials") self.sendpbcommand(self.protocolclass.pbinitrequest(), self.protocolclass.pbinitresponse) for i in range(len(pbook)): ### Read current entry req=self.protocolclass.pbreadentryrequest() res=self.sendpbcommand(req, self.protocolclass.pbreadentryresponse) self.log("Scanning "+res.entry.name) progresscur+=1 # we have to turn the entry serial number into a bitpim serial serial=res.entry.serial1 found=False for bps, serials in serialupdates: if serials['serial1']==serial: # found the entry for sd in data['speeddials']: xx=data['speeddials'][sd] if xx[0]==bps: found=True if(getattr(self.protocolclass, 'SPEEDDIALINDEX', 0)==0): newspeeds[sd]=(res.entry.entrynumber, xx[1]) else: newspeeds[sd]=(res.entry.entrynumber, res.entry.numbertypes[xx[1]].numbertype) nt=self.protocolclass.numbertypetab[res.entry.numbertypes[xx[1]].numbertype] self.log("Speed dial #%d = %s (%s/%d)" % (sd, res.entry.name, nt, xx[1])) self.progress(progresscur, progressmax, "Speed dial #%d = %s (%s/%d)" % (sd, res.entry.name, nt, xx[1])) if not found: self.progress(progresscur, progressmax, "Scanning "+res.entry.name) # move to next entry self.sendpbcommand(self.protocolclass.pbnextentryrequest(), self.protocolclass.pbnextentryresponse) self.progress(progressmax, progressmax, "Finished scanning") print "new speed dials is",newspeeds req=self.protocolclass.speeddials() for i in range(self.protocolclass.NUMSPEEDDIALS): sd=self.protocolclass.speeddial() if i in newspeeds: sd.entry=newspeeds[i][0] sd.number=newspeeds[i][1] req.speeddials.append(sd) buffer=prototypes.buffer() req.writetobuffer(buffer, logtitle="New speed dials") # We check the existing speed dial file as changes require a reboot self.log("Checking existing speed dials") if buffer.getvalue()!=self.getfilecontents("pim/pbspeed.dat"): self.writefile("pim/pbspeed.dat", buffer.getvalue()) self.log("Your phone has to be rebooted due to the speed dials changing") self.progress(progressmax, progressmax, "Rebooting phone") data["rebootphone"]=True else: self.log("No changes to speed dials") return data def _findserial(self, serial, dict): """Searches dict to find entry with matching serial. If not found, returns None""" for i in dict: if dict[i]['serial1']==serial: return i return None def _normaliseindices(self, d): "turn all negative keys into positive ones for index" res={} keys=d.keys() keys.sort() keys.reverse() for k in keys: if k<0: for c in range(999999): if c not in keys and c not in res: break res[c]=d[k] else: res[k]=d[k] return res def extractphonebookentry(self, entry, speeds, fundamentals): """Return a phonebook entry in BitPim format. This is called from getphonebook.""" res={} # serials res['serials']=[ {'sourcetype': self.serialsname, 'serial1': entry.serial1, 'serial2': entry.serial2, 'sourceuniqueid': fundamentals['uniqueserial']} ] # only one name res['names']=[ {'full': entry.name} ] # only one category cat=fundamentals['groups'].get(entry.group, {'name': "No Group"})['name'] if cat!="No Group": res['categories']=[ {'category': cat} ] # emails res['emails']=[] for i in entry.emails: if len(i.email): res['emails'].append( {'email': i.email} ) if not len(res['emails']): del res['emails'] # it was empty # urls if 'url' in entry.getfields() and len(entry.url): res['urls']=[ {'url': entry.url} ] # private if 'secret' in entry.getfields() and entry.secret: # we only supply secret if it is true res['flags']=[ {'secret': entry.secret } ] # memos if 'memo' in entry.getfields() and len(entry.memo): res['memos']=[ {'memo': entry.memo } ] # wallpapers if entry.wallpaper!=self.protocolclass.NOWALLPAPER: try: paper=fundamentals['wallpaper-index'][entry.wallpaper]['name'] res['wallpapers']=[ {'wallpaper': paper, 'use': 'call'} ] except: print "can't find wallpaper for index",entry.wallpaper pass # ringtones res['ringtones']=[] if 'ringtone' in entry.getfields() and entry.ringtone!=self.protocolclass.NORINGTONE: try: tone=fundamentals['ringtone-index'][entry.ringtone]['name'] res['ringtones'].append({'ringtone': tone, 'use': 'call'}) except: print "can't find ringtone for index",entry.ringtone if 'msgringtone' in entry.getfields() and entry.msgringtone!=self.protocolclass.NOMSGRINGTONE: try: tone=fundamentals['ringtone-index'][entry.msgringtone]['name'] res['ringtones'].append({'ringtone': tone, 'use': 'message'}) except: print "can't find ringtone for index",entry.msgringtone if len(res['ringtones'])==0: del res['ringtones'] if(getattr(self.protocolclass, 'SPEEDDIALINDEX', 0)==0): res=self._assignpbtypeandspeeddialsbyposition(entry, speeds, res) else: res=self._assignpbtypeandspeeddialsbytype(entry, speeds, res) return res def _assignpbtypeandspeeddialsbyposition(self, entry, speeds, res): # numbers res['numbers']=[] for i in range(self.protocolclass.NUMPHONENUMBERS): num=entry.numbers[i].number type=entry.numbertypes[i].numbertype if len(num): t=self.protocolclass.numbertypetab[type] if t[-1]=='2': t=t[:-1] res['numbers'].append({'number': num, 'type': t}) # speed dials if entry.entrynumber in speeds: for speeddial,numberindex in speeds[entry.entrynumber]: try: res['numbers'][numberindex]['speeddial']=speeddial except IndexError: print "speed dial refers to non-existent number\n",res['numbers'],"\n",numberindex,speeddial return res def _assignpbtypeandspeeddialsbytype(self, entry, speeds, res): # for some phones (e.g. vx8100) the speeddial numberindex is really the numbertype (now why would LG want to change this!) _sd_list=speeds.get(entry.entrynumber, []) _sd_dict={} for _sd in _sd_list: _sd_dict[_sd[1]]=_sd[0] res['numbers']=[] for i in range(self.protocolclass.NUMPHONENUMBERS): num=entry.numbers[i].number type=entry.numbertypes[i].numbertype if len(num): t=self.protocolclass.numbertypetab[type] if t[-1]=='2': t=t[:-1] res['numbers'].append({'number': num, 'type': t}) # if this is a speeddial number set it if _sd_dict.get(type, None): res['numbers'][i]['speeddial']=_sd_dict[type] return res def _findmediainindex(self, index, name, pbentryname, type): if type=="ringtone": default=self.protocolclass.NORINGTONE elif type=="message ringtone": default=self.protocolclass.NOMSGRINGTONE elif type=="wallpaper": default=self.protocolclass.NOWALLPAPER else: assert False, "unknown type "+type if name is None: return default for i in index: if index[i]['name']==name: return i self.log("%s: Unable to find %s %s in the index. Setting to default." % (pbentryname, type, name)) return default def makeentry(self, counter, entry, data): """Creates pbentry object @param counter: The new entry number @param entry: The phonebook object (as returned from convertphonebooktophone) that we are using as the source @param data: The main dictionary, which we use to get access to media indices amongst other things """ e=self.protocolclass.pbentry() e.entrynumber=counter for k in entry: # special treatment for lists if k in ('emails', 'numbers', 'numbertypes'): l=getattr(e,k) for item in entry[k]: l.append(item) elif k=='ringtone': e.ringtone=self._findmediainindex(data['ringtone-index'], entry['ringtone'], entry['name'], 'ringtone') elif k=='msgringtone': e.msgringtone=self._findmediainindex(data['ringtone-index'], entry['msgringtone'], entry['name'], 'message ringtone') elif k=='wallpaper': e.wallpaper=self._findmediainindex(data['wallpaper-index'], entry['wallpaper'], entry['name'], 'wallpaper') elif k in e.getfields(): # everything else we just set setattr(e,k,entry[k]) return e def is_mode_brew(self): req=p_brew.memoryconfigrequest() respc=p_brew.memoryconfigresponse for baud in 0, 38400, 115200: if baud: if not self.comm.setbaudrate(baud): continue try: self.sendbrewcommand(req, respc, callsetmode=False) return True except com_phone.modeignoreerrortypes: pass return False brew_version_txt_key='brew_version.txt' brew_version_file='brew/version.txt' lgpbinfo_key='lgpbinfo' esn_file_key='esn_file' esn_file='nvm/$SYS.ESN' my_model='VX4400' def get_detect_data(self, res): # get the data needed for detection if not res.has_key(self.brew_version_txt_key): # read the BREW version.txt file, which may contain phone model info print 'reading BREW version.txt' try: # read this file s=self.getfilecontents(self.brew_version_file) res[self.brew_version_txt_key]=s except (com_brew.BrewNoSuchFileException, com_brew.BrewBadBrewCommandException, com_brew.BrewAccessDeniedException): res[self.brew_version_txt_key]=None except: if __debug__: raise res[self.brew_version_txt_key]=None # get pbinfo data, which also may include phone model if not res.has_key(self.lgpbinfo_key): print 'getting pbinfo' try: req=self.protocolclass.pbinforequest() resp=self.sendpbcommand(req, self.protocolclass.pbstartsyncresponse) res[self.lgpbinfo_key]=resp.unknown except com_brew.BrewBadBrewCommandException: res[self.lgpbinfo_key]=None except: if __debug__: raise res[self.lgpbinfo_key]=None # attempt the get the ESN if not res.has_key(self.esn_file_key): print 'reading ESN file' try: s=self.getfilecontents(self.esn_file) res[self.esn_file_key]=s except: res[self.esn_file_key]=None def get_esn(self, data=None): # return the ESN for this phone try: if data is None: s=self.getfilecontents(self.esn_file) else: s=data if s: s=s[85:89] return '%02X%02X%02X%02X'%(ord(s[3]), ord(s[2]), ord(s[1]), ord(s[0])) except: if __debug__: raise def eval_detect_data(self, res): found=False if res.get(self.brew_version_txt_key, None) is not None: found=res[self.brew_version_txt_key][:len(self.my_model)]==self.my_model if not found and res.get(self.lgpbinfo_key, None): found=res[self.lgpbinfo_key].find(self.my_model)!=-1 if found: res['model']=self.my_model res['manufacturer']='LG Electronics Inc' s=res.get(self.esn_file_key, None) if s: res['esn']=self.get_esn(s) @classmethod def detectphone(_, coms, likely_ports, res, _module, _log): if not likely_ports: # cannot detect any likely ports return None for port in likely_ports: if not res.has_key(port): res[port]={ 'mode_modem': None, 'mode_brew': None, 'manufacturer': None, 'model': None, 'firmware_version': None, 'esn': None, 'firmwareresponse': None } try: if res[port]['mode_brew']==False or \ res[port]['model']: # either phone is not in BREW, or a model has already # been found, not much we can do now continue p=_module.Phone(_log, commport.CommConnection(_log, port, timeout=1)) if res[port]['mode_brew'] is None: res[port]['mode_brew']=p.is_mode_brew() if res[port]['mode_brew']: p.get_detect_data(res[port]) p.eval_detect_data(res[port]) p.comm.close() except: if __debug__: raise # Calendar stuff------------------------------------------------------------ def getcalendar(self,result): # Read exceptions file first try: buf=prototypes.buffer(self.getfilecontents( self.protocolclass.cal_exception_file_name)) ex=self.protocolclass.scheduleexceptionfile() ex.readfrombuffer(buf, logtitle="Calendar exceptions") exceptions={} for i in ex.items: exceptions.setdefault(i.pos, []).append( (i.year,i.month,i.day) ) except com_brew.BrewNoSuchFileException: exceptions={} # Now read schedule try: buf=prototypes.buffer(self.getfilecontents( self.protocolclass.cal_data_file_name)) if len(buf.getdata())<2: # file is empty, and hence same as non-existent raise com_brew.BrewNoSuchFileException() sc=self.protocolclass.schedulefile() sc.readfrombuffer(buf, logtitle="Calendar") res=self.get_cal(sc, exceptions, result.get('ringtone-index', {})) except com_brew.BrewNoSuchFileException: res={} result['calendar']=res return result def savecalendar(self, dict, merge): # ::TODO:: obey merge param # get the list of available voice alarm files voice_files={} if self._cal_has_voice_id: try: file_list=self.listfiles(self.protocolclass.cal_dir) for k in file_list.keys(): if k.endswith(self.protocolclass.cal_voice_ext): voice_files[int(k[8:11])]=k except: self.log('Failed to list Calendar Voice Files') # build the schedule file sc=self.protocolclass.schedulefile() sc_ex=self.set_cal(sc, dict.get('calendar', {}), dict.get('ringtone-index', {}), voice_files) buf=prototypes.buffer() sc.writetobuffer(buf, logtitle="Calendar data") self.writefile(self.protocolclass.cal_data_file_name, buf.getvalue()) # build the exceptions exceptions_file=self.protocolclass.scheduleexceptionfile() for k,l in sc_ex.items(): for x in l: _ex=self.protocolclass.scheduleexception() _ex.pos=k _ex.year, _ex.month, _ex.day=x exceptions_file.items.append(_ex) buf=prototypes.buffer() exceptions_file.writetobuffer(buf, logtitle="calendar exceptions") self.writefile(self.protocolclass.cal_exception_file_name, buf.getvalue()) # clear out any alarm voice files that may have been deleted if self._cal_has_voice_id: for k,e in voice_files.items(): try: self.rmfile(e) except: self.log('Failed to delete file '+e) return dict _repeat_values={ protocolclass.CAL_REP_DAILY: bpcalendar.RepeatEntry.daily, protocolclass.CAL_REP_MONFRI: bpcalendar.RepeatEntry.daily, protocolclass.CAL_REP_WEEKLY: bpcalendar.RepeatEntry.weekly, protocolclass.CAL_REP_MONTHLY: bpcalendar.RepeatEntry.monthly, protocolclass.CAL_REP_YEARLY: bpcalendar.RepeatEntry.yearly } def _build_cal_repeat(self, event, exceptions): rep_val=Phone._repeat_values.get(event.repeat, None) if not rep_val: return None rep=bpcalendar.RepeatEntry(rep_val) if event.repeat==self.protocolclass.CAL_REP_MONFRI: rep.interval=rep.dow=0 elif event.repeat!=self.protocolclass.CAL_REP_YEARLY: rep.interval=1 rep.dow=0 # do exceptions cal_ex=exceptions.get(event.pos, []) for e in cal_ex: try: rep.add_suppressed(*e) except ValueError: # illegal exception date pass except: if __debug__: raise return rep def _get_voice_id(self, event, entry): if event.hasvoice: entry.voice=event.voiceid def _build_cal_entry(self, event, exceptions, ringtone_index): try: # return a copy of bpcalendar object based on my values # general fields entry=bpcalendar.CalendarEntry() entry.start=event.start try: entry.end=event.end # some phones (e.g. lx5550) have unreliable end dates for "forever" events except ValueError: entry.end=self.protocolclass.CAL_REPEAT_DATE entry.desc_loc=event.description # check for allday event if entry.start[3:]==(0, 0) and entry.end[3:]==(23, 59): entry.allday=True # alarm if event.alarmtype: entry.alarm=event.alarmhours*60+event.alarmminutes # ringtone rt_idx=event.ringtone # hack to account for the VX4650 weird ringtone setup if rt_idx<50: # 1st part of builtin ringtones, need offset by 1 rt_idx+=1 entry.ringtone=ringtone_index.get(rt_idx, {'name': None} )['name'] # voice ID if applicable if self._cal_has_voice_id: self._get_voice_id(event, entry) # repeat info entry.repeat=self._build_cal_repeat(event, exceptions) return entry except ValueError: # illegal date/time pass except: # this entry is hosed! if __debug__: raise def get_cal(self, sch_file, exceptions, ringtone_index): res={} for event in sch_file.events: if event.pos==-1: # blank entry continue cal_event=self._build_cal_entry(event, exceptions, ringtone_index) if cal_event: res[cal_event.id]=cal_event return res _alarm_info={ -1: (protocolclass.CAL_REMINDER_NONE, 100, 100), 0: (protocolclass.CAL_REMINDER_ONTIME, 0, 0), 5: (protocolclass.CAL_REMINDER_5MIN, 5, 0), 10: (protocolclass.CAL_REMINDER_10MIN, 10, 0), 60: (protocolclass.CAL_REMINDER_1HOUR, 0, 1), 1440: (protocolclass.CAL_REMINDER_1DAY, 0, 24), 2880: (protocolclass.CAL_REMINDER_2DAYS, 0, 48) } _default_alarm=(protocolclass.CAL_REMINDER_NONE, 100, 100) # default alarm is off _phone_dow={ 1: protocolclass.CAL_DOW_SUN, 2: protocolclass.CAL_DOW_MON, 4: protocolclass.CAL_DOW_TUE, 8: protocolclass.CAL_DOW_WED, 16: protocolclass.CAL_DOW_THU, 32: protocolclass.CAL_DOW_FRI, 64: protocolclass.CAL_DOW_SAT } def _set_repeat_event(self, event, entry, exceptions): rep_val=self.protocolclass.CAL_REP_NONE day_bitmap=0 rep=entry.repeat if rep: rep_type=rep.repeat_type if rep_type==bpcalendar.RepeatEntry.yearly: rep_val=self.protocolclass.CAL_REP_YEARLY else: rep_interval=rep.interval rep_dow=rep.dow if rep_type==bpcalendar.RepeatEntry.daily: if rep_interval==0: rep_val=self.protocolclass.CAL_REP_MONFRI elif rep_interval==1: rep_val=self.protocolclass.CAL_REP_DAILY elif rep_type==bpcalendar.RepeatEntry.weekly: start_dow=1<=k: _alarm_key=k break event.alarmtype, event.alarmminutes, event.alarmhours=Phone._alarm_info.get( _alarm_key, self._default_alarm) def _set_voice_id(self, event, entry, voice_files): if entry.voice and \ voice_files.has_key(entry.voice-self.protocolclass.cal_voice_id_ofs): event.hasvoice=1 event.voiceid=entry.voice del voice_files[entry.voice-self.protocolclass.cal_voice_id_ofs] else: event.hasvoice=0 event.voiceid=self.protocolclass.CAL_NO_VOICE def _set_cal_event(self, event, entry, exceptions, ringtone_index, voice_files): # desc event.description=entry.desc_loc # start & end times if entry.allday: event.start=entry.start[:3]+(0,0) event.end=entry.start[:3]+(23,59) else: event.start=entry.start event.end=entry.start[:3]+entry.end[3:] # make sure the event lasts in 1 calendar day if event.end=_today): event=self.protocolclass.scheduleevent() event.pos=_pos self._set_cal_event(event, e, exceptions, ringtone_index, voice_files) sch_file.events.append(event) if not _packet_size: _packet_size=event.packetsize() _pos+=_packet_size _entry_cnt+=1 if _entry_cnt>=self.protocolclass.NUMCALENDARENTRIES: break sch_file.numactiveitems=_entry_cnt return exceptions # Text Memo stuff----------------------------------------------------------- def getmemo(self, result): # read the memo file try: buf=prototypes.buffer(self.getfilecontents( self.protocolclass.text_memo_file)) text_memo=self.protocolclass.textmemofile() text_memo.readfrombuffer(buf, logtitle="Read text memo") res={} for i in range(text_memo.itemcount): entry=memo.MemoEntry() entry.text=text_memo.items[i].text res[entry.id]=entry except com_brew.BrewNoSuchFileException: res={} result['memo']=res return result def savememo(self, result, merge): text_memo=self.protocolclass.textmemofile() memo_dict=result.get('memo', {}) keys=memo_dict.keys() keys.sort() text_memo.itemcount=len(keys) for k in keys: entry=self.protocolclass.textmemo() entry.text=memo_dict[k].text text_memo.items.append(entry) buf=prototypes.buffer() text_memo.writetobuffer(buf, logtitle="text memo "+self.protocolclass.text_memo_file) self.writefile(self.protocolclass.text_memo_file, buf.getvalue()) return result parentprofile=com_phone.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='VX4400' brew_required=True WALLPAPER_WIDTH=120 WALLPAPER_HEIGHT=98 MAX_WALLPAPER_BASENAME_LENGTH=19 WALLPAPER_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789 ." WALLPAPER_CONVERT_FORMAT="bmp" MAX_RINGTONE_BASENAME_LENGTH=19 RINGTONE_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789 ." DIALSTRING_CHARS="[^0-9PT#*]" # which usb ids correspond to us usbids_straight=( ( 0x1004, 0x6000, 2), )# VID=LG Electronics, PID=LG VX4400/VX6000 -internal USB diagnostics interface usbids_usbtoserial=( ( 0x067b, 0x2303, None), # VID=Prolific, PID=USB to serial ( 0x0403, 0x6001, None), # VID=FTDI, PID=USB to serial ( 0x0731, 0x2003, None), # VID=Susteen, PID=Universal USB to serial ) usbids=usbids_straight+usbids_usbtoserial # which device classes we are. not we are not modem! deviceclasses=("serial",) # nb we don't allow save to camera so it isn't listed here imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) def GetImageOrigins(self): return self.imageorigins # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 120, 'height': 98, 'format': "BMP"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 120, 'height': 98, 'format': "BMP"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "fullscreen", {'width': 120, 'height': 133, 'format': "BMP"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets def __init__(self): parentprofile.__init__(self) def _getgroup(self, name, groups): for key in groups: if groups[key]['name']==name: return key,groups[key] return None,None def normalisegroups(self, helper, data): "Assigns groups based on category data" pad=[] keys=data['groups'].keys() keys.sort() for k in keys: if k: # ignore key 0 which is 'No Group' name=data['groups'][k]['name'] pad.append(name) groups=helper.getmostpopularcategories(self.protocolclass.MAX_PHONEBOOK_GROUPS, data['phonebook'], ["No Group"], 22, pad) # alpha sort groups.sort() # newgroups newgroups={} # put in No group newgroups[0]={'name': 'No Group', 'icon': 0} # populate for name in groups: # existing entries remain unchanged if name=="No Group": continue key,value=self._getgroup(name, data['groups']) if key is not None and key!=0: newgroups[key]=value # new entries get whatever numbers are free for name in groups: key,value=self._getgroup(name, newgroups) if key is None: for key in range(1,100000): if key not in newgroups: newgroups[key]={'name': name, 'icon': 1} break # yay, done if data['groups']!=newgroups: data['groups']=newgroups data['rebootphone']=True def convertphonebooktophone(self, helper, data): """Converts the data to what will be used by the phone @param data: contains the dict returned by getfundamentals as well as where the results go""" results={} speeds={} self.normalisegroups(helper, data) for pbentry in data['phonebook']: if len(results)==self.protocolclass.NUMPHONEBOOKENTRIES: break e={} # entry out entry=data['phonebook'][pbentry] # entry in try: # serials serial1=helper.getserial(entry.get('serials', []), self.serialsname, data['uniqueserial'], 'serial1', 0) serial2=helper.getserial(entry.get('serials', []), self.serialsname, data['uniqueserial'], 'serial2', serial1) e['serial1']=serial1 e['serial2']=serial2 for ss in entry["serials"]: if ss["sourcetype"]=="bitpim": e['bitpimserial']=ss assert e['bitpimserial'] # name e['name']=helper.getfullname(entry.get('names', []),1,1,22)[0] # categories/groups cat=helper.makeone(helper.getcategory(entry.get('categories', []),0,1,22), None) if cat is None: e['group']=0 else: key,value=self._getgroup(cat, data['groups']) if key is not None: e['group']=key else: # sorry no space for this category e['group']=0 # email addresses emails=helper.getemails(entry.get('emails', []) ,0,self.protocolclass.NUMEMAILS,48) e['emails']=helper.filllist(emails, self.protocolclass.NUMEMAILS, "") # url e['url']=helper.makeone(helper.geturls(entry.get('urls', []), 0,1,48), "") # memo (-1 is to leave space for null terminator - not all software puts it in, but we do) e['memo']=helper.makeone(helper.getmemos(entry.get('memos', []), 0, 1, self.protocolclass.MEMOLENGTH-1), "") # phone numbers # there must be at least one email address or phonenumber minnumbers=1 if len(emails): minnumbers=0 numbers=helper.getnumbers(entry.get('numbers', []),minnumbers,self.protocolclass.NUMPHONENUMBERS) e['numbertypes']=[] e['numbers']=[] for numindex in range(len(numbers)): num=numbers[numindex] # deal with type b4=len(e['numbertypes']) type=num['type'] for i,t in enumerate(self.protocolclass.numbertypetab): if type==t: # some voodoo to ensure the second home becomes home2 if i in e['numbertypes'] and t[-1]!='2': type+='2' continue e['numbertypes'].append(i) break if t=='none': # conveniently last entry e['numbertypes'].append(i) break if len(e['numbertypes'])==b4: # we couldn't find a type for the number helper.add_error_message('Number %s (%s/%s) not supported and ignored.'% (num['number'], e['name'], num['type'])) continue # deal with number number=self.phonize(num['number']) if len(number)==0: # no actual digits in the number continue if len(number)>48: # get this number from somewhere sensible # ::TODO:: number is too long and we have to either truncate it or ignore it? number=number[:48] # truncate for moment e['numbers'].append(number) # deal with speed dial sd=num.get("speeddial", -1) if self.protocolclass.NUMSPEEDDIALS: if sd>=self.protocolclass.FIRSTSPEEDDIAL and sd<=self.protocolclass.LASTSPEEDDIAL: speeds[sd]=(e['bitpimserial'], numindex) if len(e['numbers'])"): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_uslot.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_wallpaper.writetobuffer(buf) self.__field_primary.writetobuffer(buf) self.__field_numbers.writetobuffer(buf) self.__field_email.writetobuffer(buf) self.__field_url.writetobuffer(buf) self.__field_nick.writetobuffer(buf) self.__field_memo.writetobuffer(buf) self.__field_group.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_timestamp.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=CSVINT() self.__field_slot.readfrombuffer(buf) self.__field_uslot=CSVINT() self.__field_uslot.readfrombuffer(buf) self.__field_name=CSVSTRING() self.__field_name.readfrombuffer(buf) self.__field_wallpaper=CSVINT() self.__field_wallpaper.readfrombuffer(buf) self.__field_primary=CSVINT() self.__field_primary.readfrombuffer(buf) self.__field_numbers=LIST(**{'length': NUMPHONENUMBERS, 'createdefault': True, 'elementclass': phonenumber}) self.__field_numbers.readfrombuffer(buf) self.__field_email=CSVSTRING() self.__field_email.readfrombuffer(buf) self.__field_url=CSVSTRING() self.__field_url.readfrombuffer(buf) self.__field_nick=CSVSTRING() self.__field_nick.readfrombuffer(buf) self.__field_memo=CSVSTRING() self.__field_memo.readfrombuffer(buf) self.__field_group=CSVINT() self.__field_group.readfrombuffer(buf) self.__field_ringtone=CSVINT() self.__field_ringtone.readfrombuffer(buf) self.__field_timestamp=CSVTIME(**{'terminator': None }) self.__field_timestamp.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,CSVINT): self.__field_slot=value else: self.__field_slot=CSVINT(value,) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, "Internal Slot") def __getfield_uslot(self): return self.__field_uslot.getvalue() def __setfield_uslot(self, value): if isinstance(value,CSVINT): self.__field_uslot=value else: self.__field_uslot=CSVINT(value,) def __delfield_uslot(self): del self.__field_uslot uslot=property(__getfield_uslot, __setfield_uslot, __delfield_uslot, "User Slot, Speed dial") def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,CSVSTRING): self.__field_name=value else: self.__field_name=CSVSTRING(value,) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,CSVINT): self.__field_wallpaper=value else: self.__field_wallpaper=CSVINT(value,) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_primary(self): return self.__field_primary.getvalue() def __setfield_primary(self, value): if isinstance(value,CSVINT): self.__field_primary=value else: self.__field_primary=CSVINT(value,) def __delfield_primary(self): del self.__field_primary primary=property(__getfield_primary, __setfield_primary, __delfield_primary, None) def __getfield_numbers(self): return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'length': NUMPHONENUMBERS, 'createdefault': True, 'elementclass': phonenumber}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,CSVSTRING): self.__field_email=value else: self.__field_email=CSVSTRING(value,) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def __getfield_url(self): return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,CSVSTRING): self.__field_url=value else: self.__field_url=CSVSTRING(value,) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_nick(self): return self.__field_nick.getvalue() def __setfield_nick(self, value): if isinstance(value,CSVSTRING): self.__field_nick=value else: self.__field_nick=CSVSTRING(value,) def __delfield_nick(self): del self.__field_nick nick=property(__getfield_nick, __setfield_nick, __delfield_nick, None) def __getfield_memo(self): return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,CSVSTRING): self.__field_memo=value else: self.__field_memo=CSVSTRING(value,) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,CSVINT): self.__field_group=value else: self.__field_group=CSVINT(value,) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,CSVINT): self.__field_ringtone=value else: self.__field_ringtone=CSVINT(value,) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_timestamp(self): return self.__field_timestamp.getvalue() def __setfield_timestamp(self, value): if isinstance(value,CSVTIME): self.__field_timestamp=value else: self.__field_timestamp=CSVTIME(value,**{'terminator': None }) def __delfield_timestamp(self): del self.__field_timestamp timestamp=property(__getfield_timestamp, __setfield_timestamp, __delfield_timestamp, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, "Internal Slot") yield ('uslot', self.__field_uslot, "User Slot, Speed dial") yield ('name', self.__field_name, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('primary', self.__field_primary, None) yield ('numbers', self.__field_numbers, None) yield ('email', self.__field_email, None) yield ('url', self.__field_url, None) yield ('nick', self.__field_nick, None) yield ('memo', self.__field_memo, None) yield ('group', self.__field_group, None) yield ('ringtone', self.__field_ringtone, None) yield ('timestamp', self.__field_timestamp, None) class phonebookslotresponse(BaseProtogenClass): __fields=['command', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebookslotresponse,self).__init__(**dict) if self.__class__ is phonebookslotresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebookslotresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebookslotresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '#PBOKR:'}) self.__field_command.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '#PBOKR:'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('entry', self.__field_entry, None) class speeddial_entry(BaseProtogenClass): __fields=['on_flg1', 'on_flg2', 'uslot', 'which'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddial_entry,self).__init__(**dict) if self.__class__ is speeddial_entry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddial_entry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddial_entry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_on_flg1.writetobuffer(buf) self.__field_on_flg2.writetobuffer(buf) self.__field_uslot.writetobuffer(buf) self.__field_which.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_on_flg1=UINT(**{'sizeinbytes': 1}) self.__field_on_flg1.readfrombuffer(buf) self.__field_on_flg2=UINT(**{'sizeinbytes': 1}) self.__field_on_flg2.readfrombuffer(buf) self.__field_uslot=UINT(**{'sizeinbytes': 2}) self.__field_uslot.readfrombuffer(buf) self.__field_which=UINT(**{'sizeinbytes': 1}) self.__field_which.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_on_flg1(self): return self.__field_on_flg1.getvalue() def __setfield_on_flg1(self, value): if isinstance(value,UINT): self.__field_on_flg1=value else: self.__field_on_flg1=UINT(value,**{'sizeinbytes': 1}) def __delfield_on_flg1(self): del self.__field_on_flg1 on_flg1=property(__getfield_on_flg1, __setfield_on_flg1, __delfield_on_flg1, None) def __getfield_on_flg2(self): return self.__field_on_flg2.getvalue() def __setfield_on_flg2(self, value): if isinstance(value,UINT): self.__field_on_flg2=value else: self.__field_on_flg2=UINT(value,**{'sizeinbytes': 1}) def __delfield_on_flg2(self): del self.__field_on_flg2 on_flg2=property(__getfield_on_flg2, __setfield_on_flg2, __delfield_on_flg2, None) def __getfield_uslot(self): return self.__field_uslot.getvalue() def __setfield_uslot(self, value): if isinstance(value,UINT): self.__field_uslot=value else: self.__field_uslot=UINT(value,**{'sizeinbytes': 2}) def __delfield_uslot(self): del self.__field_uslot uslot=property(__getfield_uslot, __setfield_uslot, __delfield_uslot, None) def __getfield_which(self): return self.__field_which.getvalue() def __setfield_which(self, value): if isinstance(value,UINT): self.__field_which=value else: self.__field_which=UINT(value,**{'sizeinbytes': 1}) def __delfield_which(self): del self.__field_which which=property(__getfield_which, __setfield_which, __delfield_which, None) def iscontainer(self): return True def containerelements(self): yield ('on_flg1', self.__field_on_flg1, None) yield ('on_flg2', self.__field_on_flg2, None) yield ('uslot', self.__field_uslot, None) yield ('which', self.__field_which, None) class speeddial_file(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddial_file,self).__init__(**dict) if self.__class__ is speeddial_file: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddial_file,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddial_file,kwargs) if len(args): dict2={ 'elementclass': speeddial_entry } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': speeddial_entry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': speeddial_entry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class groupnameresponse(BaseProtogenClass): __fields=['command', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(groupnameresponse,self).__init__(**dict) if self.__class__ is groupnameresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(groupnameresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(groupnameresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '#PBGRR:'}) self.__field_command.readfrombuffer(buf) self.__field_entry=groupnameentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '#PBGRR:'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,groupnameentry): self.__field_entry=value else: self.__field_entry=groupnameentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('entry', self.__field_entry, None) class groupnameentry(BaseProtogenClass): __fields=['gid', 'groupname', 'ringtone', 'dunno2', 'timestamp'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(groupnameentry,self).__init__(**dict) if self.__class__ is groupnameentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(groupnameentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(groupnameentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_gid.writetobuffer(buf) self.__field_groupname.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_timestamp.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_gid=CSVINT() self.__field_gid.readfrombuffer(buf) self.__field_groupname=CSVSTRING() self.__field_groupname.readfrombuffer(buf) self.__field_ringtone=CSVINT() self.__field_ringtone.readfrombuffer(buf) self.__field_dunno2=CSVSTRING(**{'quotechar': None}) self.__field_dunno2.readfrombuffer(buf) self.__field_timestamp=CSVTIME(**{'terminator': None}) self.__field_timestamp.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_gid(self): return self.__field_gid.getvalue() def __setfield_gid(self, value): if isinstance(value,CSVINT): self.__field_gid=value else: self.__field_gid=CSVINT(value,) def __delfield_gid(self): del self.__field_gid gid=property(__getfield_gid, __setfield_gid, __delfield_gid, None) def __getfield_groupname(self): return self.__field_groupname.getvalue() def __setfield_groupname(self, value): if isinstance(value,CSVSTRING): self.__field_groupname=value else: self.__field_groupname=CSVSTRING(value,) def __delfield_groupname(self): del self.__field_groupname groupname=property(__getfield_groupname, __setfield_groupname, __delfield_groupname, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,CSVINT): self.__field_ringtone=value else: self.__field_ringtone=CSVINT(value,) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "Ringtone assignment?") def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,CSVSTRING): self.__field_dunno2=value else: self.__field_dunno2=CSVSTRING(value,**{'quotechar': None}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, "A single character C or S") def __getfield_timestamp(self): return self.__field_timestamp.getvalue() def __setfield_timestamp(self, value): if isinstance(value,CSVTIME): self.__field_timestamp=value else: self.__field_timestamp=CSVTIME(value,**{'terminator': None}) def __delfield_timestamp(self): del self.__field_timestamp timestamp=property(__getfield_timestamp, __setfield_timestamp, __delfield_timestamp, None) def iscontainer(self): return True def containerelements(self): yield ('gid', self.__field_gid, None) yield ('groupname', self.__field_groupname, None) yield ('ringtone', self.__field_ringtone, "Ringtone assignment?") yield ('dunno2', self.__field_dunno2, "A single character C or S") yield ('timestamp', self.__field_timestamp, None) class groupnamesetrequest(BaseProtogenClass): __fields=['command', 'gid', 'groupname', 'ringtone', 'timestamp'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(groupnamesetrequest,self).__init__(**dict) if self.__class__ is groupnamesetrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(groupnamesetrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(groupnamesetrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBGRW='}) self.__field_command.writetobuffer(buf) self.__field_gid.writetobuffer(buf) self.__field_groupname.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=CSVINT(**{ 'default': 0 }) self.__field_ringtone.writetobuffer(buf) try: self.__field_timestamp except: self.__field_timestamp=CSVTIME(**{'terminator': None, 'default': (1980,1,1,12,0,0) }) self.__field_timestamp.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBGRW='}) self.__field_command.readfrombuffer(buf) self.__field_gid=CSVINT() self.__field_gid.readfrombuffer(buf) self.__field_groupname=CSVSTRING() self.__field_groupname.readfrombuffer(buf) self.__field_ringtone=CSVINT(**{ 'default': 0 }) self.__field_ringtone.readfrombuffer(buf) self.__field_timestamp=CSVTIME(**{'terminator': None, 'default': (1980,1,1,12,0,0) }) self.__field_timestamp.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBGRW='}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '#PBGRW='}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_gid(self): return self.__field_gid.getvalue() def __setfield_gid(self, value): if isinstance(value,CSVINT): self.__field_gid=value else: self.__field_gid=CSVINT(value,) def __delfield_gid(self): del self.__field_gid gid=property(__getfield_gid, __setfield_gid, __delfield_gid, "Group #") def __getfield_groupname(self): return self.__field_groupname.getvalue() def __setfield_groupname(self, value): if isinstance(value,CSVSTRING): self.__field_groupname=value else: self.__field_groupname=CSVSTRING(value,) def __delfield_groupname(self): del self.__field_groupname groupname=property(__getfield_groupname, __setfield_groupname, __delfield_groupname, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=CSVINT(**{ 'default': 0 }) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,CSVINT): self.__field_ringtone=value else: self.__field_ringtone=CSVINT(value,**{ 'default': 0 }) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_timestamp(self): try: self.__field_timestamp except: self.__field_timestamp=CSVTIME(**{'terminator': None, 'default': (1980,1,1,12,0,0) }) return self.__field_timestamp.getvalue() def __setfield_timestamp(self, value): if isinstance(value,CSVTIME): self.__field_timestamp=value else: self.__field_timestamp=CSVTIME(value,**{'terminator': None, 'default': (1980,1,1,12,0,0) }) def __delfield_timestamp(self): del self.__field_timestamp timestamp=property(__getfield_timestamp, __setfield_timestamp, __delfield_timestamp, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('gid', self.__field_gid, "Group #") yield ('groupname', self.__field_groupname, None) yield ('ringtone', self.__field_ringtone, None) yield ('timestamp', self.__field_timestamp, None) bitpim-1.0.7+dfsg1/src/phones/p_sanyonewer.p0000644001616600161660000003203411026353637017134 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_sanyonewer.p 4617 2008-06-19 03:50:55Z sawecw $ %{ """Descriptions of packets specific to newer Sanyo phone like the SCP-5500""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 # Need to check. Is max phone will hold 32/96 or 33/97 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 NUMMESSAGESLOTS=256 %} #fa 00 02 3c 0f - 1034 bytes total #fa 00 02 28 0c #fa 00 03 for writing PACKET sanyofirmwarerequest: 1 UINT {'constant': 0xfa} +fa 2 UINT {'constant': 0x00} +command PACKET sanyofirmwareresponse: 1 UINT fa 2 UINT command 11 USTRING {'terminator': None} date1 8 USTRING {'terminator': None} time1 11 USTRING {'terminator': None} date2 8 USTRING {'terminator': None} time2 8 USTRING {'terminator': None} string1 1 UNKNOWN dunno1 11 USTRING {'terminator': None} date3 1 UNKNOWN dunno2 8 USTRING {'terminator': None} time3 11 UNKNOWN dunno3 10 USTRING {'terminator': None} firmware 7 UNKNOWN dunno4 16 USTRING {'terminator': None} phonemodel * UNKNOWN pad # Eventually move to p_sanyo.p because this header is # used by many phones. PACKET sanyofaheader: 2 UINT {'constant': 0x00fa} +fa 1 UINT faset PACKET sanyoheader: * sanyofaheader {'faset': 0x02} +preamble 1 UINT command 1 UINT packettype PACKET sanyowriteheader: * sanyofaheader {'faset': 0x03} +preamble 1 UINT command 1 UINT packettype PACKET study: * sanyoheader +header 2 UINT slot 1024 UNKNOWN +pad PACKET studyresponse: * sanyoheader header * UNKNOWN data PACKET phonebookslotrequest: * sanyoheader {'packettype': 0x0c, 'command': 0x28} +header 2 UINT slot 512 UNKNOWN +pad # 1024 UNKNOWN +pad PACKET phonebookslotupdaterequest: * sanyowriteheader {'packettype': 0x0c, 'command': 0x28} +header * phonebookentry entry 569 UNKNOWN +pad PACKET phonenumber: 1 UINT {'default': 0} +number_len 33 USTRING {'default': ""} +number # Correct up to start of email. Email, url field size # and secret location not verified yet PACKET phonebookentry: 2 UINT slot 2 UINT slotdup 1 UINT name_len 16 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} name * LIST {'length': 7, 'createdefault': True, 'elementclass': phonenumber} +numbers 1 UINT +email_len 97 USTRING {'default': ""} +email 1 UINT +url_len 97 USTRING {'default': ""} +url 1 UINT {'default': 1} +defaultnum 1 BOOL +secret PACKET phonebookslotresponse: * sanyoheader header * phonebookentry entry 57 UNKNOWN pad # 569 UNKNOWN pad PACKET eventrequest: * sanyoheader {'packettype': 0x0c, 'command': 0x23} +header 1 UINT slot 501 UNKNOWN +pad PACKET evententry: 1 UINT slot 1 UINT flag "0: Not used, 1: Scheduled, 2: Already Happened" 14 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} eventname 7 UNKNOWN +pad1 1 UINT eventname_len 4 UINT start "# seconds since Jan 1, 1980 approximately" 4 UINT end 14 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} location 7 UNKNOWN +pad2 1 UINT location_len 1 UNKNOWN +pad3 4 UINT alarmdiff "Displayed alarm time" 1 UINT period "No, Daily, Weekly, Monthly, Yearly" 1 UINT dom "Day of month for the event" 4 UINT alarm 1 UINT {'default': 0} +serial "Some kind of serial number" 3 UNKNOWN +pad4 1 UINT ringtone PACKET eventresponse: * sanyoheader header * evententry entry 436 UNKNOWN pad PACKET eventupdaterequest: * sanyowriteheader {'packettype': 0x0c, 'command':0x23} +header * evententry entry 436 UNKNOWN +pad PACKET callalarmrequest: * sanyoheader {'packettype': 0x0c, 'command': 0x24} +header 1 UINT slot 501 UNKNOWN +pad PACKET callalarmentry: 1 UINT slot 1 UINT flag "0: Not used, 1: Scheduled, 2: Already Happened" 1 UINT {'default': 0} +dunno1 "Related to Snooze?" 49 USTRING {'raiseonunterminatedread': False} phonenum 1 UINT phonenum_len 4 UINT date "# seconds since Jan 1, 1980 approximately" 1 UINT period "No, Daily, Weekly, Monthly, Yearly" 1 UINT dom "Day of month for the event" 4 UINT datedup "Copy of the date. Always the same???" 16 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} name 1 UNKNOWN +pad1 1 UINT name_len 1 UINT phonenumbertype "1: Home, 2: Work, ..." 2 UINT phonenumberslot 1 UINT {'default': 0} +serial 3 UNKNOWN +pad2 1 UINT ringtone PACKET callalarmresponse: * sanyoheader header * callalarmentry entry 417 UNKNOWN pad PACKET callalarmupdaterequest: * sanyowriteheader {'packettype': 0x0c, 'command':0x24} +header * callalarmentry entry 417 UNKNOWN +pad PACKET bufferpartrequest: P UINT {'constant': 1024} bufpartsize * sanyoheader {'packettype': 0x0f} +header 1026 UNKNOWN +pad PACKET bufferpartresponse: P UINT {'constant': 1024} bufpartsize * sanyoheader header * DATA {'sizeinbytes': self.bufpartsize} data 2 UNKNOWN pad PACKET bufferpartupdaterequest: P UINT {'constant': 1024} bufpartsize * sanyowriteheader {'packettype': 0x0f} +header * DATA {'sizeinbytes': self.bufpartsize} data 2 UNKNOWN +pad PACKET calleridbuffer: "Index so that phone can show a name instead of number" # This 7000 byte buffer is formed from the concatenation of 500 bytes of # payload from commands 0X 50 0F through 0X 5D 0F P UINT {'constant': 500} maxentries P UINT {'constant': 0x46} startcommand "Starting command for R/W buf parts" P UINT {'constant': 7168} bufsize P USTRING {'default': "callerid"} +comment 2 UINT numentries "Number phone numbers" * LIST {'length': self.maxentries, 'elementclass': calleridentry, 'createdefault': True} +items 666 UNKNOWN +pad PACKET ringerpicbuffer: "Index of ringer and picture assignments" # This 1000 byte buffer is formed from the concatenation of 500 bytes of # payload from commands 0X 46 0F through 0X 47 0F P UINT {'constant': _NUMPBSLOTS} numpbslots "Number of phone book slots" P UINT {'constant': 0xd7} startcommand "Starting command for R/W buf parts" P UINT {'constant': 0x0f} packettype "Non standard packet type" P UINT {'constant': 1024} bufsize P USTRING {'default': "ringer/picture assignments"} +comment * LIST {'length': _NUMPBSLOTS} +ringtones: 1 UINT ringtone "ringtone index" * LIST {'length': _NUMPBSLOTS} +wallpapers: 1 UINT wallpaper "wallpaper index" 424 UNKNOWN +pad #PACKET ringerpicbufferrequest: # "Packet to get ringer picture buffer" # * sanyoheader {'packettype': 0x0c, 'command': 0xd7} +header # 1026 UNKNOWN +pad #PACKET ringerpicbufferresponse: # * sanyoheader +header # * ringerpicbuffer +buffer PACKET pbsortbuffer: "Various arrays for sorting the phone book, speed dial, determining which" # slots are in use, etc. # This 4000 byte buffer is formed from the concatenation of 500 bytes of # payload from commands 0X 3c 0F through 0X 43 0F P UINT {'constant': 0x3c} startcommand "Starting command for R/W buf parts" P UINT {'constant': 4096} bufsize P USTRING {'default': "sort buffer"} +comment * LIST {'length': _NUMPBSLOTS, 'createdefault': True} +usedflags: 1 UINT used "1 if slot in use" 2 UINT slotsused 2 UINT slotsused2 "Always seems to be the same. Why duplicated?" 2 UINT numemail "Num of slots with email" 2 UINT numurl "Num of slots with URL" * LIST {'length': _NUMPBSLOTS} +firsttypes: 1 UINT firsttype "First phone number type in each slot" * LIST {'length': _NUMPBSLOTS} +sortorder: 2 UINT {'default': 0xffff} pbslot * USTRING {'terminator': None, 'sizeinbytes': _NUMPBSLOTS} pbfirstletters * LIST {'length': _NUMPBSLOTS} +sortorder2: "Is this the same" 2 UINT {'default': 0xffff} pbslot * LIST {'length': _NUMSPEEDDIALS} +speeddialindex: 2 UINT {'default': 0xffff} pbslotandtype * LIST {'length': _NUMLONGNUMBERS} +longnumbersindex: 2 UINT {'default': 0xffff} pbslotandtype * LIST {'length': _NUMPBSLOTS} +emails: "Sorted list of slots with Email" 2 UINT {'default': 0xffff} pbslot * USTRING {'terminator': None, 'sizeinbytes': _NUMPBSLOTS} emailfirstletters "First letters in sort order" * LIST {'length': _NUMPBSLOTS} +urls: "Sorted list of slots with a URL" 2 UINT {'default': 0xffff} pbslot * USTRING {'terminator': None, 'sizeinbytes': _NUMPBSLOTS} urlfirstletters "First letters in sort order" 162 UNKNOWN +pad PACKET wallpaperbuffer: "Addition buffer of wallpaper assignment info" # 1500 byte buffer P UINT {'constant': _NUMPBSLOTS} numpbslots "Number of phone book slots" P UINT {'constant': 0x69} startcommand "Starting command for R/W buf parts" P UINT {'constant': 2048} bufsize P USTRING {'default': "wallpaper assignment info"} +comment * LIST {'length': _NUMPBSLOTS, 'elementclass': wallpaperinfo} +wallpapers 548 UNKNOWN +pad PACKET messagerequest: * sanyoheader {'packettype': 0x0c, 'command': 0xe1} +header 1 UINT slot 501 UNKNOWN +pad PACKET messagesentrequest: * sanyoheader {'packettype': 0x0d, 'command': 0x55} +header 1 UINT slot 501 UNKNOWN +pad PACKET messageentry: 1 UINT slot 1 UINT read 1 UINT counter 3 UNKNOWN pad1 1 UINT dunno1 1 UINT dunno2 1 UINT dunno3 1 UNKNOWN pad2 1 UINT dunno4 1 UINT dunno5 1 UNKNOWN pad3 1 UINT message_len 255 USTRING message "Text of the notification" 1 UNKNOWN pad4 1 UINT year 1 UINT month 1 UINT day 1 UINT hour 1 UINT minute 1 UINT second 1 UINT callback_len 34 USTRING callback 1 UINT phonenum_len 37 USTRING phonenum 1 UINT dunno6 1 UINT priority 3 UNKNOWN pad6 1 UINT dunno7 1 UINT dunno8 PACKET messageresponse: * sanyoheader header * messageentry entry * UNKNOWN pad PACKET messagesentresponse: * sanyoheader header * messageentry entry * UNKNOWN pad PACKET foldernamerequest: * sanyoheader {'packettype': 0x0b, 'command': 0xef} +header 1 UINT index 501 UNKNOWN +pad PACKET foldernameentry: 1 UINT index 1 UINT flag "0 if empty, 1 in use" 1 UINT autofile "If 1, autofile messages with keyword" 1 UINT notify 1 UINT icon 13 USTRING {'raiseonunterminatedread': False} name "Name of the folder" 3 UNKNOWN +pad 14 USTRING {'raiseonunterminatedread': False} keyword PACKET foldernameresponse: * sanyoheader header * foldernameentry entry 467 UNKNOWN pad PACKET todorequest: * sanyoheader {'packettype': 0x0c,'command': 0x25} +header 1 UINT slot 501 UNKNOWN +pad PACKET todoentry: 1 UINT slot 1 UINT flag "0: Not used, 1: Used" 14 USTRING {'raiseonunterminatedread': False} todo 7 UNKNOWN +pad1 1 UINT todo_len 1 UINT priority "0: Normal, 1: Urgent, 2: Done" 1 UINT +dunno "Maybe always zero" 1 UINT order "Gets sorted on screen in this order" PACKET todoresponse: * sanyoheader header * todoentry entry 472 UNKNOWN pad PACKET historyrequest: P UINT type "0: Outgoing, 1: Incoming, 2: Missed" if self.type==OUTGOING: * sanyoheader {'packettype': 0x0c, 'command': 0x3d} +header if self.type==INCOMING: * sanyoheader {'packettype': 0x0c, 'command': 0x3e} +header if self.type==MISSED: * sanyoheader {'packettype': 0x0c, 'command': 0x3f} +header 1 UINT slot 501 UNKNOWN +pad PACKET historymiscrequest: P UINT type "0: Outgoing, 1: Incoming, 2: Missed" if self.type==OUTGOING: * sanyoheader {'packettype': 0x0c, 'command': 0x60} +header if self.type==INCOMING: * sanyoheader {'packettype': 0x0c, 'command': 0x61} +header if self.type==MISSED: * sanyoheader {'packettype': 0x0c, 'command': 0x62} +header 1 UINT slot 501 UNKNOWN +pad PACKET historyentry: 2 UINT slot 1 UNKNOWN dunno1 4 GPSDATE date 1 UINT phonenumlen 48 USTRING {'raiseonunterminatedread': False} phonenum 16 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} name 1 UNKNOWN dunno2 1 UNKNOWN dunno3 PACKET historyresponse: * sanyoheader header * historyentry entry 428 UNKNOWN pad PACKET historymiscentry: 2 UINT slot 2 UINT pbslotandtype 2 UINT dunno1 1 UINT dunno2 1 UINT dunno3 1 UINT dunno4 PACKET historymiscresponse: * sanyoheader header * historymiscentry entry 493 UNKNOWN pad bitpim-1.0.7+dfsg1/src/phones/p_samsungspha840.py0000644001616600161660000000076110373546155017725 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Proposed descriptions of data usign AT commands""" from prototypes import * from p_samsung_packet import * from p_samsungspha620 import * # We use LSB for all integer like fields in diagnostic mode UINT=UINTlsb BOOL=BOOLlsb # NUMPHONEBOOKENTRIES=300 NUMEMAILS=3 NUMPHONENUMBERS=6 MAXNUMBERLEN=32 NUMTODOENTRIES=9 NUMSMSENTRIES=94 NUMGROUPS=4 AMSREGISTRY="ams/AmsRegistry" DEFAULT_RINGTONE=0 DEFAULT_WALLPAPER=0 bitpim-1.0.7+dfsg1/src/phones/com_lgvx4500.py0000644001616600161660000001322610554051740016740 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgvx4500.py 3918 2007-01-19 05:15:12Z djpham $ """Communicate with the LG VX4500 cell phone The VX4500 is substantially similar to the VX4400 """ # standard modules import time import cStringIO import sha # my modules import common import copy import p_lgvx4500 import com_lgvx4400 import com_brew import com_phone import com_lg import helpids import prototypes class Phone(com_lgvx4400.Phone): "Talk to the LG VX4500 cell phone" desc="LG-VX4500" helpid=helpids.ID_PHONE_LGVX4500 protocolclass=p_lgvx4500 serialsname='lgvx4500' # more VX4500 indices imagelocations=( # offset, index file, files location, type, maximumentries ( 10, "download/dloadindex/brewImageIndex.map", "brew/shared", "images", 30) , ) ringtonelocations=( # offset, index file, files location, type, maximumentries ( 50, "download/dloadindex/brewRingerIndex.map", "user/sound/ringer", "ringers", 30), ) builtinimages= ('Foliage', 'Castle', 'Dandelion', 'Golf course', 'Icicles', 'Orangutan', 'Lake', 'Golden Gate', 'Desert') builtinringtones= ('Ring 1', 'Ring 2', 'Ring 3', 'Ring 4', 'Ring 5', 'Ring 6', 'Ring 7', 'Ring 8', 'Annen Polka', 'Pachelbel Canon', 'Hallelujah', 'La Traviata', 'Leichte Kavallerie Overture', 'Mozart Symphony No.40', 'Bach Minuet', 'Farewell', 'Mozart Piano Sonata', 'Sting', 'O solemio', 'Pizzicata Polka', 'Stars and Stripes Forever', 'Pineapple Rag', 'When the Saints Go Marching In', 'Latin', 'Carol 1', 'Carol 2', 'Chimes high', 'Chimes low', 'Ding', 'TaDa', 'Notify', 'Drum', 'Claps', 'Fanfare', 'Chord high', 'Chord low') def __init__(self, logtarget, commport): com_lgvx4400.Phone.__init__(self,logtarget,commport) self.mode=self.MODENONE def makeentry(self, counter, entry, dict): e=com_lgvx4400.Phone.makeentry(self, counter, entry, dict) e.entrysize=0x202 #e.unknown20c="\x00\x00\x00\x00\x00\x31\x02" return e my_model='VX4500' def getphoneinfo(self, phone_info): self.log('Getting Phone Info') try: s=self.getfilecontents('brew/version.txt') if s[:6]=='VX4500': phone_info.model=self.my_model phone_info.manufacturer=Profile.phone_manufacturer req=p_brew.firmwarerequest() res=self.sendbrewcommand(req, self.protocolclass.firmwareresponse) phone_info.append('Firmware Version:', res.firmware) s=self.getfilecontents("nvm/$SYS.ESN")[85:89] txt='%02X%02X%02X%02X'%(ord(s[3]), ord(s[2]), ord(s[1]), ord(s[0])) phone_info.append('ESN:', txt) txt=self.getfilecontents("nvm/nvm/nvm_0000")[457:467] phone_info.append('Phone Number:', txt) except: if __debug__: raise parentprofile=com_lgvx4400.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='LG Electronics Inc' phone_model='VX4500' # no direct usb interface usbids=com_lgvx4400.Profile.usbids_usbtoserial WALLPAPER_WIDTH=120 WALLPAPER_HEIGHT=131 MAX_WALLPAPER_BASENAME_LENGTH=19 WALLPAPER_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789 ." WALLPAPER_CONVERT_FORMAT="bmp" MAX_RINGTONE_BASENAME_LENGTH=19 RINGTONE_FILENAME_CHARS="abcdefghijklmnopqrstuvxwyz0123456789 ." imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) def GetImageOrigins(self): return self.imageorigins # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 120, 'height': 131, 'format': "BMP"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 120, 'height': 131, 'format': "BMP"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "fullscreen", {'width': 120, 'height': 160, 'format': "BMP"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('memo', 'read', None), # all memo list reading DJP ('memo', 'write', 'OVERWRITE'), # all memo list writing DJP ('call_history', 'read', None), ('sms', 'read', None), ('sms', 'write', 'OVERWRITE'), ) def __init__(self): parentprofile.__init__(self) bitpim-1.0.7+dfsg1/src/phones/com_phone.py0000644001616600161660000003027311274703471016566 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_phone.py 4768 2009-11-06 02:17:29Z hjelmn $ """Generic phone stuff that all models inherit from""" import common import commport import copy import field_color import re import sys import time import prototypes # when trying to setmode, we ignore various exception types # since the types are platform specific (eg on windows we get pywintypes.error) # so we have to construct the list here of which ones we ignore modeignoreerrortypes=[ commport.CommTimeout,common.CommsDeviceNeedsAttention ] try: import pywintypes modeignoreerrortypes.append(pywintypes.error) except: pass # has to be tuple or it doesn't work modeignoreerrortypes=tuple(modeignoreerrortypes) class Phone(object): """Base class for all phones""" MODENONE="modenone" # not talked to yet MODEMODEM="modemodem" # modem mode desc="Someone forget to set desc in derived class" def __init__(self, logtarget, commport): self.logtarget=logtarget self.comm=commport self.mode=self.MODENONE self.__msg=None def close(self): self.comm.close() self.comm=None def log(self, str): "Log a message" if self.logtarget: self.logtarget.log("%s: %s" % (self.desc, str)) def logdata(self, str, data, klass=None): "Log some data with option data object/class for the analyser" if self.logtarget: self.logtarget.logdata("%s: %s" % (self.desc, str), data, klass) def alert(self, message, wait): """Raises an alert in the main thread @param message: The message to display @param wait: Should this function block until the user confirms the message """ assert not wait assert self.logtarget self.logtarget.log("%s: %s" % (`wait`, self.desc, message)) def progress(self, pos, max, desc): "Update the progress meter" if self.logtarget: self.logtarget.progress(pos, max, desc) def raisecommsdnaexception(self, str): "Raise a comms DeviceNeedsAttention Exception" self.mode=self.MODENONE self.comm.shouldloop=True raise common.CommsDeviceNeedsAttention( "The phone is not responding while "+str+".\n\nSee the help for troubleshooting tips", self.desc+" on "+self.comm.port) def raisecommsexception(self, str, klass): self.mode=self.MODENONE raise klass(str, self.desc+" on "+self.comm.port) def setmode(self, desiredmode): "Ensure the phone is in the right mode" if self.mode==desiredmode: return strmode=None strdesiredmode=None for v in dir(self): if len(v)>len('MODE') and v[:4]=='MODE': if self.mode==getattr(self, v): strmode=v[4:] if desiredmode==getattr(self,v): strdesiredmode=v[4:] if strmode is None: raise Exception("No mode for %s" %(self.mode,)) if strdesiredmode is None: raise Exception("No desired mode for %s" %(desiredmode,)) strmode=strmode.lower() strdesiredmode=strdesiredmode.lower() for func in ( '_setmode%sto%s' % (strmode, strdesiredmode), '_setmode%s' % (strdesiredmode,)): if hasattr(self,func): try: res=getattr(self, func)() except modeignoreerrortypes: res=False if res: # mode changed! self.mode=desiredmode self.log("Now in "+strdesiredmode+" mode") return # failed self.mode=self.MODENONE while self.comm.IsAuto(): self.comm.NextAutoPort() return self.setmode(desiredmode) self.raisecommsdnaexception("transitioning mode from %s to %s" \ % (strmode, strdesiredmode)) def _setmodemodem(self): for baud in (0, 115200, 38400, 19200, 230400): if baud: if not self.comm.setbaudrate(baud): continue self.comm.write("AT\r\n") try: self.comm.readsome() return True except modeignoreerrortypes: pass return False def readobject(self, filename, object_class, logtitle=None, uselocalfs=False): """Read the specified filename and bind it to the object class""" if uselocalfs: self.log('Reading local file: %s'%filename) _buf=prototypes.buffer(file(filename, 'rb').read()) else: _buf=prototypes.buffer(self.getfilecontents(filename)) _obj=object_class() _obj.readfrombuffer(_buf, logtitle=logtitle) return _obj def writeobject(self, filename, obj, logtitle=None, uselocalfs=False): """Writhe the object into the file""" _buf=prototypes.buffer() obj.writetobuffer(_buf, logtitle=logtitle) if uselocalfs: file(filename, 'wb').write(_buf.getvalue()) else: self.writefile(filename, _buf.getvalue()) getmemo=NotImplemented gettodo=NotImplemented getsms=NotImplemented getcallhistory=NotImplemented getplaylist=NotImplemented gett9db=NotImplemented class Profile(object): BP_Calendar_Version=2 WALLPAPER_WIDTH=100 WALLPAPER_HEIGHT=100 MAX_WALLPAPER_BASENAME_LENGTH=64 WALLPAPER_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789 ." WALLPAPER_CONVERT_FORMAT="bmp" MAX_RINGTONE_BASENAME_LENGTH=64 RINGTONE_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789 ." DIALSTRING_CHARS="[^0-9PT#*]" field_color_data=field_color.default_field_info # delay auto-detection when the phone is plugged in (in seconds) autodetect_delay=0 # delay in rebooting the phone after a send data and delay between offline and reboot in seconds. reboot_delay=0 # which usb ids correspond to us usbids=( ) # which device classes we are. deviceclasses=("modem", "serial") def __init__(self): pass _supportedsyncs=( ) def SyncQuery(self, source, action, actiontype): if actiontype=='EXCLUSIVE': # Check for exclusive, shoud not be masked by None return (source, action, actiontype) in self._supportedsyncs else: return (source, action, actiontype) in self._supportedsyncs or \ (source, action, None) in self._supportedsyncs # fill in the list of ringtone/sound origins on your phone ringtoneorigins=() #e.g. #ringtoneorigins=('ringers', 'sounds') # ringtone origins that are not available for the contact assignment excluded_ringtone_origins=() # wallpaper origins that are not available for the contact assignment excluded_wallpaper_origins=('video',) # fill in your own image origins using these stockimageorigins={ "images": {'meta-help': 'General images'}, "mms": {'meta-help': 'Multimedia Messages'}, "drm": {'meta-help': 'DRM protected images'}, "camera": {'meta-help': 'Camera images'}, "camera-fullsize": {'meta-help': 'Fullsize camera images'}, "video": {'meta-help': 'Video clips'}, "images(sd)": {'meta-help': 'General images stored on removable media'}, "video(sd)": {'meta-help': 'Video clips stored on removable media'}, "picture ids": {'meta-help': 'Images used for contact/group Picture ID'}, } stockimagetargets={ # You need to override in your GetTargetsForImageOrigin function and update # for ImgFileInfo fields "wallpaper": {'meta-help': 'Display as wallpaper'}, "pictureid": {'meta-help': 'Display as picture id for a caller'}, "outsidelcd": {'meta-help': 'Display on outside screen'}, "fullscreen": {'meta-help': 'Fullscreen such as startup screen'}, } # Override in derived class - use this template. Avoid defining new origins - # instead add them to the stock list and use that. That will ensure the # same string and description are used for all phones. imageorigins={} imageorigins.update(common.getkv(stockimageorigins, "images")) imageorigins.update(common.getkv(stockimageorigins, "mms")) imageorigins.update(common.getkv(stockimageorigins, "camera")) imageorigins[""]={'meta-help': "The developer needs to update this phone profile"} def GetImageOrigins(self): # Note: only return origins that you can write back to the phone return self.imageorigins def GetTargetsForImageOrigin(self, origin): if False: # this is how you should do it in your derived class. The update dictionary # fields must correspond to what fileinfo.ImgFileInfo uses. The information # is used to save the new file out. targets={} targets.update(common.getkv(self.stockimagetargets, "wallpaper", {'width': 77, 'height': 177, 'format': "BMP"})) targets.update(common.getkv(self.stockimagetargets, "outsidelcd", {'width': 77, 'height': 77, 'format': "JPEG"})) return targets # this code is here to work with the old way we used to do things convert_format_map={'bmp': 'BMP', 'jpg': 'JPEG', 'png': 'PNG'} return common.getkv(self.stockimagetargets, "wallpaper", {'width': self.WALLPAPER_WIDTH, 'height': self.WALLPAPER_HEIGHT, 'format': convert_format_map[self.WALLPAPER_CONVERT_FORMAT]}) def QueryAudio(self, origin, currentextension, audiofileinfo): """Query for MP3 file support Raise an exception if you cannot support the ringtone or any conversion of it. @param audiofileinfo: A L{fileinfo.AudioFileInfo} object specifying file's audio properties @param currentextension: The extension currently used by the file @return: ("file extension", audiofile object). The file extension (excluding the leading dot) to make the file use. The audiofile object can be what was passed in unaltered meaning the file is fine as is, or make a new one to specify how the file should be converted. Note there is a MAXSIZE attribute if you need to limit file size. """ # default implementation leaves file unaltered return (currentextension, audiofileinfo) def phonize(self, str): """Convert the phone number into something the phone understands uses DIALSTRING_CHARS to compare phone number with and strips all other characters from the string """ return re.sub(self.DIALSTRING_CHARS, "", str) class NoFilesystem: def __raisefna(self, desc): raise common.FeatureNotAvailable(self.desc+" on "+self.comm.port, desc+" is not available with this model phone") def getfirmwareinformation(self): self.__raisefna("getfirmwareinformation") def offlinerequest(self, reset=False, delay=0): self.__raisefna("offlinerequest") def modemmoderequest(self): self.__raisefna("modemmoderequest") def mkdir(self, name): self.__raisefna("filesystem (mkdir)") def mkdirs(self, name): self.__raisefna("filesystem (mkdirs)") def rmdir(self, name): self.__raisefna("filesystem (rmdir)") def rmfile(self, name): self.__raisefna("filesystem (rmfile)") def getfilesystem(self, dir="", recurse=0): self.__raisefna("filesystem (getfilesystem)") def writefile(self, name, contents): self.__raisefna("filesystem (writefile)") def getfilecontents(self, name): self.__raisefna("filesystem (getfilecontents)") bitpim-1.0.7+dfsg1/src/phones/com_samsung_packet.py0000644001616600161660000010715510723167110020455 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Joe Pham ### Copyright (C) 2004-2006 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_samsung_packet.py 4470 2007-11-28 04:27:52Z djpham $ """Communicate with a Samsung SCH-Axx phone using AT commands""" # standard modules import time import re import datetime # BitPim modules import bpcalendar import p_brew import com_brew import com_phone import prototypes import common import commport import todo import memo class Phone(com_phone.Phone, com_brew.BrewProtocol): "Talk to a Samsung phone using AT commands" desc="Samsung SPH-Axx phone" MODEPHONEBOOK="modephonebook" __read_timeout=0.1 # Calendar class vars # if your phone does not support and end-datetime, set this to a default # value such as 19800106T000000 # if it does support end-datetime, set this to None __cal_end_datetime_value=None __cal_alarm_values={0: 10, 1: 30, 2: 60, 3: -1, 4: 0 } __cal_max_name_len=32 _cal_max_events_per_day=9 builtinringtones=() builtinimages=() def __init__(self, logtarget, commport): "Call all the contructors and sets initial modes" com_phone.Phone.__init__(self, logtarget, commport) com_brew.BrewProtocol.__init__(self) self.mode=self.MODENONE def _setmodephonebooktobrew(self): self.log("_setmodephonebooktobrew") self.setmode(self.MODEMODEM) self.setmode(self.MODEBREW) return True def _setmodemodemtobrew(self): self.log("_setmodemodemtobrew") self.log('Switching from modem to BREW') try: self.comm.sendatcommand('$QCDMG') return True except commport.ATError: return False def _setmodebrewtomodem(self): self.log("_setmodebrewtomodem") self.log('Switching from BREW to modem') try: self.modemmoderequest() self.mode=self.MODEMODEM return True except: pass # give it a 2nd try try: self.modemmoderequest() self.mode=self.MODEMODEM return True except: return False def _setmodemodemtophonebook(self): self.log("_setmodemodemtophonebook") self.log('Switching from modem to phonebook') response=self.comm.sendatcommand("#PMODE=1") return True def _setmodemodem(self): self.log("_setmodemodem") req=p_brew.memoryconfigrequest() respc=p_brew.memoryconfigresponse # Just try waking phone up first try: self.comm.sendatcommand("Z") self.comm.sendatcommand('E0V1') return True except: pass # Now check to see if in diagnostic mode for baud in 0, 38400,115200: if baud: if not self.comm.setbaudrate(baud): continue try: self.sendbrewcommand(req, respc, callsetmode=False) self.log('In BREW mode, trying to switch to Modem mode') # Infinite loop if self._setmodebrewtomodem(): break return False except com_brew.modeignoreerrortypes: pass # Should be in modem mode. Wake up the interface for baud in (0, 115200, 19200, 230400): self.log("Baud="+`baud`) if baud: if not self.comm.setbaudrate(baud): continue try: self.comm.sendatcommand("Z") self.comm.sendatcommand('E0V1') return True except: pass return False def _setmodephonebook(self): self.log("_setmodephonebook") self.setmode(self.MODEMODEM) self.setmode(self.MODEPHONEBOOK) return True def _setmodephonebooktomodem(self): self.log("_setmodephonebooktomodem") self.log('Switching from phonebook to modem') response=self.comm.sendatcommand("#PMODE=0") return True def sendpbcommand(self, request, responseclass, ignoreerror=False, fixup=None): """Similar to the sendpbcommand in com_sanyo and com_lg, except that a list of responses is returned, one per line of information returned from the phone""" buffer=prototypes.buffer() request.writetobuffer(buffer, logtitle="Samsung phonebook request") data=buffer.getvalue() try: response_lines=self.comm.sendatcommand(data, ignoreerror=ignoreerror) except commport.ATError: self.comm.success=False self.mode=self.MODENONE self.raisecommsdnaexception("manipulating the phonebook") self.comm.success=True reslist=[] for line in response_lines: if fixup: line=fixup(line) res=responseclass() buffer=prototypes.buffer(line) res.readfrombuffer(buffer, logtitle="Samsung phonebook response") reslist.append(res) return reslist def get_esn(self): req=self.protocolclass.esnrequest() res=self.sendpbcommand(req, self.protocolclass.esnresponse) try: return res[0].esn except: pass return '' def get_model(self): req=self.protocolclass.modelreq() res=self.sendpbcommand(req, self.protocolclass.modelresp) try: return res[0].model except: return '' def get_manufacturer(self): req=self.protocolclass.manufacturerreq() res=self.sendpbcommand(req, self.protocolclass.manufacturerresp) try: return res[0].manufacturer except: return '' def get_battery_level(self): req=self.protocolclass.batterylevelreq() res=self.sendpbcommand(req, self.protocolclass.batterylevelresp) try: return res[0].levelstr except: return '' def read_groups(self): g={} # Don't crash if phone doesn't accept #PMODE=1 (Canadian phones) try: self.setmode(self.MODEPHONEBOOK) except: return g req=self.protocolclass.groupnamerequest() for i in range(self.protocolclass.NUMGROUPS+1): req.gid=i # Don't crash if phone doesn't support groups try: res=self.sendpbcommand(req, self.protocolclass.groupnameresponse) except: return g g[i]={'name': res[0].entry.groupname} return g def savegroups(self, data): """Write the groups, sending only those groups that have had a name change. (So that ringers don't get messed up)""" groups=data['groups'] groups_onphone=self.read_groups() # Get groups on phone # If groups read doesn't work, don't try to write groups if not groups_onphone: return keys=groups.keys() keys.sort() for k in keys: if groups[k]['name']!=groups_onphone[k]['name']: if groups[k]['name']!="Unassigned": req=self.protocolclass.groupnamesetrequest() req.gid=k req.groupname=groups[k]['name'] # Response will have ERROR, even though it works self.sendpbcommand(req, self.protocolclass.unparsedresponse, ignoreerror=True) def pblinerepair(self, line): "Repair a line from a phone with broken firmware" return line def getphonebook(self, result): """Read the phonebook data.""" pbook={} self.setmode(self.MODEPHONEBOOK) count=0 req=self.protocolclass.phonebookslotrequest() lastname="" for slot in range(1,self.protocolclass.NUMPHONEBOOKENTRIES+1): req.slot=slot res=self.sendpbcommand(req, self.protocolclass.phonebookslotresponse, fixup=self.pblinerepair) if len(res) > 0: lastname=res[0].entry.name self.log(`slot`+": "+lastname) entry=self.extractphonebookentry(res[0].entry, result) pbook[count]=entry count+=1 else: lastname="" self.progress(slot, self.protocolclass.NUMPHONEBOOKENTRIES, 'Reading entry %(slot)d: %(name)s'%{ 'slot': slot, 'name': lastname }) result['phonebook']=pbook cats=[] for i in result['groups']: if result['groups'][i]['name']!='Unassigned': cats.append(result['groups'][i]['name']) result['categories']=cats print "returning keys",result.keys() return pbook def _extractphonebook_numbers(self, entry, fundamentals, res): """Extract and build phone numbers""" res['numbers']=[] secret=0 speeddialtype=entry.speeddial numberindex=0 for type in self.numbertypetab: if len(entry.numbers[numberindex].number): numhash={'number': entry.numbers[numberindex].number, 'type': type } if entry.numbers[numberindex].secret==1: secret=1 if speeddialtype==numberindex: numhash['speeddial']=entry.uslot res['numbers'].append(numhash) numberindex+=1 # Field after each number is secret flag. Setting secret on # phone sets secret flag for every defined phone number res['flags']=[ {'secret': secret} ] def _extractphonebook_ringtone(self, entry, fundamentals, res): """Extract ringtone info""" if entry.ringtone != self.protocolclass.DEFAULT_RINGTONE: tone=self.serialsname+"Index_"+`entry.ringtone` res['ringtones']=[{'ringtone': tone, 'use': 'call'}] def _extractphonebook_wallpaper(self, entry, fundamentals, res): """Extract wallpaper info""" try: if entry.wallpaper != self.protocolclass.DEFAULT_WALLPAPER: tone=self.serialsname+"Index_"+`entry.wallpaper` res['wallpapers']=[{'wallpaper': tone, 'use': 'call'}] except: pass def extractphonebookentry(self, entry, fundamentals): res={} res['serials']=[ {'sourcetype': self.serialsname, 'slot': entry.slot, 'sourceuniqueid': fundamentals['uniqueserial']} ] # only one name res['names']=[ {'full': entry.name} ] # only one category cat=fundamentals['groups'].get(entry.group, {'name': "Unassigned"})['name'] if cat!="Unassigned": res['categories']=[ {'category': cat} ] # only one email if len(entry.email): res['emails']=[ {'email': entry.email} ] # only one url if len(entry.url): res['urls']=[ {'url': entry.url} ] # separate the following processing into methods so subclass can # customize them self._extractphonebook_numbers(entry, fundamentals, res) self._extractphonebook_ringtone(entry, fundamentals, res) self._extractphonebook_wallpaper(entry, fundamentals, res) # We don't have a place to put these # print entry.name, entry.birthday # print entry.name, entry.timestamp return res def savephonebook(self, data): "Saves out the phonebook" pb=data['phonebook'] keys=pb.keys() keys.sort() keys=keys[:self.protocolclass.NUMPHONEBOOKENTRIES] # # Read the existing phonebook so that we cache birthdays # Erase all entries, being carefull to modify entries with # with URL's first # uslots={} names={} birthdays={} req=self.protocolclass.phonebookslotrequest() self.log('Erasing '+self.desc+' phonebook') progressmax=self.protocolclass.NUMPHONEBOOKENTRIES+len(keys) for slot in range(1,self.protocolclass.NUMPHONEBOOKENTRIES+1): req.slot=slot self.progress(slot,progressmax,"Erasing "+`slot`) try: res=self.sendpbcommand(req,self.protocolclass.phonebookslotresponse, fixup=self.pblinerepair) if len(res) > 0: names[slot]=res[0].entry.name birthdays[slot]=res[0].entry.birthday if len(res[0].entry.url)>0: reqhack=self.protocolclass.phonebookslotupdaterequest() reqhack.entry=res[0].entry reqhack.entry.url="" reqhack.entry.ringtone=self.protocolclass.DEFAULT_RINGTONE reqhack.entry.wallpaper=self.protocolclass.DEFAULT_WALLPAPER reqhack.entry.timestamp=[1900,1,1,0,0,0] self.sendpbcommand(reqhack, self.protocolclass.phonebookslotupdateresponse) else: names[slot]="" except: names[slot]="" self.log("Slot "+`slot`+" read failed") reqerase=self.protocolclass.phonebooksloterase() reqerase.slot=slot self.sendpbcommand(reqerase, self.protocolclass.phonebookslotupdateresponse) self.savegroups(data) for i in range(len(keys)): slot=keys[i] req=self.protocolclass.phonebookslotupdaterequest() req.entry=self.makeentry(pb[slot],data) if names[slot]==req.entry.name: req.entry.birthday=birthdays[slot] self.log('Writing entry '+`slot`+" - "+req.entry.name) self.progress(i+self.protocolclass.NUMPHONEBOOKENTRIES,progressmax,"Writing "+req.entry.name) self.sendpbcommand(req, self.protocolclass.phonebookslotupdateresponse) self.progress(progressmax+1,progressmax+1, "Phone book write completed") return data def makeentry(self, entry, data): e=self.protocolclass.pbentry() for k in entry: # special treatment for lists if k=='numbertypes' or k=='secrets': continue if k=='ringtone': # e.ringtone=self._findmediaindex(data['ringtone-index'], entry['ringtone'], entry['name'], 'ringtone') continue elif k=='wallpaper': # e.wallpaper=self._findmediaindex(data['wallpaper-index'], entry['wallpaper'], entry['name'], 'wallpaper') continue elif k=='numbers': #l=getattr(e,k) for numberindex in range(self.protocolclass.NUMPHONENUMBERS): enpn=self.protocolclass.phonenumber() # l.append(enpn) e.numbers.append(enpn) for i in range(len(entry[k])): numberindex=entry['numbertypes'][i] e.numbers[numberindex].number=entry[k][i] e.numbers[numberindex].secret=entry['secrets'][i] continue # everything else we just set setattr(e, k, entry[k]) e.ringtone=self.protocolclass.DEFAULT_RINGTONE e.wallpaper=self.protocolclass.DEFAULT_WALLPAPER return e def getcalendar(self, result): entries = {} self.log("Getting calendar entries") self.setmode(self.MODEPHONEBOOK) req=self.protocolclass.eventrequest() cal_cnt=0 for slot in range(self.protocolclass.NUMCALENDAREVENTS): req.slot=slot res=self.sendpbcommand(req,self.protocolclass.eventresponse) if len(res) > 0: self.progress(slot+1, self.protocolclass.NUMCALENDAREVENTS, res[0].eventname) # build a calendar entry entry=bpcalendar.CalendarEntry() # start time date entry.start=res[0].start[0:5] if res[0].end: # valid end time entry.end=res[0].end[0:5] else: entry.end=entry.start # description[location] entry.desc_loc=res[0].eventname try: alarm=self.__cal_alarm_values[res[0].alarm] except: alarm=None entry.alarm=alarm # update calendar dict entries[entry.id]=entry cal_cnt += 1 result['calendar']=entries self.setmode(self.MODEMODEM) return result def _set_unused_calendar_fields(self, entry): entry['repeat']=None entry['changeserial']=1 entry['snoozedelay']=0 entry['daybitmap']=0 entry['ringtone']=0 def process_calendar(self, dict): """ Optimize and expand calendar data suitable for phone download """ # first go thru the dict to organize events by date # and also determine the latest event date r={} rp=[] today=datetime.date.today() last_date=today if __debug__: print 'original calendar:' for k,e in dict.items(): if __debug__: print e.description,':',e.start sd=datetime.date(*e.start[:3]) ed=datetime.date(*e.end[:3]) if ed>last_date: last_date=ed if e.repeat is None: if sd>=today: r.setdefault(e.start[:3], []).append(Samsung_Calendar(e)) else: if ed>=today: rp.append(e) # go through and expand on the repeated events delta_1=datetime.timedelta(1) for n in rp: current_date=today end_date=datetime.date(*n.end[:3]) cnt=0 while current_date<=end_date: if n.is_active(current_date.year, current_date.month, current_date.day): cd_l=(current_date.year, current_date.month, current_date.day) r.setdefault(cd_l, []).append(\ Samsung_Calendar(n, cd_l)) cnt+=1 if cnt>self.protocolclass.NUMCALENDAREVENTS: # enough for this one, breaking out break current_date+=delta_1 # and put them all into a list res=[] keys=r.keys() # sort by date keys.sort() for k in keys: # sort by time within this date r[k].sort() # clip by max events/day if len(r[k])>self._cal_max_events_per_day: res+=r[k][:self._cal_max_events_per_day] else: res+=r[k] # clip by max events if len(res)>self.protocolclass.NUMCALENDAREVENTS: res=res[:self.protocolclass.NUMCALENDAREVENTS] return res def savecalendar(self, dict, merge): self.log("Sending calendar entries") cal=self.process_calendar(dict['calendar']) # testing if __debug__: print 'processed calendar: ', len(cal), ' items' for c in cal: print c.description,':', c.start self.setmode(self.MODEPHONEBOOK) self.log("Saving calendar entries") cal_cnt=0 req=self.protocolclass.eventupdaterequest() l = self.protocolclass.NUMCALENDAREVENTS for c in cal: # Save this entry to phone # self.log('Item %d' %k) # pos req.slot=cal_cnt # start date time #print "Start ",c.start req.start=list(c.start)+[0] # end date time if self.__cal_end_datetime_value is None: # valid end-datetime req.end=list(c.end)+[0] #print "End ",c.end else: # no end-datetime, set to start-datetime req.end=req.start # time stamp req.timestamp=list(time.localtime(time.time())[0:6]) #print "Alarm ",c.alarm req.alarm=c.alarm # Name, check for bad char & proper length #name=c.description.replace('"', '') name=c.desc_loc if len(name)>self.__cal_max_name_len: name=name[:self.__cal_max_name_len] req.eventname=name # and save it self.progress(cal_cnt+1, l, "Updating "+name) self.sendpbcommand(req,self.protocolclass.eventupdateresponse) cal_cnt += 1 # delete the rest of the calendar slots self.log('Deleting unused entries') for k in range(cal_cnt, l): self.progress(k, l, "Deleting entry %d" % k) reqerase=self.protocolclass.eventsloterase() reqerase.slot=k self.sendpbcommand(reqerase, self.protocolclass.eventupdateresponse) self.setmode(self.MODEMODEM) return dict def gettodo(self, result): todos = {} self.log("Getting todo entries") self.setmode(self.MODEPHONEBOOK) req=self.protocolclass.todorequest() for slot in range(self.protocolclass.NUMTODOENTRIES): req.slot=slot res=self.sendpbcommand(req,self.protocolclass.todoresponse) if len(res) > 0: entry = todo.TodoEntry() entry.summary=res[0].subject # Convert back to formatted date string # Shouldn't todo take dates as a list like # other modules do? entry.due_date='%4.4d%2.2d%2.2d'%(res[0].duedate[0],res[0].duedate[1],res[0].duedate[2]) if res[0].priority: entry.priority=1 else: entry.priority=10 self.log("Todo "+`slot`+" "+entry.summary+" "+entry.due_date) todos[entry.id]=entry result['todo']=todos return result def savetodo(self, dict, merge): self.setmode(self.MODEPHONEBOOK) todos=dict.get('todo', {}) #todos=dict['todo'] todos_len=len(todos) l=self.protocolclass.NUMTODOENTRIES if todos_len > l: self.log("The number of Todo entries (%d) exceeded the mamximum (%d)" % (cal_len, l)) self.setmode(self.MODEPHONEBOOK) self.log("Saving todo entries") todo_cnt=0 req=self.protocolclass.todoupdaterequest() for k in todos: todo=todos[k] print todo.__doc__ if todo_cnt >= l: break req.slot=todo_cnt if todo.priority is not None and todo.priority<5: req.priority=1 else: req.priority=0 dd=todo.due_date req.duedate=(int(dd[:4]),int(dd[4:6]),int(dd[6:10]),0,0,0) req.timestamp=list(time.localtime(time.time())[0:6]) req.subject=todo.summary self.sendpbcommand(req,self.protocolclass.todoupdateresponse) todo_cnt += 1 req=self.protocolclass.todoerase() for slot in range(todo_cnt, self.protocolclass.NUMTODOENTRIES): req.slot=slot self.sendpbcommand(req,self.protocolclass.todoupdateresponse) def getmemo(self, result): memos = {} self.log("Getting memo entries") self.setmode(self.MODEPHONEBOOK) req=self.protocolclass.memorequest() for slot in range(self.protocolclass.NUMMEMOENTRIES): req.slot=slot res=self.sendpbcommand(req,self.protocolclass.memoresponse) if len(res) > 0: entry=memo.MemoEntry() entry.text=res[0].text entry.set_date_isostr='%4.4d%2.2d%2.2dT%2.2d%2.2d%2.2d'%(res[0].timestamp[0],res[0].timestamp[1],res[0].timestamp[2],res[0].timestamp[3],res[0].timestamp[4],res[0].timestamp[5]) memos[entry.id]=entry result['memo']=memos return result def savememo(self, dict, merge): self.setmode(self.MODEPHONEBOOK) memos=dict.get('memo', {}) memos_len=len(memos) l=self.protocolclass.NUMMEMOENTRIES if memos_len > l: self.log("The number of Memo entries (%d) exceeded the mamximum (%d)" % (cal_len, l)) self.setmode(self.MODEPHONEBOOK) self.log("Saving memo entries") memo_cnt=0 req=self.protocolclass.memoupdaterequest() for k in memos: memo=memos[k] if memo_cnt >= l: break dd=memo.set_date_isostr req.timestamp=list(time.localtime(time.time())[0:6]) req.text=memo.text req.slot=memo_cnt self.sendpbcommand(req,self.protocolclass.memoupdateresponse) memo_cnt += 1 req=self.protocolclass.memoerase() for slot in range(memo_cnt, self.protocolclass.NUMMEMOENTRIES): req.slot=slot self.sendpbcommand(req,self.protocolclass.memoupdateresponse) # return some basic info about this phone def getbasicinfo(self, phoneinfo): self.log('Getting Basic Phone Info') for _key,_ in phoneinfo.standard_keys: _val=getattr(self, 'get_'+_key, lambda *_: '')() if _val: setattr(phoneinfo, _key, _val) getphoneinfo=getbasicinfo getcallhistory=None class Profile(com_phone.Profile): BP_Calendar_Version=3 usbids=( ( 0x04e8, 0x6601, 1), # Samsung internal USB interface ) # which device classes we are. deviceclasses=("modem","serial") WALLPAPER_WIDTH=128 WALLPAPER_HEIGHT=118 OVERSIZE_PERCENTAGE=100 MAX_WALLPAPER_BASENAME_LENGTH=19 WALLPAPER_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 .`~!@#$%^&()-_=+[{]};\'" WALLPAPER_CONVERT_FORMAT="png" MAX_RINGTONE_BASENAME_LENGTH=19 RINGTONE_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 .`~!@#$%^&()-_=+[{]};\'" _supportedsyncs=() def __init__(self): com_phone.Profile.__init__(self) def _getgroup(self, name, groups): for key in groups: if groups[key]['name']==name: return key,groups[key] return None,None def normalisegroups(self, helper, data): "Assigns groups based on category data" pad=[] keys=data['groups'].keys() keys.sort() for k in keys: if k==self.protocolclass.NUMGROUPS: # ignore key 4 which is 'Unassigned' name=data['groups'][k]['name'] pad.append(name) groups=helper.getmostpopularcategories(self.protocolclass.NUMGROUPS, data['phonebook'], ["Unassigned"], 12, pad) # alpha sort groups.sort() # newgroups newgroups={} # Unassigned in 5th group newgroups[self.protocolclass.NUMGROUPS]={'name': 'Unassigned'} # populate for name in groups: # existing entries keep same key if name=="Unassigned": continue key,value=self._getgroup(name, data['groups']) if key is not None: newgroups[key]=value # new entries get whatever numbers are free for name in groups: key,value=self._getgroup(name, newgroups) if key is None: for key in range(self.protocolclass.NUMGROUPS): if key not in newgroups: newgroups[key]={'name': name, 'icon': 1} break # yay, done if data['groups']!=newgroups: data['groups']=newgroups def convertphonebooktophone(self, helper, data): """Converts the data to what will be used by the phone @param data: contains the dict returned by getfundamentals as well as where the results go""" self.normalisegroups(helper, data) results={} # find which entries are already known to this phone pb=data['phonebook'] # decorate list with (slot, pbkey) tuples slots=[ (helper.getserial(pb[pbentry].get("serials", []), self.serialsname, data['uniqueserial'], "slot", None), pbentry) for pbentry in pb] slots.sort() # numeric order # make two lists - one contains known slots, one doesn't newones=[(pbentry,slot) for slot,pbentry in slots if slot is None] existing=[(pbentry,slot) for slot,pbentry in slots if slot is not None] uslotsused={} tempslot=0 # Temporarily just pick slots and speed dial in order for pbentry,slot in existing+newones: if len(results)==self.protocolclass.NUMPHONEBOOKENTRIES: break try: e={} # entry out entry=data['phonebook'][pbentry] secret=helper.getflag(entry.get('flags', []), 'secret', False) if secret: secret=1 else: secret=0 # name e['name']=helper.getfullname(entry.get('names', []),1,1,20)[0] cat=helper.makeone(helper.getcategory(entry.get('categories',[]),0,1,12), None) if cat is None: e['group']=self.protocolclass.NUMGROUPS # Unassigned group else: key,value=self._getgroup(cat, data['groups']) if key is not None: e['group']=key else: # Sorry no space for this category e['group']=self.protocolclass.NUMGROUPS # Unassigned # email addresses e['email']=helper.makeone(helper.getemails(entry.get('emails', []), 0,1,32), "") # url e['url']=helper.makeone(helper.geturls(entry.get('urls', []), 0,1,32), "") # phone numbers # there must be at least one phone number minnumbers=1 numbers=helper.getnumbers(entry.get('numbers', []),minnumbers,self.protocolclass.NUMPHONENUMBERS) e['numbertypes']=[] e['numbers']=[] e['secrets']=[] unusednumbers=[] # Hold duplicate types here typesused={} defaulttypenum=0 for num in numbers: typename=num['type'] if typesused.has_key(typename): unusednumbers.append(num) continue typesused[typename]=1 for typenum,tnsearch in enumerate(self.numbertypetab): if typename==tnsearch: if defaulttypenum==0: defaulttypenum=typenum number=self.phonize(num['number']) if len(number)>self.protocolclass.MAXNUMBERLEN: # :: TODO:: number is too long and we have to either truncate it or ignore it? number=number[:self.protocolclass.MAXNUMBERLEN] e['numbers'].append(number) if(num.has_key('speeddial')): # Only one number per name can be a speed dial # Should make speed dial be the first that # we come accross e['speeddial']=typenum tryuslot = num['speeddial'] e['numbertypes'].append(typenum) e['secrets'].append(secret) break # Should print to log when a requested speed dial slot is # not available if e.has_key('speeddial'): if tryuslot>=1 and tryuslot<=self.protocolclass.NUMPHONEBOOKENTRIES and not uslotsused.has_key(tryuslot): uslotsused[tryuslot]=1 e['uslot']=tryuslot else: e['speeddial']=defaulttypenum e['ringtone']=helper.getringtone(entry.get('ringtones', []), 'call', None) e['wallpaper']=helper.getwallpaper(entry.get('wallpapers', []), 'call', None) # find the right slot if slot is None or slot<1 or slot>self.protocolclass.NUMPHONEBOOKENTRIES or slot in results: for i in range(1,100000): if i not in results: slot=i break e['slot']=slot e['timestamp']=list(time.localtime(time.time())[0:6]) results[slot]=e except helper.ConversionFailed: continue # Fill in uslot for entries that don't have it. tryuslot=1 for slot in results.keys(): e=results[slot] if not e.has_key('uslot'): while tryuslot=k: self._alarm=self._cal_alarm_values[k] break def __lt__(self, rhs): return self.startrhs.start def __ge__(self, rhs): return self.start>=rhs.start def _get_start(self): return self._start start=property(fget=_get_start) def _get_end(self): return self._end end=property(fget=_get_end) def _get_desc(self): return self._desc description=property(fget=_get_desc) def _get_desc_loc(self): return self._desc_loc desc_loc=property(fget=_get_desc_loc) def _get_alarm(self): return self._alarm alarm=property(fget=_get_alarm) bitpim-1.0.7+dfsg1/src/phones/p_samsungspha900.py0000644001616600161660000027365511017154737017735 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Proposed descriptions of data usign AT commands""" from prototypes import * # We use LSB for all integer like fields in diagnostic mode UINT=UINTlsb BOOL=BOOLlsb # NUMPHONEBOOKENTRIES=500 NUMEMAILS=3 NUMPHONENUMBERS=5 MAXNUMBERLEN=32 NUMTODOENTRIES=9 NUMSMSENTRIES=94 MAXMEMOLEN=72 NUMGROUPS=4 AMSREGISTRY="ams/AmsRegistry" DEFAULT_RINGTONE=0 DEFAULT_WALLPAPER=0 class firmwarerequest(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(firmwarerequest,self).__init__(**dict) if self.__class__ is firmwarerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(firmwarerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(firmwarerequest,kwargs) if len(args): dict2={'sizeinbytes': 1, 'constant': 0x00} dict2.update(kwargs) kwargs=dict2 self.__field_command=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1, 'constant': 0x00}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class firmwareresponse(BaseProtogenClass): __fields=['command', 'unknown'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(firmwareresponse,self).__init__(**dict) if self.__class__ is firmwareresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(firmwareresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(firmwareresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_unknown=UNKNOWN() self.__field_unknown.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UNKNOWN): self.__field_unknown=value else: self.__field_unknown=UNKNOWN(value,) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('unknown', self.__field_unknown, None) class numberheader(BaseProtogenClass): __fields=['head1', 'head2', 'head3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(numberheader,self).__init__(**dict) if self.__class__ is numberheader: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(numberheader,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(numberheader,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_head1 except: self.__field_head1=UINT(**{'sizeinbytes': 1, 'default': 0x26}) self.__field_head1.writetobuffer(buf) try: self.__field_head2 except: self.__field_head2=UINT(**{'sizeinbytes': 1, 'constant': 0x39}) self.__field_head2.writetobuffer(buf) try: self.__field_head3 except: self.__field_head3=UINT(**{'sizeinbytes': 1, 'constant': 0x0}) self.__field_head3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_head1=UINT(**{'sizeinbytes': 1, 'default': 0x26}) self.__field_head1.readfrombuffer(buf) self.__field_head2=UINT(**{'sizeinbytes': 1, 'constant': 0x39}) self.__field_head2.readfrombuffer(buf) self.__field_head3=UINT(**{'sizeinbytes': 1, 'constant': 0x0}) self.__field_head3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_head1(self): try: self.__field_head1 except: self.__field_head1=UINT(**{'sizeinbytes': 1, 'default': 0x26}) return self.__field_head1.getvalue() def __setfield_head1(self, value): if isinstance(value,UINT): self.__field_head1=value else: self.__field_head1=UINT(value,**{'sizeinbytes': 1, 'default': 0x26}) def __delfield_head1(self): del self.__field_head1 head1=property(__getfield_head1, __setfield_head1, __delfield_head1, None) def __getfield_head2(self): try: self.__field_head2 except: self.__field_head2=UINT(**{'sizeinbytes': 1, 'constant': 0x39}) return self.__field_head2.getvalue() def __setfield_head2(self, value): if isinstance(value,UINT): self.__field_head2=value else: self.__field_head2=UINT(value,**{'sizeinbytes': 1, 'constant': 0x39}) def __delfield_head2(self): del self.__field_head2 head2=property(__getfield_head2, __setfield_head2, __delfield_head2, None) def __getfield_head3(self): try: self.__field_head3 except: self.__field_head3=UINT(**{'sizeinbytes': 1, 'constant': 0x0}) return self.__field_head3.getvalue() def __setfield_head3(self, value): if isinstance(value,UINT): self.__field_head3=value else: self.__field_head3=UINT(value,**{'sizeinbytes': 1, 'constant': 0x0}) def __delfield_head3(self): del self.__field_head3 head3=property(__getfield_head3, __setfield_head3, __delfield_head3, None) def iscontainer(self): return True def containerelements(self): yield ('head1', self.__field_head1, None) yield ('head2', self.__field_head2, None) yield ('head3', self.__field_head3, None) class nameheader(BaseProtogenClass): __fields=['head1', 'head2', 'head3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(nameheader,self).__init__(**dict) if self.__class__ is nameheader: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(nameheader,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(nameheader,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_head1 except: self.__field_head1=UINT(**{'sizeinbytes': 1, 'default': 0xd3}) self.__field_head1.writetobuffer(buf) try: self.__field_head2 except: self.__field_head2=UINT(**{'sizeinbytes': 1, 'constant': 0x59}) self.__field_head2.writetobuffer(buf) try: self.__field_head3 except: self.__field_head3=UINT(**{'sizeinbytes': 1, 'constant': 0x0e}) self.__field_head3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_head1=UINT(**{'sizeinbytes': 1, 'default': 0xd3}) self.__field_head1.readfrombuffer(buf) self.__field_head2=UINT(**{'sizeinbytes': 1, 'constant': 0x59}) self.__field_head2.readfrombuffer(buf) self.__field_head3=UINT(**{'sizeinbytes': 1, 'constant': 0x0e}) self.__field_head3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_head1(self): try: self.__field_head1 except: self.__field_head1=UINT(**{'sizeinbytes': 1, 'default': 0xd3}) return self.__field_head1.getvalue() def __setfield_head1(self, value): if isinstance(value,UINT): self.__field_head1=value else: self.__field_head1=UINT(value,**{'sizeinbytes': 1, 'default': 0xd3}) def __delfield_head1(self): del self.__field_head1 head1=property(__getfield_head1, __setfield_head1, __delfield_head1, None) def __getfield_head2(self): try: self.__field_head2 except: self.__field_head2=UINT(**{'sizeinbytes': 1, 'constant': 0x59}) return self.__field_head2.getvalue() def __setfield_head2(self, value): if isinstance(value,UINT): self.__field_head2=value else: self.__field_head2=UINT(value,**{'sizeinbytes': 1, 'constant': 0x59}) def __delfield_head2(self): del self.__field_head2 head2=property(__getfield_head2, __setfield_head2, __delfield_head2, None) def __getfield_head3(self): try: self.__field_head3 except: self.__field_head3=UINT(**{'sizeinbytes': 1, 'constant': 0x0e}) return self.__field_head3.getvalue() def __setfield_head3(self, value): if isinstance(value,UINT): self.__field_head3=value else: self.__field_head3=UINT(value,**{'sizeinbytes': 1, 'constant': 0x0e}) def __delfield_head3(self): del self.__field_head3 head3=property(__getfield_head3, __setfield_head3, __delfield_head3, None) def iscontainer(self): return True def containerelements(self): yield ('head1', self.__field_head1, None) yield ('head2', self.__field_head2, None) yield ('head3', self.__field_head3, None) class numberrequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(numberrequest,self).__init__(**dict) if self.__class__ is numberrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(numberrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(numberrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=numberheader() self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 128}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=numberheader() self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 128}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=numberheader() return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,numberheader): self.__field_header=value else: self.__field_header=numberheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 128}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 128}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class numberresponse(BaseProtogenClass): __fields=['header', 'slot', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(numberresponse,self).__init__(**dict) if self.__class__ is numberresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(numberresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(numberresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=numberheader() self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_entry=numberentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,numberheader): self.__field_header=value else: self.__field_header=numberheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,numberentry): self.__field_entry=value else: self.__field_entry=numberentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class numberentry(BaseProtogenClass): __fields=['pad1', 'pos', 'numbertype', 'pad2', 'numlen', 'num'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(numberentry,self).__init__(**dict) if self.__class__ is numberentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(numberentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(numberentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.writetobuffer(buf) self.__field_pos.writetobuffer(buf) self.__field_numbertype.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad2.writetobuffer(buf) self.__field_numlen.writetobuffer(buf) self.__field_num.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.readfrombuffer(buf) self.__field_pos=UINT(**{'sizeinbytes': 1}) self.__field_pos.readfrombuffer(buf) self.__field_numbertype=UINT(**{'sizeinbytes': 1}) self.__field_numbertype.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad2.readfrombuffer(buf) self.__field_numlen=UINT(**{'sizeinbytes': 1}) self.__field_numlen.readfrombuffer(buf) self.__field_num=USTRING(**{'sizeinbytes': 48, 'raiseonunterminatedread': False}) self.__field_num.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 1}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, None) def __getfield_numbertype(self): return self.__field_numbertype.getvalue() def __setfield_numbertype(self, value): if isinstance(value,UINT): self.__field_numbertype=value else: self.__field_numbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_numbertype(self): del self.__field_numbertype numbertype=property(__getfield_numbertype, __setfield_numbertype, __delfield_numbertype, None) def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 2}) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 2}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_numlen(self): return self.__field_numlen.getvalue() def __setfield_numlen(self, value): if isinstance(value,UINT): self.__field_numlen=value else: self.__field_numlen=UINT(value,**{'sizeinbytes': 1}) def __delfield_numlen(self): del self.__field_numlen numlen=property(__getfield_numlen, __setfield_numlen, __delfield_numlen, None) def __getfield_num(self): return self.__field_num.getvalue() def __setfield_num(self, value): if isinstance(value,USTRING): self.__field_num=value else: self.__field_num=USTRING(value,**{'sizeinbytes': 48, 'raiseonunterminatedread': False}) def __delfield_num(self): del self.__field_num num=property(__getfield_num, __setfield_num, __delfield_num, None) def iscontainer(self): return True def containerelements(self): yield ('pad1', self.__field_pad1, None) yield ('pos', self.__field_pos, None) yield ('numbertype', self.__field_numbertype, None) yield ('pad2', self.__field_pad2, None) yield ('numlen', self.__field_numlen, None) yield ('num', self.__field_num, None) class numberupdaterequest(BaseProtogenClass): __fields=['header', 'slot', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(numberupdaterequest,self).__init__(**dict) if self.__class__ is numberupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(numberupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(numberupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=numberheader(**{'head1': 0x27}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_entry except: self.__field_entry=numberentry() self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=numberheader(**{'head1': 0x27}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_entry=numberentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=numberheader(**{'head1': 0x27}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,numberheader): self.__field_header=value else: self.__field_header=numberheader(value,**{'head1': 0x27}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=numberentry() return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,numberentry): self.__field_entry=value else: self.__field_entry=numberentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) class namerequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(namerequest,self).__init__(**dict) if self.__class__ is namerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(namerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(namerequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=nameheader() self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 140}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=nameheader() self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 140}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=nameheader() return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,nameheader): self.__field_header=value else: self.__field_header=nameheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 140}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 140}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class nameresponse(BaseProtogenClass): __fields=['header', 'slot', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(nameresponse,self).__init__(**dict) if self.__class__ is nameresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(nameresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(nameresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=nameheader() self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_entry=nameentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,nameheader): self.__field_header=value else: self.__field_header=nameheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,nameentry): self.__field_entry=value else: self.__field_entry=nameentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class nameentry(BaseProtogenClass): __fields=['bitmask', 'p2', 'numberps', 'emailp', 'urlp', 'p3', 'name_len', 'pad1', 'name', 'pad2', 'nickname', 'pad3', 'memo'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(nameentry,self).__init__(**dict) if self.__class__ is nameentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(nameentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(nameentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_bitmask.writetobuffer(buf) try: self.__field_p2 except: self.__field_p2=UNKNOWN(**{'sizeinbytes': 2}) self.__field_p2.writetobuffer(buf) try: self.__field_numberps except: self.__field_numberps=LIST(**{'elementclass': _gen_p_samsungspha900_96, 'length': NUMPHONENUMBERS}) self.__field_numberps.writetobuffer(buf) try: self.__field_emailp except: self.__field_emailp=UINT(**{'sizeinbytes': 2, 'default': 0}) self.__field_emailp.writetobuffer(buf) try: self.__field_urlp except: self.__field_urlp=UINT(**{'sizeinbytes': 2, 'default': 0}) self.__field_urlp.writetobuffer(buf) try: self.__field_p3 except: self.__field_p3=UNKNOWN(**{'sizeinbytes': 2}) self.__field_p3.writetobuffer(buf) self.__field_name_len.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad1.writetobuffer(buf) self.__field_name.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad2.writetobuffer(buf) try: self.__field_nickname except: self.__field_nickname=USTRING(**{'sizeinbytes': 20, 'raiseonunterminatedread': False, 'default': ""}) self.__field_nickname.writetobuffer(buf) try: self.__field_pad3 except: self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad3.writetobuffer(buf) try: self.__field_memo except: self.__field_memo=USTRING(**{'sizeinbytes': 72, 'raiseonunterminatedread': False, 'default': "", 'raiseontruncate': False}) self.__field_memo.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_bitmask=UINT(**{'sizeinbytes': 2}) self.__field_bitmask.readfrombuffer(buf) self.__field_p2=UNKNOWN(**{'sizeinbytes': 2}) self.__field_p2.readfrombuffer(buf) self.__field_numberps=LIST(**{'elementclass': _gen_p_samsungspha900_96, 'length': NUMPHONENUMBERS}) self.__field_numberps.readfrombuffer(buf) self.__field_emailp=UINT(**{'sizeinbytes': 2, 'default': 0}) self.__field_emailp.readfrombuffer(buf) self.__field_urlp=UINT(**{'sizeinbytes': 2, 'default': 0}) self.__field_urlp.readfrombuffer(buf) self.__field_p3=UNKNOWN(**{'sizeinbytes': 2}) self.__field_p3.readfrombuffer(buf) self.__field_name_len=UINT(**{'sizeinbytes': 1}) self.__field_name_len.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad1.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 20, 'raiseonunterminatedread': False, 'raiseontruncate': False}) self.__field_name.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad2.readfrombuffer(buf) self.__field_nickname=USTRING(**{'sizeinbytes': 20, 'raiseonunterminatedread': False, 'default': ""}) self.__field_nickname.readfrombuffer(buf) self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad3.readfrombuffer(buf) self.__field_memo=USTRING(**{'sizeinbytes': 72, 'raiseonunterminatedread': False, 'default': "", 'raiseontruncate': False}) self.__field_memo.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_bitmask(self): return self.__field_bitmask.getvalue() def __setfield_bitmask(self, value): if isinstance(value,UINT): self.__field_bitmask=value else: self.__field_bitmask=UINT(value,**{'sizeinbytes': 2}) def __delfield_bitmask(self): del self.__field_bitmask bitmask=property(__getfield_bitmask, __setfield_bitmask, __delfield_bitmask, None) def __getfield_p2(self): try: self.__field_p2 except: self.__field_p2=UNKNOWN(**{'sizeinbytes': 2}) return self.__field_p2.getvalue() def __setfield_p2(self, value): if isinstance(value,UNKNOWN): self.__field_p2=value else: self.__field_p2=UNKNOWN(value,**{'sizeinbytes': 2}) def __delfield_p2(self): del self.__field_p2 p2=property(__getfield_p2, __setfield_p2, __delfield_p2, None) def __getfield_numberps(self): try: self.__field_numberps except: self.__field_numberps=LIST(**{'elementclass': _gen_p_samsungspha900_96, 'length': NUMPHONENUMBERS}) return self.__field_numberps.getvalue() def __setfield_numberps(self, value): if isinstance(value,LIST): self.__field_numberps=value else: self.__field_numberps=LIST(value,**{'elementclass': _gen_p_samsungspha900_96, 'length': NUMPHONENUMBERS}) def __delfield_numberps(self): del self.__field_numberps numberps=property(__getfield_numberps, __setfield_numberps, __delfield_numberps, None) def __getfield_emailp(self): try: self.__field_emailp except: self.__field_emailp=UINT(**{'sizeinbytes': 2, 'default': 0}) return self.__field_emailp.getvalue() def __setfield_emailp(self, value): if isinstance(value,UINT): self.__field_emailp=value else: self.__field_emailp=UINT(value,**{'sizeinbytes': 2, 'default': 0}) def __delfield_emailp(self): del self.__field_emailp emailp=property(__getfield_emailp, __setfield_emailp, __delfield_emailp, None) def __getfield_urlp(self): try: self.__field_urlp except: self.__field_urlp=UINT(**{'sizeinbytes': 2, 'default': 0}) return self.__field_urlp.getvalue() def __setfield_urlp(self, value): if isinstance(value,UINT): self.__field_urlp=value else: self.__field_urlp=UINT(value,**{'sizeinbytes': 2, 'default': 0}) def __delfield_urlp(self): del self.__field_urlp urlp=property(__getfield_urlp, __setfield_urlp, __delfield_urlp, None) def __getfield_p3(self): try: self.__field_p3 except: self.__field_p3=UNKNOWN(**{'sizeinbytes': 2}) return self.__field_p3.getvalue() def __setfield_p3(self, value): if isinstance(value,UNKNOWN): self.__field_p3=value else: self.__field_p3=UNKNOWN(value,**{'sizeinbytes': 2}) def __delfield_p3(self): del self.__field_p3 p3=property(__getfield_p3, __setfield_p3, __delfield_p3, None) def __getfield_name_len(self): return self.__field_name_len.getvalue() def __setfield_name_len(self, value): if isinstance(value,UINT): self.__field_name_len=value else: self.__field_name_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_name_len(self): del self.__field_name_len name_len=property(__getfield_name_len, __setfield_name_len, __delfield_name_len, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 2}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 2}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 20, 'raiseonunterminatedread': False, 'raiseontruncate': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_nickname(self): try: self.__field_nickname except: self.__field_nickname=USTRING(**{'sizeinbytes': 20, 'raiseonunterminatedread': False, 'default': ""}) return self.__field_nickname.getvalue() def __setfield_nickname(self, value): if isinstance(value,USTRING): self.__field_nickname=value else: self.__field_nickname=USTRING(value,**{'sizeinbytes': 20, 'raiseonunterminatedread': False, 'default': ""}) def __delfield_nickname(self): del self.__field_nickname nickname=property(__getfield_nickname, __setfield_nickname, __delfield_nickname, None) def __getfield_pad3(self): try: self.__field_pad3 except: self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad3.getvalue() def __setfield_pad3(self, value): if isinstance(value,UNKNOWN): self.__field_pad3=value else: self.__field_pad3=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad3(self): del self.__field_pad3 pad3=property(__getfield_pad3, __setfield_pad3, __delfield_pad3, None) def __getfield_memo(self): try: self.__field_memo except: self.__field_memo=USTRING(**{'sizeinbytes': 72, 'raiseonunterminatedread': False, 'default': "", 'raiseontruncate': False}) return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,USTRING): self.__field_memo=value else: self.__field_memo=USTRING(value,**{'sizeinbytes': 72, 'raiseonunterminatedread': False, 'default': "", 'raiseontruncate': False}) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def iscontainer(self): return True def containerelements(self): yield ('bitmask', self.__field_bitmask, None) yield ('p2', self.__field_p2, None) yield ('numberps', self.__field_numberps, None) yield ('emailp', self.__field_emailp, None) yield ('urlp', self.__field_urlp, None) yield ('p3', self.__field_p3, None) yield ('name_len', self.__field_name_len, None) yield ('pad1', self.__field_pad1, None) yield ('name', self.__field_name, None) yield ('pad2', self.__field_pad2, None) yield ('nickname', self.__field_nickname, None) yield ('pad3', self.__field_pad3, None) yield ('memo', self.__field_memo, None) class _gen_p_samsungspha900_96(BaseProtogenClass): 'Anonymous inner class' __fields=['slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_samsungspha900_96,self).__init__(**dict) if self.__class__ is _gen_p_samsungspha900_96: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_samsungspha900_96,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_samsungspha900_96,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0} dict2.update(kwargs) kwargs=dict2 self.__field_slot=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 2, 'default': 0}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2, 'default': 0}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) class nameupdaterequest(BaseProtogenClass): __fields=['header', 'slot', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(nameupdaterequest,self).__init__(**dict) if self.__class__ is nameupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(nameupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(nameupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=nameheader(**{'head1': 0xd4}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_entry except: self.__field_entry=nameentry() self.__field_entry.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=nameheader(**{'head1': 0xd4}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_entry=nameentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=nameheader(**{'head1': 0xd4}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,nameheader): self.__field_header=value else: self.__field_header=nameheader(value,**{'head1': 0xd4}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=nameentry() return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,nameentry): self.__field_entry=value else: self.__field_entry=nameentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 3}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class beginendupdaterequest(BaseProtogenClass): __fields=['command', 'beginend'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(beginendupdaterequest,self).__init__(**dict) if self.__class__ is beginendupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(beginendupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(beginendupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x29}) self.__field_command.writetobuffer(buf) self.__field_beginend.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x29}) self.__field_command.readfrombuffer(buf) self.__field_beginend=UINT(**{'sizeinbytes': 2}) self.__field_beginend.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x29}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1, 'constant': 0x29}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_beginend(self): return self.__field_beginend.getvalue() def __setfield_beginend(self, value): if isinstance(value,UINT): self.__field_beginend=value else: self.__field_beginend=UINT(value,**{'sizeinbytes': 2}) def __delfield_beginend(self): del self.__field_beginend beginend=property(__getfield_beginend, __setfield_beginend, __delfield_beginend, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('beginend', self.__field_beginend, None) class beginendupdateresponse(BaseProtogenClass): __fields=['command', 'beginend'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(beginendupdateresponse,self).__init__(**dict) if self.__class__ is beginendupdateresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(beginendupdateresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(beginendupdateresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_beginend.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_beginend=UINT(**{'sizeinbytes': 2}) self.__field_beginend.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_beginend(self): return self.__field_beginend.getvalue() def __setfield_beginend(self, value): if isinstance(value,UINT): self.__field_beginend=value else: self.__field_beginend=UINT(value,**{'sizeinbytes': 2}) def __delfield_beginend(self): del self.__field_beginend beginend=property(__getfield_beginend, __setfield_beginend, __delfield_beginend, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('beginend', self.__field_beginend, None) class statusrequest(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(statusrequest,self).__init__(**dict) if self.__class__ is statusrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(statusrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(statusrequest,kwargs) if len(args): dict2={'sizeinbytes': 1, 'constant': 0x0c} dict2.update(kwargs) kwargs=dict2 self.__field_command=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x0c}) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x0c}) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x0c}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1, 'constant': 0x0c}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class statusresponse(BaseProtogenClass): __fields=['readyvalue', 'command', 'dunno1', 'esn', 'flag0', 'dunno2', 'ready', 'dunno3', 'flag2', 'dunno4', 'flag3', 'unknown'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(statusresponse,self).__init__(**dict) if self.__class__ is statusresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(statusresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(statusresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_readyvalue except: self.__field_readyvalue=UINT(**{'constant': 0x0}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_esn.writetobuffer(buf) self.__field_flag0.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_ready.writetobuffer(buf) self.__field_dunno3.writetobuffer(buf) self.__field_flag2.writetobuffer(buf) self.__field_dunno4.writetobuffer(buf) self.__field_flag3.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_dunno1=UNKNOWN(**{'sizeinbytes': 3}) self.__field_dunno1.readfrombuffer(buf) self.__field_esn=UINT(**{'sizeinbytes': 4}) self.__field_esn.readfrombuffer(buf) self.__field_flag0=UINT(**{'sizeinbytes': 1}) self.__field_flag0.readfrombuffer(buf) self.__field_dunno2=UNKNOWN(**{'sizeinbytes': 14}) self.__field_dunno2.readfrombuffer(buf) self.__field_ready=UINT(**{'sizeinbytes': 1}) self.__field_ready.readfrombuffer(buf) self.__field_dunno3=UINT(**{'sizeinbytes': 1}) self.__field_dunno3.readfrombuffer(buf) self.__field_flag2=UINT(**{'sizeinbytes': 1}) self.__field_flag2.readfrombuffer(buf) self.__field_dunno4=UNKNOWN(**{'sizeinbytes': 6}) self.__field_dunno4.readfrombuffer(buf) self.__field_flag3=UINT(**{'sizeinbytes': 1}) self.__field_flag3.readfrombuffer(buf) self.__field_unknown=UNKNOWN() self.__field_unknown.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_readyvalue(self): return self.__field_readyvalue.getvalue() def __setfield_readyvalue(self, value): if isinstance(value,UINT): self.__field_readyvalue=value else: self.__field_readyvalue=UINT(value,**{'constant': 0x0}) def __delfield_readyvalue(self): del self.__field_readyvalue readyvalue=property(__getfield_readyvalue, __setfield_readyvalue, __delfield_readyvalue, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UNKNOWN): self.__field_dunno1=value else: self.__field_dunno1=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_esn(self): return self.__field_esn.getvalue() def __setfield_esn(self, value): if isinstance(value,UINT): self.__field_esn=value else: self.__field_esn=UINT(value,**{'sizeinbytes': 4}) def __delfield_esn(self): del self.__field_esn esn=property(__getfield_esn, __setfield_esn, __delfield_esn, None) def __getfield_flag0(self): return self.__field_flag0.getvalue() def __setfield_flag0(self, value): if isinstance(value,UINT): self.__field_flag0=value else: self.__field_flag0=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag0(self): del self.__field_flag0 flag0=property(__getfield_flag0, __setfield_flag0, __delfield_flag0, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UNKNOWN): self.__field_dunno2=value else: self.__field_dunno2=UNKNOWN(value,**{'sizeinbytes': 14}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_ready(self): return self.__field_ready.getvalue() def __setfield_ready(self, value): if isinstance(value,UINT): self.__field_ready=value else: self.__field_ready=UINT(value,**{'sizeinbytes': 1}) def __delfield_ready(self): del self.__field_ready ready=property(__getfield_ready, __setfield_ready, __delfield_ready, None) def __getfield_dunno3(self): return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,UINT): self.__field_dunno3=value else: self.__field_dunno3=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_flag2(self): return self.__field_flag2.getvalue() def __setfield_flag2(self, value): if isinstance(value,UINT): self.__field_flag2=value else: self.__field_flag2=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag2(self): del self.__field_flag2 flag2=property(__getfield_flag2, __setfield_flag2, __delfield_flag2, None) def __getfield_dunno4(self): return self.__field_dunno4.getvalue() def __setfield_dunno4(self, value): if isinstance(value,UNKNOWN): self.__field_dunno4=value else: self.__field_dunno4=UNKNOWN(value,**{'sizeinbytes': 6}) def __delfield_dunno4(self): del self.__field_dunno4 dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None) def __getfield_flag3(self): return self.__field_flag3.getvalue() def __setfield_flag3(self, value): if isinstance(value,UINT): self.__field_flag3=value else: self.__field_flag3=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag3(self): del self.__field_flag3 flag3=property(__getfield_flag3, __setfield_flag3, __delfield_flag3, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UNKNOWN): self.__field_unknown=value else: self.__field_unknown=UNKNOWN(value,) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def iscontainer(self): return True def containerelements(self): yield ('readyvalue', self.__field_readyvalue, None) yield ('command', self.__field_command, None) yield ('dunno1', self.__field_dunno1, None) yield ('esn', self.__field_esn, None) yield ('flag0', self.__field_flag0, None) yield ('dunno2', self.__field_dunno2, None) yield ('ready', self.__field_ready, None) yield ('dunno3', self.__field_dunno3, None) yield ('flag2', self.__field_flag2, None) yield ('dunno4', self.__field_dunno4, None) yield ('flag3', self.__field_flag3, None) yield ('unknown', self.__field_unknown, None) class writeenable(BaseProtogenClass): __fields=['c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'c10', 'c11', 'c12', 'c13', 'c14', 'c15', 'c16'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(writeenable,self).__init__(**dict) if self.__class__ is writeenable: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(writeenable,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(writeenable,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_c1 except: self.__field_c1=UINT(**{'sizeinbytes': 1, 'constant': 0x46}) self.__field_c1.writetobuffer(buf) try: self.__field_c2 except: self.__field_c2=UINT(**{'sizeinbytes': 1, 'constant': 0x01}) self.__field_c2.writetobuffer(buf) try: self.__field_c3 except: self.__field_c3=UINT(**{'sizeinbytes': 1, 'constant': 0xf2}) self.__field_c3.writetobuffer(buf) try: self.__field_c4 except: self.__field_c4=UINT(**{'sizeinbytes': 1, 'constant': 0x03}) self.__field_c4.writetobuffer(buf) try: self.__field_c5 except: self.__field_c5=UINT(**{'sizeinbytes': 1, 'constant': 0x0f}) self.__field_c5.writetobuffer(buf) try: self.__field_c6 except: self.__field_c6=UINT(**{'sizeinbytes': 1, 'constant': 0x5f}) self.__field_c6.writetobuffer(buf) try: self.__field_c7 except: self.__field_c7=UINT(**{'sizeinbytes': 1, 'constant': 0x67}) self.__field_c7.writetobuffer(buf) try: self.__field_c8 except: self.__field_c8=UINT(**{'sizeinbytes': 1, 'constant': 0x8f}) self.__field_c8.writetobuffer(buf) try: self.__field_c9 except: self.__field_c9=UINT(**{'sizeinbytes': 1, 'constant': 0xf9}) self.__field_c9.writetobuffer(buf) try: self.__field_c10 except: self.__field_c10=UINT(**{'sizeinbytes': 1, 'constant': 0xa2}) self.__field_c10.writetobuffer(buf) try: self.__field_c11 except: self.__field_c11=UINT(**{'sizeinbytes': 1, 'constant': 0x3f}) self.__field_c11.writetobuffer(buf) try: self.__field_c12 except: self.__field_c12=UINT(**{'sizeinbytes': 1, 'constant': 0x7d}) self.__field_c12.writetobuffer(buf) try: self.__field_c13 except: self.__field_c13=UINT(**{'sizeinbytes': 1, 'constant': 0x5e}) self.__field_c13.writetobuffer(buf) try: self.__field_c14 except: self.__field_c14=UINT(**{'sizeinbytes': 1, 'constant': 0x35}) self.__field_c14.writetobuffer(buf) try: self.__field_c15 except: self.__field_c15=UINT(**{'sizeinbytes': 1, 'constant': 0x5c}) self.__field_c15.writetobuffer(buf) try: self.__field_c16 except: self.__field_c16=UINT(**{'sizeinbytes': 1, 'constant': 0x7e}) self.__field_c16.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_c1=UINT(**{'sizeinbytes': 1, 'constant': 0x46}) self.__field_c1.readfrombuffer(buf) self.__field_c2=UINT(**{'sizeinbytes': 1, 'constant': 0x01}) self.__field_c2.readfrombuffer(buf) self.__field_c3=UINT(**{'sizeinbytes': 1, 'constant': 0xf2}) self.__field_c3.readfrombuffer(buf) self.__field_c4=UINT(**{'sizeinbytes': 1, 'constant': 0x03}) self.__field_c4.readfrombuffer(buf) self.__field_c5=UINT(**{'sizeinbytes': 1, 'constant': 0x0f}) self.__field_c5.readfrombuffer(buf) self.__field_c6=UINT(**{'sizeinbytes': 1, 'constant': 0x5f}) self.__field_c6.readfrombuffer(buf) self.__field_c7=UINT(**{'sizeinbytes': 1, 'constant': 0x67}) self.__field_c7.readfrombuffer(buf) self.__field_c8=UINT(**{'sizeinbytes': 1, 'constant': 0x8f}) self.__field_c8.readfrombuffer(buf) self.__field_c9=UINT(**{'sizeinbytes': 1, 'constant': 0xf9}) self.__field_c9.readfrombuffer(buf) self.__field_c10=UINT(**{'sizeinbytes': 1, 'constant': 0xa2}) self.__field_c10.readfrombuffer(buf) self.__field_c11=UINT(**{'sizeinbytes': 1, 'constant': 0x3f}) self.__field_c11.readfrombuffer(buf) self.__field_c12=UINT(**{'sizeinbytes': 1, 'constant': 0x7d}) self.__field_c12.readfrombuffer(buf) self.__field_c13=UINT(**{'sizeinbytes': 1, 'constant': 0x5e}) self.__field_c13.readfrombuffer(buf) self.__field_c14=UINT(**{'sizeinbytes': 1, 'constant': 0x35}) self.__field_c14.readfrombuffer(buf) self.__field_c15=UINT(**{'sizeinbytes': 1, 'constant': 0x5c}) self.__field_c15.readfrombuffer(buf) self.__field_c16=UINT(**{'sizeinbytes': 1, 'constant': 0x7e}) self.__field_c16.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_c1(self): try: self.__field_c1 except: self.__field_c1=UINT(**{'sizeinbytes': 1, 'constant': 0x46}) return self.__field_c1.getvalue() def __setfield_c1(self, value): if isinstance(value,UINT): self.__field_c1=value else: self.__field_c1=UINT(value,**{'sizeinbytes': 1, 'constant': 0x46}) def __delfield_c1(self): del self.__field_c1 c1=property(__getfield_c1, __setfield_c1, __delfield_c1, None) def __getfield_c2(self): try: self.__field_c2 except: self.__field_c2=UINT(**{'sizeinbytes': 1, 'constant': 0x01}) return self.__field_c2.getvalue() def __setfield_c2(self, value): if isinstance(value,UINT): self.__field_c2=value else: self.__field_c2=UINT(value,**{'sizeinbytes': 1, 'constant': 0x01}) def __delfield_c2(self): del self.__field_c2 c2=property(__getfield_c2, __setfield_c2, __delfield_c2, None) def __getfield_c3(self): try: self.__field_c3 except: self.__field_c3=UINT(**{'sizeinbytes': 1, 'constant': 0xf2}) return self.__field_c3.getvalue() def __setfield_c3(self, value): if isinstance(value,UINT): self.__field_c3=value else: self.__field_c3=UINT(value,**{'sizeinbytes': 1, 'constant': 0xf2}) def __delfield_c3(self): del self.__field_c3 c3=property(__getfield_c3, __setfield_c3, __delfield_c3, None) def __getfield_c4(self): try: self.__field_c4 except: self.__field_c4=UINT(**{'sizeinbytes': 1, 'constant': 0x03}) return self.__field_c4.getvalue() def __setfield_c4(self, value): if isinstance(value,UINT): self.__field_c4=value else: self.__field_c4=UINT(value,**{'sizeinbytes': 1, 'constant': 0x03}) def __delfield_c4(self): del self.__field_c4 c4=property(__getfield_c4, __setfield_c4, __delfield_c4, None) def __getfield_c5(self): try: self.__field_c5 except: self.__field_c5=UINT(**{'sizeinbytes': 1, 'constant': 0x0f}) return self.__field_c5.getvalue() def __setfield_c5(self, value): if isinstance(value,UINT): self.__field_c5=value else: self.__field_c5=UINT(value,**{'sizeinbytes': 1, 'constant': 0x0f}) def __delfield_c5(self): del self.__field_c5 c5=property(__getfield_c5, __setfield_c5, __delfield_c5, None) def __getfield_c6(self): try: self.__field_c6 except: self.__field_c6=UINT(**{'sizeinbytes': 1, 'constant': 0x5f}) return self.__field_c6.getvalue() def __setfield_c6(self, value): if isinstance(value,UINT): self.__field_c6=value else: self.__field_c6=UINT(value,**{'sizeinbytes': 1, 'constant': 0x5f}) def __delfield_c6(self): del self.__field_c6 c6=property(__getfield_c6, __setfield_c6, __delfield_c6, None) def __getfield_c7(self): try: self.__field_c7 except: self.__field_c7=UINT(**{'sizeinbytes': 1, 'constant': 0x67}) return self.__field_c7.getvalue() def __setfield_c7(self, value): if isinstance(value,UINT): self.__field_c7=value else: self.__field_c7=UINT(value,**{'sizeinbytes': 1, 'constant': 0x67}) def __delfield_c7(self): del self.__field_c7 c7=property(__getfield_c7, __setfield_c7, __delfield_c7, None) def __getfield_c8(self): try: self.__field_c8 except: self.__field_c8=UINT(**{'sizeinbytes': 1, 'constant': 0x8f}) return self.__field_c8.getvalue() def __setfield_c8(self, value): if isinstance(value,UINT): self.__field_c8=value else: self.__field_c8=UINT(value,**{'sizeinbytes': 1, 'constant': 0x8f}) def __delfield_c8(self): del self.__field_c8 c8=property(__getfield_c8, __setfield_c8, __delfield_c8, None) def __getfield_c9(self): try: self.__field_c9 except: self.__field_c9=UINT(**{'sizeinbytes': 1, 'constant': 0xf9}) return self.__field_c9.getvalue() def __setfield_c9(self, value): if isinstance(value,UINT): self.__field_c9=value else: self.__field_c9=UINT(value,**{'sizeinbytes': 1, 'constant': 0xf9}) def __delfield_c9(self): del self.__field_c9 c9=property(__getfield_c9, __setfield_c9, __delfield_c9, None) def __getfield_c10(self): try: self.__field_c10 except: self.__field_c10=UINT(**{'sizeinbytes': 1, 'constant': 0xa2}) return self.__field_c10.getvalue() def __setfield_c10(self, value): if isinstance(value,UINT): self.__field_c10=value else: self.__field_c10=UINT(value,**{'sizeinbytes': 1, 'constant': 0xa2}) def __delfield_c10(self): del self.__field_c10 c10=property(__getfield_c10, __setfield_c10, __delfield_c10, None) def __getfield_c11(self): try: self.__field_c11 except: self.__field_c11=UINT(**{'sizeinbytes': 1, 'constant': 0x3f}) return self.__field_c11.getvalue() def __setfield_c11(self, value): if isinstance(value,UINT): self.__field_c11=value else: self.__field_c11=UINT(value,**{'sizeinbytes': 1, 'constant': 0x3f}) def __delfield_c11(self): del self.__field_c11 c11=property(__getfield_c11, __setfield_c11, __delfield_c11, None) def __getfield_c12(self): try: self.__field_c12 except: self.__field_c12=UINT(**{'sizeinbytes': 1, 'constant': 0x7d}) return self.__field_c12.getvalue() def __setfield_c12(self, value): if isinstance(value,UINT): self.__field_c12=value else: self.__field_c12=UINT(value,**{'sizeinbytes': 1, 'constant': 0x7d}) def __delfield_c12(self): del self.__field_c12 c12=property(__getfield_c12, __setfield_c12, __delfield_c12, None) def __getfield_c13(self): try: self.__field_c13 except: self.__field_c13=UINT(**{'sizeinbytes': 1, 'constant': 0x5e}) return self.__field_c13.getvalue() def __setfield_c13(self, value): if isinstance(value,UINT): self.__field_c13=value else: self.__field_c13=UINT(value,**{'sizeinbytes': 1, 'constant': 0x5e}) def __delfield_c13(self): del self.__field_c13 c13=property(__getfield_c13, __setfield_c13, __delfield_c13, None) def __getfield_c14(self): try: self.__field_c14 except: self.__field_c14=UINT(**{'sizeinbytes': 1, 'constant': 0x35}) return self.__field_c14.getvalue() def __setfield_c14(self, value): if isinstance(value,UINT): self.__field_c14=value else: self.__field_c14=UINT(value,**{'sizeinbytes': 1, 'constant': 0x35}) def __delfield_c14(self): del self.__field_c14 c14=property(__getfield_c14, __setfield_c14, __delfield_c14, None) def __getfield_c15(self): try: self.__field_c15 except: self.__field_c15=UINT(**{'sizeinbytes': 1, 'constant': 0x5c}) return self.__field_c15.getvalue() def __setfield_c15(self, value): if isinstance(value,UINT): self.__field_c15=value else: self.__field_c15=UINT(value,**{'sizeinbytes': 1, 'constant': 0x5c}) def __delfield_c15(self): del self.__field_c15 c15=property(__getfield_c15, __setfield_c15, __delfield_c15, None) def __getfield_c16(self): try: self.__field_c16 except: self.__field_c16=UINT(**{'sizeinbytes': 1, 'constant': 0x7e}) return self.__field_c16.getvalue() def __setfield_c16(self, value): if isinstance(value,UINT): self.__field_c16=value else: self.__field_c16=UINT(value,**{'sizeinbytes': 1, 'constant': 0x7e}) def __delfield_c16(self): del self.__field_c16 c16=property(__getfield_c16, __setfield_c16, __delfield_c16, None) def iscontainer(self): return True def containerelements(self): yield ('c1', self.__field_c1, None) yield ('c2', self.__field_c2, None) yield ('c3', self.__field_c3, None) yield ('c4', self.__field_c4, None) yield ('c5', self.__field_c5, None) yield ('c6', self.__field_c6, None) yield ('c7', self.__field_c7, None) yield ('c8', self.__field_c8, None) yield ('c9', self.__field_c9, None) yield ('c10', self.__field_c10, None) yield ('c11', self.__field_c11, None) yield ('c12', self.__field_c12, None) yield ('c13', self.__field_c13, None) yield ('c14', self.__field_c14, None) yield ('c15', self.__field_c15, None) yield ('c16', self.__field_c16, None) class writeenableresponse(BaseProtogenClass): __fields=['unknown'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(writeenableresponse,self).__init__(**dict) if self.__class__ is writeenableresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(writeenableresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(writeenableresponse,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_unknown=UNKNOWN(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown=UNKNOWN() self.__field_unknown.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UNKNOWN): self.__field_unknown=value else: self.__field_unknown=UNKNOWN(value,) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def iscontainer(self): return True def containerelements(self): yield ('unknown', self.__field_unknown, None) bitpim-1.0.7+dfsg1/src/phones/com_lgvx4600.py0000644001616600161660000001017710554051740016743 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgvx4600.py 3918 2007-01-19 05:15:12Z djpham $ """Communicate with the LG VX4500 cell phone The VX4600 is substantially similar to the VX4400, although wallpapers and ringtones are done in a totally different way. """ # standard modules import time import cStringIO import sha # my modules import common import copy import p_lgvx4600 import com_lgvx4400 import com_brew import com_phone import com_lg import prototypes class Phone(com_lg.LGDirectoryMedia,com_lgvx4400.Phone): "Talk to the LG VX4600 cell phone" desc="LG-VX4600" helpid=None protocolclass=p_lgvx4600 serialsname='lgvx4600' # more VX4600 indices imagelocations=( # offset location origin maxentries (50, "usr/Wallpaper", "images", 30), ) ringtonelocations=( # offset location origin maxentries (50, "usr/Ringtone", "ringers", 30), ) builtinimages=('Butterfly', 'Flowers', 'Bird', 'Puppy','Fall', 'Castle', 'Puppy2', 'Sky', 'Teddy','Desert') builtinringtones=( 'Ring 1', 'Ring 2', 'Ring 3', 'Ring 4', 'Ring 5', 'Ring 6','Ring 7','Ring 8','Ring 9','Ring 10', 'Annen Polka','Beethoven Symphony No. 9', 'Pachelbel Canon', 'Hallelujah', 'La Traviata','Leichte Kavallerie Overture', 'Mozart Symphony No. 40', 'Bach Minuet','Farewell', 'Mozart Piano Sonata','String','Trout', 'O solemio', 'Pizzcato Polka','Stars and Stripes Forever','Pineapple Rag', 'When the Saints Go Marching In','Latin','Carol 1','Carol 2') def __init__(self, logtarget, commport): com_lgvx4400.Phone.__init__(self,logtarget,commport) com_lg.LGDirectoryMedia.__init__(self) self.mode=self.MODENONE my_model='VX4600' parentprofile=com_lgvx4400.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='LG Electronics Inc' phone_model='VX4600' WALLPAPER_WIDTH=120 WALLPAPER_HEIGHT=131 MAX_WALLPAPER_BASENAME_LENGTH=19 WALLPAPER_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ." WALLPAPER_CONVERT_FORMAT="bmp" MAX_RINGTONE_BASENAME_LENGTH=19 RINGTONE_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ." imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) def GetImageOrigins(self): return self.imageorigins # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 120, 'height': 131, 'format': "BMP"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 120, 'height': 131, 'format': "BMP"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "fullscreen", {'width': 120, 'height': 160, 'format': "BMP"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook # ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ) def __init__(self): parentprofile.__init__(self) bitpim-1.0.7+dfsg1/src/phones/p_lgc2000.py0000644001616600161660000051023710555026112016177 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG C2000""" from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_etsi import * from p_lg import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb # general constants MEDIA_RINGTONE=0 MEDIA_WALLPAPER=1 MEDIA_PHOTO=6 GROUP_INDEX_RANGE=xrange(8) MIN_RINGTONE_INDEX=0 MAX_RINGTONE_INDEX=19 MIN_WALLPAPER_INDEX=0 MAX_WALLPAPER_INDEX=19 MIN_PHOTO_INDEX=0 MAX_PHOTO_INDEX=19 CHARSET_IRA='IRA' CHARSET_BASE64='Base64' CHARSET_GSM='GSM' CHARSET_HEX='HEX' CHARSET_PCCP437='PCCP437' CHARSET_PCDN='PCDN' CHARSET_8859_1='8859-1' CHARSET_UCS2='UCS2' # Calendar constants CAL_TOTAL_ENTRIES=30 CAL_MIN_INDEX=0 CAL_MAX_INDEX=29 CAL_DESC_LEN=30 CAL_REP_NONE=0 CAL_REP_DAILY=1 CAL_REP_WEEKLY=2 CAL_REP_MONTHLY=3 CAL_REP_YEARLY=4 CAL_ALARM_NONE=0 CAL_ALARM_ONTIME=1 CAL_ALARM_15MIN=2 CAL_ALARM_30MIN=3 CAL_ALARM_1HR=4 CAL_ALARM_1DAY=5 CAL_ALARM_VALUE={ CAL_ALARM_NONE: -1, CAL_ALARM_ONTIME: 0, CAL_ALARM_15MIN: 15, CAL_ALARM_30MIN: 30, CAL_ALARM_1HR: 60, CAL_ALARM_1DAY: 1440 } CAL_ALARM_LIST=((1440, CAL_ALARM_1DAY), (60, CAL_ALARM_1HR), (30, CAL_ALARM_30MIN), (15, CAL_ALARM_15MIN), (0, CAL_ALARM_ONTIME), (-1, CAL_ALARM_NONE)) # Phonebook constans PB_MEMORY_SIM='AD' PB_MEMORY_MAIN='ME' PB_MEMORY_LAST_DIALED='LD' PB_MEMORY_LAST_RECEIVED='LR' PB_MEMORY_LAST_MISSED='LM' PB_MAIN_TOTAL_ENTRIES=255 PB_MAIN_MIN_INDEX=1 PB_MAIN_MAX_INDEX=254 PB_SIM_TOTAL_ENTRIES=250 PB_SIM_MIN_INDEX=1 PB_SIM_MAX_INDEX=250 PB_NUMBER_LEN=40 # max size of a number string PB_NAME_LEN=20 # max size of a contact name PB_EMAIL_LEN=40 PB_MEMO_LEN=50 PB_SIM_NAME_LEN=16 PB_LD_MIN_INDEX=1 PB_LD_MAX_INDEX=10 PB_LR_MIN_INDEX=1 PB_LR_MAX_INDEX=20 PB_LM_MIN_INDEX=1 PB_LM_MAX_INDEX=10 PB_CALL_HISTORY_INFO=( ('Getting Last Dialed Calls', PB_MEMORY_LAST_DIALED, PB_LD_MIN_INDEX, PB_LD_MAX_INDEX), ('Getting Last Received Calls', PB_MEMORY_LAST_RECEIVED, PB_LR_MIN_INDEX, PB_LR_MAX_INDEX), ('Getting Missed Calls', PB_MEMORY_LAST_MISSED, PB_LM_MIN_INDEX, PB_LM_MAX_INDEX)) # Memo constants MEMO_MIN_INDEX=0 MEMO_MAX_INDEX=19 MEMO_READ_CMD='+CMDR' MEMO_WRITE_CMD='+CMDW' # SMS Constants SMS_MEMORY_PHONE='ME' SMS_MEMORY_SIM='SM' SMS_MEMORY_SELECT_CMD='+CPMS' SMS_FORMAT_TEXT=1 SMS_FORMAT_PDU=0 SMS_FORMAT_CMD='+CMGF' SMS_MSG_REC_UNREAD='REC UNREAD' SMS_MSG_REC_READ='REC READ' SMS_MSG_STO_UNSENT='STO UNSENT' SMS_MSG_STO_SENT='STO SENT' SMS_MSG_ALL='ALL' SMS_MSG_LIST_CMD='+CMGL' class calendar_read_req(BaseProtogenClass): __fields=['command', 'start_index', 'end_index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(calendar_read_req,self).__init__(**dict) if self.__class__ is calendar_read_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(calendar_read_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(calendar_read_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CXDR=' }) self.__field_command.writetobuffer(buf) try: self.__field_start_index except: self.__field_start_index=CSVINT() self.__field_start_index.writetobuffer(buf) try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None }) self.__field_end_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CXDR=' }) self.__field_command.readfrombuffer(buf) self.__field_start_index=CSVINT() self.__field_start_index.readfrombuffer(buf) self.__field_end_index=CSVINT(**{ 'terminator': None }) self.__field_end_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CXDR=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+CXDR=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_start_index(self): try: self.__field_start_index except: self.__field_start_index=CSVINT() return self.__field_start_index.getvalue() def __setfield_start_index(self, value): if isinstance(value,CSVINT): self.__field_start_index=value else: self.__field_start_index=CSVINT(value,) def __delfield_start_index(self): del self.__field_start_index start_index=property(__getfield_start_index, __setfield_start_index, __delfield_start_index, None) def __getfield_end_index(self): try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None }) return self.__field_end_index.getvalue() def __setfield_end_index(self, value): if isinstance(value,CSVINT): self.__field_end_index=value else: self.__field_end_index=CSVINT(value,**{ 'terminator': None }) def __delfield_end_index(self): del self.__field_end_index end_index=property(__getfield_end_index, __setfield_end_index, __delfield_end_index, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('start_index', self.__field_start_index, None) yield ('end_index', self.__field_end_index, None) class calendar_read_resp(BaseProtogenClass): __fields=['command', 'index', 'repeat', 'alarm', 'date', 'time', 'description'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(calendar_read_resp,self).__init__(**dict) if self.__class__ is calendar_read_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(calendar_read_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(calendar_read_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) self.__field_alarm.writetobuffer(buf) self.__field_date.writetobuffer(buf) self.__field_time.writetobuffer(buf) self.__field_description.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '+CXDR:'}) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT() self.__field_index.readfrombuffer(buf) self.__field_repeat=CSVINT() self.__field_repeat.readfrombuffer(buf) self.__field_alarm=CSVINT() self.__field_alarm.readfrombuffer(buf) self.__field_date=GSMCALDATE() self.__field_date.readfrombuffer(buf) self.__field_time=GSMCALTIME() self.__field_time.readfrombuffer(buf) self.__field_description=CSVSTRING(**{ 'terminator': None }) self.__field_description.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '+CXDR:'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,CSVINT): self.__field_repeat=value else: self.__field_repeat=CSVINT(value,) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_alarm(self): return self.__field_alarm.getvalue() def __setfield_alarm(self, value): if isinstance(value,CSVINT): self.__field_alarm=value else: self.__field_alarm=CSVINT(value,) def __delfield_alarm(self): del self.__field_alarm alarm=property(__getfield_alarm, __setfield_alarm, __delfield_alarm, None) def __getfield_date(self): return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,GSMCALDATE): self.__field_date=value else: self.__field_date=GSMCALDATE(value,) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, None) def __getfield_time(self): return self.__field_time.getvalue() def __setfield_time(self, value): if isinstance(value,GSMCALTIME): self.__field_time=value else: self.__field_time=GSMCALTIME(value,) def __delfield_time(self): del self.__field_time time=property(__getfield_time, __setfield_time, __delfield_time, None) def __getfield_description(self): return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,CSVSTRING): self.__field_description=value else: self.__field_description=CSVSTRING(value,**{ 'terminator': None }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) yield ('repeat', self.__field_repeat, None) yield ('alarm', self.__field_alarm, None) yield ('date', self.__field_date, None) yield ('time', self.__field_time, None) yield ('description', self.__field_description, None) class calendar_write_check_req(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(calendar_write_check_req,self).__init__(**dict) if self.__class__ is calendar_write_check_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(calendar_write_check_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(calendar_write_check_req,kwargs) if len(args): dict2={ 'terminator': None, 'default': '+CXDW' } dict2.update(kwargs) kwargs=dict2 self.__field_command=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CXDW' }) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CXDW' }) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CXDW' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+CXDW' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class calendar_write_check_resp(BaseProtogenClass): __fields=['command', 'index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(calendar_write_check_resp,self).__init__(**dict) if self.__class__ is calendar_write_check_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(calendar_write_check_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(calendar_write_check_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': ord(' '), 'constant': '+CXDW:' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT(**{ 'terminator': None }) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': ord(' '), 'constant': '+CXDW:' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,**{ 'terminator': None }) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) class calendar_write_req(BaseProtogenClass): __fields=['command', 'index', 'repeat', 'alarm', 'date', 'time', 'description'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(calendar_write_req,self).__init__(**dict) if self.__class__ is calendar_write_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(calendar_write_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(calendar_write_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CXDW=' }) self.__field_command.writetobuffer(buf) try: self.__field_index except: self.__field_index=CSVINT() self.__field_index.writetobuffer(buf) try: self.__field_repeat except: self.__field_repeat=CSVINT() self.__field_repeat.writetobuffer(buf) try: self.__field_alarm except: self.__field_alarm=CSVINT() self.__field_alarm.writetobuffer(buf) try: self.__field_date except: self.__field_date=GSMCALDATE() self.__field_date.writetobuffer(buf) try: self.__field_time except: self.__field_time=GSMCALTIME() self.__field_time.writetobuffer(buf) try: self.__field_description except: self.__field_description=CSVSTRING(**{ 'terminator': None, 'maxsizeinbytes': CAL_DESC_LEN, 'raiseontruncate': False }) self.__field_description.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CXDW=' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT() self.__field_index.readfrombuffer(buf) self.__field_repeat=CSVINT() self.__field_repeat.readfrombuffer(buf) self.__field_alarm=CSVINT() self.__field_alarm.readfrombuffer(buf) self.__field_date=GSMCALDATE() self.__field_date.readfrombuffer(buf) self.__field_time=GSMCALTIME() self.__field_time.readfrombuffer(buf) self.__field_description=CSVSTRING(**{ 'terminator': None, 'maxsizeinbytes': CAL_DESC_LEN, 'raiseontruncate': False }) self.__field_description.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CXDW=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+CXDW=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): try: self.__field_index except: self.__field_index=CSVINT() return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_repeat(self): try: self.__field_repeat except: self.__field_repeat=CSVINT() return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,CSVINT): self.__field_repeat=value else: self.__field_repeat=CSVINT(value,) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_alarm(self): try: self.__field_alarm except: self.__field_alarm=CSVINT() return self.__field_alarm.getvalue() def __setfield_alarm(self, value): if isinstance(value,CSVINT): self.__field_alarm=value else: self.__field_alarm=CSVINT(value,) def __delfield_alarm(self): del self.__field_alarm alarm=property(__getfield_alarm, __setfield_alarm, __delfield_alarm, None) def __getfield_date(self): try: self.__field_date except: self.__field_date=GSMCALDATE() return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,GSMCALDATE): self.__field_date=value else: self.__field_date=GSMCALDATE(value,) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, None) def __getfield_time(self): try: self.__field_time except: self.__field_time=GSMCALTIME() return self.__field_time.getvalue() def __setfield_time(self, value): if isinstance(value,GSMCALTIME): self.__field_time=value else: self.__field_time=GSMCALTIME(value,) def __delfield_time(self): del self.__field_time time=property(__getfield_time, __setfield_time, __delfield_time, None) def __getfield_description(self): try: self.__field_description except: self.__field_description=CSVSTRING(**{ 'terminator': None, 'maxsizeinbytes': CAL_DESC_LEN, 'raiseontruncate': False }) return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,CSVSTRING): self.__field_description=value else: self.__field_description=CSVSTRING(value,**{ 'terminator': None, 'maxsizeinbytes': CAL_DESC_LEN, 'raiseontruncate': False }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) yield ('repeat', self.__field_repeat, None) yield ('alarm', self.__field_alarm, None) yield ('date', self.__field_date, None) yield ('time', self.__field_time, None) yield ('description', self.__field_description, None) class calendar_del_req(BaseProtogenClass): __fields=['command', 'index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(calendar_del_req,self).__init__(**dict) if self.__class__ is calendar_del_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(calendar_del_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(calendar_del_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CXDW=' }) self.__field_command.writetobuffer(buf) try: self.__field_index except: self.__field_index=CSVINT(**{ 'terminator': None }) self.__field_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CXDW=' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT(**{ 'terminator': None }) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CXDW=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+CXDW=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): try: self.__field_index except: self.__field_index=CSVINT(**{ 'terminator': None }) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,**{ 'terminator': None }) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) class media_selector_req(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(media_selector_req,self).__init__(**dict) if self.__class__ is media_selector_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(media_selector_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(media_selector_req,kwargs) if len(args): dict2={ 'terminator': None, 'default': '+DDLS?' } dict2.update(kwargs) kwargs=dict2 self.__field_command=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLS?' }) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLS?' }) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLS?' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+DDLS?' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class media_selector_resp(BaseProtogenClass): __fields=['command', 'media_type'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(media_selector_resp,self).__init__(**dict) if self.__class__ is media_selector_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(media_selector_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(media_selector_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_media_type.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': ord(' '), 'constant': '+DDLS:' }) self.__field_command.readfrombuffer(buf) self.__field_media_type=CSVINT(**{ 'terminator': None }) self.__field_media_type.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': ord(' '), 'constant': '+DDLS:' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_media_type(self): return self.__field_media_type.getvalue() def __setfield_media_type(self, value): if isinstance(value,CSVINT): self.__field_media_type=value else: self.__field_media_type=CSVINT(value,**{ 'terminator': None }) def __delfield_media_type(self): del self.__field_media_type media_type=property(__getfield_media_type, __setfield_media_type, __delfield_media_type, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('media_type', self.__field_media_type, None) class media_selector_set(BaseProtogenClass): __fields=['command', 'media_type'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(media_selector_set,self).__init__(**dict) if self.__class__ is media_selector_set: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(media_selector_set,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(media_selector_set,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLS=' }) self.__field_command.writetobuffer(buf) try: self.__field_media_type except: self.__field_media_type=CSVINT(**{ 'terminator': None }) self.__field_media_type.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLS=' }) self.__field_command.readfrombuffer(buf) self.__field_media_type=CSVINT(**{ 'terminator': None }) self.__field_media_type.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLS=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+DDLS=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_media_type(self): try: self.__field_media_type except: self.__field_media_type=CSVINT(**{ 'terminator': None }) return self.__field_media_type.getvalue() def __setfield_media_type(self, value): if isinstance(value,CSVINT): self.__field_media_type=value else: self.__field_media_type=CSVINT(value,**{ 'terminator': None }) def __delfield_media_type(self): del self.__field_media_type media_type=property(__getfield_media_type, __setfield_media_type, __delfield_media_type, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('media_type', self.__field_media_type, None) class media_list_req(BaseProtogenClass): __fields=['command', 'start_index', 'end_index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(media_list_req,self).__init__(**dict) if self.__class__ is media_list_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(media_list_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(media_list_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLR=' }) self.__field_command.writetobuffer(buf) try: self.__field_start_index except: self.__field_start_index=CSVINT() self.__field_start_index.writetobuffer(buf) try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None }) self.__field_end_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLR=' }) self.__field_command.readfrombuffer(buf) self.__field_start_index=CSVINT() self.__field_start_index.readfrombuffer(buf) self.__field_end_index=CSVINT(**{ 'terminator': None }) self.__field_end_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLR=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+DDLR=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_start_index(self): try: self.__field_start_index except: self.__field_start_index=CSVINT() return self.__field_start_index.getvalue() def __setfield_start_index(self, value): if isinstance(value,CSVINT): self.__field_start_index=value else: self.__field_start_index=CSVINT(value,) def __delfield_start_index(self): del self.__field_start_index start_index=property(__getfield_start_index, __setfield_start_index, __delfield_start_index, None) def __getfield_end_index(self): try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None }) return self.__field_end_index.getvalue() def __setfield_end_index(self, value): if isinstance(value,CSVINT): self.__field_end_index=value else: self.__field_end_index=CSVINT(value,**{ 'terminator': None }) def __delfield_end_index(self): del self.__field_end_index end_index=property(__getfield_end_index, __setfield_end_index, __delfield_end_index, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('start_index', self.__field_start_index, None) yield ('end_index', self.__field_end_index, None) class media_list_resp(BaseProtogenClass): __fields=['command', 'index', 'file_name', 'media_name', 'size'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(media_list_resp,self).__init__(**dict) if self.__class__ is media_list_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(media_list_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(media_list_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_file_name.writetobuffer(buf) self.__field_media_name.writetobuffer(buf) self.__field_size.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '+DDLR:'}) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT() self.__field_index.readfrombuffer(buf) self.__field_file_name=CSVSTRING() self.__field_file_name.readfrombuffer(buf) self.__field_media_name=CSVSTRING() self.__field_media_name.readfrombuffer(buf) self.__field_size=CSVINT() self.__field_size.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '+DDLR:'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_file_name(self): return self.__field_file_name.getvalue() def __setfield_file_name(self, value): if isinstance(value,CSVSTRING): self.__field_file_name=value else: self.__field_file_name=CSVSTRING(value,) def __delfield_file_name(self): del self.__field_file_name file_name=property(__getfield_file_name, __setfield_file_name, __delfield_file_name, None) def __getfield_media_name(self): return self.__field_media_name.getvalue() def __setfield_media_name(self, value): if isinstance(value,CSVSTRING): self.__field_media_name=value else: self.__field_media_name=CSVSTRING(value,) def __delfield_media_name(self): del self.__field_media_name media_name=property(__getfield_media_name, __setfield_media_name, __delfield_media_name, None) def __getfield_size(self): return self.__field_size.getvalue() def __setfield_size(self, value): if isinstance(value,CSVINT): self.__field_size=value else: self.__field_size=CSVINT(value,) def __delfield_size(self): del self.__field_size size=property(__getfield_size, __setfield_size, __delfield_size, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) yield ('file_name', self.__field_file_name, None) yield ('media_name', self.__field_media_name, None) yield ('size', self.__field_size, None) class del_media_req(BaseProtogenClass): __fields=['command', 'file_name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(del_media_req,self).__init__(**dict) if self.__class__ is del_media_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(del_media_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(del_media_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLD=0,' }) self.__field_command.writetobuffer(buf) try: self.__field_file_name except: self.__field_file_name=CSVSTRING(**{ 'terminator': None }) self.__field_file_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLD=0,' }) self.__field_command.readfrombuffer(buf) self.__field_file_name=CSVSTRING(**{ 'terminator': None }) self.__field_file_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLD=0,' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+DDLD=0,' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_file_name(self): try: self.__field_file_name except: self.__field_file_name=CSVSTRING(**{ 'terminator': None }) return self.__field_file_name.getvalue() def __setfield_file_name(self, value): if isinstance(value,CSVSTRING): self.__field_file_name=value else: self.__field_file_name=CSVSTRING(value,**{ 'terminator': None }) def __delfield_file_name(self): del self.__field_file_name file_name=property(__getfield_file_name, __setfield_file_name, __delfield_file_name, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('file_name', self.__field_file_name, None) class write_media_req(BaseProtogenClass): __fields=['command', 'index', 'file_name', 'media_name', 'data_len', 'media_type', 'dunno1', 'dunno2', 'dunno3', 'dunno4'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(write_media_req,self).__init__(**dict) if self.__class__ is write_media_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(write_media_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(write_media_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLW=' }) self.__field_command.writetobuffer(buf) try: self.__field_index except: self.__field_index=CSVINT() self.__field_index.writetobuffer(buf) try: self.__field_file_name except: self.__field_file_name=CSVSTRING() self.__field_file_name.writetobuffer(buf) try: self.__field_media_name except: self.__field_media_name=CSVSTRING() self.__field_media_name.writetobuffer(buf) self.__field_data_len.writetobuffer(buf) self.__field_media_type.writetobuffer(buf) try: self.__field_dunno1 except: self.__field_dunno1=CSVINT(**{ 'default': 0 }) self.__field_dunno1.writetobuffer(buf) try: self.__field_dunno2 except: self.__field_dunno2=CSVINT(**{ 'default': 0 }) self.__field_dunno2.writetobuffer(buf) try: self.__field_dunno3 except: self.__field_dunno3=CSVINT(**{ 'default': 0 }) self.__field_dunno3.writetobuffer(buf) try: self.__field_dunno4 except: self.__field_dunno4=CSVINT(**{ 'default': 0, 'terminator': ord('\r') }) self.__field_dunno4.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLW=' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT() self.__field_index.readfrombuffer(buf) self.__field_file_name=CSVSTRING() self.__field_file_name.readfrombuffer(buf) self.__field_media_name=CSVSTRING() self.__field_media_name.readfrombuffer(buf) self.__field_data_len=CSVINT() self.__field_data_len.readfrombuffer(buf) self.__field_media_type=CSVINT() self.__field_media_type.readfrombuffer(buf) self.__field_dunno1=CSVINT(**{ 'default': 0 }) self.__field_dunno1.readfrombuffer(buf) self.__field_dunno2=CSVINT(**{ 'default': 0 }) self.__field_dunno2.readfrombuffer(buf) self.__field_dunno3=CSVINT(**{ 'default': 0 }) self.__field_dunno3.readfrombuffer(buf) self.__field_dunno4=CSVINT(**{ 'default': 0, 'terminator': ord('\r') }) self.__field_dunno4.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+DDLW=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+DDLW=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): try: self.__field_index except: self.__field_index=CSVINT() return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_file_name(self): try: self.__field_file_name except: self.__field_file_name=CSVSTRING() return self.__field_file_name.getvalue() def __setfield_file_name(self, value): if isinstance(value,CSVSTRING): self.__field_file_name=value else: self.__field_file_name=CSVSTRING(value,) def __delfield_file_name(self): del self.__field_file_name file_name=property(__getfield_file_name, __setfield_file_name, __delfield_file_name, None) def __getfield_media_name(self): try: self.__field_media_name except: self.__field_media_name=CSVSTRING() return self.__field_media_name.getvalue() def __setfield_media_name(self, value): if isinstance(value,CSVSTRING): self.__field_media_name=value else: self.__field_media_name=CSVSTRING(value,) def __delfield_media_name(self): del self.__field_media_name media_name=property(__getfield_media_name, __setfield_media_name, __delfield_media_name, None) def __getfield_data_len(self): return self.__field_data_len.getvalue() def __setfield_data_len(self, value): if isinstance(value,CSVINT): self.__field_data_len=value else: self.__field_data_len=CSVINT(value,) def __delfield_data_len(self): del self.__field_data_len data_len=property(__getfield_data_len, __setfield_data_len, __delfield_data_len, None) def __getfield_media_type(self): return self.__field_media_type.getvalue() def __setfield_media_type(self, value): if isinstance(value,CSVINT): self.__field_media_type=value else: self.__field_media_type=CSVINT(value,) def __delfield_media_type(self): del self.__field_media_type media_type=property(__getfield_media_type, __setfield_media_type, __delfield_media_type, None) def __getfield_dunno1(self): try: self.__field_dunno1 except: self.__field_dunno1=CSVINT(**{ 'default': 0 }) return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,CSVINT): self.__field_dunno1=value else: self.__field_dunno1=CSVINT(value,**{ 'default': 0 }) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_dunno2(self): try: self.__field_dunno2 except: self.__field_dunno2=CSVINT(**{ 'default': 0 }) return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,CSVINT): self.__field_dunno2=value else: self.__field_dunno2=CSVINT(value,**{ 'default': 0 }) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_dunno3(self): try: self.__field_dunno3 except: self.__field_dunno3=CSVINT(**{ 'default': 0 }) return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,CSVINT): self.__field_dunno3=value else: self.__field_dunno3=CSVINT(value,**{ 'default': 0 }) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_dunno4(self): try: self.__field_dunno4 except: self.__field_dunno4=CSVINT(**{ 'default': 0, 'terminator': ord('\r') }) return self.__field_dunno4.getvalue() def __setfield_dunno4(self, value): if isinstance(value,CSVINT): self.__field_dunno4=value else: self.__field_dunno4=CSVINT(value,**{ 'default': 0, 'terminator': ord('\r') }) def __delfield_dunno4(self): del self.__field_dunno4 dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) yield ('file_name', self.__field_file_name, None) yield ('media_name', self.__field_media_name, None) yield ('data_len', self.__field_data_len, None) yield ('media_type', self.__field_media_type, None) yield ('dunno1', self.__field_dunno1, None) yield ('dunno2', self.__field_dunno2, None) yield ('dunno3', self.__field_dunno3, None) yield ('dunno4', self.__field_dunno4, None) class list_group_req(BaseProtogenClass): __fields=['command', 'start_index', 'end_index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(list_group_req,self).__init__(**dict) if self.__class__ is list_group_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(list_group_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(list_group_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPGR=' }) self.__field_command.writetobuffer(buf) try: self.__field_start_index except: self.__field_start_index=CSVINT() self.__field_start_index.writetobuffer(buf) try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None }) self.__field_end_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPGR=' }) self.__field_command.readfrombuffer(buf) self.__field_start_index=CSVINT() self.__field_start_index.readfrombuffer(buf) self.__field_end_index=CSVINT(**{ 'terminator': None }) self.__field_end_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPGR=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+CPGR=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_start_index(self): try: self.__field_start_index except: self.__field_start_index=CSVINT() return self.__field_start_index.getvalue() def __setfield_start_index(self, value): if isinstance(value,CSVINT): self.__field_start_index=value else: self.__field_start_index=CSVINT(value,) def __delfield_start_index(self): del self.__field_start_index start_index=property(__getfield_start_index, __setfield_start_index, __delfield_start_index, None) def __getfield_end_index(self): try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None }) return self.__field_end_index.getvalue() def __setfield_end_index(self, value): if isinstance(value,CSVINT): self.__field_end_index=value else: self.__field_end_index=CSVINT(value,**{ 'terminator': None }) def __delfield_end_index(self): del self.__field_end_index end_index=property(__getfield_end_index, __setfield_end_index, __delfield_end_index, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('start_index', self.__field_start_index, None) yield ('end_index', self.__field_end_index, None) class list_group_resp(BaseProtogenClass): __fields=['command', 'index', 'group_name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(list_group_resp,self).__init__(**dict) if self.__class__ is list_group_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(list_group_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(list_group_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_group_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': ord(' '), 'constant': '+CPGR:' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT() self.__field_index.readfrombuffer(buf) self.__field_group_name=CSVSTRING(**{ 'terminator': None }) self.__field_group_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': ord(' '), 'constant': '+CPGR:' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_group_name(self): return self.__field_group_name.getvalue() def __setfield_group_name(self, value): if isinstance(value,CSVSTRING): self.__field_group_name=value else: self.__field_group_name=CSVSTRING(value,**{ 'terminator': None }) def __delfield_group_name(self): del self.__field_group_name group_name=property(__getfield_group_name, __setfield_group_name, __delfield_group_name, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) yield ('group_name', self.__field_group_name, None) class charset_set_req(BaseProtogenClass): __fields=['command', 'charset'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(charset_set_req,self).__init__(**dict) if self.__class__ is charset_set_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(charset_set_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(charset_set_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CSCS=' }) self.__field_command.writetobuffer(buf) try: self.__field_charset except: self.__field_charset=CSVSTRING(**{ 'terminator': None }) self.__field_charset.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CSCS=' }) self.__field_command.readfrombuffer(buf) self.__field_charset=CSVSTRING(**{ 'terminator': None }) self.__field_charset.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CSCS=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+CSCS=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_charset(self): try: self.__field_charset except: self.__field_charset=CSVSTRING(**{ 'terminator': None }) return self.__field_charset.getvalue() def __setfield_charset(self, value): if isinstance(value,CSVSTRING): self.__field_charset=value else: self.__field_charset=CSVSTRING(value,**{ 'terminator': None }) def __delfield_charset(self): del self.__field_charset charset=property(__getfield_charset, __setfield_charset, __delfield_charset, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('charset', self.__field_charset, None) class select_storage_req(BaseProtogenClass): __fields=['command', 'storage'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(select_storage_req,self).__init__(**dict) if self.__class__ is select_storage_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(select_storage_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(select_storage_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBS=' }) self.__field_command.writetobuffer(buf) try: self.__field_storage except: self.__field_storage=CSVSTRING(**{ 'terminator': None }) self.__field_storage.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBS=' }) self.__field_command.readfrombuffer(buf) self.__field_storage=CSVSTRING(**{ 'terminator': None }) self.__field_storage.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBS=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+CPBS=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_storage(self): try: self.__field_storage except: self.__field_storage=CSVSTRING(**{ 'terminator': None }) return self.__field_storage.getvalue() def __setfield_storage(self, value): if isinstance(value,CSVSTRING): self.__field_storage=value else: self.__field_storage=CSVSTRING(value,**{ 'terminator': None }) def __delfield_storage(self): del self.__field_storage storage=property(__getfield_storage, __setfield_storage, __delfield_storage, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('storage', self.__field_storage, None) class select_storage_resp(BaseProtogenClass): __fields=['command', 'storage', 'used_slots_count', 'total_slots_count', 'dunno'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(select_storage_resp,self).__init__(**dict) if self.__class__ is select_storage_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(select_storage_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(select_storage_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_storage.writetobuffer(buf) self.__field_used_slots_count.writetobuffer(buf) self.__field_total_slots_count.writetobuffer(buf) self.__field_dunno.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': ord(' '), 'constant': '+CPBS:' }) self.__field_command.readfrombuffer(buf) self.__field_storage=CSVSTRING() self.__field_storage.readfrombuffer(buf) self.__field_used_slots_count=CSVINT() self.__field_used_slots_count.readfrombuffer(buf) self.__field_total_slots_count=CSVINT() self.__field_total_slots_count.readfrombuffer(buf) self.__field_dunno=CSVINT(**{ 'terminator': None }) self.__field_dunno.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': ord(' '), 'constant': '+CPBS:' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_storage(self): return self.__field_storage.getvalue() def __setfield_storage(self, value): if isinstance(value,CSVSTRING): self.__field_storage=value else: self.__field_storage=CSVSTRING(value,) def __delfield_storage(self): del self.__field_storage storage=property(__getfield_storage, __setfield_storage, __delfield_storage, None) def __getfield_used_slots_count(self): return self.__field_used_slots_count.getvalue() def __setfield_used_slots_count(self, value): if isinstance(value,CSVINT): self.__field_used_slots_count=value else: self.__field_used_slots_count=CSVINT(value,) def __delfield_used_slots_count(self): del self.__field_used_slots_count used_slots_count=property(__getfield_used_slots_count, __setfield_used_slots_count, __delfield_used_slots_count, None) def __getfield_total_slots_count(self): return self.__field_total_slots_count.getvalue() def __setfield_total_slots_count(self, value): if isinstance(value,CSVINT): self.__field_total_slots_count=value else: self.__field_total_slots_count=CSVINT(value,) def __delfield_total_slots_count(self): del self.__field_total_slots_count total_slots_count=property(__getfield_total_slots_count, __setfield_total_slots_count, __delfield_total_slots_count, None) def __getfield_dunno(self): return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,CSVINT): self.__field_dunno=value else: self.__field_dunno=CSVINT(value,**{ 'terminator': None }) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('storage', self.__field_storage, None) yield ('used_slots_count', self.__field_used_slots_count, None) yield ('total_slots_count', self.__field_total_slots_count, None) yield ('dunno', self.__field_dunno, None) class read_phonebook_req(BaseProtogenClass): __fields=['command', 'start_index', 'end_index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(read_phonebook_req,self).__init__(**dict) if self.__class__ is read_phonebook_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(read_phonebook_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(read_phonebook_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBR=' }) self.__field_command.writetobuffer(buf) try: self.__field_start_index except: self.__field_start_index=CSVINT() self.__field_start_index.writetobuffer(buf) try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None }) self.__field_end_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBR=' }) self.__field_command.readfrombuffer(buf) self.__field_start_index=CSVINT() self.__field_start_index.readfrombuffer(buf) self.__field_end_index=CSVINT(**{ 'terminator': None }) self.__field_end_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBR=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+CPBR=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_start_index(self): try: self.__field_start_index except: self.__field_start_index=CSVINT() return self.__field_start_index.getvalue() def __setfield_start_index(self, value): if isinstance(value,CSVINT): self.__field_start_index=value else: self.__field_start_index=CSVINT(value,) def __delfield_start_index(self): del self.__field_start_index start_index=property(__getfield_start_index, __setfield_start_index, __delfield_start_index, None) def __getfield_end_index(self): try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None }) return self.__field_end_index.getvalue() def __setfield_end_index(self, value): if isinstance(value,CSVINT): self.__field_end_index=value else: self.__field_end_index=CSVINT(value,**{ 'terminator': None }) def __delfield_end_index(self): del self.__field_end_index end_index=property(__getfield_end_index, __setfield_end_index, __delfield_end_index, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('start_index', self.__field_start_index, None) yield ('end_index', self.__field_end_index, None) class read_phonebook_resp(BaseProtogenClass): __fields=['sim', 'command', 'index', 'group', 'mobile', 'mobile_type', 'home', 'home_type', 'office', 'office_type', 'name', 'email', 'memo'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(read_phonebook_resp,self).__init__(**dict) if self.__class__ is read_phonebook_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(read_phonebook_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(read_phonebook_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_sim except: self.__field_sim=BOOL(**{ 'default': False }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_group.writetobuffer(buf) self.__field_mobile.writetobuffer(buf) self.__field_mobile_type.writetobuffer(buf) self.__field_home.writetobuffer(buf) self.__field_home_type.writetobuffer(buf) self.__field_office.writetobuffer(buf) self.__field_office_type.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_email.writetobuffer(buf) self.__field_memo.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': ord(' '), 'constant': '+CPBR:' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT() self.__field_index.readfrombuffer(buf) self.__field_group=CSVINT() self.__field_group.readfrombuffer(buf) self.__field_mobile=CSVSTRING() self.__field_mobile.readfrombuffer(buf) self.__field_mobile_type=CSVINT() self.__field_mobile_type.readfrombuffer(buf) self.__field_home=CSVSTRING() self.__field_home.readfrombuffer(buf) self.__field_home_type=CSVINT() self.__field_home_type.readfrombuffer(buf) self.__field_office=CSVSTRING() self.__field_office.readfrombuffer(buf) self.__field_office_type=CSVINT() self.__field_office_type.readfrombuffer(buf) self.__field_name=CSVSTRING() self.__field_name.readfrombuffer(buf) self.__field_email=CSVSTRING() self.__field_email.readfrombuffer(buf) self.__field_memo=CSVSTRING() self.__field_memo.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_sim(self): try: self.__field_sim except: self.__field_sim=BOOL(**{ 'default': False }) return self.__field_sim.getvalue() def __setfield_sim(self, value): if isinstance(value,BOOL): self.__field_sim=value else: self.__field_sim=BOOL(value,**{ 'default': False }) def __delfield_sim(self): del self.__field_sim sim=property(__getfield_sim, __setfield_sim, __delfield_sim, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': ord(' '), 'constant': '+CPBR:' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,CSVINT): self.__field_group=value else: self.__field_group=CSVINT(value,) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_mobile(self): return self.__field_mobile.getvalue() def __setfield_mobile(self, value): if isinstance(value,CSVSTRING): self.__field_mobile=value else: self.__field_mobile=CSVSTRING(value,) def __delfield_mobile(self): del self.__field_mobile mobile=property(__getfield_mobile, __setfield_mobile, __delfield_mobile, None) def __getfield_mobile_type(self): return self.__field_mobile_type.getvalue() def __setfield_mobile_type(self, value): if isinstance(value,CSVINT): self.__field_mobile_type=value else: self.__field_mobile_type=CSVINT(value,) def __delfield_mobile_type(self): del self.__field_mobile_type mobile_type=property(__getfield_mobile_type, __setfield_mobile_type, __delfield_mobile_type, None) def __getfield_home(self): return self.__field_home.getvalue() def __setfield_home(self, value): if isinstance(value,CSVSTRING): self.__field_home=value else: self.__field_home=CSVSTRING(value,) def __delfield_home(self): del self.__field_home home=property(__getfield_home, __setfield_home, __delfield_home, None) def __getfield_home_type(self): return self.__field_home_type.getvalue() def __setfield_home_type(self, value): if isinstance(value,CSVINT): self.__field_home_type=value else: self.__field_home_type=CSVINT(value,) def __delfield_home_type(self): del self.__field_home_type home_type=property(__getfield_home_type, __setfield_home_type, __delfield_home_type, None) def __getfield_office(self): return self.__field_office.getvalue() def __setfield_office(self, value): if isinstance(value,CSVSTRING): self.__field_office=value else: self.__field_office=CSVSTRING(value,) def __delfield_office(self): del self.__field_office office=property(__getfield_office, __setfield_office, __delfield_office, None) def __getfield_office_type(self): return self.__field_office_type.getvalue() def __setfield_office_type(self, value): if isinstance(value,CSVINT): self.__field_office_type=value else: self.__field_office_type=CSVINT(value,) def __delfield_office_type(self): del self.__field_office_type office_type=property(__getfield_office_type, __setfield_office_type, __delfield_office_type, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,CSVSTRING): self.__field_name=value else: self.__field_name=CSVSTRING(value,) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,CSVSTRING): self.__field_email=value else: self.__field_email=CSVSTRING(value,) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def __getfield_memo(self): return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,CSVSTRING): self.__field_memo=value else: self.__field_memo=CSVSTRING(value,) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def iscontainer(self): return True def containerelements(self): yield ('sim', self.__field_sim, None) yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) yield ('group', self.__field_group, None) yield ('mobile', self.__field_mobile, None) yield ('mobile_type', self.__field_mobile_type, None) yield ('home', self.__field_home, None) yield ('home_type', self.__field_home_type, None) yield ('office', self.__field_office, None) yield ('office_type', self.__field_office_type, None) yield ('name', self.__field_name, None) yield ('email', self.__field_email, None) yield ('memo', self.__field_memo, None) class read_sim_phonebook_resp(BaseProtogenClass): __fields=['command', 'index', 'group', 'mobile', 'mobile_type', 'name', 'home', 'office', 'email', 'memo', 'sim'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(read_sim_phonebook_resp,self).__init__(**dict) if self.__class__ is read_sim_phonebook_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(read_sim_phonebook_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(read_sim_phonebook_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_home except: self.__field_home=USTRING(**{ 'terminator': None, 'default': '' }) try: self.__field_office except: self.__field_office=USTRING(**{ 'terminator': None, 'default': '' }) try: self.__field_email except: self.__field_email=USTRING(**{ 'terminator': None, 'default': '' }) try: self.__field_memo except: self.__field_memo=USTRING(**{ 'terminator': None, 'default': '' }) try: self.__field_sim except: self.__field_sim=BOOL(**{ 'default': True }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_group.writetobuffer(buf) self.__field_mobile.writetobuffer(buf) self.__field_mobile_type.writetobuffer(buf) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': ord(' '), 'constant': '+CPBR:' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT() self.__field_index.readfrombuffer(buf) self.__field_group=CSVINT() self.__field_group.readfrombuffer(buf) self.__field_mobile=CSVSTRING() self.__field_mobile.readfrombuffer(buf) self.__field_mobile_type=CSVINT() self.__field_mobile_type.readfrombuffer(buf) self.__field_name=CSVSTRING() self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': ord(' '), 'constant': '+CPBR:' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,CSVINT): self.__field_group=value else: self.__field_group=CSVINT(value,) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_mobile(self): return self.__field_mobile.getvalue() def __setfield_mobile(self, value): if isinstance(value,CSVSTRING): self.__field_mobile=value else: self.__field_mobile=CSVSTRING(value,) def __delfield_mobile(self): del self.__field_mobile mobile=property(__getfield_mobile, __setfield_mobile, __delfield_mobile, None) def __getfield_mobile_type(self): return self.__field_mobile_type.getvalue() def __setfield_mobile_type(self, value): if isinstance(value,CSVINT): self.__field_mobile_type=value else: self.__field_mobile_type=CSVINT(value,) def __delfield_mobile_type(self): del self.__field_mobile_type mobile_type=property(__getfield_mobile_type, __setfield_mobile_type, __delfield_mobile_type, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,CSVSTRING): self.__field_name=value else: self.__field_name=CSVSTRING(value,) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_home(self): try: self.__field_home except: self.__field_home=USTRING(**{ 'terminator': None, 'default': '' }) return self.__field_home.getvalue() def __setfield_home(self, value): if isinstance(value,USTRING): self.__field_home=value else: self.__field_home=USTRING(value,**{ 'terminator': None, 'default': '' }) def __delfield_home(self): del self.__field_home home=property(__getfield_home, __setfield_home, __delfield_home, None) def __getfield_office(self): try: self.__field_office except: self.__field_office=USTRING(**{ 'terminator': None, 'default': '' }) return self.__field_office.getvalue() def __setfield_office(self, value): if isinstance(value,USTRING): self.__field_office=value else: self.__field_office=USTRING(value,**{ 'terminator': None, 'default': '' }) def __delfield_office(self): del self.__field_office office=property(__getfield_office, __setfield_office, __delfield_office, None) def __getfield_email(self): try: self.__field_email except: self.__field_email=USTRING(**{ 'terminator': None, 'default': '' }) return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{ 'terminator': None, 'default': '' }) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def __getfield_memo(self): try: self.__field_memo except: self.__field_memo=USTRING(**{ 'terminator': None, 'default': '' }) return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,USTRING): self.__field_memo=value else: self.__field_memo=USTRING(value,**{ 'terminator': None, 'default': '' }) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def __getfield_sim(self): try: self.__field_sim except: self.__field_sim=BOOL(**{ 'default': True }) return self.__field_sim.getvalue() def __setfield_sim(self, value): if isinstance(value,BOOL): self.__field_sim=value else: self.__field_sim=BOOL(value,**{ 'default': True }) def __delfield_sim(self): del self.__field_sim sim=property(__getfield_sim, __setfield_sim, __delfield_sim, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) yield ('group', self.__field_group, None) yield ('mobile', self.__field_mobile, None) yield ('mobile_type', self.__field_mobile_type, None) yield ('name', self.__field_name, None) yield ('home', self.__field_home, None) yield ('office', self.__field_office, None) yield ('email', self.__field_email, None) yield ('memo', self.__field_memo, None) yield ('sim', self.__field_sim, None) class del_phonebook_req(BaseProtogenClass): __fields=['command', 'index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(del_phonebook_req,self).__init__(**dict) if self.__class__ is del_phonebook_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(del_phonebook_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(del_phonebook_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBW=' }) self.__field_command.writetobuffer(buf) try: self.__field_index except: self.__field_index=CSVINT(**{ 'terminator': None }) self.__field_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBW=' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT(**{ 'terminator': None }) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBW=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+CPBW=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): try: self.__field_index except: self.__field_index=CSVINT(**{ 'terminator': None }) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,**{ 'terminator': None }) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) class update_phonebook_resp(BaseProtogenClass): __fields=['command', 'index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(update_phonebook_resp,self).__init__(**dict) if self.__class__ is update_phonebook_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(update_phonebook_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(update_phonebook_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': ord(' '), 'constant': '+CPBW:' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT(**{ 'terminator': None }) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': ord(' '), 'constant': '+CPBW:' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,**{ 'terminator': None }) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) class write_phonebook_req(BaseProtogenClass): __fields=['command', 'group', 'mobile', 'mobile_type', 'home', 'home_type', 'office', 'office_type', 'name', 'email', 'memo'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(write_phonebook_req,self).__init__(**dict) if self.__class__ is write_phonebook_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(write_phonebook_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(write_phonebook_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBW=,' }) self.__field_command.writetobuffer(buf) try: self.__field_group except: self.__field_group=CSVINT() self.__field_group.writetobuffer(buf) try: self.__field_mobile except: self.__field_mobile=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) self.__field_mobile.writetobuffer(buf) try: self.__field_mobile_type except: self.__field_mobile_type=CSVINT(**{ 'default': 255 }) self.__field_mobile_type.writetobuffer(buf) try: self.__field_home except: self.__field_home=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) self.__field_home.writetobuffer(buf) try: self.__field_home_type except: self.__field_home_type=CSVINT(**{ 'default': 255 }) self.__field_home_type.writetobuffer(buf) try: self.__field_office except: self.__field_office=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) self.__field_office.writetobuffer(buf) try: self.__field_office_type except: self.__field_office_type=CSVINT(**{ 'default': 255 }) self.__field_office_type.writetobuffer(buf) try: self.__field_name except: self.__field_name=CSVSTRING(**{ 'maxsizeinbytes': PB_NAME_LEN, 'raiseontruncate': False }) self.__field_name.writetobuffer(buf) try: self.__field_email except: self.__field_email=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_EMAIL_LEN, 'raiseontruncate': False }) self.__field_email.writetobuffer(buf) try: self.__field_memo except: self.__field_memo=CSVSTRING(**{ 'terminator': None, 'default': '', 'maxsizeinbytes': PB_MEMO_LEN, 'raiseontruncate': False }) self.__field_memo.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBW=,' }) self.__field_command.readfrombuffer(buf) self.__field_group=CSVINT() self.__field_group.readfrombuffer(buf) self.__field_mobile=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) self.__field_mobile.readfrombuffer(buf) self.__field_mobile_type=CSVINT(**{ 'default': 255 }) self.__field_mobile_type.readfrombuffer(buf) self.__field_home=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) self.__field_home.readfrombuffer(buf) self.__field_home_type=CSVINT(**{ 'default': 255 }) self.__field_home_type.readfrombuffer(buf) self.__field_office=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) self.__field_office.readfrombuffer(buf) self.__field_office_type=CSVINT(**{ 'default': 255 }) self.__field_office_type.readfrombuffer(buf) self.__field_name=CSVSTRING(**{ 'maxsizeinbytes': PB_NAME_LEN, 'raiseontruncate': False }) self.__field_name.readfrombuffer(buf) self.__field_email=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_EMAIL_LEN, 'raiseontruncate': False }) self.__field_email.readfrombuffer(buf) self.__field_memo=CSVSTRING(**{ 'terminator': None, 'default': '', 'maxsizeinbytes': PB_MEMO_LEN, 'raiseontruncate': False }) self.__field_memo.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBW=,' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+CPBW=,' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_group(self): try: self.__field_group except: self.__field_group=CSVINT() return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,CSVINT): self.__field_group=value else: self.__field_group=CSVINT(value,) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_mobile(self): try: self.__field_mobile except: self.__field_mobile=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) return self.__field_mobile.getvalue() def __setfield_mobile(self, value): if isinstance(value,CSVSTRING): self.__field_mobile=value else: self.__field_mobile=CSVSTRING(value,**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) def __delfield_mobile(self): del self.__field_mobile mobile=property(__getfield_mobile, __setfield_mobile, __delfield_mobile, None) def __getfield_mobile_type(self): try: self.__field_mobile_type except: self.__field_mobile_type=CSVINT(**{ 'default': 255 }) return self.__field_mobile_type.getvalue() def __setfield_mobile_type(self, value): if isinstance(value,CSVINT): self.__field_mobile_type=value else: self.__field_mobile_type=CSVINT(value,**{ 'default': 255 }) def __delfield_mobile_type(self): del self.__field_mobile_type mobile_type=property(__getfield_mobile_type, __setfield_mobile_type, __delfield_mobile_type, None) def __getfield_home(self): try: self.__field_home except: self.__field_home=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) return self.__field_home.getvalue() def __setfield_home(self, value): if isinstance(value,CSVSTRING): self.__field_home=value else: self.__field_home=CSVSTRING(value,**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) def __delfield_home(self): del self.__field_home home=property(__getfield_home, __setfield_home, __delfield_home, None) def __getfield_home_type(self): try: self.__field_home_type except: self.__field_home_type=CSVINT(**{ 'default': 255 }) return self.__field_home_type.getvalue() def __setfield_home_type(self, value): if isinstance(value,CSVINT): self.__field_home_type=value else: self.__field_home_type=CSVINT(value,**{ 'default': 255 }) def __delfield_home_type(self): del self.__field_home_type home_type=property(__getfield_home_type, __setfield_home_type, __delfield_home_type, None) def __getfield_office(self): try: self.__field_office except: self.__field_office=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) return self.__field_office.getvalue() def __setfield_office(self, value): if isinstance(value,CSVSTRING): self.__field_office=value else: self.__field_office=CSVSTRING(value,**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) def __delfield_office(self): del self.__field_office office=property(__getfield_office, __setfield_office, __delfield_office, None) def __getfield_office_type(self): try: self.__field_office_type except: self.__field_office_type=CSVINT(**{ 'default': 255 }) return self.__field_office_type.getvalue() def __setfield_office_type(self, value): if isinstance(value,CSVINT): self.__field_office_type=value else: self.__field_office_type=CSVINT(value,**{ 'default': 255 }) def __delfield_office_type(self): del self.__field_office_type office_type=property(__getfield_office_type, __setfield_office_type, __delfield_office_type, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=CSVSTRING(**{ 'maxsizeinbytes': PB_NAME_LEN, 'raiseontruncate': False }) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,CSVSTRING): self.__field_name=value else: self.__field_name=CSVSTRING(value,**{ 'maxsizeinbytes': PB_NAME_LEN, 'raiseontruncate': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_email(self): try: self.__field_email except: self.__field_email=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_EMAIL_LEN, 'raiseontruncate': False }) return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,CSVSTRING): self.__field_email=value else: self.__field_email=CSVSTRING(value,**{ 'default': '', 'maxsizeinbytes': PB_EMAIL_LEN, 'raiseontruncate': False }) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def __getfield_memo(self): try: self.__field_memo except: self.__field_memo=CSVSTRING(**{ 'terminator': None, 'default': '', 'maxsizeinbytes': PB_MEMO_LEN, 'raiseontruncate': False }) return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,CSVSTRING): self.__field_memo=value else: self.__field_memo=CSVSTRING(value,**{ 'terminator': None, 'default': '', 'maxsizeinbytes': PB_MEMO_LEN, 'raiseontruncate': False }) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('group', self.__field_group, None) yield ('mobile', self.__field_mobile, None) yield ('mobile_type', self.__field_mobile_type, None) yield ('home', self.__field_home, None) yield ('home_type', self.__field_home_type, None) yield ('office', self.__field_office, None) yield ('office_type', self.__field_office_type, None) yield ('name', self.__field_name, None) yield ('email', self.__field_email, None) yield ('memo', self.__field_memo, None) class write_sim_phonebook_req(BaseProtogenClass): __fields=['command', 'group', 'number', 'number_type', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(write_sim_phonebook_req,self).__init__(**dict) if self.__class__ is write_sim_phonebook_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(write_sim_phonebook_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(write_sim_phonebook_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBW=,' }) self.__field_command.writetobuffer(buf) try: self.__field_group except: self.__field_group=CSVINT(**{ 'default': 0 }) self.__field_group.writetobuffer(buf) try: self.__field_number except: self.__field_number=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) self.__field_number.writetobuffer(buf) try: self.__field_number_type except: self.__field_number_type=CSVINT(**{ 'default': 255 }) self.__field_number_type.writetobuffer(buf) try: self.__field_name except: self.__field_name=CSVSTRING(**{ 'terminator': None, 'maxsizeinbytes': PB_SIM_NAME_LEN, 'raiseontruncate': False }) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBW=,' }) self.__field_command.readfrombuffer(buf) self.__field_group=CSVINT(**{ 'default': 0 }) self.__field_group.readfrombuffer(buf) self.__field_number=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) self.__field_number.readfrombuffer(buf) self.__field_number_type=CSVINT(**{ 'default': 255 }) self.__field_number_type.readfrombuffer(buf) self.__field_name=CSVSTRING(**{ 'terminator': None, 'maxsizeinbytes': PB_SIM_NAME_LEN, 'raiseontruncate': False }) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CPBW=,' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+CPBW=,' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_group(self): try: self.__field_group except: self.__field_group=CSVINT(**{ 'default': 0 }) return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,CSVINT): self.__field_group=value else: self.__field_group=CSVINT(value,**{ 'default': 0 }) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_number(self): try: self.__field_number except: self.__field_number=CSVSTRING(**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,CSVSTRING): self.__field_number=value else: self.__field_number=CSVSTRING(value,**{ 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False }) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_number_type(self): try: self.__field_number_type except: self.__field_number_type=CSVINT(**{ 'default': 255 }) return self.__field_number_type.getvalue() def __setfield_number_type(self, value): if isinstance(value,CSVINT): self.__field_number_type=value else: self.__field_number_type=CSVINT(value,**{ 'default': 255 }) def __delfield_number_type(self): del self.__field_number_type number_type=property(__getfield_number_type, __setfield_number_type, __delfield_number_type, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=CSVSTRING(**{ 'terminator': None, 'maxsizeinbytes': PB_SIM_NAME_LEN, 'raiseontruncate': False }) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,CSVSTRING): self.__field_name=value else: self.__field_name=CSVSTRING(value,**{ 'terminator': None, 'maxsizeinbytes': PB_SIM_NAME_LEN, 'raiseontruncate': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('group', self.__field_group, None) yield ('number', self.__field_number, None) yield ('number_type', self.__field_number_type, None) yield ('name', self.__field_name, None) class memo_read_req(BaseProtogenClass): __fields=['command', 'start_index', 'end_index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(memo_read_req,self).__init__(**dict) if self.__class__ is memo_read_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(memo_read_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(memo_read_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': MEMO_READ_CMD+'=' }) self.__field_command.writetobuffer(buf) try: self.__field_start_index except: self.__field_start_index=CSVINT(**{ 'default': MEMO_MIN_INDEX }) self.__field_start_index.writetobuffer(buf) try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None, 'default': MEMO_MAX_INDEX }) self.__field_end_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': MEMO_READ_CMD+'=' }) self.__field_command.readfrombuffer(buf) self.__field_start_index=CSVINT(**{ 'default': MEMO_MIN_INDEX }) self.__field_start_index.readfrombuffer(buf) self.__field_end_index=CSVINT(**{ 'terminator': None, 'default': MEMO_MAX_INDEX }) self.__field_end_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': MEMO_READ_CMD+'=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': MEMO_READ_CMD+'=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_start_index(self): try: self.__field_start_index except: self.__field_start_index=CSVINT(**{ 'default': MEMO_MIN_INDEX }) return self.__field_start_index.getvalue() def __setfield_start_index(self, value): if isinstance(value,CSVINT): self.__field_start_index=value else: self.__field_start_index=CSVINT(value,**{ 'default': MEMO_MIN_INDEX }) def __delfield_start_index(self): del self.__field_start_index start_index=property(__getfield_start_index, __setfield_start_index, __delfield_start_index, None) def __getfield_end_index(self): try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None, 'default': MEMO_MAX_INDEX }) return self.__field_end_index.getvalue() def __setfield_end_index(self, value): if isinstance(value,CSVINT): self.__field_end_index=value else: self.__field_end_index=CSVINT(value,**{ 'terminator': None, 'default': MEMO_MAX_INDEX }) def __delfield_end_index(self): del self.__field_end_index end_index=property(__getfield_end_index, __setfield_end_index, __delfield_end_index, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('start_index', self.__field_start_index, None) yield ('end_index', self.__field_end_index, None) class memo_read_resp(BaseProtogenClass): __fields=['command', 'index', 'text'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(memo_read_resp,self).__init__(**dict) if self.__class__ is memo_read_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(memo_read_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(memo_read_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_text.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': ord(' '), 'constant': MEMO_READ_CMD+':' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT() self.__field_index.readfrombuffer(buf) self.__field_text=CSVSTRING(**{ 'terminator': None }) self.__field_text.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': ord(' '), 'constant': MEMO_READ_CMD+':' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,CSVSTRING): self.__field_text=value else: self.__field_text=CSVSTRING(value,**{ 'terminator': None }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) yield ('text', self.__field_text, None) class memo_write_req(BaseProtogenClass): __fields=['command', 'text'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(memo_write_req,self).__init__(**dict) if self.__class__ is memo_write_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(memo_write_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(memo_write_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': MEMO_WRITE_CMD+'=,' }) self.__field_command.writetobuffer(buf) try: self.__field_text except: self.__field_text=CSVSTRING(**{ 'terminator': None }) self.__field_text.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': MEMO_WRITE_CMD+'=,' }) self.__field_command.readfrombuffer(buf) self.__field_text=CSVSTRING(**{ 'terminator': None }) self.__field_text.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': MEMO_WRITE_CMD+'=,' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': MEMO_WRITE_CMD+'=,' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_text(self): try: self.__field_text except: self.__field_text=CSVSTRING(**{ 'terminator': None }) return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,CSVSTRING): self.__field_text=value else: self.__field_text=CSVSTRING(value,**{ 'terminator': None }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('text', self.__field_text, None) class memo_del_req(BaseProtogenClass): __fields=['command', 'index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(memo_del_req,self).__init__(**dict) if self.__class__ is memo_del_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(memo_del_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(memo_del_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': MEMO_WRITE_CMD+'=' }) self.__field_command.writetobuffer(buf) try: self.__field_index except: self.__field_index=CSVINT(**{ 'terminator': None }) self.__field_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': MEMO_WRITE_CMD+'=' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT(**{ 'terminator': None }) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': MEMO_WRITE_CMD+'=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': MEMO_WRITE_CMD+'=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): try: self.__field_index except: self.__field_index=CSVINT(**{ 'terminator': None }) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,**{ 'terminator': None }) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) class sms_format_req(BaseProtogenClass): __fields=['command', 'format'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_format_req,self).__init__(**dict) if self.__class__ is sms_format_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_format_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_format_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': SMS_FORMAT_CMD+'=' }) self.__field_command.writetobuffer(buf) try: self.__field_format except: self.__field_format=CSVINT(**{ 'terminator': None, 'default': SMS_FORMAT_TEXT }) self.__field_format.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': SMS_FORMAT_CMD+'=' }) self.__field_command.readfrombuffer(buf) self.__field_format=CSVINT(**{ 'terminator': None, 'default': SMS_FORMAT_TEXT }) self.__field_format.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': SMS_FORMAT_CMD+'=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': SMS_FORMAT_CMD+'=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_format(self): try: self.__field_format except: self.__field_format=CSVINT(**{ 'terminator': None, 'default': SMS_FORMAT_TEXT }) return self.__field_format.getvalue() def __setfield_format(self, value): if isinstance(value,CSVINT): self.__field_format=value else: self.__field_format=CSVINT(value,**{ 'terminator': None, 'default': SMS_FORMAT_TEXT }) def __delfield_format(self): del self.__field_format format=property(__getfield_format, __setfield_format, __delfield_format, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('format', self.__field_format, None) class sms_memory_select_req(BaseProtogenClass): __fields=['command', 'list_memory'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_memory_select_req,self).__init__(**dict) if self.__class__ is sms_memory_select_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_memory_select_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_memory_select_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': SMS_MEMORY_SELECT_CMD+'=' }) self.__field_command.writetobuffer(buf) try: self.__field_list_memory except: self.__field_list_memory=CSVSTRING(**{ 'terminator': None }) self.__field_list_memory.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': SMS_MEMORY_SELECT_CMD+'=' }) self.__field_command.readfrombuffer(buf) self.__field_list_memory=CSVSTRING(**{ 'terminator': None }) self.__field_list_memory.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': SMS_MEMORY_SELECT_CMD+'=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': SMS_MEMORY_SELECT_CMD+'=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_list_memory(self): try: self.__field_list_memory except: self.__field_list_memory=CSVSTRING(**{ 'terminator': None }) return self.__field_list_memory.getvalue() def __setfield_list_memory(self, value): if isinstance(value,CSVSTRING): self.__field_list_memory=value else: self.__field_list_memory=CSVSTRING(value,**{ 'terminator': None }) def __delfield_list_memory(self): del self.__field_list_memory list_memory=property(__getfield_list_memory, __setfield_list_memory, __delfield_list_memory, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('list_memory', self.__field_list_memory, None) class sms_msg_list_req(BaseProtogenClass): __fields=['command', 'msg_type'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_msg_list_req,self).__init__(**dict) if self.__class__ is sms_msg_list_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_msg_list_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_msg_list_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': SMS_MSG_LIST_CMD+'=' }) self.__field_command.writetobuffer(buf) try: self.__field_msg_type except: self.__field_msg_type=CSVSTRING(**{ 'terminator': None, 'default': SMS_MSG_ALL }) self.__field_msg_type.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': SMS_MSG_LIST_CMD+'=' }) self.__field_command.readfrombuffer(buf) self.__field_msg_type=CSVSTRING(**{ 'terminator': None, 'default': SMS_MSG_ALL }) self.__field_msg_type.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': SMS_MSG_LIST_CMD+'=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': SMS_MSG_LIST_CMD+'=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_msg_type(self): try: self.__field_msg_type except: self.__field_msg_type=CSVSTRING(**{ 'terminator': None, 'default': SMS_MSG_ALL }) return self.__field_msg_type.getvalue() def __setfield_msg_type(self, value): if isinstance(value,CSVSTRING): self.__field_msg_type=value else: self.__field_msg_type=CSVSTRING(value,**{ 'terminator': None, 'default': SMS_MSG_ALL }) def __delfield_msg_type(self): del self.__field_msg_type msg_type=property(__getfield_msg_type, __setfield_msg_type, __delfield_msg_type, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('msg_type', self.__field_msg_type, None) class sms_msg_list_header(BaseProtogenClass): __fields=['command', 'index', 'msg_type', 'address', 'address_name', 'timestamp', 'address_type', 'data_len'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_msg_list_header,self).__init__(**dict) if self.__class__ is sms_msg_list_header: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_msg_list_header,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_msg_list_header,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_msg_type.writetobuffer(buf) self.__field_address.writetobuffer(buf) self.__field_address_name.writetobuffer(buf) self.__field_timestamp.writetobuffer(buf) self.__field_address_type.writetobuffer(buf) self.__field_data_len.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': ord(' '), 'constant': SMS_MSG_LIST_CMD+':' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT() self.__field_index.readfrombuffer(buf) self.__field_msg_type=CSVSTRING() self.__field_msg_type.readfrombuffer(buf) self.__field_address=CSVSTRING() self.__field_address.readfrombuffer(buf) self.__field_address_name=CSVSTRING() self.__field_address_name.readfrombuffer(buf) self.__field_timestamp=SMSDATETIME() self.__field_timestamp.readfrombuffer(buf) self.__field_address_type=CSVINT() self.__field_address_type.readfrombuffer(buf) self.__field_data_len=CSVINT(**{ 'terminator': None }) self.__field_data_len.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': ord(' '), 'constant': SMS_MSG_LIST_CMD+':' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_msg_type(self): return self.__field_msg_type.getvalue() def __setfield_msg_type(self, value): if isinstance(value,CSVSTRING): self.__field_msg_type=value else: self.__field_msg_type=CSVSTRING(value,) def __delfield_msg_type(self): del self.__field_msg_type msg_type=property(__getfield_msg_type, __setfield_msg_type, __delfield_msg_type, None) def __getfield_address(self): return self.__field_address.getvalue() def __setfield_address(self, value): if isinstance(value,CSVSTRING): self.__field_address=value else: self.__field_address=CSVSTRING(value,) def __delfield_address(self): del self.__field_address address=property(__getfield_address, __setfield_address, __delfield_address, None) def __getfield_address_name(self): return self.__field_address_name.getvalue() def __setfield_address_name(self, value): if isinstance(value,CSVSTRING): self.__field_address_name=value else: self.__field_address_name=CSVSTRING(value,) def __delfield_address_name(self): del self.__field_address_name address_name=property(__getfield_address_name, __setfield_address_name, __delfield_address_name, None) def __getfield_timestamp(self): return self.__field_timestamp.getvalue() def __setfield_timestamp(self, value): if isinstance(value,SMSDATETIME): self.__field_timestamp=value else: self.__field_timestamp=SMSDATETIME(value,) def __delfield_timestamp(self): del self.__field_timestamp timestamp=property(__getfield_timestamp, __setfield_timestamp, __delfield_timestamp, None) def __getfield_address_type(self): return self.__field_address_type.getvalue() def __setfield_address_type(self, value): if isinstance(value,CSVINT): self.__field_address_type=value else: self.__field_address_type=CSVINT(value,) def __delfield_address_type(self): del self.__field_address_type address_type=property(__getfield_address_type, __setfield_address_type, __delfield_address_type, None) def __getfield_data_len(self): return self.__field_data_len.getvalue() def __setfield_data_len(self, value): if isinstance(value,CSVINT): self.__field_data_len=value else: self.__field_data_len=CSVINT(value,**{ 'terminator': None }) def __delfield_data_len(self): del self.__field_data_len data_len=property(__getfield_data_len, __setfield_data_len, __delfield_data_len, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) yield ('msg_type', self.__field_msg_type, None) yield ('address', self.__field_address, None) yield ('address_name', self.__field_address_name, None) yield ('timestamp', self.__field_timestamp, None) yield ('address_type', self.__field_address_type, None) yield ('data_len', self.__field_data_len, None) bitpim-1.0.7+dfsg1/src/phones/com_lgvx4650.py0000644001616600161660000003630110662655630016755 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgvx4650.py 4370 2007-08-21 21:39:36Z djpham $ """Communicate with the LG VX4650 cell phone The VX4600 is substantially similar to the VX4400. """ # standard modules from __future__ import with_statement import contextlib import datetime import time import cStringIO import re import sha # my modules import bpcalendar import call_history import common import conversions import copy import p_brew import p_lgvx4650 import com_lgvx4400 import com_brew import com_phone import com_lg import commport import helpids import memo import prototypes import sms class Phone(com_lgvx4400.Phone): "Talk to the LG VX4650 cell phone" desc="LG-VX4650" helpid=helpids.ID_PHONE_LGVX4650 protocolclass=p_lgvx4650 serialsname='lgvx4650' # 4650 index files imagelocations=( # offset, index file, files location, type, maximumentries ( 30, "download/dloadindex/brewImageIndex.map", "dload/img", "images", 30), ) ringtonelocations=( # offset, index file, files location, type, maximumentries ( 50, "download/dloadindex/brewRingerIndex.map", "user/sound/ringer", "ringers", 30), ) builtinimages={ 80: ('Large Pic. 1', 'Large Pic. 2', 'Large Pic. 3', 'Large Pic. 4', 'Large Pic. 5', 'Large Pic. 6', 'Large Pic. 7', 'Large Pic. 8', 'Large Pic. 9', 'Large Pic. 10', 'Large Pic. 11', 'Large Pic. 12', 'Large Pic. 13', 'Large Pic. 14', 'Large Pic. 15', 'Large Pic. 16', 'Large Pic. 17', 'Large Pic. 18', 'Large Pic. 19', 'Large Pic. 20', 'Large Pic. 21', 'Large Pic. 22', 'Large Pic. 23', 'Large Pic. 24', 'Large Pic. 25', 'Large Pic. 26', 'Large Pic. 27', 'Large Pic. 28', 'Large Pic. 29', 'Large Pic. 30', 'Large Pic. 31', 'Large Pic. 32', 'Large Pic. 33' ) } builtinringtones={ 1: ('Ring 1', 'Ring 2', 'Ring 3', 'Ring 4', 'Ring 5', 'VZW Default Tone', 'Arabesque', 'Piano Sonata', 'Latin', 'When the saints go', 'Bach Cello suite', 'Speedy Way', 'CanCan', 'Grand Waltz', 'Toccata and Fugue', 'Bumble Bee', 'March', 'Circus Band', 'Sky Garden', 'Carmen Habanera', 'Hallelujah', 'Sting', 'Farewell', 'Pachelbel Canon', 'Carol 1', 'Carol 2'), # 'Vibrate', 'Lamp' ), 100: ( 'Chimes high', 'Chimes low', 'Ding', 'TaDa', 'Notify', 'Drum', 'Claps', 'FanFare', 'Chord high', 'Chord low' ) } VoiceMemoDir='VoiceDB/All/Memos' def __init__(self, logtarget, commport): com_lgvx4400.Phone.__init__(self, logtarget, commport) self.mode=self.MODENONE def getfirmwareinformation(self): self.log("Getting firmware information") req=self.protocolclass.firmwarerequest() res=self.sendbrewcommand(req, self.protocolclass.firmwareresponse) return res def getmediaindex(self, builtins, maps, results, key): """Gets the media (wallpaper/ringtone) index @param builtins: the builtin list on the phone @param results: places results in this dict @param maps: the list of index files and locations @param key: key to place results in """ media=com_lgvx4400.Phone.getmediaindex(self, (), maps, results, key) # builtins for k,e in builtins.items(): c=k for name in e: media[c]={ 'name': name, 'origin': 'builtin' } c+=1 # voice memos index if key=='ringtone-index': try: vmemo_files=self.listfiles(self.VoiceMemoDir) keys=vmemo_files.keys() keys.sort() _idx_cnt=210 for k in keys: if k.endswith('.qcp'): num_str=k[-8:-4] media[_idx_cnt]={ 'name': 'VoiceMemo'+num_str, 'origin': 'voicememo' } _idx_cnt+=1 except: if __debug__: raise return media # Ringtone stuff------------------------------------------------------------ def getringtones(self, result): result=com_lgvx4400.Phone.getringtones(self, result) if not conversions.helperavailable('pvconv'): return result media=result['ringtone'] # get& convert the voice memo files with contextlib.nested(common.usetempfile('qcp'), common.usetempfile('wav')) as (_qcp_file, _wav_file): try: vmemo_files=self.listfiles(self.VoiceMemoDir) keys=vmemo_files.keys() for k in keys: if k.endswith('.qcp'): key_name='VoiceMemo'+k[-8:-4] file(_qcp_file, 'wb').write(self.getfilecontents(k, True)) conversions.convertqcptowav(_qcp_file, _wav_file) media[key_name]=file(_wav_file, 'rb').read() except: if __debug__: raise result['ringtone']=media return result def saveringtones(self, results, merge): _new_ringtones=results.get('ringtone', {}) _rt_index=results.get('ringtone-index', {}) # list of voicememo names _voice_memo_l=[x['name'] for k,x in _rt_index.items() \ if x.get('origin', '')=='voicememo'] # list of media to delete _del_keys=[k for k,x in _new_ringtones.items() \ if x.get('name', None) in _voice_memo_l] for k in _del_keys: del _new_ringtones[k] results['ringtone']=_new_ringtones return com_lgvx4400.Phone.saveringtones(self, results, merge) # Phonebook stuff----------------------------------------------------------- def savephonebook(self, data): "Saves out the phonebook" res=com_lgvx4400.Phone.savephonebook(self, data) # build a dict to manually update the wp index pbook=res.get('phonebook', {}) wallpaper_index=res.get('wallpaper-index', {}) r1={} for k,e in pbook.items(): r1[e['bitpimserial']['id']]={ 'wallpaper': \ self._findmediainindex(wallpaper_index, e['wallpaper'], e['name'], 'wallpaper'), 'group': e['group'] } serialupdates=data.get("serialupdates", []) r2={} for bps, serials in serialupdates: r2[serials['serial1']]=r1[bps['id']] if self._update_wallpaper_index(r2): data["rebootphone"]=True return res def _update_wallpaper_index(self, wpi): # manually update wallpaper indices since the normal update process # does not seem to work buf=prototypes.buffer(self.getfilecontents( self.protocolclass.pb_file_name)) pb=self.protocolclass.pbfile() pb.readfrombuffer(buf, logtitle="Read "+self.protocolclass.pb_file_name) update_flg=False for e in pb.items: _info=wpi.get(e.serial1, None) if _info: wp=_info.get('wallpaper', None) if wp is not None and wp!=e.wallpaper: update_flg=True e.wallpaper=wp gr=_info.get('group', None) if gr is not None and gr!=e.group: update_flg=True e.group=gr if update_flg: self.log('Updating wallpaper index') buf=prototypes.buffer() pb.writetobuffer(buf, logtitle="Updated index "+self.protocolclass.pb_file_name) self.writefile(self.protocolclass.pb_file_name, buf.getvalue()) return update_flg # Calendar stuff------------------------------------------------------------ # all taken care by the VX4400 # Text Memo stuff----------------------------------------------------------- # all taken care by the VX4400 # Call History stuff-------------------------------------------------------- _call_history_info={ call_history.CallHistoryEntry.Folder_Incoming: protocolclass.incoming_call_file, call_history.CallHistoryEntry.Folder_Outgoing: protocolclass.outgoing_call_file, call_history.CallHistoryEntry.Folder_Missed: protocolclass.missed_call_file } def getcallhistory(self, result): # read the call history files res={} for _folder, _file_name in Phone._call_history_info.items(): try: buf=prototypes.buffer(self.getfilecontents(_file_name)) hist_file=self.protocolclass.callhistoryfile() hist_file.readfrombuffer(buf, logtitle="Read call history") for i in range(hist_file.itemcount): hist_call=hist_file.items[i] entry=call_history.CallHistoryEntry() entry.folder=_folder entry.datetime=hist_call.datetime entry.number=hist_call.number entry.name=hist_call.name if _folder!=call_history.CallHistoryEntry.Folder_Missed: entry.duration=hist_call.duration res[entry.id]=entry except com_brew.BrewNoSuchFileException: pass result['call_history']=res return result # SMS stuff----------------------------------------------------------------- def _setquicktext(self, result): canned_file=Phone.SMSCannedFile() canned_file.set_sms_canned_data(result.get('canned_msg', [])) buf=prototypes.buffer() canned_file.writetobuffer(buf, logtitle="Updated "+self.protocolclass.sms_canned_file) self.writefile(self.protocolclass.sms_canned_file, buf.getvalue()) def _getquicktext(self): try: buf=prototypes.buffer(self.getfilecontents( self.protocolclass.sms_canned_file)) canned_file=Phone.SMSCannedFile() canned_file.readfrombuffer(buf, logtitle="Read SMS canned text") return canned_file.get_sms_canned_data() except: if __debug__: raise return [] my_model='VX4650' class SMSCannedFile(protocolclass.SMSCannedFile): def __init__(self, *args, **kwargs): Phone.protocolclass.SMSCannedFile.__init__(self, *args, **kwargs) def get_sms_canned_data(self): return [{ 'text': e.text, 'type': sms.CannedMsgEntry.user_type } for e in self.items] def set_sms_canned_data(self, canned_list): msg_lst=[x['text'] for x in canned_list \ if x['type']==sms.CannedMsgEntry.user_type] item_count=min(Phone.protocolclass.SMS_CANNED_MAX_ITEMS, len(msg_lst)) for i in range(item_count): entry=Phone.protocolclass.SMSCannedMsg() entry.text=msg_lst[i] self.items.append(entry) entry=Phone.protocolclass.SMSCannedMsg() entry.text='' for i in range(item_count, Phone.protocolclass.SMS_CANNED_MAX_ITEMS): self.items.append(entry) # Phone Info stuff---------------------------------------------------------- def _get_phone_number(self): # return the phone number of this phone s='' try: buf=self.getfilecontents('nvm/nvm/nvm_0000') ofs=0x240 if buf[ofs]=='\x01': ofs+=1 while buf[ofs]!='\x01': s+=buf[ofs] ofs+=1 except: if __debug__: raise return s def getphoneinfo(self, phone_info): # returning some basic phone info # double check if this's the right phone. try: if self.getfilecontents(self.brew_version_file)[:len(self.my_model)]==self.my_model: phone_info.model=self.my_model phone_info.manufacturer=Profile.phone_manufacturer phone_info.phone_number=self._get_phone_number() phone_info.firmware_version=self.getfirmwareinformation().firmwareversion phone_info.esn=self.get_esn() except: if __debug__: raise #------------------------------------------------------------------------------ parentprofile=com_lgvx4400.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname WALLPAPER_WIDTH=128 WALLPAPER_HEIGHT=128 MAX_WALLPAPER_BASENAME_LENGTH=19 WALLPAPER_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ." WALLPAPER_CONVERT_FORMAT="bmp" MAX_RINGTONE_BASENAME_LENGTH=19 RINGTONE_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ." BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='VX4650' imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) def GetImageOrigins(self): return self.imageorigins # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 128, 'height': 114, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "fullscreen", {'width': 128, 'height': 128, 'format': "JPEG"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('memo', 'read', None), # all memo list reading DJP ('memo', 'write', 'OVERWRITE'), # all memo list writing DJP ('call_history', 'read', None), ('sms', 'read', None), ('sms', 'write', 'OVERWRITE'), ) def __init__(self): parentprofile.__init__(self) bitpim-1.0.7+dfsg1/src/phones/p_lgvi125.p0000644001616600161660000003231310454042735016131 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Andrew Zitnay ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id$ %{ """Various descriptions of data specific to LG VI125""" import re from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=1 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=200 MAXCALENDARDESCRIPTION=38 NUMEMAILS=3 NUMPHONENUMBERS=5 NUMGROUPS=20 NUMMAPGROUPS=500 NORINGTONE=0 NOMSGRINGTONE=0 NOWALLPAPER=0 MEMOLENGTH=33 SMS_CANNED_MAX_ITEMS=18 SMS_CANNED_MAX_LENGTH=101 SMS_CANNED_FILENAME="sms/mediacan000.dat" SMS_PATTERNS={'Inbox': re.compile(r"^.*/inbox[0-9][0-9][0-9]\.dat$"), 'Sent': re.compile(r"^.*/outbox[0-9][0-9][0-9]\.dat$"), 'Saved': re.compile(r"^.*/sf[0-9][0-9]\.dat$"), } numbertypetab=( 'cell', 'home', 'office', 'fax', 'pager' ) # Calendar parameters NUMCALENDARENTRIES=300 # ?? for VI125 CAL_REP_NONE=0x10 CAL_REP_DAILY=0x11 CAL_REP_MONFRI=0x12 CAL_REP_WEEKLY=0x13 CAL_REP_MONTHLY=0x14 CAL_REP_YEARLY=0x15 CAL_DOW_SUN=0x0800 CAL_DOW_MON=0x0400 CAL_DOW_TUE=0x0200 CAL_DOW_WED=0x0100 CAL_DOW_THU=0x0080 CAL_DOW_FRI=0x0040 CAL_DOW_SAT=0x0020 CAL_DOW_EXCEPTIONS=0x0010 CAL_REMINDER_NONE=0 CAL_REMINDER_ONTIME=1 CAL_REMINDER_5MIN=2 CAL_REMINDER_10MIN=3 CAL_REMINDER_1HOUR=4 CAL_REMINDER_1DAY=5 CAL_REMINDER_2DAYS=6 CAL_REPEAT_DATE=(4095, 12, 31) cal_dir='sch' cal_data_file_name='sch/schedule.dat' cal_exception_file_name='sch/schexception.dat' cal_has_voice_id=False %} PACKET firmwareresponse: 1 UINT command 11 USTRING {'terminator': None} date1 8 USTRING {'terminator': None} time1 11 USTRING {'terminator': None} date2 8 USTRING {'terminator': None} time2 8 USTRING {'terminator': None} firmwareversion PACKET pbreadentryresponse: "Results of reading one entry" * pbheader header * pbentry entry PACKET pbupdateentryrequest: * pbheader {'command': 0x04, 'flag': 0x01} +header * pbentry entry PACKET pbappendentryrequest: * pbheader {'command': 0x03, 'flag': 0x01} +header * pbentry entry # All STRINGS have raiseonterminatedread as False since the phone does # occassionally leave out the terminator byte # Note if you change the length of any of these fields, you also # need to modify com_lgvi125 to give a different truncateat parameter # in the convertphonebooktophone method PACKET pbentry: 1 UINT serial1 1 UINT {'constant': 0x00} +unknown3 1 UINT {'constant': 0x00} +unknown4 1 UINT {'constant': 0x00} +unknown5 1 UINT {'constant': 0x72} +unknown6 1 UINT unknown7 1 UINT serial2 1 UINT {'constant': 0x00} +unknown8 1 UINT {'constant': 0x00} +unknown9 1 UINT {'constant': 0x00} +unknown10 33 USTRING {'raiseonunterminatedread': False} name 1 UINT group 1 UINT {'constant': 0x00} +unknown11 1 UINT ringtone "ringtone index for a call" 1 UINT unknown12 # used to set ringtone to default 1 UINT {'constant': 0x00} +unknown13 * USTRING {'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH} memo * LIST {'length': NUMEMAILS} +emails: 73 USTRING {'raiseonunterminatedread': False} email 73 USTRING {'raiseonunterminatedread': False} url 4 UINT avatar # unknown format * LIST {'length': NUMPHONENUMBERS} +numberspeeddials: 1 UINT numberspeeddial * LIST {'length': NUMPHONENUMBERS} +numbertypes: 1 UINT numbertype * LIST {'length': NUMPHONENUMBERS} +numbers: 49 USTRING {'raiseonunterminatedread': False} number 1 UINT {'constant': 0x7c} +unknown14 # one of the constant unknowns below is most likely the animation, and thus will except # when someone has a group with a non-default animation (i have none other than the # default on my phone, so i can't easily figure out which one) PACKET pbgroup: "A single group" 1 UINT number 1 UINT unknown1 # 0xff when deleted, 0x30 otherwise 1 UINT ring 1 UINT {'constant': 0x00} +unknown2 1 UINT {'constant': 0x00} +unknown3 1 UINT {'constant': 0x01} +unknown4 1 UINT {'constant': 0x00} +unknown5 1 UINT {'constant': 0x00} +unknown6 1 UINT unknown7 # sometimes 0x00, sometimes same as number 1 UINT unknown8 # sometimes 0x00, sometimes 0x01 33 USTRING name PACKET pbgroups: "Phonebook groups" * LIST {'elementclass': pbgroup} +groups PACKET pbseqgroup: 1 UINT number 1 UINT unknown # 0x00 when deleted, 0x30 otherwise PACKET pbseqgroups: * LIST {'elementclass': pbseqgroup, 'length': NUMGROUPS} +seqgroups PACKET pbmapgroup: 1 UINT number 1 UINT unknown # 0xFF when deleted, 0x30 otherwise PACKET pbmapgroups: * LIST {'elementclass': pbmapgroup, 'length': NUMMAPGROUPS} +mapgroups PACKET indexentry: 2 UINT {'default': 0xffff} +index 40 USTRING {'default': ""} +name PACKET indexfile: "Used for tracking wallpaper and ringtones" # A bit of a silly design again. Entries with an index of 0xffff are # 'blank'. Thus it is possible for numactiveitems and the actual # number of valid entries to be mismatched. P UINT {'constant': 30} maxitems 2 UINT numactiveitems * LIST {'length': self.maxitems, 'elementclass': indexentry, 'createdefault': True} +items ### ### The calendar ### # # The calendar consists of one file listing events and an exception # file that lists exceptions. These exceptions suppress a particular # instance of a repeated event. For example, if you setup something # to happen monthly, but changed the 1st february event, then the # schedule will contain the repeating event, and the 1st feb one, # and the suppresions/exceptions file will point to the repeating # event and suppress the 1st feb. # The phone uses the position within the file to give an event an id PACKET scheduleexception: 4 UINT pos "Refers to event id (position in schedule file) that this suppresses" 1 UINT day 1 UINT month 2 UINT year PACKET scheduleexceptionfile: * LIST {'elementclass': scheduleexception} +items PACKET scheduleevent: P UINT { 'constant': 60 } packet_size "Faster than packetsize()" 4 UINT pos "position within file, used as an event id" 4 LGCALDATE start 4 LGCALDATE end 1 UINT repeat 2 UINT daybitmap "which days a weekly repeat event happens on" 1 UINT { 'default': 0 } +pad2 1 UINT alarmminutes "a value of 100 indicates not set" 1 UINT alarmhours "a value of 100 indicates not set" 1 UINT alarmtype "preset alarm reminder type" 1 UINT { 'default': 0 } +snoozedelay "in minutes, not for this phone" 1 UINT ringtone 39 USTRING {'raiseontruncate': False } description PACKET schedulefile: 2 UINT numactiveitems * LIST {'elementclass': scheduleevent} +events PACKET call: 4 GPSDATE GPStime #no. of seconds since 0h 1-6-80, based off local time. 4 UINT unknown1 # different for each call 4 UINT duration #seconds, not certain about length of this field 49 USTRING {'raiseonunterminatedread': False} number 36 USTRING {'raiseonunterminatedread': False} name 1 UINT numberlength # length of phone number 1 UINT unknown2 # set to 1 on some calls 1 UINT pbnumbertype # 1=cell, 2=home, 3=office, 4=cell2, 5=fax, 6=vmail, 0xFF=not in phone book 2 UINT unknown3 # always seems to be 0 1 UINT pbentrynum #entry number in phonebook PACKET callhistory: 4 UINT numcalls 1 UINT unknown1 * LIST {'elementclass': call} +calls ### ### SMS ### # # There are 3 types of SMS records, The inbox, outbox and unsent (pending) # Unlike other records in the phone each message is stored in a separate file # All messages are in the 'sms' directory in the root of the phone # Inbox messages are in files called 'inbox000.dat', the number 000 varies for # each message, typically there are no gaps in the numbering, but gaps can appear # if a message is deleted. # Outbox message are named 'outbox000.dat', unsent messages are named 'sf00.dat', # only two digit file name that suggests a max of 100 message for this type. # Messages in the outbox get updated when the message is received by the recipient, # they contain a delivery flag and a delivery time for all the possible 10 recipients. # The vx8100 supports SMS contatination, this allows you to send text messages that are # longer than 160 characters. The format is different for these type of messages, but # it is supported by this implementation. # The vx8100 also allows you to put small graphics, sounds and animations in a message. # This implementation does not support these, if they are contained in a message they # will be ignored and just the text will be shown when you view the message in bitpim. # The text in the the messages is stored in 7-bit characters, so they have # to be unpacked, in concatinated messages and messages with embeded graphics etc. the # format uses the GSM 03.38 specified format, a good example of this can be found at # "http://www.dreamfabric.com/sms/hello.html". # For simple messages less than 161 characters with no graphics the format is simpler, # the 7-bit characters are just packed into memory in the order they appear in the # message. PACKET msg_record: # the first few fields in this packet have something to do with the type of SMS # message contained. EMS and concatinated text are coded differently than a # simple text message 1 UINT unknown1 # 0 1 UINT binary # 0=simple text, 1=binary/concatinated 1 UINT unknown3 # 0=simple text, 1=binary/concatinated 1 UINT unknown4 # 0 1 UINT unknown6 # 2=simple text, 9=binary/concatinated 1 UINT length * LIST {'length': 219} +msg: 1 UINT byte "individual byte of message" PACKET recipient_record: 2 UINT unknown1 49 USTRING number 1 UINT status # 1 when sent, 5 when received, 2 failed to send 4 LGCALDATE timesent 4 LGCALDATE timereceived 8 DATA unknown2 PACKET sms_saved: 4 UINT outboxmsg 4 UNKNOWN pad # used for GPStime on some phones if self.outboxmsg: * sms_out outbox if not self.outboxmsg: * sms_in inbox PACKET sms_out: 4 UINT index # starting from 1, unique 1 UINT locked # 1=locked 3 UINT unknown1 # zero 4 LGCALDATE timesent # time the message was sent 21 USTRING subject 151 DATA unknown2 1 UINT num_msg_elements # up to 10 * LIST {'elementclass': msg_record, 'length': 10} +messages 1 UINT unknown5 1 UINT priority # 0=normal, 1=high 14 DATA unknown7 49 USTRING callback * LIST {'elementclass': recipient_record,'length': 10} +recipients PACKET SMSINBOXMSGFRAGMENT: * LIST {'length': 181} +msg: # this size could be wrong 1 UINT byte "individual byte of message" PACKET sms_in: 4 UINT msg_index1 4 UINT msg_index2 # equal to the numerical part of the filename eg inbox002.dat 2 UINT unknown2 # set to 0 for simple message and 3 for binary, 9 for page 4 UINT unknown3 # set to 0 6 SMSDATE timesent 3 UINT unknown 1 UINT callback_length # 0 for no callback number 38 USTRING callback 1 UINT sender_length * LIST {'length': 38} +sender: 1 UINT byte "individual byte of senders phone number" 15 DATA unknown4 # set to zeros 4 LGCALDATE lg_time # time the message was sent 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 2 UINT unknown5 # zero 1 UINT read # 1 if message has been read, 0 otherwise 1 UINT locked # 1 if the message is locked, 0 otherwise 2 UINT unknown8 # zero 1 UINT priority # 1 if the message is high priority, 0 otherwise 5 DATA flags # message flags, read, priority, locked etc 21 USTRING subject 1 UINT bin_header1 # 0 in simple message 1 if the message contains a binary header 1 UINT bin_header2 # 0 in simple message 9 if the message contains a binary header 2 UINT unknown6 # zeros 2 UINT multipartID # multi-part message ID, used for concatinated messages only 1 UINT bin_header3 # 0 in simple message 2 if the message contains a binary header 1 UINT num_msg_elements # max 10 elements (guessing on max here) * LIST {'length': 10} +msglengths: 1 UINT msglength "lengths of individual messages in septets" * LIST {'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT} +msgs # 181 bytes per message, uncertain on this, no multipart message available # 20 messages, 7-bit ascii for simple text. for binary header # first byte is header length not including the length byte # rest depends on content of header, not known at this time. # text alway follows the header although the format it different # than a simple SMS 437 DATA unknown5 33 USTRING senders_name 169 DATA unknown6 # ?? inlcudes senders phone number in ascii PACKET sms_quick_text: # the vi125 has variable length NULL terminated strings null terminated in it's canned messages # file sms/mediacan000.dat, not sure about the max * LIST {} +msgs: * USTRING {} msg # bitpim-1.0.7+dfsg1/src/phones/p_samsungscha650.p0000644001616600161660000000524010442561507017506 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_samsungscha650.p 3352 2006-06-10 15:20:39Z skyjunky $ %{ # Text in this block is placed in the output file from prototypes import * max_pb_slots=501 max_pb_entries=534 user_pb_entry_range=xrange(1, 501) max_number_entries=501 max_ringtone_entries=20 max_image_entries=10 slot_file_name='nvm/nvm/pclink_tbl' pb_file_name='nvm/nvm/dial_tbl' number_file_name='nvm/nvm/dial' ringtone_index_file_name='nvm/nvm/brew_melody' ringtone_file_path='user/sound/ringer' image_index_file_name='nvm/nvm/brew_image' image_file_path='nvm/brew/shared' # map all UINT fields to lsb version UINT=UINTlsb BOOL=BOOLlsb %} PACKET pbslot: 1 UINT c0 # either 0 or 1 2 UINT pbbook_index # index into pbbook 1 UINT status # status of this slot * LIST { 'length': 4 } timestamp: 1 UINT t PACKET pbslots: * LIST { 'length': max_pb_slots, 'elementclass': pbslot } +slot PACKET pbentry: 1 UINT c0 2 UINT mem_index 1 UINT c3 2 UINT speed_dial_index 2 UINT home_num_index 2 UINT office_num_index 2 UINT mobile_num_index 2 UINT pager_num_index 2 UINT fax_num_index 2 UINT alias_num_index 2 UINT unused_index 2 UINT email_index 22 USTRING {'raiseonunterminatedread': False } name 1 UINT c4 1 UINT ringer_type 1 UINT group_num * LIST { 'length': 7 } +c5: 1 UINT c5 PACKET pbbook: * LIST { 'length': max_pb_entries, 'elementclass': pbentry } +entry PACKET number: 2 UINT valid 2 UINT type 1 UINT length 49 USTRING { 'raiseonunterminatedread': False } name 2 UINT pb_index PACKET numbers: * LIST { 'length': max_number_entries, 'elementclass': number } +entry PACKET ringtone: 1 UINT c0 1 UINT index 1 UINT c1 1 UINT assignment 1 UINT c2 17 USTRING { 'raiseonunterminatedread': False } name 1 UINT name_len 46 USTRING { 'raiseonunterminatedread': False } file_name 1 UINT file_name_len 2 UINT c3 PACKET ringtones: * LIST { 'length': max_ringtone_entries, 'elementclass': ringtone } entry PACKET image: 1 UINT c0 1 UINT index 1 UINT c1 1 UINT assignment 17 USTRING { 'raiseonunterminatedread': False } name 1 UINT name_len 46 USTRING { 'raiseonunterminatedread': False } file_name 1 UINT file_name_len 2 UINT c2 PACKET images: * LIST { 'length': max_image_entries, 'elementclass': image } entry bitpim-1.0.7+dfsg1/src/phones/p_samsungscha670.p0000644001616600161660000000263510442561507017515 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_samsungscha670.p 3352 2006-06-10 15:20:39Z skyjunky $ %{ # Text in this block is placed in the output file from prototypes import * max_ringtone_entries=40 max_image_entries=30 ringtone_index_file_name='nvm/nvm/brew_melody' ringtone_file_path='brew/ringer' image_index_file_name='nvm/nvm/brew_image' image_file_path='brew/shared' cam_pix_file_path='digital_cam' mms_image_path='mms_image' # map all UINT fields to lsb version UINT=UINTlsb BOOL=BOOLlsb %} PACKET ringtone: 1 UINT c0 1 UINT index 1 UINT c1 1 UINT assignment 1 UINT c2 17 USTRING { 'raiseonunterminatedread': False } name 1 UINT name_len 51 USTRING { 'raiseonunterminatedread': False } file_name 1 UINT file_name_len 2 UINT c3 PACKET ringtones: * LIST { 'length': max_ringtone_entries, 'elementclass': ringtone } entry PACKET image: 1 UINT c0 1 UINT index 1 UINT c1 1 UINT assignment 17 USTRING { 'raiseonunterminatedread': False } name 1 UINT name_len 51 USTRING { 'raiseonunterminatedread': False } file_name 1 UINT file_name_len 2 UINT c2 PACKET images: * LIST { 'length': max_image_entries, 'elementclass': image } entry bitpim-1.0.7+dfsg1/src/phones/p_samsungscha870.p0000644001616600161660000002702110743003111017475 0ustar amuamu## BITPIM ### ### Copyright (C) 2006 Joe Pham ### Copyright (C) 2006 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_samsungscha870.p 4569 2008-01-15 01:03:05Z djpham $ %{ """Various descriptions of data specific to the Samsung SCH-A870 Phone""" from prototypes import * from prototypes_samsung import * from p_brew import * from p_samsungscha950 import * from common import basename # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb # Calendar stuff CAL_PATH='sch_event' CAL_INDEX_FILE_NAME=CAL_PATH+'/usr_tsk' CAL_FILE_NAME_PREFIX=CAL_PATH+'/usr_tsk_' CAL_MAX_EVENTS=100 CAL_REMINDER_OFF=0 CAL_REMINDER_ONCE=1 CAL_REMINDER_2MIN=2 CAL_REMINDER_15MIN=3 GROUP_INDEX_FILE_NAME='pb/group_name.dat' # Call log/history CL_MAX_ENTRIES=90 PB_FLG_CRINGTONE=0X4000 PIC_INDEX_HDR='0|/brew/16452/mp|\x0A' %} PACKET PictureIndexEntry: P STRING { 'default': '' } +filename 64 STRING { 'terminator': 0, 'default': self._name() } +name 58 STRING { 'terminator': 0, 'default': self._pathname() } +pathname 2 UINT { 'default': 0x0300 } +dunno1 4 UINT filesize %{ def _name(self): return '%(base)s.%(ext)s' % { 'base': common.stripext(self.filename)[:10], 'ext': common.getext(self.filename) } def _pathname(self): global PIC_PATH return '/%(path)s/%(filename)s'%{ 'path': PIC_PATH, 'filename': self.filename } %} PACKET PictureIndexFile: 128 STRING { 'terminator': 0, 'default': PIC_INDEX_HDR } +header * LIST { 'elementclass': PictureIndexEntry } +items # Phonebook Group stuff--------------------------------------------------------- PACKET GroupEntry: 65 USTRING { 'encoding': ENCODING, 'terminator': 0 } name 3 UINT index 4 UINT numofmembers 4 UNKNOWN dunno1 PACKET GroupIndexFile: * LIST { 'elementclass': GroupEntry } +items # Calendar stuff---------------------------------------------------------------- PACKET CalIndexEntry: 2 UINT { 'default': 0 } +index PACKET CalIndexFile: 2 UINT next_index 12 UNKNOWN { 'pad': 0 } +zero1 2 UINT numofevents 6 UNKNOWN { 'pad': 0 } +zero2 2 UINT numofnotes 2 UNKNOWN { 'pad': 0 } +zero3 2 UINT numofactiveevents 112 UNKNOWN { 'pad': 0 } +zero4 * LIST { 'elementclass': CalIndexEntry, 'length': 103, 'createdefault': True } +events * LIST { 'elementclass': CalIndexEntry, 'length': 30, 'createdefault': True } +notes * LIST { 'elementclass': CalIndexEntry, 'length': 324, 'createdefault': True } +activeevents PACKET CalEntry: 2 UINT titlelen * USTRING { 'sizeinbytes': self.titlelen, 'encoding': ENCODING, 'terminator': None } title 4 DateTime start 4 DateTime { 'default': self.start } +start2 4 ExpiringTime exptime 1 UINT { 'default': 1 } +one 1 UINT { 'default': 0 } +zero1 1 UINT alert 1 UINT { 'default': 3 } +three 1 UINT alarm 1 UINT { 'default': CAL_REMINDER_ONCE } +reminder 1 UINT ringtoneindex 5 UNKNOWN { 'pad': 0 } +zero4 4 UINT duration 7 UNKNOWN { 'pad': 0 } +zero5 PACKET NotePadEntry: 2 UINT textlen * USTRING { 'terminator': None, 'encoding': ENCODING, 'sizeinbytes': self.textlen } text 4 DateTime creation 4 DateTime { 'default': self.creation } +creation2 7 UNKNOWN { 'pad': 0 } +zero2 1 UINT { 'default': 5 } +five 19 UNKNOWN { 'pad': 0 } +zero3 # Call History------------------------------------------------------------------ PACKET cl_list: 2 UINT index PACKET cl_index_file: * LIST { 'length': CL_MAX_ENTRIES, 'elementclass': cl_list } incoming * LIST { 'length': CL_MAX_ENTRIES, 'elementclass': cl_list } outgoing * LIST { 'length': CL_MAX_ENTRIES, 'elementclass': cl_list } missed 992 UNKNOWN dunno1 4 UINT incoming_count 4 UINT outgoing_count 4 UINT missed_count PACKET cl_file: 1 UINT cl_type 35 STRING { 'terminator': 0 } number 4 DateTime1 datetime 4 UINT duration %{ def _valid(self): global CL_VALID_TYPE return bool(self.cl_type in CL_VALID_TYPE and self.number) valid=property(fget=_valid) %} # Phonebook stuff-------------------------------------------------------------- PACKET NumberEntry: * STRING { 'terminator': None, 'pascal': True } number 1 UINT option if self.option & PB_FLG_SPEEDDIAL: 2 UINT speeddial if self.option & PB_FLG_RINGTONE: * STRING { 'terminator': None, 'pascal': True } ringtone PACKET PBEntry: 2 UINT info 2 UINT { 'default': 0 } +zero1 if self.info & PB_FLG_NAME: * USTRING { 'terminator': None, 'encoding': ENCODING, 'pascal': True } name if self.info & PB_FLG_EMAIL: * USTRING { 'terminator': None, 'encoding': ENCODING, 'pascal': True } email if self.info & PB_FLG_EMAIL2: * USTRING { 'terminator': None, 'encoding': ENCODING, 'pascal': True } email2 if self.info & PB_FLG_HOME: * NumberEntry home if self.info & PB_FLG_WORK: * NumberEntry work if self.info & PB_FLG_CELL: * NumberEntry cell if self.info & PB_FLG_FAX: * NumberEntry fax if self.info & PB_FLG_CELL2: * NumberEntry cell2 if self.info & PB_FLG_DATE: 4 DateTime datetime if self.info & PB_FLG_GROUP: 1 UINT group if self.info & PB_FLG_CRINGTONE: * STRING { 'terminator': None, 'pascal': True } ringtone if self.info & PB_FLG_WP: * STRING { 'terminator': None, 'pascal': True } wallpaper 4 UINT wallpaper_range PACKET ss_number_entry: * STRING { 'terminator': 0, 'default': '', 'maxsizeinbytes': PB_MAX_NUMBER_LEN, 'raiseontruncate': False } +number 2 UINT { 'default': 0 } +speeddial 1 UINT { 'default': 0 } +primary 8 STRING { 'pad': 0, 'default': '' } +zero * STRING { 'terminator': 0, 'default': '' } +ringtone PACKET ss_pb_entry: * USTRING { 'terminator': 0, 'maxsizeinbytes': PB_MAX_NAME_LEN, 'encoding': ENCODING, 'raiseontruncate': False } name * USTRING { 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False } +email * USTRING { 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False } +email2 3 UINT { 'default': 0 } +zero1 * STRING { 'terminator': 0, 'default': '' } +ringtone * STRING { 'terminator': 0, 'default': '' } +wallpaper 1 UINT { 'default': 0 } +zero2 * ss_number_entry +home * ss_number_entry +work * ss_number_entry +cell * ss_number_entry +dummy * ss_number_entry +fax * ss_number_entry +cell2 4 UINT { 'default': 0 } +zero3 1 UINT { 'default': 0 } +group 2 UINT { 'default': 0 } +zero4 PACKET ss_pb_write_req: * ss_cmd_hdr { 'command': SS_CMD_PB_WRITE } +hdr 1 UINT { 'default': 0 } +zero * ss_pb_entry entry PACKET ss_pb_write_resp: * ss_cmd_hdr hdr 1 UINT zero 2 UINT index # SMS Stuff -------------------------------------------------------------------- PACKET pBOOL: P BOOL value PACKET sms_header: 2 UINT index 1 UINT msg_len 1 UINT callback_len 1 UINT bitmap1 1 UINT bitmap2 6 UNKNOWN dunno1 2 UINT body_len 2 UINT file_type 1 UINT msg_type 1 UINT enhance_delivery * pBOOL { 'value': self.file_type==SMS_TXT_TYPE and self.msg_type in SMS_VALID_TYPE } is_txt_msg * pBOOL { 'value': self.msg_type==SMS_TYPE_IN } in_msg * pBOOL { 'value': self.msg_type==SMS_TYPE_SENT } sent_msg * pBOOL { 'value': self.msg_type==SMS_TYPE_DRAFT } draft_msg if self.is_txt_msg.value: * sms_body { 'msg_len': self.msg_len, 'has_callback': self.bitmap2 & SMS_FLG2_CALLBACK, 'has_priority': self.bitmap2 & SMS_FLG2_PRIORITY, 'has_1byte': self.bitmap2 & SMS_FLG2_SOMETHING, 'has_1byte2': self.bitmap2 & SMS_FLG2_MSG, 'has_40bytes': self.bitmap1 & SMS_FLG1_HAS40 } body PACKET sms_msg_stat_list: 1 UINT status PACKET sms_datetime_list: 4 DateTime1 datetime 4 UNKNOWN dunno PACKET sms_delivered_datetime: * LIST { 'elementclass': sms_datetime_list, 'length': 10 } datetime 20 UNKNOWN dunno PACKET sms_body: P UINT msg_len P BOOL { 'default': True } +has_callback P BOOL { 'default': False } +has_priority P BOOL { 'default': False } +has_1byte P BOOL { 'default': True } +has_1byte2 P BOOL { 'default': False } +has_40bytes 50 UNKNOWN dunno1 * USTRING { 'sizeinbytes': self.msg_len, 'encoding': ENCODING, 'terminator': None } msg if self.has_callback: 3 UNKNOWN dunno2 1 UINT callback_len * STRING { 'sizeinbytes': self.callback_len, 'terminator': None } callback if self.has_priority: 1 UINT priority if self.has_1byte: 1 UNKNOWN dunno3 40 UNKNOWN dunno4 4 DateTime1 datetime 13 UNKNOWN dunno5 1 UINT addr_len0 1 UINT addr_len1 1 UINT addr_len2 1 UINT addr_len3 1 UINT addr_len4 1 UINT addr_len5 1 UINT addr_len6 1 UINT addr_len7 1 UINT addr_len8 1 UINT addr_len9 if self.addr_len0: * STRING { 'sizeinbytes': self.addr_len0, 'terminator': None } addr0 if self.addr_len1: * STRING { 'sizeinbytes': self.addr_len1, 'terminator': None } addr1 if self.addr_len2: * STRING { 'sizeinbytes': self.addr_len2, 'terminator': None } addr2 if self.addr_len3: * STRING { 'sizeinbytes': self.addr_len3, 'terminator': None } addr3 if self.addr_len4: * STRING { 'sizeinbytes': self.addr_len4, 'terminator': None } addr4 if self.addr_len5: * STRING { 'sizeinbytes': self.addr_len5, 'terminator': None } addr5 if self.addr_len6: * STRING { 'sizeinbytes': self.addr_len6, 'terminator': None } addr6 if self.addr_len7: * STRING { 'sizeinbytes': self.addr_len7, 'terminator': None } addr7 if self.addr_len8: * STRING { 'sizeinbytes': self.addr_len8, 'terminator': None } addr8 if self.addr_len9: * STRING { 'sizeinbytes': self.addr_len9, 'terminator': None } addr9 if not self.has_1byte and self.has_1byte2: 1 UNKNOWN dunno6 if self.has_1byte2: 1 UNKNOWN dunno7 21 UNKNOWN dunno8 if self.has_40bytes: 40 UNKNOWN dunno9 * LIST { 'elementclass': sms_msg_stat_list, 'length': 10 } msg_stat # too hard to do it here. Will be handled by the phone code ## if self.msg_stat[0].status==SMS_STATUS_DELIVERED: ## 4 DateTime1 delivered_datetime ## 96 UNKNOWN dunno10 ## 4 UINT locked bitpim-1.0.7+dfsg1/src/phones/p_samsungscha930.p0000644001616600161660000000656710604002154017510 0ustar amuamu## BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: $ %{ """Various descriptions of data specific to the Samsung SCH-A950 Phone""" from prototypes import * from prototypes_samsung import * from p_brew import * from p_samsungscha950 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb # Calendar stuff CAL_PATH='sch_event' CAL_INDEX_FILE_NAME=CAL_PATH+'/usr_tsk' CAL_FILE_NAME_PREFIX=CAL_PATH+'/usr_tsk_' CAL_MAX_EVENTS=100 CAL_REMINDER_OFF=3 CAL_REMINDER_ONCE=0 CAL_REMINDER_2MIN=1 CAL_REMINDER_15MIN=2 # vide stuff FLIX_PATH='brew/16452/mf' # Call log/history CL_MAX_ENTRIES=90 %} PACKET WRingtoneIndexEntry: * STRING { 'terminator': None, 'default': '/ff/' } +path_prefix * STRING { 'terminator': None } pathname * STRING { 'terminator': None, 'default': '|0|2\x0A' } +eor PACKET WRingtoneIndexFile: * LIST { 'elementclass': WRingtoneIndexEntry } +items PACKET RRingtoneIndexEntry: * STRING { 'terminator': 0x7C } pathname * STRING { 'terminator': 0x0A } misc PACKET RRingtoneIndexFile: * LIST { 'elementclass': RRingtoneIndexEntry } +items PACKET CalIndexEntry: 2 UINT { 'default': 0 } +index PACKET CalIndexFile: 2 UINT next_index 12 UNKNOWN { 'pad': 0 } +zero1 2 UINT numofevents 6 UNKNOWN { 'pad': 0 } +zero2 2 UINT numofnotes 2 UNKNOWN { 'pad': 0 } +zero3 2 UINT numofactiveevents 112 UNKNOWN { 'pad': 0 } +zero4 * LIST { 'elementclass': CalIndexEntry, 'length': 103, 'createdefault': True } +events * LIST { 'elementclass': CalIndexEntry, 'length': 30, 'createdefault': True } +notes * LIST { 'elementclass': CalIndexEntry, 'length': 324, 'createdefault': True } +activeevents PACKET CalEntry: 2 UINT titlelen * USTRING { 'sizeinbytes': self.titlelen, 'encoding': ENCODING, 'terminator': None } title 4 DateTime start 4 UNKNOWN { 'pad': 0 } +zero1 4 DateTime { 'default': self.start } +start2 4 UNKNOWN { 'pad': 0 } +zero2 4 ExpiringTime exptime 4 UNKNOWN { 'pad': 0 } +zero3 1 UINT { 'default': 1 } +one 1 UINT repeat 1 UINT { 'default': 3 } +three 1 UINT alarm 1 UINT alert 1 UINT { 'default': CAL_REMINDER_ONCE } +reminder 5 UNKNOWN { 'pad': 0 } +zero4 4 UINT duration 1 UINT timezone 4 DateTime creationtime 4 UNKNOWN { 'pad': 0 } +zero5 4 DateTime modifiedtime 4 UNKNOWN { 'pad': 0 } +zero6 2 UINT ringtonelen * STRING { 'sizeinbytes': self.ringtonelen, 'terminator': None } ringtone 2 UNKNOWN { 'pad': 0 } +zero7 # Call History PACKET cl_list: 2 UINT index PACKET cl_index_file: * LIST { 'length': CL_MAX_ENTRIES, 'elementclass': cl_list } incoming * LIST { 'length': CL_MAX_ENTRIES, 'elementclass': cl_list } outgoing * LIST { 'length': CL_MAX_ENTRIES, 'elementclass': cl_list } missed 992 UNKNOWN dunno1 4 UINT incoming_count 4 UINT outgoing_count 4 UINT missed_count PACKET cl_file: 1 UINT cl_type 51 STRING { 'terminator': 0 } number 4 DateTime1 datetime 4 UNKNOWN dunno1 4 UINT duration bitpim-1.0.7+dfsg1/src/phones/p_samsungscha950.p0000644001616600161660000004643211320517703017514 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_samsungscha950.p 4776 2010-01-05 02:11:15Z djpham $ %{ """Various descriptions of data specific to the Samsung SCH-A950 Phone""" from prototypes import * from prototypes_samsung import * from p_brew import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb ENCODING='latin_1' RT_PATH='brew/16452/mr' RT_PATH2='brew/16452/lk/mr' RT_INDEX_FILE_NAME=RT_PATH+'/MrInfo.db' RT_EXCLUDED_FILES=('MrInfo.db',) SND_PATH='brew/16452/ms' SND_PATH2='brew/16452/lk/ms' SND_INDEX_FILE_NAME=SND_PATH+'/MsInfo.db' SND_EXCLUDED_FILES=('MsInfo.db', 'ExInfo.db') PIC_PATH='brew/16452/mp' PIC_PATH2='brew/16452/lk/mp' PIC_INDEX_FILE_NAME=PIC_PATH+'/Default Album.alb' PIC_EXCLUDED_FILES=('Default Album.alb', 'Graphics.alb') PREF_DB_FILE_NAME='current_prefs.db' GROUP_INDEX_FILE_NAME='pb/pbgroups_' # Calendar stuff CAL_PATH='sch_event' CAL_INDEX_FILE_NAME=CAL_PATH+'/usr_tsk' CAL_FILE_NAME_PREFIX=CAL_PATH+'/usr_tsk_' CAL_MAX_EVENTS=100 NP_MAX_ENTRIES=30 NP_MAX_LEN=130 NP_PATH=CAL_PATH NP_FILE_NAME_PREFIX=CAL_FILE_NAME_PREFIX # Phonebook stuff PB_PATH='pb' PB_JRNL_FILE_PREFIX=PB_PATH+'/jrnl_' PB_ENTRY_FILE_PREFIX=PB_PATH+'/recs_' PB_MAIN_FILE_PREFIX=PB_PATH+'/main_' PB_WP_CACHE_PATH='cache/pb' PB_WP_CACHE_WIDTH=128 PB_WP_CACHE_HEIGHT=96 PB_MAX_NAME_LEN=32 PB_MAX_EMAIL_LEN=48 PB_MAX_NUMBER_LEN=48 PB_FLG_NONE=0x0000 PB_FLG_NAME=0x0001 PB_FLG_DATE=0x0400 PB_FLG_FAX=0x0080 PB_FLG_CELL=0x0020 PB_FLG_WORK=0x0010 PB_FLG_HOME=0X0008 PB_FLG_EMAIL2=0X0004 PB_FLG_EMAIL=0X0002 PB_FLG_WP=0X8000 PB_FLG_GROUP=0X0800 PB_FLG_CELL2=0X0100 PB_FLG_SPEEDDIAL=0x01 PB_FLG_RINGTONE=0x10 PB_FLG_PRIMARY=0x02 # Samsung command code SS_CMD_SW_VERSION=0 SS_CMD_HW_VERSION=1 SS_CMD_PB_COUNT=2 SS_CMD_PB_VOICEMAIL_READ=5 SS_CMD_PB_VOICEMAIL_WRITE=6 SS_CMD_PB_READ=0x14 SS_CMD_PB_WRITE=0x15 SS_CMD_PB_CLEAR=0x1D SS_CMD_PB_VOICEMAIL_PARAM=0x19 PB_DEFAULT_VOICEMAIL_NUMBER='*86' # Call log/history CL_PATH='clog' CL_PREFIX=CL_PATH+'/clog_' CL_INDEX_FILE=CL_PATH+'/clog_master' CL_MAX_ENTRIES=20 CL_TYPE_INCOMING=1 CL_TYPE_OUTGOING=2 CL_TYPE_MISSED=3 CL_TYPE_DELETED=5 CL_VALID_TYPE=frozenset((CL_TYPE_INCOMING, CL_TYPE_OUTGOING, CL_TYPE_MISSED)) # SMS stuff SMS_PATH='nvm/sms_wp_os' SMS_TXT_TYPE=0x0200 SMS_TYPE_IN=1 SMS_TYPE_SENT=3 SMS_TYPE_DRAFT=4 SMS_VALID_TYPE=(SMS_TYPE_IN, SMS_TYPE_SENT, SMS_TYPE_DRAFT) SMS_FLG1_DEFERREDDEL=0x40 SMS_FLG1_VALIDPERIOD=0x10 SMS_FLG1_HAS40=SMS_FLG1_DEFERREDDEL | SMS_FLG1_VALIDPERIOD SMS_FLG2_CALLBACK=0x40 SMS_FLG2_MSG=0x04 SMS_FLG2_PRIORITY=0x01 SMS_FLG2_SOMETHING=0x08 SMS_STATUS_SENT=0x10 SMS_STATUS_DELIVERED=0x11 SMS_STATUS_READ=0x05 SMS_STATUS_NOTREAD=0x01 SMS_STATUS_LOCKED=0x100 broken_filelist_date=True %} PACKET DefaultResponse: * DATA data PACKET WRingtoneIndexEntry: P STRING name * STRING { 'terminator': None, 'default': '/ff/' } +path_prefix * STRING { 'terminator': None } pathname * STRING { 'terminator': None, 'default': '|2\x0A' } +eor PACKET WRingtoneIndexFile: * LIST { 'elementclass': WRingtoneIndexEntry } +items PACKET RRingtoneIndexEntry: * STRING { 'terminator': 0x7C } pathname * STRING { 'terminator': 0x0A } misc PACKET RRingtoneIndexFile: * LIST { 'elementclass': RRingtoneIndexEntry } +items PACKET WSoundsIndexEntry: P STRING name * STRING { 'terminator': None, 'default': '/ff/' } +path_prefix * STRING { 'terminator': None } pathname * STRING { 'terminator': None, 'default': '|0|7\x0A' } +eor PACKET WSoundsIndexFile: * LIST { 'elementclass': WSoundsIndexEntry } +items PACKET RSoundIndexEntry: * STRING { 'terminator': 0x7C } pathname * STRING { 'terminator': 0x0A } misc PACKET RSoundsIndexFile: * LIST { 'elementclass': RSoundIndexEntry } +items PACKET WPictureIndexEntry: * STRING { 'terminator': None } name * STRING { 'terminator': None, 'default': '|/ff/' } +path_prefix * STRING { 'terminator': None } pathname * STRING { 'terminator': None, 'default': '|0|0|3|>\x0A\xF4' } +eor PACKET WPictureIndexFile: * STRING { 'terminator': None, 'default': '0|/ff/brew/16452/mp/Default Album|\x0A\x0A\xF4' } +header * LIST { 'elementclass': WPictureIndexEntry } +items PACKET RPictureIndexEntry: * STRING { 'terminator': 0x7C } name * STRING { 'terminator': 0x7C } pathname * STRING { 'terminator': 0xF4, 'raiseonunterminatedread': False } misc PACKET RPictureIndexFile: * LIST { 'elementclass': RPictureIndexEntry } +items PACKET -GroupEntry: 1 UINT index 4 DONTCARE 4 DateTime datetime 68 USTRING { 'encoding': ENCODING, 'terminator': 0 } name 2 UINT numofmembers if self.numofmembers: * LIST { 'length': self.numofmembers } members: 2 UINT index PACKET -GroupIndexFile: 1 UINT num_of_entries * LIST { 'elementclass': GroupEntry } +items PACKET CalIndexEntry: 2 UINT { 'default': 0 } +index PACKET CalIndexFile: 2 UINT next_index 12 UNKNOWN { 'pad': 0 } +zero1 2 UINT numofevents 6 UNKNOWN { 'pad': 0 } +zero2 2 UINT numofnotes 2 UNKNOWN { 'pad': 0 } +zero3 2 UINT numofactiveevents 112 UNKNOWN { 'pad': 0 } +zero4 * LIST { 'elementclass': CalIndexEntry, 'length': 103, 'createdefault': True } +events * LIST { 'elementclass': CalIndexEntry, 'length': 30, 'createdefault': True } +notes * LIST { 'elementclass': CalIndexEntry, 'length': 324, 'createdefault': True } +activeevents PACKET CalEntry: 2 UINT titlelen * USTRING { 'sizeinbytes': self.titlelen, 'encoding': ENCODING, 'terminator': None } title 4 DateTime start 4 UNKNOWN { 'pad': 0 } +zero1 4 DateTime { 'default': self.start } +start2 4 UNKNOWN { 'pad': 0 } +zero2 4 ExpiringTime exptime 4 UNKNOWN { 'pad': 0 } +zero3 1 UINT { 'default': 1 } +one 1 UINT repeat 1 UINT { 'default': 3 } +three 1 UINT alarm 1 UINT alert 6 UNKNOWN { 'pad': 0 } +zero4 4 UINT duration 1 UINT timezone 4 DateTime creationtime 4 UNKNOWN { 'pad': 0 } +zero5 4 DateTime modifiedtime 4 UNKNOWN { 'pad': 0 } +zero6 2 UINT ringtonelen * STRING { 'sizeinbytes': self.ringtonelen, 'terminator': None } ringtone 2 UNKNOWN { 'pad': 0 } +zero7 PACKET NotePadEntry: 2 UINT textlen * USTRING { 'terminator': None, 'encoding': ENCODING, 'sizeinbytes': self.textlen } text 4 DateTime creation 4 UNKNOWN { 'pad': 0 } +zero1 4 DateTime { 'default': self.creation } +creation2 14 UNKNOWN { 'pad': 0 } +zero2 1 UINT { 'default': 5 } +five 13 UNKNOWN { 'pad': 0 } +zero3 4 DateTime { 'default': self.creation } +modified 4 UNKNOWN { 'pad': 0 } +zero4 4 DateTime { 'default': self.modified } +modified2 8 UNKNOWN { 'pad': 0 } +zero5 PACKET JournalNumber: 2 UINT index 2 UINT bitmap PACKET JournalSpeeddial: 2 UINT index 2 UINT speeddial 2 UINT bitmap PACKET JournalEntry: P UINT { 'default': 0 } +number_info P UINT { 'default': 0 } +speeddial_info 2 UINT index 1 DATA { 'default': '\x00' } +data1 2 UINT { 'default': self.index-1 } +previndex if self.number_info & PB_FLG_HOME: * JournalNumber home else: 2 UINT { 'default': 0xffff } +nohome if self.number_info & PB_FLG_WORK: * JournalNumber work else: 2 UINT { 'default': 0xffff } +nowork if self.number_info & PB_FLG_CELL: * JournalNumber cell else: 2 UINT { 'default': 0xffff } +nocell 2 UINT { 'default': 0xffff } +data2 if self.number_info & PB_FLG_FAX: * JournalNumber fax else: 2 UINT { 'default': 0xffff } +nofax if self.number_info&PB_FLG_CELL2: * JournalNumber cell2 else: 2 UINT { 'default': 0xffff } +nocell2 if self.speeddial_info & PB_FLG_HOME: * JournalSpeeddial homesd else: 2 UINT { 'default': 0xffff } +nohomesd if self.speeddial_info & PB_FLG_WORK: * JournalSpeeddial worksd else: 2 UINT { 'default': 0xffff } +noworksd if self.speeddial_info&PB_FLG_CELL: * JournalSpeeddial cellsd else: 2 UINT { 'default': 0xffff } +nocellsd 2 UINT { 'default': 0xffff } +data3 if self.speeddial_info&PB_FLG_FAX: * JournalSpeeddial faxsd else: 2 UINT { 'default': 0xffff } +nofaxsd if self.speeddial_info&PB_FLG_CELL2: * JournalSpeeddial cell2sd else: 2 UINT { 'default': 0xffff } +nocell2sd 2 UINT { 'default': self.previndex } +previndex2 2 UINT { 'default': self.previndex } +previndex3 4 DATA { 'default': '\x10\x00\x0C\x04' } +data4 2 UINT { 'default': 0xffff } +email 2 UINT { 'default': 0xffff } +email2 2 UINT { 'default': 0xffff } +wallpaper PACKET JournalRec: 1 UINT { 'default': 1 } +command 2 UINT { 'default': 0 } +blocklen * JournalEntry entry PACKET JournalFile: * LIST { 'elementclass': JournalRec } +items PACKET -NumberEntry: * STRING { 'terminator': None, 'pascal': True } number 1 UINT option if self.has_speeddial: 2 UINT speeddial if self.has_ringtone: * STRING { 'terminator': None, 'pascal': True } ringtone %{ @property def has_speeddial(self): return bool(self.option & PB_FLG_SPEEDDIAL) @property def has_ringtone(self): return bool(self.option & PB_FLG_RINGTONE) @property def is_primary(self): return bool(self.option & PB_FLG_PRIMARY) %} PACKET -PBEntry: 2 UINT info 2 DONTCARE if self.has_name: * USTRING { 'terminator': None, 'encoding': ENCODING, 'pascal': True } name if self.has_mail: * USTRING { 'terminator': None, 'encoding': ENCODING, 'pascal': True } email if self.has_email2: * USTRING { 'terminator': None, 'encoding': ENCODING, 'pascal': True } email2 if self.has_home: * NumberEntry home if self.ihas_work: * NumberEntry work if self.has_cell: * NumberEntry cell if self.has_fax: * NumberEntry fax if self.has_cell2: * NumberEntry cell2 if self.has_date: 4 DateTime datetime if self.has_group: 1 UINT group if self.has_wallpaper: * STRING { 'terminator': None, 'pascal': True } wallpaper 4 UINT wallpaper_range %{ @property def has_name(self): return bool(self.info & PB_FLG_NAME) @property def has_email(self): return bool(self.info & PB_FLG_EMAIL) @property def has_email2(self): return bool(self.info & PB_FLG_EMAIL2) @property def has_home(self): return bool(self.info & PB_FLG_HOME) @property def has_work(self): return bool(self.info & PB_FLG_WORK) @property def has_cell(self): return bool(self.info & PB_FLG_CELL) @property def has_fax(self): return bool(self.info & PB_FLG_FAX) @property def has_cell2(self): return bool(self.info & PB_FLG_CELL2) @property def has_date(self): return bool(self.info & PB_FLG_DATE) @property def has_group(self): return bool(self.info & PB_FLG_GROUP) @property def has_wallpaper(self): return bool(self.info & PB_FLG_WP) %} PACKET -LenEntry: 2 UINT { 'default': 0 } +itemlen PACKET -PBFile: * LIST { 'elementclass': LenEntry, 'length': 8, 'createdefault': True } +lens * LIST { 'elementclass': PBEntry } +items PACKET -PBFileHeader: * LIST { 'elementclass': LenEntry, 'length': 8, 'createdefault': True } +lens PACKET ss_cmd_hdr: 4 UINT { 'default': 0xfa4b } +commandcode 1 UINT command PACKET -ss_cmd_resp: * ss_cmd_hdr cmd_hdr * DATA data PACKET ss_sw_req: * ss_cmd_hdr { 'command': SS_CMD_SW_VERSION } +hdr PACKET -ss_sw_resp: * ss_cmd_hdr hdr * STRING { 'terminator': 0 } sw_version PACKET ss_hw_req: * ss_cmd_hdr { 'command': SS_CMD_HW_VERSION } +hdr PACKET -ss_hw_resp: * ss_cmd_hdr hdr * STRING { 'terminator': 0 } hw_version PACKET ss_pb_count_req: * ss_cmd_hdr { 'command': SS_CMD_PB_COUNT } +hdr PACKET -ss_pb_count_resp: * ss_cmd_hdr hdr 1 DONTCARE 2 UINT count PACKET ss_pb_read_req: * ss_cmd_hdr { 'command': SS_CMD_PB_READ } +hdr 1 DONTCARE + 2 UINT index PACKET -ss_pb_read_resp: * ss_cmd_hdr hdr 1 DONTCARE 2 UINT index 1 DONTCARE * DATA data PACKET ss_pb_voicemail_read_req: * ss_cmd_hdr { 'command': SS_CMD_PB_VOICEMAIL_READ } +hdr 1 UINT { 'constant': SS_CMD_PB_VOICEMAIL_PARAM } +param PACKET -ss_pb_voicemail_resp: * ss_cmd_hdr hdr 1 UINT param * STRING { 'terminator': 0 } number PACKET ss_pb_voicemail_write_req: * ss_cmd_hdr { 'command': SS_CMD_PB_VOICEMAIL_WRITE } +hdr 1 UINT { 'constant': SS_CMD_PB_VOICEMAIL_PARAM } +param * STRING { 'terminator': 0, 'default': PB_DEFAULT_VOICEMAIL_NUMBER } +number PACKET ss_pb_clear_req: * ss_cmd_hdr { 'command': SS_CMD_PB_CLEAR } +hdr PACKET -ss_pb_clear_resp: * ss_cmd_hdr hdr 2 UINT flg PACKET ss_number_entry: * STRING { 'terminator': 0, 'default': '', 'maxsizeinbytes': PB_MAX_NUMBER_LEN, 'raiseontruncate': False } +number 2 UINT { 'default': 0 } +speeddial 1 UINT { 'default': 0 } +primary 8 DONTCARE + * STRING { 'terminator': 0, 'default': '' } +ringtone PACKET ss_pb_entry: * USTRING { 'terminator': 0, 'maxsizeinbytes': PB_MAX_NAME_LEN, 'encoding': ENCODING, 'raiseontruncate': False } name * USTRING { 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False } +email * USTRING { 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False } +email2 4 DONTCARE + * STRING { 'terminator': 0, 'default': '' } +wallpaper 1 DONTCARE + * ss_number_entry +home * ss_number_entry +work * ss_number_entry +cell * ss_number_entry +dummy * ss_number_entry +fax * ss_number_entry +cell2 4 DONTCARE + 1 UINT { 'default': 0 } +group 2 DONTCARE + PACKET ss_pb_write_req: * ss_cmd_hdr { 'command': SS_CMD_PB_WRITE } +hdr 1 UINT { 'default': 0 } +zero * ss_pb_entry entry PACKET ss_pb_write_resp: * ss_cmd_hdr hdr 1 DONTCARE 2 UINT index # Call History PACKET -cl_list: 1 UINT index PACKET -cl_index_file: * LIST { 'length': CL_MAX_ENTRIES, 'elementclass': cl_list } incoming * LIST { 'length': CL_MAX_ENTRIES, 'elementclass': cl_list } outgoing * LIST { 'length': CL_MAX_ENTRIES, 'elementclass': cl_list } missed 111 DONTCARE 4 UINT incoming_count 4 UINT outgoing_count 4 UINT missed_count PACKET -cl_file: 1 UINT cl_type 51 STRING { 'terminator': 0 } number 4 DateTime1 datetime 4 DONTCARE 4 UINT duration %{ @property def valid(self): global CL_VALID_TYPE return bool(self.cl_type in CL_VALID_TYPE and self.number) %} # SMS Stuff PACKET pBOOL: P BOOL value PACKET -sms_header: 2 UINT index 1 UINT msg_len 1 UINT callback_len 1 UINT bitmap1 1 UINT bitmap2 6 DONTCARE 2 UINT body_len 2 UINT file_type 1 UINT msg_type 1 UINT enhance_delivery * pBOOL { 'value': self.file_type==SMS_TXT_TYPE and self.msg_type in SMS_VALID_TYPE } is_txt_msg * pBOOL { 'value': self.msg_type==SMS_TYPE_IN } in_msg * pBOOL { 'value': self.msg_type==SMS_TYPE_SENT } sent_msg * pBOOL { 'value': self.msg_type==SMS_TYPE_DRAFT } draft_msg if self.is_txt_msg.value: * sms_body { 'msg_len': self.msg_len, 'has_callback': self.bitmap2 & SMS_FLG2_CALLBACK, 'has_priority': self.bitmap2 & SMS_FLG2_PRIORITY, 'has_1byte': self.bitmap2 & SMS_FLG2_SOMETHING, 'has_1byte2': self.bitmap2 & SMS_FLG2_MSG, 'has_40bytes': self.bitmap1 & SMS_FLG1_HAS40 } body PACKET -sms_msg_stat_list: 1 UINT status PACKET -sms_datetime_list: 4 DateTime1 datetime 4 DONTCARE PACKET -sms_delivered_datetime: * LIST { 'elementclass': sms_datetime_list, 'length': 10 } datetime 20 DONTCARE PACKET -sms_body: P UINT msg_len P BOOL { 'default': True } +has_callback P BOOL { 'default': False } +has_priority P BOOL { 'default': False } +has_1byte P BOOL { 'default': True } +has_1byte2 P BOOL { 'default': False } +has_40bytes 50 DONTCARE * USTRING { 'sizeinbytes': self.msg_len, 'encoding': ENCODING, 'terminator': None } msg if self.has_callback: 3 UNKNOWN dunno2 1 UINT callback_len * STRING { 'sizeinbytes': self.callback_len, 'terminator': None } callback if self.has_priority: 1 UINT priority if self.has_1byte: 1 DONTCARE 40 DONTCARE 4 DateTime1 datetime 17 DONTCARE 1 UINT addr_len0 1 UINT addr_len1 1 UINT addr_len2 1 UINT addr_len3 1 UINT addr_len4 1 UINT addr_len5 1 UINT addr_len6 1 UINT addr_len7 1 UINT addr_len8 1 UINT addr_len9 if self.addr_len0: * STRING { 'sizeinbytes': self.addr_len0, 'terminator': None } addr0 if self.addr_len1: * STRING { 'sizeinbytes': self.addr_len1, 'terminator': None } addr1 if self.addr_len2: * STRING { 'sizeinbytes': self.addr_len2, 'terminator': None } addr2 if self.addr_len3: * STRING { 'sizeinbytes': self.addr_len3, 'terminator': None } addr3 if self.addr_len4: * STRING { 'sizeinbytes': self.addr_len4, 'terminator': None } addr4 if self.addr_len5: * STRING { 'sizeinbytes': self.addr_len5, 'terminator': None } addr5 if self.addr_len6: * STRING { 'sizeinbytes': self.addr_len6, 'terminator': None } addr6 if self.addr_len7: * STRING { 'sizeinbytes': self.addr_len7, 'terminator': None } addr7 if self.addr_len8: * STRING { 'sizeinbytes': self.addr_len8, 'terminator': None } addr8 if self.addr_len9: * STRING { 'sizeinbytes': self.addr_len9, 'terminator': None } addr9 if not self.has_1byte and self.has_1byte2: 1 DONTCARE if self.has_1byte2: 1 DONTCARE 21 DONTCARE if self.has_40bytes: 40 DONTCARE * LIST { 'elementclass': sms_msg_stat_list, 'length': 10 } msg_stat # too hard to do it here. Will be handled by the phone code ## if self.msg_stat[0].status==SMS_STATUS_DELIVERED: ## 4 DateTime1 delivered_datetime ## 96 UNKNOWN dunno10 ## 4 UINT locked bitpim-1.0.7+dfsg1/src/phones/com_sanyo200.py0000644001616600161660000000464110541672162017026 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id$ """Talk to the Sanyo VI-2300 cell phone""" # my modules import common import p_sanyo200 import com_brew import com_phone import com_sanyo import com_sanyomedia import com_sanyonewer import prototypes # Order is like the PM-8200 numbertypetab=( 'cell', 'home', 'office', 'pager', 'fax', 'data', 'none' ) class Phone(com_sanyonewer.Phone): "Talk to the Sanyo SCP-200 cell phone" desc="SCP-200" FIRST_MEDIA_DIRECTORY=1 LAST_MEDIA_DIRECTORY=1 imagelocations=( # offset, directory #, indexflag, type, maximumentries ) protocolclass=p_sanyo200 serialsname='scp200' builtinringtones=( 'None', 'Vibrate', 'Ringer & Voice', '', '', '', '', '', '', 'Tone 1', 'Tone 2', 'Tone 3', 'Tone 4', 'Tone 5', 'Tone 6', 'Tone 7', 'Tone 8', '', '', '', '', '', '', '', '', '', '', '', '', 'Gymnopedie', 'Hungarian Dance No. 5', 'Dies Irae from Requiem', 'The Moment', 'Asian Jingle', 'Habanera', 'Ska Big Band', 'Asian Melody', 'Clair de Lune', 'Kung-fu') calendar_defaultringtone=4 def __init__(self, logtarget, commport): com_sanyonewer.Phone.__init__(self, logtarget, commport) self.mode=self.MODENONE self.numbertypetab=numbertypetab class Profile(com_sanyonewer.Profile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='SANYO' phone_model='SCP-200/US' WALLPAPER_WIDTH=128 WALLPAPER_HEIGHT=112 OVERSIZE_PERCENTAGE=100 _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # Read sms messages ('todo', 'read', None), # Read todos ) def __init__(self): com_sanyonewer.Profile.__init__(self) self.numbertypetab=numbertypetab bitpim-1.0.7+dfsg1/src/phones/p_samsungsphm300.p0000644001616600161660000002201210723637410017522 0ustar amuamu### BITPIM ### ### Copyright (C) 2007 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_samsungsphm300.p 4473 2007-11-29 22:36:56Z djpham $ %{ # Text in this block is placed in the output file from prototypes import * from prototypes_samsung import * from p_samsung_packet import * NUMPHONENUMBERS=5 NUMPHONEBOOKENTRIES=300 NUMGROUPS=5 MAXNUMBERLEN=32 NUMMEMOENTRIES=9 NUMTODOENTRIES=9 NUMCALENDAREVENTS=70 NUMSMSINENTRIES=211 max_pb_slots=312 max_pb_entries=312 user_pb_entry_range=xrange(1, 301) max_number_entries=312 max_media_index_entries=302 max_group_entries=6 slot_file_name='nvm/nvm/pclink_tbl' pb_file_name='nvm/nvm/dial_tbl' number_file_name='nvm/nvm/dial' ringer_index_file_name='nvm/nvm/name_ring' wallpaper_index_file_name='nvm/nvm/avatar' group_file_name='nvm/nvm/group' camera_dir='cam/jpeg' savedtophone_dir='cam/dldJpeg' camera_index=100 # starting media index for camera images camera_origin='camera-fullsize' savedtophone_index=200 # starting media index for saved-to-phone images savedtophone_origin='camera' ams_index=300 # starting media index for AmsRegistry items # Number type CELLTYPE=1 HOMETYPE=2 WORKTYPE=3 PAGERTYPE=4 OTHERTYPE=5 MAILTYPE=7 URLTYPE=8 # map all UINT fields to lsb version UINT=UINTlsb BOOL=BOOLlsb AMSREGISTRY="ams/AmsRegistry" ENDTRANSACTION="ams/EndTransaction" RINGERPREFIX="ams/Ringers/cnts" WALLPAPERPREFIX="ams/Screen Savers/cnts" FILETYPE_RINGER=12 FILETYPE_WALLPAPER=13 FILETYPE_APP=16 exts={ 'audio/vnd.qcelp': '.qcp', 'audio/midi': '.mid', 'application/x-pmd': '.pmd', 'audio/mpeg': '.mp3', 'image/jpeg': '.jpeg', 'image/png': '.png', 'image/gif': '.gif', 'image/bmp': '.bmp', } origins={ FILETYPE_RINGER: 'ringers', FILETYPE_WALLPAPER: 'images', } %} # Packets describe single line AT responses or commands with no carriage # returns or line feeds. PACKET groupnameentry: * CSVINT gid * CSVSTRING groupname * CSVINT ringtone "Ringtone assignment?" * CSVSTRING {'quotechar': None} dunno2 "A single character C or S" * CSVTIME {'terminator': None} timestamp PACKET groupnameresponse: * CSVSTRING {'quotechar': None, 'terminator': ord(' '), 'constant': '#PBGRR:'} command * groupnameentry entry PACKET pbentry: P BOOL { 'default': False } +writeflg "Set to True when writing to phone" * CSVINT slot "Internal Slot" * CSVINT uslot "User Slot, Speed dial" * CSVINT group * CSVINT {'default': 20} +ringtone * CSVSTRING name * CSVINT speeddial "Which phone number assigned to speed dial uslot" * CSVINT {'default': 0} +dunno1 * LIST {'length': NUMPHONENUMBERS, 'createdefault': True, 'elementclass': phonenumber} +numbers if self.writeflg: * phonenumber +extranumber * CSVSTRING {'quotechar': None, 'default': ""} +dunno3 * CSVSTRING {'quotechar': None, 'default': ""} +dunno4 * CSVSTRING email * CSVSTRING url * CSVSTRING {'quotechar': None, 'default': ""} +birthday * CSVINT {'default': 20} +wallpaper * CSVTIME {'terminator': None, 'default': DateTime.now()+(0,) } +timestamp "Use terminator None for last item" PACKET phonebookslotresponse: * CSVSTRING {'quotechar': None, 'terminator': ord(' '), 'constant': '#PBOKR:'} command * pbentry entry PACKET phonebookslotupdaterequest: * CSVSTRING {'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'} +command * pbentry entry PACKET smsinrequest: * CSVSTRING {'quotechar': None, 'terminator': None, 'default': '#PSRMR='} +command * CSVINT {'terminator': None} slot PACKET smsinresponse: * DATA bytes PACKET fspbslot: 1 UINT { 'default': 0 } +valid "1=valid entry" 2 UINT { 'default': 0 } +pbbook_index "index into pbbook" if self.valid: 2 UINT { 'default': 0x0101 } +c0 4 DateTime { 'default': DateTime.now() } +timestamp "Last modified date/time" else: 6 DATA { 'default': '\x00'*6 } +pad PACKET fspbslots: * LIST { 'length': max_pb_slots, 'elementclass': fspbslot } +slot PACKET fspbentry: 1 UINT { 'default': 0 } +valid "1=valid entry" if self.valid: 2 UINT { 'default': 0x01BF } +c1 else: 2 UINT { 'default': 0 } +c1 2 UINT { 'default': self.mobile_num_index } +main_num_index 2 UINT { 'default': 0 } +mobile_num_index 2 UINT { 'default': 0 } +home_num_index 2 UINT { 'default': 0 } +office_num_index 2 UINT { 'default': 0 } +pager_num_index 2 UINT { 'default': 0 } +fax_num_index 2 UINT { 'default': 0 } +unused_index 2 UINT { 'default': 0 } +email_index 2 UINT { 'default': 0 } +url_index 31 USTRING { 'pascal': True, 'terminator': None, 'default': '' } +name 1 UINT { 'default': 0 } +group_num 22 USTRING { 'pascal': True, 'terminator': None, 'default': '' } +nick 73 USTRING { 'pascal': True, 'terminator': None, 'default': '' } +memo # users see max 72 13 DATA { 'default': '\x00'*13 } +pad PACKET fspbbook: * LIST { 'length': max_pb_entries, 'elementclass': fspbentry, 'createdefault': True } +entry PACKET fsnumber: 2 UINT { 'default': 0 } +valid "1=valid entry" 4 UINT { 'default': 0 } +c0 74 USTRING { 'pascal': True, 'terminator': None, 'default': '' } +name 1 UINT { 'default': 0 } +number_type PACKET fsnumbers: * LIST { 'length': max_number_entries, 'elementclass': fsnumber, 'createdefault': True } +entry PACKET amsregistry: 900 DATA dunno0 * LIST {'length': 320} info: 2 UINT dir_ptr 2 UINT num2 2 UINT name_ptr 2 UINT version_ptr 2 UINT vendor_ptr 2 UINT downloaddomain_ptr 8 DATA num7 2 UINT filetype "12: Ringer, 13 Screen Saver, 15 Apps" 2 DATA num8 2 UINT mimetype_ptr 10 DATA num12 2000 DATA dunno1 23000 DATA strings 4 UINT dunno2 2 UINT nfiles * DATA dunno3 %{ def getstring(self, ptr): # Return the 0-terminated string starting index ptr from field strings try: return self.strings[ptr:self.strings.index('\x00', ptr)] except ValueError: return '' def dir(self, idx): return self.getstring(self.info[idx].dir_ptr) def name(self, idx): return self.getstring(self.info[idx].name_ptr) def mimetype(self, idx): return self.getstring(self.info[idx].mimetype_ptr) def version(self, idx): return self.getstring(self.info[idx].version_ptr) def vendor(self, idx): return self.getstring(self.info[idx].vendor_ptr) def filename(self, idx): # return the file name of this item global exts return self.name(idx)+exts.get(self.mimetype(idx), '') def filepath(self, idx): # return the full pathname of this item return 'ams/'+self.dir(idx) def origin(self, idx): # return the origin based on the file type global origins return origins.get(self.info[idx].filetype, None) %} PACKET CamFile: 4 UINT dunno0 1 UINT dunno1 16 USTRING { 'pascal': True, 'terminator': None} caption 1 UINT dunno2 2 DATA dunno3 4 DateTime datetime 1 UINT dunno4 99 DATA pad * DATA jpeg %{ def _filename(self): return '%(year)04d%(month)02d%(day)02d_%(name)s.jpg'%\ { 'year': self.datetime[0], 'month': self.datetime[1], 'day': self.datetime[2], 'name': self.caption, } filename=property(fget=_filename) def save(self, filename=None): # save the jpeg data to a file return file(filename if filename else self.filename, 'wb').write(self.jpeg) %} PACKET IndexSlot: 1 UINT { 'default': 0 } +valid "=1 if valid slot" 1 UINT { 'default': 0 } +group "Group Index" 1 UINT { 'default': 0 } +index "Media Index" PACKET IndexFile: * LIST { 'elementclass': IndexSlot, 'length': max_media_index_entries, 'createdefault': True } +entry PACKET Group: 1 UINT { 'default': 0 } +num0 1 UINT { 'default': 1 if self.num0 else 0 } +num1 2 UINT { 'default': 0 } +namelen 12 USTRING { 'terminator': None, 'default': '' } +namestr 1 UINT { 'default': 0x30 if self.num0 else 0 } +num5 8 DATA { 'default': '\x00'*8 } +dunno 1 UINT { 'default': 1 if self.num0 else 0 } +nume3 if self.num0: 4 DateTime { 'default': DateTime.now() } +datetime else: 4 UINT { 'default': 0 } +num4 %{ def _get_name(self): return self.namestr[:self.namelen] if self.namelen else "" name=property(fget=_get_name) %} PACKET GroupFile: * LIST { 'elementclass': Group, 'length': max_group_entries, 'createdefault': True } +entry bitpim-1.0.7+dfsg1/src/phones/p_samsungsphn200.p0000644001616600161660000000325210442561507017530 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Stephen A. Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_samsungsphn200.p 3352 2006-06-10 15:20:39Z skyjunky $ %{ """Proposed descriptions of data usign AT commands""" from prototypes import * from p_samsung_packet import * # We use LSB for all integer like fields in diagnostic mode UINT=UINTlsb BOOL=BOOLlsb # NUMPHONEBOOKENTRIES=239 NUMPHONENUMBERS=6 NUMCALENDAREVENTS=70 MAXNUMBERLEN=32 NUMTODOENTRIES=20 NUMGROUPS=4 %} # Packets describe single line AT responses or commands with no carriage # returns or line feeds. PACKET pbentry: P USTRING {'default': ""} +url P CSVDATE {'default': ""} +birthday * CSVINT slot "Internal Slot" * CSVSTRING name * CSVINT {'default': 255} +dunno1 * LIST {'elementclass': phonenumber} +numbers PACKET phonenumber: P BOOL {'default': True} +last_number * CSVINT +numbertype if not self.last_number: * CSVSTRING {'quotechar': None, 'default': ""} +number if self.last_number: * CSVSTRING {'quotechar': None, 'default': "", 'terminator': None} +number PACKET phonebookslotrequest: * CSVSTRING {'quotechar': None, 'terminator': None, 'default': '#PBOKR='} +command * CSVINT {'terminator': None} +slot "Internal Slot" PACKET phonebookslotresponse: * CSVSTRING {'quotechar': None, 'terminator': ord(' '), 'constant': '#PBOKR:'} command * pbentry entry PACKET phonebookslotupdaterequest: * CSVSTRING {'quotechar': None, 'terminator': None, 'default': '#PBOKW='} +command * pbentry entry bitpim-1.0.7+dfsg1/src/phones/p_samsungsphn400.p0000644001616600161660000000415410442561507017534 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_samsungsphn400.p 3352 2006-06-10 15:20:39Z skyjunky $ %{ """Various descriptions of data specific to Sanyo phones""" from prototypes import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb %} PACKET getphonestatus: 1 UINT {'constant': 0x0c} +command PACKET getphoneresponse: * UNKNOWN pad PACKET firmwarerequest: 1 UINT {'constant': 0x00} +command PACKET firmwareresponse: 1 UINT command 11 USTRING {'terminator': None} date1 8 USTRING {'terminator': None} time1 11 USTRING {'terminator': None} date2 8 USTRING {'terminator': None} time2 8 USTRING {'terminator': None} string1 8 UNKNOWN dunno1 PACKET esnrequest: 1 UINT {'constant': 0x01} +command PACKET beginendupdaterequest: 1 UINT {'constant': 0x29} +command 1 UINT beginend PACKET {'readwrite': 0x26} samheader: 1 UINT readwrite 2 UINT attribute PACKET phonebooknamerequest: * samheader {'attribute': 0x026B} +header 1 UINT slot 129 UNKNOWN +pad PACKET phonebookname: 1 UNKNOWN pad1 2 UINT nonzeroifused 2 UINT pspeed * LIST {'length': 7} numbers: 2 UINT pnumber 2 UINT pemail 2 UINT purl 2 UINT dunno2 12 USTRING name 3 UNKNOWN pad2 87 UNKNOWN pad2 2 UINT {'default': 5} sometimesfive PACKET phonebooknameresponse: * samheader header 1 UINT slot * phonebookname entry * UNKNOWN pad PACKET phonebooknumbersrequest: * samheader {'attribute': 0x026A} +header 1 UINT slot 129 UNKNOWN +pad PACKET phonebooknumbers: 2 UNKNOWN pad 1 UINT number_len 32 USTRING {'raiseonunterminatedread': False} number PACKET phonebooknumbersresponse: * samheader header 1 UINT slot * phonebooknumbers entry * UNKNOWN pad PACKET attributerequest: 1 UINT {'constant': 0x26} +command 2 UINT attribute 259 UNKNOWN +pad bitpim-1.0.7+dfsg1/src/phones/com_lgvi5225.py0000644001616600161660000001320310554051740016721 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Stephen A. Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgvi5225.py 3918 2007-01-19 05:15:12Z djpham $ """Communicate with the LG VI5225 cell phone Also known as the LG-VX5400. Operates on STI-Mobile, a virtual carrier reselling Sprint airtime. """ # standard modules import time import cStringIO import sha # my modules import common import copy import p_lgvi5225 import com_lgvx4400 import com_brew import com_phone import com_lg import prototypes class Phone(com_lgvx4400.Phone): "Talk to the LG VI5225 cell phone" desc="LG-VI5225" helpid=None protocolclass=p_lgvi5225 serialsname='lgvi5225' # more VI5225 indices imagelocations=( # offset, index file, files location, type, maximumentries ( 10, "download/dloadindex/brewImageIndex.map", "brew/shared", "images", 30) , ( 0xc8, "download/dloadindex/mmsImageIndex.map", "brew/shared/mms", "mms", 20), ( 0xdc, "download/dloadindex/mmsDrmImageIndex.map", "brew/shared/mms/d", "drm", 20), ) ringtonelocations=( # offset, index file, files location, type, maximumentries ( 50, "download/dloadindex/brewRingerIndex.map", "user/sound/ringer", "ringers", 30), ( 150, "download/dloadindex/mmsRingerIndex.map", "mms/sound", "mms", 20), ( 180, "download/dloadindex/mmsDrmRingerIndex.map", "mms/sound/drm", "drm", 20) ) builtinimages= ('Beach Ball', 'Towerbridge', 'Sunflower', 'Beach', 'Fish', 'Sea', 'Snowman') builtinringtones= ('Ring 1', 'Ring 2', 'Ring 3', 'Ring 4', 'Ring 5', 'Ring 6', 'Annen Polka', 'Beethoven Symphony No. 9', 'Pachelbel Canon', 'Hallelujah', 'La Traviata', 'Leichte Kavallerie Overture', 'Mozart Symphony No.40', 'Bach Minuet', 'Farewell', 'Mozart Piano Sonata', 'Sting', 'Trout', 'Pineapple Rag', 'Latin', 'Carol') def __init__(self, logtarget, commport): com_lgvx4400.Phone.__init__(self,logtarget,commport) self.mode=self.MODENONE # def getfundamentals(self, results): # """Do some test reads.""" def eval_detect_data(self, res): found=False if res.get(self.brew_version_txt_key, None) is not None: found=res[self.brew_version_txt_key][:len(self.my_version_txt)]==self.my_version_txt if found: res['model']=self.my_model res['manufacturer']='LG Electronics Inc' s=res.get(self.esn_file_key, None) if s: res['esn']=self.get_esn(s) my_version_txt='AX545V' my_model='VI5225' parentprofile=com_lgvx4400.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='LG Electronics Inc' phone_model='LG-LX5400V' usbids_straight=( ( 0x1004, 0x6000, 2), )# VID=LG Electronics, PID=LG VX4400/VX6000 -internal USB diagnostics interface usbids_usbtoserial=( ( 0x067b, 0x2303, None), # VID=Prolific, PID=USB to serial ( 0x0403, 0x6001, None), # VID=FTDI, PID=USB to serial ( 0x0731, 0x2003, None), # VID=Susteen, PID=Universal USB to serial ( 0x6547, 0x0232, None), # VID=ArkMicro, PID=USB to serial ) usbids=usbids_straight+usbids_usbtoserial WALLPAPER_WIDTH=120 WALLPAPER_HEIGHT=131 MAX_WALLPAPER_BASENAME_LENGTH=32 WALLPAPER_FILENAME_CHARS="_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ." WALLPAPER_CONVERT_FORMAT="bmp" MAX_RINGTONE_BASENAME_LENGTH=32 RINGTONE_FILENAME_CHARS="_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ." # nb we don't allow save to camera so it isn't listed here imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "mms")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "drm")) def GetImageOrigins(self): return self.imageorigins ringtoneorigins=('ringers', 'mms', 'drm') excluded_ringtone_origins=('mms', 'drm') excluded_wallpaper_origins=('mms', 'drm') # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 120, 'height': 131, 'format': "BMP"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets _supportedsyncs=( #('sms', 'read', None), #('sms', 'write', 'OVERWRITE'), ('phonebook', 'read', None), # all phonebook reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook #('calendar', 'write', 'OVERWRITE'), # only overwriting calendar #('calendar', 'read', None), # all calendar reading #('wallpaper', 'read', None), # all wallpaper reading #('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper #('wallpaper', 'write', 'OVERWRITE'), #('ringtone', 'read', None), # all ringtone reading #('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone #('ringtone', 'write', 'OVERWRITE'), #('memo', 'read', None), # all memo list reading DJP #('memo', 'write', 'OVERWRITE'), # all memo list writing DJP #('call_history', 'read', None), ) def __init__(self): parentprofile.__init__(self) bitpim-1.0.7+dfsg1/src/phones/com_lglx260.py0000644001616600161660000001524311047725144016652 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### Copyright (C) 2005 Simon Capper ### Copyright (C) 2008 Joe Siegrist ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### """Communicate with the LG LX260 cell phone The LX260 is like other LG phones, I got this to import and export phonebook data which is all I care about at the moment, extending should be straightforward """ # standard modules import time import cStringIO import sha # my modules import common import copy import p_brew import p_lglx260 import com_lgvx4400 import com_brew import com_phone import com_lg import prototypes class Phone(com_lgvx4400.Phone): "Talk to the LG LX260 cell phone" desc="LG-LX260" helpid=None protocolclass=p_lglx260 serialsname='lglx260' # more LX260 indices imagelocations=( # offset, index file, files location, type, maximumentries ( 10, "download/dloadindex/brewImageIndex.map", "brew/shared", "images", 30) , ( 0xc8, "download/dloadindex/mmsImageIndex.map", "brew/shared/mms", "mms", 20), ( 0xdc, "download/dloadindex/mmsDrmImageIndex.map", "brew/shared/mms/d", "drm", 20), ( 0x82, None, None, "camera", 20) # nb camera must be last ) ringtonelocations=( # offset, index file, files location, type, maximumentries ( 50, "download/dloadindex/brewRingerIndex.map", "user/sound/ringer", "ringers", 30), ( 150, "download/dloadindex/mmsRingerIndex.map", "mms/sound", "mms", 20), ( 180, "download/dloadindex/mmsDrmRingerIndex.map", "mms/sound/drm", "drm", 20) ) builtinimages= ('Beach Ball', 'Towerbridge', 'Sunflower', 'Beach', 'Fish', 'Sea', 'Snowman') builtinringtones= ('Ring 1', 'Ring 2', 'Ring 3', 'Ring 4', 'Ring 5', 'Ring 6', 'Annen Polka', 'Beethoven Symphony No. 9', 'Pachelbel Canon', 'Hallelujah', 'La Traviata', 'Leichte Kavallerie Overture', 'Mozart Symphony No.40', 'Bach Minuet', 'Farewell', 'Mozart Piano Sonata', 'Sting', 'Trout', 'O solemio', 'Pizzicata Polka', 'Stars and Stripes Forever', 'Pineapple Rag', 'When the Saints Go Marching In', 'Latin', 'Carol 1', 'Carol 2') def __init__(self, logtarget, commport): com_lgvx4400.Phone.__init__(self,logtarget,commport) self.mode=self.MODENONE def getcameraindex(self): index={} return index # this phone lacks groups def getgroups(self, results): g=self.protocolclass.pbgroups() groups={} #for i in range(len(g.groups)): #if len(g.groups[i].name): # sometimes have zero length names #groups[i]={ 'icon': g.groups[i].icon, 'name': g.groups[i].name } #self.log('Getting group: ' +i) results['groups']=groups return groups def getphoneinfo(self, phone_info): self.log('Getting Phone Info') phone_info.model=self.my_model phone_info.manufacturer=Profile.phone_manufacturer phone_info.append('ESN:', self.get_brew_esn()) req=p_brew.firmwarerequest() res=self.sendbrewcommand(req, p_lglx260.firmwareresponse) phone_info.append('Firmware Version:', res.firmware) s=self.getfilecontents('pim/MyInformation.dat') phone_info.append('Phone Number:', s[363:373]) try: dirlisting=self.getfilesystem('', 1) keys = dirlisting.keys() keys.sort() #dirlisting=self.getfilesystem('nvm/') for i in keys: self.log('file: '+ i) #s=self.getfilecontents(i) except com_brew.BrewNoSuchDirectoryException: self.log('no such directory pim/') #self.log(self.getfilecontents('pim/sp_num.dat')) def eval_detect_data(self, res): found=False try: s=self.getfilecontents('brew/version.txt') if s[:5]==self.my_model: found=True res['model']=self.my_model res['manufacturer']='LG Electronics Inc' res['esn'] = self.get_brew_esn() except: pass return my_model='LX260' parentprofile=com_lgvx4400.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='LG Electronics Inc' phone_model='LX260' WALLPAPER_WIDTH=120 WALLPAPER_HEIGHT=131 MAX_WALLPAPER_BASENAME_LENGTH=32 WALLPAPER_FILENAME_CHARS="_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ." WALLPAPER_CONVERT_FORMAT="bmp" MAX_RINGTONE_BASENAME_LENGTH=32 RINGTONE_FILENAME_CHARS="_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ." # nb we don't allow save to camera so it isn't listed here imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "mms")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "drm")) def GetImageOrigins(self): return self.imageorigins ringtoneorigins=('ringers', 'mms', 'drm') excluded_ringtone_origins=('mms', 'drm') excluded_wallpaper_origins=('mms', 'drm') # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 120, 'height': 131, 'format': "BMP"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets _supportedsyncs=( ('sms', 'read', None), ('sms', 'write', 'OVERWRITE'), ('phonebook', 'read', None), # all phonebook reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'read', None), # all ringtone reading ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('memo', 'read', None), # all memo list reading DJP ('memo', 'write', 'OVERWRITE'), # all memo list writing DJP ('call_history', 'read', None), ) def __init__(self): parentprofile.__init__(self) bitpim-1.0.7+dfsg1/src/phones/com_sanyo4900.py0000644001616600161660000000331110232072240017076 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_sanyo4900.py 2319 2005-04-22 03:50:56Z sawecw $ """Talk to the Sanyo SCP-4900 cell phone""" # my modules import time import common import p_sanyo4900 import com_brew import com_phone import com_sanyo import prototypes class Phone(com_sanyo.Phone): "Talk to the Sanyo SCP-4900 cell phone" desc="SCP-4900" protocolclass=p_sanyo4900 serialsname='scp4900' builtinringtones=( 'None', 'Vibrate', 'Ringer & Voice', '', '', '', '', '', '', 'Tone 1', 'Tone 2', 'Tone 3', 'Tone 4', 'Tone 5', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'La Bamba', 'Foster Dreamer', 'Schubert March', 'Mozart Eine Kleine', 'Debussey Arabesq', 'Nedelka', 'Brahms Hungarian', 'Star Spangled Banner', 'Rodeo', 'Birds', 'Toy Box' ) calendar_defaultringtone=0 calendar_tonerange=xrange(100,100) calendar_toneoffset=0 def __init__(self, logtarget, commport): com_sanyo.Phone.__init__(self, logtarget, commport) self.mode=self.MODENONE class Profile(com_sanyo.Profile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='SANYO' phone_model='SCP-4900/US' # GMR: 1.057SP ,10018 WALLPAPER_WIDTH=120 WALLPAPER_HEIGHT=128 OVERSIZE_PERCENTAGE=100 def __init__(self): com_sanyo.Profile.__init__(self) bitpim-1.0.7+dfsg1/src/phones/com_sanyo4920.py0000644001616600161660000000422410645053255017121 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_sanyo4920.py 4302 2007-07-11 04:03:57Z sawecw $ """Talk to the Sanyo RL-4920 cell phone""" # Phone has 50 minute digital voice memo recorder. # Sanyo description says recordings can be downloaded to PC using # data cable. # my modules import common import p_sanyo4920 import com_brew import com_phone import com_sanyo import com_sanyomedia import com_sanyonewer import prototypes # Order is like the PM-8200 numbertypetab=( 'cell', 'home', 'office', 'pager', 'fax', 'data', 'none' ) class Phone(com_sanyonewer.Phone): "Talk to the Sanyo RL-4920 cell phone" desc="SCP-4920" FIRST_MEDIA_DIRECTORY=2 LAST_MEDIA_DIRECTORY=3 imagelocations=( # offset, directory #, indexflag, type, maximumentries ) protocolclass=p_sanyo4920 serialsname='rl4920' builtinringtones=( 'None', 'Vibrate', 'Ringer & Voice', '', '', '', '', '', '', 'Tone 1', 'Tone 2', 'Tone 3', 'Tone 4', 'Tone 5', 'Tone 6', 'Tone 7', 'Tone 8', '', '', '', '', '', '', '', '', '', '', '', '', 'Tschaik.Swanlake', 'Satie Gymnop.#1', 'Bach Air on the G', 'Beethoven Sym.5', 'Greensleeves', 'Johnny Comes..', 'Foster Ky. Home', 'Asian Jingle', 'Disco', 'Toy Box', 'Rodeo' ) calendar_defaultringtone=4 def __init__(self, logtarget, commport): com_sanyonewer.Phone.__init__(self, logtarget, commport) self.mode=self.MODENONE self.numbertypetab=numbertypetab class Profile(com_sanyonewer.Profile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='SANYO' phone_model='SCP-4920/US' WALLPAPER_WIDTH=128 WALLPAPER_HEIGHT=112 OVERSIZE_PERCENTAGE=100 def __init__(self): com_sanyonewer.Profile.__init__(self) self.numbertypetab=numbertypetab bitpim-1.0.7+dfsg1/src/phones/com_sanyo4930.py0000644001616600161660000000413710636115745017130 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_sanyo4930.py 4289 2007-06-20 03:15:49Z sawecw $ """Talk to the Sanyo RL-4930 cell phone""" # Phone has 500 name entries instead of 300. # standard modules import sha # my modules import common import p_sanyo4930 import com_brew import com_phone import com_sanyo import com_sanyomedia import com_sanyonewer import prototypes # Order is like the PM-8200 numbertypetab=( 'cell', 'home', 'office', 'pager', 'fax', 'data', 'none' ) class Phone(com_sanyonewer.Phone): "Talk to the Sanyo RL-4930 cell phone" desc="SCP-4930" FIRST_MEDIA_DIRECTORY=2 LAST_MEDIA_DIRECTORY=5 imagelocations=( # offset, directory #, indexflag, type, maximumentries ) protocolclass=p_sanyo4930 serialsname='rl4930' builtinringtones=( 'None', 'Vibrate', 'Ringer & Voice', '', '', '', '', '', '', 'Tone 1', 'Tone 2', 'Tone 3', 'Tone 4', 'Tone 5', 'Tone 6', 'Tone 7', 'Tone 8', '', '', '', '', '', '', '', '', '', '', '', '', 'Tschaik.Swanlake', 'Satie Gymnop.#1', 'Bach Air on the G', 'Beethoven Sym.5', 'Greensleeves', 'Johnny Comes..', 'Foster Ky. Home', 'Asian Jingle', 'Disco', 'Toy Box', 'Rodeo' ) calendar_defaultringtone=4 def __init__(self, logtarget, commport): com_sanyonewer.Phone.__init__(self, logtarget, commport) self.mode=self.MODENONE self.numbertypetab=numbertypetab class Profile(com_sanyonewer.Profile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='SANYO' phone_model='SCP-4930/US' WALLPAPER_WIDTH=128 WALLPAPER_HEIGHT=112 OVERSIZE_PERCENTAGE=100 def __init__(self): com_sanyonewer.Profile.__init__(self) self.numbertypetab=numbertypetab bitpim-1.0.7+dfsg1/src/phones/com_etsi.py0000644001616600161660000000705310555026112016410 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_etsi.py 3927 2007-01-22 03:15:22Z rogerb $ """Communicate with a GSM phones using AT commands""" # system modules # BitPim modules import com_phone import commport import prototypes import p_etsi class Phone(com_phone.Phone): """ Talk to generic GSM phones """ desc='GSM' protocolclass=p_etsi def __init__(self, logtarget, commport): super(Phone,self).__init__(logtarget, commport) self.mode=self.MODENONE def sendATcommand(self, request, responseclass, ignoreerror=False): """Similar to the sendpbcommand in com_sanyo and com_lg, except that a list of responses is returned, one per line of information returned from the phone""" buffer=prototypes.buffer() request.writetobuffer(buffer, logtitle="GSM sendATcommand") data=buffer.getvalue() try: response_lines=self.comm.sendatcommand(data, ignoreerror=ignoreerror) except commport.ATError: raise except: self.comm.success=False self.mode=self.MODENONE self.raisecommsdnaexception("sending AT command") self.comm.success=True if responseclass is None: return response_lines reslist=[] for line in response_lines: res=responseclass() buffer=prototypes.buffer(line) res.readfrombuffer(buffer, logtitle="GSM receive AT response") reslist.append(res) return reslist def _setmodemodem(self): self.log("_setmodemodem") # Just try waking phone up first try: self.comm.sendatcommand("Z") self.comm.sendatcommand('E0V1') return True except: pass # Should be in modem mode. Wake up the interface for baud in (0, 115200, 19200, 230400): self.log("Baud="+`baud`) if baud: if not self.comm.setbaudrate(baud): continue try: self.comm.sendatcommand("Z") self.comm.sendatcommand('E0V1') return True except: pass return False def get_esn(self): req=self.protocolclass.esnrequest() res=self.sendATcommand(req, self.protocolclass.esnresponse) try: return res[0].esn except: return '' def get_sim_id(self): req=self.protocolclass.SIM_ID_Req() try: res=self.sendATcommand(req, self.protocolclass.single_value_resp) return res[0].value except: return None def get_manufacturer_id(self): return self.sendATcommand(self.protocolclass.manufacturer_id_req(), self.protocolclass.single_value_resp)[0].value def get_model_id(self): return self.sendATcommand(self.protocolclass.model_id_req(), self.protocolclass.single_value_resp)[0].value def get_firmware_version(self): return self.sendATcommand(self.protocolclass.firmware_version_req(), self.protocolclass.single_value_resp)[0].value #------------------------------------------------------------------------------- class Profile(com_phone.Profile): BP_Calendar_Version=3 bitpim-1.0.7+dfsg1/src/phones/com_samsungsphn200.py0000644001616600161660000002752110314666447020254 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_samsungsphn200.py 2533 2005-09-23 02:49:11Z sawecw $ """Communicate with a Samsung SPH-N200""" import sha import re import struct import common import commport import time import p_samsungsphn200 import p_brew import com_brew import com_phone import com_samsung_packet import prototypes numbertypetab=('home','office','cell','pager','fax','none') class Phone(com_samsung_packet.Phone): "Talk to a Samsung SPH-N200 phone" desc="SPH-N200" protocolclass=p_samsungsphn200 serialsname='sphn200' __groups_range=xrange(5) imagelocations=() # offset, index file, files location, type, maximumentries __ams_index_file="ams/AmsRegistry" def __init__(self, logtarget, commport): com_samsung_packet.Phone.__init__(self, logtarget, commport) self.numbertypetab=numbertypetab self.mode=self.MODENONE def getfundamentals(self, results): """Gets information fundamental to interopating with the phone and UI.""" # use a hash of ESN and other stuff (being paranoid) self.log("Retrieving fundamental phone information") self.log("Phone serial number") print "Calling setmode MODEMODEM" self.setmode(self.MODEMODEM) print "Getting serial number" results['uniqueserial']=sha.new(self.get_esn()).hexdigest() self.log("Fundamentals retrieved") return results def _setmodemodem(self): self.log("_setmodemodem") # Just try waking phone up first try: self.comm.sendatcommand("Z") self.comm.sendatcommand('E0V1') return True except: pass # Should be in modem mode. Wake up the interface for baud in (0, 19200, 38400, 115200): self.log("Baud="+`baud`) if baud: if not self.comm.setbaudrate(baud): continue try: self.comm.sendatcommand("Z") self.comm.sendatcommand('E0V1') return True except: pass return False def getphonebook(self, result): """Read the phonebook data.""" pbook={} self.setmode(self.MODEPHONEBOOK) count=0 req=self.protocolclass.phonebookslotrequest() for slot in range(2,self.protocolclass.NUMPHONEBOOKENTRIES+1): req.slot=slot res=self.sendpbcommand(req, self.protocolclass.phonebookslotresponse, fixup=self.pblinerepair) if len(res) > 0: lastname=res[0].entry.name self.log(`slot`+": "+lastname) entry=self.extractphonebookentry(res[0].entry, result) pbook[count]=entry count+=1 self.progress(slot, self.protocolclass.NUMPHONEBOOKENTRIES, lastname) result['phonebook']=pbook return pbook def extractphonebookentry(self, entry, fundamentals): res={} res['serials']=[ {'sourcetype': self.serialsname, 'slot': entry.slot, 'sourceuniqueid': fundamentals['uniqueserial']} ] # only one name res['names']=[ {'full': entry.name} ] res['numbers']=[] secret=0 for i in range(len(entry.numbers)): type = self.numbertypetab[entry.numbers[i].numbertype - 1] numhash = {'number': entry.numbers[i].number, 'type': type } res['numbers'].append(numhash) # Field after each number is secret flag. Setting secret on # phone sets secret flag for every defined phone number res['flags']=[ {'secret': secret} ] return res def savephonebook(self, data): "Saves out the phonebook" self.setmode(self.MODEPHONEBOOK) pb=data['phonebook'] keys=pb.keys() keys.sort() keys=keys[:self.protocolclass.NUMPHONEBOOKENTRIES+1] # # Read the existing phonebook so that we cache birthdays # Erase all entries, being carefull to modify entries with # with URL's first # uslots={} names={} req=self.protocolclass.phonebooksloterase() self.log('Erasing '+self.desc+' phonebook') progressmax=self.protocolclass.NUMPHONEBOOKENTRIES+len(keys) for slot in range(2,self.protocolclass.NUMPHONEBOOKENTRIES+1): req.slot = slot self.progress(slot,progressmax,"Erasing "+`slot`) res=self.sendpbcommand(req, self.protocolclass.phonebookslotupdateresponse) for i in range(len(keys)): slot=keys[i] req=self.protocolclass.phonebookslotupdaterequest() req.entry=self.makeentry(pb[slot],data) self.log('Writing entry '+`slot`+" - "+req.entry.name) self.progress(i+self.protocolclass.NUMPHONEBOOKENTRIES,progressmax,"Writing "+req.entry.name) self.sendpbcommand(req, self.protocolclass.phonebookslotupdateresponse) self.progress(progressmax+1,progressmax+1, "Phone book write completed") return data def makeentry(self, entry, data): e=self.protocolclass.pbentry() for k in entry: # special treatment for lists if k=='numbertypes' or k=='secrets': continue if k=='ringtone': # e.ringtone=self._findmediaindex(data['ringtone-index'], entry['ringtone'], entry['name'], 'ringtone') continue elif k=='wallpaper': # e.wallpaper=self._findmediaindex(data['wallpaper-index'], entry['wallpaper'], entry['name'], 'wallpaper') continue elif k=='numbers': #l=getattr(e,k) nnum=len(entry[k]) for i in range(nnum): enpn=self.protocolclass.phonenumber() if i+1 == nnum: enpn.last_number=True enpn.numbertype=entry['numbertypes'][i]+1 enpn.number=entry[k][i] e.numbers.append(enpn) continue # everything else we just set setattr(e, k, entry[k]) return e getwallpapers=None getringtones=None class Profile(com_samsung_packet.Profile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='SAMSUNG' phone_model='SPH-N200' deviceclasses=("serial",) def __init__(self): com_samsung_packet.Profile.__init__(self) self.numbertypetab=numbertypetab _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ) def convertphonebooktophone(self, helper, data): """Converts the data to what will be used by the phone @param data: contains the dict returned by getfundamentals as well as where the results go""" results={} # find which entries are already known to this phone pb=data['phonebook'] # decorate list with (slot, pbkey) tuples slots=[ (helper.getserial(pb[pbentry].get("serials", []), self.serialsname, data['uniqueserial'], "slot", None), pbentry) for pbentry in pb] slots.sort() # numeric order # make two lists - one contains known slots, one doesn't newones=[(pbentry,slot) for slot,pbentry in slots if slot is None] existing=[(pbentry,slot) for slot,pbentry in slots if slot is not None] uslotsused={} tempslot=0 # Temporarily just pick slots and speed dial in order for pbentry,slot in existing+newones: if len(results)==self.protocolclass.NUMPHONEBOOKENTRIES: break try: e={} # entry out entry=data['phonebook'][pbentry] secret=helper.getflag(entry.get('flags', []), 'secret', False) if secret: secret=1 else: secret=0 # name e['name']=helper.getfullname(entry.get('names', []),1,1,12)[0] cat=helper.makeone(helper.getcategory(entry.get('cagetgories',[]),0,1,12), None) # phone numbers # there must be at least one phone number minnumbers=1 numbers=helper.getnumbers(entry.get('numbers', []),minnumbers,self.protocolclass.NUMPHONENUMBERS) e['numbertypes']=[] e['numbers']=[] e['secrets']=[] unusednumbers=[] # Hold duplicate types here typesused={} defaulttypenum=0 for num in numbers: typename=num['type'] if typesused.has_key(typename): unusednumbers.append(num) continue typesused[typename]=1 for typenum,tnsearch in enumerate(self.numbertypetab): if typename==tnsearch: if defaulttypenum==0: defaulttypenum=typenum number=self.phonize(num['number']) if len(number)>self.protocolclass.MAXNUMBERLEN: # :: TODO:: number is too long and we have to either truncate it or ignore it? number=number[:self.protocolclass.MAXNUMBERLEN] e['numbers'].append(number) if(num.has_key('speeddial')): # Only one number per name can be a speed dial # Should make speed dial be the first that # we come accross e['speeddial']=typenum tryuslot = num['speeddial'] e['numbertypes'].append(typenum) e['secrets'].append(secret) break # Should print to log when a requested speed dial slot is # not available if e.has_key('speeddial'): if tryuslot>=1 and tryuslot<=self.protocolclass.NUMPHONEBOOKENTRIES and not uslotsused.has_key(tryuslot): uslotsused[tryuslot]=1 e['uslot']=tryuslot else: e['speeddial']=defaulttypenum # find the right slot if slot is None or slot<2 or slot>self.protocolclass.NUMPHONEBOOKENTRIES or slot in results: for i in range(2,100000): if i not in results: slot=i break e['slot']=slot results[slot]=e except helper.ConversionFailed: continue # Fill in uslot for entries that don't have it. tryuslot=1 for slot in results.keys(): e=results[slot] if not e.has_key('uslot'): while tryuslot ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lglx570.py 4695 2008-08-20 22:29:12Z djpham $ """Communicate with the LG LX570 (Muziq) cell phone""" import common import com_brew import com_lg import com_lgvx4400 import p_lglx570 import prototypes import helpids import sms #------------------------------------------------------------------------------- parentphone=com_lgvx4400.Phone class Phone(com_brew.RealBrewProtocol2, parentphone): "Talk to the LG LX570 (Muziq) cell phone" desc="LG-LX570" helpid=helpids.ID_PHONE_LGLX570 protocolclass=p_lglx570 serialsname='lglx570' my_model='LX570' builtinringtones=( 'Tone 1', 'Tone 2', 'Tone 3', 'Tone 4', 'Tone 5', 'Tone 6', 'Tone 7', 'Tone 8', 'Tone 9', 'Tone 10', 'Alert 1', 'Alert 2', 'Alert 3', 'Alert 4', 'Alert 5') ringtonelocations=( # offset, index file, files location, type, maximumentries (0x1100, "setas/voicememoRingerIndex.map", "VoiceDB/All/Memos", "voice memo", 35), (0x1200, "setas/mcRingerIndex.map", "melodyComposer", "my melodies", 20), ) builtinimages=() imagelocations=( # offset, index file, files location, type, maximumentries (0x600, "setas/dcamIndex.map", "Dcam/Wallet", "images", 255), ) wallpaperdirs=('Dcam/Review', 'Dcam/Wallet') def __init__(self, logtarget, commport): parentphone.__init__(self, logtarget, commport) # supporting routines for getfundamentals def get_esn(self, data=None): # return the ESN of this phone return self.get_brew_esn() def getgroups(self, result): self.log("Reading group information") _buf=prototypes.buffer(self.getfilecontents2( self.protocolclass.PB_FILENAME, 0x1E000, 2016)) _groups={} _grp=self.protocolclass.pbgroup() while True: _grp.readfrombuffer(_buf) if _grp.valid: _groups[_grp.groupid]={ 'name': _grp.name } else: break result['groups']=_groups return _groups # Media stuff--------------------------------------------------------------- def getwallpaperindices(self, results): # index the list of files in known camera dirs _res={} _idx=1 for _dir in self.wallpaperdirs: for _file in self.listfiles(_dir): _res[_idx]={ 'name': common.basename(_file), 'filename': _file, 'origin': 'images' } _idx+=1 results['wallpaper-index']=_res return results def getwallpapers(self, result): # retrieve all camera images _media={} for _wp in result.get('wallpaper-index', {}).values(): _media[_wp['name']]=self.getfilecontents(_wp['filename'], True) result['wallpapers']=_media return result def getringtoneindices(self, results): return self.getmediaindex(self.builtinringtones, self.ringtonelocations, results, 'ringtone-index') def _fix_melodies_filename(self, name): # the "My Melodies" file name must have '.mid' extension and # no other '.' character. if name[-4:]=='.mid': # name already has the correct extenstion _new_name=name[:-4] else: _new_name=name return _new_name.replace('.', '_')+'.mid' def _update_media_file(self, name, data): # Check the if the size of the media file is different than the data # and rewrite the file if necessary. self.log('Updating media file: %s'%name) _filename='%s/%s'%(self.protocolclass.RT_MC_PATH, name) try: _stat=self.statfile(_filename) except com_brew.BrewNoSuchFileException: _stat=None if _stat and _stat.get('size', None)==len(data): # file size and data size are the same, bail self.log('File %s is unchanged'%_filename) return self.writefile(_filename, data) def saveringtones(self, results, merge): # Saving My Melodies media files to be used as ringtones _media_index=results.get('ringtone-index', {}) _media=results.get('ringtone', {}) # build a dict of my "my melodies" (file) name and data _melodies_data={} for _item in _media.values(): if _item.get('origin', None)=='my melodies': _melodies_data[self._fix_melodies_filename(_item['name'])]=_item['data'] # read the existing index file _indexfile=self.readobject(self.protocolclass.RT_MC_INDEX_FILENAME, self.protocolclass.indexfile, logtitle='Reading MC Index File', uselocalfs=False) # go through the index file and rewrite media files as needed self.log('Updating media files') for _idx in range(_indexfile.numactiveitems): _item=_indexfile.items[_idx] if _item.name and _melodies_data.has_key(_item.name): # check the file size and rewrite the file as needed self._update_media_file(_item.name, _melodies_data[_item.name]) # remove the entry from the dict del _melodies_data[_item.name] # go through the index file and add new items _empty_index=range(_indexfile.numactiveitems, len(_indexfile.items)) _available_media=_melodies_data.keys() self.log('Adding new media files') for _idx, _name in zip(_empty_index, _available_media): # update the index entry _indexfile.items[_idx].name=_name # write out the media file self._update_media_file(_name, _melodies_data[_name]) # update the count _indexfile.numactiveitems+=1 # write the new index file self.writeobject(self.protocolclass.RT_MC_INDEX_FILENAME, _indexfile, logtitle='Writing new MC Index file', uselocalfs=False) # and re-read the index file self.getringtoneindices(results) return results # Phonebook stuff----------------------------------------------------------- def _assignpbtypeandspeeddialsbyposition(self, entry, speeds, res): # numbers res['numbers']=[] for i in range(self.protocolclass.NUMPHONENUMBERS): num=entry.numbers[i].number numtype=entry.numbertypes[i].numbertype if len(num): t=self.protocolclass.numbertypetab[numtype] if t[-1]=='2': t=t[:-1] _numdict={ 'number': num, 'type': t } if entry.speeddials[i].speeddial!=0xff: _numdict['speeddial']=entry.speeddials[i].speeddial res['numbers'].append(_numdict) return res # Copy this from the VX4400 module, with changes to support for # different handling of speed dials data def savephonebook(self, data): "Saves out the phonebook" # we can't save groups progressmax=len(data['phonebook'].keys()) # To write the phone book, we scan through all existing entries # and record their record number and serials. # We then delete any entries that aren't in data # We then write out our records, using overwrite or append # commands as necessary serialupdates=[] existingpbook={} # keep track of the phonebook that is on the phone self.mode=self.MODENONE self.setmode(self.MODEBREW) # see note in getphonebook() for why this is necessary self.setmode(self.MODEPHONEBOOK) # similar loop to reading req=self.protocolclass.pbinforequest() res=self.sendpbcommand(req, self.protocolclass.pbinforesponse) numexistingentries=res.numentries if numexistingentries<0 or numexistingentries>1000: self.log("The phone is lying about how many entries are in the phonebook so we are doing it the hard way") numexistingentries=0 firstserial=None loop=xrange(0,1000) hardway=True else: self.log("There are %d existing entries" % (numexistingentries,)) progressmax+=numexistingentries loop=xrange(0, numexistingentries) hardway=False progresscur=0 # reset cursor self.sendpbcommand(self.protocolclass.pbinitrequest(), self.protocolclass.pbinitresponse) for i in loop: ### Read current entry if hardway: numexistingentries+=1 progressmax+=1 req=self.protocolclass.pbreadentryrequest() res=self.sendpbcommand(req, self.protocolclass.pbreadentryresponse) entry={ 'number': res.entry.entrynumber, 'serial1': res.entry.serial1, 'serial2': res.entry.serial2, 'name': res.entry.name} assert entry['serial1']==entry['serial2'] # always the same self.log("Reading entry "+`i`+" - "+entry['name']) if hardway and firstserial is None: firstserial=res.entry.serial1 existingpbook[i]=entry self.progress(progresscur, progressmax, "existing "+entry['name']) #### Advance to next entry req=self.protocolclass.pbnextentryrequest() res=self.sendpbcommand(req, self.protocolclass.pbnextentryresponse) progresscur+=1 if hardway: # look to see if we have looped if res.serial==firstserial or res.serial==0: break # we have now looped around back to begining # Find entries that have been deleted pbook=data['phonebook'] dellist=[] for i in range(0, numexistingentries): ii=existingpbook[i] serial=ii['serial1'] item=self._findserial(serial, pbook) if item is None: dellist.append(i) progressmax+=len(dellist) # more work to do # Delete those entries for i in dellist: progresscur+=1 numexistingentries-=1 # keep count right ii=existingpbook[i] self.log("Deleting entry "+`i`+" - "+ii['name']) req=self.protocolclass.pbdeleteentryrequest() req.serial1=ii['serial1'] req.serial2=ii['serial2'] req.entrynumber=ii['number'] self.sendpbcommand(req, self.protocolclass.pbdeleteentryresponse) self.progress(progresscur, progressmax, "Deleting "+ii['name']) # also remove them from existingpbook del existingpbook[i] # counter to keep track of record number (otherwise appends don't work) counter=0 # Now rewrite out existing entries keys=existingpbook.keys() existingserials=[] keys.sort() # do in same order as existingpbook for i in keys: progresscur+=1 ii=pbook[self._findserial(existingpbook[i]['serial1'], pbook)] self.log("Rewriting entry "+`i`+" - "+ii['name']) self.progress(progresscur, progressmax, "Rewriting "+ii['name']) entry=self.makeentry(counter, ii, data) counter+=1 existingserials.append(existingpbook[i]['serial1']) req=self.protocolclass.pbupdateentryrequest() req.entry=entry res=self.sendpbcommand(req, self.protocolclass.pbupdateentryresponse) serialupdates.append( ( ii["bitpimserial"], {'sourcetype': self.serialsname, 'serial1': res.serial1, 'serial2': res.serial1, 'sourceuniqueid': data['uniqueserial']}) ) assert ii['serial1']==res.serial1 # serial should stay the same # Finally write out new entries keys=pbook.keys() keys.sort() for i in keys: try: ii=pbook[i] if ii['serial1'] in existingserials: continue # already wrote this one out progresscur+=1 entry=self.makeentry(counter, ii, data) counter+=1 self.log("Appending entry "+ii['name']) self.progress(progresscur, progressmax, "Writing "+ii['name']) req=self.protocolclass.pbappendentryrequest() req.entry=entry res=self.sendpbcommand(req, self.protocolclass.pbappendentryresponse) serialupdates.append( ( ii["bitpimserial"], {'sourcetype': self.serialsname, 'serial1': res.newserial, 'serial2': res.newserial, 'sourceuniqueid': data['uniqueserial']}) ) except: self.log('Failed to write entry: '+ii['name']) if __debug__: raise data["serialupdates"]=serialupdates self.progress(progressmax, progressmax, "Rebooting phone") data["rebootphone"]=True return data def makeentry(self, counter, entry, data): """Creates pbentry object @param counter: The new entry number @param entry: The phonebook object (as returned from convertphonebooktophone) that we are using as the source @param data: The main dictionary, which we use to get access to media indices amongst other things """ e=self.protocolclass.pbentry() e.entrynumber=counter for k in entry: # special treatment for lists if k in ('emails', 'numbers', 'numbertypes', 'speeddials'): l=getattr(e,k) for item in entry[k]: l.append(item) elif k=='ringtone': e.ringtone=self._findmediainindex(data['ringtone-index'], entry['ringtone'], entry['name'], 'ringtone') elif k in e.getfields(): # everything else we just set setattr(e,k,entry[k]) return e # SMS Stuff ---------------------------------------------------------------- def _getquicktext(self): quicks=[] try: sf=self.readobject(self.protocolclass.SMS_CANNED_FILENAME, self.protocolclass.sms_canned_file, logtitle="SMS quicktext file sms/mediacan000.dat", uselocalfs=False) for rec in sf.msgs: if rec.msg: quicks.append({ 'text': rec.msg, 'type': sms.CannedMsgEntry.user_type }) except com_brew.BrewNoSuchFileException: pass # do nothing if file doesn't exist return quicks def _getinboxmessage(self, sf): entry=sms.SMSEntry() entry.folder=entry.Folder_Inbox entry.datetime="%d%02d%02dT%02d%02d%02d" % (sf.GPStime) entry._from=self._getsender(sf.sender, sf.sender_length) entry.subject=sf.subject entry.locked=sf.locked entry.priority=sms.SMSEntry.Priority_Normal entry.read=sf.read entry.text=sf.msg entry.callback=sf.callback return entry def _getoutboxmessage(self, sf): entry=sms.SMSEntry() entry.folder=entry.Folder_Saved if sf.saved \ else entry.Folder_Sent entry.datetime="%d%02d%02dT%02d%02d00" % ((sf.timesent)) # add all the recipients for r in sf.recipients: if r.number: confirmed=(r.status==2) confirmed_date=None if confirmed: confirmed_date="%d%02d%02dT%02d%02d00" % r.time entry.add_recipient(r.number, confirmed, confirmed_date) entry.subject=sf.msg[:28] entry.text=sf.msg entry.priority=entry.Priority_High if sf.priority else \ entry.Priority_Normal entry.locked=sf.locked entry.callback=sf.callback return entry def _readsms(self): res={} # go through the sms directory looking for messages for item in self.listfiles("sms").values(): folder=None for f,pat in self.protocolclass.SMS_PATTERNS.items(): if pat.match(item['name']): folder=f break if folder: buf=prototypes.buffer(self.getfilecontents(item['name'], True)) self.logdata("SMS message file " +item['name'], buf.getdata()) if folder=='Inbox': sf=self.protocolclass.sms_in() sf.readfrombuffer(buf, logtitle="SMS inbox item") entry=self._getinboxmessage(sf) res[entry.id]=entry elif folder=='Sent': sf=self.protocolclass.sms_out() sf.readfrombuffer(buf, logtitle="SMS sent item") entry=self._getoutboxmessage(sf) res[entry.id]=entry return res def _setquicktext(self, result): sf=self.protocolclass.sms_canned_file() quicktext=result.get('canned_msg', [])[:self.protocolclass.SMS_CANNED_MAX_ITEMS] if quicktext: for entry in quicktext: msg_entry=self.protocolclass.sms_quick_text() msg_entry.msg=entry['text'][:self.protocolclass.SMS_CANNED_MAX_LENGTH-1] sf.msgs.append(msg_entry) self.writeobject(self.protocolclass.SMS_CANNED_FILENAME, sf, logtitle="Writing quicktext", uselocalfs=False) #------------------------------------------------------------------------------- parentprofile=com_lgvx4400.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='LX570' # Need to update this WALLPAPER_WIDTH=176 WALLPAPER_HEIGHT=220 # outside LCD: 128x160 imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) def GetImageOrigins(self): return self.imageorigins ringtoneorigins=('my melodies', 'voice memo') excluded_ringtone_origins=('ringers', 'sounds', 'my melodies', 'voice memo') excluded_wallpaper_origins=('images',) # our targets are the same for all origins # Need to work the correct resolutions imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 176, 'height': 220, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", {'width': 128, 'height': 160, 'format': "JPEG"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets def convertphonebooktophone(self, helper, data): """Converts the data to what will be used by the phone @param data: contains the dict returned by getfundamentals as well as where the results go""" results={} self.normalisegroups(helper, data) for pbentry in data['phonebook']: if len(results)==self.protocolclass.NUMPHONEBOOKENTRIES: break e={} # entry out entry=data['phonebook'][pbentry] # entry in try: # serials serial1=helper.getserial(entry.get('serials', []), self.serialsname, data['uniqueserial'], 'serial1', 0) serial2=helper.getserial(entry.get('serials', []), self.serialsname, data['uniqueserial'], 'serial2', serial1) e['serial1']=serial1 e['serial2']=serial2 for ss in entry["serials"]: if ss["sourcetype"]=="bitpim": e['bitpimserial']=ss assert e['bitpimserial'] # name e['name']=helper.getfullname(entry.get('names', []),1,1,22)[0] # categories/groups cat=helper.makeone(helper.getcategory(entry.get('categories', []),0,1,22), None) if cat is None: e['group']=0 else: key,value=self._getgroup(cat, data['groups']) if key is not None: e['group']=key else: # sorry no space for this category e['group']=0 # email addresses emails=helper.getemails(entry.get('emails', []) ,0,self.protocolclass.NUMEMAILS,48) e['emails']=helper.filllist(emails, self.protocolclass.NUMEMAILS, "") # url e['url']=helper.makeone(helper.geturls(entry.get('urls', []), 0,1,48), "") # memo (-1 is to leave space for null terminator - not all software puts it in, but we do) e['memo']=helper.makeone(helper.getmemos(entry.get('memos', []), 0, 1, self.protocolclass.MEMOLENGTH-1), "") # phone numbers # there must be at least one email address or phonenumber minnumbers=1 if len(emails): minnumbers=0 numbers=helper.getnumbers(entry.get('numbers', []),minnumbers,self.protocolclass.NUMPHONENUMBERS) e['numbertypes']=[] e['numbers']=[] e['speeddials']=[] for numindex in range(len(numbers)): num=numbers[numindex] # deal with type b4=len(e['numbertypes']) type=num['type'] for i,t in enumerate(self.protocolclass.numbertypetab): if type==t: # some voodoo to ensure the second home becomes home2 if i in e['numbertypes'] and t[-1]!='2': type+='2' continue e['numbertypes'].append(i) break if t=='none': # conveniently last entry e['numbertypes'].append(i) break if len(e['numbertypes'])==b4: # we couldn't find a type for the number helper.add_error_message('Number %s (%s/%s) not supported and ignored.'% (num['number'], e['name'], num['type'])) continue # deal with number number=self.phonize(num['number']) if len(number)==0: # no actual digits in the number continue if len(number)>48: # get this number from somewhere sensible # ::TODO:: number is too long and we have to either truncate it or ignore it? number=number[:48] # truncate for moment e['numbers'].append(number) # deal with speed dial sd=num.get("speeddial", -1) if self.protocolclass.NUMSPEEDDIALS: if sd>=self.protocolclass.FIRSTSPEEDDIAL and sd<=self.protocolclass.LASTSPEEDDIAL: e['speeddials'].append(sd) else: e['speeddials'].append(0xff) if len(e['numbers']) ### Copyright (C) 2005 Simon Capper ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgvx5200.py 4303 2007-07-13 20:46:53Z djpham $ """Communicate with the LG VX5200 cell phone The code in this file mainly inherits from VX8100 code and then extends where the 5200 has different functionality """ # standard modules import time import cStringIO import sha # my modules import common import commport import copy import com_lgvx4400 import p_brew import p_lgvx5200 import com_lgvx8100 import com_brew import com_phone import com_lg import prototypes import bpcalendar import call_history import sms import memo import helpids class Phone(com_lgvx8100.Phone): "Talk to the LG VX5200 cell phone" desc="LG-VX5200" helpid=helpids.ID_PHONE_LGVX5200 protocolclass=p_lgvx5200 serialsname='lgvx5200' builtinringtones= ('Low Beep Once', 'Low Beeps', 'Loud Beep Once', 'Loud Beeps', 'VZW Default Ringtone') + \ tuple(['Ringtone '+`n` for n in range(1,11)]) + \ ('No Ring',) ringtonelocations= ( # type index-file size-file directory-to-use lowest-index-to-use maximum-entries type-major icon idx_offset ( 'ringers', 'dload/ringtone.dat', '', 'user/sound/ringer', 100, 150, 0x201, 1, 0), ( 'sounds', 'dload/sound.dat', 'dload/soundsize.dat', 'dload/snd', 100, 150, 0x402, 0, 151), ) calendarlocation="sch/schedule.dat" calendarexceptionlocation="sch/schexception.dat" calenderrequiresreboot=1 memolocation="sch/memo.dat" builtinwallpapers = () # none wallpaperlocations= ( ( 'images', 'dload/image.dat', 'dload/imagesize.dat', 'dload/img', 100, 50, 0, 0, 0), ) def __init__(self, logtarget, commport): com_lgvx4400.Phone.__init__(self,logtarget,commport) self.mode=self.MODENONE def __del__(self): pass my_model='VX5200' # Media stuff--------------------------------------------------------------- # Bypassing the 8100/9800 specific stuff def getmedia(self, maps, results, key): return com_lg.LGNewIndexedMedia2.getmedia(self, maps, results, key) def savemedia(self, mediakey, mediaindexkey, maps, results, merge, reindexfunction): return com_lg.LGNewIndexedMedia2.savemedia(self, mediakey, mediaindexkey, maps, results, merge, reindexfunction) parentprofile=com_lgvx8100.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='VX5200' WALLPAPER_WIDTH=275 WALLPAPER_HEIGHT=175 MAX_WALLPAPER_BASENAME_LENGTH=32 WALLPAPER_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_() ." WALLPAPER_CONVERT_FORMAT="jpg" # the 5200 uses "W" for wait in the dialstring, it does not support "T" DIALSTRING_CHARS="[^0-9PW#*]" MAX_RINGTONE_BASENAME_LENGTH=32 RINGTONE_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_() ." # the 5200 doesn't have seperate origins - they are all dumped in "images" imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) def GetImageOrigins(self): return self.imageorigins ringtoneorigins=('ringers', 'sounds') excluded_ringtone_origins=('sounds') # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 275, 'height': 175, 'format': "JPEG"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets def __init__(self): parentprofile.__init__(self) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading ('memo', 'read', None), # all memo list reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('sms', 'write', 'OVERWRITE'), # all SMS list writing ('memo', 'write', 'OVERWRITE'), # all memo list writing ) bitpim-1.0.7+dfsg1/src/phones/com_motov325m.py0000644001616600161660000001710110741762171017223 0ustar amuamu### BITPIM ### ### Copyright (C) 2007 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_motov325m.py 4563 2008-01-11 21:49:45Z djpham $ """Communicate with Motorola phones using AT commands""" import time import common import com_motov3mm as v3mm import com_motov325 as v325 import prototypes import p_motov325 import helpids parentphone=v3mm.Phone class Phone(parentphone): """ Talk to a Motorola V3mM phone""" desc='Moto-V325M' helpid=helpids.ID_PHONE_MOTOV325M protocolclass=p_motov325 serialsname='motov325m' MODEOBEX='modeobex' builtinringtones=( (0, ('Silent',)), (5, ('Vibe Dot', 'Vibe Dash', 'Vibe Dot Dot', 'Vibe Dot Dash', 'Vibe Pulse')), (11, ('Alert', 'Standard', 'Bells', 'Triads', 'Up and Down')), (30, ('Moonlit Haze', 'Nightlife', 'Wind Chime', 'Random', 'Bit & Bytes', 'Door Bell', 'Ding', 'One Moment', 'Provincial', 'Harmonics', 'Interlude', 'Snaggle', 'Cosmic')), ) def _get_del_new_list(self, index_key, media_key, merge, fundamentals, origins): """Return a list of media being deleted and being added""" _index=fundamentals.get(index_key, {}) _media=fundamentals.get(media_key, {}) _index_file_list=[_entry['name'] for _entry in _index.values() \ if _entry.has_key('filename') and \ _entry['filename'].startswith(self.protocolclass.MOTO_SHARED_PATH) and \ _entry.get('origin', None) in origins ] _bp_file_list=[_entry['name'] for _entry in _media.values() \ if _entry.get('origin', None) in origins ] if merge: # just add the new files, don't delete anything _del_list=[] _new_list=_bp_file_list else: # Delete specified files and add everything _del_list=[x for x in _index_file_list if x not in _bp_file_list] _new_list=_bp_file_list return _del_list, _new_list def _add_files(self, index_key, media_key, media_path, new_list, fundamentals): """Add new file using OBEX""" _index=fundamentals.get(index_key, {}) _media=fundamentals.get(media_key, {}) _adding_ringtones=index_key=='ringtone-index' for _file in new_list: _data=self._item_from_index(_file, 'data', _media) if not _data: self.log('Failed to write file %s due to no data'%_file) continue if self._item_from_index(_file, None, _index) is None: # new file _name=_file if _adding_ringtones and \ common.getext(_name).lower()=='mp3': # need to adjust the file name since this model only # accepts qcp and mid files (AFAIK). _name='%s.mid'%common.stripext(_name) _file_name='%(pathname)s/%(filename)s'% \ { 'pathname': media_path, 'filename': _name } try: self.obex.writefile(_file_name, _data) except: self.log('Failed to write OBEX file '+_file_name) if __debug__: raise def getwallpapers(self, fundamentals): """Retrieve wallpaper data""" # The V325 needs some time to switch from BREW back to MODEM mode # without this sleep, the switch will always come back with ERROR self.log('Waiting for the phone to switch back to mode modem') time.sleep(2) self.setmode(self.MODEPHONEBOOK) return parentphone.getwallpapers(self, fundamentals) def getringtones(self, fundamentals): """Retrieve ringtones data""" self.log('Waiting for the phone to switch to MODEM') time.sleep(2) self.setmode(self.MODEPHONEBOOK) self.log('Reading ringtones') _res={} _rt_index=fundamentals.get('ringtone-index', {}) # This model has ringtone files on both the normal dir (shared/audio) # as well as other dirs # 1st, get the BREW files self.setmode(self.MODEBREW) for _entry in _rt_index.values(): if _entry.has_key('filename') and \ not _entry['filename'].startswith(self.protocolclass.RT_PATH): try: _res[_entry['name']]=self.getfilecontents(_entry['filename']) except: self.log('Failed to read media file %s'%_entry['filename']) # Now, get the OBEX One self.setmode(self.MODEOBEX) for _entry in _rt_index.values(): if _entry.has_key('filename') and \ _entry['filename'].startswith(self.protocolclass.RT_PATH): try: _res[_entry['name']]=self.obex.getfilecontents( self.protocolclass.OBEXName(_entry['filename'])) except: self.log('Failed to read media file %s'%_entry['filename']) fundamentals['ringtone']=_res self.setmode(self.MODEMODEM) # The phone will need to be reset (unplugged & replug) after this! fundamentals['clearcomm']=True return fundamentals def saveringtones(self, fundamentals, merge): """Save ringtones to the phone""" self.log('Waiting for the phone to switch back to mode modem') time.sleep(2) parentphone.saveringtones(self, fundamentals, merge) fundamentals['clearcomm']=True return fundamentals def savewallpapers(self, fundamentals, merge): """Save wallpapers to the phone""" self.log('Waiting for the phone to switch back to mode modem') time.sleep(2) self.log('Writing wallpapers to the phone') self.setmode(self.MODEBREW) try: _del_list, _new_list=self._get_del_new_list('wallpaper-index', 'wallpapers', merge, fundamentals, frozenset(['images'])) # replace files self._replace_files('wallpaper-index', 'wallpapers', _new_list, fundamentals) except: if __debug__: self.setmode(self.MODEMODEM) raise self.setmode(self.MODEMODEM) return fundamentals #------------------------------------------------------------------------------- parentprofile=v325.Profile class Profile(parentprofile): serialsname=Phone.serialsname phone_model='V325M' generic_phone_model='Motorola V325M Phone' _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'read', None), # all calendar reading ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('ringtone', 'read', None), # all ringtone reading ('ringtone', 'read', 'EXCLUSIVE'), # all ringtone reading ('ringtone', 'write', 'EXCLUSIVE'), ('ringtone', 'write', None), ('wallpaper', 'read', None), # all wallpaper reading ('wallpaper', 'write', 'OVERWRITE'), ('sms', 'read', None), ) bitpim-1.0.7+dfsg1/src/phones/com_samsungsphn400.py0000644001616600161660000002105610554051740020241 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_samsungsphn400.py 3918 2007-01-19 05:15:12Z djpham $ """Communicate with a Samsung SPH-N400""" # standard modules import sha # Bitpim modules import p_brew import p_samsungsphn400 import com_brew import com_phone import prototypes import common import commport import helpids class N400CommandException(Exception): def __init__(self, errnum, str=None): if str is None: str="N400 Packet Error 0x%02x" % (errnum,) Exception.__init__(self, str) self.errnum=errnum numbertypetab=( 'home', 'office', 'cell', 'pager', 'fax', 'none' ) class Phone(com_phone.Phone,com_brew.BrewProtocol): "Talk to a Samsung SPH-N400 cell phone" desc="SPH-N400" helpid=helpids.ID_PHONE_SAMSUNGOTHERS MODEPHONEBOOK="modephonebook" protocolclass=p_samsungsphn400 serialsname='sphn400' def __init__(self, logtarget, commport): com_phone.Phone.__init__(self, logtarget, commport) com_brew.BrewProtocol.__init__(self) self.mode=self.MODENONE def getfundamentals(self, results): self.log("Retrieving fundamental phone information") self.log("Phone serial number") self.setmode(self.MODEPHONEBOOK) req=p_brew.ESN_req() res=self.sendpbcommand(req, p_brew.ESN_resp) results['uniqueserial']=sha.new('%8.8X' % res.esn).hexdigest() return results def _setmodephonebook(self): req=self.protocolclass.firmwarerequest() respc=self.protocolclass.firmwareresponse for baud in 38400, 57600: if not self.comm.setbaudrate(baud): continue # Perhaps overkill. Will experiment more self.comm.setrts(1) self.comm.setdtr(1) self.comm.setbaudrate(baud) self.comm.setrts(0) self.comm.setdtr(1) self.comm.setbaudrate(baud) self.comm.setrts(0) self.comm.setdtr(0) self.comm.setbaudrate(baud) self.comm.setrts(0) self.comm.setdtr(0) self.comm.setbaudrate(baud) self.comm.setrts(0) self.comm.setdtr(0) try: self.sendpbcommand(req, respc, callsetmode=False) return True except com_phone.modeignoreerrortypes: pass return 0 def sendpbcommand(self, request, responseclass, callsetmode=True, writemode=False, numsendretry=0, returnerror=False): if writemode: numretry=3 else: numretry=0 if callsetmode: self.setmode(self.MODEPHONEBOOK) buffer=prototypes.buffer() request.writetobuffer(buffer, logtitle="N400 phonebook request") data=buffer.getvalue() firsttwo=data[:2] data=common.pppescape(data+common.crcs(data))+common.pppterminator isendretry=numsendretry while isendretry>=0: try: rdata=self.comm.writethenreaduntil(data, False, common.pppterminator, logreaduntilsuccess=False, numfailures=numretry) break except com_phone.modeignoreerrortypes: if isendretry>0: self.log("Resending request packet...") time.sleep(0.3) else: self.comm.success=False self.mode=self.MODENONE self.raisecommsdnaexception("manipulating the phonebook") isendretry-=1 self.comm.success=True origdata=rdata # sometimes there is junk at the beginning, eg if the user # turned off the phone and back on again. So if there is more # than one 7e in the escaped data we should start after the # second to last one d=rdata.rfind(common.pppterminator,0,-1) if d>=0: self.log("Multiple N400 packets in data - taking last one starting at "+`d+1`) self.logdata("Original N400 data", origdata, None) rdata=rdata[d+1:] # turn it back to normal data=common.pppunescape(rdata) # Sometimes there is other crap at the beginning. But it might # be a N400 error byte. So strip off bytes from the beginning # until the crc agrees, or we get to the first two bytes of the # request packet. d=data.find(firsttwo) crc=data[-3:-1] crcok=False for i in range(0,d+1): trydata=data[i:-3] if common.crcs(trydata)==crc: crcok=True break if not crcok: self.logdata("first two",firsttwo, None) self.logdata("Original N400 data", origdata, None) self.logdata("Working on N400 data", data, None) raise common.CommsDataCorruption("N400 packet failed CRC check", self.desc) res=responseclass() if d>0: if d==i: self.log("Junk at beginning of N400 packet, data at "+`d`) self.logdata("Original N400 data", origdata, None) self.logdata("Working on N400 data", data, None) else: if returnerror: res=self.protocolclass.sanyoerror() else: self.log("N400 Error code "+`ord(data[0])`) self.logdata("Samsung phonebook response", data, None) raise N400CommandException(ord(data[0])) data=trydata # parse data buffer=prototypes.buffer(data) res.readfrombuffer(buffer, logtitle="sanyo phonebook response") return res def getphonebook(self, result): pbook={} reqname=self.protocolclass.phonebooknamerequest() reqnumbers=self.protocolclass.phonebooknumbersrequest() count = 0 for i in range(2, 251): reqname.slot=i resname=self.sendpbcommand(reqname, self.protocolclass.phonebooknameresponse) if resname.entry.nonzeroifused: entry={} entry['serials']=[ {'sourcetype': self.serialsname, 'slot': i, 'sourceuniqueid': result['uniqueserial']} ] entry['names']=[{'full': resname.entry.name} ] entry['numbers'] = [] for i in range(7): numptr = resname.entry.numbers[i].pnumber if numptr: reqnumbers.slot=numptr resnumbers=self.sendpbcommand(reqnumbers, self.protocolclass.phonebooknumbersresponse) numhash={'number': resnumbers.entry.number, 'type': numbertypetab[i]} if numptr==resname.entry.pspeed: numhash['speeddial']=i entry['numbers'].append(numhash) if resname.entry.pemail: reqnumbers.slot=resname.entry.pemail resnumbers=self.sendpbcommand(reqnumbers, self.protocolclass.phonebooknumbersresponse) entry['emails']=[{'email': resnumbers.entry.number}] if resname.entry.purl: reqnumbers.slot=resname.entry.purl resnumbers=self.sendpbcommand(reqnumbers, self.protocolclass.phonebooknumbersresponse) entry['urls']=[{'url': resnumbers.entry.number}] self.log("Read entry "+`i`+": "+resname.entry.name) pbook[count]=entry count+=1 result['phonebook']=pbook return result def getcalendar(self, result): pbook={} result['calendar']=pbook return result def getwallpapers(self, results): pass def getringtones(self, results): pass class Profile(com_phone.Profile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='SAMSUNG' phone_model='SPH-N400' usbids_usbtoserial=( ( 0x067b, 0x2303, None), # VID=Prolific, PID=USB to serial ( 0x0403, 0x6001, None), # VID=FTDI, PID=USB to serial ( 0x0731, 0x2003, None), # VID=Susteen, PID=Universal USB to serial ) usbids=usbids_usbtoserial deviceclasses=("serial",) def __init__(self): com_phone.Profile.__init__(self) _supportedsyncs=( ('phonebook', 'read', None), ) bitpim-1.0.7+dfsg1/src/phones/com_lgvx5300.py0000644001616600161660000001644310661214200016732 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Simon Capper ### Copyright (C) 2006 Bart Massey ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgvx5300.py 4360 2007-08-17 03:39:44Z djpham $ """Communicate with the LG VX5300 cell phone For now, this is just a copy of the LG VX8300 stuff with the names changed so that the phone will work. """ # standard modules import time import cStringIO import sha # my modules import common import commport import copy import com_lgvx4400 import p_brew import p_lgvx5300 import com_lgvx8300 import com_brew import com_phone import com_lg import prototypes import bpcalendar import call_history import sms import memo import fileinfo import helpids parentphone=com_lgvx8300.Phone class Phone(parentphone): "Talk to the LG VX5300 cell phone" desc="LG-VX5300" helpid=helpids.ID_PHONE_LGVX5300 protocolclass=p_lgvx5300 serialsname='lgvx5300' my_model='VX5300' external_storage_root='mmc1/' builtinringtones= ('Low Beep Once', 'Low Beeps', 'Loud Beep Once', 'Loud Beeps', 'VZW Default Ringtone') + \ tuple(['Ringtone '+`n` for n in range(1,11)]) + \ ('No Ring',) ringtonelocations= ( # type index file default dir external dir max type Index ( 'ringers', 'dload/myringtone.dat','brew/16452/lk/mr','mmc1/ringers', 100, 0x01, None), ( 'sounds', 'dload/mysound.dat', 'brew/16452/ms', '', 100, 0x02, None), ( 'mp3', 'dload/my_mp3.dat', 'mmc1/my_mp3', '', 100, 0x15, None), ) calendarlocation="sch/schedule.dat" calendarexceptionlocation="sch/schexception.dat" calenderrequiresreboot=1 memolocation="sch/memo.dat" builtinwallpapers = () # none wallpaperlocations= ( # type index file default dir external dir max type Index ( 'images', 'dload/image.dat', 'brew/16452/mp', '', 100, 0x00, None), ( 'video', 'dload/video.dat', 'brew/16452/mf', '', 100, 0x03, None), ) def setDMversion(self): _fw_version=self.get_firmware_version()[-1] # T53VZV04 uses DMv5 self._DMv5=self.my_model=='VX5300' and _fw_version>'3' if self._DMv5: self._timeout = 20 # Fundamentals: # - get_esn - same as LG VX-8300 # - getgroups - same as LG VX-8100 # - getwallpaperindices - LGNewIndexedMedia2 # - getringtoneindices - LGNewIndexedMedia2 # - DM Version - T53VZV01 - T53VZV03: N/A, T53VZV04: 5 parentprofile=com_lgvx8300.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='VX5300' WALLPAPER_WIDTH=275 WALLPAPER_HEIGHT=175 MAX_WALLPAPER_BASENAME_LENGTH=32 WALLPAPER_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_() ." WALLPAPER_CONVERT_FORMAT="jpg" # the 5300 uses "W" for wait in the dialstring, it does not support "T" DIALSTRING_CHARS="[^0-9PW#*]" MAX_RINGTONE_BASENAME_LENGTH=32 RINGTONE_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_() ." imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video")) def GetImageOrigins(self): return self.imageorigins ringtoneorigins=('ringers', 'sounds', 'mp3') excluded_ringtone_origins=('sounds', 'mp3') # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 176, 'height': 184, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", {'width': 96, 'height': 81, 'format': "JPEG"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets def QueryAudio(self, origin, currentextension, afi): # we don't modify any of these if afi.format in ("MIDI", "QCP", "PMD", "WMA"): return currentextension, afi # examine mp3 if afi.format=="MP3": if afi.channels==1 and 8<=afi.bitrate<=64 and 16000<=afi.samplerate<=22050: return currentextension, afi # convert it return ("mp3", fileinfo.AudioFileInfo(afi, **{'format': 'MP3', 'channels': 1, 'bitrate': 32, 'samplerate': 22050})) def __init__(self): parentprofile.__init__(self) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading ## ('memo', 'read', None), # all memo list reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('sms', 'write', 'OVERWRITE'), # all SMS list writing ## ('memo', 'write', 'OVERWRITE'), # all memo list writing ) field_color_data={ 'phonebook': { 'name': { 'first': 1, 'middle': 1, 'last': 1, 'full': 1, 'nickname': 0, 'details': 1 }, 'number': { 'type': 5, 'speeddial': 5, 'number': 5, 'details': 5 }, 'email': 2, 'address': { 'type': 0, 'company': 0, 'street': 0, 'street2': 0, 'city': 0, 'state': 0, 'postalcode': 0, 'country': 0, 'details': 0 }, 'url': 0, 'memo': 0, 'category': 1, 'wallpaper': 0, 'ringtone': 2, 'storage': 0, }, 'calendar': { 'description': True, 'location': False, 'allday': False, 'start': True, 'end': True, 'priority': False, 'alarm': True, 'vibrate': True, 'repeat': True, 'memo': False, 'category': False, 'wallpaper': False, 'ringtone': True, }, 'memo': { 'subject': False, 'date': False, 'secret': False, 'category': False, 'memo': False, }, 'todo': { 'summary': False, 'status': False, 'due_date': False, 'percent_complete': False, 'completion_date': False, 'private': False, 'priority': False, 'category': False, 'memo': False, }, } bitpim-1.0.7+dfsg1/src/phones/p_sanyo6600.py0000644001616600161660000077476310654000503016611 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Sanyo Katana (SCP-6600)""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * from p_sanyo4930 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMPHONEBOOKENTRIES=500 MAXNUMBERS=700 MAXEMAILS=1000 MAXURLS=500 MAXMEMOS=500 MAXADDRESSES=500 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 # Need to check. Is max phone will hold 32/96 or 33/97 MAXNUMBERLEN=48 MAXEMAILLEN=96 MAXURLLEN=96 MAXMEMOLEN=96 HASRINGPICBUF=0 NUMGROUPS=20 NUMPHONENUMBERS=7 NUMEMAILS=2 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=9 class historyresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(historyresponse,self).__init__(**dict) if self.__class__ is historyresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(historyresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(historyresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=historyentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 428}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,historyentry): self.__field_entry=value else: self.__field_entry=historyentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 428}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class historyentry(BaseProtogenClass): __fields=['slot', 'date', 'phonenumlen', 'phonenum', 'name', 'dunno2', 'dunno3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(historyentry,self).__init__(**dict) if self.__class__ is historyentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(historyentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(historyentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_date.writetobuffer(buf) self.__field_phonenumlen.writetobuffer(buf) self.__field_phonenum.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_dunno3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_date=GPSDATE(**{'sizeinbytes': 4}) self.__field_date.readfrombuffer(buf) self.__field_phonenumlen=UINT(**{'sizeinbytes': 1}) self.__field_phonenumlen.readfrombuffer(buf) self.__field_phonenum=USTRING(**{'sizeinbytes': 48, 'raiseonunterminatedread': False}) self.__field_phonenum.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_name.readfrombuffer(buf) self.__field_dunno2=UNKNOWN(**{'sizeinbytes': 1}) self.__field_dunno2.readfrombuffer(buf) self.__field_dunno3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_dunno3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_date(self): return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,GPSDATE): self.__field_date=value else: self.__field_date=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, None) def __getfield_phonenumlen(self): return self.__field_phonenumlen.getvalue() def __setfield_phonenumlen(self, value): if isinstance(value,UINT): self.__field_phonenumlen=value else: self.__field_phonenumlen=UINT(value,**{'sizeinbytes': 1}) def __delfield_phonenumlen(self): del self.__field_phonenumlen phonenumlen=property(__getfield_phonenumlen, __setfield_phonenumlen, __delfield_phonenumlen, None) def __getfield_phonenum(self): return self.__field_phonenum.getvalue() def __setfield_phonenum(self, value): if isinstance(value,USTRING): self.__field_phonenum=value else: self.__field_phonenum=USTRING(value,**{'sizeinbytes': 48, 'raiseonunterminatedread': False}) def __delfield_phonenum(self): del self.__field_phonenum phonenum=property(__getfield_phonenum, __setfield_phonenum, __delfield_phonenum, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UNKNOWN): self.__field_dunno2=value else: self.__field_dunno2=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_dunno3(self): return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,UNKNOWN): self.__field_dunno3=value else: self.__field_dunno3=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('date', self.__field_date, None) yield ('phonenumlen', self.__field_phonenumlen, None) yield ('phonenum', self.__field_phonenum, None) yield ('name', self.__field_name, None) yield ('dunno2', self.__field_dunno2, None) yield ('dunno3', self.__field_dunno3, None) class pbsortbuffer(BaseProtogenClass): "Various arrays for sorting the phone book, speed dial, determining which" __fields=['startcommand', 'bufsize', 'comment', 'groupslotsused', 'pad', 'groupslotusedflags', 'slotsused', 'usedflags', 'speeddialindex', 'nameslotsused', 'nameusedflags', 'sortorder', 'pbfirstletters', 'numslotsused', 'numusedflags', 'emailslotsused', 'emailusedflags', 'urlslotsused', 'urlusedflags', 'num_address', 'addressusedflags', 'num_memo', 'memousedflags', 'junk'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbsortbuffer,self).__init__(**dict) if self.__class__ is pbsortbuffer: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbsortbuffer,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbsortbuffer,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_startcommand except: self.__field_startcommand=UINT(**{'constant': 0x76}) try: self.__field_bufsize except: self.__field_bufsize=UINT(**{'constant': 6144}) try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "sort buffer"}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_groupslotsused.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad.writetobuffer(buf) try: self.__field_groupslotusedflags except: self.__field_groupslotusedflags=LIST(**{'elementclass': _gen_p_sanyo6600_79, 'length': NUMGROUPS, 'createdefault': True}) self.__field_groupslotusedflags.writetobuffer(buf) self.__field_slotsused.writetobuffer(buf) try: self.__field_usedflags except: self.__field_usedflags=LIST(**{'elementclass': _gen_p_sanyo6600_83, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_usedflags.writetobuffer(buf) try: self.__field_speeddialindex except: self.__field_speeddialindex=LIST(**{'elementclass': _gen_p_sanyo6600_85, 'length': _NUMSPEEDDIALS}) self.__field_speeddialindex.writetobuffer(buf) self.__field_nameslotsused.writetobuffer(buf) try: self.__field_nameusedflags except: self.__field_nameusedflags=LIST(**{'elementclass': _gen_p_sanyo6600_89, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_nameusedflags.writetobuffer(buf) try: self.__field_sortorder except: self.__field_sortorder=LIST(**{'elementclass': _gen_p_sanyo6600_91, 'length': NUMPHONEBOOKENTRIES}) self.__field_sortorder.writetobuffer(buf) self.__field_pbfirstletters.writetobuffer(buf) self.__field_numslotsused.writetobuffer(buf) try: self.__field_numusedflags except: self.__field_numusedflags=LIST(**{'elementclass': _gen_p_sanyo6600_96, 'length': MAXNUMBERS, 'createdefault': True}) self.__field_numusedflags.writetobuffer(buf) self.__field_emailslotsused.writetobuffer(buf) try: self.__field_emailusedflags except: self.__field_emailusedflags=LIST(**{'elementclass': _gen_p_sanyo6600_100, 'length': MAXEMAILS, 'createdefault': True}) self.__field_emailusedflags.writetobuffer(buf) self.__field_urlslotsused.writetobuffer(buf) try: self.__field_urlusedflags except: self.__field_urlusedflags=LIST(**{'elementclass': _gen_p_sanyo6600_103, 'length': MAXURLS, 'createdefault': True}) self.__field_urlusedflags.writetobuffer(buf) self.__field_num_address.writetobuffer(buf) try: self.__field_addressusedflags except: self.__field_addressusedflags=LIST(**{'elementclass': _gen_p_sanyo6600_107, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_addressusedflags.writetobuffer(buf) self.__field_num_memo.writetobuffer(buf) try: self.__field_memousedflags except: self.__field_memousedflags=LIST(**{'elementclass': _gen_p_sanyo6600_111, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_memousedflags.writetobuffer(buf) try: self.__field_junk except: self.__field_junk=UNKNOWN(**{'sizeinbytes': 391}) self.__field_junk.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_groupslotsused=UINT(**{'sizeinbytes': 1}) self.__field_groupslotsused.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad.readfrombuffer(buf) self.__field_groupslotusedflags=LIST(**{'elementclass': _gen_p_sanyo6600_79, 'length': NUMGROUPS, 'createdefault': True}) self.__field_groupslotusedflags.readfrombuffer(buf) self.__field_slotsused=UINT(**{'sizeinbytes': 2}) self.__field_slotsused.readfrombuffer(buf) self.__field_usedflags=LIST(**{'elementclass': _gen_p_sanyo6600_83, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_usedflags.readfrombuffer(buf) self.__field_speeddialindex=LIST(**{'elementclass': _gen_p_sanyo6600_85, 'length': _NUMSPEEDDIALS}) self.__field_speeddialindex.readfrombuffer(buf) self.__field_nameslotsused=UINT(**{'sizeinbytes': 2}) self.__field_nameslotsused.readfrombuffer(buf) self.__field_nameusedflags=LIST(**{'elementclass': _gen_p_sanyo6600_89, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_nameusedflags.readfrombuffer(buf) self.__field_sortorder=LIST(**{'elementclass': _gen_p_sanyo6600_91, 'length': NUMPHONEBOOKENTRIES}) self.__field_sortorder.readfrombuffer(buf) self.__field_pbfirstletters=USTRING(**{'terminator': None, 'sizeinbytes': NUMPHONEBOOKENTRIES}) self.__field_pbfirstletters.readfrombuffer(buf) self.__field_numslotsused=UINT(**{'sizeinbytes': 2}) self.__field_numslotsused.readfrombuffer(buf) self.__field_numusedflags=LIST(**{'elementclass': _gen_p_sanyo6600_96, 'length': MAXNUMBERS, 'createdefault': True}) self.__field_numusedflags.readfrombuffer(buf) self.__field_emailslotsused=UINT(**{'sizeinbytes': 2}) self.__field_emailslotsused.readfrombuffer(buf) self.__field_emailusedflags=LIST(**{'elementclass': _gen_p_sanyo6600_100, 'length': MAXEMAILS, 'createdefault': True}) self.__field_emailusedflags.readfrombuffer(buf) self.__field_urlslotsused=UINT(**{'sizeinbytes': 2}) self.__field_urlslotsused.readfrombuffer(buf) self.__field_urlusedflags=LIST(**{'elementclass': _gen_p_sanyo6600_103, 'length': MAXURLS, 'createdefault': True}) self.__field_urlusedflags.readfrombuffer(buf) self.__field_num_address=UINT(**{'sizeinbytes': 2}) self.__field_num_address.readfrombuffer(buf) self.__field_addressusedflags=LIST(**{'elementclass': _gen_p_sanyo6600_107, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_addressusedflags.readfrombuffer(buf) self.__field_num_memo=UINT(**{'sizeinbytes': 2}) self.__field_num_memo.readfrombuffer(buf) self.__field_memousedflags=LIST(**{'elementclass': _gen_p_sanyo6600_111, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_memousedflags.readfrombuffer(buf) self.__field_junk=UNKNOWN(**{'sizeinbytes': 391}) self.__field_junk.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_startcommand(self): return self.__field_startcommand.getvalue() def __setfield_startcommand(self, value): if isinstance(value,UINT): self.__field_startcommand=value else: self.__field_startcommand=UINT(value,**{'constant': 0x76}) def __delfield_startcommand(self): del self.__field_startcommand startcommand=property(__getfield_startcommand, __setfield_startcommand, __delfield_startcommand, "Starting command for R/W buf parts") def __getfield_bufsize(self): return self.__field_bufsize.getvalue() def __setfield_bufsize(self, value): if isinstance(value,UINT): self.__field_bufsize=value else: self.__field_bufsize=UINT(value,**{'constant': 6144}) def __delfield_bufsize(self): del self.__field_bufsize bufsize=property(__getfield_bufsize, __setfield_bufsize, __delfield_bufsize, None) def __getfield_comment(self): try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "sort buffer"}) return self.__field_comment.getvalue() def __setfield_comment(self, value): if isinstance(value,USTRING): self.__field_comment=value else: self.__field_comment=USTRING(value,**{'default': "sort buffer"}) def __delfield_comment(self): del self.__field_comment comment=property(__getfield_comment, __setfield_comment, __delfield_comment, None) def __getfield_groupslotsused(self): return self.__field_groupslotsused.getvalue() def __setfield_groupslotsused(self, value): if isinstance(value,UINT): self.__field_groupslotsused=value else: self.__field_groupslotsused=UINT(value,**{'sizeinbytes': 1}) def __delfield_groupslotsused(self): del self.__field_groupslotsused groupslotsused=property(__getfield_groupslotsused, __setfield_groupslotsused, __delfield_groupslotsused, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 2}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 2}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_groupslotusedflags(self): try: self.__field_groupslotusedflags except: self.__field_groupslotusedflags=LIST(**{'elementclass': _gen_p_sanyo6600_79, 'length': NUMGROUPS, 'createdefault': True}) return self.__field_groupslotusedflags.getvalue() def __setfield_groupslotusedflags(self, value): if isinstance(value,LIST): self.__field_groupslotusedflags=value else: self.__field_groupslotusedflags=LIST(value,**{'elementclass': _gen_p_sanyo6600_79, 'length': NUMGROUPS, 'createdefault': True}) def __delfield_groupslotusedflags(self): del self.__field_groupslotusedflags groupslotusedflags=property(__getfield_groupslotusedflags, __setfield_groupslotusedflags, __delfield_groupslotusedflags, None) def __getfield_slotsused(self): return self.__field_slotsused.getvalue() def __setfield_slotsused(self, value): if isinstance(value,UINT): self.__field_slotsused=value else: self.__field_slotsused=UINT(value,**{'sizeinbytes': 2}) def __delfield_slotsused(self): del self.__field_slotsused slotsused=property(__getfield_slotsused, __setfield_slotsused, __delfield_slotsused, None) def __getfield_usedflags(self): try: self.__field_usedflags except: self.__field_usedflags=LIST(**{'elementclass': _gen_p_sanyo6600_83, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) return self.__field_usedflags.getvalue() def __setfield_usedflags(self, value): if isinstance(value,LIST): self.__field_usedflags=value else: self.__field_usedflags=LIST(value,**{'elementclass': _gen_p_sanyo6600_83, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) def __delfield_usedflags(self): del self.__field_usedflags usedflags=property(__getfield_usedflags, __setfield_usedflags, __delfield_usedflags, None) def __getfield_speeddialindex(self): try: self.__field_speeddialindex except: self.__field_speeddialindex=LIST(**{'elementclass': _gen_p_sanyo6600_85, 'length': _NUMSPEEDDIALS}) return self.__field_speeddialindex.getvalue() def __setfield_speeddialindex(self, value): if isinstance(value,LIST): self.__field_speeddialindex=value else: self.__field_speeddialindex=LIST(value,**{'elementclass': _gen_p_sanyo6600_85, 'length': _NUMSPEEDDIALS}) def __delfield_speeddialindex(self): del self.__field_speeddialindex speeddialindex=property(__getfield_speeddialindex, __setfield_speeddialindex, __delfield_speeddialindex, None) def __getfield_nameslotsused(self): return self.__field_nameslotsused.getvalue() def __setfield_nameslotsused(self, value): if isinstance(value,UINT): self.__field_nameslotsused=value else: self.__field_nameslotsused=UINT(value,**{'sizeinbytes': 2}) def __delfield_nameslotsused(self): del self.__field_nameslotsused nameslotsused=property(__getfield_nameslotsused, __setfield_nameslotsused, __delfield_nameslotsused, "Always seems to be the same. Why duplicated?") def __getfield_nameusedflags(self): try: self.__field_nameusedflags except: self.__field_nameusedflags=LIST(**{'elementclass': _gen_p_sanyo6600_89, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) return self.__field_nameusedflags.getvalue() def __setfield_nameusedflags(self, value): if isinstance(value,LIST): self.__field_nameusedflags=value else: self.__field_nameusedflags=LIST(value,**{'elementclass': _gen_p_sanyo6600_89, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) def __delfield_nameusedflags(self): del self.__field_nameusedflags nameusedflags=property(__getfield_nameusedflags, __setfield_nameusedflags, __delfield_nameusedflags, None) def __getfield_sortorder(self): try: self.__field_sortorder except: self.__field_sortorder=LIST(**{'elementclass': _gen_p_sanyo6600_91, 'length': NUMPHONEBOOKENTRIES}) return self.__field_sortorder.getvalue() def __setfield_sortorder(self, value): if isinstance(value,LIST): self.__field_sortorder=value else: self.__field_sortorder=LIST(value,**{'elementclass': _gen_p_sanyo6600_91, 'length': NUMPHONEBOOKENTRIES}) def __delfield_sortorder(self): del self.__field_sortorder sortorder=property(__getfield_sortorder, __setfield_sortorder, __delfield_sortorder, None) def __getfield_pbfirstletters(self): return self.__field_pbfirstletters.getvalue() def __setfield_pbfirstletters(self, value): if isinstance(value,USTRING): self.__field_pbfirstletters=value else: self.__field_pbfirstletters=USTRING(value,**{'terminator': None, 'sizeinbytes': NUMPHONEBOOKENTRIES}) def __delfield_pbfirstletters(self): del self.__field_pbfirstletters pbfirstletters=property(__getfield_pbfirstletters, __setfield_pbfirstletters, __delfield_pbfirstletters, None) def __getfield_numslotsused(self): return self.__field_numslotsused.getvalue() def __setfield_numslotsused(self, value): if isinstance(value,UINT): self.__field_numslotsused=value else: self.__field_numslotsused=UINT(value,**{'sizeinbytes': 2}) def __delfield_numslotsused(self): del self.__field_numslotsused numslotsused=property(__getfield_numslotsused, __setfield_numslotsused, __delfield_numslotsused, "Number of phone number slots used") def __getfield_numusedflags(self): try: self.__field_numusedflags except: self.__field_numusedflags=LIST(**{'elementclass': _gen_p_sanyo6600_96, 'length': MAXNUMBERS, 'createdefault': True}) return self.__field_numusedflags.getvalue() def __setfield_numusedflags(self, value): if isinstance(value,LIST): self.__field_numusedflags=value else: self.__field_numusedflags=LIST(value,**{'elementclass': _gen_p_sanyo6600_96, 'length': MAXNUMBERS, 'createdefault': True}) def __delfield_numusedflags(self): del self.__field_numusedflags numusedflags=property(__getfield_numusedflags, __setfield_numusedflags, __delfield_numusedflags, None) def __getfield_emailslotsused(self): return self.__field_emailslotsused.getvalue() def __setfield_emailslotsused(self, value): if isinstance(value,UINT): self.__field_emailslotsused=value else: self.__field_emailslotsused=UINT(value,**{'sizeinbytes': 2}) def __delfield_emailslotsused(self): del self.__field_emailslotsused emailslotsused=property(__getfield_emailslotsused, __setfield_emailslotsused, __delfield_emailslotsused, None) def __getfield_emailusedflags(self): try: self.__field_emailusedflags except: self.__field_emailusedflags=LIST(**{'elementclass': _gen_p_sanyo6600_100, 'length': MAXEMAILS, 'createdefault': True}) return self.__field_emailusedflags.getvalue() def __setfield_emailusedflags(self, value): if isinstance(value,LIST): self.__field_emailusedflags=value else: self.__field_emailusedflags=LIST(value,**{'elementclass': _gen_p_sanyo6600_100, 'length': MAXEMAILS, 'createdefault': True}) def __delfield_emailusedflags(self): del self.__field_emailusedflags emailusedflags=property(__getfield_emailusedflags, __setfield_emailusedflags, __delfield_emailusedflags, None) def __getfield_urlslotsused(self): return self.__field_urlslotsused.getvalue() def __setfield_urlslotsused(self, value): if isinstance(value,UINT): self.__field_urlslotsused=value else: self.__field_urlslotsused=UINT(value,**{'sizeinbytes': 2}) def __delfield_urlslotsused(self): del self.__field_urlslotsused urlslotsused=property(__getfield_urlslotsused, __setfield_urlslotsused, __delfield_urlslotsused, None) def __getfield_urlusedflags(self): try: self.__field_urlusedflags except: self.__field_urlusedflags=LIST(**{'elementclass': _gen_p_sanyo6600_103, 'length': MAXURLS, 'createdefault': True}) return self.__field_urlusedflags.getvalue() def __setfield_urlusedflags(self, value): if isinstance(value,LIST): self.__field_urlusedflags=value else: self.__field_urlusedflags=LIST(value,**{'elementclass': _gen_p_sanyo6600_103, 'length': MAXURLS, 'createdefault': True}) def __delfield_urlusedflags(self): del self.__field_urlusedflags urlusedflags=property(__getfield_urlusedflags, __setfield_urlusedflags, __delfield_urlusedflags, None) def __getfield_num_address(self): return self.__field_num_address.getvalue() def __setfield_num_address(self, value): if isinstance(value,UINT): self.__field_num_address=value else: self.__field_num_address=UINT(value,**{'sizeinbytes': 2}) def __delfield_num_address(self): del self.__field_num_address num_address=property(__getfield_num_address, __setfield_num_address, __delfield_num_address, None) def __getfield_addressusedflags(self): try: self.__field_addressusedflags except: self.__field_addressusedflags=LIST(**{'elementclass': _gen_p_sanyo6600_107, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) return self.__field_addressusedflags.getvalue() def __setfield_addressusedflags(self, value): if isinstance(value,LIST): self.__field_addressusedflags=value else: self.__field_addressusedflags=LIST(value,**{'elementclass': _gen_p_sanyo6600_107, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) def __delfield_addressusedflags(self): del self.__field_addressusedflags addressusedflags=property(__getfield_addressusedflags, __setfield_addressusedflags, __delfield_addressusedflags, None) def __getfield_num_memo(self): return self.__field_num_memo.getvalue() def __setfield_num_memo(self, value): if isinstance(value,UINT): self.__field_num_memo=value else: self.__field_num_memo=UINT(value,**{'sizeinbytes': 2}) def __delfield_num_memo(self): del self.__field_num_memo num_memo=property(__getfield_num_memo, __setfield_num_memo, __delfield_num_memo, None) def __getfield_memousedflags(self): try: self.__field_memousedflags except: self.__field_memousedflags=LIST(**{'elementclass': _gen_p_sanyo6600_111, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) return self.__field_memousedflags.getvalue() def __setfield_memousedflags(self, value): if isinstance(value,LIST): self.__field_memousedflags=value else: self.__field_memousedflags=LIST(value,**{'elementclass': _gen_p_sanyo6600_111, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) def __delfield_memousedflags(self): del self.__field_memousedflags memousedflags=property(__getfield_memousedflags, __setfield_memousedflags, __delfield_memousedflags, None) def __getfield_junk(self): try: self.__field_junk except: self.__field_junk=UNKNOWN(**{'sizeinbytes': 391}) return self.__field_junk.getvalue() def __setfield_junk(self, value): if isinstance(value,UNKNOWN): self.__field_junk=value else: self.__field_junk=UNKNOWN(value,**{'sizeinbytes': 391}) def __delfield_junk(self): del self.__field_junk junk=property(__getfield_junk, __setfield_junk, __delfield_junk, None) def iscontainer(self): return True def containerelements(self): yield ('startcommand', self.__field_startcommand, "Starting command for R/W buf parts") yield ('bufsize', self.__field_bufsize, None) yield ('comment', self.__field_comment, None) yield ('groupslotsused', self.__field_groupslotsused, None) yield ('pad', self.__field_pad, None) yield ('groupslotusedflags', self.__field_groupslotusedflags, None) yield ('slotsused', self.__field_slotsused, None) yield ('usedflags', self.__field_usedflags, None) yield ('speeddialindex', self.__field_speeddialindex, None) yield ('nameslotsused', self.__field_nameslotsused, "Always seems to be the same. Why duplicated?") yield ('nameusedflags', self.__field_nameusedflags, None) yield ('sortorder', self.__field_sortorder, None) yield ('pbfirstletters', self.__field_pbfirstletters, None) yield ('numslotsused', self.__field_numslotsused, "Number of phone number slots used") yield ('numusedflags', self.__field_numusedflags, None) yield ('emailslotsused', self.__field_emailslotsused, None) yield ('emailusedflags', self.__field_emailusedflags, None) yield ('urlslotsused', self.__field_urlslotsused, None) yield ('urlusedflags', self.__field_urlusedflags, None) yield ('num_address', self.__field_num_address, None) yield ('addressusedflags', self.__field_addressusedflags, None) yield ('num_memo', self.__field_num_memo, None) yield ('memousedflags', self.__field_memousedflags, None) yield ('junk', self.__field_junk, None) class _gen_p_sanyo6600_79(BaseProtogenClass): 'Anonymous inner class' __fields=['used'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo6600_79,self).__init__(**dict) if self.__class__ is _gen_p_sanyo6600_79: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo6600_79,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo6600_79,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_used=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_used.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_used=UINT(**{'sizeinbytes': 1}) self.__field_used.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_used(self): return self.__field_used.getvalue() def __setfield_used(self, value): if isinstance(value,UINT): self.__field_used=value else: self.__field_used=UINT(value,**{'sizeinbytes': 1}) def __delfield_used(self): del self.__field_used used=property(__getfield_used, __setfield_used, __delfield_used, "1 if slot in use") def iscontainer(self): return True def containerelements(self): yield ('used', self.__field_used, "1 if slot in use") class _gen_p_sanyo6600_83(BaseProtogenClass): 'Anonymous inner class' __fields=['used'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo6600_83,self).__init__(**dict) if self.__class__ is _gen_p_sanyo6600_83: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo6600_83,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo6600_83,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_used=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_used.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_used=UINT(**{'sizeinbytes': 1}) self.__field_used.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_used(self): return self.__field_used.getvalue() def __setfield_used(self, value): if isinstance(value,UINT): self.__field_used=value else: self.__field_used=UINT(value,**{'sizeinbytes': 1}) def __delfield_used(self): del self.__field_used used=property(__getfield_used, __setfield_used, __delfield_used, "1 if slot in use") def iscontainer(self): return True def containerelements(self): yield ('used', self.__field_used, "1 if slot in use") class _gen_p_sanyo6600_85(BaseProtogenClass): 'Anonymous inner class' __fields=['numslot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo6600_85,self).__init__(**dict) if self.__class__ is _gen_p_sanyo6600_85: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo6600_85,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo6600_85,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_numslot=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numslot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numslot=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_numslot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numslot(self): return self.__field_numslot.getvalue() def __setfield_numslot(self, value): if isinstance(value,UINT): self.__field_numslot=value else: self.__field_numslot=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_numslot(self): del self.__field_numslot numslot=property(__getfield_numslot, __setfield_numslot, __delfield_numslot, None) def iscontainer(self): return True def containerelements(self): yield ('numslot', self.__field_numslot, None) class _gen_p_sanyo6600_89(BaseProtogenClass): 'Anonymous inner class' __fields=['used'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo6600_89,self).__init__(**dict) if self.__class__ is _gen_p_sanyo6600_89: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo6600_89,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo6600_89,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_used=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_used.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_used=UINT(**{'sizeinbytes': 1}) self.__field_used.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_used(self): return self.__field_used.getvalue() def __setfield_used(self, value): if isinstance(value,UINT): self.__field_used=value else: self.__field_used=UINT(value,**{'sizeinbytes': 1}) def __delfield_used(self): del self.__field_used used=property(__getfield_used, __setfield_used, __delfield_used, "1 if slot in use") def iscontainer(self): return True def containerelements(self): yield ('used', self.__field_used, "1 if slot in use") class _gen_p_sanyo6600_91(BaseProtogenClass): 'Anonymous inner class' __fields=['pbslot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo6600_91,self).__init__(**dict) if self.__class__ is _gen_p_sanyo6600_91: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo6600_91,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo6600_91,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_pbslot=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pbslot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbslot=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbslot(self): return self.__field_pbslot.getvalue() def __setfield_pbslot(self, value): if isinstance(value,UINT): self.__field_pbslot=value else: self.__field_pbslot=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pbslot(self): del self.__field_pbslot pbslot=property(__getfield_pbslot, __setfield_pbslot, __delfield_pbslot, None) def iscontainer(self): return True def containerelements(self): yield ('pbslot', self.__field_pbslot, None) class _gen_p_sanyo6600_96(BaseProtogenClass): 'Anonymous inner class' __fields=['used'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo6600_96,self).__init__(**dict) if self.__class__ is _gen_p_sanyo6600_96: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo6600_96,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo6600_96,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_used=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_used.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_used=UINT(**{'sizeinbytes': 1}) self.__field_used.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_used(self): return self.__field_used.getvalue() def __setfield_used(self, value): if isinstance(value,UINT): self.__field_used=value else: self.__field_used=UINT(value,**{'sizeinbytes': 1}) def __delfield_used(self): del self.__field_used used=property(__getfield_used, __setfield_used, __delfield_used, "1 if slot in use") def iscontainer(self): return True def containerelements(self): yield ('used', self.__field_used, "1 if slot in use") class _gen_p_sanyo6600_100(BaseProtogenClass): 'Anonymous inner class' __fields=['used'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo6600_100,self).__init__(**dict) if self.__class__ is _gen_p_sanyo6600_100: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo6600_100,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo6600_100,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_used=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_used.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_used=UINT(**{'sizeinbytes': 1}) self.__field_used.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_used(self): return self.__field_used.getvalue() def __setfield_used(self, value): if isinstance(value,UINT): self.__field_used=value else: self.__field_used=UINT(value,**{'sizeinbytes': 1}) def __delfield_used(self): del self.__field_used used=property(__getfield_used, __setfield_used, __delfield_used, "1 if slot in use") def iscontainer(self): return True def containerelements(self): yield ('used', self.__field_used, "1 if slot in use") class _gen_p_sanyo6600_103(BaseProtogenClass): 'Anonymous inner class' __fields=['used'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo6600_103,self).__init__(**dict) if self.__class__ is _gen_p_sanyo6600_103: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo6600_103,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo6600_103,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_used=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_used.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_used=UINT(**{'sizeinbytes': 1}) self.__field_used.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_used(self): return self.__field_used.getvalue() def __setfield_used(self, value): if isinstance(value,UINT): self.__field_used=value else: self.__field_used=UINT(value,**{'sizeinbytes': 1}) def __delfield_used(self): del self.__field_used used=property(__getfield_used, __setfield_used, __delfield_used, "1 if slot in use") def iscontainer(self): return True def containerelements(self): yield ('used', self.__field_used, "1 if slot in use") class _gen_p_sanyo6600_107(BaseProtogenClass): 'Anonymous inner class' __fields=['used'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo6600_107,self).__init__(**dict) if self.__class__ is _gen_p_sanyo6600_107: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo6600_107,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo6600_107,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_used=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_used.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_used=UINT(**{'sizeinbytes': 1}) self.__field_used.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_used(self): return self.__field_used.getvalue() def __setfield_used(self, value): if isinstance(value,UINT): self.__field_used=value else: self.__field_used=UINT(value,**{'sizeinbytes': 1}) def __delfield_used(self): del self.__field_used used=property(__getfield_used, __setfield_used, __delfield_used, "1 if slot in use") def iscontainer(self): return True def containerelements(self): yield ('used', self.__field_used, "1 if slot in use") class _gen_p_sanyo6600_111(BaseProtogenClass): 'Anonymous inner class' __fields=['used'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo6600_111,self).__init__(**dict) if self.__class__ is _gen_p_sanyo6600_111: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo6600_111,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo6600_111,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_used=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_used.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_used=UINT(**{'sizeinbytes': 1}) self.__field_used.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_used(self): return self.__field_used.getvalue() def __setfield_used(self, value): if isinstance(value,UINT): self.__field_used=value else: self.__field_used=UINT(value,**{'sizeinbytes': 1}) def __delfield_used(self): del self.__field_used used=property(__getfield_used, __setfield_used, __delfield_used, "1 if slot in use") def iscontainer(self): return True def containerelements(self): yield ('used', self.__field_used, "1 if slot in use") class cannedmessagerequest(BaseProtogenClass): __fields=['header'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(cannedmessagerequest,self).__init__(**dict) if self.__class__ is cannedmessagerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(cannedmessagerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(cannedmessagerequest,kwargs) if len(args): dict2={'packettype': 0x0e, 'command': 0x5b} dict2.update(kwargs) kwargs=dict2 self.__field_header=sanyoheader(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0e, 'command': 0x5b}) self.__field_header.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x0e, 'command': 0x5b}) self.__field_header.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0e, 'command': 0x5b}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0e, 'command': 0x5b}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) class pbinfo(BaseProtogenClass): __fields=['fa', 'faset', 'byte1', 'byte2', 'byte3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbinfo,self).__init__(**dict) if self.__class__ is pbinfo: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbinfo,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbinfo,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_fa except: self.__field_fa=UINT(**{'sizeinbytes': 2, 'constant': 0x00fa}) self.__field_fa.writetobuffer(buf) try: self.__field_faset except: self.__field_faset=UINT(**{'sizeinbytes': 1, 'default': 0x02}) self.__field_faset.writetobuffer(buf) self.__field_byte1.writetobuffer(buf) self.__field_byte2.writetobuffer(buf) self.__field_byte3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_fa=UINT(**{'sizeinbytes': 2, 'constant': 0x00fa}) self.__field_fa.readfrombuffer(buf) self.__field_faset=UINT(**{'sizeinbytes': 1, 'default': 0x02}) self.__field_faset.readfrombuffer(buf) self.__field_byte1=UINT(**{'sizeinbytes': 1}) self.__field_byte1.readfrombuffer(buf) self.__field_byte2=UINT(**{'sizeinbytes': 1}) self.__field_byte2.readfrombuffer(buf) self.__field_byte3=UINT(**{'sizeinbytes': 2}) self.__field_byte3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_fa(self): try: self.__field_fa except: self.__field_fa=UINT(**{'sizeinbytes': 2, 'constant': 0x00fa}) return self.__field_fa.getvalue() def __setfield_fa(self, value): if isinstance(value,UINT): self.__field_fa=value else: self.__field_fa=UINT(value,**{'sizeinbytes': 2, 'constant': 0x00fa}) def __delfield_fa(self): del self.__field_fa fa=property(__getfield_fa, __setfield_fa, __delfield_fa, None) def __getfield_faset(self): try: self.__field_faset except: self.__field_faset=UINT(**{'sizeinbytes': 1, 'default': 0x02}) return self.__field_faset.getvalue() def __setfield_faset(self, value): if isinstance(value,UINT): self.__field_faset=value else: self.__field_faset=UINT(value,**{'sizeinbytes': 1, 'default': 0x02}) def __delfield_faset(self): del self.__field_faset faset=property(__getfield_faset, __setfield_faset, __delfield_faset, None) def __getfield_byte1(self): return self.__field_byte1.getvalue() def __setfield_byte1(self, value): if isinstance(value,UINT): self.__field_byte1=value else: self.__field_byte1=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte1(self): del self.__field_byte1 byte1=property(__getfield_byte1, __setfield_byte1, __delfield_byte1, None) def __getfield_byte2(self): return self.__field_byte2.getvalue() def __setfield_byte2(self, value): if isinstance(value,UINT): self.__field_byte2=value else: self.__field_byte2=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte2(self): del self.__field_byte2 byte2=property(__getfield_byte2, __setfield_byte2, __delfield_byte2, None) def __getfield_byte3(self): return self.__field_byte3.getvalue() def __setfield_byte3(self, value): if isinstance(value,UINT): self.__field_byte3=value else: self.__field_byte3=UINT(value,**{'sizeinbytes': 2}) def __delfield_byte3(self): del self.__field_byte3 byte3=property(__getfield_byte3, __setfield_byte3, __delfield_byte3, None) def iscontainer(self): return True def containerelements(self): yield ('fa', self.__field_fa, None) yield ('faset', self.__field_faset, None) yield ('byte1', self.__field_byte1, None) yield ('byte2', self.__field_byte2, None) yield ('byte3', self.__field_byte3, None) class contactindexrequest(BaseProtogenClass): __fields=['header', 'slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(contactindexrequest,self).__init__(**dict) if self.__class__ is contactindexrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(contactindexrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(contactindexrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x16, 'command': 0x88}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x16, 'command': 0x88}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x16, 'command': 0x88}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x16, 'command': 0x88}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) class contactindexentry(BaseProtogenClass): __fields=['groupid', 'slot', 'namep', 'numberps', 'emailps', 'urlp', 'addressp', 'memop', 'ringerid', 'pictureid', 'defaultnum', 'secret'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(contactindexentry,self).__init__(**dict) if self.__class__ is contactindexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(contactindexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(contactindexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_groupid.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_namep except: self.__field_namep=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_namep.writetobuffer(buf) try: self.__field_numberps except: self.__field_numberps=LIST(**{'elementclass': _gen_p_sanyo6600_143, 'length': NUMPHONENUMBERS}) self.__field_numberps.writetobuffer(buf) try: self.__field_emailps except: self.__field_emailps=LIST(**{'elementclass': _gen_p_sanyo6600_145, 'length': NUMEMAILS}) self.__field_emailps.writetobuffer(buf) try: self.__field_urlp except: self.__field_urlp=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_urlp.writetobuffer(buf) try: self.__field_addressp except: self.__field_addressp=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_addressp.writetobuffer(buf) try: self.__field_memop except: self.__field_memop=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_memop.writetobuffer(buf) try: self.__field_ringerid except: self.__field_ringerid=UINT(**{'sizeinbytes': 2, 'default': 0xfff0}) self.__field_ringerid.writetobuffer(buf) try: self.__field_pictureid except: self.__field_pictureid=UINT(**{'sizeinbytes': 2, 'default': 0xfffe}) self.__field_pictureid.writetobuffer(buf) try: self.__field_defaultnum except: self.__field_defaultnum=UINT(**{'sizeinbytes': 2, 'default': 0}) self.__field_defaultnum.writetobuffer(buf) try: self.__field_secret except: self.__field_secret=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_secret.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_groupid=UINT(**{'sizeinbytes': 1}) self.__field_groupid.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_namep=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_namep.readfrombuffer(buf) self.__field_numberps=LIST(**{'elementclass': _gen_p_sanyo6600_143, 'length': NUMPHONENUMBERS}) self.__field_numberps.readfrombuffer(buf) self.__field_emailps=LIST(**{'elementclass': _gen_p_sanyo6600_145, 'length': NUMEMAILS}) self.__field_emailps.readfrombuffer(buf) self.__field_urlp=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_urlp.readfrombuffer(buf) self.__field_addressp=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_addressp.readfrombuffer(buf) self.__field_memop=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_memop.readfrombuffer(buf) self.__field_ringerid=UINT(**{'sizeinbytes': 2, 'default': 0xfff0}) self.__field_ringerid.readfrombuffer(buf) self.__field_pictureid=UINT(**{'sizeinbytes': 2, 'default': 0xfffe}) self.__field_pictureid.readfrombuffer(buf) self.__field_defaultnum=UINT(**{'sizeinbytes': 2, 'default': 0}) self.__field_defaultnum.readfrombuffer(buf) self.__field_secret=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_secret.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_groupid(self): return self.__field_groupid.getvalue() def __setfield_groupid(self, value): if isinstance(value,UINT): self.__field_groupid=value else: self.__field_groupid=UINT(value,**{'sizeinbytes': 1}) def __delfield_groupid(self): del self.__field_groupid groupid=property(__getfield_groupid, __setfield_groupid, __delfield_groupid, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_namep(self): try: self.__field_namep except: self.__field_namep=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_namep.getvalue() def __setfield_namep(self, value): if isinstance(value,UINT): self.__field_namep=value else: self.__field_namep=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_namep(self): del self.__field_namep namep=property(__getfield_namep, __setfield_namep, __delfield_namep, None) def __getfield_numberps(self): try: self.__field_numberps except: self.__field_numberps=LIST(**{'elementclass': _gen_p_sanyo6600_143, 'length': NUMPHONENUMBERS}) return self.__field_numberps.getvalue() def __setfield_numberps(self, value): if isinstance(value,LIST): self.__field_numberps=value else: self.__field_numberps=LIST(value,**{'elementclass': _gen_p_sanyo6600_143, 'length': NUMPHONENUMBERS}) def __delfield_numberps(self): del self.__field_numberps numberps=property(__getfield_numberps, __setfield_numberps, __delfield_numberps, None) def __getfield_emailps(self): try: self.__field_emailps except: self.__field_emailps=LIST(**{'elementclass': _gen_p_sanyo6600_145, 'length': NUMEMAILS}) return self.__field_emailps.getvalue() def __setfield_emailps(self, value): if isinstance(value,LIST): self.__field_emailps=value else: self.__field_emailps=LIST(value,**{'elementclass': _gen_p_sanyo6600_145, 'length': NUMEMAILS}) def __delfield_emailps(self): del self.__field_emailps emailps=property(__getfield_emailps, __setfield_emailps, __delfield_emailps, None) def __getfield_urlp(self): try: self.__field_urlp except: self.__field_urlp=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_urlp.getvalue() def __setfield_urlp(self, value): if isinstance(value,UINT): self.__field_urlp=value else: self.__field_urlp=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_urlp(self): del self.__field_urlp urlp=property(__getfield_urlp, __setfield_urlp, __delfield_urlp, None) def __getfield_addressp(self): try: self.__field_addressp except: self.__field_addressp=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_addressp.getvalue() def __setfield_addressp(self, value): if isinstance(value,UINT): self.__field_addressp=value else: self.__field_addressp=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_addressp(self): del self.__field_addressp addressp=property(__getfield_addressp, __setfield_addressp, __delfield_addressp, None) def __getfield_memop(self): try: self.__field_memop except: self.__field_memop=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_memop.getvalue() def __setfield_memop(self, value): if isinstance(value,UINT): self.__field_memop=value else: self.__field_memop=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_memop(self): del self.__field_memop memop=property(__getfield_memop, __setfield_memop, __delfield_memop, None) def __getfield_ringerid(self): try: self.__field_ringerid except: self.__field_ringerid=UINT(**{'sizeinbytes': 2, 'default': 0xfff0}) return self.__field_ringerid.getvalue() def __setfield_ringerid(self, value): if isinstance(value,UINT): self.__field_ringerid=value else: self.__field_ringerid=UINT(value,**{'sizeinbytes': 2, 'default': 0xfff0}) def __delfield_ringerid(self): del self.__field_ringerid ringerid=property(__getfield_ringerid, __setfield_ringerid, __delfield_ringerid, None) def __getfield_pictureid(self): try: self.__field_pictureid except: self.__field_pictureid=UINT(**{'sizeinbytes': 2, 'default': 0xfffe}) return self.__field_pictureid.getvalue() def __setfield_pictureid(self, value): if isinstance(value,UINT): self.__field_pictureid=value else: self.__field_pictureid=UINT(value,**{'sizeinbytes': 2, 'default': 0xfffe}) def __delfield_pictureid(self): del self.__field_pictureid pictureid=property(__getfield_pictureid, __setfield_pictureid, __delfield_pictureid, None) def __getfield_defaultnum(self): try: self.__field_defaultnum except: self.__field_defaultnum=UINT(**{'sizeinbytes': 2, 'default': 0}) return self.__field_defaultnum.getvalue() def __setfield_defaultnum(self, value): if isinstance(value,UINT): self.__field_defaultnum=value else: self.__field_defaultnum=UINT(value,**{'sizeinbytes': 2, 'default': 0}) def __delfield_defaultnum(self): del self.__field_defaultnum defaultnum=property(__getfield_defaultnum, __setfield_defaultnum, __delfield_defaultnum, None) def __getfield_secret(self): try: self.__field_secret except: self.__field_secret=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_secret.getvalue() def __setfield_secret(self, value): if isinstance(value,UINT): self.__field_secret=value else: self.__field_secret=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_secret(self): del self.__field_secret secret=property(__getfield_secret, __setfield_secret, __delfield_secret, None) def iscontainer(self): return True def containerelements(self): yield ('groupid', self.__field_groupid, None) yield ('slot', self.__field_slot, None) yield ('namep', self.__field_namep, None) yield ('numberps', self.__field_numberps, None) yield ('emailps', self.__field_emailps, None) yield ('urlp', self.__field_urlp, None) yield ('addressp', self.__field_addressp, None) yield ('memop', self.__field_memop, None) yield ('ringerid', self.__field_ringerid, None) yield ('pictureid', self.__field_pictureid, None) yield ('defaultnum', self.__field_defaultnum, None) yield ('secret', self.__field_secret, None) class _gen_p_sanyo6600_143(BaseProtogenClass): 'Anonymous inner class' __fields=['slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo6600_143,self).__init__(**dict) if self.__class__ is _gen_p_sanyo6600_143: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo6600_143,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo6600_143,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_slot=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) class _gen_p_sanyo6600_145(BaseProtogenClass): 'Anonymous inner class' __fields=['slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo6600_145,self).__init__(**dict) if self.__class__ is _gen_p_sanyo6600_145: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo6600_145,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo6600_145,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_slot=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) class contactindexresponse(BaseProtogenClass): __fields=['header', 'slot', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(contactindexresponse,self).__init__(**dict) if self.__class__ is contactindexresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(contactindexresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(contactindexresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_entry=contactindexentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,contactindexentry): self.__field_entry=value else: self.__field_entry=contactindexentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class contactindexupdaterequest(BaseProtogenClass): __fields=['header', 'slot', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(contactindexupdaterequest,self).__init__(**dict) if self.__class__ is contactindexupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(contactindexupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(contactindexupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x16, 'command': 0x88}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_entry except: self.__field_entry=contactindexentry() self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyowriteheader(**{'packettype': 0x16, 'command': 0x88}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_entry=contactindexentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x16, 'command': 0x88}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyowriteheader): self.__field_header=value else: self.__field_header=sanyowriteheader(value,**{'packettype': 0x16, 'command': 0x88}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=contactindexentry() return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,contactindexentry): self.__field_entry=value else: self.__field_entry=contactindexentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) class numberrequest(BaseProtogenClass): __fields=['header', 'slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(numberrequest,self).__init__(**dict) if self.__class__ is numberrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(numberrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(numberrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x16, 'command': 0x8f}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x16, 'command': 0x8f}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x16, 'command': 0x8f}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x16, 'command': 0x8f}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) class numberentry(BaseProtogenClass): __fields=['contactp', 'numberlen', 'number', 'pad', 'numbertype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(numberentry,self).__init__(**dict) if self.__class__ is numberentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(numberentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(numberentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_contactp.writetobuffer(buf) self.__field_numberlen.writetobuffer(buf) try: self.__field_number except: self.__field_number=USTRING(**{'sizeinbytes': 48, 'default': "", 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_number.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad.writetobuffer(buf) self.__field_numbertype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_contactp=UINT(**{'sizeinbytes': 2}) self.__field_contactp.readfrombuffer(buf) self.__field_numberlen=UINT(**{'sizeinbytes': 1}) self.__field_numberlen.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 48, 'default': "", 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_number.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad.readfrombuffer(buf) self.__field_numbertype=UINT(**{'sizeinbytes': 1}) self.__field_numbertype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_contactp(self): return self.__field_contactp.getvalue() def __setfield_contactp(self, value): if isinstance(value,UINT): self.__field_contactp=value else: self.__field_contactp=UINT(value,**{'sizeinbytes': 2}) def __delfield_contactp(self): del self.__field_contactp contactp=property(__getfield_contactp, __setfield_contactp, __delfield_contactp, "Pointer to contact number belongs") def __getfield_numberlen(self): return self.__field_numberlen.getvalue() def __setfield_numberlen(self, value): if isinstance(value,UINT): self.__field_numberlen=value else: self.__field_numberlen=UINT(value,**{'sizeinbytes': 1}) def __delfield_numberlen(self): del self.__field_numberlen numberlen=property(__getfield_numberlen, __setfield_numberlen, __delfield_numberlen, None) def __getfield_number(self): try: self.__field_number except: self.__field_number=USTRING(**{'sizeinbytes': 48, 'default': "", 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 48, 'default': "", 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_numbertype(self): return self.__field_numbertype.getvalue() def __setfield_numbertype(self, value): if isinstance(value,UINT): self.__field_numbertype=value else: self.__field_numbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_numbertype(self): del self.__field_numbertype numbertype=property(__getfield_numbertype, __setfield_numbertype, __delfield_numbertype, None) def iscontainer(self): return True def containerelements(self): yield ('contactp', self.__field_contactp, "Pointer to contact number belongs") yield ('numberlen', self.__field_numberlen, None) yield ('number', self.__field_number, None) yield ('pad', self.__field_pad, None) yield ('numbertype', self.__field_numbertype, None) class numberresponse(BaseProtogenClass): __fields=['header', 'slot', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(numberresponse,self).__init__(**dict) if self.__class__ is numberresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(numberresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(numberresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_entry=numberentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,numberentry): self.__field_entry=value else: self.__field_entry=numberentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class numberupdaterequest(BaseProtogenClass): __fields=['header', 'slot', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(numberupdaterequest,self).__init__(**dict) if self.__class__ is numberupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(numberupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(numberupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x16, 'command': 0x8f}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_entry except: self.__field_entry=numberentry() self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyowriteheader(**{'packettype': 0x16, 'command': 0x8f}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_entry=numberentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x16, 'command': 0x8f}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyowriteheader): self.__field_header=value else: self.__field_header=sanyowriteheader(value,**{'packettype': 0x16, 'command': 0x8f}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=numberentry() return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,numberentry): self.__field_entry=value else: self.__field_entry=numberentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) class namerequest(BaseProtogenClass): __fields=['header', 'slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(namerequest,self).__init__(**dict) if self.__class__ is namerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(namerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(namerequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x16, 'command': 0x8c}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x16, 'command': 0x8c}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x16, 'command': 0x8c}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x16, 'command': 0x8c}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) class nameentry(BaseProtogenClass): __fields=['contactp', 'name_len', 'name_len2', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(nameentry,self).__init__(**dict) if self.__class__ is nameentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(nameentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(nameentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_contactp.writetobuffer(buf) self.__field_name_len.writetobuffer(buf) self.__field_name_len2.writetobuffer(buf) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_contactp=UINT(**{'sizeinbytes': 2}) self.__field_contactp.readfrombuffer(buf) self.__field_name_len=UINT(**{'sizeinbytes': 1}) self.__field_name_len.readfrombuffer(buf) self.__field_name_len2=UINT(**{'sizeinbytes': 1}) self.__field_name_len2.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 32, 'default': "", 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_contactp(self): return self.__field_contactp.getvalue() def __setfield_contactp(self, value): if isinstance(value,UINT): self.__field_contactp=value else: self.__field_contactp=UINT(value,**{'sizeinbytes': 2}) def __delfield_contactp(self): del self.__field_contactp contactp=property(__getfield_contactp, __setfield_contactp, __delfield_contactp, None) def __getfield_name_len(self): return self.__field_name_len.getvalue() def __setfield_name_len(self, value): if isinstance(value,UINT): self.__field_name_len=value else: self.__field_name_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_name_len(self): del self.__field_name_len name_len=property(__getfield_name_len, __setfield_name_len, __delfield_name_len, None) def __getfield_name_len2(self): return self.__field_name_len2.getvalue() def __setfield_name_len2(self, value): if isinstance(value,UINT): self.__field_name_len2=value else: self.__field_name_len2=UINT(value,**{'sizeinbytes': 1}) def __delfield_name_len2(self): del self.__field_name_len2 name_len2=property(__getfield_name_len2, __setfield_name_len2, __delfield_name_len2, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 32, 'default': "", 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('contactp', self.__field_contactp, None) yield ('name_len', self.__field_name_len, None) yield ('name_len2', self.__field_name_len2, None) yield ('name', self.__field_name, None) class nameresponse(BaseProtogenClass): __fields=['header', 'slot', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(nameresponse,self).__init__(**dict) if self.__class__ is nameresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(nameresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(nameresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_entry=nameentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,nameentry): self.__field_entry=value else: self.__field_entry=nameentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class nameupdaterequest(BaseProtogenClass): __fields=['header', 'slot', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(nameupdaterequest,self).__init__(**dict) if self.__class__ is nameupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(nameupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(nameupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x16, 'command': 0x8c}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_entry except: self.__field_entry=nameentry() self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyowriteheader(**{'packettype': 0x16, 'command': 0x8c}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_entry=nameentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x16, 'command': 0x8c}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyowriteheader): self.__field_header=value else: self.__field_header=sanyowriteheader(value,**{'packettype': 0x16, 'command': 0x8c}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=nameentry() return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,nameentry): self.__field_entry=value else: self.__field_entry=nameentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) class urlrequest(BaseProtogenClass): __fields=['header', 'slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(urlrequest,self).__init__(**dict) if self.__class__ is urlrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(urlrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(urlrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x16, 'command': 0x98}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x16, 'command': 0x98}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x16, 'command': 0x98}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x16, 'command': 0x98}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) class urlentry(BaseProtogenClass): __fields=['contactp', 'url_len', 'url', 'pad', 'type'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(urlentry,self).__init__(**dict) if self.__class__ is urlentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(urlentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(urlentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_contactp.writetobuffer(buf) self.__field_url_len.writetobuffer(buf) try: self.__field_url except: self.__field_url=USTRING(**{'sizeinbytes': 96, 'default': "", 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_url.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad.writetobuffer(buf) try: self.__field_type except: self.__field_type=UINT(**{'sizeinbytes': 1, 'default': 9}) self.__field_type.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_contactp=UINT(**{'sizeinbytes': 2}) self.__field_contactp.readfrombuffer(buf) self.__field_url_len=UINT(**{'sizeinbytes': 1}) self.__field_url_len.readfrombuffer(buf) self.__field_url=USTRING(**{'sizeinbytes': 96, 'default': "", 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_url.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad.readfrombuffer(buf) self.__field_type=UINT(**{'sizeinbytes': 1, 'default': 9}) self.__field_type.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_contactp(self): return self.__field_contactp.getvalue() def __setfield_contactp(self, value): if isinstance(value,UINT): self.__field_contactp=value else: self.__field_contactp=UINT(value,**{'sizeinbytes': 2}) def __delfield_contactp(self): del self.__field_contactp contactp=property(__getfield_contactp, __setfield_contactp, __delfield_contactp, "Pointer to contact number belongs") def __getfield_url_len(self): return self.__field_url_len.getvalue() def __setfield_url_len(self, value): if isinstance(value,UINT): self.__field_url_len=value else: self.__field_url_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_url_len(self): del self.__field_url_len url_len=property(__getfield_url_len, __setfield_url_len, __delfield_url_len, None) def __getfield_url(self): try: self.__field_url except: self.__field_url=USTRING(**{'sizeinbytes': 96, 'default': "", 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,USTRING): self.__field_url=value else: self.__field_url=USTRING(value,**{'sizeinbytes': 96, 'default': "", 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_type(self): try: self.__field_type except: self.__field_type=UINT(**{'sizeinbytes': 1, 'default': 9}) return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,UINT): self.__field_type=value else: self.__field_type=UINT(value,**{'sizeinbytes': 1, 'default': 9}) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, "Always 9 for World Icon") def iscontainer(self): return True def containerelements(self): yield ('contactp', self.__field_contactp, "Pointer to contact number belongs") yield ('url_len', self.__field_url_len, None) yield ('url', self.__field_url, None) yield ('pad', self.__field_pad, None) yield ('type', self.__field_type, "Always 9 for World Icon") class urlresponse(BaseProtogenClass): __fields=['header', 'slot', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(urlresponse,self).__init__(**dict) if self.__class__ is urlresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(urlresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(urlresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_entry=urlentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,urlentry): self.__field_entry=value else: self.__field_entry=urlentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class urlupdaterequest(BaseProtogenClass): __fields=['header', 'slot', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(urlupdaterequest,self).__init__(**dict) if self.__class__ is urlupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(urlupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(urlupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x16, 'command': 0x98}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_entry except: self.__field_entry=urlentry() self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyowriteheader(**{'packettype': 0x16, 'command': 0x98}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_entry=urlentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x16, 'command': 0x98}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyowriteheader): self.__field_header=value else: self.__field_header=sanyowriteheader(value,**{'packettype': 0x16, 'command': 0x98}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=urlentry() return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,urlentry): self.__field_entry=value else: self.__field_entry=urlentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) class addressrequest(BaseProtogenClass): __fields=['header', 'slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(addressrequest,self).__init__(**dict) if self.__class__ is addressrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(addressrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(addressrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x16, 'command': 0x9b}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x16, 'command': 0x9b}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x16, 'command': 0x9b}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x16, 'command': 0x9b}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) class addressentry(BaseProtogenClass): __fields=['contactp', 'address_len', 'address'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(addressentry,self).__init__(**dict) if self.__class__ is addressentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(addressentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(addressentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_contactp.writetobuffer(buf) self.__field_address_len.writetobuffer(buf) try: self.__field_address except: self.__field_address=USTRING(**{'sizeinbytes': 256, 'default': "", 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_address.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_contactp=UINT(**{'sizeinbytes': 2}) self.__field_contactp.readfrombuffer(buf) self.__field_address_len=UINT(**{'sizeinbytes': 2}) self.__field_address_len.readfrombuffer(buf) self.__field_address=USTRING(**{'sizeinbytes': 256, 'default': "", 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_address.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_contactp(self): return self.__field_contactp.getvalue() def __setfield_contactp(self, value): if isinstance(value,UINT): self.__field_contactp=value else: self.__field_contactp=UINT(value,**{'sizeinbytes': 2}) def __delfield_contactp(self): del self.__field_contactp contactp=property(__getfield_contactp, __setfield_contactp, __delfield_contactp, "Pointer to contact number belongs") def __getfield_address_len(self): return self.__field_address_len.getvalue() def __setfield_address_len(self, value): if isinstance(value,UINT): self.__field_address_len=value else: self.__field_address_len=UINT(value,**{'sizeinbytes': 2}) def __delfield_address_len(self): del self.__field_address_len address_len=property(__getfield_address_len, __setfield_address_len, __delfield_address_len, None) def __getfield_address(self): try: self.__field_address except: self.__field_address=USTRING(**{'sizeinbytes': 256, 'default': "", 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) return self.__field_address.getvalue() def __setfield_address(self, value): if isinstance(value,USTRING): self.__field_address=value else: self.__field_address=USTRING(value,**{'sizeinbytes': 256, 'default': "", 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_address(self): del self.__field_address address=property(__getfield_address, __setfield_address, __delfield_address, None) def iscontainer(self): return True def containerelements(self): yield ('contactp', self.__field_contactp, "Pointer to contact number belongs") yield ('address_len', self.__field_address_len, None) yield ('address', self.__field_address, None) class addressresponse(BaseProtogenClass): __fields=['header', 'slot', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(addressresponse,self).__init__(**dict) if self.__class__ is addressresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(addressresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(addressresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_entry=addressentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,addressentry): self.__field_entry=value else: self.__field_entry=addressentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class addressupdaterequest(BaseProtogenClass): __fields=['header', 'slot', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(addressupdaterequest,self).__init__(**dict) if self.__class__ is addressupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(addressupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(addressupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x16, 'command': 0x9b}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_entry except: self.__field_entry=addressentry() self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyowriteheader(**{'packettype': 0x16, 'command': 0x9b}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_entry=addressentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x16, 'command': 0x9b}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyowriteheader): self.__field_header=value else: self.__field_header=sanyowriteheader(value,**{'packettype': 0x16, 'command': 0x9b}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=addressentry() return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,addressentry): self.__field_entry=value else: self.__field_entry=addressentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) class memorequest(BaseProtogenClass): __fields=['header', 'slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(memorequest,self).__init__(**dict) if self.__class__ is memorequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(memorequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(memorequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x16, 'command': 0x9e}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x16, 'command': 0x9e}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x16, 'command': 0x9e}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x16, 'command': 0x9e}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) class memoentry(BaseProtogenClass): __fields=['contactp', 'memo_len', 'memo'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(memoentry,self).__init__(**dict) if self.__class__ is memoentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(memoentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(memoentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_contactp.writetobuffer(buf) self.__field_memo_len.writetobuffer(buf) try: self.__field_memo except: self.__field_memo=USTRING(**{'sizeinbytes': 256, 'default': "", 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_memo.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_contactp=UINT(**{'sizeinbytes': 2}) self.__field_contactp.readfrombuffer(buf) self.__field_memo_len=UINT(**{'sizeinbytes': 2}) self.__field_memo_len.readfrombuffer(buf) self.__field_memo=USTRING(**{'sizeinbytes': 256, 'default': "", 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_memo.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_contactp(self): return self.__field_contactp.getvalue() def __setfield_contactp(self, value): if isinstance(value,UINT): self.__field_contactp=value else: self.__field_contactp=UINT(value,**{'sizeinbytes': 2}) def __delfield_contactp(self): del self.__field_contactp contactp=property(__getfield_contactp, __setfield_contactp, __delfield_contactp, "Pointer to contact number belongs") def __getfield_memo_len(self): return self.__field_memo_len.getvalue() def __setfield_memo_len(self, value): if isinstance(value,UINT): self.__field_memo_len=value else: self.__field_memo_len=UINT(value,**{'sizeinbytes': 2}) def __delfield_memo_len(self): del self.__field_memo_len memo_len=property(__getfield_memo_len, __setfield_memo_len, __delfield_memo_len, None) def __getfield_memo(self): try: self.__field_memo except: self.__field_memo=USTRING(**{'sizeinbytes': 256, 'default': "", 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,USTRING): self.__field_memo=value else: self.__field_memo=USTRING(value,**{'sizeinbytes': 256, 'default': "", 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def iscontainer(self): return True def containerelements(self): yield ('contactp', self.__field_contactp, "Pointer to contact number belongs") yield ('memo_len', self.__field_memo_len, None) yield ('memo', self.__field_memo, None) class memoresponse(BaseProtogenClass): __fields=['header', 'slot', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(memoresponse,self).__init__(**dict) if self.__class__ is memoresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(memoresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(memoresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_entry=memoentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,memoentry): self.__field_entry=value else: self.__field_entry=memoentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class memoupdaterequest(BaseProtogenClass): __fields=['header', 'slot', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(memoupdaterequest,self).__init__(**dict) if self.__class__ is memoupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(memoupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(memoupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x16, 'command': 0x9e}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_entry except: self.__field_entry=memoentry() self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyowriteheader(**{'packettype': 0x16, 'command': 0x9e}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_entry=memoentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x16, 'command': 0x9e}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyowriteheader): self.__field_header=value else: self.__field_header=sanyowriteheader(value,**{'packettype': 0x16, 'command': 0x9e}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=memoentry() return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,memoentry): self.__field_entry=value else: self.__field_entry=memoentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) class emailrequest(BaseProtogenClass): __fields=['header', 'slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(emailrequest,self).__init__(**dict) if self.__class__ is emailrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(emailrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(emailrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x16, 'command': 0x93}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x16, 'command': 0x93}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x16, 'command': 0x93}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x16, 'command': 0x93}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) class emailentry(BaseProtogenClass): __fields=['contactp', 'email_len', 'email', 'pad', 'type'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(emailentry,self).__init__(**dict) if self.__class__ is emailentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(emailentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(emailentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_contactp.writetobuffer(buf) self.__field_email_len.writetobuffer(buf) try: self.__field_email except: self.__field_email=USTRING(**{'sizeinbytes': 96, 'default': "", 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_email.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad.writetobuffer(buf) try: self.__field_type except: self.__field_type=UINT(**{'sizeinbytes': 1, 'default': 8}) self.__field_type.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_contactp=UINT(**{'sizeinbytes': 2}) self.__field_contactp.readfrombuffer(buf) self.__field_email_len=UINT(**{'sizeinbytes': 1}) self.__field_email_len.readfrombuffer(buf) self.__field_email=USTRING(**{'sizeinbytes': 96, 'default': "", 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_email.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad.readfrombuffer(buf) self.__field_type=UINT(**{'sizeinbytes': 1, 'default': 8}) self.__field_type.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_contactp(self): return self.__field_contactp.getvalue() def __setfield_contactp(self, value): if isinstance(value,UINT): self.__field_contactp=value else: self.__field_contactp=UINT(value,**{'sizeinbytes': 2}) def __delfield_contactp(self): del self.__field_contactp contactp=property(__getfield_contactp, __setfield_contactp, __delfield_contactp, "Pointer to contact number belongs") def __getfield_email_len(self): return self.__field_email_len.getvalue() def __setfield_email_len(self, value): if isinstance(value,UINT): self.__field_email_len=value else: self.__field_email_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_email_len(self): del self.__field_email_len email_len=property(__getfield_email_len, __setfield_email_len, __delfield_email_len, None) def __getfield_email(self): try: self.__field_email except: self.__field_email=USTRING(**{'sizeinbytes': 96, 'default': "", 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 96, 'default': "", 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_type(self): try: self.__field_type except: self.__field_type=UINT(**{'sizeinbytes': 1, 'default': 8}) return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,UINT): self.__field_type=value else: self.__field_type=UINT(value,**{'sizeinbytes': 1, 'default': 8}) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, "7: Mobile, 8: Internet") def iscontainer(self): return True def containerelements(self): yield ('contactp', self.__field_contactp, "Pointer to contact number belongs") yield ('email_len', self.__field_email_len, None) yield ('email', self.__field_email, None) yield ('pad', self.__field_pad, None) yield ('type', self.__field_type, "7: Mobile, 8: Internet") class emailresponse(BaseProtogenClass): __fields=['header', 'slot', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(emailresponse,self).__init__(**dict) if self.__class__ is emailresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(emailresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(emailresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_entry=emailentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,emailentry): self.__field_entry=value else: self.__field_entry=emailentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) class emailupdaterequest(BaseProtogenClass): __fields=['header', 'slot', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(emailupdaterequest,self).__init__(**dict) if self.__class__ is emailupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(emailupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(emailupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x16, 'command': 0x93}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_entry except: self.__field_entry=emailentry() self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyowriteheader(**{'packettype': 0x16, 'command': 0x93}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_entry=emailentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x16, 'command': 0x93}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyowriteheader): self.__field_header=value else: self.__field_header=sanyowriteheader(value,**{'packettype': 0x16, 'command': 0x93}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=emailentry() return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,emailentry): self.__field_entry=value else: self.__field_entry=emailentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) class grouprequest(BaseProtogenClass): __fields=['header', 'slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(grouprequest,self).__init__(**dict) if self.__class__ is grouprequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(grouprequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(grouprequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x16, 'command': 0x87}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x16, 'command': 0x87}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x16, 'command': 0x87}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x16, 'command': 0x87}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) class groupentry(BaseProtogenClass): __fields=['slot', 'groupname_len', 'groupname', 'ringer', 'picture'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(groupentry,self).__init__(**dict) if self.__class__ is groupentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(groupentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(groupentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_groupname_len.writetobuffer(buf) try: self.__field_groupname except: self.__field_groupname=USTRING(**{'sizeinbytes': 16, 'default': ""}) self.__field_groupname.writetobuffer(buf) try: self.__field_ringer except: self.__field_ringer=UINT(**{'sizeinbytes': 2, 'default': 0xfff0}) self.__field_ringer.writetobuffer(buf) try: self.__field_picture except: self.__field_picture=UINT(**{'sizeinbytes': 2, 'default': 0xfffe}) self.__field_picture.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_groupname_len=UINT(**{'sizeinbytes': 1}) self.__field_groupname_len.readfrombuffer(buf) self.__field_groupname=USTRING(**{'sizeinbytes': 16, 'default': ""}) self.__field_groupname.readfrombuffer(buf) self.__field_ringer=UINT(**{'sizeinbytes': 2, 'default': 0xfff0}) self.__field_ringer.readfrombuffer(buf) self.__field_picture=UINT(**{'sizeinbytes': 2, 'default': 0xfffe}) self.__field_picture.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_groupname_len(self): return self.__field_groupname_len.getvalue() def __setfield_groupname_len(self, value): if isinstance(value,UINT): self.__field_groupname_len=value else: self.__field_groupname_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_groupname_len(self): del self.__field_groupname_len groupname_len=property(__getfield_groupname_len, __setfield_groupname_len, __delfield_groupname_len, None) def __getfield_groupname(self): try: self.__field_groupname except: self.__field_groupname=USTRING(**{'sizeinbytes': 16, 'default': ""}) return self.__field_groupname.getvalue() def __setfield_groupname(self, value): if isinstance(value,USTRING): self.__field_groupname=value else: self.__field_groupname=USTRING(value,**{'sizeinbytes': 16, 'default': ""}) def __delfield_groupname(self): del self.__field_groupname groupname=property(__getfield_groupname, __setfield_groupname, __delfield_groupname, None) def __getfield_ringer(self): try: self.__field_ringer except: self.__field_ringer=UINT(**{'sizeinbytes': 2, 'default': 0xfff0}) return self.__field_ringer.getvalue() def __setfield_ringer(self, value): if isinstance(value,UINT): self.__field_ringer=value else: self.__field_ringer=UINT(value,**{'sizeinbytes': 2, 'default': 0xfff0}) def __delfield_ringer(self): del self.__field_ringer ringer=property(__getfield_ringer, __setfield_ringer, __delfield_ringer, None) def __getfield_picture(self): try: self.__field_picture except: self.__field_picture=UINT(**{'sizeinbytes': 2, 'default': 0xfffe}) return self.__field_picture.getvalue() def __setfield_picture(self, value): if isinstance(value,UINT): self.__field_picture=value else: self.__field_picture=UINT(value,**{'sizeinbytes': 2, 'default': 0xfffe}) def __delfield_picture(self): del self.__field_picture picture=property(__getfield_picture, __setfield_picture, __delfield_picture, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('groupname_len', self.__field_groupname_len, None) yield ('groupname', self.__field_groupname, None) yield ('ringer', self.__field_ringer, None) yield ('picture', self.__field_picture, None) class groupresponse(BaseProtogenClass): __fields=['header', 'slot', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(groupresponse,self).__init__(**dict) if self.__class__ is groupresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(groupresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(groupresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_entry=groupentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,groupentry): self.__field_entry=value else: self.__field_entry=groupentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class groupupdaterequest(BaseProtogenClass): __fields=['header', 'slot', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(groupupdaterequest,self).__init__(**dict) if self.__class__ is groupupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(groupupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(groupupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x16, 'command': 0x87}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyowriteheader(**{'packettype': 0x16, 'command': 0x87}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_entry=groupentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x16, 'command': 0x87}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyowriteheader): self.__field_header=value else: self.__field_header=sanyowriteheader(value,**{'packettype': 0x16, 'command': 0x87}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,groupentry): self.__field_entry=value else: self.__field_entry=groupentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class evententry(BaseProtogenClass): __fields=['alarm', 'slot', 'eventname', 'pad1', 'eventname_len', 'start', 'end', 'location', 'pad2', 'location_len', 'alarmdiff', 'period', 'dom', 'timestamp', 'pad3', 'serial', 'pad4', 'ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(evententry,self).__init__(**dict) if self.__class__ is evententry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(evententry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(evententry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_alarm except: self.__field_alarm=UINT(**{'default': 0xffffffff}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_eventname.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.writetobuffer(buf) self.__field_eventname_len.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_location.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad2.writetobuffer(buf) self.__field_location_len.writetobuffer(buf) self.__field_alarmdiff.writetobuffer(buf) self.__field_period.writetobuffer(buf) self.__field_dom.writetobuffer(buf) try: self.__field_timestamp except: self.__field_timestamp=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_timestamp.writetobuffer(buf) try: self.__field_pad3 except: self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad3.writetobuffer(buf) try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.writetobuffer(buf) try: self.__field_pad4 except: self.__field_pad4=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad4.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_eventname=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_eventname.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.readfrombuffer(buf) self.__field_eventname_len=UINT(**{'sizeinbytes': 1}) self.__field_eventname_len.readfrombuffer(buf) self.__field_start=UINT(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=UINT(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_location=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_location.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad2.readfrombuffer(buf) self.__field_location_len=UINT(**{'sizeinbytes': 1}) self.__field_location_len.readfrombuffer(buf) self.__field_alarmdiff=UINT(**{'sizeinbytes': 4}) self.__field_alarmdiff.readfrombuffer(buf) self.__field_period=UINT(**{'sizeinbytes': 1}) self.__field_period.readfrombuffer(buf) self.__field_dom=UINT(**{'sizeinbytes': 1}) self.__field_dom.readfrombuffer(buf) self.__field_timestamp=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_timestamp.readfrombuffer(buf) self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad3.readfrombuffer(buf) self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.readfrombuffer(buf) self.__field_pad4=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad4.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 2}) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_alarm(self): try: self.__field_alarm except: self.__field_alarm=UINT(**{'default': 0xffffffff}) return self.__field_alarm.getvalue() def __setfield_alarm(self, value): if isinstance(value,UINT): self.__field_alarm=value else: self.__field_alarm=UINT(value,**{'default': 0xffffffff}) def __delfield_alarm(self): del self.__field_alarm alarm=property(__getfield_alarm, __setfield_alarm, __delfield_alarm, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_eventname(self): return self.__field_eventname.getvalue() def __setfield_eventname(self, value): if isinstance(value,USTRING): self.__field_eventname=value else: self.__field_eventname=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_eventname(self): del self.__field_eventname eventname=property(__getfield_eventname, __setfield_eventname, __delfield_eventname, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_eventname_len(self): return self.__field_eventname_len.getvalue() def __setfield_eventname_len(self, value): if isinstance(value,UINT): self.__field_eventname_len=value else: self.__field_eventname_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_eventname_len(self): del self.__field_eventname_len eventname_len=property(__getfield_eventname_len, __setfield_eventname_len, __delfield_eventname_len, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,UINT): self.__field_start=value else: self.__field_start=UINT(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, "# seconds since Jan 1, 1980 approximately") def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,UINT): self.__field_end=value else: self.__field_end=UINT(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_location(self): return self.__field_location.getvalue() def __setfield_location(self, value): if isinstance(value,USTRING): self.__field_location=value else: self.__field_location=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_location(self): del self.__field_location location=property(__getfield_location, __setfield_location, __delfield_location, None) def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_location_len(self): return self.__field_location_len.getvalue() def __setfield_location_len(self, value): if isinstance(value,UINT): self.__field_location_len=value else: self.__field_location_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_location_len(self): del self.__field_location_len location_len=property(__getfield_location_len, __setfield_location_len, __delfield_location_len, None) def __getfield_alarmdiff(self): return self.__field_alarmdiff.getvalue() def __setfield_alarmdiff(self, value): if isinstance(value,UINT): self.__field_alarmdiff=value else: self.__field_alarmdiff=UINT(value,**{'sizeinbytes': 4}) def __delfield_alarmdiff(self): del self.__field_alarmdiff alarmdiff=property(__getfield_alarmdiff, __setfield_alarmdiff, __delfield_alarmdiff, "Displayed alarm time") def __getfield_period(self): return self.__field_period.getvalue() def __setfield_period(self, value): if isinstance(value,UINT): self.__field_period=value else: self.__field_period=UINT(value,**{'sizeinbytes': 1}) def __delfield_period(self): del self.__field_period period=property(__getfield_period, __setfield_period, __delfield_period, "No, Daily, Weekly, Monthly, Yearly") def __getfield_dom(self): return self.__field_dom.getvalue() def __setfield_dom(self, value): if isinstance(value,UINT): self.__field_dom=value else: self.__field_dom=UINT(value,**{'sizeinbytes': 1}) def __delfield_dom(self): del self.__field_dom dom=property(__getfield_dom, __setfield_dom, __delfield_dom, "Day of month for the event") def __getfield_timestamp(self): try: self.__field_timestamp except: self.__field_timestamp=UINT(**{'sizeinbytes': 4, 'default': 0}) return self.__field_timestamp.getvalue() def __setfield_timestamp(self, value): if isinstance(value,UINT): self.__field_timestamp=value else: self.__field_timestamp=UINT(value,**{'sizeinbytes': 4, 'default': 0}) def __delfield_timestamp(self): del self.__field_timestamp timestamp=property(__getfield_timestamp, __setfield_timestamp, __delfield_timestamp, None) def __getfield_pad3(self): try: self.__field_pad3 except: self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad3.getvalue() def __setfield_pad3(self, value): if isinstance(value,UNKNOWN): self.__field_pad3=value else: self.__field_pad3=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad3(self): del self.__field_pad3 pad3=property(__getfield_pad3, __setfield_pad3, __delfield_pad3, None) def __getfield_serial(self): try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_serial.getvalue() def __setfield_serial(self, value): if isinstance(value,UINT): self.__field_serial=value else: self.__field_serial=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_serial(self): del self.__field_serial serial=property(__getfield_serial, __setfield_serial, __delfield_serial, "Some kind of serial number") def __getfield_pad4(self): try: self.__field_pad4 except: self.__field_pad4=UNKNOWN(**{'sizeinbytes': 3}) return self.__field_pad4.getvalue() def __setfield_pad4(self, value): if isinstance(value,UNKNOWN): self.__field_pad4=value else: self.__field_pad4=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_pad4(self): del self.__field_pad4 pad4=property(__getfield_pad4, __setfield_pad4, __delfield_pad4, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 2}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def iscontainer(self): return True def containerelements(self): yield ('alarm', self.__field_alarm, None) yield ('slot', self.__field_slot, None) yield ('eventname', self.__field_eventname, None) yield ('pad1', self.__field_pad1, None) yield ('eventname_len', self.__field_eventname_len, None) yield ('start', self.__field_start, "# seconds since Jan 1, 1980 approximately") yield ('end', self.__field_end, None) yield ('location', self.__field_location, None) yield ('pad2', self.__field_pad2, None) yield ('location_len', self.__field_location_len, None) yield ('alarmdiff', self.__field_alarmdiff, "Displayed alarm time") yield ('period', self.__field_period, "No, Daily, Weekly, Monthly, Yearly") yield ('dom', self.__field_dom, "Day of month for the event") yield ('timestamp', self.__field_timestamp, None) yield ('pad3', self.__field_pad3, None) yield ('serial', self.__field_serial, "Some kind of serial number") yield ('pad4', self.__field_pad4, None) yield ('ringtone', self.__field_ringtone, None) class eventresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventresponse,self).__init__(**dict) if self.__class__ is eventresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader() self.__field_header.readfrombuffer(buf) self.__field_entry=evententry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,evententry): self.__field_entry=value else: self.__field_entry=evententry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class eventupdaterequest(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventupdaterequest,self).__init__(**dict) if self.__class__ is eventupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x23}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 56}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x23}) self.__field_header.readfrombuffer(buf) self.__field_entry=evententry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 56}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x23}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpwriteheader): self.__field_header=value else: self.__field_header=qcpwriteheader(value,**{'packettype': 0x0c, 'command':0x23}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,evententry): self.__field_entry=value else: self.__field_entry=evententry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 56}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 56}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class messagesententry(BaseProtogenClass): __fields=['slot', 'read', 'counter', 'pad1', 'dunno1', 'dunno2', 'dunno3', 'pad2', 'dunno4', 'dunno5', 'pad3', 'message_len', 'message', 'pad4', 'pad5', 'year', 'month', 'day', 'hour', 'minute', 'second', 'callback_len', 'callback', 'phonenum_len', 'phonenum', 'dunno6', 'priority', 'pad6', 'dunno7', 'dunno8'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(messagesententry,self).__init__(**dict) if self.__class__ is messagesententry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(messagesententry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(messagesententry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_counter.writetobuffer(buf) self.__field_pad1.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_dunno3.writetobuffer(buf) self.__field_pad2.writetobuffer(buf) self.__field_dunno4.writetobuffer(buf) self.__field_dunno5.writetobuffer(buf) self.__field_pad3.writetobuffer(buf) self.__field_message_len.writetobuffer(buf) self.__field_message.writetobuffer(buf) self.__field_pad4.writetobuffer(buf) self.__field_pad5.writetobuffer(buf) self.__field_year.writetobuffer(buf) self.__field_month.writetobuffer(buf) self.__field_day.writetobuffer(buf) self.__field_hour.writetobuffer(buf) self.__field_minute.writetobuffer(buf) self.__field_second.writetobuffer(buf) self.__field_callback_len.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_phonenum_len.writetobuffer(buf) self.__field_phonenum.writetobuffer(buf) self.__field_dunno6.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_pad6.writetobuffer(buf) self.__field_dunno7.writetobuffer(buf) self.__field_dunno8.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 1}) self.__field_read.readfrombuffer(buf) self.__field_counter=UINT(**{'sizeinbytes': 1}) self.__field_counter.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad1.readfrombuffer(buf) self.__field_dunno1=UINT(**{'sizeinbytes': 1}) self.__field_dunno1.readfrombuffer(buf) self.__field_dunno2=UINT(**{'sizeinbytes': 1}) self.__field_dunno2.readfrombuffer(buf) self.__field_dunno3=UINT(**{'sizeinbytes': 1}) self.__field_dunno3.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad2.readfrombuffer(buf) self.__field_dunno4=UINT(**{'sizeinbytes': 1}) self.__field_dunno4.readfrombuffer(buf) self.__field_dunno5=UINT(**{'sizeinbytes': 1}) self.__field_dunno5.readfrombuffer(buf) self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad3.readfrombuffer(buf) self.__field_message_len=UINT(**{'sizeinbytes': 1}) self.__field_message_len.readfrombuffer(buf) self.__field_message=USTRING(**{'sizeinbytes': 255}) self.__field_message.readfrombuffer(buf) self.__field_pad4=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad4.readfrombuffer(buf) self.__field_pad5=UINT(**{'sizeinbytes': 1}) self.__field_pad5.readfrombuffer(buf) self.__field_year=UINT(**{'sizeinbytes': 1}) self.__field_year.readfrombuffer(buf) self.__field_month=UINT(**{'sizeinbytes': 1}) self.__field_month.readfrombuffer(buf) self.__field_day=UINT(**{'sizeinbytes': 1}) self.__field_day.readfrombuffer(buf) self.__field_hour=UINT(**{'sizeinbytes': 1}) self.__field_hour.readfrombuffer(buf) self.__field_minute=UINT(**{'sizeinbytes': 1}) self.__field_minute.readfrombuffer(buf) self.__field_second=UINT(**{'sizeinbytes': 1}) self.__field_second.readfrombuffer(buf) self.__field_callback_len=UINT(**{'sizeinbytes': 1}) self.__field_callback_len.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 34}) self.__field_callback.readfrombuffer(buf) self.__field_phonenum_len=UINT(**{'sizeinbytes': 1}) self.__field_phonenum_len.readfrombuffer(buf) self.__field_phonenum=USTRING(**{'sizeinbytes': 36}) self.__field_phonenum.readfrombuffer(buf) self.__field_dunno6=UINT(**{'sizeinbytes': 1}) self.__field_dunno6.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_pad6=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad6.readfrombuffer(buf) self.__field_dunno7=UINT(**{'sizeinbytes': 1}) self.__field_dunno7.readfrombuffer(buf) self.__field_dunno8=UINT(**{'sizeinbytes': 1}) self.__field_dunno8.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 1}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_counter(self): return self.__field_counter.getvalue() def __setfield_counter(self, value): if isinstance(value,UINT): self.__field_counter=value else: self.__field_counter=UINT(value,**{'sizeinbytes': 1}) def __delfield_counter(self): del self.__field_counter counter=property(__getfield_counter, __setfield_counter, __delfield_counter, None) def __getfield_pad1(self): return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UINT): self.__field_dunno1=value else: self.__field_dunno1=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UINT): self.__field_dunno2=value else: self.__field_dunno2=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_dunno3(self): return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,UINT): self.__field_dunno3=value else: self.__field_dunno3=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_pad2(self): return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_dunno4(self): return self.__field_dunno4.getvalue() def __setfield_dunno4(self, value): if isinstance(value,UINT): self.__field_dunno4=value else: self.__field_dunno4=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno4(self): del self.__field_dunno4 dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None) def __getfield_dunno5(self): return self.__field_dunno5.getvalue() def __setfield_dunno5(self, value): if isinstance(value,UINT): self.__field_dunno5=value else: self.__field_dunno5=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno5(self): del self.__field_dunno5 dunno5=property(__getfield_dunno5, __setfield_dunno5, __delfield_dunno5, None) def __getfield_pad3(self): return self.__field_pad3.getvalue() def __setfield_pad3(self, value): if isinstance(value,UNKNOWN): self.__field_pad3=value else: self.__field_pad3=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad3(self): del self.__field_pad3 pad3=property(__getfield_pad3, __setfield_pad3, __delfield_pad3, None) def __getfield_message_len(self): return self.__field_message_len.getvalue() def __setfield_message_len(self, value): if isinstance(value,UINT): self.__field_message_len=value else: self.__field_message_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_message_len(self): del self.__field_message_len message_len=property(__getfield_message_len, __setfield_message_len, __delfield_message_len, None) def __getfield_message(self): return self.__field_message.getvalue() def __setfield_message(self, value): if isinstance(value,USTRING): self.__field_message=value else: self.__field_message=USTRING(value,**{'sizeinbytes': 255}) def __delfield_message(self): del self.__field_message message=property(__getfield_message, __setfield_message, __delfield_message, "Text of the notification") def __getfield_pad4(self): return self.__field_pad4.getvalue() def __setfield_pad4(self, value): if isinstance(value,UNKNOWN): self.__field_pad4=value else: self.__field_pad4=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad4(self): del self.__field_pad4 pad4=property(__getfield_pad4, __setfield_pad4, __delfield_pad4, None) def __getfield_pad5(self): return self.__field_pad5.getvalue() def __setfield_pad5(self, value): if isinstance(value,UINT): self.__field_pad5=value else: self.__field_pad5=UINT(value,**{'sizeinbytes': 1}) def __delfield_pad5(self): del self.__field_pad5 pad5=property(__getfield_pad5, __setfield_pad5, __delfield_pad5, None) def __getfield_year(self): return self.__field_year.getvalue() def __setfield_year(self, value): if isinstance(value,UINT): self.__field_year=value else: self.__field_year=UINT(value,**{'sizeinbytes': 1}) def __delfield_year(self): del self.__field_year year=property(__getfield_year, __setfield_year, __delfield_year, None) def __getfield_month(self): return self.__field_month.getvalue() def __setfield_month(self, value): if isinstance(value,UINT): self.__field_month=value else: self.__field_month=UINT(value,**{'sizeinbytes': 1}) def __delfield_month(self): del self.__field_month month=property(__getfield_month, __setfield_month, __delfield_month, None) def __getfield_day(self): return self.__field_day.getvalue() def __setfield_day(self, value): if isinstance(value,UINT): self.__field_day=value else: self.__field_day=UINT(value,**{'sizeinbytes': 1}) def __delfield_day(self): del self.__field_day day=property(__getfield_day, __setfield_day, __delfield_day, None) def __getfield_hour(self): return self.__field_hour.getvalue() def __setfield_hour(self, value): if isinstance(value,UINT): self.__field_hour=value else: self.__field_hour=UINT(value,**{'sizeinbytes': 1}) def __delfield_hour(self): del self.__field_hour hour=property(__getfield_hour, __setfield_hour, __delfield_hour, None) def __getfield_minute(self): return self.__field_minute.getvalue() def __setfield_minute(self, value): if isinstance(value,UINT): self.__field_minute=value else: self.__field_minute=UINT(value,**{'sizeinbytes': 1}) def __delfield_minute(self): del self.__field_minute minute=property(__getfield_minute, __setfield_minute, __delfield_minute, None) def __getfield_second(self): return self.__field_second.getvalue() def __setfield_second(self, value): if isinstance(value,UINT): self.__field_second=value else: self.__field_second=UINT(value,**{'sizeinbytes': 1}) def __delfield_second(self): del self.__field_second second=property(__getfield_second, __setfield_second, __delfield_second, None) def __getfield_callback_len(self): return self.__field_callback_len.getvalue() def __setfield_callback_len(self, value): if isinstance(value,UINT): self.__field_callback_len=value else: self.__field_callback_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_len(self): del self.__field_callback_len callback_len=property(__getfield_callback_len, __setfield_callback_len, __delfield_callback_len, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 34}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_phonenum_len(self): return self.__field_phonenum_len.getvalue() def __setfield_phonenum_len(self, value): if isinstance(value,UINT): self.__field_phonenum_len=value else: self.__field_phonenum_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_phonenum_len(self): del self.__field_phonenum_len phonenum_len=property(__getfield_phonenum_len, __setfield_phonenum_len, __delfield_phonenum_len, None) def __getfield_phonenum(self): return self.__field_phonenum.getvalue() def __setfield_phonenum(self, value): if isinstance(value,USTRING): self.__field_phonenum=value else: self.__field_phonenum=USTRING(value,**{'sizeinbytes': 36}) def __delfield_phonenum(self): del self.__field_phonenum phonenum=property(__getfield_phonenum, __setfield_phonenum, __delfield_phonenum, None) def __getfield_dunno6(self): return self.__field_dunno6.getvalue() def __setfield_dunno6(self, value): if isinstance(value,UINT): self.__field_dunno6=value else: self.__field_dunno6=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno6(self): del self.__field_dunno6 dunno6=property(__getfield_dunno6, __setfield_dunno6, __delfield_dunno6, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_pad6(self): return self.__field_pad6.getvalue() def __setfield_pad6(self, value): if isinstance(value,UNKNOWN): self.__field_pad6=value else: self.__field_pad6=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_pad6(self): del self.__field_pad6 pad6=property(__getfield_pad6, __setfield_pad6, __delfield_pad6, None) def __getfield_dunno7(self): return self.__field_dunno7.getvalue() def __setfield_dunno7(self, value): if isinstance(value,UINT): self.__field_dunno7=value else: self.__field_dunno7=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno7(self): del self.__field_dunno7 dunno7=property(__getfield_dunno7, __setfield_dunno7, __delfield_dunno7, None) def __getfield_dunno8(self): return self.__field_dunno8.getvalue() def __setfield_dunno8(self, value): if isinstance(value,UINT): self.__field_dunno8=value else: self.__field_dunno8=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno8(self): del self.__field_dunno8 dunno8=property(__getfield_dunno8, __setfield_dunno8, __delfield_dunno8, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('read', self.__field_read, None) yield ('counter', self.__field_counter, None) yield ('pad1', self.__field_pad1, None) yield ('dunno1', self.__field_dunno1, None) yield ('dunno2', self.__field_dunno2, None) yield ('dunno3', self.__field_dunno3, None) yield ('pad2', self.__field_pad2, None) yield ('dunno4', self.__field_dunno4, None) yield ('dunno5', self.__field_dunno5, None) yield ('pad3', self.__field_pad3, None) yield ('message_len', self.__field_message_len, None) yield ('message', self.__field_message, "Text of the notification") yield ('pad4', self.__field_pad4, None) yield ('pad5', self.__field_pad5, None) yield ('year', self.__field_year, None) yield ('month', self.__field_month, None) yield ('day', self.__field_day, None) yield ('hour', self.__field_hour, None) yield ('minute', self.__field_minute, None) yield ('second', self.__field_second, None) yield ('callback_len', self.__field_callback_len, None) yield ('callback', self.__field_callback, None) yield ('phonenum_len', self.__field_phonenum_len, None) yield ('phonenum', self.__field_phonenum, None) yield ('dunno6', self.__field_dunno6, None) yield ('priority', self.__field_priority, None) yield ('pad6', self.__field_pad6, None) yield ('dunno7', self.__field_dunno7, None) yield ('dunno8', self.__field_dunno8, None) class messagesentresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(messagesentresponse,self).__init__(**dict) if self.__class__ is messagesentresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(messagesentresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(messagesentresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=messagesententry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,messagesententry): self.__field_entry=value else: self.__field_entry=messagesententry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) bitpim-1.0.7+dfsg1/src/phones/p_sanyo6650.py0000644001616600161660000014172610676624753016630 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Sanyo Katana-II (SCP-6650)""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * from p_sanyo4930 import * from p_sanyo6600 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMPHONEBOOKENTRIES=300 MAXNUMBERS=500 MAXEMAILS=600 MAXURLS=300 MAXMEMOS=300 MAXADDRESSES=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 MAXNUMBERLEN=32 MAXEMAILLEN=96 MAXURLLEN=96 MAXMEMOLEN=96 HASRINGPICBUF=0 NUMGROUPS=20 NUMPHONENUMBERS=7 NUMEMAILS=2 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=9 class pbsortbuffer(BaseProtogenClass): "Various arrays for sorting the phone book, speed dial, determining which" __fields=['startcommand', 'bufsize', 'comment', 'groupslotsused', 'pad', 'groupslotusedflags', 'slotsused', 'usedflags', 'speeddialindex', 'nameslotsused', 'nameusedflags', 'sortorder', 'pbfirstletters', 'numslotsused', 'numusedflags', 'emailslotsused', 'emailusedflags', 'urlslotsused', 'urlusedflags', 'num_address', 'addressusedflags', 'num_memo', 'memousedflags', 'junk'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbsortbuffer,self).__init__(**dict) if self.__class__ is pbsortbuffer: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbsortbuffer,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbsortbuffer,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_startcommand except: self.__field_startcommand=UINT(**{'constant': 0x76}) try: self.__field_bufsize except: self.__field_bufsize=UINT(**{'constant': 4096}) try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "sort buffer"}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_groupslotsused.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad.writetobuffer(buf) try: self.__field_groupslotusedflags except: self.__field_groupslotusedflags=LIST(**{'elementclass': _gen_p_sanyo6650_67, 'length': NUMGROUPS, 'createdefault': True}) self.__field_groupslotusedflags.writetobuffer(buf) self.__field_slotsused.writetobuffer(buf) try: self.__field_usedflags except: self.__field_usedflags=LIST(**{'elementclass': _gen_p_sanyo6650_71, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_usedflags.writetobuffer(buf) try: self.__field_speeddialindex except: self.__field_speeddialindex=LIST(**{'elementclass': _gen_p_sanyo6650_73, 'length': _NUMSPEEDDIALS}) self.__field_speeddialindex.writetobuffer(buf) self.__field_nameslotsused.writetobuffer(buf) try: self.__field_nameusedflags except: self.__field_nameusedflags=LIST(**{'elementclass': _gen_p_sanyo6650_77, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_nameusedflags.writetobuffer(buf) try: self.__field_sortorder except: self.__field_sortorder=LIST(**{'elementclass': _gen_p_sanyo6650_79, 'length': NUMPHONEBOOKENTRIES}) self.__field_sortorder.writetobuffer(buf) self.__field_pbfirstletters.writetobuffer(buf) self.__field_numslotsused.writetobuffer(buf) try: self.__field_numusedflags except: self.__field_numusedflags=LIST(**{'elementclass': _gen_p_sanyo6650_84, 'length': MAXNUMBERS, 'createdefault': True}) self.__field_numusedflags.writetobuffer(buf) self.__field_emailslotsused.writetobuffer(buf) try: self.__field_emailusedflags except: self.__field_emailusedflags=LIST(**{'elementclass': _gen_p_sanyo6650_88, 'length': MAXEMAILS, 'createdefault': True}) self.__field_emailusedflags.writetobuffer(buf) self.__field_urlslotsused.writetobuffer(buf) try: self.__field_urlusedflags except: self.__field_urlusedflags=LIST(**{'elementclass': _gen_p_sanyo6650_91, 'length': MAXURLS, 'createdefault': True}) self.__field_urlusedflags.writetobuffer(buf) self.__field_num_address.writetobuffer(buf) try: self.__field_addressusedflags except: self.__field_addressusedflags=LIST(**{'elementclass': _gen_p_sanyo6650_95, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_addressusedflags.writetobuffer(buf) self.__field_num_memo.writetobuffer(buf) try: self.__field_memousedflags except: self.__field_memousedflags=LIST(**{'elementclass': _gen_p_sanyo6650_99, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_memousedflags.writetobuffer(buf) try: self.__field_junk except: self.__field_junk=UNKNOWN(**{'sizeinbytes': 543}) self.__field_junk.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_groupslotsused=UINT(**{'sizeinbytes': 1}) self.__field_groupslotsused.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad.readfrombuffer(buf) self.__field_groupslotusedflags=LIST(**{'elementclass': _gen_p_sanyo6650_67, 'length': NUMGROUPS, 'createdefault': True}) self.__field_groupslotusedflags.readfrombuffer(buf) self.__field_slotsused=UINT(**{'sizeinbytes': 2}) self.__field_slotsused.readfrombuffer(buf) self.__field_usedflags=LIST(**{'elementclass': _gen_p_sanyo6650_71, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_usedflags.readfrombuffer(buf) self.__field_speeddialindex=LIST(**{'elementclass': _gen_p_sanyo6650_73, 'length': _NUMSPEEDDIALS}) self.__field_speeddialindex.readfrombuffer(buf) self.__field_nameslotsused=UINT(**{'sizeinbytes': 2}) self.__field_nameslotsused.readfrombuffer(buf) self.__field_nameusedflags=LIST(**{'elementclass': _gen_p_sanyo6650_77, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_nameusedflags.readfrombuffer(buf) self.__field_sortorder=LIST(**{'elementclass': _gen_p_sanyo6650_79, 'length': NUMPHONEBOOKENTRIES}) self.__field_sortorder.readfrombuffer(buf) self.__field_pbfirstletters=USTRING(**{'terminator': None, 'sizeinbytes': NUMPHONEBOOKENTRIES}) self.__field_pbfirstletters.readfrombuffer(buf) self.__field_numslotsused=UINT(**{'sizeinbytes': 2}) self.__field_numslotsused.readfrombuffer(buf) self.__field_numusedflags=LIST(**{'elementclass': _gen_p_sanyo6650_84, 'length': MAXNUMBERS, 'createdefault': True}) self.__field_numusedflags.readfrombuffer(buf) self.__field_emailslotsused=UINT(**{'sizeinbytes': 2}) self.__field_emailslotsused.readfrombuffer(buf) self.__field_emailusedflags=LIST(**{'elementclass': _gen_p_sanyo6650_88, 'length': MAXEMAILS, 'createdefault': True}) self.__field_emailusedflags.readfrombuffer(buf) self.__field_urlslotsused=UINT(**{'sizeinbytes': 2}) self.__field_urlslotsused.readfrombuffer(buf) self.__field_urlusedflags=LIST(**{'elementclass': _gen_p_sanyo6650_91, 'length': MAXURLS, 'createdefault': True}) self.__field_urlusedflags.readfrombuffer(buf) self.__field_num_address=UINT(**{'sizeinbytes': 2}) self.__field_num_address.readfrombuffer(buf) self.__field_addressusedflags=LIST(**{'elementclass': _gen_p_sanyo6650_95, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_addressusedflags.readfrombuffer(buf) self.__field_num_memo=UINT(**{'sizeinbytes': 2}) self.__field_num_memo.readfrombuffer(buf) self.__field_memousedflags=LIST(**{'elementclass': _gen_p_sanyo6650_99, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_memousedflags.readfrombuffer(buf) self.__field_junk=UNKNOWN(**{'sizeinbytes': 543}) self.__field_junk.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_startcommand(self): return self.__field_startcommand.getvalue() def __setfield_startcommand(self, value): if isinstance(value,UINT): self.__field_startcommand=value else: self.__field_startcommand=UINT(value,**{'constant': 0x76}) def __delfield_startcommand(self): del self.__field_startcommand startcommand=property(__getfield_startcommand, __setfield_startcommand, __delfield_startcommand, "Starting command for R/W buf parts") def __getfield_bufsize(self): return self.__field_bufsize.getvalue() def __setfield_bufsize(self, value): if isinstance(value,UINT): self.__field_bufsize=value else: self.__field_bufsize=UINT(value,**{'constant': 4096}) def __delfield_bufsize(self): del self.__field_bufsize bufsize=property(__getfield_bufsize, __setfield_bufsize, __delfield_bufsize, None) def __getfield_comment(self): try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "sort buffer"}) return self.__field_comment.getvalue() def __setfield_comment(self, value): if isinstance(value,USTRING): self.__field_comment=value else: self.__field_comment=USTRING(value,**{'default': "sort buffer"}) def __delfield_comment(self): del self.__field_comment comment=property(__getfield_comment, __setfield_comment, __delfield_comment, None) def __getfield_groupslotsused(self): return self.__field_groupslotsused.getvalue() def __setfield_groupslotsused(self, value): if isinstance(value,UINT): self.__field_groupslotsused=value else: self.__field_groupslotsused=UINT(value,**{'sizeinbytes': 1}) def __delfield_groupslotsused(self): del self.__field_groupslotsused groupslotsused=property(__getfield_groupslotsused, __setfield_groupslotsused, __delfield_groupslotsused, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 2}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 2}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_groupslotusedflags(self): try: self.__field_groupslotusedflags except: self.__field_groupslotusedflags=LIST(**{'elementclass': _gen_p_sanyo6650_67, 'length': NUMGROUPS, 'createdefault': True}) return self.__field_groupslotusedflags.getvalue() def __setfield_groupslotusedflags(self, value): if isinstance(value,LIST): self.__field_groupslotusedflags=value else: self.__field_groupslotusedflags=LIST(value,**{'elementclass': _gen_p_sanyo6650_67, 'length': NUMGROUPS, 'createdefault': True}) def __delfield_groupslotusedflags(self): del self.__field_groupslotusedflags groupslotusedflags=property(__getfield_groupslotusedflags, __setfield_groupslotusedflags, __delfield_groupslotusedflags, None) def __getfield_slotsused(self): return self.__field_slotsused.getvalue() def __setfield_slotsused(self, value): if isinstance(value,UINT): self.__field_slotsused=value else: self.__field_slotsused=UINT(value,**{'sizeinbytes': 2}) def __delfield_slotsused(self): del self.__field_slotsused slotsused=property(__getfield_slotsused, __setfield_slotsused, __delfield_slotsused, None) def __getfield_usedflags(self): try: self.__field_usedflags except: self.__field_usedflags=LIST(**{'elementclass': _gen_p_sanyo6650_71, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) return self.__field_usedflags.getvalue() def __setfield_usedflags(self, value): if isinstance(value,LIST): self.__field_usedflags=value else: self.__field_usedflags=LIST(value,**{'elementclass': _gen_p_sanyo6650_71, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) def __delfield_usedflags(self): del self.__field_usedflags usedflags=property(__getfield_usedflags, __setfield_usedflags, __delfield_usedflags, None) def __getfield_speeddialindex(self): try: self.__field_speeddialindex except: self.__field_speeddialindex=LIST(**{'elementclass': _gen_p_sanyo6650_73, 'length': _NUMSPEEDDIALS}) return self.__field_speeddialindex.getvalue() def __setfield_speeddialindex(self, value): if isinstance(value,LIST): self.__field_speeddialindex=value else: self.__field_speeddialindex=LIST(value,**{'elementclass': _gen_p_sanyo6650_73, 'length': _NUMSPEEDDIALS}) def __delfield_speeddialindex(self): del self.__field_speeddialindex speeddialindex=property(__getfield_speeddialindex, __setfield_speeddialindex, __delfield_speeddialindex, None) def __getfield_nameslotsused(self): return self.__field_nameslotsused.getvalue() def __setfield_nameslotsused(self, value): if isinstance(value,UINT): self.__field_nameslotsused=value else: self.__field_nameslotsused=UINT(value,**{'sizeinbytes': 2}) def __delfield_nameslotsused(self): del self.__field_nameslotsused nameslotsused=property(__getfield_nameslotsused, __setfield_nameslotsused, __delfield_nameslotsused, "Always seems to be the same. Why duplicated?") def __getfield_nameusedflags(self): try: self.__field_nameusedflags except: self.__field_nameusedflags=LIST(**{'elementclass': _gen_p_sanyo6650_77, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) return self.__field_nameusedflags.getvalue() def __setfield_nameusedflags(self, value): if isinstance(value,LIST): self.__field_nameusedflags=value else: self.__field_nameusedflags=LIST(value,**{'elementclass': _gen_p_sanyo6650_77, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) def __delfield_nameusedflags(self): del self.__field_nameusedflags nameusedflags=property(__getfield_nameusedflags, __setfield_nameusedflags, __delfield_nameusedflags, None) def __getfield_sortorder(self): try: self.__field_sortorder except: self.__field_sortorder=LIST(**{'elementclass': _gen_p_sanyo6650_79, 'length': NUMPHONEBOOKENTRIES}) return self.__field_sortorder.getvalue() def __setfield_sortorder(self, value): if isinstance(value,LIST): self.__field_sortorder=value else: self.__field_sortorder=LIST(value,**{'elementclass': _gen_p_sanyo6650_79, 'length': NUMPHONEBOOKENTRIES}) def __delfield_sortorder(self): del self.__field_sortorder sortorder=property(__getfield_sortorder, __setfield_sortorder, __delfield_sortorder, None) def __getfield_pbfirstletters(self): return self.__field_pbfirstletters.getvalue() def __setfield_pbfirstletters(self, value): if isinstance(value,USTRING): self.__field_pbfirstletters=value else: self.__field_pbfirstletters=USTRING(value,**{'terminator': None, 'sizeinbytes': NUMPHONEBOOKENTRIES}) def __delfield_pbfirstletters(self): del self.__field_pbfirstletters pbfirstletters=property(__getfield_pbfirstletters, __setfield_pbfirstletters, __delfield_pbfirstletters, None) def __getfield_numslotsused(self): return self.__field_numslotsused.getvalue() def __setfield_numslotsused(self, value): if isinstance(value,UINT): self.__field_numslotsused=value else: self.__field_numslotsused=UINT(value,**{'sizeinbytes': 2}) def __delfield_numslotsused(self): del self.__field_numslotsused numslotsused=property(__getfield_numslotsused, __setfield_numslotsused, __delfield_numslotsused, "Number of phone number slots used") def __getfield_numusedflags(self): try: self.__field_numusedflags except: self.__field_numusedflags=LIST(**{'elementclass': _gen_p_sanyo6650_84, 'length': MAXNUMBERS, 'createdefault': True}) return self.__field_numusedflags.getvalue() def __setfield_numusedflags(self, value): if isinstance(value,LIST): self.__field_numusedflags=value else: self.__field_numusedflags=LIST(value,**{'elementclass': _gen_p_sanyo6650_84, 'length': MAXNUMBERS, 'createdefault': True}) def __delfield_numusedflags(self): del self.__field_numusedflags numusedflags=property(__getfield_numusedflags, __setfield_numusedflags, __delfield_numusedflags, None) def __getfield_emailslotsused(self): return self.__field_emailslotsused.getvalue() def __setfield_emailslotsused(self, value): if isinstance(value,UINT): self.__field_emailslotsused=value else: self.__field_emailslotsused=UINT(value,**{'sizeinbytes': 2}) def __delfield_emailslotsused(self): del self.__field_emailslotsused emailslotsused=property(__getfield_emailslotsused, __setfield_emailslotsused, __delfield_emailslotsused, None) def __getfield_emailusedflags(self): try: self.__field_emailusedflags except: self.__field_emailusedflags=LIST(**{'elementclass': _gen_p_sanyo6650_88, 'length': MAXEMAILS, 'createdefault': True}) return self.__field_emailusedflags.getvalue() def __setfield_emailusedflags(self, value): if isinstance(value,LIST): self.__field_emailusedflags=value else: self.__field_emailusedflags=LIST(value,**{'elementclass': _gen_p_sanyo6650_88, 'length': MAXEMAILS, 'createdefault': True}) def __delfield_emailusedflags(self): del self.__field_emailusedflags emailusedflags=property(__getfield_emailusedflags, __setfield_emailusedflags, __delfield_emailusedflags, None) def __getfield_urlslotsused(self): return self.__field_urlslotsused.getvalue() def __setfield_urlslotsused(self, value): if isinstance(value,UINT): self.__field_urlslotsused=value else: self.__field_urlslotsused=UINT(value,**{'sizeinbytes': 2}) def __delfield_urlslotsused(self): del self.__field_urlslotsused urlslotsused=property(__getfield_urlslotsused, __setfield_urlslotsused, __delfield_urlslotsused, None) def __getfield_urlusedflags(self): try: self.__field_urlusedflags except: self.__field_urlusedflags=LIST(**{'elementclass': _gen_p_sanyo6650_91, 'length': MAXURLS, 'createdefault': True}) return self.__field_urlusedflags.getvalue() def __setfield_urlusedflags(self, value): if isinstance(value,LIST): self.__field_urlusedflags=value else: self.__field_urlusedflags=LIST(value,**{'elementclass': _gen_p_sanyo6650_91, 'length': MAXURLS, 'createdefault': True}) def __delfield_urlusedflags(self): del self.__field_urlusedflags urlusedflags=property(__getfield_urlusedflags, __setfield_urlusedflags, __delfield_urlusedflags, None) def __getfield_num_address(self): return self.__field_num_address.getvalue() def __setfield_num_address(self, value): if isinstance(value,UINT): self.__field_num_address=value else: self.__field_num_address=UINT(value,**{'sizeinbytes': 2}) def __delfield_num_address(self): del self.__field_num_address num_address=property(__getfield_num_address, __setfield_num_address, __delfield_num_address, None) def __getfield_addressusedflags(self): try: self.__field_addressusedflags except: self.__field_addressusedflags=LIST(**{'elementclass': _gen_p_sanyo6650_95, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) return self.__field_addressusedflags.getvalue() def __setfield_addressusedflags(self, value): if isinstance(value,LIST): self.__field_addressusedflags=value else: self.__field_addressusedflags=LIST(value,**{'elementclass': _gen_p_sanyo6650_95, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) def __delfield_addressusedflags(self): del self.__field_addressusedflags addressusedflags=property(__getfield_addressusedflags, __setfield_addressusedflags, __delfield_addressusedflags, None) def __getfield_num_memo(self): return self.__field_num_memo.getvalue() def __setfield_num_memo(self, value): if isinstance(value,UINT): self.__field_num_memo=value else: self.__field_num_memo=UINT(value,**{'sizeinbytes': 2}) def __delfield_num_memo(self): del self.__field_num_memo num_memo=property(__getfield_num_memo, __setfield_num_memo, __delfield_num_memo, None) def __getfield_memousedflags(self): try: self.__field_memousedflags except: self.__field_memousedflags=LIST(**{'elementclass': _gen_p_sanyo6650_99, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) return self.__field_memousedflags.getvalue() def __setfield_memousedflags(self, value): if isinstance(value,LIST): self.__field_memousedflags=value else: self.__field_memousedflags=LIST(value,**{'elementclass': _gen_p_sanyo6650_99, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) def __delfield_memousedflags(self): del self.__field_memousedflags memousedflags=property(__getfield_memousedflags, __setfield_memousedflags, __delfield_memousedflags, None) def __getfield_junk(self): try: self.__field_junk except: self.__field_junk=UNKNOWN(**{'sizeinbytes': 543}) return self.__field_junk.getvalue() def __setfield_junk(self, value): if isinstance(value,UNKNOWN): self.__field_junk=value else: self.__field_junk=UNKNOWN(value,**{'sizeinbytes': 543}) def __delfield_junk(self): del self.__field_junk junk=property(__getfield_junk, __setfield_junk, __delfield_junk, None) def iscontainer(self): return True def containerelements(self): yield ('startcommand', self.__field_startcommand, "Starting command for R/W buf parts") yield ('bufsize', self.__field_bufsize, None) yield ('comment', self.__field_comment, None) yield ('groupslotsused', self.__field_groupslotsused, None) yield ('pad', self.__field_pad, None) yield ('groupslotusedflags', self.__field_groupslotusedflags, None) yield ('slotsused', self.__field_slotsused, None) yield ('usedflags', self.__field_usedflags, None) yield ('speeddialindex', self.__field_speeddialindex, None) yield ('nameslotsused', self.__field_nameslotsused, "Always seems to be the same. Why duplicated?") yield ('nameusedflags', self.__field_nameusedflags, None) yield ('sortorder', self.__field_sortorder, None) yield ('pbfirstletters', self.__field_pbfirstletters, None) yield ('numslotsused', self.__field_numslotsused, "Number of phone number slots used") yield ('numusedflags', self.__field_numusedflags, None) yield ('emailslotsused', self.__field_emailslotsused, None) yield ('emailusedflags', self.__field_emailusedflags, None) yield ('urlslotsused', self.__field_urlslotsused, None) yield ('urlusedflags', self.__field_urlusedflags, None) yield ('num_address', self.__field_num_address, None) yield ('addressusedflags', self.__field_addressusedflags, None) yield ('num_memo', self.__field_num_memo, None) yield ('memousedflags', self.__field_memousedflags, None) yield ('junk', self.__field_junk, None) class _gen_p_sanyo6650_67(BaseProtogenClass): 'Anonymous inner class' __fields=['used'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo6650_67,self).__init__(**dict) if self.__class__ is _gen_p_sanyo6650_67: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo6650_67,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo6650_67,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_used=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_used.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_used=UINT(**{'sizeinbytes': 1}) self.__field_used.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_used(self): return self.__field_used.getvalue() def __setfield_used(self, value): if isinstance(value,UINT): self.__field_used=value else: self.__field_used=UINT(value,**{'sizeinbytes': 1}) def __delfield_used(self): del self.__field_used used=property(__getfield_used, __setfield_used, __delfield_used, "1 if slot in use") def iscontainer(self): return True def containerelements(self): yield ('used', self.__field_used, "1 if slot in use") class _gen_p_sanyo6650_71(BaseProtogenClass): 'Anonymous inner class' __fields=['used'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo6650_71,self).__init__(**dict) if self.__class__ is _gen_p_sanyo6650_71: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo6650_71,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo6650_71,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_used=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_used.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_used=UINT(**{'sizeinbytes': 1}) self.__field_used.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_used(self): return self.__field_used.getvalue() def __setfield_used(self, value): if isinstance(value,UINT): self.__field_used=value else: self.__field_used=UINT(value,**{'sizeinbytes': 1}) def __delfield_used(self): del self.__field_used used=property(__getfield_used, __setfield_used, __delfield_used, "1 if slot in use") def iscontainer(self): return True def containerelements(self): yield ('used', self.__field_used, "1 if slot in use") class _gen_p_sanyo6650_73(BaseProtogenClass): 'Anonymous inner class' __fields=['numslot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo6650_73,self).__init__(**dict) if self.__class__ is _gen_p_sanyo6650_73: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo6650_73,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo6650_73,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_numslot=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numslot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numslot=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_numslot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numslot(self): return self.__field_numslot.getvalue() def __setfield_numslot(self, value): if isinstance(value,UINT): self.__field_numslot=value else: self.__field_numslot=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_numslot(self): del self.__field_numslot numslot=property(__getfield_numslot, __setfield_numslot, __delfield_numslot, None) def iscontainer(self): return True def containerelements(self): yield ('numslot', self.__field_numslot, None) class _gen_p_sanyo6650_77(BaseProtogenClass): 'Anonymous inner class' __fields=['used'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo6650_77,self).__init__(**dict) if self.__class__ is _gen_p_sanyo6650_77: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo6650_77,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo6650_77,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_used=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_used.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_used=UINT(**{'sizeinbytes': 1}) self.__field_used.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_used(self): return self.__field_used.getvalue() def __setfield_used(self, value): if isinstance(value,UINT): self.__field_used=value else: self.__field_used=UINT(value,**{'sizeinbytes': 1}) def __delfield_used(self): del self.__field_used used=property(__getfield_used, __setfield_used, __delfield_used, "1 if slot in use") def iscontainer(self): return True def containerelements(self): yield ('used', self.__field_used, "1 if slot in use") class _gen_p_sanyo6650_79(BaseProtogenClass): 'Anonymous inner class' __fields=['pbslot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo6650_79,self).__init__(**dict) if self.__class__ is _gen_p_sanyo6650_79: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo6650_79,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo6650_79,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_pbslot=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pbslot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbslot=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbslot(self): return self.__field_pbslot.getvalue() def __setfield_pbslot(self, value): if isinstance(value,UINT): self.__field_pbslot=value else: self.__field_pbslot=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pbslot(self): del self.__field_pbslot pbslot=property(__getfield_pbslot, __setfield_pbslot, __delfield_pbslot, None) def iscontainer(self): return True def containerelements(self): yield ('pbslot', self.__field_pbslot, None) class _gen_p_sanyo6650_84(BaseProtogenClass): 'Anonymous inner class' __fields=['used'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo6650_84,self).__init__(**dict) if self.__class__ is _gen_p_sanyo6650_84: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo6650_84,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo6650_84,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_used=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_used.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_used=UINT(**{'sizeinbytes': 1}) self.__field_used.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_used(self): return self.__field_used.getvalue() def __setfield_used(self, value): if isinstance(value,UINT): self.__field_used=value else: self.__field_used=UINT(value,**{'sizeinbytes': 1}) def __delfield_used(self): del self.__field_used used=property(__getfield_used, __setfield_used, __delfield_used, "1 if slot in use") def iscontainer(self): return True def containerelements(self): yield ('used', self.__field_used, "1 if slot in use") class _gen_p_sanyo6650_88(BaseProtogenClass): 'Anonymous inner class' __fields=['used'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo6650_88,self).__init__(**dict) if self.__class__ is _gen_p_sanyo6650_88: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo6650_88,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo6650_88,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_used=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_used.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_used=UINT(**{'sizeinbytes': 1}) self.__field_used.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_used(self): return self.__field_used.getvalue() def __setfield_used(self, value): if isinstance(value,UINT): self.__field_used=value else: self.__field_used=UINT(value,**{'sizeinbytes': 1}) def __delfield_used(self): del self.__field_used used=property(__getfield_used, __setfield_used, __delfield_used, "1 if slot in use") def iscontainer(self): return True def containerelements(self): yield ('used', self.__field_used, "1 if slot in use") class _gen_p_sanyo6650_91(BaseProtogenClass): 'Anonymous inner class' __fields=['used'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo6650_91,self).__init__(**dict) if self.__class__ is _gen_p_sanyo6650_91: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo6650_91,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo6650_91,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_used=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_used.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_used=UINT(**{'sizeinbytes': 1}) self.__field_used.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_used(self): return self.__field_used.getvalue() def __setfield_used(self, value): if isinstance(value,UINT): self.__field_used=value else: self.__field_used=UINT(value,**{'sizeinbytes': 1}) def __delfield_used(self): del self.__field_used used=property(__getfield_used, __setfield_used, __delfield_used, "1 if slot in use") def iscontainer(self): return True def containerelements(self): yield ('used', self.__field_used, "1 if slot in use") class _gen_p_sanyo6650_95(BaseProtogenClass): 'Anonymous inner class' __fields=['used'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo6650_95,self).__init__(**dict) if self.__class__ is _gen_p_sanyo6650_95: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo6650_95,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo6650_95,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_used=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_used.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_used=UINT(**{'sizeinbytes': 1}) self.__field_used.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_used(self): return self.__field_used.getvalue() def __setfield_used(self, value): if isinstance(value,UINT): self.__field_used=value else: self.__field_used=UINT(value,**{'sizeinbytes': 1}) def __delfield_used(self): del self.__field_used used=property(__getfield_used, __setfield_used, __delfield_used, "1 if slot in use") def iscontainer(self): return True def containerelements(self): yield ('used', self.__field_used, "1 if slot in use") class _gen_p_sanyo6650_99(BaseProtogenClass): 'Anonymous inner class' __fields=['used'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo6650_99,self).__init__(**dict) if self.__class__ is _gen_p_sanyo6650_99: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo6650_99,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo6650_99,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_used=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_used.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_used=UINT(**{'sizeinbytes': 1}) self.__field_used.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_used(self): return self.__field_used.getvalue() def __setfield_used(self, value): if isinstance(value,UINT): self.__field_used=value else: self.__field_used=UINT(value,**{'sizeinbytes': 1}) def __delfield_used(self): del self.__field_used used=property(__getfield_used, __setfield_used, __delfield_used, "1 if slot in use") def iscontainer(self): return True def containerelements(self): yield ('used', self.__field_used, "1 if slot in use") bitpim-1.0.7+dfsg1/src/phones/p_lgux5000.p0000644001616600161660000002756010575613467016246 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### Copyright (C) 2004 John O'Shaughnessy ### Copyright (C) 2007 Fiz Stein ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lgux5000.p 4096 2007-03-13 21:27:19Z djpham $ %{ """Various descriptions of data specific to LG UX5000""" from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx4400 except as noted # below from p_lgvx4400 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=500 MAXCALENDARDESCRIPTION=38 NUMEMAILS=3 NUMPHONENUMBERS=5 MEMOLENGTH=65 PHONE_ENCODING='iso8859_1' CAL_NO_VOICE=0xffff CAL_REPEAT_DATE=(2999, 12, 31) cal_has_voice_id=True cal_voice_id_ofs=0x11 cal_voice_ext='.qcp' # full name='sche000.qcp' %} PACKET speeddial: 2 UINT {'default': 0xffff} +entry 1 UINT {'default': 0xff} +number PACKET speeddials: * LIST {'length': NUMSPEEDDIALS, 'elementclass': speeddial} +speeddials PACKET indexentry: 2 UINT {'default': 0xffff} +index 50 USTRING {'default': ""} +name PACKET indexfile: "Used for tracking wallpaper and ringtones" # A bit of a silly design again. Entries with an index of 0xffff are # 'blank'. Thus it is possible for numactiveitems and the actual # number of valid entries to be mismatched. 2 UINT numactiveitems * LIST {'elementclass': indexentry, 'createdefault': True} +items PACKET pbgroup: "A single group" 1 UINT icon 23 USTRING {'encoding': PHONE_ENCODING} name PACKET pbgroups: "Phonebook groups" * LIST {'elementclass': pbgroup} +groups # All STRINGS have raiseonterminatedread as False since the phone does # occassionally leave out the terminator byte # Note if you change the length of any of these fields, you also # need to modify com_lgvx4500 to give a different truncateat parameter # in the convertphonebooktophone method PACKET pbentry: 4 UINT serial1 2 UINT entrysize 4 UINT serial2 2 UINT entrynumber 23 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 2 UINT group * LIST {'length': NUMEMAILS} +emails: 49 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} email 49 USTRING {'raiseonunterminatedread': False} url 1 UINT ringtone "ringtone index for a call" 1 UINT msgringtone "ringtone index for a text message" 1 BOOL secret * USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH} memo 1 UINT wallpaper 9 UINT { 'default': 0 } +unknown1 * LIST {'length': NUMPHONENUMBERS} +numbertypes: 1 UINT numbertype * LIST {'length': NUMPHONENUMBERS} +numbers: 49 USTRING {'raiseonunterminatedread': False} number * UNKNOWN +unknown20c PACKET pbreadentryresponse: "Results of reading one entry" * pbheader header * pbentry entry PACKET pbupdateentryrequest: * pbheader {'command': 0x04, 'flag': 0x01} +header * pbentry entry PACKET pbappendentryrequest: * pbheader {'command': 0x03, 'flag': 0x01} +header * pbentry entry ### ### The calendar ### # # The calendar consists of one file listing events and an exception # file that lists exceptions. These exceptions suppress a particular # instance of a repeated event. For example, if you setup something # to happen monthly, but changed the 1st february event, then the # schedule will contain the repeating event, and the 1st feb one, # and the suppresions/exceptions file will point to the repeating # event and suppress the 1st feb. # The phone uses the position within the file to give an event an id PACKET scheduleexception: 4 UINT pos "Refers to event id (position in schedule file) that this suppresses" 1 UINT day 1 UINT month 2 UINT year PACKET scheduleexceptionfile: * LIST {'elementclass': scheduleexception} +items PACKET scheduleevent: 4 UINT pos "position within file, used as an event id" 4 LGCALDATE start 4 LGCALDATE end 1 UINT repeat "Repeat?" 3 UINT daybitmap "which days a weekly repeat event happens on?" 1 UINT alarmminutes "a value of 100 indicates not set" 1 UINT alarmhours "a value of 100 indicates not set" 1 UINT alarmtype "preset alarm reminder type" 1 UINT { 'default': 0 } +snoozedelay "in minutes?" 1 UINT ringtone 35 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } description 2 UINT { 'default': 0 } +unknown1 "This seems to always be two zeros" 2 UINT hasvoice "This event has an associated voice memo if 1" 2 UINT voiceid "sch/schexxx.qcp is the voice memo (xxx = voiceid - 0x0f)" 2 UINT { 'default': 0 } +unknown2 "This seems to always be yet two more zeros" PACKET schedulefile: 2 UINT numactiveitems * LIST {'elementclass': scheduleevent} +events PACKET camindexentry: 1 UINT {'default': 0} +index 11 USTRING {'default': ""} +name 4 LGCALDATE +taken 4 UINT {'default': 0x00ff0100} +dunno PACKET campicsdat: "the cam/pics.dat file" * LIST {'length': 60, 'elementclass': camindexentry, 'createdefault': True} +items PACKET call: 4 GPSDATE GPStime #no. of seconds since 0h 1-6-80, based off local time. 4 UINT unknown1 # different for each call 4 UINT duration #seconds, not certain about length of this field 49 USTRING {'raiseonunterminatedread': False} number 36 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 1 UINT numberlength # length of phone number 1 UINT unknown2 # set to 1 on some calls 1 UINT pbnumbertype # 1=cell, 2=home, 3=office, 4=cell2, 5=fax, 6=vmail, 0xFF=not in phone book 2 UINT unknown3 # always seems to be 0 2 UINT pbentrynum #entry number in phonebook 9 UINT unknown9 PACKET callhistory: 4 UINT numcalls 1 UINT unknown1 * LIST {'elementclass': call} +calls PACKET firmwareresponse: 1 UINT command 11 USTRING {'terminator': None} date1 8 USTRING {'terminator': None} time1 11 USTRING {'terminator': None} date2 8 USTRING {'terminator': None} time2 8 USTRING {'terminator': None} firmware ### ### SMS ### # # There are 3 types of SMS records, The inbox, outbox and unsent (pending) # Unlike other records in the phone each message is stored in a separate file # All messages are in the 'sms' directory in the root of the phone # Inbox messages are in files called 'inbox000.dat', the number 000 varies for # each message, typically there are no gaps in the numbering, but gaps can appear # if a message is deleted. # Outbox message are named 'outbox000.dat', unsent messages are named 'sf00.dat', # only two digit file name that suggests a max of 100 message for this type. # Messages in the outbox get updated when the message is received by the recipient, # they contain a delivery flag and a delivery time for all the possible 10 recipients. # The vx8100 supports SMS contatination, this allows you to send text messages that are # longer than 160 characters. The format is different for these type of messages, but # it is supported by this implementation. # The vx8100 also allows you to put small graphics, sounds and animations in a message. # This implementation does not support these, if they are contained in a message they # will be ignored and just the text will be shown when you view the message in bitpim. # The text in the the messages is stored in 7-bit characters, so they have # to be unpacked, in concatinated messages and messages with embeded graphics etc. the # format uses the GSM 03.38 specified format, a good example of this can be found at # "http://www.dreamfabric.com/sms/hello.html". # For simple messages less than 161 characters with no graphics the format is simpler, # the 7-bit characters are just packed into memory in the order they appear in the # message. PACKET recipient_record: 14 UINT unknown1 49 USTRING number 1 UINT status # 1 when sent, 5 when received, 2 failed to send 4 LGCALDATE timesent 4 LGCALDATE timereceived 40 DATA unknown2 PACKET sms_saved: 4 UINT outboxmsg 4 GPSDATE GPStime # num seconds since 0h 1-6-80 if self.outboxmsg: * sms_out outbox if not self.outboxmsg: * sms_in inbox PACKET sms_out: 4 UINT index # starting from 1, unique 1 UINT locked # 1=locked 3 UINT unknown1 # zero 4 LGCALDATE timesent # time the message was sent 21 USTRING {'encoding': PHONE_ENCODING} subject 1 DATA unknown2 1 UINT num_msg_elements # up to 7 * LIST {'elementclass': msg_record, 'length': 7} +messages 2 UINT unknown6 1 UINT priority # 0=normal, 1=high 13 DATA unknown7 3 DATA unknown8 # set to 01,00,00 23 USTRING callback * LIST {'elementclass': recipient_record, 'length': 10} +recipients PACKET SMSINBOXMSGFRAGMENT: * LIST {'length': 181} +msg: # this size could be wrong 1 UINT byte "individual byte of message" PACKET sms_in: 4 UINT msg_index1 4 UINT msg_index2 2 UINT unknown2 # set to 0 4 UINT unknown3 # set to 0 6 SMSDATE timesent 3 UINT unknown 1 UINT callback_length # 0 for no callback number 38 USTRING callback 1 UINT sender_length * LIST {'length': 38} +sender: 1 UINT byte "individual byte of senders phone number" 15 DATA unknown4 # set to zeros 4 LGCALDATE lg_time # time the message was sent 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 2 UINT unknown5 # zero 1 UINT read # 1 if message has been read, 0 otherwise 1 UINT locked # 1 if the message is locked, 0 otherwise 2 UINT unknown8 1 UINT priority # 1 if the message is high priority, 0 otherwise 6 DATA flags # message flags 21 USTRING {'encoding': PHONE_ENCODING} subject 1 UINT bin_header1 # 0 in simple message 1 if the message contains a binary header 1 UINT bin_header2 # 0 in simple message 9 if the message contains a binary header 1 UINT multipartID # multi-part message ID, used for concatinated messages only 3 UINT unknown6 # zeros 1 UINT bin_header3 # 0 in simple message 2 if the message contains a binary header 1 UINT num_msg_elements # max 20 elements (guessing on max here) * LIST {'length': 20} +msglengths: 1 UINT msglength "lengths of individual messages in septets" * LIST {'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT} +msgs # 181 bytes per message, # 20 messages, 7-bit ascii for simple text. for binary header # first byte is header length not including the length byte # rest depends on content of header, not known at this time. # text alway follows the header although the format it different # than a simple SMS 68 DATA unknown5 33 USTRING senders_name 169 DATA unknown6 # ?? inlcudes senders phone number in ascii PACKET sms_quick_text: # the vx4400 has variable length NULL terminated strings null terminated in it's canned messages # file sms/mediacan000.dat, not sure about the max * LIST {} +msgs: * USTRING {'encoding': PHONE_ENCODING} msg # # Text Memos. LG memo support is weak, it only supports the raw text and none of # the features that other phones support, when you run bitpim you see loads of # options that do not work in the vx8100 on the memo page PACKET textmemo: 151 USTRING { 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } text PACKET textmemofile: 4 UINT itemcount * LIST { 'elementclass': textmemo } +items bitpim-1.0.7+dfsg1/src/phones/com_moto_gsm.py0000644001616600161660000000066610555026112017273 0ustar amuamu### BITPIM ### ### Copyright (C) 2007 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_motov710.py 3460 2006-07-08 23:55:09Z djpham $ """Base functionality for Motorola GSM phones""" import com_moto class Phone(com_moto.Phone): pass class Profile(com_moto.Profile): pass bitpim-1.0.7+dfsg1/src/phones/p_lgg4015.p0000644001616600161660000002501210555026112016012 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lgg4015.p 3927 2007-01-22 03:15:22Z rogerb $ %{ """Various descriptions of data specific to LG G4015""" from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_etsi import * from p_lg import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb # general constants MEDIA_RINGTONE=0 MEDIA_WALLPAPER=1 GROUP_INDEX_RANGE=xrange(8) MIN_RINGTONE_INDEX=0 MAX_RINGTONE_INDEX=19 MIN_WALLPAPER_INDEX=0 MAX_WALLPAPER_INDEX=19 CHARSET_IRA='IRA' CHARSET_BASE64='Base64' CHARSET_GSM='GSM' CHARSET_HEX='HEX' CHARSET_PCCP437='PCCP437' CHARSET_PCDN='PCDN' CHARSET_8859_1='8859-1' CHARSET_UCS2='UCS2' # Calendar constants CAL_TOTAL_ENTRIES=30 CAL_MIN_INDEX=0 CAL_MAX_INDEX=29 CAL_DESC_LEN=30 CAL_REP_NONE=0 CAL_REP_DAILY=1 CAL_REP_WEEKLY=2 CAL_REP_MONTHLY=3 CAL_REP_YEARLY=4 CAL_ALARM_NONE=0 CAL_ALARM_ONTIME=1 CAL_ALARM_15MIN=2 CAL_ALARM_30MIN=3 CAL_ALARM_1HR=4 CAL_ALARM_1DAY=5 CAL_ALARM_VALUE={ CAL_ALARM_NONE: -1, CAL_ALARM_ONTIME: 0, CAL_ALARM_15MIN: 15, CAL_ALARM_30MIN: 30, CAL_ALARM_1HR: 60, CAL_ALARM_1DAY: 1440 } CAL_ALARM_LIST=((1440, CAL_ALARM_1DAY), (60, CAL_ALARM_1HR), (30, CAL_ALARM_30MIN), (15, CAL_ALARM_15MIN), (0, CAL_ALARM_ONTIME), (-1, CAL_ALARM_NONE)) # Phonebook constans PB_MEMORY_SIM='AD' PB_MEMORY_MAIN='ME' PB_MEMORY_LAST_DIALED='LD' PB_MEMORY_LAST_RECEIVED='LR' PB_MEMORY_LAST_MISSED='LM' PB_MAIN_TOTAL_ENTRIES=255 PB_MAIN_MIN_INDEX=0 PB_MAIN_MAX_INDEX=254 PB_SIM_TOTAL_ENTRIES=250 PB_SIM_MIN_INDEX=1 PB_SIM_MAX_INDEX=250 PB_NUMBER_LEN=40 # max size of a number string PB_NAME_LEN=20 # max size of a contact name PB_EMAIL_LEN=40 PB_MEMO_LEN=50 PB_SIM_NAME_LEN=16 PB_LD_MIN_INDEX=1 PB_LD_MAX_INDEX=10 PB_LR_MIN_INDEX=1 PB_LR_MAX_INDEX=20 PB_LM_MIN_INDEX=1 PB_LM_MAX_INDEX=10 PB_CALL_HISTORY_INFO=( ('Getting Last Dialed Calls', PB_MEMORY_LAST_DIALED, PB_LD_MIN_INDEX, PB_LD_MAX_INDEX), ('Getting Last Received Calls', PB_MEMORY_LAST_RECEIVED, PB_LR_MIN_INDEX, PB_LR_MAX_INDEX), ('Getting Missed Calls', PB_MEMORY_LAST_MISSED, PB_LM_MIN_INDEX, PB_LM_MAX_INDEX)) # Memo constants MEMO_MIN_INDEX=0 MEMO_MAX_INDEX=19 MEMO_READ_CMD='+CMDR' MEMO_WRITE_CMD='+CMDW' # SMS Constants SMS_MEMORY_PHONE='ME' SMS_MEMORY_SIM='SM' SMS_MEMORY_SELECT_CMD='+CPMS' SMS_FORMAT_TEXT=1 SMS_FORMAT_PDU=0 SMS_FORMAT_CMD='+CMGF' SMS_MSG_REC_UNREAD='REC UNREAD' SMS_MSG_REC_READ='REC READ' SMS_MSG_STO_UNSENT='STO UNSENT' SMS_MSG_STO_SENT='STO SENT' SMS_MSG_ALL='ALL' SMS_MSG_LIST_CMD='+CMGL' %} # calendar packets PACKET calendar_read_req: * USTRING { 'terminator': None, 'default': '+CXDR=' } +command * CSVINT +start_index * CSVINT { 'terminator': None } +end_index PACKET calendar_read_resp: * CSVSTRING {'quotechar': None, 'terminator': ord(' '), 'constant': '+CXDR:'} command * CSVINT index * CSVINT repeat * CSVINT alarm * GSMCALDATE date * GSMCALTIME time * CSVSTRING { 'terminator': None } description PACKET calendar_write_check_req: * USTRING { 'terminator': None, 'default': '+CXDW' } +command PACKET calendar_write_check_resp: * USTRING { 'terminator': ord(' '), 'constant': '+CXDW:' } command * CSVINT { 'terminator': None } index PACKET calendar_write_req: * USTRING { 'terminator': None, 'default': '+CXDW=' } +command * CSVINT +index * CSVINT +repeat * CSVINT +alarm * GSMCALDATE +date * GSMCALTIME +time * CSVSTRING { 'terminator': None, 'maxsizeinbytes': CAL_DESC_LEN, 'raiseontruncate': False } +description PACKET calendar_del_req: * USTRING { 'terminator': None, 'default': '+CXDW=' } +command * CSVINT { 'terminator': None } +index # Media packets PACKET media_selector_req: * USTRING { 'terminator': None, 'default': '+DDLS?' } +command PACKET media_selector_resp: * USTRING { 'terminator': ord(' '), 'constant': '+DDLS:' } command * CSVINT { 'terminator': None } media_type PACKET media_selector_set: * USTRING { 'terminator': None, 'default': '+DDLS=' } +command * CSVINT { 'terminator': None } +media_type PACKET media_list_req: * USTRING { 'terminator': None, 'default': '+DDLR=' } +command * CSVINT +start_index * CSVINT { 'terminator': None } +end_index PACKET media_list_resp: * CSVSTRING {'quotechar': None, 'terminator': ord(' '), 'constant': '+DDLR:'} command * CSVINT index * CSVSTRING file_name * CSVSTRING { 'terminator': None } media_name PACKET del_media_req: * USTRING { 'terminator': None, 'default': '+DDLD=0,' } +command * CSVSTRING { 'terminator': None } +file_name PACKET write_media_req: * USTRING { 'terminator': None, 'default': '+DDLW=' } +command * CSVINT +index * CSVSTRING +file_name * CSVSTRING +media_name * CSVINT data_len * CSVINT media_type * CSVINT { 'default': 0 } +dunno1 # width? * CSVINT { 'default': 0 } +dunno2 # height? * CSVINT { 'default': 0 } +dunno3 # #of colors? * CSVINT { 'default': 0, 'terminator': ord('\r') } +dunno4 # * USTRING { 'terminator': None } +data # Phonebook packets PACKET list_group_req: * USTRING { 'terminator': None, 'default': '+CPGR=' } +command * CSVINT +start_index * CSVINT { 'terminator': None } +end_index PACKET list_group_resp: * USTRING { 'terminator': ord(' '), 'constant': '+CPGR:' } command * CSVINT index * CSVSTRING { 'terminator': None } group_name PACKET charset_set_req: * USTRING { 'terminator': None, 'default': '+CSCS=' } +command * CSVSTRING { 'terminator': None } +charset PACKET select_storage_req: * USTRING { 'terminator': None, 'default': '+CPBS=' } +command * CSVSTRING { 'terminator': None } +storage PACKET select_storage_resp: * USTRING { 'terminator': ord(' '), 'constant': '+CPBS:' } command * CSVSTRING storage * CSVINT used_slots_count * CSVINT total_slots_count * CSVINT { 'terminator': None } dunno PACKET read_phonebook_req: * USTRING { 'terminator': None, 'default': '+CPBR=' } +command * CSVINT +start_index * CSVINT { 'terminator': None } +end_index PACKET read_phonebook_resp: P BOOL { 'default': False } +sim * USTRING { 'terminator': ord(' '), 'constant': '+CPBR:' } command * CSVINT index * CSVINT group * CSVSTRING mobile * CSVINT mobile_type * CSVSTRING home * CSVINT home_type * CSVSTRING office * CSVINT office_type * CSVSTRING name * CSVSTRING email * CSVSTRING memo PACKET read_sim_phonebook_resp: * USTRING { 'terminator': ord(' '), 'constant': '+CPBR:' } command * CSVINT index * CSVINT group * CSVSTRING mobile * CSVINT mobile_type * CSVSTRING name P USTRING { 'terminator': None, 'default': '' } +home P USTRING { 'terminator': None, 'default': '' } +office P USTRING { 'terminator': None, 'default': '' } +email P USTRING { 'terminator': None, 'default': '' } +memo P BOOL { 'default': True } +sim PACKET del_phonebook_req: * USTRING { 'terminator': None, 'default': '+CPBW=' } +command * CSVINT { 'terminator': None } +index PACKET update_phonebook_resp: * USTRING { 'terminator': ord(' '), 'constant': '+CPBW:' } command * CSVINT { 'terminator': None } index PACKET write_phonebook_req: * USTRING { 'terminator': None, 'default': '+CPBW=,' } +command * CSVINT +group * CSVSTRING { 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False } +mobile * CSVINT { 'default': 255 } +mobile_type * CSVSTRING { 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False } +home * CSVINT { 'default': 255 } +home_type * CSVSTRING { 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False } +office * CSVINT { 'default': 255 } +office_type * CSVSTRING { 'maxsizeinbytes': PB_NAME_LEN, 'raiseontruncate': False } +name * CSVSTRING { 'default': '', 'maxsizeinbytes': PB_EMAIL_LEN, 'raiseontruncate': False } +email * CSVSTRING { 'terminator': None, 'default': '', 'maxsizeinbytes': PB_MEMO_LEN, 'raiseontruncate': False } +memo PACKET write_sim_phonebook_req: * USTRING { 'terminator': None, 'default': '+CPBW=,' } +command * CSVINT { 'default': 0 } +group * CSVSTRING { 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False } +number * CSVINT { 'default': 255 } +number_type * CSVSTRING { 'terminator': None, 'maxsizeinbytes': PB_SIM_NAME_LEN, 'raiseontruncate': False } +name # Memo packets PACKET memo_read_req: * USTRING { 'terminator': None, 'default': MEMO_READ_CMD+'=' } +command * CSVINT { 'default': MEMO_MIN_INDEX } +start_index * CSVINT { 'terminator': None, 'default': MEMO_MAX_INDEX } +end_index PACKET memo_read_resp: * USTRING { 'terminator': ord(' '), 'constant': MEMO_READ_CMD+':' } command * CSVINT index * CSVSTRING { 'terminator': None } text PACKET memo_write_req: * USTRING { 'terminator': None, 'default': MEMO_WRITE_CMD+'=,' } +command * CSVSTRING { 'terminator': None } +text PACKET memo_del_req: * USTRING { 'terminator': None, 'default': MEMO_WRITE_CMD+'=' } +command * CSVINT { 'terminator': None } +index # SMS packets PACKET sms_format_req: * USTRING { 'terminator': None, 'default': SMS_FORMAT_CMD+'=' } +command * CSVINT { 'terminator': None, 'default': SMS_FORMAT_TEXT } +format PACKET sms_memory_select_req: * USTRING { 'terminator': None, 'default': SMS_MEMORY_SELECT_CMD+'=' } +command * CSVSTRING { 'terminator': None } +list_memory PACKET sms_msg_list_req: * USTRING { 'terminator': None, 'default': SMS_MSG_LIST_CMD+'=' } +command * CSVSTRING { 'terminator': None, 'default': SMS_MSG_ALL } +msg_type PACKET sms_msg_list_header: * USTRING { 'terminator': ord(' '), 'constant': SMS_MSG_LIST_CMD+':' } command * CSVINT index * CSVSTRING msg_type * CSVSTRING address * CSVSTRING address_name * SMSDATETIME timestamp * CSVINT address_type * CSVINT { 'terminator': None } data_len bitpim-1.0.7+dfsg1/src/phones/com_lgvx5400.py0000644001616600161660000000666010723434376016754 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgvx5400.py 4472 2007-11-29 03:58:54Z djpham $ """ Communicate with the LG VX5400 cell phone """ import common import com_lgvx8550 import p_lgvx8550 p_lgvx5400=p_lgvx8550 parentphone=com_lgvx8550.Phone class Phone(parentphone): desc="LG-VX5400" helpid=None protocolclass=p_lgvx5400 serialsname='lgvx5400' my_model='VX5400' builtinringtones= ('Low Beep Once', 'Low Beeps', 'Loud Beep Once', 'Loud Beeps', 'Door Bell', 'VZW Default Ringtone') + \ tuple(['Ringtone '+`n` for n in range(1,13)]) + \ ('No Ring',) ringtonelocations= ( # type index file default dir external dir max type index ('ringers', 'dload/myringtone.dat','brew/mod/10889/ringtones', '', 100, 0x01, 100), ( 'sounds', 'dload/mysound.dat', 'brew/mod/18067', '', 100, 0x02, None), ) wallpaperlocations= ( # type index file default dir external dir max type Index ( 'images', 'dload/image.dat', 'brew/mod/10888', '', 100, 0x00, 100), ) parentprofile=com_lgvx8550.Profile class Profile(parentprofile): phone_manufacturer='LG Electronics Inc' phone_model='VX5400' # inside screen resoluation WALLPAPER_WIDTH=128 WALLPAPER_HEIGHT=160 ringtoneorigins=('ringers', 'sounds') imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 128, 'height': 160, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 96, 'height': 64, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", {'width': 96, 'height': 64, 'format': "JPEG"})) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading ('memo', 'read', None), # all memo list reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('sms', 'write', 'OVERWRITE'), # all SMS list writing ('memo', 'write', 'OVERWRITE'), # all memo list writing ('t9_udb', 'write', 'OVERWRITE'), ) if __debug__: _supportedsyncs+=( ('t9_udb', 'read', 'OVERWRITE'), ) bitpim-1.0.7+dfsg1/src/phones/p_lgax8600.p0000644001616600161660000001467610754727641016236 0ustar amuamu### BITPIM ### ### ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### by David Ritter 7/10/07 ### Write to phonebook working msg ringtones not supported ### Write to Calendar, wallpaper, and ringtones is working %{ ##from common import PhoneBookBusyException from p_lgvx9900 import * from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * from p_brew import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb BREW_FILE_SYSTEM=2 NOMSGRINGTONE=1 NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=500 pb_file_name='pim/pbentry.dat' PHONE_ENCODING='iso-8859-1' # Media type MEDIA_TYPE_RINGTONE=0x0201 MEDIA_TYPE_IMAGE=0x400 MEDIA_TYPE_SOUND=0x0402 MEDIA_TYPE_SDIMAGE=0x0008 MEDIA_TYPE_SDSOUND=0x000C MEDIA_TYPE_VIDEO=0x0304 MEDIA_RINGTONE_DEFAULT_ICON=1 MEDIA_IMAGE_DEFAULT_ICON=0 MEDIA_VIDEO_DEFAULT_ICON=0 # need to call stat to get the file time/data broken_filelist_date=True # Calendar parameters NUMCALENDARENTRIES=300 # vx8100 uses a type based index for speed dials instead of positional like the vx4400 SPEEDDIALINDEX=1 MAXCALENDARDESCRIPTION=32 CALENDAR_HAS_SEPARATE_END_TIME_AND_DATE=0 %} # Misc stuff PACKET LockKeyReq: 1 UINT { 'default': 0x21 } +cmd 2 UINT { 'default': 0 } +lock "0=Lock, 1=Unlock" PACKET KeyPressReq: 1 UINT { 'default': 0x20 } +cmd 1 UINT { 'default': 0 } +hold 1 STRING { 'terminator': None, 'sizeinbytes': 1 } key PACKET indexentry: 2 UINT index 2 UINT type 256 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } filename "includes full pathname" 4 UINT {'default':0} +icon 4 UINT {'default': 0} +date "i think this is bitfield of the date" 4 UINT dunno 4 UINT {'default': 0} +size "size of the file, can be set to zero" 4 UINT dunno1 PACKET indexfile: "Used for tracking wallpaper and ringtones" * LIST {'elementclass': indexentry, 'createdefault': True} +items PACKET speeddial: 2 UINT {'default': 0xffff} +entry 1 UINT {'default': 0xff} +number PACKET speeddials: * LIST {'length': NUMSPEEDDIALS, 'elementclass': speeddial} +speeddials PACKET pbgroup: 23 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } name 2 UINT { 'default': 0xffff } +ringtone PACKET pbgroups: "Phonebook groups" * LIST {'elementclass': pbgroup} +groups PACKET pbinforequest: "Random information about the phone" * pbheader {'command': 0x15, 'flag': 0x01} +header 6 UNKNOWN +pad PACKET pbinforesponse: * pbheader header 10 UNKNOWN dunno1 4 UINT firstentry 2 UINT numentries # fields from this point on differ by model and are not decoded correctly * UNKNOWN dunno2 PACKET pbfileentry: 4 UINT serial1 2 UINT entrynumber 172 DATA data1 2 UINT ringtone 2 UINT group 2 UINT wallpaper 256 DATA data2 * UNKNOWN unknown PACKET pbfile: * LIST { 'elementclass': pbfileentry } items PACKET wallpaper_id: 80 USTRING { 'terminator': None, 'pad': 0xFF, 'default': "" } +path PACKET wallpaper_id_file: * LIST { 'length': NUMPHONEBOOKENTRIES, 'elementclass': wallpaper_id, 'createdefault': True } +items PACKET PathIndexEntry: 255 USTRING { 'encoding': PHONE_ENCODING, 'default': '' } +pathname PACKET PathIndexFile: * LIST { 'elementclass': PathIndexEntry, 'createdefault': True, 'length': NUMPHONEBOOKENTRIES } +items PACKET scheduleexception: 4 UINT pos "Refers to event id (position in schedule file) that this suppresses" 1 UINT day 1 UINT month 2 UINT year PACKET scheduleexceptionfile: * LIST {'elementclass': scheduleexception} +items PACKET scheduleevent: 4 UINT pos "position within file, used as an event id" 33 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } description 4 LGCALDATE start 4 LGCALDATE end 4 LGCALREPEAT repeat # complicated bit mapped field 1 UINT alarmindex_vibrate #LSBit of this set vibrate ON(0)/OFF(1), the 7 MSBits are the alarm index #the alarmindex is the index into the amount of time in advance of the #event to notify the user. It is directly related to the alarmminutes #and alarmhours below, valid values are # 8=2days, 7=1day, 6=2hours, 5=1hour, 4=15mins, 3=10mins, 2=5mins, 1=0mins, 0=NoAlarm 2 UINT ringtone 1 UINT alarmminutes "a value of 0xFF indicates not set" 1 UINT alarmhours "a value of 0xFF indicates not set" 1 UINT unknown1 2 UINT unknown2 PACKET schedulefile: 2 UINT numactiveitems * LIST {'elementclass': scheduleevent} +events PACKET ULReq: "" 1 UINT { 'default': 0xFE } +cmd 1 UINT { 'default': 0x00 } +unlock_code 4 UINT unlock_key 1 UINT { 'default': 0x00 } +zero PACKET ULRes: "" 1 UINT cmd 1 UINT unlock_code 4 UINT unlock_key 1 UINT unlock_ok # Text Memos. LG memo support is weak, it only supports the raw text and none of # the features that other phones support, when you run bitpim you see loads of # options that do not work in the vx8100 on the memo page PACKET textmemo: 151 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } text 4 LGCALDATE memotime # time the memo was writen LG time PACKET textmemofile: 4 UINT itemcount * LIST { 'elementclass': textmemo } +items PACKET call: 4 GPSDATE GPStime #no. of seconds since 0h 1-6-80, based off local time. 4 UINT unknown2 # different for each call 4 UINT duration #seconds, not certain about length of this field 49 USTRING {'raiseonunterminatedread': False} number 36 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 2 UINT numberlength # length of phone number 1 UINT pbnumbertype # 1=cell, 2=home, 3=office, 4=cell2, 5=fax, 6=vmail, 0xFF=not in phone book 3 UINT unknown2 # 2 UINT pbentrynum #entry number in phonebook 58 UINT unknown3 PACKET callhistory: 4 UINT numcalls 1 UINT unknown1 * LIST {'elementclass': call} +calls bitpim-1.0.7+dfsg1/src/phones/com_sanyo5300.py0000644001616600161660000000326510232320421017076 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_sanyo5300.py 2321 2005-04-23 01:12:49Z sawecw $ """Talk to the Sanyo SCP-5300 cell phone""" # my modules import common import p_sanyo5300 import com_brew import com_phone import com_sanyo import prototypes class Phone(com_sanyo.Phone): "Talk to the Sanyo SCP-5300 cell phone" desc="SCP-5300" protocolclass=p_sanyo5300 serialsname='scp5300' builtinringtones=( 'None', 'Vibrate', 'Ringer & Voice', '', '', '', '', '', '', 'Tone 1', 'Tone 2', 'Tone 3', 'Tone 4', 'Tone 5', 'Tone 6', 'Tone 7', 'Tone 8', '', '', '', '', '', '', '', '', '', '', '', '', 'HallelujahSamba', 'Amazing Grace', 'The Entertainer', 'Mozart Eine..', 'Canon', 'Chopin Waltz', 'Brahms Hungar..', 'Asian Jingle', 'Rodeo', 'Call Delivery', 'Toy Box' ) calendar_defaultringtone=0 calendar_tonerange=xrange(100,100) calendar_toneoffset=0 def __init__(self, logtarget, commport): com_sanyo.Phone.__init__(self, logtarget, commport) self.mode=self.MODENONE class Profile(com_sanyo.Profile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='SANYO' phone_model='SCP-5300/US' WALLPAPER_WIDTH=132 WALLPAPER_HEIGHT=144 OVERSIZE_PERCENTAGE=100 def __init__(self): com_sanyo.Profile.__init__(self) bitpim-1.0.7+dfsg1/src/phones/com_lgg4015.py0000644001616600161660000007623710661407437016554 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgg4015.py 4365 2007-08-17 21:11:59Z djpham $ """Communicate with the LG G4015 cell phone """ # standard modules import base64 import sha import time # BitPim modules import bpcalendar import common import commport import com_etsi import guihelper import helpids import memo import nameparser import p_lgg4015 import prototypes import sms class Phone(com_etsi.Phone): """ Talk to the LG G4015 Phone""" desc='LG-G4015' helpid=helpids.ID_PHONE_LGG4015 protocolclass=p_lgg4015 serialsname='lgg4015' def __init__(self, logtarget, commport): super(Phone,self).__init__(logtarget, commport) self.mode=self.MODENONE def getfundamentals(self, results): """Gets information fundamental to interoperating with the phone and UI. Currently this is: - 'uniqueserial' a unique serial number representing the phone - 'groups' the phonebook groups - 'wallpaper-index' map index numbers to names - 'ringtone-index' map index numbers to ringtone names This method is called before we read the phonebook data or before we write phonebook data. """ # use a hash of ESN and other stuff (being paranoid) self.setmode(self.MODEMODEM) self.log("Retrieving fundamental phone information") self.log("Reading phone serial number") results['uniqueserial']=sha.new(self.get_sim_id()).hexdigest() # now read groups self.log("Reading group information") results['groups']=self._get_groups() # getting rintone-index self.log('Reading Ringtone Index') results['ringtone-index']=self._get_ringtone_index() # getting wallpaper-index self.log('Reading Wallpaper Index') results['wallpaper-index']=self._get_wallpaper_index() # All done self.log("Fundamentals retrieved") return results def _get_groups(self): res={} self.charset_ascii() _req=self.protocolclass.list_group_req() for i in self.protocolclass.GROUP_INDEX_RANGE: _req.start_index=i _req.end_index=i try: _res=self.sendATcommand(_req, self.protocolclass.list_group_resp) if _res and _res[0].group_name: res[i]={ 'name': _res[0].group_name } except: if __debug__: raise return res def _ringtone_mode(self): _req=self.protocolclass.media_selector_set() _req.media_type=self.protocolclass.MEDIA_RINGTONE self.sendATcommand(_req, None) def _get_ringtone_index(self): """ Return the ringtone index""" res={} # Set the media type to be sound (ringtone) self.charset_ascii() self._ringtone_mode() # and read the list _req=self.protocolclass.media_list_req() _req.start_index=self.protocolclass.MIN_RINGTONE_INDEX _req.end_index=self.protocolclass.MAX_RINGTONE_INDEX _res=self.sendATcommand(_req, self.protocolclass.media_list_resp) for i,e in enumerate(_res): res[i]={ 'name': e.file_name, 'origin': 'ringtone' } return res def _wallpaper_mode(self): _req=self.protocolclass.media_selector_set() _req.media_type=self.protocolclass.MEDIA_WALLPAPER self.sendATcommand(_req, None) def _get_wallpaper_index(self): """ Return the wallpaper index""" res={} # Set the media type to be pic (wallpaper) self.charset_ascii() self._wallpaper_mode() # and read the list _req=self.protocolclass.media_list_req() _req.start_index=self.protocolclass.MIN_WALLPAPER_INDEX _req.end_index=self.protocolclass.MAX_WALLPAPER_INDEX _res=self.sendATcommand(_req, self.protocolclass.media_list_resp) for i,e in enumerate(_res): res[i]={ 'name': e.file_name, 'origin': 'wallpaper' } return res # Calendar stuff----------------------------------------------------------- cal_repeat_value={ protocolclass.CAL_REP_DAILY: bpcalendar.RepeatEntry.daily, protocolclass.CAL_REP_WEEKLY: bpcalendar.RepeatEntry.weekly, protocolclass.CAL_REP_MONTHLY: bpcalendar.RepeatEntry.monthly, protocolclass.CAL_REP_YEARLY: bpcalendar.RepeatEntry.yearly } cal_repeat_value_r={ bpcalendar.RepeatEntry.daily: protocolclass.CAL_REP_DAILY, bpcalendar.RepeatEntry.weekly: protocolclass.CAL_REP_WEEKLY, bpcalendar.RepeatEntry.monthly: protocolclass.CAL_REP_MONTHLY, bpcalendar.RepeatEntry.yearly: protocolclass.CAL_REP_YEARLY } def _build_bpcalendar_entry(self, phone_entry): entry=bpcalendar.CalendarEntry() entry.start=phone_entry.date+phone_entry.time entry.end=phone_entry.date+phone_entry.time entry.description=phone_entry.description entry.serials.append({ 'sourcetype': 'phone', 'id': phone_entry.index }) entry.alarm=self.protocolclass.CAL_ALARM_VALUE.get(phone_entry.alarm, -1) _rpt_type=self.cal_repeat_value.get(phone_entry.repeat, None) if _rpt_type: # this is a recurrent event rpt=bpcalendar.RepeatEntry(_rpt_type) if _rpt_type!=bpcalendar.RepeatEntry.yearly: rpt.interval=1 # repeat forever entry.end=bpcalendar.CalendarEntry.no_end_date entry.repeat=rpt return entry def getcalendar(self, result): self.log("Getting calendar entries") self.setmode(self.MODEMODEM) self.charset_ascii() res={} _req=self.protocolclass.calendar_read_req() _req.start_index=self.protocolclass.CAL_MIN_INDEX _req.end_index=self.protocolclass.CAL_MAX_INDEX _res=self.sendATcommand(_req, self.protocolclass.calendar_read_resp) for e in _res: try: _entry=self._build_bpcalendar_entry(e) res[_entry.id]=_entry except: if __debug__: raise result['calendar']=res return result def _build_phone_cal_entry(self, entry_count, bpentry): entry=self.protocolclass.calendar_write_req() entry.index=entry_count entry.date=bpentry.start[:3] if bpentry.allday: entry.time=(0,0) else: entry.time=bpentry.start[3:] entry.description=bpentry.description # setting the alarm _alarm=self.protocolclass.CAL_ALARM_NONE for e in self.protocolclass.CAL_ALARM_LIST: if bpentry.alarm>=e[0]: _alarm=e[1] break entry.alarm=_alarm # setting repeat value if bpentry.repeat: _rpt_type=self.cal_repeat_value_r.get(bpentry.repeat.repeat_type, self.protocolclass.CAL_REP_NONE) else: _rpt_type=self.protocolclass.CAL_REP_NONE entry.repeat=_rpt_type return entry def savecalendar(self, dict, merge): self.log('Saving calendar entries') self.setmode(self.MODEMODEM) self.charset_ascii() _cal_dict=dict['calendar'] _cal_list=[(x.start, k) for k,x in _cal_dict.items()] _cal_list.sort() _cal_list=_cal_list[:self.protocolclass.CAL_TOTAL_ENTRIES] _pre_write=self.protocolclass.calendar_write_check_req() for i,e in enumerate(_cal_list): _entry=self._build_phone_cal_entry(i, _cal_dict[e[1]]) self.progress(i, self.protocolclass.CAL_TOTAL_ENTRIES, 'Writing entry %d: %s'%(i, _entry.description)) try: try: self.sendATcommand(_entry, None) _success=True except: _success=False if not _success: try: self.sendATcommand(_pre_write, None) except: pass self.sendATcommand(_entry, None) except: if __debug__: raise _req=self.protocolclass.calendar_del_req() for i in range(len(_cal_list), self.protocolclass.CAL_TOTAL_ENTRIES): self.progress(i, self.protocolclass.CAL_TOTAL_ENTRIES, 'Deleting entry %d'%i) _req.index=i try: self.sendATcommand(_req, None) except: break return dict def charset_ascii(self): """ Set the phone charset to some form of ascii""" _req=self.protocolclass.charset_set_req() _req.charset=self.protocolclass.CHARSET_IRA self.sendATcommand(_req, None) def charset_base64(self): """ Set the phone charset to Base64 (for binary transmission)""" _req=self.protocolclass.charset_set_req() _req.charset=self.protocolclass.CHARSET_BASE64 self.sendATcommand(_req, None) # Detect Phone-------------------------------------------------------------- def is_mode_modem(self): try: self.comm.sendatcommand("Z") self.comm.sendatcommand('E0V1') return True except: return False def get_detect_data(self, r): # get detection data r['manufacturer']=self.get_manufacturer_id() r['model']=self.get_model_id() r['firmware_version']=self.get_firmware_version() r['esn']=self.get_sim_id() @classmethod def detectphone(_, coms, likely_ports, res, _module, _log): if not len(likely_ports): return None for port in likely_ports: if not res.has_key(port): res[port]={ 'mode_modem': None, 'mode_brew': None, 'manufacturer': None, 'model': None, 'firmware_version': None, 'esn': None, 'firmwareresponse': None } try: if res[port]['mode_modem']==False or \ res[port]['model']: continue p=Phone(_log, commport.CommConnection(_log, port, timeout=1)) if p.is_mode_modem(): res[port]['mode_modem']=True p.get_detect_data(res[port]) else: res[port]['mode_modem']=False except: # this port is not available if __debug__: raise # Phonebook stuff----------------------------------------------------------- def _build_bp_entry(self, entry, groups, in_sim=False): res={ 'names': [ { 'full': entry.name } ] } _numbers=[] if entry.mobile: _numbers.append({ 'number': entry.mobile, 'type': 'cell' }) if entry.home: _numbers.append({ 'number': entry.home, 'type': 'home' }) if entry.office: _numbers.append({ 'number': entry.office, 'type': 'office'}) if _numbers: res['numbers']=_numbers if entry.email: res['emails']=[{ 'email': entry.email }] if entry.memo: res['memos']=[{ 'memo': entry.memo }] _group=groups.get(entry.group, None) if _group and _group.get('name', None): res['categories']=[{ 'category': _group['name'] }] if entry.sim: res['flags']=[{ 'sim': in_sim }] return res def _get_main_phonebook(self, groups): """return a dict of contacts read off the phone storage area""" # switch to the phone storage _req=self.protocolclass.select_storage_req() _req.storage=self.protocolclass.PB_MEMORY_MAIN self.sendATcommand(_req, None) # read the entries _req=self.protocolclass.read_phonebook_req() _req.start_index=self.protocolclass.PB_MAIN_MIN_INDEX _req.end_index=self.protocolclass.PB_MAIN_MAX_INDEX _res=self.sendATcommand(_req, self.protocolclass.read_phonebook_resp) res={} for e in _res: res[e.index]=self._build_bp_entry(e, groups) return res def _get_sim_phonebook(self, groups): """return a dict of contacts read off the phone SIM card""" # switch to the phone storage _req=self.protocolclass.select_storage_req() _req.storage=self.protocolclass.PB_MEMORY_SIM self.sendATcommand(_req, None) # read the entries _req=self.protocolclass.read_phonebook_req() _req.start_index=self.protocolclass.PB_SIM_MIN_INDEX _req.end_index=self.protocolclass.PB_SIM_MAX_INDEX _res=self.sendATcommand(_req, self.protocolclass.read_sim_phonebook_resp) res={} for e in _res: res[1000+e.index]=self._build_bp_entry(e, groups, in_sim=True) return res def getphonebook(self,result): """Reads the phonebook data. The L{getfundamentals} information will already be in result.""" self.log('Getting phonebook') self.setmode(self.MODEMODEM) self.charset_ascii() _groups=result.get('groups', {}) pb_book=self._get_main_phonebook(_groups) pb_book.update(self._get_sim_phonebook(_groups)) result['phonebook']=pb_book return pb_book def _in_sim(self, entry): """ Return True if this entry has the sim flag set, indicating that it should be stored on the SIM card. """ for l in entry.get('flags', []): if l.has_key('sim'): return l['sim'] return False def _lookup_group(self, entry, groups): try: _name=entry['categories'][0]['category'] except: return 0 for k,e in groups.items(): if e['name']==_name: return k return 0 def _build_main_entry(self, entry, groups): _req=self.protocolclass.write_phonebook_req() _req.group=self._lookup_group(entry, groups) _req.name=nameparser.getfullname(entry['names'][0]) _req.email=entry.get('emails', [{'email': ''}])[0]['email'] _req.memo=entry.get('memos', [{'memo': ''}])[0]['memo'] for n in entry.get('numbers', []): _type=n['type'] _number=n['number'] if _type=='cell': _req.mobile=_number _req.mobile_type=129 elif _type=='home': _req.home=_number _req.home_type=129 elif _type=='office': _req.office=_number _req.office_type=129 return _req def _build_sim_entry(self, entry, groups): _req=self.protocolclass.write_sim_phonebook_req() _req.group=self._lookup_group(entry, groups) _req.name=nameparser.getfullname(entry['names'][0]) _number=entry.get('numbers', [{'number': ''}])[0]['number'] if _number: _req.number=_number _req.number_type=129 return _req def _save_main_phonebook(self, entries, groups): """ got the the phonebook dict and write them out to the phone""" # build the full names & SIM keys _pb_list=[(nameparser.getfullname(e['names'][0]), k) \ for k,e in entries.items() if not self._in_sim(e)] # sort alphabetical order _pb_list.sort() # switch to the main phone storage _req=self.protocolclass.select_storage_req() _req.storage=self.protocolclass.PB_MEMORY_MAIN self.sendATcommand(_req, None) _del_entry=self.protocolclass.del_phonebook_req() # send each entry to the phone _index=self.protocolclass.PB_MAIN_MIN_INDEX for l in _pb_list: _del_entry.index=_index _index+=1 self.sendATcommand(_del_entry, None) time.sleep(0.2) _req=self._build_main_entry(entries[l[1]], groups) self.progress(_index, self.protocolclass.PB_MAIN_MAX_INDEX, 'Writing entry %d: %s'%(_index, _req.name)) try: self.sendATcommand(_req, None) _retry=False except: _retry=True if _retry: try: self.sendATcommand(_req, None) except: self.log('Failed to write entry %d: %s'%(_index, _req.name)) time.sleep(0.2) # clear out the rest of the phonebook for i in range(_index, self.protocolclass.PB_MAIN_MAX_INDEX+1): self.progress(i, self.protocolclass.PB_MAIN_MAX_INDEX, 'Deleting entry %d'%i) try: _del_entry.index=i self.sendATcommand(_del_entry, None) continue except: self.log('Trying to delete entry %d'%i) try: self.sendATcommand(_del_entry, None) except: self.log('Failed to delete entry %d'%i) def _save_sim_phonebook(self, entries, groups): """ got the the phonebook dict and write them out to the phone""" # build the full names & SIM keys _pb_list=[(nameparser.getfullname(e['names'][0]), k) \ for k,e in entries.items() if self._in_sim(e)] # sort alphabetical order _pb_list.sort() # switch to the main phone storage _req=self.protocolclass.select_storage_req() _req.storage=self.protocolclass.PB_MEMORY_SIM self.sendATcommand(_req, None) _del_entry=self.protocolclass.del_phonebook_req() # send each entry to the phone _index=self.protocolclass.PB_SIM_MIN_INDEX for l in _pb_list: _del_entry.index=_index _index+=1 self.sendATcommand(_del_entry, None) time.sleep(0.2) _req=self._build_sim_entry(entries[l[1]], groups) self.progress(_index, self.protocolclass.PB_SIM_MAX_INDEX, 'Writing SIM entry %d: %s'%(_index, _req.name)) try: self.sendATcommand(_req, None) _retry=False except: _retry=True if _retry: try: self.sendATcommand(_req, None) except: self.log('Failed to write SIM entry %d: %s'%(_index, _req.name)) time.sleep(0.2) # clear out the rest of the phonebook for i in range(_index, self.protocolclass.PB_SIM_MAX_INDEX+1): self.progress(i, self.protocolclass.PB_SIM_MAX_INDEX, 'Deleting SIM entry %d'%i) try: _del_entry.index=i self.sendATcommand(_del_entry, None) continue except: self.log('Trying to delete entry %d'%i) try: self.sendATcommand(_del_entry, None) except: self.log('Failed to delete entry %d'%i) def savephonebook(self, data): "Saves out the phonebook" self.log('Writing phonebook') self.setmode(self.MODEMODEM) self.charset_ascii() pb_book=data.get('phonebook', {}) pb_groups=data.get('groups', {}) self._save_main_phonebook(pb_book, pb_groups) self._save_sim_phonebook(pb_book, pb_groups) return data # Ringtone stuff------------------------------------------------------------ def _del_media_files(self, names): self.charset_ascii() _req=self.protocolclass.del_media_req() for n in names: self.log('Deleting media %s'%n) _req.file_name=n try: self.sendATcommand(_req, None) except: self.log('Failed to delete media %s'%n) def _add_media_file(self, file_name, media_name, media_code, data): """ Add one media ringtone """ if not file_name or not media_name or not data: return False self.log('Writing media %s'%file_name) _media_name='' for s in media_name: _media_name+=s+'\x00' _cmd='AT+DDLW=0,"%s","%s",%d,%d,0,0,0,0\r' % \ (file_name, base64.encodestring(_media_name), len(data), media_code) _data64=base64.encodestring(data) self.comm.write(str(_cmd)) if self.comm.read(4)!='\r\n> ': return False for l in _data64.split('\n'): if l: self.comm.write(l+'\n') time.sleep(0.01) self.comm.write(str('\x1A')) return self.comm.read(6)=='\r\nOK\r\n' def _add_ringtones(self, names, name_dict, media): self.charset_base64() for n in names: _media_key=name_dict[n] if not self._add_media_file(n, common.stripext(n), 20, media[_media_key].get('data', '')): self.log('Failed to send ringtone %s'%n) self.charset_ascii() def saveringtones(self, result, merge): self.log('Saving ringtones') self.setmode(self.MODEMODEM) self.charset_ascii() self._ringtone_mode() media=result.get('ringtone', {}) media_index=result.get('ringtone-index', {}) media_names=[x['name'] for x in media.values()] index_names=[x['name'] for x in media_index.values()] del_names=[x for x in index_names if x not in media_names] new_names=[x for x in media_names if x not in index_names] # deleting files self._del_media_files(del_names) # and add new files names_to_keys={} for k,e in media.items(): names_to_keys[e['name']]=k self._add_ringtones(new_names, names_to_keys, media) return result def getringtones(self, result): self.log('Reading ringtones index') self.setmode(self.MODEMODEM) self.charset_ascii() self._ringtone_mode() media={} media_index=self._get_ringtone_index() for e in media_index.values(): media[e['name']]='dummy data' result['ringtone']=media result['ringtone-index']=media_index return result # Wallpaper stuff----------------------------------------------------------- def getwallpapers(self, result): self.log('Reading wallpaper index') self.setmode(self.MODEMODEM) self.charset_ascii() self._wallpaper_mode() media={} media_index=self._get_wallpaper_index() _dummy_data=file(guihelper.getresourcefile('wallpaper.png'),'rb').read() for e in media_index.values(): media[e['name']]=_dummy_data result['wallpapers']=media result['wallpaper-index']=media_index return result def _add_wallpapers(self, names, name_dict, media): self.charset_base64() for n in names: _media_key=name_dict[n] if not self._add_media_file(n, common.stripext(n), 12, media[_media_key].get('data', '')): self.log('Failed to send wallpaper %s'%n) self.charset_ascii() def savewallpapers(self, result, merge): self.log('Saving wallpapers') self.setmode(self.MODEMODEM) self.charset_ascii() self._wallpaper_mode() media=result.get('wallpapers', {}) media_index=result.get('wallpaper-index', {}) media_names=[x['name'] for x in media.values()] index_names=[x['name'] for x in media_index.values()] del_names=[x for x in index_names if x not in media_names] new_names=[x for x in media_names if x not in index_names] # deleting files self._del_media_files(del_names) # and add new files names_to_keys={} for k,e in media.items(): names_to_keys[e['name']]=k self._add_wallpapers(new_names, names_to_keys, media) return result # Memo stuff---------------------------------------------------------------- def getmemo(self, result): self.log('Reading Memo') self.setmode(self.MODEMODEM) self.charset_ascii() _req=self.protocolclass.memo_read_req() _res=self.sendATcommand(_req, self.protocolclass.memo_read_resp) res={} for e in _res: _memo=memo.MemoEntry() _memo.text=e.text res[_memo.id]=_memo result['memo']=res return res def savememo(self, result, merge): self.log('Writing Memo') self.setmode(self.MODEMODEM) self.charset_ascii() # first, delete all existing memos _req=self.protocolclass.memo_del_req() for i in range(self.protocolclass.MEMO_MIN_INDEX, self.protocolclass.MEMO_MAX_INDEX+1): _req.index=i try: self.sendATcommand(_req, None) except: pass # then update with new ones _memo_dict=result.get('memo', {}) _keys=_memo_dict.keys() _keys.sort() _req=self.protocolclass.memo_write_req() for k in _keys: _req.text=_memo_dict[k].text try: self.sendATcommand(_req, None) except: self.log('Failed to write memo %s'%_req.text) return _memo_dict # SMS Stuff----------------------------------------------------------------- def _process_sms(self, _resp, res): # extract the SMS messages from the respons string & update the dict for i in range(0, len(_resp), 2): try: _entry=self.protocolclass.sms_msg_list_header() _buf=prototypes.buffer(_resp[i]) _entry.readfrombuffer(_buf, logtitle="SMS #"+i) _sms=sms.SMSEntry() if _entry.msg_type==self.protocolclass.SMS_MSG_REC_UNREAD or \ _entry.msg_type==self.protocolclass.SMS_MSG_REC_READ: # unread/read inbox _sms._from=_entry.address _sms.folder=sms.SMSEntry.Folder_Inbox _sms.read=_entry.msg_type==self.protocolclass.SMS_MSG_REC_READ elif _entry.msg_type==self.protocolclass.SMS_MSG_STO_SENT: # outbox _sms.add_recipient(_entry.address) _sms.folder=sms.SMSEntry.Folder_Sent elif _entry.msg_type==self.protocolclass.SMS_MSG_STO_UNSENT: # saved _sms.folder=sms.SMSEntry.Folder_Saved _sms.add_recipient(_entry.address) else: self.log('Unknown message type: %s'%_entry.msg_type) _sms=None if _sms: if _entry.timestamp: _sms.datetime=_entry.timestamp _sms.text=_resp[i+1] res[_sms.id]=_sms except: if __debug__: raise return res def getsms(self, result): self.log('Getting SMS Messages') self.setmode(self.MODEMODEM) self.charset_ascii() res={} # set format to text _req=self.protocolclass.sms_format_req() self.sendATcommand(_req, None) self.log('Getting SMS messages from the phone memory') _sms_mem=self.protocolclass.sms_memory_select_req() _sms_mem.list_memory=self.protocolclass.SMS_MEMORY_PHONE self.sendATcommand(_sms_mem, None) _list_sms=self.protocolclass.sms_msg_list_req() _resp=self.sendATcommand(_list_sms, None) self._process_sms(_resp, res) self.log('Getting SMS message from the SIM card') _sms_mem.list_memory=self.protocolclass.SMS_MEMORY_SIM self.sendATcommand(_sms_mem, None) _resp=self.sendATcommand(_list_sms, None) self._process_sms(_resp, res) try: # this is to clear the next error self.sendATcommand(_sms_mem, None) except commport.ATError: pass result['sms']=res return result # Call History stuff-------------------------------------------------------- def _get_history_calls(self, log_str, call_type, min_idx, max_idx): self.log(log_str) _sel_mem=self.protocolclass.select_storage_req() _sel_mem.storage=call_type self.sendATcommand(_sel_mem, None) _list_pb=self.protocolclass.read_phonebook_req() _list_pb.start_index=min_idx _list_pb.end_index=max_idx self.sendATcommand(_list_pb, None) def getcallhistory(self, result): self.log('Getting Call History') self.setmode(self.MODEMODEM) self.charset_ascii() res={} for l in self.protocolclass.PB_CALL_HISTORY_INFO: self._get_history_calls(*l) result['call_history']=res return result #------------------------------------------------------------------------------- parent_profile=com_etsi.Profile class Profile(parent_profile): serialsname=Phone.serialsname WALLPAPER_WIDTH=128 WALLPAPER_HEIGHT=128 MAX_WALLPAPER_BASENAME_LENGTH=19 WALLPAPER_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789_ ." WALLPAPER_CONVERT_FORMAT="jpg" MAX_RINGTONE_BASENAME_LENGTH=19 RINGTONE_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789_ ." RINGTONE_LIMITS= { 'MAXSIZE': 20480 } # use for auto-detection phone_manufacturer='LGE' phone_model='G4015' usbids=( ( 0x10AB, 0x10C5, 1), ) deviceclasses=("serial",) imageorigins={} imageorigins.update(common.getkv(parent_profile.stockimageorigins, "images")) imagetargets={} imagetargets.update(common.getkv(parent_profile.stockimagetargets, "wallpaper", {'width': 128, 'height': 128, 'format': "JPEG"})) def GetImageOrigins(self): # Note: only return origins that you can write back to the phone return self.imageorigins def GetTargetsForImageOrigin(self, origin): # right now, supporting just 'images' origin if origin=='images': return self.imagetargets def __init__(self): parent_profile.__init__(self) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'read', None), # all calendar reading ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('ringtone', 'read', None), # all ringtone reading ('ringtone', 'write', 'OVERWRITE'), ('wallpaper', 'read', None), # all wallpaper reading ('wallpaper', 'write', 'OVERWRITE'), ('memo', 'read', None), # all memo list reading DJP ('memo', 'write', 'OVERWRITE'), # all memo list writing DJP ('sms', 'read', None), # all SMS list reading DJP ('call_history', 'read', None), ) def convertphonebooktophone(self, helper, data): return data bitpim-1.0.7+dfsg1/src/phones/p_brew.py0000644001616600161660000073217411020635611016073 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data used in Brew Protocol""" from prototypes import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb new_fileopen_mode_read=0 new_fileopen_mode_write=0x41 new_fileopen_flag_existing=0 new_fileopen_flag_create=1 import com_brew DEFAULT_PHONE_ENCODING='ascii' PHONE_ENCODING=DEFAULT_PHONE_ENCODING # These parameters only work with BREW2 at the moment. # Note about read block size: # - Largest successful read size: 1KB # - The LG VX-8700 returns 1KB of data if req.bytes >= 1KB. # - If all phones behave in this way it would be safe to change the default read size to 1KB. BREW_READ_SIZE=0xEB # Note about write block size: # - Largest successful write size: 7.9kB # - Too large a write block will cause a timeout error. BREW_WRITE_SIZE=0xEA class requestheader(BaseProtogenClass): "The bit in front on all Brew request packets" __fields=['commandmode', 'command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(requestheader,self).__init__(**dict) if self.__class__ is requestheader: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(requestheader,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(requestheader,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_commandmode except: self.__field_commandmode=UINT(**{'sizeinbytes': 1, 'constant': 0x59}) self.__field_commandmode.writetobuffer(buf) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_commandmode=UINT(**{'sizeinbytes': 1, 'constant': 0x59}) self.__field_commandmode.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_commandmode(self): try: self.__field_commandmode except: self.__field_commandmode=UINT(**{'sizeinbytes': 1, 'constant': 0x59}) return self.__field_commandmode.getvalue() def __setfield_commandmode(self, value): if isinstance(value,UINT): self.__field_commandmode=value else: self.__field_commandmode=UINT(value,**{'sizeinbytes': 1, 'constant': 0x59}) def __delfield_commandmode(self): del self.__field_commandmode commandmode=property(__getfield_commandmode, __setfield_commandmode, __delfield_commandmode, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('commandmode', self.__field_commandmode, None) yield ('command', self.__field_command, None) class responseheader(BaseProtogenClass): "The bit in front on all Brew response packets" __fields=['commandmode', 'command', 'errorcode'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(responseheader,self).__init__(**dict) if self.__class__ is responseheader: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(responseheader,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(responseheader,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_commandmode.writetobuffer(buf) self.__field_command.writetobuffer(buf) self.__field_errorcode.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_commandmode=UINT(**{'sizeinbytes': 1, 'constant': 0x59}) self.__field_commandmode.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_errorcode=UINT(**{'sizeinbytes': 1}) self.__field_errorcode.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_commandmode(self): return self.__field_commandmode.getvalue() def __setfield_commandmode(self, value): if isinstance(value,UINT): self.__field_commandmode=value else: self.__field_commandmode=UINT(value,**{'sizeinbytes': 1, 'constant': 0x59}) def __delfield_commandmode(self): del self.__field_commandmode commandmode=property(__getfield_commandmode, __setfield_commandmode, __delfield_commandmode, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_errorcode(self): return self.__field_errorcode.getvalue() def __setfield_errorcode(self, value): if isinstance(value,UINT): self.__field_errorcode=value else: self.__field_errorcode=UINT(value,**{'sizeinbytes': 1}) def __delfield_errorcode(self): del self.__field_errorcode errorcode=property(__getfield_errorcode, __setfield_errorcode, __delfield_errorcode, None) def iscontainer(self): return True def containerelements(self): yield ('commandmode', self.__field_commandmode, None) yield ('command', self.__field_command, None) yield ('errorcode', self.__field_errorcode, None) class readfilerequest(BaseProtogenClass): __fields=['header', 'blocknumber', 'filename'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(readfilerequest,self).__init__(**dict) if self.__class__ is readfilerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(readfilerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(readfilerequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=requestheader(**{'command': 0x04}) self.__field_header.writetobuffer(buf) try: self.__field_blocknumber except: self.__field_blocknumber=UINT(**{'sizeinbytes': 1, 'constant': 0}) self.__field_blocknumber.writetobuffer(buf) self.__field_filename.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=requestheader(**{'command': 0x04}) self.__field_header.readfrombuffer(buf) self.__field_blocknumber=UINT(**{'sizeinbytes': 1, 'constant': 0}) self.__field_blocknumber.readfrombuffer(buf) self.__field_filename=USTRING(**{'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING }) self.__field_filename.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=requestheader(**{'command': 0x04}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,requestheader): self.__field_header=value else: self.__field_header=requestheader(value,**{'command': 0x04}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_blocknumber(self): try: self.__field_blocknumber except: self.__field_blocknumber=UINT(**{'sizeinbytes': 1, 'constant': 0}) return self.__field_blocknumber.getvalue() def __setfield_blocknumber(self, value): if isinstance(value,UINT): self.__field_blocknumber=value else: self.__field_blocknumber=UINT(value,**{'sizeinbytes': 1, 'constant': 0}) def __delfield_blocknumber(self): del self.__field_blocknumber blocknumber=property(__getfield_blocknumber, __setfield_blocknumber, __delfield_blocknumber, None) def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING }) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('blocknumber', self.__field_blocknumber, None) yield ('filename', self.__field_filename, None) class readfileresponse(BaseProtogenClass): __fields=['header', 'blockcounter', 'thereismore', 'filesize', 'datasize', 'data'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(readfileresponse,self).__init__(**dict) if self.__class__ is readfileresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(readfileresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(readfileresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_blockcounter.writetobuffer(buf) self.__field_thereismore.writetobuffer(buf) self.__field_filesize.writetobuffer(buf) self.__field_datasize.writetobuffer(buf) self.__field_data.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=responseheader() self.__field_header.readfrombuffer(buf) self.__field_blockcounter=UINT(**{'sizeinbytes': 1}) self.__field_blockcounter.readfrombuffer(buf) self.__field_thereismore=BOOL(**{'sizeinbytes': 1}) self.__field_thereismore.readfrombuffer(buf) self.__field_filesize=UINT(**{'sizeinbytes': 4}) self.__field_filesize.readfrombuffer(buf) self.__field_datasize=UINT(**{'sizeinbytes': 2}) self.__field_datasize.readfrombuffer(buf) self.__field_data=DATA(**{'sizeinbytes': self.datasize}) self.__field_data.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,responseheader): self.__field_header=value else: self.__field_header=responseheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_blockcounter(self): return self.__field_blockcounter.getvalue() def __setfield_blockcounter(self, value): if isinstance(value,UINT): self.__field_blockcounter=value else: self.__field_blockcounter=UINT(value,**{'sizeinbytes': 1}) def __delfield_blockcounter(self): del self.__field_blockcounter blockcounter=property(__getfield_blockcounter, __setfield_blockcounter, __delfield_blockcounter, None) def __getfield_thereismore(self): return self.__field_thereismore.getvalue() def __setfield_thereismore(self, value): if isinstance(value,BOOL): self.__field_thereismore=value else: self.__field_thereismore=BOOL(value,**{'sizeinbytes': 1}) def __delfield_thereismore(self): del self.__field_thereismore thereismore=property(__getfield_thereismore, __setfield_thereismore, __delfield_thereismore, "true if there is more data available after this block") def __getfield_filesize(self): return self.__field_filesize.getvalue() def __setfield_filesize(self, value): if isinstance(value,UINT): self.__field_filesize=value else: self.__field_filesize=UINT(value,**{'sizeinbytes': 4}) def __delfield_filesize(self): del self.__field_filesize filesize=property(__getfield_filesize, __setfield_filesize, __delfield_filesize, None) def __getfield_datasize(self): return self.__field_datasize.getvalue() def __setfield_datasize(self, value): if isinstance(value,UINT): self.__field_datasize=value else: self.__field_datasize=UINT(value,**{'sizeinbytes': 2}) def __delfield_datasize(self): del self.__field_datasize datasize=property(__getfield_datasize, __setfield_datasize, __delfield_datasize, None) def __getfield_data(self): return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,DATA): self.__field_data=value else: self.__field_data=DATA(value,**{'sizeinbytes': self.datasize}) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('blockcounter', self.__field_blockcounter, None) yield ('thereismore', self.__field_thereismore, "true if there is more data available after this block") yield ('filesize', self.__field_filesize, None) yield ('datasize', self.__field_datasize, None) yield ('data', self.__field_data, None) class readfileblockrequest(BaseProtogenClass): __fields=['header', 'blockcounter'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(readfileblockrequest,self).__init__(**dict) if self.__class__ is readfileblockrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(readfileblockrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(readfileblockrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=requestheader(**{'command': 0x04}) self.__field_header.writetobuffer(buf) self.__field_blockcounter.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=requestheader(**{'command': 0x04}) self.__field_header.readfrombuffer(buf) self.__field_blockcounter=UINT(**{'sizeinbytes': 1}) self.__field_blockcounter.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=requestheader(**{'command': 0x04}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,requestheader): self.__field_header=value else: self.__field_header=requestheader(value,**{'command': 0x04}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_blockcounter(self): return self.__field_blockcounter.getvalue() def __setfield_blockcounter(self, value): if isinstance(value,UINT): self.__field_blockcounter=value else: self.__field_blockcounter=UINT(value,**{'sizeinbytes': 1}) def __delfield_blockcounter(self): del self.__field_blockcounter blockcounter=property(__getfield_blockcounter, __setfield_blockcounter, __delfield_blockcounter, "always greater than zero, increment with each request, loop to 0x01 from 0xff") def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('blockcounter', self.__field_blockcounter, "always greater than zero, increment with each request, loop to 0x01 from 0xff") class readfileblockresponse(BaseProtogenClass): __fields=['header', 'blockcounter', 'thereismore', 'datasize', 'data'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(readfileblockresponse,self).__init__(**dict) if self.__class__ is readfileblockresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(readfileblockresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(readfileblockresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_blockcounter.writetobuffer(buf) self.__field_thereismore.writetobuffer(buf) self.__field_datasize.writetobuffer(buf) self.__field_data.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=responseheader() self.__field_header.readfrombuffer(buf) self.__field_blockcounter=UINT(**{'sizeinbytes': 1}) self.__field_blockcounter.readfrombuffer(buf) self.__field_thereismore=BOOL(**{'sizeinbytes': 1}) self.__field_thereismore.readfrombuffer(buf) self.__field_datasize=UINT(**{'sizeinbytes': 2}) self.__field_datasize.readfrombuffer(buf) self.__field_data=DATA(**{'sizeinbytes': self.datasize}) self.__field_data.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,responseheader): self.__field_header=value else: self.__field_header=responseheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_blockcounter(self): return self.__field_blockcounter.getvalue() def __setfield_blockcounter(self, value): if isinstance(value,UINT): self.__field_blockcounter=value else: self.__field_blockcounter=UINT(value,**{'sizeinbytes': 1}) def __delfield_blockcounter(self): del self.__field_blockcounter blockcounter=property(__getfield_blockcounter, __setfield_blockcounter, __delfield_blockcounter, None) def __getfield_thereismore(self): return self.__field_thereismore.getvalue() def __setfield_thereismore(self, value): if isinstance(value,BOOL): self.__field_thereismore=value else: self.__field_thereismore=BOOL(value,**{'sizeinbytes': 1}) def __delfield_thereismore(self): del self.__field_thereismore thereismore=property(__getfield_thereismore, __setfield_thereismore, __delfield_thereismore, "true if there is more data available after this block") def __getfield_datasize(self): return self.__field_datasize.getvalue() def __setfield_datasize(self, value): if isinstance(value,UINT): self.__field_datasize=value else: self.__field_datasize=UINT(value,**{'sizeinbytes': 2}) def __delfield_datasize(self): del self.__field_datasize datasize=property(__getfield_datasize, __setfield_datasize, __delfield_datasize, None) def __getfield_data(self): return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,DATA): self.__field_data=value else: self.__field_data=DATA(value,**{'sizeinbytes': self.datasize}) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('blockcounter', self.__field_blockcounter, None) yield ('thereismore', self.__field_thereismore, "true if there is more data available after this block") yield ('datasize', self.__field_datasize, None) yield ('data', self.__field_data, None) class writefilerequest(BaseProtogenClass): __fields=['header', 'blockcounter', 'thereismore', 'unknown1', 'filesize', 'unknown2', 'filename', 'datalen', 'data'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(writefilerequest,self).__init__(**dict) if self.__class__ is writefilerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(writefilerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(writefilerequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=requestheader(**{'command': 0x05}) self.__field_header.writetobuffer(buf) try: self.__field_blockcounter except: self.__field_blockcounter=UINT(**{'sizeinbytes': 1, 'value': 0}) self.__field_blockcounter.writetobuffer(buf) try: self.__field_thereismore except: self.__field_thereismore=BOOL(**{'sizeinbytes': 1, 'value': self.filesize>0x100}) self.__field_thereismore.writetobuffer(buf) try: self.__field_unknown1 except: self.__field_unknown1=UINT(**{'sizeinbytes': 1, 'constant': 1}) self.__field_unknown1.writetobuffer(buf) self.__field_filesize.writetobuffer(buf) try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 4, 'constant': 0x000100ff}) self.__field_unknown2.writetobuffer(buf) self.__field_filename.writetobuffer(buf) try: self.__field_datalen except: self.__field_datalen=UINT(**{'sizeinbytes': 2, 'value': len(self.data)}) self.__field_datalen.writetobuffer(buf) self.__field_data.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=requestheader(**{'command': 0x05}) self.__field_header.readfrombuffer(buf) self.__field_blockcounter=UINT(**{'sizeinbytes': 1, 'value': 0}) self.__field_blockcounter.readfrombuffer(buf) self.__field_thereismore=BOOL(**{'sizeinbytes': 1}) self.__field_thereismore.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1, 'constant': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_filesize=UINT(**{'sizeinbytes': 4}) self.__field_filesize.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 4, 'constant': 0x000100ff}) self.__field_unknown2.readfrombuffer(buf) self.__field_filename=USTRING(**{'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING }) self.__field_filename.readfrombuffer(buf) self.__field_datalen=UINT(**{'sizeinbytes': 2}) self.__field_datalen.readfrombuffer(buf) self.__field_data=DATA() self.__field_data.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=requestheader(**{'command': 0x05}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,requestheader): self.__field_header=value else: self.__field_header=requestheader(value,**{'command': 0x05}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_blockcounter(self): try: self.__field_blockcounter except: self.__field_blockcounter=UINT(**{'sizeinbytes': 1, 'value': 0}) return self.__field_blockcounter.getvalue() def __setfield_blockcounter(self, value): if isinstance(value,UINT): self.__field_blockcounter=value else: self.__field_blockcounter=UINT(value,**{'sizeinbytes': 1, 'value': 0}) def __delfield_blockcounter(self): del self.__field_blockcounter blockcounter=property(__getfield_blockcounter, __setfield_blockcounter, __delfield_blockcounter, None) def __getfield_thereismore(self): try: self.__field_thereismore except: self.__field_thereismore=BOOL(**{'sizeinbytes': 1}) return self.__field_thereismore.getvalue() def __setfield_thereismore(self, value): if isinstance(value,BOOL): self.__field_thereismore=value else: self.__field_thereismore=BOOL(value,**{'sizeinbytes': 1, 'value': self.filesize>0x100}) def __delfield_thereismore(self): del self.__field_thereismore thereismore=property(__getfield_thereismore, __setfield_thereismore, __delfield_thereismore, None) def __getfield_unknown1(self): try: self.__field_unknown1 except: self.__field_unknown1=UINT(**{'sizeinbytes': 1, 'constant': 1}) return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1, 'constant': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_filesize(self): return self.__field_filesize.getvalue() def __setfield_filesize(self, value): if isinstance(value,UINT): self.__field_filesize=value else: self.__field_filesize=UINT(value,**{'sizeinbytes': 4}) def __delfield_filesize(self): del self.__field_filesize filesize=property(__getfield_filesize, __setfield_filesize, __delfield_filesize, None) def __getfield_unknown2(self): try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 4, 'constant': 0x000100ff}) return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 4, 'constant': 0x000100ff}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, "probably file attributes") def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING }) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, None) def __getfield_datalen(self): try: self.__field_datalen except: self.__field_datalen=UINT(**{'sizeinbytes': 2}) return self.__field_datalen.getvalue() def __setfield_datalen(self, value): if isinstance(value,UINT): self.__field_datalen=value else: self.__field_datalen=UINT(value,**{'sizeinbytes': 2, 'value': len(self.data)}) def __delfield_datalen(self): del self.__field_datalen datalen=property(__getfield_datalen, __setfield_datalen, __delfield_datalen, None) def __getfield_data(self): return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,DATA): self.__field_data=value else: self.__field_data=DATA(value,) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('blockcounter', self.__field_blockcounter, None) yield ('thereismore', self.__field_thereismore, None) yield ('unknown1', self.__field_unknown1, None) yield ('filesize', self.__field_filesize, None) yield ('unknown2', self.__field_unknown2, "probably file attributes") yield ('filename', self.__field_filename, None) yield ('datalen', self.__field_datalen, None) yield ('data', self.__field_data, None) class writefileblockrequest(BaseProtogenClass): __fields=['header', 'blockcounter', 'thereismore', 'datalen', 'data'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(writefileblockrequest,self).__init__(**dict) if self.__class__ is writefileblockrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(writefileblockrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(writefileblockrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=requestheader(**{'command': 0x05}) self.__field_header.writetobuffer(buf) self.__field_blockcounter.writetobuffer(buf) self.__field_thereismore.writetobuffer(buf) try: self.__field_datalen except: self.__field_datalen=UINT(**{'sizeinbytes': 2, 'value': len(self.data)}) self.__field_datalen.writetobuffer(buf) self.__field_data.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=requestheader(**{'command': 0x05}) self.__field_header.readfrombuffer(buf) self.__field_blockcounter=UINT(**{'sizeinbytes': 1}) self.__field_blockcounter.readfrombuffer(buf) self.__field_thereismore=BOOL(**{'sizeinbytes': 1}) self.__field_thereismore.readfrombuffer(buf) self.__field_datalen=UINT(**{'sizeinbytes': 2}) self.__field_datalen.readfrombuffer(buf) self.__field_data=DATA() self.__field_data.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=requestheader(**{'command': 0x05}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,requestheader): self.__field_header=value else: self.__field_header=requestheader(value,**{'command': 0x05}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_blockcounter(self): return self.__field_blockcounter.getvalue() def __setfield_blockcounter(self, value): if isinstance(value,UINT): self.__field_blockcounter=value else: self.__field_blockcounter=UINT(value,**{'sizeinbytes': 1}) def __delfield_blockcounter(self): del self.__field_blockcounter blockcounter=property(__getfield_blockcounter, __setfield_blockcounter, __delfield_blockcounter, None) def __getfield_thereismore(self): return self.__field_thereismore.getvalue() def __setfield_thereismore(self, value): if isinstance(value,BOOL): self.__field_thereismore=value else: self.__field_thereismore=BOOL(value,**{'sizeinbytes': 1}) def __delfield_thereismore(self): del self.__field_thereismore thereismore=property(__getfield_thereismore, __setfield_thereismore, __delfield_thereismore, None) def __getfield_datalen(self): try: self.__field_datalen except: self.__field_datalen=UINT(**{'sizeinbytes': 2}) return self.__field_datalen.getvalue() def __setfield_datalen(self, value): if isinstance(value,UINT): self.__field_datalen=value else: self.__field_datalen=UINT(value,**{'sizeinbytes': 2, 'value': len(self.data)}) def __delfield_datalen(self): del self.__field_datalen datalen=property(__getfield_datalen, __setfield_datalen, __delfield_datalen, None) def __getfield_data(self): return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,DATA): self.__field_data=value else: self.__field_data=DATA(value,) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('blockcounter', self.__field_blockcounter, None) yield ('thereismore', self.__field_thereismore, None) yield ('datalen', self.__field_datalen, None) yield ('data', self.__field_data, None) class listdirectoriesrequest(BaseProtogenClass): "Lists the subdirectories of dirname" __fields=['header', 'dirname'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(listdirectoriesrequest,self).__init__(**dict) if self.__class__ is listdirectoriesrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(listdirectoriesrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(listdirectoriesrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=requestheader(**{'command': 0x02}) self.__field_header.writetobuffer(buf) self.__field_dirname.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=requestheader(**{'command': 0x02}) self.__field_header.readfrombuffer(buf) self.__field_dirname=USTRING(**{'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING }) self.__field_dirname.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=requestheader(**{'command': 0x02}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,requestheader): self.__field_header=value else: self.__field_header=requestheader(value,**{'command': 0x02}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_dirname(self): return self.__field_dirname.getvalue() def __setfield_dirname(self, value): if isinstance(value,USTRING): self.__field_dirname=value else: self.__field_dirname=USTRING(value,**{'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING }) def __delfield_dirname(self): del self.__field_dirname dirname=property(__getfield_dirname, __setfield_dirname, __delfield_dirname, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('dirname', self.__field_dirname, None) class listdirectoriesresponse(BaseProtogenClass): __fields=['header', 'numentries', 'datalen', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(listdirectoriesresponse,self).__init__(**dict) if self.__class__ is listdirectoriesresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(listdirectoriesresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(listdirectoriesresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_numentries.writetobuffer(buf) if self.numentries>0: self.__field_datalen.writetobuffer(buf) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=responseheader() self.__field_header.readfrombuffer(buf) self.__field_numentries=UINT(**{'sizeinbytes': 2}) self.__field_numentries.readfrombuffer(buf) if self.numentries>0: self.__field_datalen=UINT(**{'sizeinbytes': 2}) self.__field_datalen.readfrombuffer(buf) self.__field_items=LIST(**{'elementclass': _gen_p_brew_114, 'length': self.numentries}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,responseheader): self.__field_header=value else: self.__field_header=responseheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_numentries(self): return self.__field_numentries.getvalue() def __setfield_numentries(self, value): if isinstance(value,UINT): self.__field_numentries=value else: self.__field_numentries=UINT(value,**{'sizeinbytes': 2}) def __delfield_numentries(self): del self.__field_numentries numentries=property(__getfield_numentries, __setfield_numentries, __delfield_numentries, None) def __getfield_datalen(self): return self.__field_datalen.getvalue() def __setfield_datalen(self, value): if isinstance(value,UINT): self.__field_datalen=value else: self.__field_datalen=UINT(value,**{'sizeinbytes': 2}) def __delfield_datalen(self): del self.__field_datalen datalen=property(__getfield_datalen, __setfield_datalen, __delfield_datalen, None) def __getfield_items(self): return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': _gen_p_brew_114, 'length': self.numentries}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('numentries', self.__field_numentries, None) if self.numentries>0: yield ('datalen', self.__field_datalen, None) yield ('items', self.__field_items, None) class _gen_p_brew_114(BaseProtogenClass): 'Anonymous inner class' __fields=['subdir'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_brew_114,self).__init__(**dict) if self.__class__ is _gen_p_brew_114: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_brew_114,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_brew_114,kwargs) if len(args): dict2={ 'encoding': PHONE_ENCODING } dict2.update(kwargs) kwargs=dict2 self.__field_subdir=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_subdir.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_subdir=USTRING(**{ 'encoding': PHONE_ENCODING }) self.__field_subdir.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_subdir(self): return self.__field_subdir.getvalue() def __setfield_subdir(self, value): if isinstance(value,USTRING): self.__field_subdir=value else: self.__field_subdir=USTRING(value,**{ 'encoding': PHONE_ENCODING }) def __delfield_subdir(self): del self.__field_subdir subdir=property(__getfield_subdir, __setfield_subdir, __delfield_subdir, None) def iscontainer(self): return True def containerelements(self): yield ('subdir', self.__field_subdir, None) class listfilerequest(BaseProtogenClass): "This gets one directory entry (files only) at a time" __fields=['header', 'entrynumber', 'dirname'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(listfilerequest,self).__init__(**dict) if self.__class__ is listfilerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(listfilerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(listfilerequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=requestheader(**{'command': 0x0b}) self.__field_header.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_dirname.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=requestheader(**{'command': 0x0b}) self.__field_header.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 4}) self.__field_entrynumber.readfrombuffer(buf) self.__field_dirname=USTRING(**{'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING }) self.__field_dirname.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=requestheader(**{'command': 0x0b}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,requestheader): self.__field_header=value else: self.__field_header=requestheader(value,**{'command': 0x0b}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 4}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_dirname(self): return self.__field_dirname.getvalue() def __setfield_dirname(self, value): if isinstance(value,USTRING): self.__field_dirname=value else: self.__field_dirname=USTRING(value,**{'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING }) def __delfield_dirname(self): del self.__field_dirname dirname=property(__getfield_dirname, __setfield_dirname, __delfield_dirname, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('dirname', self.__field_dirname, None) class listfileresponse(BaseProtogenClass): __fields=['header', 'entrynumber', 'unknown1', 'date', 'size', 'unknown2', 'spuriouszero', 'dirnamelen', 'extrazero', 'filename'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(listfileresponse,self).__init__(**dict) if self.__class__ is listfileresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(listfileresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(listfileresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_date.writetobuffer(buf) self.__field_size.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_spuriouszero.writetobuffer(buf) self.__field_dirnamelen.writetobuffer(buf) self.__field_extrazero.writetobuffer(buf) self.__field_filename.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=responseheader() self.__field_header.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 4}) self.__field_entrynumber.readfrombuffer(buf) self.__field_unknown1=UNKNOWN(**{'sizeinbytes': 4}) self.__field_unknown1.readfrombuffer(buf) self.__field_date=UINT(**{'sizeinbytes': 4}) self.__field_date.readfrombuffer(buf) self.__field_size=UINT(**{'sizeinbytes': 4}) self.__field_size.readfrombuffer(buf) self.__field_unknown2=UNKNOWN(**{'sizeinbytes': 4}) self.__field_unknown2.readfrombuffer(buf) self.__field_spuriouszero=com_brew.SPURIOUSZERO() self.__field_spuriouszero.readfrombuffer(buf) self.__field_dirnamelen=UINT(**{'sizeinbytes': 1}) self.__field_dirnamelen.readfrombuffer(buf) self.__field_extrazero=com_brew.EXTRAZERO() self.__field_extrazero.readfrombuffer(buf) self.__field_filename=USTRING(**{'terminator': None, 'pascal': True, 'encoding': PHONE_ENCODING }) self.__field_filename.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,responseheader): self.__field_header=value else: self.__field_header=responseheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 4}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UNKNOWN): self.__field_unknown1=value else: self.__field_unknown1=UNKNOWN(value,**{'sizeinbytes': 4}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, "probably the file attributes") def __getfield_date(self): return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,UINT): self.__field_date=value else: self.__field_date=UINT(value,**{'sizeinbytes': 4}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, None) def __getfield_size(self): return self.__field_size.getvalue() def __setfield_size(self, value): if isinstance(value,UINT): self.__field_size=value else: self.__field_size=UINT(value,**{'sizeinbytes': 4}) def __delfield_size(self): del self.__field_size size=property(__getfield_size, __setfield_size, __delfield_size, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UNKNOWN): self.__field_unknown2=value else: self.__field_unknown2=UNKNOWN(value,**{'sizeinbytes': 4}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_spuriouszero(self): return self.__field_spuriouszero.getvalue() def __setfield_spuriouszero(self, value): if isinstance(value,com_brew.SPURIOUSZERO): self.__field_spuriouszero=value else: self.__field_spuriouszero=com_brew.SPURIOUSZERO(value,) def __delfield_spuriouszero(self): del self.__field_spuriouszero spuriouszero=property(__getfield_spuriouszero, __setfield_spuriouszero, __delfield_spuriouszero, "on some models there is a zero here") def __getfield_dirnamelen(self): return self.__field_dirnamelen.getvalue() def __setfield_dirnamelen(self, value): if isinstance(value,UINT): self.__field_dirnamelen=value else: self.__field_dirnamelen=UINT(value,**{'sizeinbytes': 1}) def __delfield_dirnamelen(self): del self.__field_dirnamelen dirnamelen=property(__getfield_dirnamelen, __setfield_dirnamelen, __delfield_dirnamelen, "which portion of the filename is the directory, including the last /") def __getfield_extrazero(self): return self.__field_extrazero.getvalue() def __setfield_extrazero(self, value): if isinstance(value,com_brew.EXTRAZERO): self.__field_extrazero=value else: self.__field_extrazero=com_brew.EXTRAZERO(value,) def __delfield_extrazero(self): del self.__field_extrazero extrazero=property(__getfield_extrazero, __setfield_extrazero, __delfield_extrazero, "on some models there is a zero here") def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'terminator': None, 'pascal': True, 'encoding': PHONE_ENCODING }) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('unknown1', self.__field_unknown1, "probably the file attributes") yield ('date', self.__field_date, None) yield ('size', self.__field_size, None) yield ('unknown2', self.__field_unknown2, None) yield ('spuriouszero', self.__field_spuriouszero, "on some models there is a zero here") yield ('dirnamelen', self.__field_dirnamelen, "which portion of the filename is the directory, including the last /") yield ('extrazero', self.__field_extrazero, "on some models there is a zero here") yield ('filename', self.__field_filename, None) class listdirectoryrequest(BaseProtogenClass): "This gets one directory entry (directory only) at a time" __fields=['header', 'entrynumber', 'dirname'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(listdirectoryrequest,self).__init__(**dict) if self.__class__ is listdirectoryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(listdirectoryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(listdirectoryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=requestheader(**{'command': 0x0a}) self.__field_header.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_dirname.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=requestheader(**{'command': 0x0a}) self.__field_header.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 4}) self.__field_entrynumber.readfrombuffer(buf) self.__field_dirname=USTRING(**{'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING }) self.__field_dirname.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=requestheader(**{'command': 0x0a}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,requestheader): self.__field_header=value else: self.__field_header=requestheader(value,**{'command': 0x0a}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 4}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_dirname(self): return self.__field_dirname.getvalue() def __setfield_dirname(self, value): if isinstance(value,USTRING): self.__field_dirname=value else: self.__field_dirname=USTRING(value,**{'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING }) def __delfield_dirname(self): del self.__field_dirname dirname=property(__getfield_dirname, __setfield_dirname, __delfield_dirname, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('dirname', self.__field_dirname, None) class listdirectoryresponse(BaseProtogenClass): __fields=['header', 'entrynumber', 'unknown1', 'extrazero', 'subdir'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(listdirectoryresponse,self).__init__(**dict) if self.__class__ is listdirectoryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(listdirectoryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(listdirectoryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_extrazero.writetobuffer(buf) self.__field_subdir.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=responseheader() self.__field_header.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 4}) self.__field_entrynumber.readfrombuffer(buf) self.__field_unknown1=UNKNOWN(**{'sizeinbytes': 17}) self.__field_unknown1.readfrombuffer(buf) self.__field_extrazero=com_brew.EXTRAZERO() self.__field_extrazero.readfrombuffer(buf) self.__field_subdir=USTRING(**{'terminator': None, 'pascal': True, 'encoding': PHONE_ENCODING }) self.__field_subdir.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,responseheader): self.__field_header=value else: self.__field_header=responseheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 4}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UNKNOWN): self.__field_unknown1=value else: self.__field_unknown1=UNKNOWN(value,**{'sizeinbytes': 17}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, "probably the directory attributes") def __getfield_extrazero(self): return self.__field_extrazero.getvalue() def __setfield_extrazero(self, value): if isinstance(value,com_brew.EXTRAZERO): self.__field_extrazero=value else: self.__field_extrazero=com_brew.EXTRAZERO(value,) def __delfield_extrazero(self): del self.__field_extrazero extrazero=property(__getfield_extrazero, __setfield_extrazero, __delfield_extrazero, "on some models there is a zero here") def __getfield_subdir(self): return self.__field_subdir.getvalue() def __setfield_subdir(self, value): if isinstance(value,USTRING): self.__field_subdir=value else: self.__field_subdir=USTRING(value,**{'terminator': None, 'pascal': True, 'encoding': PHONE_ENCODING }) def __delfield_subdir(self): del self.__field_subdir subdir=property(__getfield_subdir, __setfield_subdir, __delfield_subdir, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('unknown1', self.__field_unknown1, "probably the directory attributes") yield ('extrazero', self.__field_extrazero, "on some models there is a zero here") yield ('subdir', self.__field_subdir, None) class statfilerequest(BaseProtogenClass): "Get the status of the file" __fields=['header', 'filename'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(statfilerequest,self).__init__(**dict) if self.__class__ is statfilerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(statfilerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(statfilerequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=requestheader(**{ 'command': 7 }) self.__field_header.writetobuffer(buf) self.__field_filename.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=requestheader(**{ 'command': 7 }) self.__field_header.readfrombuffer(buf) self.__field_filename=USTRING(**{'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING }) self.__field_filename.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=requestheader(**{ 'command': 7 }) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,requestheader): self.__field_header=value else: self.__field_header=requestheader(value,**{ 'command': 7 }) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING }) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('filename', self.__field_filename, None) class statfileresponse(BaseProtogenClass): __fields=['header', 'unknown1', 'date', 'size'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(statfileresponse,self).__init__(**dict) if self.__class__ is statfileresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(statfileresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(statfileresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_date.writetobuffer(buf) self.__field_size.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=responseheader() self.__field_header.readfrombuffer(buf) self.__field_unknown1=UNKNOWN(**{'sizeinbytes': 4}) self.__field_unknown1.readfrombuffer(buf) self.__field_date=UINT(**{'sizeinbytes': 4}) self.__field_date.readfrombuffer(buf) self.__field_size=UINT(**{'sizeinbytes': 4}) self.__field_size.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,responseheader): self.__field_header=value else: self.__field_header=responseheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UNKNOWN): self.__field_unknown1=value else: self.__field_unknown1=UNKNOWN(value,**{'sizeinbytes': 4}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, "probably the file attributes") def __getfield_date(self): return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,UINT): self.__field_date=value else: self.__field_date=UINT(value,**{'sizeinbytes': 4}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, None) def __getfield_size(self): return self.__field_size.getvalue() def __setfield_size(self, value): if isinstance(value,UINT): self.__field_size=value else: self.__field_size=UINT(value,**{'sizeinbytes': 4}) def __delfield_size(self): del self.__field_size size=property(__getfield_size, __setfield_size, __delfield_size, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('unknown1', self.__field_unknown1, "probably the file attributes") yield ('date', self.__field_date, None) yield ('size', self.__field_size, None) class mkdirrequest(BaseProtogenClass): __fields=['header', 'dirname'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(mkdirrequest,self).__init__(**dict) if self.__class__ is mkdirrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(mkdirrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(mkdirrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=requestheader(**{'command': 0x00}) self.__field_header.writetobuffer(buf) self.__field_dirname.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=requestheader(**{'command': 0x00}) self.__field_header.readfrombuffer(buf) self.__field_dirname=USTRING(**{'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING }) self.__field_dirname.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=requestheader(**{'command': 0x00}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,requestheader): self.__field_header=value else: self.__field_header=requestheader(value,**{'command': 0x00}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_dirname(self): return self.__field_dirname.getvalue() def __setfield_dirname(self, value): if isinstance(value,USTRING): self.__field_dirname=value else: self.__field_dirname=USTRING(value,**{'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING }) def __delfield_dirname(self): del self.__field_dirname dirname=property(__getfield_dirname, __setfield_dirname, __delfield_dirname, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('dirname', self.__field_dirname, None) class rmdirrequest(BaseProtogenClass): __fields=['header', 'dirname'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(rmdirrequest,self).__init__(**dict) if self.__class__ is rmdirrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(rmdirrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(rmdirrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=requestheader(**{'command': 0x01}) self.__field_header.writetobuffer(buf) self.__field_dirname.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=requestheader(**{'command': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_dirname=USTRING(**{'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING }) self.__field_dirname.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=requestheader(**{'command': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,requestheader): self.__field_header=value else: self.__field_header=requestheader(value,**{'command': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_dirname(self): return self.__field_dirname.getvalue() def __setfield_dirname(self, value): if isinstance(value,USTRING): self.__field_dirname=value else: self.__field_dirname=USTRING(value,**{'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING }) def __delfield_dirname(self): del self.__field_dirname dirname=property(__getfield_dirname, __setfield_dirname, __delfield_dirname, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('dirname', self.__field_dirname, None) class rmfilerequest(BaseProtogenClass): __fields=['header', 'filename'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(rmfilerequest,self).__init__(**dict) if self.__class__ is rmfilerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(rmfilerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(rmfilerequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=requestheader(**{'command': 0x06}) self.__field_header.writetobuffer(buf) self.__field_filename.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=requestheader(**{'command': 0x06}) self.__field_header.readfrombuffer(buf) self.__field_filename=USTRING(**{'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING }) self.__field_filename.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=requestheader(**{'command': 0x06}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,requestheader): self.__field_header=value else: self.__field_header=requestheader(value,**{'command': 0x06}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING }) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('filename', self.__field_filename, None) class memoryconfigrequest(BaseProtogenClass): __fields=['header'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(memoryconfigrequest,self).__init__(**dict) if self.__class__ is memoryconfigrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(memoryconfigrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(memoryconfigrequest,kwargs) if len(args): dict2={'command': 0x0c} dict2.update(kwargs) kwargs=dict2 self.__field_header=requestheader(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=requestheader(**{'command': 0x0c}) self.__field_header.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=requestheader(**{'command': 0x0c}) self.__field_header.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=requestheader(**{'command': 0x0c}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,requestheader): self.__field_header=value else: self.__field_header=requestheader(value,**{'command': 0x0c}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) class memoryconfigresponse(BaseProtogenClass): __fields=['header', 'amountofmemory'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(memoryconfigresponse,self).__init__(**dict) if self.__class__ is memoryconfigresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(memoryconfigresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(memoryconfigresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_amountofmemory.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=responseheader() self.__field_header.readfrombuffer(buf) self.__field_amountofmemory=UINT(**{'sizeinbytes': 4}) self.__field_amountofmemory.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,responseheader): self.__field_header=value else: self.__field_header=responseheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_amountofmemory(self): return self.__field_amountofmemory.getvalue() def __setfield_amountofmemory(self, value): if isinstance(value,UINT): self.__field_amountofmemory=value else: self.__field_amountofmemory=UINT(value,**{'sizeinbytes': 4}) def __delfield_amountofmemory(self): del self.__field_amountofmemory amountofmemory=property(__getfield_amountofmemory, __setfield_amountofmemory, __delfield_amountofmemory, "how much memory the EFS has in bytes") def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('amountofmemory', self.__field_amountofmemory, "how much memory the EFS has in bytes") class firmwarerequest(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(firmwarerequest,self).__init__(**dict) if self.__class__ is firmwarerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(firmwarerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(firmwarerequest,kwargs) if len(args): dict2={'sizeinbytes': 1, 'constant': 0x00} dict2.update(kwargs) kwargs=dict2 self.__field_command=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1, 'constant': 0x00}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class firmwareresponse(BaseProtogenClass): __fields=['command', 'date1', 'time1', 'date2', 'time2', 'string1', 'dunno1', 'date3', 'dunno2', 'time3', 'dunno3', 'firmware'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(firmwareresponse,self).__init__(**dict) if self.__class__ is firmwareresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(firmwareresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(firmwareresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_date1.writetobuffer(buf) self.__field_time1.writetobuffer(buf) self.__field_date2.writetobuffer(buf) self.__field_time2.writetobuffer(buf) self.__field_string1.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_date3.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_time3.writetobuffer(buf) self.__field_dunno3.writetobuffer(buf) self.__field_firmware.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_date1=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date1.readfrombuffer(buf) self.__field_time1=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time1.readfrombuffer(buf) self.__field_date2=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date2.readfrombuffer(buf) self.__field_time2=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time2.readfrombuffer(buf) self.__field_string1=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_string1.readfrombuffer(buf) self.__field_dunno1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_dunno1.readfrombuffer(buf) self.__field_date3=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date3.readfrombuffer(buf) self.__field_dunno2=UNKNOWN(**{'sizeinbytes': 1}) self.__field_dunno2.readfrombuffer(buf) self.__field_time3=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time3.readfrombuffer(buf) self.__field_dunno3=UNKNOWN(**{'sizeinbytes': 11}) self.__field_dunno3.readfrombuffer(buf) self.__field_firmware=USTRING(**{'sizeinbytes': 10, 'terminator': None}) self.__field_firmware.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_date1(self): return self.__field_date1.getvalue() def __setfield_date1(self, value): if isinstance(value,USTRING): self.__field_date1=value else: self.__field_date1=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date1(self): del self.__field_date1 date1=property(__getfield_date1, __setfield_date1, __delfield_date1, None) def __getfield_time1(self): return self.__field_time1.getvalue() def __setfield_time1(self, value): if isinstance(value,USTRING): self.__field_time1=value else: self.__field_time1=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time1(self): del self.__field_time1 time1=property(__getfield_time1, __setfield_time1, __delfield_time1, None) def __getfield_date2(self): return self.__field_date2.getvalue() def __setfield_date2(self, value): if isinstance(value,USTRING): self.__field_date2=value else: self.__field_date2=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date2(self): del self.__field_date2 date2=property(__getfield_date2, __setfield_date2, __delfield_date2, None) def __getfield_time2(self): return self.__field_time2.getvalue() def __setfield_time2(self, value): if isinstance(value,USTRING): self.__field_time2=value else: self.__field_time2=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time2(self): del self.__field_time2 time2=property(__getfield_time2, __setfield_time2, __delfield_time2, None) def __getfield_string1(self): return self.__field_string1.getvalue() def __setfield_string1(self, value): if isinstance(value,USTRING): self.__field_string1=value else: self.__field_string1=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_string1(self): del self.__field_string1 string1=property(__getfield_string1, __setfield_string1, __delfield_string1, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UNKNOWN): self.__field_dunno1=value else: self.__field_dunno1=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_date3(self): return self.__field_date3.getvalue() def __setfield_date3(self, value): if isinstance(value,USTRING): self.__field_date3=value else: self.__field_date3=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date3(self): del self.__field_date3 date3=property(__getfield_date3, __setfield_date3, __delfield_date3, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UNKNOWN): self.__field_dunno2=value else: self.__field_dunno2=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_time3(self): return self.__field_time3.getvalue() def __setfield_time3(self, value): if isinstance(value,USTRING): self.__field_time3=value else: self.__field_time3=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time3(self): del self.__field_time3 time3=property(__getfield_time3, __setfield_time3, __delfield_time3, None) def __getfield_dunno3(self): return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,UNKNOWN): self.__field_dunno3=value else: self.__field_dunno3=UNKNOWN(value,**{'sizeinbytes': 11}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_firmware(self): return self.__field_firmware.getvalue() def __setfield_firmware(self, value): if isinstance(value,USTRING): self.__field_firmware=value else: self.__field_firmware=USTRING(value,**{'sizeinbytes': 10, 'terminator': None}) def __delfield_firmware(self): del self.__field_firmware firmware=property(__getfield_firmware, __setfield_firmware, __delfield_firmware, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('date1', self.__field_date1, None) yield ('time1', self.__field_time1, None) yield ('date2', self.__field_date2, None) yield ('time2', self.__field_time2, None) yield ('string1', self.__field_string1, None) yield ('dunno1', self.__field_dunno1, None) yield ('date3', self.__field_date3, None) yield ('dunno2', self.__field_dunno2, None) yield ('time3', self.__field_time3, None) yield ('dunno3', self.__field_dunno3, None) yield ('firmware', self.__field_firmware, None) class ESN_req(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ESN_req,self).__init__(**dict) if self.__class__ is ESN_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ESN_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ESN_req,kwargs) if len(args): dict2={'sizeinbytes': 1, 'default': 1, 'constant': 1 } dict2.update(kwargs) kwargs=dict2 self.__field_command=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'default': 1, 'constant': 1 }) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1, 'default': 1, 'constant': 1 }) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'default': 1, 'constant': 1 }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1, 'default': 1, 'constant': 1 }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class ESN_resp(BaseProtogenClass): __fields=['command', 'esn'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ESN_resp,self).__init__(**dict) if self.__class__ is ESN_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ESN_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ESN_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_esn.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 1 }) self.__field_command.readfrombuffer(buf) self.__field_esn=UINT(**{'sizeinbytes': 4}) self.__field_esn.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1, 'constant': 1 }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_esn(self): return self.__field_esn.getvalue() def __setfield_esn(self, value): if isinstance(value,UINT): self.__field_esn=value else: self.__field_esn=UINT(value,**{'sizeinbytes': 4}) def __delfield_esn(self): del self.__field_esn esn=property(__getfield_esn, __setfield_esn, __delfield_esn, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('esn', self.__field_esn, None) class testing0crequest(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(testing0crequest,self).__init__(**dict) if self.__class__ is testing0crequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(testing0crequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(testing0crequest,kwargs) if len(args): dict2={'sizeinbytes': 1, 'constant': 0x0c} dict2.update(kwargs) kwargs=dict2 self.__field_command=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x0c}) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x0c}) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x0c}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1, 'constant': 0x0c}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class testing0cresponse(BaseProtogenClass): __fields=['pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(testing0cresponse,self).__init__(**dict) if self.__class__ is testing0cresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(testing0cresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(testing0cresponse,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_pad=UNKNOWN(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('pad', self.__field_pad, None) class setmoderequest(BaseProtogenClass): __fields=['command', 'request', 'zero'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(setmoderequest,self).__init__(**dict) if self.__class__ is setmoderequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(setmoderequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(setmoderequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x29}) self.__field_command.writetobuffer(buf) self.__field_request.writetobuffer(buf) try: self.__field_zero except: self.__field_zero=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_zero.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x29}) self.__field_command.readfrombuffer(buf) self.__field_request=UINT(**{'sizeinbytes': 1}) self.__field_request.readfrombuffer(buf) self.__field_zero=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_zero.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x29}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1, 'constant': 0x29}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_request(self): return self.__field_request.getvalue() def __setfield_request(self, value): if isinstance(value,UINT): self.__field_request=value else: self.__field_request=UINT(value,**{'sizeinbytes': 1}) def __delfield_request(self): del self.__field_request request=property(__getfield_request, __setfield_request, __delfield_request, "1=offline 2-reset. Reset has no effect unless already offline") def __getfield_zero(self): try: self.__field_zero except: self.__field_zero=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) return self.__field_zero.getvalue() def __setfield_zero(self, value): if isinstance(value,UINT): self.__field_zero=value else: self.__field_zero=UINT(value,**{'sizeinbytes': 1, 'constant': 0x00}) def __delfield_zero(self): del self.__field_zero zero=property(__getfield_zero, __setfield_zero, __delfield_zero, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('request', self.__field_request, "1=offline 2-reset. Reset has no effect unless already offline") yield ('zero', self.__field_zero, None) class setmoderesponse(BaseProtogenClass): __fields=['pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(setmoderesponse,self).__init__(**dict) if self.__class__ is setmoderesponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(setmoderesponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(setmoderesponse,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_pad=UNKNOWN(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('pad', self.__field_pad, None) class setmodemmoderequest(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(setmodemmoderequest,self).__init__(**dict) if self.__class__ is setmodemmoderequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(setmodemmoderequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(setmodemmoderequest,kwargs) if len(args): dict2={'sizeinbytes': 1, 'constant': 0x44} dict2.update(kwargs) kwargs=dict2 self.__field_command=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x44}) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x44}) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x44}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1, 'constant': 0x44}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class setfileattrrequest(BaseProtogenClass): "Set the attributes of the file" __fields=['header', 'unknown', 'date', 'filename'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(setfileattrrequest,self).__init__(**dict) if self.__class__ is setfileattrrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(setfileattrrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(setfileattrrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=requestheader(**{ 'command': 8 }) self.__field_header.writetobuffer(buf) try: self.__field_unknown except: self.__field_unknown=UINT(**{'sizeinbytes': 4, 'constant': 0x000100ff}) self.__field_unknown.writetobuffer(buf) self.__field_date.writetobuffer(buf) self.__field_filename.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=requestheader(**{ 'command': 8 }) self.__field_header.readfrombuffer(buf) self.__field_unknown=UINT(**{'sizeinbytes': 4, 'constant': 0x000100ff}) self.__field_unknown.readfrombuffer(buf) self.__field_date=UINT(**{'sizeinbytes': 4}) self.__field_date.readfrombuffer(buf) self.__field_filename=USTRING(**{'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING }) self.__field_filename.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=requestheader(**{ 'command': 8 }) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,requestheader): self.__field_header=value else: self.__field_header=requestheader(value,**{ 'command': 8 }) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_unknown(self): try: self.__field_unknown except: self.__field_unknown=UINT(**{'sizeinbytes': 4, 'constant': 0x000100ff}) return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UINT): self.__field_unknown=value else: self.__field_unknown=UINT(value,**{'sizeinbytes': 4, 'constant': 0x000100ff}) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, "probably file attributes") def __getfield_date(self): return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,UINT): self.__field_date=value else: self.__field_date=UINT(value,**{'sizeinbytes': 4}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, None) def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING }) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('unknown', self.__field_unknown, "probably file attributes") yield ('date', self.__field_date, None) yield ('filename', self.__field_filename, None) class data(BaseProtogenClass): __fields=['bytes'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(data,self).__init__(**dict) if self.__class__ is data: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(data,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(data,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_bytes=DATA(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_bytes.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_bytes=DATA() self.__field_bytes.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_bytes(self): return self.__field_bytes.getvalue() def __setfield_bytes(self, value): if isinstance(value,DATA): self.__field_bytes=value else: self.__field_bytes=DATA(value,) def __delfield_bytes(self): del self.__field_bytes bytes=property(__getfield_bytes, __setfield_bytes, __delfield_bytes, None) def iscontainer(self): return True def containerelements(self): yield ('bytes', self.__field_bytes, None) class new_requestheader(BaseProtogenClass): "The bit in front on all Brew request packets" __fields=['commandmode', 'command', 'zero'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(new_requestheader,self).__init__(**dict) if self.__class__ is new_requestheader: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(new_requestheader,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(new_requestheader,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_commandmode except: self.__field_commandmode=UINT(**{'sizeinbytes': 2, 'constant': 0x134B}) self.__field_commandmode.writetobuffer(buf) self.__field_command.writetobuffer(buf) try: self.__field_zero except: self.__field_zero=UINT(**{'sizeinbytes': 1, 'constant': 0}) self.__field_zero.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_commandmode=UINT(**{'sizeinbytes': 2, 'constant': 0x134B}) self.__field_commandmode.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_zero=UINT(**{'sizeinbytes': 1, 'constant': 0}) self.__field_zero.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_commandmode(self): try: self.__field_commandmode except: self.__field_commandmode=UINT(**{'sizeinbytes': 2, 'constant': 0x134B}) return self.__field_commandmode.getvalue() def __setfield_commandmode(self, value): if isinstance(value,UINT): self.__field_commandmode=value else: self.__field_commandmode=UINT(value,**{'sizeinbytes': 2, 'constant': 0x134B}) def __delfield_commandmode(self): del self.__field_commandmode commandmode=property(__getfield_commandmode, __setfield_commandmode, __delfield_commandmode, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_zero(self): try: self.__field_zero except: self.__field_zero=UINT(**{'sizeinbytes': 1, 'constant': 0}) return self.__field_zero.getvalue() def __setfield_zero(self, value): if isinstance(value,UINT): self.__field_zero=value else: self.__field_zero=UINT(value,**{'sizeinbytes': 1, 'constant': 0}) def __delfield_zero(self): del self.__field_zero zero=property(__getfield_zero, __setfield_zero, __delfield_zero, None) def iscontainer(self): return True def containerelements(self): yield ('commandmode', self.__field_commandmode, None) yield ('command', self.__field_command, None) yield ('zero', self.__field_zero, None) class new_responseheader(BaseProtogenClass): "The bit in front on all Brew response packets" __fields=['commandmode', 'command', 'zero'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(new_responseheader,self).__init__(**dict) if self.__class__ is new_responseheader: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(new_responseheader,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(new_responseheader,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_commandmode.writetobuffer(buf) self.__field_command.writetobuffer(buf) self.__field_zero.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_commandmode=UINT(**{'sizeinbytes': 2, 'constant': 0x134B}) self.__field_commandmode.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_zero=UINT(**{'sizeinbytes': 1}) self.__field_zero.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_commandmode(self): return self.__field_commandmode.getvalue() def __setfield_commandmode(self, value): if isinstance(value,UINT): self.__field_commandmode=value else: self.__field_commandmode=UINT(value,**{'sizeinbytes': 2, 'constant': 0x134B}) def __delfield_commandmode(self): del self.__field_commandmode commandmode=property(__getfield_commandmode, __setfield_commandmode, __delfield_commandmode, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_zero(self): return self.__field_zero.getvalue() def __setfield_zero(self, value): if isinstance(value,UINT): self.__field_zero=value else: self.__field_zero=UINT(value,**{'sizeinbytes': 1}) def __delfield_zero(self): del self.__field_zero zero=property(__getfield_zero, __setfield_zero, __delfield_zero, None) def iscontainer(self): return True def containerelements(self): yield ('commandmode', self.__field_commandmode, None) yield ('command', self.__field_command, None) yield ('zero', self.__field_zero, None) class new_openfilerequest(BaseProtogenClass): __fields=['header', 'mode', 'flags', 'filename'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(new_openfilerequest,self).__init__(**dict) if self.__class__ is new_openfilerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(new_openfilerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(new_openfilerequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=new_requestheader(**{'command': 0x02}) self.__field_header.writetobuffer(buf) self.__field_mode.writetobuffer(buf) self.__field_flags.writetobuffer(buf) self.__field_filename.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=new_requestheader(**{'command': 0x02}) self.__field_header.readfrombuffer(buf) self.__field_mode=UINT(**{'sizeinbytes': 4}) self.__field_mode.readfrombuffer(buf) self.__field_flags=UINT(**{'sizeinbytes': 4}) self.__field_flags.readfrombuffer(buf) self.__field_filename=USTRING(**{'terminator': 0, 'encoding': PHONE_ENCODING }) self.__field_filename.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=new_requestheader(**{'command': 0x02}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,new_requestheader): self.__field_header=value else: self.__field_header=new_requestheader(value,**{'command': 0x02}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_mode(self): return self.__field_mode.getvalue() def __setfield_mode(self, value): if isinstance(value,UINT): self.__field_mode=value else: self.__field_mode=UINT(value,**{'sizeinbytes': 4}) def __delfield_mode(self): del self.__field_mode mode=property(__getfield_mode, __setfield_mode, __delfield_mode, None) def __getfield_flags(self): return self.__field_flags.getvalue() def __setfield_flags(self, value): if isinstance(value,UINT): self.__field_flags=value else: self.__field_flags=UINT(value,**{'sizeinbytes': 4}) def __delfield_flags(self): del self.__field_flags flags=property(__getfield_flags, __setfield_flags, __delfield_flags, None) def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'terminator': 0, 'encoding': PHONE_ENCODING }) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('mode', self.__field_mode, None) yield ('flags', self.__field_flags, None) yield ('filename', self.__field_filename, None) class new_openfileresponse(BaseProtogenClass): __fields=['header', 'handle', 'error'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(new_openfileresponse,self).__init__(**dict) if self.__class__ is new_openfileresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(new_openfileresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(new_openfileresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_handle.writetobuffer(buf) self.__field_error.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=new_responseheader() self.__field_header.readfrombuffer(buf) self.__field_handle=UINT(**{'sizeinbytes': 4}) self.__field_handle.readfrombuffer(buf) self.__field_error=UINT(**{'sizeinbytes': 4}) self.__field_error.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,new_responseheader): self.__field_header=value else: self.__field_header=new_responseheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_handle(self): return self.__field_handle.getvalue() def __setfield_handle(self, value): if isinstance(value,UINT): self.__field_handle=value else: self.__field_handle=UINT(value,**{'sizeinbytes': 4}) def __delfield_handle(self): del self.__field_handle handle=property(__getfield_handle, __setfield_handle, __delfield_handle, None) def __getfield_error(self): return self.__field_error.getvalue() def __setfield_error(self, value): if isinstance(value,UINT): self.__field_error=value else: self.__field_error=UINT(value,**{'sizeinbytes': 4}) def __delfield_error(self): del self.__field_error error=property(__getfield_error, __setfield_error, __delfield_error, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('handle', self.__field_handle, None) yield ('error', self.__field_error, None) class new_closefilerequest(BaseProtogenClass): __fields=['header', 'handle'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(new_closefilerequest,self).__init__(**dict) if self.__class__ is new_closefilerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(new_closefilerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(new_closefilerequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=new_requestheader(**{'command': 0x03}) self.__field_header.writetobuffer(buf) self.__field_handle.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=new_requestheader(**{'command': 0x03}) self.__field_header.readfrombuffer(buf) self.__field_handle=UINT(**{'sizeinbytes': 4}) self.__field_handle.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=new_requestheader(**{'command': 0x03}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,new_requestheader): self.__field_header=value else: self.__field_header=new_requestheader(value,**{'command': 0x03}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_handle(self): return self.__field_handle.getvalue() def __setfield_handle(self, value): if isinstance(value,UINT): self.__field_handle=value else: self.__field_handle=UINT(value,**{'sizeinbytes': 4}) def __delfield_handle(self): del self.__field_handle handle=property(__getfield_handle, __setfield_handle, __delfield_handle, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('handle', self.__field_handle, None) class new_closefileresponse(BaseProtogenClass): __fields=['header', 'error'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(new_closefileresponse,self).__init__(**dict) if self.__class__ is new_closefileresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(new_closefileresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(new_closefileresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_error.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=new_responseheader() self.__field_header.readfrombuffer(buf) self.__field_error=UINT(**{'sizeinbytes': 4}) self.__field_error.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,new_responseheader): self.__field_header=value else: self.__field_header=new_responseheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_error(self): return self.__field_error.getvalue() def __setfield_error(self, value): if isinstance(value,UINT): self.__field_error=value else: self.__field_error=UINT(value,**{'sizeinbytes': 4}) def __delfield_error(self): del self.__field_error error=property(__getfield_error, __setfield_error, __delfield_error, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('error', self.__field_error, None) class new_readfilerequest(BaseProtogenClass): __fields=['header', 'handle', 'bytes', 'position'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(new_readfilerequest,self).__init__(**dict) if self.__class__ is new_readfilerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(new_readfilerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(new_readfilerequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=new_requestheader(**{'command': 0x04}) self.__field_header.writetobuffer(buf) self.__field_handle.writetobuffer(buf) self.__field_bytes.writetobuffer(buf) self.__field_position.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=new_requestheader(**{'command': 0x04}) self.__field_header.readfrombuffer(buf) self.__field_handle=UINT(**{'sizeinbytes': 4}) self.__field_handle.readfrombuffer(buf) self.__field_bytes=UINT(**{'sizeinbytes': 4}) self.__field_bytes.readfrombuffer(buf) self.__field_position=UINT(**{'sizeinbytes': 4}) self.__field_position.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=new_requestheader(**{'command': 0x04}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,new_requestheader): self.__field_header=value else: self.__field_header=new_requestheader(value,**{'command': 0x04}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_handle(self): return self.__field_handle.getvalue() def __setfield_handle(self, value): if isinstance(value,UINT): self.__field_handle=value else: self.__field_handle=UINT(value,**{'sizeinbytes': 4}) def __delfield_handle(self): del self.__field_handle handle=property(__getfield_handle, __setfield_handle, __delfield_handle, None) def __getfield_bytes(self): return self.__field_bytes.getvalue() def __setfield_bytes(self, value): if isinstance(value,UINT): self.__field_bytes=value else: self.__field_bytes=UINT(value,**{'sizeinbytes': 4}) def __delfield_bytes(self): del self.__field_bytes bytes=property(__getfield_bytes, __setfield_bytes, __delfield_bytes, None) def __getfield_position(self): return self.__field_position.getvalue() def __setfield_position(self, value): if isinstance(value,UINT): self.__field_position=value else: self.__field_position=UINT(value,**{'sizeinbytes': 4}) def __delfield_position(self): del self.__field_position position=property(__getfield_position, __setfield_position, __delfield_position, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('handle', self.__field_handle, None) yield ('bytes', self.__field_bytes, None) yield ('position', self.__field_position, None) class new_readfileresponse(BaseProtogenClass): __fields=['header', 'handle', 'position', 'bytes', 'error', 'data'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(new_readfileresponse,self).__init__(**dict) if self.__class__ is new_readfileresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(new_readfileresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(new_readfileresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_handle.writetobuffer(buf) self.__field_position.writetobuffer(buf) self.__field_bytes.writetobuffer(buf) self.__field_error.writetobuffer(buf) self.__field_data.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=new_responseheader() self.__field_header.readfrombuffer(buf) self.__field_handle=UINT(**{'sizeinbytes': 4}) self.__field_handle.readfrombuffer(buf) self.__field_position=UINT(**{'sizeinbytes': 4}) self.__field_position.readfrombuffer(buf) self.__field_bytes=UINT(**{'sizeinbytes': 4}) self.__field_bytes.readfrombuffer(buf) self.__field_error=UINT(**{'sizeinbytes': 4}) self.__field_error.readfrombuffer(buf) self.__field_data=DATA(**{'sizeinbytes': self.bytes}) self.__field_data.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,new_responseheader): self.__field_header=value else: self.__field_header=new_responseheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_handle(self): return self.__field_handle.getvalue() def __setfield_handle(self, value): if isinstance(value,UINT): self.__field_handle=value else: self.__field_handle=UINT(value,**{'sizeinbytes': 4}) def __delfield_handle(self): del self.__field_handle handle=property(__getfield_handle, __setfield_handle, __delfield_handle, None) def __getfield_position(self): return self.__field_position.getvalue() def __setfield_position(self, value): if isinstance(value,UINT): self.__field_position=value else: self.__field_position=UINT(value,**{'sizeinbytes': 4}) def __delfield_position(self): del self.__field_position position=property(__getfield_position, __setfield_position, __delfield_position, None) def __getfield_bytes(self): return self.__field_bytes.getvalue() def __setfield_bytes(self, value): if isinstance(value,UINT): self.__field_bytes=value else: self.__field_bytes=UINT(value,**{'sizeinbytes': 4}) def __delfield_bytes(self): del self.__field_bytes bytes=property(__getfield_bytes, __setfield_bytes, __delfield_bytes, None) def __getfield_error(self): return self.__field_error.getvalue() def __setfield_error(self, value): if isinstance(value,UINT): self.__field_error=value else: self.__field_error=UINT(value,**{'sizeinbytes': 4}) def __delfield_error(self): del self.__field_error error=property(__getfield_error, __setfield_error, __delfield_error, None) def __getfield_data(self): return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,DATA): self.__field_data=value else: self.__field_data=DATA(value,**{'sizeinbytes': self.bytes}) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('handle', self.__field_handle, None) yield ('position', self.__field_position, None) yield ('bytes', self.__field_bytes, None) yield ('error', self.__field_error, None) yield ('data', self.__field_data, None) class new_writefilerequest(BaseProtogenClass): __fields=['header', 'handle', 'position', 'bytes', 'data'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(new_writefilerequest,self).__init__(**dict) if self.__class__ is new_writefilerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(new_writefilerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(new_writefilerequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_bytes except: self.__field_bytes=UINT() def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=new_requestheader(**{'command': 0x05}) self.__field_header.writetobuffer(buf) self.__field_handle.writetobuffer(buf) self.__field_position.writetobuffer(buf) self.__field_data.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=new_requestheader(**{'command': 0x05}) self.__field_header.readfrombuffer(buf) self.__field_handle=UINT(**{'sizeinbytes': 4}) self.__field_handle.readfrombuffer(buf) self.__field_position=UINT(**{'sizeinbytes': 4}) self.__field_position.readfrombuffer(buf) self.__field_data=DATA(**{'sizeinbytes': self.bytes}) self.__field_data.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=new_requestheader(**{'command': 0x05}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,new_requestheader): self.__field_header=value else: self.__field_header=new_requestheader(value,**{'command': 0x05}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_handle(self): return self.__field_handle.getvalue() def __setfield_handle(self, value): if isinstance(value,UINT): self.__field_handle=value else: self.__field_handle=UINT(value,**{'sizeinbytes': 4}) def __delfield_handle(self): del self.__field_handle handle=property(__getfield_handle, __setfield_handle, __delfield_handle, None) def __getfield_position(self): return self.__field_position.getvalue() def __setfield_position(self, value): if isinstance(value,UINT): self.__field_position=value else: self.__field_position=UINT(value,**{'sizeinbytes': 4}) def __delfield_position(self): del self.__field_position position=property(__getfield_position, __setfield_position, __delfield_position, None) def __getfield_bytes(self): return self.__field_bytes.getvalue() def __setfield_bytes(self, value): if isinstance(value,UINT): self.__field_bytes=value else: self.__field_bytes=UINT(value,) def __delfield_bytes(self): del self.__field_bytes bytes=property(__getfield_bytes, __setfield_bytes, __delfield_bytes, None) def __getfield_data(self): return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,DATA): self.__field_data=value else: self.__field_data=DATA(value,**{'sizeinbytes': self.bytes}) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('handle', self.__field_handle, None) yield ('position', self.__field_position, None) yield ('bytes', self.__field_bytes, None) yield ('data', self.__field_data, None) class new_writefileresponse(BaseProtogenClass): __fields=['header', 'handle', 'position', 'bytes', 'error'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(new_writefileresponse,self).__init__(**dict) if self.__class__ is new_writefileresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(new_writefileresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(new_writefileresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_handle.writetobuffer(buf) self.__field_position.writetobuffer(buf) self.__field_bytes.writetobuffer(buf) self.__field_error.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=new_responseheader() self.__field_header.readfrombuffer(buf) self.__field_handle=UINT(**{'sizeinbytes': 4}) self.__field_handle.readfrombuffer(buf) self.__field_position=UINT(**{'sizeinbytes': 4}) self.__field_position.readfrombuffer(buf) self.__field_bytes=UINT(**{'sizeinbytes': 4}) self.__field_bytes.readfrombuffer(buf) self.__field_error=UINT(**{'sizeinbytes': 4}) self.__field_error.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,new_responseheader): self.__field_header=value else: self.__field_header=new_responseheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_handle(self): return self.__field_handle.getvalue() def __setfield_handle(self, value): if isinstance(value,UINT): self.__field_handle=value else: self.__field_handle=UINT(value,**{'sizeinbytes': 4}) def __delfield_handle(self): del self.__field_handle handle=property(__getfield_handle, __setfield_handle, __delfield_handle, None) def __getfield_position(self): return self.__field_position.getvalue() def __setfield_position(self, value): if isinstance(value,UINT): self.__field_position=value else: self.__field_position=UINT(value,**{'sizeinbytes': 4}) def __delfield_position(self): del self.__field_position position=property(__getfield_position, __setfield_position, __delfield_position, None) def __getfield_bytes(self): return self.__field_bytes.getvalue() def __setfield_bytes(self, value): if isinstance(value,UINT): self.__field_bytes=value else: self.__field_bytes=UINT(value,**{'sizeinbytes': 4}) def __delfield_bytes(self): del self.__field_bytes bytes=property(__getfield_bytes, __setfield_bytes, __delfield_bytes, None) def __getfield_error(self): return self.__field_error.getvalue() def __setfield_error(self, value): if isinstance(value,UINT): self.__field_error=value else: self.__field_error=UINT(value,**{'sizeinbytes': 4}) def __delfield_error(self): del self.__field_error error=property(__getfield_error, __setfield_error, __delfield_error, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('handle', self.__field_handle, None) yield ('position', self.__field_position, None) yield ('bytes', self.__field_bytes, None) yield ('error', self.__field_error, None) class new_rmfilerequest(BaseProtogenClass): """Remove file, full path should be provided, but the root character / is not required at the start of the name. """ __fields=['header', 'filename', 'dunno'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(new_rmfilerequest,self).__init__(**dict) if self.__class__ is new_rmfilerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(new_rmfilerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(new_rmfilerequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=new_requestheader(**{'command': 0x08}) self.__field_header.writetobuffer(buf) self.__field_filename.writetobuffer(buf) try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 1, 'constant':1}) self.__field_dunno.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=new_requestheader(**{'command': 0x08}) self.__field_header.readfrombuffer(buf) self.__field_filename=USTRING(**{'terminator': 0, 'encoding': PHONE_ENCODING }) self.__field_filename.readfrombuffer(buf) self.__field_dunno=UINT(**{'sizeinbytes': 1, 'constant':1}) self.__field_dunno.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=new_requestheader(**{'command': 0x08}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,new_requestheader): self.__field_header=value else: self.__field_header=new_requestheader(value,**{'command': 0x08}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'terminator': 0, 'encoding': PHONE_ENCODING }) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, None) def __getfield_dunno(self): try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 1, 'constant':1}) return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 1, 'constant':1}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('filename', self.__field_filename, None) yield ('dunno', self.__field_dunno, None) class new_mkdirrequest(BaseProtogenClass): """Make a new directory, full path of the new directory should be provided, but the root character / is not required at the start of the name """ __fields=['header', 'mode', 'dirname'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(new_mkdirrequest,self).__init__(**dict) if self.__class__ is new_mkdirrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(new_mkdirrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(new_mkdirrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=new_requestheader(**{'command': 0x09}) self.__field_header.writetobuffer(buf) try: self.__field_mode except: self.__field_mode=UINT(**{'sizeinbytes': 2, 'constant': 0x01ff}) self.__field_mode.writetobuffer(buf) self.__field_dirname.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=new_requestheader(**{'command': 0x09}) self.__field_header.readfrombuffer(buf) self.__field_mode=UINT(**{'sizeinbytes': 2, 'constant': 0x01ff}) self.__field_mode.readfrombuffer(buf) self.__field_dirname=USTRING(**{'terminator': 0, 'encoding': PHONE_ENCODING }) self.__field_dirname.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=new_requestheader(**{'command': 0x09}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,new_requestheader): self.__field_header=value else: self.__field_header=new_requestheader(value,**{'command': 0x09}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_mode(self): try: self.__field_mode except: self.__field_mode=UINT(**{'sizeinbytes': 2, 'constant': 0x01ff}) return self.__field_mode.getvalue() def __setfield_mode(self, value): if isinstance(value,UINT): self.__field_mode=value else: self.__field_mode=UINT(value,**{'sizeinbytes': 2, 'constant': 0x01ff}) def __delfield_mode(self): del self.__field_mode mode=property(__getfield_mode, __setfield_mode, __delfield_mode, None) def __getfield_dirname(self): return self.__field_dirname.getvalue() def __setfield_dirname(self, value): if isinstance(value,USTRING): self.__field_dirname=value else: self.__field_dirname=USTRING(value,**{'terminator': 0, 'encoding': PHONE_ENCODING }) def __delfield_dirname(self): del self.__field_dirname dirname=property(__getfield_dirname, __setfield_dirname, __delfield_dirname, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('mode', self.__field_mode, None) yield ('dirname', self.__field_dirname, None) class new_rmdirrequest(BaseProtogenClass): """Remove directory, full path should be provided, but the root character / is not required at the start of the name. """ __fields=['header', 'dirname'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(new_rmdirrequest,self).__init__(**dict) if self.__class__ is new_rmdirrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(new_rmdirrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(new_rmdirrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=new_requestheader(**{'command': 0x0a}) self.__field_header.writetobuffer(buf) self.__field_dirname.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=new_requestheader(**{'command': 0x0a}) self.__field_header.readfrombuffer(buf) self.__field_dirname=USTRING(**{'terminator': 0, 'encoding': PHONE_ENCODING }) self.__field_dirname.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=new_requestheader(**{'command': 0x0a}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,new_requestheader): self.__field_header=value else: self.__field_header=new_requestheader(value,**{'command': 0x0a}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_dirname(self): return self.__field_dirname.getvalue() def __setfield_dirname(self, value): if isinstance(value,USTRING): self.__field_dirname=value else: self.__field_dirname=USTRING(value,**{'terminator': 0, 'encoding': PHONE_ENCODING }) def __delfield_dirname(self): del self.__field_dirname dirname=property(__getfield_dirname, __setfield_dirname, __delfield_dirname, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('dirname', self.__field_dirname, None) class new_opendirectoryrequest(BaseProtogenClass): __fields=['header', 'dirname'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(new_opendirectoryrequest,self).__init__(**dict) if self.__class__ is new_opendirectoryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(new_opendirectoryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(new_opendirectoryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=new_requestheader(**{'command': 0x0b}) self.__field_header.writetobuffer(buf) self.__field_dirname.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=new_requestheader(**{'command': 0x0b}) self.__field_header.readfrombuffer(buf) self.__field_dirname=USTRING(**{'terminator': 0, 'encoding': PHONE_ENCODING }) self.__field_dirname.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=new_requestheader(**{'command': 0x0b}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,new_requestheader): self.__field_header=value else: self.__field_header=new_requestheader(value,**{'command': 0x0b}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_dirname(self): return self.__field_dirname.getvalue() def __setfield_dirname(self, value): if isinstance(value,USTRING): self.__field_dirname=value else: self.__field_dirname=USTRING(value,**{'terminator': 0, 'encoding': PHONE_ENCODING }) def __delfield_dirname(self): del self.__field_dirname dirname=property(__getfield_dirname, __setfield_dirname, __delfield_dirname, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('dirname', self.__field_dirname, None) class new_opendirectoryresponse(BaseProtogenClass): __fields=['header', 'handle', 'error'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(new_opendirectoryresponse,self).__init__(**dict) if self.__class__ is new_opendirectoryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(new_opendirectoryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(new_opendirectoryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_handle.writetobuffer(buf) self.__field_error.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=new_responseheader() self.__field_header.readfrombuffer(buf) self.__field_handle=UINT(**{'sizeinbytes': 4}) self.__field_handle.readfrombuffer(buf) self.__field_error=UINT(**{'sizeinbytes': 4}) self.__field_error.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,new_responseheader): self.__field_header=value else: self.__field_header=new_responseheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_handle(self): return self.__field_handle.getvalue() def __setfield_handle(self, value): if isinstance(value,UINT): self.__field_handle=value else: self.__field_handle=UINT(value,**{'sizeinbytes': 4}) def __delfield_handle(self): del self.__field_handle handle=property(__getfield_handle, __setfield_handle, __delfield_handle, None) def __getfield_error(self): return self.__field_error.getvalue() def __setfield_error(self, value): if isinstance(value,UINT): self.__field_error=value else: self.__field_error=UINT(value,**{'sizeinbytes': 4}) def __delfield_error(self): del self.__field_error error=property(__getfield_error, __setfield_error, __delfield_error, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('handle', self.__field_handle, None) yield ('error', self.__field_error, None) class new_listentryrequest(BaseProtogenClass): __fields=['header', 'handle', 'entrynumber'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(new_listentryrequest,self).__init__(**dict) if self.__class__ is new_listentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(new_listentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(new_listentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=new_requestheader(**{'command': 0x0c}) self.__field_header.writetobuffer(buf) self.__field_handle.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=new_requestheader(**{'command': 0x0c}) self.__field_header.readfrombuffer(buf) self.__field_handle=UINT(**{'sizeinbytes': 4}) self.__field_handle.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 4}) self.__field_entrynumber.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=new_requestheader(**{'command': 0x0c}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,new_requestheader): self.__field_header=value else: self.__field_header=new_requestheader(value,**{'command': 0x0c}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_handle(self): return self.__field_handle.getvalue() def __setfield_handle(self, value): if isinstance(value,UINT): self.__field_handle=value else: self.__field_handle=UINT(value,**{'sizeinbytes': 4}) def __delfield_handle(self): del self.__field_handle handle=property(__getfield_handle, __setfield_handle, __delfield_handle, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 4}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('handle', self.__field_handle, None) yield ('entrynumber', self.__field_entrynumber, None) class new_listentryresponse(BaseProtogenClass): __fields=['header', 'handle', 'entrynumber', 'pad1', 'type', 'mode', 'size', 'pad2', 'date', 'entryname'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(new_listentryresponse,self).__init__(**dict) if self.__class__ is new_listentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(new_listentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(new_listentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_handle.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_pad1.writetobuffer(buf) self.__field_type.writetobuffer(buf) self.__field_mode.writetobuffer(buf) self.__field_size.writetobuffer(buf) self.__field_pad2.writetobuffer(buf) self.__field_date.writetobuffer(buf) self.__field_entryname.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=new_responseheader() self.__field_header.readfrombuffer(buf) self.__field_handle=UINT(**{'sizeinbytes': 4}) self.__field_handle.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 4}) self.__field_entrynumber.readfrombuffer(buf) self.__field_pad1=UINT(**{'sizeinbytes': 4}) self.__field_pad1.readfrombuffer(buf) self.__field_type=UINT(**{'sizeinbytes': 4}) self.__field_type.readfrombuffer(buf) self.__field_mode=UINT(**{'sizeinbytes': 4}) self.__field_mode.readfrombuffer(buf) self.__field_size=UINT(**{'sizeinbytes': 4}) self.__field_size.readfrombuffer(buf) self.__field_pad2=UINT(**{'sizeinbytes': 8}) self.__field_pad2.readfrombuffer(buf) self.__field_date=UINT(**{'sizeinbytes': 4}) self.__field_date.readfrombuffer(buf) self.__field_entryname=USTRING(**{'terminator': 0, 'encoding': PHONE_ENCODING }) self.__field_entryname.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,new_responseheader): self.__field_header=value else: self.__field_header=new_responseheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_handle(self): return self.__field_handle.getvalue() def __setfield_handle(self, value): if isinstance(value,UINT): self.__field_handle=value else: self.__field_handle=UINT(value,**{'sizeinbytes': 4}) def __delfield_handle(self): del self.__field_handle handle=property(__getfield_handle, __setfield_handle, __delfield_handle, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 4}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_pad1(self): return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UINT): self.__field_pad1=value else: self.__field_pad1=UINT(value,**{'sizeinbytes': 4}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_type(self): return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,UINT): self.__field_type=value else: self.__field_type=UINT(value,**{'sizeinbytes': 4}) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, None) def __getfield_mode(self): return self.__field_mode.getvalue() def __setfield_mode(self, value): if isinstance(value,UINT): self.__field_mode=value else: self.__field_mode=UINT(value,**{'sizeinbytes': 4}) def __delfield_mode(self): del self.__field_mode mode=property(__getfield_mode, __setfield_mode, __delfield_mode, None) def __getfield_size(self): return self.__field_size.getvalue() def __setfield_size(self, value): if isinstance(value,UINT): self.__field_size=value else: self.__field_size=UINT(value,**{'sizeinbytes': 4}) def __delfield_size(self): del self.__field_size size=property(__getfield_size, __setfield_size, __delfield_size, None) def __getfield_pad2(self): return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UINT): self.__field_pad2=value else: self.__field_pad2=UINT(value,**{'sizeinbytes': 8}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_date(self): return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,UINT): self.__field_date=value else: self.__field_date=UINT(value,**{'sizeinbytes': 4}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, None) def __getfield_entryname(self): return self.__field_entryname.getvalue() def __setfield_entryname(self, value): if isinstance(value,USTRING): self.__field_entryname=value else: self.__field_entryname=USTRING(value,**{'terminator': 0, 'encoding': PHONE_ENCODING }) def __delfield_entryname(self): del self.__field_entryname entryname=property(__getfield_entryname, __setfield_entryname, __delfield_entryname, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('handle', self.__field_handle, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('pad1', self.__field_pad1, None) yield ('type', self.__field_type, None) yield ('mode', self.__field_mode, None) yield ('size', self.__field_size, None) yield ('pad2', self.__field_pad2, None) yield ('date', self.__field_date, None) yield ('entryname', self.__field_entryname, None) class new_closedirectoryrequest(BaseProtogenClass): __fields=['header', 'handle'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(new_closedirectoryrequest,self).__init__(**dict) if self.__class__ is new_closedirectoryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(new_closedirectoryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(new_closedirectoryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=new_requestheader(**{'command': 0x0d}) self.__field_header.writetobuffer(buf) self.__field_handle.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=new_requestheader(**{'command': 0x0d}) self.__field_header.readfrombuffer(buf) self.__field_handle=UINT(**{'sizeinbytes': 4}) self.__field_handle.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=new_requestheader(**{'command': 0x0d}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,new_requestheader): self.__field_header=value else: self.__field_header=new_requestheader(value,**{'command': 0x0d}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_handle(self): return self.__field_handle.getvalue() def __setfield_handle(self, value): if isinstance(value,UINT): self.__field_handle=value else: self.__field_handle=UINT(value,**{'sizeinbytes': 4}) def __delfield_handle(self): del self.__field_handle handle=property(__getfield_handle, __setfield_handle, __delfield_handle, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('handle', self.__field_handle, None) class new_closedirectoryresponse(BaseProtogenClass): __fields=['header', 'error'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(new_closedirectoryresponse,self).__init__(**dict) if self.__class__ is new_closedirectoryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(new_closedirectoryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(new_closedirectoryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_error.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=new_responseheader() self.__field_header.readfrombuffer(buf) self.__field_error=UINT(**{'sizeinbytes': 4}) self.__field_error.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,new_responseheader): self.__field_header=value else: self.__field_header=new_responseheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_error(self): return self.__field_error.getvalue() def __setfield_error(self, value): if isinstance(value,UINT): self.__field_error=value else: self.__field_error=UINT(value,**{'sizeinbytes': 4}) def __delfield_error(self): del self.__field_error error=property(__getfield_error, __setfield_error, __delfield_error, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('error', self.__field_error, None) class new_statfilerequest(BaseProtogenClass): "Get the status of the file" __fields=['header', 'filename'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(new_statfilerequest,self).__init__(**dict) if self.__class__ is new_statfilerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(new_statfilerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(new_statfilerequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=new_requestheader(**{ 'command': 0x0f }) self.__field_header.writetobuffer(buf) self.__field_filename.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=new_requestheader(**{ 'command': 0x0f }) self.__field_header.readfrombuffer(buf) self.__field_filename=USTRING(**{'terminator': 0, 'encoding': PHONE_ENCODING }) self.__field_filename.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=new_requestheader(**{ 'command': 0x0f }) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,new_requestheader): self.__field_header=value else: self.__field_header=new_requestheader(value,**{ 'command': 0x0f }) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'terminator': 0, 'encoding': PHONE_ENCODING }) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('filename', self.__field_filename, None) class new_statfileresponse(BaseProtogenClass): __fields=['header', 'error', 'dunno', 'size', 'type', 'accessed_date', 'modified_date', 'created_date'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(new_statfileresponse,self).__init__(**dict) if self.__class__ is new_statfileresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(new_statfileresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(new_statfileresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_error.writetobuffer(buf) self.__field_dunno.writetobuffer(buf) self.__field_size.writetobuffer(buf) self.__field_type.writetobuffer(buf) self.__field_accessed_date.writetobuffer(buf) self.__field_modified_date.writetobuffer(buf) self.__field_created_date.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=new_responseheader() self.__field_header.readfrombuffer(buf) self.__field_error=UINT(**{'sizeinbytes': 4}) self.__field_error.readfrombuffer(buf) self.__field_dunno=UNKNOWN(**{'sizeinbytes': 4}) self.__field_dunno.readfrombuffer(buf) self.__field_size=UINT(**{'sizeinbytes': 4}) self.__field_size.readfrombuffer(buf) self.__field_type=UINT(**{'sizeinbytes': 4}) self.__field_type.readfrombuffer(buf) self.__field_accessed_date=UINT(**{'sizeinbytes': 4}) self.__field_accessed_date.readfrombuffer(buf) self.__field_modified_date=UINT(**{'sizeinbytes': 4}) self.__field_modified_date.readfrombuffer(buf) self.__field_created_date=UINT(**{'sizeinbytes': 4}) self.__field_created_date.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,new_responseheader): self.__field_header=value else: self.__field_header=new_responseheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_error(self): return self.__field_error.getvalue() def __setfield_error(self, value): if isinstance(value,UINT): self.__field_error=value else: self.__field_error=UINT(value,**{'sizeinbytes': 4}) def __delfield_error(self): del self.__field_error error=property(__getfield_error, __setfield_error, __delfield_error, None) def __getfield_dunno(self): return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UNKNOWN): self.__field_dunno=value else: self.__field_dunno=UNKNOWN(value,**{'sizeinbytes': 4}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def __getfield_size(self): return self.__field_size.getvalue() def __setfield_size(self, value): if isinstance(value,UINT): self.__field_size=value else: self.__field_size=UINT(value,**{'sizeinbytes': 4}) def __delfield_size(self): del self.__field_size size=property(__getfield_size, __setfield_size, __delfield_size, None) def __getfield_type(self): return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,UINT): self.__field_type=value else: self.__field_type=UINT(value,**{'sizeinbytes': 4}) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, None) def __getfield_accessed_date(self): return self.__field_accessed_date.getvalue() def __setfield_accessed_date(self, value): if isinstance(value,UINT): self.__field_accessed_date=value else: self.__field_accessed_date=UINT(value,**{'sizeinbytes': 4}) def __delfield_accessed_date(self): del self.__field_accessed_date accessed_date=property(__getfield_accessed_date, __setfield_accessed_date, __delfield_accessed_date, None) def __getfield_modified_date(self): return self.__field_modified_date.getvalue() def __setfield_modified_date(self, value): if isinstance(value,UINT): self.__field_modified_date=value else: self.__field_modified_date=UINT(value,**{'sizeinbytes': 4}) def __delfield_modified_date(self): del self.__field_modified_date modified_date=property(__getfield_modified_date, __setfield_modified_date, __delfield_modified_date, None) def __getfield_created_date(self): return self.__field_created_date.getvalue() def __setfield_created_date(self, value): if isinstance(value,UINT): self.__field_created_date=value else: self.__field_created_date=UINT(value,**{'sizeinbytes': 4}) def __delfield_created_date(self): del self.__field_created_date created_date=property(__getfield_created_date, __setfield_created_date, __delfield_created_date, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('error', self.__field_error, None) yield ('dunno', self.__field_dunno, None) yield ('size', self.__field_size, None) yield ('type', self.__field_type, None) yield ('accessed_date', self.__field_accessed_date, None) yield ('modified_date', self.__field_modified_date, None) yield ('created_date', self.__field_created_date, None) class new_chmodrequest(BaseProtogenClass): __fields=['header', 'mode', 'filename'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(new_chmodrequest,self).__init__(**dict) if self.__class__ is new_chmodrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(new_chmodrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(new_chmodrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=new_requestheader(**{'command': 0x12}) self.__field_header.writetobuffer(buf) try: self.__field_mode except: self.__field_mode=UINT(**{'sizeinbytes': 2}) self.__field_mode.writetobuffer(buf) try: self.__field_filename except: self.__field_filename=USTRING(**{'terminator': 0, 'encoding': PHONE_ENCODING }) self.__field_filename.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=new_requestheader(**{'command': 0x12}) self.__field_header.readfrombuffer(buf) self.__field_mode=UINT(**{'sizeinbytes': 2}) self.__field_mode.readfrombuffer(buf) self.__field_filename=USTRING(**{'terminator': 0, 'encoding': PHONE_ENCODING }) self.__field_filename.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=new_requestheader(**{'command': 0x12}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,new_requestheader): self.__field_header=value else: self.__field_header=new_requestheader(value,**{'command': 0x12}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_mode(self): try: self.__field_mode except: self.__field_mode=UINT(**{'sizeinbytes': 2}) return self.__field_mode.getvalue() def __setfield_mode(self, value): if isinstance(value,UINT): self.__field_mode=value else: self.__field_mode=UINT(value,**{'sizeinbytes': 2}) def __delfield_mode(self): del self.__field_mode mode=property(__getfield_mode, __setfield_mode, __delfield_mode, None) def __getfield_filename(self): try: self.__field_filename except: self.__field_filename=USTRING(**{'terminator': 0, 'encoding': PHONE_ENCODING }) return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'terminator': 0, 'encoding': PHONE_ENCODING }) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('mode', self.__field_mode, None) yield ('filename', self.__field_filename, None) class new_chmodresponse(BaseProtogenClass): __fields=['header', 'error'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(new_chmodresponse,self).__init__(**dict) if self.__class__ is new_chmodresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(new_chmodresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(new_chmodresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_error.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=new_responseheader() self.__field_header.readfrombuffer(buf) self.__field_error=UINT(**{'sizeinbytes': 4}) self.__field_error.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,new_responseheader): self.__field_header=value else: self.__field_header=new_responseheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_error(self): return self.__field_error.getvalue() def __setfield_error(self, value): if isinstance(value,UINT): self.__field_error=value else: self.__field_error=UINT(value,**{'sizeinbytes': 4}) def __delfield_error(self): del self.__field_error error=property(__getfield_error, __setfield_error, __delfield_error, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('error', self.__field_error, None) class new_reconfigfilesystemrequest(BaseProtogenClass): """Called after mkdir/rmdir and writing files, possibly a filesystem status request with space used/free etc. """ __fields=['header', 'dirname'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(new_reconfigfilesystemrequest,self).__init__(**dict) if self.__class__ is new_reconfigfilesystemrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(new_reconfigfilesystemrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(new_reconfigfilesystemrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=new_requestheader(**{'command': 0x13}) self.__field_header.writetobuffer(buf) try: self.__field_dirname except: self.__field_dirname=UINT(**{'sizeinbytes': 2, 'constant': 0x002f}) self.__field_dirname.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=new_requestheader(**{'command': 0x13}) self.__field_header.readfrombuffer(buf) self.__field_dirname=UINT(**{'sizeinbytes': 2, 'constant': 0x002f}) self.__field_dirname.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=new_requestheader(**{'command': 0x13}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,new_requestheader): self.__field_header=value else: self.__field_header=new_requestheader(value,**{'command': 0x13}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_dirname(self): try: self.__field_dirname except: self.__field_dirname=UINT(**{'sizeinbytes': 2, 'constant': 0x002f}) return self.__field_dirname.getvalue() def __setfield_dirname(self, value): if isinstance(value,UINT): self.__field_dirname=value else: self.__field_dirname=UINT(value,**{'sizeinbytes': 2, 'constant': 0x002f}) def __delfield_dirname(self): del self.__field_dirname dirname=property(__getfield_dirname, __setfield_dirname, __delfield_dirname, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('dirname', self.__field_dirname, None) class new_reconfigfilesystemresponse(BaseProtogenClass): __fields=['header', 'unknown'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(new_reconfigfilesystemresponse,self).__init__(**dict) if self.__class__ is new_reconfigfilesystemresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(new_reconfigfilesystemresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(new_reconfigfilesystemresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) try: self.__field_unknown except: self.__field_unknown=UNKNOWN(**{'sizeinbytes': 44}) self.__field_unknown.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=new_responseheader() self.__field_header.readfrombuffer(buf) self.__field_unknown=UNKNOWN(**{'sizeinbytes': 44}) self.__field_unknown.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,new_responseheader): self.__field_header=value else: self.__field_header=new_responseheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_unknown(self): try: self.__field_unknown except: self.__field_unknown=UNKNOWN(**{'sizeinbytes': 44}) return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UNKNOWN): self.__field_unknown=value else: self.__field_unknown=UNKNOWN(value,**{'sizeinbytes': 44}) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('unknown', self.__field_unknown, None) # Several responses are nothing mkdirresponse=responseheader rmdirresponse=responseheader rmfileresponse=responseheader writefileresponse=responseheader writefileblockresponse=responseheader setfileattrresponse=responseheader new_mkdirresponse=new_responseheader new_rmdirresponse=new_responseheader new_rmfileresponse=new_responseheader bitpim-1.0.7+dfsg1/src/phones/com_lgvx5500.py0000644001616600161660000000740111273577630016751 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2009 Nathan Hjelm ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### """ Communicate with the LG VX5500 cell phone """ import common import com_lgvx9700 import p_lgvx5500 parentphone=com_lgvx9700.Phone class Phone(parentphone): desc="LG-VX5500" helpid=None protocolclass=p_lgvx5500 serialsname='lgvx5500' my_model='VX5500' builtinringtones= ('Low Beep Once', 'Low Beeps', 'Loud Beep Once', 'Loud Beeps', 'Door Bell', 'VZW Default Ringtone', 'Home Phone', 'Short Note Beep', 'Move Bell', 'Lullaby', 'Telephone', 'Wahwah', 'Just Fine', 'Froggy Night', 'Whistling Wizard', 'Recollection', 'Funky Band', 'Why Not', 'Mystique', 'Evening Crow', 'Latin Fever', 'Cigar and Wine', 'Are You Ready', 'No Ring') ringtonelocations= ( # type index file default dir external dir max type index ('ringers', 'dload/myringtone.dat','brew/mod/10889/ringtones', '', 100, 0x01, 100), ( 'sounds', 'dload/mysound.dat', 'brew/mod/18067', '', 100, 0x02, None), ) wallpaperlocations= ( # type index file default dir external dir max type Index ( 'images', 'dload/image.dat', 'brew/mod/10888', '', 100, 0x00, 100), ) def setDMversion(self): self._DMv5=False self._DMv6=True self._timeout=5 # Assume a quick timeout on newer phones parentprofile=com_lgvx9700.Profile class Profile(parentprofile): phone_manufacturer='LG Electronics Inc' phone_model='VX5500' # inside screen resoluation WALLPAPER_WIDTH=176 WALLPAPER_HEIGHT=220 ringtoneorigins=('ringers', 'sounds') imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 176, 'height': 220, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 96, 'height': 64, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", {'width': 96, 'height': 64, 'format': "JPEG"})) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading # ('call_history', 'read', None),# all call history list reading # ('sms', 'read', None), # all SMS list reading ('memo', 'read', None), # all memo list reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), # ('sms', 'write', 'OVERWRITE'), # all SMS list writing ('memo', 'write', 'OVERWRITE'), # all memo list writing ('t9_udb', 'write', 'OVERWRITE'), ) if __debug__: _supportedsyncs+=( ('t9_udb', 'read', 'OVERWRITE'), ) bitpim-1.0.7+dfsg1/src/phones/com_sanyo5400.py0000644001616600161660000000233610232320421017075 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_sanyo5400.py 2321 2005-04-23 01:12:49Z sawecw $ """Talk to the Sanyo SCP-5400 (RL2500) cell phone""" # my modules import common import p_sanyo5400 import com_brew import com_phone import com_sanyo import com_sanyonewer import prototypes class Phone(com_sanyonewer.Phone): "Talk to the Sanyo SCP-5400 cell phone" desc="SCP-5400" FIRST_MEDIA_DIRECTORY=2 LAST_MEDIA_DIRECTORY=3 imagelocations=( # offset, directory #, indexflag, type, maximumentries ) protocolclass=p_sanyo5400 serialsname='scp5400' # Should it be 4 or 0? calendar_defaultringtone=0 def __init__(self, logtarget, commport): com_sanyonewer.Phone.__init__(self, logtarget, commport) self.mode=self.MODENONE class Profile(com_sanyonewer.Profile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='SANYO' phone_model='SCP-5400/US' def __init__(self): com_sanyonewer.Profile.__init__(self) bitpim-1.0.7+dfsg1/src/phones/p_lgvx4400.py0000644001616600161660000047360111153373721016431 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VX4400""" import re from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=1 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=200 MAXCALENDARDESCRIPTION=38 MAX_PHONEBOOK_GROUPS=10 NUMEMAILS=3 NUMPHONENUMBERS=5 pb_group_filename='pim/pbgroup.dat' NORINGTONE=0 NOMSGRINGTONE=0 NOWALLPAPER=0 MEMOLENGTH=33 SMS_CANNED_MAX_ITEMS=18 SMS_CANNED_MAX_LENGTH=101 SMS_CANNED_FILENAME="sms/mediacan000.dat" SMS_PATTERNS={'Inbox': re.compile(r"^.*/inbox[0-9][0-9][0-9]\.dat$"), 'Sent': re.compile(r"^.*/outbox[0-9][0-9][0-9]\.dat$"), 'Saved': re.compile(r"^.*/sf[0-9][0-9]\.dat$"), } numbertypetab=( 'home', 'home2', 'office', 'office2', 'cell', 'cell2', 'pager', 'fax', 'fax2', 'none' ) # Calendar parameters NUMCALENDARENTRIES=300 # ?? for VX4400 CAL_REP_NONE=0x10 CAL_REP_DAILY=0x11 CAL_REP_MONFRI=0x12 CAL_REP_WEEKLY=0x13 CAL_REP_MONTHLY=0x14 CAL_REP_YEARLY=0x15 CAL_DOW_SUN=0x0800 CAL_DOW_MON=0x0400 CAL_DOW_TUE=0x0200 CAL_DOW_WED=0x0100 CAL_DOW_THU=0x0080 CAL_DOW_FRI=0x0040 CAL_DOW_SAT=0x0020 CAL_DOW_EXCEPTIONS=0x0010 CAL_REMINDER_NONE=0 CAL_REMINDER_ONTIME=1 CAL_REMINDER_5MIN=2 CAL_REMINDER_10MIN=3 CAL_REMINDER_1HOUR=4 CAL_REMINDER_1DAY=5 CAL_REMINDER_2DAYS=6 CAL_REPEAT_DATE=(4095, 12, 31) cal_dir='sch' cal_data_file_name='sch/schedule.dat' cal_exception_file_name='sch/schexception.dat' cal_has_voice_id=False # Text Memo const text_memo_file='sch/memo.dat' PHONE_ENCODING='iso8859_1' class speeddial(BaseProtogenClass): __fields=['entry', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddial,self).__init__(**dict) if self.__class__ is speeddial: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddial,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddial,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_entry.writetobuffer(buf) try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_entry.readfrombuffer(buf) self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 1, 'default': 0xff}) return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,UINT): self.__field_entry=value else: self.__field_entry=UINT(value,**{'sizeinbytes': 1, 'default': 0xff}) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_number(self): try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,UINT): self.__field_number=value else: self.__field_number=UINT(value,**{'sizeinbytes': 1, 'default': 0xff}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('entry', self.__field_entry, None) yield ('number', self.__field_number, None) class speeddials(BaseProtogenClass): __fields=['speeddials'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddials,self).__init__(**dict) if self.__class__ is speeddials: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddials,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddials,kwargs) if len(args): dict2={'length': NUMSPEEDDIALS, 'elementclass': speeddial} dict2.update(kwargs) kwargs=dict2 self.__field_speeddials=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_speeddials(self): try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) return self.__field_speeddials.getvalue() def __setfield_speeddials(self, value): if isinstance(value,LIST): self.__field_speeddials=value else: self.__field_speeddials=LIST(value,**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) def __delfield_speeddials(self): del self.__field_speeddials speeddials=property(__getfield_speeddials, __setfield_speeddials, __delfield_speeddials, None) def iscontainer(self): return True def containerelements(self): yield ('speeddials', self.__field_speeddials, None) class pbreadentryresponse(BaseProtogenClass): "Results of reading one entry" __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbreadentryresponse,self).__init__(**dict) if self.__class__ is pbreadentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbreadentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbreadentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbupdateentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbupdateentryrequest,self).__init__(**dict) if self.__class__ is pbupdateentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbupdateentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbupdateentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x04, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbappendentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbappendentryrequest,self).__init__(**dict) if self.__class__ is pbappendentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbappendentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbappendentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x03, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbentry(BaseProtogenClass): __fields=['serial1', 'entrysize', 'serial2', 'entrynumber', 'name', 'group', 'emails', 'url', 'ringtone', 'msgringtone', 'secret', 'memo', 'wallpaper', 'numbertypes', 'numbers', 'unknown20c'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_serial1.writetobuffer(buf) try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x0202}) self.__field_entrysize.writetobuffer(buf) self.__field_serial2.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_group.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx4400_128, 'length': NUMEMAILS}) self.__field_emails.writetobuffer(buf) self.__field_url.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_msgringtone.writetobuffer(buf) self.__field_secret.writetobuffer(buf) self.__field_memo.writetobuffer(buf) self.__field_wallpaper.writetobuffer(buf) try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx4400_136, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx4400_138, 'length': NUMPHONENUMBERS}) self.__field_numbers.writetobuffer(buf) try: self.__field_unknown20c except: self.__field_unknown20c=UNKNOWN() self.__field_unknown20c.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x0202}) self.__field_entrysize.readfrombuffer(buf) self.__field_serial2=UINT(**{'sizeinbytes': 4}) self.__field_serial2.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 2}) self.__field_entrynumber.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 2}) self.__field_group.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx4400_128, 'length': NUMEMAILS}) self.__field_emails.readfrombuffer(buf) self.__field_url=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_url.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_msgringtone=UINT(**{'sizeinbytes': 1}) self.__field_msgringtone.readfrombuffer(buf) self.__field_secret=BOOL(**{'sizeinbytes': 1}) self.__field_secret.readfrombuffer(buf) self.__field_memo=USTRING(**{'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) self.__field_memo.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 1}) self.__field_wallpaper.readfrombuffer(buf) self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx4400_136, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.readfrombuffer(buf) self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx4400_138, 'length': NUMPHONENUMBERS}) self.__field_numbers.readfrombuffer(buf) self.__field_unknown20c=UNKNOWN() self.__field_unknown20c.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_entrysize(self): try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x0202}) return self.__field_entrysize.getvalue() def __setfield_entrysize(self, value): if isinstance(value,UINT): self.__field_entrysize=value else: self.__field_entrysize=UINT(value,**{'sizeinbytes': 2, 'constant': 0x0202}) def __delfield_entrysize(self): del self.__field_entrysize entrysize=property(__getfield_entrysize, __setfield_entrysize, __delfield_entrysize, None) def __getfield_serial2(self): return self.__field_serial2.getvalue() def __setfield_serial2(self, value): if isinstance(value,UINT): self.__field_serial2=value else: self.__field_serial2=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial2(self): del self.__field_serial2 serial2=property(__getfield_serial2, __setfield_serial2, __delfield_serial2, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 2}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 2}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx4400_128, 'length': NUMEMAILS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_lgvx4400_128, 'length': NUMEMAILS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, None) def __getfield_url(self): return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,USTRING): self.__field_url=value else: self.__field_url=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "ringtone index for a call") def __getfield_msgringtone(self): return self.__field_msgringtone.getvalue() def __setfield_msgringtone(self, value): if isinstance(value,UINT): self.__field_msgringtone=value else: self.__field_msgringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_msgringtone(self): del self.__field_msgringtone msgringtone=property(__getfield_msgringtone, __setfield_msgringtone, __delfield_msgringtone, "ringtone index for a text message") def __getfield_secret(self): return self.__field_secret.getvalue() def __setfield_secret(self, value): if isinstance(value,BOOL): self.__field_secret=value else: self.__field_secret=BOOL(value,**{'sizeinbytes': 1}) def __delfield_secret(self): del self.__field_secret secret=property(__getfield_secret, __setfield_secret, __delfield_secret, None) def __getfield_memo(self): return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,USTRING): self.__field_memo=value else: self.__field_memo=USTRING(value,**{'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 1}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_numbertypes(self): try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx4400_136, 'length': NUMPHONENUMBERS}) return self.__field_numbertypes.getvalue() def __setfield_numbertypes(self, value): if isinstance(value,LIST): self.__field_numbertypes=value else: self.__field_numbertypes=LIST(value,**{'elementclass': _gen_p_lgvx4400_136, 'length': NUMPHONENUMBERS}) def __delfield_numbertypes(self): del self.__field_numbertypes numbertypes=property(__getfield_numbertypes, __setfield_numbertypes, __delfield_numbertypes, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx4400_138, 'length': NUMPHONENUMBERS}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'elementclass': _gen_p_lgvx4400_138, 'length': NUMPHONENUMBERS}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_unknown20c(self): try: self.__field_unknown20c except: self.__field_unknown20c=UNKNOWN() return self.__field_unknown20c.getvalue() def __setfield_unknown20c(self, value): if isinstance(value,UNKNOWN): self.__field_unknown20c=value else: self.__field_unknown20c=UNKNOWN(value,) def __delfield_unknown20c(self): del self.__field_unknown20c unknown20c=property(__getfield_unknown20c, __setfield_unknown20c, __delfield_unknown20c, None) def iscontainer(self): return True def containerelements(self): yield ('serial1', self.__field_serial1, None) yield ('entrysize', self.__field_entrysize, None) yield ('serial2', self.__field_serial2, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('name', self.__field_name, None) yield ('group', self.__field_group, None) yield ('emails', self.__field_emails, None) yield ('url', self.__field_url, None) yield ('ringtone', self.__field_ringtone, "ringtone index for a call") yield ('msgringtone', self.__field_msgringtone, "ringtone index for a text message") yield ('secret', self.__field_secret, None) yield ('memo', self.__field_memo, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('numbertypes', self.__field_numbertypes, None) yield ('numbers', self.__field_numbers, None) yield ('unknown20c', self.__field_unknown20c, None) class _gen_p_lgvx4400_128(BaseProtogenClass): 'Anonymous inner class' __fields=['email'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx4400_128,self).__init__(**dict) if self.__class__ is _gen_p_lgvx4400_128: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx4400_128,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx4400_128,kwargs) if len(args): dict2={'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_email=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_email.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_email=USTRING(**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_email.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def iscontainer(self): return True def containerelements(self): yield ('email', self.__field_email, None) class _gen_p_lgvx4400_136(BaseProtogenClass): 'Anonymous inner class' __fields=['numbertype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx4400_136,self).__init__(**dict) if self.__class__ is _gen_p_lgvx4400_136: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx4400_136,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx4400_136,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_numbertype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numbertype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numbertype=UINT(**{'sizeinbytes': 1}) self.__field_numbertype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numbertype(self): return self.__field_numbertype.getvalue() def __setfield_numbertype(self, value): if isinstance(value,UINT): self.__field_numbertype=value else: self.__field_numbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_numbertype(self): del self.__field_numbertype numbertype=property(__getfield_numbertype, __setfield_numbertype, __delfield_numbertype, None) def iscontainer(self): return True def containerelements(self): yield ('numbertype', self.__field_numbertype, None) class _gen_p_lgvx4400_138(BaseProtogenClass): 'Anonymous inner class' __fields=['number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx4400_138,self).__init__(**dict) if self.__class__ is _gen_p_lgvx4400_138: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx4400_138,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx4400_138,kwargs) if len(args): dict2={'sizeinbytes': 49, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_number=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) class pbgroup(BaseProtogenClass): "A single group" __fields=['icon', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroup,self).__init__(**dict) if self.__class__ is pbgroup: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroup,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroup,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_icon.writetobuffer(buf) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_icon=UINT(**{'sizeinbytes': 1}) self.__field_icon.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_icon(self): return self.__field_icon.getvalue() def __setfield_icon(self, value): if isinstance(value,UINT): self.__field_icon=value else: self.__field_icon=UINT(value,**{'sizeinbytes': 1}) def __delfield_icon(self): del self.__field_icon icon=property(__getfield_icon, __setfield_icon, __delfield_icon, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('icon', self.__field_icon, None) yield ('name', self.__field_name, None) class pbgroups(BaseProtogenClass): "Phonebook groups" __fields=['groups'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroups,self).__init__(**dict) if self.__class__ is pbgroups: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroups,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroups,kwargs) if len(args): dict2={'elementclass': pbgroup} dict2.update(kwargs) kwargs=dict2 self.__field_groups=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_groups(self): try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) return self.__field_groups.getvalue() def __setfield_groups(self, value): if isinstance(value,LIST): self.__field_groups=value else: self.__field_groups=LIST(value,**{'elementclass': pbgroup}) def __delfield_groups(self): del self.__field_groups groups=property(__getfield_groups, __setfield_groups, __delfield_groups, None) def iscontainer(self): return True def containerelements(self): yield ('groups', self.__field_groups, None) class indexentry(BaseProtogenClass): __fields=['index', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_index.writetobuffer(buf) try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 40, 'default': ""}) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_index.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 40, 'default': ""}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 40, 'default': ""}) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 40, 'default': ""}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('name', self.__field_name, None) class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['maxitems', 'numactiveitems', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_maxitems except: self.__field_maxitems=UINT(**{'constant': 30}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{'length': self.maxitems, 'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_items=LIST(**{'length': self.maxitems, 'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_maxitems(self): return self.__field_maxitems.getvalue() def __setfield_maxitems(self, value): if isinstance(value,UINT): self.__field_maxitems=value else: self.__field_maxitems=UINT(value,**{'constant': 30}) def __delfield_maxitems(self): del self.__field_maxitems maxitems=property(__getfield_maxitems, __setfield_maxitems, __delfield_maxitems, None) def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'length': self.maxitems, 'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'length': self.maxitems, 'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('maxitems', self.__field_maxitems, None) yield ('numactiveitems', self.__field_numactiveitems, None) yield ('items', self.__field_items, None) class scheduleexception(BaseProtogenClass): __fields=['pos', 'day', 'month', 'year'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexception,self).__init__(**dict) if self.__class__ is scheduleexception: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexception,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexception,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_day.writetobuffer(buf) self.__field_month.writetobuffer(buf) self.__field_year.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_day=UINT(**{'sizeinbytes': 1}) self.__field_day.readfrombuffer(buf) self.__field_month=UINT(**{'sizeinbytes': 1}) self.__field_month.readfrombuffer(buf) self.__field_year=UINT(**{'sizeinbytes': 2}) self.__field_year.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "Refers to event id (position in schedule file) that this suppresses") def __getfield_day(self): return self.__field_day.getvalue() def __setfield_day(self, value): if isinstance(value,UINT): self.__field_day=value else: self.__field_day=UINT(value,**{'sizeinbytes': 1}) def __delfield_day(self): del self.__field_day day=property(__getfield_day, __setfield_day, __delfield_day, None) def __getfield_month(self): return self.__field_month.getvalue() def __setfield_month(self, value): if isinstance(value,UINT): self.__field_month=value else: self.__field_month=UINT(value,**{'sizeinbytes': 1}) def __delfield_month(self): del self.__field_month month=property(__getfield_month, __setfield_month, __delfield_month, None) def __getfield_year(self): return self.__field_year.getvalue() def __setfield_year(self, value): if isinstance(value,UINT): self.__field_year=value else: self.__field_year=UINT(value,**{'sizeinbytes': 2}) def __delfield_year(self): del self.__field_year year=property(__getfield_year, __setfield_year, __delfield_year, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "Refers to event id (position in schedule file) that this suppresses") yield ('day', self.__field_day, None) yield ('month', self.__field_month, None) yield ('year', self.__field_year, None) class scheduleexceptionfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexceptionfile,self).__init__(**dict) if self.__class__ is scheduleexceptionfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexceptionfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexceptionfile,kwargs) if len(args): dict2={'elementclass': scheduleexception} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': scheduleexception}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class scheduleevent(BaseProtogenClass): __fields=['packet_size', 'pos', 'start', 'end', 'repeat', 'daybitmap', 'pad2', 'alarmminutes', 'alarmhours', 'alarmtype', 'snoozedelay', 'ringtone', 'description'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleevent,self).__init__(**dict) if self.__class__ is scheduleevent: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleevent,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleevent,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_packet_size except: self.__field_packet_size=UINT(**{ 'constant': 60 }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) self.__field_daybitmap.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad2.writetobuffer(buf) self.__field_alarmminutes.writetobuffer(buf) self.__field_alarmhours.writetobuffer(buf) self.__field_alarmtype.writetobuffer(buf) try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_description.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_start=LGCALDATE(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=LGCALDATE(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_repeat=UINT(**{'sizeinbytes': 1}) self.__field_repeat.readfrombuffer(buf) self.__field_daybitmap=UINT(**{'sizeinbytes': 2}) self.__field_daybitmap.readfrombuffer(buf) self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad2.readfrombuffer(buf) self.__field_alarmminutes=UINT(**{'sizeinbytes': 1}) self.__field_alarmminutes.readfrombuffer(buf) self.__field_alarmhours=UINT(**{'sizeinbytes': 1}) self.__field_alarmhours.readfrombuffer(buf) self.__field_alarmtype=UINT(**{'sizeinbytes': 1}) self.__field_alarmtype.readfrombuffer(buf) self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_description=USTRING(**{'sizeinbytes': 39, 'encoding': PHONE_ENCODING, 'raiseontruncate': False, 'raiseonunterminatedread': False }) self.__field_description.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_packet_size(self): return self.__field_packet_size.getvalue() def __setfield_packet_size(self, value): if isinstance(value,UINT): self.__field_packet_size=value else: self.__field_packet_size=UINT(value,**{ 'constant': 60 }) def __delfield_packet_size(self): del self.__field_packet_size packet_size=property(__getfield_packet_size, __setfield_packet_size, __delfield_packet_size, "Faster than packetsize()") def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "position within file, used as an event id") def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,LGCALDATE): self.__field_start=value else: self.__field_start=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,LGCALDATE): self.__field_end=value else: self.__field_end=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,UINT): self.__field_repeat=value else: self.__field_repeat=UINT(value,**{'sizeinbytes': 1}) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_daybitmap(self): return self.__field_daybitmap.getvalue() def __setfield_daybitmap(self, value): if isinstance(value,UINT): self.__field_daybitmap=value else: self.__field_daybitmap=UINT(value,**{'sizeinbytes': 2}) def __delfield_daybitmap(self): del self.__field_daybitmap daybitmap=property(__getfield_daybitmap, __setfield_daybitmap, __delfield_daybitmap, "which days a weekly repeat event happens on") def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UINT): self.__field_pad2=value else: self.__field_pad2=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_alarmminutes(self): return self.__field_alarmminutes.getvalue() def __setfield_alarmminutes(self, value): if isinstance(value,UINT): self.__field_alarmminutes=value else: self.__field_alarmminutes=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmminutes(self): del self.__field_alarmminutes alarmminutes=property(__getfield_alarmminutes, __setfield_alarmminutes, __delfield_alarmminutes, "a value of 100 indicates not set") def __getfield_alarmhours(self): return self.__field_alarmhours.getvalue() def __setfield_alarmhours(self, value): if isinstance(value,UINT): self.__field_alarmhours=value else: self.__field_alarmhours=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmhours(self): del self.__field_alarmhours alarmhours=property(__getfield_alarmhours, __setfield_alarmhours, __delfield_alarmhours, "a value of 100 indicates not set") def __getfield_alarmtype(self): return self.__field_alarmtype.getvalue() def __setfield_alarmtype(self, value): if isinstance(value,UINT): self.__field_alarmtype=value else: self.__field_alarmtype=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmtype(self): del self.__field_alarmtype alarmtype=property(__getfield_alarmtype, __setfield_alarmtype, __delfield_alarmtype, "preset alarm reminder type") def __getfield_snoozedelay(self): try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_snoozedelay.getvalue() def __setfield_snoozedelay(self, value): if isinstance(value,UINT): self.__field_snoozedelay=value else: self.__field_snoozedelay=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_snoozedelay(self): del self.__field_snoozedelay snoozedelay=property(__getfield_snoozedelay, __setfield_snoozedelay, __delfield_snoozedelay, "in minutes, not for this phone") def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_description(self): return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,USTRING): self.__field_description=value else: self.__field_description=USTRING(value,**{'sizeinbytes': 39, 'encoding': PHONE_ENCODING, 'raiseontruncate': False, 'raiseonunterminatedread': False }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def iscontainer(self): return True def containerelements(self): yield ('packet_size', self.__field_packet_size, "Faster than packetsize()") yield ('pos', self.__field_pos, "position within file, used as an event id") yield ('start', self.__field_start, None) yield ('end', self.__field_end, None) yield ('repeat', self.__field_repeat, None) yield ('daybitmap', self.__field_daybitmap, "which days a weekly repeat event happens on") yield ('pad2', self.__field_pad2, None) yield ('alarmminutes', self.__field_alarmminutes, "a value of 100 indicates not set") yield ('alarmhours', self.__field_alarmhours, "a value of 100 indicates not set") yield ('alarmtype', self.__field_alarmtype, "preset alarm reminder type") yield ('snoozedelay', self.__field_snoozedelay, "in minutes, not for this phone") yield ('ringtone', self.__field_ringtone, None) yield ('description', self.__field_description, None) class schedulefile(BaseProtogenClass): __fields=['numactiveitems', 'events'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(schedulefile,self).__init__(**dict) if self.__class__ is schedulefile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(schedulefile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(schedulefile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{'elementclass': scheduleevent}) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('events', self.__field_events, None) class call(BaseProtogenClass): __fields=['GPStime', 'unknown1', 'duration', 'number', 'name', 'numberlength', 'unknown2', 'pbnumbertype', 'unknown3', 'pbentrynum'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(call,self).__init__(**dict) if self.__class__ is call: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(call,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(call,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_numberlength.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_pbnumbertype.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_pbentrynum.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 4}) self.__field_unknown1.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_numberlength=UINT(**{'sizeinbytes': 1}) self.__field_numberlength.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_pbnumbertype=UINT(**{'sizeinbytes': 1}) self.__field_pbnumbertype.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 2}) self.__field_unknown3.readfrombuffer(buf) self.__field_pbentrynum=UINT(**{'sizeinbytes': 1}) self.__field_pbentrynum.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numberlength(self): return self.__field_numberlength.getvalue() def __setfield_numberlength(self, value): if isinstance(value,UINT): self.__field_numberlength=value else: self.__field_numberlength=UINT(value,**{'sizeinbytes': 1}) def __delfield_numberlength(self): del self.__field_numberlength numberlength=property(__getfield_numberlength, __setfield_numberlength, __delfield_numberlength, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_pbnumbertype(self): return self.__field_pbnumbertype.getvalue() def __setfield_pbnumbertype(self, value): if isinstance(value,UINT): self.__field_pbnumbertype=value else: self.__field_pbnumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_pbnumbertype(self): del self.__field_pbnumbertype pbnumbertype=property(__getfield_pbnumbertype, __setfield_pbnumbertype, __delfield_pbnumbertype, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_pbentrynum(self): return self.__field_pbentrynum.getvalue() def __setfield_pbentrynum(self, value): if isinstance(value,UINT): self.__field_pbentrynum=value else: self.__field_pbentrynum=UINT(value,**{'sizeinbytes': 1}) def __delfield_pbentrynum(self): del self.__field_pbentrynum pbentrynum=property(__getfield_pbentrynum, __setfield_pbentrynum, __delfield_pbentrynum, None) def iscontainer(self): return True def containerelements(self): yield ('GPStime', self.__field_GPStime, None) yield ('unknown1', self.__field_unknown1, None) yield ('duration', self.__field_duration, None) yield ('number', self.__field_number, None) yield ('name', self.__field_name, None) yield ('numberlength', self.__field_numberlength, None) yield ('unknown2', self.__field_unknown2, None) yield ('pbnumbertype', self.__field_pbnumbertype, None) yield ('unknown3', self.__field_unknown3, None) yield ('pbentrynum', self.__field_pbentrynum, None) class callhistory(BaseProtogenClass): __fields=['numcalls', 'unknown1', 'calls'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callhistory,self).__init__(**dict) if self.__class__ is callhistory: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callhistory,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callhistory,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numcalls.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numcalls=UINT(**{'sizeinbytes': 4}) self.__field_numcalls.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numcalls(self): return self.__field_numcalls.getvalue() def __setfield_numcalls(self, value): if isinstance(value,UINT): self.__field_numcalls=value else: self.__field_numcalls=UINT(value,**{'sizeinbytes': 4}) def __delfield_numcalls(self): del self.__field_numcalls numcalls=property(__getfield_numcalls, __setfield_numcalls, __delfield_numcalls, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_calls(self): try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) return self.__field_calls.getvalue() def __setfield_calls(self, value): if isinstance(value,LIST): self.__field_calls=value else: self.__field_calls=LIST(value,**{'elementclass': call}) def __delfield_calls(self): del self.__field_calls calls=property(__getfield_calls, __setfield_calls, __delfield_calls, None) def iscontainer(self): return True def containerelements(self): yield ('numcalls', self.__field_numcalls, None) yield ('unknown1', self.__field_unknown1, None) yield ('calls', self.__field_calls, None) class msg_record(BaseProtogenClass): __fields=['unknown1', 'binary', 'unknown3', 'unknown4', 'unknown6', 'length', 'msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(msg_record,self).__init__(**dict) if self.__class__ is msg_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(msg_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(msg_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_binary.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_length.writetobuffer(buf) try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx4400_261, 'length': 219}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_binary=UINT(**{'sizeinbytes': 1}) self.__field_binary.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1}) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 1}) self.__field_unknown4.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 1}) self.__field_unknown6.readfrombuffer(buf) self.__field_length=UINT(**{'sizeinbytes': 1}) self.__field_length.readfrombuffer(buf) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx4400_261, 'length': 219}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_binary(self): return self.__field_binary.getvalue() def __setfield_binary(self, value): if isinstance(value,UINT): self.__field_binary=value else: self.__field_binary=UINT(value,**{'sizeinbytes': 1}) def __delfield_binary(self): del self.__field_binary binary=property(__getfield_binary, __setfield_binary, __delfield_binary, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_length(self): return self.__field_length.getvalue() def __setfield_length(self, value): if isinstance(value,UINT): self.__field_length=value else: self.__field_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_length(self): del self.__field_length length=property(__getfield_length, __setfield_length, __delfield_length, None) def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx4400_261, 'length': 219}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx4400_261, 'length': 219}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('binary', self.__field_binary, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) yield ('unknown6', self.__field_unknown6, None) yield ('length', self.__field_length, None) yield ('msg', self.__field_msg, None) class _gen_p_lgvx4400_261(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx4400_261,self).__init__(**dict) if self.__class__ is _gen_p_lgvx4400_261: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx4400_261,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx4400_261,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class recipient_record(BaseProtogenClass): __fields=['unknown1', 'number', 'status', 'timesent', 'timereceived', 'unknown2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(recipient_record,self).__init__(**dict) if self.__class__ is recipient_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(recipient_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(recipient_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_timereceived.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UINT(**{'sizeinbytes': 2}) self.__field_unknown1.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49}) self.__field_number.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_timereceived=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timereceived.readfrombuffer(buf) self.__field_unknown2=DATA(**{'sizeinbytes': 8}) self.__field_unknown2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_timereceived(self): return self.__field_timereceived.getvalue() def __setfield_timereceived(self, value): if isinstance(value,LGCALDATE): self.__field_timereceived=value else: self.__field_timereceived=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timereceived(self): del self.__field_timereceived timereceived=property(__getfield_timereceived, __setfield_timereceived, __delfield_timereceived, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,DATA): self.__field_unknown2=value else: self.__field_unknown2=DATA(value,**{'sizeinbytes': 8}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('number', self.__field_number, None) yield ('status', self.__field_status, None) yield ('timesent', self.__field_timesent, None) yield ('timereceived', self.__field_timereceived, None) yield ('unknown2', self.__field_unknown2, None) class sms_saved(BaseProtogenClass): __fields=['outboxmsg', 'pad', 'outbox', 'inbox'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_saved,self).__init__(**dict) if self.__class__ is sms_saved: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_saved,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_saved,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_outboxmsg.writetobuffer(buf) self.__field_pad.writetobuffer(buf) if self.outboxmsg: self.__field_outbox.writetobuffer(buf) if not self.outboxmsg: self.__field_inbox.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_outboxmsg=UINT(**{'sizeinbytes': 4}) self.__field_outboxmsg.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 4}) self.__field_pad.readfrombuffer(buf) if self.outboxmsg: self.__field_outbox=sms_out() self.__field_outbox.readfrombuffer(buf) if not self.outboxmsg: self.__field_inbox=sms_in() self.__field_inbox.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_outboxmsg(self): return self.__field_outboxmsg.getvalue() def __setfield_outboxmsg(self, value): if isinstance(value,UINT): self.__field_outboxmsg=value else: self.__field_outboxmsg=UINT(value,**{'sizeinbytes': 4}) def __delfield_outboxmsg(self): del self.__field_outboxmsg outboxmsg=property(__getfield_outboxmsg, __setfield_outboxmsg, __delfield_outboxmsg, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 4}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_outbox(self): return self.__field_outbox.getvalue() def __setfield_outbox(self, value): if isinstance(value,sms_out): self.__field_outbox=value else: self.__field_outbox=sms_out(value,) def __delfield_outbox(self): del self.__field_outbox outbox=property(__getfield_outbox, __setfield_outbox, __delfield_outbox, None) def __getfield_inbox(self): return self.__field_inbox.getvalue() def __setfield_inbox(self, value): if isinstance(value,sms_in): self.__field_inbox=value else: self.__field_inbox=sms_in(value,) def __delfield_inbox(self): del self.__field_inbox inbox=property(__getfield_inbox, __setfield_inbox, __delfield_inbox, None) def iscontainer(self): return True def containerelements(self): yield ('outboxmsg', self.__field_outboxmsg, None) yield ('pad', self.__field_pad, None) if self.outboxmsg: yield ('outbox', self.__field_outbox, None) if not self.outboxmsg: yield ('inbox', self.__field_inbox, None) class sms_out(BaseProtogenClass): __fields=['index', 'locked', 'unknown1', 'timesent', 'subject', 'unknown2', 'num_msg_elements', 'messages', 'unknown5', 'priority', 'unknown7', 'callback', 'recipients'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_out,self).__init__(**dict) if self.__class__ is sms_out: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_out,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_out,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 10}) self.__field_messages.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_unknown7.writetobuffer(buf) self.__field_callback.writetobuffer(buf) try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 10}) self.__field_recipients.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 3}) self.__field_unknown1.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING }) self.__field_subject.readfrombuffer(buf) self.__field_unknown2=DATA(**{'sizeinbytes': 151}) self.__field_unknown2.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 10}) self.__field_messages.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 1}) self.__field_unknown5.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_unknown7=DATA(**{'sizeinbytes': 14}) self.__field_unknown7.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 49}) self.__field_callback.readfrombuffer(buf) self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 10}) self.__field_recipients.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING }) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,DATA): self.__field_unknown2=value else: self.__field_unknown2=DATA(value,**{'sizeinbytes': 151}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_messages(self): try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 10}) return self.__field_messages.getvalue() def __setfield_messages(self, value): if isinstance(value,LIST): self.__field_messages=value else: self.__field_messages=LIST(value,**{'elementclass': msg_record, 'length': 10}) def __delfield_messages(self): del self.__field_messages messages=property(__getfield_messages, __setfield_messages, __delfield_messages, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_unknown7(self): return self.__field_unknown7.getvalue() def __setfield_unknown7(self, value): if isinstance(value,DATA): self.__field_unknown7=value else: self.__field_unknown7=DATA(value,**{'sizeinbytes': 14}) def __delfield_unknown7(self): del self.__field_unknown7 unknown7=property(__getfield_unknown7, __setfield_unknown7, __delfield_unknown7, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 49}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_recipients(self): try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 10}) return self.__field_recipients.getvalue() def __setfield_recipients(self, value): if isinstance(value,LIST): self.__field_recipients=value else: self.__field_recipients=LIST(value,**{'elementclass': recipient_record,'length': 10}) def __delfield_recipients(self): del self.__field_recipients recipients=property(__getfield_recipients, __setfield_recipients, __delfield_recipients, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('locked', self.__field_locked, None) yield ('unknown1', self.__field_unknown1, None) yield ('timesent', self.__field_timesent, None) yield ('subject', self.__field_subject, None) yield ('unknown2', self.__field_unknown2, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('messages', self.__field_messages, None) yield ('unknown5', self.__field_unknown5, None) yield ('priority', self.__field_priority, None) yield ('unknown7', self.__field_unknown7, None) yield ('callback', self.__field_callback, None) yield ('recipients', self.__field_recipients, None) class SMSINBOXMSGFRAGMENT(BaseProtogenClass): __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSINBOXMSGFRAGMENT,self).__init__(**dict) if self.__class__ is SMSINBOXMSGFRAGMENT: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSINBOXMSGFRAGMENT,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSINBOXMSGFRAGMENT,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx4400_296, 'length': 181} dict2.update(kwargs) kwargs=dict2 self.__field_msg=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx4400_296, 'length': 181}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx4400_296, 'length': 181}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx4400_296, 'length': 181}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx4400_296, 'length': 181}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class _gen_p_lgvx4400_296(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx4400_296,self).__init__(**dict) if self.__class__ is _gen_p_lgvx4400_296: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx4400_296,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx4400_296,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class sms_in(BaseProtogenClass): __fields=['msg_index1', 'msg_index2', 'unknown2', 'unknown3', 'timesent', 'unknown', 'callback_length', 'callback', 'sender_length', 'sender', 'unknown4', 'lg_time', 'GPStime', 'unknown5', 'read', 'locked', 'unknown8', 'priority', 'flags', 'subject', 'bin_header1', 'bin_header2', 'unknown6', 'multipartID', 'bin_header3', 'num_msg_elements', 'msglengths', 'msgs', 'unknown5', 'senders_name', 'unknown6'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_in,self).__init__(**dict) if self.__class__ is sms_in: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_in,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_in,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msg_index1.writetobuffer(buf) self.__field_msg_index2.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self.__field_callback_length.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_sender_length.writetobuffer(buf) try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx4400_309, 'length': 38}) self.__field_sender.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_lg_time.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_flags.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_bin_header1.writetobuffer(buf) self.__field_bin_header2.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_multipartID.writetobuffer(buf) self.__field_bin_header3.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx4400_327, 'length': 10}) self.__field_msglengths.writetobuffer(buf) try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_senders_name.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg_index1=UINT(**{'sizeinbytes': 4}) self.__field_msg_index1.readfrombuffer(buf) self.__field_msg_index2=UINT(**{'sizeinbytes': 4}) self.__field_msg_index2.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2}) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 4}) self.__field_unknown3.readfrombuffer(buf) self.__field_timesent=SMSDATE(**{'sizeinbytes': 6}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown=UINT(**{'sizeinbytes': 3}) self.__field_unknown.readfrombuffer(buf) self.__field_callback_length=UINT(**{'sizeinbytes': 1}) self.__field_callback_length.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 38}) self.__field_callback.readfrombuffer(buf) self.__field_sender_length=UINT(**{'sizeinbytes': 1}) self.__field_sender_length.readfrombuffer(buf) self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx4400_309, 'length': 38}) self.__field_sender.readfrombuffer(buf) self.__field_unknown4=DATA(**{'sizeinbytes': 15}) self.__field_unknown4.readfrombuffer(buf) self.__field_lg_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_lg_time.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 2}) self.__field_unknown5.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 1}) self.__field_read.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown8=UINT(**{'sizeinbytes': 2}) self.__field_unknown8.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_flags=DATA(**{'sizeinbytes': 5}) self.__field_flags.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING }) self.__field_subject.readfrombuffer(buf) self.__field_bin_header1=UINT(**{'sizeinbytes': 1}) self.__field_bin_header1.readfrombuffer(buf) self.__field_bin_header2=UINT(**{'sizeinbytes': 1}) self.__field_bin_header2.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 2}) self.__field_unknown6.readfrombuffer(buf) self.__field_multipartID=UINT(**{'sizeinbytes': 2}) self.__field_multipartID.readfrombuffer(buf) self.__field_bin_header3=UINT(**{'sizeinbytes': 1}) self.__field_bin_header3.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx4400_327, 'length': 10}) self.__field_msglengths.readfrombuffer(buf) self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.readfrombuffer(buf) self.__field_unknown5=DATA(**{'sizeinbytes': 437}) self.__field_unknown5.readfrombuffer(buf) self.__field_senders_name=USTRING(**{'sizeinbytes': 33}) self.__field_senders_name.readfrombuffer(buf) self.__field_unknown6=DATA(**{'sizeinbytes': 169}) self.__field_unknown6.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg_index1(self): return self.__field_msg_index1.getvalue() def __setfield_msg_index1(self, value): if isinstance(value,UINT): self.__field_msg_index1=value else: self.__field_msg_index1=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index1(self): del self.__field_msg_index1 msg_index1=property(__getfield_msg_index1, __setfield_msg_index1, __delfield_msg_index1, None) def __getfield_msg_index2(self): return self.__field_msg_index2.getvalue() def __setfield_msg_index2(self, value): if isinstance(value,UINT): self.__field_msg_index2=value else: self.__field_msg_index2=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index2(self): del self.__field_msg_index2 msg_index2=property(__getfield_msg_index2, __setfield_msg_index2, __delfield_msg_index2, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,SMSDATE): self.__field_timesent=value else: self.__field_timesent=SMSDATE(value,**{'sizeinbytes': 6}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UINT): self.__field_unknown=value else: self.__field_unknown=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def __getfield_callback_length(self): return self.__field_callback_length.getvalue() def __setfield_callback_length(self, value): if isinstance(value,UINT): self.__field_callback_length=value else: self.__field_callback_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_length(self): del self.__field_callback_length callback_length=property(__getfield_callback_length, __setfield_callback_length, __delfield_callback_length, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 38}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_sender_length(self): return self.__field_sender_length.getvalue() def __setfield_sender_length(self, value): if isinstance(value,UINT): self.__field_sender_length=value else: self.__field_sender_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_sender_length(self): del self.__field_sender_length sender_length=property(__getfield_sender_length, __setfield_sender_length, __delfield_sender_length, None) def __getfield_sender(self): try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx4400_309, 'length': 38}) return self.__field_sender.getvalue() def __setfield_sender(self, value): if isinstance(value,LIST): self.__field_sender=value else: self.__field_sender=LIST(value,**{'elementclass': _gen_p_lgvx4400_309, 'length': 38}) def __delfield_sender(self): del self.__field_sender sender=property(__getfield_sender, __setfield_sender, __delfield_sender, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,DATA): self.__field_unknown4=value else: self.__field_unknown4=DATA(value,**{'sizeinbytes': 15}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_lg_time(self): return self.__field_lg_time.getvalue() def __setfield_lg_time(self, value): if isinstance(value,LGCALDATE): self.__field_lg_time=value else: self.__field_lg_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_lg_time(self): del self.__field_lg_time lg_time=property(__getfield_lg_time, __setfield_lg_time, __delfield_lg_time, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 1}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,UINT): self.__field_unknown8=value else: self.__field_unknown8=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_flags(self): return self.__field_flags.getvalue() def __setfield_flags(self, value): if isinstance(value,DATA): self.__field_flags=value else: self.__field_flags=DATA(value,**{'sizeinbytes': 5}) def __delfield_flags(self): del self.__field_flags flags=property(__getfield_flags, __setfield_flags, __delfield_flags, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING }) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_bin_header1(self): return self.__field_bin_header1.getvalue() def __setfield_bin_header1(self, value): if isinstance(value,UINT): self.__field_bin_header1=value else: self.__field_bin_header1=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header1(self): del self.__field_bin_header1 bin_header1=property(__getfield_bin_header1, __setfield_bin_header1, __delfield_bin_header1, None) def __getfield_bin_header2(self): return self.__field_bin_header2.getvalue() def __setfield_bin_header2(self, value): if isinstance(value,UINT): self.__field_bin_header2=value else: self.__field_bin_header2=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header2(self): del self.__field_bin_header2 bin_header2=property(__getfield_bin_header2, __setfield_bin_header2, __delfield_bin_header2, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_multipartID(self): return self.__field_multipartID.getvalue() def __setfield_multipartID(self, value): if isinstance(value,UINT): self.__field_multipartID=value else: self.__field_multipartID=UINT(value,**{'sizeinbytes': 2}) def __delfield_multipartID(self): del self.__field_multipartID multipartID=property(__getfield_multipartID, __setfield_multipartID, __delfield_multipartID, None) def __getfield_bin_header3(self): return self.__field_bin_header3.getvalue() def __setfield_bin_header3(self, value): if isinstance(value,UINT): self.__field_bin_header3=value else: self.__field_bin_header3=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header3(self): del self.__field_bin_header3 bin_header3=property(__getfield_bin_header3, __setfield_bin_header3, __delfield_bin_header3, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_msglengths(self): try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx4400_327, 'length': 10}) return self.__field_msglengths.getvalue() def __setfield_msglengths(self, value): if isinstance(value,LIST): self.__field_msglengths=value else: self.__field_msglengths=LIST(value,**{'elementclass': _gen_p_lgvx4400_327, 'length': 10}) def __delfield_msglengths(self): del self.__field_msglengths msglengths=property(__getfield_msglengths, __setfield_msglengths, __delfield_msglengths, None) def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,DATA): self.__field_unknown5=value else: self.__field_unknown5=DATA(value,**{'sizeinbytes': 437}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_senders_name(self): return self.__field_senders_name.getvalue() def __setfield_senders_name(self, value): if isinstance(value,USTRING): self.__field_senders_name=value else: self.__field_senders_name=USTRING(value,**{'sizeinbytes': 33}) def __delfield_senders_name(self): del self.__field_senders_name senders_name=property(__getfield_senders_name, __setfield_senders_name, __delfield_senders_name, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,DATA): self.__field_unknown6=value else: self.__field_unknown6=DATA(value,**{'sizeinbytes': 169}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def iscontainer(self): return True def containerelements(self): yield ('msg_index1', self.__field_msg_index1, None) yield ('msg_index2', self.__field_msg_index2, None) yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) yield ('timesent', self.__field_timesent, None) yield ('unknown', self.__field_unknown, None) yield ('callback_length', self.__field_callback_length, None) yield ('callback', self.__field_callback, None) yield ('sender_length', self.__field_sender_length, None) yield ('sender', self.__field_sender, None) yield ('unknown4', self.__field_unknown4, None) yield ('lg_time', self.__field_lg_time, None) yield ('GPStime', self.__field_GPStime, None) yield ('unknown5', self.__field_unknown5, None) yield ('read', self.__field_read, None) yield ('locked', self.__field_locked, None) yield ('unknown8', self.__field_unknown8, None) yield ('priority', self.__field_priority, None) yield ('flags', self.__field_flags, None) yield ('subject', self.__field_subject, None) yield ('bin_header1', self.__field_bin_header1, None) yield ('bin_header2', self.__field_bin_header2, None) yield ('unknown6', self.__field_unknown6, None) yield ('multipartID', self.__field_multipartID, None) yield ('bin_header3', self.__field_bin_header3, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('msglengths', self.__field_msglengths, None) yield ('msgs', self.__field_msgs, None) yield ('unknown5', self.__field_unknown5, None) yield ('senders_name', self.__field_senders_name, None) yield ('unknown6', self.__field_unknown6, None) class _gen_p_lgvx4400_309(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx4400_309,self).__init__(**dict) if self.__class__ is _gen_p_lgvx4400_309: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx4400_309,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx4400_309,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of senders phone number") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of senders phone number") class _gen_p_lgvx4400_327(BaseProtogenClass): 'Anonymous inner class' __fields=['msglength'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx4400_327,self).__init__(**dict) if self.__class__ is _gen_p_lgvx4400_327: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx4400_327,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx4400_327,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_msglength=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msglength.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msglength=UINT(**{'sizeinbytes': 1}) self.__field_msglength.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msglength(self): return self.__field_msglength.getvalue() def __setfield_msglength(self, value): if isinstance(value,UINT): self.__field_msglength=value else: self.__field_msglength=UINT(value,**{'sizeinbytes': 1}) def __delfield_msglength(self): del self.__field_msglength msglength=property(__getfield_msglength, __setfield_msglength, __delfield_msglength, "lengths of individual messages in septets") def iscontainer(self): return True def containerelements(self): yield ('msglength', self.__field_msglength, "lengths of individual messages in septets") class sms_quick_text(BaseProtogenClass): __fields=['msgs'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_quick_text,self).__init__(**dict) if self.__class__ is sms_quick_text: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_quick_text,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_quick_text,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx4400_343, } dict2.update(kwargs) kwargs=dict2 self.__field_msgs=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx4400_343, }) self.__field_msgs.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx4400_343, }) self.__field_msgs.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx4400_343, }) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'elementclass': _gen_p_lgvx4400_343, }) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def iscontainer(self): return True def containerelements(self): yield ('msgs', self.__field_msgs, None) class _gen_p_lgvx4400_343(BaseProtogenClass): 'Anonymous inner class' __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx4400_343,self).__init__(**dict) if self.__class__ is _gen_p_lgvx4400_343: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx4400_343,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx4400_343,kwargs) if len(args): dict2={'encoding': PHONE_ENCODING} dict2.update(kwargs) kwargs=dict2 self.__field_msg=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=USTRING(**{'encoding': PHONE_ENCODING}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{'encoding': PHONE_ENCODING}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class textmemo(BaseProtogenClass): __fields=['text'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemo,self).__init__(**dict) if self.__class__ is textmemo: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemo,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemo,kwargs) if len(args): dict2={'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } dict2.update(kwargs) kwargs=dict2 self.__field_text=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_text.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_text=USTRING(**{'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_text.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,USTRING): self.__field_text=value else: self.__field_text=USTRING(value,**{'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def iscontainer(self): return True def containerelements(self): yield ('text', self.__field_text, None) class textmemofile(BaseProtogenClass): __fields=['itemcount', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemofile,self).__init__(**dict) if self.__class__ is textmemofile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemofile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemofile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_itemcount.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_itemcount=UINT(**{'sizeinbytes': 4}) self.__field_itemcount.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_itemcount(self): return self.__field_itemcount.getvalue() def __setfield_itemcount(self, value): if isinstance(value,UINT): self.__field_itemcount=value else: self.__field_itemcount=UINT(value,**{'sizeinbytes': 4}) def __delfield_itemcount(self): del self.__field_itemcount itemcount=property(__getfield_itemcount, __setfield_itemcount, __delfield_itemcount, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': textmemo }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('itemcount', self.__field_itemcount, None) yield ('items', self.__field_items, None) bitpim-1.0.7+dfsg1/src/phones/com_sanyo5500.py0000644001616600161660000000333210231616731017106 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_sanyo5500.py 2313 2005-04-21 03:28:25Z sawecw $ """Talk to the Sanyo SCP-5500 cell phone""" # standard modules import time import cStringIO # my modules import common import p_sanyo5500 import com_brew import com_phone import com_sanyo import com_sanyomedia import com_sanyonewer import prototypes class Phone(com_sanyonewer.Phone): "Talk to the Sanyo SCP-5500 cell phone" desc="SCP-5500" FIRST_MEDIA_DIRECTORY=1 LAST_MEDIA_DIRECTORY=3 protocolclass=p_sanyo5500 serialsname='scp5500' builtinringtones=( 'None', 'Vibrate', 'Ringer & Voice', '', '', '', '', '', '', 'Tone 1', 'Tone 2', 'Tone 3', 'Tone 4', 'Tone 5', 'Tone 6', 'Tone 7', 'Tone 8', '', '', '', '', '', '', '', '', '', '', '', '', 'Tschaik.Swanlake', 'Satie Gymnop.#1', 'Bach Air on the G', 'Beethoven Sym.5', 'Greensleeves', 'Johnny Comes..', 'Foster Ky. Home', 'Asian Jingle', 'Disco', 'Toy Box', 'Rodeo' ) calendar_defaultringtone=4 def __init__(self, logtarget, commport): com_sanyonewer.Phone.__init__(self, logtarget, commport) self.mode=self.MODENONE class Profile(com_sanyonewer.Profile): protocolclass=p_sanyo5500 serialsname='scp5500' phone_manufacturer='SANYO' phone_model='SCP-5500/US' # GMR: 1.010SP ,10024 def __init__(self): com_sanyonewer.Profile.__init__(self) bitpim-1.0.7+dfsg1/src/phones/p_lgvx4500.py0000644001616600161660000045712610466234100016427 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VX4500""" from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx4400 except as noted # below from p_lgvx4400 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=500 MAXCALENDARDESCRIPTION=38 NUMEMAILS=3 NUMPHONENUMBERS=5 MEMOLENGTH=65 # Calendar parameters NUMCALENDARENTRIES=300 CAL_REP_NONE=0x10 CAL_REP_DAILY=0x11 CAL_REP_MONFRI=0x12 CAL_REP_WEEKLY=0x13 CAL_REP_MONTHLY=0x14 CAL_REP_YEARLY=0x15 CAL_DOW_SUN=0x0800 CAL_DOW_MON=0x0400 CAL_DOW_TUE=0x0200 CAL_DOW_WED=0x0100 CAL_DOW_THU=0x0080 CAL_DOW_FRI=0x0040 CAL_DOW_SAT=0x0020 CAL_DOW_EXCEPTIONS=0x0010 CAL_REMINDER_NONE=0 CAL_REMINDER_ONTIME=1 CAL_REMINDER_5MIN=2 CAL_REMINDER_10MIN=3 CAL_REMINDER_1HOUR=4 CAL_REMINDER_1DAY=5 CAL_REMINDER_2DAYS=6 CAL_NO_VOICE=0xffff CAL_REPEAT_DATE=(2100, 12, 31) cal_dir='sch' cal_voice_ext='.qcp' # full name='sche000.qcp' cal_data_file_name='sch/schedule.dat' cal_exception_file_name='sch/schexception.dat' cal_voice_id_ofs=0x0f cal_has_voice_id=True class speeddial(BaseProtogenClass): __fields=['entry', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddial,self).__init__(**dict) if self.__class__ is speeddial: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddial,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddial,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.writetobuffer(buf) try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.readfrombuffer(buf) self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,UINT): self.__field_entry=value else: self.__field_entry=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_number(self): try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,UINT): self.__field_number=value else: self.__field_number=UINT(value,**{'sizeinbytes': 1, 'default': 0xff}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('entry', self.__field_entry, None) yield ('number', self.__field_number, None) class speeddials(BaseProtogenClass): __fields=['speeddials'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddials,self).__init__(**dict) if self.__class__ is speeddials: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddials,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddials,kwargs) if len(args): dict2={'length': NUMSPEEDDIALS, 'elementclass': speeddial} dict2.update(kwargs) kwargs=dict2 self.__field_speeddials=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_speeddials(self): try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) return self.__field_speeddials.getvalue() def __setfield_speeddials(self, value): if isinstance(value,LIST): self.__field_speeddials=value else: self.__field_speeddials=LIST(value,**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) def __delfield_speeddials(self): del self.__field_speeddials speeddials=property(__getfield_speeddials, __setfield_speeddials, __delfield_speeddials, None) def iscontainer(self): return True def containerelements(self): yield ('speeddials', self.__field_speeddials, None) class indexentry(BaseProtogenClass): __fields=['index', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_index.writetobuffer(buf) try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 50, 'default': ""}) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_index.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 50, 'default': ""}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 50, 'default': ""}) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 50, 'default': ""}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('name', self.__field_name, None) class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['numactiveitems', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('items', self.__field_items, None) class pbentry(BaseProtogenClass): __fields=['serial1', 'entrysize', 'serial2', 'entrynumber', 'name', 'group', 'emails', 'url', 'ringtone', 'msgringtone', 'secret', 'memo', 'wallpaper', 'numbertypes', 'numbers', 'unknown20c'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_serial1.writetobuffer(buf) self.__field_entrysize.writetobuffer(buf) self.__field_serial2.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_group.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx4500_107, 'length': NUMEMAILS}) self.__field_emails.writetobuffer(buf) self.__field_url.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_msgringtone.writetobuffer(buf) self.__field_secret.writetobuffer(buf) self.__field_memo.writetobuffer(buf) self.__field_wallpaper.writetobuffer(buf) try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx4500_115, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx4500_117, 'length': NUMPHONENUMBERS}) self.__field_numbers.writetobuffer(buf) try: self.__field_unknown20c except: self.__field_unknown20c=UNKNOWN() self.__field_unknown20c.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_entrysize=UINT(**{'sizeinbytes': 2}) self.__field_entrysize.readfrombuffer(buf) self.__field_serial2=UINT(**{'sizeinbytes': 4}) self.__field_serial2.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 2}) self.__field_entrynumber.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 23, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 2}) self.__field_group.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx4500_107, 'length': NUMEMAILS}) self.__field_emails.readfrombuffer(buf) self.__field_url=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_url.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_msgringtone=UINT(**{'sizeinbytes': 1}) self.__field_msgringtone.readfrombuffer(buf) self.__field_secret=BOOL(**{'sizeinbytes': 1}) self.__field_secret.readfrombuffer(buf) self.__field_memo=USTRING(**{'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) self.__field_memo.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 1}) self.__field_wallpaper.readfrombuffer(buf) self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx4500_115, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.readfrombuffer(buf) self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx4500_117, 'length': NUMPHONENUMBERS}) self.__field_numbers.readfrombuffer(buf) self.__field_unknown20c=UNKNOWN() self.__field_unknown20c.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_entrysize(self): return self.__field_entrysize.getvalue() def __setfield_entrysize(self, value): if isinstance(value,UINT): self.__field_entrysize=value else: self.__field_entrysize=UINT(value,**{'sizeinbytes': 2}) def __delfield_entrysize(self): del self.__field_entrysize entrysize=property(__getfield_entrysize, __setfield_entrysize, __delfield_entrysize, None) def __getfield_serial2(self): return self.__field_serial2.getvalue() def __setfield_serial2(self, value): if isinstance(value,UINT): self.__field_serial2=value else: self.__field_serial2=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial2(self): del self.__field_serial2 serial2=property(__getfield_serial2, __setfield_serial2, __delfield_serial2, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 2}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 23, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 2}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx4500_107, 'length': NUMEMAILS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_lgvx4500_107, 'length': NUMEMAILS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, None) def __getfield_url(self): return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,USTRING): self.__field_url=value else: self.__field_url=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "ringtone index for a call") def __getfield_msgringtone(self): return self.__field_msgringtone.getvalue() def __setfield_msgringtone(self, value): if isinstance(value,UINT): self.__field_msgringtone=value else: self.__field_msgringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_msgringtone(self): del self.__field_msgringtone msgringtone=property(__getfield_msgringtone, __setfield_msgringtone, __delfield_msgringtone, "ringtone index for a text message") def __getfield_secret(self): return self.__field_secret.getvalue() def __setfield_secret(self, value): if isinstance(value,BOOL): self.__field_secret=value else: self.__field_secret=BOOL(value,**{'sizeinbytes': 1}) def __delfield_secret(self): del self.__field_secret secret=property(__getfield_secret, __setfield_secret, __delfield_secret, None) def __getfield_memo(self): return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,USTRING): self.__field_memo=value else: self.__field_memo=USTRING(value,**{'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 1}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_numbertypes(self): try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx4500_115, 'length': NUMPHONENUMBERS}) return self.__field_numbertypes.getvalue() def __setfield_numbertypes(self, value): if isinstance(value,LIST): self.__field_numbertypes=value else: self.__field_numbertypes=LIST(value,**{'elementclass': _gen_p_lgvx4500_115, 'length': NUMPHONENUMBERS}) def __delfield_numbertypes(self): del self.__field_numbertypes numbertypes=property(__getfield_numbertypes, __setfield_numbertypes, __delfield_numbertypes, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx4500_117, 'length': NUMPHONENUMBERS}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'elementclass': _gen_p_lgvx4500_117, 'length': NUMPHONENUMBERS}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_unknown20c(self): try: self.__field_unknown20c except: self.__field_unknown20c=UNKNOWN() return self.__field_unknown20c.getvalue() def __setfield_unknown20c(self, value): if isinstance(value,UNKNOWN): self.__field_unknown20c=value else: self.__field_unknown20c=UNKNOWN(value,) def __delfield_unknown20c(self): del self.__field_unknown20c unknown20c=property(__getfield_unknown20c, __setfield_unknown20c, __delfield_unknown20c, None) def iscontainer(self): return True def containerelements(self): yield ('serial1', self.__field_serial1, None) yield ('entrysize', self.__field_entrysize, None) yield ('serial2', self.__field_serial2, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('name', self.__field_name, None) yield ('group', self.__field_group, None) yield ('emails', self.__field_emails, None) yield ('url', self.__field_url, None) yield ('ringtone', self.__field_ringtone, "ringtone index for a call") yield ('msgringtone', self.__field_msgringtone, "ringtone index for a text message") yield ('secret', self.__field_secret, None) yield ('memo', self.__field_memo, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('numbertypes', self.__field_numbertypes, None) yield ('numbers', self.__field_numbers, None) yield ('unknown20c', self.__field_unknown20c, None) class _gen_p_lgvx4500_107(BaseProtogenClass): 'Anonymous inner class' __fields=['email'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx4500_107,self).__init__(**dict) if self.__class__ is _gen_p_lgvx4500_107: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx4500_107,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx4500_107,kwargs) if len(args): dict2={'sizeinbytes': 49, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_email=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_email.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_email=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_email.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def iscontainer(self): return True def containerelements(self): yield ('email', self.__field_email, None) class _gen_p_lgvx4500_115(BaseProtogenClass): 'Anonymous inner class' __fields=['numbertype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx4500_115,self).__init__(**dict) if self.__class__ is _gen_p_lgvx4500_115: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx4500_115,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx4500_115,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_numbertype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numbertype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numbertype=UINT(**{'sizeinbytes': 1}) self.__field_numbertype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numbertype(self): return self.__field_numbertype.getvalue() def __setfield_numbertype(self, value): if isinstance(value,UINT): self.__field_numbertype=value else: self.__field_numbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_numbertype(self): del self.__field_numbertype numbertype=property(__getfield_numbertype, __setfield_numbertype, __delfield_numbertype, None) def iscontainer(self): return True def containerelements(self): yield ('numbertype', self.__field_numbertype, None) class _gen_p_lgvx4500_117(BaseProtogenClass): 'Anonymous inner class' __fields=['number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx4500_117,self).__init__(**dict) if self.__class__ is _gen_p_lgvx4500_117: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx4500_117,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx4500_117,kwargs) if len(args): dict2={'sizeinbytes': 49, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_number=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) class pbreadentryresponse(BaseProtogenClass): "Results of reading one entry" __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbreadentryresponse,self).__init__(**dict) if self.__class__ is pbreadentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbreadentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbreadentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbupdateentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbupdateentryrequest,self).__init__(**dict) if self.__class__ is pbupdateentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbupdateentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbupdateentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x04, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbappendentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbappendentryrequest,self).__init__(**dict) if self.__class__ is pbappendentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbappendentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbappendentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x03, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class scheduleexception(BaseProtogenClass): __fields=['pos', 'day', 'month', 'year'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexception,self).__init__(**dict) if self.__class__ is scheduleexception: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexception,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexception,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_day.writetobuffer(buf) self.__field_month.writetobuffer(buf) self.__field_year.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_day=UINT(**{'sizeinbytes': 1}) self.__field_day.readfrombuffer(buf) self.__field_month=UINT(**{'sizeinbytes': 1}) self.__field_month.readfrombuffer(buf) self.__field_year=UINT(**{'sizeinbytes': 2}) self.__field_year.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "Refers to event id (position in schedule file) that this suppresses") def __getfield_day(self): return self.__field_day.getvalue() def __setfield_day(self, value): if isinstance(value,UINT): self.__field_day=value else: self.__field_day=UINT(value,**{'sizeinbytes': 1}) def __delfield_day(self): del self.__field_day day=property(__getfield_day, __setfield_day, __delfield_day, None) def __getfield_month(self): return self.__field_month.getvalue() def __setfield_month(self, value): if isinstance(value,UINT): self.__field_month=value else: self.__field_month=UINT(value,**{'sizeinbytes': 1}) def __delfield_month(self): del self.__field_month month=property(__getfield_month, __setfield_month, __delfield_month, None) def __getfield_year(self): return self.__field_year.getvalue() def __setfield_year(self, value): if isinstance(value,UINT): self.__field_year=value else: self.__field_year=UINT(value,**{'sizeinbytes': 2}) def __delfield_year(self): del self.__field_year year=property(__getfield_year, __setfield_year, __delfield_year, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "Refers to event id (position in schedule file) that this suppresses") yield ('day', self.__field_day, None) yield ('month', self.__field_month, None) yield ('year', self.__field_year, None) class scheduleexceptionfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexceptionfile,self).__init__(**dict) if self.__class__ is scheduleexceptionfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexceptionfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexceptionfile,kwargs) if len(args): dict2={'elementclass': scheduleexception} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': scheduleexception}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class scheduleevent(BaseProtogenClass): __fields=['pos', 'start', 'end', 'repeat', 'daybitmap', 'pad2', 'alarmminutes', 'alarmhours', 'alarmtype', 'snoozedelay', 'ringtone', 'description', 'hasvoice', 'voiceid', 'pad3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleevent,self).__init__(**dict) if self.__class__ is scheduleevent: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleevent,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleevent,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) self.__field_daybitmap.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad2.writetobuffer(buf) self.__field_alarmminutes.writetobuffer(buf) self.__field_alarmhours.writetobuffer(buf) self.__field_alarmtype.writetobuffer(buf) try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_description.writetobuffer(buf) self.__field_hasvoice.writetobuffer(buf) self.__field_voiceid.writetobuffer(buf) try: self.__field_pad3 except: self.__field_pad3=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_pad3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_start=LGCALDATE(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=LGCALDATE(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_repeat=UINT(**{'sizeinbytes': 1}) self.__field_repeat.readfrombuffer(buf) self.__field_daybitmap=UINT(**{'sizeinbytes': 2}) self.__field_daybitmap.readfrombuffer(buf) self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad2.readfrombuffer(buf) self.__field_alarmminutes=UINT(**{'sizeinbytes': 1}) self.__field_alarmminutes.readfrombuffer(buf) self.__field_alarmhours=UINT(**{'sizeinbytes': 1}) self.__field_alarmhours.readfrombuffer(buf) self.__field_alarmtype=UINT(**{'sizeinbytes': 1}) self.__field_alarmtype.readfrombuffer(buf) self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_description=USTRING(**{'sizeinbytes': 37, 'raiseontruncate': False, 'raiseonunterminatedread': False }) self.__field_description.readfrombuffer(buf) self.__field_hasvoice=UINT(**{'sizeinbytes': 2}) self.__field_hasvoice.readfrombuffer(buf) self.__field_voiceid=UINT(**{'sizeinbytes': 2}) self.__field_voiceid.readfrombuffer(buf) self.__field_pad3=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_pad3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "position within file, used as an event id") def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,LGCALDATE): self.__field_start=value else: self.__field_start=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,LGCALDATE): self.__field_end=value else: self.__field_end=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,UINT): self.__field_repeat=value else: self.__field_repeat=UINT(value,**{'sizeinbytes': 1}) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_daybitmap(self): return self.__field_daybitmap.getvalue() def __setfield_daybitmap(self, value): if isinstance(value,UINT): self.__field_daybitmap=value else: self.__field_daybitmap=UINT(value,**{'sizeinbytes': 2}) def __delfield_daybitmap(self): del self.__field_daybitmap daybitmap=property(__getfield_daybitmap, __setfield_daybitmap, __delfield_daybitmap, "which days a weekly repeat event happens on") def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UINT): self.__field_pad2=value else: self.__field_pad2=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_alarmminutes(self): return self.__field_alarmminutes.getvalue() def __setfield_alarmminutes(self, value): if isinstance(value,UINT): self.__field_alarmminutes=value else: self.__field_alarmminutes=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmminutes(self): del self.__field_alarmminutes alarmminutes=property(__getfield_alarmminutes, __setfield_alarmminutes, __delfield_alarmminutes, "a value of 100 indicates not set") def __getfield_alarmhours(self): return self.__field_alarmhours.getvalue() def __setfield_alarmhours(self, value): if isinstance(value,UINT): self.__field_alarmhours=value else: self.__field_alarmhours=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmhours(self): del self.__field_alarmhours alarmhours=property(__getfield_alarmhours, __setfield_alarmhours, __delfield_alarmhours, "a value of 100 indicates not set") def __getfield_alarmtype(self): return self.__field_alarmtype.getvalue() def __setfield_alarmtype(self, value): if isinstance(value,UINT): self.__field_alarmtype=value else: self.__field_alarmtype=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmtype(self): del self.__field_alarmtype alarmtype=property(__getfield_alarmtype, __setfield_alarmtype, __delfield_alarmtype, "preset alarm reminder type") def __getfield_snoozedelay(self): try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_snoozedelay.getvalue() def __setfield_snoozedelay(self, value): if isinstance(value,UINT): self.__field_snoozedelay=value else: self.__field_snoozedelay=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_snoozedelay(self): del self.__field_snoozedelay snoozedelay=property(__getfield_snoozedelay, __setfield_snoozedelay, __delfield_snoozedelay, "in minutes, not for this phone") def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_description(self): return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,USTRING): self.__field_description=value else: self.__field_description=USTRING(value,**{'sizeinbytes': 37, 'raiseontruncate': False, 'raiseonunterminatedread': False }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def __getfield_hasvoice(self): return self.__field_hasvoice.getvalue() def __setfield_hasvoice(self, value): if isinstance(value,UINT): self.__field_hasvoice=value else: self.__field_hasvoice=UINT(value,**{'sizeinbytes': 2}) def __delfield_hasvoice(self): del self.__field_hasvoice hasvoice=property(__getfield_hasvoice, __setfield_hasvoice, __delfield_hasvoice, None) def __getfield_voiceid(self): return self.__field_voiceid.getvalue() def __setfield_voiceid(self, value): if isinstance(value,UINT): self.__field_voiceid=value else: self.__field_voiceid=UINT(value,**{'sizeinbytes': 2}) def __delfield_voiceid(self): del self.__field_voiceid voiceid=property(__getfield_voiceid, __setfield_voiceid, __delfield_voiceid, None) def __getfield_pad3(self): try: self.__field_pad3 except: self.__field_pad3=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_pad3.getvalue() def __setfield_pad3(self, value): if isinstance(value,UINT): self.__field_pad3=value else: self.__field_pad3=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_pad3(self): del self.__field_pad3 pad3=property(__getfield_pad3, __setfield_pad3, __delfield_pad3, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "position within file, used as an event id") yield ('start', self.__field_start, None) yield ('end', self.__field_end, None) yield ('repeat', self.__field_repeat, None) yield ('daybitmap', self.__field_daybitmap, "which days a weekly repeat event happens on") yield ('pad2', self.__field_pad2, None) yield ('alarmminutes', self.__field_alarmminutes, "a value of 100 indicates not set") yield ('alarmhours', self.__field_alarmhours, "a value of 100 indicates not set") yield ('alarmtype', self.__field_alarmtype, "preset alarm reminder type") yield ('snoozedelay', self.__field_snoozedelay, "in minutes, not for this phone") yield ('ringtone', self.__field_ringtone, None) yield ('description', self.__field_description, None) yield ('hasvoice', self.__field_hasvoice, None) yield ('voiceid', self.__field_voiceid, None) yield ('pad3', self.__field_pad3, None) class schedulefile(BaseProtogenClass): __fields=['numactiveitems', 'events'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(schedulefile,self).__init__(**dict) if self.__class__ is schedulefile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(schedulefile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(schedulefile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{'elementclass': scheduleevent}) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('events', self.__field_events, None) class call(BaseProtogenClass): __fields=['GPStime', 'unknown1', 'duration', 'number', 'name', 'numberlength', 'unknown2', 'pbnumbertype', 'unknown3', 'pbentrynum'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(call,self).__init__(**dict) if self.__class__ is call: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(call,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(call,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_numberlength.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_pbnumbertype.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_pbentrynum.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 4}) self.__field_unknown1.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 36, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_numberlength=UINT(**{'sizeinbytes': 1}) self.__field_numberlength.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_pbnumbertype=UINT(**{'sizeinbytes': 1}) self.__field_pbnumbertype.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 2}) self.__field_unknown3.readfrombuffer(buf) self.__field_pbentrynum=UINT(**{'sizeinbytes': 2}) self.__field_pbentrynum.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 36, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numberlength(self): return self.__field_numberlength.getvalue() def __setfield_numberlength(self, value): if isinstance(value,UINT): self.__field_numberlength=value else: self.__field_numberlength=UINT(value,**{'sizeinbytes': 1}) def __delfield_numberlength(self): del self.__field_numberlength numberlength=property(__getfield_numberlength, __setfield_numberlength, __delfield_numberlength, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_pbnumbertype(self): return self.__field_pbnumbertype.getvalue() def __setfield_pbnumbertype(self, value): if isinstance(value,UINT): self.__field_pbnumbertype=value else: self.__field_pbnumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_pbnumbertype(self): del self.__field_pbnumbertype pbnumbertype=property(__getfield_pbnumbertype, __setfield_pbnumbertype, __delfield_pbnumbertype, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_pbentrynum(self): return self.__field_pbentrynum.getvalue() def __setfield_pbentrynum(self, value): if isinstance(value,UINT): self.__field_pbentrynum=value else: self.__field_pbentrynum=UINT(value,**{'sizeinbytes': 2}) def __delfield_pbentrynum(self): del self.__field_pbentrynum pbentrynum=property(__getfield_pbentrynum, __setfield_pbentrynum, __delfield_pbentrynum, None) def iscontainer(self): return True def containerelements(self): yield ('GPStime', self.__field_GPStime, None) yield ('unknown1', self.__field_unknown1, None) yield ('duration', self.__field_duration, None) yield ('number', self.__field_number, None) yield ('name', self.__field_name, None) yield ('numberlength', self.__field_numberlength, None) yield ('unknown2', self.__field_unknown2, None) yield ('pbnumbertype', self.__field_pbnumbertype, None) yield ('unknown3', self.__field_unknown3, None) yield ('pbentrynum', self.__field_pbentrynum, None) class callhistory(BaseProtogenClass): __fields=['numcalls', 'unknown1', 'calls'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callhistory,self).__init__(**dict) if self.__class__ is callhistory: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callhistory,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callhistory,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numcalls.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numcalls=UINT(**{'sizeinbytes': 4}) self.__field_numcalls.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numcalls(self): return self.__field_numcalls.getvalue() def __setfield_numcalls(self, value): if isinstance(value,UINT): self.__field_numcalls=value else: self.__field_numcalls=UINT(value,**{'sizeinbytes': 4}) def __delfield_numcalls(self): del self.__field_numcalls numcalls=property(__getfield_numcalls, __setfield_numcalls, __delfield_numcalls, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_calls(self): try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) return self.__field_calls.getvalue() def __setfield_calls(self, value): if isinstance(value,LIST): self.__field_calls=value else: self.__field_calls=LIST(value,**{'elementclass': call}) def __delfield_calls(self): del self.__field_calls calls=property(__getfield_calls, __setfield_calls, __delfield_calls, None) def iscontainer(self): return True def containerelements(self): yield ('numcalls', self.__field_numcalls, None) yield ('unknown1', self.__field_unknown1, None) yield ('calls', self.__field_calls, None) class firmwareresponse(BaseProtogenClass): __fields=['command', 'date1', 'time1', 'date2', 'time2', 'firmware'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(firmwareresponse,self).__init__(**dict) if self.__class__ is firmwareresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(firmwareresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(firmwareresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_date1.writetobuffer(buf) self.__field_time1.writetobuffer(buf) self.__field_date2.writetobuffer(buf) self.__field_time2.writetobuffer(buf) self.__field_firmware.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_date1=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date1.readfrombuffer(buf) self.__field_time1=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time1.readfrombuffer(buf) self.__field_date2=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date2.readfrombuffer(buf) self.__field_time2=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time2.readfrombuffer(buf) self.__field_firmware=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_firmware.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_date1(self): return self.__field_date1.getvalue() def __setfield_date1(self, value): if isinstance(value,USTRING): self.__field_date1=value else: self.__field_date1=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date1(self): del self.__field_date1 date1=property(__getfield_date1, __setfield_date1, __delfield_date1, None) def __getfield_time1(self): return self.__field_time1.getvalue() def __setfield_time1(self, value): if isinstance(value,USTRING): self.__field_time1=value else: self.__field_time1=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time1(self): del self.__field_time1 time1=property(__getfield_time1, __setfield_time1, __delfield_time1, None) def __getfield_date2(self): return self.__field_date2.getvalue() def __setfield_date2(self, value): if isinstance(value,USTRING): self.__field_date2=value else: self.__field_date2=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date2(self): del self.__field_date2 date2=property(__getfield_date2, __setfield_date2, __delfield_date2, None) def __getfield_time2(self): return self.__field_time2.getvalue() def __setfield_time2(self, value): if isinstance(value,USTRING): self.__field_time2=value else: self.__field_time2=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time2(self): del self.__field_time2 time2=property(__getfield_time2, __setfield_time2, __delfield_time2, None) def __getfield_firmware(self): return self.__field_firmware.getvalue() def __setfield_firmware(self, value): if isinstance(value,USTRING): self.__field_firmware=value else: self.__field_firmware=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_firmware(self): del self.__field_firmware firmware=property(__getfield_firmware, __setfield_firmware, __delfield_firmware, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('date1', self.__field_date1, None) yield ('time1', self.__field_time1, None) yield ('date2', self.__field_date2, None) yield ('time2', self.__field_time2, None) yield ('firmware', self.__field_firmware, None) class msg_record(BaseProtogenClass): __fields=['unknown1', 'binary', 'unknown3', 'unknown4', 'unknown6', 'length', 'msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(msg_record,self).__init__(**dict) if self.__class__ is msg_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(msg_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(msg_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_binary.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_length.writetobuffer(buf) try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx4500_241, 'length': 219}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_binary=UINT(**{'sizeinbytes': 1}) self.__field_binary.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1}) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 1}) self.__field_unknown4.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 1}) self.__field_unknown6.readfrombuffer(buf) self.__field_length=UINT(**{'sizeinbytes': 1}) self.__field_length.readfrombuffer(buf) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx4500_241, 'length': 219}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_binary(self): return self.__field_binary.getvalue() def __setfield_binary(self, value): if isinstance(value,UINT): self.__field_binary=value else: self.__field_binary=UINT(value,**{'sizeinbytes': 1}) def __delfield_binary(self): del self.__field_binary binary=property(__getfield_binary, __setfield_binary, __delfield_binary, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_length(self): return self.__field_length.getvalue() def __setfield_length(self, value): if isinstance(value,UINT): self.__field_length=value else: self.__field_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_length(self): del self.__field_length length=property(__getfield_length, __setfield_length, __delfield_length, None) def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx4500_241, 'length': 219}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx4500_241, 'length': 219}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('binary', self.__field_binary, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) yield ('unknown6', self.__field_unknown6, None) yield ('length', self.__field_length, None) yield ('msg', self.__field_msg, None) class _gen_p_lgvx4500_241(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx4500_241,self).__init__(**dict) if self.__class__ is _gen_p_lgvx4500_241: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx4500_241,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx4500_241,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class recipient_record(BaseProtogenClass): __fields=['number', 'status', 'timesent', 'timereceived', 'unknown2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(recipient_record,self).__init__(**dict) if self.__class__ is recipient_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(recipient_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(recipient_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_timereceived.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=USTRING(**{'sizeinbytes': 49}) self.__field_number.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_timereceived=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timereceived.readfrombuffer(buf) self.__field_unknown2=DATA(**{'sizeinbytes': 54}) self.__field_unknown2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_timereceived(self): return self.__field_timereceived.getvalue() def __setfield_timereceived(self, value): if isinstance(value,LGCALDATE): self.__field_timereceived=value else: self.__field_timereceived=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timereceived(self): del self.__field_timereceived timereceived=property(__getfield_timereceived, __setfield_timereceived, __delfield_timereceived, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,DATA): self.__field_unknown2=value else: self.__field_unknown2=DATA(value,**{'sizeinbytes': 54}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) yield ('status', self.__field_status, None) yield ('timesent', self.__field_timesent, None) yield ('timereceived', self.__field_timereceived, None) yield ('unknown2', self.__field_unknown2, None) class sms_saved(BaseProtogenClass): __fields=['outboxmsg', 'pad', 'outbox', 'inbox'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_saved,self).__init__(**dict) if self.__class__ is sms_saved: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_saved,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_saved,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_outboxmsg.writetobuffer(buf) self.__field_pad.writetobuffer(buf) if self.outboxmsg: self.__field_outbox.writetobuffer(buf) if not self.outboxmsg: self.__field_inbox.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_outboxmsg=UINT(**{'sizeinbytes': 4}) self.__field_outboxmsg.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 4}) self.__field_pad.readfrombuffer(buf) if self.outboxmsg: self.__field_outbox=sms_out() self.__field_outbox.readfrombuffer(buf) if not self.outboxmsg: self.__field_inbox=sms_in() self.__field_inbox.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_outboxmsg(self): return self.__field_outboxmsg.getvalue() def __setfield_outboxmsg(self, value): if isinstance(value,UINT): self.__field_outboxmsg=value else: self.__field_outboxmsg=UINT(value,**{'sizeinbytes': 4}) def __delfield_outboxmsg(self): del self.__field_outboxmsg outboxmsg=property(__getfield_outboxmsg, __setfield_outboxmsg, __delfield_outboxmsg, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 4}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_outbox(self): return self.__field_outbox.getvalue() def __setfield_outbox(self, value): if isinstance(value,sms_out): self.__field_outbox=value else: self.__field_outbox=sms_out(value,) def __delfield_outbox(self): del self.__field_outbox outbox=property(__getfield_outbox, __setfield_outbox, __delfield_outbox, None) def __getfield_inbox(self): return self.__field_inbox.getvalue() def __setfield_inbox(self, value): if isinstance(value,sms_in): self.__field_inbox=value else: self.__field_inbox=sms_in(value,) def __delfield_inbox(self): del self.__field_inbox inbox=property(__getfield_inbox, __setfield_inbox, __delfield_inbox, None) def iscontainer(self): return True def containerelements(self): yield ('outboxmsg', self.__field_outboxmsg, None) yield ('pad', self.__field_pad, None) if self.outboxmsg: yield ('outbox', self.__field_outbox, None) if not self.outboxmsg: yield ('inbox', self.__field_inbox, None) class sms_out(BaseProtogenClass): __fields=['index', 'locked', 'unknown1', 'timesent', 'subject', 'unknown2', 'num_msg_elements', 'messages', 'unknown5', 'priority', 'callback', 'unknown6', 'recipients', 'unknown7'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_out,self).__init__(**dict) if self.__class__ is sms_out: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_out,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_out,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) self.__field_messages.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) self.__field_recipients.writetobuffer(buf) self.__field_unknown7.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 3}) self.__field_unknown1.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21}) self.__field_subject.readfrombuffer(buf) self.__field_unknown2=DATA(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) self.__field_messages.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 18}) self.__field_unknown5.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 23}) self.__field_callback.readfrombuffer(buf) self.__field_unknown6=DATA(**{'sizeinbytes': 14}) self.__field_unknown6.readfrombuffer(buf) self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) self.__field_recipients.readfrombuffer(buf) self.__field_unknown7=DATA() self.__field_unknown7.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,DATA): self.__field_unknown2=value else: self.__field_unknown2=DATA(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_messages(self): try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) return self.__field_messages.getvalue() def __setfield_messages(self, value): if isinstance(value,LIST): self.__field_messages=value else: self.__field_messages=LIST(value,**{'elementclass': msg_record, 'length': 7}) def __delfield_messages(self): del self.__field_messages messages=property(__getfield_messages, __setfield_messages, __delfield_messages, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 18}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 23}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,DATA): self.__field_unknown6=value else: self.__field_unknown6=DATA(value,**{'sizeinbytes': 14}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_recipients(self): try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) return self.__field_recipients.getvalue() def __setfield_recipients(self, value): if isinstance(value,LIST): self.__field_recipients=value else: self.__field_recipients=LIST(value,**{'elementclass': recipient_record,'length': 9}) def __delfield_recipients(self): del self.__field_recipients recipients=property(__getfield_recipients, __setfield_recipients, __delfield_recipients, None) def __getfield_unknown7(self): return self.__field_unknown7.getvalue() def __setfield_unknown7(self, value): if isinstance(value,DATA): self.__field_unknown7=value else: self.__field_unknown7=DATA(value,) def __delfield_unknown7(self): del self.__field_unknown7 unknown7=property(__getfield_unknown7, __setfield_unknown7, __delfield_unknown7, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('locked', self.__field_locked, None) yield ('unknown1', self.__field_unknown1, None) yield ('timesent', self.__field_timesent, None) yield ('subject', self.__field_subject, None) yield ('unknown2', self.__field_unknown2, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('messages', self.__field_messages, None) yield ('unknown5', self.__field_unknown5, None) yield ('priority', self.__field_priority, None) yield ('callback', self.__field_callback, None) yield ('unknown6', self.__field_unknown6, None) yield ('recipients', self.__field_recipients, None) yield ('unknown7', self.__field_unknown7, None) class SMSINBOXMSGFRAGMENT(BaseProtogenClass): __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSINBOXMSGFRAGMENT,self).__init__(**dict) if self.__class__ is SMSINBOXMSGFRAGMENT: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSINBOXMSGFRAGMENT,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSINBOXMSGFRAGMENT,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx4500_276, 'length': 181} dict2.update(kwargs) kwargs=dict2 self.__field_msg=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx4500_276, 'length': 181}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx4500_276, 'length': 181}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx4500_276, 'length': 181}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx4500_276, 'length': 181}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class _gen_p_lgvx4500_276(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx4500_276,self).__init__(**dict) if self.__class__ is _gen_p_lgvx4500_276: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx4500_276,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx4500_276,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class sms_in(BaseProtogenClass): __fields=['msg_index1', 'msg_index2', 'unknown2', 'unknown3', 'timesent', 'unknown', 'callback_length', 'callback', 'sender_length', 'sender', 'unknown4', 'lg_time', 'GPStime', 'unknown5', 'read', 'locked', 'unknown8', 'priority', 'flags', 'subject', 'bin_header1', 'bin_header2', 'unknown6', 'multipartID', 'bin_header3', 'unknown9', 'num_msg_elements', 'msglengths', 'unknown10', 'msgs', 'unknown5'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_in,self).__init__(**dict) if self.__class__ is sms_in: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_in,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_in,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msg_index1.writetobuffer(buf) self.__field_msg_index2.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self.__field_callback_length.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_sender_length.writetobuffer(buf) try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx4500_289, 'length': 38}) self.__field_sender.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_lg_time.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_flags.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_bin_header1.writetobuffer(buf) self.__field_bin_header2.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_multipartID.writetobuffer(buf) self.__field_bin_header3.writetobuffer(buf) self.__field_unknown9.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx4500_308, 'length': 10}) self.__field_msglengths.writetobuffer(buf) self.__field_unknown10.writetobuffer(buf) try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg_index1=UINT(**{'sizeinbytes': 4}) self.__field_msg_index1.readfrombuffer(buf) self.__field_msg_index2=UINT(**{'sizeinbytes': 4}) self.__field_msg_index2.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2}) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 4}) self.__field_unknown3.readfrombuffer(buf) self.__field_timesent=SMSDATE(**{'sizeinbytes': 6}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown=UINT(**{'sizeinbytes': 3}) self.__field_unknown.readfrombuffer(buf) self.__field_callback_length=UINT(**{'sizeinbytes': 1}) self.__field_callback_length.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 38}) self.__field_callback.readfrombuffer(buf) self.__field_sender_length=UINT(**{'sizeinbytes': 1}) self.__field_sender_length.readfrombuffer(buf) self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx4500_289, 'length': 38}) self.__field_sender.readfrombuffer(buf) self.__field_unknown4=DATA(**{'sizeinbytes': 15}) self.__field_unknown4.readfrombuffer(buf) self.__field_lg_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_lg_time.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 2}) self.__field_unknown5.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 1}) self.__field_read.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown8=UINT(**{'sizeinbytes': 2}) self.__field_unknown8.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_flags=DATA(**{'sizeinbytes': 5}) self.__field_flags.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21}) self.__field_subject.readfrombuffer(buf) self.__field_bin_header1=UINT(**{'sizeinbytes': 1}) self.__field_bin_header1.readfrombuffer(buf) self.__field_bin_header2=UINT(**{'sizeinbytes': 1}) self.__field_bin_header2.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 2}) self.__field_unknown6.readfrombuffer(buf) self.__field_multipartID=UINT(**{'sizeinbytes': 2}) self.__field_multipartID.readfrombuffer(buf) self.__field_bin_header3=UINT(**{'sizeinbytes': 1}) self.__field_bin_header3.readfrombuffer(buf) self.__field_unknown9=UINT(**{'sizeinbytes': 1}) self.__field_unknown9.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx4500_308, 'length': 10}) self.__field_msglengths.readfrombuffer(buf) self.__field_unknown10=UINT(**{'sizeinbytes': 10}) self.__field_unknown10.readfrombuffer(buf) self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.readfrombuffer(buf) self.__field_unknown5=DATA() self.__field_unknown5.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg_index1(self): return self.__field_msg_index1.getvalue() def __setfield_msg_index1(self, value): if isinstance(value,UINT): self.__field_msg_index1=value else: self.__field_msg_index1=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index1(self): del self.__field_msg_index1 msg_index1=property(__getfield_msg_index1, __setfield_msg_index1, __delfield_msg_index1, None) def __getfield_msg_index2(self): return self.__field_msg_index2.getvalue() def __setfield_msg_index2(self, value): if isinstance(value,UINT): self.__field_msg_index2=value else: self.__field_msg_index2=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index2(self): del self.__field_msg_index2 msg_index2=property(__getfield_msg_index2, __setfield_msg_index2, __delfield_msg_index2, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,SMSDATE): self.__field_timesent=value else: self.__field_timesent=SMSDATE(value,**{'sizeinbytes': 6}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UINT): self.__field_unknown=value else: self.__field_unknown=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def __getfield_callback_length(self): return self.__field_callback_length.getvalue() def __setfield_callback_length(self, value): if isinstance(value,UINT): self.__field_callback_length=value else: self.__field_callback_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_length(self): del self.__field_callback_length callback_length=property(__getfield_callback_length, __setfield_callback_length, __delfield_callback_length, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 38}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_sender_length(self): return self.__field_sender_length.getvalue() def __setfield_sender_length(self, value): if isinstance(value,UINT): self.__field_sender_length=value else: self.__field_sender_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_sender_length(self): del self.__field_sender_length sender_length=property(__getfield_sender_length, __setfield_sender_length, __delfield_sender_length, None) def __getfield_sender(self): try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx4500_289, 'length': 38}) return self.__field_sender.getvalue() def __setfield_sender(self, value): if isinstance(value,LIST): self.__field_sender=value else: self.__field_sender=LIST(value,**{'elementclass': _gen_p_lgvx4500_289, 'length': 38}) def __delfield_sender(self): del self.__field_sender sender=property(__getfield_sender, __setfield_sender, __delfield_sender, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,DATA): self.__field_unknown4=value else: self.__field_unknown4=DATA(value,**{'sizeinbytes': 15}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_lg_time(self): return self.__field_lg_time.getvalue() def __setfield_lg_time(self, value): if isinstance(value,LGCALDATE): self.__field_lg_time=value else: self.__field_lg_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_lg_time(self): del self.__field_lg_time lg_time=property(__getfield_lg_time, __setfield_lg_time, __delfield_lg_time, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 1}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,UINT): self.__field_unknown8=value else: self.__field_unknown8=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_flags(self): return self.__field_flags.getvalue() def __setfield_flags(self, value): if isinstance(value,DATA): self.__field_flags=value else: self.__field_flags=DATA(value,**{'sizeinbytes': 5}) def __delfield_flags(self): del self.__field_flags flags=property(__getfield_flags, __setfield_flags, __delfield_flags, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_bin_header1(self): return self.__field_bin_header1.getvalue() def __setfield_bin_header1(self, value): if isinstance(value,UINT): self.__field_bin_header1=value else: self.__field_bin_header1=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header1(self): del self.__field_bin_header1 bin_header1=property(__getfield_bin_header1, __setfield_bin_header1, __delfield_bin_header1, None) def __getfield_bin_header2(self): return self.__field_bin_header2.getvalue() def __setfield_bin_header2(self, value): if isinstance(value,UINT): self.__field_bin_header2=value else: self.__field_bin_header2=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header2(self): del self.__field_bin_header2 bin_header2=property(__getfield_bin_header2, __setfield_bin_header2, __delfield_bin_header2, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_multipartID(self): return self.__field_multipartID.getvalue() def __setfield_multipartID(self, value): if isinstance(value,UINT): self.__field_multipartID=value else: self.__field_multipartID=UINT(value,**{'sizeinbytes': 2}) def __delfield_multipartID(self): del self.__field_multipartID multipartID=property(__getfield_multipartID, __setfield_multipartID, __delfield_multipartID, None) def __getfield_bin_header3(self): return self.__field_bin_header3.getvalue() def __setfield_bin_header3(self, value): if isinstance(value,UINT): self.__field_bin_header3=value else: self.__field_bin_header3=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header3(self): del self.__field_bin_header3 bin_header3=property(__getfield_bin_header3, __setfield_bin_header3, __delfield_bin_header3, None) def __getfield_unknown9(self): return self.__field_unknown9.getvalue() def __setfield_unknown9(self, value): if isinstance(value,UINT): self.__field_unknown9=value else: self.__field_unknown9=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown9(self): del self.__field_unknown9 unknown9=property(__getfield_unknown9, __setfield_unknown9, __delfield_unknown9, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_msglengths(self): try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx4500_308, 'length': 10}) return self.__field_msglengths.getvalue() def __setfield_msglengths(self, value): if isinstance(value,LIST): self.__field_msglengths=value else: self.__field_msglengths=LIST(value,**{'elementclass': _gen_p_lgvx4500_308, 'length': 10}) def __delfield_msglengths(self): del self.__field_msglengths msglengths=property(__getfield_msglengths, __setfield_msglengths, __delfield_msglengths, None) def __getfield_unknown10(self): return self.__field_unknown10.getvalue() def __setfield_unknown10(self, value): if isinstance(value,UINT): self.__field_unknown10=value else: self.__field_unknown10=UINT(value,**{'sizeinbytes': 10}) def __delfield_unknown10(self): del self.__field_unknown10 unknown10=property(__getfield_unknown10, __setfield_unknown10, __delfield_unknown10, None) def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,DATA): self.__field_unknown5=value else: self.__field_unknown5=DATA(value,) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def iscontainer(self): return True def containerelements(self): yield ('msg_index1', self.__field_msg_index1, None) yield ('msg_index2', self.__field_msg_index2, None) yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) yield ('timesent', self.__field_timesent, None) yield ('unknown', self.__field_unknown, None) yield ('callback_length', self.__field_callback_length, None) yield ('callback', self.__field_callback, None) yield ('sender_length', self.__field_sender_length, None) yield ('sender', self.__field_sender, None) yield ('unknown4', self.__field_unknown4, None) yield ('lg_time', self.__field_lg_time, None) yield ('GPStime', self.__field_GPStime, None) yield ('unknown5', self.__field_unknown5, None) yield ('read', self.__field_read, None) yield ('locked', self.__field_locked, None) yield ('unknown8', self.__field_unknown8, None) yield ('priority', self.__field_priority, None) yield ('flags', self.__field_flags, None) yield ('subject', self.__field_subject, None) yield ('bin_header1', self.__field_bin_header1, None) yield ('bin_header2', self.__field_bin_header2, None) yield ('unknown6', self.__field_unknown6, None) yield ('multipartID', self.__field_multipartID, None) yield ('bin_header3', self.__field_bin_header3, None) yield ('unknown9', self.__field_unknown9, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('msglengths', self.__field_msglengths, None) yield ('unknown10', self.__field_unknown10, None) yield ('msgs', self.__field_msgs, None) yield ('unknown5', self.__field_unknown5, None) class _gen_p_lgvx4500_289(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx4500_289,self).__init__(**dict) if self.__class__ is _gen_p_lgvx4500_289: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx4500_289,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx4500_289,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of senders phone number") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of senders phone number") class _gen_p_lgvx4500_308(BaseProtogenClass): 'Anonymous inner class' __fields=['msglength'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx4500_308,self).__init__(**dict) if self.__class__ is _gen_p_lgvx4500_308: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx4500_308,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx4500_308,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_msglength=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msglength.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msglength=UINT(**{'sizeinbytes': 1}) self.__field_msglength.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msglength(self): return self.__field_msglength.getvalue() def __setfield_msglength(self, value): if isinstance(value,UINT): self.__field_msglength=value else: self.__field_msglength=UINT(value,**{'sizeinbytes': 1}) def __delfield_msglength(self): del self.__field_msglength msglength=property(__getfield_msglength, __setfield_msglength, __delfield_msglength, "lengths of individual messages in septets") def iscontainer(self): return True def containerelements(self): yield ('msglength', self.__field_msglength, "lengths of individual messages in septets") class sms_quick_text(BaseProtogenClass): __fields=['msgs'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_quick_text,self).__init__(**dict) if self.__class__ is sms_quick_text: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_quick_text,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_quick_text,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx4500_323, } dict2.update(kwargs) kwargs=dict2 self.__field_msgs=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx4500_323, }) self.__field_msgs.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx4500_323, }) self.__field_msgs.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx4500_323, }) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'elementclass': _gen_p_lgvx4500_323, }) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def iscontainer(self): return True def containerelements(self): yield ('msgs', self.__field_msgs, None) class _gen_p_lgvx4500_323(BaseProtogenClass): 'Anonymous inner class' __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx4500_323,self).__init__(**dict) if self.__class__ is _gen_p_lgvx4500_323: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx4500_323,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx4500_323,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_msg=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=USTRING(**{}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) bitpim-1.0.7+dfsg1/src/phones/p_motov3m_sprint.py0000644001616600161660000004156311054420301020125 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Motorola V3m phones""" from prototypes import * from prototypes_moto import * from p_etsi import * from p_moto import * from p_motov710 import * from p_motov3m import * import fnmatch # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMBER_TYPE_WORK=0 NUMBER_TYPE_HOME=1 NUMBER_TYPE_MAIN=2 NUMBER_TYPE_MOBILE=3 NUMBER_TYPE_FAX=4 NUMBER_TYPE_PAGER=5 NUMBER_TYPE_EMAIL=6 NUMBER_TYPE_MAILING_LIST=7 NUMBER_TYPE_MOBILE2=8 NUMBER_TYPE_EMAIL2=9 NUMBER_TYPE_WWW=11 NUMBER_TYPE_MEMO=11 NUMBER_TYPE=frozenset([NUMBER_TYPE_WORK, NUMBER_TYPE_HOME, NUMBER_TYPE_MAIN, NUMBER_TYPE_MOBILE, NUMBER_TYPE_FAX, NUMBER_TYPE_PAGER]) EMAIL_TYPE=frozenset([NUMBER_TYPE_EMAIL]) WWW_TYPE=frozenset([NUMBER_TYPE_WWW]) MEMO_TYPE=frozenset([NUMBER_TYPE_MEMO]) NUMBER_TYPE_NAME={ NUMBER_TYPE_WORK: 'office', NUMBER_TYPE_HOME: 'home', NUMBER_TYPE_MAIN: 'main', NUMBER_TYPE_MOBILE: 'cell', NUMBER_TYPE_FAX: 'fax', NUMBER_TYPE_PAGER: 'pager', } NUMBER_TYPE_CODE={ 'office': NUMBER_TYPE_WORK, 'home': NUMBER_TYPE_HOME, 'main': NUMBER_TYPE_MAIN, 'cell': NUMBER_TYPE_MOBILE, 'fax': NUMBER_TYPE_FAX, 'pager': NUMBER_TYPE_PAGER } PB_TOTAL_GROUP=14 PB_GROUP_RANGE=xrange(1, PB_TOTAL_GROUP+1) PB_GROUP_NAME_LEN=24 PB_MAX_NUMBER_LEN=32 PB_MAX_NAME_LEN=24 PB_MAX_EMAIL_LEN=48 PB_FIRST_ENTRY=2 PB_TOTAL_ENTRIES=1430 # Slot 1 is voice mail PB_RANGE=xrange(PB_FIRST_ENTRY,PB_TOTAL_ENTRIES+1) class read_group_req(BaseProtogenClass): __fields=['command', 'start_index', 'end_index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(read_group_req,self).__init__(**dict) if self.__class__ is read_group_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(read_group_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(read_group_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MPGR=' }) self.__field_command.writetobuffer(buf) try: self.__field_start_index except: self.__field_start_index=CSVINT(**{ 'default': 1 }) self.__field_start_index.writetobuffer(buf) try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None, 'default': PB_TOTAL_GROUP }) self.__field_end_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MPGR=' }) self.__field_command.readfrombuffer(buf) self.__field_start_index=CSVINT(**{ 'default': 1 }) self.__field_start_index.readfrombuffer(buf) self.__field_end_index=CSVINT(**{ 'terminator': None, 'default': PB_TOTAL_GROUP }) self.__field_end_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': None, 'default': '+MPGR=' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': None, 'default': '+MPGR=' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_start_index(self): try: self.__field_start_index except: self.__field_start_index=CSVINT(**{ 'default': 1 }) return self.__field_start_index.getvalue() def __setfield_start_index(self, value): if isinstance(value,CSVINT): self.__field_start_index=value else: self.__field_start_index=CSVINT(value,**{ 'default': 1 }) def __delfield_start_index(self): del self.__field_start_index start_index=property(__getfield_start_index, __setfield_start_index, __delfield_start_index, None) def __getfield_end_index(self): try: self.__field_end_index except: self.__field_end_index=CSVINT(**{ 'terminator': None, 'default': PB_TOTAL_GROUP }) return self.__field_end_index.getvalue() def __setfield_end_index(self, value): if isinstance(value,CSVINT): self.__field_end_index=value else: self.__field_end_index=CSVINT(value,**{ 'terminator': None, 'default': PB_TOTAL_GROUP }) def __delfield_end_index(self): del self.__field_end_index end_index=property(__getfield_end_index, __setfield_end_index, __delfield_end_index, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('start_index', self.__field_start_index, None) yield ('end_index', self.__field_end_index, None) class calendar_req_resp(BaseProtogenClass): __fields=['command', 'index', 'title', 'alarm_timed', 'alarm_enabled', 'start_time', 'start_date', 'duration', 'alarm_time', 'alarm_date', 'repeat_type', 'ex_event', 'ex_event_flag'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(calendar_req_resp,self).__init__(**dict) if self.__class__ is calendar_req_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(calendar_req_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(calendar_req_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_index.writetobuffer(buf) if self.command=='+MDBR:': self.__field_title.writetobuffer(buf) self.__field_alarm_timed.writetobuffer(buf) self.__field_alarm_enabled.writetobuffer(buf) self.__field_start_time.writetobuffer(buf) self.__field_start_date.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_alarm_time.writetobuffer(buf) self.__field_alarm_date.writetobuffer(buf) self.__field_repeat_type.writetobuffer(buf) if self.command=='+MDBRE:': self.__field_ex_event.writetobuffer(buf) self.__field_ex_event_flag.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{ 'quotechar': None, 'terminator': ord(' '), 'default': '+MDBR:' }) self.__field_command.readfrombuffer(buf) self.__field_index=CSVINT() self.__field_index.readfrombuffer(buf) if self.command=='+MDBR:': self.__field_title=CSVSTRING() self.__field_title.readfrombuffer(buf) self.__field_alarm_timed=CSVINT() self.__field_alarm_timed.readfrombuffer(buf) self.__field_alarm_enabled=CSVINT() self.__field_alarm_enabled.readfrombuffer(buf) self.__field_start_time=CAL_TIME() self.__field_start_time.readfrombuffer(buf) self.__field_start_date=CAL_DATE() self.__field_start_date.readfrombuffer(buf) self.__field_duration=CSVINT() self.__field_duration.readfrombuffer(buf) self.__field_alarm_time=CAL_TIME() self.__field_alarm_time.readfrombuffer(buf) self.__field_alarm_date=CAL_DATE() self.__field_alarm_date.readfrombuffer(buf) self.__field_repeat_type=CSVINT() self.__field_repeat_type.readfrombuffer(buf) if self.command=='+MDBRE:': self.__field_ex_event=CSVINT() self.__field_ex_event.readfrombuffer(buf) self.__field_ex_event_flag=CSVINT(**{ 'terminator': None }) self.__field_ex_event_flag.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{ 'quotechar': None, 'terminator': ord(' '), 'default': '+MDBR:' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,CSVINT): self.__field_index=value else: self.__field_index=CSVINT(value,) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_title(self): return self.__field_title.getvalue() def __setfield_title(self, value): if isinstance(value,CSVSTRING): self.__field_title=value else: self.__field_title=CSVSTRING(value,) def __delfield_title(self): del self.__field_title title=property(__getfield_title, __setfield_title, __delfield_title, None) def __getfield_alarm_timed(self): return self.__field_alarm_timed.getvalue() def __setfield_alarm_timed(self, value): if isinstance(value,CSVINT): self.__field_alarm_timed=value else: self.__field_alarm_timed=CSVINT(value,) def __delfield_alarm_timed(self): del self.__field_alarm_timed alarm_timed=property(__getfield_alarm_timed, __setfield_alarm_timed, __delfield_alarm_timed, None) def __getfield_alarm_enabled(self): return self.__field_alarm_enabled.getvalue() def __setfield_alarm_enabled(self, value): if isinstance(value,CSVINT): self.__field_alarm_enabled=value else: self.__field_alarm_enabled=CSVINT(value,) def __delfield_alarm_enabled(self): del self.__field_alarm_enabled alarm_enabled=property(__getfield_alarm_enabled, __setfield_alarm_enabled, __delfield_alarm_enabled, None) def __getfield_start_time(self): return self.__field_start_time.getvalue() def __setfield_start_time(self, value): if isinstance(value,CAL_TIME): self.__field_start_time=value else: self.__field_start_time=CAL_TIME(value,) def __delfield_start_time(self): del self.__field_start_time start_time=property(__getfield_start_time, __setfield_start_time, __delfield_start_time, None) def __getfield_start_date(self): return self.__field_start_date.getvalue() def __setfield_start_date(self, value): if isinstance(value,CAL_DATE): self.__field_start_date=value else: self.__field_start_date=CAL_DATE(value,) def __delfield_start_date(self): del self.__field_start_date start_date=property(__getfield_start_date, __setfield_start_date, __delfield_start_date, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,CSVINT): self.__field_duration=value else: self.__field_duration=CSVINT(value,) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_alarm_time(self): return self.__field_alarm_time.getvalue() def __setfield_alarm_time(self, value): if isinstance(value,CAL_TIME): self.__field_alarm_time=value else: self.__field_alarm_time=CAL_TIME(value,) def __delfield_alarm_time(self): del self.__field_alarm_time alarm_time=property(__getfield_alarm_time, __setfield_alarm_time, __delfield_alarm_time, None) def __getfield_alarm_date(self): return self.__field_alarm_date.getvalue() def __setfield_alarm_date(self, value): if isinstance(value,CAL_DATE): self.__field_alarm_date=value else: self.__field_alarm_date=CAL_DATE(value,) def __delfield_alarm_date(self): del self.__field_alarm_date alarm_date=property(__getfield_alarm_date, __setfield_alarm_date, __delfield_alarm_date, None) def __getfield_repeat_type(self): return self.__field_repeat_type.getvalue() def __setfield_repeat_type(self, value): if isinstance(value,CSVINT): self.__field_repeat_type=value else: self.__field_repeat_type=CSVINT(value,) def __delfield_repeat_type(self): del self.__field_repeat_type repeat_type=property(__getfield_repeat_type, __setfield_repeat_type, __delfield_repeat_type, None) def __getfield_ex_event(self): return self.__field_ex_event.getvalue() def __setfield_ex_event(self, value): if isinstance(value,CSVINT): self.__field_ex_event=value else: self.__field_ex_event=CSVINT(value,) def __delfield_ex_event(self): del self.__field_ex_event ex_event=property(__getfield_ex_event, __setfield_ex_event, __delfield_ex_event, None) def __getfield_ex_event_flag(self): return self.__field_ex_event_flag.getvalue() def __setfield_ex_event_flag(self, value): if isinstance(value,CSVINT): self.__field_ex_event_flag=value else: self.__field_ex_event_flag=CSVINT(value,**{ 'terminator': None }) def __delfield_ex_event_flag(self): del self.__field_ex_event_flag ex_event_flag=property(__getfield_ex_event_flag, __setfield_ex_event_flag, __delfield_ex_event_flag, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('index', self.__field_index, None) if self.command=='+MDBR:': yield ('title', self.__field_title, None) yield ('alarm_timed', self.__field_alarm_timed, None) yield ('alarm_enabled', self.__field_alarm_enabled, None) yield ('start_time', self.__field_start_time, None) yield ('start_date', self.__field_start_date, None) yield ('duration', self.__field_duration, None) yield ('alarm_time', self.__field_alarm_time, None) yield ('alarm_date', self.__field_alarm_date, None) yield ('repeat_type', self.__field_repeat_type, None) if self.command=='+MDBRE:': yield ('ex_event', self.__field_ex_event, None) yield ('ex_event_flag', self.__field_ex_event_flag, None) bitpim-1.0.7+dfsg1/src/phones/com_motok1m.py0000644001616600161660000001417110734517633017046 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_motok1m.py 4529 2007-12-26 18:38:19Z djpham $ """Communicate with Motorola K1m phones using AT commands""" # BitPim modules import common import com_motov710m import prototypes import p_motok1m import helpids parentphone=com_motov710m.Phone class Phone(parentphone): desc='Moto-K1m' helpid=helpids.ID_PHONE_MOTOK1M serialsname='motok1m' protocolclass=p_motok1m builtinringtones=( (0, ('No Ring',)), ) def __init__(self, logtarget, commport): parentphone.__init__(self, logtarget, commport) # Ringtones stuff---------------------------------------------------------- def _get_ringtone_index(self): res={} # first the builtin ones for _l in self.builtinringtones: _idx=_l[0] for _e in _l[1]: res[_idx]={ 'name': _e, 'origin': 'builtin' } _idx+=1 # now the custome one _buf=prototypes.buffer(self.getfilecontents( self.protocolclass.RT_INDEX_FILE)) _idx_file=self.protocolclass.ringtone_index_file() _idx_file.readfrombuffer(_buf, logtitle='Read ringtone index file') for _entry in _idx_file.items: _filename=self.decode_utf16(_entry.name) if _filename.startswith(self.protocolclass.RT_PATH): _origin='ringers' elif _filename.startswith(self.protocolclass.SND_PATH): _origin='sounds' else: # neither ringtone nor sounds, can't use this continue res[_entry.index]={ 'name': common.basename(_filename), 'filename': _filename, 'type': _entry.ringtone_type, 'origin': _origin } return res def getringtones(self, fundamentals): """Retrieve ringtones data""" self.log('Reading ringtones') self.setmode(self.MODEOBEX) _res={} _rt_index=fundamentals.get('ringtone-index', {}) for _entry in _rt_index.values(): if _entry.has_key('filename'): try: _res[_entry['name']]=self.obex.getfilecontents( self.protocolclass.OBEXName(_entry['filename'])) except: self.log('Failed to read media file %s'%_entry['filename']) fundamentals['ringtone']=_res self.setmode(self.MODEMODEM) return fundamentals def saveringtones(self, fundamentals, merge): """Save ringtones to the phone""" self.log('Writing ringtones to the phone') self.setmode(self.MODEPHONEBOOK) self.setmode(self.MODEBREW) try: _del_list, _new_list=self._get_del_new_list('ringtone-index', 'ringtone', merge, fundamentals, frozenset(['sounds'])) # replace files, need to be in BREW mode self._replace_files('ringtone-index', 'ringtone', _new_list, fundamentals) # delete files, need to be in OBEX mode self.setmode(self.MODEOBEX) self._del_files('ringtone-index', 'audio', _del_list, fundamentals) # and add new files, need to be in OBEX mode self._add_files('ringtone-index', 'ringtone', 'audio', _new_list, fundamentals) except: if __debug__: self.setmode(self.MODEMODEM) raise self.setmode(self.MODEMODEM) return fundamentals #------------------------------------------------------------------------------ parentprofile=com_motov710m.Profile class Profile(parentprofile): serialsname=Phone.serialsname usbids=( ( 0x22B8, 0x2A64, 1),) # fill in the list of ringtone/sound origins on your phone ringtoneorigins=('ringers', 'sounds') # ringtone origins that are not available for the contact assignment excluded_ringtone_origins=() imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) excluded_wallpaper_origins=() # use for auto-detection phone_manufacturer='Motorola' phone_model='K1m' common_model_name='K1m' generic_phone_model='Motorola CDMA K1m phone' # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 176, 'height': 184, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", {'width': 96, 'height': 67, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "fullscreen", {'width': 176, 'height': 220, 'format': "JPEG"})) field_color_data=parentprofile.field_color_data field_color_data.update({ 'phonebook': { 'name': { 'first': 1, 'middle': 1, 'last': 1, 'full': 1, 'nickname': 0, 'details': 1 }, 'number': { 'type': 5, 'speeddial': 5, 'number': 5, 'details': 5, 'ringtone': 5, 'wallpaper': 5 }, 'email': 2, 'email_details': { 'emailspeeddial': 2, 'emailringtone': 2, 'emailwallpaper': 2 }, 'address': { 'type': 0, 'company': 0, 'street': 0, 'street2': 0, 'city': 0, 'state': 0, 'postalcode': 0, 'country': 0, 'details': 0 }, 'url': 0, 'memo': 0, 'category': 1, 'wallpaper': 1, 'ringtone': 1, 'storage': 0, }}) bitpim-1.0.7+dfsg1/src/phones/com_sanyo5600.py0000644001616600161660000000474610535762440017127 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id$ """Talk to the Sanyo MM-5600 cell phone""" # my modules import common import p_sanyo5600 import com_brew import com_phone import com_sanyo import com_sanyomedia import com_sanyonewer import prototypes numbertypetab=( 'cell', 'home', 'office', 'pager', 'fax', 'data', 'none' ) class Phone(com_sanyonewer.Phone): "Talk to the Sanyo MM-5600 cell phone" desc="MM-5600" protocolclass=p_sanyo5600 serialsname='mm5600' FIRST_MEDIA_DIRECTORY=1 LAST_MEDIA_DIRECTORY=3 imagelocations=( # offset, directory #, indexflag, type, maximumentries ) builtinringtones=( 'None', 'Vibrate', 'Voice Alarm', '', '', '', '', '', '', 'Tone 1', 'Tone 2', 'Tone 3', 'Tone 4', 'Tone 5', 'Tone 6', 'Tone 7', 'Tone 8', '', '', '', '', '', '', '', '', '', '', '', '', 'Requiem:Dies Irae', 'Minute Waltz', 'Hungarian Dance', 'Miltary March', 'Ten Little Indians', 'Head,Shoulders,Knees&Toes', 'The Moment', 'Asian Jingle', 'Disco') calendar_defaultringtone=0 calendar_defaultcaringtone=0 calendar_voicenumber=56 phonebook_voicenumber=3 def __init__(self, logtarget, commport): com_sanyonewer.Phone.__init__(self, logtarget, commport) self.mode=self.MODENONE self.numbertypetab=numbertypetab class Profile(com_sanyonewer.Profile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='SANYO' phone_model='SCP-5600/US' WALLPAPER_WIDTH=176 WALLPAPER_HEIGHT=220 _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), ('ringtone', 'write', 'MERGE'), ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ) def __init__(self): com_sanyonewer.Profile.__init__(self) self.numbertypetab=numbertypetab bitpim-1.0.7+dfsg1/src/phones/com_moto.py0000644001616600161660000004371510733033631016431 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_moto.py 4516 2007-12-21 22:00:57Z djpham $ """Communicate with Motorola phones using AT commands. This code is for all Motorola phones with specific subclasses for CDMA and GSM variants""" # system modules import sha # BitPim modules import commport import com_etsi import phoneinfo import prototypes import p_moto import sms class Phone(com_etsi.Phone): """Talk to a generic Motorola phone. """ desc='Motorola' protocolclass=p_moto MODEPHONEBOOK="modephonebook" def __init__(self, logtarget, commport): super(Phone,self).__init__(logtarget, commport) self.mode=self.MODENONE # Common/Support routines def set_mode(self, mode): """Set the current phone mode""" _req=self.protocolclass.modeset() _req.mode=mode self.sendATcommand(_req, None) self.comm.sendatcommand('') def charset_ascii(self): """Set the charset to ASCII (default)""" _req=self.protocolclass.charset_set_req() _req.charset=self.protocolclass.CHARSET_ASCII self.sendATcommand(_req, None) def charset_ucs2(self): """Set the charset to UCS-2, used for most string values""" _req=self.protocolclass.charset_set_req() _req.charset=self.protocolclass.CHARSET_UCS2 self.sendATcommand(_req, None) def select_phonebook(self, phonebook=None): _req=self.protocolclass.select_phonebook_req() if phonebook: _req.pb_type=phonebook self.sendATcommand(_req, None) def ucs2_to_ascii(self, v): """convert an UCS-2 to ASCII string""" return v.decode('hex').decode('utf_16be') def ascii_to_ucs2(self, v): """convert an ascii string to UCS-2""" return v.encode('utf_16be').encode('hex').upper() def _setmodemodemtophonebook(self): self.log('Switching from modem to phonebook') self.set_mode(self.protocolclass.MODE_PHONEBOOK) return True def _setmodemodem(self): self.log('Switching to modem') try: self.comm.sendatcommand('E0V1') self.set_mode(self.protocolclass.MODE_MODEM) return True except: return False def _setmodephonebook(self): self.setmode(self.MODEMODEM) self.setmode(self.MODEPHONEBOOK) return True def _setmodephonebooktomodem(self): self.log('Switching from phonebook to modem') self.set_mode(self.protocolclass.MODE_MODEM) return True def decode_utf16(self, v): """Decode a Motorola unicode string""" # 1st, find the terminator if exist _idx=v.find('\x00\x00') # decode the string if _idx==-1: return v.decode('utf_16_le') else: return v[:_idx+1].decode('utf_16_le') def encode_utf16(self, v): """Encode a unicode/string into a Motorola unicode""" return (v+'\x00').encode('utf_16_le') # Phone info routines def get_model(self): _req=self.protocolclass.model_req() return self.sendATcommand(_req, self.protocolclass.string_resp)[0].value def get_manufacturer(self): _req=self.protocolclass.manufacturer_req() return self.sendATcommand(_req, self.protocolclass.string_resp)[0].value def get_phone_number(self): self.setmode(self.MODEPHONEBOOK) _req=self.protocolclass.number_req() _s=self.sendATcommand(_req, self.protocolclass.string_resp)[0].value self.setmode(self.MODEMODEM) return _s.replace(',', '') def get_firmware_version(self): _req=self.protocolclass.firmware_req() return self.sendATcommand(_req, self.protocolclass.string_resp)[0].value def get_signal_quality(self): _req=self.protocolclass.signal_req() _res=self.sendATcommand(_req, self.protocolclass.signal_resp)[0] return str(100*int(_res.rssi)/31)+'%' def get_battery_level(self): _req=self.protocolclass.battery_req() _res=self.sendATcommand(_req, self.protocolclass.battery_resp)[0] return '%d%%'%_res.level def getphoneinfo(self, phone_info): self.log('Getting Phone Info') self.setmode(self.MODEMODEM) _total_keys=len(phoneinfo.PhoneInfo.standard_keys) for _cnt,e in enumerate(phoneinfo.PhoneInfo.standard_keys): self.progress(_cnt, _total_keys, 'Retrieving Phone '+e[1]) f=getattr(self, 'get_'+e[0]) setattr(phone_info, e[0], f()) # fundamentals def getfundamentals(self, results): """Gets information fundamental to interopating with the phone and UI. Currently this is: - 'uniqueserial' a unique serial number representing the phone - 'groups' the phonebook groups - 'wallpaper-index' map index numbers to names - 'ringtone-index' map index numbers to ringtone names This method is called before we read the phonebook data or before we write phonebook data. """ self.log("Retrieving fundamental phone information") self.progress(0, 100, 'Retrieving fundamental phone information') self.setmode(self.MODEPHONEBOOK) self.charset_ascii() self.log("Phone serial number") results['uniqueserial']=sha.new(self.get_esn()).hexdigest() # now read groups self.log("Reading group information") results['groups']=self._get_groups() # ringtone index self.setmode(self.MODEBREW) self.log('Reading Ringtone Index') results['ringtone-index']=self._get_ringtone_index() # getting wallpaper-index self.log('Reading Wallpaper Index') results['wallpaper-index']=self._get_wallpaper_index() # Update the group ringtone ID self._update_group_ringtone(results) # All done self.log("Fundamentals retrieved") self.setmode(self.MODEMODEM) return results def _update_group_ringtone(self, results): _ringtone_index=results.get('ringtone-index', {}) _groups=results.get('groups', {}) for _key,_entry in _groups.items(): _rt_idx=_entry['ringtone'] _groups[_key]['ringtone']=_ringtone_index.get(_rt_idx, {}).get('name', None) results['groups']=_groups def _setup_ringtone_name_dict(self, fundamentals): """Create a new ringtone dict keyed by name for lookup""" _rt_index=fundamentals.get('ringtone-index', {}) _rt_name_index={} for _key,_entry in _rt_index.items(): _rt_name_index[_entry['name']]=_key return _rt_name_index def _setup_group_name_dict(self, fundamentals): """Create a new group dict keyed by name for lookup""" _grp_name_index={} for _key,_entry in fundamentals.get('groups', {}).items(): _grp_name_index[_entry['name']]=_key return _grp_name_index # speed dial handling stuff def _mark_used_slots(self, entries, sd_slots, key_name): """Mark the speed dial slots being used""" for _key,_entry in enumerate(entries): _sd=_entry.get('speeddial', None) if _sd is not None: if sd_slots[_sd]: entries[_key]['speeddial']=None else: sd_slots[_sd]=_entry[key_name] def _get_sd_slot(self, entries, sd_slots, key_name): """Populate the next available speed dial""" for _index,_entry in enumerate(entries): if _entry.get('speeddial', None) is None: try: _new_sd=sd_slots.index(False) entries[_index]['speeddial']=_new_sd sd_slots[_new_sd]=_entry[key_name] except ValueError: self.log('Failed to allocate speed dial value') def _ensure_speeddials(self, fundamentals): """Make sure that each and every number/email/mail list has a speed dial, which is being used as the slot/index number """ _pb_book=fundamentals.get('phonebook', {}) _sd_slots=[False]*(self.protocolclass.PB_TOTAL_ENTRIES+1) _sd_slots[0]=True # go through the first round and mark the slots being used for _key,_pb_entry in _pb_book.items(): self._mark_used_slots(_pb_entry.get('numbers', []), _sd_slots, 'number') self._mark_used_slots(_pb_entry.get('emails', []), _sd_slots, 'email') self._mark_used_slots(_pb_entry.get('maillist', []), _sd_slots, 'entry') # go through the 2nd time and populate unknown speed dials for _key, _pb_entry in _pb_book.items(): self._get_sd_slot(_pb_entry.get('numbers', []), _sd_slots, 'number') self._get_sd_slot(_pb_entry.get('emails', []), _sd_slots, 'email') self._get_sd_slot(_pb_entry.get('maillist', []), _sd_slots, 'entry') return _sd_slots # subclass needs to define these def _get_groups(self): raise NotImplementedError def _get_ringtone_index(self): raise NotImplementedError def _get_wallpaper_index(self): raise NotImplementedError def _save_groups(self, fundamentals): raise NotImplementedError def _build_pb_entry(self, entry, pb_book, fundamentals): raise NotImplementedError # Phonebook stuff def _build_pb_entry(self, entry, pb_book, fundamentals): """Build a BitPim phonebook entry based on phone data. Need to to implement in subclass for each phone """ raise NotImplementedError def _update_mail_list(self, pb_book, fundamentals): raise NotImplementedError def getphonebook(self, result): """Reads the phonebook data. The L{getfundamentals} information will already be in result.""" self.log('Getting phonebook') self.setmode(self.MODEPHONEBOOK) # pick the main phonebook self.select_phonebook() # setting up pb_book={} result['pb_list']=[] result['sd_dict']={} # loop through and read 10 entries at a time _total_entries=self.protocolclass.PB_TOTAL_ENTRIES _req=self.protocolclass.read_pb_req() for _start_idx in range(1, _total_entries+1, 10): _end_idx=min(_start_idx+9, _total_entries) _req.start_index=_start_idx _req.end_index=_end_idx for _retry_cnt in range(2): try: self.progress(_end_idx, _total_entries, 'Reading contact entry %d to %d'%(_start_idx, _end_idx)) _res=self.sendATcommand(_req, self.protocolclass.read_pb_resp) for _entry in _res: self._build_pb_entry(_entry, pb_book, result) break except: if _retry_cnt: self.log('Failed to read phonebook data') else: self.log('Failed to read phonebook data, retrying...') self._update_mail_list(pb_book, result) self.setmode(self.MODEMODEM) del result['pb_list'], result['sd_dict'] _keys=result['groups'].keys() result['categories']=[x['name'] for _,x in result['groups'].items()] result['phonebook']=pb_book return pb_book def savephonebook(self, result): "Saves out the phonebook" self.log('Writing phonebook') self.setmode(self.MODEPHONEBOOK) # setting up what we need result['ringtone-name-index']=self._setup_ringtone_name_dict(result) result['group-name-index']=self._setup_group_name_dict(result) result['sd-slots']=self._ensure_speeddials(result) # save the group self._save_groups(result) self._write_pb_entries(result) # clean up del result['ringtone-name-index'], result['group-name-index'] del result['sd-slots'] self.setmode(self.MODEMODEM) return result # Calendar Stuff------------------------------------------------------------ def _build_cal_entry(self, entry, calendar, fundamentals): """Build a BitPim calendar object from phonebook data""" raise NotImplementedError def del_calendar_entry(self, index): _req=self.protocolclass.calendar_write_ex_req() _req.index=index _req.nth_event=0 _req.ex_event_flag=0 self.sendATcommand(_req, None) def lock_calendar(self, lock=True): """Lock the calendar to access it""" _req=self.protocolclass.calendar_lock_req() if lock: _req.lock=1 else: _req.lock=0 self.sendATcommand(_req, None) def getcalendar(self,result): """Read all calendars from the phone""" self.log('Reading calendar entries') self.setmode(self.MODEPHONEBOOK) self.lock_calendar() _total_entries=self.protocolclass.CAL_TOTAL_ENTRIES _max_entry=self.protocolclass.CAL_MAX_ENTRY _req=self.protocolclass.calendar_read_req() _calendar={ 'exceptions': [] } for _start_idx in range(0, _total_entries, 10): _end_idx=min(_start_idx+9, _max_entry) _req.start_index=_start_idx _req.end_index=_end_idx for _retry in range(2): try: self.progress(_end_idx, _total_entries, 'Reading calendar entry %d to %d'%(_start_idx, _end_idx)) _res=self.sendATcommand(_req, self.protocolclass.calendar_req_resp) for _entry in _res: self._build_cal_entry(_entry, _calendar, result) except: if _retry: self.log('Failed to read calendar data') else: self.log('Failed to read calendar data, retrying ...') self._process_exceptions(_calendar) del _calendar['exceptions'] self.lock_calendar(False) self.setmode(self.MODEMODEM) result['calendar']=_calendar return result def savecalendar(self, result, merge): """Save calendar entries to the phone""" self.log('Writing calendar entries') self.setmode(self.MODEPHONEBOOK) self.lock_calendar() self._write_calendar_entries(result) self.lock_calendar(False) self.setmode(self.MODEMODEM) return result # SMS stuff---------------------------------------------------------------- def select_default_SMS(self): """Select the default SMS storage""" _req=self.protocolclass.sms_sel_req() self.sendATcommand(_req, None) def _process_sms_header(self, _header, _entry): _addr=_header.sms_addr.strip(' ').replace('"', '') if _header.has_date: _entry.datetime=_header.sms_date if _header.sms_type==self.protocolclass.SMS_REC_UNREAD: _entry.read=False _entry.folder=_entry.Folder_Inbox _entry._from=_addr elif _header.sms_type==self.protocolclass.SMS_REC_READ: _entry.read=True _entry.folder=_entry.Folder_Inbox _entry._from=_addr elif _header.sms_type==self.protocolclass.SMS_STO_UNSENT: _entry._to=_addr _entry.folder=_entry.Folder_Saved else: _entry._to=_addr _entry.folder=_entry.Folder_Sent def _process_sms_text(self, res, entry): _s=res[1] _open_p=_s.find('(') _close_p=_s.find(')') if _open_p==0 and _close_p!=-1: # extract the subj entry.subject=_s[1:_close_p] res[1]=_s[_close_p+1:] entry.text='\n'.join(res[1:]) def _process_sms_result(self, _res, _sms, fundamentals): """Process an SMS result as returned from the phone""" _buf=prototypes.buffer(_res[0]) _header=self.protocolclass.sms_m_read_resp() _field_cnt=len(_res[0].split(',')) _header.has_date=_field_cnt>2 _header.date_terminated=_field_cnt>4 # the date field also has a ',' _header.readfrombuffer(_buf, logtitle='Reading SMS Response') _entry=sms.SMSEntry() self._process_sms_header(_header, _entry) self._process_sms_text(_res, _entry) _sms[_entry.id]=_entry def getsms(self, fundamentals): """Read SMS messages from the phone""" self.log('Reading SMS messages') self.setmode(self.MODEPHONEBOOK) _sms={} try: self.select_default_SMS() _req=self.protocolclass.sms_list_req() _sms_list=self.sendATcommand(_req, None, True) _sms_item=self.protocolclass.sms_list_resp() for _entry in _sms_list: _buf=prototypes.buffer(_entry) _sms_item.readfrombuffer(_buf, logtitle='Reading an SMS List Item') try: _res=self.comm.sendatcommand('+MMGR=%d'%_sms_item.index, retry=True) self._process_sms_result(_res, _sms, fundamentals) except commport.ATError: self.log('Failed to read SMS Item %d'%_sms_item.index) except: if __debug__: self.setmode(self.MODEMODEM) raise self.setmode(self.MODEMODEM) fundamentals['canned_msg']=[] fundamentals['sms']=_sms return fundamentals #------------------------------------------------------------------------------ parentprofile=com_etsi.Profile class Profile(parentprofile): BP_Calendar_Version=3 bitpim-1.0.7+dfsg1/src/phones/p_sanyo200.p0000644001616600161660000000136110541672162016312 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id$ %{ """Various descriptions of data specific to Sanyo SCP-200""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 _NUMCALLHISTORY=20 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 #for sym in dir(p_sanyo): # print sym %} bitpim-1.0.7+dfsg1/src/phones/p_lgvx4600.py0000644001616600161660000012177310466234100016424 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VX4600""" from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx4400 except as noted # below from p_lgvx4400 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=1 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=500 MAXCALENDARDESCRIPTION=38 NUMEMAILS=1 NUMPHONENUMBERS=5 MEMOLENGTH=49 class mediadesc(BaseProtogenClass): __fields=['totalsize', 'dunno1', 'index', 'magic1', 'magic2', 'magic3', 'dunno2', 'filename', 'whoknows', 'mimetype', 'whoknows2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(mediadesc,self).__init__(**dict) if self.__class__ is mediadesc: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(mediadesc,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(mediadesc,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_totalsize.writetobuffer(buf) try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 4, 'constant': 0}) self.__field_dunno1.writetobuffer(buf) self.__field_index.writetobuffer(buf) try: self.__field_magic1 except: self.__field_magic1=UINT(**{'sizeinbytes': 4, 'default': 0x7824c97a}) self.__field_magic1.writetobuffer(buf) try: self.__field_magic2 except: self.__field_magic2=UINT(**{'sizeinbytes': 4, 'default': 0x7824c97a}) self.__field_magic2.writetobuffer(buf) try: self.__field_magic3 except: self.__field_magic3=UINT(**{'sizeinbytes': 4, 'default': 0x7824c97a}) self.__field_magic3.writetobuffer(buf) try: self.__field_dunno2 except: self.__field_dunno2=UINT(**{'sizeinbytes': 4, 'constant': 0}) self.__field_dunno2.writetobuffer(buf) self.__field_filename.writetobuffer(buf) try: self.__field_whoknows except: self.__field_whoknows=USTRING(**{'sizeinbytes': 32, 'default': 'identity'}) self.__field_whoknows.writetobuffer(buf) self.__field_mimetype.writetobuffer(buf) try: self.__field_whoknows2 except: self.__field_whoknows2=USTRING(**{'sizeinbytes': 32, 'default': ""}) self.__field_whoknows2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_totalsize=UINT(**{'sizeinbytes': 4}) self.__field_totalsize.readfrombuffer(buf) self.__field_dunno1=UINT(**{'sizeinbytes': 4, 'constant': 0}) self.__field_dunno1.readfrombuffer(buf) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_magic1=UINT(**{'sizeinbytes': 4, 'default': 0x7824c97a}) self.__field_magic1.readfrombuffer(buf) self.__field_magic2=UINT(**{'sizeinbytes': 4, 'default': 0x7824c97a}) self.__field_magic2.readfrombuffer(buf) self.__field_magic3=UINT(**{'sizeinbytes': 4, 'default': 0x7824c97a}) self.__field_magic3.readfrombuffer(buf) self.__field_dunno2=UINT(**{'sizeinbytes': 4, 'constant': 0}) self.__field_dunno2.readfrombuffer(buf) self.__field_filename=USTRING(**{'sizeinbytes': 32, 'default': 'body'}) self.__field_filename.readfrombuffer(buf) self.__field_whoknows=USTRING(**{'sizeinbytes': 32, 'default': 'identity'}) self.__field_whoknows.readfrombuffer(buf) self.__field_mimetype=USTRING(**{'sizeinbytes': 32}) self.__field_mimetype.readfrombuffer(buf) self.__field_whoknows2=USTRING(**{'sizeinbytes': 32, 'default': ""}) self.__field_whoknows2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_totalsize(self): return self.__field_totalsize.getvalue() def __setfield_totalsize(self, value): if isinstance(value,UINT): self.__field_totalsize=value else: self.__field_totalsize=UINT(value,**{'sizeinbytes': 4}) def __delfield_totalsize(self): del self.__field_totalsize totalsize=property(__getfield_totalsize, __setfield_totalsize, __delfield_totalsize, "media file size with size of this file (156 bytes) added") def __getfield_dunno1(self): try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 4, 'constant': 0}) return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UINT): self.__field_dunno1=value else: self.__field_dunno1=UINT(value,**{'sizeinbytes': 4, 'constant': 0}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, "index number") def __getfield_magic1(self): try: self.__field_magic1 except: self.__field_magic1=UINT(**{'sizeinbytes': 4, 'default': 0x7824c97a}) return self.__field_magic1.getvalue() def __setfield_magic1(self, value): if isinstance(value,UINT): self.__field_magic1=value else: self.__field_magic1=UINT(value,**{'sizeinbytes': 4, 'default': 0x7824c97a}) def __delfield_magic1(self): del self.__field_magic1 magic1=property(__getfield_magic1, __setfield_magic1, __delfield_magic1, "probably a date") def __getfield_magic2(self): try: self.__field_magic2 except: self.__field_magic2=UINT(**{'sizeinbytes': 4, 'default': 0x7824c97a}) return self.__field_magic2.getvalue() def __setfield_magic2(self, value): if isinstance(value,UINT): self.__field_magic2=value else: self.__field_magic2=UINT(value,**{'sizeinbytes': 4, 'default': 0x7824c97a}) def __delfield_magic2(self): del self.__field_magic2 magic2=property(__getfield_magic2, __setfield_magic2, __delfield_magic2, "probably a date") def __getfield_magic3(self): try: self.__field_magic3 except: self.__field_magic3=UINT(**{'sizeinbytes': 4, 'default': 0x7824c97a}) return self.__field_magic3.getvalue() def __setfield_magic3(self, value): if isinstance(value,UINT): self.__field_magic3=value else: self.__field_magic3=UINT(value,**{'sizeinbytes': 4, 'default': 0x7824c97a}) def __delfield_magic3(self): del self.__field_magic3 magic3=property(__getfield_magic3, __setfield_magic3, __delfield_magic3, "probably a date") def __getfield_dunno2(self): try: self.__field_dunno2 except: self.__field_dunno2=UINT(**{'sizeinbytes': 4, 'constant': 0}) return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UINT): self.__field_dunno2=value else: self.__field_dunno2=UINT(value,**{'sizeinbytes': 4, 'constant': 0}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'sizeinbytes': 32, 'default': 'body'}) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, None) def __getfield_whoknows(self): try: self.__field_whoknows except: self.__field_whoknows=USTRING(**{'sizeinbytes': 32, 'default': 'identity'}) return self.__field_whoknows.getvalue() def __setfield_whoknows(self, value): if isinstance(value,USTRING): self.__field_whoknows=value else: self.__field_whoknows=USTRING(value,**{'sizeinbytes': 32, 'default': 'identity'}) def __delfield_whoknows(self): del self.__field_whoknows whoknows=property(__getfield_whoknows, __setfield_whoknows, __delfield_whoknows, None) def __getfield_mimetype(self): return self.__field_mimetype.getvalue() def __setfield_mimetype(self, value): if isinstance(value,USTRING): self.__field_mimetype=value else: self.__field_mimetype=USTRING(value,**{'sizeinbytes': 32}) def __delfield_mimetype(self): del self.__field_mimetype mimetype=property(__getfield_mimetype, __setfield_mimetype, __delfield_mimetype, None) def __getfield_whoknows2(self): try: self.__field_whoknows2 except: self.__field_whoknows2=USTRING(**{'sizeinbytes': 32, 'default': ""}) return self.__field_whoknows2.getvalue() def __setfield_whoknows2(self, value): if isinstance(value,USTRING): self.__field_whoknows2=value else: self.__field_whoknows2=USTRING(value,**{'sizeinbytes': 32, 'default': ""}) def __delfield_whoknows2(self): del self.__field_whoknows2 whoknows2=property(__getfield_whoknows2, __setfield_whoknows2, __delfield_whoknows2, None) def iscontainer(self): return True def containerelements(self): yield ('totalsize', self.__field_totalsize, "media file size with size of this file (156 bytes) added") yield ('dunno1', self.__field_dunno1, None) yield ('index', self.__field_index, "index number") yield ('magic1', self.__field_magic1, "probably a date") yield ('magic2', self.__field_magic2, "probably a date") yield ('magic3', self.__field_magic3, "probably a date") yield ('dunno2', self.__field_dunno2, None) yield ('filename', self.__field_filename, None) yield ('whoknows', self.__field_whoknows, None) yield ('mimetype', self.__field_mimetype, None) yield ('whoknows2', self.__field_whoknows2, None) class pbentry(BaseProtogenClass): __fields=['serial1', 'entrysize', 'serial2', 'entrynumber', 'name', 'group', 'emails', 'url', 'ringtone', 'secret', 'memo', 'wallpaper', 'numbertypes', 'numbers', 'unknown20c'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_serial1.writetobuffer(buf) try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x0190}) self.__field_entrysize.writetobuffer(buf) self.__field_serial2.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_group.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx4600_66, 'length': NUMEMAILS}) self.__field_emails.writetobuffer(buf) self.__field_url.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_secret.writetobuffer(buf) self.__field_memo.writetobuffer(buf) self.__field_wallpaper.writetobuffer(buf) try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx4600_73, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx4600_75, 'length': NUMPHONENUMBERS}) self.__field_numbers.writetobuffer(buf) try: self.__field_unknown20c except: self.__field_unknown20c=UNKNOWN() self.__field_unknown20c.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x0190}) self.__field_entrysize.readfrombuffer(buf) self.__field_serial2=UINT(**{'sizeinbytes': 4}) self.__field_serial2.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 2}) self.__field_entrynumber.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 23, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 2}) self.__field_group.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx4600_66, 'length': NUMEMAILS}) self.__field_emails.readfrombuffer(buf) self.__field_url=USTRING(**{'sizeinbytes': 72, 'raiseonunterminatedread': False}) self.__field_url.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 2}) self.__field_ringtone.readfrombuffer(buf) self.__field_secret=BOOL(**{'sizeinbytes': 1}) self.__field_secret.readfrombuffer(buf) self.__field_memo=USTRING(**{'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) self.__field_memo.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 2}) self.__field_wallpaper.readfrombuffer(buf) self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx4600_73, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.readfrombuffer(buf) self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx4600_75, 'length': NUMPHONENUMBERS}) self.__field_numbers.readfrombuffer(buf) self.__field_unknown20c=UNKNOWN() self.__field_unknown20c.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_entrysize(self): try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x0190}) return self.__field_entrysize.getvalue() def __setfield_entrysize(self, value): if isinstance(value,UINT): self.__field_entrysize=value else: self.__field_entrysize=UINT(value,**{'sizeinbytes': 2, 'constant': 0x0190}) def __delfield_entrysize(self): del self.__field_entrysize entrysize=property(__getfield_entrysize, __setfield_entrysize, __delfield_entrysize, None) def __getfield_serial2(self): return self.__field_serial2.getvalue() def __setfield_serial2(self, value): if isinstance(value,UINT): self.__field_serial2=value else: self.__field_serial2=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial2(self): del self.__field_serial2 serial2=property(__getfield_serial2, __setfield_serial2, __delfield_serial2, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 2}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 23, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 2}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx4600_66, 'length': NUMEMAILS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_lgvx4600_66, 'length': NUMEMAILS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, None) def __getfield_url(self): return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,USTRING): self.__field_url=value else: self.__field_url=USTRING(value,**{'sizeinbytes': 72, 'raiseonunterminatedread': False}) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 2}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "ringtone index for a call") def __getfield_secret(self): return self.__field_secret.getvalue() def __setfield_secret(self, value): if isinstance(value,BOOL): self.__field_secret=value else: self.__field_secret=BOOL(value,**{'sizeinbytes': 1}) def __delfield_secret(self): del self.__field_secret secret=property(__getfield_secret, __setfield_secret, __delfield_secret, None) def __getfield_memo(self): return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,USTRING): self.__field_memo=value else: self.__field_memo=USTRING(value,**{'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 2}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_numbertypes(self): try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx4600_73, 'length': NUMPHONENUMBERS}) return self.__field_numbertypes.getvalue() def __setfield_numbertypes(self, value): if isinstance(value,LIST): self.__field_numbertypes=value else: self.__field_numbertypes=LIST(value,**{'elementclass': _gen_p_lgvx4600_73, 'length': NUMPHONENUMBERS}) def __delfield_numbertypes(self): del self.__field_numbertypes numbertypes=property(__getfield_numbertypes, __setfield_numbertypes, __delfield_numbertypes, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx4600_75, 'length': NUMPHONENUMBERS}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'elementclass': _gen_p_lgvx4600_75, 'length': NUMPHONENUMBERS}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_unknown20c(self): try: self.__field_unknown20c except: self.__field_unknown20c=UNKNOWN() return self.__field_unknown20c.getvalue() def __setfield_unknown20c(self, value): if isinstance(value,UNKNOWN): self.__field_unknown20c=value else: self.__field_unknown20c=UNKNOWN(value,) def __delfield_unknown20c(self): del self.__field_unknown20c unknown20c=property(__getfield_unknown20c, __setfield_unknown20c, __delfield_unknown20c, None) def iscontainer(self): return True def containerelements(self): yield ('serial1', self.__field_serial1, None) yield ('entrysize', self.__field_entrysize, None) yield ('serial2', self.__field_serial2, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('name', self.__field_name, None) yield ('group', self.__field_group, None) yield ('emails', self.__field_emails, None) yield ('url', self.__field_url, None) yield ('ringtone', self.__field_ringtone, "ringtone index for a call") yield ('secret', self.__field_secret, None) yield ('memo', self.__field_memo, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('numbertypes', self.__field_numbertypes, None) yield ('numbers', self.__field_numbers, None) yield ('unknown20c', self.__field_unknown20c, None) class _gen_p_lgvx4600_66(BaseProtogenClass): 'Anonymous inner class' __fields=['email'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx4600_66,self).__init__(**dict) if self.__class__ is _gen_p_lgvx4600_66: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx4600_66,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx4600_66,kwargs) if len(args): dict2={'sizeinbytes': 73, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_email=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_email.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_email=USTRING(**{'sizeinbytes': 73, 'raiseonunterminatedread': False}) self.__field_email.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 73, 'raiseonunterminatedread': False}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def iscontainer(self): return True def containerelements(self): yield ('email', self.__field_email, None) class _gen_p_lgvx4600_73(BaseProtogenClass): 'Anonymous inner class' __fields=['numbertype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx4600_73,self).__init__(**dict) if self.__class__ is _gen_p_lgvx4600_73: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx4600_73,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx4600_73,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_numbertype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numbertype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numbertype=UINT(**{'sizeinbytes': 1}) self.__field_numbertype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numbertype(self): return self.__field_numbertype.getvalue() def __setfield_numbertype(self, value): if isinstance(value,UINT): self.__field_numbertype=value else: self.__field_numbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_numbertype(self): del self.__field_numbertype numbertype=property(__getfield_numbertype, __setfield_numbertype, __delfield_numbertype, None) def iscontainer(self): return True def containerelements(self): yield ('numbertype', self.__field_numbertype, None) class _gen_p_lgvx4600_75(BaseProtogenClass): 'Anonymous inner class' __fields=['number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx4600_75,self).__init__(**dict) if self.__class__ is _gen_p_lgvx4600_75: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx4600_75,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx4600_75,kwargs) if len(args): dict2={'sizeinbytes': 33, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_number=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=USTRING(**{'sizeinbytes': 33, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 33, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) class pbreadentryresponse(BaseProtogenClass): "Results of reading one entry" __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbreadentryresponse,self).__init__(**dict) if self.__class__ is pbreadentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbreadentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbreadentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbupdateentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbupdateentryrequest,self).__init__(**dict) if self.__class__ is pbupdateentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbupdateentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbupdateentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x04, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbappendentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbappendentryrequest,self).__init__(**dict) if self.__class__ is pbappendentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbappendentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbappendentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x03, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) bitpim-1.0.7+dfsg1/src/phones/p_lgvx4650.py0000644001616600161660000050606410466234100016431 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VX4650""" from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx4400 except as noted # below from p_lgvx4400 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMPHONEBOOKENTRIES=500 pb_file_name='pim/pbentry.dat' # Calendar parameters NUMCALENDARENTRIES=300 CAL_REP_NONE=0x10 CAL_REP_DAILY=0x11 CAL_REP_MONFRI=0x12 CAL_REP_WEEKLY=0x13 CAL_REP_MONTHLY=0x14 CAL_REP_YEARLY=0x15 CAL_DOW_SUN=0x0800 CAL_DOW_MON=0x0400 CAL_DOW_TUE=0x0200 CAL_DOW_WED=0x0100 CAL_DOW_THU=0x0080 CAL_DOW_FRI=0x0040 CAL_DOW_SAT=0x0020 CAL_DOW_EXCEPTIONS=0x0010 CAL_REMINDER_NONE=0 CAL_REMINDER_ONTIME=1 CAL_REMINDER_5MIN=2 CAL_REMINDER_10MIN=3 CAL_REMINDER_1HOUR=4 CAL_REMINDER_1DAY=5 CAL_REMINDER_2DAYS=6 CAL_NO_VOICE=0xffff CAL_REPEAT_DATE=(2100, 12, 31) cal_dir='sch' cal_voice_ext='.qcp' # full name='sche000.qcp' cal_data_file_name='sch/schedule.dat' cal_exception_file_name='sch/schexception.dat' cal_voice_id_ofs=0x0f cal_has_voice_id=True # Text Memo const text_memo_file='sch/memo.dat' # Call History const incoming_call_file='pim/incoming_log.dat' outgoing_call_file='pim/outgoing_log.dat' missed_call_file='pim/missed_log.dat' # SMS const sms_dir='sms' sms_ext='.dat' sms_inbox_prefix='sms/inbox' sms_inbox_name_len=len(sms_inbox_prefix)+3+len(sms_ext) sms_saved_prefix='sms/sf' sms_saved_name_len=len(sms_saved_prefix)+2+len(sms_ext) sms_outbox_prefix='sms/outbox' sms_outbox_name_len=len(sms_outbox_prefix)+3+len(sms_ext) sms_canned_file='sms/mediacan000.dat' SMS_CANNED_MAX_ITEMS=18 PHONE_ENCODING='iso8859_1' class firmwarerequest(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(firmwarerequest,self).__init__(**dict) if self.__class__ is firmwarerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(firmwarerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(firmwarerequest,kwargs) if len(args): dict2={'sizeinbytes': 1, 'constant': 0x00} dict2.update(kwargs) kwargs=dict2 self.__field_command=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1, 'constant': 0x00}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class firmwareresponse(BaseProtogenClass): __fields=['command', 'date1', 'time1', 'date2', 'time2', 'firmwareversion', 'dunno'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(firmwareresponse,self).__init__(**dict) if self.__class__ is firmwareresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(firmwareresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(firmwareresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_date1.writetobuffer(buf) self.__field_time1.writetobuffer(buf) self.__field_date2.writetobuffer(buf) self.__field_time2.writetobuffer(buf) self.__field_firmwareversion.writetobuffer(buf) self.__field_dunno.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_date1=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date1.readfrombuffer(buf) self.__field_time1=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time1.readfrombuffer(buf) self.__field_date2=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date2.readfrombuffer(buf) self.__field_time2=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time2.readfrombuffer(buf) self.__field_firmwareversion=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_firmwareversion.readfrombuffer(buf) self.__field_dunno=DATA() self.__field_dunno.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_date1(self): return self.__field_date1.getvalue() def __setfield_date1(self, value): if isinstance(value,USTRING): self.__field_date1=value else: self.__field_date1=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date1(self): del self.__field_date1 date1=property(__getfield_date1, __setfield_date1, __delfield_date1, None) def __getfield_time1(self): return self.__field_time1.getvalue() def __setfield_time1(self, value): if isinstance(value,USTRING): self.__field_time1=value else: self.__field_time1=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time1(self): del self.__field_time1 time1=property(__getfield_time1, __setfield_time1, __delfield_time1, None) def __getfield_date2(self): return self.__field_date2.getvalue() def __setfield_date2(self, value): if isinstance(value,USTRING): self.__field_date2=value else: self.__field_date2=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date2(self): del self.__field_date2 date2=property(__getfield_date2, __setfield_date2, __delfield_date2, None) def __getfield_time2(self): return self.__field_time2.getvalue() def __setfield_time2(self, value): if isinstance(value,USTRING): self.__field_time2=value else: self.__field_time2=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time2(self): del self.__field_time2 time2=property(__getfield_time2, __setfield_time2, __delfield_time2, None) def __getfield_firmwareversion(self): return self.__field_firmwareversion.getvalue() def __setfield_firmwareversion(self, value): if isinstance(value,USTRING): self.__field_firmwareversion=value else: self.__field_firmwareversion=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_firmwareversion(self): del self.__field_firmwareversion firmwareversion=property(__getfield_firmwareversion, __setfield_firmwareversion, __delfield_firmwareversion, None) def __getfield_dunno(self): return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,DATA): self.__field_dunno=value else: self.__field_dunno=DATA(value,) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('date1', self.__field_date1, None) yield ('time1', self.__field_time1, None) yield ('date2', self.__field_date2, None) yield ('time2', self.__field_time2, None) yield ('firmwareversion', self.__field_firmwareversion, None) yield ('dunno', self.__field_dunno, None) class speeddial(BaseProtogenClass): __fields=['entry', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddial,self).__init__(**dict) if self.__class__ is speeddial: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddial,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddial,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xff}) self.__field_entry.writetobuffer(buf) try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xff}) self.__field_entry.readfrombuffer(buf) self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xff}) return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,UINT): self.__field_entry=value else: self.__field_entry=UINT(value,**{'sizeinbytes': 2, 'default': 0xff}) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_number(self): try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,UINT): self.__field_number=value else: self.__field_number=UINT(value,**{'sizeinbytes': 1, 'default': 0xff}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('entry', self.__field_entry, None) yield ('number', self.__field_number, None) class speeddials(BaseProtogenClass): __fields=['speeddials'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddials,self).__init__(**dict) if self.__class__ is speeddials: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddials,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddials,kwargs) if len(args): dict2={'length': NUMSPEEDDIALS, 'elementclass': speeddial} dict2.update(kwargs) kwargs=dict2 self.__field_speeddials=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_speeddials(self): try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) return self.__field_speeddials.getvalue() def __setfield_speeddials(self, value): if isinstance(value,LIST): self.__field_speeddials=value else: self.__field_speeddials=LIST(value,**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) def __delfield_speeddials(self): del self.__field_speeddials speeddials=property(__getfield_speeddials, __setfield_speeddials, __delfield_speeddials, None) def iscontainer(self): return True def containerelements(self): yield ('speeddials', self.__field_speeddials, None) class pbreadentryresponse(BaseProtogenClass): "Results of reading one entry" __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbreadentryresponse,self).__init__(**dict) if self.__class__ is pbreadentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbreadentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbreadentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbupdateentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbupdateentryrequest,self).__init__(**dict) if self.__class__ is pbupdateentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbupdateentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbupdateentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x04, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbappendentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbappendentryrequest,self).__init__(**dict) if self.__class__ is pbappendentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbappendentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbappendentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x03, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbentry(BaseProtogenClass): __fields=['serial1', 'entrysize', 'serial2', 'entrynumber', 'name', 'group', 'emails', 'url', 'ringtone', 'msgringtone', 'secret', 'memo', 'wallpaper', 'numbertypes', 'numbers', 'unknown20c'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_serial1.writetobuffer(buf) try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x0202}) self.__field_entrysize.writetobuffer(buf) self.__field_serial2.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_group.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx4650_132, 'length': NUMEMAILS}) self.__field_emails.writetobuffer(buf) self.__field_url.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_msgringtone.writetobuffer(buf) self.__field_secret.writetobuffer(buf) self.__field_memo.writetobuffer(buf) self.__field_wallpaper.writetobuffer(buf) try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx4650_140, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx4650_142, 'length': NUMPHONENUMBERS}) self.__field_numbers.writetobuffer(buf) try: self.__field_unknown20c except: self.__field_unknown20c=UNKNOWN() self.__field_unknown20c.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x0202}) self.__field_entrysize.readfrombuffer(buf) self.__field_serial2=UINT(**{'sizeinbytes': 4}) self.__field_serial2.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 2}) self.__field_entrynumber.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 2}) self.__field_group.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx4650_132, 'length': NUMEMAILS}) self.__field_emails.readfrombuffer(buf) self.__field_url=USTRING(**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_url.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_msgringtone=UINT(**{'sizeinbytes': 1}) self.__field_msgringtone.readfrombuffer(buf) self.__field_secret=BOOL(**{'sizeinbytes': 1}) self.__field_secret.readfrombuffer(buf) self.__field_memo=USTRING(**{'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) self.__field_memo.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 1}) self.__field_wallpaper.readfrombuffer(buf) self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx4650_140, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.readfrombuffer(buf) self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx4650_142, 'length': NUMPHONENUMBERS}) self.__field_numbers.readfrombuffer(buf) self.__field_unknown20c=UNKNOWN() self.__field_unknown20c.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_entrysize(self): try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x0202}) return self.__field_entrysize.getvalue() def __setfield_entrysize(self, value): if isinstance(value,UINT): self.__field_entrysize=value else: self.__field_entrysize=UINT(value,**{'sizeinbytes': 2, 'constant': 0x0202}) def __delfield_entrysize(self): del self.__field_entrysize entrysize=property(__getfield_entrysize, __setfield_entrysize, __delfield_entrysize, None) def __getfield_serial2(self): return self.__field_serial2.getvalue() def __setfield_serial2(self, value): if isinstance(value,UINT): self.__field_serial2=value else: self.__field_serial2=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial2(self): del self.__field_serial2 serial2=property(__getfield_serial2, __setfield_serial2, __delfield_serial2, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 2}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 2}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx4650_132, 'length': NUMEMAILS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_lgvx4650_132, 'length': NUMEMAILS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, None) def __getfield_url(self): return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,USTRING): self.__field_url=value else: self.__field_url=USTRING(value,**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "ringtone index for a call") def __getfield_msgringtone(self): return self.__field_msgringtone.getvalue() def __setfield_msgringtone(self, value): if isinstance(value,UINT): self.__field_msgringtone=value else: self.__field_msgringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_msgringtone(self): del self.__field_msgringtone msgringtone=property(__getfield_msgringtone, __setfield_msgringtone, __delfield_msgringtone, "ringtone index for a text message") def __getfield_secret(self): return self.__field_secret.getvalue() def __setfield_secret(self, value): if isinstance(value,BOOL): self.__field_secret=value else: self.__field_secret=BOOL(value,**{'sizeinbytes': 1}) def __delfield_secret(self): del self.__field_secret secret=property(__getfield_secret, __setfield_secret, __delfield_secret, None) def __getfield_memo(self): return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,USTRING): self.__field_memo=value else: self.__field_memo=USTRING(value,**{'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 1}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_numbertypes(self): try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx4650_140, 'length': NUMPHONENUMBERS}) return self.__field_numbertypes.getvalue() def __setfield_numbertypes(self, value): if isinstance(value,LIST): self.__field_numbertypes=value else: self.__field_numbertypes=LIST(value,**{'elementclass': _gen_p_lgvx4650_140, 'length': NUMPHONENUMBERS}) def __delfield_numbertypes(self): del self.__field_numbertypes numbertypes=property(__getfield_numbertypes, __setfield_numbertypes, __delfield_numbertypes, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx4650_142, 'length': NUMPHONENUMBERS}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'elementclass': _gen_p_lgvx4650_142, 'length': NUMPHONENUMBERS}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_unknown20c(self): try: self.__field_unknown20c except: self.__field_unknown20c=UNKNOWN() return self.__field_unknown20c.getvalue() def __setfield_unknown20c(self, value): if isinstance(value,UNKNOWN): self.__field_unknown20c=value else: self.__field_unknown20c=UNKNOWN(value,) def __delfield_unknown20c(self): del self.__field_unknown20c unknown20c=property(__getfield_unknown20c, __setfield_unknown20c, __delfield_unknown20c, None) def iscontainer(self): return True def containerelements(self): yield ('serial1', self.__field_serial1, None) yield ('entrysize', self.__field_entrysize, None) yield ('serial2', self.__field_serial2, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('name', self.__field_name, None) yield ('group', self.__field_group, None) yield ('emails', self.__field_emails, None) yield ('url', self.__field_url, None) yield ('ringtone', self.__field_ringtone, "ringtone index for a call") yield ('msgringtone', self.__field_msgringtone, "ringtone index for a text message") yield ('secret', self.__field_secret, None) yield ('memo', self.__field_memo, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('numbertypes', self.__field_numbertypes, None) yield ('numbers', self.__field_numbers, None) yield ('unknown20c', self.__field_unknown20c, None) class _gen_p_lgvx4650_132(BaseProtogenClass): 'Anonymous inner class' __fields=['email'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx4650_132,self).__init__(**dict) if self.__class__ is _gen_p_lgvx4650_132: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx4650_132,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx4650_132,kwargs) if len(args): dict2={'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_email=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_email.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_email=USTRING(**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_email.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def iscontainer(self): return True def containerelements(self): yield ('email', self.__field_email, None) class _gen_p_lgvx4650_140(BaseProtogenClass): 'Anonymous inner class' __fields=['numbertype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx4650_140,self).__init__(**dict) if self.__class__ is _gen_p_lgvx4650_140: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx4650_140,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx4650_140,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_numbertype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numbertype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numbertype=UINT(**{'sizeinbytes': 1}) self.__field_numbertype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numbertype(self): return self.__field_numbertype.getvalue() def __setfield_numbertype(self, value): if isinstance(value,UINT): self.__field_numbertype=value else: self.__field_numbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_numbertype(self): del self.__field_numbertype numbertype=property(__getfield_numbertype, __setfield_numbertype, __delfield_numbertype, None) def iscontainer(self): return True def containerelements(self): yield ('numbertype', self.__field_numbertype, None) class _gen_p_lgvx4650_142(BaseProtogenClass): 'Anonymous inner class' __fields=['number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx4650_142,self).__init__(**dict) if self.__class__ is _gen_p_lgvx4650_142: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx4650_142,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx4650_142,kwargs) if len(args): dict2={'sizeinbytes': 49, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_number=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) class pbfileentry(BaseProtogenClass): __fields=['serial1', 'data1', 'group', 'data2', 'wallpaper', 'data3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbfileentry,self).__init__(**dict) if self.__class__ is pbfileentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbfileentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbfileentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_serial1.writetobuffer(buf) self.__field_data1.writetobuffer(buf) self.__field_group.writetobuffer(buf) self.__field_data2.writetobuffer(buf) self.__field_wallpaper.writetobuffer(buf) self.__field_data3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_data1=UNKNOWN(**{'sizeinbytes': 25}) self.__field_data1.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 2}) self.__field_group.readfrombuffer(buf) self.__field_data2=UNKNOWN(**{'sizeinbytes': 232}) self.__field_data2.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 1}) self.__field_wallpaper.readfrombuffer(buf) self.__field_data3=UNKNOWN(**{'sizeinbytes': 15}) self.__field_data3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_data1(self): return self.__field_data1.getvalue() def __setfield_data1(self, value): if isinstance(value,UNKNOWN): self.__field_data1=value else: self.__field_data1=UNKNOWN(value,**{'sizeinbytes': 25}) def __delfield_data1(self): del self.__field_data1 data1=property(__getfield_data1, __setfield_data1, __delfield_data1, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 2}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_data2(self): return self.__field_data2.getvalue() def __setfield_data2(self, value): if isinstance(value,UNKNOWN): self.__field_data2=value else: self.__field_data2=UNKNOWN(value,**{'sizeinbytes': 232}) def __delfield_data2(self): del self.__field_data2 data2=property(__getfield_data2, __setfield_data2, __delfield_data2, None) def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 1}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_data3(self): return self.__field_data3.getvalue() def __setfield_data3(self, value): if isinstance(value,UNKNOWN): self.__field_data3=value else: self.__field_data3=UNKNOWN(value,**{'sizeinbytes': 15}) def __delfield_data3(self): del self.__field_data3 data3=property(__getfield_data3, __setfield_data3, __delfield_data3, None) def iscontainer(self): return True def containerelements(self): yield ('serial1', self.__field_serial1, None) yield ('data1', self.__field_data1, None) yield ('group', self.__field_group, None) yield ('data2', self.__field_data2, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('data3', self.__field_data3, None) class pbfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbfile,self).__init__(**dict) if self.__class__ is pbfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbfile,kwargs) if len(args): dict2={ 'elementclass': pbfileentry } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': pbfileentry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': pbfileentry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class indexentry(BaseProtogenClass): __fields=['index', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_index.writetobuffer(buf) try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 45, 'default': ""}) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_index.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 45, 'default': ""}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 45, 'default': ""}) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 45, 'default': ""}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('name', self.__field_name, None) class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['maxitems', 'numactiveitems', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_maxitems except: self.__field_maxitems=UINT(**{'constant': 30}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{'length': self.maxitems, 'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_items=LIST(**{'length': self.maxitems, 'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_maxitems(self): return self.__field_maxitems.getvalue() def __setfield_maxitems(self, value): if isinstance(value,UINT): self.__field_maxitems=value else: self.__field_maxitems=UINT(value,**{'constant': 30}) def __delfield_maxitems(self): del self.__field_maxitems maxitems=property(__getfield_maxitems, __setfield_maxitems, __delfield_maxitems, None) def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'length': self.maxitems, 'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'length': self.maxitems, 'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('maxitems', self.__field_maxitems, None) yield ('numactiveitems', self.__field_numactiveitems, None) yield ('items', self.__field_items, None) class scheduleexception(BaseProtogenClass): __fields=['pos', 'day', 'month', 'year'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexception,self).__init__(**dict) if self.__class__ is scheduleexception: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexception,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexception,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_day.writetobuffer(buf) self.__field_month.writetobuffer(buf) self.__field_year.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_day=UINT(**{'sizeinbytes': 1}) self.__field_day.readfrombuffer(buf) self.__field_month=UINT(**{'sizeinbytes': 1}) self.__field_month.readfrombuffer(buf) self.__field_year=UINT(**{'sizeinbytes': 2}) self.__field_year.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "Refers to event id (position in schedule file) that this suppresses") def __getfield_day(self): return self.__field_day.getvalue() def __setfield_day(self, value): if isinstance(value,UINT): self.__field_day=value else: self.__field_day=UINT(value,**{'sizeinbytes': 1}) def __delfield_day(self): del self.__field_day day=property(__getfield_day, __setfield_day, __delfield_day, None) def __getfield_month(self): return self.__field_month.getvalue() def __setfield_month(self, value): if isinstance(value,UINT): self.__field_month=value else: self.__field_month=UINT(value,**{'sizeinbytes': 1}) def __delfield_month(self): del self.__field_month month=property(__getfield_month, __setfield_month, __delfield_month, None) def __getfield_year(self): return self.__field_year.getvalue() def __setfield_year(self, value): if isinstance(value,UINT): self.__field_year=value else: self.__field_year=UINT(value,**{'sizeinbytes': 2}) def __delfield_year(self): del self.__field_year year=property(__getfield_year, __setfield_year, __delfield_year, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "Refers to event id (position in schedule file) that this suppresses") yield ('day', self.__field_day, None) yield ('month', self.__field_month, None) yield ('year', self.__field_year, None) class scheduleexceptionfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexceptionfile,self).__init__(**dict) if self.__class__ is scheduleexceptionfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexceptionfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexceptionfile,kwargs) if len(args): dict2={'elementclass': scheduleexception} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': scheduleexception}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class scheduleevent(BaseProtogenClass): __fields=['pos', 'pad1', 'start', 'end', 'repeat', 'daybitmap', 'pad2', 'alarmminutes', 'alarmhours', 'alarmtype', 'snoozedelay', 'ringtone', 'description', 'hasvoice', 'voiceid'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleevent,self).__init__(**dict) if self.__class__ is scheduleevent: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleevent,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleevent,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_pad1.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) self.__field_daybitmap.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad2.writetobuffer(buf) self.__field_alarmminutes.writetobuffer(buf) self.__field_alarmhours.writetobuffer(buf) self.__field_alarmtype.writetobuffer(buf) try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_description.writetobuffer(buf) self.__field_hasvoice.writetobuffer(buf) self.__field_voiceid.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_pad1=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_pad1.readfrombuffer(buf) self.__field_start=LGCALDATE(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=LGCALDATE(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_repeat=UINT(**{'sizeinbytes': 1}) self.__field_repeat.readfrombuffer(buf) self.__field_daybitmap=UINT(**{'sizeinbytes': 2}) self.__field_daybitmap.readfrombuffer(buf) self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad2.readfrombuffer(buf) self.__field_alarmminutes=UINT(**{'sizeinbytes': 1}) self.__field_alarmminutes.readfrombuffer(buf) self.__field_alarmhours=UINT(**{'sizeinbytes': 1}) self.__field_alarmhours.readfrombuffer(buf) self.__field_alarmtype=UINT(**{'sizeinbytes': 1}) self.__field_alarmtype.readfrombuffer(buf) self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_description=USTRING(**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_description.readfrombuffer(buf) self.__field_hasvoice=UINT(**{'sizeinbytes': 1}) self.__field_hasvoice.readfrombuffer(buf) self.__field_voiceid=UINT(**{'sizeinbytes': 2}) self.__field_voiceid.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "position within file, used as an event id") def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UINT(**{'sizeinbytes': 4, 'default': 0 }) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UINT): self.__field_pad1=value else: self.__field_pad1=UINT(value,**{'sizeinbytes': 4, 'default': 0 }) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,LGCALDATE): self.__field_start=value else: self.__field_start=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,LGCALDATE): self.__field_end=value else: self.__field_end=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,UINT): self.__field_repeat=value else: self.__field_repeat=UINT(value,**{'sizeinbytes': 1}) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_daybitmap(self): return self.__field_daybitmap.getvalue() def __setfield_daybitmap(self, value): if isinstance(value,UINT): self.__field_daybitmap=value else: self.__field_daybitmap=UINT(value,**{'sizeinbytes': 2}) def __delfield_daybitmap(self): del self.__field_daybitmap daybitmap=property(__getfield_daybitmap, __setfield_daybitmap, __delfield_daybitmap, "which days a weekly repeat event happens on") def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UINT): self.__field_pad2=value else: self.__field_pad2=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_alarmminutes(self): return self.__field_alarmminutes.getvalue() def __setfield_alarmminutes(self, value): if isinstance(value,UINT): self.__field_alarmminutes=value else: self.__field_alarmminutes=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmminutes(self): del self.__field_alarmminutes alarmminutes=property(__getfield_alarmminutes, __setfield_alarmminutes, __delfield_alarmminutes, "a value of 100 indicates not set") def __getfield_alarmhours(self): return self.__field_alarmhours.getvalue() def __setfield_alarmhours(self, value): if isinstance(value,UINT): self.__field_alarmhours=value else: self.__field_alarmhours=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmhours(self): del self.__field_alarmhours alarmhours=property(__getfield_alarmhours, __setfield_alarmhours, __delfield_alarmhours, "a value of 100 indicates not set") def __getfield_alarmtype(self): return self.__field_alarmtype.getvalue() def __setfield_alarmtype(self, value): if isinstance(value,UINT): self.__field_alarmtype=value else: self.__field_alarmtype=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmtype(self): del self.__field_alarmtype alarmtype=property(__getfield_alarmtype, __setfield_alarmtype, __delfield_alarmtype, "preset alarm reminder type") def __getfield_snoozedelay(self): try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_snoozedelay.getvalue() def __setfield_snoozedelay(self, value): if isinstance(value,UINT): self.__field_snoozedelay=value else: self.__field_snoozedelay=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_snoozedelay(self): del self.__field_snoozedelay snoozedelay=property(__getfield_snoozedelay, __setfield_snoozedelay, __delfield_snoozedelay, "in minutes, not for this phone") def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_description(self): return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,USTRING): self.__field_description=value else: self.__field_description=USTRING(value,**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def __getfield_hasvoice(self): return self.__field_hasvoice.getvalue() def __setfield_hasvoice(self, value): if isinstance(value,UINT): self.__field_hasvoice=value else: self.__field_hasvoice=UINT(value,**{'sizeinbytes': 1}) def __delfield_hasvoice(self): del self.__field_hasvoice hasvoice=property(__getfield_hasvoice, __setfield_hasvoice, __delfield_hasvoice, None) def __getfield_voiceid(self): return self.__field_voiceid.getvalue() def __setfield_voiceid(self, value): if isinstance(value,UINT): self.__field_voiceid=value else: self.__field_voiceid=UINT(value,**{'sizeinbytes': 2}) def __delfield_voiceid(self): del self.__field_voiceid voiceid=property(__getfield_voiceid, __setfield_voiceid, __delfield_voiceid, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "position within file, used as an event id") yield ('pad1', self.__field_pad1, None) yield ('start', self.__field_start, None) yield ('end', self.__field_end, None) yield ('repeat', self.__field_repeat, None) yield ('daybitmap', self.__field_daybitmap, "which days a weekly repeat event happens on") yield ('pad2', self.__field_pad2, None) yield ('alarmminutes', self.__field_alarmminutes, "a value of 100 indicates not set") yield ('alarmhours', self.__field_alarmhours, "a value of 100 indicates not set") yield ('alarmtype', self.__field_alarmtype, "preset alarm reminder type") yield ('snoozedelay', self.__field_snoozedelay, "in minutes, not for this phone") yield ('ringtone', self.__field_ringtone, None) yield ('description', self.__field_description, None) yield ('hasvoice', self.__field_hasvoice, None) yield ('voiceid', self.__field_voiceid, None) class schedulefile(BaseProtogenClass): __fields=['numactiveitems', 'events'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(schedulefile,self).__init__(**dict) if self.__class__ is schedulefile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(schedulefile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(schedulefile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{'elementclass': scheduleevent}) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('events', self.__field_events, None) class textmemo(BaseProtogenClass): __fields=['text'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemo,self).__init__(**dict) if self.__class__ is textmemo: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemo,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemo,kwargs) if len(args): dict2={'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } dict2.update(kwargs) kwargs=dict2 self.__field_text=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_text.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_text=USTRING(**{'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_text.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,USTRING): self.__field_text=value else: self.__field_text=USTRING(value,**{'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def iscontainer(self): return True def containerelements(self): yield ('text', self.__field_text, None) class textmemofile(BaseProtogenClass): __fields=['itemcount', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemofile,self).__init__(**dict) if self.__class__ is textmemofile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemofile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemofile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_itemcount.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_itemcount=UINT(**{'sizeinbytes': 4}) self.__field_itemcount.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_itemcount(self): return self.__field_itemcount.getvalue() def __setfield_itemcount(self, value): if isinstance(value,UINT): self.__field_itemcount=value else: self.__field_itemcount=UINT(value,**{'sizeinbytes': 4}) def __delfield_itemcount(self): del self.__field_itemcount itemcount=property(__getfield_itemcount, __setfield_itemcount, __delfield_itemcount, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': textmemo }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('itemcount', self.__field_itemcount, None) yield ('items', self.__field_items, None) class callentry(BaseProtogenClass): __fields=['datetime', 'pad1', 'duration', 'number', 'name', 'pad2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callentry,self).__init__(**dict) if self.__class__ is callentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_datetime.writetobuffer(buf) self.__field_pad1.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_pad2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_datetime=GPSDATE(**{'sizeinbytes': 4}) self.__field_datetime.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 4}) self.__field_pad1.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False }) self.__field_number.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False }) self.__field_name.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 60}) self.__field_pad2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,GPSDATE): self.__field_datetime=value else: self.__field_datetime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def __getfield_pad1(self): return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 4}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False }) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_pad2(self): return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 60}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def iscontainer(self): return True def containerelements(self): yield ('datetime', self.__field_datetime, None) yield ('pad1', self.__field_pad1, None) yield ('duration', self.__field_duration, None) yield ('number', self.__field_number, None) yield ('name', self.__field_name, None) yield ('pad2', self.__field_pad2, None) class callhistoryfile(BaseProtogenClass): __fields=['itemcount', 'pad1', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callhistoryfile,self).__init__(**dict) if self.__class__ is callhistoryfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callhistoryfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callhistoryfile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_itemcount.writetobuffer(buf) self.__field_pad1.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': callentry }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_itemcount=UINT(**{'sizeinbytes': 4}) self.__field_itemcount.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': callentry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_itemcount(self): return self.__field_itemcount.getvalue() def __setfield_itemcount(self, value): if isinstance(value,UINT): self.__field_itemcount=value else: self.__field_itemcount=UINT(value,**{'sizeinbytes': 4}) def __delfield_itemcount(self): del self.__field_itemcount itemcount=property(__getfield_itemcount, __setfield_itemcount, __delfield_itemcount, None) def __getfield_pad1(self): return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': callentry }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': callentry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('itemcount', self.__field_itemcount, None) yield ('pad1', self.__field_pad1, None) yield ('items', self.__field_items, None) class SMSCannedMsg(BaseProtogenClass): __fields=['text'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSCannedMsg,self).__init__(**dict) if self.__class__ is SMSCannedMsg: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSCannedMsg,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSCannedMsg,kwargs) if len(args): dict2={'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' } dict2.update(kwargs) kwargs=dict2 self.__field_text=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_text except: self.__field_text=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) self.__field_text.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_text=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) self.__field_text.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_text(self): try: self.__field_text except: self.__field_text=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,USTRING): self.__field_text=value else: self.__field_text=USTRING(value,**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def iscontainer(self): return True def containerelements(self): yield ('text', self.__field_text, None) class SMSCannedFile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSCannedFile,self).__init__(**dict) if self.__class__ is SMSCannedFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSCannedFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSCannedFile,kwargs) if len(args): dict2={ 'length': SMS_CANNED_MAX_ITEMS, 'elementclass': SMSCannedMsg } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'length': SMS_CANNED_MAX_ITEMS, 'elementclass': SMSCannedMsg }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'length': SMS_CANNED_MAX_ITEMS, 'elementclass': SMSCannedMsg }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'length': SMS_CANNED_MAX_ITEMS, 'elementclass': SMSCannedMsg }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'length': SMS_CANNED_MAX_ITEMS, 'elementclass': SMSCannedMsg }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class msg_record(BaseProtogenClass): __fields=['binary', 'unknown3', 'unknown4', 'unknown6', 'length', 'msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(msg_record,self).__init__(**dict) if self.__class__ is msg_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(msg_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(msg_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_binary.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_length.writetobuffer(buf) try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx4650_283, 'length': 220}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_binary=UINT(**{'sizeinbytes': 1}) self.__field_binary.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1}) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 1}) self.__field_unknown4.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 1}) self.__field_unknown6.readfrombuffer(buf) self.__field_length=UINT(**{'sizeinbytes': 1}) self.__field_length.readfrombuffer(buf) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx4650_283, 'length': 220}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_binary(self): return self.__field_binary.getvalue() def __setfield_binary(self, value): if isinstance(value,UINT): self.__field_binary=value else: self.__field_binary=UINT(value,**{'sizeinbytes': 1}) def __delfield_binary(self): del self.__field_binary binary=property(__getfield_binary, __setfield_binary, __delfield_binary, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_length(self): return self.__field_length.getvalue() def __setfield_length(self, value): if isinstance(value,UINT): self.__field_length=value else: self.__field_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_length(self): del self.__field_length length=property(__getfield_length, __setfield_length, __delfield_length, None) def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx4650_283, 'length': 220}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx4650_283, 'length': 220}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('binary', self.__field_binary, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) yield ('unknown6', self.__field_unknown6, None) yield ('length', self.__field_length, None) yield ('msg', self.__field_msg, None) class _gen_p_lgvx4650_283(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx4650_283,self).__init__(**dict) if self.__class__ is _gen_p_lgvx4650_283: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx4650_283,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx4650_283,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class recipient_record(BaseProtogenClass): __fields=['number', 'status', 'timesent', 'timereceived', 'unknown2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(recipient_record,self).__init__(**dict) if self.__class__ is recipient_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(recipient_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(recipient_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_timereceived.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=USTRING(**{'sizeinbytes': 49}) self.__field_number.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 2}) self.__field_status.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_timereceived=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timereceived.readfrombuffer(buf) self.__field_unknown2=UNKNOWN(**{'sizeinbytes': 49}) self.__field_unknown2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 2}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_timereceived(self): return self.__field_timereceived.getvalue() def __setfield_timereceived(self, value): if isinstance(value,LGCALDATE): self.__field_timereceived=value else: self.__field_timereceived=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timereceived(self): del self.__field_timereceived timereceived=property(__getfield_timereceived, __setfield_timereceived, __delfield_timereceived, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UNKNOWN): self.__field_unknown2=value else: self.__field_unknown2=UNKNOWN(value,**{'sizeinbytes': 49}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) yield ('status', self.__field_status, None) yield ('timesent', self.__field_timesent, None) yield ('timereceived', self.__field_timereceived, None) yield ('unknown2', self.__field_unknown2, None) class sms_saved(BaseProtogenClass): __fields=['outboxmsg', 'pad', 'outbox', 'inbox'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_saved,self).__init__(**dict) if self.__class__ is sms_saved: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_saved,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_saved,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_outboxmsg.writetobuffer(buf) self.__field_pad.writetobuffer(buf) if self.outboxmsg: self.__field_outbox.writetobuffer(buf) if not self.outboxmsg: self.__field_inbox.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_outboxmsg=UINT(**{'sizeinbytes': 4}) self.__field_outboxmsg.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 4}) self.__field_pad.readfrombuffer(buf) if self.outboxmsg: self.__field_outbox=sms_out() self.__field_outbox.readfrombuffer(buf) if not self.outboxmsg: self.__field_inbox=sms_in() self.__field_inbox.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_outboxmsg(self): return self.__field_outboxmsg.getvalue() def __setfield_outboxmsg(self, value): if isinstance(value,UINT): self.__field_outboxmsg=value else: self.__field_outboxmsg=UINT(value,**{'sizeinbytes': 4}) def __delfield_outboxmsg(self): del self.__field_outboxmsg outboxmsg=property(__getfield_outboxmsg, __setfield_outboxmsg, __delfield_outboxmsg, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 4}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_outbox(self): return self.__field_outbox.getvalue() def __setfield_outbox(self, value): if isinstance(value,sms_out): self.__field_outbox=value else: self.__field_outbox=sms_out(value,) def __delfield_outbox(self): del self.__field_outbox outbox=property(__getfield_outbox, __setfield_outbox, __delfield_outbox, None) def __getfield_inbox(self): return self.__field_inbox.getvalue() def __setfield_inbox(self, value): if isinstance(value,sms_in): self.__field_inbox=value else: self.__field_inbox=sms_in(value,) def __delfield_inbox(self): del self.__field_inbox inbox=property(__getfield_inbox, __setfield_inbox, __delfield_inbox, None) def iscontainer(self): return True def containerelements(self): yield ('outboxmsg', self.__field_outboxmsg, None) yield ('pad', self.__field_pad, None) if self.outboxmsg: yield ('outbox', self.__field_outbox, None) if not self.outboxmsg: yield ('inbox', self.__field_inbox, None) class sms_out(BaseProtogenClass): __fields=['index', 'locked', 'timesent', 'subject', 'num_msg_elements', 'messages', 'unknown1', 'priority', 'callback', 'recipients', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_out,self).__init__(**dict) if self.__class__ is sms_out: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_out,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_out,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) self.__field_messages.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_callback.writetobuffer(buf) try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) self.__field_recipients.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21}) self.__field_subject.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 2}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) self.__field_messages.readfrombuffer(buf) self.__field_unknown1=UNKNOWN(**{'sizeinbytes': 15}) self.__field_unknown1.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 35}) self.__field_callback.readfrombuffer(buf) self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) self.__field_recipients.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 2}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_messages(self): try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) return self.__field_messages.getvalue() def __setfield_messages(self, value): if isinstance(value,LIST): self.__field_messages=value else: self.__field_messages=LIST(value,**{'elementclass': msg_record, 'length': 7}) def __delfield_messages(self): del self.__field_messages messages=property(__getfield_messages, __setfield_messages, __delfield_messages, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UNKNOWN): self.__field_unknown1=value else: self.__field_unknown1=UNKNOWN(value,**{'sizeinbytes': 15}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 35}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_recipients(self): try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) return self.__field_recipients.getvalue() def __setfield_recipients(self, value): if isinstance(value,LIST): self.__field_recipients=value else: self.__field_recipients=LIST(value,**{'elementclass': recipient_record,'length': 9}) def __delfield_recipients(self): del self.__field_recipients recipients=property(__getfield_recipients, __setfield_recipients, __delfield_recipients, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('locked', self.__field_locked, None) yield ('timesent', self.__field_timesent, None) yield ('subject', self.__field_subject, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('messages', self.__field_messages, None) yield ('unknown1', self.__field_unknown1, None) yield ('priority', self.__field_priority, None) yield ('callback', self.__field_callback, None) yield ('recipients', self.__field_recipients, None) yield ('pad', self.__field_pad, None) class SMSINBOXMSGFRAGMENT(BaseProtogenClass): __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSINBOXMSGFRAGMENT,self).__init__(**dict) if self.__class__ is SMSINBOXMSGFRAGMENT: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSINBOXMSGFRAGMENT,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSINBOXMSGFRAGMENT,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx4650_315, 'length': 181} dict2.update(kwargs) kwargs=dict2 self.__field_msg=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx4650_315, 'length': 181}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx4650_315, 'length': 181}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx4650_315, 'length': 181}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx4650_315, 'length': 181}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class _gen_p_lgvx4650_315(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx4650_315,self).__init__(**dict) if self.__class__ is _gen_p_lgvx4650_315: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx4650_315,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx4650_315,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class sms_in(BaseProtogenClass): __fields=['unknown1', 'timesent', 'unknown2', 'callback_length', 'callback', 'sender_length', 'sender', 'unknown3', 'lg_time', 'unknown4', 'GPStime', 'unknown5', 'read', 'locked', 'unknown6', 'priority', 'subject', 'bin_header1', 'bin_header2', 'unknown7', 'multipartID', 'bin_header3', 'num_msg_elements', 'msglengths', 'unknown8', 'msgs', 'unknown9'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_in,self).__init__(**dict) if self.__class__ is sms_in: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_in,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_in,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_callback_length.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_sender_length.writetobuffer(buf) try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx4650_325, 'length': 38}) self.__field_sender.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_lg_time.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_bin_header1.writetobuffer(buf) self.__field_bin_header2.writetobuffer(buf) self.__field_unknown7.writetobuffer(buf) self.__field_multipartID.writetobuffer(buf) self.__field_bin_header3.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx4650_343, 'length': 10}) self.__field_msglengths.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.writetobuffer(buf) self.__field_unknown9.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UNKNOWN(**{'sizeinbytes': 14}) self.__field_unknown1.readfrombuffer(buf) self.__field_timesent=SMSDATE(**{'sizeinbytes': 6}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 3}) self.__field_unknown2.readfrombuffer(buf) self.__field_callback_length=UINT(**{'sizeinbytes': 1}) self.__field_callback_length.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 38}) self.__field_callback.readfrombuffer(buf) self.__field_sender_length=UINT(**{'sizeinbytes': 1}) self.__field_sender_length.readfrombuffer(buf) self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx4650_325, 'length': 38}) self.__field_sender.readfrombuffer(buf) self.__field_unknown3=DATA(**{'sizeinbytes': 12}) self.__field_unknown3.readfrombuffer(buf) self.__field_lg_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_lg_time.readfrombuffer(buf) self.__field_unknown4=UNKNOWN(**{'sizeinbytes': 3}) self.__field_unknown4.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 2}) self.__field_unknown5.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 1}) self.__field_read.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 8}) self.__field_unknown6.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_bin_header1=UINT(**{'sizeinbytes': 1}) self.__field_bin_header1.readfrombuffer(buf) self.__field_bin_header2=UINT(**{'sizeinbytes': 1}) self.__field_bin_header2.readfrombuffer(buf) self.__field_unknown7=UINT(**{'sizeinbytes': 2}) self.__field_unknown7.readfrombuffer(buf) self.__field_multipartID=UINT(**{'sizeinbytes': 2}) self.__field_multipartID.readfrombuffer(buf) self.__field_bin_header3=UINT(**{'sizeinbytes': 1}) self.__field_bin_header3.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx4650_343, 'length': 10}) self.__field_msglengths.readfrombuffer(buf) self.__field_unknown8=UNKNOWN(**{'sizeinbytes': 10}) self.__field_unknown8.readfrombuffer(buf) self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.readfrombuffer(buf) self.__field_unknown9=UNKNOWN() self.__field_unknown9.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UNKNOWN): self.__field_unknown1=value else: self.__field_unknown1=UNKNOWN(value,**{'sizeinbytes': 14}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,SMSDATE): self.__field_timesent=value else: self.__field_timesent=SMSDATE(value,**{'sizeinbytes': 6}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_callback_length(self): return self.__field_callback_length.getvalue() def __setfield_callback_length(self, value): if isinstance(value,UINT): self.__field_callback_length=value else: self.__field_callback_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_length(self): del self.__field_callback_length callback_length=property(__getfield_callback_length, __setfield_callback_length, __delfield_callback_length, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 38}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_sender_length(self): return self.__field_sender_length.getvalue() def __setfield_sender_length(self, value): if isinstance(value,UINT): self.__field_sender_length=value else: self.__field_sender_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_sender_length(self): del self.__field_sender_length sender_length=property(__getfield_sender_length, __setfield_sender_length, __delfield_sender_length, None) def __getfield_sender(self): try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx4650_325, 'length': 38}) return self.__field_sender.getvalue() def __setfield_sender(self, value): if isinstance(value,LIST): self.__field_sender=value else: self.__field_sender=LIST(value,**{'elementclass': _gen_p_lgvx4650_325, 'length': 38}) def __delfield_sender(self): del self.__field_sender sender=property(__getfield_sender, __setfield_sender, __delfield_sender, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,DATA): self.__field_unknown3=value else: self.__field_unknown3=DATA(value,**{'sizeinbytes': 12}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_lg_time(self): return self.__field_lg_time.getvalue() def __setfield_lg_time(self, value): if isinstance(value,LGCALDATE): self.__field_lg_time=value else: self.__field_lg_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_lg_time(self): del self.__field_lg_time lg_time=property(__getfield_lg_time, __setfield_lg_time, __delfield_lg_time, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UNKNOWN): self.__field_unknown4=value else: self.__field_unknown4=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 1}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 8}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_bin_header1(self): return self.__field_bin_header1.getvalue() def __setfield_bin_header1(self, value): if isinstance(value,UINT): self.__field_bin_header1=value else: self.__field_bin_header1=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header1(self): del self.__field_bin_header1 bin_header1=property(__getfield_bin_header1, __setfield_bin_header1, __delfield_bin_header1, None) def __getfield_bin_header2(self): return self.__field_bin_header2.getvalue() def __setfield_bin_header2(self, value): if isinstance(value,UINT): self.__field_bin_header2=value else: self.__field_bin_header2=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header2(self): del self.__field_bin_header2 bin_header2=property(__getfield_bin_header2, __setfield_bin_header2, __delfield_bin_header2, None) def __getfield_unknown7(self): return self.__field_unknown7.getvalue() def __setfield_unknown7(self, value): if isinstance(value,UINT): self.__field_unknown7=value else: self.__field_unknown7=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown7(self): del self.__field_unknown7 unknown7=property(__getfield_unknown7, __setfield_unknown7, __delfield_unknown7, None) def __getfield_multipartID(self): return self.__field_multipartID.getvalue() def __setfield_multipartID(self, value): if isinstance(value,UINT): self.__field_multipartID=value else: self.__field_multipartID=UINT(value,**{'sizeinbytes': 2}) def __delfield_multipartID(self): del self.__field_multipartID multipartID=property(__getfield_multipartID, __setfield_multipartID, __delfield_multipartID, None) def __getfield_bin_header3(self): return self.__field_bin_header3.getvalue() def __setfield_bin_header3(self, value): if isinstance(value,UINT): self.__field_bin_header3=value else: self.__field_bin_header3=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header3(self): del self.__field_bin_header3 bin_header3=property(__getfield_bin_header3, __setfield_bin_header3, __delfield_bin_header3, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_msglengths(self): try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx4650_343, 'length': 10}) return self.__field_msglengths.getvalue() def __setfield_msglengths(self, value): if isinstance(value,LIST): self.__field_msglengths=value else: self.__field_msglengths=LIST(value,**{'elementclass': _gen_p_lgvx4650_343, 'length': 10}) def __delfield_msglengths(self): del self.__field_msglengths msglengths=property(__getfield_msglengths, __setfield_msglengths, __delfield_msglengths, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,UNKNOWN): self.__field_unknown8=value else: self.__field_unknown8=UNKNOWN(value,**{'sizeinbytes': 10}) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def __getfield_unknown9(self): return self.__field_unknown9.getvalue() def __setfield_unknown9(self, value): if isinstance(value,UNKNOWN): self.__field_unknown9=value else: self.__field_unknown9=UNKNOWN(value,) def __delfield_unknown9(self): del self.__field_unknown9 unknown9=property(__getfield_unknown9, __setfield_unknown9, __delfield_unknown9, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('timesent', self.__field_timesent, None) yield ('unknown2', self.__field_unknown2, None) yield ('callback_length', self.__field_callback_length, None) yield ('callback', self.__field_callback, None) yield ('sender_length', self.__field_sender_length, None) yield ('sender', self.__field_sender, None) yield ('unknown3', self.__field_unknown3, None) yield ('lg_time', self.__field_lg_time, None) yield ('unknown4', self.__field_unknown4, None) yield ('GPStime', self.__field_GPStime, None) yield ('unknown5', self.__field_unknown5, None) yield ('read', self.__field_read, None) yield ('locked', self.__field_locked, None) yield ('unknown6', self.__field_unknown6, None) yield ('priority', self.__field_priority, None) yield ('subject', self.__field_subject, None) yield ('bin_header1', self.__field_bin_header1, None) yield ('bin_header2', self.__field_bin_header2, None) yield ('unknown7', self.__field_unknown7, None) yield ('multipartID', self.__field_multipartID, None) yield ('bin_header3', self.__field_bin_header3, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('msglengths', self.__field_msglengths, None) yield ('unknown8', self.__field_unknown8, None) yield ('msgs', self.__field_msgs, None) yield ('unknown9', self.__field_unknown9, None) class _gen_p_lgvx4650_325(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx4650_325,self).__init__(**dict) if self.__class__ is _gen_p_lgvx4650_325: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx4650_325,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx4650_325,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of senders phone number") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of senders phone number") class _gen_p_lgvx4650_343(BaseProtogenClass): 'Anonymous inner class' __fields=['msglength'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx4650_343,self).__init__(**dict) if self.__class__ is _gen_p_lgvx4650_343: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx4650_343,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx4650_343,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_msglength=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msglength.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msglength=UINT(**{'sizeinbytes': 1}) self.__field_msglength.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msglength(self): return self.__field_msglength.getvalue() def __setfield_msglength(self, value): if isinstance(value,UINT): self.__field_msglength=value else: self.__field_msglength=UINT(value,**{'sizeinbytes': 1}) def __delfield_msglength(self): del self.__field_msglength msglength=property(__getfield_msglength, __setfield_msglength, __delfield_msglength, "lengths of individual messages in septets") def iscontainer(self): return True def containerelements(self): yield ('msglength', self.__field_msglength, "lengths of individual messages in septets") bitpim-1.0.7+dfsg1/src/phones/p_lglg6190.p0000644001616600161660000002747310454042735016220 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Simon Capper ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### %{ """Various descriptions of data specific to LG 6190 (Sprint)""" import re from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx4400 except as noted # below from p_lgvx4400 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=1 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=500 MEMOLENGTH=65 NORINGTONE=0 NOMSGRINGTONE=0 NOWALLPAPER=0 NUMEMAILS=3 NUMPHONENUMBERS=5 SMS_CANNED_MAX_ITEMS=18 SMS_CANNED_MAX_LENGTH=101 SMS_CANNED_FILENAME="sms/mediacan000.dat" SMS_PATTERNS={'Inbox': re.compile(r"^.*/inbox[0-9][0-9][0-9]\.dat$"), 'Sent': re.compile(r"^.*/outbox[0-9][0-9][0-9]\.dat$"), 'Saved': re.compile(r"^.*/sf[0-9][0-9]\.dat$"), } # Text Memo const text_memo_file='sch/memo.dat' content_file_name='ams/contentInfo' content_count_file_name='ams/realContent' media_directory='ams' ringerindex='setas/amsRingerIndex.map' imageindex='setas/amsImageIndex.map' ringerconst=2 imageconst=3 max_ringers=100 max_images=100 phonebook_media='pim/pbookcontact.dat' # Calendar parameters NUMCALENDARENTRIES=300 # ?? for VX4400 CAL_REP_NONE=0x10 CAL_REP_DAILY=0x11 CAL_REP_MONFRI=0x12 CAL_REP_WEEKLY=0x13 CAL_REP_MONTHLY=0x14 CAL_REP_YEARLY=0x15 CAL_DOW_SUN=0x0800 CAL_DOW_MON=0x0400 CAL_DOW_TUE=0x0200 CAL_DOW_WED=0x0100 CAL_DOW_THU=0x0080 CAL_DOW_FRI=0x0040 CAL_DOW_SAT=0x0020 CAL_DOW_EXCEPTIONS=0x0010 CAL_REMINDER_NONE=0 CAL_REMINDER_ONTIME=1 CAL_REMINDER_5MIN=2 CAL_REMINDER_10MIN=3 CAL_REMINDER_1HOUR=4 CAL_REMINDER_1DAY=5 CAL_REMINDER_2DAYS=6 CAL_NO_VOICE=0xffff CAL_REPEAT_DATE=(2999, 12, 31) cal_has_voice_id=True cal_voice_id_ofs=0x11 cal_voice_ext='.qcp' # full name='sche000.qcp' cal_dir='sch' cal_data_file_name='sch/schedule.dat' cal_exception_file_name='sch/schexception.dat' PHONE_ENCODING='iso8859_1' %} PACKET pbreadentryresponse: "Results of reading one entry" * pbheader header * pbentry entry PACKET pbupdateentryrequest: * pbheader {'command': 0x04, 'flag': 0x01} +header * pbentry entry PACKET pbappendentryrequest: * pbheader {'command': 0x03, 'flag': 0x01} +header * pbentry entry PACKET speeddial: 2 UINT {'default': 0xffff} +entry 1 UINT {'default': 0xff} +number PACKET speeddials: * LIST {'length': NUMSPEEDDIALS, 'elementclass': speeddial} +speeddials # All STRINGS have raiseonterminatedread as False since the phone does # occassionally leave out the terminator byte # Note if you change the length of any of these fields, you also # need to modify com_lg6190 to give a different truncateat parameter # in the convertphonebooktophone method PACKET pbentry: 4 UINT serial1 2 UINT {'constant': 0x0222} +entrysize 4 UINT serial2 2 UINT entrynumber 23 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 2 UINT group * LIST {'length': NUMEMAILS} +emails: 49 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} email 49 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} url 1 UINT ringtone "ringtone index for a call" 1 UINT msgringtone "ringtone index for a text message" 1 BOOL secret * USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH} memo 1 UINT wallpaper * LIST {'length': NUMPHONENUMBERS} +numbertypes: 1 UINT numbertype * LIST {'length': NUMPHONENUMBERS} +numbers: 49 USTRING {'raiseonunterminatedread': False} number * UNKNOWN +unknown20c PACKET pbgroup: "A single group" 1 UINT icon 23 USTRING {'encoding': PHONE_ENCODING} name PACKET pbgroups: "Phonebook groups" * LIST {'elementclass': pbgroup} +groups PACKET call: 4 GPSDATE GPStime #no. of seconds since 0h 1-6-80, based off local time. 4 UINT unknown1 # different for each call 4 UINT duration #seconds, not certain about length of this field 49 USTRING {'raiseonunterminatedread': False} number 36 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 1 UINT numberlength # length of phone number 1 UINT unknown2 # set to 1 on some calls 1 UINT pbnumbertype # 1=cell, 2=home, 3=office, 4=cell2, 5=fax, 6=vmail, 0xFF=not in phone book 2 UINT unknown3 # always seems to be 0 2 UINT pbentrynum #entry number in phonebook PACKET callhistory: 4 UINT numcalls 1 UINT unknown1 * LIST {'elementclass': call} +calls ### ### Media indexes ### PACKET indexentry: 2 UINT {'default': 0xffff} +index 50 USTRING {'default': ""} +name PACKET indexfile: "Used for tracking wallpaper and ringtones" # A bit of a silly design again. Entries with an index of 0xffff are # 'blank'. Thus it is possible for numactiveitems and the actual # number of valid entries to be mismatched. P UINT {'constant': 30} maxitems 2 UINT numactiveitems * LIST {'length': self.maxitems, 'elementclass': indexentry, 'createdefault': True} +items PACKET camindexentry: 1 UINT index 1 UINT {'default' : 80} +unknown1 10 USTRING {'default': ""} +name 4 LGCALDATE taken 4 UINT unkown2 PACKET camindexfile: "Used for tracking wallpaper and ringtones" P UINT {'constant': 60} maxitems * LIST {'length': self.maxitems, 'elementclass': camindexentry, 'createdefault': True} +items # desc file used for wallpaper and ringtone files # you have to create a directory with the filename, but the media (renamed to "body") # and this .desc file (why couldn't they use regular filename, stupid way of storing files, grrr.) PACKET mediadesc: 4 UINT totalsize "media file size with size of this file (152 bytes) added" 4 UINT {'constant': 0} +dunno1 4 UINT {'default': 0x7824c97a} +magic1 "probably the file date (created)" 4 UINT {'default': 0x7824c97a} +magic2 "probably the file date (accessed)" 4 UINT {'default': 0x7824c97a} +magic3 "probably the file date (modified)" 4 UINT {'constant': 0} +dunno2 32 USTRING {'default': 'body'} +filename 32 USTRING {'default': 'identity'} +whoknows "set to iso8859_1 in some cases??" 32 USTRING mimetype 32 USTRING {'default': ""} +whoknows2 ### ### Text Memos ### PACKET textmemo: 151 USTRING { 'raiseonunterminatedread': False, 'raiseontruncate': False } text PACKET textmemofile: 4 UINT itemcount * LIST {'elementclass': textmemo } +items ### ### The calendar ### # # The calendar consists of one file listing events and an exception # file that lists exceptions. These exceptions suppress a particular # instance of a repeatedw event. For example, if you setup something # to happen monthly, but changed the 1st february event, then the # schedule will contain the repeating event, and the 1st feb one, # and the suppresions/exceptions file will point to the repeating # event and suppress the 1st feb. # The phone uses the position within the file to give an event an id PACKET scheduleexception: 4 UINT pos "Refers to event id (position in schedule file) that this suppresses" 1 UINT day 1 UINT month 2 UINT year PACKET scheduleexceptionfile: * LIST {'elementclass': scheduleexception} +items PACKET scheduleevent: P UINT { 'constant': 64 } packet_size "Faster than packetsize()" 4 UINT pos "position within file, used as an event id" 4 LGCALDATE start 4 LGCALDATE end 1 UINT repeat 2 UINT daybitmap "which days a weekly repeat event happens on" 1 UINT { 'default': 0 } +pad2 1 UINT alarmminutes "a value of 100 indicates not set" 1 UINT alarmhours "a value of 100 indicates not set" 1 UINT alarmtype "preset alarm reminder type" 1 UINT { 'default': 0 } +snoozedelay "in minutes, not for this phone" 1 UINT ringtone 35 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } description 2 UINT { 'default': 0 } +unknown1 "This seems to always be two zeros" 2 UINT hasvoice "This event has an associated voice memo if 1" 2 UINT voiceid "sch/schexxx.qcp is the voice memo (xxx = voiceid - 0x0f)" 2 UINT { 'default': 0 } +unknown2 "This seems to always be yet two more zeros" PACKET schedulefile: 2 UINT numactiveitems * LIST {'elementclass': scheduleevent} +events ### ### SMS ### # # There are 3 types of SMS records, The inbox, outbox and unsent (pending) # Unlike other records in the phone each message is stored in a separate file # All messages are in the 'sms' directory in the root of the phone # Inbox messages are in files called 'inbox000.dat', the number 000 varies for # each message, typically there are no gaps in the numbering, but gaps can appear # if a message is deleted. # Outbox message are named 'outbox000.dat', unsent messages are named 'sf00.dat', # only two digit file name that suggests a max of 100 message for this type. # Messages in the outbox get updated when the message is received by the recipient, # they contain a delivery flag and a delivery time for all the possible 10 recipients. # The pm225 stores SMS in plain text (unlike some other LG phones) PACKET recipient_record: 20 UINT unknown1 P USTRING {'encoding': PHONE_ENCODING, 'default':'', 'raiseonunterminatedread': False} name 49 USTRING number 24 UINT unknown2 1 UINT status # 1 when sent, 2 when received 4 LGCALDATE time # sent if status=1, received when status=2 PACKET sms_saved: 4 UINT outboxmsg 4 GPSDATE GPStime # num seconds since 0h 1-6-80 if self.outboxmsg: * sms_out outbox if not self.outboxmsg: * sms_in inbox PACKET sms_out: 4 UINT index # starting from 1, unique 1 UINT locked # 1=locked 3 UINT unknown1 # zero 4 LGCALDATE timesent # time the message was sent 500 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} msg # uncertain about max length 1250 DATA unknown2 16 USTRING callback * LIST {'elementclass': recipient_record, 'length': 10} +recipients PACKET SMSINBOXMSGFRAGMENT: * LIST {'length': 181} +msg: # this size could be wrong 1 UINT byte "individual byte of message" PACKET sms_in: 4 UINT unknown1 # 4 UINT msg_index2 6 UINT unknown2 # set to 0 6 SMSDATE timesent 3 UINT unknown 1 UINT callback_length # 0 for no callback number 38 USTRING callback 1 UINT sender_length * LIST {'length': 38} +sender: 1 UINT byte "individual byte of senders phone number" 15 DATA unknown4 # set to zeros 4 LGCALDATE lg_time # time the message was sent 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 2 UINT unknown41 2 UINT read # 1 if message has been read, 0 otherwise (kind of a guess, not enough data to be sure) 9 UINT unknown5 # these are flags, not enough data to decode #1 UINT locked # 1 if the message is locked, 0 otherwise #1 UINT priority # 1 if the message is high priority, 0 otherwise 21 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} subject 8 UINT unknown6 # these are flags, not enough data to decode 2 UINT msglength 18 UINT unknown7 # these are flags, not enough data to decode 200 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} msg * DATA unknown8 # ?? inlcudes senders phone number and name in ascii PACKET sms_quick_text: # the 6190 has variable length NULL terminated strings null terminated in it's canned messages # file sms/mediacan000.dat, max length 101 including terminator * LIST {} +msgs: * USTRING {'encoding': PHONE_ENCODING} msg # bitpim-1.0.7+dfsg1/src/phones/p_lglg6200.p0000644001616600161660000001557710454042735016212 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Simon Capper ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### %{ """Various descriptions of data specific to LG 6200 (Sprint)""" import re from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # very similar to the pm225 from p_lgpm225 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=99 FIRSTSPEEDDIAL=1 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=200 MEMOLENGTH=33 NORINGTONE=0 NOMSGRINGTONE=0 NOWALLPAPER=0 NUMEMAILS=3 NUMPHONENUMBERS=5 SMS_CANNED_MAX_ITEMS=40 SMS_CANNED_MAX_LENGTH=104 SMS_CANNED_FILENAME="sms/canned_msg.dat" SMS_PATTERNS={'Inbox': re.compile(r"^.*/inbox[0-9][0-9][0-9]\.dat$"), 'Sent': re.compile(r"^.*/outbox[0-9][0-9][0-9]\.dat$"), 'Saved': re.compile(r"^.*/sf[0-9][0-9]\.dat$"), } numbertypetab=( 'cell', 'home', 'office', 'fax', 'pager' ) # Text Memo const text_memo_file='sch/memo.dat' content_file_name='ams/contentInfo' content_count_file_name='ams/realContent' media_directory='ams' ringerindex='setas/amsRingerIndex.map' imageindex='setas/amsImageIndex.map' ringerconst=2 imageconst=3 max_ringers=100 max_images=100 phonebook_media='pim/pbookcontact.dat' # Calendar parameters NUMCALENDARENTRIES=300 # ?? for VX4400 CAL_REP_NONE=0x10 CAL_REP_DAILY=0x11 CAL_REP_MONFRI=0x12 CAL_REP_WEEKLY=0x13 CAL_REP_MONTHLY=0x14 CAL_REP_YEARLY=0x15 CAL_DOW_SUN=0x0800 CAL_DOW_MON=0x0400 CAL_DOW_TUE=0x0200 CAL_DOW_WED=0x0100 CAL_DOW_THU=0x0080 CAL_DOW_FRI=0x0040 CAL_DOW_SAT=0x0020 CAL_DOW_EXCEPTIONS=0x0010 CAL_REMINDER_NONE=0 CAL_REMINDER_ONTIME=1 CAL_REMINDER_5MIN=2 CAL_REMINDER_10MIN=3 CAL_REMINDER_1HOUR=4 CAL_REMINDER_1DAY=5 CAL_REMINDER_2DAYS=6 CAL_REPEAT_DATE=(2100, 12, 31) cal_dir='sch' cal_data_file_name='sch/schedule.dat' cal_exception_file_name='sch/schexception.dat' cal_has_voice_id=False PHONE_ENCODING='iso8859_1' %} PACKET pbreadentryresponse: "Results of reading one entry" * pbheader header * pbentry entry PACKET pbupdateentryrequest: * pbheader {'command': 0x04, 'flag': 0x01} +header * pbentry entry PACKET pbappendentryrequest: * pbheader {'command': 0x03, 'flag': 0x01} +header * pbentry entry # All STRINGS have raiseonterminatedread as False since the phone does # occassionally leave out the terminator byte # Note if you change the length of any of these fields, you also # need to modify com_lg6200 to give a different truncateat parameter # in the convertphonebooktophone method PACKET pbentry: 4 UINT serial1 2 UINT {'constant': 0x026e} +entrysize 2 UINT entrynumber 2 UINT {'default': 0} +unknown1 33 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 2 UINT group 2 UINT {'default': 0x10} +unknown2 #ringtone ?? 1 BOOL secret * USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH} memo * LIST {'length': NUMEMAILS} +emails: 73 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} email 73 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} url * LIST {'length': NUMPHONENUMBERS} +numberspeeds: 1 UINT numberspeed * LIST {'length': NUMPHONENUMBERS} +numbertypes: 1 UINT numbertype * LIST {'length': NUMPHONENUMBERS} +numbers: 49 USTRING {'raiseonunterminatedread': False} number 2 UINT {'constant': 0x0278} +EndOfRecord # size of packet P UINT {'default': 0x600} +ringtone P UINT {'default': 0x100} +wallpaper PACKET pbgroup: "A single group" 1 UINT group_id 1 UINT rectype # 0x30 or 0xFF if deleted 3 UNKNOWN +unknown2 3 UNKNOWN +unknown3 33 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name PACKET pbgroups: "Phonebook groups" * LIST {'elementclass': pbgroup} +groups PACKET pb_contact_media_entry: """Reads the wallpaper/ringer info for each contact on the phone""" 2 UINT index # matches serial1 in pbentry despite being a different size 18 DATA dont_care1 2 UINT ringer 33 USTRING {'encoding': PHONE_ENCODING} name # this is null terminated 182 DATA dont_care2 2 UINT wallpaper 4 DATA dont_care3 PACKET pb_contact_media_file: * LIST {'elementclass': pb_contact_media_entry} +contacts ### ### Media indexes ### # # The 6200 has 2 index files for media and for ringtones and wallpaper uses # both of them. The "indexfile" packet is the same as the other versizon LG # phones, but the "content_file" packet is different. One index file contains # all downloaded content including games, images and ringtone. The two # index files need to be synchronised for things to work correctly. PACKET indexentry: 1 UINT index 1 UINT const 80 USTRING {'default': ""} +name PACKET indexfile: "Used for tracking wallpaper and ringtones" # A bit of a silly design again. Entries with an index of 0xffff are # 'blank'. Thus it is possible for numactiveitems and the actual # number of valid entries to be mismatched. 2 UINT numactiveitems * LIST {'elementclass': indexentry, 'createdefault': True} +items PACKET content_entry: 3 USTRING {'terminator': 0xA} type if self.type=='!C': * USTRING {'terminator': 0xA} index1 * USTRING {'terminator': 0xA} name1 * USTRING {'terminator': 0xA, 'default': '-1'} +unknown1 8 UINT {'default' :0} +unknown2 * USTRING {'terminator': 0xA} mime_type * USTRING {'terminator': 0xA} content_type # 'Games', 'Screen Savers', 'Ringers' * USTRING {'terminator': 0xA, 'default':'bitpim.org'} +url 2 UINT {'default':0x08AA} + unknown_int1 * USTRING {'terminator': 0xA, 'default':''} +unknown3 2 UINT {'default':0x08AA} + unknown_int2 * USTRING {'terminator': 0xA, 'default':''} +unknown4 * USTRING {'terminator': 0xA, 'default':'0'} +unknown5 * USTRING {'terminator': 0xA} size if self.type=='!E': * USTRING {'terminator': 0xA, 'default':'ams:'} +location_maybe * USTRING {'terminator': 0xA} index2 * USTRING {'terminator': 0xA} name2 * USTRING {'terminator': 0xA, 'default':''} +unknown6 PACKET content_file: "Used to store all content on the phone, apps, ringers and images (with the exception of the camera)" * LIST {'elementclass': content_entry, 'createdefault': True} +items PACKET content_count: "Stores the number of items in the content file" * USTRING {'terminator': None} count ### ### Text Memos ### PACKET textmemo: 151 USTRING { 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } text PACKET textmemofile: 4 UINT itemcount * LIST { 'elementclass': textmemo } +items bitpim-1.0.7+dfsg1/src/phones/p_sanyo7050.py0000644001616600161660000036073510735075763016623 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Sanyo SCP-7050""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * from p_sanyo4930 import * from p_sanyo6600 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMPHONEBOOKENTRIES=500 MAXNUMBERS=700 MAXEMAILS=1000 MAXURLS=500 MAXMEMOS=500 MAXADDRESSES=500 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 # Need to check. Is max phone will hold 32/96 or 33/97 MAXNUMBERLEN=48 MAXEMAILLEN=96 MAXURLLEN=96 MAXMEMOLEN=96 HASRINGPICBUF=0 NUMGROUPS=20 NUMPHONENUMBERS=7 NUMEMAILS=2 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=9 class bufferpartrequest(BaseProtogenClass): __fields=['bufpartsize', 'header', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(bufferpartrequest,self).__init__(**dict) if self.__class__ is bufferpartrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(bufferpartrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(bufferpartrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_bufpartsize except: self.__field_bufpartsize=UINT(**{'constant': 1024}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0xc7}) self.__field_header.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 1026}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0xc7}) self.__field_header.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 1026}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_bufpartsize(self): return self.__field_bufpartsize.getvalue() def __setfield_bufpartsize(self, value): if isinstance(value,UINT): self.__field_bufpartsize=value else: self.__field_bufpartsize=UINT(value,**{'constant': 1024}) def __delfield_bufpartsize(self): del self.__field_bufpartsize bufpartsize=property(__getfield_bufpartsize, __setfield_bufpartsize, __delfield_bufpartsize, None) def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0xc7}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0xc7}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 1026}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 1026}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('bufpartsize', self.__field_bufpartsize, None) yield ('header', self.__field_header, None) yield ('pad', self.__field_pad, None) class bufferpartupdaterequest(BaseProtogenClass): __fields=['bufpartsize', 'header', 'data', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(bufferpartupdaterequest,self).__init__(**dict) if self.__class__ is bufferpartupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(bufferpartupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(bufferpartupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_bufpartsize except: self.__field_bufpartsize=UINT(**{'constant': 1024}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0xc7}) self.__field_header.writetobuffer(buf) self.__field_data.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyowriteheader(**{'packettype': 0xc7}) self.__field_header.readfrombuffer(buf) self.__field_data=DATA(**{'sizeinbytes': self.bufpartsize}) self.__field_data.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_bufpartsize(self): return self.__field_bufpartsize.getvalue() def __setfield_bufpartsize(self, value): if isinstance(value,UINT): self.__field_bufpartsize=value else: self.__field_bufpartsize=UINT(value,**{'constant': 1024}) def __delfield_bufpartsize(self): del self.__field_bufpartsize bufpartsize=property(__getfield_bufpartsize, __setfield_bufpartsize, __delfield_bufpartsize, None) def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0xc7}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyowriteheader): self.__field_header=value else: self.__field_header=sanyowriteheader(value,**{'packettype': 0xc7}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_data(self): return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,DATA): self.__field_data=value else: self.__field_data=DATA(value,**{'sizeinbytes': self.bufpartsize}) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 2}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 2}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('bufpartsize', self.__field_bufpartsize, None) yield ('header', self.__field_header, None) yield ('data', self.__field_data, None) yield ('pad', self.__field_pad, None) class pbsortbuffer(BaseProtogenClass): "Various arrays for sorting the phone book, speed dial, determining which" __fields=['startcommand', 'bufsize', 'comment', 'groupslotsused', 'pad', 'groupslotusedflags', 'slotsused', 'usedflags', 'speeddialindex', 'nameslotsused', 'nameusedflags', 'sortorder', 'pbfirstletters', 'numslotsused', 'numusedflags', 'emailslotsused', 'emailusedflags', 'urlslotsused', 'urlusedflags', 'num_address', 'addressusedflags', 'num_memo', 'memousedflags', 'junk'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbsortbuffer,self).__init__(**dict) if self.__class__ is pbsortbuffer: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbsortbuffer,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbsortbuffer,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_startcommand except: self.__field_startcommand=UINT(**{'constant': 0x0e}) try: self.__field_bufsize except: self.__field_bufsize=UINT(**{'constant': 6144}) try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "sort buffer"}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_groupslotsused.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad.writetobuffer(buf) try: self.__field_groupslotusedflags except: self.__field_groupslotusedflags=LIST(**{'elementclass': _gen_p_sanyo7050_79, 'length': NUMGROUPS, 'createdefault': True}) self.__field_groupslotusedflags.writetobuffer(buf) self.__field_slotsused.writetobuffer(buf) try: self.__field_usedflags except: self.__field_usedflags=LIST(**{'elementclass': _gen_p_sanyo7050_83, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_usedflags.writetobuffer(buf) try: self.__field_speeddialindex except: self.__field_speeddialindex=LIST(**{'elementclass': _gen_p_sanyo7050_85, 'length': _NUMSPEEDDIALS}) self.__field_speeddialindex.writetobuffer(buf) self.__field_nameslotsused.writetobuffer(buf) try: self.__field_nameusedflags except: self.__field_nameusedflags=LIST(**{'elementclass': _gen_p_sanyo7050_89, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_nameusedflags.writetobuffer(buf) try: self.__field_sortorder except: self.__field_sortorder=LIST(**{'elementclass': _gen_p_sanyo7050_91, 'length': NUMPHONEBOOKENTRIES}) self.__field_sortorder.writetobuffer(buf) self.__field_pbfirstletters.writetobuffer(buf) self.__field_numslotsused.writetobuffer(buf) try: self.__field_numusedflags except: self.__field_numusedflags=LIST(**{'elementclass': _gen_p_sanyo7050_96, 'length': MAXNUMBERS, 'createdefault': True}) self.__field_numusedflags.writetobuffer(buf) self.__field_emailslotsused.writetobuffer(buf) try: self.__field_emailusedflags except: self.__field_emailusedflags=LIST(**{'elementclass': _gen_p_sanyo7050_100, 'length': MAXEMAILS, 'createdefault': True}) self.__field_emailusedflags.writetobuffer(buf) self.__field_urlslotsused.writetobuffer(buf) try: self.__field_urlusedflags except: self.__field_urlusedflags=LIST(**{'elementclass': _gen_p_sanyo7050_103, 'length': MAXURLS, 'createdefault': True}) self.__field_urlusedflags.writetobuffer(buf) self.__field_num_address.writetobuffer(buf) try: self.__field_addressusedflags except: self.__field_addressusedflags=LIST(**{'elementclass': _gen_p_sanyo7050_107, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_addressusedflags.writetobuffer(buf) self.__field_num_memo.writetobuffer(buf) try: self.__field_memousedflags except: self.__field_memousedflags=LIST(**{'elementclass': _gen_p_sanyo7050_111, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_memousedflags.writetobuffer(buf) try: self.__field_junk except: self.__field_junk=UNKNOWN(**{'sizeinbytes': 391}) self.__field_junk.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_groupslotsused=UINT(**{'sizeinbytes': 1}) self.__field_groupslotsused.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad.readfrombuffer(buf) self.__field_groupslotusedflags=LIST(**{'elementclass': _gen_p_sanyo7050_79, 'length': NUMGROUPS, 'createdefault': True}) self.__field_groupslotusedflags.readfrombuffer(buf) self.__field_slotsused=UINT(**{'sizeinbytes': 2}) self.__field_slotsused.readfrombuffer(buf) self.__field_usedflags=LIST(**{'elementclass': _gen_p_sanyo7050_83, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_usedflags.readfrombuffer(buf) self.__field_speeddialindex=LIST(**{'elementclass': _gen_p_sanyo7050_85, 'length': _NUMSPEEDDIALS}) self.__field_speeddialindex.readfrombuffer(buf) self.__field_nameslotsused=UINT(**{'sizeinbytes': 2}) self.__field_nameslotsused.readfrombuffer(buf) self.__field_nameusedflags=LIST(**{'elementclass': _gen_p_sanyo7050_89, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_nameusedflags.readfrombuffer(buf) self.__field_sortorder=LIST(**{'elementclass': _gen_p_sanyo7050_91, 'length': NUMPHONEBOOKENTRIES}) self.__field_sortorder.readfrombuffer(buf) self.__field_pbfirstletters=USTRING(**{'terminator': None, 'sizeinbytes': NUMPHONEBOOKENTRIES}) self.__field_pbfirstletters.readfrombuffer(buf) self.__field_numslotsused=UINT(**{'sizeinbytes': 2}) self.__field_numslotsused.readfrombuffer(buf) self.__field_numusedflags=LIST(**{'elementclass': _gen_p_sanyo7050_96, 'length': MAXNUMBERS, 'createdefault': True}) self.__field_numusedflags.readfrombuffer(buf) self.__field_emailslotsused=UINT(**{'sizeinbytes': 2}) self.__field_emailslotsused.readfrombuffer(buf) self.__field_emailusedflags=LIST(**{'elementclass': _gen_p_sanyo7050_100, 'length': MAXEMAILS, 'createdefault': True}) self.__field_emailusedflags.readfrombuffer(buf) self.__field_urlslotsused=UINT(**{'sizeinbytes': 2}) self.__field_urlslotsused.readfrombuffer(buf) self.__field_urlusedflags=LIST(**{'elementclass': _gen_p_sanyo7050_103, 'length': MAXURLS, 'createdefault': True}) self.__field_urlusedflags.readfrombuffer(buf) self.__field_num_address=UINT(**{'sizeinbytes': 2}) self.__field_num_address.readfrombuffer(buf) self.__field_addressusedflags=LIST(**{'elementclass': _gen_p_sanyo7050_107, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_addressusedflags.readfrombuffer(buf) self.__field_num_memo=UINT(**{'sizeinbytes': 2}) self.__field_num_memo.readfrombuffer(buf) self.__field_memousedflags=LIST(**{'elementclass': _gen_p_sanyo7050_111, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_memousedflags.readfrombuffer(buf) self.__field_junk=UNKNOWN(**{'sizeinbytes': 391}) self.__field_junk.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_startcommand(self): return self.__field_startcommand.getvalue() def __setfield_startcommand(self, value): if isinstance(value,UINT): self.__field_startcommand=value else: self.__field_startcommand=UINT(value,**{'constant': 0x0e}) def __delfield_startcommand(self): del self.__field_startcommand startcommand=property(__getfield_startcommand, __setfield_startcommand, __delfield_startcommand, "Starting command for R/W buf parts") def __getfield_bufsize(self): return self.__field_bufsize.getvalue() def __setfield_bufsize(self, value): if isinstance(value,UINT): self.__field_bufsize=value else: self.__field_bufsize=UINT(value,**{'constant': 6144}) def __delfield_bufsize(self): del self.__field_bufsize bufsize=property(__getfield_bufsize, __setfield_bufsize, __delfield_bufsize, None) def __getfield_comment(self): try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "sort buffer"}) return self.__field_comment.getvalue() def __setfield_comment(self, value): if isinstance(value,USTRING): self.__field_comment=value else: self.__field_comment=USTRING(value,**{'default': "sort buffer"}) def __delfield_comment(self): del self.__field_comment comment=property(__getfield_comment, __setfield_comment, __delfield_comment, None) def __getfield_groupslotsused(self): return self.__field_groupslotsused.getvalue() def __setfield_groupslotsused(self, value): if isinstance(value,UINT): self.__field_groupslotsused=value else: self.__field_groupslotsused=UINT(value,**{'sizeinbytes': 1}) def __delfield_groupslotsused(self): del self.__field_groupslotsused groupslotsused=property(__getfield_groupslotsused, __setfield_groupslotsused, __delfield_groupslotsused, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 2}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 2}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_groupslotusedflags(self): try: self.__field_groupslotusedflags except: self.__field_groupslotusedflags=LIST(**{'elementclass': _gen_p_sanyo7050_79, 'length': NUMGROUPS, 'createdefault': True}) return self.__field_groupslotusedflags.getvalue() def __setfield_groupslotusedflags(self, value): if isinstance(value,LIST): self.__field_groupslotusedflags=value else: self.__field_groupslotusedflags=LIST(value,**{'elementclass': _gen_p_sanyo7050_79, 'length': NUMGROUPS, 'createdefault': True}) def __delfield_groupslotusedflags(self): del self.__field_groupslotusedflags groupslotusedflags=property(__getfield_groupslotusedflags, __setfield_groupslotusedflags, __delfield_groupslotusedflags, None) def __getfield_slotsused(self): return self.__field_slotsused.getvalue() def __setfield_slotsused(self, value): if isinstance(value,UINT): self.__field_slotsused=value else: self.__field_slotsused=UINT(value,**{'sizeinbytes': 2}) def __delfield_slotsused(self): del self.__field_slotsused slotsused=property(__getfield_slotsused, __setfield_slotsused, __delfield_slotsused, None) def __getfield_usedflags(self): try: self.__field_usedflags except: self.__field_usedflags=LIST(**{'elementclass': _gen_p_sanyo7050_83, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) return self.__field_usedflags.getvalue() def __setfield_usedflags(self, value): if isinstance(value,LIST): self.__field_usedflags=value else: self.__field_usedflags=LIST(value,**{'elementclass': _gen_p_sanyo7050_83, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) def __delfield_usedflags(self): del self.__field_usedflags usedflags=property(__getfield_usedflags, __setfield_usedflags, __delfield_usedflags, None) def __getfield_speeddialindex(self): try: self.__field_speeddialindex except: self.__field_speeddialindex=LIST(**{'elementclass': _gen_p_sanyo7050_85, 'length': _NUMSPEEDDIALS}) return self.__field_speeddialindex.getvalue() def __setfield_speeddialindex(self, value): if isinstance(value,LIST): self.__field_speeddialindex=value else: self.__field_speeddialindex=LIST(value,**{'elementclass': _gen_p_sanyo7050_85, 'length': _NUMSPEEDDIALS}) def __delfield_speeddialindex(self): del self.__field_speeddialindex speeddialindex=property(__getfield_speeddialindex, __setfield_speeddialindex, __delfield_speeddialindex, None) def __getfield_nameslotsused(self): return self.__field_nameslotsused.getvalue() def __setfield_nameslotsused(self, value): if isinstance(value,UINT): self.__field_nameslotsused=value else: self.__field_nameslotsused=UINT(value,**{'sizeinbytes': 2}) def __delfield_nameslotsused(self): del self.__field_nameslotsused nameslotsused=property(__getfield_nameslotsused, __setfield_nameslotsused, __delfield_nameslotsused, "Always seems to be the same. Why duplicated?") def __getfield_nameusedflags(self): try: self.__field_nameusedflags except: self.__field_nameusedflags=LIST(**{'elementclass': _gen_p_sanyo7050_89, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) return self.__field_nameusedflags.getvalue() def __setfield_nameusedflags(self, value): if isinstance(value,LIST): self.__field_nameusedflags=value else: self.__field_nameusedflags=LIST(value,**{'elementclass': _gen_p_sanyo7050_89, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) def __delfield_nameusedflags(self): del self.__field_nameusedflags nameusedflags=property(__getfield_nameusedflags, __setfield_nameusedflags, __delfield_nameusedflags, None) def __getfield_sortorder(self): try: self.__field_sortorder except: self.__field_sortorder=LIST(**{'elementclass': _gen_p_sanyo7050_91, 'length': NUMPHONEBOOKENTRIES}) return self.__field_sortorder.getvalue() def __setfield_sortorder(self, value): if isinstance(value,LIST): self.__field_sortorder=value else: self.__field_sortorder=LIST(value,**{'elementclass': _gen_p_sanyo7050_91, 'length': NUMPHONEBOOKENTRIES}) def __delfield_sortorder(self): del self.__field_sortorder sortorder=property(__getfield_sortorder, __setfield_sortorder, __delfield_sortorder, None) def __getfield_pbfirstletters(self): return self.__field_pbfirstletters.getvalue() def __setfield_pbfirstletters(self, value): if isinstance(value,USTRING): self.__field_pbfirstletters=value else: self.__field_pbfirstletters=USTRING(value,**{'terminator': None, 'sizeinbytes': NUMPHONEBOOKENTRIES}) def __delfield_pbfirstletters(self): del self.__field_pbfirstletters pbfirstletters=property(__getfield_pbfirstletters, __setfield_pbfirstletters, __delfield_pbfirstletters, None) def __getfield_numslotsused(self): return self.__field_numslotsused.getvalue() def __setfield_numslotsused(self, value): if isinstance(value,UINT): self.__field_numslotsused=value else: self.__field_numslotsused=UINT(value,**{'sizeinbytes': 2}) def __delfield_numslotsused(self): del self.__field_numslotsused numslotsused=property(__getfield_numslotsused, __setfield_numslotsused, __delfield_numslotsused, "Number of phone number slots used") def __getfield_numusedflags(self): try: self.__field_numusedflags except: self.__field_numusedflags=LIST(**{'elementclass': _gen_p_sanyo7050_96, 'length': MAXNUMBERS, 'createdefault': True}) return self.__field_numusedflags.getvalue() def __setfield_numusedflags(self, value): if isinstance(value,LIST): self.__field_numusedflags=value else: self.__field_numusedflags=LIST(value,**{'elementclass': _gen_p_sanyo7050_96, 'length': MAXNUMBERS, 'createdefault': True}) def __delfield_numusedflags(self): del self.__field_numusedflags numusedflags=property(__getfield_numusedflags, __setfield_numusedflags, __delfield_numusedflags, None) def __getfield_emailslotsused(self): return self.__field_emailslotsused.getvalue() def __setfield_emailslotsused(self, value): if isinstance(value,UINT): self.__field_emailslotsused=value else: self.__field_emailslotsused=UINT(value,**{'sizeinbytes': 2}) def __delfield_emailslotsused(self): del self.__field_emailslotsused emailslotsused=property(__getfield_emailslotsused, __setfield_emailslotsused, __delfield_emailslotsused, None) def __getfield_emailusedflags(self): try: self.__field_emailusedflags except: self.__field_emailusedflags=LIST(**{'elementclass': _gen_p_sanyo7050_100, 'length': MAXEMAILS, 'createdefault': True}) return self.__field_emailusedflags.getvalue() def __setfield_emailusedflags(self, value): if isinstance(value,LIST): self.__field_emailusedflags=value else: self.__field_emailusedflags=LIST(value,**{'elementclass': _gen_p_sanyo7050_100, 'length': MAXEMAILS, 'createdefault': True}) def __delfield_emailusedflags(self): del self.__field_emailusedflags emailusedflags=property(__getfield_emailusedflags, __setfield_emailusedflags, __delfield_emailusedflags, None) def __getfield_urlslotsused(self): return self.__field_urlslotsused.getvalue() def __setfield_urlslotsused(self, value): if isinstance(value,UINT): self.__field_urlslotsused=value else: self.__field_urlslotsused=UINT(value,**{'sizeinbytes': 2}) def __delfield_urlslotsused(self): del self.__field_urlslotsused urlslotsused=property(__getfield_urlslotsused, __setfield_urlslotsused, __delfield_urlslotsused, None) def __getfield_urlusedflags(self): try: self.__field_urlusedflags except: self.__field_urlusedflags=LIST(**{'elementclass': _gen_p_sanyo7050_103, 'length': MAXURLS, 'createdefault': True}) return self.__field_urlusedflags.getvalue() def __setfield_urlusedflags(self, value): if isinstance(value,LIST): self.__field_urlusedflags=value else: self.__field_urlusedflags=LIST(value,**{'elementclass': _gen_p_sanyo7050_103, 'length': MAXURLS, 'createdefault': True}) def __delfield_urlusedflags(self): del self.__field_urlusedflags urlusedflags=property(__getfield_urlusedflags, __setfield_urlusedflags, __delfield_urlusedflags, None) def __getfield_num_address(self): return self.__field_num_address.getvalue() def __setfield_num_address(self, value): if isinstance(value,UINT): self.__field_num_address=value else: self.__field_num_address=UINT(value,**{'sizeinbytes': 2}) def __delfield_num_address(self): del self.__field_num_address num_address=property(__getfield_num_address, __setfield_num_address, __delfield_num_address, None) def __getfield_addressusedflags(self): try: self.__field_addressusedflags except: self.__field_addressusedflags=LIST(**{'elementclass': _gen_p_sanyo7050_107, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) return self.__field_addressusedflags.getvalue() def __setfield_addressusedflags(self, value): if isinstance(value,LIST): self.__field_addressusedflags=value else: self.__field_addressusedflags=LIST(value,**{'elementclass': _gen_p_sanyo7050_107, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) def __delfield_addressusedflags(self): del self.__field_addressusedflags addressusedflags=property(__getfield_addressusedflags, __setfield_addressusedflags, __delfield_addressusedflags, None) def __getfield_num_memo(self): return self.__field_num_memo.getvalue() def __setfield_num_memo(self, value): if isinstance(value,UINT): self.__field_num_memo=value else: self.__field_num_memo=UINT(value,**{'sizeinbytes': 2}) def __delfield_num_memo(self): del self.__field_num_memo num_memo=property(__getfield_num_memo, __setfield_num_memo, __delfield_num_memo, None) def __getfield_memousedflags(self): try: self.__field_memousedflags except: self.__field_memousedflags=LIST(**{'elementclass': _gen_p_sanyo7050_111, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) return self.__field_memousedflags.getvalue() def __setfield_memousedflags(self, value): if isinstance(value,LIST): self.__field_memousedflags=value else: self.__field_memousedflags=LIST(value,**{'elementclass': _gen_p_sanyo7050_111, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) def __delfield_memousedflags(self): del self.__field_memousedflags memousedflags=property(__getfield_memousedflags, __setfield_memousedflags, __delfield_memousedflags, None) def __getfield_junk(self): try: self.__field_junk except: self.__field_junk=UNKNOWN(**{'sizeinbytes': 391}) return self.__field_junk.getvalue() def __setfield_junk(self, value): if isinstance(value,UNKNOWN): self.__field_junk=value else: self.__field_junk=UNKNOWN(value,**{'sizeinbytes': 391}) def __delfield_junk(self): del self.__field_junk junk=property(__getfield_junk, __setfield_junk, __delfield_junk, None) def iscontainer(self): return True def containerelements(self): yield ('startcommand', self.__field_startcommand, "Starting command for R/W buf parts") yield ('bufsize', self.__field_bufsize, None) yield ('comment', self.__field_comment, None) yield ('groupslotsused', self.__field_groupslotsused, None) yield ('pad', self.__field_pad, None) yield ('groupslotusedflags', self.__field_groupslotusedflags, None) yield ('slotsused', self.__field_slotsused, None) yield ('usedflags', self.__field_usedflags, None) yield ('speeddialindex', self.__field_speeddialindex, None) yield ('nameslotsused', self.__field_nameslotsused, "Always seems to be the same. Why duplicated?") yield ('nameusedflags', self.__field_nameusedflags, None) yield ('sortorder', self.__field_sortorder, None) yield ('pbfirstletters', self.__field_pbfirstletters, None) yield ('numslotsused', self.__field_numslotsused, "Number of phone number slots used") yield ('numusedflags', self.__field_numusedflags, None) yield ('emailslotsused', self.__field_emailslotsused, None) yield ('emailusedflags', self.__field_emailusedflags, None) yield ('urlslotsused', self.__field_urlslotsused, None) yield ('urlusedflags', self.__field_urlusedflags, None) yield ('num_address', self.__field_num_address, None) yield ('addressusedflags', self.__field_addressusedflags, None) yield ('num_memo', self.__field_num_memo, None) yield ('memousedflags', self.__field_memousedflags, None) yield ('junk', self.__field_junk, None) class _gen_p_sanyo7050_79(BaseProtogenClass): 'Anonymous inner class' __fields=['used'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo7050_79,self).__init__(**dict) if self.__class__ is _gen_p_sanyo7050_79: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo7050_79,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo7050_79,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_used=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_used.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_used=UINT(**{'sizeinbytes': 1}) self.__field_used.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_used(self): return self.__field_used.getvalue() def __setfield_used(self, value): if isinstance(value,UINT): self.__field_used=value else: self.__field_used=UINT(value,**{'sizeinbytes': 1}) def __delfield_used(self): del self.__field_used used=property(__getfield_used, __setfield_used, __delfield_used, "1 if slot in use") def iscontainer(self): return True def containerelements(self): yield ('used', self.__field_used, "1 if slot in use") class _gen_p_sanyo7050_83(BaseProtogenClass): 'Anonymous inner class' __fields=['used'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo7050_83,self).__init__(**dict) if self.__class__ is _gen_p_sanyo7050_83: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo7050_83,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo7050_83,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_used=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_used.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_used=UINT(**{'sizeinbytes': 1}) self.__field_used.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_used(self): return self.__field_used.getvalue() def __setfield_used(self, value): if isinstance(value,UINT): self.__field_used=value else: self.__field_used=UINT(value,**{'sizeinbytes': 1}) def __delfield_used(self): del self.__field_used used=property(__getfield_used, __setfield_used, __delfield_used, "1 if slot in use") def iscontainer(self): return True def containerelements(self): yield ('used', self.__field_used, "1 if slot in use") class _gen_p_sanyo7050_85(BaseProtogenClass): 'Anonymous inner class' __fields=['numslot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo7050_85,self).__init__(**dict) if self.__class__ is _gen_p_sanyo7050_85: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo7050_85,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo7050_85,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_numslot=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numslot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numslot=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_numslot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numslot(self): return self.__field_numslot.getvalue() def __setfield_numslot(self, value): if isinstance(value,UINT): self.__field_numslot=value else: self.__field_numslot=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_numslot(self): del self.__field_numslot numslot=property(__getfield_numslot, __setfield_numslot, __delfield_numslot, None) def iscontainer(self): return True def containerelements(self): yield ('numslot', self.__field_numslot, None) class _gen_p_sanyo7050_89(BaseProtogenClass): 'Anonymous inner class' __fields=['used'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo7050_89,self).__init__(**dict) if self.__class__ is _gen_p_sanyo7050_89: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo7050_89,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo7050_89,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_used=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_used.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_used=UINT(**{'sizeinbytes': 1}) self.__field_used.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_used(self): return self.__field_used.getvalue() def __setfield_used(self, value): if isinstance(value,UINT): self.__field_used=value else: self.__field_used=UINT(value,**{'sizeinbytes': 1}) def __delfield_used(self): del self.__field_used used=property(__getfield_used, __setfield_used, __delfield_used, "1 if slot in use") def iscontainer(self): return True def containerelements(self): yield ('used', self.__field_used, "1 if slot in use") class _gen_p_sanyo7050_91(BaseProtogenClass): 'Anonymous inner class' __fields=['pbslot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo7050_91,self).__init__(**dict) if self.__class__ is _gen_p_sanyo7050_91: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo7050_91,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo7050_91,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_pbslot=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pbslot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbslot=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbslot(self): return self.__field_pbslot.getvalue() def __setfield_pbslot(self, value): if isinstance(value,UINT): self.__field_pbslot=value else: self.__field_pbslot=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pbslot(self): del self.__field_pbslot pbslot=property(__getfield_pbslot, __setfield_pbslot, __delfield_pbslot, None) def iscontainer(self): return True def containerelements(self): yield ('pbslot', self.__field_pbslot, None) class _gen_p_sanyo7050_96(BaseProtogenClass): 'Anonymous inner class' __fields=['used'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo7050_96,self).__init__(**dict) if self.__class__ is _gen_p_sanyo7050_96: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo7050_96,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo7050_96,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_used=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_used.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_used=UINT(**{'sizeinbytes': 1}) self.__field_used.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_used(self): return self.__field_used.getvalue() def __setfield_used(self, value): if isinstance(value,UINT): self.__field_used=value else: self.__field_used=UINT(value,**{'sizeinbytes': 1}) def __delfield_used(self): del self.__field_used used=property(__getfield_used, __setfield_used, __delfield_used, "1 if slot in use") def iscontainer(self): return True def containerelements(self): yield ('used', self.__field_used, "1 if slot in use") class _gen_p_sanyo7050_100(BaseProtogenClass): 'Anonymous inner class' __fields=['used'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo7050_100,self).__init__(**dict) if self.__class__ is _gen_p_sanyo7050_100: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo7050_100,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo7050_100,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_used=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_used.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_used=UINT(**{'sizeinbytes': 1}) self.__field_used.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_used(self): return self.__field_used.getvalue() def __setfield_used(self, value): if isinstance(value,UINT): self.__field_used=value else: self.__field_used=UINT(value,**{'sizeinbytes': 1}) def __delfield_used(self): del self.__field_used used=property(__getfield_used, __setfield_used, __delfield_used, "1 if slot in use") def iscontainer(self): return True def containerelements(self): yield ('used', self.__field_used, "1 if slot in use") class _gen_p_sanyo7050_103(BaseProtogenClass): 'Anonymous inner class' __fields=['used'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo7050_103,self).__init__(**dict) if self.__class__ is _gen_p_sanyo7050_103: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo7050_103,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo7050_103,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_used=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_used.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_used=UINT(**{'sizeinbytes': 1}) self.__field_used.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_used(self): return self.__field_used.getvalue() def __setfield_used(self, value): if isinstance(value,UINT): self.__field_used=value else: self.__field_used=UINT(value,**{'sizeinbytes': 1}) def __delfield_used(self): del self.__field_used used=property(__getfield_used, __setfield_used, __delfield_used, "1 if slot in use") def iscontainer(self): return True def containerelements(self): yield ('used', self.__field_used, "1 if slot in use") class _gen_p_sanyo7050_107(BaseProtogenClass): 'Anonymous inner class' __fields=['used'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo7050_107,self).__init__(**dict) if self.__class__ is _gen_p_sanyo7050_107: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo7050_107,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo7050_107,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_used=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_used.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_used=UINT(**{'sizeinbytes': 1}) self.__field_used.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_used(self): return self.__field_used.getvalue() def __setfield_used(self, value): if isinstance(value,UINT): self.__field_used=value else: self.__field_used=UINT(value,**{'sizeinbytes': 1}) def __delfield_used(self): del self.__field_used used=property(__getfield_used, __setfield_used, __delfield_used, "1 if slot in use") def iscontainer(self): return True def containerelements(self): yield ('used', self.__field_used, "1 if slot in use") class _gen_p_sanyo7050_111(BaseProtogenClass): 'Anonymous inner class' __fields=['used'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo7050_111,self).__init__(**dict) if self.__class__ is _gen_p_sanyo7050_111: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo7050_111,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo7050_111,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_used=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_used.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_used=UINT(**{'sizeinbytes': 1}) self.__field_used.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_used(self): return self.__field_used.getvalue() def __setfield_used(self, value): if isinstance(value,UINT): self.__field_used=value else: self.__field_used=UINT(value,**{'sizeinbytes': 1}) def __delfield_used(self): del self.__field_used used=property(__getfield_used, __setfield_used, __delfield_used, "1 if slot in use") def iscontainer(self): return True def containerelements(self): yield ('used', self.__field_used, "1 if slot in use") class contactindexrequest(BaseProtogenClass): __fields=['header', 'slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(contactindexrequest,self).__init__(**dict) if self.__class__ is contactindexrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(contactindexrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(contactindexrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0xca, 'command': 0x38}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0xca, 'command': 0x38}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0xca, 'command': 0x38}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0xca, 'command': 0x38}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) class contactindexupdaterequest(BaseProtogenClass): __fields=['header', 'slot', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(contactindexupdaterequest,self).__init__(**dict) if self.__class__ is contactindexupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(contactindexupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(contactindexupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0xca, 'command': 0x38}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_entry except: self.__field_entry=contactindexentry() self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyowriteheader(**{'packettype': 0xca, 'command': 0x38}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_entry=contactindexentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0xca, 'command': 0x38}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyowriteheader): self.__field_header=value else: self.__field_header=sanyowriteheader(value,**{'packettype': 0xca, 'command': 0x38}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=contactindexentry() return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,contactindexentry): self.__field_entry=value else: self.__field_entry=contactindexentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) class numberrequest(BaseProtogenClass): __fields=['header', 'slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(numberrequest,self).__init__(**dict) if self.__class__ is numberrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(numberrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(numberrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0xca, 'command': 0x3f}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0xca, 'command': 0x3f}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0xca, 'command': 0x3f}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0xca, 'command': 0x3f}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) class numberupdaterequest(BaseProtogenClass): __fields=['header', 'slot', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(numberupdaterequest,self).__init__(**dict) if self.__class__ is numberupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(numberupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(numberupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0xca, 'command': 0x3f}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_entry except: self.__field_entry=numberentry() self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyowriteheader(**{'packettype': 0xca, 'command': 0x3f}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_entry=numberentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0xca, 'command': 0x3f}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyowriteheader): self.__field_header=value else: self.__field_header=sanyowriteheader(value,**{'packettype': 0xca, 'command': 0x3f}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=numberentry() return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,numberentry): self.__field_entry=value else: self.__field_entry=numberentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) class namerequest(BaseProtogenClass): __fields=['header', 'slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(namerequest,self).__init__(**dict) if self.__class__ is namerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(namerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(namerequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0xca, 'command': 0x3c}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0xca, 'command': 0x3c}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0xca, 'command': 0x3c}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0xca, 'command': 0x3c}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) class nameupdaterequest(BaseProtogenClass): __fields=['header', 'slot', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(nameupdaterequest,self).__init__(**dict) if self.__class__ is nameupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(nameupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(nameupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0xca, 'command': 0x3c}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_entry except: self.__field_entry=nameentry() self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyowriteheader(**{'packettype': 0xca, 'command': 0x3c}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_entry=nameentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0xca, 'command': 0x3c}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyowriteheader): self.__field_header=value else: self.__field_header=sanyowriteheader(value,**{'packettype': 0xca, 'command': 0x3c}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=nameentry() return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,nameentry): self.__field_entry=value else: self.__field_entry=nameentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) class emailrequest(BaseProtogenClass): __fields=['header', 'slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(emailrequest,self).__init__(**dict) if self.__class__ is emailrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(emailrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(emailrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0xca, 'command': 0x43}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0xca, 'command': 0x43}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0xca, 'command': 0x43}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0xca, 'command': 0x43}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) class emailupdaterequest(BaseProtogenClass): __fields=['header', 'slot', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(emailupdaterequest,self).__init__(**dict) if self.__class__ is emailupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(emailupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(emailupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0xca, 'command': 0x43}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_entry except: self.__field_entry=emailentry() self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyowriteheader(**{'packettype': 0xca, 'command': 0x43}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_entry=emailentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0xca, 'command': 0x43}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyowriteheader): self.__field_header=value else: self.__field_header=sanyowriteheader(value,**{'packettype': 0xca, 'command': 0x43}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=emailentry() return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,emailentry): self.__field_entry=value else: self.__field_entry=emailentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) class memorequest(BaseProtogenClass): __fields=['header', 'slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(memorequest,self).__init__(**dict) if self.__class__ is memorequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(memorequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(memorequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0xca, 'command': 0x4e}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0xca, 'command': 0x4e}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0xca, 'command': 0x4e}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0xca, 'command': 0x4e}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) class memoupdaterequest(BaseProtogenClass): __fields=['header', 'slot', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(memoupdaterequest,self).__init__(**dict) if self.__class__ is memoupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(memoupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(memoupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0xca, 'command': 0x4e}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_entry except: self.__field_entry=memoentry() self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyowriteheader(**{'packettype': 0xca, 'command': 0x4e}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_entry=memoentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0xca, 'command': 0x4e}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyowriteheader): self.__field_header=value else: self.__field_header=sanyowriteheader(value,**{'packettype': 0xca, 'command': 0x4e}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=memoentry() return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,memoentry): self.__field_entry=value else: self.__field_entry=memoentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) class addressrequest(BaseProtogenClass): __fields=['header', 'slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(addressrequest,self).__init__(**dict) if self.__class__ is addressrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(addressrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(addressrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0xca, 'command': 0x4b}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0xca, 'command': 0x4b}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0xca, 'command': 0x4b}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0xca, 'command': 0x4b}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) class addressupdaterequest(BaseProtogenClass): __fields=['header', 'slot', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(addressupdaterequest,self).__init__(**dict) if self.__class__ is addressupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(addressupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(addressupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0xca, 'command': 0x4b}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_entry except: self.__field_entry=addressentry() self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyowriteheader(**{'packettype': 0xca, 'command': 0x4b}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_entry=addressentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0xca, 'command': 0x4b}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyowriteheader): self.__field_header=value else: self.__field_header=sanyowriteheader(value,**{'packettype': 0xca, 'command': 0x4b}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=addressentry() return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,addressentry): self.__field_entry=value else: self.__field_entry=addressentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) class urlrequest(BaseProtogenClass): __fields=['header', 'slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(urlrequest,self).__init__(**dict) if self.__class__ is urlrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(urlrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(urlrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0xca, 'command': 0x48}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0xca, 'command': 0x48}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0xca, 'command': 0x48}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0xca, 'command': 0x48}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) class urlupdaterequest(BaseProtogenClass): __fields=['header', 'slot', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(urlupdaterequest,self).__init__(**dict) if self.__class__ is urlupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(urlupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(urlupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0xca, 'command': 0x48}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_entry except: self.__field_entry=urlentry() self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyowriteheader(**{'packettype': 0xca, 'command': 0x48}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_entry=urlentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0xca, 'command': 0x48}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyowriteheader): self.__field_header=value else: self.__field_header=sanyowriteheader(value,**{'packettype': 0xca, 'command': 0x48}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=urlentry() return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,urlentry): self.__field_entry=value else: self.__field_entry=urlentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) class grouprequest(BaseProtogenClass): __fields=['header', 'slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(grouprequest,self).__init__(**dict) if self.__class__ is grouprequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(grouprequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(grouprequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0xca, 'command': 0x37}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0xca, 'command': 0x37}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0xca, 'command': 0x37}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0xca, 'command': 0x37}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) class groupupdaterequest(BaseProtogenClass): __fields=['header', 'slot', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(groupupdaterequest,self).__init__(**dict) if self.__class__ is groupupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(groupupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(groupupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0xca, 'command': 0x37}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyowriteheader(**{'packettype': 0xca, 'command': 0x37}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_entry=groupentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0xca, 'command': 0x37}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyowriteheader): self.__field_header=value else: self.__field_header=sanyowriteheader(value,**{'packettype': 0xca, 'command': 0x37}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,groupentry): self.__field_entry=value else: self.__field_entry=groupentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class sanyoreset(BaseProtogenClass): __fields=['preamble', 'command', 'packettype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyoreset,self).__init__(**dict) if self.__class__ is sanyoreset: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyoreset,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyoreset,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_preamble except: self.__field_preamble=sanyofaheader(**{'faset': 0x37}) self.__field_preamble.writetobuffer(buf) try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0}) self.__field_command.writetobuffer(buf) try: self.__field_packettype except: self.__field_packettype=UINT(**{'sizeinbytes': 1, 'constant': 0}) self.__field_packettype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_preamble=sanyofaheader(**{'faset': 0x37}) self.__field_preamble.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0}) self.__field_command.readfrombuffer(buf) self.__field_packettype=UINT(**{'sizeinbytes': 1, 'constant': 0}) self.__field_packettype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_preamble(self): try: self.__field_preamble except: self.__field_preamble=sanyofaheader(**{'faset': 0x37}) return self.__field_preamble.getvalue() def __setfield_preamble(self, value): if isinstance(value,sanyofaheader): self.__field_preamble=value else: self.__field_preamble=sanyofaheader(value,**{'faset': 0x37}) def __delfield_preamble(self): del self.__field_preamble preamble=property(__getfield_preamble, __setfield_preamble, __delfield_preamble, None) def __getfield_command(self): try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1, 'constant': 0}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_packettype(self): try: self.__field_packettype except: self.__field_packettype=UINT(**{'sizeinbytes': 1, 'constant': 0}) return self.__field_packettype.getvalue() def __setfield_packettype(self, value): if isinstance(value,UINT): self.__field_packettype=value else: self.__field_packettype=UINT(value,**{'sizeinbytes': 1, 'constant': 0}) def __delfield_packettype(self): del self.__field_packettype packettype=property(__getfield_packettype, __setfield_packettype, __delfield_packettype, None) def iscontainer(self): return True def containerelements(self): yield ('preamble', self.__field_preamble, None) yield ('command', self.__field_command, None) yield ('packettype', self.__field_packettype, None) bitpim-1.0.7+dfsg1/src/phones/p_sanyo200.py0000644001616600161660000000110310555026112016466 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Sanyo SCP-200""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 _NUMCALLHISTORY=20 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 #for sym in dir(p_sanyo): # print sym bitpim-1.0.7+dfsg1/src/phones/p_sanyonewer.py0000644001616600161660000106627311026353637017342 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Descriptions of packets specific to newer Sanyo phone like the SCP-5500""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 # Need to check. Is max phone will hold 32/96 or 33/97 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 NUMMESSAGESLOTS=256 class sanyofirmwarerequest(BaseProtogenClass): __fields=['fa', 'command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyofirmwarerequest,self).__init__(**dict) if self.__class__ is sanyofirmwarerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyofirmwarerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyofirmwarerequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_fa except: self.__field_fa=UINT(**{'sizeinbytes': 1, 'constant': 0xfa}) self.__field_fa.writetobuffer(buf) try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_fa=UINT(**{'sizeinbytes': 1, 'constant': 0xfa}) self.__field_fa.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_fa(self): try: self.__field_fa except: self.__field_fa=UINT(**{'sizeinbytes': 1, 'constant': 0xfa}) return self.__field_fa.getvalue() def __setfield_fa(self, value): if isinstance(value,UINT): self.__field_fa=value else: self.__field_fa=UINT(value,**{'sizeinbytes': 1, 'constant': 0xfa}) def __delfield_fa(self): del self.__field_fa fa=property(__getfield_fa, __setfield_fa, __delfield_fa, None) def __getfield_command(self): try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 2, 'constant': 0x00}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 2, 'constant': 0x00}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('fa', self.__field_fa, None) yield ('command', self.__field_command, None) class sanyofirmwareresponse(BaseProtogenClass): __fields=['fa', 'command', 'date1', 'time1', 'date2', 'time2', 'string1', 'dunno1', 'date3', 'dunno2', 'time3', 'dunno3', 'firmware', 'dunno4', 'phonemodel', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyofirmwareresponse,self).__init__(**dict) if self.__class__ is sanyofirmwareresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyofirmwareresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyofirmwareresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_fa.writetobuffer(buf) self.__field_command.writetobuffer(buf) self.__field_date1.writetobuffer(buf) self.__field_time1.writetobuffer(buf) self.__field_date2.writetobuffer(buf) self.__field_time2.writetobuffer(buf) self.__field_string1.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_date3.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_time3.writetobuffer(buf) self.__field_dunno3.writetobuffer(buf) self.__field_firmware.writetobuffer(buf) self.__field_dunno4.writetobuffer(buf) self.__field_phonemodel.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_fa=UINT(**{'sizeinbytes': 1}) self.__field_fa.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 2}) self.__field_command.readfrombuffer(buf) self.__field_date1=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date1.readfrombuffer(buf) self.__field_time1=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time1.readfrombuffer(buf) self.__field_date2=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date2.readfrombuffer(buf) self.__field_time2=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time2.readfrombuffer(buf) self.__field_string1=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_string1.readfrombuffer(buf) self.__field_dunno1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_dunno1.readfrombuffer(buf) self.__field_date3=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date3.readfrombuffer(buf) self.__field_dunno2=UNKNOWN(**{'sizeinbytes': 1}) self.__field_dunno2.readfrombuffer(buf) self.__field_time3=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time3.readfrombuffer(buf) self.__field_dunno3=UNKNOWN(**{'sizeinbytes': 11}) self.__field_dunno3.readfrombuffer(buf) self.__field_firmware=USTRING(**{'sizeinbytes': 10, 'terminator': None}) self.__field_firmware.readfrombuffer(buf) self.__field_dunno4=UNKNOWN(**{'sizeinbytes': 7}) self.__field_dunno4.readfrombuffer(buf) self.__field_phonemodel=USTRING(**{'sizeinbytes': 16, 'terminator': None}) self.__field_phonemodel.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_fa(self): return self.__field_fa.getvalue() def __setfield_fa(self, value): if isinstance(value,UINT): self.__field_fa=value else: self.__field_fa=UINT(value,**{'sizeinbytes': 1}) def __delfield_fa(self): del self.__field_fa fa=property(__getfield_fa, __setfield_fa, __delfield_fa, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 2}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_date1(self): return self.__field_date1.getvalue() def __setfield_date1(self, value): if isinstance(value,USTRING): self.__field_date1=value else: self.__field_date1=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date1(self): del self.__field_date1 date1=property(__getfield_date1, __setfield_date1, __delfield_date1, None) def __getfield_time1(self): return self.__field_time1.getvalue() def __setfield_time1(self, value): if isinstance(value,USTRING): self.__field_time1=value else: self.__field_time1=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time1(self): del self.__field_time1 time1=property(__getfield_time1, __setfield_time1, __delfield_time1, None) def __getfield_date2(self): return self.__field_date2.getvalue() def __setfield_date2(self, value): if isinstance(value,USTRING): self.__field_date2=value else: self.__field_date2=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date2(self): del self.__field_date2 date2=property(__getfield_date2, __setfield_date2, __delfield_date2, None) def __getfield_time2(self): return self.__field_time2.getvalue() def __setfield_time2(self, value): if isinstance(value,USTRING): self.__field_time2=value else: self.__field_time2=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time2(self): del self.__field_time2 time2=property(__getfield_time2, __setfield_time2, __delfield_time2, None) def __getfield_string1(self): return self.__field_string1.getvalue() def __setfield_string1(self, value): if isinstance(value,USTRING): self.__field_string1=value else: self.__field_string1=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_string1(self): del self.__field_string1 string1=property(__getfield_string1, __setfield_string1, __delfield_string1, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UNKNOWN): self.__field_dunno1=value else: self.__field_dunno1=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_date3(self): return self.__field_date3.getvalue() def __setfield_date3(self, value): if isinstance(value,USTRING): self.__field_date3=value else: self.__field_date3=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date3(self): del self.__field_date3 date3=property(__getfield_date3, __setfield_date3, __delfield_date3, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UNKNOWN): self.__field_dunno2=value else: self.__field_dunno2=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_time3(self): return self.__field_time3.getvalue() def __setfield_time3(self, value): if isinstance(value,USTRING): self.__field_time3=value else: self.__field_time3=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time3(self): del self.__field_time3 time3=property(__getfield_time3, __setfield_time3, __delfield_time3, None) def __getfield_dunno3(self): return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,UNKNOWN): self.__field_dunno3=value else: self.__field_dunno3=UNKNOWN(value,**{'sizeinbytes': 11}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_firmware(self): return self.__field_firmware.getvalue() def __setfield_firmware(self, value): if isinstance(value,USTRING): self.__field_firmware=value else: self.__field_firmware=USTRING(value,**{'sizeinbytes': 10, 'terminator': None}) def __delfield_firmware(self): del self.__field_firmware firmware=property(__getfield_firmware, __setfield_firmware, __delfield_firmware, None) def __getfield_dunno4(self): return self.__field_dunno4.getvalue() def __setfield_dunno4(self, value): if isinstance(value,UNKNOWN): self.__field_dunno4=value else: self.__field_dunno4=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_dunno4(self): del self.__field_dunno4 dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None) def __getfield_phonemodel(self): return self.__field_phonemodel.getvalue() def __setfield_phonemodel(self, value): if isinstance(value,USTRING): self.__field_phonemodel=value else: self.__field_phonemodel=USTRING(value,**{'sizeinbytes': 16, 'terminator': None}) def __delfield_phonemodel(self): del self.__field_phonemodel phonemodel=property(__getfield_phonemodel, __setfield_phonemodel, __delfield_phonemodel, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('fa', self.__field_fa, None) yield ('command', self.__field_command, None) yield ('date1', self.__field_date1, None) yield ('time1', self.__field_time1, None) yield ('date2', self.__field_date2, None) yield ('time2', self.__field_time2, None) yield ('string1', self.__field_string1, None) yield ('dunno1', self.__field_dunno1, None) yield ('date3', self.__field_date3, None) yield ('dunno2', self.__field_dunno2, None) yield ('time3', self.__field_time3, None) yield ('dunno3', self.__field_dunno3, None) yield ('firmware', self.__field_firmware, None) yield ('dunno4', self.__field_dunno4, None) yield ('phonemodel', self.__field_phonemodel, None) yield ('pad', self.__field_pad, None) class sanyofaheader(BaseProtogenClass): __fields=['fa', 'faset'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyofaheader,self).__init__(**dict) if self.__class__ is sanyofaheader: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyofaheader,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyofaheader,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_fa except: self.__field_fa=UINT(**{'sizeinbytes': 2, 'constant': 0x00fa}) self.__field_fa.writetobuffer(buf) self.__field_faset.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_fa=UINT(**{'sizeinbytes': 2, 'constant': 0x00fa}) self.__field_fa.readfrombuffer(buf) self.__field_faset=UINT(**{'sizeinbytes': 1}) self.__field_faset.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_fa(self): try: self.__field_fa except: self.__field_fa=UINT(**{'sizeinbytes': 2, 'constant': 0x00fa}) return self.__field_fa.getvalue() def __setfield_fa(self, value): if isinstance(value,UINT): self.__field_fa=value else: self.__field_fa=UINT(value,**{'sizeinbytes': 2, 'constant': 0x00fa}) def __delfield_fa(self): del self.__field_fa fa=property(__getfield_fa, __setfield_fa, __delfield_fa, None) def __getfield_faset(self): return self.__field_faset.getvalue() def __setfield_faset(self, value): if isinstance(value,UINT): self.__field_faset=value else: self.__field_faset=UINT(value,**{'sizeinbytes': 1}) def __delfield_faset(self): del self.__field_faset faset=property(__getfield_faset, __setfield_faset, __delfield_faset, None) def iscontainer(self): return True def containerelements(self): yield ('fa', self.__field_fa, None) yield ('faset', self.__field_faset, None) class sanyoheader(BaseProtogenClass): __fields=['preamble', 'command', 'packettype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyoheader,self).__init__(**dict) if self.__class__ is sanyoheader: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyoheader,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyoheader,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_preamble except: self.__field_preamble=sanyofaheader(**{'faset': 0x02}) self.__field_preamble.writetobuffer(buf) self.__field_command.writetobuffer(buf) self.__field_packettype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_preamble=sanyofaheader(**{'faset': 0x02}) self.__field_preamble.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_packettype=UINT(**{'sizeinbytes': 1}) self.__field_packettype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_preamble(self): try: self.__field_preamble except: self.__field_preamble=sanyofaheader(**{'faset': 0x02}) return self.__field_preamble.getvalue() def __setfield_preamble(self, value): if isinstance(value,sanyofaheader): self.__field_preamble=value else: self.__field_preamble=sanyofaheader(value,**{'faset': 0x02}) def __delfield_preamble(self): del self.__field_preamble preamble=property(__getfield_preamble, __setfield_preamble, __delfield_preamble, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_packettype(self): return self.__field_packettype.getvalue() def __setfield_packettype(self, value): if isinstance(value,UINT): self.__field_packettype=value else: self.__field_packettype=UINT(value,**{'sizeinbytes': 1}) def __delfield_packettype(self): del self.__field_packettype packettype=property(__getfield_packettype, __setfield_packettype, __delfield_packettype, None) def iscontainer(self): return True def containerelements(self): yield ('preamble', self.__field_preamble, None) yield ('command', self.__field_command, None) yield ('packettype', self.__field_packettype, None) class sanyowriteheader(BaseProtogenClass): __fields=['preamble', 'command', 'packettype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyowriteheader,self).__init__(**dict) if self.__class__ is sanyowriteheader: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyowriteheader,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyowriteheader,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_preamble except: self.__field_preamble=sanyofaheader(**{'faset': 0x03}) self.__field_preamble.writetobuffer(buf) self.__field_command.writetobuffer(buf) self.__field_packettype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_preamble=sanyofaheader(**{'faset': 0x03}) self.__field_preamble.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_packettype=UINT(**{'sizeinbytes': 1}) self.__field_packettype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_preamble(self): try: self.__field_preamble except: self.__field_preamble=sanyofaheader(**{'faset': 0x03}) return self.__field_preamble.getvalue() def __setfield_preamble(self, value): if isinstance(value,sanyofaheader): self.__field_preamble=value else: self.__field_preamble=sanyofaheader(value,**{'faset': 0x03}) def __delfield_preamble(self): del self.__field_preamble preamble=property(__getfield_preamble, __setfield_preamble, __delfield_preamble, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_packettype(self): return self.__field_packettype.getvalue() def __setfield_packettype(self, value): if isinstance(value,UINT): self.__field_packettype=value else: self.__field_packettype=UINT(value,**{'sizeinbytes': 1}) def __delfield_packettype(self): del self.__field_packettype packettype=property(__getfield_packettype, __setfield_packettype, __delfield_packettype, None) def iscontainer(self): return True def containerelements(self): yield ('preamble', self.__field_preamble, None) yield ('command', self.__field_command, None) yield ('packettype', self.__field_packettype, None) class study(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(study,self).__init__(**dict) if self.__class__ is study: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(study,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(study,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader() self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 1024}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 1024}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader() return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 1024}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 1024}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class studyresponse(BaseProtogenClass): __fields=['header', 'data'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(studyresponse,self).__init__(**dict) if self.__class__ is studyresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(studyresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(studyresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_data.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_data=UNKNOWN() self.__field_data.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_data(self): return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,UNKNOWN): self.__field_data=value else: self.__field_data=UNKNOWN(value,) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('data', self.__field_data, None) class phonebookslotrequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebookslotrequest,self).__init__(**dict) if self.__class__ is phonebookslotrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebookslotrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebookslotrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x28}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 512}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x28}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 512}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x28}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c, 'command': 0x28}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 512}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 512}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class phonebookslotupdaterequest(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebookslotupdaterequest,self).__init__(**dict) if self.__class__ is phonebookslotupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebookslotupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebookslotupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x0c, 'command': 0x28}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 569}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyowriteheader(**{'packettype': 0x0c, 'command': 0x28}) self.__field_header.readfrombuffer(buf) self.__field_entry=phonebookentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 569}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x0c, 'command': 0x28}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyowriteheader): self.__field_header=value else: self.__field_header=sanyowriteheader(value,**{'packettype': 0x0c, 'command': 0x28}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,phonebookentry): self.__field_entry=value else: self.__field_entry=phonebookentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 569}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 569}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class phonenumber(BaseProtogenClass): __fields=['number_len', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonenumber,self).__init__(**dict) if self.__class__ is phonenumber: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonenumber,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonenumber,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_number_len except: self.__field_number_len=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_number_len.writetobuffer(buf) try: self.__field_number except: self.__field_number=USTRING(**{'sizeinbytes': 33, 'default': ""}) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number_len=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_number_len.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 33, 'default': ""}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number_len(self): try: self.__field_number_len except: self.__field_number_len=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_number_len.getvalue() def __setfield_number_len(self, value): if isinstance(value,UINT): self.__field_number_len=value else: self.__field_number_len=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_number_len(self): del self.__field_number_len number_len=property(__getfield_number_len, __setfield_number_len, __delfield_number_len, None) def __getfield_number(self): try: self.__field_number except: self.__field_number=USTRING(**{'sizeinbytes': 33, 'default': ""}) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 33, 'default': ""}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('number_len', self.__field_number_len, None) yield ('number', self.__field_number, None) class phonebookentry(BaseProtogenClass): __fields=['slot', 'slotdup', 'name_len', 'name', 'numbers', 'email_len', 'email', 'url_len', 'url', 'defaultnum', 'secret'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebookentry,self).__init__(**dict) if self.__class__ is phonebookentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebookentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebookentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_slotdup.writetobuffer(buf) self.__field_name_len.writetobuffer(buf) self.__field_name.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'length': 7, 'createdefault': True, 'elementclass': phonenumber}) self.__field_numbers.writetobuffer(buf) try: self.__field_email_len except: self.__field_email_len=UINT(**{'sizeinbytes': 1}) self.__field_email_len.writetobuffer(buf) try: self.__field_email except: self.__field_email=USTRING(**{'sizeinbytes': 97, 'default': ""}) self.__field_email.writetobuffer(buf) try: self.__field_url_len except: self.__field_url_len=UINT(**{'sizeinbytes': 1}) self.__field_url_len.writetobuffer(buf) try: self.__field_url except: self.__field_url=USTRING(**{'sizeinbytes': 97, 'default': ""}) self.__field_url.writetobuffer(buf) try: self.__field_defaultnum except: self.__field_defaultnum=UINT(**{'sizeinbytes': 1, 'default': 1}) self.__field_defaultnum.writetobuffer(buf) try: self.__field_secret except: self.__field_secret=BOOL(**{'sizeinbytes': 1}) self.__field_secret.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_slotdup=UINT(**{'sizeinbytes': 2}) self.__field_slotdup.readfrombuffer(buf) self.__field_name_len=UINT(**{'sizeinbytes': 1}) self.__field_name_len.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_name.readfrombuffer(buf) self.__field_numbers=LIST(**{'length': 7, 'createdefault': True, 'elementclass': phonenumber}) self.__field_numbers.readfrombuffer(buf) self.__field_email_len=UINT(**{'sizeinbytes': 1}) self.__field_email_len.readfrombuffer(buf) self.__field_email=USTRING(**{'sizeinbytes': 97, 'default': ""}) self.__field_email.readfrombuffer(buf) self.__field_url_len=UINT(**{'sizeinbytes': 1}) self.__field_url_len.readfrombuffer(buf) self.__field_url=USTRING(**{'sizeinbytes': 97, 'default': ""}) self.__field_url.readfrombuffer(buf) self.__field_defaultnum=UINT(**{'sizeinbytes': 1, 'default': 1}) self.__field_defaultnum.readfrombuffer(buf) self.__field_secret=BOOL(**{'sizeinbytes': 1}) self.__field_secret.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_slotdup(self): return self.__field_slotdup.getvalue() def __setfield_slotdup(self, value): if isinstance(value,UINT): self.__field_slotdup=value else: self.__field_slotdup=UINT(value,**{'sizeinbytes': 2}) def __delfield_slotdup(self): del self.__field_slotdup slotdup=property(__getfield_slotdup, __setfield_slotdup, __delfield_slotdup, None) def __getfield_name_len(self): return self.__field_name_len.getvalue() def __setfield_name_len(self, value): if isinstance(value,UINT): self.__field_name_len=value else: self.__field_name_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_name_len(self): del self.__field_name_len name_len=property(__getfield_name_len, __setfield_name_len, __delfield_name_len, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'length': 7, 'createdefault': True, 'elementclass': phonenumber}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'length': 7, 'createdefault': True, 'elementclass': phonenumber}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_email_len(self): try: self.__field_email_len except: self.__field_email_len=UINT(**{'sizeinbytes': 1}) return self.__field_email_len.getvalue() def __setfield_email_len(self, value): if isinstance(value,UINT): self.__field_email_len=value else: self.__field_email_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_email_len(self): del self.__field_email_len email_len=property(__getfield_email_len, __setfield_email_len, __delfield_email_len, None) def __getfield_email(self): try: self.__field_email except: self.__field_email=USTRING(**{'sizeinbytes': 97, 'default': ""}) return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 97, 'default': ""}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def __getfield_url_len(self): try: self.__field_url_len except: self.__field_url_len=UINT(**{'sizeinbytes': 1}) return self.__field_url_len.getvalue() def __setfield_url_len(self, value): if isinstance(value,UINT): self.__field_url_len=value else: self.__field_url_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_url_len(self): del self.__field_url_len url_len=property(__getfield_url_len, __setfield_url_len, __delfield_url_len, None) def __getfield_url(self): try: self.__field_url except: self.__field_url=USTRING(**{'sizeinbytes': 97, 'default': ""}) return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,USTRING): self.__field_url=value else: self.__field_url=USTRING(value,**{'sizeinbytes': 97, 'default': ""}) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_defaultnum(self): try: self.__field_defaultnum except: self.__field_defaultnum=UINT(**{'sizeinbytes': 1, 'default': 1}) return self.__field_defaultnum.getvalue() def __setfield_defaultnum(self, value): if isinstance(value,UINT): self.__field_defaultnum=value else: self.__field_defaultnum=UINT(value,**{'sizeinbytes': 1, 'default': 1}) def __delfield_defaultnum(self): del self.__field_defaultnum defaultnum=property(__getfield_defaultnum, __setfield_defaultnum, __delfield_defaultnum, None) def __getfield_secret(self): try: self.__field_secret except: self.__field_secret=BOOL(**{'sizeinbytes': 1}) return self.__field_secret.getvalue() def __setfield_secret(self, value): if isinstance(value,BOOL): self.__field_secret=value else: self.__field_secret=BOOL(value,**{'sizeinbytes': 1}) def __delfield_secret(self): del self.__field_secret secret=property(__getfield_secret, __setfield_secret, __delfield_secret, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('slotdup', self.__field_slotdup, None) yield ('name_len', self.__field_name_len, None) yield ('name', self.__field_name, None) yield ('numbers', self.__field_numbers, None) yield ('email_len', self.__field_email_len, None) yield ('email', self.__field_email, None) yield ('url_len', self.__field_url_len, None) yield ('url', self.__field_url, None) yield ('defaultnum', self.__field_defaultnum, None) yield ('secret', self.__field_secret, None) class phonebookslotresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebookslotresponse,self).__init__(**dict) if self.__class__ is phonebookslotresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebookslotresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebookslotresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=phonebookentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 57}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,phonebookentry): self.__field_entry=value else: self.__field_entry=phonebookentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 57}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class eventrequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventrequest,self).__init__(**dict) if self.__class__ is eventrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x23}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x23}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x23}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c, 'command': 0x23}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 501}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class evententry(BaseProtogenClass): __fields=['slot', 'flag', 'eventname', 'pad1', 'eventname_len', 'start', 'end', 'location', 'pad2', 'location_len', 'pad3', 'alarmdiff', 'period', 'dom', 'alarm', 'serial', 'pad4', 'ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(evententry,self).__init__(**dict) if self.__class__ is evententry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(evententry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(evententry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) self.__field_eventname.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.writetobuffer(buf) self.__field_eventname_len.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_location.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad2.writetobuffer(buf) self.__field_location_len.writetobuffer(buf) try: self.__field_pad3 except: self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad3.writetobuffer(buf) self.__field_alarmdiff.writetobuffer(buf) self.__field_period.writetobuffer(buf) self.__field_dom.writetobuffer(buf) self.__field_alarm.writetobuffer(buf) try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.writetobuffer(buf) try: self.__field_pad4 except: self.__field_pad4=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad4.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_eventname=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_eventname.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.readfrombuffer(buf) self.__field_eventname_len=UINT(**{'sizeinbytes': 1}) self.__field_eventname_len.readfrombuffer(buf) self.__field_start=UINT(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=UINT(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_location=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_location.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad2.readfrombuffer(buf) self.__field_location_len=UINT(**{'sizeinbytes': 1}) self.__field_location_len.readfrombuffer(buf) self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad3.readfrombuffer(buf) self.__field_alarmdiff=UINT(**{'sizeinbytes': 4}) self.__field_alarmdiff.readfrombuffer(buf) self.__field_period=UINT(**{'sizeinbytes': 1}) self.__field_period.readfrombuffer(buf) self.__field_dom=UINT(**{'sizeinbytes': 1}) self.__field_dom.readfrombuffer(buf) self.__field_alarm=UINT(**{'sizeinbytes': 4}) self.__field_alarm.readfrombuffer(buf) self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.readfrombuffer(buf) self.__field_pad4=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad4.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, "0: Not used, 1: Scheduled, 2: Already Happened") def __getfield_eventname(self): return self.__field_eventname.getvalue() def __setfield_eventname(self, value): if isinstance(value,USTRING): self.__field_eventname=value else: self.__field_eventname=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_eventname(self): del self.__field_eventname eventname=property(__getfield_eventname, __setfield_eventname, __delfield_eventname, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_eventname_len(self): return self.__field_eventname_len.getvalue() def __setfield_eventname_len(self, value): if isinstance(value,UINT): self.__field_eventname_len=value else: self.__field_eventname_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_eventname_len(self): del self.__field_eventname_len eventname_len=property(__getfield_eventname_len, __setfield_eventname_len, __delfield_eventname_len, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,UINT): self.__field_start=value else: self.__field_start=UINT(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, "# seconds since Jan 1, 1980 approximately") def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,UINT): self.__field_end=value else: self.__field_end=UINT(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_location(self): return self.__field_location.getvalue() def __setfield_location(self, value): if isinstance(value,USTRING): self.__field_location=value else: self.__field_location=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_location(self): del self.__field_location location=property(__getfield_location, __setfield_location, __delfield_location, None) def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_location_len(self): return self.__field_location_len.getvalue() def __setfield_location_len(self, value): if isinstance(value,UINT): self.__field_location_len=value else: self.__field_location_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_location_len(self): del self.__field_location_len location_len=property(__getfield_location_len, __setfield_location_len, __delfield_location_len, None) def __getfield_pad3(self): try: self.__field_pad3 except: self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad3.getvalue() def __setfield_pad3(self, value): if isinstance(value,UNKNOWN): self.__field_pad3=value else: self.__field_pad3=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad3(self): del self.__field_pad3 pad3=property(__getfield_pad3, __setfield_pad3, __delfield_pad3, None) def __getfield_alarmdiff(self): return self.__field_alarmdiff.getvalue() def __setfield_alarmdiff(self, value): if isinstance(value,UINT): self.__field_alarmdiff=value else: self.__field_alarmdiff=UINT(value,**{'sizeinbytes': 4}) def __delfield_alarmdiff(self): del self.__field_alarmdiff alarmdiff=property(__getfield_alarmdiff, __setfield_alarmdiff, __delfield_alarmdiff, "Displayed alarm time") def __getfield_period(self): return self.__field_period.getvalue() def __setfield_period(self, value): if isinstance(value,UINT): self.__field_period=value else: self.__field_period=UINT(value,**{'sizeinbytes': 1}) def __delfield_period(self): del self.__field_period period=property(__getfield_period, __setfield_period, __delfield_period, "No, Daily, Weekly, Monthly, Yearly") def __getfield_dom(self): return self.__field_dom.getvalue() def __setfield_dom(self, value): if isinstance(value,UINT): self.__field_dom=value else: self.__field_dom=UINT(value,**{'sizeinbytes': 1}) def __delfield_dom(self): del self.__field_dom dom=property(__getfield_dom, __setfield_dom, __delfield_dom, "Day of month for the event") def __getfield_alarm(self): return self.__field_alarm.getvalue() def __setfield_alarm(self, value): if isinstance(value,UINT): self.__field_alarm=value else: self.__field_alarm=UINT(value,**{'sizeinbytes': 4}) def __delfield_alarm(self): del self.__field_alarm alarm=property(__getfield_alarm, __setfield_alarm, __delfield_alarm, None) def __getfield_serial(self): try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_serial.getvalue() def __setfield_serial(self, value): if isinstance(value,UINT): self.__field_serial=value else: self.__field_serial=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_serial(self): del self.__field_serial serial=property(__getfield_serial, __setfield_serial, __delfield_serial, "Some kind of serial number") def __getfield_pad4(self): try: self.__field_pad4 except: self.__field_pad4=UNKNOWN(**{'sizeinbytes': 3}) return self.__field_pad4.getvalue() def __setfield_pad4(self, value): if isinstance(value,UNKNOWN): self.__field_pad4=value else: self.__field_pad4=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_pad4(self): del self.__field_pad4 pad4=property(__getfield_pad4, __setfield_pad4, __delfield_pad4, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, "0: Not used, 1: Scheduled, 2: Already Happened") yield ('eventname', self.__field_eventname, None) yield ('pad1', self.__field_pad1, None) yield ('eventname_len', self.__field_eventname_len, None) yield ('start', self.__field_start, "# seconds since Jan 1, 1980 approximately") yield ('end', self.__field_end, None) yield ('location', self.__field_location, None) yield ('pad2', self.__field_pad2, None) yield ('location_len', self.__field_location_len, None) yield ('pad3', self.__field_pad3, None) yield ('alarmdiff', self.__field_alarmdiff, "Displayed alarm time") yield ('period', self.__field_period, "No, Daily, Weekly, Monthly, Yearly") yield ('dom', self.__field_dom, "Day of month for the event") yield ('alarm', self.__field_alarm, None) yield ('serial', self.__field_serial, "Some kind of serial number") yield ('pad4', self.__field_pad4, None) yield ('ringtone', self.__field_ringtone, None) class eventresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventresponse,self).__init__(**dict) if self.__class__ is eventresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=evententry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 436}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,evententry): self.__field_entry=value else: self.__field_entry=evententry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 436}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class eventupdaterequest(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventupdaterequest,self).__init__(**dict) if self.__class__ is eventupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x0c, 'command':0x23}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 436}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyowriteheader(**{'packettype': 0x0c, 'command':0x23}) self.__field_header.readfrombuffer(buf) self.__field_entry=evententry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 436}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x0c, 'command':0x23}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyowriteheader): self.__field_header=value else: self.__field_header=sanyowriteheader(value,**{'packettype': 0x0c, 'command':0x23}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,evententry): self.__field_entry=value else: self.__field_entry=evententry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 436}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 436}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class callalarmrequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmrequest,self).__init__(**dict) if self.__class__ is callalarmrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x24}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x24}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x24}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c, 'command': 0x24}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 501}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class callalarmentry(BaseProtogenClass): __fields=['slot', 'flag', 'dunno1', 'phonenum', 'phonenum_len', 'date', 'period', 'dom', 'datedup', 'name', 'pad1', 'name_len', 'phonenumbertype', 'phonenumberslot', 'serial', 'pad2', 'ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmentry,self).__init__(**dict) if self.__class__ is callalarmentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_dunno1.writetobuffer(buf) self.__field_phonenum.writetobuffer(buf) self.__field_phonenum_len.writetobuffer(buf) self.__field_date.writetobuffer(buf) self.__field_period.writetobuffer(buf) self.__field_dom.writetobuffer(buf) self.__field_datedup.writetobuffer(buf) self.__field_name.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.writetobuffer(buf) self.__field_name_len.writetobuffer(buf) self.__field_phonenumbertype.writetobuffer(buf) self.__field_phonenumberslot.writetobuffer(buf) try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad2.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_dunno1=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_dunno1.readfrombuffer(buf) self.__field_phonenum=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_phonenum.readfrombuffer(buf) self.__field_phonenum_len=UINT(**{'sizeinbytes': 1}) self.__field_phonenum_len.readfrombuffer(buf) self.__field_date=UINT(**{'sizeinbytes': 4}) self.__field_date.readfrombuffer(buf) self.__field_period=UINT(**{'sizeinbytes': 1}) self.__field_period.readfrombuffer(buf) self.__field_dom=UINT(**{'sizeinbytes': 1}) self.__field_dom.readfrombuffer(buf) self.__field_datedup=UINT(**{'sizeinbytes': 4}) self.__field_datedup.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_name.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.readfrombuffer(buf) self.__field_name_len=UINT(**{'sizeinbytes': 1}) self.__field_name_len.readfrombuffer(buf) self.__field_phonenumbertype=UINT(**{'sizeinbytes': 1}) self.__field_phonenumbertype.readfrombuffer(buf) self.__field_phonenumberslot=UINT(**{'sizeinbytes': 2}) self.__field_phonenumberslot.readfrombuffer(buf) self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad2.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, "0: Not used, 1: Scheduled, 2: Already Happened") def __getfield_dunno1(self): try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UINT): self.__field_dunno1=value else: self.__field_dunno1=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, "Related to Snooze?") def __getfield_phonenum(self): return self.__field_phonenum.getvalue() def __setfield_phonenum(self, value): if isinstance(value,USTRING): self.__field_phonenum=value else: self.__field_phonenum=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_phonenum(self): del self.__field_phonenum phonenum=property(__getfield_phonenum, __setfield_phonenum, __delfield_phonenum, None) def __getfield_phonenum_len(self): return self.__field_phonenum_len.getvalue() def __setfield_phonenum_len(self, value): if isinstance(value,UINT): self.__field_phonenum_len=value else: self.__field_phonenum_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_phonenum_len(self): del self.__field_phonenum_len phonenum_len=property(__getfield_phonenum_len, __setfield_phonenum_len, __delfield_phonenum_len, None) def __getfield_date(self): return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,UINT): self.__field_date=value else: self.__field_date=UINT(value,**{'sizeinbytes': 4}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, "# seconds since Jan 1, 1980 approximately") def __getfield_period(self): return self.__field_period.getvalue() def __setfield_period(self, value): if isinstance(value,UINT): self.__field_period=value else: self.__field_period=UINT(value,**{'sizeinbytes': 1}) def __delfield_period(self): del self.__field_period period=property(__getfield_period, __setfield_period, __delfield_period, "No, Daily, Weekly, Monthly, Yearly") def __getfield_dom(self): return self.__field_dom.getvalue() def __setfield_dom(self, value): if isinstance(value,UINT): self.__field_dom=value else: self.__field_dom=UINT(value,**{'sizeinbytes': 1}) def __delfield_dom(self): del self.__field_dom dom=property(__getfield_dom, __setfield_dom, __delfield_dom, "Day of month for the event") def __getfield_datedup(self): return self.__field_datedup.getvalue() def __setfield_datedup(self, value): if isinstance(value,UINT): self.__field_datedup=value else: self.__field_datedup=UINT(value,**{'sizeinbytes': 4}) def __delfield_datedup(self): del self.__field_datedup datedup=property(__getfield_datedup, __setfield_datedup, __delfield_datedup, "Copy of the date. Always the same???") def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_name_len(self): return self.__field_name_len.getvalue() def __setfield_name_len(self, value): if isinstance(value,UINT): self.__field_name_len=value else: self.__field_name_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_name_len(self): del self.__field_name_len name_len=property(__getfield_name_len, __setfield_name_len, __delfield_name_len, None) def __getfield_phonenumbertype(self): return self.__field_phonenumbertype.getvalue() def __setfield_phonenumbertype(self, value): if isinstance(value,UINT): self.__field_phonenumbertype=value else: self.__field_phonenumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_phonenumbertype(self): del self.__field_phonenumbertype phonenumbertype=property(__getfield_phonenumbertype, __setfield_phonenumbertype, __delfield_phonenumbertype, "1: Home, 2: Work, ...") def __getfield_phonenumberslot(self): return self.__field_phonenumberslot.getvalue() def __setfield_phonenumberslot(self, value): if isinstance(value,UINT): self.__field_phonenumberslot=value else: self.__field_phonenumberslot=UINT(value,**{'sizeinbytes': 2}) def __delfield_phonenumberslot(self): del self.__field_phonenumberslot phonenumberslot=property(__getfield_phonenumberslot, __setfield_phonenumberslot, __delfield_phonenumberslot, None) def __getfield_serial(self): try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_serial.getvalue() def __setfield_serial(self, value): if isinstance(value,UINT): self.__field_serial=value else: self.__field_serial=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_serial(self): del self.__field_serial serial=property(__getfield_serial, __setfield_serial, __delfield_serial, None) def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 3}) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, "0: Not used, 1: Scheduled, 2: Already Happened") yield ('dunno1', self.__field_dunno1, "Related to Snooze?") yield ('phonenum', self.__field_phonenum, None) yield ('phonenum_len', self.__field_phonenum_len, None) yield ('date', self.__field_date, "# seconds since Jan 1, 1980 approximately") yield ('period', self.__field_period, "No, Daily, Weekly, Monthly, Yearly") yield ('dom', self.__field_dom, "Day of month for the event") yield ('datedup', self.__field_datedup, "Copy of the date. Always the same???") yield ('name', self.__field_name, None) yield ('pad1', self.__field_pad1, None) yield ('name_len', self.__field_name_len, None) yield ('phonenumbertype', self.__field_phonenumbertype, "1: Home, 2: Work, ...") yield ('phonenumberslot', self.__field_phonenumberslot, None) yield ('serial', self.__field_serial, None) yield ('pad2', self.__field_pad2, None) yield ('ringtone', self.__field_ringtone, None) class callalarmresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmresponse,self).__init__(**dict) if self.__class__ is callalarmresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=callalarmentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 417}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,callalarmentry): self.__field_entry=value else: self.__field_entry=callalarmentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 417}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class callalarmupdaterequest(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmupdaterequest,self).__init__(**dict) if self.__class__ is callalarmupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x0c, 'command':0x24}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 417}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyowriteheader(**{'packettype': 0x0c, 'command':0x24}) self.__field_header.readfrombuffer(buf) self.__field_entry=callalarmentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 417}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x0c, 'command':0x24}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyowriteheader): self.__field_header=value else: self.__field_header=sanyowriteheader(value,**{'packettype': 0x0c, 'command':0x24}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,callalarmentry): self.__field_entry=value else: self.__field_entry=callalarmentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 417}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 417}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class bufferpartrequest(BaseProtogenClass): __fields=['bufpartsize', 'header', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(bufferpartrequest,self).__init__(**dict) if self.__class__ is bufferpartrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(bufferpartrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(bufferpartrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_bufpartsize except: self.__field_bufpartsize=UINT(**{'constant': 1024}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0f}) self.__field_header.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 1026}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x0f}) self.__field_header.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 1026}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_bufpartsize(self): return self.__field_bufpartsize.getvalue() def __setfield_bufpartsize(self, value): if isinstance(value,UINT): self.__field_bufpartsize=value else: self.__field_bufpartsize=UINT(value,**{'constant': 1024}) def __delfield_bufpartsize(self): del self.__field_bufpartsize bufpartsize=property(__getfield_bufpartsize, __setfield_bufpartsize, __delfield_bufpartsize, None) def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0f}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0f}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 1026}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 1026}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('bufpartsize', self.__field_bufpartsize, None) yield ('header', self.__field_header, None) yield ('pad', self.__field_pad, None) class bufferpartresponse(BaseProtogenClass): __fields=['bufpartsize', 'header', 'data', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(bufferpartresponse,self).__init__(**dict) if self.__class__ is bufferpartresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(bufferpartresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(bufferpartresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_bufpartsize except: self.__field_bufpartsize=UINT(**{'constant': 1024}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_data.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_data=DATA(**{'sizeinbytes': self.bufpartsize}) self.__field_data.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_bufpartsize(self): return self.__field_bufpartsize.getvalue() def __setfield_bufpartsize(self, value): if isinstance(value,UINT): self.__field_bufpartsize=value else: self.__field_bufpartsize=UINT(value,**{'constant': 1024}) def __delfield_bufpartsize(self): del self.__field_bufpartsize bufpartsize=property(__getfield_bufpartsize, __setfield_bufpartsize, __delfield_bufpartsize, None) def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_data(self): return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,DATA): self.__field_data=value else: self.__field_data=DATA(value,**{'sizeinbytes': self.bufpartsize}) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 2}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('bufpartsize', self.__field_bufpartsize, None) yield ('header', self.__field_header, None) yield ('data', self.__field_data, None) yield ('pad', self.__field_pad, None) class bufferpartupdaterequest(BaseProtogenClass): __fields=['bufpartsize', 'header', 'data', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(bufferpartupdaterequest,self).__init__(**dict) if self.__class__ is bufferpartupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(bufferpartupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(bufferpartupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_bufpartsize except: self.__field_bufpartsize=UINT(**{'constant': 1024}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x0f}) self.__field_header.writetobuffer(buf) self.__field_data.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyowriteheader(**{'packettype': 0x0f}) self.__field_header.readfrombuffer(buf) self.__field_data=DATA(**{'sizeinbytes': self.bufpartsize}) self.__field_data.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_bufpartsize(self): return self.__field_bufpartsize.getvalue() def __setfield_bufpartsize(self, value): if isinstance(value,UINT): self.__field_bufpartsize=value else: self.__field_bufpartsize=UINT(value,**{'constant': 1024}) def __delfield_bufpartsize(self): del self.__field_bufpartsize bufpartsize=property(__getfield_bufpartsize, __setfield_bufpartsize, __delfield_bufpartsize, None) def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x0f}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyowriteheader): self.__field_header=value else: self.__field_header=sanyowriteheader(value,**{'packettype': 0x0f}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_data(self): return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,DATA): self.__field_data=value else: self.__field_data=DATA(value,**{'sizeinbytes': self.bufpartsize}) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 2}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 2}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('bufpartsize', self.__field_bufpartsize, None) yield ('header', self.__field_header, None) yield ('data', self.__field_data, None) yield ('pad', self.__field_pad, None) class calleridbuffer(BaseProtogenClass): "Index so that phone can show a name instead of number" __fields=['maxentries', 'startcommand', 'bufsize', 'comment', 'numentries', 'items', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(calleridbuffer,self).__init__(**dict) if self.__class__ is calleridbuffer: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(calleridbuffer,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(calleridbuffer,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_maxentries except: self.__field_maxentries=UINT(**{'constant': 500}) try: self.__field_startcommand except: self.__field_startcommand=UINT(**{'constant': 0x46}) try: self.__field_bufsize except: self.__field_bufsize=UINT(**{'constant': 7168}) try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "callerid"}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numentries.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{'length': self.maxentries, 'elementclass': calleridentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 666}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numentries=UINT(**{'sizeinbytes': 2}) self.__field_numentries.readfrombuffer(buf) self.__field_items=LIST(**{'length': self.maxentries, 'elementclass': calleridentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 666}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_maxentries(self): return self.__field_maxentries.getvalue() def __setfield_maxentries(self, value): if isinstance(value,UINT): self.__field_maxentries=value else: self.__field_maxentries=UINT(value,**{'constant': 500}) def __delfield_maxentries(self): del self.__field_maxentries maxentries=property(__getfield_maxentries, __setfield_maxentries, __delfield_maxentries, None) def __getfield_startcommand(self): return self.__field_startcommand.getvalue() def __setfield_startcommand(self, value): if isinstance(value,UINT): self.__field_startcommand=value else: self.__field_startcommand=UINT(value,**{'constant': 0x46}) def __delfield_startcommand(self): del self.__field_startcommand startcommand=property(__getfield_startcommand, __setfield_startcommand, __delfield_startcommand, "Starting command for R/W buf parts") def __getfield_bufsize(self): return self.__field_bufsize.getvalue() def __setfield_bufsize(self, value): if isinstance(value,UINT): self.__field_bufsize=value else: self.__field_bufsize=UINT(value,**{'constant': 7168}) def __delfield_bufsize(self): del self.__field_bufsize bufsize=property(__getfield_bufsize, __setfield_bufsize, __delfield_bufsize, None) def __getfield_comment(self): try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "callerid"}) return self.__field_comment.getvalue() def __setfield_comment(self, value): if isinstance(value,USTRING): self.__field_comment=value else: self.__field_comment=USTRING(value,**{'default': "callerid"}) def __delfield_comment(self): del self.__field_comment comment=property(__getfield_comment, __setfield_comment, __delfield_comment, None) def __getfield_numentries(self): return self.__field_numentries.getvalue() def __setfield_numentries(self, value): if isinstance(value,UINT): self.__field_numentries=value else: self.__field_numentries=UINT(value,**{'sizeinbytes': 2}) def __delfield_numentries(self): del self.__field_numentries numentries=property(__getfield_numentries, __setfield_numentries, __delfield_numentries, "Number phone numbers") def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'length': self.maxentries, 'elementclass': calleridentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'length': self.maxentries, 'elementclass': calleridentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 666}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 666}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('maxentries', self.__field_maxentries, None) yield ('startcommand', self.__field_startcommand, "Starting command for R/W buf parts") yield ('bufsize', self.__field_bufsize, None) yield ('comment', self.__field_comment, None) yield ('numentries', self.__field_numentries, "Number phone numbers") yield ('items', self.__field_items, None) yield ('pad', self.__field_pad, None) class ringerpicbuffer(BaseProtogenClass): "Index of ringer and picture assignments" __fields=['numpbslots', 'startcommand', 'packettype', 'bufsize', 'comment', 'ringtones', 'wallpapers', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ringerpicbuffer,self).__init__(**dict) if self.__class__ is ringerpicbuffer: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ringerpicbuffer,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ringerpicbuffer,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_numpbslots except: self.__field_numpbslots=UINT(**{'constant': _NUMPBSLOTS}) try: self.__field_startcommand except: self.__field_startcommand=UINT(**{'constant': 0xd7}) try: self.__field_packettype except: self.__field_packettype=UINT(**{'constant': 0x0f}) try: self.__field_bufsize except: self.__field_bufsize=UINT(**{'constant': 1024}) try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "ringer/picture assignments"}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_ringtones except: self.__field_ringtones=LIST(**{'elementclass': _gen_p_sanyonewer_234, 'length': _NUMPBSLOTS}) self.__field_ringtones.writetobuffer(buf) try: self.__field_wallpapers except: self.__field_wallpapers=LIST(**{'elementclass': _gen_p_sanyonewer_236, 'length': _NUMPBSLOTS}) self.__field_wallpapers.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 424}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_ringtones=LIST(**{'elementclass': _gen_p_sanyonewer_234, 'length': _NUMPBSLOTS}) self.__field_ringtones.readfrombuffer(buf) self.__field_wallpapers=LIST(**{'elementclass': _gen_p_sanyonewer_236, 'length': _NUMPBSLOTS}) self.__field_wallpapers.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 424}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numpbslots(self): return self.__field_numpbslots.getvalue() def __setfield_numpbslots(self, value): if isinstance(value,UINT): self.__field_numpbslots=value else: self.__field_numpbslots=UINT(value,**{'constant': _NUMPBSLOTS}) def __delfield_numpbslots(self): del self.__field_numpbslots numpbslots=property(__getfield_numpbslots, __setfield_numpbslots, __delfield_numpbslots, "Number of phone book slots") def __getfield_startcommand(self): return self.__field_startcommand.getvalue() def __setfield_startcommand(self, value): if isinstance(value,UINT): self.__field_startcommand=value else: self.__field_startcommand=UINT(value,**{'constant': 0xd7}) def __delfield_startcommand(self): del self.__field_startcommand startcommand=property(__getfield_startcommand, __setfield_startcommand, __delfield_startcommand, "Starting command for R/W buf parts") def __getfield_packettype(self): return self.__field_packettype.getvalue() def __setfield_packettype(self, value): if isinstance(value,UINT): self.__field_packettype=value else: self.__field_packettype=UINT(value,**{'constant': 0x0f}) def __delfield_packettype(self): del self.__field_packettype packettype=property(__getfield_packettype, __setfield_packettype, __delfield_packettype, "Non standard packet type") def __getfield_bufsize(self): return self.__field_bufsize.getvalue() def __setfield_bufsize(self, value): if isinstance(value,UINT): self.__field_bufsize=value else: self.__field_bufsize=UINT(value,**{'constant': 1024}) def __delfield_bufsize(self): del self.__field_bufsize bufsize=property(__getfield_bufsize, __setfield_bufsize, __delfield_bufsize, None) def __getfield_comment(self): try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "ringer/picture assignments"}) return self.__field_comment.getvalue() def __setfield_comment(self, value): if isinstance(value,USTRING): self.__field_comment=value else: self.__field_comment=USTRING(value,**{'default': "ringer/picture assignments"}) def __delfield_comment(self): del self.__field_comment comment=property(__getfield_comment, __setfield_comment, __delfield_comment, None) def __getfield_ringtones(self): try: self.__field_ringtones except: self.__field_ringtones=LIST(**{'elementclass': _gen_p_sanyonewer_234, 'length': _NUMPBSLOTS}) return self.__field_ringtones.getvalue() def __setfield_ringtones(self, value): if isinstance(value,LIST): self.__field_ringtones=value else: self.__field_ringtones=LIST(value,**{'elementclass': _gen_p_sanyonewer_234, 'length': _NUMPBSLOTS}) def __delfield_ringtones(self): del self.__field_ringtones ringtones=property(__getfield_ringtones, __setfield_ringtones, __delfield_ringtones, None) def __getfield_wallpapers(self): try: self.__field_wallpapers except: self.__field_wallpapers=LIST(**{'elementclass': _gen_p_sanyonewer_236, 'length': _NUMPBSLOTS}) return self.__field_wallpapers.getvalue() def __setfield_wallpapers(self, value): if isinstance(value,LIST): self.__field_wallpapers=value else: self.__field_wallpapers=LIST(value,**{'elementclass': _gen_p_sanyonewer_236, 'length': _NUMPBSLOTS}) def __delfield_wallpapers(self): del self.__field_wallpapers wallpapers=property(__getfield_wallpapers, __setfield_wallpapers, __delfield_wallpapers, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 424}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 424}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('numpbslots', self.__field_numpbslots, "Number of phone book slots") yield ('startcommand', self.__field_startcommand, "Starting command for R/W buf parts") yield ('packettype', self.__field_packettype, "Non standard packet type") yield ('bufsize', self.__field_bufsize, None) yield ('comment', self.__field_comment, None) yield ('ringtones', self.__field_ringtones, None) yield ('wallpapers', self.__field_wallpapers, None) yield ('pad', self.__field_pad, None) class _gen_p_sanyonewer_234(BaseProtogenClass): 'Anonymous inner class' __fields=['ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyonewer_234,self).__init__(**dict) if self.__class__ is _gen_p_sanyonewer_234: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyonewer_234,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyonewer_234,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_ringtone=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_ringtone.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "ringtone index") def iscontainer(self): return True def containerelements(self): yield ('ringtone', self.__field_ringtone, "ringtone index") class _gen_p_sanyonewer_236(BaseProtogenClass): 'Anonymous inner class' __fields=['wallpaper'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyonewer_236,self).__init__(**dict) if self.__class__ is _gen_p_sanyonewer_236: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyonewer_236,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyonewer_236,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_wallpaper=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_wallpaper.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_wallpaper=UINT(**{'sizeinbytes': 1}) self.__field_wallpaper.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 1}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, "wallpaper index") def iscontainer(self): return True def containerelements(self): yield ('wallpaper', self.__field_wallpaper, "wallpaper index") class pbsortbuffer(BaseProtogenClass): "Various arrays for sorting the phone book, speed dial, determining which" __fields=['startcommand', 'bufsize', 'comment', 'usedflags', 'slotsused', 'slotsused2', 'numemail', 'numurl', 'firsttypes', 'sortorder', 'pbfirstletters', 'sortorder2', 'speeddialindex', 'longnumbersindex', 'emails', 'emailfirstletters', 'urls', 'urlfirstletters', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbsortbuffer,self).__init__(**dict) if self.__class__ is pbsortbuffer: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbsortbuffer,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbsortbuffer,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_startcommand except: self.__field_startcommand=UINT(**{'constant': 0x3c}) try: self.__field_bufsize except: self.__field_bufsize=UINT(**{'constant': 4096}) try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "sort buffer"}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_usedflags except: self.__field_usedflags=LIST(**{'elementclass': _gen_p_sanyonewer_257, 'length': _NUMPBSLOTS, 'createdefault': True}) self.__field_usedflags.writetobuffer(buf) self.__field_slotsused.writetobuffer(buf) self.__field_slotsused2.writetobuffer(buf) self.__field_numemail.writetobuffer(buf) self.__field_numurl.writetobuffer(buf) try: self.__field_firsttypes except: self.__field_firsttypes=LIST(**{'elementclass': _gen_p_sanyonewer_263, 'length': _NUMPBSLOTS}) self.__field_firsttypes.writetobuffer(buf) try: self.__field_sortorder except: self.__field_sortorder=LIST(**{'elementclass': _gen_p_sanyonewer_265, 'length': _NUMPBSLOTS}) self.__field_sortorder.writetobuffer(buf) self.__field_pbfirstletters.writetobuffer(buf) try: self.__field_sortorder2 except: self.__field_sortorder2=LIST(**{'elementclass': _gen_p_sanyonewer_268, 'length': _NUMPBSLOTS}) self.__field_sortorder2.writetobuffer(buf) try: self.__field_speeddialindex except: self.__field_speeddialindex=LIST(**{'elementclass': _gen_p_sanyonewer_270, 'length': _NUMSPEEDDIALS}) self.__field_speeddialindex.writetobuffer(buf) try: self.__field_longnumbersindex except: self.__field_longnumbersindex=LIST(**{'elementclass': _gen_p_sanyonewer_272, 'length': _NUMLONGNUMBERS}) self.__field_longnumbersindex.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_sanyonewer_274, 'length': _NUMPBSLOTS}) self.__field_emails.writetobuffer(buf) self.__field_emailfirstletters.writetobuffer(buf) try: self.__field_urls except: self.__field_urls=LIST(**{'elementclass': _gen_p_sanyonewer_277, 'length': _NUMPBSLOTS}) self.__field_urls.writetobuffer(buf) self.__field_urlfirstletters.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 162}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_usedflags=LIST(**{'elementclass': _gen_p_sanyonewer_257, 'length': _NUMPBSLOTS, 'createdefault': True}) self.__field_usedflags.readfrombuffer(buf) self.__field_slotsused=UINT(**{'sizeinbytes': 2}) self.__field_slotsused.readfrombuffer(buf) self.__field_slotsused2=UINT(**{'sizeinbytes': 2}) self.__field_slotsused2.readfrombuffer(buf) self.__field_numemail=UINT(**{'sizeinbytes': 2}) self.__field_numemail.readfrombuffer(buf) self.__field_numurl=UINT(**{'sizeinbytes': 2}) self.__field_numurl.readfrombuffer(buf) self.__field_firsttypes=LIST(**{'elementclass': _gen_p_sanyonewer_263, 'length': _NUMPBSLOTS}) self.__field_firsttypes.readfrombuffer(buf) self.__field_sortorder=LIST(**{'elementclass': _gen_p_sanyonewer_265, 'length': _NUMPBSLOTS}) self.__field_sortorder.readfrombuffer(buf) self.__field_pbfirstletters=USTRING(**{'terminator': None, 'sizeinbytes': _NUMPBSLOTS}) self.__field_pbfirstletters.readfrombuffer(buf) self.__field_sortorder2=LIST(**{'elementclass': _gen_p_sanyonewer_268, 'length': _NUMPBSLOTS}) self.__field_sortorder2.readfrombuffer(buf) self.__field_speeddialindex=LIST(**{'elementclass': _gen_p_sanyonewer_270, 'length': _NUMSPEEDDIALS}) self.__field_speeddialindex.readfrombuffer(buf) self.__field_longnumbersindex=LIST(**{'elementclass': _gen_p_sanyonewer_272, 'length': _NUMLONGNUMBERS}) self.__field_longnumbersindex.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_sanyonewer_274, 'length': _NUMPBSLOTS}) self.__field_emails.readfrombuffer(buf) self.__field_emailfirstletters=USTRING(**{'terminator': None, 'sizeinbytes': _NUMPBSLOTS}) self.__field_emailfirstletters.readfrombuffer(buf) self.__field_urls=LIST(**{'elementclass': _gen_p_sanyonewer_277, 'length': _NUMPBSLOTS}) self.__field_urls.readfrombuffer(buf) self.__field_urlfirstletters=USTRING(**{'terminator': None, 'sizeinbytes': _NUMPBSLOTS}) self.__field_urlfirstletters.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 162}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_startcommand(self): return self.__field_startcommand.getvalue() def __setfield_startcommand(self, value): if isinstance(value,UINT): self.__field_startcommand=value else: self.__field_startcommand=UINT(value,**{'constant': 0x3c}) def __delfield_startcommand(self): del self.__field_startcommand startcommand=property(__getfield_startcommand, __setfield_startcommand, __delfield_startcommand, "Starting command for R/W buf parts") def __getfield_bufsize(self): return self.__field_bufsize.getvalue() def __setfield_bufsize(self, value): if isinstance(value,UINT): self.__field_bufsize=value else: self.__field_bufsize=UINT(value,**{'constant': 4096}) def __delfield_bufsize(self): del self.__field_bufsize bufsize=property(__getfield_bufsize, __setfield_bufsize, __delfield_bufsize, None) def __getfield_comment(self): try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "sort buffer"}) return self.__field_comment.getvalue() def __setfield_comment(self, value): if isinstance(value,USTRING): self.__field_comment=value else: self.__field_comment=USTRING(value,**{'default': "sort buffer"}) def __delfield_comment(self): del self.__field_comment comment=property(__getfield_comment, __setfield_comment, __delfield_comment, None) def __getfield_usedflags(self): try: self.__field_usedflags except: self.__field_usedflags=LIST(**{'elementclass': _gen_p_sanyonewer_257, 'length': _NUMPBSLOTS, 'createdefault': True}) return self.__field_usedflags.getvalue() def __setfield_usedflags(self, value): if isinstance(value,LIST): self.__field_usedflags=value else: self.__field_usedflags=LIST(value,**{'elementclass': _gen_p_sanyonewer_257, 'length': _NUMPBSLOTS, 'createdefault': True}) def __delfield_usedflags(self): del self.__field_usedflags usedflags=property(__getfield_usedflags, __setfield_usedflags, __delfield_usedflags, None) def __getfield_slotsused(self): return self.__field_slotsused.getvalue() def __setfield_slotsused(self, value): if isinstance(value,UINT): self.__field_slotsused=value else: self.__field_slotsused=UINT(value,**{'sizeinbytes': 2}) def __delfield_slotsused(self): del self.__field_slotsused slotsused=property(__getfield_slotsused, __setfield_slotsused, __delfield_slotsused, None) def __getfield_slotsused2(self): return self.__field_slotsused2.getvalue() def __setfield_slotsused2(self, value): if isinstance(value,UINT): self.__field_slotsused2=value else: self.__field_slotsused2=UINT(value,**{'sizeinbytes': 2}) def __delfield_slotsused2(self): del self.__field_slotsused2 slotsused2=property(__getfield_slotsused2, __setfield_slotsused2, __delfield_slotsused2, "Always seems to be the same. Why duplicated?") def __getfield_numemail(self): return self.__field_numemail.getvalue() def __setfield_numemail(self, value): if isinstance(value,UINT): self.__field_numemail=value else: self.__field_numemail=UINT(value,**{'sizeinbytes': 2}) def __delfield_numemail(self): del self.__field_numemail numemail=property(__getfield_numemail, __setfield_numemail, __delfield_numemail, "Num of slots with email") def __getfield_numurl(self): return self.__field_numurl.getvalue() def __setfield_numurl(self, value): if isinstance(value,UINT): self.__field_numurl=value else: self.__field_numurl=UINT(value,**{'sizeinbytes': 2}) def __delfield_numurl(self): del self.__field_numurl numurl=property(__getfield_numurl, __setfield_numurl, __delfield_numurl, "Num of slots with URL") def __getfield_firsttypes(self): try: self.__field_firsttypes except: self.__field_firsttypes=LIST(**{'elementclass': _gen_p_sanyonewer_263, 'length': _NUMPBSLOTS}) return self.__field_firsttypes.getvalue() def __setfield_firsttypes(self, value): if isinstance(value,LIST): self.__field_firsttypes=value else: self.__field_firsttypes=LIST(value,**{'elementclass': _gen_p_sanyonewer_263, 'length': _NUMPBSLOTS}) def __delfield_firsttypes(self): del self.__field_firsttypes firsttypes=property(__getfield_firsttypes, __setfield_firsttypes, __delfield_firsttypes, None) def __getfield_sortorder(self): try: self.__field_sortorder except: self.__field_sortorder=LIST(**{'elementclass': _gen_p_sanyonewer_265, 'length': _NUMPBSLOTS}) return self.__field_sortorder.getvalue() def __setfield_sortorder(self, value): if isinstance(value,LIST): self.__field_sortorder=value else: self.__field_sortorder=LIST(value,**{'elementclass': _gen_p_sanyonewer_265, 'length': _NUMPBSLOTS}) def __delfield_sortorder(self): del self.__field_sortorder sortorder=property(__getfield_sortorder, __setfield_sortorder, __delfield_sortorder, None) def __getfield_pbfirstletters(self): return self.__field_pbfirstletters.getvalue() def __setfield_pbfirstletters(self, value): if isinstance(value,USTRING): self.__field_pbfirstletters=value else: self.__field_pbfirstletters=USTRING(value,**{'terminator': None, 'sizeinbytes': _NUMPBSLOTS}) def __delfield_pbfirstletters(self): del self.__field_pbfirstletters pbfirstletters=property(__getfield_pbfirstletters, __setfield_pbfirstletters, __delfield_pbfirstletters, None) def __getfield_sortorder2(self): try: self.__field_sortorder2 except: self.__field_sortorder2=LIST(**{'elementclass': _gen_p_sanyonewer_268, 'length': _NUMPBSLOTS}) return self.__field_sortorder2.getvalue() def __setfield_sortorder2(self, value): if isinstance(value,LIST): self.__field_sortorder2=value else: self.__field_sortorder2=LIST(value,**{'elementclass': _gen_p_sanyonewer_268, 'length': _NUMPBSLOTS}) def __delfield_sortorder2(self): del self.__field_sortorder2 sortorder2=property(__getfield_sortorder2, __setfield_sortorder2, __delfield_sortorder2, "Is this the same") def __getfield_speeddialindex(self): try: self.__field_speeddialindex except: self.__field_speeddialindex=LIST(**{'elementclass': _gen_p_sanyonewer_270, 'length': _NUMSPEEDDIALS}) return self.__field_speeddialindex.getvalue() def __setfield_speeddialindex(self, value): if isinstance(value,LIST): self.__field_speeddialindex=value else: self.__field_speeddialindex=LIST(value,**{'elementclass': _gen_p_sanyonewer_270, 'length': _NUMSPEEDDIALS}) def __delfield_speeddialindex(self): del self.__field_speeddialindex speeddialindex=property(__getfield_speeddialindex, __setfield_speeddialindex, __delfield_speeddialindex, None) def __getfield_longnumbersindex(self): try: self.__field_longnumbersindex except: self.__field_longnumbersindex=LIST(**{'elementclass': _gen_p_sanyonewer_272, 'length': _NUMLONGNUMBERS}) return self.__field_longnumbersindex.getvalue() def __setfield_longnumbersindex(self, value): if isinstance(value,LIST): self.__field_longnumbersindex=value else: self.__field_longnumbersindex=LIST(value,**{'elementclass': _gen_p_sanyonewer_272, 'length': _NUMLONGNUMBERS}) def __delfield_longnumbersindex(self): del self.__field_longnumbersindex longnumbersindex=property(__getfield_longnumbersindex, __setfield_longnumbersindex, __delfield_longnumbersindex, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_sanyonewer_274, 'length': _NUMPBSLOTS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_sanyonewer_274, 'length': _NUMPBSLOTS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, "Sorted list of slots with Email") def __getfield_emailfirstletters(self): return self.__field_emailfirstletters.getvalue() def __setfield_emailfirstletters(self, value): if isinstance(value,USTRING): self.__field_emailfirstletters=value else: self.__field_emailfirstletters=USTRING(value,**{'terminator': None, 'sizeinbytes': _NUMPBSLOTS}) def __delfield_emailfirstletters(self): del self.__field_emailfirstletters emailfirstletters=property(__getfield_emailfirstletters, __setfield_emailfirstletters, __delfield_emailfirstletters, "First letters in sort order") def __getfield_urls(self): try: self.__field_urls except: self.__field_urls=LIST(**{'elementclass': _gen_p_sanyonewer_277, 'length': _NUMPBSLOTS}) return self.__field_urls.getvalue() def __setfield_urls(self, value): if isinstance(value,LIST): self.__field_urls=value else: self.__field_urls=LIST(value,**{'elementclass': _gen_p_sanyonewer_277, 'length': _NUMPBSLOTS}) def __delfield_urls(self): del self.__field_urls urls=property(__getfield_urls, __setfield_urls, __delfield_urls, "Sorted list of slots with a URL") def __getfield_urlfirstletters(self): return self.__field_urlfirstletters.getvalue() def __setfield_urlfirstletters(self, value): if isinstance(value,USTRING): self.__field_urlfirstletters=value else: self.__field_urlfirstletters=USTRING(value,**{'terminator': None, 'sizeinbytes': _NUMPBSLOTS}) def __delfield_urlfirstletters(self): del self.__field_urlfirstletters urlfirstletters=property(__getfield_urlfirstletters, __setfield_urlfirstletters, __delfield_urlfirstletters, "First letters in sort order") def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 162}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 162}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('startcommand', self.__field_startcommand, "Starting command for R/W buf parts") yield ('bufsize', self.__field_bufsize, None) yield ('comment', self.__field_comment, None) yield ('usedflags', self.__field_usedflags, None) yield ('slotsused', self.__field_slotsused, None) yield ('slotsused2', self.__field_slotsused2, "Always seems to be the same. Why duplicated?") yield ('numemail', self.__field_numemail, "Num of slots with email") yield ('numurl', self.__field_numurl, "Num of slots with URL") yield ('firsttypes', self.__field_firsttypes, None) yield ('sortorder', self.__field_sortorder, None) yield ('pbfirstletters', self.__field_pbfirstletters, None) yield ('sortorder2', self.__field_sortorder2, "Is this the same") yield ('speeddialindex', self.__field_speeddialindex, None) yield ('longnumbersindex', self.__field_longnumbersindex, None) yield ('emails', self.__field_emails, "Sorted list of slots with Email") yield ('emailfirstletters', self.__field_emailfirstletters, "First letters in sort order") yield ('urls', self.__field_urls, "Sorted list of slots with a URL") yield ('urlfirstletters', self.__field_urlfirstletters, "First letters in sort order") yield ('pad', self.__field_pad, None) class _gen_p_sanyonewer_257(BaseProtogenClass): 'Anonymous inner class' __fields=['used'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyonewer_257,self).__init__(**dict) if self.__class__ is _gen_p_sanyonewer_257: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyonewer_257,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyonewer_257,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_used=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_used.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_used=UINT(**{'sizeinbytes': 1}) self.__field_used.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_used(self): return self.__field_used.getvalue() def __setfield_used(self, value): if isinstance(value,UINT): self.__field_used=value else: self.__field_used=UINT(value,**{'sizeinbytes': 1}) def __delfield_used(self): del self.__field_used used=property(__getfield_used, __setfield_used, __delfield_used, "1 if slot in use") def iscontainer(self): return True def containerelements(self): yield ('used', self.__field_used, "1 if slot in use") class _gen_p_sanyonewer_263(BaseProtogenClass): 'Anonymous inner class' __fields=['firsttype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyonewer_263,self).__init__(**dict) if self.__class__ is _gen_p_sanyonewer_263: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyonewer_263,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyonewer_263,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_firsttype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_firsttype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_firsttype=UINT(**{'sizeinbytes': 1}) self.__field_firsttype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_firsttype(self): return self.__field_firsttype.getvalue() def __setfield_firsttype(self, value): if isinstance(value,UINT): self.__field_firsttype=value else: self.__field_firsttype=UINT(value,**{'sizeinbytes': 1}) def __delfield_firsttype(self): del self.__field_firsttype firsttype=property(__getfield_firsttype, __setfield_firsttype, __delfield_firsttype, "First phone number type in each slot") def iscontainer(self): return True def containerelements(self): yield ('firsttype', self.__field_firsttype, "First phone number type in each slot") class _gen_p_sanyonewer_265(BaseProtogenClass): 'Anonymous inner class' __fields=['pbslot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyonewer_265,self).__init__(**dict) if self.__class__ is _gen_p_sanyonewer_265: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyonewer_265,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyonewer_265,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_pbslot=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pbslot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbslot=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbslot(self): return self.__field_pbslot.getvalue() def __setfield_pbslot(self, value): if isinstance(value,UINT): self.__field_pbslot=value else: self.__field_pbslot=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pbslot(self): del self.__field_pbslot pbslot=property(__getfield_pbslot, __setfield_pbslot, __delfield_pbslot, None) def iscontainer(self): return True def containerelements(self): yield ('pbslot', self.__field_pbslot, None) class _gen_p_sanyonewer_268(BaseProtogenClass): 'Anonymous inner class' __fields=['pbslot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyonewer_268,self).__init__(**dict) if self.__class__ is _gen_p_sanyonewer_268: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyonewer_268,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyonewer_268,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_pbslot=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pbslot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbslot=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbslot(self): return self.__field_pbslot.getvalue() def __setfield_pbslot(self, value): if isinstance(value,UINT): self.__field_pbslot=value else: self.__field_pbslot=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pbslot(self): del self.__field_pbslot pbslot=property(__getfield_pbslot, __setfield_pbslot, __delfield_pbslot, None) def iscontainer(self): return True def containerelements(self): yield ('pbslot', self.__field_pbslot, None) class _gen_p_sanyonewer_270(BaseProtogenClass): 'Anonymous inner class' __fields=['pbslotandtype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyonewer_270,self).__init__(**dict) if self.__class__ is _gen_p_sanyonewer_270: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyonewer_270,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyonewer_270,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_pbslotandtype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pbslotandtype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbslotandtype=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslotandtype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbslotandtype(self): return self.__field_pbslotandtype.getvalue() def __setfield_pbslotandtype(self, value): if isinstance(value,UINT): self.__field_pbslotandtype=value else: self.__field_pbslotandtype=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pbslotandtype(self): del self.__field_pbslotandtype pbslotandtype=property(__getfield_pbslotandtype, __setfield_pbslotandtype, __delfield_pbslotandtype, None) def iscontainer(self): return True def containerelements(self): yield ('pbslotandtype', self.__field_pbslotandtype, None) class _gen_p_sanyonewer_272(BaseProtogenClass): 'Anonymous inner class' __fields=['pbslotandtype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyonewer_272,self).__init__(**dict) if self.__class__ is _gen_p_sanyonewer_272: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyonewer_272,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyonewer_272,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_pbslotandtype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pbslotandtype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbslotandtype=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslotandtype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbslotandtype(self): return self.__field_pbslotandtype.getvalue() def __setfield_pbslotandtype(self, value): if isinstance(value,UINT): self.__field_pbslotandtype=value else: self.__field_pbslotandtype=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pbslotandtype(self): del self.__field_pbslotandtype pbslotandtype=property(__getfield_pbslotandtype, __setfield_pbslotandtype, __delfield_pbslotandtype, None) def iscontainer(self): return True def containerelements(self): yield ('pbslotandtype', self.__field_pbslotandtype, None) class _gen_p_sanyonewer_274(BaseProtogenClass): 'Anonymous inner class' __fields=['pbslot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyonewer_274,self).__init__(**dict) if self.__class__ is _gen_p_sanyonewer_274: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyonewer_274,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyonewer_274,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_pbslot=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pbslot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbslot=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbslot(self): return self.__field_pbslot.getvalue() def __setfield_pbslot(self, value): if isinstance(value,UINT): self.__field_pbslot=value else: self.__field_pbslot=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pbslot(self): del self.__field_pbslot pbslot=property(__getfield_pbslot, __setfield_pbslot, __delfield_pbslot, None) def iscontainer(self): return True def containerelements(self): yield ('pbslot', self.__field_pbslot, None) class _gen_p_sanyonewer_277(BaseProtogenClass): 'Anonymous inner class' __fields=['pbslot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyonewer_277,self).__init__(**dict) if self.__class__ is _gen_p_sanyonewer_277: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyonewer_277,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyonewer_277,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_pbslot=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pbslot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbslot=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbslot(self): return self.__field_pbslot.getvalue() def __setfield_pbslot(self, value): if isinstance(value,UINT): self.__field_pbslot=value else: self.__field_pbslot=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pbslot(self): del self.__field_pbslot pbslot=property(__getfield_pbslot, __setfield_pbslot, __delfield_pbslot, None) def iscontainer(self): return True def containerelements(self): yield ('pbslot', self.__field_pbslot, None) class wallpaperbuffer(BaseProtogenClass): "Addition buffer of wallpaper assignment info" __fields=['numpbslots', 'startcommand', 'bufsize', 'comment', 'wallpapers', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(wallpaperbuffer,self).__init__(**dict) if self.__class__ is wallpaperbuffer: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(wallpaperbuffer,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(wallpaperbuffer,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_numpbslots except: self.__field_numpbslots=UINT(**{'constant': _NUMPBSLOTS}) try: self.__field_startcommand except: self.__field_startcommand=UINT(**{'constant': 0x69}) try: self.__field_bufsize except: self.__field_bufsize=UINT(**{'constant': 2048}) try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "wallpaper assignment info"}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_wallpapers except: self.__field_wallpapers=LIST(**{'length': _NUMPBSLOTS, 'elementclass': wallpaperinfo}) self.__field_wallpapers.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 548}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_wallpapers=LIST(**{'length': _NUMPBSLOTS, 'elementclass': wallpaperinfo}) self.__field_wallpapers.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 548}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numpbslots(self): return self.__field_numpbslots.getvalue() def __setfield_numpbslots(self, value): if isinstance(value,UINT): self.__field_numpbslots=value else: self.__field_numpbslots=UINT(value,**{'constant': _NUMPBSLOTS}) def __delfield_numpbslots(self): del self.__field_numpbslots numpbslots=property(__getfield_numpbslots, __setfield_numpbslots, __delfield_numpbslots, "Number of phone book slots") def __getfield_startcommand(self): return self.__field_startcommand.getvalue() def __setfield_startcommand(self, value): if isinstance(value,UINT): self.__field_startcommand=value else: self.__field_startcommand=UINT(value,**{'constant': 0x69}) def __delfield_startcommand(self): del self.__field_startcommand startcommand=property(__getfield_startcommand, __setfield_startcommand, __delfield_startcommand, "Starting command for R/W buf parts") def __getfield_bufsize(self): return self.__field_bufsize.getvalue() def __setfield_bufsize(self, value): if isinstance(value,UINT): self.__field_bufsize=value else: self.__field_bufsize=UINT(value,**{'constant': 2048}) def __delfield_bufsize(self): del self.__field_bufsize bufsize=property(__getfield_bufsize, __setfield_bufsize, __delfield_bufsize, None) def __getfield_comment(self): try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "wallpaper assignment info"}) return self.__field_comment.getvalue() def __setfield_comment(self, value): if isinstance(value,USTRING): self.__field_comment=value else: self.__field_comment=USTRING(value,**{'default': "wallpaper assignment info"}) def __delfield_comment(self): del self.__field_comment comment=property(__getfield_comment, __setfield_comment, __delfield_comment, None) def __getfield_wallpapers(self): try: self.__field_wallpapers except: self.__field_wallpapers=LIST(**{'length': _NUMPBSLOTS, 'elementclass': wallpaperinfo}) return self.__field_wallpapers.getvalue() def __setfield_wallpapers(self, value): if isinstance(value,LIST): self.__field_wallpapers=value else: self.__field_wallpapers=LIST(value,**{'length': _NUMPBSLOTS, 'elementclass': wallpaperinfo}) def __delfield_wallpapers(self): del self.__field_wallpapers wallpapers=property(__getfield_wallpapers, __setfield_wallpapers, __delfield_wallpapers, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 548}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 548}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('numpbslots', self.__field_numpbslots, "Number of phone book slots") yield ('startcommand', self.__field_startcommand, "Starting command for R/W buf parts") yield ('bufsize', self.__field_bufsize, None) yield ('comment', self.__field_comment, None) yield ('wallpapers', self.__field_wallpapers, None) yield ('pad', self.__field_pad, None) class messagerequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(messagerequest,self).__init__(**dict) if self.__class__ is messagerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(messagerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(messagerequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0xe1}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0xe1}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0xe1}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c, 'command': 0xe1}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 501}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class messagesentrequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(messagesentrequest,self).__init__(**dict) if self.__class__ is messagesentrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(messagesentrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(messagesentrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0d, 'command': 0x55}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x0d, 'command': 0x55}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0d, 'command': 0x55}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0d, 'command': 0x55}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 501}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class messageentry(BaseProtogenClass): __fields=['slot', 'read', 'counter', 'pad1', 'dunno1', 'dunno2', 'dunno3', 'pad2', 'dunno4', 'dunno5', 'pad3', 'message_len', 'message', 'pad4', 'year', 'month', 'day', 'hour', 'minute', 'second', 'callback_len', 'callback', 'phonenum_len', 'phonenum', 'dunno6', 'priority', 'pad6', 'dunno7', 'dunno8'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(messageentry,self).__init__(**dict) if self.__class__ is messageentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(messageentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(messageentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_counter.writetobuffer(buf) self.__field_pad1.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_dunno3.writetobuffer(buf) self.__field_pad2.writetobuffer(buf) self.__field_dunno4.writetobuffer(buf) self.__field_dunno5.writetobuffer(buf) self.__field_pad3.writetobuffer(buf) self.__field_message_len.writetobuffer(buf) self.__field_message.writetobuffer(buf) self.__field_pad4.writetobuffer(buf) self.__field_year.writetobuffer(buf) self.__field_month.writetobuffer(buf) self.__field_day.writetobuffer(buf) self.__field_hour.writetobuffer(buf) self.__field_minute.writetobuffer(buf) self.__field_second.writetobuffer(buf) self.__field_callback_len.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_phonenum_len.writetobuffer(buf) self.__field_phonenum.writetobuffer(buf) self.__field_dunno6.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_pad6.writetobuffer(buf) self.__field_dunno7.writetobuffer(buf) self.__field_dunno8.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 1}) self.__field_read.readfrombuffer(buf) self.__field_counter=UINT(**{'sizeinbytes': 1}) self.__field_counter.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad1.readfrombuffer(buf) self.__field_dunno1=UINT(**{'sizeinbytes': 1}) self.__field_dunno1.readfrombuffer(buf) self.__field_dunno2=UINT(**{'sizeinbytes': 1}) self.__field_dunno2.readfrombuffer(buf) self.__field_dunno3=UINT(**{'sizeinbytes': 1}) self.__field_dunno3.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad2.readfrombuffer(buf) self.__field_dunno4=UINT(**{'sizeinbytes': 1}) self.__field_dunno4.readfrombuffer(buf) self.__field_dunno5=UINT(**{'sizeinbytes': 1}) self.__field_dunno5.readfrombuffer(buf) self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad3.readfrombuffer(buf) self.__field_message_len=UINT(**{'sizeinbytes': 1}) self.__field_message_len.readfrombuffer(buf) self.__field_message=USTRING(**{'sizeinbytes': 255}) self.__field_message.readfrombuffer(buf) self.__field_pad4=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad4.readfrombuffer(buf) self.__field_year=UINT(**{'sizeinbytes': 1}) self.__field_year.readfrombuffer(buf) self.__field_month=UINT(**{'sizeinbytes': 1}) self.__field_month.readfrombuffer(buf) self.__field_day=UINT(**{'sizeinbytes': 1}) self.__field_day.readfrombuffer(buf) self.__field_hour=UINT(**{'sizeinbytes': 1}) self.__field_hour.readfrombuffer(buf) self.__field_minute=UINT(**{'sizeinbytes': 1}) self.__field_minute.readfrombuffer(buf) self.__field_second=UINT(**{'sizeinbytes': 1}) self.__field_second.readfrombuffer(buf) self.__field_callback_len=UINT(**{'sizeinbytes': 1}) self.__field_callback_len.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 34}) self.__field_callback.readfrombuffer(buf) self.__field_phonenum_len=UINT(**{'sizeinbytes': 1}) self.__field_phonenum_len.readfrombuffer(buf) self.__field_phonenum=USTRING(**{'sizeinbytes': 37}) self.__field_phonenum.readfrombuffer(buf) self.__field_dunno6=UINT(**{'sizeinbytes': 1}) self.__field_dunno6.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_pad6=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad6.readfrombuffer(buf) self.__field_dunno7=UINT(**{'sizeinbytes': 1}) self.__field_dunno7.readfrombuffer(buf) self.__field_dunno8=UINT(**{'sizeinbytes': 1}) self.__field_dunno8.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 1}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_counter(self): return self.__field_counter.getvalue() def __setfield_counter(self, value): if isinstance(value,UINT): self.__field_counter=value else: self.__field_counter=UINT(value,**{'sizeinbytes': 1}) def __delfield_counter(self): del self.__field_counter counter=property(__getfield_counter, __setfield_counter, __delfield_counter, None) def __getfield_pad1(self): return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UINT): self.__field_dunno1=value else: self.__field_dunno1=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UINT): self.__field_dunno2=value else: self.__field_dunno2=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_dunno3(self): return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,UINT): self.__field_dunno3=value else: self.__field_dunno3=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_pad2(self): return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_dunno4(self): return self.__field_dunno4.getvalue() def __setfield_dunno4(self, value): if isinstance(value,UINT): self.__field_dunno4=value else: self.__field_dunno4=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno4(self): del self.__field_dunno4 dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None) def __getfield_dunno5(self): return self.__field_dunno5.getvalue() def __setfield_dunno5(self, value): if isinstance(value,UINT): self.__field_dunno5=value else: self.__field_dunno5=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno5(self): del self.__field_dunno5 dunno5=property(__getfield_dunno5, __setfield_dunno5, __delfield_dunno5, None) def __getfield_pad3(self): return self.__field_pad3.getvalue() def __setfield_pad3(self, value): if isinstance(value,UNKNOWN): self.__field_pad3=value else: self.__field_pad3=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad3(self): del self.__field_pad3 pad3=property(__getfield_pad3, __setfield_pad3, __delfield_pad3, None) def __getfield_message_len(self): return self.__field_message_len.getvalue() def __setfield_message_len(self, value): if isinstance(value,UINT): self.__field_message_len=value else: self.__field_message_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_message_len(self): del self.__field_message_len message_len=property(__getfield_message_len, __setfield_message_len, __delfield_message_len, None) def __getfield_message(self): return self.__field_message.getvalue() def __setfield_message(self, value): if isinstance(value,USTRING): self.__field_message=value else: self.__field_message=USTRING(value,**{'sizeinbytes': 255}) def __delfield_message(self): del self.__field_message message=property(__getfield_message, __setfield_message, __delfield_message, "Text of the notification") def __getfield_pad4(self): return self.__field_pad4.getvalue() def __setfield_pad4(self, value): if isinstance(value,UNKNOWN): self.__field_pad4=value else: self.__field_pad4=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad4(self): del self.__field_pad4 pad4=property(__getfield_pad4, __setfield_pad4, __delfield_pad4, None) def __getfield_year(self): return self.__field_year.getvalue() def __setfield_year(self, value): if isinstance(value,UINT): self.__field_year=value else: self.__field_year=UINT(value,**{'sizeinbytes': 1}) def __delfield_year(self): del self.__field_year year=property(__getfield_year, __setfield_year, __delfield_year, None) def __getfield_month(self): return self.__field_month.getvalue() def __setfield_month(self, value): if isinstance(value,UINT): self.__field_month=value else: self.__field_month=UINT(value,**{'sizeinbytes': 1}) def __delfield_month(self): del self.__field_month month=property(__getfield_month, __setfield_month, __delfield_month, None) def __getfield_day(self): return self.__field_day.getvalue() def __setfield_day(self, value): if isinstance(value,UINT): self.__field_day=value else: self.__field_day=UINT(value,**{'sizeinbytes': 1}) def __delfield_day(self): del self.__field_day day=property(__getfield_day, __setfield_day, __delfield_day, None) def __getfield_hour(self): return self.__field_hour.getvalue() def __setfield_hour(self, value): if isinstance(value,UINT): self.__field_hour=value else: self.__field_hour=UINT(value,**{'sizeinbytes': 1}) def __delfield_hour(self): del self.__field_hour hour=property(__getfield_hour, __setfield_hour, __delfield_hour, None) def __getfield_minute(self): return self.__field_minute.getvalue() def __setfield_minute(self, value): if isinstance(value,UINT): self.__field_minute=value else: self.__field_minute=UINT(value,**{'sizeinbytes': 1}) def __delfield_minute(self): del self.__field_minute minute=property(__getfield_minute, __setfield_minute, __delfield_minute, None) def __getfield_second(self): return self.__field_second.getvalue() def __setfield_second(self, value): if isinstance(value,UINT): self.__field_second=value else: self.__field_second=UINT(value,**{'sizeinbytes': 1}) def __delfield_second(self): del self.__field_second second=property(__getfield_second, __setfield_second, __delfield_second, None) def __getfield_callback_len(self): return self.__field_callback_len.getvalue() def __setfield_callback_len(self, value): if isinstance(value,UINT): self.__field_callback_len=value else: self.__field_callback_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_len(self): del self.__field_callback_len callback_len=property(__getfield_callback_len, __setfield_callback_len, __delfield_callback_len, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 34}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_phonenum_len(self): return self.__field_phonenum_len.getvalue() def __setfield_phonenum_len(self, value): if isinstance(value,UINT): self.__field_phonenum_len=value else: self.__field_phonenum_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_phonenum_len(self): del self.__field_phonenum_len phonenum_len=property(__getfield_phonenum_len, __setfield_phonenum_len, __delfield_phonenum_len, None) def __getfield_phonenum(self): return self.__field_phonenum.getvalue() def __setfield_phonenum(self, value): if isinstance(value,USTRING): self.__field_phonenum=value else: self.__field_phonenum=USTRING(value,**{'sizeinbytes': 37}) def __delfield_phonenum(self): del self.__field_phonenum phonenum=property(__getfield_phonenum, __setfield_phonenum, __delfield_phonenum, None) def __getfield_dunno6(self): return self.__field_dunno6.getvalue() def __setfield_dunno6(self, value): if isinstance(value,UINT): self.__field_dunno6=value else: self.__field_dunno6=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno6(self): del self.__field_dunno6 dunno6=property(__getfield_dunno6, __setfield_dunno6, __delfield_dunno6, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_pad6(self): return self.__field_pad6.getvalue() def __setfield_pad6(self, value): if isinstance(value,UNKNOWN): self.__field_pad6=value else: self.__field_pad6=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_pad6(self): del self.__field_pad6 pad6=property(__getfield_pad6, __setfield_pad6, __delfield_pad6, None) def __getfield_dunno7(self): return self.__field_dunno7.getvalue() def __setfield_dunno7(self, value): if isinstance(value,UINT): self.__field_dunno7=value else: self.__field_dunno7=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno7(self): del self.__field_dunno7 dunno7=property(__getfield_dunno7, __setfield_dunno7, __delfield_dunno7, None) def __getfield_dunno8(self): return self.__field_dunno8.getvalue() def __setfield_dunno8(self, value): if isinstance(value,UINT): self.__field_dunno8=value else: self.__field_dunno8=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno8(self): del self.__field_dunno8 dunno8=property(__getfield_dunno8, __setfield_dunno8, __delfield_dunno8, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('read', self.__field_read, None) yield ('counter', self.__field_counter, None) yield ('pad1', self.__field_pad1, None) yield ('dunno1', self.__field_dunno1, None) yield ('dunno2', self.__field_dunno2, None) yield ('dunno3', self.__field_dunno3, None) yield ('pad2', self.__field_pad2, None) yield ('dunno4', self.__field_dunno4, None) yield ('dunno5', self.__field_dunno5, None) yield ('pad3', self.__field_pad3, None) yield ('message_len', self.__field_message_len, None) yield ('message', self.__field_message, "Text of the notification") yield ('pad4', self.__field_pad4, None) yield ('year', self.__field_year, None) yield ('month', self.__field_month, None) yield ('day', self.__field_day, None) yield ('hour', self.__field_hour, None) yield ('minute', self.__field_minute, None) yield ('second', self.__field_second, None) yield ('callback_len', self.__field_callback_len, None) yield ('callback', self.__field_callback, None) yield ('phonenum_len', self.__field_phonenum_len, None) yield ('phonenum', self.__field_phonenum, None) yield ('dunno6', self.__field_dunno6, None) yield ('priority', self.__field_priority, None) yield ('pad6', self.__field_pad6, None) yield ('dunno7', self.__field_dunno7, None) yield ('dunno8', self.__field_dunno8, None) class messageresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(messageresponse,self).__init__(**dict) if self.__class__ is messageresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(messageresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(messageresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=messageentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,messageentry): self.__field_entry=value else: self.__field_entry=messageentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class messagesentresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(messagesentresponse,self).__init__(**dict) if self.__class__ is messagesentresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(messagesentresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(messagesentresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=messageentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,messageentry): self.__field_entry=value else: self.__field_entry=messageentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class foldernamerequest(BaseProtogenClass): __fields=['header', 'index', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(foldernamerequest,self).__init__(**dict) if self.__class__ is foldernamerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(foldernamerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(foldernamerequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0b, 'command': 0xef}) self.__field_header.writetobuffer(buf) self.__field_index.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x0b, 'command': 0xef}) self.__field_header.readfrombuffer(buf) self.__field_index=UINT(**{'sizeinbytes': 1}) self.__field_index.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0b, 'command': 0xef}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0b, 'command': 0xef}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 1}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 501}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('index', self.__field_index, None) yield ('pad', self.__field_pad, None) class foldernameentry(BaseProtogenClass): __fields=['index', 'flag', 'autofile', 'notify', 'icon', 'name', 'pad', 'keyword'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(foldernameentry,self).__init__(**dict) if self.__class__ is foldernameentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(foldernameentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(foldernameentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_flag.writetobuffer(buf) self.__field_autofile.writetobuffer(buf) self.__field_notify.writetobuffer(buf) self.__field_icon.writetobuffer(buf) self.__field_name.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad.writetobuffer(buf) self.__field_keyword.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 1}) self.__field_index.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_autofile=UINT(**{'sizeinbytes': 1}) self.__field_autofile.readfrombuffer(buf) self.__field_notify=UINT(**{'sizeinbytes': 1}) self.__field_notify.readfrombuffer(buf) self.__field_icon=UINT(**{'sizeinbytes': 1}) self.__field_icon.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 13, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad.readfrombuffer(buf) self.__field_keyword=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False}) self.__field_keyword.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 1}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, "0 if empty, 1 in use") def __getfield_autofile(self): return self.__field_autofile.getvalue() def __setfield_autofile(self, value): if isinstance(value,UINT): self.__field_autofile=value else: self.__field_autofile=UINT(value,**{'sizeinbytes': 1}) def __delfield_autofile(self): del self.__field_autofile autofile=property(__getfield_autofile, __setfield_autofile, __delfield_autofile, "If 1, autofile messages with keyword") def __getfield_notify(self): return self.__field_notify.getvalue() def __setfield_notify(self, value): if isinstance(value,UINT): self.__field_notify=value else: self.__field_notify=UINT(value,**{'sizeinbytes': 1}) def __delfield_notify(self): del self.__field_notify notify=property(__getfield_notify, __setfield_notify, __delfield_notify, None) def __getfield_icon(self): return self.__field_icon.getvalue() def __setfield_icon(self, value): if isinstance(value,UINT): self.__field_icon=value else: self.__field_icon=UINT(value,**{'sizeinbytes': 1}) def __delfield_icon(self): del self.__field_icon icon=property(__getfield_icon, __setfield_icon, __delfield_icon, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 13, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, "Name of the folder") def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 3}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_keyword(self): return self.__field_keyword.getvalue() def __setfield_keyword(self, value): if isinstance(value,USTRING): self.__field_keyword=value else: self.__field_keyword=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False}) def __delfield_keyword(self): del self.__field_keyword keyword=property(__getfield_keyword, __setfield_keyword, __delfield_keyword, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('flag', self.__field_flag, "0 if empty, 1 in use") yield ('autofile', self.__field_autofile, "If 1, autofile messages with keyword") yield ('notify', self.__field_notify, None) yield ('icon', self.__field_icon, None) yield ('name', self.__field_name, "Name of the folder") yield ('pad', self.__field_pad, None) yield ('keyword', self.__field_keyword, None) class foldernameresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(foldernameresponse,self).__init__(**dict) if self.__class__ is foldernameresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(foldernameresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(foldernameresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=foldernameentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 467}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,foldernameentry): self.__field_entry=value else: self.__field_entry=foldernameentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 467}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class todorequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(todorequest,self).__init__(**dict) if self.__class__ is todorequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(todorequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(todorequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c,'command': 0x25}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x0c,'command': 0x25}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c,'command': 0x25}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c,'command': 0x25}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 501}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class todoentry(BaseProtogenClass): __fields=['slot', 'flag', 'todo', 'pad1', 'todo_len', 'priority', 'dunno', 'order'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(todoentry,self).__init__(**dict) if self.__class__ is todoentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(todoentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(todoentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) self.__field_todo.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.writetobuffer(buf) self.__field_todo_len.writetobuffer(buf) self.__field_priority.writetobuffer(buf) try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 1}) self.__field_dunno.writetobuffer(buf) self.__field_order.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_todo=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False}) self.__field_todo.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.readfrombuffer(buf) self.__field_todo_len=UINT(**{'sizeinbytes': 1}) self.__field_todo_len.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_dunno=UINT(**{'sizeinbytes': 1}) self.__field_dunno.readfrombuffer(buf) self.__field_order=UINT(**{'sizeinbytes': 1}) self.__field_order.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, "0: Not used, 1: Used") def __getfield_todo(self): return self.__field_todo.getvalue() def __setfield_todo(self, value): if isinstance(value,USTRING): self.__field_todo=value else: self.__field_todo=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False}) def __delfield_todo(self): del self.__field_todo todo=property(__getfield_todo, __setfield_todo, __delfield_todo, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_todo_len(self): return self.__field_todo_len.getvalue() def __setfield_todo_len(self, value): if isinstance(value,UINT): self.__field_todo_len=value else: self.__field_todo_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_todo_len(self): del self.__field_todo_len todo_len=property(__getfield_todo_len, __setfield_todo_len, __delfield_todo_len, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, "0: Normal, 1: Urgent, 2: Done") def __getfield_dunno(self): try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 1}) return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, "Maybe always zero") def __getfield_order(self): return self.__field_order.getvalue() def __setfield_order(self, value): if isinstance(value,UINT): self.__field_order=value else: self.__field_order=UINT(value,**{'sizeinbytes': 1}) def __delfield_order(self): del self.__field_order order=property(__getfield_order, __setfield_order, __delfield_order, "Gets sorted on screen in this order") def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, "0: Not used, 1: Used") yield ('todo', self.__field_todo, None) yield ('pad1', self.__field_pad1, None) yield ('todo_len', self.__field_todo_len, None) yield ('priority', self.__field_priority, "0: Normal, 1: Urgent, 2: Done") yield ('dunno', self.__field_dunno, "Maybe always zero") yield ('order', self.__field_order, "Gets sorted on screen in this order") class todoresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(todoresponse,self).__init__(**dict) if self.__class__ is todoresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(todoresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(todoresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=todoentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 472}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,todoentry): self.__field_entry=value else: self.__field_entry=todoentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 472}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class historyrequest(BaseProtogenClass): __fields=['type', 'header', 'header', 'header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(historyrequest,self).__init__(**dict) if self.__class__ is historyrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(historyrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(historyrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_type except: self.__field_type=UINT() def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if self.type==OUTGOING: try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3d}) self.__field_header.writetobuffer(buf) if self.type==INCOMING: try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3e}) self.__field_header.writetobuffer(buf) if self.type==MISSED: try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3f}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) if self.type==OUTGOING: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3d}) self.__field_header.readfrombuffer(buf) if self.type==INCOMING: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3e}) self.__field_header.readfrombuffer(buf) if self.type==MISSED: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3f}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_type(self): return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,UINT): self.__field_type=value else: self.__field_type=UINT(value,) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, "0: Outgoing, 1: Incoming, 2: Missed") def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3d}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c, 'command': 0x3d}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3e}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c, 'command': 0x3e}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3f}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c, 'command': 0x3f}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 501}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('type', self.__field_type, "0: Outgoing, 1: Incoming, 2: Missed") if self.type==OUTGOING: yield ('header', self.__field_header, None) if self.type==INCOMING: yield ('header', self.__field_header, None) if self.type==MISSED: yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class historymiscrequest(BaseProtogenClass): __fields=['type', 'header', 'header', 'header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(historymiscrequest,self).__init__(**dict) if self.__class__ is historymiscrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(historymiscrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(historymiscrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_type except: self.__field_type=UINT() def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if self.type==OUTGOING: try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x60}) self.__field_header.writetobuffer(buf) if self.type==INCOMING: try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x61}) self.__field_header.writetobuffer(buf) if self.type==MISSED: try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x62}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) if self.type==OUTGOING: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x60}) self.__field_header.readfrombuffer(buf) if self.type==INCOMING: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x61}) self.__field_header.readfrombuffer(buf) if self.type==MISSED: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x62}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_type(self): return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,UINT): self.__field_type=value else: self.__field_type=UINT(value,) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, "0: Outgoing, 1: Incoming, 2: Missed") def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x60}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c, 'command': 0x60}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x61}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c, 'command': 0x61}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x62}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c, 'command': 0x62}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 501}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('type', self.__field_type, "0: Outgoing, 1: Incoming, 2: Missed") if self.type==OUTGOING: yield ('header', self.__field_header, None) if self.type==INCOMING: yield ('header', self.__field_header, None) if self.type==MISSED: yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class historyentry(BaseProtogenClass): __fields=['slot', 'dunno1', 'date', 'phonenumlen', 'phonenum', 'name', 'dunno2', 'dunno3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(historyentry,self).__init__(**dict) if self.__class__ is historyentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(historyentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(historyentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_date.writetobuffer(buf) self.__field_phonenumlen.writetobuffer(buf) self.__field_phonenum.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_dunno3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_dunno1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_dunno1.readfrombuffer(buf) self.__field_date=GPSDATE(**{'sizeinbytes': 4}) self.__field_date.readfrombuffer(buf) self.__field_phonenumlen=UINT(**{'sizeinbytes': 1}) self.__field_phonenumlen.readfrombuffer(buf) self.__field_phonenum=USTRING(**{'sizeinbytes': 48, 'raiseonunterminatedread': False}) self.__field_phonenum.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_name.readfrombuffer(buf) self.__field_dunno2=UNKNOWN(**{'sizeinbytes': 1}) self.__field_dunno2.readfrombuffer(buf) self.__field_dunno3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_dunno3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UNKNOWN): self.__field_dunno1=value else: self.__field_dunno1=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_date(self): return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,GPSDATE): self.__field_date=value else: self.__field_date=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, None) def __getfield_phonenumlen(self): return self.__field_phonenumlen.getvalue() def __setfield_phonenumlen(self, value): if isinstance(value,UINT): self.__field_phonenumlen=value else: self.__field_phonenumlen=UINT(value,**{'sizeinbytes': 1}) def __delfield_phonenumlen(self): del self.__field_phonenumlen phonenumlen=property(__getfield_phonenumlen, __setfield_phonenumlen, __delfield_phonenumlen, None) def __getfield_phonenum(self): return self.__field_phonenum.getvalue() def __setfield_phonenum(self, value): if isinstance(value,USTRING): self.__field_phonenum=value else: self.__field_phonenum=USTRING(value,**{'sizeinbytes': 48, 'raiseonunterminatedread': False}) def __delfield_phonenum(self): del self.__field_phonenum phonenum=property(__getfield_phonenum, __setfield_phonenum, __delfield_phonenum, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UNKNOWN): self.__field_dunno2=value else: self.__field_dunno2=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_dunno3(self): return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,UNKNOWN): self.__field_dunno3=value else: self.__field_dunno3=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('dunno1', self.__field_dunno1, None) yield ('date', self.__field_date, None) yield ('phonenumlen', self.__field_phonenumlen, None) yield ('phonenum', self.__field_phonenum, None) yield ('name', self.__field_name, None) yield ('dunno2', self.__field_dunno2, None) yield ('dunno3', self.__field_dunno3, None) class historyresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(historyresponse,self).__init__(**dict) if self.__class__ is historyresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(historyresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(historyresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=historyentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 428}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,historyentry): self.__field_entry=value else: self.__field_entry=historyentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 428}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class historymiscentry(BaseProtogenClass): __fields=['slot', 'pbslotandtype', 'dunno1', 'dunno2', 'dunno3', 'dunno4'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(historymiscentry,self).__init__(**dict) if self.__class__ is historymiscentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(historymiscentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(historymiscentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_pbslotandtype.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_dunno3.writetobuffer(buf) self.__field_dunno4.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_pbslotandtype=UINT(**{'sizeinbytes': 2}) self.__field_pbslotandtype.readfrombuffer(buf) self.__field_dunno1=UINT(**{'sizeinbytes': 2}) self.__field_dunno1.readfrombuffer(buf) self.__field_dunno2=UINT(**{'sizeinbytes': 1}) self.__field_dunno2.readfrombuffer(buf) self.__field_dunno3=UINT(**{'sizeinbytes': 1}) self.__field_dunno3.readfrombuffer(buf) self.__field_dunno4=UINT(**{'sizeinbytes': 1}) self.__field_dunno4.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pbslotandtype(self): return self.__field_pbslotandtype.getvalue() def __setfield_pbslotandtype(self, value): if isinstance(value,UINT): self.__field_pbslotandtype=value else: self.__field_pbslotandtype=UINT(value,**{'sizeinbytes': 2}) def __delfield_pbslotandtype(self): del self.__field_pbslotandtype pbslotandtype=property(__getfield_pbslotandtype, __setfield_pbslotandtype, __delfield_pbslotandtype, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UINT): self.__field_dunno1=value else: self.__field_dunno1=UINT(value,**{'sizeinbytes': 2}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UINT): self.__field_dunno2=value else: self.__field_dunno2=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_dunno3(self): return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,UINT): self.__field_dunno3=value else: self.__field_dunno3=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_dunno4(self): return self.__field_dunno4.getvalue() def __setfield_dunno4(self, value): if isinstance(value,UINT): self.__field_dunno4=value else: self.__field_dunno4=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno4(self): del self.__field_dunno4 dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('pbslotandtype', self.__field_pbslotandtype, None) yield ('dunno1', self.__field_dunno1, None) yield ('dunno2', self.__field_dunno2, None) yield ('dunno3', self.__field_dunno3, None) yield ('dunno4', self.__field_dunno4, None) class historymiscresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(historymiscresponse,self).__init__(**dict) if self.__class__ is historymiscresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(historymiscresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(historymiscresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=historymiscentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 493}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,historymiscentry): self.__field_entry=value else: self.__field_entry=historymiscentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 493}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) bitpim-1.0.7+dfsg1/src/phones/p_lgpm225.p0000644001616600161660000003033710445704035016132 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Simon Capper ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### %{ """Various descriptions of data specific to LG PM225 (Sprint)""" import re from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=99 FIRSTSPEEDDIAL=1 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=200 MEMOLENGTH=33 NORINGTONE=0 NOMSGRINGTONE=0 NOWALLPAPER=0 NUMEMAILS=3 NUMPHONENUMBERS=5 SMS_CANNED_MAX_ITEMS=40 SMS_CANNED_MAX_LENGTH=104 SMS_CANNED_FILENAME="sms/canned_msg.dat" SMS_PATTERNS={'Inbox': re.compile(r"^.*/inbox[0-9][0-9][0-9]\.dat$"), 'Sent': re.compile(r"^.*/outbox[0-9][0-9][0-9]\.dat$"), 'Saved': re.compile(r"^.*/sf[0-9][0-9]\.dat$"), } numbertypetab=( 'cell', 'home', 'office', 'fax', 'pager' ) # Text Memo const text_memo_file='sch/memo.dat' content_file_name='ams/contentInfo' content_count_file_name='ams/realContent' media_directory='ams' ringerindex='setas/amsRingerIndex.map' imageindex='setas/amsImageIndex.map' ringerconst=2 imageconst=3 max_ringers=100 max_images=100 phonebook_media='pim/pbookcontact.dat' # Calendar parameters NUMCALENDARENTRIES=300 # ?? for VX4400 CAL_REP_NONE=0x10 CAL_REP_DAILY=0x11 CAL_REP_MONFRI=0x12 CAL_REP_WEEKLY=0x13 CAL_REP_MONTHLY=0x14 CAL_REP_YEARLY=0x15 CAL_DOW_SUN=0x0800 CAL_DOW_MON=0x0400 CAL_DOW_TUE=0x0200 CAL_DOW_WED=0x0100 CAL_DOW_THU=0x0080 CAL_DOW_FRI=0x0040 CAL_DOW_SAT=0x0020 CAL_DOW_EXCEPTIONS=0x0010 CAL_REMINDER_NONE=0 CAL_REMINDER_ONTIME=1 CAL_REMINDER_5MIN=2 CAL_REMINDER_10MIN=3 CAL_REMINDER_1HOUR=4 CAL_REMINDER_1DAY=5 CAL_REMINDER_2DAYS=6 CAL_REPEAT_DATE=(2100, 12, 31) cal_dir='sch' cal_data_file_name='sch/schedule.dat' cal_exception_file_name='sch/schexception.dat' cal_has_voice_id=False PHONE_ENCODING='iso8859_1' %} PACKET pbreadentryresponse: "Results of reading one entry" * pbheader header * pbentry entry PACKET pbupdateentryrequest: * pbheader {'command': 0x04, 'flag': 0x01} +header * pbentry entry PACKET pbappendentryrequest: * pbheader {'command': 0x03, 'flag': 0x01} +header * pbentry entry # All STRINGS have raiseonterminatedread as False since the phone does # occassionally leave out the terminator byte # Note if you change the length of any of these fields, you also # need to modify com_lgpm225 to give a different truncateat parameter # in the convertphonebooktophone method PACKET pbentry: 4 UINT serial1 2 UINT {'constant': 0x0270} +entrysize 4 UINT entrynumber 33 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 2 UINT group 2 UINT {'default': 0} +unknown2 #ringtone ?? 1 BOOL secret * USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH} memo * LIST {'length': NUMEMAILS} +emails: 73 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} email 75 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} url * LIST {'length': NUMPHONENUMBERS} +numberspeeds: 1 UINT numberspeed * LIST {'length': NUMPHONENUMBERS} +numbertypes: 1 UINT numbertype * LIST {'length': NUMPHONENUMBERS} +numbers: 49 USTRING {'raiseonunterminatedread': False} number 1 UINT {'constant': 0x7A} +EndOfRecord P UINT {'default': 0x600} +ringtone P UINT {'default': 0x100} +wallpaper PACKET pbgroup: "A single group" 1 UINT group_id 1 UINT rectype # 0x30 or 0xFF if deleted 3 UNKNOWN +unknown2 3 UNKNOWN +unknown3 33 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name PACKET pbgroups: "Phonebook groups" * LIST {'elementclass': pbgroup} +groups PACKET pb_contact_media_entry: """Reads the wallpaper/ringer info for each contact on the phone""" 2 UINT index # matches serial1 in pbentry despite being a different size 18 DATA dont_care1 2 UINT ringer 33 USTRING {'encoding': PHONE_ENCODING} name # this is null terminated 182 DATA dont_care2 2 UINT wallpaper 4 DATA dont_care3 PACKET pb_contact_media_file: * LIST {'elementclass': pb_contact_media_entry} +contacts ### ### The calendar ### # # The calendar consists of one file listing events and an exception # file that lists exceptions. These exceptions suppress a particular # instance of a repeated event. For example, if you setup something # to happen monthly, but changed the 1st february event, then the # schedule will contain the repeating event, and the 1st feb one, # and the suppresions/exceptions file will point to the repeating # event and suppress the 1st feb. # The phone uses the position within the file to give an event an id PACKET scheduleexception: 4 UINT pos "Refers to event id (position in schedule file) that this suppresses" 1 UINT day 1 UINT month 2 UINT year PACKET scheduleexceptionfile: * LIST {'elementclass': scheduleexception} +items PACKET scheduleevent: P UINT { 'constant': 64 } packet_size "Faster than packetsize()" 4 UINT pos "position within file, used as an event id" 4 LGCALDATE start 4 LGCALDATE end 1 UINT repeat 2 UINT daybitmap "which days a weekly repeat event happens on" 1 UINT { 'default': 0 } +pad2 1 UINT alarmminutes "a value of 100 indicates not set" 1 UINT alarmhours "a value of 100 indicates not set" 1 UINT alarmtype "preset alarm reminder type" 1 UINT { 'default': 0 } +snoozedelay "in minutes, not for this phone" 1 UINT ringtone 1 UINT { 'default': 0 } +pad3 42 USTRING {'encoding': PHONE_ENCODING, 'raiseontruncate': False, 'raiseonunterminatedread': False } description PACKET schedulefile: 2 UINT numactiveitems * LIST {'elementclass': scheduleevent} +events ### ### Call History ### PACKET call: 4 GPSDATE GPStime #no. of seconds since 0h 1-6-80, based off local time. 4 UINT unknown1 # different for each call 4 UINT duration #seconds, not certain about length of this field 49 USTRING {'raiseonunterminatedread': False} number 36 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 1 UINT numberlength # length of phone number 1 UINT unknown2 # set to 1 on some calls 1 UINT pbnumbertype # 0=, 1=, 2=, 3=, 4=, 5=, 0xFF=not in phone book 5 UINT unknown3 # probably contains some kind of index into the phonebook PACKET callhistory: 4 UINT numcalls 1 UINT unknown1 * LIST {'elementclass': call} +calls ### ### Media indexes ### # # The pm225 has 2 index files for media and for ringtones and wallpaper uses # both of them. The "indexfile" packet is the same as the other versizon LG # phones, but the "content_file" packet is different. One index file contains # all downloaded content including games, images and ringtone. The two # index files need to be synchronised for things to work correctly. PACKET indexentry: 1 UINT index 1 UINT const 40 USTRING {'default': ""} +name PACKET indexfile: "Used for tracking wallpaper and ringtones" # A bit of a silly design again. Entries with an index of 0xffff are # 'blank'. Thus it is possible for numactiveitems and the actual # number of valid entries to be mismatched. 2 UINT numactiveitems * LIST {'elementclass': indexentry, 'createdefault': True} +items PACKET content_entry: 3 USTRING {'terminator': 0xA} type if self.type=='!C': * USTRING {'terminator': 0xA} index1 * USTRING {'terminator': 0xA} name1 * USTRING {'terminator': 0xA, 'default': '-1'} +unknown1 8 UINT {'default' :0} +unknown2 * USTRING {'terminator': 0xA} mime_type * USTRING {'terminator': 0xA} content_type # 'Games', 'Screen Savers', 'Ringers' * USTRING {'terminator': 0xA, 'default':'bitpim.org'} +url 1 UINT {'default':0x14} + unknown_int1 * USTRING {'terminator': 0xA, 'default':''} +unknown3 1 UINT {'default':0x14} + unknown_int2 * USTRING {'terminator': 0xA, 'default':''} +unknown4 * USTRING {'terminator': 0xA, 'default':'0'} +unknown5 * USTRING {'terminator': 0xA} size if self.type=='!E': * USTRING {'terminator': 0xA, 'default':'ams:'} +location_maybe * USTRING {'terminator': 0xA} index2 * USTRING {'terminator': 0xA} name2 * USTRING {'terminator': 0xA, 'default':''} +unknown6 PACKET content_file: "Used to store all content on the phone, apps, ringers and images (with the exception of the camera)" * LIST {'elementclass': content_entry, 'createdefault': True} +items PACKET content_count: "Stores the number of items in the content file" * USTRING {'terminator': None} count PACKET qcp_media_header: "Start of a qcp format file, used to determine if a file is qcp or mp3 format" 4 USTRING {'constant': 'RIFF', 'terminator': None} riff 4 UINT riff_size 8 USTRING {'constant': 'QLCMfmt ', 'terminator': None} qcp_format # rest of the header is not interesting * DATA stuff ### ### Text Memos ### PACKET textmemo: 151 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } text PACKET textmemofile: 4 UINT itemcount * LIST { 'elementclass': textmemo } +items ### ### SMS ### # # There are 3 types of SMS records, The inbox, outbox and unsent (pending) # Unlike other records in the phone each message is stored in a separate file # All messages are in the 'sms' directory in the root of the phone # Inbox messages are in files called 'inbox000.dat', the number 000 varies for # each message, typically there are no gaps in the numbering, but gaps can appear # if a message is deleted. # Outbox and draft message are named 'outbox000.dat'. # Messages in the outbox get updated when the message is received by the recipient, # they contain a delivery flag and a delivery time for all the possible 10 recipients. # The pm225 stores SMS in plain text (unlike some other LG phones) PACKET recipient_record: 8 UINT unknown1 33 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 49 USTRING number 24 UINT unknown2 1 UINT status # 1 when sent, 2 when received 1 UINT unknown3 4 LGCALDATE time # sent if status=1, received when status=2 12 DATA unknown2 PACKET sms_out: 4 UINT index # starting from 1, unique 1 UINT locked # 1=locked 3 UINT unknown1 # zero 4 LGCALDATE timesent # time the message was sent 1 UINT saved # 0 for outbox, 1 for draft 178 USTRING {'encoding': PHONE_ENCODING} msg 1 UINT unknown3 16 USTRING callback * LIST {'elementclass': recipient_record, 'length': 10} +recipients PACKET SMSINBOXMSGFRAGMENT: * LIST {'length': 181} +msg: # this size could be wrong 1 UINT byte "individual byte of message" PACKET sms_in: 4 UINT unknown1 # all zeros 4 UINT msg_index2 2 UINT unknown2 # set to 0 6 SMSDATE timesent 3 UINT unknown 1 UINT callback_length # 0 for no callback number 38 USTRING callback 1 UINT sender_length * LIST {'length': 38} +sender: 1 UINT byte "individual byte of senders phone number" 15 DATA unknown4 # set to zeros 4 LGCALDATE lg_time # time the message was sent 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 2 UINT read # 1 if message has been read, 0 otherwise (kind of a guess, not enough data to be sure) 1 UINT locked # 1 if the message is locked, 0 otherwise 8 UINT unknown5 # these are flags, not enough data to decode #1 UINT priority # 1 if the message is high priority, 0 otherwise 73 USTRING {'encoding': PHONE_ENCODING} subject 2 UINT msglength 200 USTRING {'encoding': PHONE_ENCODING} msg * DATA unknown8 # ?? inlcudes senders phone number and name in ascii PACKET sms_quick_text: 4 UINT {'default': 0} +dunno 104 USTRING {'encoding': PHONE_ENCODING, 'default': ""} +msg # include terminating NULL PACKET sms_canned_file: 4 UINT num_active * LIST {'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True, 'elementclass': sms_quick_text} +msgs bitpim-1.0.7+dfsg1/src/phones/p_sanyo2300.p0000644001616600161660000000144210355646576016412 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_sanyo2300.p 2707 2006-01-01 03:33:18Z sawecw $ %{ """Various descriptions of data specific to Sanyo VI-2300""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 _NUMCALLHISTORY=20 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 #for sym in dir(p_sanyo): # print sym %} bitpim-1.0.7+dfsg1/src/phones/p_samsungspha840_telus.p0000644001616600161660000001025210535762440020741 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Denis Tonn ### Inspiration and code liberally adopted from: ### Stephen A. Wood and Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id$ %{ """Proposed descriptions of data usign AT commands""" from prototypes import * from p_samsung_packet import * # We use LSB for all integer like fields in diagnostic mode UINT=UINTlsb BOOL=BOOLlsb # NUMCALENDAREVENTS=20 NUMPHONEBOOKENTRIES=500 NUMEMAILS=1 NUMPHONENUMBERS=5 MAXNUMBERLEN=32 NUMTODOENTRIES=9 NUMSMSENTRIES=94 NUMMEMOENTRIES=3 NUMGROUPS=4 # Phone does not cleanly return from BREW mode, so everything done through modem mode # AMSREGISTRY="ams/AmsRegistry" DEFAULT_RINGTONE=0 DEFAULT_WALLPAPER=8 DEFAULT_WALLPAPER_MODIFIER=0 DEFAULT_GROUP=0 %} PACKET pbentry: * CSVINT slot "Internal Slot" * CSVINT uslot "User Slot, Speed dial" # Phone does not support groups properly - default 0 * CSVINT {'default': 0} +group # 0=default 1-5=Ring 1-5 6-10=Melody 1-5 * CSVINT {'default': 0} +ringtone "0: Default, 1: Ring 1, 2: Ring 2, 3: Ring 3, 4: Ring 4, 5: Ring 5, 6: Melody 1, 7: Melody 2, 8: Melody 3, 9: Melody 4, 10: Melody 5" * CSVSTRING name * CSVINT speeddial "Which phone number assigned to speed dial uslot" * CSVINT {'default': 0} +dunno1 * LIST {'length': NUMPHONENUMBERS, 'createdefault': True, 'elementclass': phonenumber} +numbers # email and url must have a space in the value when writing * CSVSTRING {'default': ""} +email # actually there are 2 email addresses but this simplified my cut and paste * CSVSTRING {'default': ""} +url # this is really a freeform text field, but can be used for birthdays - perhaps should be a memo.. * CSVSTRING {'default': ""} +birthday # wallpaper values # 8 = no image # 3 = human # 4 = animal # 5 = others # 2 = gallery - and wallpaper_pic_path points to the file name # 7 = image clips * CSVINT {'default': 8} +wallpaper "8: No Image, 3: Human, 4: Animal, 5: Other, 2: Gallery, 7: Image" # wallpaper_modifier # selects specific image in human, animal, others # selects offset in file for image clips # must be 0 if no image # value ignored if gallery image * CSVINT {'default': 0} +wallpaper_modifier * CSVSTRING wallpaper_file * CSVTIME {'terminator': None, 'default': (1980,1,1,12,0,0)} +timestamp "Use terminator None for last item" PACKET phonebookslotresponse: * CSVSTRING {'quotechar': None, 'terminator': ord(' '), 'constant': '#PBOKR:'} command * pbentry entry PACKET phonebookslotupdaterequest: * CSVSTRING {'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'} +command * pbentry entry PACKET groupnameresponse: * CSVSTRING {'quotechar': None, 'terminator': ord(' '), 'constant': '#PBGRR:'} command * groupnameentry entry PACKET groupnameentry: * CSVINT gid * CSVSTRING groupname * CSVINT {'default': 0} +unknown_4 * CSVSTRING {'quotechar': None} dunno2 "A single character C or S" * CSVTIME {'terminator': None} timestamp PACKET unparsedresponse: * UNKNOWN pad PACKET eventrequest: * CSVSTRING {'quotechar': None, 'terminator': None, 'default': '#PISHR='} +command * CSVINT {'terminator': None} +slot PACKET eventresponse: * CSVSTRING {'quotechar': None, 'terminator': ord(' '), 'constant': '#PISHR:'} command * CSVINT slot * CSVTIME start * CSVTIME end * CSVTIME timestamp * CSVINT alarm "0: No Alarm, 1: On Time, 2: 10 minutes, 3: 30 minutes, 4: 60 minutes" * CSVSTRING {'quotechar': None} dunno * CSVSTRING {'terminator': None} eventname PACKET eventupdaterequest: * CSVSTRING {'quotechar': None, 'terminator': None, 'default': '#PISHW='} +command * CSVINT slot * CSVTIME start * CSVTIME end * CSVTIME timestamp * CSVINT alarm "0: No Alarm, 1: On Time, 2: 10 minutes, 3: 30 minutes, 4: 60 minutes" * CSVSTRING {'terminator': None} eventname PACKET eventsloterase: * CSVSTRING {'quotechar': None, 'terminator': None, 'default': '#PISHW='} +command * CSVINT {'terminator': None} +slot PACKET eventupdateresponse: * UNKNOWN pad bitpim-1.0.7+dfsg1/src/phones/p_lgpm325.p0000644001616600161660000003140210445704035016125 0ustar amuamu### BITPIM ### ### Copyright (C) 2005, 2006 Brent Roettger ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lgpm325.p 3387 2006-06-20 05:31:09Z rogerb $ %{ """Various descriptions of data specific to LG PM325 (Sprint)""" import re from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=99 FIRSTSPEEDDIAL=1 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=200 MEMOLENGTH=33 NUMEMAILS=3 NUMPHONENUMBERS=5 NORINGTONE=0 NOMSGRINGTONE=0 NOWALLPAPER=0 PHONE_ENCODING='iso8859_1' numbertypetab=( 'cell', 'home', 'office', 'fax', 'pager' ) media_directory='ams' ringerindex='setas/amsRingerIndex.map' imageindex='setas/amsImageIndex.map' ringerconst=2 imageconst=3 max_ringers=100 max_images=100 phonebook_media='pim/pbookcontact.dat' #----- Calendar settings -------------------------------------------------- NUMCALENDARENTRIES=300 CAL_REP_NONE=0x10 CAL_REP_DAILY=0x11 CAL_REP_MONFRI=0x12 CAL_REP_WEEKLY=0x13 CAL_REP_MONTHLY=0x14 CAL_REP_YEARLY=0x15 CAL_DOW_SUN=0x0800 CAL_DOW_MON=0x0400 CAL_DOW_TUE=0x0200 CAL_DOW_WED=0x0100 CAL_DOW_THU=0x0080 CAL_DOW_FRI=0x0040 CAL_DOW_SAT=0x0020 CAL_DOW_EXCEPTIONS=0x0010 CAL_REMINDER_NONE=0 CAL_REMINDER_ONTIME=1 CAL_REMINDER_5MIN=2 CAL_REMINDER_10MIN=3 CAL_REMINDER_1HOUR=4 CAL_REMINDER_1DAY=5 CAL_REMINDER_2DAYS=6 CAL_REPEAT_DATE=(2100, 12, 31) cal_dir='sch' cal_data_file_name='sch/schedule.dat' cal_exception_file_name='sch/schexception.dat' cal_has_voice_id=False #----- SMS settings ------------------------------------------------------- SMS_CANNED_MAX_ITEMS=40 SMS_CANNED_MAX_LENGTH=104 SMS_CANNED_FILENAME="sms/canned_msg.dat" SMS_PATTERNS={'Inbox': re.compile(r"^.*/inbox[0-9][0-9][0-9]\.dat$"), 'Sent': re.compile(r"^.*/outbox[0-9][0-9][0-9]\.dat$"), 'Saved': re.compile(r"^.*/sf[0-9][0-9]\.dat$"), } #----- Text Memo settings ------------------------------------------------- text_memo_file='sch/memo.dat' content_file_name='ams/contentInfo' content_count_file_name='ams/realContent' %} #----- Packet Definitions ------------------------------------------------- PACKET firmwareresponse: 1 UINT command 11 USTRING {'terminator': None} date1 8 USTRING {'terminator': None} time1 11 USTRING {'terminator': None} date2 8 USTRING {'terminator': None} time2 8 USTRING {'terminator': None} firmware * DATA dunno PACKET pbreadentryresponse: "Results of reading one entry" * pbheader header * pbentry entry PACKET pbupdateentryrequest: * pbheader {'command': 0x04, 'flag': 0x01} +header * pbentry entry PACKET pbappendentryrequest: * pbheader {'command': 0x03, 'flag': 0x01} +header * pbentry entry # All USTRINGS have raiseonterminatedread as False since the phone does # occassionally leave out the terminator byte # Note if you change the length of any of these fields, you also # need to modify com_lgpm325 to give a different truncateat parameter # in the convertphonebooktophone method PACKET pbentry: 4 UINT serial1 2 UINT {'constant': 0x026E} +entrysize 4 UINT entrynumber #is this the right length? 33 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 2 UINT group 2 UINT {'default': 0} +unknown2 #ringtone ?? 1 BOOL secret * USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH} memo * LIST {'length': NUMEMAILS} +emails: 73 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} email 73 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} url * LIST {'length': NUMPHONENUMBERS} +numberspeeds: 1 UINT numberspeed * LIST {'length': NUMPHONENUMBERS} +numbertypes: 1 UINT numbertype * LIST {'length': NUMPHONENUMBERS} +numbers: 49 USTRING {'raiseonunterminatedread': False} number 1 UINT {'constant': 0x78} +EndOfRecord P UINT {'default': 0x600} +ringtone P UINT {'default': 0x100} +wallpaper PACKET pbgroup: "A single group" 1 UINT group_id 1 UINT rectype # 0x30 or 0xFF if deleted 3 UNKNOWN +unknown2 3 UNKNOWN +unknown3 33 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name PACKET pbgroups: "Phonebook groups" * LIST {'elementclass': pbgroup} +groups PACKET pb_contact_media_entry: """Reads the wallpaper/ringer info for each contact on the phone""" 2 UINT index # matches serial1 in pbentry despite being a different size 18 DATA dont_care1 2 UINT ringer 33 USTRING name # this is null terminated 182 DATA dont_care2 2 UINT wallpaper 4 DATA dont_care3 PACKET pb_contact_media_file: * LIST {'elementclass': pb_contact_media_entry} +contacts ### ### The calendar ### # # The calendar consists of one file listing events and an exception # file that lists exceptions. These exceptions suppress a particular # instance of a repeated event. For example, if you setup something # to happen monthly, but changed the 1st february event, then the # schedule will contain the repeating event, and the 1st feb one, # and the suppresions/exceptions file will point to the repeating # event and suppress the 1st feb. # The phone uses the position within the file to give an event an id PACKET scheduleexception: 4 UINT pos "Refers to event id (position in schedule file) that this suppresses" 1 UINT day 1 UINT month 2 UINT year PACKET scheduleexceptionfile: * LIST {'elementclass': scheduleexception} +items PACKET scheduleevent: P UINT { 'constant': 64 } packet_size "Faster than packetsize()" 4 UINT pos "position within file, used as an event id" 4 LGCALDATE start 4 LGCALDATE end 1 UINT repeat 2 UINT daybitmap "which days a weekly repeat event happens on" 1 UINT { 'default': 0 } +pad2 1 UINT alarmminutes "a value of 100 indicates not set" 1 UINT alarmhours "a value of 100 indicates not set" 1 UINT alarmtype "preset alarm reminder type" 1 UINT { 'default': 0 } +snoozedelay "in minutes, not for this phone" 1 UINT ringtone 1 UINT { 'default': 0 } +pad3 42 USTRING {'encoding': PHONE_ENCODING, 'raiseontruncate': False, 'raiseonunterminatedread': False } description PACKET schedulefile: 2 UINT numactiveitems * LIST {'elementclass': scheduleevent} +events ### ### Call History ### PACKET call: 4 GPSDATE GPStime #no. of seconds since 0h 1-6-80, based off local time. 4 UINT unknown1 # different for each call 4 UINT duration #seconds, not certain about length of this field 49 USTRING {'raiseonunterminatedread': False} number 36 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 1 UINT numberlength # length of phone number 1 UINT unknown2 # set to 1 on some calls 1 UINT pbnumbertype # 0=, 1=, 2=, 3=, 4=, 5=, 0xFF=not in phone book 5 UINT unknown3 # probably contains some kind of index into the phonebook PACKET callhistory: 4 UINT numcalls 1 UINT unknown1 * LIST {'elementclass': call} +calls ### ### Media indexes ### # # The pm325 has 2 index files for media and for ringtones and wallpaper uses # both of them. The "indexfile" packet is the same as the other versizon LG # phones, but the "content_file" packet is different. One index file contains # all downloaded content including games, images and ringtone. The two # index files need to be synchronised for things to work correctly. PACKET indexentry: 1 UINT index 1 UINT const 40 USTRING {'default': ""} +name PACKET indexfile: "Used for tracking wallpaper and ringtones" # A bit of a silly design again. Entries with an index of 0xffff are # 'blank'. Thus it is possible for numactiveitems and the actual # number of valid entries to be mismatched. 2 UINT numactiveitems * LIST {'elementclass': indexentry, 'createdefault': True} +items PACKET content_entry: 3 USTRING {'terminator': 0xA} type if self.type=='!C': * USTRING {'terminator': 0xA} index1 * USTRING {'terminator': 0xA} name1 * USTRING {'terminator': 0xA, 'default': '-1'} +unknown1 8 UINT {'default' :0} +unknown2 * USTRING {'terminator': 0xA} mime_type * USTRING {'terminator': 0xA} content_type # 'Games', 'Screen Savers', 'Ringers' * USTRING {'terminator': 0xA, 'default':'bitpim.org'} +url 1 UINT {'default':0x14} + unknown_int1 * USTRING {'terminator': 0xA, 'default':''} +unknown3 1 UINT {'default':0x14} + unknown_int2 * USTRING {'terminator': 0xA, 'default':''} +unknown4 * USTRING {'terminator': 0xA, 'default':'0'} +unknown5 * USTRING {'terminator': 0xA} size if self.type=='!E': * USTRING {'terminator': 0xA, 'default':'ams:'} +location_maybe * USTRING {'terminator': 0xA} index2 * USTRING {'terminator': 0xA} name2 * USTRING {'terminator': 0xA, 'default':''} +unknown6 PACKET content_file: "Used to store all content on the phone, apps, ringers and images (with the exception of the camera)" * LIST {'elementclass': content_entry, 'createdefault': True} +items PACKET content_count: "Stores the number of items in the content file" * USTRING {'terminator': None} count PACKET qcp_media_header: "Start of a qcp format file, used to determine if a file is qcp or mp3 format" 4 USTRING {'constant': 'RIFF', 'terminator': None} riff 4 UINT riff_size 8 USTRING {'constant': 'QLCMfmt ', 'terminator': None} qcp_format # rest of the header is not interesting * DATA stuff ### ### Text Memos ### PACKET textmemo: 151 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } text PACKET textmemofile: 4 UINT itemcount * LIST { 'elementclass': textmemo } +items ### ### SMS ### # # There are 3 types of SMS records, The inbox, outbox and unsent (pending) # Unlike other records in the phone each message is stored in a separate file # All messages are in the 'sms' directory in the root of the phone # Inbox messages are in files called 'inbox000.dat', the number 000 varies for # each message, typically there are no gaps in the numbering, but gaps can appear # if a message is deleted. # Outbox and draft message are named 'outbox000.dat'. # Messages in the outbox get updated when the message is received by the recipient, # they contain a delivery flag and a delivery time for all the possible 10 recipients. # The pm225 stores SMS in plain text (unlike some other LG phones) PACKET recipient_record: 8 UINT unknown1 33 USTRING {'raiseonunterminatedread': False} name 49 USTRING number 24 UINT unknown2 1 UINT status # 1 when sent, 2 when received 1 UINT unknown3 4 LGCALDATE time # sent if status=1, received when status=2 12 DATA unknown2 PACKET sms_out: 4 UINT index # starting from 1, unique 1 UINT locked # 1=locked 3 UINT unknown1 # zero 4 LGCALDATE timesent # time the message was sent 1 UINT saved # 0 for outbox, 1 for draft 178 USTRING {'encoding': PHONE_ENCODING} msg 1 UINT unknown3 16 USTRING callback * LIST {'elementclass': recipient_record, 'length': 10} +recipients PACKET SMSINBOXMSGFRAGMENT: * LIST {'length': 181} +msg: # this size could be wrong 1 UINT byte "individual byte of message" PACKET sms_in: 4 UINT unknown1 # all zeros 4 UINT msg_index2 2 UINT unknown2 # set to 0 6 SMSDATE timesent 3 UINT unknown 1 UINT callback_length # 0 for no callback number 38 USTRING callback 1 UINT sender_length * LIST {'length': 38} +sender: 1 UINT byte "individual byte of senders phone number" 15 DATA unknown4 # set to zeros 4 LGCALDATE lg_time # time the message was sent 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 2 UINT read # 1 if message has been read, 0 otherwise (kind of a guess, not enough data to be sure) 1 UINT locked # 1 if the message is locked, 0 otherwise 8 UINT unknown5 # these are flags, not enough data to decode #1 UINT priority # 1 if the message is high priority, 0 otherwise 73 USTRING {'encoding': PHONE_ENCODING} subject 2 UINT msglength 200 USTRING {'encoding': PHONE_ENCODING} msg * DATA unknown8 # ?? inlcudes senders phone number and name in ascii PACKET sms_quick_text: 4 UINT {'default': 0} +dunno 104 USTRING {'encoding': PHONE_ENCODING, 'default': ""} +msg # include terminating NULL PACKET sms_canned_file: 4 UINT num_active * LIST {'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True, 'elementclass': sms_quick_text} +msgs bitpim-1.0.7+dfsg1/src/phones/p_sanyo2400.p0000644001616600161660000000141610544634455016405 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id$ %{ """Various descriptions of data specific to Sanyo SCP-2400""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 # Need to check. Is max phone will hold 32/96 or 33/97 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 HASRINGPICBUF=0 #BREW_FILE_SYSTEM=2 %} bitpim-1.0.7+dfsg1/src/phones/p_sanyo7200.py0000644001616600161660000000103510122742673016570 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Sanyo SCP-7200""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * import p_sanyo # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 _NUMCALLHISTORY=20 _MAXNUMBERLEN=48 _MAXEMAILLEN=48 #for sym in dir(p_sanyo): # print sym bitpim-1.0.7+dfsg1/src/phones/p_sanyo3100.p0000644001616600161660000000246010537164166016402 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_sanyo3100.p 2766 2006-01-24 05:22:04Z sawecw $ %{ """Various descriptions of data specific to Sanyo MM-3100""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * from p_brew import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 # Need to check. Is max phone will hold 32/96 or 33/97 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 HASRINGPICBUF=0 #BREW_FILE_SYSTEM=2 %} PACKET req41: 1 UINT {'default': 0x41} +fortyone 6 USTRING {'terminator': None} msl PACKET res41: 1 UINT {'default': 0x41} fortyone 1 UINT ans PACKET fastatusrequest: * sanyofaheader {'faset': 0x13} +preamble 1 UINT {'default': 0} +command 1 UINT {'default': 0} +packettype PACKET fastatusresponse: * sanyofaheader +preamble 1 UINT {'default': 0} status 1 UINT {'default': 0} packettype PACKET response: * UNKNOWN pad bitpim-1.0.7+dfsg1/src/phones/p_lgvi5225.py0000644001616600161660000013004610466234100016402 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VI5225""" from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx4400 except as noted # below from p_lgvx4400 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=500 MAXCALENDARDESCRIPTION=38 NUMEMAILS=1 NUMPHONENUMBERS=5 MEMOLENGTH=48 pb_file_name='pim/pbentry.dat' # Calendar parameters NUMCALENDARENTRIES=300 CAL_REP_NONE=0x10 CAL_REP_DAILY=0x11 CAL_REP_MONFRI=0x12 CAL_REP_WEEKLY=0x13 CAL_REP_MONTHLY=0x14 CAL_REP_YEARLY=0x15 CAL_DOW_SUN=0x0800 CAL_DOW_MON=0x0400 CAL_DOW_TUE=0x0200 CAL_DOW_WED=0x0100 CAL_DOW_THU=0x0080 CAL_DOW_FRI=0x0040 CAL_DOW_SAT=0x0020 CAL_DOW_EXCEPTIONS=0x0010 CAL_REMINDER_NONE=0 CAL_REMINDER_ONTIME=1 CAL_REMINDER_5MIN=2 CAL_REMINDER_10MIN=3 CAL_REMINDER_1HOUR=4 CAL_REMINDER_1DAY=5 CAL_REMINDER_2DAYS=6 CAL_REPEAT_DATE=(2100, 12, 31) cal_dir='sch' cal_data_file_name='sch/schedule.dat' cal_exception_file_name='sch/schexception.dat' cal_has_voice_id=False class ffpacket(BaseProtogenClass): __fields=['header', 'command', 'dunno1', 'dunno2', 'pad', 'dunno3', 'dunno4'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ffpacket,self).__init__(**dict) if self.__class__ is ffpacket: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ffpacket,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ffpacket,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=UINT(**{'sizeinbytes': 1, 'constant': 0xff}) self.__field_header.writetobuffer(buf) self.__field_command.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self.__field_dunno3.writetobuffer(buf) self.__field_dunno4.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=UINT(**{'sizeinbytes': 1, 'constant': 0xff}) self.__field_header.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_dunno1=UINT(**{'sizeinbytes': 1}) self.__field_dunno1.readfrombuffer(buf) self.__field_dunno2=UINT(**{'sizeinbytes': 1}) self.__field_dunno2.readfrombuffer(buf) self.__field_pad=UKNOWN(**{'sizeinbytes': 4}) self.__field_pad.readfrombuffer(buf) self.__field_dunno3=UINT(**{'sizeinbytes': 1}) self.__field_dunno3.readfrombuffer(buf) self.__field_dunno4=UINT(**{'sizeinbytes': 1}) self.__field_dunno4.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=UINT(**{'sizeinbytes': 1, 'constant': 0xff}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,UINT): self.__field_header=value else: self.__field_header=UINT(value,**{'sizeinbytes': 1, 'constant': 0xff}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UINT): self.__field_dunno1=value else: self.__field_dunno1=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UINT): self.__field_dunno2=value else: self.__field_dunno2=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UKNOWN): self.__field_pad=value else: self.__field_pad=UKNOWN(value,**{'sizeinbytes': 4}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_dunno3(self): return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,UINT): self.__field_dunno3=value else: self.__field_dunno3=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_dunno4(self): return self.__field_dunno4.getvalue() def __setfield_dunno4(self, value): if isinstance(value,UINT): self.__field_dunno4=value else: self.__field_dunno4=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno4(self): del self.__field_dunno4 dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('command', self.__field_command, None) yield ('dunno1', self.__field_dunno1, None) yield ('dunno2', self.__field_dunno2, None) yield ('pad', self.__field_pad, None) yield ('dunno3', self.__field_dunno3, None) yield ('dunno4', self.__field_dunno4, None) class speeddial(BaseProtogenClass): __fields=['entry', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddial,self).__init__(**dict) if self.__class__ is speeddial: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddial,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddial,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_entry.writetobuffer(buf) try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_entry.readfrombuffer(buf) self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 1, 'default': 0xff}) return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,UINT): self.__field_entry=value else: self.__field_entry=UINT(value,**{'sizeinbytes': 1, 'default': 0xff}) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_number(self): try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,UINT): self.__field_number=value else: self.__field_number=UINT(value,**{'sizeinbytes': 1, 'default': 0xff}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('entry', self.__field_entry, None) yield ('number', self.__field_number, None) class speeddials(BaseProtogenClass): __fields=['speeddials'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddials,self).__init__(**dict) if self.__class__ is speeddials: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddials,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddials,kwargs) if len(args): dict2={'length': NUMSPEEDDIALS, 'elementclass': speeddial} dict2.update(kwargs) kwargs=dict2 self.__field_speeddials=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_speeddials(self): try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) return self.__field_speeddials.getvalue() def __setfield_speeddials(self, value): if isinstance(value,LIST): self.__field_speeddials=value else: self.__field_speeddials=LIST(value,**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) def __delfield_speeddials(self): del self.__field_speeddials speeddials=property(__getfield_speeddials, __setfield_speeddials, __delfield_speeddials, None) def iscontainer(self): return True def containerelements(self): yield ('speeddials', self.__field_speeddials, None) class pbreadentryresponse(BaseProtogenClass): "Results of reading one entry" __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbreadentryresponse,self).__init__(**dict) if self.__class__ is pbreadentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbreadentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbreadentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbupdateentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbupdateentryrequest,self).__init__(**dict) if self.__class__ is pbupdateentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbupdateentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbupdateentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x04, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbappendentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbappendentryrequest,self).__init__(**dict) if self.__class__ is pbappendentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbappendentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbappendentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x03, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbentry(BaseProtogenClass): __fields=['wallpaper', 'serial1', 'entrysize', 'serial2', 'entrynumber', 'name', 'group', 'emails', 'url', 'ringtone', 'secret', 'memo', 'dunno1', 'dunno2', 'numbertypes', 'numbers'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_wallpaper except: self.__field_wallpaper=UINT(**{'constant': NOWALLPAPER}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_serial1.writetobuffer(buf) try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x01E0}) self.__field_entrysize.writetobuffer(buf) self.__field_serial2.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_group.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvi5225_116, 'length': NUMEMAILS}) self.__field_emails.writetobuffer(buf) self.__field_url.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_secret.writetobuffer(buf) self.__field_memo.writetobuffer(buf) try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_dunno1.writetobuffer(buf) try: self.__field_dunno2 except: self.__field_dunno2=UINT(**{'sizeinbytes': 2, 'default': 0}) self.__field_dunno2.writetobuffer(buf) try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvi5225_124, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvi5225_126, 'length': NUMPHONENUMBERS}) self.__field_numbers.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x01E0}) self.__field_entrysize.readfrombuffer(buf) self.__field_serial2=UINT(**{'sizeinbytes': 4}) self.__field_serial2.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 2}) self.__field_entrynumber.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 23, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 2}) self.__field_group.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_lgvi5225_116, 'length': NUMEMAILS}) self.__field_emails.readfrombuffer(buf) self.__field_url=USTRING(**{'sizeinbytes': 73, 'raiseonunterminatedread': False}) self.__field_url.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_secret=UINT(**{'sizeinbytes': 1}) self.__field_secret.readfrombuffer(buf) self.__field_memo=USTRING(**{'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) self.__field_memo.readfrombuffer(buf) self.__field_dunno1=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_dunno1.readfrombuffer(buf) self.__field_dunno2=UINT(**{'sizeinbytes': 2, 'default': 0}) self.__field_dunno2.readfrombuffer(buf) self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvi5225_124, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.readfrombuffer(buf) self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvi5225_126, 'length': NUMPHONENUMBERS}) self.__field_numbers.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'constant': NOWALLPAPER}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_entrysize(self): try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x01E0}) return self.__field_entrysize.getvalue() def __setfield_entrysize(self, value): if isinstance(value,UINT): self.__field_entrysize=value else: self.__field_entrysize=UINT(value,**{'sizeinbytes': 2, 'constant': 0x01E0}) def __delfield_entrysize(self): del self.__field_entrysize entrysize=property(__getfield_entrysize, __setfield_entrysize, __delfield_entrysize, None) def __getfield_serial2(self): return self.__field_serial2.getvalue() def __setfield_serial2(self, value): if isinstance(value,UINT): self.__field_serial2=value else: self.__field_serial2=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial2(self): del self.__field_serial2 serial2=property(__getfield_serial2, __setfield_serial2, __delfield_serial2, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 2}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 23, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 2}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvi5225_116, 'length': NUMEMAILS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_lgvi5225_116, 'length': NUMEMAILS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, None) def __getfield_url(self): return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,USTRING): self.__field_url=value else: self.__field_url=USTRING(value,**{'sizeinbytes': 73, 'raiseonunterminatedread': False}) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "ringtone index for a call") def __getfield_secret(self): return self.__field_secret.getvalue() def __setfield_secret(self, value): if isinstance(value,UINT): self.__field_secret=value else: self.__field_secret=UINT(value,**{'sizeinbytes': 1}) def __delfield_secret(self): del self.__field_secret secret=property(__getfield_secret, __setfield_secret, __delfield_secret, None) def __getfield_memo(self): return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,USTRING): self.__field_memo=value else: self.__field_memo=USTRING(value,**{'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def __getfield_dunno1(self): try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UINT): self.__field_dunno1=value else: self.__field_dunno1=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_dunno2(self): try: self.__field_dunno2 except: self.__field_dunno2=UINT(**{'sizeinbytes': 2, 'default': 0}) return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UINT): self.__field_dunno2=value else: self.__field_dunno2=UINT(value,**{'sizeinbytes': 2, 'default': 0}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_numbertypes(self): try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvi5225_124, 'length': NUMPHONENUMBERS}) return self.__field_numbertypes.getvalue() def __setfield_numbertypes(self, value): if isinstance(value,LIST): self.__field_numbertypes=value else: self.__field_numbertypes=LIST(value,**{'elementclass': _gen_p_lgvi5225_124, 'length': NUMPHONENUMBERS}) def __delfield_numbertypes(self): del self.__field_numbertypes numbertypes=property(__getfield_numbertypes, __setfield_numbertypes, __delfield_numbertypes, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvi5225_126, 'length': NUMPHONENUMBERS}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'elementclass': _gen_p_lgvi5225_126, 'length': NUMPHONENUMBERS}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def iscontainer(self): return True def containerelements(self): yield ('wallpaper', self.__field_wallpaper, None) yield ('serial1', self.__field_serial1, None) yield ('entrysize', self.__field_entrysize, None) yield ('serial2', self.__field_serial2, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('name', self.__field_name, None) yield ('group', self.__field_group, None) yield ('emails', self.__field_emails, None) yield ('url', self.__field_url, None) yield ('ringtone', self.__field_ringtone, "ringtone index for a call") yield ('secret', self.__field_secret, None) yield ('memo', self.__field_memo, None) yield ('dunno1', self.__field_dunno1, None) yield ('dunno2', self.__field_dunno2, None) yield ('numbertypes', self.__field_numbertypes, None) yield ('numbers', self.__field_numbers, None) class _gen_p_lgvi5225_116(BaseProtogenClass): 'Anonymous inner class' __fields=['email'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvi5225_116,self).__init__(**dict) if self.__class__ is _gen_p_lgvi5225_116: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvi5225_116,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvi5225_116,kwargs) if len(args): dict2={'sizeinbytes': 73, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_email=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_email.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_email=USTRING(**{'sizeinbytes': 73, 'raiseonunterminatedread': False}) self.__field_email.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 73, 'raiseonunterminatedread': False}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def iscontainer(self): return True def containerelements(self): yield ('email', self.__field_email, None) class _gen_p_lgvi5225_124(BaseProtogenClass): 'Anonymous inner class' __fields=['numbertype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvi5225_124,self).__init__(**dict) if self.__class__ is _gen_p_lgvi5225_124: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvi5225_124,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvi5225_124,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_numbertype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numbertype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numbertype=UINT(**{'sizeinbytes': 1}) self.__field_numbertype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numbertype(self): return self.__field_numbertype.getvalue() def __setfield_numbertype(self, value): if isinstance(value,UINT): self.__field_numbertype=value else: self.__field_numbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_numbertype(self): del self.__field_numbertype numbertype=property(__getfield_numbertype, __setfield_numbertype, __delfield_numbertype, None) def iscontainer(self): return True def containerelements(self): yield ('numbertype', self.__field_numbertype, None) class _gen_p_lgvi5225_126(BaseProtogenClass): 'Anonymous inner class' __fields=['number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvi5225_126,self).__init__(**dict) if self.__class__ is _gen_p_lgvi5225_126: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvi5225_126,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvi5225_126,kwargs) if len(args): dict2={'sizeinbytes': 49, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_number=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) bitpim-1.0.7+dfsg1/src/phones/p_sanyo3200.p0000644001616600161660000002620310655002150016365 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Stephen Wood ### Copyright (C) 2007 Yan Ke ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_sanyo3200.p 2766 2006-01-24 05:22:04Z yke $ %{ """Various descriptions of data specific to Sanyo SCP-3200""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * from p_brew import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 # Need to check. Is max phone will hold 32/96 or 33/97 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 HASRINGPICBUF=0 #BREW_FILE_SYSTEM=2 %} PACKET req41: 1 UINT {'default': 0x41} +fortyone 6 USTRING {'terminator': None} msl PACKET res41: 1 UINT {'default': 0x41} fortyone 1 UINT ans PACKET fastatusrequest: * sanyofaheader {'faset': 0x13} +preamble 1 UINT {'default': 0} +command 1 UINT {'default': 0} +packettype PACKET fastatusresponse: * sanyofaheader +preamble 1 UINT {'default': 0} status 1 UINT {'default': 0} packettype PACKET response: * UNKNOWN pad PACKET {'readwrite': 0x26} qcpheader: 1 UINT readwrite 1 UINT command 1 UINT packettype PACKET {'readwrite': 0x27} qcpwriteheader: 1 UINT readwrite 1 UINT command 1 UINT packettype * UNKNOWN pad PACKET eventrequest: * qcpheader {'packettype': 0x0c, 'command': 0x23} +header 1 UINT slot 129 UNKNOWN +pad PACKET eventslotinuserequest: * qcpheader {'readwrite': 0x26, 'packettype': 0x0d, 'command': 0x74} +header 1 UINT slot 129 UNKNOWN +pad PACKET evententry: 1 UINT slot 14 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} eventname 7 UNKNOWN +pad1 1 UINT eventname_len 4 UINT start "# seconds since Jan 1, 1980 approximately" 4 UINT end 14 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} location 7 UNKNOWN +pad2 1 UINT location_len 4 UINT alarmdiff "Displayed alarm time" 1 UINT period "No, Daily, Weekly, Monthly, Yearly" 1 UINT dom "Day of month for the event" 4 UINT alarm 1 UNKNOWN +pad3 1 UINT {'default': 0} +serial "Some kind of serial number" 3 UNKNOWN +pad4 2 UINT ringtone PACKET eventresponse: * qcpheader header * evententry entry * UNKNOWN pad PACKET eventslotinuseresponse: * qcpheader header 1 UINT slot 1 UINT flag * UNKNOWN pad PACKET eventslotinuseupdaterequest: * qcpwriteheader {'packettype': 0x0d, 'command': 0x74} +header 1 UINT slot 1 UINT flag 124 UNKNOWN +pad PACKET eventupdaterequest: * qcpwriteheader {'packettype': 0x0c, 'command':0x23} +header * evententry entry 56 UNKNOWN +pad PACKET callalarmrequest: * sanyoheader {'packettype': 0x0c, 'command': 0x24} +header 1 UINT slot 501 UNKNOWN +pad PACKET callalarmentry: 1 UINT slot 1 UINT flag "0: Not used, 1: Scheduled, 2: Already Happened" 1 UINT {'default': 0} +dunno1 "Related to Snooze?" 49 USTRING {'raiseonunterminatedread': False} phonenum 1 UINT phonenum_len 4 UINT date "# seconds since Jan 1, 1980 approximately" 1 UINT period "No, Daily, Weekly, Monthly, Yearly" 1 UINT dom "Day of month for the event" 4 UINT datedup "Copy of the date. Always the same???" 16 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} name 1 UNKNOWN +pad1 1 UINT name_len 1 UINT phonenumbertype "1: Home, 2: Work, ..." 2 UINT phonenumberslot 1 UINT {'default': 0} +serial 3 UNKNOWN +pad2 1 UINT ringtone PACKET callalarmresponse: * sanyoheader header * callalarmentry entry 417 UNKNOWN pad PACKET callalarmupdaterequest: * sanyowriteheader {'packettype': 0x0c, 'command':0x24} +header * callalarmentry entry 417 UNKNOWN +pad PACKET bufferpartrequest: P UINT {'constant': 1024} bufpartsize * sanyoheader {'packettype': 0x0f} +header 1026 UNKNOWN +pad PACKET bufferpartresponse: P UINT {'constant': 1024} bufpartsize * sanyoheader header * DATA {'sizeinbytes': self.bufpartsize} data 2 UNKNOWN pad PACKET bufferpartupdaterequest: P UINT {'constant': 1024} bufpartsize * sanyowriteheader {'packettype': 0x0f} +header * DATA {'sizeinbytes': self.bufpartsize} data 2 UNKNOWN +pad PACKET calleridbuffer: "Index so that phone can show a name instead of number" # This 7000 byte buffer is formed from the concatenation of 500 bytes of # payload from commands 0X 50 0F through 0X 5D 0F P UINT {'constant': 500} maxentries P UINT {'constant': 0x46} startcommand "Starting command for R/W buf parts" P UINT {'constant': 7168} bufsize P USTRING {'default': "callerid"} +comment 2 UINT numentries "Number phone numbers" * LIST {'length': self.maxentries, 'elementclass': calleridentry, 'createdefault': True} +items 666 UNKNOWN +pad PACKET ringerpicbuffer: "Index of ringer and picture assignments" # This 1000 byte buffer is formed from the concatenation of 500 bytes of # payload from commands 0X 46 0F through 0X 47 0F P UINT {'constant': _NUMPBSLOTS} numpbslots "Number of phone book slots" P UINT {'constant': 0xd7} startcommand "Starting command for R/W buf parts" P UINT {'constant': 0x0f} packettype "Non standard packet type" P UINT {'constant': 1024} bufsize P USTRING {'default': "ringer/picture assignments"} +comment * LIST {'length': _NUMPBSLOTS} +ringtones: 1 UINT ringtone "ringtone index" * LIST {'length': _NUMPBSLOTS} +wallpapers: 1 UINT wallpaper "wallpaper index" 424 UNKNOWN +pad #PACKET ringerpicbufferrequest: # "Packet to get ringer picture buffer" # * sanyoheader {'packettype': 0x0c, 'command': 0xd7} +header # 1026 UNKNOWN +pad #PACKET ringerpicbufferresponse: # * sanyoheader +header # * ringerpicbuffer +buffer PACKET pbsortbuffer: "Various arrays for sorting the phone book, speed dial, determining which" # slots are in use, etc. # This 4000 byte buffer is formed from the concatenation of 500 bytes of # payload from commands 0X 3c 0F through 0X 43 0F P UINT {'constant': 0x3c} startcommand "Starting command for R/W buf parts" P UINT {'constant': 4096} bufsize P USTRING {'default': "sort buffer"} +comment * LIST {'length': _NUMPBSLOTS, 'createdefault': True} +usedflags: 1 UINT used "1 if slot in use" 2 UINT slotsused 2 UINT slotsused2 "Always seems to be the same. Why duplicated?" 2 UINT numemail "Num of slots with email" 2 UINT numurl "Num of slots with URL" * LIST {'length': _NUMPBSLOTS} +firsttypes: 1 UINT firsttype "First phone number type in each slot" * LIST {'length': _NUMPBSLOTS} +sortorder: 2 UINT {'default': 0xffff} pbslot * USTRING {'terminator': None, 'sizeinbytes': _NUMPBSLOTS} pbfirstletters * LIST {'length': _NUMPBSLOTS} +sortorder2: "Is this the same" 2 UINT {'default': 0xffff} pbslot * LIST {'length': _NUMSPEEDDIALS} +speeddialindex: 2 UINT {'default': 0xffff} pbslotandtype * LIST {'length': _NUMLONGNUMBERS} +longnumbersindex: 2 UINT {'default': 0xffff} pbslotandtype * LIST {'length': _NUMPBSLOTS} +emails: "Sorted list of slots with Email" 2 UINT {'default': 0xffff} pbslot * USTRING {'terminator': None, 'sizeinbytes': _NUMPBSLOTS} emailfirstletters "First letters in sort order" * LIST {'length': _NUMPBSLOTS} +urls: "Sorted list of slots with a URL" 2 UINT {'default': 0xffff} pbslot * USTRING {'terminator': None, 'sizeinbytes': _NUMPBSLOTS} urlfirstletters "First letters in sort order" 162 UNKNOWN +pad PACKET wallpaperbuffer: "Addition buffer of wallpaper assignment info" # 1500 byte buffer P UINT {'constant': _NUMPBSLOTS} numpbslots "Number of phone book slots" P UINT {'constant': 0x69} startcommand "Starting command for R/W buf parts" P UINT {'constant': 2048} bufsize P USTRING {'default': "wallpaper assignment info"} +comment * LIST {'length': _NUMPBSLOTS, 'elementclass': wallpaperinfo} +wallpapers 548 UNKNOWN +pad PACKET messagerequest: * sanyoheader {'packettype': 0x0c, 'command': 0xe1} +header 1 UINT slot 501 UNKNOWN +pad PACKET messagesentrequest: * sanyoheader {'packettype': 0x0d, 'command': 0x55} +header 1 UINT slot 501 UNKNOWN +pad PACKET messageentry: 1 UINT slot 1 UINT read 1 UINT counter 3 UNKNOWN pad1 1 UINT dunno1 1 UINT dunno2 1 UINT dunno3 1 UNKNOWN pad2 1 UINT dunno4 1 UINT dunno5 1 UNKNOWN pad3 1 UINT message_len 255 USTRING message "Text of the notification" 1 UNKNOWN pad4 1 UINT year 1 UINT month 1 UINT day 1 UINT hour 1 UINT minute 1 UINT second 1 UINT callback_len 34 USTRING callback 1 UINT phonenum_len 37 USTRING phonenum 1 UINT dunno6 1 UINT priority 3 UNKNOWN pad6 1 UINT dunno7 1 UINT dunno8 PACKET messageresponse: * sanyoheader header * messageentry entry * UNKNOWN pad PACKET messagesentresponse: * sanyoheader header * messageentry entry * UNKNOWN pad PACKET foldernamerequest: * sanyoheader {'packettype': 0x0b, 'command': 0xef} +header 1 UINT index 501 UNKNOWN +pad PACKET foldernameentry: 1 UINT index 1 UINT flag "0 if empty, 1 in use" 1 UINT autofile "If 1, autofile messages with keyword" 1 UINT notify 1 UINT icon 13 USTRING {'raiseonunterminatedread': False} name "Name of the folder" 3 UNKNOWN +pad 14 USTRING {'raiseonunterminatedread': False} keyword PACKET foldernameresponse: * sanyoheader header * foldernameentry entry 467 UNKNOWN pad PACKET todorequest: * sanyoheader {'packettype': 0x0c,'command': 0x25} +header 1 UINT slot 501 UNKNOWN +pad PACKET todoentry: 1 UINT slot 1 UINT flag "0: Not used, 1: Used" 14 USTRING {'raiseonunterminatedread': False} todo 7 UNKNOWN +pad1 1 UINT todo_len 1 UINT priority "0: Normal, 1: Urgent, 2: Done" 1 UINT +dunno "Maybe always zero" 1 UINT order "Gets sorted on screen in this order" PACKET todoresponse: * sanyoheader header * todoentry entry 472 UNKNOWN pad PACKET historyrequest: P UINT type "0: Outgoing, 1: Incoming, 2: Missed" if self.type==OUTGOING: * sanyoheader {'packettype': 0x0c, 'command': 0x3d} +header if self.type==INCOMING: * sanyoheader {'packettype': 0x0c, 'command': 0x3e} +header if self.type==MISSED: * sanyoheader {'packettype': 0x0c, 'command': 0x3f} +header 1 UINT slot 501 UNKNOWN +pad PACKET historyentry: 2 UINT slot 4 GPSDATE date 1 UINT phonenumlen 48 USTRING {'raiseonunterminatedread': False} phonenum 16 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} name PACKET historyresponse: * sanyoheader header * historyentry entry bitpim-1.0.7+dfsg1/src/phones/p_lglg8100.p0000644001616600161660000003144010454042735016176 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2005 Roger Binns ### Copyright (C) 2006 Simon Capper ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lgvx8100.p 3054 2006-04-04 13:33:27Z skyjunky $ %{ """Various descriptions of data specific to LG LG8100 (Telus)""" from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx7000 except as noted # below from p_lgvx7000 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb # vx8100 uses a type based index for speed dials instead of positional like the vx4400 SPEEDDIALINDEX=1 MAXCALENDARDESCRIPTION=32 NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=500 MAXCALENDARDESCRIPTION=38 NUMEMAILS=2 NUMPHONENUMBERS=5 SMS_CANNED_MAX_ITEMS=18 SMS_CANNED_MAX_LENGTH=101 BREW_FILE_SYSTEM=2 # Media type MEDIA_TYPE_RINGTONE=6 MEDIA_TYPE_IMAGE=0x0300 MEDIA_TYPE_SOUND=0x0402 MEDIA_TYPE_SDIMAGE=0x0008 MEDIA_TYPE_SDSOUND=0x000C MEDIA_TYPE_VIDEO=0x0304 MEDIA_RINGTONE_DEFAULT_ICON=1 MEDIA_IMAGE_DEFAULT_ICON=0 MEDIA_VIDEO_DEFAULT_ICON=0 PHONE_ENCODING='iso8859_1' # to allow for mixed up file naming for this phone this_takes_the_prize_for_the_most_brain_dead_call_history_file_naming_ive_seen=1 %} PACKET speeddial: 2 UINT {'default': 0xffff} +entry 1 UINT {'default': 0xff} +number PACKET speeddials: * LIST {'length': NUMSPEEDDIALS, 'elementclass': speeddial} +speeddials PACKET indexentry: 2 UINT index 2 UINT type 255 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False } filename "includes full pathname" 4 UINT {'default':0} +icon 1 UINT {'default':0} +dunno1 4 UINT {'default': 0} +date "i think this is bitfield of the date" 4 UINT {'default':0} +dunno 4 UINT {'default': 0} +size "size of the file, can be set to zero" PACKET indexfile: "Used for tracking wallpaper and ringtones" * LIST {'elementclass': indexentry, 'createdefault': True} +items PACKET pbgroup: "A single group" 4 UINT {'default': 0xFFFF} +unknown1 4 UINT {'default': 0xFFFF} +unknown2 23 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } name PACKET pbgroups: "Phonebook groups" * LIST {'elementclass': pbgroup} +groups # All STRINGS have raiseonterminatedread as False since the phone does # occassionally leave out the terminator byte # Note if you change the length of any of these fields, you also # need to modify com_lgvx7000 to give a different truncateat parameter # in the convertphonebooktophone method PACKET pbentry: 4 UINT serial1 2 UINT {'constant': 0x181, 'constantexception': PhoneBookBusyException} +entrysize 4 UINT serial2 2 UINT entrynumber 23 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 2 UINT group * LIST {'length': NUMEMAILS} +emails: 49 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} email 2 UINT ringtone "ringtone index for a call" 2 UINT msgringtone "ringtone index for a text message" 2 UINT wallpaper * LIST {'length': NUMPHONENUMBERS} +numbertypes: 1 UINT numbertype * LIST {'length': NUMPHONENUMBERS} +numbers: 49 USTRING {'raiseonunterminatedread': False} number * UNKNOWN +unknown PACKET pbreadentryresponse: "Results of reading one entry" * pbheader header * pbentry entry PACKET pbupdateentryrequest: * pbheader {'command': 0x04, 'flag': 0x01} +header * pbentry entry PACKET pbappendentryrequest: * pbheader {'command': 0x03, 'flag': 0x01} +header * pbentry entry ### ### The calendar ### # # The calendar consists of one file listing events and an exception # file that lists exceptions. These exceptions suppress a particular # instance of a repeated event. For example, if you setup something # to happen monthly, but changed the 1st february event, then the # schedule will contain the repeating event, and the 1st feb one, # and the suppresions/exceptions file will point to the repeating # event and suppress the 1st feb. # The phone uses the position within the file to give an event an id PACKET scheduleexception: 4 UINT pos "Refers to event id (position in schedule file) that this suppresses" 1 UINT day 1 UINT month 2 UINT year PACKET scheduleexceptionfile: * LIST {'elementclass': scheduleexception} +items PACKET scheduleevent: 1 UINT index 1 UINT { 'default':1} +unknown0 4 UINT { 'default':0} +unknown1 4 UINT pos "position within file, used as an event id" 33 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } description 4 LGCALDATE start 4 LGCALDATE end 4 TELUSLGCALREPEAT repeat # complicated bit mapped field 1 UINT alarmindex_vibrate #LSBit of this set vibrate ON(0)/OFF(1), the 7 MSBits are the alarm index #the alarmindex is the index into the amount of time in advance of the #event to notify the user. It is directly related to the alarmminutes #and alarmhours below, valid values are # 7=1week, 6=3days, 5=1day, 4=1hour, 3=30mins, 2=15mins, 1=0mins, 0=NoAlarm 1 UINT ringtone 1 UINT { 'default':0} +unknown2 1 UINT alarmminutes "a value of 0x64 indicates not set" 1 UINT alarmhours "a value of 0x64 indicates not set" 1 UINT { 'default':0} +unknown3 PACKET schedulefile: 2 UINT numactiveitems # plus 1 * LIST {'elementclass': scheduleevent} +events PACKET call: 4 GPSDATE GPStime #no. of seconds since 0h 1-6-80, based off local time. 4 UINT unknown2 # different for each call 4 UINT duration #seconds, not certain about length of this field 49 USTRING {'raiseonunterminatedread': False} number 36 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 2 UINT numberlength # length of phone number 1 UINT pbnumbertype # 1=cell, 2=home, 3=office, 4=cell2, 5=fax, 6=vmail, 0xFF=not in phone book 3 UINT unknown2 # always seems to be 0 2 UINT pbentrynum #entry number in phonebook PACKET callhistory: 4 UINT numcalls 1 UINT unknown1 * LIST {'elementclass': call} +calls ### ### SMS ### # # There are 3 types of SMS records, The inbox, outbox and unsent (pending) # Unlike other records in the phone each message is stored in a separate file # All messages are in the 'sms' directory in the root of the phone # Inbox messages are in files called 'inbox000.dat', the number 000 varies for # each message, typically there are no gaps in the numbering, but gaps can appear # if a message is deleted. # Outbox message are named 'outbox000.dat', unsent messages are named 'sf00.dat', # only two digit file name that suggests a max of 100 message for this type. # Messages in the outbox get updated when the message is received by the recipient, # they contain a delivery flag and a delivery time for all the possible 10 recipients. # The vx8100 supports SMS contatination, this allows you to send text messages that are # longer than 160 characters. The format is different for these type of messages, but # it is supported by this implementation. # The vx8100 also allows you to put small graphics, sounds and animations in a message. # This implementation does not support these, if they are contained in a message they # will be ignored and just the text will be shown when you view the message in bitpim. # The text in the the messages is stored in 7-bit characters, so they have # to be unpacked, in concatinated messages and messages with embeded graphics etc. the # format uses the GSM 03.38 specified format, a good example of this can be found at # "http://www.dreamfabric.com/sms/hello.html". # For simple messages less than 161 characters with no graphics the format is simpler, # the 7-bit characters are just packed into memory in the order they appear in the # message. PACKET msg_record: # the first few fields in this packet have something to do with the type of SMS # message contained. EMS and concatinated text are coded differently than a # simple text message 1 UINT unknown1 # 0 1 UINT binary # 0=simple text, 1=binary/concatinated 1 UINT unknown3 # 0=simple text, 1=binary/concatinated 1 UINT unknown4 # 0 1 UINT unknown6 # 2=simple text, 9=binary/concatinated 1 UINT length * LIST {'length': 219} +msg: 1 UINT byte "individual byte of message" PACKET recipient_record: 33 DATA unknown1 49 USTRING number 1 UINT status # 1 when sent, 5 when received 4 LGCALDATE timesent 4 LGCALDATE timereceived 1 UINT unknown2 # 0 when not received, set to 1 when received 40 DATA unknown3 PACKET sms_saved: 4 UINT outboxmsg 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone if self.outboxmsg: * sms_out outbox if not self.outboxmsg: * sms_in inbox PACKET sms_out: 4 UINT index # starting from 1, unique 1 UINT unknown1 # zero 1 UINT locked # zero 4 LGCALDATE timesent # time the message was sent 2 UINT unknown2 # zero 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 21 USTRING {'encoding': PHONE_ENCODING} subject 1 UINT unknown4 1 UINT num_msg_elements # up to 1 * LIST {'elementclass': msg_record, 'length': 1} +messages 1 UINT unknown5 1 UINT priority # 0=normal, 1=high 12 DATA unknown7 3 DATA unknown8 # set to 00,00,01 23 USTRING callback * LIST {'elementclass': recipient_record,'length': 7} +recipients PACKET SMSINBOXMSGFRAGMENT: * LIST {'length': 181} +msg: 1 UINT byte "individual byte of message" PACKET sms_in: 4 UINT msg_index1 4 UINT msg_index2 # equal to the numerical part of the filename eg inbox002.dat 2 UINT unknown2 # set to 0 for simple message and 3 for binary 6 SMSDATE timesent 3 UINT unknown 1 UINT callback_length 38 USTRING callback 1 UINT sender_length * LIST {'length': 38} +sender: 1 UINT byte "individual byte of senders phone number" 12 DATA unknown3 # set to zeros 4 LGCALDATE lg_time # time the message was sent 3 UINT unknown4 # set to zeros 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 4 UINT unknown5 # zero 1 UINT read # 1 if message has been read, 0 otherwise 1 UINT locked # 1 if the message is locked, 0 otherwise 2 UINT unknown8 # zero 1 UINT priority # 1 if the message is high priority, 0 otherwise 6 DATA unknown11 # zero 21 USTRING {'encoding': PHONE_ENCODING} subject 1 UINT bin_header1 # 0 in simple message 1 if the message contains a binary header 1 UINT bin_header2 # 0 in simple message 9 if the message contains a binary header 2 UINT unknown6 # zeros 2 UINT multipartID # multi-part message ID, used for concatinated messages only 2 UINT unknown14 1 UINT bin_header3 # 0 in simple message 2 if the message contains a binary header 1 UINT num_msg_elements # max 20 elements (guessing on max here) * LIST {'length': 1} +msglengths: 1 UINT msglength "lengths of individual messages in septets" * LIST {'length': 1, 'elementclass': SMSINBOXMSGFRAGMENT} +msgs # 181 bytes per message, # 20 messages, 7-bit ascii for simple text. for binary header # first byte is header length not including the length byte # rest depends on content of header, not known at this time. # text alway follows the header although the format it different # than a simple SMS 20 DATA unknown12 P USTRING senders_name * DATA unknown9 # ?? inlcudes senders phone number in ascii PACKET sms_quick_text: * LIST {} +msgs: * USTRING {'encoding': PHONE_ENCODING} +msg # include terminating NULL # Text Memos. LG memo support is weak, it only supports the raw text and none of # the features that other phones support, when you run bitpim you see loads of # options that do not work in the vx8100 on the memo page PACKET textmemo: 151 USTRING { 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } text 4 LGCALDATE memotime # time the memo was writen PACKET textmemofile: 4 UINT itemcount * LIST { 'elementclass': textmemo } +items PACKET firmwareresponse: 1 UINT command 11 USTRING {'terminator': None} date1 8 USTRING {'terminator': None} time1 11 USTRING {'terminator': None} date2 8 USTRING {'terminator': None} time2 8 USTRING {'terminator': None} firmware bitpim-1.0.7+dfsg1/src/phones/com_lglg6190.py0000644001616600161660000005531310554051740016717 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Simon Capper ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### """Communicate with the LG 6190 (bell mobility) cell phone""" # standard modules import re import time import cStringIO import sha # my modules import p_lglg6190 import p_brew import common import commport import com_brew import com_phone import com_lg import com_lgvx4400 import prototypes import call_history import sms import fileinfo import memo class Phone(com_lgvx4400.Phone): "Talk to the LG 6190 cell phone" desc="LG 6190" helpid=None protocolclass=p_lglg6190 serialsname='lg6190' wallpaperindexfilename="download/dloadindex/brewImageIndex.map" ringerindexfilename="download/dloadindex/brewRingerIndex.map" imagelocations=( # offset, index file, files location, type, maximumentries ( 10, "download/dloadindex/brewImageIndex.map", "usr/Wallpaper", "images", 30), ( 50, "cam/pics.dat", "cam", "camera", 60), ) ringtonelocations=( # offset, index file, files location, type, maximumentries ( 50, "download/dloadindex/brewRingerIndex.map", "usr/Ringtone", "ringers", 30), ) builtinimages=() builtinringtones=( 'Ring 1', 'Ring 2', 'Ring 3', 'Ring 4', 'Ring 5', 'Default tone', 'Fearwell', 'Arabesque', 'Piano Sonata', 'Latin', 'When the Saints', 'Bach Cello Suite', 'Speedy Way', 'Cancan', 'String', 'Toccata and Fuge', 'Mozart Symphony 40', 'Nutcracker March', 'Funiculi', 'Ploka', 'Hallelujah', 'Mozart Aria', 'Leichte', 'Spring', 'Slavonic', 'Fantasy') def __init__(self, logtarget, commport): "Calls all the constructors and sets initial modes" com_phone.Phone.__init__(self, logtarget, commport) com_brew.BrewProtocol.__init__(self) com_lg.LGPhonebook.__init__(self) self.log("Attempting to contact phone") self._cal_has_voice_id=hasattr(self.protocolclass, 'cal_has_voice_id') \ and self.protocolclass.cal_has_voice_id self.mode=self.MODENONE # media functions. In addition to the usual brew index this silly phone puts the media files in a directory with the same name as # the original file (without the extension) renames the media file "body" and then creates a '.desc' file that contains all the # file info that would have been there anyway if they had not renamed it in the first place. Unlike the .desc file on the 4600 that # also doubles up as the index, the .desc file seems to serve no useful purpose. # they also store the cam images in a different way than other media. I guess they never heard of code reuse, modular design etc. at # least the phone looks good, far more important that being well designed and actually working well # As a result we have to override a bunch of the media functions to make this phone work... def getmediaindex(self, builtins, maps, results, key): """Gets the media (wallpaper/ringtone) index @param builtins: the builtin list on the phone @param results: places results in this dict @param maps: the list of index files and locations @param key: key to place results in """ self.log("Reading "+key) media={} # builtins c=1 for name in builtins: media[c]={'name': name, 'origin': 'builtin' } c+=1 # the maps type=None for offset,indexfile,location,type,maxentries in maps: if type=='camera': index=self.getcamindex(indexfile, location) else: index=self.getindex(indexfile, location) for i in index: media[i+offset]={'name': index[i], 'origin': type} results[key]=media return media def getcamindex(self, indexfile, location, getmedia=False): "Read an index file" index={} try: buf=prototypes.buffer(self.getfilecontents(indexfile)) except com_brew.BrewNoSuchFileException: # file may not exist return index g=self.protocolclass.camindexfile() g.readfrombuffer(buf, logtitle="Camera index file") self.log("Cam index file read") for i in g.items: if len(i.name): # the name in the index file is for display purposes only filename="pic%02d.jpg" % i.index if not getmedia: index[i.index]=filename else: try: contents=self.getfilecontents(location+"/"+filename+"/body") except (com_brew.BrewNoSuchFileException,com_brew.BrewNoSuchDirectoryException,com_brew.BrewNameTooLongException): self.log("Can't find the actual content in "+location+"/"+filename+"/body") continue index[filename]=contents return index def getindex(self, indexfile, location, getmedia=False): "Read an index file" index={} try: buf=prototypes.buffer(self.getfilecontents(indexfile)) except com_brew.BrewNoSuchFileException: # file may not exist return index g=self.protocolclass.indexfile() g.readfrombuffer(buf, logtitle="Index file %s read" % (indexfile,)) for i in g.items: if i.index!=0xffff and len(i.name): # read the .desc file try: buf=prototypes.buffer(self.getfilecontents(location+"/"+i.name+"/.desc")) except com_brew.BrewNoSuchFileException: self.log("No .desc file in "+location+"/"+i.name+" - ignoring directory") continue desc=self.protocolclass.mediadesc() desc.readfrombuffer(buf, logtitle=".desc file %s/.desc read" % (location+"/"+i.name,)) filename=self._createnamewithmimetype(i.name, desc.mimetype) if not getmedia: index[i.index]=filename else: try: # try to read it using name in desc file contents=self.getfilecontents(location+"/"+i.name+"/"+desc.filename) except (com_brew.BrewNoSuchFileException,com_brew.BrewNoSuchDirectoryException): try: # then try using "body" contents=self.getfilecontents(location+"/"+i.name+"/body") except (com_brew.BrewNoSuchFileException,com_brew.BrewNoSuchDirectoryException,com_brew.BrewNameTooLongException): self.log("Can't find the actual content in "+location+"/"+i.name+"/body") continue index[filename]=contents return index def _createnamewithmimetype(self, name, mt): name=common.basename(name) if mt=="image/jpeg": mt="image/jpg" try: return name+self.__mimetoextensionmapping[mt] except KeyError: self.log("Unable to figure out extension for mime type "+mt) return name __mimetoextensionmapping={ 'image/jpg': '.jpg', 'image/bmp': '.bmp', 'image/png': '.png', 'image/gif': '.gif', 'image/bci': '.bci', 'audio/mpeg': '.mp3', 'audio/midi': '.mid', 'audio/qcp': '.qcp' } def _getmimetype(self, name): ext=common.getext(name.lower()) if len(ext): ext="."+ext if ext==".jpeg": return "image/jpg" # special case for mt,extension in self.__mimetoextensionmapping.items(): if ext==extension: return mt self.log("Unable to figure out a mime type for "+name) assert False, "No idea what type "+ext+" is" return "x-unknown/x-unknown" def getmedia(self, maps, result, key): """Returns the contents of media as a dict where the key is a name as returned by getindex, and the value is the contents of the media""" media={} for offset,indexfile,location,origin,maxentries in maps: if origin=='camera': media.update(self.getcamindex(indexfile, location, getmedia=True)) else: media.update(self.getindex(indexfile, location, getmedia=True)) result[key]=media return result def savemedia(self, mediakey, mediaindexkey, maps, results, merge, reindexfunction): """Actually saves out the media @param mediakey: key of the media (eg 'wallpapers' or 'ringtones') @param mediaindexkey: index key (eg 'wallpaper-index') @param maps: list index files and locations @param results: results dict @param merge: are we merging or overwriting what is there? @param reindexfunction: the media is re-indexed at the end. this function is called to do it """ print results.keys() # I humbly submit this as the longest function in the bitpim code ... # wp and wpi are used as variable names as this function was originally # written to do wallpaper. it works just fine for ringtones as well wp=results[mediakey].copy() wpi=results[mediaindexkey].copy() # remove builtins for k in wpi.keys(): if wpi[k]['origin']=='builtin': del wpi[k] # sort results['mediakey'+'-index'] into origin buckets # build up list into init init={} for offset,indexfile,location,type,maxentries in maps: if type=='camera': continue init[type]={} for k in wpi.keys(): if wpi[k]['origin']==type: index=k-offset name=wpi[k]['name'] data=None del wpi[k] for w in wp.keys(): if wp[w]['name']==name and wp[w]['origin']==type: data=wp[w]['data'] del wp[w] if not merge and data is None: # delete the entry continue init[type][index]={'name': name, 'data': data} # init now contains everything from wallpaper-index print init.keys() # now look through wallpapers and see if anything remaining was assigned a particular # origin for w in wp.keys(): o=wp[w].get("origin", "") if o is not None and len(o) and o in init: idx=-1 while idx in init[o]: idx-=1 init[o][idx]=wp[w] del wp[w] # we now have init[type] with the entries and index number as key (negative indices are # unallocated). Proceed to deal with each one, taking in stuff from wp as we have space for offset,indexfile,location,type,maxentries in maps: if type=='camera': continue index=init[type] try: dirlisting=self.getfilesystem(location) except com_brew.BrewNoSuchDirectoryException: self.mkdirs(location) dirlisting={} # rename keys to basename, allow for debug filesystem not putting full path in key for i in dirlisting.keys(): if len(i)>len(location) and i[len(location)]==location: dirlisting[i[len(location)+1:]]=dirlisting[i] del dirlisting[i] # what we will be deleting dellist=[] if not merge: # get existing wpi for this location wpi=results[mediaindexkey] for i in wpi: entry=wpi[i] if entry['origin']==type: # it is in the original index, are we writing it back out? delit=True for idx in index: if index[idx]['name']==entry['name']: delit=False break if delit: if common.stripext(entry['name']) in dirlisting: dellist.append(common.stripext(entry['name'])) else: self.log("%s in %s index but not filesystem" % (entry['name'], type)) # go ahead and delete unwanted files print "deleting",dellist for f in dellist: self.rmdirs(location+"/"+f) # slurp up any from wp we can take while len(index)maxentries: keys=index.keys() keys.sort() for k in keys[maxentries:]: idx=-1 while idx in wp: idx-=1 wp[idx]=index[k] del index[k] # write out the new index keys=index.keys() keys.sort() ifile=self.protocolclass.indexfile() ifile.numactiveitems=len(keys) for k in keys: entry=self.protocolclass.indexentry() entry.index=k entry.name=common.stripext(index[k]['name']) ifile.items.append(entry) while len(ifile.items) ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### """Communicate with the LG 6200 (Sprint) cell phone""" # standard modules import re import time import cStringIO import sha # my modules import p_lglg6200 import p_brew import common import commport import com_brew import com_phone import com_lg import com_lgvx4400 import com_lgpm225 import prototypes import call_history import sms import fileinfo import memo class Phone(com_lgpm225.Phone): "Talk to the LG 6200 cell phone" desc="LG 6200" helpid=None protocolclass=p_lglg6200 serialsname='lg6200' # read only locations, for regular ringers/wallpaper this phone stores # the information in a different location imagelocations=( # offset, index file, files location, type, maximumentries (0x600, "setas/dcamIndex.map", "Dcam/Wallet", "camera", 50, 6), ) ringtonelocations=( # offset, index file, files location, type, maximumentries (0x1100, "setas/voicememoRingerIndex.map", "VoiceDB/All/Memos", "voice_memo", 50, 11), ) builtinimages=() builtinringtones=( 'Ring 1', 'Ring 2', 'Ring 3', 'Ring 4', 'Ring 5', 'Ring 6', 'Alert 1', 'Alert 2', 'Alert 3', 'Alert 4', 'Alert 5', 'Alert 6', 'Jazztic', 'Rock & Roll', 'Grand waltz', 'Toccata and Fugue', 'Sunday afternoon', 'Bumble bee', 'Circus band', 'Cuckoo waltz', 'Latin', 'CanCan', 'Play tag', 'Eine kleine Nacht', 'Symphony No.25 in G Minor', 'Capriccio a minor', 'Moon light', 'A nameless girl', 'From the new world', 'They called me Elvis') def __init__(self, logtarget, commport): "Calls all the constructors and sets initial modes" com_phone.Phone.__init__(self, logtarget, commport) com_brew.BrewProtocol.__init__(self) com_lg.LGPhonebook.__init__(self) self.log("Attempting to contact phone") self._cal_has_voice_id=hasattr(self.protocolclass, 'cal_has_voice_id') \ and self.protocolclass.cal_has_voice_id self.mode=self.MODENONE #----- Phone Detection ----------------------------------------------------------- # this phone has no version file, but the string is in one of the nvm files brew_version_file='nvm/nvm/nvm_lg_param' brew_version_txt_key='LG6200_version_data' my_model='LG_LG6200' def eval_detect_data(self, res): found=False if res.get(self.brew_version_txt_key, None) is not None: found=res[self.brew_version_txt_key][0x5b1:0x5b1+len(self.my_model)]==self.my_model if found: res['model']=self.my_model res['manufacturer']='LG Electronics Inc' s=res.get(self.esn_file_key, None) if s: res['esn']=self.get_esn(s) def getphoneinfo(self, phone_info): self.log('Getting Phone Info') try: s=self.getfilecontents(self.brew_version_file) if s[0x5b1:0x5b1+len(self.my_model)]==self.my_model: phone_info.append('Model:', self.my_model) phone_info.append('ESN:', self.get_brew_esn()) req=p_brew.firmwarerequest() #res=self.sendbrewcommand(req, self.protocolclass.firmwareresponse) #phone_info.append('Firmware Version:', res.firmware) txt=self.getfilecontents("nvm/nvm/nvm_0000")[0x241:0x24b] phone_info.append('Phone Number:', txt) except: pass return parentprofile=com_lgpm225.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='LG_LG6200' # from Sasktel (Bell Mobility) brew_required=True RINGTONE_LIMITS= { 'MAXSIZE': 250000 } WALLPAPER_WIDTH=160 WALLPAPER_HEIGHT=120 MAX_WALLPAPER_BASENAME_LENGTH=30 WALLPAPER_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 .-_" WALLPAPER_CONVERT_FORMAT="jpg" MAX_RINGTONE_BASENAME_LENGTH=30 RINGTONE_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 .-_" DIALSTRING_CHARS="[^0-9PT#*]" # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 128, 'height': 160, 'format': "JPEG"})) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('memo', 'read', None), # all memo list reading ('sms', 'read', None), # all SMS list reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('memo', 'write', 'OVERWRITE'), # all memo list writing ('sms', 'write', 'OVERWRITE'), # all SMS list writing ) bitpim-1.0.7+dfsg1/src/phones/com_lgvx6000.py0000644001616600161660000001565010554051740016740 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgvx6000.py 3918 2007-01-19 05:15:12Z djpham $ """Communicate with the LG VX6000 cell phone The VX6000 is substantially similar to the VX4400 except that it supports more image formats, has wallpapers in no less than 5 locations and puts things in slightly different directories. The code in this file mainly inherits from VX4400 code and then extends where the 6000 has extra functionality """ # standard modules import time import cStringIO import sha # my modules import common import copy import p_lgvx6000 import com_lgvx4400 import com_brew import com_phone import com_lg import prototypes import helpids class Phone(com_lgvx4400.Phone): "Talk to the LG VX6000 cell phone" desc="LG-VX6000" helpid=helpids.ID_PHONE_LGVX6000 protocolclass=p_lgvx6000 serialsname='lgvx6000' # more VX6000 indices imagelocations=( # offset, index file, files location, type, maximumentries ( 10, "download/dloadindex/brewImageIndex.map", "brew/shared", "images", 30) , ( 0xc8, "download/dloadindex/mmsImageIndex.map", "brew/shared/mms", "mms", 20), ( 0xdc, "download/dloadindex/mmsDrmImageIndex.map", "brew/shared/mms/d", "drm", 20), ( 0x82, None, None, "camera", 20) # nb camera must be last ) ringtonelocations=( # offset, index file, files location, type, maximumentries ( 50, "download/dloadindex/brewRingerIndex.map", "user/sound/ringer", "ringers", 30), ( 150, "download/dloadindex/mmsRingerIndex.map", "mms/sound", "mms", 20), ( 180, "download/dloadindex/mmsDrmRingerIndex.map", "mms/sound/drm", "drm", 20) ) builtinimages= ('Beach Ball', 'Towerbridge', 'Sunflower', 'Beach', 'Fish', 'Sea', 'Snowman') builtinringtones= ('Ring 1', 'Ring 2', 'Ring 3', 'Ring 4', 'Ring 5', 'Ring 6', 'Annen Polka', 'Leichte Kavallerie Overture', 'CanCan', 'Paganini', 'Bubble', 'Fugue', 'Polka', 'Mozart Symphony No. 40', 'Cuckoo Waltz', 'Rodetzky', 'Funicula', 'Hallelujah', 'Trumpets', 'Trepak', 'Prelude', 'Mozart Aria', 'William Tell overture', 'Spring', 'Slavonic', 'Fantasy') def __init__(self, logtarget, commport): com_lgvx4400.Phone.__init__(self,logtarget,commport) self.mode=self.MODENONE def getcameraindex(self): index={} try: buf=prototypes.buffer(self.getfilecontents("cam/pics.dat")) g=self.protocolclass.campicsdat() g.readfrombuffer(buf, logtitle="Read camera index") for i in g.items: if len(i.name): # index[i.index]={'name': i.name, 'date': i.taken, 'origin': 'camera' } # we currently use the filesystem name rather than rename in camera # since the latter doesn't include the file extension which then makes # life less pleasant once the file ends up on the computer index[i.index]={'name': "pic%02d.jpg"%(i.index,), 'date': i.taken, 'origin': 'camera' } except com_brew.BrewNoSuchFileException: # if the phone has no pictures it may not have a a cam/pics.dat file pass return index my_model='VX6000' def eval_detect_data(self, res): # Brute force: do not look into bpinfo data, which may incorrectly # identify this as a VX6000. Probably can/should be handled more gracefully # in the superclass. found=False if res.get(self.brew_version_txt_key, None) is not None: found=res[self.brew_version_txt_key][:len(self.my_model)]==self.my_model if found: res['model']=self.my_model res['manufacturer']='LG Electronics Inc' s=res.get(self.esn_file_key, None) if s: res['esn']=self.get_esn(s) parentprofile=com_lgvx4400.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='LG Electronics Inc' phone_model='VX6000' # use for auto-detection ## if __debug__: ## phone_manufacturer='LG Electronics Inc.' ## phone_model='VX6000 102' WALLPAPER_WIDTH=120 WALLPAPER_HEIGHT=131 MAX_WALLPAPER_BASENAME_LENGTH=32 WALLPAPER_FILENAME_CHARS="_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ." WALLPAPER_CONVERT_FORMAT="bmp" MAX_RINGTONE_BASENAME_LENGTH=32 RINGTONE_FILENAME_CHARS="_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ." # nb we don't allow save to camera so it isn't listed here imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "mms")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "drm")) def GetImageOrigins(self): return self.imageorigins ringtoneorigins=('ringers', 'mms', 'drm') excluded_ringtone_origins=('mms', 'drm') excluded_wallpaper_origins=('mms', 'drm') # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 120, 'height': 131, 'format': "BMP"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 120, 'height': 131, 'format': "BMP"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "fullscreen", {'width': 120, 'height': 160, 'format': "BMP"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('memo', 'read', None), # all memo list reading DJP ('memo', 'write', 'OVERWRITE'), # all memo list writing DJP ('call_history', 'read', None), ('sms', 'read', None), ('sms', 'write', 'OVERWRITE'), ) def __init__(self): parentprofile.__init__(self) bitpim-1.0.7+dfsg1/src/phones/p_motok1m.p0000644001616600161660000000206210733033631016320 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_motok1m.p 4516 2007-12-21 22:00:57Z djpham $ %{ """Various descriptions of data specific to Motorola V3c phones""" from prototypes import * from prototypes_moto import * from p_etsi import * from p_moto import * from p_motov710 import * PB_TOTAL_ENTRIES=1000 PB_RANGE=xrange(1,PB_TOTAL_ENTRIES+1) # System files in the WP subdir that are not wallpapers/images WP_EXCLUDED_FILES=frozenset(['..dir.dat', 'amthumb.db', 'customer_closing.gif', 'customer_opening.gif']) RT_PATH='motorola/shared/ringtone' SND_PATH='motorola/shared/audio' OBEX_Filename_Prefix='motorola/shared/' OBEX_Filename_Prefix_Len=len(OBEX_Filename_Prefix) def OBEXName(filename): if filename.startswith(OBEX_Filename_Prefix): return filename[OBEX_Filename_Prefix_Len:] raise ValueError %} bitpim-1.0.7+dfsg1/src/phones/p_sanyo7300.py0000644001616600161660000000110410122742673016566 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Sanyo SCP-7300""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 _NUMCALLHISTORY=20 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 #for sym in dir(p_sanyo): # print sym bitpim-1.0.7+dfsg1/src/phones/com_samsungspha460.py0000644001616600161660000000647010554051740020235 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_samsungspha460.py 3918 2007-01-19 05:15:12Z djpham $ """Communicate with a Samsung SPH-A460""" import sha import re import struct import common import commport import p_samsungspha460 import p_brew import com_brew import com_phone import com_samsung_packet import prototypes import helpids numbertypetab=('home','office','cell','pager','fax','none') class Phone(com_samsung_packet.Phone): "Talk to a Samsung SPH-A460 phone" desc="SPH-A460" helpid=helpids.ID_PHONE_SAMSUNGOTHERS protocolclass=p_samsungspha460 serialsname='spha460' __groups_range=xrange(5) imagelocations=() # offset, index file, files location, type, maximumentries __ams_index_file="ams/AmsRegistry" def __init__(self, logtarget, commport): com_samsung_packet.Phone.__init__(self, logtarget, commport) self.numbertypetab=numbertypetab self.mode=self.MODENONE def getfundamentals(self, results): """Gets information fundamental to interopating with the phone and UI.""" # use a hash of ESN and other stuff (being paranoid) self.log("Retrieving fundamental phone information") self.log("Phone serial number") print "Calling setmode MODEMODEM" self.setmode(self.MODEMODEM) print "Getting serial number" results['uniqueserial']=sha.new(self.get_esn()).hexdigest() self.log("Reading group information") print "Getting Groups" results['groups']=self.read_groups() print "Got Groups" self.log("Fundamentals retrieved") return results def savegroups(self, data): """Write the groups, sending only those groups that have had a name change. (So that ringers don't get messed up)""" groups=data['groups'] groups_onphone=self.read_groups() # Get groups on phone keys=groups.keys() keys.sort() for k in keys: if groups[k]['name']!=groups_onphone[k]['name']: if groups[k]['name']!="Unassigned": req=self.protocolclass.groupnamesetrequest() req.gid=k req.groupname=groups[k]['name'] # Response will have ERROR, even though it works self.sendpbcommand(req, self.protocolclass.unparsedresponse, ignoreerror=True) getwallpapers=None getringtones=None class Profile(com_samsung_packet.Profile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='SAMSUNG' phone_model='SPH-A460/148' def __init__(self): com_samsung_packet.Profile.__init__(self) self.numbertypetab=numbertypetab _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'read', None), # all calendar reading ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('todo', 'read', None), # all todo list reading ('todo', 'write', 'OVERWRITE'), # only overwriting calendar ) bitpim-1.0.7+dfsg1/src/phones/com_lgvx6100.py0000644001616600161660000001721510554051740016740 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### Copyright (C) 2004 John O'Shaughnessy ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgvx6100.py 3918 2007-01-19 05:15:12Z djpham $ """Communicate with the LG VX6100 cell phone The VX6100 is substantially similar to the VX4400 except that it supports more image formats, has wallpapers in no less than 5 locations and puts things in slightly different directories. The code in this file mainly inherits from VX4400 code and then extends where the 6100 has extra functionality """ # standard modules import time import cStringIO import sha # my modules import common import commport import copy import p_brew import p_lgvx6100 import com_lgvx4400 import com_brew import com_phone import com_lg import prototypes import call_history import helpids class Phone(com_lgvx4400.Phone): "Talk to the LG VX6100 cell phone" desc="LG-VX6100" helpid=helpids.ID_PHONE_LGVX6100 protocolclass=p_lgvx6100 serialsname='lgvx6100' # more VX6100 indices imagelocations=( # offset, index file, files location, type, maximumentries ( 16, "download/dloadindex/brewImageIndex.map", "brew/shared", "images", 60) , ( 200, "download/dloadindex/mmsImageIndex.map", "brew/shared/mms", "mms", 30), ( 240, "download/dloadindex/mmsDrmImageIndex.map", "brew/shared/mms/d", "drm", 20), ( 130, None, None, "camera", 60) # nb camera must be last ) ringtonelocations=( # offset, index file, files location, type, maximumentries ( 50, "download/dloadindex/brewRingerIndex.map", "user/sound/ringer", "ringers", 60), ( 150, "download/dloadindex/mmsRingerIndex.map", "mms/sound", "mms", 20), ( 180, "download/dloadindex/mmsDrmRingerIndex.map", "mms/sound/drm", "drm", 20) ) builtinimages= ('Sport', 'Butterfly', 'Cake', 'Niagara Falls', 'Rockefeller', 'Statue of Liberty', 'The Capital', 'Scenary','White Bear', 'Yacht' ) builtinringtones= ('Ring 1', 'Ring 2', 'Ring 3', 'Ring 4', 'Ring 5', 'VZW Default Tone', 'Farewell', 'Arabesque', 'Piano Sonata', 'Latin', 'When The Saints', 'Bach Cello Suite', 'Speedy Way', 'Cancan', 'Sting', 'Toccata and Fugue', 'Mozart Symphony 40', 'Nutcracker March', 'Funiculi', 'Polka', 'Hallelujah', 'Mozart Aria', 'Leichte', 'Spring', 'Slavonic', 'Fantasy', 'Chimes High', 'Chimes Low', 'Ding', 'Tada', 'Notify', 'Drum', 'Claps', 'Fanfare', 'Chord High', 'Chord Low') def __init__(self, logtarget, commport): com_lgvx4400.Phone.__init__(self,logtarget,commport) self.mode=self.MODENONE def makeentry(self, counter, entry, dict): e=com_lgvx4400.Phone.makeentry(self, counter, entry, dict) e.entrysize=0x202 return e def getcameraindex(self): index={} try: buf=prototypes.buffer(self.getfilecontents("cam/pics.dat")) g=self.protocolclass.campicsdat() g.readfrombuffer(buf, logtitle="Read camera index") for i in g.items: if len(i.name): # index[i.index]={'name': i.name, 'date': i.taken, 'origin': 'camera' } # we currently use the filesystem name rather than rename in camera # since the latter doesn't include the file extension which then makes # life less pleasant once the file ends up on the computer index[i.index]={'name': "pic%02d.jpg"%(i.index,), 'date': i.taken, 'origin': 'camera' } except com_brew.BrewNoSuchFileException: # if the phone has no pictures it may not have a a cam/pics.dat file pass return index my_model='VX6100' def getphoneinfo(self, phone_info): self.log('Getting Phone Info') try: s=self.getfilecontents('brew/version.txt') if s[:6]=='VX6100': phone_info.append('Model:', "VX6100") req=p_brew.firmwarerequest() res=self.sendbrewcommand(req, self.protocolclass.firmwareresponse) phone_info.append('Firmware Version:', res.firmware) s=self.getfilecontents("nvm/$SYS.ESN")[85:89] txt='%02X%02X%02X%02X'%(ord(s[3]), ord(s[2]), ord(s[1]), ord(s[0])) phone_info.append('ESN:', txt) txt=self.getfilecontents("nvm/nvm/nvm_0000")[577:587] phone_info.append('Phone Number:', txt) except: pass return parentprofile=com_lgvx4400.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='LG Electronics Inc' phone_model='VX6100' WALLPAPER_WIDTH=132 WALLPAPER_HEIGHT=148 MAX_WALLPAPER_BASENAME_LENGTH=24 WALLPAPER_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_ ." WALLPAPER_CONVERT_FORMAT="jpg" MAX_RINGTONE_BASENAME_LENGTH=24 RINGTONE_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_ ." ringtoneorigins=('ringers', 'mms', 'drm') excluded_ringtone_origins=('mms', 'drm') # nb we don't allow save to camera so it isn't listed here imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "mms")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "drm")) def GetImageOrigins(self): return self.imageorigins # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 132, 'height': 148, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 132, 'height': 148, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "fullscreen", {'width': 128, 'height': 160, 'format': "JPEG"})) # can the outside lcd display images? #imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", # {'width': 96, 'height': 64, 'format': "JPEG"})) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading ('memo', 'read', None), # all memo list reading ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('sms', 'write', 'OVERWRITE'), # all SMS list writing ('memo', 'write', 'OVERWRITE'), # all memo list writing ) def __init__(self): parentprofile.__init__(self) bitpim-1.0.7+dfsg1/src/phones/p_sanyo4900.p0000644001616600161660000000140110065461440016374 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_sanyo4900.p 1366 2004-06-21 04:25:04Z sawecw $ %{ """Various descriptions of data specific to Sanyo SCP-4900""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * import p_sanyo # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 _NUMCALLHISTORY=20 _MAXNUMBERLEN=48 _MAXEMAILLEN=48 #for sym in dir(p_sanyo): # print sym %} bitpim-1.0.7+dfsg1/src/phones/p_sanyo4920.p0000644001616600161660000000144710055225631016407 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_sanyo4920.p 1300 2004-05-26 23:43:21Z sawecw $ %{ """Various descriptions of data specific to Sanyo RL-4920""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 _NUMCALLHISTORY=20 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 #for sym in dir(p_sanyo): # print sym %} bitpim-1.0.7+dfsg1/src/phones/p_sanyo4930.p0000644001616600161660000001422210572177653016421 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_sanyo4930.p 4075 2007-03-03 04:55:07Z sawecw $ %{ """Various descriptions of data specific to Sanyo RL-4930""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=500 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 _NUMCALLHISTORY=20 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 HASRINGPICBUF=0 %} PACKET {'readwrite': 0x26} qcpheader: 1 UINT readwrite 1 UINT command 1 UINT packettype PACKET {'readwrite': 0x27} qcpwriteheader: 1 UINT readwrite 1 UINT command 1 UINT packettype # How can I override bufsize without repeating the whole thing? PACKET pbsortbuffer: "Various arrays for sorting the phone book, speed dial, determining which" # slots are in use, etc. # This 7168 byte buffer is formed from the concatenation of 1024 bytes of # payload from commands 0X 3c 0F through 0X 43 0F P UINT {'constant': 0x3c} startcommand "Starting command for R/W buf parts" P UINT {'constant': 7168} bufsize P USTRING {'default': "sort buffer"} +comment * LIST {'length': _NUMPBSLOTS, 'createdefault': True} +usedflags: 1 UINT used "1 if slot in use" 2 UINT slotsused 2 UINT slotsused2 "Always seems to be the same. Why duplicated?" 2 UINT numemail "Num of slots with email" 2 UINT numurl "Num of slots with URL" * LIST {'length': _NUMPBSLOTS} +firsttypes: 1 UINT firsttype "First phone number type in each slot" * LIST {'length': _NUMPBSLOTS} +sortorder: 2 UINT {'default': 0xffff} pbslot * USTRING {'terminator': None, 'sizeinbytes': _NUMPBSLOTS} pbfirstletters * LIST {'length': _NUMPBSLOTS} +sortorder2: "Is this the same" 2 UINT {'default': 0xffff} pbslot * LIST {'length': _NUMSPEEDDIALS} +speeddialindex: 2 UINT {'default': 0xffff} pbslotandtype * LIST {'length': _NUMLONGNUMBERS} +longnumbersindex: 2 UINT {'default': 0xffff} pbslotandtype * LIST {'length': _NUMPBSLOTS} +emails: "Sorted list of slots with Email" 2 UINT {'default': 0xffff} pbslot * USTRING {'terminator': None, 'sizeinbytes': _NUMPBSLOTS} emailfirstletters "First letters in sort order" * LIST {'length': _NUMPBSLOTS} +urls: "Sorted list of slots with a URL" 2 UINT {'default': 0xffff} pbslot * USTRING {'terminator': None, 'sizeinbytes': _NUMPBSLOTS} urlfirstletters "First letters in sort order" * UNKNOWN +pad PACKET calleridbuffer: "Index so that phone can show a name instead of number" # This 7000 byte buffer is formed from the concatenation of 500 bytes of # payload from commands 0X 50 0F through 0X 5D 0F P UINT {'constant': 700} maxentries P UINT {'constant': 0x46} startcommand "Starting command for R/W buf parts" P UINT {'constant': 9216} bufsize P USTRING {'default': "callerid"} +comment 2 UINT numentries "Number phone numbers" * LIST {'length': self.maxentries, 'elementclass': calleridentry, 'createdefault': True} +items * UNKNOWN +pad PACKET evententry: 1 UINT slot 14 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} eventname 7 UNKNOWN +pad1 1 UINT eventname_len 4 UINT start "# seconds since Jan 1, 1980 approximately" 4 UINT end 14 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} location 7 UNKNOWN +pad2 1 UINT location_len 4 UINT alarmdiff "Displayed alarm time" 1 UINT period "No, Daily, Weekly, Monthly, Yearly" 1 UINT dom "Day of month for the event" 4 UINT alarm 1 UNKNOWN +pad3 1 UINT {'default': 0} +serial "Some kind of serial number" 3 UNKNOWN +pad4 2 UINT ringtone PACKET eventrequest: * qcpheader {'packettype': 0x0c, 'command': 0x23} +header 1 UINT slot 129 UNKNOWN +pad PACKET eventresponse: * qcpheader header * evententry entry * UNKNOWN pad PACKET eventslotinuserequest: * qcpheader {'readwrite': 0x26, 'packettype': 0x0d, 'command': 0x74} +header 1 UINT slot 129 UNKNOWN +pad PACKET eventslotinuseresponse: * qcpheader header 1 UINT slot 1 UINT flag * UNKNOWN pad PACKET eventslotinuseupdaterequest: * qcpwriteheader {'packettype': 0x0d, 'command': 0x74} +header 1 UINT slot 1 UINT flag 124 UNKNOWN +pad PACKET eventupdaterequest: * qcpwriteheader {'packettype': 0x0c, 'command':0x23} +header * evententry entry 56 UNKNOWN +pad PACKET callalarmrequest: * qcpheader {'packettype': 0x0c, 'command': 0x24} +header 1 UINT slot 129 UNKNOWN +pad PACKET callalarmresponse: * qcpheader header * callalarmentry entry * UNKNOWN pad PACKET callalarmupdaterequest: * qcpwriteheader {'packettype': 0x0c, 'command':0x24} +header * callalarmentry entry 40 UNKNOWN +pad PACKET callalarmslotinuserequest: * qcpheader {'packettype': 0x0d, 'command': 0x76} +header 1 UINT slot 129 UNKNOWN +pad PACKET callalarmslotinuseresponse: * qcpheader header 1 UINT slot 1 UINT flag * UNKNOWN pad PACKET callalarmentry: 1 UINT slot 1 UNKNOWN +pad0 "Not the flag?" 49 USTRING {'raiseonunterminatedread': False} phonenum 1 UINT phonenum_len 4 UINT date "# seconds since Jan 1, 1980 approximately" 1 UINT period "No, Daily, Weekly, Monthly, Yearly" 1 UINT dom "Day of month for the event" 4 UINT datedup "Copy of the date. Always the same???" 16 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} name 1 UNKNOWN +pad1 1 UINT name_len 1 UINT phonenumbertype "1: Home, 2: Work, ..." 2 UINT phonenumberslot 1 UNKNOWN +pad2 1 UINT {'default': 0} +serial 2 UNKNOWN +pad3 1 UINT {'default': 0xfc} +ringtone 1 UNKNOWN +pad4 " This may be the ringtone. Need to understand " 1 UINT +flag bitpim-1.0.7+dfsg1/src/phones/p_motov3c.p0000644001616600161660000000076210555026112016326 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: $ %{ """Various descriptions of data specific to Motorola V3c phones""" from prototypes import * from prototypes_moto import * from p_etsi import * from p_moto import * from p_motov710 import * PB_TOTAL_ENTRIES=1000 PB_RANGE=xrange(1,PB_TOTAL_ENTRIES+1) %} bitpim-1.0.7+dfsg1/src/phones/p_motov3m.p0000644001616600161660000000252310735610475016350 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_motov3m.p 4537 2007-12-30 03:32:13Z djpham $ %{ """Various descriptions of data specific to Motorola V3m phones""" from prototypes import * from prototypes_moto import * from p_etsi import * from p_moto import * from p_motov710 import * import fnmatch # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb PB_TOTAL_ENTRIES=1000 PB_RANGE=xrange(1,PB_TOTAL_ENTRIES+1) _WP_EXCLUSION=frozenset(['*.ran*', 'customer_opening.gif', 'customer_closing.gif']) _RT_EXCLUSION=frozenset(['*.mp_']) def valid_wp_filename(filename): global _WP_EXCLUSION for _name in _WP_EXCLUSION: if fnmatch.fnmatch(filename, _name): return False return True def valid_rt_filename(filename): global _RT_EXCLUSION for _name in _RT_EXCLUSION: if fnmatch.fnmatch(filename, _name): return False return True OBEX_Filename_Prefix='motorola/shared/' OBEX_Filename_Prefix_Len=len(OBEX_Filename_Prefix) def OBEXName(filename): if filename.startswith(OBEX_Filename_Prefix): return filename[OBEX_Filename_Prefix_Len:] raise ValueError %} bitpim-1.0.7+dfsg1/src/phones/p_sanyo7400.py0000644001616600161660000032126310466234100016572 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Sanyo MM-7400""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 # Need to check. Is max phone will hold 32/96 or 33/97 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 HASRINGPICBUF=0 class qcpheader(BaseProtogenClass): __fields=['readwrite', 'command', 'packettype'] def __init__(self, *args, **kwargs): dict={} # User specified arguments in the packet description dict.update({'readwrite': 0x26}) # What was supplied to this function dict.update(kwargs) # Parent constructor super(qcpheader,self).__init__(**dict) if self.__class__ is qcpheader: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(qcpheader,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(qcpheader,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_readwrite.writetobuffer(buf) self.__field_command.writetobuffer(buf) self.__field_packettype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_readwrite=UINT(**{'sizeinbytes': 1}) self.__field_readwrite.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_packettype=UINT(**{'sizeinbytes': 1}) self.__field_packettype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_readwrite(self): return self.__field_readwrite.getvalue() def __setfield_readwrite(self, value): if isinstance(value,UINT): self.__field_readwrite=value else: self.__field_readwrite=UINT(value,**{'sizeinbytes': 1}) def __delfield_readwrite(self): del self.__field_readwrite readwrite=property(__getfield_readwrite, __setfield_readwrite, __delfield_readwrite, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_packettype(self): return self.__field_packettype.getvalue() def __setfield_packettype(self, value): if isinstance(value,UINT): self.__field_packettype=value else: self.__field_packettype=UINT(value,**{'sizeinbytes': 1}) def __delfield_packettype(self): del self.__field_packettype packettype=property(__getfield_packettype, __setfield_packettype, __delfield_packettype, None) def iscontainer(self): return True def containerelements(self): yield ('readwrite', self.__field_readwrite, None) yield ('command', self.__field_command, None) yield ('packettype', self.__field_packettype, None) class qcpwriteheader(BaseProtogenClass): __fields=['readwrite', 'command', 'packettype'] def __init__(self, *args, **kwargs): dict={} # User specified arguments in the packet description dict.update({'readwrite': 0x27}) # What was supplied to this function dict.update(kwargs) # Parent constructor super(qcpwriteheader,self).__init__(**dict) if self.__class__ is qcpwriteheader: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(qcpwriteheader,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(qcpwriteheader,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_readwrite.writetobuffer(buf) self.__field_command.writetobuffer(buf) self.__field_packettype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_readwrite=UINT(**{'sizeinbytes': 1}) self.__field_readwrite.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_packettype=UINT(**{'sizeinbytes': 1}) self.__field_packettype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_readwrite(self): return self.__field_readwrite.getvalue() def __setfield_readwrite(self, value): if isinstance(value,UINT): self.__field_readwrite=value else: self.__field_readwrite=UINT(value,**{'sizeinbytes': 1}) def __delfield_readwrite(self): del self.__field_readwrite readwrite=property(__getfield_readwrite, __setfield_readwrite, __delfield_readwrite, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_packettype(self): return self.__field_packettype.getvalue() def __setfield_packettype(self, value): if isinstance(value,UINT): self.__field_packettype=value else: self.__field_packettype=UINT(value,**{'sizeinbytes': 1}) def __delfield_packettype(self): del self.__field_packettype packettype=property(__getfield_packettype, __setfield_packettype, __delfield_packettype, None) def iscontainer(self): return True def containerelements(self): yield ('readwrite', self.__field_readwrite, None) yield ('command', self.__field_command, None) yield ('packettype', self.__field_packettype, None) class eventrequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventrequest,self).__init__(**dict) if self.__class__ is eventrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x23}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x23}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x23}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,**{'packettype': 0x0c, 'command': 0x23}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 129}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class eventslotinuserequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventslotinuserequest,self).__init__(**dict) if self.__class__ is eventslotinuserequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventslotinuserequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventslotinuserequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpheader(**{'readwrite': 0x26, 'packettype': 0x0d, 'command': 0x74}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader(**{'readwrite': 0x26, 'packettype': 0x0d, 'command': 0x74}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpheader(**{'readwrite': 0x26, 'packettype': 0x0d, 'command': 0x74}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,**{'readwrite': 0x26, 'packettype': 0x0d, 'command': 0x74}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 129}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class evententry(BaseProtogenClass): __fields=['slot', 'eventname', 'pad1', 'eventname_len', 'start', 'end', 'location', 'pad2', 'location_len', 'alarmdiff', 'period', 'dom', 'alarm', 'pad3', 'serial', 'pad4', 'ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(evententry,self).__init__(**dict) if self.__class__ is evententry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(evententry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(evententry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_eventname.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.writetobuffer(buf) self.__field_eventname_len.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_location.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad2.writetobuffer(buf) self.__field_location_len.writetobuffer(buf) self.__field_alarmdiff.writetobuffer(buf) self.__field_period.writetobuffer(buf) self.__field_dom.writetobuffer(buf) self.__field_alarm.writetobuffer(buf) try: self.__field_pad3 except: self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad3.writetobuffer(buf) try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.writetobuffer(buf) try: self.__field_pad4 except: self.__field_pad4=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad4.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_eventname=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_eventname.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.readfrombuffer(buf) self.__field_eventname_len=UINT(**{'sizeinbytes': 1}) self.__field_eventname_len.readfrombuffer(buf) self.__field_start=UINT(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=UINT(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_location=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_location.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad2.readfrombuffer(buf) self.__field_location_len=UINT(**{'sizeinbytes': 1}) self.__field_location_len.readfrombuffer(buf) self.__field_alarmdiff=UINT(**{'sizeinbytes': 4}) self.__field_alarmdiff.readfrombuffer(buf) self.__field_period=UINT(**{'sizeinbytes': 1}) self.__field_period.readfrombuffer(buf) self.__field_dom=UINT(**{'sizeinbytes': 1}) self.__field_dom.readfrombuffer(buf) self.__field_alarm=UINT(**{'sizeinbytes': 4}) self.__field_alarm.readfrombuffer(buf) self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad3.readfrombuffer(buf) self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.readfrombuffer(buf) self.__field_pad4=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad4.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 2}) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_eventname(self): return self.__field_eventname.getvalue() def __setfield_eventname(self, value): if isinstance(value,USTRING): self.__field_eventname=value else: self.__field_eventname=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_eventname(self): del self.__field_eventname eventname=property(__getfield_eventname, __setfield_eventname, __delfield_eventname, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_eventname_len(self): return self.__field_eventname_len.getvalue() def __setfield_eventname_len(self, value): if isinstance(value,UINT): self.__field_eventname_len=value else: self.__field_eventname_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_eventname_len(self): del self.__field_eventname_len eventname_len=property(__getfield_eventname_len, __setfield_eventname_len, __delfield_eventname_len, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,UINT): self.__field_start=value else: self.__field_start=UINT(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, "# seconds since Jan 1, 1980 approximately") def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,UINT): self.__field_end=value else: self.__field_end=UINT(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_location(self): return self.__field_location.getvalue() def __setfield_location(self, value): if isinstance(value,USTRING): self.__field_location=value else: self.__field_location=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_location(self): del self.__field_location location=property(__getfield_location, __setfield_location, __delfield_location, None) def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_location_len(self): return self.__field_location_len.getvalue() def __setfield_location_len(self, value): if isinstance(value,UINT): self.__field_location_len=value else: self.__field_location_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_location_len(self): del self.__field_location_len location_len=property(__getfield_location_len, __setfield_location_len, __delfield_location_len, None) def __getfield_alarmdiff(self): return self.__field_alarmdiff.getvalue() def __setfield_alarmdiff(self, value): if isinstance(value,UINT): self.__field_alarmdiff=value else: self.__field_alarmdiff=UINT(value,**{'sizeinbytes': 4}) def __delfield_alarmdiff(self): del self.__field_alarmdiff alarmdiff=property(__getfield_alarmdiff, __setfield_alarmdiff, __delfield_alarmdiff, "Displayed alarm time") def __getfield_period(self): return self.__field_period.getvalue() def __setfield_period(self, value): if isinstance(value,UINT): self.__field_period=value else: self.__field_period=UINT(value,**{'sizeinbytes': 1}) def __delfield_period(self): del self.__field_period period=property(__getfield_period, __setfield_period, __delfield_period, "No, Daily, Weekly, Monthly, Yearly") def __getfield_dom(self): return self.__field_dom.getvalue() def __setfield_dom(self, value): if isinstance(value,UINT): self.__field_dom=value else: self.__field_dom=UINT(value,**{'sizeinbytes': 1}) def __delfield_dom(self): del self.__field_dom dom=property(__getfield_dom, __setfield_dom, __delfield_dom, "Day of month for the event") def __getfield_alarm(self): return self.__field_alarm.getvalue() def __setfield_alarm(self, value): if isinstance(value,UINT): self.__field_alarm=value else: self.__field_alarm=UINT(value,**{'sizeinbytes': 4}) def __delfield_alarm(self): del self.__field_alarm alarm=property(__getfield_alarm, __setfield_alarm, __delfield_alarm, None) def __getfield_pad3(self): try: self.__field_pad3 except: self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad3.getvalue() def __setfield_pad3(self, value): if isinstance(value,UNKNOWN): self.__field_pad3=value else: self.__field_pad3=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad3(self): del self.__field_pad3 pad3=property(__getfield_pad3, __setfield_pad3, __delfield_pad3, None) def __getfield_serial(self): try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_serial.getvalue() def __setfield_serial(self, value): if isinstance(value,UINT): self.__field_serial=value else: self.__field_serial=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_serial(self): del self.__field_serial serial=property(__getfield_serial, __setfield_serial, __delfield_serial, "Some kind of serial number") def __getfield_pad4(self): try: self.__field_pad4 except: self.__field_pad4=UNKNOWN(**{'sizeinbytes': 3}) return self.__field_pad4.getvalue() def __setfield_pad4(self, value): if isinstance(value,UNKNOWN): self.__field_pad4=value else: self.__field_pad4=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_pad4(self): del self.__field_pad4 pad4=property(__getfield_pad4, __setfield_pad4, __delfield_pad4, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 2}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('eventname', self.__field_eventname, None) yield ('pad1', self.__field_pad1, None) yield ('eventname_len', self.__field_eventname_len, None) yield ('start', self.__field_start, "# seconds since Jan 1, 1980 approximately") yield ('end', self.__field_end, None) yield ('location', self.__field_location, None) yield ('pad2', self.__field_pad2, None) yield ('location_len', self.__field_location_len, None) yield ('alarmdiff', self.__field_alarmdiff, "Displayed alarm time") yield ('period', self.__field_period, "No, Daily, Weekly, Monthly, Yearly") yield ('dom', self.__field_dom, "Day of month for the event") yield ('alarm', self.__field_alarm, None) yield ('pad3', self.__field_pad3, None) yield ('serial', self.__field_serial, "Some kind of serial number") yield ('pad4', self.__field_pad4, None) yield ('ringtone', self.__field_ringtone, None) class eventresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventresponse,self).__init__(**dict) if self.__class__ is eventresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader() self.__field_header.readfrombuffer(buf) self.__field_entry=evententry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,evententry): self.__field_entry=value else: self.__field_entry=evententry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class eventslotinuseresponse(BaseProtogenClass): __fields=['header', 'slot', 'flag', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventslotinuseresponse,self).__init__(**dict) if self.__class__ is eventslotinuseresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventslotinuseresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventslotinuseresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader() self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, None) yield ('pad', self.__field_pad, None) class eventslotinuseupdaterequest(BaseProtogenClass): __fields=['header', 'slot', 'flag', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventslotinuseupdaterequest,self).__init__(**dict) if self.__class__ is eventslotinuseupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventslotinuseupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventslotinuseupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0d, 'command': 0x74}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 124}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpwriteheader(**{'packettype': 0x0d, 'command': 0x74}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 124}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0d, 'command': 0x74}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpwriteheader): self.__field_header=value else: self.__field_header=qcpwriteheader(value,**{'packettype': 0x0d, 'command': 0x74}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 124}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 124}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, None) yield ('pad', self.__field_pad, None) class eventupdaterequest(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventupdaterequest,self).__init__(**dict) if self.__class__ is eventupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x23}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 56}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x23}) self.__field_header.readfrombuffer(buf) self.__field_entry=evententry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 56}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x23}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpwriteheader): self.__field_header=value else: self.__field_header=qcpwriteheader(value,**{'packettype': 0x0c, 'command':0x23}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,evententry): self.__field_entry=value else: self.__field_entry=evententry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 56}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 56}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class callalarmrequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmrequest,self).__init__(**dict) if self.__class__ is callalarmrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x24}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x24}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x24}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,**{'packettype': 0x0c, 'command': 0x24}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 129}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class callalarmresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmresponse,self).__init__(**dict) if self.__class__ is callalarmresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader() self.__field_header.readfrombuffer(buf) self.__field_entry=callalarmentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,callalarmentry): self.__field_entry=value else: self.__field_entry=callalarmentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class callalarmupdaterequest(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmupdaterequest,self).__init__(**dict) if self.__class__ is callalarmupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x24}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 40}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x24}) self.__field_header.readfrombuffer(buf) self.__field_entry=callalarmentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 40}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x24}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpwriteheader): self.__field_header=value else: self.__field_header=qcpwriteheader(value,**{'packettype': 0x0c, 'command':0x24}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,callalarmentry): self.__field_entry=value else: self.__field_entry=callalarmentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 40}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 40}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class callalarmslotinuserequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmslotinuserequest,self).__init__(**dict) if self.__class__ is callalarmslotinuserequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmslotinuserequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmslotinuserequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0d, 'command': 0x76}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader(**{'packettype': 0x0d, 'command': 0x76}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0d, 'command': 0x76}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,**{'packettype': 0x0d, 'command': 0x76}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 129}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class callalarmslotinuseresponse(BaseProtogenClass): __fields=['header', 'slot', 'flag', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmslotinuseresponse,self).__init__(**dict) if self.__class__ is callalarmslotinuseresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmslotinuseresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmslotinuseresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader() self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, None) yield ('pad', self.__field_pad, None) class callalarmentry(BaseProtogenClass): __fields=['slot', 'pad0', 'phonenum', 'phonenum_len', 'date', 'period', 'dom', 'datedup', 'name', 'pad1', 'name_len', 'phonenumbertype', 'phonenumberslot', 'pad2', 'serial', 'pad3', 'ringtone', 'pad4', 'flag'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmentry,self).__init__(**dict) if self.__class__ is callalarmentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) try: self.__field_pad0 except: self.__field_pad0=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad0.writetobuffer(buf) self.__field_phonenum.writetobuffer(buf) self.__field_phonenum_len.writetobuffer(buf) self.__field_date.writetobuffer(buf) self.__field_period.writetobuffer(buf) self.__field_dom.writetobuffer(buf) self.__field_datedup.writetobuffer(buf) self.__field_name.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.writetobuffer(buf) self.__field_name_len.writetobuffer(buf) self.__field_phonenumbertype.writetobuffer(buf) self.__field_phonenumberslot.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad2.writetobuffer(buf) try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.writetobuffer(buf) try: self.__field_pad3 except: self.__field_pad3=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad3.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 1, 'default': 0xfc}) self.__field_ringtone.writetobuffer(buf) try: self.__field_pad4 except: self.__field_pad4=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad4.writetobuffer(buf) try: self.__field_flag except: self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad0=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad0.readfrombuffer(buf) self.__field_phonenum=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_phonenum.readfrombuffer(buf) self.__field_phonenum_len=UINT(**{'sizeinbytes': 1}) self.__field_phonenum_len.readfrombuffer(buf) self.__field_date=UINT(**{'sizeinbytes': 4}) self.__field_date.readfrombuffer(buf) self.__field_period=UINT(**{'sizeinbytes': 1}) self.__field_period.readfrombuffer(buf) self.__field_dom=UINT(**{'sizeinbytes': 1}) self.__field_dom.readfrombuffer(buf) self.__field_datedup=UINT(**{'sizeinbytes': 4}) self.__field_datedup.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_name.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.readfrombuffer(buf) self.__field_name_len=UINT(**{'sizeinbytes': 1}) self.__field_name_len.readfrombuffer(buf) self.__field_phonenumbertype=UINT(**{'sizeinbytes': 1}) self.__field_phonenumbertype.readfrombuffer(buf) self.__field_phonenumberslot=UINT(**{'sizeinbytes': 2}) self.__field_phonenumberslot.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad2.readfrombuffer(buf) self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.readfrombuffer(buf) self.__field_pad3=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad3.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1, 'default': 0xfc}) self.__field_ringtone.readfrombuffer(buf) self.__field_pad4=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad4.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad0(self): try: self.__field_pad0 except: self.__field_pad0=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad0.getvalue() def __setfield_pad0(self, value): if isinstance(value,UNKNOWN): self.__field_pad0=value else: self.__field_pad0=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad0(self): del self.__field_pad0 pad0=property(__getfield_pad0, __setfield_pad0, __delfield_pad0, "Not the flag?") def __getfield_phonenum(self): return self.__field_phonenum.getvalue() def __setfield_phonenum(self, value): if isinstance(value,USTRING): self.__field_phonenum=value else: self.__field_phonenum=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_phonenum(self): del self.__field_phonenum phonenum=property(__getfield_phonenum, __setfield_phonenum, __delfield_phonenum, None) def __getfield_phonenum_len(self): return self.__field_phonenum_len.getvalue() def __setfield_phonenum_len(self, value): if isinstance(value,UINT): self.__field_phonenum_len=value else: self.__field_phonenum_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_phonenum_len(self): del self.__field_phonenum_len phonenum_len=property(__getfield_phonenum_len, __setfield_phonenum_len, __delfield_phonenum_len, None) def __getfield_date(self): return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,UINT): self.__field_date=value else: self.__field_date=UINT(value,**{'sizeinbytes': 4}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, "# seconds since Jan 1, 1980 approximately") def __getfield_period(self): return self.__field_period.getvalue() def __setfield_period(self, value): if isinstance(value,UINT): self.__field_period=value else: self.__field_period=UINT(value,**{'sizeinbytes': 1}) def __delfield_period(self): del self.__field_period period=property(__getfield_period, __setfield_period, __delfield_period, "No, Daily, Weekly, Monthly, Yearly") def __getfield_dom(self): return self.__field_dom.getvalue() def __setfield_dom(self, value): if isinstance(value,UINT): self.__field_dom=value else: self.__field_dom=UINT(value,**{'sizeinbytes': 1}) def __delfield_dom(self): del self.__field_dom dom=property(__getfield_dom, __setfield_dom, __delfield_dom, "Day of month for the event") def __getfield_datedup(self): return self.__field_datedup.getvalue() def __setfield_datedup(self, value): if isinstance(value,UINT): self.__field_datedup=value else: self.__field_datedup=UINT(value,**{'sizeinbytes': 4}) def __delfield_datedup(self): del self.__field_datedup datedup=property(__getfield_datedup, __setfield_datedup, __delfield_datedup, "Copy of the date. Always the same???") def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_name_len(self): return self.__field_name_len.getvalue() def __setfield_name_len(self, value): if isinstance(value,UINT): self.__field_name_len=value else: self.__field_name_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_name_len(self): del self.__field_name_len name_len=property(__getfield_name_len, __setfield_name_len, __delfield_name_len, None) def __getfield_phonenumbertype(self): return self.__field_phonenumbertype.getvalue() def __setfield_phonenumbertype(self, value): if isinstance(value,UINT): self.__field_phonenumbertype=value else: self.__field_phonenumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_phonenumbertype(self): del self.__field_phonenumbertype phonenumbertype=property(__getfield_phonenumbertype, __setfield_phonenumbertype, __delfield_phonenumbertype, "1: Home, 2: Work, ...") def __getfield_phonenumberslot(self): return self.__field_phonenumberslot.getvalue() def __setfield_phonenumberslot(self, value): if isinstance(value,UINT): self.__field_phonenumberslot=value else: self.__field_phonenumberslot=UINT(value,**{'sizeinbytes': 2}) def __delfield_phonenumberslot(self): del self.__field_phonenumberslot phonenumberslot=property(__getfield_phonenumberslot, __setfield_phonenumberslot, __delfield_phonenumberslot, None) def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_serial(self): try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_serial.getvalue() def __setfield_serial(self, value): if isinstance(value,UINT): self.__field_serial=value else: self.__field_serial=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_serial(self): del self.__field_serial serial=property(__getfield_serial, __setfield_serial, __delfield_serial, None) def __getfield_pad3(self): try: self.__field_pad3 except: self.__field_pad3=UNKNOWN(**{'sizeinbytes': 2}) return self.__field_pad3.getvalue() def __setfield_pad3(self, value): if isinstance(value,UNKNOWN): self.__field_pad3=value else: self.__field_pad3=UNKNOWN(value,**{'sizeinbytes': 2}) def __delfield_pad3(self): del self.__field_pad3 pad3=property(__getfield_pad3, __setfield_pad3, __delfield_pad3, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 1, 'default': 0xfc}) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1, 'default': 0xfc}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_pad4(self): try: self.__field_pad4 except: self.__field_pad4=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad4.getvalue() def __setfield_pad4(self, value): if isinstance(value,UNKNOWN): self.__field_pad4=value else: self.__field_pad4=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad4(self): del self.__field_pad4 pad4=property(__getfield_pad4, __setfield_pad4, __delfield_pad4, " This may be the ringtone. Need to understand ") def __getfield_flag(self): try: self.__field_flag except: self.__field_flag=UINT(**{'sizeinbytes': 1}) return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('pad0', self.__field_pad0, "Not the flag?") yield ('phonenum', self.__field_phonenum, None) yield ('phonenum_len', self.__field_phonenum_len, None) yield ('date', self.__field_date, "# seconds since Jan 1, 1980 approximately") yield ('period', self.__field_period, "No, Daily, Weekly, Monthly, Yearly") yield ('dom', self.__field_dom, "Day of month for the event") yield ('datedup', self.__field_datedup, "Copy of the date. Always the same???") yield ('name', self.__field_name, None) yield ('pad1', self.__field_pad1, None) yield ('name_len', self.__field_name_len, None) yield ('phonenumbertype', self.__field_phonenumbertype, "1: Home, 2: Work, ...") yield ('phonenumberslot', self.__field_phonenumberslot, None) yield ('pad2', self.__field_pad2, None) yield ('serial', self.__field_serial, None) yield ('pad3', self.__field_pad3, None) yield ('ringtone', self.__field_ringtone, None) yield ('pad4', self.__field_pad4, " This may be the ringtone. Need to understand ") yield ('flag', self.__field_flag, None) class todorequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(todorequest,self).__init__(**dict) if self.__class__ is todorequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(todorequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(todorequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x25}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x25}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x25}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,**{'packettype': 0x0c, 'command': 0x25}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 129}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class todoentry(BaseProtogenClass): __fields=['slot', 'flag', 'todo', 'pad1', 'todo_len', 'priority', 'dunno', 'order'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(todoentry,self).__init__(**dict) if self.__class__ is todoentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(todoentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(todoentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) self.__field_todo.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.writetobuffer(buf) self.__field_todo_len.writetobuffer(buf) self.__field_priority.writetobuffer(buf) try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 1}) self.__field_dunno.writetobuffer(buf) self.__field_order.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_todo=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False}) self.__field_todo.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.readfrombuffer(buf) self.__field_todo_len=UINT(**{'sizeinbytes': 1}) self.__field_todo_len.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_dunno=UINT(**{'sizeinbytes': 1}) self.__field_dunno.readfrombuffer(buf) self.__field_order=UINT(**{'sizeinbytes': 1}) self.__field_order.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, "0: Not used, 1: Used") def __getfield_todo(self): return self.__field_todo.getvalue() def __setfield_todo(self, value): if isinstance(value,USTRING): self.__field_todo=value else: self.__field_todo=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False}) def __delfield_todo(self): del self.__field_todo todo=property(__getfield_todo, __setfield_todo, __delfield_todo, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_todo_len(self): return self.__field_todo_len.getvalue() def __setfield_todo_len(self, value): if isinstance(value,UINT): self.__field_todo_len=value else: self.__field_todo_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_todo_len(self): del self.__field_todo_len todo_len=property(__getfield_todo_len, __setfield_todo_len, __delfield_todo_len, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, "0: Normal, 1: Urgent, 2: Done") def __getfield_dunno(self): try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 1}) return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, "Maybe always zero") def __getfield_order(self): return self.__field_order.getvalue() def __setfield_order(self, value): if isinstance(value,UINT): self.__field_order=value else: self.__field_order=UINT(value,**{'sizeinbytes': 1}) def __delfield_order(self): del self.__field_order order=property(__getfield_order, __setfield_order, __delfield_order, "Gets sorted on screen in this order") def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, "0: Not used, 1: Used") yield ('todo', self.__field_todo, None) yield ('pad1', self.__field_pad1, None) yield ('todo_len', self.__field_todo_len, None) yield ('priority', self.__field_priority, "0: Normal, 1: Urgent, 2: Done") yield ('dunno', self.__field_dunno, "Maybe always zero") yield ('order', self.__field_order, "Gets sorted on screen in this order") class todoresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(todoresponse,self).__init__(**dict) if self.__class__ is todoresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(todoresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(todoresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader() self.__field_header.readfrombuffer(buf) self.__field_entry=todoentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,todoentry): self.__field_entry=value else: self.__field_entry=todoentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class sanyomediafilenameresponse(BaseProtogenClass): __fields=['header', 'pad1', 'filename', 'num1', 'pad2', 'num2', 'pad3', 'num5', 'pad4', 'num4', 'pad5', 'num3', 'pad5'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyomediafilenameresponse,self).__init__(**dict) if self.__class__ is sanyomediafilenameresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyomediafilenameresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyomediafilenameresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_pad1.writetobuffer(buf) self.__field_filename.writetobuffer(buf) self.__field_num1.writetobuffer(buf) self.__field_pad2.writetobuffer(buf) self.__field_num2.writetobuffer(buf) self.__field_pad3.writetobuffer(buf) self.__field_num5.writetobuffer(buf) self.__field_pad4.writetobuffer(buf) self.__field_num4.writetobuffer(buf) self.__field_pad5.writetobuffer(buf) self.__field_num3.writetobuffer(buf) self.__field_pad5.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyomediaheader() self.__field_header.readfrombuffer(buf) self.__field_pad1=UINT(**{'sizeinbytes': 1}) self.__field_pad1.readfrombuffer(buf) self.__field_filename=USTRING(**{'sizeinbytes': 154}) self.__field_filename.readfrombuffer(buf) self.__field_num1=UINT(**{'sizeinbytes': 1}) self.__field_num1.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad2.readfrombuffer(buf) self.__field_num2=UINT(**{'sizeinbytes': 1}) self.__field_num2.readfrombuffer(buf) self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad3.readfrombuffer(buf) self.__field_num5=UINT(**{'sizeinbytes': 1}) self.__field_num5.readfrombuffer(buf) self.__field_pad4=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad4.readfrombuffer(buf) self.__field_num4=UINT(**{'sizeinbytes': 1}) self.__field_num4.readfrombuffer(buf) self.__field_pad5=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad5.readfrombuffer(buf) self.__field_num3=UINT(**{'sizeinbytes': 1}) self.__field_num3.readfrombuffer(buf) self.__field_pad5=UNKNOWN(**{'sizeinbytes': 8}) self.__field_pad5.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyomediaheader): self.__field_header=value else: self.__field_header=sanyomediaheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_pad1(self): return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UINT): self.__field_pad1=value else: self.__field_pad1=UINT(value,**{'sizeinbytes': 1}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'sizeinbytes': 154}) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, None) def __getfield_num1(self): return self.__field_num1.getvalue() def __setfield_num1(self, value): if isinstance(value,UINT): self.__field_num1=value else: self.__field_num1=UINT(value,**{'sizeinbytes': 1}) def __delfield_num1(self): del self.__field_num1 num1=property(__getfield_num1, __setfield_num1, __delfield_num1, None) def __getfield_pad2(self): return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_num2(self): return self.__field_num2.getvalue() def __setfield_num2(self, value): if isinstance(value,UINT): self.__field_num2=value else: self.__field_num2=UINT(value,**{'sizeinbytes': 1}) def __delfield_num2(self): del self.__field_num2 num2=property(__getfield_num2, __setfield_num2, __delfield_num2, None) def __getfield_pad3(self): return self.__field_pad3.getvalue() def __setfield_pad3(self, value): if isinstance(value,UNKNOWN): self.__field_pad3=value else: self.__field_pad3=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad3(self): del self.__field_pad3 pad3=property(__getfield_pad3, __setfield_pad3, __delfield_pad3, None) def __getfield_num5(self): return self.__field_num5.getvalue() def __setfield_num5(self, value): if isinstance(value,UINT): self.__field_num5=value else: self.__field_num5=UINT(value,**{'sizeinbytes': 1}) def __delfield_num5(self): del self.__field_num5 num5=property(__getfield_num5, __setfield_num5, __delfield_num5, None) def __getfield_pad4(self): return self.__field_pad4.getvalue() def __setfield_pad4(self, value): if isinstance(value,UNKNOWN): self.__field_pad4=value else: self.__field_pad4=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad4(self): del self.__field_pad4 pad4=property(__getfield_pad4, __setfield_pad4, __delfield_pad4, None) def __getfield_num4(self): return self.__field_num4.getvalue() def __setfield_num4(self, value): if isinstance(value,UINT): self.__field_num4=value else: self.__field_num4=UINT(value,**{'sizeinbytes': 1}) def __delfield_num4(self): del self.__field_num4 num4=property(__getfield_num4, __setfield_num4, __delfield_num4, None) def __getfield_pad5(self): return self.__field_pad5.getvalue() def __setfield_pad5(self, value): if isinstance(value,UNKNOWN): self.__field_pad5=value else: self.__field_pad5=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad5(self): del self.__field_pad5 pad5=property(__getfield_pad5, __setfield_pad5, __delfield_pad5, None) def __getfield_num3(self): return self.__field_num3.getvalue() def __setfield_num3(self, value): if isinstance(value,UINT): self.__field_num3=value else: self.__field_num3=UINT(value,**{'sizeinbytes': 1}) def __delfield_num3(self): del self.__field_num3 num3=property(__getfield_num3, __setfield_num3, __delfield_num3, None) def __getfield_pad5(self): return self.__field_pad5.getvalue() def __setfield_pad5(self, value): if isinstance(value,UNKNOWN): self.__field_pad5=value else: self.__field_pad5=UNKNOWN(value,**{'sizeinbytes': 8}) def __delfield_pad5(self): del self.__field_pad5 pad5=property(__getfield_pad5, __setfield_pad5, __delfield_pad5, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('pad1', self.__field_pad1, None) yield ('filename', self.__field_filename, None) yield ('num1', self.__field_num1, None) yield ('pad2', self.__field_pad2, None) yield ('num2', self.__field_num2, None) yield ('pad3', self.__field_pad3, None) yield ('num5', self.__field_num5, None) yield ('pad4', self.__field_pad4, None) yield ('num4', self.__field_num4, None) yield ('pad5', self.__field_pad5, None) yield ('num3', self.__field_num3, None) yield ('pad5', self.__field_pad5, None) bitpim-1.0.7+dfsg1/src/phones/p_sanyo5300.p0000644001616600161660000000134610023273210016365 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_sanyo5300.p 1026 2004-03-09 07:47:20Z rogerb $ %{ """Various descriptions of data specific to Sanyo SCP-5300""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 _NUMCALLHISTORY=20 _MAXNUMBERLEN=48 _MAXEMAILLEN=48 %} # No 5300 Specific definitions yet bitpim-1.0.7+dfsg1/src/phones/com_sanyo8100_bell.py0000644001616600161660000000465010535711164020112 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_sanyo8100_bell.py 3753 2006-12-07 04:03:00Z sawecw $ """Talk to the Sanyo SCP-8100 Bell Mobility (Canada) cell phone""" # my modules import common import p_sanyo8100_bell import com_brew import com_phone import com_sanyo import com_sanyomedia import com_sanyonewer import prototypes import os class Phone(com_sanyonewer.Phone): "Talk to the Sanyo SCP-8100 Bell Mobility (Canada) cell phone" desc="SCP-8100-Bell" FIRST_MEDIA_DIRECTORY=1 LAST_MEDIA_DIRECTORY=3 protocolclass=p_sanyo8100_bell serialsname='scp8100bell' # Need to check these from Bell. builtinringtones=( 'None', 'Vibrate', 'Ringer & Voice', '', '', '', '', '', '', 'Tone 1', 'Tone 2', 'Tone 3', 'Tone 4', 'Tone 5', 'Tone 6', 'Tone 7', 'Tone 8', '', '', '', '', '', '', '', '', '', '', '', '', 'Tschaik.Swanlake', 'Satie Gymnop.#1', 'Bach Air on the G', 'Beethoven Sym.5', 'Greensleeves', 'Johnny Comes..', 'Foster Ky. Home', 'Asian Jingle', 'Disco' ) calendar_defaultringtone=4 calendar_defaultcaringtone=4 calendar_tonerange=xrange(18,26) calendar_toneoffset=8 def __init__(self, logtarget, commport): com_sanyonewer.Phone.__init__(self, logtarget, commport) self.mode=self.MODENONE class Profile(com_sanyonewer.Profile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='SANYO' phone_model='SCP-8100CA' WALLPAPER_WIDTH=132 WALLPAPER_HEIGHT=144 OVERSIZE_PERCENTAGE=100 _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading # ('wallpaper', 'write', 'MERGE'), # ('ringtone', 'write', 'MERGE'), ) def __init__(self): com_sanyonewer.Profile.__init__(self) bitpim-1.0.7+dfsg1/src/phones/p_sanyo5400.p0000644001616600161660000000145010045062372016373 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_sanyo5400.p 1211 2004-05-02 03:03:22Z sawecw $ %{ """Various descriptions of data specific to Sanyo SCP-5400""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 _NUMCALLHISTORY=20 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 #for sym in dir(p_sanyo): # print sym %} bitpim-1.0.7+dfsg1/src/phones/p_sanyo5500.p0000644001616600161660000000143610045062372016400 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_sanyo5500.p 1211 2004-05-02 03:03:22Z sawecw $ %{ """Various descriptions of data specific to Sanyo SCP-5500""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 # Need to check. Is max phone will hold 32/96 or 33/97 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 %} bitpim-1.0.7+dfsg1/src/phones/p_sanyo5600.p0000644001616600161660000001226010535762440016405 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id$ %{ """Various descriptions of data specific to Sanyo MM-5600""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 # Need to check. Is max phone will hold 32/96 or 33/97 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 HASRINGPICBUF=1 %} PACKET {'readwrite': 0x26} qcpheader: 1 UINT readwrite 1 UINT command 1 UINT packettype PACKET {'readwrite': 0x27} qcpwriteheader: 1 UINT readwrite 1 UINT command 1 UINT packettype PACKET eventrequest: * qcpheader {'packettype': 0x0c, 'command': 0x23} +header 1 UINT slot 129 UNKNOWN +pad PACKET eventslotinuserequest: * qcpheader {'readwrite': 0x26, 'packettype': 0x0d, 'command': 0x74} +header 1 UINT slot 129 UNKNOWN +pad PACKET evententry: 1 UINT slot 14 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} eventname 7 UNKNOWN +pad1 1 UINT eventname_len 4 UINT start "# seconds since Jan 1, 1980 approximately" 4 UINT end 14 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} location 7 UNKNOWN +pad2 1 UINT location_len 4 UINT alarmdiff "Displayed alarm time" 1 UINT period "No, Daily, Weekly, Monthly, Yearly" 1 UINT dom "Day of month for the event" 4 UINT alarm 1 UNKNOWN +pad3 1 UINT {'default': 0} +serial "Some kind of serial number" 3 UNKNOWN +pad4 2 UINT ringtone PACKET eventresponse: * qcpheader header * evententry entry * UNKNOWN pad PACKET eventslotinuseresponse: * qcpheader header 1 UINT slot 1 UINT flag * UNKNOWN pad PACKET eventslotinuseupdaterequest: * qcpwriteheader {'packettype': 0x0d, 'command': 0x74} +header 1 UINT slot 1 UINT flag 124 UNKNOWN +pad PACKET eventupdaterequest: * qcpwriteheader {'packettype': 0x0c, 'command':0x23} +header * evententry entry 56 UNKNOWN +pad PACKET callalarmrequest: * qcpheader {'packettype': 0x0c, 'command': 0x24} +header 1 UINT slot 129 UNKNOWN +pad PACKET callalarmresponse: * qcpheader header * callalarmentry entry * UNKNOWN pad PACKET callalarmupdaterequest: * qcpwriteheader {'packettype': 0x0c, 'command':0x24} +header * callalarmentry entry 40 UNKNOWN +pad PACKET callalarmslotinuserequest: * qcpheader {'packettype': 0x0d, 'command': 0x76} +header 1 UINT slot 129 UNKNOWN +pad PACKET callalarmslotinuseresponse: * qcpheader header 1 UINT slot 1 UINT flag * UNKNOWN pad PACKET callalarmentry: 1 UINT slot 1 UNKNOWN +pad0 "Not the flag?" 49 USTRING {'raiseonunterminatedread': False} phonenum 1 UINT phonenum_len 4 UINT date "# seconds since Jan 1, 1980 approximately" 1 UINT period "No, Daily, Weekly, Monthly, Yearly" 1 UINT dom "Day of month for the event" 4 UINT datedup "Copy of the date. Always the same???" 16 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} name 1 UNKNOWN +pad1 1 UINT name_len 1 UINT phonenumbertype "1: Home, 2: Work, ..." 2 UINT phonenumberslot 1 UNKNOWN +pad2 1 UINT {'default': 0} +serial 2 UNKNOWN +pad3 1 UINT {'default': 0xfc} +ringtone 1 UNKNOWN +pad4 " This may be the ringtone. Need to understand " 1 UINT +flag PACKET todorequest: * qcpheader {'packettype': 0x0c, 'command': 0x25} +header 1 UINT slot 129 UNKNOWN +pad PACKET todoentry: 1 UINT slot 1 UINT flag "0: Not used, 1: Used" 14 USTRING {'raiseonunterminatedread': False} todo 7 UNKNOWN +pad1 1 UINT todo_len 1 UINT priority "0: Normal, 1: Urgent, 2: Done" 1 UINT +dunno "Maybe always zero" 1 UINT order "Gets sorted on screen in this order" PACKET todoresponse: * qcpheader header * todoentry entry * UNKNOWN pad PACKET sanyomediafilenameresponse: * sanyomediaheader header 1 UINT pad1 154 USTRING filename 1 UINT num1 1 UNKNOWN pad2 1 UINT num2 1 UNKNOWN pad3 1 UINT num5 1 UNKNOWN pad4 1 UINT num4 1 UNKNOWN pad5 1 UINT num3 8 UNKNOWN pad5 PACKET ringerpicbuffer: "Index of ringer and picture assignments" # This 1000 byte buffer is formed from the concatenation of 500 bytes of # payload from commands 0X 46 0F through 0X 47 0F P UINT {'constant': _NUMPBSLOTS} numpbslots "Number of phone book slots" P UINT {'constant': 0x5a} startcommand "Starting command for R/W buf parts" P UINT {'constant': 2048} bufsize P USTRING {'default': "ringer/picture assignments"} +comment * LIST {'length': _NUMPBSLOTS} +ringtones: 2 UINT ringtone "ringtone index" * LIST {'length': _NUMPBSLOTS} +wallpapers: 2 UINT wallpaper "wallpaper index" 424 UNKNOWN +pad bitpim-1.0.7+dfsg1/src/phones/p_sanyo7500.py0000644001616600161660000005714511042765053016607 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Sanyo MM-7500""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * from p_sanyo4930 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=500 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 # Need to check. Is max phone will hold 32/96 or 33/97 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 HASRINGPICBUF=0 #BREW_FILE_SYSTEM=2 class messagesententry(BaseProtogenClass): __fields=['slot', 'read', 'counter', 'pad1', 'dunno1', 'dunno2', 'dunno3', 'pad2', 'dunno4', 'dunno5', 'pad3', 'message_len', 'message', 'pad4', 'year', 'month', 'day', 'hour', 'minute', 'second', 'callback_len', 'callback', 'phonenum_len', 'phonenum', 'dunno6', 'priority', 'pad6', 'dunno7', 'dunno8'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(messagesententry,self).__init__(**dict) if self.__class__ is messagesententry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(messagesententry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(messagesententry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_counter.writetobuffer(buf) self.__field_pad1.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_dunno3.writetobuffer(buf) self.__field_pad2.writetobuffer(buf) self.__field_dunno4.writetobuffer(buf) self.__field_dunno5.writetobuffer(buf) self.__field_pad3.writetobuffer(buf) self.__field_message_len.writetobuffer(buf) self.__field_message.writetobuffer(buf) self.__field_pad4.writetobuffer(buf) self.__field_year.writetobuffer(buf) self.__field_month.writetobuffer(buf) self.__field_day.writetobuffer(buf) self.__field_hour.writetobuffer(buf) self.__field_minute.writetobuffer(buf) self.__field_second.writetobuffer(buf) self.__field_callback_len.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_phonenum_len.writetobuffer(buf) self.__field_phonenum.writetobuffer(buf) self.__field_dunno6.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_pad6.writetobuffer(buf) self.__field_dunno7.writetobuffer(buf) self.__field_dunno8.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 1}) self.__field_read.readfrombuffer(buf) self.__field_counter=UINT(**{'sizeinbytes': 1}) self.__field_counter.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad1.readfrombuffer(buf) self.__field_dunno1=UINT(**{'sizeinbytes': 1}) self.__field_dunno1.readfrombuffer(buf) self.__field_dunno2=UINT(**{'sizeinbytes': 1}) self.__field_dunno2.readfrombuffer(buf) self.__field_dunno3=UINT(**{'sizeinbytes': 1}) self.__field_dunno3.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad2.readfrombuffer(buf) self.__field_dunno4=UINT(**{'sizeinbytes': 1}) self.__field_dunno4.readfrombuffer(buf) self.__field_dunno5=UINT(**{'sizeinbytes': 1}) self.__field_dunno5.readfrombuffer(buf) self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad3.readfrombuffer(buf) self.__field_message_len=UINT(**{'sizeinbytes': 1}) self.__field_message_len.readfrombuffer(buf) self.__field_message=USTRING(**{'sizeinbytes': 255}) self.__field_message.readfrombuffer(buf) self.__field_pad4=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad4.readfrombuffer(buf) self.__field_year=UINT(**{'sizeinbytes': 1}) self.__field_year.readfrombuffer(buf) self.__field_month=UINT(**{'sizeinbytes': 1}) self.__field_month.readfrombuffer(buf) self.__field_day=UINT(**{'sizeinbytes': 1}) self.__field_day.readfrombuffer(buf) self.__field_hour=UINT(**{'sizeinbytes': 1}) self.__field_hour.readfrombuffer(buf) self.__field_minute=UINT(**{'sizeinbytes': 1}) self.__field_minute.readfrombuffer(buf) self.__field_second=UINT(**{'sizeinbytes': 1}) self.__field_second.readfrombuffer(buf) self.__field_callback_len=UINT(**{'sizeinbytes': 1}) self.__field_callback_len.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 34}) self.__field_callback.readfrombuffer(buf) self.__field_phonenum_len=UINT(**{'sizeinbytes': 1}) self.__field_phonenum_len.readfrombuffer(buf) self.__field_phonenum=USTRING(**{'sizeinbytes': 37}) self.__field_phonenum.readfrombuffer(buf) self.__field_dunno6=UINT(**{'sizeinbytes': 1}) self.__field_dunno6.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_pad6=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad6.readfrombuffer(buf) self.__field_dunno7=UINT(**{'sizeinbytes': 1}) self.__field_dunno7.readfrombuffer(buf) self.__field_dunno8=UINT(**{'sizeinbytes': 1}) self.__field_dunno8.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 1}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_counter(self): return self.__field_counter.getvalue() def __setfield_counter(self, value): if isinstance(value,UINT): self.__field_counter=value else: self.__field_counter=UINT(value,**{'sizeinbytes': 1}) def __delfield_counter(self): del self.__field_counter counter=property(__getfield_counter, __setfield_counter, __delfield_counter, None) def __getfield_pad1(self): return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UINT): self.__field_dunno1=value else: self.__field_dunno1=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UINT): self.__field_dunno2=value else: self.__field_dunno2=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_dunno3(self): return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,UINT): self.__field_dunno3=value else: self.__field_dunno3=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_pad2(self): return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_dunno4(self): return self.__field_dunno4.getvalue() def __setfield_dunno4(self, value): if isinstance(value,UINT): self.__field_dunno4=value else: self.__field_dunno4=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno4(self): del self.__field_dunno4 dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None) def __getfield_dunno5(self): return self.__field_dunno5.getvalue() def __setfield_dunno5(self, value): if isinstance(value,UINT): self.__field_dunno5=value else: self.__field_dunno5=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno5(self): del self.__field_dunno5 dunno5=property(__getfield_dunno5, __setfield_dunno5, __delfield_dunno5, None) def __getfield_pad3(self): return self.__field_pad3.getvalue() def __setfield_pad3(self, value): if isinstance(value,UNKNOWN): self.__field_pad3=value else: self.__field_pad3=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad3(self): del self.__field_pad3 pad3=property(__getfield_pad3, __setfield_pad3, __delfield_pad3, None) def __getfield_message_len(self): return self.__field_message_len.getvalue() def __setfield_message_len(self, value): if isinstance(value,UINT): self.__field_message_len=value else: self.__field_message_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_message_len(self): del self.__field_message_len message_len=property(__getfield_message_len, __setfield_message_len, __delfield_message_len, None) def __getfield_message(self): return self.__field_message.getvalue() def __setfield_message(self, value): if isinstance(value,USTRING): self.__field_message=value else: self.__field_message=USTRING(value,**{'sizeinbytes': 255}) def __delfield_message(self): del self.__field_message message=property(__getfield_message, __setfield_message, __delfield_message, "Text of the notification") def __getfield_pad4(self): return self.__field_pad4.getvalue() def __setfield_pad4(self, value): if isinstance(value,UNKNOWN): self.__field_pad4=value else: self.__field_pad4=UNKNOWN(value,**{'sizeinbytes': 2}) def __delfield_pad4(self): del self.__field_pad4 pad4=property(__getfield_pad4, __setfield_pad4, __delfield_pad4, None) def __getfield_year(self): return self.__field_year.getvalue() def __setfield_year(self, value): if isinstance(value,UINT): self.__field_year=value else: self.__field_year=UINT(value,**{'sizeinbytes': 1}) def __delfield_year(self): del self.__field_year year=property(__getfield_year, __setfield_year, __delfield_year, None) def __getfield_month(self): return self.__field_month.getvalue() def __setfield_month(self, value): if isinstance(value,UINT): self.__field_month=value else: self.__field_month=UINT(value,**{'sizeinbytes': 1}) def __delfield_month(self): del self.__field_month month=property(__getfield_month, __setfield_month, __delfield_month, None) def __getfield_day(self): return self.__field_day.getvalue() def __setfield_day(self, value): if isinstance(value,UINT): self.__field_day=value else: self.__field_day=UINT(value,**{'sizeinbytes': 1}) def __delfield_day(self): del self.__field_day day=property(__getfield_day, __setfield_day, __delfield_day, None) def __getfield_hour(self): return self.__field_hour.getvalue() def __setfield_hour(self, value): if isinstance(value,UINT): self.__field_hour=value else: self.__field_hour=UINT(value,**{'sizeinbytes': 1}) def __delfield_hour(self): del self.__field_hour hour=property(__getfield_hour, __setfield_hour, __delfield_hour, None) def __getfield_minute(self): return self.__field_minute.getvalue() def __setfield_minute(self, value): if isinstance(value,UINT): self.__field_minute=value else: self.__field_minute=UINT(value,**{'sizeinbytes': 1}) def __delfield_minute(self): del self.__field_minute minute=property(__getfield_minute, __setfield_minute, __delfield_minute, None) def __getfield_second(self): return self.__field_second.getvalue() def __setfield_second(self, value): if isinstance(value,UINT): self.__field_second=value else: self.__field_second=UINT(value,**{'sizeinbytes': 1}) def __delfield_second(self): del self.__field_second second=property(__getfield_second, __setfield_second, __delfield_second, None) def __getfield_callback_len(self): return self.__field_callback_len.getvalue() def __setfield_callback_len(self, value): if isinstance(value,UINT): self.__field_callback_len=value else: self.__field_callback_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_len(self): del self.__field_callback_len callback_len=property(__getfield_callback_len, __setfield_callback_len, __delfield_callback_len, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 34}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_phonenum_len(self): return self.__field_phonenum_len.getvalue() def __setfield_phonenum_len(self, value): if isinstance(value,UINT): self.__field_phonenum_len=value else: self.__field_phonenum_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_phonenum_len(self): del self.__field_phonenum_len phonenum_len=property(__getfield_phonenum_len, __setfield_phonenum_len, __delfield_phonenum_len, None) def __getfield_phonenum(self): return self.__field_phonenum.getvalue() def __setfield_phonenum(self, value): if isinstance(value,USTRING): self.__field_phonenum=value else: self.__field_phonenum=USTRING(value,**{'sizeinbytes': 37}) def __delfield_phonenum(self): del self.__field_phonenum phonenum=property(__getfield_phonenum, __setfield_phonenum, __delfield_phonenum, None) def __getfield_dunno6(self): return self.__field_dunno6.getvalue() def __setfield_dunno6(self, value): if isinstance(value,UINT): self.__field_dunno6=value else: self.__field_dunno6=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno6(self): del self.__field_dunno6 dunno6=property(__getfield_dunno6, __setfield_dunno6, __delfield_dunno6, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_pad6(self): return self.__field_pad6.getvalue() def __setfield_pad6(self, value): if isinstance(value,UNKNOWN): self.__field_pad6=value else: self.__field_pad6=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_pad6(self): del self.__field_pad6 pad6=property(__getfield_pad6, __setfield_pad6, __delfield_pad6, None) def __getfield_dunno7(self): return self.__field_dunno7.getvalue() def __setfield_dunno7(self, value): if isinstance(value,UINT): self.__field_dunno7=value else: self.__field_dunno7=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno7(self): del self.__field_dunno7 dunno7=property(__getfield_dunno7, __setfield_dunno7, __delfield_dunno7, None) def __getfield_dunno8(self): return self.__field_dunno8.getvalue() def __setfield_dunno8(self, value): if isinstance(value,UINT): self.__field_dunno8=value else: self.__field_dunno8=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno8(self): del self.__field_dunno8 dunno8=property(__getfield_dunno8, __setfield_dunno8, __delfield_dunno8, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('read', self.__field_read, None) yield ('counter', self.__field_counter, None) yield ('pad1', self.__field_pad1, None) yield ('dunno1', self.__field_dunno1, None) yield ('dunno2', self.__field_dunno2, None) yield ('dunno3', self.__field_dunno3, None) yield ('pad2', self.__field_pad2, None) yield ('dunno4', self.__field_dunno4, None) yield ('dunno5', self.__field_dunno5, None) yield ('pad3', self.__field_pad3, None) yield ('message_len', self.__field_message_len, None) yield ('message', self.__field_message, "Text of the notification") yield ('pad4', self.__field_pad4, None) yield ('year', self.__field_year, None) yield ('month', self.__field_month, None) yield ('day', self.__field_day, None) yield ('hour', self.__field_hour, None) yield ('minute', self.__field_minute, None) yield ('second', self.__field_second, None) yield ('callback_len', self.__field_callback_len, None) yield ('callback', self.__field_callback, None) yield ('phonenum_len', self.__field_phonenum_len, None) yield ('phonenum', self.__field_phonenum, None) yield ('dunno6', self.__field_dunno6, None) yield ('priority', self.__field_priority, None) yield ('pad6', self.__field_pad6, None) yield ('dunno7', self.__field_dunno7, None) yield ('dunno8', self.__field_dunno8, None) class messagesentresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(messagesentresponse,self).__init__(**dict) if self.__class__ is messagesentresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(messagesentresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(messagesentresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=messagesententry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,messagesententry): self.__field_entry=value else: self.__field_entry=messagesententry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) bitpim-1.0.7+dfsg1/src/phones/com_samsungspha620.py0000644001616600161660000004252410662735020020233 0ustar amuamu### BITPIM ### ### Copyright (C) 2004-2005 Stephen Wood ### Copyright (C) 2005 Todd Imboden ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_samsungspha620.py 4371 2007-08-22 04:22:40Z sawecw $ """Communicate with a Samsung SPH-A620""" import sha import re import struct import common import commport import p_samsungspha620 import p_brew import com_brew import com_phone import com_samsung_packet import prototypes import fileinfo import helpids numbertypetab=('home','office','cell','pager','fax','none') class Phone(com_samsung_packet.Phone): "Talk to a Samsung SPH-A620 phone" desc="SPH-A620" helpid=helpids.ID_PHONE_SAMSUNGOTHERS protocolclass=p_samsungspha620 serialsname='spha620' # digital_cam/jpeg Remove first 148 characters imagelocations=( # offset, index file, files location, origin, maximumentries, header offset # Offset is arbitrary. 100 is reserved for amsRegistry indexed files (400, "digital_cam/wallet", "camera", 100, 148), (300, "digital_cam/jpeg", "camera", 100, 148), ) ringtonelocations=( # offset, index file, files location, type, maximumentries, header offset ) __audio_mimetype={ 'mid': 'audio/midi', 'qcp': 'audio/vnd.qcelp', 'pmd': 'application/x-pmd'} __image_mimetype={ 'jpg': 'image/jpg', 'jpeg': 'image/jpeg', 'gif': 'image/gif', 'bmp': 'image/bmp', 'png': 'image/png'} def __init__(self, logtarget, commport): com_samsung_packet.Phone.__init__(self, logtarget, commport) self.numbertypetab=numbertypetab self.mode=self.MODENONE def getfundamentals(self, results): """Gets information fundamental to interopating with the phone and UI.""" self.amsanalyze(results) # use a hash of ESN and other stuff (being paranoid) self.log("Retrieving fundamental phone information") self.log("Phone serial number") self.setmode(self.MODEMODEM) results['uniqueserial']=sha.new(self.get_esn()).hexdigest() self.log("Reading group information") results['groups']=self.read_groups() # Comment the next to out if you want to read the phonebook #self.getwallpaperindices(results) #self.getringtoneindices(results) self.log("Fundamentals retrieved") return results def amsanalyze(self,results): buf=prototypes.buffer(self.getfilecontents(self.protocolclass.AMSREGISTRY)) ams=self.protocolclass.amsregistry() ams.readfrombuffer(buf, logtitle="Read AMS registry") rt={} #Todd added for ringtone index nrt=0 #Todd added for ringtone index wp={} nwp=0 for i in range(ams.nfiles): filetype=ams.info[i].filetype if filetype: dir_ptr=ams.info[i].dir_ptr name_ptr=ams.info[i].name_ptr mimetype_ptr=ams.info[i].mimetype_ptr version_ptr=ams.info[i].version_ptr vendor_ptr=ams.info[i].vendor_ptr dir=self.getstring(ams.strings,dir_ptr) name=self.getstring(ams.strings,name_ptr) mimetype=self.getstring(ams.strings,mimetype_ptr) version=self.getstring(ams.strings,version_ptr) vendor=self.getstring(ams.strings,vendor_ptr) #downloaddomain_ptr=ams.info[i].downloaddomain_ptr print i, filetype, version, dir, vendor, name, mimetype #if downloaddomainptr_ptr: # print self.getstring(ams.strings,misc_ptr) print ams.info[i].num2, ams.info[i].num7, ams.info[i].num8, ams.info[i].num9, ams.info[i].num12, ams.info[i].num13, ams.info[i].num14, ams.info[i].num15, ams.info[i].num16, ams.info[i].num17 print " " # Todd's added info if filetype==12: #this will add the file extension if mimetype=="audio/vnd.qcelp": filetype='.qcp' elif mimetype=="audio/midi": filetype='.mid' elif mimetype=="application/x-pmd": filetype='.pmd' elif mimetype=="audio/mp3": filetype='.mp3' else: filetype='' rt[100+nrt]={'name':name+filetype,'location':'ams/'+dir,'origin':'ringers'} nrt+=1 elif filetype==13: if mimetype=="image/jpeg": filetype='.jpg' elif mimetype=="image/png": filetype='.png' elif mimetype=="image/gif": filetype='.gif' elif mimetype=="image/bmp": filetype='.bmp' else: filetype='' wp[100+nwp]={'name':name+filetype,'location':'ams/'+dir,'origin':'images'} nwp+=1 results['ringtone-index']=rt results['wallpaper-index']=wp def pblinerepair(self, line): "Extend incomplete lines" # VGA1000 Firmware WG09 doesn't return a full line unless birthday # is set. Add extra commas so packet decoding works nfields=26 # Can we get this from packet def? ncommas=self.countcommas(line) if ncommas<0: # Un terminated quote line+='"' ncommas = -ncommas if nfields-ncommas>1: line=line+","*(nfields-ncommas-1) return line def countcommas(self, line): inquote=False ncommas=0 for c in line: if c == '"': inquote = not inquote elif not inquote and c == ',': ncommas+=1 if inquote: ncommas = -ncommas return ncommas def getringtones(self, results): self.getmediaindex(self.ringtonelocations, results,'ringtone-index') return self.getmedia(self.ringtonelocations, results, 'ringtone') def getwallpapers(self, results): self.getmediaindex(self.imagelocations, results,'wallpaper-index') return self.getmedia(self.imagelocations, results, 'wallpapers') def getmedia(self, maps, results, key): """Returns the contents of media as a dicxt where the key is a name returned by getindex, and the value is the contents of the media""" media={} if key=="ringtone": index_key="ringtone-index" origin="ringers" elif key=="wallpapers": index_key="wallpaper-index" origin="images" # Read the files indexed in ams Registry for k in results[index_key].keys(): e=results[index_key][k] if e['origin']==origin: self.log("Reading "+e['name']) contents=self.getfilecontents(e['location']) media[e['name']]=contents # Now read from the directories in the maps array for offset,location,type,maxentries, headeroffset in maps: for item in self.listfiles(location).values(): filename=item['name'] p=filename.rfind("/") basefilename=filename[p+1:]+".jpg" contents=self.getfilecontents(filename) name_len=ord(contents[5]) new_basefilename=filename[p+1:]+"_"+contents[6:6+name_len]+".jpg" duplicate=False # Fix up duplicate filenames for k in results[index_key].keys(): if results[index_key][k]['name']==new_basefilename: duplicate=True break if results[index_key][k]['name']==basefilename: ksave=k if duplicate: new_basefilename=basefilename else: self.log("Renaming to "+new_basefilename) results[index_key][ksave]['name']=new_basefilename media[new_basefilename]=contents[headeroffset:] results[key]=media def getmediaindex(self, maps, results, key): """Get the media (wallpaper/ringtone) index for stuff not in amsRegistry @param results: places results in this dict @param maps: the list of locations @param key: key to place results in """ self.log("Reading "+key) media=results[key] # Get any existing indices for offset,location,origin,maxentries, headeroffset in maps: i=0 for item in self.listfiles(location).values(): print item filename=item['name'] p=filename.rfind("/") filename=filename[p+1:]+".jpg" media[offset+i]={'name': filename, 'origin': origin} i+=1 results[key] = media return def _findmediaindex(self, index, name, pbentryname, type): if name is None: return 0 for i in index: if index[i]['name']==name: return i # Not found in index, assume Vision download pos=name.find('_') if(pos>=0): i=int(name[pos+1:]) return i return 0 def getstring(self, contents, start): "Get a null terminated string from contents" i=start while contents[i:i+1]!='\0': i+=1 return contents[start:i] def makegcd(self, filename,size,mimetable): "Build a GCD file for filename" ext=common.getext(filename.lower()) try: mimetype=mimetable[ext] except: return "" noextname=common.stripext(filename) gcdcontent="Content-Type: "+mimetype+"\nContent-Name: "+noextname+"\nContent-Version: 1.0\nContent-Vendor: BitPim\nContent-URL: file:"+filename+"\nContent-Size: "+`size`+"\n\n\n" return gcdcontent def saveringtones(self, result, merge): dircache=self.DirCache(self) media_prefix=self.protocolclass.RINGERPREFIX endtransactionpath=self.protocolclass.ENDTRANSACTION media=result.get('ringtone', {}) media_index=result.get('ringtone-index', {}) media_names=[x['name'] for x in media.values()] index_names=[x['name'] for x in media_index.values()] if merge: del_names=[] else: del_names=[common.stripext(x) for x in index_names if x not in media_names] gcdpattern=re.compile("[\n\r]Content-Name: +(.*?)[\n\r]") new_names=[x for x in media_names if x not in index_names] progressmax=len(del_names)+len(new_names) progresscur=0 self.log("Writing ringers") self.progress(progresscur, progressmax, "Writing ringers") for icnt in range(1,101): if not (new_names or del_names): break fname=media_prefix+`icnt` fnamegcd=media_prefix+`icnt`+".gcd" fstat=dircache.stat(fnamegcd) if del_names and fstat: # See if this file is in list of files to delete gcdcontents=dircache.readfile(fnamegcd) thisfile=gcdpattern.search(gcdcontents).groups()[0] if thisfile in del_names: self.log("Deleting ringer "+thisfile) self.progress(progresscur, progressmax, "Deleting ringer "+thisfile) progresscur+=1 dircache.rmfile(fname) dircache.rmfile(fnamegcd) del_names.remove(thisfile) fstat=False if new_names and not fstat: newname=new_names.pop() contents="" for k in media.keys(): if media[k]['name']==newname: contents=media[k]['data'] break contentsize=len(contents) if contentsize: gcdcontents=self.makegcd(newname,contentsize,self.__audio_mimetype) self.log("Writing ringer "+newname) self.progress(progresscur, progressmax, "Deleting ringer "+newname) progresscur+=1 dircache.writefile(fname,contents) dircache.writefile(fnamegcd,gcdcontents) fstat=dircache.stat(endtransactionpath) self.log("Finished writing ringers") self.progress(progressmax, progressmax, "Finished writing ringers") if fstat: dircache.rmfile(endtransactionpath) result['rebootphone']=True return def savewallpapers(self, result, merge): dircache=self.DirCache(self) media_prefix=self.protocolclass.WALLPAPERPREFIX endtransactionpath=self.protocolclass.ENDTRANSACTION media=result.get('wallpapers', {}) for i in media.keys(): try: if media[i]['origin']=='camera': del media[i] except: pass media_index=result.get('wallpaper-index', {}) media_names=[x['name'] for x in media.values()] index_names=[x['name'] for x in media_index.values()] if merge: del_names=[] else: del_names=[common.stripext(x) for x in index_names if x not in media_names] gcdpattern=re.compile("[\n\r]Content-Name: +(.*?)[\n\r]") new_names=[x for x in media_names if x not in index_names] progressmax=len(del_names)+len(new_names) progresscur=0 self.log("Writing images") self.progress(progresscur, progressmax, "Writing images") for icnt in range(1,101): if not (new_names or del_names): break fname=media_prefix+`icnt` fnamegcd=media_prefix+`icnt`+".gcd" fstat=dircache.stat(fnamegcd) if del_names and fstat: # See if this file is in list of files to delete gcdcontents=dircache.readfile(fnamegcd) thisfile=gcdpattern.search(gcdcontents).groups()[0] if thisfile in del_names: self.log("Deleting image "+thisfile) self.progress(progresscur, progressmax, "Deleting image "+thisfile) progresscur+=1 dircache.rmfile(fname) dircache.rmfile(fnamegcd) del_names.remove(thisfile) fstat=False if new_names and not fstat: newname=new_names.pop() contents="" for k in media.keys(): if media[k]['name']==newname: contents=media[k]['data'] break contentsize=len(contents) if contentsize: gcdcontents=self.makegcd(newname,contentsize,self.__image_mimetype) self.log("Writing image "+newname) self.progress(progresscur, progressmax, "Deleting image "+newname) progresscur+=1 dircache.writefile(fname,contents) dircache.writefile(fnamegcd,gcdcontents) fstat=dircache.stat(endtransactionpath) self.log("Finished writing images") self.progress(progressmax, progressmax, "Finished writing images") if fstat: dircache.rmfile(endtransactionpath) result['rebootphone']=True return class Profile(com_samsung_packet.Profile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname MAX_RINGTONE_BASENAME_LENGTH=19 RINGTONE_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789_ ." RINGTONE_LIMITS= { 'MAXSIZE': 250000 } phone_manufacturer='SAMSUNG' phone_model='SPH-A620/152' def __init__(self): com_samsung_packet.Profile.__init__(self) self.numbertypetab=numbertypetab _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('wallpaper', 'read', None), # all wallpaper reading ('wallpaper', 'write', None), # Image conversion needs work ('ringtone', 'read', None), # all ringtone reading ('ringtone', 'write', None), ('calendar', 'read', None), # all calendar reading ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('todo', 'read', None), # all todo list reading ('todo', 'write', 'OVERWRITE'), # all todo list writing ('memo', 'read', None), # all memo list reading ('memo', 'write', 'OVERWRITE'), # all memo list writing ) __audio_ext={ 'MIDI': 'mid', 'PMD': 'pmd', 'QCP': 'qcp' } def QueryAudio(self, origin, currentextension, afi): # we don't modify any of these print "afi.format=",afi.format if afi.format in ("MIDI", "PMD", "QCP"): for k,n in self.RINGTONE_LIMITS.items(): setattr(afi, k, n) return currentextension, afi d=self.RINGTONE_LIMITS.copy() d['format']='QCP' return ('qcp', fileinfo.AudioFileInfo(afi, **d)) bitpim-1.0.7+dfsg1/src/phones/com_samsungspha640.py0000644001616600161660000000602311015151637020226 0ustar amuamu### BITPIM ### ### Copyright (C) 2004-2005 Stephen Wood ### Copyright (C) 2005 Todd Imboden ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### By Allan Slawik; based on code from com_samsungspha620.py, and ### com_samsungspha460.py by sawecw and djpham ### ### $Id:$ """Communicate with a Samsung SPH-A640""" import sha import re import struct import common import commport import p_samsungspha640 import p_brew import com_brew import com_phone import com_samsung_packet import com_samsungspha620 import prototypes import fileinfo import helpids numbertypetab=('home','cell','office','other','pager','none') class Phone(com_samsungspha620.Phone): "Talk to a Samsung SPH-A640 phone" desc="SPH-A640" helpid=helpids.ID_PHONE_SAMSUNGOTHERS protocolclass=p_samsungspha640 serialsname='spha640' # digital_cam/jpeg Remove first 128 characters imagelocations=( # offset, index file, files location, origin, maximumentries, header offset # Offset is arbitrary. 100 is reserved for amsRegistry indexed files (400, "cam/dldJpeg", "camera", 100, 128), (300, "cam/jpeg", "camera", 100, 128), ) ringtonelocations=( # offset, index file, files location, type, maximumentries, header offset ) __audio_mimetype={ 'mid': 'audio/midi', 'qcp': 'audio/vnd.qcelp', 'pmd': 'application/x-pmd'} __image_mimetype={ 'jpg': 'image/jpg', 'jpeg': 'image/jpeg', 'gif': 'image/gif', 'bmp': 'image/bmp', 'png': 'image/png'} def __init__(self, logtarget, commport): com_samsungspha620.Phone.__init__(self, logtarget, commport) self.numbertypetab=numbertypetab self.mode=self.MODENONE parentprofile=com_samsungspha620.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname MAX_RINGTONE_BASENAME_LENGTH=19 RINGTONE_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789_ ." RINGTONE_LIMITS= { 'MAXSIZE': 500000 } phone_manufacturer='SAMSUNG' phone_model='SPH-A640/152' def __init__(self): parentprofile.__init__(self) self.numbertypetab=numbertypetab _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading # ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('wallpaper', 'read', None), # all wallpaper reading ('wallpaper', 'write', None), # Image conversion needs work ('ringtone', 'read', None), # all ringtone reading ('ringtone', 'write', None), ('calendar', 'read', None), # all calendar reading ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('todo', 'read', None), # all todo list reading ('todo', 'write', 'OVERWRITE'), # all todo list writing ('memo', 'read', None), # all memo list reading ('memo', 'write', 'OVERWRITE'), # all memo list writing ) bitpim-1.0.7+dfsg1/src/phones/p_sanyo6600.p0000644001616600161660000002614710654000503016402 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id$ %{ """Various descriptions of data specific to Sanyo Katana (SCP-6600)""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * from p_sanyo4930 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMPHONEBOOKENTRIES=500 MAXNUMBERS=700 MAXEMAILS=1000 MAXURLS=500 MAXMEMOS=500 MAXADDRESSES=500 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 # Need to check. Is max phone will hold 32/96 or 33/97 MAXNUMBERLEN=48 MAXEMAILLEN=96 MAXURLLEN=96 MAXMEMOLEN=96 HASRINGPICBUF=0 NUMGROUPS=20 NUMPHONENUMBERS=7 NUMEMAILS=2 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=9 %} PACKET historyresponse: * sanyoheader header * historyentry entry 428 UNKNOWN pad PACKET historyentry: 2 UINT slot 4 GPSDATE date 1 UINT phonenumlen 48 USTRING {'raiseonunterminatedread': False} phonenum 16 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} name 1 UNKNOWN dunno2 1 UNKNOWN dunno3 # Phonebook sort buffer. No longer compatible with older Sanyo phones. Will # need new getphonebook and savephonebook methods PACKET pbsortbuffer: "Various arrays for sorting the phone book, speed dial, determining which" # slots are in use, etc. # This 4000 byte buffer is formed from the concatenation of 500 bytes of # payload from commands 0X 3c 0F through 0X 43 0F P UINT {'constant': 0x76} startcommand "Starting command for R/W buf parts" P UINT {'constant': 6144} bufsize P USTRING {'default': "sort buffer"} +comment # Don't know what it is. A count and list of flags 1 UINT groupslotsused 2 UNKNOWN +pad * LIST {'length': NUMGROUPS, 'createdefault': True} +groupslotusedflags: 1 UINT used "1 if slot in use" # Contact slots 2 UINT slotsused * LIST {'length': NUMPHONEBOOKENTRIES, 'createdefault': True} +usedflags: 1 UINT used "1 if slot in use" * LIST {'length': _NUMSPEEDDIALS} +speeddialindex: 2 UINT {'default': 0xffff} numslot # Name slots used 2 UINT nameslotsused "Always seems to be the same. Why duplicated?" * LIST {'length': NUMPHONEBOOKENTRIES, 'createdefault': True} +nameusedflags: 1 UINT used "1 if slot in use" * LIST {'length': NUMPHONEBOOKENTRIES} +sortorder: 2 UINT {'default': 0xffff} pbslot * USTRING {'terminator': None, 'sizeinbytes': NUMPHONEBOOKENTRIES} pbfirstletters # Phone number slots 2 UINT numslotsused "Number of phone number slots used" * LIST {'length': MAXNUMBERS, 'createdefault': True} +numusedflags: 1 UINT used "1 if slot in use" # Email address slots 2 UINT emailslotsused * LIST {'length': MAXEMAILS, 'createdefault': True} +emailusedflags: 1 UINT used "1 if slot in use" 2 UINT urlslotsused * LIST {'length': MAXURLS, 'createdefault': True} +urlusedflags: 1 UINT used "1 if slot in use" 2 UINT num_address # Slots with an address * LIST {'length': NUMPHONEBOOKENTRIES, 'createdefault': True} +addressusedflags: 1 UINT used "1 if slot in use" # Slots with a memo Needs to be checked. 2 UINT num_memo * LIST {'length': NUMPHONEBOOKENTRIES, 'createdefault': True} +memousedflags: 1 UINT used "1 if slot in use" # We see stuff repeating here, so 6*1024 must be enough. # Pad out the rest of the buffer 391 UNKNOWN +junk # No group assignments in pbsortbuffer PACKET cannedmessagerequest: * sanyoheader {'packettype': 0x0e, 'command': 0x5b} +header PACKET pbinfo: 2 UINT {'constant': 0x00fa} +fa 1 UINT {'default': 0x02} +faset #1 UINT command 1 UINT byte1 1 UINT byte2 2 UINT byte3 PACKET contactindexrequest: * sanyoheader {'packettype': 0x16, 'command': 0x88} +header 2 UINT slot # Pointers to the name, phone numbers, memo, emails, url, address # One name, 7 phone numbers, 2 email, 1 url, one group, 1 ringer, 1 address # 1 memo, 1 picture PACKET contactindexentry: 1 UINT groupid 2 UINT slot 2 UINT {'default': 0xffff} +namep * LIST {'length': NUMPHONENUMBERS} +numberps: 2 UINT {'default': 0xffff} slot * LIST {'length': NUMEMAILS} +emailps: 2 UINT {'default': 0xffff} slot 2 UINT {'default': 0xffff} +urlp 2 UINT {'default': 0xffff} +addressp 2 UINT {'default': 0xffff} +memop 2 UINT {'default': 0xfff0} +ringerid 2 UINT {'default': 0xfffe} +pictureid 2 UINT {'default': 0} +defaultnum 1 UINT {'default': 0} +secret PACKET contactindexresponse: * sanyoheader header 2 UINT slot * contactindexentry entry * UNKNOWN pad PACKET contactindexupdaterequest: * sanyowriteheader {'packettype': 0x16, 'command': 0x88} +header 2 UINT slot * contactindexentry +entry PACKET numberrequest: * sanyoheader {'packettype': 0x16, 'command': 0x8f} +header 2 UINT slot PACKET numberentry: 2 UINT contactp "Pointer to contact number belongs" 1 UINT numberlen 48 USTRING {'default': "", 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} +number 1 UNKNOWN +pad 1 UINT numbertype PACKET numberresponse: * sanyoheader header 2 UINT slot * numberentry entry * UNKNOWN pad PACKET numberupdaterequest: * sanyowriteheader {'packettype': 0x16, 'command': 0x8f} +header 2 UINT slot * numberentry +entry PACKET namerequest: * sanyoheader {'packettype': 0x16, 'command': 0x8c} +header 2 UINT slot PACKET nameentry: 2 UINT contactp 1 UINT name_len 1 UINT name_len2 32 USTRING {'default': "", 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} name PACKET nameresponse: * sanyoheader header 2 UINT slot * nameentry entry * UNKNOWN pad PACKET nameupdaterequest: * sanyowriteheader {'packettype': 0x16, 'command': 0x8c} +header 2 UINT slot * nameentry +entry PACKET urlrequest: * sanyoheader {'packettype': 0x16, 'command': 0x98} +header 2 UINT slot PACKET urlentry: 2 UINT contactp "Pointer to contact number belongs" 1 UINT url_len 96 USTRING {'default': "", 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} +url 1 UNKNOWN +pad 1 UINT {'default': 9} +type "Always 9 for World Icon" PACKET urlresponse: * sanyoheader header 2 UINT slot * urlentry entry * UNKNOWN pad PACKET urlupdaterequest: * sanyowriteheader {'packettype': 0x16, 'command': 0x98} +header 2 UINT slot * urlentry +entry PACKET addressrequest: * sanyoheader {'packettype': 0x16, 'command': 0x9b} +header 2 UINT slot PACKET addressentry: 2 UINT contactp "Pointer to contact number belongs" 2 UINT address_len 256 USTRING {'default': "", 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} +address PACKET addressresponse: * sanyoheader header 2 UINT slot * addressentry entry * UNKNOWN pad PACKET addressupdaterequest: * sanyowriteheader {'packettype': 0x16, 'command': 0x9b} +header 2 UINT slot * addressentry +entry PACKET memorequest: * sanyoheader {'packettype': 0x16, 'command': 0x9e} +header 2 UINT slot PACKET memoentry: 2 UINT contactp "Pointer to contact number belongs" 2 UINT memo_len 256 USTRING {'default': "", 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} +memo PACKET memoresponse: * sanyoheader header 2 UINT slot * memoentry entry * UNKNOWN pad PACKET memoupdaterequest: * sanyowriteheader {'packettype': 0x16, 'command': 0x9e} +header 2 UINT slot * memoentry +entry PACKET emailrequest: * sanyoheader {'packettype': 0x16, 'command': 0x93} +header 2 UINT slot PACKET emailentry: 2 UINT contactp "Pointer to contact number belongs" 1 UINT email_len 96 USTRING {'default': "", 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} +email 1 UNKNOWN +pad 1 UINT {'default': 8} +type "7: Mobile, 8: Internet" PACKET emailresponse: * sanyoheader header 2 UINT slot * emailentry entry PACKET emailupdaterequest: * sanyowriteheader {'packettype': 0x16, 'command': 0x93} +header 2 UINT slot * emailentry +entry PACKET grouprequest: * sanyoheader {'packettype': 0x16, 'command': 0x87} +header 1 UINT slot PACKET groupentry: 1 UINT slot 1 UINT groupname_len 16 USTRING {'default': ""} +groupname 2 UINT {'default': 0xfff0} +ringer 2 UINT {'default': 0xfffe} +picture PACKET groupresponse: * sanyoheader header 1 UINT slot * groupentry entry * UNKNOWN pad PACKET groupupdaterequest: * sanyowriteheader {'packettype': 0x16, 'command': 0x87} +header 1 UINT slot * groupentry entry * UNKNOWN pad PACKET evententry: P UINT {'default': 0xffffffff} +alarm 1 UINT slot 14 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} eventname 7 UNKNOWN +pad1 1 UINT eventname_len 4 UINT start "# seconds since Jan 1, 1980 approximately" 4 UINT end 14 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} location 7 UNKNOWN +pad2 1 UINT location_len 4 UINT alarmdiff "Displayed alarm time" 1 UINT period "No, Daily, Weekly, Monthly, Yearly" 1 UINT dom "Day of month for the event" 4 UINT {'default': 0} +timestamp 1 UNKNOWN +pad3 1 UINT {'default': 0} +serial "Some kind of serial number" 3 UNKNOWN +pad4 2 UINT ringtone PACKET eventresponse: * qcpheader header * evententry entry * UNKNOWN pad PACKET eventupdaterequest: * qcpwriteheader {'packettype': 0x0c, 'command':0x23} +header * evententry entry 56 UNKNOWN +pad PACKET messagesententry: 1 UINT slot 1 UINT read 1 UINT counter 3 UNKNOWN pad1 1 UINT dunno1 1 UINT dunno2 1 UINT dunno3 1 UNKNOWN pad2 1 UINT dunno4 1 UINT dunno5 1 UNKNOWN pad3 1 UINT message_len 255 USTRING message "Text of the notification" 1 UNKNOWN pad4 1 UINT pad5 1 UINT year 1 UINT month 1 UINT day 1 UINT hour 1 UINT minute 1 UINT second 1 UINT callback_len 34 USTRING callback 1 UINT phonenum_len 36 USTRING phonenum 1 UINT dunno6 1 UINT priority 3 UNKNOWN pad6 1 UINT dunno7 1 UINT dunno8 PACKET messagesentresponse: * sanyoheader header * messagesententry entry * UNKNOWN pad bitpim-1.0.7+dfsg1/src/phones/p_sanyo6650.p0000644001616600161660000000643010676624753016427 0ustar amuamu### BITPIM ### ### Copyright (C) 2007 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id$ %{ """Various descriptions of data specific to Sanyo Katana-II (SCP-6650)""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * from p_sanyo4930 import * from p_sanyo6600 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMPHONEBOOKENTRIES=300 MAXNUMBERS=500 MAXEMAILS=600 MAXURLS=300 MAXMEMOS=300 MAXADDRESSES=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 MAXNUMBERLEN=32 MAXEMAILLEN=96 MAXURLLEN=96 MAXMEMOLEN=96 HASRINGPICBUF=0 NUMGROUPS=20 NUMPHONENUMBERS=7 NUMEMAILS=2 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=9 %} # Phonebook sort buffer. No longer compatible with older Sanyo phones. Will # need new getphonebook and savephonebook methods PACKET pbsortbuffer: "Various arrays for sorting the phone book, speed dial, determining which" # slots are in use, etc. # This 4000 byte buffer is formed from the concatenation of 500 bytes of # payload from commands 0X 3c 0F through 0X 43 0F P UINT {'constant': 0x76} startcommand "Starting command for R/W buf parts" P UINT {'constant': 4096} bufsize P USTRING {'default': "sort buffer"} +comment # Don't know what it is. A count and list of flags 1 UINT groupslotsused 2 UNKNOWN +pad * LIST {'length': NUMGROUPS, 'createdefault': True} +groupslotusedflags: 1 UINT used "1 if slot in use" # Contact slots 2 UINT slotsused * LIST {'length': NUMPHONEBOOKENTRIES, 'createdefault': True} +usedflags: 1 UINT used "1 if slot in use" * LIST {'length': _NUMSPEEDDIALS} +speeddialindex: 2 UINT {'default': 0xffff} numslot # Name slots used 2 UINT nameslotsused "Always seems to be the same. Why duplicated?" * LIST {'length': NUMPHONEBOOKENTRIES, 'createdefault': True} +nameusedflags: 1 UINT used "1 if slot in use" * LIST {'length': NUMPHONEBOOKENTRIES} +sortorder: 2 UINT {'default': 0xffff} pbslot * USTRING {'terminator': None, 'sizeinbytes': NUMPHONEBOOKENTRIES} pbfirstletters # Phone number slots 2 UINT numslotsused "Number of phone number slots used" * LIST {'length': MAXNUMBERS, 'createdefault': True} +numusedflags: 1 UINT used "1 if slot in use" # Email address slots 2 UINT emailslotsused * LIST {'length': MAXEMAILS, 'createdefault': True} +emailusedflags: 1 UINT used "1 if slot in use" 2 UINT urlslotsused * LIST {'length': MAXURLS, 'createdefault': True} +urlusedflags: 1 UINT used "1 if slot in use" 2 UINT num_address # Slots with an address * LIST {'length': NUMPHONEBOOKENTRIES, 'createdefault': True} +addressusedflags: 1 UINT used "1 if slot in use" # Slots with a memo Needs to be checked. 2 UINT num_memo * LIST {'length': NUMPHONEBOOKENTRIES, 'createdefault': True} +memousedflags: 1 UINT used "1 if slot in use" # We see stuff repeating here, so 6*1024 must be enough. # Pad out the rest of the buffer 543 UNKNOWN +junk bitpim-1.0.7+dfsg1/src/phones/com_samsungspha660.py0000644001616600161660000000312410554051740020230 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_samsungspha660.py 3918 2007-01-19 05:15:12Z djpham $ """Communicate with a Samsung SPH-A620""" import sha import re import struct import common import commport import p_brew import p_samsungspha620 import p_samsungspha660 import com_brew import com_phone import com_samsung_packet import com_samsungspha620 import prototypes import helpids numbertypetab=('home','office','cell','pager','fax','none') class Phone(com_samsungspha620.Phone): "Talk to a Samsung SPH-A660 phone" desc="SPH-A660" helpid=helpids.ID_PHONE_SAMSUNGOTHERS protocolclass=p_samsungspha660 serialsname='spha660' imagelocations=( # offset, index file, files location, origin, maximumentries, header offset ) ringtonelocations=( # offset, index file, files location, type, maximumentries, header offset ) def __init__(self, logtarget, commport): com_samsungspha620.Phone.__init__(self, logtarget, commport) self.numbertypetab=numbertypetab self.mode=self.MODENONE parentprofile=com_samsungspha620.Profile class Profile(parentprofile): deviceclasses=("modem",) protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='SAMSUNG' phone_model='SPH-A660/152' def __init__(self): parentprofile.__init__(self) self.numbertypetab=numbertypetab bitpim-1.0.7+dfsg1/src/phones/com_samsungsphm300pim.py0000644001616600161660000002040310723637410020742 0ustar amuamu### BITPIM ### ### Copyright (C) 2007 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_samsungsphm300pim.py 4473 2007-11-29 22:36:56Z djpham $ """Communicate with the Samsung SPH-M300 through the modem port (PIM)""" import sha import com_samsung_packet import helpids import p_samsungsphm300 parentphone=com_samsung_packet.Phone class Phone(parentphone): "Talk to a Samsung SPH-M300 (PIM) phone" desc="SPH-M300" helpid=helpids.ID_PHONE_SAMSUNGSPHM300 protocolclass=p_samsungsphm300 serialsname='sphm300' builtinringtones=tuple(['Ring %d'%x for x in range(1, 11)])+\ ('After The Summer', 'Focus on It', 'Get Happy', 'Here It Comes', 'In a Circle', 'Look Back', 'Right Here', 'Secret Life', 'Shadow of Your Smile', 'Sunday Morning', 'Default') builtinimages=tuple(['People %d'%x for x in range(1, 11)])+\ tuple(['Animal %d'%x for x in range(1, 11)])+\ ('No Image',) numbertypetab=('cell', 'home', 'office', 'pager', 'fax') def __init__(self, logtarget, commport): parentphone.__init__(self, logtarget, commport) self.mode=self.MODENONE def _setmodephonebooktobrew(self): raise NotImplementedError('BREW mode not available') def _setmodemodemtobrew(self): raise NotImplementedError('BREW mode not available') def _get_ringtone_index(self): """Return the ringtone""" _res={} for _idx,_name in enumerate(self.builtinringtones): _res[_idx]={ 'name': _name, 'origin': 'builtin' } return _res def _get_wallpaper_index(self): """Return the wallpaper index""" _res={} for _idx, _name in enumerate(self.builtinimages): _res[_idx]={ 'name': _name, 'origin': 'builtin' } return _res def getfundamentals(self, results): """Gets information fundamental to interopating with the phone and UI.""" # use a hash of ESN and other stuff (being paranoid) self.log("Retrieving fundamental phone information") self.log("Phone serial number") self.setmode(self.MODEMODEM) results['uniqueserial']=sha.new(self.get_esn()).hexdigest() self.log("Reading group information") results['groups']=self.read_groups() results['ringtone-index']=self._get_ringtone_index() results['wallpaper-index']=self._get_wallpaper_index() self.log("Fundamentals retrieved") return results def _extractphonebook_numbers(self, entry, fundamentals, res): """Extract and build phone numbers""" res['numbers']=[] speeddialtype=entry.speeddial # This phone supports neither secret nor speed dial for numberindex,type in enumerate(self.numbertypetab): if len(entry.numbers[numberindex].number): numhash={'number': entry.numbers[numberindex].number, 'type': type } if speeddialtype==numberindex: # this is the main number res['numbers'].insert(0, numhash) else: res['numbers'].append(numhash) def _extractphonebook_ringtone(self, entry, fundamentals, res): """Extract ringtone info""" try: res['ringtones']=[{'ringtone': fundamentals['ringtone-index'][entry.ringtone]['name'], 'use': 'call'}] except KeyError: pass def _extractphonebook_wallpaper(self, entry, fundamentals, res): """Extract wallpaper info""" try: res['wallpapers']=[{'wallpaper': fundamentals['wallpaper-index'][entry.wallpaper]['name'], 'use': 'call'}] except KeyError: pass def makeentry(self, entry, fundamentals): e=parentphone.makeentry(self, entry, fundamentals) e.writeflg=True # this model can only set built-in ringtones and images, # everything else would be set to default try: e.ringtone=list(self.builtinringtones).index(entry['ringtone']) except ValueError: pass try: e.wallpaper=list(self.builtinimages).index(entry['wallpaper']) except ValueError: pass return e def getsms(self, results): """retrieve SMS data""" # It's not working for now, used for data recording/collection from # users to determine the return format self.log('Reading SMS data') _req=self.protocolclass.smsinrequest() for _cnt in range(self.protocolclass.NUMSMSINENTRIES): self.progress(_cnt, self.protocolclass.NUMSMSINENTRIES, 'Reading SMS entry %d'%_cnt) _req.slot=_cnt _resp=self.sendpbcommand(_req, self.protocolclass.smsinresponse) results['canned_msg']=[] results['sms']={} return results getwallpapers=NotImplemented getringtones=NotImplemented getcallhistory=NotImplemented getplaylist=NotImplemented gett9db=NotImplemented parentprofile=com_samsung_packet.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname MAX_RINGTONE_BASENAME_LENGTH=19 RINGTONE_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789_ ." RINGTONE_LIMITS= { 'MAXSIZE': 250000 } phone_manufacturer='SAMSUNG' phone_model='SPH-A620/152' numbertypetab=Phone.numbertypetab imageorigins={} imagetargets={} _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'read', None), # all calendar reading ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('todo', 'read', None), # all todo list reading ('todo', 'write', 'OVERWRITE'), # all todo list writing ('memo', 'read', None), # all memo list reading ('memo', 'write', 'OVERWRITE'), # all memo list writing ('sms', 'read', None), # all SMS list reading ) __audio_ext={ 'MIDI': 'mid', 'PMD': 'pmd', 'QCP': 'qcp' } def QueryAudio(self, origin, currentextension, afi): # we don't modify any of these print "afi.format=",afi.format if afi.format in ("MIDI", "PMD", "QCP"): for k,n in self.RINGTONE_LIMITS.items(): setattr(afi, k, n) return currentextension, afi d=self.RINGTONE_LIMITS.copy() d['format']='QCP' return ('qcp', fileinfo.AudioFileInfo(afi, **d)) field_color_data={ 'phonebook': { 'name': { 'first': 1, 'middle': 1, 'last': 1, 'full': 1, 'nickname': 0, 'details': 1 }, 'number': { 'type': 5, 'speeddial': 0, 'number': 5, 'details': 5 }, 'email': 1, 'address': { 'type': 0, 'company': 0, 'street': 0, 'street2': 0, 'city': 0, 'state': 0, 'postalcode': 0, 'country': 0, 'details': 0 }, 'url': 1, 'memo': 0, 'category': 1, 'wallpaper': 1, 'ringtone': 1, 'storage': 0, }, 'calendar': { 'description': True, 'location': False, 'allday': False, 'start': True, 'end': True, 'priority': True, 'alarm': True, 'vibrate': False, 'repeat': False, 'memo': False, 'category': False, 'wallpaper': False, 'ringtone': False, }, 'memo': { 'subject': False, 'date': False, 'secret': False, 'category': False, 'memo': True, }, 'todo': { 'summary': True, 'status': False, 'due_date': True, 'percent_complete': False, 'completion_date': False, 'private': False, 'priority': True, 'category': False, 'memo': False, }, } bitpim-1.0.7+dfsg1/src/phones/com_samsungspha680.py0000644001616600161660000000352210454042735020237 0ustar amuamu### BITPIM ### ### Copyright (C) Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_samsungspha680.py 3460 2006-07-08 23:55:09Z djpham $ """Communicate with a Samsung SPH-A680""" import sha import re import struct import common import commport import p_brew import p_samsungspha620 import p_samsungspha680 import com_brew import com_phone import com_samsung_packet import com_samsungspha620 import prototypes numbertypetab=('home','office','cell','pager','fax','none') class Phone(com_samsungspha620.Phone): "Talk to a Samsung SPH-A680 phone" desc="SPH-A680" protocolclass=p_samsungspha680 serialsname='spha680' # jpeg Remove first 124 characters imagelocations=( # offset, index file, files location, origin, maximumentries, header offset # Offset is arbitrary. 100 is reserved for amsRegistry indexed files (300, "cam/jpeg", "camera", 100, 124), (400, "cam/dldJpeg", "camera", 100, 124), (500, "cam/mjpeg", "camera", 100, 124), (600, "cam/dldMjpeg", "camera", 100, 124), ) ringtonelocations=( # offset, index file, files location, type, maximumentries, header offset ) def __init__(self, logtarget, commport): com_samsungspha620.Phone.__init__(self, logtarget, commport) self.numbertypetab=numbertypetab self.mode=self.MODENONE parentprofile=com_samsungspha620.Profile class Profile(parentprofile): deviceclasses=("modem",) protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='SAMSUNG' phone_model='SPH-A680/152' def __init__(self): parentprofile.__init__(self) self.numbertypetab=numbertypetab bitpim-1.0.7+dfsg1/src/phones/p_sanyo7050.p0000644001616600161660000001411410735075763016415 0ustar amuamu### BITPIM ### ### Copyright (C) 2008 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id$ %{ """Various descriptions of data specific to Sanyo SCP-7050""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * from p_sanyo4930 import * from p_sanyo6600 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMPHONEBOOKENTRIES=500 MAXNUMBERS=700 MAXEMAILS=1000 MAXURLS=500 MAXMEMOS=500 MAXADDRESSES=500 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 # Need to check. Is max phone will hold 32/96 or 33/97 MAXNUMBERLEN=48 MAXEMAILLEN=96 MAXURLLEN=96 MAXMEMOLEN=96 HASRINGPICBUF=0 NUMGROUPS=20 NUMPHONENUMBERS=7 NUMEMAILS=2 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=9 %} PACKET bufferpartrequest: P UINT {'constant': 1024} bufpartsize * sanyoheader {'packettype': 0xc7} +header 1026 UNKNOWN +pad PACKET bufferpartupdaterequest: P UINT {'constant': 1024} bufpartsize * sanyowriteheader {'packettype': 0xc7} +header * DATA {'sizeinbytes': self.bufpartsize} data 2 UNKNOWN +pad # Phonebook sort buffer. No longer compatible with older Sanyo phones. Will # need new getphonebook and savephonebook methods PACKET pbsortbuffer: "Various arrays for sorting the phone book, speed dial, determining which" # slots are in use, etc. # This 4000 byte buffer is formed from the concatenation of 500 bytes of # payload from commands 0X 3c 0F through 0X 43 0F P UINT {'constant': 0x0e} startcommand "Starting command for R/W buf parts" P UINT {'constant': 6144} bufsize P USTRING {'default': "sort buffer"} +comment # Don't know what it is. A count and list of flags 1 UINT groupslotsused 2 UNKNOWN +pad * LIST {'length': NUMGROUPS, 'createdefault': True} +groupslotusedflags: 1 UINT used "1 if slot in use" # Contact slots 2 UINT slotsused * LIST {'length': NUMPHONEBOOKENTRIES, 'createdefault': True} +usedflags: 1 UINT used "1 if slot in use" * LIST {'length': _NUMSPEEDDIALS} +speeddialindex: 2 UINT {'default': 0xffff} numslot # Name slots used 2 UINT nameslotsused "Always seems to be the same. Why duplicated?" * LIST {'length': NUMPHONEBOOKENTRIES, 'createdefault': True} +nameusedflags: 1 UINT used "1 if slot in use" * LIST {'length': NUMPHONEBOOKENTRIES} +sortorder: 2 UINT {'default': 0xffff} pbslot * USTRING {'terminator': None, 'sizeinbytes': NUMPHONEBOOKENTRIES} pbfirstletters # Phone number slots 2 UINT numslotsused "Number of phone number slots used" * LIST {'length': MAXNUMBERS, 'createdefault': True} +numusedflags: 1 UINT used "1 if slot in use" # Email address slots 2 UINT emailslotsused * LIST {'length': MAXEMAILS, 'createdefault': True} +emailusedflags: 1 UINT used "1 if slot in use" 2 UINT urlslotsused * LIST {'length': MAXURLS, 'createdefault': True} +urlusedflags: 1 UINT used "1 if slot in use" 2 UINT num_address # Slots with an address * LIST {'length': NUMPHONEBOOKENTRIES, 'createdefault': True} +addressusedflags: 1 UINT used "1 if slot in use" # Slots with a memo Needs to be checked. 2 UINT num_memo * LIST {'length': NUMPHONEBOOKENTRIES, 'createdefault': True} +memousedflags: 1 UINT used "1 if slot in use" # We see stuff repeating here, so 6*1024 must be enough. # Pad out the rest of the buffer 391 UNKNOWN +junk PACKET contactindexrequest: * sanyoheader {'packettype': 0xca, 'command': 0x38} +header 2 UINT slot PACKET contactindexupdaterequest: * sanyowriteheader {'packettype': 0xca, 'command': 0x38} +header 2 UINT slot * contactindexentry +entry PACKET numberrequest: * sanyoheader {'packettype': 0xca, 'command': 0x3f} +header 2 UINT slot PACKET numberupdaterequest: * sanyowriteheader {'packettype': 0xca, 'command': 0x3f} +header 2 UINT slot * numberentry +entry PACKET namerequest: * sanyoheader {'packettype': 0xca, 'command': 0x3c} +header 2 UINT slot PACKET nameupdaterequest: * sanyowriteheader {'packettype': 0xca, 'command': 0x3c} +header 2 UINT slot * nameentry +entry PACKET emailrequest: * sanyoheader {'packettype': 0xca, 'command': 0x43} +header 2 UINT slot PACKET emailupdaterequest: * sanyowriteheader {'packettype': 0xca, 'command': 0x43} +header 2 UINT slot * emailentry +entry PACKET memorequest: * sanyoheader {'packettype': 0xca, 'command': 0x4e} +header 2 UINT slot PACKET memoupdaterequest: * sanyowriteheader {'packettype': 0xca, 'command': 0x4e} +header 2 UINT slot * memoentry +entry PACKET addressrequest: * sanyoheader {'packettype': 0xca, 'command': 0x4b} +header 2 UINT slot PACKET addressupdaterequest: * sanyowriteheader {'packettype': 0xca, 'command': 0x4b} +header 2 UINT slot * addressentry +entry PACKET urlrequest: * sanyoheader {'packettype': 0xca, 'command': 0x48} +header 2 UINT slot PACKET urlupdaterequest: * sanyowriteheader {'packettype': 0xca, 'command': 0x48} +header 2 UINT slot * urlentry +entry PACKET grouprequest: * sanyoheader {'packettype': 0xca, 'command': 0x37} +header 1 UINT slot PACKET groupupdaterequest: * sanyowriteheader {'packettype': 0xca, 'command': 0x37} +header 1 UINT slot * groupentry entry * UNKNOWN pad PACKET sanyoreset: * sanyofaheader {'faset': 0x37} +preamble 1 UINT {'constant': 0} +command 1 UINT {'constant': 0} +packettype bitpim-1.0.7+dfsg1/src/phones/p_sanyo7200.p0000644001616600161660000000140110023767334016375 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_sanyo7200.p 1036 2004-03-11 04:45:16Z sawecw $ %{ """Various descriptions of data specific to Sanyo SCP-7200""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * import p_sanyo # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 _NUMCALLHISTORY=20 _MAXNUMBERLEN=48 _MAXEMAILLEN=48 #for sym in dir(p_sanyo): # print sym %} bitpim-1.0.7+dfsg1/src/phones/p_lgvx5200.py0000644001616600161660000025201710466234100016415 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VX5200""" from common import PhoneBookBusyException from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx8100 except as noted # below from p_lgvx8100 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb BREW_FILE_SYSTEM=0 PHONE_ENCODING='iso8859_1' # need to call stat to get the file time/data broken_filelist_date=True class indexentry(BaseProtogenClass): __fields=['index', 'type', 'filename', 'icon', 'date', 'dunno'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_type.writetobuffer(buf) self.__field_filename.writetobuffer(buf) try: self.__field_icon except: self.__field_icon=UINT(**{'sizeinbytes': 4, 'default':0}) self.__field_icon.writetobuffer(buf) try: self.__field_date except: self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_date.writetobuffer(buf) self.__field_dunno.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self.__field_type=UINT(**{'sizeinbytes': 2}) self.__field_type.readfrombuffer(buf) self.__field_filename=USTRING(**{'sizeinbytes': 60, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_filename.readfrombuffer(buf) self.__field_icon=UINT(**{'sizeinbytes': 4, 'default':0}) self.__field_icon.readfrombuffer(buf) self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_date.readfrombuffer(buf) self.__field_dunno=UINT(**{'sizeinbytes': 4}) self.__field_dunno.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_type(self): return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,UINT): self.__field_type=value else: self.__field_type=UINT(value,**{'sizeinbytes': 2}) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, None) def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'sizeinbytes': 60, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, "includes full pathname") def __getfield_icon(self): try: self.__field_icon except: self.__field_icon=UINT(**{'sizeinbytes': 4, 'default':0}) return self.__field_icon.getvalue() def __setfield_icon(self, value): if isinstance(value,UINT): self.__field_icon=value else: self.__field_icon=UINT(value,**{'sizeinbytes': 4, 'default':0}) def __delfield_icon(self): del self.__field_icon icon=property(__getfield_icon, __setfield_icon, __delfield_icon, None) def __getfield_date(self): try: self.__field_date except: self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,UINT): self.__field_date=value else: self.__field_date=UINT(value,**{'sizeinbytes': 4, 'default': 0}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, "i think this is bitfield of the date") def __getfield_dunno(self): return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 4}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('type', self.__field_type, None) yield ('filename', self.__field_filename, "includes full pathname") yield ('icon', self.__field_icon, None) yield ('date', self.__field_date, "i think this is bitfield of the date") yield ('dunno', self.__field_dunno, None) class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): dict2={'elementclass': indexentry, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class msg_record(BaseProtogenClass): __fields=['unknown1', 'binary', 'unknown3', 'unknown4', 'unknown6', 'length', 'msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(msg_record,self).__init__(**dict) if self.__class__ is msg_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(msg_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(msg_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_binary.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_length.writetobuffer(buf) try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx5200_89, 'length': 219}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_binary=UINT(**{'sizeinbytes': 1}) self.__field_binary.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1}) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 1}) self.__field_unknown4.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 1}) self.__field_unknown6.readfrombuffer(buf) self.__field_length=UINT(**{'sizeinbytes': 1}) self.__field_length.readfrombuffer(buf) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx5200_89, 'length': 219}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_binary(self): return self.__field_binary.getvalue() def __setfield_binary(self, value): if isinstance(value,UINT): self.__field_binary=value else: self.__field_binary=UINT(value,**{'sizeinbytes': 1}) def __delfield_binary(self): del self.__field_binary binary=property(__getfield_binary, __setfield_binary, __delfield_binary, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_length(self): return self.__field_length.getvalue() def __setfield_length(self, value): if isinstance(value,UINT): self.__field_length=value else: self.__field_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_length(self): del self.__field_length length=property(__getfield_length, __setfield_length, __delfield_length, None) def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx5200_89, 'length': 219}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx5200_89, 'length': 219}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('binary', self.__field_binary, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) yield ('unknown6', self.__field_unknown6, None) yield ('length', self.__field_length, None) yield ('msg', self.__field_msg, None) class _gen_p_lgvx5200_89(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx5200_89,self).__init__(**dict) if self.__class__ is _gen_p_lgvx5200_89: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx5200_89,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx5200_89,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class recipient_record(BaseProtogenClass): __fields=['unknown1', 'number', 'status', 'timesent', 'timereceived', 'unknown2', 'unknown3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(recipient_record,self).__init__(**dict) if self.__class__ is recipient_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(recipient_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(recipient_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_timereceived.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=DATA(**{'sizeinbytes': 33}) self.__field_unknown1.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49}) self.__field_number.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_timereceived=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timereceived.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=DATA(**{'sizeinbytes': 40}) self.__field_unknown3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,DATA): self.__field_unknown1=value else: self.__field_unknown1=DATA(value,**{'sizeinbytes': 33}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_timereceived(self): return self.__field_timereceived.getvalue() def __setfield_timereceived(self, value): if isinstance(value,LGCALDATE): self.__field_timereceived=value else: self.__field_timereceived=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timereceived(self): del self.__field_timereceived timereceived=property(__getfield_timereceived, __setfield_timereceived, __delfield_timereceived, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,DATA): self.__field_unknown3=value else: self.__field_unknown3=DATA(value,**{'sizeinbytes': 40}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('number', self.__field_number, None) yield ('status', self.__field_status, None) yield ('timesent', self.__field_timesent, None) yield ('timereceived', self.__field_timereceived, None) yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) class sms_saved(BaseProtogenClass): __fields=['outboxmsg', 'GPStime', 'outbox', 'inbox'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_saved,self).__init__(**dict) if self.__class__ is sms_saved: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_saved,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_saved,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_outboxmsg.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) if self.outboxmsg: self.__field_outbox.writetobuffer(buf) if not self.outboxmsg: self.__field_inbox.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_outboxmsg=UINT(**{'sizeinbytes': 4}) self.__field_outboxmsg.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) if self.outboxmsg: self.__field_outbox=sms_out() self.__field_outbox.readfrombuffer(buf) if not self.outboxmsg: self.__field_inbox=sms_in() self.__field_inbox.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_outboxmsg(self): return self.__field_outboxmsg.getvalue() def __setfield_outboxmsg(self, value): if isinstance(value,UINT): self.__field_outboxmsg=value else: self.__field_outboxmsg=UINT(value,**{'sizeinbytes': 4}) def __delfield_outboxmsg(self): del self.__field_outboxmsg outboxmsg=property(__getfield_outboxmsg, __setfield_outboxmsg, __delfield_outboxmsg, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_outbox(self): return self.__field_outbox.getvalue() def __setfield_outbox(self, value): if isinstance(value,sms_out): self.__field_outbox=value else: self.__field_outbox=sms_out(value,) def __delfield_outbox(self): del self.__field_outbox outbox=property(__getfield_outbox, __setfield_outbox, __delfield_outbox, None) def __getfield_inbox(self): return self.__field_inbox.getvalue() def __setfield_inbox(self, value): if isinstance(value,sms_in): self.__field_inbox=value else: self.__field_inbox=sms_in(value,) def __delfield_inbox(self): del self.__field_inbox inbox=property(__getfield_inbox, __setfield_inbox, __delfield_inbox, None) def iscontainer(self): return True def containerelements(self): yield ('outboxmsg', self.__field_outboxmsg, None) yield ('GPStime', self.__field_GPStime, None) if self.outboxmsg: yield ('outbox', self.__field_outbox, None) if not self.outboxmsg: yield ('inbox', self.__field_inbox, None) class sms_out(BaseProtogenClass): __fields=['index', 'unknown1', 'locked', 'timesent', 'unknown2', 'GPStime', 'subject', 'unknown4', 'num_msg_elements', 'messages', 'unknown1', 'priority', 'unknown5', 'callback', 'recipients', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_out,self).__init__(**dict) if self.__class__ is sms_out: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_out,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_out,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) self.__field_messages.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_callback.writetobuffer(buf) try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) self.__field_recipients.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2}) self.__field_unknown2.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_unknown4=UNKNOWN(**{'sizeinbytes': 1}) self.__field_unknown4.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) self.__field_messages.readfrombuffer(buf) self.__field_unknown1=UNKNOWN(**{'sizeinbytes': 15}) self.__field_unknown1.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_unknown5=UNKNOWN(**{'sizeinbytes': 1}) self.__field_unknown5.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 35}) self.__field_callback.readfrombuffer(buf) self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) self.__field_recipients.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UNKNOWN): self.__field_unknown4=value else: self.__field_unknown4=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_messages(self): try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) return self.__field_messages.getvalue() def __setfield_messages(self, value): if isinstance(value,LIST): self.__field_messages=value else: self.__field_messages=LIST(value,**{'elementclass': msg_record, 'length': 7}) def __delfield_messages(self): del self.__field_messages messages=property(__getfield_messages, __setfield_messages, __delfield_messages, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UNKNOWN): self.__field_unknown1=value else: self.__field_unknown1=UNKNOWN(value,**{'sizeinbytes': 15}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UNKNOWN): self.__field_unknown5=value else: self.__field_unknown5=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 35}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_recipients(self): try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) return self.__field_recipients.getvalue() def __setfield_recipients(self, value): if isinstance(value,LIST): self.__field_recipients=value else: self.__field_recipients=LIST(value,**{'elementclass': recipient_record,'length': 9}) def __delfield_recipients(self): del self.__field_recipients recipients=property(__getfield_recipients, __setfield_recipients, __delfield_recipients, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('unknown1', self.__field_unknown1, None) yield ('locked', self.__field_locked, None) yield ('timesent', self.__field_timesent, None) yield ('unknown2', self.__field_unknown2, None) yield ('GPStime', self.__field_GPStime, None) yield ('subject', self.__field_subject, None) yield ('unknown4', self.__field_unknown4, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('messages', self.__field_messages, None) yield ('unknown1', self.__field_unknown1, None) yield ('priority', self.__field_priority, None) yield ('unknown5', self.__field_unknown5, None) yield ('callback', self.__field_callback, None) yield ('recipients', self.__field_recipients, None) yield ('pad', self.__field_pad, None) class SMSINBOXMSGFRAGMENT(BaseProtogenClass): __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSINBOXMSGFRAGMENT,self).__init__(**dict) if self.__class__ is SMSINBOXMSGFRAGMENT: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSINBOXMSGFRAGMENT,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSINBOXMSGFRAGMENT,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx5200_128, 'length': 181} dict2.update(kwargs) kwargs=dict2 self.__field_msg=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx5200_128, 'length': 181}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx5200_128, 'length': 181}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx5200_128, 'length': 181}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx5200_128, 'length': 181}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class _gen_p_lgvx5200_128(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx5200_128,self).__init__(**dict) if self.__class__ is _gen_p_lgvx5200_128: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx5200_128,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx5200_128,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class sms_in(BaseProtogenClass): __fields=['unknown1', 'timesent', 'unknown2', 'callback_length', 'callback', 'sender_length', 'sender', 'unknown3', 'lg_time', 'unknown4', 'GPStime', 'unknown5', 'read', 'locked', 'unknown6', 'priority', 'subject', 'bin_header1', 'bin_header2', 'unknown7', 'multipartID', 'bin_header3', 'num_msg_elements', 'msglengths', 'unknown8', 'msgs', 'unknown9'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_in,self).__init__(**dict) if self.__class__ is sms_in: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_in,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_in,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_callback_length.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_sender_length.writetobuffer(buf) try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx5200_138, 'length': 38}) self.__field_sender.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_lg_time.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_bin_header1.writetobuffer(buf) self.__field_bin_header2.writetobuffer(buf) self.__field_unknown7.writetobuffer(buf) self.__field_multipartID.writetobuffer(buf) self.__field_bin_header3.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx5200_156, 'length': 10}) self.__field_msglengths.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.writetobuffer(buf) self.__field_unknown9.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UNKNOWN(**{'sizeinbytes': 10}) self.__field_unknown1.readfrombuffer(buf) self.__field_timesent=SMSDATE(**{'sizeinbytes': 6}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 3}) self.__field_unknown2.readfrombuffer(buf) self.__field_callback_length=UINT(**{'sizeinbytes': 1}) self.__field_callback_length.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 38}) self.__field_callback.readfrombuffer(buf) self.__field_sender_length=UINT(**{'sizeinbytes': 1}) self.__field_sender_length.readfrombuffer(buf) self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx5200_138, 'length': 38}) self.__field_sender.readfrombuffer(buf) self.__field_unknown3=DATA(**{'sizeinbytes': 12}) self.__field_unknown3.readfrombuffer(buf) self.__field_lg_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_lg_time.readfrombuffer(buf) self.__field_unknown4=UNKNOWN(**{'sizeinbytes': 3}) self.__field_unknown4.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 4}) self.__field_unknown5.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 1}) self.__field_read.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 8}) self.__field_unknown6.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_bin_header1=UINT(**{'sizeinbytes': 1}) self.__field_bin_header1.readfrombuffer(buf) self.__field_bin_header2=UINT(**{'sizeinbytes': 1}) self.__field_bin_header2.readfrombuffer(buf) self.__field_unknown7=UINT(**{'sizeinbytes': 4}) self.__field_unknown7.readfrombuffer(buf) self.__field_multipartID=UINT(**{'sizeinbytes': 2}) self.__field_multipartID.readfrombuffer(buf) self.__field_bin_header3=UINT(**{'sizeinbytes': 1}) self.__field_bin_header3.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx5200_156, 'length': 10}) self.__field_msglengths.readfrombuffer(buf) self.__field_unknown8=UNKNOWN(**{'sizeinbytes': 10}) self.__field_unknown8.readfrombuffer(buf) self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.readfrombuffer(buf) self.__field_unknown9=UNKNOWN() self.__field_unknown9.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UNKNOWN): self.__field_unknown1=value else: self.__field_unknown1=UNKNOWN(value,**{'sizeinbytes': 10}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,SMSDATE): self.__field_timesent=value else: self.__field_timesent=SMSDATE(value,**{'sizeinbytes': 6}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_callback_length(self): return self.__field_callback_length.getvalue() def __setfield_callback_length(self, value): if isinstance(value,UINT): self.__field_callback_length=value else: self.__field_callback_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_length(self): del self.__field_callback_length callback_length=property(__getfield_callback_length, __setfield_callback_length, __delfield_callback_length, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 38}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_sender_length(self): return self.__field_sender_length.getvalue() def __setfield_sender_length(self, value): if isinstance(value,UINT): self.__field_sender_length=value else: self.__field_sender_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_sender_length(self): del self.__field_sender_length sender_length=property(__getfield_sender_length, __setfield_sender_length, __delfield_sender_length, None) def __getfield_sender(self): try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx5200_138, 'length': 38}) return self.__field_sender.getvalue() def __setfield_sender(self, value): if isinstance(value,LIST): self.__field_sender=value else: self.__field_sender=LIST(value,**{'elementclass': _gen_p_lgvx5200_138, 'length': 38}) def __delfield_sender(self): del self.__field_sender sender=property(__getfield_sender, __setfield_sender, __delfield_sender, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,DATA): self.__field_unknown3=value else: self.__field_unknown3=DATA(value,**{'sizeinbytes': 12}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_lg_time(self): return self.__field_lg_time.getvalue() def __setfield_lg_time(self, value): if isinstance(value,LGCALDATE): self.__field_lg_time=value else: self.__field_lg_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_lg_time(self): del self.__field_lg_time lg_time=property(__getfield_lg_time, __setfield_lg_time, __delfield_lg_time, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UNKNOWN): self.__field_unknown4=value else: self.__field_unknown4=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 1}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 8}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_bin_header1(self): return self.__field_bin_header1.getvalue() def __setfield_bin_header1(self, value): if isinstance(value,UINT): self.__field_bin_header1=value else: self.__field_bin_header1=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header1(self): del self.__field_bin_header1 bin_header1=property(__getfield_bin_header1, __setfield_bin_header1, __delfield_bin_header1, None) def __getfield_bin_header2(self): return self.__field_bin_header2.getvalue() def __setfield_bin_header2(self, value): if isinstance(value,UINT): self.__field_bin_header2=value else: self.__field_bin_header2=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header2(self): del self.__field_bin_header2 bin_header2=property(__getfield_bin_header2, __setfield_bin_header2, __delfield_bin_header2, None) def __getfield_unknown7(self): return self.__field_unknown7.getvalue() def __setfield_unknown7(self, value): if isinstance(value,UINT): self.__field_unknown7=value else: self.__field_unknown7=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown7(self): del self.__field_unknown7 unknown7=property(__getfield_unknown7, __setfield_unknown7, __delfield_unknown7, None) def __getfield_multipartID(self): return self.__field_multipartID.getvalue() def __setfield_multipartID(self, value): if isinstance(value,UINT): self.__field_multipartID=value else: self.__field_multipartID=UINT(value,**{'sizeinbytes': 2}) def __delfield_multipartID(self): del self.__field_multipartID multipartID=property(__getfield_multipartID, __setfield_multipartID, __delfield_multipartID, None) def __getfield_bin_header3(self): return self.__field_bin_header3.getvalue() def __setfield_bin_header3(self, value): if isinstance(value,UINT): self.__field_bin_header3=value else: self.__field_bin_header3=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header3(self): del self.__field_bin_header3 bin_header3=property(__getfield_bin_header3, __setfield_bin_header3, __delfield_bin_header3, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_msglengths(self): try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx5200_156, 'length': 10}) return self.__field_msglengths.getvalue() def __setfield_msglengths(self, value): if isinstance(value,LIST): self.__field_msglengths=value else: self.__field_msglengths=LIST(value,**{'elementclass': _gen_p_lgvx5200_156, 'length': 10}) def __delfield_msglengths(self): del self.__field_msglengths msglengths=property(__getfield_msglengths, __setfield_msglengths, __delfield_msglengths, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,UNKNOWN): self.__field_unknown8=value else: self.__field_unknown8=UNKNOWN(value,**{'sizeinbytes': 10}) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def __getfield_unknown9(self): return self.__field_unknown9.getvalue() def __setfield_unknown9(self, value): if isinstance(value,UNKNOWN): self.__field_unknown9=value else: self.__field_unknown9=UNKNOWN(value,) def __delfield_unknown9(self): del self.__field_unknown9 unknown9=property(__getfield_unknown9, __setfield_unknown9, __delfield_unknown9, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('timesent', self.__field_timesent, None) yield ('unknown2', self.__field_unknown2, None) yield ('callback_length', self.__field_callback_length, None) yield ('callback', self.__field_callback, None) yield ('sender_length', self.__field_sender_length, None) yield ('sender', self.__field_sender, None) yield ('unknown3', self.__field_unknown3, None) yield ('lg_time', self.__field_lg_time, None) yield ('unknown4', self.__field_unknown4, None) yield ('GPStime', self.__field_GPStime, None) yield ('unknown5', self.__field_unknown5, None) yield ('read', self.__field_read, None) yield ('locked', self.__field_locked, None) yield ('unknown6', self.__field_unknown6, None) yield ('priority', self.__field_priority, None) yield ('subject', self.__field_subject, None) yield ('bin_header1', self.__field_bin_header1, None) yield ('bin_header2', self.__field_bin_header2, None) yield ('unknown7', self.__field_unknown7, None) yield ('multipartID', self.__field_multipartID, None) yield ('bin_header3', self.__field_bin_header3, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('msglengths', self.__field_msglengths, None) yield ('unknown8', self.__field_unknown8, None) yield ('msgs', self.__field_msgs, None) yield ('unknown9', self.__field_unknown9, None) class _gen_p_lgvx5200_138(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx5200_138,self).__init__(**dict) if self.__class__ is _gen_p_lgvx5200_138: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx5200_138,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx5200_138,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of senders phone number") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of senders phone number") class _gen_p_lgvx5200_156(BaseProtogenClass): 'Anonymous inner class' __fields=['msglength'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx5200_156,self).__init__(**dict) if self.__class__ is _gen_p_lgvx5200_156: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx5200_156,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx5200_156,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_msglength=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msglength.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msglength=UINT(**{'sizeinbytes': 1}) self.__field_msglength.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msglength(self): return self.__field_msglength.getvalue() def __setfield_msglength(self, value): if isinstance(value,UINT): self.__field_msglength=value else: self.__field_msglength=UINT(value,**{'sizeinbytes': 1}) def __delfield_msglength(self): del self.__field_msglength msglength=property(__getfield_msglength, __setfield_msglength, __delfield_msglength, "lengths of individual messages in septets") def iscontainer(self): return True def containerelements(self): yield ('msglength', self.__field_msglength, "lengths of individual messages in septets") class sms_quick_text(BaseProtogenClass): __fields=['msgs'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_quick_text,self).__init__(**dict) if self.__class__ is sms_quick_text: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_quick_text,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_quick_text,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx5200_169, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_msgs=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx5200_169, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) self.__field_msgs.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx5200_169, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) self.__field_msgs.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx5200_169, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'elementclass': _gen_p_lgvx5200_169, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def iscontainer(self): return True def containerelements(self): yield ('msgs', self.__field_msgs, None) class _gen_p_lgvx5200_169(BaseProtogenClass): 'Anonymous inner class' __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx5200_169,self).__init__(**dict) if self.__class__ is _gen_p_lgvx5200_169: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx5200_169,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx5200_169,kwargs) if len(args): dict2={'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""} dict2.update(kwargs) kwargs=dict2 self.__field_msg=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class textmemo(BaseProtogenClass): __fields=['dunno', 'GPStime', 'memotime', 'text'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemo,self).__init__(**dict) if self.__class__ is textmemo: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemo,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemo,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 4, 'constant':1 }) self.__field_dunno.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_memotime.writetobuffer(buf) self.__field_text.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_dunno=UINT(**{'sizeinbytes': 4, 'constant':1 }) self.__field_dunno.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_memotime=LGCALDATE(**{'sizeinbytes': 4}) self.__field_memotime.readfrombuffer(buf) self.__field_text=USTRING(**{'sizeinbytes': 152, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_text.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_dunno(self): try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 4, 'constant':1 }) return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 4, 'constant':1 }) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_memotime(self): return self.__field_memotime.getvalue() def __setfield_memotime(self, value): if isinstance(value,LGCALDATE): self.__field_memotime=value else: self.__field_memotime=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_memotime(self): del self.__field_memotime memotime=property(__getfield_memotime, __setfield_memotime, __delfield_memotime, None) def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,USTRING): self.__field_text=value else: self.__field_text=USTRING(value,**{'sizeinbytes': 152, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def iscontainer(self): return True def containerelements(self): yield ('dunno', self.__field_dunno, None) yield ('GPStime', self.__field_GPStime, None) yield ('memotime', self.__field_memotime, None) yield ('text', self.__field_text, None) class textmemofile(BaseProtogenClass): __fields=['itemcount', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemofile,self).__init__(**dict) if self.__class__ is textmemofile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemofile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemofile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_itemcount.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_itemcount=UINT(**{'sizeinbytes': 4}) self.__field_itemcount.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_itemcount(self): return self.__field_itemcount.getvalue() def __setfield_itemcount(self, value): if isinstance(value,UINT): self.__field_itemcount=value else: self.__field_itemcount=UINT(value,**{'sizeinbytes': 4}) def __delfield_itemcount(self): del self.__field_itemcount itemcount=property(__getfield_itemcount, __setfield_itemcount, __delfield_itemcount, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': textmemo }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('itemcount', self.__field_itemcount, None) yield ('items', self.__field_items, None) bitpim-1.0.7+dfsg1/src/phones/p_sanyo7300.p0000644001616600161660000000145010045062372016374 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_sanyo7300.p 1211 2004-05-02 03:03:22Z sawecw $ %{ """Various descriptions of data specific to Sanyo SCP-7300""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 _NUMCALLHISTORY=20 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 #for sym in dir(p_sanyo): # print sym %} bitpim-1.0.7+dfsg1/src/phones/p_sanyo7400.p0000644001616600161660000001111610442561507016402 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_sanyo7400.p 3352 2006-06-10 15:20:39Z skyjunky $ %{ """Various descriptions of data specific to Sanyo MM-7400""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 # Need to check. Is max phone will hold 32/96 or 33/97 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 HASRINGPICBUF=0 %} PACKET {'readwrite': 0x26} qcpheader: 1 UINT readwrite 1 UINT command 1 UINT packettype PACKET {'readwrite': 0x27} qcpwriteheader: 1 UINT readwrite 1 UINT command 1 UINT packettype PACKET eventrequest: * qcpheader {'packettype': 0x0c, 'command': 0x23} +header 1 UINT slot 129 UNKNOWN +pad PACKET eventslotinuserequest: * qcpheader {'readwrite': 0x26, 'packettype': 0x0d, 'command': 0x74} +header 1 UINT slot 129 UNKNOWN +pad PACKET evententry: 1 UINT slot 14 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} eventname 7 UNKNOWN +pad1 1 UINT eventname_len 4 UINT start "# seconds since Jan 1, 1980 approximately" 4 UINT end 14 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} location 7 UNKNOWN +pad2 1 UINT location_len 4 UINT alarmdiff "Displayed alarm time" 1 UINT period "No, Daily, Weekly, Monthly, Yearly" 1 UINT dom "Day of month for the event" 4 UINT alarm 1 UNKNOWN +pad3 1 UINT {'default': 0} +serial "Some kind of serial number" 3 UNKNOWN +pad4 2 UINT ringtone PACKET eventresponse: * qcpheader header * evententry entry * UNKNOWN pad PACKET eventslotinuseresponse: * qcpheader header 1 UINT slot 1 UINT flag * UNKNOWN pad PACKET eventslotinuseupdaterequest: * qcpwriteheader {'packettype': 0x0d, 'command': 0x74} +header 1 UINT slot 1 UINT flag 124 UNKNOWN +pad PACKET eventupdaterequest: * qcpwriteheader {'packettype': 0x0c, 'command':0x23} +header * evententry entry 56 UNKNOWN +pad PACKET callalarmrequest: * qcpheader {'packettype': 0x0c, 'command': 0x24} +header 1 UINT slot 129 UNKNOWN +pad PACKET callalarmresponse: * qcpheader header * callalarmentry entry * UNKNOWN pad PACKET callalarmupdaterequest: * qcpwriteheader {'packettype': 0x0c, 'command':0x24} +header * callalarmentry entry 40 UNKNOWN +pad PACKET callalarmslotinuserequest: * qcpheader {'packettype': 0x0d, 'command': 0x76} +header 1 UINT slot 129 UNKNOWN +pad PACKET callalarmslotinuseresponse: * qcpheader header 1 UINT slot 1 UINT flag * UNKNOWN pad PACKET callalarmentry: 1 UINT slot 1 UNKNOWN +pad0 "Not the flag?" 49 USTRING {'raiseonunterminatedread': False} phonenum 1 UINT phonenum_len 4 UINT date "# seconds since Jan 1, 1980 approximately" 1 UINT period "No, Daily, Weekly, Monthly, Yearly" 1 UINT dom "Day of month for the event" 4 UINT datedup "Copy of the date. Always the same???" 16 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} name 1 UNKNOWN +pad1 1 UINT name_len 1 UINT phonenumbertype "1: Home, 2: Work, ..." 2 UINT phonenumberslot 1 UNKNOWN +pad2 1 UINT {'default': 0} +serial 2 UNKNOWN +pad3 1 UINT {'default': 0xfc} +ringtone 1 UNKNOWN +pad4 " This may be the ringtone. Need to understand " 1 UINT +flag PACKET todorequest: * qcpheader {'packettype': 0x0c, 'command': 0x25} +header 1 UINT slot 129 UNKNOWN +pad PACKET todoentry: 1 UINT slot 1 UINT flag "0: Not used, 1: Used" 14 USTRING {'raiseonunterminatedread': False} todo 7 UNKNOWN +pad1 1 UINT todo_len 1 UINT priority "0: Normal, 1: Urgent, 2: Done" 1 UINT +dunno "Maybe always zero" 1 UINT order "Gets sorted on screen in this order" PACKET todoresponse: * qcpheader header * todoentry entry * UNKNOWN pad PACKET sanyomediafilenameresponse: * sanyomediaheader header 1 UINT pad1 154 USTRING filename 1 UINT num1 1 UNKNOWN pad2 1 UINT num2 1 UNKNOWN pad3 1 UINT num5 1 UNKNOWN pad4 1 UINT num4 1 UNKNOWN pad5 1 UINT num3 8 UNKNOWN pad5 bitpim-1.0.7+dfsg1/src/phones/p_sanyo7500.p0000644001616600161660000000275211042765053016410 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id$ %{ """Various descriptions of data specific to Sanyo MM-7500""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * from p_sanyo4930 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=500 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 # Need to check. Is max phone will hold 32/96 or 33/97 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 HASRINGPICBUF=0 #BREW_FILE_SYSTEM=2 %} PACKET messagesententry: 1 UINT slot 1 UINT read 1 UINT counter 3 UNKNOWN pad1 1 UINT dunno1 1 UINT dunno2 1 UINT dunno3 1 UNKNOWN pad2 1 UINT dunno4 1 UINT dunno5 1 UNKNOWN pad3 1 UINT message_len 255 USTRING message "Text of the notification" 2 UNKNOWN pad4 1 UINT year 1 UINT month 1 UINT day 1 UINT hour 1 UINT minute 1 UINT second 1 UINT callback_len 34 USTRING callback 1 UINT phonenum_len 37 USTRING phonenum 1 UINT dunno6 1 UINT priority 3 UNKNOWN pad6 1 UINT dunno7 1 UINT dunno8 PACKET messagesentresponse: * sanyoheader header * messagesententry entry * UNKNOWN pad bitpim-1.0.7+dfsg1/src/phones/com_samsungspha740.py0000644001616600161660000000345310554051740020234 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_samsungspha740.py 3918 2007-01-19 05:15:12Z djpham $ """Communicate with a Samsung SPH-A740""" import sha import re import struct import common import commport import p_brew import p_samsungspha620 import p_samsungspha740 import com_brew import com_phone import com_samsung_packet import com_samsungspha620 import prototypes import helpids numbertypetab=('home','office','cell','pager','fax','none') class Phone(com_samsungspha620.Phone): "Talk to a Samsung SPH-A740 phone" desc="SPH-A740" helpid=helpids.ID_PHONE_SAMSUNGOTHERS protocolclass=p_samsungspha740 serialsname='spha740' # jpeg Remove first 124 characters imagelocations=( # offset, index file, files location, origin, maximumentries, header offset # Offset is arbitrary. 100 is reserved for amsRegistry indexed files (400, "cam/dldJpeg", "camera", 100, 124), (300, "cam/jpeg", "camera", 100, 124), ) ringtonelocations=( # offset, index file, files location, type, maximumentries, header offset ) def __init__(self, logtarget, commport): com_samsungspha620.Phone.__init__(self, logtarget, commport) self.numbertypetab=numbertypetab self.mode=self.MODENONE parentprofile=com_samsungspha620.Profile class Profile(parentprofile): deviceclasses=("modem",) protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='SAMSUNG' phone_model='SPH-A740/152' def __init__(self): parentprofile.__init__(self) self.numbertypetab=numbertypetab bitpim-1.0.7+dfsg1/src/phones/p_audiovoxcdm8900.py0000644001616600161660000021472210466234100017772 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Audiovox CDM8900""" from prototypes import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMSLOTS=300 _NUMGROUPS=7 _ALLGROUP=0 _MAXGROUPLEN=16 _MAXPHONENUMBERLEN=32 _MAXNAMELEN=16 _MAXEMAILLEN=48 _MAXMEMOLEN=48 class readpbslotsrequest(BaseProtogenClass): "Get a list of which slots are used" __fields=['cmd'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(readpbslotsrequest,self).__init__(**dict) if self.__class__ is readpbslotsrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(readpbslotsrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(readpbslotsrequest,kwargs) if len(args): dict2={'sizeinbytes': 1, 'constant': 0x85} dict2.update(kwargs) kwargs=dict2 self.__field_cmd=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x85}) self.__field_cmd.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x85}) self.__field_cmd.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x85}) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'constant': 0x85}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) class readpbslotsresponse(BaseProtogenClass): __fields=['cmd', 'present'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(readpbslotsresponse,self).__init__(**dict) if self.__class__ is readpbslotsresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(readpbslotsresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(readpbslotsresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_cmd.writetobuffer(buf) self.__field_present.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x85}) self.__field_cmd.readfrombuffer(buf) self.__field_present=DATA() self.__field_present.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'constant': 0x85}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_present(self): return self.__field_present.getvalue() def __setfield_present(self, value): if isinstance(value,DATA): self.__field_present=value else: self.__field_present=DATA(value,) def __delfield_present(self): del self.__field_present present=property(__getfield_present, __setfield_present, __delfield_present, "a non-zero value indicates a slot is present") def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('present', self.__field_present, "a non-zero value indicates a slot is present") class writepbslotsrequest(BaseProtogenClass): __fields=['cmd', 'present'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(writepbslotsrequest,self).__init__(**dict) if self.__class__ is writepbslotsrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(writepbslotsrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(writepbslotsrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x84}) self.__field_cmd.writetobuffer(buf) self.__field_present.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x84}) self.__field_cmd.readfrombuffer(buf) self.__field_present=DATA() self.__field_present.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x84}) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'constant': 0x84}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_present(self): return self.__field_present.getvalue() def __setfield_present(self, value): if isinstance(value,DATA): self.__field_present=value else: self.__field_present=DATA(value,) def __delfield_present(self): del self.__field_present present=property(__getfield_present, __setfield_present, __delfield_present, "a non-zero value indicates a slot is present") def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('present', self.__field_present, "a non-zero value indicates a slot is present") class writepbslotsresponse(BaseProtogenClass): __fields=['cmd'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(writepbslotsresponse,self).__init__(**dict) if self.__class__ is writepbslotsresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(writepbslotsresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(writepbslotsresponse,kwargs) if len(args): dict2={'sizeinbytes': 1, 'constant': 0x84} dict2.update(kwargs) kwargs=dict2 self.__field_cmd=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_cmd.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x84}) self.__field_cmd.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'constant': 0x84}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) class readpbentryrequest(BaseProtogenClass): __fields=['cmd', 'slotnumber'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(readpbentryrequest,self).__init__(**dict) if self.__class__ is readpbentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(readpbentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(readpbentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x83}) self.__field_cmd.writetobuffer(buf) self.__field_slotnumber.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x83}) self.__field_cmd.readfrombuffer(buf) self.__field_slotnumber=UINT(**{'sizeinbytes': 2}) self.__field_slotnumber.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x83}) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'constant': 0x83}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_slotnumber(self): return self.__field_slotnumber.getvalue() def __setfield_slotnumber(self, value): if isinstance(value,UINT): self.__field_slotnumber=value else: self.__field_slotnumber=UINT(value,**{'sizeinbytes': 2}) def __delfield_slotnumber(self): del self.__field_slotnumber slotnumber=property(__getfield_slotnumber, __setfield_slotnumber, __delfield_slotnumber, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('slotnumber', self.__field_slotnumber, None) class readpbentryresponse(BaseProtogenClass): __fields=['cmd', 'slotnumber', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(readpbentryresponse,self).__init__(**dict) if self.__class__ is readpbentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(readpbentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(readpbentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x83}) self.__field_cmd.writetobuffer(buf) self.__field_slotnumber.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x83}) self.__field_cmd.readfrombuffer(buf) self.__field_slotnumber=UINT(**{'sizeinbytes': 2}) self.__field_slotnumber.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x83}) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'constant': 0x83}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_slotnumber(self): return self.__field_slotnumber.getvalue() def __setfield_slotnumber(self, value): if isinstance(value,UINT): self.__field_slotnumber=value else: self.__field_slotnumber=UINT(value,**{'sizeinbytes': 2}) def __delfield_slotnumber(self): del self.__field_slotnumber slotnumber=property(__getfield_slotnumber, __setfield_slotnumber, __delfield_slotnumber, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('slotnumber', self.__field_slotnumber, None) yield ('entry', self.__field_entry, None) class writepbentryrequest(BaseProtogenClass): __fields=['cmd', 'slotnumber', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(writepbentryrequest,self).__init__(**dict) if self.__class__ is writepbentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(writepbentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(writepbentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x82}) self.__field_cmd.writetobuffer(buf) self.__field_slotnumber.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x82}) self.__field_cmd.readfrombuffer(buf) self.__field_slotnumber=UINT(**{'sizeinbytes': 2}) self.__field_slotnumber.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x82}) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'constant': 0x82}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_slotnumber(self): return self.__field_slotnumber.getvalue() def __setfield_slotnumber(self, value): if isinstance(value,UINT): self.__field_slotnumber=value else: self.__field_slotnumber=UINT(value,**{'sizeinbytes': 2}) def __delfield_slotnumber(self): del self.__field_slotnumber slotnumber=property(__getfield_slotnumber, __setfield_slotnumber, __delfield_slotnumber, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('slotnumber', self.__field_slotnumber, None) yield ('entry', self.__field_entry, None) class writepbentryresponse(BaseProtogenClass): __fields=['cmd', 'slotnumber'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(writepbentryresponse,self).__init__(**dict) if self.__class__ is writepbentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(writepbentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(writepbentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_cmd.writetobuffer(buf) self.__field_slotnumber.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x82}) self.__field_cmd.readfrombuffer(buf) self.__field_slotnumber=UINT(**{'sizeinbytes': 2}) self.__field_slotnumber.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'constant': 0x82}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_slotnumber(self): return self.__field_slotnumber.getvalue() def __setfield_slotnumber(self, value): if isinstance(value,UINT): self.__field_slotnumber=value else: self.__field_slotnumber=UINT(value,**{'sizeinbytes': 2}) def __delfield_slotnumber(self): del self.__field_slotnumber slotnumber=property(__getfield_slotnumber, __setfield_slotnumber, __delfield_slotnumber, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('slotnumber', self.__field_slotnumber, None) class pbentry(BaseProtogenClass): __fields=['secret', 'group', 'previous', 'next', 'mobile', 'home', 'office', 'pager', 'fax', 'name', 'email', 'wireless', 'memo', 'ringtone', 'msgringtone', 'wallpaper'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_secret.writetobuffer(buf) self.__field_group.writetobuffer(buf) self.__field_previous.writetobuffer(buf) self.__field_next.writetobuffer(buf) self.__field_mobile.writetobuffer(buf) self.__field_home.writetobuffer(buf) self.__field_office.writetobuffer(buf) self.__field_pager.writetobuffer(buf) self.__field_fax.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_email.writetobuffer(buf) self.__field_wireless.writetobuffer(buf) self.__field_memo.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_msgringtone.writetobuffer(buf) self.__field_wallpaper.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_secret=UINT(**{'sizeinbytes': 1}) self.__field_secret.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 1}) self.__field_group.readfrombuffer(buf) self.__field_previous=UINT(**{'sizeinbytes': 2}) self.__field_previous.readfrombuffer(buf) self.__field_next=UINT(**{'sizeinbytes': 2}) self.__field_next.readfrombuffer(buf) self.__field_mobile=COUNTEDBUFFEREDSTRING(**{'sizeinbytes': 33}) self.__field_mobile.readfrombuffer(buf) self.__field_home=COUNTEDBUFFEREDSTRING(**{'sizeinbytes': 33}) self.__field_home.readfrombuffer(buf) self.__field_office=COUNTEDBUFFEREDSTRING(**{'sizeinbytes': 33}) self.__field_office.readfrombuffer(buf) self.__field_pager=COUNTEDBUFFEREDSTRING(**{'sizeinbytes': 33}) self.__field_pager.readfrombuffer(buf) self.__field_fax=COUNTEDBUFFEREDSTRING(**{'sizeinbytes': 33}) self.__field_fax.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 17}) self.__field_name.readfrombuffer(buf) self.__field_email=USTRING(**{'sizeinbytes': 49}) self.__field_email.readfrombuffer(buf) self.__field_wireless=USTRING(**{'sizeinbytes': 49}) self.__field_wireless.readfrombuffer(buf) self.__field_memo=USTRING(**{'sizeinbytes': 49}) self.__field_memo.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 2}) self.__field_ringtone.readfrombuffer(buf) self.__field_msgringtone=UINT(**{'sizeinbytes': 2}) self.__field_msgringtone.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 2}) self.__field_wallpaper.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_secret(self): return self.__field_secret.getvalue() def __setfield_secret(self, value): if isinstance(value,UINT): self.__field_secret=value else: self.__field_secret=UINT(value,**{'sizeinbytes': 1}) def __delfield_secret(self): del self.__field_secret secret=property(__getfield_secret, __setfield_secret, __delfield_secret, "non-zero if entry is secret/locked") def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 1}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_previous(self): return self.__field_previous.getvalue() def __setfield_previous(self, value): if isinstance(value,UINT): self.__field_previous=value else: self.__field_previous=UINT(value,**{'sizeinbytes': 2}) def __delfield_previous(self): del self.__field_previous previous=property(__getfield_previous, __setfield_previous, __delfield_previous, "?index number for previous entry") def __getfield_next(self): return self.__field_next.getvalue() def __setfield_next(self, value): if isinstance(value,UINT): self.__field_next=value else: self.__field_next=UINT(value,**{'sizeinbytes': 2}) def __delfield_next(self): del self.__field_next next=property(__getfield_next, __setfield_next, __delfield_next, "?index number for next entry") def __getfield_mobile(self): return self.__field_mobile.getvalue() def __setfield_mobile(self, value): if isinstance(value,COUNTEDBUFFEREDSTRING): self.__field_mobile=value else: self.__field_mobile=COUNTEDBUFFEREDSTRING(value,**{'sizeinbytes': 33}) def __delfield_mobile(self): del self.__field_mobile mobile=property(__getfield_mobile, __setfield_mobile, __delfield_mobile, None) def __getfield_home(self): return self.__field_home.getvalue() def __setfield_home(self, value): if isinstance(value,COUNTEDBUFFEREDSTRING): self.__field_home=value else: self.__field_home=COUNTEDBUFFEREDSTRING(value,**{'sizeinbytes': 33}) def __delfield_home(self): del self.__field_home home=property(__getfield_home, __setfield_home, __delfield_home, None) def __getfield_office(self): return self.__field_office.getvalue() def __setfield_office(self, value): if isinstance(value,COUNTEDBUFFEREDSTRING): self.__field_office=value else: self.__field_office=COUNTEDBUFFEREDSTRING(value,**{'sizeinbytes': 33}) def __delfield_office(self): del self.__field_office office=property(__getfield_office, __setfield_office, __delfield_office, None) def __getfield_pager(self): return self.__field_pager.getvalue() def __setfield_pager(self, value): if isinstance(value,COUNTEDBUFFEREDSTRING): self.__field_pager=value else: self.__field_pager=COUNTEDBUFFEREDSTRING(value,**{'sizeinbytes': 33}) def __delfield_pager(self): del self.__field_pager pager=property(__getfield_pager, __setfield_pager, __delfield_pager, None) def __getfield_fax(self): return self.__field_fax.getvalue() def __setfield_fax(self, value): if isinstance(value,COUNTEDBUFFEREDSTRING): self.__field_fax=value else: self.__field_fax=COUNTEDBUFFEREDSTRING(value,**{'sizeinbytes': 33}) def __delfield_fax(self): del self.__field_fax fax=property(__getfield_fax, __setfield_fax, __delfield_fax, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 17}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 49}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def __getfield_wireless(self): return self.__field_wireless.getvalue() def __setfield_wireless(self, value): if isinstance(value,USTRING): self.__field_wireless=value else: self.__field_wireless=USTRING(value,**{'sizeinbytes': 49}) def __delfield_wireless(self): del self.__field_wireless wireless=property(__getfield_wireless, __setfield_wireless, __delfield_wireless, None) def __getfield_memo(self): return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,USTRING): self.__field_memo=value else: self.__field_memo=USTRING(value,**{'sizeinbytes': 49}) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 2}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_msgringtone(self): return self.__field_msgringtone.getvalue() def __setfield_msgringtone(self, value): if isinstance(value,UINT): self.__field_msgringtone=value else: self.__field_msgringtone=UINT(value,**{'sizeinbytes': 2}) def __delfield_msgringtone(self): del self.__field_msgringtone msgringtone=property(__getfield_msgringtone, __setfield_msgringtone, __delfield_msgringtone, None) def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 2}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def iscontainer(self): return True def containerelements(self): yield ('secret', self.__field_secret, "non-zero if entry is secret/locked") yield ('group', self.__field_group, None) yield ('previous', self.__field_previous, "?index number for previous entry") yield ('next', self.__field_next, "?index number for next entry") yield ('mobile', self.__field_mobile, None) yield ('home', self.__field_home, None) yield ('office', self.__field_office, None) yield ('pager', self.__field_pager, None) yield ('fax', self.__field_fax, None) yield ('name', self.__field_name, None) yield ('email', self.__field_email, None) yield ('wireless', self.__field_wireless, None) yield ('memo', self.__field_memo, None) yield ('ringtone', self.__field_ringtone, None) yield ('msgringtone', self.__field_msgringtone, None) yield ('wallpaper', self.__field_wallpaper, None) class readgroupentryrequest(BaseProtogenClass): __fields=['cmd', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(readgroupentryrequest,self).__init__(**dict) if self.__class__ is readgroupentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(readgroupentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(readgroupentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x81}) self.__field_cmd.writetobuffer(buf) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x81}) self.__field_cmd.readfrombuffer(buf) self.__field_number=UINT(**{'sizeinbytes': 1}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x81}) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'constant': 0x81}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,UINT): self.__field_number=value else: self.__field_number=UINT(value,**{'sizeinbytes': 1}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('number', self.__field_number, None) class readgroupentryresponse(BaseProtogenClass): __fields=['cmd', 'number', 'anothergroupnum', 'dunno', 'name', 'nummembers'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(readgroupentryresponse,self).__init__(**dict) if self.__class__ is readgroupentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(readgroupentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(readgroupentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_cmd.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_anothergroupnum.writetobuffer(buf) self.__field_dunno.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_nummembers.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x81}) self.__field_cmd.readfrombuffer(buf) self.__field_number=UINT(**{'sizeinbytes': 1}) self.__field_number.readfrombuffer(buf) self.__field_anothergroupnum=UINT(**{'sizeinbytes': 1}) self.__field_anothergroupnum.readfrombuffer(buf) self.__field_dunno=UINT(**{'sizeinbytes': 2}) self.__field_dunno.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 17}) self.__field_name.readfrombuffer(buf) self.__field_nummembers=UINT(**{'sizeinbytes': 2}) self.__field_nummembers.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'constant': 0x81}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,UINT): self.__field_number=value else: self.__field_number=UINT(value,**{'sizeinbytes': 1}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_anothergroupnum(self): return self.__field_anothergroupnum.getvalue() def __setfield_anothergroupnum(self, value): if isinstance(value,UINT): self.__field_anothergroupnum=value else: self.__field_anothergroupnum=UINT(value,**{'sizeinbytes': 1}) def __delfield_anothergroupnum(self): del self.__field_anothergroupnum anothergroupnum=property(__getfield_anothergroupnum, __setfield_anothergroupnum, __delfield_anothergroupnum, None) def __getfield_dunno(self): return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 2}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, "first member?") def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 17}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_nummembers(self): return self.__field_nummembers.getvalue() def __setfield_nummembers(self, value): if isinstance(value,UINT): self.__field_nummembers=value else: self.__field_nummembers=UINT(value,**{'sizeinbytes': 2}) def __delfield_nummembers(self): del self.__field_nummembers nummembers=property(__getfield_nummembers, __setfield_nummembers, __delfield_nummembers, "how many members of the group") def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('number', self.__field_number, None) yield ('anothergroupnum', self.__field_anothergroupnum, None) yield ('dunno', self.__field_dunno, "first member?") yield ('name', self.__field_name, None) yield ('nummembers', self.__field_nummembers, "how many members of the group") class writegroupentryrequest(BaseProtogenClass): __fields=['cmd', 'number', 'anothernumber', 'dunno', 'name', 'nummembers'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(writegroupentryrequest,self).__init__(**dict) if self.__class__ is writegroupentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(writegroupentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(writegroupentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x80}) self.__field_cmd.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_anothernumber.writetobuffer(buf) try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 2, 'constant': 0xffff}) self.__field_dunno.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_nummembers.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x80}) self.__field_cmd.readfrombuffer(buf) self.__field_number=UINT(**{'sizeinbytes': 1}) self.__field_number.readfrombuffer(buf) self.__field_anothernumber=UINT(**{'sizeinbytes': 1}) self.__field_anothernumber.readfrombuffer(buf) self.__field_dunno=UINT(**{'sizeinbytes': 2, 'constant': 0xffff}) self.__field_dunno.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 17}) self.__field_name.readfrombuffer(buf) self.__field_nummembers=UINT(**{'sizeinbytes': 2}) self.__field_nummembers.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x80}) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'constant': 0x80}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,UINT): self.__field_number=value else: self.__field_number=UINT(value,**{'sizeinbytes': 1}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_anothernumber(self): return self.__field_anothernumber.getvalue() def __setfield_anothernumber(self, value): if isinstance(value,UINT): self.__field_anothernumber=value else: self.__field_anothernumber=UINT(value,**{'sizeinbytes': 1}) def __delfield_anothernumber(self): del self.__field_anothernumber anothernumber=property(__getfield_anothernumber, __setfield_anothernumber, __delfield_anothernumber, "same as number") def __getfield_dunno(self): try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 2, 'constant': 0xffff}) return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 2, 'constant': 0xffff}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, "?first member of the group") def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 17}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_nummembers(self): return self.__field_nummembers.getvalue() def __setfield_nummembers(self, value): if isinstance(value,UINT): self.__field_nummembers=value else: self.__field_nummembers=UINT(value,**{'sizeinbytes': 2}) def __delfield_nummembers(self): del self.__field_nummembers nummembers=property(__getfield_nummembers, __setfield_nummembers, __delfield_nummembers, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('number', self.__field_number, None) yield ('anothernumber', self.__field_anothernumber, "same as number") yield ('dunno', self.__field_dunno, "?first member of the group") yield ('name', self.__field_name, None) yield ('nummembers', self.__field_nummembers, None) class writegroupentryresponse(BaseProtogenClass): __fields=['cmd'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(writegroupentryresponse,self).__init__(**dict) if self.__class__ is writegroupentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(writegroupentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(writegroupentryresponse,kwargs) if len(args): dict2={'sizeinbytes': 1, 'constant': 0x80} dict2.update(kwargs) kwargs=dict2 self.__field_cmd=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_cmd.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x80}) self.__field_cmd.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'constant': 0x80}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) class dunnorequest(BaseProtogenClass): __fields=['cmd', 'cmd2', 'cmd3', 'which'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(dunnorequest,self).__init__(**dict) if self.__class__ is dunnorequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(dunnorequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(dunnorequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x26}) self.__field_cmd.writetobuffer(buf) try: self.__field_cmd2 except: self.__field_cmd2=UINT(**{'sizeinbytes': 1, 'constant': 0xf7}) self.__field_cmd2.writetobuffer(buf) try: self.__field_cmd3 except: self.__field_cmd3=UINT(**{'sizeinbytes': 1, 'constant': 0x03}) self.__field_cmd3.writetobuffer(buf) self.__field_which.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x26}) self.__field_cmd.readfrombuffer(buf) self.__field_cmd2=UINT(**{'sizeinbytes': 1, 'constant': 0xf7}) self.__field_cmd2.readfrombuffer(buf) self.__field_cmd3=UINT(**{'sizeinbytes': 1, 'constant': 0x03}) self.__field_cmd3.readfrombuffer(buf) self.__field_which=UINT(**{'sizeinbytes': 1}) self.__field_which.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x26}) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'constant': 0x26}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_cmd2(self): try: self.__field_cmd2 except: self.__field_cmd2=UINT(**{'sizeinbytes': 1, 'constant': 0xf7}) return self.__field_cmd2.getvalue() def __setfield_cmd2(self, value): if isinstance(value,UINT): self.__field_cmd2=value else: self.__field_cmd2=UINT(value,**{'sizeinbytes': 1, 'constant': 0xf7}) def __delfield_cmd2(self): del self.__field_cmd2 cmd2=property(__getfield_cmd2, __setfield_cmd2, __delfield_cmd2, None) def __getfield_cmd3(self): try: self.__field_cmd3 except: self.__field_cmd3=UINT(**{'sizeinbytes': 1, 'constant': 0x03}) return self.__field_cmd3.getvalue() def __setfield_cmd3(self, value): if isinstance(value,UINT): self.__field_cmd3=value else: self.__field_cmd3=UINT(value,**{'sizeinbytes': 1, 'constant': 0x03}) def __delfield_cmd3(self): del self.__field_cmd3 cmd3=property(__getfield_cmd3, __setfield_cmd3, __delfield_cmd3, None) def __getfield_which(self): return self.__field_which.getvalue() def __setfield_which(self, value): if isinstance(value,UINT): self.__field_which=value else: self.__field_which=UINT(value,**{'sizeinbytes': 1}) def __delfield_which(self): del self.__field_which which=property(__getfield_which, __setfield_which, __delfield_which, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('cmd2', self.__field_cmd2, None) yield ('cmd3', self.__field_cmd3, None) yield ('which', self.__field_which, None) class dunnoresponse(BaseProtogenClass): __fields=['stuff'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(dunnoresponse,self).__init__(**dict) if self.__class__ is dunnoresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(dunnoresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(dunnoresponse,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_stuff=DATA(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_stuff.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_stuff=DATA() self.__field_stuff.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_stuff(self): return self.__field_stuff.getvalue() def __setfield_stuff(self, value): if isinstance(value,DATA): self.__field_stuff=value else: self.__field_stuff=DATA(value,) def __delfield_stuff(self): del self.__field_stuff stuff=property(__getfield_stuff, __setfield_stuff, __delfield_stuff, None) def iscontainer(self): return True def containerelements(self): yield ('stuff', self.__field_stuff, None) class readlockcoderequest(BaseProtogenClass): __fields=['cmd', 'cmd2', 'cmd3', 'padding'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(readlockcoderequest,self).__init__(**dict) if self.__class__ is readlockcoderequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(readlockcoderequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(readlockcoderequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x26}) self.__field_cmd.writetobuffer(buf) try: self.__field_cmd2 except: self.__field_cmd2=UINT(**{'sizeinbytes': 1, 'constant': 0x52}) self.__field_cmd2.writetobuffer(buf) try: self.__field_cmd3 except: self.__field_cmd3=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_cmd3.writetobuffer(buf) try: self.__field_padding except: self.__field_padding=DATA(**{'sizeinbytes': 130}) self.__field_padding.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x26}) self.__field_cmd.readfrombuffer(buf) self.__field_cmd2=UINT(**{'sizeinbytes': 1, 'constant': 0x52}) self.__field_cmd2.readfrombuffer(buf) self.__field_cmd3=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_cmd3.readfrombuffer(buf) self.__field_padding=DATA(**{'sizeinbytes': 130}) self.__field_padding.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x26}) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'constant': 0x26}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_cmd2(self): try: self.__field_cmd2 except: self.__field_cmd2=UINT(**{'sizeinbytes': 1, 'constant': 0x52}) return self.__field_cmd2.getvalue() def __setfield_cmd2(self, value): if isinstance(value,UINT): self.__field_cmd2=value else: self.__field_cmd2=UINT(value,**{'sizeinbytes': 1, 'constant': 0x52}) def __delfield_cmd2(self): del self.__field_cmd2 cmd2=property(__getfield_cmd2, __setfield_cmd2, __delfield_cmd2, None) def __getfield_cmd3(self): try: self.__field_cmd3 except: self.__field_cmd3=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) return self.__field_cmd3.getvalue() def __setfield_cmd3(self, value): if isinstance(value,UINT): self.__field_cmd3=value else: self.__field_cmd3=UINT(value,**{'sizeinbytes': 1, 'constant': 0x00}) def __delfield_cmd3(self): del self.__field_cmd3 cmd3=property(__getfield_cmd3, __setfield_cmd3, __delfield_cmd3, None) def __getfield_padding(self): try: self.__field_padding except: self.__field_padding=DATA(**{'sizeinbytes': 130}) return self.__field_padding.getvalue() def __setfield_padding(self, value): if isinstance(value,DATA): self.__field_padding=value else: self.__field_padding=DATA(value,**{'sizeinbytes': 130}) def __delfield_padding(self): del self.__field_padding padding=property(__getfield_padding, __setfield_padding, __delfield_padding, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('cmd2', self.__field_cmd2, None) yield ('cmd3', self.__field_cmd3, None) yield ('padding', self.__field_padding, None) class readlockcoderesponse(BaseProtogenClass): __fields=['cmd', 'cmd2', 'cmd3', 'lockcode'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(readlockcoderesponse,self).__init__(**dict) if self.__class__ is readlockcoderesponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(readlockcoderesponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(readlockcoderesponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_cmd.writetobuffer(buf) self.__field_cmd2.writetobuffer(buf) self.__field_cmd3.writetobuffer(buf) self.__field_lockcode.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x26}) self.__field_cmd.readfrombuffer(buf) self.__field_cmd2=UINT(**{'sizeinbytes': 1, 'constant': 0x52}) self.__field_cmd2.readfrombuffer(buf) self.__field_cmd3=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_cmd3.readfrombuffer(buf) self.__field_lockcode=USTRING() self.__field_lockcode.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'constant': 0x26}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_cmd2(self): return self.__field_cmd2.getvalue() def __setfield_cmd2(self, value): if isinstance(value,UINT): self.__field_cmd2=value else: self.__field_cmd2=UINT(value,**{'sizeinbytes': 1, 'constant': 0x52}) def __delfield_cmd2(self): del self.__field_cmd2 cmd2=property(__getfield_cmd2, __setfield_cmd2, __delfield_cmd2, None) def __getfield_cmd3(self): return self.__field_cmd3.getvalue() def __setfield_cmd3(self, value): if isinstance(value,UINT): self.__field_cmd3=value else: self.__field_cmd3=UINT(value,**{'sizeinbytes': 1, 'constant': 0x00}) def __delfield_cmd3(self): del self.__field_cmd3 cmd3=property(__getfield_cmd3, __setfield_cmd3, __delfield_cmd3, None) def __getfield_lockcode(self): return self.__field_lockcode.getvalue() def __setfield_lockcode(self, value): if isinstance(value,USTRING): self.__field_lockcode=value else: self.__field_lockcode=USTRING(value,) def __delfield_lockcode(self): del self.__field_lockcode lockcode=property(__getfield_lockcode, __setfield_lockcode, __delfield_lockcode, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('cmd2', self.__field_cmd2, None) yield ('cmd3', self.__field_cmd3, None) yield ('lockcode', self.__field_lockcode, None) bitpim-1.0.7+dfsg1/src/phones/p_audiovoxcdm8900.p0000644001616600161660000000671010442561507017605 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_audiovoxcdm8900.p 3352 2006-06-10 15:20:39Z skyjunky $ %{ """Various descriptions of data specific to Audiovox CDM8900""" from prototypes import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMSLOTS=300 _NUMGROUPS=7 _ALLGROUP=0 _MAXGROUPLEN=16 _MAXPHONENUMBERLEN=32 _MAXNAMELEN=16 _MAXEMAILLEN=48 _MAXMEMOLEN=48 %} # Audiovox commands # 0x80 write group # 0x81 read group # 0x82 write phonebookentry # 0x83 read phonebookentry # 0x84 write slots # 0x85 read slots PACKET readpbslotsrequest: "Get a list of which slots are used" 1 UINT {'constant': 0x85} +cmd PACKET readpbslotsresponse: 1 UINT {'constant': 0x85} cmd # each byte is a bitmask of which fields are set although we defer to the actual entries to find that out * DATA present "a non-zero value indicates a slot is present" PACKET writepbslotsrequest: 1 UINT {'constant': 0x84} +cmd * DATA present "a non-zero value indicates a slot is present" PACKET writepbslotsresponse: 1 UINT {'constant': 0x84} cmd PACKET readpbentryrequest: 1 UINT {'constant': 0x83} +cmd 2 UINT slotnumber PACKET readpbentryresponse: 1 UINT {'constant': 0x83} +cmd 2 UINT slotnumber * pbentry entry PACKET writepbentryrequest: 1 UINT {'constant': 0x82} +cmd 2 UINT slotnumber * pbentry entry PACKET writepbentryresponse: 1 UINT {'constant': 0x82} cmd 2 UINT slotnumber PACKET pbentry: 1 UINT secret "non-zero if entry is secret/locked" 1 UINT group 2 UINT previous "?index number for previous entry" 2 UINT next "?index number for next entry" # these use a fixed size buffer with counter byte saying how much to use 33 COUNTEDBUFFEREDSTRING mobile 33 COUNTEDBUFFEREDSTRING home 33 COUNTEDBUFFEREDSTRING office 33 COUNTEDBUFFEREDSTRING pager 33 COUNTEDBUFFEREDSTRING fax # these have space for the field and a null terminator 17 USTRING name 49 USTRING email 49 USTRING wireless 49 USTRING memo 2 UINT ringtone 2 UINT msgringtone 2 UINT wallpaper PACKET readgroupentryrequest: 1 UINT {'constant': 0x81} +cmd 1 UINT number PACKET readgroupentryresponse: 1 UINT {'constant': 0x81} cmd 1 UINT number 1 UINT anothergroupnum 2 UINT dunno "first member?" 17 USTRING name # always terminated 2 UINT nummembers "how many members of the group" PACKET writegroupentryrequest: 1 UINT {'constant': 0x80} +cmd 1 UINT number 1 UINT anothernumber "same as number" 2 UINT {'constant': 0xffff} +dunno "?first member of the group" 17 USTRING name 2 UINT nummembers PACKET writegroupentryresponse: 1 UINT {'constant': 0x80} cmd PACKET dunnorequest: 1 UINT {'constant': 0x26} +cmd 1 UINT {'constant': 0xf7} +cmd2 1 UINT {'constant': 0x03} +cmd3 1 UINT which PACKET dunnoresponse: * DATA stuff # also available but not used by BitPim PACKET readlockcoderequest: 1 UINT {'constant': 0x26} +cmd 1 UINT {'constant': 0x52} +cmd2 1 UINT {'constant': 0x00} +cmd3 130 DATA +padding # this may not be necessary PACKET readlockcoderesponse: 1 UINT {'constant': 0x26} cmd 1 UINT {'constant': 0x52} cmd2 1 UINT {'constant': 0x00} cmd3 * USTRING lockcode bitpim-1.0.7+dfsg1/src/phones/com_samsungspha790.py0000644001616600161660000002257710661407437020260 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_samsungspha790.py 4365 2007-08-17 21:11:59Z djpham $ """Communicate with a Samsung SPH-A790""" # System modules import sha # BitPim modules import common import com_samsung_packet import p_samsungspha790 parentphone=com_samsung_packet.Phone class Phone(parentphone): desc='SPH-A790' protocolclass=p_samsungspha790 serialsname='spha790' builtin_ringtones=( (0, ['Default Tone']), (68, ['Tone %d'%x for x in range(1, 10)]), (95, ['Ring %d'%x for x in range(1, 16)]), (110, ['Melody %d'%x for x in range(1, 21)]), ) builtin_pictures=( (1, ['People %d'%x for x in range(1, 22)]), (23, ['Animal %d'%x for x in range(1, 16)]), (38, ['Other %d'%x for x in range(1, 10)]), ) camera_picture_index=100 # starting index of camera picture def getfundamentals(self, results): """Gets information fundamental to interopating with the phone and UI. Currently this is: - 'uniqueserial' a unique serial number representing the phone - 'groups' the phonebook groups - 'wallpaper-index' map index numbers to names - 'ringtone-index' map index numbers to ringtone names This method is called before we read the phonebook data or before we write phonebook data. """ self.setmode(self.MODEPHONEBOOK) # use a hash of ESN and other stuff (being paranoid) self.log("Retrieving fundamental phone information") self.log("Reading phone serial number") results['uniqueserial']=sha.new(self.get_esn()).hexdigest() # now read groups self.log("Reading group information") results['groups']=self.read_groups() # getting rintone-index results['ringtone-index']=self._get_builtin_index(self.builtin_ringtones) # getting wallpaper-index results['wallpaper-index']=self.get_wallpaper_index() self.setmode(self.MODEMODEM) self.log("Fundamentals retrieved") return results def _get_builtin_index(self, builtin_list): _res={} for _starting_idx,_list in builtin_list: _idx=_starting_idx for _entry in _list: _res[_idx]={ 'name': _entry, 'origin': 'builtin' } _idx+=1 return _res def read_groups(self): g={} # Don't crash if phone doesn't accept #PMODE=1 (Canadian phones) try: self.setmode(self.MODEPHONEBOOK) except: return g req=self.protocolclass.groupnamerequest() for i in range(self.protocolclass.NUMGROUPS): req.gid=i # Don't crash if phone doesn't support groups try: res=self.sendpbcommand(req, self.protocolclass.groupnameresponse) if res[0].entry.groupname and \ res[0].entry.groupname!='Empty': g[i]={'name': res[0].entry.groupname} except Exception,e: return g return g # phonebook stuff---------------------------------------------------------- def _extract_misc(self, res, entry, fundamentals): _name={ 'full': entry.name } if entry.nick: _name['nickname']=entry.nick res['names']=[_name] _grp=fundamentals.get('groups', {}).get(entry.group, None) if _grp.get('name', None): res['categories']=[{ 'category': _grp['name'] }] if entry.email: res['emails']=[{ 'email': entry.email }] if entry.url: res['urls']=[{ 'url': entry.url }] if entry.memo: res['memos']=[{ 'memo': entry.memo }] def _extract_wallpaper(self, res, entry, fundamentals): _wp_index=fundamentals.get('wallpaper-index', {}) _wp_name=_wp_index.get(entry.wallpaper, {}).get('name', None) if _wp_name: res['wallpapers']=[{ 'wallpaper': _wp_name, 'use': 'call' }] def _extract_ringtone(self, res, entry, fundamentals): _rt_index=fundamentals.get('ringtone-index', {}) _rt_name=_rt_index.get(entry.ringtone, {}).get('name', None) if _rt_name: res['ringtones']=[{ 'ringtone': _rt_name, 'use': 'call' }] number_type_dict={ 0: 'cell', 1: 'home', 2: 'office', 3: 'pager', 4: 'fax' } def _extract_number(self, res, entry, idx, fundamentals): _item=entry.numbers[idx] if not _item.number: return None _res={ 'number': _item.number, 'type': self.number_type_dict.get(idx, 'none') } # TODO: speed dial return _res def _extract_numbers(self, res, entry, fundamentals): _primary=entry.primary-1 _numbers=[self._extract_number(res, entry, _primary, fundamentals)] for i in range(self.protocolclass.NUMPHONENUMBERS): if i==_primary: continue _number=self._extract_number(res, entry, i, fundamentals) if _number: _numbers.append(_number) res['numbers']=_numbers def extractphonebookentry(self, entry, fundamentals): res={} res['serials']=[ { 'sourcetype': self.serialsname, 'sourceuniqueid': fundamentals['uniqueserial'], 'slot': entry.slot, 'uslsot': entry.uslot }] _args=(res, entry, fundamentals) self._extract_misc(*_args) self._extract_wallpaper(*_args) self._extract_ringtone(*_args) self._extract_numbers(*_args) return res def getphonebook(self, result): """Read the phonebook data.""" pbook={} self.setmode(self.MODEPHONEBOOK) req=self.protocolclass.phonebookslotrequest() lastname="" for slot in range(1,self.protocolclass.NUMPHONEBOOKENTRIES+1): req.slot=slot res=self.sendpbcommand(req, self.protocolclass.phonebookslotresponse, fixup=self.pblinerepair) if res: self.log(`slot`+": "+res[0].entry.name) entry=self.extractphonebookentry(res[0].entry, result) pbook[res[0].entry.uslot]=entry self.progress(slot, self.protocolclass.NUMPHONEBOOKENTRIES, lastname) result['phonebook']=pbook ## cats=[] ## for i in result['groups']: ## if result['groups'][i]['name']!='Unassigned': ## cats.append(result['groups'][i]['name']) ## result['categories']=cats print "returning keys",result.keys() return pbook # wallpaper stuff---------------------------------------------------------- def get_wallpaper_index(self): _res=self._get_builtin_index(self.builtin_pictures) self.setmode(self.MODEBREW) _files=self.listfiles(self.protocolclass.WP_CAMERA_PATH) _idx=self.camera_picture_index for _pathname in _files: _res[_idx]={ 'name': common.basename(_pathname)+'.jpg', 'origin': 'camera' } _idx+=1 self.setmode(self.MODEMODEM) return _res def getwallpapers(self, fundamentals): """Read camera pictures from the phone""" self.log('Reading Camera Pictures') self.setmode(self.MODEBREW) _files=self.listfiles(self.protocolclass.WP_CAMERA_PATH) _media={} for _pathname in _files: _filename=common.basename(_pathname)+'.jpg' try: _media[_filename]=self.getfilecontents(_pathname, True) except Exception,e: self.log('Failed to read file %s due to: %s'%(_pathname, str(e))) self.setmode(self.MODEMODEM) fundamentals['wallpapers']=_media return fundamentals getringtones=NotImplemented @classmethod def detectphone(_, coms, likely_ports, res, _module, _log): pass #------------------------------------------------------------------------------- parentprofile=com_samsung_packet.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname # for phone detection phone_manufacturer='SAMSUNG' phone_model='SPH-A790/118' WALLPAPER_WIDTH=176 WALLPAPER_HEIGHT=220 # Outside LCD: 128x96 def __init__(self): parentprofile.__init__(self) def convertphonebooktophone(self, helper, data): return data _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ## ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('wallpaper', 'read', None), # all wallpaper reading ## ('wallpaper', 'write', None), # Image conversion needs work ## ('ringtone', 'read', None), # all ringtone reading ## ('ringtone', 'write', None), ## ('calendar', 'read', None), # all calendar reading ## ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ## ('todo', 'read', None), # all todo list reading ## ('todo', 'write', 'OVERWRITE'), # all todo list writing ## ('memo', 'read', None), # all memo list reading ## ('memo', 'write', 'OVERWRITE'), # all memo list writing ) bitpim-1.0.7+dfsg1/src/phones/p_sanyo8100.p0000644001616600161660000000535610442561507016411 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_sanyo8100.p 3352 2006-06-10 15:20:39Z skyjunky $ %{ """Various descriptions of data specific to Sanyo SCP-8100""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 _NUMCALLHISTORY=20 _MAXNUMBERLEN=48 _MAXEMAILLEN=48 %} PACKET evententry: 1 UINT slot 1 UINT flag "0: Not used, 1: Scheduled, 2: Already Happened" 14 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} eventname 7 UNKNOWN +pad1 1 UINT eventname_len 4 UINT start "# seconds since Jan 1, 1980 approximately" 4 UINT end 14 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} location 7 UNKNOWN +pad2 1 UINT location_len 1 UNKNOWN +pad3 4 UINT alarmdiff "Displayed alarm time" 1 UINT period "No, Daily, Weekly, Monthly, Yearly" 1 UINT dom "Day of month for the event" 4 UINT alarm 1 UINT {'default': 0} +serial "Some kind of serial number" 3 UNKNOWN +pad4 1 UINT ringtone PACKET eventresponse: * sanyoheader header * evententry entry 432 UNKNOWN pad PACKET eventupdaterequest: * sanyoheader {'readwrite': 0x0e, 'packettype': 0x0c, 'command':0x23} +header * evententry entry 432 UNKNOWN +pad PACKET callalarmentry: 1 UINT slot 1 UINT flag "0: Not used, 1: Scheduled, 2: Already Happened" 1 UINT {'default': 0} +dunno1 "Related to Snooze?" 49 USTRING {'raiseonunterminatedread': False} phonenum 1 UINT phonenum_len 4 UINT date "# seconds since Jan 1, 1980 approximately" 1 UINT period "No, Daily, Weekly, Monthly, Yearly" 1 UINT dom "Day of month for the event" 4 UINT datedup "Copy of the date. Always the same???" 16 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} name 1 UNKNOWN +pad1 1 UINT name_len 1 UINT phonenumbertype "1: Home, 2: Work, ..." 2 UINT phonenumberslot 1 UINT {'default': 0} +serial 3 UNKNOWN +pad2 1 UINT +ringtone PACKET callalarmresponse: * sanyoheader header * callalarmentry entry 413 UNKNOWN pad PACKET callalarmupdaterequest: * sanyoheader {'readwrite': 0x0e, 'packettype': 0x0c, 'command':0x24} +header * callalarmentry entry 413 UNKNOWN +pad bitpim-1.0.7+dfsg1/src/phones/p_sanyo8200.p0000644001616600161660000000143110355654122016377 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_sanyo8200.p 2714 2006-01-01 04:19:30Z sawecw $ %{ """Various descriptions of data specific to Sanyo SCP-8200""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 # Need to check. Is max phone will hold 32/96 or 33/97 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 %} bitpim-1.0.7+dfsg1/src/phones/p_lgvx5300.py0000644001616600161660000043776210554051564016443 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VX5300""" from common import PhoneBookBusyException from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx8100 except as noted # below from p_lgvx8100 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb BREW_FILE_SYSTEM=0 PHONE_ENCODING='iso-8859-1' NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=500 MAXCALENDARDESCRIPTION=32 CALENDAR_HAS_SEPARATE_END_TIME_AND_DATE=1 NUMEMAILS=2 NUMPHONENUMBERS=5 # need to call stat to get the file time/data broken_filelist_date=True class indexentry(BaseProtogenClass): __fields=['filename', 'size', 'date', 'type'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_filename.writetobuffer(buf) self.__field_size.writetobuffer(buf) try: self.__field_date except: self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_date.writetobuffer(buf) self.__field_type.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_filename=USTRING(**{'sizeinbytes': 256, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_filename.readfrombuffer(buf) self.__field_size=UINT(**{'sizeinbytes': 4}) self.__field_size.readfrombuffer(buf) self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_date.readfrombuffer(buf) self.__field_type=UINT(**{'sizeinbytes': 4}) self.__field_type.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'sizeinbytes': 256, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, "full pathname") def __getfield_size(self): return self.__field_size.getvalue() def __setfield_size(self, value): if isinstance(value,UINT): self.__field_size=value else: self.__field_size=UINT(value,**{'sizeinbytes': 4}) def __delfield_size(self): del self.__field_size size=property(__getfield_size, __setfield_size, __delfield_size, None) def __getfield_date(self): try: self.__field_date except: self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,UINT): self.__field_date=value else: self.__field_date=UINT(value,**{'sizeinbytes': 4, 'default': 0}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, None) def __getfield_type(self): return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,UINT): self.__field_type=value else: self.__field_type=UINT(value,**{'sizeinbytes': 4}) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, None) def iscontainer(self): return True def containerelements(self): yield ('filename', self.__field_filename, "full pathname") yield ('size', self.__field_size, None) yield ('date', self.__field_date, None) yield ('type', self.__field_type, None) class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): dict2={'elementclass': indexentry, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class pbentry(BaseProtogenClass): __fields=['serial1', 'entrysize', 'serial2', 'entrynumber', 'name', 'group', 'emails', 'ringtone', 'msgringtone', 'wallpaper', 'numbertypes', 'numbers', 'unknown'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_serial1.writetobuffer(buf) try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x181, 'constantexception': PhoneBookBusyException}) self.__field_entrysize.writetobuffer(buf) self.__field_serial2.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_group.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx5300_75, 'length': NUMEMAILS}) self.__field_emails.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 2, 'default': 0xFFFF}) self.__field_ringtone.writetobuffer(buf) try: self.__field_msgringtone except: self.__field_msgringtone=UINT(**{'sizeinbytes': 2, 'default': 0xFFFF}) self.__field_msgringtone.writetobuffer(buf) try: self.__field_wallpaper except: self.__field_wallpaper=UINT(**{'sizeinbytes': 2, 'default': 0}) self.__field_wallpaper.writetobuffer(buf) try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx5300_80, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx5300_82, 'length': NUMPHONENUMBERS}) self.__field_numbers.writetobuffer(buf) try: self.__field_unknown except: self.__field_unknown=UNKNOWN() self.__field_unknown.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x181, 'constantexception': PhoneBookBusyException}) self.__field_entrysize.readfrombuffer(buf) self.__field_serial2=UINT(**{'sizeinbytes': 4}) self.__field_serial2.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 2}) self.__field_entrynumber.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 2}) self.__field_group.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx5300_75, 'length': NUMEMAILS}) self.__field_emails.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 2, 'default': 0xFFFF}) self.__field_ringtone.readfrombuffer(buf) self.__field_msgringtone=UINT(**{'sizeinbytes': 2, 'default': 0xFFFF}) self.__field_msgringtone.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 2, 'default': 0}) self.__field_wallpaper.readfrombuffer(buf) self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx5300_80, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.readfrombuffer(buf) self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx5300_82, 'length': NUMPHONENUMBERS}) self.__field_numbers.readfrombuffer(buf) self.__field_unknown=UNKNOWN() self.__field_unknown.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_entrysize(self): try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x181, 'constantexception': PhoneBookBusyException}) return self.__field_entrysize.getvalue() def __setfield_entrysize(self, value): if isinstance(value,UINT): self.__field_entrysize=value else: self.__field_entrysize=UINT(value,**{'sizeinbytes': 2, 'constant': 0x181, 'constantexception': PhoneBookBusyException}) def __delfield_entrysize(self): del self.__field_entrysize entrysize=property(__getfield_entrysize, __setfield_entrysize, __delfield_entrysize, None) def __getfield_serial2(self): return self.__field_serial2.getvalue() def __setfield_serial2(self, value): if isinstance(value,UINT): self.__field_serial2=value else: self.__field_serial2=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial2(self): del self.__field_serial2 serial2=property(__getfield_serial2, __setfield_serial2, __delfield_serial2, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 2}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 2}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx5300_75, 'length': NUMEMAILS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_lgvx5300_75, 'length': NUMEMAILS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 2, 'default': 0xFFFF}) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 2, 'default': 0xFFFF}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "ringtone index for a call") def __getfield_msgringtone(self): try: self.__field_msgringtone except: self.__field_msgringtone=UINT(**{'sizeinbytes': 2, 'default': 0xFFFF}) return self.__field_msgringtone.getvalue() def __setfield_msgringtone(self, value): if isinstance(value,UINT): self.__field_msgringtone=value else: self.__field_msgringtone=UINT(value,**{'sizeinbytes': 2, 'default': 0xFFFF}) def __delfield_msgringtone(self): del self.__field_msgringtone msgringtone=property(__getfield_msgringtone, __setfield_msgringtone, __delfield_msgringtone, "ringtone index for a text message") def __getfield_wallpaper(self): try: self.__field_wallpaper except: self.__field_wallpaper=UINT(**{'sizeinbytes': 2, 'default': 0}) return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 2, 'default': 0}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_numbertypes(self): try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx5300_80, 'length': NUMPHONENUMBERS}) return self.__field_numbertypes.getvalue() def __setfield_numbertypes(self, value): if isinstance(value,LIST): self.__field_numbertypes=value else: self.__field_numbertypes=LIST(value,**{'elementclass': _gen_p_lgvx5300_80, 'length': NUMPHONENUMBERS}) def __delfield_numbertypes(self): del self.__field_numbertypes numbertypes=property(__getfield_numbertypes, __setfield_numbertypes, __delfield_numbertypes, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx5300_82, 'length': NUMPHONENUMBERS}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'elementclass': _gen_p_lgvx5300_82, 'length': NUMPHONENUMBERS}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_unknown(self): try: self.__field_unknown except: self.__field_unknown=UNKNOWN() return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UNKNOWN): self.__field_unknown=value else: self.__field_unknown=UNKNOWN(value,) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def iscontainer(self): return True def containerelements(self): yield ('serial1', self.__field_serial1, None) yield ('entrysize', self.__field_entrysize, None) yield ('serial2', self.__field_serial2, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('name', self.__field_name, None) yield ('group', self.__field_group, None) yield ('emails', self.__field_emails, None) yield ('ringtone', self.__field_ringtone, "ringtone index for a call") yield ('msgringtone', self.__field_msgringtone, "ringtone index for a text message") yield ('wallpaper', self.__field_wallpaper, None) yield ('numbertypes', self.__field_numbertypes, None) yield ('numbers', self.__field_numbers, None) yield ('unknown', self.__field_unknown, None) class _gen_p_lgvx5300_75(BaseProtogenClass): 'Anonymous inner class' __fields=['email'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx5300_75,self).__init__(**dict) if self.__class__ is _gen_p_lgvx5300_75: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx5300_75,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx5300_75,kwargs) if len(args): dict2={'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_email=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_email.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_email=USTRING(**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_email.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def iscontainer(self): return True def containerelements(self): yield ('email', self.__field_email, None) class _gen_p_lgvx5300_80(BaseProtogenClass): 'Anonymous inner class' __fields=['numbertype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx5300_80,self).__init__(**dict) if self.__class__ is _gen_p_lgvx5300_80: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx5300_80,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx5300_80,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_numbertype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numbertype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numbertype=UINT(**{'sizeinbytes': 1}) self.__field_numbertype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numbertype(self): return self.__field_numbertype.getvalue() def __setfield_numbertype(self, value): if isinstance(value,UINT): self.__field_numbertype=value else: self.__field_numbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_numbertype(self): del self.__field_numbertype numbertype=property(__getfield_numbertype, __setfield_numbertype, __delfield_numbertype, None) def iscontainer(self): return True def containerelements(self): yield ('numbertype', self.__field_numbertype, None) class _gen_p_lgvx5300_82(BaseProtogenClass): 'Anonymous inner class' __fields=['number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx5300_82,self).__init__(**dict) if self.__class__ is _gen_p_lgvx5300_82: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx5300_82,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx5300_82,kwargs) if len(args): dict2={'sizeinbytes': 49, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_number=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) class pbreadentryresponse(BaseProtogenClass): "Results of reading one entry" __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbreadentryresponse,self).__init__(**dict) if self.__class__ is pbreadentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbreadentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbreadentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbupdateentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbupdateentryrequest,self).__init__(**dict) if self.__class__ is pbupdateentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbupdateentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbupdateentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x04, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbappendentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbappendentryrequest,self).__init__(**dict) if self.__class__ is pbappendentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbappendentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbappendentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x03, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class scheduleexception(BaseProtogenClass): __fields=['pos', 'day', 'month', 'year'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexception,self).__init__(**dict) if self.__class__ is scheduleexception: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexception,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexception,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_day.writetobuffer(buf) self.__field_month.writetobuffer(buf) self.__field_year.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_day=UINT(**{'sizeinbytes': 1}) self.__field_day.readfrombuffer(buf) self.__field_month=UINT(**{'sizeinbytes': 1}) self.__field_month.readfrombuffer(buf) self.__field_year=UINT(**{'sizeinbytes': 2}) self.__field_year.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "Refers to event id (position in schedule file) that this suppresses") def __getfield_day(self): return self.__field_day.getvalue() def __setfield_day(self, value): if isinstance(value,UINT): self.__field_day=value else: self.__field_day=UINT(value,**{'sizeinbytes': 1}) def __delfield_day(self): del self.__field_day day=property(__getfield_day, __setfield_day, __delfield_day, None) def __getfield_month(self): return self.__field_month.getvalue() def __setfield_month(self, value): if isinstance(value,UINT): self.__field_month=value else: self.__field_month=UINT(value,**{'sizeinbytes': 1}) def __delfield_month(self): del self.__field_month month=property(__getfield_month, __setfield_month, __delfield_month, None) def __getfield_year(self): return self.__field_year.getvalue() def __setfield_year(self, value): if isinstance(value,UINT): self.__field_year=value else: self.__field_year=UINT(value,**{'sizeinbytes': 2}) def __delfield_year(self): del self.__field_year year=property(__getfield_year, __setfield_year, __delfield_year, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "Refers to event id (position in schedule file) that this suppresses") yield ('day', self.__field_day, None) yield ('month', self.__field_month, None) yield ('year', self.__field_year, None) class scheduleexceptionfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexceptionfile,self).__init__(**dict) if self.__class__ is scheduleexceptionfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexceptionfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexceptionfile,kwargs) if len(args): dict2={'elementclass': scheduleexception} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': scheduleexception}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class scheduleevent(BaseProtogenClass): __fields=['pos', 'description', 'start', 'end_time', 'end_date', 'repeat', 'alarmindex_vibrate', 'ringtone', 'unknown1', 'alarmminutes', 'alarmhours', 'ringpath'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleevent,self).__init__(**dict) if self.__class__ is scheduleevent: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleevent,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleevent,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_description.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end_time.writetobuffer(buf) self.__field_end_date.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) self.__field_alarmindex_vibrate.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) try: self.__field_unknown1 except: self.__field_unknown1=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_unknown1.writetobuffer(buf) self.__field_alarmminutes.writetobuffer(buf) self.__field_alarmhours.writetobuffer(buf) try: self.__field_ringpath except: self.__field_ringpath=USTRING(**{'sizeinbytes': 256, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) self.__field_ringpath.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_description=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_description.readfrombuffer(buf) self.__field_start=LGCALDATE(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_end_time.readfrombuffer(buf) self.__field_end_date=LGCALDATE(**{'sizeinbytes': 4}) self.__field_end_date.readfrombuffer(buf) self.__field_repeat=LGCALREPEAT(**{'sizeinbytes': 4}) self.__field_repeat.readfrombuffer(buf) self.__field_alarmindex_vibrate=UINT(**{'sizeinbytes': 1}) self.__field_alarmindex_vibrate.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_unknown1.readfrombuffer(buf) self.__field_alarmminutes=UINT(**{'sizeinbytes': 1}) self.__field_alarmminutes.readfrombuffer(buf) self.__field_alarmhours=UINT(**{'sizeinbytes': 1}) self.__field_alarmhours.readfrombuffer(buf) self.__field_ringpath=USTRING(**{'sizeinbytes': 256, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) self.__field_ringpath.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "position within file, used as an event id") def __getfield_description(self): return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,USTRING): self.__field_description=value else: self.__field_description=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,LGCALDATE): self.__field_start=value else: self.__field_start=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end_time(self): return self.__field_end_time.getvalue() def __setfield_end_time(self, value): if isinstance(value,LGCALDATE): self.__field_end_time=value else: self.__field_end_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_end_time(self): del self.__field_end_time end_time=property(__getfield_end_time, __setfield_end_time, __delfield_end_time, None) def __getfield_end_date(self): return self.__field_end_date.getvalue() def __setfield_end_date(self, value): if isinstance(value,LGCALDATE): self.__field_end_date=value else: self.__field_end_date=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_end_date(self): del self.__field_end_date end_date=property(__getfield_end_date, __setfield_end_date, __delfield_end_date, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,LGCALREPEAT): self.__field_repeat=value else: self.__field_repeat=LGCALREPEAT(value,**{'sizeinbytes': 4}) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_alarmindex_vibrate(self): return self.__field_alarmindex_vibrate.getvalue() def __setfield_alarmindex_vibrate(self, value): if isinstance(value,UINT): self.__field_alarmindex_vibrate=value else: self.__field_alarmindex_vibrate=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmindex_vibrate(self): del self.__field_alarmindex_vibrate alarmindex_vibrate=property(__getfield_alarmindex_vibrate, __setfield_alarmindex_vibrate, __delfield_alarmindex_vibrate, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_unknown1(self): try: self.__field_unknown1 except: self.__field_unknown1=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_alarmminutes(self): return self.__field_alarmminutes.getvalue() def __setfield_alarmminutes(self, value): if isinstance(value,UINT): self.__field_alarmminutes=value else: self.__field_alarmminutes=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmminutes(self): del self.__field_alarmminutes alarmminutes=property(__getfield_alarmminutes, __setfield_alarmminutes, __delfield_alarmminutes, "a value of 0xFF indicates not set") def __getfield_alarmhours(self): return self.__field_alarmhours.getvalue() def __setfield_alarmhours(self, value): if isinstance(value,UINT): self.__field_alarmhours=value else: self.__field_alarmhours=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmhours(self): del self.__field_alarmhours alarmhours=property(__getfield_alarmhours, __setfield_alarmhours, __delfield_alarmhours, "a value of 0xFF indicates not set") def __getfield_ringpath(self): try: self.__field_ringpath except: self.__field_ringpath=USTRING(**{'sizeinbytes': 256, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) return self.__field_ringpath.getvalue() def __setfield_ringpath(self, value): if isinstance(value,USTRING): self.__field_ringpath=value else: self.__field_ringpath=USTRING(value,**{'sizeinbytes': 256, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '' }) def __delfield_ringpath(self): del self.__field_ringpath ringpath=property(__getfield_ringpath, __setfield_ringpath, __delfield_ringpath, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "position within file, used as an event id") yield ('description', self.__field_description, None) yield ('start', self.__field_start, None) yield ('end_time', self.__field_end_time, None) yield ('end_date', self.__field_end_date, None) yield ('repeat', self.__field_repeat, None) yield ('alarmindex_vibrate', self.__field_alarmindex_vibrate, None) yield ('ringtone', self.__field_ringtone, None) yield ('unknown1', self.__field_unknown1, None) yield ('alarmminutes', self.__field_alarmminutes, "a value of 0xFF indicates not set") yield ('alarmhours', self.__field_alarmhours, "a value of 0xFF indicates not set") yield ('ringpath', self.__field_ringpath, None) class schedulefile(BaseProtogenClass): __fields=['numactiveitems', 'events'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(schedulefile,self).__init__(**dict) if self.__class__ is schedulefile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(schedulefile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(schedulefile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{'elementclass': scheduleevent}) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('events', self.__field_events, None) class call(BaseProtogenClass): __fields=['GPStime', 'unknown2', 'duration', 'number', 'name', 'numberlength', 'pbnumbertype', 'unknown2', 'pbentrynum'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(call,self).__init__(**dict) if self.__class__ is call: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(call,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(call,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_numberlength.writetobuffer(buf) self.__field_pbnumbertype.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_pbentrynum.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 4}) self.__field_unknown2.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_numberlength=UINT(**{'sizeinbytes': 1}) self.__field_numberlength.readfrombuffer(buf) self.__field_pbnumbertype=UINT(**{'sizeinbytes': 1}) self.__field_pbnumbertype.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 5}) self.__field_unknown2.readfrombuffer(buf) self.__field_pbentrynum=UINT(**{'sizeinbytes': 2}) self.__field_pbentrynum.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numberlength(self): return self.__field_numberlength.getvalue() def __setfield_numberlength(self, value): if isinstance(value,UINT): self.__field_numberlength=value else: self.__field_numberlength=UINT(value,**{'sizeinbytes': 1}) def __delfield_numberlength(self): del self.__field_numberlength numberlength=property(__getfield_numberlength, __setfield_numberlength, __delfield_numberlength, None) def __getfield_pbnumbertype(self): return self.__field_pbnumbertype.getvalue() def __setfield_pbnumbertype(self, value): if isinstance(value,UINT): self.__field_pbnumbertype=value else: self.__field_pbnumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_pbnumbertype(self): del self.__field_pbnumbertype pbnumbertype=property(__getfield_pbnumbertype, __setfield_pbnumbertype, __delfield_pbnumbertype, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 5}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_pbentrynum(self): return self.__field_pbentrynum.getvalue() def __setfield_pbentrynum(self, value): if isinstance(value,UINT): self.__field_pbentrynum=value else: self.__field_pbentrynum=UINT(value,**{'sizeinbytes': 2}) def __delfield_pbentrynum(self): del self.__field_pbentrynum pbentrynum=property(__getfield_pbentrynum, __setfield_pbentrynum, __delfield_pbentrynum, None) def iscontainer(self): return True def containerelements(self): yield ('GPStime', self.__field_GPStime, None) yield ('unknown2', self.__field_unknown2, None) yield ('duration', self.__field_duration, None) yield ('number', self.__field_number, None) yield ('name', self.__field_name, None) yield ('numberlength', self.__field_numberlength, None) yield ('pbnumbertype', self.__field_pbnumbertype, None) yield ('unknown2', self.__field_unknown2, None) yield ('pbentrynum', self.__field_pbentrynum, None) class callhistory(BaseProtogenClass): __fields=['numcalls', 'unknown1', 'calls'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callhistory,self).__init__(**dict) if self.__class__ is callhistory: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callhistory,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callhistory,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numcalls.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numcalls=UINT(**{'sizeinbytes': 4}) self.__field_numcalls.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numcalls(self): return self.__field_numcalls.getvalue() def __setfield_numcalls(self, value): if isinstance(value,UINT): self.__field_numcalls=value else: self.__field_numcalls=UINT(value,**{'sizeinbytes': 4}) def __delfield_numcalls(self): del self.__field_numcalls numcalls=property(__getfield_numcalls, __setfield_numcalls, __delfield_numcalls, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_calls(self): try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) return self.__field_calls.getvalue() def __setfield_calls(self, value): if isinstance(value,LIST): self.__field_calls=value else: self.__field_calls=LIST(value,**{'elementclass': call}) def __delfield_calls(self): del self.__field_calls calls=property(__getfield_calls, __setfield_calls, __delfield_calls, None) def iscontainer(self): return True def containerelements(self): yield ('numcalls', self.__field_numcalls, None) yield ('unknown1', self.__field_unknown1, None) yield ('calls', self.__field_calls, None) class msg_record(BaseProtogenClass): __fields=['unknown1', 'binary', 'unknown3', 'unknown4', 'unknown6', 'length', 'msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(msg_record,self).__init__(**dict) if self.__class__ is msg_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(msg_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(msg_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_binary.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_length.writetobuffer(buf) try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx5300_204, 'length': 219}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_binary=UINT(**{'sizeinbytes': 1}) self.__field_binary.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1}) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 1}) self.__field_unknown4.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 1}) self.__field_unknown6.readfrombuffer(buf) self.__field_length=UINT(**{'sizeinbytes': 1}) self.__field_length.readfrombuffer(buf) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx5300_204, 'length': 219}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_binary(self): return self.__field_binary.getvalue() def __setfield_binary(self, value): if isinstance(value,UINT): self.__field_binary=value else: self.__field_binary=UINT(value,**{'sizeinbytes': 1}) def __delfield_binary(self): del self.__field_binary binary=property(__getfield_binary, __setfield_binary, __delfield_binary, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_length(self): return self.__field_length.getvalue() def __setfield_length(self, value): if isinstance(value,UINT): self.__field_length=value else: self.__field_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_length(self): del self.__field_length length=property(__getfield_length, __setfield_length, __delfield_length, None) def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx5300_204, 'length': 219}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx5300_204, 'length': 219}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('binary', self.__field_binary, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) yield ('unknown6', self.__field_unknown6, None) yield ('length', self.__field_length, None) yield ('msg', self.__field_msg, None) class _gen_p_lgvx5300_204(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx5300_204,self).__init__(**dict) if self.__class__ is _gen_p_lgvx5300_204: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx5300_204,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx5300_204,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class recipient_record(BaseProtogenClass): __fields=['unknown1', 'number', 'status', 'timesent', 'timereceived', 'unknown2', 'unknown3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(recipient_record,self).__init__(**dict) if self.__class__ is recipient_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(recipient_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(recipient_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_timereceived.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=DATA(**{'sizeinbytes': 34}) self.__field_unknown1.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49}) self.__field_number.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_timereceived=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timereceived.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=DATA(**{'sizeinbytes': 53}) self.__field_unknown3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,DATA): self.__field_unknown1=value else: self.__field_unknown1=DATA(value,**{'sizeinbytes': 34}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_timereceived(self): return self.__field_timereceived.getvalue() def __setfield_timereceived(self, value): if isinstance(value,LGCALDATE): self.__field_timereceived=value else: self.__field_timereceived=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timereceived(self): del self.__field_timereceived timereceived=property(__getfield_timereceived, __setfield_timereceived, __delfield_timereceived, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,DATA): self.__field_unknown3=value else: self.__field_unknown3=DATA(value,**{'sizeinbytes': 53}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('number', self.__field_number, None) yield ('status', self.__field_status, None) yield ('timesent', self.__field_timesent, None) yield ('timereceived', self.__field_timereceived, None) yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) class sms_saved(BaseProtogenClass): __fields=['outboxmsg', 'GPStime', 'outbox', 'inbox'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_saved,self).__init__(**dict) if self.__class__ is sms_saved: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_saved,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_saved,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_outboxmsg.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) if self.outboxmsg: self.__field_outbox.writetobuffer(buf) if not self.outboxmsg: self.__field_inbox.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_outboxmsg=UINT(**{'sizeinbytes': 4}) self.__field_outboxmsg.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) if self.outboxmsg: self.__field_outbox=sms_out() self.__field_outbox.readfrombuffer(buf) if not self.outboxmsg: self.__field_inbox=sms_in() self.__field_inbox.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_outboxmsg(self): return self.__field_outboxmsg.getvalue() def __setfield_outboxmsg(self, value): if isinstance(value,UINT): self.__field_outboxmsg=value else: self.__field_outboxmsg=UINT(value,**{'sizeinbytes': 4}) def __delfield_outboxmsg(self): del self.__field_outboxmsg outboxmsg=property(__getfield_outboxmsg, __setfield_outboxmsg, __delfield_outboxmsg, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_outbox(self): return self.__field_outbox.getvalue() def __setfield_outbox(self, value): if isinstance(value,sms_out): self.__field_outbox=value else: self.__field_outbox=sms_out(value,) def __delfield_outbox(self): del self.__field_outbox outbox=property(__getfield_outbox, __setfield_outbox, __delfield_outbox, None) def __getfield_inbox(self): return self.__field_inbox.getvalue() def __setfield_inbox(self, value): if isinstance(value,sms_in): self.__field_inbox=value else: self.__field_inbox=sms_in(value,) def __delfield_inbox(self): del self.__field_inbox inbox=property(__getfield_inbox, __setfield_inbox, __delfield_inbox, None) def iscontainer(self): return True def containerelements(self): yield ('outboxmsg', self.__field_outboxmsg, None) yield ('GPStime', self.__field_GPStime, None) if self.outboxmsg: yield ('outbox', self.__field_outbox, None) if not self.outboxmsg: yield ('inbox', self.__field_inbox, None) class sms_out(BaseProtogenClass): __fields=['index', 'unknown1', 'locked', 'timesent', 'unknown2', 'GPStime', 'subject', 'num_msg_elements', 'messages', 'unknown1', 'priority', 'unknown5', 'callback', 'recipients', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_out,self).__init__(**dict) if self.__class__ is sms_out: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_out,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_out,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) self.__field_messages.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_callback.writetobuffer(buf) try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) self.__field_recipients.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2}) self.__field_unknown2.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 24, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) self.__field_messages.readfrombuffer(buf) self.__field_unknown1=UNKNOWN(**{'sizeinbytes': 15}) self.__field_unknown1.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_unknown5=UNKNOWN(**{'sizeinbytes': 1}) self.__field_unknown5.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 35}) self.__field_callback.readfrombuffer(buf) self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) self.__field_recipients.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 24, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_messages(self): try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) return self.__field_messages.getvalue() def __setfield_messages(self, value): if isinstance(value,LIST): self.__field_messages=value else: self.__field_messages=LIST(value,**{'elementclass': msg_record, 'length': 7}) def __delfield_messages(self): del self.__field_messages messages=property(__getfield_messages, __setfield_messages, __delfield_messages, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UNKNOWN): self.__field_unknown1=value else: self.__field_unknown1=UNKNOWN(value,**{'sizeinbytes': 15}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UNKNOWN): self.__field_unknown5=value else: self.__field_unknown5=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 35}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_recipients(self): try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) return self.__field_recipients.getvalue() def __setfield_recipients(self, value): if isinstance(value,LIST): self.__field_recipients=value else: self.__field_recipients=LIST(value,**{'elementclass': recipient_record,'length': 9}) def __delfield_recipients(self): del self.__field_recipients recipients=property(__getfield_recipients, __setfield_recipients, __delfield_recipients, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('unknown1', self.__field_unknown1, None) yield ('locked', self.__field_locked, None) yield ('timesent', self.__field_timesent, None) yield ('unknown2', self.__field_unknown2, None) yield ('GPStime', self.__field_GPStime, None) yield ('subject', self.__field_subject, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('messages', self.__field_messages, None) yield ('unknown1', self.__field_unknown1, None) yield ('priority', self.__field_priority, None) yield ('unknown5', self.__field_unknown5, None) yield ('callback', self.__field_callback, None) yield ('recipients', self.__field_recipients, None) yield ('pad', self.__field_pad, None) class SMSINBOXMSGFRAGMENT(BaseProtogenClass): __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSINBOXMSGFRAGMENT,self).__init__(**dict) if self.__class__ is SMSINBOXMSGFRAGMENT: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSINBOXMSGFRAGMENT,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSINBOXMSGFRAGMENT,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx5300_242, 'length': 181} dict2.update(kwargs) kwargs=dict2 self.__field_msg=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx5300_242, 'length': 181}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx5300_242, 'length': 181}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx5300_242, 'length': 181}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx5300_242, 'length': 181}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class _gen_p_lgvx5300_242(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx5300_242,self).__init__(**dict) if self.__class__ is _gen_p_lgvx5300_242: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx5300_242,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx5300_242,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class sms_in(BaseProtogenClass): __fields=['unknown1', 'lg_time', 'unknown2', 'GPStime', 'timesent', 'callback_length', 'callback', 'sender_length', 'sender', 'unknown3', 'unknown4', 'read', 'locked', 'priority', 'subject', 'bin_header1', 'bin_header2', 'unknown7', 'multipartID', 'bin_header3', 'unknown8', 'num_msg_elements', 'msglengths', 'unknown9', 'msgs', 'unknown10'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_in,self).__init__(**dict) if self.__class__ is sms_in: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_in,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_in,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_lg_time.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_callback_length.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_sender_length.writetobuffer(buf) try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx5300_254, 'length': 38}) self.__field_sender.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_bin_header1.writetobuffer(buf) self.__field_bin_header2.writetobuffer(buf) self.__field_unknown7.writetobuffer(buf) self.__field_multipartID.writetobuffer(buf) self.__field_bin_header3.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx5300_269, 'length': 10}) self.__field_msglengths.writetobuffer(buf) self.__field_unknown9.writetobuffer(buf) try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.writetobuffer(buf) self.__field_unknown10.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_unknown1.readfrombuffer(buf) self.__field_lg_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_lg_time.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_timesent=SMSDATE(**{'sizeinbytes': 6}) self.__field_timesent.readfrombuffer(buf) self.__field_callback_length=UINT(**{'sizeinbytes': 1}) self.__field_callback_length.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 39}) self.__field_callback.readfrombuffer(buf) self.__field_sender_length=UINT(**{'sizeinbytes': 1}) self.__field_sender_length.readfrombuffer(buf) self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx5300_254, 'length': 38}) self.__field_sender.readfrombuffer(buf) self.__field_unknown3=DATA(**{'sizeinbytes': 12}) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=UNKNOWN(**{'sizeinbytes': 6}) self.__field_unknown4.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 1}) self.__field_read.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 24, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_bin_header1=UINT(**{'sizeinbytes': 1}) self.__field_bin_header1.readfrombuffer(buf) self.__field_bin_header2=UINT(**{'sizeinbytes': 1}) self.__field_bin_header2.readfrombuffer(buf) self.__field_unknown7=UINT(**{'sizeinbytes': 1}) self.__field_unknown7.readfrombuffer(buf) self.__field_multipartID=UINT(**{'sizeinbytes': 2}) self.__field_multipartID.readfrombuffer(buf) self.__field_bin_header3=UINT(**{'sizeinbytes': 1}) self.__field_bin_header3.readfrombuffer(buf) self.__field_unknown8=UINT(**{'sizeinbytes': 5}) self.__field_unknown8.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx5300_269, 'length': 10}) self.__field_msglengths.readfrombuffer(buf) self.__field_unknown9=UNKNOWN(**{'sizeinbytes': 10}) self.__field_unknown9.readfrombuffer(buf) self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.readfrombuffer(buf) self.__field_unknown10=UNKNOWN() self.__field_unknown10.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UNKNOWN): self.__field_unknown1=value else: self.__field_unknown1=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_lg_time(self): return self.__field_lg_time.getvalue() def __setfield_lg_time(self, value): if isinstance(value,LGCALDATE): self.__field_lg_time=value else: self.__field_lg_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_lg_time(self): del self.__field_lg_time lg_time=property(__getfield_lg_time, __setfield_lg_time, __delfield_lg_time, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,SMSDATE): self.__field_timesent=value else: self.__field_timesent=SMSDATE(value,**{'sizeinbytes': 6}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_callback_length(self): return self.__field_callback_length.getvalue() def __setfield_callback_length(self, value): if isinstance(value,UINT): self.__field_callback_length=value else: self.__field_callback_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_length(self): del self.__field_callback_length callback_length=property(__getfield_callback_length, __setfield_callback_length, __delfield_callback_length, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 39}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_sender_length(self): return self.__field_sender_length.getvalue() def __setfield_sender_length(self, value): if isinstance(value,UINT): self.__field_sender_length=value else: self.__field_sender_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_sender_length(self): del self.__field_sender_length sender_length=property(__getfield_sender_length, __setfield_sender_length, __delfield_sender_length, None) def __getfield_sender(self): try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx5300_254, 'length': 38}) return self.__field_sender.getvalue() def __setfield_sender(self, value): if isinstance(value,LIST): self.__field_sender=value else: self.__field_sender=LIST(value,**{'elementclass': _gen_p_lgvx5300_254, 'length': 38}) def __delfield_sender(self): del self.__field_sender sender=property(__getfield_sender, __setfield_sender, __delfield_sender, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,DATA): self.__field_unknown3=value else: self.__field_unknown3=DATA(value,**{'sizeinbytes': 12}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UNKNOWN): self.__field_unknown4=value else: self.__field_unknown4=UNKNOWN(value,**{'sizeinbytes': 6}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 1}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 24, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_bin_header1(self): return self.__field_bin_header1.getvalue() def __setfield_bin_header1(self, value): if isinstance(value,UINT): self.__field_bin_header1=value else: self.__field_bin_header1=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header1(self): del self.__field_bin_header1 bin_header1=property(__getfield_bin_header1, __setfield_bin_header1, __delfield_bin_header1, None) def __getfield_bin_header2(self): return self.__field_bin_header2.getvalue() def __setfield_bin_header2(self, value): if isinstance(value,UINT): self.__field_bin_header2=value else: self.__field_bin_header2=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header2(self): del self.__field_bin_header2 bin_header2=property(__getfield_bin_header2, __setfield_bin_header2, __delfield_bin_header2, None) def __getfield_unknown7(self): return self.__field_unknown7.getvalue() def __setfield_unknown7(self, value): if isinstance(value,UINT): self.__field_unknown7=value else: self.__field_unknown7=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown7(self): del self.__field_unknown7 unknown7=property(__getfield_unknown7, __setfield_unknown7, __delfield_unknown7, None) def __getfield_multipartID(self): return self.__field_multipartID.getvalue() def __setfield_multipartID(self, value): if isinstance(value,UINT): self.__field_multipartID=value else: self.__field_multipartID=UINT(value,**{'sizeinbytes': 2}) def __delfield_multipartID(self): del self.__field_multipartID multipartID=property(__getfield_multipartID, __setfield_multipartID, __delfield_multipartID, None) def __getfield_bin_header3(self): return self.__field_bin_header3.getvalue() def __setfield_bin_header3(self, value): if isinstance(value,UINT): self.__field_bin_header3=value else: self.__field_bin_header3=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header3(self): del self.__field_bin_header3 bin_header3=property(__getfield_bin_header3, __setfield_bin_header3, __delfield_bin_header3, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,UINT): self.__field_unknown8=value else: self.__field_unknown8=UINT(value,**{'sizeinbytes': 5}) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_msglengths(self): try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx5300_269, 'length': 10}) return self.__field_msglengths.getvalue() def __setfield_msglengths(self, value): if isinstance(value,LIST): self.__field_msglengths=value else: self.__field_msglengths=LIST(value,**{'elementclass': _gen_p_lgvx5300_269, 'length': 10}) def __delfield_msglengths(self): del self.__field_msglengths msglengths=property(__getfield_msglengths, __setfield_msglengths, __delfield_msglengths, None) def __getfield_unknown9(self): return self.__field_unknown9.getvalue() def __setfield_unknown9(self, value): if isinstance(value,UNKNOWN): self.__field_unknown9=value else: self.__field_unknown9=UNKNOWN(value,**{'sizeinbytes': 10}) def __delfield_unknown9(self): del self.__field_unknown9 unknown9=property(__getfield_unknown9, __setfield_unknown9, __delfield_unknown9, None) def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def __getfield_unknown10(self): return self.__field_unknown10.getvalue() def __setfield_unknown10(self, value): if isinstance(value,UNKNOWN): self.__field_unknown10=value else: self.__field_unknown10=UNKNOWN(value,) def __delfield_unknown10(self): del self.__field_unknown10 unknown10=property(__getfield_unknown10, __setfield_unknown10, __delfield_unknown10, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('lg_time', self.__field_lg_time, None) yield ('unknown2', self.__field_unknown2, None) yield ('GPStime', self.__field_GPStime, None) yield ('timesent', self.__field_timesent, None) yield ('callback_length', self.__field_callback_length, None) yield ('callback', self.__field_callback, None) yield ('sender_length', self.__field_sender_length, None) yield ('sender', self.__field_sender, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) yield ('read', self.__field_read, None) yield ('locked', self.__field_locked, None) yield ('priority', self.__field_priority, None) yield ('subject', self.__field_subject, None) yield ('bin_header1', self.__field_bin_header1, None) yield ('bin_header2', self.__field_bin_header2, None) yield ('unknown7', self.__field_unknown7, None) yield ('multipartID', self.__field_multipartID, None) yield ('bin_header3', self.__field_bin_header3, None) yield ('unknown8', self.__field_unknown8, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('msglengths', self.__field_msglengths, None) yield ('unknown9', self.__field_unknown9, None) yield ('msgs', self.__field_msgs, None) yield ('unknown10', self.__field_unknown10, None) class _gen_p_lgvx5300_254(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx5300_254,self).__init__(**dict) if self.__class__ is _gen_p_lgvx5300_254: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx5300_254,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx5300_254,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of senders phone number") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of senders phone number") class _gen_p_lgvx5300_269(BaseProtogenClass): 'Anonymous inner class' __fields=['msglength'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx5300_269,self).__init__(**dict) if self.__class__ is _gen_p_lgvx5300_269: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx5300_269,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx5300_269,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_msglength=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msglength.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msglength=UINT(**{'sizeinbytes': 1}) self.__field_msglength.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msglength(self): return self.__field_msglength.getvalue() def __setfield_msglength(self, value): if isinstance(value,UINT): self.__field_msglength=value else: self.__field_msglength=UINT(value,**{'sizeinbytes': 1}) def __delfield_msglength(self): del self.__field_msglength msglength=property(__getfield_msglength, __setfield_msglength, __delfield_msglength, "lengths of individual messages in septets") def iscontainer(self): return True def containerelements(self): yield ('msglength', self.__field_msglength, "lengths of individual messages in septets") class sms_quick_text(BaseProtogenClass): __fields=['msgs'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_quick_text,self).__init__(**dict) if self.__class__ is sms_quick_text: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_quick_text,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_quick_text,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx5300_282, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_msgs=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx5300_282, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) self.__field_msgs.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx5300_282, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) self.__field_msgs.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx5300_282, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'elementclass': _gen_p_lgvx5300_282, 'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def iscontainer(self): return True def containerelements(self): yield ('msgs', self.__field_msgs, None) class _gen_p_lgvx5300_282(BaseProtogenClass): 'Anonymous inner class' __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx5300_282,self).__init__(**dict) if self.__class__ is _gen_p_lgvx5300_282: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx5300_282,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx5300_282,kwargs) if len(args): dict2={'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""} dict2.update(kwargs) kwargs=dict2 self.__field_msg=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class textmemo(BaseProtogenClass): __fields=['text', 'dunno', 'memotime'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemo,self).__init__(**dict) if self.__class__ is textmemo: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemo,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemo,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_text.writetobuffer(buf) try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default' : 0x1000000}) self.__field_dunno.writetobuffer(buf) self.__field_memotime.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_text=USTRING(**{'sizeinbytes': 152, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_text.readfrombuffer(buf) self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default' : 0x1000000}) self.__field_dunno.readfrombuffer(buf) self.__field_memotime=LGCALDATE(**{'sizeinbytes': 4}) self.__field_memotime.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,USTRING): self.__field_text=value else: self.__field_text=USTRING(value,**{'sizeinbytes': 152, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def __getfield_dunno(self): try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default' : 0x1000000}) return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 4, 'default' : 0x1000000}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def __getfield_memotime(self): return self.__field_memotime.getvalue() def __setfield_memotime(self, value): if isinstance(value,LGCALDATE): self.__field_memotime=value else: self.__field_memotime=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_memotime(self): del self.__field_memotime memotime=property(__getfield_memotime, __setfield_memotime, __delfield_memotime, None) def iscontainer(self): return True def containerelements(self): yield ('text', self.__field_text, None) yield ('dunno', self.__field_dunno, None) yield ('memotime', self.__field_memotime, None) class textmemofile(BaseProtogenClass): __fields=['itemcount', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemofile,self).__init__(**dict) if self.__class__ is textmemofile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemofile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemofile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_itemcount.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_itemcount=UINT(**{'sizeinbytes': 4}) self.__field_itemcount.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_itemcount(self): return self.__field_itemcount.getvalue() def __setfield_itemcount(self, value): if isinstance(value,UINT): self.__field_itemcount=value else: self.__field_itemcount=UINT(value,**{'sizeinbytes': 4}) def __delfield_itemcount(self): del self.__field_itemcount itemcount=property(__getfield_itemcount, __setfield_itemcount, __delfield_itemcount, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': textmemo }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('itemcount', self.__field_itemcount, None) yield ('items', self.__field_items, None) bitpim-1.0.7+dfsg1/src/phones/p_sanyo8300.p0000644001616600161660000001051210442561507016401 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_sanyo8300.p 3352 2006-06-10 15:20:39Z skyjunky $ %{ """Various descriptions of data specific to Sanyo MM-8300""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 # Need to check. Is max phone will hold 32/96 or 33/97 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 HASRINGPICBUF=0 #BREW_FILE_SYSTEM=2 %} PACKET {'readwrite': 0x26} qcpheader: 1 UINT readwrite 1 UINT command 1 UINT packettype PACKET {'readwrite': 0x27} qcpwriteheader: 1 UINT readwrite 1 UINT command 1 UINT packettype PACKET eventrequest: * qcpheader {'packettype': 0x0c, 'command': 0x23} +header 1 UINT slot 129 UNKNOWN +pad PACKET eventslotinuserequest: * qcpheader {'readwrite': 0x26, 'packettype': 0x0d, 'command': 0x74} +header 1 UINT slot 129 UNKNOWN +pad PACKET evententry: 1 UINT slot 14 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} eventname 7 UNKNOWN +pad1 1 UINT eventname_len 4 UINT start "# seconds since Jan 1, 1980 approximately" 4 UINT end 14 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} location 7 UNKNOWN +pad2 1 UINT location_len 4 UINT alarmdiff "Displayed alarm time" 1 UINT period "No, Daily, Weekly, Monthly, Yearly" 1 UINT dom "Day of month for the event" 4 UINT alarm 1 UNKNOWN +pad3 1 UINT {'default': 0} +serial "Some kind of serial number" 3 UNKNOWN +pad4 2 UINT ringtone PACKET eventresponse: * qcpheader header * evententry entry * UNKNOWN pad PACKET eventslotinuseresponse: * qcpheader header 1 UINT slot 1 UINT flag * UNKNOWN pad PACKET eventslotinuseupdaterequest: * qcpwriteheader {'packettype': 0x0d, 'command': 0x74} +header 1 UINT slot 1 UINT flag 124 UNKNOWN +pad PACKET eventupdaterequest: * qcpwriteheader {'packettype': 0x0c, 'command':0x23} +header * evententry entry 56 UNKNOWN +pad PACKET callalarmrequest: * qcpheader {'packettype': 0x0c, 'command': 0x24} +header 1 UINT slot 129 UNKNOWN +pad PACKET callalarmresponse: * qcpheader header * callalarmentry entry * UNKNOWN pad PACKET callalarmupdaterequest: * qcpwriteheader {'packettype': 0x0c, 'command':0x24} +header * callalarmentry entry 40 UNKNOWN +pad PACKET callalarmslotinuserequest: * qcpheader {'packettype': 0x0d, 'command': 0x76} +header 1 UINT slot 129 UNKNOWN +pad PACKET callalarmslotinuseresponse: * qcpheader header 1 UINT slot 1 UINT flag * UNKNOWN pad PACKET callalarmentry: 1 UINT slot 1 UNKNOWN +pad0 "Not the flag?" 49 USTRING {'raiseonunterminatedread': False} phonenum 1 UINT phonenum_len 4 UINT date "# seconds since Jan 1, 1980 approximately" 1 UINT period "No, Daily, Weekly, Monthly, Yearly" 1 UINT dom "Day of month for the event" 4 UINT datedup "Copy of the date. Always the same???" 16 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} name 1 UNKNOWN +pad1 1 UINT name_len 1 UINT phonenumbertype "1: Home, 2: Work, ..." 2 UINT phonenumberslot 1 UNKNOWN +pad2 1 UINT {'default': 0} +serial 2 UNKNOWN +pad3 1 UINT {'default': 0xfc} +ringtone 1 UNKNOWN +pad4 " This may be the ringtone. Need to understand " 1 UINT +flag PACKET todorequest: * qcpheader {'packettype': 0x0c, 'command': 0x25} +header 1 UINT slot 129 UNKNOWN +pad PACKET todoentry: 1 UINT slot 1 UINT flag "0: Not used, 1: Used" 14 USTRING {'raiseonunterminatedread': False} todo 7 UNKNOWN +pad1 1 UINT todo_len 1 UINT priority "0: Normal, 1: Urgent, 2: Done" 1 UINT +dunno "Maybe always zero" 1 UINT order "Gets sorted on screen in this order" PACKET todoresponse: * qcpheader header * todoentry entry * UNKNOWN pad bitpim-1.0.7+dfsg1/src/phones/p_samsungschu470.p0000644001616600161660000002753211321251753017536 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_samsungschu470.p 4777 2010-01-07 03:24:27Z djpham $ %{ """Various descriptions of data specific to the Samsung SCH-U470 (Juke) Phone""" from prototypes import * from prototypes_samsung import * from p_brew import * from p_samsungschu740 import * PB_FLG2_RINGTONE=0x0001 PB_FLG2_WP=0x0002 CL_MAX_ENTRIES=90 %} # Phonebook stuff PACKET -NumberEntry: * STRING { 'terminator': None, 'pascal': True } number 1 UINT option if self.has_speeddial: 2 UINT speeddial if self.has_ringtone: * STRING { 'terminator': None, 'pascal': True } ringtone %{ @property def has_speeddial(self): return bool(self.option & PB_FLG_SPEEDDIAL) @property def has_ringtone(self): return bool(self.option & PB_FLG_RINGTONE) @property def is_primary(self): return bool(self.option & PB_FLG_PRIMARY) %} PACKET -PBEntry: 2 UINT info 2 UINT info2 if self.has_name: * USTRING { 'terminator': None, 'encoding': ENCODING, 'pascal': True } name if self.has_email: * USTRING { 'terminator': None, 'encoding': ENCODING, 'pascal': True } email if self.has_email2: * USTRING { 'terminator': None, 'encoding': ENCODING, 'pascal': True } email2 if self.has_home: * NumberEntry home if self.has_work: * NumberEntry work if self.has_cell: * NumberEntry cell if self.has_fax: * NumberEntry fax if self.has_cell2: * NumberEntry cell2 if self.has_note: * STRING { 'terminator': None, 'pascal': True } note if self.has_date: 4 DateTime datetime if self.has_group: 1 UINT group if self.has_wallpaper: * STRING { 'terminator': None, 'pascal': True } wallpaper 4 UINT wallpaper_range if self.has_ringtone: * STRING { 'terminator': None, 'pascal': True } ringtone if self.has_wallpaper2: * STRING { 'terminator': None, 'pascal': True } wallpaper2 %{ @property def has_name(self): return bool(self.info & PB_FLG_NAME) @property def has_email(self): return bool(self.info & PB_FLG_EMAIL) @property def has_email2(self): return bool(self.info & PB_FLG_EMAIL2) @property def has_home(self): return bool(self.info & PB_FLG_HOME) @property def has_work(self): return bool(self.info & PB_FLG_WORK) @property def has_cell(self): return bool(self.info & PB_FLG_CELL) @property def has_fax(self): return bool(self.info & PB_FLG_FAX) @property def has_cell2(self): return bool(self.info & PB_FLG_CELL2) @property def has_note(self): return bool(self.info & PB_FLG_NOTE) @property def has_date(self): return bool(self.info & PB_FLG_DATE) @property def has_group(self): return bool(self.info & PB_FLG_GROUP) @property def has_wallpaper(self): return bool(self.info & PB_FLG_WP) @property def has_ringtone(self): return bool(self.info2 & PB_FLG2_RINGTONE) @property def has_wallpaper2(self): return bool(self.info2 & PB_FLG2_WP) %} PACKET -LenEntry: 2 UINT { 'default': 0 } +itemlen PACKET -PBFile: * LIST { 'elementclass': LenEntry, 'length': 8, 'createdefault': True } +lens * LIST { 'elementclass': PBEntry } +items PACKET -PBFileHeader: * LIST { 'elementclass': LenEntry, 'length': 8, 'createdefault': True } +lens PACKET ss_number_entry: * STRING { 'terminator': 0, 'default': '', 'maxsizeinbytes': PB_MAX_NUMBER_LEN, 'raiseontruncate': False } +number 2 UINT { 'default': 0 } +speeddial 1 UINT { 'default': 0 } +primary 8 DONTCARE + * STRING { 'terminator': 0, 'default': '' } +ringtone PACKET ss_pb_entry: * USTRING { 'terminator': 0, 'maxsizeinbytes': PB_MAX_NAME_LEN, 'encoding': ENCODING, 'raiseontruncate': False } name * USTRING { 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False } +email * USTRING { 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False } +email2 2 DONTCARE + * USTRING { 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_NOTE_LEN, 'raiseontruncate': False, 'default': '' } +note 1 DONTCARE + * STRING { 'terminator': 0, 'default': '' } +wallpaper 1 DONTCARE + * ss_number_entry +home * ss_number_entry +work * ss_number_entry +cell * ss_number_entry +dummy * ss_number_entry +fax * ss_number_entry +cell2 4 DONTCARE + 1 UINT { 'default': 0 } +group 2 DONTCARE + PACKET ss_pb_write_req: * ss_cmd_hdr { 'command': SS_CMD_PB_WRITE } +hdr 1 DONTCARE + * ss_pb_entry entry PACKET -ss_pb_write_resp: * ss_cmd_hdr hdr 1 DONTCARE 2 UINT index # Calendar and notes stuff PACKET CalIndexEntry: 2 UINT { 'default': 0 } +index PACKET CalIndexFile: 2 UINT next_index 12 DONTCARE + 2 UINT numofevents 6 DONTCARE + 2 UINT numofnotes 6 DONTCARE + 2 UINT numofactiveevents 112 DONTCARE + * LIST { 'elementclass': CalIndexEntry, 'length': 103, 'createdefault': True } +events * LIST { 'elementclass': CalIndexEntry, 'length': 35, 'createdefault': True } +notes * LIST { 'elementclass': CalIndexEntry, 'length': 319, 'createdefault': True } +activeevents PACKET CalEntry: 2 UINT titlelen * USTRING { 'sizeinbytes': self.titlelen, 'encoding': ENCODING, 'terminator': None } title 4 DateTime start 4 DONTCARE + 4 DateTime { 'default': self.start } +start2 4 DONTCARE + 4 ExpiringTime exptime 4 DONTCARE + 1 DONTCARE { 'default': '\x01' } + 1 UINT repeat 1 DONTCARE { 'default': '\x03' } + 1 UINT alarm 1 UINT alert 6 DONTCARE + 4 UINT duration 1 UINT timezone 4 DateTime creationtime 4 DONTCARE + 4 DateTime modifiedtime 4 DONTCARE + 2 UINT ringtonelen * STRING { 'sizeinbytes': self.ringtonelen, 'terminator': None } ringtone 2 DONTCARE + PACKET NotePadEntry: 2 UINT textlen * USTRING { 'terminator': None, 'encoding': ENCODING, 'sizeinbytes': self.textlen } text 4 DateTime creation 4 UNKNOWN { 'pad': 0 } +zero1 4 DateTime { 'default': self.creation } +creation2 14 UNKNOWN { 'pad': 0 } +zero2 1 UINT { 'default': 5 } +five 13 UNKNOWN { 'pad': 0 } +zero3 4 DateTime { 'default': self.creation } +modified 4 UNKNOWN { 'pad': 0 } +zero4 4 DateTime { 'default': self.modified } +modified2 8 UNKNOWN { 'pad': 0 } +zero5 # Call History PACKET -cl_list: 2 UINT index PACKET -cl_index_file: * LIST { 'length': CL_MAX_ENTRIES, 'elementclass': cl_list } incoming * LIST { 'length': CL_MAX_ENTRIES, 'elementclass': cl_list } outgoing * LIST { 'length': CL_MAX_ENTRIES, 'elementclass': cl_list } missed 1352 DONTCARE 4 UINT incoming_count 4 UINT outgoing_count 4 UINT missed_count PACKET -cl_file: 1 UINT cl_type 51 STRING { 'terminator': 0 } number 4 DateTime2 datetime 4 DONTCARE 4 UINT duration %{ @property def valid(self): global CL_VALID_TYPE return bool(self.cl_type in CL_VALID_TYPE and self.number) %} # SMS Stuff PACKET pBOOL: P BOOL value PACKET -sms_header: 2 UINT index 1 UINT msg_len 1 UINT callback_len 1 UINT bitmap1 1 UINT bitmap2 6 DONTCARE 2 UINT body_len 2 UINT file_type 1 UINT msg_type 1 UINT enhance_delivery * pBOOL { 'value': self.file_type==SMS_TXT_TYPE and self.msg_type in SMS_VALID_TYPE } is_txt_msg * pBOOL { 'value': self.msg_type==SMS_TYPE_IN } in_msg * pBOOL { 'value': self.msg_type==SMS_TYPE_SENT } sent_msg * pBOOL { 'value': self.msg_type==SMS_TYPE_DRAFT } draft_msg if self.is_txt_msg.value: * sms_body { 'msg_len': self.msg_len, 'has_callback': self.bitmap2 & SMS_FLG2_CALLBACK, 'has_priority': self.bitmap2 & SMS_FLG2_PRIORITY, 'has_1byte': self.bitmap2 & SMS_FLG2_SOMETHING, 'has_1byte2': self.bitmap2 & SMS_FLG2_MSG, 'has_40bytes': self.bitmap1 & SMS_FLG1_HAS40 } body PACKET -sms_msg_stat_list: 1 UINT status PACKET -sms_datetime_list: 4 DateTime2 datetime 4 DONTCARE PACKET -sms_delivered_datetime: * LIST { 'elementclass': sms_datetime_list, 'length': 10 } datetime 20 DONTCARE PACKET -sms_body: P UINT msg_len P BOOL { 'default': True } +has_callback P BOOL { 'default': False } +has_priority P BOOL { 'default': False } +has_1byte P BOOL { 'default': True } +has_1byte2 P BOOL { 'default': False } +has_40bytes 54 DONTCARE * USTRING { 'sizeinbytes': self.msg_len, 'encoding': ENCODING, 'terminator': None } msg if self.has_callback: 3 DONTCARE 1 UINT callback_len * STRING { 'sizeinbytes': self.callback_len, 'terminator': None } callback if self.has_priority: 1 UINT priority if self.has_1byte: 1 DONTCARE 40 DONTCARE 4 DateTime1 datetime 17 DONTCARE 1 UINT addr_len0 1 UINT addr_len1 1 UINT addr_len2 1 UINT addr_len3 1 UINT addr_len4 1 UINT addr_len5 1 UINT addr_len6 1 UINT addr_len7 1 UINT addr_len8 1 UINT addr_len9 if self.addr_len0: * STRING { 'sizeinbytes': self.addr_len0, 'terminator': None } addr0 if self.addr_len1: * STRING { 'sizeinbytes': self.addr_len1, 'terminator': None } addr1 if self.addr_len2: * STRING { 'sizeinbytes': self.addr_len2, 'terminator': None } addr2 if self.addr_len3: * STRING { 'sizeinbytes': self.addr_len3, 'terminator': None } addr3 if self.addr_len4: * STRING { 'sizeinbytes': self.addr_len4, 'terminator': None } addr4 if self.addr_len5: * STRING { 'sizeinbytes': self.addr_len5, 'terminator': None } addr5 if self.addr_len6: * STRING { 'sizeinbytes': self.addr_len6, 'terminator': None } addr6 if self.addr_len7: * STRING { 'sizeinbytes': self.addr_len7, 'terminator': None } addr7 if self.addr_len8: * STRING { 'sizeinbytes': self.addr_len8, 'terminator': None } addr8 if self.addr_len9: * STRING { 'sizeinbytes': self.addr_len9, 'terminator': None } addr9 if not self.has_1byte and self.has_1byte2: 1 DONTCARE if self.has_1byte2: 1 DONTCARE 81 DONTCARE if self.has_40bytes: 40 DONTCARE * LIST { 'elementclass': sms_msg_stat_list, 'length': 10 } msg_stat # too hard to do it here. Will be handled by the phone code ## if self.msg_stat[0].status==SMS_STATUS_DELIVERED: ## 4 DateTime1 delivered_datetime ## 96 UNKNOWN dunno10 ## 4 UINT locked bitpim-1.0.7+dfsg1/src/phones/p_sanyo8400.p0000644001616600161660000000171611022657227016410 0ustar amuamu### BITPIM ### ### Copyright (C) 2007 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id:$ %{ """Various descriptions of data specific to Sanyo Katana (SCP-6600)""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * from p_sanyo4930 import * from p_sanyo6600 import * from p_sanyo7050 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMPHONEBOOKENTRIES=500 MAXNUMBERS=700 MAXEMAILS=1000 MAXURLS=500 MAXMEMOS=500 MAXADDRESSES=500 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 MAXNUMBERLEN=32 MAXEMAILLEN=96 MAXURLLEN=96 MAXMEMOLEN=96 HASRINGPICBUF=0 NUMGROUPS=20 NUMPHONENUMBERS=7 NUMEMAILS=2 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=9 %} bitpim-1.0.7+dfsg1/src/phones/p_lg.p0000644001616600161660000001337511032300255015334 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2005 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lg.p 4626 2008-07-01 00:56:13Z djpham $ %{ """Various descriptions of data specific to LG phones""" from prototypes import * import re # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb %} PACKET pbheader: 1 UINT {'constant': 0xff} +pbmode 1 UINT command 1 UINT sequence 1 UINT flag PACKET pbstartsyncrequest: * pbheader {'command': 0x00, 'flag': 0x01} +header 250 UNKNOWN +pad # is this many really necessary? PACKET pbstartsyncresponse: * pbheader header * UNKNOWN unknown PACKET pbendsyncrequest: * pbheader {'command': 0x07, 'flag': 0x01} +header 6 UNKNOWN +pad PACKET pbendsyncresponse: * pbheader header * UNKNOWN unknown PACKET pbinforequest: "Random information about the phone" * pbheader {'command': 0x15, 'flag': 0x01} +header 6 UNKNOWN +pad PACKET pbinforesponse: * pbheader header 4 UNKNOWN dunno1 2 UINT something1 4 UINT firstentry 4 UNKNOWN dunno2 4 UINT numentries # fields from this point on differ by model and are not decoded correctly 20 UNKNOWN dunno3 4 UINT lastentry 20 UNKNOWN dunno4 4 UINT esn * USTRING phonesoftware PACKET pbinitrequest: "Moves cursor to begining of phonebook" * pbheader {'command': 0x11, 'flag': 0x01} +header 6 UNKNOWN +pad PACKET pbinitresponse: * pbheader header * UNKNOWN dunno # varies by model, no useful information anyway PACKET pbreadentryrequest: * pbheader {'command': 0x13, 'flag': 0x01} +header 6 UNKNOWN +pad # pbreadentryresponse is specific to each phone model PACKET pbnextentryrequest: * pbheader {'command': 0x12, 'flag': 0x01} +header 6 UNKNOWN +pad PACKET pbnextentryresponse: * pbheader header 4 UINT serial 2 UINT datalen * DATA {'sizeinbytes': self.datalen} data * UNKNOWN randomgunk PACKET pbdeleteentryrequest: * pbheader {'command': 0x05, 'flag': 0x01} +header 4 UINT serial1 2 UINT {'constant': 0x0000} +unknown 4 UINT serial2 2 UINT entrynumber PACKET pbdeleteentryresponse: * pbheader header * UNKNOWN dunno # PACKET pbupdateentryrequest is specific to each model phone PACKET pbupdateentryresponse: * pbheader header 4 UINT serial1 * UNKNOWN dunno # PACKET pbappendentryrequest is specific to each model phone PACKET pbappendentryresponse: * pbheader header 4 UINT newserial 2 UINT dunno * UNKNOWN dunno2 # Some notes # # phonebook command numbers # # 0x15 get phone info (returns stuff about vx400 connector) # 0x00 start sync (phones display changes) # 0x11 select phonebook (goes back to first entry, returns how many left) # 0x12 advance one entry # 0x13 get current entry # 0x07 quit (phone will restart) # 0x06 ? parameters maybe # 0x05 delete entry # 0x04 write entry (advances to next entry) # 0x03 append entry (advances to next entry) # download mode PACKET LockKeyReq: 1 UINT { 'default': 0x21 } +cmd 2 UINT { 'default': 0 } +lock "0=Lock, 1=Unlock" PACKET KeyPressReq: 1 UINT { 'default': 0x20 } +cmd 1 UINT { 'default': 0 } +hold 1 STRING { 'terminator': None, 'sizeinbytes': 1 } key PACKET ULReq: "" 1 UINT { 'default': 0xFE } +cmd 1 UINT { 'default': 0x00 } +unlock_code 4 UINT unlock_key 1 UINT { 'default': 0x00 } +zero PACKET ULRes: "" 1 UINT cmd 1 UINT unlock_code 4 UINT unlock_key 1 UINT unlock_ok PACKET DMKeyReq: "Slightly different command for DMv6" 1 UINT { 'default': 0xFE } +cmd 1 UINT { 'default': 0x00 } +unlock_code 4 UINT { 'default': 0x00 } +unlock_key 1 UINT { 'default': 0x00 } +zero 1 UINT { 'default': 0x00 } +option PACKET DMKeyResp: "Return the key/seed needed to transition to DMv6" 1 UINT cmd 1 UINT unlock_code 4 UINT unlock_key PACKET DMEnterReq: "Request to transition to DMv6" 1 UINT { 'default': 0xFE } +cmd 1 UINT { 'default': 0x00 } +unlock_code 4 UINT { 'default': 0x00 } +unlock_key 1 UINT { 'default': 0x00 } +zero 1 UINT { 'default': 0x00 } +option if self.unlock_code==3: * LIST { 'createdefault': True, 'length': 16 } +unlock_key2: 1 UINT { 'default': 0 } +data %{ def init_key2(self): if self.unlock_code==3 and \ not len(self.unlock_key2): for _idx in range(16): self.unlock_key2.append(0) def convert_to_key2(self,shift): """Convert the key value to key2""" if self.unlock_code!=3: return self.init_key2() _buf=buffer() UINT(sizeinbytes=4, value=~self.unlock_key).writetobuffer(_buf) _key=_buf.getvalue() for _idx in range(4): _nth_key=ord(_key[(_idx + 4 - shift) % 4]) for _idy in range(4): self.unlock_key2[_idx*4+_idy]=_nth_key %} PACKET DMEnterResp: "Response to our request to enter DMv6" 1 UINT cmd 1 UINT unlock_code 4 UINT unlock_key 1 UINT result "0=Failure, 1=Success" PACKET NVReq: 1 UINT { 'constant': 0x26 } +cmd 2 UINT field 130 DATA { 'default': '\x00'*130 } +data PACKET NVRes: 1 UINT { 'constant': 0x26 } cmd 2 UINT field 130 DATA data PACKET FWInfoReq: 1 UINT { 'constant': 0x00} +cmd PACKET FWInfoRes: 1 UINT { 'constant': 0x00} cmd 53 DATA fw_data %{ def get_compile_time(self): _comptime = re.findall(r'(\d\d):(\d\d):(\d\d)', self.fw_data)[0] return int(_comptime[0]) * 100 + int (_comptime[1]) %} PACKET data: * DATA bytes bitpim-1.0.7+dfsg1/src/phones/com_samsungspha840.py0000644001616600161660000000345310554051740020235 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_samsungspha840.py 3918 2007-01-19 05:15:12Z djpham $ """Communicate with a Samsung SPH-A840""" import sha import re import struct import common import commport import p_brew import p_samsungspha620 import p_samsungspha840 import com_brew import com_phone import com_samsung_packet import com_samsungspha620 import prototypes import helpids numbertypetab=('cell','home','office','pager','fax','none') class Phone(com_samsungspha620.Phone): "Talk to a Samsung SPH-A840 phone" desc="SPH-A840" helpid=helpids.ID_PHONE_SAMSUNGOTHERS protocolclass=p_samsungspha840 serialsname='spha840' # jpeg Remove first 124 characters imagelocations=( # offset, index file, files location, origin, maximumentries, header offset # Offset is arbitrary. 100 is reserved for amsRegistry indexed files (400, "cam/dldJpeg", "camera", 100, 124), (300, "cam/jpeg", "camera", 100, 124), ) ringtonelocations=( # offset, index file, files location, type, maximumentries, header offset ) def __init__(self, logtarget, commport): com_samsungspha620.Phone.__init__(self, logtarget, commport) self.numbertypetab=numbertypetab self.mode=self.MODENONE parentprofile=com_samsungspha620.Profile class Profile(parentprofile): deviceclasses=("modem",) protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='SAMSUNG' phone_model='SPH-A840/152' def __init__(self): parentprofile.__init__(self) self.numbertypetab=numbertypetab bitpim-1.0.7+dfsg1/src/phones/p_sk6100.p0000644001616600161660000000265410417340753015671 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Yosef Meller ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_sk6100.p 3092 2006-04-13 03:13:47Z skyjunky $ %{ """Various descriptions of data specific to SKTT IMT2000""" from prototypes import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUM_PBENTRIES=1200 NUM_PBGROUPS=41 NUM_PHONES=2400 %} PACKET wholebook: 16 USTRING filename * LIST {'elementclass': pbentry, 'length': NUM_PBENTRIES} pbentries PACKET pbentry: 1 UINT slot "All of them are numbered" 3 UNKNOWN unk1 1 UINT group_id 1 UNKNOWN unk3 1 UINT record "Only nonzero if not deleted" 5 UNKNOWN unk4 20 USTRING { 'encoding': 'iso-8859-8' } name "The place until the zeroes end" 96 UNKNOWN unk2 PACKET groups: 16 USTRING filename "group file name" * LIST {'elementclass': pbgroup, 'length': NUM_PBGROUPS} pbgroups PACKET pbgroup: 1 UINT group_id 3 UNKNOWN unk1 21 USTRING { 'encoding': 'iso-8859-8' } name 1 UINT unk3 30 UNKNOWN unk2 PACKET phones: 16 USTRING filename * LIST {'elementclass': phone, 'length': NUM_PHONES} records # 44 total record length PACKET phone: 2 UINT slot 4 UINT others 4 UINT owner_id 1 UINT type "Home / Work / Cell / Fax" 33 USTRING number bitpim-1.0.7+dfsg1/src/phones/p_samsungschu740.p0000644001616600161660000003267111317561520017537 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_samsungschu740.p 4772 2010-01-02 06:10:24Z djpham $ %{ """Various descriptions of data specific to the Samsung SCH-A950 Phone""" from prototypes import * from prototypes_samsung import * from p_brew import * from p_samsungscha950 import * RT_PATH='brew/mod/mr' RT_INDEX_FILE_NAME=RT_PATH+'/MrInfo.db' RT_EXCLUDED_FILES=('MrInfo.db',) SND_PATH='brew/mod/18067' SND_INDEX_FILE_NAME=SND_PATH+'/MsInfo.db' SND_EXCLUDED_FILES=('MsInfo.db', 'ExInfo.db') PIC_PATH='brew/mod/10888' PIC_INDEX_FILE_NAME=PIC_PATH+'/Default Album.alb' PIC_EXCLUDED_FILES=('Default Album.alb',) PIC_TYPE_HEADER=0 PIC_TYPE_BUILTIN=4 PIC_TYPE_USERS=3 VIDEO_PATH='brew/mod/10890' VIDEO_INDEX_FILE_NAME=VIDEO_PATH+'/Default Album.alb' PB_FLG_NOTE=0x0200 PB_MAX_NOTE_LEN=64 CL_MAX_ENTRIES=90 CL_TYPE_INCOMING=2 CL_TYPE_OUTGOING=1 CL_TYPE_MISSED=3 CL_TYPE_DELETED=5 CL_VALID_TYPE=frozenset((CL_TYPE_INCOMING, CL_TYPE_OUTGOING, CL_TYPE_MISSED)) %} # Ringtone stuff PACKET WRingtoneIndexEntry: P STRING name * STRING { 'terminator': None, 'default': '/ff/' } +path_prefix * STRING { 'terminator': None } pathname * STRING { 'terminator': None, 'default': '|0|3\x0A' } +eor PACKET WRingtoneIndexFile: * LIST { 'elementclass': WRingtoneIndexEntry } +items PACKET RRingtoneIndexEntry: * STRING { 'terminator': 0x7C } pathname * STRING { 'terminator': 0x0A } misc PACKET RRingtoneIndexFile: * LIST { 'elementclass': RRingtoneIndexEntry } +items # Sounds stuff PACKET WSoundsIndexEntry: P STRING name * STRING { 'terminator': None, 'default': '/ff/' } +path_prefix * STRING { 'terminator': None } pathname * STRING { 'terminator': None, 'default': '|0|7\x0A' } +eor PACKET WSoundsIndexFile: * LIST { 'elementclass': WSoundsIndexEntry } +items PACKET RSoundIndexEntry: * STRING { 'terminator': 0x7C } pathname * STRING { 'terminator': 0x0A } misc PACKET RSoundsIndexFile: * LIST { 'elementclass': RSoundIndexEntry } +items # Wallpaper stuff PACKET WPictureIndexEntry: P STRING { 'default': '/ff/' } +path_prefix P STRING { 'terminator': None } pathname 258 STRING { 'terminator': 0, 'default': self.path_prefix+self.pathname } +path_name 2 UINT { 'default': PIC_TYPE_USERS } +pictype "0= invalid, 4=builtin, 3=users" PACKET WPictureIndexFile: * WPictureIndexEntry { 'pathname': '0|/ff/brew/mod/10888/Default Album|\x0A', 'path_prefix': '', 'pictype': PIC_TYPE_HEADER } +header * WPictureIndexEntry { 'pathname': 'Preloaded1', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN } +preloaded1 * WPictureIndexEntry { 'pathname': 'Preloaded2', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN } +preloaded2 * WPictureIndexEntry { 'pathname': 'Preloaded3', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN } +preloaded3 * WPictureIndexEntry { 'pathname': 'Preloaded4', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN } +preloaded4 * WPictureIndexEntry { 'pathname': 'Preloaded5', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN } +preloaded5 * WPictureIndexEntry { 'pathname': 'Preloaded6', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN } +preloaded6 * WPictureIndexEntry { 'pathname': 'Preloaded7', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN } +preloaded7 * WPictureIndexEntry { 'pathname': 'Preloaded8', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN } +preloaded8 * LIST { 'elementclass': WPictureIndexEntry } +items PACKET RPictureIndexEntry: 258 STRING { 'terminator': 0, 'raiseonunterminatedread': False } pathname 2 UINT pictype "0= invalid, 4=builtin, 3=users" PACKET RPictureIndexFile: * LIST { 'elementclass': RPictureIndexEntry } +items # Phonebook stuff PACKET -NumberEntry: * STRING { 'terminator': None, 'pascal': True } number 1 UINT option if self.has_speeddial: 2 UINT speeddial if self.has_ringtone: * STRING { 'terminator': None, 'pascal': True } ringtone %{ @property def has_speeddial(self): return bool(self.option & PB_FLG_SPEEDDIAL) @property def has_ringtone(self): return bool(self.option & PB_FLG_RINGTONE) @property def is_primary(self): return bool(self.option & PB_FLG_PRIMARY) %} PACKET -PBEntry: 2 UINT info 2 DONTCARE if self.has_name: * USTRING { 'terminator': None, 'encoding': ENCODING, 'pascal': True } name if self.has_email: * USTRING { 'terminator': None, 'encoding': ENCODING, 'pascal': True } email if self.has_email2: * USTRING { 'terminator': None, 'encoding': ENCODING, 'pascal': True } email2 if self.has_home: * NumberEntry home if self.has_work: * NumberEntry work if self.has_cell: * NumberEntry cell if self.has_fax: * NumberEntry fax if self.has_cell2: * NumberEntry cell2 if self.has_note: * STRING { 'terminator': None, 'pascal': True } note if self.has_date: 4 DateTime datetime if self.hsa_group: 1 UINT group if self.has_wallpaper: * STRING { 'terminator': None, 'pascal': True } wallpaper 4 UINT wallpaper_range %{ @property def has_name(self): return bool(self.info & PB_FLG_NAME) @property def has_email(self): return bool(self.info & PB_FLG_EMAIL) @property def has_email2(self): return bool(self.info & PB_FLG_EMAIL2) @property def has_home(self): return bool(self.info & PB_FLG_HOME) @property def has_work(self): return bool(self.info & PB_FLG_WORK) @property def has_cell(self): return bool(self.info & PB_FLG_CELL) @property def has_fax(self): return bool(self.info & PB_FLG_FAX) @property def has_cell2(self): return bool(self.info & PB_FLG_CELL2) @property def has_note(self): return bool(self.info & PB_FLG_NOTE) @property def has_date(self): return bool(self.info & PB_FLG_DATE) @property def has_group(self): return bool(self.info & PB_FLG_GROUP) @property def has_wallpaper(self): return bool(self.info & PB_FLG_WP) %} PACKET -LenEntry: 2 UINT { 'default': 0 } +itemlen PACKET -PBFile: * LIST { 'elementclass': LenEntry, 'length': 8, 'createdefault': True } +lens * LIST { 'elementclass': PBEntry } +items PACKET -PBFileHeader: * LIST { 'elementclass': LenEntry, 'length': 8, 'createdefault': True } +lens PACKET ss_number_entry: * STRING { 'terminator': 0, 'default': '', 'maxsizeinbytes': PB_MAX_NUMBER_LEN, 'raiseontruncate': False } +number 2 UINT { 'default': 0 } +speeddial 1 UINT { 'default': 0 } +primary 8 DONTCARE + * STRING { 'terminator': 0, 'default': '' } +ringtone PACKET ss_pb_entry: * USTRING { 'terminator': 0, 'maxsizeinbytes': PB_MAX_NAME_LEN, 'encoding': ENCODING, 'raiseontruncate': False } name * USTRING { 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False } +email * USTRING { 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False } +email2 2 DONTCARE + * USTRING { 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_NOTE_LEN, 'raiseontruncate': False, 'default': '' } +note 1 DONTCARE + * STRING { 'terminator': 0, 'default': '' } +wallpaper 4 UINT { 'default': 0 } +wallpaper_range 1 DONTCARE + * ss_number_entry +home * ss_number_entry +work * ss_number_entry +cell * ss_number_entry +dummy * ss_number_entry +fax * ss_number_entry +cell2 4 DONTCARE + 1 UINT { 'default': 0 } +group 2 DONTCARE + PACKET ss_pb_write_req: * ss_cmd_hdr { 'command': SS_CMD_PB_WRITE } +hdr 1 DONTCARE + * ss_pb_entry entry PACKET -ss_pb_write_resp: * ss_cmd_hdr hdr 1 DONTCARE 2 UINT index # SMS Stuff PACKET pBOOL: P BOOL value PACKET -sms_header: 2 UINT index 1 UINT msg_len 1 UINT callback_len 1 UINT bitmap1 1 UINT bitmap2 6 DONTCARE 2 UINT body_len 2 UINT file_type 1 UINT msg_type 1 UINT enhance_delivery * pBOOL { 'value': self.file_type==SMS_TXT_TYPE and self.msg_type in SMS_VALID_TYPE } is_txt_msg * pBOOL { 'value': self.msg_type==SMS_TYPE_IN } in_msg * pBOOL { 'value': self.msg_type==SMS_TYPE_SENT } sent_msg * pBOOL { 'value': self.msg_type==SMS_TYPE_DRAFT } draft_msg if self.is_txt_msg.value: * sms_body { 'msg_len': self.msg_len, 'has_callback': self.bitmap2 & SMS_FLG2_CALLBACK, 'has_priority': self.bitmap2 & SMS_FLG2_PRIORITY, 'has_1byte': self.bitmap2 & SMS_FLG2_SOMETHING, 'has_1byte2': self.bitmap2 & SMS_FLG2_MSG, 'has_40bytes': self.bitmap1 & SMS_FLG1_HAS40 } body PACKET -sms_msg_stat_list: 1 UINT status PACKET -sms_datetime_list: 4 DateTime1 datetime 4 DONTCARE PACKET -sms_delivered_datetime: * LIST { 'elementclass': sms_datetime_list, 'length': 10 } datetime 20 DONTCARE PACKET -sms_body: P UINT msg_len P BOOL { 'default': True } +has_callback P BOOL { 'default': False } +has_priority P BOOL { 'default': False } +has_1byte P BOOL { 'default': True } +has_1byte2 P BOOL { 'default': False } +has_40bytes 53 DONTCARE * USTRING { 'sizeinbytes': self.msg_len, 'encoding': ENCODING, 'terminator': None } msg if self.has_callback: 3 DONTCARE 1 UINT callback_len * STRING { 'sizeinbytes': self.callback_len, 'terminator': None } callback if self.has_priority: 1 UINT priority if self.has_1byte: 1 DONTCARE 40 DONTCARE 4 DateTime1 datetime 17 DONTCARE 1 UINT addr_len0 1 UINT addr_len1 1 UINT addr_len2 1 UINT addr_len3 1 UINT addr_len4 1 UINT addr_len5 1 UINT addr_len6 1 UINT addr_len7 1 UINT addr_len8 1 UINT addr_len9 if self.addr_len0: * STRING { 'sizeinbytes': self.addr_len0, 'terminator': None } addr0 if self.addr_len1: * STRING { 'sizeinbytes': self.addr_len1, 'terminator': None } addr1 if self.addr_len2: * STRING { 'sizeinbytes': self.addr_len2, 'terminator': None } addr2 if self.addr_len3: * STRING { 'sizeinbytes': self.addr_len3, 'terminator': None } addr3 if self.addr_len4: * STRING { 'sizeinbytes': self.addr_len4, 'terminator': None } addr4 if self.addr_len5: * STRING { 'sizeinbytes': self.addr_len5, 'terminator': None } addr5 if self.addr_len6: * STRING { 'sizeinbytes': self.addr_len6, 'terminator': None } addr6 if self.addr_len7: * STRING { 'sizeinbytes': self.addr_len7, 'terminator': None } addr7 if self.addr_len8: * STRING { 'sizeinbytes': self.addr_len8, 'terminator': None } addr8 if self.addr_len9: * STRING { 'sizeinbytes': self.addr_len9, 'terminator': None } addr9 if not self.has_1byte and self.has_1byte2: 1 DONTCARE if self.has_1byte2: 1 DONTCARE 81 DONTCARE if self.has_40bytes: 40 DONTCARE * LIST { 'elementclass': sms_msg_stat_list, 'length': 10 } msg_stat # too hard to do it here. Will be handled by the phone code ## if self.msg_stat[0].status==SMS_STATUS_DELIVERED: ## 4 DateTime1 delivered_datetime ## 96 UNKNOWN dunno10 ## 4 UINT locked # Call History PACKET -cl_list: 2 UINT index PACKET -cl_index_file: * LIST { 'length': CL_MAX_ENTRIES, 'elementclass': cl_list } incoming * LIST { 'length': CL_MAX_ENTRIES, 'elementclass': cl_list } outgoing * LIST { 'length': CL_MAX_ENTRIES, 'elementclass': cl_list } missed 992 DONTCARE 4 UINT incoming_count 4 UINT outgoing_count 4 UINT missed_count PACKET -cl_file: 1 UINT cl_type 51 STRING { 'terminator': 0 } number 4 DateTime1 datetime 4 DONTCARE 4 UINT duration %{ @property def valid(self): global CL_VALID_TYPE return bool(self.cl_type in CL_VALID_TYPE and self.number) %} bitpim-1.0.7+dfsg1/src/phones/p_samsungschu750.p0000644001616600161660000004451111321531342017526 0ustar amuamu### BITPIM ### ### Copyright (C) 2009 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_samsungschu750.p 4778 2010-01-08 04:21:54Z djpham $ %{ """Various descriptions of data specific to the Samsung SCH-U750 (Alias 2) Phone""" from prototypes import * from prototypes_samsung import * from p_brew import * from p_samsungschu470 import * SND_PATH='brew/mod/18067' SND_INDEX_FILE_NAME=SND_PATH+'/MsInfo.db' SND_EXCLUDED_FILES=('MsInfo.db',) SND_PRELOADED_PREFIX=SND_PATH+'/SCH-U750_PRELOADED_' # phonebook stuff, PB_WP_CACHE_WIDTH=80 PB_WP_CACHE_HEIGHT=106 PB_MAX_IMNAME_LEN=50 PB_MAX_STREET_LEN=50 PB_MAX_CITY_LEN=50 PB_MAX_STATE_LEN=50 PB_MAX_ZIP_LEN=10 PB_MAX_COUNTRY_LEN=50 # Flag PB_FLG_IMNAME1=0x8000 # Flag 2 PB_FLG_IMNAME2=0x0001 PB_FLG_STREET=0x0002 PB_FLG_CITY=0x0004 PB_FLG_STATE=0x0008 PB_FLG_ZIP=0x0010 PB_FLG_COUNTRY=0x0020 PB_FLG_ENTRY_WP=0x0100 PB_FLG_ENTRY_RT=0x0080 PB_FLG_ENTRY_CACHED_WP=0x0040 # each number entry flag PB_FLG_DUNNO1=0x04 %} # Sounds stuff PACKET WSoundsIndexEntry: P STRING name * STRING { 'terminator': None, 'default': '/ff/' } +path_prefix * STRING { 'terminator': None } pathname * STRING { 'terminator': None, 'default': '|0|7\x0A' } +eor PACKET WSoundsIndexFile: * LIST { 'elementclass': WSoundsIndexEntry } +items PACKET RSoundIndexEntry: * STRING { 'terminator': 0x7C } pathname * STRING { 'terminator': 0x0A } misc PACKET RSoundsIndexFile: * LIST { 'elementclass': RSoundIndexEntry } +items # phonebook/contact stuff PACKET -NumberEntry: * STRING { 'terminator': None, 'pascal': True } number 1 UINT option if self.has_speeddial: 2 UINT speeddial if self.has_dunno1: 4 DONTCARE %{ @property def has_speeddial(self): return bool(self.option & PB_FLG_SPEEDDIAL) @property def has_dunno1(self): return bool(self.option & PB_FLG_DUNNO1) @property def is_primary(self): return bool(self.option & PB_FLG_PRIMARY) @property def has_ringtone(self): return False %} PACKET -PBEntry: 2 UINT info 2 UINT info2 if self.has_name: * USTRING { 'terminator': None, 'encoding': ENCODING, 'pascal': True } name if self.has_email: * USTRING { 'terminator': None, 'encoding': ENCODING, 'pascal': True } email if self.has_email2: * USTRING { 'terminator': None, 'encoding': ENCODING, 'pascal': True } email2 if self.has_home: * NumberEntry home if self.has_work: * NumberEntry work if self.has_cell: * NumberEntry cell if self.has_fax: * NumberEntry fax if self.has_cell2: * NumberEntry cell2 if self.has_note: * STRING { 'terminator': None, 'pascal': True } note if self.has_date: 4 DateTime datetime if self.has_group: 4 UINT group if self.has_im_name: * STRING { 'terminator': None, 'pascal': True } im_name 1 UINT im_type if self.has_street: * STRING { 'terminator': None, 'pascal': True } street if self.has_city: * STRING { 'terminator': None, 'pascal': True } city if self.has_state: * STRING { 'terminator': None, 'pascal': True } state if self.has_zipcode: * STRING { 'terminator': None, 'pascal': True } zipcode if self.has_country: * STRING { 'terminator': None, 'pascal': True } country if self.has_cached_wp: * STRING { 'terminator': None, 'pascal': True } cached_wp 4 UINT cached_wp_num if self.has_ringtone: * STRING { 'terminator': None, 'pascal': True } ringtone if self.has_wallpaper: * STRING { 'terminator': None, 'pascal': True } wallpaper %{ @property def has_name(self): return bool(self.info & PB_FLG_NAME) @property def has_email(self): return bool(self.info & PB_FLG_EMAIL) @property def has_email2(self): return bool(self.info & PB_FLG_EMAIL2) @property def has_home(self): return bool(self.info & PB_FLG_HOME) @property def has_work(self): return bool(self.info & PB_FLG_WORK) @property def has_cell(self): return bool(self.info & PB_FLG_CELL) @property def has_fax(self): return bool(self.info & PB_FLG_FAX) @property def has_cell2(self): return bool(self.info & PB_FLG_CELL2) @property def has_note(self): return bool(self.info & PB_FLG_NOTE) @property def has_date(self): return bool(self.info & PB_FLG_DATE) @property def has_group(self): return bool(self.info & PB_FLG_GROUP) @property def has_im_name(self): return bool((self.info & PB_FLG_IMNAME1) and (self.info2 & PB_FLG_IMNAME2)) @property def has_street(self): return bool(self.info2 & PB_FLG_STREET) @property def has_city(self): return bool(self.info2 & PB_FLG_CITY) @property def has_state(self): return bool(self.info2 & PB_FLG_STATE) @property def has_zipcode(self): return bool(self.info2 & PB_FLG_ZIP) @property def has_country(self): return bool(self.info2 & PB_FLG_COUNTRY) @property def has_cached_wp(self): return bool(self.info2 & PB_FLG_ENTRY_CACHED_WP) @property def has_ringtone(self): return bool(self.info2 & PB_FLG_ENTRY_RT) @property def has_wallpaper(self): return bool(self.info2 & PB_FLG_ENTRY_WP) @property def has_address(self): # return True if this has at least one valid address item return self.has_street or self.has_city or self.has_state or \ self.has_zipcode or self.has_country @property def address(self): # return the address in a BitPim phonebook addresses dict _addr={} if self.has_street: _addr['street']=self.street if self.has_city: _addr['city']=self.city if self.has_state: _addr['state']=self.state if self.has_zipcode: _addr['postalcode']=self.zipcode if self.has_country: _addr['country']=self.country return _addr %} PACKET -LenEntry: 2 UINT { 'default': 0 } +itemlen PACKET -PBFile: * LIST { 'elementclass': LenEntry, 'length': 8, 'createdefault': True } +lens * LIST { 'elementclass': PBEntry } +items PACKET -PBFileHeader: * LIST { 'elementclass': LenEntry, 'length': 8, 'createdefault': True } +lens PACKET ss_cmd_hdr: 4 UINT { 'default': 0xfb4b } +commandcode 1 UINT command PACKET ss_cmd_resp: * ss_cmd_hdr cmd_hdr * DATA data PACKET ss_sw_req: * ss_cmd_hdr { 'command': SS_CMD_SW_VERSION } +hdr PACKET -ss_sw_resp: * ss_cmd_hdr hdr * STRING { 'terminator': 0 } sw_version PACKET ss_hw_req: * ss_cmd_hdr { 'command': SS_CMD_HW_VERSION } +hdr PACKET -ss_hw_resp: * ss_cmd_hdr hdr * STRING { 'terminator': 0 } hw_version PACKET ss_pb_count_req: * ss_cmd_hdr { 'command': SS_CMD_PB_COUNT } +hdr PACKET -ss_pb_count_resp: * ss_cmd_hdr hdr 1 DONTCARE 2 UINT count PACKET ss_pb_read_req: * ss_cmd_hdr { 'command': SS_CMD_PB_READ } +hdr 1 DONTCARE + 2 UINT index PACKET -ss_pb_read_resp: * ss_cmd_hdr hdr 1 DONTCARE 2 UINT index 1 DONTCARE * DATA data PACKET ss_pb_voicemail_read_req: * ss_cmd_hdr { 'command': SS_CMD_PB_VOICEMAIL_READ } +hdr 1 UINT { 'constant': SS_CMD_PB_VOICEMAIL_PARAM } +param PACKET -ss_pb_voicemail_resp: * ss_cmd_hdr hdr 1 UINT param * STRING { 'terminator': 0 } number PACKET ss_pb_voicemail_write_req: * ss_cmd_hdr { 'command': SS_CMD_PB_VOICEMAIL_WRITE } +hdr 1 UINT { 'constant': SS_CMD_PB_VOICEMAIL_PARAM } +param * STRING { 'terminator': 0, 'default': PB_DEFAULT_VOICEMAIL_NUMBER } +number PACKET ss_pb_clear_req: * ss_cmd_hdr { 'command': SS_CMD_PB_CLEAR } +hdr PACKET -ss_pb_clear_resp: * ss_cmd_hdr hdr 2 UINT flg PACKET ss_number_entry: * STRING { 'terminator': 0, 'default': '', 'maxsizeinbytes': PB_MAX_NUMBER_LEN, 'raiseontruncate': False } +number 2 UINT { 'default': 0 } +speeddial 1 UINT { 'default': 0 } +primary 8 DONTCARE + * STRING { 'terminator': 0, 'default': '' } +ringtone PACKET ss_pb_entry: * USTRING { 'terminator': 0, 'maxsizeinbytes': PB_MAX_NAME_LEN, 'encoding': ENCODING, 'raiseontruncate': False } name * USTRING { 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False } +email * USTRING { 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False } +email2 2 DONTCARE + * USTRING { 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_NOTE_LEN, 'raiseontruncate': False, 'default': '' } +note 1 DONTCARE + * STRING { 'terminator': 0, 'default': '' } +wallpaper 1 UINT { 'default': 0 } +wallpaper_range * ss_number_entry +home * ss_number_entry +work * ss_number_entry +cell * ss_number_entry +dummy * ss_number_entry +fax * ss_number_entry +cell2 4 DONTCARE + 1 UINT { 'default': 0 } +group 2 DONTCARE + * USTRING { 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_STREET_LEN, 'raiseontruncate': False, 'default': '' } +street * USTRING { 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_CITY_LEN, 'raiseontruncate': False, 'default': '' } +city * USTRING { 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_STATE_LEN, 'raiseontruncate': False, 'default': '' } +state * USTRING { 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_ZIP_LEN, 'raiseontruncate': False, 'default': '' } +zipcode * USTRING { 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_COUNTRY_LEN, 'raiseontruncate': False, 'default': '' } +country * USTRING { 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_IMNAME_LEN, 'raiseontruncate': False, 'default': '' } +im_name 2 UINT { 'default': 0 } +im_type %{ def _set_address(self, addr): # set address fields based on BitPim phonebook address dict if not isinstance(addr, dict): raise TypeError('addr must be of type dict') self.street=addr.get('street', '') self.city=addr.get('city', '') self.state=addr.get('state', '') self.zipcode=addr.get('postalcode', '') self.country=addr.get('country', '') def _get_address(self): # return address items in BitPim phonebook address dict return { 'street': self.street, 'city': self.city, 'state': self.state, 'postalcode': self.zipcode, 'country': self.country } address=property(fget=_get_address, fset=_set_address) %} PACKET ss_pb_write_req: * ss_cmd_hdr { 'command': SS_CMD_PB_WRITE } +hdr 1 DONTCARE + * ss_pb_entry entry PACKET -ss_pb_write_resp: * ss_cmd_hdr hdr 1 DONTCARE 2 UINT index # Call History PACKET -cl_list: 2 UINT index PACKET -cl_index_file: * LIST { 'length': CL_MAX_ENTRIES, 'elementclass': cl_list } incoming * LIST { 'length': CL_MAX_ENTRIES, 'elementclass': cl_list } outgoing * LIST { 'length': CL_MAX_ENTRIES, 'elementclass': cl_list } missed 1374 DONTCARE 4 UINT incoming_count 4 UINT outgoing_count 4 UINT missed_count PACKET -cl_file: 1 UINT cl_type 51 STRING { 'terminator': 0 } number 4 DateTime2 datetime 4 DONTCARE 4 UINT duration %{ @property def valid(self): global CL_VALID_TYPE return bool(self.cl_type in CL_VALID_TYPE and self.number) %} # Calendar and notes stuff PACKET CalIndexEntry: 2 UINT { 'default': 0 } +index PACKET CalIndexFile: 2 UINT next_index 12 DONTCARE + 2 UINT numofevents 6 DONTCARE + 2 UINT numofnotes 6 DONTCARE + 2 UINT numofactiveevents 112 DONTCARE + * LIST { 'elementclass': CalIndexEntry, 'length': 103, 'createdefault': True } +events * LIST { 'elementclass': CalIndexEntry, 'length': 35, 'createdefault': True } +notes * LIST { 'elementclass': CalIndexEntry, 'length': 319, 'createdefault': True } +activeevents PACKET CalEntry: 2 UINT titlelen * USTRING { 'sizeinbytes': self.titlelen, 'encoding': ENCODING, 'terminator': None } title 4 DateTime2 start 4 DateTime2 { 'default': self.start } +start2 4 DateTime2 end 1 DONTCARE { 'default': '\x01' } + 1 UINT repeat 1 DONTCARE { 'default': '\x03' } + 1 UINT alarm 1 UINT alert 1 UINT { 'default': 0 } +reminder 5 DONTCARE + 4 UINT duration 1 UINT timezone 4 DateTime2 creationtime 4 DateTime2 { 'default': self.creationtime } +modifiedtime 2 UINT ringtonelen * STRING { 'sizeinbytes': self.ringtonelen, 'terminator': None } ringtone 2 DONTCARE + PACKET NotePadEntry: 2 UINT textlen * USTRING { 'terminator': None, 'encoding': ENCODING, 'sizeinbytes': self.textlen } text 4 DateTime2 creation 4 DateTime2 { 'default': self.creation } +creation2 6 DONTCARE + 1 DONTCARE { 'default': '\x05' } + 12 DONTCARE + 1 DONTCARE { 'default': '\x30' } + 4 DateTime2 { 'default': self.creation } +modified 4 DateTime2 { 'default': self.modified } +modified2 4 DONTCARE + # SMS Stuff PACKET pBOOL: P BOOL value PACKET -sms_header: 2 UINT index 1 DONTCARE 1 UINT msg_len 1 DONTCARE 1 UINT callback_len 1 UINT bitmap1 1 UINT bitmap2 6 DONTCARE 2 UINT body_len 2 UINT file_type 1 UINT msg_type 1 UINT enhance_delivery * pBOOL { 'value': self.file_type==SMS_TXT_TYPE and self.msg_type in SMS_VALID_TYPE } is_txt_msg * pBOOL { 'value': self.msg_type==SMS_TYPE_IN } in_msg * pBOOL { 'value': self.msg_type==SMS_TYPE_SENT } sent_msg * pBOOL { 'value': self.msg_type==SMS_TYPE_DRAFT } draft_msg if self.is_txt_msg.value: * sms_body { 'msg_len': self.msg_len, 'has_callback': self.bitmap2 & SMS_FLG2_CALLBACK, 'has_priority': self.bitmap2 & SMS_FLG2_PRIORITY, 'has_1byte': (self.bitmap2 & SMS_FLG2_SOMETHING) or (not self.bitmap2), 'has_1byte2': self.bitmap2 & SMS_FLG2_MSG, 'has_40bytes': self.bitmap1 & SMS_FLG1_HAS40 } body PACKET -sms_msg_stat_list: 1 UINT status PACKET -sms_datetime_list: 4 DateTime2 datetime PACKET -sms_delivered_datetime: * LIST { 'elementclass': sms_datetime_list, 'length': 10 } datetime 20 DONTCARE PACKET -sms_body: P UINT msg_len P BOOL { 'default': True } +has_callback P BOOL { 'default': False } +has_priority P BOOL { 'default': False } +has_1byte P BOOL { 'default': True } +has_1byte2 P BOOL { 'default': False } +has_40bytes if self.msg_len: 54 DONTCARE * USTRING { 'sizeinbytes': self.msg_len, 'encoding': ENCODING, 'terminator': None } msg else: 53 DONTCARE P USTRING {'default': '' } +msg if self.has_callback: 4 DONTCARE 1 UINT callback_len * STRING { 'sizeinbytes': self.callback_len, 'terminator': None } callback if self.has_priority: 1 UINT priority if self.has_1byte: 1 DONTCARE 40 DONTCARE 4 DateTime1 datetime 13 DONTCARE 1 UINT addr_len0 1 UINT addr_len1 1 UINT addr_len2 1 UINT addr_len3 1 UINT addr_len4 1 UINT addr_len5 1 UINT addr_len6 1 UINT addr_len7 1 UINT addr_len8 1 UINT addr_len9 if self.addr_len0: * STRING { 'sizeinbytes': self.addr_len0, 'terminator': None } addr0 if self.addr_len1: * STRING { 'sizeinbytes': self.addr_len1, 'terminator': None } addr1 if self.addr_len2: * STRING { 'sizeinbytes': self.addr_len2, 'terminator': None } addr2 if self.addr_len3: * STRING { 'sizeinbytes': self.addr_len3, 'terminator': None } addr3 if self.addr_len4: * STRING { 'sizeinbytes': self.addr_len4, 'terminator': None } addr4 if self.addr_len5: * STRING { 'sizeinbytes': self.addr_len5, 'terminator': None } addr5 if self.addr_len6: * STRING { 'sizeinbytes': self.addr_len6, 'terminator': None } addr6 if self.addr_len7: * STRING { 'sizeinbytes': self.addr_len7, 'terminator': None } addr7 if self.addr_len8: * STRING { 'sizeinbytes': self.addr_len8, 'terminator': None } addr8 if self.addr_len9: * STRING { 'sizeinbytes': self.addr_len9, 'terminator': None } addr9 if not self.has_1byte and self.has_1byte2: 1 DONTCARE if self.has_1byte2: 1 DONTCARE 81 DONTCARE if self.has_40bytes: 40 DONTCARE * LIST { 'elementclass': sms_msg_stat_list, 'length': 10 } msg_stat # too hard to do it here. Will be handled by the phone code ## if self.msg_stat[0].status==SMS_STATUS_DELIVERED: ## 4 DateTime1 delivered_datetime ## 96 UNKNOWN dunno10 ## 4 UINT locked bitpim-1.0.7+dfsg1/src/phones/com_samsungspha900.py0000644001616600161660000004314611017154737020242 0ustar amuamu### BITPIM ### ### Copyright (C) 2008 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_samsungspha900.py 3918 2007-01-19 05:15:12Z djpham $ """Communicate with a Samsung SPH-A900""" import sha import re import struct import common import commport import p_brew import p_samsungspha900 import com_brew import com_phone import prototypes import helpids numbertypetab=('cell','home','office','pager','none') class Phone(com_phone.Phone, com_brew.BrewProtocol): "Talk to a Samsung SPH-A900 phone" desc="SPH-A900" helpid=helpids.ID_PHONE_SAMSUNGOTHERS protocolclass=p_samsungspha900 serialsname='spha900' MODEPHONEBOOK="modephonebook" # can speak the phonebook protocol # jpeg Remove first 124 characters imagelocations=( # offset, index file, files location, origin, maximumentries, header offset # Offset is arbitrary. 100 is reserved for amsRegistry indexed files (400, "cam/dldJpeg", "camera", 100, 124), (300, "cam/jpeg", "camera", 100, 124), ) ringtonelocations=( # offset, index file, files location, type, maximumentries, header offset ) def __init__(self, logtarget, commport): com_phone.Phone.__init__(self, logtarget, commport) com_brew.BrewProtocol.__init__(self) self.numbertypetab=numbertypetab self.mode=self.MODENONE def _setmodephonebook(self): self.setmode(self.MODEBREW) req=self.protocolclass.firmwarerequest() respc=self.protocolclass.firmwareresponse try: self.sendpbcommand(req, respc, callsetmode=False) return 1 except com_phone.modeignoreerrortypes: pass try: self.comm.setbaudrate(38400) self.sendpbcommand(req, respc, callsetmode=False) return 1 except com_phone.modeignoreerrortypes: pass return 0 def sendpbcommand(self, request, responseclass, callsetmode=True, writemode=False, numsendretry=0, returnerror=False): if writemode: numretry=3 else: numretry=0 if callsetmode: self.setmode(self.MODEPHONEBOOK) buffer=prototypes.buffer() request.writetobuffer(buffer, logtitle="Samsung phonebook request") data=buffer.getvalue() firsttwo=data[:2] data=common.pppescape(data+common.crcs(data))+common.pppterminator isendretry=numsendretry while isendretry>=0: try: rdata=self.comm.writethenreaduntil(data, False, common.pppterminator, logreaduntilsuccess=False, numfailures=numretry) break except com_phone.modeignoreerrortypes: if isendretry>0: self.log("Resending request packet...") time.sleep(0.3) else: self.comm.success=False self.mode=self.MODENONE self.raisecommsdnaexception("manipulating the phonebook") isendretry-=1 self.comm.success=True origdata=rdata # sometimes there is junk at the beginning, eg if the user # turned off the phone and back on again. So if there is more # than one 7e in the escaped data we should start after the # second to last one d=rdata.rfind(common.pppterminator,0,-1) if d>=0: self.log("Multiple Samsung packets in data - taking last one starting at "+`d+1`) self.logdata("Original Samsung data", origdata, None) rdata=rdata[d+1:] # turn it back to normal data=common.pppunescape(rdata) # Sometimes there is other crap at the beginning. But it might # be a Sanyo error byte. So strip off bytes from the beginning # until the crc agrees, or we get to the first two bytes of the # request packet. d=data.find(firsttwo) crc=data[-3:-1] crcok=False for i in range(0,d+1): trydata=data[i:-3] if common.crcs(trydata)==crc: crcok=True break if not crcok: self.logdata("first two",firsttwo, None) self.logdata("Original Sanyo data", origdata, None) self.logdata("Working on Sanyo data", data, None) raise common.CommsDataCorruption("Sanyo packet failed CRC check", self.desc) res=responseclass() if d>0: if d==i: self.log("Junk at beginning of Sanyo packet, data at "+`d`) self.logdata("Original Sanyo data", origdata, None) self.logdata("Working on Sanyo data", data, None) else: if returnerror: res=self.protocolclass.sanyoerror() else: self.log("Sanyo Error code "+`ord(data[0])`) self.logdata("sanyo phonebook response", data, None) raise SanyoCommandException(ord(data[0])) data=trydata # parse data buffer=prototypes.buffer(data) res.readfrombuffer(buffer, logtitle="sanyo phonebook response") return res def getfundamentals(self, results): """Gets information fundamental to interopating with the phone and UI.""" results['uniqueserial']=1 return results def getphonebook(self,result): pbook={} count = 0 numcount = 0 numemail = 0 numurl = 0 reqname=self.protocolclass.namerequest() reqnumber=self.protocolclass.numberrequest() for slot in range(1,self.protocolclass.NUMPHONEBOOKENTRIES+1): reqname.slot=slot resname=self.sendpbcommand(reqname, self.protocolclass.nameresponse) bitmask=resname.entry.bitmask if bitmask: entry={} name=resname.entry.name entry['serials']=[ {'sourcetype': self.serialsname, 'slot': slot, 'sourceuniqueid': result['uniqueserial']} ] entry['names']=[{'full':name}] entry['numbers']=[] bit=1 print resname.entry.p2,name for num in range(self.protocolclass.NUMPHONENUMBERS): bit <<= 1 if bitmask & bit: numslot=resname.entry.numberps[num].slot reqnumber.slot=numslot resnumber=self.sendpbcommand(reqnumber, self.protocolclass.numberresponse) numhash={'number':resnumber.entry.num, 'type' : self.numbertypetab[resnumber.entry.numbertype-1]} entry['numbers'].append(numhash) print " ",self.numbertypetab[resnumber.entry.numbertype-1]+": ",numslot,resnumber.entry.num bit <<= 1 if bitmask & bit: reqnumber.slot=resname.entry.emailp resnumber=self.sendpbcommand(reqnumber, self.protocolclass.numberresponse) print " Email: ",resname.entry.emailp,resnumber.entry.num entry['emails']=[] entry['emails'].append({'email':resnumber.entry.num}) bit <<= 1 if bitmask & bit: reqnumber.slot=resname.entry.urlp resnumber=self.sendpbcommand(reqnumber, self.protocolclass.numberresponse) print " URL: ",resname.entry.urlp,resnumber.entry.num entry['urls']=[{'url':resnumber.entry.num}] if resname.entry.nickname: print " Nick: ",resname.entry.nickname if resname.entry.memo: print " Memo ",resname.entry.memo entry['memos']=[{'memo':resname.entry.memo}] pbook[count]=entry self.progress(slot, self.protocolclass.NUMPHONEBOOKENTRIES+1, name) count+=1 numcount+=len(entry['numbers']) if entry.has_key('emails'): numemail+=len(entry['emails']) if entry.has_key('urls'): numurl+=len(entry['urls']) self.progress(slot,slot,"Phonebook read completed") self.log("Phone contains "+`count`+" contacts, "+`numcount`+" phone numbers, "+`numemail`+" Emails, "+`numurl`+" URLs") result['phonebook']=pbook return pbook def writewait(self): """Loop until phone status indicates ready to write""" for i in range(100): req=self.protocolclass.statusrequest() res=self.sendpbcommand(req, self.protocolclass.statusresponse) # print res.flag0, res.ready, res.flag2, res.flag3 if res.ready==res.readyvalue: return time.sleep(0.1) self.log("Phone did not transfer to ready to write state") self.log("Waiting a bit longer and trying anyway") return def savephonebook(self, data): newphonebook={} nump=2 urlp=0 memop=0 addressp=0 emailp=0 slotsused=1 namemap=[] contactmap=[] urlmap=[] pbook=data['phonebook'] self.log("Putting phone into write mode") req=self.protocolclass.beginendupdaterequest() req.beginend=1 # Start update res=self.sendpbcommand(req, self.protocolclass.beginendupdateresponse, writemode=True) # self.writewait() req=self.protocolclass.writeenable() try: res=self.sendpbcommand(req, self.protocolclass.writeenableresponse, writemode=True) except: pass keys=pbook.keys() keys.sort() nnames = len(keys) reqnumber=self.protocolclass.numberupdaterequest() for ikey in keys: ii=pbook[ikey] slot=slotsused slotsused+=1 reqname=self.protocolclass.nameupdaterequest() reqname.slot=slot name=ii['name'] self.progress(slot-1, nnames, "Writing "+name) self.log("Writing "+`name`+" to slot "+`slot`) namemap.append((slot,name)) reqname.entry.name=name reqname.entry.name_len=ii['name_len'] bitmask=0 bit=1 for numindex in range(len(ii['numbers'])): reqnumber.slot=nump reqnumber.entry.num=ii['numbers'][numindex] reqnumber.entry.numlen=len(ii['numbers'][numindex]) numbertype=ii['numbertypes'][numindex] reqnumber.entry.numbertype=numbertype reqnumber.entry.pos=numindex+1 resnumber=self.sendpbcommand(reqnumber,self.protocolclass.numberresponse) reqname.entry.numberps.append(nump) bitmask |= bit bit <<= 1 nump+=1 for numindex in range(len(ii['numbers']),self.protocolclass.NUMPHONENUMBERS): reqname.entry.numberps.append(0) reqname.entry.bitmask=bitmask resname=self.sendpbcommand(reqname,self.protocolclass.nameresponse) # Zero out unused slots for slot in range(nump,self.protocolclass.NUMPHONEBOOKENTRIES+2): reqnumber.slot=slot reqnumber.entry.num='' reqnumber.entry.numlen=0 reqnumber.entry.numbertype=0 reqnumber.entry.pos=0 resnumber=self.sendpbcommand(reqnumber,self.protocolclass.numberresponse) for slot in range(slotsused,self.protocolclass.NUMPHONEBOOKENTRIES+1): reqname=self.protocolclass.nameupdaterequest() reqname.slot=slot reqname.entry.name='' reqname.entry.name_len=0 for numindex in range(self.protocolclass.NUMPHONENUMBERS): reqname.entry.numberps.append(0) reqname.entry.bitmask=0 resname=self.sendpbcommand(reqname,self.protocolclass.nameresponse) self.progress(1,1, "Phonebook write completed") req=self.protocolclass.beginendupdaterequest() req.beginend=2 # Finish update res=self.sendpbcommand(req, self.protocolclass.beginendupdateresponse, writemode=True) req=p_brew.setmodemmoderequest() res=self.sendpbcommand(req, p_brew.setmoderesponse, writemode=True) #data['rebootphone']=1 def getcalendar(self, results): return result getwallpapers=None getringtones=None class Profile(com_phone.Profile): deviceclasses=("modem",) usbids=( ( 0x04e8, 0x6601, 1), # Samsung internal USB interface ) # which device classes we are. deviceclasses=("modem","serial") protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='SAMSUNG' phone_model='SPH-A900/154' _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ) def __init__(self): self.numbertypetab=numbertypetab com_phone.Profile.__init__(self) def convertphonebooktophone(self, helper, data): "Converts the data to what will be used by the phone" results={} slotsused={} pb=data['phonebook'] for pbentry in pb: entry=pb[pbentry] slot=helper.getserial(entry.get('serials', []), self.serialsname, data['uniqueserial'], 'slot', -1) if(slot > 0 and slot <= self.protocolclass.NUMPHONEBOOKENTRIES): slotsused[slot]=1 lastunused=0 # One more than last unused slot for pbentry in pb: e={} # entry out entry=pb[pbentry] # entry in try: try: e['name']=helper.getfullname(entry.get('names', []),1,1,20)[0] except: e['name']='' e['name_len']=len(e['name']) if len(e['name'])==0: print "Entry with no name" # cat=helper.makeone(helper.getcategory(entry.get('categories',[]),0,1,16), None) # if cat is None: # e['group']=0 # else: # key,value=self._getgroup(cat, data['groups']) # if key is not None: # e['group']=key # else: # e['group']=0 e['group']=0 serial1=helper.getserial(entry.get('serials', []), self.serialsname, data['uniqueserial'], 'slot', -1) if(slot > 0 and slot <= self.protocolclass.NUMPHONEBOOKENTRIES): e['slot']=slot else: # A new entry. Must find unused slot while(slotsused.has_key(lastunused)): lastunused+=1 if(lastunused > self.protocolclass.NUMPHONEBOOKENTRIES): raise helper.ConversionFailed() e['slot']=lastunused slotsused[lastunused]=1 # e['emails']=helper.getemails(entry.get('emails', []),0,self.protocolclass.NUMEMAILS,self.protocolclass.MAXEMAILLEN) # e['url']=helper.makeone(helper.geturls(entry.get('urls', []), 0,1,self.protocolclass.MAXURLLEN), "") e['memo']=helper.makeone(helper.getmemos(entry.get('memos', []), 0,1,self.protocolclass.MAXMEMOLEN), "") numbers=helper.getnumbers(entry.get('numbers', []),0,self.protocolclass.NUMPHONENUMBERS) e['numbertypes']=[] e['numbers']=[] e['numberspeeds']=[] for numindex in range(len(numbers)): num=numbers[numindex] type=num['type'] numtype=len(self.numbertypetab) # None type is default for i,t in enumerate(self.numbertypetab): if type==t: numtype=i+1 break # If type not found, give it "none" type e['numbertypes'].append(numtype) # Need to enforce phone number length limit number=self.phonize(num['number']) e['numbers'].append(number) # deal with speed dial # sd=num.get("speeddial", 0xFF) # if sd>=self.protocolclass.FIRSTSPEEDDIAL and sd<=self.protocolclass.LASTSPEEDDIAL: # e['numberspeeds'].append(sd) # else: # e['numberspeeds'].append(0) #e['numberspeeds']=helper.filllist(e['numberspeeds'], self.protocolclass.NUMPHONENUMBERS, 0xFF) #e['numbertypes']=helper.filllist(e['numbertypes'], self.protocolclass.NUMPHONENUMBERS, 0) #e['numbers']=helper.filllist(e['numbers'], self.protocolclass.NUMPHONENUMBERS, "") e['ringtone']=helper.getringtone(entry.get('ringtones', []), 'call', None) e['wallpaper']=helper.getwallpaper(entry.get('wallpapers', []), 'call', None) e['secret']=helper.getflag(entry.get('flags', []), 'secret', False) results[pbentry]=e except helper.ConversionFailed: #self.log("No Free Slot for "+e['name']) print "No Free Slot for "+e['name'] continue data['phonebook']=results return data bitpim-1.0.7+dfsg1/src/phones/com_motoe815.py0000644001616600161660000000157410554051740017033 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_motoe815.py 3918 2007-01-19 05:15:12Z djpham $ """Communicate with Motorola E815 phones using AT commands""" # BitPim modules import com_motov710 import helpids parentphone=com_motov710.Phone class Phone(parentphone): desc='Moto-E815' helpid=helpids.ID_PHONE_MOTOE815 serialsname='motoe815' #------------------------------------------------------------------------------ parentprofile=com_motov710.Profile class Profile(parentprofile): serialsname=Phone.serialsname # use for auto-detection phone_manufacturer='Motorola' phone_model='E815 ' common_model_name='E815' generic_phone_model='Motorola CDMA e815 Phone' bitpim-1.0.7+dfsg1/src/phones/com_samsung.py0000644001616600161660000011406510661407437017136 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Joe Pham ### Copyright (C) 2004 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_samsung.py 4365 2007-08-17 21:11:59Z djpham $ """Communicate with a Samsung SCH-Axx phone using AT commands""" # standard modules import copy import datetime import re import time # site-packages from thirdparty import DSV # BitPim modules import bpcalendar import com_brew import com_phone import common import commport import memo import p_brew import phoneinfo import sms import todo class Phone(com_phone.Phone,com_brew.BrewProtocol): "Talk to a Samsung phone using AT commands" desc="Samsung SCH-Axx phone" MODEPHONEBOOK="modephonebook" _AT_str="AT" _OK_str="\r\nOK\r\n" _Error_str="\r\nERROR\r\n" _read_timeout=0.1 # Calendar class vars _cal_entries_range=xrange(20) _cal_max_events=20 _cal_max_events_per_day=9 _cal_num_of_read_fields=7 _cal_num_of_write_fields=6 _cal_entry=0 _cal_start_datetime=1 _cal_end_datetime=2 # if your phone does not support and end-datetime, set this to a default value # if it does support end-datetime, set this to None _cal_end_datetime_value='19800106T000000' _cal_datetime_stamp=3 _cal_alarm_type=4 _cal_read_name=6 _cal_write_name=5 _cal_alarm_values={ '0': -1, '1': 0, '2': 10, '3': 30, '4': 60 } _cal_max_name_len=32 _switch_mode_cmd='\x44\x58\xf4\x7e' def __init__(self, logtarget, commport): "Call all the contructors and sets initial modes" com_phone.Phone.__init__(self, logtarget, commport) com_brew.BrewProtocol.__init__(self) self.mode=self.MODENONE def _setmodephonebooktobrew(self): self.setmode(self.MODEMODEM) self.setmode(self.MODEBREW) return True def _setmodemodemtobrew(self): self.log('Switching from modem to BREW') try: self.comm.sendatcommand('$QCDMG') return True except: pass # give it another try self.log('Retry switching from modem to BREW') try: self.comm.sendatcommand('$QCDMG') return True except commport.ATError: return False except: if __debug__: self.log('Got an excepetion') return False def _setmodebrew(self): # switch from None to BREW self.log('Switching from None to BREW') # do it the long, but sure, way: 1st try to switch to modem if not self._setmodemodem(): # can't switch to modem, give up return False # then switch from modem to BREW return self._setmodemodemtobrew() def _setmodebrewtomodem(self): self.log('Switching from BREW to modem') try: self.comm.write(self._switch_mode_cmd, False) self.comm.readsome(numchars=5, log=False) return True except: pass # give it a 2nd try try: self.comm.write(self._switch_mode_cmd, False) self.comm.readsome(numchars=5, log=False) return True except: return False def _setmodemodemtophonebook(self): self.log('Switching from modem to phonebook') response=self.comm.sendatcommand("#PMODE=1") return True def _setmodemodem(self): self.log('Switching to modem') try: self.comm.sendatcommand('E0V1') return True except: pass # could be in BREW mode, try switch over self.log('trying to switch from BREW mode') if not self._setmodebrewtomodem(): return False try: self.comm.sendatcommand('E0V1') return True except: return False def _setmodephonebook(self): self.setmode(self.MODEMODEM) self.setmode(self.MODEPHONEBOOK) return True def _setmodephonebooktomodem(self): self.log('Switching from phonebook to modem') response=self.comm.sendatcommand("#PMODE=0") return True def _get_at_response(self): s=self.comm.read(1, False) if not len(s): return '' # got at least one char, try to read the rest with short timeout i=self.comm.ser.getTimeout() self.comm.ser.setTimeout(self._read_timeout) while True: s1=self.comm.read(1, False) if len(s1): s += s1 else: break self.comm.ser.setTimeout(i) return s def is_online(self): self.setmode(self.MODEPHONEBOOK) try: self.comm.sendatcommand("E0V1") return True except commport.ATError: return False def get_esn(self): try: s=self.comm.sendatcommand("+gsn") if len(s): return ' '.join(s[0].split(": ")[1:]) except commport.ATError: pass return '' def _send_and_get(self, at_command): try: s=self.comm.sendatcommand(str(at_command)) if len(s): return self.splitandunescape(s[0]) except commport.ATError: pass return None def get_model(self): return ','.join(self._send_and_get('+GMM')) def get_manufacturer(self): return ','.join(self._send_and_get('+GMI')) def get_phone_number(self): return self._send_and_get('+MIN?')[0] def get_firmware_version(self): return ','.join(self._send_and_get('+GMR')) def get_battery_level(self): s=self._send_and_get('+CBC?') if s is not None and len(s)==2: return s[1]+'%' def get_signal_quality(self): s=self._send_and_get('+CSQ?') if s is not None and len(s)==2: return str(100*int(s[0])/31)+'%' def get_analog_digital(self): d={ '0': 'Analog', '1': 'Digital' } s=self._send_and_get('+CAD?') return d.get(s[0], '') def get_groups(self, groups_range): g=[] for i in groups_range: try: s=self.comm.sendatcommand("#PBGRR=%d" % i) if len(s): g.append(s[0].split(': ')[1].split(',')[1].strip('"')) else: g.append('') except commport.ATError: g.append('') return g def get_phone_entry(self, entry_index, alias_column=-1, num_columns=-1): try: s=self.comm.sendatcommand("#PBOKR=%d" % entry_index) if len(s): line=s[0] if alias_column >= 0 and alias_column < num_columns: line=self.defrell(line, alias_column, num_columns) return self.splitandunescape(line) except commport.ATError: pass return [] def del_phone_entry(self, entry_index): try: s=self.comm.sendatcommand("#PBOKW=%d" % entry_index) return True except commport.ATError: return False def save_phone_entry(self, entry_str): try: s=self.comm.sendatcommand("#PBOKW="+entry_str) return True except commport.ATError: return False def get_time_stamp(self): now = time.localtime(time.time()) return "%04d%02d%02dT%02d%02d%02d" % now[0:6] def phonize(self, str): """Convert the phone number into something the phone understands All digits, P, T, * and # are kept, everything else is removed""" return re.sub("[^0-9PT#*]", "", str) def get_calendar_entry(self, entry_index): try: s=self.comm.sendatcommand('#PISHR=%d' % entry_index) if len(s): return self.splitandunescape(s[0]) except commport.ATError: pass return [] def save_calendar_entry(self, entry_str): try: self.comm.sendatcommand('#PISHW='+entry_str) return True except: return False def get_memo_entry(self, entry_index): try: s=self.comm.sendatcommand('#PIMMR=%d'%entry_index) if len(s): return self.splitandunescape(s[0]) except commport.ATError: pass return [] def save_memo_entry(self, entry_str): try: self.comm.sendatcommand('#PIMMW='+entry_str) return True except: return False def get_todo_entry(self, entry_index): try: s=self.comm.sendatcommand('#PITDR=%d' % entry_index) if len(s): return self.splitandunescape(s[0]) except commport.ATError: pass return [] def save_todo_entry(self, entry_str): try: self.comm.sendatcommand("#PITDW="+entry_str) return True except: return False def get_sms_inbox(self, entry_index): try: s=self.comm.sendatcommand('#psrmr=%d'%entry_index) if len(s): return self.splitandunescape(s[0]) except commport.ATError: pass return [] def get_sms_saved(self, entry_index): try: s=self.comm.sendatcommand('#psfmr=%d'%entry_index) if len(s): return self.splitandunescape(s[0]) except commport.ATError: pass return [] def get_sms_sent(self, entry_index): try: s=self.comm.sendatcommand('#pssmr=%d'%entry_index) if len(s): return self.splitandunescape(s[0]) except commport.ATError: pass return [] def get_canned_msg(self, entry_index): try: s=self.comm.sendatcommand('#psstr=%d'%entry_index) if len(s): return self.splitandunescape(s[0]) except commport.ATError: pass return [] def save_canned_msg(self, entry_str): try: self.comm.sendatcommand('#psstw='+entry_str) return True except: return False def extract_timedate(self, td): # extract samsung timedate 'YYYYMMDDTHHMMSS' to (y, m, d, h, m) return (int(td[:4]), int(td[4:6]), int(td[6:8]), int(td[9:11]), int(td[11:13])) def encode_timedate(self, td): # reverse if extract_timedate return "%04d%02d%02dT%02d%02d00" % tuple(td) def splitandunescape(self, line): """Split fields and unescape double quote and right brace""" # Should unescaping be done on fields that are not surrounded by # double quotes? DSV strips these quotes, so we have to do it to # all fields. col=line.find(": ") print line[col+2:] e=DSV.importDSV([line[col+2:]])[0] i=0 while i=ncol: # Invalid alias column, do nothing return s e=s.split(",") i=0 while ilast_date: last_date=ed if e.repeat is None: if sd>=today: r.setdefault(e.start[:3], []).append(Samsung_Calendar(e)) else: if ed>=today: rp.append(e) # go through and expand on the repeated events delta_1=datetime.timedelta(1) for n in rp: current_date=today end_date=datetime.date(*n.end[:3]) cnt=0 while current_date<=end_date: if n.is_active(current_date.year, current_date.month, current_date.day): cd_l=(current_date.year, current_date.month, current_date.day) r.setdefault(cd_l, []).append(\ Samsung_Calendar(n, cd_l)) cnt+=1 if cnt>self._cal_max_events: # enough for this one, breaking out break current_date+=delta_1 # and put them all into a list res=[] keys=r.keys() # sort by date keys.sort() for k in keys: # sort by time within this date r[k].sort() # clip by max events/day if len(r[k])>self._cal_max_events_per_day: res+=r[k][:self._cal_max_events_per_day] else: res+=r[k] # clip by max events if len(res)>self._cal_max_events: res=res[:self._cal_max_events] return res def savecalendar(self, dict, merge): self.log("Sending calendar entries") cal=self.process_calendar(dict['calendar']) # testing if __debug__: print 'processed calendar: ', len(cal), ' items' for c in cal: print c.description,':', c.start # testing self.setmode(self.MODEPHONEBOOK) self.log("Saving calendar entries") cal_cnt=0 l=self._cal_max_events for c in cal: # Save this entry to phone e=['']*self._cal_num_of_write_fields # pos e[self._cal_entry]=`cal_cnt` # start date time e[self._cal_start_datetime]=self.encode_timedate(c.start) # end date time if self._cal_end_datetime_value is None: # valid end-datetime e[self._cal_end_datetime]=self.encode_timedate(c.end) else: # no end-datetime, set to start-datetime e[self._cal_end_datetime]=self._cal_end_datetime_value # time stamp e[self._cal_datetime_stamp]=self.get_time_stamp() # Alarm type e[self._cal_alarm_type]=c.alarm # Name, check for bad char & proper length name=c.description.replace('"', '') if len(name)>self._cal_max_name_len: name=name[:self._cal_max_name_len] e[self._cal_write_name]='"'+name+'"' # and save it self.progress(cal_cnt+1, l, "Updating "+name) if not self.save_calendar_entry(",".join(e)): self.log("Failed to save item: "+name) else: cal_cnt += 1 # delete the rest of the self.log('Deleting unused entries') for k in range(cal_cnt, l): self.progress(k, l, "Deleting entry %d" % k) self.save_calendar_entry(`k`) self.setmode(self.MODEMODEM) return dict # common methods for individual phones if they can use them w/o changes def _getmemo(self, result): self.setmode(self.MODEPHONEBOOK) m=MemoList(self) m.read() m_dict=m.get() result['memo']=m_dict self.setmode(self.MODEMODEM) return m_dict def _savememo(self, result, merge): self.setmode(self.MODEPHONEBOOK) m=MemoList(self) r=result.get('memo', {}) m.set(r) m.write() self.setmode(self.MODEMODEM) return r def _gettodo(self, result): self.log("Getting todo entries") self.setmode(self.MODEPHONEBOOK) td_l=TodoList(self) td_l.read() result['todo']=td_l.get() self.setmode(self.MODEMODEM) return result def _savetodo(self, result, merge): self.log("Saving todo entries") self.setmode(self.MODEPHONEBOOK) td_l=TodoList(self, result.get('todo', {})) td_l.validate() td_l.write() self.setmode(self.MODEMODEM) return result def _getsms(self, result): self.log("Getting SMS entries") self.setmode(self.MODEPHONEBOOK) sms_l=SMSList(self) sms_l.read() result['sms']=sms_l.get() sms_canned=CannedMsgList(self) sms_canned.read() result['canned_msg']=sms_canned.get() self.setmode(self.MODEMODEM) return result def _savesms(self, result, merge): self.log("Saving SMS Canned Messages") self.setmode(self.MODEPHONEBOOK) canned_msg=CannedMsgList(self, result.get('canned_msg', {})) canned_msg.write() self.setmode(self.MODEMODEM) return result def _getphoneinfo(self, phone_info): self.log('Getting Phone Info') self.setmode(self.MODEPHONEBOOK) for e in phoneinfo.PhoneInfo.standard_keys: f=getattr(self, 'get_'+e[0]) setattr(phone_info, e[0], f()) phone_info.append('Analog/Digital:', self.get_analog_digital()) self.setmode(self.MODEMODEM) def _send_at_and_get(self, cmd): try: resp=self.comm.sendatcommand(cmd) return ': '.join(resp[0].split(': ')[1:]) except: return None def is_mode_modem(self): try: resp=self.comm.sendatcommand('E0V1') return True except: return False def get_detect_data(self, r): # get detection data r['manufacturer']=self._send_at_and_get('+GMI') r['model']=self._send_at_and_get('+GMM') r['firmware_version']=self._send_at_and_get('+GMR') r['esn']=self._send_at_and_get('+GSN') @classmethod def detectphone(_, coms, likely_ports, res, _module, _log): if not len(likely_ports): return None for port in likely_ports: if not res.has_key(port): res[port]={ 'mode_modem': None, 'mode_brew': None, 'manufacturer': None, 'model': None, 'firmware_version': None, 'esn': None, 'firmwareresponse': None } try: if res[port]['mode_modem']==False or \ res[port]['model']: continue p=Phone(_log, commport.CommConnection(_log, port, timeout=1)) if p.is_mode_modem(): res[port]['mode_modem']=True p.get_detect_data(res[port]) else: res[port]['mode_modem']=False except: # this port is not available if __debug__: raise #------------------------------------------------------------------------------ class Profile(com_phone.Profile): BP_Calendar_Version=3 serialsname='samsung' usbids=( ( 0x04e8, 0x6601, 1), # Samsung internal USB interface ) # which device classes we are. deviceclasses=("modem", "serial") _supportedsyncs=() def __init__(self): com_phone.Profile.__init__(self) #------------------------------------------------------------------------------ class Samsung_Calendar: _cal_alarm_values={ '0': -1, '1': 0, '2': 10, '3': 30, '4': 60 } def __init__(self, calendar_entry, new_date=None): self._start=self._end=self._alarm=self._desc=None self._extract_cal_info(calendar_entry, new_date) def _extract_cal_info(self, cal_entry, new_date): s=cal_entry.start if new_date is not None: s=new_date[:3]+s[3:] self._start=s self._end=cal_entry.end self._desc=cal_entry.description # approximate the alarm value self._alarm='0' alarm=cal_entry.alarm _keys=self._cal_alarm_values.keys() _keys.sort() _keys.reverse() for k in _keys: if alarm>=self._cal_alarm_values[k]: self._alarm=k break def __lt__(self, rhs): return self.startrhs.start def __ge__(self, rhs): return self.start>=rhs.start def _get_start(self): return self._start start=property(fget=_get_start) def _get_end(self): return self._end end=property(fget=_get_end) def _get_desc(self): return self._desc description=property(fget=_get_desc) def _get_alarm(self): return self._alarm alarm=property(fget=_get_alarm) #------------------------------------------------------------------------------- class MemoList(object): # class constants _max_num_entries=10 _range_entries=xrange(_max_num_entries) _max_text_len=60 _max_subject_len=12 _max_num_of_fields=4 _text_index=3 _date_index=1 _max_write_fields=3 _write_entry_index=0 _write_date_index=1 _write_text_index=2 _continuation_char='-' def __init__(self, phone): self._phone=phone self._data={} def get(self): return copy.deepcopy(self._data, {}) def read(self): self._data={} text='' for i in self._range_entries: try: self._phone.progress(i, self._max_num_entries, 'Reading Memo Entry: '+str(i)) s=self._phone.get_memo_entry(i) if len(s)!=self._max_num_of_fields: continue t=s[self._text_index] if len(t)==self._max_text_len and \ t[-1]==self._continuation_char: # contination to the next record text+=t[:len(t)-1] continue # new record text+=t m=memo.MemoEntry() m.text=text m.set_date_isostr(s[self._date_index]) self._data[m.id]=m text='' except: if __debug__: raise def write(self): keys=self._data.keys() keys.sort() count=0 for k in keys: if count>=self._max_num_entries: self._phone.log('Max number of memos sent') break n=self._data[k] text=n.text subj=n.subject l=min(self._max_subject_len, len(text)) if subj[:l]!=text[:l]: text=subj+':'+text text.replace('"', '') while len(text) and countself._max_text_len: sub_text=text[:self._max_text_len-1]+self._continuation_char text=text[self._max_text_len-1:] else: sub_text=text text='' entry_str=['']*self._max_write_fields entry_str[self._write_entry_index]=`count` entry_str[self._write_date_index]=self._phone.get_time_stamp() entry_str[self._write_text_index]='"'+sub_text+'"' self._phone.progress(count, self._max_num_entries, 'Writing Memo Entry: '+str(count)) if self._phone.save_memo_entry(','.join(entry_str)): self._phone.log('Sent memo %s to the phone'%subj) count+=1 else: self._phone.log("Failed to send memo"+subj) # clear out the rest of the slots for k in xrange(count, self._max_num_entries): self._phone.progress(k, self._max_num_entries, 'Deleing Memo Entry: '+str(k)) self._phone.save_memo_entry(`k`) def set(self, data): self._data={} self._data.update(data) #------------------------------------------------------------------------------- class TodoList(object): _td_max_read_fields=6 _td_max_write_fields=5 _td_max_entries=20 _td_entry=0 _td_priority=1 _td_due_datetime=2 _td_datetime_stamp=3 _td_status=4 _td_subject=5 _td_write_subject=4 _td_max_len_name=32 def __init__(self, phone, data={}): self._phone=phone self._data=data def get(self): return copy.deepcopy(self._data, {}) def _extract_fields(self, s): entry=todo.TodoEntry() i=int(s[self._td_priority]) if i: entry.priority=1 else: entry.priority=10 entry.due_date=s[self._td_due_datetime][:8] entry.summary=s[self._td_subject] return entry def read(self): self._data={} cnt=0 for i in xrange(self._td_max_entries): s=self._phone.get_todo_entry(i) if not len(s): self._phone.progress(i+1, self._td_max_entries, 'Getting blank entry: '+str(i)) continue self._phone.progress(i+1, self._td_max_entries, s[self._td_subject]) e=self._extract_fields(s) self._data[e.id]=e def _encode_fields(self, i, entry): e=['']*self._td_max_write_fields e[self._td_entry]=`i` if entry.priority is not None and entry.priority<5: e[self._td_priority]='1' else: e[self._td_priority]='0' s=entry.due_date if s is None or not len(s): s=self._phone.get_time_stamp() else: s+='T000000' e[self._td_due_datetime]=s e[self._td_datetime_stamp]=self._phone.get_time_stamp() e[self._td_write_subject]='"'+entry.summary+'"' return ','.join(e) def _write_entry(self, i, entry): return self._phone.save_todo_entry(self._encode_fields(i, entry)) def validate(self): for k,n in self._data.items(): name=n.summary.replace('"', '') if len(name)>self._td_max_len_name: name=name[:self._td_max_len_name] n.summary=name def write(self): keys=self._data.keys() keys.sort() cnt=0 for k in keys: n=self._data[k] if cnt>self._td_max_entries: break if self._write_entry(cnt, n): cnt += 1 else: self._phone.log('Failed to save todo entry '+str(k)) self._phone.progress(cnt, self._td_max_entries, 'Saving entry: '+n.summary) for i in xrange(cnt, self._td_max_entries): self._phone.progress(i, self._td_max_entries, 'Deleting entry: '+str(i)) self._phone.save_todo_entry(`i`) #------------------------------------------------------------------------------- class SMS_Generic_List(object): def __init__(self, phone): self._phone=phone self._data={} def get(self): return self._data.copy() def read(self): raise NotImplementedError #------------------------------------------------------------------------------- class SMS_Inbox_List(SMS_Generic_List): _max_entries=100 _valid_range=xrange(_max_entries) _datetime_index=3 _body_index=4 _callback_index=5 _field_num=6 def __init__(self, phone): super(SMS_Inbox_List, self).__init__(phone) def read(self): for i in self._valid_range: self._phone.progress(i, self._max_entries, 'Reading SMS Inbox Entry '+str(i)) s=self._phone.get_sms_inbox(i) if len(s)==self._field_num: e=sms.SMSEntry() e.folder=e.Folder_Inbox e.datetime=s[self._datetime_index] e._from, e.subject, txt=self._extract_body(s[self._body_index]) e.text=unicode(txt, errors='ignore') e.callback=s[self._callback_index] self._data[e.id]=e def _extract_body(self, s): try: # extract different components from the main text body _from=None l=s.split(' ') ss=l[0] if ss.find('@') != -1: # this the 'from' email address _from=ss l=l[1:] ss=l[0] _subj=[] if ss[0]=='(': while l: _subj.append(ss) l=l[1:] if ss[-1]==')': break if l: ss=l[0] if l: return (_from, ' '.join(_subj), ' '.join(l)) else: return (_from, '', ' '.join(_subj)) except: # something happend, just return the original text return (None, '', s) #------------------------------------------------------------------------------- class SMS_Saved_List(SMS_Generic_List): _max_entries=20 _valid_range=xrange(_max_entries) _field_num=5 _datetime_index=1 _from_index=2 _body_index=4 def __init__(self, phone): super(SMS_Saved_List, self).__init__(phone) def read(self): for i in self._valid_range: self._phone.progress(i, self._max_entries, 'Reading SMS Saved Entry '+str(i)) s=self._phone.get_sms_saved(i) if len(s)==self._field_num: e=sms.SMSEntry() e.folder=e.Folder_Saved e.datetime=s[self._datetime_index] e._from=s[self._from_index] e.subject, txt=self._extract_body(s[self._body_index]) e.text=unicode(txt, errors='ignore') self._data[e.id]=e def _extract_body(self, s): # extract different components from the main text body try: l=s.split(' ') ss=l[0] _subj=[] if ss[0]=='(': while l: _subj.append(ss) l=l[1:] if ss[-1]==')': break if l: ss=l[0] if l: return (' '.join(_subj), ' '.join(l)) else: return ('', ' '.join(_subj)) except: return ('', s) #------------------------------------------------------------------------------- class SMS_Sent_List(SMS_Generic_List): _max_entries=100 _valid_range=xrange(_max_entries) _field_num=5 _datetime_index=1 _to_index=2 _from_index=3 _text_index=4 def __init__(self, phone): super(SMS_Sent_List, self).__init__(phone) def read(self): for i in self._valid_range: self._phone.progress(i, self._max_entries, 'Reading SMS Sent Entry '+str(i)) s=self._phone.get_sms_sent(i) if len(s)==self._field_num: e=sms.SMSEntry() e.folder=e.Folder_Sent e.datetime=s[self._datetime_index] e._to=s[self._to_index] e._from=s[self._from_index] e.text=unicode(s[self._text_index], errors='ignore') self._data[e.id]=e #------------------------------------------------------------------------------- class SMSList(object): def __init__(self, phone): self._phone=phone self._inbox=SMS_Inbox_List(phone) self._saved=SMS_Saved_List(phone) self._sent=SMS_Sent_List(phone) self._data={} def get(self): return self._data.copy() def read(self): self._inbox.read() self._data.update(self._inbox.get()) self._saved.read() self._data.update(self._saved.get()) self._sent.read() self._data.update(self._sent.get()) #------------------------------------------------------------------------------- class CannedMsgList(SMS_Generic_List): _max_entries=20 _valid_range=xrange(_max_entries) _field_num=4 _text_index=3 _data_key='canned_msg' _max_write_fields=3 _count_index=0 _timestamp_index=1 _write_text_index=2 def __init__(self, phone, data={}): super(CannedMsgList, self).__init__(phone) self._data=data def read(self): msg_list=[] for i in self._valid_range: self._phone.progress(i, self._max_entries, 'Reading SMS Canned Msg '+str(i)) s=self._phone.get_canned_msg(i) if len(s)==self._field_num: msg_list.append({'text': s[self._text_index], 'type': sms.CannedMsgEntry.user_type }) self._data=msg_list def get(self): return copy.deepcopy(self._data, _nil=[]) def validate(self): pass def write(self): msg_lst=[x['text'] for x in self._data if x['type']==sms.CannedMsgEntry.user_type] k=None for k,n in enumerate(msg_lst): if k>=self._max_entries: # enough of that break n=n.replace('"', '') self._phone.progress(k, self._max_entries, 'Writing SMS Canned Msg '+str(k)) s=`k`+','+self._phone.get_time_stamp()+',"'+n+'"' if not self._phone.save_canned_msg(s): self._phone.log('Failed to write SMS Canned Msg entry: '+str(k)) if k is None: k=0 else: k+=1 for i in xrange(k, self._max_entries): self._phone.progress(i, self._max_entries, 'Deleting SMS Canned Msg entry: '+str(i)) self._phone.save_canned_msg(`i`) #------------------------------------------------------------------------------- bitpim-1.0.7+dfsg1/src/phones/p_lgvx5500.py0000644001616600161660000012371611273577630016442 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VX5500""" from p_lgvx9700 import * # same as the VX-9700 except as noted below class pbfileentry(BaseProtogenClass): __fields=['entry_tag', 'mod_date', 'unk0', 'entry_number1', 'entry_number0', 'name', 'group', 'emails', 'ringtone', 'wallpaper', 'numbertypes', 'numberindices', 'memo', 'exit_tag', 'dontcare'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbfileentry,self).__init__(**dict) if self.__class__ is pbfileentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbfileentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbfileentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry_tag except: self.__field_entry_tag=STRING(**{'sizeinbytes': 5, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff\xff' }) self.__field_entry_tag.writetobuffer(buf) if self.entry_tag==PB_ENTRY_SOR: try: self.__field_mod_date except: self.__field_mod_date=PBDateTime(**{ 'defaulttocurrenttime': True }) self.__field_mod_date.writetobuffer(buf) try: self.__field_unk0 except: self.__field_unk0=STRING(**{'sizeinbytes': 6, 'terminator': None, 'default': '\xff\xff\xff\xff\xff\xff' }) self.__field_unk0.writetobuffer(buf) self.__field_entry_number1.writetobuffer(buf) self.__field_entry_number0.writetobuffer(buf) try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 66, 'encoding': 'utf_16_le', 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_name.writetobuffer(buf) try: self.__field_group except: self.__field_group=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_group.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx5500_29, 'length': NUMEMAILS}) self.__field_emails.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_ringtone.writetobuffer(buf) try: self.__field_wallpaper except: self.__field_wallpaper=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_wallpaper.writetobuffer(buf) try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx5500_33, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.writetobuffer(buf) try: self.__field_numberindices except: self.__field_numberindices=LIST(**{'elementclass': _gen_p_lgvx5500_35, 'length': NUMPHONENUMBERS}) self.__field_numberindices.writetobuffer(buf) try: self.__field_memo except: self.__field_memo=USTRING(**{'sizeinbytes': 36, 'raiseonunterminatedread': False, 'default': '', 'encoding': PHONE_ENCODING }) self.__field_memo.writetobuffer(buf) try: self.__field_exit_tag except: self.__field_exit_tag=USTRING(**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) self.__field_exit_tag.writetobuffer(buf) else: try: self.__field_dontcare except: self.__field_dontcare=DATA(**{'sizeinbytes': 251, 'default': '\xff'*251 }) self.__field_dontcare.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry_tag=STRING(**{'sizeinbytes': 5, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff\xff' }) self.__field_entry_tag.readfrombuffer(buf) if self.entry_tag==PB_ENTRY_SOR: self.__field_mod_date=PBDateTime(**{ 'defaulttocurrenttime': True }) self.__field_mod_date.readfrombuffer(buf) self.__field_unk0=STRING(**{'sizeinbytes': 6, 'terminator': None, 'default': '\xff\xff\xff\xff\xff\xff' }) self.__field_unk0.readfrombuffer(buf) self.__field_entry_number1=UINT(**{'sizeinbytes': 4}) self.__field_entry_number1.readfrombuffer(buf) self.__field_entry_number0=UINT(**{'sizeinbytes': 2}) self.__field_entry_number0.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 66, 'encoding': 'utf_16_le', 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_name.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_group.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx5500_29, 'length': NUMEMAILS}) self.__field_emails.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_ringtone.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_wallpaper.readfrombuffer(buf) self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx5500_33, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.readfrombuffer(buf) self.__field_numberindices=LIST(**{'elementclass': _gen_p_lgvx5500_35, 'length': NUMPHONENUMBERS}) self.__field_numberindices.readfrombuffer(buf) self.__field_memo=USTRING(**{'sizeinbytes': 36, 'raiseonunterminatedread': False, 'default': '', 'encoding': PHONE_ENCODING }) self.__field_memo.readfrombuffer(buf) self.__field_exit_tag=USTRING(**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) self.__field_exit_tag.readfrombuffer(buf) else: self.__field_dontcare=DATA(**{'sizeinbytes': 251, 'default': '\xff'*251 }) self.__field_dontcare.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry_tag(self): try: self.__field_entry_tag except: self.__field_entry_tag=STRING(**{'sizeinbytes': 5, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff\xff' }) return self.__field_entry_tag.getvalue() def __setfield_entry_tag(self, value): if isinstance(value,STRING): self.__field_entry_tag=value else: self.__field_entry_tag=STRING(value,**{'sizeinbytes': 5, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': '\xff\xff\xff\xff\xff' }) def __delfield_entry_tag(self): del self.__field_entry_tag entry_tag=property(__getfield_entry_tag, __setfield_entry_tag, __delfield_entry_tag, None) def __getfield_mod_date(self): try: self.__field_mod_date except: self.__field_mod_date=PBDateTime(**{ 'defaulttocurrenttime': True }) return self.__field_mod_date.getvalue() def __setfield_mod_date(self, value): if isinstance(value,PBDateTime): self.__field_mod_date=value else: self.__field_mod_date=PBDateTime(value,**{ 'defaulttocurrenttime': True }) def __delfield_mod_date(self): del self.__field_mod_date mod_date=property(__getfield_mod_date, __setfield_mod_date, __delfield_mod_date, None) def __getfield_unk0(self): try: self.__field_unk0 except: self.__field_unk0=STRING(**{'sizeinbytes': 6, 'terminator': None, 'default': '\xff\xff\xff\xff\xff\xff' }) return self.__field_unk0.getvalue() def __setfield_unk0(self, value): if isinstance(value,STRING): self.__field_unk0=value else: self.__field_unk0=STRING(value,**{'sizeinbytes': 6, 'terminator': None, 'default': '\xff\xff\xff\xff\xff\xff' }) def __delfield_unk0(self): del self.__field_unk0 unk0=property(__getfield_unk0, __setfield_unk0, __delfield_unk0, None) def __getfield_entry_number1(self): return self.__field_entry_number1.getvalue() def __setfield_entry_number1(self, value): if isinstance(value,UINT): self.__field_entry_number1=value else: self.__field_entry_number1=UINT(value,**{'sizeinbytes': 4}) def __delfield_entry_number1(self): del self.__field_entry_number1 entry_number1=property(__getfield_entry_number1, __setfield_entry_number1, __delfield_entry_number1, None) def __getfield_entry_number0(self): return self.__field_entry_number0.getvalue() def __setfield_entry_number0(self, value): if isinstance(value,UINT): self.__field_entry_number0=value else: self.__field_entry_number0=UINT(value,**{'sizeinbytes': 2}) def __delfield_entry_number0(self): del self.__field_entry_number0 entry_number0=property(__getfield_entry_number0, __setfield_entry_number0, __delfield_entry_number0, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 66, 'encoding': 'utf_16_le', 'raiseonunterminatedread': False, 'raiseontruncate': False }) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 66, 'encoding': 'utf_16_le', 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_group(self): try: self.__field_group except: self.__field_group=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx5500_29, 'length': NUMEMAILS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_lgvx5500_29, 'length': NUMEMAILS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_wallpaper(self): try: self.__field_wallpaper except: self.__field_wallpaper=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_numbertypes(self): try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx5500_33, 'length': NUMPHONENUMBERS}) return self.__field_numbertypes.getvalue() def __setfield_numbertypes(self, value): if isinstance(value,LIST): self.__field_numbertypes=value else: self.__field_numbertypes=LIST(value,**{'elementclass': _gen_p_lgvx5500_33, 'length': NUMPHONENUMBERS}) def __delfield_numbertypes(self): del self.__field_numbertypes numbertypes=property(__getfield_numbertypes, __setfield_numbertypes, __delfield_numbertypes, None) def __getfield_numberindices(self): try: self.__field_numberindices except: self.__field_numberindices=LIST(**{'elementclass': _gen_p_lgvx5500_35, 'length': NUMPHONENUMBERS}) return self.__field_numberindices.getvalue() def __setfield_numberindices(self, value): if isinstance(value,LIST): self.__field_numberindices=value else: self.__field_numberindices=LIST(value,**{'elementclass': _gen_p_lgvx5500_35, 'length': NUMPHONENUMBERS}) def __delfield_numberindices(self): del self.__field_numberindices numberindices=property(__getfield_numberindices, __setfield_numberindices, __delfield_numberindices, None) def __getfield_memo(self): try: self.__field_memo except: self.__field_memo=USTRING(**{'sizeinbytes': 36, 'raiseonunterminatedread': False, 'default': '', 'encoding': PHONE_ENCODING }) return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,USTRING): self.__field_memo=value else: self.__field_memo=USTRING(value,**{'sizeinbytes': 36, 'raiseonunterminatedread': False, 'default': '', 'encoding': PHONE_ENCODING }) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def __getfield_exit_tag(self): try: self.__field_exit_tag except: self.__field_exit_tag=USTRING(**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) return self.__field_exit_tag.getvalue() def __setfield_exit_tag(self, value): if isinstance(value,USTRING): self.__field_exit_tag=value else: self.__field_exit_tag=USTRING(value,**{'sizeinbytes': 6, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) def __delfield_exit_tag(self): del self.__field_exit_tag exit_tag=property(__getfield_exit_tag, __setfield_exit_tag, __delfield_exit_tag, None) def __getfield_dontcare(self): try: self.__field_dontcare except: self.__field_dontcare=DATA(**{'sizeinbytes': 251, 'default': '\xff'*251 }) return self.__field_dontcare.getvalue() def __setfield_dontcare(self, value): if isinstance(value,DATA): self.__field_dontcare=value else: self.__field_dontcare=DATA(value,**{'sizeinbytes': 251, 'default': '\xff'*251 }) def __delfield_dontcare(self): del self.__field_dontcare dontcare=property(__getfield_dontcare, __setfield_dontcare, __delfield_dontcare, None) def iscontainer(self): return True def containerelements(self): yield ('entry_tag', self.__field_entry_tag, None) if self.entry_tag==PB_ENTRY_SOR: yield ('mod_date', self.__field_mod_date, None) yield ('unk0', self.__field_unk0, None) yield ('entry_number1', self.__field_entry_number1, None) yield ('entry_number0', self.__field_entry_number0, None) yield ('name', self.__field_name, None) yield ('group', self.__field_group, None) yield ('emails', self.__field_emails, None) yield ('ringtone', self.__field_ringtone, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('numbertypes', self.__field_numbertypes, None) yield ('numberindices', self.__field_numberindices, None) yield ('memo', self.__field_memo, None) yield ('exit_tag', self.__field_exit_tag, None) else: yield ('dontcare', self.__field_dontcare, None) def valid(self): global PB_ENTRY_SOR return self.entry_tag==PB_ENTRY_SOR and ord(self.name[0]) != 0xff class _gen_p_lgvx5500_29(BaseProtogenClass): 'Anonymous inner class' __fields=['email'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx5500_29,self).__init__(**dict) if self.__class__ is _gen_p_lgvx5500_29: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx5500_29,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx5500_29,kwargs) if len(args): dict2={'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_email=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_email.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_email=USTRING(**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_email.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def iscontainer(self): return True def containerelements(self): yield ('email', self.__field_email, None) class _gen_p_lgvx5500_33(BaseProtogenClass): 'Anonymous inner class' __fields=['numbertype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx5500_33,self).__init__(**dict) if self.__class__ is _gen_p_lgvx5500_33: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx5500_33,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx5500_33,kwargs) if len(args): dict2={'sizeinbytes': 1, 'default': 0 } dict2.update(kwargs) kwargs=dict2 self.__field_numbertype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numbertype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numbertype=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_numbertype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numbertype(self): return self.__field_numbertype.getvalue() def __setfield_numbertype(self, value): if isinstance(value,UINT): self.__field_numbertype=value else: self.__field_numbertype=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_numbertype(self): del self.__field_numbertype numbertype=property(__getfield_numbertype, __setfield_numbertype, __delfield_numbertype, None) def iscontainer(self): return True def containerelements(self): yield ('numbertype', self.__field_numbertype, None) class _gen_p_lgvx5500_35(BaseProtogenClass): 'Anonymous inner class' __fields=['numberindex'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx5500_35,self).__init__(**dict) if self.__class__ is _gen_p_lgvx5500_35: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx5500_35,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx5500_35,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff } dict2.update(kwargs) kwargs=dict2 self.__field_numberindex=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numberindex.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numberindex=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_numberindex.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numberindex(self): return self.__field_numberindex.getvalue() def __setfield_numberindex(self, value): if isinstance(value,UINT): self.__field_numberindex=value else: self.__field_numberindex=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_numberindex(self): del self.__field_numberindex numberindex=property(__getfield_numberindex, __setfield_numberindex, __delfield_numberindex, None) def iscontainer(self): return True def containerelements(self): yield ('numberindex', self.__field_numberindex, None) class pbfile(BaseProtogenClass): __fields=['items', 'eof_tag', 'model_name', 'mod_date', 'blanks', 'eof_close_tag'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbfile,self).__init__(**dict) if self.__class__ is pbfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbfile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': pbfileentry, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_items.writetobuffer(buf) try: self.__field_eof_tag except: self.__field_eof_tag=STRING(**{'sizeinbytes': 6, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_eof_tag.writetobuffer(buf) try: self.__field_model_name except: self.__field_model_name=STRING(**{'sizeinbytes': 10, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_model_name.writetobuffer(buf) try: self.__field_mod_date except: self.__field_mod_date=PBDateTime(**{ 'defaulttocurrenttime': True }) self.__field_mod_date.writetobuffer(buf) try: self.__field_blanks except: self.__field_blanks=DATA(**{'sizeinbytes': 221, 'default': '\x00'*221 }) self.__field_blanks.writetobuffer(buf) try: self.__field_eof_close_tag except: self.__field_eof_close_tag=STRING(**{'sizeinbytes': 7, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_eof_close_tag.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': pbfileentry, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self.__field_eof_tag=STRING(**{'sizeinbytes': 6, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_eof_tag.readfrombuffer(buf) self.__field_model_name=STRING(**{'sizeinbytes': 10, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_model_name.readfrombuffer(buf) self.__field_mod_date=PBDateTime(**{ 'defaulttocurrenttime': True }) self.__field_mod_date.readfrombuffer(buf) self.__field_blanks=DATA(**{'sizeinbytes': 221, 'default': '\x00'*221 }) self.__field_blanks.readfrombuffer(buf) self.__field_eof_close_tag=STRING(**{'sizeinbytes': 7, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_eof_close_tag.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': pbfileentry, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': pbfileentry, 'length': NUMPHONEBOOKENTRIES, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def __getfield_eof_tag(self): try: self.__field_eof_tag except: self.__field_eof_tag=STRING(**{'sizeinbytes': 6, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) return self.__field_eof_tag.getvalue() def __setfield_eof_tag(self, value): if isinstance(value,STRING): self.__field_eof_tag=value else: self.__field_eof_tag=STRING(value,**{'sizeinbytes': 6, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_eof_tag(self): del self.__field_eof_tag eof_tag=property(__getfield_eof_tag, __setfield_eof_tag, __delfield_eof_tag, None) def __getfield_model_name(self): try: self.__field_model_name except: self.__field_model_name=STRING(**{'sizeinbytes': 10, 'raiseonunterminatedread': False, 'raiseontruncate': False }) return self.__field_model_name.getvalue() def __setfield_model_name(self, value): if isinstance(value,STRING): self.__field_model_name=value else: self.__field_model_name=STRING(value,**{'sizeinbytes': 10, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_model_name(self): del self.__field_model_name model_name=property(__getfield_model_name, __setfield_model_name, __delfield_model_name, None) def __getfield_mod_date(self): try: self.__field_mod_date except: self.__field_mod_date=PBDateTime(**{ 'defaulttocurrenttime': True }) return self.__field_mod_date.getvalue() def __setfield_mod_date(self, value): if isinstance(value,PBDateTime): self.__field_mod_date=value else: self.__field_mod_date=PBDateTime(value,**{ 'defaulttocurrenttime': True }) def __delfield_mod_date(self): del self.__field_mod_date mod_date=property(__getfield_mod_date, __setfield_mod_date, __delfield_mod_date, None) def __getfield_blanks(self): try: self.__field_blanks except: self.__field_blanks=DATA(**{'sizeinbytes': 221, 'default': '\x00'*221 }) return self.__field_blanks.getvalue() def __setfield_blanks(self, value): if isinstance(value,DATA): self.__field_blanks=value else: self.__field_blanks=DATA(value,**{'sizeinbytes': 221, 'default': '\x00'*221 }) def __delfield_blanks(self): del self.__field_blanks blanks=property(__getfield_blanks, __setfield_blanks, __delfield_blanks, None) def __getfield_eof_close_tag(self): try: self.__field_eof_close_tag except: self.__field_eof_close_tag=STRING(**{'sizeinbytes': 7, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) return self.__field_eof_close_tag.getvalue() def __setfield_eof_close_tag(self, value): if isinstance(value,STRING): self.__field_eof_close_tag=value else: self.__field_eof_close_tag=STRING(value,**{'sizeinbytes': 7, 'default': '', 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_eof_close_tag(self): del self.__field_eof_close_tag eof_close_tag=property(__getfield_eof_close_tag, __setfield_eof_close_tag, __delfield_eof_close_tag, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) yield ('eof_tag', self.__field_eof_tag, None) yield ('model_name', self.__field_model_name, None) yield ('mod_date', self.__field_mod_date, None) yield ('blanks', self.__field_blanks, None) yield ('eof_close_tag', self.__field_eof_close_tag, None) class pbgroup(BaseProtogenClass): __fields=['name', 'groupid', 'user_added'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroup,self).__init__(**dict) if self.__class__ is pbgroup: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroup,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroup,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 66, 'encoding': 'utf_16_le', 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) self.__field_name.writetobuffer(buf) try: self.__field_groupid except: self.__field_groupid=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_groupid.writetobuffer(buf) try: self.__field_user_added except: self.__field_user_added=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_user_added.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_name=USTRING(**{'sizeinbytes': 66, 'encoding': 'utf_16_le', 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) self.__field_name.readfrombuffer(buf) self.__field_groupid=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_groupid.readfrombuffer(buf) self.__field_user_added=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_user_added.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 66, 'encoding': 'utf_16_le', 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 66, 'encoding': 'utf_16_le', 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': ''}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_groupid(self): try: self.__field_groupid except: self.__field_groupid=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_groupid.getvalue() def __setfield_groupid(self, value): if isinstance(value,UINT): self.__field_groupid=value else: self.__field_groupid=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_groupid(self): del self.__field_groupid groupid=property(__getfield_groupid, __setfield_groupid, __delfield_groupid, None) def __getfield_user_added(self): try: self.__field_user_added except: self.__field_user_added=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_user_added.getvalue() def __setfield_user_added(self, value): if isinstance(value,UINT): self.__field_user_added=value else: self.__field_user_added=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_user_added(self): del self.__field_user_added user_added=property(__getfield_user_added, __setfield_user_added, __delfield_user_added, "=1 when was added by user") def iscontainer(self): return True def containerelements(self): yield ('name', self.__field_name, None) yield ('groupid', self.__field_groupid, None) yield ('user_added', self.__field_user_added, "=1 when was added by user") class pbgroups(BaseProtogenClass): "Phonebook groups" __fields=['groups'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroups,self).__init__(**dict) if self.__class__ is pbgroups: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroups,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroups,kwargs) if len(args): dict2={'elementclass': pbgroup, 'raiseonincompleteread': False, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_groups=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup, 'raiseonincompleteread': False, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True}) self.__field_groups.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_groups=LIST(**{'elementclass': pbgroup, 'raiseonincompleteread': False, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True}) self.__field_groups.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_groups(self): try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup, 'raiseonincompleteread': False, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True}) return self.__field_groups.getvalue() def __setfield_groups(self, value): if isinstance(value,LIST): self.__field_groups=value else: self.__field_groups=LIST(value,**{'elementclass': pbgroup, 'raiseonincompleteread': False, 'length': MAX_PHONEBOOK_GROUPS, 'createdefault': True}) def __delfield_groups(self): del self.__field_groups groups=property(__getfield_groups, __setfield_groups, __delfield_groups, None) def iscontainer(self): return True def containerelements(self): yield ('groups', self.__field_groups, None) bitpim-1.0.7+dfsg1/src/phones/com_sanyo6600.py0000644001616600161660000006226510735075055017131 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_sanyo6600.py 4531 2007-12-28 04:23:09Z sawecw $ """Talk to the Sanyo Katana (SCP-6600) cell phone""" # standard modules import re import time import sha # my modules import common import helpids import p_brew import p_sanyo8300 import p_sanyo4930 import p_sanyo6600 import com_brew import com_phone import com_sanyo import com_sanyomedia import com_sanyonewer import com_sanyo3100 import prototypes import bpcalendar numbertypetab=( 'cell', 'home', 'office', 'pager', 'fax', 'none') class Phone(com_sanyo3100.Phone): "Talk to the Sanyo Katana (SCP-6600) cell phone" desc="SCP-6600" helpid=helpids.ID_PHONE_SANYOSCP6600 FIRST_MEDIA_DIRECTORY=1 LAST_MEDIA_DIRECTORY=2 imagelocations=( # offset, directory #, indexflag, type, maximumentries ) wallpaperexts=(".jpg", ".png", ".mp4", ".3g2",".JPG") protocolclass=p_sanyo6600 serialsname='scp6600' builtinringtones=( 'None', 'Vibrate', '', '', '', '', '', '', '', 'Tone 1', 'Tone 2', 'Tone 3', 'Tone 4', 'Tone 5', 'Tone 6', 'Tone 7', 'Tone 8', '', '', '', '', '', '', '', '', '', 'Requiem:Dies Irae', 'Minute Waltz', 'Hungarian Dance', 'Military March', 'Ten Little Indians', 'Head,Shoulders,Knees&Toes', 'The Moment', 'Asian Jingle', 'Kung-fu','','','','','','','','','','','','','','','','','', '','','','','','', 'Voice Alarm') # f1ff None 65521 # FFF2: Vibrate 65522 # pb cal # Tone 1: 33 43 # Requium: 60 60 # Kung Fu: 68 # Download: 135 calendar_defaultringtone=0 calendar_defaultcaringtone=0 calendar_toneoffset=33 calendar_tonerange=xrange(4,100) def __init__(self, logtarget, commport): com_sanyo3100.Phone.__init__(self, logtarget, commport) self.mode=self.MODENONE self.numbertypetab=numbertypetab def getfundamentals(self, results): """Gets information fundamental to interopating with the phone and UI.""" results['uniqueserial']=sha.new(self.get_esn()).hexdigest() self.getmediaindices(results) results['groups']=self.read_groups() self.log("Fundamentals retrieved") return results def read_groups(self): g={} req=self.protocolclass.grouprequest() for slot in range(1,self.protocolclass.NUMGROUPS+1): req.slot = slot res=self.sendpbcommand(req, self.protocolclass.groupresponse) if res.entry.groupname_len: g[slot]={'name': res.entry.groupname} return g def savegroups(self, data): """Write the groups, sending only those groups that have had a name change. (So that ringers don't get messed up)""" groups=data['groups'] groups_onphone=self.read_groups() # Get groups on phone # If groups read doesn't work, don't try to write groups if not groups_onphone: return keys=groups.keys() keys.sort() print "Bitpim group keys",keys print "Onphone group keys",groups_onphone.keys() for k in keys: if groups[k]['name']!="Unassigned": if not groups_onphone.has_key(k) \ or groups[k]['name']!=groups_onphone[k]['name']: print "Wrinting ",groups[k]['name']," to ",k req=self.protocolclass.groupupdaterequest() req.slot=k req.entry.slot=k req.entry.groupname=groups[k]['name'] req.entry.groupname_len=len(groups[k]['name']) self.sendpbcommand(req, self.protocolclass.groupresponse) groups_onphone[k]=groups[k] data['groups']=groups_onphone def xgetmediaindices(self, results): "Just index builtin media for now." com_sanyo.SanyoPhonebook.getmediaindices(self, results) ringermedia=results['ringtone-index'] imagemedia=results['wallpaper-index'] results['ringtone-index']=ringermedia results['wallpaper-index']=imagemedia return def getphonebook(self, result): "Code to retrieve packets we have discovered so far so we can work out their formats." pbook={} sortstuff = self.getsanyobuffer(self.protocolclass.pbsortbuffer) speedslot=[] for i in range(self.protocolclass._NUMSPEEDDIALS): speedslot.append(sortstuff.speeddialindex[i].numslot) numentries=sortstuff.slotsused self.log("There are %d entries" % (numentries,)) count = 0 # Number of phonebook entries numcount = 0 # Number of phone numbers numemail = 0 # Number of emails numurl = 0 # Number of urls self.log(`sortstuff.groupslotsused`+" Groups") self.log(`sortstuff.slotsused`+" Contacts") self.log(`sortstuff.nameslotsused`+" Names") self.log(`sortstuff.numslotsused`+" Phone numbers") self.log(`sortstuff.emailslotsused`+" Email addresses") self.log(`sortstuff.urlslotsused`+" URLs") self.log(`sortstuff.num_address`+" Addresses") self.log(`sortstuff.num_memo`+" Memos") numentries=sortstuff.slotsused reqindex=self.protocolclass.contactindexrequest() reqname=self.protocolclass.namerequest() reqnumber=self.protocolclass.numberrequest() reqemail=self.protocolclass.emailrequest() requrl=self.protocolclass.urlrequest() reqmemo=self.protocolclass.memorequest() reqaddress=self.protocolclass.addressrequest() for slot in range(self.protocolclass.NUMPHONEBOOKENTRIES): if sortstuff.usedflags[slot].used: entry={} reqindex.slot=slot resindex=self.sendpbcommand(reqindex,self.protocolclass.contactindexresponse) ringerid = resindex.entry.ringerid pictureid = resindex.entry.pictureid groupid = resindex.entry.groupid if resindex.entry.namep>=0 and resindex.entry.namep= 0 and slot < self.protocolclass.NUMPHONEBOOKENTRIES): slotsused[slot]=1 lastunused=0 # One more than last unused slot for pbentry in pb: e={} # entry out entry=pb[pbentry] # entry in try: try: e['name']=helper.getfullname(entry.get('names', []),1,1,32)[0] except: e['name']='' e['name_len']=len(e['name']) if len(e['name'])==0: print "Entry with no name" cat=helper.makeone(helper.getcategory(entry.get('categories',[]),0,1,16), None) if cat is None: e['group']=0 else: key,value=self._getgroup(cat, data['groups']) if key is not None: e['group']=key else: e['group']=0 serial1=helper.getserial(entry.get('serials', []), self.serialsname, data['uniqueserial'], 'slot', -1) if(slot >= 0 and slot < self.protocolclass.NUMPHONEBOOKENTRIES): e['slot']=slot else: # A new entry. Must find unused slot while(slotsused.has_key(lastunused)): lastunused+=1 if(lastunused >= self.protocolclass.NUMPHONEBOOKENTRIES): raise helper.ConversionFailed() e['slot']=lastunused slotsused[lastunused]=1 e['emails']=helper.getemails(entry.get('emails', []),0,self.protocolclass.NUMEMAILS,self.protocolclass.MAXEMAILLEN) e['url']=helper.makeone(helper.geturls(entry.get('urls', []), 0,1,self.protocolclass.MAXURLLEN), "") e['memo']=helper.makeone(helper.getmemos(entry.get('memos', []), 0,1,self.protocolclass.MAXMEMOLEN), "") numbers=helper.getnumbers(entry.get('numbers', []),0,self.protocolclass.NUMPHONENUMBERS) e['numbertypes']=[] e['numbers']=[] e['numberspeeds']=[] for numindex in range(len(numbers)): num=numbers[numindex] type=num['type'] numtype=len(self.numbertypetab) # None type is default for i,t in enumerate(self.numbertypetab): if type==t: numtype=i+1 break # If type not found, give it "none" type e['numbertypes'].append(numtype) # Need to enforce phone number length limit number=self.phonize(num['number']) e['numbers'].append(number) # deal with speed dial sd=num.get("speeddial", 0xFF) if sd>=self.protocolclass.FIRSTSPEEDDIAL and sd<=self.protocolclass.LASTSPEEDDIAL: e['numberspeeds'].append(sd) else: e['numberspeeds'].append(0) #e['numberspeeds']=helper.filllist(e['numberspeeds'], self.protocolclass.NUMPHONENUMBERS, 0xFF) #e['numbertypes']=helper.filllist(e['numbertypes'], self.protocolclass.NUMPHONENUMBERS, 0) #e['numbers']=helper.filllist(e['numbers'], self.protocolclass.NUMPHONENUMBERS, "") # Need to write a helper e['address']=None addresses=entry.get('addresses', []) if addresses: e['address']=helper.getflag(addresses,'company','')+";"+helper.getflag(addresses,'street','')+";"+helper.getflag(addresses,'street2','')+";"+helper.getflag(addresses,'city','')+";"+helper.getflag(addresses,'state','')+";"+helper.getflag(addresses,'postalcode','')+";"+helper.getflag(addresses,'country','') e['ringtone']=helper.getringtone(entry.get('ringtones', []), 'call', None) e['wallpaper']=helper.getwallpaper(entry.get('wallpapers', []), 'call', None) e['secret']=helper.getflag(entry.get('flags', []), 'secret', False) results[pbentry]=e except helper.ConversionFailed: #self.log("No Free Slot for "+e['name']) print "No Free Slot for "+e['name'] continue data['phonebook']=results return data bitpim-1.0.7+dfsg1/src/phones/com_motov3c.py0000644001616600161660000000203110626435215017034 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_motov3c.py 4255 2007-05-28 02:12:29Z djpham $ """Communicate with Motorola V3c phones using AT commands""" # system modules # BitPim modules import com_motov710 import p_motov3c import helpids parentphone=com_motov710.Phone class Phone(parentphone): desc='Moto-V3c' helpid=helpids.ID_PHONE_MOTOV3C serialsname='motov3c' protocolclass=p_motov3c def __init__(self, logtarget, commport): parentphone.__init__(self, logtarget, commport) #------------------------------------------------------------------------------ parentprofile=com_motov710.Profile class Profile(parentprofile): serialsname=Phone.serialsname # use for auto-detection phone_manufacturer='Motorola' phone_model='V3c ' common_model_name='V3c' generic_phone_model='Motorola CDMA V3c Phone' bitpim-1.0.7+dfsg1/src/phones/com_motov3m.py0000644001616600161660000000733510735610475017066 0ustar amuamu### BITPIM ### ### Copyright (C) 2007 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_motov3m.py 4537 2007-12-30 03:32:13Z djpham $ """Communicate with Motorola phones using AT commands""" import common import com_motov710 as v710 import helpids import fileinfo import p_motov3m import prototypes parentphone=v710.Phone class Phone(parentphone): desc='Moto-V3m' helpid=helpids.ID_PHONE_MOTOV3M protocolclass=p_motov3m serialsname='motov3m' builtinringtones=( (0, ('Silent',)), (5, ('Vibe Dot', 'Vibe Dash', 'Vibe Dot Dot', 'Vibe Dot Dash', 'Vibe Pulse')), ) def __init__(self, logtarget, commport): parentphone.__init__(self, logtarget, commport) def _get_wallpaper_index(self): res={} _files=self.listfiles(self.protocolclass.WP_PATH).keys() _files.sort() for _index,_filename in enumerate(_files): _name=common.basename(_filename) if self.protocolclass.valid_wp_filename(_name): res[_index]={ 'name': _name, 'filename': _filename, 'origin': 'images' } return res def _get_ringtone_index(self): res={} # first the builtin ones for _l in self.builtinringtones: _idx=_l[0] for _e in _l[1]: res[_idx]={ 'name': _e, 'origin': 'builtin' } _idx+=1 # now the custome one _buf=prototypes.buffer(self.getfilecontents( self.protocolclass.RT_INDEX_FILE)) _idx_file=self.protocolclass.ringtone_index_file() _idx_file.readfrombuffer(_buf, logtitle='Read ringtone index file') for _entry in _idx_file.items: _filename=self.decode_utf16(_entry.name) _name=common.basename(_filename) if self.protocolclass.valid_rt_filename(_name): res[_entry.index]={ 'name': _name, 'filename': _filename, 'type': _entry.ringtone_type, 'origin': 'ringers' } return res #------------------------------------------------------------------------------- parentprofile=v710.Profile class Profile(parentprofile): serialsname=Phone.serialsname # use for auto-detection phone_manufacturer='Motorola' phone_model='V3m ' common_model_name='V3m' generic_phone_model='Motorola CDMA V3m Phone' # fill in the list of ringtone/sound origins on your phone ringtoneorigins=('ringers',) # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 176, 'height': 184, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", {'width': 96, 'height': 72, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "fullscreen", {'width': 176, 'height': 220, 'format': "JPEG"})) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'read', None), # all calendar reading ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'read', None), # all wallpaper reading ('wallpaper', 'write', 'OVERWRITE'), ('sms', 'read', None), # all SMS list reading DJP ) bitpim-1.0.7+dfsg1/src/phones/com_motov3t.py0000644001616600161660000000362710557547001017071 0ustar amuamu### BITPIM ### ### Copyright (C) 2007 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_motov3c.py 3460 2006-07-08 23:55:09Z djpham $ """Motorola V3t GSM phone""" import common import com_moto_gsm class Phone(com_moto_gsm.Phone): """Talk to a Motorola RAZR V3t GSM phone""" desc="Moto-RAZR-V3t" serialsname="motov3t" def __init__(self, logtarget, commport): com_moto_gsm.Phone.__init__(self, logtarget, commport) parentprofile=com_moto_gsm.Profile class Profile(parentprofile): serialsname=Phone.serialsname WALLPAPER_WIDTH=176 WALLPAPER_HEIGHT=220 MAX_WALLPAPER_BASENAME_LENGTH=37 WALLPAPER_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789()_ .-" WALLPAPER_CONVERT_FORMAT="jpg" # Motorola USB device usbids=( ( 0x22B8, 0x4902, 1), ) deviceclasses=("modem",) # use for auto-detection phone_manufacturer='Motorola' phone_model='V3t ' common_model_name='V710' generic_phone_model='Motorola CDMA v710 Phone' def __init__(self): super(Profile, self).__init__() # all dumped in "images" imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) def GetImageOrigins(self): return self.imageorigins # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 176, 'height': 200, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "fullscreen", {'width': 176, 'height': 220, 'format': "JPEG"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets bitpim-1.0.7+dfsg1/src/phones/com_sanyo6650.py0000644001616600161660000000504611012443120017105 0ustar amuamu### BITPIM ### ### Copyright (C) 2007 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id$ """Talk to the Sanyo Katana-II (SCP-6650) cell phone""" # standard modules import re import time import sha # my modules import common import p_brew import p_sanyo8300 import p_sanyo4930 import p_sanyo6600 import p_sanyo6650 import com_brew import com_phone import com_sanyo import com_sanyomedia import com_sanyonewer import com_sanyo3100 import com_sanyo6600 import prototypes import bpcalendar numbertypetab=( 'cell', 'home', 'office', 'pager', 'fax', 'none') class Phone(com_sanyo6600.Phone): "Talk to the Sanyo Katana-II (SCP-6650) cell phone" desc="SCP-6650" FIRST_MEDIA_DIRECTORY=1 LAST_MEDIA_DIRECTORY=2 imagelocations=( # offset, directory #, indexflag, type, maximumentries ) wallpaperexts=(".jpg", ".png", ".mp4", ".3g2",".JPG") protocolclass=p_sanyo6650 serialsname='scp6650' builtinringtones=( 'None', 'Vibrate', '', '', '', '', '', '', '', 'Tone 1', 'Tone 2', 'Tone 3', 'Tone 4', 'Tone 5', 'Tone 6', 'Tone 7', 'Tone 8', '', '', '', '', '', '', '', '', '', 'Requiem:Dies Irae', 'Minute Waltz', 'Hungarian Dance', 'Military March', 'Ten Little Indians', 'Head,Shoulders,Knees&Toes', 'The Moment', 'Asian Jingle', 'Kung-fu','','','','','','','','','','','','','','','','','', '','','','','','', 'Voice Alarm') calendar_defaultringtone=0 calendar_defaultcaringtone=0 calendar_toneoffset=33 calendar_tonerange=xrange(4,100) def __init__(self, logtarget, commport): com_sanyo6600.Phone.__init__(self, logtarget, commport) self.mode=self.MODENONE self.numbertypetab=numbertypetab my_model='SCP6650' detected_model='SCP-6650/US' my_manufacturer='SANYO' parentprofile=com_sanyo6600.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer=Phone.my_manufacturer phone_model=Phone.my_model usbids=( ( 0x0474, 0x0745, 2),) # VID=Sanyo, deviceclasses=("serial",) def __init__(self): parentprofile.__init__(self) com_sanyonewer.Profile.__init__(self) self.numbertypetab=numbertypetab bitpim-1.0.7+dfsg1/src/phones/p_sanyo8100.py0000644001616600161660000013034610466234100016570 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Sanyo SCP-8100""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 _NUMCALLHISTORY=20 _MAXNUMBERLEN=48 _MAXEMAILLEN=48 class evententry(BaseProtogenClass): __fields=['slot', 'flag', 'eventname', 'pad1', 'eventname_len', 'start', 'end', 'location', 'pad2', 'location_len', 'pad3', 'alarmdiff', 'period', 'dom', 'alarm', 'serial', 'pad4', 'ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(evententry,self).__init__(**dict) if self.__class__ is evententry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(evententry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(evententry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) self.__field_eventname.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.writetobuffer(buf) self.__field_eventname_len.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_location.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad2.writetobuffer(buf) self.__field_location_len.writetobuffer(buf) try: self.__field_pad3 except: self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad3.writetobuffer(buf) self.__field_alarmdiff.writetobuffer(buf) self.__field_period.writetobuffer(buf) self.__field_dom.writetobuffer(buf) self.__field_alarm.writetobuffer(buf) try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.writetobuffer(buf) try: self.__field_pad4 except: self.__field_pad4=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad4.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_eventname=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_eventname.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.readfrombuffer(buf) self.__field_eventname_len=UINT(**{'sizeinbytes': 1}) self.__field_eventname_len.readfrombuffer(buf) self.__field_start=UINT(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=UINT(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_location=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_location.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad2.readfrombuffer(buf) self.__field_location_len=UINT(**{'sizeinbytes': 1}) self.__field_location_len.readfrombuffer(buf) self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad3.readfrombuffer(buf) self.__field_alarmdiff=UINT(**{'sizeinbytes': 4}) self.__field_alarmdiff.readfrombuffer(buf) self.__field_period=UINT(**{'sizeinbytes': 1}) self.__field_period.readfrombuffer(buf) self.__field_dom=UINT(**{'sizeinbytes': 1}) self.__field_dom.readfrombuffer(buf) self.__field_alarm=UINT(**{'sizeinbytes': 4}) self.__field_alarm.readfrombuffer(buf) self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.readfrombuffer(buf) self.__field_pad4=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad4.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, "0: Not used, 1: Scheduled, 2: Already Happened") def __getfield_eventname(self): return self.__field_eventname.getvalue() def __setfield_eventname(self, value): if isinstance(value,USTRING): self.__field_eventname=value else: self.__field_eventname=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_eventname(self): del self.__field_eventname eventname=property(__getfield_eventname, __setfield_eventname, __delfield_eventname, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_eventname_len(self): return self.__field_eventname_len.getvalue() def __setfield_eventname_len(self, value): if isinstance(value,UINT): self.__field_eventname_len=value else: self.__field_eventname_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_eventname_len(self): del self.__field_eventname_len eventname_len=property(__getfield_eventname_len, __setfield_eventname_len, __delfield_eventname_len, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,UINT): self.__field_start=value else: self.__field_start=UINT(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, "# seconds since Jan 1, 1980 approximately") def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,UINT): self.__field_end=value else: self.__field_end=UINT(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_location(self): return self.__field_location.getvalue() def __setfield_location(self, value): if isinstance(value,USTRING): self.__field_location=value else: self.__field_location=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_location(self): del self.__field_location location=property(__getfield_location, __setfield_location, __delfield_location, None) def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_location_len(self): return self.__field_location_len.getvalue() def __setfield_location_len(self, value): if isinstance(value,UINT): self.__field_location_len=value else: self.__field_location_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_location_len(self): del self.__field_location_len location_len=property(__getfield_location_len, __setfield_location_len, __delfield_location_len, None) def __getfield_pad3(self): try: self.__field_pad3 except: self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad3.getvalue() def __setfield_pad3(self, value): if isinstance(value,UNKNOWN): self.__field_pad3=value else: self.__field_pad3=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad3(self): del self.__field_pad3 pad3=property(__getfield_pad3, __setfield_pad3, __delfield_pad3, None) def __getfield_alarmdiff(self): return self.__field_alarmdiff.getvalue() def __setfield_alarmdiff(self, value): if isinstance(value,UINT): self.__field_alarmdiff=value else: self.__field_alarmdiff=UINT(value,**{'sizeinbytes': 4}) def __delfield_alarmdiff(self): del self.__field_alarmdiff alarmdiff=property(__getfield_alarmdiff, __setfield_alarmdiff, __delfield_alarmdiff, "Displayed alarm time") def __getfield_period(self): return self.__field_period.getvalue() def __setfield_period(self, value): if isinstance(value,UINT): self.__field_period=value else: self.__field_period=UINT(value,**{'sizeinbytes': 1}) def __delfield_period(self): del self.__field_period period=property(__getfield_period, __setfield_period, __delfield_period, "No, Daily, Weekly, Monthly, Yearly") def __getfield_dom(self): return self.__field_dom.getvalue() def __setfield_dom(self, value): if isinstance(value,UINT): self.__field_dom=value else: self.__field_dom=UINT(value,**{'sizeinbytes': 1}) def __delfield_dom(self): del self.__field_dom dom=property(__getfield_dom, __setfield_dom, __delfield_dom, "Day of month for the event") def __getfield_alarm(self): return self.__field_alarm.getvalue() def __setfield_alarm(self, value): if isinstance(value,UINT): self.__field_alarm=value else: self.__field_alarm=UINT(value,**{'sizeinbytes': 4}) def __delfield_alarm(self): del self.__field_alarm alarm=property(__getfield_alarm, __setfield_alarm, __delfield_alarm, None) def __getfield_serial(self): try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_serial.getvalue() def __setfield_serial(self, value): if isinstance(value,UINT): self.__field_serial=value else: self.__field_serial=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_serial(self): del self.__field_serial serial=property(__getfield_serial, __setfield_serial, __delfield_serial, "Some kind of serial number") def __getfield_pad4(self): try: self.__field_pad4 except: self.__field_pad4=UNKNOWN(**{'sizeinbytes': 3}) return self.__field_pad4.getvalue() def __setfield_pad4(self, value): if isinstance(value,UNKNOWN): self.__field_pad4=value else: self.__field_pad4=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_pad4(self): del self.__field_pad4 pad4=property(__getfield_pad4, __setfield_pad4, __delfield_pad4, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, "0: Not used, 1: Scheduled, 2: Already Happened") yield ('eventname', self.__field_eventname, None) yield ('pad1', self.__field_pad1, None) yield ('eventname_len', self.__field_eventname_len, None) yield ('start', self.__field_start, "# seconds since Jan 1, 1980 approximately") yield ('end', self.__field_end, None) yield ('location', self.__field_location, None) yield ('pad2', self.__field_pad2, None) yield ('location_len', self.__field_location_len, None) yield ('pad3', self.__field_pad3, None) yield ('alarmdiff', self.__field_alarmdiff, "Displayed alarm time") yield ('period', self.__field_period, "No, Daily, Weekly, Monthly, Yearly") yield ('dom', self.__field_dom, "Day of month for the event") yield ('alarm', self.__field_alarm, None) yield ('serial', self.__field_serial, "Some kind of serial number") yield ('pad4', self.__field_pad4, None) yield ('ringtone', self.__field_ringtone, None) class eventresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventresponse,self).__init__(**dict) if self.__class__ is eventresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=evententry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 432}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,evententry): self.__field_entry=value else: self.__field_entry=evententry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 432}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class eventupdaterequest(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventupdaterequest,self).__init__(**dict) if self.__class__ is eventupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'readwrite': 0x0e, 'packettype': 0x0c, 'command':0x23}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 432}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'readwrite': 0x0e, 'packettype': 0x0c, 'command':0x23}) self.__field_header.readfrombuffer(buf) self.__field_entry=evententry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 432}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'readwrite': 0x0e, 'packettype': 0x0c, 'command':0x23}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'readwrite': 0x0e, 'packettype': 0x0c, 'command':0x23}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,evententry): self.__field_entry=value else: self.__field_entry=evententry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 432}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 432}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class callalarmentry(BaseProtogenClass): __fields=['slot', 'flag', 'dunno1', 'phonenum', 'phonenum_len', 'date', 'period', 'dom', 'datedup', 'name', 'pad1', 'name_len', 'phonenumbertype', 'phonenumberslot', 'serial', 'pad2', 'ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmentry,self).__init__(**dict) if self.__class__ is callalarmentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_dunno1.writetobuffer(buf) self.__field_phonenum.writetobuffer(buf) self.__field_phonenum_len.writetobuffer(buf) self.__field_date.writetobuffer(buf) self.__field_period.writetobuffer(buf) self.__field_dom.writetobuffer(buf) self.__field_datedup.writetobuffer(buf) self.__field_name.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.writetobuffer(buf) self.__field_name_len.writetobuffer(buf) self.__field_phonenumbertype.writetobuffer(buf) self.__field_phonenumberslot.writetobuffer(buf) try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad2.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_dunno1=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_dunno1.readfrombuffer(buf) self.__field_phonenum=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_phonenum.readfrombuffer(buf) self.__field_phonenum_len=UINT(**{'sizeinbytes': 1}) self.__field_phonenum_len.readfrombuffer(buf) self.__field_date=UINT(**{'sizeinbytes': 4}) self.__field_date.readfrombuffer(buf) self.__field_period=UINT(**{'sizeinbytes': 1}) self.__field_period.readfrombuffer(buf) self.__field_dom=UINT(**{'sizeinbytes': 1}) self.__field_dom.readfrombuffer(buf) self.__field_datedup=UINT(**{'sizeinbytes': 4}) self.__field_datedup.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_name.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.readfrombuffer(buf) self.__field_name_len=UINT(**{'sizeinbytes': 1}) self.__field_name_len.readfrombuffer(buf) self.__field_phonenumbertype=UINT(**{'sizeinbytes': 1}) self.__field_phonenumbertype.readfrombuffer(buf) self.__field_phonenumberslot=UINT(**{'sizeinbytes': 2}) self.__field_phonenumberslot.readfrombuffer(buf) self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad2.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, "0: Not used, 1: Scheduled, 2: Already Happened") def __getfield_dunno1(self): try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UINT): self.__field_dunno1=value else: self.__field_dunno1=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, "Related to Snooze?") def __getfield_phonenum(self): return self.__field_phonenum.getvalue() def __setfield_phonenum(self, value): if isinstance(value,USTRING): self.__field_phonenum=value else: self.__field_phonenum=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_phonenum(self): del self.__field_phonenum phonenum=property(__getfield_phonenum, __setfield_phonenum, __delfield_phonenum, None) def __getfield_phonenum_len(self): return self.__field_phonenum_len.getvalue() def __setfield_phonenum_len(self, value): if isinstance(value,UINT): self.__field_phonenum_len=value else: self.__field_phonenum_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_phonenum_len(self): del self.__field_phonenum_len phonenum_len=property(__getfield_phonenum_len, __setfield_phonenum_len, __delfield_phonenum_len, None) def __getfield_date(self): return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,UINT): self.__field_date=value else: self.__field_date=UINT(value,**{'sizeinbytes': 4}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, "# seconds since Jan 1, 1980 approximately") def __getfield_period(self): return self.__field_period.getvalue() def __setfield_period(self, value): if isinstance(value,UINT): self.__field_period=value else: self.__field_period=UINT(value,**{'sizeinbytes': 1}) def __delfield_period(self): del self.__field_period period=property(__getfield_period, __setfield_period, __delfield_period, "No, Daily, Weekly, Monthly, Yearly") def __getfield_dom(self): return self.__field_dom.getvalue() def __setfield_dom(self, value): if isinstance(value,UINT): self.__field_dom=value else: self.__field_dom=UINT(value,**{'sizeinbytes': 1}) def __delfield_dom(self): del self.__field_dom dom=property(__getfield_dom, __setfield_dom, __delfield_dom, "Day of month for the event") def __getfield_datedup(self): return self.__field_datedup.getvalue() def __setfield_datedup(self, value): if isinstance(value,UINT): self.__field_datedup=value else: self.__field_datedup=UINT(value,**{'sizeinbytes': 4}) def __delfield_datedup(self): del self.__field_datedup datedup=property(__getfield_datedup, __setfield_datedup, __delfield_datedup, "Copy of the date. Always the same???") def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_name_len(self): return self.__field_name_len.getvalue() def __setfield_name_len(self, value): if isinstance(value,UINT): self.__field_name_len=value else: self.__field_name_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_name_len(self): del self.__field_name_len name_len=property(__getfield_name_len, __setfield_name_len, __delfield_name_len, None) def __getfield_phonenumbertype(self): return self.__field_phonenumbertype.getvalue() def __setfield_phonenumbertype(self, value): if isinstance(value,UINT): self.__field_phonenumbertype=value else: self.__field_phonenumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_phonenumbertype(self): del self.__field_phonenumbertype phonenumbertype=property(__getfield_phonenumbertype, __setfield_phonenumbertype, __delfield_phonenumbertype, "1: Home, 2: Work, ...") def __getfield_phonenumberslot(self): return self.__field_phonenumberslot.getvalue() def __setfield_phonenumberslot(self, value): if isinstance(value,UINT): self.__field_phonenumberslot=value else: self.__field_phonenumberslot=UINT(value,**{'sizeinbytes': 2}) def __delfield_phonenumberslot(self): del self.__field_phonenumberslot phonenumberslot=property(__getfield_phonenumberslot, __setfield_phonenumberslot, __delfield_phonenumberslot, None) def __getfield_serial(self): try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_serial.getvalue() def __setfield_serial(self, value): if isinstance(value,UINT): self.__field_serial=value else: self.__field_serial=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_serial(self): del self.__field_serial serial=property(__getfield_serial, __setfield_serial, __delfield_serial, None) def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 3}) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 1}) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, "0: Not used, 1: Scheduled, 2: Already Happened") yield ('dunno1', self.__field_dunno1, "Related to Snooze?") yield ('phonenum', self.__field_phonenum, None) yield ('phonenum_len', self.__field_phonenum_len, None) yield ('date', self.__field_date, "# seconds since Jan 1, 1980 approximately") yield ('period', self.__field_period, "No, Daily, Weekly, Monthly, Yearly") yield ('dom', self.__field_dom, "Day of month for the event") yield ('datedup', self.__field_datedup, "Copy of the date. Always the same???") yield ('name', self.__field_name, None) yield ('pad1', self.__field_pad1, None) yield ('name_len', self.__field_name_len, None) yield ('phonenumbertype', self.__field_phonenumbertype, "1: Home, 2: Work, ...") yield ('phonenumberslot', self.__field_phonenumberslot, None) yield ('serial', self.__field_serial, None) yield ('pad2', self.__field_pad2, None) yield ('ringtone', self.__field_ringtone, None) class callalarmresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmresponse,self).__init__(**dict) if self.__class__ is callalarmresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=callalarmentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 413}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,callalarmentry): self.__field_entry=value else: self.__field_entry=callalarmentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 413}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class callalarmupdaterequest(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmupdaterequest,self).__init__(**dict) if self.__class__ is callalarmupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'readwrite': 0x0e, 'packettype': 0x0c, 'command':0x24}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 413}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'readwrite': 0x0e, 'packettype': 0x0c, 'command':0x24}) self.__field_header.readfrombuffer(buf) self.__field_entry=callalarmentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 413}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'readwrite': 0x0e, 'packettype': 0x0c, 'command':0x24}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'readwrite': 0x0e, 'packettype': 0x0c, 'command':0x24}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,callalarmentry): self.__field_entry=value else: self.__field_entry=callalarmentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 413}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 413}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) bitpim-1.0.7+dfsg1/src/phones/p_sanyomedia.py0000644001616600161660000025341010466234100017255 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Descriptions of Sanyo Media Packets""" from prototypes import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb class sanyomediaheader(BaseProtogenClass): __fields=['fa', 'faset', 'command', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyomediaheader,self).__init__(**dict) if self.__class__ is sanyomediaheader: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyomediaheader,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyomediaheader,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_fa except: self.__field_fa=UINT(**{'sizeinbytes': 2, 'constant': 0xfa}) self.__field_fa.writetobuffer(buf) try: self.__field_faset except: self.__field_faset=UINT(**{'sizeinbytes': 1, 'default': 0x09}) self.__field_faset.writetobuffer(buf) self.__field_command.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_fa=UINT(**{'sizeinbytes': 2, 'constant': 0xfa}) self.__field_fa.readfrombuffer(buf) self.__field_faset=UINT(**{'sizeinbytes': 1, 'default': 0x09}) self.__field_faset.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 2}) self.__field_command.readfrombuffer(buf) self.__field_pad=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_fa(self): try: self.__field_fa except: self.__field_fa=UINT(**{'sizeinbytes': 2, 'constant': 0xfa}) return self.__field_fa.getvalue() def __setfield_fa(self, value): if isinstance(value,UINT): self.__field_fa=value else: self.__field_fa=UINT(value,**{'sizeinbytes': 2, 'constant': 0xfa}) def __delfield_fa(self): del self.__field_fa fa=property(__getfield_fa, __setfield_fa, __delfield_fa, None) def __getfield_faset(self): try: self.__field_faset except: self.__field_faset=UINT(**{'sizeinbytes': 1, 'default': 0x09}) return self.__field_faset.getvalue() def __setfield_faset(self, value): if isinstance(value,UINT): self.__field_faset=value else: self.__field_faset=UINT(value,**{'sizeinbytes': 1, 'default': 0x09}) def __delfield_faset(self): del self.__field_faset faset=property(__getfield_faset, __setfield_faset, __delfield_faset, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 2}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UINT): self.__field_pad=value else: self.__field_pad=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('fa', self.__field_fa, None) yield ('faset', self.__field_faset, None) yield ('command', self.__field_command, None) yield ('pad', self.__field_pad, None) class sanyochangedir(BaseProtogenClass): __fields=['header', 'pad', 'dirindex'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyochangedir,self).__init__(**dict) if self.__class__ is sanyochangedir: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyochangedir,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyochangedir,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyomediaheader(**{'command': 0x71}) self.__field_header.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 170}) self.__field_pad.writetobuffer(buf) self.__field_dirindex.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyomediaheader(**{'command': 0x71}) self.__field_header.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 170}) self.__field_pad.readfrombuffer(buf) self.__field_dirindex=UINT(**{'sizeinbytes': 2}) self.__field_dirindex.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyomediaheader(**{'command': 0x71}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyomediaheader): self.__field_header=value else: self.__field_header=sanyomediaheader(value,**{'command': 0x71}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 170}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 170}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_dirindex(self): return self.__field_dirindex.getvalue() def __setfield_dirindex(self, value): if isinstance(value,UINT): self.__field_dirindex=value else: self.__field_dirindex=UINT(value,**{'sizeinbytes': 2}) def __delfield_dirindex(self): del self.__field_dirindex dirindex=property(__getfield_dirindex, __setfield_dirindex, __delfield_dirindex, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('pad', self.__field_pad, None) yield ('dirindex', self.__field_dirindex, None) class sanyochangedirresponse(BaseProtogenClass): __fields=['header', 'pad', 'status', 'dirindex'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyochangedirresponse,self).__init__(**dict) if self.__class__ is sanyochangedirresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyochangedirresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyochangedirresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 169}) self.__field_pad.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_dirindex.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyomediaheader() self.__field_header.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 169}) self.__field_pad.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_dirindex=UINT(**{'sizeinbytes': 2}) self.__field_dirindex.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyomediaheader): self.__field_header=value else: self.__field_header=sanyomediaheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 169}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 169}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_dirindex(self): return self.__field_dirindex.getvalue() def __setfield_dirindex(self, value): if isinstance(value,UINT): self.__field_dirindex=value else: self.__field_dirindex=UINT(value,**{'sizeinbytes': 2}) def __delfield_dirindex(self): del self.__field_dirindex dirindex=property(__getfield_dirindex, __setfield_dirindex, __delfield_dirindex, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('pad', self.__field_pad, None) yield ('status', self.__field_status, None) yield ('dirindex', self.__field_dirindex, None) class sanyonumfilesrequest(BaseProtogenClass): __fields=['header', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyonumfilesrequest,self).__init__(**dict) if self.__class__ is sanyonumfilesrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyonumfilesrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyonumfilesrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyomediaheader(**{'command': 0x72}) self.__field_header.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 172}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyomediaheader(**{'command': 0x72}) self.__field_header.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 172}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyomediaheader(**{'command': 0x72}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyomediaheader): self.__field_header=value else: self.__field_header=sanyomediaheader(value,**{'command': 0x72}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 172}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 172}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('pad', self.__field_pad, None) class sanyonumfilesresponse(BaseProtogenClass): __fields=['header', 'pad1', 'count', 'pad2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyonumfilesresponse,self).__init__(**dict) if self.__class__ is sanyonumfilesresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyonumfilesresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyonumfilesresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 165}) self.__field_pad1.writetobuffer(buf) self.__field_count.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 6}) self.__field_pad2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyomediaheader() self.__field_header.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 165}) self.__field_pad1.readfrombuffer(buf) self.__field_count=UINT(**{'sizeinbytes': 1}) self.__field_count.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 6}) self.__field_pad2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyomediaheader): self.__field_header=value else: self.__field_header=sanyomediaheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 165}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 165}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_count(self): return self.__field_count.getvalue() def __setfield_count(self, value): if isinstance(value,UINT): self.__field_count=value else: self.__field_count=UINT(value,**{'sizeinbytes': 1}) def __delfield_count(self): del self.__field_count count=property(__getfield_count, __setfield_count, __delfield_count, None) def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 6}) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 6}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('pad1', self.__field_pad1, None) yield ('count', self.__field_count, None) yield ('pad2', self.__field_pad2, None) class sanyomediafilenamerequest(BaseProtogenClass): __fields=['header', 'pad1', 'index', 'pad2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyomediafilenamerequest,self).__init__(**dict) if self.__class__ is sanyomediafilenamerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyomediafilenamerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyomediafilenamerequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyomediaheader(**{'command': 0x73}) self.__field_header.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 161}) self.__field_pad1.writetobuffer(buf) self.__field_index.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 10}) self.__field_pad2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyomediaheader(**{'command': 0x73}) self.__field_header.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 161}) self.__field_pad1.readfrombuffer(buf) self.__field_index=UINT(**{'sizeinbytes': 1}) self.__field_index.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 10}) self.__field_pad2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyomediaheader(**{'command': 0x73}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyomediaheader): self.__field_header=value else: self.__field_header=sanyomediaheader(value,**{'command': 0x73}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 161}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 161}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 1}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 10}) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 10}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('pad1', self.__field_pad1, None) yield ('index', self.__field_index, None) yield ('pad2', self.__field_pad2, None) class sanyomediafilenameresponse(BaseProtogenClass): __fields=['header', 'pad1', 'filename', 'num1', 'pad2', 'num2', 'pad3', 'num3', 'pad4', 'num4', 'pad5'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyomediafilenameresponse,self).__init__(**dict) if self.__class__ is sanyomediafilenameresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyomediafilenameresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyomediafilenameresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_pad1.writetobuffer(buf) self.__field_filename.writetobuffer(buf) self.__field_num1.writetobuffer(buf) self.__field_pad2.writetobuffer(buf) self.__field_num2.writetobuffer(buf) self.__field_pad3.writetobuffer(buf) self.__field_num3.writetobuffer(buf) self.__field_pad4.writetobuffer(buf) self.__field_num4.writetobuffer(buf) self.__field_pad5.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyomediaheader() self.__field_header.readfrombuffer(buf) self.__field_pad1=UINT(**{'sizeinbytes': 1}) self.__field_pad1.readfrombuffer(buf) self.__field_filename=USTRING(**{'sizeinbytes': 154}) self.__field_filename.readfrombuffer(buf) self.__field_num1=UINT(**{'sizeinbytes': 1}) self.__field_num1.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad2.readfrombuffer(buf) self.__field_num2=UINT(**{'sizeinbytes': 1}) self.__field_num2.readfrombuffer(buf) self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad3.readfrombuffer(buf) self.__field_num3=UINT(**{'sizeinbytes': 1}) self.__field_num3.readfrombuffer(buf) self.__field_pad4=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad4.readfrombuffer(buf) self.__field_num4=UINT(**{'sizeinbytes': 1}) self.__field_num4.readfrombuffer(buf) self.__field_pad5=UNKNOWN(**{'sizeinbytes': 10}) self.__field_pad5.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyomediaheader): self.__field_header=value else: self.__field_header=sanyomediaheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_pad1(self): return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UINT): self.__field_pad1=value else: self.__field_pad1=UINT(value,**{'sizeinbytes': 1}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'sizeinbytes': 154}) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, None) def __getfield_num1(self): return self.__field_num1.getvalue() def __setfield_num1(self, value): if isinstance(value,UINT): self.__field_num1=value else: self.__field_num1=UINT(value,**{'sizeinbytes': 1}) def __delfield_num1(self): del self.__field_num1 num1=property(__getfield_num1, __setfield_num1, __delfield_num1, None) def __getfield_pad2(self): return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_num2(self): return self.__field_num2.getvalue() def __setfield_num2(self, value): if isinstance(value,UINT): self.__field_num2=value else: self.__field_num2=UINT(value,**{'sizeinbytes': 1}) def __delfield_num2(self): del self.__field_num2 num2=property(__getfield_num2, __setfield_num2, __delfield_num2, None) def __getfield_pad3(self): return self.__field_pad3.getvalue() def __setfield_pad3(self, value): if isinstance(value,UNKNOWN): self.__field_pad3=value else: self.__field_pad3=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad3(self): del self.__field_pad3 pad3=property(__getfield_pad3, __setfield_pad3, __delfield_pad3, None) def __getfield_num3(self): return self.__field_num3.getvalue() def __setfield_num3(self, value): if isinstance(value,UINT): self.__field_num3=value else: self.__field_num3=UINT(value,**{'sizeinbytes': 1}) def __delfield_num3(self): del self.__field_num3 num3=property(__getfield_num3, __setfield_num3, __delfield_num3, None) def __getfield_pad4(self): return self.__field_pad4.getvalue() def __setfield_pad4(self, value): if isinstance(value,UNKNOWN): self.__field_pad4=value else: self.__field_pad4=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad4(self): del self.__field_pad4 pad4=property(__getfield_pad4, __setfield_pad4, __delfield_pad4, None) def __getfield_num4(self): return self.__field_num4.getvalue() def __setfield_num4(self, value): if isinstance(value,UINT): self.__field_num4=value else: self.__field_num4=UINT(value,**{'sizeinbytes': 1}) def __delfield_num4(self): del self.__field_num4 num4=property(__getfield_num4, __setfield_num4, __delfield_num4, None) def __getfield_pad5(self): return self.__field_pad5.getvalue() def __setfield_pad5(self, value): if isinstance(value,UNKNOWN): self.__field_pad5=value else: self.__field_pad5=UNKNOWN(value,**{'sizeinbytes': 10}) def __delfield_pad5(self): del self.__field_pad5 pad5=property(__getfield_pad5, __setfield_pad5, __delfield_pad5, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('pad1', self.__field_pad1, None) yield ('filename', self.__field_filename, None) yield ('num1', self.__field_num1, None) yield ('pad2', self.__field_pad2, None) yield ('num2', self.__field_num2, None) yield ('pad3', self.__field_pad3, None) yield ('num3', self.__field_num3, None) yield ('pad4', self.__field_pad4, None) yield ('num4', self.__field_num4, None) yield ('pad5', self.__field_pad5, None) class sanyomediafragmentrequest(BaseProtogenClass): __fields=['header', 'pad1', 'fileindex', 'pad2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyomediafragmentrequest,self).__init__(**dict) if self.__class__ is sanyomediafragmentrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyomediafragmentrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyomediafragmentrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyomediaheader(**{'command': 0x74}) self.__field_header.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 155}) self.__field_pad1.writetobuffer(buf) self.__field_fileindex.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 16}) self.__field_pad2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyomediaheader(**{'command': 0x74}) self.__field_header.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 155}) self.__field_pad1.readfrombuffer(buf) self.__field_fileindex=UINT(**{'sizeinbytes': 1}) self.__field_fileindex.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 16}) self.__field_pad2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyomediaheader(**{'command': 0x74}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyomediaheader): self.__field_header=value else: self.__field_header=sanyomediaheader(value,**{'command': 0x74}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 155}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 155}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_fileindex(self): return self.__field_fileindex.getvalue() def __setfield_fileindex(self, value): if isinstance(value,UINT): self.__field_fileindex=value else: self.__field_fileindex=UINT(value,**{'sizeinbytes': 1}) def __delfield_fileindex(self): del self.__field_fileindex fileindex=property(__getfield_fileindex, __setfield_fileindex, __delfield_fileindex, None) def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 16}) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 16}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('pad1', self.__field_pad1, None) yield ('fileindex', self.__field_fileindex, None) yield ('pad2', self.__field_pad2, None) class sanyomediafragmentresponse(BaseProtogenClass): __fields=['header', 'pad1', 'data', 'length', 'pad2', 'fileindex', 'pad3', 'more'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyomediafragmentresponse,self).__init__(**dict) if self.__class__ is sanyomediafragmentresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyomediafragmentresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyomediafragmentresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_pad1.writetobuffer(buf) self.__field_data.writetobuffer(buf) self.__field_length.writetobuffer(buf) self.__field_pad2.writetobuffer(buf) self.__field_fileindex.writetobuffer(buf) self.__field_pad3.writetobuffer(buf) self.__field_more.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyomediaheader() self.__field_header.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.readfrombuffer(buf) self.__field_data=DATA(**{'sizeinbytes': 150}) self.__field_data.readfrombuffer(buf) self.__field_length=UINT(**{'sizeinbytes': 1}) self.__field_length.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad2.readfrombuffer(buf) self.__field_fileindex=UINT(**{'sizeinbytes': 1}) self.__field_fileindex.readfrombuffer(buf) self.__field_pad3=UNKNOWN(**{'sizeinbytes': 15}) self.__field_pad3.readfrombuffer(buf) self.__field_more=UINT(**{'sizeinbytes': 1}) self.__field_more.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyomediaheader): self.__field_header=value else: self.__field_header=sanyomediaheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_pad1(self): return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_data(self): return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,DATA): self.__field_data=value else: self.__field_data=DATA(value,**{'sizeinbytes': 150}) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def __getfield_length(self): return self.__field_length.getvalue() def __setfield_length(self, value): if isinstance(value,UINT): self.__field_length=value else: self.__field_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_length(self): del self.__field_length length=property(__getfield_length, __setfield_length, __delfield_length, None) def __getfield_pad2(self): return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_fileindex(self): return self.__field_fileindex.getvalue() def __setfield_fileindex(self, value): if isinstance(value,UINT): self.__field_fileindex=value else: self.__field_fileindex=UINT(value,**{'sizeinbytes': 1}) def __delfield_fileindex(self): del self.__field_fileindex fileindex=property(__getfield_fileindex, __setfield_fileindex, __delfield_fileindex, None) def __getfield_pad3(self): return self.__field_pad3.getvalue() def __setfield_pad3(self, value): if isinstance(value,UNKNOWN): self.__field_pad3=value else: self.__field_pad3=UNKNOWN(value,**{'sizeinbytes': 15}) def __delfield_pad3(self): del self.__field_pad3 pad3=property(__getfield_pad3, __setfield_pad3, __delfield_pad3, None) def __getfield_more(self): return self.__field_more.getvalue() def __setfield_more(self, value): if isinstance(value,UINT): self.__field_more=value else: self.__field_more=UINT(value,**{'sizeinbytes': 1}) def __delfield_more(self): del self.__field_more more=property(__getfield_more, __setfield_more, __delfield_more, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('pad1', self.__field_pad1, None) yield ('data', self.__field_data, None) yield ('length', self.__field_length, None) yield ('pad2', self.__field_pad2, None) yield ('fileindex', self.__field_fileindex, None) yield ('pad3', self.__field_pad3, None) yield ('more', self.__field_more, None) class sanyomediafilegragment(BaseProtogenClass): __fields=['header', 'word', 'len', 'data', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyomediafilegragment,self).__init__(**dict) if self.__class__ is sanyomediafilegragment: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyomediafilegragment,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyomediafilegragment,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyomediaheader() self.__field_header.writetobuffer(buf) try: self.__field_word except: self.__field_word=UINT(**{'sizeinbytes': 2, 'constant': 0}) self.__field_word.writetobuffer(buf) try: self.__field_len except: self.__field_len=UINT(**{'sizeinbytes': 1, 'constant': 150}) self.__field_len.writetobuffer(buf) self.__field_data.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 21}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyomediaheader() self.__field_header.readfrombuffer(buf) self.__field_word=UINT(**{'sizeinbytes': 2, 'constant': 0}) self.__field_word.readfrombuffer(buf) self.__field_len=UINT(**{'sizeinbytes': 1, 'constant': 150}) self.__field_len.readfrombuffer(buf) self.__field_data=DATA(**{'sizeinbytes': 150}) self.__field_data.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 21}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyomediaheader() return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyomediaheader): self.__field_header=value else: self.__field_header=sanyomediaheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_word(self): try: self.__field_word except: self.__field_word=UINT(**{'sizeinbytes': 2, 'constant': 0}) return self.__field_word.getvalue() def __setfield_word(self, value): if isinstance(value,UINT): self.__field_word=value else: self.__field_word=UINT(value,**{'sizeinbytes': 2, 'constant': 0}) def __delfield_word(self): del self.__field_word word=property(__getfield_word, __setfield_word, __delfield_word, None) def __getfield_len(self): try: self.__field_len except: self.__field_len=UINT(**{'sizeinbytes': 1, 'constant': 150}) return self.__field_len.getvalue() def __setfield_len(self, value): if isinstance(value,UINT): self.__field_len=value else: self.__field_len=UINT(value,**{'sizeinbytes': 1, 'constant': 150}) def __delfield_len(self): del self.__field_len len=property(__getfield_len, __setfield_len, __delfield_len, None) def __getfield_data(self): return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,DATA): self.__field_data=value else: self.__field_data=DATA(value,**{'sizeinbytes': 150}) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 21}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 21}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('word', self.__field_word, None) yield ('len', self.__field_len, None) yield ('data', self.__field_data, None) yield ('pad', self.__field_pad, None) class sanyomediaresponse(BaseProtogenClass): __fields=['header', 'UNKNOWN'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyomediaresponse,self).__init__(**dict) if self.__class__ is sanyomediaresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyomediaresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyomediaresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_UNKNOWN.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyomediaheader() self.__field_header.readfrombuffer(buf) self.__field_UNKNOWN=UNKNOWN() self.__field_UNKNOWN.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyomediaheader): self.__field_header=value else: self.__field_header=sanyomediaheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_UNKNOWN(self): return self.__field_UNKNOWN.getvalue() def __setfield_UNKNOWN(self, value): if isinstance(value,UNKNOWN): self.__field_UNKNOWN=value else: self.__field_UNKNOWN=UNKNOWN(value,) def __delfield_UNKNOWN(self): del self.__field_UNKNOWN UNKNOWN=property(__getfield_UNKNOWN, __setfield_UNKNOWN, __delfield_UNKNOWN, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('UNKNOWN', self.__field_UNKNOWN, None) class sanyosendfilename(BaseProtogenClass): __fields=['header', 'payloadsize', 'filename', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyosendfilename,self).__init__(**dict) if self.__class__ is sanyosendfilename: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyosendfilename,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyosendfilename,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyomediaheader(**{'command': 0xffa1, 'pad': 0, 'faset': 0x05}) self.__field_header.writetobuffer(buf) try: self.__field_payloadsize except: self.__field_payloadsize=UINT(**{'sizeinbytes': 1, 'constant': 0x96}) self.__field_payloadsize.writetobuffer(buf) try: self.__field_filename except: self.__field_filename=USTRING(**{'sizeinbytes': 150, 'default': ""}) self.__field_filename.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 21}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyomediaheader(**{'command': 0xffa1, 'pad': 0, 'faset': 0x05}) self.__field_header.readfrombuffer(buf) self.__field_payloadsize=UINT(**{'sizeinbytes': 1, 'constant': 0x96}) self.__field_payloadsize.readfrombuffer(buf) self.__field_filename=USTRING(**{'sizeinbytes': 150, 'default': ""}) self.__field_filename.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 21}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyomediaheader(**{'command': 0xffa1, 'pad': 0, 'faset': 0x05}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyomediaheader): self.__field_header=value else: self.__field_header=sanyomediaheader(value,**{'command': 0xffa1, 'pad': 0, 'faset': 0x05}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_payloadsize(self): try: self.__field_payloadsize except: self.__field_payloadsize=UINT(**{'sizeinbytes': 1, 'constant': 0x96}) return self.__field_payloadsize.getvalue() def __setfield_payloadsize(self, value): if isinstance(value,UINT): self.__field_payloadsize=value else: self.__field_payloadsize=UINT(value,**{'sizeinbytes': 1, 'constant': 0x96}) def __delfield_payloadsize(self): del self.__field_payloadsize payloadsize=property(__getfield_payloadsize, __setfield_payloadsize, __delfield_payloadsize, None) def __getfield_filename(self): try: self.__field_filename except: self.__field_filename=USTRING(**{'sizeinbytes': 150, 'default': ""}) return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'sizeinbytes': 150, 'default': ""}) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 21}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 21}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('payloadsize', self.__field_payloadsize, None) yield ('filename', self.__field_filename, None) yield ('pad', self.__field_pad, None) class sanyosendfilesize(BaseProtogenClass): __fields=['header', 'payloadsize', 'pad1', 'filesize', 'pad2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyosendfilesize,self).__init__(**dict) if self.__class__ is sanyosendfilesize: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyosendfilesize,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyosendfilesize,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyomediaheader(**{'command': 0xffc1, 'pad': 0, 'faset': 0x05}) self.__field_header.writetobuffer(buf) try: self.__field_payloadsize except: self.__field_payloadsize=UINT(**{'sizeinbytes': 1, 'constant': 0x96}) self.__field_payloadsize.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.writetobuffer(buf) self.__field_filesize.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 168}) self.__field_pad2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyomediaheader(**{'command': 0xffc1, 'pad': 0, 'faset': 0x05}) self.__field_header.readfrombuffer(buf) self.__field_payloadsize=UINT(**{'sizeinbytes': 1, 'constant': 0x96}) self.__field_payloadsize.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.readfrombuffer(buf) self.__field_filesize=UINT(**{'sizeinbytes': 2}) self.__field_filesize.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 168}) self.__field_pad2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyomediaheader(**{'command': 0xffc1, 'pad': 0, 'faset': 0x05}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyomediaheader): self.__field_header=value else: self.__field_header=sanyomediaheader(value,**{'command': 0xffc1, 'pad': 0, 'faset': 0x05}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_payloadsize(self): try: self.__field_payloadsize except: self.__field_payloadsize=UINT(**{'sizeinbytes': 1, 'constant': 0x96}) return self.__field_payloadsize.getvalue() def __setfield_payloadsize(self, value): if isinstance(value,UINT): self.__field_payloadsize=value else: self.__field_payloadsize=UINT(value,**{'sizeinbytes': 1, 'constant': 0x96}) def __delfield_payloadsize(self): del self.__field_payloadsize payloadsize=property(__getfield_payloadsize, __setfield_payloadsize, __delfield_payloadsize, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_filesize(self): return self.__field_filesize.getvalue() def __setfield_filesize(self, value): if isinstance(value,UINT): self.__field_filesize=value else: self.__field_filesize=UINT(value,**{'sizeinbytes': 2}) def __delfield_filesize(self): del self.__field_filesize filesize=property(__getfield_filesize, __setfield_filesize, __delfield_filesize, None) def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 168}) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 168}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('payloadsize', self.__field_payloadsize, None) yield ('pad1', self.__field_pad1, None) yield ('filesize', self.__field_filesize, None) yield ('pad2', self.__field_pad2, None) class sanyosendfilefragment(BaseProtogenClass): __fields=['header', 'payloadsize', 'data', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyosendfilefragment,self).__init__(**dict) if self.__class__ is sanyosendfilefragment: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyosendfilefragment,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyosendfilefragment,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyomediaheader(**{'pad': 0, 'faset': 0x05}) self.__field_header.writetobuffer(buf) try: self.__field_payloadsize except: self.__field_payloadsize=UINT(**{'sizeinbytes': 1, 'constant': 0x96}) self.__field_payloadsize.writetobuffer(buf) self.__field_data.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 21}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyomediaheader(**{'pad': 0, 'faset': 0x05}) self.__field_header.readfrombuffer(buf) self.__field_payloadsize=UINT(**{'sizeinbytes': 1, 'constant': 0x96}) self.__field_payloadsize.readfrombuffer(buf) self.__field_data=DATA(**{'sizeinbytes': 150}) self.__field_data.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 21}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyomediaheader(**{'pad': 0, 'faset': 0x05}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyomediaheader): self.__field_header=value else: self.__field_header=sanyomediaheader(value,**{'pad': 0, 'faset': 0x05}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_payloadsize(self): try: self.__field_payloadsize except: self.__field_payloadsize=UINT(**{'sizeinbytes': 1, 'constant': 0x96}) return self.__field_payloadsize.getvalue() def __setfield_payloadsize(self, value): if isinstance(value,UINT): self.__field_payloadsize=value else: self.__field_payloadsize=UINT(value,**{'sizeinbytes': 1, 'constant': 0x96}) def __delfield_payloadsize(self): del self.__field_payloadsize payloadsize=property(__getfield_payloadsize, __setfield_payloadsize, __delfield_payloadsize, None) def __getfield_data(self): return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,DATA): self.__field_data=value else: self.__field_data=DATA(value,**{'sizeinbytes': 150}) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 21}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 21}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('payloadsize', self.__field_payloadsize, None) yield ('data', self.__field_data, None) yield ('pad', self.__field_pad, None) class sanyosendfileterminator(BaseProtogenClass): __fields=['header', 'payloadsize', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyosendfileterminator,self).__init__(**dict) if self.__class__ is sanyosendfileterminator: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyosendfileterminator,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyosendfileterminator,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyomediaheader(**{'command': 0xffe1, 'pad': 0, 'faset': 0x05}) self.__field_header.writetobuffer(buf) try: self.__field_payloadsize except: self.__field_payloadsize=UINT(**{'sizeinbytes': 1, 'constant': 0x96}) self.__field_payloadsize.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 171}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyomediaheader(**{'command': 0xffe1, 'pad': 0, 'faset': 0x05}) self.__field_header.readfrombuffer(buf) self.__field_payloadsize=UINT(**{'sizeinbytes': 1, 'constant': 0x96}) self.__field_payloadsize.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 171}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyomediaheader(**{'command': 0xffe1, 'pad': 0, 'faset': 0x05}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyomediaheader): self.__field_header=value else: self.__field_header=sanyomediaheader(value,**{'command': 0xffe1, 'pad': 0, 'faset': 0x05}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_payloadsize(self): try: self.__field_payloadsize except: self.__field_payloadsize=UINT(**{'sizeinbytes': 1, 'constant': 0x96}) return self.__field_payloadsize.getvalue() def __setfield_payloadsize(self, value): if isinstance(value,UINT): self.__field_payloadsize=value else: self.__field_payloadsize=UINT(value,**{'sizeinbytes': 1, 'constant': 0x96}) def __delfield_payloadsize(self): del self.__field_payloadsize payloadsize=property(__getfield_payloadsize, __setfield_payloadsize, __delfield_payloadsize, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 171}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 171}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('payloadsize', self.__field_payloadsize, None) yield ('pad', self.__field_pad, None) class sanyosendfileresponse(BaseProtogenClass): __fields=['header', 'payloadsize', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyosendfileresponse,self).__init__(**dict) if self.__class__ is sanyosendfileresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyosendfileresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyosendfileresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyomediaheader() self.__field_header.writetobuffer(buf) self.__field_payloadsize.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyomediaheader() self.__field_header.readfrombuffer(buf) self.__field_payloadsize=UINT(**{'sizeinbytes': 1}) self.__field_payloadsize.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 171}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyomediaheader() return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyomediaheader): self.__field_header=value else: self.__field_header=sanyomediaheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_payloadsize(self): return self.__field_payloadsize.getvalue() def __setfield_payloadsize(self, value): if isinstance(value,UINT): self.__field_payloadsize=value else: self.__field_payloadsize=UINT(value,**{'sizeinbytes': 1}) def __delfield_payloadsize(self): del self.__field_payloadsize payloadsize=property(__getfield_payloadsize, __setfield_payloadsize, __delfield_payloadsize, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 171}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('payloadsize', self.__field_payloadsize, None) yield ('pad', self.__field_pad, None) class sanyomediathingyrequest(BaseProtogenClass): __fields=['fa', 'faset', 'value'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyomediathingyrequest,self).__init__(**dict) if self.__class__ is sanyomediathingyrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyomediathingyrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyomediathingyrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_fa except: self.__field_fa=UINT(**{'sizeinbytes': 2, 'constant': 0xfa}) self.__field_fa.writetobuffer(buf) self.__field_faset.writetobuffer(buf) try: self.__field_value except: self.__field_value=UINT(**{'sizeinbytes': 2, 'default': 0x0}) self.__field_value.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_fa=UINT(**{'sizeinbytes': 2, 'constant': 0xfa}) self.__field_fa.readfrombuffer(buf) self.__field_faset=UINT(**{'sizeinbytes': 1}) self.__field_faset.readfrombuffer(buf) self.__field_value=UINT(**{'sizeinbytes': 2, 'default': 0x0}) self.__field_value.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_fa(self): try: self.__field_fa except: self.__field_fa=UINT(**{'sizeinbytes': 2, 'constant': 0xfa}) return self.__field_fa.getvalue() def __setfield_fa(self, value): if isinstance(value,UINT): self.__field_fa=value else: self.__field_fa=UINT(value,**{'sizeinbytes': 2, 'constant': 0xfa}) def __delfield_fa(self): del self.__field_fa fa=property(__getfield_fa, __setfield_fa, __delfield_fa, None) def __getfield_faset(self): return self.__field_faset.getvalue() def __setfield_faset(self, value): if isinstance(value,UINT): self.__field_faset=value else: self.__field_faset=UINT(value,**{'sizeinbytes': 1}) def __delfield_faset(self): del self.__field_faset faset=property(__getfield_faset, __setfield_faset, __delfield_faset, None) def __getfield_value(self): try: self.__field_value except: self.__field_value=UINT(**{'sizeinbytes': 2, 'default': 0x0}) return self.__field_value.getvalue() def __setfield_value(self, value): if isinstance(value,UINT): self.__field_value=value else: self.__field_value=UINT(value,**{'sizeinbytes': 2, 'default': 0x0}) def __delfield_value(self): del self.__field_value value=property(__getfield_value, __setfield_value, __delfield_value, None) def iscontainer(self): return True def containerelements(self): yield ('fa', self.__field_fa, None) yield ('faset', self.__field_faset, None) yield ('value', self.__field_value, None) class sanyomediathingyresponse(BaseProtogenClass): __fields=['fa', 'faset', 'value'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyomediathingyresponse,self).__init__(**dict) if self.__class__ is sanyomediathingyresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyomediathingyresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyomediathingyresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_fa.writetobuffer(buf) self.__field_faset.writetobuffer(buf) self.__field_value.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_fa=UINT(**{'sizeinbytes': 2}) self.__field_fa.readfrombuffer(buf) self.__field_faset=UINT(**{'sizeinbytes': 1}) self.__field_faset.readfrombuffer(buf) self.__field_value=UINT(**{'sizeinbytes': 2}) self.__field_value.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_fa(self): return self.__field_fa.getvalue() def __setfield_fa(self, value): if isinstance(value,UINT): self.__field_fa=value else: self.__field_fa=UINT(value,**{'sizeinbytes': 2}) def __delfield_fa(self): del self.__field_fa fa=property(__getfield_fa, __setfield_fa, __delfield_fa, None) def __getfield_faset(self): return self.__field_faset.getvalue() def __setfield_faset(self, value): if isinstance(value,UINT): self.__field_faset=value else: self.__field_faset=UINT(value,**{'sizeinbytes': 1}) def __delfield_faset(self): del self.__field_faset faset=property(__getfield_faset, __setfield_faset, __delfield_faset, None) def __getfield_value(self): return self.__field_value.getvalue() def __setfield_value(self, value): if isinstance(value,UINT): self.__field_value=value else: self.__field_value=UINT(value,**{'sizeinbytes': 2}) def __delfield_value(self): del self.__field_value value=property(__getfield_value, __setfield_value, __delfield_value, None) def iscontainer(self): return True def containerelements(self): yield ('fa', self.__field_fa, None) yield ('faset', self.__field_faset, None) yield ('value', self.__field_value, None) bitpim-1.0.7+dfsg1/src/phones/com_lglx5450.py0000644001616600161660000001445410554051740016737 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### Copyright (C) 2005 Simon Capper ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lglx5450.py 3918 2007-01-19 05:15:12Z djpham $ """Communicate with the LG LX5450 cell phone The LX5450 is substantially similar to the VX4400 except that it supports more image formats, has wallpapers in no less than 4 locations and puts things in slightly different directories. It is almost identical to the vx6000. The code in this file mainly inherits from VX4400 code and then extends where the 5450 has extra functionality """ # standard modules import time import cStringIO import sha # my modules import common import copy import p_lglx5450 import com_lgvx4400 import com_brew import com_phone import com_lg import prototypes class Phone(com_lgvx4400.Phone): "Talk to the LG LX5450 cell phone" desc="LG-LX5450" helpid=None protocolclass=p_lglx5450 serialsname='lglx5450' # more LX5450 indices imagelocations=( # offset, index file, files location, type, maximumentries ( 10, "download/dloadindex/brewImageIndex.map", "brew/shared", "images", 30) , ( 0xc8, "download/dloadindex/mmsImageIndex.map", "brew/shared/mms", "mms", 20), ( 0xdc, "download/dloadindex/mmsDrmImageIndex.map", "brew/shared/mms/d", "drm", 20), ( 0x82, None, None, "camera", 20) # nb camera must be last ) ringtonelocations=( # offset, index file, files location, type, maximumentries ( 50, "download/dloadindex/brewRingerIndex.map", "user/sound/ringer", "ringers", 30), ( 150, "download/dloadindex/mmsRingerIndex.map", "mms/sound", "mms", 20), ( 180, "download/dloadindex/mmsDrmRingerIndex.map", "mms/sound/drm", "drm", 20) ) builtinimages= ('Beach Ball', 'Towerbridge', 'Sunflower', 'Beach', 'Fish', 'Sea', 'Snowman') builtinringtones= ('Ring 1', 'Ring 2', 'Ring 3', 'Ring 4', 'Ring 5', 'Ring 6', 'Annen Polka', 'Beethoven Symphony No. 9', 'Pachelbel Canon', 'Hallelujah', 'La Traviata', 'Leichte Kavallerie Overture', 'Mozart Symphony No.40', 'Bach Minuet', 'Farewell', 'Mozart Piano Sonata', 'Sting', 'Trout', 'O solemio', 'Pizzicata Polka', 'Stars and Stripes Forever', 'Pineapple Rag', 'When the Saints Go Marching In', 'Latin', 'Carol 1', 'Carol 2') def __init__(self, logtarget, commport): com_lgvx4400.Phone.__init__(self,logtarget,commport) self.mode=self.MODENONE def getcameraindex(self): buf=prototypes.buffer(self.getfilecontents("cam/pics.dat")) index={} g=self.protocolclass.campicsdat() g.readfrombuffer(buf, logtitle="Camera index") for i in g.items: if len(i.name): # index[i.index]={'name': i.name, 'date': i.taken, 'origin': 'camera' } # we currently use the filesystem name rather than rename in camera # since the latter doesn't include the file extension which then makes # life less pleasant once the file ends up on the computer index[i.index]={'name': "pic%02d.jpg"%(i.index,), 'date': i.taken, 'origin': 'camera' } return index def eval_detect_data(self, res): found=False if res.get(self.brew_version_txt_key, None) is not None: found=res[self.brew_version_txt_key][:len(self.my_version_txt)]==self.my_version_txt if found: res['model']=self.my_model res['manufacturer']='LG Electronics Inc' s=res.get(self.esn_file_key, None) if s: res['esn']=self.get_esn(s) my_version_txt='AX545V' my_model='LX5450' parentprofile=com_lgvx4400.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='LG Electronics Inc' phone_model='LX5450' WALLPAPER_WIDTH=120 WALLPAPER_HEIGHT=131 MAX_WALLPAPER_BASENAME_LENGTH=32 WALLPAPER_FILENAME_CHARS="_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ." WALLPAPER_CONVERT_FORMAT="bmp" MAX_RINGTONE_BASENAME_LENGTH=32 RINGTONE_FILENAME_CHARS="_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ." # nb we don't allow save to camera so it isn't listed here imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "mms")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "drm")) def GetImageOrigins(self): return self.imageorigins ringtoneorigins=('ringers', 'mms', 'drm') excluded_ringtone_origins=('mms', 'drm') excluded_wallpaper_origins=('mms', 'drm') # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 120, 'height': 131, 'format': "BMP"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets _supportedsyncs=( ('sms', 'read', None), ('sms', 'write', 'OVERWRITE'), ('phonebook', 'read', None), # all phonebook reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'read', None), # all ringtone reading ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('memo', 'read', None), # all memo list reading DJP ('memo', 'write', 'OVERWRITE'), # all memo list writing DJP ('call_history', 'read', None), ) def __init__(self): parentprofile.__init__(self) bitpim-1.0.7+dfsg1/src/phones/p_sanyo8200.py0000644001616600161660000000107310355654153016576 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Sanyo SCP-8200""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 # Need to check. Is max phone will hold 32/96 or 33/97 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 bitpim-1.0.7+dfsg1/src/phones/com_lgtm520.py0000644001616600161660000006050010737542330016641 0ustar amuamu### BITPIM ### ### Copyright (C) 2003 Roger Binns ### Copyright (C) 2003 Scott Craig ### Copyright (C) 2003 Alan Gonzalez ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgtm520.py 4543 2008-01-04 23:44:24Z djpham $ "Talk to the LG TM520/VX10 cell phone" # standard modules import re import time import cStringIO import sha # my modules import common import p_lgtm520 import com_brew import com_phone import com_lg import prototypes typemap = { 'fwd': ( 'home', 'office', 'cell', 'pager', 'data' ), 'rev': { 'home': 0, 'office': 1, 'cell': 2, 'pager': 3, 'data': 4, 'fax': 4 } } class Phone(com_phone.Phone,com_brew.BrewProtocol,com_lg.LGPhonebook): "Talk to the LG TM520/VX10 cell phone" desc="LG-TM520/VX10" protocolclass=p_lgtm520 serialsname='lgtm520' ringtonelocations=( # offset, index file, files location, type, maximumentries # There really isn't an index file ( 0, "", "ringer", "ringers", 5), # phonebook linkage #( 0, "pim/midiringer.dat", "ringer", "ringers", 199), # main ringer #( 0, "pim/ringtitle.dat", "ringer", "ringers", 1), ) builtinringtones=( 'Standard1', 'Standard2', 'Standard3', 'Standard4', 'Standard5', 'Radetzky March', 'Nocturn', 'Carmen', 'La Traviata', 'Liberty Bell', 'Semper Fidelis', 'Take Me Out', 'Turkey In The Straw', 'We Wish...', 'Csikos Post', 'Bumble Bee Twist', 'Badinerie', 'Silken Ladder', 'Chestnut' ) # phone uses Jan 1, 1980 as epoch. Python uses Jan 1, 1970. This is difference # plus a fudge factor of 5 days, 20 hours for no reason I can find _tm520epochtounix=315532800+460800 _brewepochtounix=315532800+460800 # trying to override inherited entry _calrepeatvalues={ 0: None, 1: None, 2: 'daily' } getwallpapers=None def __init__(self, logtarget, commport): com_phone.Phone.__init__(self, logtarget, commport) com_brew.BrewProtocol.__init__(self) com_lg.LGPhonebook.__init__(self) self.log("Attempting to contact phone") self.mode=self.MODENONE def getfundamentals(self, results): """Gets information fundamental to interopating with the phone and UI.""" # use a hash of ESN and other stuff (being paranoid) self.log("Retrieving fundamental phone information") self.log("Phone serial number") results['uniqueserial']=sha.new(self.getfilecontents("nvm/$SYS.ESN")).hexdigest() results['ringtone-index'] = {} ringcount = 1 for r in self.builtinringtones: results['ringtone-index'][ringcount] = {'name': r, 'origin': 'builtin'} ringcount += 1 try: ringers=self.getfilesystem('ringer') for r in ringers.keys(): results['ringtone-index'][ringcount] = {'name': r[len('ringer/'):], 'origin': 'ringers'} ringcount +=1 except com_brew.BrewNoSuchDirectoryException: self.log("Ringer directory doesn't exist, firmware might not be download capable") self.log("Fundamentals retrieved") return results def pbinit(self): self.mode = self.MODEPHONEBOOK self.sendpbcommand(self.protocolclass.pbstartsyncrequest(), self.protocolclass.pbstartsyncresponse) self.mode = self.MODEBREW res=self.sendpbcommand(self.protocolclass.pbinforequest(), self.protocolclass.pbinforesponse) return res.numentries def pbend(self): req=self.protocolclass.pbendsyncrequest() self.sendpbcommand(req, self.protocolclass.pbendsyncresponse) def pregetpb(self, result): index={} try: buf=prototypes.buffer(self.getfilecontents("pim/midiringer.dat")) except com_brew.BrewNoSuchFileException: # file may not exist result['intermediate'] = index return g=self.protocolclass.ringindex() g.readfrombuffer(buf, logtitle="ringer index") for i in g.items: if i.name != "default": index[i.index+1]=i.name[len('ringer/'):] result['intermediate'] = index def postgetdb(self, result): #cats=[] #for i in result['groups']: # if result['groups'][i]['name']!='No Group': # cats.append(result['groups'][i]['name']) #result['categories'] = cats del result['intermediate'] def getphonebook(self,result): """Reads the phonebook data. The L{getfundamentals} information will already be in result.""" pbook={} # Bug in the phone. if you repeatedly read the phone book it starts # returning a random number as the number of entries. We get around # this by switching into brew mode which clears that. #self.mode=self.MODENONE #self.setmode(self.MODEBREW) self.pregetpb(result) self.log("Reading number of phonebook entries") numentries=self.pbinit() self.log("There are %d entries" % (numentries,)) for i in range(0, numentries): ### Read current entry req=self.protocolclass.pbreadentryrequest() res=self.sendpbcommand(req, self.protocolclass.pbreadentryresponse) self.log("Read entry "+`i`+" - "+res.entry.name) entry=self.extractphonebookentry(res.entry, result) pbook[i]=entry self.progress(i, numentries, res.entry.name) #### Advance to next entry req=self.protocolclass.pbnextentryrequest() self.sendpbcommand(req, self.protocolclass.pbnextentryresponse) self.progress(numentries, numentries, "Phone book read completed") result['phonebook']=pbook self.pbend() self.postgetdb(result) print "returning keys",result.keys() return pbook def extractphonebookentry(self, entry, fundamentals): """Return a phonebook entry in BitPim format""" res={} # serials res['serials']=[ {'sourcetype': self.serialsname, 'serial1': entry.serial1, 'serial2': entry.serial2, 'sourceuniqueid': fundamentals['uniqueserial']} ] # only one name res['names']=[ {'full': entry.name} ] # only one email if len(entry.email) > 0: res['emails']=[ {'email': entry.email} ] res['flags'] = [] # we only supply secret/voicetag if it is true if entry.secret: res['flags'].append({'secret': entry.secret }) if entry.voicetag: res['flags'].append({'voicetag': entry.voicetag }) # ringtones res['ringtones'] = [] if entry.ringtone > 0: # individual ringtone if entry.ringtone > len(self.builtinringtones): # custom individual ringtone try: res['ringtones'].append({'ringtone': fundamentals['intermediate'][entry.entrynumber], 'use': 'call'}) except: self.log('Custom ringtone not properly assigned for '+entry.name) else: # stock individual ringtone res['ringtones'].append({'ringtone': fundamentals['ringtone-index'][entry.ringtone]['name'], 'use': 'call'}) # 5 phone numbers res['numbers']=[] numbernumber=0 for type in typemap['fwd']: item = entry.numbers[numbernumber] if len(item.number) > 0: res['numbers'].append({'number': item.number, 'type': type, 'sum': item.chksum }) if numbernumber == entry.default: res['numbers'][-1]['speeddial'] = entry.entrynumber numbernumber+=1 return res def savegroups(self, data): pass def savephonebook(self, data): self.savegroups(data) # To write the phone book, we scan through all existing entries # and record their record number and serials. # We then delete any entries that aren't in data # We then write out our records, usng overwrite or append # commands as necessary serialupdates=[] existingpbook={} # keep track of the phonebook that is on the phone ringindex = {} # Ringtones pbook = data['phonebook'] for i in pbook.keys(): if not 'ringtone' in pbook[i]: continue if not pbook[i]['ringtone'] is None and not pbook[i]['ringtone'] in self.builtinringtones: ringindex[pbook[i]['entrynumber']] = pbook[i]['ringtone']; ringidxfile=self.protocolclass.ringindex() for i in range(1, 200): ringerentry = self.protocolclass.ringentry() ringerentry.index = i ringerentry.name = '' if i in ringindex: ringerentry.name = 'ringer/'+ringindex[i] ringidxfile.items.append(ringerentry) buf=prototypes.buffer() ringidxfile.writetobuffer(buf, logtitle="Custom ringer index") # ::TODO:: this code looks wrong. Why isn't the if before the loop above? # and if the user deleted all ringers then shouldn't the file be truncated # rather than ignored? if len(ringindex) > 0: self.writefile("pim/midiringer.dat", buf.getvalue()) #self.mode=self.MODENONE #self.setmode(self.MODEBREW) # see note in getphonebook() for why this is necessary #self.setmode(self.MODEPHONEBOOK) # similar loop to reading numexistingentries=self.pbinit() progressmax=numexistingentries+len(data['phonebook'].keys()) progresscur=0 self.log("There are %d existing entries" % (numexistingentries,)) for i in range(0, numexistingentries): ### Read current entry req=self.protocolclass.pbreadentryrequest() res=self.sendpbcommand(req, self.protocolclass.pbreadentryresponse) entry={ 'number': res.entry.entrynumber, 'serial1': res.entry.serial1, 'serial2': res.entry.serial2, 'name': res.entry.name} assert entry['serial1']==entry['serial2'] # always the same self.log("Reading entry "+`i`+" - "+entry['name']) existingpbook[i]=entry self.progress(progresscur, progressmax, "existing "+entry['name']) #### Advance to next entry req=self.protocolclass.pbnextentryrequest() self.sendpbcommand(req, self.protocolclass.pbnextentryresponse) progresscur+=1 # we have now looped around back to begining # Find entries that have been deleted pbook=data['phonebook'] dellist=[] for i in range(0, numexistingentries): ii=existingpbook[i] serial=ii['serial1'] item=self._findserial(serial, pbook) if item is None: dellist.append(i) progressmax+=len(dellist) # more work to do # Delete those entries for i in dellist: progresscur+=1 numexistingentries-=1 # keep count right ii=existingpbook[i] self.log("Deleting entry "+`i`+" - "+ii['name']) req=self.protocolclass.pbdeleteentryrequest() req.serial1=ii['serial1'] req.serial2=ii['serial2'] req.entrynumber=ii['number'] self.sendpbcommand(req, self.protocolclass.pbdeleteentryresponse) self.progress(progresscur, progressmax, "Deleting "+ii['name']) # also remove them from existingpbook del existingpbook[i] # counter to keep track of record number (otherwise appends don't work) counter=0 # Now rewrite out existing entries keys=existingpbook.keys() existingserials=[] keys.sort() # do in same order as existingpbook for i in keys: progresscur+=1 ii=pbook[self._findserial(existingpbook[i]['serial1'], pbook)] self.log("Rewriting entry "+`i`+" - "+ii['name']) self.progress(progresscur, progressmax, "Rewriting "+ii['name']) entry=self.makeentry(counter, ii, data) counter+=1 existingserials.append(existingpbook[i]['serial1']) req=self.protocolclass.pbupdateentryrequest() req.entry=entry res=self.sendpbcommand(req, self.protocolclass.pbupdateentryresponse) serialupdates.append( ( ii["bitpimserial"], {'sourcetype': self.serialsname, 'serial1': res.serial1, 'serial2': res.serial1, 'sourceuniqueid': data['uniqueserial']}) ) assert ii['serial1']==res.serial1 # serial should stay the same # Finally write out new entries keys=pbook.keys() keys.sort() for i in keys: ii=pbook[i] if ii['serial1'] in existingserials: continue # already wrote this one out progresscur+=1 entry=self.makeentry(counter, ii, data) counter+=1 self.log("Appending entry "+ii['name']) self.progress(progresscur, progressmax, "Writing "+ii['name']) req=self.protocolclass.pbappendentryrequest() req.entry=entry res=self.sendpbcommand(req, self.protocolclass.pbappendentryresponse) serialupdates.append( ( ii["bitpimserial"], {'sourcetype': self.serialsname, 'serial1': res.newserial, 'serial2': res.newserial, 'sourceuniqueid': data['uniqueserial']}) ) self.pbend() data["serialupdates"]=serialupdates if len(ringindex) == 0: return def _findserial(self, serial, dict): """Searches dict to find entry with matching serial. If not found, returns None""" for i in dict: if dict[i]['serial1']==serial: return i return None def getcalendar(self,result): res={} # Now read schedule buf=prototypes.buffer(self.getfilecontents("sch/sch_00.dat")) sc=self.protocolclass.schedulefile() sc.readfrombuffer(buf, logtitle="Calendar") self.logdata("Calendar", buf.getdata(), sc) for event in sc.events: entry={} if event.state == 0 or event.repeat == 0: continue # deleted entry if event.date == 0x11223344: continue # blanked entry date = event.date date += self._tm520epochtounix entry['start'] = self.decodedate(date) entry['end'] = self.decodedate(date) entry['pos']=event.pos entry['description'] = event.description if event.pos == 0: entry['description'] = 'Wake Up' entry['alarm'] = 0 if event.alarm & 0xB0 == 0xB0: entry['alarm'] = 1 entry['ringtone'] = 0 entry['changeserial'] = 0 entry['repeat'] = self._calrepeatvalues[event.repeat] # Hack - using snoozedelay to store the DST flag entry['snoozedelay'] = time.localtime(date)[8] res[event.pos]=entry result['calendar']=res return result def savecalendar(self, dict, merge): # ::TODO:: obey merge param # what will be written to the files eventsf=self.protocolclass.schedulefile() # what are we working with cal=dict['calendar'] newcal={} keys=cal.keys() keys.sort() # number of entries numactiveitems=len(keys) self.log("There are %d calendar entries" % (numactiveitems,)) counter = 1 # Write out alarm entry - see below for special handling alarm=self.protocolclass.scheduleevent() alarm.pos = 0 alarm.date = 0x11223344 alarm.state = 0 alarm.alarm = 0x80 alarm.repeat = 0 alarm.description = " NO ENTRY NO ENTRY " eventsf.events.append(dummy) # play with each entry for k in keys: # entry is what we will return to user entry=cal[k] data=self.protocolclass.scheduleevent() if counter >= 50: self.log("More than 49 entries in calendar, only writing out the first 49") break data.pos=counter counter+=1 entry['pos']=data.pos # simple copy of these fields for field in 'start','description': setattr(data,field,entry[field]) data.state = 2 data.alarm = 0 data.repeat = 1 dst = -1 if entry['snoozedelay']: dst = entry['snoozedelay'] data.date = self.encodedate(entry['start'],dst)-self._tm520epochtounix # Special alarm handling - TM520 is not capable of having an alarmed # entry, so we will only alarm on the earliest entry if entry['alarm'] > 0 and ( alarm.date == 0x11223344 or data.date < alarm.date ): alarm.date = data.date alarm.state = 1 alarm.alarm = 0xB0 alarm.repeat = 1 if entry['repeat'] > 0: alarm.repeat = 2 # put entry in nice shiny new dict we are building newcal[data.pos]=entry eventsf.events.append(data) if counter < 50: for i in range(counter, 50): dummy=self.protocolclass.scheduleevent() dummy.pos = i dummy.date = 0x11223344 dummy.state = 0 dummy.alarm = 0x80 dummy.repeat = 0 dummy.description = " NO ENTRY NO ENTRY " eventsf.events.append(dummy) # scribble everything out buf=prototypes.buffer() eventsf.writetobuffer(buf, logtitle="Writing calendar") self.writefile("sch/sch_00.dat", buf.getvalue()) # fix passed in dict dict['calendar']=newcal return dict def getringtones(self, result): media = {} try: ringers=self.getfilesystem('ringer') for r in ringers: name = r[len('ringer/'):] media[name] = self.getfilecontents(r) except com_brew.BrewNoSuchDirectoryException: pass result['ringtone'] = media return result def saveringtones(self, results, merge): try: ringers=self.getfilesystem('ringer') for r in ringers.keys(): ringers[r[len('ringer/'):]] = ringers[r] del ringers[r] except com_brew.BrewNoSuchDirectoryException: self.log("Ringer directory doesn't exist, firmware might not be download capable") return results index={} for r in results['ringtone-index']: if r['origin'] == 'ringers': index.append(r['name']) for r in ringers.keys(): # it is in the original index, are we writing it back out? if r in index and ringers[r]['size'] == len(results['ringtone'][r]): continue else: if not merge or r in index: # go ahead and delete unwanted files print "deleting",r self.rmfile("ringer/"+r) if r in index: self.writefile("ringer/"+r, results['ringtone'][r]) def decodedate(self,val): """Unpack 32 bit value into date/time @rtype: tuple @return: (year, month, day, hour, minute) """ return time.localtime(val)[:5] def encodedate(self,val,dst): tmp = [] for i in val: tmp.append(i) tmp += [0, 0, 0, dst] return time.mktime(tmp) def _findringtoneindex(self, index, name, pbentryname): if name is None: return 0 for i in index: if index[i]['name'] == name: return i self.log("%s: Unable to find ringtone %s in the index. Setting to default." % (pbentryname, name)) return 0 def _calcnumsum(self, entry, number): sumtbl = { '0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, 'H': 24, 'T': 36, '#': -13, '*': -6 } entry.number = number entry.chksum = 0 lastseven = number if len(lastseven) > 7: lastseven = lastseven[len(lastseven)-7:] if len(lastseven) > 0: for i in lastseven: entry.chksum += sumtbl[i] else: entry.chksum = 255 def makeentry(self, counter, entry, dict): e=self.protocolclass.pbentry() e.entrynumber=counter for k in entry: # special treatment for lists if k == 'numbers': l=getattr(e,k) for item in entry[k]: num=self.protocolclass.numentry() self._calcnumsum(num, item) l.append(num) elif k == 'ringtone': e.ringtone = self._findringtoneindex(dict['ringtone-index'], entry[k], entry['name']) else: # everything else we just set setattr(e,k,entry[k]) return e def phonize(str): """Convert the phone number into something the phone understands All digits, P, H, T, * and # are kept, everything else is removed""" return re.sub("[^0-9HPT#*]", "", str) class Profile(com_phone.Profile): serialsname='lgtm520' WALLPAPER_WIDTH=100 WALLPAPER_HEIGHT=100 MAX_WALLPAPER_BASENAME_LENGTH=19 MAX_RINGTONE_BASENAME_LENGTH=19 WALLPAPER_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789 ." RINGTONE_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789 ." WALLPAPER_CONVERT_FORMAT="bmp" usbids = ( ) deviceclasses = ("serial", ) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('ringtone', 'read', None), # all ringtone reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('ringtone', 'write', 'MERGE'), ('ringtone', 'write', 'OVERWRITE'), ) def convertphonebooktophone(self, helper, data): "Converts the data to what will be used by the phone" results = {} speeddial = {} entrynumber = 1 for pbentry in data['phonebook']: e = {} # entry out entry = data['phonebook'][pbentry] # entry in try: try: e['name'] = helper.getfullname(entry.get('names', []),1,1,16)[0] except IndexError: raise helper.ConversionFailed("No name assigned to entry") try: e['email']= helper.getemails(entry.get('emails', []),0,1,48)[0] except IndexError: e['email'] = "" e['ringtone'] = helper.getringtone(entry.get('ringtones', []), 'call', None) e['secret'] = helper.getflag(entry.get('flags',[]), 'secret', False) e['voicetag'] = helper.getflag(entry.get('flags',[]), 'voicetag', False) e['default'] = 0 numbers = entry.get('numbers', []) if len(numbers) < 1: raise helper.ConversionFailed("Too few numbers. Need at least 1 number") e['numbers']=[ '', '', '', '', '' ] available = 5 deferred = [] for num in numbers: number=phonize(num['number']) if len(number) == 0: continue # no actual digits in number if len(number) > 32: number = number[:32] # truncate long number if available == 0: break # all slots filled if not 'type' in num: deferred.append(num) continue elif not num['type'] in typemap['rev']: deferred.append(num) continue else: typeidx = typemap['rev'][num['type']] if len(e['numbers'][typeidx]) == 0: e['numbers'][typeidx] = number if 'speeddial' in num and not 'entrynumber' in e: if not num['speeddial'] in speeddial: e['entrynumber'] = num['speeddial'] e['default'] = typeidx available -= 1 if available > 0 and len(deferred) > 0: for num in deferred: if available == 0: break number=phonize(num['number']) if len(number) > 32: number = number[:32] # truncate long number for slot in range(0, 5): if len(e['numbers'][slot]) > 0: continue e['numbers'][slot] = number if 'speeddial' in num and not 'entrynumber' in e: if not num['speeddial'] in speeddial: e['entrynumber'] = num['speeddial'] e['default'] = slot available -= 1 if available == 5: raise helper.ConversionFailed("The phone numbers didn't have any digits for this entry") if not 'entrynumber' in e: while entrynumber in speedial: entrynumber += 1 if entrynumber > 199: self.log("Too many entries in phonebook, only 199 entries supported") break e['entrynumber'] = entrynumber speeddial[e['entrynumber']] = pbentry serial1 = helper.getserial(entry.get('serials', []), self.serialsname, data['uniqueserial'], 'serial1', 0) serial2 = helper.getserial(entry.get('serials', []), self.serialsname, data['uniqueserial'], 'serial2', serial1) e['serial1'] = serial1 e['serial2'] = serial2 for ss in entry["serials"]: if ss["sourcetype"]=="bitpim": e['bitpimserial']=ss assert e['bitpimserial'] results[pbentry] = e except helper.ConversionFailed: continue data['phonebook'] = results return data bitpim-1.0.7+dfsg1/src/phones/com_sanyonewer.py0000644001616600161660000000605610554051740017644 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_sanyonewer.py 3918 2007-01-19 05:15:12Z djpham $ """Common code for newer SCP-5500 style phones""" # standard modules import time import cStringIO # my modules import common import p_sanyonewer import com_brew import com_phone import com_sanyo import com_sanyomedia import prototypes import helpids class Phone(com_sanyomedia.SanyoMedia,com_sanyo.Phone): "Talk to a Sanyo SCP-5500 style cell phone" helpid=helpids.ID_PHONE_SANYOOTHERS builtinringtones=( 'None', 'Vibrate', 'Ringer & Voice', '', '', '', '', '', '', 'Tone 1', 'Tone 2', 'Tone 3', 'Tone 4', 'Tone 5', 'Tone 6', 'Tone 7', 'Tone 8', '', '', '', '', '', '', '', '', '', '', '', '', 'Tschaik.Swanlake', 'Satie Gymnop.#1', 'Bach Air on the G', 'Beethoven Sym.5', 'Greensleeves', 'Johnny Comes..', 'Foster Ky. Home', 'Asian Jingle', 'Disco', 'Toy Box', 'Rodeo' ) calendar_defaultringtone=4 calendar_defaultcaringtone=4 calendar_tonerange=xrange(18,26) calendar_toneoffset=8 def __init__(self, logtarget, commport): com_sanyo.Phone.__init__(self, logtarget, commport) com_sanyomedia.SanyoMedia.__init__(self) self.mode=self.MODENONE def sendpbcommand(self, request, responseclass, callsetmode=True, writemode=False, numsendretry=2, returnerror=False): # writemode seems not to be needed for this phone res=com_sanyo.Phone.sendpbcommand(self, request, responseclass, callsetmode=callsetmode, writemode=False, numsendretry=numsendretry, returnerror=returnerror) return res def savecalendar(self, dict, merge): req=self.protocolclass.beginendupdaterequest() req.beginend=1 # Start update res=self.sendpbcommand(req, self.protocolclass.beginendupdateresponse, writemode=True) self.writewait() result = com_sanyo.Phone.savecalendar(self, dict, merge) class Profile(com_sanyo.Profile): WALLPAPER_WIDTH=132 WALLPAPER_HEIGHT=144 OVERSIZE_PERCENTAGE=100 _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), ('ringtone', 'write', 'MERGE'), ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # Read sms messages ('todo', 'read', None), # Read todos ) def __init__(self): com_sanyo.Profile.__init__(self) bitpim-1.0.7+dfsg1/src/phones/com_lgvx7000.py0000644001616600161660000001040510554051740016732 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2005 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgvx7000.py 3918 2007-01-19 05:15:12Z djpham $ """Communicate with the LG VX7000 cell phone The VX7000 is substantially similar to the VX6000 but also supports video. The code in this file mainly inherits from VX4400 code and then extends where the 6000 has extra functionality """ # standard modules import time import cStringIO import sha # my modules import common import copy import p_lgvx7000 import com_lgvx4400 import com_brew import com_phone import com_lg import prototypes import helpids class Phone(com_lg.LGNewIndexedMedia,com_lgvx4400.Phone): "Talk to the LG VX7000 cell phone" desc="LG-VX7000" helpid=helpids.ID_PHONE_LGVX7000 protocolclass=p_lgvx7000 serialsname='lgvx7000' builtinringtones= ('Low Beep Once', 'Low Beeps', 'Loud Beep Once', 'Loud Beeps') + \ tuple(['Ringtone '+`n` for n in range(1,11)]) + \ ('No Ring',) ringtonelocations= ( # type index-file size-file directory-to-use lowest-index-to-use maximum-entries type-major ( 'ringers', 'dload/sound.dat', 'dload/soundsize.dat', 'dload/snd', 100, 50, 1), ) builtinwallpapers = () # none wallpaperlocations= ( ( 'images', 'dload/image.dat', 'dload/imagesize.dat', 'dload/img', 100, 50, 0), ) def __init__(self, logtarget, commport): com_lgvx4400.Phone.__init__(self,logtarget,commport) com_lg.LGNewIndexedMedia.__init__(self) self.mode=self.MODENONE my_model='VX7000' parentprofile=com_lgvx4400.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='LG Electronics Inc' phone_model='VX7000' WALLPAPER_WIDTH=176 WALLPAPER_HEIGHT=184 MAX_WALLPAPER_BASENAME_LENGTH=32 WALLPAPER_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ." WALLPAPER_CONVERT_FORMAT="jpg" MAX_RINGTONE_BASENAME_LENGTH=32 RINGTONE_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ." # the 7000 doesn't have seperate origins - they are all dumped in "images" imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) def GetImageOrigins(self): return self.imageorigins # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 176, 'height': 184, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 176, 'height': 184, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", {'width': 96, 'height': 80, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "fullscreen", {'width': 176, 'height': 220, 'format': "JPEG"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets def __init__(self): parentprofile.__init__(self) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('sms', 'write', 'OVERWRITE'), # all SMS list writing ) bitpim-1.0.7+dfsg1/src/phones/com_lglx5550.py0000644001616600161660000001447410554051740016742 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Simon Capper ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### """Communicate with the LG LX5550 cell phone The LX5550 is substantially similar to the VX4400 """ # standard modules import time import cStringIO import sha # my modules import common import copy import p_lglx5550 import com_lgvx4400 import com_brew import com_phone import com_lg import prototypes import sms class Phone(com_lgvx4400.Phone): "Talk to the LG LX5550 cell phone" desc="LG-LX5550" helpid=None protocolclass=p_lglx5550 serialsname='lglx5550' # more LX5550 indices imagelocations=( # offset, index file, files location, type, maximumentries ( 10, "download/dloadindex/brewImageIndex.map", "brew/shared", "images", 30) , ) ringtonelocations=( # offset, index file, files location, type, maximumentries ( 50, "download/dloadindex/brewRingerIndex.map", "user/sound/ringer", "ringers", 30), ) builtinimages= ('Foliage', 'Castle', 'Dandelion', 'Golf course', 'Icicles', 'Orangutan', 'Lake') builtinringtones= ('Ring 1', 'Ring 2', 'Ring 3', 'Ring 4', 'Ring 5', 'Ring 6', 'Ring 7', 'Ring 8', 'Annen Polka', 'Pachelbel Canon', 'Hallelujah', 'La Traviata', 'Leichte Kavallerie Overture', 'Mozart Symphony No.40', 'Bach Minuet', 'Farewell', 'Mozart Piano Sonata', 'Sting', 'O Solemio', 'Pizzicato Polka', 'Stars and Stripes Forever', 'Pineapple Rag', 'When the Saints Go Marching In', 'Latin', 'Carol 1', 'Carol 2') def __init__(self, logtarget, commport): com_lgvx4400.Phone.__init__(self,logtarget,commport) self.mode=self.MODENONE def _getquicktext(self): quicks=[] quicks=com_lgvx4400.Phone._getquicktext(self) built_in=['Yes', 'No', 'Call Me', 'Need Directions', 'Where are you?', 'Will Call you later', 'Busy', 'On My way', 'Will arive in 15 minutes', 'Thank you', 'Love you'] for s in built_in: quicks.append({ 'text': s, 'type': sms.CannedMsgEntry.builtin_type }) return quicks def eval_detect_data(self, res): found=False if res.get(self.brew_version_txt_key, None) is not None: found=res[self.brew_version_txt_key][:len(self.my_version_txt)]==self.my_version_txt if found: res['model']=self.my_model res['manufacturer']='LG Electronics Inc' s=res.get(self.esn_file_key, None) if s: res['esn']=self.get_esn(s) my_version_txt='AX5550' my_model='LX5550' def getphoneinfo(self, phone_info): self.log('Getting Phone Info') try: s=self.getfilecontents('brew/version.txt') if s[:6]=='AX5550': phone_info.model=self.my_model phone_info.manufacturer=Profile.phone_manufacturer req=p_brew.firmwarerequest() res=self.sendbrewcommand(req, self.protocolclass.firmwareresponse) phone_info.append('Firmware Version:', res.firmware) s=self.getfilecontents("nvm/$SYS.ESN")[85:89] txt='%02X%02X%02X%02X'%(ord(s[3]), ord(s[2]), ord(s[1]), ord(s[0])) phone_info.append('ESN:', txt) txt=self.getfilecontents("nvm/nvm/nvm_0000")[577:587] phone_info.append('Phone Number:', txt) except: if __debug__: raise parentprofile=com_lgvx4400.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='LG Electronics Inc' phone_model='LX5550' # no direct usb interface usbids=com_lgvx4400.Profile.usbids_usbtoserial # delay in rebooting the phone after a send data and delay between offline and reboot in seconds. reboot_delay=3 WALLPAPER_WIDTH=120 WALLPAPER_HEIGHT=131 MAX_WALLPAPER_BASENAME_LENGTH=19 WALLPAPER_FILENAME_CHARS="_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ." WALLPAPER_CONVERT_FORMAT="jpg" MAX_RINGTONE_BASENAME_LENGTH=19 RINGTONE_FILENAME_CHARS="_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ." imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) def GetImageOrigins(self): return self.imageorigins # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 120, 'height': 131, 'format': "BMP"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 120, 'height': 131, 'format': "BMP"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "fullscreen", {'width': 120, 'height': 160, 'format': "BMP"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar # some uncertainty over wallpaper write, more testing required #('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper #('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('memo', 'read', None), # all memo list reading DJP ('memo', 'write', 'OVERWRITE'), # all memo list writing DJP ('call_history', 'read', None), ('sms', 'read', None), ('sms', 'write', 'OVERWRITE'), ) def __init__(self): parentprofile.__init__(self) bitpim-1.0.7+dfsg1/src/phones/p_sanyo8300.py0000644001616600161660000027647110466234100016604 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Sanyo MM-8300""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 # Need to check. Is max phone will hold 32/96 or 33/97 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 HASRINGPICBUF=0 #BREW_FILE_SYSTEM=2 class qcpheader(BaseProtogenClass): __fields=['readwrite', 'command', 'packettype'] def __init__(self, *args, **kwargs): dict={} # User specified arguments in the packet description dict.update({'readwrite': 0x26}) # What was supplied to this function dict.update(kwargs) # Parent constructor super(qcpheader,self).__init__(**dict) if self.__class__ is qcpheader: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(qcpheader,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(qcpheader,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_readwrite.writetobuffer(buf) self.__field_command.writetobuffer(buf) self.__field_packettype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_readwrite=UINT(**{'sizeinbytes': 1}) self.__field_readwrite.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_packettype=UINT(**{'sizeinbytes': 1}) self.__field_packettype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_readwrite(self): return self.__field_readwrite.getvalue() def __setfield_readwrite(self, value): if isinstance(value,UINT): self.__field_readwrite=value else: self.__field_readwrite=UINT(value,**{'sizeinbytes': 1}) def __delfield_readwrite(self): del self.__field_readwrite readwrite=property(__getfield_readwrite, __setfield_readwrite, __delfield_readwrite, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_packettype(self): return self.__field_packettype.getvalue() def __setfield_packettype(self, value): if isinstance(value,UINT): self.__field_packettype=value else: self.__field_packettype=UINT(value,**{'sizeinbytes': 1}) def __delfield_packettype(self): del self.__field_packettype packettype=property(__getfield_packettype, __setfield_packettype, __delfield_packettype, None) def iscontainer(self): return True def containerelements(self): yield ('readwrite', self.__field_readwrite, None) yield ('command', self.__field_command, None) yield ('packettype', self.__field_packettype, None) class qcpwriteheader(BaseProtogenClass): __fields=['readwrite', 'command', 'packettype'] def __init__(self, *args, **kwargs): dict={} # User specified arguments in the packet description dict.update({'readwrite': 0x27}) # What was supplied to this function dict.update(kwargs) # Parent constructor super(qcpwriteheader,self).__init__(**dict) if self.__class__ is qcpwriteheader: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(qcpwriteheader,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(qcpwriteheader,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_readwrite.writetobuffer(buf) self.__field_command.writetobuffer(buf) self.__field_packettype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_readwrite=UINT(**{'sizeinbytes': 1}) self.__field_readwrite.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_packettype=UINT(**{'sizeinbytes': 1}) self.__field_packettype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_readwrite(self): return self.__field_readwrite.getvalue() def __setfield_readwrite(self, value): if isinstance(value,UINT): self.__field_readwrite=value else: self.__field_readwrite=UINT(value,**{'sizeinbytes': 1}) def __delfield_readwrite(self): del self.__field_readwrite readwrite=property(__getfield_readwrite, __setfield_readwrite, __delfield_readwrite, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_packettype(self): return self.__field_packettype.getvalue() def __setfield_packettype(self, value): if isinstance(value,UINT): self.__field_packettype=value else: self.__field_packettype=UINT(value,**{'sizeinbytes': 1}) def __delfield_packettype(self): del self.__field_packettype packettype=property(__getfield_packettype, __setfield_packettype, __delfield_packettype, None) def iscontainer(self): return True def containerelements(self): yield ('readwrite', self.__field_readwrite, None) yield ('command', self.__field_command, None) yield ('packettype', self.__field_packettype, None) class eventrequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventrequest,self).__init__(**dict) if self.__class__ is eventrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x23}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x23}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x23}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,**{'packettype': 0x0c, 'command': 0x23}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 129}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class eventslotinuserequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventslotinuserequest,self).__init__(**dict) if self.__class__ is eventslotinuserequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventslotinuserequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventslotinuserequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpheader(**{'readwrite': 0x26, 'packettype': 0x0d, 'command': 0x74}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader(**{'readwrite': 0x26, 'packettype': 0x0d, 'command': 0x74}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpheader(**{'readwrite': 0x26, 'packettype': 0x0d, 'command': 0x74}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,**{'readwrite': 0x26, 'packettype': 0x0d, 'command': 0x74}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 129}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class evententry(BaseProtogenClass): __fields=['slot', 'eventname', 'pad1', 'eventname_len', 'start', 'end', 'location', 'pad2', 'location_len', 'alarmdiff', 'period', 'dom', 'alarm', 'pad3', 'serial', 'pad4', 'ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(evententry,self).__init__(**dict) if self.__class__ is evententry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(evententry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(evententry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_eventname.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.writetobuffer(buf) self.__field_eventname_len.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_location.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad2.writetobuffer(buf) self.__field_location_len.writetobuffer(buf) self.__field_alarmdiff.writetobuffer(buf) self.__field_period.writetobuffer(buf) self.__field_dom.writetobuffer(buf) self.__field_alarm.writetobuffer(buf) try: self.__field_pad3 except: self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad3.writetobuffer(buf) try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.writetobuffer(buf) try: self.__field_pad4 except: self.__field_pad4=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad4.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_eventname=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_eventname.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.readfrombuffer(buf) self.__field_eventname_len=UINT(**{'sizeinbytes': 1}) self.__field_eventname_len.readfrombuffer(buf) self.__field_start=UINT(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=UINT(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_location=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_location.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad2.readfrombuffer(buf) self.__field_location_len=UINT(**{'sizeinbytes': 1}) self.__field_location_len.readfrombuffer(buf) self.__field_alarmdiff=UINT(**{'sizeinbytes': 4}) self.__field_alarmdiff.readfrombuffer(buf) self.__field_period=UINT(**{'sizeinbytes': 1}) self.__field_period.readfrombuffer(buf) self.__field_dom=UINT(**{'sizeinbytes': 1}) self.__field_dom.readfrombuffer(buf) self.__field_alarm=UINT(**{'sizeinbytes': 4}) self.__field_alarm.readfrombuffer(buf) self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad3.readfrombuffer(buf) self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.readfrombuffer(buf) self.__field_pad4=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad4.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 2}) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_eventname(self): return self.__field_eventname.getvalue() def __setfield_eventname(self, value): if isinstance(value,USTRING): self.__field_eventname=value else: self.__field_eventname=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_eventname(self): del self.__field_eventname eventname=property(__getfield_eventname, __setfield_eventname, __delfield_eventname, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_eventname_len(self): return self.__field_eventname_len.getvalue() def __setfield_eventname_len(self, value): if isinstance(value,UINT): self.__field_eventname_len=value else: self.__field_eventname_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_eventname_len(self): del self.__field_eventname_len eventname_len=property(__getfield_eventname_len, __setfield_eventname_len, __delfield_eventname_len, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,UINT): self.__field_start=value else: self.__field_start=UINT(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, "# seconds since Jan 1, 1980 approximately") def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,UINT): self.__field_end=value else: self.__field_end=UINT(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_location(self): return self.__field_location.getvalue() def __setfield_location(self, value): if isinstance(value,USTRING): self.__field_location=value else: self.__field_location=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_location(self): del self.__field_location location=property(__getfield_location, __setfield_location, __delfield_location, None) def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_location_len(self): return self.__field_location_len.getvalue() def __setfield_location_len(self, value): if isinstance(value,UINT): self.__field_location_len=value else: self.__field_location_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_location_len(self): del self.__field_location_len location_len=property(__getfield_location_len, __setfield_location_len, __delfield_location_len, None) def __getfield_alarmdiff(self): return self.__field_alarmdiff.getvalue() def __setfield_alarmdiff(self, value): if isinstance(value,UINT): self.__field_alarmdiff=value else: self.__field_alarmdiff=UINT(value,**{'sizeinbytes': 4}) def __delfield_alarmdiff(self): del self.__field_alarmdiff alarmdiff=property(__getfield_alarmdiff, __setfield_alarmdiff, __delfield_alarmdiff, "Displayed alarm time") def __getfield_period(self): return self.__field_period.getvalue() def __setfield_period(self, value): if isinstance(value,UINT): self.__field_period=value else: self.__field_period=UINT(value,**{'sizeinbytes': 1}) def __delfield_period(self): del self.__field_period period=property(__getfield_period, __setfield_period, __delfield_period, "No, Daily, Weekly, Monthly, Yearly") def __getfield_dom(self): return self.__field_dom.getvalue() def __setfield_dom(self, value): if isinstance(value,UINT): self.__field_dom=value else: self.__field_dom=UINT(value,**{'sizeinbytes': 1}) def __delfield_dom(self): del self.__field_dom dom=property(__getfield_dom, __setfield_dom, __delfield_dom, "Day of month for the event") def __getfield_alarm(self): return self.__field_alarm.getvalue() def __setfield_alarm(self, value): if isinstance(value,UINT): self.__field_alarm=value else: self.__field_alarm=UINT(value,**{'sizeinbytes': 4}) def __delfield_alarm(self): del self.__field_alarm alarm=property(__getfield_alarm, __setfield_alarm, __delfield_alarm, None) def __getfield_pad3(self): try: self.__field_pad3 except: self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad3.getvalue() def __setfield_pad3(self, value): if isinstance(value,UNKNOWN): self.__field_pad3=value else: self.__field_pad3=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad3(self): del self.__field_pad3 pad3=property(__getfield_pad3, __setfield_pad3, __delfield_pad3, None) def __getfield_serial(self): try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_serial.getvalue() def __setfield_serial(self, value): if isinstance(value,UINT): self.__field_serial=value else: self.__field_serial=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_serial(self): del self.__field_serial serial=property(__getfield_serial, __setfield_serial, __delfield_serial, "Some kind of serial number") def __getfield_pad4(self): try: self.__field_pad4 except: self.__field_pad4=UNKNOWN(**{'sizeinbytes': 3}) return self.__field_pad4.getvalue() def __setfield_pad4(self, value): if isinstance(value,UNKNOWN): self.__field_pad4=value else: self.__field_pad4=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_pad4(self): del self.__field_pad4 pad4=property(__getfield_pad4, __setfield_pad4, __delfield_pad4, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 2}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('eventname', self.__field_eventname, None) yield ('pad1', self.__field_pad1, None) yield ('eventname_len', self.__field_eventname_len, None) yield ('start', self.__field_start, "# seconds since Jan 1, 1980 approximately") yield ('end', self.__field_end, None) yield ('location', self.__field_location, None) yield ('pad2', self.__field_pad2, None) yield ('location_len', self.__field_location_len, None) yield ('alarmdiff', self.__field_alarmdiff, "Displayed alarm time") yield ('period', self.__field_period, "No, Daily, Weekly, Monthly, Yearly") yield ('dom', self.__field_dom, "Day of month for the event") yield ('alarm', self.__field_alarm, None) yield ('pad3', self.__field_pad3, None) yield ('serial', self.__field_serial, "Some kind of serial number") yield ('pad4', self.__field_pad4, None) yield ('ringtone', self.__field_ringtone, None) class eventresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventresponse,self).__init__(**dict) if self.__class__ is eventresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader() self.__field_header.readfrombuffer(buf) self.__field_entry=evententry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,evententry): self.__field_entry=value else: self.__field_entry=evententry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class eventslotinuseresponse(BaseProtogenClass): __fields=['header', 'slot', 'flag', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventslotinuseresponse,self).__init__(**dict) if self.__class__ is eventslotinuseresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventslotinuseresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventslotinuseresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader() self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, None) yield ('pad', self.__field_pad, None) class eventslotinuseupdaterequest(BaseProtogenClass): __fields=['header', 'slot', 'flag', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventslotinuseupdaterequest,self).__init__(**dict) if self.__class__ is eventslotinuseupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventslotinuseupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventslotinuseupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0d, 'command': 0x74}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 124}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpwriteheader(**{'packettype': 0x0d, 'command': 0x74}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 124}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0d, 'command': 0x74}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpwriteheader): self.__field_header=value else: self.__field_header=qcpwriteheader(value,**{'packettype': 0x0d, 'command': 0x74}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 124}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 124}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, None) yield ('pad', self.__field_pad, None) class eventupdaterequest(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventupdaterequest,self).__init__(**dict) if self.__class__ is eventupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x23}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 56}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x23}) self.__field_header.readfrombuffer(buf) self.__field_entry=evententry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 56}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x23}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpwriteheader): self.__field_header=value else: self.__field_header=qcpwriteheader(value,**{'packettype': 0x0c, 'command':0x23}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,evententry): self.__field_entry=value else: self.__field_entry=evententry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 56}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 56}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class callalarmrequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmrequest,self).__init__(**dict) if self.__class__ is callalarmrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x24}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x24}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x24}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,**{'packettype': 0x0c, 'command': 0x24}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 129}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class callalarmresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmresponse,self).__init__(**dict) if self.__class__ is callalarmresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader() self.__field_header.readfrombuffer(buf) self.__field_entry=callalarmentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,callalarmentry): self.__field_entry=value else: self.__field_entry=callalarmentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class callalarmupdaterequest(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmupdaterequest,self).__init__(**dict) if self.__class__ is callalarmupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x24}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 40}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x24}) self.__field_header.readfrombuffer(buf) self.__field_entry=callalarmentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 40}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x24}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpwriteheader): self.__field_header=value else: self.__field_header=qcpwriteheader(value,**{'packettype': 0x0c, 'command':0x24}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,callalarmentry): self.__field_entry=value else: self.__field_entry=callalarmentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 40}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 40}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class callalarmslotinuserequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmslotinuserequest,self).__init__(**dict) if self.__class__ is callalarmslotinuserequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmslotinuserequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmslotinuserequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0d, 'command': 0x76}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader(**{'packettype': 0x0d, 'command': 0x76}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0d, 'command': 0x76}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,**{'packettype': 0x0d, 'command': 0x76}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 129}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class callalarmslotinuseresponse(BaseProtogenClass): __fields=['header', 'slot', 'flag', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmslotinuseresponse,self).__init__(**dict) if self.__class__ is callalarmslotinuseresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmslotinuseresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmslotinuseresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader() self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, None) yield ('pad', self.__field_pad, None) class callalarmentry(BaseProtogenClass): __fields=['slot', 'pad0', 'phonenum', 'phonenum_len', 'date', 'period', 'dom', 'datedup', 'name', 'pad1', 'name_len', 'phonenumbertype', 'phonenumberslot', 'pad2', 'serial', 'pad3', 'ringtone', 'pad4', 'flag'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmentry,self).__init__(**dict) if self.__class__ is callalarmentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) try: self.__field_pad0 except: self.__field_pad0=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad0.writetobuffer(buf) self.__field_phonenum.writetobuffer(buf) self.__field_phonenum_len.writetobuffer(buf) self.__field_date.writetobuffer(buf) self.__field_period.writetobuffer(buf) self.__field_dom.writetobuffer(buf) self.__field_datedup.writetobuffer(buf) self.__field_name.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.writetobuffer(buf) self.__field_name_len.writetobuffer(buf) self.__field_phonenumbertype.writetobuffer(buf) self.__field_phonenumberslot.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad2.writetobuffer(buf) try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.writetobuffer(buf) try: self.__field_pad3 except: self.__field_pad3=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad3.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 1, 'default': 0xfc}) self.__field_ringtone.writetobuffer(buf) try: self.__field_pad4 except: self.__field_pad4=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad4.writetobuffer(buf) try: self.__field_flag except: self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad0=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad0.readfrombuffer(buf) self.__field_phonenum=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_phonenum.readfrombuffer(buf) self.__field_phonenum_len=UINT(**{'sizeinbytes': 1}) self.__field_phonenum_len.readfrombuffer(buf) self.__field_date=UINT(**{'sizeinbytes': 4}) self.__field_date.readfrombuffer(buf) self.__field_period=UINT(**{'sizeinbytes': 1}) self.__field_period.readfrombuffer(buf) self.__field_dom=UINT(**{'sizeinbytes': 1}) self.__field_dom.readfrombuffer(buf) self.__field_datedup=UINT(**{'sizeinbytes': 4}) self.__field_datedup.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_name.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.readfrombuffer(buf) self.__field_name_len=UINT(**{'sizeinbytes': 1}) self.__field_name_len.readfrombuffer(buf) self.__field_phonenumbertype=UINT(**{'sizeinbytes': 1}) self.__field_phonenumbertype.readfrombuffer(buf) self.__field_phonenumberslot=UINT(**{'sizeinbytes': 2}) self.__field_phonenumberslot.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad2.readfrombuffer(buf) self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.readfrombuffer(buf) self.__field_pad3=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad3.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1, 'default': 0xfc}) self.__field_ringtone.readfrombuffer(buf) self.__field_pad4=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad4.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad0(self): try: self.__field_pad0 except: self.__field_pad0=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad0.getvalue() def __setfield_pad0(self, value): if isinstance(value,UNKNOWN): self.__field_pad0=value else: self.__field_pad0=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad0(self): del self.__field_pad0 pad0=property(__getfield_pad0, __setfield_pad0, __delfield_pad0, "Not the flag?") def __getfield_phonenum(self): return self.__field_phonenum.getvalue() def __setfield_phonenum(self, value): if isinstance(value,USTRING): self.__field_phonenum=value else: self.__field_phonenum=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_phonenum(self): del self.__field_phonenum phonenum=property(__getfield_phonenum, __setfield_phonenum, __delfield_phonenum, None) def __getfield_phonenum_len(self): return self.__field_phonenum_len.getvalue() def __setfield_phonenum_len(self, value): if isinstance(value,UINT): self.__field_phonenum_len=value else: self.__field_phonenum_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_phonenum_len(self): del self.__field_phonenum_len phonenum_len=property(__getfield_phonenum_len, __setfield_phonenum_len, __delfield_phonenum_len, None) def __getfield_date(self): return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,UINT): self.__field_date=value else: self.__field_date=UINT(value,**{'sizeinbytes': 4}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, "# seconds since Jan 1, 1980 approximately") def __getfield_period(self): return self.__field_period.getvalue() def __setfield_period(self, value): if isinstance(value,UINT): self.__field_period=value else: self.__field_period=UINT(value,**{'sizeinbytes': 1}) def __delfield_period(self): del self.__field_period period=property(__getfield_period, __setfield_period, __delfield_period, "No, Daily, Weekly, Monthly, Yearly") def __getfield_dom(self): return self.__field_dom.getvalue() def __setfield_dom(self, value): if isinstance(value,UINT): self.__field_dom=value else: self.__field_dom=UINT(value,**{'sizeinbytes': 1}) def __delfield_dom(self): del self.__field_dom dom=property(__getfield_dom, __setfield_dom, __delfield_dom, "Day of month for the event") def __getfield_datedup(self): return self.__field_datedup.getvalue() def __setfield_datedup(self, value): if isinstance(value,UINT): self.__field_datedup=value else: self.__field_datedup=UINT(value,**{'sizeinbytes': 4}) def __delfield_datedup(self): del self.__field_datedup datedup=property(__getfield_datedup, __setfield_datedup, __delfield_datedup, "Copy of the date. Always the same???") def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_name_len(self): return self.__field_name_len.getvalue() def __setfield_name_len(self, value): if isinstance(value,UINT): self.__field_name_len=value else: self.__field_name_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_name_len(self): del self.__field_name_len name_len=property(__getfield_name_len, __setfield_name_len, __delfield_name_len, None) def __getfield_phonenumbertype(self): return self.__field_phonenumbertype.getvalue() def __setfield_phonenumbertype(self, value): if isinstance(value,UINT): self.__field_phonenumbertype=value else: self.__field_phonenumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_phonenumbertype(self): del self.__field_phonenumbertype phonenumbertype=property(__getfield_phonenumbertype, __setfield_phonenumbertype, __delfield_phonenumbertype, "1: Home, 2: Work, ...") def __getfield_phonenumberslot(self): return self.__field_phonenumberslot.getvalue() def __setfield_phonenumberslot(self, value): if isinstance(value,UINT): self.__field_phonenumberslot=value else: self.__field_phonenumberslot=UINT(value,**{'sizeinbytes': 2}) def __delfield_phonenumberslot(self): del self.__field_phonenumberslot phonenumberslot=property(__getfield_phonenumberslot, __setfield_phonenumberslot, __delfield_phonenumberslot, None) def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_serial(self): try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_serial.getvalue() def __setfield_serial(self, value): if isinstance(value,UINT): self.__field_serial=value else: self.__field_serial=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_serial(self): del self.__field_serial serial=property(__getfield_serial, __setfield_serial, __delfield_serial, None) def __getfield_pad3(self): try: self.__field_pad3 except: self.__field_pad3=UNKNOWN(**{'sizeinbytes': 2}) return self.__field_pad3.getvalue() def __setfield_pad3(self, value): if isinstance(value,UNKNOWN): self.__field_pad3=value else: self.__field_pad3=UNKNOWN(value,**{'sizeinbytes': 2}) def __delfield_pad3(self): del self.__field_pad3 pad3=property(__getfield_pad3, __setfield_pad3, __delfield_pad3, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'sizeinbytes': 1, 'default': 0xfc}) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1, 'default': 0xfc}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_pad4(self): try: self.__field_pad4 except: self.__field_pad4=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad4.getvalue() def __setfield_pad4(self, value): if isinstance(value,UNKNOWN): self.__field_pad4=value else: self.__field_pad4=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad4(self): del self.__field_pad4 pad4=property(__getfield_pad4, __setfield_pad4, __delfield_pad4, " This may be the ringtone. Need to understand ") def __getfield_flag(self): try: self.__field_flag except: self.__field_flag=UINT(**{'sizeinbytes': 1}) return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('pad0', self.__field_pad0, "Not the flag?") yield ('phonenum', self.__field_phonenum, None) yield ('phonenum_len', self.__field_phonenum_len, None) yield ('date', self.__field_date, "# seconds since Jan 1, 1980 approximately") yield ('period', self.__field_period, "No, Daily, Weekly, Monthly, Yearly") yield ('dom', self.__field_dom, "Day of month for the event") yield ('datedup', self.__field_datedup, "Copy of the date. Always the same???") yield ('name', self.__field_name, None) yield ('pad1', self.__field_pad1, None) yield ('name_len', self.__field_name_len, None) yield ('phonenumbertype', self.__field_phonenumbertype, "1: Home, 2: Work, ...") yield ('phonenumberslot', self.__field_phonenumberslot, None) yield ('pad2', self.__field_pad2, None) yield ('serial', self.__field_serial, None) yield ('pad3', self.__field_pad3, None) yield ('ringtone', self.__field_ringtone, None) yield ('pad4', self.__field_pad4, " This may be the ringtone. Need to understand ") yield ('flag', self.__field_flag, None) class todorequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(todorequest,self).__init__(**dict) if self.__class__ is todorequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(todorequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(todorequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x25}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x25}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x25}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,**{'packettype': 0x0c, 'command': 0x25}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 129}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class todoentry(BaseProtogenClass): __fields=['slot', 'flag', 'todo', 'pad1', 'todo_len', 'priority', 'dunno', 'order'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(todoentry,self).__init__(**dict) if self.__class__ is todoentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(todoentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(todoentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) self.__field_todo.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.writetobuffer(buf) self.__field_todo_len.writetobuffer(buf) self.__field_priority.writetobuffer(buf) try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 1}) self.__field_dunno.writetobuffer(buf) self.__field_order.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_todo=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False}) self.__field_todo.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.readfrombuffer(buf) self.__field_todo_len=UINT(**{'sizeinbytes': 1}) self.__field_todo_len.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_dunno=UINT(**{'sizeinbytes': 1}) self.__field_dunno.readfrombuffer(buf) self.__field_order=UINT(**{'sizeinbytes': 1}) self.__field_order.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, "0: Not used, 1: Used") def __getfield_todo(self): return self.__field_todo.getvalue() def __setfield_todo(self, value): if isinstance(value,USTRING): self.__field_todo=value else: self.__field_todo=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False}) def __delfield_todo(self): del self.__field_todo todo=property(__getfield_todo, __setfield_todo, __delfield_todo, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_todo_len(self): return self.__field_todo_len.getvalue() def __setfield_todo_len(self, value): if isinstance(value,UINT): self.__field_todo_len=value else: self.__field_todo_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_todo_len(self): del self.__field_todo_len todo_len=property(__getfield_todo_len, __setfield_todo_len, __delfield_todo_len, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, "0: Normal, 1: Urgent, 2: Done") def __getfield_dunno(self): try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 1}) return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, "Maybe always zero") def __getfield_order(self): return self.__field_order.getvalue() def __setfield_order(self, value): if isinstance(value,UINT): self.__field_order=value else: self.__field_order=UINT(value,**{'sizeinbytes': 1}) def __delfield_order(self): del self.__field_order order=property(__getfield_order, __setfield_order, __delfield_order, "Gets sorted on screen in this order") def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, "0: Not used, 1: Used") yield ('todo', self.__field_todo, None) yield ('pad1', self.__field_pad1, None) yield ('todo_len', self.__field_todo_len, None) yield ('priority', self.__field_priority, "0: Normal, 1: Urgent, 2: Done") yield ('dunno', self.__field_dunno, "Maybe always zero") yield ('order', self.__field_order, "Gets sorted on screen in this order") class todoresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(todoresponse,self).__init__(**dict) if self.__class__ is todoresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(todoresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(todoresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader() self.__field_header.readfrombuffer(buf) self.__field_entry=todoentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,todoentry): self.__field_entry=value else: self.__field_entry=todoentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) bitpim-1.0.7+dfsg1/src/phones/p_samsungschu470.py0000644001616600161660000045005611321251753017730 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to the Samsung SCH-U470 (Juke) Phone""" from prototypes import * from prototypes_samsung import * from p_brew import * from p_samsungschu740 import * PB_FLG2_RINGTONE=0x0001 PB_FLG2_WP=0x0002 CL_MAX_ENTRIES=90 class NumberEntry(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['number', 'option', 'speeddial', 'ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(NumberEntry,self).__init__(**dict) if self.__class__ is NumberEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(NumberEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(NumberEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=STRING(**{ 'terminator': None, 'pascal': True }) self.__field_number.readfrombuffer(buf) self.__field_option=UINT(**{'sizeinbytes': 1}) self.__field_option.readfrombuffer(buf) if self.has_speeddial: self.__field_speeddial=UINT(**{'sizeinbytes': 2}) self.__field_speeddial.readfrombuffer(buf) if self.has_ringtone: self.__field_ringtone=STRING(**{ 'terminator': None, 'pascal': True }) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,STRING): self.__field_number=value else: self.__field_number=STRING(value,**{ 'terminator': None, 'pascal': True }) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_option(self): return self.__field_option.getvalue() def __setfield_option(self, value): if isinstance(value,UINT): self.__field_option=value else: self.__field_option=UINT(value,**{'sizeinbytes': 1}) def __delfield_option(self): del self.__field_option option=property(__getfield_option, __setfield_option, __delfield_option, None) def __getfield_speeddial(self): return self.__field_speeddial.getvalue() def __setfield_speeddial(self, value): if isinstance(value,UINT): self.__field_speeddial=value else: self.__field_speeddial=UINT(value,**{'sizeinbytes': 2}) def __delfield_speeddial(self): del self.__field_speeddial speeddial=property(__getfield_speeddial, __setfield_speeddial, __delfield_speeddial, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,STRING): self.__field_ringtone=value else: self.__field_ringtone=STRING(value,**{ 'terminator': None, 'pascal': True }) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) yield ('option', self.__field_option, None) if self.has_speeddial: yield ('speeddial', self.__field_speeddial, None) if self.has_ringtone: yield ('ringtone', self.__field_ringtone, None) @property def has_speeddial(self): return bool(self.option & PB_FLG_SPEEDDIAL) @property def has_ringtone(self): return bool(self.option & PB_FLG_RINGTONE) @property def is_primary(self): return bool(self.option & PB_FLG_PRIMARY) class PBEntry(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['info', 'info2', 'name', 'email', 'email2', 'home', 'work', 'cell', 'fax', 'cell2', 'note', 'datetime', 'group', 'wallpaper', 'wallpaper_range', 'ringtone', 'wallpaper2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PBEntry,self).__init__(**dict) if self.__class__ is PBEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PBEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PBEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_info=UINT(**{'sizeinbytes': 2}) self.__field_info.readfrombuffer(buf) self.__field_info2=UINT(**{'sizeinbytes': 2}) self.__field_info2.readfrombuffer(buf) if self.has_name: self.__field_name=USTRING(**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) self.__field_name.readfrombuffer(buf) if self.has_email: self.__field_email=USTRING(**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) self.__field_email.readfrombuffer(buf) if self.has_email2: self.__field_email2=USTRING(**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) self.__field_email2.readfrombuffer(buf) if self.has_home: self.__field_home=NumberEntry() self.__field_home.readfrombuffer(buf) if self.has_work: self.__field_work=NumberEntry() self.__field_work.readfrombuffer(buf) if self.has_cell: self.__field_cell=NumberEntry() self.__field_cell.readfrombuffer(buf) if self.has_fax: self.__field_fax=NumberEntry() self.__field_fax.readfrombuffer(buf) if self.has_cell2: self.__field_cell2=NumberEntry() self.__field_cell2.readfrombuffer(buf) if self.has_note: self.__field_note=STRING(**{ 'terminator': None, 'pascal': True }) self.__field_note.readfrombuffer(buf) if self.has_date: self.__field_datetime=DateTime(**{'sizeinbytes': 4}) self.__field_datetime.readfrombuffer(buf) if self.has_group: self.__field_group=UINT(**{'sizeinbytes': 1}) self.__field_group.readfrombuffer(buf) if self.has_wallpaper: self.__field_wallpaper=STRING(**{ 'terminator': None, 'pascal': True }) self.__field_wallpaper.readfrombuffer(buf) self.__field_wallpaper_range=UINT(**{'sizeinbytes': 4}) self.__field_wallpaper_range.readfrombuffer(buf) if self.has_ringtone: self.__field_ringtone=STRING(**{ 'terminator': None, 'pascal': True }) self.__field_ringtone.readfrombuffer(buf) if self.has_wallpaper2: self.__field_wallpaper2=STRING(**{ 'terminator': None, 'pascal': True }) self.__field_wallpaper2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_info(self): return self.__field_info.getvalue() def __setfield_info(self, value): if isinstance(value,UINT): self.__field_info=value else: self.__field_info=UINT(value,**{'sizeinbytes': 2}) def __delfield_info(self): del self.__field_info info=property(__getfield_info, __setfield_info, __delfield_info, None) def __getfield_info2(self): return self.__field_info2.getvalue() def __setfield_info2(self, value): if isinstance(value,UINT): self.__field_info2=value else: self.__field_info2=UINT(value,**{'sizeinbytes': 2}) def __delfield_info2(self): del self.__field_info2 info2=property(__getfield_info2, __setfield_info2, __delfield_info2, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def __getfield_email2(self): return self.__field_email2.getvalue() def __setfield_email2(self, value): if isinstance(value,USTRING): self.__field_email2=value else: self.__field_email2=USTRING(value,**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) def __delfield_email2(self): del self.__field_email2 email2=property(__getfield_email2, __setfield_email2, __delfield_email2, None) def __getfield_home(self): return self.__field_home.getvalue() def __setfield_home(self, value): if isinstance(value,NumberEntry): self.__field_home=value else: self.__field_home=NumberEntry(value,) def __delfield_home(self): del self.__field_home home=property(__getfield_home, __setfield_home, __delfield_home, None) def __getfield_work(self): return self.__field_work.getvalue() def __setfield_work(self, value): if isinstance(value,NumberEntry): self.__field_work=value else: self.__field_work=NumberEntry(value,) def __delfield_work(self): del self.__field_work work=property(__getfield_work, __setfield_work, __delfield_work, None) def __getfield_cell(self): return self.__field_cell.getvalue() def __setfield_cell(self, value): if isinstance(value,NumberEntry): self.__field_cell=value else: self.__field_cell=NumberEntry(value,) def __delfield_cell(self): del self.__field_cell cell=property(__getfield_cell, __setfield_cell, __delfield_cell, None) def __getfield_fax(self): return self.__field_fax.getvalue() def __setfield_fax(self, value): if isinstance(value,NumberEntry): self.__field_fax=value else: self.__field_fax=NumberEntry(value,) def __delfield_fax(self): del self.__field_fax fax=property(__getfield_fax, __setfield_fax, __delfield_fax, None) def __getfield_cell2(self): return self.__field_cell2.getvalue() def __setfield_cell2(self, value): if isinstance(value,NumberEntry): self.__field_cell2=value else: self.__field_cell2=NumberEntry(value,) def __delfield_cell2(self): del self.__field_cell2 cell2=property(__getfield_cell2, __setfield_cell2, __delfield_cell2, None) def __getfield_note(self): return self.__field_note.getvalue() def __setfield_note(self, value): if isinstance(value,STRING): self.__field_note=value else: self.__field_note=STRING(value,**{ 'terminator': None, 'pascal': True }) def __delfield_note(self): del self.__field_note note=property(__getfield_note, __setfield_note, __delfield_note, None) def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,DateTime): self.__field_datetime=value else: self.__field_datetime=DateTime(value,**{'sizeinbytes': 4}) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 1}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,STRING): self.__field_wallpaper=value else: self.__field_wallpaper=STRING(value,**{ 'terminator': None, 'pascal': True }) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_wallpaper_range(self): return self.__field_wallpaper_range.getvalue() def __setfield_wallpaper_range(self, value): if isinstance(value,UINT): self.__field_wallpaper_range=value else: self.__field_wallpaper_range=UINT(value,**{'sizeinbytes': 4}) def __delfield_wallpaper_range(self): del self.__field_wallpaper_range wallpaper_range=property(__getfield_wallpaper_range, __setfield_wallpaper_range, __delfield_wallpaper_range, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,STRING): self.__field_ringtone=value else: self.__field_ringtone=STRING(value,**{ 'terminator': None, 'pascal': True }) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_wallpaper2(self): return self.__field_wallpaper2.getvalue() def __setfield_wallpaper2(self, value): if isinstance(value,STRING): self.__field_wallpaper2=value else: self.__field_wallpaper2=STRING(value,**{ 'terminator': None, 'pascal': True }) def __delfield_wallpaper2(self): del self.__field_wallpaper2 wallpaper2=property(__getfield_wallpaper2, __setfield_wallpaper2, __delfield_wallpaper2, None) def iscontainer(self): return True def containerelements(self): yield ('info', self.__field_info, None) yield ('info2', self.__field_info2, None) if self.has_name: yield ('name', self.__field_name, None) if self.has_email: yield ('email', self.__field_email, None) if self.has_email2: yield ('email2', self.__field_email2, None) if self.has_home: yield ('home', self.__field_home, None) if self.has_work: yield ('work', self.__field_work, None) if self.has_cell: yield ('cell', self.__field_cell, None) if self.has_fax: yield ('fax', self.__field_fax, None) if self.has_cell2: yield ('cell2', self.__field_cell2, None) if self.has_note: yield ('note', self.__field_note, None) if self.has_date: yield ('datetime', self.__field_datetime, None) if self.has_group: yield ('group', self.__field_group, None) if self.has_wallpaper: yield ('wallpaper', self.__field_wallpaper, None) yield ('wallpaper_range', self.__field_wallpaper_range, None) if self.has_ringtone: yield ('ringtone', self.__field_ringtone, None) if self.has_wallpaper2: yield ('wallpaper2', self.__field_wallpaper2, None) @property def has_name(self): return bool(self.info & PB_FLG_NAME) @property def has_email(self): return bool(self.info & PB_FLG_EMAIL) @property def has_email2(self): return bool(self.info & PB_FLG_EMAIL2) @property def has_home(self): return bool(self.info & PB_FLG_HOME) @property def has_work(self): return bool(self.info & PB_FLG_WORK) @property def has_cell(self): return bool(self.info & PB_FLG_CELL) @property def has_fax(self): return bool(self.info & PB_FLG_FAX) @property def has_cell2(self): return bool(self.info & PB_FLG_CELL2) @property def has_note(self): return bool(self.info & PB_FLG_NOTE) @property def has_date(self): return bool(self.info & PB_FLG_DATE) @property def has_group(self): return bool(self.info & PB_FLG_GROUP) @property def has_wallpaper(self): return bool(self.info & PB_FLG_WP) @property def has_ringtone(self): return bool(self.info2 & PB_FLG2_RINGTONE) @property def has_wallpaper2(self): return bool(self.info2 & PB_FLG2_WP) class LenEntry(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['itemlen'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(LenEntry,self).__init__(**dict) if self.__class__ is LenEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(LenEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(LenEntry,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0 } dict2.update(kwargs) kwargs=dict2 self.__field_itemlen=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_itemlen=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_itemlen.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_itemlen(self): try: self.__field_itemlen except: self.__field_itemlen=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_itemlen.getvalue() def __setfield_itemlen(self, value): if isinstance(value,UINT): self.__field_itemlen=value else: self.__field_itemlen=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_itemlen(self): del self.__field_itemlen itemlen=property(__getfield_itemlen, __setfield_itemlen, __delfield_itemlen, None) def iscontainer(self): return True def containerelements(self): yield ('itemlen', self.__field_itemlen, None) class PBFile(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['lens', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PBFile,self).__init__(**dict) if self.__class__ is PBFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PBFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PBFile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_lens=LIST(**{ 'elementclass': LenEntry, 'length': 8, 'createdefault': True }) self.__field_lens.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': PBEntry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_lens(self): try: self.__field_lens except: self.__field_lens=LIST(**{ 'elementclass': LenEntry, 'length': 8, 'createdefault': True }) return self.__field_lens.getvalue() def __setfield_lens(self, value): if isinstance(value,LIST): self.__field_lens=value else: self.__field_lens=LIST(value,**{ 'elementclass': LenEntry, 'length': 8, 'createdefault': True }) def __delfield_lens(self): del self.__field_lens lens=property(__getfield_lens, __setfield_lens, __delfield_lens, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': PBEntry }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': PBEntry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('lens', self.__field_lens, None) yield ('items', self.__field_items, None) class PBFileHeader(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['lens'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PBFileHeader,self).__init__(**dict) if self.__class__ is PBFileHeader: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PBFileHeader,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PBFileHeader,kwargs) if len(args): dict2={ 'elementclass': LenEntry, 'length': 8, 'createdefault': True } dict2.update(kwargs) kwargs=dict2 self.__field_lens=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_lens=LIST(**{ 'elementclass': LenEntry, 'length': 8, 'createdefault': True }) self.__field_lens.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_lens(self): try: self.__field_lens except: self.__field_lens=LIST(**{ 'elementclass': LenEntry, 'length': 8, 'createdefault': True }) return self.__field_lens.getvalue() def __setfield_lens(self, value): if isinstance(value,LIST): self.__field_lens=value else: self.__field_lens=LIST(value,**{ 'elementclass': LenEntry, 'length': 8, 'createdefault': True }) def __delfield_lens(self): del self.__field_lens lens=property(__getfield_lens, __setfield_lens, __delfield_lens, None) def iscontainer(self): return True def containerelements(self): yield ('lens', self.__field_lens, None) class ss_number_entry(BaseProtogenClass): __fields=['number', 'speeddial', 'primary', 'ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_number_entry,self).__init__(**dict) if self.__class__ is ss_number_entry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_number_entry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_number_entry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_number except: self.__field_number=STRING(**{ 'terminator': 0, 'default': '', 'maxsizeinbytes': PB_MAX_NUMBER_LEN, 'raiseontruncate': False }) self.__field_number.writetobuffer(buf) try: self.__field_speeddial except: self.__field_speeddial=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_speeddial.writetobuffer(buf) try: self.__field_primary except: self.__field_primary=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_primary.writetobuffer(buf) try: self.__field__gen_p_samsungschu470_157 except: self.__field__gen_p_samsungschu470_157=DONTCARE(**{'sizeinbytes': 8}) self.__field__gen_p_samsungschu470_157.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=STRING(**{ 'terminator': 0, 'default': '' }) self.__field_ringtone.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=STRING(**{ 'terminator': 0, 'default': '', 'maxsizeinbytes': PB_MAX_NUMBER_LEN, 'raiseontruncate': False }) self.__field_number.readfrombuffer(buf) self.__field_speeddial=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_speeddial.readfrombuffer(buf) self.__field_primary=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_primary.readfrombuffer(buf) self.__field__gen_p_samsungschu470_157=DONTCARE(**{'sizeinbytes': 8}) self.__field__gen_p_samsungschu470_157.readfrombuffer(buf) self.__field_ringtone=STRING(**{ 'terminator': 0, 'default': '' }) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): try: self.__field_number except: self.__field_number=STRING(**{ 'terminator': 0, 'default': '', 'maxsizeinbytes': PB_MAX_NUMBER_LEN, 'raiseontruncate': False }) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,STRING): self.__field_number=value else: self.__field_number=STRING(value,**{ 'terminator': 0, 'default': '', 'maxsizeinbytes': PB_MAX_NUMBER_LEN, 'raiseontruncate': False }) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_speeddial(self): try: self.__field_speeddial except: self.__field_speeddial=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_speeddial.getvalue() def __setfield_speeddial(self, value): if isinstance(value,UINT): self.__field_speeddial=value else: self.__field_speeddial=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_speeddial(self): del self.__field_speeddial speeddial=property(__getfield_speeddial, __setfield_speeddial, __delfield_speeddial, None) def __getfield_primary(self): try: self.__field_primary except: self.__field_primary=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_primary.getvalue() def __setfield_primary(self, value): if isinstance(value,UINT): self.__field_primary=value else: self.__field_primary=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_primary(self): del self.__field_primary primary=property(__getfield_primary, __setfield_primary, __delfield_primary, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=STRING(**{ 'terminator': 0, 'default': '' }) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,STRING): self.__field_ringtone=value else: self.__field_ringtone=STRING(value,**{ 'terminator': 0, 'default': '' }) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) yield ('speeddial', self.__field_speeddial, None) yield ('primary', self.__field_primary, None) yield ('ringtone', self.__field_ringtone, None) class ss_pb_entry(BaseProtogenClass): __fields=['name', 'email', 'email2', 'note', 'wallpaper', 'home', 'work', 'cell', 'dummy', 'fax', 'cell2', 'group'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_entry,self).__init__(**dict) if self.__class__ is ss_pb_entry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_entry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_entry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_name.writetobuffer(buf) try: self.__field_email except: self.__field_email=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) self.__field_email.writetobuffer(buf) try: self.__field_email2 except: self.__field_email2=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) self.__field_email2.writetobuffer(buf) try: self.__field__gen_p_samsungschu470_176 except: self.__field__gen_p_samsungschu470_176=DONTCARE(**{'sizeinbytes': 2}) self.__field__gen_p_samsungschu470_176.writetobuffer(buf) try: self.__field_note except: self.__field_note=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_NOTE_LEN, 'raiseontruncate': False, 'default': '' }) self.__field_note.writetobuffer(buf) try: self.__field__gen_p_samsungschu470_182 except: self.__field__gen_p_samsungschu470_182=DONTCARE(**{'sizeinbytes': 1}) self.__field__gen_p_samsungschu470_182.writetobuffer(buf) try: self.__field_wallpaper except: self.__field_wallpaper=STRING(**{ 'terminator': 0, 'default': '' }) self.__field_wallpaper.writetobuffer(buf) try: self.__field__gen_p_samsungschu470_185 except: self.__field__gen_p_samsungschu470_185=DONTCARE(**{'sizeinbytes': 1}) self.__field__gen_p_samsungschu470_185.writetobuffer(buf) try: self.__field_home except: self.__field_home=ss_number_entry() self.__field_home.writetobuffer(buf) try: self.__field_work except: self.__field_work=ss_number_entry() self.__field_work.writetobuffer(buf) try: self.__field_cell except: self.__field_cell=ss_number_entry() self.__field_cell.writetobuffer(buf) try: self.__field_dummy except: self.__field_dummy=ss_number_entry() self.__field_dummy.writetobuffer(buf) try: self.__field_fax except: self.__field_fax=ss_number_entry() self.__field_fax.writetobuffer(buf) try: self.__field_cell2 except: self.__field_cell2=ss_number_entry() self.__field_cell2.writetobuffer(buf) try: self.__field__gen_p_samsungschu470_192 except: self.__field__gen_p_samsungschu470_192=DONTCARE(**{'sizeinbytes': 4}) self.__field__gen_p_samsungschu470_192.writetobuffer(buf) try: self.__field_group except: self.__field_group=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_group.writetobuffer(buf) try: self.__field__gen_p_samsungschu470_194 except: self.__field__gen_p_samsungschu470_194=DONTCARE(**{'sizeinbytes': 2}) self.__field__gen_p_samsungschu470_194.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_name=USTRING(**{ 'terminator': 0, 'maxsizeinbytes': PB_MAX_NAME_LEN, 'encoding': ENCODING, 'raiseontruncate': False }) self.__field_name.readfrombuffer(buf) self.__field_email=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) self.__field_email.readfrombuffer(buf) self.__field_email2=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) self.__field_email2.readfrombuffer(buf) self.__field__gen_p_samsungschu470_176=DONTCARE(**{'sizeinbytes': 2}) self.__field__gen_p_samsungschu470_176.readfrombuffer(buf) self.__field_note=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_NOTE_LEN, 'raiseontruncate': False, 'default': '' }) self.__field_note.readfrombuffer(buf) self.__field__gen_p_samsungschu470_182=DONTCARE(**{'sizeinbytes': 1}) self.__field__gen_p_samsungschu470_182.readfrombuffer(buf) self.__field_wallpaper=STRING(**{ 'terminator': 0, 'default': '' }) self.__field_wallpaper.readfrombuffer(buf) self.__field__gen_p_samsungschu470_185=DONTCARE(**{'sizeinbytes': 1}) self.__field__gen_p_samsungschu470_185.readfrombuffer(buf) self.__field_home=ss_number_entry() self.__field_home.readfrombuffer(buf) self.__field_work=ss_number_entry() self.__field_work.readfrombuffer(buf) self.__field_cell=ss_number_entry() self.__field_cell.readfrombuffer(buf) self.__field_dummy=ss_number_entry() self.__field_dummy.readfrombuffer(buf) self.__field_fax=ss_number_entry() self.__field_fax.readfrombuffer(buf) self.__field_cell2=ss_number_entry() self.__field_cell2.readfrombuffer(buf) self.__field__gen_p_samsungschu470_192=DONTCARE(**{'sizeinbytes': 4}) self.__field__gen_p_samsungschu470_192.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_group.readfrombuffer(buf) self.__field__gen_p_samsungschu470_194=DONTCARE(**{'sizeinbytes': 2}) self.__field__gen_p_samsungschu470_194.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{ 'terminator': 0, 'maxsizeinbytes': PB_MAX_NAME_LEN, 'encoding': ENCODING, 'raiseontruncate': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_email(self): try: self.__field_email except: self.__field_email=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def __getfield_email2(self): try: self.__field_email2 except: self.__field_email2=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) return self.__field_email2.getvalue() def __setfield_email2(self, value): if isinstance(value,USTRING): self.__field_email2=value else: self.__field_email2=USTRING(value,**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) def __delfield_email2(self): del self.__field_email2 email2=property(__getfield_email2, __setfield_email2, __delfield_email2, None) def __getfield_note(self): try: self.__field_note except: self.__field_note=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_NOTE_LEN, 'raiseontruncate': False, 'default': '' }) return self.__field_note.getvalue() def __setfield_note(self, value): if isinstance(value,USTRING): self.__field_note=value else: self.__field_note=USTRING(value,**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_NOTE_LEN, 'raiseontruncate': False, 'default': '' }) def __delfield_note(self): del self.__field_note note=property(__getfield_note, __setfield_note, __delfield_note, None) def __getfield_wallpaper(self): try: self.__field_wallpaper except: self.__field_wallpaper=STRING(**{ 'terminator': 0, 'default': '' }) return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,STRING): self.__field_wallpaper=value else: self.__field_wallpaper=STRING(value,**{ 'terminator': 0, 'default': '' }) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_home(self): try: self.__field_home except: self.__field_home=ss_number_entry() return self.__field_home.getvalue() def __setfield_home(self, value): if isinstance(value,ss_number_entry): self.__field_home=value else: self.__field_home=ss_number_entry(value,) def __delfield_home(self): del self.__field_home home=property(__getfield_home, __setfield_home, __delfield_home, None) def __getfield_work(self): try: self.__field_work except: self.__field_work=ss_number_entry() return self.__field_work.getvalue() def __setfield_work(self, value): if isinstance(value,ss_number_entry): self.__field_work=value else: self.__field_work=ss_number_entry(value,) def __delfield_work(self): del self.__field_work work=property(__getfield_work, __setfield_work, __delfield_work, None) def __getfield_cell(self): try: self.__field_cell except: self.__field_cell=ss_number_entry() return self.__field_cell.getvalue() def __setfield_cell(self, value): if isinstance(value,ss_number_entry): self.__field_cell=value else: self.__field_cell=ss_number_entry(value,) def __delfield_cell(self): del self.__field_cell cell=property(__getfield_cell, __setfield_cell, __delfield_cell, None) def __getfield_dummy(self): try: self.__field_dummy except: self.__field_dummy=ss_number_entry() return self.__field_dummy.getvalue() def __setfield_dummy(self, value): if isinstance(value,ss_number_entry): self.__field_dummy=value else: self.__field_dummy=ss_number_entry(value,) def __delfield_dummy(self): del self.__field_dummy dummy=property(__getfield_dummy, __setfield_dummy, __delfield_dummy, None) def __getfield_fax(self): try: self.__field_fax except: self.__field_fax=ss_number_entry() return self.__field_fax.getvalue() def __setfield_fax(self, value): if isinstance(value,ss_number_entry): self.__field_fax=value else: self.__field_fax=ss_number_entry(value,) def __delfield_fax(self): del self.__field_fax fax=property(__getfield_fax, __setfield_fax, __delfield_fax, None) def __getfield_cell2(self): try: self.__field_cell2 except: self.__field_cell2=ss_number_entry() return self.__field_cell2.getvalue() def __setfield_cell2(self, value): if isinstance(value,ss_number_entry): self.__field_cell2=value else: self.__field_cell2=ss_number_entry(value,) def __delfield_cell2(self): del self.__field_cell2 cell2=property(__getfield_cell2, __setfield_cell2, __delfield_cell2, None) def __getfield_group(self): try: self.__field_group except: self.__field_group=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def iscontainer(self): return True def containerelements(self): yield ('name', self.__field_name, None) yield ('email', self.__field_email, None) yield ('email2', self.__field_email2, None) yield ('note', self.__field_note, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('home', self.__field_home, None) yield ('work', self.__field_work, None) yield ('cell', self.__field_cell, None) yield ('dummy', self.__field_dummy, None) yield ('fax', self.__field_fax, None) yield ('cell2', self.__field_cell2, None) yield ('group', self.__field_group, None) class ss_pb_write_req(BaseProtogenClass): __fields=['hdr', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_write_req,self).__init__(**dict) if self.__class__ is ss_pb_write_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_write_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_write_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_WRITE }) self.__field_hdr.writetobuffer(buf) try: self.__field__gen_p_samsungschu470_198 except: self.__field__gen_p_samsungschu470_198=DONTCARE(**{'sizeinbytes': 1}) self.__field__gen_p_samsungschu470_198.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_WRITE }) self.__field_hdr.readfrombuffer(buf) self.__field__gen_p_samsungschu470_198=DONTCARE(**{'sizeinbytes': 1}) self.__field__gen_p_samsungschu470_198.readfrombuffer(buf) self.__field_entry=ss_pb_entry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_WRITE }) return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,**{ 'command': SS_CMD_PB_WRITE }) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,ss_pb_entry): self.__field_entry=value else: self.__field_entry=ss_pb_entry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) yield ('entry', self.__field_entry, None) class ss_pb_write_resp(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['hdr', 'index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_write_resp,self).__init__(**dict) if self.__class__ is ss_pb_write_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_write_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_write_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr() self.__field_hdr.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 1}).readfrombuffer(buf) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) yield ('index', self.__field_index, None) class CalIndexEntry(BaseProtogenClass): __fields=['index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(CalIndexEntry,self).__init__(**dict) if self.__class__ is CalIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(CalIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(CalIndexEntry,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0 } dict2.update(kwargs) kwargs=dict2 self.__field_index=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) class CalIndexFile(BaseProtogenClass): __fields=['next_index', 'numofevents', 'numofnotes', 'numofactiveevents', 'events', 'notes', 'activeevents'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(CalIndexFile,self).__init__(**dict) if self.__class__ is CalIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(CalIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(CalIndexFile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_next_index.writetobuffer(buf) try: self.__field__gen_p_samsungschu470_211 except: self.__field__gen_p_samsungschu470_211=DONTCARE(**{'sizeinbytes': 12}) self.__field__gen_p_samsungschu470_211.writetobuffer(buf) self.__field_numofevents.writetobuffer(buf) try: self.__field__gen_p_samsungschu470_213 except: self.__field__gen_p_samsungschu470_213=DONTCARE(**{'sizeinbytes': 6}) self.__field__gen_p_samsungschu470_213.writetobuffer(buf) self.__field_numofnotes.writetobuffer(buf) try: self.__field__gen_p_samsungschu470_215 except: self.__field__gen_p_samsungschu470_215=DONTCARE(**{'sizeinbytes': 6}) self.__field__gen_p_samsungschu470_215.writetobuffer(buf) self.__field_numofactiveevents.writetobuffer(buf) try: self.__field__gen_p_samsungschu470_217 except: self.__field__gen_p_samsungschu470_217=DONTCARE(**{'sizeinbytes': 112}) self.__field__gen_p_samsungschu470_217.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{ 'elementclass': CalIndexEntry, 'length': 103, 'createdefault': True }) self.__field_events.writetobuffer(buf) try: self.__field_notes except: self.__field_notes=LIST(**{ 'elementclass': CalIndexEntry, 'length': 35, 'createdefault': True }) self.__field_notes.writetobuffer(buf) try: self.__field_activeevents except: self.__field_activeevents=LIST(**{ 'elementclass': CalIndexEntry, 'length': 319, 'createdefault': True }) self.__field_activeevents.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_next_index=UINT(**{'sizeinbytes': 2}) self.__field_next_index.readfrombuffer(buf) self.__field__gen_p_samsungschu470_211=DONTCARE(**{'sizeinbytes': 12}) self.__field__gen_p_samsungschu470_211.readfrombuffer(buf) self.__field_numofevents=UINT(**{'sizeinbytes': 2}) self.__field_numofevents.readfrombuffer(buf) self.__field__gen_p_samsungschu470_213=DONTCARE(**{'sizeinbytes': 6}) self.__field__gen_p_samsungschu470_213.readfrombuffer(buf) self.__field_numofnotes=UINT(**{'sizeinbytes': 2}) self.__field_numofnotes.readfrombuffer(buf) self.__field__gen_p_samsungschu470_215=DONTCARE(**{'sizeinbytes': 6}) self.__field__gen_p_samsungschu470_215.readfrombuffer(buf) self.__field_numofactiveevents=UINT(**{'sizeinbytes': 2}) self.__field_numofactiveevents.readfrombuffer(buf) self.__field__gen_p_samsungschu470_217=DONTCARE(**{'sizeinbytes': 112}) self.__field__gen_p_samsungschu470_217.readfrombuffer(buf) self.__field_events=LIST(**{ 'elementclass': CalIndexEntry, 'length': 103, 'createdefault': True }) self.__field_events.readfrombuffer(buf) self.__field_notes=LIST(**{ 'elementclass': CalIndexEntry, 'length': 35, 'createdefault': True }) self.__field_notes.readfrombuffer(buf) self.__field_activeevents=LIST(**{ 'elementclass': CalIndexEntry, 'length': 319, 'createdefault': True }) self.__field_activeevents.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_next_index(self): return self.__field_next_index.getvalue() def __setfield_next_index(self, value): if isinstance(value,UINT): self.__field_next_index=value else: self.__field_next_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_next_index(self): del self.__field_next_index next_index=property(__getfield_next_index, __setfield_next_index, __delfield_next_index, None) def __getfield_numofevents(self): return self.__field_numofevents.getvalue() def __setfield_numofevents(self, value): if isinstance(value,UINT): self.__field_numofevents=value else: self.__field_numofevents=UINT(value,**{'sizeinbytes': 2}) def __delfield_numofevents(self): del self.__field_numofevents numofevents=property(__getfield_numofevents, __setfield_numofevents, __delfield_numofevents, None) def __getfield_numofnotes(self): return self.__field_numofnotes.getvalue() def __setfield_numofnotes(self, value): if isinstance(value,UINT): self.__field_numofnotes=value else: self.__field_numofnotes=UINT(value,**{'sizeinbytes': 2}) def __delfield_numofnotes(self): del self.__field_numofnotes numofnotes=property(__getfield_numofnotes, __setfield_numofnotes, __delfield_numofnotes, None) def __getfield_numofactiveevents(self): return self.__field_numofactiveevents.getvalue() def __setfield_numofactiveevents(self, value): if isinstance(value,UINT): self.__field_numofactiveevents=value else: self.__field_numofactiveevents=UINT(value,**{'sizeinbytes': 2}) def __delfield_numofactiveevents(self): del self.__field_numofactiveevents numofactiveevents=property(__getfield_numofactiveevents, __setfield_numofactiveevents, __delfield_numofactiveevents, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{ 'elementclass': CalIndexEntry, 'length': 103, 'createdefault': True }) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{ 'elementclass': CalIndexEntry, 'length': 103, 'createdefault': True }) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def __getfield_notes(self): try: self.__field_notes except: self.__field_notes=LIST(**{ 'elementclass': CalIndexEntry, 'length': 35, 'createdefault': True }) return self.__field_notes.getvalue() def __setfield_notes(self, value): if isinstance(value,LIST): self.__field_notes=value else: self.__field_notes=LIST(value,**{ 'elementclass': CalIndexEntry, 'length': 35, 'createdefault': True }) def __delfield_notes(self): del self.__field_notes notes=property(__getfield_notes, __setfield_notes, __delfield_notes, None) def __getfield_activeevents(self): try: self.__field_activeevents except: self.__field_activeevents=LIST(**{ 'elementclass': CalIndexEntry, 'length': 319, 'createdefault': True }) return self.__field_activeevents.getvalue() def __setfield_activeevents(self, value): if isinstance(value,LIST): self.__field_activeevents=value else: self.__field_activeevents=LIST(value,**{ 'elementclass': CalIndexEntry, 'length': 319, 'createdefault': True }) def __delfield_activeevents(self): del self.__field_activeevents activeevents=property(__getfield_activeevents, __setfield_activeevents, __delfield_activeevents, None) def iscontainer(self): return True def containerelements(self): yield ('next_index', self.__field_next_index, None) yield ('numofevents', self.__field_numofevents, None) yield ('numofnotes', self.__field_numofnotes, None) yield ('numofactiveevents', self.__field_numofactiveevents, None) yield ('events', self.__field_events, None) yield ('notes', self.__field_notes, None) yield ('activeevents', self.__field_activeevents, None) class CalEntry(BaseProtogenClass): __fields=['titlelen', 'title', 'start', 'start2', 'exptime', 'repeat', 'alarm', 'alert', 'duration', 'timezone', 'creationtime', 'modifiedtime', 'ringtonelen', 'ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(CalEntry,self).__init__(**dict) if self.__class__ is CalEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(CalEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(CalEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_titlelen.writetobuffer(buf) self.__field_title.writetobuffer(buf) self.__field_start.writetobuffer(buf) try: self.__field__gen_p_samsungschu470_234 except: self.__field__gen_p_samsungschu470_234=DONTCARE(**{'sizeinbytes': 4}) self.__field__gen_p_samsungschu470_234.writetobuffer(buf) try: self.__field_start2 except: self.__field_start2=DateTime(**{'sizeinbytes': 4, 'default': self.start }) self.__field_start2.writetobuffer(buf) try: self.__field__gen_p_samsungschu470_236 except: self.__field__gen_p_samsungschu470_236=DONTCARE(**{'sizeinbytes': 4}) self.__field__gen_p_samsungschu470_236.writetobuffer(buf) self.__field_exptime.writetobuffer(buf) try: self.__field__gen_p_samsungschu470_238 except: self.__field__gen_p_samsungschu470_238=DONTCARE(**{'sizeinbytes': 4}) self.__field__gen_p_samsungschu470_238.writetobuffer(buf) try: self.__field__gen_p_samsungschu470_239 except: self.__field__gen_p_samsungschu470_239=DONTCARE(**{'sizeinbytes': 1, 'default': '\x01' }) self.__field__gen_p_samsungschu470_239.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) try: self.__field__gen_p_samsungschu470_241 except: self.__field__gen_p_samsungschu470_241=DONTCARE(**{'sizeinbytes': 1, 'default': '\x03' }) self.__field__gen_p_samsungschu470_241.writetobuffer(buf) self.__field_alarm.writetobuffer(buf) self.__field_alert.writetobuffer(buf) try: self.__field__gen_p_samsungschu470_244 except: self.__field__gen_p_samsungschu470_244=DONTCARE(**{'sizeinbytes': 6}) self.__field__gen_p_samsungschu470_244.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_timezone.writetobuffer(buf) self.__field_creationtime.writetobuffer(buf) try: self.__field__gen_p_samsungschu470_248 except: self.__field__gen_p_samsungschu470_248=DONTCARE(**{'sizeinbytes': 4}) self.__field__gen_p_samsungschu470_248.writetobuffer(buf) self.__field_modifiedtime.writetobuffer(buf) try: self.__field__gen_p_samsungschu470_250 except: self.__field__gen_p_samsungschu470_250=DONTCARE(**{'sizeinbytes': 4}) self.__field__gen_p_samsungschu470_250.writetobuffer(buf) self.__field_ringtonelen.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) try: self.__field__gen_p_samsungschu470_254 except: self.__field__gen_p_samsungschu470_254=DONTCARE(**{'sizeinbytes': 2}) self.__field__gen_p_samsungschu470_254.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_titlelen=UINT(**{'sizeinbytes': 2}) self.__field_titlelen.readfrombuffer(buf) self.__field_title=USTRING(**{ 'sizeinbytes': self.titlelen, 'encoding': ENCODING, 'terminator': None }) self.__field_title.readfrombuffer(buf) self.__field_start=DateTime(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field__gen_p_samsungschu470_234=DONTCARE(**{'sizeinbytes': 4}) self.__field__gen_p_samsungschu470_234.readfrombuffer(buf) self.__field_start2=DateTime(**{'sizeinbytes': 4, 'default': self.start }) self.__field_start2.readfrombuffer(buf) self.__field__gen_p_samsungschu470_236=DONTCARE(**{'sizeinbytes': 4}) self.__field__gen_p_samsungschu470_236.readfrombuffer(buf) self.__field_exptime=ExpiringTime(**{'sizeinbytes': 4}) self.__field_exptime.readfrombuffer(buf) self.__field__gen_p_samsungschu470_238=DONTCARE(**{'sizeinbytes': 4}) self.__field__gen_p_samsungschu470_238.readfrombuffer(buf) self.__field__gen_p_samsungschu470_239=DONTCARE(**{'sizeinbytes': 1, 'default': '\x01' }) self.__field__gen_p_samsungschu470_239.readfrombuffer(buf) self.__field_repeat=UINT(**{'sizeinbytes': 1}) self.__field_repeat.readfrombuffer(buf) self.__field__gen_p_samsungschu470_241=DONTCARE(**{'sizeinbytes': 1, 'default': '\x03' }) self.__field__gen_p_samsungschu470_241.readfrombuffer(buf) self.__field_alarm=UINT(**{'sizeinbytes': 1}) self.__field_alarm.readfrombuffer(buf) self.__field_alert=UINT(**{'sizeinbytes': 1}) self.__field_alert.readfrombuffer(buf) self.__field__gen_p_samsungschu470_244=DONTCARE(**{'sizeinbytes': 6}) self.__field__gen_p_samsungschu470_244.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_timezone=UINT(**{'sizeinbytes': 1}) self.__field_timezone.readfrombuffer(buf) self.__field_creationtime=DateTime(**{'sizeinbytes': 4}) self.__field_creationtime.readfrombuffer(buf) self.__field__gen_p_samsungschu470_248=DONTCARE(**{'sizeinbytes': 4}) self.__field__gen_p_samsungschu470_248.readfrombuffer(buf) self.__field_modifiedtime=DateTime(**{'sizeinbytes': 4}) self.__field_modifiedtime.readfrombuffer(buf) self.__field__gen_p_samsungschu470_250=DONTCARE(**{'sizeinbytes': 4}) self.__field__gen_p_samsungschu470_250.readfrombuffer(buf) self.__field_ringtonelen=UINT(**{'sizeinbytes': 2}) self.__field_ringtonelen.readfrombuffer(buf) self.__field_ringtone=STRING(**{ 'sizeinbytes': self.ringtonelen, 'terminator': None }) self.__field_ringtone.readfrombuffer(buf) self.__field__gen_p_samsungschu470_254=DONTCARE(**{'sizeinbytes': 2}) self.__field__gen_p_samsungschu470_254.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_titlelen(self): return self.__field_titlelen.getvalue() def __setfield_titlelen(self, value): if isinstance(value,UINT): self.__field_titlelen=value else: self.__field_titlelen=UINT(value,**{'sizeinbytes': 2}) def __delfield_titlelen(self): del self.__field_titlelen titlelen=property(__getfield_titlelen, __setfield_titlelen, __delfield_titlelen, None) def __getfield_title(self): return self.__field_title.getvalue() def __setfield_title(self, value): if isinstance(value,USTRING): self.__field_title=value else: self.__field_title=USTRING(value,**{ 'sizeinbytes': self.titlelen, 'encoding': ENCODING, 'terminator': None }) def __delfield_title(self): del self.__field_title title=property(__getfield_title, __setfield_title, __delfield_title, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,DateTime): self.__field_start=value else: self.__field_start=DateTime(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_start2(self): try: self.__field_start2 except: self.__field_start2=DateTime(**{'sizeinbytes': 4, 'default': self.start }) return self.__field_start2.getvalue() def __setfield_start2(self, value): if isinstance(value,DateTime): self.__field_start2=value else: self.__field_start2=DateTime(value,**{'sizeinbytes': 4, 'default': self.start }) def __delfield_start2(self): del self.__field_start2 start2=property(__getfield_start2, __setfield_start2, __delfield_start2, None) def __getfield_exptime(self): return self.__field_exptime.getvalue() def __setfield_exptime(self, value): if isinstance(value,ExpiringTime): self.__field_exptime=value else: self.__field_exptime=ExpiringTime(value,**{'sizeinbytes': 4}) def __delfield_exptime(self): del self.__field_exptime exptime=property(__getfield_exptime, __setfield_exptime, __delfield_exptime, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,UINT): self.__field_repeat=value else: self.__field_repeat=UINT(value,**{'sizeinbytes': 1}) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_alarm(self): return self.__field_alarm.getvalue() def __setfield_alarm(self, value): if isinstance(value,UINT): self.__field_alarm=value else: self.__field_alarm=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarm(self): del self.__field_alarm alarm=property(__getfield_alarm, __setfield_alarm, __delfield_alarm, None) def __getfield_alert(self): return self.__field_alert.getvalue() def __setfield_alert(self, value): if isinstance(value,UINT): self.__field_alert=value else: self.__field_alert=UINT(value,**{'sizeinbytes': 1}) def __delfield_alert(self): del self.__field_alert alert=property(__getfield_alert, __setfield_alert, __delfield_alert, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_timezone(self): return self.__field_timezone.getvalue() def __setfield_timezone(self, value): if isinstance(value,UINT): self.__field_timezone=value else: self.__field_timezone=UINT(value,**{'sizeinbytes': 1}) def __delfield_timezone(self): del self.__field_timezone timezone=property(__getfield_timezone, __setfield_timezone, __delfield_timezone, None) def __getfield_creationtime(self): return self.__field_creationtime.getvalue() def __setfield_creationtime(self, value): if isinstance(value,DateTime): self.__field_creationtime=value else: self.__field_creationtime=DateTime(value,**{'sizeinbytes': 4}) def __delfield_creationtime(self): del self.__field_creationtime creationtime=property(__getfield_creationtime, __setfield_creationtime, __delfield_creationtime, None) def __getfield_modifiedtime(self): return self.__field_modifiedtime.getvalue() def __setfield_modifiedtime(self, value): if isinstance(value,DateTime): self.__field_modifiedtime=value else: self.__field_modifiedtime=DateTime(value,**{'sizeinbytes': 4}) def __delfield_modifiedtime(self): del self.__field_modifiedtime modifiedtime=property(__getfield_modifiedtime, __setfield_modifiedtime, __delfield_modifiedtime, None) def __getfield_ringtonelen(self): return self.__field_ringtonelen.getvalue() def __setfield_ringtonelen(self, value): if isinstance(value,UINT): self.__field_ringtonelen=value else: self.__field_ringtonelen=UINT(value,**{'sizeinbytes': 2}) def __delfield_ringtonelen(self): del self.__field_ringtonelen ringtonelen=property(__getfield_ringtonelen, __setfield_ringtonelen, __delfield_ringtonelen, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,STRING): self.__field_ringtone=value else: self.__field_ringtone=STRING(value,**{ 'sizeinbytes': self.ringtonelen, 'terminator': None }) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def iscontainer(self): return True def containerelements(self): yield ('titlelen', self.__field_titlelen, None) yield ('title', self.__field_title, None) yield ('start', self.__field_start, None) yield ('start2', self.__field_start2, None) yield ('exptime', self.__field_exptime, None) yield ('repeat', self.__field_repeat, None) yield ('alarm', self.__field_alarm, None) yield ('alert', self.__field_alert, None) yield ('duration', self.__field_duration, None) yield ('timezone', self.__field_timezone, None) yield ('creationtime', self.__field_creationtime, None) yield ('modifiedtime', self.__field_modifiedtime, None) yield ('ringtonelen', self.__field_ringtonelen, None) yield ('ringtone', self.__field_ringtone, None) class NotePadEntry(BaseProtogenClass): __fields=['textlen', 'text', 'creation', 'zero1', 'creation2', 'zero2', 'five', 'zero3', 'modified', 'zero4', 'modified2', 'zero5'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(NotePadEntry,self).__init__(**dict) if self.__class__ is NotePadEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(NotePadEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(NotePadEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_textlen.writetobuffer(buf) self.__field_text.writetobuffer(buf) self.__field_creation.writetobuffer(buf) try: self.__field_zero1 except: self.__field_zero1=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) self.__field_zero1.writetobuffer(buf) try: self.__field_creation2 except: self.__field_creation2=DateTime(**{'sizeinbytes': 4, 'default': self.creation }) self.__field_creation2.writetobuffer(buf) try: self.__field_zero2 except: self.__field_zero2=UNKNOWN(**{'sizeinbytes': 14, 'pad': 0 }) self.__field_zero2.writetobuffer(buf) try: self.__field_five except: self.__field_five=UINT(**{'sizeinbytes': 1, 'default': 5 }) self.__field_five.writetobuffer(buf) try: self.__field_zero3 except: self.__field_zero3=UNKNOWN(**{'sizeinbytes': 13, 'pad': 0 }) self.__field_zero3.writetobuffer(buf) try: self.__field_modified except: self.__field_modified=DateTime(**{'sizeinbytes': 4, 'default': self.creation }) self.__field_modified.writetobuffer(buf) try: self.__field_zero4 except: self.__field_zero4=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) self.__field_zero4.writetobuffer(buf) try: self.__field_modified2 except: self.__field_modified2=DateTime(**{'sizeinbytes': 4, 'default': self.modified }) self.__field_modified2.writetobuffer(buf) try: self.__field_zero5 except: self.__field_zero5=UNKNOWN(**{'sizeinbytes': 8, 'pad': 0 }) self.__field_zero5.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_textlen=UINT(**{'sizeinbytes': 2}) self.__field_textlen.readfrombuffer(buf) self.__field_text=USTRING(**{ 'terminator': None, 'encoding': ENCODING, 'sizeinbytes': self.textlen }) self.__field_text.readfrombuffer(buf) self.__field_creation=DateTime(**{'sizeinbytes': 4}) self.__field_creation.readfrombuffer(buf) self.__field_zero1=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) self.__field_zero1.readfrombuffer(buf) self.__field_creation2=DateTime(**{'sizeinbytes': 4, 'default': self.creation }) self.__field_creation2.readfrombuffer(buf) self.__field_zero2=UNKNOWN(**{'sizeinbytes': 14, 'pad': 0 }) self.__field_zero2.readfrombuffer(buf) self.__field_five=UINT(**{'sizeinbytes': 1, 'default': 5 }) self.__field_five.readfrombuffer(buf) self.__field_zero3=UNKNOWN(**{'sizeinbytes': 13, 'pad': 0 }) self.__field_zero3.readfrombuffer(buf) self.__field_modified=DateTime(**{'sizeinbytes': 4, 'default': self.creation }) self.__field_modified.readfrombuffer(buf) self.__field_zero4=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) self.__field_zero4.readfrombuffer(buf) self.__field_modified2=DateTime(**{'sizeinbytes': 4, 'default': self.modified }) self.__field_modified2.readfrombuffer(buf) self.__field_zero5=UNKNOWN(**{'sizeinbytes': 8, 'pad': 0 }) self.__field_zero5.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_textlen(self): return self.__field_textlen.getvalue() def __setfield_textlen(self, value): if isinstance(value,UINT): self.__field_textlen=value else: self.__field_textlen=UINT(value,**{'sizeinbytes': 2}) def __delfield_textlen(self): del self.__field_textlen textlen=property(__getfield_textlen, __setfield_textlen, __delfield_textlen, None) def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,USTRING): self.__field_text=value else: self.__field_text=USTRING(value,**{ 'terminator': None, 'encoding': ENCODING, 'sizeinbytes': self.textlen }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def __getfield_creation(self): return self.__field_creation.getvalue() def __setfield_creation(self, value): if isinstance(value,DateTime): self.__field_creation=value else: self.__field_creation=DateTime(value,**{'sizeinbytes': 4}) def __delfield_creation(self): del self.__field_creation creation=property(__getfield_creation, __setfield_creation, __delfield_creation, None) def __getfield_zero1(self): try: self.__field_zero1 except: self.__field_zero1=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) return self.__field_zero1.getvalue() def __setfield_zero1(self, value): if isinstance(value,UNKNOWN): self.__field_zero1=value else: self.__field_zero1=UNKNOWN(value,**{'sizeinbytes': 4, 'pad': 0 }) def __delfield_zero1(self): del self.__field_zero1 zero1=property(__getfield_zero1, __setfield_zero1, __delfield_zero1, None) def __getfield_creation2(self): try: self.__field_creation2 except: self.__field_creation2=DateTime(**{'sizeinbytes': 4, 'default': self.creation }) return self.__field_creation2.getvalue() def __setfield_creation2(self, value): if isinstance(value,DateTime): self.__field_creation2=value else: self.__field_creation2=DateTime(value,**{'sizeinbytes': 4, 'default': self.creation }) def __delfield_creation2(self): del self.__field_creation2 creation2=property(__getfield_creation2, __setfield_creation2, __delfield_creation2, None) def __getfield_zero2(self): try: self.__field_zero2 except: self.__field_zero2=UNKNOWN(**{'sizeinbytes': 14, 'pad': 0 }) return self.__field_zero2.getvalue() def __setfield_zero2(self, value): if isinstance(value,UNKNOWN): self.__field_zero2=value else: self.__field_zero2=UNKNOWN(value,**{'sizeinbytes': 14, 'pad': 0 }) def __delfield_zero2(self): del self.__field_zero2 zero2=property(__getfield_zero2, __setfield_zero2, __delfield_zero2, None) def __getfield_five(self): try: self.__field_five except: self.__field_five=UINT(**{'sizeinbytes': 1, 'default': 5 }) return self.__field_five.getvalue() def __setfield_five(self, value): if isinstance(value,UINT): self.__field_five=value else: self.__field_five=UINT(value,**{'sizeinbytes': 1, 'default': 5 }) def __delfield_five(self): del self.__field_five five=property(__getfield_five, __setfield_five, __delfield_five, None) def __getfield_zero3(self): try: self.__field_zero3 except: self.__field_zero3=UNKNOWN(**{'sizeinbytes': 13, 'pad': 0 }) return self.__field_zero3.getvalue() def __setfield_zero3(self, value): if isinstance(value,UNKNOWN): self.__field_zero3=value else: self.__field_zero3=UNKNOWN(value,**{'sizeinbytes': 13, 'pad': 0 }) def __delfield_zero3(self): del self.__field_zero3 zero3=property(__getfield_zero3, __setfield_zero3, __delfield_zero3, None) def __getfield_modified(self): try: self.__field_modified except: self.__field_modified=DateTime(**{'sizeinbytes': 4, 'default': self.creation }) return self.__field_modified.getvalue() def __setfield_modified(self, value): if isinstance(value,DateTime): self.__field_modified=value else: self.__field_modified=DateTime(value,**{'sizeinbytes': 4, 'default': self.creation }) def __delfield_modified(self): del self.__field_modified modified=property(__getfield_modified, __setfield_modified, __delfield_modified, None) def __getfield_zero4(self): try: self.__field_zero4 except: self.__field_zero4=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) return self.__field_zero4.getvalue() def __setfield_zero4(self, value): if isinstance(value,UNKNOWN): self.__field_zero4=value else: self.__field_zero4=UNKNOWN(value,**{'sizeinbytes': 4, 'pad': 0 }) def __delfield_zero4(self): del self.__field_zero4 zero4=property(__getfield_zero4, __setfield_zero4, __delfield_zero4, None) def __getfield_modified2(self): try: self.__field_modified2 except: self.__field_modified2=DateTime(**{'sizeinbytes': 4, 'default': self.modified }) return self.__field_modified2.getvalue() def __setfield_modified2(self, value): if isinstance(value,DateTime): self.__field_modified2=value else: self.__field_modified2=DateTime(value,**{'sizeinbytes': 4, 'default': self.modified }) def __delfield_modified2(self): del self.__field_modified2 modified2=property(__getfield_modified2, __setfield_modified2, __delfield_modified2, None) def __getfield_zero5(self): try: self.__field_zero5 except: self.__field_zero5=UNKNOWN(**{'sizeinbytes': 8, 'pad': 0 }) return self.__field_zero5.getvalue() def __setfield_zero5(self, value): if isinstance(value,UNKNOWN): self.__field_zero5=value else: self.__field_zero5=UNKNOWN(value,**{'sizeinbytes': 8, 'pad': 0 }) def __delfield_zero5(self): del self.__field_zero5 zero5=property(__getfield_zero5, __setfield_zero5, __delfield_zero5, None) def iscontainer(self): return True def containerelements(self): yield ('textlen', self.__field_textlen, None) yield ('text', self.__field_text, None) yield ('creation', self.__field_creation, None) yield ('zero1', self.__field_zero1, None) yield ('creation2', self.__field_creation2, None) yield ('zero2', self.__field_zero2, None) yield ('five', self.__field_five, None) yield ('zero3', self.__field_zero3, None) yield ('modified', self.__field_modified, None) yield ('zero4', self.__field_zero4, None) yield ('modified2', self.__field_modified2, None) yield ('zero5', self.__field_zero5, None) class cl_list(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(cl_list,self).__init__(**dict) if self.__class__ is cl_list: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(cl_list,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(cl_list,kwargs) if len(args): dict2={'sizeinbytes': 2} dict2.update(kwargs) kwargs=dict2 self.__field_index=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) class cl_index_file(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['incoming', 'outgoing', 'missed', 'incoming_count', 'outgoing_count', 'missed_count'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(cl_index_file,self).__init__(**dict) if self.__class__ is cl_index_file: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(cl_index_file,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(cl_index_file,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_incoming=LIST(**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) self.__field_incoming.readfrombuffer(buf) self.__field_outgoing=LIST(**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) self.__field_outgoing.readfrombuffer(buf) self.__field_missed=LIST(**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) self.__field_missed.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 1352}).readfrombuffer(buf) self.__field_incoming_count=UINT(**{'sizeinbytes': 4}) self.__field_incoming_count.readfrombuffer(buf) self.__field_outgoing_count=UINT(**{'sizeinbytes': 4}) self.__field_outgoing_count.readfrombuffer(buf) self.__field_missed_count=UINT(**{'sizeinbytes': 4}) self.__field_missed_count.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_incoming(self): return self.__field_incoming.getvalue() def __setfield_incoming(self, value): if isinstance(value,LIST): self.__field_incoming=value else: self.__field_incoming=LIST(value,**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) def __delfield_incoming(self): del self.__field_incoming incoming=property(__getfield_incoming, __setfield_incoming, __delfield_incoming, None) def __getfield_outgoing(self): return self.__field_outgoing.getvalue() def __setfield_outgoing(self, value): if isinstance(value,LIST): self.__field_outgoing=value else: self.__field_outgoing=LIST(value,**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) def __delfield_outgoing(self): del self.__field_outgoing outgoing=property(__getfield_outgoing, __setfield_outgoing, __delfield_outgoing, None) def __getfield_missed(self): return self.__field_missed.getvalue() def __setfield_missed(self, value): if isinstance(value,LIST): self.__field_missed=value else: self.__field_missed=LIST(value,**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) def __delfield_missed(self): del self.__field_missed missed=property(__getfield_missed, __setfield_missed, __delfield_missed, None) def __getfield_incoming_count(self): return self.__field_incoming_count.getvalue() def __setfield_incoming_count(self, value): if isinstance(value,UINT): self.__field_incoming_count=value else: self.__field_incoming_count=UINT(value,**{'sizeinbytes': 4}) def __delfield_incoming_count(self): del self.__field_incoming_count incoming_count=property(__getfield_incoming_count, __setfield_incoming_count, __delfield_incoming_count, None) def __getfield_outgoing_count(self): return self.__field_outgoing_count.getvalue() def __setfield_outgoing_count(self, value): if isinstance(value,UINT): self.__field_outgoing_count=value else: self.__field_outgoing_count=UINT(value,**{'sizeinbytes': 4}) def __delfield_outgoing_count(self): del self.__field_outgoing_count outgoing_count=property(__getfield_outgoing_count, __setfield_outgoing_count, __delfield_outgoing_count, None) def __getfield_missed_count(self): return self.__field_missed_count.getvalue() def __setfield_missed_count(self, value): if isinstance(value,UINT): self.__field_missed_count=value else: self.__field_missed_count=UINT(value,**{'sizeinbytes': 4}) def __delfield_missed_count(self): del self.__field_missed_count missed_count=property(__getfield_missed_count, __setfield_missed_count, __delfield_missed_count, None) def iscontainer(self): return True def containerelements(self): yield ('incoming', self.__field_incoming, None) yield ('outgoing', self.__field_outgoing, None) yield ('missed', self.__field_missed, None) yield ('incoming_count', self.__field_incoming_count, None) yield ('outgoing_count', self.__field_outgoing_count, None) yield ('missed_count', self.__field_missed_count, None) class cl_file(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['cl_type', 'number', 'datetime', 'duration'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(cl_file,self).__init__(**dict) if self.__class__ is cl_file: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(cl_file,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(cl_file,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cl_type=UINT(**{'sizeinbytes': 1}) self.__field_cl_type.readfrombuffer(buf) self.__field_number=STRING(**{'sizeinbytes': 51, 'terminator': 0 }) self.__field_number.readfrombuffer(buf) self.__field_datetime=DateTime2(**{'sizeinbytes': 4}) self.__field_datetime.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 4}).readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cl_type(self): return self.__field_cl_type.getvalue() def __setfield_cl_type(self, value): if isinstance(value,UINT): self.__field_cl_type=value else: self.__field_cl_type=UINT(value,**{'sizeinbytes': 1}) def __delfield_cl_type(self): del self.__field_cl_type cl_type=property(__getfield_cl_type, __setfield_cl_type, __delfield_cl_type, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,STRING): self.__field_number=value else: self.__field_number=STRING(value,**{'sizeinbytes': 51, 'terminator': 0 }) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,DateTime2): self.__field_datetime=value else: self.__field_datetime=DateTime2(value,**{'sizeinbytes': 4}) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def iscontainer(self): return True def containerelements(self): yield ('cl_type', self.__field_cl_type, None) yield ('number', self.__field_number, None) yield ('datetime', self.__field_datetime, None) yield ('duration', self.__field_duration, None) @property def valid(self): global CL_VALID_TYPE return bool(self.cl_type in CL_VALID_TYPE and self.number) class pBOOL(BaseProtogenClass): __fields=['value'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pBOOL,self).__init__(**dict) if self.__class__ is pBOOL: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pBOOL,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pBOOL,kwargs) if len(args): dict2={'sizeinbytes': 'P'} dict2.update(kwargs) kwargs=dict2 self.__field_value=BOOL(*args,**dict2) # Make all P fields that haven't already been constructed try: self.__field_value except: self.__field_value=BOOL() def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self._bufferendoffset=buf.getcurrentoffset() def __getfield_value(self): return self.__field_value.getvalue() def __setfield_value(self, value): if isinstance(value,BOOL): self.__field_value=value else: self.__field_value=BOOL(value,) def __delfield_value(self): del self.__field_value value=property(__getfield_value, __setfield_value, __delfield_value, None) def iscontainer(self): return True def containerelements(self): yield ('value', self.__field_value, None) class sms_header(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['index', 'msg_len', 'callback_len', 'bitmap1', 'bitmap2', 'body_len', 'file_type', 'msg_type', 'enhance_delivery', 'is_txt_msg', 'in_msg', 'sent_msg', 'draft_msg', 'body'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_header,self).__init__(**dict) if self.__class__ is sms_header: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_header,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_header,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self.__field_msg_len=UINT(**{'sizeinbytes': 1}) self.__field_msg_len.readfrombuffer(buf) self.__field_callback_len=UINT(**{'sizeinbytes': 1}) self.__field_callback_len.readfrombuffer(buf) self.__field_bitmap1=UINT(**{'sizeinbytes': 1}) self.__field_bitmap1.readfrombuffer(buf) self.__field_bitmap2=UINT(**{'sizeinbytes': 1}) self.__field_bitmap2.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 6}).readfrombuffer(buf) self.__field_body_len=UINT(**{'sizeinbytes': 2}) self.__field_body_len.readfrombuffer(buf) self.__field_file_type=UINT(**{'sizeinbytes': 2}) self.__field_file_type.readfrombuffer(buf) self.__field_msg_type=UINT(**{'sizeinbytes': 1}) self.__field_msg_type.readfrombuffer(buf) self.__field_enhance_delivery=UINT(**{'sizeinbytes': 1}) self.__field_enhance_delivery.readfrombuffer(buf) self.__field_is_txt_msg=pBOOL(**{ 'value': self.file_type==SMS_TXT_TYPE and self.msg_type in SMS_VALID_TYPE }) self.__field_is_txt_msg.readfrombuffer(buf) self.__field_in_msg=pBOOL(**{ 'value': self.msg_type==SMS_TYPE_IN }) self.__field_in_msg.readfrombuffer(buf) self.__field_sent_msg=pBOOL(**{ 'value': self.msg_type==SMS_TYPE_SENT }) self.__field_sent_msg.readfrombuffer(buf) self.__field_draft_msg=pBOOL(**{ 'value': self.msg_type==SMS_TYPE_DRAFT }) self.__field_draft_msg.readfrombuffer(buf) if self.is_txt_msg.value: self.__field_body=sms_body(**{ 'msg_len': self.msg_len, 'has_callback': self.bitmap2 & SMS_FLG2_CALLBACK, 'has_priority': self.bitmap2 & SMS_FLG2_PRIORITY, 'has_1byte': self.bitmap2 & SMS_FLG2_SOMETHING, 'has_1byte2': self.bitmap2 & SMS_FLG2_MSG, 'has_40bytes': self.bitmap1 & SMS_FLG1_HAS40 }) self.__field_body.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_msg_len(self): return self.__field_msg_len.getvalue() def __setfield_msg_len(self, value): if isinstance(value,UINT): self.__field_msg_len=value else: self.__field_msg_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_msg_len(self): del self.__field_msg_len msg_len=property(__getfield_msg_len, __setfield_msg_len, __delfield_msg_len, None) def __getfield_callback_len(self): return self.__field_callback_len.getvalue() def __setfield_callback_len(self, value): if isinstance(value,UINT): self.__field_callback_len=value else: self.__field_callback_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_len(self): del self.__field_callback_len callback_len=property(__getfield_callback_len, __setfield_callback_len, __delfield_callback_len, None) def __getfield_bitmap1(self): return self.__field_bitmap1.getvalue() def __setfield_bitmap1(self, value): if isinstance(value,UINT): self.__field_bitmap1=value else: self.__field_bitmap1=UINT(value,**{'sizeinbytes': 1}) def __delfield_bitmap1(self): del self.__field_bitmap1 bitmap1=property(__getfield_bitmap1, __setfield_bitmap1, __delfield_bitmap1, None) def __getfield_bitmap2(self): return self.__field_bitmap2.getvalue() def __setfield_bitmap2(self, value): if isinstance(value,UINT): self.__field_bitmap2=value else: self.__field_bitmap2=UINT(value,**{'sizeinbytes': 1}) def __delfield_bitmap2(self): del self.__field_bitmap2 bitmap2=property(__getfield_bitmap2, __setfield_bitmap2, __delfield_bitmap2, None) def __getfield_body_len(self): return self.__field_body_len.getvalue() def __setfield_body_len(self, value): if isinstance(value,UINT): self.__field_body_len=value else: self.__field_body_len=UINT(value,**{'sizeinbytes': 2}) def __delfield_body_len(self): del self.__field_body_len body_len=property(__getfield_body_len, __setfield_body_len, __delfield_body_len, None) def __getfield_file_type(self): return self.__field_file_type.getvalue() def __setfield_file_type(self, value): if isinstance(value,UINT): self.__field_file_type=value else: self.__field_file_type=UINT(value,**{'sizeinbytes': 2}) def __delfield_file_type(self): del self.__field_file_type file_type=property(__getfield_file_type, __setfield_file_type, __delfield_file_type, None) def __getfield_msg_type(self): return self.__field_msg_type.getvalue() def __setfield_msg_type(self, value): if isinstance(value,UINT): self.__field_msg_type=value else: self.__field_msg_type=UINT(value,**{'sizeinbytes': 1}) def __delfield_msg_type(self): del self.__field_msg_type msg_type=property(__getfield_msg_type, __setfield_msg_type, __delfield_msg_type, None) def __getfield_enhance_delivery(self): return self.__field_enhance_delivery.getvalue() def __setfield_enhance_delivery(self, value): if isinstance(value,UINT): self.__field_enhance_delivery=value else: self.__field_enhance_delivery=UINT(value,**{'sizeinbytes': 1}) def __delfield_enhance_delivery(self): del self.__field_enhance_delivery enhance_delivery=property(__getfield_enhance_delivery, __setfield_enhance_delivery, __delfield_enhance_delivery, None) def __getfield_is_txt_msg(self): return self.__field_is_txt_msg.getvalue() def __setfield_is_txt_msg(self, value): if isinstance(value,pBOOL): self.__field_is_txt_msg=value else: self.__field_is_txt_msg=pBOOL(value,**{ 'value': self.file_type==SMS_TXT_TYPE and self.msg_type in SMS_VALID_TYPE }) def __delfield_is_txt_msg(self): del self.__field_is_txt_msg is_txt_msg=property(__getfield_is_txt_msg, __setfield_is_txt_msg, __delfield_is_txt_msg, None) def __getfield_in_msg(self): return self.__field_in_msg.getvalue() def __setfield_in_msg(self, value): if isinstance(value,pBOOL): self.__field_in_msg=value else: self.__field_in_msg=pBOOL(value,**{ 'value': self.msg_type==SMS_TYPE_IN }) def __delfield_in_msg(self): del self.__field_in_msg in_msg=property(__getfield_in_msg, __setfield_in_msg, __delfield_in_msg, None) def __getfield_sent_msg(self): return self.__field_sent_msg.getvalue() def __setfield_sent_msg(self, value): if isinstance(value,pBOOL): self.__field_sent_msg=value else: self.__field_sent_msg=pBOOL(value,**{ 'value': self.msg_type==SMS_TYPE_SENT }) def __delfield_sent_msg(self): del self.__field_sent_msg sent_msg=property(__getfield_sent_msg, __setfield_sent_msg, __delfield_sent_msg, None) def __getfield_draft_msg(self): return self.__field_draft_msg.getvalue() def __setfield_draft_msg(self, value): if isinstance(value,pBOOL): self.__field_draft_msg=value else: self.__field_draft_msg=pBOOL(value,**{ 'value': self.msg_type==SMS_TYPE_DRAFT }) def __delfield_draft_msg(self): del self.__field_draft_msg draft_msg=property(__getfield_draft_msg, __setfield_draft_msg, __delfield_draft_msg, None) def __getfield_body(self): return self.__field_body.getvalue() def __setfield_body(self, value): if isinstance(value,sms_body): self.__field_body=value else: self.__field_body=sms_body(value,**{ 'msg_len': self.msg_len, 'has_callback': self.bitmap2 & SMS_FLG2_CALLBACK, 'has_priority': self.bitmap2 & SMS_FLG2_PRIORITY, 'has_1byte': self.bitmap2 & SMS_FLG2_SOMETHING, 'has_1byte2': self.bitmap2 & SMS_FLG2_MSG, 'has_40bytes': self.bitmap1 & SMS_FLG1_HAS40 }) def __delfield_body(self): del self.__field_body body=property(__getfield_body, __setfield_body, __delfield_body, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('msg_len', self.__field_msg_len, None) yield ('callback_len', self.__field_callback_len, None) yield ('bitmap1', self.__field_bitmap1, None) yield ('bitmap2', self.__field_bitmap2, None) yield ('body_len', self.__field_body_len, None) yield ('file_type', self.__field_file_type, None) yield ('msg_type', self.__field_msg_type, None) yield ('enhance_delivery', self.__field_enhance_delivery, None) yield ('is_txt_msg', self.__field_is_txt_msg, None) yield ('in_msg', self.__field_in_msg, None) yield ('sent_msg', self.__field_sent_msg, None) yield ('draft_msg', self.__field_draft_msg, None) if self.is_txt_msg.value: yield ('body', self.__field_body, None) class sms_msg_stat_list(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['status'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_msg_stat_list,self).__init__(**dict) if self.__class__ is sms_msg_stat_list: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_msg_stat_list,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_msg_stat_list,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_status=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def iscontainer(self): return True def containerelements(self): yield ('status', self.__field_status, None) class sms_datetime_list(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['datetime'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_datetime_list,self).__init__(**dict) if self.__class__ is sms_datetime_list: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_datetime_list,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_datetime_list,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_datetime=DateTime2(**{'sizeinbytes': 4}) self.__field_datetime.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 4}).readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,DateTime2): self.__field_datetime=value else: self.__field_datetime=DateTime2(value,**{'sizeinbytes': 4}) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def iscontainer(self): return True def containerelements(self): yield ('datetime', self.__field_datetime, None) class sms_delivered_datetime(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['datetime'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_delivered_datetime,self).__init__(**dict) if self.__class__ is sms_delivered_datetime: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_delivered_datetime,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_delivered_datetime,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_datetime=LIST(**{ 'elementclass': sms_datetime_list, 'length': 10 }) self.__field_datetime.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 20}).readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,LIST): self.__field_datetime=value else: self.__field_datetime=LIST(value,**{ 'elementclass': sms_datetime_list, 'length': 10 }) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def iscontainer(self): return True def containerelements(self): yield ('datetime', self.__field_datetime, None) class sms_body(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['msg_len', 'has_callback', 'has_priority', 'has_1byte', 'has_1byte2', 'has_40bytes', 'msg', 'callback_len', 'callback', 'priority', 'datetime', 'addr_len0', 'addr_len1', 'addr_len2', 'addr_len3', 'addr_len4', 'addr_len5', 'addr_len6', 'addr_len7', 'addr_len8', 'addr_len9', 'addr0', 'addr1', 'addr2', 'addr3', 'addr4', 'addr5', 'addr6', 'addr7', 'addr8', 'addr9', 'msg_stat'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_body,self).__init__(**dict) if self.__class__ is sms_body: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_body,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_body,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_msg_len except: self.__field_msg_len=UINT() try: self.__field_has_callback except: self.__field_has_callback=BOOL(**{ 'default': True }) try: self.__field_has_priority except: self.__field_has_priority=BOOL(**{ 'default': False }) try: self.__field_has_1byte except: self.__field_has_1byte=BOOL(**{ 'default': False }) try: self.__field_has_1byte2 except: self.__field_has_1byte2=BOOL(**{ 'default': True }) try: self.__field_has_40bytes except: self.__field_has_40bytes=BOOL(**{ 'default': False }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) DONTCARE(**{'sizeinbytes': 54}).readfrombuffer(buf) self.__field_msg=USTRING(**{ 'sizeinbytes': self.msg_len, 'encoding': ENCODING, 'terminator': None }) self.__field_msg.readfrombuffer(buf) if self.has_callback: DONTCARE(**{'sizeinbytes': 3}).readfrombuffer(buf) self.__field_callback_len=UINT(**{'sizeinbytes': 1}) self.__field_callback_len.readfrombuffer(buf) self.__field_callback=STRING(**{ 'sizeinbytes': self.callback_len, 'terminator': None }) self.__field_callback.readfrombuffer(buf) if self.has_priority: self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) if self.has_1byte: DONTCARE(**{'sizeinbytes': 1}).readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 40}).readfrombuffer(buf) self.__field_datetime=DateTime1(**{'sizeinbytes': 4}) self.__field_datetime.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 17}).readfrombuffer(buf) self.__field_addr_len0=UINT(**{'sizeinbytes': 1}) self.__field_addr_len0.readfrombuffer(buf) self.__field_addr_len1=UINT(**{'sizeinbytes': 1}) self.__field_addr_len1.readfrombuffer(buf) self.__field_addr_len2=UINT(**{'sizeinbytes': 1}) self.__field_addr_len2.readfrombuffer(buf) self.__field_addr_len3=UINT(**{'sizeinbytes': 1}) self.__field_addr_len3.readfrombuffer(buf) self.__field_addr_len4=UINT(**{'sizeinbytes': 1}) self.__field_addr_len4.readfrombuffer(buf) self.__field_addr_len5=UINT(**{'sizeinbytes': 1}) self.__field_addr_len5.readfrombuffer(buf) self.__field_addr_len6=UINT(**{'sizeinbytes': 1}) self.__field_addr_len6.readfrombuffer(buf) self.__field_addr_len7=UINT(**{'sizeinbytes': 1}) self.__field_addr_len7.readfrombuffer(buf) self.__field_addr_len8=UINT(**{'sizeinbytes': 1}) self.__field_addr_len8.readfrombuffer(buf) self.__field_addr_len9=UINT(**{'sizeinbytes': 1}) self.__field_addr_len9.readfrombuffer(buf) if self.addr_len0: self.__field_addr0=STRING(**{ 'sizeinbytes': self.addr_len0, 'terminator': None }) self.__field_addr0.readfrombuffer(buf) if self.addr_len1: self.__field_addr1=STRING(**{ 'sizeinbytes': self.addr_len1, 'terminator': None }) self.__field_addr1.readfrombuffer(buf) if self.addr_len2: self.__field_addr2=STRING(**{ 'sizeinbytes': self.addr_len2, 'terminator': None }) self.__field_addr2.readfrombuffer(buf) if self.addr_len3: self.__field_addr3=STRING(**{ 'sizeinbytes': self.addr_len3, 'terminator': None }) self.__field_addr3.readfrombuffer(buf) if self.addr_len4: self.__field_addr4=STRING(**{ 'sizeinbytes': self.addr_len4, 'terminator': None }) self.__field_addr4.readfrombuffer(buf) if self.addr_len5: self.__field_addr5=STRING(**{ 'sizeinbytes': self.addr_len5, 'terminator': None }) self.__field_addr5.readfrombuffer(buf) if self.addr_len6: self.__field_addr6=STRING(**{ 'sizeinbytes': self.addr_len6, 'terminator': None }) self.__field_addr6.readfrombuffer(buf) if self.addr_len7: self.__field_addr7=STRING(**{ 'sizeinbytes': self.addr_len7, 'terminator': None }) self.__field_addr7.readfrombuffer(buf) if self.addr_len8: self.__field_addr8=STRING(**{ 'sizeinbytes': self.addr_len8, 'terminator': None }) self.__field_addr8.readfrombuffer(buf) if self.addr_len9: self.__field_addr9=STRING(**{ 'sizeinbytes': self.addr_len9, 'terminator': None }) self.__field_addr9.readfrombuffer(buf) if not self.has_1byte and self.has_1byte2: DONTCARE(**{'sizeinbytes': 1}).readfrombuffer(buf) if self.has_1byte2: DONTCARE(**{'sizeinbytes': 1}).readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 81}).readfrombuffer(buf) if self.has_40bytes: DONTCARE(**{'sizeinbytes': 40}).readfrombuffer(buf) self.__field_msg_stat=LIST(**{ 'elementclass': sms_msg_stat_list, 'length': 10 }) self.__field_msg_stat.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg_len(self): return self.__field_msg_len.getvalue() def __setfield_msg_len(self, value): if isinstance(value,UINT): self.__field_msg_len=value else: self.__field_msg_len=UINT(value,) def __delfield_msg_len(self): del self.__field_msg_len msg_len=property(__getfield_msg_len, __setfield_msg_len, __delfield_msg_len, None) def __getfield_has_callback(self): try: self.__field_has_callback except: self.__field_has_callback=BOOL(**{ 'default': True }) return self.__field_has_callback.getvalue() def __setfield_has_callback(self, value): if isinstance(value,BOOL): self.__field_has_callback=value else: self.__field_has_callback=BOOL(value,**{ 'default': True }) def __delfield_has_callback(self): del self.__field_has_callback has_callback=property(__getfield_has_callback, __setfield_has_callback, __delfield_has_callback, None) def __getfield_has_priority(self): try: self.__field_has_priority except: self.__field_has_priority=BOOL(**{ 'default': False }) return self.__field_has_priority.getvalue() def __setfield_has_priority(self, value): if isinstance(value,BOOL): self.__field_has_priority=value else: self.__field_has_priority=BOOL(value,**{ 'default': False }) def __delfield_has_priority(self): del self.__field_has_priority has_priority=property(__getfield_has_priority, __setfield_has_priority, __delfield_has_priority, None) def __getfield_has_1byte(self): try: self.__field_has_1byte except: self.__field_has_1byte=BOOL(**{ 'default': False }) return self.__field_has_1byte.getvalue() def __setfield_has_1byte(self, value): if isinstance(value,BOOL): self.__field_has_1byte=value else: self.__field_has_1byte=BOOL(value,**{ 'default': False }) def __delfield_has_1byte(self): del self.__field_has_1byte has_1byte=property(__getfield_has_1byte, __setfield_has_1byte, __delfield_has_1byte, None) def __getfield_has_1byte2(self): try: self.__field_has_1byte2 except: self.__field_has_1byte2=BOOL(**{ 'default': True }) return self.__field_has_1byte2.getvalue() def __setfield_has_1byte2(self, value): if isinstance(value,BOOL): self.__field_has_1byte2=value else: self.__field_has_1byte2=BOOL(value,**{ 'default': True }) def __delfield_has_1byte2(self): del self.__field_has_1byte2 has_1byte2=property(__getfield_has_1byte2, __setfield_has_1byte2, __delfield_has_1byte2, None) def __getfield_has_40bytes(self): try: self.__field_has_40bytes except: self.__field_has_40bytes=BOOL(**{ 'default': False }) return self.__field_has_40bytes.getvalue() def __setfield_has_40bytes(self, value): if isinstance(value,BOOL): self.__field_has_40bytes=value else: self.__field_has_40bytes=BOOL(value,**{ 'default': False }) def __delfield_has_40bytes(self): del self.__field_has_40bytes has_40bytes=property(__getfield_has_40bytes, __setfield_has_40bytes, __delfield_has_40bytes, None) def __getfield_msg(self): return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{ 'sizeinbytes': self.msg_len, 'encoding': ENCODING, 'terminator': None }) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def __getfield_callback_len(self): return self.__field_callback_len.getvalue() def __setfield_callback_len(self, value): if isinstance(value,UINT): self.__field_callback_len=value else: self.__field_callback_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_len(self): del self.__field_callback_len callback_len=property(__getfield_callback_len, __setfield_callback_len, __delfield_callback_len, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,STRING): self.__field_callback=value else: self.__field_callback=STRING(value,**{ 'sizeinbytes': self.callback_len, 'terminator': None }) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,DateTime1): self.__field_datetime=value else: self.__field_datetime=DateTime1(value,**{'sizeinbytes': 4}) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def __getfield_addr_len0(self): return self.__field_addr_len0.getvalue() def __setfield_addr_len0(self, value): if isinstance(value,UINT): self.__field_addr_len0=value else: self.__field_addr_len0=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len0(self): del self.__field_addr_len0 addr_len0=property(__getfield_addr_len0, __setfield_addr_len0, __delfield_addr_len0, None) def __getfield_addr_len1(self): return self.__field_addr_len1.getvalue() def __setfield_addr_len1(self, value): if isinstance(value,UINT): self.__field_addr_len1=value else: self.__field_addr_len1=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len1(self): del self.__field_addr_len1 addr_len1=property(__getfield_addr_len1, __setfield_addr_len1, __delfield_addr_len1, None) def __getfield_addr_len2(self): return self.__field_addr_len2.getvalue() def __setfield_addr_len2(self, value): if isinstance(value,UINT): self.__field_addr_len2=value else: self.__field_addr_len2=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len2(self): del self.__field_addr_len2 addr_len2=property(__getfield_addr_len2, __setfield_addr_len2, __delfield_addr_len2, None) def __getfield_addr_len3(self): return self.__field_addr_len3.getvalue() def __setfield_addr_len3(self, value): if isinstance(value,UINT): self.__field_addr_len3=value else: self.__field_addr_len3=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len3(self): del self.__field_addr_len3 addr_len3=property(__getfield_addr_len3, __setfield_addr_len3, __delfield_addr_len3, None) def __getfield_addr_len4(self): return self.__field_addr_len4.getvalue() def __setfield_addr_len4(self, value): if isinstance(value,UINT): self.__field_addr_len4=value else: self.__field_addr_len4=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len4(self): del self.__field_addr_len4 addr_len4=property(__getfield_addr_len4, __setfield_addr_len4, __delfield_addr_len4, None) def __getfield_addr_len5(self): return self.__field_addr_len5.getvalue() def __setfield_addr_len5(self, value): if isinstance(value,UINT): self.__field_addr_len5=value else: self.__field_addr_len5=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len5(self): del self.__field_addr_len5 addr_len5=property(__getfield_addr_len5, __setfield_addr_len5, __delfield_addr_len5, None) def __getfield_addr_len6(self): return self.__field_addr_len6.getvalue() def __setfield_addr_len6(self, value): if isinstance(value,UINT): self.__field_addr_len6=value else: self.__field_addr_len6=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len6(self): del self.__field_addr_len6 addr_len6=property(__getfield_addr_len6, __setfield_addr_len6, __delfield_addr_len6, None) def __getfield_addr_len7(self): return self.__field_addr_len7.getvalue() def __setfield_addr_len7(self, value): if isinstance(value,UINT): self.__field_addr_len7=value else: self.__field_addr_len7=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len7(self): del self.__field_addr_len7 addr_len7=property(__getfield_addr_len7, __setfield_addr_len7, __delfield_addr_len7, None) def __getfield_addr_len8(self): return self.__field_addr_len8.getvalue() def __setfield_addr_len8(self, value): if isinstance(value,UINT): self.__field_addr_len8=value else: self.__field_addr_len8=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len8(self): del self.__field_addr_len8 addr_len8=property(__getfield_addr_len8, __setfield_addr_len8, __delfield_addr_len8, None) def __getfield_addr_len9(self): return self.__field_addr_len9.getvalue() def __setfield_addr_len9(self, value): if isinstance(value,UINT): self.__field_addr_len9=value else: self.__field_addr_len9=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len9(self): del self.__field_addr_len9 addr_len9=property(__getfield_addr_len9, __setfield_addr_len9, __delfield_addr_len9, None) def __getfield_addr0(self): return self.__field_addr0.getvalue() def __setfield_addr0(self, value): if isinstance(value,STRING): self.__field_addr0=value else: self.__field_addr0=STRING(value,**{ 'sizeinbytes': self.addr_len0, 'terminator': None }) def __delfield_addr0(self): del self.__field_addr0 addr0=property(__getfield_addr0, __setfield_addr0, __delfield_addr0, None) def __getfield_addr1(self): return self.__field_addr1.getvalue() def __setfield_addr1(self, value): if isinstance(value,STRING): self.__field_addr1=value else: self.__field_addr1=STRING(value,**{ 'sizeinbytes': self.addr_len1, 'terminator': None }) def __delfield_addr1(self): del self.__field_addr1 addr1=property(__getfield_addr1, __setfield_addr1, __delfield_addr1, None) def __getfield_addr2(self): return self.__field_addr2.getvalue() def __setfield_addr2(self, value): if isinstance(value,STRING): self.__field_addr2=value else: self.__field_addr2=STRING(value,**{ 'sizeinbytes': self.addr_len2, 'terminator': None }) def __delfield_addr2(self): del self.__field_addr2 addr2=property(__getfield_addr2, __setfield_addr2, __delfield_addr2, None) def __getfield_addr3(self): return self.__field_addr3.getvalue() def __setfield_addr3(self, value): if isinstance(value,STRING): self.__field_addr3=value else: self.__field_addr3=STRING(value,**{ 'sizeinbytes': self.addr_len3, 'terminator': None }) def __delfield_addr3(self): del self.__field_addr3 addr3=property(__getfield_addr3, __setfield_addr3, __delfield_addr3, None) def __getfield_addr4(self): return self.__field_addr4.getvalue() def __setfield_addr4(self, value): if isinstance(value,STRING): self.__field_addr4=value else: self.__field_addr4=STRING(value,**{ 'sizeinbytes': self.addr_len4, 'terminator': None }) def __delfield_addr4(self): del self.__field_addr4 addr4=property(__getfield_addr4, __setfield_addr4, __delfield_addr4, None) def __getfield_addr5(self): return self.__field_addr5.getvalue() def __setfield_addr5(self, value): if isinstance(value,STRING): self.__field_addr5=value else: self.__field_addr5=STRING(value,**{ 'sizeinbytes': self.addr_len5, 'terminator': None }) def __delfield_addr5(self): del self.__field_addr5 addr5=property(__getfield_addr5, __setfield_addr5, __delfield_addr5, None) def __getfield_addr6(self): return self.__field_addr6.getvalue() def __setfield_addr6(self, value): if isinstance(value,STRING): self.__field_addr6=value else: self.__field_addr6=STRING(value,**{ 'sizeinbytes': self.addr_len6, 'terminator': None }) def __delfield_addr6(self): del self.__field_addr6 addr6=property(__getfield_addr6, __setfield_addr6, __delfield_addr6, None) def __getfield_addr7(self): return self.__field_addr7.getvalue() def __setfield_addr7(self, value): if isinstance(value,STRING): self.__field_addr7=value else: self.__field_addr7=STRING(value,**{ 'sizeinbytes': self.addr_len7, 'terminator': None }) def __delfield_addr7(self): del self.__field_addr7 addr7=property(__getfield_addr7, __setfield_addr7, __delfield_addr7, None) def __getfield_addr8(self): return self.__field_addr8.getvalue() def __setfield_addr8(self, value): if isinstance(value,STRING): self.__field_addr8=value else: self.__field_addr8=STRING(value,**{ 'sizeinbytes': self.addr_len8, 'terminator': None }) def __delfield_addr8(self): del self.__field_addr8 addr8=property(__getfield_addr8, __setfield_addr8, __delfield_addr8, None) def __getfield_addr9(self): return self.__field_addr9.getvalue() def __setfield_addr9(self, value): if isinstance(value,STRING): self.__field_addr9=value else: self.__field_addr9=STRING(value,**{ 'sizeinbytes': self.addr_len9, 'terminator': None }) def __delfield_addr9(self): del self.__field_addr9 addr9=property(__getfield_addr9, __setfield_addr9, __delfield_addr9, None) def __getfield_msg_stat(self): return self.__field_msg_stat.getvalue() def __setfield_msg_stat(self, value): if isinstance(value,LIST): self.__field_msg_stat=value else: self.__field_msg_stat=LIST(value,**{ 'elementclass': sms_msg_stat_list, 'length': 10 }) def __delfield_msg_stat(self): del self.__field_msg_stat msg_stat=property(__getfield_msg_stat, __setfield_msg_stat, __delfield_msg_stat, None) def iscontainer(self): return True def containerelements(self): yield ('msg_len', self.__field_msg_len, None) yield ('has_callback', self.__field_has_callback, None) yield ('has_priority', self.__field_has_priority, None) yield ('has_1byte', self.__field_has_1byte, None) yield ('has_1byte2', self.__field_has_1byte2, None) yield ('has_40bytes', self.__field_has_40bytes, None) yield ('msg', self.__field_msg, None) if self.has_callback: yield ('callback_len', self.__field_callback_len, None) yield ('callback', self.__field_callback, None) if self.has_priority: yield ('priority', self.__field_priority, None) if self.has_1byte: pass yield ('datetime', self.__field_datetime, None) yield ('addr_len0', self.__field_addr_len0, None) yield ('addr_len1', self.__field_addr_len1, None) yield ('addr_len2', self.__field_addr_len2, None) yield ('addr_len3', self.__field_addr_len3, None) yield ('addr_len4', self.__field_addr_len4, None) yield ('addr_len5', self.__field_addr_len5, None) yield ('addr_len6', self.__field_addr_len6, None) yield ('addr_len7', self.__field_addr_len7, None) yield ('addr_len8', self.__field_addr_len8, None) yield ('addr_len9', self.__field_addr_len9, None) if self.addr_len0: yield ('addr0', self.__field_addr0, None) if self.addr_len1: yield ('addr1', self.__field_addr1, None) if self.addr_len2: yield ('addr2', self.__field_addr2, None) if self.addr_len3: yield ('addr3', self.__field_addr3, None) if self.addr_len4: yield ('addr4', self.__field_addr4, None) if self.addr_len5: yield ('addr5', self.__field_addr5, None) if self.addr_len6: yield ('addr6', self.__field_addr6, None) if self.addr_len7: yield ('addr7', self.__field_addr7, None) if self.addr_len8: yield ('addr8', self.__field_addr8, None) if self.addr_len9: yield ('addr9', self.__field_addr9, None) if not self.has_1byte and self.has_1byte2: pass if self.has_1byte2: pass if self.has_40bytes: pass yield ('msg_stat', self.__field_msg_stat, None) bitpim-1.0.7+dfsg1/src/phones/p_lglg6190.py0000644001616600161660000047465710466234100016413 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG 6190 (Sprint)""" import re from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx4400 except as noted # below from p_lgvx4400 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=1 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=500 MEMOLENGTH=65 NORINGTONE=0 NOMSGRINGTONE=0 NOWALLPAPER=0 NUMEMAILS=3 NUMPHONENUMBERS=5 SMS_CANNED_MAX_ITEMS=18 SMS_CANNED_MAX_LENGTH=101 SMS_CANNED_FILENAME="sms/mediacan000.dat" SMS_PATTERNS={'Inbox': re.compile(r"^.*/inbox[0-9][0-9][0-9]\.dat$"), 'Sent': re.compile(r"^.*/outbox[0-9][0-9][0-9]\.dat$"), 'Saved': re.compile(r"^.*/sf[0-9][0-9]\.dat$"), } # Text Memo const text_memo_file='sch/memo.dat' content_file_name='ams/contentInfo' content_count_file_name='ams/realContent' media_directory='ams' ringerindex='setas/amsRingerIndex.map' imageindex='setas/amsImageIndex.map' ringerconst=2 imageconst=3 max_ringers=100 max_images=100 phonebook_media='pim/pbookcontact.dat' # Calendar parameters NUMCALENDARENTRIES=300 # ?? for VX4400 CAL_REP_NONE=0x10 CAL_REP_DAILY=0x11 CAL_REP_MONFRI=0x12 CAL_REP_WEEKLY=0x13 CAL_REP_MONTHLY=0x14 CAL_REP_YEARLY=0x15 CAL_DOW_SUN=0x0800 CAL_DOW_MON=0x0400 CAL_DOW_TUE=0x0200 CAL_DOW_WED=0x0100 CAL_DOW_THU=0x0080 CAL_DOW_FRI=0x0040 CAL_DOW_SAT=0x0020 CAL_DOW_EXCEPTIONS=0x0010 CAL_REMINDER_NONE=0 CAL_REMINDER_ONTIME=1 CAL_REMINDER_5MIN=2 CAL_REMINDER_10MIN=3 CAL_REMINDER_1HOUR=4 CAL_REMINDER_1DAY=5 CAL_REMINDER_2DAYS=6 CAL_NO_VOICE=0xffff CAL_REPEAT_DATE=(2999, 12, 31) cal_has_voice_id=True cal_voice_id_ofs=0x11 cal_voice_ext='.qcp' # full name='sche000.qcp' cal_dir='sch' cal_data_file_name='sch/schedule.dat' cal_exception_file_name='sch/schexception.dat' PHONE_ENCODING='iso8859_1' class pbreadentryresponse(BaseProtogenClass): "Results of reading one entry" __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbreadentryresponse,self).__init__(**dict) if self.__class__ is pbreadentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbreadentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbreadentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbupdateentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbupdateentryrequest,self).__init__(**dict) if self.__class__ is pbupdateentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbupdateentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbupdateentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x04, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbappendentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbappendentryrequest,self).__init__(**dict) if self.__class__ is pbappendentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbappendentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbappendentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x03, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class speeddial(BaseProtogenClass): __fields=['entry', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddial,self).__init__(**dict) if self.__class__ is speeddial: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddial,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddial,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.writetobuffer(buf) try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.readfrombuffer(buf) self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,UINT): self.__field_entry=value else: self.__field_entry=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_number(self): try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,UINT): self.__field_number=value else: self.__field_number=UINT(value,**{'sizeinbytes': 1, 'default': 0xff}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('entry', self.__field_entry, None) yield ('number', self.__field_number, None) class speeddials(BaseProtogenClass): __fields=['speeddials'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddials,self).__init__(**dict) if self.__class__ is speeddials: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddials,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddials,kwargs) if len(args): dict2={'length': NUMSPEEDDIALS, 'elementclass': speeddial} dict2.update(kwargs) kwargs=dict2 self.__field_speeddials=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_speeddials(self): try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) return self.__field_speeddials.getvalue() def __setfield_speeddials(self, value): if isinstance(value,LIST): self.__field_speeddials=value else: self.__field_speeddials=LIST(value,**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) def __delfield_speeddials(self): del self.__field_speeddials speeddials=property(__getfield_speeddials, __setfield_speeddials, __delfield_speeddials, None) def iscontainer(self): return True def containerelements(self): yield ('speeddials', self.__field_speeddials, None) class pbentry(BaseProtogenClass): __fields=['serial1', 'entrysize', 'serial2', 'entrynumber', 'name', 'group', 'emails', 'url', 'ringtone', 'msgringtone', 'secret', 'memo', 'wallpaper', 'numbertypes', 'numbers', 'unknown20c'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_serial1.writetobuffer(buf) try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x0222}) self.__field_entrysize.writetobuffer(buf) self.__field_serial2.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_group.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lglg6190_137, 'length': NUMEMAILS}) self.__field_emails.writetobuffer(buf) self.__field_url.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_msgringtone.writetobuffer(buf) self.__field_secret.writetobuffer(buf) self.__field_memo.writetobuffer(buf) self.__field_wallpaper.writetobuffer(buf) try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lglg6190_145, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lglg6190_147, 'length': NUMPHONENUMBERS}) self.__field_numbers.writetobuffer(buf) try: self.__field_unknown20c except: self.__field_unknown20c=UNKNOWN() self.__field_unknown20c.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x0222}) self.__field_entrysize.readfrombuffer(buf) self.__field_serial2=UINT(**{'sizeinbytes': 4}) self.__field_serial2.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 2}) self.__field_entrynumber.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 2}) self.__field_group.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_lglg6190_137, 'length': NUMEMAILS}) self.__field_emails.readfrombuffer(buf) self.__field_url=USTRING(**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_url.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_msgringtone=UINT(**{'sizeinbytes': 1}) self.__field_msgringtone.readfrombuffer(buf) self.__field_secret=BOOL(**{'sizeinbytes': 1}) self.__field_secret.readfrombuffer(buf) self.__field_memo=USTRING(**{'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) self.__field_memo.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 1}) self.__field_wallpaper.readfrombuffer(buf) self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lglg6190_145, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.readfrombuffer(buf) self.__field_numbers=LIST(**{'elementclass': _gen_p_lglg6190_147, 'length': NUMPHONENUMBERS}) self.__field_numbers.readfrombuffer(buf) self.__field_unknown20c=UNKNOWN() self.__field_unknown20c.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_entrysize(self): try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x0222}) return self.__field_entrysize.getvalue() def __setfield_entrysize(self, value): if isinstance(value,UINT): self.__field_entrysize=value else: self.__field_entrysize=UINT(value,**{'sizeinbytes': 2, 'constant': 0x0222}) def __delfield_entrysize(self): del self.__field_entrysize entrysize=property(__getfield_entrysize, __setfield_entrysize, __delfield_entrysize, None) def __getfield_serial2(self): return self.__field_serial2.getvalue() def __setfield_serial2(self, value): if isinstance(value,UINT): self.__field_serial2=value else: self.__field_serial2=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial2(self): del self.__field_serial2 serial2=property(__getfield_serial2, __setfield_serial2, __delfield_serial2, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 2}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 2}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lglg6190_137, 'length': NUMEMAILS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_lglg6190_137, 'length': NUMEMAILS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, None) def __getfield_url(self): return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,USTRING): self.__field_url=value else: self.__field_url=USTRING(value,**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "ringtone index for a call") def __getfield_msgringtone(self): return self.__field_msgringtone.getvalue() def __setfield_msgringtone(self, value): if isinstance(value,UINT): self.__field_msgringtone=value else: self.__field_msgringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_msgringtone(self): del self.__field_msgringtone msgringtone=property(__getfield_msgringtone, __setfield_msgringtone, __delfield_msgringtone, "ringtone index for a text message") def __getfield_secret(self): return self.__field_secret.getvalue() def __setfield_secret(self, value): if isinstance(value,BOOL): self.__field_secret=value else: self.__field_secret=BOOL(value,**{'sizeinbytes': 1}) def __delfield_secret(self): del self.__field_secret secret=property(__getfield_secret, __setfield_secret, __delfield_secret, None) def __getfield_memo(self): return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,USTRING): self.__field_memo=value else: self.__field_memo=USTRING(value,**{'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 1}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_numbertypes(self): try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lglg6190_145, 'length': NUMPHONENUMBERS}) return self.__field_numbertypes.getvalue() def __setfield_numbertypes(self, value): if isinstance(value,LIST): self.__field_numbertypes=value else: self.__field_numbertypes=LIST(value,**{'elementclass': _gen_p_lglg6190_145, 'length': NUMPHONENUMBERS}) def __delfield_numbertypes(self): del self.__field_numbertypes numbertypes=property(__getfield_numbertypes, __setfield_numbertypes, __delfield_numbertypes, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lglg6190_147, 'length': NUMPHONENUMBERS}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'elementclass': _gen_p_lglg6190_147, 'length': NUMPHONENUMBERS}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_unknown20c(self): try: self.__field_unknown20c except: self.__field_unknown20c=UNKNOWN() return self.__field_unknown20c.getvalue() def __setfield_unknown20c(self, value): if isinstance(value,UNKNOWN): self.__field_unknown20c=value else: self.__field_unknown20c=UNKNOWN(value,) def __delfield_unknown20c(self): del self.__field_unknown20c unknown20c=property(__getfield_unknown20c, __setfield_unknown20c, __delfield_unknown20c, None) def iscontainer(self): return True def containerelements(self): yield ('serial1', self.__field_serial1, None) yield ('entrysize', self.__field_entrysize, None) yield ('serial2', self.__field_serial2, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('name', self.__field_name, None) yield ('group', self.__field_group, None) yield ('emails', self.__field_emails, None) yield ('url', self.__field_url, None) yield ('ringtone', self.__field_ringtone, "ringtone index for a call") yield ('msgringtone', self.__field_msgringtone, "ringtone index for a text message") yield ('secret', self.__field_secret, None) yield ('memo', self.__field_memo, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('numbertypes', self.__field_numbertypes, None) yield ('numbers', self.__field_numbers, None) yield ('unknown20c', self.__field_unknown20c, None) class _gen_p_lglg6190_137(BaseProtogenClass): 'Anonymous inner class' __fields=['email'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglg6190_137,self).__init__(**dict) if self.__class__ is _gen_p_lglg6190_137: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglg6190_137,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglg6190_137,kwargs) if len(args): dict2={'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_email=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_email.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_email=USTRING(**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_email.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def iscontainer(self): return True def containerelements(self): yield ('email', self.__field_email, None) class _gen_p_lglg6190_145(BaseProtogenClass): 'Anonymous inner class' __fields=['numbertype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglg6190_145,self).__init__(**dict) if self.__class__ is _gen_p_lglg6190_145: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglg6190_145,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglg6190_145,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_numbertype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numbertype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numbertype=UINT(**{'sizeinbytes': 1}) self.__field_numbertype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numbertype(self): return self.__field_numbertype.getvalue() def __setfield_numbertype(self, value): if isinstance(value,UINT): self.__field_numbertype=value else: self.__field_numbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_numbertype(self): del self.__field_numbertype numbertype=property(__getfield_numbertype, __setfield_numbertype, __delfield_numbertype, None) def iscontainer(self): return True def containerelements(self): yield ('numbertype', self.__field_numbertype, None) class _gen_p_lglg6190_147(BaseProtogenClass): 'Anonymous inner class' __fields=['number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglg6190_147,self).__init__(**dict) if self.__class__ is _gen_p_lglg6190_147: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglg6190_147,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglg6190_147,kwargs) if len(args): dict2={'sizeinbytes': 49, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_number=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) class pbgroup(BaseProtogenClass): "A single group" __fields=['icon', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroup,self).__init__(**dict) if self.__class__ is pbgroup: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroup,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroup,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_icon.writetobuffer(buf) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_icon=UINT(**{'sizeinbytes': 1}) self.__field_icon.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_icon(self): return self.__field_icon.getvalue() def __setfield_icon(self, value): if isinstance(value,UINT): self.__field_icon=value else: self.__field_icon=UINT(value,**{'sizeinbytes': 1}) def __delfield_icon(self): del self.__field_icon icon=property(__getfield_icon, __setfield_icon, __delfield_icon, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('icon', self.__field_icon, None) yield ('name', self.__field_name, None) class pbgroups(BaseProtogenClass): "Phonebook groups" __fields=['groups'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroups,self).__init__(**dict) if self.__class__ is pbgroups: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroups,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroups,kwargs) if len(args): dict2={'elementclass': pbgroup} dict2.update(kwargs) kwargs=dict2 self.__field_groups=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_groups(self): try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) return self.__field_groups.getvalue() def __setfield_groups(self, value): if isinstance(value,LIST): self.__field_groups=value else: self.__field_groups=LIST(value,**{'elementclass': pbgroup}) def __delfield_groups(self): del self.__field_groups groups=property(__getfield_groups, __setfield_groups, __delfield_groups, None) def iscontainer(self): return True def containerelements(self): yield ('groups', self.__field_groups, None) class call(BaseProtogenClass): __fields=['GPStime', 'unknown1', 'duration', 'number', 'name', 'numberlength', 'unknown2', 'pbnumbertype', 'unknown3', 'pbentrynum'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(call,self).__init__(**dict) if self.__class__ is call: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(call,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(call,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_numberlength.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_pbnumbertype.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_pbentrynum.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 4}) self.__field_unknown1.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_numberlength=UINT(**{'sizeinbytes': 1}) self.__field_numberlength.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_pbnumbertype=UINT(**{'sizeinbytes': 1}) self.__field_pbnumbertype.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 2}) self.__field_unknown3.readfrombuffer(buf) self.__field_pbentrynum=UINT(**{'sizeinbytes': 2}) self.__field_pbentrynum.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numberlength(self): return self.__field_numberlength.getvalue() def __setfield_numberlength(self, value): if isinstance(value,UINT): self.__field_numberlength=value else: self.__field_numberlength=UINT(value,**{'sizeinbytes': 1}) def __delfield_numberlength(self): del self.__field_numberlength numberlength=property(__getfield_numberlength, __setfield_numberlength, __delfield_numberlength, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_pbnumbertype(self): return self.__field_pbnumbertype.getvalue() def __setfield_pbnumbertype(self, value): if isinstance(value,UINT): self.__field_pbnumbertype=value else: self.__field_pbnumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_pbnumbertype(self): del self.__field_pbnumbertype pbnumbertype=property(__getfield_pbnumbertype, __setfield_pbnumbertype, __delfield_pbnumbertype, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_pbentrynum(self): return self.__field_pbentrynum.getvalue() def __setfield_pbentrynum(self, value): if isinstance(value,UINT): self.__field_pbentrynum=value else: self.__field_pbentrynum=UINT(value,**{'sizeinbytes': 2}) def __delfield_pbentrynum(self): del self.__field_pbentrynum pbentrynum=property(__getfield_pbentrynum, __setfield_pbentrynum, __delfield_pbentrynum, None) def iscontainer(self): return True def containerelements(self): yield ('GPStime', self.__field_GPStime, None) yield ('unknown1', self.__field_unknown1, None) yield ('duration', self.__field_duration, None) yield ('number', self.__field_number, None) yield ('name', self.__field_name, None) yield ('numberlength', self.__field_numberlength, None) yield ('unknown2', self.__field_unknown2, None) yield ('pbnumbertype', self.__field_pbnumbertype, None) yield ('unknown3', self.__field_unknown3, None) yield ('pbentrynum', self.__field_pbentrynum, None) class callhistory(BaseProtogenClass): __fields=['numcalls', 'unknown1', 'calls'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callhistory,self).__init__(**dict) if self.__class__ is callhistory: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callhistory,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callhistory,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numcalls.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numcalls=UINT(**{'sizeinbytes': 4}) self.__field_numcalls.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numcalls(self): return self.__field_numcalls.getvalue() def __setfield_numcalls(self, value): if isinstance(value,UINT): self.__field_numcalls=value else: self.__field_numcalls=UINT(value,**{'sizeinbytes': 4}) def __delfield_numcalls(self): del self.__field_numcalls numcalls=property(__getfield_numcalls, __setfield_numcalls, __delfield_numcalls, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_calls(self): try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) return self.__field_calls.getvalue() def __setfield_calls(self, value): if isinstance(value,LIST): self.__field_calls=value else: self.__field_calls=LIST(value,**{'elementclass': call}) def __delfield_calls(self): del self.__field_calls calls=property(__getfield_calls, __setfield_calls, __delfield_calls, None) def iscontainer(self): return True def containerelements(self): yield ('numcalls', self.__field_numcalls, None) yield ('unknown1', self.__field_unknown1, None) yield ('calls', self.__field_calls, None) class indexentry(BaseProtogenClass): __fields=['index', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_index.writetobuffer(buf) try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 50, 'default': ""}) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_index.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 50, 'default': ""}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 50, 'default': ""}) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 50, 'default': ""}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('name', self.__field_name, None) class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['maxitems', 'numactiveitems', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_maxitems except: self.__field_maxitems=UINT(**{'constant': 30}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{'length': self.maxitems, 'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_items=LIST(**{'length': self.maxitems, 'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_maxitems(self): return self.__field_maxitems.getvalue() def __setfield_maxitems(self, value): if isinstance(value,UINT): self.__field_maxitems=value else: self.__field_maxitems=UINT(value,**{'constant': 30}) def __delfield_maxitems(self): del self.__field_maxitems maxitems=property(__getfield_maxitems, __setfield_maxitems, __delfield_maxitems, None) def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'length': self.maxitems, 'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'length': self.maxitems, 'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('maxitems', self.__field_maxitems, None) yield ('numactiveitems', self.__field_numactiveitems, None) yield ('items', self.__field_items, None) class camindexentry(BaseProtogenClass): __fields=['index', 'unknown1', 'name', 'taken', 'unkown2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(camindexentry,self).__init__(**dict) if self.__class__ is camindexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(camindexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(camindexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) try: self.__field_unknown1 except: self.__field_unknown1=UINT(**{'sizeinbytes': 1, 'default' : 80}) self.__field_unknown1.writetobuffer(buf) try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 10, 'default': ""}) self.__field_name.writetobuffer(buf) self.__field_taken.writetobuffer(buf) self.__field_unkown2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 1}) self.__field_index.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1, 'default' : 80}) self.__field_unknown1.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 10, 'default': ""}) self.__field_name.readfrombuffer(buf) self.__field_taken=LGCALDATE(**{'sizeinbytes': 4}) self.__field_taken.readfrombuffer(buf) self.__field_unkown2=UINT(**{'sizeinbytes': 4}) self.__field_unkown2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 1}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_unknown1(self): try: self.__field_unknown1 except: self.__field_unknown1=UINT(**{'sizeinbytes': 1, 'default' : 80}) return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1, 'default' : 80}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 10, 'default': ""}) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 10, 'default': ""}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_taken(self): return self.__field_taken.getvalue() def __setfield_taken(self, value): if isinstance(value,LGCALDATE): self.__field_taken=value else: self.__field_taken=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_taken(self): del self.__field_taken taken=property(__getfield_taken, __setfield_taken, __delfield_taken, None) def __getfield_unkown2(self): return self.__field_unkown2.getvalue() def __setfield_unkown2(self, value): if isinstance(value,UINT): self.__field_unkown2=value else: self.__field_unkown2=UINT(value,**{'sizeinbytes': 4}) def __delfield_unkown2(self): del self.__field_unkown2 unkown2=property(__getfield_unkown2, __setfield_unkown2, __delfield_unkown2, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('unknown1', self.__field_unknown1, None) yield ('name', self.__field_name, None) yield ('taken', self.__field_taken, None) yield ('unkown2', self.__field_unkown2, None) class camindexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['maxitems', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(camindexfile,self).__init__(**dict) if self.__class__ is camindexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(camindexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(camindexfile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_maxitems except: self.__field_maxitems=UINT(**{'constant': 60}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'length': self.maxitems, 'elementclass': camindexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'length': self.maxitems, 'elementclass': camindexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_maxitems(self): return self.__field_maxitems.getvalue() def __setfield_maxitems(self, value): if isinstance(value,UINT): self.__field_maxitems=value else: self.__field_maxitems=UINT(value,**{'constant': 60}) def __delfield_maxitems(self): del self.__field_maxitems maxitems=property(__getfield_maxitems, __setfield_maxitems, __delfield_maxitems, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'length': self.maxitems, 'elementclass': camindexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'length': self.maxitems, 'elementclass': camindexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('maxitems', self.__field_maxitems, None) yield ('items', self.__field_items, None) class mediadesc(BaseProtogenClass): __fields=['totalsize', 'dunno1', 'magic1', 'magic2', 'magic3', 'dunno2', 'filename', 'whoknows', 'mimetype', 'whoknows2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(mediadesc,self).__init__(**dict) if self.__class__ is mediadesc: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(mediadesc,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(mediadesc,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_totalsize.writetobuffer(buf) try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 4, 'constant': 0}) self.__field_dunno1.writetobuffer(buf) try: self.__field_magic1 except: self.__field_magic1=UINT(**{'sizeinbytes': 4, 'default': 0x7824c97a}) self.__field_magic1.writetobuffer(buf) try: self.__field_magic2 except: self.__field_magic2=UINT(**{'sizeinbytes': 4, 'default': 0x7824c97a}) self.__field_magic2.writetobuffer(buf) try: self.__field_magic3 except: self.__field_magic3=UINT(**{'sizeinbytes': 4, 'default': 0x7824c97a}) self.__field_magic3.writetobuffer(buf) try: self.__field_dunno2 except: self.__field_dunno2=UINT(**{'sizeinbytes': 4, 'constant': 0}) self.__field_dunno2.writetobuffer(buf) try: self.__field_filename except: self.__field_filename=USTRING(**{'sizeinbytes': 32, 'default': 'body'}) self.__field_filename.writetobuffer(buf) try: self.__field_whoknows except: self.__field_whoknows=USTRING(**{'sizeinbytes': 32, 'default': 'identity'}) self.__field_whoknows.writetobuffer(buf) self.__field_mimetype.writetobuffer(buf) try: self.__field_whoknows2 except: self.__field_whoknows2=USTRING(**{'sizeinbytes': 32, 'default': ""}) self.__field_whoknows2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_totalsize=UINT(**{'sizeinbytes': 4}) self.__field_totalsize.readfrombuffer(buf) self.__field_dunno1=UINT(**{'sizeinbytes': 4, 'constant': 0}) self.__field_dunno1.readfrombuffer(buf) self.__field_magic1=UINT(**{'sizeinbytes': 4, 'default': 0x7824c97a}) self.__field_magic1.readfrombuffer(buf) self.__field_magic2=UINT(**{'sizeinbytes': 4, 'default': 0x7824c97a}) self.__field_magic2.readfrombuffer(buf) self.__field_magic3=UINT(**{'sizeinbytes': 4, 'default': 0x7824c97a}) self.__field_magic3.readfrombuffer(buf) self.__field_dunno2=UINT(**{'sizeinbytes': 4, 'constant': 0}) self.__field_dunno2.readfrombuffer(buf) self.__field_filename=USTRING(**{'sizeinbytes': 32, 'default': 'body'}) self.__field_filename.readfrombuffer(buf) self.__field_whoknows=USTRING(**{'sizeinbytes': 32, 'default': 'identity'}) self.__field_whoknows.readfrombuffer(buf) self.__field_mimetype=USTRING(**{'sizeinbytes': 32}) self.__field_mimetype.readfrombuffer(buf) self.__field_whoknows2=USTRING(**{'sizeinbytes': 32, 'default': ""}) self.__field_whoknows2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_totalsize(self): return self.__field_totalsize.getvalue() def __setfield_totalsize(self, value): if isinstance(value,UINT): self.__field_totalsize=value else: self.__field_totalsize=UINT(value,**{'sizeinbytes': 4}) def __delfield_totalsize(self): del self.__field_totalsize totalsize=property(__getfield_totalsize, __setfield_totalsize, __delfield_totalsize, "media file size with size of this file (152 bytes) added") def __getfield_dunno1(self): try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 4, 'constant': 0}) return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UINT): self.__field_dunno1=value else: self.__field_dunno1=UINT(value,**{'sizeinbytes': 4, 'constant': 0}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_magic1(self): try: self.__field_magic1 except: self.__field_magic1=UINT(**{'sizeinbytes': 4, 'default': 0x7824c97a}) return self.__field_magic1.getvalue() def __setfield_magic1(self, value): if isinstance(value,UINT): self.__field_magic1=value else: self.__field_magic1=UINT(value,**{'sizeinbytes': 4, 'default': 0x7824c97a}) def __delfield_magic1(self): del self.__field_magic1 magic1=property(__getfield_magic1, __setfield_magic1, __delfield_magic1, "probably the file date (created)") def __getfield_magic2(self): try: self.__field_magic2 except: self.__field_magic2=UINT(**{'sizeinbytes': 4, 'default': 0x7824c97a}) return self.__field_magic2.getvalue() def __setfield_magic2(self, value): if isinstance(value,UINT): self.__field_magic2=value else: self.__field_magic2=UINT(value,**{'sizeinbytes': 4, 'default': 0x7824c97a}) def __delfield_magic2(self): del self.__field_magic2 magic2=property(__getfield_magic2, __setfield_magic2, __delfield_magic2, "probably the file date (accessed)") def __getfield_magic3(self): try: self.__field_magic3 except: self.__field_magic3=UINT(**{'sizeinbytes': 4, 'default': 0x7824c97a}) return self.__field_magic3.getvalue() def __setfield_magic3(self, value): if isinstance(value,UINT): self.__field_magic3=value else: self.__field_magic3=UINT(value,**{'sizeinbytes': 4, 'default': 0x7824c97a}) def __delfield_magic3(self): del self.__field_magic3 magic3=property(__getfield_magic3, __setfield_magic3, __delfield_magic3, "probably the file date (modified)") def __getfield_dunno2(self): try: self.__field_dunno2 except: self.__field_dunno2=UINT(**{'sizeinbytes': 4, 'constant': 0}) return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UINT): self.__field_dunno2=value else: self.__field_dunno2=UINT(value,**{'sizeinbytes': 4, 'constant': 0}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_filename(self): try: self.__field_filename except: self.__field_filename=USTRING(**{'sizeinbytes': 32, 'default': 'body'}) return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'sizeinbytes': 32, 'default': 'body'}) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, None) def __getfield_whoknows(self): try: self.__field_whoknows except: self.__field_whoknows=USTRING(**{'sizeinbytes': 32, 'default': 'identity'}) return self.__field_whoknows.getvalue() def __setfield_whoknows(self, value): if isinstance(value,USTRING): self.__field_whoknows=value else: self.__field_whoknows=USTRING(value,**{'sizeinbytes': 32, 'default': 'identity'}) def __delfield_whoknows(self): del self.__field_whoknows whoknows=property(__getfield_whoknows, __setfield_whoknows, __delfield_whoknows, "set to iso8859_1 in some cases??") def __getfield_mimetype(self): return self.__field_mimetype.getvalue() def __setfield_mimetype(self, value): if isinstance(value,USTRING): self.__field_mimetype=value else: self.__field_mimetype=USTRING(value,**{'sizeinbytes': 32}) def __delfield_mimetype(self): del self.__field_mimetype mimetype=property(__getfield_mimetype, __setfield_mimetype, __delfield_mimetype, None) def __getfield_whoknows2(self): try: self.__field_whoknows2 except: self.__field_whoknows2=USTRING(**{'sizeinbytes': 32, 'default': ""}) return self.__field_whoknows2.getvalue() def __setfield_whoknows2(self, value): if isinstance(value,USTRING): self.__field_whoknows2=value else: self.__field_whoknows2=USTRING(value,**{'sizeinbytes': 32, 'default': ""}) def __delfield_whoknows2(self): del self.__field_whoknows2 whoknows2=property(__getfield_whoknows2, __setfield_whoknows2, __delfield_whoknows2, None) def iscontainer(self): return True def containerelements(self): yield ('totalsize', self.__field_totalsize, "media file size with size of this file (152 bytes) added") yield ('dunno1', self.__field_dunno1, None) yield ('magic1', self.__field_magic1, "probably the file date (created)") yield ('magic2', self.__field_magic2, "probably the file date (accessed)") yield ('magic3', self.__field_magic3, "probably the file date (modified)") yield ('dunno2', self.__field_dunno2, None) yield ('filename', self.__field_filename, None) yield ('whoknows', self.__field_whoknows, "set to iso8859_1 in some cases??") yield ('mimetype', self.__field_mimetype, None) yield ('whoknows2', self.__field_whoknows2, None) class textmemo(BaseProtogenClass): __fields=['text'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemo,self).__init__(**dict) if self.__class__ is textmemo: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemo,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemo,kwargs) if len(args): dict2={'sizeinbytes': 151, 'raiseonunterminatedread': False, 'raiseontruncate': False } dict2.update(kwargs) kwargs=dict2 self.__field_text=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_text.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_text=USTRING(**{'sizeinbytes': 151, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_text.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,USTRING): self.__field_text=value else: self.__field_text=USTRING(value,**{'sizeinbytes': 151, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def iscontainer(self): return True def containerelements(self): yield ('text', self.__field_text, None) class textmemofile(BaseProtogenClass): __fields=['itemcount', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemofile,self).__init__(**dict) if self.__class__ is textmemofile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemofile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemofile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_itemcount.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{'elementclass': textmemo }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_itemcount=UINT(**{'sizeinbytes': 4}) self.__field_itemcount.readfrombuffer(buf) self.__field_items=LIST(**{'elementclass': textmemo }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_itemcount(self): return self.__field_itemcount.getvalue() def __setfield_itemcount(self, value): if isinstance(value,UINT): self.__field_itemcount=value else: self.__field_itemcount=UINT(value,**{'sizeinbytes': 4}) def __delfield_itemcount(self): del self.__field_itemcount itemcount=property(__getfield_itemcount, __setfield_itemcount, __delfield_itemcount, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': textmemo }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': textmemo }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('itemcount', self.__field_itemcount, None) yield ('items', self.__field_items, None) class scheduleexception(BaseProtogenClass): __fields=['pos', 'day', 'month', 'year'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexception,self).__init__(**dict) if self.__class__ is scheduleexception: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexception,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexception,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_day.writetobuffer(buf) self.__field_month.writetobuffer(buf) self.__field_year.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_day=UINT(**{'sizeinbytes': 1}) self.__field_day.readfrombuffer(buf) self.__field_month=UINT(**{'sizeinbytes': 1}) self.__field_month.readfrombuffer(buf) self.__field_year=UINT(**{'sizeinbytes': 2}) self.__field_year.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "Refers to event id (position in schedule file) that this suppresses") def __getfield_day(self): return self.__field_day.getvalue() def __setfield_day(self, value): if isinstance(value,UINT): self.__field_day=value else: self.__field_day=UINT(value,**{'sizeinbytes': 1}) def __delfield_day(self): del self.__field_day day=property(__getfield_day, __setfield_day, __delfield_day, None) def __getfield_month(self): return self.__field_month.getvalue() def __setfield_month(self, value): if isinstance(value,UINT): self.__field_month=value else: self.__field_month=UINT(value,**{'sizeinbytes': 1}) def __delfield_month(self): del self.__field_month month=property(__getfield_month, __setfield_month, __delfield_month, None) def __getfield_year(self): return self.__field_year.getvalue() def __setfield_year(self, value): if isinstance(value,UINT): self.__field_year=value else: self.__field_year=UINT(value,**{'sizeinbytes': 2}) def __delfield_year(self): del self.__field_year year=property(__getfield_year, __setfield_year, __delfield_year, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "Refers to event id (position in schedule file) that this suppresses") yield ('day', self.__field_day, None) yield ('month', self.__field_month, None) yield ('year', self.__field_year, None) class scheduleexceptionfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexceptionfile,self).__init__(**dict) if self.__class__ is scheduleexceptionfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexceptionfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexceptionfile,kwargs) if len(args): dict2={'elementclass': scheduleexception} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': scheduleexception}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class scheduleevent(BaseProtogenClass): __fields=['packet_size', 'pos', 'start', 'end', 'repeat', 'daybitmap', 'pad2', 'alarmminutes', 'alarmhours', 'alarmtype', 'snoozedelay', 'ringtone', 'description', 'unknown1', 'hasvoice', 'voiceid', 'unknown2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleevent,self).__init__(**dict) if self.__class__ is scheduleevent: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleevent,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleevent,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_packet_size except: self.__field_packet_size=UINT(**{ 'constant': 64 }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) self.__field_daybitmap.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad2.writetobuffer(buf) self.__field_alarmminutes.writetobuffer(buf) self.__field_alarmhours.writetobuffer(buf) self.__field_alarmtype.writetobuffer(buf) try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_description.writetobuffer(buf) try: self.__field_unknown1 except: self.__field_unknown1=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_unknown1.writetobuffer(buf) self.__field_hasvoice.writetobuffer(buf) self.__field_voiceid.writetobuffer(buf) try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_unknown2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_start=LGCALDATE(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=LGCALDATE(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_repeat=UINT(**{'sizeinbytes': 1}) self.__field_repeat.readfrombuffer(buf) self.__field_daybitmap=UINT(**{'sizeinbytes': 2}) self.__field_daybitmap.readfrombuffer(buf) self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad2.readfrombuffer(buf) self.__field_alarmminutes=UINT(**{'sizeinbytes': 1}) self.__field_alarmminutes.readfrombuffer(buf) self.__field_alarmhours=UINT(**{'sizeinbytes': 1}) self.__field_alarmhours.readfrombuffer(buf) self.__field_alarmtype=UINT(**{'sizeinbytes': 1}) self.__field_alarmtype.readfrombuffer(buf) self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_description=USTRING(**{'sizeinbytes': 35, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_description.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_unknown1.readfrombuffer(buf) self.__field_hasvoice=UINT(**{'sizeinbytes': 2}) self.__field_hasvoice.readfrombuffer(buf) self.__field_voiceid=UINT(**{'sizeinbytes': 2}) self.__field_voiceid.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_unknown2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_packet_size(self): return self.__field_packet_size.getvalue() def __setfield_packet_size(self, value): if isinstance(value,UINT): self.__field_packet_size=value else: self.__field_packet_size=UINT(value,**{ 'constant': 64 }) def __delfield_packet_size(self): del self.__field_packet_size packet_size=property(__getfield_packet_size, __setfield_packet_size, __delfield_packet_size, "Faster than packetsize()") def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "position within file, used as an event id") def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,LGCALDATE): self.__field_start=value else: self.__field_start=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,LGCALDATE): self.__field_end=value else: self.__field_end=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,UINT): self.__field_repeat=value else: self.__field_repeat=UINT(value,**{'sizeinbytes': 1}) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_daybitmap(self): return self.__field_daybitmap.getvalue() def __setfield_daybitmap(self, value): if isinstance(value,UINT): self.__field_daybitmap=value else: self.__field_daybitmap=UINT(value,**{'sizeinbytes': 2}) def __delfield_daybitmap(self): del self.__field_daybitmap daybitmap=property(__getfield_daybitmap, __setfield_daybitmap, __delfield_daybitmap, "which days a weekly repeat event happens on") def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UINT): self.__field_pad2=value else: self.__field_pad2=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_alarmminutes(self): return self.__field_alarmminutes.getvalue() def __setfield_alarmminutes(self, value): if isinstance(value,UINT): self.__field_alarmminutes=value else: self.__field_alarmminutes=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmminutes(self): del self.__field_alarmminutes alarmminutes=property(__getfield_alarmminutes, __setfield_alarmminutes, __delfield_alarmminutes, "a value of 100 indicates not set") def __getfield_alarmhours(self): return self.__field_alarmhours.getvalue() def __setfield_alarmhours(self, value): if isinstance(value,UINT): self.__field_alarmhours=value else: self.__field_alarmhours=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmhours(self): del self.__field_alarmhours alarmhours=property(__getfield_alarmhours, __setfield_alarmhours, __delfield_alarmhours, "a value of 100 indicates not set") def __getfield_alarmtype(self): return self.__field_alarmtype.getvalue() def __setfield_alarmtype(self, value): if isinstance(value,UINT): self.__field_alarmtype=value else: self.__field_alarmtype=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmtype(self): del self.__field_alarmtype alarmtype=property(__getfield_alarmtype, __setfield_alarmtype, __delfield_alarmtype, "preset alarm reminder type") def __getfield_snoozedelay(self): try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_snoozedelay.getvalue() def __setfield_snoozedelay(self, value): if isinstance(value,UINT): self.__field_snoozedelay=value else: self.__field_snoozedelay=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_snoozedelay(self): del self.__field_snoozedelay snoozedelay=property(__getfield_snoozedelay, __setfield_snoozedelay, __delfield_snoozedelay, "in minutes, not for this phone") def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_description(self): return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,USTRING): self.__field_description=value else: self.__field_description=USTRING(value,**{'sizeinbytes': 35, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def __getfield_unknown1(self): try: self.__field_unknown1 except: self.__field_unknown1=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, "This seems to always be two zeros") def __getfield_hasvoice(self): return self.__field_hasvoice.getvalue() def __setfield_hasvoice(self, value): if isinstance(value,UINT): self.__field_hasvoice=value else: self.__field_hasvoice=UINT(value,**{'sizeinbytes': 2}) def __delfield_hasvoice(self): del self.__field_hasvoice hasvoice=property(__getfield_hasvoice, __setfield_hasvoice, __delfield_hasvoice, "This event has an associated voice memo if 1") def __getfield_voiceid(self): return self.__field_voiceid.getvalue() def __setfield_voiceid(self, value): if isinstance(value,UINT): self.__field_voiceid=value else: self.__field_voiceid=UINT(value,**{'sizeinbytes': 2}) def __delfield_voiceid(self): del self.__field_voiceid voiceid=property(__getfield_voiceid, __setfield_voiceid, __delfield_voiceid, "sch/schexxx.qcp is the voice memo (xxx = voiceid - 0x0f)") def __getfield_unknown2(self): try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, "This seems to always be yet two more zeros") def iscontainer(self): return True def containerelements(self): yield ('packet_size', self.__field_packet_size, "Faster than packetsize()") yield ('pos', self.__field_pos, "position within file, used as an event id") yield ('start', self.__field_start, None) yield ('end', self.__field_end, None) yield ('repeat', self.__field_repeat, None) yield ('daybitmap', self.__field_daybitmap, "which days a weekly repeat event happens on") yield ('pad2', self.__field_pad2, None) yield ('alarmminutes', self.__field_alarmminutes, "a value of 100 indicates not set") yield ('alarmhours', self.__field_alarmhours, "a value of 100 indicates not set") yield ('alarmtype', self.__field_alarmtype, "preset alarm reminder type") yield ('snoozedelay', self.__field_snoozedelay, "in minutes, not for this phone") yield ('ringtone', self.__field_ringtone, None) yield ('description', self.__field_description, None) yield ('unknown1', self.__field_unknown1, "This seems to always be two zeros") yield ('hasvoice', self.__field_hasvoice, "This event has an associated voice memo if 1") yield ('voiceid', self.__field_voiceid, "sch/schexxx.qcp is the voice memo (xxx = voiceid - 0x0f)") yield ('unknown2', self.__field_unknown2, "This seems to always be yet two more zeros") class schedulefile(BaseProtogenClass): __fields=['numactiveitems', 'events'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(schedulefile,self).__init__(**dict) if self.__class__ is schedulefile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(schedulefile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(schedulefile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{'elementclass': scheduleevent}) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('events', self.__field_events, None) class recipient_record(BaseProtogenClass): __fields=['unknown1', 'name', 'number', 'unknown2', 'status', 'time'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(recipient_record,self).__init__(**dict) if self.__class__ is recipient_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(recipient_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(recipient_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_name except: self.__field_name=USTRING(**{'encoding': PHONE_ENCODING, 'default':'', 'raiseonunterminatedread': False}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_time.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UINT(**{'sizeinbytes': 20}) self.__field_unknown1.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49}) self.__field_number.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 24}) self.__field_unknown2.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_time.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 20}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'encoding': PHONE_ENCODING, 'default':'', 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 24}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_time(self): return self.__field_time.getvalue() def __setfield_time(self, value): if isinstance(value,LGCALDATE): self.__field_time=value else: self.__field_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_time(self): del self.__field_time time=property(__getfield_time, __setfield_time, __delfield_time, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('name', self.__field_name, None) yield ('number', self.__field_number, None) yield ('unknown2', self.__field_unknown2, None) yield ('status', self.__field_status, None) yield ('time', self.__field_time, None) class sms_saved(BaseProtogenClass): __fields=['outboxmsg', 'GPStime', 'outbox', 'inbox'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_saved,self).__init__(**dict) if self.__class__ is sms_saved: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_saved,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_saved,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_outboxmsg.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) if self.outboxmsg: self.__field_outbox.writetobuffer(buf) if not self.outboxmsg: self.__field_inbox.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_outboxmsg=UINT(**{'sizeinbytes': 4}) self.__field_outboxmsg.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) if self.outboxmsg: self.__field_outbox=sms_out() self.__field_outbox.readfrombuffer(buf) if not self.outboxmsg: self.__field_inbox=sms_in() self.__field_inbox.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_outboxmsg(self): return self.__field_outboxmsg.getvalue() def __setfield_outboxmsg(self, value): if isinstance(value,UINT): self.__field_outboxmsg=value else: self.__field_outboxmsg=UINT(value,**{'sizeinbytes': 4}) def __delfield_outboxmsg(self): del self.__field_outboxmsg outboxmsg=property(__getfield_outboxmsg, __setfield_outboxmsg, __delfield_outboxmsg, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_outbox(self): return self.__field_outbox.getvalue() def __setfield_outbox(self, value): if isinstance(value,sms_out): self.__field_outbox=value else: self.__field_outbox=sms_out(value,) def __delfield_outbox(self): del self.__field_outbox outbox=property(__getfield_outbox, __setfield_outbox, __delfield_outbox, None) def __getfield_inbox(self): return self.__field_inbox.getvalue() def __setfield_inbox(self, value): if isinstance(value,sms_in): self.__field_inbox=value else: self.__field_inbox=sms_in(value,) def __delfield_inbox(self): del self.__field_inbox inbox=property(__getfield_inbox, __setfield_inbox, __delfield_inbox, None) def iscontainer(self): return True def containerelements(self): yield ('outboxmsg', self.__field_outboxmsg, None) yield ('GPStime', self.__field_GPStime, None) if self.outboxmsg: yield ('outbox', self.__field_outbox, None) if not self.outboxmsg: yield ('inbox', self.__field_inbox, None) class sms_out(BaseProtogenClass): __fields=['index', 'locked', 'unknown1', 'timesent', 'msg', 'unknown2', 'callback', 'recipients'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_out,self).__init__(**dict) if self.__class__ is sms_out: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_out,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_out,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_msg.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_callback.writetobuffer(buf) try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record, 'length': 10}) self.__field_recipients.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 3}) self.__field_unknown1.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_msg=USTRING(**{'sizeinbytes': 500, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_msg.readfrombuffer(buf) self.__field_unknown2=DATA(**{'sizeinbytes': 1250}) self.__field_unknown2.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 16}) self.__field_callback.readfrombuffer(buf) self.__field_recipients=LIST(**{'elementclass': recipient_record, 'length': 10}) self.__field_recipients.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_msg(self): return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{'sizeinbytes': 500, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,DATA): self.__field_unknown2=value else: self.__field_unknown2=DATA(value,**{'sizeinbytes': 1250}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 16}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_recipients(self): try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record, 'length': 10}) return self.__field_recipients.getvalue() def __setfield_recipients(self, value): if isinstance(value,LIST): self.__field_recipients=value else: self.__field_recipients=LIST(value,**{'elementclass': recipient_record, 'length': 10}) def __delfield_recipients(self): del self.__field_recipients recipients=property(__getfield_recipients, __setfield_recipients, __delfield_recipients, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('locked', self.__field_locked, None) yield ('unknown1', self.__field_unknown1, None) yield ('timesent', self.__field_timesent, None) yield ('msg', self.__field_msg, None) yield ('unknown2', self.__field_unknown2, None) yield ('callback', self.__field_callback, None) yield ('recipients', self.__field_recipients, None) class SMSINBOXMSGFRAGMENT(BaseProtogenClass): __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSINBOXMSGFRAGMENT,self).__init__(**dict) if self.__class__ is SMSINBOXMSGFRAGMENT: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSINBOXMSGFRAGMENT,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSINBOXMSGFRAGMENT,kwargs) if len(args): dict2={'elementclass': _gen_p_lglg6190_321, 'length': 181} dict2.update(kwargs) kwargs=dict2 self.__field_msg=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lglg6190_321, 'length': 181}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=LIST(**{'elementclass': _gen_p_lglg6190_321, 'length': 181}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lglg6190_321, 'length': 181}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lglg6190_321, 'length': 181}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class _gen_p_lglg6190_321(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglg6190_321,self).__init__(**dict) if self.__class__ is _gen_p_lglg6190_321: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglg6190_321,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglg6190_321,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class sms_in(BaseProtogenClass): __fields=['unknown1', 'msg_index2', 'unknown2', 'timesent', 'unknown', 'callback_length', 'callback', 'sender_length', 'sender', 'unknown4', 'lg_time', 'GPStime', 'unknown41', 'read', 'unknown5', 'subject', 'unknown6', 'msglength', 'unknown7', 'msg', 'unknown8'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_in,self).__init__(**dict) if self.__class__ is sms_in: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_in,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_in,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_msg_index2.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self.__field_callback_length.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_sender_length.writetobuffer(buf) try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lglg6190_333, 'length': 38}) self.__field_sender.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_lg_time.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_unknown41.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_msglength.writetobuffer(buf) self.__field_unknown7.writetobuffer(buf) self.__field_msg.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UINT(**{'sizeinbytes': 4}) self.__field_unknown1.readfrombuffer(buf) self.__field_msg_index2=UINT(**{'sizeinbytes': 4}) self.__field_msg_index2.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 6}) self.__field_unknown2.readfrombuffer(buf) self.__field_timesent=SMSDATE(**{'sizeinbytes': 6}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown=UINT(**{'sizeinbytes': 3}) self.__field_unknown.readfrombuffer(buf) self.__field_callback_length=UINT(**{'sizeinbytes': 1}) self.__field_callback_length.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 38}) self.__field_callback.readfrombuffer(buf) self.__field_sender_length=UINT(**{'sizeinbytes': 1}) self.__field_sender_length.readfrombuffer(buf) self.__field_sender=LIST(**{'elementclass': _gen_p_lglg6190_333, 'length': 38}) self.__field_sender.readfrombuffer(buf) self.__field_unknown4=DATA(**{'sizeinbytes': 15}) self.__field_unknown4.readfrombuffer(buf) self.__field_lg_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_lg_time.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown41=UINT(**{'sizeinbytes': 2}) self.__field_unknown41.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 2}) self.__field_read.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 9}) self.__field_unknown5.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_subject.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 8}) self.__field_unknown6.readfrombuffer(buf) self.__field_msglength=UINT(**{'sizeinbytes': 2}) self.__field_msglength.readfrombuffer(buf) self.__field_unknown7=UINT(**{'sizeinbytes': 18}) self.__field_unknown7.readfrombuffer(buf) self.__field_msg=USTRING(**{'sizeinbytes': 200, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_msg.readfrombuffer(buf) self.__field_unknown8=DATA() self.__field_unknown8.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_msg_index2(self): return self.__field_msg_index2.getvalue() def __setfield_msg_index2(self, value): if isinstance(value,UINT): self.__field_msg_index2=value else: self.__field_msg_index2=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index2(self): del self.__field_msg_index2 msg_index2=property(__getfield_msg_index2, __setfield_msg_index2, __delfield_msg_index2, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 6}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,SMSDATE): self.__field_timesent=value else: self.__field_timesent=SMSDATE(value,**{'sizeinbytes': 6}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UINT): self.__field_unknown=value else: self.__field_unknown=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def __getfield_callback_length(self): return self.__field_callback_length.getvalue() def __setfield_callback_length(self, value): if isinstance(value,UINT): self.__field_callback_length=value else: self.__field_callback_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_length(self): del self.__field_callback_length callback_length=property(__getfield_callback_length, __setfield_callback_length, __delfield_callback_length, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 38}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_sender_length(self): return self.__field_sender_length.getvalue() def __setfield_sender_length(self, value): if isinstance(value,UINT): self.__field_sender_length=value else: self.__field_sender_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_sender_length(self): del self.__field_sender_length sender_length=property(__getfield_sender_length, __setfield_sender_length, __delfield_sender_length, None) def __getfield_sender(self): try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lglg6190_333, 'length': 38}) return self.__field_sender.getvalue() def __setfield_sender(self, value): if isinstance(value,LIST): self.__field_sender=value else: self.__field_sender=LIST(value,**{'elementclass': _gen_p_lglg6190_333, 'length': 38}) def __delfield_sender(self): del self.__field_sender sender=property(__getfield_sender, __setfield_sender, __delfield_sender, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,DATA): self.__field_unknown4=value else: self.__field_unknown4=DATA(value,**{'sizeinbytes': 15}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_lg_time(self): return self.__field_lg_time.getvalue() def __setfield_lg_time(self, value): if isinstance(value,LGCALDATE): self.__field_lg_time=value else: self.__field_lg_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_lg_time(self): del self.__field_lg_time lg_time=property(__getfield_lg_time, __setfield_lg_time, __delfield_lg_time, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown41(self): return self.__field_unknown41.getvalue() def __setfield_unknown41(self, value): if isinstance(value,UINT): self.__field_unknown41=value else: self.__field_unknown41=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown41(self): del self.__field_unknown41 unknown41=property(__getfield_unknown41, __setfield_unknown41, __delfield_unknown41, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 2}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 9}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 8}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_msglength(self): return self.__field_msglength.getvalue() def __setfield_msglength(self, value): if isinstance(value,UINT): self.__field_msglength=value else: self.__field_msglength=UINT(value,**{'sizeinbytes': 2}) def __delfield_msglength(self): del self.__field_msglength msglength=property(__getfield_msglength, __setfield_msglength, __delfield_msglength, None) def __getfield_unknown7(self): return self.__field_unknown7.getvalue() def __setfield_unknown7(self, value): if isinstance(value,UINT): self.__field_unknown7=value else: self.__field_unknown7=UINT(value,**{'sizeinbytes': 18}) def __delfield_unknown7(self): del self.__field_unknown7 unknown7=property(__getfield_unknown7, __setfield_unknown7, __delfield_unknown7, None) def __getfield_msg(self): return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{'sizeinbytes': 200, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,DATA): self.__field_unknown8=value else: self.__field_unknown8=DATA(value,) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('msg_index2', self.__field_msg_index2, None) yield ('unknown2', self.__field_unknown2, None) yield ('timesent', self.__field_timesent, None) yield ('unknown', self.__field_unknown, None) yield ('callback_length', self.__field_callback_length, None) yield ('callback', self.__field_callback, None) yield ('sender_length', self.__field_sender_length, None) yield ('sender', self.__field_sender, None) yield ('unknown4', self.__field_unknown4, None) yield ('lg_time', self.__field_lg_time, None) yield ('GPStime', self.__field_GPStime, None) yield ('unknown41', self.__field_unknown41, None) yield ('read', self.__field_read, None) yield ('unknown5', self.__field_unknown5, None) yield ('subject', self.__field_subject, None) yield ('unknown6', self.__field_unknown6, None) yield ('msglength', self.__field_msglength, None) yield ('unknown7', self.__field_unknown7, None) yield ('msg', self.__field_msg, None) yield ('unknown8', self.__field_unknown8, None) class _gen_p_lglg6190_333(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglg6190_333,self).__init__(**dict) if self.__class__ is _gen_p_lglg6190_333: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglg6190_333,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglg6190_333,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of senders phone number") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of senders phone number") class sms_quick_text(BaseProtogenClass): __fields=['msgs'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_quick_text,self).__init__(**dict) if self.__class__ is sms_quick_text: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_quick_text,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_quick_text,kwargs) if len(args): dict2={'elementclass': _gen_p_lglg6190_354, } dict2.update(kwargs) kwargs=dict2 self.__field_msgs=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lglg6190_354, }) self.__field_msgs.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msgs=LIST(**{'elementclass': _gen_p_lglg6190_354, }) self.__field_msgs.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lglg6190_354, }) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'elementclass': _gen_p_lglg6190_354, }) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def iscontainer(self): return True def containerelements(self): yield ('msgs', self.__field_msgs, None) class _gen_p_lglg6190_354(BaseProtogenClass): 'Anonymous inner class' __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglg6190_354,self).__init__(**dict) if self.__class__ is _gen_p_lglg6190_354: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglg6190_354,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglg6190_354,kwargs) if len(args): dict2={'encoding': PHONE_ENCODING} dict2.update(kwargs) kwargs=dict2 self.__field_msg=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=USTRING(**{'encoding': PHONE_ENCODING}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{'encoding': PHONE_ENCODING}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) bitpim-1.0.7+dfsg1/src/phones/p_lglg6200.py0000644001616600161660000026130410466234100016362 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG 6200 (Sprint)""" import re from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # very similar to the pm225 from p_lgpm225 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=99 FIRSTSPEEDDIAL=1 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=200 MEMOLENGTH=33 NORINGTONE=0 NOMSGRINGTONE=0 NOWALLPAPER=0 NUMEMAILS=3 NUMPHONENUMBERS=5 SMS_CANNED_MAX_ITEMS=40 SMS_CANNED_MAX_LENGTH=104 SMS_CANNED_FILENAME="sms/canned_msg.dat" SMS_PATTERNS={'Inbox': re.compile(r"^.*/inbox[0-9][0-9][0-9]\.dat$"), 'Sent': re.compile(r"^.*/outbox[0-9][0-9][0-9]\.dat$"), 'Saved': re.compile(r"^.*/sf[0-9][0-9]\.dat$"), } numbertypetab=( 'cell', 'home', 'office', 'fax', 'pager' ) # Text Memo const text_memo_file='sch/memo.dat' content_file_name='ams/contentInfo' content_count_file_name='ams/realContent' media_directory='ams' ringerindex='setas/amsRingerIndex.map' imageindex='setas/amsImageIndex.map' ringerconst=2 imageconst=3 max_ringers=100 max_images=100 phonebook_media='pim/pbookcontact.dat' # Calendar parameters NUMCALENDARENTRIES=300 # ?? for VX4400 CAL_REP_NONE=0x10 CAL_REP_DAILY=0x11 CAL_REP_MONFRI=0x12 CAL_REP_WEEKLY=0x13 CAL_REP_MONTHLY=0x14 CAL_REP_YEARLY=0x15 CAL_DOW_SUN=0x0800 CAL_DOW_MON=0x0400 CAL_DOW_TUE=0x0200 CAL_DOW_WED=0x0100 CAL_DOW_THU=0x0080 CAL_DOW_FRI=0x0040 CAL_DOW_SAT=0x0020 CAL_DOW_EXCEPTIONS=0x0010 CAL_REMINDER_NONE=0 CAL_REMINDER_ONTIME=1 CAL_REMINDER_5MIN=2 CAL_REMINDER_10MIN=3 CAL_REMINDER_1HOUR=4 CAL_REMINDER_1DAY=5 CAL_REMINDER_2DAYS=6 CAL_REPEAT_DATE=(2100, 12, 31) cal_dir='sch' cal_data_file_name='sch/schedule.dat' cal_exception_file_name='sch/schexception.dat' cal_has_voice_id=False PHONE_ENCODING='iso8859_1' class pbreadentryresponse(BaseProtogenClass): "Results of reading one entry" __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbreadentryresponse,self).__init__(**dict) if self.__class__ is pbreadentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbreadentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbreadentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbupdateentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbupdateentryrequest,self).__init__(**dict) if self.__class__ is pbupdateentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbupdateentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbupdateentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x04, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbappendentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbappendentryrequest,self).__init__(**dict) if self.__class__ is pbappendentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbappendentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbappendentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x03, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbentry(BaseProtogenClass): __fields=['serial1', 'entrysize', 'entrynumber', 'unknown1', 'name', 'group', 'unknown2', 'secret', 'memo', 'emails', 'url', 'numberspeeds', 'numbertypes', 'numbers', 'EndOfRecord', 'ringtone', 'wallpaper'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'default': 0x600}) try: self.__field_wallpaper except: self.__field_wallpaper=UINT(**{'default': 0x100}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_serial1.writetobuffer(buf) try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x026e}) self.__field_entrysize.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) try: self.__field_unknown1 except: self.__field_unknown1=UINT(**{'sizeinbytes': 2, 'default': 0}) self.__field_unknown1.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_group.writetobuffer(buf) try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 2, 'default': 0x10}) self.__field_unknown2.writetobuffer(buf) self.__field_secret.writetobuffer(buf) self.__field_memo.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lglg6200_129, 'length': NUMEMAILS}) self.__field_emails.writetobuffer(buf) self.__field_url.writetobuffer(buf) try: self.__field_numberspeeds except: self.__field_numberspeeds=LIST(**{'elementclass': _gen_p_lglg6200_132, 'length': NUMPHONENUMBERS}) self.__field_numberspeeds.writetobuffer(buf) try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lglg6200_134, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lglg6200_136, 'length': NUMPHONENUMBERS}) self.__field_numbers.writetobuffer(buf) try: self.__field_EndOfRecord except: self.__field_EndOfRecord=UINT(**{'sizeinbytes': 2, 'constant': 0x0278}) self.__field_EndOfRecord.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x026e}) self.__field_entrysize.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 2}) self.__field_entrynumber.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 2, 'default': 0}) self.__field_unknown1.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 2}) self.__field_group.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2, 'default': 0x10}) self.__field_unknown2.readfrombuffer(buf) self.__field_secret=BOOL(**{'sizeinbytes': 1}) self.__field_secret.readfrombuffer(buf) self.__field_memo=USTRING(**{'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) self.__field_memo.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_lglg6200_129, 'length': NUMEMAILS}) self.__field_emails.readfrombuffer(buf) self.__field_url=USTRING(**{'sizeinbytes': 73, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_url.readfrombuffer(buf) self.__field_numberspeeds=LIST(**{'elementclass': _gen_p_lglg6200_132, 'length': NUMPHONENUMBERS}) self.__field_numberspeeds.readfrombuffer(buf) self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lglg6200_134, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.readfrombuffer(buf) self.__field_numbers=LIST(**{'elementclass': _gen_p_lglg6200_136, 'length': NUMPHONENUMBERS}) self.__field_numbers.readfrombuffer(buf) self.__field_EndOfRecord=UINT(**{'sizeinbytes': 2, 'constant': 0x0278}) self.__field_EndOfRecord.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_entrysize(self): try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x026e}) return self.__field_entrysize.getvalue() def __setfield_entrysize(self, value): if isinstance(value,UINT): self.__field_entrysize=value else: self.__field_entrysize=UINT(value,**{'sizeinbytes': 2, 'constant': 0x026e}) def __delfield_entrysize(self): del self.__field_entrysize entrysize=property(__getfield_entrysize, __setfield_entrysize, __delfield_entrysize, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 2}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_unknown1(self): try: self.__field_unknown1 except: self.__field_unknown1=UINT(**{'sizeinbytes': 2, 'default': 0}) return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 2, 'default': 0}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 2}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_unknown2(self): try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 2, 'default': 0x10}) return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2, 'default': 0x10}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_secret(self): return self.__field_secret.getvalue() def __setfield_secret(self, value): if isinstance(value,BOOL): self.__field_secret=value else: self.__field_secret=BOOL(value,**{'sizeinbytes': 1}) def __delfield_secret(self): del self.__field_secret secret=property(__getfield_secret, __setfield_secret, __delfield_secret, None) def __getfield_memo(self): return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,USTRING): self.__field_memo=value else: self.__field_memo=USTRING(value,**{'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lglg6200_129, 'length': NUMEMAILS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_lglg6200_129, 'length': NUMEMAILS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, None) def __getfield_url(self): return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,USTRING): self.__field_url=value else: self.__field_url=USTRING(value,**{'sizeinbytes': 73, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_numberspeeds(self): try: self.__field_numberspeeds except: self.__field_numberspeeds=LIST(**{'elementclass': _gen_p_lglg6200_132, 'length': NUMPHONENUMBERS}) return self.__field_numberspeeds.getvalue() def __setfield_numberspeeds(self, value): if isinstance(value,LIST): self.__field_numberspeeds=value else: self.__field_numberspeeds=LIST(value,**{'elementclass': _gen_p_lglg6200_132, 'length': NUMPHONENUMBERS}) def __delfield_numberspeeds(self): del self.__field_numberspeeds numberspeeds=property(__getfield_numberspeeds, __setfield_numberspeeds, __delfield_numberspeeds, None) def __getfield_numbertypes(self): try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lglg6200_134, 'length': NUMPHONENUMBERS}) return self.__field_numbertypes.getvalue() def __setfield_numbertypes(self, value): if isinstance(value,LIST): self.__field_numbertypes=value else: self.__field_numbertypes=LIST(value,**{'elementclass': _gen_p_lglg6200_134, 'length': NUMPHONENUMBERS}) def __delfield_numbertypes(self): del self.__field_numbertypes numbertypes=property(__getfield_numbertypes, __setfield_numbertypes, __delfield_numbertypes, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lglg6200_136, 'length': NUMPHONENUMBERS}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'elementclass': _gen_p_lglg6200_136, 'length': NUMPHONENUMBERS}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_EndOfRecord(self): try: self.__field_EndOfRecord except: self.__field_EndOfRecord=UINT(**{'sizeinbytes': 2, 'constant': 0x0278}) return self.__field_EndOfRecord.getvalue() def __setfield_EndOfRecord(self, value): if isinstance(value,UINT): self.__field_EndOfRecord=value else: self.__field_EndOfRecord=UINT(value,**{'sizeinbytes': 2, 'constant': 0x0278}) def __delfield_EndOfRecord(self): del self.__field_EndOfRecord EndOfRecord=property(__getfield_EndOfRecord, __setfield_EndOfRecord, __delfield_EndOfRecord, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'default': 0x600}) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'default': 0x600}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_wallpaper(self): try: self.__field_wallpaper except: self.__field_wallpaper=UINT(**{'default': 0x100}) return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'default': 0x100}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def iscontainer(self): return True def containerelements(self): yield ('serial1', self.__field_serial1, None) yield ('entrysize', self.__field_entrysize, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('unknown1', self.__field_unknown1, None) yield ('name', self.__field_name, None) yield ('group', self.__field_group, None) yield ('unknown2', self.__field_unknown2, None) yield ('secret', self.__field_secret, None) yield ('memo', self.__field_memo, None) yield ('emails', self.__field_emails, None) yield ('url', self.__field_url, None) yield ('numberspeeds', self.__field_numberspeeds, None) yield ('numbertypes', self.__field_numbertypes, None) yield ('numbers', self.__field_numbers, None) yield ('EndOfRecord', self.__field_EndOfRecord, None) yield ('ringtone', self.__field_ringtone, None) yield ('wallpaper', self.__field_wallpaper, None) class _gen_p_lglg6200_129(BaseProtogenClass): 'Anonymous inner class' __fields=['email'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglg6200_129,self).__init__(**dict) if self.__class__ is _gen_p_lglg6200_129: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglg6200_129,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglg6200_129,kwargs) if len(args): dict2={'sizeinbytes': 73, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_email=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_email.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_email=USTRING(**{'sizeinbytes': 73, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_email.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 73, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def iscontainer(self): return True def containerelements(self): yield ('email', self.__field_email, None) class _gen_p_lglg6200_132(BaseProtogenClass): 'Anonymous inner class' __fields=['numberspeed'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglg6200_132,self).__init__(**dict) if self.__class__ is _gen_p_lglg6200_132: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglg6200_132,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglg6200_132,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_numberspeed=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numberspeed.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numberspeed=UINT(**{'sizeinbytes': 1}) self.__field_numberspeed.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numberspeed(self): return self.__field_numberspeed.getvalue() def __setfield_numberspeed(self, value): if isinstance(value,UINT): self.__field_numberspeed=value else: self.__field_numberspeed=UINT(value,**{'sizeinbytes': 1}) def __delfield_numberspeed(self): del self.__field_numberspeed numberspeed=property(__getfield_numberspeed, __setfield_numberspeed, __delfield_numberspeed, None) def iscontainer(self): return True def containerelements(self): yield ('numberspeed', self.__field_numberspeed, None) class _gen_p_lglg6200_134(BaseProtogenClass): 'Anonymous inner class' __fields=['numbertype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglg6200_134,self).__init__(**dict) if self.__class__ is _gen_p_lglg6200_134: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglg6200_134,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglg6200_134,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_numbertype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numbertype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numbertype=UINT(**{'sizeinbytes': 1}) self.__field_numbertype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numbertype(self): return self.__field_numbertype.getvalue() def __setfield_numbertype(self, value): if isinstance(value,UINT): self.__field_numbertype=value else: self.__field_numbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_numbertype(self): del self.__field_numbertype numbertype=property(__getfield_numbertype, __setfield_numbertype, __delfield_numbertype, None) def iscontainer(self): return True def containerelements(self): yield ('numbertype', self.__field_numbertype, None) class _gen_p_lglg6200_136(BaseProtogenClass): 'Anonymous inner class' __fields=['number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglg6200_136,self).__init__(**dict) if self.__class__ is _gen_p_lglg6200_136: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglg6200_136,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglg6200_136,kwargs) if len(args): dict2={'sizeinbytes': 49, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_number=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) class pbgroup(BaseProtogenClass): "A single group" __fields=['group_id', 'rectype', 'unknown2', 'unknown3', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroup,self).__init__(**dict) if self.__class__ is pbgroup: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroup,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroup,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_group_id.writetobuffer(buf) self.__field_rectype.writetobuffer(buf) try: self.__field_unknown2 except: self.__field_unknown2=UNKNOWN(**{'sizeinbytes': 3}) self.__field_unknown2.writetobuffer(buf) try: self.__field_unknown3 except: self.__field_unknown3=UNKNOWN(**{'sizeinbytes': 3}) self.__field_unknown3.writetobuffer(buf) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_group_id=UINT(**{'sizeinbytes': 1}) self.__field_group_id.readfrombuffer(buf) self.__field_rectype=UINT(**{'sizeinbytes': 1}) self.__field_rectype.readfrombuffer(buf) self.__field_unknown2=UNKNOWN(**{'sizeinbytes': 3}) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=UNKNOWN(**{'sizeinbytes': 3}) self.__field_unknown3.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_group_id(self): return self.__field_group_id.getvalue() def __setfield_group_id(self, value): if isinstance(value,UINT): self.__field_group_id=value else: self.__field_group_id=UINT(value,**{'sizeinbytes': 1}) def __delfield_group_id(self): del self.__field_group_id group_id=property(__getfield_group_id, __setfield_group_id, __delfield_group_id, None) def __getfield_rectype(self): return self.__field_rectype.getvalue() def __setfield_rectype(self, value): if isinstance(value,UINT): self.__field_rectype=value else: self.__field_rectype=UINT(value,**{'sizeinbytes': 1}) def __delfield_rectype(self): del self.__field_rectype rectype=property(__getfield_rectype, __setfield_rectype, __delfield_rectype, None) def __getfield_unknown2(self): try: self.__field_unknown2 except: self.__field_unknown2=UNKNOWN(**{'sizeinbytes': 3}) return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UNKNOWN): self.__field_unknown2=value else: self.__field_unknown2=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): try: self.__field_unknown3 except: self.__field_unknown3=UNKNOWN(**{'sizeinbytes': 3}) return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UNKNOWN): self.__field_unknown3=value else: self.__field_unknown3=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('group_id', self.__field_group_id, None) yield ('rectype', self.__field_rectype, None) yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) yield ('name', self.__field_name, None) class pbgroups(BaseProtogenClass): "Phonebook groups" __fields=['groups'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroups,self).__init__(**dict) if self.__class__ is pbgroups: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroups,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroups,kwargs) if len(args): dict2={'elementclass': pbgroup} dict2.update(kwargs) kwargs=dict2 self.__field_groups=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_groups(self): try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) return self.__field_groups.getvalue() def __setfield_groups(self, value): if isinstance(value,LIST): self.__field_groups=value else: self.__field_groups=LIST(value,**{'elementclass': pbgroup}) def __delfield_groups(self): del self.__field_groups groups=property(__getfield_groups, __setfield_groups, __delfield_groups, None) def iscontainer(self): return True def containerelements(self): yield ('groups', self.__field_groups, None) class pb_contact_media_entry(BaseProtogenClass): """Reads the wallpaper/ringer info for each contact on the phone""" __fields=['index', 'dont_care1', 'ringer', 'name', 'dont_care2', 'wallpaper', 'dont_care3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pb_contact_media_entry,self).__init__(**dict) if self.__class__ is pb_contact_media_entry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pb_contact_media_entry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pb_contact_media_entry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_dont_care1.writetobuffer(buf) self.__field_ringer.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_dont_care2.writetobuffer(buf) self.__field_wallpaper.writetobuffer(buf) self.__field_dont_care3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self.__field_dont_care1=DATA(**{'sizeinbytes': 18}) self.__field_dont_care1.readfrombuffer(buf) self.__field_ringer=UINT(**{'sizeinbytes': 2}) self.__field_ringer.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING}) self.__field_name.readfrombuffer(buf) self.__field_dont_care2=DATA(**{'sizeinbytes': 182}) self.__field_dont_care2.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 2}) self.__field_wallpaper.readfrombuffer(buf) self.__field_dont_care3=DATA(**{'sizeinbytes': 4}) self.__field_dont_care3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_dont_care1(self): return self.__field_dont_care1.getvalue() def __setfield_dont_care1(self, value): if isinstance(value,DATA): self.__field_dont_care1=value else: self.__field_dont_care1=DATA(value,**{'sizeinbytes': 18}) def __delfield_dont_care1(self): del self.__field_dont_care1 dont_care1=property(__getfield_dont_care1, __setfield_dont_care1, __delfield_dont_care1, None) def __getfield_ringer(self): return self.__field_ringer.getvalue() def __setfield_ringer(self, value): if isinstance(value,UINT): self.__field_ringer=value else: self.__field_ringer=UINT(value,**{'sizeinbytes': 2}) def __delfield_ringer(self): del self.__field_ringer ringer=property(__getfield_ringer, __setfield_ringer, __delfield_ringer, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_dont_care2(self): return self.__field_dont_care2.getvalue() def __setfield_dont_care2(self, value): if isinstance(value,DATA): self.__field_dont_care2=value else: self.__field_dont_care2=DATA(value,**{'sizeinbytes': 182}) def __delfield_dont_care2(self): del self.__field_dont_care2 dont_care2=property(__getfield_dont_care2, __setfield_dont_care2, __delfield_dont_care2, None) def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 2}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_dont_care3(self): return self.__field_dont_care3.getvalue() def __setfield_dont_care3(self, value): if isinstance(value,DATA): self.__field_dont_care3=value else: self.__field_dont_care3=DATA(value,**{'sizeinbytes': 4}) def __delfield_dont_care3(self): del self.__field_dont_care3 dont_care3=property(__getfield_dont_care3, __setfield_dont_care3, __delfield_dont_care3, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('dont_care1', self.__field_dont_care1, None) yield ('ringer', self.__field_ringer, None) yield ('name', self.__field_name, None) yield ('dont_care2', self.__field_dont_care2, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('dont_care3', self.__field_dont_care3, None) class pb_contact_media_file(BaseProtogenClass): __fields=['contacts'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pb_contact_media_file,self).__init__(**dict) if self.__class__ is pb_contact_media_file: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pb_contact_media_file,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pb_contact_media_file,kwargs) if len(args): dict2={'elementclass': pb_contact_media_entry} dict2.update(kwargs) kwargs=dict2 self.__field_contacts=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_contacts except: self.__field_contacts=LIST(**{'elementclass': pb_contact_media_entry}) self.__field_contacts.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_contacts=LIST(**{'elementclass': pb_contact_media_entry}) self.__field_contacts.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_contacts(self): try: self.__field_contacts except: self.__field_contacts=LIST(**{'elementclass': pb_contact_media_entry}) return self.__field_contacts.getvalue() def __setfield_contacts(self, value): if isinstance(value,LIST): self.__field_contacts=value else: self.__field_contacts=LIST(value,**{'elementclass': pb_contact_media_entry}) def __delfield_contacts(self): del self.__field_contacts contacts=property(__getfield_contacts, __setfield_contacts, __delfield_contacts, None) def iscontainer(self): return True def containerelements(self): yield ('contacts', self.__field_contacts, None) class indexentry(BaseProtogenClass): __fields=['index', 'const', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_const.writetobuffer(buf) try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 80, 'default': ""}) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 1}) self.__field_index.readfrombuffer(buf) self.__field_const=UINT(**{'sizeinbytes': 1}) self.__field_const.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 80, 'default': ""}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 1}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_const(self): return self.__field_const.getvalue() def __setfield_const(self, value): if isinstance(value,UINT): self.__field_const=value else: self.__field_const=UINT(value,**{'sizeinbytes': 1}) def __delfield_const(self): del self.__field_const const=property(__getfield_const, __setfield_const, __delfield_const, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 80, 'default': ""}) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 80, 'default': ""}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('const', self.__field_const, None) yield ('name', self.__field_name, None) class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['numactiveitems', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('items', self.__field_items, None) class content_entry(BaseProtogenClass): __fields=['type', 'index1', 'name1', 'unknown1', 'unknown2', 'mime_type', 'content_type', 'url', 'unknown_int1', 'unknown3', 'unknown_int2', 'unknown4', 'unknown5', 'size', 'location_maybe', 'index2', 'name2', 'unknown6'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(content_entry,self).__init__(**dict) if self.__class__ is content_entry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(content_entry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(content_entry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_type.writetobuffer(buf) if self.type=='!C': self.__field_index1.writetobuffer(buf) self.__field_name1.writetobuffer(buf) try: self.__field_unknown1 except: self.__field_unknown1=USTRING(**{'terminator': 0xA, 'default': '-1'}) self.__field_unknown1.writetobuffer(buf) try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 8, 'default' :0}) self.__field_unknown2.writetobuffer(buf) self.__field_mime_type.writetobuffer(buf) self.__field_content_type.writetobuffer(buf) try: self.__field_url except: self.__field_url=USTRING(**{'terminator': 0xA, 'default':'bitpim.org'}) self.__field_url.writetobuffer(buf) try: self.__field_unknown_int1 except: self.__field_unknown_int1=UINT(**{'sizeinbytes': 2, 'default':0x08AA}) self.__field_unknown_int1.writetobuffer(buf) try: self.__field_unknown3 except: self.__field_unknown3=USTRING(**{'terminator': 0xA, 'default':''}) self.__field_unknown3.writetobuffer(buf) try: self.__field_unknown_int2 except: self.__field_unknown_int2=UINT(**{'sizeinbytes': 2, 'default':0x08AA}) self.__field_unknown_int2.writetobuffer(buf) try: self.__field_unknown4 except: self.__field_unknown4=USTRING(**{'terminator': 0xA, 'default':''}) self.__field_unknown4.writetobuffer(buf) try: self.__field_unknown5 except: self.__field_unknown5=USTRING(**{'terminator': 0xA, 'default':'0'}) self.__field_unknown5.writetobuffer(buf) self.__field_size.writetobuffer(buf) if self.type=='!E': try: self.__field_location_maybe except: self.__field_location_maybe=USTRING(**{'terminator': 0xA, 'default':'ams:'}) self.__field_location_maybe.writetobuffer(buf) self.__field_index2.writetobuffer(buf) self.__field_name2.writetobuffer(buf) try: self.__field_unknown6 except: self.__field_unknown6=USTRING(**{'terminator': 0xA, 'default':''}) self.__field_unknown6.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_type=USTRING(**{'sizeinbytes': 3, 'terminator': 0xA}) self.__field_type.readfrombuffer(buf) if self.type=='!C': self.__field_index1=USTRING(**{'terminator': 0xA}) self.__field_index1.readfrombuffer(buf) self.__field_name1=USTRING(**{'terminator': 0xA}) self.__field_name1.readfrombuffer(buf) self.__field_unknown1=USTRING(**{'terminator': 0xA, 'default': '-1'}) self.__field_unknown1.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 8, 'default' :0}) self.__field_unknown2.readfrombuffer(buf) self.__field_mime_type=USTRING(**{'terminator': 0xA}) self.__field_mime_type.readfrombuffer(buf) self.__field_content_type=USTRING(**{'terminator': 0xA}) self.__field_content_type.readfrombuffer(buf) self.__field_url=USTRING(**{'terminator': 0xA, 'default':'bitpim.org'}) self.__field_url.readfrombuffer(buf) self.__field_unknown_int1=UINT(**{'sizeinbytes': 2, 'default':0x08AA}) self.__field_unknown_int1.readfrombuffer(buf) self.__field_unknown3=USTRING(**{'terminator': 0xA, 'default':''}) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown_int2=UINT(**{'sizeinbytes': 2, 'default':0x08AA}) self.__field_unknown_int2.readfrombuffer(buf) self.__field_unknown4=USTRING(**{'terminator': 0xA, 'default':''}) self.__field_unknown4.readfrombuffer(buf) self.__field_unknown5=USTRING(**{'terminator': 0xA, 'default':'0'}) self.__field_unknown5.readfrombuffer(buf) self.__field_size=USTRING(**{'terminator': 0xA}) self.__field_size.readfrombuffer(buf) if self.type=='!E': self.__field_location_maybe=USTRING(**{'terminator': 0xA, 'default':'ams:'}) self.__field_location_maybe.readfrombuffer(buf) self.__field_index2=USTRING(**{'terminator': 0xA}) self.__field_index2.readfrombuffer(buf) self.__field_name2=USTRING(**{'terminator': 0xA}) self.__field_name2.readfrombuffer(buf) self.__field_unknown6=USTRING(**{'terminator': 0xA, 'default':''}) self.__field_unknown6.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_type(self): return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,USTRING): self.__field_type=value else: self.__field_type=USTRING(value,**{'sizeinbytes': 3, 'terminator': 0xA}) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, None) def __getfield_index1(self): return self.__field_index1.getvalue() def __setfield_index1(self, value): if isinstance(value,USTRING): self.__field_index1=value else: self.__field_index1=USTRING(value,**{'terminator': 0xA}) def __delfield_index1(self): del self.__field_index1 index1=property(__getfield_index1, __setfield_index1, __delfield_index1, None) def __getfield_name1(self): return self.__field_name1.getvalue() def __setfield_name1(self, value): if isinstance(value,USTRING): self.__field_name1=value else: self.__field_name1=USTRING(value,**{'terminator': 0xA}) def __delfield_name1(self): del self.__field_name1 name1=property(__getfield_name1, __setfield_name1, __delfield_name1, None) def __getfield_unknown1(self): try: self.__field_unknown1 except: self.__field_unknown1=USTRING(**{'terminator': 0xA, 'default': '-1'}) return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,USTRING): self.__field_unknown1=value else: self.__field_unknown1=USTRING(value,**{'terminator': 0xA, 'default': '-1'}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_unknown2(self): try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 8, 'default' :0}) return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 8, 'default' :0}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_mime_type(self): return self.__field_mime_type.getvalue() def __setfield_mime_type(self, value): if isinstance(value,USTRING): self.__field_mime_type=value else: self.__field_mime_type=USTRING(value,**{'terminator': 0xA}) def __delfield_mime_type(self): del self.__field_mime_type mime_type=property(__getfield_mime_type, __setfield_mime_type, __delfield_mime_type, None) def __getfield_content_type(self): return self.__field_content_type.getvalue() def __setfield_content_type(self, value): if isinstance(value,USTRING): self.__field_content_type=value else: self.__field_content_type=USTRING(value,**{'terminator': 0xA}) def __delfield_content_type(self): del self.__field_content_type content_type=property(__getfield_content_type, __setfield_content_type, __delfield_content_type, None) def __getfield_url(self): try: self.__field_url except: self.__field_url=USTRING(**{'terminator': 0xA, 'default':'bitpim.org'}) return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,USTRING): self.__field_url=value else: self.__field_url=USTRING(value,**{'terminator': 0xA, 'default':'bitpim.org'}) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_unknown_int1(self): try: self.__field_unknown_int1 except: self.__field_unknown_int1=UINT(**{'sizeinbytes': 2, 'default':0x08AA}) return self.__field_unknown_int1.getvalue() def __setfield_unknown_int1(self, value): if isinstance(value,UINT): self.__field_unknown_int1=value else: self.__field_unknown_int1=UINT(value,**{'sizeinbytes': 2, 'default':0x08AA}) def __delfield_unknown_int1(self): del self.__field_unknown_int1 unknown_int1=property(__getfield_unknown_int1, __setfield_unknown_int1, __delfield_unknown_int1, None) def __getfield_unknown3(self): try: self.__field_unknown3 except: self.__field_unknown3=USTRING(**{'terminator': 0xA, 'default':''}) return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,USTRING): self.__field_unknown3=value else: self.__field_unknown3=USTRING(value,**{'terminator': 0xA, 'default':''}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown_int2(self): try: self.__field_unknown_int2 except: self.__field_unknown_int2=UINT(**{'sizeinbytes': 2, 'default':0x08AA}) return self.__field_unknown_int2.getvalue() def __setfield_unknown_int2(self, value): if isinstance(value,UINT): self.__field_unknown_int2=value else: self.__field_unknown_int2=UINT(value,**{'sizeinbytes': 2, 'default':0x08AA}) def __delfield_unknown_int2(self): del self.__field_unknown_int2 unknown_int2=property(__getfield_unknown_int2, __setfield_unknown_int2, __delfield_unknown_int2, None) def __getfield_unknown4(self): try: self.__field_unknown4 except: self.__field_unknown4=USTRING(**{'terminator': 0xA, 'default':''}) return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,USTRING): self.__field_unknown4=value else: self.__field_unknown4=USTRING(value,**{'terminator': 0xA, 'default':''}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_unknown5(self): try: self.__field_unknown5 except: self.__field_unknown5=USTRING(**{'terminator': 0xA, 'default':'0'}) return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,USTRING): self.__field_unknown5=value else: self.__field_unknown5=USTRING(value,**{'terminator': 0xA, 'default':'0'}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_size(self): return self.__field_size.getvalue() def __setfield_size(self, value): if isinstance(value,USTRING): self.__field_size=value else: self.__field_size=USTRING(value,**{'terminator': 0xA}) def __delfield_size(self): del self.__field_size size=property(__getfield_size, __setfield_size, __delfield_size, None) def __getfield_location_maybe(self): try: self.__field_location_maybe except: self.__field_location_maybe=USTRING(**{'terminator': 0xA, 'default':'ams:'}) return self.__field_location_maybe.getvalue() def __setfield_location_maybe(self, value): if isinstance(value,USTRING): self.__field_location_maybe=value else: self.__field_location_maybe=USTRING(value,**{'terminator': 0xA, 'default':'ams:'}) def __delfield_location_maybe(self): del self.__field_location_maybe location_maybe=property(__getfield_location_maybe, __setfield_location_maybe, __delfield_location_maybe, None) def __getfield_index2(self): return self.__field_index2.getvalue() def __setfield_index2(self, value): if isinstance(value,USTRING): self.__field_index2=value else: self.__field_index2=USTRING(value,**{'terminator': 0xA}) def __delfield_index2(self): del self.__field_index2 index2=property(__getfield_index2, __setfield_index2, __delfield_index2, None) def __getfield_name2(self): return self.__field_name2.getvalue() def __setfield_name2(self, value): if isinstance(value,USTRING): self.__field_name2=value else: self.__field_name2=USTRING(value,**{'terminator': 0xA}) def __delfield_name2(self): del self.__field_name2 name2=property(__getfield_name2, __setfield_name2, __delfield_name2, None) def __getfield_unknown6(self): try: self.__field_unknown6 except: self.__field_unknown6=USTRING(**{'terminator': 0xA, 'default':''}) return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,USTRING): self.__field_unknown6=value else: self.__field_unknown6=USTRING(value,**{'terminator': 0xA, 'default':''}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def iscontainer(self): return True def containerelements(self): yield ('type', self.__field_type, None) if self.type=='!C': yield ('index1', self.__field_index1, None) yield ('name1', self.__field_name1, None) yield ('unknown1', self.__field_unknown1, None) yield ('unknown2', self.__field_unknown2, None) yield ('mime_type', self.__field_mime_type, None) yield ('content_type', self.__field_content_type, None) yield ('url', self.__field_url, None) yield ('unknown_int1', self.__field_unknown_int1, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown_int2', self.__field_unknown_int2, None) yield ('unknown4', self.__field_unknown4, None) yield ('unknown5', self.__field_unknown5, None) yield ('size', self.__field_size, None) if self.type=='!E': yield ('location_maybe', self.__field_location_maybe, None) yield ('index2', self.__field_index2, None) yield ('name2', self.__field_name2, None) yield ('unknown6', self.__field_unknown6, None) class content_file(BaseProtogenClass): "Used to store all content on the phone, apps, ringers and images (with the exception of the camera)" __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(content_file,self).__init__(**dict) if self.__class__ is content_file: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(content_file,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(content_file,kwargs) if len(args): dict2={'elementclass': content_entry, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': content_entry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': content_entry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': content_entry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': content_entry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class content_count(BaseProtogenClass): "Stores the number of items in the content file" __fields=['count'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(content_count,self).__init__(**dict) if self.__class__ is content_count: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(content_count,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(content_count,kwargs) if len(args): dict2={'terminator': None} dict2.update(kwargs) kwargs=dict2 self.__field_count=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_count.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_count=USTRING(**{'terminator': None}) self.__field_count.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_count(self): return self.__field_count.getvalue() def __setfield_count(self, value): if isinstance(value,USTRING): self.__field_count=value else: self.__field_count=USTRING(value,**{'terminator': None}) def __delfield_count(self): del self.__field_count count=property(__getfield_count, __setfield_count, __delfield_count, None) def iscontainer(self): return True def containerelements(self): yield ('count', self.__field_count, None) class textmemo(BaseProtogenClass): __fields=['text'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemo,self).__init__(**dict) if self.__class__ is textmemo: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemo,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemo,kwargs) if len(args): dict2={'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } dict2.update(kwargs) kwargs=dict2 self.__field_text=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_text.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_text=USTRING(**{'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_text.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,USTRING): self.__field_text=value else: self.__field_text=USTRING(value,**{'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def iscontainer(self): return True def containerelements(self): yield ('text', self.__field_text, None) class textmemofile(BaseProtogenClass): __fields=['itemcount', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemofile,self).__init__(**dict) if self.__class__ is textmemofile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemofile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemofile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_itemcount.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_itemcount=UINT(**{'sizeinbytes': 4}) self.__field_itemcount.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_itemcount(self): return self.__field_itemcount.getvalue() def __setfield_itemcount(self, value): if isinstance(value,UINT): self.__field_itemcount=value else: self.__field_itemcount=UINT(value,**{'sizeinbytes': 4}) def __delfield_itemcount(self): del self.__field_itemcount itemcount=property(__getfield_itemcount, __setfield_itemcount, __delfield_itemcount, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': textmemo }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('itemcount', self.__field_itemcount, None) yield ('items', self.__field_items, None) bitpim-1.0.7+dfsg1/src/phones/p_sanyo8400.py0000644001616600161660000000143711022657227016601 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Sanyo Katana (SCP-6600)""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * from p_sanyo4930 import * from p_sanyo6600 import * from p_sanyo7050 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMPHONEBOOKENTRIES=500 MAXNUMBERS=700 MAXEMAILS=1000 MAXURLS=500 MAXMEMOS=500 MAXADDRESSES=500 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 MAXNUMBERLEN=32 MAXEMAILLEN=96 MAXURLLEN=96 MAXMEMOLEN=96 HASRINGPICBUF=0 NUMGROUPS=20 NUMPHONENUMBERS=7 NUMEMAILS=2 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=9 bitpim-1.0.7+dfsg1/src/phones/p_lgvx6000.py0000644001616600161660000036455010466234100016422 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VX6000""" from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx4400 except as noted # below from p_lgvx4400 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=500 MAXCALENDARDESCRIPTION=38 # Calendar parameters NUMCALENDARENTRIES=300 CAL_REP_NONE=0x10 CAL_REP_DAILY=0x11 CAL_REP_MONFRI=0x12 CAL_REP_WEEKLY=0x13 CAL_REP_MONTHLY=0x14 CAL_REP_YEARLY=0x15 CAL_DOW_SUN=0x0800 CAL_DOW_MON=0x0400 CAL_DOW_TUE=0x0200 CAL_DOW_WED=0x0100 CAL_DOW_THU=0x0080 CAL_DOW_FRI=0x0040 CAL_DOW_SAT=0x0020 CAL_DOW_EXCEPTIONS=0x0010 CAL_REMINDER_NONE=0 CAL_REMINDER_ONTIME=1 CAL_REMINDER_5MIN=2 CAL_REMINDER_10MIN=3 CAL_REMINDER_1HOUR=4 CAL_REMINDER_1DAY=5 CAL_REMINDER_2DAYS=6 CAL_REPEAT_DATE=(2100, 12, 31) cal_dir='sch' cal_data_file_name='sch/schedule.dat' cal_exception_file_name='sch/schexception.dat' cal_has_voice_id=False class speeddial(BaseProtogenClass): __fields=['entry', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddial,self).__init__(**dict) if self.__class__ is speeddial: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddial,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddial,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.writetobuffer(buf) try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.readfrombuffer(buf) self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,UINT): self.__field_entry=value else: self.__field_entry=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_number(self): try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,UINT): self.__field_number=value else: self.__field_number=UINT(value,**{'sizeinbytes': 1, 'default': 0xff}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('entry', self.__field_entry, None) yield ('number', self.__field_number, None) class speeddials(BaseProtogenClass): __fields=['speeddials'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddials,self).__init__(**dict) if self.__class__ is speeddials: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddials,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddials,kwargs) if len(args): dict2={'length': NUMSPEEDDIALS, 'elementclass': speeddial} dict2.update(kwargs) kwargs=dict2 self.__field_speeddials=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_speeddials(self): try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) return self.__field_speeddials.getvalue() def __setfield_speeddials(self, value): if isinstance(value,LIST): self.__field_speeddials=value else: self.__field_speeddials=LIST(value,**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) def __delfield_speeddials(self): del self.__field_speeddials speeddials=property(__getfield_speeddials, __setfield_speeddials, __delfield_speeddials, None) def iscontainer(self): return True def containerelements(self): yield ('speeddials', self.__field_speeddials, None) class indexentry(BaseProtogenClass): __fields=['index', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_index.writetobuffer(buf) try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 50, 'default': ""}) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_index.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 50, 'default': ""}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 50, 'default': ""}) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 50, 'default': ""}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('name', self.__field_name, None) class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['numactiveitems', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('items', self.__field_items, None) class camindexentry(BaseProtogenClass): __fields=['index', 'name', 'taken', 'dunno'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(camindexentry,self).__init__(**dict) if self.__class__ is camindexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(camindexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(camindexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_index.writetobuffer(buf) try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 11, 'default': ""}) self.__field_name.writetobuffer(buf) try: self.__field_taken except: self.__field_taken=LGCALDATE(**{'sizeinbytes': 4}) self.__field_taken.writetobuffer(buf) try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default': 0x00ff0100}) self.__field_dunno.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_index.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 11, 'default': ""}) self.__field_name.readfrombuffer(buf) self.__field_taken=LGCALDATE(**{'sizeinbytes': 4}) self.__field_taken.readfrombuffer(buf) self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default': 0x00ff0100}) self.__field_dunno.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 11, 'default': ""}) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 11, 'default': ""}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_taken(self): try: self.__field_taken except: self.__field_taken=LGCALDATE(**{'sizeinbytes': 4}) return self.__field_taken.getvalue() def __setfield_taken(self, value): if isinstance(value,LGCALDATE): self.__field_taken=value else: self.__field_taken=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_taken(self): del self.__field_taken taken=property(__getfield_taken, __setfield_taken, __delfield_taken, None) def __getfield_dunno(self): try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default': 0x00ff0100}) return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 4, 'default': 0x00ff0100}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('name', self.__field_name, None) yield ('taken', self.__field_taken, None) yield ('dunno', self.__field_dunno, None) class campicsdat(BaseProtogenClass): "the cam/pics.dat file" __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(campicsdat,self).__init__(**dict) if self.__class__ is campicsdat: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(campicsdat,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(campicsdat,kwargs) if len(args): dict2={'length': 20, 'elementclass': camindexentry, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'length': 20, 'elementclass': camindexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'length': 20, 'elementclass': camindexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'length': 20, 'elementclass': camindexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'length': 20, 'elementclass': camindexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class scheduleexception(BaseProtogenClass): __fields=['pos', 'day', 'month', 'year'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexception,self).__init__(**dict) if self.__class__ is scheduleexception: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexception,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexception,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_day.writetobuffer(buf) self.__field_month.writetobuffer(buf) self.__field_year.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_day=UINT(**{'sizeinbytes': 1}) self.__field_day.readfrombuffer(buf) self.__field_month=UINT(**{'sizeinbytes': 1}) self.__field_month.readfrombuffer(buf) self.__field_year=UINT(**{'sizeinbytes': 2}) self.__field_year.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "Refers to event id (position in schedule file) that this suppresses") def __getfield_day(self): return self.__field_day.getvalue() def __setfield_day(self, value): if isinstance(value,UINT): self.__field_day=value else: self.__field_day=UINT(value,**{'sizeinbytes': 1}) def __delfield_day(self): del self.__field_day day=property(__getfield_day, __setfield_day, __delfield_day, None) def __getfield_month(self): return self.__field_month.getvalue() def __setfield_month(self, value): if isinstance(value,UINT): self.__field_month=value else: self.__field_month=UINT(value,**{'sizeinbytes': 1}) def __delfield_month(self): del self.__field_month month=property(__getfield_month, __setfield_month, __delfield_month, None) def __getfield_year(self): return self.__field_year.getvalue() def __setfield_year(self, value): if isinstance(value,UINT): self.__field_year=value else: self.__field_year=UINT(value,**{'sizeinbytes': 2}) def __delfield_year(self): del self.__field_year year=property(__getfield_year, __setfield_year, __delfield_year, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "Refers to event id (position in schedule file) that this suppresses") yield ('day', self.__field_day, None) yield ('month', self.__field_month, None) yield ('year', self.__field_year, None) class scheduleexceptionfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexceptionfile,self).__init__(**dict) if self.__class__ is scheduleexceptionfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexceptionfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexceptionfile,kwargs) if len(args): dict2={'elementclass': scheduleexception} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': scheduleexception}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class scheduleevent(BaseProtogenClass): __fields=['packet_size', 'pos', 'start', 'end', 'repeat', 'daybitmap', 'pad2', 'alarmminutes', 'alarmhours', 'alarmtype', 'snoozedelay', 'ringtone', 'description'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleevent,self).__init__(**dict) if self.__class__ is scheduleevent: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleevent,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleevent,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_packet_size except: self.__field_packet_size=UINT(**{ 'constant': 60 }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) self.__field_daybitmap.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad2.writetobuffer(buf) self.__field_alarmminutes.writetobuffer(buf) self.__field_alarmhours.writetobuffer(buf) self.__field_alarmtype.writetobuffer(buf) try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_description.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_start=LGCALDATE(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=LGCALDATE(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_repeat=UINT(**{'sizeinbytes': 1}) self.__field_repeat.readfrombuffer(buf) self.__field_daybitmap=UINT(**{'sizeinbytes': 2}) self.__field_daybitmap.readfrombuffer(buf) self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad2.readfrombuffer(buf) self.__field_alarmminutes=UINT(**{'sizeinbytes': 1}) self.__field_alarmminutes.readfrombuffer(buf) self.__field_alarmhours=UINT(**{'sizeinbytes': 1}) self.__field_alarmhours.readfrombuffer(buf) self.__field_alarmtype=UINT(**{'sizeinbytes': 1}) self.__field_alarmtype.readfrombuffer(buf) self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_description=USTRING(**{'sizeinbytes': 39, 'raiseontruncate': False, 'raiseonunterminatedread': False }) self.__field_description.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_packet_size(self): return self.__field_packet_size.getvalue() def __setfield_packet_size(self, value): if isinstance(value,UINT): self.__field_packet_size=value else: self.__field_packet_size=UINT(value,**{ 'constant': 60 }) def __delfield_packet_size(self): del self.__field_packet_size packet_size=property(__getfield_packet_size, __setfield_packet_size, __delfield_packet_size, "Faster than packetsize()") def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "position within file, used as an event id") def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,LGCALDATE): self.__field_start=value else: self.__field_start=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,LGCALDATE): self.__field_end=value else: self.__field_end=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,UINT): self.__field_repeat=value else: self.__field_repeat=UINT(value,**{'sizeinbytes': 1}) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_daybitmap(self): return self.__field_daybitmap.getvalue() def __setfield_daybitmap(self, value): if isinstance(value,UINT): self.__field_daybitmap=value else: self.__field_daybitmap=UINT(value,**{'sizeinbytes': 2}) def __delfield_daybitmap(self): del self.__field_daybitmap daybitmap=property(__getfield_daybitmap, __setfield_daybitmap, __delfield_daybitmap, "which days a weekly repeat event happens on") def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UINT): self.__field_pad2=value else: self.__field_pad2=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_alarmminutes(self): return self.__field_alarmminutes.getvalue() def __setfield_alarmminutes(self, value): if isinstance(value,UINT): self.__field_alarmminutes=value else: self.__field_alarmminutes=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmminutes(self): del self.__field_alarmminutes alarmminutes=property(__getfield_alarmminutes, __setfield_alarmminutes, __delfield_alarmminutes, "a value of 100 indicates not set") def __getfield_alarmhours(self): return self.__field_alarmhours.getvalue() def __setfield_alarmhours(self, value): if isinstance(value,UINT): self.__field_alarmhours=value else: self.__field_alarmhours=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmhours(self): del self.__field_alarmhours alarmhours=property(__getfield_alarmhours, __setfield_alarmhours, __delfield_alarmhours, "a value of 100 indicates not set") def __getfield_alarmtype(self): return self.__field_alarmtype.getvalue() def __setfield_alarmtype(self, value): if isinstance(value,UINT): self.__field_alarmtype=value else: self.__field_alarmtype=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmtype(self): del self.__field_alarmtype alarmtype=property(__getfield_alarmtype, __setfield_alarmtype, __delfield_alarmtype, "preset alarm reminder type") def __getfield_snoozedelay(self): try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_snoozedelay.getvalue() def __setfield_snoozedelay(self, value): if isinstance(value,UINT): self.__field_snoozedelay=value else: self.__field_snoozedelay=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_snoozedelay(self): del self.__field_snoozedelay snoozedelay=property(__getfield_snoozedelay, __setfield_snoozedelay, __delfield_snoozedelay, "in minutes, not for this phone") def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_description(self): return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,USTRING): self.__field_description=value else: self.__field_description=USTRING(value,**{'sizeinbytes': 39, 'raiseontruncate': False, 'raiseonunterminatedread': False }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def iscontainer(self): return True def containerelements(self): yield ('packet_size', self.__field_packet_size, "Faster than packetsize()") yield ('pos', self.__field_pos, "position within file, used as an event id") yield ('start', self.__field_start, None) yield ('end', self.__field_end, None) yield ('repeat', self.__field_repeat, None) yield ('daybitmap', self.__field_daybitmap, "which days a weekly repeat event happens on") yield ('pad2', self.__field_pad2, None) yield ('alarmminutes', self.__field_alarmminutes, "a value of 100 indicates not set") yield ('alarmhours', self.__field_alarmhours, "a value of 100 indicates not set") yield ('alarmtype', self.__field_alarmtype, "preset alarm reminder type") yield ('snoozedelay', self.__field_snoozedelay, "in minutes, not for this phone") yield ('ringtone', self.__field_ringtone, None) yield ('description', self.__field_description, None) class schedulefile(BaseProtogenClass): __fields=['numactiveitems', 'events'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(schedulefile,self).__init__(**dict) if self.__class__ is schedulefile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(schedulefile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(schedulefile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{'elementclass': scheduleevent}) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('events', self.__field_events, None) class call(BaseProtogenClass): __fields=['GPStime', 'unknown1', 'duration', 'number', 'name', 'numberlength', 'unknown2', 'pbnumbertype', 'unknown3', 'pbentrynum'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(call,self).__init__(**dict) if self.__class__ is call: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(call,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(call,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_numberlength.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_pbnumbertype.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_pbentrynum.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 4}) self.__field_unknown1.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 36, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_numberlength=UINT(**{'sizeinbytes': 1}) self.__field_numberlength.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_pbnumbertype=UINT(**{'sizeinbytes': 1}) self.__field_pbnumbertype.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 2}) self.__field_unknown3.readfrombuffer(buf) self.__field_pbentrynum=UINT(**{'sizeinbytes': 2}) self.__field_pbentrynum.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 36, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numberlength(self): return self.__field_numberlength.getvalue() def __setfield_numberlength(self, value): if isinstance(value,UINT): self.__field_numberlength=value else: self.__field_numberlength=UINT(value,**{'sizeinbytes': 1}) def __delfield_numberlength(self): del self.__field_numberlength numberlength=property(__getfield_numberlength, __setfield_numberlength, __delfield_numberlength, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_pbnumbertype(self): return self.__field_pbnumbertype.getvalue() def __setfield_pbnumbertype(self, value): if isinstance(value,UINT): self.__field_pbnumbertype=value else: self.__field_pbnumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_pbnumbertype(self): del self.__field_pbnumbertype pbnumbertype=property(__getfield_pbnumbertype, __setfield_pbnumbertype, __delfield_pbnumbertype, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_pbentrynum(self): return self.__field_pbentrynum.getvalue() def __setfield_pbentrynum(self, value): if isinstance(value,UINT): self.__field_pbentrynum=value else: self.__field_pbentrynum=UINT(value,**{'sizeinbytes': 2}) def __delfield_pbentrynum(self): del self.__field_pbentrynum pbentrynum=property(__getfield_pbentrynum, __setfield_pbentrynum, __delfield_pbentrynum, None) def iscontainer(self): return True def containerelements(self): yield ('GPStime', self.__field_GPStime, None) yield ('unknown1', self.__field_unknown1, None) yield ('duration', self.__field_duration, None) yield ('number', self.__field_number, None) yield ('name', self.__field_name, None) yield ('numberlength', self.__field_numberlength, None) yield ('unknown2', self.__field_unknown2, None) yield ('pbnumbertype', self.__field_pbnumbertype, None) yield ('unknown3', self.__field_unknown3, None) yield ('pbentrynum', self.__field_pbentrynum, None) class callhistory(BaseProtogenClass): __fields=['numcalls', 'unknown1', 'calls'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callhistory,self).__init__(**dict) if self.__class__ is callhistory: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callhistory,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callhistory,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numcalls.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numcalls=UINT(**{'sizeinbytes': 4}) self.__field_numcalls.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numcalls(self): return self.__field_numcalls.getvalue() def __setfield_numcalls(self, value): if isinstance(value,UINT): self.__field_numcalls=value else: self.__field_numcalls=UINT(value,**{'sizeinbytes': 4}) def __delfield_numcalls(self): del self.__field_numcalls numcalls=property(__getfield_numcalls, __setfield_numcalls, __delfield_numcalls, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_calls(self): try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) return self.__field_calls.getvalue() def __setfield_calls(self, value): if isinstance(value,LIST): self.__field_calls=value else: self.__field_calls=LIST(value,**{'elementclass': call}) def __delfield_calls(self): del self.__field_calls calls=property(__getfield_calls, __setfield_calls, __delfield_calls, None) def iscontainer(self): return True def containerelements(self): yield ('numcalls', self.__field_numcalls, None) yield ('unknown1', self.__field_unknown1, None) yield ('calls', self.__field_calls, None) class msg_record(BaseProtogenClass): __fields=['unknown1', 'binary', 'unknown3', 'unknown4', 'unknown6', 'length', 'msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(msg_record,self).__init__(**dict) if self.__class__ is msg_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(msg_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(msg_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_binary.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_length.writetobuffer(buf) try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx6000_183, 'length': 219}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_binary=UINT(**{'sizeinbytes': 1}) self.__field_binary.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1}) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 1}) self.__field_unknown4.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 1}) self.__field_unknown6.readfrombuffer(buf) self.__field_length=UINT(**{'sizeinbytes': 1}) self.__field_length.readfrombuffer(buf) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx6000_183, 'length': 219}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_binary(self): return self.__field_binary.getvalue() def __setfield_binary(self, value): if isinstance(value,UINT): self.__field_binary=value else: self.__field_binary=UINT(value,**{'sizeinbytes': 1}) def __delfield_binary(self): del self.__field_binary binary=property(__getfield_binary, __setfield_binary, __delfield_binary, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_length(self): return self.__field_length.getvalue() def __setfield_length(self, value): if isinstance(value,UINT): self.__field_length=value else: self.__field_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_length(self): del self.__field_length length=property(__getfield_length, __setfield_length, __delfield_length, None) def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx6000_183, 'length': 219}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx6000_183, 'length': 219}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('binary', self.__field_binary, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) yield ('unknown6', self.__field_unknown6, None) yield ('length', self.__field_length, None) yield ('msg', self.__field_msg, None) class _gen_p_lgvx6000_183(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx6000_183,self).__init__(**dict) if self.__class__ is _gen_p_lgvx6000_183: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx6000_183,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx6000_183,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class recipient_record(BaseProtogenClass): __fields=['unknown1', 'number', 'status', 'timesent', 'timereceived', 'unknown2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(recipient_record,self).__init__(**dict) if self.__class__ is recipient_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(recipient_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(recipient_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_timereceived.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UINT(**{'sizeinbytes': 2}) self.__field_unknown1.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49}) self.__field_number.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_timereceived=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timereceived.readfrombuffer(buf) self.__field_unknown2=DATA(**{'sizeinbytes': 8}) self.__field_unknown2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_timereceived(self): return self.__field_timereceived.getvalue() def __setfield_timereceived(self, value): if isinstance(value,LGCALDATE): self.__field_timereceived=value else: self.__field_timereceived=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timereceived(self): del self.__field_timereceived timereceived=property(__getfield_timereceived, __setfield_timereceived, __delfield_timereceived, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,DATA): self.__field_unknown2=value else: self.__field_unknown2=DATA(value,**{'sizeinbytes': 8}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('number', self.__field_number, None) yield ('status', self.__field_status, None) yield ('timesent', self.__field_timesent, None) yield ('timereceived', self.__field_timereceived, None) yield ('unknown2', self.__field_unknown2, None) class sms_saved(BaseProtogenClass): __fields=['outboxmsg', 'pad', 'outbox', 'inbox'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_saved,self).__init__(**dict) if self.__class__ is sms_saved: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_saved,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_saved,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_outboxmsg.writetobuffer(buf) self.__field_pad.writetobuffer(buf) if self.outboxmsg: self.__field_outbox.writetobuffer(buf) if not self.outboxmsg: self.__field_inbox.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_outboxmsg=UINT(**{'sizeinbytes': 4}) self.__field_outboxmsg.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 4}) self.__field_pad.readfrombuffer(buf) if self.outboxmsg: self.__field_outbox=sms_out() self.__field_outbox.readfrombuffer(buf) if not self.outboxmsg: self.__field_inbox=sms_in() self.__field_inbox.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_outboxmsg(self): return self.__field_outboxmsg.getvalue() def __setfield_outboxmsg(self, value): if isinstance(value,UINT): self.__field_outboxmsg=value else: self.__field_outboxmsg=UINT(value,**{'sizeinbytes': 4}) def __delfield_outboxmsg(self): del self.__field_outboxmsg outboxmsg=property(__getfield_outboxmsg, __setfield_outboxmsg, __delfield_outboxmsg, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 4}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_outbox(self): return self.__field_outbox.getvalue() def __setfield_outbox(self, value): if isinstance(value,sms_out): self.__field_outbox=value else: self.__field_outbox=sms_out(value,) def __delfield_outbox(self): del self.__field_outbox outbox=property(__getfield_outbox, __setfield_outbox, __delfield_outbox, None) def __getfield_inbox(self): return self.__field_inbox.getvalue() def __setfield_inbox(self, value): if isinstance(value,sms_in): self.__field_inbox=value else: self.__field_inbox=sms_in(value,) def __delfield_inbox(self): del self.__field_inbox inbox=property(__getfield_inbox, __setfield_inbox, __delfield_inbox, None) def iscontainer(self): return True def containerelements(self): yield ('outboxmsg', self.__field_outboxmsg, None) yield ('pad', self.__field_pad, None) if self.outboxmsg: yield ('outbox', self.__field_outbox, None) if not self.outboxmsg: yield ('inbox', self.__field_inbox, None) class sms_out(BaseProtogenClass): __fields=['callback', 'index', 'locked', 'unknown1', 'timesent', 'subject', 'unknown2', 'num_msg_elements', 'messages', 'unknown5', 'priority', 'unknown7', 'recipients'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_out,self).__init__(**dict) if self.__class__ is sms_out: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_out,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_out,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_callback except: self.__field_callback=USTRING(**{ 'default': '' }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 10}) self.__field_messages.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_unknown7.writetobuffer(buf) try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 10}) self.__field_recipients.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 3}) self.__field_unknown1.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21}) self.__field_subject.readfrombuffer(buf) self.__field_unknown2=DATA(**{'sizeinbytes': 151}) self.__field_unknown2.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 10}) self.__field_messages.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 1}) self.__field_unknown5.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_unknown7=DATA(**{'sizeinbytes': 39}) self.__field_unknown7.readfrombuffer(buf) self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 10}) self.__field_recipients.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{ 'default': '' }) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,DATA): self.__field_unknown2=value else: self.__field_unknown2=DATA(value,**{'sizeinbytes': 151}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_messages(self): try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 10}) return self.__field_messages.getvalue() def __setfield_messages(self, value): if isinstance(value,LIST): self.__field_messages=value else: self.__field_messages=LIST(value,**{'elementclass': msg_record, 'length': 10}) def __delfield_messages(self): del self.__field_messages messages=property(__getfield_messages, __setfield_messages, __delfield_messages, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_unknown7(self): return self.__field_unknown7.getvalue() def __setfield_unknown7(self, value): if isinstance(value,DATA): self.__field_unknown7=value else: self.__field_unknown7=DATA(value,**{'sizeinbytes': 39}) def __delfield_unknown7(self): del self.__field_unknown7 unknown7=property(__getfield_unknown7, __setfield_unknown7, __delfield_unknown7, None) def __getfield_recipients(self): try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 10}) return self.__field_recipients.getvalue() def __setfield_recipients(self, value): if isinstance(value,LIST): self.__field_recipients=value else: self.__field_recipients=LIST(value,**{'elementclass': recipient_record,'length': 10}) def __delfield_recipients(self): del self.__field_recipients recipients=property(__getfield_recipients, __setfield_recipients, __delfield_recipients, None) def iscontainer(self): return True def containerelements(self): yield ('callback', self.__field_callback, None) yield ('index', self.__field_index, None) yield ('locked', self.__field_locked, None) yield ('unknown1', self.__field_unknown1, None) yield ('timesent', self.__field_timesent, None) yield ('subject', self.__field_subject, None) yield ('unknown2', self.__field_unknown2, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('messages', self.__field_messages, None) yield ('unknown5', self.__field_unknown5, None) yield ('priority', self.__field_priority, None) yield ('unknown7', self.__field_unknown7, None) yield ('recipients', self.__field_recipients, None) class SMSINBOXMSGFRAGMENT(BaseProtogenClass): __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSINBOXMSGFRAGMENT,self).__init__(**dict) if self.__class__ is SMSINBOXMSGFRAGMENT: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSINBOXMSGFRAGMENT,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSINBOXMSGFRAGMENT,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx6000_218, 'length': 181} dict2.update(kwargs) kwargs=dict2 self.__field_msg=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx6000_218, 'length': 181}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx6000_218, 'length': 181}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx6000_218, 'length': 181}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx6000_218, 'length': 181}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class _gen_p_lgvx6000_218(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx6000_218,self).__init__(**dict) if self.__class__ is _gen_p_lgvx6000_218: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx6000_218,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx6000_218,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class sms_in(BaseProtogenClass): __fields=['msg_index1', 'msg_index2', 'unknown2', 'unknown3', 'timesent', 'unknown', 'callback_length', 'callback', 'sender_length', 'sender', 'unknown4', 'lg_time', 'GPStime', 'unknown5', 'read', 'locked', 'unknown8', 'priority', 'flags', 'subject', 'bin_header1', 'bin_header2', 'unknown6', 'multipartID', 'bin_header3', 'num_msg_elements', 'msglengths', 'msgs', 'unknown5', 'senders_name', 'unknown6'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_in,self).__init__(**dict) if self.__class__ is sms_in: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_in,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_in,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msg_index1.writetobuffer(buf) self.__field_msg_index2.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self.__field_callback_length.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_sender_length.writetobuffer(buf) try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx6000_231, 'length': 38}) self.__field_sender.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_lg_time.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_flags.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_bin_header1.writetobuffer(buf) self.__field_bin_header2.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_multipartID.writetobuffer(buf) self.__field_bin_header3.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx6000_249, 'length': 10}) self.__field_msglengths.writetobuffer(buf) try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_senders_name.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg_index1=UINT(**{'sizeinbytes': 4}) self.__field_msg_index1.readfrombuffer(buf) self.__field_msg_index2=UINT(**{'sizeinbytes': 4}) self.__field_msg_index2.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2}) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 4}) self.__field_unknown3.readfrombuffer(buf) self.__field_timesent=SMSDATE(**{'sizeinbytes': 6}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown=UINT(**{'sizeinbytes': 3}) self.__field_unknown.readfrombuffer(buf) self.__field_callback_length=UINT(**{'sizeinbytes': 1}) self.__field_callback_length.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 38}) self.__field_callback.readfrombuffer(buf) self.__field_sender_length=UINT(**{'sizeinbytes': 1}) self.__field_sender_length.readfrombuffer(buf) self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx6000_231, 'length': 38}) self.__field_sender.readfrombuffer(buf) self.__field_unknown4=DATA(**{'sizeinbytes': 15}) self.__field_unknown4.readfrombuffer(buf) self.__field_lg_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_lg_time.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 2}) self.__field_unknown5.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 1}) self.__field_read.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown8=UINT(**{'sizeinbytes': 2}) self.__field_unknown8.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_flags=DATA(**{'sizeinbytes': 5}) self.__field_flags.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21}) self.__field_subject.readfrombuffer(buf) self.__field_bin_header1=UINT(**{'sizeinbytes': 1}) self.__field_bin_header1.readfrombuffer(buf) self.__field_bin_header2=UINT(**{'sizeinbytes': 1}) self.__field_bin_header2.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 2}) self.__field_unknown6.readfrombuffer(buf) self.__field_multipartID=UINT(**{'sizeinbytes': 2}) self.__field_multipartID.readfrombuffer(buf) self.__field_bin_header3=UINT(**{'sizeinbytes': 1}) self.__field_bin_header3.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx6000_249, 'length': 10}) self.__field_msglengths.readfrombuffer(buf) self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.readfrombuffer(buf) self.__field_unknown5=DATA(**{'sizeinbytes': 437}) self.__field_unknown5.readfrombuffer(buf) self.__field_senders_name=USTRING(**{'sizeinbytes': 33}) self.__field_senders_name.readfrombuffer(buf) self.__field_unknown6=DATA(**{'sizeinbytes': 169}) self.__field_unknown6.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg_index1(self): return self.__field_msg_index1.getvalue() def __setfield_msg_index1(self, value): if isinstance(value,UINT): self.__field_msg_index1=value else: self.__field_msg_index1=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index1(self): del self.__field_msg_index1 msg_index1=property(__getfield_msg_index1, __setfield_msg_index1, __delfield_msg_index1, None) def __getfield_msg_index2(self): return self.__field_msg_index2.getvalue() def __setfield_msg_index2(self, value): if isinstance(value,UINT): self.__field_msg_index2=value else: self.__field_msg_index2=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index2(self): del self.__field_msg_index2 msg_index2=property(__getfield_msg_index2, __setfield_msg_index2, __delfield_msg_index2, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,SMSDATE): self.__field_timesent=value else: self.__field_timesent=SMSDATE(value,**{'sizeinbytes': 6}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UINT): self.__field_unknown=value else: self.__field_unknown=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def __getfield_callback_length(self): return self.__field_callback_length.getvalue() def __setfield_callback_length(self, value): if isinstance(value,UINT): self.__field_callback_length=value else: self.__field_callback_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_length(self): del self.__field_callback_length callback_length=property(__getfield_callback_length, __setfield_callback_length, __delfield_callback_length, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 38}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_sender_length(self): return self.__field_sender_length.getvalue() def __setfield_sender_length(self, value): if isinstance(value,UINT): self.__field_sender_length=value else: self.__field_sender_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_sender_length(self): del self.__field_sender_length sender_length=property(__getfield_sender_length, __setfield_sender_length, __delfield_sender_length, None) def __getfield_sender(self): try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx6000_231, 'length': 38}) return self.__field_sender.getvalue() def __setfield_sender(self, value): if isinstance(value,LIST): self.__field_sender=value else: self.__field_sender=LIST(value,**{'elementclass': _gen_p_lgvx6000_231, 'length': 38}) def __delfield_sender(self): del self.__field_sender sender=property(__getfield_sender, __setfield_sender, __delfield_sender, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,DATA): self.__field_unknown4=value else: self.__field_unknown4=DATA(value,**{'sizeinbytes': 15}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_lg_time(self): return self.__field_lg_time.getvalue() def __setfield_lg_time(self, value): if isinstance(value,LGCALDATE): self.__field_lg_time=value else: self.__field_lg_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_lg_time(self): del self.__field_lg_time lg_time=property(__getfield_lg_time, __setfield_lg_time, __delfield_lg_time, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 1}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,UINT): self.__field_unknown8=value else: self.__field_unknown8=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_flags(self): return self.__field_flags.getvalue() def __setfield_flags(self, value): if isinstance(value,DATA): self.__field_flags=value else: self.__field_flags=DATA(value,**{'sizeinbytes': 5}) def __delfield_flags(self): del self.__field_flags flags=property(__getfield_flags, __setfield_flags, __delfield_flags, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_bin_header1(self): return self.__field_bin_header1.getvalue() def __setfield_bin_header1(self, value): if isinstance(value,UINT): self.__field_bin_header1=value else: self.__field_bin_header1=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header1(self): del self.__field_bin_header1 bin_header1=property(__getfield_bin_header1, __setfield_bin_header1, __delfield_bin_header1, None) def __getfield_bin_header2(self): return self.__field_bin_header2.getvalue() def __setfield_bin_header2(self, value): if isinstance(value,UINT): self.__field_bin_header2=value else: self.__field_bin_header2=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header2(self): del self.__field_bin_header2 bin_header2=property(__getfield_bin_header2, __setfield_bin_header2, __delfield_bin_header2, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_multipartID(self): return self.__field_multipartID.getvalue() def __setfield_multipartID(self, value): if isinstance(value,UINT): self.__field_multipartID=value else: self.__field_multipartID=UINT(value,**{'sizeinbytes': 2}) def __delfield_multipartID(self): del self.__field_multipartID multipartID=property(__getfield_multipartID, __setfield_multipartID, __delfield_multipartID, None) def __getfield_bin_header3(self): return self.__field_bin_header3.getvalue() def __setfield_bin_header3(self, value): if isinstance(value,UINT): self.__field_bin_header3=value else: self.__field_bin_header3=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header3(self): del self.__field_bin_header3 bin_header3=property(__getfield_bin_header3, __setfield_bin_header3, __delfield_bin_header3, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_msglengths(self): try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx6000_249, 'length': 10}) return self.__field_msglengths.getvalue() def __setfield_msglengths(self, value): if isinstance(value,LIST): self.__field_msglengths=value else: self.__field_msglengths=LIST(value,**{'elementclass': _gen_p_lgvx6000_249, 'length': 10}) def __delfield_msglengths(self): del self.__field_msglengths msglengths=property(__getfield_msglengths, __setfield_msglengths, __delfield_msglengths, None) def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,DATA): self.__field_unknown5=value else: self.__field_unknown5=DATA(value,**{'sizeinbytes': 437}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_senders_name(self): return self.__field_senders_name.getvalue() def __setfield_senders_name(self, value): if isinstance(value,USTRING): self.__field_senders_name=value else: self.__field_senders_name=USTRING(value,**{'sizeinbytes': 33}) def __delfield_senders_name(self): del self.__field_senders_name senders_name=property(__getfield_senders_name, __setfield_senders_name, __delfield_senders_name, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,DATA): self.__field_unknown6=value else: self.__field_unknown6=DATA(value,**{'sizeinbytes': 169}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def iscontainer(self): return True def containerelements(self): yield ('msg_index1', self.__field_msg_index1, None) yield ('msg_index2', self.__field_msg_index2, None) yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) yield ('timesent', self.__field_timesent, None) yield ('unknown', self.__field_unknown, None) yield ('callback_length', self.__field_callback_length, None) yield ('callback', self.__field_callback, None) yield ('sender_length', self.__field_sender_length, None) yield ('sender', self.__field_sender, None) yield ('unknown4', self.__field_unknown4, None) yield ('lg_time', self.__field_lg_time, None) yield ('GPStime', self.__field_GPStime, None) yield ('unknown5', self.__field_unknown5, None) yield ('read', self.__field_read, None) yield ('locked', self.__field_locked, None) yield ('unknown8', self.__field_unknown8, None) yield ('priority', self.__field_priority, None) yield ('flags', self.__field_flags, None) yield ('subject', self.__field_subject, None) yield ('bin_header1', self.__field_bin_header1, None) yield ('bin_header2', self.__field_bin_header2, None) yield ('unknown6', self.__field_unknown6, None) yield ('multipartID', self.__field_multipartID, None) yield ('bin_header3', self.__field_bin_header3, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('msglengths', self.__field_msglengths, None) yield ('msgs', self.__field_msgs, None) yield ('unknown5', self.__field_unknown5, None) yield ('senders_name', self.__field_senders_name, None) yield ('unknown6', self.__field_unknown6, None) class _gen_p_lgvx6000_231(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx6000_231,self).__init__(**dict) if self.__class__ is _gen_p_lgvx6000_231: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx6000_231,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx6000_231,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of senders phone number") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of senders phone number") class _gen_p_lgvx6000_249(BaseProtogenClass): 'Anonymous inner class' __fields=['msglength'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx6000_249,self).__init__(**dict) if self.__class__ is _gen_p_lgvx6000_249: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx6000_249,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx6000_249,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_msglength=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msglength.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msglength=UINT(**{'sizeinbytes': 1}) self.__field_msglength.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msglength(self): return self.__field_msglength.getvalue() def __setfield_msglength(self, value): if isinstance(value,UINT): self.__field_msglength=value else: self.__field_msglength=UINT(value,**{'sizeinbytes': 1}) def __delfield_msglength(self): del self.__field_msglength msglength=property(__getfield_msglength, __setfield_msglength, __delfield_msglength, "lengths of individual messages in septets") def iscontainer(self): return True def containerelements(self): yield ('msglength', self.__field_msglength, "lengths of individual messages in septets") class sms_quick_text(BaseProtogenClass): __fields=['msgs'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_quick_text,self).__init__(**dict) if self.__class__ is sms_quick_text: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_quick_text,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_quick_text,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx6000_265, } dict2.update(kwargs) kwargs=dict2 self.__field_msgs=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx6000_265, }) self.__field_msgs.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx6000_265, }) self.__field_msgs.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx6000_265, }) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'elementclass': _gen_p_lgvx6000_265, }) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def iscontainer(self): return True def containerelements(self): yield ('msgs', self.__field_msgs, None) class _gen_p_lgvx6000_265(BaseProtogenClass): 'Anonymous inner class' __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx6000_265,self).__init__(**dict) if self.__class__ is _gen_p_lgvx6000_265: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx6000_265,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx6000_265,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_msg=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=USTRING(**{}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) bitpim-1.0.7+dfsg1/src/phones/com_sanyo7050.py0000644001616600161660000000706511041772674017130 0ustar amuamu### BITPIM ### ### Copyright (C) 2008 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id$ """Talk to the Sanyo SCP-7050 cell phone""" # standard modules import re import time import sha # my modules import common import p_brew import p_sanyo8300 import p_sanyo4930 import p_sanyo6600 import p_sanyo7050 import com_brew import com_phone import com_sanyo import com_sanyomedia import com_sanyonewer import com_sanyo3100 import com_sanyo6600 import prototypes import bpcalendar numbertypetab=( 'cell', 'home', 'office', 'pager', 'fax', 'none') class Phone(com_sanyo6600.Phone): "Talk to the Sanyo Katana-II (SCP-7050) cell phone" desc="SCP-7050" FIRST_MEDIA_DIRECTORY=1 LAST_MEDIA_DIRECTORY=2 imagelocations=( # offset, directory #, indexflag, type, maximumentries ) wallpaperexts=(".jpg", ".png", ".mp4", ".3g2",".JPG") protocolclass=p_sanyo7050 serialsname='scp7050' builtinringtones=( 'None', 'Vibrate', '', '', '', '', '', '', '', 'Tone 1', 'Tone 2', 'Tone 3', 'Tone 4', 'Tone 5', 'Tone 6', 'Tone 7', 'Tone 8', '', '', '', '', '', '', '', '', '', 'Requiem:Dies Irae', 'Minute Waltz', 'Hungarian Dance', 'Military March', 'Ten Little Indians', 'Head,Shoulders,Knees&Toes', 'The Moment', 'Asian Jingle', 'Kung-fu','','','','','','','','','','','','','','','','','', '','','','','','', 'Voice Alarm') calendar_defaultringtone=0 calendar_defaultcaringtone=0 calendar_toneoffset=33 calendar_tonerange=xrange(4,100) def __init__(self, logtarget, commport): com_sanyo6600.Phone.__init__(self, logtarget, commport) self.mode=self.MODENONE self.numbertypetab=numbertypetab def getfundamentals(self, results): """Gets information fundamental to interopating with the phone and UI.""" req=self.protocolclass.sanyoreset() res=self.sendpbcommand(req, p_brew.testing0cresponse) results['uniqueserial']=sha.new(self.get_esn()).hexdigest() self.getmediaindices(results) results['groups']=self.read_groups() self.log("Fundamentals retrieved") return results my_model='SCP7050' detected_model='SCP-7050/US' my_manufacturer='SANYO' parentprofile=com_sanyo6600.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer=Phone.my_manufacturer phone_model=Phone.my_model usbids=( ( 0x0474, 0x0743, 2),) # VID=Sanyo, deviceclasses=("serial",) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading #('calendar', 'read', None), # all calendar reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook #('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # Read sms messages ('todo', 'read', None), # Read todos ) def __init__(self): parentprofile.__init__(self) com_sanyonewer.Profile.__init__(self) self.numbertypetab=numbertypetab bitpim-1.0.7+dfsg1/src/phones/p_lg.py0000644001616600161660000035603211032300255015525 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG phones""" from prototypes import * import re # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb class pbheader(BaseProtogenClass): __fields=['pbmode', 'command', 'sequence', 'flag'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbheader,self).__init__(**dict) if self.__class__ is pbheader: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbheader,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbheader,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_pbmode except: self.__field_pbmode=UINT(**{'sizeinbytes': 1, 'constant': 0xff}) self.__field_pbmode.writetobuffer(buf) self.__field_command.writetobuffer(buf) self.__field_sequence.writetobuffer(buf) self.__field_flag.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbmode=UINT(**{'sizeinbytes': 1, 'constant': 0xff}) self.__field_pbmode.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_sequence=UINT(**{'sizeinbytes': 1}) self.__field_sequence.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbmode(self): try: self.__field_pbmode except: self.__field_pbmode=UINT(**{'sizeinbytes': 1, 'constant': 0xff}) return self.__field_pbmode.getvalue() def __setfield_pbmode(self, value): if isinstance(value,UINT): self.__field_pbmode=value else: self.__field_pbmode=UINT(value,**{'sizeinbytes': 1, 'constant': 0xff}) def __delfield_pbmode(self): del self.__field_pbmode pbmode=property(__getfield_pbmode, __setfield_pbmode, __delfield_pbmode, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_sequence(self): return self.__field_sequence.getvalue() def __setfield_sequence(self, value): if isinstance(value,UINT): self.__field_sequence=value else: self.__field_sequence=UINT(value,**{'sizeinbytes': 1}) def __delfield_sequence(self): del self.__field_sequence sequence=property(__getfield_sequence, __setfield_sequence, __delfield_sequence, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, None) def iscontainer(self): return True def containerelements(self): yield ('pbmode', self.__field_pbmode, None) yield ('command', self.__field_command, None) yield ('sequence', self.__field_sequence, None) yield ('flag', self.__field_flag, None) class pbstartsyncrequest(BaseProtogenClass): __fields=['header', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbstartsyncrequest,self).__init__(**dict) if self.__class__ is pbstartsyncrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbstartsyncrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbstartsyncrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x00, 'flag': 0x01}) self.__field_header.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 250}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x00, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 250}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x00, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x00, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 250}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 250}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('pad', self.__field_pad, None) class pbstartsyncresponse(BaseProtogenClass): __fields=['header', 'unknown'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbstartsyncresponse,self).__init__(**dict) if self.__class__ is pbstartsyncresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbstartsyncresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbstartsyncresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_unknown=UNKNOWN() self.__field_unknown.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UNKNOWN): self.__field_unknown=value else: self.__field_unknown=UNKNOWN(value,) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('unknown', self.__field_unknown, None) class pbendsyncrequest(BaseProtogenClass): __fields=['header', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbendsyncrequest,self).__init__(**dict) if self.__class__ is pbendsyncrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbendsyncrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbendsyncrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x07, 'flag': 0x01}) self.__field_header.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 6}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x07, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 6}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x07, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x07, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 6}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 6}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('pad', self.__field_pad, None) class pbendsyncresponse(BaseProtogenClass): __fields=['header', 'unknown'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbendsyncresponse,self).__init__(**dict) if self.__class__ is pbendsyncresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbendsyncresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbendsyncresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_unknown=UNKNOWN() self.__field_unknown.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UNKNOWN): self.__field_unknown=value else: self.__field_unknown=UNKNOWN(value,) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('unknown', self.__field_unknown, None) class pbinforequest(BaseProtogenClass): "Random information about the phone" __fields=['header', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbinforequest,self).__init__(**dict) if self.__class__ is pbinforequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbinforequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbinforequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x15, 'flag': 0x01}) self.__field_header.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 6}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x15, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 6}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x15, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x15, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 6}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 6}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('pad', self.__field_pad, None) class pbinforesponse(BaseProtogenClass): __fields=['header', 'dunno1', 'something1', 'firstentry', 'dunno2', 'numentries', 'dunno3', 'lastentry', 'dunno4', 'esn', 'phonesoftware'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbinforesponse,self).__init__(**dict) if self.__class__ is pbinforesponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbinforesponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbinforesponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_something1.writetobuffer(buf) self.__field_firstentry.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_numentries.writetobuffer(buf) self.__field_dunno3.writetobuffer(buf) self.__field_lastentry.writetobuffer(buf) self.__field_dunno4.writetobuffer(buf) self.__field_esn.writetobuffer(buf) self.__field_phonesoftware.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_dunno1=UNKNOWN(**{'sizeinbytes': 4}) self.__field_dunno1.readfrombuffer(buf) self.__field_something1=UINT(**{'sizeinbytes': 2}) self.__field_something1.readfrombuffer(buf) self.__field_firstentry=UINT(**{'sizeinbytes': 4}) self.__field_firstentry.readfrombuffer(buf) self.__field_dunno2=UNKNOWN(**{'sizeinbytes': 4}) self.__field_dunno2.readfrombuffer(buf) self.__field_numentries=UINT(**{'sizeinbytes': 4}) self.__field_numentries.readfrombuffer(buf) self.__field_dunno3=UNKNOWN(**{'sizeinbytes': 20}) self.__field_dunno3.readfrombuffer(buf) self.__field_lastentry=UINT(**{'sizeinbytes': 4}) self.__field_lastentry.readfrombuffer(buf) self.__field_dunno4=UNKNOWN(**{'sizeinbytes': 20}) self.__field_dunno4.readfrombuffer(buf) self.__field_esn=UINT(**{'sizeinbytes': 4}) self.__field_esn.readfrombuffer(buf) self.__field_phonesoftware=USTRING() self.__field_phonesoftware.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UNKNOWN): self.__field_dunno1=value else: self.__field_dunno1=UNKNOWN(value,**{'sizeinbytes': 4}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_something1(self): return self.__field_something1.getvalue() def __setfield_something1(self, value): if isinstance(value,UINT): self.__field_something1=value else: self.__field_something1=UINT(value,**{'sizeinbytes': 2}) def __delfield_something1(self): del self.__field_something1 something1=property(__getfield_something1, __setfield_something1, __delfield_something1, None) def __getfield_firstentry(self): return self.__field_firstentry.getvalue() def __setfield_firstentry(self, value): if isinstance(value,UINT): self.__field_firstentry=value else: self.__field_firstentry=UINT(value,**{'sizeinbytes': 4}) def __delfield_firstentry(self): del self.__field_firstentry firstentry=property(__getfield_firstentry, __setfield_firstentry, __delfield_firstentry, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UNKNOWN): self.__field_dunno2=value else: self.__field_dunno2=UNKNOWN(value,**{'sizeinbytes': 4}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_numentries(self): return self.__field_numentries.getvalue() def __setfield_numentries(self, value): if isinstance(value,UINT): self.__field_numentries=value else: self.__field_numentries=UINT(value,**{'sizeinbytes': 4}) def __delfield_numentries(self): del self.__field_numentries numentries=property(__getfield_numentries, __setfield_numentries, __delfield_numentries, None) def __getfield_dunno3(self): return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,UNKNOWN): self.__field_dunno3=value else: self.__field_dunno3=UNKNOWN(value,**{'sizeinbytes': 20}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_lastentry(self): return self.__field_lastentry.getvalue() def __setfield_lastentry(self, value): if isinstance(value,UINT): self.__field_lastentry=value else: self.__field_lastentry=UINT(value,**{'sizeinbytes': 4}) def __delfield_lastentry(self): del self.__field_lastentry lastentry=property(__getfield_lastentry, __setfield_lastentry, __delfield_lastentry, None) def __getfield_dunno4(self): return self.__field_dunno4.getvalue() def __setfield_dunno4(self, value): if isinstance(value,UNKNOWN): self.__field_dunno4=value else: self.__field_dunno4=UNKNOWN(value,**{'sizeinbytes': 20}) def __delfield_dunno4(self): del self.__field_dunno4 dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None) def __getfield_esn(self): return self.__field_esn.getvalue() def __setfield_esn(self, value): if isinstance(value,UINT): self.__field_esn=value else: self.__field_esn=UINT(value,**{'sizeinbytes': 4}) def __delfield_esn(self): del self.__field_esn esn=property(__getfield_esn, __setfield_esn, __delfield_esn, None) def __getfield_phonesoftware(self): return self.__field_phonesoftware.getvalue() def __setfield_phonesoftware(self, value): if isinstance(value,USTRING): self.__field_phonesoftware=value else: self.__field_phonesoftware=USTRING(value,) def __delfield_phonesoftware(self): del self.__field_phonesoftware phonesoftware=property(__getfield_phonesoftware, __setfield_phonesoftware, __delfield_phonesoftware, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('dunno1', self.__field_dunno1, None) yield ('something1', self.__field_something1, None) yield ('firstentry', self.__field_firstentry, None) yield ('dunno2', self.__field_dunno2, None) yield ('numentries', self.__field_numentries, None) yield ('dunno3', self.__field_dunno3, None) yield ('lastentry', self.__field_lastentry, None) yield ('dunno4', self.__field_dunno4, None) yield ('esn', self.__field_esn, None) yield ('phonesoftware', self.__field_phonesoftware, None) class pbinitrequest(BaseProtogenClass): "Moves cursor to begining of phonebook" __fields=['header', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbinitrequest,self).__init__(**dict) if self.__class__ is pbinitrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbinitrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbinitrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x11, 'flag': 0x01}) self.__field_header.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 6}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x11, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 6}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x11, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x11, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 6}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 6}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('pad', self.__field_pad, None) class pbinitresponse(BaseProtogenClass): __fields=['header', 'dunno'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbinitresponse,self).__init__(**dict) if self.__class__ is pbinitresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbinitresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbinitresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_dunno.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_dunno=UNKNOWN() self.__field_dunno.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_dunno(self): return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UNKNOWN): self.__field_dunno=value else: self.__field_dunno=UNKNOWN(value,) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('dunno', self.__field_dunno, None) class pbreadentryrequest(BaseProtogenClass): __fields=['header', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbreadentryrequest,self).__init__(**dict) if self.__class__ is pbreadentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbreadentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbreadentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x13, 'flag': 0x01}) self.__field_header.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 6}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x13, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 6}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x13, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x13, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 6}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 6}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('pad', self.__field_pad, None) class pbnextentryrequest(BaseProtogenClass): __fields=['header', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbnextentryrequest,self).__init__(**dict) if self.__class__ is pbnextentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbnextentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbnextentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x12, 'flag': 0x01}) self.__field_header.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 6}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x12, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 6}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x12, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x12, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 6}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 6}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('pad', self.__field_pad, None) class pbnextentryresponse(BaseProtogenClass): __fields=['header', 'serial', 'datalen', 'data', 'randomgunk'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbnextentryresponse,self).__init__(**dict) if self.__class__ is pbnextentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbnextentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbnextentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_serial.writetobuffer(buf) self.__field_datalen.writetobuffer(buf) self.__field_data.writetobuffer(buf) self.__field_randomgunk.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_serial=UINT(**{'sizeinbytes': 4}) self.__field_serial.readfrombuffer(buf) self.__field_datalen=UINT(**{'sizeinbytes': 2}) self.__field_datalen.readfrombuffer(buf) self.__field_data=DATA(**{'sizeinbytes': self.datalen}) self.__field_data.readfrombuffer(buf) self.__field_randomgunk=UNKNOWN() self.__field_randomgunk.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_serial(self): return self.__field_serial.getvalue() def __setfield_serial(self, value): if isinstance(value,UINT): self.__field_serial=value else: self.__field_serial=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial(self): del self.__field_serial serial=property(__getfield_serial, __setfield_serial, __delfield_serial, None) def __getfield_datalen(self): return self.__field_datalen.getvalue() def __setfield_datalen(self, value): if isinstance(value,UINT): self.__field_datalen=value else: self.__field_datalen=UINT(value,**{'sizeinbytes': 2}) def __delfield_datalen(self): del self.__field_datalen datalen=property(__getfield_datalen, __setfield_datalen, __delfield_datalen, None) def __getfield_data(self): return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,DATA): self.__field_data=value else: self.__field_data=DATA(value,**{'sizeinbytes': self.datalen}) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def __getfield_randomgunk(self): return self.__field_randomgunk.getvalue() def __setfield_randomgunk(self, value): if isinstance(value,UNKNOWN): self.__field_randomgunk=value else: self.__field_randomgunk=UNKNOWN(value,) def __delfield_randomgunk(self): del self.__field_randomgunk randomgunk=property(__getfield_randomgunk, __setfield_randomgunk, __delfield_randomgunk, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('serial', self.__field_serial, None) yield ('datalen', self.__field_datalen, None) yield ('data', self.__field_data, None) yield ('randomgunk', self.__field_randomgunk, None) class pbdeleteentryrequest(BaseProtogenClass): __fields=['header', 'serial1', 'unknown', 'serial2', 'entrynumber'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbdeleteentryrequest,self).__init__(**dict) if self.__class__ is pbdeleteentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbdeleteentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbdeleteentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x05, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_serial1.writetobuffer(buf) try: self.__field_unknown except: self.__field_unknown=UINT(**{'sizeinbytes': 2, 'constant': 0x0000}) self.__field_unknown.writetobuffer(buf) self.__field_serial2.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x05, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_unknown=UINT(**{'sizeinbytes': 2, 'constant': 0x0000}) self.__field_unknown.readfrombuffer(buf) self.__field_serial2=UINT(**{'sizeinbytes': 4}) self.__field_serial2.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 2}) self.__field_entrynumber.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x05, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x05, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_unknown(self): try: self.__field_unknown except: self.__field_unknown=UINT(**{'sizeinbytes': 2, 'constant': 0x0000}) return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UINT): self.__field_unknown=value else: self.__field_unknown=UINT(value,**{'sizeinbytes': 2, 'constant': 0x0000}) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def __getfield_serial2(self): return self.__field_serial2.getvalue() def __setfield_serial2(self, value): if isinstance(value,UINT): self.__field_serial2=value else: self.__field_serial2=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial2(self): del self.__field_serial2 serial2=property(__getfield_serial2, __setfield_serial2, __delfield_serial2, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 2}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('serial1', self.__field_serial1, None) yield ('unknown', self.__field_unknown, None) yield ('serial2', self.__field_serial2, None) yield ('entrynumber', self.__field_entrynumber, None) class pbdeleteentryresponse(BaseProtogenClass): __fields=['header', 'dunno'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbdeleteentryresponse,self).__init__(**dict) if self.__class__ is pbdeleteentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbdeleteentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbdeleteentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_dunno.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_dunno=UNKNOWN() self.__field_dunno.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_dunno(self): return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UNKNOWN): self.__field_dunno=value else: self.__field_dunno=UNKNOWN(value,) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('dunno', self.__field_dunno, None) class pbupdateentryresponse(BaseProtogenClass): __fields=['header', 'serial1', 'dunno'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbupdateentryresponse,self).__init__(**dict) if self.__class__ is pbupdateentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbupdateentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbupdateentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_serial1.writetobuffer(buf) self.__field_dunno.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_dunno=UNKNOWN() self.__field_dunno.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_dunno(self): return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UNKNOWN): self.__field_dunno=value else: self.__field_dunno=UNKNOWN(value,) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('serial1', self.__field_serial1, None) yield ('dunno', self.__field_dunno, None) class pbappendentryresponse(BaseProtogenClass): __fields=['header', 'newserial', 'dunno', 'dunno2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbappendentryresponse,self).__init__(**dict) if self.__class__ is pbappendentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbappendentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbappendentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_newserial.writetobuffer(buf) self.__field_dunno.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_newserial=UINT(**{'sizeinbytes': 4}) self.__field_newserial.readfrombuffer(buf) self.__field_dunno=UINT(**{'sizeinbytes': 2}) self.__field_dunno.readfrombuffer(buf) self.__field_dunno2=UNKNOWN() self.__field_dunno2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_newserial(self): return self.__field_newserial.getvalue() def __setfield_newserial(self, value): if isinstance(value,UINT): self.__field_newserial=value else: self.__field_newserial=UINT(value,**{'sizeinbytes': 4}) def __delfield_newserial(self): del self.__field_newserial newserial=property(__getfield_newserial, __setfield_newserial, __delfield_newserial, None) def __getfield_dunno(self): return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 2}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UNKNOWN): self.__field_dunno2=value else: self.__field_dunno2=UNKNOWN(value,) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('newserial', self.__field_newserial, None) yield ('dunno', self.__field_dunno, None) yield ('dunno2', self.__field_dunno2, None) class LockKeyReq(BaseProtogenClass): __fields=['cmd', 'lock'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(LockKeyReq,self).__init__(**dict) if self.__class__ is LockKeyReq: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(LockKeyReq,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(LockKeyReq,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0x21 }) self.__field_cmd.writetobuffer(buf) try: self.__field_lock except: self.__field_lock=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_lock.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0x21 }) self.__field_cmd.readfrombuffer(buf) self.__field_lock=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_lock.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0x21 }) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'default': 0x21 }) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_lock(self): try: self.__field_lock except: self.__field_lock=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_lock.getvalue() def __setfield_lock(self, value): if isinstance(value,UINT): self.__field_lock=value else: self.__field_lock=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_lock(self): del self.__field_lock lock=property(__getfield_lock, __setfield_lock, __delfield_lock, "0=Lock, 1=Unlock") def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('lock', self.__field_lock, "0=Lock, 1=Unlock") class KeyPressReq(BaseProtogenClass): __fields=['cmd', 'hold', 'key'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(KeyPressReq,self).__init__(**dict) if self.__class__ is KeyPressReq: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(KeyPressReq,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(KeyPressReq,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0x20 }) self.__field_cmd.writetobuffer(buf) try: self.__field_hold except: self.__field_hold=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_hold.writetobuffer(buf) self.__field_key.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0x20 }) self.__field_cmd.readfrombuffer(buf) self.__field_hold=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_hold.readfrombuffer(buf) self.__field_key=STRING(**{'sizeinbytes': 1, 'terminator': None, 'sizeinbytes': 1 }) self.__field_key.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0x20 }) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'default': 0x20 }) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_hold(self): try: self.__field_hold except: self.__field_hold=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_hold.getvalue() def __setfield_hold(self, value): if isinstance(value,UINT): self.__field_hold=value else: self.__field_hold=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_hold(self): del self.__field_hold hold=property(__getfield_hold, __setfield_hold, __delfield_hold, None) def __getfield_key(self): return self.__field_key.getvalue() def __setfield_key(self, value): if isinstance(value,STRING): self.__field_key=value else: self.__field_key=STRING(value,**{'sizeinbytes': 1, 'terminator': None, 'sizeinbytes': 1 }) def __delfield_key(self): del self.__field_key key=property(__getfield_key, __setfield_key, __delfield_key, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('hold', self.__field_hold, None) yield ('key', self.__field_key, None) class ULReq(BaseProtogenClass): "" __fields=['cmd', 'unlock_code', 'unlock_key', 'zero'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ULReq,self).__init__(**dict) if self.__class__ is ULReq: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ULReq,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ULReq,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0xFE }) self.__field_cmd.writetobuffer(buf) try: self.__field_unlock_code except: self.__field_unlock_code=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) self.__field_unlock_code.writetobuffer(buf) self.__field_unlock_key.writetobuffer(buf) try: self.__field_zero except: self.__field_zero=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) self.__field_zero.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0xFE }) self.__field_cmd.readfrombuffer(buf) self.__field_unlock_code=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) self.__field_unlock_code.readfrombuffer(buf) self.__field_unlock_key=UINT(**{'sizeinbytes': 4}) self.__field_unlock_key.readfrombuffer(buf) self.__field_zero=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) self.__field_zero.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0xFE }) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'default': 0xFE }) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_unlock_code(self): try: self.__field_unlock_code except: self.__field_unlock_code=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) return self.__field_unlock_code.getvalue() def __setfield_unlock_code(self, value): if isinstance(value,UINT): self.__field_unlock_code=value else: self.__field_unlock_code=UINT(value,**{'sizeinbytes': 1, 'default': 0x00 }) def __delfield_unlock_code(self): del self.__field_unlock_code unlock_code=property(__getfield_unlock_code, __setfield_unlock_code, __delfield_unlock_code, None) def __getfield_unlock_key(self): return self.__field_unlock_key.getvalue() def __setfield_unlock_key(self, value): if isinstance(value,UINT): self.__field_unlock_key=value else: self.__field_unlock_key=UINT(value,**{'sizeinbytes': 4}) def __delfield_unlock_key(self): del self.__field_unlock_key unlock_key=property(__getfield_unlock_key, __setfield_unlock_key, __delfield_unlock_key, None) def __getfield_zero(self): try: self.__field_zero except: self.__field_zero=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) return self.__field_zero.getvalue() def __setfield_zero(self, value): if isinstance(value,UINT): self.__field_zero=value else: self.__field_zero=UINT(value,**{'sizeinbytes': 1, 'default': 0x00 }) def __delfield_zero(self): del self.__field_zero zero=property(__getfield_zero, __setfield_zero, __delfield_zero, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('unlock_code', self.__field_unlock_code, None) yield ('unlock_key', self.__field_unlock_key, None) yield ('zero', self.__field_zero, None) class ULRes(BaseProtogenClass): "" __fields=['cmd', 'unlock_code', 'unlock_key', 'unlock_ok'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ULRes,self).__init__(**dict) if self.__class__ is ULRes: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ULRes,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ULRes,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_cmd.writetobuffer(buf) self.__field_unlock_code.writetobuffer(buf) self.__field_unlock_key.writetobuffer(buf) self.__field_unlock_ok.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1}) self.__field_cmd.readfrombuffer(buf) self.__field_unlock_code=UINT(**{'sizeinbytes': 1}) self.__field_unlock_code.readfrombuffer(buf) self.__field_unlock_key=UINT(**{'sizeinbytes': 4}) self.__field_unlock_key.readfrombuffer(buf) self.__field_unlock_ok=UINT(**{'sizeinbytes': 1}) self.__field_unlock_ok.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_unlock_code(self): return self.__field_unlock_code.getvalue() def __setfield_unlock_code(self, value): if isinstance(value,UINT): self.__field_unlock_code=value else: self.__field_unlock_code=UINT(value,**{'sizeinbytes': 1}) def __delfield_unlock_code(self): del self.__field_unlock_code unlock_code=property(__getfield_unlock_code, __setfield_unlock_code, __delfield_unlock_code, None) def __getfield_unlock_key(self): return self.__field_unlock_key.getvalue() def __setfield_unlock_key(self, value): if isinstance(value,UINT): self.__field_unlock_key=value else: self.__field_unlock_key=UINT(value,**{'sizeinbytes': 4}) def __delfield_unlock_key(self): del self.__field_unlock_key unlock_key=property(__getfield_unlock_key, __setfield_unlock_key, __delfield_unlock_key, None) def __getfield_unlock_ok(self): return self.__field_unlock_ok.getvalue() def __setfield_unlock_ok(self, value): if isinstance(value,UINT): self.__field_unlock_ok=value else: self.__field_unlock_ok=UINT(value,**{'sizeinbytes': 1}) def __delfield_unlock_ok(self): del self.__field_unlock_ok unlock_ok=property(__getfield_unlock_ok, __setfield_unlock_ok, __delfield_unlock_ok, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('unlock_code', self.__field_unlock_code, None) yield ('unlock_key', self.__field_unlock_key, None) yield ('unlock_ok', self.__field_unlock_ok, None) class DMKeyReq(BaseProtogenClass): "Slightly different command for DMv6" __fields=['cmd', 'unlock_code', 'unlock_key', 'zero', 'option'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(DMKeyReq,self).__init__(**dict) if self.__class__ is DMKeyReq: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(DMKeyReq,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(DMKeyReq,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0xFE }) self.__field_cmd.writetobuffer(buf) try: self.__field_unlock_code except: self.__field_unlock_code=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) self.__field_unlock_code.writetobuffer(buf) try: self.__field_unlock_key except: self.__field_unlock_key=UINT(**{'sizeinbytes': 4, 'default': 0x00 }) self.__field_unlock_key.writetobuffer(buf) try: self.__field_zero except: self.__field_zero=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) self.__field_zero.writetobuffer(buf) try: self.__field_option except: self.__field_option=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) self.__field_option.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0xFE }) self.__field_cmd.readfrombuffer(buf) self.__field_unlock_code=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) self.__field_unlock_code.readfrombuffer(buf) self.__field_unlock_key=UINT(**{'sizeinbytes': 4, 'default': 0x00 }) self.__field_unlock_key.readfrombuffer(buf) self.__field_zero=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) self.__field_zero.readfrombuffer(buf) self.__field_option=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) self.__field_option.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0xFE }) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'default': 0xFE }) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_unlock_code(self): try: self.__field_unlock_code except: self.__field_unlock_code=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) return self.__field_unlock_code.getvalue() def __setfield_unlock_code(self, value): if isinstance(value,UINT): self.__field_unlock_code=value else: self.__field_unlock_code=UINT(value,**{'sizeinbytes': 1, 'default': 0x00 }) def __delfield_unlock_code(self): del self.__field_unlock_code unlock_code=property(__getfield_unlock_code, __setfield_unlock_code, __delfield_unlock_code, None) def __getfield_unlock_key(self): try: self.__field_unlock_key except: self.__field_unlock_key=UINT(**{'sizeinbytes': 4, 'default': 0x00 }) return self.__field_unlock_key.getvalue() def __setfield_unlock_key(self, value): if isinstance(value,UINT): self.__field_unlock_key=value else: self.__field_unlock_key=UINT(value,**{'sizeinbytes': 4, 'default': 0x00 }) def __delfield_unlock_key(self): del self.__field_unlock_key unlock_key=property(__getfield_unlock_key, __setfield_unlock_key, __delfield_unlock_key, None) def __getfield_zero(self): try: self.__field_zero except: self.__field_zero=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) return self.__field_zero.getvalue() def __setfield_zero(self, value): if isinstance(value,UINT): self.__field_zero=value else: self.__field_zero=UINT(value,**{'sizeinbytes': 1, 'default': 0x00 }) def __delfield_zero(self): del self.__field_zero zero=property(__getfield_zero, __setfield_zero, __delfield_zero, None) def __getfield_option(self): try: self.__field_option except: self.__field_option=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) return self.__field_option.getvalue() def __setfield_option(self, value): if isinstance(value,UINT): self.__field_option=value else: self.__field_option=UINT(value,**{'sizeinbytes': 1, 'default': 0x00 }) def __delfield_option(self): del self.__field_option option=property(__getfield_option, __setfield_option, __delfield_option, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('unlock_code', self.__field_unlock_code, None) yield ('unlock_key', self.__field_unlock_key, None) yield ('zero', self.__field_zero, None) yield ('option', self.__field_option, None) class DMKeyResp(BaseProtogenClass): "Return the key/seed needed to transition to DMv6" __fields=['cmd', 'unlock_code', 'unlock_key'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(DMKeyResp,self).__init__(**dict) if self.__class__ is DMKeyResp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(DMKeyResp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(DMKeyResp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_cmd.writetobuffer(buf) self.__field_unlock_code.writetobuffer(buf) self.__field_unlock_key.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1}) self.__field_cmd.readfrombuffer(buf) self.__field_unlock_code=UINT(**{'sizeinbytes': 1}) self.__field_unlock_code.readfrombuffer(buf) self.__field_unlock_key=UINT(**{'sizeinbytes': 4}) self.__field_unlock_key.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_unlock_code(self): return self.__field_unlock_code.getvalue() def __setfield_unlock_code(self, value): if isinstance(value,UINT): self.__field_unlock_code=value else: self.__field_unlock_code=UINT(value,**{'sizeinbytes': 1}) def __delfield_unlock_code(self): del self.__field_unlock_code unlock_code=property(__getfield_unlock_code, __setfield_unlock_code, __delfield_unlock_code, None) def __getfield_unlock_key(self): return self.__field_unlock_key.getvalue() def __setfield_unlock_key(self, value): if isinstance(value,UINT): self.__field_unlock_key=value else: self.__field_unlock_key=UINT(value,**{'sizeinbytes': 4}) def __delfield_unlock_key(self): del self.__field_unlock_key unlock_key=property(__getfield_unlock_key, __setfield_unlock_key, __delfield_unlock_key, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('unlock_code', self.__field_unlock_code, None) yield ('unlock_key', self.__field_unlock_key, None) class DMEnterReq(BaseProtogenClass): "Request to transition to DMv6" __fields=['cmd', 'unlock_code', 'unlock_key', 'zero', 'option', 'unlock_key2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(DMEnterReq,self).__init__(**dict) if self.__class__ is DMEnterReq: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(DMEnterReq,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(DMEnterReq,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0xFE }) self.__field_cmd.writetobuffer(buf) try: self.__field_unlock_code except: self.__field_unlock_code=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) self.__field_unlock_code.writetobuffer(buf) try: self.__field_unlock_key except: self.__field_unlock_key=UINT(**{'sizeinbytes': 4, 'default': 0x00 }) self.__field_unlock_key.writetobuffer(buf) try: self.__field_zero except: self.__field_zero=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) self.__field_zero.writetobuffer(buf) try: self.__field_option except: self.__field_option=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) self.__field_option.writetobuffer(buf) if self.unlock_code==3: try: self.__field_unlock_key2 except: self.__field_unlock_key2=LIST(**{'elementclass': _gen_p_lg_180, 'createdefault': True, 'length': 16 }) self.__field_unlock_key2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0xFE }) self.__field_cmd.readfrombuffer(buf) self.__field_unlock_code=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) self.__field_unlock_code.readfrombuffer(buf) self.__field_unlock_key=UINT(**{'sizeinbytes': 4, 'default': 0x00 }) self.__field_unlock_key.readfrombuffer(buf) self.__field_zero=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) self.__field_zero.readfrombuffer(buf) self.__field_option=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) self.__field_option.readfrombuffer(buf) if self.unlock_code==3: self.__field_unlock_key2=LIST(**{'elementclass': _gen_p_lg_180, 'createdefault': True, 'length': 16 }) self.__field_unlock_key2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'default': 0xFE }) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'default': 0xFE }) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_unlock_code(self): try: self.__field_unlock_code except: self.__field_unlock_code=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) return self.__field_unlock_code.getvalue() def __setfield_unlock_code(self, value): if isinstance(value,UINT): self.__field_unlock_code=value else: self.__field_unlock_code=UINT(value,**{'sizeinbytes': 1, 'default': 0x00 }) def __delfield_unlock_code(self): del self.__field_unlock_code unlock_code=property(__getfield_unlock_code, __setfield_unlock_code, __delfield_unlock_code, None) def __getfield_unlock_key(self): try: self.__field_unlock_key except: self.__field_unlock_key=UINT(**{'sizeinbytes': 4, 'default': 0x00 }) return self.__field_unlock_key.getvalue() def __setfield_unlock_key(self, value): if isinstance(value,UINT): self.__field_unlock_key=value else: self.__field_unlock_key=UINT(value,**{'sizeinbytes': 4, 'default': 0x00 }) def __delfield_unlock_key(self): del self.__field_unlock_key unlock_key=property(__getfield_unlock_key, __setfield_unlock_key, __delfield_unlock_key, None) def __getfield_zero(self): try: self.__field_zero except: self.__field_zero=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) return self.__field_zero.getvalue() def __setfield_zero(self, value): if isinstance(value,UINT): self.__field_zero=value else: self.__field_zero=UINT(value,**{'sizeinbytes': 1, 'default': 0x00 }) def __delfield_zero(self): del self.__field_zero zero=property(__getfield_zero, __setfield_zero, __delfield_zero, None) def __getfield_option(self): try: self.__field_option except: self.__field_option=UINT(**{'sizeinbytes': 1, 'default': 0x00 }) return self.__field_option.getvalue() def __setfield_option(self, value): if isinstance(value,UINT): self.__field_option=value else: self.__field_option=UINT(value,**{'sizeinbytes': 1, 'default': 0x00 }) def __delfield_option(self): del self.__field_option option=property(__getfield_option, __setfield_option, __delfield_option, None) def __getfield_unlock_key2(self): try: self.__field_unlock_key2 except: self.__field_unlock_key2=LIST(**{'elementclass': _gen_p_lg_180, 'createdefault': True, 'length': 16 }) return self.__field_unlock_key2.getvalue() def __setfield_unlock_key2(self, value): if isinstance(value,LIST): self.__field_unlock_key2=value else: self.__field_unlock_key2=LIST(value,**{'elementclass': _gen_p_lg_180, 'createdefault': True, 'length': 16 }) def __delfield_unlock_key2(self): del self.__field_unlock_key2 unlock_key2=property(__getfield_unlock_key2, __setfield_unlock_key2, __delfield_unlock_key2, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('unlock_code', self.__field_unlock_code, None) yield ('unlock_key', self.__field_unlock_key, None) yield ('zero', self.__field_zero, None) yield ('option', self.__field_option, None) if self.unlock_code==3: yield ('unlock_key2', self.__field_unlock_key2, None) def init_key2(self): if self.unlock_code==3 and \ not len(self.unlock_key2): for _idx in range(16): self.unlock_key2.append(0) def convert_to_key2(self,shift): """Convert the key value to key2""" if self.unlock_code!=3: return self.init_key2() _buf=buffer() UINT(sizeinbytes=4, value=~self.unlock_key).writetobuffer(_buf) _key=_buf.getvalue() for _idx in range(4): _nth_key=ord(_key[(_idx + 4 - shift) % 4]) for _idy in range(4): self.unlock_key2[_idx*4+_idy]=_nth_key class _gen_p_lg_180(BaseProtogenClass): 'Anonymous inner class' __fields=['data'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lg_180,self).__init__(**dict) if self.__class__ is _gen_p_lg_180: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lg_180,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lg_180,kwargs) if len(args): dict2={'sizeinbytes': 1, 'default': 0 } dict2.update(kwargs) kwargs=dict2 self.__field_data=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_data except: self.__field_data=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_data.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_data=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_data.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_data(self): try: self.__field_data except: self.__field_data=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,UINT): self.__field_data=value else: self.__field_data=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def iscontainer(self): return True def containerelements(self): yield ('data', self.__field_data, None) class DMEnterResp(BaseProtogenClass): "Response to our request to enter DMv6" __fields=['cmd', 'unlock_code', 'unlock_key', 'result'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(DMEnterResp,self).__init__(**dict) if self.__class__ is DMEnterResp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(DMEnterResp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(DMEnterResp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_cmd.writetobuffer(buf) self.__field_unlock_code.writetobuffer(buf) self.__field_unlock_key.writetobuffer(buf) self.__field_result.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1}) self.__field_cmd.readfrombuffer(buf) self.__field_unlock_code=UINT(**{'sizeinbytes': 1}) self.__field_unlock_code.readfrombuffer(buf) self.__field_unlock_key=UINT(**{'sizeinbytes': 4}) self.__field_unlock_key.readfrombuffer(buf) self.__field_result=UINT(**{'sizeinbytes': 1}) self.__field_result.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_unlock_code(self): return self.__field_unlock_code.getvalue() def __setfield_unlock_code(self, value): if isinstance(value,UINT): self.__field_unlock_code=value else: self.__field_unlock_code=UINT(value,**{'sizeinbytes': 1}) def __delfield_unlock_code(self): del self.__field_unlock_code unlock_code=property(__getfield_unlock_code, __setfield_unlock_code, __delfield_unlock_code, None) def __getfield_unlock_key(self): return self.__field_unlock_key.getvalue() def __setfield_unlock_key(self, value): if isinstance(value,UINT): self.__field_unlock_key=value else: self.__field_unlock_key=UINT(value,**{'sizeinbytes': 4}) def __delfield_unlock_key(self): del self.__field_unlock_key unlock_key=property(__getfield_unlock_key, __setfield_unlock_key, __delfield_unlock_key, None) def __getfield_result(self): return self.__field_result.getvalue() def __setfield_result(self, value): if isinstance(value,UINT): self.__field_result=value else: self.__field_result=UINT(value,**{'sizeinbytes': 1}) def __delfield_result(self): del self.__field_result result=property(__getfield_result, __setfield_result, __delfield_result, "0=Failure, 1=Success") def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('unlock_code', self.__field_unlock_code, None) yield ('unlock_key', self.__field_unlock_key, None) yield ('result', self.__field_result, "0=Failure, 1=Success") class NVReq(BaseProtogenClass): __fields=['cmd', 'field', 'data'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(NVReq,self).__init__(**dict) if self.__class__ is NVReq: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(NVReq,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(NVReq,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x26 }) self.__field_cmd.writetobuffer(buf) self.__field_field.writetobuffer(buf) try: self.__field_data except: self.__field_data=DATA(**{'sizeinbytes': 130, 'default': '\x00'*130 }) self.__field_data.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x26 }) self.__field_cmd.readfrombuffer(buf) self.__field_field=UINT(**{'sizeinbytes': 2}) self.__field_field.readfrombuffer(buf) self.__field_data=DATA(**{'sizeinbytes': 130, 'default': '\x00'*130 }) self.__field_data.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x26 }) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'constant': 0x26 }) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_field(self): return self.__field_field.getvalue() def __setfield_field(self, value): if isinstance(value,UINT): self.__field_field=value else: self.__field_field=UINT(value,**{'sizeinbytes': 2}) def __delfield_field(self): del self.__field_field field=property(__getfield_field, __setfield_field, __delfield_field, None) def __getfield_data(self): try: self.__field_data except: self.__field_data=DATA(**{'sizeinbytes': 130, 'default': '\x00'*130 }) return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,DATA): self.__field_data=value else: self.__field_data=DATA(value,**{'sizeinbytes': 130, 'default': '\x00'*130 }) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('field', self.__field_field, None) yield ('data', self.__field_data, None) class NVRes(BaseProtogenClass): __fields=['cmd', 'field', 'data'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(NVRes,self).__init__(**dict) if self.__class__ is NVRes: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(NVRes,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(NVRes,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_cmd.writetobuffer(buf) self.__field_field.writetobuffer(buf) self.__field_data.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x26 }) self.__field_cmd.readfrombuffer(buf) self.__field_field=UINT(**{'sizeinbytes': 2}) self.__field_field.readfrombuffer(buf) self.__field_data=DATA(**{'sizeinbytes': 130}) self.__field_data.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'constant': 0x26 }) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_field(self): return self.__field_field.getvalue() def __setfield_field(self, value): if isinstance(value,UINT): self.__field_field=value else: self.__field_field=UINT(value,**{'sizeinbytes': 2}) def __delfield_field(self): del self.__field_field field=property(__getfield_field, __setfield_field, __delfield_field, None) def __getfield_data(self): return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,DATA): self.__field_data=value else: self.__field_data=DATA(value,**{'sizeinbytes': 130}) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('field', self.__field_field, None) yield ('data', self.__field_data, None) class FWInfoReq(BaseProtogenClass): __fields=['cmd'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(FWInfoReq,self).__init__(**dict) if self.__class__ is FWInfoReq: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(FWInfoReq,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(FWInfoReq,kwargs) if len(args): dict2={'sizeinbytes': 1, 'constant': 0x00} dict2.update(kwargs) kwargs=dict2 self.__field_cmd=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_cmd.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_cmd.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): try: self.__field_cmd except: self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'constant': 0x00}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) class FWInfoRes(BaseProtogenClass): __fields=['cmd', 'fw_data'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(FWInfoRes,self).__init__(**dict) if self.__class__ is FWInfoRes: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(FWInfoRes,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(FWInfoRes,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_cmd.writetobuffer(buf) self.__field_fw_data.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_cmd.readfrombuffer(buf) self.__field_fw_data=DATA(**{'sizeinbytes': 53}) self.__field_fw_data.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd(self): return self.__field_cmd.getvalue() def __setfield_cmd(self, value): if isinstance(value,UINT): self.__field_cmd=value else: self.__field_cmd=UINT(value,**{'sizeinbytes': 1, 'constant': 0x00}) def __delfield_cmd(self): del self.__field_cmd cmd=property(__getfield_cmd, __setfield_cmd, __delfield_cmd, None) def __getfield_fw_data(self): return self.__field_fw_data.getvalue() def __setfield_fw_data(self, value): if isinstance(value,DATA): self.__field_fw_data=value else: self.__field_fw_data=DATA(value,**{'sizeinbytes': 53}) def __delfield_fw_data(self): del self.__field_fw_data fw_data=property(__getfield_fw_data, __setfield_fw_data, __delfield_fw_data, None) def iscontainer(self): return True def containerelements(self): yield ('cmd', self.__field_cmd, None) yield ('fw_data', self.__field_fw_data, None) def get_compile_time(self): _comptime = re.findall(r'(\d\d):(\d\d):(\d\d)', self.fw_data)[0] return int(_comptime[0]) * 100 + int (_comptime[1]) class data(BaseProtogenClass): __fields=['bytes'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(data,self).__init__(**dict) if self.__class__ is data: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(data,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(data,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_bytes=DATA(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_bytes.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_bytes=DATA() self.__field_bytes.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_bytes(self): return self.__field_bytes.getvalue() def __setfield_bytes(self, value): if isinstance(value,DATA): self.__field_bytes=value else: self.__field_bytes=DATA(value,) def __delfield_bytes(self): del self.__field_bytes bytes=property(__getfield_bytes, __setfield_bytes, __delfield_bytes, None) def iscontainer(self): return True def containerelements(self): yield ('bytes', self.__field_bytes, None) bitpim-1.0.7+dfsg1/src/phones/p_sanyo.p0000644001616600161660000004210111026354224016060 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_sanyo.p 4618 2008-06-19 03:55:00Z sawecw $ %{ """Various descriptions of data specific to Sanyo phones""" from prototypes import * from prototypeslg import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 NUMCALLHISTORY=20 NUMPHONENUMBERS=7 NUMMESSAGESLOTS=128 NUMTODOSLOTS=20 HASRINGPICBUF=1 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=9 OUTGOING=0 INCOMING=1 MISSED=2 %} PACKET sanyoerror: 1 UINT errorcode * UNKNOWN unknown PACKET firmwarerequest: 1 UINT {'constant': 0x00} +command PACKET firmwareresponse: 1 UINT command * UNKNOWN unknown # 11 USTRING {'terminator': None} date1 # 8 USTRING {'terminator': None} time1 # 11 USTRING {'terminator': None} date2 # 8 USTRING {'terminator': None} time2 # 8 USTRING {'terminator': None} string1 # 1 UNKNOWN dunno1 # 11 USTRING {'terminator': None} date3 # 1 UNKNOWN dunno2 # 8 USTRING {'terminator': None} time3 # 11 UNKNOWN dunno3 # 10 USTRING {'terminator': None} firmware # 7 UNKNOWN dunno4 # 16 USTRING {'terminator': None} phonemodel # 5 USTRING {'terminator': None} prl PACKET beginendupdaterequest: 1 UINT {'constant': 0x29} +command 2 UINT beginend PACKET beginendupdateresponse: 1 UINT command 2 UINT beginend PACKET statusrequest: 1 UINT {'constant': 0x0c} +command PACKET statusresponse: P UINT {'constant': 0x0} readyvalue 1 UINT command 3 UNKNOWN dunno1 4 UINT esn 1 UINT flag0 14 UNKNOWN dunno2 1 UINT ready 1 UINT dunno3 1 UINT flag2 6 UNKNOWN dunno4 1 UINT flag3 * UNKNOWN unknown PACKET lockcoderequest: 1 UINT {'constant': 0x26} +command1 2 UINT {'constant': 0x52} +command2 130 UNKNOWN +pad PACKET lockcoderesponse: 1 UINT {'constant': 0x26} +command1 2 UINT {'constant': 0x52} +command2 4 USTRING {'raiseonunterminatedread': False} lockcode * UNKNOWN pad PACKET sanyofirmwarerequest: 1 UINT {'constant': 0x00} +command PACKET sanyofirmwareresponse: 1 UINT command 11 USTRING {'terminator': None} date1 8 USTRING {'terminator': None} time1 11 USTRING {'terminator': None} date2 8 USTRING {'terminator': None} time2 8 USTRING {'terminator': None} string1 1 UNKNOWN dunno1 11 USTRING {'terminator': None} date3 1 UNKNOWN dunno2 8 USTRING {'terminator': None} time3 11 UNKNOWN dunno3 10 USTRING {'terminator': None} firmware 7 UNKNOWN pad 16 USTRING {'terminator': None} phonemodel 5 USTRING {'terminator': None} prl PACKET reconditionedrequest: 1 UINT {'constant': 0x26} +command1 2 UINT {'constant': 0x0c1b} +command2 130 UNKNOWN +pad PACKET reconditionedresponse: 1 UINT {'constant': 0x26} command1 2 UINT {'constant': 0x0c1b} command2 1 UINT reconditioned * UNKNOWN pad PACKET phonenumberrequest: 1 UINT {'constant': 0x26} +command1 1 UINT {'constant': 0xb2} +command2 1 UINT {'constant': 0} +zero 130 UNKNOWN +pad PACKET phonenumberresponse: 1 UINT {'constant': 0x26} command1 1 UINT {'constant': 0xb2} command2 2 UNKNOWN pad1 10 USTRING {'raiseonunterminatedread': False} myphonenumber 119 UNKNOWN pad2 PACKET {'readwrite': 0x0d} sanyoheader: 1 UINT readwrite 1 UINT command 1 UINT packettype PACKET esnrequest: 1 UINT {'constant': 0x01} +command PACKET esnresponse: 1 UINT {'constant': 0x01} command 4 UINT esn PACKET ownerinforequest: * sanyoheader {'packettype': 0x0c, 'command': 0x3b} +header 502 UNKNOWN +pad PACKET ownerentry: 16 USTRING {'raiseonunterminatedread': False} ownername 2 UINT birthyear 1 UINT birthmonth 1 UINT birthday 1 UINT bloodtype "0: ?, 1: A, 2: B, 3: O, 4: AB" 96 USTRING {'raiseonunterminatedread': False} address 14 UNKNOWN +pad 48 USTRING {'raiseonunterminatedread': False} homeemail 48 USTRING {'raiseonunterminatedread': False} workemail 48 USTRING {'raiseonunterminatedread': False} homephone 48 USTRING {'raiseonunterminatedread': False} workphone PACKET ownerinforesponse: * sanyoheader header * ownerentry entry 178 UNKNOWN pad PACKET eventrequest: * sanyoheader {'packettype': 0x0c, 'command': 0x23} +header 1 UINT slot 501 UNKNOWN +pad PACKET evententry: 1 UINT slot 1 UINT flag "0: Not used, 1: Scheduled, 2: Already Happened" 14 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} eventname 7 UNKNOWN +pad1 1 UINT eventname_len 4 UINT start "# seconds since Jan 1, 1980 approximately" 4 UINT end 14 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} location 7 UNKNOWN +pad2 1 UINT location_len 1 UINT ringtone "0: Beep, 1: Voice, 2: Silent" 4 UINT alarmdiff "Displayed alarm time" 1 UINT period "No, Daily, Weekly, Monthly, Yearly" 1 UINT dom "Day of month for the event" 4 UINT alarm 1 UINT {'default': 0} +serial "Some kind of serial number" PACKET eventresponse: * sanyoheader header * evententry entry 436 UNKNOWN pad PACKET eventupdaterequest: * sanyoheader {'readwrite': 0x0e, 'packettype': 0x0c, 'command':0x23} +header * evententry entry 436 UNKNOWN +pad PACKET callalarmrequest: * sanyoheader {'packettype': 0x0c, 'command': 0x24} +header 1 UINT slot 501 UNKNOWN +pad PACKET callalarmentry: P UINT {'constant': 0} ringtone 1 UINT slot 1 UINT flag "0: Not used, 1: Scheduled, 2: Already Happened" 1 UINT {'default': 0} +dunno1 "Related to Snooze?" 49 USTRING {'raiseonunterminatedread': False} phonenum 1 UINT phonenum_len 4 UINT date "# seconds since Jan 1, 1980 approximately" 1 UINT period "No, Daily, Weekly, Monthly, Yearly" 1 UINT dom "Day of month for the event" 4 UINT datedup "Copy of the date. Always the same???" 16 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} name 1 UNKNOWN +pad1 1 UINT name_len 1 UINT phonenumbertype "1: Home, 2: Work, ..." 2 UINT phonenumberslot 1 UINT {'default': 0} +serial PACKET callalarmresponse: * sanyoheader header * callalarmentry entry 417 UNKNOWN pad PACKET callalarmupdaterequest: * sanyoheader {'readwrite': 0x0e, 'packettype': 0x0c, 'command':0x24} +header * callalarmentry entry 417 UNKNOWN +pad PACKET todorequest: * sanyoheader {'packettype': 0x0c, 'command': 0x25} +header 1 UINT slot 501 UNKNOWN +pad PACKET todoentry: 1 UINT slot 1 UINT flag "0: Not used, 1: Used" 14 USTRING {'raiseonunterminatedread': False} todo 7 UNKNOWN +pad1 1 UINT todo_len 1 UINT priority "0: Normal, 1: Urgent, 2: Done" 1 UINT +dunno "Maybe always zero" 1 UINT order "Gets sorted on screen in this order" PACKET todoresponse: * sanyoheader header * todoentry entry 472 UNKNOWN pad PACKET holidaybitsrequest: * UNKNOWN unknown PACKET holidaybitsresponse: * UNKNOWN unknown PACKET weeklyholidaybitsrequest: * UNKNOWN unknown PACKET weeklyholidaybitsresponse: * UNKNOWN unknown PACKET foldernamerequest: * sanyoheader {'packettype': 0x0b, 'command': 0xef} +header 1 UINT index 501 UNKNOWN +pad PACKET foldernameentry: 1 UINT index 1 UINT flag "0 if empty, 1 in use" 1 UINT autofile "If 1, autofile messages with keyword" 1 UINT notify 1 UINT icon 13 USTRING {'raiseonunterminatedread': False} name "Name of the folder" 3 UNKNOWN +pad 14 USTRING {'raiseonunterminatedread': False} keyword PACKET foldernameresponse: * sanyoheader header * foldernameentry entry 467 UNKNOWN pad PACKET messagerequest: * sanyoheader {'packettype': 0x0c, 'command': 0xe1} +header 1 UINT slot 501 UNKNOWN +pad PACKET messageentry: 1 UINT slot 1 UINT messagetype 1 UINT dunno1 1 UINT dunno2 1 UINT dunno3 1 UINT dunno4 1 UINT dunno5 1 UINT dunno6 1 UINT dunno7 1 UINT dunno8 1 UINT dunno9 1 UINT dunno10 1 UINT dunno11 1 UINT message_len 255 USTRING message "Text of the notification" 1 UNKNOWN pad1 1 UINT year 1 UINT month 1 UINT day 1 UINT hour 1 UINT minute 1 UINT second 1 UINT phonenum_len 33 USTRING phonenum 1 UINT dunno12 38 UNKNOWN pad2 1 UINT dunno13 1 UINT folder PACKET messageresponse: * sanyoheader header * messageentry entry 151 UNKNOWN pad # Call History # 0x3d Outgoing # 0x3e Incoming # 0x3f Missed PACKET historyrequest: P UINT type "0: Outgoing, 1: Incoming, 2: Missed" if self.type==OUTGOING: * sanyoheader {'packettype': 0x0c, 'command': 0x3d} +header if self.type==INCOMING: * sanyoheader {'packettype': 0x0c, 'command': 0x3e} +header if self.type==MISSED: * sanyoheader {'packettype': 0x0c, 'command': 0x3f} +header 1 UINT slot 501 UNKNOWN +pad # Call History # 0x60 Outgoing # 0x61 Incoming # 0x62 Missed PACKET historymiscrequest: P UINT type "0: Outgoing, 1: Incoming, 2: Missed" if self.type==OUTGOING: * sanyoheader {'packettype': 0x0c, 'command': 0x60} +header if self.type==INCOMING: * sanyoheader {'packettype': 0x0c, 'command': 0x61} +header if self.type==MISSED: * sanyoheader {'packettype': 0x0c, 'command': 0x62} +header 1 UINT slot 501 UNKNOWN +pad PACKET historyentry: 2 UINT slot 1 UNKNOWN dunno1 4 GPSDATE date 1 UINT phonenumlen 48 USTRING {'raiseonunterminatedread': False} phonenum 16 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} name 1 UNKNOWN dunno2 1 UNKNOWN dunno3 PACKET historyresponse: * sanyoheader header * historyentry entry 428 UNKNOWN pad PACKET historymiscentry: 2 UINT slot 2 UINT pbslotandtype 2 UINT dunno1 1 UINT dunno2 1 UINT dunno3 1 UINT dunno4 PACKET historymiscresponse: * sanyoheader header * historymiscentry entry 493 UNKNOWN pad PACKET bufferpartrequest: P UINT {'constant': 500} bufpartsize * sanyoheader {'packettype': 0x0f} +header 502 UNKNOWN +pad PACKET bufferpartresponse: P UINT {'constant': 500} bufpartsize * sanyoheader header * DATA {'sizeinbytes': self.bufpartsize} data 2 UNKNOWN pad PACKET bufferpartupdaterequest: P UINT {'constant': 500} bufpartsize * sanyoheader {'readwrite': 0x0e, 'packettype': 0x0f} +header * DATA {'sizeinbytes': self.bufpartsize} data 2 UNKNOWN +pad PACKET phonebookslotrequest: * sanyoheader {'packettype': 0x0c, 'command': 0x28} +header 2 UINT slot 500 UNKNOWN +pad PACKET phonenumber: 1 UINT {'default': 0} +number_len 49 USTRING {'default': ""} +number PACKET phonebookentry: 2 UINT slot 2 UINT slotdup 16 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} name * LIST {'length': 7, 'createdefault': True, 'elementclass': phonenumber} +numbers 1 UINT +email_len 49 USTRING {'default': ""} +email 1 UINT +url_len 49 USTRING {'default': ""} +url 1 BOOL +secret 1 UINT name_len PACKET phonebookslotresponse: * sanyoheader header * phonebookentry entry 30 UNKNOWN pad PACKET phonebookslotupdaterequest: * sanyoheader {'packettype': 0x0c, 'readwrite': 0x0e, 'command': 0x28} +header * phonebookentry entry 30 UNKNOWN +pad PACKET voicedialrequest: * sanyoheader {'packettype': 0x0b, 'command': 0xed} +header 1 UINT slot 501 UNKNOWN +pad PACKET voicedialentry: 1 UINT slot 1 UINT flag "1 if voice dial slot in use" 2 UNKNOWN pad1 2 UINT phonenumberslot 1 UINT phonenumbertype "1: Home, 2: Work, ..." PACKET voicedialresponse: * sanyoheader header * voicedialentry entry 495 UNKNOWN pad2 PACKET t9request: * UNKNOWN unknown PACKET t9response: * UNKNOWN unknown PACKET calleridentry: 2 UINT {'default': 0xffff} +pbslotandtype "Low 12 bits, slotnum, top 4 bits, type" 1 UINT {'default': 0} +actualnumberlen "Length of the actual phone number" 10 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': "", 'terminator': None} +numberfragment PACKET calleridbuffer: "Index so that phone can show a name instead of number" # This 7000 byte buffer is formed from the concatenation of 500 bytes of # payload from commands 0X 50 0F through 0X 5D 0F P UINT {'constant': 500} maxentries P UINT {'constant': 0x50} startcommand "Starting command for R/W buf parts" P UINT {'constant': 7000} bufsize P USTRING {'default': "callerid"} +comment 2 UINT numentries "Number phone numbers" * LIST {'length': self.maxentries, 'elementclass': calleridentry, 'createdefault': True} +items 498 UNKNOWN +pad PACKET ringerpicbuffer: "Index of ringer and picture assignments" # This 1000 byte buffer is formed from the concatenation of 500 bytes of # payload from commands 0X 46 0F through 0X 47 0F P UINT {'constant': _NUMPBSLOTS} numpbslots "Number of phone book slots" P UINT {'constant': 0x46} startcommand "Starting command for R/W buf parts" P UINT {'constant': 1000} bufsize P USTRING {'default': "ringer/picture assignments"} +comment * LIST {'length': _NUMPBSLOTS} +ringtones: 1 UINT ringtone "ringtone index" * LIST {'length': _NUMPBSLOTS} +wallpapers: 1 UINT wallpaper "wallpaper index" 400 UNKNOWN +pad PACKET wallpaperbuffer: "Addition buffer of wallpaper assignment info" # 1500 byte buffer P UINT {'constant': _NUMPBSLOTS} numpbslots "Number of phone book slots" P UINT {'constant': 0x69} startcommand "Starting command for R/W buf parts" P UINT {'constant': 1500} bufsize P USTRING {'default': "wallpaper assignment info"} +comment * LIST {'length': _NUMPBSLOTS, 'elementclass': wallpaperinfo} +wallpapers PACKET wallpaperinfo: "5 byte structure with info about wallpaper assignments" 1 UINT flag 2 UINT word1 2 UINT word2 PACKET pbsortbuffer: "Various arrays for sorting the phone book, speed dial, determining which" # slots are in use, etc. # This 4000 byte buffer is formed from the concatenation of 500 bytes of # payload from commands 0X 3c 0F through 0X 43 0F P UINT {'constant': 0x3c} startcommand "Starting command for R/W buf parts" P UINT {'constant': 4000} bufsize P USTRING {'default': "sort buffer"} +comment * LIST {'length': _NUMPBSLOTS, 'createdefault': True} +usedflags: 1 UINT used "1 if slot in use" 2 UINT slotsused 2 UINT slotsused2 "# slots containing a phone number" 2 UINT numemail "Num of slots with email" 2 UINT numurl "Num of slots with URL" * LIST {'length': _NUMPBSLOTS} +firsttypes: 1 UINT firsttype "First phone number type in each slot" * LIST {'length': _NUMPBSLOTS} +sortorder: 2 UINT {'default': 0xffff} pbslot * USTRING {'terminator': None, 'sizeinbytes': _NUMPBSLOTS} pbfirstletters * LIST {'length': _NUMPBSLOTS} +sortorder2: "Sort order for entries with phone numbers" 2 UINT {'default': 0xffff} pbslot * LIST {'length': _NUMSPEEDDIALS} +speeddialindex: 2 UINT {'default': 0xffff} pbslotandtype * LIST {'length': _NUMLONGNUMBERS} +longnumbersindex: 2 UINT {'default': 0xffff} pbslotandtype * LIST {'length': _NUMPBSLOTS} +emails: "Sorted list of slots with Email" 2 UINT {'default': 0xffff} pbslot * USTRING {'terminator': None, 'sizeinbytes': _NUMPBSLOTS} emailfirstletters "First letters in sort order" * LIST {'length': _NUMPBSLOTS} +urls: "Sorted list of slots with a URL" 2 UINT {'default': 0xffff} pbslot * USTRING {'terminator': None, 'sizeinbytes': _NUMPBSLOTS} urlfirstletters "First letters in sort order" 66 UNKNOWN +pad PACKET sanyomediaheader: 2 UINT {'constant': 0xfa} +fa 1 UINT {'default': 0x05} +faset 2 UINT command 2 UNKNOWN +pad PACKET sanyosendfilename: * sanyomediaheader {'command': 0xffa1} +header 1 UINT {'constant': 0x20} +payloadsize 32 USTRING {'default': ""} +filename PACKET sanyosendfilesize: * sanyomediaheader {'command': 0xffc1} +header 1 UINT {'constant': 0x20} +payloadsize 1 UNKNOWN +pad1 2 UINT filesize 29 UNKNOWN +pad2 PACKET sanyosendfilefragment: * sanyomediaheader +header 1 UINT {'constant': 0x20} +payloadsize 32 DATA data PACKET sanyosendfileterminator: * sanyomediaheader {'command': 0xffe1} +header 1 UINT {'constant': 0x20} +payloadsize 32 UNKNOWN +pad PACKET sanyosendfileresponse: * sanyomediaheader +header 1 UINT payloadsize 32 UNKNOWN pad PACKET study: * sanyoheader +header 2 UINT slot 500 UNKNOWN +pad PACKET studyresponse: * sanyoheader header * UNKNOWN data bitpim-1.0.7+dfsg1/src/phones/p_lgvx6100.py0000644001616600161660000050623010466234100016414 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VX6100""" from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx4400 except as noted # below from p_lgvx4400 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=500 MAXCALENDARDESCRIPTION=38 NUMEMAILS=3 NUMPHONENUMBERS=5 MEMOLENGTH=65 PHONE_ENCODING='iso8859_1' CAL_NO_VOICE=0xffff CAL_REPEAT_DATE=(2999, 12, 31) cal_has_voice_id=True cal_voice_id_ofs=0x11 cal_voice_ext='.qcp' # full name='sche000.qcp' class speeddial(BaseProtogenClass): __fields=['entry', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddial,self).__init__(**dict) if self.__class__ is speeddial: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddial,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddial,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.writetobuffer(buf) try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.readfrombuffer(buf) self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,UINT): self.__field_entry=value else: self.__field_entry=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_number(self): try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,UINT): self.__field_number=value else: self.__field_number=UINT(value,**{'sizeinbytes': 1, 'default': 0xff}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('entry', self.__field_entry, None) yield ('number', self.__field_number, None) class speeddials(BaseProtogenClass): __fields=['speeddials'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddials,self).__init__(**dict) if self.__class__ is speeddials: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddials,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddials,kwargs) if len(args): dict2={'length': NUMSPEEDDIALS, 'elementclass': speeddial} dict2.update(kwargs) kwargs=dict2 self.__field_speeddials=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_speeddials(self): try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) return self.__field_speeddials.getvalue() def __setfield_speeddials(self, value): if isinstance(value,LIST): self.__field_speeddials=value else: self.__field_speeddials=LIST(value,**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) def __delfield_speeddials(self): del self.__field_speeddials speeddials=property(__getfield_speeddials, __setfield_speeddials, __delfield_speeddials, None) def iscontainer(self): return True def containerelements(self): yield ('speeddials', self.__field_speeddials, None) class indexentry(BaseProtogenClass): __fields=['index', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_index.writetobuffer(buf) try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 50, 'default': ""}) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_index.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 50, 'default': ""}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 50, 'default': ""}) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 50, 'default': ""}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('name', self.__field_name, None) class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['numactiveitems', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('items', self.__field_items, None) class pbgroup(BaseProtogenClass): "A single group" __fields=['icon', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroup,self).__init__(**dict) if self.__class__ is pbgroup: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroup,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroup,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_icon.writetobuffer(buf) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_icon=UINT(**{'sizeinbytes': 1}) self.__field_icon.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_icon(self): return self.__field_icon.getvalue() def __setfield_icon(self, value): if isinstance(value,UINT): self.__field_icon=value else: self.__field_icon=UINT(value,**{'sizeinbytes': 1}) def __delfield_icon(self): del self.__field_icon icon=property(__getfield_icon, __setfield_icon, __delfield_icon, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('icon', self.__field_icon, None) yield ('name', self.__field_name, None) class pbgroups(BaseProtogenClass): "Phonebook groups" __fields=['groups'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroups,self).__init__(**dict) if self.__class__ is pbgroups: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroups,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroups,kwargs) if len(args): dict2={'elementclass': pbgroup} dict2.update(kwargs) kwargs=dict2 self.__field_groups=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_groups(self): try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) return self.__field_groups.getvalue() def __setfield_groups(self, value): if isinstance(value,LIST): self.__field_groups=value else: self.__field_groups=LIST(value,**{'elementclass': pbgroup}) def __delfield_groups(self): del self.__field_groups groups=property(__getfield_groups, __setfield_groups, __delfield_groups, None) def iscontainer(self): return True def containerelements(self): yield ('groups', self.__field_groups, None) class pbentry(BaseProtogenClass): __fields=['serial1', 'entrysize', 'serial2', 'entrynumber', 'name', 'group', 'emails', 'url', 'ringtone', 'msgringtone', 'secret', 'memo', 'wallpaper', 'numbertypes', 'numbers', 'unknown20c'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_serial1.writetobuffer(buf) self.__field_entrysize.writetobuffer(buf) self.__field_serial2.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_group.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx6100_93, 'length': NUMEMAILS}) self.__field_emails.writetobuffer(buf) self.__field_url.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_msgringtone.writetobuffer(buf) self.__field_secret.writetobuffer(buf) self.__field_memo.writetobuffer(buf) self.__field_wallpaper.writetobuffer(buf) try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx6100_101, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx6100_103, 'length': NUMPHONENUMBERS}) self.__field_numbers.writetobuffer(buf) try: self.__field_unknown20c except: self.__field_unknown20c=UNKNOWN() self.__field_unknown20c.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_entrysize=UINT(**{'sizeinbytes': 2}) self.__field_entrysize.readfrombuffer(buf) self.__field_serial2=UINT(**{'sizeinbytes': 4}) self.__field_serial2.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 2}) self.__field_entrynumber.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 2}) self.__field_group.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx6100_93, 'length': NUMEMAILS}) self.__field_emails.readfrombuffer(buf) self.__field_url=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_url.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_msgringtone=UINT(**{'sizeinbytes': 1}) self.__field_msgringtone.readfrombuffer(buf) self.__field_secret=BOOL(**{'sizeinbytes': 1}) self.__field_secret.readfrombuffer(buf) self.__field_memo=USTRING(**{'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) self.__field_memo.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 1}) self.__field_wallpaper.readfrombuffer(buf) self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx6100_101, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.readfrombuffer(buf) self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx6100_103, 'length': NUMPHONENUMBERS}) self.__field_numbers.readfrombuffer(buf) self.__field_unknown20c=UNKNOWN() self.__field_unknown20c.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_entrysize(self): return self.__field_entrysize.getvalue() def __setfield_entrysize(self, value): if isinstance(value,UINT): self.__field_entrysize=value else: self.__field_entrysize=UINT(value,**{'sizeinbytes': 2}) def __delfield_entrysize(self): del self.__field_entrysize entrysize=property(__getfield_entrysize, __setfield_entrysize, __delfield_entrysize, None) def __getfield_serial2(self): return self.__field_serial2.getvalue() def __setfield_serial2(self, value): if isinstance(value,UINT): self.__field_serial2=value else: self.__field_serial2=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial2(self): del self.__field_serial2 serial2=property(__getfield_serial2, __setfield_serial2, __delfield_serial2, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 2}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 2}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx6100_93, 'length': NUMEMAILS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_lgvx6100_93, 'length': NUMEMAILS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, None) def __getfield_url(self): return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,USTRING): self.__field_url=value else: self.__field_url=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "ringtone index for a call") def __getfield_msgringtone(self): return self.__field_msgringtone.getvalue() def __setfield_msgringtone(self, value): if isinstance(value,UINT): self.__field_msgringtone=value else: self.__field_msgringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_msgringtone(self): del self.__field_msgringtone msgringtone=property(__getfield_msgringtone, __setfield_msgringtone, __delfield_msgringtone, "ringtone index for a text message") def __getfield_secret(self): return self.__field_secret.getvalue() def __setfield_secret(self, value): if isinstance(value,BOOL): self.__field_secret=value else: self.__field_secret=BOOL(value,**{'sizeinbytes': 1}) def __delfield_secret(self): del self.__field_secret secret=property(__getfield_secret, __setfield_secret, __delfield_secret, None) def __getfield_memo(self): return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,USTRING): self.__field_memo=value else: self.__field_memo=USTRING(value,**{'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 1}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_numbertypes(self): try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx6100_101, 'length': NUMPHONENUMBERS}) return self.__field_numbertypes.getvalue() def __setfield_numbertypes(self, value): if isinstance(value,LIST): self.__field_numbertypes=value else: self.__field_numbertypes=LIST(value,**{'elementclass': _gen_p_lgvx6100_101, 'length': NUMPHONENUMBERS}) def __delfield_numbertypes(self): del self.__field_numbertypes numbertypes=property(__getfield_numbertypes, __setfield_numbertypes, __delfield_numbertypes, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx6100_103, 'length': NUMPHONENUMBERS}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'elementclass': _gen_p_lgvx6100_103, 'length': NUMPHONENUMBERS}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_unknown20c(self): try: self.__field_unknown20c except: self.__field_unknown20c=UNKNOWN() return self.__field_unknown20c.getvalue() def __setfield_unknown20c(self, value): if isinstance(value,UNKNOWN): self.__field_unknown20c=value else: self.__field_unknown20c=UNKNOWN(value,) def __delfield_unknown20c(self): del self.__field_unknown20c unknown20c=property(__getfield_unknown20c, __setfield_unknown20c, __delfield_unknown20c, None) def iscontainer(self): return True def containerelements(self): yield ('serial1', self.__field_serial1, None) yield ('entrysize', self.__field_entrysize, None) yield ('serial2', self.__field_serial2, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('name', self.__field_name, None) yield ('group', self.__field_group, None) yield ('emails', self.__field_emails, None) yield ('url', self.__field_url, None) yield ('ringtone', self.__field_ringtone, "ringtone index for a call") yield ('msgringtone', self.__field_msgringtone, "ringtone index for a text message") yield ('secret', self.__field_secret, None) yield ('memo', self.__field_memo, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('numbertypes', self.__field_numbertypes, None) yield ('numbers', self.__field_numbers, None) yield ('unknown20c', self.__field_unknown20c, None) class _gen_p_lgvx6100_93(BaseProtogenClass): 'Anonymous inner class' __fields=['email'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx6100_93,self).__init__(**dict) if self.__class__ is _gen_p_lgvx6100_93: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx6100_93,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx6100_93,kwargs) if len(args): dict2={'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_email=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_email.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_email=USTRING(**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_email.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def iscontainer(self): return True def containerelements(self): yield ('email', self.__field_email, None) class _gen_p_lgvx6100_101(BaseProtogenClass): 'Anonymous inner class' __fields=['numbertype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx6100_101,self).__init__(**dict) if self.__class__ is _gen_p_lgvx6100_101: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx6100_101,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx6100_101,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_numbertype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numbertype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numbertype=UINT(**{'sizeinbytes': 1}) self.__field_numbertype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numbertype(self): return self.__field_numbertype.getvalue() def __setfield_numbertype(self, value): if isinstance(value,UINT): self.__field_numbertype=value else: self.__field_numbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_numbertype(self): del self.__field_numbertype numbertype=property(__getfield_numbertype, __setfield_numbertype, __delfield_numbertype, None) def iscontainer(self): return True def containerelements(self): yield ('numbertype', self.__field_numbertype, None) class _gen_p_lgvx6100_103(BaseProtogenClass): 'Anonymous inner class' __fields=['number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx6100_103,self).__init__(**dict) if self.__class__ is _gen_p_lgvx6100_103: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx6100_103,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx6100_103,kwargs) if len(args): dict2={'sizeinbytes': 49, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_number=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) class pbreadentryresponse(BaseProtogenClass): "Results of reading one entry" __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbreadentryresponse,self).__init__(**dict) if self.__class__ is pbreadentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbreadentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbreadentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbupdateentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbupdateentryrequest,self).__init__(**dict) if self.__class__ is pbupdateentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbupdateentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbupdateentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x04, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbappendentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbappendentryrequest,self).__init__(**dict) if self.__class__ is pbappendentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbappendentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbappendentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x03, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class scheduleexception(BaseProtogenClass): __fields=['pos', 'day', 'month', 'year'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexception,self).__init__(**dict) if self.__class__ is scheduleexception: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexception,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexception,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_day.writetobuffer(buf) self.__field_month.writetobuffer(buf) self.__field_year.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_day=UINT(**{'sizeinbytes': 1}) self.__field_day.readfrombuffer(buf) self.__field_month=UINT(**{'sizeinbytes': 1}) self.__field_month.readfrombuffer(buf) self.__field_year=UINT(**{'sizeinbytes': 2}) self.__field_year.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "Refers to event id (position in schedule file) that this suppresses") def __getfield_day(self): return self.__field_day.getvalue() def __setfield_day(self, value): if isinstance(value,UINT): self.__field_day=value else: self.__field_day=UINT(value,**{'sizeinbytes': 1}) def __delfield_day(self): del self.__field_day day=property(__getfield_day, __setfield_day, __delfield_day, None) def __getfield_month(self): return self.__field_month.getvalue() def __setfield_month(self, value): if isinstance(value,UINT): self.__field_month=value else: self.__field_month=UINT(value,**{'sizeinbytes': 1}) def __delfield_month(self): del self.__field_month month=property(__getfield_month, __setfield_month, __delfield_month, None) def __getfield_year(self): return self.__field_year.getvalue() def __setfield_year(self, value): if isinstance(value,UINT): self.__field_year=value else: self.__field_year=UINT(value,**{'sizeinbytes': 2}) def __delfield_year(self): del self.__field_year year=property(__getfield_year, __setfield_year, __delfield_year, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "Refers to event id (position in schedule file) that this suppresses") yield ('day', self.__field_day, None) yield ('month', self.__field_month, None) yield ('year', self.__field_year, None) class scheduleexceptionfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexceptionfile,self).__init__(**dict) if self.__class__ is scheduleexceptionfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexceptionfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexceptionfile,kwargs) if len(args): dict2={'elementclass': scheduleexception} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': scheduleexception}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class scheduleevent(BaseProtogenClass): __fields=['pos', 'start', 'end', 'repeat', 'daybitmap', 'alarmminutes', 'alarmhours', 'alarmtype', 'snoozedelay', 'ringtone', 'description', 'unknown1', 'hasvoice', 'voiceid', 'unknown2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleevent,self).__init__(**dict) if self.__class__ is scheduleevent: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleevent,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleevent,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) self.__field_daybitmap.writetobuffer(buf) self.__field_alarmminutes.writetobuffer(buf) self.__field_alarmhours.writetobuffer(buf) self.__field_alarmtype.writetobuffer(buf) try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_description.writetobuffer(buf) try: self.__field_unknown1 except: self.__field_unknown1=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_unknown1.writetobuffer(buf) self.__field_hasvoice.writetobuffer(buf) self.__field_voiceid.writetobuffer(buf) try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_unknown2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_start=LGCALDATE(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=LGCALDATE(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_repeat=UINT(**{'sizeinbytes': 1}) self.__field_repeat.readfrombuffer(buf) self.__field_daybitmap=UINT(**{'sizeinbytes': 3}) self.__field_daybitmap.readfrombuffer(buf) self.__field_alarmminutes=UINT(**{'sizeinbytes': 1}) self.__field_alarmminutes.readfrombuffer(buf) self.__field_alarmhours=UINT(**{'sizeinbytes': 1}) self.__field_alarmhours.readfrombuffer(buf) self.__field_alarmtype=UINT(**{'sizeinbytes': 1}) self.__field_alarmtype.readfrombuffer(buf) self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_description=USTRING(**{'sizeinbytes': 35, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_description.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_unknown1.readfrombuffer(buf) self.__field_hasvoice=UINT(**{'sizeinbytes': 2}) self.__field_hasvoice.readfrombuffer(buf) self.__field_voiceid=UINT(**{'sizeinbytes': 2}) self.__field_voiceid.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_unknown2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "position within file, used as an event id") def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,LGCALDATE): self.__field_start=value else: self.__field_start=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,LGCALDATE): self.__field_end=value else: self.__field_end=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,UINT): self.__field_repeat=value else: self.__field_repeat=UINT(value,**{'sizeinbytes': 1}) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, "Repeat?") def __getfield_daybitmap(self): return self.__field_daybitmap.getvalue() def __setfield_daybitmap(self, value): if isinstance(value,UINT): self.__field_daybitmap=value else: self.__field_daybitmap=UINT(value,**{'sizeinbytes': 3}) def __delfield_daybitmap(self): del self.__field_daybitmap daybitmap=property(__getfield_daybitmap, __setfield_daybitmap, __delfield_daybitmap, "which days a weekly repeat event happens on?") def __getfield_alarmminutes(self): return self.__field_alarmminutes.getvalue() def __setfield_alarmminutes(self, value): if isinstance(value,UINT): self.__field_alarmminutes=value else: self.__field_alarmminutes=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmminutes(self): del self.__field_alarmminutes alarmminutes=property(__getfield_alarmminutes, __setfield_alarmminutes, __delfield_alarmminutes, "a value of 100 indicates not set") def __getfield_alarmhours(self): return self.__field_alarmhours.getvalue() def __setfield_alarmhours(self, value): if isinstance(value,UINT): self.__field_alarmhours=value else: self.__field_alarmhours=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmhours(self): del self.__field_alarmhours alarmhours=property(__getfield_alarmhours, __setfield_alarmhours, __delfield_alarmhours, "a value of 100 indicates not set") def __getfield_alarmtype(self): return self.__field_alarmtype.getvalue() def __setfield_alarmtype(self, value): if isinstance(value,UINT): self.__field_alarmtype=value else: self.__field_alarmtype=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmtype(self): del self.__field_alarmtype alarmtype=property(__getfield_alarmtype, __setfield_alarmtype, __delfield_alarmtype, "preset alarm reminder type") def __getfield_snoozedelay(self): try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_snoozedelay.getvalue() def __setfield_snoozedelay(self, value): if isinstance(value,UINT): self.__field_snoozedelay=value else: self.__field_snoozedelay=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_snoozedelay(self): del self.__field_snoozedelay snoozedelay=property(__getfield_snoozedelay, __setfield_snoozedelay, __delfield_snoozedelay, "in minutes?") def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_description(self): return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,USTRING): self.__field_description=value else: self.__field_description=USTRING(value,**{'sizeinbytes': 35, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def __getfield_unknown1(self): try: self.__field_unknown1 except: self.__field_unknown1=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, "This seems to always be two zeros") def __getfield_hasvoice(self): return self.__field_hasvoice.getvalue() def __setfield_hasvoice(self, value): if isinstance(value,UINT): self.__field_hasvoice=value else: self.__field_hasvoice=UINT(value,**{'sizeinbytes': 2}) def __delfield_hasvoice(self): del self.__field_hasvoice hasvoice=property(__getfield_hasvoice, __setfield_hasvoice, __delfield_hasvoice, "This event has an associated voice memo if 1") def __getfield_voiceid(self): return self.__field_voiceid.getvalue() def __setfield_voiceid(self, value): if isinstance(value,UINT): self.__field_voiceid=value else: self.__field_voiceid=UINT(value,**{'sizeinbytes': 2}) def __delfield_voiceid(self): del self.__field_voiceid voiceid=property(__getfield_voiceid, __setfield_voiceid, __delfield_voiceid, "sch/schexxx.qcp is the voice memo (xxx = voiceid - 0x0f)") def __getfield_unknown2(self): try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, "This seems to always be yet two more zeros") def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "position within file, used as an event id") yield ('start', self.__field_start, None) yield ('end', self.__field_end, None) yield ('repeat', self.__field_repeat, "Repeat?") yield ('daybitmap', self.__field_daybitmap, "which days a weekly repeat event happens on?") yield ('alarmminutes', self.__field_alarmminutes, "a value of 100 indicates not set") yield ('alarmhours', self.__field_alarmhours, "a value of 100 indicates not set") yield ('alarmtype', self.__field_alarmtype, "preset alarm reminder type") yield ('snoozedelay', self.__field_snoozedelay, "in minutes?") yield ('ringtone', self.__field_ringtone, None) yield ('description', self.__field_description, None) yield ('unknown1', self.__field_unknown1, "This seems to always be two zeros") yield ('hasvoice', self.__field_hasvoice, "This event has an associated voice memo if 1") yield ('voiceid', self.__field_voiceid, "sch/schexxx.qcp is the voice memo (xxx = voiceid - 0x0f)") yield ('unknown2', self.__field_unknown2, "This seems to always be yet two more zeros") class schedulefile(BaseProtogenClass): __fields=['numactiveitems', 'events'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(schedulefile,self).__init__(**dict) if self.__class__ is schedulefile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(schedulefile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(schedulefile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{'elementclass': scheduleevent}) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('events', self.__field_events, None) class camindexentry(BaseProtogenClass): __fields=['index', 'name', 'taken', 'dunno'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(camindexentry,self).__init__(**dict) if self.__class__ is camindexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(camindexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(camindexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_index.writetobuffer(buf) try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 11, 'default': ""}) self.__field_name.writetobuffer(buf) try: self.__field_taken except: self.__field_taken=LGCALDATE(**{'sizeinbytes': 4}) self.__field_taken.writetobuffer(buf) try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default': 0x00ff0100}) self.__field_dunno.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_index.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 11, 'default': ""}) self.__field_name.readfrombuffer(buf) self.__field_taken=LGCALDATE(**{'sizeinbytes': 4}) self.__field_taken.readfrombuffer(buf) self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default': 0x00ff0100}) self.__field_dunno.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 11, 'default': ""}) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 11, 'default': ""}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_taken(self): try: self.__field_taken except: self.__field_taken=LGCALDATE(**{'sizeinbytes': 4}) return self.__field_taken.getvalue() def __setfield_taken(self, value): if isinstance(value,LGCALDATE): self.__field_taken=value else: self.__field_taken=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_taken(self): del self.__field_taken taken=property(__getfield_taken, __setfield_taken, __delfield_taken, None) def __getfield_dunno(self): try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default': 0x00ff0100}) return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 4, 'default': 0x00ff0100}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('name', self.__field_name, None) yield ('taken', self.__field_taken, None) yield ('dunno', self.__field_dunno, None) class campicsdat(BaseProtogenClass): "the cam/pics.dat file" __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(campicsdat,self).__init__(**dict) if self.__class__ is campicsdat: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(campicsdat,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(campicsdat,kwargs) if len(args): dict2={'length': 60, 'elementclass': camindexentry, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'length': 60, 'elementclass': camindexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'length': 60, 'elementclass': camindexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'length': 60, 'elementclass': camindexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'length': 60, 'elementclass': camindexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class call(BaseProtogenClass): __fields=['GPStime', 'unknown1', 'duration', 'number', 'name', 'numberlength', 'unknown2', 'pbnumbertype', 'unknown3', 'pbentrynum'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(call,self).__init__(**dict) if self.__class__ is call: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(call,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(call,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_numberlength.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_pbnumbertype.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_pbentrynum.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 4}) self.__field_unknown1.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_numberlength=UINT(**{'sizeinbytes': 1}) self.__field_numberlength.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_pbnumbertype=UINT(**{'sizeinbytes': 1}) self.__field_pbnumbertype.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 2}) self.__field_unknown3.readfrombuffer(buf) self.__field_pbentrynum=UINT(**{'sizeinbytes': 2}) self.__field_pbentrynum.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numberlength(self): return self.__field_numberlength.getvalue() def __setfield_numberlength(self, value): if isinstance(value,UINT): self.__field_numberlength=value else: self.__field_numberlength=UINT(value,**{'sizeinbytes': 1}) def __delfield_numberlength(self): del self.__field_numberlength numberlength=property(__getfield_numberlength, __setfield_numberlength, __delfield_numberlength, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_pbnumbertype(self): return self.__field_pbnumbertype.getvalue() def __setfield_pbnumbertype(self, value): if isinstance(value,UINT): self.__field_pbnumbertype=value else: self.__field_pbnumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_pbnumbertype(self): del self.__field_pbnumbertype pbnumbertype=property(__getfield_pbnumbertype, __setfield_pbnumbertype, __delfield_pbnumbertype, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_pbentrynum(self): return self.__field_pbentrynum.getvalue() def __setfield_pbentrynum(self, value): if isinstance(value,UINT): self.__field_pbentrynum=value else: self.__field_pbentrynum=UINT(value,**{'sizeinbytes': 2}) def __delfield_pbentrynum(self): del self.__field_pbentrynum pbentrynum=property(__getfield_pbentrynum, __setfield_pbentrynum, __delfield_pbentrynum, None) def iscontainer(self): return True def containerelements(self): yield ('GPStime', self.__field_GPStime, None) yield ('unknown1', self.__field_unknown1, None) yield ('duration', self.__field_duration, None) yield ('number', self.__field_number, None) yield ('name', self.__field_name, None) yield ('numberlength', self.__field_numberlength, None) yield ('unknown2', self.__field_unknown2, None) yield ('pbnumbertype', self.__field_pbnumbertype, None) yield ('unknown3', self.__field_unknown3, None) yield ('pbentrynum', self.__field_pbentrynum, None) class callhistory(BaseProtogenClass): __fields=['numcalls', 'unknown1', 'calls'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callhistory,self).__init__(**dict) if self.__class__ is callhistory: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callhistory,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callhistory,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numcalls.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numcalls=UINT(**{'sizeinbytes': 4}) self.__field_numcalls.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numcalls(self): return self.__field_numcalls.getvalue() def __setfield_numcalls(self, value): if isinstance(value,UINT): self.__field_numcalls=value else: self.__field_numcalls=UINT(value,**{'sizeinbytes': 4}) def __delfield_numcalls(self): del self.__field_numcalls numcalls=property(__getfield_numcalls, __setfield_numcalls, __delfield_numcalls, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_calls(self): try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) return self.__field_calls.getvalue() def __setfield_calls(self, value): if isinstance(value,LIST): self.__field_calls=value else: self.__field_calls=LIST(value,**{'elementclass': call}) def __delfield_calls(self): del self.__field_calls calls=property(__getfield_calls, __setfield_calls, __delfield_calls, None) def iscontainer(self): return True def containerelements(self): yield ('numcalls', self.__field_numcalls, None) yield ('unknown1', self.__field_unknown1, None) yield ('calls', self.__field_calls, None) class firmwareresponse(BaseProtogenClass): __fields=['command', 'date1', 'time1', 'date2', 'time2', 'firmware'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(firmwareresponse,self).__init__(**dict) if self.__class__ is firmwareresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(firmwareresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(firmwareresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_date1.writetobuffer(buf) self.__field_time1.writetobuffer(buf) self.__field_date2.writetobuffer(buf) self.__field_time2.writetobuffer(buf) self.__field_firmware.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_date1=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date1.readfrombuffer(buf) self.__field_time1=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time1.readfrombuffer(buf) self.__field_date2=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date2.readfrombuffer(buf) self.__field_time2=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time2.readfrombuffer(buf) self.__field_firmware=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_firmware.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_date1(self): return self.__field_date1.getvalue() def __setfield_date1(self, value): if isinstance(value,USTRING): self.__field_date1=value else: self.__field_date1=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date1(self): del self.__field_date1 date1=property(__getfield_date1, __setfield_date1, __delfield_date1, None) def __getfield_time1(self): return self.__field_time1.getvalue() def __setfield_time1(self, value): if isinstance(value,USTRING): self.__field_time1=value else: self.__field_time1=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time1(self): del self.__field_time1 time1=property(__getfield_time1, __setfield_time1, __delfield_time1, None) def __getfield_date2(self): return self.__field_date2.getvalue() def __setfield_date2(self, value): if isinstance(value,USTRING): self.__field_date2=value else: self.__field_date2=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date2(self): del self.__field_date2 date2=property(__getfield_date2, __setfield_date2, __delfield_date2, None) def __getfield_time2(self): return self.__field_time2.getvalue() def __setfield_time2(self, value): if isinstance(value,USTRING): self.__field_time2=value else: self.__field_time2=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time2(self): del self.__field_time2 time2=property(__getfield_time2, __setfield_time2, __delfield_time2, None) def __getfield_firmware(self): return self.__field_firmware.getvalue() def __setfield_firmware(self, value): if isinstance(value,USTRING): self.__field_firmware=value else: self.__field_firmware=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_firmware(self): del self.__field_firmware firmware=property(__getfield_firmware, __setfield_firmware, __delfield_firmware, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('date1', self.__field_date1, None) yield ('time1', self.__field_time1, None) yield ('date2', self.__field_date2, None) yield ('time2', self.__field_time2, None) yield ('firmware', self.__field_firmware, None) class recipient_record(BaseProtogenClass): __fields=['unknown1', 'number', 'status', 'timesent', 'timereceived', 'unknown2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(recipient_record,self).__init__(**dict) if self.__class__ is recipient_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(recipient_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(recipient_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_timereceived.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UINT(**{'sizeinbytes': 14}) self.__field_unknown1.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49}) self.__field_number.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_timereceived=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timereceived.readfrombuffer(buf) self.__field_unknown2=DATA(**{'sizeinbytes': 40}) self.__field_unknown2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 14}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_timereceived(self): return self.__field_timereceived.getvalue() def __setfield_timereceived(self, value): if isinstance(value,LGCALDATE): self.__field_timereceived=value else: self.__field_timereceived=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timereceived(self): del self.__field_timereceived timereceived=property(__getfield_timereceived, __setfield_timereceived, __delfield_timereceived, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,DATA): self.__field_unknown2=value else: self.__field_unknown2=DATA(value,**{'sizeinbytes': 40}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('number', self.__field_number, None) yield ('status', self.__field_status, None) yield ('timesent', self.__field_timesent, None) yield ('timereceived', self.__field_timereceived, None) yield ('unknown2', self.__field_unknown2, None) class sms_saved(BaseProtogenClass): __fields=['outboxmsg', 'GPStime', 'outbox', 'inbox'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_saved,self).__init__(**dict) if self.__class__ is sms_saved: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_saved,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_saved,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_outboxmsg.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) if self.outboxmsg: self.__field_outbox.writetobuffer(buf) if not self.outboxmsg: self.__field_inbox.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_outboxmsg=UINT(**{'sizeinbytes': 4}) self.__field_outboxmsg.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) if self.outboxmsg: self.__field_outbox=sms_out() self.__field_outbox.readfrombuffer(buf) if not self.outboxmsg: self.__field_inbox=sms_in() self.__field_inbox.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_outboxmsg(self): return self.__field_outboxmsg.getvalue() def __setfield_outboxmsg(self, value): if isinstance(value,UINT): self.__field_outboxmsg=value else: self.__field_outboxmsg=UINT(value,**{'sizeinbytes': 4}) def __delfield_outboxmsg(self): del self.__field_outboxmsg outboxmsg=property(__getfield_outboxmsg, __setfield_outboxmsg, __delfield_outboxmsg, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_outbox(self): return self.__field_outbox.getvalue() def __setfield_outbox(self, value): if isinstance(value,sms_out): self.__field_outbox=value else: self.__field_outbox=sms_out(value,) def __delfield_outbox(self): del self.__field_outbox outbox=property(__getfield_outbox, __setfield_outbox, __delfield_outbox, None) def __getfield_inbox(self): return self.__field_inbox.getvalue() def __setfield_inbox(self, value): if isinstance(value,sms_in): self.__field_inbox=value else: self.__field_inbox=sms_in(value,) def __delfield_inbox(self): del self.__field_inbox inbox=property(__getfield_inbox, __setfield_inbox, __delfield_inbox, None) def iscontainer(self): return True def containerelements(self): yield ('outboxmsg', self.__field_outboxmsg, None) yield ('GPStime', self.__field_GPStime, None) if self.outboxmsg: yield ('outbox', self.__field_outbox, None) if not self.outboxmsg: yield ('inbox', self.__field_inbox, None) class sms_out(BaseProtogenClass): __fields=['index', 'locked', 'unknown1', 'timesent', 'subject', 'unknown2', 'num_msg_elements', 'messages', 'unknown6', 'priority', 'unknown7', 'unknown8', 'callback', 'recipients'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_out,self).__init__(**dict) if self.__class__ is sms_out: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_out,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_out,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) self.__field_messages.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_unknown7.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) self.__field_callback.writetobuffer(buf) try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record, 'length': 10}) self.__field_recipients.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 3}) self.__field_unknown1.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_unknown2=DATA(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) self.__field_messages.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 2}) self.__field_unknown6.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_unknown7=DATA(**{'sizeinbytes': 13}) self.__field_unknown7.readfrombuffer(buf) self.__field_unknown8=DATA(**{'sizeinbytes': 3}) self.__field_unknown8.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 23}) self.__field_callback.readfrombuffer(buf) self.__field_recipients=LIST(**{'elementclass': recipient_record, 'length': 10}) self.__field_recipients.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,DATA): self.__field_unknown2=value else: self.__field_unknown2=DATA(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_messages(self): try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) return self.__field_messages.getvalue() def __setfield_messages(self, value): if isinstance(value,LIST): self.__field_messages=value else: self.__field_messages=LIST(value,**{'elementclass': msg_record, 'length': 7}) def __delfield_messages(self): del self.__field_messages messages=property(__getfield_messages, __setfield_messages, __delfield_messages, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_unknown7(self): return self.__field_unknown7.getvalue() def __setfield_unknown7(self, value): if isinstance(value,DATA): self.__field_unknown7=value else: self.__field_unknown7=DATA(value,**{'sizeinbytes': 13}) def __delfield_unknown7(self): del self.__field_unknown7 unknown7=property(__getfield_unknown7, __setfield_unknown7, __delfield_unknown7, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,DATA): self.__field_unknown8=value else: self.__field_unknown8=DATA(value,**{'sizeinbytes': 3}) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 23}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_recipients(self): try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record, 'length': 10}) return self.__field_recipients.getvalue() def __setfield_recipients(self, value): if isinstance(value,LIST): self.__field_recipients=value else: self.__field_recipients=LIST(value,**{'elementclass': recipient_record, 'length': 10}) def __delfield_recipients(self): del self.__field_recipients recipients=property(__getfield_recipients, __setfield_recipients, __delfield_recipients, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('locked', self.__field_locked, None) yield ('unknown1', self.__field_unknown1, None) yield ('timesent', self.__field_timesent, None) yield ('subject', self.__field_subject, None) yield ('unknown2', self.__field_unknown2, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('messages', self.__field_messages, None) yield ('unknown6', self.__field_unknown6, None) yield ('priority', self.__field_priority, None) yield ('unknown7', self.__field_unknown7, None) yield ('unknown8', self.__field_unknown8, None) yield ('callback', self.__field_callback, None) yield ('recipients', self.__field_recipients, None) class SMSINBOXMSGFRAGMENT(BaseProtogenClass): __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSINBOXMSGFRAGMENT,self).__init__(**dict) if self.__class__ is SMSINBOXMSGFRAGMENT: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSINBOXMSGFRAGMENT,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSINBOXMSGFRAGMENT,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx6100_259, 'length': 181} dict2.update(kwargs) kwargs=dict2 self.__field_msg=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx6100_259, 'length': 181}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx6100_259, 'length': 181}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx6100_259, 'length': 181}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx6100_259, 'length': 181}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class _gen_p_lgvx6100_259(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx6100_259,self).__init__(**dict) if self.__class__ is _gen_p_lgvx6100_259: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx6100_259,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx6100_259,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class sms_in(BaseProtogenClass): __fields=['msg_index1', 'msg_index2', 'unknown2', 'unknown3', 'timesent', 'unknown', 'callback_length', 'callback', 'sender_length', 'sender', 'unknown4', 'lg_time', 'GPStime', 'unknown5', 'read', 'locked', 'unknown8', 'priority', 'flags', 'subject', 'bin_header1', 'bin_header2', 'multipartID', 'unknown6', 'bin_header3', 'num_msg_elements', 'msglengths', 'msgs', 'unknown5', 'senders_name', 'unknown6'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_in,self).__init__(**dict) if self.__class__ is sms_in: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_in,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_in,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msg_index1.writetobuffer(buf) self.__field_msg_index2.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self.__field_callback_length.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_sender_length.writetobuffer(buf) try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx6100_272, 'length': 38}) self.__field_sender.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_lg_time.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_flags.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_bin_header1.writetobuffer(buf) self.__field_bin_header2.writetobuffer(buf) self.__field_multipartID.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_bin_header3.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx6100_290, 'length': 20}) self.__field_msglengths.writetobuffer(buf) try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_senders_name.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg_index1=UINT(**{'sizeinbytes': 4}) self.__field_msg_index1.readfrombuffer(buf) self.__field_msg_index2=UINT(**{'sizeinbytes': 4}) self.__field_msg_index2.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2}) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 4}) self.__field_unknown3.readfrombuffer(buf) self.__field_timesent=SMSDATE(**{'sizeinbytes': 6}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown=UINT(**{'sizeinbytes': 3}) self.__field_unknown.readfrombuffer(buf) self.__field_callback_length=UINT(**{'sizeinbytes': 1}) self.__field_callback_length.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 38}) self.__field_callback.readfrombuffer(buf) self.__field_sender_length=UINT(**{'sizeinbytes': 1}) self.__field_sender_length.readfrombuffer(buf) self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx6100_272, 'length': 38}) self.__field_sender.readfrombuffer(buf) self.__field_unknown4=DATA(**{'sizeinbytes': 15}) self.__field_unknown4.readfrombuffer(buf) self.__field_lg_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_lg_time.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 2}) self.__field_unknown5.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 1}) self.__field_read.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown8=UINT(**{'sizeinbytes': 2}) self.__field_unknown8.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_flags=DATA(**{'sizeinbytes': 6}) self.__field_flags.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_bin_header1=UINT(**{'sizeinbytes': 1}) self.__field_bin_header1.readfrombuffer(buf) self.__field_bin_header2=UINT(**{'sizeinbytes': 1}) self.__field_bin_header2.readfrombuffer(buf) self.__field_multipartID=UINT(**{'sizeinbytes': 1}) self.__field_multipartID.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 3}) self.__field_unknown6.readfrombuffer(buf) self.__field_bin_header3=UINT(**{'sizeinbytes': 1}) self.__field_bin_header3.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx6100_290, 'length': 20}) self.__field_msglengths.readfrombuffer(buf) self.__field_msgs=LIST(**{'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.readfrombuffer(buf) self.__field_unknown5=DATA(**{'sizeinbytes': 68}) self.__field_unknown5.readfrombuffer(buf) self.__field_senders_name=USTRING(**{'sizeinbytes': 33}) self.__field_senders_name.readfrombuffer(buf) self.__field_unknown6=DATA(**{'sizeinbytes': 169}) self.__field_unknown6.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg_index1(self): return self.__field_msg_index1.getvalue() def __setfield_msg_index1(self, value): if isinstance(value,UINT): self.__field_msg_index1=value else: self.__field_msg_index1=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index1(self): del self.__field_msg_index1 msg_index1=property(__getfield_msg_index1, __setfield_msg_index1, __delfield_msg_index1, None) def __getfield_msg_index2(self): return self.__field_msg_index2.getvalue() def __setfield_msg_index2(self, value): if isinstance(value,UINT): self.__field_msg_index2=value else: self.__field_msg_index2=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index2(self): del self.__field_msg_index2 msg_index2=property(__getfield_msg_index2, __setfield_msg_index2, __delfield_msg_index2, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,SMSDATE): self.__field_timesent=value else: self.__field_timesent=SMSDATE(value,**{'sizeinbytes': 6}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UINT): self.__field_unknown=value else: self.__field_unknown=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def __getfield_callback_length(self): return self.__field_callback_length.getvalue() def __setfield_callback_length(self, value): if isinstance(value,UINT): self.__field_callback_length=value else: self.__field_callback_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_length(self): del self.__field_callback_length callback_length=property(__getfield_callback_length, __setfield_callback_length, __delfield_callback_length, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 38}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_sender_length(self): return self.__field_sender_length.getvalue() def __setfield_sender_length(self, value): if isinstance(value,UINT): self.__field_sender_length=value else: self.__field_sender_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_sender_length(self): del self.__field_sender_length sender_length=property(__getfield_sender_length, __setfield_sender_length, __delfield_sender_length, None) def __getfield_sender(self): try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx6100_272, 'length': 38}) return self.__field_sender.getvalue() def __setfield_sender(self, value): if isinstance(value,LIST): self.__field_sender=value else: self.__field_sender=LIST(value,**{'elementclass': _gen_p_lgvx6100_272, 'length': 38}) def __delfield_sender(self): del self.__field_sender sender=property(__getfield_sender, __setfield_sender, __delfield_sender, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,DATA): self.__field_unknown4=value else: self.__field_unknown4=DATA(value,**{'sizeinbytes': 15}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_lg_time(self): return self.__field_lg_time.getvalue() def __setfield_lg_time(self, value): if isinstance(value,LGCALDATE): self.__field_lg_time=value else: self.__field_lg_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_lg_time(self): del self.__field_lg_time lg_time=property(__getfield_lg_time, __setfield_lg_time, __delfield_lg_time, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 1}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,UINT): self.__field_unknown8=value else: self.__field_unknown8=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_flags(self): return self.__field_flags.getvalue() def __setfield_flags(self, value): if isinstance(value,DATA): self.__field_flags=value else: self.__field_flags=DATA(value,**{'sizeinbytes': 6}) def __delfield_flags(self): del self.__field_flags flags=property(__getfield_flags, __setfield_flags, __delfield_flags, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_bin_header1(self): return self.__field_bin_header1.getvalue() def __setfield_bin_header1(self, value): if isinstance(value,UINT): self.__field_bin_header1=value else: self.__field_bin_header1=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header1(self): del self.__field_bin_header1 bin_header1=property(__getfield_bin_header1, __setfield_bin_header1, __delfield_bin_header1, None) def __getfield_bin_header2(self): return self.__field_bin_header2.getvalue() def __setfield_bin_header2(self, value): if isinstance(value,UINT): self.__field_bin_header2=value else: self.__field_bin_header2=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header2(self): del self.__field_bin_header2 bin_header2=property(__getfield_bin_header2, __setfield_bin_header2, __delfield_bin_header2, None) def __getfield_multipartID(self): return self.__field_multipartID.getvalue() def __setfield_multipartID(self, value): if isinstance(value,UINT): self.__field_multipartID=value else: self.__field_multipartID=UINT(value,**{'sizeinbytes': 1}) def __delfield_multipartID(self): del self.__field_multipartID multipartID=property(__getfield_multipartID, __setfield_multipartID, __delfield_multipartID, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_bin_header3(self): return self.__field_bin_header3.getvalue() def __setfield_bin_header3(self, value): if isinstance(value,UINT): self.__field_bin_header3=value else: self.__field_bin_header3=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header3(self): del self.__field_bin_header3 bin_header3=property(__getfield_bin_header3, __setfield_bin_header3, __delfield_bin_header3, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_msglengths(self): try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx6100_290, 'length': 20}) return self.__field_msglengths.getvalue() def __setfield_msglengths(self, value): if isinstance(value,LIST): self.__field_msglengths=value else: self.__field_msglengths=LIST(value,**{'elementclass': _gen_p_lgvx6100_290, 'length': 20}) def __delfield_msglengths(self): del self.__field_msglengths msglengths=property(__getfield_msglengths, __setfield_msglengths, __delfield_msglengths, None) def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'length': 20, 'elementclass': SMSINBOXMSGFRAGMENT}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,DATA): self.__field_unknown5=value else: self.__field_unknown5=DATA(value,**{'sizeinbytes': 68}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_senders_name(self): return self.__field_senders_name.getvalue() def __setfield_senders_name(self, value): if isinstance(value,USTRING): self.__field_senders_name=value else: self.__field_senders_name=USTRING(value,**{'sizeinbytes': 33}) def __delfield_senders_name(self): del self.__field_senders_name senders_name=property(__getfield_senders_name, __setfield_senders_name, __delfield_senders_name, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,DATA): self.__field_unknown6=value else: self.__field_unknown6=DATA(value,**{'sizeinbytes': 169}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def iscontainer(self): return True def containerelements(self): yield ('msg_index1', self.__field_msg_index1, None) yield ('msg_index2', self.__field_msg_index2, None) yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) yield ('timesent', self.__field_timesent, None) yield ('unknown', self.__field_unknown, None) yield ('callback_length', self.__field_callback_length, None) yield ('callback', self.__field_callback, None) yield ('sender_length', self.__field_sender_length, None) yield ('sender', self.__field_sender, None) yield ('unknown4', self.__field_unknown4, None) yield ('lg_time', self.__field_lg_time, None) yield ('GPStime', self.__field_GPStime, None) yield ('unknown5', self.__field_unknown5, None) yield ('read', self.__field_read, None) yield ('locked', self.__field_locked, None) yield ('unknown8', self.__field_unknown8, None) yield ('priority', self.__field_priority, None) yield ('flags', self.__field_flags, None) yield ('subject', self.__field_subject, None) yield ('bin_header1', self.__field_bin_header1, None) yield ('bin_header2', self.__field_bin_header2, None) yield ('multipartID', self.__field_multipartID, None) yield ('unknown6', self.__field_unknown6, None) yield ('bin_header3', self.__field_bin_header3, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('msglengths', self.__field_msglengths, None) yield ('msgs', self.__field_msgs, None) yield ('unknown5', self.__field_unknown5, None) yield ('senders_name', self.__field_senders_name, None) yield ('unknown6', self.__field_unknown6, None) class _gen_p_lgvx6100_272(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx6100_272,self).__init__(**dict) if self.__class__ is _gen_p_lgvx6100_272: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx6100_272,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx6100_272,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of senders phone number") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of senders phone number") class _gen_p_lgvx6100_290(BaseProtogenClass): 'Anonymous inner class' __fields=['msglength'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx6100_290,self).__init__(**dict) if self.__class__ is _gen_p_lgvx6100_290: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx6100_290,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx6100_290,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_msglength=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msglength.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msglength=UINT(**{'sizeinbytes': 1}) self.__field_msglength.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msglength(self): return self.__field_msglength.getvalue() def __setfield_msglength(self, value): if isinstance(value,UINT): self.__field_msglength=value else: self.__field_msglength=UINT(value,**{'sizeinbytes': 1}) def __delfield_msglength(self): del self.__field_msglength msglength=property(__getfield_msglength, __setfield_msglength, __delfield_msglength, "lengths of individual messages in septets") def iscontainer(self): return True def containerelements(self): yield ('msglength', self.__field_msglength, "lengths of individual messages in septets") class sms_quick_text(BaseProtogenClass): __fields=['msgs'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_quick_text,self).__init__(**dict) if self.__class__ is sms_quick_text: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_quick_text,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_quick_text,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx6100_306, } dict2.update(kwargs) kwargs=dict2 self.__field_msgs=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx6100_306, }) self.__field_msgs.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx6100_306, }) self.__field_msgs.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvx6100_306, }) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'elementclass': _gen_p_lgvx6100_306, }) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def iscontainer(self): return True def containerelements(self): yield ('msgs', self.__field_msgs, None) class _gen_p_lgvx6100_306(BaseProtogenClass): 'Anonymous inner class' __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx6100_306,self).__init__(**dict) if self.__class__ is _gen_p_lgvx6100_306: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx6100_306,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx6100_306,kwargs) if len(args): dict2={'encoding': PHONE_ENCODING} dict2.update(kwargs) kwargs=dict2 self.__field_msg=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=USTRING(**{'encoding': PHONE_ENCODING}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{'encoding': PHONE_ENCODING}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class textmemo(BaseProtogenClass): __fields=['text'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemo,self).__init__(**dict) if self.__class__ is textmemo: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemo,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemo,kwargs) if len(args): dict2={'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } dict2.update(kwargs) kwargs=dict2 self.__field_text=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_text.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_text=USTRING(**{'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_text.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,USTRING): self.__field_text=value else: self.__field_text=USTRING(value,**{'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def iscontainer(self): return True def containerelements(self): yield ('text', self.__field_text, None) class textmemofile(BaseProtogenClass): __fields=['itemcount', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemofile,self).__init__(**dict) if self.__class__ is textmemofile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemofile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemofile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_itemcount.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_itemcount=UINT(**{'sizeinbytes': 4}) self.__field_itemcount.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_itemcount(self): return self.__field_itemcount.getvalue() def __setfield_itemcount(self, value): if isinstance(value,UINT): self.__field_itemcount=value else: self.__field_itemcount=UINT(value,**{'sizeinbytes': 4}) def __delfield_itemcount(self): del self.__field_itemcount itemcount=property(__getfield_itemcount, __setfield_itemcount, __delfield_itemcount, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': textmemo }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('itemcount', self.__field_itemcount, None) yield ('items', self.__field_items, None) bitpim-1.0.7+dfsg1/src/phones/p_samsung_packet.p0000644001616600161660000001370510723167110017742 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_samsung_packet.p 4470 2007-11-28 04:27:52Z djpham $ %{ """Various descriptions of data specific to Sanyo phones""" from prototypes import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMCALENDAREVENTS=70 NUMTODOENTRIES=9 NUMMEMOENTRIES=9 DEFAULT_RINGTONE=20 DEFAULT_WALLPAPER=20 %} PACKET phonenumber: * CSVSTRING {'quotechar': None, 'default': ""} +number * CSVINT {'default': 0} +secret PACKET phonebookslotrequest: * CSVSTRING {'quotechar': None, 'terminator': None, 'default': '#PBOKR='} +command * CSVINT {'terminator': None} +slot "Internal Slot" PACKET phonebooksloterase: * CSVSTRING {'quotechar': None, 'terminator': None, 'default': '#PBOKW='} +command * CSVINT {'terminator': None} +slot "Internal Slot" #PACKET phonebookslotupdaterequest: # * CSVSTRING {'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'} +command # * pbentry entry PACKET phonebookslotupdateresponse: * UNKNOWN pad PACKET groupnamerequest: * CSVSTRING {'quotechar': None, 'terminator': None, 'default': '#PBGRR='} +command * CSVINT {'terminator': None} +gid "Group #" PACKET groupnamesetrequest: * CSVSTRING {'quotechar': None, 'terminator': None, 'default': '#PBGRW='} +command * CSVINT +gid "Group #" * CSVSTRING +groupname * CSVINT {'terminator': None, 'default': 0} +ringtone "Ringtone assignment" PACKET groupnamesetrequest: * CSVSTRING {'quotechar': None, 'terminator': None, 'default': '#PBGRW='} +command * CSVINT +gid "Group #" * CSVSTRING +groupname * CSVINT {'terminator': None, 'default': 0} +ringtone "Ringtone assignment" PACKET eventrequest: * CSVSTRING {'quotechar': None, 'terminator': None, 'default': '#PISHR='} +command * CSVINT {'terminator': None} +slot PACKET eventresponse: * CSVSTRING {'quotechar': None, 'terminator': ord(' '), 'constant': '#PISHR:'} command * CSVINT slot * CSVTIME start * CSVTIME end * CSVTIME timestamp * CSVINT alarm "0: 10 minutes, 1: 30 minutes, 2: 60 minutes, 3: No Alarm, 4: On Time" * CSVSTRING {'quotechar': None} dunno * CSVSTRING {'terminator': None} eventname PACKET eventupdaterequest: * CSVSTRING {'quotechar': None, 'terminator': None, 'default': '#PISHW='} +command * CSVINT slot * CSVTIME start * CSVTIME end * CSVTIME timestamp * CSVINT alarm "0: 10 minutes, 1: 30 minutes, 2: 60 minutes, 3: No Alarm, 4: On Time" * CSVSTRING {'terminator': None} eventname PACKET eventsloterase: * CSVSTRING {'quotechar': None, 'terminator': None, 'default': '#PISHW='} +command * CSVINT {'terminator': None} +slot PACKET eventupdateresponse: * UNKNOWN pad PACKET todorequest: * CSVSTRING {'quotechar': None, 'terminator': None, 'default': '#PITDR='} +command * CSVINT {'terminator': None} +slot PACKET todoresponse: * CSVSTRING {'quotechar': None, 'terminator': ord(' '), 'default': '#PITDR:'} command * CSVINT slot * CSVINT priority * CSVTIME duedate * CSVTIME timestamp * CSVSTRING {'quotechar': None} status * CSVSTRING {'terminator': None} subject PACKET todoupdaterequest: * CSVSTRING {'quotechar': None, 'terminator': None, 'default': '#PITDW='} +command * CSVINT slot * CSVINT priority * CSVTIME duedate * CSVTIME timestamp * CSVSTRING {'terminator': None} subject PACKET todoerase: * CSVSTRING {'quotechar': None, 'terminator': None, 'default': '#PITDW='} +command * CSVINT {'terminator': None} slot PACKET todoupdateresponse: * UNKNOWN pad PACKET memorequest: * CSVSTRING {'quotechar': None, 'terminator': None, 'default': '#PIMMR='} +command * CSVINT {'terminator': None} +slot PACKET memoresponse: * CSVSTRING {'quotechar': None, 'terminator': ord(' '), 'default': '#PIMMR:'} command * CSVINT slot * CSVTIME timestamp * CSVSTRING {'quotechar': None} status * CSVSTRING {'terminator': None} text PACKET memoupdaterequest: * CSVSTRING {'quotechar': None, 'terminator': None, 'default': '#PIMMW='} +command * CSVINT slot * CSVTIME timestamp * CSVSTRING {'terminator': None} text PACKET memoerase: * CSVSTRING {'quotechar': None, 'terminator': None, 'default': '#PIMMW='} +command * CSVINT {'terminator': None} slot PACKET memoupdateresponse: * UNKNOWN pad PACKET esnrequest: * CSVSTRING {'quotechar': None, 'terminator': None, 'default': '+GSN'} +command PACKET esnresponse: * CSVSTRING {'quotechar': None, 'terminator': ord(' '), 'default': '+GSN'} command * CSVSTRING {'quotechar': None, 'terminator': None} esn #at#psrmr=? #PSRMR: (0-93) #OK #at#psrmr=0 #PSRMR: 0,0,1,20031214T214934,"shortmail@oneboxmail.bulk.sprint: Short Mail: New Short Mail. Select }Go} to read it}-}*http://smwl.uc.sprintpcs.com/sml/wap.do?alert=true", #OK #at#psrmr=1 #PSRMR: 1,0,1,20031205T091836,"To avoid service interruption, please call Sprint PCS at 800-808-1336.", PACKET manufacturerreq: * CSVSTRING { 'quotechar': None, 'terminator': None, 'default': '+GMI' } +command PACKET manufacturerresp: * CSVSTRING { 'quotechar': None, 'terminator': ord(' ') } command * STRING {'terminator': None } manufacturer PACKET modelreq: * STRING { 'terminator': None, 'default': '+GMM' } +command PACKET modelresp: * STRING { 'terminator': ord(' ') } command * STRING { 'terminator': None } model PACKET batterylevelreq: * STRING { 'terminator': None, 'default':'+CBC?' } +command PACKET batterylevelresp: * STRING { 'terminator': ord(' ') } command * CSVINT zero * CSVINT { 'terminator': None } level %{ def _levelstr(self): return '%d%%'%self.level levelstr=property(fget=_levelstr) %} bitpim-1.0.7+dfsg1/src/phones/com_sanyo7200.py0000644001616600161660000000274410232320421017100 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_sanyo7200.py 2321 2005-04-23 01:12:49Z sawecw $ """Talk to the Sanyo SCP-7200 (RL2000) cell phone""" # my modules import common import p_sanyo7200 import com_brew import com_phone import com_sanyo import prototypes class Phone(com_sanyo.Phone): "Talk to the Sanyo SCP-7200 cell phone" desc="SCP-7200" protocolclass=p_sanyo7200 serialsname='scp7200' builtinringtones=( 'None', 'Vibrate', 'Ringer & Voice') calendar_defaultringtone=0 def __init__(self, logtarget, commport): com_sanyo.Phone.__init__(self, logtarget, commport) self.mode=self.MODENONE def savecalendar(self, dict, merge): req=self.protocolclass.beginendupdaterequest() req.beginend=1 # Start update res=self.sendpbcommand(req, self.protocolclass.beginendupdateresponse, writemode=True) self.writewait() result = com_sanyo.Phone.savecalendar(self, dict, merge) class Profile(com_sanyo.Profile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='SANYO' phone_model='SCP-7200/US' WALLPAPER_WIDTH=120 WALLPAPER_HEIGHT=128 OVERSIZE_PERCENTAGE=100 def __init__(self): com_sanyo.Profile.__init__(self) bitpim-1.0.7+dfsg1/src/phones/p_sk6100.py0000644001616600161660000006227110466234100016053 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to SKTT IMT2000""" from prototypes import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUM_PBENTRIES=1200 NUM_PBGROUPS=41 NUM_PHONES=2400 class wholebook(BaseProtogenClass): __fields=['filename', 'pbentries'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(wholebook,self).__init__(**dict) if self.__class__ is wholebook: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(wholebook,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(wholebook,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_filename.writetobuffer(buf) self.__field_pbentries.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_filename=USTRING(**{'sizeinbytes': 16}) self.__field_filename.readfrombuffer(buf) self.__field_pbentries=LIST(**{'elementclass': pbentry, 'length': NUM_PBENTRIES}) self.__field_pbentries.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'sizeinbytes': 16}) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, None) def __getfield_pbentries(self): return self.__field_pbentries.getvalue() def __setfield_pbentries(self, value): if isinstance(value,LIST): self.__field_pbentries=value else: self.__field_pbentries=LIST(value,**{'elementclass': pbentry, 'length': NUM_PBENTRIES}) def __delfield_pbentries(self): del self.__field_pbentries pbentries=property(__getfield_pbentries, __setfield_pbentries, __delfield_pbentries, None) def iscontainer(self): return True def containerelements(self): yield ('filename', self.__field_filename, None) yield ('pbentries', self.__field_pbentries, None) class pbentry(BaseProtogenClass): __fields=['slot', 'unk1', 'group_id', 'unk3', 'record', 'unk4', 'name', 'unk2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_unk1.writetobuffer(buf) self.__field_group_id.writetobuffer(buf) self.__field_unk3.writetobuffer(buf) self.__field_record.writetobuffer(buf) self.__field_unk4.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_unk2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_unk1=UNKNOWN(**{'sizeinbytes': 3}) self.__field_unk1.readfrombuffer(buf) self.__field_group_id=UINT(**{'sizeinbytes': 1}) self.__field_group_id.readfrombuffer(buf) self.__field_unk3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_unk3.readfrombuffer(buf) self.__field_record=UINT(**{'sizeinbytes': 1}) self.__field_record.readfrombuffer(buf) self.__field_unk4=UNKNOWN(**{'sizeinbytes': 5}) self.__field_unk4.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 20, 'encoding': 'iso-8859-8' }) self.__field_name.readfrombuffer(buf) self.__field_unk2=UNKNOWN(**{'sizeinbytes': 96}) self.__field_unk2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, "All of them are numbered") def __getfield_unk1(self): return self.__field_unk1.getvalue() def __setfield_unk1(self, value): if isinstance(value,UNKNOWN): self.__field_unk1=value else: self.__field_unk1=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_unk1(self): del self.__field_unk1 unk1=property(__getfield_unk1, __setfield_unk1, __delfield_unk1, None) def __getfield_group_id(self): return self.__field_group_id.getvalue() def __setfield_group_id(self, value): if isinstance(value,UINT): self.__field_group_id=value else: self.__field_group_id=UINT(value,**{'sizeinbytes': 1}) def __delfield_group_id(self): del self.__field_group_id group_id=property(__getfield_group_id, __setfield_group_id, __delfield_group_id, None) def __getfield_unk3(self): return self.__field_unk3.getvalue() def __setfield_unk3(self, value): if isinstance(value,UNKNOWN): self.__field_unk3=value else: self.__field_unk3=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_unk3(self): del self.__field_unk3 unk3=property(__getfield_unk3, __setfield_unk3, __delfield_unk3, None) def __getfield_record(self): return self.__field_record.getvalue() def __setfield_record(self, value): if isinstance(value,UINT): self.__field_record=value else: self.__field_record=UINT(value,**{'sizeinbytes': 1}) def __delfield_record(self): del self.__field_record record=property(__getfield_record, __setfield_record, __delfield_record, "Only nonzero if not deleted") def __getfield_unk4(self): return self.__field_unk4.getvalue() def __setfield_unk4(self, value): if isinstance(value,UNKNOWN): self.__field_unk4=value else: self.__field_unk4=UNKNOWN(value,**{'sizeinbytes': 5}) def __delfield_unk4(self): del self.__field_unk4 unk4=property(__getfield_unk4, __setfield_unk4, __delfield_unk4, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 20, 'encoding': 'iso-8859-8' }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, "The place until the zeroes end") def __getfield_unk2(self): return self.__field_unk2.getvalue() def __setfield_unk2(self, value): if isinstance(value,UNKNOWN): self.__field_unk2=value else: self.__field_unk2=UNKNOWN(value,**{'sizeinbytes': 96}) def __delfield_unk2(self): del self.__field_unk2 unk2=property(__getfield_unk2, __setfield_unk2, __delfield_unk2, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, "All of them are numbered") yield ('unk1', self.__field_unk1, None) yield ('group_id', self.__field_group_id, None) yield ('unk3', self.__field_unk3, None) yield ('record', self.__field_record, "Only nonzero if not deleted") yield ('unk4', self.__field_unk4, None) yield ('name', self.__field_name, "The place until the zeroes end") yield ('unk2', self.__field_unk2, None) class groups(BaseProtogenClass): __fields=['filename', 'pbgroups'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(groups,self).__init__(**dict) if self.__class__ is groups: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(groups,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(groups,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_filename.writetobuffer(buf) self.__field_pbgroups.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_filename=USTRING(**{'sizeinbytes': 16}) self.__field_filename.readfrombuffer(buf) self.__field_pbgroups=LIST(**{'elementclass': pbgroup, 'length': NUM_PBGROUPS}) self.__field_pbgroups.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'sizeinbytes': 16}) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, "group file name") def __getfield_pbgroups(self): return self.__field_pbgroups.getvalue() def __setfield_pbgroups(self, value): if isinstance(value,LIST): self.__field_pbgroups=value else: self.__field_pbgroups=LIST(value,**{'elementclass': pbgroup, 'length': NUM_PBGROUPS}) def __delfield_pbgroups(self): del self.__field_pbgroups pbgroups=property(__getfield_pbgroups, __setfield_pbgroups, __delfield_pbgroups, None) def iscontainer(self): return True def containerelements(self): yield ('filename', self.__field_filename, "group file name") yield ('pbgroups', self.__field_pbgroups, None) class pbgroup(BaseProtogenClass): __fields=['group_id', 'unk1', 'name', 'unk3', 'unk2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroup,self).__init__(**dict) if self.__class__ is pbgroup: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroup,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroup,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_group_id.writetobuffer(buf) self.__field_unk1.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_unk3.writetobuffer(buf) self.__field_unk2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_group_id=UINT(**{'sizeinbytes': 1}) self.__field_group_id.readfrombuffer(buf) self.__field_unk1=UNKNOWN(**{'sizeinbytes': 3}) self.__field_unk1.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 21, 'encoding': 'iso-8859-8' }) self.__field_name.readfrombuffer(buf) self.__field_unk3=UINT(**{'sizeinbytes': 1}) self.__field_unk3.readfrombuffer(buf) self.__field_unk2=UNKNOWN(**{'sizeinbytes': 30}) self.__field_unk2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_group_id(self): return self.__field_group_id.getvalue() def __setfield_group_id(self, value): if isinstance(value,UINT): self.__field_group_id=value else: self.__field_group_id=UINT(value,**{'sizeinbytes': 1}) def __delfield_group_id(self): del self.__field_group_id group_id=property(__getfield_group_id, __setfield_group_id, __delfield_group_id, None) def __getfield_unk1(self): return self.__field_unk1.getvalue() def __setfield_unk1(self, value): if isinstance(value,UNKNOWN): self.__field_unk1=value else: self.__field_unk1=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_unk1(self): del self.__field_unk1 unk1=property(__getfield_unk1, __setfield_unk1, __delfield_unk1, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 21, 'encoding': 'iso-8859-8' }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_unk3(self): return self.__field_unk3.getvalue() def __setfield_unk3(self, value): if isinstance(value,UINT): self.__field_unk3=value else: self.__field_unk3=UINT(value,**{'sizeinbytes': 1}) def __delfield_unk3(self): del self.__field_unk3 unk3=property(__getfield_unk3, __setfield_unk3, __delfield_unk3, None) def __getfield_unk2(self): return self.__field_unk2.getvalue() def __setfield_unk2(self, value): if isinstance(value,UNKNOWN): self.__field_unk2=value else: self.__field_unk2=UNKNOWN(value,**{'sizeinbytes': 30}) def __delfield_unk2(self): del self.__field_unk2 unk2=property(__getfield_unk2, __setfield_unk2, __delfield_unk2, None) def iscontainer(self): return True def containerelements(self): yield ('group_id', self.__field_group_id, None) yield ('unk1', self.__field_unk1, None) yield ('name', self.__field_name, None) yield ('unk3', self.__field_unk3, None) yield ('unk2', self.__field_unk2, None) class phones(BaseProtogenClass): __fields=['filename', 'records'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phones,self).__init__(**dict) if self.__class__ is phones: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phones,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phones,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_filename.writetobuffer(buf) self.__field_records.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_filename=USTRING(**{'sizeinbytes': 16}) self.__field_filename.readfrombuffer(buf) self.__field_records=LIST(**{'elementclass': phone, 'length': NUM_PHONES}) self.__field_records.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'sizeinbytes': 16}) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, None) def __getfield_records(self): return self.__field_records.getvalue() def __setfield_records(self, value): if isinstance(value,LIST): self.__field_records=value else: self.__field_records=LIST(value,**{'elementclass': phone, 'length': NUM_PHONES}) def __delfield_records(self): del self.__field_records records=property(__getfield_records, __setfield_records, __delfield_records, None) def iscontainer(self): return True def containerelements(self): yield ('filename', self.__field_filename, None) yield ('records', self.__field_records, None) class phone(BaseProtogenClass): __fields=['slot', 'others', 'owner_id', 'type', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phone,self).__init__(**dict) if self.__class__ is phone: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phone,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phone,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_others.writetobuffer(buf) self.__field_owner_id.writetobuffer(buf) self.__field_type.writetobuffer(buf) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_others=UINT(**{'sizeinbytes': 4}) self.__field_others.readfrombuffer(buf) self.__field_owner_id=UINT(**{'sizeinbytes': 4}) self.__field_owner_id.readfrombuffer(buf) self.__field_type=UINT(**{'sizeinbytes': 1}) self.__field_type.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 33}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_others(self): return self.__field_others.getvalue() def __setfield_others(self, value): if isinstance(value,UINT): self.__field_others=value else: self.__field_others=UINT(value,**{'sizeinbytes': 4}) def __delfield_others(self): del self.__field_others others=property(__getfield_others, __setfield_others, __delfield_others, None) def __getfield_owner_id(self): return self.__field_owner_id.getvalue() def __setfield_owner_id(self, value): if isinstance(value,UINT): self.__field_owner_id=value else: self.__field_owner_id=UINT(value,**{'sizeinbytes': 4}) def __delfield_owner_id(self): del self.__field_owner_id owner_id=property(__getfield_owner_id, __setfield_owner_id, __delfield_owner_id, None) def __getfield_type(self): return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,UINT): self.__field_type=value else: self.__field_type=UINT(value,**{'sizeinbytes': 1}) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, "Home / Work / Cell / Fax") def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 33}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('others', self.__field_others, None) yield ('owner_id', self.__field_owner_id, None) yield ('type', self.__field_type, "Home / Work / Cell / Fax") yield ('number', self.__field_number, None) bitpim-1.0.7+dfsg1/src/phones/p_samsungschu740.py0000644001616600161660000050312111317561520017721 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to the Samsung SCH-A950 Phone""" from prototypes import * from prototypes_samsung import * from p_brew import * from p_samsungscha950 import * RT_PATH='brew/mod/mr' RT_INDEX_FILE_NAME=RT_PATH+'/MrInfo.db' RT_EXCLUDED_FILES=('MrInfo.db',) SND_PATH='brew/mod/18067' SND_INDEX_FILE_NAME=SND_PATH+'/MsInfo.db' SND_EXCLUDED_FILES=('MsInfo.db', 'ExInfo.db') PIC_PATH='brew/mod/10888' PIC_INDEX_FILE_NAME=PIC_PATH+'/Default Album.alb' PIC_EXCLUDED_FILES=('Default Album.alb',) PIC_TYPE_HEADER=0 PIC_TYPE_BUILTIN=4 PIC_TYPE_USERS=3 VIDEO_PATH='brew/mod/10890' VIDEO_INDEX_FILE_NAME=VIDEO_PATH+'/Default Album.alb' PB_FLG_NOTE=0x0200 PB_MAX_NOTE_LEN=64 CL_MAX_ENTRIES=90 CL_TYPE_INCOMING=2 CL_TYPE_OUTGOING=1 CL_TYPE_MISSED=3 CL_TYPE_DELETED=5 CL_VALID_TYPE=frozenset((CL_TYPE_INCOMING, CL_TYPE_OUTGOING, CL_TYPE_MISSED)) class WRingtoneIndexEntry(BaseProtogenClass): __fields=['name', 'path_prefix', 'pathname', 'eor'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(WRingtoneIndexEntry,self).__init__(**dict) if self.__class__ is WRingtoneIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(WRingtoneIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(WRingtoneIndexEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_name except: self.__field_name=STRING() def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_path_prefix except: self.__field_path_prefix=STRING(**{ 'terminator': None, 'default': '/ff/' }) self.__field_path_prefix.writetobuffer(buf) self.__field_pathname.writetobuffer(buf) try: self.__field_eor except: self.__field_eor=STRING(**{ 'terminator': None, 'default': '|0|3\x0A' }) self.__field_eor.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_path_prefix=STRING(**{ 'terminator': None, 'default': '/ff/' }) self.__field_path_prefix.readfrombuffer(buf) self.__field_pathname=STRING(**{ 'terminator': None }) self.__field_pathname.readfrombuffer(buf) self.__field_eor=STRING(**{ 'terminator': None, 'default': '|0|3\x0A' }) self.__field_eor.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,STRING): self.__field_name=value else: self.__field_name=STRING(value,) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_path_prefix(self): try: self.__field_path_prefix except: self.__field_path_prefix=STRING(**{ 'terminator': None, 'default': '/ff/' }) return self.__field_path_prefix.getvalue() def __setfield_path_prefix(self, value): if isinstance(value,STRING): self.__field_path_prefix=value else: self.__field_path_prefix=STRING(value,**{ 'terminator': None, 'default': '/ff/' }) def __delfield_path_prefix(self): del self.__field_path_prefix path_prefix=property(__getfield_path_prefix, __setfield_path_prefix, __delfield_path_prefix, None) def __getfield_pathname(self): return self.__field_pathname.getvalue() def __setfield_pathname(self, value): if isinstance(value,STRING): self.__field_pathname=value else: self.__field_pathname=STRING(value,**{ 'terminator': None }) def __delfield_pathname(self): del self.__field_pathname pathname=property(__getfield_pathname, __setfield_pathname, __delfield_pathname, None) def __getfield_eor(self): try: self.__field_eor except: self.__field_eor=STRING(**{ 'terminator': None, 'default': '|0|3\x0A' }) return self.__field_eor.getvalue() def __setfield_eor(self, value): if isinstance(value,STRING): self.__field_eor=value else: self.__field_eor=STRING(value,**{ 'terminator': None, 'default': '|0|3\x0A' }) def __delfield_eor(self): del self.__field_eor eor=property(__getfield_eor, __setfield_eor, __delfield_eor, None) def iscontainer(self): return True def containerelements(self): yield ('name', self.__field_name, None) yield ('path_prefix', self.__field_path_prefix, None) yield ('pathname', self.__field_pathname, None) yield ('eor', self.__field_eor, None) class WRingtoneIndexFile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(WRingtoneIndexFile,self).__init__(**dict) if self.__class__ is WRingtoneIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(WRingtoneIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(WRingtoneIndexFile,kwargs) if len(args): dict2={ 'elementclass': WRingtoneIndexEntry } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': WRingtoneIndexEntry }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': WRingtoneIndexEntry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': WRingtoneIndexEntry }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': WRingtoneIndexEntry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class RRingtoneIndexEntry(BaseProtogenClass): __fields=['pathname', 'misc'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(RRingtoneIndexEntry,self).__init__(**dict) if self.__class__ is RRingtoneIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(RRingtoneIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(RRingtoneIndexEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pathname.writetobuffer(buf) self.__field_misc.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pathname=STRING(**{ 'terminator': 0x7C }) self.__field_pathname.readfrombuffer(buf) self.__field_misc=STRING(**{ 'terminator': 0x0A }) self.__field_misc.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pathname(self): return self.__field_pathname.getvalue() def __setfield_pathname(self, value): if isinstance(value,STRING): self.__field_pathname=value else: self.__field_pathname=STRING(value,**{ 'terminator': 0x7C }) def __delfield_pathname(self): del self.__field_pathname pathname=property(__getfield_pathname, __setfield_pathname, __delfield_pathname, None) def __getfield_misc(self): return self.__field_misc.getvalue() def __setfield_misc(self, value): if isinstance(value,STRING): self.__field_misc=value else: self.__field_misc=STRING(value,**{ 'terminator': 0x0A }) def __delfield_misc(self): del self.__field_misc misc=property(__getfield_misc, __setfield_misc, __delfield_misc, None) def iscontainer(self): return True def containerelements(self): yield ('pathname', self.__field_pathname, None) yield ('misc', self.__field_misc, None) class RRingtoneIndexFile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(RRingtoneIndexFile,self).__init__(**dict) if self.__class__ is RRingtoneIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(RRingtoneIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(RRingtoneIndexFile,kwargs) if len(args): dict2={ 'elementclass': RRingtoneIndexEntry } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': RRingtoneIndexEntry }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': RRingtoneIndexEntry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': RRingtoneIndexEntry }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': RRingtoneIndexEntry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class WSoundsIndexEntry(BaseProtogenClass): __fields=['name', 'path_prefix', 'pathname', 'eor'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(WSoundsIndexEntry,self).__init__(**dict) if self.__class__ is WSoundsIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(WSoundsIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(WSoundsIndexEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_name except: self.__field_name=STRING() def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_path_prefix except: self.__field_path_prefix=STRING(**{ 'terminator': None, 'default': '/ff/' }) self.__field_path_prefix.writetobuffer(buf) self.__field_pathname.writetobuffer(buf) try: self.__field_eor except: self.__field_eor=STRING(**{ 'terminator': None, 'default': '|0|7\x0A' }) self.__field_eor.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_path_prefix=STRING(**{ 'terminator': None, 'default': '/ff/' }) self.__field_path_prefix.readfrombuffer(buf) self.__field_pathname=STRING(**{ 'terminator': None }) self.__field_pathname.readfrombuffer(buf) self.__field_eor=STRING(**{ 'terminator': None, 'default': '|0|7\x0A' }) self.__field_eor.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,STRING): self.__field_name=value else: self.__field_name=STRING(value,) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_path_prefix(self): try: self.__field_path_prefix except: self.__field_path_prefix=STRING(**{ 'terminator': None, 'default': '/ff/' }) return self.__field_path_prefix.getvalue() def __setfield_path_prefix(self, value): if isinstance(value,STRING): self.__field_path_prefix=value else: self.__field_path_prefix=STRING(value,**{ 'terminator': None, 'default': '/ff/' }) def __delfield_path_prefix(self): del self.__field_path_prefix path_prefix=property(__getfield_path_prefix, __setfield_path_prefix, __delfield_path_prefix, None) def __getfield_pathname(self): return self.__field_pathname.getvalue() def __setfield_pathname(self, value): if isinstance(value,STRING): self.__field_pathname=value else: self.__field_pathname=STRING(value,**{ 'terminator': None }) def __delfield_pathname(self): del self.__field_pathname pathname=property(__getfield_pathname, __setfield_pathname, __delfield_pathname, None) def __getfield_eor(self): try: self.__field_eor except: self.__field_eor=STRING(**{ 'terminator': None, 'default': '|0|7\x0A' }) return self.__field_eor.getvalue() def __setfield_eor(self, value): if isinstance(value,STRING): self.__field_eor=value else: self.__field_eor=STRING(value,**{ 'terminator': None, 'default': '|0|7\x0A' }) def __delfield_eor(self): del self.__field_eor eor=property(__getfield_eor, __setfield_eor, __delfield_eor, None) def iscontainer(self): return True def containerelements(self): yield ('name', self.__field_name, None) yield ('path_prefix', self.__field_path_prefix, None) yield ('pathname', self.__field_pathname, None) yield ('eor', self.__field_eor, None) class WSoundsIndexFile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(WSoundsIndexFile,self).__init__(**dict) if self.__class__ is WSoundsIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(WSoundsIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(WSoundsIndexFile,kwargs) if len(args): dict2={ 'elementclass': WSoundsIndexEntry } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': WSoundsIndexEntry }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': WSoundsIndexEntry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': WSoundsIndexEntry }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': WSoundsIndexEntry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class RSoundIndexEntry(BaseProtogenClass): __fields=['pathname', 'misc'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(RSoundIndexEntry,self).__init__(**dict) if self.__class__ is RSoundIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(RSoundIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(RSoundIndexEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pathname.writetobuffer(buf) self.__field_misc.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pathname=STRING(**{ 'terminator': 0x7C }) self.__field_pathname.readfrombuffer(buf) self.__field_misc=STRING(**{ 'terminator': 0x0A }) self.__field_misc.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pathname(self): return self.__field_pathname.getvalue() def __setfield_pathname(self, value): if isinstance(value,STRING): self.__field_pathname=value else: self.__field_pathname=STRING(value,**{ 'terminator': 0x7C }) def __delfield_pathname(self): del self.__field_pathname pathname=property(__getfield_pathname, __setfield_pathname, __delfield_pathname, None) def __getfield_misc(self): return self.__field_misc.getvalue() def __setfield_misc(self, value): if isinstance(value,STRING): self.__field_misc=value else: self.__field_misc=STRING(value,**{ 'terminator': 0x0A }) def __delfield_misc(self): del self.__field_misc misc=property(__getfield_misc, __setfield_misc, __delfield_misc, None) def iscontainer(self): return True def containerelements(self): yield ('pathname', self.__field_pathname, None) yield ('misc', self.__field_misc, None) class RSoundsIndexFile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(RSoundsIndexFile,self).__init__(**dict) if self.__class__ is RSoundsIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(RSoundsIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(RSoundsIndexFile,kwargs) if len(args): dict2={ 'elementclass': RSoundIndexEntry } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': RSoundIndexEntry }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': RSoundIndexEntry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': RSoundIndexEntry }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': RSoundIndexEntry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class WPictureIndexEntry(BaseProtogenClass): __fields=['path_prefix', 'pathname', 'path_name', 'pictype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(WPictureIndexEntry,self).__init__(**dict) if self.__class__ is WPictureIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(WPictureIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(WPictureIndexEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_path_prefix except: self.__field_path_prefix=STRING(**{ 'default': '/ff/' }) try: self.__field_pathname except: self.__field_pathname=STRING(**{ 'terminator': None }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_path_name except: self.__field_path_name=STRING(**{'sizeinbytes': 258, 'terminator': 0, 'default': self.path_prefix+self.pathname }) self.__field_path_name.writetobuffer(buf) try: self.__field_pictype except: self.__field_pictype=UINT(**{'sizeinbytes': 2, 'default': PIC_TYPE_USERS }) self.__field_pictype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_path_name=STRING(**{'sizeinbytes': 258, 'terminator': 0, 'default': self.path_prefix+self.pathname }) self.__field_path_name.readfrombuffer(buf) self.__field_pictype=UINT(**{'sizeinbytes': 2, 'default': PIC_TYPE_USERS }) self.__field_pictype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_path_prefix(self): try: self.__field_path_prefix except: self.__field_path_prefix=STRING(**{ 'default': '/ff/' }) return self.__field_path_prefix.getvalue() def __setfield_path_prefix(self, value): if isinstance(value,STRING): self.__field_path_prefix=value else: self.__field_path_prefix=STRING(value,**{ 'default': '/ff/' }) def __delfield_path_prefix(self): del self.__field_path_prefix path_prefix=property(__getfield_path_prefix, __setfield_path_prefix, __delfield_path_prefix, None) def __getfield_pathname(self): return self.__field_pathname.getvalue() def __setfield_pathname(self, value): if isinstance(value,STRING): self.__field_pathname=value else: self.__field_pathname=STRING(value,**{ 'terminator': None }) def __delfield_pathname(self): del self.__field_pathname pathname=property(__getfield_pathname, __setfield_pathname, __delfield_pathname, None) def __getfield_path_name(self): try: self.__field_path_name except: self.__field_path_name=STRING(**{'sizeinbytes': 258, 'terminator': 0, 'default': self.path_prefix+self.pathname }) return self.__field_path_name.getvalue() def __setfield_path_name(self, value): if isinstance(value,STRING): self.__field_path_name=value else: self.__field_path_name=STRING(value,**{'sizeinbytes': 258, 'terminator': 0, 'default': self.path_prefix+self.pathname }) def __delfield_path_name(self): del self.__field_path_name path_name=property(__getfield_path_name, __setfield_path_name, __delfield_path_name, None) def __getfield_pictype(self): try: self.__field_pictype except: self.__field_pictype=UINT(**{'sizeinbytes': 2, 'default': PIC_TYPE_USERS }) return self.__field_pictype.getvalue() def __setfield_pictype(self, value): if isinstance(value,UINT): self.__field_pictype=value else: self.__field_pictype=UINT(value,**{'sizeinbytes': 2, 'default': PIC_TYPE_USERS }) def __delfield_pictype(self): del self.__field_pictype pictype=property(__getfield_pictype, __setfield_pictype, __delfield_pictype, "0= invalid, 4=builtin, 3=users") def iscontainer(self): return True def containerelements(self): yield ('path_prefix', self.__field_path_prefix, None) yield ('pathname', self.__field_pathname, None) yield ('path_name', self.__field_path_name, None) yield ('pictype', self.__field_pictype, "0= invalid, 4=builtin, 3=users") class WPictureIndexFile(BaseProtogenClass): __fields=['header', 'preloaded1', 'preloaded2', 'preloaded3', 'preloaded4', 'preloaded5', 'preloaded6', 'preloaded7', 'preloaded8', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(WPictureIndexFile,self).__init__(**dict) if self.__class__ is WPictureIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(WPictureIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(WPictureIndexFile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=WPictureIndexEntry(**{ 'pathname': '0|/ff/brew/mod/10888/Default Album|\x0A', 'path_prefix': '', 'pictype': PIC_TYPE_HEADER }) self.__field_header.writetobuffer(buf) try: self.__field_preloaded1 except: self.__field_preloaded1=WPictureIndexEntry(**{ 'pathname': 'Preloaded1', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) self.__field_preloaded1.writetobuffer(buf) try: self.__field_preloaded2 except: self.__field_preloaded2=WPictureIndexEntry(**{ 'pathname': 'Preloaded2', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) self.__field_preloaded2.writetobuffer(buf) try: self.__field_preloaded3 except: self.__field_preloaded3=WPictureIndexEntry(**{ 'pathname': 'Preloaded3', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) self.__field_preloaded3.writetobuffer(buf) try: self.__field_preloaded4 except: self.__field_preloaded4=WPictureIndexEntry(**{ 'pathname': 'Preloaded4', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) self.__field_preloaded4.writetobuffer(buf) try: self.__field_preloaded5 except: self.__field_preloaded5=WPictureIndexEntry(**{ 'pathname': 'Preloaded5', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) self.__field_preloaded5.writetobuffer(buf) try: self.__field_preloaded6 except: self.__field_preloaded6=WPictureIndexEntry(**{ 'pathname': 'Preloaded6', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) self.__field_preloaded6.writetobuffer(buf) try: self.__field_preloaded7 except: self.__field_preloaded7=WPictureIndexEntry(**{ 'pathname': 'Preloaded7', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) self.__field_preloaded7.writetobuffer(buf) try: self.__field_preloaded8 except: self.__field_preloaded8=WPictureIndexEntry(**{ 'pathname': 'Preloaded8', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) self.__field_preloaded8.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': WPictureIndexEntry }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=WPictureIndexEntry(**{ 'pathname': '0|/ff/brew/mod/10888/Default Album|\x0A', 'path_prefix': '', 'pictype': PIC_TYPE_HEADER }) self.__field_header.readfrombuffer(buf) self.__field_preloaded1=WPictureIndexEntry(**{ 'pathname': 'Preloaded1', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) self.__field_preloaded1.readfrombuffer(buf) self.__field_preloaded2=WPictureIndexEntry(**{ 'pathname': 'Preloaded2', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) self.__field_preloaded2.readfrombuffer(buf) self.__field_preloaded3=WPictureIndexEntry(**{ 'pathname': 'Preloaded3', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) self.__field_preloaded3.readfrombuffer(buf) self.__field_preloaded4=WPictureIndexEntry(**{ 'pathname': 'Preloaded4', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) self.__field_preloaded4.readfrombuffer(buf) self.__field_preloaded5=WPictureIndexEntry(**{ 'pathname': 'Preloaded5', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) self.__field_preloaded5.readfrombuffer(buf) self.__field_preloaded6=WPictureIndexEntry(**{ 'pathname': 'Preloaded6', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) self.__field_preloaded6.readfrombuffer(buf) self.__field_preloaded7=WPictureIndexEntry(**{ 'pathname': 'Preloaded7', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) self.__field_preloaded7.readfrombuffer(buf) self.__field_preloaded8=WPictureIndexEntry(**{ 'pathname': 'Preloaded8', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) self.__field_preloaded8.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': WPictureIndexEntry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=WPictureIndexEntry(**{ 'pathname': '0|/ff/brew/mod/10888/Default Album|\x0A', 'path_prefix': '', 'pictype': PIC_TYPE_HEADER }) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,WPictureIndexEntry): self.__field_header=value else: self.__field_header=WPictureIndexEntry(value,**{ 'pathname': '0|/ff/brew/mod/10888/Default Album|\x0A', 'path_prefix': '', 'pictype': PIC_TYPE_HEADER }) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_preloaded1(self): try: self.__field_preloaded1 except: self.__field_preloaded1=WPictureIndexEntry(**{ 'pathname': 'Preloaded1', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) return self.__field_preloaded1.getvalue() def __setfield_preloaded1(self, value): if isinstance(value,WPictureIndexEntry): self.__field_preloaded1=value else: self.__field_preloaded1=WPictureIndexEntry(value,**{ 'pathname': 'Preloaded1', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) def __delfield_preloaded1(self): del self.__field_preloaded1 preloaded1=property(__getfield_preloaded1, __setfield_preloaded1, __delfield_preloaded1, None) def __getfield_preloaded2(self): try: self.__field_preloaded2 except: self.__field_preloaded2=WPictureIndexEntry(**{ 'pathname': 'Preloaded2', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) return self.__field_preloaded2.getvalue() def __setfield_preloaded2(self, value): if isinstance(value,WPictureIndexEntry): self.__field_preloaded2=value else: self.__field_preloaded2=WPictureIndexEntry(value,**{ 'pathname': 'Preloaded2', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) def __delfield_preloaded2(self): del self.__field_preloaded2 preloaded2=property(__getfield_preloaded2, __setfield_preloaded2, __delfield_preloaded2, None) def __getfield_preloaded3(self): try: self.__field_preloaded3 except: self.__field_preloaded3=WPictureIndexEntry(**{ 'pathname': 'Preloaded3', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) return self.__field_preloaded3.getvalue() def __setfield_preloaded3(self, value): if isinstance(value,WPictureIndexEntry): self.__field_preloaded3=value else: self.__field_preloaded3=WPictureIndexEntry(value,**{ 'pathname': 'Preloaded3', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) def __delfield_preloaded3(self): del self.__field_preloaded3 preloaded3=property(__getfield_preloaded3, __setfield_preloaded3, __delfield_preloaded3, None) def __getfield_preloaded4(self): try: self.__field_preloaded4 except: self.__field_preloaded4=WPictureIndexEntry(**{ 'pathname': 'Preloaded4', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) return self.__field_preloaded4.getvalue() def __setfield_preloaded4(self, value): if isinstance(value,WPictureIndexEntry): self.__field_preloaded4=value else: self.__field_preloaded4=WPictureIndexEntry(value,**{ 'pathname': 'Preloaded4', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) def __delfield_preloaded4(self): del self.__field_preloaded4 preloaded4=property(__getfield_preloaded4, __setfield_preloaded4, __delfield_preloaded4, None) def __getfield_preloaded5(self): try: self.__field_preloaded5 except: self.__field_preloaded5=WPictureIndexEntry(**{ 'pathname': 'Preloaded5', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) return self.__field_preloaded5.getvalue() def __setfield_preloaded5(self, value): if isinstance(value,WPictureIndexEntry): self.__field_preloaded5=value else: self.__field_preloaded5=WPictureIndexEntry(value,**{ 'pathname': 'Preloaded5', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) def __delfield_preloaded5(self): del self.__field_preloaded5 preloaded5=property(__getfield_preloaded5, __setfield_preloaded5, __delfield_preloaded5, None) def __getfield_preloaded6(self): try: self.__field_preloaded6 except: self.__field_preloaded6=WPictureIndexEntry(**{ 'pathname': 'Preloaded6', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) return self.__field_preloaded6.getvalue() def __setfield_preloaded6(self, value): if isinstance(value,WPictureIndexEntry): self.__field_preloaded6=value else: self.__field_preloaded6=WPictureIndexEntry(value,**{ 'pathname': 'Preloaded6', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) def __delfield_preloaded6(self): del self.__field_preloaded6 preloaded6=property(__getfield_preloaded6, __setfield_preloaded6, __delfield_preloaded6, None) def __getfield_preloaded7(self): try: self.__field_preloaded7 except: self.__field_preloaded7=WPictureIndexEntry(**{ 'pathname': 'Preloaded7', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) return self.__field_preloaded7.getvalue() def __setfield_preloaded7(self, value): if isinstance(value,WPictureIndexEntry): self.__field_preloaded7=value else: self.__field_preloaded7=WPictureIndexEntry(value,**{ 'pathname': 'Preloaded7', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) def __delfield_preloaded7(self): del self.__field_preloaded7 preloaded7=property(__getfield_preloaded7, __setfield_preloaded7, __delfield_preloaded7, None) def __getfield_preloaded8(self): try: self.__field_preloaded8 except: self.__field_preloaded8=WPictureIndexEntry(**{ 'pathname': 'Preloaded8', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) return self.__field_preloaded8.getvalue() def __setfield_preloaded8(self, value): if isinstance(value,WPictureIndexEntry): self.__field_preloaded8=value else: self.__field_preloaded8=WPictureIndexEntry(value,**{ 'pathname': 'Preloaded8', 'path_prefix': '', 'pictype': PIC_TYPE_BUILTIN }) def __delfield_preloaded8(self): del self.__field_preloaded8 preloaded8=property(__getfield_preloaded8, __setfield_preloaded8, __delfield_preloaded8, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': WPictureIndexEntry }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': WPictureIndexEntry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('preloaded1', self.__field_preloaded1, None) yield ('preloaded2', self.__field_preloaded2, None) yield ('preloaded3', self.__field_preloaded3, None) yield ('preloaded4', self.__field_preloaded4, None) yield ('preloaded5', self.__field_preloaded5, None) yield ('preloaded6', self.__field_preloaded6, None) yield ('preloaded7', self.__field_preloaded7, None) yield ('preloaded8', self.__field_preloaded8, None) yield ('items', self.__field_items, None) class RPictureIndexEntry(BaseProtogenClass): __fields=['pathname', 'pictype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(RPictureIndexEntry,self).__init__(**dict) if self.__class__ is RPictureIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(RPictureIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(RPictureIndexEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pathname.writetobuffer(buf) self.__field_pictype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pathname=STRING(**{'sizeinbytes': 258, 'terminator': 0, 'raiseonunterminatedread': False }) self.__field_pathname.readfrombuffer(buf) self.__field_pictype=UINT(**{'sizeinbytes': 2}) self.__field_pictype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pathname(self): return self.__field_pathname.getvalue() def __setfield_pathname(self, value): if isinstance(value,STRING): self.__field_pathname=value else: self.__field_pathname=STRING(value,**{'sizeinbytes': 258, 'terminator': 0, 'raiseonunterminatedread': False }) def __delfield_pathname(self): del self.__field_pathname pathname=property(__getfield_pathname, __setfield_pathname, __delfield_pathname, None) def __getfield_pictype(self): return self.__field_pictype.getvalue() def __setfield_pictype(self, value): if isinstance(value,UINT): self.__field_pictype=value else: self.__field_pictype=UINT(value,**{'sizeinbytes': 2}) def __delfield_pictype(self): del self.__field_pictype pictype=property(__getfield_pictype, __setfield_pictype, __delfield_pictype, "0= invalid, 4=builtin, 3=users") def iscontainer(self): return True def containerelements(self): yield ('pathname', self.__field_pathname, None) yield ('pictype', self.__field_pictype, "0= invalid, 4=builtin, 3=users") class RPictureIndexFile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(RPictureIndexFile,self).__init__(**dict) if self.__class__ is RPictureIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(RPictureIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(RPictureIndexFile,kwargs) if len(args): dict2={ 'elementclass': RPictureIndexEntry } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': RPictureIndexEntry }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': RPictureIndexEntry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': RPictureIndexEntry }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': RPictureIndexEntry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class NumberEntry(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['number', 'option', 'speeddial', 'ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(NumberEntry,self).__init__(**dict) if self.__class__ is NumberEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(NumberEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(NumberEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=STRING(**{ 'terminator': None, 'pascal': True }) self.__field_number.readfrombuffer(buf) self.__field_option=UINT(**{'sizeinbytes': 1}) self.__field_option.readfrombuffer(buf) if self.has_speeddial: self.__field_speeddial=UINT(**{'sizeinbytes': 2}) self.__field_speeddial.readfrombuffer(buf) if self.has_ringtone: self.__field_ringtone=STRING(**{ 'terminator': None, 'pascal': True }) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,STRING): self.__field_number=value else: self.__field_number=STRING(value,**{ 'terminator': None, 'pascal': True }) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_option(self): return self.__field_option.getvalue() def __setfield_option(self, value): if isinstance(value,UINT): self.__field_option=value else: self.__field_option=UINT(value,**{'sizeinbytes': 1}) def __delfield_option(self): del self.__field_option option=property(__getfield_option, __setfield_option, __delfield_option, None) def __getfield_speeddial(self): return self.__field_speeddial.getvalue() def __setfield_speeddial(self, value): if isinstance(value,UINT): self.__field_speeddial=value else: self.__field_speeddial=UINT(value,**{'sizeinbytes': 2}) def __delfield_speeddial(self): del self.__field_speeddial speeddial=property(__getfield_speeddial, __setfield_speeddial, __delfield_speeddial, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,STRING): self.__field_ringtone=value else: self.__field_ringtone=STRING(value,**{ 'terminator': None, 'pascal': True }) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) yield ('option', self.__field_option, None) if self.has_speeddial: yield ('speeddial', self.__field_speeddial, None) if self.has_ringtone: yield ('ringtone', self.__field_ringtone, None) @property def has_speeddial(self): return bool(self.option & PB_FLG_SPEEDDIAL) @property def has_ringtone(self): return bool(self.option & PB_FLG_RINGTONE) @property def is_primary(self): return bool(self.option & PB_FLG_PRIMARY) class PBEntry(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['info', 'name', 'email', 'email2', 'home', 'work', 'cell', 'fax', 'cell2', 'note', 'datetime', 'group', 'wallpaper', 'wallpaper_range'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PBEntry,self).__init__(**dict) if self.__class__ is PBEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PBEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PBEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_info=UINT(**{'sizeinbytes': 2}) self.__field_info.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 2}).readfrombuffer(buf) if self.has_name: self.__field_name=USTRING(**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) self.__field_name.readfrombuffer(buf) if self.has_email: self.__field_email=USTRING(**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) self.__field_email.readfrombuffer(buf) if self.has_email2: self.__field_email2=USTRING(**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) self.__field_email2.readfrombuffer(buf) if self.has_home: self.__field_home=NumberEntry() self.__field_home.readfrombuffer(buf) if self.has_work: self.__field_work=NumberEntry() self.__field_work.readfrombuffer(buf) if self.has_cell: self.__field_cell=NumberEntry() self.__field_cell.readfrombuffer(buf) if self.has_fax: self.__field_fax=NumberEntry() self.__field_fax.readfrombuffer(buf) if self.has_cell2: self.__field_cell2=NumberEntry() self.__field_cell2.readfrombuffer(buf) if self.has_note: self.__field_note=STRING(**{ 'terminator': None, 'pascal': True }) self.__field_note.readfrombuffer(buf) if self.has_date: self.__field_datetime=DateTime(**{'sizeinbytes': 4}) self.__field_datetime.readfrombuffer(buf) if self.hsa_group: self.__field_group=UINT(**{'sizeinbytes': 1}) self.__field_group.readfrombuffer(buf) if self.has_wallpaper: self.__field_wallpaper=STRING(**{ 'terminator': None, 'pascal': True }) self.__field_wallpaper.readfrombuffer(buf) self.__field_wallpaper_range=UINT(**{'sizeinbytes': 4}) self.__field_wallpaper_range.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_info(self): return self.__field_info.getvalue() def __setfield_info(self, value): if isinstance(value,UINT): self.__field_info=value else: self.__field_info=UINT(value,**{'sizeinbytes': 2}) def __delfield_info(self): del self.__field_info info=property(__getfield_info, __setfield_info, __delfield_info, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def __getfield_email2(self): return self.__field_email2.getvalue() def __setfield_email2(self, value): if isinstance(value,USTRING): self.__field_email2=value else: self.__field_email2=USTRING(value,**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) def __delfield_email2(self): del self.__field_email2 email2=property(__getfield_email2, __setfield_email2, __delfield_email2, None) def __getfield_home(self): return self.__field_home.getvalue() def __setfield_home(self, value): if isinstance(value,NumberEntry): self.__field_home=value else: self.__field_home=NumberEntry(value,) def __delfield_home(self): del self.__field_home home=property(__getfield_home, __setfield_home, __delfield_home, None) def __getfield_work(self): return self.__field_work.getvalue() def __setfield_work(self, value): if isinstance(value,NumberEntry): self.__field_work=value else: self.__field_work=NumberEntry(value,) def __delfield_work(self): del self.__field_work work=property(__getfield_work, __setfield_work, __delfield_work, None) def __getfield_cell(self): return self.__field_cell.getvalue() def __setfield_cell(self, value): if isinstance(value,NumberEntry): self.__field_cell=value else: self.__field_cell=NumberEntry(value,) def __delfield_cell(self): del self.__field_cell cell=property(__getfield_cell, __setfield_cell, __delfield_cell, None) def __getfield_fax(self): return self.__field_fax.getvalue() def __setfield_fax(self, value): if isinstance(value,NumberEntry): self.__field_fax=value else: self.__field_fax=NumberEntry(value,) def __delfield_fax(self): del self.__field_fax fax=property(__getfield_fax, __setfield_fax, __delfield_fax, None) def __getfield_cell2(self): return self.__field_cell2.getvalue() def __setfield_cell2(self, value): if isinstance(value,NumberEntry): self.__field_cell2=value else: self.__field_cell2=NumberEntry(value,) def __delfield_cell2(self): del self.__field_cell2 cell2=property(__getfield_cell2, __setfield_cell2, __delfield_cell2, None) def __getfield_note(self): return self.__field_note.getvalue() def __setfield_note(self, value): if isinstance(value,STRING): self.__field_note=value else: self.__field_note=STRING(value,**{ 'terminator': None, 'pascal': True }) def __delfield_note(self): del self.__field_note note=property(__getfield_note, __setfield_note, __delfield_note, None) def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,DateTime): self.__field_datetime=value else: self.__field_datetime=DateTime(value,**{'sizeinbytes': 4}) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 1}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,STRING): self.__field_wallpaper=value else: self.__field_wallpaper=STRING(value,**{ 'terminator': None, 'pascal': True }) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_wallpaper_range(self): return self.__field_wallpaper_range.getvalue() def __setfield_wallpaper_range(self, value): if isinstance(value,UINT): self.__field_wallpaper_range=value else: self.__field_wallpaper_range=UINT(value,**{'sizeinbytes': 4}) def __delfield_wallpaper_range(self): del self.__field_wallpaper_range wallpaper_range=property(__getfield_wallpaper_range, __setfield_wallpaper_range, __delfield_wallpaper_range, None) def iscontainer(self): return True def containerelements(self): yield ('info', self.__field_info, None) if self.has_name: yield ('name', self.__field_name, None) if self.has_email: yield ('email', self.__field_email, None) if self.has_email2: yield ('email2', self.__field_email2, None) if self.has_home: yield ('home', self.__field_home, None) if self.has_work: yield ('work', self.__field_work, None) if self.has_cell: yield ('cell', self.__field_cell, None) if self.has_fax: yield ('fax', self.__field_fax, None) if self.has_cell2: yield ('cell2', self.__field_cell2, None) if self.has_note: yield ('note', self.__field_note, None) if self.has_date: yield ('datetime', self.__field_datetime, None) if self.hsa_group: yield ('group', self.__field_group, None) if self.has_wallpaper: yield ('wallpaper', self.__field_wallpaper, None) yield ('wallpaper_range', self.__field_wallpaper_range, None) @property def has_name(self): return bool(self.info & PB_FLG_NAME) @property def has_email(self): return bool(self.info & PB_FLG_EMAIL) @property def has_email2(self): return bool(self.info & PB_FLG_EMAIL2) @property def has_home(self): return bool(self.info & PB_FLG_HOME) @property def has_work(self): return bool(self.info & PB_FLG_WORK) @property def has_cell(self): return bool(self.info & PB_FLG_CELL) @property def has_fax(self): return bool(self.info & PB_FLG_FAX) @property def has_cell2(self): return bool(self.info & PB_FLG_CELL2) @property def has_note(self): return bool(self.info & PB_FLG_NOTE) @property def has_date(self): return bool(self.info & PB_FLG_DATE) @property def has_group(self): return bool(self.info & PB_FLG_GROUP) @property def has_wallpaper(self): return bool(self.info & PB_FLG_WP) class LenEntry(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['itemlen'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(LenEntry,self).__init__(**dict) if self.__class__ is LenEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(LenEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(LenEntry,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0 } dict2.update(kwargs) kwargs=dict2 self.__field_itemlen=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_itemlen=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_itemlen.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_itemlen(self): try: self.__field_itemlen except: self.__field_itemlen=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_itemlen.getvalue() def __setfield_itemlen(self, value): if isinstance(value,UINT): self.__field_itemlen=value else: self.__field_itemlen=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_itemlen(self): del self.__field_itemlen itemlen=property(__getfield_itemlen, __setfield_itemlen, __delfield_itemlen, None) def iscontainer(self): return True def containerelements(self): yield ('itemlen', self.__field_itemlen, None) class PBFile(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['lens', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PBFile,self).__init__(**dict) if self.__class__ is PBFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PBFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PBFile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_lens=LIST(**{ 'elementclass': LenEntry, 'length': 8, 'createdefault': True }) self.__field_lens.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': PBEntry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_lens(self): try: self.__field_lens except: self.__field_lens=LIST(**{ 'elementclass': LenEntry, 'length': 8, 'createdefault': True }) return self.__field_lens.getvalue() def __setfield_lens(self, value): if isinstance(value,LIST): self.__field_lens=value else: self.__field_lens=LIST(value,**{ 'elementclass': LenEntry, 'length': 8, 'createdefault': True }) def __delfield_lens(self): del self.__field_lens lens=property(__getfield_lens, __setfield_lens, __delfield_lens, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': PBEntry }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': PBEntry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('lens', self.__field_lens, None) yield ('items', self.__field_items, None) class PBFileHeader(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['lens'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PBFileHeader,self).__init__(**dict) if self.__class__ is PBFileHeader: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PBFileHeader,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PBFileHeader,kwargs) if len(args): dict2={ 'elementclass': LenEntry, 'length': 8, 'createdefault': True } dict2.update(kwargs) kwargs=dict2 self.__field_lens=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_lens=LIST(**{ 'elementclass': LenEntry, 'length': 8, 'createdefault': True }) self.__field_lens.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_lens(self): try: self.__field_lens except: self.__field_lens=LIST(**{ 'elementclass': LenEntry, 'length': 8, 'createdefault': True }) return self.__field_lens.getvalue() def __setfield_lens(self, value): if isinstance(value,LIST): self.__field_lens=value else: self.__field_lens=LIST(value,**{ 'elementclass': LenEntry, 'length': 8, 'createdefault': True }) def __delfield_lens(self): del self.__field_lens lens=property(__getfield_lens, __setfield_lens, __delfield_lens, None) def iscontainer(self): return True def containerelements(self): yield ('lens', self.__field_lens, None) class ss_number_entry(BaseProtogenClass): __fields=['number', 'speeddial', 'primary', 'ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_number_entry,self).__init__(**dict) if self.__class__ is ss_number_entry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_number_entry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_number_entry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_number except: self.__field_number=STRING(**{ 'terminator': 0, 'default': '', 'maxsizeinbytes': PB_MAX_NUMBER_LEN, 'raiseontruncate': False }) self.__field_number.writetobuffer(buf) try: self.__field_speeddial except: self.__field_speeddial=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_speeddial.writetobuffer(buf) try: self.__field_primary except: self.__field_primary=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_primary.writetobuffer(buf) try: self.__field__gen_p_samsungschu740_244 except: self.__field__gen_p_samsungschu740_244=DONTCARE(**{'sizeinbytes': 8}) self.__field__gen_p_samsungschu740_244.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=STRING(**{ 'terminator': 0, 'default': '' }) self.__field_ringtone.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=STRING(**{ 'terminator': 0, 'default': '', 'maxsizeinbytes': PB_MAX_NUMBER_LEN, 'raiseontruncate': False }) self.__field_number.readfrombuffer(buf) self.__field_speeddial=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_speeddial.readfrombuffer(buf) self.__field_primary=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_primary.readfrombuffer(buf) self.__field__gen_p_samsungschu740_244=DONTCARE(**{'sizeinbytes': 8}) self.__field__gen_p_samsungschu740_244.readfrombuffer(buf) self.__field_ringtone=STRING(**{ 'terminator': 0, 'default': '' }) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): try: self.__field_number except: self.__field_number=STRING(**{ 'terminator': 0, 'default': '', 'maxsizeinbytes': PB_MAX_NUMBER_LEN, 'raiseontruncate': False }) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,STRING): self.__field_number=value else: self.__field_number=STRING(value,**{ 'terminator': 0, 'default': '', 'maxsizeinbytes': PB_MAX_NUMBER_LEN, 'raiseontruncate': False }) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_speeddial(self): try: self.__field_speeddial except: self.__field_speeddial=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_speeddial.getvalue() def __setfield_speeddial(self, value): if isinstance(value,UINT): self.__field_speeddial=value else: self.__field_speeddial=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_speeddial(self): del self.__field_speeddial speeddial=property(__getfield_speeddial, __setfield_speeddial, __delfield_speeddial, None) def __getfield_primary(self): try: self.__field_primary except: self.__field_primary=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_primary.getvalue() def __setfield_primary(self, value): if isinstance(value,UINT): self.__field_primary=value else: self.__field_primary=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_primary(self): del self.__field_primary primary=property(__getfield_primary, __setfield_primary, __delfield_primary, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=STRING(**{ 'terminator': 0, 'default': '' }) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,STRING): self.__field_ringtone=value else: self.__field_ringtone=STRING(value,**{ 'terminator': 0, 'default': '' }) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) yield ('speeddial', self.__field_speeddial, None) yield ('primary', self.__field_primary, None) yield ('ringtone', self.__field_ringtone, None) class ss_pb_entry(BaseProtogenClass): __fields=['name', 'email', 'email2', 'note', 'wallpaper', 'wallpaper_range', 'home', 'work', 'cell', 'dummy', 'fax', 'cell2', 'group'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_entry,self).__init__(**dict) if self.__class__ is ss_pb_entry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_entry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_entry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_name.writetobuffer(buf) try: self.__field_email except: self.__field_email=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) self.__field_email.writetobuffer(buf) try: self.__field_email2 except: self.__field_email2=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) self.__field_email2.writetobuffer(buf) try: self.__field__gen_p_samsungschu740_263 except: self.__field__gen_p_samsungschu740_263=DONTCARE(**{'sizeinbytes': 2}) self.__field__gen_p_samsungschu740_263.writetobuffer(buf) try: self.__field_note except: self.__field_note=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_NOTE_LEN, 'raiseontruncate': False, 'default': '' }) self.__field_note.writetobuffer(buf) try: self.__field__gen_p_samsungschu740_269 except: self.__field__gen_p_samsungschu740_269=DONTCARE(**{'sizeinbytes': 1}) self.__field__gen_p_samsungschu740_269.writetobuffer(buf) try: self.__field_wallpaper except: self.__field_wallpaper=STRING(**{ 'terminator': 0, 'default': '' }) self.__field_wallpaper.writetobuffer(buf) try: self.__field_wallpaper_range except: self.__field_wallpaper_range=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_wallpaper_range.writetobuffer(buf) try: self.__field__gen_p_samsungschu740_273 except: self.__field__gen_p_samsungschu740_273=DONTCARE(**{'sizeinbytes': 1}) self.__field__gen_p_samsungschu740_273.writetobuffer(buf) try: self.__field_home except: self.__field_home=ss_number_entry() self.__field_home.writetobuffer(buf) try: self.__field_work except: self.__field_work=ss_number_entry() self.__field_work.writetobuffer(buf) try: self.__field_cell except: self.__field_cell=ss_number_entry() self.__field_cell.writetobuffer(buf) try: self.__field_dummy except: self.__field_dummy=ss_number_entry() self.__field_dummy.writetobuffer(buf) try: self.__field_fax except: self.__field_fax=ss_number_entry() self.__field_fax.writetobuffer(buf) try: self.__field_cell2 except: self.__field_cell2=ss_number_entry() self.__field_cell2.writetobuffer(buf) try: self.__field__gen_p_samsungschu740_280 except: self.__field__gen_p_samsungschu740_280=DONTCARE(**{'sizeinbytes': 4}) self.__field__gen_p_samsungschu740_280.writetobuffer(buf) try: self.__field_group except: self.__field_group=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_group.writetobuffer(buf) try: self.__field__gen_p_samsungschu740_282 except: self.__field__gen_p_samsungschu740_282=DONTCARE(**{'sizeinbytes': 2}) self.__field__gen_p_samsungschu740_282.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_name=USTRING(**{ 'terminator': 0, 'maxsizeinbytes': PB_MAX_NAME_LEN, 'encoding': ENCODING, 'raiseontruncate': False }) self.__field_name.readfrombuffer(buf) self.__field_email=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) self.__field_email.readfrombuffer(buf) self.__field_email2=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) self.__field_email2.readfrombuffer(buf) self.__field__gen_p_samsungschu740_263=DONTCARE(**{'sizeinbytes': 2}) self.__field__gen_p_samsungschu740_263.readfrombuffer(buf) self.__field_note=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_NOTE_LEN, 'raiseontruncate': False, 'default': '' }) self.__field_note.readfrombuffer(buf) self.__field__gen_p_samsungschu740_269=DONTCARE(**{'sizeinbytes': 1}) self.__field__gen_p_samsungschu740_269.readfrombuffer(buf) self.__field_wallpaper=STRING(**{ 'terminator': 0, 'default': '' }) self.__field_wallpaper.readfrombuffer(buf) self.__field_wallpaper_range=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_wallpaper_range.readfrombuffer(buf) self.__field__gen_p_samsungschu740_273=DONTCARE(**{'sizeinbytes': 1}) self.__field__gen_p_samsungschu740_273.readfrombuffer(buf) self.__field_home=ss_number_entry() self.__field_home.readfrombuffer(buf) self.__field_work=ss_number_entry() self.__field_work.readfrombuffer(buf) self.__field_cell=ss_number_entry() self.__field_cell.readfrombuffer(buf) self.__field_dummy=ss_number_entry() self.__field_dummy.readfrombuffer(buf) self.__field_fax=ss_number_entry() self.__field_fax.readfrombuffer(buf) self.__field_cell2=ss_number_entry() self.__field_cell2.readfrombuffer(buf) self.__field__gen_p_samsungschu740_280=DONTCARE(**{'sizeinbytes': 4}) self.__field__gen_p_samsungschu740_280.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_group.readfrombuffer(buf) self.__field__gen_p_samsungschu740_282=DONTCARE(**{'sizeinbytes': 2}) self.__field__gen_p_samsungschu740_282.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{ 'terminator': 0, 'maxsizeinbytes': PB_MAX_NAME_LEN, 'encoding': ENCODING, 'raiseontruncate': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_email(self): try: self.__field_email except: self.__field_email=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def __getfield_email2(self): try: self.__field_email2 except: self.__field_email2=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) return self.__field_email2.getvalue() def __setfield_email2(self, value): if isinstance(value,USTRING): self.__field_email2=value else: self.__field_email2=USTRING(value,**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) def __delfield_email2(self): del self.__field_email2 email2=property(__getfield_email2, __setfield_email2, __delfield_email2, None) def __getfield_note(self): try: self.__field_note except: self.__field_note=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_NOTE_LEN, 'raiseontruncate': False, 'default': '' }) return self.__field_note.getvalue() def __setfield_note(self, value): if isinstance(value,USTRING): self.__field_note=value else: self.__field_note=USTRING(value,**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_NOTE_LEN, 'raiseontruncate': False, 'default': '' }) def __delfield_note(self): del self.__field_note note=property(__getfield_note, __setfield_note, __delfield_note, None) def __getfield_wallpaper(self): try: self.__field_wallpaper except: self.__field_wallpaper=STRING(**{ 'terminator': 0, 'default': '' }) return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,STRING): self.__field_wallpaper=value else: self.__field_wallpaper=STRING(value,**{ 'terminator': 0, 'default': '' }) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_wallpaper_range(self): try: self.__field_wallpaper_range except: self.__field_wallpaper_range=UINT(**{'sizeinbytes': 4, 'default': 0 }) return self.__field_wallpaper_range.getvalue() def __setfield_wallpaper_range(self, value): if isinstance(value,UINT): self.__field_wallpaper_range=value else: self.__field_wallpaper_range=UINT(value,**{'sizeinbytes': 4, 'default': 0 }) def __delfield_wallpaper_range(self): del self.__field_wallpaper_range wallpaper_range=property(__getfield_wallpaper_range, __setfield_wallpaper_range, __delfield_wallpaper_range, None) def __getfield_home(self): try: self.__field_home except: self.__field_home=ss_number_entry() return self.__field_home.getvalue() def __setfield_home(self, value): if isinstance(value,ss_number_entry): self.__field_home=value else: self.__field_home=ss_number_entry(value,) def __delfield_home(self): del self.__field_home home=property(__getfield_home, __setfield_home, __delfield_home, None) def __getfield_work(self): try: self.__field_work except: self.__field_work=ss_number_entry() return self.__field_work.getvalue() def __setfield_work(self, value): if isinstance(value,ss_number_entry): self.__field_work=value else: self.__field_work=ss_number_entry(value,) def __delfield_work(self): del self.__field_work work=property(__getfield_work, __setfield_work, __delfield_work, None) def __getfield_cell(self): try: self.__field_cell except: self.__field_cell=ss_number_entry() return self.__field_cell.getvalue() def __setfield_cell(self, value): if isinstance(value,ss_number_entry): self.__field_cell=value else: self.__field_cell=ss_number_entry(value,) def __delfield_cell(self): del self.__field_cell cell=property(__getfield_cell, __setfield_cell, __delfield_cell, None) def __getfield_dummy(self): try: self.__field_dummy except: self.__field_dummy=ss_number_entry() return self.__field_dummy.getvalue() def __setfield_dummy(self, value): if isinstance(value,ss_number_entry): self.__field_dummy=value else: self.__field_dummy=ss_number_entry(value,) def __delfield_dummy(self): del self.__field_dummy dummy=property(__getfield_dummy, __setfield_dummy, __delfield_dummy, None) def __getfield_fax(self): try: self.__field_fax except: self.__field_fax=ss_number_entry() return self.__field_fax.getvalue() def __setfield_fax(self, value): if isinstance(value,ss_number_entry): self.__field_fax=value else: self.__field_fax=ss_number_entry(value,) def __delfield_fax(self): del self.__field_fax fax=property(__getfield_fax, __setfield_fax, __delfield_fax, None) def __getfield_cell2(self): try: self.__field_cell2 except: self.__field_cell2=ss_number_entry() return self.__field_cell2.getvalue() def __setfield_cell2(self, value): if isinstance(value,ss_number_entry): self.__field_cell2=value else: self.__field_cell2=ss_number_entry(value,) def __delfield_cell2(self): del self.__field_cell2 cell2=property(__getfield_cell2, __setfield_cell2, __delfield_cell2, None) def __getfield_group(self): try: self.__field_group except: self.__field_group=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def iscontainer(self): return True def containerelements(self): yield ('name', self.__field_name, None) yield ('email', self.__field_email, None) yield ('email2', self.__field_email2, None) yield ('note', self.__field_note, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('wallpaper_range', self.__field_wallpaper_range, None) yield ('home', self.__field_home, None) yield ('work', self.__field_work, None) yield ('cell', self.__field_cell, None) yield ('dummy', self.__field_dummy, None) yield ('fax', self.__field_fax, None) yield ('cell2', self.__field_cell2, None) yield ('group', self.__field_group, None) class ss_pb_write_req(BaseProtogenClass): __fields=['hdr', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_write_req,self).__init__(**dict) if self.__class__ is ss_pb_write_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_write_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_write_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_WRITE }) self.__field_hdr.writetobuffer(buf) try: self.__field__gen_p_samsungschu740_286 except: self.__field__gen_p_samsungschu740_286=DONTCARE(**{'sizeinbytes': 1}) self.__field__gen_p_samsungschu740_286.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_WRITE }) self.__field_hdr.readfrombuffer(buf) self.__field__gen_p_samsungschu740_286=DONTCARE(**{'sizeinbytes': 1}) self.__field__gen_p_samsungschu740_286.readfrombuffer(buf) self.__field_entry=ss_pb_entry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_WRITE }) return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,**{ 'command': SS_CMD_PB_WRITE }) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,ss_pb_entry): self.__field_entry=value else: self.__field_entry=ss_pb_entry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) yield ('entry', self.__field_entry, None) class ss_pb_write_resp(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['hdr', 'index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_write_resp,self).__init__(**dict) if self.__class__ is ss_pb_write_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_write_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_write_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr() self.__field_hdr.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 1}).readfrombuffer(buf) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) yield ('index', self.__field_index, None) class pBOOL(BaseProtogenClass): __fields=['value'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pBOOL,self).__init__(**dict) if self.__class__ is pBOOL: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pBOOL,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pBOOL,kwargs) if len(args): dict2={'sizeinbytes': 'P'} dict2.update(kwargs) kwargs=dict2 self.__field_value=BOOL(*args,**dict2) # Make all P fields that haven't already been constructed try: self.__field_value except: self.__field_value=BOOL() def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self._bufferendoffset=buf.getcurrentoffset() def __getfield_value(self): return self.__field_value.getvalue() def __setfield_value(self, value): if isinstance(value,BOOL): self.__field_value=value else: self.__field_value=BOOL(value,) def __delfield_value(self): del self.__field_value value=property(__getfield_value, __setfield_value, __delfield_value, None) def iscontainer(self): return True def containerelements(self): yield ('value', self.__field_value, None) class sms_header(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['index', 'msg_len', 'callback_len', 'bitmap1', 'bitmap2', 'body_len', 'file_type', 'msg_type', 'enhance_delivery', 'is_txt_msg', 'in_msg', 'sent_msg', 'draft_msg', 'body'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_header,self).__init__(**dict) if self.__class__ is sms_header: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_header,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_header,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self.__field_msg_len=UINT(**{'sizeinbytes': 1}) self.__field_msg_len.readfrombuffer(buf) self.__field_callback_len=UINT(**{'sizeinbytes': 1}) self.__field_callback_len.readfrombuffer(buf) self.__field_bitmap1=UINT(**{'sizeinbytes': 1}) self.__field_bitmap1.readfrombuffer(buf) self.__field_bitmap2=UINT(**{'sizeinbytes': 1}) self.__field_bitmap2.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 6}).readfrombuffer(buf) self.__field_body_len=UINT(**{'sizeinbytes': 2}) self.__field_body_len.readfrombuffer(buf) self.__field_file_type=UINT(**{'sizeinbytes': 2}) self.__field_file_type.readfrombuffer(buf) self.__field_msg_type=UINT(**{'sizeinbytes': 1}) self.__field_msg_type.readfrombuffer(buf) self.__field_enhance_delivery=UINT(**{'sizeinbytes': 1}) self.__field_enhance_delivery.readfrombuffer(buf) self.__field_is_txt_msg=pBOOL(**{ 'value': self.file_type==SMS_TXT_TYPE and self.msg_type in SMS_VALID_TYPE }) self.__field_is_txt_msg.readfrombuffer(buf) self.__field_in_msg=pBOOL(**{ 'value': self.msg_type==SMS_TYPE_IN }) self.__field_in_msg.readfrombuffer(buf) self.__field_sent_msg=pBOOL(**{ 'value': self.msg_type==SMS_TYPE_SENT }) self.__field_sent_msg.readfrombuffer(buf) self.__field_draft_msg=pBOOL(**{ 'value': self.msg_type==SMS_TYPE_DRAFT }) self.__field_draft_msg.readfrombuffer(buf) if self.is_txt_msg.value: self.__field_body=sms_body(**{ 'msg_len': self.msg_len, 'has_callback': self.bitmap2 & SMS_FLG2_CALLBACK, 'has_priority': self.bitmap2 & SMS_FLG2_PRIORITY, 'has_1byte': self.bitmap2 & SMS_FLG2_SOMETHING, 'has_1byte2': self.bitmap2 & SMS_FLG2_MSG, 'has_40bytes': self.bitmap1 & SMS_FLG1_HAS40 }) self.__field_body.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_msg_len(self): return self.__field_msg_len.getvalue() def __setfield_msg_len(self, value): if isinstance(value,UINT): self.__field_msg_len=value else: self.__field_msg_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_msg_len(self): del self.__field_msg_len msg_len=property(__getfield_msg_len, __setfield_msg_len, __delfield_msg_len, None) def __getfield_callback_len(self): return self.__field_callback_len.getvalue() def __setfield_callback_len(self, value): if isinstance(value,UINT): self.__field_callback_len=value else: self.__field_callback_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_len(self): del self.__field_callback_len callback_len=property(__getfield_callback_len, __setfield_callback_len, __delfield_callback_len, None) def __getfield_bitmap1(self): return self.__field_bitmap1.getvalue() def __setfield_bitmap1(self, value): if isinstance(value,UINT): self.__field_bitmap1=value else: self.__field_bitmap1=UINT(value,**{'sizeinbytes': 1}) def __delfield_bitmap1(self): del self.__field_bitmap1 bitmap1=property(__getfield_bitmap1, __setfield_bitmap1, __delfield_bitmap1, None) def __getfield_bitmap2(self): return self.__field_bitmap2.getvalue() def __setfield_bitmap2(self, value): if isinstance(value,UINT): self.__field_bitmap2=value else: self.__field_bitmap2=UINT(value,**{'sizeinbytes': 1}) def __delfield_bitmap2(self): del self.__field_bitmap2 bitmap2=property(__getfield_bitmap2, __setfield_bitmap2, __delfield_bitmap2, None) def __getfield_body_len(self): return self.__field_body_len.getvalue() def __setfield_body_len(self, value): if isinstance(value,UINT): self.__field_body_len=value else: self.__field_body_len=UINT(value,**{'sizeinbytes': 2}) def __delfield_body_len(self): del self.__field_body_len body_len=property(__getfield_body_len, __setfield_body_len, __delfield_body_len, None) def __getfield_file_type(self): return self.__field_file_type.getvalue() def __setfield_file_type(self, value): if isinstance(value,UINT): self.__field_file_type=value else: self.__field_file_type=UINT(value,**{'sizeinbytes': 2}) def __delfield_file_type(self): del self.__field_file_type file_type=property(__getfield_file_type, __setfield_file_type, __delfield_file_type, None) def __getfield_msg_type(self): return self.__field_msg_type.getvalue() def __setfield_msg_type(self, value): if isinstance(value,UINT): self.__field_msg_type=value else: self.__field_msg_type=UINT(value,**{'sizeinbytes': 1}) def __delfield_msg_type(self): del self.__field_msg_type msg_type=property(__getfield_msg_type, __setfield_msg_type, __delfield_msg_type, None) def __getfield_enhance_delivery(self): return self.__field_enhance_delivery.getvalue() def __setfield_enhance_delivery(self, value): if isinstance(value,UINT): self.__field_enhance_delivery=value else: self.__field_enhance_delivery=UINT(value,**{'sizeinbytes': 1}) def __delfield_enhance_delivery(self): del self.__field_enhance_delivery enhance_delivery=property(__getfield_enhance_delivery, __setfield_enhance_delivery, __delfield_enhance_delivery, None) def __getfield_is_txt_msg(self): return self.__field_is_txt_msg.getvalue() def __setfield_is_txt_msg(self, value): if isinstance(value,pBOOL): self.__field_is_txt_msg=value else: self.__field_is_txt_msg=pBOOL(value,**{ 'value': self.file_type==SMS_TXT_TYPE and self.msg_type in SMS_VALID_TYPE }) def __delfield_is_txt_msg(self): del self.__field_is_txt_msg is_txt_msg=property(__getfield_is_txt_msg, __setfield_is_txt_msg, __delfield_is_txt_msg, None) def __getfield_in_msg(self): return self.__field_in_msg.getvalue() def __setfield_in_msg(self, value): if isinstance(value,pBOOL): self.__field_in_msg=value else: self.__field_in_msg=pBOOL(value,**{ 'value': self.msg_type==SMS_TYPE_IN }) def __delfield_in_msg(self): del self.__field_in_msg in_msg=property(__getfield_in_msg, __setfield_in_msg, __delfield_in_msg, None) def __getfield_sent_msg(self): return self.__field_sent_msg.getvalue() def __setfield_sent_msg(self, value): if isinstance(value,pBOOL): self.__field_sent_msg=value else: self.__field_sent_msg=pBOOL(value,**{ 'value': self.msg_type==SMS_TYPE_SENT }) def __delfield_sent_msg(self): del self.__field_sent_msg sent_msg=property(__getfield_sent_msg, __setfield_sent_msg, __delfield_sent_msg, None) def __getfield_draft_msg(self): return self.__field_draft_msg.getvalue() def __setfield_draft_msg(self, value): if isinstance(value,pBOOL): self.__field_draft_msg=value else: self.__field_draft_msg=pBOOL(value,**{ 'value': self.msg_type==SMS_TYPE_DRAFT }) def __delfield_draft_msg(self): del self.__field_draft_msg draft_msg=property(__getfield_draft_msg, __setfield_draft_msg, __delfield_draft_msg, None) def __getfield_body(self): return self.__field_body.getvalue() def __setfield_body(self, value): if isinstance(value,sms_body): self.__field_body=value else: self.__field_body=sms_body(value,**{ 'msg_len': self.msg_len, 'has_callback': self.bitmap2 & SMS_FLG2_CALLBACK, 'has_priority': self.bitmap2 & SMS_FLG2_PRIORITY, 'has_1byte': self.bitmap2 & SMS_FLG2_SOMETHING, 'has_1byte2': self.bitmap2 & SMS_FLG2_MSG, 'has_40bytes': self.bitmap1 & SMS_FLG1_HAS40 }) def __delfield_body(self): del self.__field_body body=property(__getfield_body, __setfield_body, __delfield_body, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('msg_len', self.__field_msg_len, None) yield ('callback_len', self.__field_callback_len, None) yield ('bitmap1', self.__field_bitmap1, None) yield ('bitmap2', self.__field_bitmap2, None) yield ('body_len', self.__field_body_len, None) yield ('file_type', self.__field_file_type, None) yield ('msg_type', self.__field_msg_type, None) yield ('enhance_delivery', self.__field_enhance_delivery, None) yield ('is_txt_msg', self.__field_is_txt_msg, None) yield ('in_msg', self.__field_in_msg, None) yield ('sent_msg', self.__field_sent_msg, None) yield ('draft_msg', self.__field_draft_msg, None) if self.is_txt_msg.value: yield ('body', self.__field_body, None) class sms_msg_stat_list(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['status'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_msg_stat_list,self).__init__(**dict) if self.__class__ is sms_msg_stat_list: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_msg_stat_list,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_msg_stat_list,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_status=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def iscontainer(self): return True def containerelements(self): yield ('status', self.__field_status, None) class sms_datetime_list(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['datetime'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_datetime_list,self).__init__(**dict) if self.__class__ is sms_datetime_list: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_datetime_list,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_datetime_list,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_datetime=DateTime1(**{'sizeinbytes': 4}) self.__field_datetime.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 4}).readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,DateTime1): self.__field_datetime=value else: self.__field_datetime=DateTime1(value,**{'sizeinbytes': 4}) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def iscontainer(self): return True def containerelements(self): yield ('datetime', self.__field_datetime, None) class sms_delivered_datetime(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['datetime'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_delivered_datetime,self).__init__(**dict) if self.__class__ is sms_delivered_datetime: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_delivered_datetime,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_delivered_datetime,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_datetime=LIST(**{ 'elementclass': sms_datetime_list, 'length': 10 }) self.__field_datetime.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 20}).readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,LIST): self.__field_datetime=value else: self.__field_datetime=LIST(value,**{ 'elementclass': sms_datetime_list, 'length': 10 }) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def iscontainer(self): return True def containerelements(self): yield ('datetime', self.__field_datetime, None) class sms_body(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['msg_len', 'has_callback', 'has_priority', 'has_1byte', 'has_1byte2', 'has_40bytes', 'msg', 'callback_len', 'callback', 'priority', 'datetime', 'addr_len0', 'addr_len1', 'addr_len2', 'addr_len3', 'addr_len4', 'addr_len5', 'addr_len6', 'addr_len7', 'addr_len8', 'addr_len9', 'addr0', 'addr1', 'addr2', 'addr3', 'addr4', 'addr5', 'addr6', 'addr7', 'addr8', 'addr9', 'msg_stat'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_body,self).__init__(**dict) if self.__class__ is sms_body: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_body,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_body,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_msg_len except: self.__field_msg_len=UINT() try: self.__field_has_callback except: self.__field_has_callback=BOOL(**{ 'default': True }) try: self.__field_has_priority except: self.__field_has_priority=BOOL(**{ 'default': False }) try: self.__field_has_1byte except: self.__field_has_1byte=BOOL(**{ 'default': False }) try: self.__field_has_1byte2 except: self.__field_has_1byte2=BOOL(**{ 'default': True }) try: self.__field_has_40bytes except: self.__field_has_40bytes=BOOL(**{ 'default': False }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) DONTCARE(**{'sizeinbytes': 53}).readfrombuffer(buf) self.__field_msg=USTRING(**{ 'sizeinbytes': self.msg_len, 'encoding': ENCODING, 'terminator': None }) self.__field_msg.readfrombuffer(buf) if self.has_callback: DONTCARE(**{'sizeinbytes': 3}).readfrombuffer(buf) self.__field_callback_len=UINT(**{'sizeinbytes': 1}) self.__field_callback_len.readfrombuffer(buf) self.__field_callback=STRING(**{ 'sizeinbytes': self.callback_len, 'terminator': None }) self.__field_callback.readfrombuffer(buf) if self.has_priority: self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) if self.has_1byte: DONTCARE(**{'sizeinbytes': 1}).readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 40}).readfrombuffer(buf) self.__field_datetime=DateTime1(**{'sizeinbytes': 4}) self.__field_datetime.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 17}).readfrombuffer(buf) self.__field_addr_len0=UINT(**{'sizeinbytes': 1}) self.__field_addr_len0.readfrombuffer(buf) self.__field_addr_len1=UINT(**{'sizeinbytes': 1}) self.__field_addr_len1.readfrombuffer(buf) self.__field_addr_len2=UINT(**{'sizeinbytes': 1}) self.__field_addr_len2.readfrombuffer(buf) self.__field_addr_len3=UINT(**{'sizeinbytes': 1}) self.__field_addr_len3.readfrombuffer(buf) self.__field_addr_len4=UINT(**{'sizeinbytes': 1}) self.__field_addr_len4.readfrombuffer(buf) self.__field_addr_len5=UINT(**{'sizeinbytes': 1}) self.__field_addr_len5.readfrombuffer(buf) self.__field_addr_len6=UINT(**{'sizeinbytes': 1}) self.__field_addr_len6.readfrombuffer(buf) self.__field_addr_len7=UINT(**{'sizeinbytes': 1}) self.__field_addr_len7.readfrombuffer(buf) self.__field_addr_len8=UINT(**{'sizeinbytes': 1}) self.__field_addr_len8.readfrombuffer(buf) self.__field_addr_len9=UINT(**{'sizeinbytes': 1}) self.__field_addr_len9.readfrombuffer(buf) if self.addr_len0: self.__field_addr0=STRING(**{ 'sizeinbytes': self.addr_len0, 'terminator': None }) self.__field_addr0.readfrombuffer(buf) if self.addr_len1: self.__field_addr1=STRING(**{ 'sizeinbytes': self.addr_len1, 'terminator': None }) self.__field_addr1.readfrombuffer(buf) if self.addr_len2: self.__field_addr2=STRING(**{ 'sizeinbytes': self.addr_len2, 'terminator': None }) self.__field_addr2.readfrombuffer(buf) if self.addr_len3: self.__field_addr3=STRING(**{ 'sizeinbytes': self.addr_len3, 'terminator': None }) self.__field_addr3.readfrombuffer(buf) if self.addr_len4: self.__field_addr4=STRING(**{ 'sizeinbytes': self.addr_len4, 'terminator': None }) self.__field_addr4.readfrombuffer(buf) if self.addr_len5: self.__field_addr5=STRING(**{ 'sizeinbytes': self.addr_len5, 'terminator': None }) self.__field_addr5.readfrombuffer(buf) if self.addr_len6: self.__field_addr6=STRING(**{ 'sizeinbytes': self.addr_len6, 'terminator': None }) self.__field_addr6.readfrombuffer(buf) if self.addr_len7: self.__field_addr7=STRING(**{ 'sizeinbytes': self.addr_len7, 'terminator': None }) self.__field_addr7.readfrombuffer(buf) if self.addr_len8: self.__field_addr8=STRING(**{ 'sizeinbytes': self.addr_len8, 'terminator': None }) self.__field_addr8.readfrombuffer(buf) if self.addr_len9: self.__field_addr9=STRING(**{ 'sizeinbytes': self.addr_len9, 'terminator': None }) self.__field_addr9.readfrombuffer(buf) if not self.has_1byte and self.has_1byte2: DONTCARE(**{'sizeinbytes': 1}).readfrombuffer(buf) if self.has_1byte2: DONTCARE(**{'sizeinbytes': 1}).readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 81}).readfrombuffer(buf) if self.has_40bytes: DONTCARE(**{'sizeinbytes': 40}).readfrombuffer(buf) self.__field_msg_stat=LIST(**{ 'elementclass': sms_msg_stat_list, 'length': 10 }) self.__field_msg_stat.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg_len(self): return self.__field_msg_len.getvalue() def __setfield_msg_len(self, value): if isinstance(value,UINT): self.__field_msg_len=value else: self.__field_msg_len=UINT(value,) def __delfield_msg_len(self): del self.__field_msg_len msg_len=property(__getfield_msg_len, __setfield_msg_len, __delfield_msg_len, None) def __getfield_has_callback(self): try: self.__field_has_callback except: self.__field_has_callback=BOOL(**{ 'default': True }) return self.__field_has_callback.getvalue() def __setfield_has_callback(self, value): if isinstance(value,BOOL): self.__field_has_callback=value else: self.__field_has_callback=BOOL(value,**{ 'default': True }) def __delfield_has_callback(self): del self.__field_has_callback has_callback=property(__getfield_has_callback, __setfield_has_callback, __delfield_has_callback, None) def __getfield_has_priority(self): try: self.__field_has_priority except: self.__field_has_priority=BOOL(**{ 'default': False }) return self.__field_has_priority.getvalue() def __setfield_has_priority(self, value): if isinstance(value,BOOL): self.__field_has_priority=value else: self.__field_has_priority=BOOL(value,**{ 'default': False }) def __delfield_has_priority(self): del self.__field_has_priority has_priority=property(__getfield_has_priority, __setfield_has_priority, __delfield_has_priority, None) def __getfield_has_1byte(self): try: self.__field_has_1byte except: self.__field_has_1byte=BOOL(**{ 'default': False }) return self.__field_has_1byte.getvalue() def __setfield_has_1byte(self, value): if isinstance(value,BOOL): self.__field_has_1byte=value else: self.__field_has_1byte=BOOL(value,**{ 'default': False }) def __delfield_has_1byte(self): del self.__field_has_1byte has_1byte=property(__getfield_has_1byte, __setfield_has_1byte, __delfield_has_1byte, None) def __getfield_has_1byte2(self): try: self.__field_has_1byte2 except: self.__field_has_1byte2=BOOL(**{ 'default': True }) return self.__field_has_1byte2.getvalue() def __setfield_has_1byte2(self, value): if isinstance(value,BOOL): self.__field_has_1byte2=value else: self.__field_has_1byte2=BOOL(value,**{ 'default': True }) def __delfield_has_1byte2(self): del self.__field_has_1byte2 has_1byte2=property(__getfield_has_1byte2, __setfield_has_1byte2, __delfield_has_1byte2, None) def __getfield_has_40bytes(self): try: self.__field_has_40bytes except: self.__field_has_40bytes=BOOL(**{ 'default': False }) return self.__field_has_40bytes.getvalue() def __setfield_has_40bytes(self, value): if isinstance(value,BOOL): self.__field_has_40bytes=value else: self.__field_has_40bytes=BOOL(value,**{ 'default': False }) def __delfield_has_40bytes(self): del self.__field_has_40bytes has_40bytes=property(__getfield_has_40bytes, __setfield_has_40bytes, __delfield_has_40bytes, None) def __getfield_msg(self): return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{ 'sizeinbytes': self.msg_len, 'encoding': ENCODING, 'terminator': None }) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def __getfield_callback_len(self): return self.__field_callback_len.getvalue() def __setfield_callback_len(self, value): if isinstance(value,UINT): self.__field_callback_len=value else: self.__field_callback_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_len(self): del self.__field_callback_len callback_len=property(__getfield_callback_len, __setfield_callback_len, __delfield_callback_len, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,STRING): self.__field_callback=value else: self.__field_callback=STRING(value,**{ 'sizeinbytes': self.callback_len, 'terminator': None }) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,DateTime1): self.__field_datetime=value else: self.__field_datetime=DateTime1(value,**{'sizeinbytes': 4}) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def __getfield_addr_len0(self): return self.__field_addr_len0.getvalue() def __setfield_addr_len0(self, value): if isinstance(value,UINT): self.__field_addr_len0=value else: self.__field_addr_len0=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len0(self): del self.__field_addr_len0 addr_len0=property(__getfield_addr_len0, __setfield_addr_len0, __delfield_addr_len0, None) def __getfield_addr_len1(self): return self.__field_addr_len1.getvalue() def __setfield_addr_len1(self, value): if isinstance(value,UINT): self.__field_addr_len1=value else: self.__field_addr_len1=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len1(self): del self.__field_addr_len1 addr_len1=property(__getfield_addr_len1, __setfield_addr_len1, __delfield_addr_len1, None) def __getfield_addr_len2(self): return self.__field_addr_len2.getvalue() def __setfield_addr_len2(self, value): if isinstance(value,UINT): self.__field_addr_len2=value else: self.__field_addr_len2=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len2(self): del self.__field_addr_len2 addr_len2=property(__getfield_addr_len2, __setfield_addr_len2, __delfield_addr_len2, None) def __getfield_addr_len3(self): return self.__field_addr_len3.getvalue() def __setfield_addr_len3(self, value): if isinstance(value,UINT): self.__field_addr_len3=value else: self.__field_addr_len3=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len3(self): del self.__field_addr_len3 addr_len3=property(__getfield_addr_len3, __setfield_addr_len3, __delfield_addr_len3, None) def __getfield_addr_len4(self): return self.__field_addr_len4.getvalue() def __setfield_addr_len4(self, value): if isinstance(value,UINT): self.__field_addr_len4=value else: self.__field_addr_len4=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len4(self): del self.__field_addr_len4 addr_len4=property(__getfield_addr_len4, __setfield_addr_len4, __delfield_addr_len4, None) def __getfield_addr_len5(self): return self.__field_addr_len5.getvalue() def __setfield_addr_len5(self, value): if isinstance(value,UINT): self.__field_addr_len5=value else: self.__field_addr_len5=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len5(self): del self.__field_addr_len5 addr_len5=property(__getfield_addr_len5, __setfield_addr_len5, __delfield_addr_len5, None) def __getfield_addr_len6(self): return self.__field_addr_len6.getvalue() def __setfield_addr_len6(self, value): if isinstance(value,UINT): self.__field_addr_len6=value else: self.__field_addr_len6=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len6(self): del self.__field_addr_len6 addr_len6=property(__getfield_addr_len6, __setfield_addr_len6, __delfield_addr_len6, None) def __getfield_addr_len7(self): return self.__field_addr_len7.getvalue() def __setfield_addr_len7(self, value): if isinstance(value,UINT): self.__field_addr_len7=value else: self.__field_addr_len7=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len7(self): del self.__field_addr_len7 addr_len7=property(__getfield_addr_len7, __setfield_addr_len7, __delfield_addr_len7, None) def __getfield_addr_len8(self): return self.__field_addr_len8.getvalue() def __setfield_addr_len8(self, value): if isinstance(value,UINT): self.__field_addr_len8=value else: self.__field_addr_len8=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len8(self): del self.__field_addr_len8 addr_len8=property(__getfield_addr_len8, __setfield_addr_len8, __delfield_addr_len8, None) def __getfield_addr_len9(self): return self.__field_addr_len9.getvalue() def __setfield_addr_len9(self, value): if isinstance(value,UINT): self.__field_addr_len9=value else: self.__field_addr_len9=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len9(self): del self.__field_addr_len9 addr_len9=property(__getfield_addr_len9, __setfield_addr_len9, __delfield_addr_len9, None) def __getfield_addr0(self): return self.__field_addr0.getvalue() def __setfield_addr0(self, value): if isinstance(value,STRING): self.__field_addr0=value else: self.__field_addr0=STRING(value,**{ 'sizeinbytes': self.addr_len0, 'terminator': None }) def __delfield_addr0(self): del self.__field_addr0 addr0=property(__getfield_addr0, __setfield_addr0, __delfield_addr0, None) def __getfield_addr1(self): return self.__field_addr1.getvalue() def __setfield_addr1(self, value): if isinstance(value,STRING): self.__field_addr1=value else: self.__field_addr1=STRING(value,**{ 'sizeinbytes': self.addr_len1, 'terminator': None }) def __delfield_addr1(self): del self.__field_addr1 addr1=property(__getfield_addr1, __setfield_addr1, __delfield_addr1, None) def __getfield_addr2(self): return self.__field_addr2.getvalue() def __setfield_addr2(self, value): if isinstance(value,STRING): self.__field_addr2=value else: self.__field_addr2=STRING(value,**{ 'sizeinbytes': self.addr_len2, 'terminator': None }) def __delfield_addr2(self): del self.__field_addr2 addr2=property(__getfield_addr2, __setfield_addr2, __delfield_addr2, None) def __getfield_addr3(self): return self.__field_addr3.getvalue() def __setfield_addr3(self, value): if isinstance(value,STRING): self.__field_addr3=value else: self.__field_addr3=STRING(value,**{ 'sizeinbytes': self.addr_len3, 'terminator': None }) def __delfield_addr3(self): del self.__field_addr3 addr3=property(__getfield_addr3, __setfield_addr3, __delfield_addr3, None) def __getfield_addr4(self): return self.__field_addr4.getvalue() def __setfield_addr4(self, value): if isinstance(value,STRING): self.__field_addr4=value else: self.__field_addr4=STRING(value,**{ 'sizeinbytes': self.addr_len4, 'terminator': None }) def __delfield_addr4(self): del self.__field_addr4 addr4=property(__getfield_addr4, __setfield_addr4, __delfield_addr4, None) def __getfield_addr5(self): return self.__field_addr5.getvalue() def __setfield_addr5(self, value): if isinstance(value,STRING): self.__field_addr5=value else: self.__field_addr5=STRING(value,**{ 'sizeinbytes': self.addr_len5, 'terminator': None }) def __delfield_addr5(self): del self.__field_addr5 addr5=property(__getfield_addr5, __setfield_addr5, __delfield_addr5, None) def __getfield_addr6(self): return self.__field_addr6.getvalue() def __setfield_addr6(self, value): if isinstance(value,STRING): self.__field_addr6=value else: self.__field_addr6=STRING(value,**{ 'sizeinbytes': self.addr_len6, 'terminator': None }) def __delfield_addr6(self): del self.__field_addr6 addr6=property(__getfield_addr6, __setfield_addr6, __delfield_addr6, None) def __getfield_addr7(self): return self.__field_addr7.getvalue() def __setfield_addr7(self, value): if isinstance(value,STRING): self.__field_addr7=value else: self.__field_addr7=STRING(value,**{ 'sizeinbytes': self.addr_len7, 'terminator': None }) def __delfield_addr7(self): del self.__field_addr7 addr7=property(__getfield_addr7, __setfield_addr7, __delfield_addr7, None) def __getfield_addr8(self): return self.__field_addr8.getvalue() def __setfield_addr8(self, value): if isinstance(value,STRING): self.__field_addr8=value else: self.__field_addr8=STRING(value,**{ 'sizeinbytes': self.addr_len8, 'terminator': None }) def __delfield_addr8(self): del self.__field_addr8 addr8=property(__getfield_addr8, __setfield_addr8, __delfield_addr8, None) def __getfield_addr9(self): return self.__field_addr9.getvalue() def __setfield_addr9(self, value): if isinstance(value,STRING): self.__field_addr9=value else: self.__field_addr9=STRING(value,**{ 'sizeinbytes': self.addr_len9, 'terminator': None }) def __delfield_addr9(self): del self.__field_addr9 addr9=property(__getfield_addr9, __setfield_addr9, __delfield_addr9, None) def __getfield_msg_stat(self): return self.__field_msg_stat.getvalue() def __setfield_msg_stat(self, value): if isinstance(value,LIST): self.__field_msg_stat=value else: self.__field_msg_stat=LIST(value,**{ 'elementclass': sms_msg_stat_list, 'length': 10 }) def __delfield_msg_stat(self): del self.__field_msg_stat msg_stat=property(__getfield_msg_stat, __setfield_msg_stat, __delfield_msg_stat, None) def iscontainer(self): return True def containerelements(self): yield ('msg_len', self.__field_msg_len, None) yield ('has_callback', self.__field_has_callback, None) yield ('has_priority', self.__field_has_priority, None) yield ('has_1byte', self.__field_has_1byte, None) yield ('has_1byte2', self.__field_has_1byte2, None) yield ('has_40bytes', self.__field_has_40bytes, None) yield ('msg', self.__field_msg, None) if self.has_callback: yield ('callback_len', self.__field_callback_len, None) yield ('callback', self.__field_callback, None) if self.has_priority: yield ('priority', self.__field_priority, None) if self.has_1byte: pass yield ('datetime', self.__field_datetime, None) yield ('addr_len0', self.__field_addr_len0, None) yield ('addr_len1', self.__field_addr_len1, None) yield ('addr_len2', self.__field_addr_len2, None) yield ('addr_len3', self.__field_addr_len3, None) yield ('addr_len4', self.__field_addr_len4, None) yield ('addr_len5', self.__field_addr_len5, None) yield ('addr_len6', self.__field_addr_len6, None) yield ('addr_len7', self.__field_addr_len7, None) yield ('addr_len8', self.__field_addr_len8, None) yield ('addr_len9', self.__field_addr_len9, None) if self.addr_len0: yield ('addr0', self.__field_addr0, None) if self.addr_len1: yield ('addr1', self.__field_addr1, None) if self.addr_len2: yield ('addr2', self.__field_addr2, None) if self.addr_len3: yield ('addr3', self.__field_addr3, None) if self.addr_len4: yield ('addr4', self.__field_addr4, None) if self.addr_len5: yield ('addr5', self.__field_addr5, None) if self.addr_len6: yield ('addr6', self.__field_addr6, None) if self.addr_len7: yield ('addr7', self.__field_addr7, None) if self.addr_len8: yield ('addr8', self.__field_addr8, None) if self.addr_len9: yield ('addr9', self.__field_addr9, None) if not self.has_1byte and self.has_1byte2: pass if self.has_1byte2: pass if self.has_40bytes: pass yield ('msg_stat', self.__field_msg_stat, None) class cl_list(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(cl_list,self).__init__(**dict) if self.__class__ is cl_list: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(cl_list,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(cl_list,kwargs) if len(args): dict2={'sizeinbytes': 2} dict2.update(kwargs) kwargs=dict2 self.__field_index=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) class cl_index_file(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['incoming', 'outgoing', 'missed', 'incoming_count', 'outgoing_count', 'missed_count'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(cl_index_file,self).__init__(**dict) if self.__class__ is cl_index_file: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(cl_index_file,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(cl_index_file,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_incoming=LIST(**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) self.__field_incoming.readfrombuffer(buf) self.__field_outgoing=LIST(**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) self.__field_outgoing.readfrombuffer(buf) self.__field_missed=LIST(**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) self.__field_missed.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 992}).readfrombuffer(buf) self.__field_incoming_count=UINT(**{'sizeinbytes': 4}) self.__field_incoming_count.readfrombuffer(buf) self.__field_outgoing_count=UINT(**{'sizeinbytes': 4}) self.__field_outgoing_count.readfrombuffer(buf) self.__field_missed_count=UINT(**{'sizeinbytes': 4}) self.__field_missed_count.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_incoming(self): return self.__field_incoming.getvalue() def __setfield_incoming(self, value): if isinstance(value,LIST): self.__field_incoming=value else: self.__field_incoming=LIST(value,**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) def __delfield_incoming(self): del self.__field_incoming incoming=property(__getfield_incoming, __setfield_incoming, __delfield_incoming, None) def __getfield_outgoing(self): return self.__field_outgoing.getvalue() def __setfield_outgoing(self, value): if isinstance(value,LIST): self.__field_outgoing=value else: self.__field_outgoing=LIST(value,**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) def __delfield_outgoing(self): del self.__field_outgoing outgoing=property(__getfield_outgoing, __setfield_outgoing, __delfield_outgoing, None) def __getfield_missed(self): return self.__field_missed.getvalue() def __setfield_missed(self, value): if isinstance(value,LIST): self.__field_missed=value else: self.__field_missed=LIST(value,**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) def __delfield_missed(self): del self.__field_missed missed=property(__getfield_missed, __setfield_missed, __delfield_missed, None) def __getfield_incoming_count(self): return self.__field_incoming_count.getvalue() def __setfield_incoming_count(self, value): if isinstance(value,UINT): self.__field_incoming_count=value else: self.__field_incoming_count=UINT(value,**{'sizeinbytes': 4}) def __delfield_incoming_count(self): del self.__field_incoming_count incoming_count=property(__getfield_incoming_count, __setfield_incoming_count, __delfield_incoming_count, None) def __getfield_outgoing_count(self): return self.__field_outgoing_count.getvalue() def __setfield_outgoing_count(self, value): if isinstance(value,UINT): self.__field_outgoing_count=value else: self.__field_outgoing_count=UINT(value,**{'sizeinbytes': 4}) def __delfield_outgoing_count(self): del self.__field_outgoing_count outgoing_count=property(__getfield_outgoing_count, __setfield_outgoing_count, __delfield_outgoing_count, None) def __getfield_missed_count(self): return self.__field_missed_count.getvalue() def __setfield_missed_count(self, value): if isinstance(value,UINT): self.__field_missed_count=value else: self.__field_missed_count=UINT(value,**{'sizeinbytes': 4}) def __delfield_missed_count(self): del self.__field_missed_count missed_count=property(__getfield_missed_count, __setfield_missed_count, __delfield_missed_count, None) def iscontainer(self): return True def containerelements(self): yield ('incoming', self.__field_incoming, None) yield ('outgoing', self.__field_outgoing, None) yield ('missed', self.__field_missed, None) yield ('incoming_count', self.__field_incoming_count, None) yield ('outgoing_count', self.__field_outgoing_count, None) yield ('missed_count', self.__field_missed_count, None) class cl_file(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['cl_type', 'number', 'datetime', 'duration'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(cl_file,self).__init__(**dict) if self.__class__ is cl_file: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(cl_file,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(cl_file,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cl_type=UINT(**{'sizeinbytes': 1}) self.__field_cl_type.readfrombuffer(buf) self.__field_number=STRING(**{'sizeinbytes': 51, 'terminator': 0 }) self.__field_number.readfrombuffer(buf) self.__field_datetime=DateTime1(**{'sizeinbytes': 4}) self.__field_datetime.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 4}).readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cl_type(self): return self.__field_cl_type.getvalue() def __setfield_cl_type(self, value): if isinstance(value,UINT): self.__field_cl_type=value else: self.__field_cl_type=UINT(value,**{'sizeinbytes': 1}) def __delfield_cl_type(self): del self.__field_cl_type cl_type=property(__getfield_cl_type, __setfield_cl_type, __delfield_cl_type, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,STRING): self.__field_number=value else: self.__field_number=STRING(value,**{'sizeinbytes': 51, 'terminator': 0 }) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,DateTime1): self.__field_datetime=value else: self.__field_datetime=DateTime1(value,**{'sizeinbytes': 4}) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def iscontainer(self): return True def containerelements(self): yield ('cl_type', self.__field_cl_type, None) yield ('number', self.__field_number, None) yield ('datetime', self.__field_datetime, None) yield ('duration', self.__field_duration, None) @property def valid(self): global CL_VALID_TYPE return bool(self.cl_type in CL_VALID_TYPE and self.number) bitpim-1.0.7+dfsg1/src/phones/p_samsungschu750.py0000644001616600161660000067031311321531342017724 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to the Samsung SCH-U750 (Alias 2) Phone""" from prototypes import * from prototypes_samsung import * from p_brew import * from p_samsungschu470 import * SND_PATH='brew/mod/18067' SND_INDEX_FILE_NAME=SND_PATH+'/MsInfo.db' SND_EXCLUDED_FILES=('MsInfo.db',) SND_PRELOADED_PREFIX=SND_PATH+'/SCH-U750_PRELOADED_' # phonebook stuff, PB_WP_CACHE_WIDTH=80 PB_WP_CACHE_HEIGHT=106 PB_MAX_IMNAME_LEN=50 PB_MAX_STREET_LEN=50 PB_MAX_CITY_LEN=50 PB_MAX_STATE_LEN=50 PB_MAX_ZIP_LEN=10 PB_MAX_COUNTRY_LEN=50 # Flag PB_FLG_IMNAME1=0x8000 # Flag 2 PB_FLG_IMNAME2=0x0001 PB_FLG_STREET=0x0002 PB_FLG_CITY=0x0004 PB_FLG_STATE=0x0008 PB_FLG_ZIP=0x0010 PB_FLG_COUNTRY=0x0020 PB_FLG_ENTRY_WP=0x0100 PB_FLG_ENTRY_RT=0x0080 PB_FLG_ENTRY_CACHED_WP=0x0040 # each number entry flag PB_FLG_DUNNO1=0x04 class WSoundsIndexEntry(BaseProtogenClass): __fields=['name', 'path_prefix', 'pathname', 'eor'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(WSoundsIndexEntry,self).__init__(**dict) if self.__class__ is WSoundsIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(WSoundsIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(WSoundsIndexEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_name except: self.__field_name=STRING() def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_path_prefix except: self.__field_path_prefix=STRING(**{ 'terminator': None, 'default': '/ff/' }) self.__field_path_prefix.writetobuffer(buf) self.__field_pathname.writetobuffer(buf) try: self.__field_eor except: self.__field_eor=STRING(**{ 'terminator': None, 'default': '|0|7\x0A' }) self.__field_eor.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_path_prefix=STRING(**{ 'terminator': None, 'default': '/ff/' }) self.__field_path_prefix.readfrombuffer(buf) self.__field_pathname=STRING(**{ 'terminator': None }) self.__field_pathname.readfrombuffer(buf) self.__field_eor=STRING(**{ 'terminator': None, 'default': '|0|7\x0A' }) self.__field_eor.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,STRING): self.__field_name=value else: self.__field_name=STRING(value,) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_path_prefix(self): try: self.__field_path_prefix except: self.__field_path_prefix=STRING(**{ 'terminator': None, 'default': '/ff/' }) return self.__field_path_prefix.getvalue() def __setfield_path_prefix(self, value): if isinstance(value,STRING): self.__field_path_prefix=value else: self.__field_path_prefix=STRING(value,**{ 'terminator': None, 'default': '/ff/' }) def __delfield_path_prefix(self): del self.__field_path_prefix path_prefix=property(__getfield_path_prefix, __setfield_path_prefix, __delfield_path_prefix, None) def __getfield_pathname(self): return self.__field_pathname.getvalue() def __setfield_pathname(self, value): if isinstance(value,STRING): self.__field_pathname=value else: self.__field_pathname=STRING(value,**{ 'terminator': None }) def __delfield_pathname(self): del self.__field_pathname pathname=property(__getfield_pathname, __setfield_pathname, __delfield_pathname, None) def __getfield_eor(self): try: self.__field_eor except: self.__field_eor=STRING(**{ 'terminator': None, 'default': '|0|7\x0A' }) return self.__field_eor.getvalue() def __setfield_eor(self, value): if isinstance(value,STRING): self.__field_eor=value else: self.__field_eor=STRING(value,**{ 'terminator': None, 'default': '|0|7\x0A' }) def __delfield_eor(self): del self.__field_eor eor=property(__getfield_eor, __setfield_eor, __delfield_eor, None) def iscontainer(self): return True def containerelements(self): yield ('name', self.__field_name, None) yield ('path_prefix', self.__field_path_prefix, None) yield ('pathname', self.__field_pathname, None) yield ('eor', self.__field_eor, None) class WSoundsIndexFile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(WSoundsIndexFile,self).__init__(**dict) if self.__class__ is WSoundsIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(WSoundsIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(WSoundsIndexFile,kwargs) if len(args): dict2={ 'elementclass': WSoundsIndexEntry } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': WSoundsIndexEntry }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': WSoundsIndexEntry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': WSoundsIndexEntry }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': WSoundsIndexEntry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class RSoundIndexEntry(BaseProtogenClass): __fields=['pathname', 'misc'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(RSoundIndexEntry,self).__init__(**dict) if self.__class__ is RSoundIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(RSoundIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(RSoundIndexEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pathname.writetobuffer(buf) self.__field_misc.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pathname=STRING(**{ 'terminator': 0x7C }) self.__field_pathname.readfrombuffer(buf) self.__field_misc=STRING(**{ 'terminator': 0x0A }) self.__field_misc.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pathname(self): return self.__field_pathname.getvalue() def __setfield_pathname(self, value): if isinstance(value,STRING): self.__field_pathname=value else: self.__field_pathname=STRING(value,**{ 'terminator': 0x7C }) def __delfield_pathname(self): del self.__field_pathname pathname=property(__getfield_pathname, __setfield_pathname, __delfield_pathname, None) def __getfield_misc(self): return self.__field_misc.getvalue() def __setfield_misc(self, value): if isinstance(value,STRING): self.__field_misc=value else: self.__field_misc=STRING(value,**{ 'terminator': 0x0A }) def __delfield_misc(self): del self.__field_misc misc=property(__getfield_misc, __setfield_misc, __delfield_misc, None) def iscontainer(self): return True def containerelements(self): yield ('pathname', self.__field_pathname, None) yield ('misc', self.__field_misc, None) class RSoundsIndexFile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(RSoundsIndexFile,self).__init__(**dict) if self.__class__ is RSoundsIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(RSoundsIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(RSoundsIndexFile,kwargs) if len(args): dict2={ 'elementclass': RSoundIndexEntry } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': RSoundIndexEntry }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': RSoundIndexEntry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': RSoundIndexEntry }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': RSoundIndexEntry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class NumberEntry(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['number', 'option', 'speeddial'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(NumberEntry,self).__init__(**dict) if self.__class__ is NumberEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(NumberEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(NumberEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=STRING(**{ 'terminator': None, 'pascal': True }) self.__field_number.readfrombuffer(buf) self.__field_option=UINT(**{'sizeinbytes': 1}) self.__field_option.readfrombuffer(buf) if self.has_speeddial: self.__field_speeddial=UINT(**{'sizeinbytes': 2}) self.__field_speeddial.readfrombuffer(buf) if self.has_dunno1: DONTCARE(**{'sizeinbytes': 4}).readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,STRING): self.__field_number=value else: self.__field_number=STRING(value,**{ 'terminator': None, 'pascal': True }) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_option(self): return self.__field_option.getvalue() def __setfield_option(self, value): if isinstance(value,UINT): self.__field_option=value else: self.__field_option=UINT(value,**{'sizeinbytes': 1}) def __delfield_option(self): del self.__field_option option=property(__getfield_option, __setfield_option, __delfield_option, None) def __getfield_speeddial(self): return self.__field_speeddial.getvalue() def __setfield_speeddial(self, value): if isinstance(value,UINT): self.__field_speeddial=value else: self.__field_speeddial=UINT(value,**{'sizeinbytes': 2}) def __delfield_speeddial(self): del self.__field_speeddial speeddial=property(__getfield_speeddial, __setfield_speeddial, __delfield_speeddial, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) yield ('option', self.__field_option, None) if self.has_speeddial: yield ('speeddial', self.__field_speeddial, None) if self.has_dunno1: pass @property def has_speeddial(self): return bool(self.option & PB_FLG_SPEEDDIAL) @property def has_dunno1(self): return bool(self.option & PB_FLG_DUNNO1) @property def is_primary(self): return bool(self.option & PB_FLG_PRIMARY) @property def has_ringtone(self): return False class PBEntry(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['info', 'info2', 'name', 'email', 'email2', 'home', 'work', 'cell', 'fax', 'cell2', 'note', 'datetime', 'group', 'im_name', 'im_type', 'street', 'city', 'state', 'zipcode', 'country', 'cached_wp', 'cached_wp_num', 'ringtone', 'wallpaper'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PBEntry,self).__init__(**dict) if self.__class__ is PBEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PBEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PBEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_info=UINT(**{'sizeinbytes': 2}) self.__field_info.readfrombuffer(buf) self.__field_info2=UINT(**{'sizeinbytes': 2}) self.__field_info2.readfrombuffer(buf) if self.has_name: self.__field_name=USTRING(**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) self.__field_name.readfrombuffer(buf) if self.has_email: self.__field_email=USTRING(**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) self.__field_email.readfrombuffer(buf) if self.has_email2: self.__field_email2=USTRING(**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) self.__field_email2.readfrombuffer(buf) if self.has_home: self.__field_home=NumberEntry() self.__field_home.readfrombuffer(buf) if self.has_work: self.__field_work=NumberEntry() self.__field_work.readfrombuffer(buf) if self.has_cell: self.__field_cell=NumberEntry() self.__field_cell.readfrombuffer(buf) if self.has_fax: self.__field_fax=NumberEntry() self.__field_fax.readfrombuffer(buf) if self.has_cell2: self.__field_cell2=NumberEntry() self.__field_cell2.readfrombuffer(buf) if self.has_note: self.__field_note=STRING(**{ 'terminator': None, 'pascal': True }) self.__field_note.readfrombuffer(buf) if self.has_date: self.__field_datetime=DateTime(**{'sizeinbytes': 4}) self.__field_datetime.readfrombuffer(buf) if self.has_group: self.__field_group=UINT(**{'sizeinbytes': 4}) self.__field_group.readfrombuffer(buf) if self.has_im_name: self.__field_im_name=STRING(**{ 'terminator': None, 'pascal': True }) self.__field_im_name.readfrombuffer(buf) self.__field_im_type=UINT(**{'sizeinbytes': 1}) self.__field_im_type.readfrombuffer(buf) if self.has_street: self.__field_street=STRING(**{ 'terminator': None, 'pascal': True }) self.__field_street.readfrombuffer(buf) if self.has_city: self.__field_city=STRING(**{ 'terminator': None, 'pascal': True }) self.__field_city.readfrombuffer(buf) if self.has_state: self.__field_state=STRING(**{ 'terminator': None, 'pascal': True }) self.__field_state.readfrombuffer(buf) if self.has_zipcode: self.__field_zipcode=STRING(**{ 'terminator': None, 'pascal': True }) self.__field_zipcode.readfrombuffer(buf) if self.has_country: self.__field_country=STRING(**{ 'terminator': None, 'pascal': True }) self.__field_country.readfrombuffer(buf) if self.has_cached_wp: self.__field_cached_wp=STRING(**{ 'terminator': None, 'pascal': True }) self.__field_cached_wp.readfrombuffer(buf) self.__field_cached_wp_num=UINT(**{'sizeinbytes': 4}) self.__field_cached_wp_num.readfrombuffer(buf) if self.has_ringtone: self.__field_ringtone=STRING(**{ 'terminator': None, 'pascal': True }) self.__field_ringtone.readfrombuffer(buf) if self.has_wallpaper: self.__field_wallpaper=STRING(**{ 'terminator': None, 'pascal': True }) self.__field_wallpaper.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_info(self): return self.__field_info.getvalue() def __setfield_info(self, value): if isinstance(value,UINT): self.__field_info=value else: self.__field_info=UINT(value,**{'sizeinbytes': 2}) def __delfield_info(self): del self.__field_info info=property(__getfield_info, __setfield_info, __delfield_info, None) def __getfield_info2(self): return self.__field_info2.getvalue() def __setfield_info2(self, value): if isinstance(value,UINT): self.__field_info2=value else: self.__field_info2=UINT(value,**{'sizeinbytes': 2}) def __delfield_info2(self): del self.__field_info2 info2=property(__getfield_info2, __setfield_info2, __delfield_info2, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def __getfield_email2(self): return self.__field_email2.getvalue() def __setfield_email2(self, value): if isinstance(value,USTRING): self.__field_email2=value else: self.__field_email2=USTRING(value,**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) def __delfield_email2(self): del self.__field_email2 email2=property(__getfield_email2, __setfield_email2, __delfield_email2, None) def __getfield_home(self): return self.__field_home.getvalue() def __setfield_home(self, value): if isinstance(value,NumberEntry): self.__field_home=value else: self.__field_home=NumberEntry(value,) def __delfield_home(self): del self.__field_home home=property(__getfield_home, __setfield_home, __delfield_home, None) def __getfield_work(self): return self.__field_work.getvalue() def __setfield_work(self, value): if isinstance(value,NumberEntry): self.__field_work=value else: self.__field_work=NumberEntry(value,) def __delfield_work(self): del self.__field_work work=property(__getfield_work, __setfield_work, __delfield_work, None) def __getfield_cell(self): return self.__field_cell.getvalue() def __setfield_cell(self, value): if isinstance(value,NumberEntry): self.__field_cell=value else: self.__field_cell=NumberEntry(value,) def __delfield_cell(self): del self.__field_cell cell=property(__getfield_cell, __setfield_cell, __delfield_cell, None) def __getfield_fax(self): return self.__field_fax.getvalue() def __setfield_fax(self, value): if isinstance(value,NumberEntry): self.__field_fax=value else: self.__field_fax=NumberEntry(value,) def __delfield_fax(self): del self.__field_fax fax=property(__getfield_fax, __setfield_fax, __delfield_fax, None) def __getfield_cell2(self): return self.__field_cell2.getvalue() def __setfield_cell2(self, value): if isinstance(value,NumberEntry): self.__field_cell2=value else: self.__field_cell2=NumberEntry(value,) def __delfield_cell2(self): del self.__field_cell2 cell2=property(__getfield_cell2, __setfield_cell2, __delfield_cell2, None) def __getfield_note(self): return self.__field_note.getvalue() def __setfield_note(self, value): if isinstance(value,STRING): self.__field_note=value else: self.__field_note=STRING(value,**{ 'terminator': None, 'pascal': True }) def __delfield_note(self): del self.__field_note note=property(__getfield_note, __setfield_note, __delfield_note, None) def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,DateTime): self.__field_datetime=value else: self.__field_datetime=DateTime(value,**{'sizeinbytes': 4}) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 4}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_im_name(self): return self.__field_im_name.getvalue() def __setfield_im_name(self, value): if isinstance(value,STRING): self.__field_im_name=value else: self.__field_im_name=STRING(value,**{ 'terminator': None, 'pascal': True }) def __delfield_im_name(self): del self.__field_im_name im_name=property(__getfield_im_name, __setfield_im_name, __delfield_im_name, None) def __getfield_im_type(self): return self.__field_im_type.getvalue() def __setfield_im_type(self, value): if isinstance(value,UINT): self.__field_im_type=value else: self.__field_im_type=UINT(value,**{'sizeinbytes': 1}) def __delfield_im_type(self): del self.__field_im_type im_type=property(__getfield_im_type, __setfield_im_type, __delfield_im_type, None) def __getfield_street(self): return self.__field_street.getvalue() def __setfield_street(self, value): if isinstance(value,STRING): self.__field_street=value else: self.__field_street=STRING(value,**{ 'terminator': None, 'pascal': True }) def __delfield_street(self): del self.__field_street street=property(__getfield_street, __setfield_street, __delfield_street, None) def __getfield_city(self): return self.__field_city.getvalue() def __setfield_city(self, value): if isinstance(value,STRING): self.__field_city=value else: self.__field_city=STRING(value,**{ 'terminator': None, 'pascal': True }) def __delfield_city(self): del self.__field_city city=property(__getfield_city, __setfield_city, __delfield_city, None) def __getfield_state(self): return self.__field_state.getvalue() def __setfield_state(self, value): if isinstance(value,STRING): self.__field_state=value else: self.__field_state=STRING(value,**{ 'terminator': None, 'pascal': True }) def __delfield_state(self): del self.__field_state state=property(__getfield_state, __setfield_state, __delfield_state, None) def __getfield_zipcode(self): return self.__field_zipcode.getvalue() def __setfield_zipcode(self, value): if isinstance(value,STRING): self.__field_zipcode=value else: self.__field_zipcode=STRING(value,**{ 'terminator': None, 'pascal': True }) def __delfield_zipcode(self): del self.__field_zipcode zipcode=property(__getfield_zipcode, __setfield_zipcode, __delfield_zipcode, None) def __getfield_country(self): return self.__field_country.getvalue() def __setfield_country(self, value): if isinstance(value,STRING): self.__field_country=value else: self.__field_country=STRING(value,**{ 'terminator': None, 'pascal': True }) def __delfield_country(self): del self.__field_country country=property(__getfield_country, __setfield_country, __delfield_country, None) def __getfield_cached_wp(self): return self.__field_cached_wp.getvalue() def __setfield_cached_wp(self, value): if isinstance(value,STRING): self.__field_cached_wp=value else: self.__field_cached_wp=STRING(value,**{ 'terminator': None, 'pascal': True }) def __delfield_cached_wp(self): del self.__field_cached_wp cached_wp=property(__getfield_cached_wp, __setfield_cached_wp, __delfield_cached_wp, None) def __getfield_cached_wp_num(self): return self.__field_cached_wp_num.getvalue() def __setfield_cached_wp_num(self, value): if isinstance(value,UINT): self.__field_cached_wp_num=value else: self.__field_cached_wp_num=UINT(value,**{'sizeinbytes': 4}) def __delfield_cached_wp_num(self): del self.__field_cached_wp_num cached_wp_num=property(__getfield_cached_wp_num, __setfield_cached_wp_num, __delfield_cached_wp_num, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,STRING): self.__field_ringtone=value else: self.__field_ringtone=STRING(value,**{ 'terminator': None, 'pascal': True }) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,STRING): self.__field_wallpaper=value else: self.__field_wallpaper=STRING(value,**{ 'terminator': None, 'pascal': True }) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def iscontainer(self): return True def containerelements(self): yield ('info', self.__field_info, None) yield ('info2', self.__field_info2, None) if self.has_name: yield ('name', self.__field_name, None) if self.has_email: yield ('email', self.__field_email, None) if self.has_email2: yield ('email2', self.__field_email2, None) if self.has_home: yield ('home', self.__field_home, None) if self.has_work: yield ('work', self.__field_work, None) if self.has_cell: yield ('cell', self.__field_cell, None) if self.has_fax: yield ('fax', self.__field_fax, None) if self.has_cell2: yield ('cell2', self.__field_cell2, None) if self.has_note: yield ('note', self.__field_note, None) if self.has_date: yield ('datetime', self.__field_datetime, None) if self.has_group: yield ('group', self.__field_group, None) if self.has_im_name: yield ('im_name', self.__field_im_name, None) yield ('im_type', self.__field_im_type, None) if self.has_street: yield ('street', self.__field_street, None) if self.has_city: yield ('city', self.__field_city, None) if self.has_state: yield ('state', self.__field_state, None) if self.has_zipcode: yield ('zipcode', self.__field_zipcode, None) if self.has_country: yield ('country', self.__field_country, None) if self.has_cached_wp: yield ('cached_wp', self.__field_cached_wp, None) yield ('cached_wp_num', self.__field_cached_wp_num, None) if self.has_ringtone: yield ('ringtone', self.__field_ringtone, None) if self.has_wallpaper: yield ('wallpaper', self.__field_wallpaper, None) @property def has_name(self): return bool(self.info & PB_FLG_NAME) @property def has_email(self): return bool(self.info & PB_FLG_EMAIL) @property def has_email2(self): return bool(self.info & PB_FLG_EMAIL2) @property def has_home(self): return bool(self.info & PB_FLG_HOME) @property def has_work(self): return bool(self.info & PB_FLG_WORK) @property def has_cell(self): return bool(self.info & PB_FLG_CELL) @property def has_fax(self): return bool(self.info & PB_FLG_FAX) @property def has_cell2(self): return bool(self.info & PB_FLG_CELL2) @property def has_note(self): return bool(self.info & PB_FLG_NOTE) @property def has_date(self): return bool(self.info & PB_FLG_DATE) @property def has_group(self): return bool(self.info & PB_FLG_GROUP) @property def has_im_name(self): return bool((self.info & PB_FLG_IMNAME1) and (self.info2 & PB_FLG_IMNAME2)) @property def has_street(self): return bool(self.info2 & PB_FLG_STREET) @property def has_city(self): return bool(self.info2 & PB_FLG_CITY) @property def has_state(self): return bool(self.info2 & PB_FLG_STATE) @property def has_zipcode(self): return bool(self.info2 & PB_FLG_ZIP) @property def has_country(self): return bool(self.info2 & PB_FLG_COUNTRY) @property def has_cached_wp(self): return bool(self.info2 & PB_FLG_ENTRY_CACHED_WP) @property def has_ringtone(self): return bool(self.info2 & PB_FLG_ENTRY_RT) @property def has_wallpaper(self): return bool(self.info2 & PB_FLG_ENTRY_WP) @property def has_address(self): # return True if this has at least one valid address item return self.has_street or self.has_city or self.has_state or \ self.has_zipcode or self.has_country @property def address(self): # return the address in a BitPim phonebook addresses dict _addr={} if self.has_street: _addr['street']=self.street if self.has_city: _addr['city']=self.city if self.has_state: _addr['state']=self.state if self.has_zipcode: _addr['postalcode']=self.zipcode if self.has_country: _addr['country']=self.country return _addr class LenEntry(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['itemlen'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(LenEntry,self).__init__(**dict) if self.__class__ is LenEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(LenEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(LenEntry,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0 } dict2.update(kwargs) kwargs=dict2 self.__field_itemlen=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_itemlen=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_itemlen.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_itemlen(self): try: self.__field_itemlen except: self.__field_itemlen=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_itemlen.getvalue() def __setfield_itemlen(self, value): if isinstance(value,UINT): self.__field_itemlen=value else: self.__field_itemlen=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_itemlen(self): del self.__field_itemlen itemlen=property(__getfield_itemlen, __setfield_itemlen, __delfield_itemlen, None) def iscontainer(self): return True def containerelements(self): yield ('itemlen', self.__field_itemlen, None) class PBFile(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['lens', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PBFile,self).__init__(**dict) if self.__class__ is PBFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PBFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PBFile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_lens=LIST(**{ 'elementclass': LenEntry, 'length': 8, 'createdefault': True }) self.__field_lens.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': PBEntry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_lens(self): try: self.__field_lens except: self.__field_lens=LIST(**{ 'elementclass': LenEntry, 'length': 8, 'createdefault': True }) return self.__field_lens.getvalue() def __setfield_lens(self, value): if isinstance(value,LIST): self.__field_lens=value else: self.__field_lens=LIST(value,**{ 'elementclass': LenEntry, 'length': 8, 'createdefault': True }) def __delfield_lens(self): del self.__field_lens lens=property(__getfield_lens, __setfield_lens, __delfield_lens, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': PBEntry }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': PBEntry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('lens', self.__field_lens, None) yield ('items', self.__field_items, None) class PBFileHeader(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['lens'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PBFileHeader,self).__init__(**dict) if self.__class__ is PBFileHeader: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PBFileHeader,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PBFileHeader,kwargs) if len(args): dict2={ 'elementclass': LenEntry, 'length': 8, 'createdefault': True } dict2.update(kwargs) kwargs=dict2 self.__field_lens=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_lens=LIST(**{ 'elementclass': LenEntry, 'length': 8, 'createdefault': True }) self.__field_lens.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_lens(self): try: self.__field_lens except: self.__field_lens=LIST(**{ 'elementclass': LenEntry, 'length': 8, 'createdefault': True }) return self.__field_lens.getvalue() def __setfield_lens(self, value): if isinstance(value,LIST): self.__field_lens=value else: self.__field_lens=LIST(value,**{ 'elementclass': LenEntry, 'length': 8, 'createdefault': True }) def __delfield_lens(self): del self.__field_lens lens=property(__getfield_lens, __setfield_lens, __delfield_lens, None) def iscontainer(self): return True def containerelements(self): yield ('lens', self.__field_lens, None) class ss_cmd_hdr(BaseProtogenClass): __fields=['commandcode', 'command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_cmd_hdr,self).__init__(**dict) if self.__class__ is ss_cmd_hdr: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_cmd_hdr,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_cmd_hdr,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_commandcode except: self.__field_commandcode=UINT(**{'sizeinbytes': 4, 'default': 0xfb4b }) self.__field_commandcode.writetobuffer(buf) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_commandcode=UINT(**{'sizeinbytes': 4, 'default': 0xfb4b }) self.__field_commandcode.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_commandcode(self): try: self.__field_commandcode except: self.__field_commandcode=UINT(**{'sizeinbytes': 4, 'default': 0xfb4b }) return self.__field_commandcode.getvalue() def __setfield_commandcode(self, value): if isinstance(value,UINT): self.__field_commandcode=value else: self.__field_commandcode=UINT(value,**{'sizeinbytes': 4, 'default': 0xfb4b }) def __delfield_commandcode(self): del self.__field_commandcode commandcode=property(__getfield_commandcode, __setfield_commandcode, __delfield_commandcode, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('commandcode', self.__field_commandcode, None) yield ('command', self.__field_command, None) class ss_cmd_resp(BaseProtogenClass): __fields=['cmd_hdr', 'data'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_cmd_resp,self).__init__(**dict) if self.__class__ is ss_cmd_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_cmd_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_cmd_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_cmd_hdr.writetobuffer(buf) self.__field_data.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd_hdr=ss_cmd_hdr() self.__field_cmd_hdr.readfrombuffer(buf) self.__field_data=DATA() self.__field_data.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd_hdr(self): return self.__field_cmd_hdr.getvalue() def __setfield_cmd_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_cmd_hdr=value else: self.__field_cmd_hdr=ss_cmd_hdr(value,) def __delfield_cmd_hdr(self): del self.__field_cmd_hdr cmd_hdr=property(__getfield_cmd_hdr, __setfield_cmd_hdr, __delfield_cmd_hdr, None) def __getfield_data(self): return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,DATA): self.__field_data=value else: self.__field_data=DATA(value,) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def iscontainer(self): return True def containerelements(self): yield ('cmd_hdr', self.__field_cmd_hdr, None) yield ('data', self.__field_data, None) class ss_sw_req(BaseProtogenClass): __fields=['hdr'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_sw_req,self).__init__(**dict) if self.__class__ is ss_sw_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_sw_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_sw_req,kwargs) if len(args): dict2={ 'command': SS_CMD_SW_VERSION } dict2.update(kwargs) kwargs=dict2 self.__field_hdr=ss_cmd_hdr(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_SW_VERSION }) self.__field_hdr.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_SW_VERSION }) self.__field_hdr.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_SW_VERSION }) return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,**{ 'command': SS_CMD_SW_VERSION }) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) class ss_sw_resp(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['hdr', 'sw_version'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_sw_resp,self).__init__(**dict) if self.__class__ is ss_sw_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_sw_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_sw_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr() self.__field_hdr.readfrombuffer(buf) self.__field_sw_version=STRING(**{ 'terminator': 0 }) self.__field_sw_version.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def __getfield_sw_version(self): return self.__field_sw_version.getvalue() def __setfield_sw_version(self, value): if isinstance(value,STRING): self.__field_sw_version=value else: self.__field_sw_version=STRING(value,**{ 'terminator': 0 }) def __delfield_sw_version(self): del self.__field_sw_version sw_version=property(__getfield_sw_version, __setfield_sw_version, __delfield_sw_version, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) yield ('sw_version', self.__field_sw_version, None) class ss_hw_req(BaseProtogenClass): __fields=['hdr'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_hw_req,self).__init__(**dict) if self.__class__ is ss_hw_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_hw_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_hw_req,kwargs) if len(args): dict2={ 'command': SS_CMD_HW_VERSION } dict2.update(kwargs) kwargs=dict2 self.__field_hdr=ss_cmd_hdr(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_HW_VERSION }) self.__field_hdr.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_HW_VERSION }) self.__field_hdr.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_HW_VERSION }) return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,**{ 'command': SS_CMD_HW_VERSION }) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) class ss_hw_resp(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['hdr', 'hw_version'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_hw_resp,self).__init__(**dict) if self.__class__ is ss_hw_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_hw_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_hw_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr() self.__field_hdr.readfrombuffer(buf) self.__field_hw_version=STRING(**{ 'terminator': 0 }) self.__field_hw_version.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def __getfield_hw_version(self): return self.__field_hw_version.getvalue() def __setfield_hw_version(self, value): if isinstance(value,STRING): self.__field_hw_version=value else: self.__field_hw_version=STRING(value,**{ 'terminator': 0 }) def __delfield_hw_version(self): del self.__field_hw_version hw_version=property(__getfield_hw_version, __setfield_hw_version, __delfield_hw_version, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) yield ('hw_version', self.__field_hw_version, None) class ss_pb_count_req(BaseProtogenClass): __fields=['hdr'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_count_req,self).__init__(**dict) if self.__class__ is ss_pb_count_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_count_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_count_req,kwargs) if len(args): dict2={ 'command': SS_CMD_PB_COUNT } dict2.update(kwargs) kwargs=dict2 self.__field_hdr=ss_cmd_hdr(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_COUNT }) self.__field_hdr.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_COUNT }) self.__field_hdr.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_COUNT }) return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,**{ 'command': SS_CMD_PB_COUNT }) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) class ss_pb_count_resp(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['hdr', 'count'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_count_resp,self).__init__(**dict) if self.__class__ is ss_pb_count_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_count_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_count_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr() self.__field_hdr.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 1}).readfrombuffer(buf) self.__field_count=UINT(**{'sizeinbytes': 2}) self.__field_count.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def __getfield_count(self): return self.__field_count.getvalue() def __setfield_count(self, value): if isinstance(value,UINT): self.__field_count=value else: self.__field_count=UINT(value,**{'sizeinbytes': 2}) def __delfield_count(self): del self.__field_count count=property(__getfield_count, __setfield_count, __delfield_count, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) yield ('count', self.__field_count, None) class ss_pb_read_req(BaseProtogenClass): __fields=['hdr', 'index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_read_req,self).__init__(**dict) if self.__class__ is ss_pb_read_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_read_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_read_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_READ }) self.__field_hdr.writetobuffer(buf) try: self.__field__gen_p_samsungschu750_276 except: self.__field__gen_p_samsungschu750_276=DONTCARE(**{'sizeinbytes': 1}) self.__field__gen_p_samsungschu750_276.writetobuffer(buf) self.__field_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_READ }) self.__field_hdr.readfrombuffer(buf) self.__field__gen_p_samsungschu750_276=DONTCARE(**{'sizeinbytes': 1}) self.__field__gen_p_samsungschu750_276.readfrombuffer(buf) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_READ }) return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,**{ 'command': SS_CMD_PB_READ }) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) yield ('index', self.__field_index, None) class ss_pb_read_resp(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['hdr', 'index', 'data'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_read_resp,self).__init__(**dict) if self.__class__ is ss_pb_read_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_read_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_read_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr() self.__field_hdr.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 1}).readfrombuffer(buf) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 1}).readfrombuffer(buf) self.__field_data=DATA() self.__field_data.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_data(self): return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,DATA): self.__field_data=value else: self.__field_data=DATA(value,) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) yield ('index', self.__field_index, None) yield ('data', self.__field_data, None) class ss_pb_voicemail_read_req(BaseProtogenClass): __fields=['hdr', 'param'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_voicemail_read_req,self).__init__(**dict) if self.__class__ is ss_pb_voicemail_read_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_voicemail_read_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_voicemail_read_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_VOICEMAIL_READ }) self.__field_hdr.writetobuffer(buf) try: self.__field_param except: self.__field_param=UINT(**{'sizeinbytes': 1, 'constant': SS_CMD_PB_VOICEMAIL_PARAM }) self.__field_param.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_VOICEMAIL_READ }) self.__field_hdr.readfrombuffer(buf) self.__field_param=UINT(**{'sizeinbytes': 1, 'constant': SS_CMD_PB_VOICEMAIL_PARAM }) self.__field_param.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_VOICEMAIL_READ }) return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,**{ 'command': SS_CMD_PB_VOICEMAIL_READ }) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def __getfield_param(self): try: self.__field_param except: self.__field_param=UINT(**{'sizeinbytes': 1, 'constant': SS_CMD_PB_VOICEMAIL_PARAM }) return self.__field_param.getvalue() def __setfield_param(self, value): if isinstance(value,UINT): self.__field_param=value else: self.__field_param=UINT(value,**{'sizeinbytes': 1, 'constant': SS_CMD_PB_VOICEMAIL_PARAM }) def __delfield_param(self): del self.__field_param param=property(__getfield_param, __setfield_param, __delfield_param, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) yield ('param', self.__field_param, None) class ss_pb_voicemail_resp(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['hdr', 'param', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_voicemail_resp,self).__init__(**dict) if self.__class__ is ss_pb_voicemail_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_voicemail_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_voicemail_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr() self.__field_hdr.readfrombuffer(buf) self.__field_param=UINT(**{'sizeinbytes': 1}) self.__field_param.readfrombuffer(buf) self.__field_number=STRING(**{ 'terminator': 0 }) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def __getfield_param(self): return self.__field_param.getvalue() def __setfield_param(self, value): if isinstance(value,UINT): self.__field_param=value else: self.__field_param=UINT(value,**{'sizeinbytes': 1}) def __delfield_param(self): del self.__field_param param=property(__getfield_param, __setfield_param, __delfield_param, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,STRING): self.__field_number=value else: self.__field_number=STRING(value,**{ 'terminator': 0 }) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) yield ('param', self.__field_param, None) yield ('number', self.__field_number, None) class ss_pb_voicemail_write_req(BaseProtogenClass): __fields=['hdr', 'param', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_voicemail_write_req,self).__init__(**dict) if self.__class__ is ss_pb_voicemail_write_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_voicemail_write_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_voicemail_write_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_VOICEMAIL_WRITE }) self.__field_hdr.writetobuffer(buf) try: self.__field_param except: self.__field_param=UINT(**{'sizeinbytes': 1, 'constant': SS_CMD_PB_VOICEMAIL_PARAM }) self.__field_param.writetobuffer(buf) try: self.__field_number except: self.__field_number=STRING(**{ 'terminator': 0, 'default': PB_DEFAULT_VOICEMAIL_NUMBER }) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_VOICEMAIL_WRITE }) self.__field_hdr.readfrombuffer(buf) self.__field_param=UINT(**{'sizeinbytes': 1, 'constant': SS_CMD_PB_VOICEMAIL_PARAM }) self.__field_param.readfrombuffer(buf) self.__field_number=STRING(**{ 'terminator': 0, 'default': PB_DEFAULT_VOICEMAIL_NUMBER }) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_VOICEMAIL_WRITE }) return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,**{ 'command': SS_CMD_PB_VOICEMAIL_WRITE }) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def __getfield_param(self): try: self.__field_param except: self.__field_param=UINT(**{'sizeinbytes': 1, 'constant': SS_CMD_PB_VOICEMAIL_PARAM }) return self.__field_param.getvalue() def __setfield_param(self, value): if isinstance(value,UINT): self.__field_param=value else: self.__field_param=UINT(value,**{'sizeinbytes': 1, 'constant': SS_CMD_PB_VOICEMAIL_PARAM }) def __delfield_param(self): del self.__field_param param=property(__getfield_param, __setfield_param, __delfield_param, None) def __getfield_number(self): try: self.__field_number except: self.__field_number=STRING(**{ 'terminator': 0, 'default': PB_DEFAULT_VOICEMAIL_NUMBER }) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,STRING): self.__field_number=value else: self.__field_number=STRING(value,**{ 'terminator': 0, 'default': PB_DEFAULT_VOICEMAIL_NUMBER }) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) yield ('param', self.__field_param, None) yield ('number', self.__field_number, None) class ss_pb_clear_req(BaseProtogenClass): __fields=['hdr'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_clear_req,self).__init__(**dict) if self.__class__ is ss_pb_clear_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_clear_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_clear_req,kwargs) if len(args): dict2={ 'command': SS_CMD_PB_CLEAR } dict2.update(kwargs) kwargs=dict2 self.__field_hdr=ss_cmd_hdr(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_CLEAR }) self.__field_hdr.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_CLEAR }) self.__field_hdr.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_CLEAR }) return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,**{ 'command': SS_CMD_PB_CLEAR }) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) class ss_pb_clear_resp(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['hdr', 'flg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_clear_resp,self).__init__(**dict) if self.__class__ is ss_pb_clear_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_clear_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_clear_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr() self.__field_hdr.readfrombuffer(buf) self.__field_flg=UINT(**{'sizeinbytes': 2}) self.__field_flg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def __getfield_flg(self): return self.__field_flg.getvalue() def __setfield_flg(self, value): if isinstance(value,UINT): self.__field_flg=value else: self.__field_flg=UINT(value,**{'sizeinbytes': 2}) def __delfield_flg(self): del self.__field_flg flg=property(__getfield_flg, __setfield_flg, __delfield_flg, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) yield ('flg', self.__field_flg, None) class ss_number_entry(BaseProtogenClass): __fields=['number', 'speeddial', 'primary', 'ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_number_entry,self).__init__(**dict) if self.__class__ is ss_number_entry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_number_entry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_number_entry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_number except: self.__field_number=STRING(**{ 'terminator': 0, 'default': '', 'maxsizeinbytes': PB_MAX_NUMBER_LEN, 'raiseontruncate': False }) self.__field_number.writetobuffer(buf) try: self.__field_speeddial except: self.__field_speeddial=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_speeddial.writetobuffer(buf) try: self.__field_primary except: self.__field_primary=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_primary.writetobuffer(buf) try: self.__field__gen_p_samsungschu750_309 except: self.__field__gen_p_samsungschu750_309=DONTCARE(**{'sizeinbytes': 8}) self.__field__gen_p_samsungschu750_309.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=STRING(**{ 'terminator': 0, 'default': '' }) self.__field_ringtone.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=STRING(**{ 'terminator': 0, 'default': '', 'maxsizeinbytes': PB_MAX_NUMBER_LEN, 'raiseontruncate': False }) self.__field_number.readfrombuffer(buf) self.__field_speeddial=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_speeddial.readfrombuffer(buf) self.__field_primary=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_primary.readfrombuffer(buf) self.__field__gen_p_samsungschu750_309=DONTCARE(**{'sizeinbytes': 8}) self.__field__gen_p_samsungschu750_309.readfrombuffer(buf) self.__field_ringtone=STRING(**{ 'terminator': 0, 'default': '' }) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): try: self.__field_number except: self.__field_number=STRING(**{ 'terminator': 0, 'default': '', 'maxsizeinbytes': PB_MAX_NUMBER_LEN, 'raiseontruncate': False }) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,STRING): self.__field_number=value else: self.__field_number=STRING(value,**{ 'terminator': 0, 'default': '', 'maxsizeinbytes': PB_MAX_NUMBER_LEN, 'raiseontruncate': False }) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_speeddial(self): try: self.__field_speeddial except: self.__field_speeddial=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_speeddial.getvalue() def __setfield_speeddial(self, value): if isinstance(value,UINT): self.__field_speeddial=value else: self.__field_speeddial=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_speeddial(self): del self.__field_speeddial speeddial=property(__getfield_speeddial, __setfield_speeddial, __delfield_speeddial, None) def __getfield_primary(self): try: self.__field_primary except: self.__field_primary=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_primary.getvalue() def __setfield_primary(self, value): if isinstance(value,UINT): self.__field_primary=value else: self.__field_primary=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_primary(self): del self.__field_primary primary=property(__getfield_primary, __setfield_primary, __delfield_primary, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=STRING(**{ 'terminator': 0, 'default': '' }) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,STRING): self.__field_ringtone=value else: self.__field_ringtone=STRING(value,**{ 'terminator': 0, 'default': '' }) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) yield ('speeddial', self.__field_speeddial, None) yield ('primary', self.__field_primary, None) yield ('ringtone', self.__field_ringtone, None) class ss_pb_entry(BaseProtogenClass): __fields=['name', 'email', 'email2', 'note', 'wallpaper', 'wallpaper_range', 'home', 'work', 'cell', 'dummy', 'fax', 'cell2', 'group', 'street', 'city', 'state', 'zipcode', 'country', 'im_name', 'im_type'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_entry,self).__init__(**dict) if self.__class__ is ss_pb_entry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_entry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_entry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_name.writetobuffer(buf) try: self.__field_email except: self.__field_email=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) self.__field_email.writetobuffer(buf) try: self.__field_email2 except: self.__field_email2=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) self.__field_email2.writetobuffer(buf) try: self.__field__gen_p_samsungschu750_328 except: self.__field__gen_p_samsungschu750_328=DONTCARE(**{'sizeinbytes': 2}) self.__field__gen_p_samsungschu750_328.writetobuffer(buf) try: self.__field_note except: self.__field_note=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_NOTE_LEN, 'raiseontruncate': False, 'default': '' }) self.__field_note.writetobuffer(buf) try: self.__field__gen_p_samsungschu750_334 except: self.__field__gen_p_samsungschu750_334=DONTCARE(**{'sizeinbytes': 1}) self.__field__gen_p_samsungschu750_334.writetobuffer(buf) try: self.__field_wallpaper except: self.__field_wallpaper=STRING(**{ 'terminator': 0, 'default': '' }) self.__field_wallpaper.writetobuffer(buf) try: self.__field_wallpaper_range except: self.__field_wallpaper_range=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_wallpaper_range.writetobuffer(buf) try: self.__field_home except: self.__field_home=ss_number_entry() self.__field_home.writetobuffer(buf) try: self.__field_work except: self.__field_work=ss_number_entry() self.__field_work.writetobuffer(buf) try: self.__field_cell except: self.__field_cell=ss_number_entry() self.__field_cell.writetobuffer(buf) try: self.__field_dummy except: self.__field_dummy=ss_number_entry() self.__field_dummy.writetobuffer(buf) try: self.__field_fax except: self.__field_fax=ss_number_entry() self.__field_fax.writetobuffer(buf) try: self.__field_cell2 except: self.__field_cell2=ss_number_entry() self.__field_cell2.writetobuffer(buf) try: self.__field__gen_p_samsungschu750_344 except: self.__field__gen_p_samsungschu750_344=DONTCARE(**{'sizeinbytes': 4}) self.__field__gen_p_samsungschu750_344.writetobuffer(buf) try: self.__field_group except: self.__field_group=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_group.writetobuffer(buf) try: self.__field__gen_p_samsungschu750_346 except: self.__field__gen_p_samsungschu750_346=DONTCARE(**{'sizeinbytes': 2}) self.__field__gen_p_samsungschu750_346.writetobuffer(buf) try: self.__field_street except: self.__field_street=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_STREET_LEN, 'raiseontruncate': False, 'default': '' }) self.__field_street.writetobuffer(buf) try: self.__field_city except: self.__field_city=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_CITY_LEN, 'raiseontruncate': False, 'default': '' }) self.__field_city.writetobuffer(buf) try: self.__field_state except: self.__field_state=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_STATE_LEN, 'raiseontruncate': False, 'default': '' }) self.__field_state.writetobuffer(buf) try: self.__field_zipcode except: self.__field_zipcode=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_ZIP_LEN, 'raiseontruncate': False, 'default': '' }) self.__field_zipcode.writetobuffer(buf) try: self.__field_country except: self.__field_country=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_COUNTRY_LEN, 'raiseontruncate': False, 'default': '' }) self.__field_country.writetobuffer(buf) try: self.__field_im_name except: self.__field_im_name=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_IMNAME_LEN, 'raiseontruncate': False, 'default': '' }) self.__field_im_name.writetobuffer(buf) try: self.__field_im_type except: self.__field_im_type=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_im_type.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_name=USTRING(**{ 'terminator': 0, 'maxsizeinbytes': PB_MAX_NAME_LEN, 'encoding': ENCODING, 'raiseontruncate': False }) self.__field_name.readfrombuffer(buf) self.__field_email=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) self.__field_email.readfrombuffer(buf) self.__field_email2=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) self.__field_email2.readfrombuffer(buf) self.__field__gen_p_samsungschu750_328=DONTCARE(**{'sizeinbytes': 2}) self.__field__gen_p_samsungschu750_328.readfrombuffer(buf) self.__field_note=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_NOTE_LEN, 'raiseontruncate': False, 'default': '' }) self.__field_note.readfrombuffer(buf) self.__field__gen_p_samsungschu750_334=DONTCARE(**{'sizeinbytes': 1}) self.__field__gen_p_samsungschu750_334.readfrombuffer(buf) self.__field_wallpaper=STRING(**{ 'terminator': 0, 'default': '' }) self.__field_wallpaper.readfrombuffer(buf) self.__field_wallpaper_range=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_wallpaper_range.readfrombuffer(buf) self.__field_home=ss_number_entry() self.__field_home.readfrombuffer(buf) self.__field_work=ss_number_entry() self.__field_work.readfrombuffer(buf) self.__field_cell=ss_number_entry() self.__field_cell.readfrombuffer(buf) self.__field_dummy=ss_number_entry() self.__field_dummy.readfrombuffer(buf) self.__field_fax=ss_number_entry() self.__field_fax.readfrombuffer(buf) self.__field_cell2=ss_number_entry() self.__field_cell2.readfrombuffer(buf) self.__field__gen_p_samsungschu750_344=DONTCARE(**{'sizeinbytes': 4}) self.__field__gen_p_samsungschu750_344.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_group.readfrombuffer(buf) self.__field__gen_p_samsungschu750_346=DONTCARE(**{'sizeinbytes': 2}) self.__field__gen_p_samsungschu750_346.readfrombuffer(buf) self.__field_street=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_STREET_LEN, 'raiseontruncate': False, 'default': '' }) self.__field_street.readfrombuffer(buf) self.__field_city=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_CITY_LEN, 'raiseontruncate': False, 'default': '' }) self.__field_city.readfrombuffer(buf) self.__field_state=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_STATE_LEN, 'raiseontruncate': False, 'default': '' }) self.__field_state.readfrombuffer(buf) self.__field_zipcode=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_ZIP_LEN, 'raiseontruncate': False, 'default': '' }) self.__field_zipcode.readfrombuffer(buf) self.__field_country=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_COUNTRY_LEN, 'raiseontruncate': False, 'default': '' }) self.__field_country.readfrombuffer(buf) self.__field_im_name=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_IMNAME_LEN, 'raiseontruncate': False, 'default': '' }) self.__field_im_name.readfrombuffer(buf) self.__field_im_type=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_im_type.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{ 'terminator': 0, 'maxsizeinbytes': PB_MAX_NAME_LEN, 'encoding': ENCODING, 'raiseontruncate': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_email(self): try: self.__field_email except: self.__field_email=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def __getfield_email2(self): try: self.__field_email2 except: self.__field_email2=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) return self.__field_email2.getvalue() def __setfield_email2(self, value): if isinstance(value,USTRING): self.__field_email2=value else: self.__field_email2=USTRING(value,**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) def __delfield_email2(self): del self.__field_email2 email2=property(__getfield_email2, __setfield_email2, __delfield_email2, None) def __getfield_note(self): try: self.__field_note except: self.__field_note=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_NOTE_LEN, 'raiseontruncate': False, 'default': '' }) return self.__field_note.getvalue() def __setfield_note(self, value): if isinstance(value,USTRING): self.__field_note=value else: self.__field_note=USTRING(value,**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_NOTE_LEN, 'raiseontruncate': False, 'default': '' }) def __delfield_note(self): del self.__field_note note=property(__getfield_note, __setfield_note, __delfield_note, None) def __getfield_wallpaper(self): try: self.__field_wallpaper except: self.__field_wallpaper=STRING(**{ 'terminator': 0, 'default': '' }) return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,STRING): self.__field_wallpaper=value else: self.__field_wallpaper=STRING(value,**{ 'terminator': 0, 'default': '' }) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_wallpaper_range(self): try: self.__field_wallpaper_range except: self.__field_wallpaper_range=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_wallpaper_range.getvalue() def __setfield_wallpaper_range(self, value): if isinstance(value,UINT): self.__field_wallpaper_range=value else: self.__field_wallpaper_range=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_wallpaper_range(self): del self.__field_wallpaper_range wallpaper_range=property(__getfield_wallpaper_range, __setfield_wallpaper_range, __delfield_wallpaper_range, None) def __getfield_home(self): try: self.__field_home except: self.__field_home=ss_number_entry() return self.__field_home.getvalue() def __setfield_home(self, value): if isinstance(value,ss_number_entry): self.__field_home=value else: self.__field_home=ss_number_entry(value,) def __delfield_home(self): del self.__field_home home=property(__getfield_home, __setfield_home, __delfield_home, None) def __getfield_work(self): try: self.__field_work except: self.__field_work=ss_number_entry() return self.__field_work.getvalue() def __setfield_work(self, value): if isinstance(value,ss_number_entry): self.__field_work=value else: self.__field_work=ss_number_entry(value,) def __delfield_work(self): del self.__field_work work=property(__getfield_work, __setfield_work, __delfield_work, None) def __getfield_cell(self): try: self.__field_cell except: self.__field_cell=ss_number_entry() return self.__field_cell.getvalue() def __setfield_cell(self, value): if isinstance(value,ss_number_entry): self.__field_cell=value else: self.__field_cell=ss_number_entry(value,) def __delfield_cell(self): del self.__field_cell cell=property(__getfield_cell, __setfield_cell, __delfield_cell, None) def __getfield_dummy(self): try: self.__field_dummy except: self.__field_dummy=ss_number_entry() return self.__field_dummy.getvalue() def __setfield_dummy(self, value): if isinstance(value,ss_number_entry): self.__field_dummy=value else: self.__field_dummy=ss_number_entry(value,) def __delfield_dummy(self): del self.__field_dummy dummy=property(__getfield_dummy, __setfield_dummy, __delfield_dummy, None) def __getfield_fax(self): try: self.__field_fax except: self.__field_fax=ss_number_entry() return self.__field_fax.getvalue() def __setfield_fax(self, value): if isinstance(value,ss_number_entry): self.__field_fax=value else: self.__field_fax=ss_number_entry(value,) def __delfield_fax(self): del self.__field_fax fax=property(__getfield_fax, __setfield_fax, __delfield_fax, None) def __getfield_cell2(self): try: self.__field_cell2 except: self.__field_cell2=ss_number_entry() return self.__field_cell2.getvalue() def __setfield_cell2(self, value): if isinstance(value,ss_number_entry): self.__field_cell2=value else: self.__field_cell2=ss_number_entry(value,) def __delfield_cell2(self): del self.__field_cell2 cell2=property(__getfield_cell2, __setfield_cell2, __delfield_cell2, None) def __getfield_group(self): try: self.__field_group except: self.__field_group=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_street(self): try: self.__field_street except: self.__field_street=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_STREET_LEN, 'raiseontruncate': False, 'default': '' }) return self.__field_street.getvalue() def __setfield_street(self, value): if isinstance(value,USTRING): self.__field_street=value else: self.__field_street=USTRING(value,**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_STREET_LEN, 'raiseontruncate': False, 'default': '' }) def __delfield_street(self): del self.__field_street street=property(__getfield_street, __setfield_street, __delfield_street, None) def __getfield_city(self): try: self.__field_city except: self.__field_city=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_CITY_LEN, 'raiseontruncate': False, 'default': '' }) return self.__field_city.getvalue() def __setfield_city(self, value): if isinstance(value,USTRING): self.__field_city=value else: self.__field_city=USTRING(value,**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_CITY_LEN, 'raiseontruncate': False, 'default': '' }) def __delfield_city(self): del self.__field_city city=property(__getfield_city, __setfield_city, __delfield_city, None) def __getfield_state(self): try: self.__field_state except: self.__field_state=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_STATE_LEN, 'raiseontruncate': False, 'default': '' }) return self.__field_state.getvalue() def __setfield_state(self, value): if isinstance(value,USTRING): self.__field_state=value else: self.__field_state=USTRING(value,**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_STATE_LEN, 'raiseontruncate': False, 'default': '' }) def __delfield_state(self): del self.__field_state state=property(__getfield_state, __setfield_state, __delfield_state, None) def __getfield_zipcode(self): try: self.__field_zipcode except: self.__field_zipcode=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_ZIP_LEN, 'raiseontruncate': False, 'default': '' }) return self.__field_zipcode.getvalue() def __setfield_zipcode(self, value): if isinstance(value,USTRING): self.__field_zipcode=value else: self.__field_zipcode=USTRING(value,**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_ZIP_LEN, 'raiseontruncate': False, 'default': '' }) def __delfield_zipcode(self): del self.__field_zipcode zipcode=property(__getfield_zipcode, __setfield_zipcode, __delfield_zipcode, None) def __getfield_country(self): try: self.__field_country except: self.__field_country=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_COUNTRY_LEN, 'raiseontruncate': False, 'default': '' }) return self.__field_country.getvalue() def __setfield_country(self, value): if isinstance(value,USTRING): self.__field_country=value else: self.__field_country=USTRING(value,**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_COUNTRY_LEN, 'raiseontruncate': False, 'default': '' }) def __delfield_country(self): del self.__field_country country=property(__getfield_country, __setfield_country, __delfield_country, None) def __getfield_im_name(self): try: self.__field_im_name except: self.__field_im_name=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_IMNAME_LEN, 'raiseontruncate': False, 'default': '' }) return self.__field_im_name.getvalue() def __setfield_im_name(self, value): if isinstance(value,USTRING): self.__field_im_name=value else: self.__field_im_name=USTRING(value,**{ 'terminator': 0, 'encoding': ENCODING, 'maxsizeinbytes': PB_MAX_IMNAME_LEN, 'raiseontruncate': False, 'default': '' }) def __delfield_im_name(self): del self.__field_im_name im_name=property(__getfield_im_name, __setfield_im_name, __delfield_im_name, None) def __getfield_im_type(self): try: self.__field_im_type except: self.__field_im_type=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_im_type.getvalue() def __setfield_im_type(self, value): if isinstance(value,UINT): self.__field_im_type=value else: self.__field_im_type=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_im_type(self): del self.__field_im_type im_type=property(__getfield_im_type, __setfield_im_type, __delfield_im_type, None) def iscontainer(self): return True def containerelements(self): yield ('name', self.__field_name, None) yield ('email', self.__field_email, None) yield ('email2', self.__field_email2, None) yield ('note', self.__field_note, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('wallpaper_range', self.__field_wallpaper_range, None) yield ('home', self.__field_home, None) yield ('work', self.__field_work, None) yield ('cell', self.__field_cell, None) yield ('dummy', self.__field_dummy, None) yield ('fax', self.__field_fax, None) yield ('cell2', self.__field_cell2, None) yield ('group', self.__field_group, None) yield ('street', self.__field_street, None) yield ('city', self.__field_city, None) yield ('state', self.__field_state, None) yield ('zipcode', self.__field_zipcode, None) yield ('country', self.__field_country, None) yield ('im_name', self.__field_im_name, None) yield ('im_type', self.__field_im_type, None) def _set_address(self, addr): # set address fields based on BitPim phonebook address dict if not isinstance(addr, dict): raise TypeError('addr must be of type dict') self.street=addr.get('street', '') self.city=addr.get('city', '') self.state=addr.get('state', '') self.zipcode=addr.get('postalcode', '') self.country=addr.get('country', '') def _get_address(self): # return address items in BitPim phonebook address dict return { 'street': self.street, 'city': self.city, 'state': self.state, 'postalcode': self.zipcode, 'country': self.country } address=property(fget=_get_address, fset=_set_address) class ss_pb_write_req(BaseProtogenClass): __fields=['hdr', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_write_req,self).__init__(**dict) if self.__class__ is ss_pb_write_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_write_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_write_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_WRITE }) self.__field_hdr.writetobuffer(buf) try: self.__field__gen_p_samsungschu750_398 except: self.__field__gen_p_samsungschu750_398=DONTCARE(**{'sizeinbytes': 1}) self.__field__gen_p_samsungschu750_398.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_WRITE }) self.__field_hdr.readfrombuffer(buf) self.__field__gen_p_samsungschu750_398=DONTCARE(**{'sizeinbytes': 1}) self.__field__gen_p_samsungschu750_398.readfrombuffer(buf) self.__field_entry=ss_pb_entry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_WRITE }) return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,**{ 'command': SS_CMD_PB_WRITE }) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,ss_pb_entry): self.__field_entry=value else: self.__field_entry=ss_pb_entry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) yield ('entry', self.__field_entry, None) class ss_pb_write_resp(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['hdr', 'index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_write_resp,self).__init__(**dict) if self.__class__ is ss_pb_write_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_write_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_write_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr() self.__field_hdr.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 1}).readfrombuffer(buf) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) yield ('index', self.__field_index, None) class cl_list(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(cl_list,self).__init__(**dict) if self.__class__ is cl_list: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(cl_list,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(cl_list,kwargs) if len(args): dict2={'sizeinbytes': 2} dict2.update(kwargs) kwargs=dict2 self.__field_index=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) class cl_index_file(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['incoming', 'outgoing', 'missed', 'incoming_count', 'outgoing_count', 'missed_count'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(cl_index_file,self).__init__(**dict) if self.__class__ is cl_index_file: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(cl_index_file,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(cl_index_file,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_incoming=LIST(**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) self.__field_incoming.readfrombuffer(buf) self.__field_outgoing=LIST(**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) self.__field_outgoing.readfrombuffer(buf) self.__field_missed=LIST(**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) self.__field_missed.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 1374}).readfrombuffer(buf) self.__field_incoming_count=UINT(**{'sizeinbytes': 4}) self.__field_incoming_count.readfrombuffer(buf) self.__field_outgoing_count=UINT(**{'sizeinbytes': 4}) self.__field_outgoing_count.readfrombuffer(buf) self.__field_missed_count=UINT(**{'sizeinbytes': 4}) self.__field_missed_count.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_incoming(self): return self.__field_incoming.getvalue() def __setfield_incoming(self, value): if isinstance(value,LIST): self.__field_incoming=value else: self.__field_incoming=LIST(value,**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) def __delfield_incoming(self): del self.__field_incoming incoming=property(__getfield_incoming, __setfield_incoming, __delfield_incoming, None) def __getfield_outgoing(self): return self.__field_outgoing.getvalue() def __setfield_outgoing(self, value): if isinstance(value,LIST): self.__field_outgoing=value else: self.__field_outgoing=LIST(value,**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) def __delfield_outgoing(self): del self.__field_outgoing outgoing=property(__getfield_outgoing, __setfield_outgoing, __delfield_outgoing, None) def __getfield_missed(self): return self.__field_missed.getvalue() def __setfield_missed(self, value): if isinstance(value,LIST): self.__field_missed=value else: self.__field_missed=LIST(value,**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) def __delfield_missed(self): del self.__field_missed missed=property(__getfield_missed, __setfield_missed, __delfield_missed, None) def __getfield_incoming_count(self): return self.__field_incoming_count.getvalue() def __setfield_incoming_count(self, value): if isinstance(value,UINT): self.__field_incoming_count=value else: self.__field_incoming_count=UINT(value,**{'sizeinbytes': 4}) def __delfield_incoming_count(self): del self.__field_incoming_count incoming_count=property(__getfield_incoming_count, __setfield_incoming_count, __delfield_incoming_count, None) def __getfield_outgoing_count(self): return self.__field_outgoing_count.getvalue() def __setfield_outgoing_count(self, value): if isinstance(value,UINT): self.__field_outgoing_count=value else: self.__field_outgoing_count=UINT(value,**{'sizeinbytes': 4}) def __delfield_outgoing_count(self): del self.__field_outgoing_count outgoing_count=property(__getfield_outgoing_count, __setfield_outgoing_count, __delfield_outgoing_count, None) def __getfield_missed_count(self): return self.__field_missed_count.getvalue() def __setfield_missed_count(self, value): if isinstance(value,UINT): self.__field_missed_count=value else: self.__field_missed_count=UINT(value,**{'sizeinbytes': 4}) def __delfield_missed_count(self): del self.__field_missed_count missed_count=property(__getfield_missed_count, __setfield_missed_count, __delfield_missed_count, None) def iscontainer(self): return True def containerelements(self): yield ('incoming', self.__field_incoming, None) yield ('outgoing', self.__field_outgoing, None) yield ('missed', self.__field_missed, None) yield ('incoming_count', self.__field_incoming_count, None) yield ('outgoing_count', self.__field_outgoing_count, None) yield ('missed_count', self.__field_missed_count, None) class cl_file(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['cl_type', 'number', 'datetime', 'duration'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(cl_file,self).__init__(**dict) if self.__class__ is cl_file: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(cl_file,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(cl_file,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cl_type=UINT(**{'sizeinbytes': 1}) self.__field_cl_type.readfrombuffer(buf) self.__field_number=STRING(**{'sizeinbytes': 51, 'terminator': 0 }) self.__field_number.readfrombuffer(buf) self.__field_datetime=DateTime2(**{'sizeinbytes': 4}) self.__field_datetime.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 4}).readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cl_type(self): return self.__field_cl_type.getvalue() def __setfield_cl_type(self, value): if isinstance(value,UINT): self.__field_cl_type=value else: self.__field_cl_type=UINT(value,**{'sizeinbytes': 1}) def __delfield_cl_type(self): del self.__field_cl_type cl_type=property(__getfield_cl_type, __setfield_cl_type, __delfield_cl_type, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,STRING): self.__field_number=value else: self.__field_number=STRING(value,**{'sizeinbytes': 51, 'terminator': 0 }) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,DateTime2): self.__field_datetime=value else: self.__field_datetime=DateTime2(value,**{'sizeinbytes': 4}) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def iscontainer(self): return True def containerelements(self): yield ('cl_type', self.__field_cl_type, None) yield ('number', self.__field_number, None) yield ('datetime', self.__field_datetime, None) yield ('duration', self.__field_duration, None) @property def valid(self): global CL_VALID_TYPE return bool(self.cl_type in CL_VALID_TYPE and self.number) class CalIndexEntry(BaseProtogenClass): __fields=['index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(CalIndexEntry,self).__init__(**dict) if self.__class__ is CalIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(CalIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(CalIndexEntry,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0 } dict2.update(kwargs) kwargs=dict2 self.__field_index=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) class CalIndexFile(BaseProtogenClass): __fields=['next_index', 'numofevents', 'numofnotes', 'numofactiveevents', 'events', 'notes', 'activeevents'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(CalIndexFile,self).__init__(**dict) if self.__class__ is CalIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(CalIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(CalIndexFile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_next_index.writetobuffer(buf) try: self.__field__gen_p_samsungschu750_440 except: self.__field__gen_p_samsungschu750_440=DONTCARE(**{'sizeinbytes': 12}) self.__field__gen_p_samsungschu750_440.writetobuffer(buf) self.__field_numofevents.writetobuffer(buf) try: self.__field__gen_p_samsungschu750_442 except: self.__field__gen_p_samsungschu750_442=DONTCARE(**{'sizeinbytes': 6}) self.__field__gen_p_samsungschu750_442.writetobuffer(buf) self.__field_numofnotes.writetobuffer(buf) try: self.__field__gen_p_samsungschu750_444 except: self.__field__gen_p_samsungschu750_444=DONTCARE(**{'sizeinbytes': 6}) self.__field__gen_p_samsungschu750_444.writetobuffer(buf) self.__field_numofactiveevents.writetobuffer(buf) try: self.__field__gen_p_samsungschu750_446 except: self.__field__gen_p_samsungschu750_446=DONTCARE(**{'sizeinbytes': 112}) self.__field__gen_p_samsungschu750_446.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{ 'elementclass': CalIndexEntry, 'length': 103, 'createdefault': True }) self.__field_events.writetobuffer(buf) try: self.__field_notes except: self.__field_notes=LIST(**{ 'elementclass': CalIndexEntry, 'length': 35, 'createdefault': True }) self.__field_notes.writetobuffer(buf) try: self.__field_activeevents except: self.__field_activeevents=LIST(**{ 'elementclass': CalIndexEntry, 'length': 319, 'createdefault': True }) self.__field_activeevents.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_next_index=UINT(**{'sizeinbytes': 2}) self.__field_next_index.readfrombuffer(buf) self.__field__gen_p_samsungschu750_440=DONTCARE(**{'sizeinbytes': 12}) self.__field__gen_p_samsungschu750_440.readfrombuffer(buf) self.__field_numofevents=UINT(**{'sizeinbytes': 2}) self.__field_numofevents.readfrombuffer(buf) self.__field__gen_p_samsungschu750_442=DONTCARE(**{'sizeinbytes': 6}) self.__field__gen_p_samsungschu750_442.readfrombuffer(buf) self.__field_numofnotes=UINT(**{'sizeinbytes': 2}) self.__field_numofnotes.readfrombuffer(buf) self.__field__gen_p_samsungschu750_444=DONTCARE(**{'sizeinbytes': 6}) self.__field__gen_p_samsungschu750_444.readfrombuffer(buf) self.__field_numofactiveevents=UINT(**{'sizeinbytes': 2}) self.__field_numofactiveevents.readfrombuffer(buf) self.__field__gen_p_samsungschu750_446=DONTCARE(**{'sizeinbytes': 112}) self.__field__gen_p_samsungschu750_446.readfrombuffer(buf) self.__field_events=LIST(**{ 'elementclass': CalIndexEntry, 'length': 103, 'createdefault': True }) self.__field_events.readfrombuffer(buf) self.__field_notes=LIST(**{ 'elementclass': CalIndexEntry, 'length': 35, 'createdefault': True }) self.__field_notes.readfrombuffer(buf) self.__field_activeevents=LIST(**{ 'elementclass': CalIndexEntry, 'length': 319, 'createdefault': True }) self.__field_activeevents.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_next_index(self): return self.__field_next_index.getvalue() def __setfield_next_index(self, value): if isinstance(value,UINT): self.__field_next_index=value else: self.__field_next_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_next_index(self): del self.__field_next_index next_index=property(__getfield_next_index, __setfield_next_index, __delfield_next_index, None) def __getfield_numofevents(self): return self.__field_numofevents.getvalue() def __setfield_numofevents(self, value): if isinstance(value,UINT): self.__field_numofevents=value else: self.__field_numofevents=UINT(value,**{'sizeinbytes': 2}) def __delfield_numofevents(self): del self.__field_numofevents numofevents=property(__getfield_numofevents, __setfield_numofevents, __delfield_numofevents, None) def __getfield_numofnotes(self): return self.__field_numofnotes.getvalue() def __setfield_numofnotes(self, value): if isinstance(value,UINT): self.__field_numofnotes=value else: self.__field_numofnotes=UINT(value,**{'sizeinbytes': 2}) def __delfield_numofnotes(self): del self.__field_numofnotes numofnotes=property(__getfield_numofnotes, __setfield_numofnotes, __delfield_numofnotes, None) def __getfield_numofactiveevents(self): return self.__field_numofactiveevents.getvalue() def __setfield_numofactiveevents(self, value): if isinstance(value,UINT): self.__field_numofactiveevents=value else: self.__field_numofactiveevents=UINT(value,**{'sizeinbytes': 2}) def __delfield_numofactiveevents(self): del self.__field_numofactiveevents numofactiveevents=property(__getfield_numofactiveevents, __setfield_numofactiveevents, __delfield_numofactiveevents, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{ 'elementclass': CalIndexEntry, 'length': 103, 'createdefault': True }) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{ 'elementclass': CalIndexEntry, 'length': 103, 'createdefault': True }) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def __getfield_notes(self): try: self.__field_notes except: self.__field_notes=LIST(**{ 'elementclass': CalIndexEntry, 'length': 35, 'createdefault': True }) return self.__field_notes.getvalue() def __setfield_notes(self, value): if isinstance(value,LIST): self.__field_notes=value else: self.__field_notes=LIST(value,**{ 'elementclass': CalIndexEntry, 'length': 35, 'createdefault': True }) def __delfield_notes(self): del self.__field_notes notes=property(__getfield_notes, __setfield_notes, __delfield_notes, None) def __getfield_activeevents(self): try: self.__field_activeevents except: self.__field_activeevents=LIST(**{ 'elementclass': CalIndexEntry, 'length': 319, 'createdefault': True }) return self.__field_activeevents.getvalue() def __setfield_activeevents(self, value): if isinstance(value,LIST): self.__field_activeevents=value else: self.__field_activeevents=LIST(value,**{ 'elementclass': CalIndexEntry, 'length': 319, 'createdefault': True }) def __delfield_activeevents(self): del self.__field_activeevents activeevents=property(__getfield_activeevents, __setfield_activeevents, __delfield_activeevents, None) def iscontainer(self): return True def containerelements(self): yield ('next_index', self.__field_next_index, None) yield ('numofevents', self.__field_numofevents, None) yield ('numofnotes', self.__field_numofnotes, None) yield ('numofactiveevents', self.__field_numofactiveevents, None) yield ('events', self.__field_events, None) yield ('notes', self.__field_notes, None) yield ('activeevents', self.__field_activeevents, None) class CalEntry(BaseProtogenClass): __fields=['titlelen', 'title', 'start', 'start2', 'end', 'repeat', 'alarm', 'alert', 'reminder', 'duration', 'timezone', 'creationtime', 'modifiedtime', 'ringtonelen', 'ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(CalEntry,self).__init__(**dict) if self.__class__ is CalEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(CalEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(CalEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_titlelen.writetobuffer(buf) self.__field_title.writetobuffer(buf) self.__field_start.writetobuffer(buf) try: self.__field_start2 except: self.__field_start2=DateTime2(**{'sizeinbytes': 4, 'default': self.start }) self.__field_start2.writetobuffer(buf) self.__field_end.writetobuffer(buf) try: self.__field__gen_p_samsungschu750_465 except: self.__field__gen_p_samsungschu750_465=DONTCARE(**{'sizeinbytes': 1, 'default': '\x01' }) self.__field__gen_p_samsungschu750_465.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) try: self.__field__gen_p_samsungschu750_467 except: self.__field__gen_p_samsungschu750_467=DONTCARE(**{'sizeinbytes': 1, 'default': '\x03' }) self.__field__gen_p_samsungschu750_467.writetobuffer(buf) self.__field_alarm.writetobuffer(buf) self.__field_alert.writetobuffer(buf) try: self.__field_reminder except: self.__field_reminder=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_reminder.writetobuffer(buf) try: self.__field__gen_p_samsungschu750_471 except: self.__field__gen_p_samsungschu750_471=DONTCARE(**{'sizeinbytes': 5}) self.__field__gen_p_samsungschu750_471.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_timezone.writetobuffer(buf) self.__field_creationtime.writetobuffer(buf) try: self.__field_modifiedtime except: self.__field_modifiedtime=DateTime2(**{'sizeinbytes': 4, 'default': self.creationtime }) self.__field_modifiedtime.writetobuffer(buf) self.__field_ringtonelen.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) try: self.__field__gen_p_samsungschu750_479 except: self.__field__gen_p_samsungschu750_479=DONTCARE(**{'sizeinbytes': 2}) self.__field__gen_p_samsungschu750_479.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_titlelen=UINT(**{'sizeinbytes': 2}) self.__field_titlelen.readfrombuffer(buf) self.__field_title=USTRING(**{ 'sizeinbytes': self.titlelen, 'encoding': ENCODING, 'terminator': None }) self.__field_title.readfrombuffer(buf) self.__field_start=DateTime2(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_start2=DateTime2(**{'sizeinbytes': 4, 'default': self.start }) self.__field_start2.readfrombuffer(buf) self.__field_end=DateTime2(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field__gen_p_samsungschu750_465=DONTCARE(**{'sizeinbytes': 1, 'default': '\x01' }) self.__field__gen_p_samsungschu750_465.readfrombuffer(buf) self.__field_repeat=UINT(**{'sizeinbytes': 1}) self.__field_repeat.readfrombuffer(buf) self.__field__gen_p_samsungschu750_467=DONTCARE(**{'sizeinbytes': 1, 'default': '\x03' }) self.__field__gen_p_samsungschu750_467.readfrombuffer(buf) self.__field_alarm=UINT(**{'sizeinbytes': 1}) self.__field_alarm.readfrombuffer(buf) self.__field_alert=UINT(**{'sizeinbytes': 1}) self.__field_alert.readfrombuffer(buf) self.__field_reminder=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_reminder.readfrombuffer(buf) self.__field__gen_p_samsungschu750_471=DONTCARE(**{'sizeinbytes': 5}) self.__field__gen_p_samsungschu750_471.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_timezone=UINT(**{'sizeinbytes': 1}) self.__field_timezone.readfrombuffer(buf) self.__field_creationtime=DateTime2(**{'sizeinbytes': 4}) self.__field_creationtime.readfrombuffer(buf) self.__field_modifiedtime=DateTime2(**{'sizeinbytes': 4, 'default': self.creationtime }) self.__field_modifiedtime.readfrombuffer(buf) self.__field_ringtonelen=UINT(**{'sizeinbytes': 2}) self.__field_ringtonelen.readfrombuffer(buf) self.__field_ringtone=STRING(**{ 'sizeinbytes': self.ringtonelen, 'terminator': None }) self.__field_ringtone.readfrombuffer(buf) self.__field__gen_p_samsungschu750_479=DONTCARE(**{'sizeinbytes': 2}) self.__field__gen_p_samsungschu750_479.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_titlelen(self): return self.__field_titlelen.getvalue() def __setfield_titlelen(self, value): if isinstance(value,UINT): self.__field_titlelen=value else: self.__field_titlelen=UINT(value,**{'sizeinbytes': 2}) def __delfield_titlelen(self): del self.__field_titlelen titlelen=property(__getfield_titlelen, __setfield_titlelen, __delfield_titlelen, None) def __getfield_title(self): return self.__field_title.getvalue() def __setfield_title(self, value): if isinstance(value,USTRING): self.__field_title=value else: self.__field_title=USTRING(value,**{ 'sizeinbytes': self.titlelen, 'encoding': ENCODING, 'terminator': None }) def __delfield_title(self): del self.__field_title title=property(__getfield_title, __setfield_title, __delfield_title, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,DateTime2): self.__field_start=value else: self.__field_start=DateTime2(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_start2(self): try: self.__field_start2 except: self.__field_start2=DateTime2(**{'sizeinbytes': 4, 'default': self.start }) return self.__field_start2.getvalue() def __setfield_start2(self, value): if isinstance(value,DateTime2): self.__field_start2=value else: self.__field_start2=DateTime2(value,**{'sizeinbytes': 4, 'default': self.start }) def __delfield_start2(self): del self.__field_start2 start2=property(__getfield_start2, __setfield_start2, __delfield_start2, None) def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,DateTime2): self.__field_end=value else: self.__field_end=DateTime2(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,UINT): self.__field_repeat=value else: self.__field_repeat=UINT(value,**{'sizeinbytes': 1}) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_alarm(self): return self.__field_alarm.getvalue() def __setfield_alarm(self, value): if isinstance(value,UINT): self.__field_alarm=value else: self.__field_alarm=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarm(self): del self.__field_alarm alarm=property(__getfield_alarm, __setfield_alarm, __delfield_alarm, None) def __getfield_alert(self): return self.__field_alert.getvalue() def __setfield_alert(self, value): if isinstance(value,UINT): self.__field_alert=value else: self.__field_alert=UINT(value,**{'sizeinbytes': 1}) def __delfield_alert(self): del self.__field_alert alert=property(__getfield_alert, __setfield_alert, __delfield_alert, None) def __getfield_reminder(self): try: self.__field_reminder except: self.__field_reminder=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_reminder.getvalue() def __setfield_reminder(self, value): if isinstance(value,UINT): self.__field_reminder=value else: self.__field_reminder=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_reminder(self): del self.__field_reminder reminder=property(__getfield_reminder, __setfield_reminder, __delfield_reminder, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_timezone(self): return self.__field_timezone.getvalue() def __setfield_timezone(self, value): if isinstance(value,UINT): self.__field_timezone=value else: self.__field_timezone=UINT(value,**{'sizeinbytes': 1}) def __delfield_timezone(self): del self.__field_timezone timezone=property(__getfield_timezone, __setfield_timezone, __delfield_timezone, None) def __getfield_creationtime(self): return self.__field_creationtime.getvalue() def __setfield_creationtime(self, value): if isinstance(value,DateTime2): self.__field_creationtime=value else: self.__field_creationtime=DateTime2(value,**{'sizeinbytes': 4}) def __delfield_creationtime(self): del self.__field_creationtime creationtime=property(__getfield_creationtime, __setfield_creationtime, __delfield_creationtime, None) def __getfield_modifiedtime(self): try: self.__field_modifiedtime except: self.__field_modifiedtime=DateTime2(**{'sizeinbytes': 4, 'default': self.creationtime }) return self.__field_modifiedtime.getvalue() def __setfield_modifiedtime(self, value): if isinstance(value,DateTime2): self.__field_modifiedtime=value else: self.__field_modifiedtime=DateTime2(value,**{'sizeinbytes': 4, 'default': self.creationtime }) def __delfield_modifiedtime(self): del self.__field_modifiedtime modifiedtime=property(__getfield_modifiedtime, __setfield_modifiedtime, __delfield_modifiedtime, None) def __getfield_ringtonelen(self): return self.__field_ringtonelen.getvalue() def __setfield_ringtonelen(self, value): if isinstance(value,UINT): self.__field_ringtonelen=value else: self.__field_ringtonelen=UINT(value,**{'sizeinbytes': 2}) def __delfield_ringtonelen(self): del self.__field_ringtonelen ringtonelen=property(__getfield_ringtonelen, __setfield_ringtonelen, __delfield_ringtonelen, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,STRING): self.__field_ringtone=value else: self.__field_ringtone=STRING(value,**{ 'sizeinbytes': self.ringtonelen, 'terminator': None }) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def iscontainer(self): return True def containerelements(self): yield ('titlelen', self.__field_titlelen, None) yield ('title', self.__field_title, None) yield ('start', self.__field_start, None) yield ('start2', self.__field_start2, None) yield ('end', self.__field_end, None) yield ('repeat', self.__field_repeat, None) yield ('alarm', self.__field_alarm, None) yield ('alert', self.__field_alert, None) yield ('reminder', self.__field_reminder, None) yield ('duration', self.__field_duration, None) yield ('timezone', self.__field_timezone, None) yield ('creationtime', self.__field_creationtime, None) yield ('modifiedtime', self.__field_modifiedtime, None) yield ('ringtonelen', self.__field_ringtonelen, None) yield ('ringtone', self.__field_ringtone, None) class NotePadEntry(BaseProtogenClass): __fields=['textlen', 'text', 'creation', 'creation2', 'modified', 'modified2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(NotePadEntry,self).__init__(**dict) if self.__class__ is NotePadEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(NotePadEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(NotePadEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_textlen.writetobuffer(buf) self.__field_text.writetobuffer(buf) self.__field_creation.writetobuffer(buf) try: self.__field_creation2 except: self.__field_creation2=DateTime2(**{'sizeinbytes': 4, 'default': self.creation }) self.__field_creation2.writetobuffer(buf) try: self.__field__gen_p_samsungschu750_488 except: self.__field__gen_p_samsungschu750_488=DONTCARE(**{'sizeinbytes': 6}) self.__field__gen_p_samsungschu750_488.writetobuffer(buf) try: self.__field__gen_p_samsungschu750_489 except: self.__field__gen_p_samsungschu750_489=DONTCARE(**{'sizeinbytes': 1, 'default': '\x05' }) self.__field__gen_p_samsungschu750_489.writetobuffer(buf) try: self.__field__gen_p_samsungschu750_490 except: self.__field__gen_p_samsungschu750_490=DONTCARE(**{'sizeinbytes': 12}) self.__field__gen_p_samsungschu750_490.writetobuffer(buf) try: self.__field__gen_p_samsungschu750_491 except: self.__field__gen_p_samsungschu750_491=DONTCARE(**{'sizeinbytes': 1, 'default': '\x30' }) self.__field__gen_p_samsungschu750_491.writetobuffer(buf) try: self.__field_modified except: self.__field_modified=DateTime2(**{'sizeinbytes': 4, 'default': self.creation }) self.__field_modified.writetobuffer(buf) try: self.__field_modified2 except: self.__field_modified2=DateTime2(**{'sizeinbytes': 4, 'default': self.modified }) self.__field_modified2.writetobuffer(buf) try: self.__field__gen_p_samsungschu750_494 except: self.__field__gen_p_samsungschu750_494=DONTCARE(**{'sizeinbytes': 4}) self.__field__gen_p_samsungschu750_494.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_textlen=UINT(**{'sizeinbytes': 2}) self.__field_textlen.readfrombuffer(buf) self.__field_text=USTRING(**{ 'terminator': None, 'encoding': ENCODING, 'sizeinbytes': self.textlen }) self.__field_text.readfrombuffer(buf) self.__field_creation=DateTime2(**{'sizeinbytes': 4}) self.__field_creation.readfrombuffer(buf) self.__field_creation2=DateTime2(**{'sizeinbytes': 4, 'default': self.creation }) self.__field_creation2.readfrombuffer(buf) self.__field__gen_p_samsungschu750_488=DONTCARE(**{'sizeinbytes': 6}) self.__field__gen_p_samsungschu750_488.readfrombuffer(buf) self.__field__gen_p_samsungschu750_489=DONTCARE(**{'sizeinbytes': 1, 'default': '\x05' }) self.__field__gen_p_samsungschu750_489.readfrombuffer(buf) self.__field__gen_p_samsungschu750_490=DONTCARE(**{'sizeinbytes': 12}) self.__field__gen_p_samsungschu750_490.readfrombuffer(buf) self.__field__gen_p_samsungschu750_491=DONTCARE(**{'sizeinbytes': 1, 'default': '\x30' }) self.__field__gen_p_samsungschu750_491.readfrombuffer(buf) self.__field_modified=DateTime2(**{'sizeinbytes': 4, 'default': self.creation }) self.__field_modified.readfrombuffer(buf) self.__field_modified2=DateTime2(**{'sizeinbytes': 4, 'default': self.modified }) self.__field_modified2.readfrombuffer(buf) self.__field__gen_p_samsungschu750_494=DONTCARE(**{'sizeinbytes': 4}) self.__field__gen_p_samsungschu750_494.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_textlen(self): return self.__field_textlen.getvalue() def __setfield_textlen(self, value): if isinstance(value,UINT): self.__field_textlen=value else: self.__field_textlen=UINT(value,**{'sizeinbytes': 2}) def __delfield_textlen(self): del self.__field_textlen textlen=property(__getfield_textlen, __setfield_textlen, __delfield_textlen, None) def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,USTRING): self.__field_text=value else: self.__field_text=USTRING(value,**{ 'terminator': None, 'encoding': ENCODING, 'sizeinbytes': self.textlen }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def __getfield_creation(self): return self.__field_creation.getvalue() def __setfield_creation(self, value): if isinstance(value,DateTime2): self.__field_creation=value else: self.__field_creation=DateTime2(value,**{'sizeinbytes': 4}) def __delfield_creation(self): del self.__field_creation creation=property(__getfield_creation, __setfield_creation, __delfield_creation, None) def __getfield_creation2(self): try: self.__field_creation2 except: self.__field_creation2=DateTime2(**{'sizeinbytes': 4, 'default': self.creation }) return self.__field_creation2.getvalue() def __setfield_creation2(self, value): if isinstance(value,DateTime2): self.__field_creation2=value else: self.__field_creation2=DateTime2(value,**{'sizeinbytes': 4, 'default': self.creation }) def __delfield_creation2(self): del self.__field_creation2 creation2=property(__getfield_creation2, __setfield_creation2, __delfield_creation2, None) def __getfield_modified(self): try: self.__field_modified except: self.__field_modified=DateTime2(**{'sizeinbytes': 4, 'default': self.creation }) return self.__field_modified.getvalue() def __setfield_modified(self, value): if isinstance(value,DateTime2): self.__field_modified=value else: self.__field_modified=DateTime2(value,**{'sizeinbytes': 4, 'default': self.creation }) def __delfield_modified(self): del self.__field_modified modified=property(__getfield_modified, __setfield_modified, __delfield_modified, None) def __getfield_modified2(self): try: self.__field_modified2 except: self.__field_modified2=DateTime2(**{'sizeinbytes': 4, 'default': self.modified }) return self.__field_modified2.getvalue() def __setfield_modified2(self, value): if isinstance(value,DateTime2): self.__field_modified2=value else: self.__field_modified2=DateTime2(value,**{'sizeinbytes': 4, 'default': self.modified }) def __delfield_modified2(self): del self.__field_modified2 modified2=property(__getfield_modified2, __setfield_modified2, __delfield_modified2, None) def iscontainer(self): return True def containerelements(self): yield ('textlen', self.__field_textlen, None) yield ('text', self.__field_text, None) yield ('creation', self.__field_creation, None) yield ('creation2', self.__field_creation2, None) yield ('modified', self.__field_modified, None) yield ('modified2', self.__field_modified2, None) class pBOOL(BaseProtogenClass): __fields=['value'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pBOOL,self).__init__(**dict) if self.__class__ is pBOOL: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pBOOL,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pBOOL,kwargs) if len(args): dict2={'sizeinbytes': 'P'} dict2.update(kwargs) kwargs=dict2 self.__field_value=BOOL(*args,**dict2) # Make all P fields that haven't already been constructed try: self.__field_value except: self.__field_value=BOOL() def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self._bufferendoffset=buf.getcurrentoffset() def __getfield_value(self): return self.__field_value.getvalue() def __setfield_value(self, value): if isinstance(value,BOOL): self.__field_value=value else: self.__field_value=BOOL(value,) def __delfield_value(self): del self.__field_value value=property(__getfield_value, __setfield_value, __delfield_value, None) def iscontainer(self): return True def containerelements(self): yield ('value', self.__field_value, None) class sms_header(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['index', 'msg_len', 'callback_len', 'bitmap1', 'bitmap2', 'body_len', 'file_type', 'msg_type', 'enhance_delivery', 'is_txt_msg', 'in_msg', 'sent_msg', 'draft_msg', 'body'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_header,self).__init__(**dict) if self.__class__ is sms_header: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_header,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_header,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 1}).readfrombuffer(buf) self.__field_msg_len=UINT(**{'sizeinbytes': 1}) self.__field_msg_len.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 1}).readfrombuffer(buf) self.__field_callback_len=UINT(**{'sizeinbytes': 1}) self.__field_callback_len.readfrombuffer(buf) self.__field_bitmap1=UINT(**{'sizeinbytes': 1}) self.__field_bitmap1.readfrombuffer(buf) self.__field_bitmap2=UINT(**{'sizeinbytes': 1}) self.__field_bitmap2.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 6}).readfrombuffer(buf) self.__field_body_len=UINT(**{'sizeinbytes': 2}) self.__field_body_len.readfrombuffer(buf) self.__field_file_type=UINT(**{'sizeinbytes': 2}) self.__field_file_type.readfrombuffer(buf) self.__field_msg_type=UINT(**{'sizeinbytes': 1}) self.__field_msg_type.readfrombuffer(buf) self.__field_enhance_delivery=UINT(**{'sizeinbytes': 1}) self.__field_enhance_delivery.readfrombuffer(buf) self.__field_is_txt_msg=pBOOL(**{ 'value': self.file_type==SMS_TXT_TYPE and self.msg_type in SMS_VALID_TYPE }) self.__field_is_txt_msg.readfrombuffer(buf) self.__field_in_msg=pBOOL(**{ 'value': self.msg_type==SMS_TYPE_IN }) self.__field_in_msg.readfrombuffer(buf) self.__field_sent_msg=pBOOL(**{ 'value': self.msg_type==SMS_TYPE_SENT }) self.__field_sent_msg.readfrombuffer(buf) self.__field_draft_msg=pBOOL(**{ 'value': self.msg_type==SMS_TYPE_DRAFT }) self.__field_draft_msg.readfrombuffer(buf) if self.is_txt_msg.value: self.__field_body=sms_body(**{ 'msg_len': self.msg_len, 'has_callback': self.bitmap2 & SMS_FLG2_CALLBACK, 'has_priority': self.bitmap2 & SMS_FLG2_PRIORITY, 'has_1byte': (self.bitmap2 & SMS_FLG2_SOMETHING) or (not self.bitmap2), 'has_1byte2': self.bitmap2 & SMS_FLG2_MSG, 'has_40bytes': self.bitmap1 & SMS_FLG1_HAS40 }) self.__field_body.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_msg_len(self): return self.__field_msg_len.getvalue() def __setfield_msg_len(self, value): if isinstance(value,UINT): self.__field_msg_len=value else: self.__field_msg_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_msg_len(self): del self.__field_msg_len msg_len=property(__getfield_msg_len, __setfield_msg_len, __delfield_msg_len, None) def __getfield_callback_len(self): return self.__field_callback_len.getvalue() def __setfield_callback_len(self, value): if isinstance(value,UINT): self.__field_callback_len=value else: self.__field_callback_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_len(self): del self.__field_callback_len callback_len=property(__getfield_callback_len, __setfield_callback_len, __delfield_callback_len, None) def __getfield_bitmap1(self): return self.__field_bitmap1.getvalue() def __setfield_bitmap1(self, value): if isinstance(value,UINT): self.__field_bitmap1=value else: self.__field_bitmap1=UINT(value,**{'sizeinbytes': 1}) def __delfield_bitmap1(self): del self.__field_bitmap1 bitmap1=property(__getfield_bitmap1, __setfield_bitmap1, __delfield_bitmap1, None) def __getfield_bitmap2(self): return self.__field_bitmap2.getvalue() def __setfield_bitmap2(self, value): if isinstance(value,UINT): self.__field_bitmap2=value else: self.__field_bitmap2=UINT(value,**{'sizeinbytes': 1}) def __delfield_bitmap2(self): del self.__field_bitmap2 bitmap2=property(__getfield_bitmap2, __setfield_bitmap2, __delfield_bitmap2, None) def __getfield_body_len(self): return self.__field_body_len.getvalue() def __setfield_body_len(self, value): if isinstance(value,UINT): self.__field_body_len=value else: self.__field_body_len=UINT(value,**{'sizeinbytes': 2}) def __delfield_body_len(self): del self.__field_body_len body_len=property(__getfield_body_len, __setfield_body_len, __delfield_body_len, None) def __getfield_file_type(self): return self.__field_file_type.getvalue() def __setfield_file_type(self, value): if isinstance(value,UINT): self.__field_file_type=value else: self.__field_file_type=UINT(value,**{'sizeinbytes': 2}) def __delfield_file_type(self): del self.__field_file_type file_type=property(__getfield_file_type, __setfield_file_type, __delfield_file_type, None) def __getfield_msg_type(self): return self.__field_msg_type.getvalue() def __setfield_msg_type(self, value): if isinstance(value,UINT): self.__field_msg_type=value else: self.__field_msg_type=UINT(value,**{'sizeinbytes': 1}) def __delfield_msg_type(self): del self.__field_msg_type msg_type=property(__getfield_msg_type, __setfield_msg_type, __delfield_msg_type, None) def __getfield_enhance_delivery(self): return self.__field_enhance_delivery.getvalue() def __setfield_enhance_delivery(self, value): if isinstance(value,UINT): self.__field_enhance_delivery=value else: self.__field_enhance_delivery=UINT(value,**{'sizeinbytes': 1}) def __delfield_enhance_delivery(self): del self.__field_enhance_delivery enhance_delivery=property(__getfield_enhance_delivery, __setfield_enhance_delivery, __delfield_enhance_delivery, None) def __getfield_is_txt_msg(self): return self.__field_is_txt_msg.getvalue() def __setfield_is_txt_msg(self, value): if isinstance(value,pBOOL): self.__field_is_txt_msg=value else: self.__field_is_txt_msg=pBOOL(value,**{ 'value': self.file_type==SMS_TXT_TYPE and self.msg_type in SMS_VALID_TYPE }) def __delfield_is_txt_msg(self): del self.__field_is_txt_msg is_txt_msg=property(__getfield_is_txt_msg, __setfield_is_txt_msg, __delfield_is_txt_msg, None) def __getfield_in_msg(self): return self.__field_in_msg.getvalue() def __setfield_in_msg(self, value): if isinstance(value,pBOOL): self.__field_in_msg=value else: self.__field_in_msg=pBOOL(value,**{ 'value': self.msg_type==SMS_TYPE_IN }) def __delfield_in_msg(self): del self.__field_in_msg in_msg=property(__getfield_in_msg, __setfield_in_msg, __delfield_in_msg, None) def __getfield_sent_msg(self): return self.__field_sent_msg.getvalue() def __setfield_sent_msg(self, value): if isinstance(value,pBOOL): self.__field_sent_msg=value else: self.__field_sent_msg=pBOOL(value,**{ 'value': self.msg_type==SMS_TYPE_SENT }) def __delfield_sent_msg(self): del self.__field_sent_msg sent_msg=property(__getfield_sent_msg, __setfield_sent_msg, __delfield_sent_msg, None) def __getfield_draft_msg(self): return self.__field_draft_msg.getvalue() def __setfield_draft_msg(self, value): if isinstance(value,pBOOL): self.__field_draft_msg=value else: self.__field_draft_msg=pBOOL(value,**{ 'value': self.msg_type==SMS_TYPE_DRAFT }) def __delfield_draft_msg(self): del self.__field_draft_msg draft_msg=property(__getfield_draft_msg, __setfield_draft_msg, __delfield_draft_msg, None) def __getfield_body(self): return self.__field_body.getvalue() def __setfield_body(self, value): if isinstance(value,sms_body): self.__field_body=value else: self.__field_body=sms_body(value,**{ 'msg_len': self.msg_len, 'has_callback': self.bitmap2 & SMS_FLG2_CALLBACK, 'has_priority': self.bitmap2 & SMS_FLG2_PRIORITY, 'has_1byte': (self.bitmap2 & SMS_FLG2_SOMETHING) or (not self.bitmap2), 'has_1byte2': self.bitmap2 & SMS_FLG2_MSG, 'has_40bytes': self.bitmap1 & SMS_FLG1_HAS40 }) def __delfield_body(self): del self.__field_body body=property(__getfield_body, __setfield_body, __delfield_body, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('msg_len', self.__field_msg_len, None) yield ('callback_len', self.__field_callback_len, None) yield ('bitmap1', self.__field_bitmap1, None) yield ('bitmap2', self.__field_bitmap2, None) yield ('body_len', self.__field_body_len, None) yield ('file_type', self.__field_file_type, None) yield ('msg_type', self.__field_msg_type, None) yield ('enhance_delivery', self.__field_enhance_delivery, None) yield ('is_txt_msg', self.__field_is_txt_msg, None) yield ('in_msg', self.__field_in_msg, None) yield ('sent_msg', self.__field_sent_msg, None) yield ('draft_msg', self.__field_draft_msg, None) if self.is_txt_msg.value: yield ('body', self.__field_body, None) class sms_msg_stat_list(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['status'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_msg_stat_list,self).__init__(**dict) if self.__class__ is sms_msg_stat_list: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_msg_stat_list,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_msg_stat_list,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_status=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def iscontainer(self): return True def containerelements(self): yield ('status', self.__field_status, None) class sms_datetime_list(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['datetime'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_datetime_list,self).__init__(**dict) if self.__class__ is sms_datetime_list: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_datetime_list,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_datetime_list,kwargs) if len(args): dict2={'sizeinbytes': 4} dict2.update(kwargs) kwargs=dict2 self.__field_datetime=DateTime2(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_datetime=DateTime2(**{'sizeinbytes': 4}) self.__field_datetime.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,DateTime2): self.__field_datetime=value else: self.__field_datetime=DateTime2(value,**{'sizeinbytes': 4}) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def iscontainer(self): return True def containerelements(self): yield ('datetime', self.__field_datetime, None) class sms_delivered_datetime(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['datetime'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_delivered_datetime,self).__init__(**dict) if self.__class__ is sms_delivered_datetime: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_delivered_datetime,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_delivered_datetime,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_datetime=LIST(**{ 'elementclass': sms_datetime_list, 'length': 10 }) self.__field_datetime.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 20}).readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,LIST): self.__field_datetime=value else: self.__field_datetime=LIST(value,**{ 'elementclass': sms_datetime_list, 'length': 10 }) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def iscontainer(self): return True def containerelements(self): yield ('datetime', self.__field_datetime, None) class sms_body(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['msg_len', 'has_callback', 'has_priority', 'has_1byte', 'has_1byte2', 'has_40bytes', 'msg', 'msg', 'callback_len', 'callback', 'priority', 'datetime', 'addr_len0', 'addr_len1', 'addr_len2', 'addr_len3', 'addr_len4', 'addr_len5', 'addr_len6', 'addr_len7', 'addr_len8', 'addr_len9', 'addr0', 'addr1', 'addr2', 'addr3', 'addr4', 'addr5', 'addr6', 'addr7', 'addr8', 'addr9', 'msg_stat'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_body,self).__init__(**dict) if self.__class__ is sms_body: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_body,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_body,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_msg_len except: self.__field_msg_len=UINT() try: self.__field_has_callback except: self.__field_has_callback=BOOL(**{ 'default': True }) try: self.__field_has_priority except: self.__field_has_priority=BOOL(**{ 'default': False }) try: self.__field_has_1byte except: self.__field_has_1byte=BOOL(**{ 'default': False }) try: self.__field_has_1byte2 except: self.__field_has_1byte2=BOOL(**{ 'default': True }) try: self.__field_has_40bytes except: self.__field_has_40bytes=BOOL(**{ 'default': False }) try: self.__field_msg except: self.__field_msg=USTRING(**{'default': '' }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) if self.msg_len: DONTCARE(**{'sizeinbytes': 54}).readfrombuffer(buf) self.__field_msg=USTRING(**{ 'sizeinbytes': self.msg_len, 'encoding': ENCODING, 'terminator': None }) self.__field_msg.readfrombuffer(buf) else: DONTCARE(**{'sizeinbytes': 53}).readfrombuffer(buf) if self.has_callback: DONTCARE(**{'sizeinbytes': 4}).readfrombuffer(buf) self.__field_callback_len=UINT(**{'sizeinbytes': 1}) self.__field_callback_len.readfrombuffer(buf) self.__field_callback=STRING(**{ 'sizeinbytes': self.callback_len, 'terminator': None }) self.__field_callback.readfrombuffer(buf) if self.has_priority: self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) if self.has_1byte: DONTCARE(**{'sizeinbytes': 1}).readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 40}).readfrombuffer(buf) self.__field_datetime=DateTime1(**{'sizeinbytes': 4}) self.__field_datetime.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 13}).readfrombuffer(buf) self.__field_addr_len0=UINT(**{'sizeinbytes': 1}) self.__field_addr_len0.readfrombuffer(buf) self.__field_addr_len1=UINT(**{'sizeinbytes': 1}) self.__field_addr_len1.readfrombuffer(buf) self.__field_addr_len2=UINT(**{'sizeinbytes': 1}) self.__field_addr_len2.readfrombuffer(buf) self.__field_addr_len3=UINT(**{'sizeinbytes': 1}) self.__field_addr_len3.readfrombuffer(buf) self.__field_addr_len4=UINT(**{'sizeinbytes': 1}) self.__field_addr_len4.readfrombuffer(buf) self.__field_addr_len5=UINT(**{'sizeinbytes': 1}) self.__field_addr_len5.readfrombuffer(buf) self.__field_addr_len6=UINT(**{'sizeinbytes': 1}) self.__field_addr_len6.readfrombuffer(buf) self.__field_addr_len7=UINT(**{'sizeinbytes': 1}) self.__field_addr_len7.readfrombuffer(buf) self.__field_addr_len8=UINT(**{'sizeinbytes': 1}) self.__field_addr_len8.readfrombuffer(buf) self.__field_addr_len9=UINT(**{'sizeinbytes': 1}) self.__field_addr_len9.readfrombuffer(buf) if self.addr_len0: self.__field_addr0=STRING(**{ 'sizeinbytes': self.addr_len0, 'terminator': None }) self.__field_addr0.readfrombuffer(buf) if self.addr_len1: self.__field_addr1=STRING(**{ 'sizeinbytes': self.addr_len1, 'terminator': None }) self.__field_addr1.readfrombuffer(buf) if self.addr_len2: self.__field_addr2=STRING(**{ 'sizeinbytes': self.addr_len2, 'terminator': None }) self.__field_addr2.readfrombuffer(buf) if self.addr_len3: self.__field_addr3=STRING(**{ 'sizeinbytes': self.addr_len3, 'terminator': None }) self.__field_addr3.readfrombuffer(buf) if self.addr_len4: self.__field_addr4=STRING(**{ 'sizeinbytes': self.addr_len4, 'terminator': None }) self.__field_addr4.readfrombuffer(buf) if self.addr_len5: self.__field_addr5=STRING(**{ 'sizeinbytes': self.addr_len5, 'terminator': None }) self.__field_addr5.readfrombuffer(buf) if self.addr_len6: self.__field_addr6=STRING(**{ 'sizeinbytes': self.addr_len6, 'terminator': None }) self.__field_addr6.readfrombuffer(buf) if self.addr_len7: self.__field_addr7=STRING(**{ 'sizeinbytes': self.addr_len7, 'terminator': None }) self.__field_addr7.readfrombuffer(buf) if self.addr_len8: self.__field_addr8=STRING(**{ 'sizeinbytes': self.addr_len8, 'terminator': None }) self.__field_addr8.readfrombuffer(buf) if self.addr_len9: self.__field_addr9=STRING(**{ 'sizeinbytes': self.addr_len9, 'terminator': None }) self.__field_addr9.readfrombuffer(buf) if not self.has_1byte and self.has_1byte2: DONTCARE(**{'sizeinbytes': 1}).readfrombuffer(buf) if self.has_1byte2: DONTCARE(**{'sizeinbytes': 1}).readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 81}).readfrombuffer(buf) if self.has_40bytes: DONTCARE(**{'sizeinbytes': 40}).readfrombuffer(buf) self.__field_msg_stat=LIST(**{ 'elementclass': sms_msg_stat_list, 'length': 10 }) self.__field_msg_stat.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg_len(self): return self.__field_msg_len.getvalue() def __setfield_msg_len(self, value): if isinstance(value,UINT): self.__field_msg_len=value else: self.__field_msg_len=UINT(value,) def __delfield_msg_len(self): del self.__field_msg_len msg_len=property(__getfield_msg_len, __setfield_msg_len, __delfield_msg_len, None) def __getfield_has_callback(self): try: self.__field_has_callback except: self.__field_has_callback=BOOL(**{ 'default': True }) return self.__field_has_callback.getvalue() def __setfield_has_callback(self, value): if isinstance(value,BOOL): self.__field_has_callback=value else: self.__field_has_callback=BOOL(value,**{ 'default': True }) def __delfield_has_callback(self): del self.__field_has_callback has_callback=property(__getfield_has_callback, __setfield_has_callback, __delfield_has_callback, None) def __getfield_has_priority(self): try: self.__field_has_priority except: self.__field_has_priority=BOOL(**{ 'default': False }) return self.__field_has_priority.getvalue() def __setfield_has_priority(self, value): if isinstance(value,BOOL): self.__field_has_priority=value else: self.__field_has_priority=BOOL(value,**{ 'default': False }) def __delfield_has_priority(self): del self.__field_has_priority has_priority=property(__getfield_has_priority, __setfield_has_priority, __delfield_has_priority, None) def __getfield_has_1byte(self): try: self.__field_has_1byte except: self.__field_has_1byte=BOOL(**{ 'default': False }) return self.__field_has_1byte.getvalue() def __setfield_has_1byte(self, value): if isinstance(value,BOOL): self.__field_has_1byte=value else: self.__field_has_1byte=BOOL(value,**{ 'default': False }) def __delfield_has_1byte(self): del self.__field_has_1byte has_1byte=property(__getfield_has_1byte, __setfield_has_1byte, __delfield_has_1byte, None) def __getfield_has_1byte2(self): try: self.__field_has_1byte2 except: self.__field_has_1byte2=BOOL(**{ 'default': True }) return self.__field_has_1byte2.getvalue() def __setfield_has_1byte2(self, value): if isinstance(value,BOOL): self.__field_has_1byte2=value else: self.__field_has_1byte2=BOOL(value,**{ 'default': True }) def __delfield_has_1byte2(self): del self.__field_has_1byte2 has_1byte2=property(__getfield_has_1byte2, __setfield_has_1byte2, __delfield_has_1byte2, None) def __getfield_has_40bytes(self): try: self.__field_has_40bytes except: self.__field_has_40bytes=BOOL(**{ 'default': False }) return self.__field_has_40bytes.getvalue() def __setfield_has_40bytes(self, value): if isinstance(value,BOOL): self.__field_has_40bytes=value else: self.__field_has_40bytes=BOOL(value,**{ 'default': False }) def __delfield_has_40bytes(self): del self.__field_has_40bytes has_40bytes=property(__getfield_has_40bytes, __setfield_has_40bytes, __delfield_has_40bytes, None) def __getfield_msg(self): return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{ 'sizeinbytes': self.msg_len, 'encoding': ENCODING, 'terminator': None }) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=USTRING(**{'default': '' }) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{'default': '' }) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def __getfield_callback_len(self): return self.__field_callback_len.getvalue() def __setfield_callback_len(self, value): if isinstance(value,UINT): self.__field_callback_len=value else: self.__field_callback_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_len(self): del self.__field_callback_len callback_len=property(__getfield_callback_len, __setfield_callback_len, __delfield_callback_len, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,STRING): self.__field_callback=value else: self.__field_callback=STRING(value,**{ 'sizeinbytes': self.callback_len, 'terminator': None }) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,DateTime1): self.__field_datetime=value else: self.__field_datetime=DateTime1(value,**{'sizeinbytes': 4}) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def __getfield_addr_len0(self): return self.__field_addr_len0.getvalue() def __setfield_addr_len0(self, value): if isinstance(value,UINT): self.__field_addr_len0=value else: self.__field_addr_len0=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len0(self): del self.__field_addr_len0 addr_len0=property(__getfield_addr_len0, __setfield_addr_len0, __delfield_addr_len0, None) def __getfield_addr_len1(self): return self.__field_addr_len1.getvalue() def __setfield_addr_len1(self, value): if isinstance(value,UINT): self.__field_addr_len1=value else: self.__field_addr_len1=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len1(self): del self.__field_addr_len1 addr_len1=property(__getfield_addr_len1, __setfield_addr_len1, __delfield_addr_len1, None) def __getfield_addr_len2(self): return self.__field_addr_len2.getvalue() def __setfield_addr_len2(self, value): if isinstance(value,UINT): self.__field_addr_len2=value else: self.__field_addr_len2=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len2(self): del self.__field_addr_len2 addr_len2=property(__getfield_addr_len2, __setfield_addr_len2, __delfield_addr_len2, None) def __getfield_addr_len3(self): return self.__field_addr_len3.getvalue() def __setfield_addr_len3(self, value): if isinstance(value,UINT): self.__field_addr_len3=value else: self.__field_addr_len3=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len3(self): del self.__field_addr_len3 addr_len3=property(__getfield_addr_len3, __setfield_addr_len3, __delfield_addr_len3, None) def __getfield_addr_len4(self): return self.__field_addr_len4.getvalue() def __setfield_addr_len4(self, value): if isinstance(value,UINT): self.__field_addr_len4=value else: self.__field_addr_len4=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len4(self): del self.__field_addr_len4 addr_len4=property(__getfield_addr_len4, __setfield_addr_len4, __delfield_addr_len4, None) def __getfield_addr_len5(self): return self.__field_addr_len5.getvalue() def __setfield_addr_len5(self, value): if isinstance(value,UINT): self.__field_addr_len5=value else: self.__field_addr_len5=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len5(self): del self.__field_addr_len5 addr_len5=property(__getfield_addr_len5, __setfield_addr_len5, __delfield_addr_len5, None) def __getfield_addr_len6(self): return self.__field_addr_len6.getvalue() def __setfield_addr_len6(self, value): if isinstance(value,UINT): self.__field_addr_len6=value else: self.__field_addr_len6=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len6(self): del self.__field_addr_len6 addr_len6=property(__getfield_addr_len6, __setfield_addr_len6, __delfield_addr_len6, None) def __getfield_addr_len7(self): return self.__field_addr_len7.getvalue() def __setfield_addr_len7(self, value): if isinstance(value,UINT): self.__field_addr_len7=value else: self.__field_addr_len7=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len7(self): del self.__field_addr_len7 addr_len7=property(__getfield_addr_len7, __setfield_addr_len7, __delfield_addr_len7, None) def __getfield_addr_len8(self): return self.__field_addr_len8.getvalue() def __setfield_addr_len8(self, value): if isinstance(value,UINT): self.__field_addr_len8=value else: self.__field_addr_len8=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len8(self): del self.__field_addr_len8 addr_len8=property(__getfield_addr_len8, __setfield_addr_len8, __delfield_addr_len8, None) def __getfield_addr_len9(self): return self.__field_addr_len9.getvalue() def __setfield_addr_len9(self, value): if isinstance(value,UINT): self.__field_addr_len9=value else: self.__field_addr_len9=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len9(self): del self.__field_addr_len9 addr_len9=property(__getfield_addr_len9, __setfield_addr_len9, __delfield_addr_len9, None) def __getfield_addr0(self): return self.__field_addr0.getvalue() def __setfield_addr0(self, value): if isinstance(value,STRING): self.__field_addr0=value else: self.__field_addr0=STRING(value,**{ 'sizeinbytes': self.addr_len0, 'terminator': None }) def __delfield_addr0(self): del self.__field_addr0 addr0=property(__getfield_addr0, __setfield_addr0, __delfield_addr0, None) def __getfield_addr1(self): return self.__field_addr1.getvalue() def __setfield_addr1(self, value): if isinstance(value,STRING): self.__field_addr1=value else: self.__field_addr1=STRING(value,**{ 'sizeinbytes': self.addr_len1, 'terminator': None }) def __delfield_addr1(self): del self.__field_addr1 addr1=property(__getfield_addr1, __setfield_addr1, __delfield_addr1, None) def __getfield_addr2(self): return self.__field_addr2.getvalue() def __setfield_addr2(self, value): if isinstance(value,STRING): self.__field_addr2=value else: self.__field_addr2=STRING(value,**{ 'sizeinbytes': self.addr_len2, 'terminator': None }) def __delfield_addr2(self): del self.__field_addr2 addr2=property(__getfield_addr2, __setfield_addr2, __delfield_addr2, None) def __getfield_addr3(self): return self.__field_addr3.getvalue() def __setfield_addr3(self, value): if isinstance(value,STRING): self.__field_addr3=value else: self.__field_addr3=STRING(value,**{ 'sizeinbytes': self.addr_len3, 'terminator': None }) def __delfield_addr3(self): del self.__field_addr3 addr3=property(__getfield_addr3, __setfield_addr3, __delfield_addr3, None) def __getfield_addr4(self): return self.__field_addr4.getvalue() def __setfield_addr4(self, value): if isinstance(value,STRING): self.__field_addr4=value else: self.__field_addr4=STRING(value,**{ 'sizeinbytes': self.addr_len4, 'terminator': None }) def __delfield_addr4(self): del self.__field_addr4 addr4=property(__getfield_addr4, __setfield_addr4, __delfield_addr4, None) def __getfield_addr5(self): return self.__field_addr5.getvalue() def __setfield_addr5(self, value): if isinstance(value,STRING): self.__field_addr5=value else: self.__field_addr5=STRING(value,**{ 'sizeinbytes': self.addr_len5, 'terminator': None }) def __delfield_addr5(self): del self.__field_addr5 addr5=property(__getfield_addr5, __setfield_addr5, __delfield_addr5, None) def __getfield_addr6(self): return self.__field_addr6.getvalue() def __setfield_addr6(self, value): if isinstance(value,STRING): self.__field_addr6=value else: self.__field_addr6=STRING(value,**{ 'sizeinbytes': self.addr_len6, 'terminator': None }) def __delfield_addr6(self): del self.__field_addr6 addr6=property(__getfield_addr6, __setfield_addr6, __delfield_addr6, None) def __getfield_addr7(self): return self.__field_addr7.getvalue() def __setfield_addr7(self, value): if isinstance(value,STRING): self.__field_addr7=value else: self.__field_addr7=STRING(value,**{ 'sizeinbytes': self.addr_len7, 'terminator': None }) def __delfield_addr7(self): del self.__field_addr7 addr7=property(__getfield_addr7, __setfield_addr7, __delfield_addr7, None) def __getfield_addr8(self): return self.__field_addr8.getvalue() def __setfield_addr8(self, value): if isinstance(value,STRING): self.__field_addr8=value else: self.__field_addr8=STRING(value,**{ 'sizeinbytes': self.addr_len8, 'terminator': None }) def __delfield_addr8(self): del self.__field_addr8 addr8=property(__getfield_addr8, __setfield_addr8, __delfield_addr8, None) def __getfield_addr9(self): return self.__field_addr9.getvalue() def __setfield_addr9(self, value): if isinstance(value,STRING): self.__field_addr9=value else: self.__field_addr9=STRING(value,**{ 'sizeinbytes': self.addr_len9, 'terminator': None }) def __delfield_addr9(self): del self.__field_addr9 addr9=property(__getfield_addr9, __setfield_addr9, __delfield_addr9, None) def __getfield_msg_stat(self): return self.__field_msg_stat.getvalue() def __setfield_msg_stat(self, value): if isinstance(value,LIST): self.__field_msg_stat=value else: self.__field_msg_stat=LIST(value,**{ 'elementclass': sms_msg_stat_list, 'length': 10 }) def __delfield_msg_stat(self): del self.__field_msg_stat msg_stat=property(__getfield_msg_stat, __setfield_msg_stat, __delfield_msg_stat, None) def iscontainer(self): return True def containerelements(self): yield ('msg_len', self.__field_msg_len, None) yield ('has_callback', self.__field_has_callback, None) yield ('has_priority', self.__field_has_priority, None) yield ('has_1byte', self.__field_has_1byte, None) yield ('has_1byte2', self.__field_has_1byte2, None) yield ('has_40bytes', self.__field_has_40bytes, None) if self.msg_len: yield ('msg', self.__field_msg, None) else: yield ('msg', self.__field_msg, None) if self.has_callback: yield ('callback_len', self.__field_callback_len, None) yield ('callback', self.__field_callback, None) if self.has_priority: yield ('priority', self.__field_priority, None) if self.has_1byte: pass yield ('datetime', self.__field_datetime, None) yield ('addr_len0', self.__field_addr_len0, None) yield ('addr_len1', self.__field_addr_len1, None) yield ('addr_len2', self.__field_addr_len2, None) yield ('addr_len3', self.__field_addr_len3, None) yield ('addr_len4', self.__field_addr_len4, None) yield ('addr_len5', self.__field_addr_len5, None) yield ('addr_len6', self.__field_addr_len6, None) yield ('addr_len7', self.__field_addr_len7, None) yield ('addr_len8', self.__field_addr_len8, None) yield ('addr_len9', self.__field_addr_len9, None) if self.addr_len0: yield ('addr0', self.__field_addr0, None) if self.addr_len1: yield ('addr1', self.__field_addr1, None) if self.addr_len2: yield ('addr2', self.__field_addr2, None) if self.addr_len3: yield ('addr3', self.__field_addr3, None) if self.addr_len4: yield ('addr4', self.__field_addr4, None) if self.addr_len5: yield ('addr5', self.__field_addr5, None) if self.addr_len6: yield ('addr6', self.__field_addr6, None) if self.addr_len7: yield ('addr7', self.__field_addr7, None) if self.addr_len8: yield ('addr8', self.__field_addr8, None) if self.addr_len9: yield ('addr9', self.__field_addr9, None) if not self.has_1byte and self.has_1byte2: pass if self.has_1byte2: pass if self.has_40bytes: pass yield ('msg_stat', self.__field_msg_stat, None) bitpim-1.0.7+dfsg1/src/phones/com_sanyo7300.py0000644001616600161660000000244610232320421017100 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_sanyo7300.py 2321 2005-04-23 01:12:49Z sawecw $ """Talk to the Sanyo SCP-7300 (RL2000) cell phone""" # my modules import common import p_sanyo7300 import com_brew import com_phone import com_sanyo import com_sanyomedia import com_sanyonewer import prototypes class Phone(com_sanyonewer.Phone): "Talk to the Sanyo SCP-7300 cell phone" desc="SCP-7300" FIRST_MEDIA_DIRECTORY=2 LAST_MEDIA_DIRECTORY=3 imagelocations=( # offset, directory #, indexflag, type, maximumentries ) protocolclass=p_sanyo7300 serialsname='scp7300' calendar_defaultringtone=4 def __init__(self, logtarget, commport): com_sanyonewer.Phone.__init__(self, logtarget, commport) self.mode=self.MODENONE class Profile(com_sanyonewer.Profile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='SANYO' phone_model='SCP-7300/US' WALLPAPER_WIDTH=132 WALLPAPER_HEIGHT=176 OVERSIZE_PERCENTAGE=100 def __init__(self): com_sanyonewer.Profile.__init__(self) bitpim-1.0.7+dfsg1/src/phones/com_sanyo7400.py0000644001616600161660000000473110337006723017114 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_sanyo7400.py 2632 2005-11-17 04:57:55Z sawecw $ """Talk to the Sanyo MM-7400 cell phone""" # my modules import common import p_sanyo7400 import com_brew import com_phone import com_sanyo import com_sanyomedia import com_sanyonewer import prototypes numbertypetab=( 'cell', 'home', 'office', 'pager', 'fax', 'data', 'none' ) class Phone(com_sanyonewer.Phone): "Talk to the Sanyo MM-7400 cell phone" desc="MM-7400" protocolclass=p_sanyo7400 serialsname='mm7400' FIRST_MEDIA_DIRECTORY=1 LAST_MEDIA_DIRECTORY=3 imagelocations=( # offset, directory #, indexflag, type, maximumentries ) builtinringtones=( 'None', 'Vibrate', 'Ringer & Voice', '', '', '', '', '', '', 'Tone 1', 'Tone 2', 'Tone 3', 'Tone 4', 'Tone 5', 'Tone 6', 'Tone 7', 'Tone 8', '', '', '', '', '', '', '', '', '', '', '', '', 'Tschaik.Swanlake', 'Satie Gymnop.#1', 'Hungarian Dance', 'Beethoven Sym.5', 'Greensleeves', 'Foster Ky. Home', 'The Moment', 'Asian Jingle', 'Disco') calendar_defaultringtone=0 calendar_defaultcaringtone=0 def __init__(self, logtarget, commport): com_sanyonewer.Phone.__init__(self, logtarget, commport) self.mode=self.MODENONE self.numbertypetab=numbertypetab class Profile(com_sanyonewer.Profile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='SANYO' phone_model='SCP-7400/US' WALLPAPER_WIDTH=176 WALLPAPER_HEIGHT=220 _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), ('ringtone', 'write', 'MERGE'), ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ) def __init__(self): com_sanyonewer.Profile.__init__(self) self.numbertypetab=numbertypetab bitpim-1.0.7+dfsg1/src/phones/com_audiovoxcdm8900.py0000644001616600161660000004164710414066244020322 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_audiovoxcdm8900.py 3037 2006-04-03 00:30:28Z rogerb $ """Communicate with the Audiovox CDM 8900 cell phone""" # standard modules import sha import re # our modules import common import com_phone import com_brew import prototypes import p_audiovoxcdm8900 class Phone(com_phone.Phone, com_brew.BrewProtocol): "Talk to Audiovox CDM 8900 cell phone" desc="Audiovox CDM8900" protocolclass=p_audiovoxcdm8900 serialsname='audiovoxcdm8900' pbterminator="~" # packet terminator def __init__(self, logtarget, commport): "Calls all the constructors and sets initial modes" com_phone.Phone.__init__(self, logtarget, commport) com_brew.BrewProtocol.__init__(self) self.log("Attempting to contact phone") self.mode=self.MODENONE def getfundamentals(self, results): """Gets information fundamental to interopating with the phone and UI. Currently this is: - 'uniqueserial' a unique serial number representing the phone - 'groups' the phonebook groups - 'wallpaper-index' map index numbers to names - 'ringtone-index' map index numbers to ringtone names This method is called before we read the phonebook data or before we write phonebook data. """ # use a hash of ESN and other stuff (being paranoid) self.log("Retrieving fundamental phone information") self.setmode(self.MODEBREW) self.log("Phone serial number") results['uniqueserial']=sha.new(self.getfilecontents("nvm/$SYS.ESN")).hexdigest() # now read groups self.log("Reading group information") groups={} for i in range(self.protocolclass._NUMGROUPS): req=self.protocolclass.readgroupentryrequest() req.number=i res=self.sendpbcommand(req, self.protocolclass.readgroupentryresponse) if res.number==self.protocolclass._ALLGROUP: continue # ignore the "All" group if len(res.name)==0: continue # must be non-blank name groups[i]={'name': res.name} results['groups']=groups self.log("Fundamentals retrieved") return results def getcalendar(self, result): raise NotImplementedError() def getwallpapers(self, result): raise NotImplementedError() def getringtones(self, result): raise NotImplementedError() def getphonebook(self, result): """Reads the phonebook data. The L{getfundamentals} information will already be in result.""" pbook={} req=self.protocolclass.readpbslotsrequest() res=self.sendpbcommand(req, self.protocolclass.readpbslotsresponse) slots=[x for x in range(len(res.present)) if ord(res.present[x])] numentries=len(slots) for i in range(numentries): req=self.protocolclass.readpbentryrequest() req.slotnumber=slots[i] res=self.sendpbcommand(req, self.protocolclass.readpbentryresponse) self.log("Read entry "+`i`+" - "+res.entry.name) self.progress(i, numentries, res.entry.name) entry=self.extractphonebookentry(slots[i], res.entry, result) pbook[i]=entry self.progress(i, numentries, res.entry.name) self.progress(numentries, numentries, "Phone book read completed") result['phonebook']=pbook for i in range(0x1e): req=self.protocolclass.dunnorequest() req.which=i self.sendpbcommand(req, self.protocolclass.dunnoresponse) return pbook def extractphonebookentry(self, slotnumber, entry, result): """Return a phonebook entry in BitPim format. This is called from getphonebook.""" res={} # serials res['serials']=[ {'sourcetype': self.serialsname, 'slot': slotnumber, 'sourceuniqueid': result['uniqueserial']} ] # numbers numbers=[] for t, v in ( ('cell', entry.mobile), ('home', entry.home), ('office', entry.office), ('pager', entry.pager), ('fax', entry.fax) ): if len(v)==0: continue numbers.append( {'number': v, 'type': t} ) if len(numbers): res['numbers']=numbers # name if len(entry.name): # yes, the audiovox can have a blank name! res['names']=[{'full': entry.name}] # emails (we treat wireless as email addr) emails=[] if len(entry.email): emails.append({'email': entry.email}) if len(entry.wireless): emails.append({'email': entry.wireless}) if len(emails): res['emails']=emails # memo if len(entry.memo): res['memos']=[{'memo': entry.memo}] # secret if entry.secret: res['flags']=[{'secret': True}] # group if entry.group in result['groups']: group=result['groups'][entry.group]['name'] if group!="Etc.": # this is the "bucket" group on the phone, which we treat as no group at all res['categories']=[{'category': group}] # media rt=[] if entry.ringtone!=0xffff: rt.append({'ringtone': 'avox '+`entry.ringtone`, 'use': 'call'}) if entry.msgringtone!=0xffff: rt.append({'ringtone': 'avox '+`entry.msgringtone`, 'use': 'message'}) if len(rt): res['ringtones']=rt if entry.wallpaper!=0xffff: res['wallpapers']=[{'wallpaper': 'avox '+`entry.wallpaper`, 'use': 'call'}] return res def makephonebookentry(self, fields): e=self.protocolclass.pbentry() # some defaults e.secret=0 e.previous=0xffff e.next=0xffff e.ringtone=0xffff e.msgringtone=0xffff e.wallpaper=0xffff for f in fields: setattr(e, f, fields[f]) if e.group==0: raise Exception("Data error: The group cannot be zero or the phone crashes") return e def savephonebook(self, data): self.log("Saving group information") for gid in range(1, self.protocolclass._NUMGROUPS): # do not save group 0 - All name=data['groups'].get(gid, {'name': ''})['name'] req=self.protocolclass.writegroupentryrequest() req.number=gid req.anothernumber=gid req.name=name req.nummembers=data['groups'].get(gid, {'members': 0})['members'] self.log("Group #%d %s - %d members" % (gid, `name`, req.nummembers)) self.sendpbcommand(req, self.protocolclass.writegroupentryresponse) self.log("New phonebook\n"+common.prettyprintdict(data['phonebook'])) # in theory we should offline the phone and wait two seconds first ... pb=data['phonebook'] keys=pb.keys() keys.sort() keys=keys[:self.protocolclass._NUMSLOTS] # work out the bitmap. slots=[] for i in range(self.protocolclass._NUMSLOTS): if i not in keys: slots.append(0) continue bmp=0 e=pb[i] if len(e['mobile']): bmp|=1 if len(e['home']): bmp|=2 if len(e['office']): bmp|=4 if len(e['pager']): bmp|=8 if len(e['fax']): bmp|=16 if len(e['email']): bmp|=32 if len(e['wireless']): bmp|=64 slots.append(bmp) slots="".join([chr(x) for x in slots]) req=self.protocolclass.writepbslotsrequest() req.present=slots self.sendpbcommand(req, self.protocolclass.writepbslotsresponse) # now write out each slot for i in range(len(keys)): slot=keys[i] req=self.protocolclass.writepbentryrequest() req.slotnumber=slot req.entry=self.makephonebookentry(pb[slot]) self.log('Writing entry '+`slot`+" - "+req.entry.name) self.progress(i, len(keys), "Writing "+req.entry.name) self.sendpbcommand(req, self.protocolclass.writepbentryresponse) self.progress(len(keys)+1, len(keys)+1, "Phone book write completed - phone will be rebooted") data['rebootphone']=True return data def sendpbcommand(self, request, responseclass): self.setmode(self.MODEBREW) buffer=prototypes.buffer() request.writetobuffer(buffer, logtitle="audiovox cdm8900 phonebook request") data=buffer.getvalue() data=common.pppescape(data+common.crcs(data))+common.pppterminator first=data[0] try: data=self.comm.writethenreaduntil(data, False, common.pppterminator, logreaduntilsuccess=False) except com_phone.modeignoreerrortypes: self.mode=self.MODENONE self.raisecommsdnaexception("manipulating the phonebook") self.comm.success=True origdata=data # sometimes there is junk at the begining, eg if the user # turned off the phone and back on again. So if there is more # than one 7e in the escaped data we should start after the # second to last one d=data.rfind(common.pppterminator,0,-1) if d>=0: self.log("Multiple PB packets in data - taking last one starting at "+`d+1`) self.logdata("Original pb data", origdata, None) data=data[d+1:] # turn it back to normal data=common.pppunescape(data) # sometimes there is other crap at the begining d=data.find(first) if d>0: self.log("Junk at begining of pb packet, data at "+`d`) self.logdata("Original pb data", origdata, None) self.logdata("Working on pb data", data, None) data=data[d:] # take off crc and terminator crc=data[-3:-1] data=data[:-3] if common.crcs(data)!=crc: self.logdata("Original pb data", origdata, None) self.logdata("Working on pb data", data, None) raise common.CommsDataCorruption("Audiovox phonebook packet failed CRC check", self.desc) # parse data buffer=prototypes.buffer(data) res=responseclass() res.readfrombuffer(buffer, logtitle="Audiovox phonebook response") return res class Profile(com_phone.Profile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname WALLPAPER_WIDTH=128 WALLPAPER_HEIGHT=145 WALLPAPER_CONVERT_FORMAT="jpg" MAX_WALLPAPER_BASENAME_LENGTH=16 WALLPAPER_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789 ." MAX_RINGTONE_BASENAME_LENGTH=16 RINGTONE_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789 ." # which usb ids correspond to us usbids=( (0x106c, 0x2101, 1), # VID=Curitel, PID=Audiovox CDM 8900, internal modem interface ) # which device classes we are. deviceclasses=("modem",) # what types of syncing we support _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('phonebook', 'write', 'OVERWRITE'), # phonebook overwrite only ) def _getgroup(self, name, groups): for key in groups: if groups[key]['name']==name: return key,groups[key] return None,None def normalisegroups(self, helper, data): "Assigns groups based on category data" keys=data['groups'].keys() keys.sort() pad=[data['groups'][k]['name'] for k in keys if k] # ignore key 0 - All groups=helper.getmostpopularcategories(self.protocolclass._NUMGROUPS, data['phonebook'], ["All", "Business", "Personal", "Etc."], self.protocolclass._MAXGROUPLEN, pad) # alpha sort groups.sort() # newgroups newgroups={} # put in No group newgroups[0]={'name': 'All', 'members': 0} # populate for name in groups: # existing entries remain unchanged if name=="All": continue key,value=self._getgroup(name, data['groups']) if key is not None and key!=0: newgroups[key]=value newgroups[key]['members']=0 # new entries get whatever numbers are free for name in groups: key,value=self._getgroup(name, newgroups) if key is None: for key in range(1,10000): if key not in newgroups: newgroups[key]={'name': name, 'members': 0} break # yay, done data['groups']=newgroups def convertphonebooktophone(self, helper, data): """Converts the data to what will be used by the phone @param data: contains the dict returned by getfundamentals as well as where the results go""" self.normalisegroups(helper, data) results={} # find which entries are already known to this phone pb=data['phonebook'] # decorate list with (slot, pbkey) tuples slots=[ (helper.getserial(pb[pbentry].get("serials", []), self.serialsname, data['uniqueserial'], "slot", None), pbentry) for pbentry in pb] slots.sort() # numeric order # make two lists - one contains known slots, one doesn't newones=[(pbentry,slot) for slot,pbentry in slots if slot is None] existing=[(pbentry,slot) for slot,pbentry in slots if slot is not None] for pbentry,slot in newones+existing: if len(results)==self.protocolclass._NUMSLOTS: break try: e={} # entry out entry=data['phonebook'][pbentry] e['mobile']=self.phonize(helper.getnumber(entry.get('numbers', []), 'cell')) e['home']=self.phonize(helper.getnumber(entry.get('numbers', []), 'home')) e['office']=self.phonize(helper.getnumber(entry.get('numbers', []), 'office')) e['pager']=self.phonize(helper.getnumber(entry.get('numbers', []), 'pager')) e['fax']=self.phonize(helper.getnumber(entry.get('numbers', []), 'fax')) emails=helper.getemails(entry.get('emails', []), 0, 2, self.protocolclass._MAXEMAILLEN) e['email']="" e['wireless']="" if len(emails)>=1: e['email']=emails[0] if len(emails)>=2: e['wireless']=emails[1] # must be at least one number or email if max([len(e[field]) for field in e])==0: # ::TODO:: log that we are ignoring this entry continue e['name']=helper.getfullname(entry.get('names', [ {'full': ''}]), 1, 1, self.protocolclass._MAXNAMELEN)[0] e['memo']=helper.getmemos(entry.get('memos', [{'memo': ''}]), 1,1, self.protocolclass._MAXMEMOLEN)[0] rt=helper.getringtone(entry.get('ringtones', []), 'call', "") if rt.startswith("avox "): e['ringtone']=int(rt[5:]) rt=helper.getringtone(entry.get('ringtones', []), 'message', "") if rt.startswith("avox "): e['msgringtone']=int(rt[5:]) wp=helper.getwallpaper(entry.get('wallpapers', []), 'call', "") if wp.startswith("avox "): e['wallpaper']=int(wp[5:]) e['secret']=helper.getflag(entry.get('flags',[]), 'secret', False) # deal with group group=helper.getcategory(entry.get('categories', [{'category': 'Etc.'}]),1,1,self.protocolclass._MAXGROUPLEN)[0] gid,_=self._getgroup(group, data['groups']) if gid is None or gid==0: gid,_=self._getgroup("Etc.", data['groups']) assert gid!=0 e['group']=gid data['groups'][gid]['members']+=1 # find the right slot if slot is None or slot<0 or slot>=self.protocolclass._NUMSLOTS or slot in results: for i in range(100000): if i not in results: slot=i break results[slot]=e except helper.ConversionFailed: continue data['phonebook']=results return data def phonize(self, str): """Convert the phone number into something the phone understands All digits, P, T, *, # are kept, everything else is removed. In theory the phone can store a dash in the phonebook, but that is not normal.""" return re.sub("[^0-9PT#*]", "", str)[:self.protocolclass._MAXPHONENUMBERLEN] bitpim-1.0.7+dfsg1/src/phones/com_sanyo7500.py0000644001616600161660000000573410760174676017136 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_sanyo7500.py 4598 2008-02-24 04:59:42Z sawecw $ """Talk to the Sanyo MM-7500 cell phone""" # standard modules import re import time import sha # my modules import common import p_brew import p_sanyo8300 import p_sanyo4930 import p_sanyo7500 import com_brew import com_phone import com_sanyo import com_sanyomedia import com_sanyonewer import com_sanyo3100 import prototypes import bpcalendar numbertypetab=( 'cell', 'home', 'office', 'pager', 'fax', 'data', 'none' ) class Phone(com_sanyo3100.Phone): "Talk to the Sanyo MM-7500 cell phone" desc="MM-7500" FIRST_MEDIA_DIRECTORY=1 LAST_MEDIA_DIRECTORY=3 imagelocations=( # offset, directory #, indexflag, type, maximumentries ) protocolclass=p_sanyo7500 serialsname='mm7500' builtinringtones=( 'None', 'Vibrate', 'Ringer & Voice', '', '', '', '', '', '', 'Tone 1', 'Tone 2', 'Tone 3', 'Tone 4', 'Tone 5', 'Tone 6', 'Tone 7', 'Tone 8', '', '', '', '', '', '', '', '', '', '', '', '', 'Tschaik.Swanlake', 'Satie Gymnop.#1', 'Hungarian Dance', 'Beethoven Sym.5', 'Greensleeves', 'Foster Ky. Home', 'The Moment', 'Asian Jingle', 'Disco') calendar_defaultringtone=0 calendar_defaultcaringtone=0 def __init__(self, logtarget, commport): com_sanyo3100.Phone.__init__(self, logtarget, commport) self.mode=self.MODENONE self.numbertypetab=numbertypetab my_model='SCP7500' detected_model='SCP-7500/US' my_manufacturer='SANYO' parentprofile=com_sanyo3100.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer=Phone.my_manufacturer phone_model=Phone.my_model WALLPAPER_WIDTH=176 WALLPAPER_HEIGHT=220 # which usb ids correspond to us _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar #('wallpaper', 'write', 'MERGE'), #('ringtone', 'write', 'MERGE'), ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading #('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # Read sms messages ('todo', 'read', None), # Read todos ) def __init__(self): parentprofile.__init__(self) com_sanyonewer.Profile.__init__(self) self.numbertypetab=numbertypetab bitpim-1.0.7+dfsg1/src/phones/com_motov3m_sprint.py0000644001616600161660000001621211054420301020435 0ustar amuamu### BITPIM ### ### Copyright (C) 2007 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_motov3m.py 4537 2007-12-30 03:32:13Z djpham $ """Communicate with Motorola phones using AT commands""" import common import com_motov3m as v3m import com_moto import helpids import fileinfo import p_motov3m_sprint import prototypes parentphone=v3m.Phone class Phone(parentphone): desc='Moto-V3m' helpid=helpids.ID_PHONE_MOTOV3M protocolclass=p_motov3m_sprint serialsname='motov3m' builtinringtones=( (0, ('Silent',)), (5, ('Vibe Dot', 'Vibe Dash', 'Vibe Dot Dot', 'Vibe Dot Dash', 'Vibe Pulse')), ) def __init__(self, logtarget, commport): parentphone.__init__(self, logtarget, commport) def _ensure_speeddials(self, fundamentals): """Make sure that each and every number/email/mail list has a speed dial, which is being used as the slot/index number """ _pb_book=fundamentals.get('phonebook', {}) _sd_slots=[False]*(self.protocolclass.PB_TOTAL_ENTRIES+1) _sd_slots[0:self.protocolclass.PB_FIRST_ENTRY]=[True]*self.protocolclass.PB_FIRST_ENTRY # go through the first round and mark the slots being used for _key,_pb_entry in _pb_book.items(): self._mark_used_slots(_pb_entry.get('numbers', []), _sd_slots, 'number') self._mark_used_slots(_pb_entry.get('emails', []), _sd_slots, 'email') self._mark_used_slots(_pb_entry.get('maillist', []), _sd_slots, 'entry') # go through the 2nd time and populate unknown speed dials for _key, _pb_entry in _pb_book.items(): self._get_sd_slot(_pb_entry.get('numbers', []), _sd_slots, 'number') self._get_sd_slot(_pb_entry.get('emails', []), _sd_slots, 'email') self._get_sd_slot(_pb_entry.get('maillist', []), _sd_slots, 'entry') return _sd_slots def getphonebook(self, result): """Reads the phonebook data. The L{getfundamentals} information will already be in result.""" self.log('Getting phonebook') self.setmode(self.MODEPHONEBOOK) # pick the main phonebook self.select_phonebook() # setting up pb_book={} result['pb_list']=[] result['sd_dict']={} # loop through and read 10 entries at a timer _total_entries=self.protocolclass.PB_TOTAL_ENTRIES _first_entry=self.protocolclass.PB_FIRST_ENTRY _req=self.protocolclass.read_pb_req() for _start_idx in range(_first_entry, _total_entries+1, 10): _end_idx=min(_start_idx+9, _total_entries) _req.start_index=_start_idx _req.end_index=_end_idx for _retry_cnt in range(2): try: self.progress(_end_idx, _total_entries, 'Reading contact entry %d to %d'%(_start_idx, _end_idx)) _res=self.sendATcommand(_req, self.protocolclass.read_pb_resp) for _entry in _res: self._build_pb_entry(_entry, pb_book, result) break except: if _retry_cnt: self.log('Failed to read phonebook data') else: self.log('Failed to read phonebook data, retrying...') self._update_mail_list(pb_book, result) self.setmode(self.MODEMODEM) del result['pb_list'], result['sd_dict'] _keys=result['groups'].keys() result['categories']=[x['name'] for _,x in result['groups'].items()] result['phonebook']=pb_book return pb_book def savephonebook(self, result): result=com_moto.Phone.savephonebook(self,result) result['rebootphone']=True return result def _populate_pb_entry(self, pb_entry, entry, fundamentals): """Populate a BitPim phonebook entry with one from the phone """ # extract the number, email, or mailing list _num_type=entry.number_type if _num_type in self.protocolclass.NUMBER_TYPE: self._populate_pb_number(pb_entry, entry, fundamentals) elif _num_type in self.protocolclass.EMAIL_TYPE: self._populate_pb_email(pb_entry, entry, fundamentals) elif _num_type in self.protocolclass.WWW_TYPE: self._populate_pb_www(pb_entry, entry, fundamentals) elif _num_type in self.protocolclass.MEMO_TYPE: self._populate_pb_memo(pb_entry, entry, fundamentals) # this is a mail list, which is not currently supported ## else: ## self._populate_pb_maillist(pb_entry, entry, fundamentals) def _populate_pb_www(self, pb_entry, entry, fundamentals): """Extract the www component""" _www={ 'url': entry.number } self._populate_pb_misc(pb_entry, _www, 'urls', entry, fundamentals) # and mark it fundamentals['sd_dict'][entry.index]=entry.number def _populate_pb_memo(self, pb_entry, entry, fundamentals): """Extract the memo component""" _www={ 'memo': entry.number } self._populate_pb_misc(pb_entry, _www, 'memos', entry, fundamentals) # and mark it fundamentals['sd_dict'][entry.index]=entry.number #------------------------------------------------------------------------------- parentprofile=v3m.Profile class Profile(parentprofile): serialsname=Phone.serialsname usbids=( ( 0x22B8, 0x2A64, 0),) deviceclasses=("serial") # use for auto-detection phone_manufacturer='Motorola' phone_model='+GMM: Motorola V3m-Sprint Phone' common_model_name='V3m' generic_phone_model='Motorola CDMA V3m Phone' # fill in the list of ringtone/sound origins on your phone ringtoneorigins=('ringers',) # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 176, 'height': 184, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", {'width': 96, 'height': 72, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "fullscreen", {'width': 176, 'height': 220, 'format': "JPEG"})) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'read', None), # all calendar reading ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'read', None), # all wallpaper reading ('wallpaper', 'write', 'OVERWRITE'), ('sms', 'read', None), # all SMS list reading DJP ) bitpim-1.0.7+dfsg1/src/phones/com_lgc2000.py0000644001616600161660000001761010555026112016513 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Joe Pham ### Copyright (C) 2006 Simon Capper ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgc2000.py 3927 2007-01-22 03:15:22Z rogerb $ """Communicate with the LG C2000 cell phone. This is crappy phone if you want to connect it to your PC, I would not recommend it. The serial interface is buggy, the phone crashes with the slightest reasons and sometimes this requires battery removal to fix . eg. AT+CPBS="LD" followed by AT+CPBR for call history retrieval. and refuses to accept file uploads although the commands are reported as supported. """ # standard modules import base64 import sha import time # BitPim modules import bpcalendar import common import commport import com_lgg4015 import guihelper import helpids import memo import nameparser import p_lgc2000 import prototypes import sms class Phone(com_lgg4015.Phone): """ Talk to the LG C2000 Phone""" desc='LG-C2000' helpid=helpids.ID_PHONE_LGC2000 protocolclass=p_lgc2000 serialsname='lgc2000' def __init__(self, logtarget, commport): super(Phone,self).__init__(logtarget, commport) self.mode=self.MODENONE def getfundamentals(self, results): """Gets information fundamental to interoperating with the phone and UI. Currently this is: - 'uniqueserial' a unique serial number representing the phone - 'groups' the phonebook groups This method is called before we read the phonebook data or before we write phonebook data. """ # use a hash of ESN and other stuff (being paranoid) self.setmode(self.MODEMODEM) self.log("Retrieving fundamental phone information") self.log("Reading phone serial number") results['uniqueserial']=sha.new(self.get_sim_id()).hexdigest() # now read groups self.log("Reading group information") results['groups']=self._get_groups() # All done self.log("Fundamentals retrieved") return results # this function does not work !!!! def getwallpapers(self, result): self.log('Reading wallpaper index') self.setmode(self.MODEMODEM) self.charset_ascii() self._wallpaper_mode() media={} media_index=self._get_wallpaper_index() # Set the media type to be pic (wallpaper) self.charset_ascii() self._wallpaper_mode() # and read the list res={} self._get_image_index(self.protocolclass.MIN_WALLPAPER_INDEX, self.protocolclass.MAX_WALLPAPER_INDEX, res, 0, 'wallpaper') # dummy data for wallpaper _dummy_data=file(guihelper.getresourcefile('wallpaper.png'),'rb').read() for e in res.values(): media[e['name']]=_dummy_data # Set the media type to be photo self.charset_ascii() self._photo_mode() # and read the list res={} self._get_image_index(self.protocolclass.MIN_PHOTO_INDEX, self.protocolclass.MAX_PHOTO_INDEX, res, 0, 'camera') # read the files out of the phone for e in res.values(): data=self._get_media_file(e['name']) if data != False: print "get OK" media[e['name']]=data else: print "get failed" media[e['name']]=_dummy_data result['wallpapers']=media result['wallpaper-index']=media_index return result def _photo_mode(self): _req=self.protocolclass.media_selector_set() _req.media_type=self.protocolclass.MEDIA_PHOTO self.sendATcommand(_req, None) def _get_image_index(self, min, max, res, res_offset, origin): _req=self.protocolclass.media_list_req() _req.start_index=min _req.end_index=max _res=self.sendATcommand(_req, self.protocolclass.media_list_resp) for i,e in enumerate(_res): res[i+res_offset]={ 'name': e.file_name, 'origin': origin, 'size':e.size } def _get_wallpaper_index(self): """ Return the wallpaper index""" res={} # Set the media type to be pic (wallpaper) self.charset_ascii() self._wallpaper_mode() # and read the list self._get_image_index(self.protocolclass.MIN_WALLPAPER_INDEX, self.protocolclass.MAX_WALLPAPER_INDEX, res, 0, 'wallpaper') # Set the media type to be photo self.charset_ascii() self._photo_mode() # and read the list # this command only seems to retrieve the first photo in the phone, so it is kindof useless self._get_image_index(self.protocolclass.MIN_PHOTO_INDEX, self.protocolclass.MAX_PHOTO_INDEX, res, self.protocolclass.MAX_WALLPAPER_INDEX, 'camera') return res # this function only retrieves the beginning of the file # the phone sends a chunk of data follow by the '@' sign. # I have not found a way to make it send the rest of the file # the data that is sent is valid after being decoded def _get_media_file(self, file_name): """ Read a media file """ if not file_name: return False self.log('Writing media %s'%file_name) _cmd='AT+DDLU=0,"%s"\r' % file_name self.comm.write(str(_cmd)) # strip for the start of the response self.comm.readuntil('>') self.comm.read(1) # read the raw file data _data64=self.comm.readuntil('@') # convert to binary data=base64.decodestring(_data64[:-1]) if self.comm.read(10)!='\n\r\r\n\r\nOK\r\n': return False # need to figure out how to make phone send rest of file return data #------------------------------------------------------------------------------- parent_profile=com_lgg4015.Profile class Profile(parent_profile): serialsname=Phone.serialsname WALLPAPER_WIDTH=128 WALLPAPER_HEIGHT=128 MAX_WALLPAPER_BASENAME_LENGTH=19 WALLPAPER_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789_ ." WALLPAPER_CONVERT_FORMAT="jpg" MAX_RINGTONE_BASENAME_LENGTH=19 RINGTONE_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789_ ." RINGTONE_LIMITS= { 'MAXSIZE': 20480 } # use for auto-detection phone_manufacturer='LGE' phone_model='C2000' usbids=( ( 0x10AB, 0x10C5, 1), ( 0x067b, 0x2303, None), # VID=Prolific, PID=USB to serial ) deviceclasses=("serial",) def __init__(self): parent_profile.__init__(self) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'read', None), # all calendar reading ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar # these features appear to be crippled, they seem to work from looking at the # responses from the phone, but the phone crashes and none of the transfered # data appears on the phone #('ringtone', 'read', None), # all ringtone reading #('ringtone', 'write', 'OVERWRITE'), #('wallpaper', 'read', None), # all wallpaper reading #('wallpaper', 'write', 'OVERWRITE'), ('memo', 'read', None), # all memo list reading ('memo', 'write', 'OVERWRITE'), # all memo list writing ('sms', 'read', None), # all SMS list reading # this phone hangs when you try to read the call history, even though it "claims" to # support the commands when you query it using AT+CLAC, I only tested with the call history # empty. # ('call_history', 'read', None), ) def convertphonebooktophone(self, helper, data): return data bitpim-1.0.7+dfsg1/src/phones/com_othercdma.py0000644001616600161660000000135310326102614017405 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_othercdma.py 2572 2005-10-21 06:07:08Z skyjunky $ """Communicate with an unsupported Brew phone""" import com_phone import com_brew import commport class Phone(com_phone.Phone, com_brew.BrewProtocol): "Talk to an unsupported CDMA phone" desc="Other CDMA Phone" protocolclass=None def __init__(self, logtarget, commport): com_phone.Phone.__init__(self, logtarget, commport) com_brew.BrewProtocol.__init__(self) class Profile(com_phone.Profile): pass bitpim-1.0.7+dfsg1/src/phones/p_lgvi125.py0000644001616600161660000054756410466234100016335 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VI125""" import re from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=1 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=200 MAXCALENDARDESCRIPTION=38 NUMEMAILS=3 NUMPHONENUMBERS=5 NUMGROUPS=20 NUMMAPGROUPS=500 NORINGTONE=0 NOMSGRINGTONE=0 NOWALLPAPER=0 MEMOLENGTH=33 SMS_CANNED_MAX_ITEMS=18 SMS_CANNED_MAX_LENGTH=101 SMS_CANNED_FILENAME="sms/mediacan000.dat" SMS_PATTERNS={'Inbox': re.compile(r"^.*/inbox[0-9][0-9][0-9]\.dat$"), 'Sent': re.compile(r"^.*/outbox[0-9][0-9][0-9]\.dat$"), 'Saved': re.compile(r"^.*/sf[0-9][0-9]\.dat$"), } numbertypetab=( 'cell', 'home', 'office', 'fax', 'pager' ) # Calendar parameters NUMCALENDARENTRIES=300 # ?? for VI125 CAL_REP_NONE=0x10 CAL_REP_DAILY=0x11 CAL_REP_MONFRI=0x12 CAL_REP_WEEKLY=0x13 CAL_REP_MONTHLY=0x14 CAL_REP_YEARLY=0x15 CAL_DOW_SUN=0x0800 CAL_DOW_MON=0x0400 CAL_DOW_TUE=0x0200 CAL_DOW_WED=0x0100 CAL_DOW_THU=0x0080 CAL_DOW_FRI=0x0040 CAL_DOW_SAT=0x0020 CAL_DOW_EXCEPTIONS=0x0010 CAL_REMINDER_NONE=0 CAL_REMINDER_ONTIME=1 CAL_REMINDER_5MIN=2 CAL_REMINDER_10MIN=3 CAL_REMINDER_1HOUR=4 CAL_REMINDER_1DAY=5 CAL_REMINDER_2DAYS=6 CAL_REPEAT_DATE=(4095, 12, 31) cal_dir='sch' cal_data_file_name='sch/schedule.dat' cal_exception_file_name='sch/schexception.dat' cal_has_voice_id=False class firmwareresponse(BaseProtogenClass): __fields=['command', 'date1', 'time1', 'date2', 'time2', 'firmwareversion'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(firmwareresponse,self).__init__(**dict) if self.__class__ is firmwareresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(firmwareresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(firmwareresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_date1.writetobuffer(buf) self.__field_time1.writetobuffer(buf) self.__field_date2.writetobuffer(buf) self.__field_time2.writetobuffer(buf) self.__field_firmwareversion.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_date1=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date1.readfrombuffer(buf) self.__field_time1=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time1.readfrombuffer(buf) self.__field_date2=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date2.readfrombuffer(buf) self.__field_time2=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time2.readfrombuffer(buf) self.__field_firmwareversion=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_firmwareversion.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_date1(self): return self.__field_date1.getvalue() def __setfield_date1(self, value): if isinstance(value,USTRING): self.__field_date1=value else: self.__field_date1=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date1(self): del self.__field_date1 date1=property(__getfield_date1, __setfield_date1, __delfield_date1, None) def __getfield_time1(self): return self.__field_time1.getvalue() def __setfield_time1(self, value): if isinstance(value,USTRING): self.__field_time1=value else: self.__field_time1=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time1(self): del self.__field_time1 time1=property(__getfield_time1, __setfield_time1, __delfield_time1, None) def __getfield_date2(self): return self.__field_date2.getvalue() def __setfield_date2(self, value): if isinstance(value,USTRING): self.__field_date2=value else: self.__field_date2=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date2(self): del self.__field_date2 date2=property(__getfield_date2, __setfield_date2, __delfield_date2, None) def __getfield_time2(self): return self.__field_time2.getvalue() def __setfield_time2(self, value): if isinstance(value,USTRING): self.__field_time2=value else: self.__field_time2=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time2(self): del self.__field_time2 time2=property(__getfield_time2, __setfield_time2, __delfield_time2, None) def __getfield_firmwareversion(self): return self.__field_firmwareversion.getvalue() def __setfield_firmwareversion(self, value): if isinstance(value,USTRING): self.__field_firmwareversion=value else: self.__field_firmwareversion=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_firmwareversion(self): del self.__field_firmwareversion firmwareversion=property(__getfield_firmwareversion, __setfield_firmwareversion, __delfield_firmwareversion, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('date1', self.__field_date1, None) yield ('time1', self.__field_time1, None) yield ('date2', self.__field_date2, None) yield ('time2', self.__field_time2, None) yield ('firmwareversion', self.__field_firmwareversion, None) class pbreadentryresponse(BaseProtogenClass): "Results of reading one entry" __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbreadentryresponse,self).__init__(**dict) if self.__class__ is pbreadentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbreadentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbreadentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbupdateentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbupdateentryrequest,self).__init__(**dict) if self.__class__ is pbupdateentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbupdateentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbupdateentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x04, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbappendentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbappendentryrequest,self).__init__(**dict) if self.__class__ is pbappendentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbappendentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbappendentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x03, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbentry(BaseProtogenClass): __fields=['serial1', 'unknown3', 'unknown4', 'unknown5', 'unknown6', 'unknown7', 'serial2', 'unknown8', 'unknown9', 'unknown10', 'name', 'group', 'unknown11', 'ringtone', 'unknown12', 'unknown13', 'memo', 'emails', 'url', 'avatar', 'numberspeeddials', 'numbertypes', 'numbers', 'unknown14'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_serial1.writetobuffer(buf) try: self.__field_unknown3 except: self.__field_unknown3=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_unknown3.writetobuffer(buf) try: self.__field_unknown4 except: self.__field_unknown4=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_unknown4.writetobuffer(buf) try: self.__field_unknown5 except: self.__field_unknown5=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_unknown5.writetobuffer(buf) try: self.__field_unknown6 except: self.__field_unknown6=UINT(**{'sizeinbytes': 1, 'constant': 0x72}) self.__field_unknown6.writetobuffer(buf) self.__field_unknown7.writetobuffer(buf) self.__field_serial2.writetobuffer(buf) try: self.__field_unknown8 except: self.__field_unknown8=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_unknown8.writetobuffer(buf) try: self.__field_unknown9 except: self.__field_unknown9=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_unknown9.writetobuffer(buf) try: self.__field_unknown10 except: self.__field_unknown10=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_unknown10.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_group.writetobuffer(buf) try: self.__field_unknown11 except: self.__field_unknown11=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_unknown11.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_unknown12.writetobuffer(buf) try: self.__field_unknown13 except: self.__field_unknown13=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_unknown13.writetobuffer(buf) self.__field_memo.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvi125_134, 'length': NUMEMAILS}) self.__field_emails.writetobuffer(buf) self.__field_url.writetobuffer(buf) self.__field_avatar.writetobuffer(buf) try: self.__field_numberspeeddials except: self.__field_numberspeeddials=LIST(**{'elementclass': _gen_p_lgvi125_138, 'length': NUMPHONENUMBERS}) self.__field_numberspeeddials.writetobuffer(buf) try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvi125_140, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvi125_142, 'length': NUMPHONENUMBERS}) self.__field_numbers.writetobuffer(buf) try: self.__field_unknown14 except: self.__field_unknown14=UINT(**{'sizeinbytes': 1, 'constant': 0x7c}) self.__field_unknown14.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_serial1=UINT(**{'sizeinbytes': 1}) self.__field_serial1.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_unknown4.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_unknown5.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 1, 'constant': 0x72}) self.__field_unknown6.readfrombuffer(buf) self.__field_unknown7=UINT(**{'sizeinbytes': 1}) self.__field_unknown7.readfrombuffer(buf) self.__field_serial2=UINT(**{'sizeinbytes': 1}) self.__field_serial2.readfrombuffer(buf) self.__field_unknown8=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_unknown8.readfrombuffer(buf) self.__field_unknown9=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_unknown9.readfrombuffer(buf) self.__field_unknown10=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_unknown10.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 33, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 1}) self.__field_group.readfrombuffer(buf) self.__field_unknown11=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_unknown11.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_unknown12=UINT(**{'sizeinbytes': 1}) self.__field_unknown12.readfrombuffer(buf) self.__field_unknown13=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_unknown13.readfrombuffer(buf) self.__field_memo=USTRING(**{'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) self.__field_memo.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_lgvi125_134, 'length': NUMEMAILS}) self.__field_emails.readfrombuffer(buf) self.__field_url=USTRING(**{'sizeinbytes': 73, 'raiseonunterminatedread': False}) self.__field_url.readfrombuffer(buf) self.__field_avatar=UINT(**{'sizeinbytes': 4}) self.__field_avatar.readfrombuffer(buf) self.__field_numberspeeddials=LIST(**{'elementclass': _gen_p_lgvi125_138, 'length': NUMPHONENUMBERS}) self.__field_numberspeeddials.readfrombuffer(buf) self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvi125_140, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.readfrombuffer(buf) self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvi125_142, 'length': NUMPHONENUMBERS}) self.__field_numbers.readfrombuffer(buf) self.__field_unknown14=UINT(**{'sizeinbytes': 1, 'constant': 0x7c}) self.__field_unknown14.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 1}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_unknown3(self): try: self.__field_unknown3 except: self.__field_unknown3=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1, 'constant': 0x00}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): try: self.__field_unknown4 except: self.__field_unknown4=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 1, 'constant': 0x00}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_unknown5(self): try: self.__field_unknown5 except: self.__field_unknown5=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 1, 'constant': 0x00}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_unknown6(self): try: self.__field_unknown6 except: self.__field_unknown6=UINT(**{'sizeinbytes': 1, 'constant': 0x72}) return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 1, 'constant': 0x72}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_unknown7(self): return self.__field_unknown7.getvalue() def __setfield_unknown7(self, value): if isinstance(value,UINT): self.__field_unknown7=value else: self.__field_unknown7=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown7(self): del self.__field_unknown7 unknown7=property(__getfield_unknown7, __setfield_unknown7, __delfield_unknown7, None) def __getfield_serial2(self): return self.__field_serial2.getvalue() def __setfield_serial2(self, value): if isinstance(value,UINT): self.__field_serial2=value else: self.__field_serial2=UINT(value,**{'sizeinbytes': 1}) def __delfield_serial2(self): del self.__field_serial2 serial2=property(__getfield_serial2, __setfield_serial2, __delfield_serial2, None) def __getfield_unknown8(self): try: self.__field_unknown8 except: self.__field_unknown8=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,UINT): self.__field_unknown8=value else: self.__field_unknown8=UINT(value,**{'sizeinbytes': 1, 'constant': 0x00}) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def __getfield_unknown9(self): try: self.__field_unknown9 except: self.__field_unknown9=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) return self.__field_unknown9.getvalue() def __setfield_unknown9(self, value): if isinstance(value,UINT): self.__field_unknown9=value else: self.__field_unknown9=UINT(value,**{'sizeinbytes': 1, 'constant': 0x00}) def __delfield_unknown9(self): del self.__field_unknown9 unknown9=property(__getfield_unknown9, __setfield_unknown9, __delfield_unknown9, None) def __getfield_unknown10(self): try: self.__field_unknown10 except: self.__field_unknown10=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) return self.__field_unknown10.getvalue() def __setfield_unknown10(self, value): if isinstance(value,UINT): self.__field_unknown10=value else: self.__field_unknown10=UINT(value,**{'sizeinbytes': 1, 'constant': 0x00}) def __delfield_unknown10(self): del self.__field_unknown10 unknown10=property(__getfield_unknown10, __setfield_unknown10, __delfield_unknown10, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 33, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 1}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_unknown11(self): try: self.__field_unknown11 except: self.__field_unknown11=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) return self.__field_unknown11.getvalue() def __setfield_unknown11(self, value): if isinstance(value,UINT): self.__field_unknown11=value else: self.__field_unknown11=UINT(value,**{'sizeinbytes': 1, 'constant': 0x00}) def __delfield_unknown11(self): del self.__field_unknown11 unknown11=property(__getfield_unknown11, __setfield_unknown11, __delfield_unknown11, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "ringtone index for a call") def __getfield_unknown12(self): return self.__field_unknown12.getvalue() def __setfield_unknown12(self, value): if isinstance(value,UINT): self.__field_unknown12=value else: self.__field_unknown12=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown12(self): del self.__field_unknown12 unknown12=property(__getfield_unknown12, __setfield_unknown12, __delfield_unknown12, None) def __getfield_unknown13(self): try: self.__field_unknown13 except: self.__field_unknown13=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) return self.__field_unknown13.getvalue() def __setfield_unknown13(self, value): if isinstance(value,UINT): self.__field_unknown13=value else: self.__field_unknown13=UINT(value,**{'sizeinbytes': 1, 'constant': 0x00}) def __delfield_unknown13(self): del self.__field_unknown13 unknown13=property(__getfield_unknown13, __setfield_unknown13, __delfield_unknown13, None) def __getfield_memo(self): return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,USTRING): self.__field_memo=value else: self.__field_memo=USTRING(value,**{'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvi125_134, 'length': NUMEMAILS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_lgvi125_134, 'length': NUMEMAILS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, None) def __getfield_url(self): return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,USTRING): self.__field_url=value else: self.__field_url=USTRING(value,**{'sizeinbytes': 73, 'raiseonunterminatedread': False}) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_avatar(self): return self.__field_avatar.getvalue() def __setfield_avatar(self, value): if isinstance(value,UINT): self.__field_avatar=value else: self.__field_avatar=UINT(value,**{'sizeinbytes': 4}) def __delfield_avatar(self): del self.__field_avatar avatar=property(__getfield_avatar, __setfield_avatar, __delfield_avatar, None) def __getfield_numberspeeddials(self): try: self.__field_numberspeeddials except: self.__field_numberspeeddials=LIST(**{'elementclass': _gen_p_lgvi125_138, 'length': NUMPHONENUMBERS}) return self.__field_numberspeeddials.getvalue() def __setfield_numberspeeddials(self, value): if isinstance(value,LIST): self.__field_numberspeeddials=value else: self.__field_numberspeeddials=LIST(value,**{'elementclass': _gen_p_lgvi125_138, 'length': NUMPHONENUMBERS}) def __delfield_numberspeeddials(self): del self.__field_numberspeeddials numberspeeddials=property(__getfield_numberspeeddials, __setfield_numberspeeddials, __delfield_numberspeeddials, None) def __getfield_numbertypes(self): try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvi125_140, 'length': NUMPHONENUMBERS}) return self.__field_numbertypes.getvalue() def __setfield_numbertypes(self, value): if isinstance(value,LIST): self.__field_numbertypes=value else: self.__field_numbertypes=LIST(value,**{'elementclass': _gen_p_lgvi125_140, 'length': NUMPHONENUMBERS}) def __delfield_numbertypes(self): del self.__field_numbertypes numbertypes=property(__getfield_numbertypes, __setfield_numbertypes, __delfield_numbertypes, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvi125_142, 'length': NUMPHONENUMBERS}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'elementclass': _gen_p_lgvi125_142, 'length': NUMPHONENUMBERS}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_unknown14(self): try: self.__field_unknown14 except: self.__field_unknown14=UINT(**{'sizeinbytes': 1, 'constant': 0x7c}) return self.__field_unknown14.getvalue() def __setfield_unknown14(self, value): if isinstance(value,UINT): self.__field_unknown14=value else: self.__field_unknown14=UINT(value,**{'sizeinbytes': 1, 'constant': 0x7c}) def __delfield_unknown14(self): del self.__field_unknown14 unknown14=property(__getfield_unknown14, __setfield_unknown14, __delfield_unknown14, None) def iscontainer(self): return True def containerelements(self): yield ('serial1', self.__field_serial1, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) yield ('unknown5', self.__field_unknown5, None) yield ('unknown6', self.__field_unknown6, None) yield ('unknown7', self.__field_unknown7, None) yield ('serial2', self.__field_serial2, None) yield ('unknown8', self.__field_unknown8, None) yield ('unknown9', self.__field_unknown9, None) yield ('unknown10', self.__field_unknown10, None) yield ('name', self.__field_name, None) yield ('group', self.__field_group, None) yield ('unknown11', self.__field_unknown11, None) yield ('ringtone', self.__field_ringtone, "ringtone index for a call") yield ('unknown12', self.__field_unknown12, None) yield ('unknown13', self.__field_unknown13, None) yield ('memo', self.__field_memo, None) yield ('emails', self.__field_emails, None) yield ('url', self.__field_url, None) yield ('avatar', self.__field_avatar, None) yield ('numberspeeddials', self.__field_numberspeeddials, None) yield ('numbertypes', self.__field_numbertypes, None) yield ('numbers', self.__field_numbers, None) yield ('unknown14', self.__field_unknown14, None) class _gen_p_lgvi125_134(BaseProtogenClass): 'Anonymous inner class' __fields=['email'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvi125_134,self).__init__(**dict) if self.__class__ is _gen_p_lgvi125_134: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvi125_134,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvi125_134,kwargs) if len(args): dict2={'sizeinbytes': 73, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_email=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_email.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_email=USTRING(**{'sizeinbytes': 73, 'raiseonunterminatedread': False}) self.__field_email.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 73, 'raiseonunterminatedread': False}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def iscontainer(self): return True def containerelements(self): yield ('email', self.__field_email, None) class _gen_p_lgvi125_138(BaseProtogenClass): 'Anonymous inner class' __fields=['numberspeeddial'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvi125_138,self).__init__(**dict) if self.__class__ is _gen_p_lgvi125_138: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvi125_138,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvi125_138,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_numberspeeddial=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numberspeeddial.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numberspeeddial=UINT(**{'sizeinbytes': 1}) self.__field_numberspeeddial.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numberspeeddial(self): return self.__field_numberspeeddial.getvalue() def __setfield_numberspeeddial(self, value): if isinstance(value,UINT): self.__field_numberspeeddial=value else: self.__field_numberspeeddial=UINT(value,**{'sizeinbytes': 1}) def __delfield_numberspeeddial(self): del self.__field_numberspeeddial numberspeeddial=property(__getfield_numberspeeddial, __setfield_numberspeeddial, __delfield_numberspeeddial, None) def iscontainer(self): return True def containerelements(self): yield ('numberspeeddial', self.__field_numberspeeddial, None) class _gen_p_lgvi125_140(BaseProtogenClass): 'Anonymous inner class' __fields=['numbertype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvi125_140,self).__init__(**dict) if self.__class__ is _gen_p_lgvi125_140: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvi125_140,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvi125_140,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_numbertype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numbertype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numbertype=UINT(**{'sizeinbytes': 1}) self.__field_numbertype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numbertype(self): return self.__field_numbertype.getvalue() def __setfield_numbertype(self, value): if isinstance(value,UINT): self.__field_numbertype=value else: self.__field_numbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_numbertype(self): del self.__field_numbertype numbertype=property(__getfield_numbertype, __setfield_numbertype, __delfield_numbertype, None) def iscontainer(self): return True def containerelements(self): yield ('numbertype', self.__field_numbertype, None) class _gen_p_lgvi125_142(BaseProtogenClass): 'Anonymous inner class' __fields=['number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvi125_142,self).__init__(**dict) if self.__class__ is _gen_p_lgvi125_142: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvi125_142,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvi125_142,kwargs) if len(args): dict2={'sizeinbytes': 49, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_number=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) class pbgroup(BaseProtogenClass): "A single group" __fields=['number', 'unknown1', 'ring', 'unknown2', 'unknown3', 'unknown4', 'unknown5', 'unknown6', 'unknown7', 'unknown8', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroup,self).__init__(**dict) if self.__class__ is pbgroup: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroup,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroup,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_ring.writetobuffer(buf) try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_unknown2.writetobuffer(buf) try: self.__field_unknown3 except: self.__field_unknown3=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_unknown3.writetobuffer(buf) try: self.__field_unknown4 except: self.__field_unknown4=UINT(**{'sizeinbytes': 1, 'constant': 0x01}) self.__field_unknown4.writetobuffer(buf) try: self.__field_unknown5 except: self.__field_unknown5=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_unknown5.writetobuffer(buf) try: self.__field_unknown6 except: self.__field_unknown6=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_unknown6.writetobuffer(buf) self.__field_unknown7.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=UINT(**{'sizeinbytes': 1}) self.__field_number.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_ring=UINT(**{'sizeinbytes': 1}) self.__field_ring.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 1, 'constant': 0x01}) self.__field_unknown4.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_unknown5.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_unknown6.readfrombuffer(buf) self.__field_unknown7=UINT(**{'sizeinbytes': 1}) self.__field_unknown7.readfrombuffer(buf) self.__field_unknown8=UINT(**{'sizeinbytes': 1}) self.__field_unknown8.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 33}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,UINT): self.__field_number=value else: self.__field_number=UINT(value,**{'sizeinbytes': 1}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_ring(self): return self.__field_ring.getvalue() def __setfield_ring(self, value): if isinstance(value,UINT): self.__field_ring=value else: self.__field_ring=UINT(value,**{'sizeinbytes': 1}) def __delfield_ring(self): del self.__field_ring ring=property(__getfield_ring, __setfield_ring, __delfield_ring, None) def __getfield_unknown2(self): try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1, 'constant': 0x00}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): try: self.__field_unknown3 except: self.__field_unknown3=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1, 'constant': 0x00}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): try: self.__field_unknown4 except: self.__field_unknown4=UINT(**{'sizeinbytes': 1, 'constant': 0x01}) return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 1, 'constant': 0x01}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_unknown5(self): try: self.__field_unknown5 except: self.__field_unknown5=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 1, 'constant': 0x00}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_unknown6(self): try: self.__field_unknown6 except: self.__field_unknown6=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 1, 'constant': 0x00}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_unknown7(self): return self.__field_unknown7.getvalue() def __setfield_unknown7(self, value): if isinstance(value,UINT): self.__field_unknown7=value else: self.__field_unknown7=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown7(self): del self.__field_unknown7 unknown7=property(__getfield_unknown7, __setfield_unknown7, __delfield_unknown7, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,UINT): self.__field_unknown8=value else: self.__field_unknown8=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 33}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) yield ('unknown1', self.__field_unknown1, None) yield ('ring', self.__field_ring, None) yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) yield ('unknown5', self.__field_unknown5, None) yield ('unknown6', self.__field_unknown6, None) yield ('unknown7', self.__field_unknown7, None) yield ('unknown8', self.__field_unknown8, None) yield ('name', self.__field_name, None) class pbgroups(BaseProtogenClass): "Phonebook groups" __fields=['groups'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroups,self).__init__(**dict) if self.__class__ is pbgroups: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroups,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroups,kwargs) if len(args): dict2={'elementclass': pbgroup} dict2.update(kwargs) kwargs=dict2 self.__field_groups=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_groups(self): try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) return self.__field_groups.getvalue() def __setfield_groups(self, value): if isinstance(value,LIST): self.__field_groups=value else: self.__field_groups=LIST(value,**{'elementclass': pbgroup}) def __delfield_groups(self): del self.__field_groups groups=property(__getfield_groups, __setfield_groups, __delfield_groups, None) def iscontainer(self): return True def containerelements(self): yield ('groups', self.__field_groups, None) class pbseqgroup(BaseProtogenClass): __fields=['number', 'unknown'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbseqgroup,self).__init__(**dict) if self.__class__ is pbseqgroup: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbseqgroup,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbseqgroup,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=UINT(**{'sizeinbytes': 1}) self.__field_number.readfrombuffer(buf) self.__field_unknown=UINT(**{'sizeinbytes': 1}) self.__field_unknown.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,UINT): self.__field_number=value else: self.__field_number=UINT(value,**{'sizeinbytes': 1}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UINT): self.__field_unknown=value else: self.__field_unknown=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) yield ('unknown', self.__field_unknown, None) class pbseqgroups(BaseProtogenClass): __fields=['seqgroups'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbseqgroups,self).__init__(**dict) if self.__class__ is pbseqgroups: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbseqgroups,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbseqgroups,kwargs) if len(args): dict2={'elementclass': pbseqgroup, 'length': NUMGROUPS} dict2.update(kwargs) kwargs=dict2 self.__field_seqgroups=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_seqgroups except: self.__field_seqgroups=LIST(**{'elementclass': pbseqgroup, 'length': NUMGROUPS}) self.__field_seqgroups.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_seqgroups=LIST(**{'elementclass': pbseqgroup, 'length': NUMGROUPS}) self.__field_seqgroups.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_seqgroups(self): try: self.__field_seqgroups except: self.__field_seqgroups=LIST(**{'elementclass': pbseqgroup, 'length': NUMGROUPS}) return self.__field_seqgroups.getvalue() def __setfield_seqgroups(self, value): if isinstance(value,LIST): self.__field_seqgroups=value else: self.__field_seqgroups=LIST(value,**{'elementclass': pbseqgroup, 'length': NUMGROUPS}) def __delfield_seqgroups(self): del self.__field_seqgroups seqgroups=property(__getfield_seqgroups, __setfield_seqgroups, __delfield_seqgroups, None) def iscontainer(self): return True def containerelements(self): yield ('seqgroups', self.__field_seqgroups, None) class pbmapgroup(BaseProtogenClass): __fields=['number', 'unknown'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbmapgroup,self).__init__(**dict) if self.__class__ is pbmapgroup: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbmapgroup,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbmapgroup,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=UINT(**{'sizeinbytes': 1}) self.__field_number.readfrombuffer(buf) self.__field_unknown=UINT(**{'sizeinbytes': 1}) self.__field_unknown.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,UINT): self.__field_number=value else: self.__field_number=UINT(value,**{'sizeinbytes': 1}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UINT): self.__field_unknown=value else: self.__field_unknown=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) yield ('unknown', self.__field_unknown, None) class pbmapgroups(BaseProtogenClass): __fields=['mapgroups'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbmapgroups,self).__init__(**dict) if self.__class__ is pbmapgroups: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbmapgroups,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbmapgroups,kwargs) if len(args): dict2={'elementclass': pbmapgroup, 'length': NUMMAPGROUPS} dict2.update(kwargs) kwargs=dict2 self.__field_mapgroups=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_mapgroups except: self.__field_mapgroups=LIST(**{'elementclass': pbmapgroup, 'length': NUMMAPGROUPS}) self.__field_mapgroups.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_mapgroups=LIST(**{'elementclass': pbmapgroup, 'length': NUMMAPGROUPS}) self.__field_mapgroups.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_mapgroups(self): try: self.__field_mapgroups except: self.__field_mapgroups=LIST(**{'elementclass': pbmapgroup, 'length': NUMMAPGROUPS}) return self.__field_mapgroups.getvalue() def __setfield_mapgroups(self, value): if isinstance(value,LIST): self.__field_mapgroups=value else: self.__field_mapgroups=LIST(value,**{'elementclass': pbmapgroup, 'length': NUMMAPGROUPS}) def __delfield_mapgroups(self): del self.__field_mapgroups mapgroups=property(__getfield_mapgroups, __setfield_mapgroups, __delfield_mapgroups, None) def iscontainer(self): return True def containerelements(self): yield ('mapgroups', self.__field_mapgroups, None) class indexentry(BaseProtogenClass): __fields=['index', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_index.writetobuffer(buf) try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 40, 'default': ""}) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_index.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 40, 'default': ""}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 40, 'default': ""}) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 40, 'default': ""}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('name', self.__field_name, None) class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['maxitems', 'numactiveitems', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_maxitems except: self.__field_maxitems=UINT(**{'constant': 30}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{'length': self.maxitems, 'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_items=LIST(**{'length': self.maxitems, 'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_maxitems(self): return self.__field_maxitems.getvalue() def __setfield_maxitems(self, value): if isinstance(value,UINT): self.__field_maxitems=value else: self.__field_maxitems=UINT(value,**{'constant': 30}) def __delfield_maxitems(self): del self.__field_maxitems maxitems=property(__getfield_maxitems, __setfield_maxitems, __delfield_maxitems, None) def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'length': self.maxitems, 'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'length': self.maxitems, 'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('maxitems', self.__field_maxitems, None) yield ('numactiveitems', self.__field_numactiveitems, None) yield ('items', self.__field_items, None) class scheduleexception(BaseProtogenClass): __fields=['pos', 'day', 'month', 'year'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexception,self).__init__(**dict) if self.__class__ is scheduleexception: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexception,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexception,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_day.writetobuffer(buf) self.__field_month.writetobuffer(buf) self.__field_year.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_day=UINT(**{'sizeinbytes': 1}) self.__field_day.readfrombuffer(buf) self.__field_month=UINT(**{'sizeinbytes': 1}) self.__field_month.readfrombuffer(buf) self.__field_year=UINT(**{'sizeinbytes': 2}) self.__field_year.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "Refers to event id (position in schedule file) that this suppresses") def __getfield_day(self): return self.__field_day.getvalue() def __setfield_day(self, value): if isinstance(value,UINT): self.__field_day=value else: self.__field_day=UINT(value,**{'sizeinbytes': 1}) def __delfield_day(self): del self.__field_day day=property(__getfield_day, __setfield_day, __delfield_day, None) def __getfield_month(self): return self.__field_month.getvalue() def __setfield_month(self, value): if isinstance(value,UINT): self.__field_month=value else: self.__field_month=UINT(value,**{'sizeinbytes': 1}) def __delfield_month(self): del self.__field_month month=property(__getfield_month, __setfield_month, __delfield_month, None) def __getfield_year(self): return self.__field_year.getvalue() def __setfield_year(self, value): if isinstance(value,UINT): self.__field_year=value else: self.__field_year=UINT(value,**{'sizeinbytes': 2}) def __delfield_year(self): del self.__field_year year=property(__getfield_year, __setfield_year, __delfield_year, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "Refers to event id (position in schedule file) that this suppresses") yield ('day', self.__field_day, None) yield ('month', self.__field_month, None) yield ('year', self.__field_year, None) class scheduleexceptionfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexceptionfile,self).__init__(**dict) if self.__class__ is scheduleexceptionfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexceptionfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexceptionfile,kwargs) if len(args): dict2={'elementclass': scheduleexception} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': scheduleexception}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class scheduleevent(BaseProtogenClass): __fields=['packet_size', 'pos', 'start', 'end', 'repeat', 'daybitmap', 'pad2', 'alarmminutes', 'alarmhours', 'alarmtype', 'snoozedelay', 'ringtone', 'description'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleevent,self).__init__(**dict) if self.__class__ is scheduleevent: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleevent,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleevent,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_packet_size except: self.__field_packet_size=UINT(**{ 'constant': 60 }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) self.__field_daybitmap.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad2.writetobuffer(buf) self.__field_alarmminutes.writetobuffer(buf) self.__field_alarmhours.writetobuffer(buf) self.__field_alarmtype.writetobuffer(buf) try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_description.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_start=LGCALDATE(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=LGCALDATE(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_repeat=UINT(**{'sizeinbytes': 1}) self.__field_repeat.readfrombuffer(buf) self.__field_daybitmap=UINT(**{'sizeinbytes': 2}) self.__field_daybitmap.readfrombuffer(buf) self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad2.readfrombuffer(buf) self.__field_alarmminutes=UINT(**{'sizeinbytes': 1}) self.__field_alarmminutes.readfrombuffer(buf) self.__field_alarmhours=UINT(**{'sizeinbytes': 1}) self.__field_alarmhours.readfrombuffer(buf) self.__field_alarmtype=UINT(**{'sizeinbytes': 1}) self.__field_alarmtype.readfrombuffer(buf) self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_description=USTRING(**{'sizeinbytes': 39, 'raiseontruncate': False }) self.__field_description.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_packet_size(self): return self.__field_packet_size.getvalue() def __setfield_packet_size(self, value): if isinstance(value,UINT): self.__field_packet_size=value else: self.__field_packet_size=UINT(value,**{ 'constant': 60 }) def __delfield_packet_size(self): del self.__field_packet_size packet_size=property(__getfield_packet_size, __setfield_packet_size, __delfield_packet_size, "Faster than packetsize()") def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "position within file, used as an event id") def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,LGCALDATE): self.__field_start=value else: self.__field_start=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,LGCALDATE): self.__field_end=value else: self.__field_end=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,UINT): self.__field_repeat=value else: self.__field_repeat=UINT(value,**{'sizeinbytes': 1}) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_daybitmap(self): return self.__field_daybitmap.getvalue() def __setfield_daybitmap(self, value): if isinstance(value,UINT): self.__field_daybitmap=value else: self.__field_daybitmap=UINT(value,**{'sizeinbytes': 2}) def __delfield_daybitmap(self): del self.__field_daybitmap daybitmap=property(__getfield_daybitmap, __setfield_daybitmap, __delfield_daybitmap, "which days a weekly repeat event happens on") def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UINT): self.__field_pad2=value else: self.__field_pad2=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_alarmminutes(self): return self.__field_alarmminutes.getvalue() def __setfield_alarmminutes(self, value): if isinstance(value,UINT): self.__field_alarmminutes=value else: self.__field_alarmminutes=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmminutes(self): del self.__field_alarmminutes alarmminutes=property(__getfield_alarmminutes, __setfield_alarmminutes, __delfield_alarmminutes, "a value of 100 indicates not set") def __getfield_alarmhours(self): return self.__field_alarmhours.getvalue() def __setfield_alarmhours(self, value): if isinstance(value,UINT): self.__field_alarmhours=value else: self.__field_alarmhours=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmhours(self): del self.__field_alarmhours alarmhours=property(__getfield_alarmhours, __setfield_alarmhours, __delfield_alarmhours, "a value of 100 indicates not set") def __getfield_alarmtype(self): return self.__field_alarmtype.getvalue() def __setfield_alarmtype(self, value): if isinstance(value,UINT): self.__field_alarmtype=value else: self.__field_alarmtype=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmtype(self): del self.__field_alarmtype alarmtype=property(__getfield_alarmtype, __setfield_alarmtype, __delfield_alarmtype, "preset alarm reminder type") def __getfield_snoozedelay(self): try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_snoozedelay.getvalue() def __setfield_snoozedelay(self, value): if isinstance(value,UINT): self.__field_snoozedelay=value else: self.__field_snoozedelay=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_snoozedelay(self): del self.__field_snoozedelay snoozedelay=property(__getfield_snoozedelay, __setfield_snoozedelay, __delfield_snoozedelay, "in minutes, not for this phone") def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_description(self): return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,USTRING): self.__field_description=value else: self.__field_description=USTRING(value,**{'sizeinbytes': 39, 'raiseontruncate': False }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def iscontainer(self): return True def containerelements(self): yield ('packet_size', self.__field_packet_size, "Faster than packetsize()") yield ('pos', self.__field_pos, "position within file, used as an event id") yield ('start', self.__field_start, None) yield ('end', self.__field_end, None) yield ('repeat', self.__field_repeat, None) yield ('daybitmap', self.__field_daybitmap, "which days a weekly repeat event happens on") yield ('pad2', self.__field_pad2, None) yield ('alarmminutes', self.__field_alarmminutes, "a value of 100 indicates not set") yield ('alarmhours', self.__field_alarmhours, "a value of 100 indicates not set") yield ('alarmtype', self.__field_alarmtype, "preset alarm reminder type") yield ('snoozedelay', self.__field_snoozedelay, "in minutes, not for this phone") yield ('ringtone', self.__field_ringtone, None) yield ('description', self.__field_description, None) class schedulefile(BaseProtogenClass): __fields=['numactiveitems', 'events'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(schedulefile,self).__init__(**dict) if self.__class__ is schedulefile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(schedulefile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(schedulefile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{'elementclass': scheduleevent}) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('events', self.__field_events, None) class call(BaseProtogenClass): __fields=['GPStime', 'unknown1', 'duration', 'number', 'name', 'numberlength', 'unknown2', 'pbnumbertype', 'unknown3', 'pbentrynum'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(call,self).__init__(**dict) if self.__class__ is call: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(call,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(call,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_numberlength.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_pbnumbertype.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_pbentrynum.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 4}) self.__field_unknown1.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 36, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_numberlength=UINT(**{'sizeinbytes': 1}) self.__field_numberlength.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_pbnumbertype=UINT(**{'sizeinbytes': 1}) self.__field_pbnumbertype.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 2}) self.__field_unknown3.readfrombuffer(buf) self.__field_pbentrynum=UINT(**{'sizeinbytes': 1}) self.__field_pbentrynum.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 36, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numberlength(self): return self.__field_numberlength.getvalue() def __setfield_numberlength(self, value): if isinstance(value,UINT): self.__field_numberlength=value else: self.__field_numberlength=UINT(value,**{'sizeinbytes': 1}) def __delfield_numberlength(self): del self.__field_numberlength numberlength=property(__getfield_numberlength, __setfield_numberlength, __delfield_numberlength, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_pbnumbertype(self): return self.__field_pbnumbertype.getvalue() def __setfield_pbnumbertype(self, value): if isinstance(value,UINT): self.__field_pbnumbertype=value else: self.__field_pbnumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_pbnumbertype(self): del self.__field_pbnumbertype pbnumbertype=property(__getfield_pbnumbertype, __setfield_pbnumbertype, __delfield_pbnumbertype, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_pbentrynum(self): return self.__field_pbentrynum.getvalue() def __setfield_pbentrynum(self, value): if isinstance(value,UINT): self.__field_pbentrynum=value else: self.__field_pbentrynum=UINT(value,**{'sizeinbytes': 1}) def __delfield_pbentrynum(self): del self.__field_pbentrynum pbentrynum=property(__getfield_pbentrynum, __setfield_pbentrynum, __delfield_pbentrynum, None) def iscontainer(self): return True def containerelements(self): yield ('GPStime', self.__field_GPStime, None) yield ('unknown1', self.__field_unknown1, None) yield ('duration', self.__field_duration, None) yield ('number', self.__field_number, None) yield ('name', self.__field_name, None) yield ('numberlength', self.__field_numberlength, None) yield ('unknown2', self.__field_unknown2, None) yield ('pbnumbertype', self.__field_pbnumbertype, None) yield ('unknown3', self.__field_unknown3, None) yield ('pbentrynum', self.__field_pbentrynum, None) class callhistory(BaseProtogenClass): __fields=['numcalls', 'unknown1', 'calls'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callhistory,self).__init__(**dict) if self.__class__ is callhistory: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callhistory,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callhistory,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numcalls.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numcalls=UINT(**{'sizeinbytes': 4}) self.__field_numcalls.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numcalls(self): return self.__field_numcalls.getvalue() def __setfield_numcalls(self, value): if isinstance(value,UINT): self.__field_numcalls=value else: self.__field_numcalls=UINT(value,**{'sizeinbytes': 4}) def __delfield_numcalls(self): del self.__field_numcalls numcalls=property(__getfield_numcalls, __setfield_numcalls, __delfield_numcalls, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_calls(self): try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) return self.__field_calls.getvalue() def __setfield_calls(self, value): if isinstance(value,LIST): self.__field_calls=value else: self.__field_calls=LIST(value,**{'elementclass': call}) def __delfield_calls(self): del self.__field_calls calls=property(__getfield_calls, __setfield_calls, __delfield_calls, None) def iscontainer(self): return True def containerelements(self): yield ('numcalls', self.__field_numcalls, None) yield ('unknown1', self.__field_unknown1, None) yield ('calls', self.__field_calls, None) class msg_record(BaseProtogenClass): __fields=['unknown1', 'binary', 'unknown3', 'unknown4', 'unknown6', 'length', 'msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(msg_record,self).__init__(**dict) if self.__class__ is msg_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(msg_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(msg_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_binary.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_length.writetobuffer(buf) try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvi125_290, 'length': 219}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_binary=UINT(**{'sizeinbytes': 1}) self.__field_binary.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1}) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 1}) self.__field_unknown4.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 1}) self.__field_unknown6.readfrombuffer(buf) self.__field_length=UINT(**{'sizeinbytes': 1}) self.__field_length.readfrombuffer(buf) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvi125_290, 'length': 219}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_binary(self): return self.__field_binary.getvalue() def __setfield_binary(self, value): if isinstance(value,UINT): self.__field_binary=value else: self.__field_binary=UINT(value,**{'sizeinbytes': 1}) def __delfield_binary(self): del self.__field_binary binary=property(__getfield_binary, __setfield_binary, __delfield_binary, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_length(self): return self.__field_length.getvalue() def __setfield_length(self, value): if isinstance(value,UINT): self.__field_length=value else: self.__field_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_length(self): del self.__field_length length=property(__getfield_length, __setfield_length, __delfield_length, None) def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvi125_290, 'length': 219}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvi125_290, 'length': 219}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('binary', self.__field_binary, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) yield ('unknown6', self.__field_unknown6, None) yield ('length', self.__field_length, None) yield ('msg', self.__field_msg, None) class _gen_p_lgvi125_290(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvi125_290,self).__init__(**dict) if self.__class__ is _gen_p_lgvi125_290: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvi125_290,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvi125_290,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class recipient_record(BaseProtogenClass): __fields=['unknown1', 'number', 'status', 'timesent', 'timereceived', 'unknown2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(recipient_record,self).__init__(**dict) if self.__class__ is recipient_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(recipient_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(recipient_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_timereceived.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UINT(**{'sizeinbytes': 2}) self.__field_unknown1.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49}) self.__field_number.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_timereceived=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timereceived.readfrombuffer(buf) self.__field_unknown2=DATA(**{'sizeinbytes': 8}) self.__field_unknown2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_timereceived(self): return self.__field_timereceived.getvalue() def __setfield_timereceived(self, value): if isinstance(value,LGCALDATE): self.__field_timereceived=value else: self.__field_timereceived=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timereceived(self): del self.__field_timereceived timereceived=property(__getfield_timereceived, __setfield_timereceived, __delfield_timereceived, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,DATA): self.__field_unknown2=value else: self.__field_unknown2=DATA(value,**{'sizeinbytes': 8}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('number', self.__field_number, None) yield ('status', self.__field_status, None) yield ('timesent', self.__field_timesent, None) yield ('timereceived', self.__field_timereceived, None) yield ('unknown2', self.__field_unknown2, None) class sms_saved(BaseProtogenClass): __fields=['outboxmsg', 'pad', 'outbox', 'inbox'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_saved,self).__init__(**dict) if self.__class__ is sms_saved: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_saved,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_saved,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_outboxmsg.writetobuffer(buf) self.__field_pad.writetobuffer(buf) if self.outboxmsg: self.__field_outbox.writetobuffer(buf) if not self.outboxmsg: self.__field_inbox.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_outboxmsg=UINT(**{'sizeinbytes': 4}) self.__field_outboxmsg.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 4}) self.__field_pad.readfrombuffer(buf) if self.outboxmsg: self.__field_outbox=sms_out() self.__field_outbox.readfrombuffer(buf) if not self.outboxmsg: self.__field_inbox=sms_in() self.__field_inbox.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_outboxmsg(self): return self.__field_outboxmsg.getvalue() def __setfield_outboxmsg(self, value): if isinstance(value,UINT): self.__field_outboxmsg=value else: self.__field_outboxmsg=UINT(value,**{'sizeinbytes': 4}) def __delfield_outboxmsg(self): del self.__field_outboxmsg outboxmsg=property(__getfield_outboxmsg, __setfield_outboxmsg, __delfield_outboxmsg, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 4}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_outbox(self): return self.__field_outbox.getvalue() def __setfield_outbox(self, value): if isinstance(value,sms_out): self.__field_outbox=value else: self.__field_outbox=sms_out(value,) def __delfield_outbox(self): del self.__field_outbox outbox=property(__getfield_outbox, __setfield_outbox, __delfield_outbox, None) def __getfield_inbox(self): return self.__field_inbox.getvalue() def __setfield_inbox(self, value): if isinstance(value,sms_in): self.__field_inbox=value else: self.__field_inbox=sms_in(value,) def __delfield_inbox(self): del self.__field_inbox inbox=property(__getfield_inbox, __setfield_inbox, __delfield_inbox, None) def iscontainer(self): return True def containerelements(self): yield ('outboxmsg', self.__field_outboxmsg, None) yield ('pad', self.__field_pad, None) if self.outboxmsg: yield ('outbox', self.__field_outbox, None) if not self.outboxmsg: yield ('inbox', self.__field_inbox, None) class sms_out(BaseProtogenClass): __fields=['index', 'locked', 'unknown1', 'timesent', 'subject', 'unknown2', 'num_msg_elements', 'messages', 'unknown5', 'priority', 'unknown7', 'callback', 'recipients'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_out,self).__init__(**dict) if self.__class__ is sms_out: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_out,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_out,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 10}) self.__field_messages.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_unknown7.writetobuffer(buf) self.__field_callback.writetobuffer(buf) try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 10}) self.__field_recipients.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 3}) self.__field_unknown1.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21}) self.__field_subject.readfrombuffer(buf) self.__field_unknown2=DATA(**{'sizeinbytes': 151}) self.__field_unknown2.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 10}) self.__field_messages.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 1}) self.__field_unknown5.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_unknown7=DATA(**{'sizeinbytes': 14}) self.__field_unknown7.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 49}) self.__field_callback.readfrombuffer(buf) self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 10}) self.__field_recipients.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,DATA): self.__field_unknown2=value else: self.__field_unknown2=DATA(value,**{'sizeinbytes': 151}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_messages(self): try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 10}) return self.__field_messages.getvalue() def __setfield_messages(self, value): if isinstance(value,LIST): self.__field_messages=value else: self.__field_messages=LIST(value,**{'elementclass': msg_record, 'length': 10}) def __delfield_messages(self): del self.__field_messages messages=property(__getfield_messages, __setfield_messages, __delfield_messages, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_unknown7(self): return self.__field_unknown7.getvalue() def __setfield_unknown7(self, value): if isinstance(value,DATA): self.__field_unknown7=value else: self.__field_unknown7=DATA(value,**{'sizeinbytes': 14}) def __delfield_unknown7(self): del self.__field_unknown7 unknown7=property(__getfield_unknown7, __setfield_unknown7, __delfield_unknown7, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 49}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_recipients(self): try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 10}) return self.__field_recipients.getvalue() def __setfield_recipients(self, value): if isinstance(value,LIST): self.__field_recipients=value else: self.__field_recipients=LIST(value,**{'elementclass': recipient_record,'length': 10}) def __delfield_recipients(self): del self.__field_recipients recipients=property(__getfield_recipients, __setfield_recipients, __delfield_recipients, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('locked', self.__field_locked, None) yield ('unknown1', self.__field_unknown1, None) yield ('timesent', self.__field_timesent, None) yield ('subject', self.__field_subject, None) yield ('unknown2', self.__field_unknown2, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('messages', self.__field_messages, None) yield ('unknown5', self.__field_unknown5, None) yield ('priority', self.__field_priority, None) yield ('unknown7', self.__field_unknown7, None) yield ('callback', self.__field_callback, None) yield ('recipients', self.__field_recipients, None) class SMSINBOXMSGFRAGMENT(BaseProtogenClass): __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSINBOXMSGFRAGMENT,self).__init__(**dict) if self.__class__ is SMSINBOXMSGFRAGMENT: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSINBOXMSGFRAGMENT,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSINBOXMSGFRAGMENT,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvi125_325, 'length': 181} dict2.update(kwargs) kwargs=dict2 self.__field_msg=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvi125_325, 'length': 181}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvi125_325, 'length': 181}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvi125_325, 'length': 181}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvi125_325, 'length': 181}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class _gen_p_lgvi125_325(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvi125_325,self).__init__(**dict) if self.__class__ is _gen_p_lgvi125_325: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvi125_325,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvi125_325,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class sms_in(BaseProtogenClass): __fields=['msg_index1', 'msg_index2', 'unknown2', 'unknown3', 'timesent', 'unknown', 'callback_length', 'callback', 'sender_length', 'sender', 'unknown4', 'lg_time', 'GPStime', 'unknown5', 'read', 'locked', 'unknown8', 'priority', 'flags', 'subject', 'bin_header1', 'bin_header2', 'unknown6', 'multipartID', 'bin_header3', 'num_msg_elements', 'msglengths', 'msgs', 'unknown5', 'senders_name', 'unknown6'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_in,self).__init__(**dict) if self.__class__ is sms_in: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_in,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_in,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msg_index1.writetobuffer(buf) self.__field_msg_index2.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self.__field_callback_length.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_sender_length.writetobuffer(buf) try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvi125_338, 'length': 38}) self.__field_sender.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_lg_time.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_flags.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_bin_header1.writetobuffer(buf) self.__field_bin_header2.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_multipartID.writetobuffer(buf) self.__field_bin_header3.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvi125_356, 'length': 10}) self.__field_msglengths.writetobuffer(buf) try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_senders_name.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg_index1=UINT(**{'sizeinbytes': 4}) self.__field_msg_index1.readfrombuffer(buf) self.__field_msg_index2=UINT(**{'sizeinbytes': 4}) self.__field_msg_index2.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2}) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 4}) self.__field_unknown3.readfrombuffer(buf) self.__field_timesent=SMSDATE(**{'sizeinbytes': 6}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown=UINT(**{'sizeinbytes': 3}) self.__field_unknown.readfrombuffer(buf) self.__field_callback_length=UINT(**{'sizeinbytes': 1}) self.__field_callback_length.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 38}) self.__field_callback.readfrombuffer(buf) self.__field_sender_length=UINT(**{'sizeinbytes': 1}) self.__field_sender_length.readfrombuffer(buf) self.__field_sender=LIST(**{'elementclass': _gen_p_lgvi125_338, 'length': 38}) self.__field_sender.readfrombuffer(buf) self.__field_unknown4=DATA(**{'sizeinbytes': 15}) self.__field_unknown4.readfrombuffer(buf) self.__field_lg_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_lg_time.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 2}) self.__field_unknown5.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 1}) self.__field_read.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown8=UINT(**{'sizeinbytes': 2}) self.__field_unknown8.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_flags=DATA(**{'sizeinbytes': 5}) self.__field_flags.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21}) self.__field_subject.readfrombuffer(buf) self.__field_bin_header1=UINT(**{'sizeinbytes': 1}) self.__field_bin_header1.readfrombuffer(buf) self.__field_bin_header2=UINT(**{'sizeinbytes': 1}) self.__field_bin_header2.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 2}) self.__field_unknown6.readfrombuffer(buf) self.__field_multipartID=UINT(**{'sizeinbytes': 2}) self.__field_multipartID.readfrombuffer(buf) self.__field_bin_header3=UINT(**{'sizeinbytes': 1}) self.__field_bin_header3.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvi125_356, 'length': 10}) self.__field_msglengths.readfrombuffer(buf) self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.readfrombuffer(buf) self.__field_unknown5=DATA(**{'sizeinbytes': 437}) self.__field_unknown5.readfrombuffer(buf) self.__field_senders_name=USTRING(**{'sizeinbytes': 33}) self.__field_senders_name.readfrombuffer(buf) self.__field_unknown6=DATA(**{'sizeinbytes': 169}) self.__field_unknown6.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg_index1(self): return self.__field_msg_index1.getvalue() def __setfield_msg_index1(self, value): if isinstance(value,UINT): self.__field_msg_index1=value else: self.__field_msg_index1=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index1(self): del self.__field_msg_index1 msg_index1=property(__getfield_msg_index1, __setfield_msg_index1, __delfield_msg_index1, None) def __getfield_msg_index2(self): return self.__field_msg_index2.getvalue() def __setfield_msg_index2(self, value): if isinstance(value,UINT): self.__field_msg_index2=value else: self.__field_msg_index2=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index2(self): del self.__field_msg_index2 msg_index2=property(__getfield_msg_index2, __setfield_msg_index2, __delfield_msg_index2, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,SMSDATE): self.__field_timesent=value else: self.__field_timesent=SMSDATE(value,**{'sizeinbytes': 6}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UINT): self.__field_unknown=value else: self.__field_unknown=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def __getfield_callback_length(self): return self.__field_callback_length.getvalue() def __setfield_callback_length(self, value): if isinstance(value,UINT): self.__field_callback_length=value else: self.__field_callback_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_length(self): del self.__field_callback_length callback_length=property(__getfield_callback_length, __setfield_callback_length, __delfield_callback_length, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 38}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_sender_length(self): return self.__field_sender_length.getvalue() def __setfield_sender_length(self, value): if isinstance(value,UINT): self.__field_sender_length=value else: self.__field_sender_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_sender_length(self): del self.__field_sender_length sender_length=property(__getfield_sender_length, __setfield_sender_length, __delfield_sender_length, None) def __getfield_sender(self): try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvi125_338, 'length': 38}) return self.__field_sender.getvalue() def __setfield_sender(self, value): if isinstance(value,LIST): self.__field_sender=value else: self.__field_sender=LIST(value,**{'elementclass': _gen_p_lgvi125_338, 'length': 38}) def __delfield_sender(self): del self.__field_sender sender=property(__getfield_sender, __setfield_sender, __delfield_sender, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,DATA): self.__field_unknown4=value else: self.__field_unknown4=DATA(value,**{'sizeinbytes': 15}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_lg_time(self): return self.__field_lg_time.getvalue() def __setfield_lg_time(self, value): if isinstance(value,LGCALDATE): self.__field_lg_time=value else: self.__field_lg_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_lg_time(self): del self.__field_lg_time lg_time=property(__getfield_lg_time, __setfield_lg_time, __delfield_lg_time, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 1}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,UINT): self.__field_unknown8=value else: self.__field_unknown8=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_flags(self): return self.__field_flags.getvalue() def __setfield_flags(self, value): if isinstance(value,DATA): self.__field_flags=value else: self.__field_flags=DATA(value,**{'sizeinbytes': 5}) def __delfield_flags(self): del self.__field_flags flags=property(__getfield_flags, __setfield_flags, __delfield_flags, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_bin_header1(self): return self.__field_bin_header1.getvalue() def __setfield_bin_header1(self, value): if isinstance(value,UINT): self.__field_bin_header1=value else: self.__field_bin_header1=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header1(self): del self.__field_bin_header1 bin_header1=property(__getfield_bin_header1, __setfield_bin_header1, __delfield_bin_header1, None) def __getfield_bin_header2(self): return self.__field_bin_header2.getvalue() def __setfield_bin_header2(self, value): if isinstance(value,UINT): self.__field_bin_header2=value else: self.__field_bin_header2=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header2(self): del self.__field_bin_header2 bin_header2=property(__getfield_bin_header2, __setfield_bin_header2, __delfield_bin_header2, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_multipartID(self): return self.__field_multipartID.getvalue() def __setfield_multipartID(self, value): if isinstance(value,UINT): self.__field_multipartID=value else: self.__field_multipartID=UINT(value,**{'sizeinbytes': 2}) def __delfield_multipartID(self): del self.__field_multipartID multipartID=property(__getfield_multipartID, __setfield_multipartID, __delfield_multipartID, None) def __getfield_bin_header3(self): return self.__field_bin_header3.getvalue() def __setfield_bin_header3(self, value): if isinstance(value,UINT): self.__field_bin_header3=value else: self.__field_bin_header3=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header3(self): del self.__field_bin_header3 bin_header3=property(__getfield_bin_header3, __setfield_bin_header3, __delfield_bin_header3, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_msglengths(self): try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvi125_356, 'length': 10}) return self.__field_msglengths.getvalue() def __setfield_msglengths(self, value): if isinstance(value,LIST): self.__field_msglengths=value else: self.__field_msglengths=LIST(value,**{'elementclass': _gen_p_lgvi125_356, 'length': 10}) def __delfield_msglengths(self): del self.__field_msglengths msglengths=property(__getfield_msglengths, __setfield_msglengths, __delfield_msglengths, None) def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,DATA): self.__field_unknown5=value else: self.__field_unknown5=DATA(value,**{'sizeinbytes': 437}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_senders_name(self): return self.__field_senders_name.getvalue() def __setfield_senders_name(self, value): if isinstance(value,USTRING): self.__field_senders_name=value else: self.__field_senders_name=USTRING(value,**{'sizeinbytes': 33}) def __delfield_senders_name(self): del self.__field_senders_name senders_name=property(__getfield_senders_name, __setfield_senders_name, __delfield_senders_name, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,DATA): self.__field_unknown6=value else: self.__field_unknown6=DATA(value,**{'sizeinbytes': 169}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def iscontainer(self): return True def containerelements(self): yield ('msg_index1', self.__field_msg_index1, None) yield ('msg_index2', self.__field_msg_index2, None) yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) yield ('timesent', self.__field_timesent, None) yield ('unknown', self.__field_unknown, None) yield ('callback_length', self.__field_callback_length, None) yield ('callback', self.__field_callback, None) yield ('sender_length', self.__field_sender_length, None) yield ('sender', self.__field_sender, None) yield ('unknown4', self.__field_unknown4, None) yield ('lg_time', self.__field_lg_time, None) yield ('GPStime', self.__field_GPStime, None) yield ('unknown5', self.__field_unknown5, None) yield ('read', self.__field_read, None) yield ('locked', self.__field_locked, None) yield ('unknown8', self.__field_unknown8, None) yield ('priority', self.__field_priority, None) yield ('flags', self.__field_flags, None) yield ('subject', self.__field_subject, None) yield ('bin_header1', self.__field_bin_header1, None) yield ('bin_header2', self.__field_bin_header2, None) yield ('unknown6', self.__field_unknown6, None) yield ('multipartID', self.__field_multipartID, None) yield ('bin_header3', self.__field_bin_header3, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('msglengths', self.__field_msglengths, None) yield ('msgs', self.__field_msgs, None) yield ('unknown5', self.__field_unknown5, None) yield ('senders_name', self.__field_senders_name, None) yield ('unknown6', self.__field_unknown6, None) class _gen_p_lgvi125_338(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvi125_338,self).__init__(**dict) if self.__class__ is _gen_p_lgvi125_338: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvi125_338,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvi125_338,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of senders phone number") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of senders phone number") class _gen_p_lgvi125_356(BaseProtogenClass): 'Anonymous inner class' __fields=['msglength'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvi125_356,self).__init__(**dict) if self.__class__ is _gen_p_lgvi125_356: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvi125_356,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvi125_356,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_msglength=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msglength.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msglength=UINT(**{'sizeinbytes': 1}) self.__field_msglength.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msglength(self): return self.__field_msglength.getvalue() def __setfield_msglength(self, value): if isinstance(value,UINT): self.__field_msglength=value else: self.__field_msglength=UINT(value,**{'sizeinbytes': 1}) def __delfield_msglength(self): del self.__field_msglength msglength=property(__getfield_msglength, __setfield_msglength, __delfield_msglength, "lengths of individual messages in septets") def iscontainer(self): return True def containerelements(self): yield ('msglength', self.__field_msglength, "lengths of individual messages in septets") class sms_quick_text(BaseProtogenClass): __fields=['msgs'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_quick_text,self).__init__(**dict) if self.__class__ is sms_quick_text: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_quick_text,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_quick_text,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvi125_372, } dict2.update(kwargs) kwargs=dict2 self.__field_msgs=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvi125_372, }) self.__field_msgs.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvi125_372, }) self.__field_msgs.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lgvi125_372, }) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'elementclass': _gen_p_lgvi125_372, }) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def iscontainer(self): return True def containerelements(self): yield ('msgs', self.__field_msgs, None) class _gen_p_lgvi125_372(BaseProtogenClass): 'Anonymous inner class' __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvi125_372,self).__init__(**dict) if self.__class__ is _gen_p_lgvi125_372: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvi125_372,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvi125_372,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_msg=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=USTRING(**{}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) bitpim-1.0.7+dfsg1/src/phones/p_samsungscha650.py0000644001616600161660000015742410466234100017703 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE # Text in this block is placed in the output file from prototypes import * max_pb_slots=501 max_pb_entries=534 user_pb_entry_range=xrange(1, 501) max_number_entries=501 max_ringtone_entries=20 max_image_entries=10 slot_file_name='nvm/nvm/pclink_tbl' pb_file_name='nvm/nvm/dial_tbl' number_file_name='nvm/nvm/dial' ringtone_index_file_name='nvm/nvm/brew_melody' ringtone_file_path='user/sound/ringer' image_index_file_name='nvm/nvm/brew_image' image_file_path='nvm/brew/shared' # map all UINT fields to lsb version UINT=UINTlsb BOOL=BOOLlsb class pbslot(BaseProtogenClass): __fields=['c0', 'pbbook_index', 'status', 'timestamp'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbslot,self).__init__(**dict) if self.__class__ is pbslot: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbslot,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbslot,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_c0.writetobuffer(buf) self.__field_pbbook_index.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_timestamp.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_c0=UINT(**{'sizeinbytes': 1}) self.__field_c0.readfrombuffer(buf) self.__field_pbbook_index=UINT(**{'sizeinbytes': 2}) self.__field_pbbook_index.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_timestamp=LIST(**{'elementclass': _gen_p_samsungscha650_41, 'length': 4 }) self.__field_timestamp.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_c0(self): return self.__field_c0.getvalue() def __setfield_c0(self, value): if isinstance(value,UINT): self.__field_c0=value else: self.__field_c0=UINT(value,**{'sizeinbytes': 1}) def __delfield_c0(self): del self.__field_c0 c0=property(__getfield_c0, __setfield_c0, __delfield_c0, None) def __getfield_pbbook_index(self): return self.__field_pbbook_index.getvalue() def __setfield_pbbook_index(self, value): if isinstance(value,UINT): self.__field_pbbook_index=value else: self.__field_pbbook_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_pbbook_index(self): del self.__field_pbbook_index pbbook_index=property(__getfield_pbbook_index, __setfield_pbbook_index, __delfield_pbbook_index, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_timestamp(self): return self.__field_timestamp.getvalue() def __setfield_timestamp(self, value): if isinstance(value,LIST): self.__field_timestamp=value else: self.__field_timestamp=LIST(value,**{'elementclass': _gen_p_samsungscha650_41, 'length': 4 }) def __delfield_timestamp(self): del self.__field_timestamp timestamp=property(__getfield_timestamp, __setfield_timestamp, __delfield_timestamp, None) def iscontainer(self): return True def containerelements(self): yield ('c0', self.__field_c0, None) yield ('pbbook_index', self.__field_pbbook_index, None) yield ('status', self.__field_status, None) yield ('timestamp', self.__field_timestamp, None) class _gen_p_samsungscha650_41(BaseProtogenClass): 'Anonymous inner class' __fields=['t'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_samsungscha650_41,self).__init__(**dict) if self.__class__ is _gen_p_samsungscha650_41: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_samsungscha650_41,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_samsungscha650_41,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_t=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_t.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_t=UINT(**{'sizeinbytes': 1}) self.__field_t.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_t(self): return self.__field_t.getvalue() def __setfield_t(self, value): if isinstance(value,UINT): self.__field_t=value else: self.__field_t=UINT(value,**{'sizeinbytes': 1}) def __delfield_t(self): del self.__field_t t=property(__getfield_t, __setfield_t, __delfield_t, None) def iscontainer(self): return True def containerelements(self): yield ('t', self.__field_t, None) class pbslots(BaseProtogenClass): __fields=['slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbslots,self).__init__(**dict) if self.__class__ is pbslots: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbslots,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbslots,kwargs) if len(args): dict2={ 'length': max_pb_slots, 'elementclass': pbslot } dict2.update(kwargs) kwargs=dict2 self.__field_slot=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_slot except: self.__field_slot=LIST(**{ 'length': max_pb_slots, 'elementclass': pbslot }) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=LIST(**{ 'length': max_pb_slots, 'elementclass': pbslot }) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): try: self.__field_slot except: self.__field_slot=LIST(**{ 'length': max_pb_slots, 'elementclass': pbslot }) return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,LIST): self.__field_slot=value else: self.__field_slot=LIST(value,**{ 'length': max_pb_slots, 'elementclass': pbslot }) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) class pbentry(BaseProtogenClass): __fields=['c0', 'mem_index', 'c3', 'speed_dial_index', 'home_num_index', 'office_num_index', 'mobile_num_index', 'pager_num_index', 'fax_num_index', 'alias_num_index', 'unused_index', 'email_index', 'name', 'c4', 'ringer_type', 'group_num', 'c5'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_c0.writetobuffer(buf) self.__field_mem_index.writetobuffer(buf) self.__field_c3.writetobuffer(buf) self.__field_speed_dial_index.writetobuffer(buf) self.__field_home_num_index.writetobuffer(buf) self.__field_office_num_index.writetobuffer(buf) self.__field_mobile_num_index.writetobuffer(buf) self.__field_pager_num_index.writetobuffer(buf) self.__field_fax_num_index.writetobuffer(buf) self.__field_alias_num_index.writetobuffer(buf) self.__field_unused_index.writetobuffer(buf) self.__field_email_index.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_c4.writetobuffer(buf) self.__field_ringer_type.writetobuffer(buf) self.__field_group_num.writetobuffer(buf) try: self.__field_c5 except: self.__field_c5=LIST(**{'elementclass': _gen_p_samsungscha650_64, 'length': 7 }) self.__field_c5.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_c0=UINT(**{'sizeinbytes': 1}) self.__field_c0.readfrombuffer(buf) self.__field_mem_index=UINT(**{'sizeinbytes': 2}) self.__field_mem_index.readfrombuffer(buf) self.__field_c3=UINT(**{'sizeinbytes': 1}) self.__field_c3.readfrombuffer(buf) self.__field_speed_dial_index=UINT(**{'sizeinbytes': 2}) self.__field_speed_dial_index.readfrombuffer(buf) self.__field_home_num_index=UINT(**{'sizeinbytes': 2}) self.__field_home_num_index.readfrombuffer(buf) self.__field_office_num_index=UINT(**{'sizeinbytes': 2}) self.__field_office_num_index.readfrombuffer(buf) self.__field_mobile_num_index=UINT(**{'sizeinbytes': 2}) self.__field_mobile_num_index.readfrombuffer(buf) self.__field_pager_num_index=UINT(**{'sizeinbytes': 2}) self.__field_pager_num_index.readfrombuffer(buf) self.__field_fax_num_index=UINT(**{'sizeinbytes': 2}) self.__field_fax_num_index.readfrombuffer(buf) self.__field_alias_num_index=UINT(**{'sizeinbytes': 2}) self.__field_alias_num_index.readfrombuffer(buf) self.__field_unused_index=UINT(**{'sizeinbytes': 2}) self.__field_unused_index.readfrombuffer(buf) self.__field_email_index=UINT(**{'sizeinbytes': 2}) self.__field_email_index.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 22, 'raiseonunterminatedread': False }) self.__field_name.readfrombuffer(buf) self.__field_c4=UINT(**{'sizeinbytes': 1}) self.__field_c4.readfrombuffer(buf) self.__field_ringer_type=UINT(**{'sizeinbytes': 1}) self.__field_ringer_type.readfrombuffer(buf) self.__field_group_num=UINT(**{'sizeinbytes': 1}) self.__field_group_num.readfrombuffer(buf) self.__field_c5=LIST(**{'elementclass': _gen_p_samsungscha650_64, 'length': 7 }) self.__field_c5.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_c0(self): return self.__field_c0.getvalue() def __setfield_c0(self, value): if isinstance(value,UINT): self.__field_c0=value else: self.__field_c0=UINT(value,**{'sizeinbytes': 1}) def __delfield_c0(self): del self.__field_c0 c0=property(__getfield_c0, __setfield_c0, __delfield_c0, None) def __getfield_mem_index(self): return self.__field_mem_index.getvalue() def __setfield_mem_index(self, value): if isinstance(value,UINT): self.__field_mem_index=value else: self.__field_mem_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_mem_index(self): del self.__field_mem_index mem_index=property(__getfield_mem_index, __setfield_mem_index, __delfield_mem_index, None) def __getfield_c3(self): return self.__field_c3.getvalue() def __setfield_c3(self, value): if isinstance(value,UINT): self.__field_c3=value else: self.__field_c3=UINT(value,**{'sizeinbytes': 1}) def __delfield_c3(self): del self.__field_c3 c3=property(__getfield_c3, __setfield_c3, __delfield_c3, None) def __getfield_speed_dial_index(self): return self.__field_speed_dial_index.getvalue() def __setfield_speed_dial_index(self, value): if isinstance(value,UINT): self.__field_speed_dial_index=value else: self.__field_speed_dial_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_speed_dial_index(self): del self.__field_speed_dial_index speed_dial_index=property(__getfield_speed_dial_index, __setfield_speed_dial_index, __delfield_speed_dial_index, None) def __getfield_home_num_index(self): return self.__field_home_num_index.getvalue() def __setfield_home_num_index(self, value): if isinstance(value,UINT): self.__field_home_num_index=value else: self.__field_home_num_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_home_num_index(self): del self.__field_home_num_index home_num_index=property(__getfield_home_num_index, __setfield_home_num_index, __delfield_home_num_index, None) def __getfield_office_num_index(self): return self.__field_office_num_index.getvalue() def __setfield_office_num_index(self, value): if isinstance(value,UINT): self.__field_office_num_index=value else: self.__field_office_num_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_office_num_index(self): del self.__field_office_num_index office_num_index=property(__getfield_office_num_index, __setfield_office_num_index, __delfield_office_num_index, None) def __getfield_mobile_num_index(self): return self.__field_mobile_num_index.getvalue() def __setfield_mobile_num_index(self, value): if isinstance(value,UINT): self.__field_mobile_num_index=value else: self.__field_mobile_num_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_mobile_num_index(self): del self.__field_mobile_num_index mobile_num_index=property(__getfield_mobile_num_index, __setfield_mobile_num_index, __delfield_mobile_num_index, None) def __getfield_pager_num_index(self): return self.__field_pager_num_index.getvalue() def __setfield_pager_num_index(self, value): if isinstance(value,UINT): self.__field_pager_num_index=value else: self.__field_pager_num_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_pager_num_index(self): del self.__field_pager_num_index pager_num_index=property(__getfield_pager_num_index, __setfield_pager_num_index, __delfield_pager_num_index, None) def __getfield_fax_num_index(self): return self.__field_fax_num_index.getvalue() def __setfield_fax_num_index(self, value): if isinstance(value,UINT): self.__field_fax_num_index=value else: self.__field_fax_num_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_fax_num_index(self): del self.__field_fax_num_index fax_num_index=property(__getfield_fax_num_index, __setfield_fax_num_index, __delfield_fax_num_index, None) def __getfield_alias_num_index(self): return self.__field_alias_num_index.getvalue() def __setfield_alias_num_index(self, value): if isinstance(value,UINT): self.__field_alias_num_index=value else: self.__field_alias_num_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_alias_num_index(self): del self.__field_alias_num_index alias_num_index=property(__getfield_alias_num_index, __setfield_alias_num_index, __delfield_alias_num_index, None) def __getfield_unused_index(self): return self.__field_unused_index.getvalue() def __setfield_unused_index(self, value): if isinstance(value,UINT): self.__field_unused_index=value else: self.__field_unused_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_unused_index(self): del self.__field_unused_index unused_index=property(__getfield_unused_index, __setfield_unused_index, __delfield_unused_index, None) def __getfield_email_index(self): return self.__field_email_index.getvalue() def __setfield_email_index(self, value): if isinstance(value,UINT): self.__field_email_index=value else: self.__field_email_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_email_index(self): del self.__field_email_index email_index=property(__getfield_email_index, __setfield_email_index, __delfield_email_index, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 22, 'raiseonunterminatedread': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_c4(self): return self.__field_c4.getvalue() def __setfield_c4(self, value): if isinstance(value,UINT): self.__field_c4=value else: self.__field_c4=UINT(value,**{'sizeinbytes': 1}) def __delfield_c4(self): del self.__field_c4 c4=property(__getfield_c4, __setfield_c4, __delfield_c4, None) def __getfield_ringer_type(self): return self.__field_ringer_type.getvalue() def __setfield_ringer_type(self, value): if isinstance(value,UINT): self.__field_ringer_type=value else: self.__field_ringer_type=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringer_type(self): del self.__field_ringer_type ringer_type=property(__getfield_ringer_type, __setfield_ringer_type, __delfield_ringer_type, None) def __getfield_group_num(self): return self.__field_group_num.getvalue() def __setfield_group_num(self, value): if isinstance(value,UINT): self.__field_group_num=value else: self.__field_group_num=UINT(value,**{'sizeinbytes': 1}) def __delfield_group_num(self): del self.__field_group_num group_num=property(__getfield_group_num, __setfield_group_num, __delfield_group_num, None) def __getfield_c5(self): try: self.__field_c5 except: self.__field_c5=LIST(**{'elementclass': _gen_p_samsungscha650_64, 'length': 7 }) return self.__field_c5.getvalue() def __setfield_c5(self, value): if isinstance(value,LIST): self.__field_c5=value else: self.__field_c5=LIST(value,**{'elementclass': _gen_p_samsungscha650_64, 'length': 7 }) def __delfield_c5(self): del self.__field_c5 c5=property(__getfield_c5, __setfield_c5, __delfield_c5, None) def iscontainer(self): return True def containerelements(self): yield ('c0', self.__field_c0, None) yield ('mem_index', self.__field_mem_index, None) yield ('c3', self.__field_c3, None) yield ('speed_dial_index', self.__field_speed_dial_index, None) yield ('home_num_index', self.__field_home_num_index, None) yield ('office_num_index', self.__field_office_num_index, None) yield ('mobile_num_index', self.__field_mobile_num_index, None) yield ('pager_num_index', self.__field_pager_num_index, None) yield ('fax_num_index', self.__field_fax_num_index, None) yield ('alias_num_index', self.__field_alias_num_index, None) yield ('unused_index', self.__field_unused_index, None) yield ('email_index', self.__field_email_index, None) yield ('name', self.__field_name, None) yield ('c4', self.__field_c4, None) yield ('ringer_type', self.__field_ringer_type, None) yield ('group_num', self.__field_group_num, None) yield ('c5', self.__field_c5, None) class _gen_p_samsungscha650_64(BaseProtogenClass): 'Anonymous inner class' __fields=['c5'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_samsungscha650_64,self).__init__(**dict) if self.__class__ is _gen_p_samsungscha650_64: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_samsungscha650_64,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_samsungscha650_64,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_c5=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_c5.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_c5=UINT(**{'sizeinbytes': 1}) self.__field_c5.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_c5(self): return self.__field_c5.getvalue() def __setfield_c5(self, value): if isinstance(value,UINT): self.__field_c5=value else: self.__field_c5=UINT(value,**{'sizeinbytes': 1}) def __delfield_c5(self): del self.__field_c5 c5=property(__getfield_c5, __setfield_c5, __delfield_c5, None) def iscontainer(self): return True def containerelements(self): yield ('c5', self.__field_c5, None) class pbbook(BaseProtogenClass): __fields=['entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbbook,self).__init__(**dict) if self.__class__ is pbbook: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbbook,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbbook,kwargs) if len(args): dict2={ 'length': max_pb_entries, 'elementclass': pbentry } dict2.update(kwargs) kwargs=dict2 self.__field_entry=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry except: self.__field_entry=LIST(**{ 'length': max_pb_entries, 'elementclass': pbentry }) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry=LIST(**{ 'length': max_pb_entries, 'elementclass': pbentry }) self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=LIST(**{ 'length': max_pb_entries, 'elementclass': pbentry }) return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,LIST): self.__field_entry=value else: self.__field_entry=LIST(value,**{ 'length': max_pb_entries, 'elementclass': pbentry }) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('entry', self.__field_entry, None) class number(BaseProtogenClass): __fields=['valid', 'type', 'length', 'name', 'pb_index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(number,self).__init__(**dict) if self.__class__ is number: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(number,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(number,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_valid.writetobuffer(buf) self.__field_type.writetobuffer(buf) self.__field_length.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_pb_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_valid=UINT(**{'sizeinbytes': 2}) self.__field_valid.readfrombuffer(buf) self.__field_type=UINT(**{'sizeinbytes': 2}) self.__field_type.readfrombuffer(buf) self.__field_length=UINT(**{'sizeinbytes': 1}) self.__field_length.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False }) self.__field_name.readfrombuffer(buf) self.__field_pb_index=UINT(**{'sizeinbytes': 2}) self.__field_pb_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_valid(self): return self.__field_valid.getvalue() def __setfield_valid(self, value): if isinstance(value,UINT): self.__field_valid=value else: self.__field_valid=UINT(value,**{'sizeinbytes': 2}) def __delfield_valid(self): del self.__field_valid valid=property(__getfield_valid, __setfield_valid, __delfield_valid, None) def __getfield_type(self): return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,UINT): self.__field_type=value else: self.__field_type=UINT(value,**{'sizeinbytes': 2}) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, None) def __getfield_length(self): return self.__field_length.getvalue() def __setfield_length(self, value): if isinstance(value,UINT): self.__field_length=value else: self.__field_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_length(self): del self.__field_length length=property(__getfield_length, __setfield_length, __delfield_length, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_pb_index(self): return self.__field_pb_index.getvalue() def __setfield_pb_index(self, value): if isinstance(value,UINT): self.__field_pb_index=value else: self.__field_pb_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_pb_index(self): del self.__field_pb_index pb_index=property(__getfield_pb_index, __setfield_pb_index, __delfield_pb_index, None) def iscontainer(self): return True def containerelements(self): yield ('valid', self.__field_valid, None) yield ('type', self.__field_type, None) yield ('length', self.__field_length, None) yield ('name', self.__field_name, None) yield ('pb_index', self.__field_pb_index, None) class numbers(BaseProtogenClass): __fields=['entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(numbers,self).__init__(**dict) if self.__class__ is numbers: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(numbers,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(numbers,kwargs) if len(args): dict2={ 'length': max_number_entries, 'elementclass': number } dict2.update(kwargs) kwargs=dict2 self.__field_entry=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry except: self.__field_entry=LIST(**{ 'length': max_number_entries, 'elementclass': number }) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry=LIST(**{ 'length': max_number_entries, 'elementclass': number }) self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=LIST(**{ 'length': max_number_entries, 'elementclass': number }) return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,LIST): self.__field_entry=value else: self.__field_entry=LIST(value,**{ 'length': max_number_entries, 'elementclass': number }) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('entry', self.__field_entry, None) class ringtone(BaseProtogenClass): __fields=['c0', 'index', 'c1', 'assignment', 'c2', 'name', 'name_len', 'file_name', 'file_name_len', 'c3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ringtone,self).__init__(**dict) if self.__class__ is ringtone: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ringtone,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ringtone,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_c0.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_c1.writetobuffer(buf) self.__field_assignment.writetobuffer(buf) self.__field_c2.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_name_len.writetobuffer(buf) self.__field_file_name.writetobuffer(buf) self.__field_file_name_len.writetobuffer(buf) self.__field_c3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_c0=UINT(**{'sizeinbytes': 1}) self.__field_c0.readfrombuffer(buf) self.__field_index=UINT(**{'sizeinbytes': 1}) self.__field_index.readfrombuffer(buf) self.__field_c1=UINT(**{'sizeinbytes': 1}) self.__field_c1.readfrombuffer(buf) self.__field_assignment=UINT(**{'sizeinbytes': 1}) self.__field_assignment.readfrombuffer(buf) self.__field_c2=UINT(**{'sizeinbytes': 1}) self.__field_c2.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 17, 'raiseonunterminatedread': False }) self.__field_name.readfrombuffer(buf) self.__field_name_len=UINT(**{'sizeinbytes': 1}) self.__field_name_len.readfrombuffer(buf) self.__field_file_name=USTRING(**{'sizeinbytes': 46, 'raiseonunterminatedread': False }) self.__field_file_name.readfrombuffer(buf) self.__field_file_name_len=UINT(**{'sizeinbytes': 1}) self.__field_file_name_len.readfrombuffer(buf) self.__field_c3=UINT(**{'sizeinbytes': 2}) self.__field_c3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_c0(self): return self.__field_c0.getvalue() def __setfield_c0(self, value): if isinstance(value,UINT): self.__field_c0=value else: self.__field_c0=UINT(value,**{'sizeinbytes': 1}) def __delfield_c0(self): del self.__field_c0 c0=property(__getfield_c0, __setfield_c0, __delfield_c0, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 1}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_c1(self): return self.__field_c1.getvalue() def __setfield_c1(self, value): if isinstance(value,UINT): self.__field_c1=value else: self.__field_c1=UINT(value,**{'sizeinbytes': 1}) def __delfield_c1(self): del self.__field_c1 c1=property(__getfield_c1, __setfield_c1, __delfield_c1, None) def __getfield_assignment(self): return self.__field_assignment.getvalue() def __setfield_assignment(self, value): if isinstance(value,UINT): self.__field_assignment=value else: self.__field_assignment=UINT(value,**{'sizeinbytes': 1}) def __delfield_assignment(self): del self.__field_assignment assignment=property(__getfield_assignment, __setfield_assignment, __delfield_assignment, None) def __getfield_c2(self): return self.__field_c2.getvalue() def __setfield_c2(self, value): if isinstance(value,UINT): self.__field_c2=value else: self.__field_c2=UINT(value,**{'sizeinbytes': 1}) def __delfield_c2(self): del self.__field_c2 c2=property(__getfield_c2, __setfield_c2, __delfield_c2, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 17, 'raiseonunterminatedread': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_name_len(self): return self.__field_name_len.getvalue() def __setfield_name_len(self, value): if isinstance(value,UINT): self.__field_name_len=value else: self.__field_name_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_name_len(self): del self.__field_name_len name_len=property(__getfield_name_len, __setfield_name_len, __delfield_name_len, None) def __getfield_file_name(self): return self.__field_file_name.getvalue() def __setfield_file_name(self, value): if isinstance(value,USTRING): self.__field_file_name=value else: self.__field_file_name=USTRING(value,**{'sizeinbytes': 46, 'raiseonunterminatedread': False }) def __delfield_file_name(self): del self.__field_file_name file_name=property(__getfield_file_name, __setfield_file_name, __delfield_file_name, None) def __getfield_file_name_len(self): return self.__field_file_name_len.getvalue() def __setfield_file_name_len(self, value): if isinstance(value,UINT): self.__field_file_name_len=value else: self.__field_file_name_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_file_name_len(self): del self.__field_file_name_len file_name_len=property(__getfield_file_name_len, __setfield_file_name_len, __delfield_file_name_len, None) def __getfield_c3(self): return self.__field_c3.getvalue() def __setfield_c3(self, value): if isinstance(value,UINT): self.__field_c3=value else: self.__field_c3=UINT(value,**{'sizeinbytes': 2}) def __delfield_c3(self): del self.__field_c3 c3=property(__getfield_c3, __setfield_c3, __delfield_c3, None) def iscontainer(self): return True def containerelements(self): yield ('c0', self.__field_c0, None) yield ('index', self.__field_index, None) yield ('c1', self.__field_c1, None) yield ('assignment', self.__field_assignment, None) yield ('c2', self.__field_c2, None) yield ('name', self.__field_name, None) yield ('name_len', self.__field_name_len, None) yield ('file_name', self.__field_file_name, None) yield ('file_name_len', self.__field_file_name_len, None) yield ('c3', self.__field_c3, None) class ringtones(BaseProtogenClass): __fields=['entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ringtones,self).__init__(**dict) if self.__class__ is ringtones: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ringtones,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ringtones,kwargs) if len(args): dict2={ 'length': max_ringtone_entries, 'elementclass': ringtone } dict2.update(kwargs) kwargs=dict2 self.__field_entry=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry=LIST(**{ 'length': max_ringtone_entries, 'elementclass': ringtone }) self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,LIST): self.__field_entry=value else: self.__field_entry=LIST(value,**{ 'length': max_ringtone_entries, 'elementclass': ringtone }) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('entry', self.__field_entry, None) class image(BaseProtogenClass): __fields=['c0', 'index', 'c1', 'assignment', 'name', 'name_len', 'file_name', 'file_name_len', 'c2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(image,self).__init__(**dict) if self.__class__ is image: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(image,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(image,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_c0.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_c1.writetobuffer(buf) self.__field_assignment.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_name_len.writetobuffer(buf) self.__field_file_name.writetobuffer(buf) self.__field_file_name_len.writetobuffer(buf) self.__field_c2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_c0=UINT(**{'sizeinbytes': 1}) self.__field_c0.readfrombuffer(buf) self.__field_index=UINT(**{'sizeinbytes': 1}) self.__field_index.readfrombuffer(buf) self.__field_c1=UINT(**{'sizeinbytes': 1}) self.__field_c1.readfrombuffer(buf) self.__field_assignment=UINT(**{'sizeinbytes': 1}) self.__field_assignment.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 17, 'raiseonunterminatedread': False }) self.__field_name.readfrombuffer(buf) self.__field_name_len=UINT(**{'sizeinbytes': 1}) self.__field_name_len.readfrombuffer(buf) self.__field_file_name=USTRING(**{'sizeinbytes': 46, 'raiseonunterminatedread': False }) self.__field_file_name.readfrombuffer(buf) self.__field_file_name_len=UINT(**{'sizeinbytes': 1}) self.__field_file_name_len.readfrombuffer(buf) self.__field_c2=UINT(**{'sizeinbytes': 2}) self.__field_c2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_c0(self): return self.__field_c0.getvalue() def __setfield_c0(self, value): if isinstance(value,UINT): self.__field_c0=value else: self.__field_c0=UINT(value,**{'sizeinbytes': 1}) def __delfield_c0(self): del self.__field_c0 c0=property(__getfield_c0, __setfield_c0, __delfield_c0, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 1}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_c1(self): return self.__field_c1.getvalue() def __setfield_c1(self, value): if isinstance(value,UINT): self.__field_c1=value else: self.__field_c1=UINT(value,**{'sizeinbytes': 1}) def __delfield_c1(self): del self.__field_c1 c1=property(__getfield_c1, __setfield_c1, __delfield_c1, None) def __getfield_assignment(self): return self.__field_assignment.getvalue() def __setfield_assignment(self, value): if isinstance(value,UINT): self.__field_assignment=value else: self.__field_assignment=UINT(value,**{'sizeinbytes': 1}) def __delfield_assignment(self): del self.__field_assignment assignment=property(__getfield_assignment, __setfield_assignment, __delfield_assignment, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 17, 'raiseonunterminatedread': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_name_len(self): return self.__field_name_len.getvalue() def __setfield_name_len(self, value): if isinstance(value,UINT): self.__field_name_len=value else: self.__field_name_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_name_len(self): del self.__field_name_len name_len=property(__getfield_name_len, __setfield_name_len, __delfield_name_len, None) def __getfield_file_name(self): return self.__field_file_name.getvalue() def __setfield_file_name(self, value): if isinstance(value,USTRING): self.__field_file_name=value else: self.__field_file_name=USTRING(value,**{'sizeinbytes': 46, 'raiseonunterminatedread': False }) def __delfield_file_name(self): del self.__field_file_name file_name=property(__getfield_file_name, __setfield_file_name, __delfield_file_name, None) def __getfield_file_name_len(self): return self.__field_file_name_len.getvalue() def __setfield_file_name_len(self, value): if isinstance(value,UINT): self.__field_file_name_len=value else: self.__field_file_name_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_file_name_len(self): del self.__field_file_name_len file_name_len=property(__getfield_file_name_len, __setfield_file_name_len, __delfield_file_name_len, None) def __getfield_c2(self): return self.__field_c2.getvalue() def __setfield_c2(self, value): if isinstance(value,UINT): self.__field_c2=value else: self.__field_c2=UINT(value,**{'sizeinbytes': 2}) def __delfield_c2(self): del self.__field_c2 c2=property(__getfield_c2, __setfield_c2, __delfield_c2, None) def iscontainer(self): return True def containerelements(self): yield ('c0', self.__field_c0, None) yield ('index', self.__field_index, None) yield ('c1', self.__field_c1, None) yield ('assignment', self.__field_assignment, None) yield ('name', self.__field_name, None) yield ('name_len', self.__field_name_len, None) yield ('file_name', self.__field_file_name, None) yield ('file_name_len', self.__field_file_name_len, None) yield ('c2', self.__field_c2, None) class images(BaseProtogenClass): __fields=['entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(images,self).__init__(**dict) if self.__class__ is images: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(images,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(images,kwargs) if len(args): dict2={ 'length': max_image_entries, 'elementclass': image } dict2.update(kwargs) kwargs=dict2 self.__field_entry=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry=LIST(**{ 'length': max_image_entries, 'elementclass': image }) self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,LIST): self.__field_entry=value else: self.__field_entry=LIST(value,**{ 'length': max_image_entries, 'elementclass': image }) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('entry', self.__field_entry, None) bitpim-1.0.7+dfsg1/src/phones/p_samsungscha670.py0000644001616600161660000005071010466234100017673 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE # Text in this block is placed in the output file from prototypes import * max_ringtone_entries=40 max_image_entries=30 ringtone_index_file_name='nvm/nvm/brew_melody' ringtone_file_path='brew/ringer' image_index_file_name='nvm/nvm/brew_image' image_file_path='brew/shared' cam_pix_file_path='digital_cam' mms_image_path='mms_image' # map all UINT fields to lsb version UINT=UINTlsb BOOL=BOOLlsb class ringtone(BaseProtogenClass): __fields=['c0', 'index', 'c1', 'assignment', 'c2', 'name', 'name_len', 'file_name', 'file_name_len', 'c3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ringtone,self).__init__(**dict) if self.__class__ is ringtone: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ringtone,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ringtone,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_c0.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_c1.writetobuffer(buf) self.__field_assignment.writetobuffer(buf) self.__field_c2.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_name_len.writetobuffer(buf) self.__field_file_name.writetobuffer(buf) self.__field_file_name_len.writetobuffer(buf) self.__field_c3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_c0=UINT(**{'sizeinbytes': 1}) self.__field_c0.readfrombuffer(buf) self.__field_index=UINT(**{'sizeinbytes': 1}) self.__field_index.readfrombuffer(buf) self.__field_c1=UINT(**{'sizeinbytes': 1}) self.__field_c1.readfrombuffer(buf) self.__field_assignment=UINT(**{'sizeinbytes': 1}) self.__field_assignment.readfrombuffer(buf) self.__field_c2=UINT(**{'sizeinbytes': 1}) self.__field_c2.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 17, 'raiseonunterminatedread': False }) self.__field_name.readfrombuffer(buf) self.__field_name_len=UINT(**{'sizeinbytes': 1}) self.__field_name_len.readfrombuffer(buf) self.__field_file_name=USTRING(**{'sizeinbytes': 51, 'raiseonunterminatedread': False }) self.__field_file_name.readfrombuffer(buf) self.__field_file_name_len=UINT(**{'sizeinbytes': 1}) self.__field_file_name_len.readfrombuffer(buf) self.__field_c3=UINT(**{'sizeinbytes': 2}) self.__field_c3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_c0(self): return self.__field_c0.getvalue() def __setfield_c0(self, value): if isinstance(value,UINT): self.__field_c0=value else: self.__field_c0=UINT(value,**{'sizeinbytes': 1}) def __delfield_c0(self): del self.__field_c0 c0=property(__getfield_c0, __setfield_c0, __delfield_c0, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 1}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_c1(self): return self.__field_c1.getvalue() def __setfield_c1(self, value): if isinstance(value,UINT): self.__field_c1=value else: self.__field_c1=UINT(value,**{'sizeinbytes': 1}) def __delfield_c1(self): del self.__field_c1 c1=property(__getfield_c1, __setfield_c1, __delfield_c1, None) def __getfield_assignment(self): return self.__field_assignment.getvalue() def __setfield_assignment(self, value): if isinstance(value,UINT): self.__field_assignment=value else: self.__field_assignment=UINT(value,**{'sizeinbytes': 1}) def __delfield_assignment(self): del self.__field_assignment assignment=property(__getfield_assignment, __setfield_assignment, __delfield_assignment, None) def __getfield_c2(self): return self.__field_c2.getvalue() def __setfield_c2(self, value): if isinstance(value,UINT): self.__field_c2=value else: self.__field_c2=UINT(value,**{'sizeinbytes': 1}) def __delfield_c2(self): del self.__field_c2 c2=property(__getfield_c2, __setfield_c2, __delfield_c2, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 17, 'raiseonunterminatedread': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_name_len(self): return self.__field_name_len.getvalue() def __setfield_name_len(self, value): if isinstance(value,UINT): self.__field_name_len=value else: self.__field_name_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_name_len(self): del self.__field_name_len name_len=property(__getfield_name_len, __setfield_name_len, __delfield_name_len, None) def __getfield_file_name(self): return self.__field_file_name.getvalue() def __setfield_file_name(self, value): if isinstance(value,USTRING): self.__field_file_name=value else: self.__field_file_name=USTRING(value,**{'sizeinbytes': 51, 'raiseonunterminatedread': False }) def __delfield_file_name(self): del self.__field_file_name file_name=property(__getfield_file_name, __setfield_file_name, __delfield_file_name, None) def __getfield_file_name_len(self): return self.__field_file_name_len.getvalue() def __setfield_file_name_len(self, value): if isinstance(value,UINT): self.__field_file_name_len=value else: self.__field_file_name_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_file_name_len(self): del self.__field_file_name_len file_name_len=property(__getfield_file_name_len, __setfield_file_name_len, __delfield_file_name_len, None) def __getfield_c3(self): return self.__field_c3.getvalue() def __setfield_c3(self, value): if isinstance(value,UINT): self.__field_c3=value else: self.__field_c3=UINT(value,**{'sizeinbytes': 2}) def __delfield_c3(self): del self.__field_c3 c3=property(__getfield_c3, __setfield_c3, __delfield_c3, None) def iscontainer(self): return True def containerelements(self): yield ('c0', self.__field_c0, None) yield ('index', self.__field_index, None) yield ('c1', self.__field_c1, None) yield ('assignment', self.__field_assignment, None) yield ('c2', self.__field_c2, None) yield ('name', self.__field_name, None) yield ('name_len', self.__field_name_len, None) yield ('file_name', self.__field_file_name, None) yield ('file_name_len', self.__field_file_name_len, None) yield ('c3', self.__field_c3, None) class ringtones(BaseProtogenClass): __fields=['entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ringtones,self).__init__(**dict) if self.__class__ is ringtones: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ringtones,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ringtones,kwargs) if len(args): dict2={ 'length': max_ringtone_entries, 'elementclass': ringtone } dict2.update(kwargs) kwargs=dict2 self.__field_entry=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry=LIST(**{ 'length': max_ringtone_entries, 'elementclass': ringtone }) self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,LIST): self.__field_entry=value else: self.__field_entry=LIST(value,**{ 'length': max_ringtone_entries, 'elementclass': ringtone }) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('entry', self.__field_entry, None) class image(BaseProtogenClass): __fields=['c0', 'index', 'c1', 'assignment', 'name', 'name_len', 'file_name', 'file_name_len', 'c2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(image,self).__init__(**dict) if self.__class__ is image: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(image,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(image,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_c0.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_c1.writetobuffer(buf) self.__field_assignment.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_name_len.writetobuffer(buf) self.__field_file_name.writetobuffer(buf) self.__field_file_name_len.writetobuffer(buf) self.__field_c2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_c0=UINT(**{'sizeinbytes': 1}) self.__field_c0.readfrombuffer(buf) self.__field_index=UINT(**{'sizeinbytes': 1}) self.__field_index.readfrombuffer(buf) self.__field_c1=UINT(**{'sizeinbytes': 1}) self.__field_c1.readfrombuffer(buf) self.__field_assignment=UINT(**{'sizeinbytes': 1}) self.__field_assignment.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 17, 'raiseonunterminatedread': False }) self.__field_name.readfrombuffer(buf) self.__field_name_len=UINT(**{'sizeinbytes': 1}) self.__field_name_len.readfrombuffer(buf) self.__field_file_name=USTRING(**{'sizeinbytes': 51, 'raiseonunterminatedread': False }) self.__field_file_name.readfrombuffer(buf) self.__field_file_name_len=UINT(**{'sizeinbytes': 1}) self.__field_file_name_len.readfrombuffer(buf) self.__field_c2=UINT(**{'sizeinbytes': 2}) self.__field_c2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_c0(self): return self.__field_c0.getvalue() def __setfield_c0(self, value): if isinstance(value,UINT): self.__field_c0=value else: self.__field_c0=UINT(value,**{'sizeinbytes': 1}) def __delfield_c0(self): del self.__field_c0 c0=property(__getfield_c0, __setfield_c0, __delfield_c0, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 1}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_c1(self): return self.__field_c1.getvalue() def __setfield_c1(self, value): if isinstance(value,UINT): self.__field_c1=value else: self.__field_c1=UINT(value,**{'sizeinbytes': 1}) def __delfield_c1(self): del self.__field_c1 c1=property(__getfield_c1, __setfield_c1, __delfield_c1, None) def __getfield_assignment(self): return self.__field_assignment.getvalue() def __setfield_assignment(self, value): if isinstance(value,UINT): self.__field_assignment=value else: self.__field_assignment=UINT(value,**{'sizeinbytes': 1}) def __delfield_assignment(self): del self.__field_assignment assignment=property(__getfield_assignment, __setfield_assignment, __delfield_assignment, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 17, 'raiseonunterminatedread': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_name_len(self): return self.__field_name_len.getvalue() def __setfield_name_len(self, value): if isinstance(value,UINT): self.__field_name_len=value else: self.__field_name_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_name_len(self): del self.__field_name_len name_len=property(__getfield_name_len, __setfield_name_len, __delfield_name_len, None) def __getfield_file_name(self): return self.__field_file_name.getvalue() def __setfield_file_name(self, value): if isinstance(value,USTRING): self.__field_file_name=value else: self.__field_file_name=USTRING(value,**{'sizeinbytes': 51, 'raiseonunterminatedread': False }) def __delfield_file_name(self): del self.__field_file_name file_name=property(__getfield_file_name, __setfield_file_name, __delfield_file_name, None) def __getfield_file_name_len(self): return self.__field_file_name_len.getvalue() def __setfield_file_name_len(self, value): if isinstance(value,UINT): self.__field_file_name_len=value else: self.__field_file_name_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_file_name_len(self): del self.__field_file_name_len file_name_len=property(__getfield_file_name_len, __setfield_file_name_len, __delfield_file_name_len, None) def __getfield_c2(self): return self.__field_c2.getvalue() def __setfield_c2(self, value): if isinstance(value,UINT): self.__field_c2=value else: self.__field_c2=UINT(value,**{'sizeinbytes': 2}) def __delfield_c2(self): del self.__field_c2 c2=property(__getfield_c2, __setfield_c2, __delfield_c2, None) def iscontainer(self): return True def containerelements(self): yield ('c0', self.__field_c0, None) yield ('index', self.__field_index, None) yield ('c1', self.__field_c1, None) yield ('assignment', self.__field_assignment, None) yield ('name', self.__field_name, None) yield ('name_len', self.__field_name_len, None) yield ('file_name', self.__field_file_name, None) yield ('file_name_len', self.__field_file_name_len, None) yield ('c2', self.__field_c2, None) class images(BaseProtogenClass): __fields=['entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(images,self).__init__(**dict) if self.__class__ is images: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(images,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(images,kwargs) if len(args): dict2={ 'length': max_image_entries, 'elementclass': image } dict2.update(kwargs) kwargs=dict2 self.__field_entry=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry=LIST(**{ 'length': max_image_entries, 'elementclass': image }) self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,LIST): self.__field_entry=value else: self.__field_entry=LIST(value,**{ 'length': max_image_entries, 'elementclass': image }) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('entry', self.__field_entry, None) bitpim-1.0.7+dfsg1/src/phones/com_toshibavm4050.py0000644001616600161660000005363510733033631017762 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Simon Capper ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_toshibavm4050.py 4516 2007-12-21 22:00:57Z djpham $ """Communicate with the toshiba CDM 8900 cell phone""" # standard modules import sha import re import time # our modules import common import com_phone import com_brew import prototypes import commport import p_brew import p_toshibavm4050 import helpids class Phone(com_phone.Phone, com_brew.BrewProtocol): "Talk to Toshiba VM4050 cell phone" desc="Toshiba VM4050" helpid=helpids.ID_PHONE_TOSHIBAVM4050 protocolclass=p_toshibavm4050 serialsname='toshibavm4050' builtinimages=() builtinringtones=( 'Common', 'Ring 1', 'Ring 2', 'Ring 3', 'Ring 4', 'Ring 5', 'Ring 6', 'Ring 7', 'Ring 8', 'Ring 9', 'Alarm 1', 'Alarm 2', 'Alarm 3', 'Alarm 4', 'Alarm 5', 'Alarm 6', 'Alarm 7', 'Alarm 8', 'Alarm 9', 'Stars & Stripes', 'When the Saints', 'Bach', 'William Tell', 'Nachtmusik', 'Str Serenade', 'Toccata', 'Meistersinger', 'Blue Danube') def __init__(self, logtarget, commport): "Calls all the constructors and sets initial modes" com_phone.Phone.__init__(self, logtarget, commport) com_brew.BrewProtocol.__init__(self) self.log("Attempting to contact phone") self.mode=self.MODENONE def getfundamentals(self, results): """Gets information fundamental to interopating with the phone and UI. Currently this is: - 'uniqueserial' a unique serial number representing the phone - 'groups' the phonebook groups - 'wallpaper-index' map index numbers to names - 'ringtone-index' map index numbers to ringtone names This method is called before we read the phonebook data or before we write phonebook data. """ self.log("Getting fundamentals") # use a hash of ESN and other stuff (being paranoid) self.log("Retrieving fundamental phone information") self.setmode(self.MODEBREW) self.log("Phone serial number") results['uniqueserial']=sha.new(self.get_esn()).hexdigest() # This phone does not support groups results['groups']={} #self.getwallpaperindices(results) self.getringtoneindices(results) self.log("Fundamentals retrieved") return results def getmediaindex(self, builtins, results, key): """Gets the media (wallpaper/ringtone) index @param builtins: the builtin list on the phone @param results: places results in this dict @param maps: the list of index files and locations @param key: key to place results in """ self.log("Reading "+key) media={} # builtins c=1 for name in builtins: if name: media[c]={'name': name, 'origin': 'builtin' } c+=1 results[key]=media return media def getwallpaperindices(self, results): return self.getmediaindex(self.builtinimages, results, 'wallpaper-index') def getringtoneindices(self, results): return self.getmediaindex(self.builtinringtones, results, 'ringtone-index') def listsubdirs(self, dir='', recurse=0): self.log("Getting file system in dir '"+dir+"'") res=com_brew.BrewProtocol.listsubdirs(self, dir, recurse) # toshiba is bad, they don't list these directories when you query the phone # so we add them in ourselves if not len(dir): res['C']={ 'name': 'C', 'type': 'directory' } res['D']={ 'name': 'D', 'type': 'directory' } res['G']={ 'name': 'G', 'type': 'directory' } return res def enable_data_transfer(self): req=self.protocolclass.setphoneattribrequest() res=self.sendpbcommand(req, self.protocolclass.setphoneattribresponse) req=self.protocolclass.tosh_enableswapdatarequest() res=self.sendpbcommand(req, self.protocolclass.tosh_enableswapdataresponse) def disable_data_transfer(self): req=self.protocolclass.tosh_disableswapdatarequest() res=self.sendpbcommand(req, self.protocolclass.tosh_disableswapdataresponse) def readdatarecord(self): return self.getfilecontents("D/APL/SWAP/DIAG_APSWP_MEMORY") def writedatarecord(self, record): return self.writefile("D/APL/SWAP/DIAG_APSWP_MEMORY", record) def get_esn(self, data=None): # return the ESN of this phone return self.get_brew_esn() def getcalendar(self, result): raise NotImplementedError() def getwallpapers(self, result): raise NotImplementedError() def getringtones(self, result): raise NotImplementedError() def getphonebook(self, result): """Reads the phonebook data. The L{getfundamentals} information will already be in result.""" pbook={} self.enable_data_transfer() # no way to read the number of entries, just have to read all count=0 # try: for i in range(self.protocolclass.NUMSLOTS): entry=self.protocolclass.pbentry() self.progress(i, self.protocolclass.NUMSLOTS, "") req=self.protocolclass.tosh_getpbentryrequest() req.entry_index=i res=self.sendpbcommand(req, self.protocolclass.tosh_getpbentryresponse) if not res.swap_ok: raw=self.readdatarecord() if __debug__: open("c:/projects/temp/record_in"+`i`, "wb").write(raw) buf=prototypes.buffer(raw) entry.readfrombuffer(buf, logtitle="phonebook data record") else: continue self.log("Read entry "+`i`+" - "+entry.name) pb_entry=self.extractphonebookentry(entry, result) pbook[i]=pb_entry #except Exception, e: # must disable this to prevent phone problems # self.disable_data_transfer() # raise Exception, e self.disable_data_transfer() self.progress(self.protocolclass.NUMSLOTS, self.protocolclass.NUMSLOTS, "Phone book read completed") result['phonebook']=pbook return result _type_map={ 0: 'phone', 1: 'home', 2: 'office', 3: 'cell', 4: 'pager', 5: 'fax', } _ringer_pattern1_map={ 0x0100: 'Ring 1', 0x0101: 'Ring 2', 0x0102: 'Ring 3', 0x0103: 'Ring 4', 0x0104: 'Ring 5', 0x0105: 'Ring 6', 0x0106: 'Ring 7', 0x0107: 'Ring 8', 0x0108: 'Ring 9', } _ringer_pattern2_map={ 0x0009: 'Alarm 1', 0x000A: 'Alarm 2', 0x000B: 'Alarm 3', 0x000C: 'Alarm 4', 0x000D: 'Alarm 5', 0x000E: 'Alarm 6', 0x000F: 'Alarm 7', 0x0010: 'Alarm 8', 0x0011: 'Alarm 9', } _ringer_melody_map={ 0x0000: 'Stars & Stripes', 0x0001: 'When the Saints', 0x0002: 'Bach', 0x0003: 'William Tell', 0x0004: 'Nachtmusik', 0x0005: 'Str Serenade', 0x0006: 'Toccata', 0x0007: 'Meistersinger', 0x0008: 'Blue Danube', } def _get_ringtone(self, ringer_group, ringer_index): # no idea what values downloaded ringtones use # exception handler will take care of any wierd # value we do not understand try: if ringer_group==1: return self._ringer_pattern1_map[ringer_index] if ringer_group==2: return self._ringer_pattern2_map[ringer_index] if ringer_group==3: return self._ringer_melody_map[ringer_index] except: pass return 'Common' def __find_index(self, map, ringer): for k, v in map.iteritems(): if v==ringer: return k return -1 def _getringtone_group_index(self, ringtone): ringer_index = self.__find_index(self._ringer_pattern1_map,ringtone) if ringer_index != -1: return 1, ringer_index ringer_index = self.__find_index(self._ringer_pattern2_map,ringtone) if ringer_index != -1: return 2, ringer_index ringer_index = self.__find_index(self._ringer_melody_map,ringtone) if ringer_index != -1: return 3, ringer_index return 5, 0 def extractphonebookentry(self, entry, result): """Return a phonebook entry in BitPim format. This is called from getphonebook.""" res={} # serials res['serials']=[ {'sourcetype': self.serialsname, 'serial1': entry.slot, 'sourceuniqueid': result['uniqueserial']} ] # numbers set=False secret=False ringtone='Common' numbers=[] for i in range(self.protocolclass.MAXPHONENUMBERS): if entry.numbers[i].valid and len(entry.numbers[i].number): type=self._type_map[entry.numbers[i].type] numbers.append( {'number': entry.numbers[i].number, 'type': type} ) # secret and ringtone are per number on this phone, bitpim only supports one # per phonebook entry, so we set the phone entry to secret if any number is secret # and we pick the first ringtone that is not the default and apply to the whole entry if not secret and entry.numbers[i].secret: secret=True if ringtone=='Common' and entry.numbers[i].ringer_group!=5: ringtone=self._get_ringtone(entry.numbers[i].ringer_group, entry.numbers[i].ringer_index) if len(numbers): res['numbers']=numbers if secret: res['flags']=[{'secret': True}] res['ringtones']=[{'ringtone': ringtone, 'use': 'call'}] # name if len(entry.name): # yes, the toshiba can have a blank name! res['names']=[{'full': entry.name}] # emails (we treat wireless as email addr) emails=[] for i in range(self.protocolclass.MAXEMAILS): if entry.emails[i].valid and len(entry.emails[i].email): emails.append( {'email': entry.emails[i].email} ) if len(emails): res['emails']=emails # urls if len(entry.web_page): res['urls']=[ {'url': entry.web_page} ] return res def makephonebookentry(self, fields): e=self.protocolclass.pbentry() # some defaults secret=False if fields['secret']!=None: secret=fields['secret'] ringtone='Common' if fields['ringtone']!=None: ringtone=fields['ringtone'] ringer_group, ringer_index=self._getringtone_group_index(ringtone) if fields['name']: e.name=fields['name'] else: e.name='' for i in range(len(fields['numbers'])): n=self.protocolclass.pbnumber() n.valid=1 n.number=fields['numbers'][i] n.type=fields['numbertypes'][i] n.secret=secret n.ringer_group=ringer_group n.ringer_index=ringer_index e.numbers.append(n) for i in range(len(fields['emails'])): n=self.protocolclass.pbemail() n.valid=1 n.email=fields['emails'][i] e.emails.append(n) if fields['web_page']: e.web_page=fields['web_page'] e.slot=fields['slot'] return e def savephonebook(self, data): # brute force, it is faster, otherwise we would have to # examine each entry to see if it was there and then decide what # to do with it, deleting and re-writing is faster and what the user # seleted with "OVERWRITE" self.log("New phonebook\n"+common.prettyprintdict(data['phonebook'])) pb=data['phonebook'] keys=pb.keys() keys.sort() keys=keys[:self.protocolclass.NUMSLOTS] self.enable_data_transfer() try: # delete the old phonebook self.rmfile("D/APL/SWAP/DIAG_APSWP_MEMORY") for i in range(self.protocolclass.NUMSLOTS): self.deletepbentry(i) # create the new phonebook for i in range(len(keys)): slot=keys[i] entry=self.makephonebookentry(pb[slot]) self.progress(i, len(keys), "Writing "+entry.name) self.log('Writing entry '+`slot`+" - "+entry.name) self.sendpbentrytophone(entry) except Exception, e: # must disable this to prevent phone problems self.disable_data_transfer() raise Exception, e self.disable_data_transfer() self.progress(len(keys)+1, len(keys)+1, "Phone book write completed") return data def sendpbentrytophone(self, entry): # write out the new one buf=prototypes.buffer() entry.writetobuffer(buf, logtitle="Sending pbentrytophone") data=buf.getvalue() self.writedatarecord(data) req=self.protocolclass.tosh_setpbentryrequest() req.entry_index=entry.slot if __debug__: open("c:/projects/temp/record_out"+`entry.slot`, "wb").write(data) res=self.sendpbcommand(req, self.protocolclass.tosh_setpbentryresponse) if res.swap_ok: self.log("Error writing phonebook entry") def deletepbentry(self, slot): req=self.protocolclass.tosh_modifypbentryrequest() req.entry_index=slot res=self.sendpbcommand(req, self.protocolclass.tosh_modifypbentryresponse) def sendpbcommand(self, request, responseclass): self.setmode(self.MODEBREW) buffer=prototypes.buffer() request.writetobuffer(buffer, logtitle="toshiba vm4050 phonebook request") data=buffer.getvalue() data=common.pppescape(data+common.crcs(data))+common.pppterminator first=data[0] try: data=self.comm.writethenreaduntil(data, False, common.pppterminator, logreaduntilsuccess=False) except com_phone.modeignoreerrortypes: self.mode=self.MODENONE self.raisecommsdnaexception("manipulating the phonebook") self.comm.success=True origdata=data # sometimes there is junk at the begining, eg if the user # turned off the phone and back on again. So if there is more # than one 7e in the escaped data we should start after the # second to last one d=data.rfind(common.pppterminator,0,-1) if d>=0: self.log("Multiple PB packets in data - taking last one starting at "+`d+1`) self.logdata("Original pb data", origdata, None) data=data[d+1:] # turn it back to normal data=common.pppunescape(data) # sometimes there is other crap at the begining d=data.find(first) if d>0: self.log("Junk at begining of pb packet, data at "+`d`) self.logdata("Original pb data", origdata, None) self.logdata("Working on pb data", data, None) data=data[d:] # take off crc and terminator crc=data[-3:-1] data=data[:-3] if common.crcs(data)!=crc: self.logdata("Original pb data", origdata, None) self.logdata("Working on pb data", data, None) raise common.CommsDataCorruption("toshiba phonebook packet failed CRC check", self.desc) # parse data buffer=prototypes.buffer(data) res=responseclass() res.readfrombuffer(buffer, logtitle="toshiba phonebook response") return res def get_detect_data(self, res): try: self.modemmoderequest() res['manufacturer']=self.comm.sendatcommand('+GMI')[0] res['model']=self.comm.sendatcommand('+GMM')[0] res['firmware_version']=self.comm.sendatcommand('+GMR')[0] res['esn']=self.comm.sendatcommand('+GSN')[0][2:] # strip off the 0x except commport.CommTimeout: pass @classmethod def detectphone(_, coms, likely_ports, res, _module, _log): if not likely_ports: # cannot detect any likely ports return None for port in likely_ports: if not res.has_key(port): res[port]={ 'mode_modem': None, 'mode_brew': None, 'manufacturer': None, 'model': None, 'firmware_version': None, 'esn': None, 'firmwareresponse': None } try: if res[port]['model']: # is a model has already # been found, not much we can do now continue p=_module.Phone(_log, commport.CommConnection(_log, port, timeout=1)) # because this is a modem port we ignore any existing results for likely ports res[port]['mode_brew']=p._setmodebrew() if res[port]['mode_brew']: p.get_detect_data(res[port]) p.comm.close() except: if __debug__: raise class Profile(com_phone.Profile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname # use for auto-detection phone_manufacturer='Audiovox Communications Corporation' phone_model='VM4050' # which usb ids correspond to us usbids=((0x05C6, 0x3100, 1), # toshiba modem port direct cable connection ) # which device classes we are. deviceclasses=("modem",) # what types of syncing we support _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('phonebook', 'write', 'OVERWRITE'), # phonebook overwrite only ) def convertphonebooktophone(self, helper, data): """Converts the data to what will be used by the phone @param data: contains the dict returned by getfundamentals as well as where the results go""" results={} slotsused={} # generate a list of used slots for pbentry in data['phonebook']: entry=data['phonebook'][pbentry] serial1=helper.getserial(entry.get('serials', []), self.serialsname, data['uniqueserial'], 'serial1', -1) if(serial1 >= 0 and serial1 < self.protocolclass.NUMSLOTS): slotsused[serial1]=1 lastunused=0 # One more than last unused slot for pbentry in data['phonebook']: if len(results)==self.protocolclass.NUMSLOTS: break e={} # entry out entry=data['phonebook'][pbentry] # entry in try: # name e['name']=helper.getfullname(entry.get('names', []),1,1,36)[0] serial1=helper.getserial(entry.get('serials', []), self.serialsname, data['uniqueserial'], 'serial1', -1) if(serial1 >= 0 and serial1 < self.protocolclass.NUMSLOTS): e['slot']=serial1 else: # A new entry. Must find unused slot while(slotsused.has_key(lastunused)): lastunused+=1 if(lastunused >= self.protocolclass.NUMSLOTS): helper.add_error_message("Name: %s. Unable to add, phonebook full" % e['name']) raise helper.ConversionFailed() e['slot']=lastunused slotsused[lastunused]=1 # email addresses emails=helper.getemails(entry.get('emails', []) ,0,self.protocolclass.MAXEMAILS,self.protocolclass.MAXEMAILLEN) e['emails']=helper.filllist(emails, self.protocolclass.MAXEMAILS, "") # url e['web_page']=helper.makeone(helper.geturls(entry.get('urls', []), 0,1,48), "") # phone numbers numbers=helper.getnumbers(entry.get('numbers', []),0,self.protocolclass.MAXPHONENUMBERS) e['numbertypes']=[] e['numbers']=[] typesused={} for num in numbers: type=num['type'] if(typesused.has_key(type)): continue typesused[type]=1 for typenum,tnsearch in enumerate(self.protocolclass.numbertypetab): if type==tnsearch: number=self.phonize(num['number']) if len(number)==0: # no actual digits in the number continue if len(number)>self.protocolclass.MAXPHONENUMBERLEN: # get this number from somewhere sensible # :: TODO:: number is too long and we have to either truncate it or ignore it? number=number[:self.protocolclass.MAXPHONENUMBERLEN] e['numbers'].append(number) e['numbertypes'].append(typenum) break # ringtones e['ringtone']=helper.getringtone(entry.get('ringtones', []), 'call', None) # flags e['secret']=helper.getflag(entry.get('flags',[]), 'secret', False) results[pbentry]=e except helper.ConversionFailed: continue data['phonebook']=results return data def phonize(self, str): """Convert the phone number into something the phone understands All digits, P, T, *, # are kept, everything else is removed. In theory the phone can store a dash in the phonebook, but that is not normal.""" return re.sub("[^0-9PT#*]", "", str)[:self.protocolclass.MAXPHONENUMBERLEN] bitpim-1.0.7+dfsg1/src/phones/com_lglg8100.py0000644001616600161660000004661310645762275016730 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2005 Roger Binns ### Copyright (C) 2006 Simon Capper ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lglg8100.py 4303 2007-07-13 20:46:53Z djpham $ """Communicate with the LG VX5200 cell phone The code in this file mainly inherits from VX8100 code and then extends where the 5200 has different functionality """ # standard modules import time import calendar import cStringIO import sha # my modules import common import commport import copy import com_lgvx4400 import p_brew import p_lglg8100 import com_lgvx8100 import com_brew import com_phone import com_lg import prototypes import bpcalendar import call_history import sms import memo class Phone(com_lgvx8100.Phone): "Talk to the LG LG8100 cell phone (Telus)" desc="LG-LG8100" helpid=None protocolclass=p_lglg8100 serialsname='lglg8100' builtinringtones= ('Low Beep Once', 'Low Beeps', 'Loud Beep Once', 'Loud Beeps') + \ tuple(['Ringtone '+`n` for n in range(1,11)]) + \ ('No Ring',) ringtonelocations= ( # type index-file size-file directory-to-use lowest-index-to-use maximum-entries type-major icon ( 'ringers', 'dload/aod.dat', 'dload/aodsize.dat', 'brew/16452/mds', 1000, 150, 6, 1, 0), # the sound index file uses the same index as the ringers, bitpim does not support this (yet) # ( 'sounds', 'dload/mysound.dat', 'dload/mysoundsize.dat', 'brew/16452/ms', 100, 150, 2, 0, 151), ) calendarlocation="sch/newschedule.dat" calendarexceptionlocation="sch/newschexception.dat" calenderrequiresreboot=1 memolocation="sch/neomemo.dat" builtinwallpapers = () # none wallpaperlocations= ( ( 'images', 'dload/image.dat', 'dload/imagesize.dat', 'brew/16452/mp', 100, 50, 0x300, 0, 0), #( 'video', 'dload/video.dat', None, 'brew/16452/mf', 1000, 50, 0x0304, 0, 0), ) # for removable media (miniSD cards) _rs_path='mmc1/' _rs_ringers_path=_rs_path+'ringers' _rs_images_path=_rs_path+'images' media_info={ 'ringers': { 'localpath': 'brew/16452/mds', 'rspath': _rs_ringers_path, 'vtype': protocolclass.MEDIA_TYPE_RINGTONE, 'icon': protocolclass.MEDIA_RINGTONE_DEFAULT_ICON, 'index': 1000, # starting index 'maxsize': 155, 'indexfile': 'dload/aod.dat', 'sizefile': 'dload/aodsize.dat', 'dunno': 0, 'date': True, }, # 'sounds': { # 'localpath': 'brew/16452/ms', # 'rspath': None, # 'vtype': protocolclass.MEDIA_TYPE_SOUND, # 'icon': protocolclass.MEDIA_IMAGE_DEFAULT_ICON, # 'index': 100, # 'maxsize': 155, # 'indexfile': 'dload/mysound.dat', # 'sizefile': 'dload/mysoundsize.dat', # 'dunno': 0, 'date': False }, 'images': { 'localpath': 'brew/16452/mp', 'rspath': _rs_images_path, 'vtype': protocolclass.MEDIA_TYPE_IMAGE, 'icon': protocolclass.MEDIA_IMAGE_DEFAULT_ICON, 'index': 100, 'maxsize': 155, 'indexfile': 'dload/image.dat', 'sizefile': 'dload/imagesize.dat', 'dunno': 0, 'date': True }, # 'video': { # 'localpath': 'brew/16452/mf', # 'rspath': None, # 'vtype': protocolclass.MEDIA_TYPE_VIDEO, # 'icon': protocolclass.MEDIA_VIDEO_DEFAULT_ICON, # 'index': 1000, # 'maxsize': 155, # 'indexfile': 'dload/video.dat', # 'sizefile': 'dload/videosize.dat', # 'dunno': 0, 'date': True }, } def __init__(self, logtarget, commport): com_lgvx4400.Phone.__init__(self,logtarget,commport) self.mode=self.MODENONE def __del__(self): pass def getcalendar(self,result): res={} # Read exceptions file first try: buf=prototypes.buffer(self.getfilecontents(self.calendarexceptionlocation)) ex=self.protocolclass.scheduleexceptionfile() ex.readfrombuffer(buf, logtitle="Calendar exceptions") exceptions={} for i in ex.items: try: exceptions[i.pos].append( (i.year,i.month,i.day) ) except KeyError: exceptions[i.pos]=[ (i.year,i.month,i.day) ] except com_brew.BrewNoSuchFileException: exceptions={} # Now read schedule try: buf=prototypes.buffer(self.getfilecontents(self.calendarlocation)) if len(buf.getdata())<3: # file is empty, and hence same as non-existent raise com_brew.BrewNoSuchFileException() sc=self.protocolclass.schedulefile() sc.readfrombuffer(buf, logtitle="Calendar") for event in sc.events: # the vx8100 has a bad entry when the calender is empty # stop processing the calender when we hit this record if event.pos==0: #invalid entry continue entry=bpcalendar.CalendarEntry() entry.desc_loc=event.description try: # delete events are still in the calender file but have garbage dates entry.start=event.start entry.end=event.end except ValueError: continue if event.alarmindex_vibrate&0x1: entry.vibrate=0 # vibarate bit is inverted in phone 0=on, 1=off else: entry.vibrate=1 entry.repeat = self.makerepeat(event.repeat, event.start) min=event.alarmminutes hour=event.alarmhours if min==0x64 or hour==0x64: entry.alarm=None # no alarm set else: entry.alarm=hour*60+min entry.ringtone=result['ringtone-index'][event.ringtone]['name'] entry.snoozedelay=0 # check for exceptions and remove them if event.repeat[3] and exceptions.has_key(event.pos): for year, month, day in exceptions[event.pos]: entry.suppress_repeat_entry(year, month, day) res[entry.id]=entry assert sc.numactiveitems==len(res) except com_brew.BrewNoSuchFileException: pass # do nothing if file doesn't exist result['calendar']=res return result def makerepeat(self, repeat, start): # get all the variables out of the repeat tuple # and convert into a bpcalender RepeatEntry type,dow,interval,interval2,exceptions=repeat #print "repeat "+`repeat`+" start "+`start` if type==0: repeat_entry=None else: repeat_entry=bpcalendar.RepeatEntry() if type==1: #daily repeat_entry.repeat_type=repeat_entry.daily repeat_entry.interval=interval elif type==2: #'monfri' repeat_entry.repeat_type=repeat_entry.daily repeat_entry.interval=0 elif type==3: #'weekly' repeat_entry.repeat_type=repeat_entry.weekly repeat_entry.interval=interval elif type==5: #'monthly' repeat_entry.repeat_type=repeat_entry.monthly repeat_entry.interval2=interval2 repeat_entry.dow=0 elif type==4: #'monthly' #Xth Y day (e.g. 2nd friday each month) repeat_entry.repeat_type=repeat_entry.monthly repeat_entry.interval=interval #X repeat_entry.dow=dow #Y repeat_entry.interval2=interval2 elif type==6: #'yearly #Xth Y day of Month (2nd sunday of april)' Not supported by bitpim #repeat_entry.repeat_type=repeat_entry.yearly repeat_entry=None else: # =7 'yearly' repeat_entry.repeat_type=repeat_entry.yearly return repeat_entry def setalarm(self, entry, data): # vx8100 only allows certain repeat intervals, adjust to fit, it also stores an index to the interval rc=True if entry.alarm>=10080: entry.alarm=10080 data.alarmminutes=0 data.alarmhours=168 # 1 week data.alarmindex_vibrate=0xe elif entry.alarm>=4320: entry.alarm=4320 data.alarmminutes=0 data.alarmhours=72 # 3 days data.alarmindex_vibrate=0xc elif entry.alarm>=1440: entry.alarm=1440 data.alarmminutes=0 data.alarmhours=24 # 1 day data.alarmindex_vibrate=0xa elif entry.alarm>=60: entry.alarm=60 data.alarmminutes=0 data.alarmhours=1 # 1 hour data.alarmindex_vibrate=0x8 elif entry.alarm>=30: entry.alarm=30 data.alarmminutes=30 data.alarmhours=0 # 30 mins data.alarmindex_vibrate=0x6 elif entry.alarm>=15: entry.alarm=15 data.alarmminutes=15 data.alarmhours=0 data.alarmindex_vibrate=0x4 elif entry.alarm>=0: entry.alarm=0 data.alarmminutes=0 data.alarmhours=0 data.alarmindex_vibrate=0x2 else: # no alarm data.alarmminutes=0x64 data.alarmhours=0x64 data.alarmindex_vibrate=1 rc=False # set the vibrate bit if data.alarmindex_vibrate > 1 and entry.vibrate==0: data.alarmindex_vibrate+=1 return rc def savecalendar(self, dict, merge): # ::TODO:: # what will be written to the files eventsf=self.protocolclass.schedulefile() exceptionsf=self.protocolclass.scheduleexceptionfile() # what are we working with cal=dict['calendar'] newcal={} #sort into start order, makes it possible to see if the calendar has changed keys=[(x.start, k) for k,x in cal.items()] keys.sort() # number of entries eventsf.numactiveitems=len(keys) pos=0 contains_alarms=False # play with each entry for (_,k) in keys: # entry is what we will return to user entry=cal[k] data=self.protocolclass.scheduleevent() data.index=pos pos+=1 data.pos=eventsf.packetsize() data.description=entry.desc_loc data.start=entry.start data.end=entry.end alarm_set=self.setalarm(entry, data) data.ringtone=0 if alarm_set: if entry.ringtone=="No Ring" and not entry.vibrate: alarm_name="Low Beep Once" else: alarm_name=entry.ringtone else:# set alarm to "No Ring" gets rid of alarm icon on phone alarm_name="No Ring" for i in dict['ringtone-index']: if dict['ringtone-index'][i]['name']==alarm_name: data.ringtone=i # check for exceptions and add them to the exceptions list exceptions=0 if entry.repeat!=None: if data.end[:3]==entry.no_end_date: data.end=(2100, 12, 31)+data.end[3:] for i in entry.repeat.suppressed: de=self.protocolclass.scheduleexception() de.pos=data.pos de.day=i.date.day de.month=i.date.month de.year=i.date.year exceptions=1 exceptionsf.items.append(de) if entry.repeat != None: data.repeat=(self.getrepeattype(entry, exceptions)) else: data.repeat=((0,0,0,0,0)) if data.alarmindex_vibrate!=1: # if alarm set contains_alarms=True # put entry in nice shiny new dict we are building entry=copy.copy(entry) newcal[data.pos]=entry eventsf.events.append(data) buf=prototypes.buffer() eventsf.writetobuffer(buf, logtitle="New Calendar") # We check the existing calender as changes require a reboot for the alarms # to work properly, also no point writing the file if it is not changing if buf.getvalue()!=self.getfilecontents(self.calendarlocation): self.writefile(self.calendarlocation, buf.getvalue()) if contains_alarms or self.calenderrequiresreboot: self.log("Your phone has to be rebooted due to the calendar changing") dict["rebootphone"]=True else: self.log("Phone calendar unchanged, no update required") buf=prototypes.buffer() exceptionsf.writetobuffer(buf, logtitle="Writing calendar exceptions") self.writefile(self.calendarexceptionlocation, buf.getvalue()) # fix passed in dict dict['calendar']=newcal return dict def getrepeattype(self, entry, exceptions): #convert the bpcalender type into vx8100 type repeat_entry=bpcalendar.RepeatEntry() interval2=0 if entry.repeat.repeat_type==repeat_entry.monthly: dow=entry.repeat.dow interval2=entry.repeat.interval2 if entry.repeat.dow==0: # set interval for month type 4 to start day of month, (required by vx8100) interval=entry.start[2] type=5 else: interval=entry.repeat.interval type=4 elif entry.repeat.repeat_type==repeat_entry.daily: dow=entry.repeat.dow interval=entry.repeat.interval if entry.repeat.interval==0: type=2 else: type=1 elif entry.repeat.repeat_type==repeat_entry.weekly: dow=entry.repeat.dow interval=entry.repeat.interval type=3 elif entry.repeat.repeat_type==repeat_entry.yearly: # set interval to start day of month, (required by vx8100) interval=entry.start[2] # set dow to start month, (required by vx8100) dow=entry.start[1] type=7 return (type, dow, interval, interval2, exceptions) def eval_detect_data(self, res): found=False if res.get(self.brew_version_txt_key, None) is not None: found=res[self.brew_version_txt_key][:len(self.my_version_txt)]==self.my_version_txt if found: res['model']=self.my_model res['manufacturer']='LG Electronics Inc' s=res.get(self.esn_file_key, None) if s: res['esn']=self.get_esn(s) my_version_txt='CX8100' my_model='LG8100' # Media stuff--------------------------------------------------------------- # Bypassing the 8100/9800 specific stuff # def getmedia(self, maps, results, key): # return com_lg.LGNewIndexedMedia2.getmedia(self, maps, results, key) # def savemedia(self, mediakey, mediaindexkey, maps, results, merge, reindexfunction): # return com_lg.LGNewIndexedMedia2.savemedia(self, mediakey, mediaindexkey, maps, results, merge, reindexfunction) parentprofile=com_lgvx8100.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='LG8100' WALLPAPER_WIDTH=176 WALLPAPER_HEIGHT=220 MAX_WALLPAPER_BASENAME_LENGTH=32 WALLPAPER_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789()-_ ." WALLPAPER_CONVERT_FORMAT="jpg" # the 8100 uses "W" for wait in the dialstring, it does not support "T" DIALSTRING_CHARS="[^0-9PW#*]" MAX_RINGTONE_BASENAME_LENGTH=32 RINGTONE_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789()-_ ." # the 8100 doesn't have seperate origins - they are all dumped in "images" imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) def GetImageOrigins(self): return self.imageorigins # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", {'width': 128, 'height': 128, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "fullscreen", {'width': 176, 'height': 220, 'format': "JPEG"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets def __init__(self): parentprofile.__init__(self) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading ('memo', 'read', None), # all memo list reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('sms', 'write', 'OVERWRITE'), # all SMS list writing ('memo', 'write', 'OVERWRITE'), # all memo list writing ) field_color_data={ 'phonebook': { 'name': { 'first': 1, 'middle': 1, 'last': 1, 'full': 1, 'nickname': 0, 'details': 1 }, 'number': { 'type': 5, 'speeddial': 5, 'number': 5, 'details': 5 }, 'email': 2, 'address': { 'type': 0, 'company': 0, 'street': 0, 'street2': 0, 'city': 0, 'state': 0, 'postalcode': 0, 'country': 0, 'details': 0 }, 'url': 0, 'memo': 1, 'category': 1, 'wallpaper': 1, 'ringtone': 2, 'storage': 0, }, 'calendar': { 'description': True, 'location': True, 'allday': True, 'start': True, 'end': True, 'priority': False, 'alarm': True, 'vibrate': True, 'repeat': True, 'memo': False, 'category': False, 'wallpaper': False, 'ringtone': True, }, 'memo': { 'subject': True, 'date': True, 'secret': False, 'category': False, 'memo': True, }, 'todo': { 'summary': False, 'status': False, 'due_date': False, 'percent_complete': False, 'completion_date': False, 'private': False, 'priority': False, 'category': False, 'memo': False, }, } bitpim-1.0.7+dfsg1/src/phones/p_lgpm225.py0000644001616600161660000052117310466234100016320 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG PM225 (Sprint)""" import re from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=99 FIRSTSPEEDDIAL=1 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=200 MEMOLENGTH=33 NORINGTONE=0 NOMSGRINGTONE=0 NOWALLPAPER=0 NUMEMAILS=3 NUMPHONENUMBERS=5 SMS_CANNED_MAX_ITEMS=40 SMS_CANNED_MAX_LENGTH=104 SMS_CANNED_FILENAME="sms/canned_msg.dat" SMS_PATTERNS={'Inbox': re.compile(r"^.*/inbox[0-9][0-9][0-9]\.dat$"), 'Sent': re.compile(r"^.*/outbox[0-9][0-9][0-9]\.dat$"), 'Saved': re.compile(r"^.*/sf[0-9][0-9]\.dat$"), } numbertypetab=( 'cell', 'home', 'office', 'fax', 'pager' ) # Text Memo const text_memo_file='sch/memo.dat' content_file_name='ams/contentInfo' content_count_file_name='ams/realContent' media_directory='ams' ringerindex='setas/amsRingerIndex.map' imageindex='setas/amsImageIndex.map' ringerconst=2 imageconst=3 max_ringers=100 max_images=100 phonebook_media='pim/pbookcontact.dat' # Calendar parameters NUMCALENDARENTRIES=300 # ?? for VX4400 CAL_REP_NONE=0x10 CAL_REP_DAILY=0x11 CAL_REP_MONFRI=0x12 CAL_REP_WEEKLY=0x13 CAL_REP_MONTHLY=0x14 CAL_REP_YEARLY=0x15 CAL_DOW_SUN=0x0800 CAL_DOW_MON=0x0400 CAL_DOW_TUE=0x0200 CAL_DOW_WED=0x0100 CAL_DOW_THU=0x0080 CAL_DOW_FRI=0x0040 CAL_DOW_SAT=0x0020 CAL_DOW_EXCEPTIONS=0x0010 CAL_REMINDER_NONE=0 CAL_REMINDER_ONTIME=1 CAL_REMINDER_5MIN=2 CAL_REMINDER_10MIN=3 CAL_REMINDER_1HOUR=4 CAL_REMINDER_1DAY=5 CAL_REMINDER_2DAYS=6 CAL_REPEAT_DATE=(2100, 12, 31) cal_dir='sch' cal_data_file_name='sch/schedule.dat' cal_exception_file_name='sch/schexception.dat' cal_has_voice_id=False PHONE_ENCODING='iso8859_1' class pbreadentryresponse(BaseProtogenClass): "Results of reading one entry" __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbreadentryresponse,self).__init__(**dict) if self.__class__ is pbreadentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbreadentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbreadentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbupdateentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbupdateentryrequest,self).__init__(**dict) if self.__class__ is pbupdateentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbupdateentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbupdateentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x04, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbappendentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbappendentryrequest,self).__init__(**dict) if self.__class__ is pbappendentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbappendentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbappendentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x03, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbentry(BaseProtogenClass): __fields=['serial1', 'entrysize', 'entrynumber', 'name', 'group', 'unknown2', 'secret', 'memo', 'emails', 'url', 'numberspeeds', 'numbertypes', 'numbers', 'EndOfRecord', 'ringtone', 'wallpaper'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'default': 0x600}) try: self.__field_wallpaper except: self.__field_wallpaper=UINT(**{'default': 0x100}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_serial1.writetobuffer(buf) try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x0270}) self.__field_entrysize.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_group.writetobuffer(buf) try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 2, 'default': 0}) self.__field_unknown2.writetobuffer(buf) self.__field_secret.writetobuffer(buf) self.__field_memo.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgpm225_126, 'length': NUMEMAILS}) self.__field_emails.writetobuffer(buf) self.__field_url.writetobuffer(buf) try: self.__field_numberspeeds except: self.__field_numberspeeds=LIST(**{'elementclass': _gen_p_lgpm225_129, 'length': NUMPHONENUMBERS}) self.__field_numberspeeds.writetobuffer(buf) try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgpm225_131, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgpm225_133, 'length': NUMPHONENUMBERS}) self.__field_numbers.writetobuffer(buf) try: self.__field_EndOfRecord except: self.__field_EndOfRecord=UINT(**{'sizeinbytes': 1, 'constant': 0x7A}) self.__field_EndOfRecord.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x0270}) self.__field_entrysize.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 4}) self.__field_entrynumber.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 2}) self.__field_group.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2, 'default': 0}) self.__field_unknown2.readfrombuffer(buf) self.__field_secret=BOOL(**{'sizeinbytes': 1}) self.__field_secret.readfrombuffer(buf) self.__field_memo=USTRING(**{'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) self.__field_memo.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_lgpm225_126, 'length': NUMEMAILS}) self.__field_emails.readfrombuffer(buf) self.__field_url=USTRING(**{'sizeinbytes': 75, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_url.readfrombuffer(buf) self.__field_numberspeeds=LIST(**{'elementclass': _gen_p_lgpm225_129, 'length': NUMPHONENUMBERS}) self.__field_numberspeeds.readfrombuffer(buf) self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgpm225_131, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.readfrombuffer(buf) self.__field_numbers=LIST(**{'elementclass': _gen_p_lgpm225_133, 'length': NUMPHONENUMBERS}) self.__field_numbers.readfrombuffer(buf) self.__field_EndOfRecord=UINT(**{'sizeinbytes': 1, 'constant': 0x7A}) self.__field_EndOfRecord.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_entrysize(self): try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x0270}) return self.__field_entrysize.getvalue() def __setfield_entrysize(self, value): if isinstance(value,UINT): self.__field_entrysize=value else: self.__field_entrysize=UINT(value,**{'sizeinbytes': 2, 'constant': 0x0270}) def __delfield_entrysize(self): del self.__field_entrysize entrysize=property(__getfield_entrysize, __setfield_entrysize, __delfield_entrysize, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 4}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 2}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_unknown2(self): try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 2, 'default': 0}) return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2, 'default': 0}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_secret(self): return self.__field_secret.getvalue() def __setfield_secret(self, value): if isinstance(value,BOOL): self.__field_secret=value else: self.__field_secret=BOOL(value,**{'sizeinbytes': 1}) def __delfield_secret(self): del self.__field_secret secret=property(__getfield_secret, __setfield_secret, __delfield_secret, None) def __getfield_memo(self): return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,USTRING): self.__field_memo=value else: self.__field_memo=USTRING(value,**{'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgpm225_126, 'length': NUMEMAILS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_lgpm225_126, 'length': NUMEMAILS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, None) def __getfield_url(self): return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,USTRING): self.__field_url=value else: self.__field_url=USTRING(value,**{'sizeinbytes': 75, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_numberspeeds(self): try: self.__field_numberspeeds except: self.__field_numberspeeds=LIST(**{'elementclass': _gen_p_lgpm225_129, 'length': NUMPHONENUMBERS}) return self.__field_numberspeeds.getvalue() def __setfield_numberspeeds(self, value): if isinstance(value,LIST): self.__field_numberspeeds=value else: self.__field_numberspeeds=LIST(value,**{'elementclass': _gen_p_lgpm225_129, 'length': NUMPHONENUMBERS}) def __delfield_numberspeeds(self): del self.__field_numberspeeds numberspeeds=property(__getfield_numberspeeds, __setfield_numberspeeds, __delfield_numberspeeds, None) def __getfield_numbertypes(self): try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgpm225_131, 'length': NUMPHONENUMBERS}) return self.__field_numbertypes.getvalue() def __setfield_numbertypes(self, value): if isinstance(value,LIST): self.__field_numbertypes=value else: self.__field_numbertypes=LIST(value,**{'elementclass': _gen_p_lgpm225_131, 'length': NUMPHONENUMBERS}) def __delfield_numbertypes(self): del self.__field_numbertypes numbertypes=property(__getfield_numbertypes, __setfield_numbertypes, __delfield_numbertypes, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgpm225_133, 'length': NUMPHONENUMBERS}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'elementclass': _gen_p_lgpm225_133, 'length': NUMPHONENUMBERS}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_EndOfRecord(self): try: self.__field_EndOfRecord except: self.__field_EndOfRecord=UINT(**{'sizeinbytes': 1, 'constant': 0x7A}) return self.__field_EndOfRecord.getvalue() def __setfield_EndOfRecord(self, value): if isinstance(value,UINT): self.__field_EndOfRecord=value else: self.__field_EndOfRecord=UINT(value,**{'sizeinbytes': 1, 'constant': 0x7A}) def __delfield_EndOfRecord(self): del self.__field_EndOfRecord EndOfRecord=property(__getfield_EndOfRecord, __setfield_EndOfRecord, __delfield_EndOfRecord, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'default': 0x600}) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'default': 0x600}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_wallpaper(self): try: self.__field_wallpaper except: self.__field_wallpaper=UINT(**{'default': 0x100}) return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'default': 0x100}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def iscontainer(self): return True def containerelements(self): yield ('serial1', self.__field_serial1, None) yield ('entrysize', self.__field_entrysize, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('name', self.__field_name, None) yield ('group', self.__field_group, None) yield ('unknown2', self.__field_unknown2, None) yield ('secret', self.__field_secret, None) yield ('memo', self.__field_memo, None) yield ('emails', self.__field_emails, None) yield ('url', self.__field_url, None) yield ('numberspeeds', self.__field_numberspeeds, None) yield ('numbertypes', self.__field_numbertypes, None) yield ('numbers', self.__field_numbers, None) yield ('EndOfRecord', self.__field_EndOfRecord, None) yield ('ringtone', self.__field_ringtone, None) yield ('wallpaper', self.__field_wallpaper, None) class _gen_p_lgpm225_126(BaseProtogenClass): 'Anonymous inner class' __fields=['email'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgpm225_126,self).__init__(**dict) if self.__class__ is _gen_p_lgpm225_126: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgpm225_126,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgpm225_126,kwargs) if len(args): dict2={'sizeinbytes': 73, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_email=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_email.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_email=USTRING(**{'sizeinbytes': 73, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_email.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 73, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def iscontainer(self): return True def containerelements(self): yield ('email', self.__field_email, None) class _gen_p_lgpm225_129(BaseProtogenClass): 'Anonymous inner class' __fields=['numberspeed'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgpm225_129,self).__init__(**dict) if self.__class__ is _gen_p_lgpm225_129: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgpm225_129,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgpm225_129,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_numberspeed=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numberspeed.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numberspeed=UINT(**{'sizeinbytes': 1}) self.__field_numberspeed.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numberspeed(self): return self.__field_numberspeed.getvalue() def __setfield_numberspeed(self, value): if isinstance(value,UINT): self.__field_numberspeed=value else: self.__field_numberspeed=UINT(value,**{'sizeinbytes': 1}) def __delfield_numberspeed(self): del self.__field_numberspeed numberspeed=property(__getfield_numberspeed, __setfield_numberspeed, __delfield_numberspeed, None) def iscontainer(self): return True def containerelements(self): yield ('numberspeed', self.__field_numberspeed, None) class _gen_p_lgpm225_131(BaseProtogenClass): 'Anonymous inner class' __fields=['numbertype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgpm225_131,self).__init__(**dict) if self.__class__ is _gen_p_lgpm225_131: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgpm225_131,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgpm225_131,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_numbertype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numbertype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numbertype=UINT(**{'sizeinbytes': 1}) self.__field_numbertype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numbertype(self): return self.__field_numbertype.getvalue() def __setfield_numbertype(self, value): if isinstance(value,UINT): self.__field_numbertype=value else: self.__field_numbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_numbertype(self): del self.__field_numbertype numbertype=property(__getfield_numbertype, __setfield_numbertype, __delfield_numbertype, None) def iscontainer(self): return True def containerelements(self): yield ('numbertype', self.__field_numbertype, None) class _gen_p_lgpm225_133(BaseProtogenClass): 'Anonymous inner class' __fields=['number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgpm225_133,self).__init__(**dict) if self.__class__ is _gen_p_lgpm225_133: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgpm225_133,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgpm225_133,kwargs) if len(args): dict2={'sizeinbytes': 49, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_number=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) class pbgroup(BaseProtogenClass): "A single group" __fields=['group_id', 'rectype', 'unknown2', 'unknown3', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroup,self).__init__(**dict) if self.__class__ is pbgroup: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroup,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroup,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_group_id.writetobuffer(buf) self.__field_rectype.writetobuffer(buf) try: self.__field_unknown2 except: self.__field_unknown2=UNKNOWN(**{'sizeinbytes': 3}) self.__field_unknown2.writetobuffer(buf) try: self.__field_unknown3 except: self.__field_unknown3=UNKNOWN(**{'sizeinbytes': 3}) self.__field_unknown3.writetobuffer(buf) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_group_id=UINT(**{'sizeinbytes': 1}) self.__field_group_id.readfrombuffer(buf) self.__field_rectype=UINT(**{'sizeinbytes': 1}) self.__field_rectype.readfrombuffer(buf) self.__field_unknown2=UNKNOWN(**{'sizeinbytes': 3}) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=UNKNOWN(**{'sizeinbytes': 3}) self.__field_unknown3.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_group_id(self): return self.__field_group_id.getvalue() def __setfield_group_id(self, value): if isinstance(value,UINT): self.__field_group_id=value else: self.__field_group_id=UINT(value,**{'sizeinbytes': 1}) def __delfield_group_id(self): del self.__field_group_id group_id=property(__getfield_group_id, __setfield_group_id, __delfield_group_id, None) def __getfield_rectype(self): return self.__field_rectype.getvalue() def __setfield_rectype(self, value): if isinstance(value,UINT): self.__field_rectype=value else: self.__field_rectype=UINT(value,**{'sizeinbytes': 1}) def __delfield_rectype(self): del self.__field_rectype rectype=property(__getfield_rectype, __setfield_rectype, __delfield_rectype, None) def __getfield_unknown2(self): try: self.__field_unknown2 except: self.__field_unknown2=UNKNOWN(**{'sizeinbytes': 3}) return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UNKNOWN): self.__field_unknown2=value else: self.__field_unknown2=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): try: self.__field_unknown3 except: self.__field_unknown3=UNKNOWN(**{'sizeinbytes': 3}) return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UNKNOWN): self.__field_unknown3=value else: self.__field_unknown3=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('group_id', self.__field_group_id, None) yield ('rectype', self.__field_rectype, None) yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) yield ('name', self.__field_name, None) class pbgroups(BaseProtogenClass): "Phonebook groups" __fields=['groups'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroups,self).__init__(**dict) if self.__class__ is pbgroups: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroups,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroups,kwargs) if len(args): dict2={'elementclass': pbgroup} dict2.update(kwargs) kwargs=dict2 self.__field_groups=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_groups(self): try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) return self.__field_groups.getvalue() def __setfield_groups(self, value): if isinstance(value,LIST): self.__field_groups=value else: self.__field_groups=LIST(value,**{'elementclass': pbgroup}) def __delfield_groups(self): del self.__field_groups groups=property(__getfield_groups, __setfield_groups, __delfield_groups, None) def iscontainer(self): return True def containerelements(self): yield ('groups', self.__field_groups, None) class pb_contact_media_entry(BaseProtogenClass): """Reads the wallpaper/ringer info for each contact on the phone""" __fields=['index', 'dont_care1', 'ringer', 'name', 'dont_care2', 'wallpaper', 'dont_care3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pb_contact_media_entry,self).__init__(**dict) if self.__class__ is pb_contact_media_entry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pb_contact_media_entry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pb_contact_media_entry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_dont_care1.writetobuffer(buf) self.__field_ringer.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_dont_care2.writetobuffer(buf) self.__field_wallpaper.writetobuffer(buf) self.__field_dont_care3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self.__field_dont_care1=DATA(**{'sizeinbytes': 18}) self.__field_dont_care1.readfrombuffer(buf) self.__field_ringer=UINT(**{'sizeinbytes': 2}) self.__field_ringer.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING}) self.__field_name.readfrombuffer(buf) self.__field_dont_care2=DATA(**{'sizeinbytes': 182}) self.__field_dont_care2.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 2}) self.__field_wallpaper.readfrombuffer(buf) self.__field_dont_care3=DATA(**{'sizeinbytes': 4}) self.__field_dont_care3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_dont_care1(self): return self.__field_dont_care1.getvalue() def __setfield_dont_care1(self, value): if isinstance(value,DATA): self.__field_dont_care1=value else: self.__field_dont_care1=DATA(value,**{'sizeinbytes': 18}) def __delfield_dont_care1(self): del self.__field_dont_care1 dont_care1=property(__getfield_dont_care1, __setfield_dont_care1, __delfield_dont_care1, None) def __getfield_ringer(self): return self.__field_ringer.getvalue() def __setfield_ringer(self, value): if isinstance(value,UINT): self.__field_ringer=value else: self.__field_ringer=UINT(value,**{'sizeinbytes': 2}) def __delfield_ringer(self): del self.__field_ringer ringer=property(__getfield_ringer, __setfield_ringer, __delfield_ringer, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_dont_care2(self): return self.__field_dont_care2.getvalue() def __setfield_dont_care2(self, value): if isinstance(value,DATA): self.__field_dont_care2=value else: self.__field_dont_care2=DATA(value,**{'sizeinbytes': 182}) def __delfield_dont_care2(self): del self.__field_dont_care2 dont_care2=property(__getfield_dont_care2, __setfield_dont_care2, __delfield_dont_care2, None) def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 2}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_dont_care3(self): return self.__field_dont_care3.getvalue() def __setfield_dont_care3(self, value): if isinstance(value,DATA): self.__field_dont_care3=value else: self.__field_dont_care3=DATA(value,**{'sizeinbytes': 4}) def __delfield_dont_care3(self): del self.__field_dont_care3 dont_care3=property(__getfield_dont_care3, __setfield_dont_care3, __delfield_dont_care3, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('dont_care1', self.__field_dont_care1, None) yield ('ringer', self.__field_ringer, None) yield ('name', self.__field_name, None) yield ('dont_care2', self.__field_dont_care2, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('dont_care3', self.__field_dont_care3, None) class pb_contact_media_file(BaseProtogenClass): __fields=['contacts'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pb_contact_media_file,self).__init__(**dict) if self.__class__ is pb_contact_media_file: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pb_contact_media_file,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pb_contact_media_file,kwargs) if len(args): dict2={'elementclass': pb_contact_media_entry} dict2.update(kwargs) kwargs=dict2 self.__field_contacts=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_contacts except: self.__field_contacts=LIST(**{'elementclass': pb_contact_media_entry}) self.__field_contacts.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_contacts=LIST(**{'elementclass': pb_contact_media_entry}) self.__field_contacts.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_contacts(self): try: self.__field_contacts except: self.__field_contacts=LIST(**{'elementclass': pb_contact_media_entry}) return self.__field_contacts.getvalue() def __setfield_contacts(self, value): if isinstance(value,LIST): self.__field_contacts=value else: self.__field_contacts=LIST(value,**{'elementclass': pb_contact_media_entry}) def __delfield_contacts(self): del self.__field_contacts contacts=property(__getfield_contacts, __setfield_contacts, __delfield_contacts, None) def iscontainer(self): return True def containerelements(self): yield ('contacts', self.__field_contacts, None) class scheduleexception(BaseProtogenClass): __fields=['pos', 'day', 'month', 'year'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexception,self).__init__(**dict) if self.__class__ is scheduleexception: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexception,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexception,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_day.writetobuffer(buf) self.__field_month.writetobuffer(buf) self.__field_year.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_day=UINT(**{'sizeinbytes': 1}) self.__field_day.readfrombuffer(buf) self.__field_month=UINT(**{'sizeinbytes': 1}) self.__field_month.readfrombuffer(buf) self.__field_year=UINT(**{'sizeinbytes': 2}) self.__field_year.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "Refers to event id (position in schedule file) that this suppresses") def __getfield_day(self): return self.__field_day.getvalue() def __setfield_day(self, value): if isinstance(value,UINT): self.__field_day=value else: self.__field_day=UINT(value,**{'sizeinbytes': 1}) def __delfield_day(self): del self.__field_day day=property(__getfield_day, __setfield_day, __delfield_day, None) def __getfield_month(self): return self.__field_month.getvalue() def __setfield_month(self, value): if isinstance(value,UINT): self.__field_month=value else: self.__field_month=UINT(value,**{'sizeinbytes': 1}) def __delfield_month(self): del self.__field_month month=property(__getfield_month, __setfield_month, __delfield_month, None) def __getfield_year(self): return self.__field_year.getvalue() def __setfield_year(self, value): if isinstance(value,UINT): self.__field_year=value else: self.__field_year=UINT(value,**{'sizeinbytes': 2}) def __delfield_year(self): del self.__field_year year=property(__getfield_year, __setfield_year, __delfield_year, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "Refers to event id (position in schedule file) that this suppresses") yield ('day', self.__field_day, None) yield ('month', self.__field_month, None) yield ('year', self.__field_year, None) class scheduleexceptionfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexceptionfile,self).__init__(**dict) if self.__class__ is scheduleexceptionfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexceptionfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexceptionfile,kwargs) if len(args): dict2={'elementclass': scheduleexception} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': scheduleexception}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class scheduleevent(BaseProtogenClass): __fields=['packet_size', 'pos', 'start', 'end', 'repeat', 'daybitmap', 'pad2', 'alarmminutes', 'alarmhours', 'alarmtype', 'snoozedelay', 'ringtone', 'pad3', 'description'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleevent,self).__init__(**dict) if self.__class__ is scheduleevent: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleevent,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleevent,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_packet_size except: self.__field_packet_size=UINT(**{ 'constant': 64 }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) self.__field_daybitmap.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad2.writetobuffer(buf) self.__field_alarmminutes.writetobuffer(buf) self.__field_alarmhours.writetobuffer(buf) self.__field_alarmtype.writetobuffer(buf) try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) try: self.__field_pad3 except: self.__field_pad3=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad3.writetobuffer(buf) self.__field_description.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_start=LGCALDATE(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=LGCALDATE(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_repeat=UINT(**{'sizeinbytes': 1}) self.__field_repeat.readfrombuffer(buf) self.__field_daybitmap=UINT(**{'sizeinbytes': 2}) self.__field_daybitmap.readfrombuffer(buf) self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad2.readfrombuffer(buf) self.__field_alarmminutes=UINT(**{'sizeinbytes': 1}) self.__field_alarmminutes.readfrombuffer(buf) self.__field_alarmhours=UINT(**{'sizeinbytes': 1}) self.__field_alarmhours.readfrombuffer(buf) self.__field_alarmtype=UINT(**{'sizeinbytes': 1}) self.__field_alarmtype.readfrombuffer(buf) self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_pad3=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad3.readfrombuffer(buf) self.__field_description=USTRING(**{'sizeinbytes': 42, 'encoding': PHONE_ENCODING, 'raiseontruncate': False, 'raiseonunterminatedread': False }) self.__field_description.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_packet_size(self): return self.__field_packet_size.getvalue() def __setfield_packet_size(self, value): if isinstance(value,UINT): self.__field_packet_size=value else: self.__field_packet_size=UINT(value,**{ 'constant': 64 }) def __delfield_packet_size(self): del self.__field_packet_size packet_size=property(__getfield_packet_size, __setfield_packet_size, __delfield_packet_size, "Faster than packetsize()") def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "position within file, used as an event id") def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,LGCALDATE): self.__field_start=value else: self.__field_start=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,LGCALDATE): self.__field_end=value else: self.__field_end=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,UINT): self.__field_repeat=value else: self.__field_repeat=UINT(value,**{'sizeinbytes': 1}) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_daybitmap(self): return self.__field_daybitmap.getvalue() def __setfield_daybitmap(self, value): if isinstance(value,UINT): self.__field_daybitmap=value else: self.__field_daybitmap=UINT(value,**{'sizeinbytes': 2}) def __delfield_daybitmap(self): del self.__field_daybitmap daybitmap=property(__getfield_daybitmap, __setfield_daybitmap, __delfield_daybitmap, "which days a weekly repeat event happens on") def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UINT): self.__field_pad2=value else: self.__field_pad2=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_alarmminutes(self): return self.__field_alarmminutes.getvalue() def __setfield_alarmminutes(self, value): if isinstance(value,UINT): self.__field_alarmminutes=value else: self.__field_alarmminutes=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmminutes(self): del self.__field_alarmminutes alarmminutes=property(__getfield_alarmminutes, __setfield_alarmminutes, __delfield_alarmminutes, "a value of 100 indicates not set") def __getfield_alarmhours(self): return self.__field_alarmhours.getvalue() def __setfield_alarmhours(self, value): if isinstance(value,UINT): self.__field_alarmhours=value else: self.__field_alarmhours=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmhours(self): del self.__field_alarmhours alarmhours=property(__getfield_alarmhours, __setfield_alarmhours, __delfield_alarmhours, "a value of 100 indicates not set") def __getfield_alarmtype(self): return self.__field_alarmtype.getvalue() def __setfield_alarmtype(self, value): if isinstance(value,UINT): self.__field_alarmtype=value else: self.__field_alarmtype=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmtype(self): del self.__field_alarmtype alarmtype=property(__getfield_alarmtype, __setfield_alarmtype, __delfield_alarmtype, "preset alarm reminder type") def __getfield_snoozedelay(self): try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_snoozedelay.getvalue() def __setfield_snoozedelay(self, value): if isinstance(value,UINT): self.__field_snoozedelay=value else: self.__field_snoozedelay=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_snoozedelay(self): del self.__field_snoozedelay snoozedelay=property(__getfield_snoozedelay, __setfield_snoozedelay, __delfield_snoozedelay, "in minutes, not for this phone") def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_pad3(self): try: self.__field_pad3 except: self.__field_pad3=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_pad3.getvalue() def __setfield_pad3(self, value): if isinstance(value,UINT): self.__field_pad3=value else: self.__field_pad3=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_pad3(self): del self.__field_pad3 pad3=property(__getfield_pad3, __setfield_pad3, __delfield_pad3, None) def __getfield_description(self): return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,USTRING): self.__field_description=value else: self.__field_description=USTRING(value,**{'sizeinbytes': 42, 'encoding': PHONE_ENCODING, 'raiseontruncate': False, 'raiseonunterminatedread': False }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def iscontainer(self): return True def containerelements(self): yield ('packet_size', self.__field_packet_size, "Faster than packetsize()") yield ('pos', self.__field_pos, "position within file, used as an event id") yield ('start', self.__field_start, None) yield ('end', self.__field_end, None) yield ('repeat', self.__field_repeat, None) yield ('daybitmap', self.__field_daybitmap, "which days a weekly repeat event happens on") yield ('pad2', self.__field_pad2, None) yield ('alarmminutes', self.__field_alarmminutes, "a value of 100 indicates not set") yield ('alarmhours', self.__field_alarmhours, "a value of 100 indicates not set") yield ('alarmtype', self.__field_alarmtype, "preset alarm reminder type") yield ('snoozedelay', self.__field_snoozedelay, "in minutes, not for this phone") yield ('ringtone', self.__field_ringtone, None) yield ('pad3', self.__field_pad3, None) yield ('description', self.__field_description, None) class schedulefile(BaseProtogenClass): __fields=['numactiveitems', 'events'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(schedulefile,self).__init__(**dict) if self.__class__ is schedulefile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(schedulefile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(schedulefile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{'elementclass': scheduleevent}) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('events', self.__field_events, None) class call(BaseProtogenClass): __fields=['GPStime', 'unknown1', 'duration', 'number', 'name', 'numberlength', 'unknown2', 'pbnumbertype', 'unknown3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(call,self).__init__(**dict) if self.__class__ is call: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(call,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(call,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_numberlength.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_pbnumbertype.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 4}) self.__field_unknown1.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_numberlength=UINT(**{'sizeinbytes': 1}) self.__field_numberlength.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_pbnumbertype=UINT(**{'sizeinbytes': 1}) self.__field_pbnumbertype.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 5}) self.__field_unknown3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numberlength(self): return self.__field_numberlength.getvalue() def __setfield_numberlength(self, value): if isinstance(value,UINT): self.__field_numberlength=value else: self.__field_numberlength=UINT(value,**{'sizeinbytes': 1}) def __delfield_numberlength(self): del self.__field_numberlength numberlength=property(__getfield_numberlength, __setfield_numberlength, __delfield_numberlength, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_pbnumbertype(self): return self.__field_pbnumbertype.getvalue() def __setfield_pbnumbertype(self, value): if isinstance(value,UINT): self.__field_pbnumbertype=value else: self.__field_pbnumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_pbnumbertype(self): del self.__field_pbnumbertype pbnumbertype=property(__getfield_pbnumbertype, __setfield_pbnumbertype, __delfield_pbnumbertype, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 5}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def iscontainer(self): return True def containerelements(self): yield ('GPStime', self.__field_GPStime, None) yield ('unknown1', self.__field_unknown1, None) yield ('duration', self.__field_duration, None) yield ('number', self.__field_number, None) yield ('name', self.__field_name, None) yield ('numberlength', self.__field_numberlength, None) yield ('unknown2', self.__field_unknown2, None) yield ('pbnumbertype', self.__field_pbnumbertype, None) yield ('unknown3', self.__field_unknown3, None) class callhistory(BaseProtogenClass): __fields=['numcalls', 'unknown1', 'calls'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callhistory,self).__init__(**dict) if self.__class__ is callhistory: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callhistory,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callhistory,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numcalls.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numcalls=UINT(**{'sizeinbytes': 4}) self.__field_numcalls.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numcalls(self): return self.__field_numcalls.getvalue() def __setfield_numcalls(self, value): if isinstance(value,UINT): self.__field_numcalls=value else: self.__field_numcalls=UINT(value,**{'sizeinbytes': 4}) def __delfield_numcalls(self): del self.__field_numcalls numcalls=property(__getfield_numcalls, __setfield_numcalls, __delfield_numcalls, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_calls(self): try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) return self.__field_calls.getvalue() def __setfield_calls(self, value): if isinstance(value,LIST): self.__field_calls=value else: self.__field_calls=LIST(value,**{'elementclass': call}) def __delfield_calls(self): del self.__field_calls calls=property(__getfield_calls, __setfield_calls, __delfield_calls, None) def iscontainer(self): return True def containerelements(self): yield ('numcalls', self.__field_numcalls, None) yield ('unknown1', self.__field_unknown1, None) yield ('calls', self.__field_calls, None) class indexentry(BaseProtogenClass): __fields=['index', 'const', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_const.writetobuffer(buf) try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 40, 'default': ""}) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 1}) self.__field_index.readfrombuffer(buf) self.__field_const=UINT(**{'sizeinbytes': 1}) self.__field_const.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 40, 'default': ""}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 1}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_const(self): return self.__field_const.getvalue() def __setfield_const(self, value): if isinstance(value,UINT): self.__field_const=value else: self.__field_const=UINT(value,**{'sizeinbytes': 1}) def __delfield_const(self): del self.__field_const const=property(__getfield_const, __setfield_const, __delfield_const, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 40, 'default': ""}) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 40, 'default': ""}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('const', self.__field_const, None) yield ('name', self.__field_name, None) class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['numactiveitems', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('items', self.__field_items, None) class content_entry(BaseProtogenClass): __fields=['type', 'index1', 'name1', 'unknown1', 'unknown2', 'mime_type', 'content_type', 'url', 'unknown_int1', 'unknown3', 'unknown_int2', 'unknown4', 'unknown5', 'size', 'location_maybe', 'index2', 'name2', 'unknown6'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(content_entry,self).__init__(**dict) if self.__class__ is content_entry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(content_entry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(content_entry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_type.writetobuffer(buf) if self.type=='!C': self.__field_index1.writetobuffer(buf) self.__field_name1.writetobuffer(buf) try: self.__field_unknown1 except: self.__field_unknown1=USTRING(**{'terminator': 0xA, 'default': '-1'}) self.__field_unknown1.writetobuffer(buf) try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 8, 'default' :0}) self.__field_unknown2.writetobuffer(buf) self.__field_mime_type.writetobuffer(buf) self.__field_content_type.writetobuffer(buf) try: self.__field_url except: self.__field_url=USTRING(**{'terminator': 0xA, 'default':'bitpim.org'}) self.__field_url.writetobuffer(buf) try: self.__field_unknown_int1 except: self.__field_unknown_int1=UINT(**{'sizeinbytes': 1, 'default':0x14}) self.__field_unknown_int1.writetobuffer(buf) try: self.__field_unknown3 except: self.__field_unknown3=USTRING(**{'terminator': 0xA, 'default':''}) self.__field_unknown3.writetobuffer(buf) try: self.__field_unknown_int2 except: self.__field_unknown_int2=UINT(**{'sizeinbytes': 1, 'default':0x14}) self.__field_unknown_int2.writetobuffer(buf) try: self.__field_unknown4 except: self.__field_unknown4=USTRING(**{'terminator': 0xA, 'default':''}) self.__field_unknown4.writetobuffer(buf) try: self.__field_unknown5 except: self.__field_unknown5=USTRING(**{'terminator': 0xA, 'default':'0'}) self.__field_unknown5.writetobuffer(buf) self.__field_size.writetobuffer(buf) if self.type=='!E': try: self.__field_location_maybe except: self.__field_location_maybe=USTRING(**{'terminator': 0xA, 'default':'ams:'}) self.__field_location_maybe.writetobuffer(buf) self.__field_index2.writetobuffer(buf) self.__field_name2.writetobuffer(buf) try: self.__field_unknown6 except: self.__field_unknown6=USTRING(**{'terminator': 0xA, 'default':''}) self.__field_unknown6.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_type=USTRING(**{'sizeinbytes': 3, 'terminator': 0xA}) self.__field_type.readfrombuffer(buf) if self.type=='!C': self.__field_index1=USTRING(**{'terminator': 0xA}) self.__field_index1.readfrombuffer(buf) self.__field_name1=USTRING(**{'terminator': 0xA}) self.__field_name1.readfrombuffer(buf) self.__field_unknown1=USTRING(**{'terminator': 0xA, 'default': '-1'}) self.__field_unknown1.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 8, 'default' :0}) self.__field_unknown2.readfrombuffer(buf) self.__field_mime_type=USTRING(**{'terminator': 0xA}) self.__field_mime_type.readfrombuffer(buf) self.__field_content_type=USTRING(**{'terminator': 0xA}) self.__field_content_type.readfrombuffer(buf) self.__field_url=USTRING(**{'terminator': 0xA, 'default':'bitpim.org'}) self.__field_url.readfrombuffer(buf) self.__field_unknown_int1=UINT(**{'sizeinbytes': 1, 'default':0x14}) self.__field_unknown_int1.readfrombuffer(buf) self.__field_unknown3=USTRING(**{'terminator': 0xA, 'default':''}) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown_int2=UINT(**{'sizeinbytes': 1, 'default':0x14}) self.__field_unknown_int2.readfrombuffer(buf) self.__field_unknown4=USTRING(**{'terminator': 0xA, 'default':''}) self.__field_unknown4.readfrombuffer(buf) self.__field_unknown5=USTRING(**{'terminator': 0xA, 'default':'0'}) self.__field_unknown5.readfrombuffer(buf) self.__field_size=USTRING(**{'terminator': 0xA}) self.__field_size.readfrombuffer(buf) if self.type=='!E': self.__field_location_maybe=USTRING(**{'terminator': 0xA, 'default':'ams:'}) self.__field_location_maybe.readfrombuffer(buf) self.__field_index2=USTRING(**{'terminator': 0xA}) self.__field_index2.readfrombuffer(buf) self.__field_name2=USTRING(**{'terminator': 0xA}) self.__field_name2.readfrombuffer(buf) self.__field_unknown6=USTRING(**{'terminator': 0xA, 'default':''}) self.__field_unknown6.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_type(self): return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,USTRING): self.__field_type=value else: self.__field_type=USTRING(value,**{'sizeinbytes': 3, 'terminator': 0xA}) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, None) def __getfield_index1(self): return self.__field_index1.getvalue() def __setfield_index1(self, value): if isinstance(value,USTRING): self.__field_index1=value else: self.__field_index1=USTRING(value,**{'terminator': 0xA}) def __delfield_index1(self): del self.__field_index1 index1=property(__getfield_index1, __setfield_index1, __delfield_index1, None) def __getfield_name1(self): return self.__field_name1.getvalue() def __setfield_name1(self, value): if isinstance(value,USTRING): self.__field_name1=value else: self.__field_name1=USTRING(value,**{'terminator': 0xA}) def __delfield_name1(self): del self.__field_name1 name1=property(__getfield_name1, __setfield_name1, __delfield_name1, None) def __getfield_unknown1(self): try: self.__field_unknown1 except: self.__field_unknown1=USTRING(**{'terminator': 0xA, 'default': '-1'}) return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,USTRING): self.__field_unknown1=value else: self.__field_unknown1=USTRING(value,**{'terminator': 0xA, 'default': '-1'}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_unknown2(self): try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 8, 'default' :0}) return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 8, 'default' :0}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_mime_type(self): return self.__field_mime_type.getvalue() def __setfield_mime_type(self, value): if isinstance(value,USTRING): self.__field_mime_type=value else: self.__field_mime_type=USTRING(value,**{'terminator': 0xA}) def __delfield_mime_type(self): del self.__field_mime_type mime_type=property(__getfield_mime_type, __setfield_mime_type, __delfield_mime_type, None) def __getfield_content_type(self): return self.__field_content_type.getvalue() def __setfield_content_type(self, value): if isinstance(value,USTRING): self.__field_content_type=value else: self.__field_content_type=USTRING(value,**{'terminator': 0xA}) def __delfield_content_type(self): del self.__field_content_type content_type=property(__getfield_content_type, __setfield_content_type, __delfield_content_type, None) def __getfield_url(self): try: self.__field_url except: self.__field_url=USTRING(**{'terminator': 0xA, 'default':'bitpim.org'}) return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,USTRING): self.__field_url=value else: self.__field_url=USTRING(value,**{'terminator': 0xA, 'default':'bitpim.org'}) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_unknown_int1(self): try: self.__field_unknown_int1 except: self.__field_unknown_int1=UINT(**{'sizeinbytes': 1, 'default':0x14}) return self.__field_unknown_int1.getvalue() def __setfield_unknown_int1(self, value): if isinstance(value,UINT): self.__field_unknown_int1=value else: self.__field_unknown_int1=UINT(value,**{'sizeinbytes': 1, 'default':0x14}) def __delfield_unknown_int1(self): del self.__field_unknown_int1 unknown_int1=property(__getfield_unknown_int1, __setfield_unknown_int1, __delfield_unknown_int1, None) def __getfield_unknown3(self): try: self.__field_unknown3 except: self.__field_unknown3=USTRING(**{'terminator': 0xA, 'default':''}) return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,USTRING): self.__field_unknown3=value else: self.__field_unknown3=USTRING(value,**{'terminator': 0xA, 'default':''}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown_int2(self): try: self.__field_unknown_int2 except: self.__field_unknown_int2=UINT(**{'sizeinbytes': 1, 'default':0x14}) return self.__field_unknown_int2.getvalue() def __setfield_unknown_int2(self, value): if isinstance(value,UINT): self.__field_unknown_int2=value else: self.__field_unknown_int2=UINT(value,**{'sizeinbytes': 1, 'default':0x14}) def __delfield_unknown_int2(self): del self.__field_unknown_int2 unknown_int2=property(__getfield_unknown_int2, __setfield_unknown_int2, __delfield_unknown_int2, None) def __getfield_unknown4(self): try: self.__field_unknown4 except: self.__field_unknown4=USTRING(**{'terminator': 0xA, 'default':''}) return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,USTRING): self.__field_unknown4=value else: self.__field_unknown4=USTRING(value,**{'terminator': 0xA, 'default':''}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_unknown5(self): try: self.__field_unknown5 except: self.__field_unknown5=USTRING(**{'terminator': 0xA, 'default':'0'}) return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,USTRING): self.__field_unknown5=value else: self.__field_unknown5=USTRING(value,**{'terminator': 0xA, 'default':'0'}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_size(self): return self.__field_size.getvalue() def __setfield_size(self, value): if isinstance(value,USTRING): self.__field_size=value else: self.__field_size=USTRING(value,**{'terminator': 0xA}) def __delfield_size(self): del self.__field_size size=property(__getfield_size, __setfield_size, __delfield_size, None) def __getfield_location_maybe(self): try: self.__field_location_maybe except: self.__field_location_maybe=USTRING(**{'terminator': 0xA, 'default':'ams:'}) return self.__field_location_maybe.getvalue() def __setfield_location_maybe(self, value): if isinstance(value,USTRING): self.__field_location_maybe=value else: self.__field_location_maybe=USTRING(value,**{'terminator': 0xA, 'default':'ams:'}) def __delfield_location_maybe(self): del self.__field_location_maybe location_maybe=property(__getfield_location_maybe, __setfield_location_maybe, __delfield_location_maybe, None) def __getfield_index2(self): return self.__field_index2.getvalue() def __setfield_index2(self, value): if isinstance(value,USTRING): self.__field_index2=value else: self.__field_index2=USTRING(value,**{'terminator': 0xA}) def __delfield_index2(self): del self.__field_index2 index2=property(__getfield_index2, __setfield_index2, __delfield_index2, None) def __getfield_name2(self): return self.__field_name2.getvalue() def __setfield_name2(self, value): if isinstance(value,USTRING): self.__field_name2=value else: self.__field_name2=USTRING(value,**{'terminator': 0xA}) def __delfield_name2(self): del self.__field_name2 name2=property(__getfield_name2, __setfield_name2, __delfield_name2, None) def __getfield_unknown6(self): try: self.__field_unknown6 except: self.__field_unknown6=USTRING(**{'terminator': 0xA, 'default':''}) return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,USTRING): self.__field_unknown6=value else: self.__field_unknown6=USTRING(value,**{'terminator': 0xA, 'default':''}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def iscontainer(self): return True def containerelements(self): yield ('type', self.__field_type, None) if self.type=='!C': yield ('index1', self.__field_index1, None) yield ('name1', self.__field_name1, None) yield ('unknown1', self.__field_unknown1, None) yield ('unknown2', self.__field_unknown2, None) yield ('mime_type', self.__field_mime_type, None) yield ('content_type', self.__field_content_type, None) yield ('url', self.__field_url, None) yield ('unknown_int1', self.__field_unknown_int1, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown_int2', self.__field_unknown_int2, None) yield ('unknown4', self.__field_unknown4, None) yield ('unknown5', self.__field_unknown5, None) yield ('size', self.__field_size, None) if self.type=='!E': yield ('location_maybe', self.__field_location_maybe, None) yield ('index2', self.__field_index2, None) yield ('name2', self.__field_name2, None) yield ('unknown6', self.__field_unknown6, None) class content_file(BaseProtogenClass): "Used to store all content on the phone, apps, ringers and images (with the exception of the camera)" __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(content_file,self).__init__(**dict) if self.__class__ is content_file: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(content_file,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(content_file,kwargs) if len(args): dict2={'elementclass': content_entry, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': content_entry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': content_entry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': content_entry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': content_entry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class content_count(BaseProtogenClass): "Stores the number of items in the content file" __fields=['count'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(content_count,self).__init__(**dict) if self.__class__ is content_count: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(content_count,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(content_count,kwargs) if len(args): dict2={'terminator': None} dict2.update(kwargs) kwargs=dict2 self.__field_count=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_count.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_count=USTRING(**{'terminator': None}) self.__field_count.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_count(self): return self.__field_count.getvalue() def __setfield_count(self, value): if isinstance(value,USTRING): self.__field_count=value else: self.__field_count=USTRING(value,**{'terminator': None}) def __delfield_count(self): del self.__field_count count=property(__getfield_count, __setfield_count, __delfield_count, None) def iscontainer(self): return True def containerelements(self): yield ('count', self.__field_count, None) class qcp_media_header(BaseProtogenClass): "Start of a qcp format file, used to determine if a file is qcp or mp3 format" __fields=['riff', 'riff_size', 'qcp_format', 'stuff'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(qcp_media_header,self).__init__(**dict) if self.__class__ is qcp_media_header: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(qcp_media_header,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(qcp_media_header,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_riff.writetobuffer(buf) self.__field_riff_size.writetobuffer(buf) self.__field_qcp_format.writetobuffer(buf) self.__field_stuff.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_riff=USTRING(**{'sizeinbytes': 4, 'constant': 'RIFF', 'terminator': None}) self.__field_riff.readfrombuffer(buf) self.__field_riff_size=UINT(**{'sizeinbytes': 4}) self.__field_riff_size.readfrombuffer(buf) self.__field_qcp_format=USTRING(**{'sizeinbytes': 8, 'constant': 'QLCMfmt ', 'terminator': None}) self.__field_qcp_format.readfrombuffer(buf) self.__field_stuff=DATA() self.__field_stuff.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_riff(self): return self.__field_riff.getvalue() def __setfield_riff(self, value): if isinstance(value,USTRING): self.__field_riff=value else: self.__field_riff=USTRING(value,**{'sizeinbytes': 4, 'constant': 'RIFF', 'terminator': None}) def __delfield_riff(self): del self.__field_riff riff=property(__getfield_riff, __setfield_riff, __delfield_riff, None) def __getfield_riff_size(self): return self.__field_riff_size.getvalue() def __setfield_riff_size(self, value): if isinstance(value,UINT): self.__field_riff_size=value else: self.__field_riff_size=UINT(value,**{'sizeinbytes': 4}) def __delfield_riff_size(self): del self.__field_riff_size riff_size=property(__getfield_riff_size, __setfield_riff_size, __delfield_riff_size, None) def __getfield_qcp_format(self): return self.__field_qcp_format.getvalue() def __setfield_qcp_format(self, value): if isinstance(value,USTRING): self.__field_qcp_format=value else: self.__field_qcp_format=USTRING(value,**{'sizeinbytes': 8, 'constant': 'QLCMfmt ', 'terminator': None}) def __delfield_qcp_format(self): del self.__field_qcp_format qcp_format=property(__getfield_qcp_format, __setfield_qcp_format, __delfield_qcp_format, None) def __getfield_stuff(self): return self.__field_stuff.getvalue() def __setfield_stuff(self, value): if isinstance(value,DATA): self.__field_stuff=value else: self.__field_stuff=DATA(value,) def __delfield_stuff(self): del self.__field_stuff stuff=property(__getfield_stuff, __setfield_stuff, __delfield_stuff, None) def iscontainer(self): return True def containerelements(self): yield ('riff', self.__field_riff, None) yield ('riff_size', self.__field_riff_size, None) yield ('qcp_format', self.__field_qcp_format, None) yield ('stuff', self.__field_stuff, None) class textmemo(BaseProtogenClass): __fields=['text'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemo,self).__init__(**dict) if self.__class__ is textmemo: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemo,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemo,kwargs) if len(args): dict2={'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } dict2.update(kwargs) kwargs=dict2 self.__field_text=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_text.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_text=USTRING(**{'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_text.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,USTRING): self.__field_text=value else: self.__field_text=USTRING(value,**{'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def iscontainer(self): return True def containerelements(self): yield ('text', self.__field_text, None) class textmemofile(BaseProtogenClass): __fields=['itemcount', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemofile,self).__init__(**dict) if self.__class__ is textmemofile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemofile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemofile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_itemcount.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_itemcount=UINT(**{'sizeinbytes': 4}) self.__field_itemcount.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_itemcount(self): return self.__field_itemcount.getvalue() def __setfield_itemcount(self, value): if isinstance(value,UINT): self.__field_itemcount=value else: self.__field_itemcount=UINT(value,**{'sizeinbytes': 4}) def __delfield_itemcount(self): del self.__field_itemcount itemcount=property(__getfield_itemcount, __setfield_itemcount, __delfield_itemcount, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': textmemo }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('itemcount', self.__field_itemcount, None) yield ('items', self.__field_items, None) class recipient_record(BaseProtogenClass): __fields=['unknown1', 'name', 'number', 'unknown2', 'status', 'unknown3', 'time', 'unknown2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(recipient_record,self).__init__(**dict) if self.__class__ is recipient_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(recipient_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(recipient_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_time.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UINT(**{'sizeinbytes': 8}) self.__field_unknown1.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49}) self.__field_number.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 24}) self.__field_unknown2.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1}) self.__field_unknown3.readfrombuffer(buf) self.__field_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_time.readfrombuffer(buf) self.__field_unknown2=DATA(**{'sizeinbytes': 12}) self.__field_unknown2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 8}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 24}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_time(self): return self.__field_time.getvalue() def __setfield_time(self, value): if isinstance(value,LGCALDATE): self.__field_time=value else: self.__field_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_time(self): del self.__field_time time=property(__getfield_time, __setfield_time, __delfield_time, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,DATA): self.__field_unknown2=value else: self.__field_unknown2=DATA(value,**{'sizeinbytes': 12}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('name', self.__field_name, None) yield ('number', self.__field_number, None) yield ('unknown2', self.__field_unknown2, None) yield ('status', self.__field_status, None) yield ('unknown3', self.__field_unknown3, None) yield ('time', self.__field_time, None) yield ('unknown2', self.__field_unknown2, None) class sms_out(BaseProtogenClass): __fields=['index', 'locked', 'unknown1', 'timesent', 'saved', 'msg', 'unknown3', 'callback', 'recipients'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_out,self).__init__(**dict) if self.__class__ is sms_out: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_out,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_out,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_saved.writetobuffer(buf) self.__field_msg.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_callback.writetobuffer(buf) try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record, 'length': 10}) self.__field_recipients.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 3}) self.__field_unknown1.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_saved=UINT(**{'sizeinbytes': 1}) self.__field_saved.readfrombuffer(buf) self.__field_msg=USTRING(**{'sizeinbytes': 178, 'encoding': PHONE_ENCODING}) self.__field_msg.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1}) self.__field_unknown3.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 16}) self.__field_callback.readfrombuffer(buf) self.__field_recipients=LIST(**{'elementclass': recipient_record, 'length': 10}) self.__field_recipients.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_saved(self): return self.__field_saved.getvalue() def __setfield_saved(self, value): if isinstance(value,UINT): self.__field_saved=value else: self.__field_saved=UINT(value,**{'sizeinbytes': 1}) def __delfield_saved(self): del self.__field_saved saved=property(__getfield_saved, __setfield_saved, __delfield_saved, None) def __getfield_msg(self): return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{'sizeinbytes': 178, 'encoding': PHONE_ENCODING}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 16}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_recipients(self): try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record, 'length': 10}) return self.__field_recipients.getvalue() def __setfield_recipients(self, value): if isinstance(value,LIST): self.__field_recipients=value else: self.__field_recipients=LIST(value,**{'elementclass': recipient_record, 'length': 10}) def __delfield_recipients(self): del self.__field_recipients recipients=property(__getfield_recipients, __setfield_recipients, __delfield_recipients, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('locked', self.__field_locked, None) yield ('unknown1', self.__field_unknown1, None) yield ('timesent', self.__field_timesent, None) yield ('saved', self.__field_saved, None) yield ('msg', self.__field_msg, None) yield ('unknown3', self.__field_unknown3, None) yield ('callback', self.__field_callback, None) yield ('recipients', self.__field_recipients, None) class SMSINBOXMSGFRAGMENT(BaseProtogenClass): __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSINBOXMSGFRAGMENT,self).__init__(**dict) if self.__class__ is SMSINBOXMSGFRAGMENT: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSINBOXMSGFRAGMENT,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSINBOXMSGFRAGMENT,kwargs) if len(args): dict2={'elementclass': _gen_p_lgpm225_337, 'length': 181} dict2.update(kwargs) kwargs=dict2 self.__field_msg=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgpm225_337, 'length': 181}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=LIST(**{'elementclass': _gen_p_lgpm225_337, 'length': 181}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgpm225_337, 'length': 181}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgpm225_337, 'length': 181}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class _gen_p_lgpm225_337(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgpm225_337,self).__init__(**dict) if self.__class__ is _gen_p_lgpm225_337: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgpm225_337,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgpm225_337,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class sms_in(BaseProtogenClass): __fields=['unknown1', 'msg_index2', 'unknown2', 'timesent', 'unknown', 'callback_length', 'callback', 'sender_length', 'sender', 'unknown4', 'lg_time', 'GPStime', 'read', 'locked', 'unknown5', 'subject', 'msglength', 'msg', 'unknown8'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_in,self).__init__(**dict) if self.__class__ is sms_in: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_in,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_in,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_msg_index2.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self.__field_callback_length.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_sender_length.writetobuffer(buf) try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgpm225_349, 'length': 38}) self.__field_sender.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_lg_time.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_msglength.writetobuffer(buf) self.__field_msg.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UINT(**{'sizeinbytes': 4}) self.__field_unknown1.readfrombuffer(buf) self.__field_msg_index2=UINT(**{'sizeinbytes': 4}) self.__field_msg_index2.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2}) self.__field_unknown2.readfrombuffer(buf) self.__field_timesent=SMSDATE(**{'sizeinbytes': 6}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown=UINT(**{'sizeinbytes': 3}) self.__field_unknown.readfrombuffer(buf) self.__field_callback_length=UINT(**{'sizeinbytes': 1}) self.__field_callback_length.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 38}) self.__field_callback.readfrombuffer(buf) self.__field_sender_length=UINT(**{'sizeinbytes': 1}) self.__field_sender_length.readfrombuffer(buf) self.__field_sender=LIST(**{'elementclass': _gen_p_lgpm225_349, 'length': 38}) self.__field_sender.readfrombuffer(buf) self.__field_unknown4=DATA(**{'sizeinbytes': 15}) self.__field_unknown4.readfrombuffer(buf) self.__field_lg_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_lg_time.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 2}) self.__field_read.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 8}) self.__field_unknown5.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 73, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_msglength=UINT(**{'sizeinbytes': 2}) self.__field_msglength.readfrombuffer(buf) self.__field_msg=USTRING(**{'sizeinbytes': 200, 'encoding': PHONE_ENCODING}) self.__field_msg.readfrombuffer(buf) self.__field_unknown8=DATA() self.__field_unknown8.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_msg_index2(self): return self.__field_msg_index2.getvalue() def __setfield_msg_index2(self, value): if isinstance(value,UINT): self.__field_msg_index2=value else: self.__field_msg_index2=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index2(self): del self.__field_msg_index2 msg_index2=property(__getfield_msg_index2, __setfield_msg_index2, __delfield_msg_index2, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,SMSDATE): self.__field_timesent=value else: self.__field_timesent=SMSDATE(value,**{'sizeinbytes': 6}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UINT): self.__field_unknown=value else: self.__field_unknown=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def __getfield_callback_length(self): return self.__field_callback_length.getvalue() def __setfield_callback_length(self, value): if isinstance(value,UINT): self.__field_callback_length=value else: self.__field_callback_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_length(self): del self.__field_callback_length callback_length=property(__getfield_callback_length, __setfield_callback_length, __delfield_callback_length, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 38}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_sender_length(self): return self.__field_sender_length.getvalue() def __setfield_sender_length(self, value): if isinstance(value,UINT): self.__field_sender_length=value else: self.__field_sender_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_sender_length(self): del self.__field_sender_length sender_length=property(__getfield_sender_length, __setfield_sender_length, __delfield_sender_length, None) def __getfield_sender(self): try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgpm225_349, 'length': 38}) return self.__field_sender.getvalue() def __setfield_sender(self, value): if isinstance(value,LIST): self.__field_sender=value else: self.__field_sender=LIST(value,**{'elementclass': _gen_p_lgpm225_349, 'length': 38}) def __delfield_sender(self): del self.__field_sender sender=property(__getfield_sender, __setfield_sender, __delfield_sender, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,DATA): self.__field_unknown4=value else: self.__field_unknown4=DATA(value,**{'sizeinbytes': 15}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_lg_time(self): return self.__field_lg_time.getvalue() def __setfield_lg_time(self, value): if isinstance(value,LGCALDATE): self.__field_lg_time=value else: self.__field_lg_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_lg_time(self): del self.__field_lg_time lg_time=property(__getfield_lg_time, __setfield_lg_time, __delfield_lg_time, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 2}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 8}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 73, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_msglength(self): return self.__field_msglength.getvalue() def __setfield_msglength(self, value): if isinstance(value,UINT): self.__field_msglength=value else: self.__field_msglength=UINT(value,**{'sizeinbytes': 2}) def __delfield_msglength(self): del self.__field_msglength msglength=property(__getfield_msglength, __setfield_msglength, __delfield_msglength, None) def __getfield_msg(self): return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{'sizeinbytes': 200, 'encoding': PHONE_ENCODING}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,DATA): self.__field_unknown8=value else: self.__field_unknown8=DATA(value,) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('msg_index2', self.__field_msg_index2, None) yield ('unknown2', self.__field_unknown2, None) yield ('timesent', self.__field_timesent, None) yield ('unknown', self.__field_unknown, None) yield ('callback_length', self.__field_callback_length, None) yield ('callback', self.__field_callback, None) yield ('sender_length', self.__field_sender_length, None) yield ('sender', self.__field_sender, None) yield ('unknown4', self.__field_unknown4, None) yield ('lg_time', self.__field_lg_time, None) yield ('GPStime', self.__field_GPStime, None) yield ('read', self.__field_read, None) yield ('locked', self.__field_locked, None) yield ('unknown5', self.__field_unknown5, None) yield ('subject', self.__field_subject, None) yield ('msglength', self.__field_msglength, None) yield ('msg', self.__field_msg, None) yield ('unknown8', self.__field_unknown8, None) class _gen_p_lgpm225_349(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgpm225_349,self).__init__(**dict) if self.__class__ is _gen_p_lgpm225_349: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgpm225_349,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgpm225_349,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of senders phone number") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of senders phone number") class sms_quick_text(BaseProtogenClass): __fields=['dunno', 'msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_quick_text,self).__init__(**dict) if self.__class__ is sms_quick_text: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_quick_text,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_quick_text,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_dunno.writetobuffer(buf) try: self.__field_msg except: self.__field_msg=USTRING(**{'sizeinbytes': 104, 'encoding': PHONE_ENCODING, 'default': ""}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_dunno.readfrombuffer(buf) self.__field_msg=USTRING(**{'sizeinbytes': 104, 'encoding': PHONE_ENCODING, 'default': ""}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_dunno(self): try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default': 0}) return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 4, 'default': 0}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=USTRING(**{'sizeinbytes': 104, 'encoding': PHONE_ENCODING, 'default': ""}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{'sizeinbytes': 104, 'encoding': PHONE_ENCODING, 'default': ""}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('dunno', self.__field_dunno, None) yield ('msg', self.__field_msg, None) class sms_canned_file(BaseProtogenClass): __fields=['num_active', 'msgs'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_canned_file,self).__init__(**dict) if self.__class__ is sms_canned_file: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_canned_file,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_canned_file,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_num_active.writetobuffer(buf) try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True, 'elementclass': sms_quick_text}) self.__field_msgs.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_num_active=UINT(**{'sizeinbytes': 4}) self.__field_num_active.readfrombuffer(buf) self.__field_msgs=LIST(**{'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True, 'elementclass': sms_quick_text}) self.__field_msgs.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_num_active(self): return self.__field_num_active.getvalue() def __setfield_num_active(self, value): if isinstance(value,UINT): self.__field_num_active=value else: self.__field_num_active=UINT(value,**{'sizeinbytes': 4}) def __delfield_num_active(self): del self.__field_num_active num_active=property(__getfield_num_active, __setfield_num_active, __delfield_num_active, None) def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True, 'elementclass': sms_quick_text}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True, 'elementclass': sms_quick_text}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def iscontainer(self): return True def containerelements(self): yield ('num_active', self.__field_num_active, None) yield ('msgs', self.__field_msgs, None) bitpim-1.0.7+dfsg1/src/phones/p_sanyo2300.py0000644001616600161660000000110310355646655016573 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Sanyo VI-2300""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 _NUMCALLHISTORY=20 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 #for sym in dir(p_sanyo): # print sym bitpim-1.0.7+dfsg1/src/phones/com_lgux5000.py0000644001616600161660000001701510575613467016750 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### Copyright (C) 2004 John O'Shaughnessy ### Copyright (C) 2007 Fiz Stein ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgux5000.py 4096 2007-03-13 21:27:19Z djpham $ """Communicate with the LG UX5000 cell phone The UX5000 is substantially similar to the VX4400 and VX6100. The code in this file mainly inherits from VX4400 and VX6100 code. """ # standard modules import time import cStringIO import sha # my modules import common import commport import copy import p_brew import p_lgux5000 import com_lgvx4400 import com_brew import com_phone import com_lg import prototypes import call_history import helpids class Phone(com_lgvx4400.Phone): "Talk to the LG UX5000 cell phone" desc="LG-UX5000" helpid=helpids.ID_PHONE_LGUX5000 protocolclass=p_lgux5000 serialsname='lgux5000' # more UX5000 indices imagelocations=( # offset, index file, files location, type, maximumentries ( 16, "download/dloadindex/brewImageIndex.map", "brew/shared", "images", 60) , ( 200, "download/dloadindex/mmsImageIndex.map", "brew/shared/mms", "mms", 30), ( 240, "download/dloadindex/mmsDrmImageIndex.map", "brew/shared/mms/d", "drm", 20), ( 130, None, None, "camera", 60) # nb camera must be last ) ringtonelocations=( # offset, index file, files location, type, maximumentries ( 50, "download/dloadindex/brewRingerIndex.map", "user/sound/ringer", "ringers", 60), ( 150, "download/dloadindex/mmsRingerIndex.map", "mms/sound", "mms", 20), ( 180, "download/dloadindex/mmsDrmRingerIndex.map", "mms/sound/drm", "drm", 20) ) builtinimages= ('Sport', 'Butterfly', 'Cake', 'Niagara Falls', 'Rockefeller', 'Statue of Liberty', 'The Capital', 'Scenary','White Bear', 'Yacht' ) builtinringtones= ('Ring 2', 'Ring 3', 'Ring 4', 'Ring 5', 'VZW Default Tone', 'Farewell', 'Arabesque', 'Piano Sonata', 'Latin', 'When The Saints', 'Bach Cello Suite', 'Speedy Way', 'Cancan', 'Sting', 'Toccata and Fugue', 'Mozart Symphony 40', 'Nutcracker March', 'Funiculi', 'Polka', 'Hallelujah', 'Mozart Aria', 'Leichte', 'Spring', 'Slavonic', 'Fantasy', 'Chimes High', 'Chimes Low', 'Ding', 'Tada', 'Notify', 'Drum', 'Claps', 'Fanfare', 'Chord High', 'Chord Low') def __init__(self, logtarget, commport): com_lgvx4400.Phone.__init__(self,logtarget,commport) self.mode=self.MODENONE def makeentry(self, counter, entry, dict): e=com_lgvx4400.Phone.makeentry(self, counter, entry, dict) e.entrysize=0x202 return e def getcameraindex(self): index={} try: buf=prototypes.buffer(self.getfilecontents("cam/pics.dat")) g=self.protocolclass.campicsdat() g.readfrombuffer(buf, logtitle="Read camera index") for i in g.items: if len(i.name): # index[i.index]={'name': i.name, 'date': i.taken, 'origin': 'camera' } # we currently use the filesystem name rather than rename in camera # since the latter doesn't include the file extension which then makes # life less pleasant once the file ends up on the computer index[i.index]={'name': "pic%02d.jpg"%(i.index,), 'date': i.taken, 'origin': 'camera' } except com_brew.BrewNoSuchFileException: # if the phone has no pictures it may not have a a cam/pics.dat file pass return index my_model='UX5000' def getphoneinfo(self, phone_info): self.log('Getting Phone Info') try: s=self.getfilecontents('brew/version.txt') if s[:6]=='UX5000': phone_info.append('Model:', "UX5000") req=p_brew.firmwarerequest() res=self.sendbrewcommand(req, self.protocolclass.firmwareresponse) phone_info.append('Firmware Version:', res.firmware) s=self.getfilecontents("nvm/$SYS.ESN")[85:89] txt='%02X%02X%02X%02X'%(ord(s[3]), ord(s[2]), ord(s[1]), ord(s[0])) phone_info.append('ESN:', txt) txt=self.getfilecontents("nvm/nvm/nvm_0000")[577:587] phone_info.append('Phone Number:', txt) except: pass return parentprofile=com_lgvx4400.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='LG Electronics Inc' phone_model='UX5000' WALLPAPER_WIDTH=132 WALLPAPER_HEIGHT=148 MAX_WALLPAPER_BASENAME_LENGTH=24 WALLPAPER_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_ ." WALLPAPER_CONVERT_FORMAT="jpg" MAX_RINGTONE_BASENAME_LENGTH=24 RINGTONE_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_ ." ringtoneorigins=('ringers', 'mms', 'drm') excluded_ringtone_origins=('mms', 'drm') # nb we don't allow save to camera so it isn't listed here imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "mms")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "drm")) def GetImageOrigins(self): return self.imageorigins # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 132, 'height': 148, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 132, 'height': 148, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "fullscreen", {'width': 128, 'height': 160, 'format': "JPEG"})) # can the outside lcd display images? #imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", # {'width': 96, 'height': 64, 'format': "JPEG"})) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading ('memo', 'read', None), # all memo list reading ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('sms', 'write', 'OVERWRITE'), # all SMS list writing ('memo', 'write', 'OVERWRITE'), # all memo list writing ) def __init__(self): parentprofile.__init__(self) bitpim-1.0.7+dfsg1/src/phones/p_samsungspha840_telus.py0000644001616600161660000015324510535762440021144 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Proposed descriptions of data usign AT commands""" from prototypes import * from p_samsung_packet import * # We use LSB for all integer like fields in diagnostic mode UINT=UINTlsb BOOL=BOOLlsb # NUMCALENDAREVENTS=20 NUMPHONEBOOKENTRIES=500 NUMEMAILS=1 NUMPHONENUMBERS=5 MAXNUMBERLEN=32 NUMTODOENTRIES=9 NUMSMSENTRIES=94 NUMMEMOENTRIES=3 NUMGROUPS=4 # Phone does not cleanly return from BREW mode, so everything done through modem mode # AMSREGISTRY="ams/AmsRegistry" DEFAULT_RINGTONE=0 DEFAULT_WALLPAPER=8 DEFAULT_WALLPAPER_MODIFIER=0 DEFAULT_GROUP=0 class pbentry(BaseProtogenClass): __fields=['slot', 'uslot', 'group', 'ringtone', 'name', 'speeddial', 'dunno1', 'numbers', 'email', 'url', 'birthday', 'wallpaper', 'wallpaper_modifier', 'wallpaper_file', 'timestamp'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_uslot.writetobuffer(buf) try: self.__field_group except: self.__field_group=CSVINT(**{'default': 0}) self.__field_group.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=CSVINT(**{'default': 0}) self.__field_ringtone.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_speeddial.writetobuffer(buf) try: self.__field_dunno1 except: self.__field_dunno1=CSVINT(**{'default': 0}) self.__field_dunno1.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'length': NUMPHONENUMBERS, 'createdefault': True, 'elementclass': phonenumber}) self.__field_numbers.writetobuffer(buf) try: self.__field_email except: self.__field_email=CSVSTRING(**{'default': ""}) self.__field_email.writetobuffer(buf) try: self.__field_url except: self.__field_url=CSVSTRING(**{'default': ""}) self.__field_url.writetobuffer(buf) try: self.__field_birthday except: self.__field_birthday=CSVSTRING(**{'default': ""}) self.__field_birthday.writetobuffer(buf) try: self.__field_wallpaper except: self.__field_wallpaper=CSVINT(**{'default': 8}) self.__field_wallpaper.writetobuffer(buf) try: self.__field_wallpaper_modifier except: self.__field_wallpaper_modifier=CSVINT(**{'default': 0}) self.__field_wallpaper_modifier.writetobuffer(buf) self.__field_wallpaper_file.writetobuffer(buf) try: self.__field_timestamp except: self.__field_timestamp=CSVTIME(**{'terminator': None, 'default': (1980,1,1,12,0,0)}) self.__field_timestamp.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=CSVINT() self.__field_slot.readfrombuffer(buf) self.__field_uslot=CSVINT() self.__field_uslot.readfrombuffer(buf) self.__field_group=CSVINT(**{'default': 0}) self.__field_group.readfrombuffer(buf) self.__field_ringtone=CSVINT(**{'default': 0}) self.__field_ringtone.readfrombuffer(buf) self.__field_name=CSVSTRING() self.__field_name.readfrombuffer(buf) self.__field_speeddial=CSVINT() self.__field_speeddial.readfrombuffer(buf) self.__field_dunno1=CSVINT(**{'default': 0}) self.__field_dunno1.readfrombuffer(buf) self.__field_numbers=LIST(**{'length': NUMPHONENUMBERS, 'createdefault': True, 'elementclass': phonenumber}) self.__field_numbers.readfrombuffer(buf) self.__field_email=CSVSTRING(**{'default': ""}) self.__field_email.readfrombuffer(buf) self.__field_url=CSVSTRING(**{'default': ""}) self.__field_url.readfrombuffer(buf) self.__field_birthday=CSVSTRING(**{'default': ""}) self.__field_birthday.readfrombuffer(buf) self.__field_wallpaper=CSVINT(**{'default': 8}) self.__field_wallpaper.readfrombuffer(buf) self.__field_wallpaper_modifier=CSVINT(**{'default': 0}) self.__field_wallpaper_modifier.readfrombuffer(buf) self.__field_wallpaper_file=CSVSTRING() self.__field_wallpaper_file.readfrombuffer(buf) self.__field_timestamp=CSVTIME(**{'terminator': None, 'default': (1980,1,1,12,0,0)}) self.__field_timestamp.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,CSVINT): self.__field_slot=value else: self.__field_slot=CSVINT(value,) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, "Internal Slot") def __getfield_uslot(self): return self.__field_uslot.getvalue() def __setfield_uslot(self, value): if isinstance(value,CSVINT): self.__field_uslot=value else: self.__field_uslot=CSVINT(value,) def __delfield_uslot(self): del self.__field_uslot uslot=property(__getfield_uslot, __setfield_uslot, __delfield_uslot, "User Slot, Speed dial") def __getfield_group(self): try: self.__field_group except: self.__field_group=CSVINT(**{'default': 0}) return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,CSVINT): self.__field_group=value else: self.__field_group=CSVINT(value,**{'default': 0}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=CSVINT(**{'default': 0}) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,CSVINT): self.__field_ringtone=value else: self.__field_ringtone=CSVINT(value,**{'default': 0}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "0: Default, 1: Ring 1, 2: Ring 2, 3: Ring 3, 4: Ring 4, 5: Ring 5, 6: Melody 1, 7: Melody 2, 8: Melody 3, 9: Melody 4, 10: Melody 5") def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,CSVSTRING): self.__field_name=value else: self.__field_name=CSVSTRING(value,) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_speeddial(self): return self.__field_speeddial.getvalue() def __setfield_speeddial(self, value): if isinstance(value,CSVINT): self.__field_speeddial=value else: self.__field_speeddial=CSVINT(value,) def __delfield_speeddial(self): del self.__field_speeddial speeddial=property(__getfield_speeddial, __setfield_speeddial, __delfield_speeddial, "Which phone number assigned to speed dial uslot") def __getfield_dunno1(self): try: self.__field_dunno1 except: self.__field_dunno1=CSVINT(**{'default': 0}) return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,CSVINT): self.__field_dunno1=value else: self.__field_dunno1=CSVINT(value,**{'default': 0}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'length': NUMPHONENUMBERS, 'createdefault': True, 'elementclass': phonenumber}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'length': NUMPHONENUMBERS, 'createdefault': True, 'elementclass': phonenumber}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_email(self): try: self.__field_email except: self.__field_email=CSVSTRING(**{'default': ""}) return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,CSVSTRING): self.__field_email=value else: self.__field_email=CSVSTRING(value,**{'default': ""}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def __getfield_url(self): try: self.__field_url except: self.__field_url=CSVSTRING(**{'default': ""}) return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,CSVSTRING): self.__field_url=value else: self.__field_url=CSVSTRING(value,**{'default': ""}) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_birthday(self): try: self.__field_birthday except: self.__field_birthday=CSVSTRING(**{'default': ""}) return self.__field_birthday.getvalue() def __setfield_birthday(self, value): if isinstance(value,CSVSTRING): self.__field_birthday=value else: self.__field_birthday=CSVSTRING(value,**{'default': ""}) def __delfield_birthday(self): del self.__field_birthday birthday=property(__getfield_birthday, __setfield_birthday, __delfield_birthday, None) def __getfield_wallpaper(self): try: self.__field_wallpaper except: self.__field_wallpaper=CSVINT(**{'default': 8}) return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,CSVINT): self.__field_wallpaper=value else: self.__field_wallpaper=CSVINT(value,**{'default': 8}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, "8: No Image, 3: Human, 4: Animal, 5: Other, 2: Gallery, 7: Image") def __getfield_wallpaper_modifier(self): try: self.__field_wallpaper_modifier except: self.__field_wallpaper_modifier=CSVINT(**{'default': 0}) return self.__field_wallpaper_modifier.getvalue() def __setfield_wallpaper_modifier(self, value): if isinstance(value,CSVINT): self.__field_wallpaper_modifier=value else: self.__field_wallpaper_modifier=CSVINT(value,**{'default': 0}) def __delfield_wallpaper_modifier(self): del self.__field_wallpaper_modifier wallpaper_modifier=property(__getfield_wallpaper_modifier, __setfield_wallpaper_modifier, __delfield_wallpaper_modifier, None) def __getfield_wallpaper_file(self): return self.__field_wallpaper_file.getvalue() def __setfield_wallpaper_file(self, value): if isinstance(value,CSVSTRING): self.__field_wallpaper_file=value else: self.__field_wallpaper_file=CSVSTRING(value,) def __delfield_wallpaper_file(self): del self.__field_wallpaper_file wallpaper_file=property(__getfield_wallpaper_file, __setfield_wallpaper_file, __delfield_wallpaper_file, None) def __getfield_timestamp(self): try: self.__field_timestamp except: self.__field_timestamp=CSVTIME(**{'terminator': None, 'default': (1980,1,1,12,0,0)}) return self.__field_timestamp.getvalue() def __setfield_timestamp(self, value): if isinstance(value,CSVTIME): self.__field_timestamp=value else: self.__field_timestamp=CSVTIME(value,**{'terminator': None, 'default': (1980,1,1,12,0,0)}) def __delfield_timestamp(self): del self.__field_timestamp timestamp=property(__getfield_timestamp, __setfield_timestamp, __delfield_timestamp, "Use terminator None for last item") def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, "Internal Slot") yield ('uslot', self.__field_uslot, "User Slot, Speed dial") yield ('group', self.__field_group, None) yield ('ringtone', self.__field_ringtone, "0: Default, 1: Ring 1, 2: Ring 2, 3: Ring 3, 4: Ring 4, 5: Ring 5, 6: Melody 1, 7: Melody 2, 8: Melody 3, 9: Melody 4, 10: Melody 5") yield ('name', self.__field_name, None) yield ('speeddial', self.__field_speeddial, "Which phone number assigned to speed dial uslot") yield ('dunno1', self.__field_dunno1, None) yield ('numbers', self.__field_numbers, None) yield ('email', self.__field_email, None) yield ('url', self.__field_url, None) yield ('birthday', self.__field_birthday, None) yield ('wallpaper', self.__field_wallpaper, "8: No Image, 3: Human, 4: Animal, 5: Other, 2: Gallery, 7: Image") yield ('wallpaper_modifier', self.__field_wallpaper_modifier, None) yield ('wallpaper_file', self.__field_wallpaper_file, None) yield ('timestamp', self.__field_timestamp, "Use terminator None for last item") class phonebookslotresponse(BaseProtogenClass): __fields=['command', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebookslotresponse,self).__init__(**dict) if self.__class__ is phonebookslotresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebookslotresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebookslotresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '#PBOKR:'}) self.__field_command.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '#PBOKR:'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('entry', self.__field_entry, None) class phonebookslotupdaterequest(BaseProtogenClass): __fields=['command', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebookslotupdaterequest,self).__init__(**dict) if self.__class__ is phonebookslotupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebookslotupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebookslotupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'}) self.__field_command.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'}) self.__field_command.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('entry', self.__field_entry, None) class groupnameresponse(BaseProtogenClass): __fields=['command', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(groupnameresponse,self).__init__(**dict) if self.__class__ is groupnameresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(groupnameresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(groupnameresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '#PBGRR:'}) self.__field_command.readfrombuffer(buf) self.__field_entry=groupnameentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '#PBGRR:'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,groupnameentry): self.__field_entry=value else: self.__field_entry=groupnameentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('entry', self.__field_entry, None) class groupnameentry(BaseProtogenClass): __fields=['gid', 'groupname', 'unknown_4', 'dunno2', 'timestamp'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(groupnameentry,self).__init__(**dict) if self.__class__ is groupnameentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(groupnameentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(groupnameentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_gid.writetobuffer(buf) self.__field_groupname.writetobuffer(buf) try: self.__field_unknown_4 except: self.__field_unknown_4=CSVINT(**{'default': 0}) self.__field_unknown_4.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_timestamp.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_gid=CSVINT() self.__field_gid.readfrombuffer(buf) self.__field_groupname=CSVSTRING() self.__field_groupname.readfrombuffer(buf) self.__field_unknown_4=CSVINT(**{'default': 0}) self.__field_unknown_4.readfrombuffer(buf) self.__field_dunno2=CSVSTRING(**{'quotechar': None}) self.__field_dunno2.readfrombuffer(buf) self.__field_timestamp=CSVTIME(**{'terminator': None}) self.__field_timestamp.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_gid(self): return self.__field_gid.getvalue() def __setfield_gid(self, value): if isinstance(value,CSVINT): self.__field_gid=value else: self.__field_gid=CSVINT(value,) def __delfield_gid(self): del self.__field_gid gid=property(__getfield_gid, __setfield_gid, __delfield_gid, None) def __getfield_groupname(self): return self.__field_groupname.getvalue() def __setfield_groupname(self, value): if isinstance(value,CSVSTRING): self.__field_groupname=value else: self.__field_groupname=CSVSTRING(value,) def __delfield_groupname(self): del self.__field_groupname groupname=property(__getfield_groupname, __setfield_groupname, __delfield_groupname, None) def __getfield_unknown_4(self): try: self.__field_unknown_4 except: self.__field_unknown_4=CSVINT(**{'default': 0}) return self.__field_unknown_4.getvalue() def __setfield_unknown_4(self, value): if isinstance(value,CSVINT): self.__field_unknown_4=value else: self.__field_unknown_4=CSVINT(value,**{'default': 0}) def __delfield_unknown_4(self): del self.__field_unknown_4 unknown_4=property(__getfield_unknown_4, __setfield_unknown_4, __delfield_unknown_4, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,CSVSTRING): self.__field_dunno2=value else: self.__field_dunno2=CSVSTRING(value,**{'quotechar': None}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, "A single character C or S") def __getfield_timestamp(self): return self.__field_timestamp.getvalue() def __setfield_timestamp(self, value): if isinstance(value,CSVTIME): self.__field_timestamp=value else: self.__field_timestamp=CSVTIME(value,**{'terminator': None}) def __delfield_timestamp(self): del self.__field_timestamp timestamp=property(__getfield_timestamp, __setfield_timestamp, __delfield_timestamp, None) def iscontainer(self): return True def containerelements(self): yield ('gid', self.__field_gid, None) yield ('groupname', self.__field_groupname, None) yield ('unknown_4', self.__field_unknown_4, None) yield ('dunno2', self.__field_dunno2, "A single character C or S") yield ('timestamp', self.__field_timestamp, None) class unparsedresponse(BaseProtogenClass): __fields=['pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(unparsedresponse,self).__init__(**dict) if self.__class__ is unparsedresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(unparsedresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(unparsedresponse,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_pad=UNKNOWN(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('pad', self.__field_pad, None) class eventrequest(BaseProtogenClass): __fields=['command', 'slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventrequest,self).__init__(**dict) if self.__class__ is eventrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PISHR='}) self.__field_command.writetobuffer(buf) try: self.__field_slot except: self.__field_slot=CSVINT(**{'terminator': None}) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PISHR='}) self.__field_command.readfrombuffer(buf) self.__field_slot=CSVINT(**{'terminator': None}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PISHR='}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '#PISHR='}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_slot(self): try: self.__field_slot except: self.__field_slot=CSVINT(**{'terminator': None}) return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,CSVINT): self.__field_slot=value else: self.__field_slot=CSVINT(value,**{'terminator': None}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('slot', self.__field_slot, None) class eventresponse(BaseProtogenClass): __fields=['command', 'slot', 'start', 'end', 'timestamp', 'alarm', 'dunno', 'eventname'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventresponse,self).__init__(**dict) if self.__class__ is eventresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_timestamp.writetobuffer(buf) self.__field_alarm.writetobuffer(buf) self.__field_dunno.writetobuffer(buf) self.__field_eventname.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '#PISHR:'}) self.__field_command.readfrombuffer(buf) self.__field_slot=CSVINT() self.__field_slot.readfrombuffer(buf) self.__field_start=CSVTIME() self.__field_start.readfrombuffer(buf) self.__field_end=CSVTIME() self.__field_end.readfrombuffer(buf) self.__field_timestamp=CSVTIME() self.__field_timestamp.readfrombuffer(buf) self.__field_alarm=CSVINT() self.__field_alarm.readfrombuffer(buf) self.__field_dunno=CSVSTRING(**{'quotechar': None}) self.__field_dunno.readfrombuffer(buf) self.__field_eventname=CSVSTRING(**{'terminator': None}) self.__field_eventname.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '#PISHR:'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,CSVINT): self.__field_slot=value else: self.__field_slot=CSVINT(value,) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,CSVTIME): self.__field_start=value else: self.__field_start=CSVTIME(value,) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,CSVTIME): self.__field_end=value else: self.__field_end=CSVTIME(value,) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_timestamp(self): return self.__field_timestamp.getvalue() def __setfield_timestamp(self, value): if isinstance(value,CSVTIME): self.__field_timestamp=value else: self.__field_timestamp=CSVTIME(value,) def __delfield_timestamp(self): del self.__field_timestamp timestamp=property(__getfield_timestamp, __setfield_timestamp, __delfield_timestamp, None) def __getfield_alarm(self): return self.__field_alarm.getvalue() def __setfield_alarm(self, value): if isinstance(value,CSVINT): self.__field_alarm=value else: self.__field_alarm=CSVINT(value,) def __delfield_alarm(self): del self.__field_alarm alarm=property(__getfield_alarm, __setfield_alarm, __delfield_alarm, "0: No Alarm, 1: On Time, 2: 10 minutes, 3: 30 minutes, 4: 60 minutes") def __getfield_dunno(self): return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,CSVSTRING): self.__field_dunno=value else: self.__field_dunno=CSVSTRING(value,**{'quotechar': None}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def __getfield_eventname(self): return self.__field_eventname.getvalue() def __setfield_eventname(self, value): if isinstance(value,CSVSTRING): self.__field_eventname=value else: self.__field_eventname=CSVSTRING(value,**{'terminator': None}) def __delfield_eventname(self): del self.__field_eventname eventname=property(__getfield_eventname, __setfield_eventname, __delfield_eventname, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('slot', self.__field_slot, None) yield ('start', self.__field_start, None) yield ('end', self.__field_end, None) yield ('timestamp', self.__field_timestamp, None) yield ('alarm', self.__field_alarm, "0: No Alarm, 1: On Time, 2: 10 minutes, 3: 30 minutes, 4: 60 minutes") yield ('dunno', self.__field_dunno, None) yield ('eventname', self.__field_eventname, None) class eventupdaterequest(BaseProtogenClass): __fields=['command', 'slot', 'start', 'end', 'timestamp', 'alarm', 'eventname'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventupdaterequest,self).__init__(**dict) if self.__class__ is eventupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PISHW='}) self.__field_command.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_timestamp.writetobuffer(buf) self.__field_alarm.writetobuffer(buf) self.__field_eventname.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PISHW='}) self.__field_command.readfrombuffer(buf) self.__field_slot=CSVINT() self.__field_slot.readfrombuffer(buf) self.__field_start=CSVTIME() self.__field_start.readfrombuffer(buf) self.__field_end=CSVTIME() self.__field_end.readfrombuffer(buf) self.__field_timestamp=CSVTIME() self.__field_timestamp.readfrombuffer(buf) self.__field_alarm=CSVINT() self.__field_alarm.readfrombuffer(buf) self.__field_eventname=CSVSTRING(**{'terminator': None}) self.__field_eventname.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PISHW='}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '#PISHW='}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,CSVINT): self.__field_slot=value else: self.__field_slot=CSVINT(value,) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,CSVTIME): self.__field_start=value else: self.__field_start=CSVTIME(value,) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,CSVTIME): self.__field_end=value else: self.__field_end=CSVTIME(value,) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_timestamp(self): return self.__field_timestamp.getvalue() def __setfield_timestamp(self, value): if isinstance(value,CSVTIME): self.__field_timestamp=value else: self.__field_timestamp=CSVTIME(value,) def __delfield_timestamp(self): del self.__field_timestamp timestamp=property(__getfield_timestamp, __setfield_timestamp, __delfield_timestamp, None) def __getfield_alarm(self): return self.__field_alarm.getvalue() def __setfield_alarm(self, value): if isinstance(value,CSVINT): self.__field_alarm=value else: self.__field_alarm=CSVINT(value,) def __delfield_alarm(self): del self.__field_alarm alarm=property(__getfield_alarm, __setfield_alarm, __delfield_alarm, "0: No Alarm, 1: On Time, 2: 10 minutes, 3: 30 minutes, 4: 60 minutes") def __getfield_eventname(self): return self.__field_eventname.getvalue() def __setfield_eventname(self, value): if isinstance(value,CSVSTRING): self.__field_eventname=value else: self.__field_eventname=CSVSTRING(value,**{'terminator': None}) def __delfield_eventname(self): del self.__field_eventname eventname=property(__getfield_eventname, __setfield_eventname, __delfield_eventname, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('slot', self.__field_slot, None) yield ('start', self.__field_start, None) yield ('end', self.__field_end, None) yield ('timestamp', self.__field_timestamp, None) yield ('alarm', self.__field_alarm, "0: No Alarm, 1: On Time, 2: 10 minutes, 3: 30 minutes, 4: 60 minutes") yield ('eventname', self.__field_eventname, None) class eventsloterase(BaseProtogenClass): __fields=['command', 'slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventsloterase,self).__init__(**dict) if self.__class__ is eventsloterase: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventsloterase,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventsloterase,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PISHW='}) self.__field_command.writetobuffer(buf) try: self.__field_slot except: self.__field_slot=CSVINT(**{'terminator': None}) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PISHW='}) self.__field_command.readfrombuffer(buf) self.__field_slot=CSVINT(**{'terminator': None}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PISHW='}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '#PISHW='}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_slot(self): try: self.__field_slot except: self.__field_slot=CSVINT(**{'terminator': None}) return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,CSVINT): self.__field_slot=value else: self.__field_slot=CSVINT(value,**{'terminator': None}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('slot', self.__field_slot, None) class eventupdateresponse(BaseProtogenClass): __fields=['pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventupdateresponse,self).__init__(**dict) if self.__class__ is eventupdateresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventupdateresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventupdateresponse,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_pad=UNKNOWN(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('pad', self.__field_pad, None) bitpim-1.0.7+dfsg1/src/phones/p_lgpm325.py0000644001616600161660000053545310466234100016327 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG PM325 (Sprint)""" import re from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=99 FIRSTSPEEDDIAL=1 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=200 MEMOLENGTH=33 NUMEMAILS=3 NUMPHONENUMBERS=5 NORINGTONE=0 NOMSGRINGTONE=0 NOWALLPAPER=0 PHONE_ENCODING='iso8859_1' numbertypetab=( 'cell', 'home', 'office', 'fax', 'pager' ) media_directory='ams' ringerindex='setas/amsRingerIndex.map' imageindex='setas/amsImageIndex.map' ringerconst=2 imageconst=3 max_ringers=100 max_images=100 phonebook_media='pim/pbookcontact.dat' #----- Calendar settings -------------------------------------------------- NUMCALENDARENTRIES=300 CAL_REP_NONE=0x10 CAL_REP_DAILY=0x11 CAL_REP_MONFRI=0x12 CAL_REP_WEEKLY=0x13 CAL_REP_MONTHLY=0x14 CAL_REP_YEARLY=0x15 CAL_DOW_SUN=0x0800 CAL_DOW_MON=0x0400 CAL_DOW_TUE=0x0200 CAL_DOW_WED=0x0100 CAL_DOW_THU=0x0080 CAL_DOW_FRI=0x0040 CAL_DOW_SAT=0x0020 CAL_DOW_EXCEPTIONS=0x0010 CAL_REMINDER_NONE=0 CAL_REMINDER_ONTIME=1 CAL_REMINDER_5MIN=2 CAL_REMINDER_10MIN=3 CAL_REMINDER_1HOUR=4 CAL_REMINDER_1DAY=5 CAL_REMINDER_2DAYS=6 CAL_REPEAT_DATE=(2100, 12, 31) cal_dir='sch' cal_data_file_name='sch/schedule.dat' cal_exception_file_name='sch/schexception.dat' cal_has_voice_id=False #----- SMS settings ------------------------------------------------------- SMS_CANNED_MAX_ITEMS=40 SMS_CANNED_MAX_LENGTH=104 SMS_CANNED_FILENAME="sms/canned_msg.dat" SMS_PATTERNS={'Inbox': re.compile(r"^.*/inbox[0-9][0-9][0-9]\.dat$"), 'Sent': re.compile(r"^.*/outbox[0-9][0-9][0-9]\.dat$"), 'Saved': re.compile(r"^.*/sf[0-9][0-9]\.dat$"), } #----- Text Memo settings ------------------------------------------------- text_memo_file='sch/memo.dat' content_file_name='ams/contentInfo' content_count_file_name='ams/realContent' class firmwareresponse(BaseProtogenClass): __fields=['command', 'date1', 'time1', 'date2', 'time2', 'firmware', 'dunno'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(firmwareresponse,self).__init__(**dict) if self.__class__ is firmwareresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(firmwareresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(firmwareresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_date1.writetobuffer(buf) self.__field_time1.writetobuffer(buf) self.__field_date2.writetobuffer(buf) self.__field_time2.writetobuffer(buf) self.__field_firmware.writetobuffer(buf) self.__field_dunno.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_date1=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date1.readfrombuffer(buf) self.__field_time1=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time1.readfrombuffer(buf) self.__field_date2=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date2.readfrombuffer(buf) self.__field_time2=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time2.readfrombuffer(buf) self.__field_firmware=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_firmware.readfrombuffer(buf) self.__field_dunno=DATA() self.__field_dunno.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_date1(self): return self.__field_date1.getvalue() def __setfield_date1(self, value): if isinstance(value,USTRING): self.__field_date1=value else: self.__field_date1=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date1(self): del self.__field_date1 date1=property(__getfield_date1, __setfield_date1, __delfield_date1, None) def __getfield_time1(self): return self.__field_time1.getvalue() def __setfield_time1(self, value): if isinstance(value,USTRING): self.__field_time1=value else: self.__field_time1=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time1(self): del self.__field_time1 time1=property(__getfield_time1, __setfield_time1, __delfield_time1, None) def __getfield_date2(self): return self.__field_date2.getvalue() def __setfield_date2(self, value): if isinstance(value,USTRING): self.__field_date2=value else: self.__field_date2=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date2(self): del self.__field_date2 date2=property(__getfield_date2, __setfield_date2, __delfield_date2, None) def __getfield_time2(self): return self.__field_time2.getvalue() def __setfield_time2(self, value): if isinstance(value,USTRING): self.__field_time2=value else: self.__field_time2=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time2(self): del self.__field_time2 time2=property(__getfield_time2, __setfield_time2, __delfield_time2, None) def __getfield_firmware(self): return self.__field_firmware.getvalue() def __setfield_firmware(self, value): if isinstance(value,USTRING): self.__field_firmware=value else: self.__field_firmware=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_firmware(self): del self.__field_firmware firmware=property(__getfield_firmware, __setfield_firmware, __delfield_firmware, None) def __getfield_dunno(self): return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,DATA): self.__field_dunno=value else: self.__field_dunno=DATA(value,) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('date1', self.__field_date1, None) yield ('time1', self.__field_time1, None) yield ('date2', self.__field_date2, None) yield ('time2', self.__field_time2, None) yield ('firmware', self.__field_firmware, None) yield ('dunno', self.__field_dunno, None) class pbreadentryresponse(BaseProtogenClass): "Results of reading one entry" __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbreadentryresponse,self).__init__(**dict) if self.__class__ is pbreadentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbreadentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbreadentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbupdateentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbupdateentryrequest,self).__init__(**dict) if self.__class__ is pbupdateentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbupdateentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbupdateentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x04, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbappendentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbappendentryrequest,self).__init__(**dict) if self.__class__ is pbappendentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbappendentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbappendentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x03, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbentry(BaseProtogenClass): __fields=['serial1', 'entrysize', 'entrynumber', 'name', 'group', 'unknown2', 'secret', 'memo', 'emails', 'url', 'numberspeeds', 'numbertypes', 'numbers', 'EndOfRecord', 'ringtone', 'wallpaper'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'default': 0x600}) try: self.__field_wallpaper except: self.__field_wallpaper=UINT(**{'default': 0x100}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_serial1.writetobuffer(buf) try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x026E}) self.__field_entrysize.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_group.writetobuffer(buf) try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 2, 'default': 0}) self.__field_unknown2.writetobuffer(buf) self.__field_secret.writetobuffer(buf) self.__field_memo.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgpm325_139, 'length': NUMEMAILS}) self.__field_emails.writetobuffer(buf) self.__field_url.writetobuffer(buf) try: self.__field_numberspeeds except: self.__field_numberspeeds=LIST(**{'elementclass': _gen_p_lgpm325_142, 'length': NUMPHONENUMBERS}) self.__field_numberspeeds.writetobuffer(buf) try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgpm325_144, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgpm325_146, 'length': NUMPHONENUMBERS}) self.__field_numbers.writetobuffer(buf) try: self.__field_EndOfRecord except: self.__field_EndOfRecord=UINT(**{'sizeinbytes': 1, 'constant': 0x78}) self.__field_EndOfRecord.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x026E}) self.__field_entrysize.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 4}) self.__field_entrynumber.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 2}) self.__field_group.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2, 'default': 0}) self.__field_unknown2.readfrombuffer(buf) self.__field_secret=BOOL(**{'sizeinbytes': 1}) self.__field_secret.readfrombuffer(buf) self.__field_memo=USTRING(**{'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) self.__field_memo.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_lgpm325_139, 'length': NUMEMAILS}) self.__field_emails.readfrombuffer(buf) self.__field_url=USTRING(**{'sizeinbytes': 73, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_url.readfrombuffer(buf) self.__field_numberspeeds=LIST(**{'elementclass': _gen_p_lgpm325_142, 'length': NUMPHONENUMBERS}) self.__field_numberspeeds.readfrombuffer(buf) self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgpm325_144, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.readfrombuffer(buf) self.__field_numbers=LIST(**{'elementclass': _gen_p_lgpm325_146, 'length': NUMPHONENUMBERS}) self.__field_numbers.readfrombuffer(buf) self.__field_EndOfRecord=UINT(**{'sizeinbytes': 1, 'constant': 0x78}) self.__field_EndOfRecord.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_entrysize(self): try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x026E}) return self.__field_entrysize.getvalue() def __setfield_entrysize(self, value): if isinstance(value,UINT): self.__field_entrysize=value else: self.__field_entrysize=UINT(value,**{'sizeinbytes': 2, 'constant': 0x026E}) def __delfield_entrysize(self): del self.__field_entrysize entrysize=property(__getfield_entrysize, __setfield_entrysize, __delfield_entrysize, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 4}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 2}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_unknown2(self): try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 2, 'default': 0}) return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2, 'default': 0}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_secret(self): return self.__field_secret.getvalue() def __setfield_secret(self, value): if isinstance(value,BOOL): self.__field_secret=value else: self.__field_secret=BOOL(value,**{'sizeinbytes': 1}) def __delfield_secret(self): del self.__field_secret secret=property(__getfield_secret, __setfield_secret, __delfield_secret, None) def __getfield_memo(self): return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,USTRING): self.__field_memo=value else: self.__field_memo=USTRING(value,**{'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgpm325_139, 'length': NUMEMAILS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_lgpm325_139, 'length': NUMEMAILS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, None) def __getfield_url(self): return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,USTRING): self.__field_url=value else: self.__field_url=USTRING(value,**{'sizeinbytes': 73, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_numberspeeds(self): try: self.__field_numberspeeds except: self.__field_numberspeeds=LIST(**{'elementclass': _gen_p_lgpm325_142, 'length': NUMPHONENUMBERS}) return self.__field_numberspeeds.getvalue() def __setfield_numberspeeds(self, value): if isinstance(value,LIST): self.__field_numberspeeds=value else: self.__field_numberspeeds=LIST(value,**{'elementclass': _gen_p_lgpm325_142, 'length': NUMPHONENUMBERS}) def __delfield_numberspeeds(self): del self.__field_numberspeeds numberspeeds=property(__getfield_numberspeeds, __setfield_numberspeeds, __delfield_numberspeeds, None) def __getfield_numbertypes(self): try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgpm325_144, 'length': NUMPHONENUMBERS}) return self.__field_numbertypes.getvalue() def __setfield_numbertypes(self, value): if isinstance(value,LIST): self.__field_numbertypes=value else: self.__field_numbertypes=LIST(value,**{'elementclass': _gen_p_lgpm325_144, 'length': NUMPHONENUMBERS}) def __delfield_numbertypes(self): del self.__field_numbertypes numbertypes=property(__getfield_numbertypes, __setfield_numbertypes, __delfield_numbertypes, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgpm325_146, 'length': NUMPHONENUMBERS}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'elementclass': _gen_p_lgpm325_146, 'length': NUMPHONENUMBERS}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_EndOfRecord(self): try: self.__field_EndOfRecord except: self.__field_EndOfRecord=UINT(**{'sizeinbytes': 1, 'constant': 0x78}) return self.__field_EndOfRecord.getvalue() def __setfield_EndOfRecord(self, value): if isinstance(value,UINT): self.__field_EndOfRecord=value else: self.__field_EndOfRecord=UINT(value,**{'sizeinbytes': 1, 'constant': 0x78}) def __delfield_EndOfRecord(self): del self.__field_EndOfRecord EndOfRecord=property(__getfield_EndOfRecord, __setfield_EndOfRecord, __delfield_EndOfRecord, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'default': 0x600}) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'default': 0x600}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_wallpaper(self): try: self.__field_wallpaper except: self.__field_wallpaper=UINT(**{'default': 0x100}) return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'default': 0x100}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def iscontainer(self): return True def containerelements(self): yield ('serial1', self.__field_serial1, None) yield ('entrysize', self.__field_entrysize, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('name', self.__field_name, None) yield ('group', self.__field_group, None) yield ('unknown2', self.__field_unknown2, None) yield ('secret', self.__field_secret, None) yield ('memo', self.__field_memo, None) yield ('emails', self.__field_emails, None) yield ('url', self.__field_url, None) yield ('numberspeeds', self.__field_numberspeeds, None) yield ('numbertypes', self.__field_numbertypes, None) yield ('numbers', self.__field_numbers, None) yield ('EndOfRecord', self.__field_EndOfRecord, None) yield ('ringtone', self.__field_ringtone, None) yield ('wallpaper', self.__field_wallpaper, None) class _gen_p_lgpm325_139(BaseProtogenClass): 'Anonymous inner class' __fields=['email'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgpm325_139,self).__init__(**dict) if self.__class__ is _gen_p_lgpm325_139: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgpm325_139,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgpm325_139,kwargs) if len(args): dict2={'sizeinbytes': 73, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_email=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_email.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_email=USTRING(**{'sizeinbytes': 73, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_email.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 73, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def iscontainer(self): return True def containerelements(self): yield ('email', self.__field_email, None) class _gen_p_lgpm325_142(BaseProtogenClass): 'Anonymous inner class' __fields=['numberspeed'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgpm325_142,self).__init__(**dict) if self.__class__ is _gen_p_lgpm325_142: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgpm325_142,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgpm325_142,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_numberspeed=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numberspeed.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numberspeed=UINT(**{'sizeinbytes': 1}) self.__field_numberspeed.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numberspeed(self): return self.__field_numberspeed.getvalue() def __setfield_numberspeed(self, value): if isinstance(value,UINT): self.__field_numberspeed=value else: self.__field_numberspeed=UINT(value,**{'sizeinbytes': 1}) def __delfield_numberspeed(self): del self.__field_numberspeed numberspeed=property(__getfield_numberspeed, __setfield_numberspeed, __delfield_numberspeed, None) def iscontainer(self): return True def containerelements(self): yield ('numberspeed', self.__field_numberspeed, None) class _gen_p_lgpm325_144(BaseProtogenClass): 'Anonymous inner class' __fields=['numbertype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgpm325_144,self).__init__(**dict) if self.__class__ is _gen_p_lgpm325_144: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgpm325_144,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgpm325_144,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_numbertype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numbertype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numbertype=UINT(**{'sizeinbytes': 1}) self.__field_numbertype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numbertype(self): return self.__field_numbertype.getvalue() def __setfield_numbertype(self, value): if isinstance(value,UINT): self.__field_numbertype=value else: self.__field_numbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_numbertype(self): del self.__field_numbertype numbertype=property(__getfield_numbertype, __setfield_numbertype, __delfield_numbertype, None) def iscontainer(self): return True def containerelements(self): yield ('numbertype', self.__field_numbertype, None) class _gen_p_lgpm325_146(BaseProtogenClass): 'Anonymous inner class' __fields=['number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgpm325_146,self).__init__(**dict) if self.__class__ is _gen_p_lgpm325_146: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgpm325_146,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgpm325_146,kwargs) if len(args): dict2={'sizeinbytes': 49, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_number=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) class pbgroup(BaseProtogenClass): "A single group" __fields=['group_id', 'rectype', 'unknown2', 'unknown3', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroup,self).__init__(**dict) if self.__class__ is pbgroup: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroup,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroup,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_group_id.writetobuffer(buf) self.__field_rectype.writetobuffer(buf) try: self.__field_unknown2 except: self.__field_unknown2=UNKNOWN(**{'sizeinbytes': 3}) self.__field_unknown2.writetobuffer(buf) try: self.__field_unknown3 except: self.__field_unknown3=UNKNOWN(**{'sizeinbytes': 3}) self.__field_unknown3.writetobuffer(buf) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_group_id=UINT(**{'sizeinbytes': 1}) self.__field_group_id.readfrombuffer(buf) self.__field_rectype=UINT(**{'sizeinbytes': 1}) self.__field_rectype.readfrombuffer(buf) self.__field_unknown2=UNKNOWN(**{'sizeinbytes': 3}) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=UNKNOWN(**{'sizeinbytes': 3}) self.__field_unknown3.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_group_id(self): return self.__field_group_id.getvalue() def __setfield_group_id(self, value): if isinstance(value,UINT): self.__field_group_id=value else: self.__field_group_id=UINT(value,**{'sizeinbytes': 1}) def __delfield_group_id(self): del self.__field_group_id group_id=property(__getfield_group_id, __setfield_group_id, __delfield_group_id, None) def __getfield_rectype(self): return self.__field_rectype.getvalue() def __setfield_rectype(self, value): if isinstance(value,UINT): self.__field_rectype=value else: self.__field_rectype=UINT(value,**{'sizeinbytes': 1}) def __delfield_rectype(self): del self.__field_rectype rectype=property(__getfield_rectype, __setfield_rectype, __delfield_rectype, None) def __getfield_unknown2(self): try: self.__field_unknown2 except: self.__field_unknown2=UNKNOWN(**{'sizeinbytes': 3}) return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UNKNOWN): self.__field_unknown2=value else: self.__field_unknown2=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): try: self.__field_unknown3 except: self.__field_unknown3=UNKNOWN(**{'sizeinbytes': 3}) return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UNKNOWN): self.__field_unknown3=value else: self.__field_unknown3=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('group_id', self.__field_group_id, None) yield ('rectype', self.__field_rectype, None) yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) yield ('name', self.__field_name, None) class pbgroups(BaseProtogenClass): "Phonebook groups" __fields=['groups'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroups,self).__init__(**dict) if self.__class__ is pbgroups: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroups,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroups,kwargs) if len(args): dict2={'elementclass': pbgroup} dict2.update(kwargs) kwargs=dict2 self.__field_groups=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_groups(self): try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) return self.__field_groups.getvalue() def __setfield_groups(self, value): if isinstance(value,LIST): self.__field_groups=value else: self.__field_groups=LIST(value,**{'elementclass': pbgroup}) def __delfield_groups(self): del self.__field_groups groups=property(__getfield_groups, __setfield_groups, __delfield_groups, None) def iscontainer(self): return True def containerelements(self): yield ('groups', self.__field_groups, None) class pb_contact_media_entry(BaseProtogenClass): """Reads the wallpaper/ringer info for each contact on the phone""" __fields=['index', 'dont_care1', 'ringer', 'name', 'dont_care2', 'wallpaper', 'dont_care3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pb_contact_media_entry,self).__init__(**dict) if self.__class__ is pb_contact_media_entry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pb_contact_media_entry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pb_contact_media_entry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_dont_care1.writetobuffer(buf) self.__field_ringer.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_dont_care2.writetobuffer(buf) self.__field_wallpaper.writetobuffer(buf) self.__field_dont_care3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self.__field_dont_care1=DATA(**{'sizeinbytes': 18}) self.__field_dont_care1.readfrombuffer(buf) self.__field_ringer=UINT(**{'sizeinbytes': 2}) self.__field_ringer.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 33}) self.__field_name.readfrombuffer(buf) self.__field_dont_care2=DATA(**{'sizeinbytes': 182}) self.__field_dont_care2.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 2}) self.__field_wallpaper.readfrombuffer(buf) self.__field_dont_care3=DATA(**{'sizeinbytes': 4}) self.__field_dont_care3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_dont_care1(self): return self.__field_dont_care1.getvalue() def __setfield_dont_care1(self, value): if isinstance(value,DATA): self.__field_dont_care1=value else: self.__field_dont_care1=DATA(value,**{'sizeinbytes': 18}) def __delfield_dont_care1(self): del self.__field_dont_care1 dont_care1=property(__getfield_dont_care1, __setfield_dont_care1, __delfield_dont_care1, None) def __getfield_ringer(self): return self.__field_ringer.getvalue() def __setfield_ringer(self, value): if isinstance(value,UINT): self.__field_ringer=value else: self.__field_ringer=UINT(value,**{'sizeinbytes': 2}) def __delfield_ringer(self): del self.__field_ringer ringer=property(__getfield_ringer, __setfield_ringer, __delfield_ringer, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 33}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_dont_care2(self): return self.__field_dont_care2.getvalue() def __setfield_dont_care2(self, value): if isinstance(value,DATA): self.__field_dont_care2=value else: self.__field_dont_care2=DATA(value,**{'sizeinbytes': 182}) def __delfield_dont_care2(self): del self.__field_dont_care2 dont_care2=property(__getfield_dont_care2, __setfield_dont_care2, __delfield_dont_care2, None) def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 2}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_dont_care3(self): return self.__field_dont_care3.getvalue() def __setfield_dont_care3(self, value): if isinstance(value,DATA): self.__field_dont_care3=value else: self.__field_dont_care3=DATA(value,**{'sizeinbytes': 4}) def __delfield_dont_care3(self): del self.__field_dont_care3 dont_care3=property(__getfield_dont_care3, __setfield_dont_care3, __delfield_dont_care3, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('dont_care1', self.__field_dont_care1, None) yield ('ringer', self.__field_ringer, None) yield ('name', self.__field_name, None) yield ('dont_care2', self.__field_dont_care2, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('dont_care3', self.__field_dont_care3, None) class pb_contact_media_file(BaseProtogenClass): __fields=['contacts'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pb_contact_media_file,self).__init__(**dict) if self.__class__ is pb_contact_media_file: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pb_contact_media_file,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pb_contact_media_file,kwargs) if len(args): dict2={'elementclass': pb_contact_media_entry} dict2.update(kwargs) kwargs=dict2 self.__field_contacts=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_contacts except: self.__field_contacts=LIST(**{'elementclass': pb_contact_media_entry}) self.__field_contacts.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_contacts=LIST(**{'elementclass': pb_contact_media_entry}) self.__field_contacts.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_contacts(self): try: self.__field_contacts except: self.__field_contacts=LIST(**{'elementclass': pb_contact_media_entry}) return self.__field_contacts.getvalue() def __setfield_contacts(self, value): if isinstance(value,LIST): self.__field_contacts=value else: self.__field_contacts=LIST(value,**{'elementclass': pb_contact_media_entry}) def __delfield_contacts(self): del self.__field_contacts contacts=property(__getfield_contacts, __setfield_contacts, __delfield_contacts, None) def iscontainer(self): return True def containerelements(self): yield ('contacts', self.__field_contacts, None) class scheduleexception(BaseProtogenClass): __fields=['pos', 'day', 'month', 'year'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexception,self).__init__(**dict) if self.__class__ is scheduleexception: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexception,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexception,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_day.writetobuffer(buf) self.__field_month.writetobuffer(buf) self.__field_year.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_day=UINT(**{'sizeinbytes': 1}) self.__field_day.readfrombuffer(buf) self.__field_month=UINT(**{'sizeinbytes': 1}) self.__field_month.readfrombuffer(buf) self.__field_year=UINT(**{'sizeinbytes': 2}) self.__field_year.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "Refers to event id (position in schedule file) that this suppresses") def __getfield_day(self): return self.__field_day.getvalue() def __setfield_day(self, value): if isinstance(value,UINT): self.__field_day=value else: self.__field_day=UINT(value,**{'sizeinbytes': 1}) def __delfield_day(self): del self.__field_day day=property(__getfield_day, __setfield_day, __delfield_day, None) def __getfield_month(self): return self.__field_month.getvalue() def __setfield_month(self, value): if isinstance(value,UINT): self.__field_month=value else: self.__field_month=UINT(value,**{'sizeinbytes': 1}) def __delfield_month(self): del self.__field_month month=property(__getfield_month, __setfield_month, __delfield_month, None) def __getfield_year(self): return self.__field_year.getvalue() def __setfield_year(self, value): if isinstance(value,UINT): self.__field_year=value else: self.__field_year=UINT(value,**{'sizeinbytes': 2}) def __delfield_year(self): del self.__field_year year=property(__getfield_year, __setfield_year, __delfield_year, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "Refers to event id (position in schedule file) that this suppresses") yield ('day', self.__field_day, None) yield ('month', self.__field_month, None) yield ('year', self.__field_year, None) class scheduleexceptionfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexceptionfile,self).__init__(**dict) if self.__class__ is scheduleexceptionfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexceptionfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexceptionfile,kwargs) if len(args): dict2={'elementclass': scheduleexception} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': scheduleexception}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class scheduleevent(BaseProtogenClass): __fields=['packet_size', 'pos', 'start', 'end', 'repeat', 'daybitmap', 'pad2', 'alarmminutes', 'alarmhours', 'alarmtype', 'snoozedelay', 'ringtone', 'pad3', 'description'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleevent,self).__init__(**dict) if self.__class__ is scheduleevent: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleevent,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleevent,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_packet_size except: self.__field_packet_size=UINT(**{ 'constant': 64 }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) self.__field_daybitmap.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad2.writetobuffer(buf) self.__field_alarmminutes.writetobuffer(buf) self.__field_alarmhours.writetobuffer(buf) self.__field_alarmtype.writetobuffer(buf) try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) try: self.__field_pad3 except: self.__field_pad3=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad3.writetobuffer(buf) self.__field_description.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_start=LGCALDATE(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=LGCALDATE(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_repeat=UINT(**{'sizeinbytes': 1}) self.__field_repeat.readfrombuffer(buf) self.__field_daybitmap=UINT(**{'sizeinbytes': 2}) self.__field_daybitmap.readfrombuffer(buf) self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad2.readfrombuffer(buf) self.__field_alarmminutes=UINT(**{'sizeinbytes': 1}) self.__field_alarmminutes.readfrombuffer(buf) self.__field_alarmhours=UINT(**{'sizeinbytes': 1}) self.__field_alarmhours.readfrombuffer(buf) self.__field_alarmtype=UINT(**{'sizeinbytes': 1}) self.__field_alarmtype.readfrombuffer(buf) self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_pad3=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad3.readfrombuffer(buf) self.__field_description=USTRING(**{'sizeinbytes': 42, 'encoding': PHONE_ENCODING, 'raiseontruncate': False, 'raiseonunterminatedread': False }) self.__field_description.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_packet_size(self): return self.__field_packet_size.getvalue() def __setfield_packet_size(self, value): if isinstance(value,UINT): self.__field_packet_size=value else: self.__field_packet_size=UINT(value,**{ 'constant': 64 }) def __delfield_packet_size(self): del self.__field_packet_size packet_size=property(__getfield_packet_size, __setfield_packet_size, __delfield_packet_size, "Faster than packetsize()") def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "position within file, used as an event id") def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,LGCALDATE): self.__field_start=value else: self.__field_start=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,LGCALDATE): self.__field_end=value else: self.__field_end=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,UINT): self.__field_repeat=value else: self.__field_repeat=UINT(value,**{'sizeinbytes': 1}) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_daybitmap(self): return self.__field_daybitmap.getvalue() def __setfield_daybitmap(self, value): if isinstance(value,UINT): self.__field_daybitmap=value else: self.__field_daybitmap=UINT(value,**{'sizeinbytes': 2}) def __delfield_daybitmap(self): del self.__field_daybitmap daybitmap=property(__getfield_daybitmap, __setfield_daybitmap, __delfield_daybitmap, "which days a weekly repeat event happens on") def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UINT): self.__field_pad2=value else: self.__field_pad2=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_alarmminutes(self): return self.__field_alarmminutes.getvalue() def __setfield_alarmminutes(self, value): if isinstance(value,UINT): self.__field_alarmminutes=value else: self.__field_alarmminutes=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmminutes(self): del self.__field_alarmminutes alarmminutes=property(__getfield_alarmminutes, __setfield_alarmminutes, __delfield_alarmminutes, "a value of 100 indicates not set") def __getfield_alarmhours(self): return self.__field_alarmhours.getvalue() def __setfield_alarmhours(self, value): if isinstance(value,UINT): self.__field_alarmhours=value else: self.__field_alarmhours=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmhours(self): del self.__field_alarmhours alarmhours=property(__getfield_alarmhours, __setfield_alarmhours, __delfield_alarmhours, "a value of 100 indicates not set") def __getfield_alarmtype(self): return self.__field_alarmtype.getvalue() def __setfield_alarmtype(self, value): if isinstance(value,UINT): self.__field_alarmtype=value else: self.__field_alarmtype=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmtype(self): del self.__field_alarmtype alarmtype=property(__getfield_alarmtype, __setfield_alarmtype, __delfield_alarmtype, "preset alarm reminder type") def __getfield_snoozedelay(self): try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_snoozedelay.getvalue() def __setfield_snoozedelay(self, value): if isinstance(value,UINT): self.__field_snoozedelay=value else: self.__field_snoozedelay=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_snoozedelay(self): del self.__field_snoozedelay snoozedelay=property(__getfield_snoozedelay, __setfield_snoozedelay, __delfield_snoozedelay, "in minutes, not for this phone") def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_pad3(self): try: self.__field_pad3 except: self.__field_pad3=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_pad3.getvalue() def __setfield_pad3(self, value): if isinstance(value,UINT): self.__field_pad3=value else: self.__field_pad3=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_pad3(self): del self.__field_pad3 pad3=property(__getfield_pad3, __setfield_pad3, __delfield_pad3, None) def __getfield_description(self): return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,USTRING): self.__field_description=value else: self.__field_description=USTRING(value,**{'sizeinbytes': 42, 'encoding': PHONE_ENCODING, 'raiseontruncate': False, 'raiseonunterminatedread': False }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def iscontainer(self): return True def containerelements(self): yield ('packet_size', self.__field_packet_size, "Faster than packetsize()") yield ('pos', self.__field_pos, "position within file, used as an event id") yield ('start', self.__field_start, None) yield ('end', self.__field_end, None) yield ('repeat', self.__field_repeat, None) yield ('daybitmap', self.__field_daybitmap, "which days a weekly repeat event happens on") yield ('pad2', self.__field_pad2, None) yield ('alarmminutes', self.__field_alarmminutes, "a value of 100 indicates not set") yield ('alarmhours', self.__field_alarmhours, "a value of 100 indicates not set") yield ('alarmtype', self.__field_alarmtype, "preset alarm reminder type") yield ('snoozedelay', self.__field_snoozedelay, "in minutes, not for this phone") yield ('ringtone', self.__field_ringtone, None) yield ('pad3', self.__field_pad3, None) yield ('description', self.__field_description, None) class schedulefile(BaseProtogenClass): __fields=['numactiveitems', 'events'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(schedulefile,self).__init__(**dict) if self.__class__ is schedulefile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(schedulefile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(schedulefile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{'elementclass': scheduleevent}) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('events', self.__field_events, None) class call(BaseProtogenClass): __fields=['GPStime', 'unknown1', 'duration', 'number', 'name', 'numberlength', 'unknown2', 'pbnumbertype', 'unknown3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(call,self).__init__(**dict) if self.__class__ is call: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(call,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(call,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_numberlength.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_pbnumbertype.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 4}) self.__field_unknown1.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_numberlength=UINT(**{'sizeinbytes': 1}) self.__field_numberlength.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_pbnumbertype=UINT(**{'sizeinbytes': 1}) self.__field_pbnumbertype.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 5}) self.__field_unknown3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numberlength(self): return self.__field_numberlength.getvalue() def __setfield_numberlength(self, value): if isinstance(value,UINT): self.__field_numberlength=value else: self.__field_numberlength=UINT(value,**{'sizeinbytes': 1}) def __delfield_numberlength(self): del self.__field_numberlength numberlength=property(__getfield_numberlength, __setfield_numberlength, __delfield_numberlength, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_pbnumbertype(self): return self.__field_pbnumbertype.getvalue() def __setfield_pbnumbertype(self, value): if isinstance(value,UINT): self.__field_pbnumbertype=value else: self.__field_pbnumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_pbnumbertype(self): del self.__field_pbnumbertype pbnumbertype=property(__getfield_pbnumbertype, __setfield_pbnumbertype, __delfield_pbnumbertype, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 5}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def iscontainer(self): return True def containerelements(self): yield ('GPStime', self.__field_GPStime, None) yield ('unknown1', self.__field_unknown1, None) yield ('duration', self.__field_duration, None) yield ('number', self.__field_number, None) yield ('name', self.__field_name, None) yield ('numberlength', self.__field_numberlength, None) yield ('unknown2', self.__field_unknown2, None) yield ('pbnumbertype', self.__field_pbnumbertype, None) yield ('unknown3', self.__field_unknown3, None) class callhistory(BaseProtogenClass): __fields=['numcalls', 'unknown1', 'calls'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callhistory,self).__init__(**dict) if self.__class__ is callhistory: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callhistory,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callhistory,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numcalls.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numcalls=UINT(**{'sizeinbytes': 4}) self.__field_numcalls.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numcalls(self): return self.__field_numcalls.getvalue() def __setfield_numcalls(self, value): if isinstance(value,UINT): self.__field_numcalls=value else: self.__field_numcalls=UINT(value,**{'sizeinbytes': 4}) def __delfield_numcalls(self): del self.__field_numcalls numcalls=property(__getfield_numcalls, __setfield_numcalls, __delfield_numcalls, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_calls(self): try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) return self.__field_calls.getvalue() def __setfield_calls(self, value): if isinstance(value,LIST): self.__field_calls=value else: self.__field_calls=LIST(value,**{'elementclass': call}) def __delfield_calls(self): del self.__field_calls calls=property(__getfield_calls, __setfield_calls, __delfield_calls, None) def iscontainer(self): return True def containerelements(self): yield ('numcalls', self.__field_numcalls, None) yield ('unknown1', self.__field_unknown1, None) yield ('calls', self.__field_calls, None) class indexentry(BaseProtogenClass): __fields=['index', 'const', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_const.writetobuffer(buf) try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 40, 'default': ""}) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 1}) self.__field_index.readfrombuffer(buf) self.__field_const=UINT(**{'sizeinbytes': 1}) self.__field_const.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 40, 'default': ""}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 1}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_const(self): return self.__field_const.getvalue() def __setfield_const(self, value): if isinstance(value,UINT): self.__field_const=value else: self.__field_const=UINT(value,**{'sizeinbytes': 1}) def __delfield_const(self): del self.__field_const const=property(__getfield_const, __setfield_const, __delfield_const, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 40, 'default': ""}) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 40, 'default': ""}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('const', self.__field_const, None) yield ('name', self.__field_name, None) class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['numactiveitems', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('items', self.__field_items, None) class content_entry(BaseProtogenClass): __fields=['type', 'index1', 'name1', 'unknown1', 'unknown2', 'mime_type', 'content_type', 'url', 'unknown_int1', 'unknown3', 'unknown_int2', 'unknown4', 'unknown5', 'size', 'location_maybe', 'index2', 'name2', 'unknown6'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(content_entry,self).__init__(**dict) if self.__class__ is content_entry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(content_entry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(content_entry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_type.writetobuffer(buf) if self.type=='!C': self.__field_index1.writetobuffer(buf) self.__field_name1.writetobuffer(buf) try: self.__field_unknown1 except: self.__field_unknown1=USTRING(**{'terminator': 0xA, 'default': '-1'}) self.__field_unknown1.writetobuffer(buf) try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 8, 'default' :0}) self.__field_unknown2.writetobuffer(buf) self.__field_mime_type.writetobuffer(buf) self.__field_content_type.writetobuffer(buf) try: self.__field_url except: self.__field_url=USTRING(**{'terminator': 0xA, 'default':'bitpim.org'}) self.__field_url.writetobuffer(buf) try: self.__field_unknown_int1 except: self.__field_unknown_int1=UINT(**{'sizeinbytes': 1, 'default':0x14}) self.__field_unknown_int1.writetobuffer(buf) try: self.__field_unknown3 except: self.__field_unknown3=USTRING(**{'terminator': 0xA, 'default':''}) self.__field_unknown3.writetobuffer(buf) try: self.__field_unknown_int2 except: self.__field_unknown_int2=UINT(**{'sizeinbytes': 1, 'default':0x14}) self.__field_unknown_int2.writetobuffer(buf) try: self.__field_unknown4 except: self.__field_unknown4=USTRING(**{'terminator': 0xA, 'default':''}) self.__field_unknown4.writetobuffer(buf) try: self.__field_unknown5 except: self.__field_unknown5=USTRING(**{'terminator': 0xA, 'default':'0'}) self.__field_unknown5.writetobuffer(buf) self.__field_size.writetobuffer(buf) if self.type=='!E': try: self.__field_location_maybe except: self.__field_location_maybe=USTRING(**{'terminator': 0xA, 'default':'ams:'}) self.__field_location_maybe.writetobuffer(buf) self.__field_index2.writetobuffer(buf) self.__field_name2.writetobuffer(buf) try: self.__field_unknown6 except: self.__field_unknown6=USTRING(**{'terminator': 0xA, 'default':''}) self.__field_unknown6.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_type=USTRING(**{'sizeinbytes': 3, 'terminator': 0xA}) self.__field_type.readfrombuffer(buf) if self.type=='!C': self.__field_index1=USTRING(**{'terminator': 0xA}) self.__field_index1.readfrombuffer(buf) self.__field_name1=USTRING(**{'terminator': 0xA}) self.__field_name1.readfrombuffer(buf) self.__field_unknown1=USTRING(**{'terminator': 0xA, 'default': '-1'}) self.__field_unknown1.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 8, 'default' :0}) self.__field_unknown2.readfrombuffer(buf) self.__field_mime_type=USTRING(**{'terminator': 0xA}) self.__field_mime_type.readfrombuffer(buf) self.__field_content_type=USTRING(**{'terminator': 0xA}) self.__field_content_type.readfrombuffer(buf) self.__field_url=USTRING(**{'terminator': 0xA, 'default':'bitpim.org'}) self.__field_url.readfrombuffer(buf) self.__field_unknown_int1=UINT(**{'sizeinbytes': 1, 'default':0x14}) self.__field_unknown_int1.readfrombuffer(buf) self.__field_unknown3=USTRING(**{'terminator': 0xA, 'default':''}) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown_int2=UINT(**{'sizeinbytes': 1, 'default':0x14}) self.__field_unknown_int2.readfrombuffer(buf) self.__field_unknown4=USTRING(**{'terminator': 0xA, 'default':''}) self.__field_unknown4.readfrombuffer(buf) self.__field_unknown5=USTRING(**{'terminator': 0xA, 'default':'0'}) self.__field_unknown5.readfrombuffer(buf) self.__field_size=USTRING(**{'terminator': 0xA}) self.__field_size.readfrombuffer(buf) if self.type=='!E': self.__field_location_maybe=USTRING(**{'terminator': 0xA, 'default':'ams:'}) self.__field_location_maybe.readfrombuffer(buf) self.__field_index2=USTRING(**{'terminator': 0xA}) self.__field_index2.readfrombuffer(buf) self.__field_name2=USTRING(**{'terminator': 0xA}) self.__field_name2.readfrombuffer(buf) self.__field_unknown6=USTRING(**{'terminator': 0xA, 'default':''}) self.__field_unknown6.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_type(self): return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,USTRING): self.__field_type=value else: self.__field_type=USTRING(value,**{'sizeinbytes': 3, 'terminator': 0xA}) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, None) def __getfield_index1(self): return self.__field_index1.getvalue() def __setfield_index1(self, value): if isinstance(value,USTRING): self.__field_index1=value else: self.__field_index1=USTRING(value,**{'terminator': 0xA}) def __delfield_index1(self): del self.__field_index1 index1=property(__getfield_index1, __setfield_index1, __delfield_index1, None) def __getfield_name1(self): return self.__field_name1.getvalue() def __setfield_name1(self, value): if isinstance(value,USTRING): self.__field_name1=value else: self.__field_name1=USTRING(value,**{'terminator': 0xA}) def __delfield_name1(self): del self.__field_name1 name1=property(__getfield_name1, __setfield_name1, __delfield_name1, None) def __getfield_unknown1(self): try: self.__field_unknown1 except: self.__field_unknown1=USTRING(**{'terminator': 0xA, 'default': '-1'}) return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,USTRING): self.__field_unknown1=value else: self.__field_unknown1=USTRING(value,**{'terminator': 0xA, 'default': '-1'}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_unknown2(self): try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 8, 'default' :0}) return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 8, 'default' :0}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_mime_type(self): return self.__field_mime_type.getvalue() def __setfield_mime_type(self, value): if isinstance(value,USTRING): self.__field_mime_type=value else: self.__field_mime_type=USTRING(value,**{'terminator': 0xA}) def __delfield_mime_type(self): del self.__field_mime_type mime_type=property(__getfield_mime_type, __setfield_mime_type, __delfield_mime_type, None) def __getfield_content_type(self): return self.__field_content_type.getvalue() def __setfield_content_type(self, value): if isinstance(value,USTRING): self.__field_content_type=value else: self.__field_content_type=USTRING(value,**{'terminator': 0xA}) def __delfield_content_type(self): del self.__field_content_type content_type=property(__getfield_content_type, __setfield_content_type, __delfield_content_type, None) def __getfield_url(self): try: self.__field_url except: self.__field_url=USTRING(**{'terminator': 0xA, 'default':'bitpim.org'}) return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,USTRING): self.__field_url=value else: self.__field_url=USTRING(value,**{'terminator': 0xA, 'default':'bitpim.org'}) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_unknown_int1(self): try: self.__field_unknown_int1 except: self.__field_unknown_int1=UINT(**{'sizeinbytes': 1, 'default':0x14}) return self.__field_unknown_int1.getvalue() def __setfield_unknown_int1(self, value): if isinstance(value,UINT): self.__field_unknown_int1=value else: self.__field_unknown_int1=UINT(value,**{'sizeinbytes': 1, 'default':0x14}) def __delfield_unknown_int1(self): del self.__field_unknown_int1 unknown_int1=property(__getfield_unknown_int1, __setfield_unknown_int1, __delfield_unknown_int1, None) def __getfield_unknown3(self): try: self.__field_unknown3 except: self.__field_unknown3=USTRING(**{'terminator': 0xA, 'default':''}) return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,USTRING): self.__field_unknown3=value else: self.__field_unknown3=USTRING(value,**{'terminator': 0xA, 'default':''}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown_int2(self): try: self.__field_unknown_int2 except: self.__field_unknown_int2=UINT(**{'sizeinbytes': 1, 'default':0x14}) return self.__field_unknown_int2.getvalue() def __setfield_unknown_int2(self, value): if isinstance(value,UINT): self.__field_unknown_int2=value else: self.__field_unknown_int2=UINT(value,**{'sizeinbytes': 1, 'default':0x14}) def __delfield_unknown_int2(self): del self.__field_unknown_int2 unknown_int2=property(__getfield_unknown_int2, __setfield_unknown_int2, __delfield_unknown_int2, None) def __getfield_unknown4(self): try: self.__field_unknown4 except: self.__field_unknown4=USTRING(**{'terminator': 0xA, 'default':''}) return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,USTRING): self.__field_unknown4=value else: self.__field_unknown4=USTRING(value,**{'terminator': 0xA, 'default':''}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_unknown5(self): try: self.__field_unknown5 except: self.__field_unknown5=USTRING(**{'terminator': 0xA, 'default':'0'}) return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,USTRING): self.__field_unknown5=value else: self.__field_unknown5=USTRING(value,**{'terminator': 0xA, 'default':'0'}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_size(self): return self.__field_size.getvalue() def __setfield_size(self, value): if isinstance(value,USTRING): self.__field_size=value else: self.__field_size=USTRING(value,**{'terminator': 0xA}) def __delfield_size(self): del self.__field_size size=property(__getfield_size, __setfield_size, __delfield_size, None) def __getfield_location_maybe(self): try: self.__field_location_maybe except: self.__field_location_maybe=USTRING(**{'terminator': 0xA, 'default':'ams:'}) return self.__field_location_maybe.getvalue() def __setfield_location_maybe(self, value): if isinstance(value,USTRING): self.__field_location_maybe=value else: self.__field_location_maybe=USTRING(value,**{'terminator': 0xA, 'default':'ams:'}) def __delfield_location_maybe(self): del self.__field_location_maybe location_maybe=property(__getfield_location_maybe, __setfield_location_maybe, __delfield_location_maybe, None) def __getfield_index2(self): return self.__field_index2.getvalue() def __setfield_index2(self, value): if isinstance(value,USTRING): self.__field_index2=value else: self.__field_index2=USTRING(value,**{'terminator': 0xA}) def __delfield_index2(self): del self.__field_index2 index2=property(__getfield_index2, __setfield_index2, __delfield_index2, None) def __getfield_name2(self): return self.__field_name2.getvalue() def __setfield_name2(self, value): if isinstance(value,USTRING): self.__field_name2=value else: self.__field_name2=USTRING(value,**{'terminator': 0xA}) def __delfield_name2(self): del self.__field_name2 name2=property(__getfield_name2, __setfield_name2, __delfield_name2, None) def __getfield_unknown6(self): try: self.__field_unknown6 except: self.__field_unknown6=USTRING(**{'terminator': 0xA, 'default':''}) return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,USTRING): self.__field_unknown6=value else: self.__field_unknown6=USTRING(value,**{'terminator': 0xA, 'default':''}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def iscontainer(self): return True def containerelements(self): yield ('type', self.__field_type, None) if self.type=='!C': yield ('index1', self.__field_index1, None) yield ('name1', self.__field_name1, None) yield ('unknown1', self.__field_unknown1, None) yield ('unknown2', self.__field_unknown2, None) yield ('mime_type', self.__field_mime_type, None) yield ('content_type', self.__field_content_type, None) yield ('url', self.__field_url, None) yield ('unknown_int1', self.__field_unknown_int1, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown_int2', self.__field_unknown_int2, None) yield ('unknown4', self.__field_unknown4, None) yield ('unknown5', self.__field_unknown5, None) yield ('size', self.__field_size, None) if self.type=='!E': yield ('location_maybe', self.__field_location_maybe, None) yield ('index2', self.__field_index2, None) yield ('name2', self.__field_name2, None) yield ('unknown6', self.__field_unknown6, None) class content_file(BaseProtogenClass): "Used to store all content on the phone, apps, ringers and images (with the exception of the camera)" __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(content_file,self).__init__(**dict) if self.__class__ is content_file: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(content_file,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(content_file,kwargs) if len(args): dict2={'elementclass': content_entry, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': content_entry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': content_entry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': content_entry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': content_entry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class content_count(BaseProtogenClass): "Stores the number of items in the content file" __fields=['count'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(content_count,self).__init__(**dict) if self.__class__ is content_count: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(content_count,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(content_count,kwargs) if len(args): dict2={'terminator': None} dict2.update(kwargs) kwargs=dict2 self.__field_count=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_count.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_count=USTRING(**{'terminator': None}) self.__field_count.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_count(self): return self.__field_count.getvalue() def __setfield_count(self, value): if isinstance(value,USTRING): self.__field_count=value else: self.__field_count=USTRING(value,**{'terminator': None}) def __delfield_count(self): del self.__field_count count=property(__getfield_count, __setfield_count, __delfield_count, None) def iscontainer(self): return True def containerelements(self): yield ('count', self.__field_count, None) class qcp_media_header(BaseProtogenClass): "Start of a qcp format file, used to determine if a file is qcp or mp3 format" __fields=['riff', 'riff_size', 'qcp_format', 'stuff'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(qcp_media_header,self).__init__(**dict) if self.__class__ is qcp_media_header: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(qcp_media_header,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(qcp_media_header,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_riff.writetobuffer(buf) self.__field_riff_size.writetobuffer(buf) self.__field_qcp_format.writetobuffer(buf) self.__field_stuff.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_riff=USTRING(**{'sizeinbytes': 4, 'constant': 'RIFF', 'terminator': None}) self.__field_riff.readfrombuffer(buf) self.__field_riff_size=UINT(**{'sizeinbytes': 4}) self.__field_riff_size.readfrombuffer(buf) self.__field_qcp_format=USTRING(**{'sizeinbytes': 8, 'constant': 'QLCMfmt ', 'terminator': None}) self.__field_qcp_format.readfrombuffer(buf) self.__field_stuff=DATA() self.__field_stuff.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_riff(self): return self.__field_riff.getvalue() def __setfield_riff(self, value): if isinstance(value,USTRING): self.__field_riff=value else: self.__field_riff=USTRING(value,**{'sizeinbytes': 4, 'constant': 'RIFF', 'terminator': None}) def __delfield_riff(self): del self.__field_riff riff=property(__getfield_riff, __setfield_riff, __delfield_riff, None) def __getfield_riff_size(self): return self.__field_riff_size.getvalue() def __setfield_riff_size(self, value): if isinstance(value,UINT): self.__field_riff_size=value else: self.__field_riff_size=UINT(value,**{'sizeinbytes': 4}) def __delfield_riff_size(self): del self.__field_riff_size riff_size=property(__getfield_riff_size, __setfield_riff_size, __delfield_riff_size, None) def __getfield_qcp_format(self): return self.__field_qcp_format.getvalue() def __setfield_qcp_format(self, value): if isinstance(value,USTRING): self.__field_qcp_format=value else: self.__field_qcp_format=USTRING(value,**{'sizeinbytes': 8, 'constant': 'QLCMfmt ', 'terminator': None}) def __delfield_qcp_format(self): del self.__field_qcp_format qcp_format=property(__getfield_qcp_format, __setfield_qcp_format, __delfield_qcp_format, None) def __getfield_stuff(self): return self.__field_stuff.getvalue() def __setfield_stuff(self, value): if isinstance(value,DATA): self.__field_stuff=value else: self.__field_stuff=DATA(value,) def __delfield_stuff(self): del self.__field_stuff stuff=property(__getfield_stuff, __setfield_stuff, __delfield_stuff, None) def iscontainer(self): return True def containerelements(self): yield ('riff', self.__field_riff, None) yield ('riff_size', self.__field_riff_size, None) yield ('qcp_format', self.__field_qcp_format, None) yield ('stuff', self.__field_stuff, None) class textmemo(BaseProtogenClass): __fields=['text'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemo,self).__init__(**dict) if self.__class__ is textmemo: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemo,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemo,kwargs) if len(args): dict2={'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } dict2.update(kwargs) kwargs=dict2 self.__field_text=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_text.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_text=USTRING(**{'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_text.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,USTRING): self.__field_text=value else: self.__field_text=USTRING(value,**{'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def iscontainer(self): return True def containerelements(self): yield ('text', self.__field_text, None) class textmemofile(BaseProtogenClass): __fields=['itemcount', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemofile,self).__init__(**dict) if self.__class__ is textmemofile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemofile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemofile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_itemcount.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_itemcount=UINT(**{'sizeinbytes': 4}) self.__field_itemcount.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_itemcount(self): return self.__field_itemcount.getvalue() def __setfield_itemcount(self, value): if isinstance(value,UINT): self.__field_itemcount=value else: self.__field_itemcount=UINT(value,**{'sizeinbytes': 4}) def __delfield_itemcount(self): del self.__field_itemcount itemcount=property(__getfield_itemcount, __setfield_itemcount, __delfield_itemcount, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': textmemo }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('itemcount', self.__field_itemcount, None) yield ('items', self.__field_items, None) class recipient_record(BaseProtogenClass): __fields=['unknown1', 'name', 'number', 'unknown2', 'status', 'unknown3', 'time', 'unknown2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(recipient_record,self).__init__(**dict) if self.__class__ is recipient_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(recipient_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(recipient_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_time.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UINT(**{'sizeinbytes': 8}) self.__field_unknown1.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 33, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49}) self.__field_number.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 24}) self.__field_unknown2.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1}) self.__field_unknown3.readfrombuffer(buf) self.__field_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_time.readfrombuffer(buf) self.__field_unknown2=DATA(**{'sizeinbytes': 12}) self.__field_unknown2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 8}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 33, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 24}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_time(self): return self.__field_time.getvalue() def __setfield_time(self, value): if isinstance(value,LGCALDATE): self.__field_time=value else: self.__field_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_time(self): del self.__field_time time=property(__getfield_time, __setfield_time, __delfield_time, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,DATA): self.__field_unknown2=value else: self.__field_unknown2=DATA(value,**{'sizeinbytes': 12}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('name', self.__field_name, None) yield ('number', self.__field_number, None) yield ('unknown2', self.__field_unknown2, None) yield ('status', self.__field_status, None) yield ('unknown3', self.__field_unknown3, None) yield ('time', self.__field_time, None) yield ('unknown2', self.__field_unknown2, None) class sms_out(BaseProtogenClass): __fields=['index', 'locked', 'unknown1', 'timesent', 'saved', 'msg', 'unknown3', 'callback', 'recipients'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_out,self).__init__(**dict) if self.__class__ is sms_out: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_out,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_out,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_saved.writetobuffer(buf) self.__field_msg.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_callback.writetobuffer(buf) try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record, 'length': 10}) self.__field_recipients.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 3}) self.__field_unknown1.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_saved=UINT(**{'sizeinbytes': 1}) self.__field_saved.readfrombuffer(buf) self.__field_msg=USTRING(**{'sizeinbytes': 178, 'encoding': PHONE_ENCODING}) self.__field_msg.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1}) self.__field_unknown3.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 16}) self.__field_callback.readfrombuffer(buf) self.__field_recipients=LIST(**{'elementclass': recipient_record, 'length': 10}) self.__field_recipients.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_saved(self): return self.__field_saved.getvalue() def __setfield_saved(self, value): if isinstance(value,UINT): self.__field_saved=value else: self.__field_saved=UINT(value,**{'sizeinbytes': 1}) def __delfield_saved(self): del self.__field_saved saved=property(__getfield_saved, __setfield_saved, __delfield_saved, None) def __getfield_msg(self): return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{'sizeinbytes': 178, 'encoding': PHONE_ENCODING}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 16}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_recipients(self): try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record, 'length': 10}) return self.__field_recipients.getvalue() def __setfield_recipients(self, value): if isinstance(value,LIST): self.__field_recipients=value else: self.__field_recipients=LIST(value,**{'elementclass': recipient_record, 'length': 10}) def __delfield_recipients(self): del self.__field_recipients recipients=property(__getfield_recipients, __setfield_recipients, __delfield_recipients, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('locked', self.__field_locked, None) yield ('unknown1', self.__field_unknown1, None) yield ('timesent', self.__field_timesent, None) yield ('saved', self.__field_saved, None) yield ('msg', self.__field_msg, None) yield ('unknown3', self.__field_unknown3, None) yield ('callback', self.__field_callback, None) yield ('recipients', self.__field_recipients, None) class SMSINBOXMSGFRAGMENT(BaseProtogenClass): __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSINBOXMSGFRAGMENT,self).__init__(**dict) if self.__class__ is SMSINBOXMSGFRAGMENT: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSINBOXMSGFRAGMENT,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSINBOXMSGFRAGMENT,kwargs) if len(args): dict2={'elementclass': _gen_p_lgpm325_349, 'length': 181} dict2.update(kwargs) kwargs=dict2 self.__field_msg=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgpm325_349, 'length': 181}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=LIST(**{'elementclass': _gen_p_lgpm325_349, 'length': 181}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgpm325_349, 'length': 181}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgpm325_349, 'length': 181}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class _gen_p_lgpm325_349(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgpm325_349,self).__init__(**dict) if self.__class__ is _gen_p_lgpm325_349: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgpm325_349,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgpm325_349,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class sms_in(BaseProtogenClass): __fields=['unknown1', 'msg_index2', 'unknown2', 'timesent', 'unknown', 'callback_length', 'callback', 'sender_length', 'sender', 'unknown4', 'lg_time', 'GPStime', 'read', 'locked', 'unknown5', 'subject', 'msglength', 'msg', 'unknown8'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_in,self).__init__(**dict) if self.__class__ is sms_in: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_in,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_in,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_msg_index2.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self.__field_callback_length.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_sender_length.writetobuffer(buf) try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgpm325_361, 'length': 38}) self.__field_sender.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_lg_time.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_msglength.writetobuffer(buf) self.__field_msg.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UINT(**{'sizeinbytes': 4}) self.__field_unknown1.readfrombuffer(buf) self.__field_msg_index2=UINT(**{'sizeinbytes': 4}) self.__field_msg_index2.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2}) self.__field_unknown2.readfrombuffer(buf) self.__field_timesent=SMSDATE(**{'sizeinbytes': 6}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown=UINT(**{'sizeinbytes': 3}) self.__field_unknown.readfrombuffer(buf) self.__field_callback_length=UINT(**{'sizeinbytes': 1}) self.__field_callback_length.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 38}) self.__field_callback.readfrombuffer(buf) self.__field_sender_length=UINT(**{'sizeinbytes': 1}) self.__field_sender_length.readfrombuffer(buf) self.__field_sender=LIST(**{'elementclass': _gen_p_lgpm325_361, 'length': 38}) self.__field_sender.readfrombuffer(buf) self.__field_unknown4=DATA(**{'sizeinbytes': 15}) self.__field_unknown4.readfrombuffer(buf) self.__field_lg_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_lg_time.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 2}) self.__field_read.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 8}) self.__field_unknown5.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 73, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_msglength=UINT(**{'sizeinbytes': 2}) self.__field_msglength.readfrombuffer(buf) self.__field_msg=USTRING(**{'sizeinbytes': 200, 'encoding': PHONE_ENCODING}) self.__field_msg.readfrombuffer(buf) self.__field_unknown8=DATA() self.__field_unknown8.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_msg_index2(self): return self.__field_msg_index2.getvalue() def __setfield_msg_index2(self, value): if isinstance(value,UINT): self.__field_msg_index2=value else: self.__field_msg_index2=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index2(self): del self.__field_msg_index2 msg_index2=property(__getfield_msg_index2, __setfield_msg_index2, __delfield_msg_index2, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,SMSDATE): self.__field_timesent=value else: self.__field_timesent=SMSDATE(value,**{'sizeinbytes': 6}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UINT): self.__field_unknown=value else: self.__field_unknown=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def __getfield_callback_length(self): return self.__field_callback_length.getvalue() def __setfield_callback_length(self, value): if isinstance(value,UINT): self.__field_callback_length=value else: self.__field_callback_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_length(self): del self.__field_callback_length callback_length=property(__getfield_callback_length, __setfield_callback_length, __delfield_callback_length, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 38}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_sender_length(self): return self.__field_sender_length.getvalue() def __setfield_sender_length(self, value): if isinstance(value,UINT): self.__field_sender_length=value else: self.__field_sender_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_sender_length(self): del self.__field_sender_length sender_length=property(__getfield_sender_length, __setfield_sender_length, __delfield_sender_length, None) def __getfield_sender(self): try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgpm325_361, 'length': 38}) return self.__field_sender.getvalue() def __setfield_sender(self, value): if isinstance(value,LIST): self.__field_sender=value else: self.__field_sender=LIST(value,**{'elementclass': _gen_p_lgpm325_361, 'length': 38}) def __delfield_sender(self): del self.__field_sender sender=property(__getfield_sender, __setfield_sender, __delfield_sender, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,DATA): self.__field_unknown4=value else: self.__field_unknown4=DATA(value,**{'sizeinbytes': 15}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_lg_time(self): return self.__field_lg_time.getvalue() def __setfield_lg_time(self, value): if isinstance(value,LGCALDATE): self.__field_lg_time=value else: self.__field_lg_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_lg_time(self): del self.__field_lg_time lg_time=property(__getfield_lg_time, __setfield_lg_time, __delfield_lg_time, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 2}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 8}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 73, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_msglength(self): return self.__field_msglength.getvalue() def __setfield_msglength(self, value): if isinstance(value,UINT): self.__field_msglength=value else: self.__field_msglength=UINT(value,**{'sizeinbytes': 2}) def __delfield_msglength(self): del self.__field_msglength msglength=property(__getfield_msglength, __setfield_msglength, __delfield_msglength, None) def __getfield_msg(self): return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{'sizeinbytes': 200, 'encoding': PHONE_ENCODING}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,DATA): self.__field_unknown8=value else: self.__field_unknown8=DATA(value,) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('msg_index2', self.__field_msg_index2, None) yield ('unknown2', self.__field_unknown2, None) yield ('timesent', self.__field_timesent, None) yield ('unknown', self.__field_unknown, None) yield ('callback_length', self.__field_callback_length, None) yield ('callback', self.__field_callback, None) yield ('sender_length', self.__field_sender_length, None) yield ('sender', self.__field_sender, None) yield ('unknown4', self.__field_unknown4, None) yield ('lg_time', self.__field_lg_time, None) yield ('GPStime', self.__field_GPStime, None) yield ('read', self.__field_read, None) yield ('locked', self.__field_locked, None) yield ('unknown5', self.__field_unknown5, None) yield ('subject', self.__field_subject, None) yield ('msglength', self.__field_msglength, None) yield ('msg', self.__field_msg, None) yield ('unknown8', self.__field_unknown8, None) class _gen_p_lgpm325_361(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgpm325_361,self).__init__(**dict) if self.__class__ is _gen_p_lgpm325_361: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgpm325_361,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgpm325_361,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of senders phone number") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of senders phone number") class sms_quick_text(BaseProtogenClass): __fields=['dunno', 'msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_quick_text,self).__init__(**dict) if self.__class__ is sms_quick_text: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_quick_text,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_quick_text,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_dunno.writetobuffer(buf) try: self.__field_msg except: self.__field_msg=USTRING(**{'sizeinbytes': 104, 'encoding': PHONE_ENCODING, 'default': ""}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_dunno.readfrombuffer(buf) self.__field_msg=USTRING(**{'sizeinbytes': 104, 'encoding': PHONE_ENCODING, 'default': ""}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_dunno(self): try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default': 0}) return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 4, 'default': 0}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=USTRING(**{'sizeinbytes': 104, 'encoding': PHONE_ENCODING, 'default': ""}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{'sizeinbytes': 104, 'encoding': PHONE_ENCODING, 'default': ""}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('dunno', self.__field_dunno, None) yield ('msg', self.__field_msg, None) class sms_canned_file(BaseProtogenClass): __fields=['num_active', 'msgs'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_canned_file,self).__init__(**dict) if self.__class__ is sms_canned_file: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_canned_file,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_canned_file,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_num_active.writetobuffer(buf) try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True, 'elementclass': sms_quick_text}) self.__field_msgs.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_num_active=UINT(**{'sizeinbytes': 4}) self.__field_num_active.readfrombuffer(buf) self.__field_msgs=LIST(**{'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True, 'elementclass': sms_quick_text}) self.__field_msgs.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_num_active(self): return self.__field_num_active.getvalue() def __setfield_num_active(self, value): if isinstance(value,UINT): self.__field_num_active=value else: self.__field_num_active=UINT(value,**{'sizeinbytes': 4}) def __delfield_num_active(self): del self.__field_num_active num_active=property(__getfield_num_active, __setfield_num_active, __delfield_num_active, None) def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True, 'elementclass': sms_quick_text}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True, 'elementclass': sms_quick_text}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def iscontainer(self): return True def containerelements(self): yield ('num_active', self.__field_num_active, None) yield ('msgs', self.__field_msgs, None) bitpim-1.0.7+dfsg1/src/phones/com_lgvx8000.py0000644001616600161660000001023310554051740016732 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2005 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgvx8000.py 3918 2007-01-19 05:15:12Z djpham $ """Communicate with the LG VX8000 cell phone The VX8000 is substantially similar to the VX7000 but also supports video. """ # standard modules import time import cStringIO import sha # my modules import common import copy import p_lgvx8000 import com_lgvx7000 import com_brew import com_phone import com_lg import prototypes import helpids class Phone(com_lgvx7000.Phone): "Talk to the LG VX7000 cell phone" desc="LG-VX8000" helpid=helpids.ID_PHONE_LGVX8000 protocolclass=p_lgvx8000 serialsname='lgvx8000' builtinringtones= ('Low Beep Once', 'Low Beeps', 'Loud Beep Once', 'Loud Beeps', 'VZW Default Ringtone') + \ tuple(['Ringtone '+`n` for n in range(1,11)]) + \ ('No Ring',) ringtonelocations= ( # type index-file size-file directory-to-use lowest-index-to-use maximum-entries type-major ( 'ringers', 'dload/sound.dat', 'dload/soundsize.dat', 'dload/snd', 100, 50, 1), ) builtinwallpapers = () # none wallpaperlocations= ( ( 'images', 'dload/image.dat', 'dload/imagesize.dat', 'dload/img', 100, 50, 0), ) my_model='VX8000' parentprofile=com_lgvx7000.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='LG Electronics Inc' phone_model='VX8000' WALLPAPER_WIDTH=176 WALLPAPER_HEIGHT=184 MAX_WALLPAPER_BASENAME_LENGTH=32 WALLPAPER_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ." WALLPAPER_CONVERT_FORMAT="jpg" MAX_RINGTONE_BASENAME_LENGTH=32 RINGTONE_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ." # there is an origin named 'aod' - no idea what it is for except maybe # 'all other downloads' # the 8000 doesn't have seperate origins - they are all dumped in "images" imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) def GetImageOrigins(self): return self.imageorigins # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 176, 'height': 184, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 176, 'height': 184, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", {'width': 96, 'height': 80, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "fullscreen", {'width': 176, 'height': 220, 'format': "JPEG"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets def __init__(self): parentprofile.__init__(self) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('memo', 'read', None), # all memo list reading DJP ('memo', 'write', 'OVERWRITE'), # all memo list writing DJP ('call_history', 'read', None), #('sms', 'write', 'OVERWRITE'), # all SMS list writing ('sms', 'read', None), # all SMS list reading ) bitpim-1.0.7+dfsg1/src/phones/p_sanyo2400.py0000644001616600161660000000114010544634455016570 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Sanyo SCP-2400""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 # Need to check. Is max phone will hold 32/96 or 33/97 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 HASRINGPICBUF=0 #BREW_FILE_SYSTEM=2 bitpim-1.0.7+dfsg1/src/phones/com_samsungsphm300media.py0000644001616600161660000004474310735065142021251 0ustar amuamu### BITPIM ### ### Copyright (C) 2007 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_samsungsphm300media.py 4530 2007-12-28 03:15:46Z djpham $ """Communicate with the Samsung SPH-M300 through the diag port (Diag)""" import sha import common import commport import com_brew import com_phone import com_samsung_packet import fileinfo import helpids import prototypes import p_brew import p_samsungsphm300 import re class Phone(com_phone.Phone, com_brew.BrewProtocol): "Talk to a Samsung SPH-M300 (Diag) phone" desc="SPH-M300" helpid=helpids.ID_PHONE_SAMSUNGSPHM300 protocolclass=p_samsungsphm300 serialsname='sphm300' builtinringtones=tuple(['Ring %d'%x for x in range(1, 11)])+\ ('After The Summer', 'Focus on It', 'Get Happy', 'Here It Comes', 'In a Circle', 'Look Back', 'Right Here', 'Secret Life', 'Shadow of Your Smile', 'Sunday Morning', 'Default') builtinimages=tuple(['People %d'%x for x in range(1, 11)])+\ tuple(['Animal %d'%x for x in range(1, 11)])+\ ('No Image',) numbertypetab=('cell', 'home', 'office', 'pager', 'fax') builtingroups=('Unassigned', 'Family', 'Friends', 'Colleagues', 'VIPs', None) __audio_mimetype={ 'mid': 'audio/midi', 'qcp': 'audio/vnd.qcelp', 'pmd': 'application/x-pmd'} __image_mimetype={ 'jpg': 'image/jpeg', 'jpeg': 'image/jpeg', 'gif': 'image/gif', 'bmp': 'image/bmp', 'png': 'image/png'} def __init__(self, logtarget, commport): com_phone.Phone.__init__(self, logtarget, commport) com_brew.BrewProtocol.__init__(self) self.mode=self.MODENONE def read_groups(self): """Read and return the group dict""" _buf=prototypes.buffer(self.getfilecontents(self.protocolclass.group_file_name)) _groups=self.protocolclass.GroupFile() _groups.readfrombuffer(_buf, logtitle='Reading Group File') _res={} for _idx,_item in enumerate(_groups.entry): _res[_idx]={ 'name': _item.name if _item.num0 else \ self.builtingroups[_idx] } return _res def getfundamentals(self, results): """Gets information fundamental to interopating with the phone and UI.""" self.log("Retrieving fundamental phone information") self.log("Phone serial number") results['uniqueserial']=sha.new(self.get_brew_esn()).hexdigest() results['groups']=self.read_groups() self.getmediaindex(results) return results def _get_camera_index(self, res): """Get the index of images stored in the camera""" _cnt=self.protocolclass.camera_index for _item in self.listfiles(self.protocolclass.camera_dir).values(): res[_cnt]={ 'name': self.basename(_item['name']), 'location': _item['name'], 'origin': self.protocolclass.camera_origin } _cnt+=1 def _get_savedtophone_index(self, res): """Get the index of saved-to-phone images""" _cnt=self.protocolclass.savedtophone_index for _item in self.listfiles(self.protocolclass.savedtophone_dir).values(): res[_cnt]={ 'name': self.basename(_item['name']), 'location': _item['name'], 'origin': self.protocolclass.savedtophone_origin } _cnt+=1 def _get_builtin_index(self, rt_index, wp_index): """Get the indices of builtin ringtones and wallpapers""" for _idx,_item in enumerate(self.builtinringtones): rt_index[_idx]={ 'name': _item, 'origin': 'builtin' } for _idx, _item in enumerate(self.builtinimages): wp_index[_idx]={ 'name': _item, 'origin': 'builtin' } def _get_ams_index(self, rt_index, wp_index): """Get the index of ringtones and wallpapers in AmsRegistry""" buf=prototypes.buffer(self.getfilecontents(self.protocolclass.AMSREGISTRY)) ams=self.protocolclass.amsregistry() ams.readfrombuffer(buf, logtitle="Read AMS registry") _wp_cnt=self.protocolclass.ams_index _rt_cnt=self.protocolclass.ams_index for i in range(ams.nfiles): _type=ams.info[i].filetype if _type==self.protocolclass.FILETYPE_RINGER: rt_index[_rt_cnt]={ 'name': ams.filename(i), 'location': ams.filepath(i), 'origin': 'ringers' } _rt_cnt+=1 elif _type==self.protocolclass.FILETYPE_WALLPAPER: wp_index[_wp_cnt]={ 'name': ams.filename(i), 'location': ams.filepath(i), 'origin': 'images' } _wp_cnt+=1 def getmediaindex(self, results): wp_index={} rt_index={} self._get_builtin_index(rt_index, wp_index) self._get_camera_index(wp_index) self._get_savedtophone_index(wp_index) self._get_ams_index(rt_index, wp_index) results['ringtone-index']=rt_index results['wallpaper-index']=wp_index def getringtones(self, results): _media={} _rt_index=results.get('ringtone-index', {}) for _item in _rt_index.values(): if _item.get('origin', None)=='ringers': _media[_item['name']]=self.getfilecontents(_item['location'], True) results['ringtone']=_media def getwallpapers(self, results): _media={} _wp_index=results.get('wallpaper-index', {}) for _item in _wp_index.values(): _origin=_item.get('origin', None) _name=_item['name'] if _origin=='images': _media[_name]=self.getfilecontents(_item['location'], True) elif _origin in (self.protocolclass.camera_origin, self.protocolclass.savedtophone_origin): _buf=prototypes.buffer(self.getfilecontents(_item['location'], True)) _cam=self.protocolclass.CamFile() _cam.readfrombuffer(_buf, logtitle='Reading CAM file') _item['name']=_cam.filename _media[_item['name']]=_cam.jpeg results['wallpapers']=_media # Following code lifted from module com_samsungspha620 def makegcd(self, filename,size,mimetable): "Build a GCD file for filename" ext=common.getext(filename.lower()) try: mimetype=mimetable[ext] except: return "" noextname=common.stripext(filename) gcdcontent="Content-Type: "+mimetype+"\nContent-Name: "+noextname+"\nContent-Version: 1.0\nContent-Vendor: BitPim\nContent-URL: file:"+filename+"\nContent-Size: "+`size`+"\n\n\n" return gcdcontent def saveringtones(self, result, merge): dircache=self.DirCache(self) media_prefix=self.protocolclass.RINGERPREFIX endtransactionpath=self.protocolclass.ENDTRANSACTION media=result.get('ringtone', {}) media_index=result.get('ringtone-index', {}) media_names=[x['name'] for x in media.values() \ if x.get('origin', None)=='ringers' ] index_names=[x['name'] for x in media_index.values() \ if x.get('origin', None)=='ringers' ] if merge: del_names=[] else: del_names=[common.stripext(x) for x in index_names if x not in media_names] gcdpattern=re.compile("[\n\r]Content-Name: +(.*?)[\n\r]") new_names=[x for x in media_names if x not in index_names] progressmax=len(del_names)+len(new_names) progresscur=0 self.log("Writing ringers") self.progress(progresscur, progressmax, "Writing ringers") for icnt in range(1,101): if not (new_names or del_names): break fname=media_prefix+`icnt` fnamegcd=media_prefix+`icnt`+".gcd" fstat=dircache.stat(fnamegcd) if del_names and fstat: # See if this file is in list of files to delete gcdcontents=dircache.readfile(fnamegcd) thisfile=gcdpattern.search(gcdcontents).groups()[0] if thisfile in del_names: self.log("Deleting ringer "+thisfile) self.progress(progresscur, progressmax, "Deleting ringer "+thisfile) progresscur+=1 dircache.rmfile(fname) dircache.rmfile(fnamegcd) del_names.remove(thisfile) fstat=False if new_names and not fstat: newname=new_names.pop() contents="" for k in media.keys(): if media[k]['name']==newname: contents=media[k]['data'] break contentsize=len(contents) if contentsize: gcdcontents=self.makegcd(newname,contentsize,self.__audio_mimetype) self.log("Writing ringer "+newname) self.progress(progresscur, progressmax, "Deleting ringer "+newname) progresscur+=1 dircache.writefile(fname,contents) dircache.writefile(fnamegcd,gcdcontents) fstat=dircache.stat(endtransactionpath) self.log("Finished writing ringers") self.progress(progressmax, progressmax, "Finished writing ringers") if fstat: dircache.rmfile(endtransactionpath) result['rebootphone']=True return def savewallpapers(self, result, merge): dircache=self.DirCache(self) media_prefix=self.protocolclass.WALLPAPERPREFIX endtransactionpath=self.protocolclass.ENDTRANSACTION media=result.get('wallpapers', {}) media_index=result.get('wallpaper-index', {}) media_names=[x['name'] for x in media.values() \ if x.get('origin', None)=='images' ] index_names=[x['name'] for x in media_index.values() \ if x.get('origin', None)=='images' ] if merge: del_names=[] else: del_names=[common.stripext(x) for x in index_names if x not in media_names] gcdpattern=re.compile("[\n\r]Content-Name: +(.*?)[\n\r]") new_names=[x for x in media_names if x not in index_names] progressmax=len(del_names)+len(new_names) progresscur=0 self.log("Writing images") self.progress(progresscur, progressmax, "Writing images") for icnt in range(1,101): if not (new_names or del_names): break fname=media_prefix+`icnt` fnamegcd=media_prefix+`icnt`+".gcd" fstat=dircache.stat(fnamegcd) if del_names and fstat: # See if this file is in list of files to delete gcdcontents=dircache.readfile(fnamegcd) thisfile=gcdpattern.search(gcdcontents).groups()[0] if thisfile in del_names: self.log("Deleting image "+thisfile) self.progress(progresscur, progressmax, "Deleting image "+thisfile) progresscur+=1 dircache.rmfile(fname) dircache.rmfile(fnamegcd) del_names.remove(thisfile) fstat=False if new_names and not fstat: newname=new_names.pop() contents="" for k in media.keys(): if media[k]['name']==newname: contents=media[k]['data'] break contentsize=len(contents) if contentsize: gcdcontents=self.makegcd(newname,contentsize,self.__image_mimetype) self.log("Writing image "+newname) self.progress(progresscur, progressmax, "Deleting image "+newname) progresscur+=1 dircache.writefile(fname,contents) dircache.writefile(fnamegcd,gcdcontents) fstat=dircache.stat(endtransactionpath) self.log("Finished writing images") self.progress(progressmax, progressmax, "Finished writing images") if fstat: dircache.rmfile(endtransactionpath) result['rebootphone']=True return # Phone detection stuff----------------------------------------------------- def is_mode_brew(self): req=p_brew.memoryconfigrequest() respc=p_brew.memoryconfigresponse for baud in 0, 38400, 115200: if baud: if not self.comm.setbaudrate(baud): continue try: self.sendbrewcommand(req, respc, callsetmode=False) return True except com_phone.modeignoreerrortypes: pass return False def get_detect_data(self, res): try: req=p_brew.firmwarerequest() resp=self.sendbrewcommand(req, p_brew.data) res['firmwareresponse']=resp.bytes except com_brew.BrewBadBrewCommandException: pass def eval_detect_data(self, res): _fw=res['firmwareresponse'] if len(_fw)>47 and _fw[39:47]=='SPH-M300': # found it res['model']=Profile.phone_model res['manufacturer']=Profile.phone_manufacturer res['esn']=self.get_brew_esn() @classmethod def detectphone(_, coms, likely_ports, res, _module, _log): if not likely_ports: # cannot detect any likely ports return None for port in likely_ports: if not res.has_key(port): res[port]={ 'mode_modem': None, 'mode_brew': None, 'manufacturer': None, 'model': None, 'firmware_version': None, 'esn': None, 'firmwareresponse': None } try: if res[port]['mode_brew']==False or \ res[port]['model']: # either phone is not in BREW, or a model has already # been found, not much we can do now continue p=_module.Phone(_log, commport.CommConnection(_log, port, timeout=1)) if res[port]['mode_brew'] is None: res[port]['mode_brew']=p.is_mode_brew() if res[port]['mode_brew']: p.get_detect_data(res[port]) p.eval_detect_data(res[port]) p.comm.close() except: if __debug__: raise getphonebook=NotImplemented getcalendar=NotImplemented parentprofile=com_samsung_packet.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname WALLPAPER_WIDTH=128 WALLPAPER_HEIGHT=160 MAX_RINGTONE_BASENAME_LENGTH=19 RINGTONE_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789_ ." RINGTONE_LIMITS= { 'MAXSIZE': 250000 } phone_manufacturer='SAMSUNG' phone_model='SPH-M300MEDIA' numbertypetab=Phone.numbertypetab usbids=( ( 0x04e8, 0x6640, 2),) deviceclasses=("serial",) ringtoneorigins=('ringers',) excluded_ringtone_origins=('ringers',) excluded_wallpaper_origins=('camera', 'camera-fullsize') imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "camera")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "camera-fullsize")) def GetImageOrigins(self): return self.imageorigins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 128, 'height': 160, 'format': "JPEG"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets _supportedsyncs=( ('wallpaper', 'read', None), # all wallpaper reading ('wallpaper', 'write', None), # Image conversion needs work ('ringtone', 'read', None), # all ringtone reading ('ringtone', 'write', None), ) __audio_ext={ 'MIDI': 'mid', 'PMD': 'pmd', 'QCP': 'qcp' } def QueryAudio(self, origin, currentextension, afi): # we don't modify any of these print "afi.format=",afi.format if afi.format in ("MIDI", "PMD", "QCP"): for k,n in self.RINGTONE_LIMITS.items(): setattr(afi, k, n) return currentextension, afi d=self.RINGTONE_LIMITS.copy() d['format']='QCP' return ('qcp', fileinfo.AudioFileInfo(afi, **d)) field_color_data={ 'phonebook': { 'name': { 'first': 0, 'middle': 0, 'last': 0, 'full': 0, 'nickname': 0, 'details': 0 }, 'number': { 'type': 0, 'speeddial': 0, 'number': 5, 'details': 0 }, 'email': 0, 'address': { 'type': 0, 'company': 0, 'street': 0, 'street2': 0, 'city': 0, 'state': 0, 'postalcode': 0, 'country': 0, 'details': 0 }, 'url': 0, 'memo': 0, 'category': 0, 'wallpaper': 0, 'ringtone': 0, 'storage': 0, }, 'calendar': { 'description': False, 'location': False, 'allday': False, 'start': False, 'end': False, 'priority': False, 'alarm': False, 'vibrate': False, 'repeat': False, 'memo': False, 'category': False, 'wallpaper': False, 'ringtone': False, }, 'memo': { 'subject': False, 'date': False, 'secret': False, 'category': False, 'memo': False, }, 'todo': { 'summary': False, 'status': False, 'due_date': False, 'percent_complete': False, 'completion_date': False, 'private': False, 'priority': False, 'category': False, 'memo': False, }, } bitpim-1.0.7+dfsg1/src/phones/p_samsungscha870.py0000644001616600161660000051657110743003111017703 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to the Samsung SCH-A870 Phone""" from prototypes import * from prototypes_samsung import * from p_brew import * from p_samsungscha950 import * from common import basename # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb # Calendar stuff CAL_PATH='sch_event' CAL_INDEX_FILE_NAME=CAL_PATH+'/usr_tsk' CAL_FILE_NAME_PREFIX=CAL_PATH+'/usr_tsk_' CAL_MAX_EVENTS=100 CAL_REMINDER_OFF=0 CAL_REMINDER_ONCE=1 CAL_REMINDER_2MIN=2 CAL_REMINDER_15MIN=3 GROUP_INDEX_FILE_NAME='pb/group_name.dat' # Call log/history CL_MAX_ENTRIES=90 PB_FLG_CRINGTONE=0X4000 PIC_INDEX_HDR='0|/brew/16452/mp|\x0A' class PictureIndexEntry(BaseProtogenClass): __fields=['filename', 'name', 'pathname', 'dunno1', 'filesize'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PictureIndexEntry,self).__init__(**dict) if self.__class__ is PictureIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PictureIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PictureIndexEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_filename except: self.__field_filename=STRING(**{ 'default': '' }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_name except: self.__field_name=STRING(**{'sizeinbytes': 64, 'terminator': 0, 'default': self._name() }) self.__field_name.writetobuffer(buf) try: self.__field_pathname except: self.__field_pathname=STRING(**{'sizeinbytes': 58, 'terminator': 0, 'default': self._pathname() }) self.__field_pathname.writetobuffer(buf) try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 2, 'default': 0x0300 }) self.__field_dunno1.writetobuffer(buf) self.__field_filesize.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_name=STRING(**{'sizeinbytes': 64, 'terminator': 0, 'default': self._name() }) self.__field_name.readfrombuffer(buf) self.__field_pathname=STRING(**{'sizeinbytes': 58, 'terminator': 0, 'default': self._pathname() }) self.__field_pathname.readfrombuffer(buf) self.__field_dunno1=UINT(**{'sizeinbytes': 2, 'default': 0x0300 }) self.__field_dunno1.readfrombuffer(buf) self.__field_filesize=UINT(**{'sizeinbytes': 4}) self.__field_filesize.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_filename(self): try: self.__field_filename except: self.__field_filename=STRING(**{ 'default': '' }) return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,STRING): self.__field_filename=value else: self.__field_filename=STRING(value,**{ 'default': '' }) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=STRING(**{'sizeinbytes': 64, 'terminator': 0, 'default': self._name() }) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,STRING): self.__field_name=value else: self.__field_name=STRING(value,**{'sizeinbytes': 64, 'terminator': 0, 'default': self._name() }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_pathname(self): try: self.__field_pathname except: self.__field_pathname=STRING(**{'sizeinbytes': 58, 'terminator': 0, 'default': self._pathname() }) return self.__field_pathname.getvalue() def __setfield_pathname(self, value): if isinstance(value,STRING): self.__field_pathname=value else: self.__field_pathname=STRING(value,**{'sizeinbytes': 58, 'terminator': 0, 'default': self._pathname() }) def __delfield_pathname(self): del self.__field_pathname pathname=property(__getfield_pathname, __setfield_pathname, __delfield_pathname, None) def __getfield_dunno1(self): try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 2, 'default': 0x0300 }) return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UINT): self.__field_dunno1=value else: self.__field_dunno1=UINT(value,**{'sizeinbytes': 2, 'default': 0x0300 }) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_filesize(self): return self.__field_filesize.getvalue() def __setfield_filesize(self, value): if isinstance(value,UINT): self.__field_filesize=value else: self.__field_filesize=UINT(value,**{'sizeinbytes': 4}) def __delfield_filesize(self): del self.__field_filesize filesize=property(__getfield_filesize, __setfield_filesize, __delfield_filesize, None) def iscontainer(self): return True def containerelements(self): yield ('filename', self.__field_filename, None) yield ('name', self.__field_name, None) yield ('pathname', self.__field_pathname, None) yield ('dunno1', self.__field_dunno1, None) yield ('filesize', self.__field_filesize, None) def _name(self): return '%(base)s.%(ext)s' % { 'base': common.stripext(self.filename)[:10], 'ext': common.getext(self.filename) } def _pathname(self): global PIC_PATH return '/%(path)s/%(filename)s'%{ 'path': PIC_PATH, 'filename': self.filename } class PictureIndexFile(BaseProtogenClass): __fields=['header', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PictureIndexFile,self).__init__(**dict) if self.__class__ is PictureIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PictureIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PictureIndexFile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=STRING(**{'sizeinbytes': 128, 'terminator': 0, 'default': PIC_INDEX_HDR }) self.__field_header.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': PictureIndexEntry }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=STRING(**{'sizeinbytes': 128, 'terminator': 0, 'default': PIC_INDEX_HDR }) self.__field_header.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': PictureIndexEntry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=STRING(**{'sizeinbytes': 128, 'terminator': 0, 'default': PIC_INDEX_HDR }) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,STRING): self.__field_header=value else: self.__field_header=STRING(value,**{'sizeinbytes': 128, 'terminator': 0, 'default': PIC_INDEX_HDR }) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': PictureIndexEntry }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': PictureIndexEntry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('items', self.__field_items, None) class GroupEntry(BaseProtogenClass): __fields=['name', 'index', 'numofmembers', 'dunno1'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(GroupEntry,self).__init__(**dict) if self.__class__ is GroupEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(GroupEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(GroupEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_name.writetobuffer(buf) self.__field_index.writetobuffer(buf) self.__field_numofmembers.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_name=USTRING(**{'sizeinbytes': 65, 'encoding': ENCODING, 'terminator': 0 }) self.__field_name.readfrombuffer(buf) self.__field_index=UINT(**{'sizeinbytes': 3}) self.__field_index.readfrombuffer(buf) self.__field_numofmembers=UINT(**{'sizeinbytes': 4}) self.__field_numofmembers.readfrombuffer(buf) self.__field_dunno1=UNKNOWN(**{'sizeinbytes': 4}) self.__field_dunno1.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 65, 'encoding': ENCODING, 'terminator': 0 }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 3}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_numofmembers(self): return self.__field_numofmembers.getvalue() def __setfield_numofmembers(self, value): if isinstance(value,UINT): self.__field_numofmembers=value else: self.__field_numofmembers=UINT(value,**{'sizeinbytes': 4}) def __delfield_numofmembers(self): del self.__field_numofmembers numofmembers=property(__getfield_numofmembers, __setfield_numofmembers, __delfield_numofmembers, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UNKNOWN): self.__field_dunno1=value else: self.__field_dunno1=UNKNOWN(value,**{'sizeinbytes': 4}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def iscontainer(self): return True def containerelements(self): yield ('name', self.__field_name, None) yield ('index', self.__field_index, None) yield ('numofmembers', self.__field_numofmembers, None) yield ('dunno1', self.__field_dunno1, None) class GroupIndexFile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(GroupIndexFile,self).__init__(**dict) if self.__class__ is GroupIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(GroupIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(GroupIndexFile,kwargs) if len(args): dict2={ 'elementclass': GroupEntry } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': GroupEntry }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': GroupEntry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': GroupEntry }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': GroupEntry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class CalIndexEntry(BaseProtogenClass): __fields=['index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(CalIndexEntry,self).__init__(**dict) if self.__class__ is CalIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(CalIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(CalIndexEntry,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0 } dict2.update(kwargs) kwargs=dict2 self.__field_index=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) class CalIndexFile(BaseProtogenClass): __fields=['next_index', 'zero1', 'numofevents', 'zero2', 'numofnotes', 'zero3', 'numofactiveevents', 'zero4', 'events', 'notes', 'activeevents'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(CalIndexFile,self).__init__(**dict) if self.__class__ is CalIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(CalIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(CalIndexFile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_next_index.writetobuffer(buf) try: self.__field_zero1 except: self.__field_zero1=UNKNOWN(**{'sizeinbytes': 12, 'pad': 0 }) self.__field_zero1.writetobuffer(buf) self.__field_numofevents.writetobuffer(buf) try: self.__field_zero2 except: self.__field_zero2=UNKNOWN(**{'sizeinbytes': 6, 'pad': 0 }) self.__field_zero2.writetobuffer(buf) self.__field_numofnotes.writetobuffer(buf) try: self.__field_zero3 except: self.__field_zero3=UNKNOWN(**{'sizeinbytes': 2, 'pad': 0 }) self.__field_zero3.writetobuffer(buf) self.__field_numofactiveevents.writetobuffer(buf) try: self.__field_zero4 except: self.__field_zero4=UNKNOWN(**{'sizeinbytes': 112, 'pad': 0 }) self.__field_zero4.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{ 'elementclass': CalIndexEntry, 'length': 103, 'createdefault': True }) self.__field_events.writetobuffer(buf) try: self.__field_notes except: self.__field_notes=LIST(**{ 'elementclass': CalIndexEntry, 'length': 30, 'createdefault': True }) self.__field_notes.writetobuffer(buf) try: self.__field_activeevents except: self.__field_activeevents=LIST(**{ 'elementclass': CalIndexEntry, 'length': 324, 'createdefault': True }) self.__field_activeevents.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_next_index=UINT(**{'sizeinbytes': 2}) self.__field_next_index.readfrombuffer(buf) self.__field_zero1=UNKNOWN(**{'sizeinbytes': 12, 'pad': 0 }) self.__field_zero1.readfrombuffer(buf) self.__field_numofevents=UINT(**{'sizeinbytes': 2}) self.__field_numofevents.readfrombuffer(buf) self.__field_zero2=UNKNOWN(**{'sizeinbytes': 6, 'pad': 0 }) self.__field_zero2.readfrombuffer(buf) self.__field_numofnotes=UINT(**{'sizeinbytes': 2}) self.__field_numofnotes.readfrombuffer(buf) self.__field_zero3=UNKNOWN(**{'sizeinbytes': 2, 'pad': 0 }) self.__field_zero3.readfrombuffer(buf) self.__field_numofactiveevents=UINT(**{'sizeinbytes': 2}) self.__field_numofactiveevents.readfrombuffer(buf) self.__field_zero4=UNKNOWN(**{'sizeinbytes': 112, 'pad': 0 }) self.__field_zero4.readfrombuffer(buf) self.__field_events=LIST(**{ 'elementclass': CalIndexEntry, 'length': 103, 'createdefault': True }) self.__field_events.readfrombuffer(buf) self.__field_notes=LIST(**{ 'elementclass': CalIndexEntry, 'length': 30, 'createdefault': True }) self.__field_notes.readfrombuffer(buf) self.__field_activeevents=LIST(**{ 'elementclass': CalIndexEntry, 'length': 324, 'createdefault': True }) self.__field_activeevents.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_next_index(self): return self.__field_next_index.getvalue() def __setfield_next_index(self, value): if isinstance(value,UINT): self.__field_next_index=value else: self.__field_next_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_next_index(self): del self.__field_next_index next_index=property(__getfield_next_index, __setfield_next_index, __delfield_next_index, None) def __getfield_zero1(self): try: self.__field_zero1 except: self.__field_zero1=UNKNOWN(**{'sizeinbytes': 12, 'pad': 0 }) return self.__field_zero1.getvalue() def __setfield_zero1(self, value): if isinstance(value,UNKNOWN): self.__field_zero1=value else: self.__field_zero1=UNKNOWN(value,**{'sizeinbytes': 12, 'pad': 0 }) def __delfield_zero1(self): del self.__field_zero1 zero1=property(__getfield_zero1, __setfield_zero1, __delfield_zero1, None) def __getfield_numofevents(self): return self.__field_numofevents.getvalue() def __setfield_numofevents(self, value): if isinstance(value,UINT): self.__field_numofevents=value else: self.__field_numofevents=UINT(value,**{'sizeinbytes': 2}) def __delfield_numofevents(self): del self.__field_numofevents numofevents=property(__getfield_numofevents, __setfield_numofevents, __delfield_numofevents, None) def __getfield_zero2(self): try: self.__field_zero2 except: self.__field_zero2=UNKNOWN(**{'sizeinbytes': 6, 'pad': 0 }) return self.__field_zero2.getvalue() def __setfield_zero2(self, value): if isinstance(value,UNKNOWN): self.__field_zero2=value else: self.__field_zero2=UNKNOWN(value,**{'sizeinbytes': 6, 'pad': 0 }) def __delfield_zero2(self): del self.__field_zero2 zero2=property(__getfield_zero2, __setfield_zero2, __delfield_zero2, None) def __getfield_numofnotes(self): return self.__field_numofnotes.getvalue() def __setfield_numofnotes(self, value): if isinstance(value,UINT): self.__field_numofnotes=value else: self.__field_numofnotes=UINT(value,**{'sizeinbytes': 2}) def __delfield_numofnotes(self): del self.__field_numofnotes numofnotes=property(__getfield_numofnotes, __setfield_numofnotes, __delfield_numofnotes, None) def __getfield_zero3(self): try: self.__field_zero3 except: self.__field_zero3=UNKNOWN(**{'sizeinbytes': 2, 'pad': 0 }) return self.__field_zero3.getvalue() def __setfield_zero3(self, value): if isinstance(value,UNKNOWN): self.__field_zero3=value else: self.__field_zero3=UNKNOWN(value,**{'sizeinbytes': 2, 'pad': 0 }) def __delfield_zero3(self): del self.__field_zero3 zero3=property(__getfield_zero3, __setfield_zero3, __delfield_zero3, None) def __getfield_numofactiveevents(self): return self.__field_numofactiveevents.getvalue() def __setfield_numofactiveevents(self, value): if isinstance(value,UINT): self.__field_numofactiveevents=value else: self.__field_numofactiveevents=UINT(value,**{'sizeinbytes': 2}) def __delfield_numofactiveevents(self): del self.__field_numofactiveevents numofactiveevents=property(__getfield_numofactiveevents, __setfield_numofactiveevents, __delfield_numofactiveevents, None) def __getfield_zero4(self): try: self.__field_zero4 except: self.__field_zero4=UNKNOWN(**{'sizeinbytes': 112, 'pad': 0 }) return self.__field_zero4.getvalue() def __setfield_zero4(self, value): if isinstance(value,UNKNOWN): self.__field_zero4=value else: self.__field_zero4=UNKNOWN(value,**{'sizeinbytes': 112, 'pad': 0 }) def __delfield_zero4(self): del self.__field_zero4 zero4=property(__getfield_zero4, __setfield_zero4, __delfield_zero4, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{ 'elementclass': CalIndexEntry, 'length': 103, 'createdefault': True }) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{ 'elementclass': CalIndexEntry, 'length': 103, 'createdefault': True }) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def __getfield_notes(self): try: self.__field_notes except: self.__field_notes=LIST(**{ 'elementclass': CalIndexEntry, 'length': 30, 'createdefault': True }) return self.__field_notes.getvalue() def __setfield_notes(self, value): if isinstance(value,LIST): self.__field_notes=value else: self.__field_notes=LIST(value,**{ 'elementclass': CalIndexEntry, 'length': 30, 'createdefault': True }) def __delfield_notes(self): del self.__field_notes notes=property(__getfield_notes, __setfield_notes, __delfield_notes, None) def __getfield_activeevents(self): try: self.__field_activeevents except: self.__field_activeevents=LIST(**{ 'elementclass': CalIndexEntry, 'length': 324, 'createdefault': True }) return self.__field_activeevents.getvalue() def __setfield_activeevents(self, value): if isinstance(value,LIST): self.__field_activeevents=value else: self.__field_activeevents=LIST(value,**{ 'elementclass': CalIndexEntry, 'length': 324, 'createdefault': True }) def __delfield_activeevents(self): del self.__field_activeevents activeevents=property(__getfield_activeevents, __setfield_activeevents, __delfield_activeevents, None) def iscontainer(self): return True def containerelements(self): yield ('next_index', self.__field_next_index, None) yield ('zero1', self.__field_zero1, None) yield ('numofevents', self.__field_numofevents, None) yield ('zero2', self.__field_zero2, None) yield ('numofnotes', self.__field_numofnotes, None) yield ('zero3', self.__field_zero3, None) yield ('numofactiveevents', self.__field_numofactiveevents, None) yield ('zero4', self.__field_zero4, None) yield ('events', self.__field_events, None) yield ('notes', self.__field_notes, None) yield ('activeevents', self.__field_activeevents, None) class CalEntry(BaseProtogenClass): __fields=['titlelen', 'title', 'start', 'start2', 'exptime', 'one', 'zero1', 'alert', 'three', 'alarm', 'reminder', 'ringtoneindex', 'zero4', 'duration', 'zero5'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(CalEntry,self).__init__(**dict) if self.__class__ is CalEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(CalEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(CalEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_titlelen.writetobuffer(buf) self.__field_title.writetobuffer(buf) self.__field_start.writetobuffer(buf) try: self.__field_start2 except: self.__field_start2=DateTime(**{'sizeinbytes': 4, 'default': self.start }) self.__field_start2.writetobuffer(buf) self.__field_exptime.writetobuffer(buf) try: self.__field_one except: self.__field_one=UINT(**{'sizeinbytes': 1, 'default': 1 }) self.__field_one.writetobuffer(buf) try: self.__field_zero1 except: self.__field_zero1=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_zero1.writetobuffer(buf) self.__field_alert.writetobuffer(buf) try: self.__field_three except: self.__field_three=UINT(**{'sizeinbytes': 1, 'default': 3 }) self.__field_three.writetobuffer(buf) self.__field_alarm.writetobuffer(buf) try: self.__field_reminder except: self.__field_reminder=UINT(**{'sizeinbytes': 1, 'default': CAL_REMINDER_ONCE }) self.__field_reminder.writetobuffer(buf) self.__field_ringtoneindex.writetobuffer(buf) try: self.__field_zero4 except: self.__field_zero4=UNKNOWN(**{'sizeinbytes': 5, 'pad': 0 }) self.__field_zero4.writetobuffer(buf) self.__field_duration.writetobuffer(buf) try: self.__field_zero5 except: self.__field_zero5=UNKNOWN(**{'sizeinbytes': 7, 'pad': 0 }) self.__field_zero5.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_titlelen=UINT(**{'sizeinbytes': 2}) self.__field_titlelen.readfrombuffer(buf) self.__field_title=USTRING(**{ 'sizeinbytes': self.titlelen, 'encoding': ENCODING, 'terminator': None }) self.__field_title.readfrombuffer(buf) self.__field_start=DateTime(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_start2=DateTime(**{'sizeinbytes': 4, 'default': self.start }) self.__field_start2.readfrombuffer(buf) self.__field_exptime=ExpiringTime(**{'sizeinbytes': 4}) self.__field_exptime.readfrombuffer(buf) self.__field_one=UINT(**{'sizeinbytes': 1, 'default': 1 }) self.__field_one.readfrombuffer(buf) self.__field_zero1=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_zero1.readfrombuffer(buf) self.__field_alert=UINT(**{'sizeinbytes': 1}) self.__field_alert.readfrombuffer(buf) self.__field_three=UINT(**{'sizeinbytes': 1, 'default': 3 }) self.__field_three.readfrombuffer(buf) self.__field_alarm=UINT(**{'sizeinbytes': 1}) self.__field_alarm.readfrombuffer(buf) self.__field_reminder=UINT(**{'sizeinbytes': 1, 'default': CAL_REMINDER_ONCE }) self.__field_reminder.readfrombuffer(buf) self.__field_ringtoneindex=UINT(**{'sizeinbytes': 1}) self.__field_ringtoneindex.readfrombuffer(buf) self.__field_zero4=UNKNOWN(**{'sizeinbytes': 5, 'pad': 0 }) self.__field_zero4.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_zero5=UNKNOWN(**{'sizeinbytes': 7, 'pad': 0 }) self.__field_zero5.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_titlelen(self): return self.__field_titlelen.getvalue() def __setfield_titlelen(self, value): if isinstance(value,UINT): self.__field_titlelen=value else: self.__field_titlelen=UINT(value,**{'sizeinbytes': 2}) def __delfield_titlelen(self): del self.__field_titlelen titlelen=property(__getfield_titlelen, __setfield_titlelen, __delfield_titlelen, None) def __getfield_title(self): return self.__field_title.getvalue() def __setfield_title(self, value): if isinstance(value,USTRING): self.__field_title=value else: self.__field_title=USTRING(value,**{ 'sizeinbytes': self.titlelen, 'encoding': ENCODING, 'terminator': None }) def __delfield_title(self): del self.__field_title title=property(__getfield_title, __setfield_title, __delfield_title, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,DateTime): self.__field_start=value else: self.__field_start=DateTime(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_start2(self): try: self.__field_start2 except: self.__field_start2=DateTime(**{'sizeinbytes': 4, 'default': self.start }) return self.__field_start2.getvalue() def __setfield_start2(self, value): if isinstance(value,DateTime): self.__field_start2=value else: self.__field_start2=DateTime(value,**{'sizeinbytes': 4, 'default': self.start }) def __delfield_start2(self): del self.__field_start2 start2=property(__getfield_start2, __setfield_start2, __delfield_start2, None) def __getfield_exptime(self): return self.__field_exptime.getvalue() def __setfield_exptime(self, value): if isinstance(value,ExpiringTime): self.__field_exptime=value else: self.__field_exptime=ExpiringTime(value,**{'sizeinbytes': 4}) def __delfield_exptime(self): del self.__field_exptime exptime=property(__getfield_exptime, __setfield_exptime, __delfield_exptime, None) def __getfield_one(self): try: self.__field_one except: self.__field_one=UINT(**{'sizeinbytes': 1, 'default': 1 }) return self.__field_one.getvalue() def __setfield_one(self, value): if isinstance(value,UINT): self.__field_one=value else: self.__field_one=UINT(value,**{'sizeinbytes': 1, 'default': 1 }) def __delfield_one(self): del self.__field_one one=property(__getfield_one, __setfield_one, __delfield_one, None) def __getfield_zero1(self): try: self.__field_zero1 except: self.__field_zero1=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_zero1.getvalue() def __setfield_zero1(self, value): if isinstance(value,UINT): self.__field_zero1=value else: self.__field_zero1=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_zero1(self): del self.__field_zero1 zero1=property(__getfield_zero1, __setfield_zero1, __delfield_zero1, None) def __getfield_alert(self): return self.__field_alert.getvalue() def __setfield_alert(self, value): if isinstance(value,UINT): self.__field_alert=value else: self.__field_alert=UINT(value,**{'sizeinbytes': 1}) def __delfield_alert(self): del self.__field_alert alert=property(__getfield_alert, __setfield_alert, __delfield_alert, None) def __getfield_three(self): try: self.__field_three except: self.__field_three=UINT(**{'sizeinbytes': 1, 'default': 3 }) return self.__field_three.getvalue() def __setfield_three(self, value): if isinstance(value,UINT): self.__field_three=value else: self.__field_three=UINT(value,**{'sizeinbytes': 1, 'default': 3 }) def __delfield_three(self): del self.__field_three three=property(__getfield_three, __setfield_three, __delfield_three, None) def __getfield_alarm(self): return self.__field_alarm.getvalue() def __setfield_alarm(self, value): if isinstance(value,UINT): self.__field_alarm=value else: self.__field_alarm=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarm(self): del self.__field_alarm alarm=property(__getfield_alarm, __setfield_alarm, __delfield_alarm, None) def __getfield_reminder(self): try: self.__field_reminder except: self.__field_reminder=UINT(**{'sizeinbytes': 1, 'default': CAL_REMINDER_ONCE }) return self.__field_reminder.getvalue() def __setfield_reminder(self, value): if isinstance(value,UINT): self.__field_reminder=value else: self.__field_reminder=UINT(value,**{'sizeinbytes': 1, 'default': CAL_REMINDER_ONCE }) def __delfield_reminder(self): del self.__field_reminder reminder=property(__getfield_reminder, __setfield_reminder, __delfield_reminder, None) def __getfield_ringtoneindex(self): return self.__field_ringtoneindex.getvalue() def __setfield_ringtoneindex(self, value): if isinstance(value,UINT): self.__field_ringtoneindex=value else: self.__field_ringtoneindex=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtoneindex(self): del self.__field_ringtoneindex ringtoneindex=property(__getfield_ringtoneindex, __setfield_ringtoneindex, __delfield_ringtoneindex, None) def __getfield_zero4(self): try: self.__field_zero4 except: self.__field_zero4=UNKNOWN(**{'sizeinbytes': 5, 'pad': 0 }) return self.__field_zero4.getvalue() def __setfield_zero4(self, value): if isinstance(value,UNKNOWN): self.__field_zero4=value else: self.__field_zero4=UNKNOWN(value,**{'sizeinbytes': 5, 'pad': 0 }) def __delfield_zero4(self): del self.__field_zero4 zero4=property(__getfield_zero4, __setfield_zero4, __delfield_zero4, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_zero5(self): try: self.__field_zero5 except: self.__field_zero5=UNKNOWN(**{'sizeinbytes': 7, 'pad': 0 }) return self.__field_zero5.getvalue() def __setfield_zero5(self, value): if isinstance(value,UNKNOWN): self.__field_zero5=value else: self.__field_zero5=UNKNOWN(value,**{'sizeinbytes': 7, 'pad': 0 }) def __delfield_zero5(self): del self.__field_zero5 zero5=property(__getfield_zero5, __setfield_zero5, __delfield_zero5, None) def iscontainer(self): return True def containerelements(self): yield ('titlelen', self.__field_titlelen, None) yield ('title', self.__field_title, None) yield ('start', self.__field_start, None) yield ('start2', self.__field_start2, None) yield ('exptime', self.__field_exptime, None) yield ('one', self.__field_one, None) yield ('zero1', self.__field_zero1, None) yield ('alert', self.__field_alert, None) yield ('three', self.__field_three, None) yield ('alarm', self.__field_alarm, None) yield ('reminder', self.__field_reminder, None) yield ('ringtoneindex', self.__field_ringtoneindex, None) yield ('zero4', self.__field_zero4, None) yield ('duration', self.__field_duration, None) yield ('zero5', self.__field_zero5, None) class NotePadEntry(BaseProtogenClass): __fields=['textlen', 'text', 'creation', 'creation2', 'zero2', 'five', 'zero3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(NotePadEntry,self).__init__(**dict) if self.__class__ is NotePadEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(NotePadEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(NotePadEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_textlen.writetobuffer(buf) self.__field_text.writetobuffer(buf) self.__field_creation.writetobuffer(buf) try: self.__field_creation2 except: self.__field_creation2=DateTime(**{'sizeinbytes': 4, 'default': self.creation }) self.__field_creation2.writetobuffer(buf) try: self.__field_zero2 except: self.__field_zero2=UNKNOWN(**{'sizeinbytes': 7, 'pad': 0 }) self.__field_zero2.writetobuffer(buf) try: self.__field_five except: self.__field_five=UINT(**{'sizeinbytes': 1, 'default': 5 }) self.__field_five.writetobuffer(buf) try: self.__field_zero3 except: self.__field_zero3=UNKNOWN(**{'sizeinbytes': 19, 'pad': 0 }) self.__field_zero3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_textlen=UINT(**{'sizeinbytes': 2}) self.__field_textlen.readfrombuffer(buf) self.__field_text=USTRING(**{ 'terminator': None, 'encoding': ENCODING, 'sizeinbytes': self.textlen }) self.__field_text.readfrombuffer(buf) self.__field_creation=DateTime(**{'sizeinbytes': 4}) self.__field_creation.readfrombuffer(buf) self.__field_creation2=DateTime(**{'sizeinbytes': 4, 'default': self.creation }) self.__field_creation2.readfrombuffer(buf) self.__field_zero2=UNKNOWN(**{'sizeinbytes': 7, 'pad': 0 }) self.__field_zero2.readfrombuffer(buf) self.__field_five=UINT(**{'sizeinbytes': 1, 'default': 5 }) self.__field_five.readfrombuffer(buf) self.__field_zero3=UNKNOWN(**{'sizeinbytes': 19, 'pad': 0 }) self.__field_zero3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_textlen(self): return self.__field_textlen.getvalue() def __setfield_textlen(self, value): if isinstance(value,UINT): self.__field_textlen=value else: self.__field_textlen=UINT(value,**{'sizeinbytes': 2}) def __delfield_textlen(self): del self.__field_textlen textlen=property(__getfield_textlen, __setfield_textlen, __delfield_textlen, None) def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,USTRING): self.__field_text=value else: self.__field_text=USTRING(value,**{ 'terminator': None, 'encoding': ENCODING, 'sizeinbytes': self.textlen }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def __getfield_creation(self): return self.__field_creation.getvalue() def __setfield_creation(self, value): if isinstance(value,DateTime): self.__field_creation=value else: self.__field_creation=DateTime(value,**{'sizeinbytes': 4}) def __delfield_creation(self): del self.__field_creation creation=property(__getfield_creation, __setfield_creation, __delfield_creation, None) def __getfield_creation2(self): try: self.__field_creation2 except: self.__field_creation2=DateTime(**{'sizeinbytes': 4, 'default': self.creation }) return self.__field_creation2.getvalue() def __setfield_creation2(self, value): if isinstance(value,DateTime): self.__field_creation2=value else: self.__field_creation2=DateTime(value,**{'sizeinbytes': 4, 'default': self.creation }) def __delfield_creation2(self): del self.__field_creation2 creation2=property(__getfield_creation2, __setfield_creation2, __delfield_creation2, None) def __getfield_zero2(self): try: self.__field_zero2 except: self.__field_zero2=UNKNOWN(**{'sizeinbytes': 7, 'pad': 0 }) return self.__field_zero2.getvalue() def __setfield_zero2(self, value): if isinstance(value,UNKNOWN): self.__field_zero2=value else: self.__field_zero2=UNKNOWN(value,**{'sizeinbytes': 7, 'pad': 0 }) def __delfield_zero2(self): del self.__field_zero2 zero2=property(__getfield_zero2, __setfield_zero2, __delfield_zero2, None) def __getfield_five(self): try: self.__field_five except: self.__field_five=UINT(**{'sizeinbytes': 1, 'default': 5 }) return self.__field_five.getvalue() def __setfield_five(self, value): if isinstance(value,UINT): self.__field_five=value else: self.__field_five=UINT(value,**{'sizeinbytes': 1, 'default': 5 }) def __delfield_five(self): del self.__field_five five=property(__getfield_five, __setfield_five, __delfield_five, None) def __getfield_zero3(self): try: self.__field_zero3 except: self.__field_zero3=UNKNOWN(**{'sizeinbytes': 19, 'pad': 0 }) return self.__field_zero3.getvalue() def __setfield_zero3(self, value): if isinstance(value,UNKNOWN): self.__field_zero3=value else: self.__field_zero3=UNKNOWN(value,**{'sizeinbytes': 19, 'pad': 0 }) def __delfield_zero3(self): del self.__field_zero3 zero3=property(__getfield_zero3, __setfield_zero3, __delfield_zero3, None) def iscontainer(self): return True def containerelements(self): yield ('textlen', self.__field_textlen, None) yield ('text', self.__field_text, None) yield ('creation', self.__field_creation, None) yield ('creation2', self.__field_creation2, None) yield ('zero2', self.__field_zero2, None) yield ('five', self.__field_five, None) yield ('zero3', self.__field_zero3, None) class cl_list(BaseProtogenClass): __fields=['index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(cl_list,self).__init__(**dict) if self.__class__ is cl_list: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(cl_list,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(cl_list,kwargs) if len(args): dict2={'sizeinbytes': 2} dict2.update(kwargs) kwargs=dict2 self.__field_index=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) class cl_index_file(BaseProtogenClass): __fields=['incoming', 'outgoing', 'missed', 'dunno1', 'incoming_count', 'outgoing_count', 'missed_count'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(cl_index_file,self).__init__(**dict) if self.__class__ is cl_index_file: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(cl_index_file,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(cl_index_file,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_incoming.writetobuffer(buf) self.__field_outgoing.writetobuffer(buf) self.__field_missed.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_incoming_count.writetobuffer(buf) self.__field_outgoing_count.writetobuffer(buf) self.__field_missed_count.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_incoming=LIST(**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) self.__field_incoming.readfrombuffer(buf) self.__field_outgoing=LIST(**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) self.__field_outgoing.readfrombuffer(buf) self.__field_missed=LIST(**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) self.__field_missed.readfrombuffer(buf) self.__field_dunno1=UNKNOWN(**{'sizeinbytes': 992}) self.__field_dunno1.readfrombuffer(buf) self.__field_incoming_count=UINT(**{'sizeinbytes': 4}) self.__field_incoming_count.readfrombuffer(buf) self.__field_outgoing_count=UINT(**{'sizeinbytes': 4}) self.__field_outgoing_count.readfrombuffer(buf) self.__field_missed_count=UINT(**{'sizeinbytes': 4}) self.__field_missed_count.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_incoming(self): return self.__field_incoming.getvalue() def __setfield_incoming(self, value): if isinstance(value,LIST): self.__field_incoming=value else: self.__field_incoming=LIST(value,**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) def __delfield_incoming(self): del self.__field_incoming incoming=property(__getfield_incoming, __setfield_incoming, __delfield_incoming, None) def __getfield_outgoing(self): return self.__field_outgoing.getvalue() def __setfield_outgoing(self, value): if isinstance(value,LIST): self.__field_outgoing=value else: self.__field_outgoing=LIST(value,**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) def __delfield_outgoing(self): del self.__field_outgoing outgoing=property(__getfield_outgoing, __setfield_outgoing, __delfield_outgoing, None) def __getfield_missed(self): return self.__field_missed.getvalue() def __setfield_missed(self, value): if isinstance(value,LIST): self.__field_missed=value else: self.__field_missed=LIST(value,**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) def __delfield_missed(self): del self.__field_missed missed=property(__getfield_missed, __setfield_missed, __delfield_missed, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UNKNOWN): self.__field_dunno1=value else: self.__field_dunno1=UNKNOWN(value,**{'sizeinbytes': 992}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_incoming_count(self): return self.__field_incoming_count.getvalue() def __setfield_incoming_count(self, value): if isinstance(value,UINT): self.__field_incoming_count=value else: self.__field_incoming_count=UINT(value,**{'sizeinbytes': 4}) def __delfield_incoming_count(self): del self.__field_incoming_count incoming_count=property(__getfield_incoming_count, __setfield_incoming_count, __delfield_incoming_count, None) def __getfield_outgoing_count(self): return self.__field_outgoing_count.getvalue() def __setfield_outgoing_count(self, value): if isinstance(value,UINT): self.__field_outgoing_count=value else: self.__field_outgoing_count=UINT(value,**{'sizeinbytes': 4}) def __delfield_outgoing_count(self): del self.__field_outgoing_count outgoing_count=property(__getfield_outgoing_count, __setfield_outgoing_count, __delfield_outgoing_count, None) def __getfield_missed_count(self): return self.__field_missed_count.getvalue() def __setfield_missed_count(self, value): if isinstance(value,UINT): self.__field_missed_count=value else: self.__field_missed_count=UINT(value,**{'sizeinbytes': 4}) def __delfield_missed_count(self): del self.__field_missed_count missed_count=property(__getfield_missed_count, __setfield_missed_count, __delfield_missed_count, None) def iscontainer(self): return True def containerelements(self): yield ('incoming', self.__field_incoming, None) yield ('outgoing', self.__field_outgoing, None) yield ('missed', self.__field_missed, None) yield ('dunno1', self.__field_dunno1, None) yield ('incoming_count', self.__field_incoming_count, None) yield ('outgoing_count', self.__field_outgoing_count, None) yield ('missed_count', self.__field_missed_count, None) class cl_file(BaseProtogenClass): __fields=['cl_type', 'number', 'datetime', 'duration'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(cl_file,self).__init__(**dict) if self.__class__ is cl_file: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(cl_file,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(cl_file,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_cl_type.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_datetime.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cl_type=UINT(**{'sizeinbytes': 1}) self.__field_cl_type.readfrombuffer(buf) self.__field_number=STRING(**{'sizeinbytes': 35, 'terminator': 0 }) self.__field_number.readfrombuffer(buf) self.__field_datetime=DateTime1(**{'sizeinbytes': 4}) self.__field_datetime.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cl_type(self): return self.__field_cl_type.getvalue() def __setfield_cl_type(self, value): if isinstance(value,UINT): self.__field_cl_type=value else: self.__field_cl_type=UINT(value,**{'sizeinbytes': 1}) def __delfield_cl_type(self): del self.__field_cl_type cl_type=property(__getfield_cl_type, __setfield_cl_type, __delfield_cl_type, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,STRING): self.__field_number=value else: self.__field_number=STRING(value,**{'sizeinbytes': 35, 'terminator': 0 }) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,DateTime1): self.__field_datetime=value else: self.__field_datetime=DateTime1(value,**{'sizeinbytes': 4}) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def iscontainer(self): return True def containerelements(self): yield ('cl_type', self.__field_cl_type, None) yield ('number', self.__field_number, None) yield ('datetime', self.__field_datetime, None) yield ('duration', self.__field_duration, None) def _valid(self): global CL_VALID_TYPE return bool(self.cl_type in CL_VALID_TYPE and self.number) valid=property(fget=_valid) class NumberEntry(BaseProtogenClass): __fields=['number', 'option', 'speeddial', 'ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(NumberEntry,self).__init__(**dict) if self.__class__ is NumberEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(NumberEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(NumberEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self.__field_option.writetobuffer(buf) if self.option & PB_FLG_SPEEDDIAL: self.__field_speeddial.writetobuffer(buf) if self.option & PB_FLG_RINGTONE: self.__field_ringtone.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=STRING(**{ 'terminator': None, 'pascal': True }) self.__field_number.readfrombuffer(buf) self.__field_option=UINT(**{'sizeinbytes': 1}) self.__field_option.readfrombuffer(buf) if self.option & PB_FLG_SPEEDDIAL: self.__field_speeddial=UINT(**{'sizeinbytes': 2}) self.__field_speeddial.readfrombuffer(buf) if self.option & PB_FLG_RINGTONE: self.__field_ringtone=STRING(**{ 'terminator': None, 'pascal': True }) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,STRING): self.__field_number=value else: self.__field_number=STRING(value,**{ 'terminator': None, 'pascal': True }) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_option(self): return self.__field_option.getvalue() def __setfield_option(self, value): if isinstance(value,UINT): self.__field_option=value else: self.__field_option=UINT(value,**{'sizeinbytes': 1}) def __delfield_option(self): del self.__field_option option=property(__getfield_option, __setfield_option, __delfield_option, None) def __getfield_speeddial(self): return self.__field_speeddial.getvalue() def __setfield_speeddial(self, value): if isinstance(value,UINT): self.__field_speeddial=value else: self.__field_speeddial=UINT(value,**{'sizeinbytes': 2}) def __delfield_speeddial(self): del self.__field_speeddial speeddial=property(__getfield_speeddial, __setfield_speeddial, __delfield_speeddial, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,STRING): self.__field_ringtone=value else: self.__field_ringtone=STRING(value,**{ 'terminator': None, 'pascal': True }) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) yield ('option', self.__field_option, None) if self.option & PB_FLG_SPEEDDIAL: yield ('speeddial', self.__field_speeddial, None) if self.option & PB_FLG_RINGTONE: yield ('ringtone', self.__field_ringtone, None) class PBEntry(BaseProtogenClass): __fields=['info', 'zero1', 'name', 'email', 'email2', 'home', 'work', 'cell', 'fax', 'cell2', 'datetime', 'group', 'ringtone', 'wallpaper', 'wallpaper_range'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PBEntry,self).__init__(**dict) if self.__class__ is PBEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PBEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PBEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_info.writetobuffer(buf) try: self.__field_zero1 except: self.__field_zero1=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_zero1.writetobuffer(buf) if self.info & PB_FLG_NAME: self.__field_name.writetobuffer(buf) if self.info & PB_FLG_EMAIL: self.__field_email.writetobuffer(buf) if self.info & PB_FLG_EMAIL2: self.__field_email2.writetobuffer(buf) if self.info & PB_FLG_HOME: self.__field_home.writetobuffer(buf) if self.info & PB_FLG_WORK: self.__field_work.writetobuffer(buf) if self.info & PB_FLG_CELL: self.__field_cell.writetobuffer(buf) if self.info & PB_FLG_FAX: self.__field_fax.writetobuffer(buf) if self.info & PB_FLG_CELL2: self.__field_cell2.writetobuffer(buf) if self.info & PB_FLG_DATE: self.__field_datetime.writetobuffer(buf) if self.info & PB_FLG_GROUP: self.__field_group.writetobuffer(buf) if self.info & PB_FLG_CRINGTONE: self.__field_ringtone.writetobuffer(buf) if self.info & PB_FLG_WP: self.__field_wallpaper.writetobuffer(buf) self.__field_wallpaper_range.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_info=UINT(**{'sizeinbytes': 2}) self.__field_info.readfrombuffer(buf) self.__field_zero1=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_zero1.readfrombuffer(buf) if self.info & PB_FLG_NAME: self.__field_name=USTRING(**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) self.__field_name.readfrombuffer(buf) if self.info & PB_FLG_EMAIL: self.__field_email=USTRING(**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) self.__field_email.readfrombuffer(buf) if self.info & PB_FLG_EMAIL2: self.__field_email2=USTRING(**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) self.__field_email2.readfrombuffer(buf) if self.info & PB_FLG_HOME: self.__field_home=NumberEntry() self.__field_home.readfrombuffer(buf) if self.info & PB_FLG_WORK: self.__field_work=NumberEntry() self.__field_work.readfrombuffer(buf) if self.info & PB_FLG_CELL: self.__field_cell=NumberEntry() self.__field_cell.readfrombuffer(buf) if self.info & PB_FLG_FAX: self.__field_fax=NumberEntry() self.__field_fax.readfrombuffer(buf) if self.info & PB_FLG_CELL2: self.__field_cell2=NumberEntry() self.__field_cell2.readfrombuffer(buf) if self.info & PB_FLG_DATE: self.__field_datetime=DateTime(**{'sizeinbytes': 4}) self.__field_datetime.readfrombuffer(buf) if self.info & PB_FLG_GROUP: self.__field_group=UINT(**{'sizeinbytes': 1}) self.__field_group.readfrombuffer(buf) if self.info & PB_FLG_CRINGTONE: self.__field_ringtone=STRING(**{ 'terminator': None, 'pascal': True }) self.__field_ringtone.readfrombuffer(buf) if self.info & PB_FLG_WP: self.__field_wallpaper=STRING(**{ 'terminator': None, 'pascal': True }) self.__field_wallpaper.readfrombuffer(buf) self.__field_wallpaper_range=UINT(**{'sizeinbytes': 4}) self.__field_wallpaper_range.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_info(self): return self.__field_info.getvalue() def __setfield_info(self, value): if isinstance(value,UINT): self.__field_info=value else: self.__field_info=UINT(value,**{'sizeinbytes': 2}) def __delfield_info(self): del self.__field_info info=property(__getfield_info, __setfield_info, __delfield_info, None) def __getfield_zero1(self): try: self.__field_zero1 except: self.__field_zero1=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_zero1.getvalue() def __setfield_zero1(self, value): if isinstance(value,UINT): self.__field_zero1=value else: self.__field_zero1=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_zero1(self): del self.__field_zero1 zero1=property(__getfield_zero1, __setfield_zero1, __delfield_zero1, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def __getfield_email2(self): return self.__field_email2.getvalue() def __setfield_email2(self, value): if isinstance(value,USTRING): self.__field_email2=value else: self.__field_email2=USTRING(value,**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) def __delfield_email2(self): del self.__field_email2 email2=property(__getfield_email2, __setfield_email2, __delfield_email2, None) def __getfield_home(self): return self.__field_home.getvalue() def __setfield_home(self, value): if isinstance(value,NumberEntry): self.__field_home=value else: self.__field_home=NumberEntry(value,) def __delfield_home(self): del self.__field_home home=property(__getfield_home, __setfield_home, __delfield_home, None) def __getfield_work(self): return self.__field_work.getvalue() def __setfield_work(self, value): if isinstance(value,NumberEntry): self.__field_work=value else: self.__field_work=NumberEntry(value,) def __delfield_work(self): del self.__field_work work=property(__getfield_work, __setfield_work, __delfield_work, None) def __getfield_cell(self): return self.__field_cell.getvalue() def __setfield_cell(self, value): if isinstance(value,NumberEntry): self.__field_cell=value else: self.__field_cell=NumberEntry(value,) def __delfield_cell(self): del self.__field_cell cell=property(__getfield_cell, __setfield_cell, __delfield_cell, None) def __getfield_fax(self): return self.__field_fax.getvalue() def __setfield_fax(self, value): if isinstance(value,NumberEntry): self.__field_fax=value else: self.__field_fax=NumberEntry(value,) def __delfield_fax(self): del self.__field_fax fax=property(__getfield_fax, __setfield_fax, __delfield_fax, None) def __getfield_cell2(self): return self.__field_cell2.getvalue() def __setfield_cell2(self, value): if isinstance(value,NumberEntry): self.__field_cell2=value else: self.__field_cell2=NumberEntry(value,) def __delfield_cell2(self): del self.__field_cell2 cell2=property(__getfield_cell2, __setfield_cell2, __delfield_cell2, None) def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,DateTime): self.__field_datetime=value else: self.__field_datetime=DateTime(value,**{'sizeinbytes': 4}) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 1}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,STRING): self.__field_ringtone=value else: self.__field_ringtone=STRING(value,**{ 'terminator': None, 'pascal': True }) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,STRING): self.__field_wallpaper=value else: self.__field_wallpaper=STRING(value,**{ 'terminator': None, 'pascal': True }) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_wallpaper_range(self): return self.__field_wallpaper_range.getvalue() def __setfield_wallpaper_range(self, value): if isinstance(value,UINT): self.__field_wallpaper_range=value else: self.__field_wallpaper_range=UINT(value,**{'sizeinbytes': 4}) def __delfield_wallpaper_range(self): del self.__field_wallpaper_range wallpaper_range=property(__getfield_wallpaper_range, __setfield_wallpaper_range, __delfield_wallpaper_range, None) def iscontainer(self): return True def containerelements(self): yield ('info', self.__field_info, None) yield ('zero1', self.__field_zero1, None) if self.info & PB_FLG_NAME: yield ('name', self.__field_name, None) if self.info & PB_FLG_EMAIL: yield ('email', self.__field_email, None) if self.info & PB_FLG_EMAIL2: yield ('email2', self.__field_email2, None) if self.info & PB_FLG_HOME: yield ('home', self.__field_home, None) if self.info & PB_FLG_WORK: yield ('work', self.__field_work, None) if self.info & PB_FLG_CELL: yield ('cell', self.__field_cell, None) if self.info & PB_FLG_FAX: yield ('fax', self.__field_fax, None) if self.info & PB_FLG_CELL2: yield ('cell2', self.__field_cell2, None) if self.info & PB_FLG_DATE: yield ('datetime', self.__field_datetime, None) if self.info & PB_FLG_GROUP: yield ('group', self.__field_group, None) if self.info & PB_FLG_CRINGTONE: yield ('ringtone', self.__field_ringtone, None) if self.info & PB_FLG_WP: yield ('wallpaper', self.__field_wallpaper, None) yield ('wallpaper_range', self.__field_wallpaper_range, None) class ss_number_entry(BaseProtogenClass): __fields=['number', 'speeddial', 'primary', 'zero', 'ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_number_entry,self).__init__(**dict) if self.__class__ is ss_number_entry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_number_entry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_number_entry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_number except: self.__field_number=STRING(**{ 'terminator': 0, 'default': '', 'maxsizeinbytes': PB_MAX_NUMBER_LEN, 'raiseontruncate': False }) self.__field_number.writetobuffer(buf) try: self.__field_speeddial except: self.__field_speeddial=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_speeddial.writetobuffer(buf) try: self.__field_primary except: self.__field_primary=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_primary.writetobuffer(buf) try: self.__field_zero except: self.__field_zero=STRING(**{'sizeinbytes': 8, 'pad': 0, 'default': '' }) self.__field_zero.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=STRING(**{ 'terminator': 0, 'default': '' }) self.__field_ringtone.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=STRING(**{ 'terminator': 0, 'default': '', 'maxsizeinbytes': PB_MAX_NUMBER_LEN, 'raiseontruncate': False }) self.__field_number.readfrombuffer(buf) self.__field_speeddial=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_speeddial.readfrombuffer(buf) self.__field_primary=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_primary.readfrombuffer(buf) self.__field_zero=STRING(**{'sizeinbytes': 8, 'pad': 0, 'default': '' }) self.__field_zero.readfrombuffer(buf) self.__field_ringtone=STRING(**{ 'terminator': 0, 'default': '' }) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): try: self.__field_number except: self.__field_number=STRING(**{ 'terminator': 0, 'default': '', 'maxsizeinbytes': PB_MAX_NUMBER_LEN, 'raiseontruncate': False }) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,STRING): self.__field_number=value else: self.__field_number=STRING(value,**{ 'terminator': 0, 'default': '', 'maxsizeinbytes': PB_MAX_NUMBER_LEN, 'raiseontruncate': False }) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_speeddial(self): try: self.__field_speeddial except: self.__field_speeddial=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_speeddial.getvalue() def __setfield_speeddial(self, value): if isinstance(value,UINT): self.__field_speeddial=value else: self.__field_speeddial=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_speeddial(self): del self.__field_speeddial speeddial=property(__getfield_speeddial, __setfield_speeddial, __delfield_speeddial, None) def __getfield_primary(self): try: self.__field_primary except: self.__field_primary=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_primary.getvalue() def __setfield_primary(self, value): if isinstance(value,UINT): self.__field_primary=value else: self.__field_primary=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_primary(self): del self.__field_primary primary=property(__getfield_primary, __setfield_primary, __delfield_primary, None) def __getfield_zero(self): try: self.__field_zero except: self.__field_zero=STRING(**{'sizeinbytes': 8, 'pad': 0, 'default': '' }) return self.__field_zero.getvalue() def __setfield_zero(self, value): if isinstance(value,STRING): self.__field_zero=value else: self.__field_zero=STRING(value,**{'sizeinbytes': 8, 'pad': 0, 'default': '' }) def __delfield_zero(self): del self.__field_zero zero=property(__getfield_zero, __setfield_zero, __delfield_zero, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=STRING(**{ 'terminator': 0, 'default': '' }) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,STRING): self.__field_ringtone=value else: self.__field_ringtone=STRING(value,**{ 'terminator': 0, 'default': '' }) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) yield ('speeddial', self.__field_speeddial, None) yield ('primary', self.__field_primary, None) yield ('zero', self.__field_zero, None) yield ('ringtone', self.__field_ringtone, None) class ss_pb_entry(BaseProtogenClass): __fields=['name', 'email', 'email2', 'zero1', 'ringtone', 'wallpaper', 'zero2', 'home', 'work', 'cell', 'dummy', 'fax', 'cell2', 'zero3', 'group', 'zero4'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_entry,self).__init__(**dict) if self.__class__ is ss_pb_entry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_entry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_entry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_name.writetobuffer(buf) try: self.__field_email except: self.__field_email=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) self.__field_email.writetobuffer(buf) try: self.__field_email2 except: self.__field_email2=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) self.__field_email2.writetobuffer(buf) try: self.__field_zero1 except: self.__field_zero1=UINT(**{'sizeinbytes': 3, 'default': 0 }) self.__field_zero1.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=STRING(**{ 'terminator': 0, 'default': '' }) self.__field_ringtone.writetobuffer(buf) try: self.__field_wallpaper except: self.__field_wallpaper=STRING(**{ 'terminator': 0, 'default': '' }) self.__field_wallpaper.writetobuffer(buf) try: self.__field_zero2 except: self.__field_zero2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_zero2.writetobuffer(buf) try: self.__field_home except: self.__field_home=ss_number_entry() self.__field_home.writetobuffer(buf) try: self.__field_work except: self.__field_work=ss_number_entry() self.__field_work.writetobuffer(buf) try: self.__field_cell except: self.__field_cell=ss_number_entry() self.__field_cell.writetobuffer(buf) try: self.__field_dummy except: self.__field_dummy=ss_number_entry() self.__field_dummy.writetobuffer(buf) try: self.__field_fax except: self.__field_fax=ss_number_entry() self.__field_fax.writetobuffer(buf) try: self.__field_cell2 except: self.__field_cell2=ss_number_entry() self.__field_cell2.writetobuffer(buf) try: self.__field_zero3 except: self.__field_zero3=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_zero3.writetobuffer(buf) try: self.__field_group except: self.__field_group=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_group.writetobuffer(buf) try: self.__field_zero4 except: self.__field_zero4=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_zero4.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_name=USTRING(**{ 'terminator': 0, 'maxsizeinbytes': PB_MAX_NAME_LEN, 'encoding': ENCODING, 'raiseontruncate': False }) self.__field_name.readfrombuffer(buf) self.__field_email=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) self.__field_email.readfrombuffer(buf) self.__field_email2=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) self.__field_email2.readfrombuffer(buf) self.__field_zero1=UINT(**{'sizeinbytes': 3, 'default': 0 }) self.__field_zero1.readfrombuffer(buf) self.__field_ringtone=STRING(**{ 'terminator': 0, 'default': '' }) self.__field_ringtone.readfrombuffer(buf) self.__field_wallpaper=STRING(**{ 'terminator': 0, 'default': '' }) self.__field_wallpaper.readfrombuffer(buf) self.__field_zero2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_zero2.readfrombuffer(buf) self.__field_home=ss_number_entry() self.__field_home.readfrombuffer(buf) self.__field_work=ss_number_entry() self.__field_work.readfrombuffer(buf) self.__field_cell=ss_number_entry() self.__field_cell.readfrombuffer(buf) self.__field_dummy=ss_number_entry() self.__field_dummy.readfrombuffer(buf) self.__field_fax=ss_number_entry() self.__field_fax.readfrombuffer(buf) self.__field_cell2=ss_number_entry() self.__field_cell2.readfrombuffer(buf) self.__field_zero3=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_zero3.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_group.readfrombuffer(buf) self.__field_zero4=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_zero4.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{ 'terminator': 0, 'maxsizeinbytes': PB_MAX_NAME_LEN, 'encoding': ENCODING, 'raiseontruncate': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_email(self): try: self.__field_email except: self.__field_email=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def __getfield_email2(self): try: self.__field_email2 except: self.__field_email2=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) return self.__field_email2.getvalue() def __setfield_email2(self, value): if isinstance(value,USTRING): self.__field_email2=value else: self.__field_email2=USTRING(value,**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) def __delfield_email2(self): del self.__field_email2 email2=property(__getfield_email2, __setfield_email2, __delfield_email2, None) def __getfield_zero1(self): try: self.__field_zero1 except: self.__field_zero1=UINT(**{'sizeinbytes': 3, 'default': 0 }) return self.__field_zero1.getvalue() def __setfield_zero1(self, value): if isinstance(value,UINT): self.__field_zero1=value else: self.__field_zero1=UINT(value,**{'sizeinbytes': 3, 'default': 0 }) def __delfield_zero1(self): del self.__field_zero1 zero1=property(__getfield_zero1, __setfield_zero1, __delfield_zero1, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=STRING(**{ 'terminator': 0, 'default': '' }) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,STRING): self.__field_ringtone=value else: self.__field_ringtone=STRING(value,**{ 'terminator': 0, 'default': '' }) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_wallpaper(self): try: self.__field_wallpaper except: self.__field_wallpaper=STRING(**{ 'terminator': 0, 'default': '' }) return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,STRING): self.__field_wallpaper=value else: self.__field_wallpaper=STRING(value,**{ 'terminator': 0, 'default': '' }) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_zero2(self): try: self.__field_zero2 except: self.__field_zero2=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_zero2.getvalue() def __setfield_zero2(self, value): if isinstance(value,UINT): self.__field_zero2=value else: self.__field_zero2=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_zero2(self): del self.__field_zero2 zero2=property(__getfield_zero2, __setfield_zero2, __delfield_zero2, None) def __getfield_home(self): try: self.__field_home except: self.__field_home=ss_number_entry() return self.__field_home.getvalue() def __setfield_home(self, value): if isinstance(value,ss_number_entry): self.__field_home=value else: self.__field_home=ss_number_entry(value,) def __delfield_home(self): del self.__field_home home=property(__getfield_home, __setfield_home, __delfield_home, None) def __getfield_work(self): try: self.__field_work except: self.__field_work=ss_number_entry() return self.__field_work.getvalue() def __setfield_work(self, value): if isinstance(value,ss_number_entry): self.__field_work=value else: self.__field_work=ss_number_entry(value,) def __delfield_work(self): del self.__field_work work=property(__getfield_work, __setfield_work, __delfield_work, None) def __getfield_cell(self): try: self.__field_cell except: self.__field_cell=ss_number_entry() return self.__field_cell.getvalue() def __setfield_cell(self, value): if isinstance(value,ss_number_entry): self.__field_cell=value else: self.__field_cell=ss_number_entry(value,) def __delfield_cell(self): del self.__field_cell cell=property(__getfield_cell, __setfield_cell, __delfield_cell, None) def __getfield_dummy(self): try: self.__field_dummy except: self.__field_dummy=ss_number_entry() return self.__field_dummy.getvalue() def __setfield_dummy(self, value): if isinstance(value,ss_number_entry): self.__field_dummy=value else: self.__field_dummy=ss_number_entry(value,) def __delfield_dummy(self): del self.__field_dummy dummy=property(__getfield_dummy, __setfield_dummy, __delfield_dummy, None) def __getfield_fax(self): try: self.__field_fax except: self.__field_fax=ss_number_entry() return self.__field_fax.getvalue() def __setfield_fax(self, value): if isinstance(value,ss_number_entry): self.__field_fax=value else: self.__field_fax=ss_number_entry(value,) def __delfield_fax(self): del self.__field_fax fax=property(__getfield_fax, __setfield_fax, __delfield_fax, None) def __getfield_cell2(self): try: self.__field_cell2 except: self.__field_cell2=ss_number_entry() return self.__field_cell2.getvalue() def __setfield_cell2(self, value): if isinstance(value,ss_number_entry): self.__field_cell2=value else: self.__field_cell2=ss_number_entry(value,) def __delfield_cell2(self): del self.__field_cell2 cell2=property(__getfield_cell2, __setfield_cell2, __delfield_cell2, None) def __getfield_zero3(self): try: self.__field_zero3 except: self.__field_zero3=UINT(**{'sizeinbytes': 4, 'default': 0 }) return self.__field_zero3.getvalue() def __setfield_zero3(self, value): if isinstance(value,UINT): self.__field_zero3=value else: self.__field_zero3=UINT(value,**{'sizeinbytes': 4, 'default': 0 }) def __delfield_zero3(self): del self.__field_zero3 zero3=property(__getfield_zero3, __setfield_zero3, __delfield_zero3, None) def __getfield_group(self): try: self.__field_group except: self.__field_group=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_zero4(self): try: self.__field_zero4 except: self.__field_zero4=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_zero4.getvalue() def __setfield_zero4(self, value): if isinstance(value,UINT): self.__field_zero4=value else: self.__field_zero4=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_zero4(self): del self.__field_zero4 zero4=property(__getfield_zero4, __setfield_zero4, __delfield_zero4, None) def iscontainer(self): return True def containerelements(self): yield ('name', self.__field_name, None) yield ('email', self.__field_email, None) yield ('email2', self.__field_email2, None) yield ('zero1', self.__field_zero1, None) yield ('ringtone', self.__field_ringtone, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('zero2', self.__field_zero2, None) yield ('home', self.__field_home, None) yield ('work', self.__field_work, None) yield ('cell', self.__field_cell, None) yield ('dummy', self.__field_dummy, None) yield ('fax', self.__field_fax, None) yield ('cell2', self.__field_cell2, None) yield ('zero3', self.__field_zero3, None) yield ('group', self.__field_group, None) yield ('zero4', self.__field_zero4, None) class ss_pb_write_req(BaseProtogenClass): __fields=['hdr', 'zero', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_write_req,self).__init__(**dict) if self.__class__ is ss_pb_write_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_write_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_write_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_WRITE }) self.__field_hdr.writetobuffer(buf) try: self.__field_zero except: self.__field_zero=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_zero.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_WRITE }) self.__field_hdr.readfrombuffer(buf) self.__field_zero=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_zero.readfrombuffer(buf) self.__field_entry=ss_pb_entry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_WRITE }) return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,**{ 'command': SS_CMD_PB_WRITE }) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def __getfield_zero(self): try: self.__field_zero except: self.__field_zero=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_zero.getvalue() def __setfield_zero(self, value): if isinstance(value,UINT): self.__field_zero=value else: self.__field_zero=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_zero(self): del self.__field_zero zero=property(__getfield_zero, __setfield_zero, __delfield_zero, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,ss_pb_entry): self.__field_entry=value else: self.__field_entry=ss_pb_entry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) yield ('zero', self.__field_zero, None) yield ('entry', self.__field_entry, None) class ss_pb_write_resp(BaseProtogenClass): __fields=['hdr', 'zero', 'index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_write_resp,self).__init__(**dict) if self.__class__ is ss_pb_write_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_write_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_write_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_hdr.writetobuffer(buf) self.__field_zero.writetobuffer(buf) self.__field_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr() self.__field_hdr.readfrombuffer(buf) self.__field_zero=UINT(**{'sizeinbytes': 1}) self.__field_zero.readfrombuffer(buf) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def __getfield_zero(self): return self.__field_zero.getvalue() def __setfield_zero(self, value): if isinstance(value,UINT): self.__field_zero=value else: self.__field_zero=UINT(value,**{'sizeinbytes': 1}) def __delfield_zero(self): del self.__field_zero zero=property(__getfield_zero, __setfield_zero, __delfield_zero, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) yield ('zero', self.__field_zero, None) yield ('index', self.__field_index, None) class pBOOL(BaseProtogenClass): __fields=['value'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pBOOL,self).__init__(**dict) if self.__class__ is pBOOL: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pBOOL,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pBOOL,kwargs) if len(args): dict2={'sizeinbytes': 'P'} dict2.update(kwargs) kwargs=dict2 self.__field_value=BOOL(*args,**dict2) # Make all P fields that haven't already been constructed try: self.__field_value except: self.__field_value=BOOL() def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self._bufferendoffset=buf.getcurrentoffset() def __getfield_value(self): return self.__field_value.getvalue() def __setfield_value(self, value): if isinstance(value,BOOL): self.__field_value=value else: self.__field_value=BOOL(value,) def __delfield_value(self): del self.__field_value value=property(__getfield_value, __setfield_value, __delfield_value, None) def iscontainer(self): return True def containerelements(self): yield ('value', self.__field_value, None) class sms_header(BaseProtogenClass): __fields=['index', 'msg_len', 'callback_len', 'bitmap1', 'bitmap2', 'dunno1', 'body_len', 'file_type', 'msg_type', 'enhance_delivery', 'is_txt_msg', 'in_msg', 'sent_msg', 'draft_msg', 'body'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_header,self).__init__(**dict) if self.__class__ is sms_header: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_header,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_header,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_msg_len.writetobuffer(buf) self.__field_callback_len.writetobuffer(buf) self.__field_bitmap1.writetobuffer(buf) self.__field_bitmap2.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_body_len.writetobuffer(buf) self.__field_file_type.writetobuffer(buf) self.__field_msg_type.writetobuffer(buf) self.__field_enhance_delivery.writetobuffer(buf) self.__field_is_txt_msg.writetobuffer(buf) self.__field_in_msg.writetobuffer(buf) self.__field_sent_msg.writetobuffer(buf) self.__field_draft_msg.writetobuffer(buf) if self.is_txt_msg.value: self.__field_body.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self.__field_msg_len=UINT(**{'sizeinbytes': 1}) self.__field_msg_len.readfrombuffer(buf) self.__field_callback_len=UINT(**{'sizeinbytes': 1}) self.__field_callback_len.readfrombuffer(buf) self.__field_bitmap1=UINT(**{'sizeinbytes': 1}) self.__field_bitmap1.readfrombuffer(buf) self.__field_bitmap2=UINT(**{'sizeinbytes': 1}) self.__field_bitmap2.readfrombuffer(buf) self.__field_dunno1=UNKNOWN(**{'sizeinbytes': 6}) self.__field_dunno1.readfrombuffer(buf) self.__field_body_len=UINT(**{'sizeinbytes': 2}) self.__field_body_len.readfrombuffer(buf) self.__field_file_type=UINT(**{'sizeinbytes': 2}) self.__field_file_type.readfrombuffer(buf) self.__field_msg_type=UINT(**{'sizeinbytes': 1}) self.__field_msg_type.readfrombuffer(buf) self.__field_enhance_delivery=UINT(**{'sizeinbytes': 1}) self.__field_enhance_delivery.readfrombuffer(buf) self.__field_is_txt_msg=pBOOL(**{ 'value': self.file_type==SMS_TXT_TYPE and self.msg_type in SMS_VALID_TYPE }) self.__field_is_txt_msg.readfrombuffer(buf) self.__field_in_msg=pBOOL(**{ 'value': self.msg_type==SMS_TYPE_IN }) self.__field_in_msg.readfrombuffer(buf) self.__field_sent_msg=pBOOL(**{ 'value': self.msg_type==SMS_TYPE_SENT }) self.__field_sent_msg.readfrombuffer(buf) self.__field_draft_msg=pBOOL(**{ 'value': self.msg_type==SMS_TYPE_DRAFT }) self.__field_draft_msg.readfrombuffer(buf) if self.is_txt_msg.value: self.__field_body=sms_body(**{ 'msg_len': self.msg_len, 'has_callback': self.bitmap2 & SMS_FLG2_CALLBACK, 'has_priority': self.bitmap2 & SMS_FLG2_PRIORITY, 'has_1byte': self.bitmap2 & SMS_FLG2_SOMETHING, 'has_1byte2': self.bitmap2 & SMS_FLG2_MSG, 'has_40bytes': self.bitmap1 & SMS_FLG1_HAS40 }) self.__field_body.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_msg_len(self): return self.__field_msg_len.getvalue() def __setfield_msg_len(self, value): if isinstance(value,UINT): self.__field_msg_len=value else: self.__field_msg_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_msg_len(self): del self.__field_msg_len msg_len=property(__getfield_msg_len, __setfield_msg_len, __delfield_msg_len, None) def __getfield_callback_len(self): return self.__field_callback_len.getvalue() def __setfield_callback_len(self, value): if isinstance(value,UINT): self.__field_callback_len=value else: self.__field_callback_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_len(self): del self.__field_callback_len callback_len=property(__getfield_callback_len, __setfield_callback_len, __delfield_callback_len, None) def __getfield_bitmap1(self): return self.__field_bitmap1.getvalue() def __setfield_bitmap1(self, value): if isinstance(value,UINT): self.__field_bitmap1=value else: self.__field_bitmap1=UINT(value,**{'sizeinbytes': 1}) def __delfield_bitmap1(self): del self.__field_bitmap1 bitmap1=property(__getfield_bitmap1, __setfield_bitmap1, __delfield_bitmap1, None) def __getfield_bitmap2(self): return self.__field_bitmap2.getvalue() def __setfield_bitmap2(self, value): if isinstance(value,UINT): self.__field_bitmap2=value else: self.__field_bitmap2=UINT(value,**{'sizeinbytes': 1}) def __delfield_bitmap2(self): del self.__field_bitmap2 bitmap2=property(__getfield_bitmap2, __setfield_bitmap2, __delfield_bitmap2, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UNKNOWN): self.__field_dunno1=value else: self.__field_dunno1=UNKNOWN(value,**{'sizeinbytes': 6}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_body_len(self): return self.__field_body_len.getvalue() def __setfield_body_len(self, value): if isinstance(value,UINT): self.__field_body_len=value else: self.__field_body_len=UINT(value,**{'sizeinbytes': 2}) def __delfield_body_len(self): del self.__field_body_len body_len=property(__getfield_body_len, __setfield_body_len, __delfield_body_len, None) def __getfield_file_type(self): return self.__field_file_type.getvalue() def __setfield_file_type(self, value): if isinstance(value,UINT): self.__field_file_type=value else: self.__field_file_type=UINT(value,**{'sizeinbytes': 2}) def __delfield_file_type(self): del self.__field_file_type file_type=property(__getfield_file_type, __setfield_file_type, __delfield_file_type, None) def __getfield_msg_type(self): return self.__field_msg_type.getvalue() def __setfield_msg_type(self, value): if isinstance(value,UINT): self.__field_msg_type=value else: self.__field_msg_type=UINT(value,**{'sizeinbytes': 1}) def __delfield_msg_type(self): del self.__field_msg_type msg_type=property(__getfield_msg_type, __setfield_msg_type, __delfield_msg_type, None) def __getfield_enhance_delivery(self): return self.__field_enhance_delivery.getvalue() def __setfield_enhance_delivery(self, value): if isinstance(value,UINT): self.__field_enhance_delivery=value else: self.__field_enhance_delivery=UINT(value,**{'sizeinbytes': 1}) def __delfield_enhance_delivery(self): del self.__field_enhance_delivery enhance_delivery=property(__getfield_enhance_delivery, __setfield_enhance_delivery, __delfield_enhance_delivery, None) def __getfield_is_txt_msg(self): return self.__field_is_txt_msg.getvalue() def __setfield_is_txt_msg(self, value): if isinstance(value,pBOOL): self.__field_is_txt_msg=value else: self.__field_is_txt_msg=pBOOL(value,**{ 'value': self.file_type==SMS_TXT_TYPE and self.msg_type in SMS_VALID_TYPE }) def __delfield_is_txt_msg(self): del self.__field_is_txt_msg is_txt_msg=property(__getfield_is_txt_msg, __setfield_is_txt_msg, __delfield_is_txt_msg, None) def __getfield_in_msg(self): return self.__field_in_msg.getvalue() def __setfield_in_msg(self, value): if isinstance(value,pBOOL): self.__field_in_msg=value else: self.__field_in_msg=pBOOL(value,**{ 'value': self.msg_type==SMS_TYPE_IN }) def __delfield_in_msg(self): del self.__field_in_msg in_msg=property(__getfield_in_msg, __setfield_in_msg, __delfield_in_msg, None) def __getfield_sent_msg(self): return self.__field_sent_msg.getvalue() def __setfield_sent_msg(self, value): if isinstance(value,pBOOL): self.__field_sent_msg=value else: self.__field_sent_msg=pBOOL(value,**{ 'value': self.msg_type==SMS_TYPE_SENT }) def __delfield_sent_msg(self): del self.__field_sent_msg sent_msg=property(__getfield_sent_msg, __setfield_sent_msg, __delfield_sent_msg, None) def __getfield_draft_msg(self): return self.__field_draft_msg.getvalue() def __setfield_draft_msg(self, value): if isinstance(value,pBOOL): self.__field_draft_msg=value else: self.__field_draft_msg=pBOOL(value,**{ 'value': self.msg_type==SMS_TYPE_DRAFT }) def __delfield_draft_msg(self): del self.__field_draft_msg draft_msg=property(__getfield_draft_msg, __setfield_draft_msg, __delfield_draft_msg, None) def __getfield_body(self): return self.__field_body.getvalue() def __setfield_body(self, value): if isinstance(value,sms_body): self.__field_body=value else: self.__field_body=sms_body(value,**{ 'msg_len': self.msg_len, 'has_callback': self.bitmap2 & SMS_FLG2_CALLBACK, 'has_priority': self.bitmap2 & SMS_FLG2_PRIORITY, 'has_1byte': self.bitmap2 & SMS_FLG2_SOMETHING, 'has_1byte2': self.bitmap2 & SMS_FLG2_MSG, 'has_40bytes': self.bitmap1 & SMS_FLG1_HAS40 }) def __delfield_body(self): del self.__field_body body=property(__getfield_body, __setfield_body, __delfield_body, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('msg_len', self.__field_msg_len, None) yield ('callback_len', self.__field_callback_len, None) yield ('bitmap1', self.__field_bitmap1, None) yield ('bitmap2', self.__field_bitmap2, None) yield ('dunno1', self.__field_dunno1, None) yield ('body_len', self.__field_body_len, None) yield ('file_type', self.__field_file_type, None) yield ('msg_type', self.__field_msg_type, None) yield ('enhance_delivery', self.__field_enhance_delivery, None) yield ('is_txt_msg', self.__field_is_txt_msg, None) yield ('in_msg', self.__field_in_msg, None) yield ('sent_msg', self.__field_sent_msg, None) yield ('draft_msg', self.__field_draft_msg, None) if self.is_txt_msg.value: yield ('body', self.__field_body, None) class sms_msg_stat_list(BaseProtogenClass): __fields=['status'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_msg_stat_list,self).__init__(**dict) if self.__class__ is sms_msg_stat_list: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_msg_stat_list,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_msg_stat_list,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_status=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_status.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def iscontainer(self): return True def containerelements(self): yield ('status', self.__field_status, None) class sms_datetime_list(BaseProtogenClass): __fields=['datetime', 'dunno'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_datetime_list,self).__init__(**dict) if self.__class__ is sms_datetime_list: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_datetime_list,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_datetime_list,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_datetime.writetobuffer(buf) self.__field_dunno.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_datetime=DateTime1(**{'sizeinbytes': 4}) self.__field_datetime.readfrombuffer(buf) self.__field_dunno=UNKNOWN(**{'sizeinbytes': 4}) self.__field_dunno.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,DateTime1): self.__field_datetime=value else: self.__field_datetime=DateTime1(value,**{'sizeinbytes': 4}) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def __getfield_dunno(self): return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UNKNOWN): self.__field_dunno=value else: self.__field_dunno=UNKNOWN(value,**{'sizeinbytes': 4}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def iscontainer(self): return True def containerelements(self): yield ('datetime', self.__field_datetime, None) yield ('dunno', self.__field_dunno, None) class sms_delivered_datetime(BaseProtogenClass): __fields=['datetime', 'dunno'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_delivered_datetime,self).__init__(**dict) if self.__class__ is sms_delivered_datetime: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_delivered_datetime,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_delivered_datetime,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_datetime.writetobuffer(buf) self.__field_dunno.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_datetime=LIST(**{ 'elementclass': sms_datetime_list, 'length': 10 }) self.__field_datetime.readfrombuffer(buf) self.__field_dunno=UNKNOWN(**{'sizeinbytes': 20}) self.__field_dunno.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,LIST): self.__field_datetime=value else: self.__field_datetime=LIST(value,**{ 'elementclass': sms_datetime_list, 'length': 10 }) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def __getfield_dunno(self): return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UNKNOWN): self.__field_dunno=value else: self.__field_dunno=UNKNOWN(value,**{'sizeinbytes': 20}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def iscontainer(self): return True def containerelements(self): yield ('datetime', self.__field_datetime, None) yield ('dunno', self.__field_dunno, None) class sms_body(BaseProtogenClass): __fields=['msg_len', 'has_callback', 'has_priority', 'has_1byte', 'has_1byte2', 'has_40bytes', 'dunno1', 'msg', 'dunno2', 'callback_len', 'callback', 'priority', 'dunno3', 'dunno4', 'datetime', 'dunno5', 'addr_len0', 'addr_len1', 'addr_len2', 'addr_len3', 'addr_len4', 'addr_len5', 'addr_len6', 'addr_len7', 'addr_len8', 'addr_len9', 'addr0', 'addr1', 'addr2', 'addr3', 'addr4', 'addr5', 'addr6', 'addr7', 'addr8', 'addr9', 'dunno6', 'dunno7', 'dunno8', 'dunno9', 'msg_stat'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_body,self).__init__(**dict) if self.__class__ is sms_body: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_body,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_body,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_msg_len except: self.__field_msg_len=UINT() try: self.__field_has_callback except: self.__field_has_callback=BOOL(**{ 'default': True }) try: self.__field_has_priority except: self.__field_has_priority=BOOL(**{ 'default': False }) try: self.__field_has_1byte except: self.__field_has_1byte=BOOL(**{ 'default': False }) try: self.__field_has_1byte2 except: self.__field_has_1byte2=BOOL(**{ 'default': True }) try: self.__field_has_40bytes except: self.__field_has_40bytes=BOOL(**{ 'default': False }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_dunno1.writetobuffer(buf) self.__field_msg.writetobuffer(buf) if self.has_callback: self.__field_dunno2.writetobuffer(buf) self.__field_callback_len.writetobuffer(buf) self.__field_callback.writetobuffer(buf) if self.has_priority: self.__field_priority.writetobuffer(buf) if self.has_1byte: self.__field_dunno3.writetobuffer(buf) self.__field_dunno4.writetobuffer(buf) self.__field_datetime.writetobuffer(buf) self.__field_dunno5.writetobuffer(buf) self.__field_addr_len0.writetobuffer(buf) self.__field_addr_len1.writetobuffer(buf) self.__field_addr_len2.writetobuffer(buf) self.__field_addr_len3.writetobuffer(buf) self.__field_addr_len4.writetobuffer(buf) self.__field_addr_len5.writetobuffer(buf) self.__field_addr_len6.writetobuffer(buf) self.__field_addr_len7.writetobuffer(buf) self.__field_addr_len8.writetobuffer(buf) self.__field_addr_len9.writetobuffer(buf) if self.addr_len0: self.__field_addr0.writetobuffer(buf) if self.addr_len1: self.__field_addr1.writetobuffer(buf) if self.addr_len2: self.__field_addr2.writetobuffer(buf) if self.addr_len3: self.__field_addr3.writetobuffer(buf) if self.addr_len4: self.__field_addr4.writetobuffer(buf) if self.addr_len5: self.__field_addr5.writetobuffer(buf) if self.addr_len6: self.__field_addr6.writetobuffer(buf) if self.addr_len7: self.__field_addr7.writetobuffer(buf) if self.addr_len8: self.__field_addr8.writetobuffer(buf) if self.addr_len9: self.__field_addr9.writetobuffer(buf) if not self.has_1byte and self.has_1byte2: self.__field_dunno6.writetobuffer(buf) if self.has_1byte2: self.__field_dunno7.writetobuffer(buf) self.__field_dunno8.writetobuffer(buf) if self.has_40bytes: self.__field_dunno9.writetobuffer(buf) self.__field_msg_stat.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_dunno1=UNKNOWN(**{'sizeinbytes': 50}) self.__field_dunno1.readfrombuffer(buf) self.__field_msg=USTRING(**{ 'sizeinbytes': self.msg_len, 'encoding': ENCODING, 'terminator': None }) self.__field_msg.readfrombuffer(buf) if self.has_callback: self.__field_dunno2=UNKNOWN(**{'sizeinbytes': 3}) self.__field_dunno2.readfrombuffer(buf) self.__field_callback_len=UINT(**{'sizeinbytes': 1}) self.__field_callback_len.readfrombuffer(buf) self.__field_callback=STRING(**{ 'sizeinbytes': self.callback_len, 'terminator': None }) self.__field_callback.readfrombuffer(buf) if self.has_priority: self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) if self.has_1byte: self.__field_dunno3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_dunno3.readfrombuffer(buf) self.__field_dunno4=UNKNOWN(**{'sizeinbytes': 40}) self.__field_dunno4.readfrombuffer(buf) self.__field_datetime=DateTime1(**{'sizeinbytes': 4}) self.__field_datetime.readfrombuffer(buf) self.__field_dunno5=UNKNOWN(**{'sizeinbytes': 13}) self.__field_dunno5.readfrombuffer(buf) self.__field_addr_len0=UINT(**{'sizeinbytes': 1}) self.__field_addr_len0.readfrombuffer(buf) self.__field_addr_len1=UINT(**{'sizeinbytes': 1}) self.__field_addr_len1.readfrombuffer(buf) self.__field_addr_len2=UINT(**{'sizeinbytes': 1}) self.__field_addr_len2.readfrombuffer(buf) self.__field_addr_len3=UINT(**{'sizeinbytes': 1}) self.__field_addr_len3.readfrombuffer(buf) self.__field_addr_len4=UINT(**{'sizeinbytes': 1}) self.__field_addr_len4.readfrombuffer(buf) self.__field_addr_len5=UINT(**{'sizeinbytes': 1}) self.__field_addr_len5.readfrombuffer(buf) self.__field_addr_len6=UINT(**{'sizeinbytes': 1}) self.__field_addr_len6.readfrombuffer(buf) self.__field_addr_len7=UINT(**{'sizeinbytes': 1}) self.__field_addr_len7.readfrombuffer(buf) self.__field_addr_len8=UINT(**{'sizeinbytes': 1}) self.__field_addr_len8.readfrombuffer(buf) self.__field_addr_len9=UINT(**{'sizeinbytes': 1}) self.__field_addr_len9.readfrombuffer(buf) if self.addr_len0: self.__field_addr0=STRING(**{ 'sizeinbytes': self.addr_len0, 'terminator': None }) self.__field_addr0.readfrombuffer(buf) if self.addr_len1: self.__field_addr1=STRING(**{ 'sizeinbytes': self.addr_len1, 'terminator': None }) self.__field_addr1.readfrombuffer(buf) if self.addr_len2: self.__field_addr2=STRING(**{ 'sizeinbytes': self.addr_len2, 'terminator': None }) self.__field_addr2.readfrombuffer(buf) if self.addr_len3: self.__field_addr3=STRING(**{ 'sizeinbytes': self.addr_len3, 'terminator': None }) self.__field_addr3.readfrombuffer(buf) if self.addr_len4: self.__field_addr4=STRING(**{ 'sizeinbytes': self.addr_len4, 'terminator': None }) self.__field_addr4.readfrombuffer(buf) if self.addr_len5: self.__field_addr5=STRING(**{ 'sizeinbytes': self.addr_len5, 'terminator': None }) self.__field_addr5.readfrombuffer(buf) if self.addr_len6: self.__field_addr6=STRING(**{ 'sizeinbytes': self.addr_len6, 'terminator': None }) self.__field_addr6.readfrombuffer(buf) if self.addr_len7: self.__field_addr7=STRING(**{ 'sizeinbytes': self.addr_len7, 'terminator': None }) self.__field_addr7.readfrombuffer(buf) if self.addr_len8: self.__field_addr8=STRING(**{ 'sizeinbytes': self.addr_len8, 'terminator': None }) self.__field_addr8.readfrombuffer(buf) if self.addr_len9: self.__field_addr9=STRING(**{ 'sizeinbytes': self.addr_len9, 'terminator': None }) self.__field_addr9.readfrombuffer(buf) if not self.has_1byte and self.has_1byte2: self.__field_dunno6=UNKNOWN(**{'sizeinbytes': 1}) self.__field_dunno6.readfrombuffer(buf) if self.has_1byte2: self.__field_dunno7=UNKNOWN(**{'sizeinbytes': 1}) self.__field_dunno7.readfrombuffer(buf) self.__field_dunno8=UNKNOWN(**{'sizeinbytes': 21}) self.__field_dunno8.readfrombuffer(buf) if self.has_40bytes: self.__field_dunno9=UNKNOWN(**{'sizeinbytes': 40}) self.__field_dunno9.readfrombuffer(buf) self.__field_msg_stat=LIST(**{ 'elementclass': sms_msg_stat_list, 'length': 10 }) self.__field_msg_stat.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg_len(self): return self.__field_msg_len.getvalue() def __setfield_msg_len(self, value): if isinstance(value,UINT): self.__field_msg_len=value else: self.__field_msg_len=UINT(value,) def __delfield_msg_len(self): del self.__field_msg_len msg_len=property(__getfield_msg_len, __setfield_msg_len, __delfield_msg_len, None) def __getfield_has_callback(self): try: self.__field_has_callback except: self.__field_has_callback=BOOL(**{ 'default': True }) return self.__field_has_callback.getvalue() def __setfield_has_callback(self, value): if isinstance(value,BOOL): self.__field_has_callback=value else: self.__field_has_callback=BOOL(value,**{ 'default': True }) def __delfield_has_callback(self): del self.__field_has_callback has_callback=property(__getfield_has_callback, __setfield_has_callback, __delfield_has_callback, None) def __getfield_has_priority(self): try: self.__field_has_priority except: self.__field_has_priority=BOOL(**{ 'default': False }) return self.__field_has_priority.getvalue() def __setfield_has_priority(self, value): if isinstance(value,BOOL): self.__field_has_priority=value else: self.__field_has_priority=BOOL(value,**{ 'default': False }) def __delfield_has_priority(self): del self.__field_has_priority has_priority=property(__getfield_has_priority, __setfield_has_priority, __delfield_has_priority, None) def __getfield_has_1byte(self): try: self.__field_has_1byte except: self.__field_has_1byte=BOOL(**{ 'default': False }) return self.__field_has_1byte.getvalue() def __setfield_has_1byte(self, value): if isinstance(value,BOOL): self.__field_has_1byte=value else: self.__field_has_1byte=BOOL(value,**{ 'default': False }) def __delfield_has_1byte(self): del self.__field_has_1byte has_1byte=property(__getfield_has_1byte, __setfield_has_1byte, __delfield_has_1byte, None) def __getfield_has_1byte2(self): try: self.__field_has_1byte2 except: self.__field_has_1byte2=BOOL(**{ 'default': True }) return self.__field_has_1byte2.getvalue() def __setfield_has_1byte2(self, value): if isinstance(value,BOOL): self.__field_has_1byte2=value else: self.__field_has_1byte2=BOOL(value,**{ 'default': True }) def __delfield_has_1byte2(self): del self.__field_has_1byte2 has_1byte2=property(__getfield_has_1byte2, __setfield_has_1byte2, __delfield_has_1byte2, None) def __getfield_has_40bytes(self): try: self.__field_has_40bytes except: self.__field_has_40bytes=BOOL(**{ 'default': False }) return self.__field_has_40bytes.getvalue() def __setfield_has_40bytes(self, value): if isinstance(value,BOOL): self.__field_has_40bytes=value else: self.__field_has_40bytes=BOOL(value,**{ 'default': False }) def __delfield_has_40bytes(self): del self.__field_has_40bytes has_40bytes=property(__getfield_has_40bytes, __setfield_has_40bytes, __delfield_has_40bytes, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UNKNOWN): self.__field_dunno1=value else: self.__field_dunno1=UNKNOWN(value,**{'sizeinbytes': 50}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_msg(self): return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{ 'sizeinbytes': self.msg_len, 'encoding': ENCODING, 'terminator': None }) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UNKNOWN): self.__field_dunno2=value else: self.__field_dunno2=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_callback_len(self): return self.__field_callback_len.getvalue() def __setfield_callback_len(self, value): if isinstance(value,UINT): self.__field_callback_len=value else: self.__field_callback_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_len(self): del self.__field_callback_len callback_len=property(__getfield_callback_len, __setfield_callback_len, __delfield_callback_len, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,STRING): self.__field_callback=value else: self.__field_callback=STRING(value,**{ 'sizeinbytes': self.callback_len, 'terminator': None }) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_dunno3(self): return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,UNKNOWN): self.__field_dunno3=value else: self.__field_dunno3=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_dunno4(self): return self.__field_dunno4.getvalue() def __setfield_dunno4(self, value): if isinstance(value,UNKNOWN): self.__field_dunno4=value else: self.__field_dunno4=UNKNOWN(value,**{'sizeinbytes': 40}) def __delfield_dunno4(self): del self.__field_dunno4 dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None) def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,DateTime1): self.__field_datetime=value else: self.__field_datetime=DateTime1(value,**{'sizeinbytes': 4}) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def __getfield_dunno5(self): return self.__field_dunno5.getvalue() def __setfield_dunno5(self, value): if isinstance(value,UNKNOWN): self.__field_dunno5=value else: self.__field_dunno5=UNKNOWN(value,**{'sizeinbytes': 13}) def __delfield_dunno5(self): del self.__field_dunno5 dunno5=property(__getfield_dunno5, __setfield_dunno5, __delfield_dunno5, None) def __getfield_addr_len0(self): return self.__field_addr_len0.getvalue() def __setfield_addr_len0(self, value): if isinstance(value,UINT): self.__field_addr_len0=value else: self.__field_addr_len0=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len0(self): del self.__field_addr_len0 addr_len0=property(__getfield_addr_len0, __setfield_addr_len0, __delfield_addr_len0, None) def __getfield_addr_len1(self): return self.__field_addr_len1.getvalue() def __setfield_addr_len1(self, value): if isinstance(value,UINT): self.__field_addr_len1=value else: self.__field_addr_len1=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len1(self): del self.__field_addr_len1 addr_len1=property(__getfield_addr_len1, __setfield_addr_len1, __delfield_addr_len1, None) def __getfield_addr_len2(self): return self.__field_addr_len2.getvalue() def __setfield_addr_len2(self, value): if isinstance(value,UINT): self.__field_addr_len2=value else: self.__field_addr_len2=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len2(self): del self.__field_addr_len2 addr_len2=property(__getfield_addr_len2, __setfield_addr_len2, __delfield_addr_len2, None) def __getfield_addr_len3(self): return self.__field_addr_len3.getvalue() def __setfield_addr_len3(self, value): if isinstance(value,UINT): self.__field_addr_len3=value else: self.__field_addr_len3=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len3(self): del self.__field_addr_len3 addr_len3=property(__getfield_addr_len3, __setfield_addr_len3, __delfield_addr_len3, None) def __getfield_addr_len4(self): return self.__field_addr_len4.getvalue() def __setfield_addr_len4(self, value): if isinstance(value,UINT): self.__field_addr_len4=value else: self.__field_addr_len4=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len4(self): del self.__field_addr_len4 addr_len4=property(__getfield_addr_len4, __setfield_addr_len4, __delfield_addr_len4, None) def __getfield_addr_len5(self): return self.__field_addr_len5.getvalue() def __setfield_addr_len5(self, value): if isinstance(value,UINT): self.__field_addr_len5=value else: self.__field_addr_len5=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len5(self): del self.__field_addr_len5 addr_len5=property(__getfield_addr_len5, __setfield_addr_len5, __delfield_addr_len5, None) def __getfield_addr_len6(self): return self.__field_addr_len6.getvalue() def __setfield_addr_len6(self, value): if isinstance(value,UINT): self.__field_addr_len6=value else: self.__field_addr_len6=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len6(self): del self.__field_addr_len6 addr_len6=property(__getfield_addr_len6, __setfield_addr_len6, __delfield_addr_len6, None) def __getfield_addr_len7(self): return self.__field_addr_len7.getvalue() def __setfield_addr_len7(self, value): if isinstance(value,UINT): self.__field_addr_len7=value else: self.__field_addr_len7=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len7(self): del self.__field_addr_len7 addr_len7=property(__getfield_addr_len7, __setfield_addr_len7, __delfield_addr_len7, None) def __getfield_addr_len8(self): return self.__field_addr_len8.getvalue() def __setfield_addr_len8(self, value): if isinstance(value,UINT): self.__field_addr_len8=value else: self.__field_addr_len8=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len8(self): del self.__field_addr_len8 addr_len8=property(__getfield_addr_len8, __setfield_addr_len8, __delfield_addr_len8, None) def __getfield_addr_len9(self): return self.__field_addr_len9.getvalue() def __setfield_addr_len9(self, value): if isinstance(value,UINT): self.__field_addr_len9=value else: self.__field_addr_len9=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len9(self): del self.__field_addr_len9 addr_len9=property(__getfield_addr_len9, __setfield_addr_len9, __delfield_addr_len9, None) def __getfield_addr0(self): return self.__field_addr0.getvalue() def __setfield_addr0(self, value): if isinstance(value,STRING): self.__field_addr0=value else: self.__field_addr0=STRING(value,**{ 'sizeinbytes': self.addr_len0, 'terminator': None }) def __delfield_addr0(self): del self.__field_addr0 addr0=property(__getfield_addr0, __setfield_addr0, __delfield_addr0, None) def __getfield_addr1(self): return self.__field_addr1.getvalue() def __setfield_addr1(self, value): if isinstance(value,STRING): self.__field_addr1=value else: self.__field_addr1=STRING(value,**{ 'sizeinbytes': self.addr_len1, 'terminator': None }) def __delfield_addr1(self): del self.__field_addr1 addr1=property(__getfield_addr1, __setfield_addr1, __delfield_addr1, None) def __getfield_addr2(self): return self.__field_addr2.getvalue() def __setfield_addr2(self, value): if isinstance(value,STRING): self.__field_addr2=value else: self.__field_addr2=STRING(value,**{ 'sizeinbytes': self.addr_len2, 'terminator': None }) def __delfield_addr2(self): del self.__field_addr2 addr2=property(__getfield_addr2, __setfield_addr2, __delfield_addr2, None) def __getfield_addr3(self): return self.__field_addr3.getvalue() def __setfield_addr3(self, value): if isinstance(value,STRING): self.__field_addr3=value else: self.__field_addr3=STRING(value,**{ 'sizeinbytes': self.addr_len3, 'terminator': None }) def __delfield_addr3(self): del self.__field_addr3 addr3=property(__getfield_addr3, __setfield_addr3, __delfield_addr3, None) def __getfield_addr4(self): return self.__field_addr4.getvalue() def __setfield_addr4(self, value): if isinstance(value,STRING): self.__field_addr4=value else: self.__field_addr4=STRING(value,**{ 'sizeinbytes': self.addr_len4, 'terminator': None }) def __delfield_addr4(self): del self.__field_addr4 addr4=property(__getfield_addr4, __setfield_addr4, __delfield_addr4, None) def __getfield_addr5(self): return self.__field_addr5.getvalue() def __setfield_addr5(self, value): if isinstance(value,STRING): self.__field_addr5=value else: self.__field_addr5=STRING(value,**{ 'sizeinbytes': self.addr_len5, 'terminator': None }) def __delfield_addr5(self): del self.__field_addr5 addr5=property(__getfield_addr5, __setfield_addr5, __delfield_addr5, None) def __getfield_addr6(self): return self.__field_addr6.getvalue() def __setfield_addr6(self, value): if isinstance(value,STRING): self.__field_addr6=value else: self.__field_addr6=STRING(value,**{ 'sizeinbytes': self.addr_len6, 'terminator': None }) def __delfield_addr6(self): del self.__field_addr6 addr6=property(__getfield_addr6, __setfield_addr6, __delfield_addr6, None) def __getfield_addr7(self): return self.__field_addr7.getvalue() def __setfield_addr7(self, value): if isinstance(value,STRING): self.__field_addr7=value else: self.__field_addr7=STRING(value,**{ 'sizeinbytes': self.addr_len7, 'terminator': None }) def __delfield_addr7(self): del self.__field_addr7 addr7=property(__getfield_addr7, __setfield_addr7, __delfield_addr7, None) def __getfield_addr8(self): return self.__field_addr8.getvalue() def __setfield_addr8(self, value): if isinstance(value,STRING): self.__field_addr8=value else: self.__field_addr8=STRING(value,**{ 'sizeinbytes': self.addr_len8, 'terminator': None }) def __delfield_addr8(self): del self.__field_addr8 addr8=property(__getfield_addr8, __setfield_addr8, __delfield_addr8, None) def __getfield_addr9(self): return self.__field_addr9.getvalue() def __setfield_addr9(self, value): if isinstance(value,STRING): self.__field_addr9=value else: self.__field_addr9=STRING(value,**{ 'sizeinbytes': self.addr_len9, 'terminator': None }) def __delfield_addr9(self): del self.__field_addr9 addr9=property(__getfield_addr9, __setfield_addr9, __delfield_addr9, None) def __getfield_dunno6(self): return self.__field_dunno6.getvalue() def __setfield_dunno6(self, value): if isinstance(value,UNKNOWN): self.__field_dunno6=value else: self.__field_dunno6=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_dunno6(self): del self.__field_dunno6 dunno6=property(__getfield_dunno6, __setfield_dunno6, __delfield_dunno6, None) def __getfield_dunno7(self): return self.__field_dunno7.getvalue() def __setfield_dunno7(self, value): if isinstance(value,UNKNOWN): self.__field_dunno7=value else: self.__field_dunno7=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_dunno7(self): del self.__field_dunno7 dunno7=property(__getfield_dunno7, __setfield_dunno7, __delfield_dunno7, None) def __getfield_dunno8(self): return self.__field_dunno8.getvalue() def __setfield_dunno8(self, value): if isinstance(value,UNKNOWN): self.__field_dunno8=value else: self.__field_dunno8=UNKNOWN(value,**{'sizeinbytes': 21}) def __delfield_dunno8(self): del self.__field_dunno8 dunno8=property(__getfield_dunno8, __setfield_dunno8, __delfield_dunno8, None) def __getfield_dunno9(self): return self.__field_dunno9.getvalue() def __setfield_dunno9(self, value): if isinstance(value,UNKNOWN): self.__field_dunno9=value else: self.__field_dunno9=UNKNOWN(value,**{'sizeinbytes': 40}) def __delfield_dunno9(self): del self.__field_dunno9 dunno9=property(__getfield_dunno9, __setfield_dunno9, __delfield_dunno9, None) def __getfield_msg_stat(self): return self.__field_msg_stat.getvalue() def __setfield_msg_stat(self, value): if isinstance(value,LIST): self.__field_msg_stat=value else: self.__field_msg_stat=LIST(value,**{ 'elementclass': sms_msg_stat_list, 'length': 10 }) def __delfield_msg_stat(self): del self.__field_msg_stat msg_stat=property(__getfield_msg_stat, __setfield_msg_stat, __delfield_msg_stat, None) def iscontainer(self): return True def containerelements(self): yield ('msg_len', self.__field_msg_len, None) yield ('has_callback', self.__field_has_callback, None) yield ('has_priority', self.__field_has_priority, None) yield ('has_1byte', self.__field_has_1byte, None) yield ('has_1byte2', self.__field_has_1byte2, None) yield ('has_40bytes', self.__field_has_40bytes, None) yield ('dunno1', self.__field_dunno1, None) yield ('msg', self.__field_msg, None) if self.has_callback: yield ('dunno2', self.__field_dunno2, None) yield ('callback_len', self.__field_callback_len, None) yield ('callback', self.__field_callback, None) if self.has_priority: yield ('priority', self.__field_priority, None) if self.has_1byte: yield ('dunno3', self.__field_dunno3, None) yield ('dunno4', self.__field_dunno4, None) yield ('datetime', self.__field_datetime, None) yield ('dunno5', self.__field_dunno5, None) yield ('addr_len0', self.__field_addr_len0, None) yield ('addr_len1', self.__field_addr_len1, None) yield ('addr_len2', self.__field_addr_len2, None) yield ('addr_len3', self.__field_addr_len3, None) yield ('addr_len4', self.__field_addr_len4, None) yield ('addr_len5', self.__field_addr_len5, None) yield ('addr_len6', self.__field_addr_len6, None) yield ('addr_len7', self.__field_addr_len7, None) yield ('addr_len8', self.__field_addr_len8, None) yield ('addr_len9', self.__field_addr_len9, None) if self.addr_len0: yield ('addr0', self.__field_addr0, None) if self.addr_len1: yield ('addr1', self.__field_addr1, None) if self.addr_len2: yield ('addr2', self.__field_addr2, None) if self.addr_len3: yield ('addr3', self.__field_addr3, None) if self.addr_len4: yield ('addr4', self.__field_addr4, None) if self.addr_len5: yield ('addr5', self.__field_addr5, None) if self.addr_len6: yield ('addr6', self.__field_addr6, None) if self.addr_len7: yield ('addr7', self.__field_addr7, None) if self.addr_len8: yield ('addr8', self.__field_addr8, None) if self.addr_len9: yield ('addr9', self.__field_addr9, None) if not self.has_1byte and self.has_1byte2: yield ('dunno6', self.__field_dunno6, None) if self.has_1byte2: yield ('dunno7', self.__field_dunno7, None) yield ('dunno8', self.__field_dunno8, None) if self.has_40bytes: yield ('dunno9', self.__field_dunno9, None) yield ('msg_stat', self.__field_msg_stat, None) bitpim-1.0.7+dfsg1/src/phones/p_lglx5450.py0000644001616600161660000036661210466234100016421 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG LX5450""" from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx4400 except as noted # below from p_lgvx4400 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=500 MAXCALENDARDESCRIPTION=38 # Calendar parameters NUMCALENDARENTRIES=300 CAL_REP_NONE=0x10 CAL_REP_DAILY=0x11 CAL_REP_MONFRI=0x12 CAL_REP_WEEKLY=0x13 CAL_REP_MONTHLY=0x14 CAL_REP_YEARLY=0x15 CAL_DOW_SUN=0x0800 CAL_DOW_MON=0x0400 CAL_DOW_TUE=0x0200 CAL_DOW_WED=0x0100 CAL_DOW_THU=0x0080 CAL_DOW_FRI=0x0040 CAL_DOW_SAT=0x0020 CAL_DOW_EXCEPTIONS=0x0010 CAL_REMINDER_NONE=0 CAL_REMINDER_ONTIME=1 CAL_REMINDER_5MIN=2 CAL_REMINDER_10MIN=3 CAL_REMINDER_1HOUR=4 CAL_REMINDER_1DAY=5 CAL_REMINDER_2DAYS=6 CAL_REPEAT_DATE=(2100, 12, 31) cal_dir='sch' cal_data_file_name='sch/schedule.dat' cal_exception_file_name='sch/schexception.dat' cal_has_voice_id=False PHONE_ENCODING='iso8859_1' class speeddial(BaseProtogenClass): __fields=['entry', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddial,self).__init__(**dict) if self.__class__ is speeddial: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddial,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddial,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.writetobuffer(buf) try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.readfrombuffer(buf) self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,UINT): self.__field_entry=value else: self.__field_entry=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_number(self): try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,UINT): self.__field_number=value else: self.__field_number=UINT(value,**{'sizeinbytes': 1, 'default': 0xff}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('entry', self.__field_entry, None) yield ('number', self.__field_number, None) class speeddials(BaseProtogenClass): __fields=['speeddials'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddials,self).__init__(**dict) if self.__class__ is speeddials: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddials,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddials,kwargs) if len(args): dict2={'length': NUMSPEEDDIALS, 'elementclass': speeddial} dict2.update(kwargs) kwargs=dict2 self.__field_speeddials=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_speeddials(self): try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) return self.__field_speeddials.getvalue() def __setfield_speeddials(self, value): if isinstance(value,LIST): self.__field_speeddials=value else: self.__field_speeddials=LIST(value,**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) def __delfield_speeddials(self): del self.__field_speeddials speeddials=property(__getfield_speeddials, __setfield_speeddials, __delfield_speeddials, None) def iscontainer(self): return True def containerelements(self): yield ('speeddials', self.__field_speeddials, None) class indexentry(BaseProtogenClass): __fields=['index', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_index.writetobuffer(buf) try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 50, 'default': ""}) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_index.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 50, 'default': ""}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 50, 'default': ""}) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 50, 'default': ""}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('name', self.__field_name, None) class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['numactiveitems', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('items', self.__field_items, None) class camindexentry(BaseProtogenClass): __fields=['index', 'name', 'taken', 'dunno'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(camindexentry,self).__init__(**dict) if self.__class__ is camindexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(camindexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(camindexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_index.writetobuffer(buf) try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 11, 'default': ""}) self.__field_name.writetobuffer(buf) try: self.__field_taken except: self.__field_taken=LGCALDATE(**{'sizeinbytes': 4}) self.__field_taken.writetobuffer(buf) try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default': 0x00ff0100}) self.__field_dunno.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_index.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 11, 'default': ""}) self.__field_name.readfrombuffer(buf) self.__field_taken=LGCALDATE(**{'sizeinbytes': 4}) self.__field_taken.readfrombuffer(buf) self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default': 0x00ff0100}) self.__field_dunno.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 11, 'default': ""}) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 11, 'default': ""}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_taken(self): try: self.__field_taken except: self.__field_taken=LGCALDATE(**{'sizeinbytes': 4}) return self.__field_taken.getvalue() def __setfield_taken(self, value): if isinstance(value,LGCALDATE): self.__field_taken=value else: self.__field_taken=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_taken(self): del self.__field_taken taken=property(__getfield_taken, __setfield_taken, __delfield_taken, None) def __getfield_dunno(self): try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default': 0x00ff0100}) return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 4, 'default': 0x00ff0100}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('name', self.__field_name, None) yield ('taken', self.__field_taken, None) yield ('dunno', self.__field_dunno, None) class campicsdat(BaseProtogenClass): "the cam/pics.dat file" __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(campicsdat,self).__init__(**dict) if self.__class__ is campicsdat: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(campicsdat,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(campicsdat,kwargs) if len(args): dict2={'length': 20, 'elementclass': camindexentry, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'length': 20, 'elementclass': camindexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'length': 20, 'elementclass': camindexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'length': 20, 'elementclass': camindexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'length': 20, 'elementclass': camindexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class scheduleexception(BaseProtogenClass): __fields=['pos', 'day', 'month', 'year'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexception,self).__init__(**dict) if self.__class__ is scheduleexception: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexception,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexception,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_day.writetobuffer(buf) self.__field_month.writetobuffer(buf) self.__field_year.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_day=UINT(**{'sizeinbytes': 1}) self.__field_day.readfrombuffer(buf) self.__field_month=UINT(**{'sizeinbytes': 1}) self.__field_month.readfrombuffer(buf) self.__field_year=UINT(**{'sizeinbytes': 2}) self.__field_year.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "Refers to event id (position in schedule file) that this suppresses") def __getfield_day(self): return self.__field_day.getvalue() def __setfield_day(self, value): if isinstance(value,UINT): self.__field_day=value else: self.__field_day=UINT(value,**{'sizeinbytes': 1}) def __delfield_day(self): del self.__field_day day=property(__getfield_day, __setfield_day, __delfield_day, None) def __getfield_month(self): return self.__field_month.getvalue() def __setfield_month(self, value): if isinstance(value,UINT): self.__field_month=value else: self.__field_month=UINT(value,**{'sizeinbytes': 1}) def __delfield_month(self): del self.__field_month month=property(__getfield_month, __setfield_month, __delfield_month, None) def __getfield_year(self): return self.__field_year.getvalue() def __setfield_year(self, value): if isinstance(value,UINT): self.__field_year=value else: self.__field_year=UINT(value,**{'sizeinbytes': 2}) def __delfield_year(self): del self.__field_year year=property(__getfield_year, __setfield_year, __delfield_year, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "Refers to event id (position in schedule file) that this suppresses") yield ('day', self.__field_day, None) yield ('month', self.__field_month, None) yield ('year', self.__field_year, None) class scheduleexceptionfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexceptionfile,self).__init__(**dict) if self.__class__ is scheduleexceptionfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexceptionfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexceptionfile,kwargs) if len(args): dict2={'elementclass': scheduleexception} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': scheduleexception}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class scheduleevent(BaseProtogenClass): __fields=['packet_size', 'pos', 'start', 'end', 'repeat', 'daybitmap', 'pad2', 'alarmminutes', 'alarmhours', 'alarmtype', 'snoozedelay', 'ringtone', 'description'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleevent,self).__init__(**dict) if self.__class__ is scheduleevent: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleevent,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleevent,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_packet_size except: self.__field_packet_size=UINT(**{ 'constant': 60 }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) self.__field_daybitmap.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad2.writetobuffer(buf) self.__field_alarmminutes.writetobuffer(buf) self.__field_alarmhours.writetobuffer(buf) self.__field_alarmtype.writetobuffer(buf) try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_description.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_start=LGCALDATE(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=LGCALDATE(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_repeat=UINT(**{'sizeinbytes': 1}) self.__field_repeat.readfrombuffer(buf) self.__field_daybitmap=UINT(**{'sizeinbytes': 2}) self.__field_daybitmap.readfrombuffer(buf) self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad2.readfrombuffer(buf) self.__field_alarmminutes=UINT(**{'sizeinbytes': 1}) self.__field_alarmminutes.readfrombuffer(buf) self.__field_alarmhours=UINT(**{'sizeinbytes': 1}) self.__field_alarmhours.readfrombuffer(buf) self.__field_alarmtype=UINT(**{'sizeinbytes': 1}) self.__field_alarmtype.readfrombuffer(buf) self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_description=USTRING(**{'sizeinbytes': 39, 'encoding': PHONE_ENCODING, 'raiseontruncate': False, 'raiseonunterminatedread': False }) self.__field_description.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_packet_size(self): return self.__field_packet_size.getvalue() def __setfield_packet_size(self, value): if isinstance(value,UINT): self.__field_packet_size=value else: self.__field_packet_size=UINT(value,**{ 'constant': 60 }) def __delfield_packet_size(self): del self.__field_packet_size packet_size=property(__getfield_packet_size, __setfield_packet_size, __delfield_packet_size, "Faster than packetsize()") def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "position within file, used as an event id") def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,LGCALDATE): self.__field_start=value else: self.__field_start=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,LGCALDATE): self.__field_end=value else: self.__field_end=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,UINT): self.__field_repeat=value else: self.__field_repeat=UINT(value,**{'sizeinbytes': 1}) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_daybitmap(self): return self.__field_daybitmap.getvalue() def __setfield_daybitmap(self, value): if isinstance(value,UINT): self.__field_daybitmap=value else: self.__field_daybitmap=UINT(value,**{'sizeinbytes': 2}) def __delfield_daybitmap(self): del self.__field_daybitmap daybitmap=property(__getfield_daybitmap, __setfield_daybitmap, __delfield_daybitmap, "which days a weekly repeat event happens on") def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UINT): self.__field_pad2=value else: self.__field_pad2=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_alarmminutes(self): return self.__field_alarmminutes.getvalue() def __setfield_alarmminutes(self, value): if isinstance(value,UINT): self.__field_alarmminutes=value else: self.__field_alarmminutes=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmminutes(self): del self.__field_alarmminutes alarmminutes=property(__getfield_alarmminutes, __setfield_alarmminutes, __delfield_alarmminutes, "a value of 100 indicates not set") def __getfield_alarmhours(self): return self.__field_alarmhours.getvalue() def __setfield_alarmhours(self, value): if isinstance(value,UINT): self.__field_alarmhours=value else: self.__field_alarmhours=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmhours(self): del self.__field_alarmhours alarmhours=property(__getfield_alarmhours, __setfield_alarmhours, __delfield_alarmhours, "a value of 100 indicates not set") def __getfield_alarmtype(self): return self.__field_alarmtype.getvalue() def __setfield_alarmtype(self, value): if isinstance(value,UINT): self.__field_alarmtype=value else: self.__field_alarmtype=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmtype(self): del self.__field_alarmtype alarmtype=property(__getfield_alarmtype, __setfield_alarmtype, __delfield_alarmtype, "preset alarm reminder type") def __getfield_snoozedelay(self): try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_snoozedelay.getvalue() def __setfield_snoozedelay(self, value): if isinstance(value,UINT): self.__field_snoozedelay=value else: self.__field_snoozedelay=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_snoozedelay(self): del self.__field_snoozedelay snoozedelay=property(__getfield_snoozedelay, __setfield_snoozedelay, __delfield_snoozedelay, "in minutes, not for this phone") def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_description(self): return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,USTRING): self.__field_description=value else: self.__field_description=USTRING(value,**{'sizeinbytes': 39, 'encoding': PHONE_ENCODING, 'raiseontruncate': False, 'raiseonunterminatedread': False }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def iscontainer(self): return True def containerelements(self): yield ('packet_size', self.__field_packet_size, "Faster than packetsize()") yield ('pos', self.__field_pos, "position within file, used as an event id") yield ('start', self.__field_start, None) yield ('end', self.__field_end, None) yield ('repeat', self.__field_repeat, None) yield ('daybitmap', self.__field_daybitmap, "which days a weekly repeat event happens on") yield ('pad2', self.__field_pad2, None) yield ('alarmminutes', self.__field_alarmminutes, "a value of 100 indicates not set") yield ('alarmhours', self.__field_alarmhours, "a value of 100 indicates not set") yield ('alarmtype', self.__field_alarmtype, "preset alarm reminder type") yield ('snoozedelay', self.__field_snoozedelay, "in minutes, not for this phone") yield ('ringtone', self.__field_ringtone, None) yield ('description', self.__field_description, None) class schedulefile(BaseProtogenClass): __fields=['numactiveitems', 'events'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(schedulefile,self).__init__(**dict) if self.__class__ is schedulefile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(schedulefile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(schedulefile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{'elementclass': scheduleevent}) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('events', self.__field_events, None) class call(BaseProtogenClass): __fields=['GPStime', 'unknown1', 'duration', 'number', 'name', 'numberlength', 'unknown2', 'pbnumbertype', 'unknown3', 'pbentrynum'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(call,self).__init__(**dict) if self.__class__ is call: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(call,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(call,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_numberlength.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_pbnumbertype.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_pbentrynum.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 4}) self.__field_unknown1.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_numberlength=UINT(**{'sizeinbytes': 1}) self.__field_numberlength.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_pbnumbertype=UINT(**{'sizeinbytes': 1}) self.__field_pbnumbertype.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 2}) self.__field_unknown3.readfrombuffer(buf) self.__field_pbentrynum=UINT(**{'sizeinbytes': 2}) self.__field_pbentrynum.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numberlength(self): return self.__field_numberlength.getvalue() def __setfield_numberlength(self, value): if isinstance(value,UINT): self.__field_numberlength=value else: self.__field_numberlength=UINT(value,**{'sizeinbytes': 1}) def __delfield_numberlength(self): del self.__field_numberlength numberlength=property(__getfield_numberlength, __setfield_numberlength, __delfield_numberlength, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_pbnumbertype(self): return self.__field_pbnumbertype.getvalue() def __setfield_pbnumbertype(self, value): if isinstance(value,UINT): self.__field_pbnumbertype=value else: self.__field_pbnumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_pbnumbertype(self): del self.__field_pbnumbertype pbnumbertype=property(__getfield_pbnumbertype, __setfield_pbnumbertype, __delfield_pbnumbertype, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_pbentrynum(self): return self.__field_pbentrynum.getvalue() def __setfield_pbentrynum(self, value): if isinstance(value,UINT): self.__field_pbentrynum=value else: self.__field_pbentrynum=UINT(value,**{'sizeinbytes': 2}) def __delfield_pbentrynum(self): del self.__field_pbentrynum pbentrynum=property(__getfield_pbentrynum, __setfield_pbentrynum, __delfield_pbentrynum, None) def iscontainer(self): return True def containerelements(self): yield ('GPStime', self.__field_GPStime, None) yield ('unknown1', self.__field_unknown1, None) yield ('duration', self.__field_duration, None) yield ('number', self.__field_number, None) yield ('name', self.__field_name, None) yield ('numberlength', self.__field_numberlength, None) yield ('unknown2', self.__field_unknown2, None) yield ('pbnumbertype', self.__field_pbnumbertype, None) yield ('unknown3', self.__field_unknown3, None) yield ('pbentrynum', self.__field_pbentrynum, None) class callhistory(BaseProtogenClass): __fields=['numcalls', 'unknown1', 'calls'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callhistory,self).__init__(**dict) if self.__class__ is callhistory: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callhistory,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callhistory,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numcalls.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numcalls=UINT(**{'sizeinbytes': 4}) self.__field_numcalls.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numcalls(self): return self.__field_numcalls.getvalue() def __setfield_numcalls(self, value): if isinstance(value,UINT): self.__field_numcalls=value else: self.__field_numcalls=UINT(value,**{'sizeinbytes': 4}) def __delfield_numcalls(self): del self.__field_numcalls numcalls=property(__getfield_numcalls, __setfield_numcalls, __delfield_numcalls, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_calls(self): try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) return self.__field_calls.getvalue() def __setfield_calls(self, value): if isinstance(value,LIST): self.__field_calls=value else: self.__field_calls=LIST(value,**{'elementclass': call}) def __delfield_calls(self): del self.__field_calls calls=property(__getfield_calls, __setfield_calls, __delfield_calls, None) def iscontainer(self): return True def containerelements(self): yield ('numcalls', self.__field_numcalls, None) yield ('unknown1', self.__field_unknown1, None) yield ('calls', self.__field_calls, None) class msg_record(BaseProtogenClass): __fields=['unknown1', 'binary', 'unknown3', 'unknown4', 'unknown6', 'length', 'msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(msg_record,self).__init__(**dict) if self.__class__ is msg_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(msg_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(msg_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_binary.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_length.writetobuffer(buf) try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lglx5450_186, 'length': 219}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_binary=UINT(**{'sizeinbytes': 1}) self.__field_binary.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1}) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 1}) self.__field_unknown4.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 1}) self.__field_unknown6.readfrombuffer(buf) self.__field_length=UINT(**{'sizeinbytes': 1}) self.__field_length.readfrombuffer(buf) self.__field_msg=LIST(**{'elementclass': _gen_p_lglx5450_186, 'length': 219}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_binary(self): return self.__field_binary.getvalue() def __setfield_binary(self, value): if isinstance(value,UINT): self.__field_binary=value else: self.__field_binary=UINT(value,**{'sizeinbytes': 1}) def __delfield_binary(self): del self.__field_binary binary=property(__getfield_binary, __setfield_binary, __delfield_binary, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_length(self): return self.__field_length.getvalue() def __setfield_length(self, value): if isinstance(value,UINT): self.__field_length=value else: self.__field_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_length(self): del self.__field_length length=property(__getfield_length, __setfield_length, __delfield_length, None) def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lglx5450_186, 'length': 219}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lglx5450_186, 'length': 219}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('binary', self.__field_binary, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) yield ('unknown6', self.__field_unknown6, None) yield ('length', self.__field_length, None) yield ('msg', self.__field_msg, None) class _gen_p_lglx5450_186(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglx5450_186,self).__init__(**dict) if self.__class__ is _gen_p_lglx5450_186: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglx5450_186,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglx5450_186,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class recipient_record(BaseProtogenClass): __fields=['unknown1', 'number', 'status', 'timesent', 'timereceived', 'unknown2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(recipient_record,self).__init__(**dict) if self.__class__ is recipient_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(recipient_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(recipient_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_timereceived.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UINT(**{'sizeinbytes': 2}) self.__field_unknown1.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49}) self.__field_number.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_timereceived=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timereceived.readfrombuffer(buf) self.__field_unknown2=DATA(**{'sizeinbytes': 8}) self.__field_unknown2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_timereceived(self): return self.__field_timereceived.getvalue() def __setfield_timereceived(self, value): if isinstance(value,LGCALDATE): self.__field_timereceived=value else: self.__field_timereceived=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timereceived(self): del self.__field_timereceived timereceived=property(__getfield_timereceived, __setfield_timereceived, __delfield_timereceived, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,DATA): self.__field_unknown2=value else: self.__field_unknown2=DATA(value,**{'sizeinbytes': 8}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('number', self.__field_number, None) yield ('status', self.__field_status, None) yield ('timesent', self.__field_timesent, None) yield ('timereceived', self.__field_timereceived, None) yield ('unknown2', self.__field_unknown2, None) class sms_saved(BaseProtogenClass): __fields=['outboxmsg', 'pad', 'outbox', 'inbox'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_saved,self).__init__(**dict) if self.__class__ is sms_saved: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_saved,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_saved,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_outboxmsg.writetobuffer(buf) self.__field_pad.writetobuffer(buf) if self.outboxmsg: self.__field_outbox.writetobuffer(buf) if not self.outboxmsg: self.__field_inbox.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_outboxmsg=UINT(**{'sizeinbytes': 4}) self.__field_outboxmsg.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 4}) self.__field_pad.readfrombuffer(buf) if self.outboxmsg: self.__field_outbox=sms_out() self.__field_outbox.readfrombuffer(buf) if not self.outboxmsg: self.__field_inbox=sms_in() self.__field_inbox.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_outboxmsg(self): return self.__field_outboxmsg.getvalue() def __setfield_outboxmsg(self, value): if isinstance(value,UINT): self.__field_outboxmsg=value else: self.__field_outboxmsg=UINT(value,**{'sizeinbytes': 4}) def __delfield_outboxmsg(self): del self.__field_outboxmsg outboxmsg=property(__getfield_outboxmsg, __setfield_outboxmsg, __delfield_outboxmsg, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 4}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_outbox(self): return self.__field_outbox.getvalue() def __setfield_outbox(self, value): if isinstance(value,sms_out): self.__field_outbox=value else: self.__field_outbox=sms_out(value,) def __delfield_outbox(self): del self.__field_outbox outbox=property(__getfield_outbox, __setfield_outbox, __delfield_outbox, None) def __getfield_inbox(self): return self.__field_inbox.getvalue() def __setfield_inbox(self, value): if isinstance(value,sms_in): self.__field_inbox=value else: self.__field_inbox=sms_in(value,) def __delfield_inbox(self): del self.__field_inbox inbox=property(__getfield_inbox, __setfield_inbox, __delfield_inbox, None) def iscontainer(self): return True def containerelements(self): yield ('outboxmsg', self.__field_outboxmsg, None) yield ('pad', self.__field_pad, None) if self.outboxmsg: yield ('outbox', self.__field_outbox, None) if not self.outboxmsg: yield ('inbox', self.__field_inbox, None) class sms_out(BaseProtogenClass): __fields=['callback', 'index', 'locked', 'unknown1', 'timesent', 'subject', 'unknown2', 'num_msg_elements', 'messages', 'unknown5', 'priority', 'unknown7', 'callback', 'recipients'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_out,self).__init__(**dict) if self.__class__ is sms_out: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_out,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_out,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_callback except: self.__field_callback=USTRING(**{ 'default': '' }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 10}) self.__field_messages.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_unknown7.writetobuffer(buf) self.__field_callback.writetobuffer(buf) try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 10}) self.__field_recipients.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 3}) self.__field_unknown1.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_unknown2=DATA(**{'sizeinbytes': 151}) self.__field_unknown2.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 10}) self.__field_messages.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 1}) self.__field_unknown5.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_unknown7=DATA(**{'sizeinbytes': 15}) self.__field_unknown7.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 24}) self.__field_callback.readfrombuffer(buf) self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 10}) self.__field_recipients.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{ 'default': '' }) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,DATA): self.__field_unknown2=value else: self.__field_unknown2=DATA(value,**{'sizeinbytes': 151}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_messages(self): try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 10}) return self.__field_messages.getvalue() def __setfield_messages(self, value): if isinstance(value,LIST): self.__field_messages=value else: self.__field_messages=LIST(value,**{'elementclass': msg_record, 'length': 10}) def __delfield_messages(self): del self.__field_messages messages=property(__getfield_messages, __setfield_messages, __delfield_messages, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_unknown7(self): return self.__field_unknown7.getvalue() def __setfield_unknown7(self, value): if isinstance(value,DATA): self.__field_unknown7=value else: self.__field_unknown7=DATA(value,**{'sizeinbytes': 15}) def __delfield_unknown7(self): del self.__field_unknown7 unknown7=property(__getfield_unknown7, __setfield_unknown7, __delfield_unknown7, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 24}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_recipients(self): try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 10}) return self.__field_recipients.getvalue() def __setfield_recipients(self, value): if isinstance(value,LIST): self.__field_recipients=value else: self.__field_recipients=LIST(value,**{'elementclass': recipient_record,'length': 10}) def __delfield_recipients(self): del self.__field_recipients recipients=property(__getfield_recipients, __setfield_recipients, __delfield_recipients, None) def iscontainer(self): return True def containerelements(self): yield ('callback', self.__field_callback, None) yield ('index', self.__field_index, None) yield ('locked', self.__field_locked, None) yield ('unknown1', self.__field_unknown1, None) yield ('timesent', self.__field_timesent, None) yield ('subject', self.__field_subject, None) yield ('unknown2', self.__field_unknown2, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('messages', self.__field_messages, None) yield ('unknown5', self.__field_unknown5, None) yield ('priority', self.__field_priority, None) yield ('unknown7', self.__field_unknown7, None) yield ('callback', self.__field_callback, None) yield ('recipients', self.__field_recipients, None) class SMSINBOXMSGFRAGMENT(BaseProtogenClass): __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSINBOXMSGFRAGMENT,self).__init__(**dict) if self.__class__ is SMSINBOXMSGFRAGMENT: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSINBOXMSGFRAGMENT,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSINBOXMSGFRAGMENT,kwargs) if len(args): dict2={'elementclass': _gen_p_lglx5450_222, 'length': 181} dict2.update(kwargs) kwargs=dict2 self.__field_msg=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lglx5450_222, 'length': 181}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=LIST(**{'elementclass': _gen_p_lglx5450_222, 'length': 181}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lglx5450_222, 'length': 181}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lglx5450_222, 'length': 181}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class _gen_p_lglx5450_222(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglx5450_222,self).__init__(**dict) if self.__class__ is _gen_p_lglx5450_222: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglx5450_222,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglx5450_222,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class sms_in(BaseProtogenClass): __fields=['msg_index1', 'msg_index2', 'unknown2', 'unknown3', 'timesent', 'unknown', 'callback_length', 'callback', 'sender_length', 'sender', 'unknown4', 'lg_time', 'GPStime', 'unknown5', 'read', 'locked', 'unknown8', 'priority', 'flags', 'subject', 'bin_header1', 'bin_header2', 'unknown6', 'multipartID', 'bin_header3', 'num_msg_elements', 'msglengths', 'msgs', 'unknown5', 'senders_name', 'unknown6'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_in,self).__init__(**dict) if self.__class__ is sms_in: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_in,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_in,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msg_index1.writetobuffer(buf) self.__field_msg_index2.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self.__field_callback_length.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_sender_length.writetobuffer(buf) try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lglx5450_235, 'length': 38}) self.__field_sender.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_lg_time.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_flags.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_bin_header1.writetobuffer(buf) self.__field_bin_header2.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_multipartID.writetobuffer(buf) self.__field_bin_header3.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lglx5450_253, 'length': 10}) self.__field_msglengths.writetobuffer(buf) try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_senders_name.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg_index1=UINT(**{'sizeinbytes': 4}) self.__field_msg_index1.readfrombuffer(buf) self.__field_msg_index2=UINT(**{'sizeinbytes': 4}) self.__field_msg_index2.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2}) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 4}) self.__field_unknown3.readfrombuffer(buf) self.__field_timesent=SMSDATE(**{'sizeinbytes': 6}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown=UINT(**{'sizeinbytes': 3}) self.__field_unknown.readfrombuffer(buf) self.__field_callback_length=UINT(**{'sizeinbytes': 1}) self.__field_callback_length.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 38}) self.__field_callback.readfrombuffer(buf) self.__field_sender_length=UINT(**{'sizeinbytes': 1}) self.__field_sender_length.readfrombuffer(buf) self.__field_sender=LIST(**{'elementclass': _gen_p_lglx5450_235, 'length': 38}) self.__field_sender.readfrombuffer(buf) self.__field_unknown4=DATA(**{'sizeinbytes': 15}) self.__field_unknown4.readfrombuffer(buf) self.__field_lg_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_lg_time.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 2}) self.__field_unknown5.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 1}) self.__field_read.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown8=UINT(**{'sizeinbytes': 2}) self.__field_unknown8.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_flags=DATA(**{'sizeinbytes': 5}) self.__field_flags.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_bin_header1=UINT(**{'sizeinbytes': 1}) self.__field_bin_header1.readfrombuffer(buf) self.__field_bin_header2=UINT(**{'sizeinbytes': 1}) self.__field_bin_header2.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 2}) self.__field_unknown6.readfrombuffer(buf) self.__field_multipartID=UINT(**{'sizeinbytes': 2}) self.__field_multipartID.readfrombuffer(buf) self.__field_bin_header3=UINT(**{'sizeinbytes': 1}) self.__field_bin_header3.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_msglengths=LIST(**{'elementclass': _gen_p_lglx5450_253, 'length': 10}) self.__field_msglengths.readfrombuffer(buf) self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.readfrombuffer(buf) self.__field_unknown5=DATA(**{'sizeinbytes': 437}) self.__field_unknown5.readfrombuffer(buf) self.__field_senders_name=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING}) self.__field_senders_name.readfrombuffer(buf) self.__field_unknown6=DATA(**{'sizeinbytes': 169}) self.__field_unknown6.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg_index1(self): return self.__field_msg_index1.getvalue() def __setfield_msg_index1(self, value): if isinstance(value,UINT): self.__field_msg_index1=value else: self.__field_msg_index1=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index1(self): del self.__field_msg_index1 msg_index1=property(__getfield_msg_index1, __setfield_msg_index1, __delfield_msg_index1, None) def __getfield_msg_index2(self): return self.__field_msg_index2.getvalue() def __setfield_msg_index2(self, value): if isinstance(value,UINT): self.__field_msg_index2=value else: self.__field_msg_index2=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index2(self): del self.__field_msg_index2 msg_index2=property(__getfield_msg_index2, __setfield_msg_index2, __delfield_msg_index2, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,SMSDATE): self.__field_timesent=value else: self.__field_timesent=SMSDATE(value,**{'sizeinbytes': 6}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UINT): self.__field_unknown=value else: self.__field_unknown=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def __getfield_callback_length(self): return self.__field_callback_length.getvalue() def __setfield_callback_length(self, value): if isinstance(value,UINT): self.__field_callback_length=value else: self.__field_callback_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_length(self): del self.__field_callback_length callback_length=property(__getfield_callback_length, __setfield_callback_length, __delfield_callback_length, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 38}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_sender_length(self): return self.__field_sender_length.getvalue() def __setfield_sender_length(self, value): if isinstance(value,UINT): self.__field_sender_length=value else: self.__field_sender_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_sender_length(self): del self.__field_sender_length sender_length=property(__getfield_sender_length, __setfield_sender_length, __delfield_sender_length, None) def __getfield_sender(self): try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lglx5450_235, 'length': 38}) return self.__field_sender.getvalue() def __setfield_sender(self, value): if isinstance(value,LIST): self.__field_sender=value else: self.__field_sender=LIST(value,**{'elementclass': _gen_p_lglx5450_235, 'length': 38}) def __delfield_sender(self): del self.__field_sender sender=property(__getfield_sender, __setfield_sender, __delfield_sender, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,DATA): self.__field_unknown4=value else: self.__field_unknown4=DATA(value,**{'sizeinbytes': 15}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_lg_time(self): return self.__field_lg_time.getvalue() def __setfield_lg_time(self, value): if isinstance(value,LGCALDATE): self.__field_lg_time=value else: self.__field_lg_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_lg_time(self): del self.__field_lg_time lg_time=property(__getfield_lg_time, __setfield_lg_time, __delfield_lg_time, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 1}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,UINT): self.__field_unknown8=value else: self.__field_unknown8=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_flags(self): return self.__field_flags.getvalue() def __setfield_flags(self, value): if isinstance(value,DATA): self.__field_flags=value else: self.__field_flags=DATA(value,**{'sizeinbytes': 5}) def __delfield_flags(self): del self.__field_flags flags=property(__getfield_flags, __setfield_flags, __delfield_flags, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_bin_header1(self): return self.__field_bin_header1.getvalue() def __setfield_bin_header1(self, value): if isinstance(value,UINT): self.__field_bin_header1=value else: self.__field_bin_header1=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header1(self): del self.__field_bin_header1 bin_header1=property(__getfield_bin_header1, __setfield_bin_header1, __delfield_bin_header1, None) def __getfield_bin_header2(self): return self.__field_bin_header2.getvalue() def __setfield_bin_header2(self, value): if isinstance(value,UINT): self.__field_bin_header2=value else: self.__field_bin_header2=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header2(self): del self.__field_bin_header2 bin_header2=property(__getfield_bin_header2, __setfield_bin_header2, __delfield_bin_header2, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_multipartID(self): return self.__field_multipartID.getvalue() def __setfield_multipartID(self, value): if isinstance(value,UINT): self.__field_multipartID=value else: self.__field_multipartID=UINT(value,**{'sizeinbytes': 2}) def __delfield_multipartID(self): del self.__field_multipartID multipartID=property(__getfield_multipartID, __setfield_multipartID, __delfield_multipartID, None) def __getfield_bin_header3(self): return self.__field_bin_header3.getvalue() def __setfield_bin_header3(self, value): if isinstance(value,UINT): self.__field_bin_header3=value else: self.__field_bin_header3=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header3(self): del self.__field_bin_header3 bin_header3=property(__getfield_bin_header3, __setfield_bin_header3, __delfield_bin_header3, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_msglengths(self): try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lglx5450_253, 'length': 10}) return self.__field_msglengths.getvalue() def __setfield_msglengths(self, value): if isinstance(value,LIST): self.__field_msglengths=value else: self.__field_msglengths=LIST(value,**{'elementclass': _gen_p_lglx5450_253, 'length': 10}) def __delfield_msglengths(self): del self.__field_msglengths msglengths=property(__getfield_msglengths, __setfield_msglengths, __delfield_msglengths, None) def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,DATA): self.__field_unknown5=value else: self.__field_unknown5=DATA(value,**{'sizeinbytes': 437}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_senders_name(self): return self.__field_senders_name.getvalue() def __setfield_senders_name(self, value): if isinstance(value,USTRING): self.__field_senders_name=value else: self.__field_senders_name=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING}) def __delfield_senders_name(self): del self.__field_senders_name senders_name=property(__getfield_senders_name, __setfield_senders_name, __delfield_senders_name, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,DATA): self.__field_unknown6=value else: self.__field_unknown6=DATA(value,**{'sizeinbytes': 169}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def iscontainer(self): return True def containerelements(self): yield ('msg_index1', self.__field_msg_index1, None) yield ('msg_index2', self.__field_msg_index2, None) yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) yield ('timesent', self.__field_timesent, None) yield ('unknown', self.__field_unknown, None) yield ('callback_length', self.__field_callback_length, None) yield ('callback', self.__field_callback, None) yield ('sender_length', self.__field_sender_length, None) yield ('sender', self.__field_sender, None) yield ('unknown4', self.__field_unknown4, None) yield ('lg_time', self.__field_lg_time, None) yield ('GPStime', self.__field_GPStime, None) yield ('unknown5', self.__field_unknown5, None) yield ('read', self.__field_read, None) yield ('locked', self.__field_locked, None) yield ('unknown8', self.__field_unknown8, None) yield ('priority', self.__field_priority, None) yield ('flags', self.__field_flags, None) yield ('subject', self.__field_subject, None) yield ('bin_header1', self.__field_bin_header1, None) yield ('bin_header2', self.__field_bin_header2, None) yield ('unknown6', self.__field_unknown6, None) yield ('multipartID', self.__field_multipartID, None) yield ('bin_header3', self.__field_bin_header3, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('msglengths', self.__field_msglengths, None) yield ('msgs', self.__field_msgs, None) yield ('unknown5', self.__field_unknown5, None) yield ('senders_name', self.__field_senders_name, None) yield ('unknown6', self.__field_unknown6, None) class _gen_p_lglx5450_235(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglx5450_235,self).__init__(**dict) if self.__class__ is _gen_p_lglx5450_235: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglx5450_235,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglx5450_235,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of senders phone number") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of senders phone number") class _gen_p_lglx5450_253(BaseProtogenClass): 'Anonymous inner class' __fields=['msglength'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglx5450_253,self).__init__(**dict) if self.__class__ is _gen_p_lglx5450_253: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglx5450_253,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglx5450_253,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_msglength=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msglength.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msglength=UINT(**{'sizeinbytes': 1}) self.__field_msglength.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msglength(self): return self.__field_msglength.getvalue() def __setfield_msglength(self, value): if isinstance(value,UINT): self.__field_msglength=value else: self.__field_msglength=UINT(value,**{'sizeinbytes': 1}) def __delfield_msglength(self): del self.__field_msglength msglength=property(__getfield_msglength, __setfield_msglength, __delfield_msglength, "lengths of individual messages in septets") def iscontainer(self): return True def containerelements(self): yield ('msglength', self.__field_msglength, "lengths of individual messages in septets") class sms_quick_text(BaseProtogenClass): __fields=['msgs'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_quick_text,self).__init__(**dict) if self.__class__ is sms_quick_text: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_quick_text,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_quick_text,kwargs) if len(args): dict2={'elementclass': _gen_p_lglx5450_269, } dict2.update(kwargs) kwargs=dict2 self.__field_msgs=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lglx5450_269, }) self.__field_msgs.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msgs=LIST(**{'elementclass': _gen_p_lglx5450_269, }) self.__field_msgs.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lglx5450_269, }) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'elementclass': _gen_p_lglx5450_269, }) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def iscontainer(self): return True def containerelements(self): yield ('msgs', self.__field_msgs, None) class _gen_p_lglx5450_269(BaseProtogenClass): 'Anonymous inner class' __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglx5450_269,self).__init__(**dict) if self.__class__ is _gen_p_lglx5450_269: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglx5450_269,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglx5450_269,kwargs) if len(args): dict2={'encoding': PHONE_ENCODING} dict2.update(kwargs) kwargs=dict2 self.__field_msg=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=USTRING(**{'encoding': PHONE_ENCODING}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{'encoding': PHONE_ENCODING}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) bitpim-1.0.7+dfsg1/src/phones/com_sanyomedia.py0000644001616600161660000002506210533210554017576 0ustar amuamu### BITPIM ### ### Copyright (C) 2004, 2005 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_sanyomedia.py 3707 2006-11-29 04:49:48Z sawecw $ """Common code for Sanyo Media transfers""" # standard modules import time import cStringIO import re # BitPim Modules import com_sanyo import com_brew import com_phone import p_sanyomedia import prototypes class SanyoMedia: "Download and upload media (ringers/wallpaper) from Sanyo Phones" FIRST_MEDIA_DIRECTORY=2 LAST_MEDIA_DIRECTORY=3 CAMERA_DIRECTORY=1 # Directories: # 1: Camera Pictures and Videos. MDM - Video # V - Picture # 2: Downloads # 3: Cable uploads # 4: Duplicate of directory 1 ?? imagelocations=( # offset, directory #, indexflag, type, maximumentries ( 300, 1, 1, "images", 30), ( 300, 1, 0, "camera", 30), ) wallpaperexts=(".jpg", ".png", ".mp4", ".3g2",".JPG") ringerexts=(".mid", ".qcp", ".mp3", ".m4a", ".pmd", ".bin") def __init__(self): pass def getmediaindices(self, results): com_sanyo.SanyoPhonebook.getmediaindices(self, results) ringermedia=results['ringtone-index'] imagemedia=results['wallpaper-index'] copypat=re.compile(r"(.*)\.(\d+)$") for idir in range(self.FIRST_MEDIA_DIRECTORY, self.LAST_MEDIA_DIRECTORY+1): self.log("Indexing directory "+`idir`) req=self.protocolclass.sanyochangedir() req.dirindex=idir res=self.sendpbcommand(req, self.protocolclass.sanyochangedirresponse) req=self.protocolclass.sanyonumfilesrequest() try: res=self.sendpbcommand(req, self.protocolclass.sanyonumfilesresponse) except com_sanyo.SanyoCommandException, ex: if ex.errnum!=121: raise self.log("Skipping directory "+`idir`) continue self.log("Directory "+`idir`+", File Count="+`res.count`) nfiles=res.count for ifile in range(nfiles): req=self.protocolclass.sanyomediafilenamerequest() req.index=ifile res=self.sendpbcommand(req, self.protocolclass.sanyomediafilenameresponse) name=res.filename orgname=name unique=False while not unique: unique=True for idx in imagemedia.keys(): if name==imagemedia[idx]['name']: matchresult=copypat.match(name) if matchresult: copycount=int(matchresult.group(2))+1 name=matchresult.group(1)+"."+str(copycount) else: name=name+".1" # Keep looping until sure we have unique name unique=False break if idir==self.CAMERA_DIRECTORY: if res.num3==0: # Original Camera Picture # Could convert filename to to a date imagemedia[ifile+1000*idir]={'name': name, 'origin': "camera"} else: # Wallet pictures imagemedia[res.num3]={'name': name, 'origin': "images"} else: idx=ifile+1000*idir # Make this more elegant later iswallpaper=0 for ext in self.wallpaperexts: if orgname.endswith(ext): imagemedia[idx]={'name': name, 'origin': "images"} iswallpaper=1 break if not iswallpaper: for ext in self.ringerexts: if orgname.endswith(ext): ringermedia[idx]={'name': name, 'origin': "ringers"} break results['ringtone-index']=ringermedia results['wallpaper-index']=imagemedia return def getmediaindex(self, builtins, maps, results, key): media=com_sanyo.SanyoPhonebook.getmediaindex(self, builtins, maps, results, key) # the maps type='' for offset,indexfile,indextype,type,maxentries in maps: req=self.protocolclass.sanyochangedir() req.dirindex=indexfile res=self.sendpbcommand(req, self.protocolclass.sanyochangedirresponse) req=self.protocolclass.sanyonumfilesrequest() res=self.sendpbcommand(req, self.protocolclass.sanyonumfilesresponse) for ifile in range(res.count): req=self.protocolclass.sanyomediafilenamerequest() req.index=ifile res=self.sendpbcommand(req, self.protocolclass.sanyomediafilenameresponse) media[ifile+offset]={'name': res.filename, 'origin': "camera"} results[key]=media return media def getindex(self, location): "Get an index of files in a Sanyo directory" index={} req=self.protocolclass.sanyochangedir() req.dirindex=location res=self.sendpbcommand(req, self.protocolclass.sanyochangedirresponse) req=self.protocolclass.sanyonumfilesrequest() res=self.sendpbcommand(req, self.protocolclass.sanyonumfilesresponse) for ifile in range(res.count): req=self.protocolclass.sanyomediafilenamerequest() req.index=ifile res=self.sendpbcommand(req, self.protocolclass.sanyomediafilenameresponse) index[ifile]=res.filename return index def getmedia(self, exts, result, key): media={} # Essentially duplicating code in getmediaindices copypat=re.compile(r"(.*)\.(\d+)$") if key=="wallpapers": mediaindex=result['wallpaper-index'] else: mediaindex=result['ringtone-index'] for idir in range(self.FIRST_MEDIA_DIRECTORY, self.LAST_MEDIA_DIRECTORY+1): self.log("Reading "+key+" from directory "+`idir`) req=self.protocolclass.sanyochangedir() req.dirindex=idir res=self.sendpbcommand(req, self.protocolclass.sanyochangedirresponse) req=self.protocolclass.sanyonumfilesrequest() try: res=self.sendpbcommand(req, self.protocolclass.sanyonumfilesresponse) except com_sanyo.SanyoCommandException, ex: if ex.errnum!=121: raise self.log("Skipping directory "+`idir`) continue self.log("Directory "+`idir`+", File Count="+`res.count`) nfiles=res.count for ifile in range(nfiles): req=self.protocolclass.sanyomediafilenamerequest() req.index=ifile res=self.sendpbcommand(req, self.protocolclass.sanyomediafilenameresponse) # self.log(res.filename+": "+`res.num1`+" "+`res.num2`+" "+`res.num3`+" "+`res.num4`) orgname=res.filename if idir==self.CAMERA_DIRECTORY and res.num3!=0: idx=res.num3 else: idx=ifile+1000*idir # Get the file if it has the right extension for ext in exts: if orgname.endswith(ext): filename=mediaindex[idx]['name'] self.log("Retrieving file: "+orgname+", saving as "+filename) try: media[filename]=self.getsanyofilecontents(idir,ifile) except (com_brew.BrewNoSuchFileException,com_brew.BrewBadPathnameException): self.log("It was in the index, but not on the filesystem") break result[key]=media return result def getmediaold(self, maps, result, key): media={} for offset,indexfile,indextype,type,maxentries in maps: index=self.getindex(indexfile) for i in index: try: media[index[i]]=self.getsanyofilecontents(indexfile,i) except (com_brew.BrewNoSuchFileException,com_brew.BrewBadPathnameException): self.log("It was in the index, but not on the filesystem") result[key]=media return result def getwallpapers(self, result): return self.getmedia(self.wallpaperexts, result, 'wallpapers') def getringtones(self, result): return self.getmedia(self.ringerexts, result, 'ringtone') def getsanyofilecontents(self, directory, fileindex): "Get file # index from directory # directory" start=time.time() self.log("Getting file # "+`fileindex`+" from directory "+`directory`) desc="Reading "+`directory`+"/"+`fileindex` req=self.protocolclass.sanyochangedir() req.dirindex=directory res=self.sendpbcommand(req, self.protocolclass.sanyochangedirresponse) req=self.protocolclass.sanyonumfilesrequest() res=self.sendpbcommand(req, self.protocolclass.sanyonumfilesresponse) # Should check that fileindex requested does not exceed number # of files in directory req=self.protocolclass.sanyomediafilenamerequest() req.index=fileindex res=self.sendpbcommand(req, self.protocolclass.sanyomediafilenameresponse) req=self.protocolclass.sanyomediafragmentrequest() req.fileindex=fileindex # Can't find a way to get the file size so we can show progress data=cStringIO.StringIO() more=1 counter=0 filesize=0 while more==1: counter+=1 if counter%5==0: self.progress(counter%250, 250, desc) res=self.sendpbcommand(req,self.protocolclass.sanyomediafragmentresponse) data.write(res.data[0:res.length]) more=res.more filesize+=res.length self.progress(1,1,desc) data=data.getvalue() end=time.time() if end-start>3: self.log("Read "+`filesize`+" bytes at "+`int(filesize/(end-start))`+" bytes/second") return data bitpim-1.0.7+dfsg1/src/phones/p_lgc2000.p0000644001616600161660000002507010555026112016002 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lgc2000.p 3927 2007-01-22 03:15:22Z rogerb $ %{ """Various descriptions of data specific to LG C2000""" from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_etsi import * from p_lg import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb # general constants MEDIA_RINGTONE=0 MEDIA_WALLPAPER=1 MEDIA_PHOTO=6 GROUP_INDEX_RANGE=xrange(8) MIN_RINGTONE_INDEX=0 MAX_RINGTONE_INDEX=19 MIN_WALLPAPER_INDEX=0 MAX_WALLPAPER_INDEX=19 MIN_PHOTO_INDEX=0 MAX_PHOTO_INDEX=19 CHARSET_IRA='IRA' CHARSET_BASE64='Base64' CHARSET_GSM='GSM' CHARSET_HEX='HEX' CHARSET_PCCP437='PCCP437' CHARSET_PCDN='PCDN' CHARSET_8859_1='8859-1' CHARSET_UCS2='UCS2' # Calendar constants CAL_TOTAL_ENTRIES=30 CAL_MIN_INDEX=0 CAL_MAX_INDEX=29 CAL_DESC_LEN=30 CAL_REP_NONE=0 CAL_REP_DAILY=1 CAL_REP_WEEKLY=2 CAL_REP_MONTHLY=3 CAL_REP_YEARLY=4 CAL_ALARM_NONE=0 CAL_ALARM_ONTIME=1 CAL_ALARM_15MIN=2 CAL_ALARM_30MIN=3 CAL_ALARM_1HR=4 CAL_ALARM_1DAY=5 CAL_ALARM_VALUE={ CAL_ALARM_NONE: -1, CAL_ALARM_ONTIME: 0, CAL_ALARM_15MIN: 15, CAL_ALARM_30MIN: 30, CAL_ALARM_1HR: 60, CAL_ALARM_1DAY: 1440 } CAL_ALARM_LIST=((1440, CAL_ALARM_1DAY), (60, CAL_ALARM_1HR), (30, CAL_ALARM_30MIN), (15, CAL_ALARM_15MIN), (0, CAL_ALARM_ONTIME), (-1, CAL_ALARM_NONE)) # Phonebook constans PB_MEMORY_SIM='AD' PB_MEMORY_MAIN='ME' PB_MEMORY_LAST_DIALED='LD' PB_MEMORY_LAST_RECEIVED='LR' PB_MEMORY_LAST_MISSED='LM' PB_MAIN_TOTAL_ENTRIES=255 PB_MAIN_MIN_INDEX=1 PB_MAIN_MAX_INDEX=254 PB_SIM_TOTAL_ENTRIES=250 PB_SIM_MIN_INDEX=1 PB_SIM_MAX_INDEX=250 PB_NUMBER_LEN=40 # max size of a number string PB_NAME_LEN=20 # max size of a contact name PB_EMAIL_LEN=40 PB_MEMO_LEN=50 PB_SIM_NAME_LEN=16 PB_LD_MIN_INDEX=1 PB_LD_MAX_INDEX=10 PB_LR_MIN_INDEX=1 PB_LR_MAX_INDEX=20 PB_LM_MIN_INDEX=1 PB_LM_MAX_INDEX=10 PB_CALL_HISTORY_INFO=( ('Getting Last Dialed Calls', PB_MEMORY_LAST_DIALED, PB_LD_MIN_INDEX, PB_LD_MAX_INDEX), ('Getting Last Received Calls', PB_MEMORY_LAST_RECEIVED, PB_LR_MIN_INDEX, PB_LR_MAX_INDEX), ('Getting Missed Calls', PB_MEMORY_LAST_MISSED, PB_LM_MIN_INDEX, PB_LM_MAX_INDEX)) # Memo constants MEMO_MIN_INDEX=0 MEMO_MAX_INDEX=19 MEMO_READ_CMD='+CMDR' MEMO_WRITE_CMD='+CMDW' # SMS Constants SMS_MEMORY_PHONE='ME' SMS_MEMORY_SIM='SM' SMS_MEMORY_SELECT_CMD='+CPMS' SMS_FORMAT_TEXT=1 SMS_FORMAT_PDU=0 SMS_FORMAT_CMD='+CMGF' SMS_MSG_REC_UNREAD='REC UNREAD' SMS_MSG_REC_READ='REC READ' SMS_MSG_STO_UNSENT='STO UNSENT' SMS_MSG_STO_SENT='STO SENT' SMS_MSG_ALL='ALL' SMS_MSG_LIST_CMD='+CMGL' %} # calendar packets PACKET calendar_read_req: * USTRING { 'terminator': None, 'default': '+CXDR=' } +command * CSVINT +start_index * CSVINT { 'terminator': None } +end_index PACKET calendar_read_resp: * CSVSTRING {'quotechar': None, 'terminator': ord(' '), 'constant': '+CXDR:'} command * CSVINT index * CSVINT repeat * CSVINT alarm * GSMCALDATE date * GSMCALTIME time * CSVSTRING { 'terminator': None } description PACKET calendar_write_check_req: * USTRING { 'terminator': None, 'default': '+CXDW' } +command PACKET calendar_write_check_resp: * USTRING { 'terminator': ord(' '), 'constant': '+CXDW:' } command * CSVINT { 'terminator': None } index PACKET calendar_write_req: * USTRING { 'terminator': None, 'default': '+CXDW=' } +command * CSVINT +index * CSVINT +repeat * CSVINT +alarm * GSMCALDATE +date * GSMCALTIME +time * CSVSTRING { 'terminator': None, 'maxsizeinbytes': CAL_DESC_LEN, 'raiseontruncate': False } +description PACKET calendar_del_req: * USTRING { 'terminator': None, 'default': '+CXDW=' } +command * CSVINT { 'terminator': None } +index # Media packets PACKET media_selector_req: * USTRING { 'terminator': None, 'default': '+DDLS?' } +command PACKET media_selector_resp: * USTRING { 'terminator': ord(' '), 'constant': '+DDLS:' } command * CSVINT { 'terminator': None } media_type PACKET media_selector_set: * USTRING { 'terminator': None, 'default': '+DDLS=' } +command * CSVINT { 'terminator': None } +media_type PACKET media_list_req: * USTRING { 'terminator': None, 'default': '+DDLR=' } +command * CSVINT +start_index * CSVINT { 'terminator': None } +end_index PACKET media_list_resp: * CSVSTRING {'quotechar': None, 'terminator': ord(' '), 'constant': '+DDLR:'} command * CSVINT index * CSVSTRING file_name * CSVSTRING media_name * CSVINT size PACKET del_media_req: * USTRING { 'terminator': None, 'default': '+DDLD=0,' } +command * CSVSTRING { 'terminator': None } +file_name PACKET write_media_req: * USTRING { 'terminator': None, 'default': '+DDLW=' } +command * CSVINT +index * CSVSTRING +file_name * CSVSTRING +media_name * CSVINT data_len * CSVINT media_type * CSVINT { 'default': 0 } +dunno1 # width? * CSVINT { 'default': 0 } +dunno2 # height? * CSVINT { 'default': 0 } +dunno3 # #of colors? * CSVINT { 'default': 0, 'terminator': ord('\r') } +dunno4 # * USTRING { 'terminator': None } +data # Phonebook packets PACKET list_group_req: * USTRING { 'terminator': None, 'default': '+CPGR=' } +command * CSVINT +start_index * CSVINT { 'terminator': None } +end_index PACKET list_group_resp: * USTRING { 'terminator': ord(' '), 'constant': '+CPGR:' } command * CSVINT index * CSVSTRING { 'terminator': None } group_name PACKET charset_set_req: * USTRING { 'terminator': None, 'default': '+CSCS=' } +command * CSVSTRING { 'terminator': None } +charset PACKET select_storage_req: * USTRING { 'terminator': None, 'default': '+CPBS=' } +command * CSVSTRING { 'terminator': None } +storage PACKET select_storage_resp: * USTRING { 'terminator': ord(' '), 'constant': '+CPBS:' } command * CSVSTRING storage * CSVINT used_slots_count * CSVINT total_slots_count * CSVINT { 'terminator': None } dunno PACKET read_phonebook_req: * USTRING { 'terminator': None, 'default': '+CPBR=' } +command * CSVINT +start_index * CSVINT { 'terminator': None } +end_index PACKET read_phonebook_resp: P BOOL { 'default': False } +sim * USTRING { 'terminator': ord(' '), 'constant': '+CPBR:' } command * CSVINT index * CSVINT group * CSVSTRING mobile * CSVINT mobile_type * CSVSTRING home * CSVINT home_type * CSVSTRING office * CSVINT office_type * CSVSTRING name * CSVSTRING email * CSVSTRING memo PACKET read_sim_phonebook_resp: * USTRING { 'terminator': ord(' '), 'constant': '+CPBR:' } command * CSVINT index * CSVINT group * CSVSTRING mobile * CSVINT mobile_type * CSVSTRING name P USTRING { 'terminator': None, 'default': '' } +home P USTRING { 'terminator': None, 'default': '' } +office P USTRING { 'terminator': None, 'default': '' } +email P USTRING { 'terminator': None, 'default': '' } +memo P BOOL { 'default': True } +sim PACKET del_phonebook_req: * USTRING { 'terminator': None, 'default': '+CPBW=' } +command * CSVINT { 'terminator': None } +index PACKET update_phonebook_resp: * USTRING { 'terminator': ord(' '), 'constant': '+CPBW:' } command * CSVINT { 'terminator': None } index PACKET write_phonebook_req: * USTRING { 'terminator': None, 'default': '+CPBW=,' } +command * CSVINT +group * CSVSTRING { 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False } +mobile * CSVINT { 'default': 255 } +mobile_type * CSVSTRING { 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False } +home * CSVINT { 'default': 255 } +home_type * CSVSTRING { 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False } +office * CSVINT { 'default': 255 } +office_type * CSVSTRING { 'maxsizeinbytes': PB_NAME_LEN, 'raiseontruncate': False } +name * CSVSTRING { 'default': '', 'maxsizeinbytes': PB_EMAIL_LEN, 'raiseontruncate': False } +email * CSVSTRING { 'terminator': None, 'default': '', 'maxsizeinbytes': PB_MEMO_LEN, 'raiseontruncate': False } +memo PACKET write_sim_phonebook_req: * USTRING { 'terminator': None, 'default': '+CPBW=,' } +command * CSVINT { 'default': 0 } +group * CSVSTRING { 'default': '', 'maxsizeinbytes': PB_NUMBER_LEN, 'raiseontruncate': False } +number * CSVINT { 'default': 255 } +number_type * CSVSTRING { 'terminator': None, 'maxsizeinbytes': PB_SIM_NAME_LEN, 'raiseontruncate': False } +name # Memo packets PACKET memo_read_req: * USTRING { 'terminator': None, 'default': MEMO_READ_CMD+'=' } +command * CSVINT { 'default': MEMO_MIN_INDEX } +start_index * CSVINT { 'terminator': None, 'default': MEMO_MAX_INDEX } +end_index PACKET memo_read_resp: * USTRING { 'terminator': ord(' '), 'constant': MEMO_READ_CMD+':' } command * CSVINT index * CSVSTRING { 'terminator': None } text PACKET memo_write_req: * USTRING { 'terminator': None, 'default': MEMO_WRITE_CMD+'=,' } +command * CSVSTRING { 'terminator': None } +text PACKET memo_del_req: * USTRING { 'terminator': None, 'default': MEMO_WRITE_CMD+'=' } +command * CSVINT { 'terminator': None } +index # SMS packets PACKET sms_format_req: * USTRING { 'terminator': None, 'default': SMS_FORMAT_CMD+'=' } +command * CSVINT { 'terminator': None, 'default': SMS_FORMAT_TEXT } +format PACKET sms_memory_select_req: * USTRING { 'terminator': None, 'default': SMS_MEMORY_SELECT_CMD+'=' } +command * CSVSTRING { 'terminator': None } +list_memory PACKET sms_msg_list_req: * USTRING { 'terminator': None, 'default': SMS_MSG_LIST_CMD+'=' } +command * CSVSTRING { 'terminator': None, 'default': SMS_MSG_ALL } +msg_type PACKET sms_msg_list_header: * USTRING { 'terminator': ord(' '), 'constant': SMS_MSG_LIST_CMD+':' } command * CSVINT index * CSVSTRING msg_type * CSVSTRING address * CSVSTRING address_name * SMSDATETIME timestamp * CSVINT address_type * CSVINT { 'terminator': None } data_len bitpim-1.0.7+dfsg1/src/phones/p_samsungscha930.py0000644001616600161660000017175710604002154017705 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to the Samsung SCH-A950 Phone""" from prototypes import * from prototypes_samsung import * from p_brew import * from p_samsungscha950 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb # Calendar stuff CAL_PATH='sch_event' CAL_INDEX_FILE_NAME=CAL_PATH+'/usr_tsk' CAL_FILE_NAME_PREFIX=CAL_PATH+'/usr_tsk_' CAL_MAX_EVENTS=100 CAL_REMINDER_OFF=3 CAL_REMINDER_ONCE=0 CAL_REMINDER_2MIN=1 CAL_REMINDER_15MIN=2 # vide stuff FLIX_PATH='brew/16452/mf' # Call log/history CL_MAX_ENTRIES=90 class WRingtoneIndexEntry(BaseProtogenClass): __fields=['path_prefix', 'pathname', 'eor'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(WRingtoneIndexEntry,self).__init__(**dict) if self.__class__ is WRingtoneIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(WRingtoneIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(WRingtoneIndexEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_path_prefix except: self.__field_path_prefix=STRING(**{ 'terminator': None, 'default': '/ff/' }) self.__field_path_prefix.writetobuffer(buf) self.__field_pathname.writetobuffer(buf) try: self.__field_eor except: self.__field_eor=STRING(**{ 'terminator': None, 'default': '|0|2\x0A' }) self.__field_eor.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_path_prefix=STRING(**{ 'terminator': None, 'default': '/ff/' }) self.__field_path_prefix.readfrombuffer(buf) self.__field_pathname=STRING(**{ 'terminator': None }) self.__field_pathname.readfrombuffer(buf) self.__field_eor=STRING(**{ 'terminator': None, 'default': '|0|2\x0A' }) self.__field_eor.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_path_prefix(self): try: self.__field_path_prefix except: self.__field_path_prefix=STRING(**{ 'terminator': None, 'default': '/ff/' }) return self.__field_path_prefix.getvalue() def __setfield_path_prefix(self, value): if isinstance(value,STRING): self.__field_path_prefix=value else: self.__field_path_prefix=STRING(value,**{ 'terminator': None, 'default': '/ff/' }) def __delfield_path_prefix(self): del self.__field_path_prefix path_prefix=property(__getfield_path_prefix, __setfield_path_prefix, __delfield_path_prefix, None) def __getfield_pathname(self): return self.__field_pathname.getvalue() def __setfield_pathname(self, value): if isinstance(value,STRING): self.__field_pathname=value else: self.__field_pathname=STRING(value,**{ 'terminator': None }) def __delfield_pathname(self): del self.__field_pathname pathname=property(__getfield_pathname, __setfield_pathname, __delfield_pathname, None) def __getfield_eor(self): try: self.__field_eor except: self.__field_eor=STRING(**{ 'terminator': None, 'default': '|0|2\x0A' }) return self.__field_eor.getvalue() def __setfield_eor(self, value): if isinstance(value,STRING): self.__field_eor=value else: self.__field_eor=STRING(value,**{ 'terminator': None, 'default': '|0|2\x0A' }) def __delfield_eor(self): del self.__field_eor eor=property(__getfield_eor, __setfield_eor, __delfield_eor, None) def iscontainer(self): return True def containerelements(self): yield ('path_prefix', self.__field_path_prefix, None) yield ('pathname', self.__field_pathname, None) yield ('eor', self.__field_eor, None) class WRingtoneIndexFile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(WRingtoneIndexFile,self).__init__(**dict) if self.__class__ is WRingtoneIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(WRingtoneIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(WRingtoneIndexFile,kwargs) if len(args): dict2={ 'elementclass': WRingtoneIndexEntry } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': WRingtoneIndexEntry }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': WRingtoneIndexEntry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': WRingtoneIndexEntry }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': WRingtoneIndexEntry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class RRingtoneIndexEntry(BaseProtogenClass): __fields=['pathname', 'misc'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(RRingtoneIndexEntry,self).__init__(**dict) if self.__class__ is RRingtoneIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(RRingtoneIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(RRingtoneIndexEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pathname.writetobuffer(buf) self.__field_misc.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pathname=STRING(**{ 'terminator': 0x7C }) self.__field_pathname.readfrombuffer(buf) self.__field_misc=STRING(**{ 'terminator': 0x0A }) self.__field_misc.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pathname(self): return self.__field_pathname.getvalue() def __setfield_pathname(self, value): if isinstance(value,STRING): self.__field_pathname=value else: self.__field_pathname=STRING(value,**{ 'terminator': 0x7C }) def __delfield_pathname(self): del self.__field_pathname pathname=property(__getfield_pathname, __setfield_pathname, __delfield_pathname, None) def __getfield_misc(self): return self.__field_misc.getvalue() def __setfield_misc(self, value): if isinstance(value,STRING): self.__field_misc=value else: self.__field_misc=STRING(value,**{ 'terminator': 0x0A }) def __delfield_misc(self): del self.__field_misc misc=property(__getfield_misc, __setfield_misc, __delfield_misc, None) def iscontainer(self): return True def containerelements(self): yield ('pathname', self.__field_pathname, None) yield ('misc', self.__field_misc, None) class RRingtoneIndexFile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(RRingtoneIndexFile,self).__init__(**dict) if self.__class__ is RRingtoneIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(RRingtoneIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(RRingtoneIndexFile,kwargs) if len(args): dict2={ 'elementclass': RRingtoneIndexEntry } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': RRingtoneIndexEntry }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': RRingtoneIndexEntry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': RRingtoneIndexEntry }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': RRingtoneIndexEntry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class CalIndexEntry(BaseProtogenClass): __fields=['index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(CalIndexEntry,self).__init__(**dict) if self.__class__ is CalIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(CalIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(CalIndexEntry,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0 } dict2.update(kwargs) kwargs=dict2 self.__field_index=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) class CalIndexFile(BaseProtogenClass): __fields=['next_index', 'zero1', 'numofevents', 'zero2', 'numofnotes', 'zero3', 'numofactiveevents', 'zero4', 'events', 'notes', 'activeevents'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(CalIndexFile,self).__init__(**dict) if self.__class__ is CalIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(CalIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(CalIndexFile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_next_index.writetobuffer(buf) try: self.__field_zero1 except: self.__field_zero1=UNKNOWN(**{'sizeinbytes': 12, 'pad': 0 }) self.__field_zero1.writetobuffer(buf) self.__field_numofevents.writetobuffer(buf) try: self.__field_zero2 except: self.__field_zero2=UNKNOWN(**{'sizeinbytes': 6, 'pad': 0 }) self.__field_zero2.writetobuffer(buf) self.__field_numofnotes.writetobuffer(buf) try: self.__field_zero3 except: self.__field_zero3=UNKNOWN(**{'sizeinbytes': 2, 'pad': 0 }) self.__field_zero3.writetobuffer(buf) self.__field_numofactiveevents.writetobuffer(buf) try: self.__field_zero4 except: self.__field_zero4=UNKNOWN(**{'sizeinbytes': 112, 'pad': 0 }) self.__field_zero4.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{ 'elementclass': CalIndexEntry, 'length': 103, 'createdefault': True }) self.__field_events.writetobuffer(buf) try: self.__field_notes except: self.__field_notes=LIST(**{ 'elementclass': CalIndexEntry, 'length': 30, 'createdefault': True }) self.__field_notes.writetobuffer(buf) try: self.__field_activeevents except: self.__field_activeevents=LIST(**{ 'elementclass': CalIndexEntry, 'length': 324, 'createdefault': True }) self.__field_activeevents.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_next_index=UINT(**{'sizeinbytes': 2}) self.__field_next_index.readfrombuffer(buf) self.__field_zero1=UNKNOWN(**{'sizeinbytes': 12, 'pad': 0 }) self.__field_zero1.readfrombuffer(buf) self.__field_numofevents=UINT(**{'sizeinbytes': 2}) self.__field_numofevents.readfrombuffer(buf) self.__field_zero2=UNKNOWN(**{'sizeinbytes': 6, 'pad': 0 }) self.__field_zero2.readfrombuffer(buf) self.__field_numofnotes=UINT(**{'sizeinbytes': 2}) self.__field_numofnotes.readfrombuffer(buf) self.__field_zero3=UNKNOWN(**{'sizeinbytes': 2, 'pad': 0 }) self.__field_zero3.readfrombuffer(buf) self.__field_numofactiveevents=UINT(**{'sizeinbytes': 2}) self.__field_numofactiveevents.readfrombuffer(buf) self.__field_zero4=UNKNOWN(**{'sizeinbytes': 112, 'pad': 0 }) self.__field_zero4.readfrombuffer(buf) self.__field_events=LIST(**{ 'elementclass': CalIndexEntry, 'length': 103, 'createdefault': True }) self.__field_events.readfrombuffer(buf) self.__field_notes=LIST(**{ 'elementclass': CalIndexEntry, 'length': 30, 'createdefault': True }) self.__field_notes.readfrombuffer(buf) self.__field_activeevents=LIST(**{ 'elementclass': CalIndexEntry, 'length': 324, 'createdefault': True }) self.__field_activeevents.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_next_index(self): return self.__field_next_index.getvalue() def __setfield_next_index(self, value): if isinstance(value,UINT): self.__field_next_index=value else: self.__field_next_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_next_index(self): del self.__field_next_index next_index=property(__getfield_next_index, __setfield_next_index, __delfield_next_index, None) def __getfield_zero1(self): try: self.__field_zero1 except: self.__field_zero1=UNKNOWN(**{'sizeinbytes': 12, 'pad': 0 }) return self.__field_zero1.getvalue() def __setfield_zero1(self, value): if isinstance(value,UNKNOWN): self.__field_zero1=value else: self.__field_zero1=UNKNOWN(value,**{'sizeinbytes': 12, 'pad': 0 }) def __delfield_zero1(self): del self.__field_zero1 zero1=property(__getfield_zero1, __setfield_zero1, __delfield_zero1, None) def __getfield_numofevents(self): return self.__field_numofevents.getvalue() def __setfield_numofevents(self, value): if isinstance(value,UINT): self.__field_numofevents=value else: self.__field_numofevents=UINT(value,**{'sizeinbytes': 2}) def __delfield_numofevents(self): del self.__field_numofevents numofevents=property(__getfield_numofevents, __setfield_numofevents, __delfield_numofevents, None) def __getfield_zero2(self): try: self.__field_zero2 except: self.__field_zero2=UNKNOWN(**{'sizeinbytes': 6, 'pad': 0 }) return self.__field_zero2.getvalue() def __setfield_zero2(self, value): if isinstance(value,UNKNOWN): self.__field_zero2=value else: self.__field_zero2=UNKNOWN(value,**{'sizeinbytes': 6, 'pad': 0 }) def __delfield_zero2(self): del self.__field_zero2 zero2=property(__getfield_zero2, __setfield_zero2, __delfield_zero2, None) def __getfield_numofnotes(self): return self.__field_numofnotes.getvalue() def __setfield_numofnotes(self, value): if isinstance(value,UINT): self.__field_numofnotes=value else: self.__field_numofnotes=UINT(value,**{'sizeinbytes': 2}) def __delfield_numofnotes(self): del self.__field_numofnotes numofnotes=property(__getfield_numofnotes, __setfield_numofnotes, __delfield_numofnotes, None) def __getfield_zero3(self): try: self.__field_zero3 except: self.__field_zero3=UNKNOWN(**{'sizeinbytes': 2, 'pad': 0 }) return self.__field_zero3.getvalue() def __setfield_zero3(self, value): if isinstance(value,UNKNOWN): self.__field_zero3=value else: self.__field_zero3=UNKNOWN(value,**{'sizeinbytes': 2, 'pad': 0 }) def __delfield_zero3(self): del self.__field_zero3 zero3=property(__getfield_zero3, __setfield_zero3, __delfield_zero3, None) def __getfield_numofactiveevents(self): return self.__field_numofactiveevents.getvalue() def __setfield_numofactiveevents(self, value): if isinstance(value,UINT): self.__field_numofactiveevents=value else: self.__field_numofactiveevents=UINT(value,**{'sizeinbytes': 2}) def __delfield_numofactiveevents(self): del self.__field_numofactiveevents numofactiveevents=property(__getfield_numofactiveevents, __setfield_numofactiveevents, __delfield_numofactiveevents, None) def __getfield_zero4(self): try: self.__field_zero4 except: self.__field_zero4=UNKNOWN(**{'sizeinbytes': 112, 'pad': 0 }) return self.__field_zero4.getvalue() def __setfield_zero4(self, value): if isinstance(value,UNKNOWN): self.__field_zero4=value else: self.__field_zero4=UNKNOWN(value,**{'sizeinbytes': 112, 'pad': 0 }) def __delfield_zero4(self): del self.__field_zero4 zero4=property(__getfield_zero4, __setfield_zero4, __delfield_zero4, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{ 'elementclass': CalIndexEntry, 'length': 103, 'createdefault': True }) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{ 'elementclass': CalIndexEntry, 'length': 103, 'createdefault': True }) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def __getfield_notes(self): try: self.__field_notes except: self.__field_notes=LIST(**{ 'elementclass': CalIndexEntry, 'length': 30, 'createdefault': True }) return self.__field_notes.getvalue() def __setfield_notes(self, value): if isinstance(value,LIST): self.__field_notes=value else: self.__field_notes=LIST(value,**{ 'elementclass': CalIndexEntry, 'length': 30, 'createdefault': True }) def __delfield_notes(self): del self.__field_notes notes=property(__getfield_notes, __setfield_notes, __delfield_notes, None) def __getfield_activeevents(self): try: self.__field_activeevents except: self.__field_activeevents=LIST(**{ 'elementclass': CalIndexEntry, 'length': 324, 'createdefault': True }) return self.__field_activeevents.getvalue() def __setfield_activeevents(self, value): if isinstance(value,LIST): self.__field_activeevents=value else: self.__field_activeevents=LIST(value,**{ 'elementclass': CalIndexEntry, 'length': 324, 'createdefault': True }) def __delfield_activeevents(self): del self.__field_activeevents activeevents=property(__getfield_activeevents, __setfield_activeevents, __delfield_activeevents, None) def iscontainer(self): return True def containerelements(self): yield ('next_index', self.__field_next_index, None) yield ('zero1', self.__field_zero1, None) yield ('numofevents', self.__field_numofevents, None) yield ('zero2', self.__field_zero2, None) yield ('numofnotes', self.__field_numofnotes, None) yield ('zero3', self.__field_zero3, None) yield ('numofactiveevents', self.__field_numofactiveevents, None) yield ('zero4', self.__field_zero4, None) yield ('events', self.__field_events, None) yield ('notes', self.__field_notes, None) yield ('activeevents', self.__field_activeevents, None) class CalEntry(BaseProtogenClass): __fields=['titlelen', 'title', 'start', 'zero1', 'start2', 'zero2', 'exptime', 'zero3', 'one', 'repeat', 'three', 'alarm', 'alert', 'reminder', 'zero4', 'duration', 'timezone', 'creationtime', 'zero5', 'modifiedtime', 'zero6', 'ringtonelen', 'ringtone', 'zero7'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(CalEntry,self).__init__(**dict) if self.__class__ is CalEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(CalEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(CalEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_titlelen.writetobuffer(buf) self.__field_title.writetobuffer(buf) self.__field_start.writetobuffer(buf) try: self.__field_zero1 except: self.__field_zero1=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) self.__field_zero1.writetobuffer(buf) try: self.__field_start2 except: self.__field_start2=DateTime(**{'sizeinbytes': 4, 'default': self.start }) self.__field_start2.writetobuffer(buf) try: self.__field_zero2 except: self.__field_zero2=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) self.__field_zero2.writetobuffer(buf) self.__field_exptime.writetobuffer(buf) try: self.__field_zero3 except: self.__field_zero3=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) self.__field_zero3.writetobuffer(buf) try: self.__field_one except: self.__field_one=UINT(**{'sizeinbytes': 1, 'default': 1 }) self.__field_one.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) try: self.__field_three except: self.__field_three=UINT(**{'sizeinbytes': 1, 'default': 3 }) self.__field_three.writetobuffer(buf) self.__field_alarm.writetobuffer(buf) self.__field_alert.writetobuffer(buf) try: self.__field_reminder except: self.__field_reminder=UINT(**{'sizeinbytes': 1, 'default': CAL_REMINDER_ONCE }) self.__field_reminder.writetobuffer(buf) try: self.__field_zero4 except: self.__field_zero4=UNKNOWN(**{'sizeinbytes': 5, 'pad': 0 }) self.__field_zero4.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_timezone.writetobuffer(buf) self.__field_creationtime.writetobuffer(buf) try: self.__field_zero5 except: self.__field_zero5=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) self.__field_zero5.writetobuffer(buf) self.__field_modifiedtime.writetobuffer(buf) try: self.__field_zero6 except: self.__field_zero6=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) self.__field_zero6.writetobuffer(buf) self.__field_ringtonelen.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) try: self.__field_zero7 except: self.__field_zero7=UNKNOWN(**{'sizeinbytes': 2, 'pad': 0 }) self.__field_zero7.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_titlelen=UINT(**{'sizeinbytes': 2}) self.__field_titlelen.readfrombuffer(buf) self.__field_title=USTRING(**{ 'sizeinbytes': self.titlelen, 'encoding': ENCODING, 'terminator': None }) self.__field_title.readfrombuffer(buf) self.__field_start=DateTime(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_zero1=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) self.__field_zero1.readfrombuffer(buf) self.__field_start2=DateTime(**{'sizeinbytes': 4, 'default': self.start }) self.__field_start2.readfrombuffer(buf) self.__field_zero2=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) self.__field_zero2.readfrombuffer(buf) self.__field_exptime=ExpiringTime(**{'sizeinbytes': 4}) self.__field_exptime.readfrombuffer(buf) self.__field_zero3=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) self.__field_zero3.readfrombuffer(buf) self.__field_one=UINT(**{'sizeinbytes': 1, 'default': 1 }) self.__field_one.readfrombuffer(buf) self.__field_repeat=UINT(**{'sizeinbytes': 1}) self.__field_repeat.readfrombuffer(buf) self.__field_three=UINT(**{'sizeinbytes': 1, 'default': 3 }) self.__field_three.readfrombuffer(buf) self.__field_alarm=UINT(**{'sizeinbytes': 1}) self.__field_alarm.readfrombuffer(buf) self.__field_alert=UINT(**{'sizeinbytes': 1}) self.__field_alert.readfrombuffer(buf) self.__field_reminder=UINT(**{'sizeinbytes': 1, 'default': CAL_REMINDER_ONCE }) self.__field_reminder.readfrombuffer(buf) self.__field_zero4=UNKNOWN(**{'sizeinbytes': 5, 'pad': 0 }) self.__field_zero4.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_timezone=UINT(**{'sizeinbytes': 1}) self.__field_timezone.readfrombuffer(buf) self.__field_creationtime=DateTime(**{'sizeinbytes': 4}) self.__field_creationtime.readfrombuffer(buf) self.__field_zero5=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) self.__field_zero5.readfrombuffer(buf) self.__field_modifiedtime=DateTime(**{'sizeinbytes': 4}) self.__field_modifiedtime.readfrombuffer(buf) self.__field_zero6=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) self.__field_zero6.readfrombuffer(buf) self.__field_ringtonelen=UINT(**{'sizeinbytes': 2}) self.__field_ringtonelen.readfrombuffer(buf) self.__field_ringtone=STRING(**{ 'sizeinbytes': self.ringtonelen, 'terminator': None }) self.__field_ringtone.readfrombuffer(buf) self.__field_zero7=UNKNOWN(**{'sizeinbytes': 2, 'pad': 0 }) self.__field_zero7.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_titlelen(self): return self.__field_titlelen.getvalue() def __setfield_titlelen(self, value): if isinstance(value,UINT): self.__field_titlelen=value else: self.__field_titlelen=UINT(value,**{'sizeinbytes': 2}) def __delfield_titlelen(self): del self.__field_titlelen titlelen=property(__getfield_titlelen, __setfield_titlelen, __delfield_titlelen, None) def __getfield_title(self): return self.__field_title.getvalue() def __setfield_title(self, value): if isinstance(value,USTRING): self.__field_title=value else: self.__field_title=USTRING(value,**{ 'sizeinbytes': self.titlelen, 'encoding': ENCODING, 'terminator': None }) def __delfield_title(self): del self.__field_title title=property(__getfield_title, __setfield_title, __delfield_title, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,DateTime): self.__field_start=value else: self.__field_start=DateTime(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_zero1(self): try: self.__field_zero1 except: self.__field_zero1=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) return self.__field_zero1.getvalue() def __setfield_zero1(self, value): if isinstance(value,UNKNOWN): self.__field_zero1=value else: self.__field_zero1=UNKNOWN(value,**{'sizeinbytes': 4, 'pad': 0 }) def __delfield_zero1(self): del self.__field_zero1 zero1=property(__getfield_zero1, __setfield_zero1, __delfield_zero1, None) def __getfield_start2(self): try: self.__field_start2 except: self.__field_start2=DateTime(**{'sizeinbytes': 4, 'default': self.start }) return self.__field_start2.getvalue() def __setfield_start2(self, value): if isinstance(value,DateTime): self.__field_start2=value else: self.__field_start2=DateTime(value,**{'sizeinbytes': 4, 'default': self.start }) def __delfield_start2(self): del self.__field_start2 start2=property(__getfield_start2, __setfield_start2, __delfield_start2, None) def __getfield_zero2(self): try: self.__field_zero2 except: self.__field_zero2=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) return self.__field_zero2.getvalue() def __setfield_zero2(self, value): if isinstance(value,UNKNOWN): self.__field_zero2=value else: self.__field_zero2=UNKNOWN(value,**{'sizeinbytes': 4, 'pad': 0 }) def __delfield_zero2(self): del self.__field_zero2 zero2=property(__getfield_zero2, __setfield_zero2, __delfield_zero2, None) def __getfield_exptime(self): return self.__field_exptime.getvalue() def __setfield_exptime(self, value): if isinstance(value,ExpiringTime): self.__field_exptime=value else: self.__field_exptime=ExpiringTime(value,**{'sizeinbytes': 4}) def __delfield_exptime(self): del self.__field_exptime exptime=property(__getfield_exptime, __setfield_exptime, __delfield_exptime, None) def __getfield_zero3(self): try: self.__field_zero3 except: self.__field_zero3=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) return self.__field_zero3.getvalue() def __setfield_zero3(self, value): if isinstance(value,UNKNOWN): self.__field_zero3=value else: self.__field_zero3=UNKNOWN(value,**{'sizeinbytes': 4, 'pad': 0 }) def __delfield_zero3(self): del self.__field_zero3 zero3=property(__getfield_zero3, __setfield_zero3, __delfield_zero3, None) def __getfield_one(self): try: self.__field_one except: self.__field_one=UINT(**{'sizeinbytes': 1, 'default': 1 }) return self.__field_one.getvalue() def __setfield_one(self, value): if isinstance(value,UINT): self.__field_one=value else: self.__field_one=UINT(value,**{'sizeinbytes': 1, 'default': 1 }) def __delfield_one(self): del self.__field_one one=property(__getfield_one, __setfield_one, __delfield_one, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,UINT): self.__field_repeat=value else: self.__field_repeat=UINT(value,**{'sizeinbytes': 1}) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_three(self): try: self.__field_three except: self.__field_three=UINT(**{'sizeinbytes': 1, 'default': 3 }) return self.__field_three.getvalue() def __setfield_three(self, value): if isinstance(value,UINT): self.__field_three=value else: self.__field_three=UINT(value,**{'sizeinbytes': 1, 'default': 3 }) def __delfield_three(self): del self.__field_three three=property(__getfield_three, __setfield_three, __delfield_three, None) def __getfield_alarm(self): return self.__field_alarm.getvalue() def __setfield_alarm(self, value): if isinstance(value,UINT): self.__field_alarm=value else: self.__field_alarm=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarm(self): del self.__field_alarm alarm=property(__getfield_alarm, __setfield_alarm, __delfield_alarm, None) def __getfield_alert(self): return self.__field_alert.getvalue() def __setfield_alert(self, value): if isinstance(value,UINT): self.__field_alert=value else: self.__field_alert=UINT(value,**{'sizeinbytes': 1}) def __delfield_alert(self): del self.__field_alert alert=property(__getfield_alert, __setfield_alert, __delfield_alert, None) def __getfield_reminder(self): try: self.__field_reminder except: self.__field_reminder=UINT(**{'sizeinbytes': 1, 'default': CAL_REMINDER_ONCE }) return self.__field_reminder.getvalue() def __setfield_reminder(self, value): if isinstance(value,UINT): self.__field_reminder=value else: self.__field_reminder=UINT(value,**{'sizeinbytes': 1, 'default': CAL_REMINDER_ONCE }) def __delfield_reminder(self): del self.__field_reminder reminder=property(__getfield_reminder, __setfield_reminder, __delfield_reminder, None) def __getfield_zero4(self): try: self.__field_zero4 except: self.__field_zero4=UNKNOWN(**{'sizeinbytes': 5, 'pad': 0 }) return self.__field_zero4.getvalue() def __setfield_zero4(self, value): if isinstance(value,UNKNOWN): self.__field_zero4=value else: self.__field_zero4=UNKNOWN(value,**{'sizeinbytes': 5, 'pad': 0 }) def __delfield_zero4(self): del self.__field_zero4 zero4=property(__getfield_zero4, __setfield_zero4, __delfield_zero4, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_timezone(self): return self.__field_timezone.getvalue() def __setfield_timezone(self, value): if isinstance(value,UINT): self.__field_timezone=value else: self.__field_timezone=UINT(value,**{'sizeinbytes': 1}) def __delfield_timezone(self): del self.__field_timezone timezone=property(__getfield_timezone, __setfield_timezone, __delfield_timezone, None) def __getfield_creationtime(self): return self.__field_creationtime.getvalue() def __setfield_creationtime(self, value): if isinstance(value,DateTime): self.__field_creationtime=value else: self.__field_creationtime=DateTime(value,**{'sizeinbytes': 4}) def __delfield_creationtime(self): del self.__field_creationtime creationtime=property(__getfield_creationtime, __setfield_creationtime, __delfield_creationtime, None) def __getfield_zero5(self): try: self.__field_zero5 except: self.__field_zero5=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) return self.__field_zero5.getvalue() def __setfield_zero5(self, value): if isinstance(value,UNKNOWN): self.__field_zero5=value else: self.__field_zero5=UNKNOWN(value,**{'sizeinbytes': 4, 'pad': 0 }) def __delfield_zero5(self): del self.__field_zero5 zero5=property(__getfield_zero5, __setfield_zero5, __delfield_zero5, None) def __getfield_modifiedtime(self): return self.__field_modifiedtime.getvalue() def __setfield_modifiedtime(self, value): if isinstance(value,DateTime): self.__field_modifiedtime=value else: self.__field_modifiedtime=DateTime(value,**{'sizeinbytes': 4}) def __delfield_modifiedtime(self): del self.__field_modifiedtime modifiedtime=property(__getfield_modifiedtime, __setfield_modifiedtime, __delfield_modifiedtime, None) def __getfield_zero6(self): try: self.__field_zero6 except: self.__field_zero6=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) return self.__field_zero6.getvalue() def __setfield_zero6(self, value): if isinstance(value,UNKNOWN): self.__field_zero6=value else: self.__field_zero6=UNKNOWN(value,**{'sizeinbytes': 4, 'pad': 0 }) def __delfield_zero6(self): del self.__field_zero6 zero6=property(__getfield_zero6, __setfield_zero6, __delfield_zero6, None) def __getfield_ringtonelen(self): return self.__field_ringtonelen.getvalue() def __setfield_ringtonelen(self, value): if isinstance(value,UINT): self.__field_ringtonelen=value else: self.__field_ringtonelen=UINT(value,**{'sizeinbytes': 2}) def __delfield_ringtonelen(self): del self.__field_ringtonelen ringtonelen=property(__getfield_ringtonelen, __setfield_ringtonelen, __delfield_ringtonelen, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,STRING): self.__field_ringtone=value else: self.__field_ringtone=STRING(value,**{ 'sizeinbytes': self.ringtonelen, 'terminator': None }) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_zero7(self): try: self.__field_zero7 except: self.__field_zero7=UNKNOWN(**{'sizeinbytes': 2, 'pad': 0 }) return self.__field_zero7.getvalue() def __setfield_zero7(self, value): if isinstance(value,UNKNOWN): self.__field_zero7=value else: self.__field_zero7=UNKNOWN(value,**{'sizeinbytes': 2, 'pad': 0 }) def __delfield_zero7(self): del self.__field_zero7 zero7=property(__getfield_zero7, __setfield_zero7, __delfield_zero7, None) def iscontainer(self): return True def containerelements(self): yield ('titlelen', self.__field_titlelen, None) yield ('title', self.__field_title, None) yield ('start', self.__field_start, None) yield ('zero1', self.__field_zero1, None) yield ('start2', self.__field_start2, None) yield ('zero2', self.__field_zero2, None) yield ('exptime', self.__field_exptime, None) yield ('zero3', self.__field_zero3, None) yield ('one', self.__field_one, None) yield ('repeat', self.__field_repeat, None) yield ('three', self.__field_three, None) yield ('alarm', self.__field_alarm, None) yield ('alert', self.__field_alert, None) yield ('reminder', self.__field_reminder, None) yield ('zero4', self.__field_zero4, None) yield ('duration', self.__field_duration, None) yield ('timezone', self.__field_timezone, None) yield ('creationtime', self.__field_creationtime, None) yield ('zero5', self.__field_zero5, None) yield ('modifiedtime', self.__field_modifiedtime, None) yield ('zero6', self.__field_zero6, None) yield ('ringtonelen', self.__field_ringtonelen, None) yield ('ringtone', self.__field_ringtone, None) yield ('zero7', self.__field_zero7, None) class cl_list(BaseProtogenClass): __fields=['index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(cl_list,self).__init__(**dict) if self.__class__ is cl_list: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(cl_list,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(cl_list,kwargs) if len(args): dict2={'sizeinbytes': 2} dict2.update(kwargs) kwargs=dict2 self.__field_index=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) class cl_index_file(BaseProtogenClass): __fields=['incoming', 'outgoing', 'missed', 'dunno1', 'incoming_count', 'outgoing_count', 'missed_count'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(cl_index_file,self).__init__(**dict) if self.__class__ is cl_index_file: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(cl_index_file,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(cl_index_file,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_incoming.writetobuffer(buf) self.__field_outgoing.writetobuffer(buf) self.__field_missed.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_incoming_count.writetobuffer(buf) self.__field_outgoing_count.writetobuffer(buf) self.__field_missed_count.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_incoming=LIST(**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) self.__field_incoming.readfrombuffer(buf) self.__field_outgoing=LIST(**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) self.__field_outgoing.readfrombuffer(buf) self.__field_missed=LIST(**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) self.__field_missed.readfrombuffer(buf) self.__field_dunno1=UNKNOWN(**{'sizeinbytes': 992}) self.__field_dunno1.readfrombuffer(buf) self.__field_incoming_count=UINT(**{'sizeinbytes': 4}) self.__field_incoming_count.readfrombuffer(buf) self.__field_outgoing_count=UINT(**{'sizeinbytes': 4}) self.__field_outgoing_count.readfrombuffer(buf) self.__field_missed_count=UINT(**{'sizeinbytes': 4}) self.__field_missed_count.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_incoming(self): return self.__field_incoming.getvalue() def __setfield_incoming(self, value): if isinstance(value,LIST): self.__field_incoming=value else: self.__field_incoming=LIST(value,**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) def __delfield_incoming(self): del self.__field_incoming incoming=property(__getfield_incoming, __setfield_incoming, __delfield_incoming, None) def __getfield_outgoing(self): return self.__field_outgoing.getvalue() def __setfield_outgoing(self, value): if isinstance(value,LIST): self.__field_outgoing=value else: self.__field_outgoing=LIST(value,**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) def __delfield_outgoing(self): del self.__field_outgoing outgoing=property(__getfield_outgoing, __setfield_outgoing, __delfield_outgoing, None) def __getfield_missed(self): return self.__field_missed.getvalue() def __setfield_missed(self, value): if isinstance(value,LIST): self.__field_missed=value else: self.__field_missed=LIST(value,**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) def __delfield_missed(self): del self.__field_missed missed=property(__getfield_missed, __setfield_missed, __delfield_missed, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UNKNOWN): self.__field_dunno1=value else: self.__field_dunno1=UNKNOWN(value,**{'sizeinbytes': 992}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_incoming_count(self): return self.__field_incoming_count.getvalue() def __setfield_incoming_count(self, value): if isinstance(value,UINT): self.__field_incoming_count=value else: self.__field_incoming_count=UINT(value,**{'sizeinbytes': 4}) def __delfield_incoming_count(self): del self.__field_incoming_count incoming_count=property(__getfield_incoming_count, __setfield_incoming_count, __delfield_incoming_count, None) def __getfield_outgoing_count(self): return self.__field_outgoing_count.getvalue() def __setfield_outgoing_count(self, value): if isinstance(value,UINT): self.__field_outgoing_count=value else: self.__field_outgoing_count=UINT(value,**{'sizeinbytes': 4}) def __delfield_outgoing_count(self): del self.__field_outgoing_count outgoing_count=property(__getfield_outgoing_count, __setfield_outgoing_count, __delfield_outgoing_count, None) def __getfield_missed_count(self): return self.__field_missed_count.getvalue() def __setfield_missed_count(self, value): if isinstance(value,UINT): self.__field_missed_count=value else: self.__field_missed_count=UINT(value,**{'sizeinbytes': 4}) def __delfield_missed_count(self): del self.__field_missed_count missed_count=property(__getfield_missed_count, __setfield_missed_count, __delfield_missed_count, None) def iscontainer(self): return True def containerelements(self): yield ('incoming', self.__field_incoming, None) yield ('outgoing', self.__field_outgoing, None) yield ('missed', self.__field_missed, None) yield ('dunno1', self.__field_dunno1, None) yield ('incoming_count', self.__field_incoming_count, None) yield ('outgoing_count', self.__field_outgoing_count, None) yield ('missed_count', self.__field_missed_count, None) class cl_file(BaseProtogenClass): __fields=['cl_type', 'number', 'datetime', 'dunno1', 'duration'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(cl_file,self).__init__(**dict) if self.__class__ is cl_file: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(cl_file,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(cl_file,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_cl_type.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_datetime.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cl_type=UINT(**{'sizeinbytes': 1}) self.__field_cl_type.readfrombuffer(buf) self.__field_number=STRING(**{'sizeinbytes': 51, 'terminator': 0 }) self.__field_number.readfrombuffer(buf) self.__field_datetime=DateTime1(**{'sizeinbytes': 4}) self.__field_datetime.readfrombuffer(buf) self.__field_dunno1=UNKNOWN(**{'sizeinbytes': 4}) self.__field_dunno1.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cl_type(self): return self.__field_cl_type.getvalue() def __setfield_cl_type(self, value): if isinstance(value,UINT): self.__field_cl_type=value else: self.__field_cl_type=UINT(value,**{'sizeinbytes': 1}) def __delfield_cl_type(self): del self.__field_cl_type cl_type=property(__getfield_cl_type, __setfield_cl_type, __delfield_cl_type, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,STRING): self.__field_number=value else: self.__field_number=STRING(value,**{'sizeinbytes': 51, 'terminator': 0 }) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,DateTime1): self.__field_datetime=value else: self.__field_datetime=DateTime1(value,**{'sizeinbytes': 4}) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UNKNOWN): self.__field_dunno1=value else: self.__field_dunno1=UNKNOWN(value,**{'sizeinbytes': 4}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def iscontainer(self): return True def containerelements(self): yield ('cl_type', self.__field_cl_type, None) yield ('number', self.__field_number, None) yield ('datetime', self.__field_datetime, None) yield ('dunno1', self.__field_dunno1, None) yield ('duration', self.__field_duration, None) bitpim-1.0.7+dfsg1/src/phones/com_lgvx8100.py0000644001616600161660000011526110725624225016746 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2006 Roger Binns ### Copyright (C) 2006-2006 Simon Capper ### Copyright (C) 2006 Michael Cohen ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgvx8100.py 4481 2007-12-05 22:39:17Z djpham $ """Communicate with the LG VX8100 cell phone The VX8100 is similar to the VX7000 but also supports video. """ # standard modules import re import time import cStringIO import sha # my modules import common import commport import copy import com_lgvx4400 import p_brew import p_lgvx8100 import com_lgvx7000 import com_brew import com_phone import com_lg import prototypes import bpcalendar import call_history import sms import memo import helpids from prototypes import * class Phone(com_lg.LGNewIndexedMedia2, com_lg.LGDMPhone, com_lgvx7000.Phone): "Talk to the LG VX8100 cell phone" desc="LG-VX8100" helpid=helpids.ID_PHONE_LGVX8100 protocolclass=p_lgvx8100 serialsname='lgvx8100' builtinringtones= ('Low Beep Once', 'Low Beeps', 'Loud Beep Once', 'Loud Beeps', 'VZW Default Ringtone') + \ tuple(['Ringtone '+`n` for n in range(1,11)]) + \ ('No Ring',) ringtonelocations= ( # type index-file size-file directory-to-use lowest-index-to-use maximum-entries type-major icon ( 'ringers', 'dload/my_ringtone.dat', 'dload/my_ringtonesize.dat', 'brew/16452/lk/mr', 100, 150, 0x201, 1, 0), # the sound index file uses the same index as the ringers, bitpim does not support this (yet) ( 'sounds', 'dload/mysound.dat', 'dload/mysoundsize.dat', 'brew/16452/ms', 100, 150, 2, 0, 151), ) calendarlocation="sch/newschedule.dat" calendarexceptionlocation="sch/newschexception.dat" calenderrequiresreboot=0 memolocation="sch/neomemo.dat" builtinwallpapers = () # none wallpaperlocations= ( ( 'images', 'dload/image.dat', 'dload/imagesize.dat', 'brew/16452/mp', 100, 50, 0, 0, 0), ( 'video', 'dload/video.dat', None, 'brew/16452/mf', 1000, 50, 0x0304, 0, 0), ) # for removable media (miniSD cards) _rs_path='mmc1/' _rs_ringers_path=_rs_path+'ringers' _rs_images_path=_rs_path+'images' media_info={ 'ringers': { 'localpath': 'brew/16452/lk/mr', 'rspath': _rs_ringers_path, 'vtype': protocolclass.MEDIA_TYPE_RINGTONE, 'icon': protocolclass.MEDIA_RINGTONE_DEFAULT_ICON, 'index': 100, # starting index 'maxsize': 155, 'indexfile': 'dload/my_ringtone.dat', 'sizefile': 'dload/my_ringtonesize.dat', 'dunno': 0, 'date': False, }, 'sounds': { 'localpath': 'brew/16452/ms', 'rspath': None, 'vtype': protocolclass.MEDIA_TYPE_SOUND, 'icon': protocolclass.MEDIA_IMAGE_DEFAULT_ICON, 'index': 100, 'maxsize': 155, 'indexfile': 'dload/mysound.dat', 'sizefile': 'dload/mysoundsize.dat', 'dunno': 0, 'date': False }, 'images': { 'localpath': 'brew/16452/mp', 'rspath': _rs_images_path, 'vtype': protocolclass.MEDIA_TYPE_IMAGE, 'icon': protocolclass.MEDIA_IMAGE_DEFAULT_ICON, 'index': 100, 'maxsize': 155, 'indexfile': 'dload/image.dat', 'sizefile': 'dload/imagesize.dat', 'dunno': 0, 'date': False }, 'video': { 'localpath': 'brew/16452/mf', 'rspath': None, 'vtype': protocolclass.MEDIA_TYPE_VIDEO, 'icon': protocolclass.MEDIA_VIDEO_DEFAULT_ICON, 'index': 1000, 'maxsize': 155, 'indexfile': 'dload/video.dat', 'sizefile': 'dload/videosize.dat', 'dunno': 0, 'date': True }, } def __init__(self, logtarget, commport): com_lgvx4400.Phone.__init__(self, logtarget, commport) com_lg.LGDMPhone.__init__(self) self.mode=self.MODENONE def get_firmware_version(self): # return the firmware version req=p_brew.firmwarerequest() res=self.sendbrewcommand(req, self.protocolclass.firmwareresponse) return res.firmware def setDMversion(self): """Define the DM version required for this phone, default to DMv5""" # not sure what the 8100 requirements are, default to v4 only self._DMv5=False # Fundamentals: # - get_esn - /nvm/$ESN.SYS (same as LG VX-4400) # - getgroups - defined below # - getwallpaperindices - LGNewIndexedMedia2 # - getringtoneindices - LGNewIndexedMedia2 # - DM Version - 4 to access brew/16452/lk/mr on newer firmwares def getgroups(self, results): self.log("Reading group information") buf=prototypes.buffer(self.getfilecontents("pim/pbgroup.dat")) g=self.protocolclass.pbgroups() g.readfrombuffer(buf, logtitle="Groups read") groups={} for i in range(len(g.groups)): if len(g.groups[i].name): # sometimes have zero length names groups[i]={'name': g.groups[i].name } results['groups']=groups return groups def savegroups(self, data): groups=data['groups'] keys=groups.keys() keys.sort() g=self.protocolclass.pbgroups() for k in keys: e=self.protocolclass.pbgroup() e.name=groups[k]['name'] g.groups.append(e) buffer=prototypes.buffer() g.writetobuffer(buffer, logtitle="New group file") self.writefile("pim/pbgroup.dat", buffer.getvalue()) def getmemo(self, result): # read the memo file res={} try: stat_res=self.statfile(self.memolocation) # allow for zero length file if stat_res!=None and stat_res['size']!=0: buf=prototypes.buffer(self.getfilecontents(self.memolocation)) text_memo=self.protocolclass.textmemofile() text_memo.readfrombuffer(buf, logtitle="Read memo file"+self.memolocation) for m in text_memo.items: entry=memo.MemoEntry() entry.text=m.text try: entry.set_date_isostr("%d%02d%02dT%02d%02d00" % ((m.memotime))) except ValueError: # deleted memos can remain in file but have a bogus date continue res[entry.id]=entry except com_brew.BrewNoSuchFileException: pass result['memo']=res return result def savememo(self, result, merge): text_memo=self.protocolclass.textmemofile() memo_dict=result.get('memo', {}) keys=memo_dict.keys() keys.sort() text_memo.itemcount=len(keys) for k in keys: entry=self.protocolclass.textmemo() entry.text=memo_dict[k].text t=time.strptime(memo_dict[k].date, '%b %d, %Y %H:%M') entry.memotime=(t.tm_year, t.tm_mon, t.tm_mday, t.tm_hour, t.tm_min) if 'GPStime' in entry.getfields(): entry.GPStime = (t.tm_year, t.tm_mon, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec) text_memo.items.append(entry) buf=prototypes.buffer() text_memo.writetobuffer(buf, logtitle="Updated memo "+self.memolocation) self.writefile(self.memolocation, buf.getvalue()) return result def getexceptions (self): try: buf=prototypes.buffer(self.getfilecontents(self.calendarexceptionlocation)) ex=self.protocolclass.scheduleexceptionfile() ex.readfrombuffer(buf, logtitle="Calendar exceptions") exceptions={} for i in ex.items: try: exceptions[i.pos].append( (i.year,i.month,i.day) ) except KeyError: exceptions[i.pos]=[ (i.year,i.month,i.day) ] except com_brew.BrewNoSuchFileException: exceptions={} return exceptions def getcalendarcommon(self, entry, event): entry.desc_loc=event.description entry.start=event.start if self.protocolclass.CALENDAR_HAS_SEPARATE_END_TIME_AND_DATE: if event.repeat[0] == 0: # MIC: If non-repeating event entry.end = event.end_time # MIC: Set entry.end to full end_time else: _,_,_,hour,minute=event.end_time year,month,day,_,_=event.end_date entry.end=(year,month,day,hour,minute) else: entry.end=event.end if event.alarmindex_vibrate&0x1: entry.vibrate=0 # vibarate bit is inverted in phone 0=on, 1=off else: entry.vibrate=1 entry.repeat = self.makerepeat(event.repeat) min=event.alarmminutes hour=event.alarmhours if min==0x64 or hour==0x64: entry.alarm=None # no alarm set else: entry.alarm=hour*60+min entry.snoozedelay=0 def getcalendar(self,result): res={} # Read exceptions file first exceptions = self.getexceptions () # Now read schedule try: buf=prototypes.buffer(self.getfilecontents(self.calendarlocation)) if len(buf.getdata())<3: # file is empty, and hence same as non-existent raise com_brew.BrewNoSuchFileException() sc=self.protocolclass.schedulefile() sc.readfrombuffer(buf, logtitle="Calendar") for event in sc.events: # the vx8100 has a bad entry when the calender is empty # stop processing the calender when we hit this record if event.pos==0: #invalid entry continue entry=bpcalendar.CalendarEntry() try: # delete events are still in the calender file but have garbage dates self.getcalendarcommon (entry, event) except ValueError: continue if self.protocolclass.CALENDAR_HAS_SEPARATE_END_TIME_AND_DATE: # MIC Unlike previous phones, the VX8300 passes the ringtone # via both the index, and a path. If the index is set to 100 # (0x64), then the ringtone information will be found in the # "ringpath", the last 256 bytes of the calendar packet. If # the index is between 0 and 15, inclusive, then it is using # one of the builtin ringers, and the ringpath is set to # null. try: if (event.ringtone == 100): # MIC Ringer is downloaded to phone or microSD entry.ringtone = common.basename(event.ringpath) else: # MIC Ringer is built-in entry.ringtone=self.builtinringtones[event.ringtone] except: # hack, not having a phone makes it hard to figure out the best approach if entry.alarm==None: entry.ringtone='No Ring' else: entry.ringtone='Loud Beeps' else: entry.ringtone=result['ringtone-index'][event.ringtone]['name'] # check for exceptions and remove them if event.repeat[3] and exceptions.has_key(event.pos): for year, month, day in exceptions[event.pos]: entry.suppress_repeat_entry(year, month, day) res[entry.id]=entry assert sc.numactiveitems==len(res) except com_brew.BrewNoSuchFileException: pass # do nothing if file doesn't exist result['calendar']=res return result def makerepeat(self, repeat): # get all the variables out of the repeat tuple # and convert into a bpcalender RepeatEntry type,dow,interval,interval2,exceptions=repeat if type==0: repeat_entry=None else: repeat_entry=bpcalendar.RepeatEntry() if type==1: #daily repeat_entry.repeat_type=repeat_entry.daily repeat_entry.interval=interval elif type==5: #'monfri' repeat_entry.repeat_type=repeat_entry.daily repeat_entry.interval=0 elif type==2: #'weekly' repeat_entry.repeat_type=repeat_entry.weekly repeat_entry.dow=dow repeat_entry.interval=interval elif type==3: #'monthly' repeat_entry.repeat_type=repeat_entry.monthly repeat_entry.interval2=interval2 repeat_entry.dow=0 elif type==6: #'monthly' #Xth Y day (e.g. 2nd friday each month) repeat_entry.repeat_type=repeat_entry.monthly repeat_entry.interval=interval #X repeat_entry.dow=dow #Y repeat_entry.interval2=interval2 else: # =4 'yearly' repeat_entry.repeat_type=repeat_entry.yearly return repeat_entry def _scheduleexceptions(self, entry, data, exceptionsf): exceptions=0 if entry.repeat!=None: if self.protocolclass.CALENDAR_HAS_SEPARATE_END_TIME_AND_DATE: if data.end_date[:3]==entry.no_end_date: year_s,month_s,day_s,hour_s,minute_s=entry.start data.end_date=(year_s + 5, month_s, day_s, 31, 63) else: if data.end[:3]==entry.no_end_date: data.end=(2100, 12, 31)+data.end[3:] for i in entry.repeat.suppressed: de=self.protocolclass.scheduleexception() de.pos=data.pos de.day=i.date.day de.month=i.date.month de.year=i.date.year exceptions=1 exceptionsf.items.append(de) if entry.repeat != None: data.repeat=(self.getrepeattype(entry, exceptions)) else: data.repeat=((0,0,0,0,0)) def _schedulecommon(self, entry, data): data.description=entry.desc_loc data.start=entry.start if self.protocolclass.CALENDAR_HAS_SEPARATE_END_TIME_AND_DATE: year_e,month_e,day_e,hour_e,minute_e=entry.end year_s,month_s,day_s,hour_s,minute_s=entry.start if entry.repeat!=None: # MIC: Added check for repeating event data.end_date = (year_e,month_e,day_e,31,63) else: data.end_date = (year_s+5,month_s,day_s,31,63) data.end_time = (year_s,month_s,day_s,hour_e,minute_e) else: data.end=entry.end data.ringtone=0 data.unknown1=0 def savecalendar(self, dict, merge): # ::TODO:: # what will be written to the files eventsf=self.protocolclass.schedulefile() exceptionsf=self.protocolclass.scheduleexceptionfile() # what are we working with cal=dict['calendar'] newcal={} #sort into start order, makes it possible to see if the calendar has changed keys=[(x.start, k) for k,x in cal.items()] keys.sort() # apply limiter keys=keys[:self.protocolclass.NUMCALENDARENTRIES] # number of entries eventsf.numactiveitems=len(keys) pos=1 contains_alarms=False # play with each entry for (_,k) in keys: # entry is what we will return to user entry=cal[k] data=self.protocolclass.scheduleevent() data.pos=eventsf.packetsize() self._schedulecommon(entry, data) alarm_set=self.setalarm(entry, data) if alarm_set: if entry.ringtone=="No Ring" and not entry.vibrate: alarm_name="Low Beep Once" else: alarm_name=entry.ringtone else: # set alarm to "No Ring" gets rid of alarm icon on phone alarm_name="No Ring" if self.protocolclass.CALENDAR_HAS_SEPARATE_END_TIME_AND_DATE: # MIC VX8300 handles the ringtone differently than previous # phones. Except for the 16 builtin ringers, ringers stored # directly on the phone or on the microSD are specified by # their fully qualified path, and an index of 100. for i in dict['ringtone-index']: if dict['ringtone-index'][i]['name']==alarm_name: if dict['ringtone-index'][i].get('filename', None): data.ringtone=100 data.ringpath=dict['ringtone-index'][i]['filename'] else: # builtin ringer data.ringtone=i # Set to proper index break else: data.unknown2=0 # MIC Only unknown in VX8100 and prior # Moved up from line below, as we do not # want it defined for the VX8300+ for i in dict['ringtone-index']: if dict['ringtone-index'][i]['name']==alarm_name: data.ringtone=i break # check for exceptions and add them to the exceptions list self._scheduleexceptions(entry, data, exceptionsf) if data.alarmindex_vibrate!=1: # if alarm set contains_alarms=True # put entry in nice shiny new dict we are building entry=copy.copy(entry) newcal[data.pos]=entry eventsf.events.append(data) buf=prototypes.buffer() eventsf.writetobuffer(buf, logtitle="New Calendar") self.writefile(self.calendarlocation, buf.getvalue()) if contains_alarms or self.calenderrequiresreboot: self.log("Your phone has to be rebooted due to the calendar changing") dict["rebootphone"]=True buf=prototypes.buffer() exceptionsf.writetobuffer(buf, logtitle="Writing calendar exceptions") self.writefile(self.calendarexceptionlocation, buf.getvalue()) # fix passed in dict dict['calendar']=newcal return dict def getrepeattype(self, entry, exceptions): #convert the bpcalender type into vx8100 type repeat_entry=bpcalendar.RepeatEntry() interval2=0 if entry.repeat.repeat_type==repeat_entry.monthly: dow=entry.repeat.dow interval2=entry.repeat.interval2 if entry.repeat.dow==0: # set interval for month type 4 to start day of month, (required by vx8100) interval=entry.start[2] type=3 else: interval=entry.repeat.interval type=6 elif entry.repeat.repeat_type==repeat_entry.daily: dow=entry.repeat.dow interval=entry.repeat.interval if entry.repeat.interval==0: type=5 else: type=1 elif entry.repeat.repeat_type==repeat_entry.weekly: dow=entry.repeat.dow interval=entry.repeat.interval type=2 elif entry.repeat.repeat_type==repeat_entry.yearly: # set interval to start day of month, (required by vx8100) interval=entry.start[2] # set dow to start month, (required by vx8100) dow=entry.start[1] type=4 return (type, dow, interval, interval2, exceptions) def setalarm(self, entry, data): # vx8100 only allows certain repeat intervals, adjust to fit, it also stores an index to the interval rc=True if entry.alarm>=2880: entry.alarm=2880 data.alarmminutes=0 data.alarmhours=48 data.alarmindex_vibrate=0x10 elif entry.alarm>=1440: entry.alarm=1440 data.alarmminutes=0 data.alarmhours=24 data.alarmindex_vibrate=0xe elif entry.alarm>=120: entry.alarm=120 data.alarmminutes=0 data.alarmhours=2 data.alarmindex_vibrate=0xc elif entry.alarm>=60: entry.alarm=60 data.alarmminutes=0 data.alarmhours=1 data.alarmindex_vibrate=0xa elif entry.alarm>=15: entry.alarm=15 data.alarmminutes=15 data.alarmhours=0 data.alarmindex_vibrate=0x8 elif entry.alarm>=10: entry.alarm=10 data.alarmminutes=10 data.alarmhours=0 data.alarmindex_vibrate=0x6 elif entry.alarm>=5: entry.alarm=5 data.alarmminutes=5 data.alarmhours=0 data.alarmindex_vibrate=0x4 elif entry.alarm>=0: entry.alarm=0 data.alarmminutes=0 data.alarmhours=0 data.alarmindex_vibrate=0x2 else: # no alarm data.alarmminutes=0x64 data.alarmhours=0x64 data.alarmindex_vibrate=1 rc=False # set the vibrate bit if data.alarmindex_vibrate > 1 and entry.vibrate==0: data.alarmindex_vibrate+=1 return rc my_model='VX8100' def getphoneinfo(self, phone_info): self.log('Getting Phone Info') try: s=self.getfilecontents('brew/version.txt') if s[:6]==self.my_model: phone_info.append('Model:', self.my_model) phone_info.append('ESN:', self.get_brew_esn()) req=p_brew.firmwarerequest() res=self.sendbrewcommand(req, self.protocolclass.firmwareresponse) phone_info.append('Firmware Version:', res.firmware) txt=self.getfilecontents("nvm/nvm/nvm_cdma")[180:190] phone_info.append('Phone Number:', txt) except: pass return # Media stuff--------------------------------------------------------------- def _is_rs_file(self, filename): return filename.startswith(self._rs_path) def getmedia(self, maps, results, key): origins={} # signal that we are using the new media storage that includes the origin and timestamp origins['new_media_version']=1 for type, indexfile, sizefile, directory, lowestindex, maxentries, typemajor, def_icon, idx_ofs in maps: media={} for item in self.getindex(indexfile): data=None timestamp=None try: stat_res=self.statfile(item.filename) if stat_res!=None: timestamp=stat_res['date'][0] if not self._is_rs_file(item.filename): data=self.getfilecontents(item.filename, True) except (com_brew.BrewNoSuchFileException,com_brew.BrewBadPathnameException,com_brew.BrewNameTooLongException): self.log("It was in the index, but not on the filesystem") except com_brew.BrewAccessDeniedException: # firmware wouldn't let us read this file, just mark it then self.log('Failed to read file: '+item.filename) data='' if data!=None: media[common.basename(item.filename)]={ 'data': data, 'timestamp': timestamp} origins[type]=media results[key]=origins return results def _mark_files(self, local_files, rs_files, local_dir): # create empty local files as markers for remote files _empty_files=[common.basename(x) for x,_entry in local_files.items() \ if not _entry['size']] _remote_files=[common.basename(x) for x in rs_files] for _file in _remote_files: if _file not in _empty_files: # mark this one self.writefile(local_dir+'/'+_file, '') for _file in _empty_files: if _file not in _remote_files: # remote file no longer exists, del the marker self.rmfile(local_dir+'/'+_file) def _write_index_file(self, type): _info=self.media_info.get(type, None) if not _info: return _files={} _local_dir=_info['localpath'] _rs_dir=_info['rspath'] _vtype=_info['vtype'] _icon=_info['icon'] _index=_info['index'] _maxsize=_info['maxsize'] _dunno=_info['dunno'] indexfile=_info['indexfile'] sizefile=_info['sizefile'] _need_date=_info['date'] try: _files=self.listfiles(_local_dir) except (com_brew.BrewNoSuchDirectoryException, com_brew.BrewBadPathnameException): pass try: if _rs_dir: _rs_files=self.listfiles(_rs_dir) if type=='ringers': self._mark_files(_files, _rs_files, _local_dir) _files.update(_rs_files) except (com_brew.BrewNoSuchDirectoryException, com_brew.BrewBadPathnameException): # dir does not exist, no media files available pass # del all the markers (empty files) ringers if type=='ringers': _keys=_files.keys() for _key in _keys: if not _files[_key]['size']: del _files[_key] # dict of all indices _idx_keys={} for _i in xrange(_index, _index+_maxsize): _idx_keys[_i]=True # assign existing indices for _item in self.getindex(indexfile): if _files.has_key(_item.filename): _files[_item.filename]['index']=_item.index _idx_keys[_item.index]=False # available new indices _idx_keys_list=[k for k,x in _idx_keys.items() if x] _idx_keys_list.sort() _idx_cnt=0 # assign new indices _file_list=[x for x in _files if not _files[x].get('index', None)] _file_list.sort() if len(_file_list)>len(_idx_keys_list): _file_list=_file_list[:len(_idx_keys_list)] for i in _file_list: _files[i]['index']=_idx_keys_list[_idx_cnt] _idx_cnt+=1 # (index, file name) list for writing _res_list=[(x['index'],k) for k,x in _files.items() if x.get('index', None)] _res_list.sort() _res_list.reverse() # writing the index file ifile=self.protocolclass.indexfile() _file_size=0 for index,idx in _res_list: _fs_size=_files[idx]['size'] ie=self.protocolclass.indexentry() ie.index=index ie.type=_vtype ie.filename=idx if _need_date: # need to fill in the date value _stat=self.statfile(_files[idx]['name']) if _stat: ie.date=_stat['datevalue']-time.timezone ie.dunno=_dunno ie.icon=_icon ie.size=_fs_size ifile.items.append(ie) if not self._is_rs_file(idx): _file_size+=_fs_size buf=prototypes.buffer() ifile.writetobuffer(buf, logtitle="Index file "+indexfile) self.log("Writing index file "+indexfile+" for type "+type+" with "+`len(_res_list)`+" entries.") self.writefile(indexfile, buf.getvalue()) # writing the size file if sizefile: szfile=self.protocolclass.sizefile() szfile.size=_file_size buf=prototypes.buffer() szfile.writetobuffer(buf, logtitle="Updated size file for "+type) self.log("You are using a total of "+`_file_size`+" bytes for "+type) self.writefile(sizefile, buf.getvalue()) def savemedia(self, mediakey, mediaindexkey, maps, results, merge, reindexfunction): """Actually saves out the media @param mediakey: key of the media (eg 'wallpapers' or 'ringtones') @param mediaindexkey: index key (eg 'wallpaper-index') @param maps: list index files and locations @param results: results dict @param merge: are we merging or overwriting what is there? @param reindexfunction: the media is re-indexed at the end. this function is called to do it """ # take copies of the lists as we modify them wp=results[mediakey].copy() # the media we want to save wpi=results[mediaindexkey].copy() # what is already in the index files # remove builtins for k in wpi.keys(): if wpi[k].get('origin', "")=='builtin': del wpi[k] # build up list into init init={} for type,_,_,_,lowestindex,_,typemajor,_,_ in maps: init[type]={} for k in wpi.keys(): if wpi[k]['origin']==type: index=k name=wpi[k]['name'] fullname=wpi[k]['filename'] vtype=wpi[k]['vtype'] icon=wpi[k]['icon'] data=None del wpi[k] for w in wp.keys(): # does wp contain a reference to this same item? if wp[w]['name']==name and wp[w]['origin']==type: data=wp[w]['data'] del wp[w] if not merge and data is None: # delete the entry continue ## assert index>=lowestindex init[type][index]={'name': name, 'data': data, 'filename': fullname, 'vtype': vtype, 'icon': icon} # init now contains everything from wallpaper-index # wp contains items that we still need to add, and weren't in the existing index assert len(wpi)==0 print init.keys() # now look through wallpapers and see if anything was assigned a particular # origin for w in wp.keys(): o=wp[w].get("origin", "") if o is not None and len(o) and o in init: idx=-1 while idx in init[o]: idx-=1 init[o][idx]=wp[w] del wp[w] # wp will now consist of items that weren't assigned any particular place # so put them in the first available space for type,_,_,_,lowestindex,maxentries,typemajor,def_icon,_ in maps: # fill it up for w in wp.keys(): if len(init[type])>=maxentries: break idx=-1 while idx in init[type]: idx-=1 init[type][idx]=wp[w] del wp[w] # time to write the files out for type, indexfile, sizefile, directory, lowestindex, maxentries,typemajor,def_icon,_ in maps: # get the index file so we can work out what to delete names=[init[type][x]['name'] for x in init[type]] for item in self.getindex(indexfile): if common.basename(item.filename) not in names and \ not self._is_rs_file(item.filename): self.log(item.filename+" is being deleted") try: self.rmfile(item.filename) except (com_brew.BrewNoSuchDirectoryException, com_brew.BrewBadPathnameException, com_brew.BrewNoSuchFileException): pass except: if __debug__: raise # fixup the indices fixups=[k for k in init[type].keys() if klength data=entry['data'] if data is None: assert merge continue # we are doing an add and don't have data for this existing entry elif not data: self.log('Not writing file: '+filename) continue # data is blank, could be a result of not being able to do a previous get if fstat is not None and len(data)==fstat['size']: self.log("Not writing "+filename+" as a file of the same name and length already exists.") else: self.writefile(filename, data) # write out index self._write_index_file(type) return reindexfunction(results) #------------------------------------------------------------------------------- parentprofile=com_lgvx7000.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='VX8100' WALLPAPER_WIDTH=176 WALLPAPER_HEIGHT=184 MAX_WALLPAPER_BASENAME_LENGTH=32 WALLPAPER_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789()_ .-" WALLPAPER_CONVERT_FORMAT="jpg" # the 8100 uses "W" for wait in the dialstring, it does not support "T" DIALSTRING_CHARS="[^0-9PW#*]" MAX_RINGTONE_BASENAME_LENGTH=32 RINGTONE_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789()_ .-" # there is an origin named 'aod' - no idea what it is for except maybe # 'all other downloads' # the vx8100 supports bluetooth for connectivity to the PC, define the "bluetooth_mgd_id" # to enable bluetooth discovery during phone detection # the bluetooth address starts with LG's the three-octet OUI, all LG phone # addresses start with this, it provides a way to identify LG bluetooth devices # during phone discovery # OUI=Organizationally Unique Identifier # see http://standards.ieee.org/regauth/oui/index.shtml for more info bluetooth_mfg_id="001256" ringtoneorigins=('ringers', 'sounds') excluded_ringtone_origins=('sounds') excluded_wallpaper_origins=('video') # the 8100 doesn't have seperate origins - they are all dumped in "images" imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video")) def GetImageOrigins(self): return self.imageorigins # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 176, 'height': 184, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", {'width': 128, 'height': 112, 'format': "JPEG"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets def __init__(self): parentprofile.__init__(self) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading ('memo', 'read', None), # all memo list reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('sms', 'write', 'OVERWRITE'), # all SMS list writing ('memo', 'write', 'OVERWRITE'), # all memo list writing ) field_color_data={ 'phonebook': { 'name': { 'first': 1, 'middle': 1, 'last': 1, 'full': 1, 'nickname': 0, 'details': 1 }, 'number': { 'type': 5, 'speeddial': 5, 'number': 5, 'details': 5 }, 'email': 2, 'address': { 'type': 0, 'company': 0, 'street': 0, 'street2': 0, 'city': 0, 'state': 0, 'postalcode': 0, 'country': 0, 'details': 0 }, 'url': 0, 'memo': 1, 'category': 1, 'wallpaper': 1, 'ringtone': 2, 'storage': 0, }, 'calendar': { 'description': True, 'location': False, 'allday': True, 'start': True, 'end': True, 'priority': False, 'alarm': True, 'vibrate': True, 'repeat': True, 'memo': False, 'category': False, 'wallpaper': False, 'ringtone': True, }, 'memo': { 'subject': True, 'date': True, 'secret': False, 'category': False, 'memo': True, }, 'todo': { 'summary': False, 'status': False, 'due_date': False, 'percent_complete': False, 'completion_date': False, 'private': False, 'priority': False, 'category': False, 'memo': False, }, } bitpim-1.0.7+dfsg1/src/phones/p_samsungscha950.py0000644001616600161660000111565111320517703017706 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to the Samsung SCH-A950 Phone""" from prototypes import * from prototypes_samsung import * from p_brew import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb ENCODING='latin_1' RT_PATH='brew/16452/mr' RT_PATH2='brew/16452/lk/mr' RT_INDEX_FILE_NAME=RT_PATH+'/MrInfo.db' RT_EXCLUDED_FILES=('MrInfo.db',) SND_PATH='brew/16452/ms' SND_PATH2='brew/16452/lk/ms' SND_INDEX_FILE_NAME=SND_PATH+'/MsInfo.db' SND_EXCLUDED_FILES=('MsInfo.db', 'ExInfo.db') PIC_PATH='brew/16452/mp' PIC_PATH2='brew/16452/lk/mp' PIC_INDEX_FILE_NAME=PIC_PATH+'/Default Album.alb' PIC_EXCLUDED_FILES=('Default Album.alb', 'Graphics.alb') PREF_DB_FILE_NAME='current_prefs.db' GROUP_INDEX_FILE_NAME='pb/pbgroups_' # Calendar stuff CAL_PATH='sch_event' CAL_INDEX_FILE_NAME=CAL_PATH+'/usr_tsk' CAL_FILE_NAME_PREFIX=CAL_PATH+'/usr_tsk_' CAL_MAX_EVENTS=100 NP_MAX_ENTRIES=30 NP_MAX_LEN=130 NP_PATH=CAL_PATH NP_FILE_NAME_PREFIX=CAL_FILE_NAME_PREFIX # Phonebook stuff PB_PATH='pb' PB_JRNL_FILE_PREFIX=PB_PATH+'/jrnl_' PB_ENTRY_FILE_PREFIX=PB_PATH+'/recs_' PB_MAIN_FILE_PREFIX=PB_PATH+'/main_' PB_WP_CACHE_PATH='cache/pb' PB_WP_CACHE_WIDTH=128 PB_WP_CACHE_HEIGHT=96 PB_MAX_NAME_LEN=32 PB_MAX_EMAIL_LEN=48 PB_MAX_NUMBER_LEN=48 PB_FLG_NONE=0x0000 PB_FLG_NAME=0x0001 PB_FLG_DATE=0x0400 PB_FLG_FAX=0x0080 PB_FLG_CELL=0x0020 PB_FLG_WORK=0x0010 PB_FLG_HOME=0X0008 PB_FLG_EMAIL2=0X0004 PB_FLG_EMAIL=0X0002 PB_FLG_WP=0X8000 PB_FLG_GROUP=0X0800 PB_FLG_CELL2=0X0100 PB_FLG_SPEEDDIAL=0x01 PB_FLG_RINGTONE=0x10 PB_FLG_PRIMARY=0x02 # Samsung command code SS_CMD_SW_VERSION=0 SS_CMD_HW_VERSION=1 SS_CMD_PB_COUNT=2 SS_CMD_PB_VOICEMAIL_READ=5 SS_CMD_PB_VOICEMAIL_WRITE=6 SS_CMD_PB_READ=0x14 SS_CMD_PB_WRITE=0x15 SS_CMD_PB_CLEAR=0x1D SS_CMD_PB_VOICEMAIL_PARAM=0x19 PB_DEFAULT_VOICEMAIL_NUMBER='*86' # Call log/history CL_PATH='clog' CL_PREFIX=CL_PATH+'/clog_' CL_INDEX_FILE=CL_PATH+'/clog_master' CL_MAX_ENTRIES=20 CL_TYPE_INCOMING=1 CL_TYPE_OUTGOING=2 CL_TYPE_MISSED=3 CL_TYPE_DELETED=5 CL_VALID_TYPE=frozenset((CL_TYPE_INCOMING, CL_TYPE_OUTGOING, CL_TYPE_MISSED)) # SMS stuff SMS_PATH='nvm/sms_wp_os' SMS_TXT_TYPE=0x0200 SMS_TYPE_IN=1 SMS_TYPE_SENT=3 SMS_TYPE_DRAFT=4 SMS_VALID_TYPE=(SMS_TYPE_IN, SMS_TYPE_SENT, SMS_TYPE_DRAFT) SMS_FLG1_DEFERREDDEL=0x40 SMS_FLG1_VALIDPERIOD=0x10 SMS_FLG1_HAS40=SMS_FLG1_DEFERREDDEL | SMS_FLG1_VALIDPERIOD SMS_FLG2_CALLBACK=0x40 SMS_FLG2_MSG=0x04 SMS_FLG2_PRIORITY=0x01 SMS_FLG2_SOMETHING=0x08 SMS_STATUS_SENT=0x10 SMS_STATUS_DELIVERED=0x11 SMS_STATUS_READ=0x05 SMS_STATUS_NOTREAD=0x01 SMS_STATUS_LOCKED=0x100 broken_filelist_date=True class DefaultResponse(BaseProtogenClass): __fields=['data'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(DefaultResponse,self).__init__(**dict) if self.__class__ is DefaultResponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(DefaultResponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(DefaultResponse,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_data=DATA(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_data.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_data=DATA() self.__field_data.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_data(self): return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,DATA): self.__field_data=value else: self.__field_data=DATA(value,) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def iscontainer(self): return True def containerelements(self): yield ('data', self.__field_data, None) class WRingtoneIndexEntry(BaseProtogenClass): __fields=['name', 'path_prefix', 'pathname', 'eor'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(WRingtoneIndexEntry,self).__init__(**dict) if self.__class__ is WRingtoneIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(WRingtoneIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(WRingtoneIndexEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_name except: self.__field_name=STRING() def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_path_prefix except: self.__field_path_prefix=STRING(**{ 'terminator': None, 'default': '/ff/' }) self.__field_path_prefix.writetobuffer(buf) self.__field_pathname.writetobuffer(buf) try: self.__field_eor except: self.__field_eor=STRING(**{ 'terminator': None, 'default': '|2\x0A' }) self.__field_eor.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_path_prefix=STRING(**{ 'terminator': None, 'default': '/ff/' }) self.__field_path_prefix.readfrombuffer(buf) self.__field_pathname=STRING(**{ 'terminator': None }) self.__field_pathname.readfrombuffer(buf) self.__field_eor=STRING(**{ 'terminator': None, 'default': '|2\x0A' }) self.__field_eor.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,STRING): self.__field_name=value else: self.__field_name=STRING(value,) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_path_prefix(self): try: self.__field_path_prefix except: self.__field_path_prefix=STRING(**{ 'terminator': None, 'default': '/ff/' }) return self.__field_path_prefix.getvalue() def __setfield_path_prefix(self, value): if isinstance(value,STRING): self.__field_path_prefix=value else: self.__field_path_prefix=STRING(value,**{ 'terminator': None, 'default': '/ff/' }) def __delfield_path_prefix(self): del self.__field_path_prefix path_prefix=property(__getfield_path_prefix, __setfield_path_prefix, __delfield_path_prefix, None) def __getfield_pathname(self): return self.__field_pathname.getvalue() def __setfield_pathname(self, value): if isinstance(value,STRING): self.__field_pathname=value else: self.__field_pathname=STRING(value,**{ 'terminator': None }) def __delfield_pathname(self): del self.__field_pathname pathname=property(__getfield_pathname, __setfield_pathname, __delfield_pathname, None) def __getfield_eor(self): try: self.__field_eor except: self.__field_eor=STRING(**{ 'terminator': None, 'default': '|2\x0A' }) return self.__field_eor.getvalue() def __setfield_eor(self, value): if isinstance(value,STRING): self.__field_eor=value else: self.__field_eor=STRING(value,**{ 'terminator': None, 'default': '|2\x0A' }) def __delfield_eor(self): del self.__field_eor eor=property(__getfield_eor, __setfield_eor, __delfield_eor, None) def iscontainer(self): return True def containerelements(self): yield ('name', self.__field_name, None) yield ('path_prefix', self.__field_path_prefix, None) yield ('pathname', self.__field_pathname, None) yield ('eor', self.__field_eor, None) class WRingtoneIndexFile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(WRingtoneIndexFile,self).__init__(**dict) if self.__class__ is WRingtoneIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(WRingtoneIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(WRingtoneIndexFile,kwargs) if len(args): dict2={ 'elementclass': WRingtoneIndexEntry } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': WRingtoneIndexEntry }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': WRingtoneIndexEntry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': WRingtoneIndexEntry }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': WRingtoneIndexEntry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class RRingtoneIndexEntry(BaseProtogenClass): __fields=['pathname', 'misc'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(RRingtoneIndexEntry,self).__init__(**dict) if self.__class__ is RRingtoneIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(RRingtoneIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(RRingtoneIndexEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pathname.writetobuffer(buf) self.__field_misc.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pathname=STRING(**{ 'terminator': 0x7C }) self.__field_pathname.readfrombuffer(buf) self.__field_misc=STRING(**{ 'terminator': 0x0A }) self.__field_misc.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pathname(self): return self.__field_pathname.getvalue() def __setfield_pathname(self, value): if isinstance(value,STRING): self.__field_pathname=value else: self.__field_pathname=STRING(value,**{ 'terminator': 0x7C }) def __delfield_pathname(self): del self.__field_pathname pathname=property(__getfield_pathname, __setfield_pathname, __delfield_pathname, None) def __getfield_misc(self): return self.__field_misc.getvalue() def __setfield_misc(self, value): if isinstance(value,STRING): self.__field_misc=value else: self.__field_misc=STRING(value,**{ 'terminator': 0x0A }) def __delfield_misc(self): del self.__field_misc misc=property(__getfield_misc, __setfield_misc, __delfield_misc, None) def iscontainer(self): return True def containerelements(self): yield ('pathname', self.__field_pathname, None) yield ('misc', self.__field_misc, None) class RRingtoneIndexFile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(RRingtoneIndexFile,self).__init__(**dict) if self.__class__ is RRingtoneIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(RRingtoneIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(RRingtoneIndexFile,kwargs) if len(args): dict2={ 'elementclass': RRingtoneIndexEntry } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': RRingtoneIndexEntry }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': RRingtoneIndexEntry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': RRingtoneIndexEntry }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': RRingtoneIndexEntry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class WSoundsIndexEntry(BaseProtogenClass): __fields=['name', 'path_prefix', 'pathname', 'eor'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(WSoundsIndexEntry,self).__init__(**dict) if self.__class__ is WSoundsIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(WSoundsIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(WSoundsIndexEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_name except: self.__field_name=STRING() def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_path_prefix except: self.__field_path_prefix=STRING(**{ 'terminator': None, 'default': '/ff/' }) self.__field_path_prefix.writetobuffer(buf) self.__field_pathname.writetobuffer(buf) try: self.__field_eor except: self.__field_eor=STRING(**{ 'terminator': None, 'default': '|0|7\x0A' }) self.__field_eor.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_path_prefix=STRING(**{ 'terminator': None, 'default': '/ff/' }) self.__field_path_prefix.readfrombuffer(buf) self.__field_pathname=STRING(**{ 'terminator': None }) self.__field_pathname.readfrombuffer(buf) self.__field_eor=STRING(**{ 'terminator': None, 'default': '|0|7\x0A' }) self.__field_eor.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,STRING): self.__field_name=value else: self.__field_name=STRING(value,) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_path_prefix(self): try: self.__field_path_prefix except: self.__field_path_prefix=STRING(**{ 'terminator': None, 'default': '/ff/' }) return self.__field_path_prefix.getvalue() def __setfield_path_prefix(self, value): if isinstance(value,STRING): self.__field_path_prefix=value else: self.__field_path_prefix=STRING(value,**{ 'terminator': None, 'default': '/ff/' }) def __delfield_path_prefix(self): del self.__field_path_prefix path_prefix=property(__getfield_path_prefix, __setfield_path_prefix, __delfield_path_prefix, None) def __getfield_pathname(self): return self.__field_pathname.getvalue() def __setfield_pathname(self, value): if isinstance(value,STRING): self.__field_pathname=value else: self.__field_pathname=STRING(value,**{ 'terminator': None }) def __delfield_pathname(self): del self.__field_pathname pathname=property(__getfield_pathname, __setfield_pathname, __delfield_pathname, None) def __getfield_eor(self): try: self.__field_eor except: self.__field_eor=STRING(**{ 'terminator': None, 'default': '|0|7\x0A' }) return self.__field_eor.getvalue() def __setfield_eor(self, value): if isinstance(value,STRING): self.__field_eor=value else: self.__field_eor=STRING(value,**{ 'terminator': None, 'default': '|0|7\x0A' }) def __delfield_eor(self): del self.__field_eor eor=property(__getfield_eor, __setfield_eor, __delfield_eor, None) def iscontainer(self): return True def containerelements(self): yield ('name', self.__field_name, None) yield ('path_prefix', self.__field_path_prefix, None) yield ('pathname', self.__field_pathname, None) yield ('eor', self.__field_eor, None) class WSoundsIndexFile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(WSoundsIndexFile,self).__init__(**dict) if self.__class__ is WSoundsIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(WSoundsIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(WSoundsIndexFile,kwargs) if len(args): dict2={ 'elementclass': WSoundsIndexEntry } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': WSoundsIndexEntry }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': WSoundsIndexEntry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': WSoundsIndexEntry }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': WSoundsIndexEntry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class RSoundIndexEntry(BaseProtogenClass): __fields=['pathname', 'misc'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(RSoundIndexEntry,self).__init__(**dict) if self.__class__ is RSoundIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(RSoundIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(RSoundIndexEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pathname.writetobuffer(buf) self.__field_misc.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pathname=STRING(**{ 'terminator': 0x7C }) self.__field_pathname.readfrombuffer(buf) self.__field_misc=STRING(**{ 'terminator': 0x0A }) self.__field_misc.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pathname(self): return self.__field_pathname.getvalue() def __setfield_pathname(self, value): if isinstance(value,STRING): self.__field_pathname=value else: self.__field_pathname=STRING(value,**{ 'terminator': 0x7C }) def __delfield_pathname(self): del self.__field_pathname pathname=property(__getfield_pathname, __setfield_pathname, __delfield_pathname, None) def __getfield_misc(self): return self.__field_misc.getvalue() def __setfield_misc(self, value): if isinstance(value,STRING): self.__field_misc=value else: self.__field_misc=STRING(value,**{ 'terminator': 0x0A }) def __delfield_misc(self): del self.__field_misc misc=property(__getfield_misc, __setfield_misc, __delfield_misc, None) def iscontainer(self): return True def containerelements(self): yield ('pathname', self.__field_pathname, None) yield ('misc', self.__field_misc, None) class RSoundsIndexFile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(RSoundsIndexFile,self).__init__(**dict) if self.__class__ is RSoundsIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(RSoundsIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(RSoundsIndexFile,kwargs) if len(args): dict2={ 'elementclass': RSoundIndexEntry } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': RSoundIndexEntry }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': RSoundIndexEntry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': RSoundIndexEntry }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': RSoundIndexEntry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class WPictureIndexEntry(BaseProtogenClass): __fields=['name', 'path_prefix', 'pathname', 'eor'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(WPictureIndexEntry,self).__init__(**dict) if self.__class__ is WPictureIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(WPictureIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(WPictureIndexEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_name.writetobuffer(buf) try: self.__field_path_prefix except: self.__field_path_prefix=STRING(**{ 'terminator': None, 'default': '|/ff/' }) self.__field_path_prefix.writetobuffer(buf) self.__field_pathname.writetobuffer(buf) try: self.__field_eor except: self.__field_eor=STRING(**{ 'terminator': None, 'default': '|0|0|3|>\x0A\xF4' }) self.__field_eor.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_name=STRING(**{ 'terminator': None }) self.__field_name.readfrombuffer(buf) self.__field_path_prefix=STRING(**{ 'terminator': None, 'default': '|/ff/' }) self.__field_path_prefix.readfrombuffer(buf) self.__field_pathname=STRING(**{ 'terminator': None }) self.__field_pathname.readfrombuffer(buf) self.__field_eor=STRING(**{ 'terminator': None, 'default': '|0|0|3|>\x0A\xF4' }) self.__field_eor.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,STRING): self.__field_name=value else: self.__field_name=STRING(value,**{ 'terminator': None }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_path_prefix(self): try: self.__field_path_prefix except: self.__field_path_prefix=STRING(**{ 'terminator': None, 'default': '|/ff/' }) return self.__field_path_prefix.getvalue() def __setfield_path_prefix(self, value): if isinstance(value,STRING): self.__field_path_prefix=value else: self.__field_path_prefix=STRING(value,**{ 'terminator': None, 'default': '|/ff/' }) def __delfield_path_prefix(self): del self.__field_path_prefix path_prefix=property(__getfield_path_prefix, __setfield_path_prefix, __delfield_path_prefix, None) def __getfield_pathname(self): return self.__field_pathname.getvalue() def __setfield_pathname(self, value): if isinstance(value,STRING): self.__field_pathname=value else: self.__field_pathname=STRING(value,**{ 'terminator': None }) def __delfield_pathname(self): del self.__field_pathname pathname=property(__getfield_pathname, __setfield_pathname, __delfield_pathname, None) def __getfield_eor(self): try: self.__field_eor except: self.__field_eor=STRING(**{ 'terminator': None, 'default': '|0|0|3|>\x0A\xF4' }) return self.__field_eor.getvalue() def __setfield_eor(self, value): if isinstance(value,STRING): self.__field_eor=value else: self.__field_eor=STRING(value,**{ 'terminator': None, 'default': '|0|0|3|>\x0A\xF4' }) def __delfield_eor(self): del self.__field_eor eor=property(__getfield_eor, __setfield_eor, __delfield_eor, None) def iscontainer(self): return True def containerelements(self): yield ('name', self.__field_name, None) yield ('path_prefix', self.__field_path_prefix, None) yield ('pathname', self.__field_pathname, None) yield ('eor', self.__field_eor, None) class WPictureIndexFile(BaseProtogenClass): __fields=['header', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(WPictureIndexFile,self).__init__(**dict) if self.__class__ is WPictureIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(WPictureIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(WPictureIndexFile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=STRING(**{ 'terminator': None, 'default': '0|/ff/brew/16452/mp/Default Album|\x0A\x0A\xF4' }) self.__field_header.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': WPictureIndexEntry }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=STRING(**{ 'terminator': None, 'default': '0|/ff/brew/16452/mp/Default Album|\x0A\x0A\xF4' }) self.__field_header.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': WPictureIndexEntry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=STRING(**{ 'terminator': None, 'default': '0|/ff/brew/16452/mp/Default Album|\x0A\x0A\xF4' }) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,STRING): self.__field_header=value else: self.__field_header=STRING(value,**{ 'terminator': None, 'default': '0|/ff/brew/16452/mp/Default Album|\x0A\x0A\xF4' }) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': WPictureIndexEntry }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': WPictureIndexEntry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('items', self.__field_items, None) class RPictureIndexEntry(BaseProtogenClass): __fields=['name', 'pathname', 'misc'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(RPictureIndexEntry,self).__init__(**dict) if self.__class__ is RPictureIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(RPictureIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(RPictureIndexEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_name.writetobuffer(buf) self.__field_pathname.writetobuffer(buf) self.__field_misc.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_name=STRING(**{ 'terminator': 0x7C }) self.__field_name.readfrombuffer(buf) self.__field_pathname=STRING(**{ 'terminator': 0x7C }) self.__field_pathname.readfrombuffer(buf) self.__field_misc=STRING(**{ 'terminator': 0xF4, 'raiseonunterminatedread': False }) self.__field_misc.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,STRING): self.__field_name=value else: self.__field_name=STRING(value,**{ 'terminator': 0x7C }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_pathname(self): return self.__field_pathname.getvalue() def __setfield_pathname(self, value): if isinstance(value,STRING): self.__field_pathname=value else: self.__field_pathname=STRING(value,**{ 'terminator': 0x7C }) def __delfield_pathname(self): del self.__field_pathname pathname=property(__getfield_pathname, __setfield_pathname, __delfield_pathname, None) def __getfield_misc(self): return self.__field_misc.getvalue() def __setfield_misc(self, value): if isinstance(value,STRING): self.__field_misc=value else: self.__field_misc=STRING(value,**{ 'terminator': 0xF4, 'raiseonunterminatedread': False }) def __delfield_misc(self): del self.__field_misc misc=property(__getfield_misc, __setfield_misc, __delfield_misc, None) def iscontainer(self): return True def containerelements(self): yield ('name', self.__field_name, None) yield ('pathname', self.__field_pathname, None) yield ('misc', self.__field_misc, None) class RPictureIndexFile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(RPictureIndexFile,self).__init__(**dict) if self.__class__ is RPictureIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(RPictureIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(RPictureIndexFile,kwargs) if len(args): dict2={ 'elementclass': RPictureIndexEntry } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': RPictureIndexEntry }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': RPictureIndexEntry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': RPictureIndexEntry }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': RPictureIndexEntry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class GroupEntry(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['index', 'datetime', 'name', 'numofmembers', 'members'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(GroupEntry,self).__init__(**dict) if self.__class__ is GroupEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(GroupEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(GroupEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 1}) self.__field_index.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 4}).readfrombuffer(buf) self.__field_datetime=DateTime(**{'sizeinbytes': 4}) self.__field_datetime.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 68, 'encoding': ENCODING, 'terminator': 0 }) self.__field_name.readfrombuffer(buf) self.__field_numofmembers=UINT(**{'sizeinbytes': 2}) self.__field_numofmembers.readfrombuffer(buf) if self.numofmembers: self.__field_members=LIST(**{'elementclass': _gen_p_samsungscha950_188, 'length': self.numofmembers }) self.__field_members.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 1}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,DateTime): self.__field_datetime=value else: self.__field_datetime=DateTime(value,**{'sizeinbytes': 4}) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 68, 'encoding': ENCODING, 'terminator': 0 }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numofmembers(self): return self.__field_numofmembers.getvalue() def __setfield_numofmembers(self, value): if isinstance(value,UINT): self.__field_numofmembers=value else: self.__field_numofmembers=UINT(value,**{'sizeinbytes': 2}) def __delfield_numofmembers(self): del self.__field_numofmembers numofmembers=property(__getfield_numofmembers, __setfield_numofmembers, __delfield_numofmembers, None) def __getfield_members(self): return self.__field_members.getvalue() def __setfield_members(self, value): if isinstance(value,LIST): self.__field_members=value else: self.__field_members=LIST(value,**{'elementclass': _gen_p_samsungscha950_188, 'length': self.numofmembers }) def __delfield_members(self): del self.__field_members members=property(__getfield_members, __setfield_members, __delfield_members, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('datetime', self.__field_datetime, None) yield ('name', self.__field_name, None) yield ('numofmembers', self.__field_numofmembers, None) if self.numofmembers: yield ('members', self.__field_members, None) class _gen_p_samsungscha950_188(BaseProtogenClass): 'Anonymous inner class' __fields=['index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_samsungscha950_188,self).__init__(**dict) if self.__class__ is _gen_p_samsungscha950_188: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_samsungscha950_188,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_samsungscha950_188,kwargs) if len(args): dict2={'sizeinbytes': 2} dict2.update(kwargs) kwargs=dict2 self.__field_index=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) class GroupIndexFile(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['num_of_entries', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(GroupIndexFile,self).__init__(**dict) if self.__class__ is GroupIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(GroupIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(GroupIndexFile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_num_of_entries=UINT(**{'sizeinbytes': 1}) self.__field_num_of_entries.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': GroupEntry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_num_of_entries(self): return self.__field_num_of_entries.getvalue() def __setfield_num_of_entries(self, value): if isinstance(value,UINT): self.__field_num_of_entries=value else: self.__field_num_of_entries=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_of_entries(self): del self.__field_num_of_entries num_of_entries=property(__getfield_num_of_entries, __setfield_num_of_entries, __delfield_num_of_entries, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': GroupEntry }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': GroupEntry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('num_of_entries', self.__field_num_of_entries, None) yield ('items', self.__field_items, None) class CalIndexEntry(BaseProtogenClass): __fields=['index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(CalIndexEntry,self).__init__(**dict) if self.__class__ is CalIndexEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(CalIndexEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(CalIndexEntry,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0 } dict2.update(kwargs) kwargs=dict2 self.__field_index=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) class CalIndexFile(BaseProtogenClass): __fields=['next_index', 'zero1', 'numofevents', 'zero2', 'numofnotes', 'zero3', 'numofactiveevents', 'zero4', 'events', 'notes', 'activeevents'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(CalIndexFile,self).__init__(**dict) if self.__class__ is CalIndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(CalIndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(CalIndexFile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_next_index.writetobuffer(buf) try: self.__field_zero1 except: self.__field_zero1=UNKNOWN(**{'sizeinbytes': 12, 'pad': 0 }) self.__field_zero1.writetobuffer(buf) self.__field_numofevents.writetobuffer(buf) try: self.__field_zero2 except: self.__field_zero2=UNKNOWN(**{'sizeinbytes': 6, 'pad': 0 }) self.__field_zero2.writetobuffer(buf) self.__field_numofnotes.writetobuffer(buf) try: self.__field_zero3 except: self.__field_zero3=UNKNOWN(**{'sizeinbytes': 2, 'pad': 0 }) self.__field_zero3.writetobuffer(buf) self.__field_numofactiveevents.writetobuffer(buf) try: self.__field_zero4 except: self.__field_zero4=UNKNOWN(**{'sizeinbytes': 112, 'pad': 0 }) self.__field_zero4.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{ 'elementclass': CalIndexEntry, 'length': 103, 'createdefault': True }) self.__field_events.writetobuffer(buf) try: self.__field_notes except: self.__field_notes=LIST(**{ 'elementclass': CalIndexEntry, 'length': 30, 'createdefault': True }) self.__field_notes.writetobuffer(buf) try: self.__field_activeevents except: self.__field_activeevents=LIST(**{ 'elementclass': CalIndexEntry, 'length': 324, 'createdefault': True }) self.__field_activeevents.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_next_index=UINT(**{'sizeinbytes': 2}) self.__field_next_index.readfrombuffer(buf) self.__field_zero1=UNKNOWN(**{'sizeinbytes': 12, 'pad': 0 }) self.__field_zero1.readfrombuffer(buf) self.__field_numofevents=UINT(**{'sizeinbytes': 2}) self.__field_numofevents.readfrombuffer(buf) self.__field_zero2=UNKNOWN(**{'sizeinbytes': 6, 'pad': 0 }) self.__field_zero2.readfrombuffer(buf) self.__field_numofnotes=UINT(**{'sizeinbytes': 2}) self.__field_numofnotes.readfrombuffer(buf) self.__field_zero3=UNKNOWN(**{'sizeinbytes': 2, 'pad': 0 }) self.__field_zero3.readfrombuffer(buf) self.__field_numofactiveevents=UINT(**{'sizeinbytes': 2}) self.__field_numofactiveevents.readfrombuffer(buf) self.__field_zero4=UNKNOWN(**{'sizeinbytes': 112, 'pad': 0 }) self.__field_zero4.readfrombuffer(buf) self.__field_events=LIST(**{ 'elementclass': CalIndexEntry, 'length': 103, 'createdefault': True }) self.__field_events.readfrombuffer(buf) self.__field_notes=LIST(**{ 'elementclass': CalIndexEntry, 'length': 30, 'createdefault': True }) self.__field_notes.readfrombuffer(buf) self.__field_activeevents=LIST(**{ 'elementclass': CalIndexEntry, 'length': 324, 'createdefault': True }) self.__field_activeevents.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_next_index(self): return self.__field_next_index.getvalue() def __setfield_next_index(self, value): if isinstance(value,UINT): self.__field_next_index=value else: self.__field_next_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_next_index(self): del self.__field_next_index next_index=property(__getfield_next_index, __setfield_next_index, __delfield_next_index, None) def __getfield_zero1(self): try: self.__field_zero1 except: self.__field_zero1=UNKNOWN(**{'sizeinbytes': 12, 'pad': 0 }) return self.__field_zero1.getvalue() def __setfield_zero1(self, value): if isinstance(value,UNKNOWN): self.__field_zero1=value else: self.__field_zero1=UNKNOWN(value,**{'sizeinbytes': 12, 'pad': 0 }) def __delfield_zero1(self): del self.__field_zero1 zero1=property(__getfield_zero1, __setfield_zero1, __delfield_zero1, None) def __getfield_numofevents(self): return self.__field_numofevents.getvalue() def __setfield_numofevents(self, value): if isinstance(value,UINT): self.__field_numofevents=value else: self.__field_numofevents=UINT(value,**{'sizeinbytes': 2}) def __delfield_numofevents(self): del self.__field_numofevents numofevents=property(__getfield_numofevents, __setfield_numofevents, __delfield_numofevents, None) def __getfield_zero2(self): try: self.__field_zero2 except: self.__field_zero2=UNKNOWN(**{'sizeinbytes': 6, 'pad': 0 }) return self.__field_zero2.getvalue() def __setfield_zero2(self, value): if isinstance(value,UNKNOWN): self.__field_zero2=value else: self.__field_zero2=UNKNOWN(value,**{'sizeinbytes': 6, 'pad': 0 }) def __delfield_zero2(self): del self.__field_zero2 zero2=property(__getfield_zero2, __setfield_zero2, __delfield_zero2, None) def __getfield_numofnotes(self): return self.__field_numofnotes.getvalue() def __setfield_numofnotes(self, value): if isinstance(value,UINT): self.__field_numofnotes=value else: self.__field_numofnotes=UINT(value,**{'sizeinbytes': 2}) def __delfield_numofnotes(self): del self.__field_numofnotes numofnotes=property(__getfield_numofnotes, __setfield_numofnotes, __delfield_numofnotes, None) def __getfield_zero3(self): try: self.__field_zero3 except: self.__field_zero3=UNKNOWN(**{'sizeinbytes': 2, 'pad': 0 }) return self.__field_zero3.getvalue() def __setfield_zero3(self, value): if isinstance(value,UNKNOWN): self.__field_zero3=value else: self.__field_zero3=UNKNOWN(value,**{'sizeinbytes': 2, 'pad': 0 }) def __delfield_zero3(self): del self.__field_zero3 zero3=property(__getfield_zero3, __setfield_zero3, __delfield_zero3, None) def __getfield_numofactiveevents(self): return self.__field_numofactiveevents.getvalue() def __setfield_numofactiveevents(self, value): if isinstance(value,UINT): self.__field_numofactiveevents=value else: self.__field_numofactiveevents=UINT(value,**{'sizeinbytes': 2}) def __delfield_numofactiveevents(self): del self.__field_numofactiveevents numofactiveevents=property(__getfield_numofactiveevents, __setfield_numofactiveevents, __delfield_numofactiveevents, None) def __getfield_zero4(self): try: self.__field_zero4 except: self.__field_zero4=UNKNOWN(**{'sizeinbytes': 112, 'pad': 0 }) return self.__field_zero4.getvalue() def __setfield_zero4(self, value): if isinstance(value,UNKNOWN): self.__field_zero4=value else: self.__field_zero4=UNKNOWN(value,**{'sizeinbytes': 112, 'pad': 0 }) def __delfield_zero4(self): del self.__field_zero4 zero4=property(__getfield_zero4, __setfield_zero4, __delfield_zero4, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{ 'elementclass': CalIndexEntry, 'length': 103, 'createdefault': True }) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{ 'elementclass': CalIndexEntry, 'length': 103, 'createdefault': True }) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def __getfield_notes(self): try: self.__field_notes except: self.__field_notes=LIST(**{ 'elementclass': CalIndexEntry, 'length': 30, 'createdefault': True }) return self.__field_notes.getvalue() def __setfield_notes(self, value): if isinstance(value,LIST): self.__field_notes=value else: self.__field_notes=LIST(value,**{ 'elementclass': CalIndexEntry, 'length': 30, 'createdefault': True }) def __delfield_notes(self): del self.__field_notes notes=property(__getfield_notes, __setfield_notes, __delfield_notes, None) def __getfield_activeevents(self): try: self.__field_activeevents except: self.__field_activeevents=LIST(**{ 'elementclass': CalIndexEntry, 'length': 324, 'createdefault': True }) return self.__field_activeevents.getvalue() def __setfield_activeevents(self, value): if isinstance(value,LIST): self.__field_activeevents=value else: self.__field_activeevents=LIST(value,**{ 'elementclass': CalIndexEntry, 'length': 324, 'createdefault': True }) def __delfield_activeevents(self): del self.__field_activeevents activeevents=property(__getfield_activeevents, __setfield_activeevents, __delfield_activeevents, None) def iscontainer(self): return True def containerelements(self): yield ('next_index', self.__field_next_index, None) yield ('zero1', self.__field_zero1, None) yield ('numofevents', self.__field_numofevents, None) yield ('zero2', self.__field_zero2, None) yield ('numofnotes', self.__field_numofnotes, None) yield ('zero3', self.__field_zero3, None) yield ('numofactiveevents', self.__field_numofactiveevents, None) yield ('zero4', self.__field_zero4, None) yield ('events', self.__field_events, None) yield ('notes', self.__field_notes, None) yield ('activeevents', self.__field_activeevents, None) class CalEntry(BaseProtogenClass): __fields=['titlelen', 'title', 'start', 'zero1', 'start2', 'zero2', 'exptime', 'zero3', 'one', 'repeat', 'three', 'alarm', 'alert', 'zero4', 'duration', 'timezone', 'creationtime', 'zero5', 'modifiedtime', 'zero6', 'ringtonelen', 'ringtone', 'zero7'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(CalEntry,self).__init__(**dict) if self.__class__ is CalEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(CalEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(CalEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_titlelen.writetobuffer(buf) self.__field_title.writetobuffer(buf) self.__field_start.writetobuffer(buf) try: self.__field_zero1 except: self.__field_zero1=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) self.__field_zero1.writetobuffer(buf) try: self.__field_start2 except: self.__field_start2=DateTime(**{'sizeinbytes': 4, 'default': self.start }) self.__field_start2.writetobuffer(buf) try: self.__field_zero2 except: self.__field_zero2=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) self.__field_zero2.writetobuffer(buf) self.__field_exptime.writetobuffer(buf) try: self.__field_zero3 except: self.__field_zero3=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) self.__field_zero3.writetobuffer(buf) try: self.__field_one except: self.__field_one=UINT(**{'sizeinbytes': 1, 'default': 1 }) self.__field_one.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) try: self.__field_three except: self.__field_three=UINT(**{'sizeinbytes': 1, 'default': 3 }) self.__field_three.writetobuffer(buf) self.__field_alarm.writetobuffer(buf) self.__field_alert.writetobuffer(buf) try: self.__field_zero4 except: self.__field_zero4=UNKNOWN(**{'sizeinbytes': 6, 'pad': 0 }) self.__field_zero4.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_timezone.writetobuffer(buf) self.__field_creationtime.writetobuffer(buf) try: self.__field_zero5 except: self.__field_zero5=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) self.__field_zero5.writetobuffer(buf) self.__field_modifiedtime.writetobuffer(buf) try: self.__field_zero6 except: self.__field_zero6=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) self.__field_zero6.writetobuffer(buf) self.__field_ringtonelen.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) try: self.__field_zero7 except: self.__field_zero7=UNKNOWN(**{'sizeinbytes': 2, 'pad': 0 }) self.__field_zero7.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_titlelen=UINT(**{'sizeinbytes': 2}) self.__field_titlelen.readfrombuffer(buf) self.__field_title=USTRING(**{ 'sizeinbytes': self.titlelen, 'encoding': ENCODING, 'terminator': None }) self.__field_title.readfrombuffer(buf) self.__field_start=DateTime(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_zero1=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) self.__field_zero1.readfrombuffer(buf) self.__field_start2=DateTime(**{'sizeinbytes': 4, 'default': self.start }) self.__field_start2.readfrombuffer(buf) self.__field_zero2=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) self.__field_zero2.readfrombuffer(buf) self.__field_exptime=ExpiringTime(**{'sizeinbytes': 4}) self.__field_exptime.readfrombuffer(buf) self.__field_zero3=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) self.__field_zero3.readfrombuffer(buf) self.__field_one=UINT(**{'sizeinbytes': 1, 'default': 1 }) self.__field_one.readfrombuffer(buf) self.__field_repeat=UINT(**{'sizeinbytes': 1}) self.__field_repeat.readfrombuffer(buf) self.__field_three=UINT(**{'sizeinbytes': 1, 'default': 3 }) self.__field_three.readfrombuffer(buf) self.__field_alarm=UINT(**{'sizeinbytes': 1}) self.__field_alarm.readfrombuffer(buf) self.__field_alert=UINT(**{'sizeinbytes': 1}) self.__field_alert.readfrombuffer(buf) self.__field_zero4=UNKNOWN(**{'sizeinbytes': 6, 'pad': 0 }) self.__field_zero4.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_timezone=UINT(**{'sizeinbytes': 1}) self.__field_timezone.readfrombuffer(buf) self.__field_creationtime=DateTime(**{'sizeinbytes': 4}) self.__field_creationtime.readfrombuffer(buf) self.__field_zero5=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) self.__field_zero5.readfrombuffer(buf) self.__field_modifiedtime=DateTime(**{'sizeinbytes': 4}) self.__field_modifiedtime.readfrombuffer(buf) self.__field_zero6=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) self.__field_zero6.readfrombuffer(buf) self.__field_ringtonelen=UINT(**{'sizeinbytes': 2}) self.__field_ringtonelen.readfrombuffer(buf) self.__field_ringtone=STRING(**{ 'sizeinbytes': self.ringtonelen, 'terminator': None }) self.__field_ringtone.readfrombuffer(buf) self.__field_zero7=UNKNOWN(**{'sizeinbytes': 2, 'pad': 0 }) self.__field_zero7.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_titlelen(self): return self.__field_titlelen.getvalue() def __setfield_titlelen(self, value): if isinstance(value,UINT): self.__field_titlelen=value else: self.__field_titlelen=UINT(value,**{'sizeinbytes': 2}) def __delfield_titlelen(self): del self.__field_titlelen titlelen=property(__getfield_titlelen, __setfield_titlelen, __delfield_titlelen, None) def __getfield_title(self): return self.__field_title.getvalue() def __setfield_title(self, value): if isinstance(value,USTRING): self.__field_title=value else: self.__field_title=USTRING(value,**{ 'sizeinbytes': self.titlelen, 'encoding': ENCODING, 'terminator': None }) def __delfield_title(self): del self.__field_title title=property(__getfield_title, __setfield_title, __delfield_title, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,DateTime): self.__field_start=value else: self.__field_start=DateTime(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_zero1(self): try: self.__field_zero1 except: self.__field_zero1=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) return self.__field_zero1.getvalue() def __setfield_zero1(self, value): if isinstance(value,UNKNOWN): self.__field_zero1=value else: self.__field_zero1=UNKNOWN(value,**{'sizeinbytes': 4, 'pad': 0 }) def __delfield_zero1(self): del self.__field_zero1 zero1=property(__getfield_zero1, __setfield_zero1, __delfield_zero1, None) def __getfield_start2(self): try: self.__field_start2 except: self.__field_start2=DateTime(**{'sizeinbytes': 4, 'default': self.start }) return self.__field_start2.getvalue() def __setfield_start2(self, value): if isinstance(value,DateTime): self.__field_start2=value else: self.__field_start2=DateTime(value,**{'sizeinbytes': 4, 'default': self.start }) def __delfield_start2(self): del self.__field_start2 start2=property(__getfield_start2, __setfield_start2, __delfield_start2, None) def __getfield_zero2(self): try: self.__field_zero2 except: self.__field_zero2=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) return self.__field_zero2.getvalue() def __setfield_zero2(self, value): if isinstance(value,UNKNOWN): self.__field_zero2=value else: self.__field_zero2=UNKNOWN(value,**{'sizeinbytes': 4, 'pad': 0 }) def __delfield_zero2(self): del self.__field_zero2 zero2=property(__getfield_zero2, __setfield_zero2, __delfield_zero2, None) def __getfield_exptime(self): return self.__field_exptime.getvalue() def __setfield_exptime(self, value): if isinstance(value,ExpiringTime): self.__field_exptime=value else: self.__field_exptime=ExpiringTime(value,**{'sizeinbytes': 4}) def __delfield_exptime(self): del self.__field_exptime exptime=property(__getfield_exptime, __setfield_exptime, __delfield_exptime, None) def __getfield_zero3(self): try: self.__field_zero3 except: self.__field_zero3=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) return self.__field_zero3.getvalue() def __setfield_zero3(self, value): if isinstance(value,UNKNOWN): self.__field_zero3=value else: self.__field_zero3=UNKNOWN(value,**{'sizeinbytes': 4, 'pad': 0 }) def __delfield_zero3(self): del self.__field_zero3 zero3=property(__getfield_zero3, __setfield_zero3, __delfield_zero3, None) def __getfield_one(self): try: self.__field_one except: self.__field_one=UINT(**{'sizeinbytes': 1, 'default': 1 }) return self.__field_one.getvalue() def __setfield_one(self, value): if isinstance(value,UINT): self.__field_one=value else: self.__field_one=UINT(value,**{'sizeinbytes': 1, 'default': 1 }) def __delfield_one(self): del self.__field_one one=property(__getfield_one, __setfield_one, __delfield_one, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,UINT): self.__field_repeat=value else: self.__field_repeat=UINT(value,**{'sizeinbytes': 1}) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_three(self): try: self.__field_three except: self.__field_three=UINT(**{'sizeinbytes': 1, 'default': 3 }) return self.__field_three.getvalue() def __setfield_three(self, value): if isinstance(value,UINT): self.__field_three=value else: self.__field_three=UINT(value,**{'sizeinbytes': 1, 'default': 3 }) def __delfield_three(self): del self.__field_three three=property(__getfield_three, __setfield_three, __delfield_three, None) def __getfield_alarm(self): return self.__field_alarm.getvalue() def __setfield_alarm(self, value): if isinstance(value,UINT): self.__field_alarm=value else: self.__field_alarm=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarm(self): del self.__field_alarm alarm=property(__getfield_alarm, __setfield_alarm, __delfield_alarm, None) def __getfield_alert(self): return self.__field_alert.getvalue() def __setfield_alert(self, value): if isinstance(value,UINT): self.__field_alert=value else: self.__field_alert=UINT(value,**{'sizeinbytes': 1}) def __delfield_alert(self): del self.__field_alert alert=property(__getfield_alert, __setfield_alert, __delfield_alert, None) def __getfield_zero4(self): try: self.__field_zero4 except: self.__field_zero4=UNKNOWN(**{'sizeinbytes': 6, 'pad': 0 }) return self.__field_zero4.getvalue() def __setfield_zero4(self, value): if isinstance(value,UNKNOWN): self.__field_zero4=value else: self.__field_zero4=UNKNOWN(value,**{'sizeinbytes': 6, 'pad': 0 }) def __delfield_zero4(self): del self.__field_zero4 zero4=property(__getfield_zero4, __setfield_zero4, __delfield_zero4, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_timezone(self): return self.__field_timezone.getvalue() def __setfield_timezone(self, value): if isinstance(value,UINT): self.__field_timezone=value else: self.__field_timezone=UINT(value,**{'sizeinbytes': 1}) def __delfield_timezone(self): del self.__field_timezone timezone=property(__getfield_timezone, __setfield_timezone, __delfield_timezone, None) def __getfield_creationtime(self): return self.__field_creationtime.getvalue() def __setfield_creationtime(self, value): if isinstance(value,DateTime): self.__field_creationtime=value else: self.__field_creationtime=DateTime(value,**{'sizeinbytes': 4}) def __delfield_creationtime(self): del self.__field_creationtime creationtime=property(__getfield_creationtime, __setfield_creationtime, __delfield_creationtime, None) def __getfield_zero5(self): try: self.__field_zero5 except: self.__field_zero5=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) return self.__field_zero5.getvalue() def __setfield_zero5(self, value): if isinstance(value,UNKNOWN): self.__field_zero5=value else: self.__field_zero5=UNKNOWN(value,**{'sizeinbytes': 4, 'pad': 0 }) def __delfield_zero5(self): del self.__field_zero5 zero5=property(__getfield_zero5, __setfield_zero5, __delfield_zero5, None) def __getfield_modifiedtime(self): return self.__field_modifiedtime.getvalue() def __setfield_modifiedtime(self, value): if isinstance(value,DateTime): self.__field_modifiedtime=value else: self.__field_modifiedtime=DateTime(value,**{'sizeinbytes': 4}) def __delfield_modifiedtime(self): del self.__field_modifiedtime modifiedtime=property(__getfield_modifiedtime, __setfield_modifiedtime, __delfield_modifiedtime, None) def __getfield_zero6(self): try: self.__field_zero6 except: self.__field_zero6=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) return self.__field_zero6.getvalue() def __setfield_zero6(self, value): if isinstance(value,UNKNOWN): self.__field_zero6=value else: self.__field_zero6=UNKNOWN(value,**{'sizeinbytes': 4, 'pad': 0 }) def __delfield_zero6(self): del self.__field_zero6 zero6=property(__getfield_zero6, __setfield_zero6, __delfield_zero6, None) def __getfield_ringtonelen(self): return self.__field_ringtonelen.getvalue() def __setfield_ringtonelen(self, value): if isinstance(value,UINT): self.__field_ringtonelen=value else: self.__field_ringtonelen=UINT(value,**{'sizeinbytes': 2}) def __delfield_ringtonelen(self): del self.__field_ringtonelen ringtonelen=property(__getfield_ringtonelen, __setfield_ringtonelen, __delfield_ringtonelen, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,STRING): self.__field_ringtone=value else: self.__field_ringtone=STRING(value,**{ 'sizeinbytes': self.ringtonelen, 'terminator': None }) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_zero7(self): try: self.__field_zero7 except: self.__field_zero7=UNKNOWN(**{'sizeinbytes': 2, 'pad': 0 }) return self.__field_zero7.getvalue() def __setfield_zero7(self, value): if isinstance(value,UNKNOWN): self.__field_zero7=value else: self.__field_zero7=UNKNOWN(value,**{'sizeinbytes': 2, 'pad': 0 }) def __delfield_zero7(self): del self.__field_zero7 zero7=property(__getfield_zero7, __setfield_zero7, __delfield_zero7, None) def iscontainer(self): return True def containerelements(self): yield ('titlelen', self.__field_titlelen, None) yield ('title', self.__field_title, None) yield ('start', self.__field_start, None) yield ('zero1', self.__field_zero1, None) yield ('start2', self.__field_start2, None) yield ('zero2', self.__field_zero2, None) yield ('exptime', self.__field_exptime, None) yield ('zero3', self.__field_zero3, None) yield ('one', self.__field_one, None) yield ('repeat', self.__field_repeat, None) yield ('three', self.__field_three, None) yield ('alarm', self.__field_alarm, None) yield ('alert', self.__field_alert, None) yield ('zero4', self.__field_zero4, None) yield ('duration', self.__field_duration, None) yield ('timezone', self.__field_timezone, None) yield ('creationtime', self.__field_creationtime, None) yield ('zero5', self.__field_zero5, None) yield ('modifiedtime', self.__field_modifiedtime, None) yield ('zero6', self.__field_zero6, None) yield ('ringtonelen', self.__field_ringtonelen, None) yield ('ringtone', self.__field_ringtone, None) yield ('zero7', self.__field_zero7, None) class NotePadEntry(BaseProtogenClass): __fields=['textlen', 'text', 'creation', 'zero1', 'creation2', 'zero2', 'five', 'zero3', 'modified', 'zero4', 'modified2', 'zero5'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(NotePadEntry,self).__init__(**dict) if self.__class__ is NotePadEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(NotePadEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(NotePadEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_textlen.writetobuffer(buf) self.__field_text.writetobuffer(buf) self.__field_creation.writetobuffer(buf) try: self.__field_zero1 except: self.__field_zero1=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) self.__field_zero1.writetobuffer(buf) try: self.__field_creation2 except: self.__field_creation2=DateTime(**{'sizeinbytes': 4, 'default': self.creation }) self.__field_creation2.writetobuffer(buf) try: self.__field_zero2 except: self.__field_zero2=UNKNOWN(**{'sizeinbytes': 14, 'pad': 0 }) self.__field_zero2.writetobuffer(buf) try: self.__field_five except: self.__field_five=UINT(**{'sizeinbytes': 1, 'default': 5 }) self.__field_five.writetobuffer(buf) try: self.__field_zero3 except: self.__field_zero3=UNKNOWN(**{'sizeinbytes': 13, 'pad': 0 }) self.__field_zero3.writetobuffer(buf) try: self.__field_modified except: self.__field_modified=DateTime(**{'sizeinbytes': 4, 'default': self.creation }) self.__field_modified.writetobuffer(buf) try: self.__field_zero4 except: self.__field_zero4=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) self.__field_zero4.writetobuffer(buf) try: self.__field_modified2 except: self.__field_modified2=DateTime(**{'sizeinbytes': 4, 'default': self.modified }) self.__field_modified2.writetobuffer(buf) try: self.__field_zero5 except: self.__field_zero5=UNKNOWN(**{'sizeinbytes': 8, 'pad': 0 }) self.__field_zero5.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_textlen=UINT(**{'sizeinbytes': 2}) self.__field_textlen.readfrombuffer(buf) self.__field_text=USTRING(**{ 'terminator': None, 'encoding': ENCODING, 'sizeinbytes': self.textlen }) self.__field_text.readfrombuffer(buf) self.__field_creation=DateTime(**{'sizeinbytes': 4}) self.__field_creation.readfrombuffer(buf) self.__field_zero1=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) self.__field_zero1.readfrombuffer(buf) self.__field_creation2=DateTime(**{'sizeinbytes': 4, 'default': self.creation }) self.__field_creation2.readfrombuffer(buf) self.__field_zero2=UNKNOWN(**{'sizeinbytes': 14, 'pad': 0 }) self.__field_zero2.readfrombuffer(buf) self.__field_five=UINT(**{'sizeinbytes': 1, 'default': 5 }) self.__field_five.readfrombuffer(buf) self.__field_zero3=UNKNOWN(**{'sizeinbytes': 13, 'pad': 0 }) self.__field_zero3.readfrombuffer(buf) self.__field_modified=DateTime(**{'sizeinbytes': 4, 'default': self.creation }) self.__field_modified.readfrombuffer(buf) self.__field_zero4=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) self.__field_zero4.readfrombuffer(buf) self.__field_modified2=DateTime(**{'sizeinbytes': 4, 'default': self.modified }) self.__field_modified2.readfrombuffer(buf) self.__field_zero5=UNKNOWN(**{'sizeinbytes': 8, 'pad': 0 }) self.__field_zero5.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_textlen(self): return self.__field_textlen.getvalue() def __setfield_textlen(self, value): if isinstance(value,UINT): self.__field_textlen=value else: self.__field_textlen=UINT(value,**{'sizeinbytes': 2}) def __delfield_textlen(self): del self.__field_textlen textlen=property(__getfield_textlen, __setfield_textlen, __delfield_textlen, None) def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,USTRING): self.__field_text=value else: self.__field_text=USTRING(value,**{ 'terminator': None, 'encoding': ENCODING, 'sizeinbytes': self.textlen }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def __getfield_creation(self): return self.__field_creation.getvalue() def __setfield_creation(self, value): if isinstance(value,DateTime): self.__field_creation=value else: self.__field_creation=DateTime(value,**{'sizeinbytes': 4}) def __delfield_creation(self): del self.__field_creation creation=property(__getfield_creation, __setfield_creation, __delfield_creation, None) def __getfield_zero1(self): try: self.__field_zero1 except: self.__field_zero1=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) return self.__field_zero1.getvalue() def __setfield_zero1(self, value): if isinstance(value,UNKNOWN): self.__field_zero1=value else: self.__field_zero1=UNKNOWN(value,**{'sizeinbytes': 4, 'pad': 0 }) def __delfield_zero1(self): del self.__field_zero1 zero1=property(__getfield_zero1, __setfield_zero1, __delfield_zero1, None) def __getfield_creation2(self): try: self.__field_creation2 except: self.__field_creation2=DateTime(**{'sizeinbytes': 4, 'default': self.creation }) return self.__field_creation2.getvalue() def __setfield_creation2(self, value): if isinstance(value,DateTime): self.__field_creation2=value else: self.__field_creation2=DateTime(value,**{'sizeinbytes': 4, 'default': self.creation }) def __delfield_creation2(self): del self.__field_creation2 creation2=property(__getfield_creation2, __setfield_creation2, __delfield_creation2, None) def __getfield_zero2(self): try: self.__field_zero2 except: self.__field_zero2=UNKNOWN(**{'sizeinbytes': 14, 'pad': 0 }) return self.__field_zero2.getvalue() def __setfield_zero2(self, value): if isinstance(value,UNKNOWN): self.__field_zero2=value else: self.__field_zero2=UNKNOWN(value,**{'sizeinbytes': 14, 'pad': 0 }) def __delfield_zero2(self): del self.__field_zero2 zero2=property(__getfield_zero2, __setfield_zero2, __delfield_zero2, None) def __getfield_five(self): try: self.__field_five except: self.__field_five=UINT(**{'sizeinbytes': 1, 'default': 5 }) return self.__field_five.getvalue() def __setfield_five(self, value): if isinstance(value,UINT): self.__field_five=value else: self.__field_five=UINT(value,**{'sizeinbytes': 1, 'default': 5 }) def __delfield_five(self): del self.__field_five five=property(__getfield_five, __setfield_five, __delfield_five, None) def __getfield_zero3(self): try: self.__field_zero3 except: self.__field_zero3=UNKNOWN(**{'sizeinbytes': 13, 'pad': 0 }) return self.__field_zero3.getvalue() def __setfield_zero3(self, value): if isinstance(value,UNKNOWN): self.__field_zero3=value else: self.__field_zero3=UNKNOWN(value,**{'sizeinbytes': 13, 'pad': 0 }) def __delfield_zero3(self): del self.__field_zero3 zero3=property(__getfield_zero3, __setfield_zero3, __delfield_zero3, None) def __getfield_modified(self): try: self.__field_modified except: self.__field_modified=DateTime(**{'sizeinbytes': 4, 'default': self.creation }) return self.__field_modified.getvalue() def __setfield_modified(self, value): if isinstance(value,DateTime): self.__field_modified=value else: self.__field_modified=DateTime(value,**{'sizeinbytes': 4, 'default': self.creation }) def __delfield_modified(self): del self.__field_modified modified=property(__getfield_modified, __setfield_modified, __delfield_modified, None) def __getfield_zero4(self): try: self.__field_zero4 except: self.__field_zero4=UNKNOWN(**{'sizeinbytes': 4, 'pad': 0 }) return self.__field_zero4.getvalue() def __setfield_zero4(self, value): if isinstance(value,UNKNOWN): self.__field_zero4=value else: self.__field_zero4=UNKNOWN(value,**{'sizeinbytes': 4, 'pad': 0 }) def __delfield_zero4(self): del self.__field_zero4 zero4=property(__getfield_zero4, __setfield_zero4, __delfield_zero4, None) def __getfield_modified2(self): try: self.__field_modified2 except: self.__field_modified2=DateTime(**{'sizeinbytes': 4, 'default': self.modified }) return self.__field_modified2.getvalue() def __setfield_modified2(self, value): if isinstance(value,DateTime): self.__field_modified2=value else: self.__field_modified2=DateTime(value,**{'sizeinbytes': 4, 'default': self.modified }) def __delfield_modified2(self): del self.__field_modified2 modified2=property(__getfield_modified2, __setfield_modified2, __delfield_modified2, None) def __getfield_zero5(self): try: self.__field_zero5 except: self.__field_zero5=UNKNOWN(**{'sizeinbytes': 8, 'pad': 0 }) return self.__field_zero5.getvalue() def __setfield_zero5(self, value): if isinstance(value,UNKNOWN): self.__field_zero5=value else: self.__field_zero5=UNKNOWN(value,**{'sizeinbytes': 8, 'pad': 0 }) def __delfield_zero5(self): del self.__field_zero5 zero5=property(__getfield_zero5, __setfield_zero5, __delfield_zero5, None) def iscontainer(self): return True def containerelements(self): yield ('textlen', self.__field_textlen, None) yield ('text', self.__field_text, None) yield ('creation', self.__field_creation, None) yield ('zero1', self.__field_zero1, None) yield ('creation2', self.__field_creation2, None) yield ('zero2', self.__field_zero2, None) yield ('five', self.__field_five, None) yield ('zero3', self.__field_zero3, None) yield ('modified', self.__field_modified, None) yield ('zero4', self.__field_zero4, None) yield ('modified2', self.__field_modified2, None) yield ('zero5', self.__field_zero5, None) class JournalNumber(BaseProtogenClass): __fields=['index', 'bitmap'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(JournalNumber,self).__init__(**dict) if self.__class__ is JournalNumber: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(JournalNumber,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(JournalNumber,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_bitmap.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self.__field_bitmap=UINT(**{'sizeinbytes': 2}) self.__field_bitmap.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_bitmap(self): return self.__field_bitmap.getvalue() def __setfield_bitmap(self, value): if isinstance(value,UINT): self.__field_bitmap=value else: self.__field_bitmap=UINT(value,**{'sizeinbytes': 2}) def __delfield_bitmap(self): del self.__field_bitmap bitmap=property(__getfield_bitmap, __setfield_bitmap, __delfield_bitmap, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('bitmap', self.__field_bitmap, None) class JournalSpeeddial(BaseProtogenClass): __fields=['index', 'speeddial', 'bitmap'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(JournalSpeeddial,self).__init__(**dict) if self.__class__ is JournalSpeeddial: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(JournalSpeeddial,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(JournalSpeeddial,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_speeddial.writetobuffer(buf) self.__field_bitmap.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self.__field_speeddial=UINT(**{'sizeinbytes': 2}) self.__field_speeddial.readfrombuffer(buf) self.__field_bitmap=UINT(**{'sizeinbytes': 2}) self.__field_bitmap.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_speeddial(self): return self.__field_speeddial.getvalue() def __setfield_speeddial(self, value): if isinstance(value,UINT): self.__field_speeddial=value else: self.__field_speeddial=UINT(value,**{'sizeinbytes': 2}) def __delfield_speeddial(self): del self.__field_speeddial speeddial=property(__getfield_speeddial, __setfield_speeddial, __delfield_speeddial, None) def __getfield_bitmap(self): return self.__field_bitmap.getvalue() def __setfield_bitmap(self, value): if isinstance(value,UINT): self.__field_bitmap=value else: self.__field_bitmap=UINT(value,**{'sizeinbytes': 2}) def __delfield_bitmap(self): del self.__field_bitmap bitmap=property(__getfield_bitmap, __setfield_bitmap, __delfield_bitmap, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('speeddial', self.__field_speeddial, None) yield ('bitmap', self.__field_bitmap, None) class JournalEntry(BaseProtogenClass): __fields=['number_info', 'speeddial_info', 'index', 'data1', 'previndex', 'home', 'nohome', 'work', 'nowork', 'cell', 'nocell', 'data2', 'fax', 'nofax', 'cell2', 'nocell2', 'homesd', 'nohomesd', 'worksd', 'noworksd', 'cellsd', 'nocellsd', 'data3', 'faxsd', 'nofaxsd', 'cell2sd', 'nocell2sd', 'previndex2', 'previndex3', 'data4', 'email', 'email2', 'wallpaper'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(JournalEntry,self).__init__(**dict) if self.__class__ is JournalEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(JournalEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(JournalEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_number_info except: self.__field_number_info=UINT(**{ 'default': 0 }) try: self.__field_speeddial_info except: self.__field_speeddial_info=UINT(**{ 'default': 0 }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) try: self.__field_data1 except: self.__field_data1=DATA(**{'sizeinbytes': 1, 'default': '\x00' }) self.__field_data1.writetobuffer(buf) try: self.__field_previndex except: self.__field_previndex=UINT(**{'sizeinbytes': 2, 'default': self.index-1 }) self.__field_previndex.writetobuffer(buf) if self.number_info & PB_FLG_HOME: self.__field_home.writetobuffer(buf) else: try: self.__field_nohome except: self.__field_nohome=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_nohome.writetobuffer(buf) if self.number_info & PB_FLG_WORK: self.__field_work.writetobuffer(buf) else: try: self.__field_nowork except: self.__field_nowork=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_nowork.writetobuffer(buf) if self.number_info & PB_FLG_CELL: self.__field_cell.writetobuffer(buf) else: try: self.__field_nocell except: self.__field_nocell=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_nocell.writetobuffer(buf) try: self.__field_data2 except: self.__field_data2=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_data2.writetobuffer(buf) if self.number_info & PB_FLG_FAX: self.__field_fax.writetobuffer(buf) else: try: self.__field_nofax except: self.__field_nofax=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_nofax.writetobuffer(buf) if self.number_info&PB_FLG_CELL2: self.__field_cell2.writetobuffer(buf) else: try: self.__field_nocell2 except: self.__field_nocell2=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_nocell2.writetobuffer(buf) if self.speeddial_info & PB_FLG_HOME: self.__field_homesd.writetobuffer(buf) else: try: self.__field_nohomesd except: self.__field_nohomesd=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_nohomesd.writetobuffer(buf) if self.speeddial_info & PB_FLG_WORK: self.__field_worksd.writetobuffer(buf) else: try: self.__field_noworksd except: self.__field_noworksd=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_noworksd.writetobuffer(buf) if self.speeddial_info&PB_FLG_CELL: self.__field_cellsd.writetobuffer(buf) else: try: self.__field_nocellsd except: self.__field_nocellsd=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_nocellsd.writetobuffer(buf) try: self.__field_data3 except: self.__field_data3=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_data3.writetobuffer(buf) if self.speeddial_info&PB_FLG_FAX: self.__field_faxsd.writetobuffer(buf) else: try: self.__field_nofaxsd except: self.__field_nofaxsd=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_nofaxsd.writetobuffer(buf) if self.speeddial_info&PB_FLG_CELL2: self.__field_cell2sd.writetobuffer(buf) else: try: self.__field_nocell2sd except: self.__field_nocell2sd=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_nocell2sd.writetobuffer(buf) try: self.__field_previndex2 except: self.__field_previndex2=UINT(**{'sizeinbytes': 2, 'default': self.previndex }) self.__field_previndex2.writetobuffer(buf) try: self.__field_previndex3 except: self.__field_previndex3=UINT(**{'sizeinbytes': 2, 'default': self.previndex }) self.__field_previndex3.writetobuffer(buf) try: self.__field_data4 except: self.__field_data4=DATA(**{'sizeinbytes': 4, 'default': '\x10\x00\x0C\x04' }) self.__field_data4.writetobuffer(buf) try: self.__field_email except: self.__field_email=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_email.writetobuffer(buf) try: self.__field_email2 except: self.__field_email2=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_email2.writetobuffer(buf) try: self.__field_wallpaper except: self.__field_wallpaper=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_wallpaper.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self.__field_data1=DATA(**{'sizeinbytes': 1, 'default': '\x00' }) self.__field_data1.readfrombuffer(buf) self.__field_previndex=UINT(**{'sizeinbytes': 2, 'default': self.index-1 }) self.__field_previndex.readfrombuffer(buf) if self.number_info & PB_FLG_HOME: self.__field_home=JournalNumber() self.__field_home.readfrombuffer(buf) else: self.__field_nohome=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_nohome.readfrombuffer(buf) if self.number_info & PB_FLG_WORK: self.__field_work=JournalNumber() self.__field_work.readfrombuffer(buf) else: self.__field_nowork=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_nowork.readfrombuffer(buf) if self.number_info & PB_FLG_CELL: self.__field_cell=JournalNumber() self.__field_cell.readfrombuffer(buf) else: self.__field_nocell=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_nocell.readfrombuffer(buf) self.__field_data2=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_data2.readfrombuffer(buf) if self.number_info & PB_FLG_FAX: self.__field_fax=JournalNumber() self.__field_fax.readfrombuffer(buf) else: self.__field_nofax=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_nofax.readfrombuffer(buf) if self.number_info&PB_FLG_CELL2: self.__field_cell2=JournalNumber() self.__field_cell2.readfrombuffer(buf) else: self.__field_nocell2=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_nocell2.readfrombuffer(buf) if self.speeddial_info & PB_FLG_HOME: self.__field_homesd=JournalSpeeddial() self.__field_homesd.readfrombuffer(buf) else: self.__field_nohomesd=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_nohomesd.readfrombuffer(buf) if self.speeddial_info & PB_FLG_WORK: self.__field_worksd=JournalSpeeddial() self.__field_worksd.readfrombuffer(buf) else: self.__field_noworksd=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_noworksd.readfrombuffer(buf) if self.speeddial_info&PB_FLG_CELL: self.__field_cellsd=JournalSpeeddial() self.__field_cellsd.readfrombuffer(buf) else: self.__field_nocellsd=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_nocellsd.readfrombuffer(buf) self.__field_data3=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_data3.readfrombuffer(buf) if self.speeddial_info&PB_FLG_FAX: self.__field_faxsd=JournalSpeeddial() self.__field_faxsd.readfrombuffer(buf) else: self.__field_nofaxsd=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_nofaxsd.readfrombuffer(buf) if self.speeddial_info&PB_FLG_CELL2: self.__field_cell2sd=JournalSpeeddial() self.__field_cell2sd.readfrombuffer(buf) else: self.__field_nocell2sd=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_nocell2sd.readfrombuffer(buf) self.__field_previndex2=UINT(**{'sizeinbytes': 2, 'default': self.previndex }) self.__field_previndex2.readfrombuffer(buf) self.__field_previndex3=UINT(**{'sizeinbytes': 2, 'default': self.previndex }) self.__field_previndex3.readfrombuffer(buf) self.__field_data4=DATA(**{'sizeinbytes': 4, 'default': '\x10\x00\x0C\x04' }) self.__field_data4.readfrombuffer(buf) self.__field_email=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_email.readfrombuffer(buf) self.__field_email2=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_email2.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) self.__field_wallpaper.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number_info(self): try: self.__field_number_info except: self.__field_number_info=UINT(**{ 'default': 0 }) return self.__field_number_info.getvalue() def __setfield_number_info(self, value): if isinstance(value,UINT): self.__field_number_info=value else: self.__field_number_info=UINT(value,**{ 'default': 0 }) def __delfield_number_info(self): del self.__field_number_info number_info=property(__getfield_number_info, __setfield_number_info, __delfield_number_info, None) def __getfield_speeddial_info(self): try: self.__field_speeddial_info except: self.__field_speeddial_info=UINT(**{ 'default': 0 }) return self.__field_speeddial_info.getvalue() def __setfield_speeddial_info(self, value): if isinstance(value,UINT): self.__field_speeddial_info=value else: self.__field_speeddial_info=UINT(value,**{ 'default': 0 }) def __delfield_speeddial_info(self): del self.__field_speeddial_info speeddial_info=property(__getfield_speeddial_info, __setfield_speeddial_info, __delfield_speeddial_info, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_data1(self): try: self.__field_data1 except: self.__field_data1=DATA(**{'sizeinbytes': 1, 'default': '\x00' }) return self.__field_data1.getvalue() def __setfield_data1(self, value): if isinstance(value,DATA): self.__field_data1=value else: self.__field_data1=DATA(value,**{'sizeinbytes': 1, 'default': '\x00' }) def __delfield_data1(self): del self.__field_data1 data1=property(__getfield_data1, __setfield_data1, __delfield_data1, None) def __getfield_previndex(self): try: self.__field_previndex except: self.__field_previndex=UINT(**{'sizeinbytes': 2, 'default': self.index-1 }) return self.__field_previndex.getvalue() def __setfield_previndex(self, value): if isinstance(value,UINT): self.__field_previndex=value else: self.__field_previndex=UINT(value,**{'sizeinbytes': 2, 'default': self.index-1 }) def __delfield_previndex(self): del self.__field_previndex previndex=property(__getfield_previndex, __setfield_previndex, __delfield_previndex, None) def __getfield_home(self): return self.__field_home.getvalue() def __setfield_home(self, value): if isinstance(value,JournalNumber): self.__field_home=value else: self.__field_home=JournalNumber(value,) def __delfield_home(self): del self.__field_home home=property(__getfield_home, __setfield_home, __delfield_home, None) def __getfield_nohome(self): try: self.__field_nohome except: self.__field_nohome=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) return self.__field_nohome.getvalue() def __setfield_nohome(self, value): if isinstance(value,UINT): self.__field_nohome=value else: self.__field_nohome=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_nohome(self): del self.__field_nohome nohome=property(__getfield_nohome, __setfield_nohome, __delfield_nohome, None) def __getfield_work(self): return self.__field_work.getvalue() def __setfield_work(self, value): if isinstance(value,JournalNumber): self.__field_work=value else: self.__field_work=JournalNumber(value,) def __delfield_work(self): del self.__field_work work=property(__getfield_work, __setfield_work, __delfield_work, None) def __getfield_nowork(self): try: self.__field_nowork except: self.__field_nowork=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) return self.__field_nowork.getvalue() def __setfield_nowork(self, value): if isinstance(value,UINT): self.__field_nowork=value else: self.__field_nowork=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_nowork(self): del self.__field_nowork nowork=property(__getfield_nowork, __setfield_nowork, __delfield_nowork, None) def __getfield_cell(self): return self.__field_cell.getvalue() def __setfield_cell(self, value): if isinstance(value,JournalNumber): self.__field_cell=value else: self.__field_cell=JournalNumber(value,) def __delfield_cell(self): del self.__field_cell cell=property(__getfield_cell, __setfield_cell, __delfield_cell, None) def __getfield_nocell(self): try: self.__field_nocell except: self.__field_nocell=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) return self.__field_nocell.getvalue() def __setfield_nocell(self, value): if isinstance(value,UINT): self.__field_nocell=value else: self.__field_nocell=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_nocell(self): del self.__field_nocell nocell=property(__getfield_nocell, __setfield_nocell, __delfield_nocell, None) def __getfield_data2(self): try: self.__field_data2 except: self.__field_data2=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) return self.__field_data2.getvalue() def __setfield_data2(self, value): if isinstance(value,UINT): self.__field_data2=value else: self.__field_data2=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_data2(self): del self.__field_data2 data2=property(__getfield_data2, __setfield_data2, __delfield_data2, None) def __getfield_fax(self): return self.__field_fax.getvalue() def __setfield_fax(self, value): if isinstance(value,JournalNumber): self.__field_fax=value else: self.__field_fax=JournalNumber(value,) def __delfield_fax(self): del self.__field_fax fax=property(__getfield_fax, __setfield_fax, __delfield_fax, None) def __getfield_nofax(self): try: self.__field_nofax except: self.__field_nofax=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) return self.__field_nofax.getvalue() def __setfield_nofax(self, value): if isinstance(value,UINT): self.__field_nofax=value else: self.__field_nofax=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_nofax(self): del self.__field_nofax nofax=property(__getfield_nofax, __setfield_nofax, __delfield_nofax, None) def __getfield_cell2(self): return self.__field_cell2.getvalue() def __setfield_cell2(self, value): if isinstance(value,JournalNumber): self.__field_cell2=value else: self.__field_cell2=JournalNumber(value,) def __delfield_cell2(self): del self.__field_cell2 cell2=property(__getfield_cell2, __setfield_cell2, __delfield_cell2, None) def __getfield_nocell2(self): try: self.__field_nocell2 except: self.__field_nocell2=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) return self.__field_nocell2.getvalue() def __setfield_nocell2(self, value): if isinstance(value,UINT): self.__field_nocell2=value else: self.__field_nocell2=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_nocell2(self): del self.__field_nocell2 nocell2=property(__getfield_nocell2, __setfield_nocell2, __delfield_nocell2, None) def __getfield_homesd(self): return self.__field_homesd.getvalue() def __setfield_homesd(self, value): if isinstance(value,JournalSpeeddial): self.__field_homesd=value else: self.__field_homesd=JournalSpeeddial(value,) def __delfield_homesd(self): del self.__field_homesd homesd=property(__getfield_homesd, __setfield_homesd, __delfield_homesd, None) def __getfield_nohomesd(self): try: self.__field_nohomesd except: self.__field_nohomesd=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) return self.__field_nohomesd.getvalue() def __setfield_nohomesd(self, value): if isinstance(value,UINT): self.__field_nohomesd=value else: self.__field_nohomesd=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_nohomesd(self): del self.__field_nohomesd nohomesd=property(__getfield_nohomesd, __setfield_nohomesd, __delfield_nohomesd, None) def __getfield_worksd(self): return self.__field_worksd.getvalue() def __setfield_worksd(self, value): if isinstance(value,JournalSpeeddial): self.__field_worksd=value else: self.__field_worksd=JournalSpeeddial(value,) def __delfield_worksd(self): del self.__field_worksd worksd=property(__getfield_worksd, __setfield_worksd, __delfield_worksd, None) def __getfield_noworksd(self): try: self.__field_noworksd except: self.__field_noworksd=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) return self.__field_noworksd.getvalue() def __setfield_noworksd(self, value): if isinstance(value,UINT): self.__field_noworksd=value else: self.__field_noworksd=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_noworksd(self): del self.__field_noworksd noworksd=property(__getfield_noworksd, __setfield_noworksd, __delfield_noworksd, None) def __getfield_cellsd(self): return self.__field_cellsd.getvalue() def __setfield_cellsd(self, value): if isinstance(value,JournalSpeeddial): self.__field_cellsd=value else: self.__field_cellsd=JournalSpeeddial(value,) def __delfield_cellsd(self): del self.__field_cellsd cellsd=property(__getfield_cellsd, __setfield_cellsd, __delfield_cellsd, None) def __getfield_nocellsd(self): try: self.__field_nocellsd except: self.__field_nocellsd=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) return self.__field_nocellsd.getvalue() def __setfield_nocellsd(self, value): if isinstance(value,UINT): self.__field_nocellsd=value else: self.__field_nocellsd=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_nocellsd(self): del self.__field_nocellsd nocellsd=property(__getfield_nocellsd, __setfield_nocellsd, __delfield_nocellsd, None) def __getfield_data3(self): try: self.__field_data3 except: self.__field_data3=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) return self.__field_data3.getvalue() def __setfield_data3(self, value): if isinstance(value,UINT): self.__field_data3=value else: self.__field_data3=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_data3(self): del self.__field_data3 data3=property(__getfield_data3, __setfield_data3, __delfield_data3, None) def __getfield_faxsd(self): return self.__field_faxsd.getvalue() def __setfield_faxsd(self, value): if isinstance(value,JournalSpeeddial): self.__field_faxsd=value else: self.__field_faxsd=JournalSpeeddial(value,) def __delfield_faxsd(self): del self.__field_faxsd faxsd=property(__getfield_faxsd, __setfield_faxsd, __delfield_faxsd, None) def __getfield_nofaxsd(self): try: self.__field_nofaxsd except: self.__field_nofaxsd=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) return self.__field_nofaxsd.getvalue() def __setfield_nofaxsd(self, value): if isinstance(value,UINT): self.__field_nofaxsd=value else: self.__field_nofaxsd=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_nofaxsd(self): del self.__field_nofaxsd nofaxsd=property(__getfield_nofaxsd, __setfield_nofaxsd, __delfield_nofaxsd, None) def __getfield_cell2sd(self): return self.__field_cell2sd.getvalue() def __setfield_cell2sd(self, value): if isinstance(value,JournalSpeeddial): self.__field_cell2sd=value else: self.__field_cell2sd=JournalSpeeddial(value,) def __delfield_cell2sd(self): del self.__field_cell2sd cell2sd=property(__getfield_cell2sd, __setfield_cell2sd, __delfield_cell2sd, None) def __getfield_nocell2sd(self): try: self.__field_nocell2sd except: self.__field_nocell2sd=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) return self.__field_nocell2sd.getvalue() def __setfield_nocell2sd(self, value): if isinstance(value,UINT): self.__field_nocell2sd=value else: self.__field_nocell2sd=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_nocell2sd(self): del self.__field_nocell2sd nocell2sd=property(__getfield_nocell2sd, __setfield_nocell2sd, __delfield_nocell2sd, None) def __getfield_previndex2(self): try: self.__field_previndex2 except: self.__field_previndex2=UINT(**{'sizeinbytes': 2, 'default': self.previndex }) return self.__field_previndex2.getvalue() def __setfield_previndex2(self, value): if isinstance(value,UINT): self.__field_previndex2=value else: self.__field_previndex2=UINT(value,**{'sizeinbytes': 2, 'default': self.previndex }) def __delfield_previndex2(self): del self.__field_previndex2 previndex2=property(__getfield_previndex2, __setfield_previndex2, __delfield_previndex2, None) def __getfield_previndex3(self): try: self.__field_previndex3 except: self.__field_previndex3=UINT(**{'sizeinbytes': 2, 'default': self.previndex }) return self.__field_previndex3.getvalue() def __setfield_previndex3(self, value): if isinstance(value,UINT): self.__field_previndex3=value else: self.__field_previndex3=UINT(value,**{'sizeinbytes': 2, 'default': self.previndex }) def __delfield_previndex3(self): del self.__field_previndex3 previndex3=property(__getfield_previndex3, __setfield_previndex3, __delfield_previndex3, None) def __getfield_data4(self): try: self.__field_data4 except: self.__field_data4=DATA(**{'sizeinbytes': 4, 'default': '\x10\x00\x0C\x04' }) return self.__field_data4.getvalue() def __setfield_data4(self, value): if isinstance(value,DATA): self.__field_data4=value else: self.__field_data4=DATA(value,**{'sizeinbytes': 4, 'default': '\x10\x00\x0C\x04' }) def __delfield_data4(self): del self.__field_data4 data4=property(__getfield_data4, __setfield_data4, __delfield_data4, None) def __getfield_email(self): try: self.__field_email except: self.__field_email=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,UINT): self.__field_email=value else: self.__field_email=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def __getfield_email2(self): try: self.__field_email2 except: self.__field_email2=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) return self.__field_email2.getvalue() def __setfield_email2(self, value): if isinstance(value,UINT): self.__field_email2=value else: self.__field_email2=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_email2(self): del self.__field_email2 email2=property(__getfield_email2, __setfield_email2, __delfield_email2, None) def __getfield_wallpaper(self): try: self.__field_wallpaper except: self.__field_wallpaper=UINT(**{'sizeinbytes': 2, 'default': 0xffff }) return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff }) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def iscontainer(self): return True def containerelements(self): yield ('number_info', self.__field_number_info, None) yield ('speeddial_info', self.__field_speeddial_info, None) yield ('index', self.__field_index, None) yield ('data1', self.__field_data1, None) yield ('previndex', self.__field_previndex, None) if self.number_info & PB_FLG_HOME: yield ('home', self.__field_home, None) else: yield ('nohome', self.__field_nohome, None) if self.number_info & PB_FLG_WORK: yield ('work', self.__field_work, None) else: yield ('nowork', self.__field_nowork, None) if self.number_info & PB_FLG_CELL: yield ('cell', self.__field_cell, None) else: yield ('nocell', self.__field_nocell, None) yield ('data2', self.__field_data2, None) if self.number_info & PB_FLG_FAX: yield ('fax', self.__field_fax, None) else: yield ('nofax', self.__field_nofax, None) if self.number_info&PB_FLG_CELL2: yield ('cell2', self.__field_cell2, None) else: yield ('nocell2', self.__field_nocell2, None) if self.speeddial_info & PB_FLG_HOME: yield ('homesd', self.__field_homesd, None) else: yield ('nohomesd', self.__field_nohomesd, None) if self.speeddial_info & PB_FLG_WORK: yield ('worksd', self.__field_worksd, None) else: yield ('noworksd', self.__field_noworksd, None) if self.speeddial_info&PB_FLG_CELL: yield ('cellsd', self.__field_cellsd, None) else: yield ('nocellsd', self.__field_nocellsd, None) yield ('data3', self.__field_data3, None) if self.speeddial_info&PB_FLG_FAX: yield ('faxsd', self.__field_faxsd, None) else: yield ('nofaxsd', self.__field_nofaxsd, None) if self.speeddial_info&PB_FLG_CELL2: yield ('cell2sd', self.__field_cell2sd, None) else: yield ('nocell2sd', self.__field_nocell2sd, None) yield ('previndex2', self.__field_previndex2, None) yield ('previndex3', self.__field_previndex3, None) yield ('data4', self.__field_data4, None) yield ('email', self.__field_email, None) yield ('email2', self.__field_email2, None) yield ('wallpaper', self.__field_wallpaper, None) class JournalRec(BaseProtogenClass): __fields=['command', 'blocklen', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(JournalRec,self).__init__(**dict) if self.__class__ is JournalRec: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(JournalRec,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(JournalRec,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'default': 1 }) self.__field_command.writetobuffer(buf) try: self.__field_blocklen except: self.__field_blocklen=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_blocklen.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1, 'default': 1 }) self.__field_command.readfrombuffer(buf) self.__field_blocklen=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_blocklen.readfrombuffer(buf) self.__field_entry=JournalEntry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'default': 1 }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1, 'default': 1 }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_blocklen(self): try: self.__field_blocklen except: self.__field_blocklen=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_blocklen.getvalue() def __setfield_blocklen(self, value): if isinstance(value,UINT): self.__field_blocklen=value else: self.__field_blocklen=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_blocklen(self): del self.__field_blocklen blocklen=property(__getfield_blocklen, __setfield_blocklen, __delfield_blocklen, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,JournalEntry): self.__field_entry=value else: self.__field_entry=JournalEntry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('blocklen', self.__field_blocklen, None) yield ('entry', self.__field_entry, None) class JournalFile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(JournalFile,self).__init__(**dict) if self.__class__ is JournalFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(JournalFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(JournalFile,kwargs) if len(args): dict2={ 'elementclass': JournalRec } dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': JournalRec }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{ 'elementclass': JournalRec }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': JournalRec }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': JournalRec }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class NumberEntry(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['number', 'option', 'speeddial', 'ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(NumberEntry,self).__init__(**dict) if self.__class__ is NumberEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(NumberEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(NumberEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=STRING(**{ 'terminator': None, 'pascal': True }) self.__field_number.readfrombuffer(buf) self.__field_option=UINT(**{'sizeinbytes': 1}) self.__field_option.readfrombuffer(buf) if self.has_speeddial: self.__field_speeddial=UINT(**{'sizeinbytes': 2}) self.__field_speeddial.readfrombuffer(buf) if self.has_ringtone: self.__field_ringtone=STRING(**{ 'terminator': None, 'pascal': True }) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,STRING): self.__field_number=value else: self.__field_number=STRING(value,**{ 'terminator': None, 'pascal': True }) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_option(self): return self.__field_option.getvalue() def __setfield_option(self, value): if isinstance(value,UINT): self.__field_option=value else: self.__field_option=UINT(value,**{'sizeinbytes': 1}) def __delfield_option(self): del self.__field_option option=property(__getfield_option, __setfield_option, __delfield_option, None) def __getfield_speeddial(self): return self.__field_speeddial.getvalue() def __setfield_speeddial(self, value): if isinstance(value,UINT): self.__field_speeddial=value else: self.__field_speeddial=UINT(value,**{'sizeinbytes': 2}) def __delfield_speeddial(self): del self.__field_speeddial speeddial=property(__getfield_speeddial, __setfield_speeddial, __delfield_speeddial, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,STRING): self.__field_ringtone=value else: self.__field_ringtone=STRING(value,**{ 'terminator': None, 'pascal': True }) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) yield ('option', self.__field_option, None) if self.has_speeddial: yield ('speeddial', self.__field_speeddial, None) if self.has_ringtone: yield ('ringtone', self.__field_ringtone, None) @property def has_speeddial(self): return bool(self.option & PB_FLG_SPEEDDIAL) @property def has_ringtone(self): return bool(self.option & PB_FLG_RINGTONE) @property def is_primary(self): return bool(self.option & PB_FLG_PRIMARY) class PBEntry(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['info', 'name', 'email', 'email2', 'home', 'work', 'cell', 'fax', 'cell2', 'datetime', 'group', 'wallpaper', 'wallpaper_range'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PBEntry,self).__init__(**dict) if self.__class__ is PBEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PBEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PBEntry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_info=UINT(**{'sizeinbytes': 2}) self.__field_info.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 2}).readfrombuffer(buf) if self.has_name: self.__field_name=USTRING(**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) self.__field_name.readfrombuffer(buf) if self.has_mail: self.__field_email=USTRING(**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) self.__field_email.readfrombuffer(buf) if self.has_email2: self.__field_email2=USTRING(**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) self.__field_email2.readfrombuffer(buf) if self.has_home: self.__field_home=NumberEntry() self.__field_home.readfrombuffer(buf) if self.ihas_work: self.__field_work=NumberEntry() self.__field_work.readfrombuffer(buf) if self.has_cell: self.__field_cell=NumberEntry() self.__field_cell.readfrombuffer(buf) if self.has_fax: self.__field_fax=NumberEntry() self.__field_fax.readfrombuffer(buf) if self.has_cell2: self.__field_cell2=NumberEntry() self.__field_cell2.readfrombuffer(buf) if self.has_date: self.__field_datetime=DateTime(**{'sizeinbytes': 4}) self.__field_datetime.readfrombuffer(buf) if self.has_group: self.__field_group=UINT(**{'sizeinbytes': 1}) self.__field_group.readfrombuffer(buf) if self.has_wallpaper: self.__field_wallpaper=STRING(**{ 'terminator': None, 'pascal': True }) self.__field_wallpaper.readfrombuffer(buf) self.__field_wallpaper_range=UINT(**{'sizeinbytes': 4}) self.__field_wallpaper_range.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_info(self): return self.__field_info.getvalue() def __setfield_info(self, value): if isinstance(value,UINT): self.__field_info=value else: self.__field_info=UINT(value,**{'sizeinbytes': 2}) def __delfield_info(self): del self.__field_info info=property(__getfield_info, __setfield_info, __delfield_info, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def __getfield_email2(self): return self.__field_email2.getvalue() def __setfield_email2(self, value): if isinstance(value,USTRING): self.__field_email2=value else: self.__field_email2=USTRING(value,**{ 'terminator': None, 'encoding': ENCODING, 'pascal': True }) def __delfield_email2(self): del self.__field_email2 email2=property(__getfield_email2, __setfield_email2, __delfield_email2, None) def __getfield_home(self): return self.__field_home.getvalue() def __setfield_home(self, value): if isinstance(value,NumberEntry): self.__field_home=value else: self.__field_home=NumberEntry(value,) def __delfield_home(self): del self.__field_home home=property(__getfield_home, __setfield_home, __delfield_home, None) def __getfield_work(self): return self.__field_work.getvalue() def __setfield_work(self, value): if isinstance(value,NumberEntry): self.__field_work=value else: self.__field_work=NumberEntry(value,) def __delfield_work(self): del self.__field_work work=property(__getfield_work, __setfield_work, __delfield_work, None) def __getfield_cell(self): return self.__field_cell.getvalue() def __setfield_cell(self, value): if isinstance(value,NumberEntry): self.__field_cell=value else: self.__field_cell=NumberEntry(value,) def __delfield_cell(self): del self.__field_cell cell=property(__getfield_cell, __setfield_cell, __delfield_cell, None) def __getfield_fax(self): return self.__field_fax.getvalue() def __setfield_fax(self, value): if isinstance(value,NumberEntry): self.__field_fax=value else: self.__field_fax=NumberEntry(value,) def __delfield_fax(self): del self.__field_fax fax=property(__getfield_fax, __setfield_fax, __delfield_fax, None) def __getfield_cell2(self): return self.__field_cell2.getvalue() def __setfield_cell2(self, value): if isinstance(value,NumberEntry): self.__field_cell2=value else: self.__field_cell2=NumberEntry(value,) def __delfield_cell2(self): del self.__field_cell2 cell2=property(__getfield_cell2, __setfield_cell2, __delfield_cell2, None) def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,DateTime): self.__field_datetime=value else: self.__field_datetime=DateTime(value,**{'sizeinbytes': 4}) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 1}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,STRING): self.__field_wallpaper=value else: self.__field_wallpaper=STRING(value,**{ 'terminator': None, 'pascal': True }) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_wallpaper_range(self): return self.__field_wallpaper_range.getvalue() def __setfield_wallpaper_range(self, value): if isinstance(value,UINT): self.__field_wallpaper_range=value else: self.__field_wallpaper_range=UINT(value,**{'sizeinbytes': 4}) def __delfield_wallpaper_range(self): del self.__field_wallpaper_range wallpaper_range=property(__getfield_wallpaper_range, __setfield_wallpaper_range, __delfield_wallpaper_range, None) def iscontainer(self): return True def containerelements(self): yield ('info', self.__field_info, None) if self.has_name: yield ('name', self.__field_name, None) if self.has_mail: yield ('email', self.__field_email, None) if self.has_email2: yield ('email2', self.__field_email2, None) if self.has_home: yield ('home', self.__field_home, None) if self.ihas_work: yield ('work', self.__field_work, None) if self.has_cell: yield ('cell', self.__field_cell, None) if self.has_fax: yield ('fax', self.__field_fax, None) if self.has_cell2: yield ('cell2', self.__field_cell2, None) if self.has_date: yield ('datetime', self.__field_datetime, None) if self.has_group: yield ('group', self.__field_group, None) if self.has_wallpaper: yield ('wallpaper', self.__field_wallpaper, None) yield ('wallpaper_range', self.__field_wallpaper_range, None) @property def has_name(self): return bool(self.info & PB_FLG_NAME) @property def has_email(self): return bool(self.info & PB_FLG_EMAIL) @property def has_email2(self): return bool(self.info & PB_FLG_EMAIL2) @property def has_home(self): return bool(self.info & PB_FLG_HOME) @property def has_work(self): return bool(self.info & PB_FLG_WORK) @property def has_cell(self): return bool(self.info & PB_FLG_CELL) @property def has_fax(self): return bool(self.info & PB_FLG_FAX) @property def has_cell2(self): return bool(self.info & PB_FLG_CELL2) @property def has_date(self): return bool(self.info & PB_FLG_DATE) @property def has_group(self): return bool(self.info & PB_FLG_GROUP) @property def has_wallpaper(self): return bool(self.info & PB_FLG_WP) class LenEntry(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['itemlen'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(LenEntry,self).__init__(**dict) if self.__class__ is LenEntry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(LenEntry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(LenEntry,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0 } dict2.update(kwargs) kwargs=dict2 self.__field_itemlen=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_itemlen=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_itemlen.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_itemlen(self): try: self.__field_itemlen except: self.__field_itemlen=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_itemlen.getvalue() def __setfield_itemlen(self, value): if isinstance(value,UINT): self.__field_itemlen=value else: self.__field_itemlen=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_itemlen(self): del self.__field_itemlen itemlen=property(__getfield_itemlen, __setfield_itemlen, __delfield_itemlen, None) def iscontainer(self): return True def containerelements(self): yield ('itemlen', self.__field_itemlen, None) class PBFile(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['lens', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PBFile,self).__init__(**dict) if self.__class__ is PBFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PBFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PBFile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_lens=LIST(**{ 'elementclass': LenEntry, 'length': 8, 'createdefault': True }) self.__field_lens.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': PBEntry }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_lens(self): try: self.__field_lens except: self.__field_lens=LIST(**{ 'elementclass': LenEntry, 'length': 8, 'createdefault': True }) return self.__field_lens.getvalue() def __setfield_lens(self, value): if isinstance(value,LIST): self.__field_lens=value else: self.__field_lens=LIST(value,**{ 'elementclass': LenEntry, 'length': 8, 'createdefault': True }) def __delfield_lens(self): del self.__field_lens lens=property(__getfield_lens, __setfield_lens, __delfield_lens, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': PBEntry }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': PBEntry }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('lens', self.__field_lens, None) yield ('items', self.__field_items, None) class PBFileHeader(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['lens'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(PBFileHeader,self).__init__(**dict) if self.__class__ is PBFileHeader: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(PBFileHeader,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(PBFileHeader,kwargs) if len(args): dict2={ 'elementclass': LenEntry, 'length': 8, 'createdefault': True } dict2.update(kwargs) kwargs=dict2 self.__field_lens=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_lens=LIST(**{ 'elementclass': LenEntry, 'length': 8, 'createdefault': True }) self.__field_lens.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_lens(self): try: self.__field_lens except: self.__field_lens=LIST(**{ 'elementclass': LenEntry, 'length': 8, 'createdefault': True }) return self.__field_lens.getvalue() def __setfield_lens(self, value): if isinstance(value,LIST): self.__field_lens=value else: self.__field_lens=LIST(value,**{ 'elementclass': LenEntry, 'length': 8, 'createdefault': True }) def __delfield_lens(self): del self.__field_lens lens=property(__getfield_lens, __setfield_lens, __delfield_lens, None) def iscontainer(self): return True def containerelements(self): yield ('lens', self.__field_lens, None) class ss_cmd_hdr(BaseProtogenClass): __fields=['commandcode', 'command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_cmd_hdr,self).__init__(**dict) if self.__class__ is ss_cmd_hdr: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_cmd_hdr,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_cmd_hdr,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_commandcode except: self.__field_commandcode=UINT(**{'sizeinbytes': 4, 'default': 0xfa4b }) self.__field_commandcode.writetobuffer(buf) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_commandcode=UINT(**{'sizeinbytes': 4, 'default': 0xfa4b }) self.__field_commandcode.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_commandcode(self): try: self.__field_commandcode except: self.__field_commandcode=UINT(**{'sizeinbytes': 4, 'default': 0xfa4b }) return self.__field_commandcode.getvalue() def __setfield_commandcode(self, value): if isinstance(value,UINT): self.__field_commandcode=value else: self.__field_commandcode=UINT(value,**{'sizeinbytes': 4, 'default': 0xfa4b }) def __delfield_commandcode(self): del self.__field_commandcode commandcode=property(__getfield_commandcode, __setfield_commandcode, __delfield_commandcode, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('commandcode', self.__field_commandcode, None) yield ('command', self.__field_command, None) class ss_cmd_resp(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['cmd_hdr', 'data'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_cmd_resp,self).__init__(**dict) if self.__class__ is ss_cmd_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_cmd_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_cmd_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cmd_hdr=ss_cmd_hdr() self.__field_cmd_hdr.readfrombuffer(buf) self.__field_data=DATA() self.__field_data.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cmd_hdr(self): return self.__field_cmd_hdr.getvalue() def __setfield_cmd_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_cmd_hdr=value else: self.__field_cmd_hdr=ss_cmd_hdr(value,) def __delfield_cmd_hdr(self): del self.__field_cmd_hdr cmd_hdr=property(__getfield_cmd_hdr, __setfield_cmd_hdr, __delfield_cmd_hdr, None) def __getfield_data(self): return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,DATA): self.__field_data=value else: self.__field_data=DATA(value,) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def iscontainer(self): return True def containerelements(self): yield ('cmd_hdr', self.__field_cmd_hdr, None) yield ('data', self.__field_data, None) class ss_sw_req(BaseProtogenClass): __fields=['hdr'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_sw_req,self).__init__(**dict) if self.__class__ is ss_sw_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_sw_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_sw_req,kwargs) if len(args): dict2={ 'command': SS_CMD_SW_VERSION } dict2.update(kwargs) kwargs=dict2 self.__field_hdr=ss_cmd_hdr(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_SW_VERSION }) self.__field_hdr.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_SW_VERSION }) self.__field_hdr.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_SW_VERSION }) return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,**{ 'command': SS_CMD_SW_VERSION }) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) class ss_sw_resp(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['hdr', 'sw_version'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_sw_resp,self).__init__(**dict) if self.__class__ is ss_sw_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_sw_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_sw_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr() self.__field_hdr.readfrombuffer(buf) self.__field_sw_version=STRING(**{ 'terminator': 0 }) self.__field_sw_version.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def __getfield_sw_version(self): return self.__field_sw_version.getvalue() def __setfield_sw_version(self, value): if isinstance(value,STRING): self.__field_sw_version=value else: self.__field_sw_version=STRING(value,**{ 'terminator': 0 }) def __delfield_sw_version(self): del self.__field_sw_version sw_version=property(__getfield_sw_version, __setfield_sw_version, __delfield_sw_version, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) yield ('sw_version', self.__field_sw_version, None) class ss_hw_req(BaseProtogenClass): __fields=['hdr'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_hw_req,self).__init__(**dict) if self.__class__ is ss_hw_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_hw_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_hw_req,kwargs) if len(args): dict2={ 'command': SS_CMD_HW_VERSION } dict2.update(kwargs) kwargs=dict2 self.__field_hdr=ss_cmd_hdr(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_HW_VERSION }) self.__field_hdr.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_HW_VERSION }) self.__field_hdr.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_HW_VERSION }) return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,**{ 'command': SS_CMD_HW_VERSION }) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) class ss_hw_resp(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['hdr', 'hw_version'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_hw_resp,self).__init__(**dict) if self.__class__ is ss_hw_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_hw_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_hw_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr() self.__field_hdr.readfrombuffer(buf) self.__field_hw_version=STRING(**{ 'terminator': 0 }) self.__field_hw_version.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def __getfield_hw_version(self): return self.__field_hw_version.getvalue() def __setfield_hw_version(self, value): if isinstance(value,STRING): self.__field_hw_version=value else: self.__field_hw_version=STRING(value,**{ 'terminator': 0 }) def __delfield_hw_version(self): del self.__field_hw_version hw_version=property(__getfield_hw_version, __setfield_hw_version, __delfield_hw_version, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) yield ('hw_version', self.__field_hw_version, None) class ss_pb_count_req(BaseProtogenClass): __fields=['hdr'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_count_req,self).__init__(**dict) if self.__class__ is ss_pb_count_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_count_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_count_req,kwargs) if len(args): dict2={ 'command': SS_CMD_PB_COUNT } dict2.update(kwargs) kwargs=dict2 self.__field_hdr=ss_cmd_hdr(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_COUNT }) self.__field_hdr.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_COUNT }) self.__field_hdr.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_COUNT }) return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,**{ 'command': SS_CMD_PB_COUNT }) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) class ss_pb_count_resp(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['hdr', 'count'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_count_resp,self).__init__(**dict) if self.__class__ is ss_pb_count_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_count_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_count_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr() self.__field_hdr.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 1}).readfrombuffer(buf) self.__field_count=UINT(**{'sizeinbytes': 2}) self.__field_count.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def __getfield_count(self): return self.__field_count.getvalue() def __setfield_count(self, value): if isinstance(value,UINT): self.__field_count=value else: self.__field_count=UINT(value,**{'sizeinbytes': 2}) def __delfield_count(self): del self.__field_count count=property(__getfield_count, __setfield_count, __delfield_count, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) yield ('count', self.__field_count, None) class ss_pb_read_req(BaseProtogenClass): __fields=['hdr', 'index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_read_req,self).__init__(**dict) if self.__class__ is ss_pb_read_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_read_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_read_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_READ }) self.__field_hdr.writetobuffer(buf) try: self.__field__gen_p_samsungscha950_460 except: self.__field__gen_p_samsungscha950_460=DONTCARE(**{'sizeinbytes': 1}) self.__field__gen_p_samsungscha950_460.writetobuffer(buf) self.__field_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_READ }) self.__field_hdr.readfrombuffer(buf) self.__field__gen_p_samsungscha950_460=DONTCARE(**{'sizeinbytes': 1}) self.__field__gen_p_samsungscha950_460.readfrombuffer(buf) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_READ }) return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,**{ 'command': SS_CMD_PB_READ }) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) yield ('index', self.__field_index, None) class ss_pb_read_resp(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['hdr', 'index', 'data'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_read_resp,self).__init__(**dict) if self.__class__ is ss_pb_read_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_read_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_read_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr() self.__field_hdr.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 1}).readfrombuffer(buf) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 1}).readfrombuffer(buf) self.__field_data=DATA() self.__field_data.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_data(self): return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,DATA): self.__field_data=value else: self.__field_data=DATA(value,) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) yield ('index', self.__field_index, None) yield ('data', self.__field_data, None) class ss_pb_voicemail_read_req(BaseProtogenClass): __fields=['hdr', 'param'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_voicemail_read_req,self).__init__(**dict) if self.__class__ is ss_pb_voicemail_read_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_voicemail_read_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_voicemail_read_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_VOICEMAIL_READ }) self.__field_hdr.writetobuffer(buf) try: self.__field_param except: self.__field_param=UINT(**{'sizeinbytes': 1, 'constant': SS_CMD_PB_VOICEMAIL_PARAM }) self.__field_param.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_VOICEMAIL_READ }) self.__field_hdr.readfrombuffer(buf) self.__field_param=UINT(**{'sizeinbytes': 1, 'constant': SS_CMD_PB_VOICEMAIL_PARAM }) self.__field_param.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_VOICEMAIL_READ }) return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,**{ 'command': SS_CMD_PB_VOICEMAIL_READ }) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def __getfield_param(self): try: self.__field_param except: self.__field_param=UINT(**{'sizeinbytes': 1, 'constant': SS_CMD_PB_VOICEMAIL_PARAM }) return self.__field_param.getvalue() def __setfield_param(self, value): if isinstance(value,UINT): self.__field_param=value else: self.__field_param=UINT(value,**{'sizeinbytes': 1, 'constant': SS_CMD_PB_VOICEMAIL_PARAM }) def __delfield_param(self): del self.__field_param param=property(__getfield_param, __setfield_param, __delfield_param, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) yield ('param', self.__field_param, None) class ss_pb_voicemail_resp(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['hdr', 'param', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_voicemail_resp,self).__init__(**dict) if self.__class__ is ss_pb_voicemail_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_voicemail_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_voicemail_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr() self.__field_hdr.readfrombuffer(buf) self.__field_param=UINT(**{'sizeinbytes': 1}) self.__field_param.readfrombuffer(buf) self.__field_number=STRING(**{ 'terminator': 0 }) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def __getfield_param(self): return self.__field_param.getvalue() def __setfield_param(self, value): if isinstance(value,UINT): self.__field_param=value else: self.__field_param=UINT(value,**{'sizeinbytes': 1}) def __delfield_param(self): del self.__field_param param=property(__getfield_param, __setfield_param, __delfield_param, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,STRING): self.__field_number=value else: self.__field_number=STRING(value,**{ 'terminator': 0 }) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) yield ('param', self.__field_param, None) yield ('number', self.__field_number, None) class ss_pb_voicemail_write_req(BaseProtogenClass): __fields=['hdr', 'param', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_voicemail_write_req,self).__init__(**dict) if self.__class__ is ss_pb_voicemail_write_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_voicemail_write_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_voicemail_write_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_VOICEMAIL_WRITE }) self.__field_hdr.writetobuffer(buf) try: self.__field_param except: self.__field_param=UINT(**{'sizeinbytes': 1, 'constant': SS_CMD_PB_VOICEMAIL_PARAM }) self.__field_param.writetobuffer(buf) try: self.__field_number except: self.__field_number=STRING(**{ 'terminator': 0, 'default': PB_DEFAULT_VOICEMAIL_NUMBER }) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_VOICEMAIL_WRITE }) self.__field_hdr.readfrombuffer(buf) self.__field_param=UINT(**{'sizeinbytes': 1, 'constant': SS_CMD_PB_VOICEMAIL_PARAM }) self.__field_param.readfrombuffer(buf) self.__field_number=STRING(**{ 'terminator': 0, 'default': PB_DEFAULT_VOICEMAIL_NUMBER }) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_VOICEMAIL_WRITE }) return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,**{ 'command': SS_CMD_PB_VOICEMAIL_WRITE }) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def __getfield_param(self): try: self.__field_param except: self.__field_param=UINT(**{'sizeinbytes': 1, 'constant': SS_CMD_PB_VOICEMAIL_PARAM }) return self.__field_param.getvalue() def __setfield_param(self, value): if isinstance(value,UINT): self.__field_param=value else: self.__field_param=UINT(value,**{'sizeinbytes': 1, 'constant': SS_CMD_PB_VOICEMAIL_PARAM }) def __delfield_param(self): del self.__field_param param=property(__getfield_param, __setfield_param, __delfield_param, None) def __getfield_number(self): try: self.__field_number except: self.__field_number=STRING(**{ 'terminator': 0, 'default': PB_DEFAULT_VOICEMAIL_NUMBER }) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,STRING): self.__field_number=value else: self.__field_number=STRING(value,**{ 'terminator': 0, 'default': PB_DEFAULT_VOICEMAIL_NUMBER }) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) yield ('param', self.__field_param, None) yield ('number', self.__field_number, None) class ss_pb_clear_req(BaseProtogenClass): __fields=['hdr'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_clear_req,self).__init__(**dict) if self.__class__ is ss_pb_clear_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_clear_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_clear_req,kwargs) if len(args): dict2={ 'command': SS_CMD_PB_CLEAR } dict2.update(kwargs) kwargs=dict2 self.__field_hdr=ss_cmd_hdr(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_CLEAR }) self.__field_hdr.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_CLEAR }) self.__field_hdr.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_CLEAR }) return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,**{ 'command': SS_CMD_PB_CLEAR }) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) class ss_pb_clear_resp(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['hdr', 'flg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_clear_resp,self).__init__(**dict) if self.__class__ is ss_pb_clear_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_clear_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_clear_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr() self.__field_hdr.readfrombuffer(buf) self.__field_flg=UINT(**{'sizeinbytes': 2}) self.__field_flg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def __getfield_flg(self): return self.__field_flg.getvalue() def __setfield_flg(self, value): if isinstance(value,UINT): self.__field_flg=value else: self.__field_flg=UINT(value,**{'sizeinbytes': 2}) def __delfield_flg(self): del self.__field_flg flg=property(__getfield_flg, __setfield_flg, __delfield_flg, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) yield ('flg', self.__field_flg, None) class ss_number_entry(BaseProtogenClass): __fields=['number', 'speeddial', 'primary', 'ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_number_entry,self).__init__(**dict) if self.__class__ is ss_number_entry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_number_entry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_number_entry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_number except: self.__field_number=STRING(**{ 'terminator': 0, 'default': '', 'maxsizeinbytes': PB_MAX_NUMBER_LEN, 'raiseontruncate': False }) self.__field_number.writetobuffer(buf) try: self.__field_speeddial except: self.__field_speeddial=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_speeddial.writetobuffer(buf) try: self.__field_primary except: self.__field_primary=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_primary.writetobuffer(buf) try: self.__field__gen_p_samsungscha950_493 except: self.__field__gen_p_samsungscha950_493=DONTCARE(**{'sizeinbytes': 8}) self.__field__gen_p_samsungscha950_493.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=STRING(**{ 'terminator': 0, 'default': '' }) self.__field_ringtone.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=STRING(**{ 'terminator': 0, 'default': '', 'maxsizeinbytes': PB_MAX_NUMBER_LEN, 'raiseontruncate': False }) self.__field_number.readfrombuffer(buf) self.__field_speeddial=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_speeddial.readfrombuffer(buf) self.__field_primary=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_primary.readfrombuffer(buf) self.__field__gen_p_samsungscha950_493=DONTCARE(**{'sizeinbytes': 8}) self.__field__gen_p_samsungscha950_493.readfrombuffer(buf) self.__field_ringtone=STRING(**{ 'terminator': 0, 'default': '' }) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): try: self.__field_number except: self.__field_number=STRING(**{ 'terminator': 0, 'default': '', 'maxsizeinbytes': PB_MAX_NUMBER_LEN, 'raiseontruncate': False }) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,STRING): self.__field_number=value else: self.__field_number=STRING(value,**{ 'terminator': 0, 'default': '', 'maxsizeinbytes': PB_MAX_NUMBER_LEN, 'raiseontruncate': False }) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_speeddial(self): try: self.__field_speeddial except: self.__field_speeddial=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_speeddial.getvalue() def __setfield_speeddial(self, value): if isinstance(value,UINT): self.__field_speeddial=value else: self.__field_speeddial=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_speeddial(self): del self.__field_speeddial speeddial=property(__getfield_speeddial, __setfield_speeddial, __delfield_speeddial, None) def __getfield_primary(self): try: self.__field_primary except: self.__field_primary=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_primary.getvalue() def __setfield_primary(self, value): if isinstance(value,UINT): self.__field_primary=value else: self.__field_primary=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_primary(self): del self.__field_primary primary=property(__getfield_primary, __setfield_primary, __delfield_primary, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=STRING(**{ 'terminator': 0, 'default': '' }) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,STRING): self.__field_ringtone=value else: self.__field_ringtone=STRING(value,**{ 'terminator': 0, 'default': '' }) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) yield ('speeddial', self.__field_speeddial, None) yield ('primary', self.__field_primary, None) yield ('ringtone', self.__field_ringtone, None) class ss_pb_entry(BaseProtogenClass): __fields=['name', 'email', 'email2', 'wallpaper', 'home', 'work', 'cell', 'dummy', 'fax', 'cell2', 'group'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_entry,self).__init__(**dict) if self.__class__ is ss_pb_entry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_entry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_entry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_name.writetobuffer(buf) try: self.__field_email except: self.__field_email=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) self.__field_email.writetobuffer(buf) try: self.__field_email2 except: self.__field_email2=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) self.__field_email2.writetobuffer(buf) try: self.__field__gen_p_samsungscha950_512 except: self.__field__gen_p_samsungscha950_512=DONTCARE(**{'sizeinbytes': 4}) self.__field__gen_p_samsungscha950_512.writetobuffer(buf) try: self.__field_wallpaper except: self.__field_wallpaper=STRING(**{ 'terminator': 0, 'default': '' }) self.__field_wallpaper.writetobuffer(buf) try: self.__field__gen_p_samsungscha950_515 except: self.__field__gen_p_samsungscha950_515=DONTCARE(**{'sizeinbytes': 1}) self.__field__gen_p_samsungscha950_515.writetobuffer(buf) try: self.__field_home except: self.__field_home=ss_number_entry() self.__field_home.writetobuffer(buf) try: self.__field_work except: self.__field_work=ss_number_entry() self.__field_work.writetobuffer(buf) try: self.__field_cell except: self.__field_cell=ss_number_entry() self.__field_cell.writetobuffer(buf) try: self.__field_dummy except: self.__field_dummy=ss_number_entry() self.__field_dummy.writetobuffer(buf) try: self.__field_fax except: self.__field_fax=ss_number_entry() self.__field_fax.writetobuffer(buf) try: self.__field_cell2 except: self.__field_cell2=ss_number_entry() self.__field_cell2.writetobuffer(buf) try: self.__field__gen_p_samsungscha950_522 except: self.__field__gen_p_samsungscha950_522=DONTCARE(**{'sizeinbytes': 4}) self.__field__gen_p_samsungscha950_522.writetobuffer(buf) try: self.__field_group except: self.__field_group=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_group.writetobuffer(buf) try: self.__field__gen_p_samsungscha950_524 except: self.__field__gen_p_samsungscha950_524=DONTCARE(**{'sizeinbytes': 2}) self.__field__gen_p_samsungscha950_524.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_name=USTRING(**{ 'terminator': 0, 'maxsizeinbytes': PB_MAX_NAME_LEN, 'encoding': ENCODING, 'raiseontruncate': False }) self.__field_name.readfrombuffer(buf) self.__field_email=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) self.__field_email.readfrombuffer(buf) self.__field_email2=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) self.__field_email2.readfrombuffer(buf) self.__field__gen_p_samsungscha950_512=DONTCARE(**{'sizeinbytes': 4}) self.__field__gen_p_samsungscha950_512.readfrombuffer(buf) self.__field_wallpaper=STRING(**{ 'terminator': 0, 'default': '' }) self.__field_wallpaper.readfrombuffer(buf) self.__field__gen_p_samsungscha950_515=DONTCARE(**{'sizeinbytes': 1}) self.__field__gen_p_samsungscha950_515.readfrombuffer(buf) self.__field_home=ss_number_entry() self.__field_home.readfrombuffer(buf) self.__field_work=ss_number_entry() self.__field_work.readfrombuffer(buf) self.__field_cell=ss_number_entry() self.__field_cell.readfrombuffer(buf) self.__field_dummy=ss_number_entry() self.__field_dummy.readfrombuffer(buf) self.__field_fax=ss_number_entry() self.__field_fax.readfrombuffer(buf) self.__field_cell2=ss_number_entry() self.__field_cell2.readfrombuffer(buf) self.__field__gen_p_samsungscha950_522=DONTCARE(**{'sizeinbytes': 4}) self.__field__gen_p_samsungscha950_522.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_group.readfrombuffer(buf) self.__field__gen_p_samsungscha950_524=DONTCARE(**{'sizeinbytes': 2}) self.__field__gen_p_samsungscha950_524.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{ 'terminator': 0, 'maxsizeinbytes': PB_MAX_NAME_LEN, 'encoding': ENCODING, 'raiseontruncate': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_email(self): try: self.__field_email except: self.__field_email=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def __getfield_email2(self): try: self.__field_email2 except: self.__field_email2=USTRING(**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) return self.__field_email2.getvalue() def __setfield_email2(self, value): if isinstance(value,USTRING): self.__field_email2=value else: self.__field_email2=USTRING(value,**{ 'terminator': 0, 'encoding': ENCODING, 'default': '', 'maxsizeinbytes': PB_MAX_EMAIL_LEN, 'raiseontruncate': False }) def __delfield_email2(self): del self.__field_email2 email2=property(__getfield_email2, __setfield_email2, __delfield_email2, None) def __getfield_wallpaper(self): try: self.__field_wallpaper except: self.__field_wallpaper=STRING(**{ 'terminator': 0, 'default': '' }) return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,STRING): self.__field_wallpaper=value else: self.__field_wallpaper=STRING(value,**{ 'terminator': 0, 'default': '' }) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_home(self): try: self.__field_home except: self.__field_home=ss_number_entry() return self.__field_home.getvalue() def __setfield_home(self, value): if isinstance(value,ss_number_entry): self.__field_home=value else: self.__field_home=ss_number_entry(value,) def __delfield_home(self): del self.__field_home home=property(__getfield_home, __setfield_home, __delfield_home, None) def __getfield_work(self): try: self.__field_work except: self.__field_work=ss_number_entry() return self.__field_work.getvalue() def __setfield_work(self, value): if isinstance(value,ss_number_entry): self.__field_work=value else: self.__field_work=ss_number_entry(value,) def __delfield_work(self): del self.__field_work work=property(__getfield_work, __setfield_work, __delfield_work, None) def __getfield_cell(self): try: self.__field_cell except: self.__field_cell=ss_number_entry() return self.__field_cell.getvalue() def __setfield_cell(self, value): if isinstance(value,ss_number_entry): self.__field_cell=value else: self.__field_cell=ss_number_entry(value,) def __delfield_cell(self): del self.__field_cell cell=property(__getfield_cell, __setfield_cell, __delfield_cell, None) def __getfield_dummy(self): try: self.__field_dummy except: self.__field_dummy=ss_number_entry() return self.__field_dummy.getvalue() def __setfield_dummy(self, value): if isinstance(value,ss_number_entry): self.__field_dummy=value else: self.__field_dummy=ss_number_entry(value,) def __delfield_dummy(self): del self.__field_dummy dummy=property(__getfield_dummy, __setfield_dummy, __delfield_dummy, None) def __getfield_fax(self): try: self.__field_fax except: self.__field_fax=ss_number_entry() return self.__field_fax.getvalue() def __setfield_fax(self, value): if isinstance(value,ss_number_entry): self.__field_fax=value else: self.__field_fax=ss_number_entry(value,) def __delfield_fax(self): del self.__field_fax fax=property(__getfield_fax, __setfield_fax, __delfield_fax, None) def __getfield_cell2(self): try: self.__field_cell2 except: self.__field_cell2=ss_number_entry() return self.__field_cell2.getvalue() def __setfield_cell2(self, value): if isinstance(value,ss_number_entry): self.__field_cell2=value else: self.__field_cell2=ss_number_entry(value,) def __delfield_cell2(self): del self.__field_cell2 cell2=property(__getfield_cell2, __setfield_cell2, __delfield_cell2, None) def __getfield_group(self): try: self.__field_group except: self.__field_group=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def iscontainer(self): return True def containerelements(self): yield ('name', self.__field_name, None) yield ('email', self.__field_email, None) yield ('email2', self.__field_email2, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('home', self.__field_home, None) yield ('work', self.__field_work, None) yield ('cell', self.__field_cell, None) yield ('dummy', self.__field_dummy, None) yield ('fax', self.__field_fax, None) yield ('cell2', self.__field_cell2, None) yield ('group', self.__field_group, None) class ss_pb_write_req(BaseProtogenClass): __fields=['hdr', 'zero', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_write_req,self).__init__(**dict) if self.__class__ is ss_pb_write_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_write_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_write_req,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_WRITE }) self.__field_hdr.writetobuffer(buf) try: self.__field_zero except: self.__field_zero=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_zero.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_WRITE }) self.__field_hdr.readfrombuffer(buf) self.__field_zero=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_zero.readfrombuffer(buf) self.__field_entry=ss_pb_entry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): try: self.__field_hdr except: self.__field_hdr=ss_cmd_hdr(**{ 'command': SS_CMD_PB_WRITE }) return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,**{ 'command': SS_CMD_PB_WRITE }) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def __getfield_zero(self): try: self.__field_zero except: self.__field_zero=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_zero.getvalue() def __setfield_zero(self, value): if isinstance(value,UINT): self.__field_zero=value else: self.__field_zero=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_zero(self): del self.__field_zero zero=property(__getfield_zero, __setfield_zero, __delfield_zero, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,ss_pb_entry): self.__field_entry=value else: self.__field_entry=ss_pb_entry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) yield ('zero', self.__field_zero, None) yield ('entry', self.__field_entry, None) class ss_pb_write_resp(BaseProtogenClass): __fields=['hdr', 'index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ss_pb_write_resp,self).__init__(**dict) if self.__class__ is ss_pb_write_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ss_pb_write_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ss_pb_write_resp,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_hdr.writetobuffer(buf) self.__field__gen_p_samsungscha950_533.writetobuffer(buf) self.__field_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_hdr=ss_cmd_hdr() self.__field_hdr.readfrombuffer(buf) self.__field__gen_p_samsungscha950_533=DONTCARE(**{'sizeinbytes': 1}) self.__field__gen_p_samsungscha950_533.readfrombuffer(buf) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_hdr(self): return self.__field_hdr.getvalue() def __setfield_hdr(self, value): if isinstance(value,ss_cmd_hdr): self.__field_hdr=value else: self.__field_hdr=ss_cmd_hdr(value,) def __delfield_hdr(self): del self.__field_hdr hdr=property(__getfield_hdr, __setfield_hdr, __delfield_hdr, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('hdr', self.__field_hdr, None) yield ('index', self.__field_index, None) class cl_list(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(cl_list,self).__init__(**dict) if self.__class__ is cl_list: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(cl_list,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(cl_list,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_index=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 1}) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 1}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) class cl_index_file(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['incoming', 'outgoing', 'missed', 'incoming_count', 'outgoing_count', 'missed_count'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(cl_index_file,self).__init__(**dict) if self.__class__ is cl_index_file: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(cl_index_file,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(cl_index_file,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_incoming=LIST(**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) self.__field_incoming.readfrombuffer(buf) self.__field_outgoing=LIST(**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) self.__field_outgoing.readfrombuffer(buf) self.__field_missed=LIST(**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) self.__field_missed.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 111}).readfrombuffer(buf) self.__field_incoming_count=UINT(**{'sizeinbytes': 4}) self.__field_incoming_count.readfrombuffer(buf) self.__field_outgoing_count=UINT(**{'sizeinbytes': 4}) self.__field_outgoing_count.readfrombuffer(buf) self.__field_missed_count=UINT(**{'sizeinbytes': 4}) self.__field_missed_count.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_incoming(self): return self.__field_incoming.getvalue() def __setfield_incoming(self, value): if isinstance(value,LIST): self.__field_incoming=value else: self.__field_incoming=LIST(value,**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) def __delfield_incoming(self): del self.__field_incoming incoming=property(__getfield_incoming, __setfield_incoming, __delfield_incoming, None) def __getfield_outgoing(self): return self.__field_outgoing.getvalue() def __setfield_outgoing(self, value): if isinstance(value,LIST): self.__field_outgoing=value else: self.__field_outgoing=LIST(value,**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) def __delfield_outgoing(self): del self.__field_outgoing outgoing=property(__getfield_outgoing, __setfield_outgoing, __delfield_outgoing, None) def __getfield_missed(self): return self.__field_missed.getvalue() def __setfield_missed(self, value): if isinstance(value,LIST): self.__field_missed=value else: self.__field_missed=LIST(value,**{ 'length': CL_MAX_ENTRIES, 'elementclass': cl_list }) def __delfield_missed(self): del self.__field_missed missed=property(__getfield_missed, __setfield_missed, __delfield_missed, None) def __getfield_incoming_count(self): return self.__field_incoming_count.getvalue() def __setfield_incoming_count(self, value): if isinstance(value,UINT): self.__field_incoming_count=value else: self.__field_incoming_count=UINT(value,**{'sizeinbytes': 4}) def __delfield_incoming_count(self): del self.__field_incoming_count incoming_count=property(__getfield_incoming_count, __setfield_incoming_count, __delfield_incoming_count, None) def __getfield_outgoing_count(self): return self.__field_outgoing_count.getvalue() def __setfield_outgoing_count(self, value): if isinstance(value,UINT): self.__field_outgoing_count=value else: self.__field_outgoing_count=UINT(value,**{'sizeinbytes': 4}) def __delfield_outgoing_count(self): del self.__field_outgoing_count outgoing_count=property(__getfield_outgoing_count, __setfield_outgoing_count, __delfield_outgoing_count, None) def __getfield_missed_count(self): return self.__field_missed_count.getvalue() def __setfield_missed_count(self, value): if isinstance(value,UINT): self.__field_missed_count=value else: self.__field_missed_count=UINT(value,**{'sizeinbytes': 4}) def __delfield_missed_count(self): del self.__field_missed_count missed_count=property(__getfield_missed_count, __setfield_missed_count, __delfield_missed_count, None) def iscontainer(self): return True def containerelements(self): yield ('incoming', self.__field_incoming, None) yield ('outgoing', self.__field_outgoing, None) yield ('missed', self.__field_missed, None) yield ('incoming_count', self.__field_incoming_count, None) yield ('outgoing_count', self.__field_outgoing_count, None) yield ('missed_count', self.__field_missed_count, None) class cl_file(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['cl_type', 'number', 'datetime', 'duration'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(cl_file,self).__init__(**dict) if self.__class__ is cl_file: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(cl_file,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(cl_file,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_cl_type=UINT(**{'sizeinbytes': 1}) self.__field_cl_type.readfrombuffer(buf) self.__field_number=STRING(**{'sizeinbytes': 51, 'terminator': 0 }) self.__field_number.readfrombuffer(buf) self.__field_datetime=DateTime1(**{'sizeinbytes': 4}) self.__field_datetime.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 4}).readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_cl_type(self): return self.__field_cl_type.getvalue() def __setfield_cl_type(self, value): if isinstance(value,UINT): self.__field_cl_type=value else: self.__field_cl_type=UINT(value,**{'sizeinbytes': 1}) def __delfield_cl_type(self): del self.__field_cl_type cl_type=property(__getfield_cl_type, __setfield_cl_type, __delfield_cl_type, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,STRING): self.__field_number=value else: self.__field_number=STRING(value,**{'sizeinbytes': 51, 'terminator': 0 }) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,DateTime1): self.__field_datetime=value else: self.__field_datetime=DateTime1(value,**{'sizeinbytes': 4}) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def iscontainer(self): return True def containerelements(self): yield ('cl_type', self.__field_cl_type, None) yield ('number', self.__field_number, None) yield ('datetime', self.__field_datetime, None) yield ('duration', self.__field_duration, None) @property def valid(self): global CL_VALID_TYPE return bool(self.cl_type in CL_VALID_TYPE and self.number) class pBOOL(BaseProtogenClass): __fields=['value'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pBOOL,self).__init__(**dict) if self.__class__ is pBOOL: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pBOOL,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pBOOL,kwargs) if len(args): dict2={'sizeinbytes': 'P'} dict2.update(kwargs) kwargs=dict2 self.__field_value=BOOL(*args,**dict2) # Make all P fields that haven't already been constructed try: self.__field_value except: self.__field_value=BOOL() def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self._bufferendoffset=buf.getcurrentoffset() def __getfield_value(self): return self.__field_value.getvalue() def __setfield_value(self, value): if isinstance(value,BOOL): self.__field_value=value else: self.__field_value=BOOL(value,) def __delfield_value(self): del self.__field_value value=property(__getfield_value, __setfield_value, __delfield_value, None) def iscontainer(self): return True def containerelements(self): yield ('value', self.__field_value, None) class sms_header(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['index', 'msg_len', 'callback_len', 'bitmap1', 'bitmap2', 'body_len', 'file_type', 'msg_type', 'enhance_delivery', 'is_txt_msg', 'in_msg', 'sent_msg', 'draft_msg', 'body'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_header,self).__init__(**dict) if self.__class__ is sms_header: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_header,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_header,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self.__field_msg_len=UINT(**{'sizeinbytes': 1}) self.__field_msg_len.readfrombuffer(buf) self.__field_callback_len=UINT(**{'sizeinbytes': 1}) self.__field_callback_len.readfrombuffer(buf) self.__field_bitmap1=UINT(**{'sizeinbytes': 1}) self.__field_bitmap1.readfrombuffer(buf) self.__field_bitmap2=UINT(**{'sizeinbytes': 1}) self.__field_bitmap2.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 6}).readfrombuffer(buf) self.__field_body_len=UINT(**{'sizeinbytes': 2}) self.__field_body_len.readfrombuffer(buf) self.__field_file_type=UINT(**{'sizeinbytes': 2}) self.__field_file_type.readfrombuffer(buf) self.__field_msg_type=UINT(**{'sizeinbytes': 1}) self.__field_msg_type.readfrombuffer(buf) self.__field_enhance_delivery=UINT(**{'sizeinbytes': 1}) self.__field_enhance_delivery.readfrombuffer(buf) self.__field_is_txt_msg=pBOOL(**{ 'value': self.file_type==SMS_TXT_TYPE and self.msg_type in SMS_VALID_TYPE }) self.__field_is_txt_msg.readfrombuffer(buf) self.__field_in_msg=pBOOL(**{ 'value': self.msg_type==SMS_TYPE_IN }) self.__field_in_msg.readfrombuffer(buf) self.__field_sent_msg=pBOOL(**{ 'value': self.msg_type==SMS_TYPE_SENT }) self.__field_sent_msg.readfrombuffer(buf) self.__field_draft_msg=pBOOL(**{ 'value': self.msg_type==SMS_TYPE_DRAFT }) self.__field_draft_msg.readfrombuffer(buf) if self.is_txt_msg.value: self.__field_body=sms_body(**{ 'msg_len': self.msg_len, 'has_callback': self.bitmap2 & SMS_FLG2_CALLBACK, 'has_priority': self.bitmap2 & SMS_FLG2_PRIORITY, 'has_1byte': self.bitmap2 & SMS_FLG2_SOMETHING, 'has_1byte2': self.bitmap2 & SMS_FLG2_MSG, 'has_40bytes': self.bitmap1 & SMS_FLG1_HAS40 }) self.__field_body.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_msg_len(self): return self.__field_msg_len.getvalue() def __setfield_msg_len(self, value): if isinstance(value,UINT): self.__field_msg_len=value else: self.__field_msg_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_msg_len(self): del self.__field_msg_len msg_len=property(__getfield_msg_len, __setfield_msg_len, __delfield_msg_len, None) def __getfield_callback_len(self): return self.__field_callback_len.getvalue() def __setfield_callback_len(self, value): if isinstance(value,UINT): self.__field_callback_len=value else: self.__field_callback_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_len(self): del self.__field_callback_len callback_len=property(__getfield_callback_len, __setfield_callback_len, __delfield_callback_len, None) def __getfield_bitmap1(self): return self.__field_bitmap1.getvalue() def __setfield_bitmap1(self, value): if isinstance(value,UINT): self.__field_bitmap1=value else: self.__field_bitmap1=UINT(value,**{'sizeinbytes': 1}) def __delfield_bitmap1(self): del self.__field_bitmap1 bitmap1=property(__getfield_bitmap1, __setfield_bitmap1, __delfield_bitmap1, None) def __getfield_bitmap2(self): return self.__field_bitmap2.getvalue() def __setfield_bitmap2(self, value): if isinstance(value,UINT): self.__field_bitmap2=value else: self.__field_bitmap2=UINT(value,**{'sizeinbytes': 1}) def __delfield_bitmap2(self): del self.__field_bitmap2 bitmap2=property(__getfield_bitmap2, __setfield_bitmap2, __delfield_bitmap2, None) def __getfield_body_len(self): return self.__field_body_len.getvalue() def __setfield_body_len(self, value): if isinstance(value,UINT): self.__field_body_len=value else: self.__field_body_len=UINT(value,**{'sizeinbytes': 2}) def __delfield_body_len(self): del self.__field_body_len body_len=property(__getfield_body_len, __setfield_body_len, __delfield_body_len, None) def __getfield_file_type(self): return self.__field_file_type.getvalue() def __setfield_file_type(self, value): if isinstance(value,UINT): self.__field_file_type=value else: self.__field_file_type=UINT(value,**{'sizeinbytes': 2}) def __delfield_file_type(self): del self.__field_file_type file_type=property(__getfield_file_type, __setfield_file_type, __delfield_file_type, None) def __getfield_msg_type(self): return self.__field_msg_type.getvalue() def __setfield_msg_type(self, value): if isinstance(value,UINT): self.__field_msg_type=value else: self.__field_msg_type=UINT(value,**{'sizeinbytes': 1}) def __delfield_msg_type(self): del self.__field_msg_type msg_type=property(__getfield_msg_type, __setfield_msg_type, __delfield_msg_type, None) def __getfield_enhance_delivery(self): return self.__field_enhance_delivery.getvalue() def __setfield_enhance_delivery(self, value): if isinstance(value,UINT): self.__field_enhance_delivery=value else: self.__field_enhance_delivery=UINT(value,**{'sizeinbytes': 1}) def __delfield_enhance_delivery(self): del self.__field_enhance_delivery enhance_delivery=property(__getfield_enhance_delivery, __setfield_enhance_delivery, __delfield_enhance_delivery, None) def __getfield_is_txt_msg(self): return self.__field_is_txt_msg.getvalue() def __setfield_is_txt_msg(self, value): if isinstance(value,pBOOL): self.__field_is_txt_msg=value else: self.__field_is_txt_msg=pBOOL(value,**{ 'value': self.file_type==SMS_TXT_TYPE and self.msg_type in SMS_VALID_TYPE }) def __delfield_is_txt_msg(self): del self.__field_is_txt_msg is_txt_msg=property(__getfield_is_txt_msg, __setfield_is_txt_msg, __delfield_is_txt_msg, None) def __getfield_in_msg(self): return self.__field_in_msg.getvalue() def __setfield_in_msg(self, value): if isinstance(value,pBOOL): self.__field_in_msg=value else: self.__field_in_msg=pBOOL(value,**{ 'value': self.msg_type==SMS_TYPE_IN }) def __delfield_in_msg(self): del self.__field_in_msg in_msg=property(__getfield_in_msg, __setfield_in_msg, __delfield_in_msg, None) def __getfield_sent_msg(self): return self.__field_sent_msg.getvalue() def __setfield_sent_msg(self, value): if isinstance(value,pBOOL): self.__field_sent_msg=value else: self.__field_sent_msg=pBOOL(value,**{ 'value': self.msg_type==SMS_TYPE_SENT }) def __delfield_sent_msg(self): del self.__field_sent_msg sent_msg=property(__getfield_sent_msg, __setfield_sent_msg, __delfield_sent_msg, None) def __getfield_draft_msg(self): return self.__field_draft_msg.getvalue() def __setfield_draft_msg(self, value): if isinstance(value,pBOOL): self.__field_draft_msg=value else: self.__field_draft_msg=pBOOL(value,**{ 'value': self.msg_type==SMS_TYPE_DRAFT }) def __delfield_draft_msg(self): del self.__field_draft_msg draft_msg=property(__getfield_draft_msg, __setfield_draft_msg, __delfield_draft_msg, None) def __getfield_body(self): return self.__field_body.getvalue() def __setfield_body(self, value): if isinstance(value,sms_body): self.__field_body=value else: self.__field_body=sms_body(value,**{ 'msg_len': self.msg_len, 'has_callback': self.bitmap2 & SMS_FLG2_CALLBACK, 'has_priority': self.bitmap2 & SMS_FLG2_PRIORITY, 'has_1byte': self.bitmap2 & SMS_FLG2_SOMETHING, 'has_1byte2': self.bitmap2 & SMS_FLG2_MSG, 'has_40bytes': self.bitmap1 & SMS_FLG1_HAS40 }) def __delfield_body(self): del self.__field_body body=property(__getfield_body, __setfield_body, __delfield_body, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('msg_len', self.__field_msg_len, None) yield ('callback_len', self.__field_callback_len, None) yield ('bitmap1', self.__field_bitmap1, None) yield ('bitmap2', self.__field_bitmap2, None) yield ('body_len', self.__field_body_len, None) yield ('file_type', self.__field_file_type, None) yield ('msg_type', self.__field_msg_type, None) yield ('enhance_delivery', self.__field_enhance_delivery, None) yield ('is_txt_msg', self.__field_is_txt_msg, None) yield ('in_msg', self.__field_in_msg, None) yield ('sent_msg', self.__field_sent_msg, None) yield ('draft_msg', self.__field_draft_msg, None) if self.is_txt_msg.value: yield ('body', self.__field_body, None) class sms_msg_stat_list(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['status'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_msg_stat_list,self).__init__(**dict) if self.__class__ is sms_msg_stat_list: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_msg_stat_list,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_msg_stat_list,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_status=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def iscontainer(self): return True def containerelements(self): yield ('status', self.__field_status, None) class sms_datetime_list(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['datetime'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_datetime_list,self).__init__(**dict) if self.__class__ is sms_datetime_list: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_datetime_list,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_datetime_list,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_datetime=DateTime1(**{'sizeinbytes': 4}) self.__field_datetime.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 4}).readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,DateTime1): self.__field_datetime=value else: self.__field_datetime=DateTime1(value,**{'sizeinbytes': 4}) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def iscontainer(self): return True def containerelements(self): yield ('datetime', self.__field_datetime, None) class sms_delivered_datetime(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['datetime'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_delivered_datetime,self).__init__(**dict) if self.__class__ is sms_delivered_datetime: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_delivered_datetime,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_delivered_datetime,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_datetime=LIST(**{ 'elementclass': sms_datetime_list, 'length': 10 }) self.__field_datetime.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 20}).readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,LIST): self.__field_datetime=value else: self.__field_datetime=LIST(value,**{ 'elementclass': sms_datetime_list, 'length': 10 }) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def iscontainer(self): return True def containerelements(self): yield ('datetime', self.__field_datetime, None) class sms_body(BaseProtogenClass): # Read-From-Buffer-Only Class __fields=['msg_len', 'has_callback', 'has_priority', 'has_1byte', 'has_1byte2', 'has_40bytes', 'msg', 'dunno2', 'callback_len', 'callback', 'priority', 'datetime', 'addr_len0', 'addr_len1', 'addr_len2', 'addr_len3', 'addr_len4', 'addr_len5', 'addr_len6', 'addr_len7', 'addr_len8', 'addr_len9', 'addr0', 'addr1', 'addr2', 'addr3', 'addr4', 'addr5', 'addr6', 'addr7', 'addr8', 'addr9', 'msg_stat'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_body,self).__init__(**dict) if self.__class__ is sms_body: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_body,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_body,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_msg_len except: self.__field_msg_len=UINT() try: self.__field_has_callback except: self.__field_has_callback=BOOL(**{ 'default': True }) try: self.__field_has_priority except: self.__field_has_priority=BOOL(**{ 'default': False }) try: self.__field_has_1byte except: self.__field_has_1byte=BOOL(**{ 'default': False }) try: self.__field_has_1byte2 except: self.__field_has_1byte2=BOOL(**{ 'default': True }) try: self.__field_has_40bytes except: self.__field_has_40bytes=BOOL(**{ 'default': False }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' raise NotImplementedError def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) DONTCARE(**{'sizeinbytes': 50}).readfrombuffer(buf) self.__field_msg=USTRING(**{ 'sizeinbytes': self.msg_len, 'encoding': ENCODING, 'terminator': None }) self.__field_msg.readfrombuffer(buf) if self.has_callback: self.__field_dunno2=UNKNOWN(**{'sizeinbytes': 3}) self.__field_dunno2.readfrombuffer(buf) self.__field_callback_len=UINT(**{'sizeinbytes': 1}) self.__field_callback_len.readfrombuffer(buf) self.__field_callback=STRING(**{ 'sizeinbytes': self.callback_len, 'terminator': None }) self.__field_callback.readfrombuffer(buf) if self.has_priority: self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) if self.has_1byte: DONTCARE(**{'sizeinbytes': 1}).readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 40}).readfrombuffer(buf) self.__field_datetime=DateTime1(**{'sizeinbytes': 4}) self.__field_datetime.readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 17}).readfrombuffer(buf) self.__field_addr_len0=UINT(**{'sizeinbytes': 1}) self.__field_addr_len0.readfrombuffer(buf) self.__field_addr_len1=UINT(**{'sizeinbytes': 1}) self.__field_addr_len1.readfrombuffer(buf) self.__field_addr_len2=UINT(**{'sizeinbytes': 1}) self.__field_addr_len2.readfrombuffer(buf) self.__field_addr_len3=UINT(**{'sizeinbytes': 1}) self.__field_addr_len3.readfrombuffer(buf) self.__field_addr_len4=UINT(**{'sizeinbytes': 1}) self.__field_addr_len4.readfrombuffer(buf) self.__field_addr_len5=UINT(**{'sizeinbytes': 1}) self.__field_addr_len5.readfrombuffer(buf) self.__field_addr_len6=UINT(**{'sizeinbytes': 1}) self.__field_addr_len6.readfrombuffer(buf) self.__field_addr_len7=UINT(**{'sizeinbytes': 1}) self.__field_addr_len7.readfrombuffer(buf) self.__field_addr_len8=UINT(**{'sizeinbytes': 1}) self.__field_addr_len8.readfrombuffer(buf) self.__field_addr_len9=UINT(**{'sizeinbytes': 1}) self.__field_addr_len9.readfrombuffer(buf) if self.addr_len0: self.__field_addr0=STRING(**{ 'sizeinbytes': self.addr_len0, 'terminator': None }) self.__field_addr0.readfrombuffer(buf) if self.addr_len1: self.__field_addr1=STRING(**{ 'sizeinbytes': self.addr_len1, 'terminator': None }) self.__field_addr1.readfrombuffer(buf) if self.addr_len2: self.__field_addr2=STRING(**{ 'sizeinbytes': self.addr_len2, 'terminator': None }) self.__field_addr2.readfrombuffer(buf) if self.addr_len3: self.__field_addr3=STRING(**{ 'sizeinbytes': self.addr_len3, 'terminator': None }) self.__field_addr3.readfrombuffer(buf) if self.addr_len4: self.__field_addr4=STRING(**{ 'sizeinbytes': self.addr_len4, 'terminator': None }) self.__field_addr4.readfrombuffer(buf) if self.addr_len5: self.__field_addr5=STRING(**{ 'sizeinbytes': self.addr_len5, 'terminator': None }) self.__field_addr5.readfrombuffer(buf) if self.addr_len6: self.__field_addr6=STRING(**{ 'sizeinbytes': self.addr_len6, 'terminator': None }) self.__field_addr6.readfrombuffer(buf) if self.addr_len7: self.__field_addr7=STRING(**{ 'sizeinbytes': self.addr_len7, 'terminator': None }) self.__field_addr7.readfrombuffer(buf) if self.addr_len8: self.__field_addr8=STRING(**{ 'sizeinbytes': self.addr_len8, 'terminator': None }) self.__field_addr8.readfrombuffer(buf) if self.addr_len9: self.__field_addr9=STRING(**{ 'sizeinbytes': self.addr_len9, 'terminator': None }) self.__field_addr9.readfrombuffer(buf) if not self.has_1byte and self.has_1byte2: DONTCARE(**{'sizeinbytes': 1}).readfrombuffer(buf) if self.has_1byte2: DONTCARE(**{'sizeinbytes': 1}).readfrombuffer(buf) DONTCARE(**{'sizeinbytes': 21}).readfrombuffer(buf) if self.has_40bytes: DONTCARE(**{'sizeinbytes': 40}).readfrombuffer(buf) self.__field_msg_stat=LIST(**{ 'elementclass': sms_msg_stat_list, 'length': 10 }) self.__field_msg_stat.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg_len(self): return self.__field_msg_len.getvalue() def __setfield_msg_len(self, value): if isinstance(value,UINT): self.__field_msg_len=value else: self.__field_msg_len=UINT(value,) def __delfield_msg_len(self): del self.__field_msg_len msg_len=property(__getfield_msg_len, __setfield_msg_len, __delfield_msg_len, None) def __getfield_has_callback(self): try: self.__field_has_callback except: self.__field_has_callback=BOOL(**{ 'default': True }) return self.__field_has_callback.getvalue() def __setfield_has_callback(self, value): if isinstance(value,BOOL): self.__field_has_callback=value else: self.__field_has_callback=BOOL(value,**{ 'default': True }) def __delfield_has_callback(self): del self.__field_has_callback has_callback=property(__getfield_has_callback, __setfield_has_callback, __delfield_has_callback, None) def __getfield_has_priority(self): try: self.__field_has_priority except: self.__field_has_priority=BOOL(**{ 'default': False }) return self.__field_has_priority.getvalue() def __setfield_has_priority(self, value): if isinstance(value,BOOL): self.__field_has_priority=value else: self.__field_has_priority=BOOL(value,**{ 'default': False }) def __delfield_has_priority(self): del self.__field_has_priority has_priority=property(__getfield_has_priority, __setfield_has_priority, __delfield_has_priority, None) def __getfield_has_1byte(self): try: self.__field_has_1byte except: self.__field_has_1byte=BOOL(**{ 'default': False }) return self.__field_has_1byte.getvalue() def __setfield_has_1byte(self, value): if isinstance(value,BOOL): self.__field_has_1byte=value else: self.__field_has_1byte=BOOL(value,**{ 'default': False }) def __delfield_has_1byte(self): del self.__field_has_1byte has_1byte=property(__getfield_has_1byte, __setfield_has_1byte, __delfield_has_1byte, None) def __getfield_has_1byte2(self): try: self.__field_has_1byte2 except: self.__field_has_1byte2=BOOL(**{ 'default': True }) return self.__field_has_1byte2.getvalue() def __setfield_has_1byte2(self, value): if isinstance(value,BOOL): self.__field_has_1byte2=value else: self.__field_has_1byte2=BOOL(value,**{ 'default': True }) def __delfield_has_1byte2(self): del self.__field_has_1byte2 has_1byte2=property(__getfield_has_1byte2, __setfield_has_1byte2, __delfield_has_1byte2, None) def __getfield_has_40bytes(self): try: self.__field_has_40bytes except: self.__field_has_40bytes=BOOL(**{ 'default': False }) return self.__field_has_40bytes.getvalue() def __setfield_has_40bytes(self, value): if isinstance(value,BOOL): self.__field_has_40bytes=value else: self.__field_has_40bytes=BOOL(value,**{ 'default': False }) def __delfield_has_40bytes(self): del self.__field_has_40bytes has_40bytes=property(__getfield_has_40bytes, __setfield_has_40bytes, __delfield_has_40bytes, None) def __getfield_msg(self): return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{ 'sizeinbytes': self.msg_len, 'encoding': ENCODING, 'terminator': None }) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UNKNOWN): self.__field_dunno2=value else: self.__field_dunno2=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_callback_len(self): return self.__field_callback_len.getvalue() def __setfield_callback_len(self, value): if isinstance(value,UINT): self.__field_callback_len=value else: self.__field_callback_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_len(self): del self.__field_callback_len callback_len=property(__getfield_callback_len, __setfield_callback_len, __delfield_callback_len, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,STRING): self.__field_callback=value else: self.__field_callback=STRING(value,**{ 'sizeinbytes': self.callback_len, 'terminator': None }) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,DateTime1): self.__field_datetime=value else: self.__field_datetime=DateTime1(value,**{'sizeinbytes': 4}) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def __getfield_addr_len0(self): return self.__field_addr_len0.getvalue() def __setfield_addr_len0(self, value): if isinstance(value,UINT): self.__field_addr_len0=value else: self.__field_addr_len0=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len0(self): del self.__field_addr_len0 addr_len0=property(__getfield_addr_len0, __setfield_addr_len0, __delfield_addr_len0, None) def __getfield_addr_len1(self): return self.__field_addr_len1.getvalue() def __setfield_addr_len1(self, value): if isinstance(value,UINT): self.__field_addr_len1=value else: self.__field_addr_len1=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len1(self): del self.__field_addr_len1 addr_len1=property(__getfield_addr_len1, __setfield_addr_len1, __delfield_addr_len1, None) def __getfield_addr_len2(self): return self.__field_addr_len2.getvalue() def __setfield_addr_len2(self, value): if isinstance(value,UINT): self.__field_addr_len2=value else: self.__field_addr_len2=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len2(self): del self.__field_addr_len2 addr_len2=property(__getfield_addr_len2, __setfield_addr_len2, __delfield_addr_len2, None) def __getfield_addr_len3(self): return self.__field_addr_len3.getvalue() def __setfield_addr_len3(self, value): if isinstance(value,UINT): self.__field_addr_len3=value else: self.__field_addr_len3=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len3(self): del self.__field_addr_len3 addr_len3=property(__getfield_addr_len3, __setfield_addr_len3, __delfield_addr_len3, None) def __getfield_addr_len4(self): return self.__field_addr_len4.getvalue() def __setfield_addr_len4(self, value): if isinstance(value,UINT): self.__field_addr_len4=value else: self.__field_addr_len4=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len4(self): del self.__field_addr_len4 addr_len4=property(__getfield_addr_len4, __setfield_addr_len4, __delfield_addr_len4, None) def __getfield_addr_len5(self): return self.__field_addr_len5.getvalue() def __setfield_addr_len5(self, value): if isinstance(value,UINT): self.__field_addr_len5=value else: self.__field_addr_len5=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len5(self): del self.__field_addr_len5 addr_len5=property(__getfield_addr_len5, __setfield_addr_len5, __delfield_addr_len5, None) def __getfield_addr_len6(self): return self.__field_addr_len6.getvalue() def __setfield_addr_len6(self, value): if isinstance(value,UINT): self.__field_addr_len6=value else: self.__field_addr_len6=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len6(self): del self.__field_addr_len6 addr_len6=property(__getfield_addr_len6, __setfield_addr_len6, __delfield_addr_len6, None) def __getfield_addr_len7(self): return self.__field_addr_len7.getvalue() def __setfield_addr_len7(self, value): if isinstance(value,UINT): self.__field_addr_len7=value else: self.__field_addr_len7=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len7(self): del self.__field_addr_len7 addr_len7=property(__getfield_addr_len7, __setfield_addr_len7, __delfield_addr_len7, None) def __getfield_addr_len8(self): return self.__field_addr_len8.getvalue() def __setfield_addr_len8(self, value): if isinstance(value,UINT): self.__field_addr_len8=value else: self.__field_addr_len8=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len8(self): del self.__field_addr_len8 addr_len8=property(__getfield_addr_len8, __setfield_addr_len8, __delfield_addr_len8, None) def __getfield_addr_len9(self): return self.__field_addr_len9.getvalue() def __setfield_addr_len9(self, value): if isinstance(value,UINT): self.__field_addr_len9=value else: self.__field_addr_len9=UINT(value,**{'sizeinbytes': 1}) def __delfield_addr_len9(self): del self.__field_addr_len9 addr_len9=property(__getfield_addr_len9, __setfield_addr_len9, __delfield_addr_len9, None) def __getfield_addr0(self): return self.__field_addr0.getvalue() def __setfield_addr0(self, value): if isinstance(value,STRING): self.__field_addr0=value else: self.__field_addr0=STRING(value,**{ 'sizeinbytes': self.addr_len0, 'terminator': None }) def __delfield_addr0(self): del self.__field_addr0 addr0=property(__getfield_addr0, __setfield_addr0, __delfield_addr0, None) def __getfield_addr1(self): return self.__field_addr1.getvalue() def __setfield_addr1(self, value): if isinstance(value,STRING): self.__field_addr1=value else: self.__field_addr1=STRING(value,**{ 'sizeinbytes': self.addr_len1, 'terminator': None }) def __delfield_addr1(self): del self.__field_addr1 addr1=property(__getfield_addr1, __setfield_addr1, __delfield_addr1, None) def __getfield_addr2(self): return self.__field_addr2.getvalue() def __setfield_addr2(self, value): if isinstance(value,STRING): self.__field_addr2=value else: self.__field_addr2=STRING(value,**{ 'sizeinbytes': self.addr_len2, 'terminator': None }) def __delfield_addr2(self): del self.__field_addr2 addr2=property(__getfield_addr2, __setfield_addr2, __delfield_addr2, None) def __getfield_addr3(self): return self.__field_addr3.getvalue() def __setfield_addr3(self, value): if isinstance(value,STRING): self.__field_addr3=value else: self.__field_addr3=STRING(value,**{ 'sizeinbytes': self.addr_len3, 'terminator': None }) def __delfield_addr3(self): del self.__field_addr3 addr3=property(__getfield_addr3, __setfield_addr3, __delfield_addr3, None) def __getfield_addr4(self): return self.__field_addr4.getvalue() def __setfield_addr4(self, value): if isinstance(value,STRING): self.__field_addr4=value else: self.__field_addr4=STRING(value,**{ 'sizeinbytes': self.addr_len4, 'terminator': None }) def __delfield_addr4(self): del self.__field_addr4 addr4=property(__getfield_addr4, __setfield_addr4, __delfield_addr4, None) def __getfield_addr5(self): return self.__field_addr5.getvalue() def __setfield_addr5(self, value): if isinstance(value,STRING): self.__field_addr5=value else: self.__field_addr5=STRING(value,**{ 'sizeinbytes': self.addr_len5, 'terminator': None }) def __delfield_addr5(self): del self.__field_addr5 addr5=property(__getfield_addr5, __setfield_addr5, __delfield_addr5, None) def __getfield_addr6(self): return self.__field_addr6.getvalue() def __setfield_addr6(self, value): if isinstance(value,STRING): self.__field_addr6=value else: self.__field_addr6=STRING(value,**{ 'sizeinbytes': self.addr_len6, 'terminator': None }) def __delfield_addr6(self): del self.__field_addr6 addr6=property(__getfield_addr6, __setfield_addr6, __delfield_addr6, None) def __getfield_addr7(self): return self.__field_addr7.getvalue() def __setfield_addr7(self, value): if isinstance(value,STRING): self.__field_addr7=value else: self.__field_addr7=STRING(value,**{ 'sizeinbytes': self.addr_len7, 'terminator': None }) def __delfield_addr7(self): del self.__field_addr7 addr7=property(__getfield_addr7, __setfield_addr7, __delfield_addr7, None) def __getfield_addr8(self): return self.__field_addr8.getvalue() def __setfield_addr8(self, value): if isinstance(value,STRING): self.__field_addr8=value else: self.__field_addr8=STRING(value,**{ 'sizeinbytes': self.addr_len8, 'terminator': None }) def __delfield_addr8(self): del self.__field_addr8 addr8=property(__getfield_addr8, __setfield_addr8, __delfield_addr8, None) def __getfield_addr9(self): return self.__field_addr9.getvalue() def __setfield_addr9(self, value): if isinstance(value,STRING): self.__field_addr9=value else: self.__field_addr9=STRING(value,**{ 'sizeinbytes': self.addr_len9, 'terminator': None }) def __delfield_addr9(self): del self.__field_addr9 addr9=property(__getfield_addr9, __setfield_addr9, __delfield_addr9, None) def __getfield_msg_stat(self): return self.__field_msg_stat.getvalue() def __setfield_msg_stat(self, value): if isinstance(value,LIST): self.__field_msg_stat=value else: self.__field_msg_stat=LIST(value,**{ 'elementclass': sms_msg_stat_list, 'length': 10 }) def __delfield_msg_stat(self): del self.__field_msg_stat msg_stat=property(__getfield_msg_stat, __setfield_msg_stat, __delfield_msg_stat, None) def iscontainer(self): return True def containerelements(self): yield ('msg_len', self.__field_msg_len, None) yield ('has_callback', self.__field_has_callback, None) yield ('has_priority', self.__field_has_priority, None) yield ('has_1byte', self.__field_has_1byte, None) yield ('has_1byte2', self.__field_has_1byte2, None) yield ('has_40bytes', self.__field_has_40bytes, None) yield ('msg', self.__field_msg, None) if self.has_callback: yield ('dunno2', self.__field_dunno2, None) yield ('callback_len', self.__field_callback_len, None) yield ('callback', self.__field_callback, None) if self.has_priority: yield ('priority', self.__field_priority, None) if self.has_1byte: pass yield ('datetime', self.__field_datetime, None) yield ('addr_len0', self.__field_addr_len0, None) yield ('addr_len1', self.__field_addr_len1, None) yield ('addr_len2', self.__field_addr_len2, None) yield ('addr_len3', self.__field_addr_len3, None) yield ('addr_len4', self.__field_addr_len4, None) yield ('addr_len5', self.__field_addr_len5, None) yield ('addr_len6', self.__field_addr_len6, None) yield ('addr_len7', self.__field_addr_len7, None) yield ('addr_len8', self.__field_addr_len8, None) yield ('addr_len9', self.__field_addr_len9, None) if self.addr_len0: yield ('addr0', self.__field_addr0, None) if self.addr_len1: yield ('addr1', self.__field_addr1, None) if self.addr_len2: yield ('addr2', self.__field_addr2, None) if self.addr_len3: yield ('addr3', self.__field_addr3, None) if self.addr_len4: yield ('addr4', self.__field_addr4, None) if self.addr_len5: yield ('addr5', self.__field_addr5, None) if self.addr_len6: yield ('addr6', self.__field_addr6, None) if self.addr_len7: yield ('addr7', self.__field_addr7, None) if self.addr_len8: yield ('addr8', self.__field_addr8, None) if self.addr_len9: yield ('addr9', self.__field_addr9, None) if not self.has_1byte and self.has_1byte2: pass if self.has_1byte2: pass if self.has_40bytes: pass yield ('msg_stat', self.__field_msg_stat, None) bitpim-1.0.7+dfsg1/src/phones/p_lgvx7000.py0000644001616600161660000043312010466234100016411 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VX7000""" from common import PhoneBookBusyException from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx4400 except as noted # below from p_lgvx4400 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NORINGTONE=65535 # -1 in two bytes NOMSGRINGTONE=65535 # -1 in two bytes NOWALLPAPER=0 # of course it wouldn't be 65535 ... NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=500 MAXCALENDARDESCRIPTION=38 NUMEMAILS=2 NUMPHONENUMBERS=5 PHONE_ENCODING='iso8859_1' # Text Memo const text_memo_file='sch/memo.dat' # SMS const sms_dir='sms' sms_ext='.dat' sms_inbox_prefix='sms/inbox' sms_inbox_name_len=len(sms_inbox_prefix)+3+len(sms_ext) sms_saved_prefix='sms/sf' sms_saved_name_len=len(sms_saved_prefix)+2+len(sms_ext) sms_outbox_prefix='sms/outbox' sms_outbox_name_len=len(sms_outbox_prefix)+3+len(sms_ext) sms_canned_file='sms/mediacan000.dat' SMS_CANNED_MAX_ITEMS=18 # Call History const incoming_call_file='pim/incoming_log.dat' outgoing_call_file='pim/outgoing_log.dat' missed_call_file='pim/missed_log.dat' # The numbertype tab is different than all other LG phones numbertypetab= ( None, 'cell', 'home', 'office', 'cell2', 'fax' ) class speeddial(BaseProtogenClass): __fields=['entry', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddial,self).__init__(**dict) if self.__class__ is speeddial: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddial,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddial,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.writetobuffer(buf) try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.readfrombuffer(buf) self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,UINT): self.__field_entry=value else: self.__field_entry=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_number(self): try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,UINT): self.__field_number=value else: self.__field_number=UINT(value,**{'sizeinbytes': 1, 'default': 0xff}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('entry', self.__field_entry, None) yield ('number', self.__field_number, None) class speeddials(BaseProtogenClass): __fields=['speeddials'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddials,self).__init__(**dict) if self.__class__ is speeddials: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddials,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddials,kwargs) if len(args): dict2={'length': NUMSPEEDDIALS, 'elementclass': speeddial} dict2.update(kwargs) kwargs=dict2 self.__field_speeddials=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_speeddials(self): try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) return self.__field_speeddials.getvalue() def __setfield_speeddials(self, value): if isinstance(value,LIST): self.__field_speeddials=value else: self.__field_speeddials=LIST(value,**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) def __delfield_speeddials(self): del self.__field_speeddials speeddials=property(__getfield_speeddials, __setfield_speeddials, __delfield_speeddials, None) def iscontainer(self): return True def containerelements(self): yield ('speeddials', self.__field_speeddials, None) class indexentry(BaseProtogenClass): __fields=['index', 'type', 'filename', 'date', 'dunno'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_type.writetobuffer(buf) self.__field_filename.writetobuffer(buf) try: self.__field_date except: self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_date.writetobuffer(buf) self.__field_dunno.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self.__field_type=UINT(**{'sizeinbytes': 2}) self.__field_type.readfrombuffer(buf) self.__field_filename=USTRING(**{'sizeinbytes': 84}) self.__field_filename.readfrombuffer(buf) self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_date.readfrombuffer(buf) self.__field_dunno=UINT(**{'sizeinbytes': 4}) self.__field_dunno.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_type(self): return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,UINT): self.__field_type=value else: self.__field_type=UINT(value,**{'sizeinbytes': 2}) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, None) def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'sizeinbytes': 84}) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, "includes full pathname") def __getfield_date(self): try: self.__field_date except: self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,UINT): self.__field_date=value else: self.__field_date=UINT(value,**{'sizeinbytes': 4, 'default': 0}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, "i think this is bitfield of the date") def __getfield_dunno(self): return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 4}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('type', self.__field_type, None) yield ('filename', self.__field_filename, "includes full pathname") yield ('date', self.__field_date, "i think this is bitfield of the date") yield ('dunno', self.__field_dunno, None) class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): dict2={'elementclass': indexentry, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class sizefile(BaseProtogenClass): "Used for tracking the total size used by a particular type of media" __fields=['size'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sizefile,self).__init__(**dict) if self.__class__ is sizefile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sizefile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sizefile,kwargs) if len(args): dict2={'sizeinbytes': 4} dict2.update(kwargs) kwargs=dict2 self.__field_size=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_size.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_size=UINT(**{'sizeinbytes': 4}) self.__field_size.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_size(self): return self.__field_size.getvalue() def __setfield_size(self, value): if isinstance(value,UINT): self.__field_size=value else: self.__field_size=UINT(value,**{'sizeinbytes': 4}) def __delfield_size(self): del self.__field_size size=property(__getfield_size, __setfield_size, __delfield_size, None) def iscontainer(self): return True def containerelements(self): yield ('size', self.__field_size, None) class pbentry(BaseProtogenClass): __fields=['serial1', 'entrysize', 'serial2', 'entrynumber', 'name', 'group', 'emails', 'ringtone', 'msgringtone', 'wallpaper', 'numbertypes', 'numbers', 'unknown'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_serial1.writetobuffer(buf) try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x181, 'constantexception': PhoneBookBusyException}) self.__field_entrysize.writetobuffer(buf) self.__field_serial2.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_group.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx7000_104, 'length': NUMEMAILS}) self.__field_emails.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_msgringtone.writetobuffer(buf) self.__field_wallpaper.writetobuffer(buf) try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx7000_109, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx7000_111, 'length': NUMPHONENUMBERS}) self.__field_numbers.writetobuffer(buf) try: self.__field_unknown except: self.__field_unknown=UNKNOWN() self.__field_unknown.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x181, 'constantexception': PhoneBookBusyException}) self.__field_entrysize.readfrombuffer(buf) self.__field_serial2=UINT(**{'sizeinbytes': 4}) self.__field_serial2.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 2}) self.__field_entrynumber.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 2}) self.__field_group.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx7000_104, 'length': NUMEMAILS}) self.__field_emails.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 2}) self.__field_ringtone.readfrombuffer(buf) self.__field_msgringtone=UINT(**{'sizeinbytes': 2}) self.__field_msgringtone.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 2}) self.__field_wallpaper.readfrombuffer(buf) self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx7000_109, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.readfrombuffer(buf) self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx7000_111, 'length': NUMPHONENUMBERS}) self.__field_numbers.readfrombuffer(buf) self.__field_unknown=UNKNOWN() self.__field_unknown.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_entrysize(self): try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x181, 'constantexception': PhoneBookBusyException}) return self.__field_entrysize.getvalue() def __setfield_entrysize(self, value): if isinstance(value,UINT): self.__field_entrysize=value else: self.__field_entrysize=UINT(value,**{'sizeinbytes': 2, 'constant': 0x181, 'constantexception': PhoneBookBusyException}) def __delfield_entrysize(self): del self.__field_entrysize entrysize=property(__getfield_entrysize, __setfield_entrysize, __delfield_entrysize, None) def __getfield_serial2(self): return self.__field_serial2.getvalue() def __setfield_serial2(self, value): if isinstance(value,UINT): self.__field_serial2=value else: self.__field_serial2=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial2(self): del self.__field_serial2 serial2=property(__getfield_serial2, __setfield_serial2, __delfield_serial2, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 2}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 2}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx7000_104, 'length': NUMEMAILS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_lgvx7000_104, 'length': NUMEMAILS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 2}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "ringtone index for a call") def __getfield_msgringtone(self): return self.__field_msgringtone.getvalue() def __setfield_msgringtone(self, value): if isinstance(value,UINT): self.__field_msgringtone=value else: self.__field_msgringtone=UINT(value,**{'sizeinbytes': 2}) def __delfield_msgringtone(self): del self.__field_msgringtone msgringtone=property(__getfield_msgringtone, __setfield_msgringtone, __delfield_msgringtone, "ringtone index for a text message") def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 2}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_numbertypes(self): try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx7000_109, 'length': NUMPHONENUMBERS}) return self.__field_numbertypes.getvalue() def __setfield_numbertypes(self, value): if isinstance(value,LIST): self.__field_numbertypes=value else: self.__field_numbertypes=LIST(value,**{'elementclass': _gen_p_lgvx7000_109, 'length': NUMPHONENUMBERS}) def __delfield_numbertypes(self): del self.__field_numbertypes numbertypes=property(__getfield_numbertypes, __setfield_numbertypes, __delfield_numbertypes, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lgvx7000_111, 'length': NUMPHONENUMBERS}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'elementclass': _gen_p_lgvx7000_111, 'length': NUMPHONENUMBERS}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_unknown(self): try: self.__field_unknown except: self.__field_unknown=UNKNOWN() return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UNKNOWN): self.__field_unknown=value else: self.__field_unknown=UNKNOWN(value,) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def iscontainer(self): return True def containerelements(self): yield ('serial1', self.__field_serial1, None) yield ('entrysize', self.__field_entrysize, None) yield ('serial2', self.__field_serial2, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('name', self.__field_name, None) yield ('group', self.__field_group, None) yield ('emails', self.__field_emails, None) yield ('ringtone', self.__field_ringtone, "ringtone index for a call") yield ('msgringtone', self.__field_msgringtone, "ringtone index for a text message") yield ('wallpaper', self.__field_wallpaper, None) yield ('numbertypes', self.__field_numbertypes, None) yield ('numbers', self.__field_numbers, None) yield ('unknown', self.__field_unknown, None) class _gen_p_lgvx7000_104(BaseProtogenClass): 'Anonymous inner class' __fields=['email'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx7000_104,self).__init__(**dict) if self.__class__ is _gen_p_lgvx7000_104: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx7000_104,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx7000_104,kwargs) if len(args): dict2={'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_email=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_email.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_email=USTRING(**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_email.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def iscontainer(self): return True def containerelements(self): yield ('email', self.__field_email, None) class _gen_p_lgvx7000_109(BaseProtogenClass): 'Anonymous inner class' __fields=['numbertype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx7000_109,self).__init__(**dict) if self.__class__ is _gen_p_lgvx7000_109: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx7000_109,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx7000_109,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_numbertype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numbertype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numbertype=UINT(**{'sizeinbytes': 1}) self.__field_numbertype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numbertype(self): return self.__field_numbertype.getvalue() def __setfield_numbertype(self, value): if isinstance(value,UINT): self.__field_numbertype=value else: self.__field_numbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_numbertype(self): del self.__field_numbertype numbertype=property(__getfield_numbertype, __setfield_numbertype, __delfield_numbertype, None) def iscontainer(self): return True def containerelements(self): yield ('numbertype', self.__field_numbertype, None) class _gen_p_lgvx7000_111(BaseProtogenClass): 'Anonymous inner class' __fields=['number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx7000_111,self).__init__(**dict) if self.__class__ is _gen_p_lgvx7000_111: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx7000_111,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx7000_111,kwargs) if len(args): dict2={'sizeinbytes': 49, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_number=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) class pbreadentryresponse(BaseProtogenClass): "Results of reading one entry" __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbreadentryresponse,self).__init__(**dict) if self.__class__ is pbreadentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbreadentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbreadentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbupdateentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbupdateentryrequest,self).__init__(**dict) if self.__class__ is pbupdateentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbupdateentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbupdateentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x04, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbappendentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbappendentryrequest,self).__init__(**dict) if self.__class__ is pbappendentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbappendentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbappendentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x03, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class scheduleexception(BaseProtogenClass): __fields=['pos', 'day', 'month', 'year'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexception,self).__init__(**dict) if self.__class__ is scheduleexception: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexception,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexception,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_day.writetobuffer(buf) self.__field_month.writetobuffer(buf) self.__field_year.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_day=UINT(**{'sizeinbytes': 1}) self.__field_day.readfrombuffer(buf) self.__field_month=UINT(**{'sizeinbytes': 1}) self.__field_month.readfrombuffer(buf) self.__field_year=UINT(**{'sizeinbytes': 2}) self.__field_year.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "Refers to event id (position in schedule file) that this suppresses") def __getfield_day(self): return self.__field_day.getvalue() def __setfield_day(self, value): if isinstance(value,UINT): self.__field_day=value else: self.__field_day=UINT(value,**{'sizeinbytes': 1}) def __delfield_day(self): del self.__field_day day=property(__getfield_day, __setfield_day, __delfield_day, None) def __getfield_month(self): return self.__field_month.getvalue() def __setfield_month(self, value): if isinstance(value,UINT): self.__field_month=value else: self.__field_month=UINT(value,**{'sizeinbytes': 1}) def __delfield_month(self): del self.__field_month month=property(__getfield_month, __setfield_month, __delfield_month, None) def __getfield_year(self): return self.__field_year.getvalue() def __setfield_year(self, value): if isinstance(value,UINT): self.__field_year=value else: self.__field_year=UINT(value,**{'sizeinbytes': 2}) def __delfield_year(self): del self.__field_year year=property(__getfield_year, __setfield_year, __delfield_year, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "Refers to event id (position in schedule file) that this suppresses") yield ('day', self.__field_day, None) yield ('month', self.__field_month, None) yield ('year', self.__field_year, None) class scheduleexceptionfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexceptionfile,self).__init__(**dict) if self.__class__ is scheduleexceptionfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexceptionfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexceptionfile,kwargs) if len(args): dict2={'elementclass': scheduleexception} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': scheduleexception}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class scheduleevent(BaseProtogenClass): __fields=['pos', 'start', 'end', 'repeat', 'daybitmap', 'alarmminutes', 'alarmhours', 'alarmtype', 'snoozedelay', 'ringtone', 'pad2', 'description'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleevent,self).__init__(**dict) if self.__class__ is scheduleevent: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleevent,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleevent,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) self.__field_daybitmap.writetobuffer(buf) self.__field_alarmminutes.writetobuffer(buf) self.__field_alarmhours.writetobuffer(buf) self.__field_alarmtype.writetobuffer(buf) try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_pad2.writetobuffer(buf) self.__field_description.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_start=LGCALDATE(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=LGCALDATE(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_repeat=UINT(**{'sizeinbytes': 1}) self.__field_repeat.readfrombuffer(buf) self.__field_daybitmap=UINT(**{'sizeinbytes': 2}) self.__field_daybitmap.readfrombuffer(buf) self.__field_alarmminutes=UINT(**{'sizeinbytes': 1}) self.__field_alarmminutes.readfrombuffer(buf) self.__field_alarmhours=UINT(**{'sizeinbytes': 1}) self.__field_alarmhours.readfrombuffer(buf) self.__field_alarmtype=UINT(**{'sizeinbytes': 1}) self.__field_alarmtype.readfrombuffer(buf) self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_pad2=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_pad2.readfrombuffer(buf) self.__field_description=USTRING(**{'sizeinbytes': 39, 'encoding': PHONE_ENCODING, 'raiseontruncate': False, 'raiseonunterminatedread': False }) self.__field_description.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "position within file, used as an event id") def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,LGCALDATE): self.__field_start=value else: self.__field_start=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,LGCALDATE): self.__field_end=value else: self.__field_end=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,UINT): self.__field_repeat=value else: self.__field_repeat=UINT(value,**{'sizeinbytes': 1}) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_daybitmap(self): return self.__field_daybitmap.getvalue() def __setfield_daybitmap(self, value): if isinstance(value,UINT): self.__field_daybitmap=value else: self.__field_daybitmap=UINT(value,**{'sizeinbytes': 2}) def __delfield_daybitmap(self): del self.__field_daybitmap daybitmap=property(__getfield_daybitmap, __setfield_daybitmap, __delfield_daybitmap, "which days a weekly repeat event happens on") def __getfield_alarmminutes(self): return self.__field_alarmminutes.getvalue() def __setfield_alarmminutes(self, value): if isinstance(value,UINT): self.__field_alarmminutes=value else: self.__field_alarmminutes=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmminutes(self): del self.__field_alarmminutes alarmminutes=property(__getfield_alarmminutes, __setfield_alarmminutes, __delfield_alarmminutes, "a value of 100 indicates not set") def __getfield_alarmhours(self): return self.__field_alarmhours.getvalue() def __setfield_alarmhours(self, value): if isinstance(value,UINT): self.__field_alarmhours=value else: self.__field_alarmhours=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmhours(self): del self.__field_alarmhours alarmhours=property(__getfield_alarmhours, __setfield_alarmhours, __delfield_alarmhours, "a value of 100 indicates not set") def __getfield_alarmtype(self): return self.__field_alarmtype.getvalue() def __setfield_alarmtype(self, value): if isinstance(value,UINT): self.__field_alarmtype=value else: self.__field_alarmtype=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmtype(self): del self.__field_alarmtype alarmtype=property(__getfield_alarmtype, __setfield_alarmtype, __delfield_alarmtype, "preset alarm reminder type") def __getfield_snoozedelay(self): try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_snoozedelay.getvalue() def __setfield_snoozedelay(self, value): if isinstance(value,UINT): self.__field_snoozedelay=value else: self.__field_snoozedelay=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_snoozedelay(self): del self.__field_snoozedelay snoozedelay=property(__getfield_snoozedelay, __setfield_snoozedelay, __delfield_snoozedelay, "in minutes, not for this phone") def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UINT(**{'sizeinbytes': 4, 'default': 0 }) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UINT): self.__field_pad2=value else: self.__field_pad2=UINT(value,**{'sizeinbytes': 4, 'default': 0 }) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_description(self): return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,USTRING): self.__field_description=value else: self.__field_description=USTRING(value,**{'sizeinbytes': 39, 'encoding': PHONE_ENCODING, 'raiseontruncate': False, 'raiseonunterminatedread': False }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "position within file, used as an event id") yield ('start', self.__field_start, None) yield ('end', self.__field_end, None) yield ('repeat', self.__field_repeat, None) yield ('daybitmap', self.__field_daybitmap, "which days a weekly repeat event happens on") yield ('alarmminutes', self.__field_alarmminutes, "a value of 100 indicates not set") yield ('alarmhours', self.__field_alarmhours, "a value of 100 indicates not set") yield ('alarmtype', self.__field_alarmtype, "preset alarm reminder type") yield ('snoozedelay', self.__field_snoozedelay, "in minutes, not for this phone") yield ('ringtone', self.__field_ringtone, None) yield ('pad2', self.__field_pad2, None) yield ('description', self.__field_description, None) class schedulefile(BaseProtogenClass): __fields=['numactiveitems', 'events'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(schedulefile,self).__init__(**dict) if self.__class__ is schedulefile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(schedulefile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(schedulefile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{'elementclass': scheduleevent}) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('events', self.__field_events, None) class textmemo(BaseProtogenClass): __fields=['text'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemo,self).__init__(**dict) if self.__class__ is textmemo: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemo,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemo,kwargs) if len(args): dict2={'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } dict2.update(kwargs) kwargs=dict2 self.__field_text=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_text.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_text=USTRING(**{'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_text.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,USTRING): self.__field_text=value else: self.__field_text=USTRING(value,**{'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def iscontainer(self): return True def containerelements(self): yield ('text', self.__field_text, None) class textmemofile(BaseProtogenClass): __fields=['itemcount', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemofile,self).__init__(**dict) if self.__class__ is textmemofile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemofile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemofile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_itemcount.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_itemcount=UINT(**{'sizeinbytes': 4}) self.__field_itemcount.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_itemcount(self): return self.__field_itemcount.getvalue() def __setfield_itemcount(self, value): if isinstance(value,UINT): self.__field_itemcount=value else: self.__field_itemcount=UINT(value,**{'sizeinbytes': 4}) def __delfield_itemcount(self): del self.__field_itemcount itemcount=property(__getfield_itemcount, __setfield_itemcount, __delfield_itemcount, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': textmemo }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('itemcount', self.__field_itemcount, None) yield ('items', self.__field_items, None) class callentry(BaseProtogenClass): __fields=['GPStime', 'pad1', 'duration', 'number', 'name', 'pad2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callentry,self).__init__(**dict) if self.__class__ is callentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_pad1.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_pad2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 4}) self.__field_pad1.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False }) self.__field_number.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 36, 'raiseonunterminatedread': False }) self.__field_name.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 8}) self.__field_pad2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_pad1(self): return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 4}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False }) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 36, 'raiseonunterminatedread': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_pad2(self): return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 8}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def iscontainer(self): return True def containerelements(self): yield ('GPStime', self.__field_GPStime, None) yield ('pad1', self.__field_pad1, None) yield ('duration', self.__field_duration, None) yield ('number', self.__field_number, None) yield ('name', self.__field_name, None) yield ('pad2', self.__field_pad2, None) class callhistory(BaseProtogenClass): __fields=['numcalls', 'pad1', 'calls'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callhistory,self).__init__(**dict) if self.__class__ is callhistory: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callhistory,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callhistory,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numcalls.writetobuffer(buf) self.__field_pad1.writetobuffer(buf) try: self.__field_calls except: self.__field_calls=LIST(**{ 'elementclass': callentry }) self.__field_calls.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numcalls=UINT(**{'sizeinbytes': 4}) self.__field_numcalls.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.readfrombuffer(buf) self.__field_calls=LIST(**{ 'elementclass': callentry }) self.__field_calls.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numcalls(self): return self.__field_numcalls.getvalue() def __setfield_numcalls(self, value): if isinstance(value,UINT): self.__field_numcalls=value else: self.__field_numcalls=UINT(value,**{'sizeinbytes': 4}) def __delfield_numcalls(self): del self.__field_numcalls numcalls=property(__getfield_numcalls, __setfield_numcalls, __delfield_numcalls, None) def __getfield_pad1(self): return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_calls(self): try: self.__field_calls except: self.__field_calls=LIST(**{ 'elementclass': callentry }) return self.__field_calls.getvalue() def __setfield_calls(self, value): if isinstance(value,LIST): self.__field_calls=value else: self.__field_calls=LIST(value,**{ 'elementclass': callentry }) def __delfield_calls(self): del self.__field_calls calls=property(__getfield_calls, __setfield_calls, __delfield_calls, None) def iscontainer(self): return True def containerelements(self): yield ('numcalls', self.__field_numcalls, None) yield ('pad1', self.__field_pad1, None) yield ('calls', self.__field_calls, None) class msg_record(BaseProtogenClass): __fields=['binary', 'unknown3', 'unknown4', 'unknown6', 'length', 'msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(msg_record,self).__init__(**dict) if self.__class__ is msg_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(msg_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(msg_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_binary.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_length.writetobuffer(buf) try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx7000_216, 'length': 220}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_binary=UINT(**{'sizeinbytes': 1}) self.__field_binary.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1}) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 1}) self.__field_unknown4.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 1}) self.__field_unknown6.readfrombuffer(buf) self.__field_length=UINT(**{'sizeinbytes': 1}) self.__field_length.readfrombuffer(buf) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx7000_216, 'length': 220}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_binary(self): return self.__field_binary.getvalue() def __setfield_binary(self, value): if isinstance(value,UINT): self.__field_binary=value else: self.__field_binary=UINT(value,**{'sizeinbytes': 1}) def __delfield_binary(self): del self.__field_binary binary=property(__getfield_binary, __setfield_binary, __delfield_binary, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_length(self): return self.__field_length.getvalue() def __setfield_length(self, value): if isinstance(value,UINT): self.__field_length=value else: self.__field_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_length(self): del self.__field_length length=property(__getfield_length, __setfield_length, __delfield_length, None) def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx7000_216, 'length': 220}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx7000_216, 'length': 220}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('binary', self.__field_binary, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) yield ('unknown6', self.__field_unknown6, None) yield ('length', self.__field_length, None) yield ('msg', self.__field_msg, None) class _gen_p_lgvx7000_216(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx7000_216,self).__init__(**dict) if self.__class__ is _gen_p_lgvx7000_216: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx7000_216,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx7000_216,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class recipient_record(BaseProtogenClass): __fields=['number', 'status', 'timesent', 'timereceived', 'unknown2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(recipient_record,self).__init__(**dict) if self.__class__ is recipient_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(recipient_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(recipient_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_timereceived.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=USTRING(**{'sizeinbytes': 49}) self.__field_number.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 2}) self.__field_status.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_timereceived=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timereceived.readfrombuffer(buf) self.__field_unknown2=UNKNOWN(**{'sizeinbytes': 49}) self.__field_unknown2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 2}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_timereceived(self): return self.__field_timereceived.getvalue() def __setfield_timereceived(self, value): if isinstance(value,LGCALDATE): self.__field_timereceived=value else: self.__field_timereceived=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timereceived(self): del self.__field_timereceived timereceived=property(__getfield_timereceived, __setfield_timereceived, __delfield_timereceived, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UNKNOWN): self.__field_unknown2=value else: self.__field_unknown2=UNKNOWN(value,**{'sizeinbytes': 49}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) yield ('status', self.__field_status, None) yield ('timesent', self.__field_timesent, None) yield ('timereceived', self.__field_timereceived, None) yield ('unknown2', self.__field_unknown2, None) class sms_saved(BaseProtogenClass): __fields=['outboxmsg', 'pad', 'outbox', 'inbox'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_saved,self).__init__(**dict) if self.__class__ is sms_saved: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_saved,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_saved,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_outboxmsg.writetobuffer(buf) self.__field_pad.writetobuffer(buf) if self.outboxmsg: self.__field_outbox.writetobuffer(buf) if not self.outboxmsg: self.__field_inbox.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_outboxmsg=UINT(**{'sizeinbytes': 4}) self.__field_outboxmsg.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 4}) self.__field_pad.readfrombuffer(buf) if self.outboxmsg: self.__field_outbox=sms_out() self.__field_outbox.readfrombuffer(buf) if not self.outboxmsg: self.__field_inbox=sms_in() self.__field_inbox.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_outboxmsg(self): return self.__field_outboxmsg.getvalue() def __setfield_outboxmsg(self, value): if isinstance(value,UINT): self.__field_outboxmsg=value else: self.__field_outboxmsg=UINT(value,**{'sizeinbytes': 4}) def __delfield_outboxmsg(self): del self.__field_outboxmsg outboxmsg=property(__getfield_outboxmsg, __setfield_outboxmsg, __delfield_outboxmsg, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 4}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_outbox(self): return self.__field_outbox.getvalue() def __setfield_outbox(self, value): if isinstance(value,sms_out): self.__field_outbox=value else: self.__field_outbox=sms_out(value,) def __delfield_outbox(self): del self.__field_outbox outbox=property(__getfield_outbox, __setfield_outbox, __delfield_outbox, None) def __getfield_inbox(self): return self.__field_inbox.getvalue() def __setfield_inbox(self, value): if isinstance(value,sms_in): self.__field_inbox=value else: self.__field_inbox=sms_in(value,) def __delfield_inbox(self): del self.__field_inbox inbox=property(__getfield_inbox, __setfield_inbox, __delfield_inbox, None) def iscontainer(self): return True def containerelements(self): yield ('outboxmsg', self.__field_outboxmsg, None) yield ('pad', self.__field_pad, None) if self.outboxmsg: yield ('outbox', self.__field_outbox, None) if not self.outboxmsg: yield ('inbox', self.__field_inbox, None) class sms_out(BaseProtogenClass): __fields=['index', 'locked', 'unknown2', 'timesent', 'unknown2', 'subject', 'unknown4', 'num_msg_elements', 'messages', 'unknown1', 'priority', 'unknown5', 'callback', 'recipients', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_out,self).__init__(**dict) if self.__class__ is sms_out: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_out,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_out,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) self.__field_messages.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_callback.writetobuffer(buf) try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) self.__field_recipients.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown2=UNKNOWN(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown2=UNKNOWN(**{'sizeinbytes': 6}) self.__field_unknown2.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_unknown4=UNKNOWN(**{'sizeinbytes': 1}) self.__field_unknown4.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 2}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) self.__field_messages.readfrombuffer(buf) self.__field_unknown1=UNKNOWN(**{'sizeinbytes': 14}) self.__field_unknown1.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_unknown5=UNKNOWN(**{'sizeinbytes': 1}) self.__field_unknown5.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 35}) self.__field_callback.readfrombuffer(buf) self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) self.__field_recipients.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UNKNOWN): self.__field_unknown2=value else: self.__field_unknown2=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UNKNOWN): self.__field_unknown2=value else: self.__field_unknown2=UNKNOWN(value,**{'sizeinbytes': 6}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UNKNOWN): self.__field_unknown4=value else: self.__field_unknown4=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 2}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_messages(self): try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 7}) return self.__field_messages.getvalue() def __setfield_messages(self, value): if isinstance(value,LIST): self.__field_messages=value else: self.__field_messages=LIST(value,**{'elementclass': msg_record, 'length': 7}) def __delfield_messages(self): del self.__field_messages messages=property(__getfield_messages, __setfield_messages, __delfield_messages, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UNKNOWN): self.__field_unknown1=value else: self.__field_unknown1=UNKNOWN(value,**{'sizeinbytes': 14}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UNKNOWN): self.__field_unknown5=value else: self.__field_unknown5=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 35}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_recipients(self): try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) return self.__field_recipients.getvalue() def __setfield_recipients(self, value): if isinstance(value,LIST): self.__field_recipients=value else: self.__field_recipients=LIST(value,**{'elementclass': recipient_record,'length': 9}) def __delfield_recipients(self): del self.__field_recipients recipients=property(__getfield_recipients, __setfield_recipients, __delfield_recipients, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('locked', self.__field_locked, None) yield ('unknown2', self.__field_unknown2, None) yield ('timesent', self.__field_timesent, None) yield ('unknown2', self.__field_unknown2, None) yield ('subject', self.__field_subject, None) yield ('unknown4', self.__field_unknown4, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('messages', self.__field_messages, None) yield ('unknown1', self.__field_unknown1, None) yield ('priority', self.__field_priority, None) yield ('unknown5', self.__field_unknown5, None) yield ('callback', self.__field_callback, None) yield ('recipients', self.__field_recipients, None) yield ('pad', self.__field_pad, None) class SMSINBOXMSGFRAGMENT(BaseProtogenClass): __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSINBOXMSGFRAGMENT,self).__init__(**dict) if self.__class__ is SMSINBOXMSGFRAGMENT: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSINBOXMSGFRAGMENT,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSINBOXMSGFRAGMENT,kwargs) if len(args): dict2={'elementclass': _gen_p_lgvx7000_252, 'length': 181} dict2.update(kwargs) kwargs=dict2 self.__field_msg=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx7000_252, 'length': 181}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx7000_252, 'length': 181}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lgvx7000_252, 'length': 181}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lgvx7000_252, 'length': 181}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class _gen_p_lgvx7000_252(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx7000_252,self).__init__(**dict) if self.__class__ is _gen_p_lgvx7000_252: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx7000_252,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx7000_252,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class sms_in(BaseProtogenClass): __fields=['unknown1', 'timesent', 'unknown2', 'callback_length', 'callback', 'sender_length', 'sender', 'unknown3', 'lg_time', 'unknown4', 'GPStime', 'unknown5', 'read', 'locked', 'unknown6', 'priority', 'subject', 'bin_header1', 'bin_header2', 'unknown7', 'multipartID', 'bin_header3', 'num_msg_elements', 'msglengths', 'unknown8', 'msgs', 'unknown9'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_in,self).__init__(**dict) if self.__class__ is sms_in: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_in,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_in,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_callback_length.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_sender_length.writetobuffer(buf) try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx7000_262, 'length': 38}) self.__field_sender.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_lg_time.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_bin_header1.writetobuffer(buf) self.__field_bin_header2.writetobuffer(buf) self.__field_unknown7.writetobuffer(buf) self.__field_multipartID.writetobuffer(buf) self.__field_bin_header3.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx7000_280, 'length': 10}) self.__field_msglengths.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.writetobuffer(buf) self.__field_unknown9.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UNKNOWN(**{'sizeinbytes': 10}) self.__field_unknown1.readfrombuffer(buf) self.__field_timesent=SMSDATE(**{'sizeinbytes': 6}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 3}) self.__field_unknown2.readfrombuffer(buf) self.__field_callback_length=UINT(**{'sizeinbytes': 1}) self.__field_callback_length.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 38}) self.__field_callback.readfrombuffer(buf) self.__field_sender_length=UINT(**{'sizeinbytes': 1}) self.__field_sender_length.readfrombuffer(buf) self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx7000_262, 'length': 38}) self.__field_sender.readfrombuffer(buf) self.__field_unknown3=DATA(**{'sizeinbytes': 12}) self.__field_unknown3.readfrombuffer(buf) self.__field_lg_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_lg_time.readfrombuffer(buf) self.__field_unknown4=UNKNOWN(**{'sizeinbytes': 3}) self.__field_unknown4.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 4}) self.__field_unknown5.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 1}) self.__field_read.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 8}) self.__field_unknown6.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_bin_header1=UINT(**{'sizeinbytes': 1}) self.__field_bin_header1.readfrombuffer(buf) self.__field_bin_header2=UINT(**{'sizeinbytes': 1}) self.__field_bin_header2.readfrombuffer(buf) self.__field_unknown7=UINT(**{'sizeinbytes': 4}) self.__field_unknown7.readfrombuffer(buf) self.__field_multipartID=UINT(**{'sizeinbytes': 2}) self.__field_multipartID.readfrombuffer(buf) self.__field_bin_header3=UINT(**{'sizeinbytes': 1}) self.__field_bin_header3.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx7000_280, 'length': 10}) self.__field_msglengths.readfrombuffer(buf) self.__field_unknown8=UNKNOWN(**{'sizeinbytes': 10}) self.__field_unknown8.readfrombuffer(buf) self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.readfrombuffer(buf) self.__field_unknown9=UNKNOWN() self.__field_unknown9.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UNKNOWN): self.__field_unknown1=value else: self.__field_unknown1=UNKNOWN(value,**{'sizeinbytes': 10}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,SMSDATE): self.__field_timesent=value else: self.__field_timesent=SMSDATE(value,**{'sizeinbytes': 6}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_callback_length(self): return self.__field_callback_length.getvalue() def __setfield_callback_length(self, value): if isinstance(value,UINT): self.__field_callback_length=value else: self.__field_callback_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_length(self): del self.__field_callback_length callback_length=property(__getfield_callback_length, __setfield_callback_length, __delfield_callback_length, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 38}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_sender_length(self): return self.__field_sender_length.getvalue() def __setfield_sender_length(self, value): if isinstance(value,UINT): self.__field_sender_length=value else: self.__field_sender_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_sender_length(self): del self.__field_sender_length sender_length=property(__getfield_sender_length, __setfield_sender_length, __delfield_sender_length, None) def __getfield_sender(self): try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lgvx7000_262, 'length': 38}) return self.__field_sender.getvalue() def __setfield_sender(self, value): if isinstance(value,LIST): self.__field_sender=value else: self.__field_sender=LIST(value,**{'elementclass': _gen_p_lgvx7000_262, 'length': 38}) def __delfield_sender(self): del self.__field_sender sender=property(__getfield_sender, __setfield_sender, __delfield_sender, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,DATA): self.__field_unknown3=value else: self.__field_unknown3=DATA(value,**{'sizeinbytes': 12}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_lg_time(self): return self.__field_lg_time.getvalue() def __setfield_lg_time(self, value): if isinstance(value,LGCALDATE): self.__field_lg_time=value else: self.__field_lg_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_lg_time(self): del self.__field_lg_time lg_time=property(__getfield_lg_time, __setfield_lg_time, __delfield_lg_time, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UNKNOWN): self.__field_unknown4=value else: self.__field_unknown4=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 1}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 8}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_bin_header1(self): return self.__field_bin_header1.getvalue() def __setfield_bin_header1(self, value): if isinstance(value,UINT): self.__field_bin_header1=value else: self.__field_bin_header1=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header1(self): del self.__field_bin_header1 bin_header1=property(__getfield_bin_header1, __setfield_bin_header1, __delfield_bin_header1, None) def __getfield_bin_header2(self): return self.__field_bin_header2.getvalue() def __setfield_bin_header2(self, value): if isinstance(value,UINT): self.__field_bin_header2=value else: self.__field_bin_header2=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header2(self): del self.__field_bin_header2 bin_header2=property(__getfield_bin_header2, __setfield_bin_header2, __delfield_bin_header2, None) def __getfield_unknown7(self): return self.__field_unknown7.getvalue() def __setfield_unknown7(self, value): if isinstance(value,UINT): self.__field_unknown7=value else: self.__field_unknown7=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown7(self): del self.__field_unknown7 unknown7=property(__getfield_unknown7, __setfield_unknown7, __delfield_unknown7, None) def __getfield_multipartID(self): return self.__field_multipartID.getvalue() def __setfield_multipartID(self, value): if isinstance(value,UINT): self.__field_multipartID=value else: self.__field_multipartID=UINT(value,**{'sizeinbytes': 2}) def __delfield_multipartID(self): del self.__field_multipartID multipartID=property(__getfield_multipartID, __setfield_multipartID, __delfield_multipartID, None) def __getfield_bin_header3(self): return self.__field_bin_header3.getvalue() def __setfield_bin_header3(self, value): if isinstance(value,UINT): self.__field_bin_header3=value else: self.__field_bin_header3=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header3(self): del self.__field_bin_header3 bin_header3=property(__getfield_bin_header3, __setfield_bin_header3, __delfield_bin_header3, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_msglengths(self): try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lgvx7000_280, 'length': 10}) return self.__field_msglengths.getvalue() def __setfield_msglengths(self, value): if isinstance(value,LIST): self.__field_msglengths=value else: self.__field_msglengths=LIST(value,**{'elementclass': _gen_p_lgvx7000_280, 'length': 10}) def __delfield_msglengths(self): del self.__field_msglengths msglengths=property(__getfield_msglengths, __setfield_msglengths, __delfield_msglengths, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,UNKNOWN): self.__field_unknown8=value else: self.__field_unknown8=UNKNOWN(value,**{'sizeinbytes': 10}) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def __getfield_unknown9(self): return self.__field_unknown9.getvalue() def __setfield_unknown9(self, value): if isinstance(value,UNKNOWN): self.__field_unknown9=value else: self.__field_unknown9=UNKNOWN(value,) def __delfield_unknown9(self): del self.__field_unknown9 unknown9=property(__getfield_unknown9, __setfield_unknown9, __delfield_unknown9, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('timesent', self.__field_timesent, None) yield ('unknown2', self.__field_unknown2, None) yield ('callback_length', self.__field_callback_length, None) yield ('callback', self.__field_callback, None) yield ('sender_length', self.__field_sender_length, None) yield ('sender', self.__field_sender, None) yield ('unknown3', self.__field_unknown3, None) yield ('lg_time', self.__field_lg_time, None) yield ('unknown4', self.__field_unknown4, None) yield ('GPStime', self.__field_GPStime, None) yield ('unknown5', self.__field_unknown5, None) yield ('read', self.__field_read, None) yield ('locked', self.__field_locked, None) yield ('unknown6', self.__field_unknown6, None) yield ('priority', self.__field_priority, None) yield ('subject', self.__field_subject, None) yield ('bin_header1', self.__field_bin_header1, None) yield ('bin_header2', self.__field_bin_header2, None) yield ('unknown7', self.__field_unknown7, None) yield ('multipartID', self.__field_multipartID, None) yield ('bin_header3', self.__field_bin_header3, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('msglengths', self.__field_msglengths, None) yield ('unknown8', self.__field_unknown8, None) yield ('msgs', self.__field_msgs, None) yield ('unknown9', self.__field_unknown9, None) class _gen_p_lgvx7000_262(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx7000_262,self).__init__(**dict) if self.__class__ is _gen_p_lgvx7000_262: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx7000_262,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx7000_262,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of senders phone number") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of senders phone number") class _gen_p_lgvx7000_280(BaseProtogenClass): 'Anonymous inner class' __fields=['msglength'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lgvx7000_280,self).__init__(**dict) if self.__class__ is _gen_p_lgvx7000_280: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lgvx7000_280,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lgvx7000_280,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_msglength=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msglength.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msglength=UINT(**{'sizeinbytes': 1}) self.__field_msglength.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msglength(self): return self.__field_msglength.getvalue() def __setfield_msglength(self, value): if isinstance(value,UINT): self.__field_msglength=value else: self.__field_msglength=UINT(value,**{'sizeinbytes': 1}) def __delfield_msglength(self): del self.__field_msglength msglength=property(__getfield_msglength, __setfield_msglength, __delfield_msglength, "lengths of individual messages in septets") def iscontainer(self): return True def containerelements(self): yield ('msglength', self.__field_msglength, "lengths of individual messages in septets") bitpim-1.0.7+dfsg1/src/phones/p_brew.p0000644001616600161660000003260711020635611015674 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_brew.p 4614 2008-06-02 00:15:05Z sawecw $ %{ """Various descriptions of data used in Brew Protocol""" from prototypes import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb new_fileopen_mode_read=0 new_fileopen_mode_write=0x41 new_fileopen_flag_existing=0 new_fileopen_flag_create=1 import com_brew DEFAULT_PHONE_ENCODING='ascii' PHONE_ENCODING=DEFAULT_PHONE_ENCODING # These parameters only work with BREW2 at the moment. # Note about read block size: # - Largest successful read size: 1KB # - The LG VX-8700 returns 1KB of data if req.bytes >= 1KB. # - If all phones behave in this way it would be safe to change the default read size to 1KB. BREW_READ_SIZE=0xEB # Note about write block size: # - Largest successful write size: 7.9kB # - Too large a write block will cause a timeout error. BREW_WRITE_SIZE=0xEA %} # Note that we don't include the trailing CRC and 7f PACKET requestheader: "The bit in front on all Brew request packets" 1 UINT {'constant': 0x59} +commandmode 1 UINT command PACKET responseheader: "The bit in front on all Brew response packets" 1 UINT {'constant': 0x59} commandmode 1 UINT command 1 UINT errorcode PACKET readfilerequest: * requestheader {'command': 0x04} +header 1 UINT {'constant': 0} +blocknumber * USTRING {'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING } filename PACKET readfileresponse: * responseheader header 1 UINT blockcounter 1 BOOL thereismore "true if there is more data available after this block" 4 UINT filesize 2 UINT datasize * DATA {'sizeinbytes': self.datasize} data PACKET readfileblockrequest: * requestheader {'command': 0x04} +header 1 UINT blockcounter "always greater than zero, increment with each request, loop to 0x01 from 0xff" PACKET readfileblockresponse: * responseheader header 1 UINT blockcounter 1 BOOL thereismore "true if there is more data available after this block" 2 UINT datasize * DATA {'sizeinbytes': self.datasize} data PACKET writefilerequest: * requestheader {'command': 0x05} +header 1 UINT {'value': 0} +blockcounter 1 BOOL {'value': self.filesize>0x100} +*thereismore 1 UINT {'constant': 1} +unknown1 4 UINT filesize 4 UINT {'constant': 0x000100ff} +unknown2 "probably file attributes" * USTRING {'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING } filename 2 UINT {'value': len(self.data)} +*datalen * DATA data PACKET writefileblockrequest: * requestheader {'command': 0x05} +header 1 UINT blockcounter 1 BOOL thereismore 2 UINT {'value': len(self.data)} +*datalen * DATA data PACKET listdirectoriesrequest: "Lists the subdirectories of dirname" * requestheader {'command': 0x02} +header * USTRING {'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING } dirname PACKET listdirectoriesresponse: * responseheader header 2 UINT numentries if self.numentries>0: # Samsung A620 has garbage from this point on if numentries==0 2 UINT datalen * LIST {'length': self.numentries} items: * USTRING { 'encoding': PHONE_ENCODING } subdir PACKET listfilerequest: "This gets one directory entry (files only) at a time" * requestheader {'command': 0x0b} +header 4 UINT entrynumber * USTRING {'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING } dirname PACKET listfileresponse: * responseheader header 4 UINT entrynumber 4 UNKNOWN unknown1 "probably the file attributes" 4 UINT date 4 UINT size 4 UNKNOWN unknown2 * com_brew.SPURIOUSZERO spuriouszero "on some models there is a zero here" 1 UINT dirnamelen "which portion of the filename is the directory, including the last /" * com_brew.EXTRAZERO extrazero "on some models there is a zero here" * USTRING {'terminator': None, 'pascal': True, 'encoding': PHONE_ENCODING } filename PACKET listdirectoryrequest: "This gets one directory entry (directory only) at a time" * requestheader {'command': 0x0a} +header 4 UINT entrynumber * USTRING {'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING } dirname PACKET listdirectoryresponse: * responseheader header 4 UINT entrynumber 17 UNKNOWN unknown1 "probably the directory attributes" * com_brew.EXTRAZERO extrazero "on some models there is a zero here" * USTRING {'terminator': None, 'pascal': True, 'encoding': PHONE_ENCODING } subdir PACKET statfilerequest: "Get the status of the file" * requestheader { 'command': 7 } +header * USTRING {'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING } filename PACKET statfileresponse: * responseheader header 4 UNKNOWN unknown1 "probably the file attributes" 4 UINT date 4 UINT size PACKET mkdirrequest: * requestheader {'command': 0x00} +header * USTRING {'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING } dirname PACKET rmdirrequest: * requestheader {'command': 0x01} +header * USTRING {'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING } dirname PACKET rmfilerequest: * requestheader {'command': 0x06} +header * USTRING {'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING } filename PACKET memoryconfigrequest: * requestheader {'command': 0x0c} +header PACKET memoryconfigresponse: * responseheader header 4 UINT amountofmemory "how much memory the EFS has in bytes" PACKET firmwarerequest: 1 UINT {'constant': 0x00} +command PACKET firmwareresponse: 1 UINT command 11 USTRING {'terminator': None} date1 8 USTRING {'terminator': None} time1 11 USTRING {'terminator': None} date2 8 USTRING {'terminator': None} time2 8 USTRING {'terminator': None} string1 1 UNKNOWN dunno1 11 USTRING {'terminator': None} date3 1 UNKNOWN dunno2 8 USTRING {'terminator': None} time3 11 UNKNOWN dunno3 10 USTRING {'terminator': None} firmware # things differ from this point on depending on the model # 7 UNKNOWN dunno4 # 16 USTRING {'terminator': None} phonemodel # 5 USTRING {'terminator': None} prl PACKET ESN_req: 1 UINT { 'default': 1, 'constant': 1 } +command PACKET ESN_resp: 1 UINT { 'constant': 1 } command 4 UINT esn PACKET testing0crequest: 1 UINT {'constant': 0x0c} +command PACKET testing0cresponse: * UNKNOWN pad PACKET setmoderequest: 1 UINT {'constant': 0x29} +command 1 UINT request "1=offline 2-reset. Reset has no effect unless already offline" 1 UINT {'constant': 0x00} +zero PACKET setmoderesponse: * UNKNOWN pad PACKET setmodemmoderequest: # Tell phone to leave Diagnostic mode back to modem mode where AT # commands work. In qcplink, this was called reboot. Perhaps it reboots # older phones. For at least some Sanyo and Samsung phones, it puts # phone back in modem mode without a reboot. 1 UINT {'constant': 0x44} +command PACKET setfileattrrequest: "Set the attributes of the file" * requestheader { 'command': 8 } +header 4 UINT {'constant': 0x000100ff} +unknown "probably file attributes" 4 UINT date # in GPS time * USTRING {'terminator': 0, 'pascal': True, 'encoding': PHONE_ENCODING } filename PACKET data: * DATA bytes # these "new" commands are for the RealBrewProtocol2 class, they are an # alternative way to talk to newer phones such as the lg vx8100 # all the date/time fields are in unix time, a change from GPS time # that the '59' commands use. The phone also knows what time zone it is # in so the time needs to be localized for displaying PACKET new_requestheader: "The bit in front on all Brew request packets" 2 UINT {'constant': 0x134B} +commandmode 1 UINT command 1 UINT {'constant': 0} +zero PACKET new_responseheader: "The bit in front on all Brew response packets" 2 UINT {'constant': 0x134B} commandmode 1 UINT command 1 UINT zero PACKET new_openfilerequest: * new_requestheader {'command': 0x02} +header 4 UINT mode # 0=read, 0x41=write 4 UINT flags # 0=open_existing, 1=create * USTRING {'terminator': 0, 'encoding': PHONE_ENCODING } filename PACKET new_openfileresponse: * new_responseheader header 4 UINT handle 4 UINT error # matches unix error codes PACKET new_closefilerequest: * new_requestheader {'command': 0x03} +header 4 UINT handle PACKET new_closefileresponse: * new_responseheader header 4 UINT error # matches unix error codes PACKET new_readfilerequest: * new_requestheader {'command': 0x04} +header 4 UINT handle 4 UINT bytes # max 0xEB observed 4 UINT position PACKET new_readfileresponse: * new_responseheader header 4 UINT handle 4 UINT position # position the bytes were read from 4 UINT bytes # less than requested if EOF # there is no EOF flag in the packet 4 UINT error # matches unix error codes * DATA {'sizeinbytes': self.bytes} data PACKET new_writefilerequest: * new_requestheader {'command': 0x05} +header 4 UINT handle 4 UINT position P UINT bytes * DATA {'sizeinbytes': self.bytes} data # max 243 bytes PACKET new_writefileresponse: * new_responseheader header 4 UINT handle 4 UINT position # position the bytes were written to 4 UINT bytes 4 UINT error # matches unix error codes PACKET new_rmfilerequest: """Remove file, full path should be provided, but the root character / is not required at the start of the name. """ * new_requestheader {'command': 0x08} +header * USTRING {'terminator': 0, 'encoding': PHONE_ENCODING } filename 1 UINT {'constant':1} +dunno PACKET new_mkdirrequest: """Make a new directory, full path of the new directory should be provided, but the root character / is not required at the start of the name """ * new_requestheader {'command': 0x09} +header 2 UINT {'constant': 0x01ff} +mode # mode_t type. example 0777 == 0x1ff == rwxrwxrwx * USTRING {'terminator': 0, 'encoding': PHONE_ENCODING } dirname PACKET new_rmdirrequest: """Remove directory, full path should be provided, but the root character / is not required at the start of the name. """ * new_requestheader {'command': 0x0a} +header * USTRING {'terminator': 0, 'encoding': PHONE_ENCODING } dirname PACKET new_opendirectoryrequest: * new_requestheader {'command': 0x0b} +header * USTRING {'terminator': 0, 'encoding': PHONE_ENCODING } dirname PACKET new_opendirectoryresponse: * new_responseheader header 4 UINT handle 4 UINT error # matches unix error codes PACKET new_listentryrequest: * new_requestheader {'command': 0x0c} +header 4 UINT handle 4 UINT entrynumber PACKET new_listentryresponse: * new_responseheader header 4 UINT handle 4 UINT entrynumber 4 UINT pad1 # zeros 4 UINT type # 0=file 1=directory 4 UINT mode 4 UINT size # garbage for directories 8 UINT pad2 # zero 4 UINT date # LG date format, date file created * USTRING {'terminator': 0, 'encoding': PHONE_ENCODING } entryname PACKET new_closedirectoryrequest: * new_requestheader {'command': 0x0d} +header 4 UINT handle PACKET new_closedirectoryresponse: * new_responseheader header 4 UINT error # matches unix error codes PACKET new_statfilerequest: "Get the status of the file" * new_requestheader { 'command': 0x0f } +header * USTRING {'terminator': 0, 'encoding': PHONE_ENCODING } filename PACKET new_statfileresponse: * new_responseheader header 4 UINT error # matches unix error codes 4 UNKNOWN dunno # flags of some sort 4 UINT size # for directories this is the number of entries+2 (maybe '.' and'..' are counted internally) aka. link count (man ls) 4 UINT type # 1=file, 2+=directory (if 2+ this field is number of subdirectories + 2) 4 UINT accessed_date 4 UINT modified_date 4 UINT created_date PACKET new_chmodrequest: * new_requestheader {'command': 0x12} +header 2 UINT +mode # mode_t * USTRING {'terminator': 0, 'encoding': PHONE_ENCODING } +filename PACKET new_chmodresponse: * new_responseheader header 4 UINT error # matches unix error codes PACKET new_reconfigfilesystemrequest: """Called after mkdir/rmdir and writing files, possibly a filesystem status request with space used/free etc. """ * new_requestheader {'command': 0x13} +header 2 UINT {'constant': 0x002f} +dirname # happens to be the same as / which is the root PACKET new_reconfigfilesystemresponse: * new_responseheader header 44 UNKNOWN +unknown # some data in here unsure of meaning %{ # Several responses are nothing mkdirresponse=responseheader rmdirresponse=responseheader rmfileresponse=responseheader writefileresponse=responseheader writefileblockresponse=responseheader setfileattrresponse=responseheader new_mkdirresponse=new_responseheader new_rmdirresponse=new_responseheader new_rmfileresponse=new_responseheader %} bitpim-1.0.7+dfsg1/src/phones/p_lglx5550.py0000644001616600161660000047627710466234100016433 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG LX5550""" from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx4400 except as noted # below from p_lgvx4400 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=499 MAXCALENDARDESCRIPTION=38 NUMEMAILS=3 NUMPHONENUMBERS=5 MEMOLENGTH=65 # Calendar parameters NUMCALENDARENTRIES=300 CAL_REP_NONE=0x10 CAL_REP_DAILY=0x11 CAL_REP_MONFRI=0x12 CAL_REP_WEEKLY=0x13 CAL_REP_MONTHLY=0x14 CAL_REP_YEARLY=0x15 CAL_DOW_SUN=0x0800 CAL_DOW_MON=0x0400 CAL_DOW_TUE=0x0200 CAL_DOW_WED=0x0100 CAL_DOW_THU=0x0080 CAL_DOW_FRI=0x0040 CAL_DOW_SAT=0x0020 CAL_DOW_EXCEPTIONS=0x0010 CAL_REMINDER_NONE=0 CAL_REMINDER_ONTIME=1 CAL_REMINDER_5MIN=2 CAL_REMINDER_10MIN=3 CAL_REMINDER_1HOUR=4 CAL_REMINDER_1DAY=5 CAL_REMINDER_2DAYS=6 CAL_NO_VOICE=0xffff CAL_REPEAT_DATE=(2100, 12, 31) cal_dir='sch' cal_voice_ext='.qcp' # full name='sche000.qcp' cal_data_file_name='sch/schedule.dat' cal_exception_file_name='sch/schexception.dat' cal_voice_id_ofs=0x0f cal_has_voice_id=True PHONE_ENCODING='iso8859_1' class pbgroup(BaseProtogenClass): "A single group" __fields=['icon', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroup,self).__init__(**dict) if self.__class__ is pbgroup: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroup,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroup,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_icon.writetobuffer(buf) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_icon=UINT(**{'sizeinbytes': 1}) self.__field_icon.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_icon(self): return self.__field_icon.getvalue() def __setfield_icon(self, value): if isinstance(value,UINT): self.__field_icon=value else: self.__field_icon=UINT(value,**{'sizeinbytes': 1}) def __delfield_icon(self): del self.__field_icon icon=property(__getfield_icon, __setfield_icon, __delfield_icon, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('icon', self.__field_icon, None) yield ('name', self.__field_name, None) class pbgroups(BaseProtogenClass): "Phonebook groups" __fields=['groups'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroups,self).__init__(**dict) if self.__class__ is pbgroups: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroups,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroups,kwargs) if len(args): dict2={'elementclass': pbgroup} dict2.update(kwargs) kwargs=dict2 self.__field_groups=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_groups(self): try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) return self.__field_groups.getvalue() def __setfield_groups(self, value): if isinstance(value,LIST): self.__field_groups=value else: self.__field_groups=LIST(value,**{'elementclass': pbgroup}) def __delfield_groups(self): del self.__field_groups groups=property(__getfield_groups, __setfield_groups, __delfield_groups, None) def iscontainer(self): return True def containerelements(self): yield ('groups', self.__field_groups, None) class speeddial(BaseProtogenClass): __fields=['entry', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddial,self).__init__(**dict) if self.__class__ is speeddial: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddial,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddial,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.writetobuffer(buf) try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.readfrombuffer(buf) self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,UINT): self.__field_entry=value else: self.__field_entry=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_number(self): try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,UINT): self.__field_number=value else: self.__field_number=UINT(value,**{'sizeinbytes': 1, 'default': 0xff}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('entry', self.__field_entry, None) yield ('number', self.__field_number, None) class speeddials(BaseProtogenClass): __fields=['speeddials'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddials,self).__init__(**dict) if self.__class__ is speeddials: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddials,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddials,kwargs) if len(args): dict2={'length': NUMSPEEDDIALS, 'elementclass': speeddial} dict2.update(kwargs) kwargs=dict2 self.__field_speeddials=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_speeddials(self): try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) return self.__field_speeddials.getvalue() def __setfield_speeddials(self, value): if isinstance(value,LIST): self.__field_speeddials=value else: self.__field_speeddials=LIST(value,**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) def __delfield_speeddials(self): del self.__field_speeddials speeddials=property(__getfield_speeddials, __setfield_speeddials, __delfield_speeddials, None) def iscontainer(self): return True def containerelements(self): yield ('speeddials', self.__field_speeddials, None) class indexentry(BaseProtogenClass): __fields=['index', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_index.writetobuffer(buf) try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 50, 'default': ""}) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_index.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 50, 'default': ""}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 50, 'default': ""}) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 50, 'default': ""}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('name', self.__field_name, None) class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['numactiveitems', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('items', self.__field_items, None) class pbentry(BaseProtogenClass): __fields=['serial1', 'entrysize', 'serial2', 'entrynumber', 'name', 'group', 'emails', 'url', 'ringtone', 'msgringtone', 'secret', 'memo', 'wallpaper', 'numbertypes', 'numbers', 'unknown20c'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_serial1.writetobuffer(buf) try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x0222}) self.__field_entrysize.writetobuffer(buf) self.__field_serial2.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_group.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lglx5550_115, 'length': NUMEMAILS}) self.__field_emails.writetobuffer(buf) self.__field_url.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_msgringtone.writetobuffer(buf) self.__field_secret.writetobuffer(buf) self.__field_memo.writetobuffer(buf) self.__field_wallpaper.writetobuffer(buf) try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lglx5550_123, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lglx5550_125, 'length': NUMPHONENUMBERS}) self.__field_numbers.writetobuffer(buf) try: self.__field_unknown20c except: self.__field_unknown20c=UNKNOWN() self.__field_unknown20c.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x0222}) self.__field_entrysize.readfrombuffer(buf) self.__field_serial2=UINT(**{'sizeinbytes': 4}) self.__field_serial2.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 2}) self.__field_entrynumber.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 2}) self.__field_group.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_lglx5550_115, 'length': NUMEMAILS}) self.__field_emails.readfrombuffer(buf) self.__field_url=USTRING(**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_url.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_msgringtone=UINT(**{'sizeinbytes': 1}) self.__field_msgringtone.readfrombuffer(buf) self.__field_secret=BOOL(**{'sizeinbytes': 1}) self.__field_secret.readfrombuffer(buf) self.__field_memo=USTRING(**{'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) self.__field_memo.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 1}) self.__field_wallpaper.readfrombuffer(buf) self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lglx5550_123, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.readfrombuffer(buf) self.__field_numbers=LIST(**{'elementclass': _gen_p_lglx5550_125, 'length': NUMPHONENUMBERS}) self.__field_numbers.readfrombuffer(buf) self.__field_unknown20c=UNKNOWN() self.__field_unknown20c.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_entrysize(self): try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x0222}) return self.__field_entrysize.getvalue() def __setfield_entrysize(self, value): if isinstance(value,UINT): self.__field_entrysize=value else: self.__field_entrysize=UINT(value,**{'sizeinbytes': 2, 'constant': 0x0222}) def __delfield_entrysize(self): del self.__field_entrysize entrysize=property(__getfield_entrysize, __setfield_entrysize, __delfield_entrysize, None) def __getfield_serial2(self): return self.__field_serial2.getvalue() def __setfield_serial2(self, value): if isinstance(value,UINT): self.__field_serial2=value else: self.__field_serial2=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial2(self): del self.__field_serial2 serial2=property(__getfield_serial2, __setfield_serial2, __delfield_serial2, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 2}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 2}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lglx5550_115, 'length': NUMEMAILS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_lglx5550_115, 'length': NUMEMAILS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, None) def __getfield_url(self): return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,USTRING): self.__field_url=value else: self.__field_url=USTRING(value,**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "ringtone index for a call") def __getfield_msgringtone(self): return self.__field_msgringtone.getvalue() def __setfield_msgringtone(self, value): if isinstance(value,UINT): self.__field_msgringtone=value else: self.__field_msgringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_msgringtone(self): del self.__field_msgringtone msgringtone=property(__getfield_msgringtone, __setfield_msgringtone, __delfield_msgringtone, "ringtone index for a text message") def __getfield_secret(self): return self.__field_secret.getvalue() def __setfield_secret(self, value): if isinstance(value,BOOL): self.__field_secret=value else: self.__field_secret=BOOL(value,**{'sizeinbytes': 1}) def __delfield_secret(self): del self.__field_secret secret=property(__getfield_secret, __setfield_secret, __delfield_secret, None) def __getfield_memo(self): return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,USTRING): self.__field_memo=value else: self.__field_memo=USTRING(value,**{'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 1}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_numbertypes(self): try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lglx5550_123, 'length': NUMPHONENUMBERS}) return self.__field_numbertypes.getvalue() def __setfield_numbertypes(self, value): if isinstance(value,LIST): self.__field_numbertypes=value else: self.__field_numbertypes=LIST(value,**{'elementclass': _gen_p_lglx5550_123, 'length': NUMPHONENUMBERS}) def __delfield_numbertypes(self): del self.__field_numbertypes numbertypes=property(__getfield_numbertypes, __setfield_numbertypes, __delfield_numbertypes, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lglx5550_125, 'length': NUMPHONENUMBERS}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'elementclass': _gen_p_lglx5550_125, 'length': NUMPHONENUMBERS}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_unknown20c(self): try: self.__field_unknown20c except: self.__field_unknown20c=UNKNOWN() return self.__field_unknown20c.getvalue() def __setfield_unknown20c(self, value): if isinstance(value,UNKNOWN): self.__field_unknown20c=value else: self.__field_unknown20c=UNKNOWN(value,) def __delfield_unknown20c(self): del self.__field_unknown20c unknown20c=property(__getfield_unknown20c, __setfield_unknown20c, __delfield_unknown20c, None) def iscontainer(self): return True def containerelements(self): yield ('serial1', self.__field_serial1, None) yield ('entrysize', self.__field_entrysize, None) yield ('serial2', self.__field_serial2, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('name', self.__field_name, None) yield ('group', self.__field_group, None) yield ('emails', self.__field_emails, None) yield ('url', self.__field_url, None) yield ('ringtone', self.__field_ringtone, "ringtone index for a call") yield ('msgringtone', self.__field_msgringtone, "ringtone index for a text message") yield ('secret', self.__field_secret, None) yield ('memo', self.__field_memo, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('numbertypes', self.__field_numbertypes, None) yield ('numbers', self.__field_numbers, None) yield ('unknown20c', self.__field_unknown20c, None) class _gen_p_lglx5550_115(BaseProtogenClass): 'Anonymous inner class' __fields=['email'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglx5550_115,self).__init__(**dict) if self.__class__ is _gen_p_lglx5550_115: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglx5550_115,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglx5550_115,kwargs) if len(args): dict2={'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_email=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_email.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_email=USTRING(**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_email.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def iscontainer(self): return True def containerelements(self): yield ('email', self.__field_email, None) class _gen_p_lglx5550_123(BaseProtogenClass): 'Anonymous inner class' __fields=['numbertype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglx5550_123,self).__init__(**dict) if self.__class__ is _gen_p_lglx5550_123: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglx5550_123,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglx5550_123,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_numbertype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numbertype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numbertype=UINT(**{'sizeinbytes': 1}) self.__field_numbertype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numbertype(self): return self.__field_numbertype.getvalue() def __setfield_numbertype(self, value): if isinstance(value,UINT): self.__field_numbertype=value else: self.__field_numbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_numbertype(self): del self.__field_numbertype numbertype=property(__getfield_numbertype, __setfield_numbertype, __delfield_numbertype, None) def iscontainer(self): return True def containerelements(self): yield ('numbertype', self.__field_numbertype, None) class _gen_p_lglx5550_125(BaseProtogenClass): 'Anonymous inner class' __fields=['number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglx5550_125,self).__init__(**dict) if self.__class__ is _gen_p_lglx5550_125: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglx5550_125,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglx5550_125,kwargs) if len(args): dict2={'sizeinbytes': 49, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_number=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) class pbreadentryresponse(BaseProtogenClass): "Results of reading one entry" __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbreadentryresponse,self).__init__(**dict) if self.__class__ is pbreadentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbreadentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbreadentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbupdateentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbupdateentryrequest,self).__init__(**dict) if self.__class__ is pbupdateentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbupdateentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbupdateentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x04, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbappendentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbappendentryrequest,self).__init__(**dict) if self.__class__ is pbappendentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbappendentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbappendentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x03, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class scheduleexception(BaseProtogenClass): __fields=['pos', 'day', 'month', 'year'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexception,self).__init__(**dict) if self.__class__ is scheduleexception: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexception,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexception,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_day.writetobuffer(buf) self.__field_month.writetobuffer(buf) self.__field_year.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_day=UINT(**{'sizeinbytes': 1}) self.__field_day.readfrombuffer(buf) self.__field_month=UINT(**{'sizeinbytes': 1}) self.__field_month.readfrombuffer(buf) self.__field_year=UINT(**{'sizeinbytes': 2}) self.__field_year.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "Refers to event id (position in schedule file) that this suppresses") def __getfield_day(self): return self.__field_day.getvalue() def __setfield_day(self, value): if isinstance(value,UINT): self.__field_day=value else: self.__field_day=UINT(value,**{'sizeinbytes': 1}) def __delfield_day(self): del self.__field_day day=property(__getfield_day, __setfield_day, __delfield_day, None) def __getfield_month(self): return self.__field_month.getvalue() def __setfield_month(self, value): if isinstance(value,UINT): self.__field_month=value else: self.__field_month=UINT(value,**{'sizeinbytes': 1}) def __delfield_month(self): del self.__field_month month=property(__getfield_month, __setfield_month, __delfield_month, None) def __getfield_year(self): return self.__field_year.getvalue() def __setfield_year(self, value): if isinstance(value,UINT): self.__field_year=value else: self.__field_year=UINT(value,**{'sizeinbytes': 2}) def __delfield_year(self): del self.__field_year year=property(__getfield_year, __setfield_year, __delfield_year, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "Refers to event id (position in schedule file) that this suppresses") yield ('day', self.__field_day, None) yield ('month', self.__field_month, None) yield ('year', self.__field_year, None) class scheduleexceptionfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexceptionfile,self).__init__(**dict) if self.__class__ is scheduleexceptionfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexceptionfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexceptionfile,kwargs) if len(args): dict2={'elementclass': scheduleexception} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': scheduleexception}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class scheduleevent(BaseProtogenClass): __fields=['pos', 'start', 'end', 'repeat', 'daybitmap', 'pad2', 'alarmminutes', 'alarmhours', 'alarmtype', 'snoozedelay', 'ringtone', 'description', 'hasvoice', 'voiceid', 'pad3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleevent,self).__init__(**dict) if self.__class__ is scheduleevent: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleevent,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleevent,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) self.__field_daybitmap.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad2.writetobuffer(buf) self.__field_alarmminutes.writetobuffer(buf) self.__field_alarmhours.writetobuffer(buf) self.__field_alarmtype.writetobuffer(buf) try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_description.writetobuffer(buf) self.__field_hasvoice.writetobuffer(buf) self.__field_voiceid.writetobuffer(buf) try: self.__field_pad3 except: self.__field_pad3=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_pad3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_start=LGCALDATE(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=LGCALDATE(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_repeat=UINT(**{'sizeinbytes': 1}) self.__field_repeat.readfrombuffer(buf) self.__field_daybitmap=UINT(**{'sizeinbytes': 2}) self.__field_daybitmap.readfrombuffer(buf) self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad2.readfrombuffer(buf) self.__field_alarmminutes=UINT(**{'sizeinbytes': 1}) self.__field_alarmminutes.readfrombuffer(buf) self.__field_alarmhours=UINT(**{'sizeinbytes': 1}) self.__field_alarmhours.readfrombuffer(buf) self.__field_alarmtype=UINT(**{'sizeinbytes': 1}) self.__field_alarmtype.readfrombuffer(buf) self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_description=USTRING(**{'sizeinbytes': 37, 'encoding': PHONE_ENCODING, 'raiseontruncate': False, 'raiseonunterminatedread': False }) self.__field_description.readfrombuffer(buf) self.__field_hasvoice=UINT(**{'sizeinbytes': 2}) self.__field_hasvoice.readfrombuffer(buf) self.__field_voiceid=UINT(**{'sizeinbytes': 2}) self.__field_voiceid.readfrombuffer(buf) self.__field_pad3=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_pad3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "position within file, used as an event id") def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,LGCALDATE): self.__field_start=value else: self.__field_start=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,LGCALDATE): self.__field_end=value else: self.__field_end=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,UINT): self.__field_repeat=value else: self.__field_repeat=UINT(value,**{'sizeinbytes': 1}) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_daybitmap(self): return self.__field_daybitmap.getvalue() def __setfield_daybitmap(self, value): if isinstance(value,UINT): self.__field_daybitmap=value else: self.__field_daybitmap=UINT(value,**{'sizeinbytes': 2}) def __delfield_daybitmap(self): del self.__field_daybitmap daybitmap=property(__getfield_daybitmap, __setfield_daybitmap, __delfield_daybitmap, "which days a weekly repeat event happens on") def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UINT): self.__field_pad2=value else: self.__field_pad2=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_alarmminutes(self): return self.__field_alarmminutes.getvalue() def __setfield_alarmminutes(self, value): if isinstance(value,UINT): self.__field_alarmminutes=value else: self.__field_alarmminutes=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmminutes(self): del self.__field_alarmminutes alarmminutes=property(__getfield_alarmminutes, __setfield_alarmminutes, __delfield_alarmminutes, "a value of 100 indicates not set") def __getfield_alarmhours(self): return self.__field_alarmhours.getvalue() def __setfield_alarmhours(self, value): if isinstance(value,UINT): self.__field_alarmhours=value else: self.__field_alarmhours=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmhours(self): del self.__field_alarmhours alarmhours=property(__getfield_alarmhours, __setfield_alarmhours, __delfield_alarmhours, "a value of 100 indicates not set") def __getfield_alarmtype(self): return self.__field_alarmtype.getvalue() def __setfield_alarmtype(self, value): if isinstance(value,UINT): self.__field_alarmtype=value else: self.__field_alarmtype=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmtype(self): del self.__field_alarmtype alarmtype=property(__getfield_alarmtype, __setfield_alarmtype, __delfield_alarmtype, "preset alarm reminder type") def __getfield_snoozedelay(self): try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_snoozedelay.getvalue() def __setfield_snoozedelay(self, value): if isinstance(value,UINT): self.__field_snoozedelay=value else: self.__field_snoozedelay=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_snoozedelay(self): del self.__field_snoozedelay snoozedelay=property(__getfield_snoozedelay, __setfield_snoozedelay, __delfield_snoozedelay, "in minutes, not for this phone") def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_description(self): return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,USTRING): self.__field_description=value else: self.__field_description=USTRING(value,**{'sizeinbytes': 37, 'encoding': PHONE_ENCODING, 'raiseontruncate': False, 'raiseonunterminatedread': False }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def __getfield_hasvoice(self): return self.__field_hasvoice.getvalue() def __setfield_hasvoice(self, value): if isinstance(value,UINT): self.__field_hasvoice=value else: self.__field_hasvoice=UINT(value,**{'sizeinbytes': 2}) def __delfield_hasvoice(self): del self.__field_hasvoice hasvoice=property(__getfield_hasvoice, __setfield_hasvoice, __delfield_hasvoice, None) def __getfield_voiceid(self): return self.__field_voiceid.getvalue() def __setfield_voiceid(self, value): if isinstance(value,UINT): self.__field_voiceid=value else: self.__field_voiceid=UINT(value,**{'sizeinbytes': 2}) def __delfield_voiceid(self): del self.__field_voiceid voiceid=property(__getfield_voiceid, __setfield_voiceid, __delfield_voiceid, None) def __getfield_pad3(self): try: self.__field_pad3 except: self.__field_pad3=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_pad3.getvalue() def __setfield_pad3(self, value): if isinstance(value,UINT): self.__field_pad3=value else: self.__field_pad3=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_pad3(self): del self.__field_pad3 pad3=property(__getfield_pad3, __setfield_pad3, __delfield_pad3, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "position within file, used as an event id") yield ('start', self.__field_start, None) yield ('end', self.__field_end, None) yield ('repeat', self.__field_repeat, None) yield ('daybitmap', self.__field_daybitmap, "which days a weekly repeat event happens on") yield ('pad2', self.__field_pad2, None) yield ('alarmminutes', self.__field_alarmminutes, "a value of 100 indicates not set") yield ('alarmhours', self.__field_alarmhours, "a value of 100 indicates not set") yield ('alarmtype', self.__field_alarmtype, "preset alarm reminder type") yield ('snoozedelay', self.__field_snoozedelay, "in minutes, not for this phone") yield ('ringtone', self.__field_ringtone, None) yield ('description', self.__field_description, None) yield ('hasvoice', self.__field_hasvoice, None) yield ('voiceid', self.__field_voiceid, None) yield ('pad3', self.__field_pad3, None) class schedulefile(BaseProtogenClass): __fields=['numactiveitems', 'events'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(schedulefile,self).__init__(**dict) if self.__class__ is schedulefile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(schedulefile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(schedulefile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{'elementclass': scheduleevent}) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('events', self.__field_events, None) class call(BaseProtogenClass): __fields=['GPStime', 'unknown1', 'duration', 'number', 'name', 'numberlength', 'unknown2', 'pbnumbertype', 'unknown3', 'pbentrynum'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(call,self).__init__(**dict) if self.__class__ is call: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(call,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(call,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_numberlength.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_pbnumbertype.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_pbentrynum.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 4}) self.__field_unknown1.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_numberlength=UINT(**{'sizeinbytes': 1}) self.__field_numberlength.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_pbnumbertype=UINT(**{'sizeinbytes': 1}) self.__field_pbnumbertype.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 2}) self.__field_unknown3.readfrombuffer(buf) self.__field_pbentrynum=UINT(**{'sizeinbytes': 2}) self.__field_pbentrynum.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numberlength(self): return self.__field_numberlength.getvalue() def __setfield_numberlength(self, value): if isinstance(value,UINT): self.__field_numberlength=value else: self.__field_numberlength=UINT(value,**{'sizeinbytes': 1}) def __delfield_numberlength(self): del self.__field_numberlength numberlength=property(__getfield_numberlength, __setfield_numberlength, __delfield_numberlength, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_pbnumbertype(self): return self.__field_pbnumbertype.getvalue() def __setfield_pbnumbertype(self, value): if isinstance(value,UINT): self.__field_pbnumbertype=value else: self.__field_pbnumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_pbnumbertype(self): del self.__field_pbnumbertype pbnumbertype=property(__getfield_pbnumbertype, __setfield_pbnumbertype, __delfield_pbnumbertype, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_pbentrynum(self): return self.__field_pbentrynum.getvalue() def __setfield_pbentrynum(self, value): if isinstance(value,UINT): self.__field_pbentrynum=value else: self.__field_pbentrynum=UINT(value,**{'sizeinbytes': 2}) def __delfield_pbentrynum(self): del self.__field_pbentrynum pbentrynum=property(__getfield_pbentrynum, __setfield_pbentrynum, __delfield_pbentrynum, None) def iscontainer(self): return True def containerelements(self): yield ('GPStime', self.__field_GPStime, None) yield ('unknown1', self.__field_unknown1, None) yield ('duration', self.__field_duration, None) yield ('number', self.__field_number, None) yield ('name', self.__field_name, None) yield ('numberlength', self.__field_numberlength, None) yield ('unknown2', self.__field_unknown2, None) yield ('pbnumbertype', self.__field_pbnumbertype, None) yield ('unknown3', self.__field_unknown3, None) yield ('pbentrynum', self.__field_pbentrynum, None) class callhistory(BaseProtogenClass): __fields=['numcalls', 'unknown1', 'calls'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callhistory,self).__init__(**dict) if self.__class__ is callhistory: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callhistory,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callhistory,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numcalls.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numcalls=UINT(**{'sizeinbytes': 4}) self.__field_numcalls.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numcalls(self): return self.__field_numcalls.getvalue() def __setfield_numcalls(self, value): if isinstance(value,UINT): self.__field_numcalls=value else: self.__field_numcalls=UINT(value,**{'sizeinbytes': 4}) def __delfield_numcalls(self): del self.__field_numcalls numcalls=property(__getfield_numcalls, __setfield_numcalls, __delfield_numcalls, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_calls(self): try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) return self.__field_calls.getvalue() def __setfield_calls(self, value): if isinstance(value,LIST): self.__field_calls=value else: self.__field_calls=LIST(value,**{'elementclass': call}) def __delfield_calls(self): del self.__field_calls calls=property(__getfield_calls, __setfield_calls, __delfield_calls, None) def iscontainer(self): return True def containerelements(self): yield ('numcalls', self.__field_numcalls, None) yield ('unknown1', self.__field_unknown1, None) yield ('calls', self.__field_calls, None) class firmwareresponse(BaseProtogenClass): __fields=['command', 'date1', 'time1', 'date2', 'time2', 'firmware'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(firmwareresponse,self).__init__(**dict) if self.__class__ is firmwareresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(firmwareresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(firmwareresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_date1.writetobuffer(buf) self.__field_time1.writetobuffer(buf) self.__field_date2.writetobuffer(buf) self.__field_time2.writetobuffer(buf) self.__field_firmware.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_date1=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date1.readfrombuffer(buf) self.__field_time1=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time1.readfrombuffer(buf) self.__field_date2=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date2.readfrombuffer(buf) self.__field_time2=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time2.readfrombuffer(buf) self.__field_firmware=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_firmware.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_date1(self): return self.__field_date1.getvalue() def __setfield_date1(self, value): if isinstance(value,USTRING): self.__field_date1=value else: self.__field_date1=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date1(self): del self.__field_date1 date1=property(__getfield_date1, __setfield_date1, __delfield_date1, None) def __getfield_time1(self): return self.__field_time1.getvalue() def __setfield_time1(self, value): if isinstance(value,USTRING): self.__field_time1=value else: self.__field_time1=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time1(self): del self.__field_time1 time1=property(__getfield_time1, __setfield_time1, __delfield_time1, None) def __getfield_date2(self): return self.__field_date2.getvalue() def __setfield_date2(self, value): if isinstance(value,USTRING): self.__field_date2=value else: self.__field_date2=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date2(self): del self.__field_date2 date2=property(__getfield_date2, __setfield_date2, __delfield_date2, None) def __getfield_time2(self): return self.__field_time2.getvalue() def __setfield_time2(self, value): if isinstance(value,USTRING): self.__field_time2=value else: self.__field_time2=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time2(self): del self.__field_time2 time2=property(__getfield_time2, __setfield_time2, __delfield_time2, None) def __getfield_firmware(self): return self.__field_firmware.getvalue() def __setfield_firmware(self, value): if isinstance(value,USTRING): self.__field_firmware=value else: self.__field_firmware=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_firmware(self): del self.__field_firmware firmware=property(__getfield_firmware, __setfield_firmware, __delfield_firmware, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('date1', self.__field_date1, None) yield ('time1', self.__field_time1, None) yield ('date2', self.__field_date2, None) yield ('time2', self.__field_time2, None) yield ('firmware', self.__field_firmware, None) class msg_record(BaseProtogenClass): __fields=['unknown1', 'binary', 'unknown3', 'unknown4', 'unknown6', 'length', 'msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(msg_record,self).__init__(**dict) if self.__class__ is msg_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(msg_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(msg_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_binary.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_length.writetobuffer(buf) try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lglx5550_249, 'length': 219}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_binary=UINT(**{'sizeinbytes': 1}) self.__field_binary.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1}) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 1}) self.__field_unknown4.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 1}) self.__field_unknown6.readfrombuffer(buf) self.__field_length=UINT(**{'sizeinbytes': 1}) self.__field_length.readfrombuffer(buf) self.__field_msg=LIST(**{'elementclass': _gen_p_lglx5550_249, 'length': 219}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_binary(self): return self.__field_binary.getvalue() def __setfield_binary(self, value): if isinstance(value,UINT): self.__field_binary=value else: self.__field_binary=UINT(value,**{'sizeinbytes': 1}) def __delfield_binary(self): del self.__field_binary binary=property(__getfield_binary, __setfield_binary, __delfield_binary, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_length(self): return self.__field_length.getvalue() def __setfield_length(self, value): if isinstance(value,UINT): self.__field_length=value else: self.__field_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_length(self): del self.__field_length length=property(__getfield_length, __setfield_length, __delfield_length, None) def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lglx5550_249, 'length': 219}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lglx5550_249, 'length': 219}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('binary', self.__field_binary, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) yield ('unknown6', self.__field_unknown6, None) yield ('length', self.__field_length, None) yield ('msg', self.__field_msg, None) class _gen_p_lglx5550_249(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglx5550_249,self).__init__(**dict) if self.__class__ is _gen_p_lglx5550_249: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglx5550_249,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglx5550_249,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class recipient_record(BaseProtogenClass): __fields=['unknown', 'number', 'status', 'unknown1', 'timesent', 'timereceived', 'unknown2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(recipient_record,self).__init__(**dict) if self.__class__ is recipient_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(recipient_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(recipient_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_timereceived.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown=DATA(**{'sizeinbytes': 40}) self.__field_unknown.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49}) self.__field_number.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 2}) self.__field_unknown1.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_timereceived=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timereceived.readfrombuffer(buf) self.__field_unknown2=DATA(**{'sizeinbytes': 104}) self.__field_unknown2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,DATA): self.__field_unknown=value else: self.__field_unknown=DATA(value,**{'sizeinbytes': 40}) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_timereceived(self): return self.__field_timereceived.getvalue() def __setfield_timereceived(self, value): if isinstance(value,LGCALDATE): self.__field_timereceived=value else: self.__field_timereceived=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timereceived(self): del self.__field_timereceived timereceived=property(__getfield_timereceived, __setfield_timereceived, __delfield_timereceived, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,DATA): self.__field_unknown2=value else: self.__field_unknown2=DATA(value,**{'sizeinbytes': 104}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def iscontainer(self): return True def containerelements(self): yield ('unknown', self.__field_unknown, None) yield ('number', self.__field_number, None) yield ('status', self.__field_status, None) yield ('unknown1', self.__field_unknown1, None) yield ('timesent', self.__field_timesent, None) yield ('timereceived', self.__field_timereceived, None) yield ('unknown2', self.__field_unknown2, None) class sms_saved(BaseProtogenClass): __fields=['outboxmsg', 'pad', 'outbox', 'inbox'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_saved,self).__init__(**dict) if self.__class__ is sms_saved: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_saved,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_saved,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_outboxmsg.writetobuffer(buf) self.__field_pad.writetobuffer(buf) if self.outboxmsg: self.__field_outbox.writetobuffer(buf) if not self.outboxmsg: self.__field_inbox.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_outboxmsg=UINT(**{'sizeinbytes': 4}) self.__field_outboxmsg.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 4}) self.__field_pad.readfrombuffer(buf) if self.outboxmsg: self.__field_outbox=sms_out() self.__field_outbox.readfrombuffer(buf) if not self.outboxmsg: self.__field_inbox=sms_in() self.__field_inbox.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_outboxmsg(self): return self.__field_outboxmsg.getvalue() def __setfield_outboxmsg(self, value): if isinstance(value,UINT): self.__field_outboxmsg=value else: self.__field_outboxmsg=UINT(value,**{'sizeinbytes': 4}) def __delfield_outboxmsg(self): del self.__field_outboxmsg outboxmsg=property(__getfield_outboxmsg, __setfield_outboxmsg, __delfield_outboxmsg, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 4}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_outbox(self): return self.__field_outbox.getvalue() def __setfield_outbox(self, value): if isinstance(value,sms_out): self.__field_outbox=value else: self.__field_outbox=sms_out(value,) def __delfield_outbox(self): del self.__field_outbox outbox=property(__getfield_outbox, __setfield_outbox, __delfield_outbox, None) def __getfield_inbox(self): return self.__field_inbox.getvalue() def __setfield_inbox(self, value): if isinstance(value,sms_in): self.__field_inbox=value else: self.__field_inbox=sms_in(value,) def __delfield_inbox(self): del self.__field_inbox inbox=property(__getfield_inbox, __setfield_inbox, __delfield_inbox, None) def iscontainer(self): return True def containerelements(self): yield ('outboxmsg', self.__field_outboxmsg, None) yield ('pad', self.__field_pad, None) if self.outboxmsg: yield ('outbox', self.__field_outbox, None) if not self.outboxmsg: yield ('inbox', self.__field_inbox, None) class sms_out(BaseProtogenClass): __fields=['index', 'locked', 'unknown1', 'timesent', 'subject', 'unknown2', 'num_msg_elements', 'messages', 'unknown5', 'priority', 'callback', 'unknown6', 'recipients', 'unknown7'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_out,self).__init__(**dict) if self.__class__ is sms_out: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_out,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_out,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 10}) self.__field_messages.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) self.__field_recipients.writetobuffer(buf) self.__field_unknown7.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 3}) self.__field_unknown1.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_unknown2=DATA(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 10}) self.__field_messages.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 2253}) self.__field_unknown5.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 23}) self.__field_callback.readfrombuffer(buf) self.__field_unknown6=DATA(**{'sizeinbytes': 14}) self.__field_unknown6.readfrombuffer(buf) self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) self.__field_recipients.readfrombuffer(buf) self.__field_unknown7=DATA() self.__field_unknown7.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,DATA): self.__field_unknown2=value else: self.__field_unknown2=DATA(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_messages(self): try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 10}) return self.__field_messages.getvalue() def __setfield_messages(self, value): if isinstance(value,LIST): self.__field_messages=value else: self.__field_messages=LIST(value,**{'elementclass': msg_record, 'length': 10}) def __delfield_messages(self): del self.__field_messages messages=property(__getfield_messages, __setfield_messages, __delfield_messages, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 2253}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 23}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,DATA): self.__field_unknown6=value else: self.__field_unknown6=DATA(value,**{'sizeinbytes': 14}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_recipients(self): try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) return self.__field_recipients.getvalue() def __setfield_recipients(self, value): if isinstance(value,LIST): self.__field_recipients=value else: self.__field_recipients=LIST(value,**{'elementclass': recipient_record,'length': 9}) def __delfield_recipients(self): del self.__field_recipients recipients=property(__getfield_recipients, __setfield_recipients, __delfield_recipients, None) def __getfield_unknown7(self): return self.__field_unknown7.getvalue() def __setfield_unknown7(self, value): if isinstance(value,DATA): self.__field_unknown7=value else: self.__field_unknown7=DATA(value,) def __delfield_unknown7(self): del self.__field_unknown7 unknown7=property(__getfield_unknown7, __setfield_unknown7, __delfield_unknown7, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('locked', self.__field_locked, None) yield ('unknown1', self.__field_unknown1, None) yield ('timesent', self.__field_timesent, None) yield ('subject', self.__field_subject, None) yield ('unknown2', self.__field_unknown2, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('messages', self.__field_messages, None) yield ('unknown5', self.__field_unknown5, None) yield ('priority', self.__field_priority, None) yield ('callback', self.__field_callback, None) yield ('unknown6', self.__field_unknown6, None) yield ('recipients', self.__field_recipients, None) yield ('unknown7', self.__field_unknown7, None) class SMSINBOXMSGFRAGMENT(BaseProtogenClass): __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSINBOXMSGFRAGMENT,self).__init__(**dict) if self.__class__ is SMSINBOXMSGFRAGMENT: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSINBOXMSGFRAGMENT,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSINBOXMSGFRAGMENT,kwargs) if len(args): dict2={'elementclass': _gen_p_lglx5550_286, 'length': 181} dict2.update(kwargs) kwargs=dict2 self.__field_msg=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lglx5550_286, 'length': 181}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=LIST(**{'elementclass': _gen_p_lglx5550_286, 'length': 181}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lglx5550_286, 'length': 181}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lglx5550_286, 'length': 181}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class _gen_p_lglx5550_286(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglx5550_286,self).__init__(**dict) if self.__class__ is _gen_p_lglx5550_286: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglx5550_286,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglx5550_286,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class sms_in(BaseProtogenClass): __fields=['msg_index1', 'msg_index2', 'unknown2', 'unknown3', 'timesent', 'unknown', 'callback_length', 'callback', 'sender_length', 'sender', 'unknown4', 'lg_time', 'GPStime', 'unknown5', 'read', 'locked', 'unknown8', 'priority', 'flags', 'subject', 'bin_header1', 'bin_header2', 'unknown6', 'multipartID', 'bin_header3', 'unknown9', 'num_msg_elements', 'msglengths', 'unknown10', 'msgs', 'unknown5'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_in,self).__init__(**dict) if self.__class__ is sms_in: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_in,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_in,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msg_index1.writetobuffer(buf) self.__field_msg_index2.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self.__field_callback_length.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_sender_length.writetobuffer(buf) try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lglx5550_299, 'length': 38}) self.__field_sender.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_lg_time.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_flags.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_bin_header1.writetobuffer(buf) self.__field_bin_header2.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_multipartID.writetobuffer(buf) self.__field_bin_header3.writetobuffer(buf) self.__field_unknown9.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lglx5550_318, 'length': 10}) self.__field_msglengths.writetobuffer(buf) self.__field_unknown10.writetobuffer(buf) try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg_index1=UINT(**{'sizeinbytes': 4}) self.__field_msg_index1.readfrombuffer(buf) self.__field_msg_index2=UINT(**{'sizeinbytes': 4}) self.__field_msg_index2.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2}) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 4}) self.__field_unknown3.readfrombuffer(buf) self.__field_timesent=SMSDATE(**{'sizeinbytes': 6}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown=UINT(**{'sizeinbytes': 3}) self.__field_unknown.readfrombuffer(buf) self.__field_callback_length=UINT(**{'sizeinbytes': 1}) self.__field_callback_length.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 38}) self.__field_callback.readfrombuffer(buf) self.__field_sender_length=UINT(**{'sizeinbytes': 1}) self.__field_sender_length.readfrombuffer(buf) self.__field_sender=LIST(**{'elementclass': _gen_p_lglx5550_299, 'length': 38}) self.__field_sender.readfrombuffer(buf) self.__field_unknown4=DATA(**{'sizeinbytes': 15}) self.__field_unknown4.readfrombuffer(buf) self.__field_lg_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_lg_time.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 2}) self.__field_unknown5.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 1}) self.__field_read.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown8=UINT(**{'sizeinbytes': 2}) self.__field_unknown8.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_flags=DATA(**{'sizeinbytes': 5}) self.__field_flags.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_bin_header1=UINT(**{'sizeinbytes': 1}) self.__field_bin_header1.readfrombuffer(buf) self.__field_bin_header2=UINT(**{'sizeinbytes': 1}) self.__field_bin_header2.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 2}) self.__field_unknown6.readfrombuffer(buf) self.__field_multipartID=UINT(**{'sizeinbytes': 2}) self.__field_multipartID.readfrombuffer(buf) self.__field_bin_header3=UINT(**{'sizeinbytes': 1}) self.__field_bin_header3.readfrombuffer(buf) self.__field_unknown9=UINT(**{'sizeinbytes': 1}) self.__field_unknown9.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_msglengths=LIST(**{'elementclass': _gen_p_lglx5550_318, 'length': 10}) self.__field_msglengths.readfrombuffer(buf) self.__field_unknown10=UINT(**{'sizeinbytes': 10}) self.__field_unknown10.readfrombuffer(buf) self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.readfrombuffer(buf) self.__field_unknown5=DATA() self.__field_unknown5.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg_index1(self): return self.__field_msg_index1.getvalue() def __setfield_msg_index1(self, value): if isinstance(value,UINT): self.__field_msg_index1=value else: self.__field_msg_index1=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index1(self): del self.__field_msg_index1 msg_index1=property(__getfield_msg_index1, __setfield_msg_index1, __delfield_msg_index1, None) def __getfield_msg_index2(self): return self.__field_msg_index2.getvalue() def __setfield_msg_index2(self, value): if isinstance(value,UINT): self.__field_msg_index2=value else: self.__field_msg_index2=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index2(self): del self.__field_msg_index2 msg_index2=property(__getfield_msg_index2, __setfield_msg_index2, __delfield_msg_index2, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,SMSDATE): self.__field_timesent=value else: self.__field_timesent=SMSDATE(value,**{'sizeinbytes': 6}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UINT): self.__field_unknown=value else: self.__field_unknown=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def __getfield_callback_length(self): return self.__field_callback_length.getvalue() def __setfield_callback_length(self, value): if isinstance(value,UINT): self.__field_callback_length=value else: self.__field_callback_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_length(self): del self.__field_callback_length callback_length=property(__getfield_callback_length, __setfield_callback_length, __delfield_callback_length, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 38}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_sender_length(self): return self.__field_sender_length.getvalue() def __setfield_sender_length(self, value): if isinstance(value,UINT): self.__field_sender_length=value else: self.__field_sender_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_sender_length(self): del self.__field_sender_length sender_length=property(__getfield_sender_length, __setfield_sender_length, __delfield_sender_length, None) def __getfield_sender(self): try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lglx5550_299, 'length': 38}) return self.__field_sender.getvalue() def __setfield_sender(self, value): if isinstance(value,LIST): self.__field_sender=value else: self.__field_sender=LIST(value,**{'elementclass': _gen_p_lglx5550_299, 'length': 38}) def __delfield_sender(self): del self.__field_sender sender=property(__getfield_sender, __setfield_sender, __delfield_sender, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,DATA): self.__field_unknown4=value else: self.__field_unknown4=DATA(value,**{'sizeinbytes': 15}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_lg_time(self): return self.__field_lg_time.getvalue() def __setfield_lg_time(self, value): if isinstance(value,LGCALDATE): self.__field_lg_time=value else: self.__field_lg_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_lg_time(self): del self.__field_lg_time lg_time=property(__getfield_lg_time, __setfield_lg_time, __delfield_lg_time, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 1}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,UINT): self.__field_unknown8=value else: self.__field_unknown8=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_flags(self): return self.__field_flags.getvalue() def __setfield_flags(self, value): if isinstance(value,DATA): self.__field_flags=value else: self.__field_flags=DATA(value,**{'sizeinbytes': 5}) def __delfield_flags(self): del self.__field_flags flags=property(__getfield_flags, __setfield_flags, __delfield_flags, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_bin_header1(self): return self.__field_bin_header1.getvalue() def __setfield_bin_header1(self, value): if isinstance(value,UINT): self.__field_bin_header1=value else: self.__field_bin_header1=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header1(self): del self.__field_bin_header1 bin_header1=property(__getfield_bin_header1, __setfield_bin_header1, __delfield_bin_header1, None) def __getfield_bin_header2(self): return self.__field_bin_header2.getvalue() def __setfield_bin_header2(self, value): if isinstance(value,UINT): self.__field_bin_header2=value else: self.__field_bin_header2=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header2(self): del self.__field_bin_header2 bin_header2=property(__getfield_bin_header2, __setfield_bin_header2, __delfield_bin_header2, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_multipartID(self): return self.__field_multipartID.getvalue() def __setfield_multipartID(self, value): if isinstance(value,UINT): self.__field_multipartID=value else: self.__field_multipartID=UINT(value,**{'sizeinbytes': 2}) def __delfield_multipartID(self): del self.__field_multipartID multipartID=property(__getfield_multipartID, __setfield_multipartID, __delfield_multipartID, None) def __getfield_bin_header3(self): return self.__field_bin_header3.getvalue() def __setfield_bin_header3(self, value): if isinstance(value,UINT): self.__field_bin_header3=value else: self.__field_bin_header3=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header3(self): del self.__field_bin_header3 bin_header3=property(__getfield_bin_header3, __setfield_bin_header3, __delfield_bin_header3, None) def __getfield_unknown9(self): return self.__field_unknown9.getvalue() def __setfield_unknown9(self, value): if isinstance(value,UINT): self.__field_unknown9=value else: self.__field_unknown9=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown9(self): del self.__field_unknown9 unknown9=property(__getfield_unknown9, __setfield_unknown9, __delfield_unknown9, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_msglengths(self): try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lglx5550_318, 'length': 10}) return self.__field_msglengths.getvalue() def __setfield_msglengths(self, value): if isinstance(value,LIST): self.__field_msglengths=value else: self.__field_msglengths=LIST(value,**{'elementclass': _gen_p_lglx5550_318, 'length': 10}) def __delfield_msglengths(self): del self.__field_msglengths msglengths=property(__getfield_msglengths, __setfield_msglengths, __delfield_msglengths, None) def __getfield_unknown10(self): return self.__field_unknown10.getvalue() def __setfield_unknown10(self, value): if isinstance(value,UINT): self.__field_unknown10=value else: self.__field_unknown10=UINT(value,**{'sizeinbytes': 10}) def __delfield_unknown10(self): del self.__field_unknown10 unknown10=property(__getfield_unknown10, __setfield_unknown10, __delfield_unknown10, None) def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,DATA): self.__field_unknown5=value else: self.__field_unknown5=DATA(value,) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def iscontainer(self): return True def containerelements(self): yield ('msg_index1', self.__field_msg_index1, None) yield ('msg_index2', self.__field_msg_index2, None) yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) yield ('timesent', self.__field_timesent, None) yield ('unknown', self.__field_unknown, None) yield ('callback_length', self.__field_callback_length, None) yield ('callback', self.__field_callback, None) yield ('sender_length', self.__field_sender_length, None) yield ('sender', self.__field_sender, None) yield ('unknown4', self.__field_unknown4, None) yield ('lg_time', self.__field_lg_time, None) yield ('GPStime', self.__field_GPStime, None) yield ('unknown5', self.__field_unknown5, None) yield ('read', self.__field_read, None) yield ('locked', self.__field_locked, None) yield ('unknown8', self.__field_unknown8, None) yield ('priority', self.__field_priority, None) yield ('flags', self.__field_flags, None) yield ('subject', self.__field_subject, None) yield ('bin_header1', self.__field_bin_header1, None) yield ('bin_header2', self.__field_bin_header2, None) yield ('unknown6', self.__field_unknown6, None) yield ('multipartID', self.__field_multipartID, None) yield ('bin_header3', self.__field_bin_header3, None) yield ('unknown9', self.__field_unknown9, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('msglengths', self.__field_msglengths, None) yield ('unknown10', self.__field_unknown10, None) yield ('msgs', self.__field_msgs, None) yield ('unknown5', self.__field_unknown5, None) class _gen_p_lglx5550_299(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglx5550_299,self).__init__(**dict) if self.__class__ is _gen_p_lglx5550_299: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglx5550_299,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglx5550_299,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of senders phone number") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of senders phone number") class _gen_p_lglx5550_318(BaseProtogenClass): 'Anonymous inner class' __fields=['msglength'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglx5550_318,self).__init__(**dict) if self.__class__ is _gen_p_lglx5550_318: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglx5550_318,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglx5550_318,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_msglength=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msglength.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msglength=UINT(**{'sizeinbytes': 1}) self.__field_msglength.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msglength(self): return self.__field_msglength.getvalue() def __setfield_msglength(self, value): if isinstance(value,UINT): self.__field_msglength=value else: self.__field_msglength=UINT(value,**{'sizeinbytes': 1}) def __delfield_msglength(self): del self.__field_msglength msglength=property(__getfield_msglength, __setfield_msglength, __delfield_msglength, "lengths of individual messages in septets") def iscontainer(self): return True def containerelements(self): yield ('msglength', self.__field_msglength, "lengths of individual messages in septets") class sms_quick_text(BaseProtogenClass): __fields=['msgs'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_quick_text,self).__init__(**dict) if self.__class__ is sms_quick_text: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_quick_text,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_quick_text,kwargs) if len(args): dict2={'elementclass': _gen_p_lglx5550_333, } dict2.update(kwargs) kwargs=dict2 self.__field_msgs=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lglx5550_333, }) self.__field_msgs.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msgs=LIST(**{'elementclass': _gen_p_lglx5550_333, }) self.__field_msgs.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lglx5550_333, }) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'elementclass': _gen_p_lglx5550_333, }) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def iscontainer(self): return True def containerelements(self): yield ('msgs', self.__field_msgs, None) class _gen_p_lglx5550_333(BaseProtogenClass): 'Anonymous inner class' __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglx5550_333,self).__init__(**dict) if self.__class__ is _gen_p_lglx5550_333: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglx5550_333,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglx5550_333,kwargs) if len(args): dict2={'encoding': PHONE_ENCODING} dict2.update(kwargs) kwargs=dict2 self.__field_msg=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=USTRING(**{'encoding': PHONE_ENCODING}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{'encoding': PHONE_ENCODING}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) bitpim-1.0.7+dfsg1/src/phones/p_motov3m_sprint.p0000644001616600161660000000521411054420301017725 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_motov3m.p 4537 2007-12-30 03:32:13Z djpham $ %{ """Various descriptions of data specific to Motorola V3m phones""" from prototypes import * from prototypes_moto import * from p_etsi import * from p_moto import * from p_motov710 import * from p_motov3m import * import fnmatch # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMBER_TYPE_WORK=0 NUMBER_TYPE_HOME=1 NUMBER_TYPE_MAIN=2 NUMBER_TYPE_MOBILE=3 NUMBER_TYPE_FAX=4 NUMBER_TYPE_PAGER=5 NUMBER_TYPE_EMAIL=6 NUMBER_TYPE_MAILING_LIST=7 NUMBER_TYPE_MOBILE2=8 NUMBER_TYPE_EMAIL2=9 NUMBER_TYPE_WWW=11 NUMBER_TYPE_MEMO=11 NUMBER_TYPE=frozenset([NUMBER_TYPE_WORK, NUMBER_TYPE_HOME, NUMBER_TYPE_MAIN, NUMBER_TYPE_MOBILE, NUMBER_TYPE_FAX, NUMBER_TYPE_PAGER]) EMAIL_TYPE=frozenset([NUMBER_TYPE_EMAIL]) WWW_TYPE=frozenset([NUMBER_TYPE_WWW]) MEMO_TYPE=frozenset([NUMBER_TYPE_MEMO]) NUMBER_TYPE_NAME={ NUMBER_TYPE_WORK: 'office', NUMBER_TYPE_HOME: 'home', NUMBER_TYPE_MAIN: 'main', NUMBER_TYPE_MOBILE: 'cell', NUMBER_TYPE_FAX: 'fax', NUMBER_TYPE_PAGER: 'pager', } NUMBER_TYPE_CODE={ 'office': NUMBER_TYPE_WORK, 'home': NUMBER_TYPE_HOME, 'main': NUMBER_TYPE_MAIN, 'cell': NUMBER_TYPE_MOBILE, 'fax': NUMBER_TYPE_FAX, 'pager': NUMBER_TYPE_PAGER } PB_TOTAL_GROUP=14 PB_GROUP_RANGE=xrange(1, PB_TOTAL_GROUP+1) PB_GROUP_NAME_LEN=24 PB_MAX_NUMBER_LEN=32 PB_MAX_NAME_LEN=24 PB_MAX_EMAIL_LEN=48 PB_FIRST_ENTRY=2 PB_TOTAL_ENTRIES=1430 # Slot 1 is voice mail PB_RANGE=xrange(PB_FIRST_ENTRY,PB_TOTAL_ENTRIES+1) %} # Should fix _save_groups in com_motov710.py to query to get the group count PACKET read_group_req: * CSVSTRING { 'quotechar': None, 'terminator': None, 'default': '+MPGR=' } +command * CSVINT { 'default': 1 } +start_index * CSVINT { 'terminator': None, 'default': PB_TOTAL_GROUP } +end_index PACKET calendar_req_resp: * CSVSTRING { 'quotechar': None, 'terminator': ord(' '), 'default': '+MDBR:' } command * CSVINT index if self.command=='+MDBR:': * CSVSTRING title * CSVINT alarm_timed * CSVINT alarm_enabled * CAL_TIME start_time * CAL_DATE start_date * CSVINT duration * CAL_TIME alarm_time * CAL_DATE alarm_date * CSVINT repeat_type if self.command=='+MDBRE:': * CSVINT ex_event * CSVINT { 'terminator': None } ex_event_flag bitpim-1.0.7+dfsg1/src/phones/p_lgvx10000.py0000644001616600161660000000026411042423044016460 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG VX10000""" from p_lgvx8800 import * # same as VX-8800 bitpim-1.0.7+dfsg1/src/phones/p_lgvi5225.p0000644001616600161660000000630010442561507016214 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Stephen A. Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lgvi5225.p 3352 2006-06-10 15:20:39Z skyjunky $ %{ """Various descriptions of data specific to LG VI5225""" from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx4400 except as noted # below from p_lgvx4400 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=500 MAXCALENDARDESCRIPTION=38 NUMEMAILS=1 NUMPHONENUMBERS=5 MEMOLENGTH=48 pb_file_name='pim/pbentry.dat' # Calendar parameters NUMCALENDARENTRIES=300 CAL_REP_NONE=0x10 CAL_REP_DAILY=0x11 CAL_REP_MONFRI=0x12 CAL_REP_WEEKLY=0x13 CAL_REP_MONTHLY=0x14 CAL_REP_YEARLY=0x15 CAL_DOW_SUN=0x0800 CAL_DOW_MON=0x0400 CAL_DOW_TUE=0x0200 CAL_DOW_WED=0x0100 CAL_DOW_THU=0x0080 CAL_DOW_FRI=0x0040 CAL_DOW_SAT=0x0020 CAL_DOW_EXCEPTIONS=0x0010 CAL_REMINDER_NONE=0 CAL_REMINDER_ONTIME=1 CAL_REMINDER_5MIN=2 CAL_REMINDER_10MIN=3 CAL_REMINDER_1HOUR=4 CAL_REMINDER_1DAY=5 CAL_REMINDER_2DAYS=6 CAL_REPEAT_DATE=(2100, 12, 31) cal_dir='sch' cal_data_file_name='sch/schedule.dat' cal_exception_file_name='sch/schexception.dat' cal_has_voice_id=False %} PACKET ffpacket: 1 UINT {'constant': 0xff} +header 1 UINT command 1 UINT dunno1 1 UINT dunno2 4 UKNOWN pad 1 UINT dunno3 1 UINT dunno4 # Looks same as 4400 PACKET speeddial: 1 UINT {'default': 0xff} +entry 1 UINT {'default': 0xff} +number PACKET speeddials: * LIST {'length': NUMSPEEDDIALS, 'elementclass': speeddial} +speeddials PACKET pbreadentryresponse: "Results of reading one entry" * pbheader header * pbentry entry PACKET pbupdateentryrequest: * pbheader {'command': 0x04, 'flag': 0x01} +header * pbentry entry PACKET pbappendentryrequest: * pbheader {'command': 0x03, 'flag': 0x01} +header * pbentry entry # All STRINGS have raiseonterminatedread as False since the phone does # occassionally leave out the terminator byte # Note if you change the length of any of these fields, you also # need to modify com_lgvx4400 to give a different truncateat parameter # in the convertphonebooktophone method PACKET pbentry: P UINT {'constant': NOWALLPAPER} wallpaper 4 UINT serial1 2 UINT {'constant': 0x01E0} +entrysize 4 UINT serial2 2 UINT entrynumber 23 USTRING {'raiseonunterminatedread': False} name 2 UINT group * LIST {'length': NUMEMAILS} +emails: 73 USTRING {'raiseonunterminatedread': False} email 73 USTRING {'raiseonunterminatedread': False} url 1 UINT ringtone "ringtone index for a call" 1 UINT secret * USTRING {'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH} memo 1 UINT {'default': 0} +dunno1 2 UINT {'default': 0} +dunno2 * LIST {'length': NUMPHONENUMBERS} +numbertypes: 1 UINT numbertype * LIST {'length': NUMPHONENUMBERS} +numbers: 49 USTRING {'raiseonunterminatedread': False} number bitpim-1.0.7+dfsg1/src/phones/com_sanyo8100.py0000644001616600161660000000473610355654405017125 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_sanyo8100.py 2717 2006-01-01 04:22:29Z sawecw $ """Talk to the Sanyo SCP-8100 cell phone""" # my modules import common import p_sanyo8100 import com_sanyomedia import com_sanyo import com_brew import com_phone import prototypes import os class Phone(com_sanyomedia.SanyoMedia,com_sanyo.Phone): "Talk to the Sanyo SCP-8100 cell phone" desc="SCP-8100" FIRST_MEDIA_DIRECTORY=1 LAST_MEDIA_DIRECTORY=3 protocolclass=p_sanyo8100 serialsname='scp8100' builtinringtones=( 'None', 'Vibrate', 'Ringer & Voice', '', '', '', '', '', '', 'Tone 1', 'Tone 2', 'Tone 3', 'Tone 4', 'Tone 5', 'Tone 6', 'Tone 7', 'Tone 8', '', '', '', '', '', '', '', '', '', '', '', '', 'Tschaik.Swanlake', 'Satie Gymnop.#1', 'Bach Air on the G', 'Beethoven Sym.5', 'Greensleeves', 'Johnny Comes..', 'Foster Ky. Home', 'Asian Jingle', 'Disco' ) calendar_defaultringtone=4 calendar_defaultcaringtone=4 calendar_tonerange=xrange(18,26) calendar_toneoffset=8 def __init__(self, logtarget, commport): com_sanyo.Phone.__init__(self, logtarget, commport) com_sanyomedia.SanyoMedia.__init__(self) self.mode=self.MODENONE class Profile(com_sanyo.Profile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='SANYO' phone_model='SCP-8100/US' # GMR: 1.115SP ,10019 WALLPAPER_WIDTH=132 WALLPAPER_HEIGHT=144 OVERSIZE_PERCENTAGE=100 _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), ('ringtone', 'write', 'MERGE'), ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), ) def __init__(self): com_sanyo.Profile.__init__(self) bitpim-1.0.7+dfsg1/src/phones/__init__.py0000644001616600161660000007360511317561344016363 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### Copyright (C) 2006 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: __init__.py 4771 2010-01-02 06:08:36Z djpham $ import helpids # phone carriers c_vzw='Verizon Wireless' c_cingular='Cingular' c_att='AT&T' c_telus='Telus Mobility' c_alltel='Alltel' c_bell='Bell Mobility' c_sprint='Sprint' c_pelephone='Pelephone' c_sti='STI Mobile' c_other='Other' if __debug__: c_tmobileusa='T-Mobile USA' # phone brands b_lg='LG' b_samsung='Samsung' b_sanyo='Sanyo' b_sk='SK' b_toshiba='Toshiba' b_other='Other' b_audiovox='Audiovox' b_moto='Motorola' _phonedata= { 'LG-AX8600': { 'module': 'com_lgax8600', 'carrier': [c_alltel], 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGAX8600, }, 'LG-G4015': { 'module': 'com_lgg4015', 'carrier': [c_att], 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGG4015, }, 'LG-C2000': { 'module': 'com_lgc2000', 'carrier': [c_cingular], 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGC2000, }, 'LG-LX570 (Muziq)': { 'module': 'com_lglx570', 'carrier': [c_sprint], 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGLX570, }, 'LG-UX5000': { 'module': 'com_lgux5000', 'brand': b_lg, 'carrier': [c_vzw], 'helpid': helpids.ID_PHONE_LGUX5000, }, 'LG-VX3200': { 'module': 'com_lgvx3200', 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGVX3200, }, 'LG-VX4400': { 'module': 'com_lgvx4400', 'brand': b_lg, 'carrier': [c_vzw], 'helpid': helpids.ID_PHONE_LGVX4400, }, 'LG-VX4500': { 'module': 'com_lgvx4500', 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGVX4500, }, 'LG-VX4600': { 'module': 'com_lgvx4600', 'carrier': [c_telus], 'brand': b_lg, 'helpid': None, }, 'LG-VX4650': { 'module': 'com_lgvx4650', 'carrier': [c_vzw], 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGVX4650, }, 'LG-VX5200': { 'module': 'com_lgvx5200', 'carrier': [c_vzw], 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGVX5200, }, 'LG-VX5300': { 'module': 'com_lgvx5300', 'carrier': [c_vzw], 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGVX5300, }, 'LG-VX5400': { 'module': 'com_lgvx5400', 'carrier': [c_vzw], 'brand': b_lg, 'helpid': None, }, 'LG-LX5450': { 'module': 'com_lglx5450', 'carrier': [c_alltel], 'brand': b_lg, 'helpid': None, }, 'LG-VX5500': { 'module': 'com_lgvx5500', 'carrier': [c_vzw], 'brand': b_lg, 'helpid': None, }, 'LG-LX5550': { 'module': 'com_lglx5550', 'carrier': [c_alltel], 'brand': b_lg, 'helpid': None, }, 'LG-VX6000': { 'module': 'com_lgvx6000', 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGVX6000, }, 'LG-VX6100': { 'module': 'com_lgvx6100', 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGVX6100, }, 'LG-LG6190': { 'module': 'com_lglg6190', 'carrier': [c_bell], 'brand': b_lg, 'helpid': None, }, 'LG-LG6200': { 'module': 'com_lglg6200', 'carrier': [c_bell], 'brand': b_lg, 'helpid': None, }, 'LG-VX7000': { 'module': 'com_lgvx7000', 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGVX7000, }, 'LG-VX8000': { 'module': 'com_lgvx8000', 'carrier': [c_vzw], 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGVX8000, }, 'LG-LG8100': { 'module': 'com_lglg8100', 'carrier': [c_telus], 'brand': b_lg, 'helpid': None, }, 'LG-VX8100': { 'module': 'com_lgvx8100', 'carrier': [c_vzw], 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGVX8100, }, 'LG-VX8300': { 'module': 'com_lgvx8300', 'carrier': [c_vzw], 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGVX8300, }, 'LG-VX8350': { 'module': 'com_lgvx8350', 'carrier': [c_vzw], 'brand': b_lg, 'helpid': None, }, 'LG-VX8500 (Chocolate)': { 'module': 'com_lgvx8500', 'carrier': [c_vzw], 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGVX8500, }, 'LG-VX8550 (Chocolate 2)': { 'module': 'com_lgvx8550', 'carrier': [c_vzw], 'brand': b_lg, 'helpid': None, }, 'LG-VX8560 (Chocolate 3)': { 'module': 'com_lgvx8560', 'carrier': [c_vzw], 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGVX8560, }, 'LG-VX8600': { 'module': 'com_lgvx8600', 'carrier': [c_vzw], 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGVX8600, }, 'LG-VX8610 (Decoy)': { 'module': 'com_lgvx8610', 'carrier': [c_vzw], 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGVX8610, }, 'LG-VX8700': { 'module': 'com_lgvx8700', 'carrier': [c_vzw], 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGVX8700, }, 'LG-VX8800 (Venus)': { 'module': 'com_lgvx8800', 'carrier': [c_vzw], 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGVX8800, }, 'LG-VX9400': { 'module': 'com_lgvx9400', 'carrier': [c_vzw], 'brand': b_lg, 'helpid': None, }, 'LG-VX9600 (Versa)': { 'module': 'com_lgvx9600', 'carrier': [c_vzw], 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGVX9600, }, 'LG-VX9700 (Dare)': { 'module': 'com_lgvx9700', 'carrier': [c_vzw], 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGVX9700, }, 'LG-VX9800': { 'module': 'com_lgvx9800', 'carrier': [c_vzw], 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGVX9800, }, 'LG-VX9900 (enV)': { 'module': 'com_lgvx9900', 'carrier': [c_vzw], 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGVX9900, }, 'LG-VX9100 (enV 2)': { 'module': 'com_lgvx9100', 'carrier': [c_vzw], 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGVX9100, }, 'LG-VX9200 (enV 3)': { 'module': 'com_lgvx9200', 'carrier': [c_vzw], 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGVX9200, }, 'LG-CX9200 (Keybo 2)': { 'module': 'com_lgcx9200', 'carrier': [c_telus], 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGVX9200, }, 'LG-VX10000 (Voyager)': { 'module': 'com_lgvx10000', 'carrier': [c_vzw], 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGVX10000, }, 'LG-VX11000 (enV Touch)': { 'module': 'com_lgvx11000', 'carrier': [c_vzw], 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGVX11000, }, 'LG-VI125': { 'module': 'com_lgvi125', 'carrier': [c_sprint], 'brand': b_lg, 'helpid': None, }, 'LG-PM225': { 'module': 'com_lgpm225', 'carrier': [c_sprint], 'brand': b_lg, 'helpid': helpids.ID_PHONE_LGPM225, }, 'LG-PM325': { 'module': 'com_lgpm325', 'carrier': [c_sprint], 'brand': b_lg, 'helpid': None, }, 'LG-TM520': { 'module': 'com_lgtm520', 'brand': b_lg, 'helpid': None, }, 'LG-VX10': { 'module': 'com_lgtm520', 'brand': b_lg, 'helpid': None, }, 'MM-5600': { 'module': 'com_sanyo5600', 'carrier': [c_sprint], 'brand': b_sanyo, 'helpid': helpids.ID_PHONE_SANYOOTHERS, }, 'SCP-6600 (Katana)': { 'module': 'com_sanyo6600', 'carrier': [c_sprint], 'brand': b_sanyo, 'helpid': helpids.ID_PHONE_SANYOSCP6600, }, 'SCP-6650 (Katana-II)': { 'module': 'com_sanyo6650', 'carrier': [c_sprint], 'brand': b_sanyo, 'helpid': helpids.ID_PHONE_SANYOSCP6600, }, 'MM-7400': { 'module': 'com_sanyo7400', 'carrier': [c_sprint], 'brand': b_sanyo, 'helpid': helpids.ID_PHONE_SANYOOTHERS, }, 'MM-7500': { 'module': 'com_sanyo7500', 'carrier': [c_sprint], 'brand': b_sanyo, 'helpid': helpids.ID_PHONE_SANYOOTHERS, }, 'MM-8300': { 'module': 'com_sanyo8300', 'carrier': [c_sprint], 'brand': b_sanyo, 'helpid': helpids.ID_PHONE_SANYOOTHERS, }, 'SCP-8400': { 'module': 'com_sanyo8400', 'carrier': [c_sprint], 'brand': b_sanyo, 'helpid': helpids.ID_PHONE_SANYOOTHERS, }, 'PM-8200': { 'module': 'com_sanyo8200', 'carrier': [c_sprint], 'brand': b_sanyo, 'helpid': helpids.ID_PHONE_SANYOOTHERS, }, 'RL-4920': { 'module': 'com_sanyo4920', 'carrier': [c_sprint], 'brand': b_sanyo, 'helpid': helpids.ID_PHONE_SANYOOTHERS, }, 'RL-4930': { 'module': 'com_sanyo4930', 'carrier': [c_sprint], 'brand': b_sanyo, 'helpid': helpids.ID_PHONE_SANYOOTHERS, }, 'SCP-200': { 'module': 'com_sanyo200', 'carrier': [c_sprint], 'brand': b_sanyo, 'helpid': helpids.ID_PHONE_SANYOOTHERS, }, 'SCP-2400': { 'module': 'com_sanyo2400', 'carrier': [c_sprint], 'brand': b_sanyo, 'helpid': helpids.ID_PHONE_SANYOOTHERS, }, 'SCP-3100': { 'module': 'com_sanyo3100', 'carrier': [c_sprint], 'brand': b_sanyo, 'helpid': helpids.ID_PHONE_SANYOOTHERS, }, 'SCP-3200': { 'module': 'com_sanyo3200', 'carrier': [c_sprint], 'brand': b_sanyo, 'helpid': helpids.ID_PHONE_SANYOOTHERS, }, 'SCP-4900': { 'module': 'com_sanyo4900', 'carrier': [c_sprint], 'brand': b_sanyo, 'helpid': helpids.ID_PHONE_SANYOOTHERS, }, 'SCP-5300': { 'module': 'com_sanyo5300', 'carrier': [c_sprint], 'brand': b_sanyo, 'helpid': helpids.ID_PHONE_SANYOOTHERS, }, 'SCP-5400': { 'module': 'com_sanyo5400', 'carrier': [c_sprint], 'brand': b_sanyo, 'helpid': helpids.ID_PHONE_SANYOOTHERS, }, 'SCP-5500': { 'module': 'com_sanyo5500', 'carrier': [c_sprint], 'brand': b_sanyo, 'helpid': helpids.ID_PHONE_SANYOOTHERS, }, 'SCP-7050': { 'module': 'com_sanyo7050', 'carrier': [c_sprint], 'brand': b_sanyo, 'helpid': helpids.ID_PHONE_SANYOOTHERS, }, 'SCP-7200': { 'module': 'com_sanyo7200', 'carrier': [c_sprint], 'brand': b_sanyo, 'helpid': helpids.ID_PHONE_SANYOOTHERS, }, 'SCP-7300': { 'module': 'com_sanyo7300', 'carrier': [c_sprint], 'brand': b_sanyo, 'helpid': helpids.ID_PHONE_SANYOOTHERS, }, 'SCP-8100': { 'module': 'com_sanyo8100', 'carrier': [c_sprint], 'brand': b_sanyo, 'helpid': helpids.ID_PHONE_SANYOOTHERS, }, 'SCP-8100 (Bell)': { 'module': 'com_sanyo8100_bell', 'carrier': [c_bell], 'brand': b_sanyo, 'helpid': helpids.ID_PHONE_SANYOOTHERS, }, 'SCH-A310': { 'module': 'com_samsungscha310', 'carrier': [c_vzw], 'brand': b_samsung, 'helpid': None, }, 'SPH-A460': { 'module': 'com_samsungspha460', 'brand': b_samsung, 'helpid': helpids.ID_PHONE_SAMSUNGOTHERS, }, 'SPH-A620 (VGA1000)': { 'module': 'com_samsungspha620', 'carrier': [c_sprint], 'brand': b_samsung, 'helpid': helpids.ID_PHONE_SAMSUNGOTHERS, }, 'SPH-A660 (VI660)': { 'module': 'com_samsungspha660', 'carrier': [c_sprint], 'brand': b_samsung, 'helpid': helpids.ID_PHONE_SAMSUNGOTHERS, }, 'SPH-A680': { 'module': 'com_samsungspha680', 'carrier': [c_sprint], 'brand': b_samsung, 'helpid': helpids.ID_PHONE_SAMSUNGOTHERS, }, 'SPH-A740': { 'module': 'com_samsungspha740', 'carrier': [c_sprint], 'brand': b_samsung, 'helpid': helpids.ID_PHONE_SAMSUNGOTHERS, }, 'SPH-A840': { 'module': 'com_samsungspha840', 'carrier': [c_sprint], 'brand': b_samsung, 'helpid': helpids.ID_PHONE_SAMSUNGOTHERS, }, 'SPH-A840 (Telus)': { 'module': 'com_samsungspha840_telus', 'brand': b_samsung, 'carrier': [c_telus], 'helpid': helpids.ID_PHONE_SAMSUNGOTHERS, }, 'SPH-A900': { 'module': 'com_samsungspha900', 'carrier': [c_sprint], 'brand': b_samsung, 'helpid': helpids.ID_PHONE_SAMSUNGOTHERS, }, 'SPH-M300PIM': { 'module': 'com_samsungsphm300pim', 'carrier': [c_sprint], 'brand': b_samsung, 'helpid': helpids.ID_PHONE_SAMSUNGSPHM300, }, 'SPH-M300MEDIA': { 'module': 'com_samsungsphm300media', 'carrier': [c_sprint], 'brand': b_samsung, 'helpid': helpids.ID_PHONE_SAMSUNGSPHM300, }, 'SPH-N200': { 'module': 'com_samsungsphn200', 'carrier': [c_sprint], 'brand': b_samsung, 'helpid': helpids.ID_PHONE_SAMSUNGOTHERS, }, 'SPH-N400': { 'module': 'com_samsungsphn400', 'carrier': [c_sprint], 'brand': b_samsung, 'helpid': helpids.ID_PHONE_SAMSUNGOTHERS, }, 'SCH-A650': { 'module': 'com_samsungscha650', 'brand': b_samsung, 'carrier': [c_vzw], 'helpid': None, }, 'SCH-A670': { 'module': 'com_samsungscha670', 'brand': b_samsung, 'carrier': [c_vzw], 'helpid': None, }, 'SCH-A870': { 'module': 'com_samsungscha870', 'brand': b_samsung, 'carrier': [c_vzw], 'helpid': helpids.ID_PHONE_SAMSUNGSCHA870, }, 'SCH-A950': { 'module': 'com_samsungscha950', 'brand': b_samsung, 'carrier': [c_vzw], 'helpid': helpids.ID_PHONE_SAMSUNGSCHA950, }, 'SCH-A930': { 'module': 'com_samsungscha930', 'brand': b_samsung, 'carrier': [c_vzw], 'helpid': helpids.ID_PHONE_SAMSUNGSCHA930, }, 'SCH-U470': { 'module': 'com_samsungschu470', 'brand': b_samsung, 'carrier': [c_vzw], 'helpid': helpids.ID_PHONE_SAMSUNGSCHU470, }, 'SCH-U740': { 'module': 'com_samsungschu740', 'brand': b_samsung, 'carrier': [c_vzw], 'helpid': helpids.ID_PHONE_SAMSUNGSCHU740, }, 'SCH-U750 (Alias 2)': { 'module': 'com_samsungschu750', 'brand': b_samsung, 'carrier': [c_vzw], 'helpid': helpids.ID_PHONE_SAMSUNGSCHU750, }, 'SK6100' : { 'module': 'com_sk6100', 'brand': b_sk, 'carrier': [c_pelephone], 'helpid': None, }, 'VM4050' : { 'module': 'com_toshibavm4050', 'brand': b_toshiba, 'carrier': [c_sprint], 'helpid': helpids.ID_PHONE_TOSHIBAVM4050, }, 'VI-2300': { 'module': 'com_sanyo2300', 'carrier': [c_sprint], 'brand': b_sanyo, 'helpid': helpids.ID_PHONE_SANYOOTHERS, }, 'V3m (Sprint)': { 'module': 'com_motov3m_sprint', 'brand': b_moto, 'carrier': [c_sprint], 'helpid': helpids.ID_PHONE_MOTOV3M, }, 'LG-VI5225': { 'module': 'com_lgvi5225', 'carrier': [c_sti], 'brand': b_lg, 'helpid': None, }, 'V710': { 'module': 'com_motov710', 'brand': b_moto, 'carrier': [c_vzw], 'helpid': helpids.ID_PHONE_MOTOV710, }, 'V710m': { 'module': 'com_motov710m', 'brand': b_moto, 'carrier': [c_vzw], 'helpid': helpids.ID_PHONE_MOTOV710M, }, 'V3c': { 'module': 'com_motov3c', 'brand': b_moto, 'carrier': [c_vzw], 'helpid': helpids.ID_PHONE_MOTOV3C, }, 'V3cm': { 'module': 'com_motov3cm', 'brand': b_moto, 'carrier': [c_vzw], 'helpid': helpids.ID_PHONE_MOTOV3CM, }, 'V3m': { 'module': 'com_motov3m', 'brand': b_moto, 'carrier': [c_vzw], 'helpid': helpids.ID_PHONE_MOTOV3M, }, 'V3mM': { 'module': 'com_motov3mm', 'brand': b_moto, 'carrier': [c_vzw], 'helpid': helpids.ID_PHONE_MOTOV3MM, }, 'V325': { 'module': 'com_motov325', 'brand': b_moto, 'carrier': [c_vzw], 'helpid': helpids.ID_PHONE_MOTOV325, }, 'V325M': { 'module': 'com_motov325m', 'brand': b_moto, 'carrier': [c_vzw], 'helpid': helpids.ID_PHONE_MOTOV325M, }, 'E815': { 'module': 'com_motoe815', 'brand': b_moto, 'carrier': [c_vzw], 'helpid': helpids.ID_PHONE_MOTOE815, }, 'E815m': { 'module': 'com_motoe815m', 'brand': b_moto, 'carrier': [c_vzw], 'helpid': helpids.ID_PHONE_MOTOE815M, }, 'K1m': { 'module': 'com_motok1m', 'brand': b_moto, 'carrier': [c_vzw], 'helpid': helpids.ID_PHONE_MOTOK1M, }, 'Other CDMA phone': { 'module': 'com_othercdma', 'carrier': [c_other], 'brand': b_other, 'helpid': None, }, } if __debug__: _phonedata.update( {'Audiovox CDM-8900': { 'module': 'com_audiovoxcdm8900', # phone is too fragile for normal use 'brand': b_audiovox, 'helpid': None, }, 'SPH-A790': { 'module': 'com_samsungspha790', 'brand': b_samsung, 'carrier': [c_sprint], 'helpid': None, }, 'RAZR V3t': { 'module': 'com_motov3t', 'brand': b_moto, 'carrier': [c_tmobileusa], 'helpid': None, }, 'SPH-A640': { 'module': 'com_samsungspha640', 'carrier': [c_sprint], 'brand': b_samsung, 'helpid': helpids.ID_PHONE_SAMSUNGOTHERS, }, 'LG-LX260 (Rumor)': { 'module': 'com_lglx260', 'carrier': [c_sprint], 'brand': b_lg, 'helpid': None, }, }) # update the module path for k, e in _phonedata.items(): _phonedata[k]['module']=__name__+'.'+e['module'] phonemodels=_phonedata.keys() phonemodels.sort() def module(phone): return _phonedata[phone].get('module', None) def carriers(phone): return _phonedata[phone].get('carrier', [c_other]) def manufacturer(phone): return _phonedata[phone].get('brand', b_other) def helpid(phone): return _phonedata[phone].get('helpid', None) _tmp1={} _tmp2={} for x in phonemodels: for y in carriers(x): _tmp1[y]=True _tmp2[manufacturer(x)]=True phonecarriers=_tmp1.keys() phonecarriers.sort() phonemanufacturers=_tmp2.keys() phonemanufacturers.sort() del _tmp1, _tmp2 def phoneslist(brand=None, carrier_name=None): return [x for x in phonemodels if (brand is None or manufacturer(x)==brand) \ and (carrier_name is None or carrier_name in carriers(x))] def carrier2phones(carrier_name): # return the list of phone belongs to this carrier return [x for x in phonemodels if carrier_name in carriers(x)] def manufacturer2phones(brand_name): # return a list of phone belongs to this brand return [x for x in phonemodels if manufacturer(x)==brand_name] def getallmodulenames(): return [_phonedata[k]['module'] for k in _phonedata] bitpim-1.0.7+dfsg1/src/phones/com_lgvx8300.py0000644001616600161660000002026410665137320016744 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Simon Capper ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### """Communicate with the LG VX8300 cell phone The code in this file mainly inherits from VX8100 code and then extends where the 8300 has different functionality """ # standard modules import time import cStringIO import sha # my modules import common import commport import copy import com_lgvx4400 import p_brew import p_lgvx8300 import com_lgvx8100 import com_brew import com_phone import com_lg import prototypes import bpcalendar import call_history import sms import memo import fileinfo import helpids class Phone(com_lg.LGUncountedIndexedMedia, com_lgvx8100.Phone): "Talk to the LG VX8300 cell phone" desc="LG-VX8300" helpid=helpids.ID_PHONE_LGVX8300 protocolclass=p_lgvx8300 serialsname='lgvx8300' external_storage_root='mmc1/' builtinringtones= ('Low Beep Once', 'Low Beeps', 'Loud Beep Once', 'Loud Beeps', 'VZW Default Ringtone') + \ tuple(['Ringtone '+`n` for n in range(1,11)]) + \ ('No Ring',) ringtonelocations= ( # type index file default dir external dir max type Index ( 'ringers', 'dload/myringtone.dat','brew/16452/lk/mr','mmc1/ringers', 100, 0x01, None), ( 'sounds', 'dload/mysound.dat', 'brew/16452/ms', '', 100, 0x02, None), ( 'mp3', 'dload/my_mp3.dat', 'mmc1/my_mp3', '', 100, 0x15, None), #( 'music', 'dload/sd_music.dat', 'mmc1/my_music', '', 100, 0x14, None), # .wma files ) calendarlocation="sch/schedule.dat" calendarexceptionlocation="sch/schexception.dat" calenderrequiresreboot=1 memolocation="sch/memo.dat" builtinwallpapers = () # none wallpaperlocations= ( # type index file default dir external dir max type Index ( 'images', 'dload/image.dat', 'brew/16452/mp', '', 100, 0x00, None), ( 'images(sd)', 'dload/sd_image.dat', 'mmc1/my_pix', '', 100, 0x10, None), ( 'video', 'dload/video.dat', 'brew/16452/mf', '', 100, 0x03, None), ( 'video(sd)', 'dload/sd_video.dat', 'mmc1/my_flix', '', 100, 0x13, None), ) def __init__(self, logtarget, commport): com_lgvx8100.Phone.__init__(self, logtarget, commport) p_brew.PHONE_ENCODING=self.protocolclass.PHONE_ENCODING self.mode=self.MODENONE def get_esn(self, data=None): # return the ESN of this phone return self.get_brew_esn() def setDMversion(self): _fw_version=self.get_firmware_version()[-1] # T83VZV04 uses DMv5 self._DMv5=self.my_model=='VX8300' and _fw_version>'3' if self._DMv5: # assume that it takes about 30 seconds for T83VZV04 to kick out of DM self._timeout = 30 def get_detect_data(self, res): com_lgvx8100.Phone.get_detect_data(self, res) res[self.esn_file_key]=self.get_esn() my_model='VX8300' # Fundamentals: # - get_esn - Brew # - getgroups - same as LG VX-8100 # - getwallpaperindices - LGUncountedIndexedMedia # - getringtoneindices - LGUncountedIndexedMedia # - DM Version - 4 to access brew/16452/lk/mr on newer firmwares parentprofile=com_lgvx8100.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='VX8300' WALLPAPER_WIDTH=275 WALLPAPER_HEIGHT=175 MAX_WALLPAPER_BASENAME_LENGTH=32 WALLPAPER_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_() ." WALLPAPER_CONVERT_FORMAT="jpg" # the 8300 uses "W" for wait in the dialstring, it does not support "T" DIALSTRING_CHARS="[^0-9PW#*]" MAX_RINGTONE_BASENAME_LENGTH=32 RINGTONE_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_() ." imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images(sd)")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video(sd)")) def GetImageOrigins(self): return self.imageorigins ringtoneorigins=('ringers', 'sounds', 'mp3') excluded_ringtone_origins=('sounds', 'mp3') # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 176, 'height': 184, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", {'width': 96, 'height': 81, 'format': "JPEG"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets def QueryAudio(self, origin, currentextension, afi): # we don't modify any of these if afi.format in ("MIDI", "QCP", "PMD", "WMA"): return currentextension, afi # examine mp3 if afi.format=="MP3": if afi.channels==1 and 8<=afi.bitrate<=64 and 16000<=afi.samplerate<=22050: return currentextension, afi # convert it return ("mp3", fileinfo.AudioFileInfo(afi, **{'format': 'MP3', 'channels': 1, 'bitrate': 32, 'samplerate': 22050})) def __init__(self): parentprofile.__init__(self) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading ('memo', 'read', None), # all memo list reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('sms', 'write', 'OVERWRITE'), # all SMS list writing ('memo', 'write', 'OVERWRITE'), # all memo list writing ) field_color_data={ 'phonebook': { 'name': { 'first': 1, 'middle': 1, 'last': 1, 'full': 1, 'nickname': 0, 'details': 1 }, 'number': { 'type': 5, 'speeddial': 5, 'number': 5, 'details': 5 }, 'email': 2, 'address': { 'type': 0, 'company': 0, 'street': 0, 'street2': 0, 'city': 0, 'state': 0, 'postalcode': 0, 'country': 0, 'details': 0 }, 'url': 0, 'memo': 0, 'category': 1, 'wallpaper': 0, 'ringtone': 2, 'storage': 0, }, 'calendar': { 'description': True, 'location': False, 'allday': False, 'start': True, 'end': True, 'priority': False, 'alarm': True, 'vibrate': True, 'repeat': True, 'memo': False, 'category': False, 'wallpaper': False, 'ringtone': True, }, 'memo': { 'subject': True, 'date': True, 'secret': False, 'category': False, 'memo': True, }, 'todo': { 'summary': False, 'status': False, 'due_date': False, 'percent_complete': False, 'completion_date': False, 'private': False, 'priority': False, 'category': False, 'memo': False, }, } bitpim-1.0.7+dfsg1/src/phones/com_sanyo8200.py0000644001616600161660000000407610476444526017130 0ustar amuamu### BITPIM ### ### Copyright (C) 2004-2006 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_sanyo8200.py 3565 2006-09-03 03:17:42Z sawecw $ """Talk to the Sanyo SCP-8200 cell phone""" # my modules import common import p_sanyo8200 import com_brew import com_phone import com_sanyo import com_sanyomedia import com_sanyonewer import prototypes numbertypetab=( 'cell', 'home', 'office', 'pager', 'fax', 'data', 'none' ) class Phone(com_sanyonewer.Phone): "Talk to the Sanyo PM8200 cell phone" desc="PM8200" FIRST_MEDIA_DIRECTORY=1 LAST_MEDIA_DIRECTORY=3 imagelocations=( # offset, directory #, indexflag, type, maximumentries ) protocolclass=p_sanyo8200 serialsname='pm8200' builtinringtones=( 'None', 'Vibrate', '', '', '', '', '', '', '', 'Tone 1', 'Tone 2', 'Tone 3', 'Tone 4', 'Tone 5', 'Tone 6', 'Tone 7', 'Tone 8', '', '', '', '', '', '', '', '', '', '', '', '', 'Tschaik.Swanlake', 'Satie Gymnop.#1', 'Hungarian Dance', 'Beethoven Sym.5', 'Greensleeves', 'Foster Ky. Home', 'The Moment', 'Asian Jingle', 'Disco','','','','','','','','','','','','','','','','','', 'Voice Alarm') def __init__(self, logtarget, commport): com_sanyonewer.Phone.__init__(self, logtarget, commport) self.mode=self.MODENONE self.numbertypetab=numbertypetab class Profile(com_sanyonewer.Profile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='SANYO' phone_model='SCP-8200/US' # GMR: 1.115SP ,10019 WALLPAPER_WIDTH=132 WALLPAPER_HEIGHT=160 def __init__(self): com_sanyonewer.Profile.__init__(self) self.numbertypetab=numbertypetab # NOTE: Calendar alarm 35 is Foster Ky. Home. bitpim-1.0.7+dfsg1/src/phones/com_lgvx8350.py0000644001616600161660000000723310723413030016740 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2007 Nathan Hjelm ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgvx8350.py 4471 2007-11-29 01:30:00Z djpham $ """ Communicate with the LG VX8350 cell phone. """ # BitPim modules import common import com_brew import prototypes import com_lgvx8550 import p_lgvx8350 import helpids #------------------------------------------------------------------------------- parentphone=com_lgvx8550.Phone class Phone(parentphone): desc="LG-VX8350" helpid=None protocolclass=p_lgvx8350 serialsname='lgvx8350' my_model='VX8350' def setDMversion(self): self._DMv5 = True self._timeout = 10 # Fundamentals: # - get_esn - same as LG VX-8300 # - getgroups - same as LG VX-8700 # - getwallpaperindices - LGUncountedIndexedMedia # - getringtoneindices - LGUncountedIndexedMedia # - DM Version - 5 #------------------------------------------------------------------------------- parentprofile=com_lgvx8550.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='VX8350' # inside screen resoluation WALLPAPER_WIDTH=176 WALLPAPER_HEIGHT=220 imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images(sd)")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video(sd)")) # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "fullscreen", {'width': 176, 'height': 220, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 176, 'height': 184, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", {'width': 96, 'height': 81, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 120, 'height': 100, 'format': "JPEG"})) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading ('memo', 'read', None), # all memo list reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('sms', 'write', 'OVERWRITE'), # all SMS list writing ('memo', 'write', 'OVERWRITE'), # all memo list writing ('t9_udb', 'write', 'OVERWRITE'), ) if __debug__: _supportedsyncs+=( ('t9_udb', 'read', 'OVERWRITE'), ) bitpim-1.0.7+dfsg1/src/phones/com_lgax8600.py0000644001616600161660000006251010754727641016734 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### by David Ritter 7/10/07 ### Write to phonebook working msg ringtones not supported ### Write to Calendar, wallpaper, and ringtones is working ### ### $Id: com_lgax8600.py 4595 2008-02-14 03:04:01Z djpham $ """ Communicate with the LG AX8600 cell phone """ # standard modules import re import time import cStringIO import sha import datetime # BitPim modules import common import commport import fileinfo import guihelper import os import copy import com_lgvx4400 import p_brew import p_lgax8600 import com_lgvx8100 import com_brew import com_phone import com_lg import prototypes import bpcalendar import call_history import sms import memo import playlist import helpids #------------------------------------------------------------------------------- #Went back to vx8100 to inherit to avoid LGUncountedIndexedMedia parentphone=com_lgvx8100.Phone class Phone(parentphone): "Talk to LG AX-8600 cell phone" desc="LG-AX8600" helpid=helpids.ID_PHONE_LGAX8600 protocolclass=p_lgax8600 serialsname='lgax8600' external_storage_root='mmc1/' my_model='AX8600' #Media locations for reading FROM the phone builtinringtones= () ringtonelocations= ( # type index-file size-file directory-to-use lowest-index-to-use maximum-entries type-major icon index_offset ( 'sounds', 'dload/lg_mysound.dat', 'dload/lg_mysoundsize.dat', 'brew/media/lk/ms', 150, 100, 0x402, 0, 0), # ( 'sounds(sd)', 'dload/sd_sound.dat', 'mmc1/lg_media/other_sounds', '', 100, 0x02, None), ) calendarlocation="sch/schedule.dat" calendarexceptionlocation="sch/schexception.dat" calenderrequiresreboot=1 memolocation="sch/memo.dat" builtinwallpapers = () wallpaperlocations= ( # type index-file size-file directory-to-use lowest-index-to-use maximum-entries type-major icon index_offset ( 'images', 'dload/lg_image.dat', 'dload/lg_imagesize.dat', 'brew/media/lk/mp', 150 , 100, 0x400, 0, 0), # ( 'images(sd)', 'dload/sd_image.dat', 'mmc1/lg_media/other_image', '', 100, 0x10, None), # ( 'video', 'dload/lg_video.dat', 'brew/media/lk/mf', '', 100, 0x10, None), # ( 'video(sd)', 'dload/sd_video.dat', 'mmc1/lg_media/other_video', '', 100, 0x13, None), ) # _rs_path=() # for removable media (miniSD cards) _rs_path='mmc1/' _rs_ringers_path=_rs_path+'lg_media/other_sounds' _rs_images_path=_rs_path+'lg_media/other_image' #Media locations for writing TO the phone media_info={ 'sounds': { 'localpath': 'brew/media/lk/ms', 'rspath': None, 'vtype': protocolclass.MEDIA_TYPE_SOUND, 'icon': protocolclass.MEDIA_IMAGE_DEFAULT_ICON, 'index': 150, 'maxsize': 100, 'indexfile': 'dload/lg_mysound.dat', 'sizefile': 'dload/lg_mysoundsize.dat', 'dunno': 0, 'date': False, 'dunno1': 0 }, 'images': { 'localpath': 'brew/media/lk/mp', 'rspath': None, 'vtype': protocolclass.MEDIA_TYPE_IMAGE, 'icon': protocolclass.MEDIA_IMAGE_DEFAULT_ICON, 'index': 150, 'maxsize': 100, 'indexfile': 'dload/lg_image.dat', 'sizefile': 'dload/lg_imagesize.dat', 'dunno': 0, 'date': False, 'dunno1': 0 }, # 'video': { # 'localpath': 'brew/16452/mf', # 'rspath': None, # 'vtype': protocolclass.MEDIA_TYPE_VIDEO, # 'icon': protocolclass.MEDIA_VIDEO_DEFAULT_ICON, # 'index': 1000, # 'maxsize': 155, # 'indexfile': 'dload/video.dat', # 'sizefile': 'dload/videosize.dat', # 'dunno': 0, 'date': True }, } def __init__(self, logtarget, commport): parentphone.__init__(self, logtarget, commport) p_brew.PHONE_ENCODING=self.protocolclass.PHONE_ENCODING self.mode=self.MODENONE def setDMversion(self): self._DMv5=True self._timeout = 30 def get_esn(self, data=None): # return the ESN of this phone return self.get_brew_esn() def get_detect_data(self, res): com_lgvx8100.Phone.get_detect_data(self, res) res[self.esn_file_key]=self.get_esn() #------------------------------------------------------ # must be included for difference between alltel and verizon def getcallhistory(self, result): res={} # read the incoming call history file # the telus lg8100 programmers were on something when they wrote their code. if hasattr(self.protocolclass, 'this_takes_the_prize_for_the_most_brain_dead_call_history_file_naming_ive_seen'): self._readhistoryfile("pim/missed_log.dat", 'Incoming', res) self._readhistoryfile("pim/outgoing_log.dat", 'Missed', res) self._readhistoryfile("pim/incoming_log.dat", 'Outgoing', res) else: self._readhistoryfile("pim/missed_log.dat", 'Missed', res) self._readhistoryfile("pim/outgoing_log.dat", 'Outgoing', res) self._readhistoryfile("pim/incoming_log.dat", 'Incoming', res) self._readhistoryfile("pim/data_log.data", 'Data', res) result['call_history']=res return result # Don't need this if there're no changes ## def _readhistoryfile(self, fname, folder, res): ## try: ## buf=prototypes.buffer(self.getfilecontents(fname)) ## ch=self.protocolclass.callhistory() ## ch.readfrombuffer(buf, logtitle="Call History") ## for call_idx in range(ch.numcalls): ## call=ch.calls[call_idx] ## if call.number=='' and call.name=='': ## continue ## entry=call_history.CallHistoryEntry() ## entry.folder=folder ## if call.duration: ## entry.duration=call.duration ## entry.datetime=((call.GPStime)) ## if call.number=='': # restricted calls have no number ## entry.number=call.name ## else: ## entry.number=call.number ## if call.name: ## entry.name=call.name ## res[entry.id]=entry ## except (com_brew.BrewNoSuchFileException, ## IndexError): ## pass # do nothing if file doesn't exist or is corrupted ## return def getcalendar(self,result): res={} # Read exceptions file first try: buf=prototypes.buffer(self.getfilecontents(self.calendarexceptionlocation)) ex=self.protocolclass.scheduleexceptionfile() ex.readfrombuffer(buf, logtitle="Calendar exceptions") exceptions={} for i in ex.items: try: exceptions[i.pos].append( (i.year,i.month,i.day) ) except KeyError: exceptions[i.pos]=[ (i.year,i.month,i.day) ] except com_brew.BrewNoSuchFileException: exceptions={} # Now read schedule try: buf=prototypes.buffer(self.getfilecontents(self.calendarlocation)) if len(buf.getdata())<3: # file is empty, and hence same as non-existent raise com_brew.BrewNoSuchFileException() sc=self.protocolclass.schedulefile() sc.readfrombuffer(buf, logtitle="Calendar") for event in sc.events: # the vx8100 has a bad entry when the calender is empty # stop processing the calender when we hit this record if event.pos==0: #invalid entry continue entry=bpcalendar.CalendarEntry() entry.desc_loc=event.description try: # delete events are still in the calender file but have garbage dates entry.start=event.start if self.protocolclass.CALENDAR_HAS_SEPARATE_END_TIME_AND_DATE: if event.repeat[0] == 0: # MIC: If non-repeating event entry.end = event.end_time # MIC: Set entry.end to full end_time else: _,_,_,hour,minute=event.end_time year,month,day,_,_=event.end_date entry.end=(year,month,day,hour,minute) else: entry.end=event.end except ValueError: continue if event.alarmindex_vibrate&0x1: entry.vibrate=0 # vibarate bit is inverted in phone 0=on, 1=off else: entry.vibrate=1 entry.repeat = self.makerepeat(event.repeat) min=event.alarmminutes hour=event.alarmhours if min==0x64 or hour==0x64: entry.alarm=None # no alarm set else: entry.alarm=hour*60+min if self.protocolclass.CALENDAR_HAS_SEPARATE_END_TIME_AND_DATE: # MIC Unlike previous phones, the VX8300 passes the ringtone # via both the index, and a path. If the index is set to 100 # (0x64), then the ringtone information will be found in the # "ringpath", the last 256 bytes of the calendar packet. If # the index is between 0 and 15, inclusive, then it is using # one of the builtin ringers, and the ringpath is set to # null. try: if (event.ringtone == 100): # MIC Ringer is downloaded to phone or microSD entry.ringtone = common.basename(event.ringpath) else: # MIC Ringer is built-in entry.ringtone=self.builtinringtones[event.ringtone] except: # hack, not having a phone makes it hard to figure out the best approach if entry.alarm==None: entry.ringtone='No Ring' else: entry.ringtone='Loud Beeps' else: #hack for alltel if entry.alarm==None: entry.ringtone='No Ring' else: entry.ringtone='Loud Beeps' # entry.ringtone=result['ringtone-index'][event.ringtone]['name'] ## This doesn't work on alltel entry.snoozedelay=0 # check for exceptions and remove them if event.repeat[3] and exceptions.has_key(event.pos): for year, month, day in exceptions[event.pos]: entry.suppress_repeat_entry(year, month, day) res[entry.id]=entry assert sc.numactiveitems==len(res) except com_brew.BrewNoSuchFileException: pass # do nothing if file doesn't exist result['calendar']=res return result def _build_pb_info(self, fundamentals): # build a dict of info to update pbentry pbook=fundamentals.get('phonebook', {}) wallpaper_index=fundamentals.get('wallpaper-index', {}) ringtone_index=fundamentals.get('ringtone-index', {}) r1={} for k,e in pbook.items(): r1[e['bitpimserial']['id']]={ 'wallpaper': \ self._findmediainindex(wallpaper_index, e['wallpaper'], e['name'], 'wallpaper'), 'msgringtone': \ self._findmediainindex(ringtone_index, e['msgringtone'], e['name'], 'message ringtone')} serialupdates=fundamentals.get("serialupdates", []) r2={} for bps, serials in serialupdates: r2[serials['serial1']]=r1[bps['id']] return r2 def _update_pb_file(self, pb, fundamentals, pbinfo): # update the pbentry file update_flg=False for e in pb.items: _info=pbinfo.get(e.serial1, None) if _info: wp=_info.get('wallpaper', None) if wp is not None and wp!=e.wallpaper: update_flg=True e.wallpaper=wp rt=_info.get('ringtone', None) if rt is not None and rt!=e.ringtone: update_flg=True e.ringtone=rt if update_flg: self.log('Updating wallpaper index') buf=prototypes.buffer() pb.writetobuffer(buf, logtitle="Updated index "+self.protocolclass.pb_file_name) self.writefile(self.protocolclass.pb_file_name, buf.getvalue()) def _update_pb_info(self, pbentries, fundamentals): # Manually update phonebook data that the normal protocol should have _pbinfo=self._build_pb_info(fundamentals) self._update_pb_file(pbentries, fundamentals, _pbinfo) def _write_path_index(self, pbentries, pbmediakey, media_index, index_file, invalid_values): _path_entry=self.protocolclass.PathIndexEntry() _path_file=self.protocolclass.PathIndexFile() for _ in range(self.protocolclass.NUMPHONEBOOKENTRIES): _path_file.items.append(_path_entry) for _entry in pbentries.items: _idx=getattr(_entry, pbmediakey) if _idx in invalid_values or not media_index.has_key(_idx): continue if media_index[_idx].get('origin', None)=='builtin': _filename=media_index[_idx]['name'] elif media_index[_idx].get('filename', None): _filename=media_index[_idx]['filename'] else: continue _path_file.items[_entry.entrynumber]=self.protocolclass.PathIndexEntry( pathname=_filename) _buf=prototypes.buffer() _path_file.writetobuffer(_buf, logtitle='Writing Path ID') self.writefile(index_file, _buf.getvalue()) # Must be included due to changed indexfile format def _write_index_file(self, type): _info=self.media_info.get(type, None) if not _info: return _files={} _local_dir=_info['localpath'] _rs_dir=_info['rspath'] _vtype=_info['vtype'] _icon=_info['icon'] _index=_info['index'] _maxsize=_info['maxsize'] _dunno=_info['dunno'] _dunno1=_info['dunno1'] indexfile=_info['indexfile'] sizefile=_info['sizefile'] _need_date=_info['date'] try: _files=self.listfiles(_local_dir) except (com_brew.BrewNoSuchDirectoryException, com_brew.BrewBadPathnameException): pass try: if _rs_dir: _rs_files=self.listfiles(_rs_dir) if type=='ringers': self._mark_files(_files, _rs_files, _local_dir) _files.update(_rs_files) except (com_brew.BrewNoSuchDirectoryException, com_brew.BrewBadPathnameException): # dir does not exist, no media files available pass # del all the markers (empty files) ringers if type=='ringers': _keys=_files.keys() for _key in _keys: if not _files[_key]['size']: del _files[_key] # dict of all indices _idx_keys={} for _i in xrange(_index, _index+_maxsize): _idx_keys[_i]=True # assign existing indices for _item in self.getindex(indexfile): if _files.has_key(_item.filename): _files[_item.filename]['index']=_item.index _idx_keys[_item.index]=False # available new indices _idx_keys_list=[k for k,x in _idx_keys.items() if x] _idx_keys_list.sort() _idx_cnt=0 # assign new indices _file_list=[x for x in _files if not _files[x].get('index', None)] _file_list.sort() if len(_file_list)>len(_idx_keys_list): _file_list=_file_list[:len(_idx_keys_list)] for i in _file_list: _files[i]['index']=_idx_keys_list[_idx_cnt] _idx_cnt+=1 # (index, file name) list for writing _res_list=[(x['index'],k) for k,x in _files.items() if x.get('index', None)] _res_list.sort() _res_list.reverse() # writing the index file ifile=self.protocolclass.indexfile() _file_size=0 for index,idx in _res_list: _fs_size=_files[idx]['size'] ie=self.protocolclass.indexentry() ie.index=index ie.type=_vtype ie.filename=idx if _need_date: # need to fill in the date value _stat=self.statfile(_files[idx]['name']) if _stat: ie.date=_stat['datevalue']-time.timezone ie.dunno=_dunno ie.dunno1=_dunno1 ie.icon=_icon ie.size=_fs_size ifile.items.append(ie) if not self._is_rs_file(idx): _file_size+=_fs_size buf=prototypes.buffer() ifile.writetobuffer(buf, logtitle="Index file "+indexfile) self.log("Writing index file "+indexfile+" for type "+type+" with "+`len(_res_list)`+" entries.") self.writefile(indexfile, buf.getvalue()) # writing the size file if sizefile: szfile=self.protocolclass.sizefile() szfile.size=_file_size buf=prototypes.buffer() szfile.writetobuffer(buf, logtitle="Updated size file for "+type) self.log("You are using a total of "+`_file_size`+" bytes for "+type) self.writefile(sizefile, buf.getvalue()) # Must be there since there are no msg ringtones on ax8600 def savephonebook(self, data): "Saves out the phonebook" res=com_lgvx4400.Phone.savephonebook(self, data) # retrieve the phonebook entries _buf=prototypes.buffer(self.getfilecontents(self.protocolclass.pb_file_name)) _pb_entries=self.protocolclass.pbfile() _pb_entries.readfrombuffer(_buf, logtitle="Read phonebook file "+self.protocolclass.pb_file_name) # update info that the phone software failed to do!! self._update_pb_info(_pb_entries, data) return res # Misc Stuff---------------------------------------------------------------- def get_firmware_version(self): # return the firmware version req=p_brew.firmwarerequest() res=self.sendbrewcommand(req, self.protocolclass.firmwareresponse) return res.firmware def _unlock_key(self): _req=self.protocolclass.LockKeyReq(lock=1) self.sendbrewcommand(_req, self.protocolclass.data) def _lock_key(self): _req=self.protocolclass.LockKeyReq() self.sendbrewcommand(_req, self.protocolclass.data) def _press_key(self, keys): # simulate a series of keypress if not keys: return _req=self.protocolclass.KeyPressReq() for _k in keys: _req.key=_k self.sendbrewcommand(_req, self.protocolclass.data) #------------------------------------------------------------------------------- parentprofile=com_lgvx8100.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='AX8600' # inside screen resoluation WALLPAPER_WIDTH=176 WALLPAPER_HEIGHT=220 MAX_WALLPAPER_BASENAME_LENGTH=32 WALLPAPER_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_() ." WALLPAPER_CONVERT_FORMAT="jpg" # the 8300 uses "W" for wait in the dialstring, it does not support "T" DIALSTRING_CHARS="[^0-9PW#*]" MAX_RINGTONE_BASENAME_LENGTH=32 RINGTONE_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_() ." RINGTONE_LIMITS= { 'MAXSIZE': 200000 } # MSGRINGTONE=None imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) # imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video")) # imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images(sd)")) # imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video(sd)")) # our targets are the same for all origins imagetargets={} ## imagetargets.update(common.getkv(parentprofile.stockimagetargets, "fullscreen", ## {'width': 176, 'height': 220, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 176, 'height': 220, 'format': "JPEG"})) # imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", # {'width': 128, 'height': 160, 'format': "JPEG"})) ## imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", ## {'width': 128, 'height': 142, 'format': "JPEG"})) def GetImageOrigins(self): return self.imageorigins ringtoneorigins=('ringers', 'sounds') excluded_ringtone_origins=('ringers') excluded_wallpaper_origins=('video') def GetTargetsForImageOrigin(self, origin): return self.imagetargets def QueryAudio(self, origin, currentextension, afi): _max_size=self.RINGTONE_LIMITS['MAXSIZE'] setattr(afi, 'MAXSIZE', _max_size) # we don't modify any of these if afi.format in ("MIDI", "QCP", "PMD", "WMA"): return currentextension, afi # examine mp3 if afi.format=="MP3": if afi.channels==1 and 8<=afi.bitrate<=64 and 16000<=afi.samplerate<=22050: return currentextension, afi # convert it return ("mp3", fileinfo.AudioFileInfo(afi, **{'format': 'MP3', 'channels': 2, 'bitrate': 48, 'samplerate': 44100, 'MAXSIZE': _max_size })) def __init__(self): parentprofile.__init__(self) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ## ('sms', 'read', None), # all SMS list reading ('memo', 'read', None), # all memo list reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ## ('sms', 'write', 'OVERWRITE'), # all SMS list writing ('memo', 'write', 'OVERWRITE'), # all memo list writing ## ('t9_udb', 'read', 'OVERWRITE'), ## ('t9_udb', 'write', 'OVERWRITE'), ) field_color_data={ 'phonebook': { 'name': { 'first': 1, 'middle': 1, 'last': 1, 'full': 1, 'nickname': 0, 'details': 1 }, 'number': { 'type': 5, 'speeddial': 5, 'number': 5, 'details': 5 }, 'email': 2, 'address': { 'type': 0, 'company': 0, 'street': 0, 'street2': 0, 'city': 0, 'state': 0, 'postalcode': 0, 'country': 0, 'details': 0 }, 'url': 0, 'memo': 0, 'category': 1, 'wallpaper': 1, 'ringtone': 2, 'storage': 0, }, 'calendar': { 'description': True, 'location': False, 'allday': False, 'start': True, 'end': True, 'priority': False, 'alarm': True, 'vibrate': True, 'repeat': True, 'memo': False, 'category': False, 'wallpaper': False, 'ringtone': True, }, 'memo': { 'subject': True, 'date': True, 'secret': False, 'category': False, 'memo': True, }, 'todo': { 'summary': False, 'status': False, 'due_date': False, 'percent_complete': False, 'completion_date': False, 'private': False, 'priority': False, 'category': False, 'memo': False, }, } bitpim-1.0.7+dfsg1/src/phones/com_sanyo8300.py0000644001616600161660000001075410505106111017103 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_sanyo8300.py 3580 2006-09-23 01:22:17Z sawecw $ """Talk to the Sanyo SCP-8300 cell phone""" # standard modules import re import time import sha # my modules import common import p_brew import p_sanyo8300 import com_brew import com_phone import com_sanyo import com_sanyomedia import com_sanyonewer import prototypes import bpcalendar numbertypetab=( 'cell', 'home', 'office', 'pager', 'fax', 'data', 'none' ) class Phone(com_sanyonewer.Phone): "Talk to the Sanyo PM8300 cell phone" desc="PM8300" FIRST_MEDIA_DIRECTORY=1 LAST_MEDIA_DIRECTORY=3 imagelocations=( # offset, directory #, indexflag, type, maximumentries ) protocolclass=p_sanyo8300 serialsname='mm8300' builtinringtones=( 'None', 'Vibrate', '', '', '', '', '', '', '', 'Tone 1', 'Tone 2', 'Tone 3', 'Tone 4', 'Tone 5', 'Tone 6', 'Tone 7', 'Tone 8', '', '', '', '', '', '', '', '', '', 'Requiem:Dies Irae', 'Minute Waltz', 'Hungarian Dance', 'Miltary March', 'Ten Little Indians', 'Head,Shoulders,Knees&Toes', 'The Moment', 'Asian Jingle', 'Kung-fu','','','','','','','','','','','','','','','','','', '','','','','','', 'Voice Alarm') # Calendar ringer info # e8 02 Tone 1 744 # f9 02 Melody 1 761 # fe 02 Melody 6 766 # ff 02 Melody 7 767 # 00 03 Melody 8 768 # 01 03 Melody 9 769 # 00 00 Normal 0 # f1 ff None 65521 # f2 ff Vibrate 65522 # 19 03 Voice 793 calendar_defaultringtone=0 calendar_defaultcaringtone=0 calendar_toneoffset=734 calendar_tonerange=xrange(744,794) def __init__(self, logtarget, commport): com_sanyonewer.Phone.__init__(self, logtarget, commport) self.mode=self.MODENONE self.numbertypetab=numbertypetab def _setmodebrew(self): req=p_brew.firmwarerequest() respc=p_brew.testing0cresponse for baud in 0, 38400,115200: if baud: if not self.comm.setbaudrate(baud): continue try: self.sendbrewcommand(req, respc, callsetmode=False) return True except com_phone.modeignoreerrortypes: pass # send AT$QCDMG at various speeds for baud in (0, 115200, 19200, 230400): if baud: if not self.comm.setbaudrate(baud): continue print "Baud="+`baud` try: self.comm.write("AT$QCDMG\r\n") except: # some issue during writing such as user pulling cable out self.mode=self.MODENONE self.comm.shouldloop=True raise try: # if we got OK back then it was success if self.comm.readsome().find("OK")>=0: break except com_phone.modeignoreerrortypes: self.log("No response to setting QCDMG mode") # verify if we are in DM mode for baud in 0,38400,115200: if baud: if not self.comm.setbaudrate(baud): continue try: self.sendbrewcommand(req, respc, callsetmode=False) return True except com_phone.modeignoreerrortypes: pass return False def getfundamentals(self, results): """Gets information fundamental to interopating with the phone and UI.""" req=self.protocolclass.esnrequest() res=self.sendpbcommand(req, self.protocolclass.esnresponse) results['uniqueserial']=sha.new('%8.8X' % res.esn).hexdigest() self.getmediaindices(results) self.log("Fundamentals retrieved") return results class Profile(com_sanyonewer.Profile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer='SANYO' phone_model='SCP-8300/US' # GMR: 1.115SP ,10019 WALLPAPER_WIDTH=176 WALLPAPER_HEIGHT=220 def __init__(self): com_sanyonewer.Profile.__init__(self) self.numbertypetab=numbertypetab bitpim-1.0.7+dfsg1/src/phones/p_etsi.p0000644001616600161660000000232310555026112015673 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_etsi.p 3927 2007-01-22 03:15:22Z rogerb $ %{ """Various descriptions of data specific to GSM phones""" from prototypes import * from prototypeslg import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb %} PACKET echo_off: * USTRING { 'terminator': None, 'default': 'E0V1' } +command PACKET esnrequest: * USTRING { 'terminator': None, 'default': '+GSN' } +command PACKET esnresponse: * CSVSTRING {'quotechar': None, 'terminator': ord(' '), 'default': '+GSN'} command * CSVSTRING {'quotechar': None, 'terminator': None} esn PACKET SIM_ID_Req: * USTRING { 'terminator': None, 'default': '+CIMI' } +command PACKET single_value_resp: * USTRING { 'terminator': None } value PACKET manufacturer_id_req: * USTRING { 'terminator': None, 'default': '+GMI'} +command PACKET model_id_req: * USTRING { 'terminator': None, 'default': '+GMM' } +command PACKET firmware_version_req: * USTRING { 'terminator': None, 'default': '+GMR' } +command bitpim-1.0.7+dfsg1/src/phones/com_motoe815m.py0000644001616600161660000000160410614255133017201 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_motoe815m.py 4205 2007-04-27 02:05:15Z djpham $ """Communicate with Motorola E815m phones using AT commands""" # BitPim modules import com_motov710m import helpids parentphone=com_motov710m.Phone class Phone(parentphone): desc='Moto-E815m' helpid=helpids.ID_PHONE_MOTOE815M serialsname='motoe815m' #------------------------------------------------------------------------------ parentprofile=com_motov710m.Profile class Profile(parentprofile): serialsname=Phone.serialsname # use for auto-detection phone_manufacturer='Motorola' phone_model='E815m' common_model_name='E815' generic_phone_model='Motorola CDMA e815 Phone' bitpim-1.0.7+dfsg1/src/phones/com_lgvx8500.py0000644001616600161660000005334310646567205016762 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgvx8500.py 4305 2007-07-16 04:05:25Z djpham $ """ Communicate with the LG VX8500 cell phone """ # standard modules import datetime # wx modules # BitPim modules import common import com_brew import com_lg import com_lgvx8300 import helpids import fileinfo import guihelper import os import p_brew import p_lgvx8500 import playlist import prototypes import prototypeslg import t9editor parentphone=com_lgvx8300.Phone class Phone(parentphone): desc="LG-VX8500" helpid=helpids.ID_PHONE_LGVX8500 protocolclass=p_lgvx8500 serialsname='lgvx8500' my_model='VX8500' builtinringtones= ('Low Beep Once', 'Low Beeps', 'Loud Beep Once', 'Loud Beeps', 'VZW Default Ringtone') + \ tuple(['Ringtone '+`n` for n in range(1,13)]) + \ ('No Ring',) ringtonelocations= ( # type index file default dir external dir max type Index ( 'ringers', 'dload/myringtone.dat','brew/16452/lk/mr','mmc1/ringers', 100, 0x01, 100), ( 'sounds', 'dload/mysound.dat', 'brew/16452/ms', '', 100, 0x02, None), ( 'sounds(sd)', 'dload/sd_sound.dat', 'mmc1/my_sounds', '', 100, 0x02, None), ( 'music', 'dload/efs_music.dat', 'my_music', '', 100, 0x104, None), ( 'music(sd)', 'dload/sd_music.dat', 'mmc1/my_music', '', 100, 0x14, None), ) wallpaperlocations= ( # type index file default dir external dir max type Index ( 'images', 'dload/image.dat', 'brew/16452/mp', '', 100, 0x00, 100), ( 'images(sd)', 'dload/sd_image.dat', 'mmc1/my_pix', '', 100, 0x10, None), ( 'video', 'dload/video.dat', 'brew/16452/mf', '', 100, 0x03, None), ( 'video(sd)', 'dload/sd_video.dat', 'mmc1/my_flix', '', 100, 0x13, None), ) def setDMversion(self): """Define the DM version required for this phone, default to DMv5""" _fw_version=self.get_firmware_version()[-1] self._DMv5=self.my_model=='VX8500' and _fw_version>'4' # Fundamentals: # - get_esn - same as LG VX-8300 # - getgroups - same as LG VX-8100 # - getwallpaperindices - LGUncountedIndexedMedia # - getrintoneindices - LGUncountedIndexedMedia # - DM Version - T85VZV01 - T85VZV04: 4, T85VZV05 - : 5 # Phonebook stuff----------------------------------------------------------- def _build_pb_info(self, fundamentals): # build a dict of info to update pbentry pbook=fundamentals.get('phonebook', {}) wallpaper_index=fundamentals.get('wallpaper-index', {}) ringtone_index=fundamentals.get('ringtone-index', {}) r1={} for k,e in pbook.items(): r1[e['bitpimserial']['id']]={ 'wallpaper': \ self._findmediainindex(wallpaper_index, e['wallpaper'], e['name'], 'wallpaper'), 'msgringtone': \ self._findmediainindex(ringtone_index, e['msgringtone'], e['name'], 'message ringtone')} serialupdates=fundamentals.get("serialupdates", []) r2={} for bps, serials in serialupdates: r2[serials['serial1']]=r1[bps['id']] return r2 def _update_pb_file(self, pb, fundamentals, pbinfo): # update the pbentry file update_flg=False for e in pb.items: _info=pbinfo.get(e.serial1, None) if _info: wp=_info.get('wallpaper', None) if wp is not None and wp!=e.wallpaper: update_flg=True e.wallpaper=wp msgrt=_info.get('msgringtone', None) if msgrt is not None and msgrt!=e.msgringtone: update_flg=True e.msgringtone=msgrt if update_flg: self.log('Updating wallpaper index') buf=prototypes.buffer() pb.writetobuffer(buf, logtitle="Updated index "+self.protocolclass.pb_file_name) self.writefile(self.protocolclass.pb_file_name, buf.getvalue()) def _update_pb_info(self, pbentries, fundamentals): # Manually update phonebook data that the normal protocol should have _pbinfo=self._build_pb_info(fundamentals) self._update_pb_file(pbentries, fundamentals, _pbinfo) def _write_path_index(self, pbentries, pbmediakey, media_index, index_file, invalid_values): _path_entry=self.protocolclass.PathIndexEntry() _path_file=self.protocolclass.PathIndexFile() for _ in range(self.protocolclass.NUMPHONEBOOKENTRIES): _path_file.items.append(_path_entry) for _entry in pbentries.items: _idx=getattr(_entry, pbmediakey) if _idx in invalid_values or not media_index.has_key(_idx): continue if media_index[_idx].get('origin', None)=='builtin': _filename=media_index[_idx]['name'] elif media_index[_idx].get('filename', None): _filename=media_index[_idx]['filename'] else: continue _path_file.items[_entry.entrynumber]=self.protocolclass.PathIndexEntry( pathname=_filename) _buf=prototypes.buffer() _path_file.writetobuffer(_buf, logtitle='Writing Path ID') self.writefile(index_file, _buf.getvalue()) def savephonebook(self, data): "Saves out the phonebook" res=parentphone.savephonebook(self, data) # retrieve the phonebook entries _buf=prototypes.buffer(self.getfilecontents( self.protocolclass.pb_file_name)) _pb_entries=self.protocolclass.pbfile() _pb_entries.readfrombuffer(_buf, logtitle="Read phonebook file "+self.protocolclass.pb_file_name) _rt_index=data.get('ringtone-index', {}) _wp_index=data.get('wallpaper-index', {}) # update info that the phone software failed to do!! self._update_pb_info(_pb_entries, data) # fix up ringtone index self._write_path_index(_pb_entries, 'ringtone', _rt_index, self.protocolclass.RTPathIndexFile, (0xffff,)) # fix up msg ringtone index self._write_path_index(_pb_entries, 'msgringtone', _rt_index, self.protocolclass.MsgRTIndexFile, (0xffff,)) # fix up wallpaer index self._write_path_index(_pb_entries, 'wallpaper', _wp_index, self.protocolclass.WPPathIndexFile, (0, 0xffff,)) return res # Playlist stuff------------------------------------------------------------ def _get_all_songs(self, fundamentals): # return a list of all available songs _rt_index=fundamentals.get('ringtone-index', {}) return [x['name'] for _,x in _rt_index.items() \ if x.get('origin', None) in ('music', 'music(sd)') ] def _read_pl_list(self, filename): # read and return the contents of the specified playlist _req=self.protocolclass.PLPlayListFile() _buf=prototypes.buffer(self.getfilecontents(filename)) _req.readfrombuffer(_buf, logtitle="Read playlist "+filename) _songs=[] for _item in _req.items: _songs.append(common.basename(_item.pathname)) _entry=playlist.PlaylistEntry() _entry.name=common.stripext(common.basename(filename)) _entry.songs=_songs return _entry def getplaylist(self, result): # return a list of all available songs and playlists # first, retrieve the list of all songs result[playlist.masterlist_key]=self._get_all_songs(result) # get a list of playlists and their contents _pl_list=[] try: _req=self.protocolclass.PLIndexFile() _buf=prototypes.buffer( self.getfilecontents(self.protocolclass.PLIndexFileName)) _req.readfrombuffer(_buf, logtitle='Reading Playlist Index') for _item in _req.items: try: _pl_list.append(self._read_pl_list(_item.pathname)) except com_brew.BrewNoSuchFileException: pass except: if __debug__: raise except com_brew.BrewNoSuchFileException: pass except: if __debug__: raise result[playlist.playlist_key]=_pl_list return result def _get_info_from_index(self, filename): _res={} try: _buf=prototypes.buffer( self.getfilecontents(filename)) _req=self.protocolclass.indexfile() _req.readfrombuffer(_buf, logtitle='Reading Index File') for _item in _req.items: _res[common.basename(_item.filename)]={ 'size': _item.size, 'filename': _item.filename } except com_brew.BrewNoSuchFileException: pass except: if __debug__: raise return _res def _get_song_info(self): # return a dict of all songs & their info _res=self._get_info_from_index('dload/efs_music.dat') _res.update(self._get_info_from_index('dload/sd_music.dat')) return _res def _write_a_playlist(self, filename, pl, song_info): # write a single playlist _pl_file=self.protocolclass.PLPlayListFile() _dt=datetime.datetime.now() _onesec=datetime.timedelta(seconds=1) _plsize=0 for _song in pl.songs: if song_info.has_key(_song): _dt-=_onesec _entry=self.protocolclass.PLSongEntry( pathname=song_info[_song]['filename'], date=_dt.timetuple()[:6], size=song_info[_song]['size']) _pl_file.items.append(_entry) _plsize+=1 if _plsize>=self.protocolclass.PLMaxSize: # reached max size break _buf=prototypes.buffer() _pl_file.writetobuffer(_buf, logtitle='Writing Playlist '+pl.name) self.writefile(filename, _buf.getvalue()) def _write_playlists(self, playlists, song_info): _pl_index=self.protocolclass.PLIndexFile() for _pl in playlists: try: _filename=self.protocolclass.PLFilePath+'/'+_pl.name+\ self.protocolclass.PLExt self._write_a_playlist(_filename, _pl, song_info) _pl_index.items.append( self.protocolclass.PLIndexEntry(pathname=_filename)) except: self.log('Failed to write playlist '+_pl.name) if __debug__: raise try: _buf=prototypes.buffer() _pl_index.writetobuffer(_buf, logtitle='Writing Playlist Index') self.writefile(self.protocolclass.PLIndexFileName, _buf.getvalue()) except: self.log('Failed to write Playlist Index file') if __debug__: raise def saveplaylist(self, result, merge): # delete all existing playlists _buf=prototypes.buffer(self.getfilecontents( self.protocolclass.PLIndexFileName)) _req=self.protocolclass.PLIndexFile() _req.readfrombuffer(_buf, logtitle='Reading Playlist Index') for _item in _req.items: try: self.rmfile(_item.pathname) except com_brew. BrewNoSuchFileException: pass except: if __debug__: raise # get info on all songs _song_info=self._get_song_info() # update the new playlists self._write_playlists(result.get(playlist.playlist_key, []), _song_info) return result # T9 DB stuff def _get_current_db(self): _current_db=None try: _data=self.getfilecontents( self.protocolclass.T9USERDBFILENAME) if _data: _current_db=self.protocolclass.t9udbfile() _current_db.readfrombuffer(prototypes.buffer(_data), logtitle='Reading T9 User DB File') except com_brew.BrewNoSuchFileException: pass return _current_db def _copy_fields(self, old, new): for _field in ('unknown1', 'unknown2', 'unknown3', 'unknown4'): setattr(new, _field, getattr(old, _field)) def gett9db(self, result): _req=self._get_current_db() _t9list=t9editor.T9WordsList() if _req: for _item in _req.blocks: _blk=_item.block if _blk['type']==prototypeslg.T9USERDBBLOCK.WordsList_Type: for _word in _blk['value']: _t9list.append_word(_word['word']) result[t9editor.dict_key]=_t9list return result _buffer_data={ '1': 0x7FA, '2': 0x7FA, '3': 0x7FA, '4': 0x7FA, '5': 0x7FA, '6': 0x7FA, '7': 0x7FA, '8': 0x7FA, '9': 0x7FA, '0': 0x800 } _t9keys=('1', '2', '3', '4', '5', '6', '7', '8', '9', '0') def savet9db(self, result, _): _new_db=self.protocolclass.t9udbfile() try: _current_db=self._get_current_db() if _current_db: self._copy_fields(_current_db, _new_db) except: _current_db=None _t9words={} _t9list=result.get(t9editor.dict_key, t9editor.T9WordsList()) _wordcount=0 for _key in _t9list.keys: for _word in _t9list.get_words(_key): _t9words.setdefault(_key[0], []).append(_word) _wordcount+=1 _new_db.word_count=_wordcount _total_free_size=0 for _key in self._t9keys: _lst=_t9words.get(_key, []) if _lst: _val={ 'type': prototypeslg.T9USERDBBLOCK.WordsList_Type, 'value': [ { 'word': x } for x in _lst ] } _blk=prototypeslg.T9USERDBBLOCK(_val) _free_len=self._buffer_data[_key]-_blk.packetsize() # ugly hack! if _key!='1': _free_len+=1 _total_free_size+=_free_len _new_db.blocks.append(_val) _new_db.blocks.append({ 'type': prototypeslg.T9USERDBBLOCK.FreeBlock_Type, 'value': _free_len }) else: if _key!='1': _new_db.blocks.append({ 'type': prototypeslg.T9USERDBBLOCK.A0_Type, 'value': 0xA0 }) _type=prototypeslg.T9USERDBBLOCK.FreeBlock_Type _new_db.blocks.append({ 'type': _type, 'value': self._buffer_data[_key] }) _total_free_size+=self._buffer_data[_key] _new_db.free_space=_total_free_size _buf=prototypes.buffer() _new_db.writetobuffer(_buf) self.writefile(self.protocolclass.T9USERDBFILENAME, _buf.getvalue()) # Need to reboot the phone to take effect result['rebootphone']=True return result # Misc Stuff---------------------------------------------------------------- def get_firmware_version(self): # return the firmware version req=p_brew.firmwarerequest() res=self.sendbrewcommand(req, self.protocolclass.firmwareresponse) return res.firmware #------------------------------------------------------------------------------- parentprofile=com_lgvx8300.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='VX8500' WALLPAPER_WIDTH=240 WALLPAPER_HEIGHT=320 MAX_WALLPAPER_BASENAME_LENGTH=32 WALLPAPER_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_() ." WALLPAPER_CONVERT_FORMAT="jpg" # the 8300 uses "W" for wait in the dialstring, it does not support "T" DIALSTRING_CHARS="[^0-9PW#*]" MAX_RINGTONE_BASENAME_LENGTH=32 RINGTONE_FILENAME_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_() ." RINGTONE_LIMITS= { 'MAXSIZE': 200000 } imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images(sd)")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video(sd)")) def GetImageOrigins(self): return self.imageorigins ringtoneorigins=('ringers', 'sounds', 'sounds(sd)',' music', 'music(sd)') excluded_ringtone_origins=('sounds', 'sounds(sd)', 'music', 'music(sd)') # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 240, 'height': 275, 'format': "JPEG"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets def __init__(self): parentprofile.__init__(self) def QueryAudio(self, origin, currentextension, afi): _max_size=self.RINGTONE_LIMITS['MAXSIZE'] setattr(afi, 'MAXSIZE', _max_size) # we don't modify any of these if afi.format in ("MIDI", "QCP", "PMD", "WMA"): return currentextension, afi # examine mp3 if afi.format=="MP3": if afi.channels==1 and 8<=afi.bitrate<=64 and 16000<=afi.samplerate<=22050: return currentextension, afi # convert it return ("mp3", fileinfo.AudioFileInfo(afi, **{'format': 'MP3', 'channels': 2, 'bitrate': 48, 'samplerate': 44100, 'MAXSIZE': _max_size })) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading ('memo', 'read', None), # all memo list reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('sms', 'write', 'OVERWRITE'), # all SMS list writing ('memo', 'write', 'OVERWRITE'), # all memo list writing ('playlist', 'read', 'OVERWRITE'), ('playlist', 'write', 'OVERWRITE'), ('t9_udb', 'write', 'OVERWRITE'), ) if __debug__: _supportedsyncs+=( ('t9_udb', 'read', 'OVERWRITE'), ) field_color_data={ 'phonebook': { 'name': { 'first': 1, 'middle': 1, 'last': 1, 'full': 1, 'nickname': 0, 'details': 1 }, 'number': { 'type': 5, 'speeddial': 5, 'number': 5, 'details': 5 }, 'email': 2, 'address': { 'type': 0, 'company': 0, 'street': 0, 'street2': 0, 'city': 0, 'state': 0, 'postalcode': 0, 'country': 0, 'details': 0 }, 'url': 0, 'memo': 0, 'category': 1, 'wallpaper': 1, 'ringtone': 2, 'storage': 0, }, 'calendar': { 'description': True, 'location': False, 'allday': False, 'start': True, 'end': True, 'priority': False, 'alarm': True, 'vibrate': True, 'repeat': True, 'memo': False, 'category': False, 'wallpaper': False, 'ringtone': True, }, 'memo': { 'subject': True, 'date': True, 'secret': False, 'category': False, 'memo': True, }, 'todo': { 'summary': False, 'status': False, 'due_date': False, 'percent_complete': False, 'completion_date': False, 'private': False, 'priority': False, 'category': False, 'memo': False, }, } bitpim-1.0.7+dfsg1/src/phones/com_sanyo8400.py0000644001616600161660000000511511022657227017115 0ustar amuamu### BITPIM ### ### Copyright (C) 2007 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id:$ """Talk to the Sanyo Katana (SCP-8400) cell phone""" # standard modules import re import time import sha # my modules import common import p_brew import p_sanyo8300 import p_sanyo4930 import p_sanyo6600 import p_sanyo7050 import p_sanyo8400 import com_brew import com_phone import com_sanyo import com_sanyomedia import com_sanyonewer import com_sanyo3100 import com_sanyo6600 import com_sanyo7050 import prototypes import bpcalendar numbertypetab=( 'cell', 'home', 'office', 'pager', 'fax', 'none') class Phone(com_sanyo7050.Phone): "Talk to the Sanyo Katana (SCP-8400) cell phone" desc="SCP-8400" FIRST_MEDIA_DIRECTORY=1 LAST_MEDIA_DIRECTORY=2 imagelocations=( # offset, directory #, indexflag, type, maximumentries ) wallpaperexts=(".jpg", ".png", ".mp4", ".3g2",".JPG") protocolclass=p_sanyo8400 serialsname='scp8400' builtinringtones=( 'None', 'Vibrate', '', '', '', '', '', '', '', 'Tone 1', 'Tone 2', 'Tone 3', 'Tone 4', 'Tone 5', 'Tone 6', 'Tone 7', 'Tone 8', '', '', '', '', '', '', '', '', '', 'Requiem:Dies Irae', 'Minute Waltz', 'Hungarian Dance', 'Military March', 'Ten Little Indians', 'Head,Shoulders,Knees&Toes', 'The Moment', 'Asian Jingle', 'Kung-fu','','','','','','','','','','','','','','','','','', '','','','','','', 'Voice Alarm') calendar_defaultringtone=0 calendar_defaultcaringtone=0 calendar_toneoffset=33 calendar_tonerange=xrange(4,100) def __init__(self, logtarget, commport): com_sanyo7050.Phone.__init__(self, logtarget, commport) self.mode=self.MODENONE self.numbertypetab=numbertypetab my_model='SCP-8400/US' detected_model='SCP-8400/US' my_manufacturer='SANYO' parentprofile=com_sanyo7050.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname phone_manufacturer=Phone.my_manufacturer phone_model=Phone.my_model usbids=( ( 0x0474, 0x071F, 1),) # VID=Sanyo, deviceclasses=("serial",) def __init__(self): parentprofile.__init__(self) com_sanyonewer.Profile.__init__(self) self.numbertypetab=numbertypetab bitpim-1.0.7+dfsg1/src/phones/com_lgvx8550.py0000644001616600161660000010057511072665547016771 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2007-2008 Nathan Hjelm ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### $Id: com_lgvx8550.py 4712 2008-10-07 14:00:07Z hjelmn $ """ Communicate with the LG VX8550 cell phone. """ # BitPim modules import common import com_brew import bpcalendar import prototypes import com_lgvx8700 import com_lgvx8500 import p_lgvx8550 import p_brew import helpids import copy import time import os.path DEBUG1=False #------------------------------------------------------------------------------- parentphone=com_lgvx8700.Phone class Phone(parentphone): desc="LG-VX8550" helpid=None protocolclass=p_lgvx8550 serialsname='lgvx8550' my_model='VX8550' calendarringerlocation='sch/toolsRinger.dat' def setDMversion(self): _fw_version=self.get_firmware_version()[-1] if self.my_model=='VX8550' and _fw_version>'3': # VX855V04 self._DMv5 = False self._DMv6 = True else: self._DMv5 = True self._DMv6 = False # Fundamentals: # - get_esn - same as LG VX-8300 # - getgroups - same as LG VX-8700 # - getwallpaperindices - LGUncountedIndexedMedia # - getringtoneindices - LGUncountedIndexedMedia # - DM Version - 5 (VX855V03 or older), 6 (VX855V04) def _get_speeddials(self): """Return the speed dials dict""" speeds={} try: if self.protocolclass.NUMSPEEDDIALS: self.log("Reading speed dials") sd=self.readobject(self.protocolclass.speed_file_name, self.protocolclass.speeddials, 'Reading speed dials') for _idx,_entry in enumerate(sd.speeddials): if _entry.valid(): speeds.setdefault(_entry.entry, {}).update({ _entry.number: _idx }) except com_brew.BrewNoSuchFileException: pass return speeds def _build_media_dict(self, fundamentals, media_data, index_name): """Build & return a dict with keys being the media filenames and values being the name of the index item (index['name']) """ _res={} _media_index=fundamentals.get(index_name, {}) for _item in media_data.items: _pathname=_item.pathname if _pathname and not _res.has_key(_pathname): # not already in dict, look up the name if any _res[_pathname]=None for _entry in _media_index.values(): if _entry.get('filename', None)==_pathname: _res[_pathname]=_entry['name'] break return _res def _get_path_index(self, index_file): buf = prototypes.buffer(self.getfilecontents(index_file)) _path_file=self.protocolclass.PathIndexFile() _path_file.readfrombuffer(buf, logtitle="Read path index: " + index_file) return _path_file def _build_ice_dict(self): # Return an ICE dict for building phone entries _res={} _ice=self.readobject(self.protocolclass.ice_file_name, self.protocolclass.iceentryfile, logtitle='Reading ICE entries') for _item in _ice.items: if _item.valid(): _res[_item.pb_index]=_item.entry_number return _res def getphonebook (self, result): """Reads the phonebook data. The L{getfundamentals} information will already be in result.""" # Read speed dials first -- same file format as the VX-8100 _speeds=self._get_speeddials() # Read the emergency contacts list self.log("Reading ICE entries") _ices=self._build_ice_dict() self.log("Reading phonebook entries") pb_entries=self.readobject(self.protocolclass.pb_file_name, self.protocolclass.pbfile, logtitle='Reading phonebook entries') self.log("Reading phone numbers") pb_numbers=self.readobject(self.protocolclass.pn_file_name, self.protocolclass.pnfile, logtitle='Reading phonebook numbers') self.log("Reading Ringtone IDs") ring_pathf=self._get_path_index(self.protocolclass.RTPathIndexFile) _rt_ids=self._build_media_dict(result, ring_pathf, 'ringtone-index') self.log("Reading Picture IDs") picid_pathf=self._get_path_index(self.protocolclass.WPPathIndexFile) _wp_ids=self._build_media_dict(result, picid_pathf, 'wallpaper-index') pbook={} for _cnt in range(self.protocolclass.NUMPHONEBOOKENTRIES): pb_entry=pb_entries.items[_cnt] if not pb_entry.valid(): continue try: self.log("Parse entry "+`_cnt`+" - " + pb_entry.name) pbook[_cnt]=self.extractphonebookentry(pb_entry, pb_numbers, _speeds, _ices, result, _rt_ids.get(ring_pathf.items[_cnt].pathname, None), _wp_ids.get(picid_pathf.items[_cnt].pathname, None)) self.progress(_cnt, self.protocolclass.NUMPHONEBOOKENTRIES, pb_entry.name) except common.PhoneBookBusyException: raise except Exception, e: # Something's wrong with this entry, log it and skip self.log('Failed to parse entry %d'%_cnt) self.log('Exception %s raised'%`e`) if __debug__: raise self.progress(self.protocolclass.NUMPHONEBOOKENTRIES, self.protocolclass.NUMPHONEBOOKENTRIES, "Phone book read completed") result['phonebook']=pbook cats=[] for i in result['groups']: if result['groups'][i]['name']!='No Group': cats.append(result['groups'][i]['name']) result['categories']=cats return pbook def extractphonebookentry(self, entry, numbers, speeds, ices, fundamentals, rt_name, wp_name): """Return a phonebook entry in BitPim format. This is called from getphonebook.""" res={} # serials res['serials']=[ {'sourcetype': self.serialsname, 'sourceuniqueid': fundamentals['uniqueserial'], 'serial1': entry.entry_number1, 'serial2': entry.entry_number1 } ] # only one name res['names']=[ {'full': entry.name} ] # only one category cat=fundamentals['groups'].get(entry.group, {'name': "No Group"})['name'] if cat!="No Group": res['categories']=[ {'category': cat} ] # emails res['emails']=[] for i in entry.emails: if len(i.email): res['emails'].append( {'email': i.email} ) if not len(res['emails']): del res['emails'] # it was empty # wallpapers if entry.wallpaper!=self.protocolclass.NOWALLPAPER: try: if entry.wallpaper == 0x64: paper = wp_name else: paper = fundamentals['wallpaper-index'][entry.wallpaper]['name'] if paper is None: raise res['wallpapers']=[ {'wallpaper': paper, 'use': 'call'} ] except: print "can't find wallpaper for index",entry.wallpaper # ringtones if entry.ringtone != self.protocolclass.NORINGTONE: try: if entry.ringtone == 0x64: tone = rt_name else: tone = fundamentals['ringtone-index'][entry.ringtone]['name'] if tone is None: raise res['ringtones']=[ {'ringtone': tone, 'use': 'call'} ] except: print "can't find ringtone for index",entry.ringtone # assume we are like the VX-8100 in this regard -- looks correct res=self._assignpbtypeandspeeddialsbytype(entry, numbers, speeds, res) # assign the ICE entry to the associated contact to keep them in sync res=self._assigniceentry(entry, numbers, ices, res) return res def _assignpbtypeandspeeddialsbytype(self, entry, numbers, speeds, res): # for some phones (e.g. vx8100) the speeddial numberindex is really the numbertype (now why would LG want to change this!) res['numbers']=[] for i in range(self.protocolclass.NUMPHONENUMBERS): if entry.numberindices[i].numberindex >= self.protocolclass.NUMPHONENUMBERENTRIES: # invalid number continue _pnentry=numbers.items[entry.numberindices[i].numberindex] num=_pnentry.phone_number if len(num): if _pnentry.malformed(): print "malformed phone number entry encountered" # use the type from the phonebook entry num_type = entry.numbertypes[i].numbertype t = self.protocolclass.numbertypetab[num_type] if t[-1]=='2': t=t[:-1] res['numbers'].append({'number': num, 'type': t}) # if this is a speeddial number set it if speeds.has_key(entry.entry_number0) and \ speeds[entry.entry_number0].has_key(num_type): res['numbers'][i]['speeddial']=speeds[entry.entry_number0][num_type] return res def _assigniceentry(self, entry, numbers, ices, res): if ices.has_key(entry.entry_number0): # this contact entry is an ICE entry res['ice']=[ { 'iceindex': ices[entry.entry_number0] } ] return res def _get_next_pb_id(self): """Return the next available pbentry ID""" return self.readobject(self.protocolclass.pb_recordid_filename, self.protocolclass.RecordIdEntry, logtitle='Reading record_id').idnum def _save_next_pb_id(self, idnum): """Save the next pbentry ID""" self.writeobject(self.protocolclass.pb_recordid_filename, self.protocolclass.RecordIdEntry(idnum=idnum), logtitle='Writing record_id', uselocalfs=DEBUG1) def savephonebook (self, data): "Saves out the phonebook" self.savegroups (data) ring_pathf=self.protocolclass.PathIndexFile() picid_pathf=self.protocolclass.PathIndexFile() # the pbentry.dat will be overwritten so there is no need to delete entries pbook = data.get('phonebook', {}) keys = pbook.keys () keys.sort () _rt_index=data.get('ringtone-index', {}) _wp_index=data.get('wallpaper-index', {}) entry_num0 = 0 entry_num1 = self._get_next_pb_id() pb_entries = self.protocolclass.pbfile(model_name=self.my_model) pn_entries = self.protocolclass.pnfile() ice_entries = self.protocolclass.iceentryfile() for i in range(self.protocolclass.NUMEMERGENCYCONTACTS): ice_entries.items.append (self.protocolclass.iceentry()) speeddials={} for i in keys: pb_entries.items.append(self.make_entry (pn_entries, speeddials, ice_entries, entry_num0, entry_num1, pbook[i], data, ring_pathf,_rt_index, picid_pathf, _wp_index)) entry_num0 += 1 if entry_num0 >= self.protocolclass.NUMPHONEBOOKENTRIES: self.log ("Maximum number of phonebook entries reached") break if entry_num1==0xffffffff: entry_num1=0 else: entry_num1+=1 # write phonebook entries self.log ("Writing phonebook entries") self.writeobject(self.protocolclass.pb_file_name, pb_entries, logtitle='Writing phonebook entries', uselocalfs=DEBUG1) # write phone numbers self.log ("Writing phone numbers") self.writeobject(self.protocolclass.pn_file_name, pn_entries, logtitle='Writing phonebook numbers', uselocalfs=DEBUG1) # write ringtone index self.log('Writing ringtone ID') self.writeobject(self.protocolclass.RTPathIndexFile, ring_pathf, logtitle='Writing ringtone paths', uselocalfs=DEBUG1) # write wallpaper index self.log('Writing picture ID') self.writeobject(self.protocolclass.WPPathIndexFile, picid_pathf, logtitle='Writing wallpaper paths', uselocalfs=DEBUG1) # write ICE index self.log('Writing ICE entries') self.writeobject(self.protocolclass.ice_file_name, ice_entries, logtitle='Writing ICE entries', uselocalfs=DEBUG1) # update speed dials req=self.protocolclass.speeddials() # slot 0 is always unused req.speeddials.append(self.protocolclass.speeddial()) # if empty, slot 1 is for voicemail if speeddials.has_key(1): req.speeddials.append(self.protocolclass.speeddial(entry=speeddials[1]['entry'], number=speeddials[1]['type'])) else: req.speeddials.append(self.protocolclass.speeddial(entry=1000, number=6)) for i in range(2, self.protocolclass.NUMSPEEDDIALS): sd=self.protocolclass.speeddial() if speeddials.has_key(i): sd.entry=speeddials[i]['entry'] sd.number=speeddials[i]['type'] req.speeddials.append(sd) self.log('Writing speed dials') self.writeobject(self.protocolclass.speed_file_name, req, logtitle='Writing speed dials data', uselocalfs=DEBUG1) # update the next pbentries ID self._save_next_pb_id(entry_num1) data["rebootphone"]=True return data def make_pn_entry (self, phone_number, number_type, pn_id, pbpn_id, pe_id): """ Create a non-blank pnfileentry frome a phone number string """ if len(phone_number) == 0: raise new_entry = self.protocolclass.pnfileentry(entry_tag=self.protocolclass.PB_NUMBER_SOR) new_entry.pn_id = pn_id new_entry.pe_id = pe_id new_entry.phone_number = phone_number new_entry.ntype = number_type new_entry.pn_order = pbpn_id return new_entry def make_ice_entry (self, ice_id, pb_id): """ Create a iceentry from a pb_id and ice_id """ new_entry = self.protocolclass.iceentry() new_entry.entry_assigned = 1 new_entry.entry_number = ice_id new_entry.pb_index = pb_id return new_entry def make_entry (self, pn_entries, speeddials, ice_entries, entry_num0, entry_num1, pb_entry, data, ring_pathf, rt_index, picid_pathf, wp_index): """ Create a pbfileentry from a bitpim phonebook entry """ new_entry = self.protocolclass.pbfileentry(entry_tag=self.protocolclass.PB_ENTRY_SOR) # entry IDs new_entry.entry_number0 = entry_num0 new_entry.entry_number1 = entry_num1 for key in pb_entry: if key in ('emails', 'numbertypes'): l = getattr (new_entry, key) for item in pb_entry[key]: l.append(item) elif key == 'numbers': l = getattr (new_entry, 'numberindices') for i in range(0, self.protocolclass.NUMPHONENUMBERS): new_pn_id = len (pn_entries.items) if new_pn_id == self.protocolclass.NUMPHONENUMBERENTRIES: # this state should not be possible. should this raise an exception? self.log ("Maximum number of phone numbers reached") break try: pn_entries.items.append(self.make_pn_entry (pb_entry[key][i],pb_entry['numbertypes'][i], new_pn_id, i, entry_num0)) l.append (new_pn_id) except: l.append (0xffff) elif key == 'speeddials': for _sd,_num_type in zip(pb_entry['speeddials'], pb_entry['numbertypes']): if _sd is not None: speeddials[_sd]={ 'entry': entry_num0, 'type': _num_type } elif key == 'ice': # In Case of Emergency _ice = pb_entry['ice'] if _ice is not None and len(_ice) > 0: _ice_entry = _ice[0]['iceindex'] ice_entries.items[_ice_entry] = self.make_ice_entry (_ice_entry, entry_num0) elif key == 'ringtone': new_entry.ringtone = self._findmediainindex(data['ringtone-index'], pb_entry['ringtone'], pb_entry['name'], 'ringtone') try: _filename = rt_index[new_entry.ringtone]['filename'] ring_pathf.items.append(self.protocolclass.PathIndexEntry(pathname=_filename)) new_entry.ringtone = 0x64 except: ring_pathf.items.append(self.protocolclass.PathIndexEntry()) elif key == 'wallpaper': new_entry.wallpaper = self._findmediainindex(data['wallpaper-index'], pb_entry['wallpaper'], pb_entry['name'], 'wallpaper') try: _filename = wp_index[new_entry.wallpaper]['filename'] picid_pathf.items.append(self.protocolclass.PathIndexEntry(pathname=_filename)) new_entry.wallpaper = 0x64 except: picid_pathf.items.append(self.protocolclass.PathIndexEntry()) elif key in new_entry.getfields(): setattr (new_entry, key, pb_entry[key]) return new_entry def getcalendar(self,result): res={} # Read exceptions file first exceptions = self.getexceptions() try: buf = prototypes.buffer(self.getfilecontents(self.calendarringerlocation)) ringersf = self.protocolclass.scheduleringerfile() ringersf.readfrombuffer (buf) except: self.log ("unable to read schedule ringer path file") # Now read schedule try: buf=prototypes.buffer(self.getfilecontents(self.calendarlocation)) if len(buf.getdata())<3: # file is empty, and hence same as non-existent raise com_brew.BrewNoSuchFileException() sc=self.protocolclass.schedulefile() sc.readfrombuffer(buf, logtitle="Calendar") for event in sc.events: # the vx8100 has a bad entry when the calender is empty # stop processing the calender when we hit this record if event.pos==0: #invalid entry continue entry=bpcalendar.CalendarEntry() try: # delete events are still in the calender file but have garbage dates self.getcalendarcommon(entry, event) except ValueError: continue try: if (event.ringtone >= 100): # MIC Ringer is downloaded to phone or microSD entry.ringtone = common.basename(ringersf.ringerpaths[event.ringtone-100].path) else: # MIC Ringer is built-in entry.ringtone=self.builtinringtones[event.ringtone] except: self.log ("Setting default ringer for event\n") # hack, not having a phone makes it hard to figure out the best approach if entry.alarm==None: entry.ringtone='No Ring' else: entry.ringtone='Loud Beeps' # check for exceptions and remove them if event.repeat[3] and exceptions.has_key(event.pos): for year, month, day in exceptions[event.pos]: entry.suppress_repeat_entry(year, month, day) res[entry.id]=entry assert sc.numactiveitems==len(res) except com_brew.BrewNoSuchFileException: pass # do nothing if file doesn't exist result['calendar']=res return result def _scheduleextras(self, data, fwversion): data.serial_number = '000000ca-00000000-00000000-' + fwversion data.unknown3 = 0x01fb def savecalendar(self, dict, merge): # ::TODO:: # what will be written to the files eventsf = self.protocolclass.schedulefile() exceptionsf = self.protocolclass.scheduleexceptionfile() ringersf = self.protocolclass.scheduleringerfile() # what are we working with cal=dict['calendar'] newcal={} #sort into start order, makes it possible to see if the calendar has changed keys=[(x.start, k) for k,x in cal.items()] keys.sort() # apply limiter keys=keys[:self.protocolclass.NUMCALENDARENTRIES] # number of entries eventsf.numactiveitems=len(keys) ringersf.numringers = 0 pos = 0 # get phone firmware version for serial number try: req = p_brew.firmwarerequest() res = self.sendbrewcommand(req, self.protocolclass.firmwareresponse) _fwversion = res.firmware except: _fwversion = '00000000' # play with each entry for (_,k) in keys: # entry is what we will return to user entry=cal[k] data=self.protocolclass.scheduleevent() # using the packetsize() method here will fill the LIST with default entries data.pos = pos * data.packet_size + 2 self._schedulecommon(entry, data) alarm_set=self.setalarm(entry, data) if alarm_set: if entry.ringtone=="No Ring" and not entry.vibrate: alarm_name="Low Beep Once" else: alarm_name=entry.ringtone else: # set alarm to "No Ring" gets rid of alarm icon on phone alarm_name="No Ring" for i in dict['ringtone-index']: self.log ('ringtone ' + str(i) + ': ' + dict['ringtone-index'][i]['name'] + ' alarm-name = ' + alarm_name) if dict['ringtone-index'][i]['name']==alarm_name: if dict['ringtone-index'][i].get('filename', None): data.ringtone = 100 + ringersf.numringers ringersf.ringerpaths.append(dict['ringtone-index'][i]['filename']) ringersf.numringers = ringersf.numringers + 1 else: # builtin ringer data.ringtone=i # Set to proper index break # check for exceptions and add them to the exceptions list self._scheduleexceptions(entry, data, exceptionsf) self._scheduleextras(data, _fwversion) # put entry in nice shiny new dict we are building entry=copy.copy(entry) newcal[data.pos]=entry eventsf.events.append(data) pos = pos + 1 buf=prototypes.buffer() eventsf.writetobuffer(buf, logtitle="New Calendar") self.writefile(self.calendarlocation, buf.getvalue()) self.log("Your phone has to be rebooted due to the calendar changing") dict["rebootphone"]=True buf=prototypes.buffer() exceptionsf.writetobuffer(buf, logtitle="Writing calendar exceptions") self.writefile(self.calendarexceptionlocation, buf.getvalue()) buf = prototypes.buffer() ringersf.writetobuffer(buf, logtitle="Writing calendar ringers") self.writefile(self.calendarringerlocation, buf.getvalue()) # fix passed in dict dict['calendar']=newcal return dict #------------------------------------------------------------------------------- parentprofile=com_lgvx8500.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='VX8550' # inside screen resoluation WALLPAPER_WIDTH=176 WALLPAPER_HEIGHT=220 imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images(sd)")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video(sd)")) # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "fullscreen", {'width': 238, 'height': 246, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 240, 'height': 274, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 120, 'height': 100, 'format': "JPEG"})) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading ('memo', 'read', None), # all memo list reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('sms', 'write', 'OVERWRITE'), # all SMS list writing ('memo', 'write', 'OVERWRITE'), # all memo list writing ('t9_udb', 'write', 'OVERWRITE'), ) if __debug__: _supportedsyncs+=( ('t9_udb', 'read', 'OVERWRITE'), ) def convertphonebooktophone(self, helper, data): """Converts the data to what will be used by the phone @param data: contains the dict returned by getfundamentals as well as where the results go""" results={} self.normalisegroups(helper, data) for pbentry in data['phonebook']: if len(results)==self.protocolclass.NUMPHONEBOOKENTRIES: break e={} # entry out entry=data['phonebook'][pbentry] # entry in try: # serials serial1=helper.getserial(entry.get('serials', []), self.serialsname, data['uniqueserial'], 'serial1', 0) serial2=helper.getserial(entry.get('serials', []), self.serialsname, data['uniqueserial'], 'serial2', serial1) e['serial1']=serial1 e['serial2']=serial2 for ss in entry["serials"]: if ss["sourcetype"]=="bitpim": e['bitpimserial']=ss assert e['bitpimserial'] # name e['name']=helper.getfullname(entry.get('names', []),1,1,32)[0] # ice e['ice']=entry.get('ice', None) # categories/groups cat=helper.makeone(helper.getcategory(entry.get('categories', []),0,1,32), None) if cat is None: e['group']=0 else: key,value=self._getgroup(cat, data['groups']) if key is not None: e['group']=key else: # sorry no space for this category e['group']=0 # email addresses emails=helper.getemails(entry.get('emails', []) ,0,self.protocolclass.NUMEMAILS,48) e['emails']=helper.filllist(emails, self.protocolclass.NUMEMAILS, "") # phone numbers # there must be at least one email address or phonenumber minnumbers=1 if len(emails): minnumbers=0 numbers=helper.getnumbers(entry.get('numbers', []),minnumbers,self.protocolclass.NUMPHONENUMBERS) e['numbertypes']=[] e['numbers']=[] e['speeddials']=[] for numindex in range(len(numbers)): num=numbers[numindex] # deal with type b4=len(e['numbertypes']) type=num['type'] for i,t in enumerate(self.protocolclass.numbertypetab): if type==t: # some voodoo to ensure the second home becomes home2 if i in e['numbertypes'] and t[-1]!='2': type+='2' continue e['numbertypes'].append(i) break if t=='none': # conveniently last entry e['numbertypes'].append(i) break if len(e['numbertypes'])==b4: # we couldn't find a type for the number helper.add_error_message('Number %s (%s/%s) not supported and ignored.'% (num['number'], e['name'], num['type'])) continue # deal with number number=self.phonize(num['number']) if len(number)==0: # no actual digits in the number continue if len(number) > 48: # get this number from somewhere sensible # ::TODO:: number is too long and we have to either truncate it or ignore it? number=number[:48] # truncate for moment e['numbers'].append(number) # deal with speed dial sd=num.get("speeddial", None) if sd is not None and \ sd>=self.protocolclass.FIRSTSPEEDDIAL and \ sd<=self.protocolclass.LASTSPEEDDIAL: e['speeddials'].append(sd) else: e['speeddials'].append(None) if len(e['numbers']) ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgvx8560.py 4678 2008-08-13 23:46:56Z djpham $ """ Communicate with the LG VX8560 cell phone. (aka VX8610) """ # BitPim modules import common import com_brew import prototypes import com_lgvx9700 import p_lgvx8560 import helpids #------------------------------------------------------------------------------- parentphone=com_lgvx9700.Phone class Phone(parentphone): desc="LG-VX8560 (Chocolate 3)" protocolclass=p_lgvx8560 serialsname='lgvx8560' helpid=helpids.ID_PHONE_LGVX8560 my_model='VX8560' builtinringtones= ('Low Beep Once', 'Low Beeps', 'Loud Beep Once', 'Loud Beeps', 'Door Bell', 'VZW Default Ringtone') + \ tuple(['Ringtone '+`n` for n in range(1,21)]) + \ ('No Ring',) def setDMversion(self): self._DMv5 = False self._DMv6 = True self._timeout=5 # Assume a quick timeout # Fundamentals: # - get_esn - same as LG VX-8300 # - getgroups - same as LG VX-8700 # - getwallpaperindices - LGUncountedIndexedMedia # - getringtoneindices - LGUncountedIndexedMedia # - DM Version - 6 # - phonebook - same as LG VX-8550 with HPE entry VX8610 # - sms - same as LG VX-9700 # Calendar stuff------------------------------------------------------------ def _scheduleextras(self, data, fwversion): data.serial_number = '000000ca-00000000-00000000-' + fwversion data.unknown3 = 0x01fa #------------------------------------------------------------------------------- parentprofile=com_lgvx9700.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='VX8560' # inside screen resoluation WALLPAPER_WIDTH = 240 WALLPAPER_HEIGHT = 320 imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images(sd)")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video(sd)")) # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", {'width': 176, 'height': 220, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 240, 'height': 320, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 120, 'height': 100, 'format': "JPEG"})) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading ('memo', 'read', None), # all memo list reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('sms', 'write', 'OVERWRITE'), # all SMS list writing ('memo', 'write', 'OVERWRITE'), # all memo list writing ## ('playlist', 'read', 'OVERWRITE'), ## ('playlist', 'write', 'OVERWRITE'), ('t9_udb', 'write', 'OVERWRITE'), ) if __debug__: _supportedsyncs+=( ('t9_udb', 'read', 'OVERWRITE'), ) bitpim-1.0.7+dfsg1/src/phones/com_lgvx8600.py0000644001616600161660000001000310646567205016745 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgvx8600.py 4305 2007-07-16 04:05:25Z djpham $ """ Communicate with the LG VX8600 cell phone, which I was told is VERY similar to the VX-8500 """ # BitPim modules import common import com_lgvx8500 import p_lgvx8600 import helpids #------------------------------------------------------------------------------- parentphone=com_lgvx8500.Phone class Phone(parentphone): desc="LG-VX8600" helpid=helpids.ID_PHONE_LGVX8600 protocolclass=p_lgvx8600 serialsname='lgvx8600' my_model='VX8600' def setDMversion(self): _fw_version=self.get_firmware_version()[-1] # T86VZV03 uses DMv5 self._DMv5=self.my_model=='VX8600' and _fw_version>'2' if self._DMv5: # takes about 30 seconds for T86VZV03 to kick out of DM self._timeout = 30 # Fundamentals: # - get_esn - same as LG VX-8300 # - getgroups - same as LG VX-8100 # - getwallpaperindices - LGUncountedIndexedMedia # - getrintoneindices - LGUncountedIndexedMedia # - DM Version - T86VZV01 - T86VZV02: 4, T86VZV03: 5 #------------------------------------------------------------------------------- parentprofile=com_lgvx8500.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='VX8600' # inside screen resoluation WALLPAPER_WIDTH=176 WALLPAPER_HEIGHT=220 imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images(sd)")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video(sd)")) # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "fullscreen", {'width': 176, 'height': 220, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 176, 'height': 184, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", {'width': 128, 'height': 160, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 128, 'height': 142, 'format': "JPEG"})) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading ('memo', 'read', None), # all memo list reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('sms', 'write', 'OVERWRITE'), # all SMS list writing ('memo', 'write', 'OVERWRITE'), # all memo list writing ## ('playlist', 'read', 'OVERWRITE'), ## ('playlist', 'write', 'OVERWRITE'), ('t9_udb', 'write', 'OVERWRITE'), ) if __debug__: _supportedsyncs+=( ('t9_udb', 'read', 'OVERWRITE'), ) bitpim-1.0.7+dfsg1/src/phones/com_lgvx8610.py0000644001616600161660000000430511041674517016751 0ustar amuamu### BITPIM ### ### Copyright (C) 2008 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgvx8610.py 4641 2008-07-23 18:32:47Z djpham $ """ Communicate with the LG VX8610 (Decoy) cell phone. This is based on the enV2 model """ import common import com_lgvx9100 import p_lgvx9100 import helpids #------------------------------------------------------------------------------- parentphone=com_lgvx9100.Phone class Phone(parentphone): "Talk to the LG VX8610 (Decoy) cell phone" desc="LG-VX8610" helpid=helpids.ID_PHONE_LGVX8610 protocolclass=p_lgvx9100 serialsname='lgvx8610' my_model='VX8610' def __init__(self, logtarget, commport): parentphone.__init__(self, logtarget, commport) #------------------------------------------------------------------------------- parentprofile=com_lgvx9100.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='VX8610' WALLPAPER_WIDTH=240 WALLPAPER_HEIGHT=320 imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images(sd)")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video(sd)")) def GetImageOrigins(self): return self.imageorigins ## ringtoneorigins=('ringers', 'sounds', 'sounds(sd)',' music', 'music(sd)') ## excluded_ringtone_origins=('sounds', 'sounds(sd)', 'music', 'music(sd)') ringtoneorigins=('ringers', 'sounds', 'sounds(sd)') excluded_ringtone_origins=('sounds', 'sounds(sd)') # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 240, 'height': 320, 'format': "JPEG"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets bitpim-1.0.7+dfsg1/src/phones/com_brew.py0000644001616600161660000015407311323460305016410 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_brew.py 4783 2010-01-14 00:09:41Z djpham $ """Implements the "Brew" filesystem protocol""" import os import p_brew import time import cStringIO import com_phone import prototypes import common class BrewNotSupported(Exception): """This phone not supported""" pass class BrewCommandException(Exception): def __init__(self, errnum, str=None): if str is None: str="Brew Error 0x%02x" % (errnum,) Exception.__init__(self, str) self.errnum=errnum class BrewNoMoreEntriesException(BrewCommandException): def __init__(self, errnum=0x1c): BrewCommandException.__init__(self, errnum, "No more directory entries") class BrewNoSuchDirectoryException(BrewCommandException): def __init__(self, errnum=0x08): BrewCommandException.__init__(self, errnum, "No such directory") class BrewNoSuchFileException(BrewCommandException): def __init__(self, errnum=0x06): BrewCommandException.__init__(self, errnum, "No such file") class BrewBadPathnameException(BrewCommandException): def __init__(self, errnum=0x1a): BrewCommandException.__init__(self, errnum, "Bad pathname") class BrewFileLockedException(BrewCommandException): def __init__(self, errnum=0x0b): BrewCommandException.__init__(self, errnum, "File is locked") class BrewNameTooLongException(BrewCommandException): def __init__(self, errnum=0x0d): BrewCommandException.__init__(self, errnum, "Name is too long") class BrewDirectoryExistsException(BrewCommandException): def __init__(self, errnum=0x07): BrewCommandException.__init__(self, errnum, "Directory already exists") class BrewBadBrewCommandException(BrewCommandException): def __init__(self, errnum=0x100): BrewCommandException.__init__(self, errnum, "The phone did not recognise the brew command") class BrewMalformedBrewCommandException(BrewCommandException): def __init__(self, errnum=0x101): BrewCommandException.__init__(self, errnum, "The parameters in the last brew command were invalid") class BrewAccessDeniedException(BrewCommandException): def __init__(self, errnum=0x04, filename=None): BrewCommandException.__init__(self, errnum, "Access Denied. Access to the file/directory may be blocked on this phone") class BrewFileSystemFullException(BrewCommandException): def __init__(self, errnum=0x16, filename=None): BrewCommandException.__init__(self, errnum, "The phone has run out of space to store any more files") class BrewStatFileException(BrewCommandException): def __init__(self, errnum, filename): BrewCommandException.__init__(self, errnum, "Stat File %s errno %d"%(filename, errnum)) modeignoreerrortypes=com_phone.modeignoreerrortypes+(BrewCommandException,common.CommsDataCorruption) class _DirCache: """This is a class that lets you do various filesystem manipulations and it remembers the data. Typical usage would be if you make changes to files (adding, removing, rewriting) and then have to keep checking if files exist, add sizes etc. This class saves the hassle of rereading the directory every single time. Note that it will only see changes you make via this class. If you go directly to the Brew class then those won't be seen. """ def __init__(self, target): "@param target: where operations should be done after recording them here" self.__target=target self.__cache={} def rmfile(self, filename): res=self.__target.rmfile(filename) node=self._getdirectory(brewdirname(filename)) if node is None: # we didn't have it return del node[brewbasename(filename)] return res def stat(self, filename): node=self._getdirectory(brewdirname(filename), ensure=True) return node.get(brewbasename(filename), None) def readfile(self, filename): node=self._getdirectory(brewdirname(filename), ensure=True) file=node.get(brewbasename(filename), None) if file is None: raise BrewNoSuchFileException() # This class only populates the 'data' portion of the file obj when needed data=file.get('data', None) if data is None: data=self.__target.getfilecontents(filename) file['data']=data return data def writefile(self, filename, contents): res=self.__target.writefile(filename, contents) node=self._getdirectory(brewdirname(filename), ensure=True) # we can't put the right date in since we have no idea # what the timezone (or the time for that matter) on the # phone is stat=node.get(brewbasename(filename), {'name': filename, 'type': 'file', 'date': (0, "")}) stat['size']=len(contents) stat['data']=contents node[brewbasename(filename)]=stat return res def _getdirectory(self, dirname, ensure=False): if not ensure: return self.__cache.get(dirname, None) node=self.__cache.get(dirname, None) if node is not None: return node node={} fs=self.__target.getfilesystem(dirname) for filename in fs.keys(): node[brewbasename(filename)]=fs[filename] self.__cache[dirname]=node return node class DebugBrewProtocol: """ Emulate a phone file system using a local file system. This is used when you may not have access to a physical phone, but have a copy of its file system. """ MODEBREW="modebrew" _fs_path='' def __init__(self): pass def getfirmwareinformation(self): self.log("Getting firmware information") def explore0c(self): self.log("Trying stuff with command 0x0c") def offlinerequest(self, reset=False, delay=0): self.log("Taking phone offline") if reset: self.log("Resetting phone") def modemmoderequest(self): self.log("Attempting to put phone in modem mode") def mkdir(self, name): self.log("Making directory '"+name+"'") os.mkdir(os.path.join(self._fs_path, name)) def mkdirs(self, directory): if len(directory)<1: return dirs=directory.split('/') for i in range(0,len(dirs)): try: self.mkdir("/".join(dirs[:i+1])) # basically mkdir -p except: pass def rmdir(self,name): self.log("Deleting directory '"+name+"'") try: os.rmdir(os.path.join(self._fs_path, name)) except: # convert to brew exception raise BrewNoSuchDirectoryException def rmfile(self,name): self.log("Deleting file '"+name+"'") try: os.remove(os.path.join(self._fs_path, name)) except: # convert to brew exception raise BrewNoSuchFileException def rmdirs(self, path): self.progress(0,1, "Listing child files and directories") all=self.getfilesystem(path, 100) keys=all.keys() keys.sort() keys.reverse() count=0 for k in keys: self.progress(count, len(keys), "Deleting "+k) count+=1 if all[k]['type']=='directory': self.rmdir(k) else: self.rmfile(k) self.rmdir(path) def listfiles(self, dir=''): results={} self.log("Listing files in dir: '"+dir+"'") results={} _pwd=os.path.join(self._fs_path, dir) for _root,_dir,_file in os.walk(_pwd): break try: for f in _file: _stat=os.stat(os.path.join(_pwd, f)) _date=_stat[8] _name=dir+'/'+f _timestr='' try: # date is not always present in filesystem _timestr=time.strftime("%x %X", time.gmtime(_date)) except: pass results[_name]={ 'name': _name, 'type': 'file', 'size': _stat[6], 'date': (_date, _timestr) } except: pass # will happen if the directory does not exist return results def listsubdirs(self, dir='', recurse=0): results={} self.log("Listing subdirs in dir: '"+dir+"'") _pwd=os.path.join(self._fs_path, dir) for _root,_dir,_file in os.walk(_pwd): break for d in _dir: if len(dir): d=dir+"/"+d results[d]={ 'name': d, 'type': 'directory' } if recurse>0: results.update(self.listsubdirs(d, recurse-1)) return results def getfilesystem(self, dir="", recurse=0): results={} _file=[] _dir=[] self.log("Listing dir '"+dir+"'") _pwd=os.path.join(self._fs_path, dir) for _root,_dir,_file in os.walk(_pwd): break for f in _file: _stat=os.stat(os.path.join(_pwd, f)) _date=_stat[8] _name=dir+'/'+f _timestr='' try: # date is not always present in filesystem _timestr=time.strftime("%x %X", time.gmtime(_date)) except: pass results[_name]={ 'name': _name, 'type': 'file', 'size': _stat[6], 'date': (_date, _timestr) } for d in _dir: _name=dir+'/'+d results[_name]={ 'name': _name, 'type': 'directory' } if recurse>0: results.update(self.getfilesystem(_name, recurse-1)) return results def statfile(self, name): try: _stat=os.stat(os.path.join(self._fs_path, name)) _date=_stat[8] results={ 'name': name, 'type': 'file', 'size': _stat[6], 'datevalue': 0x0DEB0DEB, 'date': (_date, time.strftime("%x %X", time.gmtime(_date))) } return results except: # File does not exist, bail return None def writefile(self, name, contents): self.log("Writing file '"+name+"' bytes "+`len(contents)`) file(os.path.join(self._fs_path, name), 'wb').write(contents) def getfilecontents(self, name, use_cache=False): self.log("Getting file contents '"+name+"'") try: if name[0]=='/': return file(os.path.join(self._fs_path, name[1:]), 'rb').read() return file(os.path.join(self._fs_path, name), 'rb').read() except: raise BrewNoSuchFileException def get_brew_esn(self): # fake an ESN for debug mode return "DEBUGESN" def _setmodebrew(self): self.log('_setmodebrew: in mode BREW') return True def sendbrewcommand(self, request, responseclass, callsetmode=True): return NotImplementedError def log(self, s): print s def logdata(self, s, data, klass=None): print s def exists(self, path): return os.path.exists(os.path.join(self._fs_path, path)) DirCache=_DirCache class RealBrewProtocol: "Talk to a phone using the 'brew' protocol" MODEBREW="modebrew" brewterminator="\x7e" # phone uses Jan 6, 1980 as epoch. Python uses Jan 1, 1970. This is difference _brewepochtounix=315964800 def __init__(self): # reset default encoding p_brew.PHONE_ENCODING=p_brew.DEFAULT_PHONE_ENCODING def getfirmwareinformation(self): self.log("Getting firmware information") req=p_brew.firmwarerequest() res=self.sendbrewcommand(req, p_brew.firmwareresponse) def get_brew_esn(self): # return the ESN of this phone return '%0X'%self.sendbrewcommand(p_brew.ESN_req(), p_brew.ESN_resp).esn def explore0c(self): self.log("Trying stuff with command 0x0c") req=p_brew.testing0crequest() res=self.sendbrewcommand(req, p_brew.testing0cresponse) def offlinerequest(self, reset=False, delay=0): time.sleep(delay) req=p_brew.setmoderequest() req.request=1 self.log("Taking phone offline") self.sendbrewcommand(req, p_brew.setmoderesponse) time.sleep(delay) if reset: req=p_brew.setmoderequest() req.request=2 self.log("Resetting phone") self.sendbrewcommand(req, p_brew.setmoderesponse) def modemmoderequest(self): # Perhaps we should modify sendbrewcommand to have an option to # not be picky about response. self.log("Attempting to put phone in modem mode") req=p_brew.setmodemmoderequest() buffer=prototypes.buffer() req.writetobuffer(buffer, logtitle="modem mode request") data=buffer.getvalue() data=common.pppescape(data+common.crcs(data))+common.pppterminator self.comm.write(data) # Response could be text or a packet self.comm.readsome(numchars=5) self.mode=self.MODENONE # Probably should add a modem mode def mkdir(self, name): self.log("Making directory '"+name+"'") if self.isdir(name): raise BrewDirectoryExistsException req=p_brew.mkdirrequest() req.dirname=name try: self.sendbrewcommand(req, p_brew.mkdirresponse) except BrewDirectoryExistsException: # sometime the phone returns this, which is OK pass def mkdirs(self, directory): if len(directory)<1: return dirs=directory.split('/') for i in range(0,len(dirs)): try: self.mkdir("/".join(dirs[:i+1])) # basically mkdir -p except: pass def rmdir(self,name): self.log("Deleting directory '"+name+"'") req=p_brew.rmdirrequest() req.dirname=name self.sendbrewcommand(req, p_brew.rmdirresponse) def rmfile(self,name): self.log("Deleting file '"+name+"'") req=p_brew.rmfilerequest() req.filename=name self.sendbrewcommand(req, p_brew.rmfileresponse) file_cache.clear(name) def rmdirs(self, path): self.progress(0,1, "Listing child files and directories") all=self.getfilesystem(path, 100) keys=all.keys() keys.sort() keys.reverse() count=0 for k in keys: self.progress(count, len(keys), "Deleting "+k) count+=1 if all[k]['type']=='directory': self.rmdir(k) else: self.rmfile(k) self.rmdir(path) def exists(self, path): # Return True if this path (dir/file) exists return bool(self.statfile(path)) def isdir(self, path): # Return True if path refers to an existing dir if not self.statfile(path): # if it doesn't exist, bail return False # just try a list dirs command and see if it bombs out req=p_brew.listdirectoriesrequest(dirname=path) try: self.sendbrewcommand(req, p_brew.listdirectoriesresponse) except (BrewCommandException, BrewBadPathnameException, BrewNoSuchDirectoryException, BrewAccessDeniedException): return False except: if __debug__: raise return False return True def isfile(self, filename): # return True if filename is a file if not self.statfile(filename): return False # if it exists and not a dir, then it must be a file! return not self.isdir(filename) def basename(self, path): # return the basename of the path, does not check on whether the path # exists. _dirs=[x for x in path.split('/') if x] if _dirs: return _dirs[-1] return '' def dirname(self, filename): # return the dir name of the filename, does not check on whether # the file exists. _dirs=[x for x in filename.split('/') if x] if len(_dirs)<2: # either / or /name return '/' return '/'.join(_dirs[:-1]) def join(self, *args): # join the dir/file components and return the full path name return '/'.join([x.strip('/') for x in args if x]) def listsubdirs(self, dir='', recurse=0): results={} self.log("Listing subdirs in dir: '"+dir+"'") self.log("X recurse="+`recurse`) req=p_brew.listdirectoryrequest() req.dirname=dir for i in xrange(10000): try: req.entrynumber=i res=self.sendbrewcommand(req,p_brew.listdirectoryresponse) # sometimes subdir can already include the parent directory f=res.subdir.rfind("/") if f>=0: subdir=res.subdir[f+1:] else: subdir=res.subdir if len(dir): subdir=dir+"/"+subdir self.log("subdir="+subdir) results[subdir]={ 'name': subdir, 'type': 'directory' } except BrewNoMoreEntriesException: break except (BrewBadPathnameException, BrewAccessDeniedException): self.log('Failed to list dir '+dir) return {} if recurse: for k,_subdir in results.items(): results.update(self.listsubdirs(_subdir['name'], recurse-1)) return results def hassubdirs(self, dir=''): self.log('Checking for subdirs in dir: "'+dir+'"') req=p_brew.listdirectoryrequest() req.dirname=dir req.entrynumber=0 try: res=self.sendbrewcommand(req,p_brew.listdirectoryresponse) # there's at least one subdir return True except BrewNoMoreEntriesException: return False except: if __debug__: raise return False def listfiles(self, dir=''): results={} self.log("Listing files in dir: '"+dir+"'") _broken_date=hasattr(self.protocolclass, 'broken_filelist_date') and \ self.protocolclass.broken_filelist_date req=p_brew.listfilerequest() req.dirname=dir # self.log("file listing 0x0b command") for i in xrange(10000): try: req.entrynumber=i res=self.sendbrewcommand(req,p_brew.listfileresponse) results[res.filename]={ 'name': res.filename, 'type': 'file', 'size': res.size } if not _broken_date: if res.date<=0: results[res.filename]['date']=(0, "") else: try: date=res.date+self._brewepochtounix results[res.filename]['date']=(date, time.strftime("%x %X", time.localtime(date))) except: # invalid date - see SF bug #833517 results[res.filename]['date']=(0, "") except BrewNoMoreEntriesException: break except (BrewBadPathnameException, BrewAccessDeniedException): self.log('Failed to list files in dir '+dir) return {} if _broken_date: for _key,_entry in results.items(): _stat=self.statfile(_key) if _stat: _entry['date']=_stat.get('date', (0, '')) else: _entry['date']=(0, '') return results def getfilesystem(self, dir="", recurse=0): self.log("Getting file system in dir '"+dir+"'") results=self.listsubdirs(dir) subdir_list=[x['name'] for k,x in results.items()] results.update(self.listfiles(dir)) if recurse: for _subdir in subdir_list: results.update(self.getfilesystem(_subdir, recurse-1)) return results def statfile(self, name): # return the status of the file try: self.log('stat file '+name) req=p_brew.statfilerequest() req.filename=name res=self.sendbrewcommand(req, p_brew.statfileresponse) results={ 'name': name, 'type': 'file', 'size': res.size, 'datevalue': res.date } if res.date<=0: results['date']=(0, '') else: try: date=res.date+self._brewepochtounix results['date']=(date, time.strftime("%x %X", time.localtime(date))) except: # invalid date - see SF bug #833517 results['date']=(0, '') return results except (BrewCommandException, BrewNoSuchFileException): # File does not exist, bail return None except: # something happened, we don't have any info on this file if __debug__: raise return None def setfileattr(self, filename, date): # sets the date and time of the file on the phone self.log('set file date '+filename +`date`) req=p_brew.setfileattrrequest() # convert date to GPS time req.date=date-self._brewepochtounix req.filename=filename self.sendbrewcommand(req, p_brew.setfileattrresponse) def writefile(self, name, contents): start=time.time() self.log("Writing file '"+name+"' bytes "+`len(contents)`) desc="Writing "+name req=p_brew.writefilerequest() req.filesize=len(contents) req.data=contents[:0x100] req.filename=name self.sendbrewcommand(req, p_brew.writefileresponse) # do remaining blocks numblocks=len(contents)/0x100 count=0 for offset in range(0x100, len(contents), 0x100): req=p_brew.writefileblockrequest() count+=1 if count>=0x100: count=1 if count % 5==0: self.progress(offset>>8,numblocks,desc) req.blockcounter=count req.thereismore=offset+0x1003: self.log("Wrote "+`len(contents)`+" bytes at "+`int(len(contents)/(end-start))`+" bytes/second") def getfilecontents(self, file, use_cache=False): if use_cache: node=self.statfile(file) if node and file_cache.hit(file, node['date'][0], node['size']): self.log('Reading from cache: '+file) _data=file_cache.data(file) if _data: return _data self.log('Cache file corrupted and discarded') start=time.time() self.log("Getting file contents '"+file+"'") desc="Reading "+file data=cStringIO.StringIO() req=p_brew.readfilerequest() req.filename=file res=self.sendbrewcommand(req, p_brew.readfileresponse) filesize=res.filesize data.write(res.data) counter=0 while res.thereismore: counter+=1 if counter>0xff: counter=0x01 if counter%5==0: self.progress(data.tell(), filesize, desc) req=p_brew.readfileblockrequest() req.blockcounter=counter res=self.sendbrewcommand(req, p_brew.readfileblockresponse) data.write(res.data) self.progress(1,1,desc) data=data.getvalue() # give the download speed if we got a non-trivial amount of data end=time.time() if end-start>3: self.log("Read "+`filesize`+" bytes at "+`int(filesize/(end-start))`+" bytes/second") if filesize!=len(data): self.log("expected size "+`filesize`+" actual "+`len(data)`) self.raisecommsexception("Brew file read is incorrect size", common.CommsDataCorruption) if use_cache and node: file_cache.add(file, node.get('date', [0])[0], data) return data DirCache=_DirCache def _setmodebrew(self): req=p_brew.memoryconfigrequest() respc=p_brew.memoryconfigresponse try: self.sendbrewcommand(req, respc, callsetmode=False) return True except modeignoreerrortypes: pass for baud in 0, 38400,115200: if baud: if not self.comm.setbaudrate(baud): continue try: self.sendbrewcommand(req, respc, callsetmode=False) return True except modeignoreerrortypes: pass # send AT$CDMG at various speeds for baud in (0, 115200, 19200, 230400): if baud: if not self.comm.setbaudrate(baud): continue print "Baud="+`baud` try: for line in self.comm.sendatcommand("+GMM"): if line.find("SPH-A700")>0: raise BrewNotSupported("This phone is not supported by BitPim", self.desc) except modeignoreerrortypes: self.log("No response to AT+GMM") except: print "GMM Exception" self.mode=self.MODENONE self.comm.shouldloop=True raise try: self.comm.write("AT$QCDMG\r\n") except: # some issue during writing such as user pulling cable out self.mode=self.MODENONE self.comm.shouldloop=True raise try: # if we got OK back then it was success if self.comm.readsome().find("OK")>=0: break except modeignoreerrortypes: self.log("No response to setting QCDMG mode") # verify if we are in DM mode for baud in 0,38400,115200: if baud: if not self.comm.setbaudrate(baud): continue try: self.sendbrewcommand(req, respc, callsetmode=False) return True except modeignoreerrortypes: pass return False def sendbrewcommand(self, request, responseclass, callsetmode=True): if callsetmode: self.setmode(self.MODEBREW) buffer=prototypes.buffer() request.writetobuffer(buffer, logtitle="sendbrewcommand") data=buffer.getvalue() data=common.pppescape(data+common.crcs(data))+common.pppterminator firsttwo=data[:2] try: # we logged above, and below data=self.comm.writethenreaduntil(data, False, common.pppterminator, logreaduntilsuccess=False) except modeignoreerrortypes: self.mode=self.MODENONE self.raisecommsdnaexception("manipulating the filesystem") self.comm.success=True origdata=data # sometimes there is junk at the begining, eg if the user # turned off the phone and back on again. So if there is more # than one 7e in the escaped data we should start after the # second to last one d=data.rfind(common.pppterminator,0,-1) if d>=0: self.log("Multiple packets in data - taking last one starting at "+`d+1`) self.logdata("Original data", origdata, None) data=data[d+1:] # turn it back to normal data=common.pppunescape(data) # take off crc and terminator crc=data[-3:-1] data=data[:-3] # check the CRC at this point to see if we might have crap at the beginning calccrc=common.crcs(data) if calccrc!=crc: # sometimes there is other crap at the begining d=data.find(firsttwo) if d>0: self.log("Junk at begining of packet, data at "+`d`) self.logdata("Original data", origdata, None) self.logdata("Working on data", data, None) data=data[d:] # recalculate CRC without the crap calccrc=common.crcs(data) # see if the crc matches now if calccrc!=crc: self.logdata("Original data", origdata, None) self.logdata("Working on data", data, None) raise common.CommsDataCorruption("Brew packet failed CRC check", self.desc) # log it self.logdata("brew response", data, responseclass) if firsttwo=="Y\x0c" and data==firsttwo: # we are getting an echo - the modem port has been selected # instead of diagnostics port raise common.CommsWrongPort("The port you are using is echoing data back, and is not valid for Brew data. Most likely you have selected the modem interface when you should be using the diagnostic interface.", self.desc) # look for errors if data[0]=="Y" and data[2]!="\x00": # Y is 0x59 which is brew command prefix err=ord(data[2]) if err==0x1c: raise BrewNoMoreEntriesException() if err==0x08: raise BrewNoSuchDirectoryException() if err==0x06: raise BrewNoSuchFileException() if err==0x1a: raise BrewBadPathnameException() if err==0x0b: raise BrewFileLockedException() if err==0x0d: raise BrewNameTooLongException() if err==0x07: raise BrewDirectoryExistsException() if err==0x04: raise BrewAccessDeniedException() if err==0x16: raise BrewFileSystemFullException() raise BrewCommandException(err) # Starting with the vx8100/9800 verizon started to block access to some file and directories # it reports a bad command packet as the error when it really means access denied if ord(data[0])==0x13: if firsttwo[0]=="Y" or firsttwo[0]=="\x4b": # brew command raise BrewAccessDeniedException() else: raise BrewBadBrewCommandException() if ord(data[0])==0x14: raise BrewMalformedBrewCommandException() # access denied error if ord(data[0])==0x4b and ord(data[2])==0x1c: raise BrewAccessDeniedException() # parse data buffer=prototypes.buffer(data) res=responseclass() try: res.readfrombuffer(buffer, autolog=False) except: # we had an exception so log the data even if protocol log # view is not available self.log(formatpacketerrorlog("Error decoding response", origdata, data, responseclass)) raise return res class RealBrewProtocol2(RealBrewProtocol): """Talk to a phone using the 'brew' protocol This class uses the new filesystem commands which are supported by newer qualcomm chipsets used in phones like the LG vx8100 """ def exists(self, name): try: self.statfile(name) except BrewNoSuchFileException: return False return True def reconfig_directory(self): # not sure how important this is or even what it really does # but the product that was reverse engineered from sent this after # rmdir and mkdir, although it seems to work without it on the 8100 req=p_brew.new_reconfigfilesystemrequest() self.sendbrewcommand(req, p_brew.new_reconfigfilesystemresponse) def rmfile(self,name): self.log("Deleting file '"+name+"'") if self.exists(name): req=p_brew.new_rmfilerequest() req.filename=name self.sendbrewcommand(req, p_brew.new_rmfileresponse) file_cache.clear(name) def rmdir(self,name): self.log("Deleting directory '"+name+"'") if self.exists(name): req=p_brew.new_rmdirrequest() req.dirname=name self.sendbrewcommand(req, p_brew.new_rmdirresponse) self.reconfig_directory() def mkdir(self, name): self.log("Making directory '"+name+"'") if self.exists(name): raise BrewDirectoryExistsException req=p_brew.new_mkdirrequest() req.dirname=name self.sendbrewcommand(req, p_brew.new_mkdirresponse) self.reconfig_directory() def openfile(self, name, mode, flags=p_brew.new_fileopen_flag_existing): self.log("Open file '"+name+"'") req=p_brew.new_openfilerequest(filename=name, mode=mode, flags=flags) res=self.sendbrewcommand(req, p_brew.new_openfileresponse) return res.handle def closefile(self, handle): self.log("Close file") req=p_brew.new_closefilerequest(handle=handle) self.sendbrewcommand(req, p_brew.new_closefileresponse) def writefile(self, name, contents): start=time.time() self.log("Writing file '"+name+"' bytes "+`len(contents)`) desc="Writing "+name size=len(contents) exists=self.exists(name) if exists: info=self.statfile(name) current_size=info['size'] else: current_size=0 try: block_size = self.protocolclass.BREW_WRITE_SIZE except AttributeError: block_size = p_brew.BREW_WRITE_SIZE # if the current file is longer than the new one we have to # delete it because the write operation does not truncate it if exists and size block_size: req.bytes=block_size else: req.bytes=remain req.position=size-remain req.data=contents[req.position:(req.position+req.bytes)] count=(count&0xff)+1 if count % 5==0: self.progress(req.position,size,desc) res=self.sendbrewcommand(req, p_brew.new_writefileresponse) if res.bytes!=req.bytes: self.raisecommsexception("Brew file write error", common.CommsDataCorruption) remain-=req.bytes finally: # MUST close handle to file self.closefile(handle) self.progress(1,1,desc) end=time.time() if end-start>3: self.log("Wrote "+`len(contents)`+" bytes at "+`int(len(contents)/(end-start))`+" bytes/second") def getfilecontents(self, file, use_cache=False): node=self.statfile(file) if use_cache: if node and file_cache.hit(file, node['date'][0], node['size']): self.log('Reading from cache: '+file) _data=file_cache.data(file) if _data: return _data self.log('Cache file corrupted and discarded') try: block_size = self.protocolclass.BREW_READ_SIZE except AttributeError: block_size = p_brew.BREW_READ_SIZE start=time.time() self.log("Getting file contents '"+file+"'") desc="Reading "+file data=cStringIO.StringIO() handle=self.openfile(file, p_brew.new_fileopen_mode_read) try: filesize=node['size'] read=0 counter=0 req=p_brew.new_readfilerequest(handle=handle, bytes=block_size) while True: counter=(counter&0xff)+1 if counter%5==0: self.progress(data.tell(), filesize, desc) req.position=read res=self.sendbrewcommand(req, p_brew.new_readfileresponse) if res.bytes: data.write(res.data) read+=res.bytes else: break if read==filesize: break finally: # MUST close handle to file self.closefile(handle) self.progress(1,1,desc) data=data.getvalue() # give the download speed if we got a non-trivial amount of data end=time.time() if end-start>3: self.log("Read "+`filesize`+" bytes at "+`int(filesize/(end-start))`+" bytes/second") if filesize!=len(data): self.log("expected size "+`filesize`+" actual "+`len(data)`) self.raisecommsexception("Brew file read is incorrect size", common.CommsDataCorruption) if use_cache and node: file_cache.add(file, node.get('date', [0])[0], data) return data def getfilecontents2(self, filename, start, size): # read and return data a block of data from the specified file try: block_size = self.protocolclass.BREW_READ_SIZE except AttributeError: block_size = p_brew.BREW_READ_SIZE self.log("Getting file contents2 '"+filename+"'") desc="Reading "+filename data=cStringIO.StringIO() handle=self.openfile(filename, p_brew.new_fileopen_mode_read) _readsize=start+size try: read=start counter=0 while True: counter+=1 if counter%5==0: self.progress(read, _readsize, desc) req=p_brew.new_readfilerequest() req.handle=handle req.bytes=block_size req.position=read res=self.sendbrewcommand(req, p_brew.new_readfileresponse) if res.bytes: data.write(res.data) read+=res.bytes else: break if read>=_readsize: break finally: # MUST close handle to file self.closefile(handle) self.progress(1,1,desc) return data.getvalue()[:size] def _get_dir_handle(self, dirname): # return the handle to the specified dir req=p_brew.new_opendirectoryrequest(dirname=dirname if dirname else "/") res=self.sendbrewcommand(req, p_brew.new_opendirectoryresponse) if res.handle: return res.handle # dir does not exist raise BrewNoSuchDirectoryException def _close_dir(self, handle): req=p_brew.new_closedirectoryrequest(handle=handle) res=self.sendbrewcommand(req, p_brew.new_closedirectoryresponse) def listsubdirs(self, dir='', recurse=0): self.log("Listing subdirs in dir: '"+dir+"'") self.log("X recurse="+`recurse`) return self.getfilesystem(dir, recurse, files=0) def listfiles(self, dir=''): self.log("Listing files in dir: '"+dir+"'") return self.getfilesystem(dir, recurse=0, directories=0) def getfilesystem(self, dir="", recurse=0, directories=1, files=1): results={} self.log("Listing dir '"+dir+"'") handle=self._get_dir_handle(dir) dirs={} count=0 try: # get all the directory entries from the phone req=p_brew.new_listentryrequest(handle=handle) for i in xrange(1, 10000): req.entrynumber=i res=self.sendbrewcommand(req, p_brew.new_listentryresponse) if len(res.entryname) == 0: # signifies end of list break if len(dir): direntry=dir+"/"+res.entryname else: direntry=res.entryname if files and (res.type==0 or res.type == 0x0f): # file or special file results[direntry]={ 'name': direntry, 'type': 'file', 'size': res.size, 'special': res.type==0xf } try: if res.date<=0: results[direntry]['date']=(0, "") else: results[direntry]['date']=(res.date, time.strftime("%x %X", time.localtime(res.date))) except: results[direntry]['date']=(0, "") elif directories and (res.type and res.type != 0x0f): # directory results[direntry]={ 'name': direntry, 'type': 'directory' } if recurse>0: dirs[count]=direntry count+=1 finally: # we MUST close the handle regardless or we wont be able to list the filesystem # reliably again without rebooting it self._close_dir(handle) # recurse the subdirectories for i in range(count): results.update(self.getfilesystem(dirs[i], recurse-1)) return results def statfile(self, name): # return the status of the file self.log('stat file '+name) req=p_brew.new_statfilerequest() req.filename=name res=self.sendbrewcommand(req, p_brew.new_statfileresponse) if res.error==2: # ENOENT raise BrewNoSuchFileException elif res.error==0x13: # ENODEV # locked system file. example: /dev.null raise BrewFileLockedException elif res.error != 0: raise BrewStatFileException(res.error, name) ## if res.error==2 or res.error==0x13 or res.error!=0: ## return None if res.type==1 or res.type==0x86: # files on external media have type 0x86 results={ 'name': name, 'type': 'file', 'size': res.size } else: results={ 'name': name, 'type': 'directory' } try: if res.created_date<=0: results['date']=(0, '') else: results['date']=(res.created_date, time.strftime("%x %X", time.localtime(res.created_date))) except: # the date value got screwed up, just ignore it. results['date']=(0, '') return results phone_path=os.environ.get('PHONE_FS', None) if __debug__ and phone_path: DebugBrewProtocol._fs_path=os.path.normpath(phone_path) BrewProtocol=DebugBrewProtocol else: BrewProtocol=RealBrewProtocol del phone_path def formatpacketerrorlog(str, origdata, data, klass): # copied from guiwidgets.LogWindow.logdata hd="" if data is not None: hd="Data - "+`len(data)`+" bytes\n" if klass is not None: try: hd+="<#! %s.%s !#>\n" % (klass.__module__, klass.__name__) except: klass=klass.__class__ hd+="<#! %s.%s !#>\n" % (klass.__module__, klass.__name__) hd+=common.datatohexstring(data) if origdata is not None: hd+="\nOriginal Data - "+`len(data)`+" bytes\n"+common.datatohexstring(origdata) return str+" "+hd def brewbasename(str): "returns basename of str" if str.rfind("/")>0: return str[str.rfind("/")+1:] return str def brewdirname(str): "returns dirname of str" if str.rfind("/")>0: return str[:str.rfind("/")] return str class SPURIOUSZERO(prototypes.BaseProtogenClass): """This is a special class used to consume the spurious zero in some p_brew.listfileresponse The three bytes are formatted as follows: - An optional 'null' byte (this class) - A byte specifying how long the directory name portion is, including trailing slash - A byte specifying the length of the whole name - The bytes of the filename (which includes the full directory name) Fun and games ensue because files in the root directory have a zero length directory name, so we have some heuristics to try and distinguish if the first byte is the spurious zero or not Also allow for zero length filenames. """ def __init__(self, *args, **kwargs): super(SPURIOUSZERO,self).__init__(*args, **kwargs) self._value=None if self._ismostderived(SPURIOUSZERO): self._update(args, kwargs) def _update(self, args, kwargs): super(SPURIOUSZERO, self)._update(args, kwargs) self._complainaboutunusedargs(SPURIOUSZERO, kwargs) if len(args): raise TypeError("Unexpected arguments "+`args`) def readfrombuffer(self, buf): self._bufferstartoffset=buf.getcurrentoffset() # there are several cases this code has to deal with # # The data is ordered like this: # # optional spurious zero (sz) # dirlen # fulllen # name # # These are the various possibilities. The first two # are a file in the root directory (dirlen=0), with the other # two being a file in a subdirectory (dirlen>0). fulllen # is always >0 # # A: dirlen=0 fulllen name # B: sz dirlen=0 fulllen name # C: dirlen>0 fulllen name # D: sz dirlen>0 fulllen name while True: # this is just used so we can break easily # CASE C if buf.peeknextbyte()!=0: self._value=-1 break # CASE B if buf.peeknextbyte(1)==0: # If the filename is empty, we should see two zeros if buf.howmuchmore()==2: break self._value=buf.getnextbyte() # consume sz break # A & D are harder to distinguish since they both consist of a zero # followed by non-zero. Consequently we examine the data for # consistency all=buf.peeknextbytes(min(max(2+buf.peeknextbyte(1), 3+buf.peeknextbyte(2)), buf.howmuchmore())) # are the values consistent for D? ddirlen=ord(all[1]) dfulllen=ord(all[2]) if ddirlen0). fulllen # is always >0 # # A: fulllen=0 # B: ez fulllen=0 # C: fulllen>0 name # D: ez fulllen>0 name while True: # this is just used so we can break easily # CASE C if buf.peeknextbyte()!=0: self._value=-1 break # CASE A if buf.howmuchmore()==1: self._value=-1 break # Really a zero length file # CASE B or D self._value=buf.getnextbyte() # consume sz break self._bufferendoffset=buf.getcurrentoffset() def writetobuffer(self, buf): raise NotImplementedError() def packetsize(self): raise NotImplementedError() def getvalue(self): "Returns the string we are" if self._value is None: raise prototypes.ValueNotSetException() return self._value file_cache=None class EmptyFileCache(object): def __init__(self, bitpim_path): self._path=None self._cache_file_name=None self._data={ 'file_index': 0 } self.esn=None def hit(self, file_name, datetime, data_len): return False def data(self, file_name): return None def add(self, file_name, datetime, data): pass def clear(self, file_name): pass def set_path(self, bitpim_path): try: print 'setting path to',`bitpim_path` if not bitpim_path: raise ValueError # set the paths self.__class__=FileCache self._path=os.path.join(bitpim_path, 'cache') self._cache_file_name=os.path.join(self._path, self._cache_index_file_name) self._check_path() self._read_index() self._write_index() except: self.__class__=EmptyFileCache class FileCache(object): _cache_index_file_name='index.idx' current_version=1 def __init__(self, bitpim_path): self._path=os.path.join(bitpim_path, 'cache') self._cache_file_name=os.path.join(self._path, self._cache_index_file_name) self._data={ 'file_index': 0 } self.esn=None try: if not bitpim_path: raise ValueError self._check_path() self._read_index() self._write_index() except: # something's wrong, disable caching self.__class__=EmptyFileCache def _check_path(self): try: os.makedirs(self._path) except: pass if not os.path.isdir(self._path): raise Exception("Bad cache directory: '"+self._path+"'") def _read_index(self): self._check_path() d={ 'result': {} } try: common.readversionedindexfile(self._cache_file_name, d, None, self.current_version) self._data.update(d['result']) except: print 'failed to read cache index file' def _write_index(self): self._check_path() common.writeversionindexfile(self._cache_file_name, self._data, self.current_version) def _entry(self, file_name): k=self._data.get(self.esn, None) if k: return k.get(file_name, None) def hit(self, file_name, datetime, data_len): try: e=self._entry(file_name) if e: return e['datetime']==datetime and \ e['size']==data_len return False except: if __debug__: raise return False def data(self, file_name): try: e=self._entry(file_name) if e: _data=file(os.path.join(self._path, e['cache']), 'rb').read() if len(_data)==e['size']: return _data except IOError: return None except: if __debug__: raise return None def add(self, file_name, datetime, data): try: if self.esn: e=self._entry(file_name) if not e: # entry does not exist, create a new one self._data.setdefault(self.esn, {})[file_name]={} e=self._data[self.esn][file_name] e['cache']='F%05d'%self._data['file_index'] self._data['file_index']+=1 # entry exists, just update the data e['datetime']=datetime e['size']=len(data) _cache_file_name=os.path.join(self._path, e['cache']) try: file(_cache_file_name, 'wb').write(data) self._write_index() except IOError: # failed to write to cache file, drop this entry self._read_index() except: if __debug__: raise def clear(self, file_name): try: # clear this entry if it exists e=self._entry(file_name) if e: try: # remove the cache file os.remove(os.path.join(self._path, e['cache'])) except: pass # and remove the entry del self._data[self.esn][file_name] self._write_index() except: if __debug__: raise def set_path(self, bitpim_path): try: if not bitpim_path: raise ValueError # set the paths self.__class__=FileCache self._path=os.path.join(bitpim_path, 'cache') self._cache_file_name=os.path.join(self._path, self._cache_index_file_name) self._check_path() self._read_index() self._write_index() except: self.__class__=EmptyFileCache bitpim-1.0.7+dfsg1/src/phones/com_lgvx8700.py0000644001616600161660000002500211041434775016746 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2007 Nathan Hjelm ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### """ Communicate with the LG VX8700 cell phone """ # BitPim modules import common import com_phone import com_brew import prototypes import commport import p_brew import helpids import com_lgvx8300 import com_lgvx8500 import p_lgvx8700 DEBUG1=False #------------------------------------------------------------------------------- parentphone=com_lgvx8500.Phone class Phone(com_brew.RealBrewProtocol2, parentphone): "Talk to LG VX-8700 cell phone" desc="LG-VX8700" helpid=helpids.ID_PHONE_LGVX8700 protocolclass=p_lgvx8700 serialsname='lgvx8700' my_model='VX8700' builtinringtones= ('Low Beep Once', 'Low Beeps', 'Loud Beep Once', 'Loud Beeps', 'Door Bell', 'VZW Default Ringtone') + \ tuple(['Ringtone '+`n` for n in range(1,12)]) + \ ('No Ring',) ringtonelocations= ( # type index file default dir external dir max type index ('ringers', 'dload/myringtone.dat','brew/mod/10889/ringtones', '', 100, 0x01, 100), ( 'sounds', 'dload/mysound.dat', 'brew/mod/18067', '', 100, 0x02, None), ( 'sounds(sd)', 'dload/sd_sound.dat', 'mmc1/my_sounds', '', 100, 0x02, None), ( 'music', 'dload/efs_music.dat', 'my_music', '', 100, 0x104, None), ( 'music(sd)', 'dload/sd_music.dat', 'mmc1/my_music', '', 100, 0x14, None), ) wallpaperlocations= ( # type index file default dir external dir max type Index ( 'images', 'dload/image.dat', 'brew/mod/10888', '', 100, 0x00, 100), ( 'images(sd)', 'dload/sd_image.dat', 'mmc1/my_pix', '', 100, 0x10, None), ( 'video', 'dload/video.dat', 'brew/mod/10890', '', 100, 0x03, None), ( 'video(sd)', 'dload/sd_video.dat', 'mmc1/my_flix', '', 100, 0x13, None), ) def __init__(self, logtarget, commport): parentphone.__init__(self, logtarget, commport) def setDMversion(self): self._DMv5=True # Fundamentals: # - get_esn - same as LG VX-8300 # - getringtoneindices - LGUncountedIndexedMedia # - getwallpaperindices - LGUncountedIndexedMedia # phonebook def _update_pb_file(self, pb, fundamentals, pbinfo): # update the pbentry file update_flg=False for e in pb.items: _info=pbinfo.get(e.serial1, None) if _info: wp=_info.get('wallpaper', None) if wp is not None and wp!=e.wallpaper: update_flg=True e.wallpaper=wp if update_flg: self.log('Updating wallpaper index') buf=prototypes.buffer() pb.writetobuffer(buf, logtitle="Updated index "+self.protocolclass.pb_file_name) self.writefile(self.protocolclass.pb_file_name, buf.getvalue()) def savephonebook(self, data): "Saves out the phonebook" res=com_lgvx8300.Phone.savephonebook(self, data) # retrieve the phonebook entries _buf=prototypes.buffer(self.getfilecontents(self.protocolclass.pb_file_name)) _pb_entries=self.protocolclass.pbfile() _pb_entries.readfrombuffer(_buf, logtitle="Read phonebook file "+self.protocolclass.pb_file_name) _rt_index=data.get('ringtone-index', {}) _wp_index=data.get('wallpaper-index', {}) # update info that the phone software failed to do!! self._update_pb_info(_pb_entries, data) # fix up ringtone index self._write_path_index(_pb_entries, 'ringtone', _rt_index, self.protocolclass.RTPathIndexFile, (0xffff,)) # fix up wallpaer index self._write_path_index(_pb_entries, 'wallpaper', _wp_index, self.protocolclass.WPPathIndexFile, (0, 0xffff,)) return res # groups def getgroups(self, results): "Read groups" # Reads groups that use explicit IDs self.log("Reading group information") g=self.readobject(self.protocolclass.pb_group_filename, self.protocolclass.pbgroups, 'Reading groups data') groups={} for _group in g.groups: if _group.name: groups[_group.groupid]= { 'name': _group.name, 'user_added': _group.user_added } results['groups'] = groups return groups def savegroups(self, data): groups=data.get('groups', {}) keys=groups.keys() keys.sort() keys.reverse() g=self.protocolclass.pbgroups() # write the No Group entry first g.groups.append(self.protocolclass.pbgroup(name='No Group')) # now write the rest in reverse ID order for k in keys: if not k: # already wrote this one out continue g.groups.append(self.protocolclass.pbgroup(name=groups[k]['name'], groupid=k, user_added=groups[k].get('user_added', 1))) self.writeobject(self.protocolclass.pb_group_filename, g, logtitle='Writing phonebook groups', uselocalfs=DEBUG1) def listsubdirs(self, dir='', recurse=0): return com_brew.RealBrewProtocol2.getfilesystem(self, dir, recurse, directories=1, files=0) # ringtones and wallpapers stuff-------------------------------------------- def savewallpapers(self, results, merge): results['rebootphone']=True return self.savemedia('wallpapers', 'wallpaper-index', self.wallpaperlocations, results, merge, self.getwallpaperindices, True) def saveringtones(self, results, merge): # Let the phone rebuild the index file, just need to reboot results['rebootphone']=True return self.savemedia('ringtone', 'ringtone-index', self.ringtonelocations, results, merge, self.getringtoneindices, True) #------------------------------------------------------------------------------- parentprofile=com_lgvx8500.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='VX8700' # inside screen resoluation WALLPAPER_WIDTH=240 WALLPAPER_HEIGHT=320 imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images(sd)")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video(sd)")) # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "fullscreen", {'width': 238, 'height': 246, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 240, 'height': 274, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 120, 'height': 100, 'format': "JPEG"})) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading ('memo', 'read', None), # all memo list reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('sms', 'write', 'OVERWRITE'), # all SMS list writing ('memo', 'write', 'OVERWRITE'), # all memo list writing ('t9_udb', 'write', 'OVERWRITE'), ) if __debug__: _supportedsyncs+=( ('t9_udb', 'read', 'OVERWRITE'), ) # new group file format requires a new normalization routine def normalisegroups(self, helper, data): self.normalizegroups(helper, data) def normalizegroups(self, helper, data): "Assigns groups based on category data" pad=[] keys=data['groups'].keys() keys.sort() for k in keys: if k: # ignore key 0 which is 'No Group' name=data['groups'][k]['name'] pad.append(name) groups=helper.getmostpopularcategories(self.protocolclass.MAX_PHONEBOOK_GROUPS, data['phonebook'], ["No Group"], 32, pad) # alpha sort groups.sort() # newgroups newgroups={} # put in No group newgroups[0]={'name': 'No Group', 'user_added': 0} # populate for name in groups: # existing entries remain unchanged if name=="No Group": continue key,value=self._getgroup(name, data['groups']) if key is not None and key!=0: newgroups[key]=value # new entries get whatever numbers are free for name in groups: key,value=self._getgroup(name, newgroups) if key is None: for key in range(1,100000): if key not in newgroups: newgroups[key]={'name': name, 'user_added': 1} break # yay, done if data['groups']!=newgroups: data['groups']=newgroups data['rebootphone']=True bitpim-1.0.7+dfsg1/src/phones/p_sanyo8100_bell.p0000644001616600161660000000672310535711164017405 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Stephen Wood ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_sanyo8100_bell.p 3753 2006-12-07 04:03:00Z sawecw $ %{ """Various descriptions of data specific to Sanyo SCP-8100""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 _NUMCALLHISTORY=20 _MAXNUMBERLEN=48 _MAXEMAILLEN=48 %} PACKET phonenumber: 1 UINT {'default': 0} +number_len 49 USTRING {'default': ""} +number PACKET phonebookentry: 2 UINT slot 2 UINT slotdup 16 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} name * LIST {'length': 7, 'createdefault': True, 'elementclass': phonenumber} +numbers 1 UINT +email_len 49 USTRING {'default': ""} +email 1 UINT +url_len 49 USTRING {'default': ""} +url 1 BOOL +secret 1 UINT name_len PACKET phonebookslotresponse: * sanyoheader header * phonebookentry entry * UNKNOWN pad PACKET phonebookslotupdaterequest: * sanyowriteheader {'packettype': 0x0c, 'command': 0x28} +header * phonebookentry entry 500 UNKNOWN +pad PACKET evententry: 1 UINT slot 1 UINT flag "0: Not used, 1: Scheduled, 2: Already Happened" 14 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} eventname 7 UNKNOWN +pad1 1 UINT eventname_len 4 UINT start "# seconds since Jan 1, 1980 approximately" 4 UINT end 14 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} location 7 UNKNOWN +pad2 1 UINT location_len 1 UNKNOWN +pad3 4 UINT alarmdiff "Displayed alarm time" 1 UINT period "No, Daily, Weekly, Monthly, Yearly" 1 UINT dom "Day of month for the event" 4 UINT alarm 1 UINT {'default': 0} +serial "Some kind of serial number" 3 UNKNOWN +pad4 1 UINT ringtone "0: Beep, 1: Voice, 2: Silent" PACKET eventresponse: * sanyoheader header * evententry entry * UNKNOWN pad PACKET eventupdaterequest: * sanyowriteheader {'packettype': 0x0c, 'command':0x23} +header * evententry entry 400 UNKNOWN +pad PACKET callalarmentry: P UINT {'constant': 0} ringtone 1 UINT slot 1 UINT flag "0: Not used, 1: Scheduled, 2: Already Happened" 1 UINT {'default': 0} +dunno1 "Related to Snooze?" 49 USTRING {'raiseonunterminatedread': False} phonenum 1 UINT phonenum_len 4 UINT date "# seconds since Jan 1, 1980 approximately" 1 UINT period "No, Daily, Weekly, Monthly, Yearly" 1 UINT dom "Day of month for the event" 4 UINT datedup "Copy of the date. Always the same???" 16 USTRING {'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None} name 1 UNKNOWN +pad1 1 UINT name_len 1 UINT phonenumbertype "1: Home, 2: Work, ..." 2 UINT phonenumberslot 1 UINT {'default': 0} +serial PACKET callalarmresponse: * sanyoheader header * callalarmentry entry * UNKNOWN pad PACKET callalarmupdaterequest: * sanyowriteheader {'packettype': 0x0c, 'command':0x24} +header * callalarmentry entry 400 UNKNOWN +pad bitpim-1.0.7+dfsg1/src/phones/p_etsi.py0000644001616600161660000005354710555026112016102 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to GSM phones""" from prototypes import * from prototypeslg import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb class echo_off(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(echo_off,self).__init__(**dict) if self.__class__ is echo_off: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(echo_off,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(echo_off,kwargs) if len(args): dict2={ 'terminator': None, 'default': 'E0V1' } dict2.update(kwargs) kwargs=dict2 self.__field_command=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': 'E0V1' }) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': 'E0V1' }) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': 'E0V1' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': 'E0V1' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class esnrequest(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(esnrequest,self).__init__(**dict) if self.__class__ is esnrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(esnrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(esnrequest,kwargs) if len(args): dict2={ 'terminator': None, 'default': '+GSN' } dict2.update(kwargs) kwargs=dict2 self.__field_command=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+GSN' }) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+GSN' }) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+GSN' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+GSN' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class esnresponse(BaseProtogenClass): __fields=['command', 'esn'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(esnresponse,self).__init__(**dict) if self.__class__ is esnresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(esnresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(esnresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_esn.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'default': '+GSN'}) self.__field_command.readfrombuffer(buf) self.__field_esn=CSVSTRING(**{'quotechar': None, 'terminator': None}) self.__field_esn.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'default': '+GSN'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_esn(self): return self.__field_esn.getvalue() def __setfield_esn(self, value): if isinstance(value,CSVSTRING): self.__field_esn=value else: self.__field_esn=CSVSTRING(value,**{'quotechar': None, 'terminator': None}) def __delfield_esn(self): del self.__field_esn esn=property(__getfield_esn, __setfield_esn, __delfield_esn, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('esn', self.__field_esn, None) class SIM_ID_Req(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SIM_ID_Req,self).__init__(**dict) if self.__class__ is SIM_ID_Req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SIM_ID_Req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SIM_ID_Req,kwargs) if len(args): dict2={ 'terminator': None, 'default': '+CIMI' } dict2.update(kwargs) kwargs=dict2 self.__field_command=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CIMI' }) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CIMI' }) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+CIMI' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+CIMI' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class single_value_resp(BaseProtogenClass): __fields=['value'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(single_value_resp,self).__init__(**dict) if self.__class__ is single_value_resp: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(single_value_resp,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(single_value_resp,kwargs) if len(args): dict2={ 'terminator': None } dict2.update(kwargs) kwargs=dict2 self.__field_value=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_value.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_value=USTRING(**{ 'terminator': None }) self.__field_value.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_value(self): return self.__field_value.getvalue() def __setfield_value(self, value): if isinstance(value,USTRING): self.__field_value=value else: self.__field_value=USTRING(value,**{ 'terminator': None }) def __delfield_value(self): del self.__field_value value=property(__getfield_value, __setfield_value, __delfield_value, None) def iscontainer(self): return True def containerelements(self): yield ('value', self.__field_value, None) class manufacturer_id_req(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(manufacturer_id_req,self).__init__(**dict) if self.__class__ is manufacturer_id_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(manufacturer_id_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(manufacturer_id_req,kwargs) if len(args): dict2={ 'terminator': None, 'default': '+GMI'} dict2.update(kwargs) kwargs=dict2 self.__field_command=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+GMI'}) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+GMI'}) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+GMI'}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+GMI'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class model_id_req(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(model_id_req,self).__init__(**dict) if self.__class__ is model_id_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(model_id_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(model_id_req,kwargs) if len(args): dict2={ 'terminator': None, 'default': '+GMM' } dict2.update(kwargs) kwargs=dict2 self.__field_command=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+GMM' }) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+GMM' }) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+GMM' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+GMM' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class firmware_version_req(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(firmware_version_req,self).__init__(**dict) if self.__class__ is firmware_version_req: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(firmware_version_req,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(firmware_version_req,kwargs) if len(args): dict2={ 'terminator': None, 'default': '+GMR' } dict2.update(kwargs) kwargs=dict2 self.__field_command=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+GMR' }) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=USTRING(**{ 'terminator': None, 'default': '+GMR' }) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=USTRING(**{ 'terminator': None, 'default': '+GMR' }) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,USTRING): self.__field_command=value else: self.__field_command=USTRING(value,**{ 'terminator': None, 'default': '+GMR' }) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) bitpim-1.0.7+dfsg1/src/phones/com_lgvx8800.py0000644001616600161660000001302311050126425016735 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2007 Nathan Hjelm ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### $Id: com_lgvx8800.py 4671 2008-08-11 21:20:21Z djpham $ """ Communicate with the LG VX8800 cell phone. """ # BitPim modules import common import com_brew import prototypes import com_lgvx8550 import p_lgvx8800 import helpids #------------------------------------------------------------------------------- parentphone=com_lgvx8550.Phone class Phone(parentphone): desc="LG-VX8800" helpid=helpids.ID_PHONE_LGVX8800 protocolclass=p_lgvx8800 serialsname='lgvx8800' my_model='VX8800' builtinringtones= ('Low Beep Once', 'Low Beeps', 'Loud Beep Once', 'Loud Beeps', 'Door Bell', 'VZW Default Ringtone') + \ tuple(['Ringtone '+`n` for n in range(1,20)]) + \ ('No Ring',) def setDMversion(self): self._DMv6=True self._DMv5=False self._timeout=5 # The Voyager/Venus time out fast # Fundamentals: # - get_esn - same as LG VX-8300 # - getgroups - same as LG VX-8700 # - getwallpaperindices - LGUncountedIndexedMedia # - getringtoneindices - LGUncountedIndexedMedia # - DM Version - 5 # - phonebook - same as LG VX-8550 def _readsms(self): res={} # The Voyager and Venus use index files to keep track of SMS messages for item in self.getindex(self.protocolclass.drafts_index): buf=prototypes.buffer(self.getfilecontents(item.filename, True)) self.logdata("SMS message file " +item.filename, buf.getdata()) sf=self.protocolclass.sms_saved() sf.readfrombuffer(buf, logtitle="SMS saved item") entry=self._getoutboxmessage(sf.outbox) entry.folder=entry.Folder_Saved res[entry.id]=entry for item in self.getindex(self.protocolclass.inbox_index): buf=prototypes.buffer(self.getfilecontents(item.filename, True)) self.logdata("SMS message file " +item.filename, buf.getdata()) sf=self.protocolclass.sms_in() sf.readfrombuffer(buf, logtitle="SMS inbox item") entry=self._getinboxmessage(sf) res[entry.id]=entry for item in self.getindex(self.protocolclass.outbox_index): buf=prototypes.buffer(self.getfilecontents(item.filename, True)) self.logdata("SMS message file " +item.filename, buf.getdata()) sf=self.protocolclass.sms_out() sf.readfrombuffer(buf, logtitle="SMS sent item") entry=self._getoutboxmessage(sf) res[entry.id]=entry return res def _scheduleextras(self, data, fwversion): data.serial_number = '000000cc-00000000-00000000-' + fwversion data.unknown3 = 0x00f9 #------------------------------------------------------------------------------- parentprofile=com_lgvx8550.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='VX8800' # inside screen resoluation WALLPAPER_WIDTH = 240 WALLPAPER_HEIGHT = 320 imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images(sd)")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video(sd)")) # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "fullscreen", {'width': 240, 'height': 320, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 240, 'height': 496, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 120, 'height': 100, 'format': "JPEG"})) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading ('memo', 'read', None), # all memo list reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ('ringtone', 'write', 'OVERWRITE'), ('sms', 'write', 'OVERWRITE'), # all SMS list writing ('memo', 'write', 'OVERWRITE'), # all memo list writing ## ('playlist', 'read', 'OVERWRITE'), ## ('playlist', 'write', 'OVERWRITE'), ('t9_udb', 'write', 'OVERWRITE'), ) if __debug__: _supportedsyncs+=( ('t9_udb', 'read', 'OVERWRITE'), ) bitpim-1.0.7+dfsg1/src/phones/p_sanyo3100.py0000644001616600161660000004212110537164166016571 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Sanyo MM-3100""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * from p_brew import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 # Need to check. Is max phone will hold 32/96 or 33/97 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 HASRINGPICBUF=0 #BREW_FILE_SYSTEM=2 class req41(BaseProtogenClass): __fields=['fortyone', 'msl'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(req41,self).__init__(**dict) if self.__class__ is req41: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(req41,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(req41,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_fortyone except: self.__field_fortyone=UINT(**{'sizeinbytes': 1, 'default': 0x41}) self.__field_fortyone.writetobuffer(buf) self.__field_msl.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_fortyone=UINT(**{'sizeinbytes': 1, 'default': 0x41}) self.__field_fortyone.readfrombuffer(buf) self.__field_msl=USTRING(**{'sizeinbytes': 6, 'terminator': None}) self.__field_msl.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_fortyone(self): try: self.__field_fortyone except: self.__field_fortyone=UINT(**{'sizeinbytes': 1, 'default': 0x41}) return self.__field_fortyone.getvalue() def __setfield_fortyone(self, value): if isinstance(value,UINT): self.__field_fortyone=value else: self.__field_fortyone=UINT(value,**{'sizeinbytes': 1, 'default': 0x41}) def __delfield_fortyone(self): del self.__field_fortyone fortyone=property(__getfield_fortyone, __setfield_fortyone, __delfield_fortyone, None) def __getfield_msl(self): return self.__field_msl.getvalue() def __setfield_msl(self, value): if isinstance(value,USTRING): self.__field_msl=value else: self.__field_msl=USTRING(value,**{'sizeinbytes': 6, 'terminator': None}) def __delfield_msl(self): del self.__field_msl msl=property(__getfield_msl, __setfield_msl, __delfield_msl, None) def iscontainer(self): return True def containerelements(self): yield ('fortyone', self.__field_fortyone, None) yield ('msl', self.__field_msl, None) class res41(BaseProtogenClass): __fields=['fortyone', 'ans'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(res41,self).__init__(**dict) if self.__class__ is res41: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(res41,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(res41,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_fortyone.writetobuffer(buf) self.__field_ans.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_fortyone=UINT(**{'sizeinbytes': 1, 'default': 0x41}) self.__field_fortyone.readfrombuffer(buf) self.__field_ans=UINT(**{'sizeinbytes': 1}) self.__field_ans.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_fortyone(self): return self.__field_fortyone.getvalue() def __setfield_fortyone(self, value): if isinstance(value,UINT): self.__field_fortyone=value else: self.__field_fortyone=UINT(value,**{'sizeinbytes': 1, 'default': 0x41}) def __delfield_fortyone(self): del self.__field_fortyone fortyone=property(__getfield_fortyone, __setfield_fortyone, __delfield_fortyone, None) def __getfield_ans(self): return self.__field_ans.getvalue() def __setfield_ans(self, value): if isinstance(value,UINT): self.__field_ans=value else: self.__field_ans=UINT(value,**{'sizeinbytes': 1}) def __delfield_ans(self): del self.__field_ans ans=property(__getfield_ans, __setfield_ans, __delfield_ans, None) def iscontainer(self): return True def containerelements(self): yield ('fortyone', self.__field_fortyone, None) yield ('ans', self.__field_ans, None) class fastatusrequest(BaseProtogenClass): __fields=['preamble', 'command', 'packettype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(fastatusrequest,self).__init__(**dict) if self.__class__ is fastatusrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(fastatusrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(fastatusrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_preamble except: self.__field_preamble=sanyofaheader(**{'faset': 0x13}) self.__field_preamble.writetobuffer(buf) try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_command.writetobuffer(buf) try: self.__field_packettype except: self.__field_packettype=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_packettype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_preamble=sanyofaheader(**{'faset': 0x13}) self.__field_preamble.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_command.readfrombuffer(buf) self.__field_packettype=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_packettype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_preamble(self): try: self.__field_preamble except: self.__field_preamble=sanyofaheader(**{'faset': 0x13}) return self.__field_preamble.getvalue() def __setfield_preamble(self, value): if isinstance(value,sanyofaheader): self.__field_preamble=value else: self.__field_preamble=sanyofaheader(value,**{'faset': 0x13}) def __delfield_preamble(self): del self.__field_preamble preamble=property(__getfield_preamble, __setfield_preamble, __delfield_preamble, None) def __getfield_command(self): try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_packettype(self): try: self.__field_packettype except: self.__field_packettype=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_packettype.getvalue() def __setfield_packettype(self, value): if isinstance(value,UINT): self.__field_packettype=value else: self.__field_packettype=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_packettype(self): del self.__field_packettype packettype=property(__getfield_packettype, __setfield_packettype, __delfield_packettype, None) def iscontainer(self): return True def containerelements(self): yield ('preamble', self.__field_preamble, None) yield ('command', self.__field_command, None) yield ('packettype', self.__field_packettype, None) class fastatusresponse(BaseProtogenClass): __fields=['preamble', 'status', 'packettype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(fastatusresponse,self).__init__(**dict) if self.__class__ is fastatusresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(fastatusresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(fastatusresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_preamble except: self.__field_preamble=sanyofaheader() self.__field_preamble.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_packettype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_preamble=sanyofaheader() self.__field_preamble.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_status.readfrombuffer(buf) self.__field_packettype=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_packettype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_preamble(self): try: self.__field_preamble except: self.__field_preamble=sanyofaheader() return self.__field_preamble.getvalue() def __setfield_preamble(self, value): if isinstance(value,sanyofaheader): self.__field_preamble=value else: self.__field_preamble=sanyofaheader(value,) def __delfield_preamble(self): del self.__field_preamble preamble=property(__getfield_preamble, __setfield_preamble, __delfield_preamble, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_packettype(self): return self.__field_packettype.getvalue() def __setfield_packettype(self, value): if isinstance(value,UINT): self.__field_packettype=value else: self.__field_packettype=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_packettype(self): del self.__field_packettype packettype=property(__getfield_packettype, __setfield_packettype, __delfield_packettype, None) def iscontainer(self): return True def containerelements(self): yield ('preamble', self.__field_preamble, None) yield ('status', self.__field_status, None) yield ('packettype', self.__field_packettype, None) class response(BaseProtogenClass): __fields=['pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(response,self).__init__(**dict) if self.__class__ is response: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(response,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(response,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_pad=UNKNOWN(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('pad', self.__field_pad, None) bitpim-1.0.7+dfsg1/src/phones/p_lglx260.py0000644001616600161660000051120411047222660016324 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE # Based on p_lglx5500.p """Various descriptions of data specific to LG LX260""" from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx4400 except as noted # below from p_lgvx4400 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NOWALLPAPER=1 NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=499 MAXCALENDARDESCRIPTION=38 MAX_PHONEBOOK_GROUPS=0 NUMEMAILS=3 NUMPHONENUMBERS=5 MEMOLENGTH=32 # Calendar parameters NUMCALENDARENTRIES=300 CAL_REP_NONE=0x10 CAL_REP_DAILY=0x11 CAL_REP_MONFRI=0x12 CAL_REP_WEEKLY=0x13 CAL_REP_MONTHLY=0x14 CAL_REP_YEARLY=0x15 CAL_DOW_SUN=0x0800 CAL_DOW_MON=0x0400 CAL_DOW_TUE=0x0200 CAL_DOW_WED=0x0100 CAL_DOW_THU=0x0080 CAL_DOW_FRI=0x0040 CAL_DOW_SAT=0x0020 CAL_DOW_EXCEPTIONS=0x0010 CAL_REMINDER_NONE=0 CAL_REMINDER_ONTIME=1 CAL_REMINDER_5MIN=2 CAL_REMINDER_10MIN=3 CAL_REMINDER_1HOUR=4 CAL_REMINDER_1DAY=5 CAL_REMINDER_2DAYS=6 CAL_NO_VOICE=0xffff CAL_REPEAT_DATE=(2100, 12, 31) numbertypetab=( 'cell', 'home', 'office', 'fax', 'pager' ) cal_dir='sch' cal_voice_ext='.qcp' # full name='sche000.qcp' cal_data_file_name='sch/schedule.dat' cal_exception_file_name='sch/schexception.dat' cal_voice_id_ofs=0x0f cal_has_voice_id=True PHONE_ENCODING='iso8859_1' class pbgroup(BaseProtogenClass): "A single group" __fields=['icon', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroup,self).__init__(**dict) if self.__class__ is pbgroup: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroup,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroup,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_icon.writetobuffer(buf) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_icon=UINT(**{'sizeinbytes': 1}) self.__field_icon.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_icon(self): return self.__field_icon.getvalue() def __setfield_icon(self, value): if isinstance(value,UINT): self.__field_icon=value else: self.__field_icon=UINT(value,**{'sizeinbytes': 1}) def __delfield_icon(self): del self.__field_icon icon=property(__getfield_icon, __setfield_icon, __delfield_icon, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('icon', self.__field_icon, None) yield ('name', self.__field_name, None) class pbgroups(BaseProtogenClass): "Phonebook groups" __fields=['groups'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroups,self).__init__(**dict) if self.__class__ is pbgroups: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroups,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroups,kwargs) if len(args): dict2={'elementclass': pbgroup} dict2.update(kwargs) kwargs=dict2 self.__field_groups=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_groups(self): try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) return self.__field_groups.getvalue() def __setfield_groups(self, value): if isinstance(value,LIST): self.__field_groups=value else: self.__field_groups=LIST(value,**{'elementclass': pbgroup}) def __delfield_groups(self): del self.__field_groups groups=property(__getfield_groups, __setfield_groups, __delfield_groups, None) def iscontainer(self): return True def containerelements(self): yield ('groups', self.__field_groups, None) class speeddial(BaseProtogenClass): __fields=['entry', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddial,self).__init__(**dict) if self.__class__ is speeddial: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddial,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddial,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.writetobuffer(buf) try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.readfrombuffer(buf) self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,UINT): self.__field_entry=value else: self.__field_entry=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_number(self): try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,UINT): self.__field_number=value else: self.__field_number=UINT(value,**{'sizeinbytes': 1, 'default': 0xff}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('entry', self.__field_entry, None) yield ('number', self.__field_number, None) class speeddials(BaseProtogenClass): __fields=['speeddials'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddials,self).__init__(**dict) if self.__class__ is speeddials: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddials,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddials,kwargs) if len(args): dict2={'length': NUMSPEEDDIALS, 'elementclass': speeddial} dict2.update(kwargs) kwargs=dict2 self.__field_speeddials=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_speeddials(self): try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) return self.__field_speeddials.getvalue() def __setfield_speeddials(self, value): if isinstance(value,LIST): self.__field_speeddials=value else: self.__field_speeddials=LIST(value,**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) def __delfield_speeddials(self): del self.__field_speeddials speeddials=property(__getfield_speeddials, __setfield_speeddials, __delfield_speeddials, None) def iscontainer(self): return True def containerelements(self): yield ('speeddials', self.__field_speeddials, None) class indexentry(BaseProtogenClass): __fields=['index', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_index.writetobuffer(buf) try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 50, 'default': ""}) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_index.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 50, 'default': ""}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 50, 'default': ""}) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 50, 'default': ""}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('name', self.__field_name, None) class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['numactiveitems', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('items', self.__field_items, None) class pbentry(BaseProtogenClass): __fields=['wallpaper', 'serial1', 'entrysize', 'serial2', 'entrynumber', 'unknown0', 'name', 'unknown1', 'group', 'unknown1a', 'memo', 'emails', 'url', 'unknownf1', 'unknownf2', 'unknownf3', 'unknownf4', 'unknownf5', 'numbertypes', 'numbers', 'unknown2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_wallpaper except: self.__field_wallpaper=UINT(**{'default': 0}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_serial1.writetobuffer(buf) try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x02A0}) self.__field_entrysize.writetobuffer(buf) self.__field_serial2.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) try: self.__field_unknown0 except: self.__field_unknown0=UINT(**{'sizeinbytes': 2, 'default': 0}) self.__field_unknown0.writetobuffer(buf) self.__field_name.writetobuffer(buf) try: self.__field_unknown1 except: self.__field_unknown1=UNKNOWN(**{'sizeinbytes': 40}) self.__field_unknown1.writetobuffer(buf) self.__field_group.writetobuffer(buf) try: self.__field_unknown1a except: self.__field_unknown1a=UNKNOWN(**{'sizeinbytes': 7}) self.__field_unknown1a.writetobuffer(buf) self.__field_memo.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lglx260_126, 'length': NUMEMAILS}) self.__field_emails.writetobuffer(buf) self.__field_url.writetobuffer(buf) try: self.__field_unknownf1 except: self.__field_unknownf1=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_unknownf1.writetobuffer(buf) try: self.__field_unknownf2 except: self.__field_unknownf2=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_unknownf2.writetobuffer(buf) try: self.__field_unknownf3 except: self.__field_unknownf3=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_unknownf3.writetobuffer(buf) try: self.__field_unknownf4 except: self.__field_unknownf4=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_unknownf4.writetobuffer(buf) try: self.__field_unknownf5 except: self.__field_unknownf5=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_unknownf5.writetobuffer(buf) try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lglx260_134, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lglx260_136, 'length': NUMPHONENUMBERS}) self.__field_numbers.writetobuffer(buf) try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_unknown2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x02A0}) self.__field_entrysize.readfrombuffer(buf) self.__field_serial2=UINT(**{'sizeinbytes': 4}) self.__field_serial2.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 2}) self.__field_entrynumber.readfrombuffer(buf) self.__field_unknown0=UINT(**{'sizeinbytes': 2, 'default': 0}) self.__field_unknown0.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': True}) self.__field_name.readfrombuffer(buf) self.__field_unknown1=UNKNOWN(**{'sizeinbytes': 40}) self.__field_unknown1.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 2}) self.__field_group.readfrombuffer(buf) self.__field_unknown1a=UNKNOWN(**{'sizeinbytes': 7}) self.__field_unknown1a.readfrombuffer(buf) self.__field_memo=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': True}) self.__field_memo.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_lglx260_126, 'length': NUMEMAILS}) self.__field_emails.readfrombuffer(buf) self.__field_url=USTRING(**{'sizeinbytes': 73, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': True}) self.__field_url.readfrombuffer(buf) self.__field_unknownf1=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_unknownf1.readfrombuffer(buf) self.__field_unknownf2=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_unknownf2.readfrombuffer(buf) self.__field_unknownf3=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_unknownf3.readfrombuffer(buf) self.__field_unknownf4=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_unknownf4.readfrombuffer(buf) self.__field_unknownf5=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_unknownf5.readfrombuffer(buf) self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lglx260_134, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.readfrombuffer(buf) self.__field_numbers=LIST(**{'elementclass': _gen_p_lglx260_136, 'length': NUMPHONENUMBERS}) self.__field_numbers.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_unknown2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'default': 0}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_entrysize(self): try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x02A0}) return self.__field_entrysize.getvalue() def __setfield_entrysize(self, value): if isinstance(value,UINT): self.__field_entrysize=value else: self.__field_entrysize=UINT(value,**{'sizeinbytes': 2, 'constant': 0x02A0}) def __delfield_entrysize(self): del self.__field_entrysize entrysize=property(__getfield_entrysize, __setfield_entrysize, __delfield_entrysize, None) def __getfield_serial2(self): return self.__field_serial2.getvalue() def __setfield_serial2(self, value): if isinstance(value,UINT): self.__field_serial2=value else: self.__field_serial2=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial2(self): del self.__field_serial2 serial2=property(__getfield_serial2, __setfield_serial2, __delfield_serial2, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 2}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_unknown0(self): try: self.__field_unknown0 except: self.__field_unknown0=UINT(**{'sizeinbytes': 2, 'default': 0}) return self.__field_unknown0.getvalue() def __setfield_unknown0(self, value): if isinstance(value,UINT): self.__field_unknown0=value else: self.__field_unknown0=UINT(value,**{'sizeinbytes': 2, 'default': 0}) def __delfield_unknown0(self): del self.__field_unknown0 unknown0=property(__getfield_unknown0, __setfield_unknown0, __delfield_unknown0, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': True}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_unknown1(self): try: self.__field_unknown1 except: self.__field_unknown1=UNKNOWN(**{'sizeinbytes': 40}) return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UNKNOWN): self.__field_unknown1=value else: self.__field_unknown1=UNKNOWN(value,**{'sizeinbytes': 40}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 2}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_unknown1a(self): try: self.__field_unknown1a except: self.__field_unknown1a=UNKNOWN(**{'sizeinbytes': 7}) return self.__field_unknown1a.getvalue() def __setfield_unknown1a(self, value): if isinstance(value,UNKNOWN): self.__field_unknown1a=value else: self.__field_unknown1a=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_unknown1a(self): del self.__field_unknown1a unknown1a=property(__getfield_unknown1a, __setfield_unknown1a, __delfield_unknown1a, None) def __getfield_memo(self): return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,USTRING): self.__field_memo=value else: self.__field_memo=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': True}) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lglx260_126, 'length': NUMEMAILS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_lglx260_126, 'length': NUMEMAILS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, None) def __getfield_url(self): return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,USTRING): self.__field_url=value else: self.__field_url=USTRING(value,**{'sizeinbytes': 73, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': True}) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_unknownf1(self): try: self.__field_unknownf1 except: self.__field_unknownf1=UINT(**{'sizeinbytes': 1, 'default': 0xff}) return self.__field_unknownf1.getvalue() def __setfield_unknownf1(self, value): if isinstance(value,UINT): self.__field_unknownf1=value else: self.__field_unknownf1=UINT(value,**{'sizeinbytes': 1, 'default': 0xff}) def __delfield_unknownf1(self): del self.__field_unknownf1 unknownf1=property(__getfield_unknownf1, __setfield_unknownf1, __delfield_unknownf1, None) def __getfield_unknownf2(self): try: self.__field_unknownf2 except: self.__field_unknownf2=UINT(**{'sizeinbytes': 1, 'default': 0xff}) return self.__field_unknownf2.getvalue() def __setfield_unknownf2(self, value): if isinstance(value,UINT): self.__field_unknownf2=value else: self.__field_unknownf2=UINT(value,**{'sizeinbytes': 1, 'default': 0xff}) def __delfield_unknownf2(self): del self.__field_unknownf2 unknownf2=property(__getfield_unknownf2, __setfield_unknownf2, __delfield_unknownf2, None) def __getfield_unknownf3(self): try: self.__field_unknownf3 except: self.__field_unknownf3=UINT(**{'sizeinbytes': 1, 'default': 0xff}) return self.__field_unknownf3.getvalue() def __setfield_unknownf3(self, value): if isinstance(value,UINT): self.__field_unknownf3=value else: self.__field_unknownf3=UINT(value,**{'sizeinbytes': 1, 'default': 0xff}) def __delfield_unknownf3(self): del self.__field_unknownf3 unknownf3=property(__getfield_unknownf3, __setfield_unknownf3, __delfield_unknownf3, None) def __getfield_unknownf4(self): try: self.__field_unknownf4 except: self.__field_unknownf4=UINT(**{'sizeinbytes': 1, 'default': 0xff}) return self.__field_unknownf4.getvalue() def __setfield_unknownf4(self, value): if isinstance(value,UINT): self.__field_unknownf4=value else: self.__field_unknownf4=UINT(value,**{'sizeinbytes': 1, 'default': 0xff}) def __delfield_unknownf4(self): del self.__field_unknownf4 unknownf4=property(__getfield_unknownf4, __setfield_unknownf4, __delfield_unknownf4, None) def __getfield_unknownf5(self): try: self.__field_unknownf5 except: self.__field_unknownf5=UINT(**{'sizeinbytes': 1, 'default': 0xff}) return self.__field_unknownf5.getvalue() def __setfield_unknownf5(self, value): if isinstance(value,UINT): self.__field_unknownf5=value else: self.__field_unknownf5=UINT(value,**{'sizeinbytes': 1, 'default': 0xff}) def __delfield_unknownf5(self): del self.__field_unknownf5 unknownf5=property(__getfield_unknownf5, __setfield_unknownf5, __delfield_unknownf5, None) def __getfield_numbertypes(self): try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lglx260_134, 'length': NUMPHONENUMBERS}) return self.__field_numbertypes.getvalue() def __setfield_numbertypes(self, value): if isinstance(value,LIST): self.__field_numbertypes=value else: self.__field_numbertypes=LIST(value,**{'elementclass': _gen_p_lglx260_134, 'length': NUMPHONENUMBERS}) def __delfield_numbertypes(self): del self.__field_numbertypes numbertypes=property(__getfield_numbertypes, __setfield_numbertypes, __delfield_numbertypes, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lglx260_136, 'length': NUMPHONENUMBERS}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'elementclass': _gen_p_lglx260_136, 'length': NUMPHONENUMBERS}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_unknown2(self): try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def iscontainer(self): return True def containerelements(self): yield ('wallpaper', self.__field_wallpaper, None) yield ('serial1', self.__field_serial1, None) yield ('entrysize', self.__field_entrysize, None) yield ('serial2', self.__field_serial2, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('unknown0', self.__field_unknown0, None) yield ('name', self.__field_name, None) yield ('unknown1', self.__field_unknown1, None) yield ('group', self.__field_group, None) yield ('unknown1a', self.__field_unknown1a, None) yield ('memo', self.__field_memo, None) yield ('emails', self.__field_emails, None) yield ('url', self.__field_url, None) yield ('unknownf1', self.__field_unknownf1, None) yield ('unknownf2', self.__field_unknownf2, None) yield ('unknownf3', self.__field_unknownf3, None) yield ('unknownf4', self.__field_unknownf4, None) yield ('unknownf5', self.__field_unknownf5, None) yield ('numbertypes', self.__field_numbertypes, None) yield ('numbers', self.__field_numbers, None) yield ('unknown2', self.__field_unknown2, None) class _gen_p_lglx260_126(BaseProtogenClass): 'Anonymous inner class' __fields=['email'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglx260_126,self).__init__(**dict) if self.__class__ is _gen_p_lglx260_126: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglx260_126,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglx260_126,kwargs) if len(args): dict2={'sizeinbytes': 73, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': True} dict2.update(kwargs) kwargs=dict2 self.__field_email=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_email.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_email=USTRING(**{'sizeinbytes': 73, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': True}) self.__field_email.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 73, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': True}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def iscontainer(self): return True def containerelements(self): yield ('email', self.__field_email, None) class _gen_p_lglx260_134(BaseProtogenClass): 'Anonymous inner class' __fields=['numbertype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglx260_134,self).__init__(**dict) if self.__class__ is _gen_p_lglx260_134: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglx260_134,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglx260_134,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_numbertype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numbertype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numbertype=UINT(**{'sizeinbytes': 1}) self.__field_numbertype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numbertype(self): return self.__field_numbertype.getvalue() def __setfield_numbertype(self, value): if isinstance(value,UINT): self.__field_numbertype=value else: self.__field_numbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_numbertype(self): del self.__field_numbertype numbertype=property(__getfield_numbertype, __setfield_numbertype, __delfield_numbertype, None) def iscontainer(self): return True def containerelements(self): yield ('numbertype', self.__field_numbertype, None) class _gen_p_lglx260_136(BaseProtogenClass): 'Anonymous inner class' __fields=['number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglx260_136,self).__init__(**dict) if self.__class__ is _gen_p_lglx260_136: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglx260_136,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglx260_136,kwargs) if len(args): dict2={'sizeinbytes': 49, 'raiseonunterminatedread': True} dict2.update(kwargs) kwargs=dict2 self.__field_number=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': True}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': True}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) class pbreadentryresponse(BaseProtogenClass): "Results of reading one entry" __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbreadentryresponse,self).__init__(**dict) if self.__class__ is pbreadentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbreadentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbreadentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbupdateentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbupdateentryrequest,self).__init__(**dict) if self.__class__ is pbupdateentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbupdateentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbupdateentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x04, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbappendentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbappendentryrequest,self).__init__(**dict) if self.__class__ is pbappendentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbappendentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbappendentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x03, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class scheduleexception(BaseProtogenClass): __fields=['pos', 'day', 'month', 'year'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexception,self).__init__(**dict) if self.__class__ is scheduleexception: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexception,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexception,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_day.writetobuffer(buf) self.__field_month.writetobuffer(buf) self.__field_year.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_day=UINT(**{'sizeinbytes': 1}) self.__field_day.readfrombuffer(buf) self.__field_month=UINT(**{'sizeinbytes': 1}) self.__field_month.readfrombuffer(buf) self.__field_year=UINT(**{'sizeinbytes': 2}) self.__field_year.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "Refers to event id (position in schedule file) that this suppresses") def __getfield_day(self): return self.__field_day.getvalue() def __setfield_day(self, value): if isinstance(value,UINT): self.__field_day=value else: self.__field_day=UINT(value,**{'sizeinbytes': 1}) def __delfield_day(self): del self.__field_day day=property(__getfield_day, __setfield_day, __delfield_day, None) def __getfield_month(self): return self.__field_month.getvalue() def __setfield_month(self, value): if isinstance(value,UINT): self.__field_month=value else: self.__field_month=UINT(value,**{'sizeinbytes': 1}) def __delfield_month(self): del self.__field_month month=property(__getfield_month, __setfield_month, __delfield_month, None) def __getfield_year(self): return self.__field_year.getvalue() def __setfield_year(self, value): if isinstance(value,UINT): self.__field_year=value else: self.__field_year=UINT(value,**{'sizeinbytes': 2}) def __delfield_year(self): del self.__field_year year=property(__getfield_year, __setfield_year, __delfield_year, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "Refers to event id (position in schedule file) that this suppresses") yield ('day', self.__field_day, None) yield ('month', self.__field_month, None) yield ('year', self.__field_year, None) class scheduleexceptionfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexceptionfile,self).__init__(**dict) if self.__class__ is scheduleexceptionfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexceptionfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexceptionfile,kwargs) if len(args): dict2={'elementclass': scheduleexception} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': scheduleexception}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class scheduleevent(BaseProtogenClass): __fields=['pos', 'start', 'end', 'repeat', 'daybitmap', 'pad2', 'alarmminutes', 'alarmhours', 'alarmtype', 'snoozedelay', 'ringtone', 'description', 'hasvoice', 'voiceid', 'pad3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleevent,self).__init__(**dict) if self.__class__ is scheduleevent: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleevent,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleevent,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) self.__field_daybitmap.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad2.writetobuffer(buf) self.__field_alarmminutes.writetobuffer(buf) self.__field_alarmhours.writetobuffer(buf) self.__field_alarmtype.writetobuffer(buf) try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_description.writetobuffer(buf) self.__field_hasvoice.writetobuffer(buf) self.__field_voiceid.writetobuffer(buf) try: self.__field_pad3 except: self.__field_pad3=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_pad3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_start=LGCALDATE(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=LGCALDATE(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_repeat=UINT(**{'sizeinbytes': 1}) self.__field_repeat.readfrombuffer(buf) self.__field_daybitmap=UINT(**{'sizeinbytes': 2}) self.__field_daybitmap.readfrombuffer(buf) self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_pad2.readfrombuffer(buf) self.__field_alarmminutes=UINT(**{'sizeinbytes': 1}) self.__field_alarmminutes.readfrombuffer(buf) self.__field_alarmhours=UINT(**{'sizeinbytes': 1}) self.__field_alarmhours.readfrombuffer(buf) self.__field_alarmtype=UINT(**{'sizeinbytes': 1}) self.__field_alarmtype.readfrombuffer(buf) self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_snoozedelay.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_description=USTRING(**{'sizeinbytes': 37, 'encoding': PHONE_ENCODING, 'raiseontruncate': False, 'raiseonunterminatedread': False }) self.__field_description.readfrombuffer(buf) self.__field_hasvoice=UINT(**{'sizeinbytes': 2}) self.__field_hasvoice.readfrombuffer(buf) self.__field_voiceid=UINT(**{'sizeinbytes': 2}) self.__field_voiceid.readfrombuffer(buf) self.__field_pad3=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_pad3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "position within file, used as an event id") def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,LGCALDATE): self.__field_start=value else: self.__field_start=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,LGCALDATE): self.__field_end=value else: self.__field_end=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,UINT): self.__field_repeat=value else: self.__field_repeat=UINT(value,**{'sizeinbytes': 1}) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_daybitmap(self): return self.__field_daybitmap.getvalue() def __setfield_daybitmap(self, value): if isinstance(value,UINT): self.__field_daybitmap=value else: self.__field_daybitmap=UINT(value,**{'sizeinbytes': 2}) def __delfield_daybitmap(self): del self.__field_daybitmap daybitmap=property(__getfield_daybitmap, __setfield_daybitmap, __delfield_daybitmap, "which days a weekly repeat event happens on") def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UINT): self.__field_pad2=value else: self.__field_pad2=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_alarmminutes(self): return self.__field_alarmminutes.getvalue() def __setfield_alarmminutes(self, value): if isinstance(value,UINT): self.__field_alarmminutes=value else: self.__field_alarmminutes=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmminutes(self): del self.__field_alarmminutes alarmminutes=property(__getfield_alarmminutes, __setfield_alarmminutes, __delfield_alarmminutes, "a value of 100 indicates not set") def __getfield_alarmhours(self): return self.__field_alarmhours.getvalue() def __setfield_alarmhours(self, value): if isinstance(value,UINT): self.__field_alarmhours=value else: self.__field_alarmhours=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmhours(self): del self.__field_alarmhours alarmhours=property(__getfield_alarmhours, __setfield_alarmhours, __delfield_alarmhours, "a value of 100 indicates not set") def __getfield_alarmtype(self): return self.__field_alarmtype.getvalue() def __setfield_alarmtype(self, value): if isinstance(value,UINT): self.__field_alarmtype=value else: self.__field_alarmtype=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmtype(self): del self.__field_alarmtype alarmtype=property(__getfield_alarmtype, __setfield_alarmtype, __delfield_alarmtype, "preset alarm reminder type") def __getfield_snoozedelay(self): try: self.__field_snoozedelay except: self.__field_snoozedelay=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_snoozedelay.getvalue() def __setfield_snoozedelay(self, value): if isinstance(value,UINT): self.__field_snoozedelay=value else: self.__field_snoozedelay=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_snoozedelay(self): del self.__field_snoozedelay snoozedelay=property(__getfield_snoozedelay, __setfield_snoozedelay, __delfield_snoozedelay, "in minutes, not for this phone") def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_description(self): return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,USTRING): self.__field_description=value else: self.__field_description=USTRING(value,**{'sizeinbytes': 37, 'encoding': PHONE_ENCODING, 'raiseontruncate': False, 'raiseonunterminatedread': False }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def __getfield_hasvoice(self): return self.__field_hasvoice.getvalue() def __setfield_hasvoice(self, value): if isinstance(value,UINT): self.__field_hasvoice=value else: self.__field_hasvoice=UINT(value,**{'sizeinbytes': 2}) def __delfield_hasvoice(self): del self.__field_hasvoice hasvoice=property(__getfield_hasvoice, __setfield_hasvoice, __delfield_hasvoice, None) def __getfield_voiceid(self): return self.__field_voiceid.getvalue() def __setfield_voiceid(self, value): if isinstance(value,UINT): self.__field_voiceid=value else: self.__field_voiceid=UINT(value,**{'sizeinbytes': 2}) def __delfield_voiceid(self): del self.__field_voiceid voiceid=property(__getfield_voiceid, __setfield_voiceid, __delfield_voiceid, None) def __getfield_pad3(self): try: self.__field_pad3 except: self.__field_pad3=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_pad3.getvalue() def __setfield_pad3(self, value): if isinstance(value,UINT): self.__field_pad3=value else: self.__field_pad3=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_pad3(self): del self.__field_pad3 pad3=property(__getfield_pad3, __setfield_pad3, __delfield_pad3, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "position within file, used as an event id") yield ('start', self.__field_start, None) yield ('end', self.__field_end, None) yield ('repeat', self.__field_repeat, None) yield ('daybitmap', self.__field_daybitmap, "which days a weekly repeat event happens on") yield ('pad2', self.__field_pad2, None) yield ('alarmminutes', self.__field_alarmminutes, "a value of 100 indicates not set") yield ('alarmhours', self.__field_alarmhours, "a value of 100 indicates not set") yield ('alarmtype', self.__field_alarmtype, "preset alarm reminder type") yield ('snoozedelay', self.__field_snoozedelay, "in minutes, not for this phone") yield ('ringtone', self.__field_ringtone, None) yield ('description', self.__field_description, None) yield ('hasvoice', self.__field_hasvoice, None) yield ('voiceid', self.__field_voiceid, None) yield ('pad3', self.__field_pad3, None) class schedulefile(BaseProtogenClass): __fields=['numactiveitems', 'events'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(schedulefile,self).__init__(**dict) if self.__class__ is schedulefile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(schedulefile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(schedulefile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{'elementclass': scheduleevent}) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('events', self.__field_events, None) class call(BaseProtogenClass): __fields=['GPStime', 'unknown1', 'duration', 'number', 'name', 'numberlength', 'unknown2', 'pbnumbertype', 'unknown3', 'pbentrynum'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(call,self).__init__(**dict) if self.__class__ is call: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(call,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(call,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_numberlength.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_pbnumbertype.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_pbentrynum.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 4}) self.__field_unknown1.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_numberlength=UINT(**{'sizeinbytes': 1}) self.__field_numberlength.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_pbnumbertype=UINT(**{'sizeinbytes': 1}) self.__field_pbnumbertype.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 2}) self.__field_unknown3.readfrombuffer(buf) self.__field_pbentrynum=UINT(**{'sizeinbytes': 2}) self.__field_pbentrynum.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numberlength(self): return self.__field_numberlength.getvalue() def __setfield_numberlength(self, value): if isinstance(value,UINT): self.__field_numberlength=value else: self.__field_numberlength=UINT(value,**{'sizeinbytes': 1}) def __delfield_numberlength(self): del self.__field_numberlength numberlength=property(__getfield_numberlength, __setfield_numberlength, __delfield_numberlength, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_pbnumbertype(self): return self.__field_pbnumbertype.getvalue() def __setfield_pbnumbertype(self, value): if isinstance(value,UINT): self.__field_pbnumbertype=value else: self.__field_pbnumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_pbnumbertype(self): del self.__field_pbnumbertype pbnumbertype=property(__getfield_pbnumbertype, __setfield_pbnumbertype, __delfield_pbnumbertype, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_pbentrynum(self): return self.__field_pbentrynum.getvalue() def __setfield_pbentrynum(self, value): if isinstance(value,UINT): self.__field_pbentrynum=value else: self.__field_pbentrynum=UINT(value,**{'sizeinbytes': 2}) def __delfield_pbentrynum(self): del self.__field_pbentrynum pbentrynum=property(__getfield_pbentrynum, __setfield_pbentrynum, __delfield_pbentrynum, None) def iscontainer(self): return True def containerelements(self): yield ('GPStime', self.__field_GPStime, None) yield ('unknown1', self.__field_unknown1, None) yield ('duration', self.__field_duration, None) yield ('number', self.__field_number, None) yield ('name', self.__field_name, None) yield ('numberlength', self.__field_numberlength, None) yield ('unknown2', self.__field_unknown2, None) yield ('pbnumbertype', self.__field_pbnumbertype, None) yield ('unknown3', self.__field_unknown3, None) yield ('pbentrynum', self.__field_pbentrynum, None) class callhistory(BaseProtogenClass): __fields=['numcalls', 'unknown1', 'calls'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callhistory,self).__init__(**dict) if self.__class__ is callhistory: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callhistory,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callhistory,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numcalls.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numcalls=UINT(**{'sizeinbytes': 4}) self.__field_numcalls.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numcalls(self): return self.__field_numcalls.getvalue() def __setfield_numcalls(self, value): if isinstance(value,UINT): self.__field_numcalls=value else: self.__field_numcalls=UINT(value,**{'sizeinbytes': 4}) def __delfield_numcalls(self): del self.__field_numcalls numcalls=property(__getfield_numcalls, __setfield_numcalls, __delfield_numcalls, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_calls(self): try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) return self.__field_calls.getvalue() def __setfield_calls(self, value): if isinstance(value,LIST): self.__field_calls=value else: self.__field_calls=LIST(value,**{'elementclass': call}) def __delfield_calls(self): del self.__field_calls calls=property(__getfield_calls, __setfield_calls, __delfield_calls, None) def iscontainer(self): return True def containerelements(self): yield ('numcalls', self.__field_numcalls, None) yield ('unknown1', self.__field_unknown1, None) yield ('calls', self.__field_calls, None) class firmwareresponse(BaseProtogenClass): __fields=['command', 'date1', 'time1', 'date2', 'time2', 'firmware'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(firmwareresponse,self).__init__(**dict) if self.__class__ is firmwareresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(firmwareresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(firmwareresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_date1.writetobuffer(buf) self.__field_time1.writetobuffer(buf) self.__field_date2.writetobuffer(buf) self.__field_time2.writetobuffer(buf) self.__field_firmware.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_date1=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date1.readfrombuffer(buf) self.__field_time1=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time1.readfrombuffer(buf) self.__field_date2=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date2.readfrombuffer(buf) self.__field_time2=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time2.readfrombuffer(buf) self.__field_firmware=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_firmware.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_date1(self): return self.__field_date1.getvalue() def __setfield_date1(self, value): if isinstance(value,USTRING): self.__field_date1=value else: self.__field_date1=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date1(self): del self.__field_date1 date1=property(__getfield_date1, __setfield_date1, __delfield_date1, None) def __getfield_time1(self): return self.__field_time1.getvalue() def __setfield_time1(self, value): if isinstance(value,USTRING): self.__field_time1=value else: self.__field_time1=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time1(self): del self.__field_time1 time1=property(__getfield_time1, __setfield_time1, __delfield_time1, None) def __getfield_date2(self): return self.__field_date2.getvalue() def __setfield_date2(self, value): if isinstance(value,USTRING): self.__field_date2=value else: self.__field_date2=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date2(self): del self.__field_date2 date2=property(__getfield_date2, __setfield_date2, __delfield_date2, None) def __getfield_time2(self): return self.__field_time2.getvalue() def __setfield_time2(self, value): if isinstance(value,USTRING): self.__field_time2=value else: self.__field_time2=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time2(self): del self.__field_time2 time2=property(__getfield_time2, __setfield_time2, __delfield_time2, None) def __getfield_firmware(self): return self.__field_firmware.getvalue() def __setfield_firmware(self, value): if isinstance(value,USTRING): self.__field_firmware=value else: self.__field_firmware=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_firmware(self): del self.__field_firmware firmware=property(__getfield_firmware, __setfield_firmware, __delfield_firmware, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('date1', self.__field_date1, None) yield ('time1', self.__field_time1, None) yield ('date2', self.__field_date2, None) yield ('time2', self.__field_time2, None) yield ('firmware', self.__field_firmware, None) class msg_record(BaseProtogenClass): __fields=['unknown1', 'binary', 'unknown3', 'unknown4', 'unknown6', 'length', 'msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(msg_record,self).__init__(**dict) if self.__class__ is msg_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(msg_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(msg_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_binary.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_length.writetobuffer(buf) try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lglx260_260, 'length': 219}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_binary=UINT(**{'sizeinbytes': 1}) self.__field_binary.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1}) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 1}) self.__field_unknown4.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 1}) self.__field_unknown6.readfrombuffer(buf) self.__field_length=UINT(**{'sizeinbytes': 1}) self.__field_length.readfrombuffer(buf) self.__field_msg=LIST(**{'elementclass': _gen_p_lglx260_260, 'length': 219}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_binary(self): return self.__field_binary.getvalue() def __setfield_binary(self, value): if isinstance(value,UINT): self.__field_binary=value else: self.__field_binary=UINT(value,**{'sizeinbytes': 1}) def __delfield_binary(self): del self.__field_binary binary=property(__getfield_binary, __setfield_binary, __delfield_binary, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_length(self): return self.__field_length.getvalue() def __setfield_length(self, value): if isinstance(value,UINT): self.__field_length=value else: self.__field_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_length(self): del self.__field_length length=property(__getfield_length, __setfield_length, __delfield_length, None) def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lglx260_260, 'length': 219}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lglx260_260, 'length': 219}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('binary', self.__field_binary, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) yield ('unknown6', self.__field_unknown6, None) yield ('length', self.__field_length, None) yield ('msg', self.__field_msg, None) class _gen_p_lglx260_260(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglx260_260,self).__init__(**dict) if self.__class__ is _gen_p_lglx260_260: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglx260_260,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglx260_260,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class recipient_record(BaseProtogenClass): __fields=['unknown', 'number', 'status', 'unknown1', 'timesent', 'timereceived', 'unknown2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(recipient_record,self).__init__(**dict) if self.__class__ is recipient_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(recipient_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(recipient_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_timereceived.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown=DATA(**{'sizeinbytes': 40}) self.__field_unknown.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49}) self.__field_number.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 2}) self.__field_unknown1.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_timereceived=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timereceived.readfrombuffer(buf) self.__field_unknown2=DATA(**{'sizeinbytes': 104}) self.__field_unknown2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,DATA): self.__field_unknown=value else: self.__field_unknown=DATA(value,**{'sizeinbytes': 40}) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_timereceived(self): return self.__field_timereceived.getvalue() def __setfield_timereceived(self, value): if isinstance(value,LGCALDATE): self.__field_timereceived=value else: self.__field_timereceived=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timereceived(self): del self.__field_timereceived timereceived=property(__getfield_timereceived, __setfield_timereceived, __delfield_timereceived, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,DATA): self.__field_unknown2=value else: self.__field_unknown2=DATA(value,**{'sizeinbytes': 104}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def iscontainer(self): return True def containerelements(self): yield ('unknown', self.__field_unknown, None) yield ('number', self.__field_number, None) yield ('status', self.__field_status, None) yield ('unknown1', self.__field_unknown1, None) yield ('timesent', self.__field_timesent, None) yield ('timereceived', self.__field_timereceived, None) yield ('unknown2', self.__field_unknown2, None) class sms_saved(BaseProtogenClass): __fields=['outboxmsg', 'pad', 'outbox', 'inbox'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_saved,self).__init__(**dict) if self.__class__ is sms_saved: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_saved,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_saved,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_outboxmsg.writetobuffer(buf) self.__field_pad.writetobuffer(buf) if self.outboxmsg: self.__field_outbox.writetobuffer(buf) if not self.outboxmsg: self.__field_inbox.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_outboxmsg=UINT(**{'sizeinbytes': 4}) self.__field_outboxmsg.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 4}) self.__field_pad.readfrombuffer(buf) if self.outboxmsg: self.__field_outbox=sms_out() self.__field_outbox.readfrombuffer(buf) if not self.outboxmsg: self.__field_inbox=sms_in() self.__field_inbox.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_outboxmsg(self): return self.__field_outboxmsg.getvalue() def __setfield_outboxmsg(self, value): if isinstance(value,UINT): self.__field_outboxmsg=value else: self.__field_outboxmsg=UINT(value,**{'sizeinbytes': 4}) def __delfield_outboxmsg(self): del self.__field_outboxmsg outboxmsg=property(__getfield_outboxmsg, __setfield_outboxmsg, __delfield_outboxmsg, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 4}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_outbox(self): return self.__field_outbox.getvalue() def __setfield_outbox(self, value): if isinstance(value,sms_out): self.__field_outbox=value else: self.__field_outbox=sms_out(value,) def __delfield_outbox(self): del self.__field_outbox outbox=property(__getfield_outbox, __setfield_outbox, __delfield_outbox, None) def __getfield_inbox(self): return self.__field_inbox.getvalue() def __setfield_inbox(self, value): if isinstance(value,sms_in): self.__field_inbox=value else: self.__field_inbox=sms_in(value,) def __delfield_inbox(self): del self.__field_inbox inbox=property(__getfield_inbox, __setfield_inbox, __delfield_inbox, None) def iscontainer(self): return True def containerelements(self): yield ('outboxmsg', self.__field_outboxmsg, None) yield ('pad', self.__field_pad, None) if self.outboxmsg: yield ('outbox', self.__field_outbox, None) if not self.outboxmsg: yield ('inbox', self.__field_inbox, None) class sms_out(BaseProtogenClass): __fields=['index', 'locked', 'unknown1', 'timesent', 'subject', 'unknown2', 'num_msg_elements', 'messages', 'unknown5', 'priority', 'callback', 'unknown6', 'recipients', 'unknown7'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_out,self).__init__(**dict) if self.__class__ is sms_out: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_out,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_out,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 10}) self.__field_messages.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) self.__field_recipients.writetobuffer(buf) self.__field_unknown7.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 3}) self.__field_unknown1.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_unknown2=DATA(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 10}) self.__field_messages.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 2253}) self.__field_unknown5.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 23}) self.__field_callback.readfrombuffer(buf) self.__field_unknown6=DATA(**{'sizeinbytes': 14}) self.__field_unknown6.readfrombuffer(buf) self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) self.__field_recipients.readfrombuffer(buf) self.__field_unknown7=DATA() self.__field_unknown7.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,DATA): self.__field_unknown2=value else: self.__field_unknown2=DATA(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_messages(self): try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 10}) return self.__field_messages.getvalue() def __setfield_messages(self, value): if isinstance(value,LIST): self.__field_messages=value else: self.__field_messages=LIST(value,**{'elementclass': msg_record, 'length': 10}) def __delfield_messages(self): del self.__field_messages messages=property(__getfield_messages, __setfield_messages, __delfield_messages, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 2253}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 23}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,DATA): self.__field_unknown6=value else: self.__field_unknown6=DATA(value,**{'sizeinbytes': 14}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_recipients(self): try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 9}) return self.__field_recipients.getvalue() def __setfield_recipients(self, value): if isinstance(value,LIST): self.__field_recipients=value else: self.__field_recipients=LIST(value,**{'elementclass': recipient_record,'length': 9}) def __delfield_recipients(self): del self.__field_recipients recipients=property(__getfield_recipients, __setfield_recipients, __delfield_recipients, None) def __getfield_unknown7(self): return self.__field_unknown7.getvalue() def __setfield_unknown7(self, value): if isinstance(value,DATA): self.__field_unknown7=value else: self.__field_unknown7=DATA(value,) def __delfield_unknown7(self): del self.__field_unknown7 unknown7=property(__getfield_unknown7, __setfield_unknown7, __delfield_unknown7, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('locked', self.__field_locked, None) yield ('unknown1', self.__field_unknown1, None) yield ('timesent', self.__field_timesent, None) yield ('subject', self.__field_subject, None) yield ('unknown2', self.__field_unknown2, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('messages', self.__field_messages, None) yield ('unknown5', self.__field_unknown5, None) yield ('priority', self.__field_priority, None) yield ('callback', self.__field_callback, None) yield ('unknown6', self.__field_unknown6, None) yield ('recipients', self.__field_recipients, None) yield ('unknown7', self.__field_unknown7, None) class SMSINBOXMSGFRAGMENT(BaseProtogenClass): __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSINBOXMSGFRAGMENT,self).__init__(**dict) if self.__class__ is SMSINBOXMSGFRAGMENT: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSINBOXMSGFRAGMENT,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSINBOXMSGFRAGMENT,kwargs) if len(args): dict2={'elementclass': _gen_p_lglx260_297, 'length': 181} dict2.update(kwargs) kwargs=dict2 self.__field_msg=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lglx260_297, 'length': 181}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=LIST(**{'elementclass': _gen_p_lglx260_297, 'length': 181}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lglx260_297, 'length': 181}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lglx260_297, 'length': 181}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class _gen_p_lglx260_297(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglx260_297,self).__init__(**dict) if self.__class__ is _gen_p_lglx260_297: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglx260_297,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglx260_297,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class sms_in(BaseProtogenClass): __fields=['msg_index1', 'msg_index2', 'unknown2', 'unknown3', 'timesent', 'unknown', 'callback_length', 'callback', 'sender_length', 'sender', 'unknown4', 'lg_time', 'GPStime', 'unknown5', 'read', 'locked', 'unknown8', 'priority', 'flags', 'subject', 'bin_header1', 'bin_header2', 'unknown6', 'multipartID', 'bin_header3', 'unknown9', 'num_msg_elements', 'msglengths', 'unknown10', 'msgs', 'unknown5'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_in,self).__init__(**dict) if self.__class__ is sms_in: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_in,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_in,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msg_index1.writetobuffer(buf) self.__field_msg_index2.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self.__field_callback_length.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_sender_length.writetobuffer(buf) try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lglx260_310, 'length': 38}) self.__field_sender.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_lg_time.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_flags.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_bin_header1.writetobuffer(buf) self.__field_bin_header2.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_multipartID.writetobuffer(buf) self.__field_bin_header3.writetobuffer(buf) self.__field_unknown9.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lglx260_329, 'length': 10}) self.__field_msglengths.writetobuffer(buf) self.__field_unknown10.writetobuffer(buf) try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg_index1=UINT(**{'sizeinbytes': 4}) self.__field_msg_index1.readfrombuffer(buf) self.__field_msg_index2=UINT(**{'sizeinbytes': 4}) self.__field_msg_index2.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2}) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 4}) self.__field_unknown3.readfrombuffer(buf) self.__field_timesent=SMSDATE(**{'sizeinbytes': 6}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown=UINT(**{'sizeinbytes': 3}) self.__field_unknown.readfrombuffer(buf) self.__field_callback_length=UINT(**{'sizeinbytes': 1}) self.__field_callback_length.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 38}) self.__field_callback.readfrombuffer(buf) self.__field_sender_length=UINT(**{'sizeinbytes': 1}) self.__field_sender_length.readfrombuffer(buf) self.__field_sender=LIST(**{'elementclass': _gen_p_lglx260_310, 'length': 38}) self.__field_sender.readfrombuffer(buf) self.__field_unknown4=DATA(**{'sizeinbytes': 15}) self.__field_unknown4.readfrombuffer(buf) self.__field_lg_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_lg_time.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 2}) self.__field_unknown5.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 1}) self.__field_read.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown8=UINT(**{'sizeinbytes': 2}) self.__field_unknown8.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_flags=DATA(**{'sizeinbytes': 5}) self.__field_flags.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_bin_header1=UINT(**{'sizeinbytes': 1}) self.__field_bin_header1.readfrombuffer(buf) self.__field_bin_header2=UINT(**{'sizeinbytes': 1}) self.__field_bin_header2.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 2}) self.__field_unknown6.readfrombuffer(buf) self.__field_multipartID=UINT(**{'sizeinbytes': 2}) self.__field_multipartID.readfrombuffer(buf) self.__field_bin_header3=UINT(**{'sizeinbytes': 1}) self.__field_bin_header3.readfrombuffer(buf) self.__field_unknown9=UINT(**{'sizeinbytes': 1}) self.__field_unknown9.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_msglengths=LIST(**{'elementclass': _gen_p_lglx260_329, 'length': 10}) self.__field_msglengths.readfrombuffer(buf) self.__field_unknown10=UINT(**{'sizeinbytes': 10}) self.__field_unknown10.readfrombuffer(buf) self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.readfrombuffer(buf) self.__field_unknown5=DATA() self.__field_unknown5.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg_index1(self): return self.__field_msg_index1.getvalue() def __setfield_msg_index1(self, value): if isinstance(value,UINT): self.__field_msg_index1=value else: self.__field_msg_index1=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index1(self): del self.__field_msg_index1 msg_index1=property(__getfield_msg_index1, __setfield_msg_index1, __delfield_msg_index1, None) def __getfield_msg_index2(self): return self.__field_msg_index2.getvalue() def __setfield_msg_index2(self, value): if isinstance(value,UINT): self.__field_msg_index2=value else: self.__field_msg_index2=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index2(self): del self.__field_msg_index2 msg_index2=property(__getfield_msg_index2, __setfield_msg_index2, __delfield_msg_index2, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,SMSDATE): self.__field_timesent=value else: self.__field_timesent=SMSDATE(value,**{'sizeinbytes': 6}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UINT): self.__field_unknown=value else: self.__field_unknown=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def __getfield_callback_length(self): return self.__field_callback_length.getvalue() def __setfield_callback_length(self, value): if isinstance(value,UINT): self.__field_callback_length=value else: self.__field_callback_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_length(self): del self.__field_callback_length callback_length=property(__getfield_callback_length, __setfield_callback_length, __delfield_callback_length, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 38}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_sender_length(self): return self.__field_sender_length.getvalue() def __setfield_sender_length(self, value): if isinstance(value,UINT): self.__field_sender_length=value else: self.__field_sender_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_sender_length(self): del self.__field_sender_length sender_length=property(__getfield_sender_length, __setfield_sender_length, __delfield_sender_length, None) def __getfield_sender(self): try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lglx260_310, 'length': 38}) return self.__field_sender.getvalue() def __setfield_sender(self, value): if isinstance(value,LIST): self.__field_sender=value else: self.__field_sender=LIST(value,**{'elementclass': _gen_p_lglx260_310, 'length': 38}) def __delfield_sender(self): del self.__field_sender sender=property(__getfield_sender, __setfield_sender, __delfield_sender, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,DATA): self.__field_unknown4=value else: self.__field_unknown4=DATA(value,**{'sizeinbytes': 15}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_lg_time(self): return self.__field_lg_time.getvalue() def __setfield_lg_time(self, value): if isinstance(value,LGCALDATE): self.__field_lg_time=value else: self.__field_lg_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_lg_time(self): del self.__field_lg_time lg_time=property(__getfield_lg_time, __setfield_lg_time, __delfield_lg_time, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 1}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,UINT): self.__field_unknown8=value else: self.__field_unknown8=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_flags(self): return self.__field_flags.getvalue() def __setfield_flags(self, value): if isinstance(value,DATA): self.__field_flags=value else: self.__field_flags=DATA(value,**{'sizeinbytes': 5}) def __delfield_flags(self): del self.__field_flags flags=property(__getfield_flags, __setfield_flags, __delfield_flags, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_bin_header1(self): return self.__field_bin_header1.getvalue() def __setfield_bin_header1(self, value): if isinstance(value,UINT): self.__field_bin_header1=value else: self.__field_bin_header1=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header1(self): del self.__field_bin_header1 bin_header1=property(__getfield_bin_header1, __setfield_bin_header1, __delfield_bin_header1, None) def __getfield_bin_header2(self): return self.__field_bin_header2.getvalue() def __setfield_bin_header2(self, value): if isinstance(value,UINT): self.__field_bin_header2=value else: self.__field_bin_header2=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header2(self): del self.__field_bin_header2 bin_header2=property(__getfield_bin_header2, __setfield_bin_header2, __delfield_bin_header2, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_multipartID(self): return self.__field_multipartID.getvalue() def __setfield_multipartID(self, value): if isinstance(value,UINT): self.__field_multipartID=value else: self.__field_multipartID=UINT(value,**{'sizeinbytes': 2}) def __delfield_multipartID(self): del self.__field_multipartID multipartID=property(__getfield_multipartID, __setfield_multipartID, __delfield_multipartID, None) def __getfield_bin_header3(self): return self.__field_bin_header3.getvalue() def __setfield_bin_header3(self, value): if isinstance(value,UINT): self.__field_bin_header3=value else: self.__field_bin_header3=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header3(self): del self.__field_bin_header3 bin_header3=property(__getfield_bin_header3, __setfield_bin_header3, __delfield_bin_header3, None) def __getfield_unknown9(self): return self.__field_unknown9.getvalue() def __setfield_unknown9(self, value): if isinstance(value,UINT): self.__field_unknown9=value else: self.__field_unknown9=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown9(self): del self.__field_unknown9 unknown9=property(__getfield_unknown9, __setfield_unknown9, __delfield_unknown9, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_msglengths(self): try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lglx260_329, 'length': 10}) return self.__field_msglengths.getvalue() def __setfield_msglengths(self, value): if isinstance(value,LIST): self.__field_msglengths=value else: self.__field_msglengths=LIST(value,**{'elementclass': _gen_p_lglx260_329, 'length': 10}) def __delfield_msglengths(self): del self.__field_msglengths msglengths=property(__getfield_msglengths, __setfield_msglengths, __delfield_msglengths, None) def __getfield_unknown10(self): return self.__field_unknown10.getvalue() def __setfield_unknown10(self, value): if isinstance(value,UINT): self.__field_unknown10=value else: self.__field_unknown10=UINT(value,**{'sizeinbytes': 10}) def __delfield_unknown10(self): del self.__field_unknown10 unknown10=property(__getfield_unknown10, __setfield_unknown10, __delfield_unknown10, None) def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,DATA): self.__field_unknown5=value else: self.__field_unknown5=DATA(value,) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def iscontainer(self): return True def containerelements(self): yield ('msg_index1', self.__field_msg_index1, None) yield ('msg_index2', self.__field_msg_index2, None) yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) yield ('timesent', self.__field_timesent, None) yield ('unknown', self.__field_unknown, None) yield ('callback_length', self.__field_callback_length, None) yield ('callback', self.__field_callback, None) yield ('sender_length', self.__field_sender_length, None) yield ('sender', self.__field_sender, None) yield ('unknown4', self.__field_unknown4, None) yield ('lg_time', self.__field_lg_time, None) yield ('GPStime', self.__field_GPStime, None) yield ('unknown5', self.__field_unknown5, None) yield ('read', self.__field_read, None) yield ('locked', self.__field_locked, None) yield ('unknown8', self.__field_unknown8, None) yield ('priority', self.__field_priority, None) yield ('flags', self.__field_flags, None) yield ('subject', self.__field_subject, None) yield ('bin_header1', self.__field_bin_header1, None) yield ('bin_header2', self.__field_bin_header2, None) yield ('unknown6', self.__field_unknown6, None) yield ('multipartID', self.__field_multipartID, None) yield ('bin_header3', self.__field_bin_header3, None) yield ('unknown9', self.__field_unknown9, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('msglengths', self.__field_msglengths, None) yield ('unknown10', self.__field_unknown10, None) yield ('msgs', self.__field_msgs, None) yield ('unknown5', self.__field_unknown5, None) class _gen_p_lglx260_310(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglx260_310,self).__init__(**dict) if self.__class__ is _gen_p_lglx260_310: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglx260_310,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglx260_310,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of senders phone number") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of senders phone number") class _gen_p_lglx260_329(BaseProtogenClass): 'Anonymous inner class' __fields=['msglength'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglx260_329,self).__init__(**dict) if self.__class__ is _gen_p_lglx260_329: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglx260_329,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglx260_329,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_msglength=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msglength.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msglength=UINT(**{'sizeinbytes': 1}) self.__field_msglength.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msglength(self): return self.__field_msglength.getvalue() def __setfield_msglength(self, value): if isinstance(value,UINT): self.__field_msglength=value else: self.__field_msglength=UINT(value,**{'sizeinbytes': 1}) def __delfield_msglength(self): del self.__field_msglength msglength=property(__getfield_msglength, __setfield_msglength, __delfield_msglength, "lengths of individual messages in septets") def iscontainer(self): return True def containerelements(self): yield ('msglength', self.__field_msglength, "lengths of individual messages in septets") class sms_quick_text(BaseProtogenClass): __fields=['msgs'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_quick_text,self).__init__(**dict) if self.__class__ is sms_quick_text: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_quick_text,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_quick_text,kwargs) if len(args): dict2={'elementclass': _gen_p_lglx260_344, } dict2.update(kwargs) kwargs=dict2 self.__field_msgs=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lglx260_344, }) self.__field_msgs.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msgs=LIST(**{'elementclass': _gen_p_lglx260_344, }) self.__field_msgs.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lglx260_344, }) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'elementclass': _gen_p_lglx260_344, }) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def iscontainer(self): return True def containerelements(self): yield ('msgs', self.__field_msgs, None) class _gen_p_lglx260_344(BaseProtogenClass): 'Anonymous inner class' __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglx260_344,self).__init__(**dict) if self.__class__ is _gen_p_lglx260_344: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglx260_344,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglx260_344,kwargs) if len(args): dict2={'encoding': PHONE_ENCODING} dict2.update(kwargs) kwargs=dict2 self.__field_msg=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=USTRING(**{'encoding': PHONE_ENCODING}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{'encoding': PHONE_ENCODING}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) bitpim-1.0.7+dfsg1/src/phones/p_sanyo3200.py0000644001616600161660000074647510655002150016602 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Sanyo SCP-3200""" from prototypes import * # Make all sanyo stuff available in this module as well from p_sanyo import * from p_sanyomedia import * from p_sanyonewer import * from p_brew import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 # Need to check. Is max phone will hold 32/96 or 33/97 _MAXNUMBERLEN=32 _MAXEMAILLEN=96 HASRINGPICBUF=0 #BREW_FILE_SYSTEM=2 class req41(BaseProtogenClass): __fields=['fortyone', 'msl'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(req41,self).__init__(**dict) if self.__class__ is req41: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(req41,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(req41,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_fortyone except: self.__field_fortyone=UINT(**{'sizeinbytes': 1, 'default': 0x41}) self.__field_fortyone.writetobuffer(buf) self.__field_msl.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_fortyone=UINT(**{'sizeinbytes': 1, 'default': 0x41}) self.__field_fortyone.readfrombuffer(buf) self.__field_msl=USTRING(**{'sizeinbytes': 6, 'terminator': None}) self.__field_msl.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_fortyone(self): try: self.__field_fortyone except: self.__field_fortyone=UINT(**{'sizeinbytes': 1, 'default': 0x41}) return self.__field_fortyone.getvalue() def __setfield_fortyone(self, value): if isinstance(value,UINT): self.__field_fortyone=value else: self.__field_fortyone=UINT(value,**{'sizeinbytes': 1, 'default': 0x41}) def __delfield_fortyone(self): del self.__field_fortyone fortyone=property(__getfield_fortyone, __setfield_fortyone, __delfield_fortyone, None) def __getfield_msl(self): return self.__field_msl.getvalue() def __setfield_msl(self, value): if isinstance(value,USTRING): self.__field_msl=value else: self.__field_msl=USTRING(value,**{'sizeinbytes': 6, 'terminator': None}) def __delfield_msl(self): del self.__field_msl msl=property(__getfield_msl, __setfield_msl, __delfield_msl, None) def iscontainer(self): return True def containerelements(self): yield ('fortyone', self.__field_fortyone, None) yield ('msl', self.__field_msl, None) class res41(BaseProtogenClass): __fields=['fortyone', 'ans'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(res41,self).__init__(**dict) if self.__class__ is res41: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(res41,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(res41,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_fortyone.writetobuffer(buf) self.__field_ans.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_fortyone=UINT(**{'sizeinbytes': 1, 'default': 0x41}) self.__field_fortyone.readfrombuffer(buf) self.__field_ans=UINT(**{'sizeinbytes': 1}) self.__field_ans.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_fortyone(self): return self.__field_fortyone.getvalue() def __setfield_fortyone(self, value): if isinstance(value,UINT): self.__field_fortyone=value else: self.__field_fortyone=UINT(value,**{'sizeinbytes': 1, 'default': 0x41}) def __delfield_fortyone(self): del self.__field_fortyone fortyone=property(__getfield_fortyone, __setfield_fortyone, __delfield_fortyone, None) def __getfield_ans(self): return self.__field_ans.getvalue() def __setfield_ans(self, value): if isinstance(value,UINT): self.__field_ans=value else: self.__field_ans=UINT(value,**{'sizeinbytes': 1}) def __delfield_ans(self): del self.__field_ans ans=property(__getfield_ans, __setfield_ans, __delfield_ans, None) def iscontainer(self): return True def containerelements(self): yield ('fortyone', self.__field_fortyone, None) yield ('ans', self.__field_ans, None) class fastatusrequest(BaseProtogenClass): __fields=['preamble', 'command', 'packettype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(fastatusrequest,self).__init__(**dict) if self.__class__ is fastatusrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(fastatusrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(fastatusrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_preamble except: self.__field_preamble=sanyofaheader(**{'faset': 0x13}) self.__field_preamble.writetobuffer(buf) try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_command.writetobuffer(buf) try: self.__field_packettype except: self.__field_packettype=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_packettype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_preamble=sanyofaheader(**{'faset': 0x13}) self.__field_preamble.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_command.readfrombuffer(buf) self.__field_packettype=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_packettype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_preamble(self): try: self.__field_preamble except: self.__field_preamble=sanyofaheader(**{'faset': 0x13}) return self.__field_preamble.getvalue() def __setfield_preamble(self, value): if isinstance(value,sanyofaheader): self.__field_preamble=value else: self.__field_preamble=sanyofaheader(value,**{'faset': 0x13}) def __delfield_preamble(self): del self.__field_preamble preamble=property(__getfield_preamble, __setfield_preamble, __delfield_preamble, None) def __getfield_command(self): try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_packettype(self): try: self.__field_packettype except: self.__field_packettype=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_packettype.getvalue() def __setfield_packettype(self, value): if isinstance(value,UINT): self.__field_packettype=value else: self.__field_packettype=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_packettype(self): del self.__field_packettype packettype=property(__getfield_packettype, __setfield_packettype, __delfield_packettype, None) def iscontainer(self): return True def containerelements(self): yield ('preamble', self.__field_preamble, None) yield ('command', self.__field_command, None) yield ('packettype', self.__field_packettype, None) class fastatusresponse(BaseProtogenClass): __fields=['preamble', 'status', 'packettype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(fastatusresponse,self).__init__(**dict) if self.__class__ is fastatusresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(fastatusresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(fastatusresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_preamble except: self.__field_preamble=sanyofaheader() self.__field_preamble.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_packettype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_preamble=sanyofaheader() self.__field_preamble.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_status.readfrombuffer(buf) self.__field_packettype=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_packettype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_preamble(self): try: self.__field_preamble except: self.__field_preamble=sanyofaheader() return self.__field_preamble.getvalue() def __setfield_preamble(self, value): if isinstance(value,sanyofaheader): self.__field_preamble=value else: self.__field_preamble=sanyofaheader(value,) def __delfield_preamble(self): del self.__field_preamble preamble=property(__getfield_preamble, __setfield_preamble, __delfield_preamble, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_packettype(self): return self.__field_packettype.getvalue() def __setfield_packettype(self, value): if isinstance(value,UINT): self.__field_packettype=value else: self.__field_packettype=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_packettype(self): del self.__field_packettype packettype=property(__getfield_packettype, __setfield_packettype, __delfield_packettype, None) def iscontainer(self): return True def containerelements(self): yield ('preamble', self.__field_preamble, None) yield ('status', self.__field_status, None) yield ('packettype', self.__field_packettype, None) class response(BaseProtogenClass): __fields=['pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(response,self).__init__(**dict) if self.__class__ is response: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(response,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(response,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_pad=UNKNOWN(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('pad', self.__field_pad, None) class qcpheader(BaseProtogenClass): __fields=['readwrite', 'command', 'packettype'] def __init__(self, *args, **kwargs): dict={} # User specified arguments in the packet description dict.update({'readwrite': 0x26}) # What was supplied to this function dict.update(kwargs) # Parent constructor super(qcpheader,self).__init__(**dict) if self.__class__ is qcpheader: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(qcpheader,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(qcpheader,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_readwrite.writetobuffer(buf) self.__field_command.writetobuffer(buf) self.__field_packettype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_readwrite=UINT(**{'sizeinbytes': 1}) self.__field_readwrite.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_packettype=UINT(**{'sizeinbytes': 1}) self.__field_packettype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_readwrite(self): return self.__field_readwrite.getvalue() def __setfield_readwrite(self, value): if isinstance(value,UINT): self.__field_readwrite=value else: self.__field_readwrite=UINT(value,**{'sizeinbytes': 1}) def __delfield_readwrite(self): del self.__field_readwrite readwrite=property(__getfield_readwrite, __setfield_readwrite, __delfield_readwrite, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_packettype(self): return self.__field_packettype.getvalue() def __setfield_packettype(self, value): if isinstance(value,UINT): self.__field_packettype=value else: self.__field_packettype=UINT(value,**{'sizeinbytes': 1}) def __delfield_packettype(self): del self.__field_packettype packettype=property(__getfield_packettype, __setfield_packettype, __delfield_packettype, None) def iscontainer(self): return True def containerelements(self): yield ('readwrite', self.__field_readwrite, None) yield ('command', self.__field_command, None) yield ('packettype', self.__field_packettype, None) class qcpwriteheader(BaseProtogenClass): __fields=['readwrite', 'command', 'packettype', 'pad'] def __init__(self, *args, **kwargs): dict={} # User specified arguments in the packet description dict.update({'readwrite': 0x27}) # What was supplied to this function dict.update(kwargs) # Parent constructor super(qcpwriteheader,self).__init__(**dict) if self.__class__ is qcpwriteheader: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(qcpwriteheader,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(qcpwriteheader,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_readwrite.writetobuffer(buf) self.__field_command.writetobuffer(buf) self.__field_packettype.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_readwrite=UINT(**{'sizeinbytes': 1}) self.__field_readwrite.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_packettype=UINT(**{'sizeinbytes': 1}) self.__field_packettype.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_readwrite(self): return self.__field_readwrite.getvalue() def __setfield_readwrite(self, value): if isinstance(value,UINT): self.__field_readwrite=value else: self.__field_readwrite=UINT(value,**{'sizeinbytes': 1}) def __delfield_readwrite(self): del self.__field_readwrite readwrite=property(__getfield_readwrite, __setfield_readwrite, __delfield_readwrite, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_packettype(self): return self.__field_packettype.getvalue() def __setfield_packettype(self, value): if isinstance(value,UINT): self.__field_packettype=value else: self.__field_packettype=UINT(value,**{'sizeinbytes': 1}) def __delfield_packettype(self): del self.__field_packettype packettype=property(__getfield_packettype, __setfield_packettype, __delfield_packettype, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('readwrite', self.__field_readwrite, None) yield ('command', self.__field_command, None) yield ('packettype', self.__field_packettype, None) yield ('pad', self.__field_pad, None) class eventrequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventrequest,self).__init__(**dict) if self.__class__ is eventrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x23}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x23}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpheader(**{'packettype': 0x0c, 'command': 0x23}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,**{'packettype': 0x0c, 'command': 0x23}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 129}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class eventslotinuserequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventslotinuserequest,self).__init__(**dict) if self.__class__ is eventslotinuserequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventslotinuserequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventslotinuserequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpheader(**{'readwrite': 0x26, 'packettype': 0x0d, 'command': 0x74}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader(**{'readwrite': 0x26, 'packettype': 0x0d, 'command': 0x74}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpheader(**{'readwrite': 0x26, 'packettype': 0x0d, 'command': 0x74}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,**{'readwrite': 0x26, 'packettype': 0x0d, 'command': 0x74}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 129}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 129}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class evententry(BaseProtogenClass): __fields=['slot', 'eventname', 'pad1', 'eventname_len', 'start', 'end', 'location', 'pad2', 'location_len', 'alarmdiff', 'period', 'dom', 'alarm', 'pad3', 'serial', 'pad4', 'ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(evententry,self).__init__(**dict) if self.__class__ is evententry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(evententry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(evententry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_eventname.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.writetobuffer(buf) self.__field_eventname_len.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_location.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad2.writetobuffer(buf) self.__field_location_len.writetobuffer(buf) self.__field_alarmdiff.writetobuffer(buf) self.__field_period.writetobuffer(buf) self.__field_dom.writetobuffer(buf) self.__field_alarm.writetobuffer(buf) try: self.__field_pad3 except: self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad3.writetobuffer(buf) try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.writetobuffer(buf) try: self.__field_pad4 except: self.__field_pad4=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad4.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_eventname=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_eventname.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.readfrombuffer(buf) self.__field_eventname_len=UINT(**{'sizeinbytes': 1}) self.__field_eventname_len.readfrombuffer(buf) self.__field_start=UINT(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=UINT(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_location=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_location.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad2.readfrombuffer(buf) self.__field_location_len=UINT(**{'sizeinbytes': 1}) self.__field_location_len.readfrombuffer(buf) self.__field_alarmdiff=UINT(**{'sizeinbytes': 4}) self.__field_alarmdiff.readfrombuffer(buf) self.__field_period=UINT(**{'sizeinbytes': 1}) self.__field_period.readfrombuffer(buf) self.__field_dom=UINT(**{'sizeinbytes': 1}) self.__field_dom.readfrombuffer(buf) self.__field_alarm=UINT(**{'sizeinbytes': 4}) self.__field_alarm.readfrombuffer(buf) self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad3.readfrombuffer(buf) self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.readfrombuffer(buf) self.__field_pad4=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad4.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 2}) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_eventname(self): return self.__field_eventname.getvalue() def __setfield_eventname(self, value): if isinstance(value,USTRING): self.__field_eventname=value else: self.__field_eventname=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_eventname(self): del self.__field_eventname eventname=property(__getfield_eventname, __setfield_eventname, __delfield_eventname, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_eventname_len(self): return self.__field_eventname_len.getvalue() def __setfield_eventname_len(self, value): if isinstance(value,UINT): self.__field_eventname_len=value else: self.__field_eventname_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_eventname_len(self): del self.__field_eventname_len eventname_len=property(__getfield_eventname_len, __setfield_eventname_len, __delfield_eventname_len, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,UINT): self.__field_start=value else: self.__field_start=UINT(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, "# seconds since Jan 1, 1980 approximately") def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,UINT): self.__field_end=value else: self.__field_end=UINT(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_location(self): return self.__field_location.getvalue() def __setfield_location(self, value): if isinstance(value,USTRING): self.__field_location=value else: self.__field_location=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_location(self): del self.__field_location location=property(__getfield_location, __setfield_location, __delfield_location, None) def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_location_len(self): return self.__field_location_len.getvalue() def __setfield_location_len(self, value): if isinstance(value,UINT): self.__field_location_len=value else: self.__field_location_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_location_len(self): del self.__field_location_len location_len=property(__getfield_location_len, __setfield_location_len, __delfield_location_len, None) def __getfield_alarmdiff(self): return self.__field_alarmdiff.getvalue() def __setfield_alarmdiff(self, value): if isinstance(value,UINT): self.__field_alarmdiff=value else: self.__field_alarmdiff=UINT(value,**{'sizeinbytes': 4}) def __delfield_alarmdiff(self): del self.__field_alarmdiff alarmdiff=property(__getfield_alarmdiff, __setfield_alarmdiff, __delfield_alarmdiff, "Displayed alarm time") def __getfield_period(self): return self.__field_period.getvalue() def __setfield_period(self, value): if isinstance(value,UINT): self.__field_period=value else: self.__field_period=UINT(value,**{'sizeinbytes': 1}) def __delfield_period(self): del self.__field_period period=property(__getfield_period, __setfield_period, __delfield_period, "No, Daily, Weekly, Monthly, Yearly") def __getfield_dom(self): return self.__field_dom.getvalue() def __setfield_dom(self, value): if isinstance(value,UINT): self.__field_dom=value else: self.__field_dom=UINT(value,**{'sizeinbytes': 1}) def __delfield_dom(self): del self.__field_dom dom=property(__getfield_dom, __setfield_dom, __delfield_dom, "Day of month for the event") def __getfield_alarm(self): return self.__field_alarm.getvalue() def __setfield_alarm(self, value): if isinstance(value,UINT): self.__field_alarm=value else: self.__field_alarm=UINT(value,**{'sizeinbytes': 4}) def __delfield_alarm(self): del self.__field_alarm alarm=property(__getfield_alarm, __setfield_alarm, __delfield_alarm, None) def __getfield_pad3(self): try: self.__field_pad3 except: self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad3.getvalue() def __setfield_pad3(self, value): if isinstance(value,UNKNOWN): self.__field_pad3=value else: self.__field_pad3=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad3(self): del self.__field_pad3 pad3=property(__getfield_pad3, __setfield_pad3, __delfield_pad3, None) def __getfield_serial(self): try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_serial.getvalue() def __setfield_serial(self, value): if isinstance(value,UINT): self.__field_serial=value else: self.__field_serial=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_serial(self): del self.__field_serial serial=property(__getfield_serial, __setfield_serial, __delfield_serial, "Some kind of serial number") def __getfield_pad4(self): try: self.__field_pad4 except: self.__field_pad4=UNKNOWN(**{'sizeinbytes': 3}) return self.__field_pad4.getvalue() def __setfield_pad4(self, value): if isinstance(value,UNKNOWN): self.__field_pad4=value else: self.__field_pad4=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_pad4(self): del self.__field_pad4 pad4=property(__getfield_pad4, __setfield_pad4, __delfield_pad4, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 2}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('eventname', self.__field_eventname, None) yield ('pad1', self.__field_pad1, None) yield ('eventname_len', self.__field_eventname_len, None) yield ('start', self.__field_start, "# seconds since Jan 1, 1980 approximately") yield ('end', self.__field_end, None) yield ('location', self.__field_location, None) yield ('pad2', self.__field_pad2, None) yield ('location_len', self.__field_location_len, None) yield ('alarmdiff', self.__field_alarmdiff, "Displayed alarm time") yield ('period', self.__field_period, "No, Daily, Weekly, Monthly, Yearly") yield ('dom', self.__field_dom, "Day of month for the event") yield ('alarm', self.__field_alarm, None) yield ('pad3', self.__field_pad3, None) yield ('serial', self.__field_serial, "Some kind of serial number") yield ('pad4', self.__field_pad4, None) yield ('ringtone', self.__field_ringtone, None) class eventresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventresponse,self).__init__(**dict) if self.__class__ is eventresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader() self.__field_header.readfrombuffer(buf) self.__field_entry=evententry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,evententry): self.__field_entry=value else: self.__field_entry=evententry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class eventslotinuseresponse(BaseProtogenClass): __fields=['header', 'slot', 'flag', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventslotinuseresponse,self).__init__(**dict) if self.__class__ is eventslotinuseresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventslotinuseresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventslotinuseresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpheader() self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpheader): self.__field_header=value else: self.__field_header=qcpheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, None) yield ('pad', self.__field_pad, None) class eventslotinuseupdaterequest(BaseProtogenClass): __fields=['header', 'slot', 'flag', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventslotinuseupdaterequest,self).__init__(**dict) if self.__class__ is eventslotinuseupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventslotinuseupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventslotinuseupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0d, 'command': 0x74}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 124}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpwriteheader(**{'packettype': 0x0d, 'command': 0x74}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 124}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0d, 'command': 0x74}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpwriteheader): self.__field_header=value else: self.__field_header=qcpwriteheader(value,**{'packettype': 0x0d, 'command': 0x74}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 124}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 124}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, None) yield ('pad', self.__field_pad, None) class eventupdaterequest(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventupdaterequest,self).__init__(**dict) if self.__class__ is eventupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x23}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 56}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x23}) self.__field_header.readfrombuffer(buf) self.__field_entry=evententry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 56}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=qcpwriteheader(**{'packettype': 0x0c, 'command':0x23}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,qcpwriteheader): self.__field_header=value else: self.__field_header=qcpwriteheader(value,**{'packettype': 0x0c, 'command':0x23}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,evententry): self.__field_entry=value else: self.__field_entry=evententry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 56}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 56}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class callalarmrequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmrequest,self).__init__(**dict) if self.__class__ is callalarmrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x24}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x24}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x24}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c, 'command': 0x24}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 501}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class callalarmentry(BaseProtogenClass): __fields=['slot', 'flag', 'dunno1', 'phonenum', 'phonenum_len', 'date', 'period', 'dom', 'datedup', 'name', 'pad1', 'name_len', 'phonenumbertype', 'phonenumberslot', 'serial', 'pad2', 'ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmentry,self).__init__(**dict) if self.__class__ is callalarmentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_dunno1.writetobuffer(buf) self.__field_phonenum.writetobuffer(buf) self.__field_phonenum_len.writetobuffer(buf) self.__field_date.writetobuffer(buf) self.__field_period.writetobuffer(buf) self.__field_dom.writetobuffer(buf) self.__field_datedup.writetobuffer(buf) self.__field_name.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.writetobuffer(buf) self.__field_name_len.writetobuffer(buf) self.__field_phonenumbertype.writetobuffer(buf) self.__field_phonenumberslot.writetobuffer(buf) try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad2.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_dunno1=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_dunno1.readfrombuffer(buf) self.__field_phonenum=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_phonenum.readfrombuffer(buf) self.__field_phonenum_len=UINT(**{'sizeinbytes': 1}) self.__field_phonenum_len.readfrombuffer(buf) self.__field_date=UINT(**{'sizeinbytes': 4}) self.__field_date.readfrombuffer(buf) self.__field_period=UINT(**{'sizeinbytes': 1}) self.__field_period.readfrombuffer(buf) self.__field_dom=UINT(**{'sizeinbytes': 1}) self.__field_dom.readfrombuffer(buf) self.__field_datedup=UINT(**{'sizeinbytes': 4}) self.__field_datedup.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_name.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.readfrombuffer(buf) self.__field_name_len=UINT(**{'sizeinbytes': 1}) self.__field_name_len.readfrombuffer(buf) self.__field_phonenumbertype=UINT(**{'sizeinbytes': 1}) self.__field_phonenumbertype.readfrombuffer(buf) self.__field_phonenumberslot=UINT(**{'sizeinbytes': 2}) self.__field_phonenumberslot.readfrombuffer(buf) self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad2.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, "0: Not used, 1: Scheduled, 2: Already Happened") def __getfield_dunno1(self): try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UINT): self.__field_dunno1=value else: self.__field_dunno1=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, "Related to Snooze?") def __getfield_phonenum(self): return self.__field_phonenum.getvalue() def __setfield_phonenum(self, value): if isinstance(value,USTRING): self.__field_phonenum=value else: self.__field_phonenum=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_phonenum(self): del self.__field_phonenum phonenum=property(__getfield_phonenum, __setfield_phonenum, __delfield_phonenum, None) def __getfield_phonenum_len(self): return self.__field_phonenum_len.getvalue() def __setfield_phonenum_len(self, value): if isinstance(value,UINT): self.__field_phonenum_len=value else: self.__field_phonenum_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_phonenum_len(self): del self.__field_phonenum_len phonenum_len=property(__getfield_phonenum_len, __setfield_phonenum_len, __delfield_phonenum_len, None) def __getfield_date(self): return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,UINT): self.__field_date=value else: self.__field_date=UINT(value,**{'sizeinbytes': 4}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, "# seconds since Jan 1, 1980 approximately") def __getfield_period(self): return self.__field_period.getvalue() def __setfield_period(self, value): if isinstance(value,UINT): self.__field_period=value else: self.__field_period=UINT(value,**{'sizeinbytes': 1}) def __delfield_period(self): del self.__field_period period=property(__getfield_period, __setfield_period, __delfield_period, "No, Daily, Weekly, Monthly, Yearly") def __getfield_dom(self): return self.__field_dom.getvalue() def __setfield_dom(self, value): if isinstance(value,UINT): self.__field_dom=value else: self.__field_dom=UINT(value,**{'sizeinbytes': 1}) def __delfield_dom(self): del self.__field_dom dom=property(__getfield_dom, __setfield_dom, __delfield_dom, "Day of month for the event") def __getfield_datedup(self): return self.__field_datedup.getvalue() def __setfield_datedup(self, value): if isinstance(value,UINT): self.__field_datedup=value else: self.__field_datedup=UINT(value,**{'sizeinbytes': 4}) def __delfield_datedup(self): del self.__field_datedup datedup=property(__getfield_datedup, __setfield_datedup, __delfield_datedup, "Copy of the date. Always the same???") def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_name_len(self): return self.__field_name_len.getvalue() def __setfield_name_len(self, value): if isinstance(value,UINT): self.__field_name_len=value else: self.__field_name_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_name_len(self): del self.__field_name_len name_len=property(__getfield_name_len, __setfield_name_len, __delfield_name_len, None) def __getfield_phonenumbertype(self): return self.__field_phonenumbertype.getvalue() def __setfield_phonenumbertype(self, value): if isinstance(value,UINT): self.__field_phonenumbertype=value else: self.__field_phonenumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_phonenumbertype(self): del self.__field_phonenumbertype phonenumbertype=property(__getfield_phonenumbertype, __setfield_phonenumbertype, __delfield_phonenumbertype, "1: Home, 2: Work, ...") def __getfield_phonenumberslot(self): return self.__field_phonenumberslot.getvalue() def __setfield_phonenumberslot(self, value): if isinstance(value,UINT): self.__field_phonenumberslot=value else: self.__field_phonenumberslot=UINT(value,**{'sizeinbytes': 2}) def __delfield_phonenumberslot(self): del self.__field_phonenumberslot phonenumberslot=property(__getfield_phonenumberslot, __setfield_phonenumberslot, __delfield_phonenumberslot, None) def __getfield_serial(self): try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_serial.getvalue() def __setfield_serial(self, value): if isinstance(value,UINT): self.__field_serial=value else: self.__field_serial=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_serial(self): del self.__field_serial serial=property(__getfield_serial, __setfield_serial, __delfield_serial, None) def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 3}) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, "0: Not used, 1: Scheduled, 2: Already Happened") yield ('dunno1', self.__field_dunno1, "Related to Snooze?") yield ('phonenum', self.__field_phonenum, None) yield ('phonenum_len', self.__field_phonenum_len, None) yield ('date', self.__field_date, "# seconds since Jan 1, 1980 approximately") yield ('period', self.__field_period, "No, Daily, Weekly, Monthly, Yearly") yield ('dom', self.__field_dom, "Day of month for the event") yield ('datedup', self.__field_datedup, "Copy of the date. Always the same???") yield ('name', self.__field_name, None) yield ('pad1', self.__field_pad1, None) yield ('name_len', self.__field_name_len, None) yield ('phonenumbertype', self.__field_phonenumbertype, "1: Home, 2: Work, ...") yield ('phonenumberslot', self.__field_phonenumberslot, None) yield ('serial', self.__field_serial, None) yield ('pad2', self.__field_pad2, None) yield ('ringtone', self.__field_ringtone, None) class callalarmresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmresponse,self).__init__(**dict) if self.__class__ is callalarmresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=callalarmentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 417}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,callalarmentry): self.__field_entry=value else: self.__field_entry=callalarmentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 417}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class callalarmupdaterequest(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmupdaterequest,self).__init__(**dict) if self.__class__ is callalarmupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x0c, 'command':0x24}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 417}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyowriteheader(**{'packettype': 0x0c, 'command':0x24}) self.__field_header.readfrombuffer(buf) self.__field_entry=callalarmentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 417}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x0c, 'command':0x24}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyowriteheader): self.__field_header=value else: self.__field_header=sanyowriteheader(value,**{'packettype': 0x0c, 'command':0x24}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,callalarmentry): self.__field_entry=value else: self.__field_entry=callalarmentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 417}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 417}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class bufferpartrequest(BaseProtogenClass): __fields=['bufpartsize', 'header', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(bufferpartrequest,self).__init__(**dict) if self.__class__ is bufferpartrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(bufferpartrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(bufferpartrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_bufpartsize except: self.__field_bufpartsize=UINT(**{'constant': 1024}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0f}) self.__field_header.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 1026}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x0f}) self.__field_header.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 1026}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_bufpartsize(self): return self.__field_bufpartsize.getvalue() def __setfield_bufpartsize(self, value): if isinstance(value,UINT): self.__field_bufpartsize=value else: self.__field_bufpartsize=UINT(value,**{'constant': 1024}) def __delfield_bufpartsize(self): del self.__field_bufpartsize bufpartsize=property(__getfield_bufpartsize, __setfield_bufpartsize, __delfield_bufpartsize, None) def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0f}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0f}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 1026}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 1026}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('bufpartsize', self.__field_bufpartsize, None) yield ('header', self.__field_header, None) yield ('pad', self.__field_pad, None) class bufferpartresponse(BaseProtogenClass): __fields=['bufpartsize', 'header', 'data', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(bufferpartresponse,self).__init__(**dict) if self.__class__ is bufferpartresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(bufferpartresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(bufferpartresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_bufpartsize except: self.__field_bufpartsize=UINT(**{'constant': 1024}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_data.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_data=DATA(**{'sizeinbytes': self.bufpartsize}) self.__field_data.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_bufpartsize(self): return self.__field_bufpartsize.getvalue() def __setfield_bufpartsize(self, value): if isinstance(value,UINT): self.__field_bufpartsize=value else: self.__field_bufpartsize=UINT(value,**{'constant': 1024}) def __delfield_bufpartsize(self): del self.__field_bufpartsize bufpartsize=property(__getfield_bufpartsize, __setfield_bufpartsize, __delfield_bufpartsize, None) def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_data(self): return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,DATA): self.__field_data=value else: self.__field_data=DATA(value,**{'sizeinbytes': self.bufpartsize}) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 2}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('bufpartsize', self.__field_bufpartsize, None) yield ('header', self.__field_header, None) yield ('data', self.__field_data, None) yield ('pad', self.__field_pad, None) class bufferpartupdaterequest(BaseProtogenClass): __fields=['bufpartsize', 'header', 'data', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(bufferpartupdaterequest,self).__init__(**dict) if self.__class__ is bufferpartupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(bufferpartupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(bufferpartupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_bufpartsize except: self.__field_bufpartsize=UINT(**{'constant': 1024}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x0f}) self.__field_header.writetobuffer(buf) self.__field_data.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyowriteheader(**{'packettype': 0x0f}) self.__field_header.readfrombuffer(buf) self.__field_data=DATA(**{'sizeinbytes': self.bufpartsize}) self.__field_data.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_bufpartsize(self): return self.__field_bufpartsize.getvalue() def __setfield_bufpartsize(self, value): if isinstance(value,UINT): self.__field_bufpartsize=value else: self.__field_bufpartsize=UINT(value,**{'constant': 1024}) def __delfield_bufpartsize(self): del self.__field_bufpartsize bufpartsize=property(__getfield_bufpartsize, __setfield_bufpartsize, __delfield_bufpartsize, None) def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyowriteheader(**{'packettype': 0x0f}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyowriteheader): self.__field_header=value else: self.__field_header=sanyowriteheader(value,**{'packettype': 0x0f}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_data(self): return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,DATA): self.__field_data=value else: self.__field_data=DATA(value,**{'sizeinbytes': self.bufpartsize}) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 2}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 2}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('bufpartsize', self.__field_bufpartsize, None) yield ('header', self.__field_header, None) yield ('data', self.__field_data, None) yield ('pad', self.__field_pad, None) class calleridbuffer(BaseProtogenClass): "Index so that phone can show a name instead of number" __fields=['maxentries', 'startcommand', 'bufsize', 'comment', 'numentries', 'items', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(calleridbuffer,self).__init__(**dict) if self.__class__ is calleridbuffer: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(calleridbuffer,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(calleridbuffer,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_maxentries except: self.__field_maxentries=UINT(**{'constant': 500}) try: self.__field_startcommand except: self.__field_startcommand=UINT(**{'constant': 0x46}) try: self.__field_bufsize except: self.__field_bufsize=UINT(**{'constant': 7168}) try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "callerid"}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numentries.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{'length': self.maxentries, 'elementclass': calleridentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 666}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numentries=UINT(**{'sizeinbytes': 2}) self.__field_numentries.readfrombuffer(buf) self.__field_items=LIST(**{'length': self.maxentries, 'elementclass': calleridentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 666}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_maxentries(self): return self.__field_maxentries.getvalue() def __setfield_maxentries(self, value): if isinstance(value,UINT): self.__field_maxentries=value else: self.__field_maxentries=UINT(value,**{'constant': 500}) def __delfield_maxentries(self): del self.__field_maxentries maxentries=property(__getfield_maxentries, __setfield_maxentries, __delfield_maxentries, None) def __getfield_startcommand(self): return self.__field_startcommand.getvalue() def __setfield_startcommand(self, value): if isinstance(value,UINT): self.__field_startcommand=value else: self.__field_startcommand=UINT(value,**{'constant': 0x46}) def __delfield_startcommand(self): del self.__field_startcommand startcommand=property(__getfield_startcommand, __setfield_startcommand, __delfield_startcommand, "Starting command for R/W buf parts") def __getfield_bufsize(self): return self.__field_bufsize.getvalue() def __setfield_bufsize(self, value): if isinstance(value,UINT): self.__field_bufsize=value else: self.__field_bufsize=UINT(value,**{'constant': 7168}) def __delfield_bufsize(self): del self.__field_bufsize bufsize=property(__getfield_bufsize, __setfield_bufsize, __delfield_bufsize, None) def __getfield_comment(self): try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "callerid"}) return self.__field_comment.getvalue() def __setfield_comment(self, value): if isinstance(value,USTRING): self.__field_comment=value else: self.__field_comment=USTRING(value,**{'default': "callerid"}) def __delfield_comment(self): del self.__field_comment comment=property(__getfield_comment, __setfield_comment, __delfield_comment, None) def __getfield_numentries(self): return self.__field_numentries.getvalue() def __setfield_numentries(self, value): if isinstance(value,UINT): self.__field_numentries=value else: self.__field_numentries=UINT(value,**{'sizeinbytes': 2}) def __delfield_numentries(self): del self.__field_numentries numentries=property(__getfield_numentries, __setfield_numentries, __delfield_numentries, "Number phone numbers") def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'length': self.maxentries, 'elementclass': calleridentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'length': self.maxentries, 'elementclass': calleridentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 666}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 666}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('maxentries', self.__field_maxentries, None) yield ('startcommand', self.__field_startcommand, "Starting command for R/W buf parts") yield ('bufsize', self.__field_bufsize, None) yield ('comment', self.__field_comment, None) yield ('numentries', self.__field_numentries, "Number phone numbers") yield ('items', self.__field_items, None) yield ('pad', self.__field_pad, None) class ringerpicbuffer(BaseProtogenClass): "Index of ringer and picture assignments" __fields=['numpbslots', 'startcommand', 'packettype', 'bufsize', 'comment', 'ringtones', 'wallpapers', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ringerpicbuffer,self).__init__(**dict) if self.__class__ is ringerpicbuffer: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ringerpicbuffer,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ringerpicbuffer,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_numpbslots except: self.__field_numpbslots=UINT(**{'constant': _NUMPBSLOTS}) try: self.__field_startcommand except: self.__field_startcommand=UINT(**{'constant': 0xd7}) try: self.__field_packettype except: self.__field_packettype=UINT(**{'constant': 0x0f}) try: self.__field_bufsize except: self.__field_bufsize=UINT(**{'constant': 1024}) try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "ringer/picture assignments"}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_ringtones except: self.__field_ringtones=LIST(**{'elementclass': _gen_p_sanyo3200_200, 'length': _NUMPBSLOTS}) self.__field_ringtones.writetobuffer(buf) try: self.__field_wallpapers except: self.__field_wallpapers=LIST(**{'elementclass': _gen_p_sanyo3200_202, 'length': _NUMPBSLOTS}) self.__field_wallpapers.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 424}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_ringtones=LIST(**{'elementclass': _gen_p_sanyo3200_200, 'length': _NUMPBSLOTS}) self.__field_ringtones.readfrombuffer(buf) self.__field_wallpapers=LIST(**{'elementclass': _gen_p_sanyo3200_202, 'length': _NUMPBSLOTS}) self.__field_wallpapers.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 424}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numpbslots(self): return self.__field_numpbslots.getvalue() def __setfield_numpbslots(self, value): if isinstance(value,UINT): self.__field_numpbslots=value else: self.__field_numpbslots=UINT(value,**{'constant': _NUMPBSLOTS}) def __delfield_numpbslots(self): del self.__field_numpbslots numpbslots=property(__getfield_numpbslots, __setfield_numpbslots, __delfield_numpbslots, "Number of phone book slots") def __getfield_startcommand(self): return self.__field_startcommand.getvalue() def __setfield_startcommand(self, value): if isinstance(value,UINT): self.__field_startcommand=value else: self.__field_startcommand=UINT(value,**{'constant': 0xd7}) def __delfield_startcommand(self): del self.__field_startcommand startcommand=property(__getfield_startcommand, __setfield_startcommand, __delfield_startcommand, "Starting command for R/W buf parts") def __getfield_packettype(self): return self.__field_packettype.getvalue() def __setfield_packettype(self, value): if isinstance(value,UINT): self.__field_packettype=value else: self.__field_packettype=UINT(value,**{'constant': 0x0f}) def __delfield_packettype(self): del self.__field_packettype packettype=property(__getfield_packettype, __setfield_packettype, __delfield_packettype, "Non standard packet type") def __getfield_bufsize(self): return self.__field_bufsize.getvalue() def __setfield_bufsize(self, value): if isinstance(value,UINT): self.__field_bufsize=value else: self.__field_bufsize=UINT(value,**{'constant': 1024}) def __delfield_bufsize(self): del self.__field_bufsize bufsize=property(__getfield_bufsize, __setfield_bufsize, __delfield_bufsize, None) def __getfield_comment(self): try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "ringer/picture assignments"}) return self.__field_comment.getvalue() def __setfield_comment(self, value): if isinstance(value,USTRING): self.__field_comment=value else: self.__field_comment=USTRING(value,**{'default': "ringer/picture assignments"}) def __delfield_comment(self): del self.__field_comment comment=property(__getfield_comment, __setfield_comment, __delfield_comment, None) def __getfield_ringtones(self): try: self.__field_ringtones except: self.__field_ringtones=LIST(**{'elementclass': _gen_p_sanyo3200_200, 'length': _NUMPBSLOTS}) return self.__field_ringtones.getvalue() def __setfield_ringtones(self, value): if isinstance(value,LIST): self.__field_ringtones=value else: self.__field_ringtones=LIST(value,**{'elementclass': _gen_p_sanyo3200_200, 'length': _NUMPBSLOTS}) def __delfield_ringtones(self): del self.__field_ringtones ringtones=property(__getfield_ringtones, __setfield_ringtones, __delfield_ringtones, None) def __getfield_wallpapers(self): try: self.__field_wallpapers except: self.__field_wallpapers=LIST(**{'elementclass': _gen_p_sanyo3200_202, 'length': _NUMPBSLOTS}) return self.__field_wallpapers.getvalue() def __setfield_wallpapers(self, value): if isinstance(value,LIST): self.__field_wallpapers=value else: self.__field_wallpapers=LIST(value,**{'elementclass': _gen_p_sanyo3200_202, 'length': _NUMPBSLOTS}) def __delfield_wallpapers(self): del self.__field_wallpapers wallpapers=property(__getfield_wallpapers, __setfield_wallpapers, __delfield_wallpapers, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 424}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 424}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('numpbslots', self.__field_numpbslots, "Number of phone book slots") yield ('startcommand', self.__field_startcommand, "Starting command for R/W buf parts") yield ('packettype', self.__field_packettype, "Non standard packet type") yield ('bufsize', self.__field_bufsize, None) yield ('comment', self.__field_comment, None) yield ('ringtones', self.__field_ringtones, None) yield ('wallpapers', self.__field_wallpapers, None) yield ('pad', self.__field_pad, None) class _gen_p_sanyo3200_200(BaseProtogenClass): 'Anonymous inner class' __fields=['ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo3200_200,self).__init__(**dict) if self.__class__ is _gen_p_sanyo3200_200: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo3200_200,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo3200_200,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_ringtone=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_ringtone.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "ringtone index") def iscontainer(self): return True def containerelements(self): yield ('ringtone', self.__field_ringtone, "ringtone index") class _gen_p_sanyo3200_202(BaseProtogenClass): 'Anonymous inner class' __fields=['wallpaper'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo3200_202,self).__init__(**dict) if self.__class__ is _gen_p_sanyo3200_202: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo3200_202,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo3200_202,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_wallpaper=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_wallpaper.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_wallpaper=UINT(**{'sizeinbytes': 1}) self.__field_wallpaper.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 1}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, "wallpaper index") def iscontainer(self): return True def containerelements(self): yield ('wallpaper', self.__field_wallpaper, "wallpaper index") class pbsortbuffer(BaseProtogenClass): "Various arrays for sorting the phone book, speed dial, determining which" __fields=['startcommand', 'bufsize', 'comment', 'usedflags', 'slotsused', 'slotsused2', 'numemail', 'numurl', 'firsttypes', 'sortorder', 'pbfirstletters', 'sortorder2', 'speeddialindex', 'longnumbersindex', 'emails', 'emailfirstletters', 'urls', 'urlfirstletters', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbsortbuffer,self).__init__(**dict) if self.__class__ is pbsortbuffer: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbsortbuffer,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbsortbuffer,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_startcommand except: self.__field_startcommand=UINT(**{'constant': 0x3c}) try: self.__field_bufsize except: self.__field_bufsize=UINT(**{'constant': 4096}) try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "sort buffer"}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_usedflags except: self.__field_usedflags=LIST(**{'elementclass': _gen_p_sanyo3200_223, 'length': _NUMPBSLOTS, 'createdefault': True}) self.__field_usedflags.writetobuffer(buf) self.__field_slotsused.writetobuffer(buf) self.__field_slotsused2.writetobuffer(buf) self.__field_numemail.writetobuffer(buf) self.__field_numurl.writetobuffer(buf) try: self.__field_firsttypes except: self.__field_firsttypes=LIST(**{'elementclass': _gen_p_sanyo3200_229, 'length': _NUMPBSLOTS}) self.__field_firsttypes.writetobuffer(buf) try: self.__field_sortorder except: self.__field_sortorder=LIST(**{'elementclass': _gen_p_sanyo3200_231, 'length': _NUMPBSLOTS}) self.__field_sortorder.writetobuffer(buf) self.__field_pbfirstletters.writetobuffer(buf) try: self.__field_sortorder2 except: self.__field_sortorder2=LIST(**{'elementclass': _gen_p_sanyo3200_234, 'length': _NUMPBSLOTS}) self.__field_sortorder2.writetobuffer(buf) try: self.__field_speeddialindex except: self.__field_speeddialindex=LIST(**{'elementclass': _gen_p_sanyo3200_236, 'length': _NUMSPEEDDIALS}) self.__field_speeddialindex.writetobuffer(buf) try: self.__field_longnumbersindex except: self.__field_longnumbersindex=LIST(**{'elementclass': _gen_p_sanyo3200_238, 'length': _NUMLONGNUMBERS}) self.__field_longnumbersindex.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_sanyo3200_240, 'length': _NUMPBSLOTS}) self.__field_emails.writetobuffer(buf) self.__field_emailfirstletters.writetobuffer(buf) try: self.__field_urls except: self.__field_urls=LIST(**{'elementclass': _gen_p_sanyo3200_243, 'length': _NUMPBSLOTS}) self.__field_urls.writetobuffer(buf) self.__field_urlfirstletters.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 162}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_usedflags=LIST(**{'elementclass': _gen_p_sanyo3200_223, 'length': _NUMPBSLOTS, 'createdefault': True}) self.__field_usedflags.readfrombuffer(buf) self.__field_slotsused=UINT(**{'sizeinbytes': 2}) self.__field_slotsused.readfrombuffer(buf) self.__field_slotsused2=UINT(**{'sizeinbytes': 2}) self.__field_slotsused2.readfrombuffer(buf) self.__field_numemail=UINT(**{'sizeinbytes': 2}) self.__field_numemail.readfrombuffer(buf) self.__field_numurl=UINT(**{'sizeinbytes': 2}) self.__field_numurl.readfrombuffer(buf) self.__field_firsttypes=LIST(**{'elementclass': _gen_p_sanyo3200_229, 'length': _NUMPBSLOTS}) self.__field_firsttypes.readfrombuffer(buf) self.__field_sortorder=LIST(**{'elementclass': _gen_p_sanyo3200_231, 'length': _NUMPBSLOTS}) self.__field_sortorder.readfrombuffer(buf) self.__field_pbfirstletters=USTRING(**{'terminator': None, 'sizeinbytes': _NUMPBSLOTS}) self.__field_pbfirstletters.readfrombuffer(buf) self.__field_sortorder2=LIST(**{'elementclass': _gen_p_sanyo3200_234, 'length': _NUMPBSLOTS}) self.__field_sortorder2.readfrombuffer(buf) self.__field_speeddialindex=LIST(**{'elementclass': _gen_p_sanyo3200_236, 'length': _NUMSPEEDDIALS}) self.__field_speeddialindex.readfrombuffer(buf) self.__field_longnumbersindex=LIST(**{'elementclass': _gen_p_sanyo3200_238, 'length': _NUMLONGNUMBERS}) self.__field_longnumbersindex.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_sanyo3200_240, 'length': _NUMPBSLOTS}) self.__field_emails.readfrombuffer(buf) self.__field_emailfirstletters=USTRING(**{'terminator': None, 'sizeinbytes': _NUMPBSLOTS}) self.__field_emailfirstletters.readfrombuffer(buf) self.__field_urls=LIST(**{'elementclass': _gen_p_sanyo3200_243, 'length': _NUMPBSLOTS}) self.__field_urls.readfrombuffer(buf) self.__field_urlfirstletters=USTRING(**{'terminator': None, 'sizeinbytes': _NUMPBSLOTS}) self.__field_urlfirstletters.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 162}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_startcommand(self): return self.__field_startcommand.getvalue() def __setfield_startcommand(self, value): if isinstance(value,UINT): self.__field_startcommand=value else: self.__field_startcommand=UINT(value,**{'constant': 0x3c}) def __delfield_startcommand(self): del self.__field_startcommand startcommand=property(__getfield_startcommand, __setfield_startcommand, __delfield_startcommand, "Starting command for R/W buf parts") def __getfield_bufsize(self): return self.__field_bufsize.getvalue() def __setfield_bufsize(self, value): if isinstance(value,UINT): self.__field_bufsize=value else: self.__field_bufsize=UINT(value,**{'constant': 4096}) def __delfield_bufsize(self): del self.__field_bufsize bufsize=property(__getfield_bufsize, __setfield_bufsize, __delfield_bufsize, None) def __getfield_comment(self): try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "sort buffer"}) return self.__field_comment.getvalue() def __setfield_comment(self, value): if isinstance(value,USTRING): self.__field_comment=value else: self.__field_comment=USTRING(value,**{'default': "sort buffer"}) def __delfield_comment(self): del self.__field_comment comment=property(__getfield_comment, __setfield_comment, __delfield_comment, None) def __getfield_usedflags(self): try: self.__field_usedflags except: self.__field_usedflags=LIST(**{'elementclass': _gen_p_sanyo3200_223, 'length': _NUMPBSLOTS, 'createdefault': True}) return self.__field_usedflags.getvalue() def __setfield_usedflags(self, value): if isinstance(value,LIST): self.__field_usedflags=value else: self.__field_usedflags=LIST(value,**{'elementclass': _gen_p_sanyo3200_223, 'length': _NUMPBSLOTS, 'createdefault': True}) def __delfield_usedflags(self): del self.__field_usedflags usedflags=property(__getfield_usedflags, __setfield_usedflags, __delfield_usedflags, None) def __getfield_slotsused(self): return self.__field_slotsused.getvalue() def __setfield_slotsused(self, value): if isinstance(value,UINT): self.__field_slotsused=value else: self.__field_slotsused=UINT(value,**{'sizeinbytes': 2}) def __delfield_slotsused(self): del self.__field_slotsused slotsused=property(__getfield_slotsused, __setfield_slotsused, __delfield_slotsused, None) def __getfield_slotsused2(self): return self.__field_slotsused2.getvalue() def __setfield_slotsused2(self, value): if isinstance(value,UINT): self.__field_slotsused2=value else: self.__field_slotsused2=UINT(value,**{'sizeinbytes': 2}) def __delfield_slotsused2(self): del self.__field_slotsused2 slotsused2=property(__getfield_slotsused2, __setfield_slotsused2, __delfield_slotsused2, "Always seems to be the same. Why duplicated?") def __getfield_numemail(self): return self.__field_numemail.getvalue() def __setfield_numemail(self, value): if isinstance(value,UINT): self.__field_numemail=value else: self.__field_numemail=UINT(value,**{'sizeinbytes': 2}) def __delfield_numemail(self): del self.__field_numemail numemail=property(__getfield_numemail, __setfield_numemail, __delfield_numemail, "Num of slots with email") def __getfield_numurl(self): return self.__field_numurl.getvalue() def __setfield_numurl(self, value): if isinstance(value,UINT): self.__field_numurl=value else: self.__field_numurl=UINT(value,**{'sizeinbytes': 2}) def __delfield_numurl(self): del self.__field_numurl numurl=property(__getfield_numurl, __setfield_numurl, __delfield_numurl, "Num of slots with URL") def __getfield_firsttypes(self): try: self.__field_firsttypes except: self.__field_firsttypes=LIST(**{'elementclass': _gen_p_sanyo3200_229, 'length': _NUMPBSLOTS}) return self.__field_firsttypes.getvalue() def __setfield_firsttypes(self, value): if isinstance(value,LIST): self.__field_firsttypes=value else: self.__field_firsttypes=LIST(value,**{'elementclass': _gen_p_sanyo3200_229, 'length': _NUMPBSLOTS}) def __delfield_firsttypes(self): del self.__field_firsttypes firsttypes=property(__getfield_firsttypes, __setfield_firsttypes, __delfield_firsttypes, None) def __getfield_sortorder(self): try: self.__field_sortorder except: self.__field_sortorder=LIST(**{'elementclass': _gen_p_sanyo3200_231, 'length': _NUMPBSLOTS}) return self.__field_sortorder.getvalue() def __setfield_sortorder(self, value): if isinstance(value,LIST): self.__field_sortorder=value else: self.__field_sortorder=LIST(value,**{'elementclass': _gen_p_sanyo3200_231, 'length': _NUMPBSLOTS}) def __delfield_sortorder(self): del self.__field_sortorder sortorder=property(__getfield_sortorder, __setfield_sortorder, __delfield_sortorder, None) def __getfield_pbfirstletters(self): return self.__field_pbfirstletters.getvalue() def __setfield_pbfirstletters(self, value): if isinstance(value,USTRING): self.__field_pbfirstletters=value else: self.__field_pbfirstletters=USTRING(value,**{'terminator': None, 'sizeinbytes': _NUMPBSLOTS}) def __delfield_pbfirstletters(self): del self.__field_pbfirstletters pbfirstletters=property(__getfield_pbfirstletters, __setfield_pbfirstletters, __delfield_pbfirstletters, None) def __getfield_sortorder2(self): try: self.__field_sortorder2 except: self.__field_sortorder2=LIST(**{'elementclass': _gen_p_sanyo3200_234, 'length': _NUMPBSLOTS}) return self.__field_sortorder2.getvalue() def __setfield_sortorder2(self, value): if isinstance(value,LIST): self.__field_sortorder2=value else: self.__field_sortorder2=LIST(value,**{'elementclass': _gen_p_sanyo3200_234, 'length': _NUMPBSLOTS}) def __delfield_sortorder2(self): del self.__field_sortorder2 sortorder2=property(__getfield_sortorder2, __setfield_sortorder2, __delfield_sortorder2, "Is this the same") def __getfield_speeddialindex(self): try: self.__field_speeddialindex except: self.__field_speeddialindex=LIST(**{'elementclass': _gen_p_sanyo3200_236, 'length': _NUMSPEEDDIALS}) return self.__field_speeddialindex.getvalue() def __setfield_speeddialindex(self, value): if isinstance(value,LIST): self.__field_speeddialindex=value else: self.__field_speeddialindex=LIST(value,**{'elementclass': _gen_p_sanyo3200_236, 'length': _NUMSPEEDDIALS}) def __delfield_speeddialindex(self): del self.__field_speeddialindex speeddialindex=property(__getfield_speeddialindex, __setfield_speeddialindex, __delfield_speeddialindex, None) def __getfield_longnumbersindex(self): try: self.__field_longnumbersindex except: self.__field_longnumbersindex=LIST(**{'elementclass': _gen_p_sanyo3200_238, 'length': _NUMLONGNUMBERS}) return self.__field_longnumbersindex.getvalue() def __setfield_longnumbersindex(self, value): if isinstance(value,LIST): self.__field_longnumbersindex=value else: self.__field_longnumbersindex=LIST(value,**{'elementclass': _gen_p_sanyo3200_238, 'length': _NUMLONGNUMBERS}) def __delfield_longnumbersindex(self): del self.__field_longnumbersindex longnumbersindex=property(__getfield_longnumbersindex, __setfield_longnumbersindex, __delfield_longnumbersindex, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_sanyo3200_240, 'length': _NUMPBSLOTS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_sanyo3200_240, 'length': _NUMPBSLOTS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, "Sorted list of slots with Email") def __getfield_emailfirstletters(self): return self.__field_emailfirstletters.getvalue() def __setfield_emailfirstletters(self, value): if isinstance(value,USTRING): self.__field_emailfirstletters=value else: self.__field_emailfirstletters=USTRING(value,**{'terminator': None, 'sizeinbytes': _NUMPBSLOTS}) def __delfield_emailfirstletters(self): del self.__field_emailfirstletters emailfirstletters=property(__getfield_emailfirstletters, __setfield_emailfirstletters, __delfield_emailfirstletters, "First letters in sort order") def __getfield_urls(self): try: self.__field_urls except: self.__field_urls=LIST(**{'elementclass': _gen_p_sanyo3200_243, 'length': _NUMPBSLOTS}) return self.__field_urls.getvalue() def __setfield_urls(self, value): if isinstance(value,LIST): self.__field_urls=value else: self.__field_urls=LIST(value,**{'elementclass': _gen_p_sanyo3200_243, 'length': _NUMPBSLOTS}) def __delfield_urls(self): del self.__field_urls urls=property(__getfield_urls, __setfield_urls, __delfield_urls, "Sorted list of slots with a URL") def __getfield_urlfirstletters(self): return self.__field_urlfirstletters.getvalue() def __setfield_urlfirstletters(self, value): if isinstance(value,USTRING): self.__field_urlfirstletters=value else: self.__field_urlfirstletters=USTRING(value,**{'terminator': None, 'sizeinbytes': _NUMPBSLOTS}) def __delfield_urlfirstletters(self): del self.__field_urlfirstletters urlfirstletters=property(__getfield_urlfirstletters, __setfield_urlfirstletters, __delfield_urlfirstletters, "First letters in sort order") def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 162}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 162}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('startcommand', self.__field_startcommand, "Starting command for R/W buf parts") yield ('bufsize', self.__field_bufsize, None) yield ('comment', self.__field_comment, None) yield ('usedflags', self.__field_usedflags, None) yield ('slotsused', self.__field_slotsused, None) yield ('slotsused2', self.__field_slotsused2, "Always seems to be the same. Why duplicated?") yield ('numemail', self.__field_numemail, "Num of slots with email") yield ('numurl', self.__field_numurl, "Num of slots with URL") yield ('firsttypes', self.__field_firsttypes, None) yield ('sortorder', self.__field_sortorder, None) yield ('pbfirstletters', self.__field_pbfirstletters, None) yield ('sortorder2', self.__field_sortorder2, "Is this the same") yield ('speeddialindex', self.__field_speeddialindex, None) yield ('longnumbersindex', self.__field_longnumbersindex, None) yield ('emails', self.__field_emails, "Sorted list of slots with Email") yield ('emailfirstletters', self.__field_emailfirstletters, "First letters in sort order") yield ('urls', self.__field_urls, "Sorted list of slots with a URL") yield ('urlfirstletters', self.__field_urlfirstletters, "First letters in sort order") yield ('pad', self.__field_pad, None) class _gen_p_sanyo3200_223(BaseProtogenClass): 'Anonymous inner class' __fields=['used'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo3200_223,self).__init__(**dict) if self.__class__ is _gen_p_sanyo3200_223: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo3200_223,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo3200_223,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_used=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_used.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_used=UINT(**{'sizeinbytes': 1}) self.__field_used.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_used(self): return self.__field_used.getvalue() def __setfield_used(self, value): if isinstance(value,UINT): self.__field_used=value else: self.__field_used=UINT(value,**{'sizeinbytes': 1}) def __delfield_used(self): del self.__field_used used=property(__getfield_used, __setfield_used, __delfield_used, "1 if slot in use") def iscontainer(self): return True def containerelements(self): yield ('used', self.__field_used, "1 if slot in use") class _gen_p_sanyo3200_229(BaseProtogenClass): 'Anonymous inner class' __fields=['firsttype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo3200_229,self).__init__(**dict) if self.__class__ is _gen_p_sanyo3200_229: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo3200_229,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo3200_229,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_firsttype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_firsttype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_firsttype=UINT(**{'sizeinbytes': 1}) self.__field_firsttype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_firsttype(self): return self.__field_firsttype.getvalue() def __setfield_firsttype(self, value): if isinstance(value,UINT): self.__field_firsttype=value else: self.__field_firsttype=UINT(value,**{'sizeinbytes': 1}) def __delfield_firsttype(self): del self.__field_firsttype firsttype=property(__getfield_firsttype, __setfield_firsttype, __delfield_firsttype, "First phone number type in each slot") def iscontainer(self): return True def containerelements(self): yield ('firsttype', self.__field_firsttype, "First phone number type in each slot") class _gen_p_sanyo3200_231(BaseProtogenClass): 'Anonymous inner class' __fields=['pbslot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo3200_231,self).__init__(**dict) if self.__class__ is _gen_p_sanyo3200_231: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo3200_231,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo3200_231,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_pbslot=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pbslot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbslot=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbslot(self): return self.__field_pbslot.getvalue() def __setfield_pbslot(self, value): if isinstance(value,UINT): self.__field_pbslot=value else: self.__field_pbslot=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pbslot(self): del self.__field_pbslot pbslot=property(__getfield_pbslot, __setfield_pbslot, __delfield_pbslot, None) def iscontainer(self): return True def containerelements(self): yield ('pbslot', self.__field_pbslot, None) class _gen_p_sanyo3200_234(BaseProtogenClass): 'Anonymous inner class' __fields=['pbslot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo3200_234,self).__init__(**dict) if self.__class__ is _gen_p_sanyo3200_234: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo3200_234,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo3200_234,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_pbslot=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pbslot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbslot=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbslot(self): return self.__field_pbslot.getvalue() def __setfield_pbslot(self, value): if isinstance(value,UINT): self.__field_pbslot=value else: self.__field_pbslot=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pbslot(self): del self.__field_pbslot pbslot=property(__getfield_pbslot, __setfield_pbslot, __delfield_pbslot, None) def iscontainer(self): return True def containerelements(self): yield ('pbslot', self.__field_pbslot, None) class _gen_p_sanyo3200_236(BaseProtogenClass): 'Anonymous inner class' __fields=['pbslotandtype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo3200_236,self).__init__(**dict) if self.__class__ is _gen_p_sanyo3200_236: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo3200_236,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo3200_236,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_pbslotandtype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pbslotandtype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbslotandtype=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslotandtype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbslotandtype(self): return self.__field_pbslotandtype.getvalue() def __setfield_pbslotandtype(self, value): if isinstance(value,UINT): self.__field_pbslotandtype=value else: self.__field_pbslotandtype=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pbslotandtype(self): del self.__field_pbslotandtype pbslotandtype=property(__getfield_pbslotandtype, __setfield_pbslotandtype, __delfield_pbslotandtype, None) def iscontainer(self): return True def containerelements(self): yield ('pbslotandtype', self.__field_pbslotandtype, None) class _gen_p_sanyo3200_238(BaseProtogenClass): 'Anonymous inner class' __fields=['pbslotandtype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo3200_238,self).__init__(**dict) if self.__class__ is _gen_p_sanyo3200_238: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo3200_238,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo3200_238,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_pbslotandtype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pbslotandtype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbslotandtype=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslotandtype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbslotandtype(self): return self.__field_pbslotandtype.getvalue() def __setfield_pbslotandtype(self, value): if isinstance(value,UINT): self.__field_pbslotandtype=value else: self.__field_pbslotandtype=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pbslotandtype(self): del self.__field_pbslotandtype pbslotandtype=property(__getfield_pbslotandtype, __setfield_pbslotandtype, __delfield_pbslotandtype, None) def iscontainer(self): return True def containerelements(self): yield ('pbslotandtype', self.__field_pbslotandtype, None) class _gen_p_sanyo3200_240(BaseProtogenClass): 'Anonymous inner class' __fields=['pbslot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo3200_240,self).__init__(**dict) if self.__class__ is _gen_p_sanyo3200_240: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo3200_240,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo3200_240,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_pbslot=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pbslot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbslot=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbslot(self): return self.__field_pbslot.getvalue() def __setfield_pbslot(self, value): if isinstance(value,UINT): self.__field_pbslot=value else: self.__field_pbslot=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pbslot(self): del self.__field_pbslot pbslot=property(__getfield_pbslot, __setfield_pbslot, __delfield_pbslot, None) def iscontainer(self): return True def containerelements(self): yield ('pbslot', self.__field_pbslot, None) class _gen_p_sanyo3200_243(BaseProtogenClass): 'Anonymous inner class' __fields=['pbslot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo3200_243,self).__init__(**dict) if self.__class__ is _gen_p_sanyo3200_243: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo3200_243,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo3200_243,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_pbslot=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pbslot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbslot=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbslot(self): return self.__field_pbslot.getvalue() def __setfield_pbslot(self, value): if isinstance(value,UINT): self.__field_pbslot=value else: self.__field_pbslot=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pbslot(self): del self.__field_pbslot pbslot=property(__getfield_pbslot, __setfield_pbslot, __delfield_pbslot, None) def iscontainer(self): return True def containerelements(self): yield ('pbslot', self.__field_pbslot, None) class wallpaperbuffer(BaseProtogenClass): "Addition buffer of wallpaper assignment info" __fields=['numpbslots', 'startcommand', 'bufsize', 'comment', 'wallpapers', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(wallpaperbuffer,self).__init__(**dict) if self.__class__ is wallpaperbuffer: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(wallpaperbuffer,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(wallpaperbuffer,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_numpbslots except: self.__field_numpbslots=UINT(**{'constant': _NUMPBSLOTS}) try: self.__field_startcommand except: self.__field_startcommand=UINT(**{'constant': 0x69}) try: self.__field_bufsize except: self.__field_bufsize=UINT(**{'constant': 2048}) try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "wallpaper assignment info"}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_wallpapers except: self.__field_wallpapers=LIST(**{'length': _NUMPBSLOTS, 'elementclass': wallpaperinfo}) self.__field_wallpapers.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 548}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_wallpapers=LIST(**{'length': _NUMPBSLOTS, 'elementclass': wallpaperinfo}) self.__field_wallpapers.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 548}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numpbslots(self): return self.__field_numpbslots.getvalue() def __setfield_numpbslots(self, value): if isinstance(value,UINT): self.__field_numpbslots=value else: self.__field_numpbslots=UINT(value,**{'constant': _NUMPBSLOTS}) def __delfield_numpbslots(self): del self.__field_numpbslots numpbslots=property(__getfield_numpbslots, __setfield_numpbslots, __delfield_numpbslots, "Number of phone book slots") def __getfield_startcommand(self): return self.__field_startcommand.getvalue() def __setfield_startcommand(self, value): if isinstance(value,UINT): self.__field_startcommand=value else: self.__field_startcommand=UINT(value,**{'constant': 0x69}) def __delfield_startcommand(self): del self.__field_startcommand startcommand=property(__getfield_startcommand, __setfield_startcommand, __delfield_startcommand, "Starting command for R/W buf parts") def __getfield_bufsize(self): return self.__field_bufsize.getvalue() def __setfield_bufsize(self, value): if isinstance(value,UINT): self.__field_bufsize=value else: self.__field_bufsize=UINT(value,**{'constant': 2048}) def __delfield_bufsize(self): del self.__field_bufsize bufsize=property(__getfield_bufsize, __setfield_bufsize, __delfield_bufsize, None) def __getfield_comment(self): try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "wallpaper assignment info"}) return self.__field_comment.getvalue() def __setfield_comment(self, value): if isinstance(value,USTRING): self.__field_comment=value else: self.__field_comment=USTRING(value,**{'default': "wallpaper assignment info"}) def __delfield_comment(self): del self.__field_comment comment=property(__getfield_comment, __setfield_comment, __delfield_comment, None) def __getfield_wallpapers(self): try: self.__field_wallpapers except: self.__field_wallpapers=LIST(**{'length': _NUMPBSLOTS, 'elementclass': wallpaperinfo}) return self.__field_wallpapers.getvalue() def __setfield_wallpapers(self, value): if isinstance(value,LIST): self.__field_wallpapers=value else: self.__field_wallpapers=LIST(value,**{'length': _NUMPBSLOTS, 'elementclass': wallpaperinfo}) def __delfield_wallpapers(self): del self.__field_wallpapers wallpapers=property(__getfield_wallpapers, __setfield_wallpapers, __delfield_wallpapers, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 548}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 548}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('numpbslots', self.__field_numpbslots, "Number of phone book slots") yield ('startcommand', self.__field_startcommand, "Starting command for R/W buf parts") yield ('bufsize', self.__field_bufsize, None) yield ('comment', self.__field_comment, None) yield ('wallpapers', self.__field_wallpapers, None) yield ('pad', self.__field_pad, None) class messagerequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(messagerequest,self).__init__(**dict) if self.__class__ is messagerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(messagerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(messagerequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0xe1}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0xe1}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0xe1}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c, 'command': 0xe1}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 501}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class messagesentrequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(messagesentrequest,self).__init__(**dict) if self.__class__ is messagesentrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(messagesentrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(messagesentrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0d, 'command': 0x55}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x0d, 'command': 0x55}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0d, 'command': 0x55}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0d, 'command': 0x55}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 501}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class messageentry(BaseProtogenClass): __fields=['slot', 'read', 'counter', 'pad1', 'dunno1', 'dunno2', 'dunno3', 'pad2', 'dunno4', 'dunno5', 'pad3', 'message_len', 'message', 'pad4', 'year', 'month', 'day', 'hour', 'minute', 'second', 'callback_len', 'callback', 'phonenum_len', 'phonenum', 'dunno6', 'priority', 'pad6', 'dunno7', 'dunno8'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(messageentry,self).__init__(**dict) if self.__class__ is messageentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(messageentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(messageentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_counter.writetobuffer(buf) self.__field_pad1.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_dunno3.writetobuffer(buf) self.__field_pad2.writetobuffer(buf) self.__field_dunno4.writetobuffer(buf) self.__field_dunno5.writetobuffer(buf) self.__field_pad3.writetobuffer(buf) self.__field_message_len.writetobuffer(buf) self.__field_message.writetobuffer(buf) self.__field_pad4.writetobuffer(buf) self.__field_year.writetobuffer(buf) self.__field_month.writetobuffer(buf) self.__field_day.writetobuffer(buf) self.__field_hour.writetobuffer(buf) self.__field_minute.writetobuffer(buf) self.__field_second.writetobuffer(buf) self.__field_callback_len.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_phonenum_len.writetobuffer(buf) self.__field_phonenum.writetobuffer(buf) self.__field_dunno6.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_pad6.writetobuffer(buf) self.__field_dunno7.writetobuffer(buf) self.__field_dunno8.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 1}) self.__field_read.readfrombuffer(buf) self.__field_counter=UINT(**{'sizeinbytes': 1}) self.__field_counter.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad1.readfrombuffer(buf) self.__field_dunno1=UINT(**{'sizeinbytes': 1}) self.__field_dunno1.readfrombuffer(buf) self.__field_dunno2=UINT(**{'sizeinbytes': 1}) self.__field_dunno2.readfrombuffer(buf) self.__field_dunno3=UINT(**{'sizeinbytes': 1}) self.__field_dunno3.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad2.readfrombuffer(buf) self.__field_dunno4=UINT(**{'sizeinbytes': 1}) self.__field_dunno4.readfrombuffer(buf) self.__field_dunno5=UINT(**{'sizeinbytes': 1}) self.__field_dunno5.readfrombuffer(buf) self.__field_pad3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad3.readfrombuffer(buf) self.__field_message_len=UINT(**{'sizeinbytes': 1}) self.__field_message_len.readfrombuffer(buf) self.__field_message=USTRING(**{'sizeinbytes': 255}) self.__field_message.readfrombuffer(buf) self.__field_pad4=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad4.readfrombuffer(buf) self.__field_year=UINT(**{'sizeinbytes': 1}) self.__field_year.readfrombuffer(buf) self.__field_month=UINT(**{'sizeinbytes': 1}) self.__field_month.readfrombuffer(buf) self.__field_day=UINT(**{'sizeinbytes': 1}) self.__field_day.readfrombuffer(buf) self.__field_hour=UINT(**{'sizeinbytes': 1}) self.__field_hour.readfrombuffer(buf) self.__field_minute=UINT(**{'sizeinbytes': 1}) self.__field_minute.readfrombuffer(buf) self.__field_second=UINT(**{'sizeinbytes': 1}) self.__field_second.readfrombuffer(buf) self.__field_callback_len=UINT(**{'sizeinbytes': 1}) self.__field_callback_len.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 34}) self.__field_callback.readfrombuffer(buf) self.__field_phonenum_len=UINT(**{'sizeinbytes': 1}) self.__field_phonenum_len.readfrombuffer(buf) self.__field_phonenum=USTRING(**{'sizeinbytes': 37}) self.__field_phonenum.readfrombuffer(buf) self.__field_dunno6=UINT(**{'sizeinbytes': 1}) self.__field_dunno6.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_pad6=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad6.readfrombuffer(buf) self.__field_dunno7=UINT(**{'sizeinbytes': 1}) self.__field_dunno7.readfrombuffer(buf) self.__field_dunno8=UINT(**{'sizeinbytes': 1}) self.__field_dunno8.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 1}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_counter(self): return self.__field_counter.getvalue() def __setfield_counter(self, value): if isinstance(value,UINT): self.__field_counter=value else: self.__field_counter=UINT(value,**{'sizeinbytes': 1}) def __delfield_counter(self): del self.__field_counter counter=property(__getfield_counter, __setfield_counter, __delfield_counter, None) def __getfield_pad1(self): return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UINT): self.__field_dunno1=value else: self.__field_dunno1=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UINT): self.__field_dunno2=value else: self.__field_dunno2=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_dunno3(self): return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,UINT): self.__field_dunno3=value else: self.__field_dunno3=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_pad2(self): return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_dunno4(self): return self.__field_dunno4.getvalue() def __setfield_dunno4(self, value): if isinstance(value,UINT): self.__field_dunno4=value else: self.__field_dunno4=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno4(self): del self.__field_dunno4 dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None) def __getfield_dunno5(self): return self.__field_dunno5.getvalue() def __setfield_dunno5(self, value): if isinstance(value,UINT): self.__field_dunno5=value else: self.__field_dunno5=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno5(self): del self.__field_dunno5 dunno5=property(__getfield_dunno5, __setfield_dunno5, __delfield_dunno5, None) def __getfield_pad3(self): return self.__field_pad3.getvalue() def __setfield_pad3(self, value): if isinstance(value,UNKNOWN): self.__field_pad3=value else: self.__field_pad3=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad3(self): del self.__field_pad3 pad3=property(__getfield_pad3, __setfield_pad3, __delfield_pad3, None) def __getfield_message_len(self): return self.__field_message_len.getvalue() def __setfield_message_len(self, value): if isinstance(value,UINT): self.__field_message_len=value else: self.__field_message_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_message_len(self): del self.__field_message_len message_len=property(__getfield_message_len, __setfield_message_len, __delfield_message_len, None) def __getfield_message(self): return self.__field_message.getvalue() def __setfield_message(self, value): if isinstance(value,USTRING): self.__field_message=value else: self.__field_message=USTRING(value,**{'sizeinbytes': 255}) def __delfield_message(self): del self.__field_message message=property(__getfield_message, __setfield_message, __delfield_message, "Text of the notification") def __getfield_pad4(self): return self.__field_pad4.getvalue() def __setfield_pad4(self, value): if isinstance(value,UNKNOWN): self.__field_pad4=value else: self.__field_pad4=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad4(self): del self.__field_pad4 pad4=property(__getfield_pad4, __setfield_pad4, __delfield_pad4, None) def __getfield_year(self): return self.__field_year.getvalue() def __setfield_year(self, value): if isinstance(value,UINT): self.__field_year=value else: self.__field_year=UINT(value,**{'sizeinbytes': 1}) def __delfield_year(self): del self.__field_year year=property(__getfield_year, __setfield_year, __delfield_year, None) def __getfield_month(self): return self.__field_month.getvalue() def __setfield_month(self, value): if isinstance(value,UINT): self.__field_month=value else: self.__field_month=UINT(value,**{'sizeinbytes': 1}) def __delfield_month(self): del self.__field_month month=property(__getfield_month, __setfield_month, __delfield_month, None) def __getfield_day(self): return self.__field_day.getvalue() def __setfield_day(self, value): if isinstance(value,UINT): self.__field_day=value else: self.__field_day=UINT(value,**{'sizeinbytes': 1}) def __delfield_day(self): del self.__field_day day=property(__getfield_day, __setfield_day, __delfield_day, None) def __getfield_hour(self): return self.__field_hour.getvalue() def __setfield_hour(self, value): if isinstance(value,UINT): self.__field_hour=value else: self.__field_hour=UINT(value,**{'sizeinbytes': 1}) def __delfield_hour(self): del self.__field_hour hour=property(__getfield_hour, __setfield_hour, __delfield_hour, None) def __getfield_minute(self): return self.__field_minute.getvalue() def __setfield_minute(self, value): if isinstance(value,UINT): self.__field_minute=value else: self.__field_minute=UINT(value,**{'sizeinbytes': 1}) def __delfield_minute(self): del self.__field_minute minute=property(__getfield_minute, __setfield_minute, __delfield_minute, None) def __getfield_second(self): return self.__field_second.getvalue() def __setfield_second(self, value): if isinstance(value,UINT): self.__field_second=value else: self.__field_second=UINT(value,**{'sizeinbytes': 1}) def __delfield_second(self): del self.__field_second second=property(__getfield_second, __setfield_second, __delfield_second, None) def __getfield_callback_len(self): return self.__field_callback_len.getvalue() def __setfield_callback_len(self, value): if isinstance(value,UINT): self.__field_callback_len=value else: self.__field_callback_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_len(self): del self.__field_callback_len callback_len=property(__getfield_callback_len, __setfield_callback_len, __delfield_callback_len, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 34}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_phonenum_len(self): return self.__field_phonenum_len.getvalue() def __setfield_phonenum_len(self, value): if isinstance(value,UINT): self.__field_phonenum_len=value else: self.__field_phonenum_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_phonenum_len(self): del self.__field_phonenum_len phonenum_len=property(__getfield_phonenum_len, __setfield_phonenum_len, __delfield_phonenum_len, None) def __getfield_phonenum(self): return self.__field_phonenum.getvalue() def __setfield_phonenum(self, value): if isinstance(value,USTRING): self.__field_phonenum=value else: self.__field_phonenum=USTRING(value,**{'sizeinbytes': 37}) def __delfield_phonenum(self): del self.__field_phonenum phonenum=property(__getfield_phonenum, __setfield_phonenum, __delfield_phonenum, None) def __getfield_dunno6(self): return self.__field_dunno6.getvalue() def __setfield_dunno6(self, value): if isinstance(value,UINT): self.__field_dunno6=value else: self.__field_dunno6=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno6(self): del self.__field_dunno6 dunno6=property(__getfield_dunno6, __setfield_dunno6, __delfield_dunno6, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_pad6(self): return self.__field_pad6.getvalue() def __setfield_pad6(self, value): if isinstance(value,UNKNOWN): self.__field_pad6=value else: self.__field_pad6=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_pad6(self): del self.__field_pad6 pad6=property(__getfield_pad6, __setfield_pad6, __delfield_pad6, None) def __getfield_dunno7(self): return self.__field_dunno7.getvalue() def __setfield_dunno7(self, value): if isinstance(value,UINT): self.__field_dunno7=value else: self.__field_dunno7=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno7(self): del self.__field_dunno7 dunno7=property(__getfield_dunno7, __setfield_dunno7, __delfield_dunno7, None) def __getfield_dunno8(self): return self.__field_dunno8.getvalue() def __setfield_dunno8(self, value): if isinstance(value,UINT): self.__field_dunno8=value else: self.__field_dunno8=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno8(self): del self.__field_dunno8 dunno8=property(__getfield_dunno8, __setfield_dunno8, __delfield_dunno8, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('read', self.__field_read, None) yield ('counter', self.__field_counter, None) yield ('pad1', self.__field_pad1, None) yield ('dunno1', self.__field_dunno1, None) yield ('dunno2', self.__field_dunno2, None) yield ('dunno3', self.__field_dunno3, None) yield ('pad2', self.__field_pad2, None) yield ('dunno4', self.__field_dunno4, None) yield ('dunno5', self.__field_dunno5, None) yield ('pad3', self.__field_pad3, None) yield ('message_len', self.__field_message_len, None) yield ('message', self.__field_message, "Text of the notification") yield ('pad4', self.__field_pad4, None) yield ('year', self.__field_year, None) yield ('month', self.__field_month, None) yield ('day', self.__field_day, None) yield ('hour', self.__field_hour, None) yield ('minute', self.__field_minute, None) yield ('second', self.__field_second, None) yield ('callback_len', self.__field_callback_len, None) yield ('callback', self.__field_callback, None) yield ('phonenum_len', self.__field_phonenum_len, None) yield ('phonenum', self.__field_phonenum, None) yield ('dunno6', self.__field_dunno6, None) yield ('priority', self.__field_priority, None) yield ('pad6', self.__field_pad6, None) yield ('dunno7', self.__field_dunno7, None) yield ('dunno8', self.__field_dunno8, None) class messageresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(messageresponse,self).__init__(**dict) if self.__class__ is messageresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(messageresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(messageresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=messageentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,messageentry): self.__field_entry=value else: self.__field_entry=messageentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class messagesentresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(messagesentresponse,self).__init__(**dict) if self.__class__ is messagesentresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(messagesentresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(messagesentresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=messageentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,messageentry): self.__field_entry=value else: self.__field_entry=messageentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class foldernamerequest(BaseProtogenClass): __fields=['header', 'index', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(foldernamerequest,self).__init__(**dict) if self.__class__ is foldernamerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(foldernamerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(foldernamerequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0b, 'command': 0xef}) self.__field_header.writetobuffer(buf) self.__field_index.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x0b, 'command': 0xef}) self.__field_header.readfrombuffer(buf) self.__field_index=UINT(**{'sizeinbytes': 1}) self.__field_index.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0b, 'command': 0xef}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0b, 'command': 0xef}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 1}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 501}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('index', self.__field_index, None) yield ('pad', self.__field_pad, None) class foldernameentry(BaseProtogenClass): __fields=['index', 'flag', 'autofile', 'notify', 'icon', 'name', 'pad', 'keyword'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(foldernameentry,self).__init__(**dict) if self.__class__ is foldernameentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(foldernameentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(foldernameentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_flag.writetobuffer(buf) self.__field_autofile.writetobuffer(buf) self.__field_notify.writetobuffer(buf) self.__field_icon.writetobuffer(buf) self.__field_name.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad.writetobuffer(buf) self.__field_keyword.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 1}) self.__field_index.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_autofile=UINT(**{'sizeinbytes': 1}) self.__field_autofile.readfrombuffer(buf) self.__field_notify=UINT(**{'sizeinbytes': 1}) self.__field_notify.readfrombuffer(buf) self.__field_icon=UINT(**{'sizeinbytes': 1}) self.__field_icon.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 13, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad.readfrombuffer(buf) self.__field_keyword=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False}) self.__field_keyword.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 1}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, "0 if empty, 1 in use") def __getfield_autofile(self): return self.__field_autofile.getvalue() def __setfield_autofile(self, value): if isinstance(value,UINT): self.__field_autofile=value else: self.__field_autofile=UINT(value,**{'sizeinbytes': 1}) def __delfield_autofile(self): del self.__field_autofile autofile=property(__getfield_autofile, __setfield_autofile, __delfield_autofile, "If 1, autofile messages with keyword") def __getfield_notify(self): return self.__field_notify.getvalue() def __setfield_notify(self, value): if isinstance(value,UINT): self.__field_notify=value else: self.__field_notify=UINT(value,**{'sizeinbytes': 1}) def __delfield_notify(self): del self.__field_notify notify=property(__getfield_notify, __setfield_notify, __delfield_notify, None) def __getfield_icon(self): return self.__field_icon.getvalue() def __setfield_icon(self, value): if isinstance(value,UINT): self.__field_icon=value else: self.__field_icon=UINT(value,**{'sizeinbytes': 1}) def __delfield_icon(self): del self.__field_icon icon=property(__getfield_icon, __setfield_icon, __delfield_icon, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 13, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, "Name of the folder") def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 3}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_keyword(self): return self.__field_keyword.getvalue() def __setfield_keyword(self, value): if isinstance(value,USTRING): self.__field_keyword=value else: self.__field_keyword=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False}) def __delfield_keyword(self): del self.__field_keyword keyword=property(__getfield_keyword, __setfield_keyword, __delfield_keyword, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('flag', self.__field_flag, "0 if empty, 1 in use") yield ('autofile', self.__field_autofile, "If 1, autofile messages with keyword") yield ('notify', self.__field_notify, None) yield ('icon', self.__field_icon, None) yield ('name', self.__field_name, "Name of the folder") yield ('pad', self.__field_pad, None) yield ('keyword', self.__field_keyword, None) class foldernameresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(foldernameresponse,self).__init__(**dict) if self.__class__ is foldernameresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(foldernameresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(foldernameresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=foldernameentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 467}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,foldernameentry): self.__field_entry=value else: self.__field_entry=foldernameentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 467}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class todorequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(todorequest,self).__init__(**dict) if self.__class__ is todorequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(todorequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(todorequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c,'command': 0x25}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x0c,'command': 0x25}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c,'command': 0x25}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c,'command': 0x25}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 501}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class todoentry(BaseProtogenClass): __fields=['slot', 'flag', 'todo', 'pad1', 'todo_len', 'priority', 'dunno', 'order'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(todoentry,self).__init__(**dict) if self.__class__ is todoentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(todoentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(todoentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) self.__field_todo.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.writetobuffer(buf) self.__field_todo_len.writetobuffer(buf) self.__field_priority.writetobuffer(buf) try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 1}) self.__field_dunno.writetobuffer(buf) self.__field_order.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_todo=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False}) self.__field_todo.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.readfrombuffer(buf) self.__field_todo_len=UINT(**{'sizeinbytes': 1}) self.__field_todo_len.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_dunno=UINT(**{'sizeinbytes': 1}) self.__field_dunno.readfrombuffer(buf) self.__field_order=UINT(**{'sizeinbytes': 1}) self.__field_order.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, "0: Not used, 1: Used") def __getfield_todo(self): return self.__field_todo.getvalue() def __setfield_todo(self, value): if isinstance(value,USTRING): self.__field_todo=value else: self.__field_todo=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False}) def __delfield_todo(self): del self.__field_todo todo=property(__getfield_todo, __setfield_todo, __delfield_todo, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_todo_len(self): return self.__field_todo_len.getvalue() def __setfield_todo_len(self, value): if isinstance(value,UINT): self.__field_todo_len=value else: self.__field_todo_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_todo_len(self): del self.__field_todo_len todo_len=property(__getfield_todo_len, __setfield_todo_len, __delfield_todo_len, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, "0: Normal, 1: Urgent, 2: Done") def __getfield_dunno(self): try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 1}) return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, "Maybe always zero") def __getfield_order(self): return self.__field_order.getvalue() def __setfield_order(self, value): if isinstance(value,UINT): self.__field_order=value else: self.__field_order=UINT(value,**{'sizeinbytes': 1}) def __delfield_order(self): del self.__field_order order=property(__getfield_order, __setfield_order, __delfield_order, "Gets sorted on screen in this order") def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, "0: Not used, 1: Used") yield ('todo', self.__field_todo, None) yield ('pad1', self.__field_pad1, None) yield ('todo_len', self.__field_todo_len, None) yield ('priority', self.__field_priority, "0: Normal, 1: Urgent, 2: Done") yield ('dunno', self.__field_dunno, "Maybe always zero") yield ('order', self.__field_order, "Gets sorted on screen in this order") class todoresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(todoresponse,self).__init__(**dict) if self.__class__ is todoresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(todoresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(todoresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=todoentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 472}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,todoentry): self.__field_entry=value else: self.__field_entry=todoentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 472}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class historyrequest(BaseProtogenClass): __fields=['type', 'header', 'header', 'header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(historyrequest,self).__init__(**dict) if self.__class__ is historyrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(historyrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(historyrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_type except: self.__field_type=UINT() def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if self.type==OUTGOING: try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3d}) self.__field_header.writetobuffer(buf) if self.type==INCOMING: try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3e}) self.__field_header.writetobuffer(buf) if self.type==MISSED: try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3f}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) if self.type==OUTGOING: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3d}) self.__field_header.readfrombuffer(buf) if self.type==INCOMING: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3e}) self.__field_header.readfrombuffer(buf) if self.type==MISSED: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3f}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_type(self): return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,UINT): self.__field_type=value else: self.__field_type=UINT(value,) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, "0: Outgoing, 1: Incoming, 2: Missed") def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3d}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c, 'command': 0x3d}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3e}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c, 'command': 0x3e}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3f}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c, 'command': 0x3f}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 501}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('type', self.__field_type, "0: Outgoing, 1: Incoming, 2: Missed") if self.type==OUTGOING: yield ('header', self.__field_header, None) if self.type==INCOMING: yield ('header', self.__field_header, None) if self.type==MISSED: yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class historyentry(BaseProtogenClass): __fields=['slot', 'date', 'phonenumlen', 'phonenum', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(historyentry,self).__init__(**dict) if self.__class__ is historyentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(historyentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(historyentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_date.writetobuffer(buf) self.__field_phonenumlen.writetobuffer(buf) self.__field_phonenum.writetobuffer(buf) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_date=GPSDATE(**{'sizeinbytes': 4}) self.__field_date.readfrombuffer(buf) self.__field_phonenumlen=UINT(**{'sizeinbytes': 1}) self.__field_phonenumlen.readfrombuffer(buf) self.__field_phonenum=USTRING(**{'sizeinbytes': 48, 'raiseonunterminatedread': False}) self.__field_phonenum.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_date(self): return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,GPSDATE): self.__field_date=value else: self.__field_date=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, None) def __getfield_phonenumlen(self): return self.__field_phonenumlen.getvalue() def __setfield_phonenumlen(self, value): if isinstance(value,UINT): self.__field_phonenumlen=value else: self.__field_phonenumlen=UINT(value,**{'sizeinbytes': 1}) def __delfield_phonenumlen(self): del self.__field_phonenumlen phonenumlen=property(__getfield_phonenumlen, __setfield_phonenumlen, __delfield_phonenumlen, None) def __getfield_phonenum(self): return self.__field_phonenum.getvalue() def __setfield_phonenum(self, value): if isinstance(value,USTRING): self.__field_phonenum=value else: self.__field_phonenum=USTRING(value,**{'sizeinbytes': 48, 'raiseonunterminatedread': False}) def __delfield_phonenum(self): del self.__field_phonenum phonenum=property(__getfield_phonenum, __setfield_phonenum, __delfield_phonenum, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('date', self.__field_date, None) yield ('phonenumlen', self.__field_phonenumlen, None) yield ('phonenum', self.__field_phonenum, None) yield ('name', self.__field_name, None) class historyresponse(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(historyresponse,self).__init__(**dict) if self.__class__ is historyresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(historyresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(historyresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=historyentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,historyentry): self.__field_entry=value else: self.__field_entry=historyentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) bitpim-1.0.7+dfsg1/src/phones/com_sk6100.py0000644001616600161660000000635410417340753016402 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Yosef Meller ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_sk6100.py 3092 2006-04-13 03:13:47Z skyjunky $ import com_phone import com_brew import prototypes import p_sk6100 class Phone(com_phone.Phone, com_brew.BrewProtocol): """Talk to SK Music Slider""" desc="SK Music Slider" protocolclass=p_sk6100 serialsname='sk6100' # This is ordered by the type id nums the phone uses: phonetypes = [ 'cell', 'home', 'office', 'fax', 'pager' ] def __init__(self, logtarget, commport): com_phone.Phone.__init__(self, logtarget, commport) com_brew.BrewProtocol.__init__(self) def getfundamentals(self, results): grbuf = prototypes.buffer(self.getfilecontents('SKY/PBK/group.pbk')) groups = self.protocolclass.groups() groups.readfrombuffer(grbuf, logtitle="Groups read") # decode caharachters to unicode - should use some global setting, # hard-coding is bad for you :-) grsort = [group for group in groups.pbgroups if group.name != ''] results['groups'] = grsort return results def getphonebook(self, results): # Get a list of phone numbers: phonebuf = prototypes.buffer(self.getfilecontents('SKY/PBK/number.pbk')) phones = self.protocolclass.phones() phones.readfrombuffer(phonebuf, logtitle="Phonenumbers") # Drop empty phone records, listify: phones = [phone for phone in phones.records if phone.owner_id] # Retrieve people names and groups pbook={} bookbuf = prototypes.buffer(self.getfilecontents('SKY/PBK/book.pbk')) entries = self.protocolclass.wholebook() entries.readfrombuffer(bookbuf, logtitle="Names read") for entry in entries.pbentries: # Ignore deleted records if not entry.record: continue # Find group name: group_name = "Group not recognised" for group in results['groups']: if group.group_id == entry.group_id: group_name = group.name break pbook[entry.slot] = { 'names': [{'title': '', 'first': '', 'last': '', 'full': entry.name, 'nickname': ''}], 'categories': [{'category': group_name}], 'numbers': [{'number': phone.number, 'type': self.phonetypes[phone.type - 1]} for phone in phones if phone.owner_id == entry.slot], 'serials': [{'sourcetype': self.serialsname}] } results['phonebook'] = pbook results['categories'] = [group.name for group in results['groups']] return pbook def getcalendar(self, results): pass def getwallpapers(self, results): pass def getringtones(self, results): pass class Profile(com_phone.Profile): deviceclasses=("modem",) _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ) bitpim-1.0.7+dfsg1/src/phones/com_lg.py0000644001616600161660000022155111051132146016044 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2006 Roger Binns ### Copyright (C) 2006 Michael Cohen ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lg.py 4680 2008-08-14 22:40:38Z djpham $ """Phonebook conversations with LG phones""" import functools import threading import com_brew import com_phone import p_lg import prototypes import common import struct class LGPhonebook: pbterminator="\x7e" MODEPHONEBOOK="modephonebook" # can speak the phonebook protocol def __init__(self): self.pbseq=0 def _setmodelgdmgo(self): # see if we can turn on dm mode for baud in (0, 115200, 19200, 38400, 230400): if baud: if not self.comm.setbaudrate(baud): continue try: self.comm.write("AT$LGDMGO\r\n") except: self.mode=self.MODENONE self.comm.shouldloop=True raise try: if self.comm.readsome().find("OK")>=0: return True except com_phone.modeignoreerrortypes: self.log("No response to setting DM mode") return False def _setmodephonebook(self): req=p_lg.pbinitrequest() respc=p_lg.pbinitresponse for baud in 0,38400,115200,230400,19200: if baud: if not self.comm.setbaudrate(baud): continue try: self.sendpbcommand(req, respc, callsetmode=False) return True except com_phone.modeignoreerrortypes: pass self._setmodelgdmgo() for baud in 0,38400,115200: if baud: if not self.comm.setbaudrate(baud): continue try: self.sendpbcommand(req, respc, callsetmode=False) return True except com_phone.modeignoreerrortypes: pass return False def sendpbcommand(self, request, responseclass, callsetmode=True): if callsetmode: self.setmode(self.MODEPHONEBOOK) buffer=prototypes.buffer() request.header.sequence=self.pbseq self.pbseq+=1 if self.pbseq>0xff: self.pbseq=0 request.writetobuffer(buffer, logtitle="lg phonebook request") data=buffer.getvalue() data=common.pppescape(data+common.crcs(data))+common.pppterminator firsttwo=data[:2] try: data=self.comm.writethenreaduntil(data, False, common.pppterminator, logreaduntilsuccess=False) except com_phone.modeignoreerrortypes: self.mode=self.MODENONE self.raisecommsdnaexception("manipulating the phonebook") self.comm.success=True origdata=data # sometimes there is junk at the begining, eg if the user # turned off the phone and back on again. So if there is more # than one 7e in the escaped data we should start after the # second to last one d=data.rfind(common.pppterminator,0,-1) if d>=0: self.log("Multiple LG packets in data - taking last one starting at "+`d+1`) self.logdata("Original LG data", origdata, None) data=data[d+1:] # turn it back to normal data=common.pppunescape(data) # take off crc and terminator crc=data[-3:-1] data=data[:-3] # check the CRC at this point to see if we might have crap at the beginning calccrc=common.crcs(data) if calccrc!=crc: # sometimes there is other crap at the begining d=data.find(firsttwo) if d>0: self.log("Junk at begining of LG packet, data at "+`d`) self.logdata("Original LG data", origdata, None) self.logdata("Working on LG data", data, None) data=data[d:] # recalculate CRC without the crap calccrc=common.crcs(data) # see if the crc matches now if calccrc!=crc: self.logdata("Original LG data", origdata, None) self.logdata("Working on LG data", data, None) raise common.CommsDataCorruption("LG packet failed CRC check", self.desc) # phone will respond with 0x13 and 0x14 if we send a bad or malformed command if ord(data[0])==0x13: raise com_brew.BrewBadBrewCommandException() if ord(data[0])==0x14: raise com_brew.BrewMalformedBrewCommandException() # parse data buffer=prototypes.buffer(data) res=responseclass() res.readfrombuffer(buffer, logtitle="lg phonebook response") return res def cleanupstring(str): str=str.replace("\r", "\n") str=str.replace("\n\n", "\n") str=str.strip() return str.split("\n") class LGIndexedMedia: "Implements media for LG phones that use index files" def __init__(self): pass def getwallpapers(self, result): return self.getmedia(self.imagelocations, result, 'wallpapers') def getringtones(self, result): return self.getmedia(self.ringtonelocations, result, 'ringtone') def savewallpapers(self, results, merge): return self.savemedia('wallpapers', 'wallpaper-index', self.imagelocations, results, merge, self.getwallpaperindices) def saveringtones(self, results, merge): return self.savemedia('ringtone', 'ringtone-index', self.ringtonelocations, results, merge, self.getringtoneindices) def getmediaindex(self, builtins, maps, results, key): """Gets the media (wallpaper/ringtone) index @param builtins: the builtin list on the phone @param results: places results in this dict @param maps: the list of index files and locations @param key: key to place results in """ self.log("Reading "+key) media={} # builtins c=1 for name in builtins: media[c]={'name': name, 'origin': 'builtin' } c+=1 # the maps type=None for offset,indexfile,location,type,maxentries in maps: if type=="camera": break index=self.getindex(indexfile) for i in index: media[i+offset]={'name': index[i], 'origin': type} # camera must be last if type=="camera": index=self.getcameraindex() for i in index: media[i+offset]=index[i] results[key]=media return media def getindex(self, indexfile): "Read an index file" index={} try: buf=prototypes.buffer(self.getfilecontents(indexfile)) except com_brew.BrewNoSuchFileException: # file may not exist return index g=self.protocolclass.indexfile() g.readfrombuffer(buf, logtitle="Index file %s read" % (indexfile,)) for i in g.items: if i.index!=0xffff and len(i.name): index[i.index]=i.name return index def getmedia(self, maps, result, key): """Returns the contents of media as a dict where the key is a name as returned by getindex, and the value is the contents of the media""" media={} # the maps type=None for offset,indexfile,location,type,maxentries in maps: if type=="camera": break index=self.getindex(indexfile) for i in index: try: media[index[i]]=self.getfilecontents(location+"/"+index[i], True) except (com_brew.BrewNoSuchFileException,com_brew.BrewBadPathnameException,com_brew.BrewNameTooLongException): self.log("It was in the index, but not on the filesystem") if type=="camera": # now for the camera stuff index=self.getcameraindex() for i in index: try: media[index[i]['name']]=self.getfilecontents("cam/pic%02d.jpg" % (i,), True) except com_brew.BrewNoSuchFileException: self.log("It was in the index, but not on the filesystem") result[key]=media return result def savemedia(self, mediakey, mediaindexkey, maps, results, merge, reindexfunction): """Actually saves out the media @param mediakey: key of the media (eg 'wallpapers' or 'ringtones') @param mediaindexkey: index key (eg 'wallpaper-index') @param maps: list index files and locations @param results: results dict @param merge: are we merging or overwriting what is there? @param reindexfunction: the media is re-indexed at the end. this function is called to do it """ print results.keys() # I humbly submit this as the longest function in the bitpim code ... # wp and wpi are used as variable names as this function was originally # written to do wallpaper. it works just fine for ringtones as well wp=results[mediakey].copy() wpi=results[mediaindexkey].copy() # remove builtins for k in wpi.keys(): if wpi[k]['origin']=='builtin': del wpi[k] # sort results['mediakey'+'-index'] into origin buckets # build up list into init init={} for offset,indexfile,location,type,maxentries in maps: init[type]={} for k in wpi.keys(): if wpi[k]['origin']==type: index=k-offset name=wpi[k]['name'] data=None del wpi[k] for w in wp.keys(): if wp[w]['name']==name and wp[w]['origin']==type: data=wp[w]['data'] del wp[w] if not merge and data is None: # delete the entry continue init[type][index]={'name': name, 'data': data} # init now contains everything from wallpaper-index print init.keys() # now look through wallpapers and see if anything remaining was assigned a particular # origin for w in wp.keys(): o=wp[w].get("origin", "") if o is not None and len(o) and o in init: idx=-1 while idx in init[o]: idx-=1 init[o][idx]=wp[w] del wp[w] # we now have init[type] with the entries and index number as key (negative indices are # unallocated). Proceed to deal with each one, taking in stuff from wp as we have space for offset,indexfile,location,type,maxentries in maps: if type=="camera": break index=init[type] try: dirlisting=self.getfilesystem(location) except com_brew.BrewNoSuchDirectoryException: self.mkdirs(location) dirlisting={} # rename keys to basename for i in dirlisting.keys(): dirlisting[i[len(location)+1:]]=dirlisting[i] del dirlisting[i] # what we will be deleting dellist=[] if not merge: # get existing wpi for this location wpi=results[mediaindexkey] for i in wpi: entry=wpi[i] if entry['origin']==type: # it is in the original index, are we writing it back out? delit=True for idx in index: if index[idx]['name']==entry['name']: delit=False break if delit: if entry['name'] in dirlisting: dellist.append(entry['name']) else: self.log("%s in %s index but not filesystem" % (entry['name'], type)) # go ahead and delete unwanted files print "deleting",dellist for f in dellist: self.rmfile(location+"/"+f) # slurp up any from wp we can take while len(index)maxentries: keys=index.keys() keys.sort() for k in keys[maxentries:]: idx=-1 while idx in wp: idx-=1 wp[idx]=index[k] del index[k] # write out the new index keys=index.keys() keys.sort() ifile=self.protocolclass.indexfile() ifile.numactiveitems=len(keys) for k in keys: entry=self.protocolclass.indexentry() entry.index=k entry.name=index[k]['name'] ifile.items.append(entry) while len(ifile.items)=lowestindex init[type][index]={'name': name, 'data': data, 'filename': fullname, 'vtype': vtype} # init now contains everything from wallpaper-index # wp contains items that we still need to add, and weren't in the existing index assert len(wpi)==0 print init.keys() # now look through wallpapers and see if anything was assigned a particular # origin for w in wp.keys(): o=wp[w].get("origin", "") if o is not None and len(o) and o in init: idx=-1 while idx in init[o]: idx-=1 init[o][idx]=wp[w] del wp[w] # wp will now consist of items that weren't assigned any particular place # so put them in the first available space for type,_,_,_,lowestindex,maxentries,typemajor in maps: # fill it up for w in wp.keys(): if len(init[type])>=maxentries: break idx=-1 while idx in init[type]: idx-=1 init[type][idx]=wp[w] del wp[w] # time to write the files out dircache=self.DirCache(self) for type, indexfile, sizefile, directory, lowestindex, maxentries,typemajor in maps: # get the index file so we can work out what to delete names=[init[type][x]['name'] for x in init[type]] for item in self.getindex(indexfile): if basename(item.filename) not in names: self.log(item.filename+" is being deleted") try: dircache.rmfile(item.filename) except com_brew.BrewNoSuchFileException: self.log("Hmm, it didn't exist!") # fixup the indices fixups=[k for k in init[type].keys() if klength data=entry['data'] if data is None: assert merge continue # we are doing an add and don't have data for this existing entry if fstat is not None and len(data)==fstat['size']: self.log("Not writing "+filename+" as a file of the same name and length already exists.") else: dircache.writefile(filename, data) # write out index ifile=self.protocolclass.indexfile() idxlist=init[type].keys() idxlist.sort() idxlist.reverse() # the phone has them in reverse order for some reason so we do the same for idx in idxlist: ie=self.protocolclass.indexentry() ie.index=idx vtype=init[type][idx].get("vtype", None) if vtype is None: vtype=self._guessvtype(init[type][idx]['filename'], typemajor) print "guessed vtype of "+`vtype`+" for "+init[type][idx]['filename'] else: print init[type][idx]['filename']+" already had a vtype of "+`vtype` ie.type=vtype ie.filename=init[type][idx]['filename'] # ie.date left as zero ie.dunno=0 # mmmm ifile.items.append(ie) buf=prototypes.buffer() ifile.writetobuffer(buf, logtitle="Index file "+indexfile) self.log("Writing index file "+indexfile+" for type "+type+" with "+`len(idxlist)`+" entries.") dircache.writefile(indexfile, buf.getvalue()) # doesn't really need to go via dircache # write out size file size=0 for idx in idxlist: fstat=dircache.stat(init[type][idx]['filename']) size+=fstat['size'] szfile=self.protocolclass.sizefile() szfile.size=size buf=prototypes.buffer() szfile.writetobuffer(buf, logtitle="size file for "+type) self.log("You are using a total of "+`size`+" bytes for "+type) dircache.writefile(sizefile, buf.getvalue()) return reindexfunction(results) def _guessvtype(self, filename, typemajor): lookin=self._minor_typemap[typemajor] for ext,val in lookin.items(): if filename.lower().endswith(ext): return typemajor+(256*val) return typemajor # implicit val of zero def getwallpaperindices(self, results): return self.getmediaindex(self.builtinwallpapers, self.wallpaperlocations, results, 'wallpaper-index') def getringtoneindices(self, results): return self.getmediaindex(self.builtinringtones, self.ringtonelocations, results, 'ringtone-index') def getwallpapers(self, result): return self.getmedia(self.wallpaperlocations, result, 'wallpapers') def getringtones(self, result): return self.getmedia(self.ringtonelocations, result, 'ringtone') def savewallpapers(self, results, merge): return self.savemedia('wallpapers', 'wallpaper-index', self.wallpaperlocations, results, merge, self.getwallpaperindices) def saveringtones(self, results, merge): return self.savemedia('ringtone', 'ringtone-index', self.ringtonelocations, results, merge, self.getringtoneindices) class LGNewIndexedMedia2(LGNewIndexedMedia): """Implements media for LG phones that use the newer index format such as the VX8100/5200 Similar ot the other new media type hence the subclassing, but the type field in the PACKET has a different meaning so different code is required and it has support for an icon field that affects whcih icon is displayed next to the tone on the phone """ # tables for minor type number _minor_typemap={ ".jpg": 3, ".bmp": 1, ".qcp": 5, ".mid": 4, ".3g2": 3, } def _guessvtype(self, filename, typemajor): if typemajor > 2: # some index files are hard coded return typemajor for ext,val in self._minor_typemap.items(): if filename.lower().endswith(ext): return typemajor+(256*val) return typemajor # implicit val of zero def getmediaindex(self, builtins, maps, results, key): """Gets the media (wallpaper/ringtone) index @param builtins: the builtin list on the phone @param results: places results in this dict @param maps: the list of index files and locations @param key: key to place results in """ self.log("Reading "+key) media={} # builtins for i,n in enumerate(builtins): # nb zero based index whereas previous phones used 1 media[i]={'name': n, 'origin': 'builtin'} # maps for type, indexfile, sizefile, directory, lowestindex, maxentries, typemajor, def_icon, idx_ofs in maps: for item in self.getindex(indexfile): if item.type&0xff!=typemajor&0xff: self.log("Entry "+item.filename+" has wrong type for this index. It is %d and should be %d" % (item.type&0xff, typemajor)) self.log("This is going to cause you all sorts of problems.") _idx=item.index+idx_ofs media[_idx]={ 'name': basename(item.filename), 'filename': item.filename, 'origin': type, 'vtype': item.type, 'icon': item.icon } if item.date!=0: media[_idx]['date']=item.date # finish results[key]=media def getmedia(self, maps, results, key): origins={} # signal that we are using the new media storage that includes the origin and timestamp origins['new_media_version']=1 for type, indexfile, sizefile, directory, lowestindex, maxentries, typemajor, def_icon, idx_ofs in maps: media={} for item in self.getindex(indexfile): data=None timestamp=None try: stat_res=self.statfile(item.filename) if stat_res!=None: timestamp=stat_res['date'][0] data=self.getfilecontents(item.filename, True) except (com_brew.BrewNoSuchFileException,com_brew.BrewBadPathnameException,com_brew.BrewNameTooLongException): self.log("It was in the index, but not on the filesystem") except com_brew.BrewAccessDeniedException: # firmware wouldn't let us read this file, just mark it then self.log('Failed to read file: '+item.filename) data='' if data!=None: media[common.basename(item.filename)]={ 'data': data, 'timestamp': timestamp} origins[type]=media results[key]=origins return results def getmedia(self, maps, results, key): media={} for type, indexfile, sizefile, directory, lowestindex, maxentries, typemajor, def_icon, idx_ofs in maps: for item in self.getindex(indexfile): try: media[basename(item.filename)]=self.getfilecontents(item.filename, True) except (com_brew.BrewNoSuchFileException,com_brew.BrewBadPathnameException,com_brew.BrewNameTooLongException): self.log("It was in the index, but not on the filesystem") results[key]=media return results def savemedia(self, mediakey, mediaindexkey, maps, results, merge, reindexfunction): """Actually saves out the media @param mediakey: key of the media (eg 'wallpapers' or 'ringtones') @param mediaindexkey: index key (eg 'wallpaper-index') @param maps: list index files and locations @param results: results dict @param merge: are we merging or overwriting what is there? @param reindexfunction: the media is re-indexed at the end. this function is called to do it """ # take copies of the lists as we modify them wp=results[mediakey].copy() # the media we want to save wpi=results[mediaindexkey].copy() # what is already in the index files # remove builtins for k in wpi.keys(): if wpi[k].get('origin', "")=='builtin': del wpi[k] # build up list into init init={} for type,_,_,_,lowestindex,_,typemajor,_,idx_ofs in maps: init[type]={} for k in wpi.keys(): if wpi[k]['origin']==type: index=k-idx_ofs name=wpi[k]['name'] fullname=wpi[k]['filename'] vtype=wpi[k]['vtype'] icon=wpi[k]['icon'] data=None del wpi[k] for w in wp.keys(): # does wp contain a reference to this same item? if wp[w]['name']==name and wp[w]['origin']==type: data=wp[w]['data'] del wp[w] if not merge and data is None: # delete the entry continue assert index>=lowestindex init[type][index]={'name': name, 'data': data, 'filename': fullname, 'vtype': vtype, 'icon': icon} # init now contains everything from wallpaper-index # wp contains items that we still need to add, and weren't in the existing index assert len(wpi)==0 print init.keys() # now look through wallpapers and see if anything was assigned a particular # origin for w in wp.keys(): o=wp[w].get("origin", "") if o is not None and len(o) and o in init: idx=-1 while idx in init[o]: idx-=1 init[o][idx]=wp[w] del wp[w] # wp will now consist of items that weren't assigned any particular place # so put them in the first available space for type,_,_,_,lowestindex,maxentries,typemajor,def_icon,_ in maps: # fill it up for w in wp.keys(): if len(init[type])>=maxentries: break idx=-1 while idx in init[type]: idx-=1 init[type][idx]=wp[w] del wp[w] # time to write the files out dircache=self.DirCache(self) for type, indexfile, sizefile, directory, lowestindex, maxentries,typemajor,def_icon,_ in maps: # get the index file so we can work out what to delete names=[init[type][x]['name'] for x in init[type]] for item in self.getindex(indexfile): if basename(item.filename) not in names: self.log(item.filename+" is being deleted") try: dircache.rmfile(item.filename) except com_brew.BrewNoSuchFileException: self.log("Hmm, it didn't exist!") # fixup the indices fixups=[k for k in init[type].keys() if klength data=entry['data'] if data is None: assert merge continue # we are doing an add and don't have data for this existing entry if fstat is not None and len(data)==fstat['size']: self.log("Not writing "+filename+" as a file of the same name and length already exists.") else: dircache.writefile(filename, data) # write out index ifile=self.protocolclass.indexfile() idxlist=init[type].keys() idxlist.sort() idxlist.reverse() # the phone has them in reverse order for some reason so we do the same for idx in idxlist: ie=self.protocolclass.indexentry() ie.index=idx vtype=init[type][idx].get("vtype", None) if vtype is None: vtype=self._guessvtype(init[type][idx]['filename'], typemajor) ie.type=vtype ie.filename=init[type][idx]['filename'] # ie.date left as zero ie.dunno=0 # mmmm icon=init[type][idx].get("icon", None) if icon is None: icon=def_icon ie.icon=icon ifile.items.append(ie) buf=prototypes.buffer() ifile.writetobuffer(buf, logtitle="Index file "+indexfile) self.log("Writing index file "+indexfile+" for type "+type+" with "+`len(idxlist)`+" entries.") dircache.writefile(indexfile, buf.getvalue()) # doesn't really need to go via dircache # write out size file, if it is required if sizefile != '': size=0 for idx in idxlist: fstat=dircache.stat(init[type][idx]['filename']) size+=fstat['size'] szfile=self.protocolclass.sizefile() szfile.size=size buf=prototypes.buffer() szfile.writetobuffer(buf, logtitle="Writing size file "+sizefile) self.log("You are using a total of "+`size`+" bytes for "+type) dircache.writefile(sizefile, buf.getvalue()) return reindexfunction(results) class LGDirectoryMedia: """The media is stored one per directory with .desc and body files""" def __init__(self): pass def getmediaindex(self, builtins, maps, results, key): """Gets the media (wallpaper/ringtone) index @param builtins: the builtin list on the phone @param results: places results in this dict @param maps: the list of index files and locations @param key: key to place results in """ self.log("Reading "+key) media={} # builtins c=1 for name in builtins: media[c]={'name': name, 'origin': 'builtin' } c+=1 # directory for offset,location,origin,maxentries in maps: index=self.getindex(location) for i in index: media[i+offset]={'name': index[i], 'origin': origin} results[key]=media return media __mimetoextensionmapping={ 'image/jpg': '.jpg', 'image/bmp': '.bmp', 'image/png': '.png', 'image/gif': '.gif', 'image/bci': '.bci', 'audio/mp3': '.mp3', 'audio/mid': '.mid', 'audio/qcp': '.qcp' } def _createnamewithmimetype(self, name, mt): name=basename(name) if mt=="image/jpeg": mt="image/jpg" try: return name+self.__mimetoextensionmapping[mt] except KeyError: self.log("Unable to figure out extension for mime type "+mt) return name def _getmimetype(self, name): ext=getext(name.lower()) if len(ext): ext="."+ext if ext==".jpeg": return "image/jpg" # special case for mt,extension in self.__mimetoextensionmapping.items(): if ext==extension: return mt self.log("Unable to figure out a mime type for "+name) assert False, "No idea what type "+ext+" is" return "x-unknown/x-unknown" def getindex(self, location, getmedia=False): """Returns an index based on the sub-directories of location. The key is an integer, and the value is the corresponding name""" index={} try: dirlisting=self.getfilesystem(location) except com_brew.BrewNoSuchDirectoryException: return index for item in dirlisting: if dirlisting[item]['type']!='directory': continue try: buf=prototypes.buffer(self.getfilecontents(dirlisting[item]['name']+"/.desc")) except com_brew.BrewNoSuchFileException: self.log("No .desc file in "+dirlisting[item]['name']+" - ignoring directory") continue desc=self.protocolclass.mediadesc() desc.readfrombuffer(buf, logtitle=".desc file %s/.desc read" % (dirlisting[item]['name'],)) filename=self._createnamewithmimetype(dirlisting[item]['name'], desc.mimetype) if not getmedia: index[desc.index]=filename else: try: # try to read it using name in desc file contents=self.getfilecontents(dirlisting[item]['name']+"/"+desc.filename) except (com_brew.BrewNoSuchFileException,com_brew.BrewNoSuchDirectoryException): try: # then try using "body" contents=self.getfilecontents(dirlisting[item]['name']+"/body") except (com_brew.BrewNoSuchFileException,com_brew.BrewNoSuchDirectoryException,com_brew.BrewNameTooLongException): self.log("Can't find the actual content in "+dirlisting[item]['name']) continue index[filename]=contents return index def getmedia(self, maps, result, key): """Returns the contents of media as a dict where the key is a name as returned by getindex, and the value is the contents of the media""" media={} for offset,location,origin,maxentries in maps: media.update(self.getindex(location, getmedia=True)) result[key]=media return result def savemedia(self, mediakey, mediaindexkey, maps, results, merge, reindexfunction): """Actually saves out the media @param mediakey: key of the media (eg 'wallpapers' or 'ringtones') @param mediaindexkey: index key (eg 'wallpaper-index') @param maps: list index files and locations @param results: results dict @param merge: are we merging or overwriting what is there? @param reindexfunction: the media is re-indexed at the end. this function is called to do it """ # this is based on the IndexedMedia function and they are frustratingly similar print results.keys() # I humbly submit this as the longest function in the bitpim code ... # wp and wpi are used as variable names as this function was originally # written to do wallpaper. it works just fine for ringtones as well wp=results[mediakey].copy() wpi=results[mediaindexkey].copy() # remove builtins for k in wpi.keys(): if wpi[k]['origin']=='builtin': del wpi[k] # sort results['mediakey'+'-index'] into origin buckets # build up list into init init={} for offset,location,type,maxentries in maps: init[type]={} for k in wpi.keys(): if wpi[k]['origin']==type: index=k-offset name=wpi[k]['name'] data=None del wpi[k] for w in wp.keys(): if wp[w]['name']==name and wp[w]['origin']==type: data=wp[w]['data'] del wp[w] if not merge and data is None: # delete the entry continue init[type][index]={'name': name, 'data': data} # init now contains everything from wallpaper-index print init.keys() # now look through wallpapers and see if anything remaining was assigned a particular # origin for w in wp.keys(): o=wp[w].get("origin", "") if o is not None and len(o) and o in init: idx=-1 while idx in init[o]: idx-=1 init[o][idx]=wp[w] del wp[w] # we now have init[type] with the entries and index number as key (negative indices are # unallocated). Proceed to deal with each one, taking in stuff from wp as we have space for offset,location,type,maxentries in maps: if type=="camera": break index=init[type] try: dirlisting=self.getfilesystem(location) except com_brew.BrewNoSuchDirectoryException: self.mkdirs(location) dirlisting={} # rename keys to basename for i in dirlisting.keys(): dirlisting[i[len(location)+1:]]=dirlisting[i] del dirlisting[i] # what we will be deleting dellist=[] if not merge: # get existing wpi for this location wpi=results[mediaindexkey] for i in wpi: entry=wpi[i] if entry['origin']==type: # it is in the original index, are we writing it back out? delit=True for idx in index: if index[idx]['name']==entry['name']: delit=False break if delit: if stripext(entry['name']) in dirlisting: dellist.append(entry['name']) else: self.log("%s in %s index but not filesystem" % (entry['name'], type)) # go ahead and delete unwanted directories print "deleting",dellist for f in dellist: self.rmdirs(location+"/"+f) # slurp up any from wp we can take while len(index)maxentries: keys=index.keys() keys.sort() for k in keys[maxentries:]: idx=-1 while idx in wp: idx-=1 wp[idx]=index[k] del index[k] # write out the content #### index is dict, key is index number, value is dict #### value['name'] = filename #### value['data'] is contents listing=self.getfilesystem(location, 1) for key in index: efile=index[key]['name'] content=index[key]['data'] if content is None: continue # in theory we could rewrite .desc file in case index number has changed mimetype=self._getmimetype(efile) dirname=stripext(efile) desc=self.protocolclass.mediadesc() desc.index=key desc.filename="body" desc.mimetype=mimetype desc.totalsize=0 desc.totalsize=desc.packetsize()+len(content) buf=prototypes.buffer() descfile="%s/%s/.desc" % (location, dirname) desc.writetobuffer(buf, logtitle="Desc file at "+descfile) try: self.mkdir("%s/%s" % (location,dirname)) except com_brew.BrewDirectoryExistsException: pass self.writefile(descfile, buf.getvalue()) bodyfile="%s/%s/body" % (location, dirname) if bodyfile in listing and len(content)==listing[bodyfile]['size']: self.log("Skipping writing %s as there is already a file of the same length" % (bodyfile,)) else: self.writefile(bodyfile, content) # did we have too many if len(wp): for k in wp: self.log("Unable to put %s on the phone as there weren't any spare index entries" % (wp[k]['name'],)) # Note that we don't write to the camera area # tidy up - reread indices del results[mediakey] # done with it reindexfunction(results) return results class LGUncountedIndexedMedia: """Implements media for LG phones that use the new index format with index file with no counters such as the VX8300 Allow external media to be managed without downloading files, can detect if external media is present. Also contains 'hack' for ringtones to allow users to store ringtones on the external media""" def __init__(self): pass def getmediaindex(self, builtins, maps, results, key): """Gets the media (wallpaper/ringtone) index @param builtins: the builtin list on the phone @param results: places results in this dict @param maps: the list of index files and locations @param key: key to place results in """ self.log("Reading "+key) media={} # builtins index = 0; # MIC Initialize counter here, instead of the next stanza for i,n in enumerate(builtins): # nb zero based index whereas previous phones used 1 media[i]={'name': n, 'origin': 'builtin'} index+=1; # maps # index=0 # MIC Do not want to reset index; builtins start at 0 # Otherwise, the builtins are overwriten by # these for type, indexfile, directory, external_dir, maxentries, typemajor,_idx in maps: if _idx is not None: index=_idx for item in self.getindex(indexfile): media[index]={ 'name': basename(item.filename), 'filename': item.filename, 'origin': type, } if item.date!=0: media[index]['date']=item.date index+=1 # finish results[key]=media def getindex(self, filename): "read an index file" try: buf=prototypes.buffer(self.getfilecontents(filename)) except com_brew.BrewNoSuchFileException: return [] g=self.protocolclass.indexfile() # some media indexes have crap appended to the end, prevent this error from messing up everything # valid entries at the start of the file will still get read OK. try: g.readfrombuffer(buf, logtitle="Index file "+filename) except: self.log("Corrupt index file "+`filename`+", this might cause you all sorts of problems.") return g.items def getmedia(self, maps, results, key): origins={} # signal that we are using the new media storage that includes the origin and timestamp origins['new_media_version']=1 for type, indexfile, directory, external_dir, maxentries, typemajor, _idx in maps: media={} for item in self.getindex(indexfile): data=None # skip files that are not in the actual directory # these are external media files that are handled # differently, this will prevent them from showing # in the media views if not item.filename.startswith(directory): continue timestamp=None try: stat_res=self.statfile(item.filename) if stat_res!=None: timestamp=stat_res['date'][0] if not self.is_external_media(item.filename): data=self.getfilecontents(item.filename, True) else: # for external memory skip reading it is very slow # the file will show up in bitpim allowing it to # be managed, files added from bitpim will be # visible because we will have a copy of the # file we copied to the phone. data='' except (com_brew.BrewNoSuchFileException,com_brew.BrewBadPathnameException,com_brew.BrewNameTooLongException): self.log("It was in the index, but not on the filesystem") except (com_brew.BrewFileLockedException): self.log("Could not read " + item.filename + " possibly due to SD card not being present.") except com_brew.BrewAccessDeniedException: # firmware wouldn't let us read this file, just mark it then self.log('Failed to read file: '+item.filename) data='' if data!=None: media[common.basename(item.filename)]={ 'data': data, 'timestamp': timestamp} origins[type]=media results[key]=origins return results def is_external_media(self, filename): return filename.startswith(self.external_storage_root) def external_storage_present(self): dircache=self.DirCache(self) test_name=self.external_storage_root+"bitpim_test" try: dircache.writefile(test_name, "bitpim_test") except: return False dircache.rmfile(test_name) return True def savemedia(self, mediakey, mediaindexkey, maps, results, merge, reindexfunction, update_index_file=True): """Actually saves out the media @param mediakey: key of the media (eg 'wallpapers' or 'ringtones') @param mediaindexkey: index key (eg 'wallpaper-index') @param maps: list index files and locations @param results: results dict @param merge: are we merging or overwriting what is there? @param reindexfunction: the media is re-indexed at the end. this function is called to do it """ # take copies of the lists as we modify them wp=results[mediakey].copy() # the media we want to save wpi=results[mediaindexkey].copy() # what is already in the index files # remove builtins for k in wpi.keys(): if wpi[k].get('origin', "")=='builtin': del wpi[k] use_external_media=self.external_storage_present() skip_origin=[] for type, indexfile, directory, external_dir, maxentries, typemajor, _idx in maps: # if no external media is present skip indexes which refer # to external media if self.is_external_media(directory) and not use_external_media: self.log(" No external storage detected. Skipping "+type+" media.") skip_origin.append(type) else: # make sure the media directory exists try: self.mkdirs(directory) except: pass # build up list into init init={} for type, indexfile, directory, external_dir, maxentries, typemajor, _idx in maps: init[type]={} for k in wpi.keys(): if wpi[k]['origin']==type: name=wpi[k]['name'] fullname=wpi[k]['filename'] data=None del wpi[k] for w in wp.keys(): # does wp contain a reference to this same item? if wp[w]['name']==name and wp[w]['origin']==type: data=wp[w]['data'] del wp[w] if not merge and data is None: # delete the entry continue if type in skip_origin: self.log("skipping "+name+" in index "+type+" no external media detected") elif fullname.startswith(directory): # only add in files that are really in the media directory on the phone # fake files will be added in later in this function init[type][name]={'data': data, 'filename': fullname} # init now contains what is in the original indexes that should stay on the phone # wp contains items that we still need to add, and weren't in the existing index assert len(wpi)==0 # now look through the media and see if anything was assigned a particular # origin and put it in the indexes, things that were not assigned are dropped for w in wp.keys(): o=wp[w].get("origin", "") if o is not None and len(o) and o in init and o not in skip_origin: init[o][wp[w]['name']]={'data': wp[w]['data']} del wp[w] # if external media is specified, add all the extra files to the index for type, indexfile, directory, external_dir, maxentries, typemajor, _idx in maps: if type not in skip_origin and len(external_dir): if self.is_external_media(external_dir) and not use_external_media: continue try: dirlisting=self.listfiles(external_dir) except: self.log("Unable to list files in external directory "+external_dir) continue for file in dirlisting: init[type][basename(file)]={'data': 'bitpim:)', 'filename': file} # time to write the files out dircache=self.DirCache(self) for type, indexfile, directory, external_dir, maxentries, typemajor, _idx in maps: if type not in skip_origin: # get the old index file so we can work out what to delete for item in self.getindex(indexfile): # force the name to the correct directory # this will then cleanup fake external files that are # no longer in the index real_filename=directory+"/"+basename(item.filename) if basename(item.filename) not in init[type]: self.log(real_filename+" is being deleted") try: dircache.rmfile(real_filename) except com_brew.BrewNoSuchFileException: self.log("Hmm, it didn't exist!") # write each entry out for idx in init[type].keys(): entry=init[type][idx] # we force the use of the correct directory, regardless of the # actual path the file is in, the phone requires the file to be in the correct # location or it will rewrite the index file on reboot # the actual index file can point to a different location # as long as the filename exists, allowing a hack. filename=directory+"/"+idx if not entry.has_key('filename'): entry['filename']=filename fstat=dircache.stat(filename) if 'data' not in entry: # must be in the filesystem already if fstat is None: self.log("Entry "+idx+" is in index "+indexfile+" but there is no data for it and it isn't in the filesystem. The index entry will be removed.") del init[type][idx] continue # check len(data) against fstat->length data=entry['data'] if data is None: assert merge continue # we are doing an add and don't have data for this existing entry if not data: # check for files with no data, probably due to access denied or external media read self.log('Not writing '+filename+', no data available') continue if fstat is not None and len(data)==fstat['size']: self.log("Not writing "+filename+" as a file of the same name and length already exists.") else: dircache.writefile(filename, data) # write out index if update_index_file: ifile=self.protocolclass.indexfile() idxlist=init[type].keys() idxlist.sort() idxlist.reverse() for idx in idxlist: ie=self.protocolclass.indexentry() ie.type=typemajor ie.filename=init[type][idx]['filename'] fstat=dircache.stat(init[type][idx]['filename']) if fstat is not None: ie.size=fstat['size'] else: ie.size=0 # ie.date left as zero ifile.items.append(ie) buf=prototypes.buffer() ifile.writetobuffer(buf, logtitle="Index file "+indexfile) self.log("Writing index file "+indexfile+" for type "+type+" with "+`len(idxlist)`+" entries.") dircache.writefile(indexfile, buf.getvalue()) # doesn't really need to go via dircache return reindexfunction(results) def getwallpaperindices(self, results): return self.getmediaindex(self.builtinwallpapers, self.wallpaperlocations, results, 'wallpaper-index') def getringtoneindices(self, results): return self.getmediaindex(self.builtinringtones, self.ringtonelocations, results, 'ringtone-index') def getwallpapers(self, result): return self.getmedia(self.wallpaperlocations, result, 'wallpapers') def getringtones(self, result): return self.getmedia(self.ringtonelocations, result, 'ringtone') def savewallpapers(self, results, merge): return self.savemedia('wallpapers', 'wallpaper-index', self.wallpaperlocations, results, merge, self.getwallpaperindices) def saveringtones(self, results, merge): return self.savemedia('ringtone', 'ringtone-index', self.ringtonelocations, results, merge, self.getringtoneindices) class EnterDMError(Exception): pass class LGDMPhone: """Class to handle getting the phone into Diagnostic Mode (DM) for later Lg model phones. Subclass should set the following in __init__: self._timeout: how long (in seconds) before the phone gets kicked out of DM Subclass may also override the following methods: self.setDMversion(): set self._DMv5 to True or False. """ def _rotate_left(self, value, nbits): return ((value << nbits) | (value >> (32-nbits))) & 0xffffffffL def get_challenge_response(self, challenge): # Reverse engineered and contributed by Nathan Hjelm # get_challenge_response(challenge): # - Takes the SHA-1 hash of a 16-byte block containing the challenge and returns the proper response. # - The hash used by the vx8700 differs from the standard implementation only in that it does not append a # 1 bit before padding the message with 0's. # # Return value: # Last three bytes of the SHA-1 hash or'd with 0x80000000. # IV = (0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0) input_vector = [0x67452301L, 0xefcdab89L, 0x98badcfeL, 0x10325476L, 0xc3d2e1f0L] hash_result = [0x67452301L, 0xefcdab89L, 0x98badcfeL, 0x10325476L, 0xc3d2e1f0L] hash_data = [] hash_data.append(long(challenge)) # pad message with zeros as well and zero first word of bit length # if this were standard SHA-1 then 0x00000080 would be appended here as its a 56-bit message for i in range(14): hash_data.append(0L) # append second word of the bit length (56 bit message?) hash_data.append(56L) for i in range(80): j = i & 0x0f if i > 15: index1 = (i - 3) & 0x0f index2 = (i - 8) & 0x0f index3 = (i - 14) & 0x0f hash_data[j] = hash_data[index1] ^ hash_data[index2] ^ hash_data[index3] ^ hash_data[j] hash_data[j] = self._rotate_left (hash_data[j], 1) if i < 20: # f = (B and C) or ((not B) and C), k = 0x5a827999 f = (hash_result[1] & hash_result[2]) | ((~hash_result[1]) & hash_result[3]) k = 0x5a827999L elif i < 40: # f = B xor C xor D, k = 0x6ed9eba1 f = hash_result[1] ^ hash_result[2] ^ hash_result[3] k = 0x6ed9eba1L elif i < 60: # f = (B and C) or (B and D) or (B and C), k = 0x8f1bbcdc f = (hash_result[1] & hash_result[2]) | (hash_result[1] & hash_result[3]) | (hash_result[2] & hash_result[3]) k = 0x8f1bbcdcL else: # f = B xor C xor D, k = 0xca62c1d6 f = hash_result[1] ^ hash_result[2] ^ hash_result[3] k = 0xca62c1d6L # A = E + rotate_left (A, 5) + w[j] + f + k newA = (hash_result[4] + self._rotate_left(hash_result[0], 5) + hash_data[j] + f + k) & 0xffffffffL # B = oldA, C = rotate_left(B, 30), D = C, E = D hash_result = [newA] + hash_result[0:4] hash_result[2] = self._rotate_left (hash_result[2], 30) for i in range(5): hash_result[i] = (hash_result[i] + input_vector[i]) & 0xffffffffL return 0x80000000L | (hash_result[4] & 0x00ffffffL) def _unlock_key(self): _req=self.protocolclass.LockKeyReq(lock=1) self.sendbrewcommand(_req, self.protocolclass.data) def _lock_key(self): _req=self.protocolclass.LockKeyReq() self.sendbrewcommand(_req, self.protocolclass.data) def _press_key(self, keys): # simulate a series of keypress if not keys: return _req=self.protocolclass.KeyPressReq() for _k in keys: _req.key=_k self.sendbrewcommand(_req, self.protocolclass.data) def _enter_DMv4(self): self._lock_key() self._press_key('\x06\x513733929\x51') self._unlock_key() def _enter_DMv5(self): # request the seed _req=self.protocolclass.ULReq(unlock_key=0) _resp=self.sendbrewcommand(_req, self.protocolclass.ULRes) # respond with the key _key=self.get_challenge_response(_resp.unlock_key) if _key is None: self.log('Failed to get the key.') raise EnterDMError('Failed to get the key') _req=self.protocolclass.ULReq(unlock_code=1, unlock_key=_key) _resp=self.sendbrewcommand(_req, self.protocolclass.ULRes) if _resp.unlock_ok!=1: raise EnterDMError('Bad response - unlock_ok: %d'%_resp.unlock_ok) def _DMv6_get_esn(self): _req=self.protocolclass.NVReq(field=0x0000) _res=self.sendbrewcommand(_req, self.protocolclass.NVRes) return struct.unpack_from ('> 16) & 0xf) + ((_extra >> 11) & 0x1f) + _ctime) % 16 #_shift = _shift_bytes / 4 _req=self.protocolclass.DMEnterReq(unlock_key=_key) if _resp.unlock_code==0: # this response usually occurs in error. rebooting the phone seems to clear it _req.unlock_code=1 elif _resp.unlock_code==2: _req.unlock_code=3 _req.convert_to_key2(_shift) else: raise EnterDMError('Unknown unlock_code: %d'%_resp.unlock_code) _resp=self.sendbrewcommand(_req, self.protocolclass.DMEnterResp) if _resp.result == 1: if self._shift is None: self._shift=_shift if __debug__: self.log('Shift key: %d'%self._shift) return raise EnterDMError('Failed to guess the shift/key') def enter_DM(self, e=None): # do nothing if the phone failed to previously enter DM if self._in_DM is False: return # check for DMv5 applicability if self._DMv5 is None: self.setDMversion() try: if self._DMv6: # new DM scheme self._enter_DMv6() elif self._DMv5: # enter DMv5 self._enter_DMv5() else: # enter DMv4 self._enter_DMv4() self._in_DM=True except: self.log('Failed to transition to DM') self._in_DM=False return def _OnTimer(self): if self._in_DM: self.log('Transition out of DM assumed.') self._in_DM=None del self._timer self._timer=None def _filefunc(self, func, *args, **kwargs): self.enter_DM() return func(*args, **kwargs) def _sendbrewcommand(self, func, *args, **kwargs): # A wrapper function to address the issue of DM timing out in a # middle of a file read or write (usually of a large file). # Not quite happy with this hack, but couldn't figure out a better way! # If you have a better solution, feel free to share. try: return func(*args, **kwargs) except com_brew.BrewAccessDeniedException: # DM may have timed out, retry. pass self.enter_DM() return func(*args, **kwargs) def setDMversion(self): """Define the DM version required for this phone, default to DMv5""" self._DMv5=True self._DMv6=False def __init__(self): self._in_DM=None self._timer=None self._DMv5=None self._DMv6=None self._timeout=None self._shift=None # wrap our functions self.getfilecontents=functools.partial(self._filefunc, self.getfilecontents) self.writefile=functools.partial(self._filefunc, self.writefile) self.statfile=functools.partial(self._filefunc, self.statfile) self.sendbrewcommand=functools.partial(self._sendbrewcommand, self.sendbrewcommand) def __del__(self): if self._timer: self._timer.cancel() del self._timer def basename(name): if name.rfind('/')>=0: pos=name.rfind('/') name=name[pos+1:] return name def dirname(name): if name.rfind("/")<1: return "" return name[:name.rfind("/")] def stripext(name): if name.rfind('.')>=0: name=name[:name.rfind('.')] return name def getext(name): name=basename(name) if name.rfind('.')>=0: return name[name.rfind('.')+1:] return '' bitpim-1.0.7+dfsg1/src/phones/p_lglx5450.p0000644001616600161660000002350010445704035016220 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### Copyright (C) 2005 Simon Capper ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lglx5450.p 3387 2006-06-20 05:31:09Z rogerb $ %{ """Various descriptions of data specific to LG LX5450""" from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx4400 except as noted # below from p_lgvx4400 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=500 MAXCALENDARDESCRIPTION=38 # Calendar parameters NUMCALENDARENTRIES=300 CAL_REP_NONE=0x10 CAL_REP_DAILY=0x11 CAL_REP_MONFRI=0x12 CAL_REP_WEEKLY=0x13 CAL_REP_MONTHLY=0x14 CAL_REP_YEARLY=0x15 CAL_DOW_SUN=0x0800 CAL_DOW_MON=0x0400 CAL_DOW_TUE=0x0200 CAL_DOW_WED=0x0100 CAL_DOW_THU=0x0080 CAL_DOW_FRI=0x0040 CAL_DOW_SAT=0x0020 CAL_DOW_EXCEPTIONS=0x0010 CAL_REMINDER_NONE=0 CAL_REMINDER_ONTIME=1 CAL_REMINDER_5MIN=2 CAL_REMINDER_10MIN=3 CAL_REMINDER_1HOUR=4 CAL_REMINDER_1DAY=5 CAL_REMINDER_2DAYS=6 CAL_REPEAT_DATE=(2100, 12, 31) cal_dir='sch' cal_data_file_name='sch/schedule.dat' cal_exception_file_name='sch/schexception.dat' cal_has_voice_id=False PHONE_ENCODING='iso8859_1' %} PACKET speeddial: 2 UINT {'default': 0xffff} +entry 1 UINT {'default': 0xff} +number PACKET speeddials: * LIST {'length': NUMSPEEDDIALS, 'elementclass': speeddial} +speeddials PACKET indexentry: 2 UINT {'default': 0xffff} +index 50 USTRING {'default': ""} +name PACKET indexfile: "Used for tracking wallpaper and ringtones" # A bit of a silly design again. Entries with an index of 0xffff are # 'blank'. Thus it is possible for numactiveitems and the actual # number of valid entries to be mismatched. 2 UINT numactiveitems * LIST {'elementclass': indexentry, 'createdefault': True} +items PACKET camindexentry: 1 UINT {'default': 0} +index 11 USTRING {'default': ""} +name 4 LGCALDATE +taken 4 UINT {'default': 0x00ff0100} +dunno PACKET campicsdat: "the cam/pics.dat file" * LIST {'length': 20, 'elementclass': camindexentry, 'createdefault': True} +items ### ### The calendar ### PACKET scheduleexception: 4 UINT pos "Refers to event id (position in schedule file) that this suppresses" 1 UINT day 1 UINT month 2 UINT year PACKET scheduleexceptionfile: * LIST {'elementclass': scheduleexception} +items PACKET scheduleevent: P UINT { 'constant': 60 } packet_size "Faster than packetsize()" 4 UINT pos "position within file, used as an event id" 4 LGCALDATE start 4 LGCALDATE end 1 UINT repeat 2 UINT daybitmap "which days a weekly repeat event happens on" 1 UINT { 'default': 0 } +pad2 1 UINT alarmminutes "a value of 100 indicates not set" 1 UINT alarmhours "a value of 100 indicates not set" 1 UINT alarmtype "preset alarm reminder type" 1 UINT { 'default': 0 } +snoozedelay "in minutes, not for this phone" 1 UINT ringtone 39 USTRING {'encoding': PHONE_ENCODING, 'raiseontruncate': False, 'raiseonunterminatedread': False } description PACKET schedulefile: 2 UINT numactiveitems * LIST {'elementclass': scheduleevent} +events ### ### Call History ### PACKET call: 4 GPSDATE GPStime #no. of seconds since 0h 1-6-80, based off local time. 4 UINT unknown1 # different for each call 4 UINT duration #seconds, not certain about length of this field 49 USTRING {'raiseonunterminatedread': False} number 36 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 1 UINT numberlength # length of phone number 1 UINT unknown2 # set to 1 on some calls 1 UINT pbnumbertype # 1=cell, 2=home, 3=office, 4=cell2, 5=fax, 6=vmail, 0xFF=not in phone book 2 UINT unknown3 # always seems to be 0 2 UINT pbentrynum #entry number in phonebook PACKET callhistory: 4 UINT numcalls 1 UINT unknown1 * LIST {'elementclass': call} +calls ### ### SMS ### # # There are 3 types of SMS records, The inbox, outbox and unsent (pending) # Unlike other records in the phone each message is stored in a separate file # All messages are in the 'sms' directory in the root of the phone # Inbox messages are in files called 'inbox000.dat', the number 000 varies for # each message, typically there are no gaps in the numbering, but gaps can appear # if a message is deleted. # Outbox message are named 'outbox000.dat', unsent messages are named 'sf00.dat', # only two digit file name that suggests a max of 100 message for this type. # Messages in the outbox get updated when the message is received by the recipient, # they contain a delivery flag and a delivery time for all the possible 10 recipients. # The vx8100 supports SMS contatination, this allows you to send text messages that are # longer than 160 characters. The format is different for these type of messages, but # it is supported by this implementation. # The vx8100 also allows you to put small graphics, sounds and animations in a message. # This implementation does not support these, if they are contained in a message they # will be ignored and just the text will be shown when you view the message in bitpim. # The text in the the messages is stored in 7-bit characters, so they have # to be unpacked, in concatinated messages and messages with embeded graphics etc. the # format uses the GSM 03.38 specified format, a good example of this can be found at # "http://www.dreamfabric.com/sms/hello.html". # For simple messages less than 161 characters with no graphics the format is simpler, # the 7-bit characters are just packed into memory in the order they appear in the # message. PACKET msg_record: # the first few fields in this packet have something to do with the type of SMS # message contained. EMS and concatinated text are coded differently than a # simple text message 1 UINT unknown1 # 0 1 UINT binary # 0=simple text, 1=binary/concatinated 1 UINT unknown3 # 0=simple text, 1=binary/concatinated 1 UINT unknown4 # 0 1 UINT unknown6 # 2=simple text, 9=binary/concatinated 1 UINT length * LIST {'length': 219} +msg: 1 UINT byte "individual byte of message" PACKET recipient_record: 2 UINT unknown1 49 USTRING number 1 UINT status # 1 when sent, 5 when received, 2 failed to send 4 LGCALDATE timesent 4 LGCALDATE timereceived 8 DATA unknown2 PACKET sms_saved: 4 UINT outboxmsg 4 UNKNOWN pad # used for GPStime on some phones if self.outboxmsg: * sms_out outbox if not self.outboxmsg: * sms_in inbox PACKET sms_out: P USTRING { 'default': '' } callback 4 UINT index # starting from 1, unique 1 UINT locked # 1=locked 3 UINT unknown1 # zero 4 LGCALDATE timesent # time the message was sent 21 USTRING {'encoding': PHONE_ENCODING} subject 151 DATA unknown2 1 UINT num_msg_elements # up to 10 * LIST {'elementclass': msg_record, 'length': 10} +messages 1 UINT unknown5 1 UINT priority # 0=normal, 1=high 15 DATA unknown7 24 USTRING callback * LIST {'elementclass': recipient_record,'length': 10} +recipients PACKET SMSINBOXMSGFRAGMENT: * LIST {'length': 181} +msg: # this size could be wrong 1 UINT byte "individual byte of message" PACKET sms_in: 4 UINT msg_index1 4 UINT msg_index2 # equal to the numerical part of the filename eg inbox002.dat 2 UINT unknown2 # set to 0 for simple message and 3 for binary, 9 for page 4 UINT unknown3 # set to 0 6 SMSDATE timesent 3 UINT unknown 1 UINT callback_length # 0 for no callback number 38 USTRING callback 1 UINT sender_length * LIST {'length': 38} +sender: 1 UINT byte "individual byte of senders phone number" 15 DATA unknown4 # set to zeros 4 LGCALDATE lg_time # time the message was sent 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 2 UINT unknown5 # zero 1 UINT read # 1 if message has been read, 0 otherwise 1 UINT locked # 1 if the message is locked, 0 otherwise 2 UINT unknown8 # zero 1 UINT priority # 1 if the message is high priority, 0 otherwise 5 DATA flags # message flags, read, priority, locked etc 21 USTRING {'encoding': PHONE_ENCODING} subject 1 UINT bin_header1 # 0 in simple message 1 if the message contains a binary header 1 UINT bin_header2 # 0 in simple message 9 if the message contains a binary header 2 UINT unknown6 # zeros 2 UINT multipartID # multi-part message ID, used for concatinated messages only 1 UINT bin_header3 # 0 in simple message 2 if the message contains a binary header 1 UINT num_msg_elements # max 10 elements (guessing on max here) * LIST {'length': 10} +msglengths: 1 UINT msglength "lengths of individual messages in septets" * LIST {'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT} +msgs # 181 bytes per message, uncertain on this, no multipart message available # 20 messages, 7-bit ascii for simple text. for binary header # first byte is header length not including the length byte # rest depends on content of header, not known at this time. # text alway follows the header although the format it different # than a simple SMS 437 DATA unknown5 33 USTRING {'encoding': PHONE_ENCODING} senders_name 169 DATA unknown6 # ?? inlcudes senders phone number in ascii PACKET sms_quick_text: # the lx5450 has variable length NULL terminated strings null terminated in it's canned messages # file sms/mediacan000.dat, not sure about the max * LIST {} +msgs: * USTRING {'encoding': PHONE_ENCODING} msg # bitpim-1.0.7+dfsg1/src/phones/p_lglx5550.p0000644001616600161660000002771710454042735016241 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Simon Cappper ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### %{ """Various descriptions of data specific to LG LX5550""" from prototypes import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx4400 except as noted # below from p_lgvx4400 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=499 MAXCALENDARDESCRIPTION=38 NUMEMAILS=3 NUMPHONENUMBERS=5 MEMOLENGTH=65 # Calendar parameters NUMCALENDARENTRIES=300 CAL_REP_NONE=0x10 CAL_REP_DAILY=0x11 CAL_REP_MONFRI=0x12 CAL_REP_WEEKLY=0x13 CAL_REP_MONTHLY=0x14 CAL_REP_YEARLY=0x15 CAL_DOW_SUN=0x0800 CAL_DOW_MON=0x0400 CAL_DOW_TUE=0x0200 CAL_DOW_WED=0x0100 CAL_DOW_THU=0x0080 CAL_DOW_FRI=0x0040 CAL_DOW_SAT=0x0020 CAL_DOW_EXCEPTIONS=0x0010 CAL_REMINDER_NONE=0 CAL_REMINDER_ONTIME=1 CAL_REMINDER_5MIN=2 CAL_REMINDER_10MIN=3 CAL_REMINDER_1HOUR=4 CAL_REMINDER_1DAY=5 CAL_REMINDER_2DAYS=6 CAL_NO_VOICE=0xffff CAL_REPEAT_DATE=(2100, 12, 31) cal_dir='sch' cal_voice_ext='.qcp' # full name='sche000.qcp' cal_data_file_name='sch/schedule.dat' cal_exception_file_name='sch/schexception.dat' cal_voice_id_ofs=0x0f cal_has_voice_id=True PHONE_ENCODING='iso8859_1' %} PACKET pbgroup: "A single group" 1 UINT icon 23 USTRING {'encoding': PHONE_ENCODING} name PACKET pbgroups: "Phonebook groups" * LIST {'elementclass': pbgroup} +groups PACKET speeddial: 2 UINT {'default': 0xffff} +entry 1 UINT {'default': 0xff} +number PACKET speeddials: * LIST {'length': NUMSPEEDDIALS, 'elementclass': speeddial} +speeddials PACKET indexentry: 2 UINT {'default': 0xffff} +index 50 USTRING {'default': ""} +name PACKET indexfile: "Used for tracking wallpaper and ringtones" # A bit of a silly design again. Entries with an index of 0xffff are # 'blank'. Thus it is possible for numactiveitems and the actual # number of valid entries to be mismatched. 2 UINT numactiveitems * LIST {'elementclass': indexentry, 'createdefault': True} +items # All STRINGS have raiseonterminatedread as False since the phone does # occassionally leave out the terminator byte # Note if you change the length of any of these fields, you also # need to modify com_lgLX5550 to give a different truncatate parameter # in the convertphonebooktophone method PACKET pbentry: 4 UINT serial1 2 UINT {'constant': 0x0222} +entrysize 4 UINT serial2 2 UINT entrynumber 23 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 2 UINT group * LIST {'length': NUMEMAILS} +emails: 49 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} email 49 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} url 1 UINT ringtone "ringtone index for a call" 1 UINT msgringtone "ringtone index for a text message" 1 BOOL secret * USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH} memo 1 UINT wallpaper * LIST {'length': NUMPHONENUMBERS} +numbertypes: 1 UINT numbertype * LIST {'length': NUMPHONENUMBERS} +numbers: 49 USTRING {'raiseonunterminatedread': False} number * UNKNOWN +unknown20c PACKET pbreadentryresponse: "Results of reading one entry" * pbheader header * pbentry entry PACKET pbupdateentryrequest: * pbheader {'command': 0x04, 'flag': 0x01} +header * pbentry entry PACKET pbappendentryrequest: * pbheader {'command': 0x03, 'flag': 0x01} +header * pbentry entry ### ### The calendar ### # # The calendar consists of one file listing events and an exception # file that lists exceptions. These exceptions suppress a particular # instance of a repeated event. For example, if you setup something # to happen monthly, but changed the 1st february event, then the # schedule will contain the repeating event, and the 1st feb one, # and the suppresions/exceptions file will point to the repeating # event and suppress the 1st feb. # The phone uses the position within the file to give an event an id PACKET scheduleexception: 4 UINT pos "Refers to event id (position in schedule file) that this suppresses" 1 UINT day 1 UINT month 2 UINT year PACKET scheduleexceptionfile: * LIST {'elementclass': scheduleexception} +items PACKET scheduleevent: 4 UINT pos "position within file, used as an event id" 4 LGCALDATE start 4 LGCALDATE end 1 UINT repeat 2 UINT daybitmap "which days a weekly repeat event happens on" 1 UINT { 'default': 0 } +pad2 1 UINT alarmminutes "a value of 100 indicates not set" 1 UINT alarmhours "a value of 100 indicates not set" 1 UINT alarmtype "preset alarm reminder type" 1 UINT { 'default': 0 } +snoozedelay "in minutes, not for this phone" 1 UINT ringtone 37 USTRING {'encoding': PHONE_ENCODING, 'raiseontruncate': False, 'raiseonunterminatedread': False } description 2 UINT hasvoice 2 UINT voiceid 2 UINT { 'default': 0 } +pad3 PACKET schedulefile: 2 UINT numactiveitems * LIST {'elementclass': scheduleevent} +events PACKET call: 4 GPSDATE GPStime #no. of seconds since 0h 1-6-80, based off local time. 4 UINT unknown1 # different for each call 4 UINT duration #seconds, not certain about length of this field 49 USTRING {'raiseonunterminatedread': False} number 36 USTRING {'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} name 1 UINT numberlength # length of phone number 1 UINT unknown2 # set to 1 on some calls 1 UINT pbnumbertype # 1=cell, 2=home, 3=office, 4=cell2, 5=fax, 6=vmail, 0xFF=not in phone book 2 UINT unknown3 # always seems to be 0 2 UINT pbentrynum #entry number in phonebook PACKET callhistory: 4 UINT numcalls 1 UINT unknown1 * LIST {'elementclass': call} +calls PACKET firmwareresponse: 1 UINT command 11 USTRING {'terminator': None} date1 8 USTRING {'terminator': None} time1 11 USTRING {'terminator': None} date2 8 USTRING {'terminator': None} time2 8 USTRING {'terminator': None} firmware ### ### SMS ### # # There are 3 types of SMS records, The inbox, outbox and unsent (pending) # Unlike other records in the phone each message is stored in a separate file # All messages are in the 'sms' directory in the root of the phone # Inbox messages are in files called 'inbox000.dat', the number 000 varies for # each message, typically there are no gaps in the numbering, but gaps can appear # if a message is deleted. # Outbox message are named 'outbox000.dat', unsent messages are named 'sf00.dat', # only two digit file name that suggests a max of 100 message for this type. # Messages in the outbox get updated when the message is received by the recipient, # they contain a delivery flag and a delivery time for all the possible 10 recipients. # The vx8100 supports SMS contatination, this allows you to send text messages that are # longer than 160 characters. The format is different for these type of messages, but # it is supported by this implementation. # The vx8100 also allows you to put small graphics, sounds and animations in a message. # This implementation does not support these, if they are contained in a message they # will be ignored and just the text will be shown when you view the message in bitpim. # The text in the the messages is stored in 7-bit characters, so they have # to be unpacked, in concatinated messages and messages with embeded graphics etc. the # format uses the GSM 03.38 specified format, a good example of this can be found at # "http://www.dreamfabric.com/sms/hello.html". # For simple messages less than 161 characters with no graphics the format is simpler, # the 7-bit characters are just packed into memory in the order they appear in the # message. PACKET msg_record: # the first few fields in this packet have something to do with the type of SMS # message contained. EMS and concatinated text are coded differently than a # simple text message 1 UINT unknown1 # 0 1 UINT binary # 0=simple text, 1=binary/concatinated 1 UINT unknown3 # 0=simple text, 1=binary/concatinated 1 UINT unknown4 # 0 1 UINT unknown6 # 2=simple text, 9=binary/concatinated 1 UINT length * LIST {'length': 219} +msg: 1 UINT byte "individual byte of message" PACKET recipient_record: 40 DATA unknown 49 USTRING number 1 UINT status # 1 when sent, 5 when received, 2 failed to send 2 UINT unknown1 4 LGCALDATE timesent 4 LGCALDATE timereceived 104 DATA unknown2 PACKET sms_saved: 4 UINT outboxmsg 4 UNKNOWN pad # used for GPStime on some phones if self.outboxmsg: * sms_out outbox if not self.outboxmsg: * sms_in inbox PACKET sms_out: 4 UINT index # starting from 1, unique 1 UINT locked # 1=locked 3 UINT unknown1 # zero 4 LGCALDATE timesent # time the message was sent 21 USTRING {'encoding': PHONE_ENCODING} subject 1 DATA unknown2 1 UINT num_msg_elements # up to 10 * LIST {'elementclass': msg_record, 'length': 10} +messages 2253 UINT unknown5 1 UINT priority # 0=normal, 1=high 23 USTRING callback 14 DATA unknown6 * LIST {'elementclass': recipient_record,'length': 9} +recipients * DATA unknown7 PACKET SMSINBOXMSGFRAGMENT: * LIST {'length': 181} +msg: # this size could be wrong 1 UINT byte "individual byte of message" PACKET sms_in: 4 UINT msg_index1 4 UINT msg_index2 # equal to the numerical part of the filename eg inbox002.dat 2 UINT unknown2 # set to 0 for simple message and 3 for binary, 9 for page 4 UINT unknown3 # set to 0 6 SMSDATE timesent 3 UINT unknown 1 UINT callback_length # 0 for no callback number 38 USTRING callback 1 UINT sender_length * LIST {'length': 38} +sender: 1 UINT byte "individual byte of senders phone number" 15 DATA unknown4 # set to zeros 4 LGCALDATE lg_time # time the message was sent 4 GPSDATE GPStime # num seconds since 0h 1-6-80, time message received by phone 2 UINT unknown5 # zero 1 UINT read # 1 if message has been read, 0 otherwise 1 UINT locked # 1 if the message is locked, 0 otherwise 2 UINT unknown8 # zero 1 UINT priority # 1 if the message is high priority, 0 otherwise 5 DATA flags # message flags, read, priority, locked etc 21 USTRING {'encoding': PHONE_ENCODING} subject 1 UINT bin_header1 # 0 in simple message 1 if the message contains a binary header 1 UINT bin_header2 # 0 in simple message 9 if the message contains a binary header 2 UINT unknown6 # zeros 2 UINT multipartID # multi-part message ID, used for concatinated messages only 1 UINT bin_header3 # 0 in simple message 2 if the message contains a binary header 1 UINT unknown9 1 UINT num_msg_elements # max 10 elements (guessing on max here) * LIST {'length': 10} +msglengths: 1 UINT msglength "lengths of individual messages in septets" 10 UINT unknown10 * LIST {'length': 10, 'elementclass': SMSINBOXMSGFRAGMENT} +msgs # 181 bytes per message, uncertain on this, no multipart message available # 20 messages, 7-bit ascii for simple text. for binary header # first byte is header length not including the length byte # rest depends on content of header, not known at this time. # text alway follows the header although the format it different # than a simple SMS * DATA unknown5 PACKET sms_quick_text: # the vx4400 has variable length NULL terminated strings null terminated in it's canned messages # file sms/mediacan000.dat, not sure about the max * LIST {} +msgs: * USTRING {'encoding': PHONE_ENCODING} msg # bitpim-1.0.7+dfsg1/src/phones/p_lgvx10000.p0000644001616600161660000000066311041434775016306 0ustar amuamu### BITPIM ( -*- Python -*- ) ### ### Copyright (C) 2007-2008 Nathan Hjelm ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: p_lgvx10000.p 4639 2008-07-22 19:50:21Z djpham $ %{ """Various descriptions of data specific to LG VX10000""" from p_lgvx8800 import * # same as VX-8800 %} bitpim-1.0.7+dfsg1/src/phones/p_lglg8100.py0000644001616600161660000052411710466234100016367 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG LG8100 (Telus)""" from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lg import * # we are the same as lgvx7000 except as noted # below from p_lgvx7000 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb # vx8100 uses a type based index for speed dials instead of positional like the vx4400 SPEEDDIALINDEX=1 MAXCALENDARDESCRIPTION=32 NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=99 NUMPHONEBOOKENTRIES=500 MAXCALENDARDESCRIPTION=38 NUMEMAILS=2 NUMPHONENUMBERS=5 SMS_CANNED_MAX_ITEMS=18 SMS_CANNED_MAX_LENGTH=101 BREW_FILE_SYSTEM=2 # Media type MEDIA_TYPE_RINGTONE=6 MEDIA_TYPE_IMAGE=0x0300 MEDIA_TYPE_SOUND=0x0402 MEDIA_TYPE_SDIMAGE=0x0008 MEDIA_TYPE_SDSOUND=0x000C MEDIA_TYPE_VIDEO=0x0304 MEDIA_RINGTONE_DEFAULT_ICON=1 MEDIA_IMAGE_DEFAULT_ICON=0 MEDIA_VIDEO_DEFAULT_ICON=0 PHONE_ENCODING='iso8859_1' # to allow for mixed up file naming for this phone this_takes_the_prize_for_the_most_brain_dead_call_history_file_naming_ive_seen=1 class speeddial(BaseProtogenClass): __fields=['entry', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddial,self).__init__(**dict) if self.__class__ is speeddial: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddial,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddial,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.writetobuffer(buf) try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_entry.readfrombuffer(buf) self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,UINT): self.__field_entry=value else: self.__field_entry=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_number(self): try: self.__field_number except: self.__field_number=UINT(**{'sizeinbytes': 1, 'default': 0xff}) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,UINT): self.__field_number=value else: self.__field_number=UINT(value,**{'sizeinbytes': 1, 'default': 0xff}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('entry', self.__field_entry, None) yield ('number', self.__field_number, None) class speeddials(BaseProtogenClass): __fields=['speeddials'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(speeddials,self).__init__(**dict) if self.__class__ is speeddials: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(speeddials,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(speeddials,kwargs) if len(args): dict2={'length': NUMSPEEDDIALS, 'elementclass': speeddial} dict2.update(kwargs) kwargs=dict2 self.__field_speeddials=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) self.__field_speeddials.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_speeddials(self): try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) return self.__field_speeddials.getvalue() def __setfield_speeddials(self, value): if isinstance(value,LIST): self.__field_speeddials=value else: self.__field_speeddials=LIST(value,**{'length': NUMSPEEDDIALS, 'elementclass': speeddial}) def __delfield_speeddials(self): del self.__field_speeddials speeddials=property(__getfield_speeddials, __setfield_speeddials, __delfield_speeddials, None) def iscontainer(self): return True def containerelements(self): yield ('speeddials', self.__field_speeddials, None) class indexentry(BaseProtogenClass): __fields=['index', 'type', 'filename', 'icon', 'dunno1', 'date', 'dunno', 'size'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_type.writetobuffer(buf) self.__field_filename.writetobuffer(buf) try: self.__field_icon except: self.__field_icon=UINT(**{'sizeinbytes': 4, 'default':0}) self.__field_icon.writetobuffer(buf) try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 1, 'default':0}) self.__field_dunno1.writetobuffer(buf) try: self.__field_date except: self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_date.writetobuffer(buf) try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default':0}) self.__field_dunno.writetobuffer(buf) try: self.__field_size except: self.__field_size=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_size.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 2}) self.__field_index.readfrombuffer(buf) self.__field_type=UINT(**{'sizeinbytes': 2}) self.__field_type.readfrombuffer(buf) self.__field_filename=USTRING(**{'sizeinbytes': 255, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_filename.readfrombuffer(buf) self.__field_icon=UINT(**{'sizeinbytes': 4, 'default':0}) self.__field_icon.readfrombuffer(buf) self.__field_dunno1=UINT(**{'sizeinbytes': 1, 'default':0}) self.__field_dunno1.readfrombuffer(buf) self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_date.readfrombuffer(buf) self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default':0}) self.__field_dunno.readfrombuffer(buf) self.__field_size=UINT(**{'sizeinbytes': 4, 'default': 0}) self.__field_size.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 2}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_type(self): return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,UINT): self.__field_type=value else: self.__field_type=UINT(value,**{'sizeinbytes': 2}) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, None) def __getfield_filename(self): return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'sizeinbytes': 255, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, "includes full pathname") def __getfield_icon(self): try: self.__field_icon except: self.__field_icon=UINT(**{'sizeinbytes': 4, 'default':0}) return self.__field_icon.getvalue() def __setfield_icon(self, value): if isinstance(value,UINT): self.__field_icon=value else: self.__field_icon=UINT(value,**{'sizeinbytes': 4, 'default':0}) def __delfield_icon(self): del self.__field_icon icon=property(__getfield_icon, __setfield_icon, __delfield_icon, None) def __getfield_dunno1(self): try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 1, 'default':0}) return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UINT): self.__field_dunno1=value else: self.__field_dunno1=UINT(value,**{'sizeinbytes': 1, 'default':0}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_date(self): try: self.__field_date except: self.__field_date=UINT(**{'sizeinbytes': 4, 'default': 0}) return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,UINT): self.__field_date=value else: self.__field_date=UINT(value,**{'sizeinbytes': 4, 'default': 0}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, "i think this is bitfield of the date") def __getfield_dunno(self): try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 4, 'default':0}) return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 4, 'default':0}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def __getfield_size(self): try: self.__field_size except: self.__field_size=UINT(**{'sizeinbytes': 4, 'default': 0}) return self.__field_size.getvalue() def __setfield_size(self, value): if isinstance(value,UINT): self.__field_size=value else: self.__field_size=UINT(value,**{'sizeinbytes': 4, 'default': 0}) def __delfield_size(self): del self.__field_size size=property(__getfield_size, __setfield_size, __delfield_size, "size of the file, can be set to zero") def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('type', self.__field_type, None) yield ('filename', self.__field_filename, "includes full pathname") yield ('icon', self.__field_icon, None) yield ('dunno1', self.__field_dunno1, None) yield ('date', self.__field_date, "i think this is bitfield of the date") yield ('dunno', self.__field_dunno, None) yield ('size', self.__field_size, "size of the file, can be set to zero") class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): dict2={'elementclass': indexentry, 'createdefault': True} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class pbgroup(BaseProtogenClass): "A single group" __fields=['unknown1', 'unknown2', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroup,self).__init__(**dict) if self.__class__ is pbgroup: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroup,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroup,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_unknown1 except: self.__field_unknown1=UINT(**{'sizeinbytes': 4, 'default': 0xFFFF}) self.__field_unknown1.writetobuffer(buf) try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 4, 'default': 0xFFFF}) self.__field_unknown2.writetobuffer(buf) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UINT(**{'sizeinbytes': 4, 'default': 0xFFFF}) self.__field_unknown1.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 4, 'default': 0xFFFF}) self.__field_unknown2.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): try: self.__field_unknown1 except: self.__field_unknown1=UINT(**{'sizeinbytes': 4, 'default': 0xFFFF}) return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 4, 'default': 0xFFFF}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_unknown2(self): try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 4, 'default': 0xFFFF}) return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 4, 'default': 0xFFFF}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('unknown2', self.__field_unknown2, None) yield ('name', self.__field_name, None) class pbgroups(BaseProtogenClass): "Phonebook groups" __fields=['groups'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroups,self).__init__(**dict) if self.__class__ is pbgroups: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroups,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroups,kwargs) if len(args): dict2={'elementclass': pbgroup} dict2.update(kwargs) kwargs=dict2 self.__field_groups=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_groups(self): try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) return self.__field_groups.getvalue() def __setfield_groups(self, value): if isinstance(value,LIST): self.__field_groups=value else: self.__field_groups=LIST(value,**{'elementclass': pbgroup}) def __delfield_groups(self): del self.__field_groups groups=property(__getfield_groups, __setfield_groups, __delfield_groups, None) def iscontainer(self): return True def containerelements(self): yield ('groups', self.__field_groups, None) class pbentry(BaseProtogenClass): __fields=['serial1', 'entrysize', 'serial2', 'entrynumber', 'name', 'group', 'emails', 'ringtone', 'msgringtone', 'wallpaper', 'numbertypes', 'numbers', 'unknown'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_serial1.writetobuffer(buf) try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x181, 'constantexception': PhoneBookBusyException}) self.__field_entrysize.writetobuffer(buf) self.__field_serial2.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_group.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lglg8100_109, 'length': NUMEMAILS}) self.__field_emails.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_msgringtone.writetobuffer(buf) self.__field_wallpaper.writetobuffer(buf) try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lglg8100_114, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lglg8100_116, 'length': NUMPHONENUMBERS}) self.__field_numbers.writetobuffer(buf) try: self.__field_unknown except: self.__field_unknown=UNKNOWN() self.__field_unknown.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x181, 'constantexception': PhoneBookBusyException}) self.__field_entrysize.readfrombuffer(buf) self.__field_serial2=UINT(**{'sizeinbytes': 4}) self.__field_serial2.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 2}) self.__field_entrynumber.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 2}) self.__field_group.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_lglg8100_109, 'length': NUMEMAILS}) self.__field_emails.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 2}) self.__field_ringtone.readfrombuffer(buf) self.__field_msgringtone=UINT(**{'sizeinbytes': 2}) self.__field_msgringtone.readfrombuffer(buf) self.__field_wallpaper=UINT(**{'sizeinbytes': 2}) self.__field_wallpaper.readfrombuffer(buf) self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lglg8100_114, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.readfrombuffer(buf) self.__field_numbers=LIST(**{'elementclass': _gen_p_lglg8100_116, 'length': NUMPHONENUMBERS}) self.__field_numbers.readfrombuffer(buf) self.__field_unknown=UNKNOWN() self.__field_unknown.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_entrysize(self): try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x181, 'constantexception': PhoneBookBusyException}) return self.__field_entrysize.getvalue() def __setfield_entrysize(self, value): if isinstance(value,UINT): self.__field_entrysize=value else: self.__field_entrysize=UINT(value,**{'sizeinbytes': 2, 'constant': 0x181, 'constantexception': PhoneBookBusyException}) def __delfield_entrysize(self): del self.__field_entrysize entrysize=property(__getfield_entrysize, __setfield_entrysize, __delfield_entrysize, None) def __getfield_serial2(self): return self.__field_serial2.getvalue() def __setfield_serial2(self, value): if isinstance(value,UINT): self.__field_serial2=value else: self.__field_serial2=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial2(self): del self.__field_serial2 serial2=property(__getfield_serial2, __setfield_serial2, __delfield_serial2, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 2}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 23, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 2}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lglg8100_109, 'length': NUMEMAILS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_lglg8100_109, 'length': NUMEMAILS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 2}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "ringtone index for a call") def __getfield_msgringtone(self): return self.__field_msgringtone.getvalue() def __setfield_msgringtone(self, value): if isinstance(value,UINT): self.__field_msgringtone=value else: self.__field_msgringtone=UINT(value,**{'sizeinbytes': 2}) def __delfield_msgringtone(self): del self.__field_msgringtone msgringtone=property(__getfield_msgringtone, __setfield_msgringtone, __delfield_msgringtone, "ringtone index for a text message") def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 2}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_numbertypes(self): try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lglg8100_114, 'length': NUMPHONENUMBERS}) return self.__field_numbertypes.getvalue() def __setfield_numbertypes(self, value): if isinstance(value,LIST): self.__field_numbertypes=value else: self.__field_numbertypes=LIST(value,**{'elementclass': _gen_p_lglg8100_114, 'length': NUMPHONENUMBERS}) def __delfield_numbertypes(self): del self.__field_numbertypes numbertypes=property(__getfield_numbertypes, __setfield_numbertypes, __delfield_numbertypes, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lglg8100_116, 'length': NUMPHONENUMBERS}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'elementclass': _gen_p_lglg8100_116, 'length': NUMPHONENUMBERS}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_unknown(self): try: self.__field_unknown except: self.__field_unknown=UNKNOWN() return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UNKNOWN): self.__field_unknown=value else: self.__field_unknown=UNKNOWN(value,) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def iscontainer(self): return True def containerelements(self): yield ('serial1', self.__field_serial1, None) yield ('entrysize', self.__field_entrysize, None) yield ('serial2', self.__field_serial2, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('name', self.__field_name, None) yield ('group', self.__field_group, None) yield ('emails', self.__field_emails, None) yield ('ringtone', self.__field_ringtone, "ringtone index for a call") yield ('msgringtone', self.__field_msgringtone, "ringtone index for a text message") yield ('wallpaper', self.__field_wallpaper, None) yield ('numbertypes', self.__field_numbertypes, None) yield ('numbers', self.__field_numbers, None) yield ('unknown', self.__field_unknown, None) class _gen_p_lglg8100_109(BaseProtogenClass): 'Anonymous inner class' __fields=['email'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglg8100_109,self).__init__(**dict) if self.__class__ is _gen_p_lglg8100_109: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglg8100_109,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglg8100_109,kwargs) if len(args): dict2={'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_email=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_email.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_email=USTRING(**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_email.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def iscontainer(self): return True def containerelements(self): yield ('email', self.__field_email, None) class _gen_p_lglg8100_114(BaseProtogenClass): 'Anonymous inner class' __fields=['numbertype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglg8100_114,self).__init__(**dict) if self.__class__ is _gen_p_lglg8100_114: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglg8100_114,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglg8100_114,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_numbertype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numbertype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numbertype=UINT(**{'sizeinbytes': 1}) self.__field_numbertype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numbertype(self): return self.__field_numbertype.getvalue() def __setfield_numbertype(self, value): if isinstance(value,UINT): self.__field_numbertype=value else: self.__field_numbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_numbertype(self): del self.__field_numbertype numbertype=property(__getfield_numbertype, __setfield_numbertype, __delfield_numbertype, None) def iscontainer(self): return True def containerelements(self): yield ('numbertype', self.__field_numbertype, None) class _gen_p_lglg8100_116(BaseProtogenClass): 'Anonymous inner class' __fields=['number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglg8100_116,self).__init__(**dict) if self.__class__ is _gen_p_lglg8100_116: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglg8100_116,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglg8100_116,kwargs) if len(args): dict2={'sizeinbytes': 49, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_number=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) class pbreadentryresponse(BaseProtogenClass): "Results of reading one entry" __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbreadentryresponse,self).__init__(**dict) if self.__class__ is pbreadentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbreadentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbreadentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbupdateentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbupdateentryrequest,self).__init__(**dict) if self.__class__ is pbupdateentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbupdateentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbupdateentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x04, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbappendentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbappendentryrequest,self).__init__(**dict) if self.__class__ is pbappendentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbappendentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbappendentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x03, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class scheduleexception(BaseProtogenClass): __fields=['pos', 'day', 'month', 'year'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexception,self).__init__(**dict) if self.__class__ is scheduleexception: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexception,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexception,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pos.writetobuffer(buf) self.__field_day.writetobuffer(buf) self.__field_month.writetobuffer(buf) self.__field_year.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_day=UINT(**{'sizeinbytes': 1}) self.__field_day.readfrombuffer(buf) self.__field_month=UINT(**{'sizeinbytes': 1}) self.__field_month.readfrombuffer(buf) self.__field_year=UINT(**{'sizeinbytes': 2}) self.__field_year.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "Refers to event id (position in schedule file) that this suppresses") def __getfield_day(self): return self.__field_day.getvalue() def __setfield_day(self, value): if isinstance(value,UINT): self.__field_day=value else: self.__field_day=UINT(value,**{'sizeinbytes': 1}) def __delfield_day(self): del self.__field_day day=property(__getfield_day, __setfield_day, __delfield_day, None) def __getfield_month(self): return self.__field_month.getvalue() def __setfield_month(self, value): if isinstance(value,UINT): self.__field_month=value else: self.__field_month=UINT(value,**{'sizeinbytes': 1}) def __delfield_month(self): del self.__field_month month=property(__getfield_month, __setfield_month, __delfield_month, None) def __getfield_year(self): return self.__field_year.getvalue() def __setfield_year(self, value): if isinstance(value,UINT): self.__field_year=value else: self.__field_year=UINT(value,**{'sizeinbytes': 2}) def __delfield_year(self): del self.__field_year year=property(__getfield_year, __setfield_year, __delfield_year, None) def iscontainer(self): return True def containerelements(self): yield ('pos', self.__field_pos, "Refers to event id (position in schedule file) that this suppresses") yield ('day', self.__field_day, None) yield ('month', self.__field_month, None) yield ('year', self.__field_year, None) class scheduleexceptionfile(BaseProtogenClass): __fields=['items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleexceptionfile,self).__init__(**dict) if self.__class__ is scheduleexceptionfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleexceptionfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleexceptionfile,kwargs) if len(args): dict2={'elementclass': scheduleexception} dict2.update(kwargs) kwargs=dict2 self.__field_items=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_items=LIST(**{'elementclass': scheduleexception}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': scheduleexception}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': scheduleexception}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('items', self.__field_items, None) class scheduleevent(BaseProtogenClass): __fields=['index', 'unknown0', 'unknown1', 'pos', 'description', 'start', 'end', 'repeat', 'alarmindex_vibrate', 'ringtone', 'unknown2', 'alarmminutes', 'alarmhours', 'unknown3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(scheduleevent,self).__init__(**dict) if self.__class__ is scheduleevent: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(scheduleevent,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(scheduleevent,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) try: self.__field_unknown0 except: self.__field_unknown0=UINT(**{'sizeinbytes': 1, 'default':1}) self.__field_unknown0.writetobuffer(buf) try: self.__field_unknown1 except: self.__field_unknown1=UINT(**{'sizeinbytes': 4, 'default':0}) self.__field_unknown1.writetobuffer(buf) self.__field_pos.writetobuffer(buf) self.__field_description.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_repeat.writetobuffer(buf) self.__field_alarmindex_vibrate.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 1, 'default':0}) self.__field_unknown2.writetobuffer(buf) self.__field_alarmminutes.writetobuffer(buf) self.__field_alarmhours.writetobuffer(buf) try: self.__field_unknown3 except: self.__field_unknown3=UINT(**{'sizeinbytes': 1, 'default':0}) self.__field_unknown3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 1}) self.__field_index.readfrombuffer(buf) self.__field_unknown0=UINT(**{'sizeinbytes': 1, 'default':1}) self.__field_unknown0.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 4, 'default':0}) self.__field_unknown1.readfrombuffer(buf) self.__field_pos=UINT(**{'sizeinbytes': 4}) self.__field_pos.readfrombuffer(buf) self.__field_description=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_description.readfrombuffer(buf) self.__field_start=LGCALDATE(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=LGCALDATE(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_repeat=TELUSLGCALREPEAT(**{'sizeinbytes': 4}) self.__field_repeat.readfrombuffer(buf) self.__field_alarmindex_vibrate=UINT(**{'sizeinbytes': 1}) self.__field_alarmindex_vibrate.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1, 'default':0}) self.__field_unknown2.readfrombuffer(buf) self.__field_alarmminutes=UINT(**{'sizeinbytes': 1}) self.__field_alarmminutes.readfrombuffer(buf) self.__field_alarmhours=UINT(**{'sizeinbytes': 1}) self.__field_alarmhours.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1, 'default':0}) self.__field_unknown3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 1}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_unknown0(self): try: self.__field_unknown0 except: self.__field_unknown0=UINT(**{'sizeinbytes': 1, 'default':1}) return self.__field_unknown0.getvalue() def __setfield_unknown0(self, value): if isinstance(value,UINT): self.__field_unknown0=value else: self.__field_unknown0=UINT(value,**{'sizeinbytes': 1, 'default':1}) def __delfield_unknown0(self): del self.__field_unknown0 unknown0=property(__getfield_unknown0, __setfield_unknown0, __delfield_unknown0, None) def __getfield_unknown1(self): try: self.__field_unknown1 except: self.__field_unknown1=UINT(**{'sizeinbytes': 4, 'default':0}) return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 4, 'default':0}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_pos(self): return self.__field_pos.getvalue() def __setfield_pos(self, value): if isinstance(value,UINT): self.__field_pos=value else: self.__field_pos=UINT(value,**{'sizeinbytes': 4}) def __delfield_pos(self): del self.__field_pos pos=property(__getfield_pos, __setfield_pos, __delfield_pos, "position within file, used as an event id") def __getfield_description(self): return self.__field_description.getvalue() def __setfield_description(self, value): if isinstance(value,USTRING): self.__field_description=value else: self.__field_description=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_description(self): del self.__field_description description=property(__getfield_description, __setfield_description, __delfield_description, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,LGCALDATE): self.__field_start=value else: self.__field_start=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, None) def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,LGCALDATE): self.__field_end=value else: self.__field_end=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_repeat(self): return self.__field_repeat.getvalue() def __setfield_repeat(self, value): if isinstance(value,TELUSLGCALREPEAT): self.__field_repeat=value else: self.__field_repeat=TELUSLGCALREPEAT(value,**{'sizeinbytes': 4}) def __delfield_repeat(self): del self.__field_repeat repeat=property(__getfield_repeat, __setfield_repeat, __delfield_repeat, None) def __getfield_alarmindex_vibrate(self): return self.__field_alarmindex_vibrate.getvalue() def __setfield_alarmindex_vibrate(self, value): if isinstance(value,UINT): self.__field_alarmindex_vibrate=value else: self.__field_alarmindex_vibrate=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmindex_vibrate(self): del self.__field_alarmindex_vibrate alarmindex_vibrate=property(__getfield_alarmindex_vibrate, __setfield_alarmindex_vibrate, __delfield_alarmindex_vibrate, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_unknown2(self): try: self.__field_unknown2 except: self.__field_unknown2=UINT(**{'sizeinbytes': 1, 'default':0}) return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1, 'default':0}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_alarmminutes(self): return self.__field_alarmminutes.getvalue() def __setfield_alarmminutes(self, value): if isinstance(value,UINT): self.__field_alarmminutes=value else: self.__field_alarmminutes=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmminutes(self): del self.__field_alarmminutes alarmminutes=property(__getfield_alarmminutes, __setfield_alarmminutes, __delfield_alarmminutes, "a value of 0x64 indicates not set") def __getfield_alarmhours(self): return self.__field_alarmhours.getvalue() def __setfield_alarmhours(self, value): if isinstance(value,UINT): self.__field_alarmhours=value else: self.__field_alarmhours=UINT(value,**{'sizeinbytes': 1}) def __delfield_alarmhours(self): del self.__field_alarmhours alarmhours=property(__getfield_alarmhours, __setfield_alarmhours, __delfield_alarmhours, "a value of 0x64 indicates not set") def __getfield_unknown3(self): try: self.__field_unknown3 except: self.__field_unknown3=UINT(**{'sizeinbytes': 1, 'default':0}) return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1, 'default':0}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('unknown0', self.__field_unknown0, None) yield ('unknown1', self.__field_unknown1, None) yield ('pos', self.__field_pos, "position within file, used as an event id") yield ('description', self.__field_description, None) yield ('start', self.__field_start, None) yield ('end', self.__field_end, None) yield ('repeat', self.__field_repeat, None) yield ('alarmindex_vibrate', self.__field_alarmindex_vibrate, None) yield ('ringtone', self.__field_ringtone, None) yield ('unknown2', self.__field_unknown2, None) yield ('alarmminutes', self.__field_alarmminutes, "a value of 0x64 indicates not set") yield ('alarmhours', self.__field_alarmhours, "a value of 0x64 indicates not set") yield ('unknown3', self.__field_unknown3, None) class schedulefile(BaseProtogenClass): __fields=['numactiveitems', 'events'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(schedulefile,self).__init__(**dict) if self.__class__ is schedulefile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(schedulefile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(schedulefile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_events=LIST(**{'elementclass': scheduleevent}) self.__field_events.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_events(self): try: self.__field_events except: self.__field_events=LIST(**{'elementclass': scheduleevent}) return self.__field_events.getvalue() def __setfield_events(self, value): if isinstance(value,LIST): self.__field_events=value else: self.__field_events=LIST(value,**{'elementclass': scheduleevent}) def __delfield_events(self): del self.__field_events events=property(__getfield_events, __setfield_events, __delfield_events, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('events', self.__field_events, None) class call(BaseProtogenClass): __fields=['GPStime', 'unknown2', 'duration', 'number', 'name', 'numberlength', 'pbnumbertype', 'unknown2', 'pbentrynum'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(call,self).__init__(**dict) if self.__class__ is call: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(call,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(call,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_GPStime.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_duration.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_numberlength.writetobuffer(buf) self.__field_pbnumbertype.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_pbentrynum.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 4}) self.__field_unknown2.readfrombuffer(buf) self.__field_duration=UINT(**{'sizeinbytes': 4}) self.__field_duration.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_numberlength=UINT(**{'sizeinbytes': 2}) self.__field_numberlength.readfrombuffer(buf) self.__field_pbnumbertype=UINT(**{'sizeinbytes': 1}) self.__field_pbnumbertype.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 3}) self.__field_unknown2.readfrombuffer(buf) self.__field_pbentrynum=UINT(**{'sizeinbytes': 2}) self.__field_pbentrynum.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_duration(self): return self.__field_duration.getvalue() def __setfield_duration(self, value): if isinstance(value,UINT): self.__field_duration=value else: self.__field_duration=UINT(value,**{'sizeinbytes': 4}) def __delfield_duration(self): del self.__field_duration duration=property(__getfield_duration, __setfield_duration, __delfield_duration, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 36, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numberlength(self): return self.__field_numberlength.getvalue() def __setfield_numberlength(self, value): if isinstance(value,UINT): self.__field_numberlength=value else: self.__field_numberlength=UINT(value,**{'sizeinbytes': 2}) def __delfield_numberlength(self): del self.__field_numberlength numberlength=property(__getfield_numberlength, __setfield_numberlength, __delfield_numberlength, None) def __getfield_pbnumbertype(self): return self.__field_pbnumbertype.getvalue() def __setfield_pbnumbertype(self, value): if isinstance(value,UINT): self.__field_pbnumbertype=value else: self.__field_pbnumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_pbnumbertype(self): del self.__field_pbnumbertype pbnumbertype=property(__getfield_pbnumbertype, __setfield_pbnumbertype, __delfield_pbnumbertype, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_pbentrynum(self): return self.__field_pbentrynum.getvalue() def __setfield_pbentrynum(self, value): if isinstance(value,UINT): self.__field_pbentrynum=value else: self.__field_pbentrynum=UINT(value,**{'sizeinbytes': 2}) def __delfield_pbentrynum(self): del self.__field_pbentrynum pbentrynum=property(__getfield_pbentrynum, __setfield_pbentrynum, __delfield_pbentrynum, None) def iscontainer(self): return True def containerelements(self): yield ('GPStime', self.__field_GPStime, None) yield ('unknown2', self.__field_unknown2, None) yield ('duration', self.__field_duration, None) yield ('number', self.__field_number, None) yield ('name', self.__field_name, None) yield ('numberlength', self.__field_numberlength, None) yield ('pbnumbertype', self.__field_pbnumbertype, None) yield ('unknown2', self.__field_unknown2, None) yield ('pbentrynum', self.__field_pbentrynum, None) class callhistory(BaseProtogenClass): __fields=['numcalls', 'unknown1', 'calls'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callhistory,self).__init__(**dict) if self.__class__ is callhistory: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callhistory,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callhistory,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numcalls.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numcalls=UINT(**{'sizeinbytes': 4}) self.__field_numcalls.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_calls=LIST(**{'elementclass': call}) self.__field_calls.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numcalls(self): return self.__field_numcalls.getvalue() def __setfield_numcalls(self, value): if isinstance(value,UINT): self.__field_numcalls=value else: self.__field_numcalls=UINT(value,**{'sizeinbytes': 4}) def __delfield_numcalls(self): del self.__field_numcalls numcalls=property(__getfield_numcalls, __setfield_numcalls, __delfield_numcalls, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_calls(self): try: self.__field_calls except: self.__field_calls=LIST(**{'elementclass': call}) return self.__field_calls.getvalue() def __setfield_calls(self, value): if isinstance(value,LIST): self.__field_calls=value else: self.__field_calls=LIST(value,**{'elementclass': call}) def __delfield_calls(self): del self.__field_calls calls=property(__getfield_calls, __setfield_calls, __delfield_calls, None) def iscontainer(self): return True def containerelements(self): yield ('numcalls', self.__field_numcalls, None) yield ('unknown1', self.__field_unknown1, None) yield ('calls', self.__field_calls, None) class msg_record(BaseProtogenClass): __fields=['unknown1', 'binary', 'unknown3', 'unknown4', 'unknown6', 'length', 'msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(msg_record,self).__init__(**dict) if self.__class__ is msg_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(msg_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(msg_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_binary.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_length.writetobuffer(buf) try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lglg8100_234, 'length': 219}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_binary=UINT(**{'sizeinbytes': 1}) self.__field_binary.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1}) self.__field_unknown3.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 1}) self.__field_unknown4.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 1}) self.__field_unknown6.readfrombuffer(buf) self.__field_length=UINT(**{'sizeinbytes': 1}) self.__field_length.readfrombuffer(buf) self.__field_msg=LIST(**{'elementclass': _gen_p_lglg8100_234, 'length': 219}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_binary(self): return self.__field_binary.getvalue() def __setfield_binary(self, value): if isinstance(value,UINT): self.__field_binary=value else: self.__field_binary=UINT(value,**{'sizeinbytes': 1}) def __delfield_binary(self): del self.__field_binary binary=property(__getfield_binary, __setfield_binary, __delfield_binary, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_length(self): return self.__field_length.getvalue() def __setfield_length(self, value): if isinstance(value,UINT): self.__field_length=value else: self.__field_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_length(self): del self.__field_length length=property(__getfield_length, __setfield_length, __delfield_length, None) def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lglg8100_234, 'length': 219}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lglg8100_234, 'length': 219}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('binary', self.__field_binary, None) yield ('unknown3', self.__field_unknown3, None) yield ('unknown4', self.__field_unknown4, None) yield ('unknown6', self.__field_unknown6, None) yield ('length', self.__field_length, None) yield ('msg', self.__field_msg, None) class _gen_p_lglg8100_234(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglg8100_234,self).__init__(**dict) if self.__class__ is _gen_p_lglg8100_234: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglg8100_234,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglg8100_234,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class recipient_record(BaseProtogenClass): __fields=['unknown1', 'number', 'status', 'timesent', 'timereceived', 'unknown2', 'unknown3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(recipient_record,self).__init__(**dict) if self.__class__ is recipient_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(recipient_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(recipient_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_timereceived.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=DATA(**{'sizeinbytes': 33}) self.__field_unknown1.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49}) self.__field_number.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_timereceived=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timereceived.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 1}) self.__field_unknown2.readfrombuffer(buf) self.__field_unknown3=DATA(**{'sizeinbytes': 40}) self.__field_unknown3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,DATA): self.__field_unknown1=value else: self.__field_unknown1=DATA(value,**{'sizeinbytes': 33}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_timereceived(self): return self.__field_timereceived.getvalue() def __setfield_timereceived(self, value): if isinstance(value,LGCALDATE): self.__field_timereceived=value else: self.__field_timereceived=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timereceived(self): del self.__field_timereceived timereceived=property(__getfield_timereceived, __setfield_timereceived, __delfield_timereceived, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,DATA): self.__field_unknown3=value else: self.__field_unknown3=DATA(value,**{'sizeinbytes': 40}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('number', self.__field_number, None) yield ('status', self.__field_status, None) yield ('timesent', self.__field_timesent, None) yield ('timereceived', self.__field_timereceived, None) yield ('unknown2', self.__field_unknown2, None) yield ('unknown3', self.__field_unknown3, None) class sms_saved(BaseProtogenClass): __fields=['outboxmsg', 'GPStime', 'outbox', 'inbox'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_saved,self).__init__(**dict) if self.__class__ is sms_saved: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_saved,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_saved,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_outboxmsg.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) if self.outboxmsg: self.__field_outbox.writetobuffer(buf) if not self.outboxmsg: self.__field_inbox.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_outboxmsg=UINT(**{'sizeinbytes': 4}) self.__field_outboxmsg.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) if self.outboxmsg: self.__field_outbox=sms_out() self.__field_outbox.readfrombuffer(buf) if not self.outboxmsg: self.__field_inbox=sms_in() self.__field_inbox.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_outboxmsg(self): return self.__field_outboxmsg.getvalue() def __setfield_outboxmsg(self, value): if isinstance(value,UINT): self.__field_outboxmsg=value else: self.__field_outboxmsg=UINT(value,**{'sizeinbytes': 4}) def __delfield_outboxmsg(self): del self.__field_outboxmsg outboxmsg=property(__getfield_outboxmsg, __setfield_outboxmsg, __delfield_outboxmsg, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_outbox(self): return self.__field_outbox.getvalue() def __setfield_outbox(self, value): if isinstance(value,sms_out): self.__field_outbox=value else: self.__field_outbox=sms_out(value,) def __delfield_outbox(self): del self.__field_outbox outbox=property(__getfield_outbox, __setfield_outbox, __delfield_outbox, None) def __getfield_inbox(self): return self.__field_inbox.getvalue() def __setfield_inbox(self, value): if isinstance(value,sms_in): self.__field_inbox=value else: self.__field_inbox=sms_in(value,) def __delfield_inbox(self): del self.__field_inbox inbox=property(__getfield_inbox, __setfield_inbox, __delfield_inbox, None) def iscontainer(self): return True def containerelements(self): yield ('outboxmsg', self.__field_outboxmsg, None) yield ('GPStime', self.__field_GPStime, None) if self.outboxmsg: yield ('outbox', self.__field_outbox, None) if not self.outboxmsg: yield ('inbox', self.__field_inbox, None) class sms_out(BaseProtogenClass): __fields=['index', 'unknown1', 'locked', 'timesent', 'unknown2', 'GPStime', 'subject', 'unknown4', 'num_msg_elements', 'messages', 'unknown5', 'priority', 'unknown7', 'unknown8', 'callback', 'recipients'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_out,self).__init__(**dict) if self.__class__ is sms_out: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_out,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_out,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 1}) self.__field_messages.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_unknown7.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) self.__field_callback.writetobuffer(buf) try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 7}) self.__field_recipients.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 1}) self.__field_unknown1.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2}) self.__field_unknown2.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 1}) self.__field_unknown4.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 1}) self.__field_messages.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 1}) self.__field_unknown5.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_unknown7=DATA(**{'sizeinbytes': 12}) self.__field_unknown7.readfrombuffer(buf) self.__field_unknown8=DATA(**{'sizeinbytes': 3}) self.__field_unknown8.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 23}) self.__field_callback.readfrombuffer(buf) self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 7}) self.__field_recipients.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_messages(self): try: self.__field_messages except: self.__field_messages=LIST(**{'elementclass': msg_record, 'length': 1}) return self.__field_messages.getvalue() def __setfield_messages(self, value): if isinstance(value,LIST): self.__field_messages=value else: self.__field_messages=LIST(value,**{'elementclass': msg_record, 'length': 1}) def __delfield_messages(self): del self.__field_messages messages=property(__getfield_messages, __setfield_messages, __delfield_messages, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_unknown7(self): return self.__field_unknown7.getvalue() def __setfield_unknown7(self, value): if isinstance(value,DATA): self.__field_unknown7=value else: self.__field_unknown7=DATA(value,**{'sizeinbytes': 12}) def __delfield_unknown7(self): del self.__field_unknown7 unknown7=property(__getfield_unknown7, __setfield_unknown7, __delfield_unknown7, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,DATA): self.__field_unknown8=value else: self.__field_unknown8=DATA(value,**{'sizeinbytes': 3}) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 23}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_recipients(self): try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record,'length': 7}) return self.__field_recipients.getvalue() def __setfield_recipients(self, value): if isinstance(value,LIST): self.__field_recipients=value else: self.__field_recipients=LIST(value,**{'elementclass': recipient_record,'length': 7}) def __delfield_recipients(self): del self.__field_recipients recipients=property(__getfield_recipients, __setfield_recipients, __delfield_recipients, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('unknown1', self.__field_unknown1, None) yield ('locked', self.__field_locked, None) yield ('timesent', self.__field_timesent, None) yield ('unknown2', self.__field_unknown2, None) yield ('GPStime', self.__field_GPStime, None) yield ('subject', self.__field_subject, None) yield ('unknown4', self.__field_unknown4, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('messages', self.__field_messages, None) yield ('unknown5', self.__field_unknown5, None) yield ('priority', self.__field_priority, None) yield ('unknown7', self.__field_unknown7, None) yield ('unknown8', self.__field_unknown8, None) yield ('callback', self.__field_callback, None) yield ('recipients', self.__field_recipients, None) class SMSINBOXMSGFRAGMENT(BaseProtogenClass): __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSINBOXMSGFRAGMENT,self).__init__(**dict) if self.__class__ is SMSINBOXMSGFRAGMENT: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSINBOXMSGFRAGMENT,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSINBOXMSGFRAGMENT,kwargs) if len(args): dict2={'elementclass': _gen_p_lglg8100_273, 'length': 181} dict2.update(kwargs) kwargs=dict2 self.__field_msg=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lglg8100_273, 'length': 181}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=LIST(**{'elementclass': _gen_p_lglg8100_273, 'length': 181}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lglg8100_273, 'length': 181}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lglg8100_273, 'length': 181}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class _gen_p_lglg8100_273(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglg8100_273,self).__init__(**dict) if self.__class__ is _gen_p_lglg8100_273: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglg8100_273,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglg8100_273,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class sms_in(BaseProtogenClass): __fields=['msg_index1', 'msg_index2', 'unknown2', 'timesent', 'unknown', 'callback_length', 'callback', 'sender_length', 'sender', 'unknown3', 'lg_time', 'unknown4', 'GPStime', 'unknown5', 'read', 'locked', 'unknown8', 'priority', 'unknown11', 'subject', 'bin_header1', 'bin_header2', 'unknown6', 'multipartID', 'unknown14', 'bin_header3', 'num_msg_elements', 'msglengths', 'msgs', 'unknown12', 'senders_name', 'unknown9'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_in,self).__init__(**dict) if self.__class__ is sms_in: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_in,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_in,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_senders_name except: self.__field_senders_name=USTRING() def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msg_index1.writetobuffer(buf) self.__field_msg_index2.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self.__field_callback_length.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_sender_length.writetobuffer(buf) try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lglg8100_285, 'length': 38}) self.__field_sender.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_lg_time.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown8.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_unknown11.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_bin_header1.writetobuffer(buf) self.__field_bin_header2.writetobuffer(buf) self.__field_unknown6.writetobuffer(buf) self.__field_multipartID.writetobuffer(buf) self.__field_unknown14.writetobuffer(buf) self.__field_bin_header3.writetobuffer(buf) self.__field_num_msg_elements.writetobuffer(buf) try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lglg8100_305, 'length': 1}) self.__field_msglengths.writetobuffer(buf) try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 1, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.writetobuffer(buf) self.__field_unknown12.writetobuffer(buf) self.__field_unknown9.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg_index1=UINT(**{'sizeinbytes': 4}) self.__field_msg_index1.readfrombuffer(buf) self.__field_msg_index2=UINT(**{'sizeinbytes': 4}) self.__field_msg_index2.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2}) self.__field_unknown2.readfrombuffer(buf) self.__field_timesent=SMSDATE(**{'sizeinbytes': 6}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown=UINT(**{'sizeinbytes': 3}) self.__field_unknown.readfrombuffer(buf) self.__field_callback_length=UINT(**{'sizeinbytes': 1}) self.__field_callback_length.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 38}) self.__field_callback.readfrombuffer(buf) self.__field_sender_length=UINT(**{'sizeinbytes': 1}) self.__field_sender_length.readfrombuffer(buf) self.__field_sender=LIST(**{'elementclass': _gen_p_lglg8100_285, 'length': 38}) self.__field_sender.readfrombuffer(buf) self.__field_unknown3=DATA(**{'sizeinbytes': 12}) self.__field_unknown3.readfrombuffer(buf) self.__field_lg_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_lg_time.readfrombuffer(buf) self.__field_unknown4=UINT(**{'sizeinbytes': 3}) self.__field_unknown4.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_unknown5=UINT(**{'sizeinbytes': 4}) self.__field_unknown5.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 1}) self.__field_read.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown8=UINT(**{'sizeinbytes': 2}) self.__field_unknown8.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_unknown11=DATA(**{'sizeinbytes': 6}) self.__field_unknown11.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_bin_header1=UINT(**{'sizeinbytes': 1}) self.__field_bin_header1.readfrombuffer(buf) self.__field_bin_header2=UINT(**{'sizeinbytes': 1}) self.__field_bin_header2.readfrombuffer(buf) self.__field_unknown6=UINT(**{'sizeinbytes': 2}) self.__field_unknown6.readfrombuffer(buf) self.__field_multipartID=UINT(**{'sizeinbytes': 2}) self.__field_multipartID.readfrombuffer(buf) self.__field_unknown14=UINT(**{'sizeinbytes': 2}) self.__field_unknown14.readfrombuffer(buf) self.__field_bin_header3=UINT(**{'sizeinbytes': 1}) self.__field_bin_header3.readfrombuffer(buf) self.__field_num_msg_elements=UINT(**{'sizeinbytes': 1}) self.__field_num_msg_elements.readfrombuffer(buf) self.__field_msglengths=LIST(**{'elementclass': _gen_p_lglg8100_305, 'length': 1}) self.__field_msglengths.readfrombuffer(buf) self.__field_msgs=LIST(**{'length': 1, 'elementclass': SMSINBOXMSGFRAGMENT}) self.__field_msgs.readfrombuffer(buf) self.__field_unknown12=DATA(**{'sizeinbytes': 20}) self.__field_unknown12.readfrombuffer(buf) self.__field_unknown9=DATA() self.__field_unknown9.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg_index1(self): return self.__field_msg_index1.getvalue() def __setfield_msg_index1(self, value): if isinstance(value,UINT): self.__field_msg_index1=value else: self.__field_msg_index1=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index1(self): del self.__field_msg_index1 msg_index1=property(__getfield_msg_index1, __setfield_msg_index1, __delfield_msg_index1, None) def __getfield_msg_index2(self): return self.__field_msg_index2.getvalue() def __setfield_msg_index2(self, value): if isinstance(value,UINT): self.__field_msg_index2=value else: self.__field_msg_index2=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index2(self): del self.__field_msg_index2 msg_index2=property(__getfield_msg_index2, __setfield_msg_index2, __delfield_msg_index2, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,SMSDATE): self.__field_timesent=value else: self.__field_timesent=SMSDATE(value,**{'sizeinbytes': 6}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UINT): self.__field_unknown=value else: self.__field_unknown=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def __getfield_callback_length(self): return self.__field_callback_length.getvalue() def __setfield_callback_length(self, value): if isinstance(value,UINT): self.__field_callback_length=value else: self.__field_callback_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_length(self): del self.__field_callback_length callback_length=property(__getfield_callback_length, __setfield_callback_length, __delfield_callback_length, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 38}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_sender_length(self): return self.__field_sender_length.getvalue() def __setfield_sender_length(self, value): if isinstance(value,UINT): self.__field_sender_length=value else: self.__field_sender_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_sender_length(self): del self.__field_sender_length sender_length=property(__getfield_sender_length, __setfield_sender_length, __delfield_sender_length, None) def __getfield_sender(self): try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lglg8100_285, 'length': 38}) return self.__field_sender.getvalue() def __setfield_sender(self, value): if isinstance(value,LIST): self.__field_sender=value else: self.__field_sender=LIST(value,**{'elementclass': _gen_p_lglg8100_285, 'length': 38}) def __delfield_sender(self): del self.__field_sender sender=property(__getfield_sender, __setfield_sender, __delfield_sender, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,DATA): self.__field_unknown3=value else: self.__field_unknown3=DATA(value,**{'sizeinbytes': 12}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_lg_time(self): return self.__field_lg_time.getvalue() def __setfield_lg_time(self, value): if isinstance(value,LGCALDATE): self.__field_lg_time=value else: self.__field_lg_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_lg_time(self): del self.__field_lg_time lg_time=property(__getfield_lg_time, __setfield_lg_time, __delfield_lg_time, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,UINT): self.__field_unknown4=value else: self.__field_unknown4=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,UINT): self.__field_unknown5=value else: self.__field_unknown5=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 1}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown8(self): return self.__field_unknown8.getvalue() def __setfield_unknown8(self, value): if isinstance(value,UINT): self.__field_unknown8=value else: self.__field_unknown8=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown8(self): del self.__field_unknown8 unknown8=property(__getfield_unknown8, __setfield_unknown8, __delfield_unknown8, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, None) def __getfield_unknown11(self): return self.__field_unknown11.getvalue() def __setfield_unknown11(self, value): if isinstance(value,DATA): self.__field_unknown11=value else: self.__field_unknown11=DATA(value,**{'sizeinbytes': 6}) def __delfield_unknown11(self): del self.__field_unknown11 unknown11=property(__getfield_unknown11, __setfield_unknown11, __delfield_unknown11, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 21, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_bin_header1(self): return self.__field_bin_header1.getvalue() def __setfield_bin_header1(self, value): if isinstance(value,UINT): self.__field_bin_header1=value else: self.__field_bin_header1=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header1(self): del self.__field_bin_header1 bin_header1=property(__getfield_bin_header1, __setfield_bin_header1, __delfield_bin_header1, None) def __getfield_bin_header2(self): return self.__field_bin_header2.getvalue() def __setfield_bin_header2(self, value): if isinstance(value,UINT): self.__field_bin_header2=value else: self.__field_bin_header2=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header2(self): del self.__field_bin_header2 bin_header2=property(__getfield_bin_header2, __setfield_bin_header2, __delfield_bin_header2, None) def __getfield_unknown6(self): return self.__field_unknown6.getvalue() def __setfield_unknown6(self, value): if isinstance(value,UINT): self.__field_unknown6=value else: self.__field_unknown6=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown6(self): del self.__field_unknown6 unknown6=property(__getfield_unknown6, __setfield_unknown6, __delfield_unknown6, None) def __getfield_multipartID(self): return self.__field_multipartID.getvalue() def __setfield_multipartID(self, value): if isinstance(value,UINT): self.__field_multipartID=value else: self.__field_multipartID=UINT(value,**{'sizeinbytes': 2}) def __delfield_multipartID(self): del self.__field_multipartID multipartID=property(__getfield_multipartID, __setfield_multipartID, __delfield_multipartID, None) def __getfield_unknown14(self): return self.__field_unknown14.getvalue() def __setfield_unknown14(self, value): if isinstance(value,UINT): self.__field_unknown14=value else: self.__field_unknown14=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown14(self): del self.__field_unknown14 unknown14=property(__getfield_unknown14, __setfield_unknown14, __delfield_unknown14, None) def __getfield_bin_header3(self): return self.__field_bin_header3.getvalue() def __setfield_bin_header3(self, value): if isinstance(value,UINT): self.__field_bin_header3=value else: self.__field_bin_header3=UINT(value,**{'sizeinbytes': 1}) def __delfield_bin_header3(self): del self.__field_bin_header3 bin_header3=property(__getfield_bin_header3, __setfield_bin_header3, __delfield_bin_header3, None) def __getfield_num_msg_elements(self): return self.__field_num_msg_elements.getvalue() def __setfield_num_msg_elements(self, value): if isinstance(value,UINT): self.__field_num_msg_elements=value else: self.__field_num_msg_elements=UINT(value,**{'sizeinbytes': 1}) def __delfield_num_msg_elements(self): del self.__field_num_msg_elements num_msg_elements=property(__getfield_num_msg_elements, __setfield_num_msg_elements, __delfield_num_msg_elements, None) def __getfield_msglengths(self): try: self.__field_msglengths except: self.__field_msglengths=LIST(**{'elementclass': _gen_p_lglg8100_305, 'length': 1}) return self.__field_msglengths.getvalue() def __setfield_msglengths(self, value): if isinstance(value,LIST): self.__field_msglengths=value else: self.__field_msglengths=LIST(value,**{'elementclass': _gen_p_lglg8100_305, 'length': 1}) def __delfield_msglengths(self): del self.__field_msglengths msglengths=property(__getfield_msglengths, __setfield_msglengths, __delfield_msglengths, None) def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': 1, 'elementclass': SMSINBOXMSGFRAGMENT}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'length': 1, 'elementclass': SMSINBOXMSGFRAGMENT}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def __getfield_unknown12(self): return self.__field_unknown12.getvalue() def __setfield_unknown12(self, value): if isinstance(value,DATA): self.__field_unknown12=value else: self.__field_unknown12=DATA(value,**{'sizeinbytes': 20}) def __delfield_unknown12(self): del self.__field_unknown12 unknown12=property(__getfield_unknown12, __setfield_unknown12, __delfield_unknown12, None) def __getfield_senders_name(self): return self.__field_senders_name.getvalue() def __setfield_senders_name(self, value): if isinstance(value,USTRING): self.__field_senders_name=value else: self.__field_senders_name=USTRING(value,) def __delfield_senders_name(self): del self.__field_senders_name senders_name=property(__getfield_senders_name, __setfield_senders_name, __delfield_senders_name, None) def __getfield_unknown9(self): return self.__field_unknown9.getvalue() def __setfield_unknown9(self, value): if isinstance(value,DATA): self.__field_unknown9=value else: self.__field_unknown9=DATA(value,) def __delfield_unknown9(self): del self.__field_unknown9 unknown9=property(__getfield_unknown9, __setfield_unknown9, __delfield_unknown9, None) def iscontainer(self): return True def containerelements(self): yield ('msg_index1', self.__field_msg_index1, None) yield ('msg_index2', self.__field_msg_index2, None) yield ('unknown2', self.__field_unknown2, None) yield ('timesent', self.__field_timesent, None) yield ('unknown', self.__field_unknown, None) yield ('callback_length', self.__field_callback_length, None) yield ('callback', self.__field_callback, None) yield ('sender_length', self.__field_sender_length, None) yield ('sender', self.__field_sender, None) yield ('unknown3', self.__field_unknown3, None) yield ('lg_time', self.__field_lg_time, None) yield ('unknown4', self.__field_unknown4, None) yield ('GPStime', self.__field_GPStime, None) yield ('unknown5', self.__field_unknown5, None) yield ('read', self.__field_read, None) yield ('locked', self.__field_locked, None) yield ('unknown8', self.__field_unknown8, None) yield ('priority', self.__field_priority, None) yield ('unknown11', self.__field_unknown11, None) yield ('subject', self.__field_subject, None) yield ('bin_header1', self.__field_bin_header1, None) yield ('bin_header2', self.__field_bin_header2, None) yield ('unknown6', self.__field_unknown6, None) yield ('multipartID', self.__field_multipartID, None) yield ('unknown14', self.__field_unknown14, None) yield ('bin_header3', self.__field_bin_header3, None) yield ('num_msg_elements', self.__field_num_msg_elements, None) yield ('msglengths', self.__field_msglengths, None) yield ('msgs', self.__field_msgs, None) yield ('unknown12', self.__field_unknown12, None) yield ('senders_name', self.__field_senders_name, None) yield ('unknown9', self.__field_unknown9, None) class _gen_p_lglg8100_285(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglg8100_285,self).__init__(**dict) if self.__class__ is _gen_p_lglg8100_285: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglg8100_285,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglg8100_285,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of senders phone number") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of senders phone number") class _gen_p_lglg8100_305(BaseProtogenClass): 'Anonymous inner class' __fields=['msglength'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglg8100_305,self).__init__(**dict) if self.__class__ is _gen_p_lglg8100_305: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglg8100_305,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglg8100_305,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_msglength=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_msglength.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msglength=UINT(**{'sizeinbytes': 1}) self.__field_msglength.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msglength(self): return self.__field_msglength.getvalue() def __setfield_msglength(self, value): if isinstance(value,UINT): self.__field_msglength=value else: self.__field_msglength=UINT(value,**{'sizeinbytes': 1}) def __delfield_msglength(self): del self.__field_msglength msglength=property(__getfield_msglength, __setfield_msglength, __delfield_msglength, "lengths of individual messages in septets") def iscontainer(self): return True def containerelements(self): yield ('msglength', self.__field_msglength, "lengths of individual messages in septets") class sms_quick_text(BaseProtogenClass): __fields=['msgs'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_quick_text,self).__init__(**dict) if self.__class__ is sms_quick_text: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_quick_text,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_quick_text,kwargs) if len(args): dict2={'elementclass': _gen_p_lglg8100_319, } dict2.update(kwargs) kwargs=dict2 self.__field_msgs=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lglg8100_319, }) self.__field_msgs.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msgs=LIST(**{'elementclass': _gen_p_lglg8100_319, }) self.__field_msgs.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'elementclass': _gen_p_lglg8100_319, }) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'elementclass': _gen_p_lglg8100_319, }) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def iscontainer(self): return True def containerelements(self): yield ('msgs', self.__field_msgs, None) class _gen_p_lglg8100_319(BaseProtogenClass): 'Anonymous inner class' __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglg8100_319,self).__init__(**dict) if self.__class__ is _gen_p_lglg8100_319: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglg8100_319,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglg8100_319,kwargs) if len(args): dict2={'encoding': PHONE_ENCODING} dict2.update(kwargs) kwargs=dict2 self.__field_msg=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=USTRING(**{'encoding': PHONE_ENCODING}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=USTRING(**{'encoding': PHONE_ENCODING}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=USTRING(**{'encoding': PHONE_ENCODING}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{'encoding': PHONE_ENCODING}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class textmemo(BaseProtogenClass): __fields=['text', 'memotime'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemo,self).__init__(**dict) if self.__class__ is textmemo: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemo,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemo,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_text.writetobuffer(buf) self.__field_memotime.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_text=USTRING(**{'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_text.readfrombuffer(buf) self.__field_memotime=LGCALDATE(**{'sizeinbytes': 4}) self.__field_memotime.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,USTRING): self.__field_text=value else: self.__field_text=USTRING(value,**{'sizeinbytes': 151, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def __getfield_memotime(self): return self.__field_memotime.getvalue() def __setfield_memotime(self, value): if isinstance(value,LGCALDATE): self.__field_memotime=value else: self.__field_memotime=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_memotime(self): del self.__field_memotime memotime=property(__getfield_memotime, __setfield_memotime, __delfield_memotime, None) def iscontainer(self): return True def containerelements(self): yield ('text', self.__field_text, None) yield ('memotime', self.__field_memotime, None) class textmemofile(BaseProtogenClass): __fields=['itemcount', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemofile,self).__init__(**dict) if self.__class__ is textmemofile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemofile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemofile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_itemcount.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_itemcount=UINT(**{'sizeinbytes': 4}) self.__field_itemcount.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_itemcount(self): return self.__field_itemcount.getvalue() def __setfield_itemcount(self, value): if isinstance(value,UINT): self.__field_itemcount=value else: self.__field_itemcount=UINT(value,**{'sizeinbytes': 4}) def __delfield_itemcount(self): del self.__field_itemcount itemcount=property(__getfield_itemcount, __setfield_itemcount, __delfield_itemcount, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': textmemo }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('itemcount', self.__field_itemcount, None) yield ('items', self.__field_items, None) class firmwareresponse(BaseProtogenClass): __fields=['command', 'date1', 'time1', 'date2', 'time2', 'firmware'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(firmwareresponse,self).__init__(**dict) if self.__class__ is firmwareresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(firmwareresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(firmwareresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_date1.writetobuffer(buf) self.__field_time1.writetobuffer(buf) self.__field_date2.writetobuffer(buf) self.__field_time2.writetobuffer(buf) self.__field_firmware.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_date1=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date1.readfrombuffer(buf) self.__field_time1=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time1.readfrombuffer(buf) self.__field_date2=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date2.readfrombuffer(buf) self.__field_time2=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time2.readfrombuffer(buf) self.__field_firmware=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_firmware.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_date1(self): return self.__field_date1.getvalue() def __setfield_date1(self, value): if isinstance(value,USTRING): self.__field_date1=value else: self.__field_date1=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date1(self): del self.__field_date1 date1=property(__getfield_date1, __setfield_date1, __delfield_date1, None) def __getfield_time1(self): return self.__field_time1.getvalue() def __setfield_time1(self, value): if isinstance(value,USTRING): self.__field_time1=value else: self.__field_time1=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time1(self): del self.__field_time1 time1=property(__getfield_time1, __setfield_time1, __delfield_time1, None) def __getfield_date2(self): return self.__field_date2.getvalue() def __setfield_date2(self, value): if isinstance(value,USTRING): self.__field_date2=value else: self.__field_date2=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date2(self): del self.__field_date2 date2=property(__getfield_date2, __setfield_date2, __delfield_date2, None) def __getfield_time2(self): return self.__field_time2.getvalue() def __setfield_time2(self, value): if isinstance(value,USTRING): self.__field_time2=value else: self.__field_time2=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time2(self): del self.__field_time2 time2=property(__getfield_time2, __setfield_time2, __delfield_time2, None) def __getfield_firmware(self): return self.__field_firmware.getvalue() def __setfield_firmware(self, value): if isinstance(value,USTRING): self.__field_firmware=value else: self.__field_firmware=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_firmware(self): del self.__field_firmware firmware=property(__getfield_firmware, __setfield_firmware, __delfield_firmware, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('date1', self.__field_date1, None) yield ('time1', self.__field_time1, None) yield ('date2', self.__field_date2, None) yield ('time2', self.__field_time2, None) yield ('firmware', self.__field_firmware, None) bitpim-1.0.7+dfsg1/src/phones/p_lglx570.py0000644001616600161660000031302611057641171016335 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to LG LX570 (Musiq)""" import re from prototypes import * from prototypeslg import * # Make all lg stuff available in this module as well from p_lgvx4400 import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb MEMOLENGTH=33 NUMEMAILS=3 NUMPHONENUMBERS=5 NUMSPEEDDIALS=100 FIRSTSPEEDDIAL=1 LASTSPEEDDIAL=99 SPEEDDIALINDEX=0 numbertypetab=( 'cell', 'home', 'office', 'fax', 'pager', 'none' ) PB_FILENAME='DB/SysDB/vCardSchema.vol' RT_MC_INDEX_FILENAME='setas/mcRingerIndex.map' RT_VM_INDEX_FILENAME='setas/voicememoRingerIndex.map' RT_MC_PATH='melodyComposer' RT_VM_PATH='VoiceDB/All/Memos' SMS_CANNED_MAX_ITEMS=40 SMS_CANNED_MAX_LENGTH=101 SMS_CANNED_FILENAME="sms/canned_msg.dat" SMS_PATTERNS={'Inbox': re.compile(r"^.*/inbox[0-9][0-9][0-9]\.dat$"), 'Sent': re.compile(r"^.*/outbox[0-9][0-9][0-9]\.dat$"), } class indexentry(BaseProtogenClass): __fields=['index', 'mediatype', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexentry,self).__init__(**dict) if self.__class__ is indexentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_mediatype.writetobuffer(buf) try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 40, 'default': ""}) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 1}) self.__field_index.readfrombuffer(buf) self.__field_mediatype=UINT(**{'sizeinbytes': 1}) self.__field_mediatype.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 40, 'default': ""}) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 1}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_mediatype(self): return self.__field_mediatype.getvalue() def __setfield_mediatype(self, value): if isinstance(value,UINT): self.__field_mediatype=value else: self.__field_mediatype=UINT(value,**{'sizeinbytes': 1}) def __delfield_mediatype(self): del self.__field_mediatype mediatype=property(__getfield_mediatype, __setfield_mediatype, __delfield_mediatype, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 40, 'default': ""}) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 40, 'default': ""}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('mediatype', self.__field_mediatype, None) yield ('name', self.__field_name, None) class indexfile(BaseProtogenClass): "Used for tracking wallpaper and ringtones" __fields=['numactiveitems', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(indexfile,self).__init__(**dict) if self.__class__ is indexfile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(indexfile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(indexfile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numactiveitems.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numactiveitems=UINT(**{'sizeinbytes': 2}) self.__field_numactiveitems.readfrombuffer(buf) self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numactiveitems(self): return self.__field_numactiveitems.getvalue() def __setfield_numactiveitems(self, value): if isinstance(value,UINT): self.__field_numactiveitems=value else: self.__field_numactiveitems=UINT(value,**{'sizeinbytes': 2}) def __delfield_numactiveitems(self): del self.__field_numactiveitems numactiveitems=property(__getfield_numactiveitems, __setfield_numactiveitems, __delfield_numactiveitems, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'elementclass': indexentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'elementclass': indexentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('numactiveitems', self.__field_numactiveitems, None) yield ('items', self.__field_items, None) class pbreadentryresponse(BaseProtogenClass): "Results of reading one entry" __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbreadentryresponse,self).__init__(**dict) if self.__class__ is pbreadentryresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbreadentryresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbreadentryresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader() self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbupdateentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbupdateentryrequest,self).__init__(**dict) if self.__class__ is pbupdateentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbupdateentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbupdateentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x04, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x04, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbappendentryrequest(BaseProtogenClass): __fields=['header', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbappendentryrequest,self).__init__(**dict) if self.__class__ is pbappendentryrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbappendentryrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbappendentryrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) self.__field_header.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=pbheader(**{'command': 0x03, 'flag': 0x01}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,pbheader): self.__field_header=value else: self.__field_header=pbheader(value,**{'command': 0x03, 'flag': 0x01}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) class pbentry(BaseProtogenClass): __fields=['serial1', 'entrysize', 'serial2', 'entrynumber', 'name', 'group', 'dunno1', 'ringtone', 'dunno2', 'memo', 'emails', 'url', 'speeddials', 'numbertypes', 'numbers', 'dunno3', 'wallpaper'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_wallpaper except: self.__field_wallpaper=UINT(**{ 'default': 0 }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_serial1.writetobuffer(buf) try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x029E}) self.__field_entrysize.writetobuffer(buf) self.__field_serial2.writetobuffer(buf) self.__field_entrynumber.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_group.writetobuffer(buf) try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_dunno1.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) try: self.__field_dunno2 except: self.__field_dunno2=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_dunno2.writetobuffer(buf) self.__field_memo.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lglx570_100, 'length': NUMEMAILS}) self.__field_emails.writetobuffer(buf) self.__field_url.writetobuffer(buf) try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'elementclass': _gen_p_lglx570_103, 'length': NUMPHONENUMBERS }) self.__field_speeddials.writetobuffer(buf) try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lglx570_105, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lglx570_107, 'length': NUMPHONENUMBERS}) self.__field_numbers.writetobuffer(buf) try: self.__field_dunno3 except: self.__field_dunno3=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_dunno3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_serial1=UINT(**{'sizeinbytes': 4}) self.__field_serial1.readfrombuffer(buf) self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x029E}) self.__field_entrysize.readfrombuffer(buf) self.__field_serial2=UINT(**{'sizeinbytes': 4}) self.__field_serial2.readfrombuffer(buf) self.__field_entrynumber=UINT(**{'sizeinbytes': 4}) self.__field_entrynumber.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 73, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 2}) self.__field_group.readfrombuffer(buf) self.__field_dunno1=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_dunno1.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 2}) self.__field_ringtone.readfrombuffer(buf) self.__field_dunno2=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_dunno2.readfrombuffer(buf) self.__field_memo=USTRING(**{'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) self.__field_memo.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_lglx570_100, 'length': NUMEMAILS}) self.__field_emails.readfrombuffer(buf) self.__field_url=USTRING(**{'sizeinbytes': 73, 'raiseonunterminatedread': False}) self.__field_url.readfrombuffer(buf) self.__field_speeddials=LIST(**{'elementclass': _gen_p_lglx570_103, 'length': NUMPHONENUMBERS }) self.__field_speeddials.readfrombuffer(buf) self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lglx570_105, 'length': NUMPHONENUMBERS}) self.__field_numbertypes.readfrombuffer(buf) self.__field_numbers=LIST(**{'elementclass': _gen_p_lglx570_107, 'length': NUMPHONENUMBERS}) self.__field_numbers.readfrombuffer(buf) self.__field_dunno3=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_dunno3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_serial1(self): return self.__field_serial1.getvalue() def __setfield_serial1(self, value): if isinstance(value,UINT): self.__field_serial1=value else: self.__field_serial1=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial1(self): del self.__field_serial1 serial1=property(__getfield_serial1, __setfield_serial1, __delfield_serial1, None) def __getfield_entrysize(self): try: self.__field_entrysize except: self.__field_entrysize=UINT(**{'sizeinbytes': 2, 'constant': 0x029E}) return self.__field_entrysize.getvalue() def __setfield_entrysize(self, value): if isinstance(value,UINT): self.__field_entrysize=value else: self.__field_entrysize=UINT(value,**{'sizeinbytes': 2, 'constant': 0x029E}) def __delfield_entrysize(self): del self.__field_entrysize entrysize=property(__getfield_entrysize, __setfield_entrysize, __delfield_entrysize, None) def __getfield_serial2(self): return self.__field_serial2.getvalue() def __setfield_serial2(self, value): if isinstance(value,UINT): self.__field_serial2=value else: self.__field_serial2=UINT(value,**{'sizeinbytes': 4}) def __delfield_serial2(self): del self.__field_serial2 serial2=property(__getfield_serial2, __setfield_serial2, __delfield_serial2, None) def __getfield_entrynumber(self): return self.__field_entrynumber.getvalue() def __setfield_entrynumber(self, value): if isinstance(value,UINT): self.__field_entrynumber=value else: self.__field_entrynumber=UINT(value,**{'sizeinbytes': 4}) def __delfield_entrynumber(self): del self.__field_entrynumber entrynumber=property(__getfield_entrynumber, __setfield_entrynumber, __delfield_entrynumber, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 73, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 2}) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_dunno1(self): try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UINT): self.__field_dunno1=value else: self.__field_dunno1=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 2}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_dunno2(self): try: self.__field_dunno2 except: self.__field_dunno2=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UINT): self.__field_dunno2=value else: self.__field_dunno2=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_memo(self): return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,USTRING): self.__field_memo=value else: self.__field_memo=USTRING(value,**{'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'sizeinbytes': MEMOLENGTH}) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_lglx570_100, 'length': NUMEMAILS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_lglx570_100, 'length': NUMEMAILS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, None) def __getfield_url(self): return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,USTRING): self.__field_url=value else: self.__field_url=USTRING(value,**{'sizeinbytes': 73, 'raiseonunterminatedread': False}) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_speeddials(self): try: self.__field_speeddials except: self.__field_speeddials=LIST(**{'elementclass': _gen_p_lglx570_103, 'length': NUMPHONENUMBERS }) return self.__field_speeddials.getvalue() def __setfield_speeddials(self, value): if isinstance(value,LIST): self.__field_speeddials=value else: self.__field_speeddials=LIST(value,**{'elementclass': _gen_p_lglx570_103, 'length': NUMPHONENUMBERS }) def __delfield_speeddials(self): del self.__field_speeddials speeddials=property(__getfield_speeddials, __setfield_speeddials, __delfield_speeddials, None) def __getfield_numbertypes(self): try: self.__field_numbertypes except: self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lglx570_105, 'length': NUMPHONENUMBERS}) return self.__field_numbertypes.getvalue() def __setfield_numbertypes(self, value): if isinstance(value,LIST): self.__field_numbertypes=value else: self.__field_numbertypes=LIST(value,**{'elementclass': _gen_p_lglx570_105, 'length': NUMPHONENUMBERS}) def __delfield_numbertypes(self): del self.__field_numbertypes numbertypes=property(__getfield_numbertypes, __setfield_numbertypes, __delfield_numbertypes, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'elementclass': _gen_p_lglx570_107, 'length': NUMPHONENUMBERS}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'elementclass': _gen_p_lglx570_107, 'length': NUMPHONENUMBERS}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_dunno3(self): try: self.__field_dunno3 except: self.__field_dunno3=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,UINT): self.__field_dunno3=value else: self.__field_dunno3=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_wallpaper(self): try: self.__field_wallpaper except: self.__field_wallpaper=UINT(**{ 'default': 0 }) return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{ 'default': 0 }) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def iscontainer(self): return True def containerelements(self): yield ('serial1', self.__field_serial1, None) yield ('entrysize', self.__field_entrysize, None) yield ('serial2', self.__field_serial2, None) yield ('entrynumber', self.__field_entrynumber, None) yield ('name', self.__field_name, None) yield ('group', self.__field_group, None) yield ('dunno1', self.__field_dunno1, None) yield ('ringtone', self.__field_ringtone, None) yield ('dunno2', self.__field_dunno2, None) yield ('memo', self.__field_memo, None) yield ('emails', self.__field_emails, None) yield ('url', self.__field_url, None) yield ('speeddials', self.__field_speeddials, None) yield ('numbertypes', self.__field_numbertypes, None) yield ('numbers', self.__field_numbers, None) yield ('dunno3', self.__field_dunno3, None) yield ('wallpaper', self.__field_wallpaper, None) class _gen_p_lglx570_100(BaseProtogenClass): 'Anonymous inner class' __fields=['email'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglx570_100,self).__init__(**dict) if self.__class__ is _gen_p_lglx570_100: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglx570_100,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglx570_100,kwargs) if len(args): dict2={'sizeinbytes': 73, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_email=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_email.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_email=USTRING(**{'sizeinbytes': 73, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_email.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 73, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def iscontainer(self): return True def containerelements(self): yield ('email', self.__field_email, None) class _gen_p_lglx570_103(BaseProtogenClass): 'Anonymous inner class' __fields=['speeddial'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglx570_103,self).__init__(**dict) if self.__class__ is _gen_p_lglx570_103: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglx570_103,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglx570_103,kwargs) if len(args): dict2={'sizeinbytes': 1, 'default': 0xff } dict2.update(kwargs) kwargs=dict2 self.__field_speeddial=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_speeddial except: self.__field_speeddial=UINT(**{'sizeinbytes': 1, 'default': 0xff }) self.__field_speeddial.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_speeddial=UINT(**{'sizeinbytes': 1, 'default': 0xff }) self.__field_speeddial.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_speeddial(self): try: self.__field_speeddial except: self.__field_speeddial=UINT(**{'sizeinbytes': 1, 'default': 0xff }) return self.__field_speeddial.getvalue() def __setfield_speeddial(self, value): if isinstance(value,UINT): self.__field_speeddial=value else: self.__field_speeddial=UINT(value,**{'sizeinbytes': 1, 'default': 0xff }) def __delfield_speeddial(self): del self.__field_speeddial speeddial=property(__getfield_speeddial, __setfield_speeddial, __delfield_speeddial, None) def iscontainer(self): return True def containerelements(self): yield ('speeddial', self.__field_speeddial, None) class _gen_p_lglx570_105(BaseProtogenClass): 'Anonymous inner class' __fields=['numbertype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglx570_105,self).__init__(**dict) if self.__class__ is _gen_p_lglx570_105: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglx570_105,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglx570_105,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_numbertype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numbertype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numbertype=UINT(**{'sizeinbytes': 1}) self.__field_numbertype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numbertype(self): return self.__field_numbertype.getvalue() def __setfield_numbertype(self, value): if isinstance(value,UINT): self.__field_numbertype=value else: self.__field_numbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_numbertype(self): del self.__field_numbertype numbertype=property(__getfield_numbertype, __setfield_numbertype, __delfield_numbertype, None) def iscontainer(self): return True def containerelements(self): yield ('numbertype', self.__field_numbertype, None) class _gen_p_lglx570_107(BaseProtogenClass): 'Anonymous inner class' __fields=['number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglx570_107,self).__init__(**dict) if self.__class__ is _gen_p_lglx570_107: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglx570_107,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglx570_107,kwargs) if len(args): dict2={'sizeinbytes': 49, 'raiseonunterminatedread': False} dict2.update(kwargs) kwargs=dict2 self.__field_number=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('number', self.__field_number, None) class pbgroup(BaseProtogenClass): "A single group" __fields=['header', 'blocksize', 'dunno2', 'groupid', 'dunno3', 'name'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroup,self).__init__(**dict) if self.__class__ is pbgroup: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroup,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroup,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) if self.valid: self.__field_blocksize.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_groupid.writetobuffer(buf) self.__field_dunno3.writetobuffer(buf) self.__field_name.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=UINT(**{'sizeinbytes': 2}) self.__field_header.readfrombuffer(buf) if self.valid: self.__field_blocksize=UINT(**{'sizeinbytes': 2}) self.__field_blocksize.readfrombuffer(buf) self.__field_dunno2=DATA(**{'sizeinbytes': 9}) self.__field_dunno2.readfrombuffer(buf) self.__field_groupid=UINT(**{'sizeinbytes': 2}) self.__field_groupid.readfrombuffer(buf) self.__field_dunno3=DATA(**{'sizeinbytes': 16}) self.__field_dunno3.readfrombuffer(buf) self.__field_name=USTRING(**{ 'encoding': PHONE_ENCODING, 'sizeinbytes': self.namesize }) self.__field_name.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,UINT): self.__field_header=value else: self.__field_header=UINT(value,**{'sizeinbytes': 2}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_blocksize(self): return self.__field_blocksize.getvalue() def __setfield_blocksize(self, value): if isinstance(value,UINT): self.__field_blocksize=value else: self.__field_blocksize=UINT(value,**{'sizeinbytes': 2}) def __delfield_blocksize(self): del self.__field_blocksize blocksize=property(__getfield_blocksize, __setfield_blocksize, __delfield_blocksize, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,DATA): self.__field_dunno2=value else: self.__field_dunno2=DATA(value,**{'sizeinbytes': 9}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_groupid(self): return self.__field_groupid.getvalue() def __setfield_groupid(self, value): if isinstance(value,UINT): self.__field_groupid=value else: self.__field_groupid=UINT(value,**{'sizeinbytes': 2}) def __delfield_groupid(self): del self.__field_groupid groupid=property(__getfield_groupid, __setfield_groupid, __delfield_groupid, None) def __getfield_dunno3(self): return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,DATA): self.__field_dunno3=value else: self.__field_dunno3=DATA(value,**{'sizeinbytes': 16}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{ 'encoding': PHONE_ENCODING, 'sizeinbytes': self.namesize }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) if self.valid: yield ('blocksize', self.__field_blocksize, None) yield ('dunno2', self.__field_dunno2, None) yield ('groupid', self.__field_groupid, None) yield ('dunno3', self.__field_dunno3, None) yield ('name', self.__field_name, None) def _getnamesize(self): # Return the length of the name, the size of data block must be on a # 4-byte word boundary _rem4=self.blocksize%4 if _rem4: return self.blocksize+4-_rem4-27 else: return self.blocksize-27 namesize=property(fget=_getnamesize) def _getvalid(self): return self.header!=0xffff valid=property(fget=_getvalid) class pbgroups(BaseProtogenClass): "Phonebook groups" __fields=['groups'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbgroups,self).__init__(**dict) if self.__class__ is pbgroups: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbgroups,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbgroups,kwargs) if len(args): dict2={'elementclass': pbgroup} dict2.update(kwargs) kwargs=dict2 self.__field_groups=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_groups=LIST(**{'elementclass': pbgroup}) self.__field_groups.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_groups(self): try: self.__field_groups except: self.__field_groups=LIST(**{'elementclass': pbgroup}) return self.__field_groups.getvalue() def __setfield_groups(self, value): if isinstance(value,LIST): self.__field_groups=value else: self.__field_groups=LIST(value,**{'elementclass': pbgroup}) def __delfield_groups(self): del self.__field_groups groups=property(__getfield_groups, __setfield_groups, __delfield_groups, None) def iscontainer(self): return True def containerelements(self): yield ('groups', self.__field_groups, None) class textmemo(BaseProtogenClass): __fields=['text'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemo,self).__init__(**dict) if self.__class__ is textmemo: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemo,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemo,kwargs) if len(args): dict2={'sizeinbytes': 1001, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False } dict2.update(kwargs) kwargs=dict2 self.__field_text=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_text.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_text=USTRING(**{'sizeinbytes': 1001, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) self.__field_text.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_text(self): return self.__field_text.getvalue() def __setfield_text(self, value): if isinstance(value,USTRING): self.__field_text=value else: self.__field_text=USTRING(value,**{'sizeinbytes': 1001, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False, 'raiseontruncate': False }) def __delfield_text(self): del self.__field_text text=property(__getfield_text, __setfield_text, __delfield_text, None) def iscontainer(self): return True def containerelements(self): yield ('text', self.__field_text, None) class textmemofile(BaseProtogenClass): __fields=['itemcount', 'items'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(textmemofile,self).__init__(**dict) if self.__class__ is textmemofile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(textmemofile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(textmemofile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_itemcount.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_itemcount=UINT(**{'sizeinbytes': 4}) self.__field_itemcount.readfrombuffer(buf) self.__field_items=LIST(**{ 'elementclass': textmemo }) self.__field_items.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_itemcount(self): return self.__field_itemcount.getvalue() def __setfield_itemcount(self, value): if isinstance(value,UINT): self.__field_itemcount=value else: self.__field_itemcount=UINT(value,**{'sizeinbytes': 4}) def __delfield_itemcount(self): del self.__field_itemcount itemcount=property(__getfield_itemcount, __setfield_itemcount, __delfield_itemcount, None) def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{ 'elementclass': textmemo }) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{ 'elementclass': textmemo }) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def iscontainer(self): return True def containerelements(self): yield ('itemcount', self.__field_itemcount, None) yield ('items', self.__field_items, None) class recipient_record(BaseProtogenClass): __fields=['unknown1', 'name', 'number', 'status', 'unknown3', 'time', 'unknown2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(recipient_record,self).__init__(**dict) if self.__class__ is recipient_record: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(recipient_record,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(recipient_record,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_number.writetobuffer(buf) self.__field_status.writetobuffer(buf) self.__field_unknown3.writetobuffer(buf) self.__field_time.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UINT(**{'sizeinbytes': 8}) self.__field_unknown1.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 73}) self.__field_number.readfrombuffer(buf) self.__field_status=UINT(**{'sizeinbytes': 1}) self.__field_status.readfrombuffer(buf) self.__field_unknown3=UINT(**{'sizeinbytes': 1}) self.__field_unknown3.readfrombuffer(buf) self.__field_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_time.readfrombuffer(buf) self.__field_unknown2=DATA(**{'sizeinbytes': 12}) self.__field_unknown2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 8}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 33, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_number(self): return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 73}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def __getfield_status(self): return self.__field_status.getvalue() def __setfield_status(self, value): if isinstance(value,UINT): self.__field_status=value else: self.__field_status=UINT(value,**{'sizeinbytes': 1}) def __delfield_status(self): del self.__field_status status=property(__getfield_status, __setfield_status, __delfield_status, None) def __getfield_unknown3(self): return self.__field_unknown3.getvalue() def __setfield_unknown3(self, value): if isinstance(value,UINT): self.__field_unknown3=value else: self.__field_unknown3=UINT(value,**{'sizeinbytes': 1}) def __delfield_unknown3(self): del self.__field_unknown3 unknown3=property(__getfield_unknown3, __setfield_unknown3, __delfield_unknown3, None) def __getfield_time(self): return self.__field_time.getvalue() def __setfield_time(self, value): if isinstance(value,LGCALDATE): self.__field_time=value else: self.__field_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_time(self): del self.__field_time time=property(__getfield_time, __setfield_time, __delfield_time, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,DATA): self.__field_unknown2=value else: self.__field_unknown2=DATA(value,**{'sizeinbytes': 12}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('name', self.__field_name, None) yield ('number', self.__field_number, None) yield ('status', self.__field_status, None) yield ('unknown3', self.__field_unknown3, None) yield ('time', self.__field_time, None) yield ('unknown2', self.__field_unknown2, None) class sms_out(BaseProtogenClass): __fields=['index', 'locked', 'unknown1', 'timesent', 'dunno1', 'saved', 'dunno2', 'priority', 'dunno2', 'callback', 'msg', 'recipients'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_out,self).__init__(**dict) if self.__class__ is sms_out: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_out,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_out,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown1.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_saved.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_priority.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_msg.writetobuffer(buf) try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record, 'length': 10}) self.__field_recipients.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 4}) self.__field_index.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown1=UINT(**{'sizeinbytes': 3}) self.__field_unknown1.readfrombuffer(buf) self.__field_timesent=LGCALDATE(**{'sizeinbytes': 4}) self.__field_timesent.readfrombuffer(buf) self.__field_dunno1=DATA(**{'sizeinbytes': 2}) self.__field_dunno1.readfrombuffer(buf) self.__field_saved=UINT(**{'sizeinbytes': 1}) self.__field_saved.readfrombuffer(buf) self.__field_dunno2=DATA(**{'sizeinbytes': 5}) self.__field_dunno2.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_dunno2=DATA(**{'sizeinbytes': 15}) self.__field_dunno2.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 20}) self.__field_callback.readfrombuffer(buf) self.__field_msg=USTRING(**{'sizeinbytes': 160, 'encoding': PHONE_ENCODING}) self.__field_msg.readfrombuffer(buf) self.__field_recipients=LIST(**{'elementclass': recipient_record, 'length': 10}) self.__field_recipients.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 4}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,LGCALDATE): self.__field_timesent=value else: self.__field_timesent=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,DATA): self.__field_dunno1=value else: self.__field_dunno1=DATA(value,**{'sizeinbytes': 2}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_saved(self): return self.__field_saved.getvalue() def __setfield_saved(self, value): if isinstance(value,UINT): self.__field_saved=value else: self.__field_saved=UINT(value,**{'sizeinbytes': 1}) def __delfield_saved(self): del self.__field_saved saved=property(__getfield_saved, __setfield_saved, __delfield_saved, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,DATA): self.__field_dunno2=value else: self.__field_dunno2=DATA(value,**{'sizeinbytes': 5}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, "0=normal, 1=urgent") def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,DATA): self.__field_dunno2=value else: self.__field_dunno2=DATA(value,**{'sizeinbytes': 15}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 20}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_msg(self): return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{'sizeinbytes': 160, 'encoding': PHONE_ENCODING}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def __getfield_recipients(self): try: self.__field_recipients except: self.__field_recipients=LIST(**{'elementclass': recipient_record, 'length': 10}) return self.__field_recipients.getvalue() def __setfield_recipients(self, value): if isinstance(value,LIST): self.__field_recipients=value else: self.__field_recipients=LIST(value,**{'elementclass': recipient_record, 'length': 10}) def __delfield_recipients(self): del self.__field_recipients recipients=property(__getfield_recipients, __setfield_recipients, __delfield_recipients, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('locked', self.__field_locked, None) yield ('unknown1', self.__field_unknown1, None) yield ('timesent', self.__field_timesent, None) yield ('dunno1', self.__field_dunno1, None) yield ('saved', self.__field_saved, None) yield ('dunno2', self.__field_dunno2, None) yield ('priority', self.__field_priority, "0=normal, 1=urgent") yield ('dunno2', self.__field_dunno2, None) yield ('callback', self.__field_callback, None) yield ('msg', self.__field_msg, None) yield ('recipients', self.__field_recipients, None) class SMSINBOXMSGFRAGMENT(BaseProtogenClass): __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(SMSINBOXMSGFRAGMENT,self).__init__(**dict) if self.__class__ is SMSINBOXMSGFRAGMENT: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(SMSINBOXMSGFRAGMENT,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(SMSINBOXMSGFRAGMENT,kwargs) if len(args): dict2={'elementclass': _gen_p_lglx570_191, 'length': 181} dict2.update(kwargs) kwargs=dict2 self.__field_msg=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lglx570_191, 'length': 181}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=LIST(**{'elementclass': _gen_p_lglx570_191, 'length': 181}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=LIST(**{'elementclass': _gen_p_lglx570_191, 'length': 181}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,LIST): self.__field_msg=value else: self.__field_msg=LIST(value,**{'elementclass': _gen_p_lglx570_191, 'length': 181}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class _gen_p_lglx570_191(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglx570_191,self).__init__(**dict) if self.__class__ is _gen_p_lglx570_191: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglx570_191,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglx570_191,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of message") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of message") class sms_in(BaseProtogenClass): __fields=['unknown1', 'msg_index2', 'unknown2', 'timesent', 'unknown', 'callback_length', 'callback', 'sender_length', 'sender', 'unknown4', 'lg_time', 'GPStime', 'dunno1', 'read', 'locked', 'unknown5', 'subject', 'msglength', 'msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_in,self).__init__(**dict) if self.__class__ is sms_in: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_in,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_in,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown1.writetobuffer(buf) self.__field_msg_index2.writetobuffer(buf) self.__field_unknown2.writetobuffer(buf) self.__field_timesent.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self.__field_callback_length.writetobuffer(buf) self.__field_callback.writetobuffer(buf) self.__field_sender_length.writetobuffer(buf) try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lglx570_203, 'length': 38}) self.__field_sender.writetobuffer(buf) self.__field_unknown4.writetobuffer(buf) self.__field_lg_time.writetobuffer(buf) self.__field_GPStime.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_read.writetobuffer(buf) self.__field_locked.writetobuffer(buf) self.__field_unknown5.writetobuffer(buf) self.__field_subject.writetobuffer(buf) self.__field_msglength.writetobuffer(buf) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown1=UINT(**{'sizeinbytes': 4}) self.__field_unknown1.readfrombuffer(buf) self.__field_msg_index2=UINT(**{'sizeinbytes': 4}) self.__field_msg_index2.readfrombuffer(buf) self.__field_unknown2=UINT(**{'sizeinbytes': 2}) self.__field_unknown2.readfrombuffer(buf) self.__field_timesent=SMSDATE(**{'sizeinbytes': 6}) self.__field_timesent.readfrombuffer(buf) self.__field_unknown=UINT(**{'sizeinbytes': 3}) self.__field_unknown.readfrombuffer(buf) self.__field_callback_length=UINT(**{'sizeinbytes': 1}) self.__field_callback_length.readfrombuffer(buf) self.__field_callback=USTRING(**{'sizeinbytes': 42}) self.__field_callback.readfrombuffer(buf) self.__field_sender_length=UINT(**{'sizeinbytes': 1}) self.__field_sender_length.readfrombuffer(buf) self.__field_sender=LIST(**{'elementclass': _gen_p_lglx570_203, 'length': 38}) self.__field_sender.readfrombuffer(buf) self.__field_unknown4=DATA(**{'sizeinbytes': 15}) self.__field_unknown4.readfrombuffer(buf) self.__field_lg_time=LGCALDATE(**{'sizeinbytes': 4}) self.__field_lg_time.readfrombuffer(buf) self.__field_GPStime=GPSDATE(**{'sizeinbytes': 4}) self.__field_GPStime.readfrombuffer(buf) self.__field_dunno1=DATA(**{'sizeinbytes': 5}) self.__field_dunno1.readfrombuffer(buf) self.__field_read=UINT(**{'sizeinbytes': 1}) self.__field_read.readfrombuffer(buf) self.__field_locked=UINT(**{'sizeinbytes': 1}) self.__field_locked.readfrombuffer(buf) self.__field_unknown5=DATA(**{'sizeinbytes': 7}) self.__field_unknown5.readfrombuffer(buf) self.__field_subject=USTRING(**{'sizeinbytes': 74, 'encoding': PHONE_ENCODING}) self.__field_subject.readfrombuffer(buf) self.__field_msglength=UINT(**{'sizeinbytes': 2}) self.__field_msglength.readfrombuffer(buf) self.__field_msg=USTRING(**{'sizeinbytes': 1030, 'encoding': PHONE_ENCODING}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown1(self): return self.__field_unknown1.getvalue() def __setfield_unknown1(self, value): if isinstance(value,UINT): self.__field_unknown1=value else: self.__field_unknown1=UINT(value,**{'sizeinbytes': 4}) def __delfield_unknown1(self): del self.__field_unknown1 unknown1=property(__getfield_unknown1, __setfield_unknown1, __delfield_unknown1, None) def __getfield_msg_index2(self): return self.__field_msg_index2.getvalue() def __setfield_msg_index2(self, value): if isinstance(value,UINT): self.__field_msg_index2=value else: self.__field_msg_index2=UINT(value,**{'sizeinbytes': 4}) def __delfield_msg_index2(self): del self.__field_msg_index2 msg_index2=property(__getfield_msg_index2, __setfield_msg_index2, __delfield_msg_index2, None) def __getfield_unknown2(self): return self.__field_unknown2.getvalue() def __setfield_unknown2(self, value): if isinstance(value,UINT): self.__field_unknown2=value else: self.__field_unknown2=UINT(value,**{'sizeinbytes': 2}) def __delfield_unknown2(self): del self.__field_unknown2 unknown2=property(__getfield_unknown2, __setfield_unknown2, __delfield_unknown2, None) def __getfield_timesent(self): return self.__field_timesent.getvalue() def __setfield_timesent(self, value): if isinstance(value,SMSDATE): self.__field_timesent=value else: self.__field_timesent=SMSDATE(value,**{'sizeinbytes': 6}) def __delfield_timesent(self): del self.__field_timesent timesent=property(__getfield_timesent, __setfield_timesent, __delfield_timesent, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UINT): self.__field_unknown=value else: self.__field_unknown=UINT(value,**{'sizeinbytes': 3}) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def __getfield_callback_length(self): return self.__field_callback_length.getvalue() def __setfield_callback_length(self, value): if isinstance(value,UINT): self.__field_callback_length=value else: self.__field_callback_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_callback_length(self): del self.__field_callback_length callback_length=property(__getfield_callback_length, __setfield_callback_length, __delfield_callback_length, None) def __getfield_callback(self): return self.__field_callback.getvalue() def __setfield_callback(self, value): if isinstance(value,USTRING): self.__field_callback=value else: self.__field_callback=USTRING(value,**{'sizeinbytes': 42}) def __delfield_callback(self): del self.__field_callback callback=property(__getfield_callback, __setfield_callback, __delfield_callback, None) def __getfield_sender_length(self): return self.__field_sender_length.getvalue() def __setfield_sender_length(self, value): if isinstance(value,UINT): self.__field_sender_length=value else: self.__field_sender_length=UINT(value,**{'sizeinbytes': 1}) def __delfield_sender_length(self): del self.__field_sender_length sender_length=property(__getfield_sender_length, __setfield_sender_length, __delfield_sender_length, None) def __getfield_sender(self): try: self.__field_sender except: self.__field_sender=LIST(**{'elementclass': _gen_p_lglx570_203, 'length': 38}) return self.__field_sender.getvalue() def __setfield_sender(self, value): if isinstance(value,LIST): self.__field_sender=value else: self.__field_sender=LIST(value,**{'elementclass': _gen_p_lglx570_203, 'length': 38}) def __delfield_sender(self): del self.__field_sender sender=property(__getfield_sender, __setfield_sender, __delfield_sender, None) def __getfield_unknown4(self): return self.__field_unknown4.getvalue() def __setfield_unknown4(self, value): if isinstance(value,DATA): self.__field_unknown4=value else: self.__field_unknown4=DATA(value,**{'sizeinbytes': 15}) def __delfield_unknown4(self): del self.__field_unknown4 unknown4=property(__getfield_unknown4, __setfield_unknown4, __delfield_unknown4, None) def __getfield_lg_time(self): return self.__field_lg_time.getvalue() def __setfield_lg_time(self, value): if isinstance(value,LGCALDATE): self.__field_lg_time=value else: self.__field_lg_time=LGCALDATE(value,**{'sizeinbytes': 4}) def __delfield_lg_time(self): del self.__field_lg_time lg_time=property(__getfield_lg_time, __setfield_lg_time, __delfield_lg_time, None) def __getfield_GPStime(self): return self.__field_GPStime.getvalue() def __setfield_GPStime(self, value): if isinstance(value,GPSDATE): self.__field_GPStime=value else: self.__field_GPStime=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_GPStime(self): del self.__field_GPStime GPStime=property(__getfield_GPStime, __setfield_GPStime, __delfield_GPStime, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,DATA): self.__field_dunno1=value else: self.__field_dunno1=DATA(value,**{'sizeinbytes': 5}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_read(self): return self.__field_read.getvalue() def __setfield_read(self, value): if isinstance(value,UINT): self.__field_read=value else: self.__field_read=UINT(value,**{'sizeinbytes': 1}) def __delfield_read(self): del self.__field_read read=property(__getfield_read, __setfield_read, __delfield_read, None) def __getfield_locked(self): return self.__field_locked.getvalue() def __setfield_locked(self, value): if isinstance(value,UINT): self.__field_locked=value else: self.__field_locked=UINT(value,**{'sizeinbytes': 1}) def __delfield_locked(self): del self.__field_locked locked=property(__getfield_locked, __setfield_locked, __delfield_locked, None) def __getfield_unknown5(self): return self.__field_unknown5.getvalue() def __setfield_unknown5(self, value): if isinstance(value,DATA): self.__field_unknown5=value else: self.__field_unknown5=DATA(value,**{'sizeinbytes': 7}) def __delfield_unknown5(self): del self.__field_unknown5 unknown5=property(__getfield_unknown5, __setfield_unknown5, __delfield_unknown5, None) def __getfield_subject(self): return self.__field_subject.getvalue() def __setfield_subject(self, value): if isinstance(value,USTRING): self.__field_subject=value else: self.__field_subject=USTRING(value,**{'sizeinbytes': 74, 'encoding': PHONE_ENCODING}) def __delfield_subject(self): del self.__field_subject subject=property(__getfield_subject, __setfield_subject, __delfield_subject, None) def __getfield_msglength(self): return self.__field_msglength.getvalue() def __setfield_msglength(self, value): if isinstance(value,UINT): self.__field_msglength=value else: self.__field_msglength=UINT(value,**{'sizeinbytes': 2}) def __delfield_msglength(self): del self.__field_msglength msglength=property(__getfield_msglength, __setfield_msglength, __delfield_msglength, None) def __getfield_msg(self): return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{'sizeinbytes': 1030, 'encoding': PHONE_ENCODING}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('unknown1', self.__field_unknown1, None) yield ('msg_index2', self.__field_msg_index2, None) yield ('unknown2', self.__field_unknown2, None) yield ('timesent', self.__field_timesent, None) yield ('unknown', self.__field_unknown, None) yield ('callback_length', self.__field_callback_length, None) yield ('callback', self.__field_callback, None) yield ('sender_length', self.__field_sender_length, None) yield ('sender', self.__field_sender, None) yield ('unknown4', self.__field_unknown4, None) yield ('lg_time', self.__field_lg_time, None) yield ('GPStime', self.__field_GPStime, None) yield ('dunno1', self.__field_dunno1, None) yield ('read', self.__field_read, None) yield ('locked', self.__field_locked, None) yield ('unknown5', self.__field_unknown5, None) yield ('subject', self.__field_subject, None) yield ('msglength', self.__field_msglength, None) yield ('msg', self.__field_msg, None) class _gen_p_lglx570_203(BaseProtogenClass): 'Anonymous inner class' __fields=['byte'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_lglx570_203,self).__init__(**dict) if self.__class__ is _gen_p_lglx570_203: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_lglx570_203,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_lglx570_203,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_byte=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_byte.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_byte=UINT(**{'sizeinbytes': 1}) self.__field_byte.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_byte(self): return self.__field_byte.getvalue() def __setfield_byte(self, value): if isinstance(value,UINT): self.__field_byte=value else: self.__field_byte=UINT(value,**{'sizeinbytes': 1}) def __delfield_byte(self): del self.__field_byte byte=property(__getfield_byte, __setfield_byte, __delfield_byte, "individual byte of senders phone number") def iscontainer(self): return True def containerelements(self): yield ('byte', self.__field_byte, "individual byte of senders phone number") class sms_quick_text(BaseProtogenClass): __fields=['msg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_quick_text,self).__init__(**dict) if self.__class__ is sms_quick_text: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_quick_text,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_quick_text,kwargs) if len(args): dict2={'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""} dict2.update(kwargs) kwargs=dict2 self.__field_msg=USTRING(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_msg except: self.__field_msg=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) self.__field_msg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_msg=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) self.__field_msg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_msg(self): try: self.__field_msg except: self.__field_msg=USTRING(**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) return self.__field_msg.getvalue() def __setfield_msg(self, value): if isinstance(value,USTRING): self.__field_msg=value else: self.__field_msg=USTRING(value,**{'sizeinbytes': 101, 'encoding': PHONE_ENCODING, 'default': ""}) def __delfield_msg(self): del self.__field_msg msg=property(__getfield_msg, __setfield_msg, __delfield_msg, None) def iscontainer(self): return True def containerelements(self): yield ('msg', self.__field_msg, None) class sms_canned_file(BaseProtogenClass): __fields=['num_active', 'msgs'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sms_canned_file,self).__init__(**dict) if self.__class__ is sms_canned_file: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sms_canned_file,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sms_canned_file,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_num_active except: self.__field_num_active=UINT(**{'sizeinbytes': 2, 'default': len(self.msgs) }) self.__field_num_active.writetobuffer(buf) try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True, 'elementclass': sms_quick_text}) self.__field_msgs.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_num_active=UINT(**{'sizeinbytes': 2, 'default': len(self.msgs) }) self.__field_num_active.readfrombuffer(buf) self.__field_msgs=LIST(**{'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True, 'elementclass': sms_quick_text}) self.__field_msgs.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_num_active(self): try: self.__field_num_active except: self.__field_num_active=UINT(**{'sizeinbytes': 2, 'default': len(self.msgs) }) return self.__field_num_active.getvalue() def __setfield_num_active(self, value): if isinstance(value,UINT): self.__field_num_active=value else: self.__field_num_active=UINT(value,**{'sizeinbytes': 2, 'default': len(self.msgs) }) def __delfield_num_active(self): del self.__field_num_active num_active=property(__getfield_num_active, __setfield_num_active, __delfield_num_active, None) def __getfield_msgs(self): try: self.__field_msgs except: self.__field_msgs=LIST(**{'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True, 'elementclass': sms_quick_text}) return self.__field_msgs.getvalue() def __setfield_msgs(self, value): if isinstance(value,LIST): self.__field_msgs=value else: self.__field_msgs=LIST(value,**{'length': SMS_CANNED_MAX_ITEMS, 'createdefault': True, 'elementclass': sms_quick_text}) def __delfield_msgs(self): del self.__field_msgs msgs=property(__getfield_msgs, __setfield_msgs, __delfield_msgs, None) def iscontainer(self): return True def containerelements(self): yield ('num_active', self.__field_num_active, None) yield ('msgs', self.__field_msgs, None) bitpim-1.0.7+dfsg1/src/phones/com_samsungschu470.py0000644001616600161660000001745311321251753020247 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_samsungschu470.py 4777 2010-01-07 03:24:27Z djpham $ """Communicate with the Samsung SCH-U470 (Juke) Phone""" import common import com_samsungschu740 as u740 import p_samsungschu470 as p_u470 import helpids parentphone=u740.Phone class Phone(parentphone): desc='SCH-U470' helpid=helpids.ID_PHONE_SAMSUNGSCHU470 protocolclass=p_u470 serialsname='schu470' ringtone_noring_range='range_tones_preloaded_el_no_rings' ringtone_default_range='range_tones_preloaded_el_01' builtin_ringtones={ 'VZW Default Tone': ringtone_default_range, 'Bell 1': 'range_tones_preloaded_el_02', 'Bell 2': 'range_tones_preloaded_el_03', 'Bell 3': 'range_tones_preloaded_el_04', 'Melody 1': 'range_tones_preloaded_el_05', 'Melody 2': 'range_tones_preloaded_el_06', 'Melody 3': 'range_tones_preloaded_el_07', 'Melody 4': 'range_tones_preloaded_el_08', 'Melody 5': 'range_tones_preloaded_el_09', 'Melody 6': 'range_tones_preloaded_el_10', 'Beep Once': 'range_tones_preloaded_el_11', 'No Ring': ringtone_noring_range, } # can we use Sounds as ringtones? builtin_sounds={} ## builtin_sounds={ ## 'Clapping': 'range_sound_preloaded_el_clapping', ## 'Crowd Roar': 'range_sound_preloaded_el_crowed_roar', ## 'Happy Birthday': 'range_sound_preloaded_el_birthday', ## 'Rainforest': 'range_sound_preloaded_el_rainforest', ## 'Train': 'range_sound_preloaded_el_train', ## # same as ringtones ?? ## 'Sound Beep Once': 'range_sound_preloaded_el_beep_once', ## 'Sound No Ring': 'range_sound_preloaded_el_no_rings', ## } builtin_wallpapers={ 'Preloaded1': 'range_f_wallpaper_preloaded_el_01', 'Preloaded2': 'range_f_wallpaper_preloaded_el_02', 'Preloaded3': 'range_f_wallpaper_preloaded_el_03', 'Preloaded4': 'range_f_wallpaper_preloaded_el_04', 'Preloaded5': 'range_f_wallpaper_preloaded_el_05', } builtin_groups={ 1: 'Business', 2: 'Colleague', 3: 'Family', 4: 'Friends' } my_model='SCH-U470/Juke' my_manufacturer='SAMSUNG' detected_model='U470' def __init__(self, logtarget, commport): "Calls all the constructors and sets initial modes" parentphone.__init__(self, logtarget, commport) global PBEntry self.pbentryclass=PBEntry def _read_ringtone_range(self, fundamentals): fundamentals['ringtone-range']={} def get_ringtone_range(self, name, fundamentals): if not name: # return No Rings return self.ringtone_default_range # check the builtin ringtones if self.builtin_ringtones.has_key(name): return self.builtin_ringtones[name] if self.builtin_sounds.has_key(name): return self.builtin_sounds[name] # check for custom ringtones, # this model does not use ranges for custom ringtones, just straight # file names instead. _rt_index=fundamentals.get('ringtone-index', {}) for _entry in _rt_index.values(): if _entry['name']==name: _filename=_entry.get('filename', None) if _filename: return '/ff/'+_filename def ringtone_name_from_range(self, range, fundamentals): # check for builtin ringtones for _key,_value in self.builtin_ringtones.items(): if range==_value: return _key # check for builtin sounds for _key,_value in self.builtin_sounds.items(): if range==_value: return _key # now check for the "custom" ones # Again, this model does not use ringtone ranges, just filename if range.startswith('/ff/'): return common.basename(range) # Wallpaper stuff----------------------------------------------------------- def _get_file_wallpaper_index(self, idx, result, path, origin): for _filename in self.listfiles(path): result[idx]={ 'name': self.basename(_filename), 'filename': _filename, 'origin': origin } idx+=1 return idx def get_wallpaper_index(self): _res={} _idx=self._get_builtin_wallpaper_index(0, _res) _idx=self._get_file_wallpaper_index(_idx, _res, self.protocolclass.PIC_PATH, 'images') return _res def savewallpapers(self, fundamentals, merge): # send wallpapers to the phone """Save wallpapers to the phone""" self.log('Writing wallpapers to the phone') try: _del_list, _new_list=self._get_del_new_list('wallpaper-index', 'wallpapers', merge, fundamentals, frozenset(['video'])) if __debug__: self.log('Delete list: '+','.join(_del_list)) self.log('New list: '+','.join(_new_list)) self._add_files('wallpaper-index', 'wallpapers', _new_list, fundamentals) fundamentals['rebootphone']=True except: if __debug__: raise return fundamentals # CalendarEntry class----------------------------------------------------------- parentcalendarentry=u740.CalendarEntry class CalendarEntry(parentcalendarentry): pass # PBEntry class----------------------------------------------------------------- parentpbentry=u740.PBEntry class PBEntry(parentpbentry): def _extract_ringtone(self, entry, p_class): if self.pb.has_ringtone and \ self.pb.ringtone: if self.pb.ringtone.startswith('/ff/'): # user's ringtone _ringtone=common.basename(self.pb.ringtone) else: # built-in ringtone _ringtone=self.phone.ringtone_name_from_range( self.pb.ringtone, self.fundamentals) if _ringtone: entry['ringtones']=[{ 'ringtone': _ringtone, 'use': 'call' }] def getvalue(self): _entry=parentpbentry.getvalue(self) self._extract_ringtone(_entry, self.phone.protocolclass) return _entry # Profile class----------------------------------------------------------------- parentprofile=u740.Profile class Profile(parentprofile): serialsname=Phone.serialsname WALLPAPER_WIDTH=176 WALLPAPER_HEIGHT=220 autodetect_delay=3 usbids=( ( 0x04e8, 0x6640, 2),) deviceclasses=("serial",) BP_Calendar_Version=3 # For phone detection phone_manufacturer=Phone.my_manufacturer phone_model=Phone.my_model # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 128, 'height': 164, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid", {'width': 112, 'height': 84, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "fullscreen", {'width': 128, 'height': 220, 'format': "JPEG"})) imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) bitpim-1.0.7+dfsg1/src/phones/p_samsungsphm300.py0000644001616600161660000035763010723637410017734 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE # Text in this block is placed in the output file from prototypes import * from prototypes_samsung import * from p_samsung_packet import * NUMPHONENUMBERS=5 NUMPHONEBOOKENTRIES=300 NUMGROUPS=5 MAXNUMBERLEN=32 NUMMEMOENTRIES=9 NUMTODOENTRIES=9 NUMCALENDAREVENTS=70 NUMSMSINENTRIES=211 max_pb_slots=312 max_pb_entries=312 user_pb_entry_range=xrange(1, 301) max_number_entries=312 max_media_index_entries=302 max_group_entries=6 slot_file_name='nvm/nvm/pclink_tbl' pb_file_name='nvm/nvm/dial_tbl' number_file_name='nvm/nvm/dial' ringer_index_file_name='nvm/nvm/name_ring' wallpaper_index_file_name='nvm/nvm/avatar' group_file_name='nvm/nvm/group' camera_dir='cam/jpeg' savedtophone_dir='cam/dldJpeg' camera_index=100 # starting media index for camera images camera_origin='camera-fullsize' savedtophone_index=200 # starting media index for saved-to-phone images savedtophone_origin='camera' ams_index=300 # starting media index for AmsRegistry items # Number type CELLTYPE=1 HOMETYPE=2 WORKTYPE=3 PAGERTYPE=4 OTHERTYPE=5 MAILTYPE=7 URLTYPE=8 # map all UINT fields to lsb version UINT=UINTlsb BOOL=BOOLlsb AMSREGISTRY="ams/AmsRegistry" ENDTRANSACTION="ams/EndTransaction" RINGERPREFIX="ams/Ringers/cnts" WALLPAPERPREFIX="ams/Screen Savers/cnts" FILETYPE_RINGER=12 FILETYPE_WALLPAPER=13 FILETYPE_APP=16 exts={ 'audio/vnd.qcelp': '.qcp', 'audio/midi': '.mid', 'application/x-pmd': '.pmd', 'audio/mpeg': '.mp3', 'image/jpeg': '.jpeg', 'image/png': '.png', 'image/gif': '.gif', 'image/bmp': '.bmp', } origins={ FILETYPE_RINGER: 'ringers', FILETYPE_WALLPAPER: 'images', } class groupnameentry(BaseProtogenClass): __fields=['gid', 'groupname', 'ringtone', 'dunno2', 'timestamp'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(groupnameentry,self).__init__(**dict) if self.__class__ is groupnameentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(groupnameentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(groupnameentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_gid.writetobuffer(buf) self.__field_groupname.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_timestamp.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_gid=CSVINT() self.__field_gid.readfrombuffer(buf) self.__field_groupname=CSVSTRING() self.__field_groupname.readfrombuffer(buf) self.__field_ringtone=CSVINT() self.__field_ringtone.readfrombuffer(buf) self.__field_dunno2=CSVSTRING(**{'quotechar': None}) self.__field_dunno2.readfrombuffer(buf) self.__field_timestamp=CSVTIME(**{'terminator': None}) self.__field_timestamp.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_gid(self): return self.__field_gid.getvalue() def __setfield_gid(self, value): if isinstance(value,CSVINT): self.__field_gid=value else: self.__field_gid=CSVINT(value,) def __delfield_gid(self): del self.__field_gid gid=property(__getfield_gid, __setfield_gid, __delfield_gid, None) def __getfield_groupname(self): return self.__field_groupname.getvalue() def __setfield_groupname(self, value): if isinstance(value,CSVSTRING): self.__field_groupname=value else: self.__field_groupname=CSVSTRING(value,) def __delfield_groupname(self): del self.__field_groupname groupname=property(__getfield_groupname, __setfield_groupname, __delfield_groupname, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,CSVINT): self.__field_ringtone=value else: self.__field_ringtone=CSVINT(value,) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "Ringtone assignment?") def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,CSVSTRING): self.__field_dunno2=value else: self.__field_dunno2=CSVSTRING(value,**{'quotechar': None}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, "A single character C or S") def __getfield_timestamp(self): return self.__field_timestamp.getvalue() def __setfield_timestamp(self, value): if isinstance(value,CSVTIME): self.__field_timestamp=value else: self.__field_timestamp=CSVTIME(value,**{'terminator': None}) def __delfield_timestamp(self): del self.__field_timestamp timestamp=property(__getfield_timestamp, __setfield_timestamp, __delfield_timestamp, None) def iscontainer(self): return True def containerelements(self): yield ('gid', self.__field_gid, None) yield ('groupname', self.__field_groupname, None) yield ('ringtone', self.__field_ringtone, "Ringtone assignment?") yield ('dunno2', self.__field_dunno2, "A single character C or S") yield ('timestamp', self.__field_timestamp, None) class groupnameresponse(BaseProtogenClass): __fields=['command', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(groupnameresponse,self).__init__(**dict) if self.__class__ is groupnameresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(groupnameresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(groupnameresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '#PBGRR:'}) self.__field_command.readfrombuffer(buf) self.__field_entry=groupnameentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '#PBGRR:'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,groupnameentry): self.__field_entry=value else: self.__field_entry=groupnameentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('entry', self.__field_entry, None) class pbentry(BaseProtogenClass): __fields=['writeflg', 'slot', 'uslot', 'group', 'ringtone', 'name', 'speeddial', 'dunno1', 'numbers', 'extranumber', 'dunno3', 'dunno4', 'email', 'url', 'birthday', 'wallpaper', 'timestamp'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbentry,self).__init__(**dict) if self.__class__ is pbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_writeflg except: self.__field_writeflg=BOOL(**{ 'default': False }) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_uslot.writetobuffer(buf) self.__field_group.writetobuffer(buf) try: self.__field_ringtone except: self.__field_ringtone=CSVINT(**{'default': 20}) self.__field_ringtone.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_speeddial.writetobuffer(buf) try: self.__field_dunno1 except: self.__field_dunno1=CSVINT(**{'default': 0}) self.__field_dunno1.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'length': NUMPHONENUMBERS, 'createdefault': True, 'elementclass': phonenumber}) self.__field_numbers.writetobuffer(buf) if self.writeflg: try: self.__field_extranumber except: self.__field_extranumber=phonenumber() self.__field_extranumber.writetobuffer(buf) try: self.__field_dunno3 except: self.__field_dunno3=CSVSTRING(**{'quotechar': None, 'default': ""}) self.__field_dunno3.writetobuffer(buf) try: self.__field_dunno4 except: self.__field_dunno4=CSVSTRING(**{'quotechar': None, 'default': ""}) self.__field_dunno4.writetobuffer(buf) self.__field_email.writetobuffer(buf) self.__field_url.writetobuffer(buf) try: self.__field_birthday except: self.__field_birthday=CSVSTRING(**{'quotechar': None, 'default': ""}) self.__field_birthday.writetobuffer(buf) try: self.__field_wallpaper except: self.__field_wallpaper=CSVINT(**{'default': 20}) self.__field_wallpaper.writetobuffer(buf) try: self.__field_timestamp except: self.__field_timestamp=CSVTIME(**{'terminator': None, 'default': DateTime.now()+(0,) }) self.__field_timestamp.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=CSVINT() self.__field_slot.readfrombuffer(buf) self.__field_uslot=CSVINT() self.__field_uslot.readfrombuffer(buf) self.__field_group=CSVINT() self.__field_group.readfrombuffer(buf) self.__field_ringtone=CSVINT(**{'default': 20}) self.__field_ringtone.readfrombuffer(buf) self.__field_name=CSVSTRING() self.__field_name.readfrombuffer(buf) self.__field_speeddial=CSVINT() self.__field_speeddial.readfrombuffer(buf) self.__field_dunno1=CSVINT(**{'default': 0}) self.__field_dunno1.readfrombuffer(buf) self.__field_numbers=LIST(**{'length': NUMPHONENUMBERS, 'createdefault': True, 'elementclass': phonenumber}) self.__field_numbers.readfrombuffer(buf) if self.writeflg: self.__field_extranumber=phonenumber() self.__field_extranumber.readfrombuffer(buf) self.__field_dunno3=CSVSTRING(**{'quotechar': None, 'default': ""}) self.__field_dunno3.readfrombuffer(buf) self.__field_dunno4=CSVSTRING(**{'quotechar': None, 'default': ""}) self.__field_dunno4.readfrombuffer(buf) self.__field_email=CSVSTRING() self.__field_email.readfrombuffer(buf) self.__field_url=CSVSTRING() self.__field_url.readfrombuffer(buf) self.__field_birthday=CSVSTRING(**{'quotechar': None, 'default': ""}) self.__field_birthday.readfrombuffer(buf) self.__field_wallpaper=CSVINT(**{'default': 20}) self.__field_wallpaper.readfrombuffer(buf) self.__field_timestamp=CSVTIME(**{'terminator': None, 'default': DateTime.now()+(0,) }) self.__field_timestamp.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_writeflg(self): try: self.__field_writeflg except: self.__field_writeflg=BOOL(**{ 'default': False }) return self.__field_writeflg.getvalue() def __setfield_writeflg(self, value): if isinstance(value,BOOL): self.__field_writeflg=value else: self.__field_writeflg=BOOL(value,**{ 'default': False }) def __delfield_writeflg(self): del self.__field_writeflg writeflg=property(__getfield_writeflg, __setfield_writeflg, __delfield_writeflg, "Set to True when writing to phone") def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,CSVINT): self.__field_slot=value else: self.__field_slot=CSVINT(value,) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, "Internal Slot") def __getfield_uslot(self): return self.__field_uslot.getvalue() def __setfield_uslot(self, value): if isinstance(value,CSVINT): self.__field_uslot=value else: self.__field_uslot=CSVINT(value,) def __delfield_uslot(self): del self.__field_uslot uslot=property(__getfield_uslot, __setfield_uslot, __delfield_uslot, "User Slot, Speed dial") def __getfield_group(self): return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,CSVINT): self.__field_group=value else: self.__field_group=CSVINT(value,) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, None) def __getfield_ringtone(self): try: self.__field_ringtone except: self.__field_ringtone=CSVINT(**{'default': 20}) return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,CSVINT): self.__field_ringtone=value else: self.__field_ringtone=CSVINT(value,**{'default': 20}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,CSVSTRING): self.__field_name=value else: self.__field_name=CSVSTRING(value,) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_speeddial(self): return self.__field_speeddial.getvalue() def __setfield_speeddial(self, value): if isinstance(value,CSVINT): self.__field_speeddial=value else: self.__field_speeddial=CSVINT(value,) def __delfield_speeddial(self): del self.__field_speeddial speeddial=property(__getfield_speeddial, __setfield_speeddial, __delfield_speeddial, "Which phone number assigned to speed dial uslot") def __getfield_dunno1(self): try: self.__field_dunno1 except: self.__field_dunno1=CSVINT(**{'default': 0}) return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,CSVINT): self.__field_dunno1=value else: self.__field_dunno1=CSVINT(value,**{'default': 0}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'length': NUMPHONENUMBERS, 'createdefault': True, 'elementclass': phonenumber}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'length': NUMPHONENUMBERS, 'createdefault': True, 'elementclass': phonenumber}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_extranumber(self): try: self.__field_extranumber except: self.__field_extranumber=phonenumber() return self.__field_extranumber.getvalue() def __setfield_extranumber(self, value): if isinstance(value,phonenumber): self.__field_extranumber=value else: self.__field_extranumber=phonenumber(value,) def __delfield_extranumber(self): del self.__field_extranumber extranumber=property(__getfield_extranumber, __setfield_extranumber, __delfield_extranumber, None) def __getfield_dunno3(self): try: self.__field_dunno3 except: self.__field_dunno3=CSVSTRING(**{'quotechar': None, 'default': ""}) return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,CSVSTRING): self.__field_dunno3=value else: self.__field_dunno3=CSVSTRING(value,**{'quotechar': None, 'default': ""}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_dunno4(self): try: self.__field_dunno4 except: self.__field_dunno4=CSVSTRING(**{'quotechar': None, 'default': ""}) return self.__field_dunno4.getvalue() def __setfield_dunno4(self, value): if isinstance(value,CSVSTRING): self.__field_dunno4=value else: self.__field_dunno4=CSVSTRING(value,**{'quotechar': None, 'default': ""}) def __delfield_dunno4(self): del self.__field_dunno4 dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None) def __getfield_email(self): return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,CSVSTRING): self.__field_email=value else: self.__field_email=CSVSTRING(value,) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def __getfield_url(self): return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,CSVSTRING): self.__field_url=value else: self.__field_url=CSVSTRING(value,) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_birthday(self): try: self.__field_birthday except: self.__field_birthday=CSVSTRING(**{'quotechar': None, 'default': ""}) return self.__field_birthday.getvalue() def __setfield_birthday(self, value): if isinstance(value,CSVSTRING): self.__field_birthday=value else: self.__field_birthday=CSVSTRING(value,**{'quotechar': None, 'default': ""}) def __delfield_birthday(self): del self.__field_birthday birthday=property(__getfield_birthday, __setfield_birthday, __delfield_birthday, None) def __getfield_wallpaper(self): try: self.__field_wallpaper except: self.__field_wallpaper=CSVINT(**{'default': 20}) return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,CSVINT): self.__field_wallpaper=value else: self.__field_wallpaper=CSVINT(value,**{'default': 20}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, None) def __getfield_timestamp(self): try: self.__field_timestamp except: self.__field_timestamp=CSVTIME(**{'terminator': None, 'default': DateTime.now()+(0,) }) return self.__field_timestamp.getvalue() def __setfield_timestamp(self, value): if isinstance(value,CSVTIME): self.__field_timestamp=value else: self.__field_timestamp=CSVTIME(value,**{'terminator': None, 'default': DateTime.now()+(0,) }) def __delfield_timestamp(self): del self.__field_timestamp timestamp=property(__getfield_timestamp, __setfield_timestamp, __delfield_timestamp, "Use terminator None for last item") def iscontainer(self): return True def containerelements(self): yield ('writeflg', self.__field_writeflg, "Set to True when writing to phone") yield ('slot', self.__field_slot, "Internal Slot") yield ('uslot', self.__field_uslot, "User Slot, Speed dial") yield ('group', self.__field_group, None) yield ('ringtone', self.__field_ringtone, None) yield ('name', self.__field_name, None) yield ('speeddial', self.__field_speeddial, "Which phone number assigned to speed dial uslot") yield ('dunno1', self.__field_dunno1, None) yield ('numbers', self.__field_numbers, None) if self.writeflg: yield ('extranumber', self.__field_extranumber, None) yield ('dunno3', self.__field_dunno3, None) yield ('dunno4', self.__field_dunno4, None) yield ('email', self.__field_email, None) yield ('url', self.__field_url, None) yield ('birthday', self.__field_birthday, None) yield ('wallpaper', self.__field_wallpaper, None) yield ('timestamp', self.__field_timestamp, "Use terminator None for last item") class phonebookslotresponse(BaseProtogenClass): __fields=['command', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebookslotresponse,self).__init__(**dict) if self.__class__ is phonebookslotresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebookslotresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebookslotresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '#PBOKR:'}) self.__field_command.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '#PBOKR:'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('entry', self.__field_entry, None) class phonebookslotupdaterequest(BaseProtogenClass): __fields=['command', 'entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebookslotupdaterequest,self).__init__(**dict) if self.__class__ is phonebookslotupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebookslotupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebookslotupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'}) self.__field_command.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'}) self.__field_command.readfrombuffer(buf) self.__field_entry=pbentry() self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,pbentry): self.__field_entry=value else: self.__field_entry=pbentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('entry', self.__field_entry, None) class smsinrequest(BaseProtogenClass): __fields=['command', 'slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(smsinrequest,self).__init__(**dict) if self.__class__ is smsinrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(smsinrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(smsinrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PSRMR='}) self.__field_command.writetobuffer(buf) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PSRMR='}) self.__field_command.readfrombuffer(buf) self.__field_slot=CSVINT(**{'terminator': None}) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PSRMR='}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,CSVSTRING): self.__field_command=value else: self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '#PSRMR='}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,CSVINT): self.__field_slot=value else: self.__field_slot=CSVINT(value,**{'terminator': None}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('slot', self.__field_slot, None) class smsinresponse(BaseProtogenClass): __fields=['bytes'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(smsinresponse,self).__init__(**dict) if self.__class__ is smsinresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(smsinresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(smsinresponse,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_bytes=DATA(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_bytes.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_bytes=DATA() self.__field_bytes.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_bytes(self): return self.__field_bytes.getvalue() def __setfield_bytes(self, value): if isinstance(value,DATA): self.__field_bytes=value else: self.__field_bytes=DATA(value,) def __delfield_bytes(self): del self.__field_bytes bytes=property(__getfield_bytes, __setfield_bytes, __delfield_bytes, None) def iscontainer(self): return True def containerelements(self): yield ('bytes', self.__field_bytes, None) class fspbslot(BaseProtogenClass): __fields=['valid', 'pbbook_index', 'c0', 'timestamp', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(fspbslot,self).__init__(**dict) if self.__class__ is fspbslot: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(fspbslot,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(fspbslot,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_valid except: self.__field_valid=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_valid.writetobuffer(buf) try: self.__field_pbbook_index except: self.__field_pbbook_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_pbbook_index.writetobuffer(buf) if self.valid: try: self.__field_c0 except: self.__field_c0=UINT(**{'sizeinbytes': 2, 'default': 0x0101 }) self.__field_c0.writetobuffer(buf) try: self.__field_timestamp except: self.__field_timestamp=DateTime(**{'sizeinbytes': 4, 'default': DateTime.now() }) self.__field_timestamp.writetobuffer(buf) else: try: self.__field_pad except: self.__field_pad=DATA(**{'sizeinbytes': 6, 'default': '\x00'*6 }) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_valid=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_valid.readfrombuffer(buf) self.__field_pbbook_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_pbbook_index.readfrombuffer(buf) if self.valid: self.__field_c0=UINT(**{'sizeinbytes': 2, 'default': 0x0101 }) self.__field_c0.readfrombuffer(buf) self.__field_timestamp=DateTime(**{'sizeinbytes': 4, 'default': DateTime.now() }) self.__field_timestamp.readfrombuffer(buf) else: self.__field_pad=DATA(**{'sizeinbytes': 6, 'default': '\x00'*6 }) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_valid(self): try: self.__field_valid except: self.__field_valid=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_valid.getvalue() def __setfield_valid(self, value): if isinstance(value,UINT): self.__field_valid=value else: self.__field_valid=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_valid(self): del self.__field_valid valid=property(__getfield_valid, __setfield_valid, __delfield_valid, "1=valid entry") def __getfield_pbbook_index(self): try: self.__field_pbbook_index except: self.__field_pbbook_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_pbbook_index.getvalue() def __setfield_pbbook_index(self, value): if isinstance(value,UINT): self.__field_pbbook_index=value else: self.__field_pbbook_index=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_pbbook_index(self): del self.__field_pbbook_index pbbook_index=property(__getfield_pbbook_index, __setfield_pbbook_index, __delfield_pbbook_index, "index into pbbook") def __getfield_c0(self): try: self.__field_c0 except: self.__field_c0=UINT(**{'sizeinbytes': 2, 'default': 0x0101 }) return self.__field_c0.getvalue() def __setfield_c0(self, value): if isinstance(value,UINT): self.__field_c0=value else: self.__field_c0=UINT(value,**{'sizeinbytes': 2, 'default': 0x0101 }) def __delfield_c0(self): del self.__field_c0 c0=property(__getfield_c0, __setfield_c0, __delfield_c0, None) def __getfield_timestamp(self): try: self.__field_timestamp except: self.__field_timestamp=DateTime(**{'sizeinbytes': 4, 'default': DateTime.now() }) return self.__field_timestamp.getvalue() def __setfield_timestamp(self, value): if isinstance(value,DateTime): self.__field_timestamp=value else: self.__field_timestamp=DateTime(value,**{'sizeinbytes': 4, 'default': DateTime.now() }) def __delfield_timestamp(self): del self.__field_timestamp timestamp=property(__getfield_timestamp, __setfield_timestamp, __delfield_timestamp, "Last modified date/time") def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=DATA(**{'sizeinbytes': 6, 'default': '\x00'*6 }) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,DATA): self.__field_pad=value else: self.__field_pad=DATA(value,**{'sizeinbytes': 6, 'default': '\x00'*6 }) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('valid', self.__field_valid, "1=valid entry") yield ('pbbook_index', self.__field_pbbook_index, "index into pbbook") if self.valid: yield ('c0', self.__field_c0, None) yield ('timestamp', self.__field_timestamp, "Last modified date/time") else: yield ('pad', self.__field_pad, None) class fspbslots(BaseProtogenClass): __fields=['slot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(fspbslots,self).__init__(**dict) if self.__class__ is fspbslots: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(fspbslots,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(fspbslots,kwargs) if len(args): dict2={ 'length': max_pb_slots, 'elementclass': fspbslot } dict2.update(kwargs) kwargs=dict2 self.__field_slot=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_slot except: self.__field_slot=LIST(**{ 'length': max_pb_slots, 'elementclass': fspbslot }) self.__field_slot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=LIST(**{ 'length': max_pb_slots, 'elementclass': fspbslot }) self.__field_slot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): try: self.__field_slot except: self.__field_slot=LIST(**{ 'length': max_pb_slots, 'elementclass': fspbslot }) return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,LIST): self.__field_slot=value else: self.__field_slot=LIST(value,**{ 'length': max_pb_slots, 'elementclass': fspbslot }) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) class fspbentry(BaseProtogenClass): __fields=['valid', 'c1', 'c1', 'main_num_index', 'mobile_num_index', 'home_num_index', 'office_num_index', 'pager_num_index', 'fax_num_index', 'unused_index', 'email_index', 'url_index', 'name', 'group_num', 'nick', 'memo', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(fspbentry,self).__init__(**dict) if self.__class__ is fspbentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(fspbentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(fspbentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_valid except: self.__field_valid=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_valid.writetobuffer(buf) if self.valid: try: self.__field_c1 except: self.__field_c1=UINT(**{'sizeinbytes': 2, 'default': 0x01BF }) self.__field_c1.writetobuffer(buf) else: try: self.__field_c1 except: self.__field_c1=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_c1.writetobuffer(buf) try: self.__field_main_num_index except: self.__field_main_num_index=UINT(**{'sizeinbytes': 2, 'default': self.mobile_num_index }) self.__field_main_num_index.writetobuffer(buf) try: self.__field_mobile_num_index except: self.__field_mobile_num_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_mobile_num_index.writetobuffer(buf) try: self.__field_home_num_index except: self.__field_home_num_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_home_num_index.writetobuffer(buf) try: self.__field_office_num_index except: self.__field_office_num_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_office_num_index.writetobuffer(buf) try: self.__field_pager_num_index except: self.__field_pager_num_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_pager_num_index.writetobuffer(buf) try: self.__field_fax_num_index except: self.__field_fax_num_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_fax_num_index.writetobuffer(buf) try: self.__field_unused_index except: self.__field_unused_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_unused_index.writetobuffer(buf) try: self.__field_email_index except: self.__field_email_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_email_index.writetobuffer(buf) try: self.__field_url_index except: self.__field_url_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_url_index.writetobuffer(buf) try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 31, 'pascal': True, 'terminator': None, 'default': '' }) self.__field_name.writetobuffer(buf) try: self.__field_group_num except: self.__field_group_num=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_group_num.writetobuffer(buf) try: self.__field_nick except: self.__field_nick=USTRING(**{'sizeinbytes': 22, 'pascal': True, 'terminator': None, 'default': '' }) self.__field_nick.writetobuffer(buf) try: self.__field_memo except: self.__field_memo=USTRING(**{'sizeinbytes': 73, 'pascal': True, 'terminator': None, 'default': '' }) self.__field_memo.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=DATA(**{'sizeinbytes': 13, 'default': '\x00'*13 }) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_valid=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_valid.readfrombuffer(buf) if self.valid: self.__field_c1=UINT(**{'sizeinbytes': 2, 'default': 0x01BF }) self.__field_c1.readfrombuffer(buf) else: self.__field_c1=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_c1.readfrombuffer(buf) self.__field_main_num_index=UINT(**{'sizeinbytes': 2, 'default': self.mobile_num_index }) self.__field_main_num_index.readfrombuffer(buf) self.__field_mobile_num_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_mobile_num_index.readfrombuffer(buf) self.__field_home_num_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_home_num_index.readfrombuffer(buf) self.__field_office_num_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_office_num_index.readfrombuffer(buf) self.__field_pager_num_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_pager_num_index.readfrombuffer(buf) self.__field_fax_num_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_fax_num_index.readfrombuffer(buf) self.__field_unused_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_unused_index.readfrombuffer(buf) self.__field_email_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_email_index.readfrombuffer(buf) self.__field_url_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_url_index.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 31, 'pascal': True, 'terminator': None, 'default': '' }) self.__field_name.readfrombuffer(buf) self.__field_group_num=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_group_num.readfrombuffer(buf) self.__field_nick=USTRING(**{'sizeinbytes': 22, 'pascal': True, 'terminator': None, 'default': '' }) self.__field_nick.readfrombuffer(buf) self.__field_memo=USTRING(**{'sizeinbytes': 73, 'pascal': True, 'terminator': None, 'default': '' }) self.__field_memo.readfrombuffer(buf) self.__field_pad=DATA(**{'sizeinbytes': 13, 'default': '\x00'*13 }) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_valid(self): try: self.__field_valid except: self.__field_valid=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_valid.getvalue() def __setfield_valid(self, value): if isinstance(value,UINT): self.__field_valid=value else: self.__field_valid=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_valid(self): del self.__field_valid valid=property(__getfield_valid, __setfield_valid, __delfield_valid, "1=valid entry") def __getfield_c1(self): try: self.__field_c1 except: self.__field_c1=UINT(**{'sizeinbytes': 2, 'default': 0x01BF }) return self.__field_c1.getvalue() def __setfield_c1(self, value): if isinstance(value,UINT): self.__field_c1=value else: self.__field_c1=UINT(value,**{'sizeinbytes': 2, 'default': 0x01BF }) def __delfield_c1(self): del self.__field_c1 c1=property(__getfield_c1, __setfield_c1, __delfield_c1, None) def __getfield_c1(self): try: self.__field_c1 except: self.__field_c1=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_c1.getvalue() def __setfield_c1(self, value): if isinstance(value,UINT): self.__field_c1=value else: self.__field_c1=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_c1(self): del self.__field_c1 c1=property(__getfield_c1, __setfield_c1, __delfield_c1, None) def __getfield_main_num_index(self): try: self.__field_main_num_index except: self.__field_main_num_index=UINT(**{'sizeinbytes': 2, 'default': self.mobile_num_index }) return self.__field_main_num_index.getvalue() def __setfield_main_num_index(self, value): if isinstance(value,UINT): self.__field_main_num_index=value else: self.__field_main_num_index=UINT(value,**{'sizeinbytes': 2, 'default': self.mobile_num_index }) def __delfield_main_num_index(self): del self.__field_main_num_index main_num_index=property(__getfield_main_num_index, __setfield_main_num_index, __delfield_main_num_index, None) def __getfield_mobile_num_index(self): try: self.__field_mobile_num_index except: self.__field_mobile_num_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_mobile_num_index.getvalue() def __setfield_mobile_num_index(self, value): if isinstance(value,UINT): self.__field_mobile_num_index=value else: self.__field_mobile_num_index=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_mobile_num_index(self): del self.__field_mobile_num_index mobile_num_index=property(__getfield_mobile_num_index, __setfield_mobile_num_index, __delfield_mobile_num_index, None) def __getfield_home_num_index(self): try: self.__field_home_num_index except: self.__field_home_num_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_home_num_index.getvalue() def __setfield_home_num_index(self, value): if isinstance(value,UINT): self.__field_home_num_index=value else: self.__field_home_num_index=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_home_num_index(self): del self.__field_home_num_index home_num_index=property(__getfield_home_num_index, __setfield_home_num_index, __delfield_home_num_index, None) def __getfield_office_num_index(self): try: self.__field_office_num_index except: self.__field_office_num_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_office_num_index.getvalue() def __setfield_office_num_index(self, value): if isinstance(value,UINT): self.__field_office_num_index=value else: self.__field_office_num_index=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_office_num_index(self): del self.__field_office_num_index office_num_index=property(__getfield_office_num_index, __setfield_office_num_index, __delfield_office_num_index, None) def __getfield_pager_num_index(self): try: self.__field_pager_num_index except: self.__field_pager_num_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_pager_num_index.getvalue() def __setfield_pager_num_index(self, value): if isinstance(value,UINT): self.__field_pager_num_index=value else: self.__field_pager_num_index=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_pager_num_index(self): del self.__field_pager_num_index pager_num_index=property(__getfield_pager_num_index, __setfield_pager_num_index, __delfield_pager_num_index, None) def __getfield_fax_num_index(self): try: self.__field_fax_num_index except: self.__field_fax_num_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_fax_num_index.getvalue() def __setfield_fax_num_index(self, value): if isinstance(value,UINT): self.__field_fax_num_index=value else: self.__field_fax_num_index=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_fax_num_index(self): del self.__field_fax_num_index fax_num_index=property(__getfield_fax_num_index, __setfield_fax_num_index, __delfield_fax_num_index, None) def __getfield_unused_index(self): try: self.__field_unused_index except: self.__field_unused_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_unused_index.getvalue() def __setfield_unused_index(self, value): if isinstance(value,UINT): self.__field_unused_index=value else: self.__field_unused_index=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_unused_index(self): del self.__field_unused_index unused_index=property(__getfield_unused_index, __setfield_unused_index, __delfield_unused_index, None) def __getfield_email_index(self): try: self.__field_email_index except: self.__field_email_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_email_index.getvalue() def __setfield_email_index(self, value): if isinstance(value,UINT): self.__field_email_index=value else: self.__field_email_index=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_email_index(self): del self.__field_email_index email_index=property(__getfield_email_index, __setfield_email_index, __delfield_email_index, None) def __getfield_url_index(self): try: self.__field_url_index except: self.__field_url_index=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_url_index.getvalue() def __setfield_url_index(self, value): if isinstance(value,UINT): self.__field_url_index=value else: self.__field_url_index=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_url_index(self): del self.__field_url_index url_index=property(__getfield_url_index, __setfield_url_index, __delfield_url_index, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 31, 'pascal': True, 'terminator': None, 'default': '' }) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 31, 'pascal': True, 'terminator': None, 'default': '' }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_group_num(self): try: self.__field_group_num except: self.__field_group_num=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_group_num.getvalue() def __setfield_group_num(self, value): if isinstance(value,UINT): self.__field_group_num=value else: self.__field_group_num=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_group_num(self): del self.__field_group_num group_num=property(__getfield_group_num, __setfield_group_num, __delfield_group_num, None) def __getfield_nick(self): try: self.__field_nick except: self.__field_nick=USTRING(**{'sizeinbytes': 22, 'pascal': True, 'terminator': None, 'default': '' }) return self.__field_nick.getvalue() def __setfield_nick(self, value): if isinstance(value,USTRING): self.__field_nick=value else: self.__field_nick=USTRING(value,**{'sizeinbytes': 22, 'pascal': True, 'terminator': None, 'default': '' }) def __delfield_nick(self): del self.__field_nick nick=property(__getfield_nick, __setfield_nick, __delfield_nick, None) def __getfield_memo(self): try: self.__field_memo except: self.__field_memo=USTRING(**{'sizeinbytes': 73, 'pascal': True, 'terminator': None, 'default': '' }) return self.__field_memo.getvalue() def __setfield_memo(self, value): if isinstance(value,USTRING): self.__field_memo=value else: self.__field_memo=USTRING(value,**{'sizeinbytes': 73, 'pascal': True, 'terminator': None, 'default': '' }) def __delfield_memo(self): del self.__field_memo memo=property(__getfield_memo, __setfield_memo, __delfield_memo, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=DATA(**{'sizeinbytes': 13, 'default': '\x00'*13 }) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,DATA): self.__field_pad=value else: self.__field_pad=DATA(value,**{'sizeinbytes': 13, 'default': '\x00'*13 }) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('valid', self.__field_valid, "1=valid entry") if self.valid: yield ('c1', self.__field_c1, None) else: yield ('c1', self.__field_c1, None) yield ('main_num_index', self.__field_main_num_index, None) yield ('mobile_num_index', self.__field_mobile_num_index, None) yield ('home_num_index', self.__field_home_num_index, None) yield ('office_num_index', self.__field_office_num_index, None) yield ('pager_num_index', self.__field_pager_num_index, None) yield ('fax_num_index', self.__field_fax_num_index, None) yield ('unused_index', self.__field_unused_index, None) yield ('email_index', self.__field_email_index, None) yield ('url_index', self.__field_url_index, None) yield ('name', self.__field_name, None) yield ('group_num', self.__field_group_num, None) yield ('nick', self.__field_nick, None) yield ('memo', self.__field_memo, None) yield ('pad', self.__field_pad, None) class fspbbook(BaseProtogenClass): __fields=['entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(fspbbook,self).__init__(**dict) if self.__class__ is fspbbook: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(fspbbook,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(fspbbook,kwargs) if len(args): dict2={ 'length': max_pb_entries, 'elementclass': fspbentry, 'createdefault': True } dict2.update(kwargs) kwargs=dict2 self.__field_entry=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry except: self.__field_entry=LIST(**{ 'length': max_pb_entries, 'elementclass': fspbentry, 'createdefault': True }) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry=LIST(**{ 'length': max_pb_entries, 'elementclass': fspbentry, 'createdefault': True }) self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=LIST(**{ 'length': max_pb_entries, 'elementclass': fspbentry, 'createdefault': True }) return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,LIST): self.__field_entry=value else: self.__field_entry=LIST(value,**{ 'length': max_pb_entries, 'elementclass': fspbentry, 'createdefault': True }) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('entry', self.__field_entry, None) class fsnumber(BaseProtogenClass): __fields=['valid', 'c0', 'name', 'number_type'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(fsnumber,self).__init__(**dict) if self.__class__ is fsnumber: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(fsnumber,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(fsnumber,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_valid except: self.__field_valid=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_valid.writetobuffer(buf) try: self.__field_c0 except: self.__field_c0=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_c0.writetobuffer(buf) try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 74, 'pascal': True, 'terminator': None, 'default': '' }) self.__field_name.writetobuffer(buf) try: self.__field_number_type except: self.__field_number_type=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_number_type.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_valid=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_valid.readfrombuffer(buf) self.__field_c0=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_c0.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 74, 'pascal': True, 'terminator': None, 'default': '' }) self.__field_name.readfrombuffer(buf) self.__field_number_type=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_number_type.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_valid(self): try: self.__field_valid except: self.__field_valid=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_valid.getvalue() def __setfield_valid(self, value): if isinstance(value,UINT): self.__field_valid=value else: self.__field_valid=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_valid(self): del self.__field_valid valid=property(__getfield_valid, __setfield_valid, __delfield_valid, "1=valid entry") def __getfield_c0(self): try: self.__field_c0 except: self.__field_c0=UINT(**{'sizeinbytes': 4, 'default': 0 }) return self.__field_c0.getvalue() def __setfield_c0(self, value): if isinstance(value,UINT): self.__field_c0=value else: self.__field_c0=UINT(value,**{'sizeinbytes': 4, 'default': 0 }) def __delfield_c0(self): del self.__field_c0 c0=property(__getfield_c0, __setfield_c0, __delfield_c0, None) def __getfield_name(self): try: self.__field_name except: self.__field_name=USTRING(**{'sizeinbytes': 74, 'pascal': True, 'terminator': None, 'default': '' }) return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 74, 'pascal': True, 'terminator': None, 'default': '' }) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_number_type(self): try: self.__field_number_type except: self.__field_number_type=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_number_type.getvalue() def __setfield_number_type(self, value): if isinstance(value,UINT): self.__field_number_type=value else: self.__field_number_type=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_number_type(self): del self.__field_number_type number_type=property(__getfield_number_type, __setfield_number_type, __delfield_number_type, None) def iscontainer(self): return True def containerelements(self): yield ('valid', self.__field_valid, "1=valid entry") yield ('c0', self.__field_c0, None) yield ('name', self.__field_name, None) yield ('number_type', self.__field_number_type, None) class fsnumbers(BaseProtogenClass): __fields=['entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(fsnumbers,self).__init__(**dict) if self.__class__ is fsnumbers: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(fsnumbers,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(fsnumbers,kwargs) if len(args): dict2={ 'length': max_number_entries, 'elementclass': fsnumber, 'createdefault': True } dict2.update(kwargs) kwargs=dict2 self.__field_entry=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry except: self.__field_entry=LIST(**{ 'length': max_number_entries, 'elementclass': fsnumber, 'createdefault': True }) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry=LIST(**{ 'length': max_number_entries, 'elementclass': fsnumber, 'createdefault': True }) self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=LIST(**{ 'length': max_number_entries, 'elementclass': fsnumber, 'createdefault': True }) return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,LIST): self.__field_entry=value else: self.__field_entry=LIST(value,**{ 'length': max_number_entries, 'elementclass': fsnumber, 'createdefault': True }) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('entry', self.__field_entry, None) class amsregistry(BaseProtogenClass): __fields=['dunno0', 'info', 'dunno1', 'strings', 'dunno2', 'nfiles', 'dunno3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(amsregistry,self).__init__(**dict) if self.__class__ is amsregistry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(amsregistry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(amsregistry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_dunno0.writetobuffer(buf) self.__field_info.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_strings.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_nfiles.writetobuffer(buf) self.__field_dunno3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_dunno0=DATA(**{'sizeinbytes': 900}) self.__field_dunno0.readfrombuffer(buf) self.__field_info=LIST(**{'elementclass': _gen_p_samsungsphm300_197, 'length': 320}) self.__field_info.readfrombuffer(buf) self.__field_dunno1=DATA(**{'sizeinbytes': 2000}) self.__field_dunno1.readfrombuffer(buf) self.__field_strings=DATA(**{'sizeinbytes': 23000}) self.__field_strings.readfrombuffer(buf) self.__field_dunno2=UINT(**{'sizeinbytes': 4}) self.__field_dunno2.readfrombuffer(buf) self.__field_nfiles=UINT(**{'sizeinbytes': 2}) self.__field_nfiles.readfrombuffer(buf) self.__field_dunno3=DATA() self.__field_dunno3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_dunno0(self): return self.__field_dunno0.getvalue() def __setfield_dunno0(self, value): if isinstance(value,DATA): self.__field_dunno0=value else: self.__field_dunno0=DATA(value,**{'sizeinbytes': 900}) def __delfield_dunno0(self): del self.__field_dunno0 dunno0=property(__getfield_dunno0, __setfield_dunno0, __delfield_dunno0, None) def __getfield_info(self): return self.__field_info.getvalue() def __setfield_info(self, value): if isinstance(value,LIST): self.__field_info=value else: self.__field_info=LIST(value,**{'elementclass': _gen_p_samsungsphm300_197, 'length': 320}) def __delfield_info(self): del self.__field_info info=property(__getfield_info, __setfield_info, __delfield_info, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,DATA): self.__field_dunno1=value else: self.__field_dunno1=DATA(value,**{'sizeinbytes': 2000}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_strings(self): return self.__field_strings.getvalue() def __setfield_strings(self, value): if isinstance(value,DATA): self.__field_strings=value else: self.__field_strings=DATA(value,**{'sizeinbytes': 23000}) def __delfield_strings(self): del self.__field_strings strings=property(__getfield_strings, __setfield_strings, __delfield_strings, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UINT): self.__field_dunno2=value else: self.__field_dunno2=UINT(value,**{'sizeinbytes': 4}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_nfiles(self): return self.__field_nfiles.getvalue() def __setfield_nfiles(self, value): if isinstance(value,UINT): self.__field_nfiles=value else: self.__field_nfiles=UINT(value,**{'sizeinbytes': 2}) def __delfield_nfiles(self): del self.__field_nfiles nfiles=property(__getfield_nfiles, __setfield_nfiles, __delfield_nfiles, None) def __getfield_dunno3(self): return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,DATA): self.__field_dunno3=value else: self.__field_dunno3=DATA(value,) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def iscontainer(self): return True def containerelements(self): yield ('dunno0', self.__field_dunno0, None) yield ('info', self.__field_info, None) yield ('dunno1', self.__field_dunno1, None) yield ('strings', self.__field_strings, None) yield ('dunno2', self.__field_dunno2, None) yield ('nfiles', self.__field_nfiles, None) yield ('dunno3', self.__field_dunno3, None) def getstring(self, ptr): # Return the 0-terminated string starting index ptr from field strings try: return self.strings[ptr:self.strings.index('\x00', ptr)] except ValueError: return '' def dir(self, idx): return self.getstring(self.info[idx].dir_ptr) def name(self, idx): return self.getstring(self.info[idx].name_ptr) def mimetype(self, idx): return self.getstring(self.info[idx].mimetype_ptr) def version(self, idx): return self.getstring(self.info[idx].version_ptr) def vendor(self, idx): return self.getstring(self.info[idx].vendor_ptr) def filename(self, idx): # return the file name of this item global exts return self.name(idx)+exts.get(self.mimetype(idx), '') def filepath(self, idx): # return the full pathname of this item return 'ams/'+self.dir(idx) def origin(self, idx): # return the origin based on the file type global origins return origins.get(self.info[idx].filetype, None) class _gen_p_samsungsphm300_197(BaseProtogenClass): 'Anonymous inner class' __fields=['dir_ptr', 'num2', 'name_ptr', 'version_ptr', 'vendor_ptr', 'downloaddomain_ptr', 'num7', 'filetype', 'num8', 'mimetype_ptr', 'num12'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_samsungsphm300_197,self).__init__(**dict) if self.__class__ is _gen_p_samsungsphm300_197: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_samsungsphm300_197,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_samsungsphm300_197,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_dir_ptr.writetobuffer(buf) self.__field_num2.writetobuffer(buf) self.__field_name_ptr.writetobuffer(buf) self.__field_version_ptr.writetobuffer(buf) self.__field_vendor_ptr.writetobuffer(buf) self.__field_downloaddomain_ptr.writetobuffer(buf) self.__field_num7.writetobuffer(buf) self.__field_filetype.writetobuffer(buf) self.__field_num8.writetobuffer(buf) self.__field_mimetype_ptr.writetobuffer(buf) self.__field_num12.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_dir_ptr=UINT(**{'sizeinbytes': 2}) self.__field_dir_ptr.readfrombuffer(buf) self.__field_num2=UINT(**{'sizeinbytes': 2}) self.__field_num2.readfrombuffer(buf) self.__field_name_ptr=UINT(**{'sizeinbytes': 2}) self.__field_name_ptr.readfrombuffer(buf) self.__field_version_ptr=UINT(**{'sizeinbytes': 2}) self.__field_version_ptr.readfrombuffer(buf) self.__field_vendor_ptr=UINT(**{'sizeinbytes': 2}) self.__field_vendor_ptr.readfrombuffer(buf) self.__field_downloaddomain_ptr=UINT(**{'sizeinbytes': 2}) self.__field_downloaddomain_ptr.readfrombuffer(buf) self.__field_num7=DATA(**{'sizeinbytes': 8}) self.__field_num7.readfrombuffer(buf) self.__field_filetype=UINT(**{'sizeinbytes': 2}) self.__field_filetype.readfrombuffer(buf) self.__field_num8=DATA(**{'sizeinbytes': 2}) self.__field_num8.readfrombuffer(buf) self.__field_mimetype_ptr=UINT(**{'sizeinbytes': 2}) self.__field_mimetype_ptr.readfrombuffer(buf) self.__field_num12=DATA(**{'sizeinbytes': 10}) self.__field_num12.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_dir_ptr(self): return self.__field_dir_ptr.getvalue() def __setfield_dir_ptr(self, value): if isinstance(value,UINT): self.__field_dir_ptr=value else: self.__field_dir_ptr=UINT(value,**{'sizeinbytes': 2}) def __delfield_dir_ptr(self): del self.__field_dir_ptr dir_ptr=property(__getfield_dir_ptr, __setfield_dir_ptr, __delfield_dir_ptr, None) def __getfield_num2(self): return self.__field_num2.getvalue() def __setfield_num2(self, value): if isinstance(value,UINT): self.__field_num2=value else: self.__field_num2=UINT(value,**{'sizeinbytes': 2}) def __delfield_num2(self): del self.__field_num2 num2=property(__getfield_num2, __setfield_num2, __delfield_num2, None) def __getfield_name_ptr(self): return self.__field_name_ptr.getvalue() def __setfield_name_ptr(self, value): if isinstance(value,UINT): self.__field_name_ptr=value else: self.__field_name_ptr=UINT(value,**{'sizeinbytes': 2}) def __delfield_name_ptr(self): del self.__field_name_ptr name_ptr=property(__getfield_name_ptr, __setfield_name_ptr, __delfield_name_ptr, None) def __getfield_version_ptr(self): return self.__field_version_ptr.getvalue() def __setfield_version_ptr(self, value): if isinstance(value,UINT): self.__field_version_ptr=value else: self.__field_version_ptr=UINT(value,**{'sizeinbytes': 2}) def __delfield_version_ptr(self): del self.__field_version_ptr version_ptr=property(__getfield_version_ptr, __setfield_version_ptr, __delfield_version_ptr, None) def __getfield_vendor_ptr(self): return self.__field_vendor_ptr.getvalue() def __setfield_vendor_ptr(self, value): if isinstance(value,UINT): self.__field_vendor_ptr=value else: self.__field_vendor_ptr=UINT(value,**{'sizeinbytes': 2}) def __delfield_vendor_ptr(self): del self.__field_vendor_ptr vendor_ptr=property(__getfield_vendor_ptr, __setfield_vendor_ptr, __delfield_vendor_ptr, None) def __getfield_downloaddomain_ptr(self): return self.__field_downloaddomain_ptr.getvalue() def __setfield_downloaddomain_ptr(self, value): if isinstance(value,UINT): self.__field_downloaddomain_ptr=value else: self.__field_downloaddomain_ptr=UINT(value,**{'sizeinbytes': 2}) def __delfield_downloaddomain_ptr(self): del self.__field_downloaddomain_ptr downloaddomain_ptr=property(__getfield_downloaddomain_ptr, __setfield_downloaddomain_ptr, __delfield_downloaddomain_ptr, None) def __getfield_num7(self): return self.__field_num7.getvalue() def __setfield_num7(self, value): if isinstance(value,DATA): self.__field_num7=value else: self.__field_num7=DATA(value,**{'sizeinbytes': 8}) def __delfield_num7(self): del self.__field_num7 num7=property(__getfield_num7, __setfield_num7, __delfield_num7, None) def __getfield_filetype(self): return self.__field_filetype.getvalue() def __setfield_filetype(self, value): if isinstance(value,UINT): self.__field_filetype=value else: self.__field_filetype=UINT(value,**{'sizeinbytes': 2}) def __delfield_filetype(self): del self.__field_filetype filetype=property(__getfield_filetype, __setfield_filetype, __delfield_filetype, "12: Ringer, 13 Screen Saver, 15 Apps") def __getfield_num8(self): return self.__field_num8.getvalue() def __setfield_num8(self, value): if isinstance(value,DATA): self.__field_num8=value else: self.__field_num8=DATA(value,**{'sizeinbytes': 2}) def __delfield_num8(self): del self.__field_num8 num8=property(__getfield_num8, __setfield_num8, __delfield_num8, None) def __getfield_mimetype_ptr(self): return self.__field_mimetype_ptr.getvalue() def __setfield_mimetype_ptr(self, value): if isinstance(value,UINT): self.__field_mimetype_ptr=value else: self.__field_mimetype_ptr=UINT(value,**{'sizeinbytes': 2}) def __delfield_mimetype_ptr(self): del self.__field_mimetype_ptr mimetype_ptr=property(__getfield_mimetype_ptr, __setfield_mimetype_ptr, __delfield_mimetype_ptr, None) def __getfield_num12(self): return self.__field_num12.getvalue() def __setfield_num12(self, value): if isinstance(value,DATA): self.__field_num12=value else: self.__field_num12=DATA(value,**{'sizeinbytes': 10}) def __delfield_num12(self): del self.__field_num12 num12=property(__getfield_num12, __setfield_num12, __delfield_num12, None) def iscontainer(self): return True def containerelements(self): yield ('dir_ptr', self.__field_dir_ptr, None) yield ('num2', self.__field_num2, None) yield ('name_ptr', self.__field_name_ptr, None) yield ('version_ptr', self.__field_version_ptr, None) yield ('vendor_ptr', self.__field_vendor_ptr, None) yield ('downloaddomain_ptr', self.__field_downloaddomain_ptr, None) yield ('num7', self.__field_num7, None) yield ('filetype', self.__field_filetype, "12: Ringer, 13 Screen Saver, 15 Apps") yield ('num8', self.__field_num8, None) yield ('mimetype_ptr', self.__field_mimetype_ptr, None) yield ('num12', self.__field_num12, None) class CamFile(BaseProtogenClass): __fields=['dunno0', 'dunno1', 'caption', 'dunno2', 'dunno3', 'datetime', 'dunno4', 'pad', 'jpeg'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(CamFile,self).__init__(**dict) if self.__class__ is CamFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(CamFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(CamFile,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_dunno0.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_caption.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_dunno3.writetobuffer(buf) self.__field_datetime.writetobuffer(buf) self.__field_dunno4.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self.__field_jpeg.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_dunno0=UINT(**{'sizeinbytes': 4}) self.__field_dunno0.readfrombuffer(buf) self.__field_dunno1=UINT(**{'sizeinbytes': 1}) self.__field_dunno1.readfrombuffer(buf) self.__field_caption=USTRING(**{'sizeinbytes': 16, 'pascal': True, 'terminator': None}) self.__field_caption.readfrombuffer(buf) self.__field_dunno2=UINT(**{'sizeinbytes': 1}) self.__field_dunno2.readfrombuffer(buf) self.__field_dunno3=DATA(**{'sizeinbytes': 2}) self.__field_dunno3.readfrombuffer(buf) self.__field_datetime=DateTime(**{'sizeinbytes': 4}) self.__field_datetime.readfrombuffer(buf) self.__field_dunno4=UINT(**{'sizeinbytes': 1}) self.__field_dunno4.readfrombuffer(buf) self.__field_pad=DATA(**{'sizeinbytes': 99}) self.__field_pad.readfrombuffer(buf) self.__field_jpeg=DATA() self.__field_jpeg.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_dunno0(self): return self.__field_dunno0.getvalue() def __setfield_dunno0(self, value): if isinstance(value,UINT): self.__field_dunno0=value else: self.__field_dunno0=UINT(value,**{'sizeinbytes': 4}) def __delfield_dunno0(self): del self.__field_dunno0 dunno0=property(__getfield_dunno0, __setfield_dunno0, __delfield_dunno0, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UINT): self.__field_dunno1=value else: self.__field_dunno1=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_caption(self): return self.__field_caption.getvalue() def __setfield_caption(self, value): if isinstance(value,USTRING): self.__field_caption=value else: self.__field_caption=USTRING(value,**{'sizeinbytes': 16, 'pascal': True, 'terminator': None}) def __delfield_caption(self): del self.__field_caption caption=property(__getfield_caption, __setfield_caption, __delfield_caption, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UINT): self.__field_dunno2=value else: self.__field_dunno2=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_dunno3(self): return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,DATA): self.__field_dunno3=value else: self.__field_dunno3=DATA(value,**{'sizeinbytes': 2}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_datetime(self): return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,DateTime): self.__field_datetime=value else: self.__field_datetime=DateTime(value,**{'sizeinbytes': 4}) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def __getfield_dunno4(self): return self.__field_dunno4.getvalue() def __setfield_dunno4(self, value): if isinstance(value,UINT): self.__field_dunno4=value else: self.__field_dunno4=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno4(self): del self.__field_dunno4 dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,DATA): self.__field_pad=value else: self.__field_pad=DATA(value,**{'sizeinbytes': 99}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_jpeg(self): return self.__field_jpeg.getvalue() def __setfield_jpeg(self, value): if isinstance(value,DATA): self.__field_jpeg=value else: self.__field_jpeg=DATA(value,) def __delfield_jpeg(self): del self.__field_jpeg jpeg=property(__getfield_jpeg, __setfield_jpeg, __delfield_jpeg, None) def iscontainer(self): return True def containerelements(self): yield ('dunno0', self.__field_dunno0, None) yield ('dunno1', self.__field_dunno1, None) yield ('caption', self.__field_caption, None) yield ('dunno2', self.__field_dunno2, None) yield ('dunno3', self.__field_dunno3, None) yield ('datetime', self.__field_datetime, None) yield ('dunno4', self.__field_dunno4, None) yield ('pad', self.__field_pad, None) yield ('jpeg', self.__field_jpeg, None) def _filename(self): return '%(year)04d%(month)02d%(day)02d_%(name)s.jpg'%\ { 'year': self.datetime[0], 'month': self.datetime[1], 'day': self.datetime[2], 'name': self.caption, } filename=property(fget=_filename) def save(self, filename=None): # save the jpeg data to a file return file(filename if filename else self.filename, 'wb').write(self.jpeg) class IndexSlot(BaseProtogenClass): __fields=['valid', 'group', 'index'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(IndexSlot,self).__init__(**dict) if self.__class__ is IndexSlot: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(IndexSlot,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(IndexSlot,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_valid except: self.__field_valid=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_valid.writetobuffer(buf) try: self.__field_group except: self.__field_group=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_group.writetobuffer(buf) try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_index.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_valid=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_valid.readfrombuffer(buf) self.__field_group=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_group.readfrombuffer(buf) self.__field_index=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_index.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_valid(self): try: self.__field_valid except: self.__field_valid=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_valid.getvalue() def __setfield_valid(self, value): if isinstance(value,UINT): self.__field_valid=value else: self.__field_valid=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_valid(self): del self.__field_valid valid=property(__getfield_valid, __setfield_valid, __delfield_valid, "=1 if valid slot") def __getfield_group(self): try: self.__field_group except: self.__field_group=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_group.getvalue() def __setfield_group(self, value): if isinstance(value,UINT): self.__field_group=value else: self.__field_group=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_group(self): del self.__field_group group=property(__getfield_group, __setfield_group, __delfield_group, "Group Index") def __getfield_index(self): try: self.__field_index except: self.__field_index=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, "Media Index") def iscontainer(self): return True def containerelements(self): yield ('valid', self.__field_valid, "=1 if valid slot") yield ('group', self.__field_group, "Group Index") yield ('index', self.__field_index, "Media Index") class IndexFile(BaseProtogenClass): __fields=['entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(IndexFile,self).__init__(**dict) if self.__class__ is IndexFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(IndexFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(IndexFile,kwargs) if len(args): dict2={ 'elementclass': IndexSlot, 'length': max_media_index_entries, 'createdefault': True } dict2.update(kwargs) kwargs=dict2 self.__field_entry=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry except: self.__field_entry=LIST(**{ 'elementclass': IndexSlot, 'length': max_media_index_entries, 'createdefault': True }) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry=LIST(**{ 'elementclass': IndexSlot, 'length': max_media_index_entries, 'createdefault': True }) self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=LIST(**{ 'elementclass': IndexSlot, 'length': max_media_index_entries, 'createdefault': True }) return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,LIST): self.__field_entry=value else: self.__field_entry=LIST(value,**{ 'elementclass': IndexSlot, 'length': max_media_index_entries, 'createdefault': True }) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('entry', self.__field_entry, None) class Group(BaseProtogenClass): __fields=['num0', 'num1', 'namelen', 'namestr', 'num5', 'dunno', 'nume3', 'datetime', 'num4'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(Group,self).__init__(**dict) if self.__class__ is Group: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(Group,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(Group,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_num0 except: self.__field_num0=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_num0.writetobuffer(buf) try: self.__field_num1 except: self.__field_num1=UINT(**{'sizeinbytes': 1, 'default': 1 if self.num0 else 0 }) self.__field_num1.writetobuffer(buf) try: self.__field_namelen except: self.__field_namelen=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_namelen.writetobuffer(buf) try: self.__field_namestr except: self.__field_namestr=USTRING(**{'sizeinbytes': 12, 'terminator': None, 'default': '' }) self.__field_namestr.writetobuffer(buf) try: self.__field_num5 except: self.__field_num5=UINT(**{'sizeinbytes': 1, 'default': 0x30 if self.num0 else 0 }) self.__field_num5.writetobuffer(buf) try: self.__field_dunno except: self.__field_dunno=DATA(**{'sizeinbytes': 8, 'default': '\x00'*8 }) self.__field_dunno.writetobuffer(buf) try: self.__field_nume3 except: self.__field_nume3=UINT(**{'sizeinbytes': 1, 'default': 1 if self.num0 else 0 }) self.__field_nume3.writetobuffer(buf) if self.num0: try: self.__field_datetime except: self.__field_datetime=DateTime(**{'sizeinbytes': 4, 'default': DateTime.now() }) self.__field_datetime.writetobuffer(buf) else: try: self.__field_num4 except: self.__field_num4=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_num4.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_num0=UINT(**{'sizeinbytes': 1, 'default': 0 }) self.__field_num0.readfrombuffer(buf) self.__field_num1=UINT(**{'sizeinbytes': 1, 'default': 1 if self.num0 else 0 }) self.__field_num1.readfrombuffer(buf) self.__field_namelen=UINT(**{'sizeinbytes': 2, 'default': 0 }) self.__field_namelen.readfrombuffer(buf) self.__field_namestr=USTRING(**{'sizeinbytes': 12, 'terminator': None, 'default': '' }) self.__field_namestr.readfrombuffer(buf) self.__field_num5=UINT(**{'sizeinbytes': 1, 'default': 0x30 if self.num0 else 0 }) self.__field_num5.readfrombuffer(buf) self.__field_dunno=DATA(**{'sizeinbytes': 8, 'default': '\x00'*8 }) self.__field_dunno.readfrombuffer(buf) self.__field_nume3=UINT(**{'sizeinbytes': 1, 'default': 1 if self.num0 else 0 }) self.__field_nume3.readfrombuffer(buf) if self.num0: self.__field_datetime=DateTime(**{'sizeinbytes': 4, 'default': DateTime.now() }) self.__field_datetime.readfrombuffer(buf) else: self.__field_num4=UINT(**{'sizeinbytes': 4, 'default': 0 }) self.__field_num4.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_num0(self): try: self.__field_num0 except: self.__field_num0=UINT(**{'sizeinbytes': 1, 'default': 0 }) return self.__field_num0.getvalue() def __setfield_num0(self, value): if isinstance(value,UINT): self.__field_num0=value else: self.__field_num0=UINT(value,**{'sizeinbytes': 1, 'default': 0 }) def __delfield_num0(self): del self.__field_num0 num0=property(__getfield_num0, __setfield_num0, __delfield_num0, None) def __getfield_num1(self): try: self.__field_num1 except: self.__field_num1=UINT(**{'sizeinbytes': 1, 'default': 1 if self.num0 else 0 }) return self.__field_num1.getvalue() def __setfield_num1(self, value): if isinstance(value,UINT): self.__field_num1=value else: self.__field_num1=UINT(value,**{'sizeinbytes': 1, 'default': 1 if self.num0 else 0 }) def __delfield_num1(self): del self.__field_num1 num1=property(__getfield_num1, __setfield_num1, __delfield_num1, None) def __getfield_namelen(self): try: self.__field_namelen except: self.__field_namelen=UINT(**{'sizeinbytes': 2, 'default': 0 }) return self.__field_namelen.getvalue() def __setfield_namelen(self, value): if isinstance(value,UINT): self.__field_namelen=value else: self.__field_namelen=UINT(value,**{'sizeinbytes': 2, 'default': 0 }) def __delfield_namelen(self): del self.__field_namelen namelen=property(__getfield_namelen, __setfield_namelen, __delfield_namelen, None) def __getfield_namestr(self): try: self.__field_namestr except: self.__field_namestr=USTRING(**{'sizeinbytes': 12, 'terminator': None, 'default': '' }) return self.__field_namestr.getvalue() def __setfield_namestr(self, value): if isinstance(value,USTRING): self.__field_namestr=value else: self.__field_namestr=USTRING(value,**{'sizeinbytes': 12, 'terminator': None, 'default': '' }) def __delfield_namestr(self): del self.__field_namestr namestr=property(__getfield_namestr, __setfield_namestr, __delfield_namestr, None) def __getfield_num5(self): try: self.__field_num5 except: self.__field_num5=UINT(**{'sizeinbytes': 1, 'default': 0x30 if self.num0 else 0 }) return self.__field_num5.getvalue() def __setfield_num5(self, value): if isinstance(value,UINT): self.__field_num5=value else: self.__field_num5=UINT(value,**{'sizeinbytes': 1, 'default': 0x30 if self.num0 else 0 }) def __delfield_num5(self): del self.__field_num5 num5=property(__getfield_num5, __setfield_num5, __delfield_num5, None) def __getfield_dunno(self): try: self.__field_dunno except: self.__field_dunno=DATA(**{'sizeinbytes': 8, 'default': '\x00'*8 }) return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,DATA): self.__field_dunno=value else: self.__field_dunno=DATA(value,**{'sizeinbytes': 8, 'default': '\x00'*8 }) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None) def __getfield_nume3(self): try: self.__field_nume3 except: self.__field_nume3=UINT(**{'sizeinbytes': 1, 'default': 1 if self.num0 else 0 }) return self.__field_nume3.getvalue() def __setfield_nume3(self, value): if isinstance(value,UINT): self.__field_nume3=value else: self.__field_nume3=UINT(value,**{'sizeinbytes': 1, 'default': 1 if self.num0 else 0 }) def __delfield_nume3(self): del self.__field_nume3 nume3=property(__getfield_nume3, __setfield_nume3, __delfield_nume3, None) def __getfield_datetime(self): try: self.__field_datetime except: self.__field_datetime=DateTime(**{'sizeinbytes': 4, 'default': DateTime.now() }) return self.__field_datetime.getvalue() def __setfield_datetime(self, value): if isinstance(value,DateTime): self.__field_datetime=value else: self.__field_datetime=DateTime(value,**{'sizeinbytes': 4, 'default': DateTime.now() }) def __delfield_datetime(self): del self.__field_datetime datetime=property(__getfield_datetime, __setfield_datetime, __delfield_datetime, None) def __getfield_num4(self): try: self.__field_num4 except: self.__field_num4=UINT(**{'sizeinbytes': 4, 'default': 0 }) return self.__field_num4.getvalue() def __setfield_num4(self, value): if isinstance(value,UINT): self.__field_num4=value else: self.__field_num4=UINT(value,**{'sizeinbytes': 4, 'default': 0 }) def __delfield_num4(self): del self.__field_num4 num4=property(__getfield_num4, __setfield_num4, __delfield_num4, None) def iscontainer(self): return True def containerelements(self): yield ('num0', self.__field_num0, None) yield ('num1', self.__field_num1, None) yield ('namelen', self.__field_namelen, None) yield ('namestr', self.__field_namestr, None) yield ('num5', self.__field_num5, None) yield ('dunno', self.__field_dunno, None) yield ('nume3', self.__field_nume3, None) if self.num0: yield ('datetime', self.__field_datetime, None) else: yield ('num4', self.__field_num4, None) def _get_name(self): return self.namestr[:self.namelen] if self.namelen else "" name=property(fget=_get_name) class GroupFile(BaseProtogenClass): __fields=['entry'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(GroupFile,self).__init__(**dict) if self.__class__ is GroupFile: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(GroupFile,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(GroupFile,kwargs) if len(args): dict2={ 'elementclass': Group, 'length': max_group_entries, 'createdefault': True } dict2.update(kwargs) kwargs=dict2 self.__field_entry=LIST(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_entry except: self.__field_entry=LIST(**{ 'elementclass': Group, 'length': max_group_entries, 'createdefault': True }) self.__field_entry.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_entry=LIST(**{ 'elementclass': Group, 'length': max_group_entries, 'createdefault': True }) self.__field_entry.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_entry(self): try: self.__field_entry except: self.__field_entry=LIST(**{ 'elementclass': Group, 'length': max_group_entries, 'createdefault': True }) return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,LIST): self.__field_entry=value else: self.__field_entry=LIST(value,**{ 'elementclass': Group, 'length': max_group_entries, 'createdefault': True }) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def iscontainer(self): return True def containerelements(self): yield ('entry', self.__field_entry, None) bitpim-1.0.7+dfsg1/src/phones/p_sanyo.py0000644001616600161660000144120011026354224016255 0ustar amuamu# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE """Various descriptions of data specific to Sanyo phones""" from prototypes import * from prototypeslg import * # We use LSB for all integer like fields UINT=UINTlsb BOOL=BOOLlsb _NUMPBSLOTS=300 _NUMSPEEDDIALS=8 _NUMLONGNUMBERS=5 _LONGPHONENUMBERLEN=30 _NUMEVENTSLOTS=100 _NUMCALLALARMSLOTS=15 NUMCALLHISTORY=20 NUMPHONENUMBERS=7 NUMMESSAGESLOTS=128 NUMTODOSLOTS=20 HASRINGPICBUF=1 FIRSTSPEEDDIAL=2 LASTSPEEDDIAL=9 OUTGOING=0 INCOMING=1 MISSED=2 class sanyoerror(BaseProtogenClass): __fields=['errorcode', 'unknown'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyoerror,self).__init__(**dict) if self.__class__ is sanyoerror: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyoerror,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyoerror,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_errorcode.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_errorcode=UINT(**{'sizeinbytes': 1}) self.__field_errorcode.readfrombuffer(buf) self.__field_unknown=UNKNOWN() self.__field_unknown.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_errorcode(self): return self.__field_errorcode.getvalue() def __setfield_errorcode(self, value): if isinstance(value,UINT): self.__field_errorcode=value else: self.__field_errorcode=UINT(value,**{'sizeinbytes': 1}) def __delfield_errorcode(self): del self.__field_errorcode errorcode=property(__getfield_errorcode, __setfield_errorcode, __delfield_errorcode, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UNKNOWN): self.__field_unknown=value else: self.__field_unknown=UNKNOWN(value,) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def iscontainer(self): return True def containerelements(self): yield ('errorcode', self.__field_errorcode, None) yield ('unknown', self.__field_unknown, None) class firmwarerequest(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(firmwarerequest,self).__init__(**dict) if self.__class__ is firmwarerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(firmwarerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(firmwarerequest,kwargs) if len(args): dict2={'sizeinbytes': 1, 'constant': 0x00} dict2.update(kwargs) kwargs=dict2 self.__field_command=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1, 'constant': 0x00}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class firmwareresponse(BaseProtogenClass): __fields=['command', 'unknown'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(firmwareresponse,self).__init__(**dict) if self.__class__ is firmwareresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(firmwareresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(firmwareresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_unknown=UNKNOWN() self.__field_unknown.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UNKNOWN): self.__field_unknown=value else: self.__field_unknown=UNKNOWN(value,) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('unknown', self.__field_unknown, None) class beginendupdaterequest(BaseProtogenClass): __fields=['command', 'beginend'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(beginendupdaterequest,self).__init__(**dict) if self.__class__ is beginendupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(beginendupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(beginendupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x29}) self.__field_command.writetobuffer(buf) self.__field_beginend.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x29}) self.__field_command.readfrombuffer(buf) self.__field_beginend=UINT(**{'sizeinbytes': 2}) self.__field_beginend.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x29}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1, 'constant': 0x29}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_beginend(self): return self.__field_beginend.getvalue() def __setfield_beginend(self, value): if isinstance(value,UINT): self.__field_beginend=value else: self.__field_beginend=UINT(value,**{'sizeinbytes': 2}) def __delfield_beginend(self): del self.__field_beginend beginend=property(__getfield_beginend, __setfield_beginend, __delfield_beginend, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('beginend', self.__field_beginend, None) class beginendupdateresponse(BaseProtogenClass): __fields=['command', 'beginend'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(beginendupdateresponse,self).__init__(**dict) if self.__class__ is beginendupdateresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(beginendupdateresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(beginendupdateresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_beginend.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_beginend=UINT(**{'sizeinbytes': 2}) self.__field_beginend.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_beginend(self): return self.__field_beginend.getvalue() def __setfield_beginend(self, value): if isinstance(value,UINT): self.__field_beginend=value else: self.__field_beginend=UINT(value,**{'sizeinbytes': 2}) def __delfield_beginend(self): del self.__field_beginend beginend=property(__getfield_beginend, __setfield_beginend, __delfield_beginend, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('beginend', self.__field_beginend, None) class statusrequest(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(statusrequest,self).__init__(**dict) if self.__class__ is statusrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(statusrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(statusrequest,kwargs) if len(args): dict2={'sizeinbytes': 1, 'constant': 0x0c} dict2.update(kwargs) kwargs=dict2 self.__field_command=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x0c}) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x0c}) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x0c}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1, 'constant': 0x0c}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class statusresponse(BaseProtogenClass): __fields=['readyvalue', 'command', 'dunno1', 'esn', 'flag0', 'dunno2', 'ready', 'dunno3', 'flag2', 'dunno4', 'flag3', 'unknown'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(statusresponse,self).__init__(**dict) if self.__class__ is statusresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(statusresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(statusresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_readyvalue except: self.__field_readyvalue=UINT(**{'constant': 0x0}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_esn.writetobuffer(buf) self.__field_flag0.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_ready.writetobuffer(buf) self.__field_dunno3.writetobuffer(buf) self.__field_flag2.writetobuffer(buf) self.__field_dunno4.writetobuffer(buf) self.__field_flag3.writetobuffer(buf) self.__field_unknown.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_dunno1=UNKNOWN(**{'sizeinbytes': 3}) self.__field_dunno1.readfrombuffer(buf) self.__field_esn=UINT(**{'sizeinbytes': 4}) self.__field_esn.readfrombuffer(buf) self.__field_flag0=UINT(**{'sizeinbytes': 1}) self.__field_flag0.readfrombuffer(buf) self.__field_dunno2=UNKNOWN(**{'sizeinbytes': 14}) self.__field_dunno2.readfrombuffer(buf) self.__field_ready=UINT(**{'sizeinbytes': 1}) self.__field_ready.readfrombuffer(buf) self.__field_dunno3=UINT(**{'sizeinbytes': 1}) self.__field_dunno3.readfrombuffer(buf) self.__field_flag2=UINT(**{'sizeinbytes': 1}) self.__field_flag2.readfrombuffer(buf) self.__field_dunno4=UNKNOWN(**{'sizeinbytes': 6}) self.__field_dunno4.readfrombuffer(buf) self.__field_flag3=UINT(**{'sizeinbytes': 1}) self.__field_flag3.readfrombuffer(buf) self.__field_unknown=UNKNOWN() self.__field_unknown.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_readyvalue(self): return self.__field_readyvalue.getvalue() def __setfield_readyvalue(self, value): if isinstance(value,UINT): self.__field_readyvalue=value else: self.__field_readyvalue=UINT(value,**{'constant': 0x0}) def __delfield_readyvalue(self): del self.__field_readyvalue readyvalue=property(__getfield_readyvalue, __setfield_readyvalue, __delfield_readyvalue, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UNKNOWN): self.__field_dunno1=value else: self.__field_dunno1=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_esn(self): return self.__field_esn.getvalue() def __setfield_esn(self, value): if isinstance(value,UINT): self.__field_esn=value else: self.__field_esn=UINT(value,**{'sizeinbytes': 4}) def __delfield_esn(self): del self.__field_esn esn=property(__getfield_esn, __setfield_esn, __delfield_esn, None) def __getfield_flag0(self): return self.__field_flag0.getvalue() def __setfield_flag0(self, value): if isinstance(value,UINT): self.__field_flag0=value else: self.__field_flag0=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag0(self): del self.__field_flag0 flag0=property(__getfield_flag0, __setfield_flag0, __delfield_flag0, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UNKNOWN): self.__field_dunno2=value else: self.__field_dunno2=UNKNOWN(value,**{'sizeinbytes': 14}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_ready(self): return self.__field_ready.getvalue() def __setfield_ready(self, value): if isinstance(value,UINT): self.__field_ready=value else: self.__field_ready=UINT(value,**{'sizeinbytes': 1}) def __delfield_ready(self): del self.__field_ready ready=property(__getfield_ready, __setfield_ready, __delfield_ready, None) def __getfield_dunno3(self): return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,UINT): self.__field_dunno3=value else: self.__field_dunno3=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_flag2(self): return self.__field_flag2.getvalue() def __setfield_flag2(self, value): if isinstance(value,UINT): self.__field_flag2=value else: self.__field_flag2=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag2(self): del self.__field_flag2 flag2=property(__getfield_flag2, __setfield_flag2, __delfield_flag2, None) def __getfield_dunno4(self): return self.__field_dunno4.getvalue() def __setfield_dunno4(self, value): if isinstance(value,UNKNOWN): self.__field_dunno4=value else: self.__field_dunno4=UNKNOWN(value,**{'sizeinbytes': 6}) def __delfield_dunno4(self): del self.__field_dunno4 dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None) def __getfield_flag3(self): return self.__field_flag3.getvalue() def __setfield_flag3(self, value): if isinstance(value,UINT): self.__field_flag3=value else: self.__field_flag3=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag3(self): del self.__field_flag3 flag3=property(__getfield_flag3, __setfield_flag3, __delfield_flag3, None) def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UNKNOWN): self.__field_unknown=value else: self.__field_unknown=UNKNOWN(value,) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def iscontainer(self): return True def containerelements(self): yield ('readyvalue', self.__field_readyvalue, None) yield ('command', self.__field_command, None) yield ('dunno1', self.__field_dunno1, None) yield ('esn', self.__field_esn, None) yield ('flag0', self.__field_flag0, None) yield ('dunno2', self.__field_dunno2, None) yield ('ready', self.__field_ready, None) yield ('dunno3', self.__field_dunno3, None) yield ('flag2', self.__field_flag2, None) yield ('dunno4', self.__field_dunno4, None) yield ('flag3', self.__field_flag3, None) yield ('unknown', self.__field_unknown, None) class lockcoderequest(BaseProtogenClass): __fields=['command1', 'command2', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(lockcoderequest,self).__init__(**dict) if self.__class__ is lockcoderequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(lockcoderequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(lockcoderequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command1 except: self.__field_command1=UINT(**{'sizeinbytes': 1, 'constant': 0x26}) self.__field_command1.writetobuffer(buf) try: self.__field_command2 except: self.__field_command2=UINT(**{'sizeinbytes': 2, 'constant': 0x52}) self.__field_command2.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 130}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command1=UINT(**{'sizeinbytes': 1, 'constant': 0x26}) self.__field_command1.readfrombuffer(buf) self.__field_command2=UINT(**{'sizeinbytes': 2, 'constant': 0x52}) self.__field_command2.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 130}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command1(self): try: self.__field_command1 except: self.__field_command1=UINT(**{'sizeinbytes': 1, 'constant': 0x26}) return self.__field_command1.getvalue() def __setfield_command1(self, value): if isinstance(value,UINT): self.__field_command1=value else: self.__field_command1=UINT(value,**{'sizeinbytes': 1, 'constant': 0x26}) def __delfield_command1(self): del self.__field_command1 command1=property(__getfield_command1, __setfield_command1, __delfield_command1, None) def __getfield_command2(self): try: self.__field_command2 except: self.__field_command2=UINT(**{'sizeinbytes': 2, 'constant': 0x52}) return self.__field_command2.getvalue() def __setfield_command2(self, value): if isinstance(value,UINT): self.__field_command2=value else: self.__field_command2=UINT(value,**{'sizeinbytes': 2, 'constant': 0x52}) def __delfield_command2(self): del self.__field_command2 command2=property(__getfield_command2, __setfield_command2, __delfield_command2, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 130}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 130}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('command1', self.__field_command1, None) yield ('command2', self.__field_command2, None) yield ('pad', self.__field_pad, None) class lockcoderesponse(BaseProtogenClass): __fields=['command1', 'command2', 'lockcode', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(lockcoderesponse,self).__init__(**dict) if self.__class__ is lockcoderesponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(lockcoderesponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(lockcoderesponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command1 except: self.__field_command1=UINT(**{'sizeinbytes': 1, 'constant': 0x26}) self.__field_command1.writetobuffer(buf) try: self.__field_command2 except: self.__field_command2=UINT(**{'sizeinbytes': 2, 'constant': 0x52}) self.__field_command2.writetobuffer(buf) self.__field_lockcode.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command1=UINT(**{'sizeinbytes': 1, 'constant': 0x26}) self.__field_command1.readfrombuffer(buf) self.__field_command2=UINT(**{'sizeinbytes': 2, 'constant': 0x52}) self.__field_command2.readfrombuffer(buf) self.__field_lockcode=USTRING(**{'sizeinbytes': 4, 'raiseonunterminatedread': False}) self.__field_lockcode.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command1(self): try: self.__field_command1 except: self.__field_command1=UINT(**{'sizeinbytes': 1, 'constant': 0x26}) return self.__field_command1.getvalue() def __setfield_command1(self, value): if isinstance(value,UINT): self.__field_command1=value else: self.__field_command1=UINT(value,**{'sizeinbytes': 1, 'constant': 0x26}) def __delfield_command1(self): del self.__field_command1 command1=property(__getfield_command1, __setfield_command1, __delfield_command1, None) def __getfield_command2(self): try: self.__field_command2 except: self.__field_command2=UINT(**{'sizeinbytes': 2, 'constant': 0x52}) return self.__field_command2.getvalue() def __setfield_command2(self, value): if isinstance(value,UINT): self.__field_command2=value else: self.__field_command2=UINT(value,**{'sizeinbytes': 2, 'constant': 0x52}) def __delfield_command2(self): del self.__field_command2 command2=property(__getfield_command2, __setfield_command2, __delfield_command2, None) def __getfield_lockcode(self): return self.__field_lockcode.getvalue() def __setfield_lockcode(self, value): if isinstance(value,USTRING): self.__field_lockcode=value else: self.__field_lockcode=USTRING(value,**{'sizeinbytes': 4, 'raiseonunterminatedread': False}) def __delfield_lockcode(self): del self.__field_lockcode lockcode=property(__getfield_lockcode, __setfield_lockcode, __delfield_lockcode, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('command1', self.__field_command1, None) yield ('command2', self.__field_command2, None) yield ('lockcode', self.__field_lockcode, None) yield ('pad', self.__field_pad, None) class sanyofirmwarerequest(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyofirmwarerequest,self).__init__(**dict) if self.__class__ is sanyofirmwarerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyofirmwarerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyofirmwarerequest,kwargs) if len(args): dict2={'sizeinbytes': 1, 'constant': 0x00} dict2.update(kwargs) kwargs=dict2 self.__field_command=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x00}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1, 'constant': 0x00}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class sanyofirmwareresponse(BaseProtogenClass): __fields=['command', 'date1', 'time1', 'date2', 'time2', 'string1', 'dunno1', 'date3', 'dunno2', 'time3', 'dunno3', 'firmware', 'pad', 'phonemodel', 'prl'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyofirmwareresponse,self).__init__(**dict) if self.__class__ is sanyofirmwareresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyofirmwareresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyofirmwareresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_date1.writetobuffer(buf) self.__field_time1.writetobuffer(buf) self.__field_date2.writetobuffer(buf) self.__field_time2.writetobuffer(buf) self.__field_string1.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_date3.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_time3.writetobuffer(buf) self.__field_dunno3.writetobuffer(buf) self.__field_firmware.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self.__field_phonemodel.writetobuffer(buf) self.__field_prl.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_date1=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date1.readfrombuffer(buf) self.__field_time1=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time1.readfrombuffer(buf) self.__field_date2=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date2.readfrombuffer(buf) self.__field_time2=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time2.readfrombuffer(buf) self.__field_string1=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_string1.readfrombuffer(buf) self.__field_dunno1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_dunno1.readfrombuffer(buf) self.__field_date3=USTRING(**{'sizeinbytes': 11, 'terminator': None}) self.__field_date3.readfrombuffer(buf) self.__field_dunno2=UNKNOWN(**{'sizeinbytes': 1}) self.__field_dunno2.readfrombuffer(buf) self.__field_time3=USTRING(**{'sizeinbytes': 8, 'terminator': None}) self.__field_time3.readfrombuffer(buf) self.__field_dunno3=UNKNOWN(**{'sizeinbytes': 11}) self.__field_dunno3.readfrombuffer(buf) self.__field_firmware=USTRING(**{'sizeinbytes': 10, 'terminator': None}) self.__field_firmware.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad.readfrombuffer(buf) self.__field_phonemodel=USTRING(**{'sizeinbytes': 16, 'terminator': None}) self.__field_phonemodel.readfrombuffer(buf) self.__field_prl=USTRING(**{'sizeinbytes': 5, 'terminator': None}) self.__field_prl.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_date1(self): return self.__field_date1.getvalue() def __setfield_date1(self, value): if isinstance(value,USTRING): self.__field_date1=value else: self.__field_date1=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date1(self): del self.__field_date1 date1=property(__getfield_date1, __setfield_date1, __delfield_date1, None) def __getfield_time1(self): return self.__field_time1.getvalue() def __setfield_time1(self, value): if isinstance(value,USTRING): self.__field_time1=value else: self.__field_time1=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time1(self): del self.__field_time1 time1=property(__getfield_time1, __setfield_time1, __delfield_time1, None) def __getfield_date2(self): return self.__field_date2.getvalue() def __setfield_date2(self, value): if isinstance(value,USTRING): self.__field_date2=value else: self.__field_date2=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date2(self): del self.__field_date2 date2=property(__getfield_date2, __setfield_date2, __delfield_date2, None) def __getfield_time2(self): return self.__field_time2.getvalue() def __setfield_time2(self, value): if isinstance(value,USTRING): self.__field_time2=value else: self.__field_time2=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time2(self): del self.__field_time2 time2=property(__getfield_time2, __setfield_time2, __delfield_time2, None) def __getfield_string1(self): return self.__field_string1.getvalue() def __setfield_string1(self, value): if isinstance(value,USTRING): self.__field_string1=value else: self.__field_string1=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_string1(self): del self.__field_string1 string1=property(__getfield_string1, __setfield_string1, __delfield_string1, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UNKNOWN): self.__field_dunno1=value else: self.__field_dunno1=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_date3(self): return self.__field_date3.getvalue() def __setfield_date3(self, value): if isinstance(value,USTRING): self.__field_date3=value else: self.__field_date3=USTRING(value,**{'sizeinbytes': 11, 'terminator': None}) def __delfield_date3(self): del self.__field_date3 date3=property(__getfield_date3, __setfield_date3, __delfield_date3, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UNKNOWN): self.__field_dunno2=value else: self.__field_dunno2=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_time3(self): return self.__field_time3.getvalue() def __setfield_time3(self, value): if isinstance(value,USTRING): self.__field_time3=value else: self.__field_time3=USTRING(value,**{'sizeinbytes': 8, 'terminator': None}) def __delfield_time3(self): del self.__field_time3 time3=property(__getfield_time3, __setfield_time3, __delfield_time3, None) def __getfield_dunno3(self): return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,UNKNOWN): self.__field_dunno3=value else: self.__field_dunno3=UNKNOWN(value,**{'sizeinbytes': 11}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_firmware(self): return self.__field_firmware.getvalue() def __setfield_firmware(self, value): if isinstance(value,USTRING): self.__field_firmware=value else: self.__field_firmware=USTRING(value,**{'sizeinbytes': 10, 'terminator': None}) def __delfield_firmware(self): del self.__field_firmware firmware=property(__getfield_firmware, __setfield_firmware, __delfield_firmware, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_phonemodel(self): return self.__field_phonemodel.getvalue() def __setfield_phonemodel(self, value): if isinstance(value,USTRING): self.__field_phonemodel=value else: self.__field_phonemodel=USTRING(value,**{'sizeinbytes': 16, 'terminator': None}) def __delfield_phonemodel(self): del self.__field_phonemodel phonemodel=property(__getfield_phonemodel, __setfield_phonemodel, __delfield_phonemodel, None) def __getfield_prl(self): return self.__field_prl.getvalue() def __setfield_prl(self, value): if isinstance(value,USTRING): self.__field_prl=value else: self.__field_prl=USTRING(value,**{'sizeinbytes': 5, 'terminator': None}) def __delfield_prl(self): del self.__field_prl prl=property(__getfield_prl, __setfield_prl, __delfield_prl, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('date1', self.__field_date1, None) yield ('time1', self.__field_time1, None) yield ('date2', self.__field_date2, None) yield ('time2', self.__field_time2, None) yield ('string1', self.__field_string1, None) yield ('dunno1', self.__field_dunno1, None) yield ('date3', self.__field_date3, None) yield ('dunno2', self.__field_dunno2, None) yield ('time3', self.__field_time3, None) yield ('dunno3', self.__field_dunno3, None) yield ('firmware', self.__field_firmware, None) yield ('pad', self.__field_pad, None) yield ('phonemodel', self.__field_phonemodel, None) yield ('prl', self.__field_prl, None) class reconditionedrequest(BaseProtogenClass): __fields=['command1', 'command2', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(reconditionedrequest,self).__init__(**dict) if self.__class__ is reconditionedrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(reconditionedrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(reconditionedrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command1 except: self.__field_command1=UINT(**{'sizeinbytes': 1, 'constant': 0x26}) self.__field_command1.writetobuffer(buf) try: self.__field_command2 except: self.__field_command2=UINT(**{'sizeinbytes': 2, 'constant': 0x0c1b}) self.__field_command2.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 130}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command1=UINT(**{'sizeinbytes': 1, 'constant': 0x26}) self.__field_command1.readfrombuffer(buf) self.__field_command2=UINT(**{'sizeinbytes': 2, 'constant': 0x0c1b}) self.__field_command2.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 130}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command1(self): try: self.__field_command1 except: self.__field_command1=UINT(**{'sizeinbytes': 1, 'constant': 0x26}) return self.__field_command1.getvalue() def __setfield_command1(self, value): if isinstance(value,UINT): self.__field_command1=value else: self.__field_command1=UINT(value,**{'sizeinbytes': 1, 'constant': 0x26}) def __delfield_command1(self): del self.__field_command1 command1=property(__getfield_command1, __setfield_command1, __delfield_command1, None) def __getfield_command2(self): try: self.__field_command2 except: self.__field_command2=UINT(**{'sizeinbytes': 2, 'constant': 0x0c1b}) return self.__field_command2.getvalue() def __setfield_command2(self, value): if isinstance(value,UINT): self.__field_command2=value else: self.__field_command2=UINT(value,**{'sizeinbytes': 2, 'constant': 0x0c1b}) def __delfield_command2(self): del self.__field_command2 command2=property(__getfield_command2, __setfield_command2, __delfield_command2, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 130}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 130}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('command1', self.__field_command1, None) yield ('command2', self.__field_command2, None) yield ('pad', self.__field_pad, None) class reconditionedresponse(BaseProtogenClass): __fields=['command1', 'command2', 'reconditioned', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(reconditionedresponse,self).__init__(**dict) if self.__class__ is reconditionedresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(reconditionedresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(reconditionedresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command1.writetobuffer(buf) self.__field_command2.writetobuffer(buf) self.__field_reconditioned.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command1=UINT(**{'sizeinbytes': 1, 'constant': 0x26}) self.__field_command1.readfrombuffer(buf) self.__field_command2=UINT(**{'sizeinbytes': 2, 'constant': 0x0c1b}) self.__field_command2.readfrombuffer(buf) self.__field_reconditioned=UINT(**{'sizeinbytes': 1}) self.__field_reconditioned.readfrombuffer(buf) self.__field_pad=UNKNOWN() self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command1(self): return self.__field_command1.getvalue() def __setfield_command1(self, value): if isinstance(value,UINT): self.__field_command1=value else: self.__field_command1=UINT(value,**{'sizeinbytes': 1, 'constant': 0x26}) def __delfield_command1(self): del self.__field_command1 command1=property(__getfield_command1, __setfield_command1, __delfield_command1, None) def __getfield_command2(self): return self.__field_command2.getvalue() def __setfield_command2(self, value): if isinstance(value,UINT): self.__field_command2=value else: self.__field_command2=UINT(value,**{'sizeinbytes': 2, 'constant': 0x0c1b}) def __delfield_command2(self): del self.__field_command2 command2=property(__getfield_command2, __setfield_command2, __delfield_command2, None) def __getfield_reconditioned(self): return self.__field_reconditioned.getvalue() def __setfield_reconditioned(self, value): if isinstance(value,UINT): self.__field_reconditioned=value else: self.__field_reconditioned=UINT(value,**{'sizeinbytes': 1}) def __delfield_reconditioned(self): del self.__field_reconditioned reconditioned=property(__getfield_reconditioned, __setfield_reconditioned, __delfield_reconditioned, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('command1', self.__field_command1, None) yield ('command2', self.__field_command2, None) yield ('reconditioned', self.__field_reconditioned, None) yield ('pad', self.__field_pad, None) class phonenumberrequest(BaseProtogenClass): __fields=['command1', 'command2', 'zero', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonenumberrequest,self).__init__(**dict) if self.__class__ is phonenumberrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonenumberrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonenumberrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command1 except: self.__field_command1=UINT(**{'sizeinbytes': 1, 'constant': 0x26}) self.__field_command1.writetobuffer(buf) try: self.__field_command2 except: self.__field_command2=UINT(**{'sizeinbytes': 1, 'constant': 0xb2}) self.__field_command2.writetobuffer(buf) try: self.__field_zero except: self.__field_zero=UINT(**{'sizeinbytes': 1, 'constant': 0}) self.__field_zero.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 130}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command1=UINT(**{'sizeinbytes': 1, 'constant': 0x26}) self.__field_command1.readfrombuffer(buf) self.__field_command2=UINT(**{'sizeinbytes': 1, 'constant': 0xb2}) self.__field_command2.readfrombuffer(buf) self.__field_zero=UINT(**{'sizeinbytes': 1, 'constant': 0}) self.__field_zero.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 130}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command1(self): try: self.__field_command1 except: self.__field_command1=UINT(**{'sizeinbytes': 1, 'constant': 0x26}) return self.__field_command1.getvalue() def __setfield_command1(self, value): if isinstance(value,UINT): self.__field_command1=value else: self.__field_command1=UINT(value,**{'sizeinbytes': 1, 'constant': 0x26}) def __delfield_command1(self): del self.__field_command1 command1=property(__getfield_command1, __setfield_command1, __delfield_command1, None) def __getfield_command2(self): try: self.__field_command2 except: self.__field_command2=UINT(**{'sizeinbytes': 1, 'constant': 0xb2}) return self.__field_command2.getvalue() def __setfield_command2(self, value): if isinstance(value,UINT): self.__field_command2=value else: self.__field_command2=UINT(value,**{'sizeinbytes': 1, 'constant': 0xb2}) def __delfield_command2(self): del self.__field_command2 command2=property(__getfield_command2, __setfield_command2, __delfield_command2, None) def __getfield_zero(self): try: self.__field_zero except: self.__field_zero=UINT(**{'sizeinbytes': 1, 'constant': 0}) return self.__field_zero.getvalue() def __setfield_zero(self, value): if isinstance(value,UINT): self.__field_zero=value else: self.__field_zero=UINT(value,**{'sizeinbytes': 1, 'constant': 0}) def __delfield_zero(self): del self.__field_zero zero=property(__getfield_zero, __setfield_zero, __delfield_zero, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 130}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 130}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('command1', self.__field_command1, None) yield ('command2', self.__field_command2, None) yield ('zero', self.__field_zero, None) yield ('pad', self.__field_pad, None) class phonenumberresponse(BaseProtogenClass): __fields=['command1', 'command2', 'pad1', 'myphonenumber', 'pad2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonenumberresponse,self).__init__(**dict) if self.__class__ is phonenumberresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonenumberresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonenumberresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command1.writetobuffer(buf) self.__field_command2.writetobuffer(buf) self.__field_pad1.writetobuffer(buf) self.__field_myphonenumber.writetobuffer(buf) self.__field_pad2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command1=UINT(**{'sizeinbytes': 1, 'constant': 0x26}) self.__field_command1.readfrombuffer(buf) self.__field_command2=UINT(**{'sizeinbytes': 1, 'constant': 0xb2}) self.__field_command2.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad1.readfrombuffer(buf) self.__field_myphonenumber=USTRING(**{'sizeinbytes': 10, 'raiseonunterminatedread': False}) self.__field_myphonenumber.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 119}) self.__field_pad2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command1(self): return self.__field_command1.getvalue() def __setfield_command1(self, value): if isinstance(value,UINT): self.__field_command1=value else: self.__field_command1=UINT(value,**{'sizeinbytes': 1, 'constant': 0x26}) def __delfield_command1(self): del self.__field_command1 command1=property(__getfield_command1, __setfield_command1, __delfield_command1, None) def __getfield_command2(self): return self.__field_command2.getvalue() def __setfield_command2(self, value): if isinstance(value,UINT): self.__field_command2=value else: self.__field_command2=UINT(value,**{'sizeinbytes': 1, 'constant': 0xb2}) def __delfield_command2(self): del self.__field_command2 command2=property(__getfield_command2, __setfield_command2, __delfield_command2, None) def __getfield_pad1(self): return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 2}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_myphonenumber(self): return self.__field_myphonenumber.getvalue() def __setfield_myphonenumber(self, value): if isinstance(value,USTRING): self.__field_myphonenumber=value else: self.__field_myphonenumber=USTRING(value,**{'sizeinbytes': 10, 'raiseonunterminatedread': False}) def __delfield_myphonenumber(self): del self.__field_myphonenumber myphonenumber=property(__getfield_myphonenumber, __setfield_myphonenumber, __delfield_myphonenumber, None) def __getfield_pad2(self): return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 119}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def iscontainer(self): return True def containerelements(self): yield ('command1', self.__field_command1, None) yield ('command2', self.__field_command2, None) yield ('pad1', self.__field_pad1, None) yield ('myphonenumber', self.__field_myphonenumber, None) yield ('pad2', self.__field_pad2, None) class sanyoheader(BaseProtogenClass): __fields=['readwrite', 'command', 'packettype'] def __init__(self, *args, **kwargs): dict={} # User specified arguments in the packet description dict.update({'readwrite': 0x0d}) # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyoheader,self).__init__(**dict) if self.__class__ is sanyoheader: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyoheader,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyoheader,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_readwrite.writetobuffer(buf) self.__field_command.writetobuffer(buf) self.__field_packettype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_readwrite=UINT(**{'sizeinbytes': 1}) self.__field_readwrite.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 1}) self.__field_command.readfrombuffer(buf) self.__field_packettype=UINT(**{'sizeinbytes': 1}) self.__field_packettype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_readwrite(self): return self.__field_readwrite.getvalue() def __setfield_readwrite(self, value): if isinstance(value,UINT): self.__field_readwrite=value else: self.__field_readwrite=UINT(value,**{'sizeinbytes': 1}) def __delfield_readwrite(self): del self.__field_readwrite readwrite=property(__getfield_readwrite, __setfield_readwrite, __delfield_readwrite, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_packettype(self): return self.__field_packettype.getvalue() def __setfield_packettype(self, value): if isinstance(value,UINT): self.__field_packettype=value else: self.__field_packettype=UINT(value,**{'sizeinbytes': 1}) def __delfield_packettype(self): del self.__field_packettype packettype=property(__getfield_packettype, __setfield_packettype, __delfield_packettype, None) def iscontainer(self): return True def containerelements(self): yield ('readwrite', self.__field_readwrite, None) yield ('command', self.__field_command, None) yield ('packettype', self.__field_packettype, None) class esnrequest(BaseProtogenClass): __fields=['command'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(esnrequest,self).__init__(**dict) if self.__class__ is esnrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(esnrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(esnrequest,kwargs) if len(args): dict2={'sizeinbytes': 1, 'constant': 0x01} dict2.update(kwargs) kwargs=dict2 self.__field_command=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x01}) self.__field_command.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x01}) self.__field_command.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): try: self.__field_command except: self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x01}) return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1, 'constant': 0x01}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) class esnresponse(BaseProtogenClass): __fields=['command', 'esn'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(esnresponse,self).__init__(**dict) if self.__class__ is esnresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(esnresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(esnresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_command.writetobuffer(buf) self.__field_esn.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_command=UINT(**{'sizeinbytes': 1, 'constant': 0x01}) self.__field_command.readfrombuffer(buf) self.__field_esn=UINT(**{'sizeinbytes': 4}) self.__field_esn.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 1, 'constant': 0x01}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_esn(self): return self.__field_esn.getvalue() def __setfield_esn(self, value): if isinstance(value,UINT): self.__field_esn=value else: self.__field_esn=UINT(value,**{'sizeinbytes': 4}) def __delfield_esn(self): del self.__field_esn esn=property(__getfield_esn, __setfield_esn, __delfield_esn, None) def iscontainer(self): return True def containerelements(self): yield ('command', self.__field_command, None) yield ('esn', self.__field_esn, None) class ownerinforequest(BaseProtogenClass): __fields=['header', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ownerinforequest,self).__init__(**dict) if self.__class__ is ownerinforequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ownerinforequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ownerinforequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3b}) self.__field_header.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 502}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3b}) self.__field_header.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 502}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3b}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c, 'command': 0x3b}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 502}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 502}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('pad', self.__field_pad, None) class ownerentry(BaseProtogenClass): __fields=['ownername', 'birthyear', 'birthmonth', 'birthday', 'bloodtype', 'address', 'pad', 'homeemail', 'workemail', 'homephone', 'workphone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ownerentry,self).__init__(**dict) if self.__class__ is ownerentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ownerentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ownerentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_ownername.writetobuffer(buf) self.__field_birthyear.writetobuffer(buf) self.__field_birthmonth.writetobuffer(buf) self.__field_birthday.writetobuffer(buf) self.__field_bloodtype.writetobuffer(buf) self.__field_address.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 14}) self.__field_pad.writetobuffer(buf) self.__field_homeemail.writetobuffer(buf) self.__field_workemail.writetobuffer(buf) self.__field_homephone.writetobuffer(buf) self.__field_workphone.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_ownername=USTRING(**{'sizeinbytes': 16, 'raiseonunterminatedread': False}) self.__field_ownername.readfrombuffer(buf) self.__field_birthyear=UINT(**{'sizeinbytes': 2}) self.__field_birthyear.readfrombuffer(buf) self.__field_birthmonth=UINT(**{'sizeinbytes': 1}) self.__field_birthmonth.readfrombuffer(buf) self.__field_birthday=UINT(**{'sizeinbytes': 1}) self.__field_birthday.readfrombuffer(buf) self.__field_bloodtype=UINT(**{'sizeinbytes': 1}) self.__field_bloodtype.readfrombuffer(buf) self.__field_address=USTRING(**{'sizeinbytes': 96, 'raiseonunterminatedread': False}) self.__field_address.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 14}) self.__field_pad.readfrombuffer(buf) self.__field_homeemail=USTRING(**{'sizeinbytes': 48, 'raiseonunterminatedread': False}) self.__field_homeemail.readfrombuffer(buf) self.__field_workemail=USTRING(**{'sizeinbytes': 48, 'raiseonunterminatedread': False}) self.__field_workemail.readfrombuffer(buf) self.__field_homephone=USTRING(**{'sizeinbytes': 48, 'raiseonunterminatedread': False}) self.__field_homephone.readfrombuffer(buf) self.__field_workphone=USTRING(**{'sizeinbytes': 48, 'raiseonunterminatedread': False}) self.__field_workphone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_ownername(self): return self.__field_ownername.getvalue() def __setfield_ownername(self, value): if isinstance(value,USTRING): self.__field_ownername=value else: self.__field_ownername=USTRING(value,**{'sizeinbytes': 16, 'raiseonunterminatedread': False}) def __delfield_ownername(self): del self.__field_ownername ownername=property(__getfield_ownername, __setfield_ownername, __delfield_ownername, None) def __getfield_birthyear(self): return self.__field_birthyear.getvalue() def __setfield_birthyear(self, value): if isinstance(value,UINT): self.__field_birthyear=value else: self.__field_birthyear=UINT(value,**{'sizeinbytes': 2}) def __delfield_birthyear(self): del self.__field_birthyear birthyear=property(__getfield_birthyear, __setfield_birthyear, __delfield_birthyear, None) def __getfield_birthmonth(self): return self.__field_birthmonth.getvalue() def __setfield_birthmonth(self, value): if isinstance(value,UINT): self.__field_birthmonth=value else: self.__field_birthmonth=UINT(value,**{'sizeinbytes': 1}) def __delfield_birthmonth(self): del self.__field_birthmonth birthmonth=property(__getfield_birthmonth, __setfield_birthmonth, __delfield_birthmonth, None) def __getfield_birthday(self): return self.__field_birthday.getvalue() def __setfield_birthday(self, value): if isinstance(value,UINT): self.__field_birthday=value else: self.__field_birthday=UINT(value,**{'sizeinbytes': 1}) def __delfield_birthday(self): del self.__field_birthday birthday=property(__getfield_birthday, __setfield_birthday, __delfield_birthday, None) def __getfield_bloodtype(self): return self.__field_bloodtype.getvalue() def __setfield_bloodtype(self, value): if isinstance(value,UINT): self.__field_bloodtype=value else: self.__field_bloodtype=UINT(value,**{'sizeinbytes': 1}) def __delfield_bloodtype(self): del self.__field_bloodtype bloodtype=property(__getfield_bloodtype, __setfield_bloodtype, __delfield_bloodtype, "0: ?, 1: A, 2: B, 3: O, 4: AB") def __getfield_address(self): return self.__field_address.getvalue() def __setfield_address(self, value): if isinstance(value,USTRING): self.__field_address=value else: self.__field_address=USTRING(value,**{'sizeinbytes': 96, 'raiseonunterminatedread': False}) def __delfield_address(self): del self.__field_address address=property(__getfield_address, __setfield_address, __delfield_address, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 14}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 14}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_homeemail(self): return self.__field_homeemail.getvalue() def __setfield_homeemail(self, value): if isinstance(value,USTRING): self.__field_homeemail=value else: self.__field_homeemail=USTRING(value,**{'sizeinbytes': 48, 'raiseonunterminatedread': False}) def __delfield_homeemail(self): del self.__field_homeemail homeemail=property(__getfield_homeemail, __setfield_homeemail, __delfield_homeemail, None) def __getfield_workemail(self): return self.__field_workemail.getvalue() def __setfield_workemail(self, value): if isinstance(value,USTRING): self.__field_workemail=value else: self.__field_workemail=USTRING(value,**{'sizeinbytes': 48, 'raiseonunterminatedread': False}) def __delfield_workemail(self): del self.__field_workemail workemail=property(__getfield_workemail, __setfield_workemail, __delfield_workemail, None) def __getfield_homephone(self): return self.__field_homephone.getvalue() def __setfield_homephone(self, value): if isinstance(value,USTRING): self.__field_homephone=value else: self.__field_homephone=USTRING(value,**{'sizeinbytes': 48, 'raiseonunterminatedread': False}) def __delfield_homephone(self): del self.__field_homephone homephone=property(__getfield_homephone, __setfield_homephone, __delfield_homephone, None) def __getfield_workphone(self): return self.__field_workphone.getvalue() def __setfield_workphone(self, value): if isinstance(value,USTRING): self.__field_workphone=value else: self.__field_workphone=USTRING(value,**{'sizeinbytes': 48, 'raiseonunterminatedread': False}) def __delfield_workphone(self): del self.__field_workphone workphone=property(__getfield_workphone, __setfield_workphone, __delfield_workphone, None) def iscontainer(self): return True def containerelements(self): yield ('ownername', self.__field_ownername, None) yield ('birthyear', self.__field_birthyear, None) yield ('birthmonth', self.__field_birthmonth, None) yield ('birthday', self.__field_birthday, None) yield ('bloodtype', self.__field_bloodtype, "0: ?, 1: A, 2: B, 3: O, 4: AB") yield ('address', self.__field_address, None) yield ('pad', self.__field_pad, None) yield ('homeemail', self.__field_homeemail, None) yield ('workemail', self.__field_workemail, None) yield ('homephone', self.__field_homephone, None) yield ('workphone', self.__field_workphone, None) class ownerinforesponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ownerinforesponse,self).__init__(**dict) if self.__class__ is ownerinforesponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ownerinforesponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ownerinforesponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=ownerentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 178}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,ownerentry): self.__field_entry=value else: self.__field_entry=ownerentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 178}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class eventrequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventrequest,self).__init__(**dict) if self.__class__ is eventrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x23}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x23}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x23}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c, 'command': 0x23}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 501}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class evententry(BaseProtogenClass): __fields=['slot', 'flag', 'eventname', 'pad1', 'eventname_len', 'start', 'end', 'location', 'pad2', 'location_len', 'ringtone', 'alarmdiff', 'period', 'dom', 'alarm', 'serial'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(evententry,self).__init__(**dict) if self.__class__ is evententry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(evententry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(evententry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) self.__field_eventname.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.writetobuffer(buf) self.__field_eventname_len.writetobuffer(buf) self.__field_start.writetobuffer(buf) self.__field_end.writetobuffer(buf) self.__field_location.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad2.writetobuffer(buf) self.__field_location_len.writetobuffer(buf) self.__field_ringtone.writetobuffer(buf) self.__field_alarmdiff.writetobuffer(buf) self.__field_period.writetobuffer(buf) self.__field_dom.writetobuffer(buf) self.__field_alarm.writetobuffer(buf) try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_eventname=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_eventname.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.readfrombuffer(buf) self.__field_eventname_len=UINT(**{'sizeinbytes': 1}) self.__field_eventname_len.readfrombuffer(buf) self.__field_start=UINT(**{'sizeinbytes': 4}) self.__field_start.readfrombuffer(buf) self.__field_end=UINT(**{'sizeinbytes': 4}) self.__field_end.readfrombuffer(buf) self.__field_location=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_location.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad2.readfrombuffer(buf) self.__field_location_len=UINT(**{'sizeinbytes': 1}) self.__field_location_len.readfrombuffer(buf) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self.__field_alarmdiff=UINT(**{'sizeinbytes': 4}) self.__field_alarmdiff.readfrombuffer(buf) self.__field_period=UINT(**{'sizeinbytes': 1}) self.__field_period.readfrombuffer(buf) self.__field_dom=UINT(**{'sizeinbytes': 1}) self.__field_dom.readfrombuffer(buf) self.__field_alarm=UINT(**{'sizeinbytes': 4}) self.__field_alarm.readfrombuffer(buf) self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, "0: Not used, 1: Scheduled, 2: Already Happened") def __getfield_eventname(self): return self.__field_eventname.getvalue() def __setfield_eventname(self, value): if isinstance(value,USTRING): self.__field_eventname=value else: self.__field_eventname=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_eventname(self): del self.__field_eventname eventname=property(__getfield_eventname, __setfield_eventname, __delfield_eventname, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_eventname_len(self): return self.__field_eventname_len.getvalue() def __setfield_eventname_len(self, value): if isinstance(value,UINT): self.__field_eventname_len=value else: self.__field_eventname_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_eventname_len(self): del self.__field_eventname_len eventname_len=property(__getfield_eventname_len, __setfield_eventname_len, __delfield_eventname_len, None) def __getfield_start(self): return self.__field_start.getvalue() def __setfield_start(self, value): if isinstance(value,UINT): self.__field_start=value else: self.__field_start=UINT(value,**{'sizeinbytes': 4}) def __delfield_start(self): del self.__field_start start=property(__getfield_start, __setfield_start, __delfield_start, "# seconds since Jan 1, 1980 approximately") def __getfield_end(self): return self.__field_end.getvalue() def __setfield_end(self, value): if isinstance(value,UINT): self.__field_end=value else: self.__field_end=UINT(value,**{'sizeinbytes': 4}) def __delfield_end(self): del self.__field_end end=property(__getfield_end, __setfield_end, __delfield_end, None) def __getfield_location(self): return self.__field_location.getvalue() def __setfield_location(self, value): if isinstance(value,USTRING): self.__field_location=value else: self.__field_location=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_location(self): del self.__field_location location=property(__getfield_location, __setfield_location, __delfield_location, None) def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 7}) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_location_len(self): return self.__field_location_len.getvalue() def __setfield_location_len(self, value): if isinstance(value,UINT): self.__field_location_len=value else: self.__field_location_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_location_len(self): del self.__field_location_len location_len=property(__getfield_location_len, __setfield_location_len, __delfield_location_len, None) def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "0: Beep, 1: Voice, 2: Silent") def __getfield_alarmdiff(self): return self.__field_alarmdiff.getvalue() def __setfield_alarmdiff(self, value): if isinstance(value,UINT): self.__field_alarmdiff=value else: self.__field_alarmdiff=UINT(value,**{'sizeinbytes': 4}) def __delfield_alarmdiff(self): del self.__field_alarmdiff alarmdiff=property(__getfield_alarmdiff, __setfield_alarmdiff, __delfield_alarmdiff, "Displayed alarm time") def __getfield_period(self): return self.__field_period.getvalue() def __setfield_period(self, value): if isinstance(value,UINT): self.__field_period=value else: self.__field_period=UINT(value,**{'sizeinbytes': 1}) def __delfield_period(self): del self.__field_period period=property(__getfield_period, __setfield_period, __delfield_period, "No, Daily, Weekly, Monthly, Yearly") def __getfield_dom(self): return self.__field_dom.getvalue() def __setfield_dom(self, value): if isinstance(value,UINT): self.__field_dom=value else: self.__field_dom=UINT(value,**{'sizeinbytes': 1}) def __delfield_dom(self): del self.__field_dom dom=property(__getfield_dom, __setfield_dom, __delfield_dom, "Day of month for the event") def __getfield_alarm(self): return self.__field_alarm.getvalue() def __setfield_alarm(self, value): if isinstance(value,UINT): self.__field_alarm=value else: self.__field_alarm=UINT(value,**{'sizeinbytes': 4}) def __delfield_alarm(self): del self.__field_alarm alarm=property(__getfield_alarm, __setfield_alarm, __delfield_alarm, None) def __getfield_serial(self): try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_serial.getvalue() def __setfield_serial(self, value): if isinstance(value,UINT): self.__field_serial=value else: self.__field_serial=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_serial(self): del self.__field_serial serial=property(__getfield_serial, __setfield_serial, __delfield_serial, "Some kind of serial number") def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, "0: Not used, 1: Scheduled, 2: Already Happened") yield ('eventname', self.__field_eventname, None) yield ('pad1', self.__field_pad1, None) yield ('eventname_len', self.__field_eventname_len, None) yield ('start', self.__field_start, "# seconds since Jan 1, 1980 approximately") yield ('end', self.__field_end, None) yield ('location', self.__field_location, None) yield ('pad2', self.__field_pad2, None) yield ('location_len', self.__field_location_len, None) yield ('ringtone', self.__field_ringtone, "0: Beep, 1: Voice, 2: Silent") yield ('alarmdiff', self.__field_alarmdiff, "Displayed alarm time") yield ('period', self.__field_period, "No, Daily, Weekly, Monthly, Yearly") yield ('dom', self.__field_dom, "Day of month for the event") yield ('alarm', self.__field_alarm, None) yield ('serial', self.__field_serial, "Some kind of serial number") class eventresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventresponse,self).__init__(**dict) if self.__class__ is eventresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=evententry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 436}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,evententry): self.__field_entry=value else: self.__field_entry=evententry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 436}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class eventupdaterequest(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(eventupdaterequest,self).__init__(**dict) if self.__class__ is eventupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(eventupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(eventupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'readwrite': 0x0e, 'packettype': 0x0c, 'command':0x23}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 436}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'readwrite': 0x0e, 'packettype': 0x0c, 'command':0x23}) self.__field_header.readfrombuffer(buf) self.__field_entry=evententry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 436}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'readwrite': 0x0e, 'packettype': 0x0c, 'command':0x23}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'readwrite': 0x0e, 'packettype': 0x0c, 'command':0x23}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,evententry): self.__field_entry=value else: self.__field_entry=evententry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 436}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 436}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class callalarmrequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmrequest,self).__init__(**dict) if self.__class__ is callalarmrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x24}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x24}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x24}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c, 'command': 0x24}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 501}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class callalarmentry(BaseProtogenClass): __fields=['ringtone', 'slot', 'flag', 'dunno1', 'phonenum', 'phonenum_len', 'date', 'period', 'dom', 'datedup', 'name', 'pad1', 'name_len', 'phonenumbertype', 'phonenumberslot', 'serial'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmentry,self).__init__(**dict) if self.__class__ is callalarmentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_ringtone except: self.__field_ringtone=UINT(**{'constant': 0}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_dunno1.writetobuffer(buf) self.__field_phonenum.writetobuffer(buf) self.__field_phonenum_len.writetobuffer(buf) self.__field_date.writetobuffer(buf) self.__field_period.writetobuffer(buf) self.__field_dom.writetobuffer(buf) self.__field_datedup.writetobuffer(buf) self.__field_name.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.writetobuffer(buf) self.__field_name_len.writetobuffer(buf) self.__field_phonenumbertype.writetobuffer(buf) self.__field_phonenumberslot.writetobuffer(buf) try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_dunno1=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_dunno1.readfrombuffer(buf) self.__field_phonenum=USTRING(**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) self.__field_phonenum.readfrombuffer(buf) self.__field_phonenum_len=UINT(**{'sizeinbytes': 1}) self.__field_phonenum_len.readfrombuffer(buf) self.__field_date=UINT(**{'sizeinbytes': 4}) self.__field_date.readfrombuffer(buf) self.__field_period=UINT(**{'sizeinbytes': 1}) self.__field_period.readfrombuffer(buf) self.__field_dom=UINT(**{'sizeinbytes': 1}) self.__field_dom.readfrombuffer(buf) self.__field_datedup=UINT(**{'sizeinbytes': 4}) self.__field_datedup.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_name.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.readfrombuffer(buf) self.__field_name_len=UINT(**{'sizeinbytes': 1}) self.__field_name_len.readfrombuffer(buf) self.__field_phonenumbertype=UINT(**{'sizeinbytes': 1}) self.__field_phonenumbertype.readfrombuffer(buf) self.__field_phonenumberslot=UINT(**{'sizeinbytes': 2}) self.__field_phonenumberslot.readfrombuffer(buf) self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_serial.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'constant': 0}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, "0: Not used, 1: Scheduled, 2: Already Happened") def __getfield_dunno1(self): try: self.__field_dunno1 except: self.__field_dunno1=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UINT): self.__field_dunno1=value else: self.__field_dunno1=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, "Related to Snooze?") def __getfield_phonenum(self): return self.__field_phonenum.getvalue() def __setfield_phonenum(self, value): if isinstance(value,USTRING): self.__field_phonenum=value else: self.__field_phonenum=USTRING(value,**{'sizeinbytes': 49, 'raiseonunterminatedread': False}) def __delfield_phonenum(self): del self.__field_phonenum phonenum=property(__getfield_phonenum, __setfield_phonenum, __delfield_phonenum, None) def __getfield_phonenum_len(self): return self.__field_phonenum_len.getvalue() def __setfield_phonenum_len(self, value): if isinstance(value,UINT): self.__field_phonenum_len=value else: self.__field_phonenum_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_phonenum_len(self): del self.__field_phonenum_len phonenum_len=property(__getfield_phonenum_len, __setfield_phonenum_len, __delfield_phonenum_len, None) def __getfield_date(self): return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,UINT): self.__field_date=value else: self.__field_date=UINT(value,**{'sizeinbytes': 4}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, "# seconds since Jan 1, 1980 approximately") def __getfield_period(self): return self.__field_period.getvalue() def __setfield_period(self, value): if isinstance(value,UINT): self.__field_period=value else: self.__field_period=UINT(value,**{'sizeinbytes': 1}) def __delfield_period(self): del self.__field_period period=property(__getfield_period, __setfield_period, __delfield_period, "No, Daily, Weekly, Monthly, Yearly") def __getfield_dom(self): return self.__field_dom.getvalue() def __setfield_dom(self, value): if isinstance(value,UINT): self.__field_dom=value else: self.__field_dom=UINT(value,**{'sizeinbytes': 1}) def __delfield_dom(self): del self.__field_dom dom=property(__getfield_dom, __setfield_dom, __delfield_dom, "Day of month for the event") def __getfield_datedup(self): return self.__field_datedup.getvalue() def __setfield_datedup(self, value): if isinstance(value,UINT): self.__field_datedup=value else: self.__field_datedup=UINT(value,**{'sizeinbytes': 4}) def __delfield_datedup(self): del self.__field_datedup datedup=property(__getfield_datedup, __setfield_datedup, __delfield_datedup, "Copy of the date. Always the same???") def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_name_len(self): return self.__field_name_len.getvalue() def __setfield_name_len(self, value): if isinstance(value,UINT): self.__field_name_len=value else: self.__field_name_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_name_len(self): del self.__field_name_len name_len=property(__getfield_name_len, __setfield_name_len, __delfield_name_len, None) def __getfield_phonenumbertype(self): return self.__field_phonenumbertype.getvalue() def __setfield_phonenumbertype(self, value): if isinstance(value,UINT): self.__field_phonenumbertype=value else: self.__field_phonenumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_phonenumbertype(self): del self.__field_phonenumbertype phonenumbertype=property(__getfield_phonenumbertype, __setfield_phonenumbertype, __delfield_phonenumbertype, "1: Home, 2: Work, ...") def __getfield_phonenumberslot(self): return self.__field_phonenumberslot.getvalue() def __setfield_phonenumberslot(self, value): if isinstance(value,UINT): self.__field_phonenumberslot=value else: self.__field_phonenumberslot=UINT(value,**{'sizeinbytes': 2}) def __delfield_phonenumberslot(self): del self.__field_phonenumberslot phonenumberslot=property(__getfield_phonenumberslot, __setfield_phonenumberslot, __delfield_phonenumberslot, None) def __getfield_serial(self): try: self.__field_serial except: self.__field_serial=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_serial.getvalue() def __setfield_serial(self, value): if isinstance(value,UINT): self.__field_serial=value else: self.__field_serial=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_serial(self): del self.__field_serial serial=property(__getfield_serial, __setfield_serial, __delfield_serial, None) def iscontainer(self): return True def containerelements(self): yield ('ringtone', self.__field_ringtone, None) yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, "0: Not used, 1: Scheduled, 2: Already Happened") yield ('dunno1', self.__field_dunno1, "Related to Snooze?") yield ('phonenum', self.__field_phonenum, None) yield ('phonenum_len', self.__field_phonenum_len, None) yield ('date', self.__field_date, "# seconds since Jan 1, 1980 approximately") yield ('period', self.__field_period, "No, Daily, Weekly, Monthly, Yearly") yield ('dom', self.__field_dom, "Day of month for the event") yield ('datedup', self.__field_datedup, "Copy of the date. Always the same???") yield ('name', self.__field_name, None) yield ('pad1', self.__field_pad1, None) yield ('name_len', self.__field_name_len, None) yield ('phonenumbertype', self.__field_phonenumbertype, "1: Home, 2: Work, ...") yield ('phonenumberslot', self.__field_phonenumberslot, None) yield ('serial', self.__field_serial, None) class callalarmresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmresponse,self).__init__(**dict) if self.__class__ is callalarmresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=callalarmentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 417}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,callalarmentry): self.__field_entry=value else: self.__field_entry=callalarmentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 417}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class callalarmupdaterequest(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(callalarmupdaterequest,self).__init__(**dict) if self.__class__ is callalarmupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(callalarmupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(callalarmupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'readwrite': 0x0e, 'packettype': 0x0c, 'command':0x24}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 417}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'readwrite': 0x0e, 'packettype': 0x0c, 'command':0x24}) self.__field_header.readfrombuffer(buf) self.__field_entry=callalarmentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 417}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'readwrite': 0x0e, 'packettype': 0x0c, 'command':0x24}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'readwrite': 0x0e, 'packettype': 0x0c, 'command':0x24}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,callalarmentry): self.__field_entry=value else: self.__field_entry=callalarmentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 417}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 417}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class todorequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(todorequest,self).__init__(**dict) if self.__class__ is todorequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(todorequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(todorequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x25}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x25}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x25}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c, 'command': 0x25}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 501}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class todoentry(BaseProtogenClass): __fields=['slot', 'flag', 'todo', 'pad1', 'todo_len', 'priority', 'dunno', 'order'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(todoentry,self).__init__(**dict) if self.__class__ is todoentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(todoentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(todoentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) self.__field_todo.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.writetobuffer(buf) self.__field_todo_len.writetobuffer(buf) self.__field_priority.writetobuffer(buf) try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 1}) self.__field_dunno.writetobuffer(buf) self.__field_order.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_todo=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False}) self.__field_todo.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) self.__field_pad1.readfrombuffer(buf) self.__field_todo_len=UINT(**{'sizeinbytes': 1}) self.__field_todo_len.readfrombuffer(buf) self.__field_priority=UINT(**{'sizeinbytes': 1}) self.__field_priority.readfrombuffer(buf) self.__field_dunno=UINT(**{'sizeinbytes': 1}) self.__field_dunno.readfrombuffer(buf) self.__field_order=UINT(**{'sizeinbytes': 1}) self.__field_order.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, "0: Not used, 1: Used") def __getfield_todo(self): return self.__field_todo.getvalue() def __setfield_todo(self, value): if isinstance(value,USTRING): self.__field_todo=value else: self.__field_todo=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False}) def __delfield_todo(self): del self.__field_todo todo=property(__getfield_todo, __setfield_todo, __delfield_todo, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 7}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 7}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_todo_len(self): return self.__field_todo_len.getvalue() def __setfield_todo_len(self, value): if isinstance(value,UINT): self.__field_todo_len=value else: self.__field_todo_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_todo_len(self): del self.__field_todo_len todo_len=property(__getfield_todo_len, __setfield_todo_len, __delfield_todo_len, None) def __getfield_priority(self): return self.__field_priority.getvalue() def __setfield_priority(self, value): if isinstance(value,UINT): self.__field_priority=value else: self.__field_priority=UINT(value,**{'sizeinbytes': 1}) def __delfield_priority(self): del self.__field_priority priority=property(__getfield_priority, __setfield_priority, __delfield_priority, "0: Normal, 1: Urgent, 2: Done") def __getfield_dunno(self): try: self.__field_dunno except: self.__field_dunno=UINT(**{'sizeinbytes': 1}) return self.__field_dunno.getvalue() def __setfield_dunno(self, value): if isinstance(value,UINT): self.__field_dunno=value else: self.__field_dunno=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno(self): del self.__field_dunno dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, "Maybe always zero") def __getfield_order(self): return self.__field_order.getvalue() def __setfield_order(self, value): if isinstance(value,UINT): self.__field_order=value else: self.__field_order=UINT(value,**{'sizeinbytes': 1}) def __delfield_order(self): del self.__field_order order=property(__getfield_order, __setfield_order, __delfield_order, "Gets sorted on screen in this order") def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, "0: Not used, 1: Used") yield ('todo', self.__field_todo, None) yield ('pad1', self.__field_pad1, None) yield ('todo_len', self.__field_todo_len, None) yield ('priority', self.__field_priority, "0: Normal, 1: Urgent, 2: Done") yield ('dunno', self.__field_dunno, "Maybe always zero") yield ('order', self.__field_order, "Gets sorted on screen in this order") class todoresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(todoresponse,self).__init__(**dict) if self.__class__ is todoresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(todoresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(todoresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=todoentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 472}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,todoentry): self.__field_entry=value else: self.__field_entry=todoentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 472}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class holidaybitsrequest(BaseProtogenClass): __fields=['unknown'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(holidaybitsrequest,self).__init__(**dict) if self.__class__ is holidaybitsrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(holidaybitsrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(holidaybitsrequest,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_unknown=UNKNOWN(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown=UNKNOWN() self.__field_unknown.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UNKNOWN): self.__field_unknown=value else: self.__field_unknown=UNKNOWN(value,) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def iscontainer(self): return True def containerelements(self): yield ('unknown', self.__field_unknown, None) class holidaybitsresponse(BaseProtogenClass): __fields=['unknown'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(holidaybitsresponse,self).__init__(**dict) if self.__class__ is holidaybitsresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(holidaybitsresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(holidaybitsresponse,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_unknown=UNKNOWN(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown=UNKNOWN() self.__field_unknown.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UNKNOWN): self.__field_unknown=value else: self.__field_unknown=UNKNOWN(value,) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def iscontainer(self): return True def containerelements(self): yield ('unknown', self.__field_unknown, None) class weeklyholidaybitsrequest(BaseProtogenClass): __fields=['unknown'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(weeklyholidaybitsrequest,self).__init__(**dict) if self.__class__ is weeklyholidaybitsrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(weeklyholidaybitsrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(weeklyholidaybitsrequest,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_unknown=UNKNOWN(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown=UNKNOWN() self.__field_unknown.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UNKNOWN): self.__field_unknown=value else: self.__field_unknown=UNKNOWN(value,) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def iscontainer(self): return True def containerelements(self): yield ('unknown', self.__field_unknown, None) class weeklyholidaybitsresponse(BaseProtogenClass): __fields=['unknown'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(weeklyholidaybitsresponse,self).__init__(**dict) if self.__class__ is weeklyholidaybitsresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(weeklyholidaybitsresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(weeklyholidaybitsresponse,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_unknown=UNKNOWN(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown=UNKNOWN() self.__field_unknown.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UNKNOWN): self.__field_unknown=value else: self.__field_unknown=UNKNOWN(value,) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def iscontainer(self): return True def containerelements(self): yield ('unknown', self.__field_unknown, None) class foldernamerequest(BaseProtogenClass): __fields=['header', 'index', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(foldernamerequest,self).__init__(**dict) if self.__class__ is foldernamerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(foldernamerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(foldernamerequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0b, 'command': 0xef}) self.__field_header.writetobuffer(buf) self.__field_index.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x0b, 'command': 0xef}) self.__field_header.readfrombuffer(buf) self.__field_index=UINT(**{'sizeinbytes': 1}) self.__field_index.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0b, 'command': 0xef}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0b, 'command': 0xef}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 1}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 501}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('index', self.__field_index, None) yield ('pad', self.__field_pad, None) class foldernameentry(BaseProtogenClass): __fields=['index', 'flag', 'autofile', 'notify', 'icon', 'name', 'pad', 'keyword'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(foldernameentry,self).__init__(**dict) if self.__class__ is foldernameentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(foldernameentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(foldernameentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_index.writetobuffer(buf) self.__field_flag.writetobuffer(buf) self.__field_autofile.writetobuffer(buf) self.__field_notify.writetobuffer(buf) self.__field_icon.writetobuffer(buf) self.__field_name.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad.writetobuffer(buf) self.__field_keyword.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_index=UINT(**{'sizeinbytes': 1}) self.__field_index.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_autofile=UINT(**{'sizeinbytes': 1}) self.__field_autofile.readfrombuffer(buf) self.__field_notify=UINT(**{'sizeinbytes': 1}) self.__field_notify.readfrombuffer(buf) self.__field_icon=UINT(**{'sizeinbytes': 1}) self.__field_icon.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 13, 'raiseonunterminatedread': False}) self.__field_name.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 3}) self.__field_pad.readfrombuffer(buf) self.__field_keyword=USTRING(**{'sizeinbytes': 14, 'raiseonunterminatedread': False}) self.__field_keyword.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_index(self): return self.__field_index.getvalue() def __setfield_index(self, value): if isinstance(value,UINT): self.__field_index=value else: self.__field_index=UINT(value,**{'sizeinbytes': 1}) def __delfield_index(self): del self.__field_index index=property(__getfield_index, __setfield_index, __delfield_index, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, "0 if empty, 1 in use") def __getfield_autofile(self): return self.__field_autofile.getvalue() def __setfield_autofile(self, value): if isinstance(value,UINT): self.__field_autofile=value else: self.__field_autofile=UINT(value,**{'sizeinbytes': 1}) def __delfield_autofile(self): del self.__field_autofile autofile=property(__getfield_autofile, __setfield_autofile, __delfield_autofile, "If 1, autofile messages with keyword") def __getfield_notify(self): return self.__field_notify.getvalue() def __setfield_notify(self, value): if isinstance(value,UINT): self.__field_notify=value else: self.__field_notify=UINT(value,**{'sizeinbytes': 1}) def __delfield_notify(self): del self.__field_notify notify=property(__getfield_notify, __setfield_notify, __delfield_notify, None) def __getfield_icon(self): return self.__field_icon.getvalue() def __setfield_icon(self, value): if isinstance(value,UINT): self.__field_icon=value else: self.__field_icon=UINT(value,**{'sizeinbytes': 1}) def __delfield_icon(self): del self.__field_icon icon=property(__getfield_icon, __setfield_icon, __delfield_icon, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 13, 'raiseonunterminatedread': False}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, "Name of the folder") def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 3}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 3}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def __getfield_keyword(self): return self.__field_keyword.getvalue() def __setfield_keyword(self, value): if isinstance(value,USTRING): self.__field_keyword=value else: self.__field_keyword=USTRING(value,**{'sizeinbytes': 14, 'raiseonunterminatedread': False}) def __delfield_keyword(self): del self.__field_keyword keyword=property(__getfield_keyword, __setfield_keyword, __delfield_keyword, None) def iscontainer(self): return True def containerelements(self): yield ('index', self.__field_index, None) yield ('flag', self.__field_flag, "0 if empty, 1 in use") yield ('autofile', self.__field_autofile, "If 1, autofile messages with keyword") yield ('notify', self.__field_notify, None) yield ('icon', self.__field_icon, None) yield ('name', self.__field_name, "Name of the folder") yield ('pad', self.__field_pad, None) yield ('keyword', self.__field_keyword, None) class foldernameresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(foldernameresponse,self).__init__(**dict) if self.__class__ is foldernameresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(foldernameresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(foldernameresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=foldernameentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 467}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,foldernameentry): self.__field_entry=value else: self.__field_entry=foldernameentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 467}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class messagerequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(messagerequest,self).__init__(**dict) if self.__class__ is messagerequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(messagerequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(messagerequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0xe1}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0xe1}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0xe1}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c, 'command': 0xe1}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 501}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class messageentry(BaseProtogenClass): __fields=['slot', 'messagetype', 'dunno1', 'dunno2', 'dunno3', 'dunno4', 'dunno5', 'dunno6', 'dunno7', 'dunno8', 'dunno9', 'dunno10', 'dunno11', 'message_len', 'message', 'pad1', 'year', 'month', 'day', 'hour', 'minute', 'second', 'phonenum_len', 'phonenum', 'dunno12', 'pad2', 'dunno13', 'folder'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(messageentry,self).__init__(**dict) if self.__class__ is messageentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(messageentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(messageentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_messagetype.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_dunno3.writetobuffer(buf) self.__field_dunno4.writetobuffer(buf) self.__field_dunno5.writetobuffer(buf) self.__field_dunno6.writetobuffer(buf) self.__field_dunno7.writetobuffer(buf) self.__field_dunno8.writetobuffer(buf) self.__field_dunno9.writetobuffer(buf) self.__field_dunno10.writetobuffer(buf) self.__field_dunno11.writetobuffer(buf) self.__field_message_len.writetobuffer(buf) self.__field_message.writetobuffer(buf) self.__field_pad1.writetobuffer(buf) self.__field_year.writetobuffer(buf) self.__field_month.writetobuffer(buf) self.__field_day.writetobuffer(buf) self.__field_hour.writetobuffer(buf) self.__field_minute.writetobuffer(buf) self.__field_second.writetobuffer(buf) self.__field_phonenum_len.writetobuffer(buf) self.__field_phonenum.writetobuffer(buf) self.__field_dunno12.writetobuffer(buf) self.__field_pad2.writetobuffer(buf) self.__field_dunno13.writetobuffer(buf) self.__field_folder.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_messagetype=UINT(**{'sizeinbytes': 1}) self.__field_messagetype.readfrombuffer(buf) self.__field_dunno1=UINT(**{'sizeinbytes': 1}) self.__field_dunno1.readfrombuffer(buf) self.__field_dunno2=UINT(**{'sizeinbytes': 1}) self.__field_dunno2.readfrombuffer(buf) self.__field_dunno3=UINT(**{'sizeinbytes': 1}) self.__field_dunno3.readfrombuffer(buf) self.__field_dunno4=UINT(**{'sizeinbytes': 1}) self.__field_dunno4.readfrombuffer(buf) self.__field_dunno5=UINT(**{'sizeinbytes': 1}) self.__field_dunno5.readfrombuffer(buf) self.__field_dunno6=UINT(**{'sizeinbytes': 1}) self.__field_dunno6.readfrombuffer(buf) self.__field_dunno7=UINT(**{'sizeinbytes': 1}) self.__field_dunno7.readfrombuffer(buf) self.__field_dunno8=UINT(**{'sizeinbytes': 1}) self.__field_dunno8.readfrombuffer(buf) self.__field_dunno9=UINT(**{'sizeinbytes': 1}) self.__field_dunno9.readfrombuffer(buf) self.__field_dunno10=UINT(**{'sizeinbytes': 1}) self.__field_dunno10.readfrombuffer(buf) self.__field_dunno11=UINT(**{'sizeinbytes': 1}) self.__field_dunno11.readfrombuffer(buf) self.__field_message_len=UINT(**{'sizeinbytes': 1}) self.__field_message_len.readfrombuffer(buf) self.__field_message=USTRING(**{'sizeinbytes': 255}) self.__field_message.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.readfrombuffer(buf) self.__field_year=UINT(**{'sizeinbytes': 1}) self.__field_year.readfrombuffer(buf) self.__field_month=UINT(**{'sizeinbytes': 1}) self.__field_month.readfrombuffer(buf) self.__field_day=UINT(**{'sizeinbytes': 1}) self.__field_day.readfrombuffer(buf) self.__field_hour=UINT(**{'sizeinbytes': 1}) self.__field_hour.readfrombuffer(buf) self.__field_minute=UINT(**{'sizeinbytes': 1}) self.__field_minute.readfrombuffer(buf) self.__field_second=UINT(**{'sizeinbytes': 1}) self.__field_second.readfrombuffer(buf) self.__field_phonenum_len=UINT(**{'sizeinbytes': 1}) self.__field_phonenum_len.readfrombuffer(buf) self.__field_phonenum=USTRING(**{'sizeinbytes': 33}) self.__field_phonenum.readfrombuffer(buf) self.__field_dunno12=UINT(**{'sizeinbytes': 1}) self.__field_dunno12.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 38}) self.__field_pad2.readfrombuffer(buf) self.__field_dunno13=UINT(**{'sizeinbytes': 1}) self.__field_dunno13.readfrombuffer(buf) self.__field_folder=UINT(**{'sizeinbytes': 1}) self.__field_folder.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_messagetype(self): return self.__field_messagetype.getvalue() def __setfield_messagetype(self, value): if isinstance(value,UINT): self.__field_messagetype=value else: self.__field_messagetype=UINT(value,**{'sizeinbytes': 1}) def __delfield_messagetype(self): del self.__field_messagetype messagetype=property(__getfield_messagetype, __setfield_messagetype, __delfield_messagetype, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UINT): self.__field_dunno1=value else: self.__field_dunno1=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UINT): self.__field_dunno2=value else: self.__field_dunno2=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_dunno3(self): return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,UINT): self.__field_dunno3=value else: self.__field_dunno3=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_dunno4(self): return self.__field_dunno4.getvalue() def __setfield_dunno4(self, value): if isinstance(value,UINT): self.__field_dunno4=value else: self.__field_dunno4=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno4(self): del self.__field_dunno4 dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None) def __getfield_dunno5(self): return self.__field_dunno5.getvalue() def __setfield_dunno5(self, value): if isinstance(value,UINT): self.__field_dunno5=value else: self.__field_dunno5=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno5(self): del self.__field_dunno5 dunno5=property(__getfield_dunno5, __setfield_dunno5, __delfield_dunno5, None) def __getfield_dunno6(self): return self.__field_dunno6.getvalue() def __setfield_dunno6(self, value): if isinstance(value,UINT): self.__field_dunno6=value else: self.__field_dunno6=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno6(self): del self.__field_dunno6 dunno6=property(__getfield_dunno6, __setfield_dunno6, __delfield_dunno6, None) def __getfield_dunno7(self): return self.__field_dunno7.getvalue() def __setfield_dunno7(self, value): if isinstance(value,UINT): self.__field_dunno7=value else: self.__field_dunno7=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno7(self): del self.__field_dunno7 dunno7=property(__getfield_dunno7, __setfield_dunno7, __delfield_dunno7, None) def __getfield_dunno8(self): return self.__field_dunno8.getvalue() def __setfield_dunno8(self, value): if isinstance(value,UINT): self.__field_dunno8=value else: self.__field_dunno8=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno8(self): del self.__field_dunno8 dunno8=property(__getfield_dunno8, __setfield_dunno8, __delfield_dunno8, None) def __getfield_dunno9(self): return self.__field_dunno9.getvalue() def __setfield_dunno9(self, value): if isinstance(value,UINT): self.__field_dunno9=value else: self.__field_dunno9=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno9(self): del self.__field_dunno9 dunno9=property(__getfield_dunno9, __setfield_dunno9, __delfield_dunno9, None) def __getfield_dunno10(self): return self.__field_dunno10.getvalue() def __setfield_dunno10(self, value): if isinstance(value,UINT): self.__field_dunno10=value else: self.__field_dunno10=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno10(self): del self.__field_dunno10 dunno10=property(__getfield_dunno10, __setfield_dunno10, __delfield_dunno10, None) def __getfield_dunno11(self): return self.__field_dunno11.getvalue() def __setfield_dunno11(self, value): if isinstance(value,UINT): self.__field_dunno11=value else: self.__field_dunno11=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno11(self): del self.__field_dunno11 dunno11=property(__getfield_dunno11, __setfield_dunno11, __delfield_dunno11, None) def __getfield_message_len(self): return self.__field_message_len.getvalue() def __setfield_message_len(self, value): if isinstance(value,UINT): self.__field_message_len=value else: self.__field_message_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_message_len(self): del self.__field_message_len message_len=property(__getfield_message_len, __setfield_message_len, __delfield_message_len, None) def __getfield_message(self): return self.__field_message.getvalue() def __setfield_message(self, value): if isinstance(value,USTRING): self.__field_message=value else: self.__field_message=USTRING(value,**{'sizeinbytes': 255}) def __delfield_message(self): del self.__field_message message=property(__getfield_message, __setfield_message, __delfield_message, "Text of the notification") def __getfield_pad1(self): return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_year(self): return self.__field_year.getvalue() def __setfield_year(self, value): if isinstance(value,UINT): self.__field_year=value else: self.__field_year=UINT(value,**{'sizeinbytes': 1}) def __delfield_year(self): del self.__field_year year=property(__getfield_year, __setfield_year, __delfield_year, None) def __getfield_month(self): return self.__field_month.getvalue() def __setfield_month(self, value): if isinstance(value,UINT): self.__field_month=value else: self.__field_month=UINT(value,**{'sizeinbytes': 1}) def __delfield_month(self): del self.__field_month month=property(__getfield_month, __setfield_month, __delfield_month, None) def __getfield_day(self): return self.__field_day.getvalue() def __setfield_day(self, value): if isinstance(value,UINT): self.__field_day=value else: self.__field_day=UINT(value,**{'sizeinbytes': 1}) def __delfield_day(self): del self.__field_day day=property(__getfield_day, __setfield_day, __delfield_day, None) def __getfield_hour(self): return self.__field_hour.getvalue() def __setfield_hour(self, value): if isinstance(value,UINT): self.__field_hour=value else: self.__field_hour=UINT(value,**{'sizeinbytes': 1}) def __delfield_hour(self): del self.__field_hour hour=property(__getfield_hour, __setfield_hour, __delfield_hour, None) def __getfield_minute(self): return self.__field_minute.getvalue() def __setfield_minute(self, value): if isinstance(value,UINT): self.__field_minute=value else: self.__field_minute=UINT(value,**{'sizeinbytes': 1}) def __delfield_minute(self): del self.__field_minute minute=property(__getfield_minute, __setfield_minute, __delfield_minute, None) def __getfield_second(self): return self.__field_second.getvalue() def __setfield_second(self, value): if isinstance(value,UINT): self.__field_second=value else: self.__field_second=UINT(value,**{'sizeinbytes': 1}) def __delfield_second(self): del self.__field_second second=property(__getfield_second, __setfield_second, __delfield_second, None) def __getfield_phonenum_len(self): return self.__field_phonenum_len.getvalue() def __setfield_phonenum_len(self, value): if isinstance(value,UINT): self.__field_phonenum_len=value else: self.__field_phonenum_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_phonenum_len(self): del self.__field_phonenum_len phonenum_len=property(__getfield_phonenum_len, __setfield_phonenum_len, __delfield_phonenum_len, None) def __getfield_phonenum(self): return self.__field_phonenum.getvalue() def __setfield_phonenum(self, value): if isinstance(value,USTRING): self.__field_phonenum=value else: self.__field_phonenum=USTRING(value,**{'sizeinbytes': 33}) def __delfield_phonenum(self): del self.__field_phonenum phonenum=property(__getfield_phonenum, __setfield_phonenum, __delfield_phonenum, None) def __getfield_dunno12(self): return self.__field_dunno12.getvalue() def __setfield_dunno12(self, value): if isinstance(value,UINT): self.__field_dunno12=value else: self.__field_dunno12=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno12(self): del self.__field_dunno12 dunno12=property(__getfield_dunno12, __setfield_dunno12, __delfield_dunno12, None) def __getfield_pad2(self): return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 38}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def __getfield_dunno13(self): return self.__field_dunno13.getvalue() def __setfield_dunno13(self, value): if isinstance(value,UINT): self.__field_dunno13=value else: self.__field_dunno13=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno13(self): del self.__field_dunno13 dunno13=property(__getfield_dunno13, __setfield_dunno13, __delfield_dunno13, None) def __getfield_folder(self): return self.__field_folder.getvalue() def __setfield_folder(self, value): if isinstance(value,UINT): self.__field_folder=value else: self.__field_folder=UINT(value,**{'sizeinbytes': 1}) def __delfield_folder(self): del self.__field_folder folder=property(__getfield_folder, __setfield_folder, __delfield_folder, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('messagetype', self.__field_messagetype, None) yield ('dunno1', self.__field_dunno1, None) yield ('dunno2', self.__field_dunno2, None) yield ('dunno3', self.__field_dunno3, None) yield ('dunno4', self.__field_dunno4, None) yield ('dunno5', self.__field_dunno5, None) yield ('dunno6', self.__field_dunno6, None) yield ('dunno7', self.__field_dunno7, None) yield ('dunno8', self.__field_dunno8, None) yield ('dunno9', self.__field_dunno9, None) yield ('dunno10', self.__field_dunno10, None) yield ('dunno11', self.__field_dunno11, None) yield ('message_len', self.__field_message_len, None) yield ('message', self.__field_message, "Text of the notification") yield ('pad1', self.__field_pad1, None) yield ('year', self.__field_year, None) yield ('month', self.__field_month, None) yield ('day', self.__field_day, None) yield ('hour', self.__field_hour, None) yield ('minute', self.__field_minute, None) yield ('second', self.__field_second, None) yield ('phonenum_len', self.__field_phonenum_len, None) yield ('phonenum', self.__field_phonenum, None) yield ('dunno12', self.__field_dunno12, None) yield ('pad2', self.__field_pad2, None) yield ('dunno13', self.__field_dunno13, None) yield ('folder', self.__field_folder, None) class messageresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(messageresponse,self).__init__(**dict) if self.__class__ is messageresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(messageresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(messageresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=messageentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 151}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,messageentry): self.__field_entry=value else: self.__field_entry=messageentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 151}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class historyrequest(BaseProtogenClass): __fields=['type', 'header', 'header', 'header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(historyrequest,self).__init__(**dict) if self.__class__ is historyrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(historyrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(historyrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_type except: self.__field_type=UINT() def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if self.type==OUTGOING: try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3d}) self.__field_header.writetobuffer(buf) if self.type==INCOMING: try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3e}) self.__field_header.writetobuffer(buf) if self.type==MISSED: try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3f}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) if self.type==OUTGOING: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3d}) self.__field_header.readfrombuffer(buf) if self.type==INCOMING: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3e}) self.__field_header.readfrombuffer(buf) if self.type==MISSED: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3f}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_type(self): return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,UINT): self.__field_type=value else: self.__field_type=UINT(value,) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, "0: Outgoing, 1: Incoming, 2: Missed") def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3d}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c, 'command': 0x3d}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3e}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c, 'command': 0x3e}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x3f}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c, 'command': 0x3f}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 501}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('type', self.__field_type, "0: Outgoing, 1: Incoming, 2: Missed") if self.type==OUTGOING: yield ('header', self.__field_header, None) if self.type==INCOMING: yield ('header', self.__field_header, None) if self.type==MISSED: yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class historymiscrequest(BaseProtogenClass): __fields=['type', 'header', 'header', 'header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(historymiscrequest,self).__init__(**dict) if self.__class__ is historymiscrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(historymiscrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(historymiscrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_type except: self.__field_type=UINT() def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if self.type==OUTGOING: try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x60}) self.__field_header.writetobuffer(buf) if self.type==INCOMING: try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x61}) self.__field_header.writetobuffer(buf) if self.type==MISSED: try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x62}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) if self.type==OUTGOING: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x60}) self.__field_header.readfrombuffer(buf) if self.type==INCOMING: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x61}) self.__field_header.readfrombuffer(buf) if self.type==MISSED: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x62}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_type(self): return self.__field_type.getvalue() def __setfield_type(self, value): if isinstance(value,UINT): self.__field_type=value else: self.__field_type=UINT(value,) def __delfield_type(self): del self.__field_type type=property(__getfield_type, __setfield_type, __delfield_type, "0: Outgoing, 1: Incoming, 2: Missed") def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x60}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c, 'command': 0x60}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x61}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c, 'command': 0x61}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x62}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c, 'command': 0x62}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 501}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('type', self.__field_type, "0: Outgoing, 1: Incoming, 2: Missed") if self.type==OUTGOING: yield ('header', self.__field_header, None) if self.type==INCOMING: yield ('header', self.__field_header, None) if self.type==MISSED: yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class historyentry(BaseProtogenClass): __fields=['slot', 'dunno1', 'date', 'phonenumlen', 'phonenum', 'name', 'dunno2', 'dunno3'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(historyentry,self).__init__(**dict) if self.__class__ is historyentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(historyentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(historyentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_date.writetobuffer(buf) self.__field_phonenumlen.writetobuffer(buf) self.__field_phonenum.writetobuffer(buf) self.__field_name.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_dunno3.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_dunno1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_dunno1.readfrombuffer(buf) self.__field_date=GPSDATE(**{'sizeinbytes': 4}) self.__field_date.readfrombuffer(buf) self.__field_phonenumlen=UINT(**{'sizeinbytes': 1}) self.__field_phonenumlen.readfrombuffer(buf) self.__field_phonenum=USTRING(**{'sizeinbytes': 48, 'raiseonunterminatedread': False}) self.__field_phonenum.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_name.readfrombuffer(buf) self.__field_dunno2=UNKNOWN(**{'sizeinbytes': 1}) self.__field_dunno2.readfrombuffer(buf) self.__field_dunno3=UNKNOWN(**{'sizeinbytes': 1}) self.__field_dunno3.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UNKNOWN): self.__field_dunno1=value else: self.__field_dunno1=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_date(self): return self.__field_date.getvalue() def __setfield_date(self, value): if isinstance(value,GPSDATE): self.__field_date=value else: self.__field_date=GPSDATE(value,**{'sizeinbytes': 4}) def __delfield_date(self): del self.__field_date date=property(__getfield_date, __setfield_date, __delfield_date, None) def __getfield_phonenumlen(self): return self.__field_phonenumlen.getvalue() def __setfield_phonenumlen(self, value): if isinstance(value,UINT): self.__field_phonenumlen=value else: self.__field_phonenumlen=UINT(value,**{'sizeinbytes': 1}) def __delfield_phonenumlen(self): del self.__field_phonenumlen phonenumlen=property(__getfield_phonenumlen, __setfield_phonenumlen, __delfield_phonenumlen, None) def __getfield_phonenum(self): return self.__field_phonenum.getvalue() def __setfield_phonenum(self, value): if isinstance(value,USTRING): self.__field_phonenum=value else: self.__field_phonenum=USTRING(value,**{'sizeinbytes': 48, 'raiseonunterminatedread': False}) def __delfield_phonenum(self): del self.__field_phonenum phonenum=property(__getfield_phonenum, __setfield_phonenum, __delfield_phonenum, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UNKNOWN): self.__field_dunno2=value else: self.__field_dunno2=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_dunno3(self): return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,UNKNOWN): self.__field_dunno3=value else: self.__field_dunno3=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('dunno1', self.__field_dunno1, None) yield ('date', self.__field_date, None) yield ('phonenumlen', self.__field_phonenumlen, None) yield ('phonenum', self.__field_phonenum, None) yield ('name', self.__field_name, None) yield ('dunno2', self.__field_dunno2, None) yield ('dunno3', self.__field_dunno3, None) class historyresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(historyresponse,self).__init__(**dict) if self.__class__ is historyresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(historyresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(historyresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=historyentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 428}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,historyentry): self.__field_entry=value else: self.__field_entry=historyentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 428}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class historymiscentry(BaseProtogenClass): __fields=['slot', 'pbslotandtype', 'dunno1', 'dunno2', 'dunno3', 'dunno4'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(historymiscentry,self).__init__(**dict) if self.__class__ is historymiscentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(historymiscentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(historymiscentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_pbslotandtype.writetobuffer(buf) self.__field_dunno1.writetobuffer(buf) self.__field_dunno2.writetobuffer(buf) self.__field_dunno3.writetobuffer(buf) self.__field_dunno4.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_pbslotandtype=UINT(**{'sizeinbytes': 2}) self.__field_pbslotandtype.readfrombuffer(buf) self.__field_dunno1=UINT(**{'sizeinbytes': 2}) self.__field_dunno1.readfrombuffer(buf) self.__field_dunno2=UINT(**{'sizeinbytes': 1}) self.__field_dunno2.readfrombuffer(buf) self.__field_dunno3=UINT(**{'sizeinbytes': 1}) self.__field_dunno3.readfrombuffer(buf) self.__field_dunno4=UINT(**{'sizeinbytes': 1}) self.__field_dunno4.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pbslotandtype(self): return self.__field_pbslotandtype.getvalue() def __setfield_pbslotandtype(self, value): if isinstance(value,UINT): self.__field_pbslotandtype=value else: self.__field_pbslotandtype=UINT(value,**{'sizeinbytes': 2}) def __delfield_pbslotandtype(self): del self.__field_pbslotandtype pbslotandtype=property(__getfield_pbslotandtype, __setfield_pbslotandtype, __delfield_pbslotandtype, None) def __getfield_dunno1(self): return self.__field_dunno1.getvalue() def __setfield_dunno1(self, value): if isinstance(value,UINT): self.__field_dunno1=value else: self.__field_dunno1=UINT(value,**{'sizeinbytes': 2}) def __delfield_dunno1(self): del self.__field_dunno1 dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None) def __getfield_dunno2(self): return self.__field_dunno2.getvalue() def __setfield_dunno2(self, value): if isinstance(value,UINT): self.__field_dunno2=value else: self.__field_dunno2=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno2(self): del self.__field_dunno2 dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None) def __getfield_dunno3(self): return self.__field_dunno3.getvalue() def __setfield_dunno3(self, value): if isinstance(value,UINT): self.__field_dunno3=value else: self.__field_dunno3=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno3(self): del self.__field_dunno3 dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None) def __getfield_dunno4(self): return self.__field_dunno4.getvalue() def __setfield_dunno4(self, value): if isinstance(value,UINT): self.__field_dunno4=value else: self.__field_dunno4=UINT(value,**{'sizeinbytes': 1}) def __delfield_dunno4(self): del self.__field_dunno4 dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('pbslotandtype', self.__field_pbslotandtype, None) yield ('dunno1', self.__field_dunno1, None) yield ('dunno2', self.__field_dunno2, None) yield ('dunno3', self.__field_dunno3, None) yield ('dunno4', self.__field_dunno4, None) class historymiscresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(historymiscresponse,self).__init__(**dict) if self.__class__ is historymiscresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(historymiscresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(historymiscresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=historymiscentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 493}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,historymiscentry): self.__field_entry=value else: self.__field_entry=historymiscentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 493}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class bufferpartrequest(BaseProtogenClass): __fields=['bufpartsize', 'header', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(bufferpartrequest,self).__init__(**dict) if self.__class__ is bufferpartrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(bufferpartrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(bufferpartrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_bufpartsize except: self.__field_bufpartsize=UINT(**{'constant': 500}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0f}) self.__field_header.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 502}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x0f}) self.__field_header.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 502}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_bufpartsize(self): return self.__field_bufpartsize.getvalue() def __setfield_bufpartsize(self, value): if isinstance(value,UINT): self.__field_bufpartsize=value else: self.__field_bufpartsize=UINT(value,**{'constant': 500}) def __delfield_bufpartsize(self): del self.__field_bufpartsize bufpartsize=property(__getfield_bufpartsize, __setfield_bufpartsize, __delfield_bufpartsize, None) def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0f}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0f}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 502}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 502}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('bufpartsize', self.__field_bufpartsize, None) yield ('header', self.__field_header, None) yield ('pad', self.__field_pad, None) class bufferpartresponse(BaseProtogenClass): __fields=['bufpartsize', 'header', 'data', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(bufferpartresponse,self).__init__(**dict) if self.__class__ is bufferpartresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(bufferpartresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(bufferpartresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_bufpartsize except: self.__field_bufpartsize=UINT(**{'constant': 500}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_data.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_data=DATA(**{'sizeinbytes': self.bufpartsize}) self.__field_data.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_bufpartsize(self): return self.__field_bufpartsize.getvalue() def __setfield_bufpartsize(self, value): if isinstance(value,UINT): self.__field_bufpartsize=value else: self.__field_bufpartsize=UINT(value,**{'constant': 500}) def __delfield_bufpartsize(self): del self.__field_bufpartsize bufpartsize=property(__getfield_bufpartsize, __setfield_bufpartsize, __delfield_bufpartsize, None) def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_data(self): return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,DATA): self.__field_data=value else: self.__field_data=DATA(value,**{'sizeinbytes': self.bufpartsize}) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 2}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('bufpartsize', self.__field_bufpartsize, None) yield ('header', self.__field_header, None) yield ('data', self.__field_data, None) yield ('pad', self.__field_pad, None) class bufferpartupdaterequest(BaseProtogenClass): __fields=['bufpartsize', 'header', 'data', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(bufferpartupdaterequest,self).__init__(**dict) if self.__class__ is bufferpartupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(bufferpartupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(bufferpartupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_bufpartsize except: self.__field_bufpartsize=UINT(**{'constant': 500}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'readwrite': 0x0e, 'packettype': 0x0f}) self.__field_header.writetobuffer(buf) self.__field_data.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'readwrite': 0x0e, 'packettype': 0x0f}) self.__field_header.readfrombuffer(buf) self.__field_data=DATA(**{'sizeinbytes': self.bufpartsize}) self.__field_data.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_bufpartsize(self): return self.__field_bufpartsize.getvalue() def __setfield_bufpartsize(self, value): if isinstance(value,UINT): self.__field_bufpartsize=value else: self.__field_bufpartsize=UINT(value,**{'constant': 500}) def __delfield_bufpartsize(self): del self.__field_bufpartsize bufpartsize=property(__getfield_bufpartsize, __setfield_bufpartsize, __delfield_bufpartsize, None) def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'readwrite': 0x0e, 'packettype': 0x0f}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'readwrite': 0x0e, 'packettype': 0x0f}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_data(self): return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,DATA): self.__field_data=value else: self.__field_data=DATA(value,**{'sizeinbytes': self.bufpartsize}) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 2}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 2}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('bufpartsize', self.__field_bufpartsize, None) yield ('header', self.__field_header, None) yield ('data', self.__field_data, None) yield ('pad', self.__field_pad, None) class phonebookslotrequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebookslotrequest,self).__init__(**dict) if self.__class__ is phonebookslotrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebookslotrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebookslotrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x28}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 500}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x28}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 500}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'command': 0x28}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c, 'command': 0x28}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 500}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 500}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class phonenumber(BaseProtogenClass): __fields=['number_len', 'number'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonenumber,self).__init__(**dict) if self.__class__ is phonenumber: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonenumber,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonenumber,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_number_len except: self.__field_number_len=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_number_len.writetobuffer(buf) try: self.__field_number except: self.__field_number=USTRING(**{'sizeinbytes': 49, 'default': ""}) self.__field_number.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_number_len=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_number_len.readfrombuffer(buf) self.__field_number=USTRING(**{'sizeinbytes': 49, 'default': ""}) self.__field_number.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_number_len(self): try: self.__field_number_len except: self.__field_number_len=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_number_len.getvalue() def __setfield_number_len(self, value): if isinstance(value,UINT): self.__field_number_len=value else: self.__field_number_len=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_number_len(self): del self.__field_number_len number_len=property(__getfield_number_len, __setfield_number_len, __delfield_number_len, None) def __getfield_number(self): try: self.__field_number except: self.__field_number=USTRING(**{'sizeinbytes': 49, 'default': ""}) return self.__field_number.getvalue() def __setfield_number(self, value): if isinstance(value,USTRING): self.__field_number=value else: self.__field_number=USTRING(value,**{'sizeinbytes': 49, 'default': ""}) def __delfield_number(self): del self.__field_number number=property(__getfield_number, __setfield_number, __delfield_number, None) def iscontainer(self): return True def containerelements(self): yield ('number_len', self.__field_number_len, None) yield ('number', self.__field_number, None) class phonebookentry(BaseProtogenClass): __fields=['slot', 'slotdup', 'name', 'numbers', 'email_len', 'email', 'url_len', 'url', 'secret', 'name_len'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebookentry,self).__init__(**dict) if self.__class__ is phonebookentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebookentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebookentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_slotdup.writetobuffer(buf) self.__field_name.writetobuffer(buf) try: self.__field_numbers except: self.__field_numbers=LIST(**{'length': 7, 'createdefault': True, 'elementclass': phonenumber}) self.__field_numbers.writetobuffer(buf) try: self.__field_email_len except: self.__field_email_len=UINT(**{'sizeinbytes': 1}) self.__field_email_len.writetobuffer(buf) try: self.__field_email except: self.__field_email=USTRING(**{'sizeinbytes': 49, 'default': ""}) self.__field_email.writetobuffer(buf) try: self.__field_url_len except: self.__field_url_len=UINT(**{'sizeinbytes': 1}) self.__field_url_len.writetobuffer(buf) try: self.__field_url except: self.__field_url=USTRING(**{'sizeinbytes': 49, 'default': ""}) self.__field_url.writetobuffer(buf) try: self.__field_secret except: self.__field_secret=BOOL(**{'sizeinbytes': 1}) self.__field_secret.writetobuffer(buf) self.__field_name_len.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_slotdup=UINT(**{'sizeinbytes': 2}) self.__field_slotdup.readfrombuffer(buf) self.__field_name=USTRING(**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) self.__field_name.readfrombuffer(buf) self.__field_numbers=LIST(**{'length': 7, 'createdefault': True, 'elementclass': phonenumber}) self.__field_numbers.readfrombuffer(buf) self.__field_email_len=UINT(**{'sizeinbytes': 1}) self.__field_email_len.readfrombuffer(buf) self.__field_email=USTRING(**{'sizeinbytes': 49, 'default': ""}) self.__field_email.readfrombuffer(buf) self.__field_url_len=UINT(**{'sizeinbytes': 1}) self.__field_url_len.readfrombuffer(buf) self.__field_url=USTRING(**{'sizeinbytes': 49, 'default': ""}) self.__field_url.readfrombuffer(buf) self.__field_secret=BOOL(**{'sizeinbytes': 1}) self.__field_secret.readfrombuffer(buf) self.__field_name_len=UINT(**{'sizeinbytes': 1}) self.__field_name_len.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_slotdup(self): return self.__field_slotdup.getvalue() def __setfield_slotdup(self, value): if isinstance(value,UINT): self.__field_slotdup=value else: self.__field_slotdup=UINT(value,**{'sizeinbytes': 2}) def __delfield_slotdup(self): del self.__field_slotdup slotdup=property(__getfield_slotdup, __setfield_slotdup, __delfield_slotdup, None) def __getfield_name(self): return self.__field_name.getvalue() def __setfield_name(self, value): if isinstance(value,USTRING): self.__field_name=value else: self.__field_name=USTRING(value,**{'sizeinbytes': 16, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'terminator': None}) def __delfield_name(self): del self.__field_name name=property(__getfield_name, __setfield_name, __delfield_name, None) def __getfield_numbers(self): try: self.__field_numbers except: self.__field_numbers=LIST(**{'length': 7, 'createdefault': True, 'elementclass': phonenumber}) return self.__field_numbers.getvalue() def __setfield_numbers(self, value): if isinstance(value,LIST): self.__field_numbers=value else: self.__field_numbers=LIST(value,**{'length': 7, 'createdefault': True, 'elementclass': phonenumber}) def __delfield_numbers(self): del self.__field_numbers numbers=property(__getfield_numbers, __setfield_numbers, __delfield_numbers, None) def __getfield_email_len(self): try: self.__field_email_len except: self.__field_email_len=UINT(**{'sizeinbytes': 1}) return self.__field_email_len.getvalue() def __setfield_email_len(self, value): if isinstance(value,UINT): self.__field_email_len=value else: self.__field_email_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_email_len(self): del self.__field_email_len email_len=property(__getfield_email_len, __setfield_email_len, __delfield_email_len, None) def __getfield_email(self): try: self.__field_email except: self.__field_email=USTRING(**{'sizeinbytes': 49, 'default': ""}) return self.__field_email.getvalue() def __setfield_email(self, value): if isinstance(value,USTRING): self.__field_email=value else: self.__field_email=USTRING(value,**{'sizeinbytes': 49, 'default': ""}) def __delfield_email(self): del self.__field_email email=property(__getfield_email, __setfield_email, __delfield_email, None) def __getfield_url_len(self): try: self.__field_url_len except: self.__field_url_len=UINT(**{'sizeinbytes': 1}) return self.__field_url_len.getvalue() def __setfield_url_len(self, value): if isinstance(value,UINT): self.__field_url_len=value else: self.__field_url_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_url_len(self): del self.__field_url_len url_len=property(__getfield_url_len, __setfield_url_len, __delfield_url_len, None) def __getfield_url(self): try: self.__field_url except: self.__field_url=USTRING(**{'sizeinbytes': 49, 'default': ""}) return self.__field_url.getvalue() def __setfield_url(self, value): if isinstance(value,USTRING): self.__field_url=value else: self.__field_url=USTRING(value,**{'sizeinbytes': 49, 'default': ""}) def __delfield_url(self): del self.__field_url url=property(__getfield_url, __setfield_url, __delfield_url, None) def __getfield_secret(self): try: self.__field_secret except: self.__field_secret=BOOL(**{'sizeinbytes': 1}) return self.__field_secret.getvalue() def __setfield_secret(self, value): if isinstance(value,BOOL): self.__field_secret=value else: self.__field_secret=BOOL(value,**{'sizeinbytes': 1}) def __delfield_secret(self): del self.__field_secret secret=property(__getfield_secret, __setfield_secret, __delfield_secret, None) def __getfield_name_len(self): return self.__field_name_len.getvalue() def __setfield_name_len(self, value): if isinstance(value,UINT): self.__field_name_len=value else: self.__field_name_len=UINT(value,**{'sizeinbytes': 1}) def __delfield_name_len(self): del self.__field_name_len name_len=property(__getfield_name_len, __setfield_name_len, __delfield_name_len, None) def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('slotdup', self.__field_slotdup, None) yield ('name', self.__field_name, None) yield ('numbers', self.__field_numbers, None) yield ('email_len', self.__field_email_len, None) yield ('email', self.__field_email, None) yield ('url_len', self.__field_url_len, None) yield ('url', self.__field_url, None) yield ('secret', self.__field_secret, None) yield ('name_len', self.__field_name_len, None) class phonebookslotresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebookslotresponse,self).__init__(**dict) if self.__class__ is phonebookslotresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebookslotresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebookslotresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=phonebookentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 30}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,phonebookentry): self.__field_entry=value else: self.__field_entry=phonebookentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 30}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class phonebookslotupdaterequest(BaseProtogenClass): __fields=['header', 'entry', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(phonebookslotupdaterequest,self).__init__(**dict) if self.__class__ is phonebookslotupdaterequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(phonebookslotupdaterequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(phonebookslotupdaterequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'readwrite': 0x0e, 'command': 0x28}) self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 30}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x0c, 'readwrite': 0x0e, 'command': 0x28}) self.__field_header.readfrombuffer(buf) self.__field_entry=phonebookentry() self.__field_entry.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 30}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0c, 'readwrite': 0x0e, 'command': 0x28}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0c, 'readwrite': 0x0e, 'command': 0x28}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,phonebookentry): self.__field_entry=value else: self.__field_entry=phonebookentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 30}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 30}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad', self.__field_pad, None) class voicedialrequest(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(voicedialrequest,self).__init__(**dict) if self.__class__ is voicedialrequest: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(voicedialrequest,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(voicedialrequest,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0b, 'command': 0xed}) self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader(**{'packettype': 0x0b, 'command': 0xed}) self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader(**{'packettype': 0x0b, 'command': 0xed}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,**{'packettype': 0x0b, 'command': 0xed}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 501}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 501}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class voicedialentry(BaseProtogenClass): __fields=['slot', 'flag', 'pad1', 'phonenumberslot', 'phonenumbertype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(voicedialentry,self).__init__(**dict) if self.__class__ is voicedialentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(voicedialentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(voicedialentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_slot.writetobuffer(buf) self.__field_flag.writetobuffer(buf) self.__field_pad1.writetobuffer(buf) self.__field_phonenumberslot.writetobuffer(buf) self.__field_phonenumbertype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_slot=UINT(**{'sizeinbytes': 1}) self.__field_slot.readfrombuffer(buf) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad1.readfrombuffer(buf) self.__field_phonenumberslot=UINT(**{'sizeinbytes': 2}) self.__field_phonenumberslot.readfrombuffer(buf) self.__field_phonenumbertype=UINT(**{'sizeinbytes': 1}) self.__field_phonenumbertype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 1}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, "1 if voice dial slot in use") def __getfield_pad1(self): return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 2}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_phonenumberslot(self): return self.__field_phonenumberslot.getvalue() def __setfield_phonenumberslot(self, value): if isinstance(value,UINT): self.__field_phonenumberslot=value else: self.__field_phonenumberslot=UINT(value,**{'sizeinbytes': 2}) def __delfield_phonenumberslot(self): del self.__field_phonenumberslot phonenumberslot=property(__getfield_phonenumberslot, __setfield_phonenumberslot, __delfield_phonenumberslot, None) def __getfield_phonenumbertype(self): return self.__field_phonenumbertype.getvalue() def __setfield_phonenumbertype(self, value): if isinstance(value,UINT): self.__field_phonenumbertype=value else: self.__field_phonenumbertype=UINT(value,**{'sizeinbytes': 1}) def __delfield_phonenumbertype(self): del self.__field_phonenumbertype phonenumbertype=property(__getfield_phonenumbertype, __setfield_phonenumbertype, __delfield_phonenumbertype, "1: Home, 2: Work, ...") def iscontainer(self): return True def containerelements(self): yield ('slot', self.__field_slot, None) yield ('flag', self.__field_flag, "1 if voice dial slot in use") yield ('pad1', self.__field_pad1, None) yield ('phonenumberslot', self.__field_phonenumberslot, None) yield ('phonenumbertype', self.__field_phonenumbertype, "1: Home, 2: Work, ...") class voicedialresponse(BaseProtogenClass): __fields=['header', 'entry', 'pad2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(voicedialresponse,self).__init__(**dict) if self.__class__ is voicedialresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(voicedialresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(voicedialresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_entry.writetobuffer(buf) self.__field_pad2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_entry=voicedialentry() self.__field_entry.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 495}) self.__field_pad2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_entry(self): return self.__field_entry.getvalue() def __setfield_entry(self, value): if isinstance(value,voicedialentry): self.__field_entry=value else: self.__field_entry=voicedialentry(value,) def __delfield_entry(self): del self.__field_entry entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None) def __getfield_pad2(self): return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 495}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('entry', self.__field_entry, None) yield ('pad2', self.__field_pad2, None) class t9request(BaseProtogenClass): __fields=['unknown'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(t9request,self).__init__(**dict) if self.__class__ is t9request: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(t9request,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(t9request,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_unknown=UNKNOWN(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown=UNKNOWN() self.__field_unknown.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UNKNOWN): self.__field_unknown=value else: self.__field_unknown=UNKNOWN(value,) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def iscontainer(self): return True def containerelements(self): yield ('unknown', self.__field_unknown, None) class t9response(BaseProtogenClass): __fields=['unknown'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(t9response,self).__init__(**dict) if self.__class__ is t9response: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(t9response,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(t9response,kwargs) if len(args): dict2={} dict2.update(kwargs) kwargs=dict2 self.__field_unknown=UNKNOWN(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_unknown.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_unknown=UNKNOWN() self.__field_unknown.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_unknown(self): return self.__field_unknown.getvalue() def __setfield_unknown(self, value): if isinstance(value,UNKNOWN): self.__field_unknown=value else: self.__field_unknown=UNKNOWN(value,) def __delfield_unknown(self): del self.__field_unknown unknown=property(__getfield_unknown, __setfield_unknown, __delfield_unknown, None) def iscontainer(self): return True def containerelements(self): yield ('unknown', self.__field_unknown, None) class calleridentry(BaseProtogenClass): __fields=['pbslotandtype', 'actualnumberlen', 'numberfragment'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(calleridentry,self).__init__(**dict) if self.__class__ is calleridentry: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(calleridentry,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(calleridentry,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_pbslotandtype except: self.__field_pbslotandtype=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslotandtype.writetobuffer(buf) try: self.__field_actualnumberlen except: self.__field_actualnumberlen=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_actualnumberlen.writetobuffer(buf) try: self.__field_numberfragment except: self.__field_numberfragment=USTRING(**{'sizeinbytes': 10, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': "", 'terminator': None}) self.__field_numberfragment.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbslotandtype=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslotandtype.readfrombuffer(buf) self.__field_actualnumberlen=UINT(**{'sizeinbytes': 1, 'default': 0}) self.__field_actualnumberlen.readfrombuffer(buf) self.__field_numberfragment=USTRING(**{'sizeinbytes': 10, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': "", 'terminator': None}) self.__field_numberfragment.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbslotandtype(self): try: self.__field_pbslotandtype except: self.__field_pbslotandtype=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) return self.__field_pbslotandtype.getvalue() def __setfield_pbslotandtype(self, value): if isinstance(value,UINT): self.__field_pbslotandtype=value else: self.__field_pbslotandtype=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pbslotandtype(self): del self.__field_pbslotandtype pbslotandtype=property(__getfield_pbslotandtype, __setfield_pbslotandtype, __delfield_pbslotandtype, "Low 12 bits, slotnum, top 4 bits, type") def __getfield_actualnumberlen(self): try: self.__field_actualnumberlen except: self.__field_actualnumberlen=UINT(**{'sizeinbytes': 1, 'default': 0}) return self.__field_actualnumberlen.getvalue() def __setfield_actualnumberlen(self, value): if isinstance(value,UINT): self.__field_actualnumberlen=value else: self.__field_actualnumberlen=UINT(value,**{'sizeinbytes': 1, 'default': 0}) def __delfield_actualnumberlen(self): del self.__field_actualnumberlen actualnumberlen=property(__getfield_actualnumberlen, __setfield_actualnumberlen, __delfield_actualnumberlen, "Length of the actual phone number") def __getfield_numberfragment(self): try: self.__field_numberfragment except: self.__field_numberfragment=USTRING(**{'sizeinbytes': 10, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': "", 'terminator': None}) return self.__field_numberfragment.getvalue() def __setfield_numberfragment(self, value): if isinstance(value,USTRING): self.__field_numberfragment=value else: self.__field_numberfragment=USTRING(value,**{'sizeinbytes': 10, 'raiseonunterminatedread': False, 'raiseontruncate': False, 'default': "", 'terminator': None}) def __delfield_numberfragment(self): del self.__field_numberfragment numberfragment=property(__getfield_numberfragment, __setfield_numberfragment, __delfield_numberfragment, None) def iscontainer(self): return True def containerelements(self): yield ('pbslotandtype', self.__field_pbslotandtype, "Low 12 bits, slotnum, top 4 bits, type") yield ('actualnumberlen', self.__field_actualnumberlen, "Length of the actual phone number") yield ('numberfragment', self.__field_numberfragment, None) class calleridbuffer(BaseProtogenClass): "Index so that phone can show a name instead of number" __fields=['maxentries', 'startcommand', 'bufsize', 'comment', 'numentries', 'items', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(calleridbuffer,self).__init__(**dict) if self.__class__ is calleridbuffer: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(calleridbuffer,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(calleridbuffer,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_maxentries except: self.__field_maxentries=UINT(**{'constant': 500}) try: self.__field_startcommand except: self.__field_startcommand=UINT(**{'constant': 0x50}) try: self.__field_bufsize except: self.__field_bufsize=UINT(**{'constant': 7000}) try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "callerid"}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_numentries.writetobuffer(buf) try: self.__field_items except: self.__field_items=LIST(**{'length': self.maxentries, 'elementclass': calleridentry, 'createdefault': True}) self.__field_items.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 498}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_numentries=UINT(**{'sizeinbytes': 2}) self.__field_numentries.readfrombuffer(buf) self.__field_items=LIST(**{'length': self.maxentries, 'elementclass': calleridentry, 'createdefault': True}) self.__field_items.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 498}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_maxentries(self): return self.__field_maxentries.getvalue() def __setfield_maxentries(self, value): if isinstance(value,UINT): self.__field_maxentries=value else: self.__field_maxentries=UINT(value,**{'constant': 500}) def __delfield_maxentries(self): del self.__field_maxentries maxentries=property(__getfield_maxentries, __setfield_maxentries, __delfield_maxentries, None) def __getfield_startcommand(self): return self.__field_startcommand.getvalue() def __setfield_startcommand(self, value): if isinstance(value,UINT): self.__field_startcommand=value else: self.__field_startcommand=UINT(value,**{'constant': 0x50}) def __delfield_startcommand(self): del self.__field_startcommand startcommand=property(__getfield_startcommand, __setfield_startcommand, __delfield_startcommand, "Starting command for R/W buf parts") def __getfield_bufsize(self): return self.__field_bufsize.getvalue() def __setfield_bufsize(self, value): if isinstance(value,UINT): self.__field_bufsize=value else: self.__field_bufsize=UINT(value,**{'constant': 7000}) def __delfield_bufsize(self): del self.__field_bufsize bufsize=property(__getfield_bufsize, __setfield_bufsize, __delfield_bufsize, None) def __getfield_comment(self): try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "callerid"}) return self.__field_comment.getvalue() def __setfield_comment(self, value): if isinstance(value,USTRING): self.__field_comment=value else: self.__field_comment=USTRING(value,**{'default': "callerid"}) def __delfield_comment(self): del self.__field_comment comment=property(__getfield_comment, __setfield_comment, __delfield_comment, None) def __getfield_numentries(self): return self.__field_numentries.getvalue() def __setfield_numentries(self, value): if isinstance(value,UINT): self.__field_numentries=value else: self.__field_numentries=UINT(value,**{'sizeinbytes': 2}) def __delfield_numentries(self): del self.__field_numentries numentries=property(__getfield_numentries, __setfield_numentries, __delfield_numentries, "Number phone numbers") def __getfield_items(self): try: self.__field_items except: self.__field_items=LIST(**{'length': self.maxentries, 'elementclass': calleridentry, 'createdefault': True}) return self.__field_items.getvalue() def __setfield_items(self, value): if isinstance(value,LIST): self.__field_items=value else: self.__field_items=LIST(value,**{'length': self.maxentries, 'elementclass': calleridentry, 'createdefault': True}) def __delfield_items(self): del self.__field_items items=property(__getfield_items, __setfield_items, __delfield_items, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 498}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 498}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('maxentries', self.__field_maxentries, None) yield ('startcommand', self.__field_startcommand, "Starting command for R/W buf parts") yield ('bufsize', self.__field_bufsize, None) yield ('comment', self.__field_comment, None) yield ('numentries', self.__field_numentries, "Number phone numbers") yield ('items', self.__field_items, None) yield ('pad', self.__field_pad, None) class ringerpicbuffer(BaseProtogenClass): "Index of ringer and picture assignments" __fields=['numpbslots', 'startcommand', 'bufsize', 'comment', 'ringtones', 'wallpapers', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(ringerpicbuffer,self).__init__(**dict) if self.__class__ is ringerpicbuffer: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(ringerpicbuffer,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(ringerpicbuffer,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_numpbslots except: self.__field_numpbslots=UINT(**{'constant': _NUMPBSLOTS}) try: self.__field_startcommand except: self.__field_startcommand=UINT(**{'constant': 0x46}) try: self.__field_bufsize except: self.__field_bufsize=UINT(**{'constant': 1000}) try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "ringer/picture assignments"}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_ringtones except: self.__field_ringtones=LIST(**{'elementclass': _gen_p_sanyo_506, 'length': _NUMPBSLOTS}) self.__field_ringtones.writetobuffer(buf) try: self.__field_wallpapers except: self.__field_wallpapers=LIST(**{'elementclass': _gen_p_sanyo_508, 'length': _NUMPBSLOTS}) self.__field_wallpapers.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 400}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_ringtones=LIST(**{'elementclass': _gen_p_sanyo_506, 'length': _NUMPBSLOTS}) self.__field_ringtones.readfrombuffer(buf) self.__field_wallpapers=LIST(**{'elementclass': _gen_p_sanyo_508, 'length': _NUMPBSLOTS}) self.__field_wallpapers.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 400}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numpbslots(self): return self.__field_numpbslots.getvalue() def __setfield_numpbslots(self, value): if isinstance(value,UINT): self.__field_numpbslots=value else: self.__field_numpbslots=UINT(value,**{'constant': _NUMPBSLOTS}) def __delfield_numpbslots(self): del self.__field_numpbslots numpbslots=property(__getfield_numpbslots, __setfield_numpbslots, __delfield_numpbslots, "Number of phone book slots") def __getfield_startcommand(self): return self.__field_startcommand.getvalue() def __setfield_startcommand(self, value): if isinstance(value,UINT): self.__field_startcommand=value else: self.__field_startcommand=UINT(value,**{'constant': 0x46}) def __delfield_startcommand(self): del self.__field_startcommand startcommand=property(__getfield_startcommand, __setfield_startcommand, __delfield_startcommand, "Starting command for R/W buf parts") def __getfield_bufsize(self): return self.__field_bufsize.getvalue() def __setfield_bufsize(self, value): if isinstance(value,UINT): self.__field_bufsize=value else: self.__field_bufsize=UINT(value,**{'constant': 1000}) def __delfield_bufsize(self): del self.__field_bufsize bufsize=property(__getfield_bufsize, __setfield_bufsize, __delfield_bufsize, None) def __getfield_comment(self): try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "ringer/picture assignments"}) return self.__field_comment.getvalue() def __setfield_comment(self, value): if isinstance(value,USTRING): self.__field_comment=value else: self.__field_comment=USTRING(value,**{'default': "ringer/picture assignments"}) def __delfield_comment(self): del self.__field_comment comment=property(__getfield_comment, __setfield_comment, __delfield_comment, None) def __getfield_ringtones(self): try: self.__field_ringtones except: self.__field_ringtones=LIST(**{'elementclass': _gen_p_sanyo_506, 'length': _NUMPBSLOTS}) return self.__field_ringtones.getvalue() def __setfield_ringtones(self, value): if isinstance(value,LIST): self.__field_ringtones=value else: self.__field_ringtones=LIST(value,**{'elementclass': _gen_p_sanyo_506, 'length': _NUMPBSLOTS}) def __delfield_ringtones(self): del self.__field_ringtones ringtones=property(__getfield_ringtones, __setfield_ringtones, __delfield_ringtones, None) def __getfield_wallpapers(self): try: self.__field_wallpapers except: self.__field_wallpapers=LIST(**{'elementclass': _gen_p_sanyo_508, 'length': _NUMPBSLOTS}) return self.__field_wallpapers.getvalue() def __setfield_wallpapers(self, value): if isinstance(value,LIST): self.__field_wallpapers=value else: self.__field_wallpapers=LIST(value,**{'elementclass': _gen_p_sanyo_508, 'length': _NUMPBSLOTS}) def __delfield_wallpapers(self): del self.__field_wallpapers wallpapers=property(__getfield_wallpapers, __setfield_wallpapers, __delfield_wallpapers, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 400}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 400}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('numpbslots', self.__field_numpbslots, "Number of phone book slots") yield ('startcommand', self.__field_startcommand, "Starting command for R/W buf parts") yield ('bufsize', self.__field_bufsize, None) yield ('comment', self.__field_comment, None) yield ('ringtones', self.__field_ringtones, None) yield ('wallpapers', self.__field_wallpapers, None) yield ('pad', self.__field_pad, None) class _gen_p_sanyo_506(BaseProtogenClass): 'Anonymous inner class' __fields=['ringtone'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo_506,self).__init__(**dict) if self.__class__ is _gen_p_sanyo_506: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo_506,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo_506,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_ringtone=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_ringtone.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_ringtone=UINT(**{'sizeinbytes': 1}) self.__field_ringtone.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_ringtone(self): return self.__field_ringtone.getvalue() def __setfield_ringtone(self, value): if isinstance(value,UINT): self.__field_ringtone=value else: self.__field_ringtone=UINT(value,**{'sizeinbytes': 1}) def __delfield_ringtone(self): del self.__field_ringtone ringtone=property(__getfield_ringtone, __setfield_ringtone, __delfield_ringtone, "ringtone index") def iscontainer(self): return True def containerelements(self): yield ('ringtone', self.__field_ringtone, "ringtone index") class _gen_p_sanyo_508(BaseProtogenClass): 'Anonymous inner class' __fields=['wallpaper'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo_508,self).__init__(**dict) if self.__class__ is _gen_p_sanyo_508: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo_508,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo_508,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_wallpaper=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_wallpaper.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_wallpaper=UINT(**{'sizeinbytes': 1}) self.__field_wallpaper.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_wallpaper(self): return self.__field_wallpaper.getvalue() def __setfield_wallpaper(self, value): if isinstance(value,UINT): self.__field_wallpaper=value else: self.__field_wallpaper=UINT(value,**{'sizeinbytes': 1}) def __delfield_wallpaper(self): del self.__field_wallpaper wallpaper=property(__getfield_wallpaper, __setfield_wallpaper, __delfield_wallpaper, "wallpaper index") def iscontainer(self): return True def containerelements(self): yield ('wallpaper', self.__field_wallpaper, "wallpaper index") class wallpaperbuffer(BaseProtogenClass): "Addition buffer of wallpaper assignment info" __fields=['numpbslots', 'startcommand', 'bufsize', 'comment', 'wallpapers'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(wallpaperbuffer,self).__init__(**dict) if self.__class__ is wallpaperbuffer: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(wallpaperbuffer,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(wallpaperbuffer,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_numpbslots except: self.__field_numpbslots=UINT(**{'constant': _NUMPBSLOTS}) try: self.__field_startcommand except: self.__field_startcommand=UINT(**{'constant': 0x69}) try: self.__field_bufsize except: self.__field_bufsize=UINT(**{'constant': 1500}) try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "wallpaper assignment info"}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_wallpapers except: self.__field_wallpapers=LIST(**{'length': _NUMPBSLOTS, 'elementclass': wallpaperinfo}) self.__field_wallpapers.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_wallpapers=LIST(**{'length': _NUMPBSLOTS, 'elementclass': wallpaperinfo}) self.__field_wallpapers.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_numpbslots(self): return self.__field_numpbslots.getvalue() def __setfield_numpbslots(self, value): if isinstance(value,UINT): self.__field_numpbslots=value else: self.__field_numpbslots=UINT(value,**{'constant': _NUMPBSLOTS}) def __delfield_numpbslots(self): del self.__field_numpbslots numpbslots=property(__getfield_numpbslots, __setfield_numpbslots, __delfield_numpbslots, "Number of phone book slots") def __getfield_startcommand(self): return self.__field_startcommand.getvalue() def __setfield_startcommand(self, value): if isinstance(value,UINT): self.__field_startcommand=value else: self.__field_startcommand=UINT(value,**{'constant': 0x69}) def __delfield_startcommand(self): del self.__field_startcommand startcommand=property(__getfield_startcommand, __setfield_startcommand, __delfield_startcommand, "Starting command for R/W buf parts") def __getfield_bufsize(self): return self.__field_bufsize.getvalue() def __setfield_bufsize(self, value): if isinstance(value,UINT): self.__field_bufsize=value else: self.__field_bufsize=UINT(value,**{'constant': 1500}) def __delfield_bufsize(self): del self.__field_bufsize bufsize=property(__getfield_bufsize, __setfield_bufsize, __delfield_bufsize, None) def __getfield_comment(self): try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "wallpaper assignment info"}) return self.__field_comment.getvalue() def __setfield_comment(self, value): if isinstance(value,USTRING): self.__field_comment=value else: self.__field_comment=USTRING(value,**{'default': "wallpaper assignment info"}) def __delfield_comment(self): del self.__field_comment comment=property(__getfield_comment, __setfield_comment, __delfield_comment, None) def __getfield_wallpapers(self): try: self.__field_wallpapers except: self.__field_wallpapers=LIST(**{'length': _NUMPBSLOTS, 'elementclass': wallpaperinfo}) return self.__field_wallpapers.getvalue() def __setfield_wallpapers(self, value): if isinstance(value,LIST): self.__field_wallpapers=value else: self.__field_wallpapers=LIST(value,**{'length': _NUMPBSLOTS, 'elementclass': wallpaperinfo}) def __delfield_wallpapers(self): del self.__field_wallpapers wallpapers=property(__getfield_wallpapers, __setfield_wallpapers, __delfield_wallpapers, None) def iscontainer(self): return True def containerelements(self): yield ('numpbslots', self.__field_numpbslots, "Number of phone book slots") yield ('startcommand', self.__field_startcommand, "Starting command for R/W buf parts") yield ('bufsize', self.__field_bufsize, None) yield ('comment', self.__field_comment, None) yield ('wallpapers', self.__field_wallpapers, None) class wallpaperinfo(BaseProtogenClass): "5 byte structure with info about wallpaper assignments" __fields=['flag', 'word1', 'word2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(wallpaperinfo,self).__init__(**dict) if self.__class__ is wallpaperinfo: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(wallpaperinfo,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(wallpaperinfo,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_flag.writetobuffer(buf) self.__field_word1.writetobuffer(buf) self.__field_word2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_flag=UINT(**{'sizeinbytes': 1}) self.__field_flag.readfrombuffer(buf) self.__field_word1=UINT(**{'sizeinbytes': 2}) self.__field_word1.readfrombuffer(buf) self.__field_word2=UINT(**{'sizeinbytes': 2}) self.__field_word2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_flag(self): return self.__field_flag.getvalue() def __setfield_flag(self, value): if isinstance(value,UINT): self.__field_flag=value else: self.__field_flag=UINT(value,**{'sizeinbytes': 1}) def __delfield_flag(self): del self.__field_flag flag=property(__getfield_flag, __setfield_flag, __delfield_flag, None) def __getfield_word1(self): return self.__field_word1.getvalue() def __setfield_word1(self, value): if isinstance(value,UINT): self.__field_word1=value else: self.__field_word1=UINT(value,**{'sizeinbytes': 2}) def __delfield_word1(self): del self.__field_word1 word1=property(__getfield_word1, __setfield_word1, __delfield_word1, None) def __getfield_word2(self): return self.__field_word2.getvalue() def __setfield_word2(self, value): if isinstance(value,UINT): self.__field_word2=value else: self.__field_word2=UINT(value,**{'sizeinbytes': 2}) def __delfield_word2(self): del self.__field_word2 word2=property(__getfield_word2, __setfield_word2, __delfield_word2, None) def iscontainer(self): return True def containerelements(self): yield ('flag', self.__field_flag, None) yield ('word1', self.__field_word1, None) yield ('word2', self.__field_word2, None) class pbsortbuffer(BaseProtogenClass): "Various arrays for sorting the phone book, speed dial, determining which" __fields=['startcommand', 'bufsize', 'comment', 'usedflags', 'slotsused', 'slotsused2', 'numemail', 'numurl', 'firsttypes', 'sortorder', 'pbfirstletters', 'sortorder2', 'speeddialindex', 'longnumbersindex', 'emails', 'emailfirstletters', 'urls', 'urlfirstletters', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(pbsortbuffer,self).__init__(**dict) if self.__class__ is pbsortbuffer: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(pbsortbuffer,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(pbsortbuffer,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed try: self.__field_startcommand except: self.__field_startcommand=UINT(**{'constant': 0x3c}) try: self.__field_bufsize except: self.__field_bufsize=UINT(**{'constant': 4000}) try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "sort buffer"}) def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_usedflags except: self.__field_usedflags=LIST(**{'elementclass': _gen_p_sanyo_535, 'length': _NUMPBSLOTS, 'createdefault': True}) self.__field_usedflags.writetobuffer(buf) self.__field_slotsused.writetobuffer(buf) self.__field_slotsused2.writetobuffer(buf) self.__field_numemail.writetobuffer(buf) self.__field_numurl.writetobuffer(buf) try: self.__field_firsttypes except: self.__field_firsttypes=LIST(**{'elementclass': _gen_p_sanyo_541, 'length': _NUMPBSLOTS}) self.__field_firsttypes.writetobuffer(buf) try: self.__field_sortorder except: self.__field_sortorder=LIST(**{'elementclass': _gen_p_sanyo_543, 'length': _NUMPBSLOTS}) self.__field_sortorder.writetobuffer(buf) self.__field_pbfirstletters.writetobuffer(buf) try: self.__field_sortorder2 except: self.__field_sortorder2=LIST(**{'elementclass': _gen_p_sanyo_546, 'length': _NUMPBSLOTS}) self.__field_sortorder2.writetobuffer(buf) try: self.__field_speeddialindex except: self.__field_speeddialindex=LIST(**{'elementclass': _gen_p_sanyo_548, 'length': _NUMSPEEDDIALS}) self.__field_speeddialindex.writetobuffer(buf) try: self.__field_longnumbersindex except: self.__field_longnumbersindex=LIST(**{'elementclass': _gen_p_sanyo_550, 'length': _NUMLONGNUMBERS}) self.__field_longnumbersindex.writetobuffer(buf) try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_sanyo_552, 'length': _NUMPBSLOTS}) self.__field_emails.writetobuffer(buf) self.__field_emailfirstletters.writetobuffer(buf) try: self.__field_urls except: self.__field_urls=LIST(**{'elementclass': _gen_p_sanyo_555, 'length': _NUMPBSLOTS}) self.__field_urls.writetobuffer(buf) self.__field_urlfirstletters.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 66}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_usedflags=LIST(**{'elementclass': _gen_p_sanyo_535, 'length': _NUMPBSLOTS, 'createdefault': True}) self.__field_usedflags.readfrombuffer(buf) self.__field_slotsused=UINT(**{'sizeinbytes': 2}) self.__field_slotsused.readfrombuffer(buf) self.__field_slotsused2=UINT(**{'sizeinbytes': 2}) self.__field_slotsused2.readfrombuffer(buf) self.__field_numemail=UINT(**{'sizeinbytes': 2}) self.__field_numemail.readfrombuffer(buf) self.__field_numurl=UINT(**{'sizeinbytes': 2}) self.__field_numurl.readfrombuffer(buf) self.__field_firsttypes=LIST(**{'elementclass': _gen_p_sanyo_541, 'length': _NUMPBSLOTS}) self.__field_firsttypes.readfrombuffer(buf) self.__field_sortorder=LIST(**{'elementclass': _gen_p_sanyo_543, 'length': _NUMPBSLOTS}) self.__field_sortorder.readfrombuffer(buf) self.__field_pbfirstletters=USTRING(**{'terminator': None, 'sizeinbytes': _NUMPBSLOTS}) self.__field_pbfirstletters.readfrombuffer(buf) self.__field_sortorder2=LIST(**{'elementclass': _gen_p_sanyo_546, 'length': _NUMPBSLOTS}) self.__field_sortorder2.readfrombuffer(buf) self.__field_speeddialindex=LIST(**{'elementclass': _gen_p_sanyo_548, 'length': _NUMSPEEDDIALS}) self.__field_speeddialindex.readfrombuffer(buf) self.__field_longnumbersindex=LIST(**{'elementclass': _gen_p_sanyo_550, 'length': _NUMLONGNUMBERS}) self.__field_longnumbersindex.readfrombuffer(buf) self.__field_emails=LIST(**{'elementclass': _gen_p_sanyo_552, 'length': _NUMPBSLOTS}) self.__field_emails.readfrombuffer(buf) self.__field_emailfirstletters=USTRING(**{'terminator': None, 'sizeinbytes': _NUMPBSLOTS}) self.__field_emailfirstletters.readfrombuffer(buf) self.__field_urls=LIST(**{'elementclass': _gen_p_sanyo_555, 'length': _NUMPBSLOTS}) self.__field_urls.readfrombuffer(buf) self.__field_urlfirstletters=USTRING(**{'terminator': None, 'sizeinbytes': _NUMPBSLOTS}) self.__field_urlfirstletters.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 66}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_startcommand(self): return self.__field_startcommand.getvalue() def __setfield_startcommand(self, value): if isinstance(value,UINT): self.__field_startcommand=value else: self.__field_startcommand=UINT(value,**{'constant': 0x3c}) def __delfield_startcommand(self): del self.__field_startcommand startcommand=property(__getfield_startcommand, __setfield_startcommand, __delfield_startcommand, "Starting command for R/W buf parts") def __getfield_bufsize(self): return self.__field_bufsize.getvalue() def __setfield_bufsize(self, value): if isinstance(value,UINT): self.__field_bufsize=value else: self.__field_bufsize=UINT(value,**{'constant': 4000}) def __delfield_bufsize(self): del self.__field_bufsize bufsize=property(__getfield_bufsize, __setfield_bufsize, __delfield_bufsize, None) def __getfield_comment(self): try: self.__field_comment except: self.__field_comment=USTRING(**{'default': "sort buffer"}) return self.__field_comment.getvalue() def __setfield_comment(self, value): if isinstance(value,USTRING): self.__field_comment=value else: self.__field_comment=USTRING(value,**{'default': "sort buffer"}) def __delfield_comment(self): del self.__field_comment comment=property(__getfield_comment, __setfield_comment, __delfield_comment, None) def __getfield_usedflags(self): try: self.__field_usedflags except: self.__field_usedflags=LIST(**{'elementclass': _gen_p_sanyo_535, 'length': _NUMPBSLOTS, 'createdefault': True}) return self.__field_usedflags.getvalue() def __setfield_usedflags(self, value): if isinstance(value,LIST): self.__field_usedflags=value else: self.__field_usedflags=LIST(value,**{'elementclass': _gen_p_sanyo_535, 'length': _NUMPBSLOTS, 'createdefault': True}) def __delfield_usedflags(self): del self.__field_usedflags usedflags=property(__getfield_usedflags, __setfield_usedflags, __delfield_usedflags, None) def __getfield_slotsused(self): return self.__field_slotsused.getvalue() def __setfield_slotsused(self, value): if isinstance(value,UINT): self.__field_slotsused=value else: self.__field_slotsused=UINT(value,**{'sizeinbytes': 2}) def __delfield_slotsused(self): del self.__field_slotsused slotsused=property(__getfield_slotsused, __setfield_slotsused, __delfield_slotsused, None) def __getfield_slotsused2(self): return self.__field_slotsused2.getvalue() def __setfield_slotsused2(self, value): if isinstance(value,UINT): self.__field_slotsused2=value else: self.__field_slotsused2=UINT(value,**{'sizeinbytes': 2}) def __delfield_slotsused2(self): del self.__field_slotsused2 slotsused2=property(__getfield_slotsused2, __setfield_slotsused2, __delfield_slotsused2, "# slots containing a phone number") def __getfield_numemail(self): return self.__field_numemail.getvalue() def __setfield_numemail(self, value): if isinstance(value,UINT): self.__field_numemail=value else: self.__field_numemail=UINT(value,**{'sizeinbytes': 2}) def __delfield_numemail(self): del self.__field_numemail numemail=property(__getfield_numemail, __setfield_numemail, __delfield_numemail, "Num of slots with email") def __getfield_numurl(self): return self.__field_numurl.getvalue() def __setfield_numurl(self, value): if isinstance(value,UINT): self.__field_numurl=value else: self.__field_numurl=UINT(value,**{'sizeinbytes': 2}) def __delfield_numurl(self): del self.__field_numurl numurl=property(__getfield_numurl, __setfield_numurl, __delfield_numurl, "Num of slots with URL") def __getfield_firsttypes(self): try: self.__field_firsttypes except: self.__field_firsttypes=LIST(**{'elementclass': _gen_p_sanyo_541, 'length': _NUMPBSLOTS}) return self.__field_firsttypes.getvalue() def __setfield_firsttypes(self, value): if isinstance(value,LIST): self.__field_firsttypes=value else: self.__field_firsttypes=LIST(value,**{'elementclass': _gen_p_sanyo_541, 'length': _NUMPBSLOTS}) def __delfield_firsttypes(self): del self.__field_firsttypes firsttypes=property(__getfield_firsttypes, __setfield_firsttypes, __delfield_firsttypes, None) def __getfield_sortorder(self): try: self.__field_sortorder except: self.__field_sortorder=LIST(**{'elementclass': _gen_p_sanyo_543, 'length': _NUMPBSLOTS}) return self.__field_sortorder.getvalue() def __setfield_sortorder(self, value): if isinstance(value,LIST): self.__field_sortorder=value else: self.__field_sortorder=LIST(value,**{'elementclass': _gen_p_sanyo_543, 'length': _NUMPBSLOTS}) def __delfield_sortorder(self): del self.__field_sortorder sortorder=property(__getfield_sortorder, __setfield_sortorder, __delfield_sortorder, None) def __getfield_pbfirstletters(self): return self.__field_pbfirstletters.getvalue() def __setfield_pbfirstletters(self, value): if isinstance(value,USTRING): self.__field_pbfirstletters=value else: self.__field_pbfirstletters=USTRING(value,**{'terminator': None, 'sizeinbytes': _NUMPBSLOTS}) def __delfield_pbfirstletters(self): del self.__field_pbfirstletters pbfirstletters=property(__getfield_pbfirstletters, __setfield_pbfirstletters, __delfield_pbfirstletters, None) def __getfield_sortorder2(self): try: self.__field_sortorder2 except: self.__field_sortorder2=LIST(**{'elementclass': _gen_p_sanyo_546, 'length': _NUMPBSLOTS}) return self.__field_sortorder2.getvalue() def __setfield_sortorder2(self, value): if isinstance(value,LIST): self.__field_sortorder2=value else: self.__field_sortorder2=LIST(value,**{'elementclass': _gen_p_sanyo_546, 'length': _NUMPBSLOTS}) def __delfield_sortorder2(self): del self.__field_sortorder2 sortorder2=property(__getfield_sortorder2, __setfield_sortorder2, __delfield_sortorder2, "Sort order for entries with phone numbers") def __getfield_speeddialindex(self): try: self.__field_speeddialindex except: self.__field_speeddialindex=LIST(**{'elementclass': _gen_p_sanyo_548, 'length': _NUMSPEEDDIALS}) return self.__field_speeddialindex.getvalue() def __setfield_speeddialindex(self, value): if isinstance(value,LIST): self.__field_speeddialindex=value else: self.__field_speeddialindex=LIST(value,**{'elementclass': _gen_p_sanyo_548, 'length': _NUMSPEEDDIALS}) def __delfield_speeddialindex(self): del self.__field_speeddialindex speeddialindex=property(__getfield_speeddialindex, __setfield_speeddialindex, __delfield_speeddialindex, None) def __getfield_longnumbersindex(self): try: self.__field_longnumbersindex except: self.__field_longnumbersindex=LIST(**{'elementclass': _gen_p_sanyo_550, 'length': _NUMLONGNUMBERS}) return self.__field_longnumbersindex.getvalue() def __setfield_longnumbersindex(self, value): if isinstance(value,LIST): self.__field_longnumbersindex=value else: self.__field_longnumbersindex=LIST(value,**{'elementclass': _gen_p_sanyo_550, 'length': _NUMLONGNUMBERS}) def __delfield_longnumbersindex(self): del self.__field_longnumbersindex longnumbersindex=property(__getfield_longnumbersindex, __setfield_longnumbersindex, __delfield_longnumbersindex, None) def __getfield_emails(self): try: self.__field_emails except: self.__field_emails=LIST(**{'elementclass': _gen_p_sanyo_552, 'length': _NUMPBSLOTS}) return self.__field_emails.getvalue() def __setfield_emails(self, value): if isinstance(value,LIST): self.__field_emails=value else: self.__field_emails=LIST(value,**{'elementclass': _gen_p_sanyo_552, 'length': _NUMPBSLOTS}) def __delfield_emails(self): del self.__field_emails emails=property(__getfield_emails, __setfield_emails, __delfield_emails, "Sorted list of slots with Email") def __getfield_emailfirstletters(self): return self.__field_emailfirstletters.getvalue() def __setfield_emailfirstletters(self, value): if isinstance(value,USTRING): self.__field_emailfirstletters=value else: self.__field_emailfirstletters=USTRING(value,**{'terminator': None, 'sizeinbytes': _NUMPBSLOTS}) def __delfield_emailfirstletters(self): del self.__field_emailfirstletters emailfirstletters=property(__getfield_emailfirstletters, __setfield_emailfirstletters, __delfield_emailfirstletters, "First letters in sort order") def __getfield_urls(self): try: self.__field_urls except: self.__field_urls=LIST(**{'elementclass': _gen_p_sanyo_555, 'length': _NUMPBSLOTS}) return self.__field_urls.getvalue() def __setfield_urls(self, value): if isinstance(value,LIST): self.__field_urls=value else: self.__field_urls=LIST(value,**{'elementclass': _gen_p_sanyo_555, 'length': _NUMPBSLOTS}) def __delfield_urls(self): del self.__field_urls urls=property(__getfield_urls, __setfield_urls, __delfield_urls, "Sorted list of slots with a URL") def __getfield_urlfirstletters(self): return self.__field_urlfirstletters.getvalue() def __setfield_urlfirstletters(self, value): if isinstance(value,USTRING): self.__field_urlfirstletters=value else: self.__field_urlfirstletters=USTRING(value,**{'terminator': None, 'sizeinbytes': _NUMPBSLOTS}) def __delfield_urlfirstletters(self): del self.__field_urlfirstletters urlfirstletters=property(__getfield_urlfirstletters, __setfield_urlfirstletters, __delfield_urlfirstletters, "First letters in sort order") def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 66}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 66}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('startcommand', self.__field_startcommand, "Starting command for R/W buf parts") yield ('bufsize', self.__field_bufsize, None) yield ('comment', self.__field_comment, None) yield ('usedflags', self.__field_usedflags, None) yield ('slotsused', self.__field_slotsused, None) yield ('slotsused2', self.__field_slotsused2, "# slots containing a phone number") yield ('numemail', self.__field_numemail, "Num of slots with email") yield ('numurl', self.__field_numurl, "Num of slots with URL") yield ('firsttypes', self.__field_firsttypes, None) yield ('sortorder', self.__field_sortorder, None) yield ('pbfirstletters', self.__field_pbfirstletters, None) yield ('sortorder2', self.__field_sortorder2, "Sort order for entries with phone numbers") yield ('speeddialindex', self.__field_speeddialindex, None) yield ('longnumbersindex', self.__field_longnumbersindex, None) yield ('emails', self.__field_emails, "Sorted list of slots with Email") yield ('emailfirstletters', self.__field_emailfirstletters, "First letters in sort order") yield ('urls', self.__field_urls, "Sorted list of slots with a URL") yield ('urlfirstletters', self.__field_urlfirstletters, "First letters in sort order") yield ('pad', self.__field_pad, None) class _gen_p_sanyo_535(BaseProtogenClass): 'Anonymous inner class' __fields=['used'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo_535,self).__init__(**dict) if self.__class__ is _gen_p_sanyo_535: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo_535,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo_535,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_used=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_used.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_used=UINT(**{'sizeinbytes': 1}) self.__field_used.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_used(self): return self.__field_used.getvalue() def __setfield_used(self, value): if isinstance(value,UINT): self.__field_used=value else: self.__field_used=UINT(value,**{'sizeinbytes': 1}) def __delfield_used(self): del self.__field_used used=property(__getfield_used, __setfield_used, __delfield_used, "1 if slot in use") def iscontainer(self): return True def containerelements(self): yield ('used', self.__field_used, "1 if slot in use") class _gen_p_sanyo_541(BaseProtogenClass): 'Anonymous inner class' __fields=['firsttype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo_541,self).__init__(**dict) if self.__class__ is _gen_p_sanyo_541: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo_541,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo_541,kwargs) if len(args): dict2={'sizeinbytes': 1} dict2.update(kwargs) kwargs=dict2 self.__field_firsttype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_firsttype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_firsttype=UINT(**{'sizeinbytes': 1}) self.__field_firsttype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_firsttype(self): return self.__field_firsttype.getvalue() def __setfield_firsttype(self, value): if isinstance(value,UINT): self.__field_firsttype=value else: self.__field_firsttype=UINT(value,**{'sizeinbytes': 1}) def __delfield_firsttype(self): del self.__field_firsttype firsttype=property(__getfield_firsttype, __setfield_firsttype, __delfield_firsttype, "First phone number type in each slot") def iscontainer(self): return True def containerelements(self): yield ('firsttype', self.__field_firsttype, "First phone number type in each slot") class _gen_p_sanyo_543(BaseProtogenClass): 'Anonymous inner class' __fields=['pbslot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo_543,self).__init__(**dict) if self.__class__ is _gen_p_sanyo_543: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo_543,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo_543,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_pbslot=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pbslot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbslot=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbslot(self): return self.__field_pbslot.getvalue() def __setfield_pbslot(self, value): if isinstance(value,UINT): self.__field_pbslot=value else: self.__field_pbslot=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pbslot(self): del self.__field_pbslot pbslot=property(__getfield_pbslot, __setfield_pbslot, __delfield_pbslot, None) def iscontainer(self): return True def containerelements(self): yield ('pbslot', self.__field_pbslot, None) class _gen_p_sanyo_546(BaseProtogenClass): 'Anonymous inner class' __fields=['pbslot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo_546,self).__init__(**dict) if self.__class__ is _gen_p_sanyo_546: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo_546,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo_546,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_pbslot=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pbslot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbslot=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbslot(self): return self.__field_pbslot.getvalue() def __setfield_pbslot(self, value): if isinstance(value,UINT): self.__field_pbslot=value else: self.__field_pbslot=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pbslot(self): del self.__field_pbslot pbslot=property(__getfield_pbslot, __setfield_pbslot, __delfield_pbslot, None) def iscontainer(self): return True def containerelements(self): yield ('pbslot', self.__field_pbslot, None) class _gen_p_sanyo_548(BaseProtogenClass): 'Anonymous inner class' __fields=['pbslotandtype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo_548,self).__init__(**dict) if self.__class__ is _gen_p_sanyo_548: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo_548,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo_548,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_pbslotandtype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pbslotandtype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbslotandtype=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslotandtype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbslotandtype(self): return self.__field_pbslotandtype.getvalue() def __setfield_pbslotandtype(self, value): if isinstance(value,UINT): self.__field_pbslotandtype=value else: self.__field_pbslotandtype=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pbslotandtype(self): del self.__field_pbslotandtype pbslotandtype=property(__getfield_pbslotandtype, __setfield_pbslotandtype, __delfield_pbslotandtype, None) def iscontainer(self): return True def containerelements(self): yield ('pbslotandtype', self.__field_pbslotandtype, None) class _gen_p_sanyo_550(BaseProtogenClass): 'Anonymous inner class' __fields=['pbslotandtype'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo_550,self).__init__(**dict) if self.__class__ is _gen_p_sanyo_550: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo_550,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo_550,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_pbslotandtype=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pbslotandtype.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbslotandtype=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslotandtype.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbslotandtype(self): return self.__field_pbslotandtype.getvalue() def __setfield_pbslotandtype(self, value): if isinstance(value,UINT): self.__field_pbslotandtype=value else: self.__field_pbslotandtype=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pbslotandtype(self): del self.__field_pbslotandtype pbslotandtype=property(__getfield_pbslotandtype, __setfield_pbslotandtype, __delfield_pbslotandtype, None) def iscontainer(self): return True def containerelements(self): yield ('pbslotandtype', self.__field_pbslotandtype, None) class _gen_p_sanyo_552(BaseProtogenClass): 'Anonymous inner class' __fields=['pbslot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo_552,self).__init__(**dict) if self.__class__ is _gen_p_sanyo_552: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo_552,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo_552,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_pbslot=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pbslot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbslot=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbslot(self): return self.__field_pbslot.getvalue() def __setfield_pbslot(self, value): if isinstance(value,UINT): self.__field_pbslot=value else: self.__field_pbslot=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pbslot(self): del self.__field_pbslot pbslot=property(__getfield_pbslot, __setfield_pbslot, __delfield_pbslot, None) def iscontainer(self): return True def containerelements(self): yield ('pbslot', self.__field_pbslot, None) class _gen_p_sanyo_555(BaseProtogenClass): 'Anonymous inner class' __fields=['pbslot'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(_gen_p_sanyo_555,self).__init__(**dict) if self.__class__ is _gen_p_sanyo_555: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(_gen_p_sanyo_555,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(_gen_p_sanyo_555,kwargs) if len(args): dict2={'sizeinbytes': 2, 'default': 0xffff} dict2.update(kwargs) kwargs=dict2 self.__field_pbslot=UINT(*args,**dict2) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_pbslot.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_pbslot=UINT(**{'sizeinbytes': 2, 'default': 0xffff}) self.__field_pbslot.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_pbslot(self): return self.__field_pbslot.getvalue() def __setfield_pbslot(self, value): if isinstance(value,UINT): self.__field_pbslot=value else: self.__field_pbslot=UINT(value,**{'sizeinbytes': 2, 'default': 0xffff}) def __delfield_pbslot(self): del self.__field_pbslot pbslot=property(__getfield_pbslot, __setfield_pbslot, __delfield_pbslot, None) def iscontainer(self): return True def containerelements(self): yield ('pbslot', self.__field_pbslot, None) class sanyomediaheader(BaseProtogenClass): __fields=['fa', 'faset', 'command', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyomediaheader,self).__init__(**dict) if self.__class__ is sanyomediaheader: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyomediaheader,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyomediaheader,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_fa except: self.__field_fa=UINT(**{'sizeinbytes': 2, 'constant': 0xfa}) self.__field_fa.writetobuffer(buf) try: self.__field_faset except: self.__field_faset=UINT(**{'sizeinbytes': 1, 'default': 0x05}) self.__field_faset.writetobuffer(buf) self.__field_command.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_fa=UINT(**{'sizeinbytes': 2, 'constant': 0xfa}) self.__field_fa.readfrombuffer(buf) self.__field_faset=UINT(**{'sizeinbytes': 1, 'default': 0x05}) self.__field_faset.readfrombuffer(buf) self.__field_command=UINT(**{'sizeinbytes': 2}) self.__field_command.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 2}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_fa(self): try: self.__field_fa except: self.__field_fa=UINT(**{'sizeinbytes': 2, 'constant': 0xfa}) return self.__field_fa.getvalue() def __setfield_fa(self, value): if isinstance(value,UINT): self.__field_fa=value else: self.__field_fa=UINT(value,**{'sizeinbytes': 2, 'constant': 0xfa}) def __delfield_fa(self): del self.__field_fa fa=property(__getfield_fa, __setfield_fa, __delfield_fa, None) def __getfield_faset(self): try: self.__field_faset except: self.__field_faset=UINT(**{'sizeinbytes': 1, 'default': 0x05}) return self.__field_faset.getvalue() def __setfield_faset(self, value): if isinstance(value,UINT): self.__field_faset=value else: self.__field_faset=UINT(value,**{'sizeinbytes': 1, 'default': 0x05}) def __delfield_faset(self): del self.__field_faset faset=property(__getfield_faset, __setfield_faset, __delfield_faset, None) def __getfield_command(self): return self.__field_command.getvalue() def __setfield_command(self, value): if isinstance(value,UINT): self.__field_command=value else: self.__field_command=UINT(value,**{'sizeinbytes': 2}) def __delfield_command(self): del self.__field_command command=property(__getfield_command, __setfield_command, __delfield_command, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 2}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 2}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('fa', self.__field_fa, None) yield ('faset', self.__field_faset, None) yield ('command', self.__field_command, None) yield ('pad', self.__field_pad, None) class sanyosendfilename(BaseProtogenClass): __fields=['header', 'payloadsize', 'filename'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyosendfilename,self).__init__(**dict) if self.__class__ is sanyosendfilename: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyosendfilename,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyosendfilename,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyomediaheader(**{'command': 0xffa1}) self.__field_header.writetobuffer(buf) try: self.__field_payloadsize except: self.__field_payloadsize=UINT(**{'sizeinbytes': 1, 'constant': 0x20}) self.__field_payloadsize.writetobuffer(buf) try: self.__field_filename except: self.__field_filename=USTRING(**{'sizeinbytes': 32, 'default': ""}) self.__field_filename.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyomediaheader(**{'command': 0xffa1}) self.__field_header.readfrombuffer(buf) self.__field_payloadsize=UINT(**{'sizeinbytes': 1, 'constant': 0x20}) self.__field_payloadsize.readfrombuffer(buf) self.__field_filename=USTRING(**{'sizeinbytes': 32, 'default': ""}) self.__field_filename.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyomediaheader(**{'command': 0xffa1}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyomediaheader): self.__field_header=value else: self.__field_header=sanyomediaheader(value,**{'command': 0xffa1}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_payloadsize(self): try: self.__field_payloadsize except: self.__field_payloadsize=UINT(**{'sizeinbytes': 1, 'constant': 0x20}) return self.__field_payloadsize.getvalue() def __setfield_payloadsize(self, value): if isinstance(value,UINT): self.__field_payloadsize=value else: self.__field_payloadsize=UINT(value,**{'sizeinbytes': 1, 'constant': 0x20}) def __delfield_payloadsize(self): del self.__field_payloadsize payloadsize=property(__getfield_payloadsize, __setfield_payloadsize, __delfield_payloadsize, None) def __getfield_filename(self): try: self.__field_filename except: self.__field_filename=USTRING(**{'sizeinbytes': 32, 'default': ""}) return self.__field_filename.getvalue() def __setfield_filename(self, value): if isinstance(value,USTRING): self.__field_filename=value else: self.__field_filename=USTRING(value,**{'sizeinbytes': 32, 'default': ""}) def __delfield_filename(self): del self.__field_filename filename=property(__getfield_filename, __setfield_filename, __delfield_filename, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('payloadsize', self.__field_payloadsize, None) yield ('filename', self.__field_filename, None) class sanyosendfilesize(BaseProtogenClass): __fields=['header', 'payloadsize', 'pad1', 'filesize', 'pad2'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyosendfilesize,self).__init__(**dict) if self.__class__ is sanyosendfilesize: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyosendfilesize,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyosendfilesize,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyomediaheader(**{'command': 0xffc1}) self.__field_header.writetobuffer(buf) try: self.__field_payloadsize except: self.__field_payloadsize=UINT(**{'sizeinbytes': 1, 'constant': 0x20}) self.__field_payloadsize.writetobuffer(buf) try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.writetobuffer(buf) self.__field_filesize.writetobuffer(buf) try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 29}) self.__field_pad2.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyomediaheader(**{'command': 0xffc1}) self.__field_header.readfrombuffer(buf) self.__field_payloadsize=UINT(**{'sizeinbytes': 1, 'constant': 0x20}) self.__field_payloadsize.readfrombuffer(buf) self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) self.__field_pad1.readfrombuffer(buf) self.__field_filesize=UINT(**{'sizeinbytes': 2}) self.__field_filesize.readfrombuffer(buf) self.__field_pad2=UNKNOWN(**{'sizeinbytes': 29}) self.__field_pad2.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyomediaheader(**{'command': 0xffc1}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyomediaheader): self.__field_header=value else: self.__field_header=sanyomediaheader(value,**{'command': 0xffc1}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_payloadsize(self): try: self.__field_payloadsize except: self.__field_payloadsize=UINT(**{'sizeinbytes': 1, 'constant': 0x20}) return self.__field_payloadsize.getvalue() def __setfield_payloadsize(self, value): if isinstance(value,UINT): self.__field_payloadsize=value else: self.__field_payloadsize=UINT(value,**{'sizeinbytes': 1, 'constant': 0x20}) def __delfield_payloadsize(self): del self.__field_payloadsize payloadsize=property(__getfield_payloadsize, __setfield_payloadsize, __delfield_payloadsize, None) def __getfield_pad1(self): try: self.__field_pad1 except: self.__field_pad1=UNKNOWN(**{'sizeinbytes': 1}) return self.__field_pad1.getvalue() def __setfield_pad1(self, value): if isinstance(value,UNKNOWN): self.__field_pad1=value else: self.__field_pad1=UNKNOWN(value,**{'sizeinbytes': 1}) def __delfield_pad1(self): del self.__field_pad1 pad1=property(__getfield_pad1, __setfield_pad1, __delfield_pad1, None) def __getfield_filesize(self): return self.__field_filesize.getvalue() def __setfield_filesize(self, value): if isinstance(value,UINT): self.__field_filesize=value else: self.__field_filesize=UINT(value,**{'sizeinbytes': 2}) def __delfield_filesize(self): del self.__field_filesize filesize=property(__getfield_filesize, __setfield_filesize, __delfield_filesize, None) def __getfield_pad2(self): try: self.__field_pad2 except: self.__field_pad2=UNKNOWN(**{'sizeinbytes': 29}) return self.__field_pad2.getvalue() def __setfield_pad2(self, value): if isinstance(value,UNKNOWN): self.__field_pad2=value else: self.__field_pad2=UNKNOWN(value,**{'sizeinbytes': 29}) def __delfield_pad2(self): del self.__field_pad2 pad2=property(__getfield_pad2, __setfield_pad2, __delfield_pad2, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('payloadsize', self.__field_payloadsize, None) yield ('pad1', self.__field_pad1, None) yield ('filesize', self.__field_filesize, None) yield ('pad2', self.__field_pad2, None) class sanyosendfilefragment(BaseProtogenClass): __fields=['header', 'payloadsize', 'data'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyosendfilefragment,self).__init__(**dict) if self.__class__ is sanyosendfilefragment: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyosendfilefragment,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyosendfilefragment,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyomediaheader() self.__field_header.writetobuffer(buf) try: self.__field_payloadsize except: self.__field_payloadsize=UINT(**{'sizeinbytes': 1, 'constant': 0x20}) self.__field_payloadsize.writetobuffer(buf) self.__field_data.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyomediaheader() self.__field_header.readfrombuffer(buf) self.__field_payloadsize=UINT(**{'sizeinbytes': 1, 'constant': 0x20}) self.__field_payloadsize.readfrombuffer(buf) self.__field_data=DATA(**{'sizeinbytes': 32}) self.__field_data.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyomediaheader() return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyomediaheader): self.__field_header=value else: self.__field_header=sanyomediaheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_payloadsize(self): try: self.__field_payloadsize except: self.__field_payloadsize=UINT(**{'sizeinbytes': 1, 'constant': 0x20}) return self.__field_payloadsize.getvalue() def __setfield_payloadsize(self, value): if isinstance(value,UINT): self.__field_payloadsize=value else: self.__field_payloadsize=UINT(value,**{'sizeinbytes': 1, 'constant': 0x20}) def __delfield_payloadsize(self): del self.__field_payloadsize payloadsize=property(__getfield_payloadsize, __setfield_payloadsize, __delfield_payloadsize, None) def __getfield_data(self): return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,DATA): self.__field_data=value else: self.__field_data=DATA(value,**{'sizeinbytes': 32}) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('payloadsize', self.__field_payloadsize, None) yield ('data', self.__field_data, None) class sanyosendfileterminator(BaseProtogenClass): __fields=['header', 'payloadsize', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyosendfileterminator,self).__init__(**dict) if self.__class__ is sanyosendfileterminator: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyosendfileterminator,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyosendfileterminator,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyomediaheader(**{'command': 0xffe1}) self.__field_header.writetobuffer(buf) try: self.__field_payloadsize except: self.__field_payloadsize=UINT(**{'sizeinbytes': 1, 'constant': 0x20}) self.__field_payloadsize.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 32}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyomediaheader(**{'command': 0xffe1}) self.__field_header.readfrombuffer(buf) self.__field_payloadsize=UINT(**{'sizeinbytes': 1, 'constant': 0x20}) self.__field_payloadsize.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 32}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyomediaheader(**{'command': 0xffe1}) return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyomediaheader): self.__field_header=value else: self.__field_header=sanyomediaheader(value,**{'command': 0xffe1}) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_payloadsize(self): try: self.__field_payloadsize except: self.__field_payloadsize=UINT(**{'sizeinbytes': 1, 'constant': 0x20}) return self.__field_payloadsize.getvalue() def __setfield_payloadsize(self, value): if isinstance(value,UINT): self.__field_payloadsize=value else: self.__field_payloadsize=UINT(value,**{'sizeinbytes': 1, 'constant': 0x20}) def __delfield_payloadsize(self): del self.__field_payloadsize payloadsize=property(__getfield_payloadsize, __setfield_payloadsize, __delfield_payloadsize, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 32}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 32}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('payloadsize', self.__field_payloadsize, None) yield ('pad', self.__field_pad, None) class sanyosendfileresponse(BaseProtogenClass): __fields=['header', 'payloadsize', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(sanyosendfileresponse,self).__init__(**dict) if self.__class__ is sanyosendfileresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(sanyosendfileresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(sanyosendfileresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyomediaheader() self.__field_header.writetobuffer(buf) self.__field_payloadsize.writetobuffer(buf) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyomediaheader() self.__field_header.readfrombuffer(buf) self.__field_payloadsize=UINT(**{'sizeinbytes': 1}) self.__field_payloadsize.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 32}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyomediaheader() return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyomediaheader): self.__field_header=value else: self.__field_header=sanyomediaheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_payloadsize(self): return self.__field_payloadsize.getvalue() def __setfield_payloadsize(self, value): if isinstance(value,UINT): self.__field_payloadsize=value else: self.__field_payloadsize=UINT(value,**{'sizeinbytes': 1}) def __delfield_payloadsize(self): del self.__field_payloadsize payloadsize=property(__getfield_payloadsize, __setfield_payloadsize, __delfield_payloadsize, None) def __getfield_pad(self): return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 32}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('payloadsize', self.__field_payloadsize, None) yield ('pad', self.__field_pad, None) class study(BaseProtogenClass): __fields=['header', 'slot', 'pad'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(study,self).__init__(**dict) if self.__class__ is study: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(study,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(study,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() try: self.__field_header except: self.__field_header=sanyoheader() self.__field_header.writetobuffer(buf) self.__field_slot.writetobuffer(buf) try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 500}) self.__field_pad.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_slot=UINT(**{'sizeinbytes': 2}) self.__field_slot.readfrombuffer(buf) self.__field_pad=UNKNOWN(**{'sizeinbytes': 500}) self.__field_pad.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): try: self.__field_header except: self.__field_header=sanyoheader() return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_slot(self): return self.__field_slot.getvalue() def __setfield_slot(self, value): if isinstance(value,UINT): self.__field_slot=value else: self.__field_slot=UINT(value,**{'sizeinbytes': 2}) def __delfield_slot(self): del self.__field_slot slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None) def __getfield_pad(self): try: self.__field_pad except: self.__field_pad=UNKNOWN(**{'sizeinbytes': 500}) return self.__field_pad.getvalue() def __setfield_pad(self, value): if isinstance(value,UNKNOWN): self.__field_pad=value else: self.__field_pad=UNKNOWN(value,**{'sizeinbytes': 500}) def __delfield_pad(self): del self.__field_pad pad=property(__getfield_pad, __setfield_pad, __delfield_pad, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('slot', self.__field_slot, None) yield ('pad', self.__field_pad, None) class studyresponse(BaseProtogenClass): __fields=['header', 'data'] def __init__(self, *args, **kwargs): dict={} # What was supplied to this function dict.update(kwargs) # Parent constructor super(studyresponse,self).__init__(**dict) if self.__class__ is studyresponse: self._update(args,dict) def getfields(self): return self.__fields def _update(self, args, kwargs): super(studyresponse,self)._update(args,kwargs) keys=kwargs.keys() for key in keys: if key in self.__fields: setattr(self, key, kwargs[key]) del kwargs[key] # Were any unrecognized kwargs passed in? if __debug__: self._complainaboutunusedargs(studyresponse,kwargs) if len(args): raise TypeError('Unexpected arguments supplied: '+`args`) # Make all P fields that haven't already been constructed def writetobuffer(self,buf,autolog=True,logtitle=""): 'Writes this packet to the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() self.__field_header.writetobuffer(buf) self.__field_data.writetobuffer(buf) self._bufferendoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle) def readfrombuffer(self,buf,autolog=True,logtitle=""): 'Reads this packet from the supplied buffer' self._bufferstartoffset=buf.getcurrentoffset() if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle) self.__field_header=sanyoheader() self.__field_header.readfrombuffer(buf) self.__field_data=UNKNOWN() self.__field_data.readfrombuffer(buf) self._bufferendoffset=buf.getcurrentoffset() def __getfield_header(self): return self.__field_header.getvalue() def __setfield_header(self, value): if isinstance(value,sanyoheader): self.__field_header=value else: self.__field_header=sanyoheader(value,) def __delfield_header(self): del self.__field_header header=property(__getfield_header, __setfield_header, __delfield_header, None) def __getfield_data(self): return self.__field_data.getvalue() def __setfield_data(self, value): if isinstance(value,UNKNOWN): self.__field_data=value else: self.__field_data=UNKNOWN(value,) def __delfield_data(self): del self.__field_data data=property(__getfield_data, __setfield_data, __delfield_data, None) def iscontainer(self): return True def containerelements(self): yield ('header', self.__field_header, None) yield ('data', self.__field_data, None) bitpim-1.0.7+dfsg1/src/phones/com_lgvx9100.py0000644001616600161660000010776311051132227016744 0ustar amuamu### BITPIM ### ### Copyright (C) 2008 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: com_lgvx9100.py 4681 2008-08-14 22:41:27Z djpham $ """ Communicate with the LG VX9100 (enV2) cell phone. This is based on the enV model """ # BitPim modules import common import com_brew import com_lg import com_lgvx8550 import p_lgvx9100 import prototypes import helpids import sms DEBUG1=False DEBUG2=False #------------------------------------------------------------------------------- parentphone=com_lgvx8550.Phone class Phone(parentphone): "Talk to the LG VX9100 cell phone" desc="LG-VX9100" helpid=helpids.ID_PHONE_LGVX9100 protocolclass=p_lgvx9100 serialsname='lgvx9100' my_model='VX9100' # rintones and wallpaper info, copy from VX9900, may need to change to match # what the phone actually has external_storage_root='mmc1/' builtinringtones= ('Low Beep Once', 'Low Beeps', 'Loud Beep Once', 'Loud Beeps', 'Door Bell', 'VZW Default Tone') + \ tuple(['Ringtone '+`n` for n in range(1,17)]) + \ ('No Ring',) ringtonelocations= ( # type index file default dir external dir max type Index ( 'ringers', 'dload/myringtone.dat','brew/mod/10889/ringtones','mmc1/ringers', 100, protocolclass.INDEX_RT_TYPE, 100), ( 'sounds', 'dload/mysound.dat', 'brew/mod/18067', '', 100, protocolclass.INDEX_SOUND_TYPE, None), ( 'sounds(sd)', 'dload/sd_sound.dat', 'mmc1/my_sounds', '', 100, protocolclass.INDEX_SDSOUND_TYPE, None), ## ( 'music', 'dload/efs_music.dat', 'my_music', '', 100, 0x104, None), ## ( 'music(sd)', 'dload/sd_music.dat', 'mmc1/my_music', '', 100, 0x14, None), ) wallpaperlocations= ( # type index file default dir external dir max type Index ( 'images', 'dload/image.dat', 'brew/mod/10888', '', 100, protocolclass.INDEX_IMAGE_TYPE, 100), ( 'images(sd)', 'dload/sd_image.dat', 'mmc1/my_pix', '', 100, protocolclass.INDEX_SDIMAGE_TYPE, None), ( 'video', 'dload/video.dat', 'brew/mod/10890', '', 100, protocolclass.INDEX_VIDEO_TYPE, None), ( 'video(sd)', 'dload/sd_video.dat', 'mmc1/my_flix', '', 100, protocolclass.INDEX_SDVIDEO_TYPE, None), ) def __init__(self, logtarget, commport): parentphone.__init__(self, logtarget, commport) def setDMversion(self): self._DMv6=True self._DMv5=False # Fundamentals: # - get_esn - same as LG VX-8300 # - getgroups - same as LG VX-8100 # - getwallpaperindices - LGUncountedIndexedMedia # - getrintoneindices - LGUncountedIndexedMedia # - DM Version - T99VZV01: N/A, T99VZV02: 5 # phonebook stuff----------------------------------------------------------- # This is essentially the same with the VX-8550 with a few tweaks. # These tweaks are probably applicable to the VX-8550 as well, but since # I can't test them on an actual VX-8550, I'll leave it alone. # groups def getgroups(self, results): "Read groups" # Reads groups that use explicit IDs self.log("Reading group information") g=self.readobject(self.protocolclass.pb_group_filename, self.protocolclass.pbgroups, 'Reading groups data') groups={} for _group in g.groups: if _group.name: groups[_group.groupid]= { 'name': _group.name, 'user_added': _group.user_added } results['groups'] = groups return groups def savegroups(self, data): groups=data.get('groups', {}) keys=groups.keys() keys.sort() keys.reverse() g=self.protocolclass.pbgroups() # write the No Group entry first g.groups.append(self.protocolclass.pbgroup(name='No Group')) # now write the rest in reverse ID order for k in keys: if not k: # already wrote this one out continue g.groups.append(self.protocolclass.pbgroup(name=groups[k]['name'], groupid=k, user_added=groups[k].get('user_added', 1))) self.writeobject(self.protocolclass.pb_group_filename, g, logtitle='Writing phonebook groups', uselocalfs=DEBUG1) def _get_speeddials(self): """Return the speed dials dict""" speeds={} try: if self.protocolclass.NUMSPEEDDIALS: self.log("Reading speed dials") sd=self.readobject(self.protocolclass.speed_file_name, self.protocolclass.speeddials, 'Reading speed dials') for _idx,_entry in enumerate(sd.speeddials): if _entry.valid(): speeds.setdefault(_entry.entry, {}).update({ _entry.number: _idx }) except com_brew.BrewNoSuchFileException: pass return speeds def _build_media_dict(self, fundamentals, media_data, index_name): """Build & return a dict with keys being the media filenames and values being the name of the index item (index['name']) """ _res={} _media_index=fundamentals.get(index_name, {}) for _item in media_data.items: _pathname=_item.pathname if _pathname and not _res.has_key(_pathname): # not already in dict, look up the name if any _res[_pathname]=None for _entry in _media_index.values(): if _entry.get('filename', None)==_pathname: _res[_pathname]=_entry['name'] break return _res def _build_ice_dict(self): # Return an ICE dict for building phone entries _res={} _ice=self.readobject(self.protocolclass.pb_ice_file_name, self.protocolclass.iceentryfile, logtitle='Reading ICE entries') for _item in _ice.items: if _item.valid(): _res[_item.pb_index]=_item.entry_number return _res def getphonebook (self, result): """Reads the phonebook data. The L{getfundamentals} information will already be in result.""" # Read speed dials first -- same file format as the VX-8100 _speeds=self._get_speeddials() # Read the emergency contacts list self.log("Reading ICE entries") _ices=self._build_ice_dict() self.log("Reading phonebook entries") pb_entries=self.readobject(self.protocolclass.pb_file_name, self.protocolclass.pbfile, logtitle='Reading phonebook entries') self.log("Reading phone numbers") pb_numbers=self.readobject(self.protocolclass.pn_file_name, self.protocolclass.pnfile, logtitle='Reading phonebook numbers') self.log("Reading Ringtone IDs") ring_pathf=self._get_path_index(self.protocolclass.RTPathIndexFile) _rt_ids=self._build_media_dict(result, ring_pathf, 'ringtone-index') self.log("Reading Picture IDs") picid_pathf=self._get_path_index(self.protocolclass.WPPathIndexFile) _wp_ids=self._build_media_dict(result, picid_pathf, 'wallpaper-index') pbook={} for _cnt in range(self.protocolclass.NUMPHONEBOOKENTRIES): pb_entry=pb_entries.items[_cnt] if not pb_entry.valid(): continue try: self.log("Parse entry "+`_cnt`+" - " + pb_entry.name) pbook[_cnt]=self.extractphonebookentry(pb_entry, pb_numbers, _speeds, _ices, result, _rt_ids.get(ring_pathf.items[_cnt].pathname, None), _wp_ids.get(picid_pathf.items[_cnt].pathname, None)) self.progress(_cnt, self.protocolclass.NUMPHONEBOOKENTRIES, pb_entry.name) except common.PhoneBookBusyException: raise except Exception, e: # Something's wrong with this entry, log it and skip self.log('Failed to parse entry %d'%_cnt) self.log('Exception %s raised'%`e`) if __debug__: raise self.progress(self.protocolclass.NUMPHONEBOOKENTRIES, self.protocolclass.NUMPHONEBOOKENTRIES, "Phone book read completed") result['phonebook']=pbook cats=[] for i in result['groups']: if result['groups'][i]['name']!='No Group': cats.append(result['groups'][i]['name']) result['categories']=cats return pbook def extractphonebookentry(self, entry, numbers, speeds, ices, fundamentals, rt_name, wp_name): """Return a phonebook entry in BitPim format. This is called from getphonebook.""" res={} # serials res['serials']=[ {'sourcetype': self.serialsname, 'sourceuniqueid': fundamentals['uniqueserial'], 'serial1': entry.entry_number1, 'serial2': entry.entry_number1 } ] # only one name res['names']=[ {'full': entry.name} ] # only one category cat=fundamentals['groups'].get(entry.group, {'name': "No Group"})['name'] if cat!="No Group": res['categories']=[ {'category': cat} ] # emails res['emails']=[] for i in entry.emails: if len(i.email): res['emails'].append( {'email': i.email} ) if not len(res['emails']): del res['emails'] # it was empty # wallpapers if entry.wallpaper!=self.protocolclass.NOWALLPAPER: try: if entry.wallpaper == 0x64: paper = wp_name else: paper = fundamentals['wallpaper-index'][entry.wallpaper]['name'] res['wallpapers']=[ {'wallpaper': paper, 'use': 'call'} ] except: print "can't find wallpaper for index",entry.wallpaper # ringtones if entry.ringtone != self.protocolclass.NORINGTONE: try: if entry.ringtone == 0x64: tone = rt_name else: tone=fundamentals['ringtone-index'][entry.ringtone]['name'] if tone: res['ringtones']=[ {'ringtone': tone, 'use': 'call'} ] except: print "can't find ringtone for index",entry.ringtone # assume we are like the VX-8100 in this regard -- looks correct res=self._assignpbtypeandspeeddialsbytype(entry, numbers, speeds, res) # assign the ICE entry to the associated contact to keep them in sync res=self._assigniceentry(entry, numbers, ices, res) return res def _assignpbtypeandspeeddialsbytype(self, entry, numbers, speeds, res): # for some phones (e.g. vx8100) the speeddial numberindex is really the numbertype (now why would LG want to change this!) res['numbers']=[] for i in range(self.protocolclass.NUMPHONENUMBERS): if entry.numberindices[i].numberindex>=\ self.protocolclass.NUMPHONENUMBERENTRIES: # invalid number continue _pnentry=numbers.items[entry.numberindices[i].numberindex] num=_pnentry.phone_number num_type=_pnentry.type if len(num): t=self.protocolclass.numbertypetab[num_type] if t[-1]=='2': t=t[:-1] res['numbers'].append({'number': num, 'type': t}) # if this is a speeddial number set it if speeds.has_key(entry.entry_number0) and \ speeds[entry.entry_number0].has_key(num_type): res['numbers'][i]['speeddial']=speeds[entry.entry_number0][num_type] return res def _assigniceentry(self, entry, numbers, ices, res): if ices.has_key(entry.entry_number0): # this contact entry is an ICE entry res['ice']=[ { 'iceindex': ices[entry.entry_number0] } ] self.log('Entry %d is ICE %d'%(entry.entry_number0, ices[entry.entry_number0])) return res def _get_next_pb_id(self): """Return the next available pbentry ID""" return self.readobject(self.protocolclass.pb_recordid_filename, self.protocolclass.RecordIdEntry, logtitle='Reading record_id').idnum def _save_next_pb_id(self, idnum): """Save the next pbentry ID""" self.writeobject(self.protocolclass.pb_recordid_filename, self.protocolclass.RecordIdEntry(idnum=idnum), logtitle='Writing record_id', uselocalfs=DEBUG1) def savephonebook (self, data): "Saves out the phonebook" self.savegroups (data) ring_pathf=self.protocolclass.PathIndexFile() picid_pathf=self.protocolclass.PathIndexFile() # the pbentry.dat will will be overwritten so there is no need to delete entries pbook = data.get('phonebook', {}) keys = pbook.keys () keys.sort () _rt_index=data.get('ringtone-index', {}) _wp_index=data.get('wallpaper-index', {}) entry_num0 = 0 entry_num1=self._get_next_pb_id() pb_entries = self.protocolclass.pbfile() pn_entries=self.protocolclass.pnfile() ice_entries = self.protocolclass.iceentryfile() for i in range(self.protocolclass.NUMEMERGENCYCONTACTS): ice_entries.items.append (self.protocolclass.iceentry()) speeddials={} for i in keys: pb_entries.items.append(self.make_entry (pn_entries, speeddials, ice_entries, entry_num0, entry_num1, pbook[i], data, ring_pathf,_rt_index, picid_pathf, _wp_index)) entry_num0 += 1 if entry_num0 >= self.protocolclass.NUMPHONEBOOKENTRIES: self.log ("Maximum number of phonebook entries reached") break if entry_num1==0xffffffff: entry_num1=0 else: entry_num1+=1 # write phonebook entries self.log ("Writing phonebook entries") self.writeobject(self.protocolclass.pb_file_name, pb_entries, logtitle='Writing phonebook entries', uselocalfs=DEBUG1) # write phone numbers self.log ("Writing phone numbers") self.writeobject(self.protocolclass.pn_file_name, pn_entries, logtitle='Writing phonebook numbers', uselocalfs=DEBUG1) # write ringtone index self.log('Writing ringtone ID') self.writeobject(self.protocolclass.RTPathIndexFile, ring_pathf, logtitle='Writing ringtone paths', uselocalfs=DEBUG1) # write wallpaer index self.log('Writing pciture ID') self.writeobject(self.protocolclass.WPPathIndexFile, picid_pathf, logtitle='Writing wallpaper paths', uselocalfs=DEBUG1) # write ICE index self.log('Writing ICE entries') self.writeobject(self.protocolclass.pb_ice_file_name, ice_entries, logtitle='Writing ICE entries', uselocalfs=DEBUG1) # update speed dials req=self.protocolclass.speeddials() # slot 0 is always unused req.speeddials.append(self.protocolclass.speeddial()) # if empty, slot 1 is for voicemail if speeddials.has_key(1): req.speeddials.append(self.protocolclass.speeddial(entry=speeddials[1]['entry'], number=speeddials[1]['type'])) else: req.speeddials.append(self.protocolclass.speeddial(entry=1000, number=6)) for i in range(2, self.protocolclass.NUMSPEEDDIALS): sd=self.protocolclass.speeddial() if speeddials.has_key(i): sd.entry=speeddials[i]['entry'] sd.number=speeddials[i]['type'] req.speeddials.append(sd) self.log('Writing speed dials') self.writeobject(self.protocolclass.speed_file_name, req, logtitle='Writing speed dials data', uselocalfs=DEBUG1) # update the next pbentries ID self._save_next_pb_id(entry_num1) data["rebootphone"]=True return data def make_pn_entry (self, phone_number, number_type, pn_id, pbpn_id, pe_id): """ Create a non-blank pnfileentry frome a phone number string """ if len(phone_number) == 0: raise new_entry = self.protocolclass.pnfileentry(entry_tag=self.protocolclass.PB_NUMBER_SOR) new_entry.pn_id = pn_id new_entry.pe_id = pe_id new_entry.phone_number = phone_number new_entry.type = number_type new_entry.pn_order = pbpn_id return new_entry def make_ice_entry (self, ice_id, pb_id): """ Create a iceentry from a pb_id and ice_id """ new_entry = self.protocolclass.iceentry() new_entry.entry_assigned = 1 new_entry.entry_number = ice_id new_entry.pb_index = pb_id return new_entry def make_entry (self, pn_entries, speeddials, ice_entries, entry_num0, entry_num1, pb_entry, data, ring_pathf, rt_index, picid_pathf, wp_index): """ Create a pbfileentry from a bitpim phonebook entry """ new_entry = self.protocolclass.pbfileentry(entry_tag=self.protocolclass.PB_ENTRY_SOR) # entry IDs new_entry.entry_number0 = entry_num0 new_entry.entry_number1 = entry_num1 for key in pb_entry: if key in ('emails', 'numbertypes'): l = getattr (new_entry, key) for item in pb_entry[key]: l.append(item) elif key == 'numbers': l = getattr (new_entry, 'numberindices') for i in range(0, self.protocolclass.NUMPHONENUMBERS): new_pn_id = len (pn_entries.items) if new_pn_id == self.protocolclass.NUMPHONENUMBERENTRIES: # this state should not be possible. should this raise an exception? self.log ("Maximum number of phone numbers reached") break try: pn_entries.items.append(self.make_pn_entry (pb_entry[key][i],pb_entry['numbertypes'][i], new_pn_id, i, entry_num0)) l.append (new_pn_id) except: l.append (0xffff) elif key == 'speeddials': for _sd,_num_type in zip(pb_entry['speeddials'], pb_entry['numbertypes']): if _sd is not None: speeddials[_sd]={ 'entry': entry_num0, 'type': _num_type } elif key == 'ice': # In Case of Emergency _ice = pb_entry['ice'] if _ice is not None and len(_ice) > 0: _ice_entry = _ice[0]['iceindex'] ice_entries.items[_ice_entry] = self.make_ice_entry (_ice_entry, entry_num0) elif key == 'ringtone': new_entry.ringtone = self._findmediainindex(data['ringtone-index'], pb_entry['ringtone'], pb_entry['name'], 'ringtone') try: _filename = rt_index[new_entry.ringtone]['filename'] ring_pathf.items.append(self.protocolclass.PathIndexEntry(pathname=_filename)) new_entry.ringtone = 0x64 except: ring_pathf.items.append(self.protocolclass.PathIndexEntry()) elif key == 'wallpaper': new_entry.wallpaper = self._findmediainindex(data['wallpaper-index'], pb_entry['wallpaper'], pb_entry['name'], 'wallpaper') try: _filename = wp_index[new_entry.wallpaper]['filename'] picid_pathf.items.append(self.protocolclass.PathIndexEntry(pathname=_filename)) new_entry.wallpaper = 0x64 except: picid_pathf.items.append(self.protocolclass.PathIndexEntry()) elif key in new_entry.getfields(): setattr (new_entry, key, pb_entry[key]) return new_entry # Calendar stuff------------------------------------------------------------ def _scheduleextras(self, data, fwversion): data.serial_number = '000000d1-00000000-00000000-' + fwversion data.unknown3 = 0x01fc # ringtones and wallpapers stuff-------------------------------------------- def savewallpapers(self, results, merge): results['rebootphone']=True return self.savemedia('wallpapers', 'wallpaper-index', self.wallpaperlocations, results, merge, self.getwallpaperindices, True) def saveringtones(self, results, merge): # Let the phone rebuild the index file, just need to reboot results['rebootphone']=True return self.savemedia('ringtone', 'ringtone-index', self.ringtonelocations, results, merge, self.getringtoneindices, True) # SMS Stuff----------------------------------------------------------------- # Again, this is very similar to the 8800, just make it work with the 9100 def getindex(self, filename): try: return self.readobject(filename, self.protocolclass.indexfile, logtitle='Reading index file', uselocalfs=DEBUG2).items except: return [] def _readsms(self): res={} # The Voyager and Venus use index files to keep track of SMS messages for item in self.getindex(self.protocolclass.drafts_index): sf=self.readobject(item.filename, self.protocolclass.sms_saved, logtitle='SMS draft item', uselocalfs=DEBUG2) # The 9100 only has draft messages (saved outgoing messaged) entry=self._getoutboxmessage(sf.outbox) entry.folder=entry.Folder_Saved res[entry.id]=entry for item in self.getindex(self.protocolclass.inbox_index): sf=self.readobject(item.filename, self.protocolclass.sms_in, logtitle='SMS inbox item', uselocalfs=DEBUG2) entry=self._getinboxmessage(sf) res[entry.id]=entry for item in self.getindex(self.protocolclass.outbox_index): sf=self.readobject(item.filename, self.protocolclass.sms_out, logtitle='SMS outbox item', uselocalfs=DEBUG2) entry=self._getoutboxmessage(sf) res[entry.id]=entry return res def _getinboxmessage(self, sf): entry=sms.SMSEntry() entry.folder=entry.Folder_Inbox entry.datetime="%d%02d%02dT%02d%02d%02d" % (sf.GPStime) entry._from=sf.sender if sf.sender else sf.sender_name entry.subject=sf.subject entry.locked=sf.locked if sf.priority==0: entry.priority=sms.SMSEntry.Priority_Normal else: entry.priority=sms.SMSEntry.Priority_High entry.read=sf.read txt="" _decode_func=self._get_text_from_sms_msg_with_header if \ sf.msgs[1].msg_length else \ self._get_text_from_sms_msg_without_header for _entry in sf.msgs: if _entry.msg_length: txt+=_decode_func(_entry.msg_data.msg, _entry.msg_length) entry.text=unicode(txt, errors='ignore') entry.callback=sf.callback return entry #------------------------------------------------------------------------------- parentprofile=com_lgvx8550.Profile class Profile(parentprofile): protocolclass=Phone.protocolclass serialsname=Phone.serialsname BP_Calendar_Version=3 phone_manufacturer='LG Electronics Inc' phone_model='VX9100' WALLPAPER_WIDTH=320 WALLPAPER_HEIGHT=240 # outside LCD: 160x64 imageorigins={} imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images(sd)")) imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video(sd)")) def GetImageOrigins(self): return self.imageorigins ## ringtoneorigins=('ringers', 'sounds', 'sounds(sd)',' music', 'music(sd)') ## excluded_ringtone_origins=('sounds', 'sounds(sd)', 'music', 'music(sd)') ringtoneorigins=('ringers', 'sounds', 'sounds(sd)') excluded_ringtone_origins=('sounds', 'sounds(sd)') # our targets are the same for all origins imagetargets={} imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper", {'width': 320, 'height': 215, 'format': "JPEG"})) imagetargets.update(common.getkv(parentprofile.stockimagetargets, "outsidelcd", {'width': 160, 'height': 64, 'format': "JPEG"})) def GetTargetsForImageOrigin(self, origin): return self.imagetargets _supportedsyncs=( ('phonebook', 'read', None), # all phonebook reading ('calendar', 'read', None), # all calendar reading ('wallpaper', 'read', None), # all wallpaper reading ('ringtone', 'read', None), # all ringtone reading ('call_history', 'read', None),# all call history list reading ('sms', 'read', None), # all SMS list reading ('memo', 'read', None), # all memo list reading ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar ('wallpaper', 'write', 'MERGE'), # merge and overwrite wallpaper ## ('wallpaper', 'write', 'OVERWRITE'), ('ringtone', 'write', 'MERGE'), # merge and overwrite ringtone ## ('ringtone', 'write', 'OVERWRITE'), #### ('sms', 'write', 'OVERWRITE'), # all SMS list writing ('memo', 'write', 'OVERWRITE'), # all memo list writing #### ('playlist', 'read', 'OVERWRITE'), #### ('playlist', 'write', 'OVERWRITE'), ) def normalisegroups(self, helper, data): "Assigns groups based on category data" pad=[] keys=data['groups'].keys() keys.sort() for k in keys: if k: # ignore key 0 which is 'No Group' name=data['groups'][k]['name'] pad.append(name) groups=helper.getmostpopularcategories(self.protocolclass.MAX_PHONEBOOK_GROUPS, data['phonebook'], ["No Group"], 32, pad) # alpha sort groups.sort() # newgroups newgroups={} # put in No group newgroups[0]={'name': 'No Group', 'user_added': 0} # populate for name in groups: # existing entries remain unchanged if name=="No Group": continue key,value=self._getgroup(name, data['groups']) if key is not None and key!=0: newgroups[key]=value # new entries get whatever numbers are free for name in groups: key,value=self._getgroup(name, newgroups) if key is None: for key in range(1,100000): if key not in newgroups: newgroups[key]={'name': name, 'user_added': 1} break # yay, done if data['groups']!=newgroups: data['groups']=newgroups data['rebootphone']=True def convertphonebooktophone(self, helper, data): """Converts the data to what will be used by the phone @param data: contains the dict returned by getfundamentals as well as where the results go""" results={} self.normalisegroups(helper, data) for pbentry in data['phonebook']: if len(results)==self.protocolclass.NUMPHONEBOOKENTRIES: break e={} # entry out entry=data['phonebook'][pbentry] # entry in try: # serials serial1=helper.getserial(entry.get('serials', []), self.serialsname, data['uniqueserial'], 'serial1', 0) serial2=helper.getserial(entry.get('serials', []), self.serialsname, data['uniqueserial'], 'serial2', serial1) e['serial1']=serial1 e['serial2']=serial2 for ss in entry["serials"]: if ss["sourcetype"]=="bitpim": e['bitpimserial']=ss assert e['bitpimserial'] # name e['name']=helper.getfullname(entry.get('names', []),1,1,32)[0] # ice e['ice']=entry.get('ice', None) # categories/groups cat=helper.makeone(helper.getcategory(entry.get('categories', []),0,1,32), None) if cat is None: e['group']=0 else: key,value=self._getgroup(cat, data['groups']) if key is not None: e['group']=key else: # sorry no space for this category e['group']=0 # email addresses emails=helper.getemails(entry.get('emails', []) ,0,self.protocolclass.NUMEMAILS,48) e['emails']=helper.filllist(emails, self.protocolclass.NUMEMAILS, "") # phone numbers # there must be at least one email address or phonenumber minnumbers=1 if len(emails): minnumbers=0 numbers=helper.getnumbers(entry.get('numbers', []),minnumbers,self.protocolclass.NUMPHONENUMBERS) e['numbertypes']=[] e['numbers']=[] e['speeddials']=[] for numindex in range(len(numbers)): num=numbers[numindex] # deal with type b4=len(e['numbertypes']) type=num['type'] for i,t in enumerate(self.protocolclass.numbertypetab): if type==t: # some voodoo to ensure the second home becomes home2 if i in e['numbertypes'] and t[-1]!='2': type+='2' continue e['numbertypes'].append(i) break if t=='none': # conveniently last entry e['numbertypes'].append(i) break if len(e['numbertypes'])==b4: # we couldn't find a type for the number helper.add_error_message('Number %s (%s/%s) not supported and ignored.'% (num['number'], e['name'], num['type'])) continue # deal with number number=self.phonize(num['number']) if len(number)==0: # no actual digits in the number continue if len(number)>24: # get this number from somewhere sensible # ::TODO:: number is too long and we have to either truncate it or ignore it? number=number[:24] # truncate for moment e['numbers'].append(number) # deal with speed dial sd=num.get("speeddial", None) if sd is not None and \ sd>=self.protocolclass.FIRSTSPEEDDIAL and \ sd<=self.protocolclass.LASTSPEEDDIAL: e['speeddials'].append(sd) else: e['speeddials'].append(None) if len(e['numbers']) ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: comscan.py 4368 2007-08-19 23:33:52Z djpham $ """Detect and enumerate com(serial) ports You should close all com ports you have open before calling any functions in this module. If you don't they will be detected as in use. Call the comscan() function It returns a list with each entry being a dictionary of useful information. See the platform notes for what is in each one. For your convenience the entries in the list are also sorted into an order that would make sense to the user. Platform Notes: =============== w Windows9x W WindowsNT/2K/XP L Linux M Mac wWLM name string Serial device name wWLM available Bool True if it is possible to open this device wW active Bool Is the driver actually running? An example of when this is False is USB devices or Bluetooth etc that aren't currently plugged in. If you are presenting stuff for users, do not show entries where this is false w driverstatus dict status is some random number, problem is non-zero if there is some issue (eg device disabled) wW hardwareinstance string instance of the device in the registry as named by Windows wWLM description string a friendly name to show users wW driverdate tuple (year, month, day) W driverversion string version string wW driverprovider string the manufacturer of the device driver wW driverdescription string some generic description of the driver L device tuple (major, minor) device specification L driver string the driver name from /proc/devices (eg ttyS or ttyUSB) """ from __future__ import with_statement version="$Revision: 4368 $" import sys import os import time import glob def _IsWindows(): return sys.platform=='win32' def _IsLinux(): return sys.platform.startswith('linux') def _IsMac(): return sys.platform.startswith('darwin') if _IsWindows(): import _winreg import win32file import win32con class RegistryAccess: """A class that is significantly easier to use to access the Registry""" def __init__(self, hive=_winreg.HKEY_LOCAL_MACHINE): self.rootkey=_winreg.ConnectRegistry(None, hive) def getchildren(self, key): """Returns a list of the child nodes of a key""" k=_winreg.OpenKey(self.rootkey, key) index=0 res=[] while 1: try: subkey=_winreg.EnumKey(k, index) res.append(subkey) index+=1 except: # ran out of keys break return res def safegetchildren(self, key): """Doesn't throw exception if doesn't exist @return: A list of zero or more items""" try: k=_winreg.OpenKey(self.rootkey, key) except: return [] index=0 res=[] while 1: try: subkey=_winreg.EnumKey(k, index) res.append(subkey) index+=1 except WindowsError,e: if e[0]==259: # No more data is available break elif e[0]==234: # more data is available index+=1 continue raise return res def getvalue(self, key, node): """Gets a value The result is returned as the correct type (string, int, etc)""" k=_winreg.OpenKey(self.rootkey, key) v,t=_winreg.QueryValueEx(k, node) if t==2: return int(v) if t==3: # lsb data res=0 mult=1 for i in v: res+=ord(i)*mult mult*=256 return res # un unicode if possible if isinstance(v, unicode): try: return str(v) except: pass return v def safegetvalue(self, key, node, default=None): """Gets a value and if nothing is found returns the default""" try: return self.getvalue(key, node) except: return default def findkey(self, start, lookfor, prependresult=""): """Searches for the named key""" res=[] for i in self.getchildren(start): if i==lookfor: res.append(prependresult+i) else: l=self.findkey(start+"\\"+i, lookfor, prependresult+i+"\\") res.extend(l) return res def getallchildren(self, start, prependresult=""): """Returns a list of all child nodes in the hierarchy""" res=[] for i in self.getchildren(start): res.append(prependresult+i) l=self.getallchildren(start+"\\"+i, prependresult+i+"\\") res.extend(l) return res def _comscanwindows(): """Get detail about all com ports on Windows This code functions on both win9x and nt/2k/xp""" # give results back results={} resultscount=0 # list of active drivers on win98 activedrivers={} reg=RegistryAccess(_winreg.HKEY_DYN_DATA) k=r"Config Manager\Enum" for device in reg.safegetchildren(k): hw=reg.safegetvalue(k+"\\"+device, "hardwarekey") if hw is None: continue status=reg.safegetvalue(k+"\\"+device, "status", -1) problem=reg.safegetvalue(k+"\\"+device, "problem", -1) activedrivers[hw.upper()]={ 'status': status, 'problem': problem } # list of active drivers on winXP. Apparently Win2k is different? reg=RegistryAccess(_winreg.HKEY_LOCAL_MACHINE) k=r"SYSTEM\CurrentControlSet\Services" for service in reg.safegetchildren(k): # we will just take largest number count=int(reg.safegetvalue(k+"\\"+service+"\\Enum", "Count", 0)) next=int(reg.safegetvalue(k+"\\"+service+"\\Enum", "NextInstance", 0)) for id in range(max(count,next)): hw=reg.safegetvalue(k+"\\"+service+"\\Enum", `id`) if hw is None: continue activedrivers[hw.upper()]=None # scan through everything listed in Enum. Enum is the key containing a list of all # running hardware reg=RegistryAccess(_winreg.HKEY_LOCAL_MACHINE) # The three keys are: # # - where to find hardware # This then has three layers of children. # Enum # +-- Category (something like BIOS, PCI etc) # +-- Driver (vendor/product ids etc) # +-- Instance (An actual device. You may have more than one instance) # # - where to find information about drivers. The driver name is looked up in the instance # (using the key "driver") and then looked for as a child key of driverlocation to find # out more about the driver # # - where to look for the portname key. Eg in Win98 it is directly in the instance whereas # in XP it is below "Device Parameters" subkey of the instance for enumstr, driverlocation, portnamelocation in ( (r"SYSTEM\CurrentControlSet\Enum", r"SYSTEM\CurrentControlSet\Control\Class", r"\Device Parameters"), # win2K/XP (r"Enum", r"System\CurrentControlSet\Services\Class", ""), # win98 ): for category in reg.safegetchildren(enumstr): catstr=enumstr+"\\"+category for driver in reg.safegetchildren(catstr): drvstr=catstr+"\\"+driver for instance in reg.safegetchildren(drvstr): inststr=drvstr+"\\"+instance # see if there is a portname name=reg.safegetvalue(inststr+portnamelocation, "PORTNAME", "") # We only want com ports if len(name)<4 or name.lower()[:3]!="com": continue # Get rid of phantom devices phantom=reg.safegetvalue(inststr, "Phantom", 0) if phantom: continue # Lookup the class klassguid=reg.safegetvalue(inststr, "ClassGUID") if klassguid is not None: # win2k uses ClassGuid klass=reg.safegetvalue(driverlocation+"\\"+klassguid, "Class") else: # Win9x and WinXP use Class klass=reg.safegetvalue(inststr, "Class") if klass is None: continue klass=klass.lower() if klass=='ports': klass='serial' elif klass=='modem': klass='modem' else: continue # verify COM is followed by digits only try: portnum=int(name[3:]) except: continue # we now have some sort of match res={} res['name']=name.upper() res['class']=klass # is the device active? kp=inststr[len(enumstr)+1:].upper() if kp in activedrivers: res['active']=True if activedrivers[kp] is not None: res['driverstatus']=activedrivers[kp] else: res['active']=False # available? if res['active']: try: usename=name if sys.platform=='win32' and name.lower().startswith("com"): usename="\\\\?\\"+name print "scanning " +usename ComPort = win32file.CreateFile(usename, win32con.GENERIC_READ | win32con.GENERIC_WRITE, 0, None, win32con.OPEN_EXISTING, win32con.FILE_ATTRIBUTE_NORMAL, None) win32file.CloseHandle(ComPort) res['available']=True except Exception,e: print usename,"is not available",e res['available']=False else: res['available']=False # hardwareinstance res['hardwareinstance']=kp # friendly name res['description']=reg.safegetvalue(inststr, "FriendlyName", "") # driver information key drv=reg.safegetvalue(inststr, "Driver") if drv is not None: driverkey=driverlocation+"\\"+drv # get some useful driver information for subkey, reskey in \ ("driverdate", "driverdate"), \ ("providername", "driverprovider"), \ ("driverdesc", "driverdescription"), \ ("driverversion", "driverversion"): val=reg.safegetvalue(driverkey, subkey, None) if val is None: continue if reskey=="driverdate": try: val2=val.split('-') val=int(val2[2]), int(val2[0]), int(val2[1]) except: # ignroe wierd dates continue res[reskey]=val results[resultscount]=res resultscount+=1 return results # There follows a demonstration of how user friendly Linux is. # Users are expected by some form of magic to know exactly what # the names of their devices are. We can't even tell the difference # between a serial port not existing, and there not being sufficient # permission to open it def _comscanlinux(maxnum=9): """Get all the ports on Linux Note that Linux doesn't actually provide any way to enumerate actual ports. Consequently we just look for device nodes. It still isn't possible to establish if there are actual device drivers behind them. The availability testing is done however. @param maxnum: The highest numbered device to look for (eg maxnum of 17 will look for ttyS0 ... ttys17) """ # track of mapping majors to drivers drivers={} # get the list of char drivers from /proc/drivers with file('/proc/devices', 'r') as f: f.readline() # skip "Character devices:" header for line in f.readlines(): line=line.split() if len(line)!=2: break # next section major,driver=line drivers[int(major)]=driver # device nodes we have seen so we don't repeat them in listing devcache={} resultscount=0 results={} for prefix, description, klass in ( ("/dev/cua", "Standard serial port", "serial"), ("/dev/ttyUSB", "USB to serial convertor", "serial"), ("/dev/ttyACM", "USB modem", "modem"), ("/dev/rfcomm", "Bluetooth", "modem"), ("/dev/usb/ttyUSB", "USB to serial convertor", "serial"), ("/dev/usb/tts/", "USB to serial convertor", "serial"), ("/dev/usb/acm/", "USB modem", "modem"), ("/dev/input/ttyACM", "USB modem", "modem") ): for num in range(maxnum+1): name=prefix+`num` if not os.path.exists(name): continue res={} res['name']=name res['class']=klass res['description']=description+" ("+name+")" dev=os.stat(name).st_rdev try: with file(name, 'rw'): res['available']=True except: res['available']=False # linux specific, and i think they do funky stuff on kernel 2.6 # there is no way to get these 'normally' from the python library major=(dev>>8)&0xff minor=dev&0xff res['device']=(major, minor) if drivers.has_key(major): res['driver']=drivers[major] if res['available']: if dev not in devcache or not devcache[dev][0]['available']: results[resultscount]=res resultscount+=1 devcache[dev]=[res] continue # not available, so add try: devcache[dev].append(res) except: devcache[dev]=[res] # add in one failed device type per major/minor for dev in devcache: if devcache[dev][0]['available']: continue results[resultscount]=devcache[dev][0] resultscount+=1 return results def _comscanmac(): """Get all the ports on Mac Just look for /dev/cu.* entries, they all seem to populate here whether USB->Serial, builtin, bluetooth, etc... """ resultscount=0 results={} for name in glob.glob("/dev/cu.*"): res={} res['name']=name if name.upper().rfind("MODEM") >= 0: res['description']="Modem"+" ("+name+")" res['class']="modem" else: res['description']="Serial"+" ("+name+")" res['class']="serial" try: with file(name, 'rw'): res['available']=True except: res['available']=False results[resultscount]=res resultscount+=1 return results ##def availableports(): ## """Gets list of available ports ## It is verified that the ports can be opened. ## @note: You must close any ports you have open before calling this function, otherwise they ## will not be considered available. ## @return: List of tuples. Each tuple is (port name, port description) - the description is user ## friendly. The list is sorted. ## """ ## pass def _stringint(str): """Seperate a string and trailing number into a tuple For example "com10" returns ("com", 10) """ prefix=str suffix="" while len(prefix) and prefix[-1]>='0' and prefix[-1]<='9': suffix=prefix[-1]+suffix prefix=prefix[:-1] if len(suffix): return (prefix, int(suffix)) else: return (prefix, None) def _cmpfunc(a,b): """Comparison function for two port names In particular it looks for a number on the end, and sorts by the prefix (as a string operation) and then by the number. This function is needed because "com9" needs to come before "com10" """ aa=_stringint(a[0]) bb=_stringint(b[0]) if aa==bb: if a[1]==b[1]: return 0 if a[1]78: output+="\n"+op offset=len(op)+1 else: output+=op offset+=len(op) if output[-1]!="\n": output+="\n" output+="\n" offset=0 print output bitpim-1.0.7+dfsg1/src/phone_detect.py0000644001616600161660000002372211045101740015750 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: phone_detect.py 4656 2008-08-02 15:57:20Z hjelmn $ """ Auto detect of phones. This module provides functionality to perform auto-detection of connected phone. To implement auto-detection for your phone, perform the following: 1. If your phone can be determined by examining the Phone Manufacturer and Phone Model values returned by +GMI and +GMM commands, just set the following attributes in your Profile class: phone_manufacturer='string' phone_model='string' The phone_manufacturer attribute will be checked for substring ie, 'SAMSUNG' in 'SAMSUNG ELECTRONICS CO.,LTD.'; phone_model must match exactly. 2. If your phone detection scheme is more complex, define a staticmethod 'detectphone' in your Phone class. The declaration of the method is: def detectphone(ports, likely_ports, detect_dict) ports: list of available ports returned from comscan likely_ports: list of likely ports as returned from comdiagnose.islikelyport, ie ['com1', 'com2']. where detect_dict is a dict with the following key/value pairs: 'port': { 'mode_modem': True if the phone can be set to modem mode, False otherwise 'mode_brew': True if the phone can be set to DM mode, False otherwise. This value is not currently set since I'm not sure all phones can transition out of DM mode. 'manufacturer': string value returned by +GMI 'model': string value returned by +GMM 'firmware_version': string value returned by +GMR 'esn': ESN value of this phone, will be used to associate a name with it. 'firmwareresponse': response data based on BREW firmwarerequest command. Currently not implemented. } If a possitive identification is made, method detectphone should return the port associated with that phone, otherwise just return None. """ # standard modules import Queue import threading # wx modules # BitPim modules import comdiagnose import common import commport import comscan import phones import usbscan class DetectPhone(object): __default_timeout=1 def __init__(self, log=None): # get standard commport parameters self.__log=log self.__data={} self.__data_lock=threading.Lock() self.__q_log=Queue.Queue(0) self.__q_on=False def log(self, log_str): if self.__log is None: print log_str else: if self.__q_on: self.__q_log.put_nowait(log_str) else: self.__log.log(log_str) def logdata(self, log_str, log_data, klass=None, data_type=None): if self.__log is None: print log_str,log_data, klass else: if self.__q_on: self.__q_log.put_nowait((log_str, log_data, klass, data_type)) else: self.__log.logdata(log_str, log_data, klass, data_type) def progress(self, pos, max, desc=""): if self.__log: self.__log.progress(pos, max, desc) def __get_mode_modem(self, comm): """ check if this port supports mode modem""" try: resp=comm.sendatcommand('E0V1') return True except: return False def __send_at_and_get(self, comm, cmd): try: resp=comm.sendatcommand(cmd) return ': '.join(resp[0].split(': ')[1:]) except: return None def __get_manufacturer(self, comm): return self.__send_at_and_get(comm, '+GMI') def __get_model(self, comm): return self.__send_at_and_get(comm, '+GMM') def __get_firmware_version(self, comm): return self.__send_at_and_get(comm, '+GMR') def __get_esn(self, comm): return self.__send_at_and_get(comm, '+GSN') def __get_mode_brew(self, comm): raise NotImplementedError ## try: ## resp=comm.sendatcommand('$QCDMG') ## return True ## except: ## return False def __get_firmware_response(self, comm): raise NotImplementedError def __get_data(self, port): r={ 'mode_modem': False, 'mode_brew': False, 'manufacturer': None, 'model': None, 'firmware_version': None, 'esn': None, 'firmwareresponse': None } try: c=commport.CommConnection(self, port, timeout=self.__default_timeout) except: self.log('Failed to open port: '+port) return r r['mode_modem']=self.__get_mode_modem(c) if r['mode_modem']: # in modem mode, ok to try other info r['manufacturer']=self.__get_manufacturer(c) r['model']=self.__get_model(c) r['firmware_version']=self.__get_firmware_version(c) r['esn']=self.__get_esn(c) c.close() return r def __check_profile(self, profile): if not hasattr(profile, 'phone_manufacturer') or \ not hasattr(profile, 'phone_model'): return None res=None phone_model=profile.phone_model phone_manufacturer=profile.phone_manufacturer deviceclasses=profile.deviceclasses phone_needsbrew=getattr(profile, 'brew_required', 0) for k,e in self.__data.items(): match=False # check to see if the port supports brew if it is required by phone if phone_needsbrew and not e['mode_brew']: continue if e['manufacturer'] is None or\ e['model'] is None: continue if phone_manufacturer in e['manufacturer'] and \ phone_model==e['model'][:len(phone_model)]: return k def __check_for_other_cdma(self): "If no phone is detected see if any of the scanned ports contain a Brew device" for k,e in self.__data.items(): if e['mode_brew']: return k, 'Other CDMA phone' return None, None def do_get_data(self, port): self.log('Gathering data on port: '+port) r=self.__get_data(port) self.__data_lock.acquire() self.__data[port]=r self.__data_lock.release() self.log('Done on port: '+port) def detect(self, using_port=None, using_model=None): # start the detection process # 1st, get the list of available ports coms=comscan.comscan()+usbscan.usbscan() self.log('coms:'+str(coms)) available_modem_coms=[x['name'] for x in coms if x['available'] \ and x.get('class', None)=='modem'] if not using_port: available_coms=[x['name'] for x in coms if x['available']] else: available_coms=[using_port] available_modem_coms=[x for x in available_coms if x in available_modem_coms] # loop through each port and gather data self.log('Available ports: '+str(available_coms)) self.log('Available modem ports: '+str(available_modem_coms)) # only try those AT commands on modem ports # using threads self.__q_on=True threads=[threading.Thread(target=self.do_get_data, args=(e,)) \ for e in available_modem_coms] for t in threads: t.start() for t in threads: t.join() self.__q_on=False while not self.__q_log.empty(): q=self.__q_log.get_nowait() if isinstance(q, (list, tuple)): self.logdata(*q) else: self.log(q) # non-thread version ## for e in available_modem_coms: ## self.do_get_data(e) # go through each phone and ask it ## pm=phones.phonemodels if using_model: models=[using_model] else: models=phones.phonemodels found_port=found_model=None for model in models: self.log('Checking for model: '+model) module=common.importas(phones.module(model)) # check for detectphone in module.Phone or # phone_model and phone_manufacturer in module.Profile if hasattr(module.Phone, 'detectphone'): if using_port is None: likely_ports=[x['name'] for x in coms if \ x['available'] and \ comdiagnose.islikelyport(x, module)] else: likely_ports=[using_port] self.log('Likely ports:'+str(likely_ports)) found_port=getattr(module.Phone, 'detectphone')(coms, likely_ports, self.__data, module, self) self.log('Detect Phone result: '+`self.__data`) if found_port is not None: self.log('Phone '+model+' returned port:'+`found_port`) # found it found_model=model break found_port=self.__check_profile(module.Profile) if found_port is not None: found_model=model break if found_port is None and using_port is None and using_model is None: # if we're not looking for a specific model on a specific port, # scan for other CDMA phone found_port, found_model=self.__check_for_other_cdma() if found_port is not None and found_model is not None: self.log('Found phone:'+found_model+' port:'+`found_port`) return { 'port': found_port, 'phone_name': found_model, 'phone_module': phones.module(found_model), 'phone_esn': self.__data[found_port]['esn'] } def get(self): return self.__data bitpim-1.0.7+dfsg1/src/phoneinfo.py0000644001616600161660000001306010223423141015265 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: phoneinfo.py 2275 2005-04-02 04:58:09Z djpham $ """ Module to display specific handset info. This module faciliates individual phones to provide specific phone info to be displayed. The PhoneInfo has the following attributes: model: The phone model. manufacturer: The phone manufacturer. phone_number: The phone #. esn: Phone ESN. firmware_version: Phone firmware version. signal_quality: (0-100%) Phone reception quality. battery_level: (0-100%) Current battery level. To add (and display) other phone information: append(label_str, value_str) ie. phone_info.append('Analog/Digital:', 'Digital') For an example of implementing this feature, please see module com_samsung. """ # standard modules # site-packages modules import wx import wx.lib.fancytext as fancytext # BitPim modules #------------------------------------------------------------------------------- class PhoneInfo(object): __model_key='model' __manuf_key='_manufacturer' __phone_num_key='phone_num' __esn_key='esn' __firm_ver_key='firmware_version' __sig_qual_key='signal_quality' __battery_key='battery_level' standard_keys=(('model', 'Model:'), ('manufacturer', 'Manufacturer:'), ('phone_number', 'Phone Number:'), ('esn', 'ESN:'), ('firmware_version', 'Firmware Version:'), ('signal_quality', 'Signal Quality:'), ('battery_level', 'Battery Level:')) def __init__(self): self.__data={} self.__misc=[] def __get_model(self): return self.__data.get(self.__model_key, None) def __set_model(self, v): self.__data[self.__model_key]=v model=property(fset=__set_model, fget=__get_model) def __get_manufacturer(self): return self.__data.get(self.__manuf_key, None) def __set_manufacturer(self, v): self.__data[self.__manuf_key]=v manufacturer=property(fget=__get_manufacturer, fset=__set_manufacturer) def __get_phone_num(self): return self.__data.get(self.__phone_num_key, None) def __set_phone_num(self, v): self.__data[self.__phone_num_key]=v phone_number=property(fget=__get_phone_num, fset=__set_phone_num) def __get_esn(self): return self.__data.get(self.__esn_key, None) def __set_esn(self, v): self.__data[self.__esn_key]=v esn=property(fget=__get_esn, fset=__set_esn) def __get_firmware_ver(self): return self.__data.get(self.__firm_ver_key, None) def __set_firmware_ver(self, v): self.__data[self.__firm_ver_key]=v firmware_version=property(fget=__get_firmware_ver, fset=__set_firmware_ver) def __get_sig_qual(self): return self.__data.get(self.__sig_qual_key, None) def __set_sig_qual(self, v): self.__data[self.__sig_qual_key]=v signal_quality=property(fget=__get_sig_qual, fset=__set_sig_qual) def __get_battery(self): return self.__data.get(self.__battery_key, None) def __set_battery(self, v): self.__data[self.__battery_key]=v battery_level=property(fget=__get_battery, fset=__set_battery) def append(self, label_str, value_str): self.__misc.append((label_str, value_str)) def __get_misc(self): return self.__misc misc=property(fget=__get_misc) #------------------------------------------------------------------------------- class PhoneInfoDialog(wx.Dialog): def __init__(self, parent, phone_info=PhoneInfo()): super(PhoneInfoDialog, self).__init__(parent, -1, 'Phone Info Dialog') self.__header_font=wx.Font(14, wx.DEFAULT, wx.NORMAL, wx.BOLD) self.__info_label_font=wx.Font(12, wx.DEFAULT, wx.NORMAL, wx.BOLD) self.__info_item_font=wx.Font(12, wx.DEFAULT, wx.NORMAL, wx.NORMAL) # main vertical box sizer vbs=wx.BoxSizer(wx.VERTICAL) # the header vbs.Add(self.__header('Phone Information'), 0, wx.ALIGN_CENTRE, 10) # the info gs=wx.FlexGridSizer(-1, 2, 5, 5) for k in PhoneInfo.standard_keys: v=getattr(phone_info, k[0]) if v is None: continue gs.Add(self.__info_label(k[1]), 1, wx.EXPAND|wx.BOTTOM|wx.ALIGN_LEFT, 5) gs.Add(self.__info_item(v), 0, wx.EXPAND|wx.BOTTOM|wx.ALIGN_LEFT, 5) l=phone_info.misc for k in l: gs.Add(self.__info_label(k[0]), 0, wx.EXPAND|wx.BOTTOM|wx.ALIGN_LEFT, 5) gs.Add(self.__info_item(k[1]), 0, wx.EXPAND|wx.BOTTOM|wx.ALIGN_LEFT, 5) vbs.Add(gs, 1, wx.EXPAND|wx.ALL, 10) # the ok button vbs.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5) vbs.Add(wx.Button(self, wx.ID_OK), 0, wx.ALIGN_CENTRE|wx.ALL, 5) # all done self.SetSizer(vbs) self.SetAutoLayout(True) vbs.Fit(self) def __header(self, txt): static_text=wx.StaticText(self, -1, txt, style=wx.ALIGN_CENTRE) static_text.SetFont(self.__header_font) return static_text def __info_label(self, txt): if txt[-1]!=':': txt+=':' static_text=wx.StaticText(self, -1, txt, style=wx.ALIGN_LEFT) static_text.SetFont(self.__info_label_font) return static_text def __info_item(self, txt): static_text=wx.StaticText(self, -1, txt, style=wx.ALIGN_LEFT) static_text.SetFont(self.__info_item_font) return static_text bitpim-1.0.7+dfsg1/src/sms.py0000644001616600161660000003026010422003155014103 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: sms.py 3126 2006-04-20 22:08:45Z djpham $ """ Code to handle SMS items. The format for the SMS item is standardized. It is an object with the following attributes: _from: string (email addr or phone #) _to: string (email addr or phone #) Deprecated, should use add_recipient() subject: string text: string datetime: string "YYYYMMDDThhmmss" or (y,m,d,h,m) callback: string (optional callback phone #) folder: string (where this item belongs: 'Inbox', 'Sent', 'Saved') locked: True/False msg_id: unique message id (hexstring sha encoded (datetime+text)) priority: (normal/high) read: (T/F) available methods: add_recipient(name, confirmed=None, confirmed_datetime=None) - name: email addr or phone # of the recipient - confirmed: True/False/None - confirmed_datetime: "YYYYMMDDThhmmss" or (y,m,d,h,m) confirm_recipient(name, confirmed_datetime) - name: email addr or phone # of the recipient - confirmed_datetime: "YYYYMMDDThhmmss" or (y,m,d,h,m) The format for the Canned SMS Message item is standard. It is an object with the following attributes: user_list: ['msg1', 'msg2', ...] list of user canned messages. builtin_list: ['msg1', 'msg2', ...] list of built-in canned messages. This attribute is Read-Only. To implement SMS read for a phone module: Add an entry into Profile._supportedsyncs: ... ('sms', 'read', None), # sms reading Implement the following method in your Phone class: def getsms(self, result): ... return result The result dict key for the SMS messages is 'sms', which is a dict of SMSEntry objetcs. The result dict key for the canned messages is 'canned_msg', which has the following format: result['canned_msg']=[{ 'text': 'Yes', 'type': 'builtin' }, { 'text': 'No', 'type': 'user' }, ... ] """ # standard modules import copy import sha import time # wx modules # BitPim modules import database #------------------------------------------------------------------------------- class SMSDataObject(database.basedataobject): _knownproperties=['_from', '_to', 'subject', 'text', 'datetime', 'callback', 'folder', 'msg_id', 'read', 'priority' ] _knownlistproperties=database.basedataobject._knownlistproperties.copy() _knownlistproperties.update( { 'flags': ['locked', 'read'], 'receivers': ['name', 'confirmed_datetime'] }) def __init__(self, data=None): if data is None or not isinstance(data, SMSEntry): return; self.update(data.get_db_dict()) smsobjectfactory=database.dataobjectfactory(SMSDataObject) #------------------------------------------------------------------------------- class CannedMsgDataObject(database.basedataobject): _knownproperties=[] _knownlistproperties=database.basedataobject._knownlistproperties.copy() _knownlistproperties.update( { 'canned_msg': ['text', 'type'] }) def __init__(self, data=None): if data is None or not isinstance(data, CannedMsgEntry): return; self.update(data.get_db_dict()) cannedmsgobjectfactory=database.dataobjectfactory(CannedMsgDataObject) #------------------------------------------------------------------------------- class SMSEntry(object): Folder_Inbox='Inbox' Folder_Sent='Sent' Folder_Saved='Saved' Valid_Folders=(Folder_Inbox, Folder_Sent, Folder_Saved) _id_index=0 _max_id_index=999 Priority_Normal=1 Priority_High=2 _priority_name={ Priority_Normal: 'Normal', Priority_High: 'High' } _unknown_datetime='YYYY-MM-DD hh:mm:ss' def __init__(self): self._data={ 'serials': [] } self._create_id() def get(self): return copy.deepcopy(self._data, {}) def set(self, d): self._data={} self._data.update(d) def get_db_dict(self): return self.get() def set_db_dict(self, d): self.set(d) def _create_id(self): "Create a BitPim serial for this entry" self._data.setdefault("serials", []).append(\ {"sourcetype": "bitpim", "id": '%.3f%03d'%(time.time(), SMSEntry._id_index) }) if SMSEntry._id_index') def _set_subject(self, v): self._set_or_del('subject', v, ['']) subject=property(fget=_get_subject, fset=_set_subject) def _get_text(self): return self._data.get('text', '') def _set_text(self, v): self._set_or_del('text', v, ['']) self._check_and_create_msg_id() text=property(fget=_get_text, fset=_set_text) def _get_datetime(self): return self._data.get('datetime', '') def _set_datetime(self, v): if isinstance(v, (list, tuple)) and len(v)==5: v='%04d%02d%02dT%02d%02d00'%v elif not isinstance(v, (str, unicode)): raise TypeError('must be YYYYMMDDThhmmss or (y,m,d,h,m)') self._set_or_del('datetime', v, ['']) self._check_and_create_msg_id() datetime=property(fget=_get_datetime, fset=_set_datetime) def get_date_time_str(self): # return a string representing this date/time in the format of # YYYY-MM-DD hh:mm:ss s=self.datetime if not len(s): s=self._unknown_datetime else: s=s[:4]+'-'+s[4:6]+'-'+s[6:8]+' '+s[9:11]+':'+s[11:13]+':'+s[13:] return s def _check_and_create_msg_id(self): if not len(self.msg_id) and len(self.text) and len(self.datetime): self._data['msg_id']=sha.new(self.datetime+self.text).hexdigest() def _get_callback(self): return self._data.get('callback', '') def _set_callback(self, v): self._set_or_del('callback', v, ['']) callback=property(fget=_get_callback, fset=_set_callback) def _get_folder(self): return self._data.get('folder', '') def _set_folder(self, v): if v not in self.Valid_Folders: raise ValueError self._set_or_del('folder', v, ['']) folder=property(fget=_get_folder, fset=_set_folder) def _get_flag_value(self, flag_key, default=None): f=self._data.get('flags', []) for n in f: if n.has_key(flag_key): return n[flag_key] return default def _set_flag_value(self, flag_key, v): f=self._data.get('flags', []) for i, n in enumerate(f): if n.has_key(flag_key): if v is None or not v: del f[i] if not len(self._data['flags']): del self._data['flags'] else: n[flag_key]=v return if v is not None and v: self._data.setdefault('flags', []).append({flag_key: v}) def _get_locked(self): return self._get_flag_value('locked', False) def _set_locked(self, v): self._set_flag_value('locked', v) locked=property(fget=_get_locked, fset=_set_locked) def _get_read(self): return self._get_flag_value('read', False) def _set_read(self, v): self._set_flag_value('read', v) read=property(fget=_get_read, fset=_set_read) def _get_msg_id(self): return self._data.get('msg_id', '') msg_id=property(fget=_get_msg_id) def _get_priority(self): return self._data.get('priority', SMSEntry.Priority_Normal) def _set_priority(self, v): if v not in (SMSEntry.Priority_Normal, SMSEntry.Priority_High): raise ValueError('must be SMSEntry.Priority_Normal or SMSEntry.Priority_High') self._set_or_del('priority', v, []) def _get_priority_str(self): return self._priority_name[self.priority] priority=property(fget=_get_priority, fset=_set_priority) priority_str=property(fget=_get_priority_str) def add_recipient(self, name, confirmed=None, confirmed_datetime=None): if isinstance(confirmed_datetime, (list, tuple)): if len(confirmed_datetime)!=5: raise ValueError('must be (y,m,d,h,m)') confirmed_datetime='%04d%02d%02dT%02d%02d00'%confirmed_datetime r={'name': name } if confirmed_datetime: r['confirmed_datetime']=confirmed_datetime self._data.setdefault('receivers', []).append(r) def confirm_recipient(self, name, confirmed_datetime): if isinstance(confirmed_datetime, (list, tuple)): if len(confirmed_datetime)!=5: raise ValueError('must be (y,m,d,h,m)') confirmed_datetime='%04d%02d%02dT%02d%02d00'%confirmed_datetime for e in self._data.get('receivers', []): if e['name']==name: e['confirmed_datetime']=confirmed_datetime return raise Exception('Receiver %s not found'%name) def _get_delivery_status(self): # return a list of delivery status, one of each recipient res=[] l=self._data.get('receivers', []) for e in l: s=e.get('confirmed_datetime', None) if s: res.append('%s confirmed on %s-%s-%s %s:%s'% (e['name'], s[:4], s[4:6], s[6:8], s[9:11], s[11:13])) else: res.append('%s not confirmed'%e['name']) return res delivery_status=property(fget=_get_delivery_status) #------------------------------------------------------------------------------- class CannedMsgEntry(object): _data_key='canned_msg' builtin_type='builtin' user_type='user' def __init__(self): self._data={ 'serials': [] } self._create_id() def get(self): return copy.deepcopy(self._data, {}) def set(self, d): self._data={} self._data.update(d) def get_db_dict(self): return self.get() def set_db_dict(self, d): self.set(d) def _create_id(self): "Create a BitPim serial for this entry" self._data.setdefault("serials", []).append(\ {"sourcetype": "bitpim", "id": str(time.time())}) def _get_id(self): s=self._data.get('serials', []) for n in s: if n.get('sourcetype', None)=='bitpim': return n.get('id', None) return None id=property(fget=_get_id) def _get_builtin_list(self): return [x['text'] for x in self._data.get(self._data_key, []) \ if x.get('type', None)==self.builtin_type] builtin_list=property(fget=_get_builtin_list) def _get_user_list(self): return [x['text'] for x in self._data.get(self._data_key, []) \ if x.get('type', None)==self.user_type] def _set_user_list(self, v): # first get all the builtin ones l=[x for x in self._data.get(self._data_key, []) \ if x.get('type', None)==self.builtin_type] # then add the user ones l+=[ { 'text': x, 'type': self.user_type } for x in v] self._data[self._data_key]=l msg_list=user_list=property(fget=_get_user_list, fset=_set_user_list) #------------------------------------------------------------------------------- bitpim-1.0.7+dfsg1/src/bphtml.py0000644001616600161660000004376710665135403014622 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: bphtml.py 4380 2007-08-29 00:17:07Z djpham $ # Standard modules from __future__ import with_statement import copy import webbrowser import re import htmlentitydefs import HTMLParser import StringIO # wx modules import wx import wx.html # my modules import guihelper import fixedwxpTag import common ### ### Enhanced HTML Widget ### class HTMLWindow(wx.html.HtmlWindow): """BitPim customised HTML Window Some extras on this: - You can press Ctrl-Alt-S to get a source view - Clicking on a link opens a window in your browser - Shift-clicking on a link copies it to the clipboard """ def __init__(self, parent, id, relsize=0.7): wx.html.HtmlWindow.__init__(self, parent, id) wx.EVT_KEY_UP(self, self.OnKeyUp) self.thetext="" self._normal_font_size=max(wx.NORMAL_FONT.GetPointSize(), 10) self.SetFontScale(relsize) def SetFontScale(self, scale): self.SetStandardFonts(int(scale*self._normal_font_size), '', '') # the html widget clears itself if you set the scale if len(self.thetext): wx.html.HtmlWindow.SetPage(self,self.thetext) ## def OnCellMouseHover(self, cell, x, y): ## print cell ## print dir(cell) ## print cell.GetId() def OnLinkClicked(self, event): # see ClickableHtmlWindow in wxPython source for inspiration # :::TODO::: redirect bitpim images and audio to correct # player if event.GetEvent().ShiftDown(): wx.TheClipboard.Open() wx.TheClipboard.SetData(event.GetHref()) wx.TheClipboard.Close() else: webbrowser.open(event.GetHref()) def SetPage(self, text): self.thetext=text wx.html.HtmlWindow.SetPage(self,text) def OnKeyUp(self, evt): keycode=evt.GetKeyCode() if keycode==ord('S') and evt.ControlDown() and evt.AltDown(): vs=ViewSourceFrame(None, self.thetext) vs.Show(True) evt.Skip() ### ### View Source Window ### class ViewSourceFrame(wx.Frame): def __init__(self, parent, text, id=-1): wx.Frame.__init__(self, parent, id, "HTML Source") stc=wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE) stc.AppendText(text) ### ### HTML Parsing for our pseudo styles system ### class TreeParser(HTMLParser.HTMLParser): """Turns the HTML data into a tree structure Note that the HTML needs to be well formed (ie closing tags must be present)""" class TreeNode: def __init__(self): self.tag="" self.attrs=[] self.children=[] self.data="" self.styles=[] def __init__(self, data): HTMLParser.HTMLParser.__init__(self) self.rootnode=self.TreeNode() self.nodestack=[self.rootnode] self.feed(data) self.close() assert len(self.rootnode.children)==1 self.rootnode=self.rootnode.children[0] assert self.rootnode.tag=="html" # self.mergedata() def handle_starttag(self, tag, attrs): # print "start",tag,attrs node=self.TreeNode() node.tag=tag node.attrs=attrs self.nodestack[-1].children.append(node) self.nodestack.append(node) def handle_endtag(self, tag): # print "end",tag if tag==self.nodestack[-1].tag: self.nodestack=self.nodestack[:-1] else: print tag,"doesn't match tos",self.nodestack[-1].tag self.printtree() assert False, "HTML is not well formed" def handle_entityref(self, name): data=htmlentitydefs.entitydefs.get(name, None) if data is None: self.handle_data('&%s'%name) elif data=="\xa0": # hard space return else: self.handle_data("&%s;" % (name,)) def handle_data(self, data): if len(data.strip())==0: return # print "data",data node=self.TreeNode() node.data=data self.nodestack[-1].children.append(node) def printtree(self, node=None, indent=0): if node is None: node=self.rootnode ins=" "*indent if len(node.data): print ins+`node.data` assert len(node.children)==0 assert len(node.attrs)==0 else: print ins+"<"+node.tag+"> "+`node.attrs` for c in node.children: self.printtree(c, indent+1) def flatten(self): io=StringIO.StringIO() self._flatten(self.rootnode, io) return io.getvalue() _nltags=("p", "head", "title", "h1", "h2", "h3", "h4", "h5", "table", "tr") def _flatten(self, node, io): if len(node.data): io.write(node.data) return if node.tag in self._nltags: io.write("\n") io.write("<%s" % (node.tag,)) for a,v in node.styles: io.write(' %s="%s"' % (a,v)) for a,v in node.attrs: io.write(' %s="%s"' % (a,v)) io.write(">") for child in node.children: self._flatten(child,io) io.write("" % (node.tag,)) if node.tag in self._nltags: io.write("\n") ### ### Turn HTML with style classes in it into expanded HTML without classes ### This is needed as wxHTML doesn't support style classes ### def applyhtmlstyles(html, styles): tp=TreeParser(html) _applystyles(tp.rootnode, styles) return tp.flatten() def _hasclass(node): for a,_ in node.attrs: if a=="class": return True return False def _applystyles(node, styles): if len(node.data): return # wxp tags are left alone if node.tag=="wxp": return if _hasclass(node): newattrs=[] for a,v in node.attrs: if a!="class": newattrs.append( (a,v) ) continue c=styles.get(v,None) if c is None: continue _applystyle(node, c) node.attrs=newattrs for c in node.children: _applystyles(c, styles) def _applystyle(node, style): if len(style)==0: return if len(node.data): return s=style.get('', None) if s is not None: assert len(s)&1==0 # must even number of items for i in range(len(s)/2): node.styles.append( (s[i*2], s[i*2+1]) ) style=style.copy() del style[''] # do we have any add styles if len([k for k in style if k[0]=='+']): newstyle={} for k in style: if k[0]!='+': newstyle[k]=style[k] continue # make a child node with this style in it kid=TreeParser.TreeNode() kid.tag=k[1:] kid.children=node.children node.children=[kid] # copy style s=style[k] assert len(s)&1==0 # must even number of items for i in range(len(s)/2): kid.styles.append( (s[i*2], s[i*2+1]) ) style=newstyle if len(style)==0: return # ok, apply style to us and any children if node.tag in style: s=style[node.tag] assert len(s)&1==0 # must even number of items for i in range(len(s)/2): node.styles.append( (s[i*2], s[i*2+1]) ) for i in node.children: _applystyle(i, style) class PrintData(wx.PrintData): """ Similar to wx.PrintData except this one includes copy ctor and copy 'operator' """ # the names of Get/Set attributes to copy from source to dest object _attr_names=("Collate", "Colour", "Duplex", "NoCopies", "Orientation", "PaperId", "PrinterName", "PaperSize") def __init__(self, rhs=None): super(PrintData, self).__init__() if rhs is not None: self._copy(rhs, self) def _copy(self, src, dest): for attr in self._attr_names: getattr(dest, 'Set'+attr)(getattr(src, 'Get'+attr)()) def copy(self): return PrintData(self) class HtmlEasyPrinting: """Similar to wxHtmlEasyPrinting, except this is actually useful. The following additions are present: - The various settings are saved in a supplied config object - You can set the scale for the fonts, otherwise the default is way too large (you would get about 80 chars across) """ import guiwidgets def __init__(self, parent=None, config=None, configstr=None): self.parent=parent self.config=config self.configstr=configstr self.printData=PrintData() self._configtoprintdata(self.printData) # setup margins self._configtopagesetupdata() def SetParentFrame(self, parent): self.parent=parent def PrinterSetup(self): with guihelper.WXDialogWrapper(wx.PrintDialog(self.parent)) as printerDialog: if self.printData.Ok(): printerDialog.GetPrintDialogData().SetPrintData(self.printData.copy()) printerDialog.GetPrintDialogData().SetSetupDialog(True) if printerDialog.ShowModal()==wx.ID_OK: self.printData = PrintData(printerDialog.GetPrintDialogData().GetPrintData()) self._printdatatoconfig(self.printData) def PageSetup(self): psdd=wx.PageSetupDialogData() if self.printData.Ok(): psdd.SetPrintData(self.printData.copy()) self._configtopagesetupdata(psdd) with guihelper.WXDialogWrapper(wx.PageSetupDialog(self.parent, psdd)) as pageDialog: if pageDialog.ShowModal()==wx.ID_OK and \ pageDialog.GetPageSetupData().Ok() and \ pageDialog.GetPageSetupData().GetPrintData().Ok(): self.printData=PrintData(pageDialog.GetPageSetupData().GetPrintData()) self._printdatatoconfig(self.printData) self._pagesetupdatatoconfig(pageDialog.GetPageSetupData()) def PreviewText(self, htmltext, basepath="", scale=1.0): printout1=self._getprintout(htmltext, basepath, scale) printout2=self._getprintout(htmltext, basepath, scale) if self.printData.Ok(): pd=self.printData.copy() else: pd=PrintData() if not pd.Orientation: pd.SetOrientation(wx.PORTRAIT) preview=wx.PrintPreview(printout1, printout2, pd) if not preview.Ok(): print "preview problem" assert False, "preview problem" return self.frame=wx.PreviewFrame(preview, self.parent, "Print Preview") self.guiwidgets.set_size("PrintPreview", self.frame, screenpct=90, aspect=0.58) wx.EVT_CLOSE(self.frame, self.OnPreviewClose) self.frame.Initialize() # self.frame.SetPosition(self.parent.GetPosition()) # self.frame.SetSize(self.parent.GetSize()) self.frame.Show(True) def PrintText(self, htmltext, basepath="", scale=1.0): pdd=wx.PrintDialogData() if self.printData.Ok(): pdd.SetPrintData(self.printData.copy()) if not pdd.GetPrintData().Orientation: pdd.GetPrintData().SetOrientation(wx.PORTRAIT) printer=wx.Printer(pdd) with guihelper.WXDialogWrapper(self._getprintout(htmltext, basepath, scale)) \ as printout: printer.Print(self.parent, printout) def _getprintout(self, htmltext, basepath, scale): printout=wx.html.HtmlPrintout() basesizes=[7,8,10,12,16,22,30] printout.SetFonts("", "", [int(sz*scale) for sz in basesizes]) printout.SetMargins(*self.margins) printout.SetHtmlText(htmltext, basepath) return printout def _printdatatoconfig(self, pd): if self.config is None or self.configstr is None or not pd.Ok(): print '_printdatatoconfig: bad printData' return c=self.config cstr=self.configstr for key,func in [ ("collate", pd.GetCollate), ("colour", pd.GetColour), ("duplex", pd.GetDuplex), ("nocopies", pd.GetNoCopies), ("orientation", pd.GetOrientation), ("paperid", pd.GetPaperId), ]: c.WriteInt(cstr+"/"+key, func()) c.Write(cstr+"/printer", pd.GetPrinterName()) c.Flush() def _configtoprintdata(self, pd): if self.config is None or self.configstr is None: return c=self.config cstr=self.configstr if not pd.Ok(): print '_configtoprintdata: bad printData' return for key,func in [ ("collate", pd.SetCollate), ("colour", pd.SetColour), ("duplex", pd.SetDuplex), ("nocopies", pd.SetNoCopies), ("orientation", pd.SetOrientation), ("paperid", pd.SetPaperId), ]: if c.HasEntry(cstr+"/"+key): func(c.ReadInt(cstr+"/"+key)) # special case - set paper to letter if not explicitly set (wx defaults to A4) if not c.HasEntry(cstr+"/paperid"): pd.SetPaperId(wx.PAPER_LETTER) # printer name pd.SetPrinterName(c.Read(cstr+"/printer", "")) def _configtopagesetupdata(self, psdd=None): v=self.config.Read(self.configstr+"/margins", "") if len(v): l=[int(x) for x in v.split(',')] else: l=[15,15,15,15] if psdd is not None: psdd.SetMarginTopLeft( (l[2], l[0]) ) psdd.SetMarginBottomRight( (l[3], l[1]) ) self.margins=l def _pagesetupdatatoconfig(self, psdd): tl=psdd.GetMarginTopLeft() br=psdd.GetMarginBottomRight() v="%d,%d,%d,%d" % (tl[1], br[1], tl[0], br[0]) self.config.Write(self.configstr+"/margins", v) self.margins=[tl[1],br[1],tl[0],br[0]] def OnPreviewClose(self, event): self.guiwidgets.save_size("PrintPreview", self.frame.GetRect()) event.Skip() # scaling factor for the various font sizes _scales=[0.7, 0.9, 1, 1.1, 1.2, 1.4, 1.6] # this is just used to get a namespace class Renderer: _lastsize=None _lastfont=None _mdc=None _bmp=None _hdc=None @classmethod def getbestsize(_, html, basepath, font, size): if Renderer._bmp is None: Renderer._bmp=wx.EmptyBitmap(1,1) Renderer._mdc=wx.MemoryDC() Renderer._mdc.SelectObject(Renderer._bmp) Renderer._hdc=wx.html.HtmlDCRenderer() Renderer._hdc.SetDC(Renderer._mdc, 1) Renderer._hdc.SetSize(99999,99999) Renderer._mdc.ResetBoundingBox() if Renderer._lastsize!=size or Renderer._lastfont!=font: Renderer._hdc.SetFonts(font, "", [int(x*size) for x in _scales]) Renderer._hdc.SetHtmlText(html, basepath) Renderer._hdc.Render(0, 0, (), 0, False) return (Renderer._mdc.MaxX(), Renderer._mdc.MaxY()) def getbestsize(dc, html, basepath="", font="", size=10): return Renderer.getbestsize(html, basepath, font, size) def drawhtml(dc, rect, html, basepath="", font="", size=10): """Draw html into supplied dc and rect""" if html is None or html=="": return origscale=dc.GetUserScale() hdc=wx.html.HtmlDCRenderer() hdc.SetFonts(font, "", [int(x*size) for x in _scales]) hdc.SetDC(dc, 1) hdc.SetSize(rect.width, rect.height) hdc.SetHtmlText(html, basepath) hdc.Render(rect.x, rect.y, (), 0, False) dc.SetUserScale(*origscale) # done down here to prevent circular imports ##import guiwidgets if __name__=='__main__': src=""" A title

Heading 1

This is my sentence with some hilite

onetwo
orangeNormal
whole row isorange

""" styles={ 'gaudy': { '+font': ('color', '#123456'), '': ('bgcolor', 'grey'), }, 'orange': { '+font': ('color', '#001122'), 'tr': ('bgcolor', '#cc1122'), 'td': ('bgcolor', '#cc1122'), }, 'hilite': { '+b': (), '+font': ('color', '#564bef'), } } tp=TreeParser(src) _applystyles(tp.rootnode, styles) tp.printtree() print tp.flatten() app=wx.PySimpleApp() f=wx.Frame(None, -1, "HTML Test") h=HTMLWindow(f, -1) f.Show(True) h.SetPage(tp.flatten()) app.MainLoop() sys.exit(0) # a test of the easy printing if __name__=='__main__': import sys def OnSlider(evt): global scale scale=szlist[evt.GetPosition()] f=common.opentextfile(sys.argv[1]) html=f.read() f.close() app=wx.PySimpleApp() f=wx.Frame(None, -1, "Print Test") butsetup=wx.Button(f, wx.NewId(), "Setup") butpreview=wx.Button(f, wx.NewId(), "Preview") butprint=wx.Button(f, wx.NewId(), "Print") slider=wx.Slider(f, wx.NewId(), 5, 0, 10, style=wx.SL_HORIZONTAL) szlist=[0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4] scale=1.0 bs=wx.BoxSizer(wx.HORIZONTAL) bs.Add(slider, 1, wx.EXPAND|wx.ALL, 5) for i in (butsetup,butpreview, butprint): bs.Add(i, 0, wx.EXPAND|wx.ALL, 5) f.SetSizer(bs) bs.Fit(f) hep=HtmlEasyPrinting(f, None, None) wx.EVT_BUTTON(f, butsetup.GetId(), lambda _: hep.PrinterSetup()) wx.EVT_BUTTON(f, butpreview.GetId(), lambda _: hep.PreviewText(html, scale=scale)) wx.EVT_BUTTON(f, butprint.GetId(), lambda _: hep.PrintText(html, scale=scale)) wx.EVT_COMMAND_SCROLL(f, slider.GetId(), OnSlider) f.Show(True) app.MainLoop() bitpim-1.0.7+dfsg1/src/phonebook.py0000644001616600161660000036240511320262071015300 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### Copyright (C) 2004 Adit Panchal ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: phonebook.py 4775 2010-01-04 03:44:57Z djpham $ """A widget for displaying/editting the phone information The format for a phonebook entry is standardised. It is a dict with the following fields. Each field is a list, most important first, with each item in the list being a dict. names: - title ??Job title or salutation?? - first - middle - last - full You should specify the fullname or the 4 above - nickname (This could also be an alias) categories: - category User defined category name - ringtone (optional) Ringtone name for this category emails: - email Email address - type (optional) 'home' or 'business' - speeddial (optional) Speed dial for this entry - ringtone (optional) ringtone name for this entry - wallpaper (optional) wallpaper name for this entry maillist: - entry string of '\x00\x00' separated of number or email entries. - speeddial (optional) Speed dial for this entry - ringtone (optional) ringtone name for this entry - wallpaper (optional) wallpaper name for this entry urls: - url URL - type (optional) 'home' or 'business' ringtones: - ringtone Name of a ringtone - use 'call', 'message' addresses: - type 'home' or 'business' - company (only for type of 'business') - street Street part of address - street2 Second line of street address - city - state - postalcode - country Can also be the region wallpapers: - wallpaper Name of wallpaper - use see ringtones.use flags: - secret Boolean if record is private/secret (if not present - value is false) - sim Boolean if record should be stored on SIM card of GSM phones. memos: - memo Note numbers: - number Phone number as ascii string - type 'home', 'office', 'cell', 'fax', 'pager', 'data', 'none' (if you have home2 etc, list them without the digits. The second 'home' is implicitly home2 etc) - speeddial (optional) Speed dial number - ringtone (optional) ringtone name for this entry - wallpaper (optional) wallpaper name for this entry serials: - sourcetype identifies source driver in bitpim (eg "lgvx4400", "windowsaddressbook") - sourceuniqueid (optional) identifier for where the serial came from (eg ESN of phone, wab host/username) (imagine having multiple phones of the same model to see why this is needed) - * other names of use to sourcetype """ # Standard imports from __future__ import with_statement import os import cStringIO import re import time import copy # GUI import wx import wx.grid import wx.html # My imports import common import xyaptu import guihelper import phonebookentryeditor import pubsub import nameparser import bphtml import guihelper import guiwidgets import phonenumber import helpids import database import widgets ### ### The object we use to store a record. See detailed description of ### fields at top of file ### class phonebookdataobject(database.basedataobject): # no change to _knownproperties (all of ours are list properties) _knownlistproperties=database.basedataobject._knownlistproperties.copy() _knownlistproperties.update( {'names': ['title', 'first', 'middle', 'last', 'full', 'nickname'], 'categories': ['category'], 'emails': ['email', 'type', 'speeddial', 'ringtone', 'wallpaper' ], 'urls': ['url', 'type'], 'ringtones': ['ringtone', 'use'], 'addresses': ['type', 'company', 'street', 'street2', 'city', 'state', 'postalcode', 'country'], 'wallpapers': ['wallpaper', 'use'], 'flags': ['secret', 'sim'], 'memos': ['memo'], 'numbers': ['number', 'type', 'speeddial', 'ringtone', 'wallpaper' ], 'ice': [ 'iceindex' ], 'favorite': [ 'favoriteindex' ], 'ims': [ 'type', 'username' ], ## 'maillist': ['entry', 'speeddial', ## 'ringtone', 'wallpaper' ], # serials is in parent object }) phonebookobjectfactory=database.dataobjectfactory(phonebookdataobject) ### ### Phonebook entry display (Derived from HTML) ### class PhoneEntryDetailsView(bphtml.HTMLWindow): def __init__(self, parent, id, stylesfile="styles.xy", layoutfile="pblayout.xy"): bphtml.HTMLWindow.__init__(self, parent, id) self.stylesfile=guihelper.getresourcefile(stylesfile) self.pblayoutfile=guihelper.getresourcefile(layoutfile) self.xcp=None self.xcpstyles=None self.ShowEntry({}) def ShowEntry(self, entry): if self.xcp is None: template=open(self.pblayoutfile, "rt").read() self.xcp=xyaptu.xcopier(None) self.xcp.setupxcopy(template) if self.xcpstyles is None: self.xcpstyles={} try: execfile(self.stylesfile, self.xcpstyles, self.xcpstyles) except UnicodeError: common.unicode_execfile(self.stylesfile, self.xcpstyles, self.xcpstyles) self.xcpstyles['entry']=entry text=self.xcp.xcopywithdns(self.xcpstyles) try: text=bphtml.applyhtmlstyles(text, self.xcpstyles['styles']) except: if __debug__: open("debug.html", "wt").write(common.forceascii(text)) raise self.SetPage(text) ### ### Functions used to get data from a record ### def formatICE(iceindex): return iceindex['iceindex']+1 def formatFav(favoriteindex): return favoriteindex['favoriteindex']+1 def formatcategories(cats): c=[cat['category'] for cat in cats] c.sort() return "; ".join(c) def formataddress(address): l=[] for i in 'company', 'street', 'street2', 'city', 'state', 'postalcode', 'country': if i in address: l.append(address[i]) return "; ".join(l) def formattypenumber(number): t=number['type'] t=t[0].upper()+t[1:] sd=number.get("speeddial", None) if sd is None: return "%s (%s)" % (phonenumber.format(number['number']), t) return "%s [%d] (%s)" % (phonenumber.format(number['number']), sd, t) def formatnumber(number): sd=number.get("speeddial", None) if sd is None: return phonenumber.format(number['number']) return "%s [%d]" % (phonenumber.format(number['number']), sd) def formatstorage(flag): return 'SIM' if flag.get('sim', False) else '' def formatsecret(flag): return 'True' if flag.get('secret', False) else '' # this is specified here as a list so that we can get the # keys in the order below for the settings UI (alpha sorting # or dictionary order would be user hostile). The data # is converted to a dict below _getdatalist=[ # column (key matchnum match func_or_field showinimport) 'Name', ("names", 0, None, nameparser.formatfullname, True), 'First', ("names", 0, None, nameparser.getfirst, False), 'Middle', ("names", 0, None, nameparser.getmiddle, False), 'Last', ("names", 0, None, nameparser.getlast, False), 'Category', ("categories", 0, None, "category", False), 'Category2', ("categories", 1, None, "category", False), 'Category3', ("categories", 2, None, "category", False), 'Category4', ("categories", 3, None, "category", False), 'Category5', ("categories", 4, None, "category", False), 'Categories', ("categories", None, None, formatcategories, True), "Phone", ("numbers", 0, None, formattypenumber, False), "Phone2", ("numbers", 1, None, formattypenumber, False), "Phone3", ("numbers", 2, None, formattypenumber, False), "Phone4", ("numbers", 3, None, formattypenumber, False), "Phone5", ("numbers", 4, None, formattypenumber, False), "Phone6", ("numbers", 5, None, formattypenumber, False), "Phone7", ("numbers", 6, None, formattypenumber, False), "Phone8", ("numbers", 7, None, formattypenumber, False), "Phone9", ("numbers", 8, None, formattypenumber, False), "Phone10", ("numbers", 9, None, formattypenumber, False), # phone numbers are inserted here 'Email', ("emails", 0, None, "email", True), 'Email2', ("emails", 1, None, "email", True), 'Email3', ("emails", 2, None, "email", True), 'Email4', ("emails", 3, None, "email", True), 'Email5', ("emails", 4, None, "email", True), 'Business Email', ("emails", 0, ("type", "business"), "email", False), 'Business Email2', ("emails", 1, ("type", "business"), "email", False), 'Home Email', ("emails", 0, ("type", "home"), "email", False), 'Home Email2', ("emails", 1, ("type", "home"), "email", False), 'URL', ("urls", 0, None, "url", True), 'URL2', ("urls", 1, None, "url", True), 'URL3', ("urls", 2, None, "url", True), 'URL4', ("urls", 3, None, "url", True), 'URL5', ("urls", 4, None, "url", True), 'Business URL', ("urls", 0, ("type", "business"), "url", False), 'Business URL2', ("urls", 1, ("type", "business"), "url", False), 'Home URL', ("urls", 0, ("type", "home"), "url", False), 'Home URL2', ("urls", 1, ("type", "home"), "url", False), 'Ringtone', ("ringtones", 0, ("use", "call"), "ringtone", True), 'Message Ringtone', ("ringtones", 0, ("use", "message"), "ringtone", True), 'Address', ("addresses", 0, None, formataddress, True), 'Address2', ("addresses", 1, None, formataddress, True), 'Address3', ("addresses", 2, None, formataddress, True), 'Address4', ("addresses", 3, None, formataddress, True), 'Address5', ("addresses", 4, None, formataddress, True), 'Home Address', ("addresses", 0, ("type", "home"), formataddress, False), 'Home Address2', ("addresses", 1, ("type", "home"), formataddress, False), 'Business Address', ("addressess", 0, ("type", "business"), formataddress, False), 'Business Address2', ("addressess", 1, ("type", "business"), formataddress, False), "Wallpaper", ("wallpapers", 0, None, "wallpaper", True), "Secret", ("flags", 0, ("secret", True), formatsecret, True), "Storage", ("flags", 0,('sim', True), formatstorage, True), "Memo", ("memos", 0, None, "memo", True), "Memo2", ("memos", 1, None, "memo", True), "Memo3", ("memos", 2, None, "memo", True), "Memo4", ("memos", 3, None, "memo", True), "Memo5", ("memos", 4, None, "memo", True), "ICE #", ("ice", 0, None, formatICE, False), "Favorite #", ("favorite", 0, None, formatFav, False) ] ll=[] for pretty, actual in ("Home", "home"), ("Office", "office"), ("Cell", "cell"), ("Fax", "fax"), ("Pager", "pager"), ("Data", "data"): for suf,n in ("", 0), ("2", 1), ("3", 2): ll.append(pretty+suf) ll.append(("numbers", n, ("type", actual), formatnumber, True)) _getdatalist[40:40]=ll _getdatatable={} AvailableColumns=[] DefaultColumns=['Name', 'Phone', 'Phone2', 'Phone3', 'Email', 'Categories', 'Memo', 'Secret'] ImportColumns=[_getdatalist[x*2] for x in range(len(_getdatalist)/2) if _getdatalist[x*2+1][4]] for n in range(len(_getdatalist)/2): AvailableColumns.append(_getdatalist[n*2]) _getdatatable[_getdatalist[n*2]]=_getdatalist[n*2+1] del _getdatalist # so we don't accidentally use it def getdata(column, entry, default=None): """Returns the value in a particular column. Note that the data is appropriately formatted. @param column: column name @param entry: the dict representing a phonebook entry @param default: what to return if the entry has no data for that column """ key, count, prereq, formatter, _ =_getdatatable[column] # do we even have that key if key not in entry: return default if count is None: # value is all the fields (eg Categories) thevalue=entry[key] elif prereq is None: # no prereq if len(entry[key])<=count: return default thevalue=entry[key][count] else: # find the count instance of value matching k,v in prereq ptr=0 togo=count+1 l=entry[key] k,v=prereq while togo: if ptr==len(l): return default if k not in l[ptr]: ptr+=1 continue if l[ptr][k]!=v: ptr+=1 continue togo-=1 if togo!=0: ptr+=1 continue thevalue=entry[key][ptr] break # thevalue now contains the dict with value we care about if callable(formatter): return formatter(thevalue) return thevalue.get(formatter, default) def getdatainfo(column, entry): """Similar to L{getdata} except returning higher level information. Returns the key name and which index from the list corresponds to the column. @param column: Column name @param entry: The dict representing a phonebook entry @returns: (keyname, index) tuple. index will be None if the entry doesn't have the relevant column value and -1 if all of them apply """ key, count, prereq, formatter, _ =_getdatatable[column] # do we even have that key if key not in entry: return (key, None) # which value or values do we want if count is None: return (key, -1) elif prereq is None: # no prereq if len(entry[key])<=count: return (key, None) return (key, count) else: # find the count instance of value matching k,v in prereq ptr=0 togo=count+1 l=entry[key] k,v=prereq while togo: if ptr==len(l): return (key,None) if k not in l[ptr]: ptr+=1 continue if l[ptr][k]!=v: ptr+=1 continue togo-=1 if togo!=0: ptr+=1 continue return (key, ptr) return (key, None) class CategoryManager: # this is only used to prevent the pubsub module # from being GC while any instance of this class exists __publisher=pubsub.Publisher def __init__(self): self.categories=[] self.group_wps=[] pubsub.subscribe(self.OnListRequest, pubsub.REQUEST_CATEGORIES) pubsub.subscribe(self.OnSetCategories, pubsub.SET_CATEGORIES) pubsub.subscribe(self.OnMergeCategories, pubsub.MERGE_CATEGORIES) pubsub.subscribe(self.OnAddCategory, pubsub.ADD_CATEGORY) pubsub.subscribe(self.OnGroupWPRequest, pubsub.REQUEST_GROUP_WALLPAPERS) pubsub.subscribe(self.OnSetGroupWP, pubsub.SET_GROUP_WALLPAPERS) pubsub.subscribe(self.OnMergeGroupWP, pubsub.MERGE_GROUP_WALLPAPERS) def OnListRequest(self, msg=None): # nb we publish a copy of the list, not the real # thing. otherwise other code inadvertently modifies it! pubsub.publish(pubsub.ALL_CATEGORIES, self.categories[:]) def OnGroupWPRequest(self, msg=None): pubsub.publish(pubsub.GROUP_WALLPAPERS, self.group_wps[:]) def OnSetGroupWP(self, msg): self.group_wps=msg.data[:] self.OnGroupWPRequest() def OnAddCategory(self, msg): name=msg.data if name in self.categories: return self.categories.append(name) self.categories.sort() self.OnListRequest() def OnSetCategories(self, msg): cats=msg.data[:] self.categories=cats self.categories.sort() self.OnListRequest() def OnMergeCategories(self, msg): cats=msg.data[:] newcats=self.categories[:] for i in cats: if i not in newcats: newcats.append(i) newcats.sort() if newcats!=self.categories: self.categories=newcats self.OnListRequest() def OnMergeGroupWP(self, msg): new_groups=msg.data[:] gwp=self.group_wps[:] temp_dict={} for entry in gwp: l=entry.split(":", 1) name=l[0] wp=l[1] temp_dict[name]=wp for entry in new_groups: l=entry.split(":", 1) name=l[0] wp=l[1] temp_dict[name]=wp out_list=[] for k, v in temp_dict.items(): out_list.append(str(k)+":"+str(v)) self.group_wps=out_list self.OnGroupWPRequest() CategoryManager=CategoryManager() # shadow out class name ### ### We use a table for speed ### class PhoneDataTable(wx.grid.PyGridTableBase): def __init__(self, widget, columns): self.main=widget self.rowkeys=self.main._data.keys() wx.grid.PyGridTableBase.__init__(self) self.oddattr=wx.grid.GridCellAttr() self.oddattr.SetBackgroundColour("OLDLACE") self.evenattr=wx.grid.GridCellAttr() self.evenattr.SetBackgroundColour("ALICE BLUE") self.columns=columns assert len(self.rowkeys)==0 # we can't sort here, and it isn't necessary because list is zero length def GetColLabelValue(self, col): return self.columns[col] def OnDataUpdated(self): newkeys=self.main._data.keys() newkeys.sort() oldrows=self.rowkeys self.rowkeys=newkeys lo=len(oldrows) ln=len(self.rowkeys) if ln>lo: msg=wx.grid.GridTableMessage(self, wx.grid.GRIDTABLE_NOTIFY_ROWS_APPENDED, ln-lo) elif lo>ln: msg=wx.grid.GridTableMessage(self, wx.grid.GRIDTABLE_NOTIFY_ROWS_DELETED, 0, lo-ln) else: msg=None if msg is not None: self.GetView().ProcessTableMessage(msg) self.Sort() msg=wx.grid.GridTableMessage(self, wx.grid.GRIDTABLE_REQUEST_VIEW_GET_VALUES) self.GetView().ProcessTableMessage(msg) self.GetView().AutoSizeColumns() def SetColumns(self, columns): oldcols=self.columns self.columns=columns lo=len(oldcols) ln=len(self.columns) if ln>lo: msg=wx.grid.GridTableMessage(self, wx.grid.GRIDTABLE_NOTIFY_COLS_APPENDED, ln-lo) elif lo>ln: msg=wx.grid.GridTableMessage(self, wx.grid.GRIDTABLE_NOTIFY_COLS_DELETED, 0, lo-ln) else: msg=None if msg is not None: self.GetView().ProcessTableMessage(msg) msg=wx.grid.GridTableMessage(self, wx.grid.GRIDTABLE_REQUEST_VIEW_GET_VALUES) self.GetView().ProcessTableMessage(msg) self.GetView().AutoSizeColumns() def Sort(self): bycol=self.main.sortedColumn descending=self.main.sortedColumnDescending ### ::TODO:: this sorting is not stable - it should include the current pos rather than key l=[ (getdata(self.columns[bycol], self.main._data[key]), key) for key in self.rowkeys] l.sort() if descending: l.reverse() self.rowkeys=[key for val,key in l] msg=wx.grid.GridTableMessage(self, wx.grid.GRIDTABLE_REQUEST_VIEW_GET_VALUES) self.GetView().ProcessTableMessage(msg) def IsEmptyCell(self, row, col): return False def GetNumberRows(self): return len(self.rowkeys) def GetNumberCols(self): return len(self.columns) def GetValue(self, row, col): try: entry=self.main._data[self.rowkeys[row]] except: print "bad row", row return "" return getdata(self.columns[col], entry, "") def GetAttr(self, row, col, _): r=[self.evenattr, self.oddattr][row%2] r.IncRef() return r class PhoneWidget(wx.Panel, widgets.BitPimWidget): """Main phone editing/displaying widget""" CURRENTFILEVERSION=2 # Data selector const _Current_Data=0 _Historic_Data=1 def __init__(self, mainwindow, parent, config): wx.Panel.__init__(self, parent,-1) self.sash_pos=config.ReadInt('phonebooksashpos', -300) self.update_sash=False # keep this around while we exist self.categorymanager=CategoryManager split=wx.SplitterWindow(self, -1, style=wx.SP_3D|wx.SP_LIVE_UPDATE) split.SetMinimumPaneSize(20) self.mainwindow=mainwindow self._data={} self.parent=parent self.categories=[] self.group_wps=[] self.modified=False self.table_panel=wx.Panel(split) self.table=wx.grid.Grid(self.table_panel, wx.NewId()) self.table.EnableGridLines(False) self.error_log=guihelper.MultiMessageBox(self.mainwindow , "Contact Export Errors", "Bitpim is unable to send the following data to your phone") # which columns? cur=config.Read("phonebookcolumns", "") if len(cur): cur=cur.split(",") # ensure they all exist cur=[c for c in cur if c in AvailableColumns] else: cur=DefaultColumns # column sorter info self.sortedColumn=0 self.sortedColumnDescending=False self.dt=PhoneDataTable(self, cur) self.table.SetTable(self.dt, False, wx.grid.Grid.wxGridSelectRows) self.table.SetSelectionMode(wx.grid.Grid.wxGridSelectRows) self.table.SetRowLabelSize(0) self.table.EnableEditing(False) self.table.EnableDragRowSize(False) self.table.SetMargins(1,0) # data date adjuster hbs=wx.BoxSizer(wx.HORIZONTAL) self.read_only=False self.historical_date=None static_bs=wx.StaticBoxSizer(wx.StaticBox(self.table_panel, -1, 'Historical Data Status:'), wx.VERTICAL) self.historical_data_label=wx.StaticText(self.table_panel, -1, 'Current Data') static_bs.Add(self.historical_data_label, 1, wx.EXPAND|wx.ALL, 5) hbs.Add(static_bs, 1, wx.EXPAND|wx.ALL, 5) # show the number of contacts static_bs=wx.StaticBoxSizer(wx.StaticBox(self.table_panel, -1, 'Number of Contacts:'), wx.VERTICAL) self.contactcount_label=wx.StaticText(self.table_panel, -1, '0') static_bs.Add(self.contactcount_label, 1, wx.EXPAND|wx.ALL, 5) hbs.Add(static_bs, 1, wx.EXPAND|wx.ALL, 5) # main sizer vbs=wx.BoxSizer(wx.VERTICAL) vbs.Add(hbs, 0, wx.EXPAND|wx.ALL, 5) vbs.Add(self.table, 1, wx.EXPAND, 0) self.table_panel.SetSizer(vbs) self.table_panel.SetAutoLayout(True) vbs.Fit(self.table_panel) self.preview=PhoneEntryDetailsView(split, -1, "styles.xy", "pblayout.xy") # for some reason, preview doesn't show initial background wx.CallAfter(self.preview.ShowEntry, {}) split.SplitVertically(self.table_panel, self.preview, self.sash_pos) self.split=split bs=wx.BoxSizer(wx.VERTICAL) bs.Add(split, 1, wx.EXPAND) self.SetSizer(bs) self.SetAutoLayout(True) wx.EVT_IDLE(self, self.OnIdle) wx.grid.EVT_GRID_SELECT_CELL(self, self.OnCellSelect) wx.grid.EVT_GRID_CELL_LEFT_DCLICK(self, self.OnCellDClick) wx.grid.EVT_GRID_CELL_RIGHT_CLICK(self, self.OnCellRightClick) wx.EVT_LEFT_DCLICK(self.preview, self.OnPreviewDClick) pubsub.subscribe(self.OnCategoriesUpdate, pubsub.ALL_CATEGORIES) pubsub.subscribe(self.OnGroupWPUpdate, pubsub.GROUP_WALLPAPERS) pubsub.subscribe(self.OnPBLookup, pubsub.REQUEST_PB_LOOKUP) pubsub.subscribe(self.OnMediaNameChanged, pubsub.MEDIA_NAME_CHANGED) # we draw the column headers # code based on original implementation by Paul Mcnett wx.EVT_PAINT(self.table.GetGridColLabelWindow(), self.OnColumnHeaderPaint) wx.grid.EVT_GRID_LABEL_LEFT_CLICK(self.table, self.OnGridLabelLeftClick) wx.grid.EVT_GRID_LABEL_LEFT_DCLICK(self.table, self.OnGridLabelLeftClick) wx.EVT_SPLITTER_SASH_POS_CHANGED(self, self.split.GetId(), self.OnSashPosChanged) # context menu self.context_menu=wx.Menu() id=wx.NewId() self.context_menu.Append(id, 'Set to current', 'Set the selected item to current data') wx.EVT_MENU(self, id, self.OnSetToCurrent) def OnInit(self): # whether or not to turn on phonebook preview pane if not self.config.ReadInt("viewphonebookpreview", 1): self.OnViewPreview(False) def OnColumnHeaderPaint(self, evt): w = self.table.GetGridColLabelWindow() dc = wx.PaintDC(w) font = dc.GetFont() dc.SetTextForeground(wx.BLACK) # For each column, draw it's rectangle, it's column name, # and it's sort indicator, if appropriate: totColSize = -self.table.GetViewStart()[0]*self.table.GetScrollPixelsPerUnit()[0] for col in range(self.table.GetNumberCols()): dc.SetBrush(wx.Brush("WHEAT", wx.TRANSPARENT)) colSize = self.table.GetColSize(col) rect = (totColSize,0,colSize,32) dc.DrawRectangle(rect[0] - (col!=0 and 1 or 0), rect[1], rect[2] + (col!=0 and 1 or 0), rect[3]) totColSize += colSize if col == self.sortedColumn: font.SetWeight(wx.BOLD) # draw a triangle, pointed up or down, at the # top left of the column. left = rect[0] + 3 top = rect[1] + 3 dc.SetBrush(wx.Brush("WHEAT", wx.SOLID)) if self.sortedColumnDescending: dc.DrawPolygon([(left,top), (left+6,top), (left+3,top+4)]) else: dc.DrawPolygon([(left+3,top), (left+6, top+4), (left, top+4)]) else: font.SetWeight(wx.NORMAL) dc.SetFont(font) dc.DrawLabel("%s" % self.table.GetTable().columns[col], rect, wx.ALIGN_CENTER | wx.ALIGN_TOP) def OnGridLabelLeftClick(self, evt): col=evt.GetCol() if col==self.sortedColumn: self.sortedColumnDescending=not self.sortedColumnDescending else: self.sortedColumn=col self.sortedColumnDescending=False self.dt.Sort() self.table.Refresh() def OnSashPosChanged(self, _): if self.update_sash: self.sash_pos=self.split.GetSashPosition() self.config.WriteInt('phonebooksashpos', self.sash_pos) def OnPreActivate(self): self.update_sash=False def OnPostActivate(self): self.split.SetSashPosition(self.sash_pos) self.update_sash=True def SetColumns(self, columns): c=self.GetColumns()[self.sortedColumn] self.dt.SetColumns(columns) if c in columns: self.sortedColumn=columns.index(c) else: self.sortedColumn=0 self.sortedColumnDescending=False self.dt.Sort() self.table.Refresh() def GetColumns(self): return self.dt.columns def OnCategoriesUpdate(self, msg): if self.categories!=msg.data: self.categories=msg.data[:] self.modified=True def OnGroupWPUpdate(self, msg): if self.group_wps!=msg.data: self.group_wps=msg.data[:] self.modified=True def OnPBLookup(self, msg): d=msg.data s=d.get('item', '') if not len(s): return d['name']=None for k,e in self._data.items(): for n in e.get('numbers', []): if s==n.get('number', None): # found a number, stop and reply d['name']=nameparser.getfullname(e['names'][0])+'('+\ n.get('type', '')+')' pubsub.publish(pubsub.RESPONSE_PB_LOOKUP, d) return for n in e.get('emails', []): if s==n.get('email', None): # found an email, stop and reply d['name']=nameparser.getfullname(e['names'][0])+'(email)' pubsub.publish(pubsub.RESPONSE_PB_LOOKUP, d) return # done and reply pubsub.publish(pubsub.RESPONSE_PB_LOOKUP, d) def OnMediaNameChanged(self, msg): d=msg.data _type=d.get(pubsub.media_change_type, None) _old_name=d.get(pubsub.media_old_name, None) _new_name=d.get(pubsub.media_new_name, None) if _type is None or _old_name is None or _new_name is None: # invalid/incomplete data return if _type!=pubsub.wallpaper_type and \ _type!=pubsub.ringtone_type: # neither wallpaper nor ringtone return _old_name=common.basename(_old_name) _new_name=common.basename(_new_name) if _type==pubsub.wallpaper_type: main_key='wallpapers' element_key='wallpaper' else: main_key='ringtones' element_key='ringtone' for k,e in self._data.items(): for i,n in enumerate(e.get(main_key, [])): if _old_name==n.get(element_key, None): # found it, update the name self._data[k][main_key][i][element_key]=_new_name self.modified=True def HasColumnSelector(self): return True def OnViewColumnSelector(self): with guihelper.WXDialogWrapper(ColumnSelectorDialog(self.parent, self.config, self), True): pass def HasPreviewPane(self): return True def IsPreviewPaneEnabled(self): return self.split.IsSplit() def OnViewPreview(self, preview_on): if preview_on: self.split.SplitVertically(self.table_panel, self.preview, self.sash_pos) else: if self.sash_pos is None: self.sash_pos=-300 else: self.sash_pos=self.split.GetSashPosition() self.split.Unsplit(self.preview) # refresh the table view self.config.WriteInt('viewphonebookpreview', preview_on) self.dt.GetView().AutoSizeColumns() def HasHistoricalData(self): return True def OnHistoricalData(self): """Display current or historical data""" if self.read_only: current_choice=guiwidgets.HistoricalDataDialog.Historical_Data else: current_choice=guiwidgets.HistoricalDataDialog.Current_Data with guihelper.WXDialogWrapper(guiwidgets.HistoricalDataDialog(self, current_choice=current_choice, historical_date=self.historical_date, historical_events=\ self.mainwindow.database.getchangescount('phonebook')), True) as (dlg, retcode): if retcode==wx.ID_OK: with guihelper.MWBusyWrapper(self.mainwindow): current_choice, self.historical_date=dlg.GetValue() r={} if current_choice==guiwidgets.HistoricalDataDialog.Current_Data: self.read_only=False msg_str='Current Data' self.getfromfs(r) else: self.read_only=True msg_str='Historical Data as of %s'%\ str(wx.DateTimeFromTimeT(self.historical_date)) self.getfromfs(r, self.historical_date) self.populate(r, False) self.historical_data_label.SetLabel(msg_str) def OnIdle(self, _): "We save out changed data" if self.modified: self.modified=False self.populatefs(self.getdata({})) def updateserials(self, results): "update the serial numbers after having written to the phone" if not results.has_key('serialupdates'): return # each item is a tuple. bpserial is the bitpim serialid, # and updserial is what to update with. for bpserial,updserial in results['serialupdates']: # find the entry with bpserial for k in self._data: entry=self._data[k] if not entry.has_key('serials'): assert False, "serials have gone horribly wrong" continue found=False for serial in entry['serials']: if bpserial==serial: found=True break if not found: # not this entry continue # we will be updating this entry # see if there is a matching serial for updserial that we will update st=updserial['sourcetype'] remove=None for serial in entry['serials']: if serial['sourcetype']!=st: continue if updserial.has_key("sourceuniqueid"): if updserial["sourceuniqueid"]!=serial.get("sourceuniqueid", None): continue remove=serial break # remove if needbe if remove is not None: for count,serial in enumerate(entry['serials']): if remove==serial: break del entry['serials'][count] # add update on end entry['serials'].append(updserial) self.modified=True def CanSelectAll(self): return True def OnSelectAll(self, _): self.table.SelectAll() def OnCellSelect(self, event): event.Skip() row=event.GetRow() self.SetPreview(self._data[self.dt.rowkeys[row]]) # bad breaking of abstraction referencing dt! def OnPreviewDClick(self, _): self.EditEntries(self.table.GetGridCursorRow(), self.table.GetGridCursorCol()) def OnCellDClick(self, event): self.EditEntries(event.GetRow(), event.GetCol()) def OnCellRightClick(self, evt): if not self.read_only or not self.GetSelectedRowKeys(): return self.table.PopupMenu(self.context_menu, evt.GetPosition()) def OnSetToCurrent(self, _): r={} for k in self.GetSelectedRowKeys(): r[k]=self._data[k] if r: dict={} self.getfromfs(dict) dict['phonebook'].update(r) c=[e for e in self.categories if e not in dict['categories']] dict['categories']+=c for i in range(0,len(self.group_wps),2): grp_name = self.group_wps[i] grp_wp = self.group_wps[i+1] if grp_name not in dict['group_wallpapers']: dict['group_wallpapers'].append(grp_name) dict['group_wallpapers'].append(grp_wp) self._save_db(dict) def EditEntries(self, row, column): # Allow moving to next/prev entries key=self.dt.rowkeys[row] data=self._data[key] # can we get it to open on the correct field? datakey,dataindex=getdatainfo(self.GetColumns()[column], data) _keys=self.GetSelectedRowKeys() if datakey in ('categories', 'ringtones', 'wallpapers') and \ len(_keys)>1 and not self.read_only: # Edit a single field for all seleced cells with guihelper.WXDialogWrapper(phonebookentryeditor.SingleFieldEditor(self, datakey), True) as (dlg, retcode): if retcode==wx.ID_OK: _data=dlg.GetData() if _data: for r in _keys: self._data[r][datakey]=_data else: for r in _keys: del self._data[r][datakey] self.SetPreview(self._data[_keys[0]]) self.dt.OnDataUpdated() self.modified=True else: with guihelper.WXDialogWrapper(phonebookentryeditor.Editor(self, data, factory=phonebookobjectfactory, keytoopenon=datakey, dataindex=dataindex, readonly=self.read_only, datakey=key, movement=True), True) as (dlg, retcode): if retcode==wx.ID_OK: self.SaveData(dlg.GetData(), dlg.GetDataKey()) def SaveData(self, data, key): self._data[key]=data self.dt.OnDataUpdated() self.SetPreview(data) self.modified=True def EditEntry(self, row, column): key=self.dt.rowkeys[row] data=self._data[key] # can we get it to open on the correct field? datakey,dataindex=getdatainfo(self.GetColumns()[column], data) with guihelper.WXDialogWrapper(phonebookentryeditor.Editor(self, data, factory=phonebookobjectfactory, keytoopenon=datakey, dataindex=dataindex, readonly=self.read_only), True) as (dlg, retcode): if retcode==wx.ID_OK: data=dlg.GetData() self._data[key]=data self.dt.OnDataUpdated() self.SetPreview(data) self.modified=True def GetNextEntry(self, next=True): # return the data for the next item on the list _sel_rows=self.GetSelectedRows() if not _sel_rows: return None try: row=_sel_rows[0] if next: _new_row=row+1 else: _new_row=row-1 _num_rows=self.table.GetNumberRows() if _new_row>=_num_rows: _new_row=0 elif _new_row<0: _new_row=_num_rows-1 self.table.SetGridCursor(_new_row, self.table.GetGridCursorCol()) self.table.SelectRow(_new_row) _key=self.dt.rowkeys[_new_row] return (_key,self._data[_key]) except: if __debug__: raise return None def GetDeleteInfo(self): return guihelper.ART_DEL_CONTACT, "Delete Contact" def GetAddInfo(self): return guihelper.ART_ADD_CONTACT, "Add Contact" def CanAdd(self): if self.read_only: return False return True def OnAdd(self, _): if self.read_only: return with guihelper.WXDialogWrapper(phonebookentryeditor.Editor(self, {'names': [{'full': 'New Entry'}]}, keytoopenon="names", dataindex=0), True) as (dlg, retcode): if retcode==wx.ID_OK: data=phonebookobjectfactory.newdataobject(dlg.GetData()) data.EnsureBitPimSerial() while True: key=int(time.time()) if key in self._data: continue break self._data[key]=data self.dt.OnDataUpdated() self.SetPreview(data) self.modified=True def GetSelectedRows(self): rows=[] # if there is no data, there can't be any selected rows if len(self._data)==0: return rows gcr=self.table.GetGridCursorRow() set1=self.table.GetSelectionBlockTopLeft() set2=self.table.GetSelectionBlockBottomRight() if len(set1): assert len(set1)==len(set2) for i in range(len(set1)): for row in range(set1[i][0], set2[i][0]+1): # range in wx is inclusive of last element if row not in rows: rows.append(row) else: if gcr>=0: rows.append(gcr) return rows def GetSelectedRowKeys(self): return [self.dt.rowkeys[r] for r in self.GetSelectedRows()] def CanDelete(self): if self.read_only: return False # there always seems to be something selected in the phonebook, so # there is no point testing for number of items, it just burns cycles return True def OnDelete(self,_): if self.read_only: return for r in self.GetSelectedRowKeys(): del self._data[r] self.table.ClearSelection() self.dt.OnDataUpdated() self.modified=True def SetPreview(self, entry): self.preview.ShowEntry(entry) def CanPrint(self): return True def OnPrintDialog(self, mainwindow, config): with guihelper.WXDialogWrapper(PhonebookPrintDialog(self, mainwindow, config), True): pass def getdata(self, dict): dict['phonebook']=self._data.copy() dict['categories']=self.categories[:] dict['group_wallpapers']=self.group_wps[:] return dict def DeleteBySerial(self, bpserial): for k in self._data: entry=self._data[k] for serial in entry['serials']: if serial==bpserial: del self._data[k] self.dt.OnDataUpdated() self.modified=True return raise ValueError("No such entry with serial "+`bpserial`) def UpdateSerial(self, bpserial, otherserial): try: for k in self._data: entry=self._data[k] for serial in entry['serials']: if serial==bpserial: # this is the entry we have been looking for for i,serial in enumerate(entry['serials']): if serial["sourcetype"]==otherserial["sourcetype"]: if otherserial.has_key("sourceuniqueid") and \ serial["sourceuniqueid"]==otherserial["sourceuniqueid"]: # replace entry['serials'][i]=otherserial return elif not otherserial.has_key("sourceuniqueid"): entry['serials'][i]=otherserial return entry['serials'].append(otherserial) return raise ValueError("No such entry with serial "+`bpserial`) finally: self.modified=True def versionupgrade(self, dict, version): """Upgrade old data format read from disk @param dict: The dict that was read in @param version: version number of the data on disk """ # version 0 to 1 upgrade if version==0: version=1 # they are the same # 1 to 2 etc if version==1: wx.MessageBox("BitPim can't upgrade your old phone data stored on disk, and has discarded it. Please re-read your phonebook from the phone. If you downgrade, please delete the phonebook directory in the BitPim data directory first", "Phonebook file format not supported", wx.OK|wx.ICON_EXCLAMATION) version=2 dict['result']['phonebook']={} dict['result']['categories']=[] dict['result']['group_wallpapers']=[] def clear(self): self._data={} self.dt.OnDataUpdated() def getfromfs(self, dict, timestamp=None): self.thedir=self.mainwindow.phonebookpath if os.path.exists(os.path.join(self.thedir, "index.idx")): d={'result': {'phonebook': {}, 'categories': [], 'group_wallpapers': [],}} common.readversionedindexfile(os.path.join(self.thedir, "index.idx"), d, self.versionupgrade, self.CURRENTFILEVERSION) pb=d['result']['phonebook'] database.ensurerecordtype(pb, phonebookobjectfactory) pb=database.extractbitpimserials(pb) self.mainwindow.database.savemajordict("phonebook", pb) self.mainwindow.database.savelist("categories", d['result']['categories']) self.mainwindow.database.savelist("group_wallpapers", d['result']['group_wallpapers']) # now that save is succesful, move file out of the way os.rename(os.path.join(self.thedir, "index.idx"), os.path.join(self.thedir, "index-is-now-in-database.bak")) # read info from the database dict['phonebook']=self.mainwindow.database.getmajordictvalues( "phonebook", phonebookobjectfactory, at_time=timestamp) dict['categories']=self.mainwindow.database.loadlist("categories") dict['group_wallpapers']=self.mainwindow.database.loadlist("group_wallpapers") def _updatecount(self): # Update the count of contatcs self.contactcount_label.SetLabel('%(count)d'%{ 'count': len(self._data) }) def populate(self, dict, savetodb=True): if self.read_only and savetodb: wx.MessageBox('You are viewing historical data which cannot be changed or saved', 'Cannot Save Phonebook Data', style=wx.OK|wx.ICON_ERROR) return self.clear() pubsub.publish(pubsub.MERGE_CATEGORIES, dict['categories']) pb=dict['phonebook'] cats=[] pb_groupwps=[] #list for groups found in phonebook for i in pb: for cat in pb[i].get('categories', []): cats.append(cat['category']) pb_groupwps.append(str(cat['category'])+":0") #the wallpaper is unknown as this point pubsub.publish(pubsub.MERGE_CATEGORIES, cats) pubsub.publish(pubsub.MERGE_GROUP_WALLPAPERS, pb_groupwps) #keep this order: pull out from phonebook FIRST pubsub.publish(pubsub.MERGE_GROUP_WALLPAPERS, dict['group_wallpapers']) #then add the ones from results dict k=pb.keys() k.sort() self.clear() self._data=pb.copy() self.dt.OnDataUpdated() self.modified=savetodb self._updatecount() def _save_db(self, dict): self.mainwindow.database.savemajordict("phonebook", database.extractbitpimserials(dict["phonebook"])) self.mainwindow.database.savelist("categories", dict["categories"]) self.mainwindow.database.savelist("group_wallpapers", dict["group_wallpapers"]) def populatefs(self, dict): if self.read_only: wx.MessageBox('You are viewing historical data which cannot be changed or saved', 'Cannot Save Phonebook Data', style=wx.OK|wx.ICON_ERROR) else: self._save_db(dict) self._updatecount() return dict def _ensure_unicode(self, data): # convert and ensure unicode fields for _key,_entry in data.items(): for _field_key,_field_value in _entry.items(): if _field_key=='names': for _idx,_item in enumerate(_field_value): for _subkey, _value in _item.items(): if isinstance(_value, str): _item[_subkey]=_value.decode('ascii', 'ignore') def importdata(self, importdata, categoriesinfo=[], merge=True, groupwpsinfo=[]): if self.read_only: wx.MessageBox('You are viewing historical data which cannot be changed or saved', 'Cannot Save Phonebook Data', style=wx.OK|wx.ICON_ERROR) return if merge: d=self._data else: d={} normalise_data(importdata) self._ensure_unicode(importdata) with guihelper.WXDialogWrapper(ImportDialog(self, d, importdata), True) as (dlg, retcode): guiwidgets.save_size("PhoneImportMergeDialog", dlg.GetRect()) if retcode==wx.ID_OK: result=dlg.resultdata if result is not None: d={} database.ensurerecordtype(result, phonebookobjectfactory) database.ensurebitpimserials(result) d['phonebook']=result d['categories']=categoriesinfo d['group_wallpapers']=groupwpsinfo self.populatefs(d) self.populate(d, False) def converttophone(self, data): self.error_log.ClearMessages() self.mainwindow.phoneprofile.convertphonebooktophone(self, data) if self.error_log.MsgCount(): self.error_log.ShowMessages() return ### ### The methods from here on are passed as the 'helper' to ### convertphonebooktophone in the phone profiles. One ### day they may move to a seperate class. ### def add_error_message(self, msg, priority=99): self.error_log.AddMessage(msg, priority) def log(self, msg): self.mainwindow.log(msg) class ConversionFailed(Exception): pass def _getentries(self, list, min, max, name): candidates=[] for i in list: # ::TODO:: possibly ensure that a key appears in each i candidates.append(i) if len(candidates)max: # ::TODO:: mention this to user candidates=candidates[:max] return candidates def _getfield(self,list,name): res=[] for i in list: res.append(i[name]) return res def _truncatefields(self, list, truncateat): if truncateat is None: return list res=[] for i in list: if len(i)>truncateat: # ::TODO:: log truncation res.append(i[:truncateat]) else: res.append(i) return res def _findfirst(self, candidates, required, key, default): """Find first match in candidates that meets required and return value of key @param candidates: list of dictionaries to search through @param required: a dict of what key/value pairs must exist in an entry @param key: for a matching entry, which key's value to return @param default: what value to return if there is no match """ for dict in candidates: ok=True for k in required: if dict[k]!=required[k]: ok=False break # really want break 2 if not ok: continue return dict.get(key, default) return default def getfullname(self, names, min, max, truncateat=None): "Return at least min and at most max fullnames from the names list" # secret lastnamefirst setting if wx.GetApp().config.ReadInt("lastnamefirst", False): n=[nameparser.formatsimplelastfirst(nn) for nn in names] else: n=[nameparser.formatsimplename(nn) for nn in names] if len(n)max: n=n[:max] # ::TODO:: mention this return self._truncatefields(n, truncateat) def getcategory(self, categories, min, max, truncateat=None): "Return at least min and at most max categories from the categories list" return self._truncatefields(self._getfield(self._getentries(categories, min, max, "categories"), "category"), truncateat) def getemails(self, emails, min, max, truncateat=None): "Return at least min and at most max emails from the emails list" return self._truncatefields(self._getfield(self._getentries(emails, min, max, "emails"), "email"), truncateat) def geturls(self, urls, min, max, truncateat=None): "Return at least min and at most max urls from the urls list" return self._truncatefields(self._getfield(self._getentries(urls, min, max, "urls"), "url"), truncateat) def getmemos(self, memos, min, max, truncateat=None): "Return at least min and at most max memos from the memos list" return self._truncatefields(self._getfield(self._getentries(memos, min, max, "memos"), "memo"), truncateat) def getnumbers(self, numbers, min, max): "Return at least min and at most max numbers from the numbers list" return self._getentries(numbers, min, max, "numbers") def getnumber(self, numbers, type, count=1, default=""): """Returns phone numbers of the type @param numbers: The list of numbers @param type: The type, such as cell, home, office @param count: Which number to return (eg with type=home, count=2 the second home number is returned) @param default: What is returned if there is no such number""" for n in numbers: if n['type']==type: if count==1: return n['number'] count-=1 return default def getserial(self, serials, sourcetype, id, key, default): "Gets a serial if it exists" return self._findfirst(serials, {'sourcetype': sourcetype, 'sourceuniqueid': id}, key, default) def getringtone(self, ringtones, use, default): "Gets a ringtone of type use" return self._findfirst(ringtones, {'use': use}, 'ringtone', default) def getwallpaper(self, wallpapers, use, default): "Gets a wallpaper of type use" return self._findfirst(wallpapers, {'use': use}, 'wallpaper', default) def getwallpaperindex(self, wallpapers, use, default): "Gets a wallpaper index of type use" return self._findfirst(wallpapers, {'use': use}, 'index', default) def getflag(self, flags, name, default): "Gets value of flag named name" for i in flags: if i.has_key(name): return i[name] return default def getmostpopularcategories(self, howmany, entries, reserved=[], truncateat=None, padnames=[]): """Returns the most popular categories @param howmany: How many to return, including the reserved ones @param entries: A dict of the entries @param reserved: A list of reserved entries (ie must be present, no matter how popular) @param truncateat: How long to truncate the category names at @param padnames: if the list is less than howmany long, then add these on the end providing they are not already in the list @return: A list of the group names. The list starts with the members of reserved followed by the most popular groups """ # build a histogram freq={} for entry in entries: e=entries[entry] for cat in e.get('categories', []): n=cat['category'] if truncateat: n=n[:truncateat] # truncate freq[n]=1+freq.get(n,0) # sort freq=[(count,value) for value,count in freq.items()] freq.sort() freq.reverse() # most popular first # build a new list newl=reserved[:] for _, group in freq: if len(newl)==howmany: break if group not in newl: newl.append(group) # pad list out for p in padnames: if len(newl)==howmany: break if p not in newl: newl.append(p) return newl def makeone(self, list, default): "Returns one item long list" if len(list)==0: return default assert len(list)==1 return list[0] def filllist(self, list, numitems, blank): "makes list numitems long appending blank to get there" l=list[:] for dummy in range(len(l),numitems): l.append(blank) return l class ImportCellRenderer(wx.grid.PyGridCellRenderer): SCALE=0.8 COLOURS=["HONEYDEW", "WHITE", "LEMON CHIFFON", "ROSYBROWN1"] def __init__(self, table, grid): wx.grid.PyGridCellRenderer.__init__(self) self.calc=False self.table=table def _calcattrs(self): grid=self.table.GetView() self.font=grid.GetDefaultCellFont() self.facename=self.font.GetFaceName() self.facesize=self.font.GetPointSize() self.textcolour=grid.GetDefaultCellTextColour() self.brushes=[wx.Brush(wx.NamedColour(c)) for c in self.COLOURS] self.pens=[wx.Pen(wx.NamedColour(c),1 , wx.SOLID) for c in self.COLOURS] self.selbrush=wx.Brush(grid.GetSelectionBackground(), wx.SOLID) self.selpen=wx.Pen(grid.GetSelectionBackground(), 1, wx.SOLID) self.selfg=grid.GetSelectionForeground() self.calc=True def Draw(self, grid, attr, dc, rect, row, col, isSelected): if not self.calc: self._calcattrs() rowtype=self.table.GetRowType(row) dc.SetClippingRect(rect) # clear the background dc.SetBackgroundMode(wx.SOLID) if isSelected: dc.SetBrush(self.selbrush) dc.SetPen(self.selpen) colour=self.selfg else: dc.SetBrush(self.brushes[rowtype]) dc.SetPen(self.pens[rowtype]) colour=self.textcolour dc.DrawRectangle(rect.x, rect.y, rect.width, rect.height) dc.SetBackgroundMode(wx.TRANSPARENT) dc.SetFont(self.font) text = grid.GetTable().GetHtmlCellValue(row, col, colour) if len(text): bphtml.drawhtml(dc, wx.Rect(rect.x+2, rect.y+1, rect.width-4, rect.height-2), text, font=self.facename, size=self.facesize) dc.DestroyClippingRegion() def GetBestSize(self, grid, attr, dc, row, col): if not self.calc: self._calcattrs() text = grid.GetTable().GetHtmlCellValue(row, col) if not len(text): return (5,5) return bphtml.getbestsize(dc, text, font=self.facename, size=self.facesize) def Clone(self): return ImportCellRenderer() class ImportDataTable(wx.grid.PyGridTableBase): ADDED=0 UNALTERED=1 CHANGED=2 DELETED=3 htmltemplate=["Not set - "+`i` for i in range(15)] def __init__(self, widget): self.main=widget self.rowkeys=[] wx.grid.PyGridTableBase.__init__(self) self.columns=['Confidence']+ImportColumns def GetRowData(self, row): """Returns a 4 part tuple as defined in ImportDialog.rowdata for the numbered row""" return self.main.rowdata[self.rowkeys[row]] def GetColLabelValue(self, col): "Returns the label for the numbered column" return self.columns[col] def IsEmptyCell(self, row, col): return False def GetNumberCols(self): return len(self.columns) def GetNumberRows(self): return len(self.rowkeys) def GetRowType(self, row): """Returns what type the row is from DELETED, CHANGED, ADDED and UNALTERED""" row=self.GetRowData(row) if row[3] is None: return self.DELETED if row[1] is not None and row[2] is not None: return self.CHANGED if row[1] is not None and row[2] is None: return self.ADDED return self.UNALTERED def GetValueWithNamedColumn(self, row, columnname): row=self.main.rowdata[self.rowkeys[row]] if columnname=='Confidence': return row[0] for i,ptr in (3,self.main.resultdata), (1,self.main.importdata), (2, self.main.existingdata): if row[i] is not None: return getdata(columnname, ptr[row[i]], "") assert False, "Can't get here" return "" def ShouldColumnBeShown(self, columnname, row): confidence, importedkey, existingkey, resultkey=self.GetRowData(row) if columnname=="Confidence": return True return (resultkey is not None and getdata(columnname, self.main.resultdata[resultkey], None) is not None) \ or (existingkey is not None and getdata(columnname, self.main.existingdata[existingkey], None) is not None) \ or (importedkey is not None and getdata(columnname, self.main.importdata[importedkey], None) is not None) def GetHtmlCellValue(self, row, col, colour=None): try: row=self.GetRowData(row) except: print "bad row", row return ">error<" if colour is None: colour="#000000" # black else: colour="#%02X%02X%02X" % (colour.Red(), colour.Green(), colour.Blue()) if self.columns[col]=='Confidence': # row[0] could be a zero length string or an integer if row[0]=="": return "" return '%d' % (colour, row[0]) # Get values - note default of None imported,existing,result=None,None,None if row[1] is not None: imported=getdata(self.columns[col], self.main.importdata[row[1]], None) if imported is not None: imported=common.strorunicode(imported) if row[2] is not None: existing=getdata(self.columns[col], self.main.existingdata[row[2]], None) if existing is not None: existing=common.strorunicode(existing) if row[3] is not None: result=getdata(self.columns[col], self.main.resultdata[row[3]], None) if result is not None: result=common.strorunicode(result) # The following code looks at the combinations of imported, # existing and result with them being None and/or equalling # each other. Remember that the user could have # editted/deleted an entry so the result may not match either # the imported or existing value. Each combination points to # an index in the templates table. Assertions are used # extensively to ensure the logic is correct if imported is None and existing is None and result is None: return "" # idx=9 - shortcut # matching function for this column matchfn=lambda x,y: x==y # if the result field is missing then value was deleted if result is None: # one of them must be present otherwise idx=9 above would have matched assert imported is not None or existing is not None if imported is not None and existing is not None: if matchfn(imported, existing): idx=14 else: idx=13 else: if imported is None: assert existing is not None idx=11 else: assert existing is None idx=12 else: if imported is None and existing is None: idx=10 else: # we have a result - the first 8 entries need the following # comparisons if imported is not None: imported_eq_result= matchfn(imported,result) if existing is not None: existing_eq_result= matchfn(existing,result) # a table of all possible combinations of imported/exporting # being None and imported_eq_result/existing_eq_result if imported is None and existing_eq_result: idx=0 elif imported is None and not existing_eq_result: idx=1 elif imported_eq_result and existing is None: idx=2 elif not imported_eq_result and existing is None: idx=3 elif imported_eq_result and existing_eq_result: idx=4 elif imported_eq_result and not existing_eq_result: idx=5 elif not imported_eq_result and existing_eq_result: idx=6 elif not imported_eq_result and not existing_eq_result: # neither imported or existing are the same as result # are they the same as each other? if matchfn(imported, existing): idx=7 else: idx=8 else: assert False, "This is unpossible!" return "FAILED" if False: # set to true to debug this return `idx`+" "+self.htmltemplate[idx] % { 'imported': _htmlfixup(imported), 'existing': _htmlfixup(existing), 'result': _htmlfixup(result), 'colour': colour} return self.htmltemplate[idx] % { 'imported': _htmlfixup(imported), 'existing': _htmlfixup(existing), 'result': _htmlfixup(result), 'colour': colour} @guihelper.BusyWrapper def OnDataUpdated(self): # update row keys newkeys=self.main.rowdata.keys() oldrows=self.rowkeys # rowkeys is kept in the same order as oldrows self.rowkeys=[k for k in oldrows if k in newkeys]+[k for k in newkeys if k not in oldrows] # now remove the ones that don't match checkboxes self.rowkeys=[self.rowkeys[n] for n in range(len(self.rowkeys)) if self.GetRowType(n) in self.main.show] # work out which columns we actually need colsavail=ImportColumns colsused=[] for row in range(len(self.rowkeys)): can=[] # cols available now for col in colsavail: if self.ShouldColumnBeShown(col, row): colsused.append(col) else: can.append(col) colsavail=can # colsused won't be in right order colsused=[c for c in ImportColumns if c in colsused] colsused=["Confidence"]+colsused lo=len(self.columns) ln=len(colsused) try: sortcolumn=self.columns[self.main.sortedColumn] except IndexError: sortcolumn=0 # update columns self.columns=colsused if ln>lo: msg=wx.grid.GridTableMessage(self, wx.grid.GRIDTABLE_NOTIFY_COLS_APPENDED, ln-lo) elif lo>ln: msg=wx.grid.GridTableMessage(self, wx.grid.GRIDTABLE_NOTIFY_COLS_DELETED, 0, lo-ln) else: msg=None if msg is not None: self.GetView().ProcessTableMessage(msg) # do sorting if sortcolumn not in self.columns: sortcolumn=1 else: sortcolumn=self.columns.index(sortcolumn) # we sort on lower case value, but note that not all columns are strings items=[] for row in range(len(self.rowkeys)): v=self.GetValue(row,sortcolumn) try: items.append((v.lower(), row)) except: items.append((v, row)) items.sort() if self.main.sortedColumnDescending: items.reverse() self.rowkeys=[self.rowkeys[n] for _,n in items] # update rows lo=len(oldrows) ln=len(self.rowkeys) if ln>lo: msg=wx.grid.GridTableMessage(self, wx.grid.GRIDTABLE_NOTIFY_ROWS_APPENDED, ln-lo) elif lo>ln: msg=wx.grid.GridTableMessage(self, wx.grid.GRIDTABLE_NOTIFY_ROWS_DELETED, 0, lo-ln) else: msg=None if msg is not None: self.GetView().ProcessTableMessage(msg) msg=wx.grid.GridTableMessage(self, wx.grid.GRIDTABLE_REQUEST_VIEW_GET_VALUES) self.GetView().ProcessTableMessage(msg) self.GetView().ClearSelection() self.main.OnCellSelect() self.GetView().Refresh() def _htmlfixup(txt): if txt is None: return "" return txt.replace("&", "&").replace("<", ">").replace(">", "<") \ .replace("\r\n", "
").replace("\r", "
").replace("\n", "
") def workaroundyetanotherwxpythonbug(method, *args): # grrr try: return method(*args) except TypeError: print "swallowed a type error in workaroundyetanotherwxpythonbug" pass ### ### 0 thru 8 inclusive have a result present ### # 0 - imported is None, existing equals result ImportDataTable.htmltemplate[0]='%(result)s' # 1 - imported is None, existing not equal result ImportDataTable.htmltemplate[1]='%(result)s
Existing %(existing)s
' # 2 - imported equals result, existing is None ImportDataTable.htmltemplate[2]='%(result)s' # 3 - imported not equal result, existing is None ImportDataTable.htmltemplate[3]='%(result)s
Imported %(imported)s
' # 4 - imported equals result, existing equals result ImportDataTable.htmltemplate[4]=ImportDataTable.htmltemplate[0] # just display result # 5 - imported equals result, existing not equals result ImportDataTable.htmltemplate[5]='%(result)s
Existing %(existing)s
' # 6 - imported not equal result, existing equals result ImportDataTable.htmltemplate[6]='%(result)s
Imported %(imported)s
' # 7 - imported not equal result, existing not equal result, imported equals existing ImportDataTable.htmltemplate[7]='%(result)s
Imported/Existing %(imported)s
' # 8 - imported not equal result, existing not equal result, imported not equals existing ImportDataTable.htmltemplate[8]='%(result)s
Imported %(imported)s
Existing %(existing)s
' ### ### Two special cases ### # 9 - imported, existing, result are all None ImportDataTable.htmltemplate[9]="" # 10 - imported, existing are None and result is present ImportDataTable.htmltemplate[10]='%(result)s' ### ### From 10 onwards, there is no result field, but one or both of ### imported/existing are present which means the user deleted the ### resulting value ### # 11 - imported is None and existing is present ImportDataTable.htmltemplate[11]='%(existing)s' # 12 - imported is present and existing is None ImportDataTable.htmltemplate[12]='%(imported)s' # slightly smaller # 13 - imported != existing ImportDataTable.htmltemplate[13]='Existing %(existing)s
Imported %(imported)s
' # 14 - imported equals existing ImportDataTable.htmltemplate[14]='%(existing)s' class ImportDialog(wx.Dialog): "The dialog for mixing new (imported) data with existing data" def __init__(self, parent, existingdata, importdata): wx.Dialog.__init__(self, parent, id=-1, title="Import Phonebook data", style=wx.CAPTION| wx.SYSTEM_MENU|wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER) # the data already in the phonebook self.existingdata=existingdata # the data we are importing self.importdata=importdata # the resulting data self.resultdata={} # each row to display showing what happened, with ids pointing into above data # rowdata[0]=confidence # rowdata[1]=importdatakey # rowdata[2]=existingdatakey # rowdata[3]=resultdatakey self.rowdata={} vbs=wx.BoxSizer(wx.VERTICAL) bg=self.GetBackgroundColour() w=wx.html.HtmlWindow(self, -1, size=wx.Size(600,50), style=wx.html.HW_SCROLLBAR_NEVER) w.SetPage('Your data is being imported and BitPim is showing what will happen below so you can confirm its actions.' % (bg.Red(), bg.Green(), bg.Blue())) vbs.Add(w, 0, wx.EXPAND|wx.ALL, 5) hbs=wx.BoxSizer(wx.HORIZONTAL) hbs.Add(wx.StaticText(self, -1, "Show entries"), 0, wx.EXPAND|wx.ALL,3) self.cbunaltered=wx.CheckBox(self, wx.NewId(), "Unaltered") self.cbadded=wx.CheckBox(self, wx.NewId(), "Added") self.cbchanged=wx.CheckBox(self, wx.NewId(), "Merged") self.cbdeleted=wx.CheckBox(self, wx.NewId(), "Deleted") wx.EVT_CHECKBOX(self, self.cbunaltered.GetId(), self.OnCheckbox) wx.EVT_CHECKBOX(self, self.cbadded.GetId(), self.OnCheckbox) wx.EVT_CHECKBOX(self, self.cbchanged.GetId(), self.OnCheckbox) wx.EVT_CHECKBOX(self, self.cbdeleted.GetId(), self.OnCheckbox) for i in self.cbunaltered, self.cbadded, self.cbchanged, self.cbdeleted: i.SetValue(True) hbs.Add(i, 0, wx.ALIGN_CENTRE|wx.LEFT|wx.RIGHT, 7) t=ImportDataTable self.show=[t.ADDED, t.UNALTERED, t.CHANGED, t.DELETED] hbs.Add(wx.StaticText(self, -1, " "), 0, wx.EXPAND|wx.LEFT, 10) vbs.Add(hbs, 0, wx.EXPAND|wx.ALL, 5) splitter=wx.SplitterWindow(self,-1, style=wx.SP_3D|wx.SP_LIVE_UPDATE) splitter.SetMinimumPaneSize(20) self.grid=wx.grid.Grid(splitter, wx.NewId()) self.table=ImportDataTable(self) # this is a work around for various wxPython/wxWidgets bugs cr=ImportCellRenderer(self.table, self.grid) cr.IncRef() # wxPython bug self.grid.RegisterDataType("string", cr, None) # wxWidgets bug - it uses the string renderer rather than DefaultCellRenderer self.grid.SetTable(self.table, False, wx.grid.Grid.wxGridSelectRows) self.grid.SetSelectionMode(wx.grid.Grid.wxGridSelectRows) self.grid.SetRowLabelSize(0) self.grid.EnableDragRowSize(True) self.grid.EnableEditing(False) self.grid.SetMargins(1,0) self.grid.EnableGridLines(False) wx.grid.EVT_GRID_CELL_RIGHT_CLICK(self.grid, self.OnRightGridClick) wx.grid.EVT_GRID_SELECT_CELL(self.grid, self.OnCellSelect) wx.grid.EVT_GRID_CELL_LEFT_DCLICK(self.grid, self.OnCellDClick) wx.EVT_PAINT(self.grid.GetGridColLabelWindow(), self.OnColumnHeaderPaint) wx.grid.EVT_GRID_LABEL_LEFT_CLICK(self.grid, self.OnGridLabelLeftClick) wx.grid.EVT_GRID_LABEL_LEFT_DCLICK(self.grid, self.OnGridLabelLeftClick) self.resultpreview=PhoneEntryDetailsView(splitter, -1, "styles.xy", "pblayout.xy") splitter.SplitVertically(self.grid, self.resultpreview) vbs.Add(splitter, 1, wx.EXPAND|wx.ALL,5) vbs.Add(wx.StaticLine(self, -1, style=wx.LI_HORIZONTAL), 0, wx.EXPAND|wx.ALL, 5) vbs.Add(self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.HELP), 0, wx.ALIGN_CENTRE|wx.ALL, 5) self.SetSizer(vbs) self.SetAutoLayout(True) self.config = parent.mainwindow.config guiwidgets.set_size("PhoneImportMergeDialog", self, screenpct=95, aspect=1.10) self.MakeMenus() self.sortedColumn=1 self.sortedColumnDescending=False wx.EVT_BUTTON(self, wx.ID_HELP, lambda _: wx.GetApp().displayhelpid(helpids.ID_DLG_PBMERGEENTRIES)) # the splitter which adamantly insists it is 20 pixels wide no # matter how hard you try to convince it otherwise. so we force it self.splitter=splitter wx.CallAfter(self._setthedamnsplittersizeinsteadofbeingsostupid_thewindowisnot20pixelswide_isetthesizenolessthan3times_argggh) wx.CallAfter(self.DoMerge) def _setthedamnsplittersizeinsteadofbeingsostupid_thewindowisnot20pixelswide_isetthesizenolessthan3times_argggh(self): splitter=self.splitter w,_=splitter.GetSize() splitter.SetSashPosition(max(w/2, w-200)) # ::TODO:: this method and the copy earlier should be merged into a single mixin def OnColumnHeaderPaint(self, evt): w = self.grid.GetGridColLabelWindow() dc = wx.PaintDC(w) font = dc.GetFont() dc.SetTextForeground(wx.BLACK) # For each column, draw it's rectangle, it's column name, # and it's sort indicator, if appropriate: totColSize = -self.grid.GetViewStart()[0]*self.grid.GetScrollPixelsPerUnit()[0] for col in range(self.grid.GetNumberCols()): dc.SetBrush(wx.Brush("WHEAT", wx.TRANSPARENT)) colSize = self.grid.GetColSize(col) rect = (totColSize,0,colSize,32) # note abuse of bool to be integer 0/1 dc.DrawRectangle(rect[0] - (col!=0), rect[1], rect[2] + (col!=0), rect[3]) totColSize += colSize if col == self.sortedColumn: font.SetWeight(wx.BOLD) # draw a triangle, pointed up or down, at the # top left of the column. left = rect[0] + 3 top = rect[1] + 3 dc.SetBrush(wx.Brush("WHEAT", wx.SOLID)) if self.sortedColumnDescending: dc.DrawPolygon([(left,top), (left+6,top), (left+3,top+4)]) else: dc.DrawPolygon([(left+3,top), (left+6, top+4), (left, top+4)]) else: font.SetWeight(wx.NORMAL) dc.SetFont(font) dc.DrawLabel("%s" % self.grid.GetTable().GetColLabelValue(col), rect, wx.ALIGN_CENTER | wx.ALIGN_TOP) def OnGridLabelLeftClick(self, evt): col=evt.GetCol() if col==self.sortedColumn: self.sortedColumnDescending=not self.sortedColumnDescending else: self.sortedColumn=col self.sortedColumnDescending=False self.table.OnDataUpdated() def OnCheckbox(self, _): t=ImportDataTable vclist=((t.ADDED, self.cbadded), (t.UNALTERED, self.cbunaltered), (t.CHANGED, self.cbchanged), (t.DELETED, self.cbdeleted)) self.show=[v for v,c in vclist if c.GetValue()] if len(self.show)==0: for v,c in vclist: self.show.append(v) c.SetValue(True) self.table.OnDataUpdated() @guihelper.BusyWrapper def DoMerge(self): if len(self.existingdata)*len(self.importdata)>200: progdlg=wx.ProgressDialog("Merging entries", "BitPim is merging the new information into the existing information", len(self.existingdata), parent=self, style=wx.PD_APP_MODAL|wx.PD_CAN_ABORT|wx.PD_REMAINING_TIME) else: progdlg=None try: self._DoMerge(progdlg) finally: if progdlg: progdlg.Destroy() del progdlg def _DoMerge(self, progdlg): """Merges all the importdata with existing data This can take quite a while! """ # We go to great lengths to ensure that a copy of the import # and existing data is passed on to the routines we call and # data structures being built. Originally the code expected # the called routines to make copies of the data they were # copying/modifying, but it proved too error prone and often # ended up modifying the original/import data passed in. That # had the terrible side effect of meaning that your original # data got modified even if you pressed cancel! count=0 row={} results={} em=EntryMatcher(self.existingdata, self.importdata) usedimportkeys=[] for progress,existingid in enumerate(self.existingdata.keys()): if progdlg: if not progdlg.Update(progress): # user cancelled wx.CallAfter(self.EndModal, wx.ID_CANCEL) return # does it match any imported entry merged=False for confidence, importid in em.bestmatches(existingid, limit=1): if confidence>90: if importid in usedimportkeys: # someone else already used this import, lets find out who was the better match for i in row: if row[i][1]==importid: break if confidence=0 and gcr"), existingkey) ) with guihelper.WXDialogWrapper(ImportedEntryMatchDialog(self, choices, match), True) as (dlg, retcode): if retcode==wx.ID_OK: confidence,importkey,existingkey,resultkey=self.table.GetRowData(self.grid.GetGridCursorRow()) assert importkey is not None match=dlg.GetMatch() if match is None: # new entry if existingkey is None: wx.MessageBox("It is already a new entry!", wx.OK|wx.ICON_EXCLAMATION) return # make a new entry for rowdatakey in xrange(100000): if rowdatakey not in self.rowdata: for resultdatakey in xrange(100000): if resultdatakey not in self.resultdata: self.rowdata[rowdatakey]=("", importkey, None, resultdatakey) self.resultdata[resultdatakey]=copy.deepcopy(self.importdata[importkey]) # revert original one back self.resultdata[resultkey]=copy.deepcopy(self.existingdata[existingkey]) self.rowdata[self.table.rowkeys[self.grid.GetGridCursorRow()]]=("", None, existingkey, resultkey) self.table.OnDataUpdated() return assert False, "You really can't get here!" # match an existing entry ekey=choices[match][1] if ekey==existingkey: wx.MessageBox("That is already the entry matched!", wx.OK|wx.ICON_EXCLAMATION) return # find new match for r in range(self.table.GetNumberRows()): if r==self.grid.GetGridCursorRow(): continue confidence,importkey,existingkey,resultkey=self.table.GetRowData(r) if existingkey==ekey: if importkey is not None: wx.MessageBox("The new match already has an imported entry matching it!", "Already matched", wx.OK|wx.ICON_EXCLAMATION, self) return # clear out old match del self.rowdata[self.table.rowkeys[self.grid.GetGridCursorRow()]] # put in new one self.rowdata[self.table.rowkeys[r]]=(confidence, ourimportkey, ekey, resultkey) self.resultdata[resultkey]=self.MergeEntries( copy.deepcopy(self.existingdata[ekey]), copy.deepcopy(self.importdata[ourimportkey])) self.table.OnDataUpdated() return assert False, "Can't get here" def OnCellDClick(self, event): self.EditEntry(event.GetRow(), event.GetCol()) def EditEntry(self, row, col=None): row=self.table.GetRowData(row) k=row[3] # if k is none then this entry has been deleted. fix this ::TODO:: assert k is not None data=self.resultdata[k] if col is not None: columnname=self.table.GetColLabelValue(col) if columnname=="Confidence": columnname="Name" else: columnname="Name" datakey, dataindex=getdatainfo(columnname, data) with guihelper.WXDialogWrapper(phonebookentryeditor.Editor(self, data, keytoopenon=datakey, dataindex=dataindex), True) as (dlg, retcode): if retcode==wx.ID_OK: data=dlg.GetData() self.resultdata[k]=data self.table.OnDataUpdated() class ImportedEntryMatchDialog(wx.Dialog): "The dialog shown to select how an imported entry should match" def __init__(self, parent, choices, match): wx.Dialog.__init__(self, parent, id=-1, title="Select Import Entry Match", style=wx.CAPTION| wx.SYSTEM_MENU|wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER) self.choices=choices self.importdialog=parent vbs=wx.BoxSizer(wx.VERTICAL) hbs=wx.BoxSizer(wx.HORIZONTAL) self.matchexisting=wx.RadioButton(self, wx.NewId(), "Matches an existing entry below", style=wx.RB_GROUP) self.matchnew=wx.RadioButton(self, wx.NewId(), "Is a new entry") hbs.Add(self.matchexisting, wx.NewId(), wx.ALIGN_CENTRE|wx.ALL, 5) hbs.Add(self.matchnew, wx.NewId(), wx.ALIGN_CENTRE|wx.ALL, 5) vbs.Add(hbs, 0, wx.EXPAND|wx.ALL, 5) wx.EVT_RADIOBUTTON(self, self.matchexisting.GetId(), self.OnRBClicked) wx.EVT_RADIOBUTTON(self, self.matchnew.GetId(), self.OnRBClicked) splitter=wx.SplitterWindow(self, -1, style=wx.SP_3D|wx.SP_LIVE_UPDATE) self.nameslb=wx.ListBox(splitter, wx.NewId(), choices=[name for name,id in choices], style=wx.LB_SINGLE|wx.LB_NEEDED_SB) self.preview=PhoneEntryDetailsView(splitter, -1) splitter.SplitVertically(self.nameslb, self.preview) vbs.Add(splitter, 1, wx.EXPAND|wx.ALL, 5) vbs.Add(wx.StaticLine(self, -1, style=wx.LI_HORIZONTAL), 0, wx.EXPAND|wx.ALL, 5) vbs.Add(self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.HELP), 0, wx.ALIGN_CENTRE|wx.ALL, 5) wx.EVT_LISTBOX(self, self.nameslb.GetId(), self.OnLbClicked) wx.EVT_LISTBOX_DCLICK(self, self.nameslb.GetId(), self.OnLbDClicked) # set values if match is None: self.matchexisting.SetValue(False) self.matchnew.SetValue(True) self.nameslb.Enable(False) else: self.matchexisting.SetValue(True) self.matchnew.SetValue(False) self.nameslb.Enable(True) self.nameslb.SetSelection(match) self.preview.ShowEntry(self.importdialog.existingdata[choices[match][1]]) self.SetSizer(vbs) self.SetAutoLayout(True) guiwidgets.set_size("PhonebookImportEntryMatcher", self, screenpct=75, aspect=0.58) wx.EVT_MENU(self, wx.ID_OK, self.SaveSize) wx.EVT_MENU(self, wx.ID_CANCEL, self.SaveSize) def SaveSize(self, evt=None): if evt is not None: evt.Skip() guiwidgets.save_size("PhonebookImportEntryMatcher", self.GetRect()) def OnRBClicked(self, _): self.nameslb.Enable(self.matchexisting.GetValue()) def OnLbClicked(self,_=None): existingid=self.choices[self.nameslb.GetSelection()][1] self.preview.ShowEntry(self.importdialog.existingdata[existingid]) def OnLbDClicked(self,_): self.OnLbClicked() self.SaveSize() self.EndModal(wx.ID_OK) def GetMatch(self): if self.matchnew.GetValue(): return None # new entry return self.nameslb.GetSelection() def dictintersection(one,two): return filter(two.has_key, one.keys()) class EntryMatcher: "Implements matching phonebook entries" def __init__(self, sources, against): self.sources=sources self.against=against def bestmatches(self, sourceid, limit=5): """Gives best matches out of against list @return: list of tuples of (percent match, againstid) """ res=[] source=self.sources[sourceid] for i in self.against: against=self.against[i] # now get keys source and against have in common intersect=dictintersection(source,against) # overall score for this match score=0 count=0 for key in intersect: s=source[key] a=against[key] count+=1 if s==a: score+=40*len(s) continue if key=="names": score+=comparenames(s,a) elif key=="numbers": score+=comparenumbers(s,a) elif key=="urls": score+=comparefields(s,a,"url") elif key=="emails": score+=comparefields(s,a,"email") elif key=="addresses": score+=compareallfields(s,a, ("company", "street", "street2", "city", "state", "postalcode", "country")) else: # ignore it count-=1 if count: res.append( ( int(score*100/count), i ) ) res.sort() res.reverse() if len(res)>limit: return res[:limit] return res def comparenames(s,a): "Give a score on two names" return (jarowinkler(nameparser.formatsimplename(s[0]), nameparser.formatsimplename(a[0]))-0.6)*10 def cleanurl(url, mode="compare"): """Returns lowercase url with the "http://" prefix removed and in lower case @param mode: If the value is compare (default), it removes ""http://www."" in preparation for comparing entries. Otherwise, if the value is pb, the result is formatted for writing to the phonebook. """ if mode == "compare": urlprefix=re.compile("^(http://)?(www.)?") else: urlprefix=re.compile("^(http://)?") return default_cleaner(re.sub(urlprefix, "", url).lower()) def cleanemail(email, mode="compare"): """Returns lowercase email """ return default_cleaner(email.lower()) nondigits=re.compile("[^0-9]") def cleannumber(num): "Returns num (a phone number) with all non-digits removed" return re.sub(nondigits, "", num) def comparenumbers(s,a): """Give a score on two phone numbers """ ss=[cleannumber(x['number']) for x in s] aa=[cleannumber(x['number']) for x in a] candidates=[] for snum in ss: for anum in aa: candidates.append( (jarowinkler(snum, anum), snum, anum) ) candidates.sort() candidates.reverse() if len(candidates)>3: candidates=candidates[:3] score=0 # we now have 3 best matches for ratio,snum,anum in candidates: if ratio>0.9: score+=(ratio-0.9)*10 return score def comparefields(s,a,valuekey,threshold=0.8,lookat=3): """Compares the valuekey field in source and against lists returning a score for closeness of match""" ss=[x[valuekey] for x in s if x.has_key(valuekey)] aa=[x[valuekey] for x in a if x.has_key(valuekey)] candidates=[] for sval in ss: for aval in aa: candidates.append( (jarowinkler(sval, aval), sval, aval) ) candidates.sort() candidates.reverse() if len(candidates)>lookat: candidates=candidates[:lookat] score=0 # we now have 3 best matches for ratio,sval,aval in candidates: if ratio>threshold: score+=(ratio-threshold)*10/(1-threshold) return score def compareallfields(s,a,fields,threshold=0.8,lookat=3): """Like comparefields, but for source and against lists where multiple keys have values in each item @param fields: This should be a list of keys from the entries that are in the order the human would write them down.""" # we do it in "write them down order" as that means individual values that move don't hurt the matching # much (eg if the town was wrongly in address2 and then moved into town, the concatenated string would # still be the same and it would still be an appropriate match) args=[] for d in s,a: str="" list=[] for entry in d: for f in fields: # we merge together the fields space separated in order to make one long string from the values if entry.has_key(f): str+=entry.get(f)+" " list.append( {'value': str} ) args.append( list ) # and then give the result to comparefields args.extend( ['value', threshold, lookat] ) return comparefields(*args) def mergenumberlists(orig, imp): """Return the results of merging two lists of numbers We compare the sanitised numbers (ie after punctuation etc is stripped out). If they are the same, then the original is kept (since the number is the same, and the original most likely has the correct punctuation). Otherwise the imported entries overwrite the originals """ # results start with existing entries res=[] res.extend(orig) # look through each imported number for i in imp: num=cleannumber(i['number']) found=False for r in res: if num==cleannumber(r['number']): # an existing entry was matched so we stop found=True if i.has_key('speeddial'): r['speeddial']=i['speeddial'] break if found: continue # we will be replacing one of the same type found=False for r in res: if i['type']==r['type']: r['number']=i['number'] if i.has_key('speeddial'): r['speeddial']=i['speeddial'] found=True break if found: continue # ok, just add it on the end then res.append(i) return res # new jaro winkler implementation doesn't use '*' chars or similar mangling default_cleaner=lambda x: x def mergefields(orig, imp, field, threshold=0.88, cleaner=default_cleaner): """Return the results of merging two lists of fields We compare the fields. If they are the same, then the original is kept (since the name is the same, and the original most likely has the correct punctuation). Otherwise the imported entries overwrite the originals """ # results start with existing entries res=[] res.extend(orig) # look through each imported field for i in imp: impfield=cleaner(i[field]) found=False for r in res: # if the imported entry is similar or the same as the # original entry, then we stop # add code for short or long lengths # since cell phones usually have less than 16-22 chars max per field resfield=cleaner(r[field]) if (comparestrings(resfield, impfield) > threshold): # an existing entry was matched so we stop found=True # since new item matches, we don't need to replace the # original value, but we should update the type of item # to reflect the imported value # for example home --> business if i.has_key('type'): r['type'] = i['type'] # break out of original item loop break # if we have found the item to be imported, we can move to the next one if found: continue # since there is no matching item, we will replace the existing item # if a matching type exists found=False for r in res: if (i.has_key('type') and r.has_key('type')): if i['type']==r['type']: # write the field entry in the way the phonebook expects it r[field]=cleaner(i[field], "pb") found=True break if found: continue # add new item on the end if there no matching type # and write the field entry in the way the phonebook expects it i[field] = cleaner(i[field], "pb") res.append(i) return res import native.strings jarowinkler=native.strings.jarow def comparestrings(origfield, impfield): """ Compares two strings and returns the score using winkler routine from Febrl (stringcmp.py) Return value is between 0.0 and 1.0, where 0.0 means no similarity whatsoever, and 1.0 means the strings match exactly.""" return jarowinkler(origfield, impfield, 16) def normalise_data(entries): for k in entries: # we only know about phone numbers so far ... for n in entries[k].get("numbers", []): n["number"]=phonenumber.normalise(n["number"]) class ColumnSelectorDialog(wx.Dialog): "The dialog for selecting what columns you want to view" ID_SHOW=wx.NewId() ID_AVAILABLE=wx.NewId() ID_UP=wx.NewId() ID_DOWN=wx.NewId() ID_ADD=wx.NewId() ID_REMOVE=wx.NewId() ID_DEFAULT=wx.NewId() def __init__(self, parent, config, phonewidget): wx.Dialog.__init__(self, parent, id=-1, title="Select Columns to view", style=wx.CAPTION| wx.SYSTEM_MENU|wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER) self.config=config self.phonewidget=phonewidget hbs=wx.BoxSizer(wx.HORIZONTAL) # the show bit bs=wx.BoxSizer(wx.VERTICAL) bs.Add(wx.StaticText(self, -1, "Showing"), 0, wx.ALIGN_CENTRE|wx.ALL, 5) self.show=wx.ListBox(self, self.ID_SHOW, style=wx.LB_SINGLE|wx.LB_NEEDED_SB, size=(250, 300)) bs.Add(self.show, 1, wx.EXPAND|wx.ALL, 5) hbs.Add(bs, 1, wx.EXPAND|wx.ALL, 5) # the column of buttons bs=wx.BoxSizer(wx.VERTICAL) self.up=wx.Button(self, self.ID_UP, "Move Up") self.down=wx.Button(self, self.ID_DOWN, "Move Down") self.add=wx.Button(self, self.ID_ADD, "Show") self.remove=wx.Button(self, self.ID_REMOVE, "Don't Show") self.default=wx.Button(self, self.ID_DEFAULT, "Default") for b in self.up, self.down, self.add, self.remove, self.default: bs.Add(b, 0, wx.ALL|wx.ALIGN_CENTRE, 10) hbs.Add(bs, 0, wx.ALL|wx.ALIGN_CENTRE, 5) # the available bit bs=wx.BoxSizer(wx.VERTICAL) bs.Add(wx.StaticText(self, -1, "Available"), 0, wx.ALIGN_CENTRE|wx.ALL, 5) self.available=wx.ListBox(self, self.ID_AVAILABLE, style=wx.LB_EXTENDED|wx.LB_NEEDED_SB, choices=AvailableColumns) bs.Add(self.available, 1, wx.EXPAND|wx.ALL, 5) hbs.Add(bs, 1, wx.EXPAND|wx.ALL, 5) # main layout vbs=wx.BoxSizer(wx.VERTICAL) vbs.Add(hbs, 1, wx.EXPAND|wx.ALL, 5) vbs.Add(wx.StaticLine(self, -1, style=wx.LI_HORIZONTAL), 0, wx.EXPAND|wx.ALL, 5) vbs.Add(self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.HELP), 0, wx.ALIGN_CENTRE|wx.ALL, 5) self.SetSizer(vbs) vbs.Fit(self) # fill in current selection cur=self.config.Read("phonebookcolumns", "") if len(cur): cur=cur.split(",") # ensure they all exist cur=[c for c in cur if c in AvailableColumns] else: cur=DefaultColumns self.show.Set(cur) # buttons, events etc self.up.Disable() self.down.Disable() self.add.Disable() self.remove.Disable() wx.EVT_LISTBOX(self, self.ID_SHOW, self.OnShowClicked) wx.EVT_LISTBOX_DCLICK(self, self.ID_SHOW, self.OnShowClicked) wx.EVT_LISTBOX(self, self.ID_AVAILABLE, self.OnAvailableClicked) wx.EVT_LISTBOX_DCLICK(self, self.ID_AVAILABLE, self.OnAvailableDClicked) wx.EVT_BUTTON(self, self.ID_ADD, self.OnAdd) wx.EVT_BUTTON(self, self.ID_REMOVE, self.OnRemove) wx.EVT_BUTTON(self, self.ID_UP, self.OnUp) wx.EVT_BUTTON(self, self.ID_DOWN, self.OnDown) wx.EVT_BUTTON(self, self.ID_DEFAULT, self.OnDefault) wx.EVT_BUTTON(self, wx.ID_OK, self.OnOk) def OnShowClicked(self, _=None): self.up.Enable(self.show.GetSelection()>0) self.down.Enable(self.show.GetSelection()0) self.FindWindowById(wx.ID_OK).Enable(self.show.GetCount()>0) def OnAvailableClicked(self, _): self.add.Enable(True) def OnAvailableDClicked(self, _): self.OnAdd() def OnAdd(self, _=None): items=[AvailableColumns[i] for i in self.available.GetSelections()] for i in self.available.GetSelections(): self.available.Deselect(i) self.add.Disable() it=self.show.GetSelection() if it>=0: self.show.Deselect(it) it+=1 else: it=self.show.GetCount() self.show.InsertItems(items, it) self.remove.Disable() self.up.Disable() self.down.Disable() self.show.SetSelection(it) self.OnShowClicked() def OnRemove(self, _): it=self.show.GetSelection() assert it>=0 self.show.Delete(it) if self.show.GetCount(): if it==self.show.GetCount(): self.show.SetSelection(it-1) else: self.show.SetSelection(it) self.OnShowClicked() def OnDefault(self,_): self.show.Set(DefaultColumns) self.show.SetSelection(0) self.OnShowClicked() def OnUp(self, _): it=self.show.GetSelection() assert it>=1 self.show.InsertItems([self.show.GetString(it)], it-1) self.show.Delete(it+1) self.show.SetSelection(it-1) self.OnShowClicked() def OnDown(self, _): it=self.show.GetSelection() assert it1) self.all.SetValue(not (numselected>1)) vbs2.Add(bs, 0, wx.EXPAND|wx.ALL, 2) bs=wx.StaticBoxSizer(wx.StaticBox(self, -1, "Text Scale"), wx.HORIZONTAL) for i in range(len(self.textscales)): if self.textscales[i][0]==1.0: sv=i break self.textscaleslider=wx.Slider(self, self.ID_TEXTSCALE, sv, 0, len(self.textscales)-1, style=wx.SL_VERTICAL|wx.SL_AUTOTICKS) self.scale=1 bs.Add(self.textscaleslider, 0, wx.EXPAND|wx.ALL, 2) self.textscalelabel=wx.StaticText(self, -1, "Normal") bs.Add(self.textscalelabel, 0, wx.ALIGN_CENTRE) vbs2.Add(bs, 1, wx.EXPAND|wx.ALL, 2) hbs.Add(vbs2, 0, wx.EXPAND|wx.ALL, 2) # Sort self.sortkeyscb=[] bs=wx.StaticBoxSizer(wx.StaticBox(self, -1, "Sorting"), wx.VERTICAL) choices=[""]+AvailableColumns for i in range(3): bs.Add(wx.StaticText(self, -1, ("Sort by", "Then")[i!=0]), 0, wx.EXPAND|wx.ALL, 2) self.sortkeyscb.append(wx.ComboBox(self, wx.NewId(), "", choices=choices, style=wx.CB_READONLY)) self.sortkeyscb[-1].SetSelection(0) bs.Add(self.sortkeyscb[-1], 0, wx.EXPAND|wx.ALL, 2) hbs.Add(bs, 0, wx.EXPAND|wx.ALL, 4) # Layout and style vbs2=wx.BoxSizer(wx.VERTICAL) # they are on top of each other bs=wx.StaticBoxSizer(wx.StaticBox(self, -1, "Layout"), wx.VERTICAL) k=self.layoutfiles.keys() k.sort() self.layout=wx.ListBox(self, self.ID_LAYOUT, style=wx.LB_SINGLE|wx.LB_NEEDED_SB|wx.LB_HSCROLL, choices=k, size=(150,-1)) self.layout.SetSelection(0) bs.Add(self.layout, 1, wx.EXPAND|wx.ALL, 2) vbs2.Add(bs, 1, wx.EXPAND|wx.ALL, 2) bs=wx.StaticBoxSizer(wx.StaticBox(self, -1, "Styles"), wx.VERTICAL) k=self.stylefiles.keys() self.styles=wx.CheckListBox(self, self.ID_STYLES, choices=k) bs.Add(self.styles, 1, wx.EXPAND|wx.ALL, 2) vbs2.Add(bs, 1, wx.EXPAND|wx.ALL, 2) hbs.Add(vbs2, 1, wx.EXPAND|wx.ALL, 2) # Buttons vbs2=wx.BoxSizer(wx.VERTICAL) vbs2.Add(wx.Button(self, self.ID_PRINT, "Print"), 0, wx.EXPAND|wx.ALL, 2) vbs2.Add(wx.Button(self, self.ID_PAGESETUP, "Page Setup..."), 0, wx.EXPAND|wx.ALL, 2) vbs2.Add(wx.Button(self, self.ID_PRINTPREVIEW, "Print Preview"), 0, wx.EXPAND|wx.ALL, 2) vbs2.Add(wx.Button(self, self.ID_SAVEASHTML, "Save as HTML"), 0, wx.EXPAND|wx.ALL, 2) vbs2.Add(wx.Button(self, self.ID_CLOSE, "Close"), 0, wx.EXPAND|wx.ALL, 2) hbs.Add(vbs2, 0, wx.EXPAND|wx.ALL, 2) # wrap up top row vbs.Add(hbs, 1, wx.EXPAND|wx.ALL, 2) # bottom half - preview bs=wx.StaticBoxSizer(wx.StaticBox(self, -1, "Content Preview"), wx.VERTICAL) self.preview=bphtml.HTMLWindow(self, -1) bs.Add(self.preview, 1, wx.EXPAND|wx.ALL, 2) # wrap up bottom row vbs.Add(bs, 2, wx.EXPAND|wx.ALL, 2) self.SetSizer(vbs) vbs.Fit(self) # event handlers wx.EVT_BUTTON(self, self.ID_PRINTPREVIEW, self.OnPrintPreview) wx.EVT_BUTTON(self, self.ID_PRINT, self.OnPrint) wx.EVT_BUTTON(self, self.ID_PAGESETUP, self.OnPageSetup) wx.EVT_BUTTON(self, self.ID_SAVEASHTML, self.OnSaveHTML) wx.EVT_RADIOBUTTON(self, self.selected.GetId(), self.UpdateHtml) wx.EVT_RADIOBUTTON(self, self.all.GetId(), self.UpdateHtml) for i in self.sortkeyscb: wx.EVT_COMBOBOX(self, i.GetId(), self.UpdateHtml) wx.EVT_LISTBOX(self, self.layout.GetId(), self.UpdateHtml) wx.EVT_CHECKLISTBOX(self, self.styles.GetId(), self.UpdateHtml) wx.EVT_COMMAND_SCROLL(self, self.textscaleslider.GetId(), self.UpdateSlider) self.UpdateHtml() def UpdateSlider(self, evt): pos=evt.GetPosition() if self.textscales[pos][0]!=self.scale: self.scale=self.textscales[pos][0] self.textscalelabel.SetLabel(self.textscales[pos][1]) self.preview.SetFontScale(self.scale) def UpdateHtml(self,_=None): wx.CallAfter(self._UpdateHtml) def _UpdateHtml(self): self.html=self.GetCurrentHTML() self.preview.SetPage(self.html) @guihelper.BusyWrapper def GetCurrentHTML(self): # Setup a nice environment pointing at this module vars={'phonebook': __import__(__name__) } # which data do we want? if self.all.GetValue(): rowkeys=self.phonewidget._data.keys() else: rowkeys=self.phonewidget.GetSelectedRowKeys() # sort the data # we actually sort in reverse order of what the UI shows in order to get correct results for keycb in (-1, -2, -3): sortkey=self.sortkeyscb[keycb].GetValue() if sortkey=="": continue # decorate l=[(getdata(sortkey, self.phonewidget._data[key]), key) for key in rowkeys] l.sort() # undecorate rowkeys=[key for val,key in l] # finish up vars vars['rowkeys']=rowkeys vars['currentcolumns']=self.phonewidget.GetColumns() vars['data']=self.phonewidget._data # Use xyaptu xcp=xyaptu.xcopier(None) xcp.setupxcopy(self.layoutfiles[self.layout.GetStringSelection()]) html=xcp.xcopywithdns(vars) # apply styles sd={'styles': {}, '__builtins__': __builtins__ } for i in range(self.styles.GetCount()): if self.styles.IsChecked(i): exec self.stylefiles[self.styles.GetString(i)] in sd,sd try: html=bphtml.applyhtmlstyles(html, sd['styles']) except: if __debug__: with file("debug.html", "wt") as f: f.write(html) raise return html def OnPrintPreview(self, _): wx.GetApp().htmlprinter.PreviewText(self.html, scale=self.scale) def OnPrint(self, _): wx.GetApp().htmlprinter.PrintText(self.html, scale=self.scale) def OnPrinterSetup(self, _): wx.GetApp().htmlprinter.PrinterSetup() def OnPageSetup(self, _): wx.GetApp().htmlprinter.PageSetup() def OnSaveHTML(self, _): with guihelper.WXDialogWrapper(wx.FileDialog(self, wildcard="Web Page (*.htm;*.html)|*.htm;*html", style=wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT), True) as (_dlg, _retcode): if _retcode==wx.ID_OK: file(_dlg.GetPath(), 'wt').write(self.html) def htmlify(string): return common.strorunicode(string).replace("&", "&").replace("<", "<").replace(">", ">").replace("\n", "
") bitpim-1.0.7+dfsg1/src/sms_imexport.py0000644001616600161660000001474510712500347016053 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: sms_imexport.py 4440 2007-11-02 01:44:07Z djpham $ "Deals with SMS import/export stuff" # System Module from __future__ import with_statement from email.generator import Generator from email.mime.text import MIMEText from email.utils import formatdate # wxPython modules import wx # BitPim Modules import bptime import guihelper import sms #------------------------------------------------------------------------------ class ExportSMSDialog(wx.Dialog): def __init__(self, parent, title): super(ExportSMSDialog, self).__init__(parent, -1, title) self._smswidget=parent.GetActiveSMSWidget() self._sel_data=self._smswidget.get_selected_data() self._data=self._smswidget.get_data() # make the ui vbs=wx.BoxSizer(wx.VERTICAL) hbs=wx.BoxSizer(wx.HORIZONTAL) hbs.Add(wx.StaticText(self, -1, "File"), 0, wx.ALL|wx.ALIGN_CENTRE, 5) self.filenamectrl=wx.TextCtrl(self, -1, "sms_export") hbs.Add(self.filenamectrl, 1, wx.ALL|wx.EXPAND, 5) self.browsectrl=wx.Button(self, wx.NewId(), "Browse...") hbs.Add(self.browsectrl, 0, wx.ALL|wx.EXPAND, 5) vbs.Add(hbs, 0, wx.EXPAND|wx.ALL, 5) # selection GUI vbs.Add(self.GetSelectionGui(self), 5, wx.EXPAND|wx.ALL, 5) # the buttons vbs.Add(wx.StaticLine(self, -1, style=wx.LI_HORIZONTAL), 0, wx.EXPAND|wx.ALL,5) vbs.Add(self.CreateButtonSizer(wx.OK|wx.CANCEL), 0, wx.ALIGN_CENTER|wx.ALL, 5) # event handlers wx.EVT_BUTTON(self, self.browsectrl.GetId(), self.OnBrowse) wx.EVT_BUTTON(self, wx.ID_OK, self.OnOk) # all done self.SetSizer(vbs) self.SetAutoLayout(True) vbs.Fit(self) _formats=('mbox', 'CSV') _wildcards={ _formats[0]: 'mbox files (*.mbox)|*.mbox', _formats[1]: 'CSV files (*.csv)|*.csv', } def GetSelectionGui(self, parent): hbs=wx.BoxSizer(wx.HORIZONTAL) rbs=wx.StaticBoxSizer(wx.StaticBox(self, -1, "SMS Messages"), wx.VERTICAL) lsel=len(self._sel_data) lall=len(self._data) self.rows_selected=wx.RadioButton(self, wx.NewId(), "Selected (%d)" % (lsel,), style=wx.RB_GROUP) self.rows_all=wx.RadioButton(self, wx.NewId(), "All (%d)" % (lall,)) if lsel==0: self.rows_selected.Enable(False) self.rows_selected.SetValue(0) self.rows_all.SetValue(1) rbs.Add(self.rows_selected, 0, wx.EXPAND|wx.ALL, 2) hbs.Add(rbs, 3, wx.EXPAND|wx.ALL, 5) rbs.Add(self.rows_all, 0, wx.EXPAND|wx.ALL, 2) vbs=wx.StaticBoxSizer(wx.StaticBox(self, -1, 'Export Format'), wx.VERTICAL) self._format=wx.ComboBox(self, wx.NewId(), value=self._formats[0], choices=self._formats, style=wx.CB_READONLY) vbs.Add(self._format, 0, wx.EXPAND|wx.ALL, 5) hbs.Add(vbs, 3, wx.EXPAND|wx.ALL, 5) return hbs def OnBrowse(self, _): with guihelper.WXDialogWrapper(wx.FileDialog(self, defaultFile=self.filenamectrl.GetValue(), wildcard=self._wildcards[self._format.GetValue()], style=wx.SAVE|wx.CHANGE_DIR), True) as (dlg, retcode): if retcode==wx.ID_OK: self.filenamectrl.SetValue(dlg.GetPath()) def OnOk(self, _): # do export filename=self.filenamectrl.GetValue() try: _fp=file(filename, 'wt') except: _fp=None if _fp is None: guihelper.MessageDialog(self, 'Failed to open file ['+filename+']', 'Export Error') self.EndModal(wx.ID_OK) if self.rows_all.GetValue(): _sms=self._data else: _sms=self._sel_data if self._format.GetValue()==self._formats[0]: self._export_mbox(_fp, _sms) else: self._export_csv(_fp, _sms) _fp.close() self.EndModal(wx.ID_OK) def _export_mbox(self, fp, sms): # export SMS data to mbox format _email_generator=Generator(fp, True) _lfs='\n\n' _keys=sms.keys() _keys.sort() for k in _keys: e=sms[k] try: _msg=MIMEText(e.text) _msg['From']=e._from or 'self' _msg['To']=e._to or 'self' _msg['Subject']=e.subject if e.datetime: _msg['Date']=formatdate(bptime.BPTime(e.datetime).mktime(), True) _email_generator.flatten(_msg, True) _email_generator.write(_lfs) except: if __debug__: raise def _yesno_str(self, v): if v: return 'Yes' return 'No' def _datetime_str(self, v): if v: _dt=bptime.BPTime(v) return _dt.date_str()+' '+_dt.time_str() return '' def _priority_str(self, v): return sms.SMSEntry._priority_name.get(v, '') _csv_template=( ('Date', 'datetime', _datetime_str), ('From', '_from', None), ('To', '_to', None), ('Subj', 'subject', None), ('Text', 'text', None), ('Priority', 'priority', _priority_str), ('Read', 'read', _yesno_str), ('Locked', 'locked', _yesno_str), ('Callback', 'callback', None), ('Folder', 'folder', None)) def _export_csv(self, fp, sms): # export SMS data to CSV format # print out the header fp.write(','.join(['"'+e[0]+'"' for e in self._csv_template])+'\n') # and the entries _keys=sms.keys() _keys.sort() for k in _keys: try: e=sms[k] _l=[] for _c in self._csv_template: if _c[2] is None: _s=str(getattr(e, _c[1], '')) else: _s=_c[2](self, getattr(e, _c[1], None)) _l.append('"'+_s.replace('"', '')+'"') fp.write(','.join(_l)+'\n') except: if __debug__: raise bitpim-1.0.7+dfsg1/src/bp_config.py0000644001616600161660000001132510661407437015250 0ustar amuamu### BITPIM ### ### Copyright (C) 2007 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: bp_config.py 4365 2007-08-17 21:11:59Z djpham $ """BitPim Config class based on ConfigParser """ # system module import ConfigParser import os import os.path # BitPim module import guihelper ### ### BitPim Config class ### class Config(ConfigParser.ConfigParser): """Handle reading and writing various BitPim config values """ _default_config_filename='.bitpim' def __init__(self, config_file_name=None): """Constructor @param config_file_name: (optional) config file name """ ConfigParser.ConfigParser.__init__(self) # get/set path & filename if config_file_name: self._filename=os.path.abspath(config_file_name) self._path=os.path.dirname(self._filename) else: self._path, self._filename=self._getdefaults() # read in the config if exist if self._filename: try: self.read([self._filename]) except: # something is wrong with the config file, just bail if __debug__: raise self.Write('path', self._path) self.Write('config', self._filename) def _getdefaults(self): # return the default path & config file name # consistent with the previous BitPim way if guihelper.IsMSWindows(): # we want subdir of my documents on windows # nice and painful from win32com.shell import shell, shellcon try: path=shell.SHGetFolderPath(0, shellcon.CSIDL_PERSONAL, None, 0) except: # it will fail if path doesn't exist. one example was a user # putting my docs on an external usb drive that isn't plugged in # when starting bitpim path=r"c:\My BitPim Files" path=os.path.join(path, "bitpim") else: path=os.path.expanduser("~/.bitpim-files") return path,os.path.join(path, Config._default_config_filename) def _expand(self, key): # return a tuple of (section, option) based on the key _l=key.split('/') return ('/'.join(_l[:-1]) if len(_l)>1 else 'DEFAULT', _l[-1]) def _check_section(self, section): if section and section!='DEFAULT' and not self.has_section(section): self.add_section(section) def Read(self, key, default=''): """Read the value of keyword key, if that keyword does not exist, return default @param key: string key value. @param default: default value if key does not exist. @returns: the value of key """ try: return self.get(*self._expand(key)) except: return default def ReadInt(self, key, default=0): """Read the value of keyword key, if that keyword does not exist, return default @param key: string key value. @param default: default value if key does not exist. @returns: the value of key """ _section,_option=self._expand(key) try: # first try for an int value return self.getint(_section, _option) except: pass try: # then check for a bool value return self.getboolean(_section, _option) except: # none found, return the default return default def ReadFloat(self, key, default=0.0): """Read the value of keyword key, if that keyword does not exist, return default @param key: string key value. @param default: default value if key does not exist. @returns: the value of key """ try: return self.getfloat(*self._expand(key)) except: return default def Write(self, key, value): """Write the value of keyword key. @param key: string key value. @param value: the value of the key. """ try: _section,_option=self._expand(key) if not _section: _section='DEFAULT' self._check_section(_section) self.set(_section, _option, str(value)) self.write(file(self._filename, 'wb')) return True except: return False WriteInt=Write WriteFloat=Write def HasEntry(self, key): """Check if the specified key exists. @param key: key value @returns: True if key exists, False otherwise. """ return self.has_option(*self._expand(key)) def Flush(self): pass bitpim-1.0.7+dfsg1/src/wma_file.py0000644001616600161660000002305210511342314015067 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: wma_file.py 3608 2006-10-06 02:51:56Z djpham $ """ Deal with WMA file format""" # System modules import struct # BitPim modules # constants ASF_Header_Object_GUID="\x30\x26\xB2\x75\x8E\x66\xCF\x11\xA6\xD9\x00\xAA\x00\x62\xCE\x6C" ASF_File_Properties_Object_GUID="\xA1\xDC\xAB\x8C\x47\xA9\xCF\x11\x8E\xE4\x00\xC0\x0C\x20\x53\x65" ASF_Stream_Properties_Object_GUID="\x91\x07\xDC\xB7\xB7\xA9\xCF\x11\x8E\xE6\x00\xC0\x0C\x20\x53\x65" ASF_Header_Extension_Object_GUID="\xB5\x03\xBF\x5F\x2E\xA9\xCF\x11\x8E\xE3\x00\xC0\x0C\x20\x53\x65" ASF_Content_Description_Object_GUID="\x33\x26\xB2\x75\x8E\x66\xCF\x11\xA6\xD9\x00\xAA\x00\x62\xCE\x6C" ASF_Extended_Content_Description_Object_GUID="\x40\xA4\xD0\xD2\x07\xE3\xD2\x11\x97\xF0\x00\xA0\xC9\x5E\xA8\x50" #------------------------------------------------------------------------------- class ASF_Object(object): def __init__(self, data, keep_data=False): self.guid=None self.size=None self.data=None if len(data)<24: # not a valid ASF Object return self.guid=data[:16] self.size=struct.unpack(' ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: nameparser.py 3632 2006-10-27 03:08:31Z djpham $ """Various routines that deal with names""" def formatfullname(name): """Returns a string of the name, including all fields that are present""" res="" full=name.get("full", "") fml=' '.join([x for x in getparts(name) if x]) if len(fml) or len(full): # are they the same if fml==full: res+=full else: # different if len(full): res+=full if len(fml): if len(res): res+=" | " res+=fml if name.has_key("nickname"): res+=" ("+name["nickname"]+")" return res def formatsimplename(name): "like L{formatname}, except we use the first matching component" _fullname=getfullname(name) if _fullname: return _fullname return name.get('nickname', "") def formatsimplefirstlast(name): "Returns the name formatted as First Middle Last" return ' '.join([x for x in getparts(name) if x]) def formatsimplelastfirst(name): "Returns the name formatted as Last, First Middle" f,m,l=getparts(name) if len(l): if len(f+m): return l+", "+" ".join([f,m]) return l return " ".join([f,m]) def getfullname(name): """Gets the full name, joining the first/middle/last if necessary""" if name.has_key("full"): return name["full"] return ' '.join([x for x in getparts(name) if x]) # See the following references for name parsing and how little fun it # is. # # The simple way: # http://cvs.gnome.org/lxr/source/evolution-data-server/addressbook/libebook/ # e-name-western* # # The "proper" way: # http://cvs.xemacs.org/viewcvs.cgi/XEmacs/packages/xemacs-packages/mail-lib/mail-extr.el # # How we do it # # [1] The name is split into white-space seperated parts # [2] If there is only one part, it becomes the firstname # [3] If there are only two parts, they become first name and surname # [4] For three or more parts, the first part is the first name and the last # part is the surname. Then while the last part of the remainder starts with # a lower case letter or is in the list below, it is prepended to the surname. # Whatever is left becomes the middle name. lastparts= [ "van", "von", "de", "di" ] # I would also like to proudly point out that this code has no comment saying # "Have I no shame". It will be considered incomplete until that happens def _getparts_FML(name): n=name.get("full") # [1] parts=n.split() # [2] if len(parts)<=1: return (n, "", "") # [3] if len(parts)==2: return (parts[0], "", parts[1]) # [4] f=[parts[0]] m=[] l=[parts[-1]] del parts[0] del parts[-1] while len(parts) and (parts[-1][0].lower()==parts[-1][0] or parts[-1].lower() in lastparts): l=[parts[-1]]+l del parts[-1] m=parts # return it all return (" ".join(f), " ".join(m), " ".join(l)) def _getparts_LFM(name): n=name.get("full") parts=n.split(',') if len(parts)<=1: return (n, '', '') _last=parts[0] _first='' _middle='' parts=parts[1].split() if len(parts)>=1: _first=parts[0] if len(parts)>1: _middle=' '.join(parts[1:]) return (_first, _middle, _last) def getparts(name): """Returns (first, middle, last) for name. If the part doesn't exist then a blank string is returned""" # do we have any of the parts? for i in ("first", "middle", "last"): if name.has_key(i): return (name.get("first", ""), name.get("middle", ""), name.get("last", "")) # check we have full. if not return nickname if not name.has_key("full"): return (name.get("nickname", ""), "", "") n=name.get("full") if ',' in n: return _getparts_LFM(name) return _getparts_FML(name) # convenience functions def getfirst(name): return getparts(name)[0] def getmiddle(name): return getparts(name)[1] def getlast(name): return getparts(name)[2] bitpim-1.0.7+dfsg1/src/bpcalendar.py0000644001616600161660000021117011057602107015404 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: bpcalendar.py 4706 2008-09-03 21:40:23Z djpham $ """Calendar user interface and data for bitpim. This module has a bp prefix so it doesn't clash with the system calendar module Version 3: The format for the calendar is standardised. It is a dict with the following fields: (Note: hour fields are in 24 hour format) 'string id': CalendarEntry object. CalendarEntry properties: description - 'string description' location - 'string location' desc_loc - combination of description & location in the form of 'description[location]' priority - None=no priority, int from 1-10, 1=highest priority alarm - how many minutes beforehand to set the alarm (use 0 for on-time, None or -1 for no alarm) allday - True for an allday event, False otherwise start - (year, month, day, hour, minute) as integers end - (year, month, day, hour, minute) as integers serials - list of dicts of serials. repeat - None, or RepeatEntry object id - string id of this object. Created the same way as bpserials IDs for phonebook entries. notes - string notes categories - [ { 'category': string category }, ... ] ringtone - string ringtone assignment wallpaper - string wallpaper assignment. vibrate - True if the alarm is set to vibrate, False otherwise voice - ID of voice alarm CalendarEntry methods: get() - return a copy of the internal dict get_db_dict()- return a copy of a database.basedataobject dict. set(dict) - set the internal dict with the supplied dict set_db_dict(dict) - set internal data with the database.basedataobject dict is_active(y, m, d) - True if this event is active on (y,m,d) suppress_repeat_entry(y,m,d) - exclude (y,m,d) from this repeat event. RepeatEntry properties: repeat_type - one of daily, weekly, monthly, or yearly. interval - for daily: repeat every nth day. For weekly, for every nth week. interval2 - for monhtly: repeat every nth month. dow - bitmap of which day of week are being repeated. weekstart - the start of the work week ('MO', 'TU', 'WE', 'TH', 'FR', 'SA', 'SU') suppressed - list of (y,m,d) being excluded from this series. -------------------------------------------------------------------------------- Version 2: The format for the calendar is standardised. It is a dict with the following fields: (Note: hour fields are in 24 hour format) start: - (year, month, day, hour, minute) as integers end: - (year, month, day, hour, minute) as integers # if you want no end, set to the same value as start, or to the year 4000 repeat: - one of None, "daily", "monfri", "weekly", "monthly", "yearly" description: - "String description" changeserial: - Set to integer 1 snoozedelay: - Set to an integer number of minutes (default 0) alarm: - how many minutes beforehand to set the alarm (use 0 for on-time, None for no alarm) daybitmap: - default 0, it will become which days of the week weekly events happen on (eg every monday and friday) ringtone: - index number of the ringtone for the alarm (use 0 for none - will become a string) pos: - integer that should be the same as the dictionary key for this entry exceptions: - (optional) A list of (year,month,day) tuples that repeats are suppressed """ # Standard modules from __future__ import with_statement import os import copy import calendar import datetime import random import sha import time # wx stuff import wx import wx.lib import wx.lib.masked.textctrl import wx.lib.intctrl import wx.grid as gridlib # my modules import bphtml import bptime import calendarcontrol import calendarentryeditor import common import database import guihelper import guiwidgets import helpids import pubsub import today import xyaptu #------------------------------------------------------------------------------- class CalendarDataObject(database.basedataobject): """ This class is a wrapper class to enable CalendarEntry object data to be stored in the database stuff. Once the database module is updated, this class will also be updated and eventually replace CalendarEntry. """ _knownproperties=['description', 'location', 'priority', 'alarm', 'notes', 'ringtone', 'wallpaper', 'start', 'end', 'vibrate', 'voice' ] _knownlistproperties=database.basedataobject._knownlistproperties.copy() _knownlistproperties.update( { 'repeat': ['type', 'interval', 'interval2', 'dow', 'weekstart'], 'suppressed': ['date'], 'categories': ['category'] }) def __init__(self, data=None): if data is None or not isinstance(data, CalendarEntry): # empty data, do nothing return self.update(data.get_db_dict()) calendarobjectfactory=database.dataobjectfactory(CalendarDataObject) #------------------------------------------------------------------------------- class RepeatEntry(object): # class constants daily='daily' weekly='weekly' monthly='monthly' yearly='yearly' _interval=0 _dow=1 _dom=0 _moy=1 _interval2=2 _dow_names=( {1: 'Sun'}, {2: 'Mon'}, {4: 'Tue'}, {8: 'Wed'}, {16: 'Thu'}, {32: 'Fri'}, {64: 'Sat'}) # this faster than log2(x) _dow_num={ 1: wx.DateTime.Sun, 2: wx.DateTime.Mon, 4: wx.DateTime.Tue, 8: wx.DateTime.Wed, 16: wx.DateTime.Thu, 32: wx.DateTime.Fri, 64: wx.DateTime.Sat } dow_names={ 'Sun': 1, 'Mon': 2, 'Tue': 4, 'Wed': 8, 'Thu': 16, 'Fri': 32, 'Sat': 64 } dow_weekday=0x3E dow_weekend=0x41 dow_weekstart={ 'SU': 7, 'MO': 1, 'TU': 2, 'WE': 3, 'TH': 4, 'FR': 5, 'SA': 6 } def __init__(self, repeat_type=daily): self._type=repeat_type self._data=[0,0,0] self._suppressed=[] self._wkstart=7 # default to Sun def __eq__(self, rhs): # return T if equal if not isinstance(rhs, RepeatEntry): return False if self.repeat_type!=rhs.repeat_type: return False if self.repeat_type==RepeatEntry.daily: if self.interval!=rhs.interval: return False elif self.repeat_type==RepeatEntry.weekly: if self.interval!=rhs.interval or \ self.dow!=rhs.dow: return False elif self.repeat_type==RepeatEntry.monthly: if self.interval!=rhs.interval or \ self.interval2!=rhs.interval2 or \ self.dow!=rhs.dow: return False return True def __ne__(self, rhs): return not self.__eq__(rhs) def get(self): # return a dict representing internal data # mainly used for populatefs r={} if self._type==self.daily: r[self.daily]= { 'interval': self._data[self._interval] } elif self._type==self.weekly: r[self.weekly]= { 'interval': self._data[self._interval], 'dow': self._data[self._dow] } elif self._type==self.monthly: r[self.monthly]={ 'interval': self._data[self._interval], 'interval2': self._data[self._interval2], 'dow': self._data[self._dow] } else: r[self.yearly]=None s=[] for n in self._suppressed: s.append(n.get()) r['suppressed']=s return r def get_db_dict(self): # return a copy of the dict compatible with the database stuff db_r={} r={} r['type']=self._type r['weekstart']=self.weekstart if self._type==self.daily: r['interval']=self._data[self._interval] elif self._type==self.weekly or self._type==self.monthly: r['interval']=self._data[self._interval] r['dow']=self._data[self._dow] if self._type==self.monthly: r['interval2']=self._data[self._interval2] # and the suppressed stuff s=[] for n in self._suppressed: s.append({ 'date': n.iso_str(True) }) db_r['repeat']=[r] if len(s): db_r['suppressed']=s return db_r def set(self, data): # setting data from a dict, mainly used for getfromfs if data.has_key(self.daily): # daily type self.repeat_type=self.daily self.interval=data[self.daily]['interval'] elif data.has_key(self.weekly): # weekly type self.repeat_type=self.weekly self.interval=data[self.weekly]['interval'] self.dow=data[self.weekly]['dow'] elif data.has_key(self.monthly): self.repeat_type=self.monthly self.dow=data[self.monthly].get('dow', 0) self.interval=data[self.monthly].get('interval', 0) self.interval2=data[self.monthly].get('interval2', 1) else: self.repeat_type=self.yearly s=[] for n in data.get('suppressed', []): s.append(bptime.BPTime(n)) self.suppressed=s def set_db_dict(self, data): r=data.get('repeat', [{}])[0] self.repeat_type=r['type'] _dow=r.get('dow', 0) _interval=r.get('interval', 0) self.weekstart=r.get('weekstart', 'SU') if self.repeat_type==self.daily: self.interval=_interval elif self.repeat_type==self.weekly or self.repeat_type==self.monthly: self.interval=_interval self.dow=_dow if self.repeat_type==self.monthly: self.interval2=r.get('interval2', 1) # now the suppressed stuff s=[] for n in data.get('suppressed', []): s.append(bptime.BPTime(n['date'])) self.suppressed=s def get_nthweekday(self, date): """Utility routine: return the nth weekday of the specified date""" _wxmonth=date[1]-1 _year=date[0] _day=date[2] _dt=wx.DateTimeFromDMY(_day, _wxmonth, _year) _dt.SetToWeekDay(_dt.GetWeekDay(), 1, _wxmonth, _year) return (_day-_dt.GetDay())/7+1 def _check_daily(self, s, d): if self.interval: # every nth day return (int((d-s).days)%self.interval)==0 else: # every weekday return d.weekday()<5 def _next_daily(self, ymd): """Return the date (y,m,d) of the next occurrence of this event""" _d0=datetime.date(*ymd) if self.interval: # every nth day: _delta=self.interval else: # every weekday if _d0.isoweekday()<5: # next weekday _delta=1 else: # the following Monday _delta=3 _d1=_d0+datetime.timedelta(days=_delta) return (_d1.year, _d1.month, _d1.day) def _weekof(self, d): # return the date of the start of the week into which that d falls. _workweek=self.weekstart _dow=d.isoweekday() return d-datetime.timedelta((_dow-_workweek) if _dow>=_workweek \ else (_dow+7-_workweek)) def _check_weekly(self, s, d): # check if at least one day-of-week is specified, if not default to the # start date if self.dow==0: self.dow=1<<(s.isoweekday()%7) # check to see if this is the nth week day_of_week=d.isoweekday()%7 # Sun=0, ..., Sat=6 if ((self._weekof(d)-self._weekof(s)).days/7)%self.interval: # wrong week return False # check for the right weekday return ((1<=s.month: if (d.month-s.month)%self.interval2: # wrong month return False elif (12+d.month-s.month)%self.interval2: return False if self.dow==0: # no weekday specified, implied nth day of the month return d.day==s.day else: # every interval-th dow-day (ie 1st Mon) of the month _dow=(1<<(d.isoweekday()%7))&self.dow if not _dow: # not even the right day-of-week return False dt=wx.DateTime.Now() if self.interval<5: # nth *day of the month _nth=self.interval else: # last *day of the month _nth=-1 return dt.SetToWeekDay(self._dow_num[_dow], _nth, month=d.month-1, year=d.year) and \ dt.GetDay()==d.day def _next_monthly(self, ymd): """Return the date of the next occurrence of this event""" _day=ymd[2] _month=ymd[1]+self.interval2 if _month%12: _year=ymd[0]+_month/12 _month=_month%12 else: _year=ymd[0]+_month/12-1 _month=12 _d1=datetime.date(_year, _month, _day) if self.dow==0: # nth day of the month return (_d1.year, _d1.month, _d1.day) else: # every interval-th dow-day (ie 1st Mon) of the month if self.interval<5: # nth *day of the month _nth=self.interval else: # last *day of the month _nth=-1 _dt=wx.DateTime() _dt.SetToWeekDay(self._dow_num[self.dow], _nth, month=_d1.month-1, year=_d1.year) return (_dt.GetYear(), _dt.GetMonth()+1, _dt.GetDay()) def _check_yearly(self, s, d): return d.month==s.month and d.day==s.day def _next_yearly(self, ymd): """Return the date of the next occurrence of this event""" return (ymd[0]+1, ymd[1], ymd[2]) def is_active(self, s, d): # check in the suppressed list if bptime.BPTime(d) in self._suppressed: # in the list, not part of this repeat return False # determine if the date is active if self.repeat_type==self.daily: return self._check_daily(s, d) elif self.repeat_type==self.weekly: return self._check_weekly(s, d) elif self.repeat_type==self.monthly: return self._check_monthly(s, d) elif self.repeat_type==self.yearly: return self._check_yearly(s, d) else: return False def next_date(self, ymd): """Return the date of the next occurrence of this event""" if self.repeat_type==self.daily: return self._next_daily(ymd) elif self.repeat_type==self.weekly: return self._next_weekly(ymd) elif self.repeat_type==self.monthly: return self._next_monthly(ymd) else: return self._next_yearly(ymd) def _get_type(self): return self._type def _set_type(self, repeat_type): if repeat_type in (self.daily, self.weekly, self.monthly, self.yearly): self._type = repeat_type else: raise AttributeError, 'type' repeat_type=property(fget=_get_type, fset=_set_type) def _get_interval(self): if self._type==self.yearly: raise AttributeError return self._data[self._interval] def _set_interval(self, interval): if self._type==self.yearly: raise AttributeError self._data[self._interval]=interval interval=property(fget=_get_interval, fset=_set_interval) def _get_interval2(self): if self._type==self.yearly: raise AttributeError return self._data[self._interval2] def _set_interval2(self, interval): if self._type==self.yearly: raise AttributeError self._data[self._interval2]=interval interval2=property(fget=_get_interval2, fset=_set_interval2) def _get_dow(self): if self._type==self.yearly: raise AttributeError return self._data[self._dow] def _set_dow(self, dow): if self._type==self.yearly: raise AttributeError if isinstance(dow, (int, long)): self._data[self._dow]=int(dow) elif isinstance(dow, (list, tuple)): self._data[self._dow]=1<<(datetime.date(*dow[:3]).isoweekday()%7) else: raise TypeError,"Must be an int or a list/tuple" dow=property(fget=_get_dow, fset=_set_dow) def _get_dow_str(self): try: _dow=self.dow except AttributeError: return '' names=[] for l in self._dow_names: for k,e in l.items(): if k&_dow: names.append(e) return ';'.join(names) dow_str=property(fget=_get_dow_str) def _get_wkstart(self): return self._wkstart def _set_wkstart(self, wkstart): if isinstance(wkstart, (int, long)): if wkstart in range(1, 8): self._wkstart=int(wkstart) else: raise ValueError('Must be between 1-7') elif isinstance(wkstart, (str, unicode)): self._wkstart=self.dow_weekstart.get(str(wkstart.upper()), 7) else: raise TypeError("Must be either a string or int") weekstart=property(fget=_get_wkstart, fset=_set_wkstart) def _get_suppressed(self): return self._suppressed def _set_suppressed(self, d): if not isinstance(d, list): raise TypeError, 'must be a list of string or BPTime' if not len(d) or isinstance(d[0], bptime.BPTime): # empty list or already a list of BPTime self._suppressed=d elif isinstance(d[0], str): # list of 'yyyy-mm-dd' self._suppressed=[] for n in d: self._suppressed.append(bptime.BPTime(n.replace('-', ''))) def add_suppressed(self, y, m, d): self._suppressed.append(bptime.BPTime((y, m, d))) def get_suppressed_list(self): return [x.date_str() for x in self._suppressed] suppressed=property(fget=_get_suppressed, fset=_set_suppressed) def _get_suppressed_str(self): return ';'.join(self.get_suppressed_list()) suppressed_str=property(fget=_get_suppressed_str) #------------------------------------------------------------------------------- class CalendarEntry(object): # priority const priority_high=1 priority_normal=5 priority_low=10 # no end date no_end_date=(4000, 1, 1) # required and optional attributes, mainly used for comparison _required_attrs=('description', 'start','end') _required_attr_names=('Description', 'Start', 'End') _optional_attrs=('location', 'priority', 'alarm', 'allday', 'vibrate', 'voice', 'repeat', 'notes', 'categories', 'ringtone', 'wallpaper') _optional_attr_names=('Location', 'Priority', 'Alarm', 'All-Day', 'Vibrate', '', 'Repeat', 'Notes', 'Categories', 'Ringtone', 'Wallpaper') def __init__(self, year=None, month=None, day=None): self._data={} # setting default values if day is not None: self._data['start']=bptime.BPTime((year, month, day)) self._data['end']=bptime.BPTime((year, month, day)) else: self._data['start']=bptime.BPTime() self._data['end']=bptime.BPTime() self._data['serials']=[] self._create_id() def matches(self, rhs): # Match self against this entry, which may not have all the # optional attributes if not isinstance(rhs, CalendarEntry): return False for _attr in CalendarEntry._required_attrs: if getattr(self, _attr) != getattr(rhs, _attr): return False for _attr in CalendarEntry._optional_attrs: _rhs_attr=getattr(rhs, _attr) if _rhs_attr is not None and getattr(self, _attr)!=_rhs_attr: return False return True def get_changed_fields(self, rhs): # Return a CSV string of all the fields having different values if not isinstance(rhs, CalendarEntry): return '' _res=[] for _idx,_attr in enumerate(CalendarEntry._required_attrs): if getattr(self, _attr) != getattr(rhs, _attr): _res.append(CalendarEntry._required_attr_names[_idx]) for _idx,_attr in enumerate(CalendarEntry._optional_attrs): _rhs_attr=getattr(rhs, _attr) if _rhs_attr is not None and getattr(self, _attr)!=_rhs_attr: _res.append(CalendarEntry._optional_attr_names[_idx]) return ','.join(_res) def similar(self, rhs): # return T if rhs is similar to self # for now, they're similar if they have the same start time return self.start==rhs.start def replace(self, rhs): # replace the contents of this entry with the new one for _attr in CalendarEntry._required_attrs+\ CalendarEntry._optional_attrs: _rhs_attr=getattr(rhs, _attr) if _rhs_attr is not None: setattr(self, _attr, _rhs_attr) def __eq__(self, rhs): if not isinstance(rhs, CalendarEntry): return False for _attr in CalendarEntry._required_attrs+CalendarEntry._optional_attrs: if getattr(self, _attr)!=getattr(rhs, _attr): return False return True def __ne__(self, rhs): return not self.__eq__(rhs) def get(self): r=copy.deepcopy(self._data, _nil={}) if self.repeat is not None: r['repeat']=self.repeat.get() r['start']=self._data['start'].iso_str() r['end']=self._data['end'].iso_str() return r def get_db_dict(self): # return a dict compatible with the database stuff r=copy.deepcopy(self._data, _nil={}) # adjust for start & end r['start']=self._data['start'].iso_str(self.allday) r['end']=self._data['end'].iso_str(self.allday) # adjust for repeat & suppressed if self.repeat is not None: r.update(self.repeat.get_db_dict()) # take out uneeded keys if r.has_key('allday'): del r['allday'] return r def set(self, data): self._data={} self._data.update(data) self._data['start']=bptime.BPTime(data['start']) self._data['end']=bptime.BPTime(data['end']) if self.repeat is not None: r=RepeatEntry() r.set(self.repeat) self.repeat=r # try to clean up the dict for k, e in self._data.items(): if e is None or e=='' or e==[]: del self._data[k] def set_db_dict(self, data): # update our data with dict return from database self._data={} self._data.update(data) # adjust for allday self.allday=len(data['start'])==8 # adjust for start and end self._data['start']=bptime.BPTime(data['start']) self._data['end']=bptime.BPTime(data['end']) # adjust for repeat if data.has_key('repeat'): rp=RepeatEntry() rp.set_db_dict(data) self.repeat=rp def is_active(self, y, m ,d): # return true if if this event is active on this date, # mainly used for repeating events. s=self._data['start'].date e=self._data['end'].date d=datetime.date(y, m, d) if de: # before start date, after end date return False if self.repeat is None: # not a repeat event, within range so it's good return True # repeat event: check if it's in range. return self.repeat.is_active(s, d) def suppress_repeat_entry(self, y, m, d): if self.repeat is None: # not a repeat entry, do nothing return self.repeat.add_suppressed(y, m, d) def _set_or_del(self, key, v, v_list=()): if v is None or v in v_list: if self._data.has_key(key): del self._data[key] else: self._data[key]=v def _get_description(self): return self._data.get('description', '') def _set_description(self, desc): self._set_or_del('description', desc, ('',)) description=property(fget=_get_description, fset=_set_description) def _get_location(self): return self._data.get('location', '') def _set_location(self, location): self._set_or_del('location', location, ('',)) location=property(fget=_get_location, fset=_set_location) def _get_desc_loc(self): # return 'description[location]' if self.location: return self.description+'['+self.location+']' return self.description def _set_desc_loc(self, v): # parse and set for 'description[location]' _idx1=v.find('[') _idx2=v.find(']') if _idx1!=-1 and _idx2!=-1 and _idx2>_idx1: # location specified self.location=v[_idx1+1:_idx2] self.description=v[:_idx1] else: self.description=v desc_loc=property(fget=_get_desc_loc, fset=_set_desc_loc) def _get_priority(self): return self._data.get('priority', None) def _set_priority(self, priority): self._set_or_del('priority', priority) priority=property(fget=_get_priority, fset=_set_priority) def _get_alarm(self): return self._data.get('alarm', -1) def _set_alarm(self, alarm): self._set_or_del('alarm', alarm) alarm=property(fget=_get_alarm, fset=_set_alarm) def _get_allday(self): return self._data.get('allday', False) def _set_allday(self, allday): self._data['allday']=allday allday=property(fget=_get_allday, fset=_set_allday) def _get_start(self): return self._data['start'].get() def _set_start(self, datetime): self._data['start'].set(datetime) start=property(fget=_get_start, fset=_set_start) def _get_start_str(self): return self._data['start'].date_str()+' '+\ self._data['start'].time_str(False, '00:00') start_str=property(fget=_get_start_str) def _get_end(self): return self._data['end'].get() def _set_end(self, datetime): self._data['end'].set(datetime) end=property(fget=_get_end, fset=_set_end) def _get_end_str(self): return self._data['end'].date_str()+' '+\ self._data['end'].time_str(False, '00:00') end_str=property(fget=_get_end_str) def open_ended(self): # True if this is an open-ended event return self.end[:3]==self.no_end_date def _get_vibrate(self): return self._data.get('vibrate', 0) def _set_vibrate(self, v): self._set_or_del('vibrate', v, (None, 0, False)) vibrate=property(fget=_get_vibrate, fset=_set_vibrate) def _get_voice(self): return self._data.get('voice', None) def _set_voice(self, v): self._set_or_del('voice', v, (None,)) voice=property(fget=_get_voice, fset=_set_voice) def _get_serials(self): return self._data.get('serials', None) def _set_serials(self, serials): self._data['serials']=serials serials=property(fget=_get_serials, fset=_set_serials) def _get_repeat(self): return self._data.get('repeat', None) def _set_repeat(self, repeat): self._set_or_del('repeat', repeat) repeat=property(fget=_get_repeat, fset=_set_repeat) def _get_id(self): s=self._data.get('serials', []) for n in s: if n.get('sourcetype', None)=='bitpim': return n.get('id', None) return None def _set_id(self, id): s=self._data.get('serials', []) for n in s: if n.get('sourcetype', None)=='bitpim': n['id']=id return self._data['serials'].append({'sourcetype': 'bitpim', 'id': id } ) id=property(fget=_get_id, fset=_set_id) def _get_notes(self): return self._data.get('notes', '') def _set_notes(self, s): self._set_or_del('notes', s, ('',)) notes=property(fget=_get_notes, fset=_set_notes) def _get_categories(self): return self._data.get('categories', []) def _set_categories(self, s): self._set_or_del('categories', s,([],)) if s==[] and self._data.has_key('categories'): del self._data['categories'] categories=property(fget=_get_categories, fset=_set_categories) def _get_categories_str(self): c=self.categories if len(c): return ';'.join([x['category'] for x in c]) else: return '' categories_str=property(fget=_get_categories_str) def _get_ringtone(self): return self._data.get('ringtone', '') def _set_ringtone(self, rt): self._set_or_del('ringtone', rt, ('',)) ringtone=property(fget=_get_ringtone, fset=_set_ringtone) def _get_wallpaper(self): return self._data.get('wallpaper', '',) def _set_wallpaper(self, wp): self._set_or_del('wallpaper', wp, ('',)) wallpaper=property(fget=_get_wallpaper, fset=_set_wallpaper) # we use two random numbers to generate the serials. _persistrandom # is seeded at startup _persistrandom=random.Random() def _create_id(self): "Create a BitPim serial for this entry" rand2=random.Random() # this random is seeded when this function is called num=sha.new() num.update(`self._persistrandom.random()`) num.update(`rand2.random()`) self._data["serials"].append({"sourcetype": "bitpim", "id": num.hexdigest()}) def _get_print_data(self): """ return a list of strings used for printing this event: [0]: start time, [1]: '', [2]: end time, [3]: Description [4]: Repeat Type, [5]: Alarm """ if self.allday: t0='All Day' t1='' else: t0=self._data['start'].time_str() t1=self._data['end'].time_str() rp=self.repeat if rp is None: rp_str='' else: rp_str=rp.repeat_type[0].upper() if self.alarm==-1: alarm_str='' else: alarm_str='%d:%02d'%(self.alarm/60, self.alarm%60) return [t0, '', t1, self.description, rp_str, alarm_str] print_data=property(fget=_get_print_data) @classmethod def cmp_by_time(cls, a, b): """ compare 2 objects by start times. -1 if ab allday is always less than having start times. Mainly used for sorting list of events """ if not isinstance(a, cls) or \ not isinstance(b, cls): raise TypeError, 'must be a CalendarEntry object' if a.allday and b.allday: return 0 if a.allday and not b.allday: return -1 if not a.allday and b.allday: return 1 t0=a.start[3:] t1=b.start[3:] if t0t1: return 1 def _summary(self): # provide a one-liner summary string for this event if self.allday: str=self.description else: hr=self.start[3] ap="am" if hr>=12: ap="pm" hr-=12 if hr==0: hr=12 str="%2d:%02d %s" % (hr, self.start[4], ap) str+=" "+self.description return str summary=property(fget=_summary) #------------------------------------------------------------------------------- class Calendar(calendarcontrol.Calendar): """A class encapsulating the GUI and data of the calendar (all days). A seperate dialog is used to edit the content of one particular day.""" CURRENTFILEVERSION=3 def __init__(self, mainwindow, parent, id=-1): """constructor @type mainwindow: gui.MainWindow @param mainwindow: Used to get configuration data (such as directory to save/load data. @param parent: Widget acting as parent for this one @param id: id """ self.mainwindow=mainwindow self.entrycache={} self.entries={} self.repeating=[] # nb this is stored unsorted self._data={} # the underlying data calendarcontrol.Calendar.__init__(self, parent, rows=5, id=id) self.dialog=calendarentryeditor.Editor(self) pubsub.subscribe(self.OnMediaNameChanged, pubsub.MEDIA_NAME_CHANGED) today.bind_notification_event(self.OnTodayItem, today.Today_Group_Calendar) today.bind_request_event(self.OnTodayRequest) pubsub.subscribe(self.OnTodayButton, pubsub.MIDNIGHT) def OnPrintDialog(self, mainwindow, config): with guihelper.WXDialogWrapper(CalendarPrintDialog(self, mainwindow, config), True): pass def CanPrint(self): return True def OnMediaNameChanged(self, msg): d=msg.data _type=d.get(pubsub.media_change_type, None) _old_name=d.get(pubsub.media_old_name, None) _new_name=d.get(pubsub.media_new_name, None) if _type is None or _old_name is None or _new_name is None: # invalid/incomplete data return if _type!=pubsub.wallpaper_type and \ _type!=pubsub.ringtone_type: # neither wallpaper nor ringtone return _old_name=common.basename(_old_name) _new_name=common.basename(_new_name) if _type==pubsub.wallpaper_type: attr_name='wallpaper' else: attr_name='ringtone' modified=False for k,e in self._data.items(): if getattr(e, attr_name, None)==_old_name: setattr(e, attr_name, _new_name) modified=True if modified: # changes were made, update everything self.updateonchange() def getdata(self, dict): """Return underlying calendar data in bitpim format @return: The modified dict updated with at least C{dict['calendar']}""" if dict.get('calendar_version', None)==2: # return a version 2 dict dict['calendar']=self._convert3to2(self._data, dict.get('ringtone-index', None)) else: dict['calendar']=copy.deepcopy(self._data, _nil={}) return dict def updateonchange(self): """Called when our data has changed The disk, widget and display are all updated with the new data""" d={} d=self.getdata(d) self.populatefs(d) self.populate(d) # Brute force - assume all entries have changed self.RefreshAllEntries() def AddEntry(self, entry): """Adds and entry into the calendar data. The entries on disk are updated by this function. @type entry: a dict containing all the fields. @param entry: an entry. It must contain a C{pos} field. You should call L{newentryfactory} to make an entry that you then modify """ self._data[entry.id]=entry self.updateonchange() def DeleteEntry(self, entry): """Deletes an entry from the calendar data. The entries on disk are updated by this function. @type entry: a dict containing all the fields. @param entry: an entry. It must contain a C{pos} field corresponding to an existing entry """ del self._data[entry.id] self.updateonchange() def DeleteEntryRepeat(self, entry, year, month, day): """Deletes a specific repeat of an entry See L{DeleteEntry}""" self._data[entry.id].suppress_repeat_entry(year, month, day) self.updateonchange() def ChangeEntry(self, oldentry, newentry): """Changes an entry in the calendar data. The entries on disk are updated by this function. """ assert oldentry.id==newentry.id self._data[newentry.id]=newentry self.updateonchange() def getentrydata(self, year, month, day): """return the entry objects for corresponding date @rtype: list""" # return data from cache if we have it res=self.entrycache.get( (year,month,day), None) if res is not None: return res # find non-repeating entries res=self.entries.get((year,month,day), []) for i in self.repeating: if i.is_active(year, month, day): res.append(i) self.entrycache[(year,month,day)] = res return res def newentryfactory(self, year, month, day): """Returns a new 'blank' entry with default fields @rtype: CalendarEntry """ # create a new entry res=CalendarEntry(year, month, day) # fill in default start & end data now=time.localtime() event_start=(year, month, day, now.tm_hour, now.tm_min) event_end=[year, month, day, now.tm_hour, now.tm_min] # we make end be the next hour, unless it has gone 11pm # in which case it is 11:59pm if event_end[3]<23: event_end[3]+=1 event_end[4]=0 else: event_end[3]=23 event_end[4]=59 res.start=event_start res.end=event_end res.description='New Event' return res def getdaybitmap(self, start, repeat): if repeat!="weekly": return 0 dayofweek=calendar.weekday(*(start[:3])) dayofweek=(dayofweek+1)%7 # normalize to sunday == 0 return [2048,1024,512,256,128,64,32][dayofweek] def OnGetEntries(self, year, month, day): """return pretty printed sorted entries for date as required by the parent L{calendarcontrol.Calendar} for display in a cell""" entry_list=self.getentrydata(year, month, day) res=[] for _entry in entry_list: (_y,_m,_d,_h,_min, _desc)=_entry.start+(_entry.description,) if _entry.allday: res.append((None, None, _desc)) elif _entry.repeat or (_y,_m,_d)==(year, month, day): res.append((_h, _min, _desc)) else: res.append((None, None, '...'+_desc)) res.sort() return res def OnEdit(self, year, month, day, entry=None): """Called when the user wants to edit entries for a particular day""" if self.dialog.dirty: # user is editing a field so we don't allow edit wx.Bell() else: self.dialog.setdate(year, month, day, entry) self.dialog.Show(True) def OnTodayItem(self, evt): self.ActivateSelf() if evt.data: args=evt.data['datetime']+(evt.data['entry'],) self.OnEdit(*args) def OnTodayButton(self, evt): """ Called when the user goes to today cell""" super(Calendar, self).OnTodayButton(evt) if self.dialog.IsShown(): # editor dialog is up, update it self.OnEdit(*self.selecteddate) def _publish_today_events(self): now=datetime.datetime.now() l=self.getentrydata(now.year, now.month, now.day) l.sort(CalendarEntry.cmp_by_time) today_event=today.TodayCalendarEvent() for e in l: today_event.append(e.summary, { 'datetime': (now.year, now.month, now.day), 'entry': e }) today_event.broadcast() def _publish_thisweek_events(self): now=datetime.datetime.now() one_day=datetime.timedelta(1) d1=now _days=6-(now.isoweekday()%7) res=[] today_event=today.ThisWeekCalendarEvent() for i in range(_days): d1+=one_day l=self.getentrydata(d1.year, d1.month, d1.day) if l: _dow=today.dow_initials[d1.isoweekday()%7] l.sort(CalendarEntry.cmp_by_time) for i,x in enumerate(l): if i: _name=today.dow_initials[-1]+' ' else: _name=_dow+' - ' _name+=x.summary today_event.append(_name, { 'datetime': (d1.year, d1.month, d1.day), 'entry': x }) today_event.broadcast() def OnTodayRequest(self, _): self._publish_today_events() self._publish_thisweek_events() def _add_entries(self, entry): # Add this entry, which may span several days, to the entries list _t0=datetime.datetime(*entry.start[:3]) _t1=datetime.datetime(*entry.end[:3]) _oneday=datetime.timedelta(days=1) for _ in range((_t1-_t0).days+1): self.entries.setdefault((_t0.year, _t0.month, _t0.day), []).append(entry) _t0+=_oneday def populate(self, dict): """Updates the internal data with the contents of C{dict['calendar']}""" if dict.get('calendar_version', None)==2: # Cal dict version 2, need to convert to current ver(3) self._data=self._convert2to3(dict.get('calendar', {}), dict.get('ringtone-index', {})) else: self._data=dict.get('calendar', {}) self.entrycache={} self.entries={} self.repeating=[] for entry in self._data: entry=self._data[entry] y,m,d,h,min=entry.start if entry.repeat is None: self._add_entries(entry) else: self.repeating.append(entry) # tell everyone that i've changed self._publish_today_events() self._publish_thisweek_events() self.RefreshAllEntries() def populatefs(self, dict): """Saves the dict to disk""" if dict.get('calendar_version', None)==2: # Cal dict version 2, need to convert to current ver(3) cal_dict=self._convert2to3(dict.get('calendar', {}), dict.get('ringtone-index', {})) else: cal_dict=dict.get('calendar', {}) db_rr={} for k, e in cal_dict.items(): db_rr[k]=CalendarDataObject(e) database.ensurerecordtype(db_rr, calendarobjectfactory) db_rr=database.extractbitpimserials(db_rr) self.mainwindow.database.savemajordict('calendar', db_rr) return dict def getfromfs(self, dict): """Updates dict with info from disk @Note: The dictionary passed in is modified, as well as returned @rtype: dict @param dict: the dictionary to update @return: the updated dictionary""" self.thedir=self.mainwindow.calendarpath if os.path.exists(os.path.join(self.thedir, "index.idx")): # old index file exists: read, convert, and discard file dct={'result': {}} common.readversionedindexfile(os.path.join(self.thedir, "index.idx"), dct, self.versionupgrade, self.CURRENTFILEVERSION) converted=dct['result'].has_key('converted') db_r={} for k,e in dct['result'].get('calendar', {}).items(): if converted: db_r[k]=CalendarDataObject(e) else: ce=CalendarEntry() ce.set(e) db_r[k]=CalendarDataObject(ce) # save it in the new database database.ensurerecordtype(db_r, calendarobjectfactory) db_r=database.extractbitpimserials(db_r) self.mainwindow.database.savemajordict('calendar', db_r) # now that save is succesful, move file out of the way os.rename(os.path.join(self.thedir, "index.idx"), os.path.join(self.thedir, "index-is-now-in-database.bak")) # read data from the database cal_dict=self.mainwindow.database.getmajordictvalues('calendar', calendarobjectfactory) #if __debug__: # print 'Calendar.getfromfs: dicts returned from Database:' r={} for k,e in cal_dict.items(): #if __debug__: # print e ce=CalendarEntry() ce.set_db_dict(e) r[ce.id]=ce dict.update({ 'calendar': r }) return dict def mergedata(self, result): """ Merge the newdata (from the phone) into current data """ with guihelper.WXDialogWrapper(MergeDialog(self, self._data, result.get('calendar', {})), True) as (dlg, retcode): if retcode==wx.ID_OK: self._data=dlg.get() self.updateonchange() def versionupgrade(self, dict, version): """Upgrade old data format read from disk @param dict: The dict that was read in @param version: version number of the data on disk """ # version 0 to 1 upgrade if version==0: version=1 # they are the same # 1 to 2 if version==1: # ?d field renamed daybitmap version=2 for k in dict['result']['calendar']: entry=dict['result']['calendar'][k] entry['daybitmap']=self.getdaybitmap(entry['start'], entry['repeat']) del entry['?d'] # 2 to 3 etc if version==2: version=3 dict['result']['calendar']=self.convert_dict(dict['result'].get('calendar', {}), 2, 3) dict['result']['converted']=True # already converted # 3 to 4 etc def convert_dict(self, dict, from_version, to_version, ringtone_index={}): """ Convert the calendatr dict from one version to another. Currently only support conversion between version 2 and 3. """ if dict is None: return None if from_version==2 and to_version==3: return self._convert2to3(dict, ringtone_index) elif from_version==3 and to_version==2: return self._convert3to2(dict, ringtone_index) else: raise 'Invalid conversion' def _convert2to3(self, dict, ringtone_index): """ Convert calendar dict from version 2 to 3. """ r={} for k,e in dict.items(): ce=CalendarEntry() ce.start=e['start'] ce.end=e['end'] ce.description=e['description'] ce.alarm=e['alarm'] ce.ringtone=ringtone_index.get(e['ringtone'], {}).get('name', '') repeat=e['repeat'] if repeat is None: ce.repeat=None else: repeat_entry=RepeatEntry() if repeat=='daily': repeat_entry.repeat_type=repeat_entry.daily repeat_entry.interval=1 elif repeat=='monfri': repeat_entry.repeat_type=repeat_entry.daily repeat_entry.interval=0 elif repeat=='weekly': repeat_entry.repeat_type=repeat_entry.weekly repeat_entry.interval=1 dow=datetime.date(*e['start'][:3]).isoweekday()%7 repeat_entry.dow=1<1 # generate exceptions for those dates that are N/A d['repeat']='daily' t0=datetime.date(*e.start[:3]) t1=datetime.date(*e.end[:3]) delta_t=datetime.timedelta(1) while t0<=t1: if not e.is_active(t0.year, t0.month, t0.day): d['exceptions'].append((t0.year, t0.month, t0.day)) t0+=delta_t def _convert_weekly_events(self, e, d, idx): """ Convert a weekly event from v3 to v2 """ rp=e.repeat dow=rp.dow t0=datetime.date(*e.start[:3]) t1=t3=datetime.date(*e.end[:3]) delta_t=datetime.timedelta(1) delta_t7=datetime.timedelta(7) if (t1-t0).days>6: # end time is more than a week away t1=t0+datetime.timedelta(6) d['repeat']='weekly' res={} while t0<=t1: dow_0=t0.isoweekday()%7 if (1<len(self.data) or col>len(self._cols_attrs): return True return False # Get/Set values in the table. The Python version of these # methods can handle any data-type, (as long as the Editor and # Renderer understands the type too,) not just strings as in the # C++ version. def GetValue(self, row, col): try: return self.data[row][col] except IndexError: return '' def SetValue(self, row, col, value): try: self.data[row][col] = value except IndexError: pass #-------------------------------------------------- # Some optional methods # Called when the grid needs to display labels def GetColLabelValue(self, col): try: return self._cols_attrs[col]['label'] except IndexError: return '' def IsReadOnlyCell(self, row, col): try: return self._cols_attrs[col]['readonly'] except IndexError: return False def GetAlignments(self, row, col): try: return self._cols_attrs[col]['alignment'] except IndexError: return None # Called to determine the kind of editor/renderer to use by # default, doesn't necessarily have to be the same type used # natively by the editor/renderer if they know how to convert. def GetTypeName(self, row, col): return self._cols_attrs[col]['type'] # Called to determine how the data can be fetched and stored by the # editor and renderer. This allows you to enforce some type-safety # in the grid. def CanGetValueAs(self, row, col, typeName): return self._cols_attrs[col]['type']==typeName def CanSetValueAs(self, row, col, typeName): return self.CanGetValueAs(row, col, typeName) class MergeDataGrid(gridlib.Grid): def __init__(self, parent, table): super(MergeDataGrid, self).__init__(parent, -1) self.SetTable(table, True) # set col attributes for _col in range(table.GetNumberCols()): _ro=table.IsReadOnlyCell(0, _col) _alignments=table.GetAlignments(0, _col) if _ro or _alignments: _attr=gridlib.GridCellAttr() if _ro: _attr.SetReadOnly(True) if _alignments: _attr.SetAlignment(*_alignments) self.SetColAttr(_col, _attr) self.SetRowLabelSize(0) self.SetMargins(0,0) self.AutoSize() self.Refresh() class MergeDialog(wx.Dialog): def __init__(self, parent, olddata, newdata): super(MergeDialog, self).__init__(parent, -1, 'Calendar Data Merge', style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER) self._merge=False vbs=wx.BoxSizer(wx.VERTICAL) self._grid=MergeDataGrid(self, MergeDataTable(olddata, newdata)) vbs.Add(self._grid, 1, wx.EXPAND|wx.ALL, 5) vbs.Add(wx.StaticLine(self), 0, wx.EXPAND|wx.ALL, 5) hbs=wx.BoxSizer(wx.HORIZONTAL) _btn=wx.Button(self, -1, 'Replace All') wx.EVT_BUTTON(self, _btn.GetId(), self.OnReplaceAll) hbs.Add(_btn, 0, wx.EXPAND|wx.ALL, 5) _btn=wx.Button(self, -1, 'Merge') wx.EVT_BUTTON(self, _btn.GetId(), self.OnMerge) hbs.Add(_btn, 0, wx.EXPAND|wx.ALL, 5) _btn=wx.Button(self, wx.ID_CANCEL, 'Cancel') hbs.Add(_btn, 0, wx.EXPAND|wx.ALL, 5) _btn=wx.Button(self, wx.ID_HELP, 'Help') wx.EVT_BUTTON(self, wx.ID_HELP, lambda _: wx.GetApp().displayhelpid(helpids.ID_DLG_CALENDAR_MERGE)) hbs.Add(_btn, 0, wx.EXPAND|wx.ALL, 5) vbs.Add(hbs, 0, wx.ALIGN_CENTRE|wx.ALL, 5) self.SetSizer(vbs) self.SetAutoLayout(True) guiwidgets.set_size("CalendarMergeEditor", self, 52, 1.0) def OnOK(self, _=None): guiwidgets.save_size("CalendarMergeEditor", self.GetRect()) if self.IsModal(): self.EndModal(wx.ID_OK) else: self.SetReturnCode(wx.ID_OK) self.Show(False) def OnReplaceAll(self, evt): self._merge=False self.OnOK() def OnMerge(self, _): self._merge=True self.OnOK() def get(self): # return the merge data return self._grid.GetTable().get(self._merge) bitpim-1.0.7+dfsg1/src/fileinfo.py0000644001616600161660000007350511154114104015105 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: fileinfo.py 4731 2009-03-06 03:28:04Z hjelmn $ "Returns information about files" import os import struct import common import midifile import wma_file import mp4_file class FailedFile: data="" def GetBytes(*args): return None def GetLSBUint32(*args): return None def GetLSBUint16(*args): return None def GetByte(*args): return None def GetMSBUint32(*args): return None def GetMSBUint16(*args): return None class SafeFileWrapper: """Wraps a file object letting you get various parts without exceptions""" READAHEAD=1024 def __init__(self, filename): try: self.file=open(filename, "rb") self.size=os.stat(filename).st_size self.data=self.file.read(self.READAHEAD) except (OSError,IOError): # change our class self.size=-1 self.__class__=FailedFile def GetBytes(self, offset, length): if offset+lengthself.size: return None self.file.seek(offset) res=self.file.read(length) if len(res)L', v)[0] def GetMSBUint16(self, offset): v=self.GetBytes(offset, 2) if v is None: return v return struct.unpack('>H', v)[0] def GetByte(self, offset): v=self.GetBytes(offset,1) if v is None: return v return ord(v) class SafeStringWrapper(SafeFileWrapper): """ Wraps a string object letting you get various parts w/o exceptions. Mainly used by the com_* modules as part of writing media to the phone. """ def __init__(self, string): if isinstance(string, str): self.file=None self.data=string self.size=len(string) else: self.size=-1 self.__class__=FailedFile def GetBytes(self, offset, length): if (offset+length)<=self.size: return self.data[offset:offset+length] class ImgFileInfo: "Wraps information about an image file" # These will always be present attrnames=("width", "height", "format", "bpp", "size", "MAXSIZE") def __init__(self, f, **kwds): for a in self.attrnames: setattr(self, a, None) self.mimetypes=[] self.size=f.size self.__dict__.update(kwds) def shortdescription(self): v=getattr(self, "_shortdescription", None) if v is not None: return v(self) res=[] if self.width is not None and self.height is not None: res.append( "%d x %d" % (self.width, self.height) ) if self.format is not None: res.append( self.format) if self.bpp is not None: res.append( "%d bpp" % (self.bpp,)) if len(res): return " ".join(res) return "Unknown format" def longdescription(self): v=getattr(self, "_longdescription", None) if v is not None: return v(self) return self.shortdescription() def idimg_BMP(f): "Identify a Windows bitmap" # 40 is header size for windows bmp, different numbers are used by OS/2 if f.GetBytes(0,2)=="BM" and f.GetLSBUint16(14)==40: d={'format': "BMP"} d['width']=f.GetLSBUint32(18) d['height']=f.GetLSBUint32(22) d['bpp']=f.GetLSBUint16(28) d['compression']=f.GetLSBUint32(30) d['ncolours']=f.GetLSBUint32(46) d['nimportantcolours']=f.GetLSBUint32(50) d['_longdescription']=fmt_BMP d['mimetypes']=['image/bmp', 'image/x-bmp'] for i in d.itervalues(): if i is None: return None ifi=ImgFileInfo(f,**d) return ifi return None def fmt_BMP(ifi): "Long description for BMP" res=[ifi.shortdescription()] if ifi.compression==0: res.append("No compression") elif ifi.compression==1: res.append("8 bit run length encoding") elif ifi.compression==2: res.append("4 bit run length encoding") elif ifi.compression==3: res.append("RGB bitmap with mask") else: res.append("Unknown compression "+`ifi.compression`) if ifi.ncolours: res.append("%d colours" % (ifi.ncolours,)) if ifi.nimportantcolours: res[-1]=res[-1]+(" (%d important)" % (ifi.nimportantcolours,)) return "\n".join(res) def idimg_PNG(f): "Identify a PNG" if f.GetBytes(0,8)=="\x89PNG\r\n\x1a\n" and f.GetBytes(12,4)=="IHDR": d={'format': "PNG"} d['width']=f.GetMSBUint32(16) d['height']=f.GetMSBUint32(20) d['bitdepth']=f.GetByte(24) d['colourtype']=f.GetByte(25) d['compression']=f.GetByte(26) d['filter']=f.GetByte(27) d['interlace']=f.GetByte(28) d['_shortdescription']=fmts_PNG d['_longdescription']=fmt_PNG d['mimetypes']=['image/png', 'image/x-png'] for i in d.itervalues(): if i is None: return None ifi=ImgFileInfo(f,**d) return ifi return None def fmts_PNG(ifi, short=True): res=[] res.append( "%d x %d" % (ifi.width, ifi.height) ) res.append( ifi.format) if ifi.colourtype in (0,4): res.append("%d bit grayscale" % (ifi.bitdepth,)) elif ifi.colourtype in (2,6): res.append("truecolour (%d bit)" % (ifi.bitdepth*3,)) elif ifi.colourtype==3: res.append("%d colours" % (2**ifi.bitdepth,)) if not short and ifi.colourtype in (4,6): res.append("with transparency") return " ".join(res) def fmt_PNG(ifi): "Long description for PNG" res=[fmts_PNG(ifi, False)] if ifi.compression==0: res.append("Deflate compressed") else: res.append("Unknown compression "+`ifi.compression`) if ifi.filter==0: res.append("Adaptive filtering") else: res.append("Unknown filtering "+`ifi.filter`) if ifi.interlace==0: res.append("No interlacing") elif ifi.interlace==1: res.append("Adam7 interlacing") else: res.append("Unknown interlacing "+`ifi.interlace`) return "\n".join(res) def idimg_BCI(f): "Identify a Brew Compressed Image" if f.GetBytes(0,4)=="BCI\x00": d={'format': "BCI"} d['width']=f.GetLSBUint16(0x0e) d['height']=f.GetLSBUint16(0x10) d['bpp']=8 d['ncolours']=f.GetLSBUint16(0x1a) d['_longdescription']=fmt_BCI d['mimetypes']=['image/x-brewcompressedimage'] for i in d.itervalues(): if i is None: return None ifi=ImgFileInfo(f,**d) return ifi return None def fmt_BCI(ifi): "Long description for BCI" res=[ifi.shortdescription()] res.append("%d colour palette" % (ifi.ncolours,)) return "\n".join(res) def idimg_JPG(f): "Identify a JPEG image" # The people who did jpeg decided to see just how complicated an image # format they could make. if f.GetBytes(0,2)=="\xff\xd8": # in theory we could also parse EXIF information offset=2 while True: # we just skip the segments until we find SOF0 (0xc0) # I can't figure out from the docs if we should also care about SOF1/SOF2 etc if f.GetByte(offset)!=0xff: return None id=f.GetByte(offset+1) offset+=2 seglen=f.GetMSBUint16(offset) if seglen is None or id is None: return None if id!=0xc0: offset+=seglen continue offset+=2 d={'format': 'JPEG'} d['bpp']=3*f.GetByte(offset) d['height']=f.GetMSBUint16(offset+1) d['width']=f.GetMSBUint16(offset+3) d['components']=f.GetByte(offset+5) d['_shortdescription']=fmts_JPG d['mimetypes']=['image/jpg', 'image/jpeg', 'image/x-jpg', 'image/x-jpeg'] for i in d.itervalues(): if i is None: return None ifi=ImgFileInfo(f,**d) return ifi return None def fmts_JPG(ifi): res=[] res.append( "%d x %d" % (ifi.width, ifi.height) ) res.append( ifi.format) if ifi.components==1: res.append("(greyscale)") elif ifi.components==3: res.append("(RGB)") # technically it is YcbCr ... elif ifi.components==4: res.append("(CMYK)") else: res.append("Unknown components "+`ifi.components`) return " ".join(res) def idimg_GIF(f): "Identify a GIF image" if f.GetBytes(0, 3)!='GIF': # not a GIF image return None d={ 'format': 'GIF' } d['version']=f.GetBytes(3, 3) d['width']=f.GetLSBUint16(6) d['height']=f.GetLSBUint16(8) d['_shortdescription']=fmts_GIF d['mimetypes']=['image/gif', 'image/x-gif'] ofs=13 i=f.GetByte(10) if (i&0x80): # there's a global color table, skip it bpp=(i&0x7)+1 d['bpp']=bpp ofs+=3*(2**bpp) # check for data block i=f.GetByte(ofs) if i!=0x2c: # not an image data block if d['version']=='89a' and i==0x21: # extension block, just return what we have so far return ImgFileInfo(f, **d) else: # unknown block, bail return None # get local data d['width']=f.GetLSBUint16(ofs+5) d['height']=f.GetLSBUint16(ofs+7) i=f.GetByte(ofs+9) if (i&0x80): d['bpp']=(i&0xf)+1 return ImgFileInfo(f, **d) def fmts_GIF(ifi): res=[] res.append( "%d x %d" % (ifi.width, ifi.height) ) res.append( '%s%s'%(ifi.format, ifi.version)) if ifi.bpp is not None: res.append( '%d BPP'%ifi.bpp) return ' '.join(res) def idimg_AVI(f): "identify an AVI file format" if f.GetBytes(0, 4)!='RIFF' or f.GetBytes(8, 8)!='AVI LIST' or\ f.GetBytes(20, 8)!='hdrlavih': # not an AVI file return None d={ 'format': 'AVI' } d['duration']=float(f.GetLSBUint32(0x20))*f.GetLSBUint32(0x30)/1000000.0 d['width']=f.GetLSBUint32(0x40) d['height']=f.GetLSBUint32(0x44) d['_shortdescription']=fmts_AVI d['mimetypes']=['video/avi', 'video/msvideo', 'video/x-msvideo', 'video/quicktime' ] return ImgFileInfo(f, **d) def fmts_AVI(ifi): res=['%d x %d' % (ifi.width, ifi.height)] res.append('%.1fs video'%ifi.duration) return ' '.join(res) def idimg_LGBIT(f): "Identify a LGBIT image (LG phone proprietary image format)" # Profoundly lean and mean image format # width/height/image-data # This is for the LG-VX3200. Image data is 16 bit, R5G6B5. width=f.GetLSBUint16(0x00) height=f.GetLSBUint16(0x02) if width is None or height is None: return None if f.size==(width*height*2+4): d={'format': "LGBIT"} d['width']=width d['height']=height d['bpp']=16 d['_shortdescription']=fmts_LGBIT for i in d.itervalues(): if i is None: return None ifi=ImgFileInfo(f,**d) return ifi return None def fmts_LGBIT(ifi): res=[] res.append( "%d x %d" % (ifi.width, ifi.height) ) res.append( '%s'%(ifi.format)) if ifi.bpp is not None: res.append( '%d BPP'%ifi.bpp) return ' '.join(res) def idimg_3GPP2(f): "Identify a 3GPP2(3g2) file" if f.GetBytes(4, 8)!='ftyp3g2a': # Not a 3GPP2 file return None d={ 'format': '3GPP2', 'mimetypes': ['video/3gpp2'] } return ImgFileInfo(f, **d) imageids=[globals()[f] for f in dir() if f.startswith("idimg_")] def identify_imagefile(filename): v=thefileinfocache.get(filename) if v is not None: return v fo=SafeFileWrapper(filename) for f in imageids: obj=f(fo) if obj is not None: return thefileinfocache.set(filename,obj) return thefileinfocache.set(filename,ImgFileInfo(fo)) def identify_imagestring(string): # identify an image format based on the image data string fo=SafeStringWrapper(string) for f in imageids: obj=f(fo) if obj is not None: return obj class AudioFileInfo: "Wraps information about an audio file" # These will always be present attrnames=("format", "size", "duration", "MAXSIZE") def __init__(self, f, **kwds): for a in self.attrnames: setattr(self, a, None) self.mimetypes=[] self.size=f.size self.__dict__.update(kwds) def shortdescription(self): v=getattr(self, "_shortdescription", None) if v is not None: return v(self) res=[] if self.format is not None: res.append( self.format) if self.duration is not None: res.append( "%d seconds" % (self.duration,)) if len(res): return " ".join(res) return "Unknown format" def longdescription(self): v=getattr(self, "_longdescription", None) if v is not None: return v(self) return self.shortdescription() def idaudio_MIDI(f): "Identify a midi file" # http://www.borg.com/~jglatt/tech/midifile.htm # # You can't work out the length without working out # which track is the longest which you have to do by # parsing each note. m=midifile.MIDIFile(f) if not m.valid: return None d={'format': "MIDI"} d['type']=m.type d['numtracks']=m.num_tracks d['duration']=m.duration d['_shortdescription']=fmts_MIDI d['mimetypes']=['audio/x-midi', 'audio/midi'] for i in d.itervalues(): if i is None: return None afi=AudioFileInfo(f,**d) return afi def fmts_MIDI(afi): res=[] res.append( afi.format) res.append( "type "+`afi.type`) if afi.type!=0 and afi.numtracks>1: res.append("(%d tracks)" % (afi.numtracks,)) res.append('%0.1f seconds'%afi.duration) # res.append("%04x" % (afi.division,)) return " ".join(res) def _getbits(start, length, value): assert length>0 return (value>>(start-length+1)) & ((2**length)-1) def getmp3fileinfo(filename): f=SafeFileWrapper(filename) return idaudio_zzMP3(f, True) def getmp4fileinfo(filename): f=SafeFileWrapper(filename) return idaudio_MP4(f) twooheightzeros="\x00"*208 # want to make sure this gets evaluated last def idaudio_zzMP3(f, returnframes=False): # http://mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm try: idv3present=False id3v1present=False header=f.GetMSBUint32(0) # there may be ffmpeg output with 208 leading zeros for no apparent reason if header==0 and f.data.startswith(twooheightzeros): offset=208 # there may be an id3 header at the begining elif header==0x49443303: sz=[f.GetByte(x) for x in range(6,10)] if len([zz for zz in sz if zz<0 or zz>=0x80]): return None sz=(sz[0]<<21)+(sz[1]<<14)+(sz[2]<<7)+sz[3] offset=10+sz idv3present=True header=f.GetMSBUint32(offset) elif header is None: return None else: offset=0 # locate the 1st sync frame while True: v=f.GetMSBUint16(offset) if v is None: return None if v&0xffe0==0xffe0: break offset=f.data.find("\xff", offset+1) if offset<0: # not an mp3 file or sync is way later in return None frames=[] while offsetf.size: break offset=frame.nextoffset frames.append(frame) if len(frames)==0: return if offset!=f.size: print "MP3 offset is",offset,"size is",f.size # copy some information from the first frame f0=frames[0] d={'format': 'MP3', 'id3v1present': id3v1present, # badly named ... 'idv3present': idv3present, 'unrecognisedframes': offset!=f.size, 'version': f0.version, 'layer': f0.layer, 'bitrate': f0.bitrate, 'samplerate': f0.samplerate, 'channels': f0.channels, 'copyright': f0.copyright, 'original': f0.original, 'mimetypes': ['audio/x-mp3', 'audio/mpeg', 'audio/x-mpeg']} duration=f0.duration vbrmin=vbrmax=f0.bitrate for frame in frames[1:]: duration+=frame.duration if frame.bitrate!=f0.bitrate: d['bitrate']=0 if frame.samplerate!=f0.samplerate: d['samplerate']=0 vbrmin=min(frame.bitrate,vbrmin) vbrmax=max(frame.bitrate,vbrmax) if frame.channels!=f0.channels: d['channels']=0 d['duration']=duration d['vbrmin']=vbrmin d['vbrmax']=vbrmax d['_longdescription']=fmt_MP3 d['_shortdescription']=fmts_MP3 if returnframes: d['frames']=frames return AudioFileInfo(f, **d) except: return None def fmt_MP3(afi): res=[] res.append("MP3 (Mpeg Version %d Layer %d)" % (afi.version, afi.layer)) res.append("%s %.1f Khz %0.1f seconds" % (["Variable!!", "Mono", "Stereo"][afi.channels], afi.samplerate/1000.0, afi.duration,)) if afi.bitrate: res.append(`afi.bitrate`+" kbps") else: res.append("VBR (min %d kbps, max %d kbps)" % (afi.vbrmin, afi.vbrmax)) if afi.unrecognisedframes: res.append("There are unrecognised frames in this file") if afi.idv3present: res.append("IDV3 tag present at begining of file") if afi.id3v1present: res.append("IDV3.1 tag present at end of file") if afi.copyright: res.append("Marked as copyrighted") if afi.original: res.append("Marked as the original") return "\n".join(res) def fmts_MP3(afi): return "MP3 %s %dKhz %d sec" % (["Variable!!", "Mono", "Stereo"][afi.channels], afi.samplerate/1000.0, afi.duration,) class MP3Frame: bitrates={ # (version, layer): bitrate mapping (1, 1): [None, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, None], (1, 2): [None, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, None], (1, 3): [None, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, None], (2, 1): [None, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, None], (2, 2): [None, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, None], (2, 3): [None, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, None], } samplerates={ 1: [44100, 48000, 32000, None], 2: [22050, 24000, 16000, None] } def __init__(self, f, offset): self.OK=False header=f.GetMSBUint32(offset) if header is None: return # first 11 buts must all be set if _getbits(31,11, header)!=2047: return self.header=header # Version version=_getbits(20,2,header) if version not in (2,3): # we don't support 'reserved' or version 2.5 return if version==3: # yes, version 1 is encoded as 3 version=1 self.version=version # Layer layer=_getbits(18,2,header) if layer==0: return # reserved which we don't support if layer==1: self.layer=3 elif layer==2: self.layer=2 elif layer==3: self.layer=1 self.crc=_getbits(16,1,header) self.bitrate=self.bitrates[(self.version, self.layer)][_getbits(15,4,header)] self.samplerate=self.samplerates[self.version][_getbits(11,2,header)] self.padding=_getbits(9,1,header) if self.layer==1: self.framelength=(12000*self.bitrate/self.samplerate+self.padding)*4 else: if self.version==1: self.framelength=144000*self.bitrate/self.samplerate+self.padding else: self.framelength=72000*self.bitrate/self.samplerate+self.padding self.duration=self.framelength*8*1.0/(self.bitrate*1000) self.private=_getbits(8,1,header) self.channelmode=_getbits(7,2,header) if self.channelmode in (0,1,2): self.channels=2 else: self.channels=1 self.modeextenstion=_getbits(5,2,header) self.copyright=_getbits(3,1,header) self.original=_getbits(2,1, header) self.emphasis=_getbits(1,2, header) self.offset=offset self.nextoffset=offset+self.framelength self.OK=True def idaudio_QCP(f): "Identify a Qualcomm Purevoice file" # http://www.faqs.org/rfcs/rfc3625.html # # Sigh, another format where you have no hope of being able to work out the length if f.GetBytes(0,4)=="RIFF" and f.GetBytes(8,4)=="QLCM": d={'format': "QCP"} # fmt section if f.GetBytes(12,4)!="fmt ": return None # chunksize is at 16, len 4 d['qcpmajor']=f.GetByte(20) d['qcpminor']=f.GetByte(21) # guid is at 22 d['codecguid']=(f.GetLSBUint32(22), f.GetLSBUint16(26), f.GetLSBUint16(28), f.GetMSBUint16(30), (long(f.GetMSBUint16(32))<<32)+f.GetMSBUint32(34)) d['codecversion']=f.GetLSBUint16(38) name=f.GetBytes(40,80) zero=name.find('\x00') if zero>=0: name=name[:zero] d['codecname']=name d['averagebps']=f.GetLSBUint16(120) # packetsize is at 122, len 2 # block size is at 124, len 2 d['samplingrate']=f.GetLSBUint16(126) d['samplesize']=f.GetLSBUint16(128) d['_longdescription']=fmt_QCP if d['codecguid']==( 0x5e7f6d41, 0xb115, 0x11d0, 0xba91, 0x00805fb4b97eL ) or \ d['codecguid']==( 0x5e7f6d42, 0xb115, 0x11d0, 0xba91, 0x00805fb4b97eL ): d['mimetypes']=['audio/qcelp'] # in theory audio/vnd.qcelp could also be used but is deprecated elif d['codecguid']==( 0xe689d48dL, 0x9076, 0x46b5, 0x91ef, 0x736a5100ceb4L ): d['mimetypes']=['audio/evrc-qcp'] elif d['codecguid']==( 0x8d7c2b75L, 0xa797, 0xed49, 0x985e, 0xd53c8cc75f84L ): d['mimetypes']=['audio/smv-qcp'] for i in d.itervalues(): if i is None: return None afi=AudioFileInfo(f,**d) return afi return None def fmt_QCP(afi): res=["QCP %s" % (afi.codecname,)] res.append("%d bps %d Hz %d bits/sample" % (afi.averagebps, afi.samplingrate, afi.samplesize)) codecguid=afi.codecguid if codecguid==( 0x5e7f6d41, 0xb115, 0x11d0, 0xba91, 0x00805fb4b97eL ): res.append("QCELP-13K V"+`afi.codecversion` + " (guid 1)") elif codecguid==( 0x5e7f6d42, 0xb115, 0x11d0, 0xba91, 0x00805fb4b97eL ): res.append("QCELP-13K V"+`afi.codecversion` + " (guid 2)") elif codecguid==( 0xe689d48dL, 0x9076, 0x46b5, 0x91ef, 0x736a5100ceb4L ): res.append("EVRC V"+`afi.codecversion`) elif codecguid==( 0x8d7c2b75L, 0xa797, 0xed49, 0x985e, 0xd53c8cc75f84L ): res.append("SMV V"+`afi.codecversion`) else: res.append("Codec Guid {%08X-%04X-%04X-%04X-%012X} V%d" % (afi.codecguid+(afi.codecversion,))) res.append("QCP File Version %d.%d" % (afi.qcpmajor, afi.qcpminor)) return "\n".join(res) def idaudio_PMD(f): "Identify a PMD/CMX file" # There are no specs for this file format. From 10 minutes of eyeballing, it seems like below. # Each section is a null terminated string followed by a byte saying how long the data is. # The length is probably some sort of variable length encoding such as the high bit indicating # the last byte and using 7 bits. # # offset contents -- comment # 0 cmid -- file type id # 4 \0\0 -- no idea # 6 7*? -- file lengths and pointers # 13 vers\0 -- version section # 18 \x04 -- length of version section # 19 "string" -- a version number that has some correlation with the pmd version number # # Various other sections that cover the contents that don't matter for identification try: if f.GetBytes(0, 4)!='cmid': return None d={ 'format': 'PMD' } hdr_len=f.GetMSBUint16(8) i=f.GetByte(10) d['content']=['Unknown', 'Ringer', 'Pictures&Audio'][i] d['numtracks']=f.GetByte(12) ofs=13 ofs_end=hdr_len+10 while ofs ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: update.py 4380 2007-08-29 00:17:07Z djpham $ # system modules from __future__ import with_statement import copy import urllib2 import xml.dom.minidom import webbrowser # site-packages import wx # BitPim modules import guihelper import version #------------------------------------------------------------------------------- class Download(object): def __init__(self, source, platform, flavor=None): self.__src=source self.__platform=platform self.__flavor=flavor def __get_src(self): return self.__src def __get_platform(self): return self.__platform def __get_flavor(self): return self.__flavor source=property(fget=__get_src) platform=property(fget=__get_platform) flavor=property(fget=__get_flavor) #------------------------------------------------------------------------------- class Version(object): def __init__(self, name, release_date, change_log): self.__name=name self.__release_date=release_date self.__change_log=change_log self.__downloads=[] def __get_name(self): return self.__name def __get_release_date(self): return self.__release_date def __get_change_log(self): return self.__change_log name=property(fget=__get_name) release_date=property(__get_release_date) change_log=property(__get_change_log) def add_download(self, download): self.__downloads.append(download) def get_download(self, platform, flavor=''): for n in self.__downloads: if n.platform==platform and n.flavor==flavor: return n return None #------------------------------------------------------------------------------- class Update(object): def __init__(self, frm, to, priority, alert): self.__frm=frm self.__to=to self.__priority=priority self.__alert=alert def __get_info(self): return (self.__frm, self.__to, self.__priority, self.__alert) info=property(fget=__get_info) #------------------------------------------------------------------------------- class BitPimUpdate(object): def __init__(self): self.__xml_version='Unknown' self.__updates={} self.__versions={} self.__latest=None def __get_xml_version(self): return self.__xml_version xml_version=property(fget=__get_xml_version) def __get_versions(self): return copy.deepcopy(self.__versions, {}) def __get_updates(self): return copy.deepcopy(self.__updates, {}) def __get_latest_version(self): return self.__latest versions=property(fget=__get_versions) updates=property(fget=__get_updates) latest_version=property(fget=__get_latest_version) def __get_node_value(self, node, name): try: return node.getElementsByTagName(name)[0].firstChild.data except IndexError: # the tag does not exist return None except: if __debug__: raise return None __default_url='http://www.bitpim.org/updates.xml' def get_update_info(self, url=__default_url): # get the contents of the update file dom=xml.dom.minidom.parseString(urllib2.urlopen(url).read()) # and extract the info bp_update=dom.getElementsByTagName('BitPimUpdate')[0] self.__xml_version=bp_update.getAttribute('version') self.__latest=bp_update.getAttribute('latest') updates=dom.getElementsByTagName('update') for n in updates: frm=n.getAttribute('from') self.__updates[frm]=Update(frm, self.__get_node_value(n, 'to'), self.__get_node_value(n, 'priority'), self.__get_node_value(n, 'alert')) versions=dom.getElementsByTagName('version') for n in versions: name=n.getAttribute('name') v=Version(name, self.__get_node_value(n, 'releasedate'), n.getElementsByTagName('changelog')[0].getAttribute('src')) downloads=n.getElementsByTagName('download') for d in downloads: v.add_download(Download(\ d.getAttribute('src'), d.getAttribute('platform'), d.getAttribute('flavor'))) self.__versions[name]=v def display_update_info(self, current_version, platform, flavor): # find and display the update info based on current version & platform # find if there's a next version u=self.__updates.get(current_version, None) if u is None: # there're no next version, tell the user & bail return 'There are no updates to the current version: '+current_version # got the update, look for the version (frm, next_version, priority, alert)=u.info v=self.__versions.get(next_version, None) if v is None: # No info on this version, tell the user & bail return 'No download info on version '+next_version+' available.' dl=v.get_download(platform, flavor) if dl is None or not len(dl.source): # the next version is not available for this plaform, bail return 'Load '+next_version+' is not available on platform '+platform+'/'+flavor # everything's there, display them to the users lines=[] lines.append('Current Version: '+current_version) s='Platform: '+platform if flavor is not None and len(flavor): s+='/'+flavor lines.append(s) lines.append('Available for Upgrade:') lines.append('\tVersion: '+next_version) lines.append('\tRelease Date: '+v.release_date) if priority is not None and len(priority): lines.append('\tPriority: '+priority) if alert is not None and len(alert): lines.append('\tWarning: '+alert) lines.append('updates.xml Version: '+self.xml_version) lines.append('Latest BitPim Version: '+self.latest_version) with guihelper.WXDialogWrapper(UpdateDialog(None, dl.source, v.change_log, lines), True): pass #------------------------------------------------------------------------------- class UpdateDialog(wx.Dialog): def __init__(self, parent, source_url, change_log_url, lines, _title='BitPim Update'): wx.Dialog.__init__(self, parent, -1, _title) self.__source_url=source_url self.__changelog_url=change_log_url vbs=wx.BoxSizer(wx.VERTICAL) for l in lines: vbs.Add(wx.StaticText(self, -1, l), 0, wx.EXPAND|wx.ALL, 5) vbs.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5) change_log_btn=wx.Button(self, wx.NewId(), 'View Change Log') hbs=wx.BoxSizer(wx.HORIZONTAL) hbs.Add(change_log_btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5) get_update_btn=wx.Button(self, wx.NewId(), 'Download Update') hbs.Add(get_update_btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5) hbs.Add(wx.Button(self, wx.ID_CANCEL, 'Quit'), 0, wx.ALIGN_CENTRE|wx.ALL, 5) vbs.Add(hbs, 0, wx.ALIGN_CENTRE|wx.ALL, 5) # event handlers wx.EVT_BUTTON(self, change_log_btn.GetId(), self.__OnChangelog) wx.EVT_BUTTON(self, get_update_btn.GetId(), self.__OnGetUpdate) # all done self.SetSizer(vbs) self.SetAutoLayout(True) vbs.Fit(self) def __OnChangelog(self, _): webbrowser.open(self.__changelog_url) def __OnGetUpdate(self, _): webbrowser.open(self.__source_url) #------------------------------------------------------------------------------- def check_update(update_url=None, current_version=None, platform=None, flavor=''): # get info from current version if current_version is None: current_version=version.version # set flavor to blank for now, should be flavor=version.flavor if platform is None: if guihelper.IsMSWindows(): platform='windows' elif guihelper.IsGtk(): platform='linux' elif guihelper.IsMac(): platform='mac' else: raise ValueError, 'Invalid platform' # todo: need to figure out how to do flavor, comment out for now ## flavor=version.vendor # retrieve and parse update info print 'Checking update for BitPim ', current_version, ' running on ', \ platform, '-', flavor with guihelper.WXDialogWrapper(wx.ProgressDialog('BitPim Update', 'Retrieving BitPim Update Information...', style=wx.PD_AUTO_HIDE)) as dlg: bp_update=BitPimUpdate() s=None try: if update_url is None: bp_update.get_update_info() else: bp_update.get_update_info(update_url) dlg.Update(100) except: s='Failed to get BitPim update info.' if s is None: s=bp_update.display_update_info(current_version, platform, flavor) latest_version=bp_update.latest_version else: latest_version='' if s is not None: # error messages being return, display them guihelper.MessageDialog(None, s, 'BitPim Update', wx.OK|wx.ICON_INFORMATION) return latest_version #------------------------------------------------------------------------------- if __name__ == '__main__': import sys if len(sys.argv)==2 and (sys.argv[1]=='help' or sys.argv[1]=='-help' \ or sys.argv[1]=='-h'): print sys.argv[0], ' ' sys.exit(0) app=wx.PySimpleApp() if len(sys.argv)==1: s=check_update() else: s=check_update(*sys.argv[1:]) print 'The latest version is: ', s bitpim-1.0.7+dfsg1/src/imp_cal_wizard.py0000644001616600161660000002262310664454771016317 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: imp_cal_wizard.py 4377 2007-08-27 04:58:33Z djpham $ """ Handle Import Calendar wizard """ # System from __future__ import with_statement # wx import wx import wx.wizard as wiz import wx.lib.scrolledpanel as scrolled from wx.lib.expando import ExpandoTextCtrl # BitPim import common_calendar import guihelper import importexport import setphone_wizard # modules constants IMP_OPTION_REPLACEALL=0 IMP_OPTION_ADD=1 IMP_OPTION_MERGE=2 #------------------------------------------------------------------------------- class ImportTypePage(setphone_wizard.MyPage): def __init__(self, parent): self._data=importexport.GetCalendarImports() super(ImportTypePage, self).__init__(parent, 'Select Calendar Import Type') self._populate() def GetMyControls(self): vbs=wx.BoxSizer(wx.VERTICAL) vbs.Add(wx.StaticText(self, -1, 'Import Calendar Type:'), 0, wx.EXPAND|wx.ALL, 5) self._type_lb=wx.ListBox(self, -1, style=wx.LB_SINGLE|wx.LB_HSCROLL|wx.LB_ALWAYS_SB) vbs.Add(self._type_lb, 0, wx.EXPAND|wx.ALL, 5) return vbs def _populate(self): # populate the listbox with data self._type_lb.Clear() for _l in self._data: self._type_lb.Append(_l['type'], _l) def ok(self): # ready to move to the next page? By default, yes return self._type_lb.GetSelection()!=wx.NOT_FOUND def get(self, data): # return data to the main wizard, data is a dict _idx=self._type_lb.GetSelection() _type=self._type_lb.GetString(_idx) _new_type=data.get('type', None)!=_type if _new_type or not data.has_key('data'): data['type']=_type _info=self._type_lb.GetClientData(_idx) data['data']=_info['data'] data['data_obj']=_info['data']() data['source_class']=_info['source'] data['source_obj']=_info['source']() if _new_type: # new type selected data['type']=_type if data.has_key('source_id'): del data['source_id'] def set(self, data): # pass current data to this page if data.get('type', None): self._type_lb.SetStringSelection(data['type']) #------------------------------------------------------------------------------- class ImportSourcePage(setphone_wizard.MyPage): def __init__(self, parent): self._source=None super(ImportSourcePage, self).__init__(parent, 'Select Import Source') def GetMyControls(self): vbs=wx.BoxSizer(wx.VERTICAL) vbs.Add(wx.StaticText(self, -1, 'Source of data:'), 0, wx.ALL|wx.EXPAND, 5) self._source_lbl=ExpandoTextCtrl(self, -1, '', style=wx.TE_READONLY) self._source_lbl.SetBackgroundColour(self.GetBackgroundColour()) vbs.Add(self._source_lbl, 0, wx.ALL|wx.EXPAND, 5) _btn=wx.Button(self, -1, 'Browse') wx.EVT_BUTTON(self, _btn.GetId(), self._OnBrowse) vbs.Add(_btn, 0, wx.ALL, 5) return vbs def setlabel(self): self._source_lbl.SetValue(self._source.name()) @guihelper.BusyWrapper def _OnBrowse(self, _=None): if not self._source: return self._source.browse(self) self.setlabel() def ok(self): return self._source and self._source.get() def get(self, data): data['source_obj']=self._source data['source_id']=self._source.id data['imported']=False def set(self, data): self._source=data['source_obj'] if self._source: if data.has_key('source_id'): self._source.id=data['source_id'] self.setlabel() def GetActiveDatabase(self): return self.GetParent().GetActiveDatabase() #------------------------------------------------------------------------------- class ImportDataAll(setphone_wizard.MyPage): def __init__(self, parent): self._type=None self._source=None super(ImportDataAll, self).__init__(parent, 'Import Data Preview') def GetMyControls(self): vbs=wx.BoxSizer(wx.VERTICAL) self._data_lb=wx.ListBox(self, -1, style=wx.LB_SINGLE|wx.LB_HSCROLL|wx.LB_ALWAYS_SB) vbs.Add(self._data_lb, 1, wx.EXPAND|wx.ALL, 5) _btn=wx.Button(self, -1, 'Data Filtering Parameters') vbs.Add(_btn, 0, wx.ALL, 5) wx.EVT_BUTTON(self, _btn.GetId(), self._OnFilter) return vbs def _populate_lb(self): self._data_lb.Clear() for _key, _entry in self._type.get_display_data().items(): self._data_lb.Append('%s - %s'%(common_calendar.bp_date_str(_entry, _entry['start']), _entry['description'])) @guihelper.BusyWrapper def _populate(self): self._data_lb.Clear() if not self._type or not self._source: # nothing to import return with guihelper.WXDialogWrapper(wx.ProgressDialog('Calendar Data Import', 'Importing data, please wait ...', parent=self)) as dlg: self._type.read(self._source.get(), dlg) self._populate_lb() def _OnFilter(self, _): cat_list=self._type.get_category_list() with guihelper.WXDialogWrapper(common_calendar.FilterDialog(self, -1, 'Filtering Parameters', cat_list), True) as (dlg, retcode): if retcode==wx.ID_OK: self._type.set_filter(dlg.get()) self._populate_lb() def set(self, data): self._type=data.get('data_obj', None) self._source=data.get('source_obj', None) if not data.get('imported', False): self._populate() def get(self, data): data['imported']=True #------------------------------------------------------------------------------- class ImportOptionPage(setphone_wizard.MyPage): _choices=('Replace All', 'Add', 'Merge') def __init__(self, parent): super(ImportOptionPage, self).__init__(parent, 'Import Options') def GetMyControls(self): vbs=wx.BoxSizer(wx.VERTICAL) self._option_rb=wx.RadioBox(self, -1, 'Import Options', choices=self._choices, style=wx.RA_SPECIFY_ROWS) vbs.Add(self._option_rb, 0, wx.EXPAND|wx.ALL, 5) return vbs def set(self, data): self._option_rb.SetSelection(data.get('option', 0)) def get(self, data): data['option']=self._option_rb.GetSelection() #------------------------------------------------------------------------------- class ImportCalendarWizard(wiz.Wizard): ID_ADD=wx.NewId() ID_MERGE=wx.NewId() def __init__(self, parent, id=-1, title='Calendar Import Wizard'): super(ImportCalendarWizard, self).__init__(parent, id, title) self._data={} _import_type_page=ImportTypePage(self) _import_source_page=ImportSourcePage(self) _import_data_all=ImportDataAll(self) _import_option=ImportOptionPage(self) wiz.WizardPageSimple_Chain(_import_type_page, _import_source_page) wiz.WizardPageSimple_Chain(_import_source_page, _import_data_all) wiz.WizardPageSimple_Chain(_import_data_all, _import_option) self.first_page=_import_type_page self.GetPageAreaSizer().Add(self.first_page, 1, wx.EXPAND|wx.ALL, 5) wiz.EVT_WIZARD_PAGE_CHANGING(self, self.GetId(), self.OnPageChanging) wiz.EVT_WIZARD_PAGE_CHANGED(self, self.GetId(), self.OnPageChanged) def RunWizard(self, firstPage=None): return super(ImportCalendarWizard, self).RunWizard(firstPage or self.first_page) def OnPageChanging(self, evt): pg=evt.GetPage() if not evt.GetDirection() or pg.ok(): pg.get(self._data) else: evt.Veto() def OnPageChanged(self, evt): evt.GetPage().set(self._data) def get(self): if self._data.get('data_obj', None): return self._data['data_obj'].get() return {} def GetActiveDatabase(self): return self.GetParent().GetActiveDatabase() def get_categories(self): if self._data.get('data_obj', None): return self._data['data_obj'].get_category_list() return [] def ShowModal(self): global IMP_OPTION_REPLACEALL # run the wizard and return a code if self.RunWizard(): return [wx.ID_OK, self.ID_ADD, self.ID_MERGE][self._data.get('option', IMP_OPTION_REPLACEALL)] return wx.ID_CANCEL #------------------------------------------------------------------------------- # Testing if __name__=="__main__": app=wx.PySimpleApp() f=wx.Frame(None, title='imp_cal_wizard') w=ImportCalendarWizard(f) print w.RunWizard() print w.get() w.Destroy() bitpim-1.0.7+dfsg1/src/conversions.py0000644001616600161660000004520510665135647015703 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Stephen Wood ### Copyright (C) 2003-2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: conversions.py 4381 2007-08-29 00:19:51Z djpham $ "Routines to do various file format conversions" from __future__ import with_statement import contextlib import os import tempfile import struct import subprocess import sys import wx import common class ConversionFailed(Exception): pass helperdir=os.path.join(common.get_main_dir(), "helpers") osext={'win32': '.exe', 'darwin': '.mbin', 'linux2': '.lbin'} \ [sys.platform] # This shortname crap is needed because Windows programs (including ffmpeg) # don't correctly parse command line arguments. if sys.platform=='win32': import win32api def shortfilename(x): # the name may already be short (eg from tempfile which always returns short names) # and may not exist, so we are careful to only call GetShortPathName if necessary if " " in x: return win32api.GetShortPathName(x) return x else: def shortfilename(x): return x def gethelperbinary(basename): "Returns the full pathname to the specified helper binary" if basename=="pvconv": return getpvconvbinary() f=os.path.join(helperdir, basename)+osext try: f=shortfilename(f) except: # this craps out if the helper does not exist! raise common.HelperBinaryNotFound(basename, basename+osext, [helperdir]) if not os.path.isfile(f): raise common.HelperBinaryNotFound(basename, basename+osext, [helperdir]) return f _foundpvconv=None def getpvconvbinary(): "PVConv can't be distributed with BitPim so the user has to install it and we have to find it" global _foundpvconv # check each time as user could delete or more binary if _foundpvconv is not None and os.path.isfile(_foundpvconv): return _foundpvconv _foundpvconv=None lookin=[] if sys.platform=='win32': binary="pvconv.exe" lookin.append("c:\\bin") from win32com.shell import shell, shellcon path=shell.SHGetFolderPath(0, shellcon.CSIDL_PROGRAM_FILES, None, 0) if path: lookin.append(os.path.join(path, "Qualcomm")) lookin.append(os.path.join(path, "pvconv")) path=shell.SHGetFolderPath(0, shellcon.CSIDL_WINDOWS, None, 0) if path: lookin.append(path) elif sys.platform=='linux2': binary="pvconv" lookin.append(_expand("~/bin")) lookin.append(_expand("~")) lookin.append(_expand("/usr/local/bin")) elif sys.platform=='darwin': binary="pvconv" lookin.append(_expand("~/bin")) lookin.append(_expand("~")) lookin.append(_expand("/usr/local/bin")) lookin.append(_expand("/usr/bin")) else: raise Exception("Unknown platform "+sys.platform) for dir in lookin: f=os.path.join(dir, binary) if os.path.exists(f): _foundpvconv=f return _foundpvconv raise common.HelperBinaryNotFound("pvconv", binary, lookin) def _expand(x): return os.path.expandvars(os.path.expanduser(x)) def run(*args): """Runs the specified command (args[0]) with supplied parameters. Note that your path is not searched for the command.""" print args p=subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) _res=p.communicate() if p.returncode: # an error occurred, log it print _res[1] raise common.CommandExecutionFailed(p.returncode, args, _res[1]) def convertto8bitpng(pngdata, maxsize): "Convert a PNG file to 8bit color map" # Return files small enough, or not PNG as is size=len(pngdata) if size<=maxsize or pngdata[1:4]!='PNG': return pngdata p=sys.path[0] if os.path.isfile(p): p=os.path.dirname(p) helpersdirectory=os.path.abspath(os.path.join(p, 'helpers')) print "Helper Directory: "+helpersdirectory if sys.platform=='win32': osext=".exe" if sys.platform=='darwin': osext=".mbin" if sys.platform=='linux2': osext=".lbin" pngtopnmbin=gethelperbinary('pngtopnm') ppmquantbin=gethelperbinary('ppmquant') pnmtopngbin=gethelperbinary('pnmtopng') print "pngtopnm: "+pngtopnmbin print "ppmquant: "+ppmquantbin print "pnmtopng: "+pnmtopngbin # Write original image to a temp file png=common.gettempfilename("png") open(png, "wb").write(pngdata) # Convert this image to pnm pnm=common.gettempfilename("pnm") s='"'+pngtopnmbin+'"' + ' < '+png+' > '+pnm os.system(s) #self.log(s) os.remove(png) # Binary search to find largest # of colors with a file size still # less than maxsize ncolormax=257 ncolormin=1 ncolortry=256 ncolor=ncolortry pnmq=common.gettempfilename("pnm") while size>maxsize or ncolormax-ncolor>1: ncolor=ncolortry s='"'+ppmquantbin+'"'+' '+`ncolortry`+' '+pnm+ ' > '+pnmq #self.log(s) os.system(s) s ='"'+pnmtopngbin+'"' + ' < ' + pnmq + ' > '+png #self.log(s) os.system(s) os.remove(pnmq) pngquantdata=open(png,"rb").read() os.remove(png) size=len(pngquantdata) print `ncolor`+' '+`size` if size>maxsize: ncolormax=ncolor ncolortry=(ncolor+ncolormin)/2 else: ncolormin=ncolor ncolortry=(ncolor+ncolormax)/2 os.remove(pnm) return pngquantdata def convertto8bitpng_joe(pngdata): "Convert a PNG file to 8bit color map" "Separate routine for now so not to screw up existing one, may merge later" if pngdata[1:4]!='PNG': return pngdata # get the path to helper pngtopnmbin=gethelperbinary('pngtopnm') ppmquantbin=gethelperbinary('ppmquant') pnmtopngbin=gethelperbinary('pnmtopng') print "pngtopnm: "+pngtopnmbin print "ppmquant: "+ppmquantbin print "pnmtopng: "+pnmtopngbin # Write original image to a temp file png=common.gettempfilename("png") open(png, "wb").write(pngdata) num_of_colors=wx.Image(png).ComputeHistogram(wx.ImageHistogram()) print 'number of colors:', num_of_colors if num_of_colors>256: # no optimization possible, just return os.remove(png) return pngdata # else optimize it # Convert this image to pnm pnm=common.gettempfilename("pnm") s='"'+pngtopnmbin+'"' + ' < '+png+' > '+pnm os.system(s) os.remove(png) # quantize & convert pnmq=common.gettempfilename("pnm") s='"'+ppmquantbin+'"'+' '+`num_of_colors`+' '+pnm+ ' > '+pnmq os.system(s) s ='"'+pnmtopngbin+'"' + ' < ' + pnmq + ' > '+png os.system(s) os.remove(pnmq) pngquantdata=open(png, 'rb').read() os.remove(png) os.remove(pnm) print 'old size: ',len(pngdata),', new size: ',len(pngquantdata) return pngquantdata def converttomp3(inputfilename, bitrate, samplerate, channels): """Reads inputfilename and returns data for an mp3 conversion @param bitrate: bitrate to use in khz (ie 16 is 16000 bits per second) @param samplerate: audio sampling rate in Hertz @param channels: 1 is mono, 2 is stereo """ ffmpeg=gethelperbinary("ffmpeg") with common.usetempfile('mp3') as mp3file: try: run(ffmpeg, "-i", shortfilename(inputfilename), "-hq", "-ab", `bitrate`, "-ar", `samplerate`, "-ac", `channels`, shortfilename(mp3file)) except common.CommandExecutionFailed, e: # we get this exception on bad parameters, or any other # issue so we assume bad parameters for the moment. raise ConversionFailed, ' '.join(e.args)+'\n'+e.logstr return file(mp3file, "rb").read() def converttowav(mp3filename, wavfilename, samplerate=None, channels=None, start=None, duration=None): ffmpeg=gethelperbinary("ffmpeg") cmd=(ffmpeg, "-i", shortfilename(mp3filename)) if samplerate is not None: cmd+=('-ar', str(samplerate)) if channels is not None: cmd+=('-ac', str(channels)) if start is not None: cmd+=('-ss', str(start)) if duration is not None: cmd+=('-t', str(duration)) cmd+=(shortfilename(wavfilename),) # ffmpeg queries about overwrite - grrr try: os.remove(cmd[-1]) except OSError: pass run(*cmd) _qcp_optimization_params=('ffr', 'vfr', 'fhr', 'vhr') def convertwavtoqcp(wavfile, qcpfile, optimization=None): pvconv=shortfilename(gethelperbinary('pvconv')) w_name=shortfilename(wavfile) q_name=common.stripext(w_name)+'.qcp' try: os.remove(q_name) except: pass # Have not figured out how to specify output file for pvconv if optimization is None: run(pvconv, w_name) else: run(pvconv, '-r', _qcp_optimization_params[optimization], w_name) # mv output file to qcpfile try: os.remove(qcpfile) except: pass os.rename(q_name, qcpfile) def convertqcptowav(qcpfile, wavfile): pvconv=shortfilename(gethelperbinary('pvconv')) q_name=shortfilename(qcpfile) w_name=common.stripext(q_name)+'.wav' try: os.remove(w_name) except: pass run(pvconv, q_name) try: os.remove(wavfile) except: pass os.rename(w_name, wavfile) def adjustwavfilevolume(wavfilename, gain): """ Ajdust the volume of a wav file. """ with file(wavfilename, 'rb') as f: # read in the headers headers=f.read(20) subchunk1size=common.LSBUint32(headers[16:20]) headers+=f.read(subchunk1size) headers+=f.read(8) # 4 byte ID and 4 byte length subchunk2size=common.LSBUint32(headers[-4:]) bitspersample=common.LSBUint16(headers[34:36]) if bitspersample!=16: print 'Volume adjustment only works with 16-bit wav file',bitspersample return sample_num=subchunk2size/2 # always 16-bit per channel per sample temp_name=common.gettempfilename("wav") with file(temp_name, 'wb') as f_temp: f_temp.write(headers) delta=pow(10.0, (gain/10.0)) for i in range(sample_num): d=int(struct.unpack('32767: d=32767 elif d<-32768: d=-32768 f_temp.write(struct.pack('> 8 green=(bitdata & 0x07e0) >> 3 blue=(bitdata & 0x001f) << 3 if (red & 0x8) != 0: red=red | 0x7 if (green & 0x4) != 0: green=green | 0x3 if (blue & 0x8) != 0: blue=blue | 0x7 img+=chr(blue) img+=chr(green) img+=chr(red) return img def convertbmptolgbit(bmp_data): """Takes a BMP image file and returns BIT image file (LG proprietary) @param bit_data: 8BPP or 24BPP BMP image file data @return: 16BPP LGBIT image file data """ # This function only exists for the LG proprietary images (wallpaper, etc.) # on the LG-VX3200. if bmp_data[0:2]!='BM': return None width=common.LSBUint32(bmp_data[18:22]) height=common.LSBUint32(bmp_data[22:26]) offset=common.LSBUint32(bmp_data[10:14]) bpp=common.LSBUint16(bmp_data[28:30]) img=common.LSBstr16(width) img+=common.LSBstr16(height) # Now on to the char data if bpp==8: # 8BPP (paletted) BMP data palette=bmp_data[54:54+256*4] for h in range(height): for w in range(width): bitind=(height-h-1)*width+w+offset palind=ord(bmp_data[bitind:bitind+1])*4 blue=ord(palette[palind:palind+1]) green=ord(palette[palind+1:palind+2]) red=ord(palette[palind+2:palind+3]) bitval=((red & 0xf8) << 8) | ((green & 0xfc) << 3) | ((blue & 0xf8) >> 3) img+=common.LSBstr16(bitval) elif bpp==24: # 24BPP (non-paletted) BMP data for h in range(height): for w in range(width): bitind=(height-h-1)*width*3+(w*3)+offset blue=ord(bmp_data[bitind:bitind+1]) green=ord(bmp_data[bitind+1:bitind+2]) red=ord(bmp_data[bitind+2:bitind+3]) bitval=((red & 0xf8) << 8) | ((green & 0xfc) << 3) | ((blue & 0xf8) >> 3) img+=common.LSBstr16(bitval) else: return None return img def helperavailable(helper_name): try: f=gethelperbinary(helper_name) return True except common.HelperBinaryNotFound: return False except: if __debug__: raise return False bitpim-1.0.7+dfsg1/src/wpl_file.py0000644001616600161660000000254610475455026015130 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: wpl_file.py 3542 2006-08-31 03:40:06Z djpham $ """Handle MS Windows Media Player Play List (wpl) files""" # System modules import xml.dom.minidom as dom class WPL(object): def __init__(self, data=None, filename=None): self.title='' self.songs=[] try: if data: self._decode(data) elif filename: self._decode(file(filename, 'rt').read()) except (IndexError, IOError): pass def _node_value(self, node, name): try: return node.getElementsByTagName(name)[0].firstChild.data except IndexError: # the tag does not exist return None except: if __debug__: raise return None def _decode(self, data): # decode the xml stream _wpl=dom.parseString(data) _head=_wpl.getElementsByTagName('head')[0] self.title=self._node_value(_head, 'title') _seq=_wpl.getElementsByTagName('seq')[0] _media=_seq.getElementsByTagName('media') for _item in _media: self.songs.append(_item.getAttribute('src')) bitpim-1.0.7+dfsg1/src/auto_sync.py0000644001616600161660000004265110472244434015330 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Simon Capper ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### """ Auto synchronization of calender This module provides functionality to automatically sync the calender on your PC (outlook etc.) with your phone. It will do so at a regular interval if the phone is connected and BitPim is running This feature works with all BitPim calender types and phones that support the writing of calenders """ # standard modules import copy import sha import time import re # wx modules import wx # BitPim modules import database import guiwidgets import common_calendar import guiwidgets import gui _data_key='auto_sync_settings' _filter_keys=['start_offset', 'end_offset', 'no_alarm', 'rpt_events', "alarm_value", 'ringtone', 'vibrate', 'categories', 'alarm_override'] def _getsettings(mw, profile): settings=AutoSyncSettingsEntry() dict=mw.GetActiveDatabase().getmajordictvalues(_data_key, autosyncsettingsobjectfactory) if profile in dict: settings.set_db_dict(dict[profile]) return settings def UpdateOnConnect(mw, profile="Default Autosync"): settings=_getsettings(mw, profile) return settings.sync_on_connect class SyncSchedule(object): def __init__(self, log=None): # get standard commport parameters self.__log=log self.__data={} def log(self, log_str): if self.__log is None: print log_str else: self.__log.log(log_str) def logdata(self, log_str, log_data): if self.__log is None: print log_str,log_data else: self.__log.logdata(log_str, log_data) def importcalenderdata(self): res=0 for entry in self.mw.calenders: if entry[0]==self.settings.caltype: filter={} for setting in _filter_keys: if self.settings._data.has_key(setting) and self.settings._data[setting]!=None: # need to convert start and end from scalable values if setting=='start_offset': tm=time.gmtime(time.time()-(self.settings._data[setting]*24*60*60)) date=(tm.tm_year, tm.tm_mon, tm.tm_mday) filter['start']=date elif setting=='end_offset': tm=time.gmtime(time.time()+(self.settings._data[setting]*24*60*60)) date=(tm.tm_year, tm.tm_mon, tm.tm_mday) filter['end']=date elif setting=="categories": # convert categories into list filter[setting]=self.settings._data[setting].split("||") else: filter[setting]=self.settings._data[setting] else: if setting=='start_offset': filter['start']=None if setting=='end_offset': filter['end']=None res=entry[2](self.mw.tree.GetActivePhone(), self.settings.calender_id, filter) if res==1: # imported calender OK!!! self.log("Auto Sync: Imported calender OK") if not res: self.log("Auto Sync: Failed to import calender") return res def sendcalendertophone(self): res=1 data={} todo=[] data['calendar_version']=self.mw.phoneprofile.BP_Calendar_Version self.mw.GetActiveCalendarWidget().getdata(data) todo.append( (self.mw.wt.writecalendar, "Calendar", False) ) todo.append((self.mw.wt.rebootcheck, "Phone Reboot")) self.mw.MakeCall(gui.Request(self.mw.wt.getfundamentals), gui.Callback(self.OnDataSendPhoneGotFundamentals, data, todo)) return res def OnDataSendPhoneGotFundamentals(self, data, todo, exception, results): if exception!=None: if not self.silent: self.mw.HandleException(exception) self.log("Auto Sync: Failed, Exception getting phone fundementals") self.mw.OnBusyEnd() return data.update(results) # Now scribble to phone self.log("Auto Sync: Sending results to phone") self.mw.MakeCall(gui.Request(self.mw.wt.senddata, data, todo), gui.Callback(self.OnDataSendCalenderResults)) def OnDataSendCalenderResults(self, exception, results): if exception!=None: if not self.silent: self.mw.HandleException(exception) self.log("Auto Sync: Failed, Exception writing calender to phone") self.mw.OnBusyEnd() return if self.silent==0: wx.MessageBox('Phone Synchronized OK', 'Synchronize Complete', wx.OK) self.log("Auto Sync: Synchronize Completed OK") self.mw.OnBusyEnd() def sync(self, mw, silent, profile="Default Autosync"): self.silent=silent # start the autosync process # import the calender, find the entry point for the import function self.mw=mw if mw.config.ReadInt("SafeMode", False): self.log("Auto Sync: Disabled, BitPim in safe mode") return 0 if wx.IsBusy(): self.log("Auto Sync: Failed, BitPim busy") return 0 self.log("Auto Sync: Starting (silent mode=%d)..." % (silent)) self.mw.OnBusyStart() self.mw.GetStatusBar().progressminor(0, 100, 'Auto Calendar Import in progress ...') # retrieve the configuration self.settings=_getsettings(mw, profile) # update BitPims calender res=self.importcalenderdata() if res==1: # send updated calender to the phone res=self.sendcalendertophone() else: self.mw.OnBusyEnd() if silent==0: wx.MessageBox('Unable to Auto-Import Calendar Data', 'Auto Calendar Import failed', wx.OK) self.log("Auto Sync: Failed, Unable to synchronize phone schedule") return res #------------------------------------------------------------------------------- class AutoSyncSettingsobject(database.basedataobject): _knownproperties=['caltype', 'calender_id', 'sync_on_connect', 'sync_frequency', \ 'start_offset', 'end_offset', 'no_alarm', 'rpt_events', 'categories', \ 'ringtone', 'vibrate', 'alarm_override', 'alarm_value'] _knownlistproperties=database.basedataobject._knownlistproperties.copy() def __init__(self, data=None): if data is None or not isinstance(data, AutoSyncSettingsEntry): return; self.update(data.get_db_dict()) autosyncsettingsobjectfactory=database.dataobjectfactory(AutoSyncSettingsobject) #------------------------------------------------------------------------------- class AutoSyncSettingsEntry(object): _caltype_key='caltype' _calender_id_key='calender_id' _sync_on_connect_key='sync_on_connect' _sync_frequency_key='sync_frequency' #_start_offset_key='start_offset' #_end_offset_key='end_offset' #_no_alarm_key='no_alarm' #_categories_key='categories' #_rpt_event_key='rpt_event' #_vibrate_key='vibrate' def __init__(self): self._data={ 'serials': [] } # we only expect one record, so the ID is fixed def __eq__(self, rhs): return self.caltype==rhs.caltype and self.calender_id==rhs.calender_id and\ self.sync_frequency==rhs.sync_frequency and self.sync_on_connect==rhs.sync_on_connect def __ne__(self, rhs): return (not __eq__(rhs)) def get(self): return copy.deepcopy(self._data, {}) def set(self, d): self._data={} self._data.update(d) def get_db_dict(self): return self.get() def set_db_dict(self, d): self.set(d) def _get_id(self): s=self._data.get('serials', []) for n in s: if n.get('sourcetype', None)=='bitpim': return n.get('id', None) return None def _set_id(self, id): s=self._data.get('serials', []) for n in s: if n.get('sourcetype', None)=='bitpim': n['id']=id return self._data['serials'].append({'sourcetype': 'bitpim', 'id': id } ) id=property(fget=_get_id, fset=_set_id) def _set_or_del(self, key, v, v_list=[]): if v is None or v in v_list: if self._data.has_key(key): del self._data[key] else: self._data[key]=v def _get_caltype(self): return self._data.get(self._caltype_key, 'None') def _set_caltype(self, v): self._set_or_del(self._caltype_key, v, ['']) caltype=property(fget=_get_caltype, fset=_set_caltype) def _get_calender_id(self): return self._data.get(self._calender_id_key, '') def _set_calender_id(self, v): self._set_or_del(self._calender_id_key, v, ['']) calender_id=property(fget=_get_calender_id, fset=_set_calender_id) def _get_sync_on_connect(self): return self._data.get(self._sync_on_connect_key, False) def _set_sync_on_connect(self, v): self._set_or_del(self._sync_on_connect_key, v, ['']) sync_on_connect=property(fget=_get_sync_on_connect, fset=_set_sync_on_connect) def _get_sync_frequency(self): return self._data.get(self._sync_frequency_key, 0) def _set_sync_frequency(self, v): self._set_or_del(self._sync_frequency_key, v, ['']) sync_frequency=property(fget=_get_sync_frequency, fset=_set_sync_frequency) ### ### The autosync settings dialog ### class AutoSyncSettingsDialog(wx.Dialog): ID_CALSETTINGS=wx.NewId() def __init__(self, mainwindow, frame, title="Auto Calendar Import Settings", profile="Default Autosync", id=-1): t=title+" - "+profile wx.Dialog.__init__(self, frame, id, t, style=wx.CAPTION|wx.SYSTEM_MENU|wx.DEFAULT_DIALOG_STYLE) self.mw=mainwindow self.profile=profile gs=wx.GridBagSizer(10, 10) gs.AddGrowableCol(1) # calender type gs.Add( wx.StaticText(self, -1, "Calender Type"), pos=(0,0), flag=wx.ALIGN_CENTER_VERTICAL) # get a list of the possible calender types supported calendertype=('None',) # build a list of calender types for the user to select from for entry in self.mw.calenders: calendertype+=(entry[0], ) self.caltype=wx.ComboBox(self, -1, calendertype[0], style=wx.CB_DROPDOWN|wx.CB_READONLY,choices=calendertype) gs.Add( self.caltype, pos=(0,1), flag=wx.ALIGN_CENTER_VERTICAL) gs.Add( wx.Button(self, self.ID_CALSETTINGS, "Calender Settings..."), pos=(0,2), flag=wx.ALIGN_CENTER_VERTICAL) # on connect gs.Add( wx.StaticText(self, -1, "Update when phone re-connected"), pos=(1,0), flag=wx.ALIGN_CENTER_VERTICAL) self.sync_on_connect=wx.CheckBox(self, wx.NewId(), "") gs.Add( self.sync_on_connect, pos=(1,1), flag=wx.ALIGN_CENTER_VERTICAL) # frequency gs.Add( wx.StaticText(self, -1, "Update Frequency (mins) 0=never"), pos=(2,0), flag=wx.ALIGN_CENTER_VERTICAL) self.sync_frequency=wx.lib.intctrl.IntCtrl(self, -1, value=0, min=0, max=1440) gs.Add( self.sync_frequency, pos=(2,1), flag=wx.ALIGN_CENTER_VERTICAL) # crud at the bottom bs=wx.BoxSizer(wx.VERTICAL) bs.Add(gs, 0, wx.EXPAND|wx.ALL, 10) bs.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 7) but=self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.HELP) bs.Add(but, 0, wx.CENTER|wx.ALL, 10) wx.EVT_BUTTON(self, wx.ID_HELP, self.OnHelp) wx.EVT_BUTTON(self, wx.ID_CANCEL, self.OnCancel) wx.EVT_BUTTON(self, wx.ID_OK, self.OnOK) wx.EVT_BUTTON(self, self.ID_CALSETTINGS, self.OnConfigCalender) wx.EVT_COMBOBOX(self, self.caltype.GetId(), self.OnCaltypeChange) self.settings=AutoSyncSettingsEntry() self.SetSizer(bs) self.SetAutoLayout(True) bs.Fit(self) # read initial values from database self.getfromfs() self.auto_sync_timer_id = wx.NewId() self.auto_sync_timer = wx.Timer(self, self.auto_sync_timer_id) # start the timer self.SetAutoSyncTimer() # Retrieve saved settings... (we only care about position) guiwidgets.set_size("AutoSyncSettingsDialog", self, screenpct=-1, aspect=3.5) wx.EVT_CLOSE(self, self.OnClose) def OnCaltypeChange(self, _): #see if the value has changed, if so automatically fire up the configuration for the calender if self.settings.caltype!=self.caltype.GetValue(): self.OnConfigCalender() return def OnConfigCalender(self, _=None): old_folder=self.settings.calender_id for entry in self.mw.calenders: if entry[0]==self.caltype.GetValue(): # if the calender type is changing blank out the folder name if self.settings.caltype!=self.caltype.GetValue(): self.settings.calender_id='' filter={} for setting in _filter_keys: if self.settings._data.has_key(setting) and self.settings._data[setting]!=None: if setting=="categories": # convert categories into list filter[setting]=self.settings._data[setting].split("||") else: filter[setting]=self.settings._data[setting] res, temp=entry[1](self.mw, self.settings.calender_id, filter) if res==wx.ID_OK and res != None: # temp is a tuple of the calender_id and the filter settings self.settings.calender_id=temp[0] for setting in _filter_keys: if(temp[1].has_key(setting) and temp[1][setting]!=None): if setting=="categories": # convert categories into storable type cat_str="" for cat in temp[1][setting]: #use a || to separate individual categories if len(cat_str): cat_str=cat_str+"||"+cat else: cat_str=cat self.settings._data[setting]=cat_str else: self.settings._data[setting]=temp[1][setting] else: if self.settings._data.has_key(setting): del self.settings._data[setting] self.settings.caltype=self.caltype.GetValue() else: # cancel pressed #revert back to previous value self.caltype.SetValue(self.settings.caltype) self.settings.calender_id=old_folder return return def OnCancel(self, _): self.saveSize() self.EndModal(wx.ID_CANCEL) return def OnOK(self, _): self.saveSize() self.EndModal(wx.ID_OK) return def OnHelp(self, _): #wx.GetApp().displayhelpid(helpids.ID_AUTOSYNC_DIALOG) return def OnClose(self, evt): self.saveSize() # Don't destroy the dialong, just put it away... self.EndModal(wx.ID_CANCEL) return def _save_to_db(self): db_rr={} self.settings.caltype=self.caltype.GetValue() self.settings.sync_on_connect=self.sync_on_connect.GetValue() self.settings.sync_frequency=self.sync_frequency.GetValue() self.settings.id=self.profile db_rr[self.settings.id]=AutoSyncSettingsobject(self.settings) database.ensurerecordtype(db_rr, autosyncsettingsobjectfactory) self.mw.tree.GetActivePhone().GetDatabase().savemajordict(_data_key, db_rr) def getfromfs(self): self.settings=_getsettings(self.mw, self.profile) self.caltype.SetValue(self.settings.caltype) self.sync_on_connect.SetValue(int(self.settings.sync_on_connect)) self.sync_frequency.SetValue(int(self.settings.sync_frequency)) return def IsConfigured(self): return self.settings.caltype!='None' def updatevariables(self): self.mw.auto_save_dict=self.settings def ShowModal(self): self.getfromfs() ec=wx.Dialog.ShowModal(self) if ec==wx.ID_OK: self._save_to_db() self.updatevariables() self.SetAutoSyncTimer() return ec def saveSize(self): guiwidgets.save_size("AutoSyncSettingsDialog", self.GetRect()) def SetAutoSyncTimer(self): # stop the previous timer (if any) self.auto_sync_timer.Stop() oneShot = True timeout=self.settings.sync_frequency*60000 # convert msecs if timeout: self.auto_sync_timer.Start(timeout, oneShot) self.Bind(wx.EVT_TIMER, self.OnTimer, self.auto_sync_timer) def OnTimer(self, event): self.mw.log("Auto Sync: Timed update") SyncSchedule(self.mw).sync(self.mw, silent=1) self.SetAutoSyncTimer() bitpim-1.0.7+dfsg1/src/hexeditor.py0000644001616600161660000014013510664454771015325 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: hexeditor.py 4377 2007-08-27 04:58:33Z djpham $ """A hex editor widget""" # system modules from __future__ import with_statement import string import struct # wx modules import wx from wx.lib import masked from wx.lib import scrolledpanel as scrolled # bitpim modules import common import guihelper #------------------------------------------------------------------------------- class DataStruct(object): def __init__(self, _name): self.name=_name self.fields=[] def set(self, dict): self.name=dict.keys()[0] self.fields=[] for f in dict[self.name]: if f['type']==DataItem.numeric_type: item=NumericDataItem(f['name']) elif f['type']==DataItem.string_type: item=StringDataItem(f['name']) else: item=DataItem(f['name'], DataItem.struct_type) item.set(f) self.fields.append(item) def get(self): l=[] for f in self.fields: l.append(f.get()) return { self.name: l } def encode(self, data, buffer_offset=0): # encode data to each & every fields and return the results l=[] start=0 data_len=len(data) for f in self.fields: s=f.encode(data, start) start=f.start+f.len l.append( { '[0x%04X=%d]%s'%(f.start+buffer_offset, f.start+buffer_offset, f.name): `s` }) if start>=data_len: break return l #------------------------------------------------------------------------------- class DataItem(object): """Represent a data item/component with in a record, which is a list of these things. """ offset_from_start='From Start' offset_from_prev='From Last Field' string_type='string' numeric_type='numeric' struct_type='struct' def __init__(self, _name, _type=numeric_type): self.name=_name self.offset_type=self.offset_from_start self.offset=0 self.size=1 self.start=self.len=None # start & length/size of actual data encoded # numeric fields self.unsigned=True self.LE=True # string fields self.fixed=True self.null_terminated=False self.type=_type def _get_type(self): return self._type def _set_type(self, _type): if _type not in (self.numeric_type, self.string_type, self.struct_type): raise TypeError self._type=_type if _type==self.numeric_type: self.__class__=NumericDataItem elif _type==self.string_type: self.__class__=StringDataItem type=property(fget=_get_type, fset=_set_type) def get(self): return { 'name': self.name, 'offset_type': self.offset_type, 'offset': self.offset, 'type': self.type } def set(self, d): self.name=d.get('name', '') self.offset_type=d.get('offset_type', None) self.offset=d.get('offset', None) self.type=d.get('type', None) def encode(self, s, start=None): """Encode the value of this item based on the string s""" raise NotImplementedError #------------------------------------------------------------------------------- class NumericDataItem(DataItem): _fmts={ # struct pack/unpack formats True: { # unsigned True: { # little endian 1: 'B', 2: 'H', 4: '>I' } }, # size False: { # signed True: { # little endian 1: 'b', 2: 'h', 4: '>i' } } } # size def __init__(self, name): super(NumericDataItem, self).__init__(name, self.numeric_type) def get(self): r=super(NumericDataItem, self).get() r.update( { 'unsigned': self.unsigned, 'little_endian': self.LE, 'size': self.size }) return r def set(self, d): super(NumericDataItem, self).set(d) if d.get('type', None)!=self.numeric_type: raise TypeError self.unsigned=d.get('unsigned', True) self.LE=d.get('little_endian', True) self.size=d.get('size', 1) def encode(self, s, start=None): fmt=self._fmts[self.unsigned][self.LE][self.size] self.len=struct.calcsize(fmt) if self.offset_type==self.offset_from_start: self.start=self.offset else: if start is None: raise ValueError self.start=start+self.offset return struct.unpack(fmt, s[self.start:self.start+self.len])[0] #------------------------------------------------------------------------------- class StringDataItem(DataItem): def __init__(self, name): super(StringDataItem, self).__init__(name, self.string_type) def get(self): r=super(StringDataItem, self).get() r.update({ 'fixed': self.fixed, 'size': self.size, 'null_terminated': self.null_terminated }) return r def set(self, d): super(StringDataItem, self).set(d) if d.get('type', None)!=self.string_type: raise TypeError self.fixed=d.get('fixed', True) self.size=d.get('size', 0) self.null_terminated=d.get('null_terminated', False) def encode(self, s, start=None): if self.offset_type==self.offset_from_start: self.start=self.offset else: if start is None: raise ValueError self.start=start+self.offset if self.fixed: # fixed length string if self.size==-1: # take all available space self.len=len(s)-self.offset s0=s[self.start:] else: # fixed size s0=s[self.start:self.start+self.size] self.len=self.size else: # pascal style variable string self.len=ord(s[self.start]) s0=s[self.start+1:self.start+1+self.len] if self.null_terminated: i=s0.find('\x00') if i==-1: return s0 else: self.len=i return s0[:i] else: return s0 #------------------------------------------------------------------------------- class GeneralInfoSizer(wx.FlexGridSizer): def __init__(self, parent): super(GeneralInfoSizer, self).__init__(-1, 2, 5, 5) self.AddGrowableCol(1) self.Add(wx.StaticText(parent, -1, 'Struct Name:'), 0, wx.EXPAND|wx.ALL, 5) self._struct_name=wx.TextCtrl(parent, -1, '') self.Add(self._struct_name, 0, wx.EXPAND|wx.ALL, 5) self.Add(wx.StaticText(parent, -1, 'Field Name:'), 0, wx.EXPAND|wx.ALL, 5) self._name=wx.TextCtrl(parent, -1, '') self.Add(self._name, 0, wx.EXPAND|wx.ALL, 5) self.Add(wx.StaticText(parent, -1, 'Type:'), 0, wx.EXPAND|wx.ALL, 5) self._type=wx.ComboBox(parent, wx.NewId(), choices=[DataItem.numeric_type, DataItem.string_type], value=DataItem.numeric_type, style=wx.CB_DROPDOWN|wx.CB_READONLY) self.Add(self._type, 0, wx.EXPAND|wx.ALL, 5) self.Add(wx.StaticText(parent, -1, 'Offset Type:'), 0, wx.EXPAND|wx.ALL, 5) self._offset_type=wx.ComboBox(parent, -1, value=DataItem.offset_from_start, choices=[DataItem.offset_from_start, DataItem.offset_from_prev], style=wx.CB_DROPDOWN|wx.CB_READONLY) self.Add(self._offset_type, 0, wx.EXPAND|wx.ALL, 5) self.Add(wx.StaticText(parent, -1, 'Offset Value:'), 0, wx.EXPAND|wx.ALL, 5) self._offset=masked.NumCtrl(parent, wx.NewId(), allowNegative=False, min=0) self.Add(self._offset, 0, wx.ALL, 5) self._fields_group=(self._name, self._type, self._offset_type, self._offset) def set(self, data): if isinstance(data, DataStruct): self._struct_name.SetValue(data.name) elif isinstance(data, DataItem): self._name.SetValue(data.name) self._type.SetValue(data.type) self._offset_type.SetValue(data.offset_type) self._offset.SetValue(data.offset) def get(self, data): data.name=self._name.GetValue() data.type=self._type.GetValue() data.offset_type=self._offset_type.GetValue() data.offset=int(self._offset.GetValue()) return data def show(self, show_struct=False, show_field=False): self._struct_name.Enable(show_struct) for w in self._fields_group: w.Enable(show_field) def _get_struct_name(self): return self._struct_name.GetValue() struct_name=property(fget=_get_struct_name) def _get_type(self): return self._type.GetValue() type=property(fget=_get_type) def _get_type_id(self): return self._type.GetId() type_id=property(fget=_get_type_id) #------------------------------------------------------------------------------- class NumericInfoSizer(wx.FlexGridSizer): _sign_choices=['Unsigned', 'Signed'] _endian_choices=['Little Endian', 'Big Endian'] _size_choices=['1', '2', '4'] def __init__(self, parent): super(NumericInfoSizer, self).__init__(-1, 2, 5, 5) self.AddGrowableCol(1) self.Add(wx.StaticText(parent, -1, 'Signed:'), 0, wx.EXPAND|wx.ALL, 5) self._sign=wx.ComboBox(parent, -1, value=self._sign_choices[0], choices=self._sign_choices, style=wx.CB_DROPDOWN|wx.CB_READONLY) self.Add(self._sign, 0, wx.EXPAND|wx.ALL, 5) self.Add(wx.StaticText(parent, -1, 'Endian:'), 0, wx.EXPAND|wx.ALL, 5) self._endian=wx.ComboBox(parent, -1, value=self._endian_choices[0], choices=self._endian_choices, style=wx.CB_DROPDOWN|wx.CB_READONLY) self.Add(self._endian, 0, wx.EXPAND|wx.ALL, 5) self.Add(wx.StaticText(parent, -1, 'Size:'), 0, wx.EXPAND|wx.ALL, 5) self._size=wx.ComboBox(parent, -1, value=self._size_choices[0], choices=self._size_choices, style=wx.CB_DROPDOWN|wx.CB_READONLY) self.Add(self._size, 0, wx.EXPAND|wx.ALL, 5) def set(self, data): if data.unsigned: self._sign.SetValue(self._sign_choices[0]) else: self._sign.SetValue(self._sign_choices[1]) if data.LE: self._endian.SetValue(self._endian_choices[0]) else: self._endian.SetValue(self._endian_choices[1]) self._size.SetValue(`data.size`) def get(self, data): data.unsigned=self._sign.GetValue()==self._sign_choices[0] data.LE=self._endian.GetValue()==self._endian_choices[0] data.size=int(self._size.GetValue()) return data #------------------------------------------------------------------------------- class StringInfoSizer(wx.FlexGridSizer): _fixed_choices=['Fixed', 'Pascal'] def __init__(self, parent): super(StringInfoSizer, self).__init__(-1, 2, 5, 5) self.AddGrowableCol(1) self.Add(wx.StaticText(parent, -1, 'Fixed/Pascal:'), 0, wx.EXPAND|wx.ALL, 5) self._fixed=wx.ComboBox(parent, -1, value=self._fixed_choices[0], choices=self._fixed_choices, style=wx.CB_DROPDOWN|wx.CB_READONLY) self.Add(self._fixed, 0, wx.EXPAND|wx.ALL, 5) self.Add(wx.StaticText(parent, -1, 'Max Length:'), 0, wx.EXPAND|wx.ALL, 5) self._max_len=masked.NumCtrl(parent, -1, value=1, min=-1) self.Add(self._max_len, 0, wx.EXPAND|wx.ALL, 5) self.Add(wx.StaticText(parent, -1, 'Null Terminated:'), 0, wx.EXPAND|wx.ALL, 5) self._null_terminated=wx.CheckBox(parent, -1) self.Add(self._null_terminated, 0, wx.EXPAND|wx.ALL, 5) def set(self, data): if data.fixed: self._fixed.SetValue(self._fixed_choices[0]) else: self._fixed.SetValue(self._fixed_choices[1]) self._max_len.SetValue(`data.size`) self._null_terminated.SetValue(data.null_terminated) def get(self, data): data.fixed=self._fixed.GetValue()==self._fixed_choices[0] data.size=int(self._max_len.GetValue()) data.null_terminated=self._null_terminated.GetValue() return data #------------------------------------------------------------------------------- class TemplateDialog(wx.Dialog): _type_choices=['Numeric', 'String'] _struct_type='struct' _field_type='field' def __init__(self, parent): super(TemplateDialog, self).__init__(parent, -1, 'Hex Template Editor', style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER) self._data=[] self._item_tree=self._numeric_bs=self._string_bs=None self._general_bs=None self._tree_root=None self._field_info=self._field_info_hbs=None self._info_sizer={ NumericDataItem.numeric_type: self._numeric_bs, StringDataItem.string_type: self._string_bs } main_vbs=wx.BoxSizer(wx.VERTICAL) hbs1=wx.BoxSizer(wx.HORIZONTAL) hbs1.Add(self._create_tree_pane(), 1, wx.EXPAND|wx.ALL, 5) hbs1.Add(self._create_info_pane(), 2, wx.EXPAND|wx.ALL, 5) main_vbs.Add(hbs1, 1, wx.EXPAND|wx.ALL, 5) main_vbs.Add(wx.StaticLine(self, -1, style=wx.LI_HORIZONTAL), 0, wx.EXPAND|wx.ALL, 5) main_vbs.Add(self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.HELP), 0, wx.ALIGN_CENTRE|wx.ALL, 5) self.SetSizer(main_vbs) self.SetAutoLayout(True) main_vbs.Fit(self) def _create_tree_pane(self): vbs=wx.BoxSizer(wx.VERTICAL) sw=scrolled.ScrolledPanel(self, -1) self._item_tree=wx.TreeCtrl(sw, wx.NewId(), style=wx.TR_DEFAULT_STYLE|wx.TR_HAS_BUTTONS) wx.EVT_TREE_SEL_CHANGED(self, self._item_tree.GetId(), self._OnTreeSel) self._tree_root=self._item_tree.AddRoot('Data Templates') sw_bs=wx.BoxSizer(wx.VERTICAL) sw_bs.Add(self._item_tree, 1, wx.EXPAND|wx.ALL, 0) sw.SetSizer(sw_bs) sw.SetAutoLayout(True) sw_bs.Fit(sw) sw.SetupScrolling() vbs.Add(sw, 1, wx.EXPAND|wx.ALL, 5) hbs=wx.BoxSizer(wx.HORIZONTAL) hbs.Add(wx.Button(self, wx.ID_ADD, 'Add'), 0, wx.EXPAND|wx.ALL, 5) hbs.Add(wx.Button(self, wx.ID_DELETE, 'Delete'), 0, wx.EXPAND|wx.ALL, 5) wx.EVT_BUTTON(self, wx.ID_ADD, self._OnAdd) wx.EVT_BUTTON(self, wx.ID_DELETE, self._OnDelete) vbs.Add(hbs, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALL, 5) return vbs def _create_info_pane(self): # main boxsize vbs=wx.BoxSizer(wx.VERTICAL) hbs=wx.BoxSizer(wx.HORIZONTAL) # Type & offset static_bs=wx.StaticBoxSizer(wx.StaticBox(self, -1, 'Field Type'), wx.VERTICAL) self._general_bs=GeneralInfoSizer(self) wx.EVT_COMBOBOX(self, self._general_bs.type_id, self._OnTypeChanged) static_bs.Add(self._general_bs, 0, wx.EXPAND|wx.ALL, 5) hbs.Add(static_bs, 0, wx.ALL, 5) # all info self._field_info=wx.StaticBoxSizer(wx.StaticBox(self, -1, 'Field Info'), wx.VERTICAL) # numeric info box self._numeric_bs=NumericInfoSizer(self) self._field_info.Add(self._numeric_bs, 0, wx.EXPAND|wx.ALL, 5) self._string_bs=StringInfoSizer(self) self._field_info.Add(self._string_bs, 0, wx.EXPAND|wx.ALL, 5) hbs.Add(self._field_info, 0, wx.ALL, 5) vbs.Add(hbs, 1, wx.EXPAND|wx.ALL, 5) hbs1=wx.BoxSizer(wx.HORIZONTAL) hbs1.Add(wx.Button(self, wx.ID_SAVE, 'Set'), 0, wx.EXPAND|wx.ALL, 5) hbs1.Add(wx.Button(self, wx.ID_REVERT, 'Revert'), 0, wx.EXPAND|wx.ALL, 5) wx.EVT_BUTTON(self, wx.ID_SAVE, self._OnSave) wx.EVT_BUTTON(self, wx.ID_REVERT, self._OnRevert) vbs.Add(hbs1, 0, wx.ALIGN_CENTER_HORIZONTAL, 0) self._field_info_hbs=hbs return vbs def _show_field_info(self, _struct=False, field=False, numeric_field=False, string_field=False): # show/hide individual fields self._general_bs.show(_struct, field) self._field_info.Show(self._numeric_bs, numeric_field) self._field_info.Show(self._string_bs, string_field) self._field_info.Layout() self._field_info_hbs.Layout() def _populate(self): # clear the tree and repopulate self._item_tree.DeleteChildren(self._tree_root) for i,e in enumerate(self._data): item=self._item_tree.AppendItem(self._tree_root, e.name) self._item_tree.SetPyData(item, { 'type': self._struct_type, 'index': i }) for i1,e1 in enumerate(e.fields): field_item=self._item_tree.AppendItem(item, e1.name) self._item_tree.SetPyData(field_item, { 'type': self._field_type, 'index': i, 'field_index': i1 }) self.expand() def _populate_struct(self, _item_index): self._general_bs.set(self._data[_item_index]) self._show_field_info(True) def _populate_each(self, _struct_index, _item_index): _struct=self._data[_struct_index] _item=_struct.fields[_item_index] self._general_bs.set(_item) if _item.type==DataItem.numeric_type: self._show_field_info(True, True, True) self._numeric_bs.set(_item) else: self._show_field_info(True, True, False, True) self._string_bs.set(_item) def _OnTypeChanged(self, _): new_type=self._general_bs.type self._show_field_info(True, True, new_type==DataItem.numeric_type, new_type==DataItem.string_type) def _OnAdd(self, _): sel_idx=self._item_tree.GetSelection() if not sel_idx.IsOk(): return if sel_idx==self._tree_root: # add a new structure struct_item=DataStruct('New Struct') self._data.append(struct_item) else: # add a new field to the existing structure data_item=self._item_tree.GetPyData(sel_idx) item=NumericDataItem('New Field') self._data[data_item['index']].fields.append(item) self._populate() def _OnDelete(self, _): sel_idx=self._item_tree.GetSelection() if not sel_idx.IsOk(): return node_data=self._item_tree.GetPyData(sel_idx) if node_data is None: return if node_data['type']==self._field_type: # del this field del self._data[node_data['index']].fields[node_data['field_index']] else: # del this struct and its fields del self._data[node_data['index']] # and re-populate the tree self._populate() def _OnSave(self, _): sel_idx=self._item_tree.GetSelection() if not sel_idx.IsOk(): return node_data=self._item_tree.GetPyData(sel_idx) if node_data is None: return # update the struct name self._data[node_data['index']].name=self._general_bs.struct_name if node_data['type']==self._field_type: data_item=self._data[node_data['index']].\ fields[node_data['field_index']] data_item=self._general_bs.get(data_item) if data_item.type==DataItem.numeric_type: data_item=self._numeric_bs.get(data_item) else: data_item=self._string_bs.get(data_item) self._data[node_data['index']].fields[node_data['field_index']]=data_item self._item_tree.SetItemText(self._item_tree.GetItemParent(sel_idx), self._data[node_data['index']].name) self._item_tree.SetItemText(sel_idx, data_item.name) else: self._item_tree.SetItemText(sel_idx, self._data[node_data['index']].name) def _OnRevert(self, _): sel_idx=self._item_tree.GetSelection() if not sel_idx.IsOk(): return node_data=self._item_tree.GetPyData(sel_idx) if node_data is None: self._show_field_info() else: self._populate_struct(node_data['index']) if node_data['type']==self._field_type: self._populate_each(node_data['index'], node_data['field_index']) def _OnTreeSel(self, evt): sel_idx=evt.GetItem() if not sel_idx.IsOk(): # invalid selection return item_data=self._item_tree.GetPyData(sel_idx) if item_data is None: self._show_field_info() else: self._populate_struct(item_data['index']) if item_data['type']==self._field_type: self._populate_each(item_data['index'], item_data['field_index']) def expand(self): # expand the tree self._item_tree.Expand(self._tree_root) (id, cookie)=self._item_tree.GetFirstChild(self._tree_root) while id.IsOk(): self._item_tree.Expand(id) (id, cookie)=self._item_tree.GetNextChild(self._tree_root, cookie) def set(self, l): self._data=l self._populate() def get(self): return self._data #------------------------------------------------------------------------------- class HexEditor(wx.ScrolledWindow): _addr_range=xrange(8) _hex_range_start=10 _hex_range_start2=33 _hex_range=xrange(_hex_range_start, 58) _ascii_range_start=60 _ascii_range=xrange(60, 76) def __init__(self, parent, id=-1, style=wx.WANTS_CHARS, _set_pos=None, _set_sel=None, _set_val=None): wx.ScrolledWindow.__init__(self, parent, id, style=style) self.parent=parent self.data="" self.title="" self.buffer=None self.hasfocus=False self.dragging=False self.current_ofs=None self._module=None self._templates=[] self._search_string=None # ways of displaying status self.set_pos=_set_pos or self._set_pos self.set_val=_set_val or self._set_val self.set_sel=_set_sel or self._set_sel # some GUI setup self.SetBackgroundColour("WHITE") self.SetCursor(wx.StockCursor(wx.CURSOR_IBEAM)) self.sethighlight(wx.NamedColour("BLACK"), wx.NamedColour("YELLOW")) self.setnormal(wx.NamedColour("BLACK"), wx.NamedColour("WHITE")) self.setfont(wx.TheFontList.FindOrCreateFont(10, wx.MODERN, wx.NORMAL, wx.NORMAL)) self.OnSize(None) self.highlightrange(None, None) # other stuff self._create_context_menu() self._map_events() def _map_events(self): wx.EVT_SCROLLWIN(self, self.OnScrollWin) wx.EVT_PAINT(self, self.OnPaint) wx.EVT_SIZE(self, self.OnSize) wx.EVT_ERASE_BACKGROUND(self, self.OnEraseBackground) wx.EVT_SET_FOCUS(self, self.OnGainFocus) wx.EVT_KILL_FOCUS(self, self.OnLoseFocus) wx.EVT_LEFT_DOWN(self, self.OnStartSelection) wx.EVT_LEFT_UP(self, self.OnEndSelection) wx.EVT_MOTION(self, self.OnMakeSelection) wx.EVT_RIGHT_UP(self, self.OnRightClick) def _create_context_menu(self): self._reload_menu_id=self._apply_menu_id=None menu_items=( ('File', (('Load', self.OnLoadFile), ('Save As', self.OnSaveAs), ('Save Selection As', self.OnSaveSelection), ('Save Hexdump As', self.OnSaveHexdumpAs))), ('Set Selection', (('Start', self.OnStartSelMenu), ('End', self.OnEndSelMenu))), ('Value', self.OnViewValue), ('Search', (('Search', self.OnSearch), ('Search Again', self.OnSearchAgain))), ('Import Python Module', self.OnImportModule), ('Reload Python Module', self.OnReloadModule, '_reload_menu_id'), ('Apply Python Func', self.OnApplyFunc, '_apply_menu_id'), ('Template', (('Load', self.OnTemplateLoad), ('Save As', self.OnTemplateSaveAs), ('Edit', self.OnTemplateEdit), ('Apply', self.OnTemplateApply))) ) self._bgmenu=wx.Menu() for menu_item in menu_items: if isinstance(menu_item[1], tuple): # submenu sub_menu=wx.Menu() for submenu_item in menu_item[1]: id=wx.NewId() sub_menu.Append(id, submenu_item[0]) wx.EVT_MENU(self, id, submenu_item[1]) self._bgmenu.AppendMenu(wx.NewId(), menu_item[0], sub_menu) else: # regular menu item id=wx.NewId() self._bgmenu.Append(id, menu_item[0]) wx.EVT_MENU(self, id, menu_item[1]) if len(menu_item)>2: # need to save menu ID setattr(self, menu_item[2], id) def SetData(self, data): self.data=data self.needsupdate=True self.updatescrollbars() self.Refresh() def SetTitle(self, title): self.title=title def SetStatusDisplay(self, _set_pos=None, _set_sel=None, _set_val=None): self.set_pos=_set_pos or self._set_pos self.set_sel=_set_sel or self._set_sel self.set_val=_set_val or self._set_val def OnEraseBackground(self, _): pass def _set_pos(self, pos): pass def _set_sel(self, sel_start, sel_end): pass def _set_val(self, v): pass def _to_char_line(self, x, y): """Convert an x,y point to (char, line) """ return x/self.charwidth, y/self.charheight def _to_xy(self, char, line): return char*self.charwidth, line*self.charheight def _to_buffer_offset(self, char, line): if char in self._hex_range: if char>self._hex_range_start2: char-=1 if ((char-self._hex_range_start)%3)<2: return line*16+(char-self._hex_range_start)/3 elif char in self._ascii_range: return line*16+char-self._ascii_range_start def _set_and_move(self, evt): c,l=self._to_char_line(evt.GetX(), evt.GetY()) self.GetCaret().Move(self._to_xy(c, l)) x0, y0=self.GetViewStart() char_x=c+x0 line_y=l+y0 return self._to_buffer_offset(char_x, line_y) _value_formats=( ('unsigned char', 'B', struct.calcsize('B')), ('signed char', 'b', struct.calcsize('b')), ('LE unsigned short', 'H', struct.calcsize('>H')), ('BE signed short', '>h', struct.calcsize('>h')), ('LE unsigned int', 'I', struct.calcsize('>I')), ('BE signed int', '>i', struct.calcsize('>i')), ) def _gen_values(self, _data, _ofs): """ Generate the values of various number formats starting at the current offset. """ n=_data[_ofs:] len_n=len(n) s='0x%X=%d'%(_ofs, _ofs) res=[{ 'Data Offset': s}, {'':''} ] for i,e in enumerate(self._value_formats): if len_n=32 and string.printable.find(c)>=0): text+=c else: text+='.' res+=text+"\n" pos+=16 return res def OnSaveHexdumpAs(self, _): with guihelper.WXDialogWrapper(wx.FileDialog(self, 'Select a file to save', style=wx.SAVE|wx.OVERWRITE_PROMPT), True) as (dlg, retcode): if retcode==wx.ID_OK: file(dlg.GetPath(), 'wb').write(self.hexdumpdata()) def OnSaveSelection(self, _): if self.highlightstart is None or self.highlightstart==-1 or \ self.highlightend is None or self.highlightend==-1: # no selection return with guihelper.WXDialogWrapper(wx.FileDialog(self, 'Select a file to save', style=wx.SAVE|wx.OVERWRITE_PROMPT), True) as (dlg, retcode): if retcode==wx.ID_OK: file(dlg.GetPath(), 'wb').write( self.data[self.highlightstart:self.highlightend]) def OnReloadModule(self, _): try: reload(self._module) except: self._module=None guihelper.MessageDialog(self, 'Failed to reload module', 'Reload Module Error', style=wx.OK|wx.ICON_ERROR) def OnApplyFunc(self, _): choices=[x for x in dir(self._module) \ if callable(getattr(self._module, x))] with guihelper.WXDialogWrapper(wx.SingleChoiceDialog(self, 'Select a function to apply:', 'Apply Python Func', choices), True) as (dlg, retcode): if retcode==wx.ID_OK: try: res=getattr(self._module, dlg.GetStringSelection())( self, self.data, self.current_ofs) self._display_result(res) except: guihelper.MessageDialog(self, 'Apply Func raised an exception', 'Apply Func Error', style=wx.OK|wx.ICON_ERROR) def OnImportModule(self, _): with guihelper.WXDialogWrapper(wx.TextEntryDialog(self, 'Enter the name of a Python Module:', 'Module Import'), True) as (dlg, retcode): if retcode==wx.ID_OK: try: self._module=common.importas(dlg.GetValue()) except ImportError: self._module=None guihelper.MessageDialog(self, 'Failed to import module: '+dlg.GetValue(), 'Module Import Error', style=wx.OK|wx.ICON_ERROR) def OnStartSelMenu(self, evt): ofs=self.current_ofs if ofs is not None: self.highlightstart=ofs self.needsupdate=True self.Refresh() self.set_sel(self.highlightstart, self.highlightend) def OnEndSelMenu(self, _): ofs=self.current_ofs if ofs is not None: self.highlightend=ofs+1 self.needsupdate=True self.Refresh() self.set_sel(self.highlightstart, self.highlightend) def OnViewValue(self, _): ofs=self.current_ofs if ofs is not None: self._display_result(self._gen_values(self.data, ofs)) def OnStartSelection(self, evt): self.highlightstart=self.highlightend=None ofs=self._set_and_move(evt) if ofs is not None: self.highlightstart=ofs self.dragging=True self.set_val(self.data[ofs:]) else: self.set_val(None) self.needsupdate=True self.Refresh() self.set_pos(ofs) self.set_sel(self.highlightstart, self.highlightend) def OnMakeSelection(self, evt): if not self.dragging: return ofs=self._set_and_move(evt) if ofs is not None: self.highlightend=ofs+1 self.needsupdate=True self.Refresh() self.set_pos(ofs) self.set_sel(self.highlightstart, self.highlightend) def OnEndSelection(self, evt): self.dragging=False ofs=self._set_and_move(evt) self.set_pos(ofs) self.set_sel(self.highlightstart, self.highlightend) def OnRightClick(self, evt): self.current_ofs=self._set_and_move(evt) if self.current_ofs is None: self.set_val(None) else: self.set_val(self.data[self.current_ofs:]) self.set_pos(self.current_ofs) self._bgmenu.Enable(self._apply_menu_id, self._module is not None) self._bgmenu.Enable(self._reload_menu_id, self._module is not None) self.PopupMenu(self._bgmenu, evt.GetPosition()) def OnTemplateLoad(self, _): with guihelper.WXDialogWrapper(wx.FileDialog(self, 'Select a file to load', wildcard='*.tmpl', style=wx.OPEN|wx.FILE_MUST_EXIST), True) as (dlg, retcode): if retcode==wx.ID_OK: result={} try: execfile(dlg.GetPath()) except UnicodeError: common.unicode_execfile(dlg.GetPath()) exist_keys={} for i,e in enumerate(self._templates): exist_keys[e.name]=i for d in result['templates']: data_struct=DataStruct('new struct') data_struct.set(d) if exist_keys.has_key(data_struct.name): self._templates[exist_keys[data_struct.name]]=data_struct else: self._templates.append(data_struct) def OnTemplateSaveAs(self, _): with guihelper.WXDialogWrapper(wx.FileDialog(self, 'Select a file to save', wildcard='*.tmpl', style=wx.SAVE|wx.OVERWRITE_PROMPT), True) as (dlg, retcode): if retcode==wx.ID_OK: r=[x.get() for x in self._templates] common.writeversionindexfile(dlg.GetPath(), { 'templates': r }, 1) def OnTemplateApply(self, _): if not self._templates: # no templates to apply return choices=[x.name for x in self._templates] with guihelper.WXDialogWrapper(wx.SingleChoiceDialog(self, 'Select a template to apply:', 'Apply Data Template', choices), True) as (dlg, retcode): if retcode==wx.ID_OK: try: res=self._apply_template(dlg.GetStringSelection()) self._display_result(res) except: guihelper.MessageDialog(self, 'Apply Template raised an exception', 'Apply Template Error', style=wx.OK|wx.ICON_ERROR), def OnTemplateEdit(self, _): dlg=TemplateDialog(self) dlg.set(self._templates) with guihelper.WXDialogWrapper(dlg, True) as (dlg, retcode): if retcode==wx.ID_OK: self._templates=dlg.get() def OnSearch(self, evt): with guihelper.WXDialogWrapper(wx.TextEntryDialog(self, 'Enter data to search (1 0x23 045 ...):', 'Search Data'), True) as (dlg, retcode): if retcode==wx.ID_OK: l=dlg.GetValue().split(' ') s='' for e in l: if e[0:2]=='0x': s+=chr(int(e, 16)) elif e[0]=='0': s+=chr(int(e, 8)) else: s+=chr(int(e)) i=self.data[self.current_ofs:].find(s) if i!=-1: self._search_string=s self.highlightstart=i+self.current_ofs self.highlightend=self.highlightstart+len(s) self.needsupdate=True self.Refresh() self.set_sel(self.highlightstart, self.highlightend) else: self._search_string=None def OnSearchAgain(self, evt): if self._search_string is not None: i=self.data[self.current_ofs:].find(self._search_string) if i==-1: return self.highlightstart=i+self.current_ofs self.highlightend=self.highlightstart+len(self._search_string) self.needsupdate=True self.Refresh() self.set_sel(self.highlightstart, self.highlightend) def OnSize(self, evt): # uncomment these lines to prevent going wider than is needed # if self.width>self.widthinchars*self.charwidth: # self.SetClientSize( (self.widthinchars*self.charwidth, self.height) ) if evt is None: self.width=(self.widthinchars+3)*self.charwidth self.height=self.charheight*20 self.SetClientSize((self.width, self.height)) self.SetCaret(wx.Caret(self, (self.charwidth, self.charheight))) self.GetCaret().Show(True) else: self.width,self.height=self.GetClientSizeTuple() self.needsupdate=True def OnGainFocus(self,_): self.hasfocus=True self.needsupdate=True self.Refresh() def OnLoseFocus(self,_): self.hasfocus=False self.needsupdate=True self.Refresh() def highlightrange(self, start, end): self.needsupdate=True self.highlightstart=start self.highlightend=end self.Refresh() self.set_pos(None) self.set_sel(self.highlightstart, self.highlightend) self.set_val(None) def _ishighlighted(self, pos): return pos>=self.highlightstart and pos=len(self.data): break hl=self._ishighlighted(pos) if hl!=st: if hl: st=1 self._sethighlight(dc) else: st=0 self._setnormal(dc) if hl: space="" if i<15: if self._ishighlighted(pos+1): space=" " if i==7: space=" " else: space="" c=self.data[pos] dc.DrawText("%02X%s" % (ord(c),space), (10+(3*i)+(i>=8))*self.charwidth, line*self.charheight) if not (ord(c)>=32 and string.printable.find(c)>=0): c='.' dc.DrawText(c, (10+(3*16)+2+i)*self.charwidth, line*self.charheight) ## if self.hasfocus: ## self._setstatus(dc) ## w,h=self.GetClientSizeTuple() ## dc.DrawRectangle(0,h-self.charheight+yd*self.charheight,self.widthinchars*self.charwidth,self.charheight) ## dc.DrawText("A test of stuff "+`yd`, 0, h-self.charheight+yd*self.charheight) dc.EndDrawing() def updatebuffer(self): if self.buffer is None or \ self.buffer.GetWidth()!=self.width or \ self.buffer.GetHeight()!=self.height: if self.buffer is not None: del self.buffer self.buffer=wx.EmptyBitmap(self.width, self.height) mdc=wx.MemoryDC() mdc.SelectObject(self.buffer) mdc.SetBackground(wx.TheBrushList.FindOrCreateBrush(self.GetBackgroundColour(), wx.SOLID)) mdc.Clear() self.PrepareDC(mdc) self.OnDraw(mdc) mdc.SelectObject(wx.NullBitmap) del mdc def OnPaint(self, event): if self.needsupdate: self.needsupdate=False self.updatebuffer() dc=wx.PaintDC(self) dc.BeginDrawing() dc.DrawBitmap(self.buffer, 0, 0, False) dc.EndDrawing() def OnScrollWin(self, event): self.needsupdate=True self.Refresh() # clear whole widget event.Skip() # default event handlers now do scrolling etc class HexEditorDialog(wx.Dialog): _pane_widths=[-2, -3, -4] _pos_pane_index=0 _sel_pane_index=1 _val_pane_index=2 def __init__(self, parent, data='', title='BitPim Hex Editor', helpd_id=-1): super(HexEditorDialog, self).__init__(parent, -1, title, size=(500, 500), style=wx.DEFAULT_DIALOG_STYLE|\ wx.RESIZE_BORDER) self._status_bar=wx.StatusBar(self, -1) self._status_bar.SetFieldsCount(len(self._pane_widths)) self._status_bar.SetStatusWidths(self._pane_widths) vbs=wx.BoxSizer(wx.VERTICAL) self._hex_editor=HexEditor(self, _set_pos=self.set_pos, _set_val=self.set_val, _set_sel=self.set_sel) self._hex_editor.SetData(data) self._hex_editor.SetTitle(title) vbs.Add(self._hex_editor, 1, wx.EXPAND|wx.ALL, 5) vbs.Add(wx.StaticLine(self), 0, wx.EXPAND|wx.ALL, 5) ok_btn=wx.Button(self, wx.ID_OK, 'OK') vbs.Add(ok_btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5) vbs.Add(self._status_bar, 0, wx.EXPAND|wx.ALL, 0) self.SetSizer(vbs) self.SetAutoLayout(True) vbs.Fit(self) def set_pos(self, pos): """Display the current buffer offset in the format of Pos: 0x12=18 """ if pos is None: s='' else: s='Pos: 0x%X=%d'%(pos, pos) self._status_bar.SetStatusText(s, self._pos_pane_index) def set_sel(self, sel_start, sel_end): if sel_start is None or sel_start==-1 or\ sel_end is None or sel_end ==-1: s='' else: sel_len=sel_end-sel_start sel_end-=1 s='Sel: 0x%X=%d to 0x%X=%d (0x%X=%d bytes)'%( sel_start, sel_start, sel_end, sel_end, sel_len, sel_len) self._status_bar.SetStatusText(s, self._sel_pane_index) def set_val(self, v): if v: # char s='Val: 0x%02X=%d'%(ord(v[0]), ord(v[0])) if len(v)>1: # short u_s=struct.unpack('3: # int/long u_i=struct.unpack('' sys.exit(1) app=wx.PySimpleApp() with guihelper.WXDialogWrapper(HexEditorDialog(None, file(sys.argv[1], 'rb').read(), sys.argv[1]), True): pass sys.exit(0) bitpim-1.0.7+dfsg1/src/vtab_media.py0000644001616600161660000001332610576664616015431 0ustar amuamu### BITPIM ### ### Copyright (C) 2007 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: vtab_media.py 4155 2007-03-17 04:07:42Z djpham $ """ An apsw compatible module that implements a virtual table that stores media data as native system files. """ # System modules import glob import os import os.path # BitPim moduless import database class Media(database.ModuleBase): """ Module to implements a virtual table that stores media data as native system files. The table has 2 fiels: __rowid__ and mediadata This class maintains its own rowid, cursor, and constraints parameters. The data of each row is stored in a file named Fxxxxxxx, where xxxxxxx is the rowid starting with 1 ie (F0000001, F0000002, etc) """ def __init__(self, pathname): """ @params pathname: full path in which to stores data files """ super(Media, self).__init__(('data',)) # make sure the path exists if not os.path.exists(pathname): os.makedirs(pathname) self.pathname=os.path.abspath(pathname) self.rowidfilename=os.path.join(self.pathname, 'rowid') self.getnextrowid() self.filenames=[] self.cursor=None def getnextrowid(self): """ Return the next row ID from a file called rowid """ try: id=file(self.rowidfilename, 'rt').read() self.rowid=int(id) except IOError: # file does not exist self.rowid=1 self.saverowid(1) def incrementrowid(self): # increment the next row ID by 1 self.rowid+=1 self.saverowid(self.rowid) def saverowid(self, id): file(self.rowidfilename, 'wt').write(str(id)) def filenamefromid(self, id): # return a full path name based on the row ID return os.path.join(self.pathname, 'F%07d'%id) def idfromfilename(self, filename): return int(os.path.basename(filename)[1:]) def BestIndex(self, constraints, orderby): """ Provide information on how to best access this table. Must be overriden by subclass. @params constraints: a tuple of (column #, op) defining a constraints @params orderby: a tuple of (column #, desc) defining the order by @returns a tuple of up to 5 values: 0: aConstraingUsage: a tuple of the same size as constraints. Each item is either None, argv index(int), or (argv index, omit(Bool)). 1: idxNum(int) 2: idxStr(string) 3: orderByConsumed(Bool) 4: estimatedCost(float) Todo: store the constraints for subsequent evaluation, and tell sqlite to pass the constraints parameters to Filter. """ pass def Filter(self, idxNum, idxStr, argv): """ Begin a search of a virtual table. @params idxNum: int value passed by BestIndex @params idxStr: string valued passed by BestIndex @params argv: constraint parameters requested by BestIndex @returns: None Todo: evaluate actual constraints, will let sqlite do the orderby. """ self.filenames=glob.glob(os.path.join(self.pathname, 'F[0-9][0-9][0-9][0-9][0-9][0-9][0-9]')) if self.filenames: self.cursor=0 else: self.cursor=None def Eof(self): """ Determines if the current cursor points to a valid row. @returns: False if valid row, True otherwise """ return self.cursor is None or self.cursor>=len(self.filenames) def Column(self, N): """ Find the value for the N-th column of the current row. @params N: the N-th column @returns: value of the N-th column We only have 2 columns: __rowid__ and mediadata """ filename=self.filenames[self.cursor] if N==0: # __rowid__ return self.idfromfilename(filename) else: # mediadata return buffer(file(filename, 'rb').read()) def Next(self): """ Move the cursor to the next row. @returns: None """ self.cursor+=1 def Rowid(self): """ Return the rowid of the current row. @returns: the rowid(int) of the current row. """ return self.Column(0) def UpdateDeleteRow(self, rowid): """ Delete row rowid @params rowid: rowid to delete @returns: None """ # delete the file os.remove(self.filenamefromid(rowid)) def UpdateInsertRow(self, rowid, fields): """ Insert a new row of data into the table @params rowid: if not None, use this rowid. If None, create a new rowid @params fields: a tuple of the field values in the order declared in Create/Connet @returns: rowid of the new row. """ if rowid is None: rowid=self.rowid self.incrementrowid() file(self.filenamefromid(rowid), 'wb').write(fields[1]) return rowid def UpdateChangeRow(self, rowid, newrowid, fields): """ Change the row of the current rowid with the new rowid and new values @params rowid: rowid of the current row @params newrowid: new rowid @params fields: a tuple of the field values in the order declared in Create/Connect @returns: rowid of the new row """ os.remove(self.filenamefromid(rowid)) file(self.filenamefromid(newrowid), 'wb').write(fields[1]) return newrowid bitpim-1.0.7+dfsg1/src/protogen.py0000644001616600161660000006561011317561520015156 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: protogen.py 4772 2010-01-02 06:10:24Z djpham $ "Generate Python code from packet descriptions" from __future__ import with_statement import contextlib import tokenize import sys import token import cStringIO import os class protoerror(Exception): def __init__(self, desc, token): Exception.__init__(self,desc) self.desc=desc self.token=token def __repr__(self): str=self.desc+"\nLine "+`self.token[2][0]`+":\n" str+=self.token[4] str+=" "*self.token[2][1]+"^\n" str+=`self.token[:4]` return str def __str__(self): return self.__repr__() class protogentokenizer: # A section enclosed in %{ ... }%. One item follows which is the string LITERAL="LITERAL" # The start of a packet. # Followed by name, generatordict (as a string), userspecced dict (as a string), a comment (or None) PACKETSTART="PACKETSTART" # End of a packet. Nothing follows PACKETEND="PACKETEND" # Start of an 'if' section. Followed by condition as string including trailing ':' CONDITIONALSTART="CONDITIONALSTART" # start if an 'else' or 'elif' section. CONDITIONALRESTART="CONDITIONALRESTART" # End of an 'if' section. Nothing follows CONDITIONALEND="CONDITIONALEND" # An actual field. Followed by name, size [-1 means unknown size], type, generatordict, userspecced dict, comment, modifiers FIELD="FIELD" # Embedded codes: similar to LITERAL, but defined inside a PACKET. CODE="CODE" # An assertion (validity check). Followed by string of assertion expression ASSERTION="ASSERTION" STATE_TOPLEVEL="STATE_TOPLEVEL" STATE_PACKET="STATE_PACKET" STATE_CONDITIONAL="STATE_CONDITIONAL" def __init__(self, tokenizer, autogennamebase): self.tokenizer=tokenizer self.pb=[] # pushback list from what we are tokenizing self.state=[self.STATE_TOPLEVEL] # state stack self.packetstack=[] # packets being described stack self.resultspb=[] # our results pushback stack self.lines=[None] # no zeroth line self.autogennamebase=autogennamebase self.deferredpackets=[] # used for nested packets def _getautogenname(self, line): return self.autogennamebase+`line` def _lookahead(self, howfar=1): "Returns a token howfar ahead" assert howfar>=1 while len(self.pb)len(self.lines): # multiline token ll=t[4].split('\n') ll=ll[:-1] for i,l in zip(range(t[2][0],t[3][0]+1), ll): # we may already have the line, hence the conditional if len(self.lines)==i: self.lines.append(l) if t[0]=='NL': t=('NEWLINE',)+t[1:] if t[0]!='COMMENT': break # print "next:",t return t def _nextignorenl(self): "Gets next token ignoring newlines" while True: t=self._next() if t[0]!='NEWLINE': return t def _next(self): "Gets next token from our input, looking in pushback list" if len(self.pb): t=self.pb[0] self.pb=self.pb[1:] return t return self._realnext() def _consumenl(self): "consumes any newlines" while True: t=self._lookahead() if t[0]!='NEWLINE': break self._next() def _getuptoeol(self): """Returns everything up to newline as a string. If end of line has backslash before it then next line is returned as well""" t=self._lookahead() res=self._getline(t[2][0])[t[2][1]:] while True: while t[0]!='NEWLINE': t=self._next() if res[-2]!='\\': break t=self._next() res+=self._getline(t[2][0]) return res def _getline(self, line): return self.lines[line] def __iter__(self): return self def next(self): res=None if len(self.resultspb): res=self.resultspb.pop() if self.state[-1]==self.STATE_TOPLEVEL: if res is not None: return res # any deferred packets? if len(self.deferredpackets): res=self.deferredpackets[0] self.deferredpackets=self.deferredpackets[1:] return res # outermost level in file t=self._lookahead() if t[0]=='NEWLINE': self._next() # consume return self.next() if t[0]=='OP' and t[1]=='%': return (self.LITERAL, self._getliteral()) if t[0]=='NAME' and t[1]=='PACKET': return self._processpacketheader() if t[0]=='ENDMARKER': raise StopIteration() raise protoerror("Unexpected token", t) if self.state[-1]==self.STATE_PACKET or self.state[-1]==self.STATE_CONDITIONAL: # describing fields in a packet if res is None: res=self._processpacketfield() # flatten nested packets if res[0]==self.PACKETSTART: q=[res] while True: res=self.next() q.append(res) if res[0]==self.PACKETEND: break self.deferredpackets.extend(q) return self.next() # normal return res raise protoerror("Unexpected state", self._lookahead()) def _getliteral(self): "Returns the section enclosed in %{ ... }%. The %{ and }% must be on lines by themselves." t=self._next() if t[0]!='OP' or t[1]!='%': raise protoerror("Expecting '%{'", t) t=self._next() if t[0]!='OP' or t[1]!='{': raise protoerror("Expecting '%{'", t) t=self._next() if t[0]!='NEWLINE': raise protoerror("Expecting newline", t) # now in middle of literal res="" lastline=-1 while True: t=self._lookahead() t2=self._lookahead(2) if t[0]=='OP' and t[1]=='%' and \ t2[0]=='OP' and t2[1]=='}': self._next() # consume % self._next() # consume } t=self._next() if t[0]!='NEWLINE': raise protoerror("Expecting newline",t) break t=self._next() res+=t[4] lastline=t[2][0] while self._lookahead()[2][0]==lastline: # consume all tokens on the same line self._next() return res def _getdict(self): """Returns a text string representing a dict. If the next token is not a dict start then None is returned""" res=None t=self._lookahead() if t[0]!='OP' or t[1]!="{": return res res="" t=self._next() start=t[2] mostrecent=t # to aid in debugging nest=1 while nest>0: t=self._next() if t[0]=='OP' and t[1]=='}': nest-=1 continue if t[0]=='OP' and t[1]=='{': mostrecent=t nest+=1 continue if t[0]=='DEDENT' or t[0]=='INDENT' or t[0]=='ENDMARKER': raise protoerror("Unterminated '{'", mostrecent) end=t[3] for line in range(start[0], end[0]+1): l=self._getline(line) if line==end[0]: l=l[:end[1]] if line==start[0]: l=l[start[1]:] res+=l return res def _processpacketheader(self): t=self._next() if t[0]!='NAME': raise protoerror("expecting 'PACKET'", t) thedict=self._getdict() t=self._next() # class name themodifiers="" while t[0]=='OP': themodifiers+=t[1] t=self._next() if t[0]!='NAME': raise protoerror("expecting packet name", t) thename=t[1] t=self._next() if t[0]!='OP' and t[1]!=':': raise protoerror("expecting ':'", t) # we now have to see an indent and an option string in either order, with newlines ignored thecomment=None seenindent=False while True: t=self._lookahead() if t[0]=='NEWLINE': self._next() continue if t[0]=='STRING': if thecomment is not None: raise protoerror("Duplicate string comment", t) thecomment=self._next()[1] continue if t[0]=='INDENT': if seenindent: raise protoerror("Unexpected repeat indent", t) seenindent=True self._next() continue break if not seenindent: raise protoerror("Expecting an indent", t) self._consumenl() # ok, now pointing to packet data self.state.append(self.STATE_PACKET) self.packetstack.append( (thename, thedict, thecomment, themodifiers) ) return self.PACKETSTART, thename, None, thedict, thecomment, themodifiers def _processpacketfield(self): """Read in one packet field""" self._consumenl() t=self._lookahead() if t[0]=='DEDENT': # consume self._next() # pop a packet x=self.state.pop() if x==self.STATE_CONDITIONAL: # check if this is an else if elif t=self._lookahead() if t[0]=='NAME' and t[1] in ('else', 'elif'): self.state.append(self.STATE_CONDITIONAL) else: return (self.CONDITIONALEND,) else: return (self.PACKETEND,) if t[0]=='OP' and t[1]=='%': # embedded codes return self.CODE, self._getliteral() # Size if t[0]=='NUMBER': self._next() thesize=int(t[1]) elif t[0]=='OP' and t[1]=='*': self._next() thesize=-1 elif t[0]=='NAME' and t[1].upper()=='P': self._next() thesize='P' elif t[0]=='NAME' and t[1].upper()=='A': self._next() return self.ASSERTION, self._getuptoeol() elif t[0]=='NAME' and t[1]=='if': str=self._getuptoeol() self._consumenl() t=self._next() if t[0]!='INDENT': raise protoerror("Expecting an indent after if ...: statement", t) self.state.append(self.STATE_CONDITIONAL) return (self.CONDITIONALSTART, str) elif t[0]=='NAME' and t[1] in ('elif', 'else'): str=self._getuptoeol() self._consumenl() t=self._next() if t[0]!='INDENT': raise protoerror("Expecting an indent after else: or elif ...: statement", t) if self.state[-1]!=self.STATE_CONDITIONAL: raise protoerror('An if must precede an else or elif.', t) return (self.CONDITIONALRESTART, str) else: raise protoerror("Expecting field size as an integer, *, P, A or 'if' statement", t) # Type t=self._next() if t[0]!='NAME': raise protoerror("Expecting field type", t) thetype=t[1] # a dot and another type (first was module)? t=self._lookahead() if t[0]=='OP' and t[1]=='.': self._next() t=self._next() if t[0]!='NAME': raise protoerror("Expecting a name after . in field type", t) thetype+="."+t[1] # Optional dict thedict=self._getdict() # Name themodifiers="" t=self._next() while t[0]=='OP': themodifiers+=t[1] t=self._next() thevisible=t[0]=='NAME' if thevisible: thename=t[1] else: # Anonymous, invisible field thename=self._getautogenname(t[2][0]) # A colon (anonymous inner struct), newline, or string description thedesc=None t=self._lookahead() if t[0]=='OP' and t[1]==':': # consume : self._next() seenindent=False # optional newline self._consumenl() # optional description t=self._lookahead() if t[0]=='STRING': thedesc=t[1] t=self._next() elif t[0]=='INDENT': seenindent=True self._next() # optional newline self._consumenl() # there should be an indent if not seenindent: t=self._next() if t[0]!='INDENT': raise protoerror("Expected an indent after : based field", t) # put new packet on results pushback autoclass=self._getautogenname(t[2][0]) self.resultspb.append( (self.PACKETSTART, autoclass, None, None, "'Anonymous inner class'", "") ) self.state.append(self.STATE_PACKET) return self.FIELD, thename, thesize, thetype, "{'elementclass': "+autoclass+"}", \ thedict, thedesc, themodifiers, thevisible # optional string if t[0]=='STRING': thedesc=t[1] self._next() # optional newline self._consumenl() # the string this time on the next line? if thedesc is None: t=self._lookahead() if t[0]=='STRING': thedesc=t[1] self._next() self._consumenl() # return what have digested .. return self.FIELD, thename, thesize, thetype, None, thedict, thedesc,\ themodifiers, thevisible def indent(level=1): return " "*level class codegen: def __init__(self, tokenizer): self.tokenizer=tokenizer def gencode(self): tokens=self.tokenizer out=cStringIO.StringIO() print >>out, "# THIS FILE IS AUTOMATICALLY GENERATED. EDIT THE SOURCE FILE NOT THIS ONE" for t in tokens: if t[0]==tokens.LITERAL: out.write(t[1]) continue if t[0]==tokens.PACKETSTART: classdetails=t classfields=[] classcodes=[] continue if t[0]==tokens.PACKETEND: self.genclasscode(out, classdetails, classfields, classcodes) continue if t[0]==tokens.CODE: classcodes.append(t) else: classfields.append(t) return out.getvalue() def genclasscode(self, out, namestuff, fields, codes): classname=namestuff[1] tokens=self.tokenizer _read_only='-' in namestuff[5] print >>out, "class %s(BaseProtogenClass):" % (classname,) if namestuff[4] is not None: print >>out, indent()+namestuff[4] if _read_only: print >>out, indent(1)+"# Read-From-Buffer-Only Class" # fields fieldlist=[f[1] for f in fields if f[0]==tokens.FIELD and f[8]] print >>out, indent(1)+"__fields="+`fieldlist` print >>out, "" # Constructor print >>out, indent()+"def __init__(self, *args, **kwargs):" print >>out, indent(2)+"dict={}" if namestuff[2] is not None: print >>out, indent(2)+"# Default generator arguments" print >>out, indent(2)+"dict.update("+namestuff[2]+")" if namestuff[3] is not None: print >>out, indent(2)+"# User specified arguments in the packet description" print >>out, indent(2)+"dict.update("+namestuff[3]+")" print >>out, indent(2)+"# What was supplied to this function" print >>out, indent(2)+"dict.update(kwargs)" print >>out, indent(2)+"# Parent constructor" print >>out, indent(2)+"super(%s,self).__init__(**dict)"%(namestuff[1],) print >>out, indent(2)+"if self.__class__ is %s:" % (classname,) print >>out, indent(3)+"self._update(args,dict)" print >>out, "\n" # getfields print >>out, indent()+"def getfields(self):" print >>out, indent(2)+"return self.__fields" print >>out, "\n" # update function print >>out, indent()+"def _update(self, args, kwargs):" print >>out, indent(2)+"super(%s,self)._update(args,kwargs)"%(namestuff[1],) print >>out, indent(2)+"keys=kwargs.keys()" print >>out, indent(2)+"for key in keys:" print >>out, indent(3)+"if key in self.__fields:" print >>out, indent(4)+"setattr(self, key, kwargs[key])" print >>out, indent(4)+"del kwargs[key]" print >>out, indent(2)+"# Were any unrecognized kwargs passed in?" print >>out, indent(2)+"if __debug__:" print >>out, indent(3)+"self._complainaboutunusedargs(%s,kwargs)" % (namestuff[1],) # if only field, pass stuff on to it if len(fields)==1: print >>out, indent(2)+"if len(args):" # we can't use makefield as we have to make a new dict d=[] if f[2]>=0: d.append("{'sizeinbytes': "+`f[2]`+"}") for xx in 4,5: if f[xx] is not None: d.append(f[xx]) for dd in d: assert dd[0]=="{" and dd[-1]=='}' d=[dd[1:-1] for dd in d] print >>out, indent(3)+"dict2={%s}" % (", ".join(d),) print >>out, indent(3)+"dict2.update(kwargs)" print >>out, indent(3)+"kwargs=dict2" print >>out, indent(3)+"self.__field_%s=%s(*args,**dict2)" % (f[1],f[3]) # else error if any args else: print >>out, indent(2)+"if len(args): raise TypeError('Unexpected arguments supplied: '+`args`)" print >>out, indent(2)+"# Make all P fields that haven't already been constructed" for f in fields: if f[0]==tokens.FIELD and f[2]=='P': ## print >>out, indent(2)+"if getattr(self, '__field_"+f[1]+"', None) is None:" print >>out, indent(2)+"try: self.__field_"+f[1] print >>out, indent(2)+"except:" self.makefield(out, 3, f) print >>out, "\n" # Write to a buffer i=2 print >>out, indent()+"def writetobuffer(self,buf,autolog=True,logtitle=\"\"):" print >>out, indent(i)+"'Writes this packet to the supplied buffer'" if _read_only: print >>out, indent(i)+"raise NotImplementedError" else: print >>out, indent(i)+"self._bufferstartoffset=buf.getcurrentoffset()" for f in fields: if f[0]==tokens.FIELD and f[2]!='P': if '+' in f[7]: print >>out, indent(i)+"try: self.__field_%s" % (f[1],) print >>out, indent(i)+"except:" self.makefield(out, i+1, f, isreading=False) print >>out, indent(i)+"self.__field_"+f[1]+".writetobuffer(buf)" elif f[0]==tokens.CONDITIONALSTART: print >>out, indent(i)+f[1] i+=1 elif f[0]==tokens.CONDITIONALRESTART: print >>out, indent(i-1)+f[1] elif f[0]==tokens.CONDITIONALEND: i-=1 assert i==2 print >>out, indent(2)+"self._bufferendoffset=buf.getcurrentoffset()" print >>out, indent(2)+"if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle)" print >>out, "\n" # Read from a buffer print >>out, indent()+"def readfrombuffer(self,buf,autolog=True,logtitle=\"\"):" print >>out, indent(2)+"'Reads this packet from the supplied buffer'" i=2 print >>out, indent(2)+"self._bufferstartoffset=buf.getcurrentoffset()" print >>out, indent(2)+"if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle)" for f in fields: if f[0]==tokens.FIELD: if f[2]=='P': continue if _read_only and not f[8]: # anonymous field, use temp field instead print >>out, indent(i)+self._maketempfieldstr(f)+".readfrombuffer(buf)" else: self.makefield(out, i, f) print >>out, indent(i)+"self.__field_%s.readfrombuffer(buf)" % (f[1],) elif f[0]==tokens.CONDITIONALSTART: print >>out, indent(i)+f[1] i+=1 elif f[0]==tokens.CONDITIONALRESTART: print >>out, indent(i-1)+f[1] elif f[0]==tokens.CONDITIONALEND: i-=1 assert i==2 print >>out, indent(2)+"self._bufferendoffset=buf.getcurrentoffset()" print >>out, "\n" # Setup each field as a property for f in fields: if f[0]==tokens.FIELD and f[8]: # get print >>out, indent()+"def __getfield_%s(self):" % (f[1],) if '+' in f[7]: print >>out, indent(2)+"try: self.__field_%s" % (f[1],) print >>out, indent(2)+"except:" self.makefield(out, 3, f) print >>out, indent(2)+"return self.__field_%s.getvalue()\n" % (f[1],) # set print >>out, indent()+"def __setfield_%s(self, value):" % (f[1],) print >>out, indent(2)+"if isinstance(value,%s):" % (f[3],) print >>out, indent(3)+"self.__field_%s=value" % (f[1],) print >>out, indent(2)+"else:" self.makefield(out, 3, f, "value,", isreading=False) print >>out, "" # del print >>out, indent()+"def __delfield_%s(self): del self.__field_%s\n" % (f[1], f[1]) # Make it a property print >>out, indent()+"%s=property(__getfield_%s, __setfield_%s, __delfield_%s, %s)\n" % (f[1], f[1], f[1], f[1], f[6]) if '++' in f[7]: # allow setting attributes print >>out, indent()+"def ss_pb_count_respset_%s_attr(self, **kwargs):"%f[1] print >>out, indent(2)+"self.%s"%f[1] print >>out, indent(2)+"self.__field_%s.update(**kwargs)\n"%f[1] # we are a container print >>out, indent()+"def iscontainer(self):" print >>out, indent(2)+"return True\n" print >>out, indent()+"def containerelements(self):" i=2 _pass_flg= { i: True } for f in fields: if f[0]==tokens.FIELD and f[8]: print >>out, indent(i)+"yield ('%s', self.__field_%s, %s)" % (f[1], f[1], f[6]) _pass_flg[i]=False elif f[0]==tokens.CONDITIONALSTART: print >>out, indent(i)+f[1] _pass_flg[i]=False i+=1 _pass_flg[i]=True elif f[0]==tokens.CONDITIONALRESTART: if _pass_flg[i]: print >>out, indent(i)+"pass" else: _pass_flg[i]=True print >>out, indent(i-1)+f[1] elif f[0]==tokens.CONDITIONALEND: if _pass_flg[i]: print >>out, indent(i)+"pass" i-=1 assert i==2 # generate embeded codes print >>out for _l in codes: print >>out, _l[1] print >>out, "\n\n" def makefield(self, out, indentamount, field, args="", isreading=True): d=[] if field[2]!='P' and field[2]>=0: d.append("{'sizeinbytes': "+`field[2]`+"}") if not (isreading and '*' in field[7]): for xx in 4,5: if field[xx] is not None: d.append(field[xx]) for dd in d: assert dd[0]=='{' and dd[-1]=='}' if len(d)==0: print >>out, indent(indentamount)+"self.__field_%s=%s(%s)" % (field[1], field[3], args) return d=[dd[1:-1] for dd in d] dd="{"+", ".join(d)+"}" print >>out, indent(indentamount)+"self.__field_%s=%s(%s**%s)" % (field[1], field[3], args, dd) def _maketempfieldstr(self, field, args='', isreading=True): # create and return string that creates a temporary field d=[] if field[2]!='P' and field[2]>=0: d.append("{'sizeinbytes': "+`field[2]`+"}") if not (isreading and '*' in field[7]): for xx in 4,5: if field[xx] is not None: d.append(field[xx]) for dd in d: assert dd[0]=='{' and dd[-1]=='}' if len(d)==0: return "%s(%s)" % (fields[3], args) d=[dd[1:-1] for dd in d] dd="{"+", ".join(d)+"}" return "%s(%s**%s)" % (field[3], args, dd) def processfile(inputfilename, outputfilename): print "Processing",inputfilename,"to",outputfilename fn=os.path.basename(outputfilename) fn=os.path.splitext(fn)[0] with contextlib.nested(file(inputfilename, "rtU"), file(outputfilename, "wt")) as (f, f2): tokens=tokenize.generate_tokens(f.readline) tt=protogentokenizer(tokens, "_gen_"+fn+"_") cg=codegen(tt) f2.write(cg.gencode()) if __name__=='__main__': if len(sys.argv)>3 or (len(sys.argv)==2 and sys.argv[1]=="--help"): print "protogen compiles all .p files in this directory to .py" print "protogen foo.p compiles foo.p to foo.py" print "protogen foo.p bar.py compiles foo.p to bar.py" sys.exit(1) elif len(sys.argv)==3: processfile(sys.argv[1], sys.argv[2]) elif len(sys.argv)==2: processfile(sys.argv[1], sys.argv[1]+"y") elif len(sys.argv)==1: import glob for f in glob.glob("*.p"): processfile(f, f+"y") for f in glob.glob("phones/*.p"): processfile(f, f+"y") bitpim-1.0.7+dfsg1/src/pubsub.py0000644001616600161660000000667211274703471014631 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: pubsub.py 4768 2009-11-06 02:17:29Z hjelmn $ """The publish subscribe mechanism used to maintain lists of stuff. This helps different pieces of code maintain lists of things (eg wallpapers, categories) and other to express and interest and be notified when it changes (eg field editors). The wxPython pubsub module is the base. The enhancements are a list of standard topics in this file. This code also used to be larger as the wxPython pubsub didn't use weak references. It does now, so a whole bunch of code could be deleted. """ from wx.lib.pubsub import Publisher ### ### A list of topics ### # Maintain the list of categories REQUEST_GROUP_WALLPAPERS=( 'request', 'groupwps') # no data GROUP_WALLPAPERS=( 'response', 'groupwps' ) # data is list of groups and their wallpapers SET_GROUP_WALLPAPERS=( 'request', 'setgroupwps') # data is list of groups and their wallpapers MERGE_GROUP_WALLPAPERS=( 'request', 'mergegroupwps') # data is list of groups and their wallpapers REQUEST_CATEGORIES=( 'request', 'categories' ) # no data ALL_CATEGORIES=( 'response', 'categories') # data is list of strings SET_CATEGORIES=( 'request', 'setcategories') # data is list of strings ADD_CATEGORY=( 'request', 'addcategory') # data is list of strings MERGE_CATEGORIES=( 'request', 'mergecategories') # data is list of strings ALL_WALLPAPERS=( 'response', 'wallpapers') # data is list of strings REQUEST_WALLPAPERS=( 'request', 'wallpapers') # no data ALL_RINGTONES=( 'response', 'ringtones' ) # data is list of strings REQUEST_RINGTONES=( 'request', 'ringtones') # no data PHONE_MODEL_CHANGED=( 'notification', 'phonemodelchanged') # data is phone module REQUEST_RINGTONE_INDEX=('request', 'ringtone-index') # no data ALL_RINGTONE_INDEX=('response', 'ringtone-index') # data is the ringtone-index dict REQUEST_PB_LOOKUP=('request', 'phonebook') # Request to lookup a number RESPONSE_PB_LOOKUP=('response', 'phonebook') # Response to the request MEDIA_NAME_CHANGED=('notificaion', 'medianamechanged') # notify if name changed REQUEST_TAB_CHANGED=('notification', 'tabchanges') # request to change the main tab TODAY_ITEM_SELECTED=('notification', 'todayitemselected') # a Today item was selected REQUEST_TODAY_DATA=('request', 'todaydata') # request data for Today page RESPONSE_TODAY_DATA=('response', 'todaydata') # reponse data for Today page NEW_DATA_AVAILABLE=('notification', 'dataavailable') # new data available MIDNIGHT=('notification', 'midnight') # midnight had passed DR_RECORD=('notification', 'recorddata') # DR On DR_PLAY=('notification', 'playdata') # DR Playback DR_STOP=('notification', 'stop') # DR stop REQUEST_MEDIA_INFO=('request', 'mediainfo') # Request media item description RESPONSE_MEDIA_INFO=('response', 'mediainfo') # Response: list of strings (lines) REQUEST_MEDIA_OPEN=('request', 'mediaopen') # Request to open/launch a media item # MEDIA_NAME_CHANGED keys & types media_change_type='type' wallpaper_type='wallpaper' ringtone_type='ringtone' media_old_name='old_name' media_new_name='new_name' def subscribe(listener, topic): Publisher.subscribe(listener, topic) def unsubscribe(listener): Publisher.unsubscribe(listener) def publish(topic, data=None): Publisher.sendMessage(topic, data) bitpim-1.0.7+dfsg1/src/package.py0000644001616600161660000003405711054663334014721 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2003-2006 Roger Binns ### Copyright (C) 2003-2004 Steven Palm ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: package.py 4702 2008-08-26 02:13:48Z djpham $ # This file provides the packaging definitions used by the buildrelease system import sys import os import os.path import shutil import version def sanitycheck(): "Check all dependencies are present and at the correct version" print "=== Sanity check ===" print "svn location", if not "$HeadURL: https://bitpim.svn.sourceforge.net/svnroot/bitpim/releases/1.0.7/src/package.py $".split(":",1)[1].strip().startswith("https://bitpim.svn.sourceforge.net"): raise Exception("Needs to be checked out from https://bitpim.svn.sourceforge.net") print " OK" print "python version", if sys.version_info[:2]!=(2,5): raise Exception("Should be Python 2.5 - this is "+sys.version) print " OK" print "wxPython version", import wx if wx.VERSION[:4]!=(2,8,8,1): raise Exception("Should be wxPython 2.8.8.1. This is "+`wx.VERSION`) print " OK" print "wxPython is unicode build", if not wx.USE_UNICODE: raise Exception("You need a unicode build of wxPython") print " OK" if sys.platform!='win32': print "native.usb", import native.usb print " OK" print "pycrypto version", expect='2.0.1' import Crypto if Crypto.__version__!=expect: raise Exception("Should be %s version of pycrypto - you have %s" % (expect, Crypto.__version__)) print " OK" print "paramiko version", expect='1.7.4 (Desmond)' import paramiko if paramiko.__version__!=expect: raise Exception("Should be %s version of paramiko - you have %s" % (expect, paramiko.__version__)) print " OK" print "bitfling", import bitfling print " OK" print "pyserial", import serial print " OK" print "apsw", import apsw ver="3.5.9-r2" if apsw.apswversion()!=ver: raise Exception("Should be apsw version %s - you have %s" % (ver, apsw.apswversion())) print " OK" print "sqlite", ver="3.6.1" if apsw.sqlitelibversion()!=ver: raise Exception("Should be sqlite version %s - you have %s" % (ver, apsw.sqlitelibversion())) print " OK" print "jaro/winkler string matcher", import native.strings.jarow print " OK" # bsddb (Linux only, for evolution) if sys.platform=="linux2": print "bsddb ", import bsddb print " OK" # win32com.shell - See http://starship.python.net/crew/theller/moin.cgi/WinShell if sys.platform=='win32': import py2exe.mf as modulefinder # in py2exe < 0.6.4 use "import modulefinder" import win32com for p in win32com.__path__[1:]: modulefinder.AddPackagePath("win32com", p) for extra in ["win32com.shell"]: #,"win32com.mapi" __import__(extra) m = sys.modules[extra] for p in m.__path__[1:]: modulefinder.AddPackagePath(extra, p) print "=== All checks out ===" def resources(): """Get a list of the resources (images, executables, sounds etc) we ship @rtype: dict @return: The key for each entry in the dict is a directory name, and the value is a list of files within that directory""" tbl={} # list of files exts=[ '*.xy', '*.png', '*.ttf', '*.wav', '*.jpg', '*.css', '*.pdc', '*.ids'] if sys.platform=='win32': # on windows we also want the chm help file and the manifest needed to get Xp style widgets exts=exts+['*.chm', '*.manifest', '*.ico'] exts=exts+['helpers/*.exe','helpers/*.dll'] if sys.platform=='linux2': exts=exts+['helpers/*.lbin', '*.htb'] if sys.platform=='darwin': exts=exts+['helpers/*.mbin', '*.htb'] # list of directories to look in dirs=[ os.path.join('.', 'resources'), '.' ] # don't ship list dontship.append("pvconv.exe") # Qualcomm won't answer if I can ship this for wildcard in exts: for dir in dirs: for file in glob.glob(os.path.join(dir, wildcard)): if os.path.basename(file).lower() in dontship: continue d=os.path.dirname(file) if not tbl.has_key(d): tbl[d]=[] tbl[d].append(file) files=[] for i in tbl.keys(): files.append( (i, tbl[i]) ) return files def isofficialbuild(): "Work out if this is an official build" import socket h=socket.gethostname().lower() # not built by rogerb (or stevep/n9yty) are unofficial return h in ('rh9bitpim.rogerbinns.com', "roger-ba470eb54", "rogerbmac.rogerbinns.com", # Joe's build machines "tinyone", "tiny2one", # Sean's "leviathan.local", ) def ensureofficial(): """If this is not an official build then ensure that version.vendor doesn't say it is""" # First do a freeze version.__freeze() print "Reloading version" reload(version) officialbuild=isofficialbuild() if officialbuild and version.vendor=='unofficial': vendor='official' elif not officialbuild and version.vendor=='official': vendor='unofficial' else: vendor=None if vendor: # so modify file versionpy=os.path.join(os.path.dirname(__file__), "version.py") out=[] for line in open(versionpy, "rt"): if line.startswith('vendor="'): line='vendor="$%s %s $"\n' % ("Id:", vendor) out.append(line) open(versionpy, "wt").write("".join(out)) reload(version) def getversion(): return version.version def setversion(versionstring, vendorstring='Test'): version.setversion(versionstring, vendorstring) import phones import encodings import glob def getallencodingsmodules(): # work-around for cx_freeze: add all encodings modules _res=[] _dir=os.path.dirname(encodings.__file__) _glob_name=os.path.join(_dir, '*.py') _modules=[os.path.basename(os.path.splitext(x)[0]) for x in glob.glob(_glob_name) \ if os.path.basename(x) != '__init__.py'] for _key in _modules: # collect what we have try: _mod_name='encodings.'+_key __import__(_mod_name) _res.append(_mod_name) except (ImportError,AttributeError): pass return _res lazyimportmodules=['email.iterators'] if sys.platform=='darwin': lazyimportmodules.append('Carbon.CF') elif sys.platform=='linux2': try: import _md5, _sha lazyimportmodules.append('_md5') lazyimportmodules.append('_sha') except ImportError: pass def getcxfreezeoptions(defaults): global lazyimportmodules defaults.update( { 'app': [{'script': 'src/bp.py', 'dest_base': 'bitpim'}], } ) defaults['options']['cxfreeze']['includes']=phones.getallmodulenames()+\ getallencodingsmodules()+\ lazyimportmodules return defaults def getpy2appoptions(defaults): global lazyimportmodules defaults.update( { 'app': [{'script': 'src/bp.py',}], } ) defaults['options']['py2app']['includes']=phones.getallmodulenames()+\ lazyimportmodules defaults['options']['py2app']['plist']['CFBundleHelpBookFolder']="BitPim Help" defaults['options']['py2app']['plist']['CFBundleHelpBookName']="BitPim Help" return defaults def getpy2exeoptions(defaults): global lazyimportmodules defaults.update( { 'windows': [{ 'script': 'src/bp.py', 'dest_base': 'bitpimw', }], 'console': [{ 'script': 'src/bp.py', 'dest_base': 'bitpim', }], } ) defaults['options']['py2exe']['includes']=phones.getallmodulenames()+\ lazyimportmodules defaults['options']['py2exe']['compressed']=0 # make setup.exe smaller but installed code larger return defaults udevrules_filename='60-bitpim.rules' udevrules_line='ACTION=="add", SYSFS{idProduct}=="%04x", SYSFS{idVendor}=="%04x", RUN+="/usr/bin/bpudev $env{DEVNAME} $number $sysfs{devnum}"' from common import importas def generate_udevrules(): """Generate the udev rules file based on all the known VIDs and PIDs""" global udevrules_filename, udevrules_line _ids={} for _f in phones.getallmodulenames(): _profile=importas(_f) if hasattr(_profile.Profile, 'usbids'): for _id in _profile.Profile.usbids: _ids[_id]=True _rules=[] for _entry in _ids: _rules.append(udevrules_line%(_entry[1], _entry[0])) _f=file('resources/%s'%udevrules_filename, 'wt').write('\n'.join(_rules)) def copyresources(destdir): if sys.platform=='linux2': generate_udevrules() import packageutils packageutils.copysvndir('resources', os.path.join(destdir, 'resources'), resourcefilter) packageutils.copysvndir('helpers', os.path.join(destdir, 'helpers'), resourcefilter) def resourcefilter(srcfilename, destfilename): global udevrules_filename exts=[ '.xy', '.png', '.ttf', '.wav', '.jpg', '.css', '.pdc', '.ids', '.ico'] files=[] if sys.platform=='win32': # on windows we also want the chm help file exts=exts+['.chm', '.exe', '.dll'] if sys.platform=='linux2': exts=exts+['.lbin', '.htb'] files+=['bpudev', udevrules_filename] if sys.platform=='darwin': exts=exts+['.mbin', '.htb'] if os.path.splitext(srcfilename)[1] in exts or \ os.path.basename(srcfilename) in files: return srcfilename, destfilename return None def build_dependences(): # build modules import buildmodules # rebuild all the prototocol (*.p) files import protogen for f in glob.glob("src/phones/*.p"): protogen.processfile(f, f+"y") def finalize(destdir): if sys.platform=='win32': for f in ("w9xpopen.exe",): if os.path.exists(os.path.join(destdir, f)): os.remove(os.path.join(destdir, f)) if sys.platform=='darwin': # do apple help import zipfile helpdir=os.path.join(destdir, "English.lproj", "BitPim Help") os.makedirs(helpdir) f=zipfile.ZipFile(os.path.join(destdir, "resources", "bitpim.htb"), "r") for name in f.namelist(): if os.path.splitext(name)[1] in ('.htm', '.html', '.jpg', '.png'): open(os.path.join(helpdir, name), "wb").write(f.read(name)) os.chmod(os.path.join(helpdir, name), 0444) else: print "skipping help file",name # the idiots at apple decided to make it impossible to automate the help indexer # how about giving it command line options? v=os.popen("sw_vers -productVersion", "r").read() if v.startswith("10.3"): res=os.system("open -a \"Apple Help Indexing Tool\" \""+helpdir+"\"") assert res==0 # we do this stupid loop monitoring cpu consumption and once it is # unchanged for 2 seconds, assume that the indexing is complete print "Waiting for indexing tool to stop by monitoring CPU consumption" import time lastval="" val="x" pid=0 while val!=lastval: print ".", sys.stdout.flush() time.sleep(2) for line in os.popen("ps cx", "r"): line=line.split() line=line[:4]+[" ".join(line[4:])] if line[4]!="Apple Help Indexing Tool": continue pid=line[0] lastval=val val=line[3] break print "\nIt would appear to be done" os.system("kill "+pid) elif v.startswith("10.4"): #use Help Indexer res=os.system("\"/Developer/Applications/Utilities/Help Indexer.app/Contents/MacOS/Help Indexer\" \""+helpdir+"\" -PantherIndexing YES -Tokenizer 1 -ShowProgress YES -TigerIndexing YES") assert res==0 # copy the css file in shutil.copy2(os.path.join(destdir, "resources", "bitpim.css"), os.path.join(helpdir, "..")) # don't need the wx style help any more os.remove(os.path.join(destdir, "resources", "bitpim.htb")) if sys.platform!='win32': os.system("find \""+destdir+"\" -depth -print0 | xargs -0 chmod a-w") def getvals(): "Return various values about this product" res={ 'NAME': version.name, 'VERSION': version.version, 'RELEASE': version.release, 'DQVERSION': version.dqverstr, 'COMMENTS': "Provided under the GNU Public License (GPL)", 'DESCRIPTION': "Open Source Mobile Phone Tool", 'COPYRIGHT': "Copyright (C) 2003-2006 The BitPim developers", 'URL': version.url, 'SUPPORTURL': "http://www.bitpim.org/help/support.htm", 'GUID': "{FA61D601-A0FC-48BD-AE7A-54946BCD7FB6}", 'VENDOR': version.vendor, 'ISSFILE': 'packaging/bitpim.iss', 'SPECFILE': 'packaging/bitpim.spec', } if sys.platform=='win32': res['ICONFILE']="packaging/bitpim.ico" if sys.platform=="darwin": res['GUID']='org.bitpim.bitpim' # Java style less opaque than the guid style above! res['ICONFILE']="packaging/bitpim.icns" # prefix with macos versiopn v=os.popen("sw_vers -productVersion", "r").read() if v.startswith("10.3"): res['OUTFILEPREFIX']='PANTHER-' elif v.startswith("10.4"): res['OUTFILEPREFIX']='TIGER-' elif v.startswith("10.2"): res['OUTFILEPREFIX']='JAGUAR-' elif v.startswith("10.5"): res['OUTFILEPREFIX']='LEOPARD-' return res bitpim-1.0.7+dfsg1/src/outlook_notes.py0000644001616600161660000002540310354725216016225 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: outlook_notes.py 2703 2005-12-29 09:21:18Z djpham $ "Deals with Outlook Notes import stuff" # System modules # wxPython modules import wx # BitPim modules import common_calendar import memo import outlook_calendar #------------------------------------------------------------------------------- class OutlookNotesImportData(outlook_calendar.OutlookCalendarImportData): _data_keys=[ # (Outlook field, MemoEntry field, convertor function) ('Subject', 'subject', None), ('Body', 'text', None), ('Categories', 'categories', outlook_calendar.convert_categories), ('LastModificationTime', 'date', outlook_calendar.to_bp_date), ] _default_filter={ 'start': None, 'end': None, 'categories': None, } _data_item_class=memo.MemoEntry _default_folder_type='notes' def __init__(self, outlook): self._outlook=outlook self._data=[] self._error_list=[] self._folder=None self._filter=self._default_filter self._total_count=0 self._current_count=0 self._update_dlg=None def _accept(self, e): # check for the date _date=e['date'][:3] if self._filter['start'] is not None and \ _dateself._filter['end'][:3]: return False c=self._filter.get('categories', None) if not c: # no categories specified => all catefories allowed. return True if [x for x in e['categories'] if x in c]: return True return False def _populate_entry(self, entry, memo_entry): memo_entry.subject=entry.get('subject', None) memo_entry.text=entry.get('text', '') if entry.get('date', None): memo_entry.set_date_isostr('%04d%02d%02dT%02d%02d00'%entry['date']) v=[] for k in entry.get('categories', []): v.append({ 'category': k }) memo_entry.categories=v def get(self): res={} for k in self._data: if self._accept(k): _e=self._data_item_class() self._populate_entry(k, _e) res[_e.id]=_e return res def get_display_data(self): cnt=0 res={} for k in self._data: if self._accept(k): res[cnt]=k cnt+=1 return res def read_update(self, item, dict, data_obj): self._current_count += 1 if self._update_dlg: self._update_dlg.Update(100*self._current_count/self._total_count) return True def read(self, folder=None, update_flg=None): # folder from which to read if folder is not None: self._folder=folder if self._folder is None: self._folder=self._outlook.getfolderfromid('', True, self._default_folder_type) self._update_dlg=update_flg self._total_count=self._folder.Items.Count self._current_count=0 self._data, self._error_list=self._outlook.getdata(self._folder, self._data_keys, {}, self, self.read_update) def set_folder(self, f): if f is None: # default folder self._folder=self._outlook.getfolderfromid('', True, self._default_folder_type) else: self._folder=f #------------------------------------------------------------------------------- class FilterDialog(wx.Dialog): _has_complete_option=False def __init__(self, parent, id, caption, categories, style=wx.DEFAULT_DIALOG_STYLE): super(FilterDialog, self).__init__(parent, id, title=caption, style=style) # the main box sizer bs=wx.BoxSizer(wx.VERTICAL) # the flex grid sizers for the editable items main_fgs=wx.FlexGridSizer(0, 1, 0, 0) fgs=wx.FlexGridSizer(3, 2, 0, 5) fgs1=wx.FlexGridSizer(0, 1, 0, 0) fgs2=wx.FlexGridSizer(0, 2, 0, 5) # set the date options self.SetDateControls(fgs, fgs1) # category option self.__cat_chkbox=wx.CheckBox(self, id=wx.NewId(), label='Categories:', style=wx.ALIGN_RIGHT) fgs2.Add(self.__cat_chkbox, 0, wx.ALIGN_RIGHT|wx.TOP|wx.BOTTOM, 5) for i,c in enumerate(categories): if not len(c): categories[i]='' self.__cats=wx.CheckListBox(self, choices=categories, size=(160, 50)) self.__cats.Disable() fgs2.Add(self.__cats, 0, wx.ALIGN_LEFT, 0) # completed items only option if self._has_complete_option: self._complete_chkbox=wx.CheckBox(self, -1, label='', style=wx.ALIGN_RIGHT) fgs2.Add(self._complete_chkbox, 0, wx.ALIGN_RIGHT|wx.TOP|wx.BOTTOM, 5) fgs2.Add(wx.StaticText(self, -1, 'Non-completed Items Only'), 0, wx.ALIGN_LEFT, 0) # add everything to the main sizer main_fgs.Add(fgs, 1, wx.EXPAND|wx.ALL, 0) main_fgs.Add(fgs1, 1, wx.EXPAND|wx.ALL, 0) main_fgs.Add(fgs2, 1, wx.EXPAND|wx.ALL, 0) bs.Add(main_fgs, 1, wx.EXPAND|wx.ALL, 5) # the buttons bs.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5) bs.Add(self.CreateButtonSizer(wx.OK|wx.CANCEL), 0, wx.ALIGN_CENTRE|wx.ALL, 5) # event handles wx.EVT_CHECKBOX(self, self._start_date_chkbox.GetId(), self.OnCheckBox) wx.EVT_CHECKBOX(self, self._end_date_chkbox.GetId(), self.OnCheckBox) wx.EVT_CHECKBOX(self, self.__cat_chkbox.GetId(), self.OnCheckBox) # all done self.SetSizer(bs) self.SetAutoLayout(True) bs.Fit(self) def _set_cats(self, chk_box, c, data): if data is None: chk_box.SetValue(False) c.Disable() else: chk_box.SetValue(True) c.Enable() for i,d in enumerate(data): if not len(d): data[i]='' for i in range(c.GetCount()): c.Check(i, c.GetString(i) in data) def OnCheckBox(self, evt): evt_id=evt.GetId() if evt_id==self._start_date_chkbox.GetId(): w1,w2=self._start_date_chkbox, self._start_date elif evt_id==self._end_date_chkbox.GetId(): w1,w2=self._end_date_chkbox, self._end_date else: w1,w2=self.__cat_chkbox, self.__cats if w1.GetValue(): w2.Enable() else: w2.Disable() def SetDateControls(self, fgs, fgs1): self._start_date_chkbox=wx.CheckBox(self, id=wx.NewId(), label='Start Date:', style=wx.ALIGN_RIGHT) fgs.Add(self._start_date_chkbox, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTRE_VERTICAL, 0) self._start_date=wx.calendar.CalendarCtrl(self, -1, wx.DateTime_Now(), style = wx.calendar.CAL_SUNDAY_FIRST | wx.calendar.CAL_SEQUENTIAL_MONTH_SELECTION) self._start_date.Disable() fgs.Add(self._start_date, 1, wx.ALIGN_LEFT, 5) self._end_date_chkbox=wx.CheckBox(self, id=wx.NewId(), label='End Date:', style=wx.ALIGN_RIGHT) fgs.Add(self._end_date_chkbox, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTRE_VERTICAL, 0) self._end_date=wx.calendar.CalendarCtrl(self, -1, wx.DateTime_Now(), style = wx.calendar.CAL_SUNDAY_FIRST | wx.calendar.CAL_SEQUENTIAL_MONTH_SELECTION) self._end_date.Disable() fgs.Add(self._end_date, 1, wx.ALIGN_LEFT, 5) def _set_date(self, chk_box, cal, d): if d is None: chk_box.SetValue(False) cal.Disable() else: chk_box.SetValue(True) cal.Enable() dt=wx.DateTime() dt.Set(d[2], year=d[0], month=d[1]-1) cal.SetDate(dt) def _set_complete(self, v): if self._has_complete_option: self._complete_chkbox.SetValue(v) def set(self, data): self._set_date(self._start_date_chkbox, self._start_date, data.get('start', None)) self._set_date(self._end_date_chkbox, self._end_date, data.get('end', None)) self._set_cats(self.__cat_chkbox, self.__cats, data.get('categories', None)) self._set_complete(data.get('non_completed', False)) def get(self): r={} if self._start_date_chkbox.GetValue(): dt=self._start_date.GetDate() r['start']=(dt.GetYear(), dt.GetMonth()+1, dt.GetDay()) else: r['start']=None if self._end_date_chkbox.GetValue(): dt=self._end_date.GetDate() r['end']=(dt.GetYear(), dt.GetMonth()+1, dt.GetDay()) else: r['end']=None if self.__cat_chkbox.GetValue(): c=[] for i in range(self.__cats.GetCount()): if self.__cats.IsChecked(i): s=self.__cats.GetString(i) if s=='': c.append('') else: c.append(s) r['categories']=c else: r['categories']=None if self._has_complete_option: r['non_completed']=self._complete_chkbox.GetValue() return r #------------------------------------------------------------------------------- class OutlookImportNotesDialog(outlook_calendar.OutlookImportCalDialog): _column_labels=[ ('date', 'Last Changed Date', 200, common_calendar.bp_date_str), ('subject', 'Subject', 400, None), ('categories', 'Category', 200, common_calendar.category_str) ] _config_name='import/notes/outlookdialog' _browse_label='Outlook Notes Folder:' _progress_dlg_title='Outlook Notes Import' _error_dlg_title='Outlook Notes Import Error' _error_dlg_text='Outlook Notes Items that failed to import:' _data_class=OutlookNotesImportData _filter_dlg_class=FilterDialog bitpim-1.0.7+dfsg1/src/playlist.py0000644001616600161660000003726110616214535015165 0ustar amuamu### BITPIM ### ### Copyright (C) 2005 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: playlist.py 4209 2007-05-02 23:06:05Z djpham $ """ Code to handle Playlist items. The playlist data includes 2 components: the list of available songs, and the playlist items. The format of the Playlist items is standardized. It is a list of dict which has the following standard fields: name: string=the name of the play list type: string=the type of this play list. Current supported types are mp3 and wma. songs: [ 'song name', ... ] To implement Playlist read/write for a phone module: 1. Add 2 entries into Profile._supportedsyncs: ... ('playlist', 'read', 'OVERWRITE'), ('playlist', 'write', 'OVERWRITE'), 2. Implement the following 2 methods in your Phone class: def getplaylist(self, result) def saveplaylist(self, result, merge) The result dict should have: results[playlist.masterlist_key]=['song name 1', 'song name 2', ...] results[playlist.playlist_key=[playlist.PlaylistEntry, playlist.PlaylistEntry, ..] """ import wx import wx.gizmos as gizmos import database import helpids import guihelper import widgets # module constants-------------------------------------------------------------- playlist_key='playlist' masterlist_key='masterlist' playlists_list='playlists' mp3_type='mp3' wma_type='wma' playlist_type=(mp3_type, wma_type) #------------------------------------------------------------------------------- class MasterListDataObject(database.basedataobject): _knownproperties=[] _knownlistproperties=database.basedataobject._knownlistproperties.copy() _knownlistproperties.update({ 'masterlist': ['name'] }) def __init__(self, data=None): if data is None or not isinstance(data, (list, tuple)): return self.update({'masterlist': [{ 'name': x } for x in data] }) masterlistobjectfactory=database.dataobjectfactory(MasterListDataObject) #------------------------------------------------------------------------------- class PlaylistDataObject(database.basedataobject): _knownproperties=[] _knownlistproperties=database.basedataobject._knownlistproperties.copy() _knownlistproperties.update( { 'playlist': ['name'] }) def __init__(self, data=None): if data is None or not isinstance(data, (list, tuple)): return self.update({'playlist': [{'name': x} for x in data]}) playlistobjectfactory=database.dataobjectfactory(PlaylistDataObject) #------------------------------------------------------------------------------- class PlaylistEntryDataObject(database.basedataobject): _knownproperties=['type'] _knownlistproperties=database.basedataobject._knownlistproperties.copy() _knownlistproperties.update({ 'songs': ['name']}) def __init__(self, data=None): if data is None or not isinstance(data, PlaylistEntry): return self.update(data.get_db_dict()) playlistentryobjectfactory=database.dataobjectfactory(PlaylistEntryDataObject) #------------------------------------------------------------------------------- class PlaylistEntry(object): def __init__(self): self._data={ 'serials': [] } def get(self): return copy.deepcopy(self._data, {}) def set(self, d): self._data={} self._data.update(d) def get_db_dict(self): return { 'type': self.pl_type, 'songs': [{ 'name': x } for x in self.songs] } def set_db_dict(self, d): # name needs to set separately self.pl_type=d.get('type', None) self.songs=[x['name'] for x in d.get('songs', [])] def _set_or_del(self, key, v, v_list=[]): if v is None or v in v_list: if self._data.has_key(key): del self._data[key] else: self._data[key]=v def _get_name(self): return self._data.get('name', '') def _set_name(self, v): self._set_or_del('name', v, ['']) name=property(fget=_get_name, fset=_set_name) def _get_type(self): return self._data.get('type', '') def _set_type(self, v): self._set_or_del('type', v, ['']) pl_type=property(fget=_get_type, fset=_set_type) def _get_songs(self): return self._data.get('songs', []) def _set_songs(self, v): self._set_or_del('songs', v, [[]]) songs=property(fget=_get_songs, fset=_set_songs) #------------------------------------------------------------------------------- class PlaylistWidget(wx.Panel, widgets.BitPimWidget): def __init__(self, mainwindow, parent): super(PlaylistWidget, self).__init__(parent, -1) self._mw=mainwindow self._data=[] self._master=[] self.ignoredirty=False self.dirty=False # main box sizer vbs=wx.BoxSizer(wx.VERTICAL) # horizontal sizer for the main contents hbs=wx.BoxSizer(wx.HORIZONTAL) # the list box self._item_list=gizmos.EditableListBox(self, -1, 'Play Lists:', style=gizmos.EL_ALLOW_NEW|\ gizmos.EL_ALLOW_EDIT|\ gizmos.EL_ALLOW_DELETE) self._item_list.GetUpButton().Show(False) self._item_list.GetDownButton().Show(False) self._item_list_w=self._item_list.GetListCtrl() hbs.Add(self._item_list, 1, wx.EXPAND|wx.ALL, border=5) hbs.Add(wx.StaticLine(self, -1, style=wx.LI_VERTICAL), 0, wx.EXPAND|wx.ALL, 5) # the detailed panel hbs1=wx.BoxSizer(wx.HORIZONTAL) # the playlist _vbs1=wx.BoxSizer(wx.VERTICAL) self._pl_list=gizmos.EditableListBox(self, -1, "Play List Content:", style=gizmos.EL_ALLOW_DELETE) self._pl_list_w=self._pl_list.GetListCtrl() _vbs1.Add(self._pl_list, 1, wx.EXPAND, 0) self._count_lbl=wx.StaticText(self, -1, '') _vbs1.Add(self._count_lbl, 0, wx.EXPAND|wx.TOP, 5) hbs1.Add(_vbs1, 1, wx.EXPAND|wx.ALL, 5) _add_btn=wx.Button(self, -1, '<-Add') hbs1.Add(_add_btn, 0, wx.ALL, 5) self._master_list=gizmos.EditableListBox(self, -1, 'Available Songs:', style=0) self._master_list_w=self._master_list.GetListCtrl() self._master_list.GetUpButton().Show(False) self._master_list.GetDownButton().Show(False) hbs1.Add(self._master_list, 1, wx.EXPAND|wx.ALL, 5) hbs.Add(hbs1, 3, wx.EXPAND|wx.ALL, 5) # the bottom buttons hbs1=wx.BoxSizer(wx.HORIZONTAL) self._save_btn=wx.Button(self, wx.ID_SAVE) self._revert_btn=wx.Button(self, wx.ID_REVERT_TO_SAVED) help_btn=wx.Button(self, wx.ID_HELP) hbs1.Add(self._save_btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5) hbs1.Add(help_btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5) hbs1.Add(self._revert_btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5) # all done vbs.Add(hbs, 1, wx.EXPAND|wx.ALL, 5) vbs.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5) vbs.Add(hbs1, 0, wx.ALIGN_CENTRE|wx.ALL, 5) self.SetSizer(vbs) self.SetAutoLayout(True) vbs.Fit(self) # event handlers wx.EVT_LIST_ITEM_SELECTED(self._item_list, self._item_list_w.GetId(), self.OnPlaylistSelected) wx.EVT_LIST_BEGIN_LABEL_EDIT(self._item_list, self._item_list_w.GetId(), self.OnStartLabelChanged) wx.EVT_LIST_END_LABEL_EDIT(self._item_list, self._item_list_w.GetId(), self.OnLabelChanged) wx.EVT_BUTTON(self, _add_btn.GetId(), self.OnAdd2Playlist) wx.EVT_BUTTON(self, self._save_btn.GetId(), self.OnSave) wx.EVT_BUTTON(self, self._revert_btn.GetId(), self.OnRevert) wx.EVT_LIST_DELETE_ITEM(self._item_list, self._item_list_w.GetId(), self.OnMakeDirty) wx.EVT_LIST_DELETE_ITEM(self._pl_list, self._pl_list_w.GetId(), self.OnMakeDirty) wx.EVT_BUTTON(self, wx.ID_HELP, lambda _: wx.GetApp().displayhelpid(helpids.ID_TAB_PLAYLIST)) wx.EVT_BUTTON(self._pl_list, self._pl_list.GetUpButton().GetId(), self._OnUpDown) wx.EVT_BUTTON(self._pl_list, self._pl_list.GetDownButton().GetId(), self._OnUpDown) # populate data self._populate() # turn on dirty flag self.setdirty(False) def setdirty(self, val): if self.ignoredirty: return self.dirty=val self._item_list.Enable(not self.dirty) self._save_btn.Enable(self.dirty) self._revert_btn.Enable(self.dirty) def _clear(self, clear_master=True): self._item_list_w.DeleteAllItems() self._pl_list_w.DeleteAllItems() if clear_master: self._master_list_w.DeleteAllItems() def _populate_master(self): self._master_list.SetStrings(self._master) def _populate_pl_list(self): self._item_list_w.DeleteAllItems() if self._data: self._item_list.SetStrings([e.name for e in self._data]) else: self._item_list.SetStrings([]) def _name2idx(self, name): for i,e in enumerate(self._data): if e.name==name: return i def _populate_each(self, name): self._pl_list_w.DeleteAllItems() self._count_lbl.SetLabel('') if name is None: return self.ignoredirty=True _list_idx=self._name2idx(name) if _list_idx is not None: self._pl_list.SetStrings(self._data[_list_idx].songs) self._count_lbl.SetLabel('Playlist Size: %d'%len(self._data[_list_idx].songs)) self.ignoredirty=False if not self.dirty: self.setdirty(False) def _populate(self): self._populate_master() self._populate_pl_list() def populate(self, dict): self._data=dict.get(playlist_key, []) self._master=dict.get(masterlist_key, []) self._clear() self._populate() def _save_to_db(self, dict): # first, save the master list of songs. db_rr={ masterlist_key: MasterListDataObject(dict.get(masterlist_key, [])) } database.ensurerecordtype(db_rr, masterlistobjectfactory) self._mw.database.savemajordict(masterlist_key, db_rr) # now, save the list of playlists _pl_list=dict.get(playlist_key, []) db_rr={ playlists_list: PlaylistDataObject([x.name for x in _pl_list]) } database.ensurerecordtype(db_rr, playlistobjectfactory) self._mw.database.savemajordict(playlists_list, db_rr) # save the playlist entries db_rr={ } for e in _pl_list: db_rr[e.name]=PlaylistEntryDataObject(e) database.ensurerecordtype(db_rr, playlistentryobjectfactory) self._mw.database.savemajordict(playlist_key, db_rr) def populatefs(self, dict): self._save_to_db(dict) return dict def getfromfs(self, result): _master_dict=self._mw.database.getmajordictvalues(masterlist_key, masterlistobjectfactory) _master_dict=_master_dict.get(masterlist_key, {}) result.update( { masterlist_key: \ [x['name'] for x in _master_dict.get(masterlist_key, [])] }) _pl_list_dict=self._mw.database.getmajordictvalues(playlists_list, playlistobjectfactory) _pl_list_dict=_pl_list_dict.get(playlists_list, {}) _pl_entries_dict=self._mw.database.getmajordictvalues(playlist_key, playlistentryobjectfactory) _pl_list=[] for e in _pl_list_dict.get(playlist_key, []): _pl_entry=_pl_entries_dict.get(e['name'], None) if _pl_entry: _entry=PlaylistEntry() _entry.name=e['name'] _entry.type=_pl_entry['type'] _entry.songs=[x['name'] for x in _pl_entry.get('songs', [])] _pl_list.append(_entry) result.update({playlist_key: _pl_list }) return result # called from various widget update callbacks def _OnUpDown(self, evt): self.OnMakeDirty() evt.Skip() def OnMakeDirty(self, _=None): """A public function you can call that will set the dirty flag""" if self.dirty or self.ignoredirty: # already dirty, no need to make it worse return self.setdirty(True) def OnPlaylistSelected(self, evt): self._populate_each(evt.GetLabel()) evt.Skip() def OnDirty(self, _): self.setdirty(True) def _change_playlist_name(self, new_name): for e in self._data: if e.name==self._old_name: e.name=new_name def _add_playlist_name(self, new_name): _entry=PlaylistEntry() _entry.name=new_name self._data.append(_entry) def OnStartLabelChanged(self, evt): self._old_name=evt.GetLabel() def OnLabelChanged(self, evt): _new_name=evt.GetLabel() if _new_name: self.setdirty(True) if self._old_name: self._change_playlist_name(_new_name) else: self._add_playlist_name(_new_name) evt.Skip() # kinda redundant given that the playlist does not support the add/delet controls def GetDeleteInfo(self): return guihelper.ART_DEL_TODO, "Delete Playlist" def GetAddInfo(self): return guihelper.ART_ADD_TODO, "Add Playlist" def OnAdd2Playlist(self, _): _pl_idx=self._item_list_w.GetNextItem(-1, state=wx.LIST_STATE_SELECTED) _master_idx=self._master_list_w.GetNextItem(-1, state=wx.LIST_STATE_SELECTED) if _pl_idx==-1 or _master_idx==-1: # no selection return _entry_idx=self._name2idx(self._item_list_w.GetItemText(_pl_idx)) if _entry_idx is not None: self.setdirty(True) self._pl_list.SetStrings(self._pl_list.GetStrings()+\ [self._master_list_w.GetItemText(_master_idx)]) def _build_playlist(self): _pl_list=[] for _name in self._item_list.GetStrings(): if _name: _idx=self._name2idx(_name) if _idx is not None: _pl_list.append(self._data[_idx]) return _pl_list def OnSave(self, _): # save the current playlist _pl_idx=self._item_list_w.GetNextItem(-1, state=wx.LIST_STATE_SELECTED) if _pl_idx!=-1: _entry_idx=self._name2idx(self._item_list_w.GetItemText(_pl_idx)) if _entry_idx is not None: self._data[_entry_idx].songs=self._pl_list.GetStrings() # create data dicts & save them to db self._save_to_db({ masterlist_key: self._master_list.GetStrings(), playlist_key: self._build_playlist() }) self.setdirty(False) def OnRevert(self, _): self._item_list.Enable() _pl_idx=self._item_list_w.GetNextItem(-1, state=wx.LIST_STATE_SELECTED) # discard all changes _res={} self.getfromfs(_res) self.populate(_res) if _pl_idx!=wx.NOT_FOUND: self._item_list_w.SetItemState(_pl_idx, wx.LIST_STATE_SELECTED, wx.LIST_MASK_STATE) self.setdirty(False) def getdata(self, dict): dict[masterlist_key]=self._master_list.GetStrings() dict[playlist_key]=self._build_playlist() return dict bitpim-1.0.7+dfsg1/src/fixedwxpTag.py0000644001616600161660000002253510113043440015577 0ustar amuamu# This file has been modified from the original from the wxPython # distribution and remains under that license # # - uses the 'import wx' style naming # - you can use other modules to get the values in the id tag # (in the library version you have to get it from the same module # as you get the widget from) # # Hopefully this issue can be fixed in the wxPython code and this # file removed #---------------------------------------------------------------------- # Name: wxPython.lib.wxpTag # Purpose: A wxHtmlTagHandler that knows how to build and place # wxPython widgets onto web pages. # # Author: Robin Dunn # # Created: 13-Sept-1999 # RCS-ID: $Id: fixedwxpTag.py 1527 2004-08-25 08:00:32Z rogerb $ # Copyright: (c) 1999 by Total Control Software # Licence: wxWindows license #---------------------------------------------------------------------- ''' wxPython.lib.wxpTag This module contains a wxHtmlTagHandler that knows how to build and place wxPython widgets onto wxHtmlWindow web pages. You don\'t need to use anything in this module directly, just importing it will create the tag handler and add it to any wxHtmlWinParsers created from that time forth. Tags of the following form are recognised: Both the begining and ending WXP tags are required. In the future support will be added for another tag that can be embedded between the two begining and ending WXP tags and will facilitate calling methods of the widget to help initialize it. Additionally, support may be added to fetch the module from a web server as is done with java applets. ''' #---------------------------------------------------------------------- import wx import wx.html import types import common #---------------------------------------------------------------------- WXPTAG = 'WXP' PARAMTAG = 'PARAM' #---------------------------------------------------------------------- class wxpTagHandler(wx.html.HtmlWinTagHandler): def __init__(self): wx.html.HtmlWinTagHandler.__init__(self) self.ctx = None def GetSupportedTags(self): return WXPTAG+','+PARAMTAG def HandleTag(self, tag): name = tag.GetName() if name == WXPTAG: return self.HandleWxpTag(tag) elif name == PARAMTAG: return self.HandleParamTag(tag) else: raise ValueError, 'unknown tag: ' + name def HandleWxpTag(self, tag): # create a new context object self.ctx = _Context() # find and import the module modName = '' if tag.HasParam('MODULE'): modName = tag.GetParam('MODULE') if modName: self.ctx.classMod = _my_import(modName) else: self.ctx.classMod = wx # find and verify the class if not tag.HasParam('CLASS'): raise AttributeError, "WXP tag requires a CLASS attribute" className = tag.GetParam('CLASS') self.ctx.classObj = getattr(self.ctx.classMod, className) if type(self.ctx.classObj) not in ( types.ClassType, types.TypeType): raise TypeError, "WXP tag attribute CLASS must name a class" # now look for width and height width = -1 height = -1 if tag.HasParam('WIDTH'): width = tag.GetParam('WIDTH') if width[-1] == '%': self.ctx.floatWidth = int(width[:-1], 0) width = self.ctx.floatWidth else: width = int(width) if tag.HasParam('HEIGHT'): height = int(tag.GetParam('HEIGHT')) self.ctx.kwargs['size'] = wx.Size(width, height) # parse up to the closing tag, and gather any nested Param tags. self.ParseInner(tag) # create the object parent = self.GetParser().GetWindow() if parent: obj = apply(self.ctx.classObj, (parent,), self.ctx.kwargs) obj.Show(True) # add it to the HtmlWindow self.GetParser().GetContainer().InsertCell(wx.html.HtmlWidgetCell(obj, self.ctx.floatWidth)) self.ctx = None return True def HandleParamTag(self, tag): if not tag.HasParam('NAME'): return False name = tag.GetParam('NAME') value = "" if tag.HasParam('VALUE'): value = tag.GetParam('VALUE') # check for a param named 'id' if name == 'id': theID = -1 try: theID = int(value) except ValueError: theID = _getidvalue(self.ctx.classMod, value) value = theID # check for something that should be evaluated elif value[0] in '[{(' or value[:2] == 'wx': saveVal = value try: value = eval(value, self.ctx.classMod.__dict__) except: value = saveVal # do things the hard way # convert to wxColour elif value[0] == '#': try: red = int('0x'+value[1:3], 16) green = int('0x'+value[3:5], 16) blue = int('0x'+value[5:], 16) value = wx.Color(red, green, blue) except: pass self.ctx.kwargs[str(name)] = value return False #---------------------------------------------------------------------- # just a place to hold some values class _Context: def __init__(self): self.kwargs = {} self.width = -1 self.height = -1 self.classMod = None self.classObj = None self.floatWidth = 0 #---------------------------------------------------------------------- # Function to assist with importing packages def _my_import(name): mod = __import__(name) components = name.split('.') for comp in components[1:]: mod = getattr(mod, comp) return mod def _getidvalue(defaultmodule, name): # try name by itself try: return eval(name) except NameError: pass # ok, try to get it from the module try: return getattr(defaultmodule, name) except AttributeError: pass return common.getfullname(name) #---------------------------------------------------------------------- # Function to parse a param string (of the form 'item=value item2="value etc"' # and creates a dictionary def _param2dict(param): i = 0; j = 0; s = len(param); d = {} while 1: while i=s: break j = i while j=s: break word = param[i:j] i=j+1 if (param[i] == '"'): j=i+1 while j ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: common_calendar.py 4711 2008-09-27 21:04:32Z djpham $ "Common stuff for the Calendar Import functions" # system modules from __future__ import with_statement import calendar import copy import datetime import sys # wxPython modules import wx import wx.calendar import wx.lib.mixins.listctrl as listmix # local modules import database import guihelper import guiwidgets import pubsub no_end_date=(4000, 1, 1, 0, 0) def bp_repeat_str(dict, v): if v is None: return '' return v def bp_date_str(dict, v): try: if v[0]>=no_end_date[0]: # no-end date, don't display it if dict.get('allday', False): return '' else: return '%02d:%02d'%v[3:] if dict.get('allday', False): return '%04d-%02d-%02d'%v[:3] else: return '%04d-%02d-%02d %02d:%02d'% v except (ValueError, TypeError): return '' except: if __debug__: raise return '' def bp_alarm_str(dict, v): try: if dict.get('alarm', False): v=dict.get('alarm_value', 0) if v: return '-%d min'%v else: return 'Ontime' else: return '' except (ValueError, TypeError): return '' except: if __debug__: raise return '' def category_str(dict, v): try: s='' for d in v: if len(d): if len(s): s+=', '+d else: s=d return s except (ValueError, TypeError): return '' except: if __debug__: raise return '' #------------------------------------------------------------------------------- class ImportDataSource(object): # how to define, and retrieve calendar import data source # subclass might want to set these message_str='Select the source' wildcard='*.*' def __init__(self): self._source=None def browse(self, parent=None): # how to select a source, default to select a file with guihelper.WXDialogWrapper(wx.FileDialog(parent, self.message_str, wildcard=self.wildcard), True) as (dlg, retcode): if retcode==wx.ID_OK: self._source=dlg.GetPath() def get(self): # return a source suitable for importing data return self._source def name(self): # return a string name for the source, default is the source itself return self._source or '' def _get_id(self): # return the ID string of this source (mainly for Outlook), # by default, just return the name return self.name() def _set_id(self, id): # set the ID of this source (mainly for Outlook), # by default, just set the source to it self._source=id id=property(fget=_get_id, fset=_set_id) #------------------------------------------------------------------------------- class PreviewDialog(wx.Dialog, listmix.ColumnSorterMixin): ID_ADD=wx.NewId() ID_MERGE=wx.NewId() def __init__(self, parent, id, title, col_labels, data={}, config_name=None, style=wx.CAPTION|wx.MAXIMIZE_BOX| \ wx.SYSTEM_MENU|wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER): wx.Dialog.__init__(self, parent, id=id, title=title, style=style) self.__col_labels=col_labels self.__config_name=config_name self.itemDataMap={} # main boxsizer main_bs=wx.BoxSizer(wx.VERTICAL) # add custom controls here self.getcontrols(main_bs) # create a data preview list with supplied column labels self.__list=wx.ListView(self, wx.NewId()) self.__image_list=wx.ImageList(16, 16) self.__ig_up=self.__image_list.Add(wx.ArtProvider_GetBitmap(wx.ART_GO_UP, wx.ART_OTHER, (16, 16))) self.__ig_dn=self.__image_list.Add(wx.ArtProvider_GetBitmap(wx.ART_GO_DOWN, wx.ART_OTHER, (16, 16))) self.__list.SetImageList(self.__image_list, wx.IMAGE_LIST_SMALL) li=wx.ListItem() li.m_mask=wx.LIST_MASK_TEXT | wx.LIST_MASK_IMAGE li.m_image=-1 for i, d in enumerate(self.__col_labels): # insert a column with specified name and width li.m_text=d[1] self.__list.InsertColumnInfo(i, li) self.__list.SetColumnWidth(i, d[2]) main_bs.Add(self.__list, 1, wx.EXPAND, 0) self.populate(data) # the Mixin sorter listmix.ColumnSorterMixin.__init__(self, len(col_labels)) # now the buttons self.getpostcontrols(main_bs) # handle events # all done self.SetSizer(main_bs) self.SetAutoLayout(True) main_bs.Fit(self) # save my own size, if specified if config_name is not None: guiwidgets.set_size(config_name, self) wx.EVT_SIZE(self, self.__save_size) def getcontrols(self, main_bs): # controls to be placed above the preview pane # by default, put nothing. pass def getpostcontrols(self, main_bs): # control to be placed below the preview pane # by default, just add the OK & CANCEL button main_bs.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5) main_bs.Add(self.CreateButtonSizer(wx.OK|wx.CANCEL), 0, wx.ALIGN_CENTRE|wx.ALL, 5) def populate(self, data): self.__list.DeleteAllItems() m={} m_count=0 for k in data: try: d=data[k] col_idx=None mm={} for i, l in enumerate(self.__col_labels): entry=d.get(l[0], None) s='' if l[3] is None: s=str(entry) else: s=l[3](d, entry) mm[i]=s if i: self.__list.SetStringItem(col_idx, i, s) else: col_idx=self.__list.InsertImageStringItem(sys.maxint, s, -1) self.__list.SetItemData(col_idx, m_count) m[m_count]=mm m_count += 1 except: # something wrong happened, drop this event if __debug__: raise self.itemDataMap=m def GetListCtrl(self): return self.__list def GetSortImages(self): return (self.__ig_dn, self.__ig_up) def __save_size(self, evt): if self.__config_name is not None: guiwidgets.save_size(self.__config_name, self.GetRect()) evt.Skip() #------------------------------------------------------------------------------- class FilterDataObject(database.basedataobject): _knownproperties=['rpt_events', 'no_alarm', 'alarm_override', 'ringtone', 'vibrate', 'alarm_value', 'preset_date' ] _knownlistproperties=database.basedataobject._knownlistproperties.copy() _knownlistproperties.update( {'categories': ['category'], 'start': ['year', 'month', 'day'], 'end': ['year', 'month', 'day'] }) def __init__(self, data=None): if data: self.update(data) filterobjectfactory=database.dataobjectfactory(FilterDataObject) #------------------------------------------------------------------------------- class FilterDialogBase(wx.Dialog): unnamed="Select:" def __init__(self, parent, id, caption, categories, style=wx.DEFAULT_DIALOG_STYLE): wx.Dialog.__init__(self, parent, id, title=caption, style=style) # the main box sizer bs=wx.BoxSizer(wx.VERTICAL) # the flex grid sizers for the editable items main_fgs=wx.FlexGridSizer(0, 1, 0, 0) fgs=wx.FlexGridSizer(3, 2, 0, 5) fgs1=wx.FlexGridSizer(0, 1, 0, 0) fgs2=wx.FlexGridSizer(0, 2, 0, 5) # set the date options self.SetDateControls(fgs, fgs1) # new repeat to single events option self._rpt_chkbox=wx.CheckBox(self, id=wx.NewId(), label='Repeat Events:', style=wx.ALIGN_RIGHT) self._rpt_chkbox.Disable() fgs.Add(self._rpt_chkbox, 0, wx.ALIGN_RIGHT|wx.TOP|wx.BOTTOM, 5) self._rpt_chkbox_text=wx.StaticText(self, -1, 'Import as multi-single events.') fgs.Add(self._rpt_chkbox_text, 0, wx.ALIGN_LEFT|wx.ALIGN_CENTRE, 0) self._rpt_chkbox_text.Disable() # alarm option choices=('Disable All Alarms', 'Use Alarm Settings From Calender', 'Set Alarm On All Events') self.__alarm_setting = wx.RadioBox(self, id=wx.NewId(), label="Select Alarm Settings For Imported Events", choices=choices, majorDimension=1, size=(280,-1)) fgs1.Add(self.__alarm_setting, 0, wx.ALIGN_CENTRE|wx.TOP|wx.BOTTOM, 5) #alarm vibrate self.__vibrate=wx.CheckBox(self, id=wx.NewId(), label='Alarm Vibrate:', style=wx.ALIGN_RIGHT) fgs2.Add(self.__vibrate, 0, wx.ALIGN_RIGHT|wx.TOP|wx.BOTTOM, 5) self.__vibrate_text=wx.StaticText(self, -1, 'Enable vibrate for alarms.') fgs2.Add(self.__vibrate_text, 0, wx.ALIGN_LEFT|wx.TOP|wx.BOTTOM, 5) # alarm settings self.__ringtone_text=wx.StaticText(self, -1, 'Alarm Ringtone:') fgs2.Add(self.__ringtone_text, 0, wx.ALIGN_RIGHT|wx.TOP|wx.BOTTOM, 5) self.__ringtone=wx.ComboBox(self, id=wx.NewId(), style=wx.CB_DROPDOWN|wx.CB_READONLY, choices=[self.unnamed], size=(160,-1)) fgs2.Add(self.__ringtone, 0, wx.ALIGN_LEFT|wx.TOP|wx.BOTTOM, 2) # alarm value self.__alarm_value_text=wx.StaticText(self, -1, 'Alert before (mins):') fgs2.Add(self.__alarm_value_text, 0, wx.ALIGN_RIGHT|wx.TOP|wx.BOTTOM, 5) self.__alarm_value=wx.lib.intctrl.IntCtrl(self, id=wx.NewId(), size=(50,-1), value=0, min=0, max=1000) fgs2.Add( self.__alarm_value, 0, wx.ALIGN_LEFT|wx.TOP|wx.BOTTOM, 2) # category option self.__cat_chkbox=wx.CheckBox(self, id=wx.NewId(), label='Categories:', style=wx.ALIGN_RIGHT) fgs2.Add(self.__cat_chkbox, 0, wx.ALIGN_RIGHT|wx.TOP|wx.BOTTOM, 5) for i,c in enumerate(categories): if not len(c): categories[i]='' self.__cats=wx.CheckListBox(self, choices=categories, size=(160, 50)) self.__cats.Disable() fgs2.Add(self.__cats, 0, wx.ALIGN_LEFT, 0) main_fgs.Add(fgs, 1, wx.EXPAND|wx.ALL, 0) main_fgs.Add(fgs1, 1, wx.EXPAND|wx.ALL, 0) main_fgs.Add(fgs2, 1, wx.EXPAND|wx.ALL, 0) bs.Add(main_fgs, 1, wx.EXPAND|wx.ALL, 5) # the buttons bs.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5) bs.Add(self.CreateButtonSizer(wx.OK|wx.CANCEL), 0, wx.ALIGN_CENTRE|wx.ALL, 5) # event handles wx.EVT_CHECKBOX(self, self._start_date_chkbox.GetId(), self.OnCheckBox) wx.EVT_CHECKBOX(self, self._end_date_chkbox.GetId(), self.OnCheckBox) wx.EVT_CHECKBOX(self, self.__cat_chkbox.GetId(), self.OnCheckBox) wx.EVT_RADIOBOX(self, self.__alarm_setting.GetId(), self.OnAlarmSetting) # Listen to changes in ringtones list pubsub.subscribe(self.OnRingtoneUpdates, pubsub.ALL_RINGTONES) # all done self.SetSizer(bs) self.SetAutoLayout(True) bs.Fit(self) def __del__(self): pubsub.unsubscribe(self.OnRingtoneUpdates) def ShowModal(self): # request ringtones from wx.CallAfter(pubsub.publish, pubsub.REQUEST_RINGTONES) # make the call once we are onscreen return wx.Dialog.ShowModal(self) def OnRingtoneUpdates(self, msg): "Receives pubsub message with ringtone list" tones=msg.data[:] #cur=self.Get() try: self.__ringtone.Clear() self.__ringtone.Append(self.unnamed) for p in tones: self.__ringtone.Append(p) rt=self.__ringtone.SetStringSelection(self.ringtone) except: self.ringtone=self.unnamed def __set_cats(self, chk_box, c, data): if data is None: chk_box.SetValue(False) c.Disable() else: chk_box.SetValue(True) c.Enable() for i,d in enumerate(data): if not len(d): data[i]='' for i in range(c.GetCount()): c.Check(i, c.GetString(i) in data) def __set_rpt(self, data): if self._start_date_chkbox.GetValue() and\ self._end_date_chkbox.GetValue(): self._rpt_chkbox.Enable() self._rpt_chkbox_text.Enable() self._rpt_chkbox.SetValue(data) else: self._rpt_chkbox.SetValue(False) self._rpt_chkbox.Disable() self._rpt_chkbox_text.Disable() def __set_alarm_fields(self, value): if value==0: self.__vibrate.Disable() self.__alarm_value.Disable() self.__ringtone.Disable() self.__vibrate_text.Disable() self.__alarm_value_text.Disable() self.__ringtone_text.Disable() elif value==1: self.__vibrate.Enable() self.__alarm_value.Disable() self.__ringtone.Enable() self.__vibrate_text.Enable() self.__alarm_value_text.Disable() self.__ringtone_text.Enable() else: self.__vibrate.Enable() self.__alarm_value.Enable() self.__ringtone.Enable() self.__vibrate_text.Enable() self.__alarm_value_text.Enable() self.__ringtone_text.Enable() def set_base(self, data): self.__set_rpt(data.get('rpt_events', False)) no_alarm=data.get('no_alarm', False) alarm_override=data.get('alarm_override', False) if no_alarm: value=0 elif alarm_override: value=2 else: value=1 self.__set_alarm_fields(value) self.__alarm_setting.SetSelection(value) self.ringtone=data.get('ringtone', self.unnamed) try: self.__ringtone.SetStringSelection(ringtone) except: self.__ringtone.SetStringSelection(self.unnamed) value=data.get('vibrate', False); self.__vibrate.SetValue(value) self.__alarm_value.SetValue(int(data.get('alarm_value', 0))) self.__set_cats(self.__cat_chkbox, self.__cats, data.get('categories', None)) def get_base(self, r): r['rpt_events']=self._rpt_chkbox.GetValue() value=self.__alarm_setting.GetSelection() if value==0: r['no_alarm']=True r['alarm_override']=False elif value==1: r['no_alarm']=False r['alarm_override']=False else: r['no_alarm']=False r['alarm_override']=True r['ringtone']=self.__ringtone.GetStringSelection() r['vibrate']=self.__vibrate.GetValue() r['alarm_value']=self.__alarm_value.GetValue() if self.__cat_chkbox.GetValue(): c=[] for i in range(self.__cats.GetCount()): if self.__cats.IsChecked(i): s=self.__cats.GetString(i) if s=='': c.append('') else: c.append(s) r['categories']=c else: r['categories']=None return def OnAlarmSetting(self, _): self.__set_alarm_fields(self.__alarm_setting.GetSelection()) def _repeat_option(self, on=True): if on: self._rpt_chkbox.Enable() self._rpt_chkbox_text.Enable() else: self._rpt_chkbox.SetValue(False) self._rpt_chkbox.Disable() self._rpt_chkbox_text.Disable() def OnCheckBox(self, evt): evt_id=evt.GetId() if evt_id==self._start_date_chkbox.GetId(): w1,w2=self._start_date_chkbox, self._start_date elif evt_id==self._end_date_chkbox.GetId(): w1,w2=self._end_date_chkbox, self._end_date else: w1,w2=self.__cat_chkbox, self.__cats if w1.GetValue(): w2.Enable() else: w2.Disable() # turn on the repeat event option of both start date and end date # are specified. self._repeat_option(self._start_date_chkbox.GetValue() and \ self._end_date_chkbox.GetValue()) #------------------------------------------------------------------------------- class FilterDialog(FilterDialogBase): def __init__(self, parent, id, caption, categories, style=wx.DEFAULT_DIALOG_STYLE): FilterDialogBase.__init__(self, parent, id, caption, categories, style) self._get_from_fs() def _get_from_fs(self): _db_data=self.GetParent().GetParent().GetActiveDatabase().getmajordictvalues('calendar_filter', filterobjectfactory) _data={} _data.update(_db_data.get('filter', {})) if _data.has_key('categories'): _cat=[x['category'] for x in _data['categories']] del _data['categories'] _data['categories']=_cat if _data.has_key('start'): _d0=_data['start'][0] _date=(_d0['year'], _d0['month'], _d0['day']) del _data['start'] _data['start']=_date if _data.has_key('end'): _d0=_data['end'][0] _date=(_d0['year'], _d0['month'], _d0['day']) del _data['end'] _data['end']=_date self.set(_data) def _save_to_fs(self, data): _data=copy.deepcopy(data, {}) del _data['categories'] if data.has_key('categories') and data['categories']: _cat=[{'category': x} for x in data['categories'] ] _data['categories']=_cat del _data['start'] if data.has_key('start') and data['start']: _date=[{'year': data['start'][0], 'month': data['start'][1], 'day': data['start'][2] }] _data['start']=_date del _data['end'] if data.has_key('end') and data['end']: _date=[{'year': data['end'][0], 'month': data['end'][1], 'day': data['end'][2] }] _data['end']=_date _dict={ 'filter': _data } database.ensurerecordtype(_dict, filterobjectfactory) self.GetParent().GetParent().GetActiveDatabase().savemajordict('calendar_filter', _dict) def SetDateControls(self, fgs, fgs1): self._start_date_chkbox=wx.CheckBox(self, id=wx.NewId(), label='Start Date:', style=wx.ALIGN_RIGHT) fgs.Add(self._start_date_chkbox, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTRE_VERTICAL, 0) self._start_date=wx.calendar.CalendarCtrl(self, -1, wx.DateTime_Now(), style = wx.calendar.CAL_SUNDAY_FIRST | wx.calendar.CAL_SEQUENTIAL_MONTH_SELECTION) self._start_date.Disable() fgs.Add(self._start_date, 1, wx.ALIGN_LEFT, 5) self._end_date_chkbox=wx.CheckBox(self, id=wx.NewId(), label='End Date:', style=wx.ALIGN_RIGHT) fgs.Add(self._end_date_chkbox, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTRE_VERTICAL, 0) self._end_date=wx.calendar.CalendarCtrl(self, -1, wx.DateTime_Now(), style = wx.calendar.CAL_SUNDAY_FIRST | wx.calendar.CAL_SEQUENTIAL_MONTH_SELECTION) self._end_date.Disable() fgs.Add(self._end_date, 1, wx.ALIGN_LEFT, 5) self._preset_date_chkbox=wx.CheckBox(self, -1, label='Preset Duration', style=wx.ALIGN_RIGHT) fgs.Add(self._preset_date_chkbox, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTRE_VERTICAL, 0) self._preset_date=wx.Choice(self, -1, choices=('This Week', 'This Month', 'This Year', 'Next 7 Days',)) self._preset_date.SetSelection(1) self._preset_date.Disable() fgs.Add(self._preset_date, 0, wx.ALIGN_LEFT, 5) wx.EVT_CHECKBOX(self, self._preset_date_chkbox.GetId(), self.OnCheckBox) def OnCheckBox(self, evt): super(FilterDialog, self).OnCheckBox(evt) self._repeat_option(self._start_date_chkbox.GetValue() and \ self._end_date_chkbox.GetValue() or \ self._preset_date_chkbox.GetValue()) if evt.GetId()==self._preset_date_chkbox.GetId(): if self._preset_date_chkbox.GetValue(): self._preset_date.Enable() else: self._preset_date.Disable() def __set_date(self, chk_box, cal, d): if d is None: chk_box.SetValue(False) cal.Disable() else: chk_box.SetValue(True) cal.Enable() dt=wx.DateTime() dt.Set(d[2], year=d[0], month=d[1]-1) cal.SetDate(dt) def set_base(self, data): super(FilterDialog, self).set_base(data) self._rpt_chkbox.SetValue(data.get('rpt_events', False)) def set(self, data): self.__set_date(self._start_date_chkbox, self._start_date, data.get('start', None)) self.__set_date(self._end_date_chkbox, self._end_date, data.get('end', None)) self.set_base(data) if data.get('preset_date', None) is not None: self._preset_date_chkbox.SetValue(True) self._preset_date.Enable() self._preset_date.SetSelection(data['preset_date']) self._repeat_option(True) else: self._preset_date_chkbox.SetValue(False) self._preset_date.Disable() def _get_preset_thisweek(self): # return the dates of (today, Sat) _today=datetime.date.today() _dow=_today.isoweekday()%7 #Sun=0, Sat=6 _end=_today+datetime.timedelta(6-_dow) return ((_today.year, _today.month, _today.day), (_end.year, _end.month, _end.day)) def _get_preset_thismonth(self): # return the dates of (today, end-of-month) _today=datetime.date.today() _end=_today.replace(day=calendar.monthrange(_today.year,_today.month)[1]) return ((_today.year, _today.month, _today.day), (_end.year, _end.month, _end.day)) def _get_preset_thisyear(self): # return the dates of (today, end-of-year) _today=datetime.date.today() _end=_today.replace(month=12, day=31) return ((_today.year, _today.month, _today.day), (_end.year, _end.month, _end.day)) def _get_preset_next7(self): # return the dates of (today, today+6) _today=datetime.date.today() _end=_today+datetime.timedelta(days=6) return ((_today.year, _today.month, _today.day), (_end.year, _end.month, _end.day)) def _get_preset_date(self): _choice=self._preset_date.GetSelection() if _choice==wx.NOT_FOUND: return None, None if _choice==0: return self._get_preset_thisweek() elif _choice==1: return self._get_preset_thismonth() elif _choice==2: return self._get_preset_thisyear() else: return self._get_preset_next7() def get(self): r={} if self._preset_date_chkbox.GetValue(): r['start'],r['end']=self._get_preset_date() r['preset_date']=self._preset_date.GetSelection() else: r['preset_date']=None if self._start_date_chkbox.GetValue(): dt=self._start_date.GetDate() r['start']=(dt.GetYear(), dt.GetMonth()+1, dt.GetDay()) else: r['start']=None if self._end_date_chkbox.GetValue(): dt=self._end_date.GetDate() r['end']=(dt.GetYear(), dt.GetMonth()+1, dt.GetDay()) else: r['end']=None self.get_base(r) self._save_to_fs(r) return r #------------------------------------------------------------------------------- class AutoSyncFilterDialog(FilterDialogBase): def __init__(self, parent, id, caption, categories, style=wx.DEFAULT_DIALOG_STYLE): FilterDialogBase.__init__(self, parent, id, caption, categories, style) def SetDateControls(self, fgs, fgs1): #start_offset self._start_date_chkbox=wx.CheckBox(self, id=wx.NewId(), label='Start Offset (days):', style=wx.ALIGN_RIGHT) fgs.Add(self._start_date_chkbox, 0, wx.ALIGN_RIGHT|wx.TOP|wx.BOTTOM, 5) self._start_date=wx.lib.intctrl.IntCtrl(self, id=wx.NewId(), size=(50,-1), value=0, min=0, max=1000) self._start_date.Disable() fgs.Add( self._start_date, 0, wx.ALIGN_LEFT|wx.TOP|wx.BOTTOM, 2) #end_offset self._end_date_chkbox=wx.CheckBox(self, id=wx.NewId(), label='End Offset (days):', style=wx.ALIGN_RIGHT) fgs.Add(self._end_date_chkbox, 0, wx.ALIGN_RIGHT|wx.TOP|wx.BOTTOM, 5) self._end_date=wx.lib.intctrl.IntCtrl(self, id=wx.NewId(), size=(50,-1), value=0, min=0, max=1000) self._end_date.Disable() fgs.Add( self._end_date, 0, wx.ALIGN_LEFT|wx.TOP|wx.BOTTOM, 2) fgs1.Add(wx.StaticText(self, -1, 'Note: The start offset is the number of days' + ' in the past, and the end offset is the number of days' + ' in the future imported from the calender into your phone. If' + ' disabled, all past and/or future events are imported.', size=(270,55)), 0, wx.ALIGN_LEFT|wx.TOP|wx.BOTTOM, 5) def __set_start_date(self, d): if d is None: self._start_date_chkbox.SetValue(False) self._start_date.Disable() else: self._start_date_chkbox.SetValue(True) self._start_date.Enable() self._start_date.SetValue(d) def __set_end_date(self, d): if d is None: self._end_date_chkbox.SetValue(False) self._end_date.Disable() else: self._end_date_chkbox.SetValue(True) self._end_date.Enable() self._end_date.SetValue(d) def set(self, data): self.__set_start_date(data.get('start_offset', None)) self.__set_end_date(data.get('end_offset', None)) self.set_base(data) def get(self): r={} if self._start_date_chkbox.GetValue(): r['start_offset']=self._start_date.GetValue() else: r['start_offset']=None if self._end_date_chkbox.GetValue(): r['end_offset']=self._end_date.GetValue() else: r['end_offset']=None self.get_base(r) return r #------------------------------------------------------------------------------- class ExportCalendarDialog(wx.Dialog): # subclass should override these _default_file_name="" _wildcards="All files|*.*" def __init__(self, parent, title): super(ExportCalendarDialog, self).__init__(parent, -1, title) # make the ui vbs=wx.BoxSizer(wx.VERTICAL) hbs=wx.BoxSizer(wx.HORIZONTAL) hbs.Add(wx.StaticText(self, -1, "File"), 0, wx.ALL|wx.ALIGN_CENTRE, 5) self.filenamectrl=wx.TextCtrl(self, -1, self._default_file_name) hbs.Add(self.filenamectrl, 1, wx.ALL|wx.EXPAND, 5) self.browsectrl=wx.Button(self, wx.NewId(), "Browse...") hbs.Add(self.browsectrl, 0, wx.ALL|wx.EXPAND, 5) vbs.Add(hbs, 0, wx.EXPAND|wx.ALL, 5) # selection GUI vbs.Add(self.GetSelectionGui(self), 5, wx.EXPAND|wx.ALL, 5) # the buttons vbs.Add(wx.StaticLine(self, -1, style=wx.LI_HORIZONTAL), 0, wx.EXPAND|wx.ALL,5) vbs.Add(self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.HELP), 0, wx.ALIGN_CENTER|wx.ALL, 5) # event handlers wx.EVT_BUTTON(self, self.browsectrl.GetId(), self.OnBrowse) wx.EVT_BUTTON(self, wx.ID_OK, self.OnOk) # all done self.SetSizer(vbs) self.SetAutoLayout(True) vbs.Fit(self) def GetSelectionGui(self, parent): hbs=wx.BoxSizer(wx.HORIZONTAL) self._selection=wx.RadioBox(parent, wx.NewId(), 'Events Selection', choices=['All', 'Date Range'], style=wx.RA_SPECIFY_ROWS) hbs.Add(self._selection, 0, wx.EXPAND|wx.ALL, 5) sbs=wx.StaticBoxSizer(wx.StaticBox(parent, -1, 'Date Range'), wx.VERTICAL) gs=wx.FlexGridSizer(-1, 2, 5, 5) gs.AddGrowableCol(1) gs.Add(wx.StaticText(self, -1, 'Start:'), 0, wx.ALL, 0) self._start_date=wx.DatePickerCtrl(self, style=wx.DP_DROPDOWN | wx.DP_SHOWCENTURY) gs.Add(self._start_date, 0, wx.ALL, 0) gs.Add(wx.StaticText(self, -1, 'End:'), 0, wx.ALL, 0) self._end_date=wx.DatePickerCtrl(self, style=wx.DP_DROPDOWN | wx.DP_SHOWCENTURY) gs.Add(self._end_date, 0, wx.ALL, 0) sbs.Add(gs, 1, wx.EXPAND|wx.ALL, 5) hbs.Add(sbs, 0, wx.EXPAND|wx.ALL, 5) return hbs def OnBrowse(self, _): with guihelper.WXDialogWrapper(wx.FileDialog(self, defaultFile=self.filenamectrl.GetValue(), wildcard=self._wildcards, style=wx.SAVE|wx.CHANGE_DIR), True) as (dlg, retcode): if retcode==wx.ID_OK: self.filenamectrl.SetValue(dlg.GetPath()) def _export(self): # perform the actual caledar data import, subclass MUST override raise NotImplementedError def OnOk(self, _): # do export self._export() self.EndModal(wx.ID_OK) bitpim-1.0.7+dfsg1/src/tipwin.py0000644001616600161660000000554010526233471014631 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: tipwin.py 3676 2006-11-14 03:25:45Z djpham $ """ A TipWindow class that can properly handle tab(\t) characters. Limitation: This class does not do text wrapping! """ import wx space_count=4 # expand a tab by the # of spaces TEXT_MARGIN_X=3 TEXT_MARGIN_Y=3 parentclass=wx.TipWindow class TipWindow(parentclass): def __init__(self, parent, text, maxwidth=100, rectbound=None): global TEXT_MARGIN_X super(TipWindow, self).__init__(parent, text, maxwidth, rectbound) _children_wins=self.GetChildren() if len(_children_wins)!=1: # can't find the view window, bail return self._view=_children_wins[0] self._text=text self._max_w=maxwidth self._line_h=0 self._col_x=[TEXT_MARGIN_X] self.adjust() wx.EVT_PAINT(self._view, self.OnPaintView) def adjust(self): # adjust the width of this window if there tabs global space_count if self._text.find('\t')==-1: # no tab, bail return _dc=wx.ClientDC(self._view) _dc.SetFont(self._view.GetFont()) for _line in self._text.split('\n'): _cnt=0 for _col in _line.split('\t'): _cnt+=1 if _cnt>=len(self._col_x): self._col_x.append(0) _w, _h=_dc.GetTextExtent(_col) self._col_x[_cnt]=max(_w, self._col_x[_cnt]) self._line_h=max(self._line_h, _h) _space_w=_dc.GetTextExtent(' '*space_count)[0] for _cnt in range(1, len(self._col_x)): self._col_x[_cnt]+=self._col_x[_cnt-1]+_space_w _w, _h=self.GetClientSizeTuple() _w=min(self._col_x[-1]-_space_w+self._col_x[0], self._max_w) self.SetClientSizeWH(_w, _h) self._view.SetDimensions(0, 0, _w, _h) def OnPaintView(self, _): global TEXT_MARGIN_Y _dc=wx.PaintDC(self._view) # First, fill the background _background=self._view.GetBackgroundColour() _foreground=self._view.GetForegroundColour() _dc.SetBrush(wx.Brush(_background, wx.SOLID)) _dc.SetPen(wx.Pen(_foreground, 1, wx.SOLID)) _dc.DrawRectangle(0, 0, *self._view.GetClientSizeTuple()) # and then draw the text line by line _dc.SetTextBackground(_background) _dc.SetTextForeground(_foreground) _dc.SetFont(self._view.GetFont()) _y=TEXT_MARGIN_Y for _line in self._text.split('\n'): for _idx, _col in enumerate(_line.split('\t')): _dc.DrawText(_col, self._col_x[_idx], _y) _y+=self._line_h bitpim-1.0.7+dfsg1/src/phone_root.py0000644001616600161660000004065710667371563015516 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2005 Roger Binns ### Copyright (C) 2006 Simon Capper ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: phone_root.py 4390 2007-09-05 00:08:19Z djpham $ """The main gui code for BitPim""" # System modules import ConfigParser import time import os import cStringIO import zipfile import re import sys import shutil import types import datetime import sha import codecs # wx modules import wx # my modules import guiwidgets import common import version import helpids import bpcalendar import comdiagnose import phonebook import importexport import wallpaper import ringers import guihelper import database import memo import todo import sms_tab import call_history import today import pubsub import playlist import filesystem import widgets import media_root import t9editor import vtab_media if guihelper.IsMSWindows(): import win32api import win32con import win32gui class PhoneTree(wx.TreeCtrl): def __init__(self, parent, mw, id): wx.TreeCtrl.__init__(self, parent, id, style=wx.TR_HAS_BUTTONS) self.parent=parent self.mw=mw self.config=mw.config bmsize=(22,22) wx.EVT_TREE_SEL_CHANGED(self,id, self.OnItemSelected) self.image_list=wx.ImageList(22, 22) self.img_dir=self.image_list.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, bmsize)) art=["phonebook", "wallpaper", "ringers", "calendar", "callhistory", "calls", "sms", "message", "memo", "file", "log", "todo", "playlist", "protocol", "console", "phone_root", "phone", "root_image", "media", "image", "video", "camera", "sounds"] for k in art: s="self.%s= self.image_list.Add(wx.ArtProvider_GetBitmap(guihelper.ART_SEL_%s,wx.ART_TOOLBAR,bmsize))" % (k,k.upper()) exec(s) self.SetImageList(self.image_list) if self.config.ReadInt('startwithtoday', 0): self.startuppage='Phone' else: self.startuppage=self.config.Read("viewnotebookpage", "") self.startuppage_item=None self.DeleteAllItems() self.active_phone=None self.active_panel=self.root_panel=widgets.RootWidget(self.parent, wx.NewId()) self.root=self.AddPage(None, self.root_panel, "BitPim", self.root_image) self.del_bmp, self.short_help_delete=self.root_panel.GetDeleteInfo() self.add_bmp, self.short_help_add=self.root_panel.GetAddInfo() self.lw=None self.lwdata=None self.filesystemwidget=None wx.EVT_RIGHT_UP(self, self.OnRightUp) wx.EVT_KEY_DOWN(self, self.OnKeyDown) wx.EVT_KEY_UP(self, self.OnKeyUp) # add shared tabs self.lw=guiwidgets.LogWindow(self.parent) self.lw_id=self.AddPage(self.root, self.lw, "Log", self.log) # Final widgets that depend on config lv=self.config.ReadInt("viewlogdata", 0) if lv: self.OnViewLogData(None) fv=self.config.ReadInt("viewfilesystem", 0) if fv: self.OnViewFilesystem(None) wx.Yield() def OnKeyUp(self, evt): self.active_panel.OnKeyUp(evt) # pass onto widget def OnKeyDown(self, evt): self.active_panel.OnKeyDown(evt) # pass onto widget def CreatePhone(self, name, config, path, database_name): phone=Phone(self.parent) phone_id=self.AddPage(self.root, phone, name, self.phone, None, helpids.ID_TAB_TODAY) phone.Initialise(self, self.mw, config, path, phone_id, database_name) if self.active_phone==None: self.Expand(phone_id) self.active_phone=phone def GetActivePhone(self): return self.active_phone def GetActiveWidget(self): return self.active_panel def AddPage(self, phone, panel, name, image=None, after=None, help_id=None): if image==None: image=self.img_dir if phone==None: item=self.AddRoot(name) elif after==None: item=self.PrependItem(phone, name) else: item=self.InsertItem(phone, after, name) self.SetPyData(item, panel) self.SetItemImage(item, image) panel.Show(False) panel.InitialiseWidget(self, item, phone, self.config, help_id) if not self.startuppage_item and name==self.startuppage: self.startuppage_item=item return item def SetStartupPage(self): if self.startuppage_item: self.SelectItem(self.startuppage_item) def AddNode(self, panel, name, image=None): if image==None: image=self.img_dir item=self.AppendItem(panel.id, name) self.SetPyData(item, panel) self.SetItemImage(item, image) return item def DeletePage(self, id): self.Delete(id) def OnItemSelected(self, _): item=self.GetSelection() if item.IsOk(): if self.GetItemPyData(item): self.active_panel=self.GetItemPyData(item) self.active_panel.OnSelected(item) text=self.active_panel.GetWidgetName() if text is not None: self.config.Write("viewnotebookpage", text) wx.CallAfter(self.mw.SetActivePanel, self.active_panel) # deal with graying out/in menu items on notebook page changing del_bmp, short_help_delete=self.active_panel.GetDeleteInfo() add_bmp, short_help_add=self.active_panel.GetAddInfo() if del_bmp!=self.del_bmp or add_bmp!=self.add_bmp or self.short_help_delete!=short_help_delete: self.mw.UpdateToolbarOnPanelChange(add_bmp, short_help_add, del_bmp, short_help_delete) self.add_bmp=add_bmp self.del_bmp=del_bmp self.short_help_delete=short_help_delete self.short_help_add=short_help_add def OnRightUp(self, event): pt = event.GetPosition(); item, flags = self.HitTest(pt) if item.IsOk(): self.active_panel=self.GetItemPyData(item) self.active_panel.OnPopupMenu(self, item, pt) # update handlers for controls that are not always available def ViewLogDataUIEvent(self, event): event.Check(self.lwdata != None) def ViewFileSystemUIEvent(self, event): event.Check(self.filesystemwidget != None) def DataSendPhoneUpdateUIEvent(self, event): event.Enable(not wx.GetApp().SAFEMODE) def EditCopyUpdateUIEvent(self, event): event.Enable(self.active_panel.CanCopy()) def EditPasteUpdateUIEvent(self, event): event.Enable(self.active_panel.CanPaste()) def EditRenameUpdateUIEvent(self, event): event.Enable(self.active_panel.CanRename()) def DataDeleteItemUpdateUIEvent(self, event): event.Enable(self.active_panel.CanDelete()) def DataAddItemUpdateUIEvent(self, event): event.Enable(self.active_panel.CanAdd()) def HistoricalDataUpdateUIEvent(self, event): event.Enable(self.active_panel.HasHistoricalData()) def ViewPreviewDataUpdateUIEvent(self, event): event.Enable(self.active_panel.HasPreviewPane()) event.Check(self.active_panel.IsPreviewPaneEnabled()) def ViewColumnsUpdateUIEvent(self, event): event.Enable(self.active_panel.HasColumnSelector()) def FilePrintDataUpdateUIEvent(self, event): event.Enable(self.active_panel.CanPrint()) def SelectAllDataUpdateUIEvent(self, event): event.Enable(self.active_panel.CanSelectAll()) def OnFilePrint(self,_): self.active_panel.OnPrintDialog(self, self.config) def OnDataHistorical(self, _): self.active_panel.OnHistoricalData() def OnEditAddEntry(self, evt): self.active_panel.OnAdd(evt) def OnEditDeleteEntry(self, evt): self.active_panel.OnDelete(evt) def OnEditSelectAll(self, evt): self.active_panel.OnSelectAll(evt) def OnCopyEntry(self, evt): self.active_panel.OnCopy(evt) def OnPasteEntry(self, evt): self.active_panel.OnPaste(evt) def OnRenameEntry(self, evt): self.active_panel.OnRename(evt) def OnViewClearLogs(self, _): self.lw.Clear() if self.lwdata is not None: self.lwdata.Clear() def OnViewColumns(self, _): self.active_panel.OnViewColumnSelector() def OnViewPreview(self, evt): if not self.active_panel.IsPreviewPaneEnabled(): config=1 preview_on=True else: config=0 preview_on=False self.active_panel.OnViewPreview(preview_on) def OnViewLogData(self, _): # toggle state of the log data logdatatitle="Protocol Log" if self.lwdata is None: self.lwdata=guiwidgets.LogWindow(self.parent) self.lwdata_id=self.AddPage(self.root, self.lwdata, logdatatitle, self.log, self.lw_id) self.config.WriteInt("viewlogdata", 1) else: self.lwdata=None self.DeletePage(self.lwdata_id) self.lwdata_id=0 self.config.WriteInt("viewlogdata", 0) def OnViewFilesystem(self,_): # toggle filesystem view logtitle="Log" fstitle="Filesystem" if self.filesystemwidget is None: self.filesystemwidget=filesystem.FileSystemView(self.mw, self.parent, id=97) pos=self.GetPrevSibling(self.lw_id) self.filesystemwidget_id=self.AddPage(self.root, self.filesystemwidget, fstitle, self.file, pos) self.config.WriteInt("viewfilesystem", 1) else: self.filesystemwidget=None self.DeletePage(self.filesystemwidget_id) self.config.WriteInt("viewfilesystem", 0) def OnBusyStart(self): return self.mw.OnBusyStart() def OnBusyEnd(self): return self.mw.OnBusyEnd() class Phone(today.TodayWidget): def __init__(self, parent): self.parent=parent today.TodayWidget.__init__(self, self, self.parent) pubsub.subscribe(self.OnPhoneChanged, pubsub.PHONE_MODEL_CHANGED) def Initialise(self, tree, mw, config, path, phone_id, database_name): self.tree=tree self.mw=mw self.phone_id=phone_id self.config=config self.path=path self.phoneprofile=self.mw.phoneprofile id=None blob_path=database_name+"_blobs" self.blob_path=self._fixup(os.path.join(self.path, blob_path)) self.ringerpath=self._fixup(os.path.join(self.path, "ringer")) self.wallpaperpath=self._fixup(os.path.join(self.path, "wallpaper")) self.phonebookpath=self._fixup(os.path.join(self.path, "phonebook")) self.calendarpath=self._fixup(os.path.join(self.path, "calendar")) self.EnsureDatabase(self.path, self.path, database_name) # create all the panels for this phone if self.config.ReadInt("console", 0): import developer id=self.tree.AddPage(self.phone_id, developer.DeveloperPanel(self.parent, {'mw': self.mw, 'db': self.database} ), "Console", self.tree.console) self.phonewidget=phonebook.PhoneWidget(self, self.parent, self.config) id=self.tree.AddPage(self.phone_id, self.phonewidget, "PhoneBook", self.tree.phonebook,id) self.mediawidget=media_root.MediaWidget(self, self.parent) id=self.tree.AddPage(self.phone_id, self.mediawidget, "Media", self.tree.media, id, helpids.ID_TAB_MEDIA) self.calendarwidget=bpcalendar.Calendar(self, self.parent) id=self.tree.AddPage(self.phone_id, self.calendarwidget, "Calendar", self.tree.calendar,id) self.memowidget=memo.MemoWidget(self, self.parent) id=self.tree.AddPage(self.phone_id, self.memowidget, "Memo", self.tree.memo,id) self.todowidget=todo.TodoWidget(self, self.parent) id=self.tree.AddPage(self.phone_id, self.todowidget, 'Todo', self.tree.todo,id) self.smswidget=sms_tab.SMSWidget(self, self.parent) id=self.tree.AddPage(self.phone_id, self.smswidget, 'SMS', self.tree.sms,id, helpids.ID_TAB_SMS) self.callhistorywidget=call_history.CallHistoryWidget(self, self.parent) id=self.tree.AddPage(self.phone_id, self.callhistorywidget, 'Call History', self.tree.callhistory, id) self.playlistwidget=playlist.PlaylistWidget(self, self.parent) id=self.tree.AddPage(self.phone_id, self.playlistwidget, 'Play List', self.tree.playlist,id) self.t9editorwidget=t9editor.T9EditorWidget(self, self.parent) id=self.tree.AddPage(self.phone_id, self.t9editorwidget, 'T9 Editor', None, id, helpids.ID_TAB_T9EDITOR) # update the the status bar info self.mw.SetPhoneModelStatus() self.mw.SetVersionsStatus() # populate all the widgets try: results={} # get info self.phonewidget.getfromfs(results) self.mediawidget.GetWallpaper().getfromfs(results) self.mediawidget.GetRinger().getfromfs(results) self.calendarwidget.getfromfs(results) self.memowidget.getfromfs(results) self.todowidget.getfromfs(results) self.smswidget.getfromfs(results) self.callhistorywidget.getfromfs(results) self.playlistwidget.getfromfs(results) self.t9editorwidget.getfromfs(results) # update controls wx.SafeYield(onlyIfNeeded=True) self.phonewidget.populate(results) wx.SafeYield(onlyIfNeeded=True) self.mediawidget.GetWallpaper().populate(results) wx.SafeYield(onlyIfNeeded=True) self.mediawidget.GetRinger().populate(results) wx.SafeYield(onlyIfNeeded=True) self.calendarwidget.populate(results) wx.SafeYield(onlyIfNeeded=True) self.memowidget.populate(results) wx.SafeYield(onlyIfNeeded=True) self.todowidget.populate(results) wx.SafeYield(onlyIfNeeded=True) self.smswidget.populate(results) wx.SafeYield(onlyIfNeeded=True) self.callhistorywidget.populate(results) wx.SafeYield(onlyIfNeeded=True) self.playlistwidget.populate(results) wx.SafeYield(onlyIfNeeded=True) self.t9editorwidget.populate(results) except Exception, e: if __debug__: raise wx.CallAfter(self.tree.SetStartupPage) def OnPhoneChanged(self, _): self.phoneprofile=self.mw.phoneprofile # deal with the database def EnsureDatabase(self, newpath, oldpath, database_file): newdbpath=os.path.abspath(os.path.join(newpath, database_file)) if oldpath is not None and len(oldpath) and oldpath!=newpath: # copy database to new location if self.database: self.database=None # cause it to be closed olddbpath=os.path.abspath(os.path.join(oldpath, "bitpim.db")) if os.path.exists(olddbpath) and not os.path.exists(newdbpath): shutil.copyfile(olddbpath, newdbpath) self.database=None # allow gc # Preparing for virtual tables to store media data vtabs=[ { 'tablename': 'ringtone-index__mediadata', 'modulename': 'ringtonemodule', 'moduleclass': vtab_media.Media, 'args': (self.ringerpath,) }, { 'tablename': 'wallpaper-index__mediadata', 'modulename': 'wallpapermodule', 'moduleclass': vtab_media.Media, 'args': (self.wallpaperpath,) } ] self.database=database.Database(newdbpath, vtabs) def GetDatabase(self): return self.database def _fixup(self, path): # os.path.join screws up adding root directory of a drive to # a directory. eg join("c:\", "foo") gives "c:\\foo" whch # is invalid. This function fixes that if len(path)>=3: if path[1]==':' and path[2]=='\\' and path[3]=='\\': return path[0:2]+path[3:] return path def OnBusyStart(self): return self.mw.OnBusyStart() def OnBusyEnd(self): return self.mw.OnBusyEnd() def log(self, str): self.mw.log(str) bitpim-1.0.7+dfsg1/src/ringers.py0000644001616600161660000006460710664710522015001 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### Copyright (C) 2003-2004 Steven Palm ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: ringers.py 4379 2007-08-28 03:06:58Z djpham $ from __future__ import with_statement import os import time import wx from wx.lib import masked import fileview import guihelper import pubsub import aggregatedisplay import wallpaper import common import fileinfo import conversions import helpids import guihelper import rangedslider ### ### Ringers ### class DisplayItem(fileview.FileViewDisplayItem): datakey='ringtone-index' datatype='Audio' # used in the tooltip class RingerView(fileview.FileView): CURRENTFILEVERSION=2 # this is only used to prevent the pubsub module # from being GC while any instance of this class exists __publisher=pubsub.Publisher media_notification_type=pubsub.ringtone_type database_key='ringtone-index' media_key='ringtone' default_origin="ringers" def __init__(self, mainwindow, parent, media_root, id=-1): self.mainwindow=mainwindow self._data={self.database_key: {}} fileview.FileView.__init__(self, mainwindow, parent, media_root, "ringtone-watermark") self.wildcard="Audio files|*.wav;*.mid;*.qcp;*.mp3;*.pmd;*.wma|Midi files|*.mid|Purevoice files|*.qcp|MP3 files|*.mp3|WMA files|*.wma|PMD/CMX files|*.pmd|All files|*.*" self.thedir=self.mainwindow.ringerpath self.modified=False pubsub.subscribe(self.OnListRequest, pubsub.REQUEST_RINGTONES) pubsub.subscribe(self.OnDictRequest, pubsub.REQUEST_RINGTONE_INDEX) self._raw_media=self._shift_down=False def updateprofilevariables(self, profile): self.maxlen=profile.MAX_RINGTONE_BASENAME_LENGTH self.filenamechars=profile.RINGTONE_FILENAME_CHARS self.excluded_origins=profile.excluded_ringtone_origins for o in profile.ringtoneorigins: self.media_root.AddMediaNode(o, self) def OnListRequest(self, msg=None): l=[self._data[self.database_key][x].name \ for x in self._data[self.database_key] \ if self._data[self.database_key][x].origin not in self.excluded_origins ] l.sort() pubsub.publish(pubsub.ALL_RINGTONES, l) def OnDictRequest(self, msg=None): pubsub.publish(pubsub.ALL_RINGTONE_INDEX, self._data[self.database_key].copy()) def GetDeleteInfo(self): return guihelper.ART_DEL_RINGER, "Delete Ringer" def GetAddInfo(self): return guihelper.ART_ADD_RINGER, "Add Ringer" def OnAdd(self, evt=None): self._raw_media=self._shift_down super(RingerView, self).OnAdd(evt) # reset the fla self._shift_down=False def GetItemThumbnail(self, item, w, h): assert w==self.thumbnail.GetWidth() and h==self.thumbnail.GetHeight() return self.thumbnail def GetSections(self): # work out section and item sizes self.thumbnail=wx.Image(guihelper.getresourcefile('ringer.png')).ConvertToBitmap() dc=wx.MemoryDC() dc.SelectObject(wx.EmptyBitmap(100,100)) # unused bitmap needed to keep wxMac happy h=dc.GetTextExtent("I")[1] itemsize=self.thumbnail.GetWidth()+160, max(self.thumbnail.GetHeight(), h*4+DisplayItem.PADDING)+DisplayItem.PADDING*2 # get all the items items=[DisplayItem(self, key) for key in self._data[self.database_key] if self._data[self.database_key][key].mediadata!=None] self.sections=[] if len(items)==0: return self.sections # get the current sorting type for sectionlabel, items in self.organizeby_Origin(items): self.media_root.AddMediaNode(sectionlabel, self) sh=aggregatedisplay.SectionHeader(sectionlabel) sh.itemsize=itemsize for item in items: item.thumbnailsize=self.thumbnail.GetWidth(), self.thumbnail.GetHeight() # sort items by name items.sort(self.CompareItems) self.sections.append( (sh, items) ) return [sh for sh,items in self.sections] def GetItemsFromSection(self, sectionnumber, sectionheader): return self.sections[sectionnumber][1] def organizeby_Origin(self, items): types={} for item in items: t=item.origin if t is None: t="Default" l=types.get(t, []) l.append(item) types[t]=l keys=types.keys() keys.sort() return [ (key, types[key]) for key in types] def GetItemSize(self, sectionnumber, sectionheader): return sectionheader.itemsize def GetFileInfoString(self, string): return fileinfo.identify_audiostring(string) def GetFileInfo(self, filename): return fileinfo.identify_audiofile(filename) def ReplaceContents(self, name, origin, new_file_name): """Replace the contents of 'file_name' by the contents of 'new_file_name' by going through the image converter dialog """ file_stat=os.stat(new_file_name) mtime=file_stat.st_mtime afi=fileinfo.identify_audiofile(new_file_name) if afi.size<=0: return # zero length file or other issues newext,convertinfo=self.mainwindow.phoneprofile.QueryAudio( None, common.getext(new_file_name), afi) if convertinfo is not afi: filedata=None try: filedata=self.ConvertFormat(new_file_name, convertinfo) except: pass if filedata is None: return else: filedata=open(new_file_name, "rb").read() # check for the size limit on the file, if specified max_size=getattr(convertinfo, 'MAXSIZE', None) if max_size is not None and len(filedata)>max_size: # the data is too big self.log('ringtone %s is too big!'%common.basename(file)) with guihelper.WXDialogWrapper(wx.MessageDialog(self, 'Ringtone %s may be too big. Do you want to proceed anway?'%common.basename(file), 'Warning', style=wx.YES_NO|wx.ICON_ERROR), True) as (dlg, dlg_resp): if dlg_resp==wx.ID_NO: return self.AddToIndex(name, origin, filedata, self._data, mtime) @guihelper.BusyWrapper def OnAddFiles(self, filenames): for file in filenames: if file is None: continue # failed dragdrop? file_stat=os.stat(file) mtime=file_stat.st_mtime if self._raw_media: target=self.get_media_name_from_filename(file) data=open(file, 'rb').read() self.AddToIndex(target, self.active_section, data, self._data, mtime) else: # do we want to convert file? afi=fileinfo.identify_audiofile(file) if afi.size<=0: continue # zero length file or other issues newext,convertinfo=self.mainwindow.phoneprofile.QueryAudio(None, common.getext(file), afi) if convertinfo is not afi: filedata=None wx.EndBusyCursor() try: filedata=self.ConvertFormat(file, convertinfo) finally: # ensure they match up wx.BeginBusyCursor() if filedata is None: continue else: filedata=open(file, "rb").read() # check for the size limit on the file, if specified max_size=getattr(convertinfo, 'MAXSIZE', None) if max_size is not None and len(filedata)>max_size: # the data is too big self.log('ringtone %s is too big!'%common.basename(file)) with guihelper.WXDialogWrapper(wx.MessageDialog(self, 'Ringtone %s may be too big. Do you want to proceed anway?'%common.basename(file), 'Warning', style=wx.YES_NO|wx.ICON_ERROR), True) as (dlg, dlg_resp): if dlg_resp==wx.ID_NO: continue target=self.get_media_name_from_filename(file, newext) self.AddToIndex(target, self.active_section, filedata, self._data, mtime) self.OnRefresh() def ConvertFormat(self, file, convertinfo): with guihelper.WXDialogWrapper(ConvertDialog(self, file, convertinfo), True) as (dlg, retcode): return dlg.newfiledata if retcode==wx.ID_OK else None def versionupgrade(self, dict, version): """Upgrade old data format read from disk @param dict: The dict that was read in @param version: version number of the data on disk """ # version 0 to 1 upgrade if version==0: version=1 # the are the same # 1 to 2 etc if version==1: print "converting to version 2" version=2 d={} input=dict.get(self.database_key, {}) for i in input: d[i]={'name': input[i]} dict[self.database_key]=d return dict class ConvertDialog(wx.Dialog): ID_CONVERT=wx.NewId() ID_PLAY=wx.NewId() ID_PLAY_CLIP=wx.NewId() ID_STOP=wx.NewId() ID_TIMER=wx.NewId() ID_SLIDER=wx.NewId() # we need to offer all types here rather than using derived classes as the phone may support several # alternatives PARAMETERS={ 'MP3': { 'formats': ["MP3"], 'samplerates': ["16000", "22050", "24000", "32000", "44100", "48000"], 'channels': ["1", "2"], 'bitrates': ["8", "16", "24", "32", "40", "48", "56", "64", "80", "96", "112", "128", "144", "160", "192", "224", "256", "320"], 'setup': 'mp3setup', 'convert': 'mp3convert', 'filelength': 'mp3filelength', 'final': 'mp3final', }, 'QCP': { 'formats': ["QCP"], 'samplerates': ["8000"], 'channels': ["1"], 'bitrates': ["13000"], 'optimization': ['0-Best Sound Quality', '1', '2', '3-Smallest File Size'], 'setup': 'qcpsetup', 'convert': 'qcpconvert', 'filelength': 'qcpfilelength', 'final': 'qcpfinal', } } def __init__(self, parent, file, convertinfo): wx.Dialog.__init__(self, parent, title="Convert Audio File", style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.SYSTEM_MENU|wx.MAXIMIZE_BOX) self.file=file self.convertinfo=convertinfo self.afi=None self.temporaryfiles=[] self.wavfile=common.gettempfilename("wav") # full length wav equivalent self.clipwavfile=common.gettempfilename("wav") # used for clips from full length wav self.temporaryfiles.extend([self.wavfile, self.clipwavfile]) getattr(self, self.PARAMETERS[convertinfo.format]['setup'])() vbs=wx.BoxSizer(wx.VERTICAL) # create the covert controls self.create_convert_pane(vbs, file, convertinfo) # and the crop controls self.create_crop_panel(vbs) vbs.Add(self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.HELP), 0, wx.ALL|wx.ALIGN_RIGHT, 5) self.SetSizer(vbs) vbs.Fit(self) # diable various things self.FindWindowById(wx.ID_OK).Enable(False) for i in self.cropids: self.FindWindowById(i).Enable(False) # Events wx.EVT_BUTTON(self, wx.ID_OK, self.OnOk) wx.EVT_BUTTON(self, wx.ID_CANCEL, self.OnCancel) wx.EVT_TIMER(self, self.ID_TIMER, self.OnTimer) wx.EVT_BUTTON(self, wx.ID_HELP, lambda _: wx.GetApp().displayhelpid(helpids.ID_DLG_AUDIOCONVERT)) # timers and sounds self.sound=None self.timer=wx.Timer(self, self.ID_TIMER) # wxPython wrapper on Mac raises NotImplemented for wx.Sound.Stop() so # we hack around that by supplying a zero length wav to play instead if guihelper.IsMac(): self.zerolenwav=guihelper.getresourcefile("zerolen.wav") def create_convert_pane(self, vbs, file, convertinfo): params=self.PARAMETERS[convertinfo.format] # convert bit bs=wx.StaticBoxSizer(wx.StaticBox(self, -1, "Convert"), wx.VERTICAL) bs.Add(wx.StaticText(self, -1, "Input File: "+file), 0, wx.ALL, 5) gs=wx.FlexGridSizer(2, 4, 5, 5) gs.Add(wx.StaticText(self, -1, "New Type"), 0, wx.ALL|wx.ALIGN_CENTRE_VERTICAL, 5) self.type=wx.ComboBox(self, style=wx.CB_DROPDOWN|wx.CB_READONLY, choices=params['formats']) gs.Add(self.type, 0, wx.ALL|wx.EXPAND, 5) gs.Add(wx.StaticText(self, -1, "Sample Rate (per second)"), 0, wx.ALL|wx.ALIGN_CENTRE_VERTICAL, 5) self.samplerate=wx.ComboBox(self, style=wx.CB_DROPDOWN|wx.CB_READONLY, choices=params['samplerates']) gs.Add(self.samplerate, 0, wx.ALL|wx.EXPAND, 5) gs.Add(wx.StaticText(self, -1, "Channels (Mono/Stereo)"), 0, wx.ALL|wx.ALIGN_CENTRE_VERTICAL, 5) self.channels=wx.ComboBox(self, style=wx.CB_DROPDOWN|wx.CB_READONLY, choices=params['channels']) gs.Add(self.channels, 0, wx.ALL|wx.EXPAND, 5) gs.Add(wx.StaticText(self, -1, "Bitrate (kbits per second)"), 0, wx.ALL|wx.ALIGN_CENTRE_VERTICAL, 5) self.bitrate=wx.ComboBox(self, style=wx.CB_DROPDOWN|wx.CB_READONLY, choices=params['bitrates']) gs.Add(self.bitrate, 0, wx.ALL|wx.EXPAND, 5) if params.has_key('optimization'): gs.Add(wx.StaticText(self, -1, 'Optimization'), 0, wx.ALL|wx.ALIGN_CENTRE_VERTICAL, 5) self.optimization=wx.ComboBox(self, style=wx.CB_DROPDOWN|wx.CB_READONLY, choices=params['optimization']) self.optimization.SetSelection(1) gs.Add(self.optimization, 0, wx.ALL|wx.EXPAND, 5) gs.AddGrowableCol(1, 1) gs.AddGrowableCol(3, 1) bs.Add(gs, 0, wx.EXPAND) bs.Add(wx.Button(self, self.ID_CONVERT, "Convert"), 0, wx.ALIGN_RIGHT|wx.ALL, 5) vbs.Add(bs, 0, wx.EXPAND|wx.ALL, 5) # Fill out fields - we explicitly set even when not necessary due to bugs on wxMac if self.type.GetCount()==1: self.type.SetSelection(0) else: self.type.SetStringSelection(convertinfo.format) if self.channels.GetCount()==1: self.channels.SetSelection(0) else: self.channels.SetStringSelection(`convertinfo.channels`) if self.bitrate.GetCount()==1: self.bitrate.SetSelection(0) else: self.bitrate.SetStringSelection(`convertinfo.bitrate`) if self.samplerate.GetCount()==1: self.samplerate.SetSelection(0) else: self.samplerate.SetStringSelection(`convertinfo.samplerate`) # Events wx.EVT_BUTTON(self, self.ID_CONVERT, self.OnConvert) def create_crop_panel(self, vbs): # crop bit bs=wx.StaticBoxSizer(wx.StaticBox(self, -1, "Crop"), wx.VERTICAL) hbs=wx.BoxSizer(wx.HORIZONTAL) hbs.Add(wx.StaticText(self, -1, "Current Position"), 0, wx.ALL|wx.ALIGN_CENTRE_VERTICAL, 5) self.positionlabel=wx.StaticText(self, -1, "0 ") hbs.Add(self.positionlabel, 0, wx.ALL, 5) hbs.Add(wx.StaticText(self, -1, "Est. Clip File length"), 0, wx.ALL|wx.ALIGN_CENTRE_VERTICAL, 5) self.lengthlabel=wx.StaticText(self, -1, "0 ") hbs.Add(self.lengthlabel, 0, wx.ALL, 5) bs.Add(hbs, 0, wx.ALL, 5) # the start & end manual entry items hbs=wx.GridSizer(-1, 2, 0, 0) hbs.Add(wx.StaticText(self, -1, 'Clip Start (sec):'), 0, wx.EXPAND|wx.ALL, 5) self.clip_start=masked.NumCtrl(self, wx.NewId(), fractionWidth=2) hbs.Add(self.clip_start, 1, wx.EXPAND|wx.ALL, 5) hbs.Add(wx.StaticText(self, -1, 'Clip Duration (sec):'), 0, wx.EXPAND|wx.ALL, 5) self.clip_duration=masked.NumCtrl(self, wx.NewId(), fractionWidth=2) hbs.Add(self.clip_duration, 1, wx.EXPAND|wx.ALL, 5) hbs.Add(wx.StaticText(self, -1, 'Volume Adjustment (dB):'), 0, wx.EXPAND|wx.ALL, 5) self.clip_volume=masked.NumCtrl(self, wx.NewId(), fractionWidth=1) hbs.Add(self.clip_volume, 1, wx.EXPAND|wx.ALL, 5) clip_set_btn=wx.Button(self, wx.NewId(), 'Set') hbs.Add(clip_set_btn, 0, wx.EXPAND|wx.ALL, 5) bs.Add(hbs, 0, wx.EXPAND|wx.ALL, 5) hbs=wx.BoxSizer(wx.HORIZONTAL) self.slider=rangedslider.RangedSlider(self, id=self.ID_SLIDER, size=(-1, 30)) hbs.Add(self.slider, 1, wx.EXPAND|wx.ALL, 5) bs.Add(hbs, 1, wx.EXPAND|wx.ALL, 5) hbs=wx.BoxSizer(wx.HORIZONTAL) hbs.Add(wx.Button(self, self.ID_STOP, "Stop"), 0, wx.ALL, 5) hbs.Add(wx.Button(self, self.ID_PLAY, "Play Position"), 0, wx.ALL, 5) hbs.Add(wx.Button(self, self.ID_PLAY_CLIP, "Play Clip"), 0, wx.ALL, 5) bs.Add(hbs, 0, wx.ALL|wx.ALIGN_RIGHT, 5) vbs.Add(bs, 0, wx.EXPAND|wx.ALL, 5) wx.EVT_BUTTON(self, self.ID_PLAY, self.OnPlayPosition) wx.EVT_BUTTON(self, self.ID_PLAY_CLIP, self.OnPlayClip) wx.EVT_BUTTON(self, self.ID_STOP, self.OnStop) wx.EVT_BUTTON(self, clip_set_btn.GetId(), self.OnSetClip) rangedslider.EVT_POS_CHANGED(self, self.ID_SLIDER, self.OnSliderCurrentChanged) rangedslider.EVT_CHANGING(self, self.ID_SLIDER, self.OnSliderChanging) self.cropids=[self.ID_SLIDER, self.ID_STOP, self.ID_PLAY, self.ID_PLAY_CLIP, self.clip_start.GetId(), self.clip_duration.GetId(), self.clip_volume.GetId(), clip_set_btn.GetId()] @guihelper.BusyWrapper def OnConvert(self, _): self.OnStop() for i in self.cropids: self.FindWindowById(i).Enable(False) self.FindWindowById(wx.ID_OK).Enable(False) getattr(self, self.PARAMETERS[self.convertinfo.format]['convert'])() self.wfi=fileinfo.getpcmfileinfo(self.wavfile) max_duration=round(self.wfi.duration, 2)+0.01 self.clip_start.SetParameters(min=0.0, max=max_duration, limited=True) self.clip_duration.SetParameters(min=0.0, max=max_duration, limited=True) self.UpdateCrop() for i in self.cropids: self.FindWindowById(i).Enable(True) self.FindWindowById(wx.ID_OK).Enable(True) def UpdateCrop(self): self.positionlabel.SetLabel("%.1f secs" % (self.slider.GetCurrent()*self.wfi.duration),) duration=(self.slider.GetEnd()-self.slider.GetStart())*self.wfi.duration self.clip_start.SetValue(self.slider.GetStart()*self.wfi.duration) self.clip_duration.SetValue(duration) v=getattr(self, self.PARAMETERS[self.convertinfo.format]['filelength'])(duration) self.lengthlabel.SetLabel("%s" % (v,)) def OnPlayClip(self,_): self._Play(self.slider.GetStart(), self.slider.GetEnd(), self.clip_volume.GetValue()) def OnPlayPosition(self, _): self._Play(self.slider.GetCurrent(), 1.0) def _Play(self, start, end, volume=None): self.OnStop() assert start<=end self.playstart=start self.playend=end self.playduration=(self.playend-self.playstart)*self.wfi.duration conversions.trimwavfile(self.wavfile, self.clipwavfile, self.playstart*self.wfi.duration, self.playduration, volume) self.sound=wx.Sound(self.clipwavfile) assert self.sound.IsOk() res=self.sound.Play(wx.SOUND_ASYNC) assert res self.starttime=time.time() self.endtime=self.starttime+self.playduration self.timer.Start(100, wx.TIMER_CONTINUOUS) def OnTimer(self,_): now=time.time() if now>self.endtime: self.timer.Stop() # assert wx.Sound.IsPlaying()==False self.slider.SetCurrent(self.playend) self.UpdateCrop() return # work out where the slider should go newval=self.playstart+((now-self.starttime)/(self.endtime-self.starttime))*(self.playend-self.playstart) self.slider.SetCurrent(newval) self.UpdateCrop() def OnStop(self, _=None): self.timer.Stop() if self.sound is not None: if guihelper.IsMac(): # There is no stop method for Mac so we play a one centisecond wav # which cancels the existing playing sound self.sound=None sound=wx.Sound(self.zerolenwav) sound.Play(wx.SOUND_ASYNC) else: self.sound.Stop() self.sound=None def OnSliderCurrentChanged(self, evt): self.OnStop() wx.CallAfter(self.UpdateCrop) def OnSliderChanging(self, _): wx.CallAfter(self.UpdateCrop) def _removetempfiles(self): for file in self.temporaryfiles: if os.path.exists(file): os.remove(file) @guihelper.BusyWrapper def OnOk(self, evt): self.OnStop() # make new data start=self.slider.GetStart()*self.wfi.duration duration=(self.slider.GetEnd()-self.slider.GetStart())*self.wfi.duration self.newfiledata=getattr(self, self.PARAMETERS[self.convertinfo.format]['final'])( start, duration, self.clip_volume.GetValue()) # now remove files self._removetempfiles() # use normal handler to quit dialog evt.Skip() def OnCancel(self, evt): self.OnStop() self._removetempfiles() evt.Skip() def OnSetClip(self, _=None): s=self.clip_start.GetValue() d=self.clip_duration.GetValue() e=s+d if e<=self.wfi.duration: self.slider.SetStart(s/self.wfi.duration) self.slider.SetEnd(e/self.wfi.duration) self.UpdateCrop() ### ### MP3 functions ### def mp3setup(self): self.mp3file=common.gettempfilename("mp3") self.tmp_mp3file=common.gettempfilename('mp3') self.temporaryfiles.append(self.mp3file) self.temporaryfiles.append(self.tmp_mp3file) def mp3convert(self): # make mp3 to work with open(self.mp3file, "wb").write(conversions.converttomp3(self.file, int(self.bitrate.GetStringSelection()), int(self.samplerate.GetStringSelection()), int(self.channels.GetStringSelection()))) self.afi=fileinfo.getmp3fileinfo(self.mp3file) print "result is",len(self.afi.frames),"frames" # and corresponding wav to play conversions.converttowav(self.mp3file, self.wavfile) def mp3filelength(self, duration): # mp3 specific file length calculation frames=self.afi.frames self.beginframe=int(self.slider.GetStart()*len(frames)) self.endframe=int(self.slider.GetEnd()*len(frames)) length=sum([frames[frame].nextoffset-frames[frame].offset for frame in range(self.beginframe, self.endframe)]) return length def _trim_mp3(self, start, duration): # mp3 writing out frames=self.afi.frames offset=frames[self.beginframe].offset length=frames[self.endframe-1].nextoffset-offset with file(self.mp3file, 'rb', 0) as f: f.seek(offset) return f.read(length) def _trim_and_adjust_vol_mp3(self, start, duration, volume): # trim, adjust volume, and write mp3 out # use the original to make a new wav, not the one that went through foo -> mp3 -> wav conversions.converttowav(self.file, self.wavfile, start=start, duration=duration) # adjust the volume conversions.adjustwavfilevolume(self.wavfile, volume) # convert to mp3 return conversions.converttomp3(self.wavfile, int(self.bitrate.GetStringSelection()), int(self.samplerate.GetStringSelection()), int(self.channels.GetStringSelection())) def mp3final(self, start, duration, volume=None): if volume: # need to adjust volume return self._trim_and_adjust_vol_mp3(start, duration, volume) else: return self._trim_mp3(start, duration) ### ### QCP/PureVoice functions ### def qcpsetup(self): self.qcpfile=common.gettempfilename("qcp") self.temporaryfiles.append(self.qcpfile) def qcpconvert(self): # we verify the pvconv binary exists first conversions.getpvconvbinary() # convert to wav first conversions.converttowav(self.file, self.wavfile, samplerate=8000, channels=1) # then to qcp conversions.convertwavtoqcp(self.wavfile, self.qcpfile, self.optimization.GetSelection()) # and finally the wav from the qcp so we can accurately hear what it sounds like conversions.convertqcptowav(self.qcpfile, self.wavfile) def qcpfilelength(self, duration): # we don't actually know unless we do a conversion as QCP is # variable bitrate, so just assume the worst case of 13000 # bits per second (1625 bytes per second) with an additional # 5% overhead due to the file format (I often see closer to 7%) return int(duration*1625*1.05) def qcpfinal(self, start, duration, volume=None): # use the original to make a new wav, not the one that went through foo -> qcp -> wav conversions.converttowav(self.file, self.wavfile, samplerate=8000, channels=1, start=start, duration=duration) if volume is not None: conversions.adjustwavfilevolume(self.wavfile, volume) conversions.convertwavtoqcp(self.wavfile, self.qcpfile, self.optimization.GetSelection()) return file(self.qcpfile, "rb").read() bitpim-1.0.7+dfsg1/src/version.py0000644001616600161660000001272410650777176015023 0ustar amuamu#!/usr/bin/env python ### BITPIM ### ### Copyright (C) 2003-2006 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: version.py 4315 2007-07-23 01:03:58Z djpham $ """Information about BitPim version number""" # We'd like to record information in this file, but without subversion # considering the file modified. This is done by placing the information # in the dollar id fields. When freeze is run, it does those various # substitutions __FROZEN__="$Id: version.py 4315 2007-07-23 01:03:58Z djpham $" import os, sys import time name="BitPim" vendor="$Id: version.py 4315 2007-07-23 01:03:58Z djpham $" release=0 # when rereleases of the same version happen, this gets incremented contact="The BitPim home page is at http://www.bitpim.org. You can post any " \ "questions or feedback to the mailing list detailed on that page." # where users are sent to contact with feedback # user defined version userdefined=False userversion="" uservendor="" svnrevision=0 # we don't know # were we frozen? f=__FROZEN__.split() if len(f)==3: # we were - calc svnrevision svnrevision=int(f[1]) # fixup vendor if vendor[1:].startswith("Id:"): if len(vendor.split())>3: vendor="" else: vendor=vendor.split()[1] _headurl="$HeadURL: https://bitpim.svn.sourceforge.net/svnroot/bitpim/releases/1.0.7/src/version.py $".split()[1] # work out our version number _rp="https://bitpim.svn.sourceforge.net/svnroot/bitpim/releases/" if userdefined: def isdevelopmentversion(): return True version=userversion vendor=uservendor elif _headurl.startswith(_rp): def isdevelopmentversion(): return False version=_headurl[len(_rp):].split("/")[0] if not vendor: vendor="official" else: def isdevelopmentversion(): return True prefix="https://bitpim.svn.sourceforge.net/svnroot/bitpim/" version="-".join(_headurl[len(prefix):].split("/")[:-2]) # -2 to prune off src/version.py del prefix # were we frozen? if svnrevision: version=version+"-"+`svnrevision` if not vendor: vendor="developer build" del _headurl del _rp versionstring=version if release>0: versionstring+="-"+`release` if not isdevelopmentversion(): # dotted quad version as used on Windows (a.b.c.d where all must be digits only) # we use major.minor.point.last dqver=[int(x) for x in version.split(".")] while len(dqver)<3: dqver.append(0) while len(dqver)<4: dqver.append(svnrevision) dqver=dqver[:4] else: dqver=[0,0,0,svnrevision] # svnrevision will be zero if we weren't frozen dqverstr=".".join([`x` for x in dqver]) del x url="http://www.bitpim.org" description="BitPim "+versionstring copyright="(C) 2003-2006 Roger Binns and others - see http://www.bitpim.org" def setversion(versionstring, vendorstring='Test'): """Set the version and vendor based on user's input""" # my filename myfilename=os.path.splitext(__file__)[0]+".py" # update with new version and vendor result=[] if versionstring: # user specifies a version _versionflg='True' _version=versionstring _vendor=vendorstring else: _versionflg='False' _version=_vendor='' for line in file(myfilename, "rtU"): if line.startswith('userversion'): line='userversion="%s"\n'%_version elif line.startswith('uservendor'): line='uservendor="%s"\n'%_vendor elif line.startswith('userdefined'): line='userdefined=%s\n'%_versionflg result.append(line) file(myfilename, "wt").write("".join(result)) # python doesn't check .pyc/.pyo files correctly so we proactively delete them for ext in (".pyc", ".pyo"): try: os.remove(os.path.splitext(__file__)[0]+ext) except OSError: pass def __freeze(): # my filename myfilename=os.path.splitext(__file__)[0]+".py" # modify the frozen field with the current revision number print "Freezing version" svnver=os.popen("svnversion -n .", "r").read() if len(svnver)<4: print "svnversion command doesn't appear to be working." sys.exit(3) try: # temporary - remove following line once code works if svnver[-1]=='M': svnver=svnver[:-1] [int(x) for x in svnver.split(":")] except: print "Your tree isn't pure. Do you have files not checked in (M)?" print svnver,"was returned by svnversion" sys.exit(4) svnver=svnver.split(":")[-1] print "Embedding svnrevision",svnver,"into",myfilename result=[] for line in open(myfilename, "rtU"): if line.startswith('__FROZEN__="$Id:'): line='__FROZEN__="$%s %s $"\n' % ("Id:", svnver) result.append(line) open(myfilename, "wt").write("".join(result)) # python doesn't check .pyc/.pyo files correctly so we proactively delete them for ext in (".pyc", ".pyo"): try: os.remove(os.path.splitext(__file__)[0]+ext) except OSError: pass if __name__=='__main__': import sys if len(sys.argv)==1: # generated for the benefit of the help # purposely missing " around values print "#define VERSION", versionstring print "#define DATENOW", time.strftime("%d %B %Y") elif sys.argv[1]=="freeze": __freeze() else: print "Unknown arguments",sys.argv[1:] bitpim-1.0.7+dfsg1/src/wallpaper.py0000644001616600161660000011577410676544056015333 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2005 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: wallpaper.py 4410 2007-09-26 20:59:26Z djpham $ "Deals with wallpaper and related views" # standard modules from __future__ import with_statement import os import sys import cStringIO import random import time # wx modules import wx import wx.lib.colourselect # my modules import brewcompressedimage import conversions import fileview import guihelper import common import helpids import pubsub import aggregatedisplay import fileinfo # do NOT import guiwidgets into this file else you'll cause a circular dependency ### ### Wallpaper pane ### class DisplayItem(fileview.FileViewDisplayItem): datakey="wallpaper-index" datatype="Image" # this is used in the tooltip thewallpapermanager=None class WallpaperView(fileview.FileView): CURRENTFILEVERSION=2 ID_DELETEFILE=2 ID_IGNOREFILE=3 database_key='wallpaper-index' media_key='wallpapers' default_origin="images" # this is only used to prevent the pubsub module # from being GC while any instance of this class exists __publisher=pubsub.Publisher _bitmaptypemapping={ # the extensions we use and corresponding wx types 'bmp': wx.BITMAP_TYPE_BMP, 'jpg': wx.BITMAP_TYPE_JPEG, 'png': wx.BITMAP_TYPE_PNG, } media_notification_type=pubsub.wallpaper_type def __init__(self, mainwindow, parent, media_root): global thewallpapermanager thewallpapermanager=self self.mainwindow=mainwindow self.usewidth=10 self.useheight=10 self._dummy_image_filename=guihelper.getresourcefile('wallpaper.png') wx.FileSystem_AddHandler(BPFSHandler(self)) self._data={self.database_key: {}} fileview.FileView.__init__(self, mainwindow, parent, media_root, "wallpaper-watermark") self.thedir=self.mainwindow.wallpaperpath self.wildcard="Image files|*.bmp;*.jpg;*.jpeg;*.png;*.gif;*.pnm;*.tiff;*.ico;*.bci;*.bit"\ "|Video files|*.3g2|All files|*.*" ## self.bgmenu.Insert(1,guihelper.ID_FV_PASTE, "Paste") ## wx.EVT_MENU(self.bgmenu, guihelper.ID_FV_PASTE, self.OnPaste) self.modified=False pubsub.subscribe(self.OnListRequest, pubsub.REQUEST_WALLPAPERS) self._raw_image=self._shift_down=False def updateprofilevariables(self, profile): self.usewidth=profile.WALLPAPER_WIDTH self.useheight=profile.WALLPAPER_HEIGHT self.maxlen=profile.MAX_WALLPAPER_BASENAME_LENGTH self.filenamechars=profile.WALLPAPER_FILENAME_CHARS self.convertextension=profile.WALLPAPER_CONVERT_FORMAT self.convertwxbitmaptype=self._bitmaptypemapping[self.convertextension.lower()] if hasattr(profile,"OVERSIZE_PERCENTAGE"): self.woversize_percentage=profile.OVERSIZE_PERCENTAGE self.hoversize_percentage=profile.OVERSIZE_PERCENTAGE else: self.woversize_percentage=120 self.hoversize_percentage=120 for o in profile.GetImageOrigins(): self.media_root.AddMediaNode(o, self) self.excluded_origins=profile.excluded_wallpaper_origins def OnListRequest(self, msg=None): l=[self._data[self.database_key][x].name \ for x in self._data[self.database_key] \ if self._data[self.database_key][x].origin not in self.excluded_origins ] l.sort() pubsub.publish(pubsub.ALL_WALLPAPERS, l) def GetDeleteInfo(self): return guihelper.ART_DEL_WALLPAPER, "Delete Wallpaper" def GetAddInfo(self): return guihelper.ART_ADD_WALLPAPER, "Add Wallpaper" def OnAdd(self, evt=None): self._raw_image=self._shift_down super(WallpaperView, self).OnAdd(evt) # reset the fla self._shift_down=False def GetSections(self): # get all the items items=[DisplayItem(self, key) for key in self._data[self.database_key] if self._data[self.database_key][key].mediadata!=None] self.sections=[] if len(items)==0: return self.sections # get the current sorting type for sectionlabel, items in self.organizeby_Origin(items): self.media_root.AddMediaNode(sectionlabel, self) sh=aggregatedisplay.SectionHeader(sectionlabel) sh.itemsize=(self.usewidth+120, self.useheight+DisplayItem.PADDING*2) for item in items: item.thumbnailsize=self.usewidth, self.useheight # sort items by name items.sort(self.CompareItems) self.sections.append( (sh, items) ) return [sh for sh,items in self.sections] def GetItemSize(self, sectionnumber, sectionheader): return sectionheader.itemsize def GetItemsFromSection(self, sectionnumber, sectionheader): return self.sections[sectionnumber][1] def organizeby_Origin(self, items): types={} for item in items: t=item.origin if t is None: t="Default" l=types.get(t, []) l.append(item) types[t]=l keys=types.keys() keys.sort() return [ (key, types[key]) for key in types] def GetItemThumbnail(self, data, width, height, fileinfo=None): img=self.GetImageFromString(data, fileinfo) if width!=img.GetWidth() or height!=img.GetHeight(): # scale the image. sfactorw=float(width)/img.GetWidth() sfactorh=float(height)/img.GetHeight() sfactor=min(sfactorw,sfactorh) # preserve aspect ratio newwidth=int(img.GetWidth()*sfactor) newheight=int(img.GetHeight()*sfactor) img.Rescale(newwidth, newheight) return img.ConvertToBitmap() def GetImageFromString(self, data, fileinfo): """Gets the named image @return: (wxImage, filesize) """ file,cons = self.GetImageConstructionInformationFromString(data, fileinfo) return cons(file) def GetImage(self, name, origin): """Gets the named image @return: (wxImage, filesize) """ # find the image for _, _item in self._data[self.database_key].items(): if (origin is None or _item.origin==origin) and \ _item.name==name: return self.GetImageFromString(_item.mediadata, None) # This function exists because of the constraints of the HTML # filesystem stuff. The previous code was reading in the file to # a wx.Image, saving it as a PNG to disk (wx.Bitmap.SaveFile # doesn't have save to memory implemented), reading it back from # disk and supplying it to the HTML code. Needless to say that # involves unnecessary conversions and gets slower with larger # images. We supply the info so that callers can make the minimum # number of conversions possible def GetImageConstructionInformationFromString(self, data, fi): """Gets information for constructing an Image from the data @return: (filename to use, function to call that returns wxImage) """ if fi==None: try: fi=self.GetFileInfoString(data) except: fi=None if fi: if fi.format=='AVI': # return the 1st frame of the AVI file return data, conversions.convertavitobmp if fi.format=='LGBIT': # LG phones may return a proprietary wallpaper media file, LGBIT return data, conversions.convertlgbittobmp if fi.format=='3GPP2': # video format, can't yet display the first frame. return data, lambda name: None return cStringIO.StringIO(data), wx.ImageFromStream return self._dummy_image_filename, wx.Image def GetImageConstructionInformation(self, file): """Gets information for constructing an Image from the file @return: (filename to use, function to call that returns wxImage) """ fi=self.GetFileInfo(file) if file.endswith(".mp4") or not os.path.isfile(file): return self._dummy_image_filename, wx.Image if fi: if fi.format=='AVI': # return the 1st frame of the AVI file return file, conversions.convertfileavitobmp if fi.format=='LGBIT': # LG phones may return a proprietary wallpaper media file, LGBIT return file, conversions.convertfilelgbittobmp if fi.format=='3GPP2': # video format, can't yet display the first frame. return file, lambda name: None return file, wx.Image return self._dummy_image_filename, wx.Image def GetFileInfoString(self, string): return fileinfo.identify_imagestring(string) def GetFileInfo(self, filename): return fileinfo.identify_imagefile(filename) def OnAddFiles(self, filenames): for file in filenames: file_stat=os.stat(file) mtime=file_stat.st_mtime if self._raw_image: targetfilename=self.get_media_name_from_filename(file) data=open(file, 'rb').read() self.AddToIndex(targetfilename, self.active_section, data, self._data, mtime) else: # :::TODO:: do i need to handle bci specially here? # The proper way to handle custom image types, e.g. BCI and LGBIT, # is to add a wx.ImageHandler for it. Unfortunately wx.Image_AddHandler # is broken in the current wxPython, so . . . fi=self.GetFileInfo(file) if fi is not None and fi.format=='LGBIT': img=conversions.convertfilelgbittobmp(file) elif fi and fi.format=='3GPP2': # 3g2 video file, no scaling, just add targetfilename=self.get_media_name_from_filename(file) data=open(file, 'rb').read() self.AddToIndex(targetfilename, self.active_section, data, self._data, mtime) continue else: img=wx.Image(file) if not img.Ok(): guihelper.MessageDialog(self, "Failed to understand the image in '"+file+"'", "Image not understood", style=wx.OK|wx.ICON_ERROR) continue self.OnAddImage(img,file,refresh=False, timestamp=mtime) self.OnRefresh() def ReplaceContents(self, name, origin, new_file_name): """Replace the contents of 'file_name' by the contents of 'new_file_name' by going through the image converter dialog """ fi=self.GetFileInfo(new_file_name) if fi is not None and fi.format=='LGBIT': img=conversions.convertfilelgbittobmp(new_file_name) else: img=wx.Image(new_file_name) if not img.Ok(): guihelper.MessageDialog(self, "Failed to understand the image in '"+new_file_name+"'", "Image not understood", style=wx.OK|wx.ICON_ERROR) return with guihelper.WXDialogWrapper(ImagePreviewDialog(self, img, self.mainwindow.phoneprofile, self.active_section), True) as (dlg, retcode): if retcode==wx.ID_OK: img=dlg.GetResultImage() imgparams=dlg.GetResultParams() # ::TODO:: temporary hack - this should really be an imgparam extension={'BMP': 'bmp', 'JPEG': 'jpg', 'PNG': 'png'}[imgparams['format']] res=getattr(self, "saveimage_"+imgparams['format'])(img, imgparams) if not res: guihelper.MessageDialog(self, "Failed to convert the image in '"+new_file_name+"'", "Image not converted", style=wx.OK|wx.ICON_ERROR) self.AddToIndex(name, origin, res, self._data) def OnAddImage(self, img, file, refresh=True, timestamp=None): # ::TODO:: if file is None, find next basename in our directory for # clipboard99 where 99 is next unused number with guihelper.WXDialogWrapper(ImagePreviewDialog(self, img, self.mainwindow.phoneprofile, self.active_section), True) as (dlg, retcode): if retcode==wx.ID_OK: img=dlg.GetResultImage() imgparams=dlg.GetResultParams() origin=self.active_section # if we modified the image update the timestamp if not dlg.skip: timestamp=int(time.time()) # ::TODO:: temporary hack - this should really be an imgparam extension={'BMP': 'bmp', 'JPEG': 'jpg', 'PNG': 'png'}[imgparams['format']] # munge name targetfilename=self.get_media_name_from_filename(file, extension) res=getattr(self, "saveimage_"+imgparams['format'])(img, imgparams) if not res: guihelper.MessageDialog(self, "Failed to convert the image in '"+file+"'", "Image not converted", style=wx.OK|wx.ICON_ERROR) return self.AddToIndex(targetfilename, origin, res, self._data, timestamp) if refresh: self.OnRefresh() def saveimage_BMP(self, img, imgparams): if img.ComputeHistogram(wx.ImageHistogram())<=236: # quantize only does 236 or less img.SetOptionInt(wx.IMAGE_OPTION_BMP_FORMAT, wx.BMP_8BPP) with common.usetempfile('bmp') as f: if img.SaveFile(f, wx.BITMAP_TYPE_BMP): return file(f, 'rb').read() return False def saveimage_JPEG(self, img, imgparams): img.SetOptionInt("quality", 100) with common.usetempfile('jpg') as f: if img.SaveFile(f, wx.BITMAP_TYPE_JPEG): return file(f, 'rb').read() return False def saveimage_PNG(self, img, imgparams): # ::TODO:: this is where the file size constraints should be examined # and obeyed with common.usetempfile('png') as f: if img.SaveFile(f, wx.BITMAP_TYPE_PNG): return file(f, 'rb').read() return False def versionupgrade(self, dict, version): """Upgrade old data format read from disk @param dict: The dict that was read in @param version: version number of the data on disk """ # version 0 to 1 upgrade if version==0: version=1 # they are the same # 1 to 2 etc if version==1: print "converting to version 2" version=2 d={} input=dict.get(self.database_key, {}) for i in input: d[i]={'name': input[i]} dict[self.database_key]=d return dict class WallpaperPreview(wx.PyWindow): def __init__(self, parent, image=None, id=1, size=wx.DefaultSize, pos=wx.DefaultPosition, style=0): wx.PyWindow.__init__(self, parent, id=id, size=size, pos=pos, style=style|wx.FULL_REPAINT_ON_RESIZE) self.bg=wx.Brush(parent.GetBackgroundColour()) self._bufbmp=None wx.EVT_ERASE_BACKGROUND(self, lambda evt: None) wx.EVT_PAINT(self, self.OnPaint) self.SetImage(image) def SetImage(self, name, origin=None): if name is None: self.theimage=None else: self.theimage=thewallpapermanager.GetImage(name, origin) self.thesizedbitmap=None self.Refresh(False) def OnPaint(self, _): sz=self.GetClientSize() if self._bufbmp is None or sz.width>self._bufbmp.GetWidth() or sz.height>self._bufbmp.GetHeight(): self._bufbmp=wx.EmptyBitmap((sz.width+64)&~8, (sz.height+64)&~8) dc=wx.BufferedPaintDC(self, self._bufbmp, style=wx.BUFFER_VIRTUAL_AREA) dc.SetBackground(self.bg) dc.Clear() if self.theimage is None: return # work out what size the scaled bitmap should be to retain its aspect ratio and fit within sz sfactorw=float(sz.width)/self.theimage.GetWidth() sfactorh=float(sz.height)/self.theimage.GetHeight() sfactor=min(sfactorw,sfactorh) newwidth=int(self.theimage.GetWidth()*sfactor) newheight=int(self.theimage.GetHeight()*sfactor) if self.thesizedbitmap is None or self.thesizedbitmap.GetWidth()!=newwidth or \ self.thesizedbitmap.GetHeight()!=newheight: self.thesizedbitmap=self.theimage.Scale(newwidth, newheight).ConvertToBitmap() dc.DrawBitmap(self.thesizedbitmap, sz.width/2-newwidth/2, sz.height/2-newheight/2, True) def ScaleImageIntoBitmap(img, usewidth, useheight, bgcolor=None, valign="center"): """Scales the image and returns a bitmap @param usewidth: the width of the new image @param useheight: the height of the new image @param bgcolor: the background colour as a string ("ff0000" is red etc). If this is none then the background is made transparent""" if bgcolor is None: bitmap=wx.EmptyBitmap(usewidth, useheight, 24) # have to use 24 bit for transparent background else: bitmap=wx.EmptyBitmap(usewidth, useheight) mdc=wx.MemoryDC() mdc.SelectObject(bitmap) # scale the source. sfactorw=usewidth*1.0/img.GetWidth() sfactorh=useheight*1.0/img.GetHeight() sfactor=min(sfactorw,sfactorh) # preserve aspect ratio newwidth=int(img.GetWidth()*sfactor/1.0) newheight=int(img.GetHeight()*sfactor/1.0) img.Rescale(newwidth, newheight) # deal with bgcolor/transparency if bgcolor is not None: transparent=None assert len(bgcolor)==6 red=int(bgcolor[0:2],16) green=int(bgcolor[2:4],16) blue=int(bgcolor[4:6],16) mdc.SetBackground(wx.TheBrushList.FindOrCreateBrush(wx.Colour(red,green,blue), wx.SOLID)) else: transparent=wx.Colour(*(img.FindFirstUnusedColour()[1:])) mdc.SetBackground(wx.TheBrushList.FindOrCreateBrush(transparent, wx.SOLID)) mdc.Clear() mdc.SelectObject(bitmap) # figure where to place image to centre it posx=usewidth-(usewidth+newwidth)/2 if valign in ("top", "clip"): posy=0 elif valign=="center": posy=useheight-(useheight+newheight)/2 else: assert False, "bad valign "+valign posy=0 # draw the image mdc.DrawBitmap(img.ConvertToBitmap(), posx, posy, True) # clean up mdc.SelectObject(wx.NullBitmap) # deal with transparency if transparent is not None: mask=wx.Mask(bitmap, transparent) bitmap.SetMask(mask) if valign=="clip" and newheight!=useheight: return bitmap.GetSubBitmap( (0,0,usewidth,newheight) ) return bitmap ### ### Virtual filesystem where the images etc come from for the HTML stuff ### statinfo=common.statinfo class BPFSHandler(wx.FileSystemHandler): CACHELOWWATER=80 CACHEHIGHWATER=100 def __init__(self, wallpapermanager): wx.FileSystemHandler.__init__(self) self.wpm=wallpapermanager self.cache={} def _GetCache(self, location, statinfo): """Return the cached item, or None Note that the location value includes the filename and the parameters such as width/height """ if statinfo is None: print "bad location",location return None return self.cache.get( (location, statinfo), None) def _AddCache(self, location, statinfo, value): "Add the item to the cache" # we also prune it down in size if necessary if len(self.cache)>=self.CACHEHIGHWATER: print "BPFSHandler cache flush" # random replacement - almost as good as LRU ... while len(self.cache)>self.CACHELOWWATER: del self.cache[random.choice(self.cache.keys())] self.cache[(location, statinfo)]=value def CanOpen(self, location): # The call to self.GetProtocol causes an exception if the # location starts with a pathname! This typically happens # when the help file is opened. So we work around that bug # with this quick check. if location.startswith("/"): return False proto=self.GetProtocol(location) if proto=="bpimage" or proto=="bpuserimage": return True return False def OpenFile(self,filesystem,location): try: res=self._OpenFile(filesystem,location) except: res=None print "Exception in getting image file - you can't do that!" print common.formatexception() if res is not None: # we have to seek the file object back to the begining and make a new # wx.FSFile each time as wxPython doesn't do the reference counting # correctly res[0].seek(0) args=(wx.InputStream(res[0]),)+res[1:] res=wx.FSFile(*args) return res def _OpenFile(self, filesystem, location): proto=self.GetProtocol(location) r=self.GetRightLocation(location) params=r.split(';') r=params[0] params=params[1:] p={} for param in params: x=param.find('=') key=str(param[:x]) value=param[x+1:] if key=='width' or key=='height': p[key]=int(value) else: p[key]=value if proto=="bpimage": return self.OpenBPImageFile(location, r, **p) elif proto=="bpuserimage": return self.OpenBPUserImageFile(location, r, **p) return None def OpenBPUserImageFile(self, location, name, **kwargs): res=BPFSImageFile(self, location, img=self.wpm.GetImage(name, None), **kwargs) return res def OpenBPImageFile(self, location, name, **kwargs): f=guihelper.getresourcefile(name) if not os.path.isfile(f): print f,"doesn't exist" return None si=statinfo(f) res=self._GetCache(location, si) if res is not None: return res res=BPFSImageFile(self, location, name=f, **kwargs) self._AddCache(location, si, res) return res def BPFSImageFile(fshandler, location, name=None, img=None, width=-1, height=-1, valign="center", bgcolor=None): """Handles image files If we have to do any conversion on the file then we return PNG data. This used to be a class derived from wx.FSFile, but due to various wxPython bugs it instead returns the parameters to make a wx.FSFile since a new one has to be made every time. """ # if this is a bad or non-existing image file, use the dummy one! if name is None and img is None: name=guihelper.getresourcefile('wallpaper.png') # special fast path if we aren't resizing or converting image if img is None and width<0 and height<0: mime=guihelper.getwxmimetype(name) # wxPython 2.5.3 has a new bug and fails to read bmp files returned as a stream if mime not in (None, "image/x-bmp"): return (open(name, "rb"), location, mime, "", wx.DateTime_Now()) if img is None: img=wx.Image(name) if width>0 and height>0: b=ScaleImageIntoBitmap(img, width, height, bgcolor, valign) else: b=img.ConvertToBitmap() with common.usetempfile('png') as f: if not b.SaveFile(f, wx.BITMAP_TYPE_PNG): raise Exception, "Saving to png failed" data=open(f, "rb").read() return (cStringIO.StringIO(data), location, "image/png", "", wx.DateTime_Now()) class ImageCropSelect(wx.ScrolledWindow): def __init__(self, parent, image, previewwindow=None, id=1, resultsize=(100,100), size=wx.DefaultSize, pos=wx.DefaultPosition, style=0): wx.ScrolledWindow.__init__(self, parent, id=id, size=size, pos=pos, style=style|wx.FULL_REPAINT_ON_RESIZE) self.previewwindow=previewwindow self.bg=wx.Brush(wx.WHITE) self.parentbg=wx.Brush(parent.GetBackgroundColour()) self._bufbmp=None self.anchors=None wx.EVT_ERASE_BACKGROUND(self, lambda evt: None) wx.EVT_PAINT(self, self.OnPaint) self.image=image self.origimage=image self.setresultsize(resultsize) # cursors for outside, inside, on selection, pressing bad mouse button self.cursors=[wx.StockCursor(c) for c in (wx.CURSOR_ARROW, wx.CURSOR_HAND, wx.CURSOR_SIZING, wx.CURSOR_NO_ENTRY)] self.clickpoint=None wx.EVT_MOTION(self, self.OnMotion) wx.EVT_LEFT_DOWN(self, self.OnLeftDown) wx.EVT_LEFT_UP(self, self.OnLeftUp) def SetPreviewWindow(self, previewwindow): self.previewwindow=previewwindow def OnPaint(self, _): sz=self.thebmp.GetWidth(), self.thebmp.GetHeight() sz2=self.GetClientSize() sz=max(sz[0],sz2[0])+32,max(sz[1],sz2[1])+32 if self._bufbmp is None or self._bufbmp.GetWidth()iw: newanchors=iw-(self.origanchors[2]-self.origanchors[0]),newanchors[1],iw, newanchors[3] if newanchors[3]>ih: newanchors=newanchors[0],ih-(self.origanchors[3]-self.origanchors[1]), newanchors[2],ih self.anchors=newanchors self.Refresh(False) self.updatepreview() return # work out how to do this with left top and then expand code if self.clickpoint==self.HANDLE_LT: aa=0,1,-1,-1 elif self.clickpoint==self.HANDLE_RT: aa=2,1,+1,-1 elif self.clickpoint==self.HANDLE_RB: aa=2,3,+1,+1 elif self.clickpoint==self.HANDLE_LB: aa=0,3,-1,+1 else: assert False, "can't get here" na=[self.origanchors[0],self.origanchors[1],self.origanchors[2],self.origanchors[3]] na[aa[0]]=na[aa[0]]+deltax na[aa[1]]=na[aa[1]]+deltay neww=na[2]-na[0] newh=na[3]-na[1] ar=float(neww)/newh if arself.aspectratio: na[aa[1]]=na[aa[1]]+(neww/self.aspectratio-newh)*aa[3] # ignore if image would be smaller than 10 pixels in any direction if neww<10 or newh<10: return # if any point is off screen, we need to fix things up if na[0]<0: xdiff=-na[0] ydiff=xdiff/self.aspectratio na[0]=0 na[1]+=ydiff if na[1]<0: ydiff=-na[1] xdiff=ydiff*self.aspectratio na[1]=0 na[0]-=xdiff if na[2]>self.dimensions[0]: xdiff=na[2]-self.dimensions[0] ydiff=xdiff/self.aspectratio na[2]=na[2]-xdiff na[3]=na[3]-ydiff if na[3]>self.dimensions[1]: ydiff=na[3]-self.dimensions[1] xdiff=ydiff*self.aspectratio na[2]=na[2]-xdiff na[3]=na[3]-ydiff if na[0]<0 or na[1]<0 or na[2]>self.dimensions[0] or na[3]>self.dimensions[1]: print "offscreen fixup not written yet" return # work out aspect ratio self.anchors=na self.Refresh(False) self.updatepreview() return def OnLeftDown(self, evt): ht=self._hittest(evt) if ht==self.OUTSIDE: self.SetCursor(self.cursors[3]) return self.clickpoint=ht xx,yy=self.CalcUnscrolledPosition(evt.GetX(), evt.GetY()) self.origevtpos=xx,yy self.origanchors=self.anchors def OnLeftUp(self, evt): self.clickpoint=None self.UpdateCursor(evt) def setlbcolour(self, colour): self.bg=wx.Brush(colour) self.remakebitmap() def SetZoom(self, factor): curzoom=float(self.image.GetWidth())/self.origimage.GetWidth() self.anchors=[a*factor/curzoom for a in self.anchors] self.image=self.origimage.Scale(self.origimage.GetWidth()*factor, self.origimage.GetHeight()*factor) self.setresultsize(self.resultsize) def setresultsize(self, (w,h)): self.resultsize=w,h self.aspectratio=ratio=float(w)/h imgratio=float(self.image.GetWidth())/self.image.GetHeight() neww=self.image.GetWidth() newh=self.image.GetHeight() if imgratioratio: newh*=imgratio/ratio # ensure a minimum size neww=max(neww, 50) newh=max(newh, 50) # update anchors if never set if self.anchors==None: self.anchors=0.1 * neww, 0.1 * newh, 0.9 * neww, 0.9 * newh # fixup anchors l,t,r,b=self.anchors l=min(neww-40, l) r=min(neww-10, r) if r-l<20: r=40 t=min(newh-40, t) b=min(newh-10, b) if b-t<20: b=40 aratio=float(r-l)/(b-t) if aratioratio: r=l+(b-t)*ratio self.anchors=l,t,r,b self.dimensions=neww,newh self.thebmp=wx.EmptyBitmap(neww, newh) self.remakebitmap() def remakebitmap(self): w,h=self.dimensions dc=wx.MemoryDC() dc.SelectObject(self.thebmp) dc.SetBackground(self.bg) dc.Clear() dc.DrawBitmap(self.image.ConvertToBitmap(), w/2-self.image.GetWidth()/2, h/2-self.image.GetHeight()/2, True) dc.SelectObject(wx.NullBitmap) self.imageofthebmp=None self.SetVirtualSize( (w, h) ) self.SetScrollRate(1,1) self.updatepreview() self.Refresh(False) # updating the preview is expensive so it is done on demand. We # tell the preview window there has been an update and it calls # back from its paint method def updatepreview(self): if self.previewwindow: self.previewwindow.SetUpdated(self.GetPreview) def GetPreview(self): w,h=self.resultsize l,t,r,b=self.anchors sub=self.thebmp.GetSubBitmap( (l,t,(r-l),(b-t)) ) sub=sub.ConvertToImage() sub.Rescale(w,h) return sub.ConvertToBitmap() class ImagePreview(wx.PyWindow): def __init__(self, parent): wx.PyWindow.__init__(self, parent) wx.EVT_ERASE_BACKGROUND(self, lambda evt: None) wx.EVT_PAINT(self, self.OnPaint) self.bmp=wx.EmptyBitmap(1,1) self.updater=None def SetUpdated(self, updater): self.updater=updater self.Refresh(True) def OnPaint(self, _): if self.updater is not None: self.bmp=self.updater() self.updater=None dc=wx.PaintDC(self) dc.DrawBitmap(self.bmp, 0, 0, False) class ImagePreviewDialog(wx.Dialog): SCALES=[ (0.25, "1/4"), (0.5, "1/2"), (1, "1"), (2, "2"), (4, "4")] def __init__(self, parent, image, phoneprofile, origin): wx.Dialog.__init__(self, parent, -1, "Image Preview", style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.SYSTEM_MENU|wx.MAXIMIZE_BOX|wx.MINIMIZE_BOX) self.phoneprofile=phoneprofile self.image=image self.skip=False self.origin=origin self.target='' self.vbsouter=wx.BoxSizer(wx.VERTICAL) self.SetupControls(self.vbsouter) self.OnTargetSelect(0) wx.EVT_BUTTON(self, wx.ID_HELP, lambda _: wx.GetApp().displayhelpid(helpids.ID_DLG_IMAGEPREVIEW)) self.SetSizer(self.vbsouter) self.vbsouter.Fit(self) import guiwidgets guiwidgets.set_size("wallpaperpreview", self, 80, 1.0) def SetupControls(self, vbsouter): vbsouter.Clear(True) hbs=wx.BoxSizer(wx.HORIZONTAL) self.cropselect=ImageCropSelect(self, self.image) self.vbs=wx.BoxSizer(wx.VERTICAL) self.colourselect=wx.lib.colourselect.ColourSelect(self, wx.NewId(), "Background Color ...", (255,255,255)) self.vbs.Add(self.colourselect, 0, wx.ALL|wx.EXPAND, 5) wx.lib.colourselect.EVT_COLOURSELECT(self, self.colourselect.GetId(), self.OnBackgroundColour) self.vbs.Add(wx.StaticText(self, -1, "Target"), 0, wx.ALL, 5) self.targetbox=wx.ListBox(self, -1, size=(-1,100)) self.vbs.Add(self.targetbox, 0, wx.EXPAND|wx.ALL, 5) self.vbs.Add(wx.StaticText(self, -1, "Scale"), 0, wx.ALL, 5) for one,(s,_) in enumerate(self.SCALES): if s==1: break self.slider=wx.Slider(self, -1, one, 0, len(self.SCALES)-1, style=wx.HORIZONTAL|wx.SL_AUTOTICKS) self.vbs.Add(self.slider, 0, wx.ALL|wx.EXPAND, 5) self.zoomlabel=wx.StaticText(self, -1, self.SCALES[one][1]) self.vbs.Add(self.zoomlabel, 0, wx.ALL|wx.ALIGN_CENTRE_HORIZONTAL, 5) self.vbs.Add(wx.StaticText(self, -1, "Preview"), 0, wx.ALL, 5) self.imagepreview=ImagePreview(self) self.cropselect.SetPreviewWindow(self.imagepreview) self.vbs.Add(self.imagepreview, 0, wx.ALL, 5) hbs.Add(self.vbs, 0, wx.ALL, 5) hbs.Add(self.cropselect, 1, wx.ALL|wx.EXPAND, 5) vbsouter.Add(hbs, 1, wx.EXPAND|wx.ALL, 5) vbsouter.Add(wx.StaticLine(self, -1, style=wx.LI_HORIZONTAL), 0, wx.EXPAND|wx.ALL, 5) vbsouter.Add(self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.HELP), 0, wx.ALIGN_CENTRE|wx.ALL, 5) wx.EVT_SCROLL(self, self.SetZoom) wx.EVT_LISTBOX(self, self.targetbox.GetId(), self.OnTargetSelect) wx.EVT_LISTBOX_DCLICK(self, self.targetbox.GetId(), self.OnTargetSelect) self.OnOriginSelect() def ShowModal(self): # see if the image size is already correct i_w, i_h=self.image.GetSize() for v in self.targets: w,h=self.targets[v]['width'],self.targets[v]['height'] if abs(i_w-w) < 5 and abs(i_h-h) < 5: self.skip=True return wx.ID_OK res=wx.Dialog.ShowModal(self) import guiwidgets guiwidgets.save_size("wallpaperpreview", self.GetRect()) return res def SetZoom(self, evt): self.cropselect.SetZoom(self.SCALES[evt.GetPosition()][0]) self.zoomlabel.SetLabel(self.SCALES[evt.GetPosition()][1]) return def OnBackgroundColour(self, evt): self.cropselect.setlbcolour(evt.GetValue()) def OnOriginSelect(self): self.targets=self.phoneprofile.GetTargetsForImageOrigin(self.origin) keys=self.targets.keys() keys.sort() self.targetbox.Set(keys) if self.target in keys: self.targetbox.SetSelection(keys.index(self.target)) else: self.targetbox.SetSelection(0) def OnTargetSelect(self, _): self.target=self.targetbox.GetStringSelection() if self.targets.has_key(self.target): w,h=self.targets[self.target]['width'],self.targets[self.target]['height'] self.imagepreview.SetSize( (w,h) ) self.cropselect.setresultsize( (w, h) ) self.Refresh(True) def GetResultImage(self): if self.skip: return self.image return self.imagepreview.bmp.ConvertToImage() def GetResultParams(self): return self.targets[self.targetbox.GetStringSelection()] if __name__=='__main__': if __debug__: def profile(filename, command): import hotshot, hotshot.stats, os file=os.path.abspath(filename) profile=hotshot.Profile(file) profile.run(command) profile.close() del profile howmany=100 stats=hotshot.stats.load(file) stats.strip_dirs() stats.sort_stats('time', 'calls') stats.print_stats(100) stats.sort_stats('cum', 'calls') stats.print_stats(100) stats.sort_stats('calls', 'time') stats.print_stats(100) sys.exit(0) class FakeProfile: def GetImageOrigins(self): return {"images": {'description': 'General images'}, "mms": {'description': 'Multimedia Messages'}, "camera": {'description': 'Camera images'}} def GetTargetsForImageOrigin(self, origin): return {"wallpaper": {'width': 100, 'height': 200, 'description': 'Display as wallpaper'}, "photoid": {'width': 100, 'height': 150, 'description': 'Display as photo id'}, "outsidelcd": {'width': 90, 'height': 80, 'description': 'Display on outside screen'}} def run(): app=wx.PySimpleApp() dlg=ImagePreviewDialog(None, wx.Image("test.jpg"), FakeProfile(), "wallpaper") dlg.ShowModal() if __debug__ and True: profile("wp.prof", "run()") run() bitpim-1.0.7+dfsg1/src/prototypes_samsung.py0000644001616600161660000000740511321251753017303 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: prototypes_samsung.py 4777 2010-01-07 03:24:27Z djpham $ """The various types used in protocol descriptions specific to Samsung phones""" import calendar import datetime import time import prototypes class DateTime(prototypes.UINTlsb): _daylight=None def __init__(self, *args, **kwargs): if DateTime._daylight is None: DateTime._daylight=time.localtime()[-1] super(DateTime, self).__init__(*args, **kwargs) kwargs.update({ 'sizeinbytes': 4 }) if self._ismostderived(DateTime): self._update(args, kwargs) def _update(self, args, kwargs): for k in 'constant', 'default', 'value': if kwargs.has_key(k): kwargs[k]=self._converttoint(kwargs[k]) if len(args)==0: pass elif len(args)==1: args=(self._converttoint(args[0]),) else: raise TypeError("expected (year,month,day,hour,minute) as arg") super(DateTime, self)._update(args, kwargs) self._complainaboutunusedargs(DateTime, kwargs) assert self._sizeinbytes==4 _time_delta=315514800.0 def _converttoint(self, date): assert len(date)>4 _timetuple=datetime.datetime(*date[:5]).timetuple()[:-1]+(DateTime._daylight,) return int(calendar.timegm(_timetuple)-self._time_delta) def getvalue(self): """Unpack 32 bit value into date/time @rtype: tuple @return: (year, month, day, hour, minute) """ val=super(DateTime, self).getvalue() return time.gmtime(val+self._time_delta)[:5] @classmethod def now(_): return time.localtime()[:5] class DateTime1(DateTime): # similar to DateTime, except getvalue includes seconds def __init__(self, *args, **kwargs): super(DateTime1, self).__init__(*args, **kwargs) kwargs.update({ 'sizeinbytes': 4 }) if self._ismostderived(DateTime1): self._update(args, kwargs) def getvalue(self): """Unpack 32 bit value into date/time @rtype: tuple @return: (year, month, day, hour, minute, second) """ val=prototypes.UINTlsb.getvalue(self) return time.gmtime(val+self._time_delta)[:6] class DateTime2(DateTime1): # similar to DateTime, with different time delta _time_delta=315532800.0 def __init__(self, *args, **kwargs): super(DateTime2, self).__init__(*args, **kwargs) kwargs.update({ 'sizeinbytes': 4 }) if self._ismostderived(DateTime2): self._update(args, kwargs) class ExpiringTime(prototypes.UINTlsb): # Implement a weird expiring time used by Samsung calendar events def __init__(self, *args, **kwargs): super(ExpiringTime, self).__init__(*args, **kwargs) dict={ 'sizeinbytes': 4 } dict.update(kwargs) if self._ismostderived(ExpiringTime): self._update(args, dict) def _update(self, args, kwargs): for k in 'constant', 'default', 'value': if kwargs.has_key(k): kwargs[k]=self._converttoint(kwargs[k]) if len(args)==0: pass elif len(args)==1: args=(self._converttoint(args[0]),) else: raise TypeError("expected (hour, minute, duration) as arg") super(ExpiringTime, self)._update(args, kwargs) self._complainaboutunusedargs(ExpiringTime, kwargs) assert self._sizeinbytes==4 _delta=3786843600L def _converttoint(self, v): assert len(v)==2 hour, min=v return hour*3600+min*60+self._delta bitpim-1.0.7+dfsg1/src/ical_calendar.py0000644001616600161660000004442211060401304016044 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: ical_calendar.py 4708 2008-09-06 04:10:44Z djpham $ "Deals with iCalendar calendar import stuff" # system modules from __future__ import with_statement import datetime import time # site modules # local modules import bpcalendar import bptime import common_calendar import guihelper import vcal_calendar as vcal import vcard module_debug=False #------------------------------------------------------------------------------- class ImportDataSource(common_calendar.ImportDataSource): # how to define, and retrieve calendar import data source message_str="Pick an iCal Calendar File" wildcard='*.ics' #------------------------------------------------------------------------------- class Duration(object): def __init__(self, data): # Got a dict, compute the time duration in seconds self._duration=0 self._neg=False self._extract_data(data) _funcs={ 'W': lambda x: x*604800, # 7*24*60*60 'H': lambda x: x*3600, # 60*60 'M': lambda x: x*60, 'S': lambda x: x, 'D': lambda x: x*86400, # 24*60*60 'T': lambda x: 0, 'P': lambda x: 0, } def _extract_data(self, data): _i=0 for _ch in data.get('value', ''): if _ch=='+': self._neg=False elif _ch=='-': self._neg=True elif _ch.isdigit(): _i=_i*10+int(_ch) else: self._duration+=self._funcs.get(_ch, lambda _: 0)(_i) _i=0 def get(self): if self._neg: return -self._duration return self._duration #------------------------------------------------------------------------------- parentclass=vcal.VCalendarImportData class iCalendarImportData(parentclass): def __init__(self, file_name=None): super(iCalendarImportData, self).__init__(file_name) def _conv_alarm(self, v, dd): # return True if there's valid alarm and set dd['alarm_value'] # False otherwise # Only supports negative alarm duration value. try: _params=v.get('params', {}) if _params.get('RELATED', None)=='END': return False if _params.get('VALUE', 'DURATION')!='DURATION': return False _d=Duration(v) if _d.get()>0: return False dd['alarm_value']=abs(_d.get()/60) return True except: if __debug__: raise return False def _conv_valarm(self, v, dd): # convert a VALARM block to alarm value, if available/applicable if v.get('value', None)!='VALARM': return False _trigger=v.get('params', {}).get('TRIGGER', None) if _trigger: return self._conv_alarm(_trigger, dd) return False def _conv_duration(self, v, dd): # compute the 'end' date based on the duration return (datetime.datetime(*dd['start'])+\ datetime.timedelta(seconds=Duration(v).get())).timetuple()[:5] def _conv_date(self, v, dd): if v.get('params', {}).get('VALUE', None)=='DATE': # allday event dd['allday']=True return bptime.BPTime(v['value']).get() # building repeat data def _build_value_dict(self, data): _value={} for _item in data.get('value', '').split(';'): _l=_item.split('=') if len(_l)>1: _value[_l[0]]=_l[1].split(',') else: _value[_l[0]]=[] return _value _sorted_weekdays=['FR', 'MO', 'TH', 'TU', 'WE'] _dow_bitmap={ 'SU': 1, 'MO': 2, 'TU': 4, 'WE': 8, 'TH': 0x10, 'FR': 0x20, 'SA': 0x40 } def _build_daily(self, value, dd): # build a daily repeat event dd['repeat_type']='daily' # only support either every nth day or every weekday # is this every weekday? _days=value.get('BYDAY', []) _days.sort() if _days==self._sorted_weekdays: _interval=0 else: try: _interval=int(value.get('INTERVAL', [1])[0]) except ValueError: _interval=1 dd['repeat_interval']=_interval return True def _build_weekly(self, value, dd): # build a weekly repeat event dd['repeat_type']='weekly' try: _interval=int(value.get('INTERVAL', [1])[0]) except ValueError: _interval=1 dd['repeat_interval']=_interval _dow=0 for _day in value.get('BYDAY', []): _dow|=self._dow_bitmap.get(_day, 0) dd['repeat_dow']=_dow return True def _build_monthly(self, value, dd): dd['repeat_type']='monthly' try: _interval2=int(value.get('INTERVAL', [1])[0]) except ValueError: _interval2=1 dd['repeat_interval2']=_interval2 # nth day of the month by default _nth=0 _dow=0 _daystr=value.get('BYDAY', [None])[0] if _daystr: # every nth day-of-week ie 1st Monday _dow=self._dow_bitmap.get(_daystr[-2:], 0) _nth=1 try: if len(_daystr)>2: _nth=int(_daystr[:-2]) elif value.get('BYSETPOS', [None])[0]: _nth=int(value['BYSETPOS'][0]) except ValueError: pass if _nth==-1: _nth=5 if _nth<1 or _nth>5: _nth=1 dd['repeat_dow']=_dow dd['repeat_interval']=_nth return True def _build_yearly(self, value, dd): dd['repeat_type']='yearly' return True _funcs={ 'DAILY': _build_daily, 'WEEKLY': _build_weekly, 'MONTHLY': _build_monthly, 'YEARLY': _build_yearly, } def _conv_repeat(self, v, dd): _params=v.get('params', {}) _value=self._build_value_dict(v) _rep=self._funcs.get( _value.get('FREQ', [None])[0], lambda *_: False)(self, _value, dd) if _rep: if _value.get('COUNT', [None])[0]: dd['repeat_num']=int(_value['COUNT'][0]) elif _value.get('UNTIL', [None])[0]: dd['repeat_end']=bptime.BPTime(_value['UNTIL'][0]).get() dd['repeat_wkst']=_value.get('WKST', ['MO'])[0] return _rep def _conv_exceptions(self, v, _): r=[] try: _val=v if isinstance(v, (list, tuple)) else [v] for _item in _val: for n in _item['value'].split(','): r.append(bptime.BPTime(n).get()) return r except: if __debug__: raise return [] def _conv_start_date(self, v, dd): _dt=bptime.BPTime(v['value']).get(default=(0,0,0, None, None)) if _dt[-1] is None: # all day event dd['allday']=True _dt=_dt[:3]+(0,0) return _dt def _conv_end_date(self, v, _): return bptime.BPTime(v['value']).get(default=(0,0,0, 23,59)) _calendar_keys=[ ('CATEGORIES', 'categories', parentclass._conv_cat), ('DESCRIPTION', 'notes', parentclass._conv_str), ('DTSTART', 'start', _conv_start_date), ('DTEND', 'end', _conv_end_date), ('DURATION', 'end', _conv_duration), ('LOCATION', 'location', parentclass._conv_str), ('PRIORITY', 'priority', parentclass._conv_priority), ('SUMMARY', 'description', parentclass._conv_str), ('RRULE', 'repeat', _conv_repeat), ('EXDATE', 'exceptions', _conv_exceptions), ('BEGIN-END', 'alarm', _conv_valarm), ] #------------------------------------------------------------------------------- class iCalImportCalDialog(vcal.VcalImportCalDialog): _filetype_label='iCalendar File:' _data_type='iCalendar' _import_data_class=iCalendarImportData #------------------------------------------------------------------------------ ExportDialogParent=common_calendar.ExportCalendarDialog out_line=vcard.out_line class ExportDialog(ExportDialogParent): _default_file_name="calendar.ics" _wildcards="ICS files|*.ics" def __init__(self, parent, title): super(ExportDialog, self).__init__(parent, title) def _write_header(self, f): f.write(out_line('BEGIN', None, 'VCALENDAR', None)) f.write(out_line('PRODID', None, '-//BitPim//EN', None)) f.write(out_line('VERSION', None, '2.0', None)) f.write(out_line('METHOD', None, 'PUBLISH', None)) def _write_end(self, f): f.write(out_line('END', None, 'VCALENDAR', None)) def _write_timezone(self, f): # write out the timezone info, return a timezone ID f.write(out_line('BEGIN', None, 'VTIMEZONE', None)) _tzid=time.tzname[0].split(' ')[0] f.write(out_line('TZID', None, _tzid, None)) _offset_standard=-((time.timezone/3600)*100+time.timezone%3600) _offset_daylight=_offset_standard+100 # standard part f.write(out_line('BEGIN', None, 'STANDARD', None)) f.write(out_line('DTSTART', None, '20051030T020000', None)) f.write(out_line('RRULE', None, 'FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11', None)) f.write(out_line('TZOFFSETFROM', None, '%05d'%_offset_daylight, None)) f.write(out_line('TZOFFSETTO', None, '%05d'%_offset_standard, None)) f.write(out_line('END', None, 'STANDARD', None)) # daylight part f.write(out_line('BEGIN', None, 'DAYLIGHT', None)) f.write(out_line('DTSTART', None, '20060402T020000', None)) f.write(out_line('RRULE', None, 'FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3', None)) f.write(out_line('TZOFFSETFROM', None, '%05d'%_offset_standard, None)) f.write(out_line('TZOFFSETTO', None, '%05d'%_offset_daylight, None)) f.write(out_line('END', None, 'DAYLIGHT', None)) # all done f.write(out_line('END', None, 'VTIMEZONE', None)) return _tzid # support writing to ICS file routines def _write_categories(self, keyword, v, *args): _cats=[x['category'] for x in v] if _cats: return out_line(keyword, None, ','.join(_cats), None) def _write_string(self, keyword, v, *args): if v: return out_line(keyword, None, v, None) def _write_priority(self, keyword, v, *args): if v<1: return return out_line(keyword, None, '%d'%min(v, 9), None) def _write_alarm(self, keyword, v, *args): if v<0: # No Alarm return _res=out_line('BEGIN', None, 'VALARM', None) _res+=out_line('TRIGGER', None, '-P%dDT%dH%dM'%(v/1440, (v%1440)/60, v%60), None) _res+=out_line('ACTION', None, 'AUDIO', None) _res+=out_line('END', None, 'VALARM', None) return _res def _write_times_single(self, keyword, v, event, tzid): # write the DTSTART/DTEND property for a single # (non-recurrent) event _start=bptime.BPTime(event.start) _end=bptime.BPTime(event.end) if event.allday: # all day event _params=('VALUE=DATE',) _res=out_line('DTSTART', _params, _start.iso_str(no_time=True), None) _end+=bptime.timedelta(days=1) _res+=out_line('DTEND', _params, _end.iso_str(no_time=True), None) else: _params=('TZID=%s'%tzid,) _res=out_line('DTSTART', _params, _start.iso_str(no_seconds=False), None) _res+=out_line('DTEND', _params, _end.iso_str(no_seconds=False), None) return _res def _write_start(self, event, tzid): # write the DTSTART/DURATION property for a recurrent event _start=bptime.BPTime(event.start) _end=bptime.BPTime(event.end) if event.allday: # all day event, can only handle sameday allday event (for now) _params=('VALUE=DATE',) _res=out_line('DTSTART', _params, _start.iso_str(no_time=True), None) _end+=bptime.timedelta(days=1) _res+=out_line('DTEND', _params, _end.iso_str(no_time=True), None) else: # can only handle 24hr-long event (for now) _new_end=_start+(_end-_start).seconds _params=('TZID=%s'%tzid,) _res=out_line('DTSTART', _params, _start.iso_str(no_seconds=False), None) _res+=out_line('DTEND', _params, _new_end.iso_str(no_seconds=False), None) return _res def _write_repeat_daily(self, event, rpt): _value=['FREQ=DAILY'] if not event.open_ended(): _value.append('UNTIL=%04d%02d%02dT000000Z'%event.end[:3]) if rpt.interval: # every nth day _value.append('INTERVAL=%d'%rpt.interval) else: # weekday _value.append('BYDAY=MO,TU,WE,TH,FR') return out_line('RRULE', None, ';'.join(_value), None) _dow_list=( (1, 'SU'), (2, 'MO'), (4, 'TU'), (8, 'WE'), (16, 'TH'), (32, 'FR'), (64, 'SA')) _dow_wkst={ 1: 'MO', 2: 'TU', 3: 'WE', 4: 'TH', 5: 'FR', 6: 'SA', 7: 'SU' } def _write_repeat_weekly(self, event, rpt): _dow=rpt.dow _byday=','.join([x[1] for x in self._dow_list \ if _dow&x[0] ]) _value=['FREQ=WEEKLY', 'INTERVAL=%d'%rpt.interval, 'BYDAY=%s'%_byday, 'WKST=%s'%self._dow_wkst.get(rpt.weekstart, 'MO')] if not event.open_ended(): _value.append('UNTIL=%04d%02d%02d'%event.end[:3]) return out_line('RRULE', None, ';'.join(_value), None) def _write_repeat_monthly(self, event, rpt): _value=['FREQ=MONTHLY', 'INTERVAL=%d'%rpt.interval2, ] if not event.open_ended(): _value.append('UNTIL=%04d%02d%02dT000000Z'%event.end[:3]) _dow=rpt.dow if _dow==0: # every n-day of the month _value.append('BYMONTHDAY=%d'%event.start[2]) else: # every n-th day-of-week (ie 1st Monday) for _entry in self._dow_list: if _dow & _entry[0]: _dow_name=_entry[1] break if rpt.interval<5: _nth=rpt.interval else: _nth=-1 _value.append('BYDAY=%d%s'%(_nth, _dow_name)) return out_line('RRULE', None, ';'.join(_value), None) def _write_repeat_yearly(self, event, rpt): _value=['FREQ=YEARLY', 'INTERVAL=1', 'BYMONTH=%d'%event.start[1], 'BYMONTHDAY=%d'%event.start[2], ] if not event.open_ended(): _value.append('UNTIL=%04d%02d%02dT000000Z'%event.end[:3]) return out_line('RRULE', None, ';'.join(_value), None) def _write_repeat_exceptions(self, event, rpt): # write out the exception dates return out_line('EXDATE', ('VALUE=DATE',), ','.join([x.iso_str(no_time=True) for x in rpt.suppressed]), None) def _write_repeat(self, event): _repeat=event.repeat _type=_repeat.repeat_type if _type: _res=getattr(self, '_write_repeat_'+_type, lambda *_: None)(event, _repeat) if _res and _repeat.suppressed: _res+=self._write_repeat_exceptions(event, _repeat) return _res def _write_times_repeat(self, keyword, v, event, tzid): return self._write_start(event, tzid)+self._write_repeat(event) def _write_times(self, keyword, v, event, tzid): # write the START and DURATION property if event.repeat: return self._write_times_repeat(keyword, v, event, tzid) else: return self._write_times_single(keyword, v, event, tzid) _field_list=( ('SUMMARY', 'description', _write_string), ('DESCRIPTION', 'notes', _write_string), ('DTSTART', 'start', _write_times), ('LOCATION', 'location', _write_string), ('PRIORITY', 'priority', _write_priority), ('CATEGORIES', 'categories', _write_categories), ('TRIGGER', 'alarm', _write_alarm), ) def _write_event(self, f, event, tzid): # write out an BitPim Calendar event f.write(out_line('COMMENT', None, '//----------', None)) f.write(out_line('BEGIN', None, 'VEVENT', None)) for _entry in self._field_list: _v=getattr(event, _entry[1], None) if _v is not None: _line=_entry[2](self, _entry[0], _v, event, tzid) if _line: f.write(_line) f.write(out_line('DTSTAMP', None, '%04d%02d%02dT%02d%02d%02dZ'%time.gmtime()[:6], None)) f.write(out_line('UID', None, event.id, None)) f.write(out_line('END', None, 'VEVENT', None)) def _export(self): filename=self.filenamectrl.GetValue() try: f=file(filename, 'wt') except: f=None if f is None: guihelper.MessageDialog(self, 'Failed to open file ['+filename+']', 'Export Error') return all_items=self._selection.GetSelection()==0 dt=self._start_date.GetValue() range_start=(dt.GetYear(), dt.GetMonth()+1, dt.GetDay()) dt=self._end_date.GetValue() range_end=(dt.GetYear(), dt.GetMonth()+1, dt.GetDay()) cal_dict=self.GetParent().GetCalendarData() self._write_header(f) _tzid=self._write_timezone(f) # now go through the data and export each event for k,e in cal_dict.items(): if not all_items and \ (e.end < range_start or e.start>range_end): continue self._write_event(f, e, _tzid) self._write_end(f) f.close() bitpim-1.0.7+dfsg1/src/call_history_export.py0000644001616600161660000001147710664454771017435 0ustar amuamu### BITPIM ### ### Copyright (C) 2004 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: call_history_export.py 4377 2007-08-27 04:58:33Z djpham $ "Deals with Call History import/export stuff" # System Module from __future__ import with_statement # wxPython modules import wx # BitPim Modules import bptime import guihelper import phonenumber #------------------------------------------------------------------------------ class ExportCallHistoryDialog(wx.Dialog): def __init__(self, parent, title): super(ExportCallHistoryDialog, self).__init__(parent, -1, title) self._chwidget=parent.GetActiveCallHistoryWidget() self._sel_data=self._chwidget.get_selected_data() self._data=self._chwidget.get_data() # make the ui vbs=wx.BoxSizer(wx.VERTICAL) hbs=wx.BoxSizer(wx.HORIZONTAL) hbs.Add(wx.StaticText(self, -1, "File"), 0, wx.ALL|wx.ALIGN_CENTRE, 5) self.filenamectrl=wx.TextCtrl(self, -1, "callhistory_export.csv") hbs.Add(self.filenamectrl, 1, wx.ALL|wx.EXPAND, 5) self.browsectrl=wx.Button(self, wx.NewId(), "Browse...") hbs.Add(self.browsectrl, 0, wx.ALL|wx.EXPAND, 5) vbs.Add(hbs, 0, wx.EXPAND|wx.ALL, 5) # selection GUI vbs.Add(self.GetSelectionGui(self), 5, wx.EXPAND|wx.ALL, 5) # the buttons vbs.Add(wx.StaticLine(self, -1, style=wx.LI_HORIZONTAL), 0, wx.EXPAND|wx.ALL,5) vbs.Add(self.CreateButtonSizer(wx.OK|wx.CANCEL), 0, wx.ALIGN_CENTER|wx.ALL, 5) # event handlers wx.EVT_BUTTON(self, self.browsectrl.GetId(), self.OnBrowse) wx.EVT_BUTTON(self, wx.ID_OK, self.OnOk) # all done self.SetSizer(vbs) self.SetAutoLayout(True) vbs.Fit(self) def GetSelectionGui(self, parent): hbs=wx.BoxSizer(wx.HORIZONTAL) rbs=wx.StaticBoxSizer(wx.StaticBox(self, -1, "Call History"), wx.VERTICAL) lsel=len(self._sel_data) lall=len(self._data) self.rows_selected=wx.RadioButton(self, wx.NewId(), "Selected (%d)" % (lsel,), style=wx.RB_GROUP) self.rows_all=wx.RadioButton(self, wx.NewId(), "All (%d)" % (lall,)) if lsel==0: self.rows_selected.Enable(False) self.rows_selected.SetValue(0) self.rows_all.SetValue(1) rbs.Add(self.rows_selected, 0, wx.EXPAND|wx.ALL, 2) hbs.Add(rbs, 3, wx.EXPAND|wx.ALL, 5) rbs.Add(self.rows_all, 0, wx.EXPAND|wx.ALL, 2) return hbs def OnBrowse(self, _): with guihelper.WXDialogWrapper(wx.FileDialog(self, defaultFile=self.filenamectrl.GetValue(), wildcard="CSV files (*.csv)|*.csv", style=wx.SAVE|wx.CHANGE_DIR), True) as (dlg, retcode): if retcode==wx.ID_OK: self.filenamectrl.SetValue(dlg.GetPath()) def OnOk(self, _): # do export filename=self.filenamectrl.GetValue() try: _fp=file(filename, 'wt') except: _fp=None if _fp is None: guihelper.MessageDialog(self, 'Failed to open file ['+filename+']', 'Export Error') self.EndModal(wx.ID_OK) if self.rows_all.GetValue(): _data=self._data else: _data=self._sel_data self._export_csv(_fp, _data) _fp.close() self.EndModal(wx.ID_OK) def _datetime_str(self, v): _dt=bptime.BPTime(v) return _dt.date_str()+' '+_dt.time_str() def _phonenumber_str(self, v): return phonenumber.format(v) def _hms(self, v): if v is None or not isinstance(v, int): return '' else: return '%02d:%02d:%02d'%(v/3600, v/60, v%60) _csv_template=( ('Date', 'datetime', _datetime_str), ('Number', 'number', _phonenumber_str), ('Name', 'name', None), ('Duration', 'duration', _hms), ('Type', 'folder', None)) def _export_csv(self, fp, ch): # export Call History data to CSV format # print out the header fp.write(','.join(['"'+e[0]+'"' for e in self._csv_template])+'\n') # and the entries _keys=ch.keys() _keys.sort() for k in _keys: try: e=ch[k] _l=[] for _c in self._csv_template: if _c[2] is None: _s=str(getattr(e, _c[1], '')) else: _s=_c[2](self, getattr(e, _c[1], None)) _l.append('"'+_s.replace('"', '')+'"') fp.write(','.join(_l)+'\n') except: if __debug__: raise bitpim-1.0.7+dfsg1/src/usbscan.py0000644001616600161660000001133210502633470014746 0ustar amuamu### BITPIM ### ### Copyright (C) 2003-2004 Roger Binns ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: usbscan.py 3577 2006-09-15 23:28:56Z djpham $ "Scans the USB busses in the same way that comscan scans comm ports" version="$Revision: 3577 $" try: import native.usb as usb except ImportError: usb=None import guihelper import usb_ids ids=None needdriver=None def usbscan(*args, **kwargs): if usb is None: return [] global ids if ids is None: ids=usb_ids.usb_ids() ids.add_data(guihelper.getresourcefile("usb.ids")) ids.add_data(guihelper.getresourcefile("bitpim_usb.ids")) global needdriver if needdriver is None: needdriver=[] for line in open(guihelper.getresourcefile("usb_needdriver.ids"), "rt"): line=line.strip() if line.startswith("#") or len(line)==0: continue prod,vend,iface=[int(x, 16) for x in line.split()] needdriver.append( (prod,vend,iface) ) res=[] usb.UpdateLists() for bus in usb.AllBusses(): for device in bus.devices(): for iface in device.interfaces(): seenin=False seenout=False for ep in iface.endpoints(): if ep.isbulk(): if ep.direction()==ep.IN: seenin=True else: seenout=True if seenin and seenout: # we now have a device/interface that has bidirectional bulk endpoints name="usb::%s::%s::%d" % (bus.name(), device.name(), iface.number()) active=True available=False try: iface.openbulk().close() available=True except: pass v={'name': name, 'active': active, 'available': available, 'libusb': True, 'usb-vendor#': device.vendor(), 'usb-product#': device.product(), 'usb-interface#': iface.number(), 'VID': '0x%04X'%device.vendor(), 'PID': '0x%04X'%device.product() } if ( device.vendor(), device.product(), iface.number() ) in needdriver: v["available"]=False v['driver-required']=True vend,prod,i=ids.lookupdevice(device.vendor(), device.product(), iface.number()) if vend is None: vend="#%04X" % (device.vendor(),) else: v['usb-vendor']=vend if prod is None: prod="#%04X" % (device.product(),) else: v['usb-product']=prod if i is None: i="#%02X" % (iface.number(),) else: v['usb-interface']=i hwinstance="USB Device - Vendor %s, Product %s, (Interface %s)" % \ (vend, prod, i) v['description']=hwinstance prot=" / ".join([val for val in ids.lookupclass(*(iface.classdetails())) if val is not None]) if len(prot): v["protocol"]=prot for n,i in ("usb-vendorstring", device.vendorstring), \ ("usb-productstring", device.productstring), \ ("usb-serialnumber", device.serialnumber): try: x=i() if x is not None: v[n]=x except: pass res.append(v) return res def isusbsupported(): return usb is not None if __name__=="__main__": res=usbscan() output="UsbScan "+version+"\n\n" for r in res: rkeys=r.keys() rkeys.sort() output+=r['name']+":\n" offset=0 for rk in rkeys: if rk=='name': continue v=r[rk] if not isinstance(v, type("")): v=`v` op=' %s: %s ' % (rk, v) if offset+len(op)>78: output+="\n"+op offset=len(op)+1 else: output+=op offset+=len(op) if output[-1]!="\n": output+="\n" output+="\n" offset=0 print output bitpim-1.0.7+dfsg1/src/bp_obex.py0000644001616600161660000006305410454042735014742 0ustar amuamu### BITPIM ### ### Copyright (C) 2006 Joe Pham ### ### This program is free software; you can redistribute it and/or modify ### it under the terms of the BitPim license as detailed in the LICENSE file. ### ### $Id: bp_obex.py 3460 2006-07-08 23:55:09Z djpham $ """Provide support to OBEX protocol""" # System Modules import time import struct import xml.dom.minidom # BitPim modules import bptime module_debug=False # Header Codes Header_Count=0xC Header_Name=0x01 Header_Type=0x42 Header_Length=0xC3 Header_Time=0x44 Header_Description=0x05 Header_Target=0x46 Header_HTTP=0x47 Header_Body=0x48 Header_BodyEnd=0x49 Header_Who=0x4A Header_ConnectionID=0xCB Header_AppParameters=0x4C Header_AuthChallenge=0x4D Header_AuthResponse=0x4E Header_ObjectClass=0x4F # Header String Header_Count_Str='Count' Header_Name_Str='Name' Header_Type_Str='Type' Header_Length_Str='Length' Header_Time_Str='Time' Header_Description_Str='Description' Header_Target_Str='Target' Header_HTTP_Str='HTTP' Header_Body_Str='Body' Header_BodyEnd_Str='BodyEnd' Header_Who_Str='Who' Header_ConnectionID_Str='ConnectionID' Header_AppParameters_Str='AppParameters' Header_AuthChallenge_Str='AuthChallenge' Header_AuthResponse_Str='AuthResponse' Header_ObjectClass_Str='ObjectClass' # Code-to-name dict Header_Name_Dict={ Header_Count: Header_Count_Str, Header_Name: Header_Name_Str, Header_Type: Header_Type_Str, Header_Length: Header_Length_Str, Header_Time: Header_Time_Str, Header_Description: Header_Description_Str, Header_Target: Header_Target_Str, Header_HTTP: Header_HTTP_Str, Header_Body: Header_Body_Str, Header_BodyEnd: Header_BodyEnd_Str, Header_Who: Header_Who_Str, Header_ConnectionID: Header_ConnectionID_Str, Header_AppParameters: Header_AppParameters_Str, Header_AuthChallenge: Header_AuthChallenge_Str, Header_AuthResponse: Header_AuthResponse_Str, Header_ObjectClass: Header_ObjectClass_Str, } Valid_Header_Codes=Header_Name_Dict.keys() # Packet code constants Packet_Connect=0x80 Packet_Disconnect=0x81 Packet_Put=0x02 Packet_PutEnd=0x82 Packet_Get=0x03 Packet_GetEnd=0x83 Packet_SetPath=0x85 Packet_Abort=0xFF Packet_Resp_Continue=0x90 Packet_Resp_OK=0xA0 Packet_Resp_Created=0xA1 Packet_Resp_Accepted=0xA2 Packet_Resp_NonAuthoritativeInfo=0xA3 Packet_Resp_NoContent=0xA4 Packet_Resp_ResetContent=0xA5 Packet_Resp_PartialContent=0xA6 Packet_Resp_MultipleChoices=0xB0 Packet_Resp_MovedPermanently=0xB1 Packet_Resp_MovedTemporarily=0xB2 Packet_Resp_SeeOther=0xB3 Packet_Resp_NotModified=0xB4 Packet_Resp_UseProxy=0xB5 Packet_Resp_BadRequest=0xC0 Packet_Resp_Unauthorized=0xC1 Packet_Resp_PaymentRequired=0xC2 Packet_Resp_Forbidden=0xC3 Packet_Resp_NotFound=0xC4 Packet_Resp_MethodNotAllowed=0xC5 Packet_Resp_NotAcceptable=0xC6 Packet_Resp_ProxyAuthenticationRequired=0xC7 Packet_Resp_RequestTimeOut=0xC8 Packet_Resp_Conflict=0xC9 Packet_Resp_Gone=0xCA Packet_Resp_LengthRequired=0xCB Packet_Resp_PreconditionFailed=0xCC Packet_Resp_RequestedEntityTooLarge=0xCD Packet_Resp_RequestURLTooLarge=0xCE Packet_Resp_UnsupportedMediaType=0xCF Packet_Resp_InternalServerError=0xD0 Packet_Resp_NotImplemented=0xD1 Packet_Resp_BadGateway=0xD2 Packet_Resp_ServiceUnavailable=0xD3 Packet_Resp_GatewayTimeout=0xD4 Packet_Resp_HTTPVersionNotSupported=0xD5 Packet_Resp_DatabaseFull=0xE0 Packet_Resp_DatabaseLocked=0xE1 # Packet code name Packet_Connect_Str='Connect' Packet_Disconnect_Str='Disconnect' Packet_Put_Str='Put' Packet_PutEnd_Str='PutEnd' Packet_Get_Str='Get' Packet_GetEnd_Str='GetEnd' Packet_SetPath_Str='SetPath' Packet_Abort_Str='Abort' Packet_Resp_Continue_Str='Continue' Packet_Resp_OK_Str='OK' Packet_Resp_Created_Str='Created' Packet_Resp_Accepted_Str='Accepted' Packet_Resp_NonAuthoritativeInfo_Str='NonAuthoritative Information' Packet_Resp_NoContent_Str='No Content' Packet_Resp_ResetContent_Str='Reset Content' Packet_Resp_PartialContent_Str='Partial Content' Packet_Resp_MultipleChoices_Str='Multiple Choices' Packet_Resp_MovedPermanently_Str='Moved Permanently' Packet_Resp_MovedTemporarily_Str='Moved Temporarily' Packet_Resp_SeeOther_Str='See Other' Packet_Resp_NotModified_Str='Not Modified' Packet_Resp_UseProxy_Str='Use Proxy' Packet_Resp_BadRequest_Str='Bad Request' Packet_Resp_Unauthorized_Str='Unauthorized' Packet_Resp_PaymentRequired_Str='Payment Required' Packet_Resp_Forbidden_Str='Forbidden' Packet_Resp_NotFound_Str='Not Found' Packet_Resp_MethodNotAllowed_Str='Method Not Allowed' Packet_Resp_NotAcceptable_Str='NotAcceptable' Packet_Resp_ProxyAuthenticationRequired_Str='Proxy Authentication Required' Packet_Resp_RequestTimeOut_Str='Request Time Out' Packet_Resp_Conflict_Str='Conflict' Packet_Resp_Gone_Str='Gone' Packet_Resp_LengthRequired_Str='Length Required' Packet_Resp_PreconditionFailed_Str='Precondition Failed' Packet_Resp_RequestedEntityTooLarge_Str='Requested Entity Too Large' Packet_Resp_RequestURLTooLarge_Str='Request URL Too Large' Packet_Resp_UnsupportedMediaType_Str='Unsupported Media Type' Packet_Resp_InternalServerError_Str='Internal Server Error' Packet_Resp_NotImplemented_Str='Not Implemented' Packet_Resp_BadGateway_Str='Bad Gateway' Packet_Resp_ServiceUnavailable_Str='Service Unavailable' Packet_Resp_GatewayTimeout_Str='Gateway Timeout' Packet_Resp_HTTPVersionNotSupported_Str='HTTP Version Not Supported' Packet_Resp_DatabaseFull_Str='Database Full' Packet_Resp_DatabaseLocked_Str='Database Locked' # Code-to-name dict Packet_Name_Dict={ Packet_Connect: Packet_Connect_Str, Packet_Disconnect: Packet_Disconnect_Str, Packet_Put: Packet_Put_Str, Packet_PutEnd: Packet_PutEnd_Str, Packet_Get: Packet_Get_Str, Packet_GetEnd: Packet_GetEnd_Str, Packet_SetPath: Packet_SetPath_Str, Packet_Abort: Packet_Abort_Str, Packet_Resp_Continue: Packet_Resp_Continue_Str, Packet_Resp_OK: Packet_Resp_OK_Str, Packet_Resp_Created: Packet_Resp_Created_Str, Packet_Resp_Accepted: Packet_Resp_Accepted_Str, Packet_Resp_NonAuthoritativeInfo: Packet_Resp_NonAuthoritativeInfo_Str, Packet_Resp_NoContent: Packet_Resp_NoContent_Str, Packet_Resp_ResetContent: Packet_Resp_ResetContent_Str, Packet_Resp_PartialContent: Packet_Resp_PartialContent_Str, Packet_Resp_MultipleChoices: Packet_Resp_MultipleChoices_Str, Packet_Resp_MovedPermanently: Packet_Resp_MovedPermanently_Str, Packet_Resp_MovedTemporarily: Packet_Resp_MovedTemporarily_Str, Packet_Resp_SeeOther: Packet_Resp_SeeOther_Str, Packet_Resp_NotModified: Packet_Resp_NotModified_Str, Packet_Resp_UseProxy: Packet_Resp_UseProxy_Str, Packet_Resp_BadRequest: Packet_Resp_BadRequest_Str, Packet_Resp_Unauthorized: Packet_Resp_Unauthorized_Str, Packet_Resp_PaymentRequired: Packet_Resp_PaymentRequired_Str, Packet_Resp_Forbidden: Packet_Resp_Forbidden_Str, Packet_Resp_NotFound: Packet_Resp_NotFound_Str, Packet_Resp_MethodNotAllowed: Packet_Resp_MethodNotAllowed_Str, Packet_Resp_NotAcceptable: Packet_Resp_NotAcceptable_Str, Packet_Resp_ProxyAuthenticationRequired: Packet_Resp_ProxyAuthenticationRequired_Str, Packet_Resp_RequestTimeOut: Packet_Resp_RequestTimeOut_Str, Packet_Resp_Conflict: Packet_Resp_Conflict_Str, Packet_Resp_Gone: Packet_Resp_Gone_Str, Packet_Resp_LengthRequired: Packet_Resp_LengthRequired_Str, Packet_Resp_PreconditionFailed: Packet_Resp_PreconditionFailed_Str, Packet_Resp_RequestedEntityTooLarge: Packet_Resp_RequestedEntityTooLarge_Str, Packet_Resp_RequestURLTooLarge: Packet_Resp_RequestURLTooLarge_Str, Packet_Resp_UnsupportedMediaType: Packet_Resp_UnsupportedMediaType_Str, Packet_Resp_InternalServerError: Packet_Resp_InternalServerError_Str, Packet_Resp_NotImplemented: Packet_Resp_NotImplemented_Str, Packet_Resp_BadGateway: Packet_Resp_BadGateway_Str, Packet_Resp_ServiceUnavailable: Packet_Resp_ServiceUnavailable_Str, Packet_Resp_GatewayTimeout: Packet_Resp_GatewayTimeout_Str, Packet_Resp_HTTPVersionNotSupported: Packet_Resp_HTTPVersionNotSupported_Str, Packet_Resp_DatabaseFull: Packet_Resp_DatabaseFull_Str, Packet_Resp_DatabaseLocked: Packet_Resp_DatabaseLocked_Str, } Valid_Packet_Code=Packet_Name_Dict.keys() FolderBrowsingServiceID='\xF9\xEC\x7B\xC4\x95\x3C\x11\xD2\x98\x4E\x52\x54\x00\xDC\x9E\x09' FolderListingType='x-obex/folder-listing' # OBEX Exceptions class OBEXBadHeaderCode(Exception): def __init__(self, code): Exception.__init__(self, 'Bad Header Code: 0x%02X'%code) self.bad_code=code class OBEXBadPacketCode(Exception): def __init__(self, code): Exception.__init__(self, 'Bad Packet Code: 0x%02X'%code) self.bad_code=code class OBEXBadPacketLength(Exception): def __init__(self, expected_length, bad_length): Exception.__init__(self, 'Bad Packet Length: %d instead of %d'%(bad_length, expected_length)) self.expected_length=expected_length self.bad_length=bad_length class OBEXBadResponse(Exception): def __init__(self, code): Exception.__init__(self, 'Bad response code: %d (%s)'%(code, Packet_Name_Dict.get(code, 'Unknown code'))) self.bad_code=code class OBEXNoResponse(Exception): def __init__(self): Exception.__init__(self, 'No response received from device') # OBEX FolderListingObject class OBEXFolderListingObject(object): def __init__(self, data=None): if data: self.decode(data) else: self.data=None def _decode_date(self, dt_str): _date=bptime.BPTime(dt_str).mktime() return _date, time.strftime("%x %X", time.gmtime(_date)) def decode(self, data): dom=xml.dom.minidom.parseString(data) _folder_listing=dom.getElementsByTagName('folder-listing')[0] self.data={} for _f in _folder_listing.getElementsByTagName('file'): _file_dict={ 'name': _f.getAttribute('name'), 'size': int(_f.getAttribute('size')), 'type': 'file', 'date': self._decode_date(_f.getAttribute('modified')) } self.data[_file_dict['name']]=_file_dict for _f in _folder_listing.getElementsByTagName('folder'): _file_dict={ 'name': _f.getAttribute('name'), 'type': 'directory' } self.data[_file_dict['name']]=_file_dict # OBEXHeader-------------------------------------------------------------------- class OBEXHeader(object): """Handle an OBEX Header object""" def __init__(self, header_code, data=None): self.code=header_code if self.code is None and data: self.decode(data) else: self.data=data def len(self): """Return the length of this header""" return len(self.encode()) def get_name(self): return Header_Name_Dict.get(self.code, 'Unknown Header Code') def get(self, string_key=False): if string_key: return { self.get_name(): self.data } return { self.code: self.data } # encoding routines--------------------------------------------------------- def _encode_unicode(self): if self.data is not None: _s=(self.data+'\x00').encode('utf_16be') return struct.pack('B', self.code)+struct.pack('!H', len(_s)+3)+_s return struct.pack('B', self.code)+'\x00\x03' def _encode_bytes(self): if self.data: return struct.pack('B', self.code)+\ struct.pack('!H', len(self.data)+3)+\ self.data return struct.pack('B', self.code)+'\x00\x03' def _encode_1(self): return struct.pack('BB', self.code, self.data and self.data&0xff or 0) def _encode_4(self): return struct.pack('!BI', self.code, self.data or 0) encode_list=(_encode_unicode, _encode_bytes, _encode_1, _encode_4) def encode(self): """Return an encoded string of this header""" if self.code not in Valid_Header_Codes: raise OBEXBadHeaderCode(self.code) _encode_type=(self.code & 0xC0)>>6 return self.encode_list[_encode_type](self) # decoding routines--------------------------------------------------------- def _decode_unicode(self, data): _len=struct.unpack('!H', data[1:3])[0] self.data=data[3:_len].decode('utf_16be')[:-1] def _decode_bytes(self, data): _len=struct.unpack('!H', data[1:3])[0] self.data=data[3:_len] def _decode_1(self, data): self.data=struct.unpack('B', data[1])[0] def _decode_4(self, data): self.data=struct.unpack('!I', data[1:5])[0] decode_list=(_decode_unicode, _decode_bytes, _decode_1, _decode_4) def decode(self, data): global Valid_Header_Codes """decode the raw data received from a device""" self.code=struct.unpack('B', data[0])[0] if self.code not in Valid_Header_Codes: raise OBEXBadHeaderCode(self.code) _decode_type=(self.code&0xC0)>>6 self.decode_list[_decode_type](self, data) # Packet Class------------------------------------------------------------------ class OBEXPacket(object): def __init__(self, code, data=None): self.version_number=None self.flags=None self.max_packet_length=None self.constants=None self._headers=[] self.code=code if code is None and data: self.decode(data) def len(self): return len(self.encode()) def get_name(self): return Packet_Name_Dict.get(self.code, 'Unknown Packet Code') def append(self, header_code, data=None): self._headers.append(OBEXHeader(header_code, data)) def clear(self): self._headers=[] def get(self, string_key=False): _res={} for _h in self._headers: _res.update(_h.get(string_key)) return _res # encoding stuff def encode(self): global Valid_Packet_Code if self.code not in Valid_Packet_Code: raise OBEXBadPacketCode(self.code) _packet_len=3 # code+len _packet_str=[struct.pack('B', self.code), ''] if self.version_number is not None: _packet_len+=1 _packet_str.append(struct.pack('B', self.version_number)) if self.flags is not None: _packet_len+=1 _packet_str.append(struct.pack('B', self.flags)) if self.max_packet_length is not None: _packet_len+=2 _packet_str.append(struct.pack('!H', self.max_packet_length)) elif self.constants is not None: _packet_len+=1 _packet_str.append(struct.pack('B', self.constants)) for _h in self._headers: _s=_h.encode() _packet_len+=len(_s) _packet_str.append(_s) _packet_str[1]=struct.pack('!H', _packet_len) return ''.join(_packet_str) # decoding stuff def decode(self, data): global Valid_Packet_Code self.code=struct.unpack('B', data[0])[0] if self.code not in Valid_Packet_Code: raise OBEXBadPacketCode(self.code) _packet_len=struct.unpack('!H', data[1:3])[0] if _packet_len!=len(data): raise OBEXBadPacketLength(_packet_len, len(data)) if self.code==Packet_Connect: self.version_number, self.flags, self.max_packet_length=struct.unpack('!BBH', data[3:7]) _idx=7 elif self.code==Packet_SetPath: self.flags, self.constants=struct.unpack('BB', data[3:5]) _idx=5 else: _idx=3 while _idx<_packet_len: _h=OBEXHeader(None, data[_idx:]) _idx+=_h.len() self._headers.append(_h) class OBEXPacketConnectResp(OBEXPacket): # Special response packet to a Connect request # This one has a slightly different format than the standard response # Should ONLY be used for decoding incoming response to a Connect request def decode(self, data): global Valid_Packet_Code self.code=struct.unpack('B', data[0])[0] if self.code not in Valid_Packet_Code: raise OBEXBadPacketCode(self.code) _packet_len=struct.unpack('!H', data[1:3])[0] if _packet_len!=len(data): raise OBEXBadPacketLength(_packet_len, len(data)) self.version_number, self.flags, self.max_packet_length=struct.unpack('!BBH', data[3:7]) _idx=7 while _idx<_packet_len: _h=OBEXHeader(None, data[_idx:]) _idx+=_h.len() self._headers.append(_h) # Class FolderBrowsingService--------------------------------------------------- class FolderBrowsingService(object): def __init__(self, logtarget, commport): self.log=self._log self.progress=self._progress if logtarget: if hasattr(logtarget, 'log'): self.log=logtarget.log if hasattr(logtarget, 'progress'): self.progress=logtarget.progress self.comm=commport self.connection_id=0 self.max_packet_length=0x2000 self.server_max_packet_length=255 self.version_number=0x10 self.data_block_length=0x07E0 # default length of a data block def _log(self, str): print str def _progress(self, pos, max, desc): print desc,pos,'out of',max def _send_packet(self, packet): global module_debug _s=packet.encode() if module_debug: self.log('Sending Packet: '+' '.join(['0x%02X'%ord(x) for x in _s])) self.comm.write(_s) def _get_response(self): global module_debug _code=self.comm.read(1) if not _code: raise OBEXNoResponse() _len_str=self.comm.read(2) _len=struct.unpack('!H', _len_str)[0] if _len>3: _data=self.comm.read(_len-3) else: _data='' _s=_code+_len_str+_data if module_debug: self.log('Receiving Packet: '+' '.join(['0x%02X'%ord(x) for x in _s])) return _s def _send_and_check_return(self, packet, expected_code=[Packet_Resp_OK]): self._send_packet(packet) _resp=OBEXPacket(None, self._get_response()) if _resp.code not in expected_code: raise OBEXBadResponse(_resp.code) return _resp def _get_body(self, packet, totallen=None, filename=None): _resp=self._send_and_check_return(packet, [Packet_Resp_OK, Packet_Resp_Continue]) _s='' _pkt=OBEXPacket(Packet_GetEnd) while _resp.code==Packet_Resp_Continue: _dict=_resp.get() if _dict.has_key(Header_Body): if _dict[Header_Body]: _s+=_dict[Header_Body] elif _dict.has_key(Header_BodyEnd): if _dict[Header_BodyEnd]: _s+=_dict[Header_BodyEnd] _resp=self._send_and_check_return(_pkt, [Packet_Resp_OK, Packet_Resp_Continue]) if totallen and filename: self.progress(len(_s), totallen, 'Reading file: '+filename) if _resp.code==Packet_Resp_OK: _dict=_resp.get() if _dict.get(Header_BodyEnd, None): _s+=_dict[Header_BodyEnd] return _s def _send_body(self, packet, data, filename=None): _resp=self._send_and_check_return(packet, [Packet_Resp_Continue]) _len_data=len(data) _pkt=OBEXPacket(Packet_Put) for _block in range(0, _len_data, self.data_block_length): _start_idx=_block _end_idx=min(_start_idx+self.data_block_length, _len_data) _pkt.clear() _pkt.append(Header_Body, data[_start_idx:_end_idx]) self._send_and_check_return(_pkt, [Packet_Resp_Continue]) if filename: self.progress(_end_idx, _len_data, 'Writing file: '+filename) _pkt=OBEXPacket(Packet_PutEnd) _pkt.append(Header_BodyEnd) self._send_and_check_return(_pkt, [Packet_Resp_OK]) def connect(self): # connect to a phone try: _pkt=OBEXPacket(Packet_Connect) _pkt.version_number=self.version_number _pkt.flags=0 _pkt.max_packet_length=self.max_packet_length _pkt.append(Header_Target, FolderBrowsingServiceID) self._send_packet(_pkt) _s=self._get_response() _resp=OBEXPacketConnectResp(None, _s) if _resp.code!=Packet_Resp_OK: return False self.server_max_packet_length=_resp.max_packet_length _pkt_dict=_resp.get() if _pkt_dict.has_key(Header_ConnectionID): self.connection_id=_pkt_dict[Header_ConnectionID] return True except Exception, e: if __debug__: raise self.log('Exception raise: '+str(e)) return False def disconnect(self): try: _pkt=OBEXPacket(Packet_Disconnect) _pkt.append(Header_ConnectionID, self.connection_id) self._send_packet(_pkt) self._get_response() except Exception, e: if __debug__: raise self.log('Exception raise: '+str(e)) def _setpath(self, dirname=''): # go to the root first _pkt=OBEXPacket(Packet_SetPath) _pkt.flags=2 _pkt.constants=0 _pkt.append(Header_ConnectionID, self.connection_id) _pkt.append(Header_Name, dirname) self._send_and_check_return(_pkt) def _set_path_root(self): # go back to root # The V710 OBEX firmware SetPath to root has a bug # this is a work-around for it but also works with other device too. _pkt=OBEXPacket(Packet_SetPath) _pkt.flags=3 # go up one, don't create _pkt.constants=0 _pkt.append(Header_ConnectionID, self.connection_id) _pkt.append(Header_Name) while True: # keep going one dir up until no further try: self._send_and_check_return(_pkt) except OBEXBadResponse: break def _list_current_folder(self): _pkt=OBEXPacket(Packet_GetEnd) _pkt.append(Header_ConnectionID, self.connection_id) _pkt.append(Header_Name, '') _pkt.append(Header_Type, FolderListingType+'\x00') return OBEXFolderListingObject(self._get_body(_pkt)).data def setpath(self, dir=''): self._set_path_root() for _path in dir.split('/'): if _path: self._setpath(_path) def _update_filesystem_dict(self, fs_dict, dir): _res={} for _,_entry in fs_dict.items(): if dir: _name=dir+'/'+_entry['name'] else: _name=_entry['name'] _res[_name]=_entry _res[_name]['name']=_name return _res def getfilesystem(self, dir='', recurse=0): self.log('Listing OBEX dir '+dir) try: self.setpath(dir) _res=self._update_filesystem_dict(self._list_current_folder(), dir) if recurse: _subdir_list=[_key for _key,_entry in _res.items() \ if _entry.get('type', None)=='directory'] for _subdir in _subdir_list: _res.update(self.getfilesystem(_subdir, recurse-1)) return _res except Exception, e: if __debug__: raise self.log('Exception raised: '+str(e)) return {} def listfiles(self, dir=''): _res={} for _key,_entry in self.getfilesystem(dir).items(): if _entry['type']=='file': _res[_key]=_entry return _res def listsubdirs(self, dir='', recurse=0): _res={} for _key,_entry in self.getfilesystem(dir, recurse).items(): if _entry['type']=='directory': _res[_key]=_entry return _res def writefile(self, name, data): self.log('Writing OBEX file: '+name) _name_list=name.split('/') _dir_name='/'.join(_name_list[:-1]) _file_name=_name_list[-1] self.setpath('/'.join(name.split('/')[:-1])) _pkt=OBEXPacket(Packet_Put) _pkt.append(Header_ConnectionID, self.connection_id) _pkt.append(Header_Length, len(data)) _pkt.append(Header_Name, _file_name) self._send_body(_pkt, data, _file_name) def rmfile(self, name): self.log('Deleting OBEX file: '+name) _name_list=name.split('/') _dir_name='/'.join(_name_list[:-1]) _file_name=_name_list[-1] self.setpath('/'.join(name.split('/')[:-1])) _pkt=OBEXPacket(Packet_PutEnd) _pkt.append(Header_ConnectionID, self.connection_id) _pkt.append(Header_Name, _file_name) self._send_and_check_return(_pkt) def getfilecontents(self, name, size=None): self.log('Reading OBEX file: '+name) _name_list=name.split('/') _dir_name='/'.join(_name_list[:-1]) _file_name=_name_list[-1] if size: self.setpath('/'.join(name.split('/')[:-1])) _totallen=size else: _file_list=self.listfiles(_dir_name) _totallen=_file_list.get(name, {}).get('size', None) _pkt=OBEXPacket(Packet_GetEnd) _pkt.append(Header_ConnectionID, self.connection_id) _pkt.append(Header_Name, _file_name) return self._get_body(_pkt, _totallen, _file_name) bitpim-1.0.7+dfsg1/help/0000755001616600161660000000000011330125024013066 5ustar amuamubitpim-1.0.7+dfsg1/help/dialog-calimppreset.htd0000644001616600161660000000543410611773510017534 0ustar amuamu#include "pagestart.h"

This dialog allows users to create, edit, and execute Calendar Import Presets. These presets store all of the necessary parameters of frequent calendar import operations, and can be "executed" with a single mouse click, thus effectively provide "shortcuts" to these imports.
SCREENSHOT(screen-calimppreset.png,)


Buttons

Import:

Execute the selected (highlighted) preset.

New:

Create a new preset and bring up the Calendar Preset Wizard that lets users defining the parameters of this preset.

Edit:

Bring up the Calendar Preset Wizard that lets users updating the parameters of the selected preset.

Delete:

Delete the selected preset.

Cancel

Quit the dialog.


Calendar Import Preset Wizard


SCREENSHOT(screen-calimppresetwiz1.png,)



SCREENSHOT(screen-calimppresetwiz2.png,)



SCREENSHOT(screen-calimppresetwiz3.png,)


Click on Browse to select the source from which calendar data would be imported. Depending on the data type, the source could either be a file, an \URL, or an Outlook folder.


SCREENSHOT(screen-calimppresetwiz4.png,)


Click on Modify to set/change various filtering paramters.


SCREENSHOT(screen-calimppresetwiz5.png,)


  • Replace All: Import, then replace all BitPim calendar data with the new data.

  • Add: Import, then add the new calendar data to existing BitPim data. This may produce duplicate calendar events.

  • Preview: Read the data, then bring up a Calendar Import Preview dialog from which users can take further actions.

  • Merge: Read the data, then bring up the Calendar Merge dialog from which users can take further actions.


Calendar Import Preset Preview


SCREENSHOT(screen-calimppresetpreview.png,)



This dialog displays a list of calendar events available for import and allows users to take further actions on them.

Buttons

Replace All:

Discard current BitPim calendar data and replace them with the preview data.

Add:

Add the preview data to existing BitPim calendar data. This may cause duplicate events.

Merge:

Bring up the Calendar Merge dialog.

Cancel

Discard the preview data and close this dialog.

#include "pageend.h"bitpim-1.0.7+dfsg1/help/lgg4015-notes.htd0000644001616600161660000001000510547564173016021 0ustar amuamu#include "pagestart.h"

Phone Information

  • I can't seem to retrieve the ESN off the phone, so for a unique ID, I use the ID of the SIM card instead. The implication is that if a different SIM card is used with the same phone, BitPim will identify it as a different phone.

Contacts

  • The maximum number of contacts the phone can hold is 255. The SIM card can hold 250 contacts.

  • On the phone, each contact can have up to 3 numbers (mobile, home, and office), email, and memo/note. On the SIM card, each contact holds 1 number.

  • When reading contacts from the SIM card, the type of the number of each contact is set to mobile. When sending contacts to the SIM card, the first number on the list is sent regardless of the type.

  • Ringtone and Wallpaper assignments to contacts are not applicable.

  • Speed Dials cannot be set from BitPim and must be set manually on the phone. The same goes for Group Ringtone assignments.

  • Group (category) names cannot be set/updated from BitPim and must be done manually on the phone.

  • Every time BitPim updates the contacts to the phone, it rewrites the whole phonebook. This process might be improved in the future (ie only update the ones that have been changed).

Calendar

  • The maximum number of calendar events is 30.

  • Phone calendar events have no end date/time, and BitPim will set it to be the same as the start date/time.

  • Phone recurrent events are open-ended (forever).

  • When sending recurrent events to the phone, the "nth" values are discarded. For example, a daily event set to occur every 3rd day in BitPim will be sent to the phone as a every-day daily event.

  • BitPim alarm values will be approximated to the next lower valid phone alarm values. For example, a BitPim alarm value of 61(min) will be set to 1hr on the phone, while a value of 59(min) will be set to 30min on the phone.

Ringtones

  • This phone can play SMAF (.mmf) and MIDI (.mid) files.

  • A maximum of 20 ringtones can be downloaded.

  • Ringtone upload from the phone to BitPim DOES NOT WORK! Reading ringtone data from the phone only reads the list of downloaded ringtones available on the phone, and not the ringtone contents.

  • Deleting ringtones on the phone "from" BitPim does not work reliably. This is a phone firmware issue. The workaround is to delete them manually from the phone.

Wallpapers

  • This phone accepts JPEG, BMP, and GIF images as wallpapers. BitPim uses JPEG as the default format.

  • The maximum of 20 images can be downloaded.

  • The phone full screen resolution is 128x128.

  • Wallpaper upload from the phone to BitPim DOES NOT WORK! Reading wallpaper data from the phone only reads the list of downloaded wallpapers available on the phone, and not the wallpaper contents.

  • Deleting wallpapers on the phone from BitPim does not work reliably. This is a phone firmware issue. The workaround is to delete them manually from the phone.

SMS

  • SMS feature is completed. However, BitPim may not always properly parse the SMS data from the phone. This is due to the fact that I have no real SMS data with which to test. Please report/post all discrepancies to the bitpim-user mailing list.

Call History

  • Call History feature is currently not complete. It is available for data collection purposes. If you wish to help with the data collection, perform the following steps:

    1. Turn on the Protocol Logging View: Menu View -> View protocol logging

    2. Retrieve Call History Data from the phone:

      1. Menu Data -> Get Phone Data

      2. From the Get Data from Phone dialog, check only on SMS & Replace All, then click OK

    3. email the contents of the Protocol Log to djpham@bitpim.org

#include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-lgvx10000.htd0000644001616600161660000000067510721731463016264 0ustar amuamu#include "pagestart.h"

What works

Phonebook, wallpaper, ringers, calendar, memo, call history, SMS, and file system. BitPim can autodetect this phone if it is connected to the PC via a straight USB cable.

Contents

BEGIN_TOC TOC_0 TOCITEM_0(Cables,phone-lgvx10000-cables.htm) TOCITEM_0(Notes,phone-lgvx10000-notes.htm) ENDTOC_0 END_TOC #include "pageend.h" bitpim-1.0.7+dfsg1/help/phones-requested.htd0000644001616600161660000000216010731601141017064 0ustar amuamu#include "pagestart.h"

These phones are not currently supported by BitPim but have been requested by BitPim users. Phones that are not available/accessible to the BitPim developers are unlikely to be supported. We would appreciate any loans and donations of these and other phones.

TABLE_GRID Manufacturer Model Carrier LG AX-355   LG LX-550   LG VX-8600 Verizon Wireless LG VX-9400 Verizon Wireless LG VX-9900 Verizon Wireless Samsung SCH-A790   Samsung SCH-A900   Samsung SCH-U620 Verizon Wireless Sanyo SCP-200 Sprint Sanyo SCP-2400 Sprint Sanyo SCP-8400 Sprint #include "pageend.h" bitpim-1.0.7+dfsg1/help/error-nopvconv.htd0000644001616600161660000000464110547562471016617 0ustar amuamu#include "pagestart.h" SCREENSHOT(screen-nopvconv.png,No pvconv)

Phones that use CDMA chipsets from Qualcomm use the Qualcomm PureVoice format for storing audio. In order to convert audio from another format to or from PureVoice, BitPim needs a program that can do so.

Qualcomm do have such a program, but their legal terms do not allow us to redistribute the program with BitPim, nor do they respond to email queries about distribution once they learn that no money is charged for BitPim. Consequently you will need to download the program and place it one of the directories BitPim looks for it.

Download

The download site is URL(http://www.cdmatech.com/solutions/products/purevoice_download.jsp, http://www.cdmatech.com/solutions/products/purevoice_download.jsp). You will want the version 3.0 converter.

Mac note: If you use MacOS then you are out of luck for the moment. Quicktime does include the ability to play PureVoice, but that appears to be it.

Linux note: The binary was made on some older version of Linux. You may find it doesn't work on more recent versions. You may be able to use the SDK to make a newer converter program, but carefully read the license agreements. Unfortunately the legal terms prevent the BitPim team from being able to make an alternate working binary for Linux, or from re-distributing one.

Extract and copy

The download is in an archive format such as ZIP or compressed tar. Extract the contents, which should be around 3 files: the pvconv binary, a sample qcp file and a text file with the license agreement and other documentation. Copy/move the files to a directory that BitPim looks in. These are listed in the dialog and are different for each platform.

Test

Verify the binary works and can find all necessary libraries. This would be a command such as pvconv PVsample.qcp on Windows and ./pvconv PVsample.qcp on Linux/Mac.

Note: If you intend to use the pvconv program yourself, be aware that both the Linux and Windows versions have documentation claiming you can supply input and output filenames. The version 3.0 converter has a bug and will error out if you give an output filename.

You are all set

Retry your operation in BitPim and the conversions should work.

#include "pageend.h" bitpim-1.0.7+dfsg1/help/faq-mediaoptions.htd0000644001616600161660000000145310547564173017057 0ustar amuamu#include "pagestart.h"

In general, the Add option does the followings:

  1. Update (overwrite) the contents of existing media files from BitPim to the phone if they're different (or more accurately: if the file sizes are different).

  2. Copy new media files from BitPim to the phone (those files that exist in BitPim but not the phone).

In general, the Replace All option does the followings:

  1. Update (overwrite) the contents of existing media files from BitPim to the phone if they're different (or more accurately: if the file sizes are different).

  2. Copy new media files from BitPim to the phone (those files that exist in BitPim but not on the phone).

  3. Delete all media files from the phone that are not in BitPim.

#include "pageend.h"bitpim-1.0.7+dfsg1/help/versionhistory.htd0000644001616600161660000030237211324011701016704 0ustar amuamu#include "pagestart.h"

Changes in 1.0.7

  • Maintenacne: Upgrade to Sqlite-3.6.1 and APSW-3.5.9-r2.

  • Maintenance: Upgrade to pySerial-2.4.

  • Maintenance: Upgrade to paramiko-1.7.4 (Desmond).

  • Maintenance: Upgrade to PyWin32 Build 212.

  • Maintenance: Upgrade to wxPython-2.8.8.1.

  • New phone support: Motorola V3m (Sprint) (Initial)

  • Bug fix: iCalendar import does not process all exception dates.

  • Bug fix: LG LX-570: BitPim failed to read all contact entries.

  • Bug fix: iCalendar Import/Export: BitPim did not process all-day events properly.

  • Bug fix: iCalendar Import: BitPim failed to import monthly events.

  • Bug fix: BitPim failed to print Memo data.

  • Bug fix: LG VX-9100: BitPim failed to read media index file.

  • New phone support: LG VX-9600 (Versa) (Initial)

  • Bug fix: LG VX-9400: BitPim failed to write phonebook data.

  • Improvement: Users can now edit phone owner's name.

  • Maintenance: Upgrade to zlib-1.2.3

  • New phone support: LG VX-11000 (Initial)

  • New phone support: LG VX-9200 (Initial)

  • New phone support: LG CX-9200 (Initial)

  • New phone support: LG VX-5500 (Initial)

  • New phone support: Samsung SCH-U750 (Alias 2) (Initial)

  • Bug fix: Y2010 fix Sanyo SMS code

Changes in 1.0.6

  • Bug fix: LG VX-8800/10000 Note Pad.

  • Improvement: LG AX-8600 Call History and Note Pad (patch submitted by David Ritter).

  • Bug fix: LG VX-8500/8800/10000: better BREW file access (i.e. fewer "file block" errors).

  • Bug fix: LG VX-9900: access to the mmc1 dir via Command Line Interface (CLI).

  • Bug fix: Motorola: BitPim failed to read phonebook from some Motorola models.

  • Improvement: Call History: Navigate to other subtrees.

  • Bug fix: SCP-6650: Fix Katana-II phone/port detection

  • Add "extrazero" fields to listfile and listdirectory responses so that filesystem view will work for Samsung SPHA-900. May break filesystem view for other phones.

  • New phone support: Sanyo SCP-8400

  • New phone support: LG VX-9100 (enV2)

  • Bug fix: Can't view Data Recording files on non-Intel Mac.

  • Bug fix: Correctly process BREW special files.

  • New phone support: LG VX-8560

  • New Phone support: LG VX-9700

  • New Phone support: LG VX-8610

  • Bug fix: LG VX-9900 SMS support.

  • Bug fix: Sanyo SCP-7500. Correctly read date on Sent messages.

  • Maintenance: Upgrade build script.

  • New phone support: LG LX-570 (Musiq) (Initial)

  • Bug fix: Support for the LG VX-8800 V4, LG VX-8550 V4, and LG VX-10000 V9.

  • Bug fix: Calendar Import Filter dialog raised exception.

  • Improvement: In the Get Data from Phone and Send Data to Phone dialog, clicking on either the Add or Replace All selection of a row will also enable that row.

  • Improvement: Edit PhoneBook Entry dialog: add/edit ICE setting.

  • Bug fix: LG VX-8350, LG VX-8550: failed to read/write large files.

Changes in 1.0.5

  • New phone support: Samsung SCH-A870 (VZW)

  • Improvement: Call History duration display (patch submitted by ???)

  • Maintenance: Upgrade to SQLite 3.5.4.

  • Bug fix: Busy message dialog raised exception.

Changes in 1.0.4

  • New phone support: Samsung SCH-U740 (VZW) (Initial)

  • Maintenance: Upgrade to wxPython 2.8.7.1

  • New phone support: Motorola K1m (Initial)

  • New phone support: Samsung SCH-U470 (Juke) (Initial)

  • New phone support: Sanyo SCP-7050

  • Bug fix: LG-AX8600 max number of phone entries.

  • Bug fix: Linux RPM Build.

  • Bug fix: Phone detection for recent Sanyo phones

  • Bug fix: Samsung SPH-M300: ringtone conversion.

  • New phone support: Motorola V3m (VZW) (Initial)

  • New phone support: Motorola V325 (VZW) (Initial)

  • Bug fix: LG VX-8550/5400/8800/10000: display wrong caller ID number.

  • Bug fix: LG VX-8800: image preset resolutions.

  • Bug fix: Help Build scripts.

Changes in 1.0.3

  • Improvement: Monthly Calendar Print: print one month per page.

  • New Feature: Command Line Interface. See the Help pages for more details.

  • Bug fix: Export SMS menu throws exception.

  • New phone support: SCP-3200 Untested.

  • Bug fix: LG VX-8550: Memo support.

  • New phone support: LG VX-8800 (initial).

  • New phone support: LG VX-10000 (initial).

  • New phone support: Samsung SPH-M300 (Sprint) (initial).

  • New phone support: LG VX-8350 (initial).

  • New phone support: LG VX-5400 (initial).

  • New phone support: Samsung SPH-A900 (initial, phonebook read only).

  • Improvement: print SMS items in sorted order.

  • Maintenance: patches to libusb wrapper as submitted by Mark Rages and Thomas Rachel.

  • Maintenance: Upgrade to SQLite 3.5.3.

  • Bug fix: LG VX-8550 text memo/notepad.

  • Bug fix: LG VX-8550 phonebook.

Changes in 1.0.2

  • Maintenance: Upgrade to Python 2.5.1

  • Maintenance: Upgrade to SQLITE 3.4.1

  • Maintenance: Upgrade to paramiko 1.7.1 (Amy)

  • Maintenance: Upgrade to wxPython 2.8.4.2

  • Improvement: List software components used by BitPim in the About Dialog.

  • Improvement: LG VX-8300 firmware V3 support.

  • Bug fix: LG VX-9400 get group error.

  • Bug fix: LG VX-8700 decrease data packet size.

  • Improvement: Added Comm Timeout setting to the BitPim Settings dialog.

  • Maintenance: New shorter BitPim description string.

  • Bug fix: Set maximum number of calendar entries that can be sent to LG phones.

  • Improvement: iCal support: WKST parameter.

  • Improvement: Allow reading of prefix 1 and other non-digit phone numbers from the phone.

  • Bug fix: Outlook calendar import: all-day events that span more than one day.

  • Bug fix: Calendar events summary window pop-up during Get Phone Data freezes BitPim.

  • Improvement: display ringtone information in the Contact Editor dialog.

  • New phone support: SCP-6650 (Katana-II)

  • Bug fix: LG VX-8550: BitPim failed to write contacts to the phone.

  • Improvement: Display the number of contacts in the Phonebook view.

Changes in 1.0.1

  • Maintenance: Gentoo tbz2 package.

  • Maintenance: Improved support for LG VX-5300, VX-8500, VX8600, VX-8700, VX-9400.

  • Bug fix: LG VX-9400 calendar support.

  • Improvement: Reading ringtones on RL4930 also reads voice memos

  • Improvement: Increase read/write data block size for LG VX-8700/9400.

  • New phone support: LG VX-8550 (initial).

  • Maintenance: Disable T9 User Database read.

  • Bug fix: BitPim fails to auto-detect when a phone is disconnected and a different model is connected.

  • Improvement: Feature to allow users to automatically create trouble reports suitable for posting to the BitPim Developer List or emailing to BitPim developers.

  • Improvement: Sanyo SCP-6600 Change maximum phone number length from 32 to 48 digits.

  • New phone support: LG AX-8600 (initial).

  • Improvement: LG VX-8700 memo support.

  • Bug fix: Samsung SCH-A930/A950: Calendar time off by 1 hour (again!).

  • Bug fix: Float file timestamp values raised exception.

Changes in 1.0.0

  • Improvement (Windows): users can now toggle between the Help window and BitPim window.

  • Bug fix: LG VX-8100/8300/8500/8600/8700: non-existing calendar file raised exception during calendar send.

  • Bug fix: LG VX-8700: bad phone file date crashed BitPim.

  • Bug fix: Motorola E815/E815m/V3c/V3cm auto-detection.

  • Bug fix (Linux): Contact entry editor does not work properly with 2 or more ringtones or wallpapers.

  • Bug fix: Samsung SCH-A930/A950: Calendar time off by 1 hour.

  • New phone support: LG VX-9400.

  • Maintenance: LG VX-8700: updated default image resolutions.

  • Maintenance (Linux): Auto port detection and phone detection. See the Linux USB Help for more details.

  • Maintenance (Linux): binary deb package.

  • Maintenance: replaced getopt with gnu_getopt.

  • Maintenance: updated Mac build script.

Changes in 0.9.15

  • Bug fix: Calendar Import Preset dialog does not work properly on Linux.

  • Bug fix: Phonebook preview pane does not work at startup on Linux.

  • Bug fix: BitPim failed to export SMS entries with no dates.

  • New feature: SMS Print.

  • Bug fix: libusb on Debian.

  • New feature: Memo Print.

  • New feature: Generate HTML files from Print Dialog.

  • Bug fix: LG VX8100/8300/8500: Invalid monthly events crashed BitPim.

  • New feature: Added the Playlist Size field to the Playlist display.

  • Maintenance: Display more info when ringtone conversions fail.

  • Bug fix: bad/non-existing wallpaper image crashes Phonebook view.

  • Bug fix: Phone filesystem view does not properly set the sash position on Linux.

  • New feature: Enable drag-and-drop feature for Linux.

  • New phone support: Verizon Wireless LG VX-8700

  • New feature: LG VX8500/8600/8700 BitPim can now "request" the phone to enter Diagnostic Mode (DM).

  • Bug fix: Right-click in filesystem view does not immediately pop up the context menu.

  • New feature: Phone auto-detection on Linux.

  • New feature: Copy-and-paste files from GTK to BitPim.

  • Bug fix: bitfling process does not start.

  • Bug fix: SMS Export Browse dialog does not show CSV files.

  • Maintenance: Upgrade to wxPython-2.8.4.0

  • Maintenance: Upgrade to sqlite-3.3.17

Changes in 0.9.14

  • Bug fix: media vtable reads wrong files.

  • Maintenance: update component package versions.

  • Bug fix: Samsung SCH-A930/950 calendar timezone.

  • Bug fix: iCalendar import fails to correctly set ALARM value.

  • Bug fix: BitPim imports invalid Outlook montly events, which are failed to send to the LG VX8100/8300/8500.

  • Maintenance: Upgrade to wxPython-2.8.3.0.

  • Bug fix: Calendar Import Wizard truncates path name.

  • Bug fix: Create Data Storage Wizard truncates path name.

  • New feature: Samsung SCH-A930: retrieve video files along with wallpapers.

  • New feature: Add Next 7 Days preset option to calendar import filter.

  • Bug fix: Phone contact editor incorrectly displays wallpaper and ringtone assignments.

  • New feature: Add Merge option to the calendar import process.

  • New feature: Add HowTos and FAQ to the Help menu.

Changes in 0.9.13

  • Bug fix: prevent two BitPim instances using the same storage area.

  • New feature: display the storage name (if available) on the BitPim main window.

  • Bug fix: New daylight saving time in iCal calendar export.

  • Bug fix: Motorola V710 support.

  • Bug fix: T9 Editor failed to delete words.

  • Bug fix: LG VX8500: failed to send T9 data to the phone.

  • Added Phone Info for Sanyo Phones.

  • New feature: LG UX5000 support.

Changes in 0.9.12

  • New feature: prevent two BitPim instances using the same storage area.

  • Bug fix: Build 0.9.11 database compatibility issue.

  • Bug fix: LG VX-8500: limit the size of each playlist to 50 songs.

  • Bug fix: LG VX-8600: disable Play List feature.

Changes in 0.9.11

  • New phone support: SCP-2400.

  • Bug fix: Calendar Import Preset does not adjust dates.

  • Help pages update.

  • VCard import now detects Apple's files that are in Unicode format but without byte order markers

  • Bug fix: LG VX-8600 Call History feature.

  • Additional support features for LG VX-9900.

  • Bug fix: Added the "Secret" field to the Phone Entry Editor Dialog.

  • Bug fix: Print preview crashed BitPim.

  • Bug fix: Revert-to-saved not working in GTK.

  • Bug fix: Switched to OS native buttons in dialogs.

  • Bug fix: LG VX Busy phonebook crashed BitPim.

  • New phone support: LG VX-5300

  • New feature: Help menu item that takes users directly to the Help page of the current phone model (if available). This feature is also available from a Help button from the Set Phone wizard.

  • Moved menu item Phone Info from main menu Edit to View.

  • Sanyo SCP-6600 (Katana): Writing the phonebook now supported.

  • Bug fix: Windows comscan crashed BitPim.

  • Bug fix: Improved LG VX-8500/8600 T9 User Database feature.

  • Design change: storing media data via Sqlite virtual tables.

  • New feature: Create New BitPim Data Storage wizard.

  • Bug fix: iCalendar import.

Changes in 0.9.10

  • Bug fix: Unknown command line parameter crashes BitPim.

  • New phone support: LG VX-8600.

  • New phone support: Sanyo SCP-200.

  • New phone support: LG VX-9900 (phonebook, wallpapers, and ringtones).

  • New feature: T9 User Database maintenance. Initially, only the LG VX-8500/8600 supports this feature.

Changes in 0.9.09

  • Bug fix: Adding mp3 ringtones crashes BitPim (LG-VX8300)

  • Windows: Fixed issue where BitPim would silently fail if My Documents didn't exist (eg on an external USB drive that isn't plugged in).

  • Sanyo phones: Read "Sent" messages as well received messages when reading SMS. Add auto-detection for newer Sanyo phones (SCP-3100, SCP-6600, and MM-7500) and Bell SCP-8100.

  • Bug fix: Timezone issues with Samsung A930/A950 calendar events.

  • Sanyo SCP-6600 (Katana): Reading the phonebook now supported.

  • Bug fix: bad BREW file date crashes BitPim.

  • New feature: Added Splash Screen Time duration to the Config Dialog.

  • New feature: Calendar Import Preset.

Changes in 0.9.08

  • Added Sanyo MM-5600 support.

  • Show libusb device Product ID and Vendor ID in the Comm Port Settings dialog.

  • Handled media unicode file names for the LG-VX8300/VX8500.

  • Clarified phonebook writing error message.

  • Fixed deleting nonexisting media files bug (LG-VX8100).

  • Fixed iCal import DTEND property.

  • Fixed support for adding 3g2 video files.

  • Added the Replace All and Merge options to the Contacts Import dialog.

  • Support for Telus SPH-A840, phonebook and calendar only, added.

  • Sanyo SPH-6600 (Katana): Phonebook and wallpaper/ringtone writing not supported. Camera images read with wallpaper.

  • Added file infor support for WMA file type.

  • For LG VX phones: ignore invalid calendar events read from phones.

  • Added the capability to export BitPim calendar data to iCalendar format.

  • Improved display of non-recurrent calendar events that span more than 1 day.

  • Added an option to reformat contact names during the contact import process.

  • Bug fix: BitPim crashed due to corrupted config file.

  • Bug fix: BitPim crashed due to corrupted Call History file.

  • Bug fix: Bad phone contact entry crashes BitPim.

  • For Sprint Samsung phones, include location in event name.

  • New feature: display calendar events inside a Tool Tip window.

  • New feature: copy/paste of SMS text to the clipboard.

  • Bug workaround: Unicode characters crash CSV contact export.

Changes in 0.9.07

  • Fixed phonebook and filesystem splitter display.

  • On Windows, sync the current help topic with the TOC.

  • Sanyo phones: Improve setting of alarms for calendar

  • Renamed menu item AutoSync to Auto Calendar Import, and moved it to under Import menu item.

  • Fixed adding media files decode exceptions.

  • Added support for the LG VX8500 phone. See the Help for more details.

  • Increased A930 max ringtone size to 290K.

  • Capability to read ringtone files for the LG VX8500.

  • Added MS Windows Media Player Play List (wpl) files import.

  • Fixed Shift+Add feature for Linux.

Changes in 0.9.06

  • Fix crash on reading SMS messages from Sanyo phones

  • Added Import Calendar Wizard feature.

  • Handled local filesystem file names.

  • Added unicode support to the Samsung A930/A950.

  • Fixed calendar support for the LG VX8300.

  • Fixed various Help screen shots.

Changes in 0.9.05

  • Raise bitpim phonebook group limit from 10 to 30 on LG-VX5200/8100/9800.

  • Fixed Set Phone wizard for Linux plaform.

  • Fixed auto-detection to include libusb ports for Linux.

  • Fixed bug: BitPim does not always terminate on Linux.

  • Fixed bug: get calendar data raised exception.

  • Add support for calendar on LG-VX8300 (Verizon).

  • Fixed vCard Photo field import problem.

  • Added support for Samsung SCH-A930 phone.

Changes in 0.9.04

  • Add support for LG-VX8300 (Verizon). Calendar not supported. Phonebook ringer and wallpaper assignment not supported.

  • Fixed bug: Calendar read raised exception.

  • Fixed bug: LG VX7000 media read raised exception.

  • Yet another attempt to fix LG VX6000/6100 auto-detection.

  • Added a work-around that allows storing ringtones on miniSD cards for the VX9800 (V2+), which was inadvertently left out from release 0.9.03.

Changes in 0.9.03

  • Added Call History and SMS support to the A950.

  • Fix bug:Exception in wallpaper pane when it contains unrecognised image formats.

  • Fixed SMS feature for V3c(m) phones.

  • Fixed backup dir bug.

  • Added Calendar Read Merge feature.

  • Fixed bug: phonebook preview with bad image.

  • Fixed bug: BitPim crashes when VX9800 fails to read media files.

  • Improved phone detection scheme for VX6100.

  • Linux ISO 8559-1 encoding is now found

  • Added a work-around that allows storing ringtones on miniSD cards for the VX8100 and VX9800.

Changes in 0.9.02

  • NOTE: If you run this version going back to an earlier version will cause all the wallpaper/ringers in BitPim to disappear.

  • Fixed media view toolbar bitmap problem.

  • Fixed status bar redraw problem.

  • Fixed bug: calendar entry dialog color coded fields not working properly.

  • Added auto-detect current phone model first.

  • Added Sanyo MM-7500 support. Wallpaper/ringer writing are currently disabled. Playlist and call history support are not yet available.

  • Added phone detection status indicator.

Changes in 0.9.01

  • NOTE: If you run this version going back to an earlier version will cause all the wallpaper/ringers in BitPim to disappear.

  • Fixed A950 Phonebook reading problem.

  • Added phone detection for the Motorola E815.

  • Increased the size of the phonebook from 500 to 1000 entries for the V3c and E815.

  • Fixed V170(m) SMS reading problem.

  • Fixed Data Recording playback bug.

  • Fixed Linux Unicode alias error for the Motorola phones.

  • Added support for Sanyo SCP-3100 (Sprint). See the SCP-3100 model notes for driver information.

  • Added A950 Phonebook write.

  • Added iCalendar import feature.

  • Added Google Calendar import feature.

  • Fixed bug: cannot shutdown PC while BitPim is in the System Tray.

  • Fixed bug: undocking laptop crashes BitPim.

  • Fixed bug: run minimized does not go to System Tray.

  • Added color coded program status.

  • New GUI layout for media, separate nodes for all origins.

  • Added summary screen to show size and quantity of media.

  • Add right-click menus to media-related items in tree view.

  • Add feature to move media from one origin to another (right-click file to move).

  • Add support for media files of the same name in different origins.

  • Add ability to add media to all origins, note: some origins are read only so updates in BitPim will not appear in the phone, check phone help.

  • Add feature to export media files (right-click in tree view) to zip file and filesystem.

  • Add list view for media panel.

  • Fixed incorrect wallpaper sizes on LG-VX8100.

  • Fixed bug in preview window for wallpaper editor which cause it to be cropped in some cases.

  • Add support for preserving media file timestamps (not implemented on all phones).

  • Internal storage of media moved to database, media files now stored in origin directories.

  • Added patch to prevent 0 size ringers when getting ringers from phones which block reading (e.g. 8100) when the ringers were previously uploaded using bitpim.

  • Fixed auto-detection for phones that have 2 comm ports.

Changes in 0.9.00

  • Fixed BREW file timestamp issue.

  • Fix bug writing the phonebook to the LG-VX9800.

  • Got around V3cm reading ringtones issue.

  • Fixed A950 reading non-existing index file issue.

  • Organized-by-size GUI update.

Changes in 0.8.14

  • Allow access to 'My Sounds' on LG-VX5200.

  • Added suport for the SCH-A950 phone. See the Help section for more details.

  • Added phone detection for Motorola V3c/V3cm phones. Support for V3c/V3cm is indentical to the V710/V710m phones.

Changes in 0.8.13

  • Fixed bug saving wallpaper and ringtones in rightclick menu.

  • Fixed bug requiring restart after phone model change.

  • LG-PM325 Add write support for phonebook, calendar, wallpaper and ringtones.

  • Add support for iso-8859-1 characters on, LG-VX4400, LG-LX5450, Toshiba VM4050, LG-PM225, LG-PM325. This will allow phonebooks with names with accented characters and other non-ascii characters supported by the phone to work.

  • Added support for the Motorola V710 phone. Supported features include phonebook, calendar, ringtones, wallpapers, and SMS. See the Help section for more details.

  • Added support to the Motorola V710m, which is the V710+OBEX.

  • Add support for LG-LX5550 (Alltel).

  • Add support for LG8100 (Telus Mobility).

  • Sprint Samsung phones Increase limit on ringers to 250K.

Changes in 0.8.12

  • Fixed Task Bar Icon discrepancies.

  • Improved Data Recording playback.

  • Fixed bugs introduced with new GUI, phone reboot, standby, todolist send/get, call history stats, drag and drop.

  • Add support for iso-8859-1 characters on, LG-VX5200, LG-VX6100, LG-VX7000, LX-VX8100, LG-VX9800. This will allow phonebooks with names with accented characters and other non-ascii characters supported by the phone to work.

  • Added System-Tray-On-Closed feature.

  • LG VI125: Add readonly phonebook support for this Sprint phone.

Changes in 0.8.11

  • Fixed bugs with new GUI, getting call history, phonebook column picker and outlook import filter.

  • Fixed exception when outlook is not installed for Windows.

  • Fixed exception when trying to access blocked files.

  • LG VX7000: Cope gracefully when updating ringtones and the index says a file exists that doesn't actually exist.

  • Add support for LG6190 (Bell Mobility).

  • Fix bug writing phonebook on LG-PM225.

  • Added Data Recording feature.

Changes in 0.8.10

  • New look and feel for BitPim main screen

  • Fixed bug in 0.8.09 that caused exception in media conversion

Changes in 0.8.09

  • Samsung A620/A740/A840: Add capability to upload wallpaper to phone. Fix writing of calendar alarm times. (Rounds down to 0, 10, 30, or 60 minutes).

  • Add read support for LG-PM325 phonebook, calendar, wallpaper ringtones, call history and SMS.

  • Added new toolbar to main window.

  • Added Call History export to CSV format.

  • Add phonebook read/write support for LG VI-5225 (STI-Mobile).

  • Import Outlook Contacts:Added contact category priority filter.

  • Add support for LG6200 (Bell Mobility).

  • Added Phone Setting Wizard feature.

  • Windows libusb is no longer looked for on Windows. (To use libusb on Windows, you had to have a device driver first. And if you had a device driver, you'd have no need for libusb.)

  • Mac The native Mac online help system is used for BitPim help. (Note: if the help viewer is slow or has other issues then that is a known issue and nothing to do with BitPim)

  • Mac The top pane of the comm port selection dialog would startup zero sized so you wouldn't know it is there. Now forced to be shown.

Changes in 0.8.08

  • Add support for Samsung VI660 (SPH-A660).

  • Fixed the issue of BitPim not being aware of passing midnight.

  • Added color coded labels to editable fields.

  • Add support for LG C2000 (Cingular).

  • Added phone detection at BitPim startup.

  • Added Call History historical data viewing capability.

  • Allow Media filenames to contain hyphen, underscore and brackets on LG-VX8100/9800

  • Add support for LG-PM225 (Sprint).

  • Samsung A740/A840: On writing phonebook to phone, use default ringer and wallpaper. (Instead of Boardwalk and "People 20").

  • Added SMS historical data viewing capability.

Changes in 0.8.07

  • Added phonebook read support for the Samsung SPH-N400.

  • Add support for Sanyo RL-4930.

  • Add support for Samsung SPH-A840.

  • Fixed bug importing repeating all-day events from Outlook

  • There is now a help page for when CRC errors are detected

  • Added Playlist Management feature.

  • Added Playlist support to the LG-VX9800.

  • Added a work-around for not being able to read ringtone files from the LG-VX8100(V6/7).

Changes in 0.8.06

  • Added a feature that allows Window users to minimize BitPim into the System Tray (Task Bar Icon). Users can enable/disable this option from the Settings dialog.

  • Samsung Sprint Phones: Fixed group assignments for phonebook writes.

  • Added support for the Toshiba VM4050 phonebook writing and fixed bug in phonebook read, added VM4050 to help screens

  • Fixed bug that hid autosync feature added in previous version

  • Added support for LG-VX6100 Memo (notepad) read/write

  • Fixed Help display bug on Mac & Linux.

  • Added the Preset Duration parameter to the Calendar Import Filter Dialog.

  • Added the feature that allows the Calendar Import Filter Dialog to remember its previous settings.

  • Added the capablity to set Category, Ringtone, or Wallpaper to multiple contacts. Please see the Howtos section of the Help file for more details.

Changes in 0.8.05

  • Fixed bug that prevented writing wallpaper and ringtones to the LG VX5200

  • Displayed expanded view of the SMS tree upon initialization.

  • Improved Phone Contact Editor part 2.

  • Added support for the Toshiba VM4050 (phonebook reading and auto detect only)

  • Add 'AutoSync' feature to automate synchronizing PC calendar with phone

  • Fixed LG-VX3200 phonebook read/write exception.

  • Added Import Outlook Notes feature.

  • Samsung A620/A740: Can now write ringtones to phone. Calendar fixes.

  • Fixed LG-VX8100/9800 phonebook speed dial bug.

  • Added Import Outlook Tasks feature.

  • Fixed Outlook Calendar all-day events spreading to the next day.

  • Add support for Sanyo VI-2300.

  • Sanyo Phones: Add reading of sms and todo.

  • Fixed bug that prevented writing memos to the LG VX5200

  • Added support for multiple data directories feature. Please see the Howtos section for more details.

Changes in 0.8.04

  • Added a feature to the Phone Contact Editor that allows users to navigate to the next/previous contact item.

  • For calendar events, combined the description and location with the format 'description[location]'.

  • LG VX8100/VX9800:

    • Added a feature to to get/send My Sounds media files.

    • Preserved previous ringtone and image IDs.

  • Fixed failed-to-write-contact-entry exception.

  • Fixed failed-to-read-media-file exception.

  • In the Today tab, fixed the order of the SMS and Call History items.

  • Sprint Samsung Phones: Fixed calendar writing.

  • Sanyo Phones: Fix phonebook writing that was broken in 8.03. Avoid exceptions when writing media to phone. (Occured with MM-8300).

  • Fix problem with pager and none numbers causing exceptions on LG VX5200, LG VX8100 and a few other LG phones.

Changes in 0.8.03

  • Added full support for the LG LX5450 (Alltel).

  • Fixed SMS Deletion exception.

  • Added SMS Export to CSV and mbox formats.

  • Update filesystem tab with new look and feel. Supports drag and drop for copying files into the phone's file system.

  • Sanyo phones: Added reading of call history.

  • Sanyo picture phones: On reading camera pics, rename duplicate filenames. This prevents smaller "saved to phone" pictures from clobbering the original "in camera" pictures.

  • LG VX8100/VX-9800: Added the capability to retrieve video files. These files can also be played by an appropriate software player (if installed).

  • Fixed apparent program frozen issue.

  • Fixed Filesystem Backup exception.

Changes in 0.8.02

  • Sanyo MM-7400 Add calendar write support.

  • Sanyo MM-8300 Handle clear of unused events properly when writing the calendar.

  • Fixed problem with writing wallpapers and ringtones to the LG-VX9800.

  • Fixed problem with parsing SMS outbox messages from the LG-VX9800.

  • Added every-nth-month capability to the Calendar feature.

  • Fixed exception generated when a calendar event with a long description is read.

  • Allowed the LG-VX8100 to access wallpapers and ringtones files stored on the miniSD card, similar to the LG-VX9800.

  • Add support for Samsung SPH-A740 (Sprint). Read/write of phonebook and calendar, and reading of wallpaper/camera and ringtones supported.

Changes in 0.8.01

  • Fixed LG-VX7000 Call History feature.

  • Added full support to the LG-VX9800.

  • Added Calendar, Call History, Memo, and SMS support to the LG-VX3200.

  • Add calendar write support for MM-8300

  • Improved phonebook writing feature of the LG-G4015.

Changes in 0.8.00

  • Fixed LG VX8100 wallpaper size.

  • Added phone detection for unknown CDMA phones.

  • Added full support for the LG VX5200.

  • Improved UNICODE support

  • Added full support for the LG VX4500.

  • Added support for the Sanyo MM-8300

  • Fixed Calendar tab background redraw problem.

  • Fixed Phone File System Dir Listing problem.

  • Samsung SPH-A620 Wallpaper readout now includes pictures in wallet and downloaded images/screensavers

  • Preserved "_HELP_NAVTREE_ID" in Help htd files.

  • Fixed LG VX8100 PhoneBook support to allow 'W' character (Wait) in dialstrings.

  • Added LG G4015 phone support.

  • Accommodated .ics file extension for vCalendar Import.

  • Added Calendar and Memo support to the LG VX8000 phone.

Changes in 0.7.37

  • Fixed and improved 'bad cache dir' problem.

  • Turned on protocol log during auto-detection process.

  • Adapted several Palm's vCard extensions.

  • Added phonebook read/write support for the SPH-N200.

  • Added full support for the LG VX-6000.

  • Added phone file system emulation for development.

  • Provided a temporary fix for LG VX8100 BREW file system listing.

Changes in 0.7.36

  • In the SMS tab, display the messages in the order of received date/time.

  • Added Calendar support to LG-VX4400.

  • Added a warning message dialog if a ringtone being added is too big.

  • Added a dialog to display Outlook Calendar Items that failed to import.

  • Added the capability to retrieve Voice Memo data from the LG VX-4650.

  • Completed all Help files.

Changes in 0.7.35

  • Fixed bug that caused the horizontal scrolled-bar of the phonebook tab to disappear after turning on & off the preview panel.

  • Fixed a bug that caused old monthly event data to generate exceptions.

  • Added the Today tab.

  • Added Volume Adjustment feature to mp3 media conversion.

  • Added a file caching capability when reading BREW EFS files from the phone. This feature avoids reading unchanged media files repetitively from phone.

  • For SMS messages, added field 'Read' and 'Delivery Confirmation'.

  • For Calendar Events, added field 'Vibrate'.

  • For CAll History, added field 'Duration'.

  • Added support to LG-VX8100 phones: phonebook, calendar, wallpapers, ringtones, text memo, call history, phone info, and auto-detection.

  • Added support to LG-VX4650 phones: phonebook, calendar, wallpapers, ringtones, text memo, call history, and auto-detection.

Changes in 0.7.34

  • Sanyo MM-7400 Increase wallpaper upload size to 176x220.

  • Fixed shift+Add wallpaper feature.

  • Improved Hex Editor.

  • Fixed media name change notification to Phonebook contacts and Calendar events. When users rename wallpapers or ringtones, the changes will be propagated to all Phonebook contacts and Calendar events, which may require (re)syncing data between BitPim and the phones.

  • Added TimeZone capability to vCalendar Import.

  • Added "nth *day (ie 1st Monday) of every month" repeat feature to Calendar Events. Also extended this feature to other Calendar Import/Export capabilities.

  • Added BCI file support (work-around) to wallpaper tab. Waiting for a wxPython fix to fully integrate BCI with wxPython & BitPim.

  • Fixed Samsung SCH-A650/A670 SMS parsing error.

  • Fixed Samsung SCH-A650/A670 Contacts Names Unicode error.

  • Fixed Contacts & Calendar print problems.

  • Fixed exception caused by righ-click in the File System View window.

  • Fixed bug 878876: Toggle Phonebook Preview pane.

  • Added the capability for users to view historical phonebook data.

Changes in 0.7.33

  • Added a feature that would allow BitPim to download (and upload) wallpapers and ringtones which file names may be illegal on the host system.

  • Added numerical input fields for Clip Start, Clip End, and QCP Clip Volume to the Ringtone Conversion Dialog.

  • Added sound/size optimization for QCP conversion to the Ringtone Conversion Dialog.

  • Fixed a bug which raised an exception when trying to print out Calendar Events that have '&'s in its summaries/descriptions.

  • Made some improvements to the HexViewer feature.

  • Fixed a resizing bug in the Contacts Import Dialog.

  • Updated several bits of help including a section on the LG VX8000. You can now get Mac Prolific PL2303 drivers from the Prolific website. Thanks to David Hechtman for the information.

  • LG VX-3200 Some support added for this phone. Make sure you read the help notes first. This functionality was contributed by Bruce Schurmann.

Changes in 0.7.32

  • Added a simple List View and Monthly View calendar events print capability.

  • For any phone that can be auto-detected, users now can assign an owner's name to it.

  • In Windows, added the capability to drag-and-drop wallpaper and ringtone files from BitPim to other Windows applications.

  • For the Wallpaper and Ringer tabs, added the 'copy', 'paste', and 'rename' menu items (and capability) to the context menu (right click) and the main menu.

  • Added 'Expand All' and 'Collapse All' context menu items to the SMS tab.

  • Added 'Organize Items by', 'Expand All', and 'Collapse All' to the Call History tab. The Call History items can now be organized by type, by date, or by number/contact.

  • Add auto-detection Sanyo phones and Samsung SPH-A460 and SPH-A620.

  • Add reading and write todos (task list) for SPH-A460 and A620. Reorganized some A460 and A620 code to make supporting other Samsung phones easier

  • Sanyo MM-7400 Should now read all media from the phone.

  • Added CSV Calendar Import/Export feature.

  • Updated versions of various components used by BitPim

Changes in 0.7.31

  • Added the Call History tab to the main BitPim display.

  • Added an initial implementation of the Phone Auto-Detect feature. Currently, the only phones that support this feature are the Samsung SCH-A310/A650/A670.

  • Minor display improvement to ther SMS Tab display.

  • Samsung SCH-A670 Some bug fixes:

    • Better transition from mode Modem to Brew and back.

    • Eliminated the "Cannot seek large file" error message. To avoid this error message, users would need to re-download camera images from the phone (Get Data -> Wallpapers)

    • Fixed bug with adding jpeg and GIF wallpaper images.

Changes in 0.7.30

  • Added speed dial, wallpaper, and ringtone info to vCard Import/Export.

  • Added Contacts CSV Export.

  • Added Phone Info Dialog feature. Supported phones include the Samsung SCh-A310/SCH-A650/A670.

  • Added a feature that allows users to add raw/unprocessed image files. This feature is invoked by pressing a shift key while clicking on the 'Add' button. On the Samsung SCH-A670, this feature can be used to add GIF or animated GIF files, which are not directly supported by BitPim.

  • LG Phones When corrupt data is detected on the phone you will be given a detailed help page about it rather than just an exception.

  • Samsung SPH-A460 Can read/write phonebook and calendar. See the Samsung model notes for information about oddities when writing the phonebook to the phone.

  • Samsung SPH-A460 Read todolist from phone

  • LG VX6100 Set maximum filename length for ringers and wallpaper to 20 characters. (John O'Shaughnessy)

  • LG VX6100 Increased wallpaper size from 128x148 to 132x148 (and 132x160 for fullscreen) (John O'Shaughnessy)

  • LG TM520/VX10 Support for these phones will be removed in 0.7.31 unless someone steps forward to maintain them.

Changes in 0.7.29

  • BitFling now works with SPH-A620 and probably other Samsung phones.

  • Added the Task Todo tab to the main BitPim display.

  • Added the SMS tab to the main BitPim display.

  • Cosmetic and usability tweaks from Adit Panchal

  • There is now a table in the online help that lists which BitPim features are supported by which phones. The page also points to what features will be supported and when.

  • LG VX8000 Initial support for this phone added

  • Samsung SCH-A650/A670Added Task Todo and SMS support.

  • Samsung SPH-A620/VGA1000 Camera picture filenames now use caption name instead of timestamp based filename.

Changes in 0.7.28

  • Many cosmetic and usability tweaks from Adit Panchal

  • BitFling has been fixed.

  • When adding images you can tell BitPim what you intend to use the image for (eg fullscreen startup image or outside LCD callerid). This is all part of a display that lets you select exactly what part of the image you want imported. Note that we don't have all the sizes for phone models. If you have details on specific image sizes for various uses for phone models, then read this set of messages and then post to tbe bitpim-user mailing list.

  • Sanyo MM-7400 Disabled calendar writing.

  • Added 2 more filtering parameters to Calendar Import function.

  • Added phone textual memo/note feature.

  • Added a feature that allows users to check for any BitPim program updates.

Changes in 0.7.27

  • Added the capability to import data from vCalendar data files.

  • Mac Now have the Metal appearance. Will not be getting an 'i' prefix. Download is reduced in size by a third.

  • Sanyo SCP-7300 Increased wallpaper size from 132x144 to 132x176.

  • Sanyo MM-7400 Reading and writing of calendar should work

  • Samsung SPH-A620/VGA1000Work around buggy phone software that caused the apparent number of numbers in phone to increase with repeated writes of phonebook. Preserve birthdays, where possible, when writting phonebook.

  • LG Phones The length of memos has been increased to what each phone model supports (64 chars on VX4500 and VX6100, 48 on VX4600, 32 on all other models.)

  • SK6100/SK Music Slider (Pelephone, Israel) Added basic read-only access to the phonebook.

  • Samsung SCH-A670 Some fixes and enhancements:

    • Create media directories if they do not exist.

    • For contact names, if Full name is not specified, will use "First Middle Last" combination.

    • jpeg is now the default wallpaper format, which will allow these images to be reliably used as contact pix id.

    • Video clips can now be downloaded with other wallpaper images.

Changes in 0.7.26

  • There is now a read-only mode, set in the preferences. If you turn read-only on then BitPim won't do anything that does modifications to your phone. If you turn read-only off, then you have to restart BitPim for it to take effect.

  • Mac Many changes:

    • Fixed various issues so that the ringer format conversion (except PureVoice/QCP) can happen.

    • Wallpaper and ringtone pane background forced to white

    • Items in the wallpaper and ringtone panes can be double clicked on (or right click menu - Open) and they will be launched in the appropriate program.

  • Samsung SCH-A670 Fixed ringtone format conversion process.

  • Samsung SPH-A620/VGA1000 Can now write the phonebook to the phone. Ringtone and wallpaper assignments are not preserved.

  • Sanyo Phones Calendar code has been updated to newer BitPim internal calendar format. Please note any problems.

Changes in 0.7.25

  • The ringers tab now identifies audio file types

  • You can double click on items in the wallpaper and ringer tabs to launch the default program associated with that file type.

  • BitPim can now convert non-midi audio files into something your phone will support such as MP3 or Qualcomm PureVoice. Make sure you read and understand the documentation which is also available by pressing help in the dialog box. You can easily make your phone not work any more.

    MP3 ringtones are used for LG phones. PureVoice/QCP ringtones are used for Samsung SCH A650/A670.

  • Import of Outlook Calendar data is now supported.

  • Calendar bugs fixed:

    • Calendar GUI now displays on Mac

    • Sending repeat calendar events to the phone

  • Samsung SPH-A620/VGA1000 Phonebook reads fixed to work with phones with old firmware. Reading of camera pictures fixed. Ringtones can now be read from phone.

  • LG VX6100 Underscore character "_" now supported in ringer and wallpaper file names. Number of ringers allowed increased from 30 to 60. Number of wallpaper allowed increased from 30 to 60. Number of camera images allowed increased from 20 to 60.

Changes in 0.7.24

  • Bitmap (BMP) images with less than 236 colours are saved in the smaller 8 bit format (ie using a palette).

  • The wallpaper and ringtone displays have been replaced with an improved user interface in both functionality and appearance. The wallpaper display now works out image information directly from the file (eg you could rename a jpeg to .png and it will see work out that it is jpeg). You can also organize in various ways (try the right click menu). The ringtone display also uses the new interface but doesn't have the file type recognition or organizing implemented yet.

  • The matching of imported/incoming phonebook entries against what you already have has been sped up. (A C implementation of the Jaro Winkler algorithm is used.) There is also a progress dialog with estimated remaining time displayed if there is a lot of matching to do (multiply the number of incoming items with the number of existing items to get an idea of how much work is done).

  • The phonebook and calendar data is now stored in a transactional database (we use SQLite behind the scenes) which allows for implementing undo, archiving of old entries, concurrent instances of BitPim, storing old data so we can calculate changes for doing syncing and various other goodness. The other types of data (eg wallpaper and ringtones) will also be changing to use this database.

  • There is now an improved user interface for adding and editing calendar events. Most of the phone modules do not (yet) support the extra fields available, but will do so over the next few releases.

  • SCH-A670 Phonebook contacts now fully support wallpaper and ringtone assignments. Uploaded wallpapers are automatically converted to 128x96 24-bit BMP format and can be used for phonebook wallpaper assignments. Better transition in and out of File System mode. Calendar repeat events are now supported.

  • SCH-A650 Wallpaper images with 256 colors or fewer are converted to 8-bit PNG format. Others are converted to 24-bit PNG format. Better transition in and out of File System mode. Calendar repeat events are now supported.

  • Sanyo MM-7400 Disable reading of ringer/wallpaper assignments (which are really not handled properly for Sanyo phones anyway) so that phonebook read will work. Disabled calendar options as they seem not to work.

Changes in 0.7.23

  • Added option to filesystem browser (Brew mode) to return phone to modem mode (AT commands). Known to work for some Samsung and Sanyo models. Use with caution on other phones.

  • Outlook When importing contacts, only email addresses with a a type of SMTP are imported. Other ones, such as those used for X.400 email, are ignored.

  • SCH-A650 Correctly retrieve and save ringtone assignments in phonebook entries.

  • Sanyo MM-7400 Please do not use 0.7.23 for this phone, use 0.7.24 or a later version. [Added option for this phone. Assumes that this phone is similar to the PM-8200. If you find bugs, or experience timouts and are willing to help debug the driver for this phone, please post on one of the mailing lists.]

  • LG VX6100 Support for this phone has now been added courtesy of John O'Shaughnessy.
    • Wallpaper reading (including camera images) and writing works.

    • Ringtone reading and writing works.

    • Phonebook reading and writing works with the exception that wallpapers set in BitPim are ignored when sent to the phone.

    • Calendar reading works. Calendar writing does not.

Changes in 0.7.22

  • Fix a bug in the import process when two imported entries matched the same existing entry. Now the best import entry is always chosen, and the underlying data consistency is maintained.

  • Fixed SF bug #1062904: users cannot close calendar editor dialog.

  • SCH-A650 Fixed bugs in reading and writing phonebook, calendar, wallpapers, and ringtones.

  • SCH-A670 Added support for download of camera pictures as part of wallpaper gets. Partial support for caller-id assignments in phonebook: assignments of ringers and gallery photos (not other wallpapers) made on phone are preserved in BitPim.

  • eGroupware Workarounds for various bugs in eGroupware. Note that eGroupware has an issue with categories, and you may experience issues when editing in both BitPim and the eGroupware web interface.

  • There are some visual glitches in the phonebook import dialog. Resize the window and they will go away. (Long story).

Changes in 0.7.21

  • You can now export to eGroupware

  • Windows 95/98/Me The Microsoft Layer For Unicode is now installed with BitPim so you won't get random crashes in MSVCRT.DLL

  • Samsung Phones Preliminary support for various features has added for the following phones. Various features may be incomplete or buggy.

    • SCH-A310 Reading and writing of the calendar and phonebook

    • SPH-A620 Reading of the phonebook. Reading and writing of the calendar. Reading of photos from the phone's camera.

    • SCH-A650 Reading and writing of the phonebook, calendar, ringtones and wallpaper.

    • SCH-A670 Reading and writing of the phonebook, calendar, ringtones and wallpaper.

Changes in 0.7.20

  • You can now import phonebook contact information from eGroupware

  • Windows The Microsoft CHM (Compressed HTML) format help file is now used from within BitPim, and so you will get the standard Microsoft Help viewer instead of the wxWidgets one. As a bonus the Microsoft Viewer understands stylesheets so you will see the help text in all its green glory!

  • Mac py2app is now used for packaging BitPim up. Let us know if you see any issues.

  • Sanyo Phones Wallpaper written to Sanyo phones is now more likely to be accepted by the phone. The PNG files are converted to 8 bit colour and the size of the colour map is reduced to make the file size less than 16K.

Changes in 0.7.19

  • Various minor tweaks and cleanups.

  • Sometimes Outlook comma separates the Categories field instead of semi-colon like normal. BitPim now deals with this in the import.

  • Fixed omitted field that was caused by importing vcards with a "uid" field.

  • LG VX7000 Support for this phone has now been added thanks to a phone loan by RPI Wireless. LG took the opportunity to make the firmware functionality and quality worse than their previous phones. There may still be some problems where the code assumes the phone won't be as stupid as it actually is.

    • The phonebook reading and writing works, although there may be some minor issues with the writing due to the new restricted fields available. It also looks like the speed dials might not be written exactly right due to the phone re-arranging some phone numbers some of the time.

    • LG halved the number of phone number types available. Phone number types that the phone doesn't have (eg Pager) are ignored.

    • The phone is very reluctant to reveal how many phonebook entries are present. BitPim works around this, but the workaround will fail if you have no entries at all. Consequently do not ask BitPim to read the phonebook if it is empty.

    • Calendar reading/writing doesn't work. (They tweaked some of the fields since prior phone models).

    • Wallpaper and ringtone reading and writing work. The BitPim code currently limits you to 50 of each. If anyone knows what the real limit is, or why the phone goes to the trouble of storing the total amount of space used by the ringtones and wallpapers then please post on bitpim-devel.

  • Sanyo Phones Allow entries with no name.

  • Linux BitPim is now packaged using cx-Freeze 3.0

Changes in 0.7.18

  • You can now filter by categories in the import dialogs.

  • Your previous settings for the filters (eg requiring a name, number, email address etc) as well as the categories are remembered.

  • vCard import now understands charsets instead of always using ISO 8859-1. It also correctly deals with vCards already in a Unicode file as Apple Addressbook likes to do.

  • All the standard character set converters are now included with the binary distribution of BitPim instead of just two or three. This allows almost any charset to be used in vcards.

  • An issue with transparency and black backgrounds on 16 bit colour displays on Windows was fixed (thanks to Kevin Swan for providing the test files and screenshots).

  • We decided to stay with wxPython 2.5. Currently the Mac version is not Unicode, but the other platforms are. That will be addressed in the future.

  • Many minor tweaks and fixes for GUI issues reported on the mailing lists. Thanks to all those who took the time to give accurate reproducible reports.

  • Fixed a filesystem protocol issue where the LG VX7000 was behaving differently than all the other phones. This will fix some Motorola V710 issues as well.

  • Sanyo Phones

    • For some Sanyo phones, the default (first) phone number for each name will be preserved for reads and writes.

    • Deleting call alarms read from phone won't cause exception. (Pre 0.7.18 calendar data must be overwritten by reading from phone.)

  • Samsung A620 Added support for downloading camera pictures. No support yet for phonebook, calendar, wallpapers etc.

Changes in 0.7.17

  • The only change in this version is that BitPim now uses wxPython 2.5. wxPython is the library BitPim uses for the user interface (GUI). This is a significant stability and compatibility upgrade against the previous version of wxPython. Mac users in particular should notice a big difference. For Linux users, the underlying library is changed from GTK1 to GTK2 which is nicer as well. Note We have not made any bug fixes or any other behavioral changes. This is so that we can distinguish issues being with the upgrade to wxPython 2.5 vs generic in BitPim.

  • With the upgrade to wxPython 2.5, BitPim now also uses unicode for the user interface. We have not yet tested how the phones will deal with this. They likely won't like it. We will be fixing this is future BitPim releases. You are advised not to try non-ascii characters until we fixed the various phone modules to cope with it correctly.

Changes in 0.7.16

  • The correct entries are used when you use "selected entries" for phonebook printing or vCard export.

  • You can now select all with Ctrl-A, delete with the Del key and add new with Ctrl-N in most panes.

  • Speed dials are now shown in [square brackets] in the various phonebook views.

  • The dialog that helps show how newly read phonebook data is merged with existing data is back with completely new user interface. Please click the Help button to understand what it is showing and how to change things.

  • US phonenumbers are now normalised and formatted in a standard way. Other phone numbers are left alone.

  • Improved vcard output. Unfortunately several programs refuse to import them despite following the standard to the letter. Any assistance in figuring out how the other programs are broken would be appreciated.

  • Some changes to the underlying code for escaping and unescaping characters in the protocols. This was needed because the Samsung SCH-A650 was unnecessarily escaping data which the code didn't account for. Thanks to Stu Grossman for discovering this.

  • When you double click on a field in the phonebook, the editor starts up with focus on that field.

  • More columns are available in the phonebook view. They are of interest if you have entries with lots of data (eg more than 5 phone numbers). Note that BitPim has always stored all data, it just didn't have columns pre-defined for all of it.

  • You must use a device driver instead of direct USB access to phones modem interfaces or USB to serial devices. Although the help makes this somewhat clear, many users try anyway. BitPim will now mark those interfaces as unavailable.

  • Windows Some of the packages BitPim uses started leaving off version numbers on their DLLs. This caused the installer to not replace the older files with the new ones. The installer has now been told to always replace files in the BitPim program files directory. That will ensure upgrades and downgrades always work as expected (as of 0.7.16 anyway). Thanks to Allen Day for finding the underlying cause.

  • Sanyo phones Fixed reading of calendar which was broken in 0.7.15.

  • Sanyo SCP-4920 Really actually fix the ordering of phone number types.

Changes in 0.7.15

  • You can now export the phonebook in vCard format. Note that this code is still a work in progress and is still being worked on. (The vCard standard is hairy and no other program implements vCards 100% to the letter, so the export code is trying to deal with that).

    Also note that there is a bug that means the wrong entries are output when you ask to export just the selected ones. This will be fixed in the next release. (The same bug affects printing and no one had spotted it!)

  • You can now import Evolution contacts that are not stored in db files. BitPim runs evolution-addressbook-exporter behind the scenes. Note that you must be running Evolution 1.4 for this to work. [Code from Peter Pletcher]

  • Sanyo phones Fixed crash on upload of some calendar entries. Events written to phone will show proper alarm interval on phone. Media write code will only try to write wallpaper and ringers that are not already on phone. Media code will not try to write camera pictures. BitPim will still often encounter errors from the phone (Usually "Sanyo Error code 109") because of Sanyo file size limitations. See the note on Sanyo Error Codes for more information.

  • Sanyo SCP-4920 Actually fix the ordering of phone number types so that they agree on the phone and in BitPim. (0.7.13 fix didn't work)

  • Sanyo SCP-8100 (Bell Mobility-Canada) Fixed reading and writing of the phonebook.

Changes in 0.7.14

  • There is no longer any console output on Linux or Mac, and there shouldn't be the I/O errors on Windows which were indirectly caused by console output issues when a console isn't present.

  • vCard reading sped up considerably

  • If the files supplied for CSV or vCard import are in Unicode (eg UTF 16) then they will be read correctly

  • You can now import contacts from Qtopia Desktop (eg as used with the Sharp Zaurus)

  • The dialog used to confirm a phonebook being read in/imported is now not shown. It was coming up blank for many Mac users and was somewhat user unfriendly anyway. Any UI designers out there want to help work on a replacement?

  • LG VX4500 Speed dials now read/written correctly

  • Sanyo Phones Reduce WALLPAPER_HEIGHT for several phones so that wallpaper uploads won't fail

  • Sanyo SCP-8100 (Bell Canada) Initial support for the Bell (Canada) version of the SCP-8100. The firmware in this phone is somewhat different from Sprint 8100. This release can read the phonebook, wallpaper and ringers from the phone. However, writing to the phonebook and reading/writing the calendar will crash BitPim.

Changes in 0.7.13

  • You can now import contacts from Outlook. The importing should work well.

  • You can import contacts from Evolution. You may experience some issues. Please include an exported vcard of any problem records if you make any bug reports. The Evolution importer uses the vCard importer behind the scenes so please read the notes below.

  • You can import contacts from vCards. You may experience some issues. Please include the vcard if you make any bug reports.

    Note The vCard import code is very slow and the vCard "standard" is a great big hairy mess that no program implements correctly. BitPim does its best (part of the reason the code is slow). There will be speed ups in future releases.
  • BitPim no longer makes any attempt to convert ringtones you add to be in a valid format. That functionality will be added in the next major release.

  • Considerably sped up the display of images in the right hand pane for wallpaper view

  • LG Phones If the phonebook has multiple entries with the same serial number (which is a serious problem) then BitPim detects this and raises an alert.

  • Sanyo Phones Added ability to write wallpaper and ringers for all Sanyo phones. See the Ringer/Wallpaper section of the Sanyo notes for further information.

  • Sanyo SCP-4920 Fixed ordering of phone number types so that they agree on the phone and in BitPim.

Changes in 0.7.12

  • Version number system is now sane. The development series is now 0.7.12.

  • Keystrokes work correctly again in the calendar

  • Some tweaks in the filesystem directory reading protocol as some phone models added a spurious extra byte (eg Kyocera KX414)

  • Sanyo phones qcp ringtones are now also transferred from the phone.

  • Sanyo SCP-4900 Preliminary support to transfer ringers and images to the phone. This may work for the SCP-5300 and SCP-7200 if you set the phone to the 4900 in BitPim.

  • Sanyo PM-8200 Can now write phonebook and calendar to the phone.

  • Sanyo RL-4920 Added support for this phone. Please provide feed back if there are problems.

Changes in 0.7 - test 11

  • Started code to import Outlook Contacts (disabled in this build)

  • Various minor tweaks and bug fixes for issues commonly occurring in the mailing lists

  • Tweaked where the settings that remembered window sizes and positions is stored to make the config file/registry a little cleaner. The first time you run this version it will use the default sizes/positions, and remember them from that point on.

  • Sanyo phones Transfer of ringtones from phone fixed. (For those phones that support media downloads, namely everything except 4900 and 5300.) Sanyo PM-8200 is still read-only.

Changes in 0.7 - test 10

  • The routines to switch into Brew mode and LG phonebook mode have been tweaked and should be more reliable.

  • Mac The preferences and About dialog are now in the normal place for Mac applications.

  • Audiovox CDM8900 This phone is no longer supported by BitPim. Do not use this phone with BitPim. Do not ask for support. The internal software in this phone is very fragile, and the phone can be rendered completely inoperable through trivial operations.

  • LG TM520/VX10 The code has been re-instated for this phone. The other LG items in this change log do not apply to this phone which uses different code.

  • LG VX4600 Reading/writing wallpapers and ringtones for this phone added. Status of phonebook and calendar is not known.

  • LG phones BitPim previously required that entries have at least one phone number to write them to the phone. This has now been relaxed to fit the phone's requirement that there is at least one phone number or at least one email address. (ie previously BitPim wouldn't write an entry with only an email address and no phone numbers. Now it will).

  • LG phones LG phones now use slightly different code for determining the number of phonebook entries. It now also works correctly with phones that can have more than 255 phonebook entries and you actually have more than that number of entries.

  • LG phones Speed dials are now read and written.

  • LG phones If the speed dials or group information change (ie different than what is already stored on the phone), then the phone has to be rebooted for the change to take effect. BitPim does this automatically.

  • LG phones You no longer get an exception if the description for a calendar entry is too long.

  • Sanyo phones Phonebook on phone no longer messed up if duplicate names are written to phone.

  • Sanyo SCP-5400 and SCP-7300 Broken in test9, now fixed.

  • Sanyo SCP-5400, SCP-5500, SCP-7300, SCP-8100 Improved media reading from these phones. Images and ringtones from the camera, Vision download, and cable upload areas can now be read from the phone. Filenames for camera images have "$camera_" prepended so they are not overwritten by wallpapers made from pictures. Mp4 videos on SCP-5500 won't crash BitPim.

  • Sanyo PM-8200 Untested, read-only support added. Reading of the phonebook will probably work. Reading the calendar, camera images, wallpaper and ringers may work.

Changes in 0.7 - test 9

  • You can now save the selected items from the wallpaper and ringtone views.

  • You can drag and drop items out of the wallpaper and ringtone views (drag out not supported on Linux)

  • BitFling is finally available

  • Started wallpaper download support for Sanyo SCP-8100 and SCP-5500. Only camera pictures on the phone will be downloaded. Wallpaper on the phone that was uploaded with Vision or by cable is not yet transferred. Videos (on the SCP-5500) will be transferred but will cause all sorts of exceptions/errors. The videos can be found in the BitPim files directory. Please do not report bugs yet. Use at your own risk.

Changes in 0.7 - test 8

  • Any combinations of carriage returns and newlines can be used to terminate the end of line for importing CSV files.

  • The ringers pane now uses the same layout and underlying code as the wallpaper pane. This makes it usable under Mac and Linux. Double clicking items has no effect any more though as that code is incomplete.

  • LG VX6000 BitPim converts images to BMP. It was converting them to JPG, but although the phone previews them correctly, it won't set them as wallpaper correct0ly.

  • Sanyo SCP-5400 Add support for reading and writing the phonebook and calendar.

Changes in 0.7 - test 7

  • Sanyo Phones Reboot phone after calendar writes. Reboot now doesn't cause device name to change.

  • Sanyo SCP-5500 Fix calendar writes. Phone put in offline mode before calendar writes.

  • Sanyo SCP-7200 Phone put in offline mode before calendar writes.

  • Sanyo SCP-7300 Add support for reading and writing the phonebook and calendar. Phone put in offline mode before calendar writes.

Changes in 0.7 - test 6

  • Added 'Other CDMA Phone' type that you can select if your phone uses the Brew filesystem protocol, but the other features are not supported in BitPim.

  • Started Audiovox CDM 8900 support

  • BitPim has changed to the GNU GPL license (details in the LICENSE file in the source code)

  • Characters special to HTML such as ampersand (&) no longer cause exceptions in the phonebook

  • Sanyo SCP-5300 Added builtin ringers list.

  • Sanyo SCP-5500 Fix write phonebook to phone failure. Add calendar support.

  • Sanyo SCP-7200 Reading and writing the phonebook is supported. Calendar is untested.

  • Windows BitPim will now work with ports numbered higher than com9.

  • Windows BitPim now finds the location of My Documents using the correct API call instead of looking in the registry (a bad way of doing it for various reasons).

Changes in 0.7 - test 5

  • Saving of position/size for the following windows:

    • Main Application

    • Config Dialog

    • Comm Browser Dialog

    • Print Preview Window

  • When saving to JPEG, the quality is set to 100 (ie almost lossless)

  • Sanyo Phones Added data integrity measures like used for Brew and LG phones.

  • Sanyo SCP-5500 Added initial support for this phone (aka VM4500.) Phonebook reading and writing work.

Changes in 0.7 - test 4

  • You can now print from the phonebook.

  • The wallpaper tab is now based on a new 'media' displayer which will also be used for ringtones, voice memos etc. This 3 pane layout lets you see thumbnails, and detailed information at the same time. There is also a preview area on the right where many actions will be available (eg format conversions, mass resizing). Please report any problems you see in the interface. The following are known to be incomplete:

    • Rename

    • Preview area

    • Double clicking/Open launching an external program

  • Wallpapers: The format to convert added images to, the maximum name length and filename characters (as well as case) now come from each phone's profile rather than being hardcoded to BMP, 19 characters and lower case alphanumerics. VX6000 users will now appreciate the default format for them being JPEG.

  • Windows Now using py2exe 0.5 and InnoSetup 4.1.5. The new LZMA (aka 7zip) compression in the latter results in a 700kb smaller setup file.

  • LG VX4500 This phone has been added but testing of writing the phonebook is not complete. Additionally some values may still be wrong for builtin wallpaper names, sizes and formats etc. If you have some developer ability (eg you can convert between decimal and hexadecimal) then please join bitpim-devel mailing list and help complete support for this phone.

  • Sanyo Phones Fix calendar saving which was broken in test 3.

Changes in 0.7 - test 3

  • If a read or write of a file in the filesystem takes more than 3 seconds, the log will now tell you how many bytes per second the transfer worked out at.

  • Several data integrity measures in the Brew protocol code. This includes throwing exceptions if file sizes don't match expectations, verifying protocol checksums, logging junk data in packets etc

  • You can now put phones into offline mode as well as reboot them. To do so, right click on a directory in the filesystem view and choose the relevant option. Offline mode may help overwriting some files. Note that once in offline mode your phone will not do any calls and will probably display a fairly scary message on the display. The only way to get out of offline mode is to reboot the phone, either through the menu or manually.

    It has also been my experience that the LG phones do not correctly setup their USB if you reboot them while attached to the computer. Unplugging the cable and putting it back in fixes that.

  • USB debugging (of libusb) has been turned off. It seemed to be causing some problems on Mac, and wasn't being particularly useful anyway.

  • LG VX4400/6000 Added data integrity measures to LG sync protocol (the code is very similar to the Brew protocol code and the measures are the same as described above).

  • LG VX4400/6000 Zero length calendar files are now dealt with correctly. This would typically happen if you had never used your calendar.

  • Sanyo Phones The Date/Time for calendar entries is now correct for all time zones, not just EST.

  • Sanyo Phones Now silently truncates long phone numbers instead of failing. Also get first phone number type when bitpim data not sorted.

Changes in 0.7 - test 2

  • You can now clear the contents of the log panes from the view menu

  • Fixed several nasty issues that would affect first time users with poor interaction between config dialogs, splash screens and the help tour appearing.

  • The get and send dialogs now adjust to what features are supported between BitPim and your phone. For example it won't allow you to select wallpapers on Sanyo phones since we don't have that code (yet).

  • Several updates to the CSV import, including implementing the "Private" and "Category" fields, adding a "Categories" field, adding a toggle so you can say whether the first row is headers or not (the DSV library guesses weren't too reliable), none of the filters are ticked by default.

  • You can now sort by any column in the phonebook

  • There are now first, middle and last name columns available in the phonebook

  • Implemented missing code that will derive a full name from its pieces (and vice versa). This is relevant where an entry was imported as pieces (f,m,l) but phones write out only a full name (or vice versa).

  • You can double click in the phonebook entry preview (on the right) to edit the entry.

  • When using libusb, we have a builtin database of vendor, product and interface information as well USB protocols. This is used to give more detail in the port browser.

  • Modems are now also listed along with serial ports (and workalikes) in the com port browser. This means that auto-detection of Sanyo phones should work.

  • Devices that are likely to be the selected phone are now marked with an asterisk in the com port browser

  • The com port browser and auto detect code are now passed the phone module and only pay attention to devices that are that phone (before they would notice any phone supported by BitPim)

  • Windows Generate a dotted quad style version id for bitpim.exe otherwise upgrades can leave old versions of the executable in place when upgrading.

  • LG VX4400 BitPim now works correctly if your phonebook is completely empty.

  • LG VX4400/VX6000 BitPim now copes if the calendar exceptions file is not present.

  • LG TM520/VX10 These phones are no longer being maintained and cannot be selected. If you would like to maintain them, please follow the instructions on the BitPim developer page.

Changes in 0.7 - test 1

  • You can save the contents of the com port browser as HTML so other people can see what you see.

  • Protocol descriptions are now used throughout making maintenance and coding a lot easier.

  • Exceptions have their details copied to the Log window

  • Exceptions now include local variables from the last 6 frames making it easier to diagnose what happened

  • If a protocol decoding exception occurs, then buffer details are dumped to the ordinary log

  • Introduced a 0.3 second delay after grabbing each file when making a backup. If this isn't done the phone eventually gets overwhelmed and returns truncated buffers amongst other things

  • Support for Sanyo 4900/8100 added

  • Support for LG VX6000 added. Thanks to URL(misc-rpiwireless.htm,www.rpiwireless.com) for the loan of a phone and cable.

  • There is incomplete support for the LG TM520 and VX10. Developers are welcome to contribute the remainder of the support.

  • Totally revamped phonebook pane

  • Phonebook entry editor that allows ordering and editing of all fields

  • Groups can be edited in the phonebook entry editor

  • Phonebook entries can be imported from CSV with predefined profiles for Palm Desktop, Mozilla and Outlook Express

  • Import dialog with intelligent matching against existing entries (in a similar manner to how you do reconciliation with banking programs).

  • The wallpaper view resizes all images when viewing (note the files on disk are not modified. This means that you will see complete camera images rather than just the top left corner.

  • BitPim can now access appropriate devices via direct USB even if a driver is not installed. This allows using straight USB cables on all platforms. Note however that the VX4400 has a timeout issue in its USB implementation that also affects direct USB access. The VX6000 and other phones do not have this problem.

  • Windows Fixed a bug in comscan that could result in not completely enumerating registry keys. This would result in some COM ports not being found that were perfectly valid.

  • Windows Updated to InnoSetup 4

  • LG VX4400/VX6000 When writing out wallpaper/ringtones, files to be written are only actually written if they are a different length than the one on the phone. This makes it considerably quicker to update wallpapers and ringtones.

  • LG VX4400/VX6000 The groups file on the phone is now updated based on the categories you use in your entries. Please see the phone specific notes in the online help for important information about this. Support requests where the notes have obviously not been read will be ignored.

  • LG VX4400/VX6000 The algorithm for ordering and values of the indices for wallpapers and ringtones was changed. If you read in everything, you can delete the index files from the filesystem view and write out your phonebook, calendar, wallpaper and ringtones. The new indices will start from zero and all phonebook entries etc will be updated. It appears that the VX4400 is less stupid with the new number allocation scheme.

  • LG VX4400/VX6000 Wallpaper and ringtone index files will be created if they don't exist already.

  • Developer A protocol analyser is available. Press Ctrl-Alt-P in a Log pane to see it. You can also run the standalone version.

  • Developer Protocol examples are in the examples directory in CVS

  • Developer There is code to interface with the Windows Address Book using COM/MAPI in native/wab

Changes in 0.62

  • Scrolling in the log windows now always leaves text visible

  • Absurd dates on files in filesystem view no longer cause an exception

  • Work around the LGE buggy driver which has difficulty with the concept of timeouts

  • Updated to pySerial 2, wxPython 2.4.2.4 on all platforms and Python 2.3.2 on Windows

Changes in 0.61

  • Com port detection works correctly on Windows 2000

  • Device drivers with incorrectly formatted dates are handled without generating an error

Changes in 0.6 - test 5

  • Fixed reading file contents to be more stringent. This corrected an issue seen with the LG VX6000 that returned extra nonsense on the end of read file requests.

  • Added *, #, P and T as the list of allowed characters in phone numbers for the VX4400

  • You can now paste from the clipboard into wallpaper tab. (Not too useful since you will probably want to crop the images yourself, as well as give them a sensible name.)

  • Hid the File Print/Print Preview menu items since they don't do anything either

  • John Franklin figured out the ?internal field for calendar entries

Changes in 0.6 - test 4

  • BCI (Brew Compressed Images) are now supported. They will be displayed in the wallpaper view, and correctly uploaded to the phone etc.

  • Filesystem view now shows file sizes and last modified dates

  • You can backup and restore directories/trees from the filesystem view

  • All issues in open SourceForge bug reports fixed

  • Updated to newest pySerial

Changes in 0.6 - test 3

  • Removed the 'Version Information' setting from get phone data, as it isn't possible with the straight USB cable, and requires the phone to be in RS232 mode with the USB to serial cable. You can easily get this information from the phone itself.

  • Removed the File Save/New/Open menus as they did nothing, and some users may have been lead to believe they did

  • Splash screen

  • Online help is hooked in

  • Include a manifest file so that Windows XP users will see all the widgets in their hideous XP style glory

  • Removed the separate version history html file since it is now part of the online help

  • Updated to Python 2.3 on Windows

  • Tour is now shown on startup if it is the first time you have run BitPim

  • Auto comm port detection and recovery on comms errors.

  • Config dialog no longer pops up on first use as sensible decisions are made. You can now browse the com ports in the config dialog

  • Filesystem view being on/off now remembered

  • The notebook page/pane you were last viewing is remembered and set on startup

  • The files stored on disk are now versioned so if the format changes on an upgrade, old ones can be dealt with appropriately

  • Huge numbers of minor usability and functionality fixes

Changes in 0.6 - test 2

  • Now make two attempts to open commport with a delay as it sometimes fails on first open

  • Added a half second delay when switching baud rates as the phone may not be able to switch as quickly as the host

Changes in 0.6 - test 1

  • Can now read and write files bigger than 64kb

  • Calendar is now shown

  • Worked around Python bug that joins("f:\\", "subdir") giving "f:\\\\subdir" which is not a valid pathname. This should only have affected users who told BitPim to use the root directory of a drive, or who mapped their My Documents folder to the root directory of a drive.

Changes in 0.53

  • Also ignore ZbThumbnail.info in the BitPim wallpaper directory (some camera software litters the directory with it)

Changes in 0.52

  • The ringtone tab was also refreshed if you selected to only get wallpaper

  • Reading images/ringtones from the phone ONLY uses the index now. The brew/shared directory could also contain other stuff such as scores from games that BitPim should have been ignoring.

  • You can now do merging as well as overwriting when sending wallpapers and ringtones to the phone.

  • Increased precision of calculation for scaling since it was sometimes out by one pixel

  • Added refresh to the context menu of directories in filesystem view. You can refresh anyway by closing and opening the directory, but this wouldn't work with empty directories.

Changes in 0.51

  • Index generation for ringtones and wallpapers corrected

Changes in 0.5

  • If you change the comm port while BitPim is running, it will actually pick up the change (in earlier versions you had to exit and restart due to a bug).

  • If mode transition fails, you now get a helpful dialog explaining possible steps to resolve.

  • Files in the root directory in filesystem view are now listed

  • Files are displayed in the wallpaper and ringtone view in alphabetical order

  • The wallpaper and ringtone index files are somewhat cleaner, although the phone still misbehaves is you delete an entry on the phone (this is a bug in the phone and happens no matter what tool you use)

  • No more than 30 index entries are added for the wallpaper and ringtone indexes (the limit of the phone)

  • Added a guid in the installer setup so that previous versions are uninstalled correctly. It is recommended that you uninstall versions before 0.5 before installing 0.5 to keep your add/remove programs entries clean.

  • Wallpapers and ringtones are written out in alphabetical order

  • BitPim now has an icon

  • We now send a generic initialization command. This allows the filesystem view to work on other Brew phones (AudioVox 9500 and Motorola T720 are known to work). The wallpaper and ringtone stuff should NOT be used on these other phones.

  • If you add an entry in the phonebook, the label for that row is now updated when you change the name.

  • Ignore the files Windows dumps in the BitPim directories (thumbs.db, desktop.ini etc)

  • Update to wxPython 2.4.0.6

  • Changed field sizes in status bar so that they are less likely to truncate on smaller screens

  • Group strings are now read from the phone

  • Pressing enter in phonebook moves selection to the right rather than down

  • Updating log text and protocol log is now down in an OnIdle handler. This means the user interface remains usable even when large amounts of logging happen. Feel free to watch as much logging as you want when you want

Changes in 0.4

  • Serial numbers on phonebook entries are now preserved when writing to the phone. This means you won't lose speeddials and voicedials (as happened with 0.3).

Changes in 0.3

  • Cope with ringtones directory not existing on phone

  • Cope with wallpapers directory not existing on phone

  • Can now write out your phonebook.

  • Can now crudely edit your phonebook

  • Changed wallpaper size to be 120x98 instead of 120x100 so that it comes out correctly centered vertically

  • The ondisk format of the phonebook has changed. If you used 0.2, please delete any stored phonebook (defaults to My Documents\\bitpim\\phonebook\\index.idx) otherwise BitPim may refuse to start.

Changes in 0.2

  • Fixed the issue of wallpapers inside a certain size range causing image load failures in the user interface.

  • Wallpapers that are resized won't have a one pixel wide black line in the framing area.

  • Phonebook is now saved to disk when read.

  • The underlying plumbing for the phonebook has been sorted out which will make editing it possible soon

Changes in 0.1

  • First alpha release

#include "pageend.h" bitpim-1.0.7+dfsg1/help/screen-t9editortab.png0000644001616600161660000012073010546621525017325 0ustar amuamu‰PNG  IHDR$˶åË-sRGB®ÎégAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<¡VIDATx^í`UþÇQ@ý{î8½³Þžçwâyv)JU"½é*D‘¦Ò; 5@’„ RIHï=¤ ÿßî Ã0»;;»3³³å»÷ÜÛ̾yóæó¦|ø½·oM}½Ù=wßs×]÷T”]½qý—5ÏžoÔ¨±N§ûí—¦ô®kÜHÿN¯&ÍôŸ›6ÖÝÝXwã&½7jÜø·›¿énüª»ë.Ý]:ݯ u7è¼@Àå èO¼@À• 4ºîÊ{‡}½ëð¯äôùæT®±¿èDh¢»~C×Ä :×ïÒ5¹[¿LwCŸ~1hÒ=¿étw2ß­ûå7ݵ‚m½óK£Æu7+®¬-,ûE7êå&_¾vß”7lÔ)†R“áÕM'ÞlþÍoš§O]ðÛß—þÖrÉo-WþöæÏúÔj•>½»Ælb@Àµ ˆœø \ƒ€kŸÂØ;0é3´©÷ÎäÇ8éÕèÎDÊD‰ ªÉ˜ºwcu-#Öön±¢÷£ó?~P÷ÞCÚ=riÖ]ý É´îSÙtò¯”•ó­g~ø)×?ºÈ½Xâ/Ägpä6,± ³ÏÌ™X°‰)—h!ÿO–âs'JMÇߤ¤ëuU÷VìÆ¾ZÙëºW¨·ð½H]—,]÷”FC‹)醗²DâÕx\Mãñ×I¿t“n6žø%ö™Þ¹…ì[Ød¯c9‘@@œ—@£1¿"€k Ó“v3–º~×ÐkGT7ZÙh@î‹*Ýç†÷>UôgÃ’e:–ú–èßéÛžEº^ÅúDK(õÈÖ}§k•ºæÓ?èÞyÄ [Ïë>O¿úçë2ñ"åbI/^f’þ[ª—†VRý@@@@À™ .iLi`q£EÔãGI÷y¾®Wž>õÌmHdQ,uÏÔ§.”uNÕu ”¤û0QŸè™ÖkQºG÷®è|¿N÷ò1ý×$[ÝS³.ƒoqÊÕîY¥ãÒ­}¥×2¾â1§CW&P¨ë‹  àäÈ¥‰y•‘KÝÒ©[RE:ų+R+J4T«Õ¹†D¦EŠEéÙ¢ô^$ Û2'[¬{‘ßÃÈK¿„`‹tý õ‰î=¬ÆÌ‘@@@@@{>϶ª8·ô—߬|ÑZ´.³Û YY|ϧ†xU—¬{ºe û9?·Äúš|Ÿ~Ï[çô­–z¹zá°î9oƒlým§)ÙÊáG¶8Ùâ‹çXùúœœ Bm\Ì @ÀÅpad|W%ÀºH@À^†­(Lͽ9i}ý€%u=¿­í<«¶ý75ïO­ióUÍ;“ôé­ úôß1Õ”^Uýüê§ú•¿2<#ör­ËŽU¹…Ðö.zÓºž™Z¼xRáôùzæêœ;¬}ÎÀ÷s·ÉùâJÙ}ߢ”õéõ©ûKŸOmûTL÷WÊ“b‡}Ÿ®7-&[ Ò[Öïfê¨7Qÿw«swµmˆl h­›3§µÇœÖú÷Ö­0‡Kè(=ÝZ÷ôÓºst­éOÒ5A4ËU¯;Ø/p+öºÅÂç@€ xÖÔõ?í¿¶òൻê§l¬·¦~Äòºa?Õ ZV÷Å’ºþ‹ëz/¬ýtAm—yµͨywJÍË£«þÚ7û¥¾§( ¥L!†XT“’¥SË·ýT±seÙúÅK§}?®hîˆÂÙà g *øú‹‚¯ûLé?ñÓ¼q]rG|”3àÝŒž/Ç´ûk@Ç—r‹®7D¶þuÆ„lé{iØÖçé¤Ss´öð¸¥Yä[, Ð/@šEÂus<ôZ·6’- ``w@À$·ºébgÝ“d ìK€gèOukü®­?|ý‡=×¾ñ¨Ÿ¸¾~ì*ò­ú¡?ê}kàÒº~‹êz_Ûm~m§YµL«ym\Õó_dÿ¡]­ËÉ–¬BH¶:êe«pöЊÝk*½×—mú¡äçoŠO,Z0¶pYCÉ· §,˜Ö¯`rï¼ñÝrGuÊüAfï×b;<¿ç¿Ðׄº)‘l=}†Ù¢` é¢A^´Ù(¦åa­ÖsôŽõô­¤W.Ã’9sè[ÊC¡/ŠrÝÙÂ@@@¬'@šÒë»ZÒ¬¥û®ÍÞV?a]ý¨õC–Õõ'Áú®®Ç¼Ú®sj;Ψé0Cß±Ha­7'V¿2¦ê…Ù¶Ö+Ža‹r éœÍd«`r/Ò¬rÏ¥¥«f/šP4TáÌ!_õÏŸÔ;|¼±]sGtÌÑAß±8àÝì¾of|úJl§¼_}T_“Wcõ‰ÉÙjèF¼S¶ôåÑ:|ŽŽ´ÂŸÖ…ëô‰¬‹½¢\ßšÓZÙ²îíßRb]w%@šÒm^í×[êgxêMkøÏõ¨ßpA]÷¹µ§×¶›VóÞ¤š7ÇW¿>Ž«úå1Õ-GW¿4²ò_ƒržè—-~!‡Ú ¹%[ù㻕üüuÉŠdZuçŽS9ù{çíž;¢sÎv9_¼—ÝçÍìÞ¯Óò«Áû²z¶LïþRÜÇÿÚ÷æfdëO!ú`×[ÙJÕ‡àzæÎ oÍÆc±˜ Ë¢DÖ¥çùVø€Öh„o̯*jnƤ_ç\ª°â%cµâV©¿þkrî/K^µ¸ ü @@@u]suH `Gä4(žÆi}iˆi ZR߇ZsêÈ´>œVÛz"™VÍ+c«_]ýâÈê¬yqdÍ¿GVýkpnƒlª*(Ä¢l ¹%[4(¾øûqÅ‹¾¤˜WˆÁ´>Ìù¢5™VÖ§¯p˳º½˜ÞíßqMÉVÃy’- vµ6ÌAãzæRÈj€!v΂XO·æd«!ÄÅFͳ¯(´Õ» !õÊc¾ïÑù”ü$Ó笂zvE Ó**­¿÷éóéäk¤b\Ä­2nªQI-}ÞTa¼Šê—wý—À‚€€€# h÷u Ð"Óúc}ÿê>›_×eVm‡¯k?˜RÓjBÍ«ãªÿ3ºæŸ#kž^ó÷a5/Œ¨ù×Ȫå<Þé(?²Å/Ä¢l ¹%[¹CÛÑ-}ïᬡÓúsåä ü §_«ì^¯Þ6­ÿžÕå…Œ®ÿŠëü¾7××äõ$½Yý#†×È—-²Âž¹Öò ±ð—ÒÛ•á}€N7§!¾Õ`Zú…­õä÷£ùK ™oq²Å©fo±?É´˜l±l÷¾´—ûL²EŸgí(£å•UõM:&Vq„ãuP‰“-š÷aÐR}bŸïiœVÝÇ3j?üªö½É5oN¨ye\õ‹£kžYó·á5Vóì𚌨úÇàœ?wÊW•)R}+,¤cØ-’­‚oÐoé}rŸüq=8»¢Z·M«óß²:þ%«ó³]þq©Ó?|Þøsƒlý/ÉŒlÑÜ4KVï‚pöÛCr¬[1-ŠlñeK¯_O맇 Ó¢9 ²U¢Ð²Ut4î3')®Zôä ¾frd«ˆýY_ÿ˽/í¬B¥Q0ŒfßXr°†Þé3-™±«š­ˆ   à¼è¶þöÄjú±!ýä°ßúAñ4ZëãYµ~SóÞW5oN®yebÍ¿Æ×ü}LÍ_GÕ>=²ö/#jžYõì ¼Ç:†"[ Á/„–‹Bß ¡ÈVçlZžÝïmú±¡þ'‡SûÑh­¼ñÝsG,ˆ“åtý{Î'Íîôtvç¿d~òl|‡g÷¿öØmÙbÁ-š×T?@ž†ÊS¼«]޾oÞð E}XëÖ/YbC7bë†þDýŸ4~‹dëé†Èç[Æñº=û/Ýûò>*övЋ÷™ó0½lõ*±ñ*e‹½Tpï?·òWaëî+›³êûL1°9ëSõ2wõúÝÝH ~D»€ßƒ€(J€î鯫î:·ö³zÓ¢÷n44ždkzí{_×¾5­æ•É5ÿšXûÜøÚ¿Œ­}rtíS£jŸuõ™Ay->ºC¶ø…P™"…зÂBº³_Ù½_ËÛµ`âgôóà Ÿå릟Útø‡œçä~ö¯ÜîÏåvùKnç's;?•õñ3 =³ÿ-ô²Õ*U÷f²Ž·è׈Íß)[†GUÓ°wö“CýïoýÑ0@^¿äö`ù9sÂ=æP|«ñ€Jz¶>õÒwÒ‹Ù ;‘NŸSRKštJáeîóˆÕ…7i˜< ÞjöþY~6®X*Šû|w·öùÞ—}(3€€€€ó úË£«;άé1¿öÓoëzί£ßvžSÛ~fíû3jßþ¦ö•¯j_œZûܤºg&Ô=>¾öñ±µª~|`Þ#íÃôŠc0A!zÙ2_}+,D/[úðPV—sGvÌÿ²Gþ„O ¾ìI?NÌÓ™3-ö!¿çsùÝžÉûøñ¼Îgwz<¡Ýã¾ÿ}D_“·²toeèeë¯ úÈ–^¶ž¢‡&¦ê#[4¬Ê [ú¶ ˆ†žD½cqcäi†­ß2LmJãèéG‹Ö6P£û\Ÿ8búÅþlÖ:‚û¬`ÝZÎÿÌr&çݘ³îò½ÿÚ~÷gÅülübÍ}n>¦}H  2 ôºªC; ûû?‡UÓZÏ®%Cê>¿¶+yÒܺö³k?˜]ÛjVíÿfÔ¾øMÝsÓêž™\÷ç uŽ«{tTu‹/òü0Ü [ú#VPý)R}+,¤g¥®k-ÏüäŸ4‡VÞèI³òÇwÏו3­ü¡­Øç_k* zoÌÇyc»Ü6­ïç}»`Ðí_#vy¬ S‹œ›'½ûÐïk-ò-ŠoÝ–-Šqée«ˆâfdZ”H¡Ø3YL‹&¯Ÿa«á¹=4M1?Ç#¼5}ºkè5J†èÓí°Ó€k1™úñìÔ¨` ¸ã+ê+¤¯Œ—S6~âJãkî³`]ü    àDèþþd¿«4¿=|ú£é áo½8³îÙoꟜVÿÇIõ­{`Xõý½ó›¼gˆl¸³êÚϪm;»ö½9µoÍ®ýÉÖ­B(³° õ¬¦åémŸÌêõjΠ÷s‡ÄÕ!oDÛüáïåy«`ÐÿŠú¿È-/ìðp^›ߺÿÀ?›èkòa¹^«˜oÑã§õ‘-&[óõ}ˆ_TQ`@?Ï–>Ñ£¦õÓhq“šê‡mÑ´òÜ¢¡Z­udZì¡=wúµÑ¨ë”tCõvŽȨ.¦ÕêƒUí"ùFŸwÕÿ–^‚åÌØ¸d,[‚ü\ÁŠø@@@&Ý€H `OtO´÷Õ¨~sBõûÓLËÖ 3êÿöMýÓêÿ0©þwcêï\}ϧùw½kˆlŽX)…ð]EXHßkºÞõ”áJëG3»þ›fy ߪ9æOKò†~7ô½¼!­ò½^0àå¾/õþ-¯ ô,lÿ»ÜÖ÷&¾zïßïj-ò-’­×‹ôí¹Õ˜¥ëH?å+c²Eól‘LéM‹¤ŠžÛnˆcQ×!©õ!›Hس) ÖxÜoÆüJ‰¬‹ë déÞ—¼šuŽc˹¯Øç¦}òYÁr.³`.³ ?¹`]ü   `3ú÷3Ø“iÊï?½úì ýsxÞ˜PÝjrM«ÉµoM©ycjÍkÓj^þªö__Õ=;­î©©uM¬{x\ýý#êîP}W÷¼F­ ¿F4±r !cë«¥½ý{êIÌìÑ2»Ï9ý[å|Ñ*§ÿ[¹ýßÈíÿZ^¿—óûü«à³g {Þ§üùÁÿQñßÑ•¯Œ©l9¦ªåت¯zá˪g¿¼úÔø«­n>ªš:›¸z×çºÎYº7ƒh]Mf!\x,éµß]þàñ´NÏ_éöŸôžÿÍøì•Œž-3>m™ù鿳z¾ÓýÙœ.Oåvz,·}óÜÈy§iÆëw]ünÏ_u ²Å|‹d«¡ñNÙb¾ÕxÄuJMÆÜh:þ¦>M4¤É¿ R“ ¿Rj­;}‹ï^ø ®GÀ=/…ØkP@nÙÍçû§7ÿ$ýÏ=ÓŸù<ëÙ¾™ÏõËø[ßÌ¿öÏz¦Ö“ý³þüEn‹þ¹Íûåý®Oî½½òîî‘×èã,]Û¸§>ädKf!úðØ€¹¥7Ïôü¹×›Ÿ{çÏÑmž‰þðÙ蟋n÷·˜ÿz±Ý3±mŸŒoûçø÷[$´nßêw oÜÿ¿»/¾Ôèø º½o?¥—­®Õ Á-&[ú©x²E3&0ÙbcÞõ¾5êšP¹&ÞdŽeδÔk”    આoªI©|þÓ¼ðp›£´ þ}Û GÚ5oÒ¼Ýчچ>Ð6ü¾¶Çšµ9A#â¿Þèݺ·BŸú8(:©”ÖeXä2lC “­aëjÊbüÛ<¿óŸx¿ôðÞ–ì~ù÷»_zÄûåæû^nîÓò¡/=pðß÷ù½ØìÀ M<ߨïï|þ¦ó~û©¢KÑÖÓä¦e‹ÈÆl&&¥wš§TŸô!®êå"ë2ˆKGÿbœØ~²¨¸6{ŽcÀ¶@@ÀÜ3ìÒþèu)Ÿ) EkѺ ‘í…¬»zÏÀ:ýOû^»§ݰÕú)»¬zå–Ü Óºç“ª;Ælñ"[Ù¢çõÈÖ?QŸô³›êè‡Ì7ZÙôâÅ%ýωv’ýøÅ‰~hŠª‚€­ðC-py¸˜ƒ€« ßFÄÓ/õÓtѼŸÕêzÕé}èY­Q±wöK]+tÊiúÓ†oi„¤%Hwv#ffÈе:§û ºQ›˜»Úê“®CK:§²¤ë’¡w2zd5KÝ3ofK OpDpzíh F$pid>³Mç¤êZ=e‡¥wRþdË)±%ôNOB¤DOšfD¤ôNfeZ¶>ˆÖË–Á·8åbâ%H,ƒ>qùy+Þþ–ˆ àZèLA×&Ðpyg×v$pQ*žÅìq= ¿F|,ºé+)-F•5ë™VR˜„    “€®}¥î­Ý3»uÍ—èt-(&€€€(J²…€€€¨H²¥"\™QG¬   à-N§õJV©Âš bš7*  VÈÝÈù/*ˆÝÚåÜàËä×_¾µ[TÕ\Ã[[¬q9üä‘XOsÕ–¿;8C@@@”%`l™Ü¶œ¼øºÆ#}ç%®+§ò¬27$½æR C¶dòÄê   `7²dKÈá‚IÒkoRÌÅÏØr‰… rr *)þ§”m‰D¶Œ ø™»Ãüφ¶²³È   `-ëdËœÙà1Ösî"ÝKŒN‚êñ3("2–N“@øÂg²’"ÇÅI§VÖr³öB~qÖÉ– ,¾dl@"wc"R ·Ùg?6Ä„ÌÉ–E7•nB&wǘ¹ñNIß„ªÈ   `-%eËÚm‹œŒƒOÖJƒ9;á*)î%VmÎbdËÜîHߊÅÝ1®“¾ š«€€€X$ ŠlI¿ÁÛ'²eÜÇyžq o-ñ ÔÍ¢ñ˜ÛœÅ Y”-A”ÑdÅ,n@@@' ˜l1}a/éµ4îã—c1’^¸  /‚zòëln-‹{dÒ¢Œ(+[ÆÌ9b6´…Å}DX![6”ŽU4! ]I5©6   nE@([÷¾’ÒbTY³žinEÁÅv²åb ŠÝpjzÙj•ª{ÂC×|‰N÷X4dË©›•p4-<ˆ@@@T$ÙR®£™5ê   `-È€€€¨HÀ¬lý†€€€€€lfeËÛk€€€€€LˆlÉöU   æ `Ì–Š}´ö‚‡-‚€€8Èd @@@T$ÙR®£™5ê   `-‘-Á#½EþTð ³ÏFc.[¿vyÿ~ÿýï×ÿû¿P¢ô'-¤¯Üå€.'G.^ôÝ{ïµàÇÓÃ?E£V/D…9`ÍQ%àH•­vO>IÉÁÁ9E%UbhïT^ÕæeÇ‘N‘Z™¼Ër )e£ÌÊ‚ÍθH ôõ?äMïç£Âr•Þ„²V¶4ö»*Sðe·b±4¯[ø­ÿ§?=õ¿Wÿþnë¼ò¿çžùË3ü¯H¾‹ò,ˆ    ¡l5k™lòAÔNá1NQI•šYUï1Wgõ6ºÇ˃+}ä‘ç•«yóø ikÙ0$m/œ`åäåå•••UTT”””\¾|™-Œ¹pÜ…oêÒÛlŒš[×ÚV0—Ÿ3-r¬ “_óú(ùJw~Šˆúxñ²wH¿Øaйswn¥¨¢M@¶\«1\§I9Rð8c²õ[ëÖ"‰å‘¾QÒŠR°Ûçƒ>ýâ‹ý[µšCŸÿû¿._¾®  0?¿`ñâå?ü4-lÓf)e l,?­hUˆK [¹Y±Gƒ㋊ŠÈ´NžOÜsäÂV¿Èƒá1—Ó2 iaTTdP on–´èóÇöìõôöÞz(=õ¼\éúØ›‚Iºi{]úí³"µbmÚ©ó‹çb>hÿϤ´n?,iÕ¼ùÌ·Š Ù:  @¶ÄnW&o?"ÿ¦ççW°‘¤ÕdrrÙÊH»@ã±Ø]ö¹çºC‰¹Ô† žüL–,YA yäï,efkÑêTˆb”‡/[É gý)”Ÿœþ³×ÉÁ ù9d¶ç©yÛÏLÝp¬ïÿÉ+ƒOÄ'%%<°/'S1×IN8³Ùc}vvvnnîÅØß>T·Â¼xs{‘“u‰¾Ú°Ý—Þ‹ò•q LËÜ*òe« 7þ©'ÿI­ùI×É¥DL‹ûjû®6hñ$­Âz?‘@@À¡X'[ìæd2ñ÷ª(?~{м+™gÜU)eŠT϶F“·ã{‰Äl2iðû쌋R\¶ÌE¤øË•lQPŠ™ÙU›6˘E1ÙúÝ®®áË…¸(çÃ?Ëe£U˜–Q!ã[ÜQAfs$ÈŸ\çLLò¤Á3¶œ<‘“Vt)³äbFQTJþ¡³i‹½#G, ZíAq/ò­ÿ}ù9z鑟¨ó‹Æ„öKOO¿råJFFFàÿ¸Ø†ÞLAù…ù ü÷?z6ÉËO?0¼0OîX%M‹Š’/[Ç v|æ™g¢/u‘bZ,ϲŸßa¯ä•G~û¢$[%FØ“ÓmÁÓß{}‘Ÿ§Ø¿þs-•im%¥´½D‹’˜MÊEò¸¼l±ÞC¦Ï>óçÊœlQg¢@¶('­È|‹Š’B›3>ýô˜Þ½©‹0.1­ÿÜý_~¿ëDdBò•ÜÔÌüÜ’êôÂÊËyå—2K£R Ü÷€wVVKII9ä§o RròyN^<vÜ<÷Zµ“™J¶òr.1gš·à-i<ÓyÔ˜ÿ½ÿÁ ñZµ®µ±‡½õ¶~l‚[ò ”  ,+dK|"~ý}ë¹çXåHŒ&mnï{~ù Ïn‘±úÎùÉb™ìÆ)½’Rª$Ñ¢$f“²EG“-ã8–J‘-nDûwe¥ÇðW>²?%%9''‡Âl‡ý3®Ü1ø,'+n—oȱsIÁ§/‰ˆ :³mOÀ•Ô;J°­2æ`¾ÝJ2¶ŠmÕ`kyïÙJ-ûÚëˆTÛõ£¸Þxã=ʳâç¥ì€Y¿ù}~¶S‘Ùr‘orê†uA@À6ÖÉÅ®LôÖ|K([›ÚyÿvSÄdŸ˜eÓ·wÛ¾¸¨@ÖȽl‰–ÉÝ;%VR /‰%1›”- òH™[­¢ø˜­;ŠåÕƒ_C¥ÆlÑDY¬ÑØœØæ[‚dÒ´øÁ0*V„9wÀøùùÑ0©å»Ž÷š´Á/$êdTbdLJ6ùVií¹ ‰gãÒòÊH¶âÒ }#’7Å®ñ‹î÷]@zFÅŸüöÙЬ´Êî=;/ÅÇÑÀ¯ÌôhVBÚåsû|vRÀ¬¸¸˜&›ð8H¿Žäžv9zçþÀ ÑBÎú…Fî>pÔ¶M Ö1-)9«Ë4-Ú"‹qö½3jEa-Öúܯ–-ùþü¬÷K'ka&OCìƒB@@@VÊt<'^¦dkÂÆ6;¢f/ºêøÈígçÎßÛggð·y¶(&Ù/ó¶lI«¤|-Jb6)[tOÙb3—Ò$Ù2¬;—;nÅÑàˆ8Š?ðõ¶mˆ¼)‚•˜˜pðÖØ,¿CûSÓRi>½¨ä}>{ø?x¤ÑZ»÷û××Ç' |÷`¿ Ã¹²þÃàXuô²À•H”K)Ùš0éU¾E­Ýð5h—Ozr {Š–¼÷Á ÙúË_õ]-®6X@@=2d‹sšçžk?ëCV¾Fiتׇ­zƒÒÂýƒ<Î~½ôhÿÅ!})yœùê{ßþ‹÷ÍÈŒ”¸3Ö–iZ¶x•„ߤTCâ}Hb6)[t4Ùbõÿe¢Ìy¶è‘;L¡ŒäË“%Ób.Ó¾EE±ÕEžçØ«W¯úúúRd«ÿ\Ÿ‘³<‰ô >Ëö:³ðj@@øÁC!©¹E ùG/$ûœˆÝ»5$vêúpï#çÉ–ôɼÒš²ª}CBü©Ç033ãÊ•´ø„K¢Ï§¥¥Q¨ŒlÑ‹~“{ø°O®aØV^ö¥=ûýŽž¤Ï^ûüé=2êTVÆq/«¶ÎÏlÃÑk٢ȖǶ¸4tø©5©÷«9Õ‘-›+‚Ø™€2²ÕçÇxG/^}|ôÆS7FLÚtzòæÓS~üCðgßùô» î »¯9>öÇÀ‘ w LI“4ÌÅÚ2![z%Rgž-Ue‹õ!þñ/› k‰üâ锹à¨Óc¾'‘0555û÷ïÏÌ̾ðÀ€ië·{‡îÞê½?xßþ#éU{vعÃ'%+7".%(òÒ¡ˆ¸}'bw„ÅM^sÔ/<†Ö¢{°µ)î¢Þœ¨ÇÆ~Q×!ÿE?E¼xñ"ùV|ü¥À I‰çöøê‹’ÏÁé—¥Î"&±JVÉ–Å‘[ò#[Tm&R‚D ‡7pô÷fßnÛÕ†Ù ?Ù‰-ǘ-‰­l ö!`l5‡îì§£…Ý=îyvúL¿öóòm`×AÝôéH×oƒºÌüdîáγý;Îôûpá‘ÏV3Í£SÔ¥‡pY[&ÿ׈RFñKákñÖ¢ê?ñE¢\Æ•wÞ1[lÆs}ˆK—®¤5©\â²ÅzEæ€à˜ížž4¡èìuÁ}&¯_²jç΀mÛlÛá›VPå±~ûwsKL>})ôÜ¥€³—œŠó ²$ð|lÅÃ||vÛÖcÅl *êLeeeUU{///§4õ…¸hÌ>Mè»ÍK?,,üdäÞ)) ›3ãdΙ,žŠÈ–ÉZq¦EÏ¥fM?|ä+‚>Ĺóß2K¯I9»‘@ìFÀjÙ2yÛëºèO[NõõÁ÷gt˜Øq^P§yG:Í?Òi^PÇ9Í:üá ÿ¶ôí´ï’­ 3Õ³Ch”§øNZ[f‡ÉyíÉv˜úÁâý†ePê®ÃQ²ó<[l»Æ#ôù­¦Èy6‘©ñŒ:Ý~<â¼y‹Œ[V\¶ØT¸¹ÃŒ“-Ê@a¤=AçzMÞ2hÜâ1OýfYdrÑ…´’>÷ëÚ–~N:öRøùø#‘q‡".m 8?qE ó¢øSÈ‘2ÏÕÇ÷GÇœ‹»¤ÿQá~_¯#Güht<ÅÌ(è•”|yß¡`½iŠòõ JIVÞ´Xå¥Ò³)~Ø ðŽ9еû¤)¯ LëB\—gŸÕþÿa„ÌöÂê  `edë“Ý1yÊþ·§û¿?+°Íì#mg·›£Omg½7ùЫãöÿ{øîç†îúÛÐ]ÏÚýâGMØòﱟhØ»¹JÛPæÈµoG{‰øÿ'“R`I¹ ™Ë£ø]Çβe¼9sKdŽÙb£ã™²ÎAò­×^›Lß>ÿüÿ¬•-*V#ÏŸú!::šžÒóåòàmaW|Ng>—z1ïtRa÷v=º´é&öÒ± —˜l}»í„硳ùùù4Ø+)Aîdå9™1 ñ§/ÅžLIޤ)éÏE†Ò‘IQ.ò­ý~úß nÄ@ÿþJ=™ÇøÈ—rœ³ãYääRéßüÚ2Ó¢)¸èùÓÓŠOéöq—éÛ‡~Jâó¤\@! ”­¦-“ZŒ*kÖ3_º`8×™¨ÿ@¿I|î¹¶XwòË û^û: Õô wg·žÒzzðÛcýž¼ÿO}v?ôéö{»{4íº©É'ë›tÝpo_ÏGgj?cW÷U&˜Û ÛÊœµ»ç3­š°ÙMï˜ Âè'“RðI¹ A¶Ô“-ò­AƒÎÓôñÇ_PO¶¨·.  ´´4ätü˜ŸC·‡¦úŸË ‰É;™PÐã£ÞÝ>êEa­1ñaç/œŽ[é{fΆ°+™9äg>ûvI9Фç)ÈÓ?èpù–=k¶úz ¡Ï'Μ'åJ»’yþ¼Ô_–Hß—Sü8çÈ JæÖbËÚP ñUìßÉbZKšVÌ¥.ô¼júêÁŸŒ‘4$Tñê¡@!Ð [Ozèš/Ñé‹¶E¶ž|²Ãw-6lçsãþsœßó£=3È·yßý÷÷õ¹¯Ï¾ûzッ×î{?ÝѬ»gÓ.›š|¼þžnî»ç¥Ù{{LZßÎ\ål+sŽ÷§ojN3M3Ùz÷ÝwŒÓ¯[ÓÜK9, [v˜AÞ\7" n m›lIïF¤ãdHçÎçÏŸ§!S«vŸýÓÑ>CfÞJx\~ÏôødÀ±èKdZÁQ—–í‰÷SP|rõômܸÑÓc=ÖPÊ$%O~^ÂÏ[ýÌÝ7}]x×É;¾Y¶÷ä™ {IHºL3A”••R!ç¢ôq/Å“EÙ2¹EþZ|ÙR<¦K…ÓLýO<þ:~YÓ :Úáßÿy¦¥øQA$`l™ëDø`^“A=»m¸¿Ïžÿ#»ê·ÿþþÿï‹CúÔÿÀÿõõ¹¿÷}½¼îí¹½Y·-Mºlh2Õ÷IÛÛ¬ôý2-ý”¹±¡Ìñ­7™ëªÝˆâ­®øy»=ˆÚÜy™²%}€<ÉÙ9ኊ*/¯9“0x¾O×?m<ß½÷äî½&n ŒZºçÔ”Õ!‹wœHÍÈ¡1ì4`‹òoذaåò¥‰—ÌÃV¨+wîñõÞù;b<ƒ’-:Úy’×´…;/^J¤mÑ/ ¾U¦¯äYeæ2å×MüwÖ–WC¶¨¶¤Shñ¤à>+V·¦…ôÕÿølB\„UÀ‘@ìFÀ:Ùb†\ï!÷áý¹wؽˆ¦dZdWüþoÐáêÓÀ€H¹úùþßçÞ÷}æuo¯ô³Ä/7}àá7›F«ˆü’ËÚ2{÷ïGÿÓØ¸nw,á=ÀQ bs?ÔøœU¿ç’²]ò8¯l™›úA¦lIœúkJÖ™H¨HIÏݽxÛ‰1ßï2{×Ü¡}O‡žM,¯¨¤që—.éçæ]µjÕÏ?ÿ¼|ùÏÔúi)ú¹F夃!Ç?ûf÷˜å', ï÷}H×~ý¾=ÜeüºC‡ƒ©b4~‹f:¥i½rrsh+ñqÊèWañÈ–¹ý²[:Uà§e‹É¨ºtý7?¬µ|UkÖ±øN«¶ü `å4Ö5X)[·öÌFšs=tïÏ»‡d«ëÆfÓÒ›VàCƒ¢OCŽüŽÄ‹|‹â[öýþÛ n#׿¶;pibÂÉÌ+Úåeþù£¡ZwV²a—ìnD㸻¤lI9Úù5¢¹IMåÈ–ôIMù.þáßÿ>î‹/hÇéEC¸¨W‘Þ©ÇBJÍ¢©°è+OÏÍžžžô„Ÿ]»vQdë§Ÿ~Z·NÿãÓca‡¤3ÎS˜Ÿ¸z×áO¿ÞõåêÓýë1ó@ë!?·ãñÙLß±ß7Œ £àý^’”‹^40?(Ø_Ù‘IrºËë2yµ …ÈZ´’ªÙóÞäËVË—õ½‡K/T|s(@”%`l™ë¡ë¸àáe¡Çx¿8-ô¥oN¼<#⿳Ͼ2áÔ#Ž=4<ì¡!ÁzßšüÏOX×î`ðºøØÉ é©ç(¸en¬-“?Ï–¹z*òkDÈ×dŠÈ•fîq=6Ù²êq=üß´ÿÇ?Èl¦¿qÝ:ªXdd$ „§dW{÷z…=””pzõªŸ6oÞ¼wïÞ;vÐÈ-ò­•+W’ œ<Ö0å¦ôS4/'~õNê=Ü=vʼnÁKŽ \xä½ÁËÞèûC—©{Þ¹™_ÕŠÍ,OSp]¾œx =õ¼ô ‰çTV¶”ª¿&[ÔiÈ—-ֈߪe‚(KÀ:ÙúÏÿxû‡~¼ß÷µ›þÈÀå/XñÒàÕ-¯m9dmËY:Ï~}ô©‡GhXèC_ÿÏü .“Ö·?|Ôó¹£—.'Ùºr9JD¶¤—Ɉp·Ls•DdËÜ0,›)¥dKäAÔ¶ §gZ[œoÉ¢ëŸáӦ̀NÎE†‘ÙÐm*=íüªKV®\±gÏž;wnß¾úY|kÏî-aÒÏ^ˆ6wg—i{'­;;yíé±?…|0ôÇ·¾Xòɯ®·îño Ïm÷rêådËìCÖå°?)ñ´Ä͹†l½ÛúŸöú—X¢"P€¨JÀ:Ùºc2öû>Ãã¨99~04Ä'8hïÐ -ľ1.²ù¸Óø>êƒ9þg­ï¶ç|dpÌ…°„¸“)Ig2ÒÎçf™~Ô e lçΟ> ^&GÇÄü\Ýt û%f“¾]r*>fKJ”’- N°çsÏu<~ÇÙ¢BXiâ1›íœ’o­\±äÇôöö¦øÖ¶mÛV¬X±fÍý‘°ÇÃ"ºâ‚¤E›v›²µç̃“×ùÁ+fææ3m‡/íóï>ž¼«Íè-ûƒÂ rÜŽJ»í[—/'&&R/gBBÂÅ‹1‡í£©¹,nÎn¦ÅN™õ1¹ú¯Û3ܲÆeiÕÊ•íQU£ò(@¬“-)?ô;yÜïXØa[~ÿÆä úñR‡¯ö¶ïÑÿøq_’'R(}X+ñ4…µ²3bÌÝ*(ec¾E$R¦±lI©¤Ä†—hQ³IܨmÙœZ¶h—¹»©`*yke‹Íø@‰ 'i³Ó“v("K#½vn¤¦§Á[Ü¢×êÕ«éóƼvÝÑh\åÛýÛŽÝÞ÷ÛÀeÞqAÉÓÖh3bõë}vœ°£Ëäí»oÅ´ø+r¾G³T°¯Î;w$h?÷• GŽ‚ˆ‚™ l¨Œ¹Uh©A›7bæì7ù©[3ßRp[( @Ô  °l‘Qì*êÌ‘á^^–Ðî§èSw¶Ù²Þ9C@+.æXRü)ŠiÑh-2-Š˜»OPÊF?ª§UÌ•)Àa±W݈ÛÈš’ÍA=€üÙäû÷?)>ÏVïÞG¸`­È:E‰¨ çç^Ú±}=Iß"ߢZ_¸pÆTýøã2‘sµ¨ qļôöu~‰[ƒS¦¬h7nËk½¿m7fKlj;–nñËÍÑ?6Ñ8Ñ òáaúaa4’Œ}KsU:ämó %“cÛmÓ/:¹+*xµb²õØŸž̰E³›B¶䌢@Ô# °l‘KÑàw2¤áë_öˆ=aó{;~ ?i!}Eñª´”H Pï!{¯¹D¨“‘2Ó*æÊ„lñ ˜ˆl±Eá¼dX àÁdÜhn‰”’4° NI˜X|‹™–9Ùz饷ٷ̷hfZTˆÿPÄÎ)4²Ÿ<ƒ~¢HûHcØi¤š7·¿4 *ýcÚR¯ «NŽ_ñéÜÀNS÷¾Ö{A«!k;OÝ;xöVv‚äåÄÑ B’A‰>П,––v9êH ¿p¿=ä|¶Í­Ê×#c[²Íº¸µüM"dKÊéƒ< ŽL@aÙ¢û¥¨‹°Ë‚?MÚØ6*Ú?59’þ¤…ôÝ0Ø]D º'Qf €—iruEî‚’%öJÌ&e¯mÎã²Eûž‘vù¿Å>tèÐsܸiƽà Iƒd¦Õ©)•:`È·Žz³±J4=zÙÒE&+@9éx¾œ|öPPP‡ Û‡- ýdúÁw‡¬zcÀŠNS÷u·iëž½¾x!œþÁ¬++=šÎZ…¢¼Ô±}>ô|dÈÁ^^{vîÚ½cÏžm£±šØ0xK¦N‰¯Ù’r"€€›°B¶ØÍI$Ño²H¤˜$-Ù=ü|œ?M£E‰n´þñmÃàZ˸LÙ’RIéM+Ñ¢$f“¾]rÞ![¼–¹å6lÂx~ËøÁ>왉Öö]RPŠõ'rId}ÅÏI+J‰i±QJ¶¨(:DSϬ\±øÇe?¬Y½Œ¦‡0‰—䉴‰½dT‹×îødâÖ^sµ·µýdïö÷Lüvm`ÀîðP߈“ì»$XÙe¦Ev>Jÿ´D¿xâØ!úáÉýÖDdÊ:‘¶V÷¸öRä£BÙRŠ$ÊЊ€$ÙâîL"*£Õð·kÑ´l¨¤É;½q9³ÙP‰«¸Œl±ý5÷ë3¾Z >[/ iñhaèŸRš€ý“€Q"ÿ¢ øÅ«Ø/m©Ì…«w¼;t}Û1žïŽØÒgÚúC‡v‡…ì?uŸ†<ÆF‡³‰è(Fe²þtÜ¢¯(‘±Q9”‡"ÇäpôïÛz©âˆ‚oÙq.¢hjLj Ù’r"€€#*[޼¨h-3£²Ä¿µ ª¥›Ëb¢lÒZjÛ¹8Lr2ÈB\ÔW~((€V‰>F ¥Ÿì×0®Ñø‡ºl°I…)qÑb›ÛN°¢E‹²Øi¨x@‹«!“-s ¿FTê@9 ê€lÉz¤z cmɪz¹ÊØg£ô<Ò)ê"¤ñX4×<%ú@ÒBúÊZPŽŸìõsòÄù¯a%­².~@WÕ:›ó-˜–ªØQ8€€R [."[J(ñ¡rêűÀ@\d ²   *€l©×õÜ{   `-Èd @@@T$ÙR®µæ‹ü   ®G²Ù @¶T„ëznŽ=°–€YÙRã9(ˆÿ©y  ®M€îzb²5aü$P–ýk@ [Ê–Ò@@@Àq°»žÙš½) $`R¶¬Ç"?€€8 I²%q"id‹HÚ [Îru@=A@!`£lÅÆ^\¹jÅÂE $&Ê|þüy‹wbdpy-EÎ[  àDLÈV³–I-F•5ë™F£Õ¨Ë“‹=xÈ7??OºPæ-ž›"""¤¯‚œ.I²åDWT@@@ ²õNªî O]ó%:ÝcÑe‹ÂT$O¹¹¹Ù†WNN}΋Š*ܱ£xÆŒÒÏ>+ž5«ÐË+ïÒ%ZNßÒ‹²Ñ*´¢K vJ:È–"ç- p"¶ÈuÒj·5+=½ÈÓ³dÔ¨’Ñ£KfÍ*^º´tìØ²îÝK *ôõÕK™áE«°ñrg-'º: ª  а]¶ôѬ¼¼‚Ë—‹×¬)þé§¢óç ‹n½ Š(™1£xÓ¦|CNÈ–;;·ï-EÎ[  àDl—-ò§ü¼¼¢€€b_ß"R+öº|¹äìÙâôtöWý¹jUѱc-È€l9ÑÕUP„€í²EþT”˜XTœ“SB¯ŒŒ²Ë&L(ûâ‹òAƒÊÖ¯/ÍËÓ/¿x±dïÞÂ+W [-È–"'- p.¶ËuÇÆ–$'—Ò«°°lïÞò-[ÊccËËÊÊO*Ÿ>½|ûö2ýw¥¥%qqædKÇ{1¡Ü;·„ËÅÏ}q:ˆl9×µOÀvÙ¢ÑY%©©¥ùùedW©©••ô*)Ñ¿ggW¬ZU~ù2}[š’R’ "[œ10Í2Ö)sËN5PaÈ–ü“ÖñKpígœaï@@€#@·u)×dÛe‹zK‹ŠÈ¥*ȱÒÓ+“’ªªª*×­+ÿç?«Îž½zõj¥¿%IXEEyAAYV–tÙâ"[,šeåâG¿øyøN­qL-)§¥³çaSô!€€k¨,×»”+¶í²E݃ ¦UYYU^~5+«ººšº‹þùÏêØXú|õÌ™«¹¹äª(--//—Ù(ˆx $ŒÓ,ø–c:W+È–”ÓÒÙó0Ùrö½@ýA@@œ€=dKß{X^N.E-R«šÒÒÚššýû÷=úòå˵eeÕ))Õà¢ùVE… ‘-¾`™³eìX-w“-]»x~b'·DpžÐrn ÿ3.(Ê€l)Ë¥8&;É)™éTMMMmmm]]Ýœ3^nÙò›)SêÊÊèOZN¦ï^¬¬”)[‡@dËÁ¥Ê\õTŠl™³(Qq´T½rA¶TÅ‹ÂA„€=d‹…µÈ´H§˜iÑ«C‡ÇŸ;wîµk×êëë™oQò-È–“ꑲÕvÙ260 ã¢bÆÑ/s¡29á­-GkÔ@@ ²d«©¥Q³§îp²E:EREjuìØ1ŸeË–ýío;}ú4ù-'cÁ-kÇl±QðÆäù¿UD7¢²&d‡ÒäÈVLLxLL—øgŽôÈ–¹Xë|äÞùâe2 Ư‰Û|¿x1LÊ ²%…ò€8;«e«UšîÉ[¢–([ü>D’*R« &|ôÑG'NLJJš?þõë×ÉÀ,Ê–nðØ„ã°Y¶HhbcOš;3Í«L.XšÉ!_|ëâǽœýÒ ³þqq'©!,Ù²ˆ@l&:êLÈÙÓG¬MñwÞDä—coÙ"£¢@×·ß~ìéé¹hÑ¢Þ½{Óó4ˆ²å8¢ã5±M¶.^ =.rfšƒe2Žeq˜¼qˆ‹¹Fz‡¸¸SÔâWIÈ–Íw¬ N€ ))!²¨ðJMu‘U©¬4‹V¤ÕYùŠ”£®l­\µ"??zÙ˜-ÖHï뢙Nsrròóóibê:äw#Ò*´¢#ÜïQ Ø&[Ô(~ú™Ô ã…Æ³$ö?ò{q)´Ø™ÙÂA  ŠiÙ`ZLËhEZUL‘rÔ•­Ø¸Øƒ‡|Iž¤ß³)3­rñâEé« §K°U¶,t]Yì.4¶%¾xG­†°ÿºi±'²¥ÒmÅ‚PסU-AfZ1T¤ue‹$€|kåÊå4R^bZ¾âç‹c\Ò°SVPI¶”½¡»Pœ'dKÙã ¥H'`Q’è—s"6æd²Åî¯7oÞ¤qñÔ™Hý†)))ÑÑÑô#DšúáäÉ“çÎKNN¦åô-”ÿõ×_­º%#³«€lI¿¦8lNÈ–Ã6 *.O@\¶¸ùÏÍù–U²%R+GõȧdQ¤\¤Sl—þ±Ó†ÇøÐgZBËé[Wõì— œB¶\þj%sE¶èB)sO±:€€£‘-ÎØ“¾%]¶Ä½ÍÞ²e|»¥á6܃±Š›€l9ڕˆúØ [‚‹`ú[KuàK’¹ÏRª Ù’B y@À¹˜“-ÁEÆœoI”-‰2ûE¶Wî~ÅËDŽC²å\×5“µµA¶8»â ±(È– $ØP‰€IÙ2iZ&}ËudKfdKwdËqÔHùš@¶TºÙ³XÍe‹»°òŽS4þe×d /{-Ø(KÀX¶DLËØ·\G¶dÞŸuwÝ-³¬îÈ [Ê^w4)MmÙ¢b>düÎ-hß´Á3cµ‚lirØ`£  û w‚nD™‘­ÆÜ­»G§kjH÷Þëš4Õ9²@ nÒ @¶¹Üh[ˆ"²Å´I£2éI|å2'["½“lÚÃÖA”" žlÙ!sæ1[Mtgx­Ùl]й-Þ!«üìs²Åïä‡ÁøRÅï4î©„l9È„j€€ ¤Ì³%syA|Kd¾.ë#[òdË÷xÜWký-·önM¶|üWL×cÀØ×&ÍûpÚü®‡w<è·óÞû%É·9¦Y-kù«_ Ù¢2‘' r´Y¶l¸°bà°8Ï–ø“µþ5¢<Ù"Í2y“6·\äŽ~wS]èñÝÇÏì [rjõáðUÇNyŸ».1²e,[œ¢ò¿b ¹è—ÅQÙbý‰#döŽl‘TݸñËÍ› ‰>߸q½®öª ²ÕH§ :â}öÌ¡CëNœÞ²é€ÿæðm–-‘X—qôËÜûÜáÜa+-§heÈ–V7l@@œ€ÝdKŠ´i [uu5†TM©¶¶º²¢873ÅÙjÒ¨éÑ À»uºãá‡ߥ >²óáGtë7-ù}‹fïRâc¶¤«• ¿Öâv‘A:È–tVæ„lᆠà˜Ü]¶è9ÔGI¿K²Å~œhîÝøvB³l… Š öÛ·ëØÑƒ‡ï<fmdËx€¼U²¥á}ε7 ÙrŠö…l9æmµ Ù*+Í;™û–VäÙ’_Ž‘­ªª²ŠŠ’ÒÒü’â¼¢ÂììŒäË çl‰léîŠóßãó»»ï9xäÞFºã¡ÁGCƒîjlÝy¥d Cì••ûÈ–q«Ù¶DÙ}w¢Ò [¸¥8&øØ“I ‘E…W¬õ-R+Z‘Vgû¥H9ÈVNfrjRtRÜÙÄØÓ #bÏ…GŸ ¶A¶hÆøC^Þ'GŸ8íë¹3ä€ÀÁCR¤Gü†j<"ÞœÑrã!óNt§täªÚA¶ø¿~àÿ‚EJGƨvÝ [Žy›A­@ˆ@büé¨3!£²6q¦Å0Ê/GÙŠ=ês<ÐëXà.Já‡wž8²ÇÙj¦ktô`Àƒ›í;ðä#-Bn¬Ó9sFŠl©}Bùò ØA¶˜+ ªjÛùûë¤%@¶pK‹ì-[ γÕD§KˆŠ=àçåí»Ý+òØÉ£Á!<ð€“Þ·Pm>È–S-‹Yd{Ëÿþ!óq=$[{·î¸töü#Mï§wú󰀟Ÿ"[Nq“¶XIÈ–ED޲…»€X$ ¥lɼUüáÿ Øç{,0Øo÷¾0¿Àˆ£áá¡a$[÷߿̒±º#€l9B+X¬dËâE@@@Kْ٢ÛÀï÷ͳE1­înJhšÓGyÄâ휂dˉšÉÜ•3Èã D@¦l%·UÖ¬giÓ„ñCèîè·TÒ)ØA¶¤<|IJ§à©R%åG¶è„ .O€.ÂR¼SÿË­ö•ºV©º'=tÍ—ètE7k)K¶äG¶Tº XG `Ùr„Ýtö:È”-gß}Ô@¤pzÙ²ÖÛvyê3}»ô4kɦ_~ùE:Pä”O²%Ÿ¡J)[´:€¸ §—-«n*ó~ô;Ó#öJqDBþ‘óY~g¯ì8šHig¨>í MÚּ’(m:ûÕ’ù¥—nÕ†YÈ–zv[W¾lÙ­ªØ€hH@üjÉy˜Cw#ZÙ¢€VÈéĘԢ1YÑ©%»%¯:-’¼O¤lÝ(ìB¾¥a;¹Û¦![NÑâŠË–”ù!€hB@ÎeY3Ù’Si9ë’lˆÎˆN-:žp.¥ˆ“­5ÞQÛ–ì¿×{îî]‹¬ßqŠdKm›×…lٌΞ+B¶4¹âc£ šsuÕL¶¬ G‰ï¡UE‘lE%æF§zÆp²µzß9¯…û7o £«}ÎoÞ¾wÞžõ;" [rŽ-9ëÚG¶SàJùí¡myô‘aÃKÀÄÙçàUI¶‹"WR¥ÊQ¤2(@ÀÙ È¿©Y$ |7¢œJËY—dëâ•âèËwÈÖÖUA›7†®Ûuz÷‚}d]dZ›7…ï\|²%µœuí [ûá{û¬ÔAQ“ú%šý×…lY¼t"€€ËsuÇÈVbvÅ…Ë…»y‘-r¬5{£¨÷p“ÇqŠoÑŸ«}ÎQ"“­o×Þäû¤ْæ¦×6V¡íÖ刂uí [æˆ[n,[üJš S‰+ß´D*  IU‹‚l¹Ì]; `‘€œË©f²%§ÒrÖ¥ÈVRNå…Ë»ƒnw#zÏñZå{Á{®×ªýç7l?¹ë_êLÜ;w“­¹kû˜“-®S‰»Å*¥;Æ%KÙk¥¶.e[ªæÑP¶¶$±ûOd-‘ƒÄÙÛK=Ùâ q—?Á®‹Ðä~f~g":-ÞN@À9w=Íd˪Vâ{hUQ<ÙºÈÙ¢~ÃÕÞQ4:~­×êR¤žÄMÇv,ó“"[*Å*ÄÃ*æ€8ûÍ›Û/­dËvéQ.‰¶É´œS]uÕ“-¾cÑgca2'["9åàŽ VsÕL¶äTZκ ²•B‘­Û²E^µecè–õG©ëÐsÍ‘ÝßíóúÞgíž³¶ÉwŒÎáG¿¤ähëuZKø›CIóu5‘-ªš,cµ¸–ˆ¨9»k.[L­ŒßÙT dkYu_Af9wFÍd˪p”²‘­ÄœÊówÊ 7 Š£¡Z‚9·¨qk·å/¼p®‘‰y¶$†1D¢_¬“å˜)‘AEÆ¥É984\×þ²%nQæÀZ»–ˆ™iHÛæMC¶p7p6_*iEÛe«é˲ž(§ÒrÖ¥ÈVbN…@¶H°ÖŸRd‹…µ8å²([6+Û î.Ε#¢_R¤ÍÙƒ%lí [Æ 'hãP"?ƒ¹†“€4ŽYÊ9¤5\WCÙ2Ù·hn!:Ýçvˆ=õȹØZ)[i·D-S¶l±Åß)'[%ò'557‰¼EÙЗëâK˜@ȤȖ N&çàÐp];È–†{ç2›¶›l1[b/Áp.A!?§¹Ìê]‹Q2€€ séÖL¶äTZκL¶.¤„ËpLÙ’Ù2v59¸´Z²¥y«¶«’l)~±Æh-Å‘¢@pCV]™5“-Å#[)èe+»".½„Œx:± <6çpdÆá(a ŒÊ`)(*Ãû?­hÀ–ï̙ƛ2dÇdo”qG’H¯?3Ëfn‰q\M"GËÙr´1YÈ–Þo°Ë à¶ä\–5“-9•–³®þq=Iù³—ì·lÏÜ¥»g/ñš¾p׌E^3{ÍZâ5{éî9´üǽó~òžÿ“÷Ü¥{N\¥_%*ª¦¦FÎv±®U [VáÒ*³³È–ÛÞ°ã  s¥ÕL¶4Œl-Z}Ðß?à°¥WPPiKçÏŸ¯­­•ëZE²e.­2+.[Zí¶  ªÐL¶TÝ+‘ÂÉœæ.ßìDDš©×•;_‹Vz3ÙŠ¯¯¯×ªÎn¸];È– ßÖ¸·Wâ7ln—![îÜúØwé4“-­"[³–l?kó¼ÅÛvz‡ìõ mHB÷Þ™¼„Ròò ™4}9ÉV\\\]]t¬È)“€Ú²%ÿG£®1ņ"Íd.J&À§V–Y¬ NA@3ÙÒŠÎ7¾Y¸ë”øáÂ… èF´g“©-[ü}ÿ•Ë)%=ù8ȶÙr†@5@œ€f²¥Ud‹Úã—_~)--½xñ" {—ò¢[)))×®]sð¶t¥êÙM¶¤X””<®_ú¾@¶¤³BNw& ™li ýæÍ›Ô-H?0”ò¢˜LËÎíeÙ’bQRòØŽãl²å8mš€82ÍdKÃÈ–”ö8xèPß/´iÿQç®Ý¾8ÈÓÓSÊZÈ£;È–‹’’G©]vÆr [ÎØj¨3€€ý h&[ößU‹[œ3oþˆQ£ûôÿ¢çg½úôë·uëÖÔÔÔ±cÇþéOzóÖWG ¨-[R,JJwÙ‹‚l9c«¡Î ö' ™l9BdkÑâ%_3}À ÁŸ÷ïÿq×näU±±±IIIO?ýô}÷ÝwöìÙ˜˜˜Gy„dëÚÚ¿mÜy‹v-nêîùH6,qç6¢}‡l¹ù€ÝHÀvÙjÖ2©Å¨²f=ÓH›&Œâ,¿âöó÷ÿrâÄ~_ ìÓ¿ÿ×_½hÑ¢ÜÜÜuëÖÝÿýƒ ¢ðK—.mҤɰaüöìýnáÂ>ü¨}ÇŽ3fÍ’Ù! ¶l)RIÙÂ1 RX)[©º'=tÍ—ètEË”-­"[»tŽŽž‡……uÿ´—qÙjn¹àOsûÈÈÖ ‚ão²åømÄ ñ¸§h,T@@CšÉ–ÌÈ–ïñ¸¯Öú'Z.NóÍw[9rdâĉS§NýꫯæÎÛµk×F½ûî»ô$šYþÏþ3ýIÑ/šøtĈôù‹/¾ Ïí:tTV¶4luÇß´dK©Q«W޳4dËñ[ 5Ж€f²%s·I³L–`n9—™d‹ætضmÛ[o½Õ¥K_PP@Á­6mÚìÙ³§²²288˜>÷îÝ;Çð¢Ÿ(vêÔ‰"[vèdR¶h!?RźDîÁ‚È–qN™p\`uµeK©Q«WŽS4"º¢™PIÍ h&[2#[$U7nüró¦>Ñ >߸q½®öªEÙ<|Äþ÷ZÛö½×¶íûmÛµi÷!¥÷Û²ÔŽ-¯MÛÖ´iýþýÝ÷? D¿O¤µ¤Ë–µ÷`V2Ærq„Õ–-~SJ™¼TÛ<š_&ÌU²å°MƒŠ8ÍdK&’*z¶¡!UÓ°¶¶º²¢873Å¢lÑvI›JS?ôë×oÓ¦MôNO?¤Q\Ÿþ9´zõêµeË–O?ý´gÏžô¡GÝ»w0hˆlñ=Id†Ln—ÍE¶ [ö—-m-JÊÖež)ª®ÙR/ pšÉ–üÈVMM%Êoúœ~9–d‹•lîÉÖØñ_Ò0y’Eƒ±H³ª««©÷ð›o¾ád‹>o‘l‘iuëÖmôرÖÊ–à1ë2^î2Ç–œ±OdKŠëh›GC;¬ Ù²dl@Àh&[2Ù‘TUU•UT””–æÓí°¨0;;#ùrÂ9‰‘­IS¦0€\êÔ©SuuuôNAdÒ‹>°ÏôNá.’­ñ_~).[æ¢V\Ð ²eU‹ÛA¶´µ()[·Š˜&™![š`ÇFAœŽ€f²%?²•“™œšw–î[ #bÏ…GŸ –([_OŸNE=‰Ù¢nDú@=°ŽEšbýúõô‹EOç©3‘~®8mÚ4«d‹9{ñ=Œ¿ûŠŸsºH¥ «-[R\GÛ<*U¶XÈ–²c,Á‹ n‘‡ÑWÖ"Ùš5k–IÙ’¹XÝ;È–Àq]Ò|]æ¤ÙžyœâØ€l9E3¡’ šÐL¶dF¶lžg‹ˆ“6ýðÃ4$K𢠽hD<½¦L™BšÅL‹fˆ˜1cdËž«Ú²eÏ}qámA¶\¸q±k  °]¶š¾œÜbTY³ži¤MÆ¡‚¬–UEYëm¤M .$£bvÅw,öÛC6(ž4‹™Ö'Ÿ|BölYÕ(23C¶d´Ïê-ûpÆV@œ€f²e­!)š´iÑ¢Eä[ìõ=ïõÝ­×··^ó /ú¡"dKÁ&°XdË""GÈÙr„V@@Ÿ€f²¥ k½æ} s²6ÑZ ÖE‰€l9ÅÙrŠfB%A4' ™lYkHÊ’úå—_ÊËËÓÓÓ/\¸pôèQÿC‡ùøøìÝ»w×®]ÞÞÞ~~~¡¡¡111ô›DšòTÙ­£4‹ [9BÈ–#´ê àø4“-ÑØæmôcÃëׯWUUe^4Û½ÒÒÒèÏÂÂÂŠŠ Ê£`UQ”Dv-‘¹9ø•47‡`G¤Ì!qß(dˉ UЀf²e›!™$¥`Q¶6Í' ¶l™›c–Õ?š@¼¸?gPQ4Wm\È–«¶,ö @@YšÉ–‚»a›lÑZ -ضm+Wú³¾¾žýIËéOêFT°ž(J:µeËX¡ÄõK aÆB&eué»ï,9![ÎÒR¨'€€¶4“-Û É$,ŠÊËË#—Ú½Ûké²%|Ùª¬¬dþ°è»U«WQm›Çm·n7Ù29Å?§V»c`æ¢b.Ù”-—lV쀀â4“-Å÷Dz^»½È¢¤§í;¶I/9!`Ù2Gñ#XRº¥Ì)¯Ç,²å˜í‚Z8Ídˆp”9vÖõÃâï¨(’­'óË,¡oYdk³ÇfGk6—¯dK0¤]¢ZqäEVç›k·d˵Û{  ÍdK©°¡’­7nH>|˜ú¹- æþ<}:‚–Ð$ëÖ¯Åà-8ËYEmÙÿñ ûVŠ~™s/ÁêrP8òº-GnÔ @Àqh&[Ö†£DYUiÓÒ‘líÙ³‡\Š/[“&MâË}N9=·m‘)[Æ·v)G€mkI)ÙñóØA¶¢fzdq¢ã<æâXîÐ|-Ç?•PCG  ™liµó¤M6­½víZ~~>MXJ²uæläÜod^‡ƒÚwþ¤ÍGÃÂQú–"[>û÷úì÷©°ñm[Ù¶û®mkiVÙíª-[ÊÖÖmKƒl¹mÓcÇA¬" ™lYŽß%«Š:xðà.¯$[,¦å±uÛÇÝ{Ò£{h6yúsðð?._1}ÖœŽ]»³ ‘Qgwyí2W)J$%qù¶­eUó;lfÈ–Ã6 ¿b-§h&T@@s¶ËV³–I-F•5ë™F®3aü*Hó‘RÍ[6ûúîãd‹tŠ4‹“-&X‹—ýصçgô!..–d«ªªrñâE& 7çC‚Î&þtüŽ*“!1‹Ý[Æ#Фì¸sål9E{A¶œ¢™PIÍ X'[ï¤êžôÔ5_¢Ó=-S¶¬ G)ÙZ±rù‘À«W¯r£µ²Oa­•kÖ’i]ºWXTHÏFüvÁ<«d‹ËÌ#)®óð·Ë•æòA/È–æ—)€lI¡„<   ™li…~ñ’E§"NTWW›”­„ÄĽûìØµk‹çÖаÐ3gÏ„…‡QdkÊ´ÉVÉ– :Å—$~ÐKŠ~ÑvM–¦@ûl²eÎ2·Ù’ «ƒ¸ ÍdKñÈ+Pü2̘5ýü…¨òòrcÙÊÍÍíðq—i_O÷=pp§——·÷n–H¶¦Z#[æÊ8%E¶Äó¸êajÙ2þ]¡mK\µ ¤ìdK %äÍdK+ô'ONN...æd+;;{ýÆM46«´´ôƒ:öê×üÄIKüiã¦õååeyy9'§~e:²ÅÂN‚}‘"[Æã®l[¢Fµ·«¶lÉ×\—ïÉ•ÒÄ-)”@4“-Å#[ÛrèˆÁ¹¹9L¶ KJJÊÊÊ葈4Š‹Æfefe^Œ9yêxHhÉVvvÖÁƒ¼¼vŽ;R¤|‘!í…27pž/mÒK“¸ËΘMmÙâ3×e–SJgä,³Î-™±:€€›ÐL¶´âûÅ ~å¤V4l‹ìª¾¾ž~™H“iÑä¥\•êëë~ùå:õ=ìµ{W`àá±ãFñ3hUy÷Ù®}d‹ÿËPŽ­À«Œó˜\Ë}š†¿§-÷lwì5€€µ4“-­"[[·m4d€Ui؈!3gM·–,òË!`Ù2ŽZ™ëDdËdkB¶ääX@À}h&["0xð¬¹Ó%¤³æêÓèñc4¬­{nZنقl¹ç™ˆ½P„€f²¥Ud‹zGëåµuÛ¶[·nðô\ïá±nË–µ›7¯Þ´iÕÆ+7lX±~ýòµk^³æ§Õ«\µjiÏ^Ÿ¡Q‘£Mz!jË–”ßxJD/}\2'"[.Ù¬Ø)Å h&[Šï‰Äýõ×™³fuíÑóã®Ý:tþ¸ÝGßo÷aë6íÞýàƒwÞ{ïÖïÑ{ë6mÞo×¾]‡Ž:Ò¹k·£FÓ¸.‰å#›"Ô–-ª¤ñD~šÀí”ñôŠì¯“ÙrÒ†CµAìL@3ÙÒ*²E|Éœh–šñáòåËô\ê“'O9rÄßߟ›èããsøðá£Gž>}:!!!33“¦„ Ñôˆlir\ÒFK “XbO…âþ4ù!&&L$ëvÞ —ßdËå›;  ÍdK‘ÚÛ\ÈÍ›7éˆ×¯_§_#’Kѧô¢9 è½¢¢‚–ÔÔÔ“‘cÑ‹‚a6o+ÚFÀ‘-Û*†µø [8@@@ 9²•,çAÔF¶ˆËIFߥ@DÅ @¶GªF-5¨¢L×# ™liˆRºi±œxÙŸdËþÌmØ"dËhX@À h&[F¶H¡ª³Bôïñk,¾»á1á» Ùr„V°XÈ–EDÈ D@3ÙÒŠþÊU+¾ùær¬3fÞÇOKØû¸qãè}Ê”) -øñóÆ”´ª°{nײeÛc§ñkDþ ÙrÏÓ{  `-ÍdK«ÈÉýq÷îÝÁÁÁôN¿Côðð wúÎ>oÛ¶~¸k×®¯¾úŠ4«¬("zßDø–µÇ–œüjË–”9´¤ä‘³.°.dË» `šÉ–öÍä&H¶èdžôjzåççÑöΖ°wz…„„`•ŸŽõí9ÿ3È–=›LmÙâï‹”Ùá¥ä±'ÙdËAÕppšÉ–†‘-š÷¡ÄÒëÒ¥Kœimÿ¾LËÎDZ}dKÊC¦¥ä±3ÇÙdËqÚ5pdšÉ–VP(²E›f®uÎÌ‹æ5mè=Ü3jÃìn"¦%¸ߘµÚMgß®}d‹Q’µ’’ÇÙ™ÛPÈ– а €€ÐL¶4Œlq²e2¼ÇLëÂΑ[æõiA¶T:g [*U¶XÈ–²¥Ï4FžM-E¶øžÄ)ÊHdKJÓÛA¶¤TyÄ @¶p„€€€šÉ–â‘-V ø;eàË7f«¸¸XoZ¹'Ïlºe®~œ™½¶lÙb³l è ‹ó3㘔fsù<-§hbÈ–S4*   9ÍdK«=7ŽlEEEM:uBß7ï]´ÍÓ ¥yM7nÜ(Q¶¸Ý1×9Ù²ªÅ![VáÒ*3dK+òØ.€€sÐL¶lIänÙ¢YLI°:ð÷1½^£û /ooï   •+WÚ&[,p% ÏjhÒº0g„ ù [gm³A¶´å­ƒ8 ÍdK+@‚È…µNž<Ù¨Q#Ò¬ž={Ξ=;ÌðºxñbddäòåË)?M‚ªUmÝv»-§hzÈ–S4*   9ÍdËA"[4Z‹žÕÃ=®'//=·‡–Ðç={ölݸqCóvr· ØA¶¡Gã`¤‚K\µù [®Ú²Ø/e h&[Êî†ÄÒ~ýõW“äMÎnJvàÀÈ–D¶ÊfS[¶¤Ì¡¥TeÉ8Ti-‡jT@Àa h&[šD¶˜l•••Ñœ_èFÔäØU[¶ø;e<½™zK4©ÞF![ê±EÉ ®D@3ÙÒ"ÉÖŠ•úaXÒÓò?ÓZšÔÖ7jÙ2þ]‚zK\²5![.Ù¬Ø)Å h&[šD¶v¯¯¯¯¨¨ÈÏÏÏÌÌLKKKJJb³j%$$$&&¦¦¦ÒÂììlê[¬­­Å€-Å9)ÚG¶XMÔ‹c¹ü# [RfäÍdKCôäOׯ_'å"—ª©©¹Ê{UWWÓzÑW×®]£œkiÒR-M°[»QÈ–µÄ@À= h&[ZE¶Ü³™n¯Õ–-¥¿K)ÇéàK¯0dK:+äpgšÉ–†Ð=·zJ³ÅrznõаÂn¸iµe‹õ Fh©·ÄU[²åª-‹ýP–€f²¥adK|Rx“|mXEÙvr·Òì [î†Tý…l©Ae‚¸ÍdKC”Ìœè<ô¢󤧧gddÐ`ù,ˆÆÓôZú×Áƒ4¯)£§Ì-;·dËÎÀmÛdË6nX @ÀÝh&[šG¶ô¦E®µo_æ-Ó"ÍÊÎÉÎÉÉ1ˆ¥ƒùù……-ûŸ-û3·a‹- a7$ ™liÈš…©(¦E¦å³Ï§!¦¥-½iåææ’g¢tȯ €d«²eÿÆ‚lÙŸ¹ [„lÙ «€¸!ÍdKóÈ–>¨Eªåãã»ÿ÷  >¸×çŸR¢›·lÌ/È/,(,Ò?#±HAÙrù‰—”:… [J‘TµÈ–ªxQ8€€ËÐL¶4$ØÙ"ÏÚ¿¿¯ïä©-^HÓœ²Yµ*++-ùaÎÜYEúÇQÓ‹Ed‹ûýšñÌã&w²%±Ýí [Æ¿=duÌæ`ñ‹÷È%³A¶\²Y±S ŠÐL¶4lí׫–>¦E¦EÓÊ“lõíÛ—Þ¯^­"å"ßÚⱩ¸Xÿˆj‹‘-é %=§â-í\ª-[Æócq¦Å}åæshI9` [R(!€h&[¢g‘-___O†$Xô¢§S6¬²²ªêêU6­üˆQÃÈ´JKK­•-‘éšø7r‰Á0 Ai¸iµe‹¿k»2)ÄRé£!.­6 ÙÒŠ<¶  à\4“-Í#[¾ô²Eƒ´~ýõfyyùÖˆáÃéq=ú'öÔÖRp‹¾"Ó" ³J¶¤„CÌ…UœëÐQµ¶ö‘-¾ïš hÑ>Jy4µª(¹pÈ–#·ê à84“- °È›KË [¿’iUUUMž<Ù`Z5uuuL¶ÊÊÊéÙ²cÙG¶Ø~1Í~‡È–Éc²eÿS[pFšÉ–â‘-V ø;k!&[y¹4eiõÒˆx}8ëjuMuÍÈQ#ëëê®Õ×Óêa,¯('ƒlÙÿȶ¿lqûˆnDéÍ Ù’Î 9AÜ™€f²¥!ôÙÊÏÏËÏ[»~5…§8Vmmm]m]}]=™ý¹xé¢oÌ+).®¨¬„lÙ¿±Ô–-‘ž\ —ÞÜ-é¬@À h&[ŠG¶¤·"“­‚‚üÌ̌ӧO7Š|‹FÄ“cÑ‹bZdZcÆŽÚ¸q#MpZYi]d‹JÆyéma.§Ú²e²™Xe0õƒôæƒlIg…œ îL@3ÙÒ:“-???šÎ”ŒŠ&73wöà¡Ù¤¦A“løû'&&Òy’0‹‘- ÷ÅU7mÙrUtöÜ/È–=ic[ ÎK@3ÙÒ<²åïçG‰&€ˆ‰‰8àååõÕW_M›6mæÌ™‡üü’“JËô¦E.È–ýoÈ–ý™Û°EÈ– а €€ÐL¶4dÍ"[þ¤X‡.**LOψ]kxmÛº-++‹z¯Ò˜yúqbM dËþÙ²?s¶Ù²VpCšÉ–æ‘­’ýôðl&-zæŠ×ÿYYQYuµŠ3-8Ù²ÿ‰Ù²?s¶Ù²VpCšÉ–†¬Yd˪— «XU>2 @¶œâ€l9E3¡’ šÐL¶4Œlyxn!y²*ùøìÓ¼©Üªv-‘r¨¥äq«v1éÄ%…I&SLL˜¹¯Ørjew¦‡}pšÉ–æˆoܸA–fgg'$$DFF†……=zôÈ‘#ÁÁÁááágÏžMII)(( 1ò”SóÚº[Ô–-Ûžª„ç,A¶ÜíLÄþ‚(B@3ÙÒ0²¥8¢*µe‹_yîq=ü€–`ïð¸“ÍnDUÏ à24“-!8pàýô0è ã4eÚd©¤VÃ>²eòAÔDÛx^Sœ™|¤Û6ºݰé±Ë VÐL¶´låççoß¾}ÂÄ 4‹ijzú™‹©”bÓ‹‹ )œ<3fÌ(«P"³‚ì#[¬ÂüçóÒä‰~)¸ûÎR"[ÎÒR¨'€€¶4“-­v›f=lÄÈ!‡ýJKK>ïÛ+$òò›£vµ™äÝmºoyy-\¹z¹`øü÷?|Kϫ֪În¸]MdKD¤Ðhò „l¹á¹‰]°€f²¥Ud+0ðð¢Eßݼy³¾¾®²²œd+üüå_ùúñDç¯÷•”ef¥ÿ¼bYmmõõëׯ]«§·ºººE‹TUUÙÀ«ØF@mÙƒ¨mkÁZ-E0¢—' ™liE–æ‹ÿ¼Ï§$RiWRcbΓlËøpÒÞ¶÷ \àŸ‘™Ÿ÷ãÏKêêjËËi¾ÓŠu]¿^¿ð‡oC‚ü´ª³nWmÙ"¤æ¦uàÓÆÔâÇdË ÏMì2€€ 4“-­"[Þ;7õëþnܥؔËɇýz÷ù¬ªª‚¼ŠÆi¥§§^J¸x6*bÙOK(îE¦E]Šee¥Ü¢^Åé#:ØÀ«ØFÀ²e[ŰŸd Ç€H! ™lI©œy&öyµWë?-[öCnnΦ-˜l‘i]¹’w)ætä©£aAK–ýÀÉyصk×hÌÖàwï¡ñ\ÆUâ‚Ü æ~Ë&È©ÆÞ¹L™-§hJÈ–S4*   9ÍdKfdË÷xÜWký-g:¹ó?¼Ë\šÔ¾±!Ý5éû&}Ô˜ÒDz§%ôáû¢ÏG 79nÚ¤la²«Žuõd«å¨SV½‰wù¨A![VÕÈ  à¶4“-™ÄI³L–`n9—ùë¾°kdZà,.¥ž™x`ZÌî±g=‡[÷ù‘Ÿ»ýÔÅ>¹•º,é8­Ûi¤—Ù¢<üy2çÌ”¹ïî°ºz²ÅL I>È–;œ‰ØGEh&[2#[$U7nüró¦>‘ÍÐç7®×Õ^µ([ßOø8ð§®§–¾~lÖ#‚tbÞãg—½|jÁ_B¦?8íÁC“çóå{¿|$pY‡EŸØ·sƒIâ‚1Ô"šen'EÒÅ QO¶äKJ`Q1È–‹tØõh&[2w‰¤ª®®ÆªIbh¦†ÊŠâÜÌ‹²µuÝ"Ïé­‚–µ÷ÿ'?pxÚïŽ|ý¥SK_ÙúùÅm}SügžZúò±ùÏþPèô‡Ïúž “;4µø„DA‹?U¦Åx˜L®·ºz²%ˆl:¾<1’ܬUKÜÄÆ [®wÞa@T" ™lÉlÕÔTò‡œÓçô˱$[¬dsï§N„.úBèš>›†4£´eè½»Fß·{ìýóþ}rÍ'3ŸLôŸç3ÙoÊïü§üîð7 žó—„CÓçöy"3#]¼ [ £êÉ–¸Z ¾å;}x˜É%nbZˆl)x´£(—' ™lÉ$KRUUUVQA³3ä“åfgg$_N8g1²EÓ<|õɃÛÇoÚtÓ¦»Fݶü£ ÞS‚¾}ÿÔ?ù~ýÿy/šùì¾ šþ´ßÌ¿úÏüëéÍýÚ:¼ÙÖúäóÍß­ïë3óïiÏP øþíàµg zÕø1žÍÁœZaÞ«N0õd‹i±cñ«'Èc,^&ÍX×\X¹Ù²êxFf7' ™lÉäNR{.,"Ôçx ×±À]”ÂïóZQ YÛßÜ77}`ÝÀ&”vLþ«÷¬—Ã6 òúú_Gþ~Ý×kîÿSÏ)?$³ÎX]:õd‹E¶51Ç260AÇ¢ (¶+ã]CdKúñŒœ nN@3ْٲyž-jïéýÿ}hÅ€ý ;zÍ~kçÌ×7ÿëþï?:¸´Ë}îÞ=§UÈÆ‘¾‹>ÙÿC§?oÌÒŠÿ·{Î;S:C¶ìw²¨'[i£2ŽZIYâÂî…È–ýNl @Àù h&[ ¢³ÖÛ¾éýœï²^»ç¶^?ú‰Ÿú6!Ú2éôç½\Ú=Üs¢ßO½V ~ˆ“­å_Üï9ù_-›ÌbQêÉ–¹_#òåI RR„ÌØ½\Ø´¸nVLjjñHF°ØPR˜ÄåÔµ¯Ô½“ª{ÒS×|‰N÷Xt³–É-F•5ë™F®3aüºìZÔZC²ªpñÌÓz>¹yjKR(N§Ø‡eŸßõSߦžS^,_ÞÿÞu£‡l)Ø‹RO¶ÌE¶ø‚‚‰ŒÀ(0374-D¶,ÃÈ wŒlMíúÇUÃ[?êñu£þ¬O#[;âѵÃÿ¸fx‹5Ãþ°jhóUC(=²jðÆôÐÊAþ<àÈ–=Oõd 3È+r³øoµ˜˜0îŸk&?Xû/4{Ø€(H@3ÙÒ0²5½ï‹Ûß3ñ£&†Ô”ÒJí¹ÔlâGÍ&uh6¥c³)ïÖñ¾©ï§4­Ç“ rGQâÔ“-R <Q-œÅ  ‘€f²%±~R²Yëm4|qqqú•+11ÑÇÂÃøî÷زéç—~ÿÝüoçÍþ~Á¼Ÿ\²y㺽»w8t<<ô\䙸K±¥%%R*ƒ<ŠPO¶© a0f G€H! ™lYkH";cUQž[=.Z`UòÜê!%ò(H²¥ LõŠ‚l©Ç%ƒ¸ÍdKAˆVÉi–µ›¶ak7ü-§8$ [NÑL¨$€€æ4“-« I“UE1sºråJfff†á•™‘™™••Iÿ£WvVvvvý—“C)'›2C¶ì˜ª-[‚§j²ä þdËíÁñ·Ùrü6B A€f²¥ÕÎ3sJOO'³"Ñ:jx…=ºmûöPÃkûöíaa¡¡aa;vìÈÍÉ…liÒRv-Á~ñu ³”Øè-‰  @ÀÍ X)[iº'ož-"[Тà·¶m#˺ý"ÁÚ±c§þ?Ã+//²¥ÉâP²…°–¹c²¥ÉÙ‚8ÍdK+R,²EšE}„Ü¢PV¤á¥cåæ’]ç^!!!ùù-MZʲ%è4¤Ý4^Âö²ÙÒä,ÀFA\†€f²eU8J·UE1Ù"Í"¯¢Z‡&ß £8VJr ½¨Wñ²áE ‘-v·Æ=[úi£¶lñkbÜ:â]ŠÒ÷Âås"²åòMŒP„€f²¥Hím(„ÉÖ¾ýÞ$[4>,,,*êܹsçwíÚUOrU@îUH¯¢Bý‡¢")²Åmm²J&eKà^"B憖Ù²áØ¶ÿ*-û3ÇAœ‘€f²eU8ʘ¬ïñ¸¯Öú'Z.Þ L¶¨‘Þ©ß0(0èXø1zyyy¥^NMMM#ÇJ3¼BÃB‹Š-Ë–’.["®æŒ‡—ÍuV[¶ŒcW&£YR׿}t![.ЈØ;ÐL¶dîi–ÉÌ-ç23Ù"Í¢QYô~þ‚þE²UDñ¬¢"ŠuÑüò%%Åô›5^dês7cãI¨“¡,®b!ã—`nJ¶.E—éÿR[¶7öâ7ñ™ªk¯ÙríöÅÞ(E@3Ù’Ù"©ºqã—›7õ‰nôùÆëuµW%Êõ!R!½9rä¸þub÷îÝW®¤Ñü[ááa41½(ÜUZZj›l™T(cÙâ÷?šs&¥™ Ép !["O>¦c]©Óå0-  …€f²%¥r"yHªêêj ©š £¶¶º²¢873EºlѸ, n‘g]ˆŽŽ‰ŽÙ³g·>žURBŽUVZF/úª¼¬Ü6Ùâ[” ø$ð0sZfN›Äû¿ÌmK&mû¯n‡È–ýwÊõ¶Ùr½6ŨA@3ْ٪©©D†Ò/Ç’l±’ͽ³>AŸýû˜l‡œ9GQavvFòå„s#[¤YTz?qâxLLÌÅ‹÷îÝ{èÓ»îo1´GÔÄ~g'÷?5±oØØÏÃÇò~æÉM}û°UŒ_ƾ¥”l™4'‹‘-Éä¬ÕêˆliEÞªíB¶¬Â…Ì nK@3Ù’ÙÊÉLNMŠNŠ;Kþ‘p1"ö\xô™`‰²E¶h,<½ÓÌ¥'OžîñF@·×|?yõPÿö>}ÛíîÕfÏKÿØ0jäõë×ÍùcãbNü%"!(®@Á˜-ã‘ÚüYüoÅmÏIlÈ–S4dË)š •М€f²%sÏIªbÏ…E„úô:¸‹Røá'Žì±V¶Nž8Ia­ØØØí¿$òË>a=ß<Òýu¿.¯íÿø ‡}6m@Ÿ‰}?Ó»ÇWûnø}óªª*™Õ¶Ãê&{6í°]e7aÙø±ÀzÒÌÿÖ¤ "ŽŒáS–•†¥A¶4„Mƒ8ÍdKfdKæ<[Ó¢ùh VÈÑ£§(®A#´NêØíõƒŸ¼¶¯óÿ|†½µj]ÿ'¿õxtκw~Þñö2­wÝeÔóXWW§xMP IjG¶øŒ¬’Øhn<–E9s¥‡l¹Rkb_@Ô# ™l)¸K6{Û/¿üríÚµêêꊊ z2MA…ñññlò-ú•brr2 Õ*//§œ¤h VEiÙââR‚jHïO4il"£Á\¯Å![®×¦Ø#5h&[6’1‹R1Ê´€"[‚¸J½29?¿qlLP¸küDÔ¸![6ÛX@À h&[ ²–.[³çÌú´WkÓœ9³¬-Š’BÀ²%¥È#N²…#@¤ÐL¶¤’ÅÝ^iÖ>Ÿ½;wmci‡É´sÛv}ÚJi§×öÕkVÐZë€ Ê€l)ËS¥Ò [*E± .F@3ÙÒ„#i“÷¾Ý?/_6}ÆW,Íœõ Íž3cîÜYS§MZ»~Õúk6mÞÙ²cA¶ìÏ܆-B¶l€†U@Ü€f²%=e±U¤EÚtìDØŠUË^}âô–Sg·Ÿ½°7*ÚûÌ9¯“‘ÛÂNm=¹:øøÏAá‹öøŽÂZ ‰—h?‹u@e @¶”å©Ri-•À¢X# ™li‘ÌéLdÄÖí[‚ÃWŸˆ\}*jýÙ˜mQ1;Μß|âì꣧–ÿîPÈ×>‡Ç{š½k÷öc'Âi•ÉÓ¦iR[wÞ(dË)Z²åÍ„J‚hN@3Ù’޲ÈHzQdNû}÷-_ù£·Ï–ÝûÖìÞ·Ê8íÚ»‚ÒÎÝëhâÓ­Û€€kÐL¶4ÁGæ´xñÂñÆŒ?ŠÒè±#èþdèÿ>/ø~>­òóòåæjk<ç¸ ²%2©¦Û:dK“ÄÚB¶¬%†ü îIÀvÙjÚ2¹Å¨²f=Ó(°4aü*È*‚ÒÃQ‹•^™Ó‚ïç3|Ĩ¡#G£wJ"Λ?‡V¡ÙMEdKàCòeËä¶l(Ö"7GÎÙräÖáêÙrŠfB%A4' ™li²çdNËWþôõô©>>{÷í÷Þ·Í1eÚ$ï}{¦L›H&L×·oïÁC9´oßÏXüýø cE~h<]¸¹§K| a1Yÿ)~š ³óF![vnÛæ [¶qÃZ îF@3Ù’޲Ø$Ò‹"mZ·aÍ‹¾  :z48((`Öœé~þèÒ×Ó§5ræ¬éã¿»téÒ¯¾™J6f›l‰D¼Äû ŸgÌ70‹4\#dË)Ú²åÍ„J‚hN@3ÙÒdÏI›ÖoXüÊ\š¿`îÜy³fÏAfÍ™AùEzEÆl™ûÊÜŒåL$¦ ={n²eOÚ6o ²e3:¬ àV4“-éá(‹íÁŠ’òÎ"[3g#=­[¯—­1ãFÇÆÅ×Äœ9‰ýzÓ·üDKh9{u@€ÿÂEßɬ³»E§äà‚lÉ¡g·u![vC 85ÍdK«ÈÖª5+(duààþ~ýúúðéÕ»'Í1hÈdTdW!G””—”ÓéOšïtÔ˜”h6ùeË–ÈliÈ–t€-é¬4Ì ÙÒ>6  àD4“-M‘Q­\½|Úדûöë3rôð=»ÓÄñä^½>ÿ”¾Š8}ª¾¾îÚµúëׯÅÄ\ Á¢DÏRôÚ³ƒfÛÒ¤Ân»QÈ–S4=dË)š •М€f²¥Udkï¾=+Vý|;­üiÅÊŸz÷ùŒd«²²‚LëøÉcäXÞ>»ËÊJÈ´H³htüÞ½{5o*·ªdË)š²åÍ„J‚hN@3ÙÒdÏçÌ™-˜ÅÿóÌéˆkׯ“i‘fQb‘-Ê0sÖŒêêjM*ì¶…l9EÓC¶œ¢™PIÍ h&[šD¶÷7Èœòóó#""BBBüýý=<<úôûœi……‹‹eš5dØàøøøºº:ÍÉ +ÙrŠF‡l9E3¡’ šÐL¶4ßs~~ýõײ²²-4xÀg½{Òû¢Å?TVV:T%ݪ2-§hnÈ–S4*   9ÍdK«È–RÄŧ2×ê[¥öNór [š7” @¶¤PB°R¶ÒtOxèš/Ñé‹nÚ2¹Å¨²f=ÓØÔÞîö,­tJ|».s@C¶œ¢)![NÑL¨$€€æ4“- #[=¾Zcœ¬m È–µÄ¬ÊÙ² —V™![Z‘ÇvAœ‹€f²¥!&2­‹É¹‚D ­ªdË*\Öf†lYKL“ü-M°c£ NG@3ÙÒ6²Ùrð#²åà ĪÙrŠfB%A4' ™li¸ç&»-.T‘-U[²¥*^¥ ‡l)E倸6ÍdKÛÈÖ¡°‹”B#“#cSc“3(%¤çgæ•QÊ-ª,«¼ZS[G©ž&9½ñ+ó0µe‹žœ(_à\æ`…l9ESB¶œ¢™PIÍ h&[î9™“R²E†Ä1[â–äÉdf.“-þ» î¥!Ue7 ÙR–§J¥A¶T‹bA\Œ€f²åJ‘-~PÊÜgN¤Ì)”ÈŠÒ­ËeŽNÈ–S4%dË)š •М€f²¥ážSdkß‘ ”¸žDêL¤!óÔ“È:YO"ëL¤žD‹ÝˆrdKã"[l¹ÉP™HôKCªÊn²¥,O•Jƒl©Å‚¸ÍdKÛÈ–V²%èa4¶4c‘2™ÇÜ/—9:![NÑ”-§h&T@@sšÉ–†{N‘ª­‡NQâ‚[l¤<›‚ nq#å­ŠlñÇl ”ÈØl–-s‹RUvÓ-eyªTdK%°(@ÀÅh&[ŠG¶Xâï¬ñHž6x§Äù–q"ÿ—‰ÖÊ–`Ì»¹?£¸Ì 7'd&}ËeŽNÈ–S4%dË)š •М€f²¥ážÛG¶ÄãXÜ`,‹¿F„l1Dìœâ¿ˆ‰ É@Ǻ†GKn²å’ÍŠPœ€f²¥`dËZ($[K=‚(qÁ-ãþDn°|QéUk#[ü±íü{¿ø<‚ÑZÈ#²eL²eí¹ 3?dK&@¬ à&¬–­'=tÍ—ètE7m™ÜbTY³ži,äàDa’§Ùëü(q¾eÜŸÈ¿eQ¶¤OÍ vN—9jÑèM ÙrŠfB%A4' ™liÙ‚li~ä‰W²åà ĪÙrŠfB%A4' ™li¸ç©úæ'oJ\p˸?‘~œÈM¾…È–ý ²eæ6l²e4¬ à†4“-m#[ï¢Äù–q"MÁÍÙ²ÿ‰Ù²?s¶Ù²VpCšÉ–†¬Iž [ò—²iÈ–JšçliÞ¨€€SÐL¶´l±`•UIМju·­|§8æ¤T²%…’æy [š7* à4“-§ #RIÛdHíµœ*WÈ–S4%dË)š •М€f²¥adKs言E-‹ˆ!dËZup|šÉ– høzòw‰‰2Û° ¬â  [ÒâÕ€l9E3¡’ šÐL¶¬l1Ó*¼¸3çÜælJQ›DRι-”¾¥ùáes [6£³çŠ-{ÒÆ¶@œ—€f²e-2’§´S«ÓO Svø<–Ò#VóSVØ‘êA¶œ¢íÙrŠfB%A4' ™lY»çL¶fzFʘ-ÊÙ²–°Cå‡l9Ts˜« dË)š •М€u²õNªN©QÛÙ"Ó’Ù¢lñ! ­lét:ÍÛ` [Nq$@¶œ¢™PIÍ h&[Öî9‹lY%[cGüËäVHªø/ÊÃ4K)ÙRªk¹R~È–S´&dË)š •М€f²¥vd+1l‰ˆl™“0EÚ²%#dK>C;”Ù²dl@Àh&[Ö²3Ùâßâw/Òr«dKÙââ^\%ùKø.Å}d`²Õ¥ç´…;ä‡l9E+C¶œ¢™PIÍ h&[¶E¶$Ÿ<ü¯"c¶Ä»]J©²!g]̽øò—h~48N [ŽÓ"5l9E3¡’ šÐL¶¬Ýsk§~—-ÁÖù‘-“*fÒ·±+~Ì8$ÆÅº [Rš²%…’æy [š7* à4“-Ù’òÎ8²žA‰‘-Ê&G¶L¶œ gÐ8"e¬S&£V-)'dK %Íó@¶4oT@À)h&[ÖÒa²%ý׈±G˜›úÁx» ²e2F%0'“£àc¿L®Ù’Òô-)”4ÏÙÒ¼ P§  ™lÙ0fË>²Å Id„;kWÁÈ-~~®.§qTŒ_‚IosŠ£G½Jª$[T,’²J “Ì¥˜˜0‘oé+ª‰z‡JÇ! ™lY‹@ÁÈ–µ›6Î=’ÏP¼5dKüÆo'ÙRû4Aù ÎB@3Ù²*²uóæMnRxÁÜì‚嬑VT£% [jPå— ÙR\}ì_ dKíÓåƒ8 ÍdË*@7nÜ`²%q€Ïš9êêÕ«-é¨''dËþn¤ø![ŽsB¡& Ú°R¶ÒtOzêš/Ñé‹nÚ2¹Å¨²f=Ó(F5aükX$=²E€H˜jkk‹ŠŠRRRΟ?âëë»k×®†×Ž;èÝÛÛ;88øìÙ³qqq—/_...®¯¯G7¢¶G˜m[‡l)®>ö/²eÛÁµ@\€f²eJ&ò-2§êêêÊÊÊŠŠŠ²²²’’Ò¯ÂÂB’*zgJKKé[ h‘œQ< ¦egÇÉl«l…Û_)°Es.^ÄÔŽsJ¡& ZÐL¶¬ŠliIÛÖ‚€m²uñbxlìqØ#ˆ‹;EÍy¶´8{°M‡# ™lYKÂs«çÂE ¬Jž[=¬Ý ò;Ûd‹níÔu{ÒlÃëwÒb"&5us Õ°ÍdËÚÈi–µ8lXÅÚM ¿Jl–-ƒo…ÓI;á;™‰*;—=JG& å_àtKÕµ¯Ô½£ÜykoÒÌœ®\¹’™™™‘‘AïY†WvvvέWî­- Ì-k!;N~9²%å€Fp4ÊË–m‘­ôôt,2­Ãë°©W~~~^^dËqÌɆš@¶í€ú€€¨M@yÙ²öÌÂTÓ¢P‹i‘Q±-!Á¼ [Öv¨ü-µOi”  àh”—-Û"[Ób}†,²eòEÖEÓ@@¶Jž¬­ dËÑ.¨€€€Ú”—-kï¾,²ÅZÜØ,šgËÜKD¶ðikáÛ??dKíS僀8åe˶ÈÖ¾ýÞ¬ëP$²U^^NóB¶ìoH n²åh—Ô@@@mÊË–µ7fÙb?3¤ŽÂ£ ½hy’-z·J¶(ÖÅ^\­¸%ƒYÛRŠä‡l©}J£|G# ¼lÙÙ¢DfZÇÍ¿H¶è%]¶Ž¥ßÕ;­K{@!V€l9Ú%õP›€ Ùj&ïAÔVÝz9s¢D2-ÿn¥Q>€€€£pÙ¢[T•ââbÖÈ·(¾Å¶jkk«««ÅeK0"äÊ´¨2-G» >  jpÙ¢[äX$[â‘­ššÙ²J,ðkD«p)•²¥ö)òA@€ÃÉù Õâ^lÌ´H³êëë)¸%S¶Œc]JiÊ‘B²åh—Ô@@@m$[¤Yæ"[dZ¤Y$[uuu2eKŠ z [jŸÒ(@@ÀÑ8œlÑ´¥ôSDŠlQ@‹†ÃsšuíÚ5E"[êiJ–BÀœlÑÏW‘@@@ÀÅБÌÏQdKÊ}šËÃ~Àˆ—30'[θ/¨3€€X$à²åá¹…äɪäã³Ïâ¾!ƒc@7¢£·Qµ hÙbNpãÆ ê:ÌÎÎNHHˆŒŒ ;zôè‘#G‚ƒƒÃÃÃÏž=›’’B¿X¤ŽEÊé˜ZI!ÙRû”Fù  ŽFÀQdKÊ}y\€dËÑ.¨€€€Ú [. 0δ -µOi”  àhLÈVÓ–I-F•5ë™F¿˜0~ÝéfŽº:6È–£]Pµ 4ÈV«TÝ“ž ¢†l9¶®8wí [jŸÒ(@@ÀÑ@¶œÛ]œ®ö-G» >  j€l9®8w…![jŸÒ(@@ÀÑ@¶œÛ]œ®ö-G» >  j€l9®8w…![jŸÒ(@@ÀÑ@¶œÛ]œ®ö-G» >  j€l9®8w…![jŸÒ(@@ÀÑ@¶œÛ]œ®ö-G» >  j€l9®8w…![jŸÒ(@@ÀÑ@¶œÛ]œ®ö-G» >  j€l9®8w…![jŸÒ(ß æÇç¤_ÈL‹ÌH=k‡”šp\½ÄÕŸv'+-Šö‹öÎu @¶œÛ]œ®ö-Ï^×+*1þtÔ™³§¸LŠ=)¥™ÈHò2c¾YåõìgóuoOvÔ¢ó¬áß{äÄR’Ám[_ äqv-§Óç®0dËÙ/êÕŸîµI ‘E…Wjª‹\#••fÑÑ~Y„F 2­ž3·†G§9÷Ϋ}|zíÑôU»¥D¶Ü¹õ-ÈàLÈV³–É-F•5ë™æíµnÂø!twt™“;¢9È– \5TÚŠi¹’i1_¤=¢ý²HŒd‹bZaRu©×Ͱ —i¿J‹R,pçÖ·\€O¶S™ì%þãåò+PUUVVš_›®UdËØ§%.áË·üc@Jë[<5Á@¶ÑH\¸N-¸j¨´ Ê–q§’ñ°cñ3È fØ0ÏÖ-Ù*¯®&*“Ÿ þt»ö§ÀÀØîå¬hsMªªJËJó r¯ØG¶ŒõÚdƒZlt“!O9ÊÙRérátÅB¶\Xlq× [Nw°[…Õ“-s†\X‹ÿAÎÕäºRn·L¶˜Ù¦ÈOäLüBØŸ‚…Üþrã<¶U¦²²¤´$7?'Í>²ÅRÈ·Hì ²e·óÝÝ6ÙrD#qá:A¶Üí#}í,[ÁRü.kÃyêz£TYY*?‘3ñ aòò—/—_ŠŠ’’âܼl»Ê–9{6׸R:eÊ·Õ–~Ž §ó€l¹°Ø8â®A¶œ÷b¡vÍ•’-ãCþ(.©Ò|€<‹!QLH~2øÓír¸?¹žDö-[Îï^”¿iVBEEqIqN^vª=#[‚˜–Éô‹ ¢ç9¾ÙRûºá,åC¶ÑH\¸N-g¹4Ø¿žJÉ–œ[£ëJ¹Ý²nDNSÈTì™H¶ß\yyaqQvnÖe;È–­¦T™RZßþç¶h&d«éËÉ-F•5ë™æíµnÂø!twtá{?vÍÎ [ö?Ée‹-ƒñÙ?dKáíÒ¼E™9YÉÙÊ´xºsë[„ƒ .@ A¶ÞIÕ=á©k¾D§{,²egÿp«ÍA¶\ડÒ.¸óí–E¶JŠóŠ‹s)Ñh'ú켉v¡PoZ)i—ô»²,‹ÇŒ;·¾E8Èà [n¥:Úï,dË®*íÝnËJ³”ê¾qrh¤t$e_9×¢ó¬°Ó‘Yé W.e^‰§Λ¨þ驱—Ï=Jûuµ2Ïâ1ãέo2¸È–öþáV5€l¹ÀUC¥]ˆ=™”YTxÅAúÄÃíÇý4jñÖšêb‹ܹõ-ÂA Ùr+ÕÑ~g![.pÕPoãOG ¡ ‡Ë$)¦E< ó.Ñû̵{žýl>õ»¹F¢˜Ö˜%Û««‹êjˤ3nÛúRà ³€liïnUÈ–³_2P5”¥”—¦_­Ì¯­)­«-¯¯­¨¯S1]¿^«^âÕ¼êZ}U}]eyé5 ¡Lp"-·Ríw²åDWT@@@-íýíjÙRä¼E!  ND²åVª£ýÎB¶œèꀪ‚€(B²¥½¸U [Šœ·(@@À‰@¶ÜJu´ßYÈ–]PUE@¶´÷·ªdK‘ó…€€8È–[©Žö; Ùr¢«ª    È–öþáV5€l)rÞ¢'"`B¶šµLn1ª¬YÏ4o¯uÆ¡»£[ÙvVU-'º: ª  Šh­V©º'=tÍ—ètEËÝ ‘@@)tàÒaǾÌé9šQ€€8  ²å€5F•\€dË»  ‘€˜l©Ú„ÂÝœ?²åæ(°û  .O@×¾Rg²qçöU›7,]¿fKkV-\½â»U+ €€€˜$@²DÊ´~í"–¶lú‘„ʬlÅÅÇF;qú$K'O;~"ìØñPJáÇ)$ü˜>……ëSxø^    K¡~á†fH¡¡‡ÂBšNG}Ã@@@@@cûÃŽÞN¡!>,…õ9¶ÿäñ,ð¹bV¶²sÒ¯¤§\NMf)9%1)9Á.%%]JLŠK2$Ç£”dH‰”Îß™Î%%6¤Ä„È„ø¨¤øH}J0¤ø3”ãO Ó¥ˆÄK§@@@@À$ÄL¼t‚Ÿ’âiÉqJIñ'’O²”š|*#õŒYÙ*.)(*Î/(ÌmH9…·}.Ⱦ•2 ¸”QPÀ¥ô‚Ji¼”ZPZoHy—õ)?…KùyÉ” òM§Üø‚†t©  @@@´!ŸwgŠÍÏiHyÙ±†—ÃR~ÎÅ‚ÜX³²U^Q|G*/*//0•òËËïLe¹åú”-He¥Y†”!H¥%é‚TVœzgJ)+f)YNŠ:íOCð䔀u]›Ž×n_ì€(E ¤(…RiQò)¡´èv*)º¤O…ñ”ÌËO­ÊÊ (L+ß R¦SYi/1µº-X%%™”ø^UR|E˜ŠRKôI¿ü=).JfIâÏ,Mf‹ŒàO: §(¬ë’p„¸d³b§@@@e %…\Ò«KÅ—(•ÆQ² [‚úé /•+¤Rù‘úÈ+œ>xïÝ5{ÖÌx¹=òòrvTð•B ÎBÀ©¯öÎõt É;ëô¯ß éÖ˹0ðãdË{ïÎiÓ¦…âåöH5:ÄŽdþâ\Ç6j J¸}±ÿM÷›Ó^í•¢r@@%dë¶c1Óâ'5£\ЇÐNŸ:ÄÉÅ´˜fPT/w&@ÇÀܹsÙéÄ?B¤`jEa-n]äìPüÄá*£^É÷ìC@ÿjƒc'´¾}š@¥­°æC#ª„—ׇHÖek7¢ ²u;ö%ÃÆ?,NŸ:ÈÉÅ38Órù‰k±ƒæ0ˤƒá–lÝ>BØã#Ùøše.ųZÎn•lI¹ÎJ©Œ”r¬½ ›Û®xøÜÚo4oñR<ƒ ²e²Enüü&Ï&Á©g|&r%7«‚ mrÌm‘ÿn§¬º²ÌÆå(ÕÄO^“=A¤\+”ª¶ó”#9²õ„у¨ÙÐÇ´nõ'šda|:Ù€Lñ5)[·%ðË/¿Ð¾[”-“qsG¸U­U™¥_ïDôņӿŠÄëµUûeîV-N¿¼H¼—ËD᪫+"[—ÏÃé—à Qä¾c\¸øÀœ$YupŠ£¹lI©¶”<®z‚˜ß/Ù²¥?’Ì™–yß¹™<4žË¦àùsúÄãÈ–ÛªvÜ„lñŽñ :;>僿DÇø e\ˆHüÌüè‘H±ÜW\±ü:›,P¤Î‚ÒÆ?¯K9ë™Ía7v>s7Eã+†‚××¾…è/öfúÙrãƒ(ŠhŠÅæùâh›l™;,MžAÆ m.›à”瀘d%rü˜+‡ó0þ hîj ¸2ÎJ“uÔÓ\‹œà®}RHÞ;Ó²è·-ÐÏóŽ_#š‹lé+$[â—<ÁÉ&å°L¡a`Í©cû![p,Ž@}}½ ²Å?B¸ º9)ù÷®¹;‡ÈuÍø²È¿£˜»÷X¼ù_Á-J¤ ÿoñnjî,6·/Æ·jÈ–µ—5óÛG¶ÌéˆñÙaòo|@J¹YˆÛ›Dá ×,îº!ѺDdKp©±j_pÄÏPÁEOŠÔ*xø9yQæeËßÓ ·¦~P¼Qp‹âë¹È)dRÈŒÛZåXè^Èd‹#PSS#-þ"QJ¶I«0y{x†¹Šˆü#D° wZI13‹yDËøæ!¸¯˜¬¿zævVÄ_ïsÆWQ³öÎgÛÆÖñ-sÒ`ÎTø $h,“—tñS€ÏVä¤0y™<×DB“{jò°ç—lî47þ…ÉCWüŒÀ´¨_Æ×%4)wU.È îǼB»`¶‘ÝqÄd‹f1--‘;fKüªjîŠ/¸hJ9,Äy$P 9²“ö™}æÈC>Ü–ÀÕ«W9Ù2>BØ:öØî3[b¼œË&ÈÉÏÌ_K¤s¯† žÒëÌß#nÓR>ˆ#2þV€È˜¤È.ð×5Fmn‰¸€¹¹2Ýv9»C[ûkDs²eì¾Á¤¯X´AðÆäv%Þk,ÖYÄù¤Ë–É»•9Ù’Rséy[1f+.µ"|R{ü¾[¥¼0¿a ÓâüKúT§Où±”Šò/Rj˜ÔÔ8²UZ’K©A• /ý€ùªm-Êಇ±@¶ÜÖ®;^QQ!-þâ²eÒ¬D»É–I×4ö!s*nNÆvh Çä¶Tºò:c±ŠÈ–HÈÖøFnîRoÛÍÂx-“.ã½›ó9ÁíÆdùÒ]Püæ%½9pDWÏ(qE³ímϵÔ87o™–^°Ø8-&[ì³Ù*)ÉÖ'Áà¥Mjjîß:´œ½øç€`!÷§U‡…¥È–~Ê|ö06}>›g‹ýòòá¶Ø@;*øG[Â?¹%ü¯X¶„Kl ·Üø?§ ³Éíò7aœ_P‰uæ²ñ÷Ë\0^×äÁ¾˜ü“ƒlÌ•) *€/ò­q›ÀŸ‚«=7(^pÑ6V)v)âÂ5‘2o"KÌ}eñþbîNd| 3·kÆ» rŸâ×Gà ‚š˜¬¹qmM®¥à^WØžÂ$g[*ŸøÁ2ŒÓ¢˜÷Y,²U\”EÉäy%g?mXW~£åÅQbcaŸéY=4ƒ¼;Oæ‰}gè0 Ç !l‰«&:§¬Ú5kó[U82;G¸ÚÛpƒÀ*6Wµa£²Šê§[n ‹_èZÜç݈ܳ……©”ŽüÃ"?ç"%ö0ö™>Ð-ÏFtóç"Ò@ÚÍü#„'®šèœ²j׬ÍoUáÈì áj:؇€ü»ª}ê©ÆV<Ý rb©´‚œV&}0¤èÛ)ûBÁ­dV¶r³ô)'ñVŠÏ͉ÏÍæ'CCÊɺd”âr²RvV¬ åd]¤”iHôþÌŒ1¤hJÙ ‰ýy{Iæùl‰=ŒEN X×µ àqíöÅÞ€€Rr2ÏSÊΈ¢ÄÆfå¤GQbŸ ËÏ6|N?›~Ö¬le\¹@)=-úÊ•†ÄþäRÃò´óW,¥ôÔHËéòÙtJ©g„éòét^J»|ÚæÄf·yu¬èòp„¸|cA@@)W.Ÿb‰›•vù¤éÏ)'ÌÊÖåäH )éìeS)%)B4JIº•O¦RÂñJl!ûÌKÉ Ç“‘@@@@@C) ǸDÕ`ã´X}nŽ¿õ9>Ô¬l"X1W.f\‰½•è³0QžÌ[)#-Z˜ á1©!繌4ó)5*ãÎd9<&%„†<     <[½s¬³îr$EÑ®$G¤%Ÿ2![tËm1ª¬YÏ´¦ŸÙœôå"€€€´JÕ½ªãOjúÀ‡)õH¿ï£ä»ßK²9éÞI“•¨ZΘÞIÕÙœZ¥éd%­ˆÉ«¶Í¸ô+Ê8Æ4<º4¬¶f›–w8åyA磜½–w:Ë9­4¬¶¬³R;ÚZU[N+ÓºZ6´V%g»2×MÕ½£ûWˆîÉmºæKtº>º'= ÉóÖö§ýUÀædÿÚÞÚ"I«VINÉ©³íÍdh_Í6-ï y‚jnk’ÓR2iËYÝæý•¿¢b2·.‡˜¬uåŸrˆ¡Ú²èiØpVnZΩ!‘Í7wç]‘Zg›þ–÷ç Ùúý:ýÿ!€€€¨@àÿ#]:ŒýIEND®B`‚bitpim-1.0.7+dfsg1/help/editingcalendarevents.htd0000644001616600161660000000670310547564173020164 0ustar amuamu#include "pagestart.h" SCREENSHOT(screen-editingcalendarevent1.png,)

This dialog shows the entries for a particular day. The entries are shown in the list on the left, and details for the selected entry in various tabs on the right. You need to press Save to save changes to an event. Until you do that you will not be able to edit a different event. You can press Revert to undo your changes to the event, or you can delete it. #define DESC(title,desc) \

title: desc

Buttons

DESC(New,Creates a new event with default settings) DESC(Delete,Deletes the event you are currently viewing) DESC(Revert,Undoes any changes you have made to the event.) DESC(Save,Saves the changes you have made to the event.) DESC(OK,Saves and closes the window.) DESC(Help,Brings up this page.) DESC(Cancel,Discards the changes and closes the window.)

General Fields

The labels of these fields are color coded to indicate their applicability to the current phone:

  • Blue: Applicable to this phone.

  • Red: Not applicable to this phone.

  • Black: Unknown applicability.

DESC(Summary,Summary/short title of your event.) DESC(Location,Location of your event.) DESC(All-Day,Indicates an all-day event when checked.) DESC(From,The start date and time of your event. Note that this is in the local time of the phone.) DESC(To,The end date and time. This needs to be after the start time. It can be on another day. Note that this is in the local time of the phone. For repeating events\, \ the date needs to be set for the last day of the repeat.) DESC(Priority,Priority of your event.) DESC(Alarm,How many minutes in advance to sound the alarm. For example\, a value of 60 \ would set the alarm off one hour before the start time listed above. Use -1 if you don't want an alarm.)

Repeat Fields

DESC(Repeat Types,Select the repeat type for this event. Currently\, BITPIM supports Daily\, Weekly\,\ Monthly\, and Yearly repeat events. Additional options are available for Daily and Monthly repeat types.) DESC(Excluded Dates,The list of dates that have been excluded from the repeat event.)

Buttons

DESC(Include,Include the selected date into this repeat event.)

Notes Fields

DESC(Notes,Textual notes for this event.)

Categories Fields

DESC(Master Category,The list of available categories.) DESC(Selected Category,Current categories selected for this event.)

Buttons

DESC(Manage Categories,Allow users to edit the list of master categories.) DESC(Add,Select the hightlighted master category for this event.) DESC(Remove,Remove/delete the hightlighted category of this event.)

Wallpapers Fields

DESC(Wallpapers,Allow users to assign an image to this event.)

Ringtone Fields

DESC(Ringtone,Allow users to assign a ringtone to this event.) #include "pageend.h" bitpim-1.0.7+dfsg1/help/phones-sanyo-notes.htd0000644001616600161660000001407410547575030017365 0ustar amuamu#include "pagestart.h"

Sanyo Phone Notes

While the various Sanyo phones have different form factors and some have cameras, they all share a similar phonebook and calendar structure.

Writing to phonebook

When BitPim reads phonebook or calendar information from the phone, the display on the phone will look as it normally does. However, when phonebook data is being sent to the phone, the display will show this or something similar (model dependent): IMAGE(sanyo4900-scarymessage.jpg,Service required. Please call 1-888-211-4727 for assistance.)

This is normal, do not interrupt BitPim or disconnect the cable until the transfer is done. When the transfer is done, the phone will be rebooted: IMAGE(sanyo4900-poweroff.jpg,Powering Off)

Phonebook Notes

The various fields have maximum lengths when writing to the phonebook. Currently if you edit a value to be longer than the maximum field length, they will be silently truncated. Here are maximum field lengths as used on the 4900, 5300 and 8100. TABLE Name16 Home #49 Office #49 Mobile #49 Pager #49 Data #49 Fax #49 Other #49 Email49 Url49

The SCP-5500 has the same fields, but the sizes of the fields are different.

These phones can hold phone numbers for up to 300 names. The official literature for the phone indicates that up to 500 phone numbers can be held in the phone, far less than 300×7=2100. The 500 number limit comes from a lookup buffer used by the phone to display the name and use custom ringers and wallpapers based on caller ID. BitPim will happily load up to 2100 numbers into the phone, but the caller ID stuff will only work for the first 500 numbers loaded. Also, it is unknown how the on-phone phonebook editor will function when one tries to add or remove phone numbers.

These phones do allow entries without a phone number, email or url.

The phones have a built in voice dialing capability. At present, BitPim does not handle voice dial data or assignments when reading or writing to the phone.

Calendar

The phones have a built in calendar that can hold up to 100 events. Each event has a description and a location, each of which can be up to 14 characters long. The calendar holds the start time, start time, and the time that an alarm will go off to remind one of the event. The alarm can either be either a beep, a female voice that says "Check your schedule" or a silent alarm. The event can also be set to repeat daily, weekly, monthly, or yearly.

When BitPim reads the calendar from the phone, the description and location are concatenated with a "/" placed between them. When writing the calendar to the phone, if a BitPim calendar description contains a "/", then the text after the slash is written to the location field on the phone.

This phone can also hold up to 15 "Call Alarm" entries. These work like events, but instead hold a phone number and intended to remind the owner to call a particular phone number at a particular time. BitPim also reads these alarms into the BitPim calendar. On writing to the phone, calendar entries that "look like" a phone number are written to the call alarm entries on the phone.

At present, BitPim does not check if limits on the number of entries that can be held by the phone are exceeded. The behavior of BitPim when writing more than 100 events or 15 call alarms is unpredictable.

Call History

The phone maintains a call history for outgoing, incoming and missed calls. The time, phone number, and name of the last 20 calls in each category are saved. Support for reading these call logs into BitPim is planned for a future release.

Ringer/Wallpaper

BitPim will read ringer, wallpaper and camera images from the RL-4920, SCP-5400, SCP-5500, SCP-7300, SCP-8100, and PM-8200.

Wallpaper and ringers may be transferred to any supported Sanyo phone. The upload capability is limited to PNG and MIDI files. This is a limitation imposed by Sanyo phones. The phone can hold approximately 6 ringers and 11 wallpaper images. (These limits may vary by phone model.) The uploaded media are visible on the phone through the "PC Sync" menu and will not appear in the "Downloads" menu. The uploaded media can be assigned to names in the phonebook.

The media upload support on the Bell Mobility (Canada) version of the SCP-8100 is crippled. Media may be transferred to the phone, but it is not clear if the wallpaper and ringers can be assigned to phonebook entries or viewed on the phone.

Sanyo Error Codes

When trying to send media files to a Sanyo phone, the phone will sometimes reject the file and BitPim will report a numerical error code. These errors codes will be displayed in the Log pane. Some of the reasons for an error are:

  • Invalid file type: Sanyo phones only accept PNG wallpapers and MIDI ringers. Other file types, such as QCP ringers, will not be accepted. (This is a limitation of the phone, not BitPim.)

  • Too many files on phone: If too many wall paper or ringer files have been transferred, some will need to be deleted through the PC Sync menu on the phone. BitPim does not have the capability to delete or overwrite media files on Sanyo phones.

  • File too large: Sanyo phones appear to have a image file size limit of 16K bytes. Ringer files have a similar limitation, although it is reported that some phones allow one larger MIDI file.

BitPim does attempt to make image files meet the size limitations of the phone by reducing image quality in order to make the file fit on the phone.

The ability to write ringers and wallpapers to Sanyo phones has many limitations. It is recommended to use the internet capabilities of the phone to load sounds and graphics. #include "pageend.h" bitpim-1.0.7+dfsg1/help/screenshot-settingsdialog.png0000644001616600161660000013061610667371563021025 0ustar amuamu‰PNG  IHDR€ô¸ôsRGB®ÎégAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<± IDATx^í½˜$ÕyïÝÂö½¶l+YW¾¾×¶"'Ih ,A"/,¬ÄÐê"Ë’¬+É–m Ù²„Âýîµ"„€ÝØœwrÎyzbOêÉiwøÞêÔ©ÐÝÕÕÕ=þý¼ÏLuõ9§NýëÔùÕûžSUoú§ú§………ÉÉÉ©©©ÑÑÑã¿÷ÇoœX=éw~çÐ'ô¦“Þô¦7Þxƒÿ§…ÿÿ¦7…h~ä‹ü[(ôFH|Œÿò«X÷ybeeùĉÇO,Ó›ÞDKË´:ô¦7B«¡ÐI´Áß}Ó›~÷¤“~÷wNú=þí÷~‡þžô;oâ[›8q‚’¾±JÅ­®Òj*™6Ï¥¨:l•gÔ-°oÚšÕUþ«¹†íŽ­ €P Ÿ Füѽå¼ý¿¾ùÍo~ÛÛÞöÖ·¾õÿð?÷¹ÏåÓ>¦}_¾üå/êSŸºæšk>y÷½%Ïmax\^aWŽë¶Â¿Ò_fÇ•X9îÅX.^+|iy™Û’ÕØJcÓlëÚ†Ä&Œ­ë5±TÉ[MDåUÆ lºákP ,­OΖ]ÒU™\(‡.uí¶²B×Á†y:s½œS¾Óˆn„ŸÚN³˜qÏYq8ÄI™Ccv ²æ¾EÐ3ºéà*_Iþ̧®ùø Ue->Ÿ¾öJªÀÑÖ¾âŸ>yéÕ›¾øÅ/~å+_y衇È?ÁÇ»¡¢¢¢k¯½ö;ND{‡ÆêÚû÷T´ªí.m —·TµTuŒÔtŽÖ÷Œ×v5öE›ÂSMS­C³Ãó]‘Åî±ea]cKÌFíÖYlškꛪh:ÖÔ}°¶igYÅ®ò#;ï}qÿëÛ¾öû»gWùÑ=Õk›5õPÊúž‰–™Öáùö‘ÅŽ‘ÅÎÈRÛð<Ûtxª¾w²¦{Œþ’5ôF›ú§ÉèWJ£¬#²Ô1b·¶á*°ep®yp–²4†§ú¨´©ºÞh]ï$·h]O´VYo´†¬›Yu÷¤´®É*eÝÑ*e]Ѫ®h¥Ý&+»˜Ut2S¿VtE…ÙÖTvOI뚪pXy׳ΨX(SÖ9U&¬kšû©´ÓbÇ:§¤uLë˜:ê°#íSÜ¢d‡•µEYí`[”Y«iZ£Ü&™µLî×l_ˤiÍ“ûš'÷ºÙž¦ÉÝM»ÉÆ™5íÒlgý(Ùëu£¯ÕFÈ^­±ÙŽêaÝ^©"{¹rŒè'JO_¯ì¬ÝU?¶§qb_stëÙ¶éC³Âǰ#³ëœ=âfG;gãØ±®YÃæŽuųҮ9»uÏ•‘õØ­¼gNX…Ózç*zç*{çmVÕ;o±¾ùª¾ùj7«é›¯ 3«æ&–™ÑzþS­¾2¼P+Í\O ìÖ?_ÛOyçjÃsuôkßYn½³5}̪{gÈjziA[CVÕ3]Ý3MM랪bç;å9ÕMç—åìc' aÊ*i¹ƒY%û;®[eÇ8™m¥øZÙ9^Õ9QÝM]Çt}ßLcÿ\Óà|óàBËТ›ÑzÓšYJ–X3¶¦i`N·ÆþYiá™ÆðLCx¦¾oº-MÎ.}âªË#ÕU=/n ¿´¥ŸÛàK[†™=?úÒóc/=?ñÒó“/=%{ùùé—ŸŸy¹döå’™íÏ:mzû³”€’QbÊB)ûØö-#̶mß:øò6²—·õmß6V[C›ž^8Þ9±Ô]|¹¶ëâën½ÿþû¿ô¥/ygR²`êM7Ýô™{6MNÕ´ô¾z¸~gi£ð1pË@uû0Y]÷XCï81¸)mîŸjœnžë™ï]ì_Ö=¾ÄlÌn]£‹”˜2Vµ•6õªkÙ]Vµ»üØkGö½´çËwn?°{Çáý{++öW7ml¯lï¯éŒh)WGdø- Þ>2ßÜ?MÖØ7Y×3N¹E‰Ódít5`°_'±•Ê‹í# ”’.Zg›fšú©eSƒŽ6UÏ‘,¨¬H\ÓcŰqb ¸wÝÐKýüVôUÖ×ð•qéÛ-&lÐW7Yúº£—}9zãЗXÑ—ØB_"1p `Wbƒ€]\3¢3xo]D ÀdÛg’°àqòöÈ`s$»2˜¨“ÁDe7’“e°À°À†M0³ÉLve0á– «3X°¤²à.1¸º×`°`WsÖÁ®掅aW WwÑuy´¶wº!<Û40‹ÁÍ}‰Ä€u ‹eÄscÀ‚Á:†'g—ïüØåÃåe=[ž!ëÛòLxË3ý[ŸÜúôðÖ§"[ŸÝúÔØÖ§&·>5lú…§”MmûÍT2ÊB)ûè¶ßŽlûíжg¶QÉÏöo+é㩬¸óã Àm#‹dõc‹¿®éºðŠk?ó™Ï«I)Z¿~}Éó[zÇv®}íhÃ½­‡Énì­l¨é©í©ïmì kˆ¶N· ÍtŽÌu.ôŽ-öN,¶Ô;±Ô;n7‚tÇð,e¬éªhí-ml=P]s°¦|OùÁ׎ìÙulïÎcv—9\[s´¡¹¼¥«¶k¨¡g¬mp¦st~lI}mœ!kî6ôN4Ó¥@8ÚÒ?Õ68KF¿ŠdÝ£.¦ùåäL“K=ß64×64K&xszª±ùÄâ/‘¸®wªVǰá Wu3'Xñ5Žã«|_uþ[Ü­f8Äl}µX:¾Â÷Uô• À6g×Ý÷MÊñõ@_ÃñMäûÆF/yÄ^n„¼‹ÌÆàú1r[É–À‚Ä ÀÊ4±œŒülòƒ©ÂN·¬Xxþü`‡+¬üàX®°ÓöÎ`rŽ]ü`Aßx fVlVH–1÷ƒ9ƒç~° .÷}¥Ë«\e®a~°Ý&'8Ž,bá +?˜cØÝëu®Npmu3 ý³qàÅØV®°Ý6`ò† +€ï¸ü’áÒ#Ï<ÞýÌã=Ï<Þ÷Ìãágïöñ¡g.a6ZòøXÉã%O–<-yüÿüÃ?ßvçç„Ñrô™_ýÚšŸüÃ?O<ûkJLY(£(a¸ä‰’'úKž?ûD/YÉ“]%OFÊÝqÅ% ÀÄàíƒÓŸÿñc·Ýv[RøAb`ExíhýëGëw•6î-o9PÕ~¤¾»¼©¯ªm ®k¤®s¸±w¬%8ÕÁè;Û™ï[è_ O.[lb9lµÞqbÞe¬ï©nW4SáõGê«VÙSvp_%Ù‘ý•eÇê˛۪Û{{"Íá‰ÎáÙžñEÂyßø²0Ú\އfÛ¦šÃ“ô—Ùà4¥$ëf•Yîu3壳éÅ®Èa¸cx® œiá¾59÷Ü(:M—´&†•7ÌcÑæš$SŽvv¥o¹ò€ úSMsÄêŽGßòƒ¡æsϰ³ƒ¾I…)í1ìl£/˜¡× `NßÁø5î‹@4m”è+üàœp©ˆE[¬8}áhˆ–áhÀ¡5WXúÁ*ˆm‹W›1j#]ÍcÑΘ3'1£2X18>€É¦SXZ~°Àíc1ÑÌ ž$'8a š¬38–lF¡û XÄ¢­æ!èåÛ6¬ï?| íñŸw<þÓŽ'~ÚõÄO{žøiß?íç6ôÄO‡Ÿøi䉟Žq›xâ§·Þ±™nWù‡ü“¯ý£mÍèãÿI)) e¤ìTÈÀ“? ?ù³Þ'ÖýäÏ:ÉžøYÇ“¿<úp÷£÷üðáð"üáCCd~çG_ü2qw‰îA¡[Qø_ú}ý»/õÿà;þkߣÿJé)#e§B¨(*°ù‡Tò# >Rÿè#µ?x¤wç«´i€¯«ì;ûüõ`jR „λàršÆ~¨¦ã(9¾äø†kÚº†[zGÛÂcãDÄîaBï4YÿØìÀøüÀäüPtqxjidzytæ8Y„Ù ³i»˜'ûÇæº‡';F[û»z»:ëÚ[ª[kZkÛZêÚÛš{z[ÃDßHïH4<:38¹0<µLåL¯£ÍѦûÇçÃc„áúKFÅÐ¥ÀÄÂPtidj%–©«mA}<ø‰Eâ·D;w¦) -0L ¦ÐtSX0˜®pÙ0s‚ÉØÄ+1€dš>áY_¯!Ö`mÇd9™…¾â«‹É)W ¶¡—3؂ގèQÃ’˜íœ‘°³sЗûÚ¬‘ûÁ Ìv’9,\aá{÷ƒ€õIÑ–Ñ-rFt|‹iÒ©Oж28æHp¬ÙXÀNÛbÑ) ÇšͦL»…£ÅTj«¬ÍšvýIN×b~0Gõ\M/s‚¥Y§@;ý`Wë~°õF:ÅÄp¯÷5¬f`i®ðƒ- .íƒ)]CƒÁáÙÆ8N°˜ù¬0l¸¼n$æ“¢ 'XúÁÀ*M¾îìÓÚ^xþØ¿|½ìÛ_¯øö׫¾ýõê¿Vûà×üZów¾ÚÊ­“[Ïw¾Úû¯ö‘=øÕÜÿbððððÿ}¿ÿßtû+=þ}÷ƒßñàßSz‘— ¡¢¨@*¶úÁoT>øò¿Qú­o´¿¸åº³O^X“°„]U>ëC$…$óÑKéF2áø}é6¤Æ®¡Ö¾H{¸é—7Òó-ä熧Ûû‰‹Í[7tÒ¦’ž‘èbdzitfylvelfeÿwÍ”'ÝúbÃôr¤ýÅ›N:é¦çûF¦‡&Æg‰¬Ýƒcýí½áÖÞÞ¦îÎ†Ž¶ÆÎ¶¦®ŽæîîöpÇÀpÙon6 ºí©ÖÅÈÔmEmqp|žŒŠ¢šÐßñ¹Á‰9*|xradji´ý%¾ÅðèôŠÍœ—†öåá(9ñT½Åñ…~ ªsgº‡0<ÂÆ•Ùx³d°6-‹Ïˆæ¯Ìû‹,s¬¬TŽI_`›™ô¬µO¹r§¯áõrßWÑ÷h;-Ûo7ZÛ{\Ãγ¹Ð½é°sF´ Žu?R¶ØÆ`'€Ýœr8ÚÂ`cµHŽ.L0»ot¶‡ÝÁàæÓ²h0˜;Á|Ø#€cÑ·¬c’Lý*¾ò5t83syãù¾ÑcíÜô¥ÛyugGØÙœðìêûò›‘Èž`¾o\«éÐÞѶ»’˜÷¬¢3<ì= M3¥]o VN°sHØ“œƒMÏXøÁÂñå‹Á*>-Ë iÃN0gp•àªs0X¸Â´†™6̸ˆ›éùH°Â0›ÿÈŒ1XWÞ lǰÕñ(oaØìŽar‚i0¸gªN»-ØõÎ`‰áØ~0Hf¦nF²ËôÜòú?ùÃÒÿ(~îãl¹ò‚mW^ðÒ•l¿ê£¯^ýÑ]Wdï5ç¸öüCמìÚó˯=¿âÚó«¯=¿æºó¹åf¢oOOŸúôööÝvçæâ›oª¼æÃå×|¸ìš½æÃ¯ù0e§B¨(*Š¥Â_¸ê­W]øü•–}ÿ‘‹Þñf€/.8ýÜó“‡ÎýèeäóAߦnŠ25?6ÕóÌÍ¡MÏ÷Q4†ª‘”E糫b6Ç0yÛÃÑ…Ab0‹HÏ’L£Â4É‹bÑ-4l<µƒn9s¡¹Ë÷ãø*Ü ë_i¹”‘X…šÍ¯æˆ¯1ôË +èËXk’†2Áàäèëò ï5Šƒ^A_ €c`X°—»’b=šƒ¬îJ² Ç™åâ§s6–;ƒ ÌF ÚŽvõƒS GÛžÔA ¶`Ø`°-™=×&âÖöñˆå°d°À°Ä­ ®2ƒ-&'˜NRÍg«t‚M?ØGk~°î €u“,Ì9-K0˜Ý•¤¢›æ°<‚ÃÍ6l}4‡1KùÁ“àÿö–òoË—mã¶}Óe;6mxù¬Ès=xó†#7o8vˆ²[6TÜzIõ­—ßÁ|ß¶¶ñ¹ý®Ííílþ2ß~[ù-—Þ|ÉÑ›/9|Ó%nº„»¿¬@*– aÓåd[7]^ñ“ÿ¸è<5·¬‡ /¨€“½¤àcÀ+Çkyä¹¥g¤­è;Ñ7<Ž´>¹)tÃ3Α °û¦æÇ§K>餇.ú7þ,fö æ;žë^9Ä~¯ AgiÙB~±e¦œ¥<²4Áúî¿‹Øò¦gÚ›JDlûÛ{Æú#d㑉Á±èðøa"ëI“˜gü&¢³ìòóHéØTéCjË·~ïá[ÅóŸé÷z䤓)=>%þýû2׿WMÍÓÊãmÛîkn»ãž’ܪV~·‚¹ÂèžX`Ã̑ٞ‘¹.>Aš¸ŠÍˆÖça9¬Nlôåè(mŸP &ú*‹eô)Wbš•^FßöIÃ,ôUµ üW©ÜkäôUޝ ¯²8~°š¥ÇyB–z4‡ðƒÍ‘`î«»’hFôVö\Žl›p08û~`–ë ±W?8Æh11X›Íœ``~o’+ƒùth3-ãφ,Ç€•l ‰Xt¹zþ†ÖžÈáƒÁä3'XÜ,ÌâÉmvy<–%#-ÂÑÆC9L?XxÀѹåKþôÿùãmw^÷Ò×m¿óºw^÷ê_]·ë¯®Ûû‰k÷}òšCŸ¼æè'¯9öék*>CvUõg®"ú665‹Ñ·øww›øúCË埾²üÓWýÔÕG>qõÁO\½—ÙµT K…Ó&¶ßuý w]_ùÓ_ò®·Ûü‘òÓΜ‚ɾ”&¥ó¡ßÁÖÞ²Î1 ;‡G˜ÌÙFŸÐƒ¸c-ý×Pè_,NJ¸‚ˆKÜepq99»ãÓ=O“Kú\‘’bÑß9LŽ,[ >%w•xÓ ÕOm ÝøLõÈDdb 2IŸ;ò KpÛo[ç ãSÝOßrÒ%]äûŽL–ÒOÿzpnd‚yÀß9ÌÜñQá?×;1»¯¤@ùÃ¥+´ðÛâ÷Î.Oû^(t[I×Êä±ïŸºíÙÎå‰Ùå–­·ÑÏ+¿w`v‰ülîæÃÕDß²îv§S+»í˜•E¶4Ï‚¦;²'àTtŒ•µ•¶k3íh+-YÖ´e håØQ›µŽRú#ÒÆŽ´Ž&kaFËò«Z)¸j1í`˨´æÑƒd-cÊ4qÝOÖ2¶¿Ù´}ÍcÊö6q¶GYãèn«íj5,²«AÚΆ³zf¯;쵺ˆÍ^­±[íÈ«µ#;\­fx·Wª‡lö2q԰핃† l¯döRE¿°ËÃÂ^(ë3­´÷Ų¾—ÊÃÛ+ú…½\5ðJõ૵ô »Çv7ŽíißÛh³•ßAFs§ÝM{J‰ºk‹n5æOñŒm¶§~š_Û£‡¬f>+Tn([ž"c×[ö0ìhç”0sn¼\ž>Ö9}¬‹Y©ÕŒgšŠ'›N—uK+ïž&S¿Š¯Ê(™mME÷´0±^~í™®&×ÌTtÏTöÌT(3sE+ºÙCiøƒWé ¬ÌÊ(h$&OP0Y­é˜(ãL¥+ZÍÆKÙIÊNU~¶²s³”›XÐOUc9r¬ÍÍZGŽ)kÓ–õõ­#¥m‘²öÑòޱ zP%ÍÉ¢ÛÃÓõý³ nFëM£çxØ­žž=)mº><]G2Œ= ¨7JÞeÿãO«žøÅŽÏ}bÇgï Û¹ùŽŸ»cïçîØÿ¹;n¾ýÈÿºýèý·—þ6²êÏßJV|÷§‰²Â¹ûÓµ÷ßòÝ»?£Ö<|÷§)HO);²óí{7ß¾“ì³·¿úÙÛÙ†>÷ Úèeö®èìRÓÀl =XۇˆN9ëCÉñ§àSÓ$,6,LñgྑÖÇo ÝðÛÖÑ( A“óúlGdòÇ*‹Bàã¾v&ccÀÕ'Ýøñ’ðÉLb1¾ñÙΑ‰Ùá–çoÝÌGy£{‰’½Îé;¡ML€‡Çg†éoËr‘o"î¶ne×FÉ´D0™ä!胡Yº—|剙 Vâ‘ecUŒüo¾rIÔ–»Ô̫旴°8väßiÖXã TÏMRüy¶/B·9ÑÏStóÝÝÐ;FO⤧aW¶”· k>Ö?K>B@_󶔩‡Ì³'\r«ê¢¼4m[ÚmŽ6zө^¨¡‡ô°É1dç–Žœ|æyÔä`!hzIQmÇ`# ³t¤s`œM¼âð O· ŽMwsŽé¯Ä¸/_.¥[6Lˆou“çÊÆ#4gŠõæ§Zˆ²3C<Ï.òzw§Y ›Ù,ùÙ,%ó©¿»·uÛ¡[žj!÷—ßÙa2ö+÷€±­Ð0s¸ÝL$–&ÖŠÚ:ÌÜôü­Ìɤ”Lîoßè ÝvÕ1m ^ŽÓs1ëºF«;#í#eÀG›‡è³X£/Çp¤¯`pú‰qk‰ÇÄ`A_ `B¯´Ú]µ‚¾1Ð;°ÓÀ-1X§¯$n•…¾>ÐKÎ0} ÌIØÁ†€]|¨ƒ3¸[0øÅ2º°ègw.U ’çíÀ̱ À´>Us ïq0˜¨ ƒ Æ6 s<Û0¬B5ɂʉ̹ËLÜ% 3s°Á`ÁàC´À,ŒÐËèëd°¼z60Ì©l»ªV—×â:©¬1¸‰®ÑƒËÚFùS£ƒÉ'¶aØ$.Ç0Ç­|׋`ÃÀŠÁà?qׯŠª{ê×G¿û­ƒ~õð?éè·¾Túí/•=ø¥ªo“=PûêúRÃC41ûb³¿‹eMý¥ixè‹u±Œ”¬ìÛ”~ë#ÿòÀ¡zàÀ·ÿþÈ#ߢÍÑFiÓ3‹À’Á甜|ƹÉñ§àS‡>táàúŽ¡Fº÷—¸£´‹E¡›M³ ŸjíL D}+D0n™8Êÿl*GZ;/²å‡ À ½ÌŒ©R4mJÌ™ÒÌQÊ}ÒÝäòNÍ_럽uÓ³äಔ{ˆ÷7mmˆvýö&,fH6L˜&a‰´0«÷k/i jy±ùù[i"÷3픬÷i>rL~<¯0³áƒß¥ ùNrGgzF¦;‡è±_Ìýmôí©h.k*m<Ò8p¨Î´ðº0]ï« 3«5momŸaá½µá½5á=5|-+Û]Þ]-¬ÿºË´¾Õae¯³åþUá×5{­2¬Yß«†U†_%«ï`Ög˜øÊì²ra}/++ëÛ®ÙK§-íö¢nÇz_<Öû‚i=/ëÙvÔbD2iGz¶rÛbZ7¡nËáîç=Ûs‡º„•ìtót…hf›nOïkåÖ¢Ûo÷6?µGÚo÷ÒO­ÂK~î`Ù–Ã][to;ÖÃÂÔe}/WP$`ÀÕvTì¨6èj¯V ¾J‘m‡½V=h3vÁd±¡×k,¶³fÈÝj‡vºÙ®Ú¡Ýdu.¶§nØbõÃ{ê‡÷5Œ8mÃÈþFÝ"l°Æ‘š±¯MÊ"™$kŠàF š&å×CM «ÄQ‰RúÊâ¸5’NmÃð¢©TÁTn ±Æ2wpɵ¥°“òtù‚v‰L§-³ýÜèüÝ_k˜±ò-¨•æBßþZÝÂûklkäWá K?¸5"fl G–`Ìx¬™`ªñ«D¬\)‰ËüÝŠöQeåm2z"osgßçœþÿþée/lëzíå®—·víØÚ»ckÙ«[^Û2Èmøµ-#¯m‰íŒk<%¹(;BEQT,+üµíe/l¥ÍÑF[:ûZû£UcÕ]ã5ÝdgUDÞú9Ôä}ðÂËéQ”5ôØgöè«á¦ž‘–ÞH=2Üø‹Zø÷Û{†'ûFþs(ô/û¦Æf›(žLžã­¿i™ÝÅCº´RÚèôÀèabö·(%_ ,ý£ÓýÏm ÝôxÃT82f·6=ü-˜FAoc¾U¨øuzîei ,æ,,Jß™®úíÍlÝÍÏWÓ÷“¯L_þm×ÄQ¶Å³ƒæ‚±¼ŸnžÙI•ÚÿúK¹vp?Í%Ÿ›«Ÿ"Ç—û¾“­á‰æÞ±úîHMÇpeÛPYËÀ±¦þ#ý‡8wé$Ü[Ó³§ºgÿ»«J·î]UÝ;¹Ñ‚ZÞYÕóze·n¯Uv¿VaÚ«]ôõUÍv”w‰¯;ÈʹUt¿BV.íåònie]Û {©´‹l{i·Xxé³¹‰5bYØ dG¥m;ÚÉ쳭ܶ#×ð09ˆšQØV³ äZB»ÌŒðï3ÄEiÜåŒ|:ûí¾VaOíkq1*·ßìizrw£ÕžÜÝðÄ.‹=¾³þñ×ë„=±³þÉ] Oíi"ûÍîÆ§ö6=½¿åÙƒm%Ûhßi¯·’>¥äK{±ŒÆíöRY¯»•÷nw7âz<{¥¢OZeß+ÛQNh¯V…É^Vm³þ׫5«é½¦gMÿ.«í®égÆâ.«Øm†jXÀF’ˆq5ž²§~`/3c …a_¹Ù–Y”¨›u¼FÖÔÓ†ú÷2£X[ØC—³tQk,›×¸µ}{j¸Ñ¿–_kz÷¶»ºG¿»«»ÕWs}¶¾ŠpS â+[Ó%M­©îÞCVÓ½¯¶w]ßÁ†þÃMG[†h¹´m¤¬‰F#ÇÂøO,™Õh ³ÖaaǨ4èƒêýáÝw~öçßxê_’m:í=7ŸþÞ[Îxß­g|ÛY'ß~öî8ç”;Ï=õ®óNýÄy§‘}ò\n´ –5Ÿ8÷4²»Î=õÎsN½ãìSn?ë·yò­gž|Ëéï»ù´÷n:õ=7žò—d´¡~掮þHMûù$4*G¡ÁŠöHeGäÌò±÷vvrü)øÔ¡_ô±¥¥•êöÁÚŽ¡ú®áÆîÁàÖ¾Q6'‹=‘cŒxÜÞ?N³£»‡&»†&{"Sä)†Çfé‘Uá±™þñÙpd††Né+ýå6Ý;2Ý3³b!èd¯(Bë6\µ¸´RÛ©ï­ïŠ4v6õŒ’ÿ×BÖ7N‚nc6ÑÖOïc˜hœìŒ’uO÷Œ0zq€ä„ñ5ôª†ÔŒžðìn#tkÿ‰6-7Áž¬•?} œw°§m&^ó@wý²'oÐ ‘¢ôîźîñêN ûŒ”±«N6ôKÆì6Ë>«Ž ÓÜ+nûhHX]à×IÓ§bÃÀÌ] eelؘ~E#ÁÌøÜ+ÝØÜ«j6 ¬F‚_gƒ¾4KÚkUÌø ¬W…1« *_0'^ÉX/WöS VŸ0̇¹Yg`ñÉÆev³Ì=¦yÈlV v¬o·­G{mf♂ۄçÃ]º=w¨S2“ —]!™–ɧ'úŠÙXN±´o; WPðypG5q—ÍÃzÍ6©JûgXWý¤ïFvÕ1³O¡²Í¨2¾î¡a]ÝŒ™Vr¬—¦\Ŵѽ ÌÔÄ+笫McvãóçÍYWƲ6Ä+çX#»ã‡ZÆ3Ó jýl OƦ\™vÔ²cf4!Ë4¦æÓ²(ÊÍMFªÛ"Ü(X]ÖJ˜´rm¹´™†Õ˜kAFsK…Ñšc̓®&Ò—µ S!¬pÆ`‚®å#ÁgVN"4€/¼ìšÅåšèÛÐÃ&5öŒ7õŽ7÷‘MÐ (Åc™õ³¿„á¶þ(Ñ{½‰½iŽÞwD¯4ðmôV¢ld¾ÛbôDIÓºê·nT‘ìÐ-¿¨›¥÷ I¦"1£7³gOŠ»~{'k À]Ô²GËyDˆ¦Tйt„0Ü4|˜¬qè4vb«!(5åRLý`¦Zɯr(kxÙ°}õÒhå>2™c6´·~X™½Û[?BkhèN|Ý­¬vxwíð.ilüÆ•iƒ…Êz½VŽ5JgŽ»tÌÕ#êp#üp#q£yIV£™J̌п)HÞ$h^qÝ”š•÷ÓÜ(a/–¹Ø ¥a1×ZθæS¬…‰i6ö¬ã´„.Ÿ-}_ý¥9Þ4îK»Ï¦:×°ùÌ; ™õt#ÖÙno¶§aLÝפÙÞÆ1wkÛ×4žÐö7Û­y|¿›h·ÙÁæñƒ-.FemÖ6q˜Û«m› ÓWŠ5†MiS·¤ó…¶Écdæ}êl9uLãVJ)Û&˜ñ,bb Q™ì˜À3'4a[3Fë£ÊèN¿–Èіȑ戱0r¸™Ùnì\n";ÒÌÏë¦á#†Éõôk#K }$¸n2Œ– £ tÍ}ÙT,r^J{Ø-ÂbÎ0=´RY­\#¢yÅâF#2#1{ŸabÞ“d3G2õTÌ *‘cJ&ÁÜ1JñRY%Q–_‰¦Ôű^®•fºH+§…»ÑJfmо4;u¬¶{¢®‡žÁ=³j pÒ¾èŠëÈnè™lìlìcÖDFÃûÌè÷šÑ+é+ /1ð\±s”l½àÏ»ÒÛ¥u.¦n]£‹qm¡kt¡3ÃFèÝÀ íÜÚ†ç[‡æ›Ø‹GèE„ìÁ“l^"{ͤ(kc&o%¤»~ù½¼ÇZÇ„Y{úÊ:ÖðŸÄݽä˜ËÆJ›ëÀzC1§TL.3Nu§„úPí«qË/seök&:_}Í>ÖÅ›½ü^ºÛÕ0ºóU‡Ý +MƒÀ² ¶·î¬}Ýiu£ìq©[Ü0ˆ— ½R¥{¡þ ,v‘fŒå4Ṍn©ê7ýݪ¡ìÅ…ÌߥÝa¸m$eÆ÷5O ·ưƒmS í½rXYûô¡öéÞíHû´Å:¦¸ÙÑŽé„v¬cšÝlµÒNó_~§ïŒ²òîÝh}¹nƯt;¯‹Ñݽ–õ³ÝÜzf+5c_»¹ñ•òž`~C0Ý"Ìî÷wMWtÑ_vg0»E¸Ó\/ÒfOP7žój<Æ•Ý:¬î¦Gß”¶Ó-†ñÛôÉh ûË “÷ Ë›ûʼnÏn nÙ¿Ò¶Òb|4»-˜ÞàRÛG·óÒ;줯sº‰ûƒå[YzfæMÃÆ‹Å]Âu}æ-Âä ÞئÝÍžd`šéO `Sˆ›fŠif[ð[œ™qØ‹‰Wt@w'7„§é†à3ªf>€Û’$pè¢]¿°¸\×3QßK÷¼N’Õ÷MÒs'ÈÃdQ›‘ƒH/®'O±mp¶}xžÞlß92O„SM„ÃX°d˜TÖIÈÔÍÀgGd!)k,H3(+Xk— +­uh¬…žJ30Gš¡–]+ÞþKœ¤Çѵs²›ú“VÒ—]ËÓX>vCç1¿T§P›"±ñÕ‹£ÐœÇ3¸ÁÌã‘`Ö\òlî¡W9@ÒCâÎÓ>zÄ„f:†Å2ƒ±0ÎaÄ!eæùk‹¸1;M¼Ê7(ã,·½ ÉùZ$"±ÍlOÂþº c À¯R^+€éÙ™ô'öž†V¢ì´«I²r¬Æ1qg·Ïîv¤cÆ£í˜q±Î™£nv¬sÆf¥3̺ì¦C׺<[ÞínЦDP²rþ×4ÁZ«ò'½½ô¬«¹Ja=dŒ¾Uô·×0öìIZÉÌŒÙA¼ç6Ì kqÚøªÞ´MÖ_ýi}X‡„q™ŽäöqúªÌ|”‡ÆfÞ H³>ÁX¦•â«0öÐJ Óœg ÒöÒã±fk€›èWVk´}µR™:‰é%ÁúÃ:âX ™H, *˜™q [L®”.µÀÌ'ßWøÌš98Iþ¾ºäÊæ—Všúgfš„Ñ;øúÙè…¸v“èi¡·õQÀ–"·#„Ì¥îÑåîq²•ž‰$ŒÒgÂÆVº¹u9¬slEX‡ÕÚ"K-Ëôº:%è³.ê1@ìú]=H^ÔÓaæ3† #vŸ8SÖ=ˬ‹Y©ÃŽÑ‹ß©çí’¯?Ú5+M¼§¶kÎfGºæŽtZìpçœf³‡;géñÈ®v°cÖní³ÛgmûÛf,Ö:½ßjûZ¦Èö6G…ï_¢—@0ϼ´\Ip‡ž<]ÓÙå¸%è²—·Ðƒ«¦Ùû;I®ùcÝ ¥=‹e½K¦õ-•q+—¶\ÞÓ*ú–í^®°ZexÙ‹U…—]¬¹*®U÷/+«é_¶ÛÀrfµËq¬n`¹nÐnõŽ5”¦~h™Ös[©3Œ–MZ©×ÿÔÀM®\nZ!“å ,Õ.Ö ,Öð¿ý Êêú„Ñ¥ëú™É7 ‹÷ ‡é}ódµô·WØŒ°êžia5½Ì̯|MuøÜº¹_«Üž­áúÀ æ˜ö‘ï;GÄ¥^¥ud¹-²Ü>ºb7Zi5JÆRÖ6²d˜ùÀÖazÎå‚nôôJæE Î ãO²œUÖH]½2z½’±ÜÐ7-Œ"ëÒ#xíÆ½ÞF²~zoú,m®uxáÌÚùSÏÆ“°’CpèÒ«7€[†æÅãÄZ¹µ Æ0ã©c”^8Ž‘%GïñÞɽ“«}Ñ`¬7º*mr•Š%ëIÞº'WãÙÄj·a]«ÒÆW;ÆWÛG·EVèTiZj\hèŸo ³šÞZÊO`zy¸‹±3ÜnâͦÎwÅØ[¯¾ŠÇÜWõrë[ˆe•} Ì‹Ìú¤Uô-êV޷Ȭ—V. 38oAÅ´Þ¥ÒØv¬wIZÏÒ1ÍŽö,¥ÏŽt/ ;ܵ`·ÎùÆê˜F—´Í3±M¯6ŒMËô,èƒm3â­ÀdGˆ»]bgÿq²ÊþãU'ªWãXÍàªÝ†VkܬvhÕ‹Õ ­ºÛðj] «^õb ëvYm°ZãÈj,kY5-²Ú¤Ysd•L_CËbe6ºÚ,,²ÚBGN5qk>NÆ–ÙŠ²¦áeCËÊ—”¿ët´æ6g³úþy2:ñ™‰_ÃtE.ºë×™Ú>f„[fEã&ž MÖ<¼ØYî;Þ1~¢sÜèpTÏÃ:¹‰¾¨“%sÚñÎqf¬²Ñaí£VZG–ZG¸ÑF¹µ /0ÓhÝLÃm†©—/Ù€Mä6ƒáZ`œÖÝ8#‹í‘¥³jN;çÃÉñ§àS çM&t›IÜ„6×2<ßF¨£Kcäþ'ë™°Èôg&h'V©@2…ɤL¦Z›¸mãÔÊ5[íäÖ1¶Ú9Þ2²Ò4´Ô4¸Ø@gl"Ç¢¯°•¸sU Ì–•ôöÎWjf¬í5a,é+‡¾½Œ¾ÀNôj~›ùköÓ—¸ž S à(9¾½Kåá²<0AÚ…Á´Ò3ƒ‰Íql°øÚ{œŒÞ1<:³2:½L²D¦ÈØ» ¹‰¯j¥þuydÊ¿ O-“L­ kfûªÿ¤–‡¦V‚²Á©•ì´èJ<›\àÖ/lbI·ðÄRx|ÑÍÂãdì'™~r‰•]&†¦Ž ž>12³ß"3«›]dÖFgWƒµ±ÙUO6·:fµqÇ*gœlNšH¯¾º.ŒÑ™ÈŒ2Ò)ybÌÝèûÅZ¤áaåÀÉÒ—Ò³4ŒS @(¼+`0›ÀÞÛRB( €Ol¦Ð)€ç‚öÙ$‘ @(P (‹(4œ:€Ù,h¸0Î ì%€PÀ§°Ü:³¨1`yì³="€P `€à‚iìØQ( @6) X<* !hH†œMuP ä‚°Ü& AÌÑ‹€0œ íu„P ¬™€ÅëàûıæsúÀkÖ¢±a( @Ž(`0c0BÐ> lØ /œ#íÕ„P ¬™ÏÀ)˜¿…^=¢\³v C(²^àéEzo’z£0œ€9ƒéepÖ7~T @(°– À>pg{ ƒx'3¼–íÚöóð¡#í¡$$P øQ€ý´›<ÈCü½?î'Àyp ± P k0lD¡‚öd1 k¥yhA½‘0CpUñºuÅU>Ú—ïŒ>¶••Y€ãlOö(£ÇdY)”¬ÔZíBŠÛM1{6Ô-÷€}à6V:i¯ ©?ŠF£ný ­K\nÁwL~¬+ •¸ëïÒ-¤¢¶Êë\È@g£þvÊc® vÖãæ2 $6 XLN0^Æà È>=`Óye=;ëÏ“þ8úV’Ió’¢öM/½à;&ŸVÚ =Êè1YüÃH!ɶ° @¨¶ëq/‚Ú®ÇÍ%+ ÒC €}מI°…öò$,-zL¤4lºY²³×ü.£ûéäR9VgZãD1ј4×M'¿#o-,kËHÀâˆéœÐÔå{Í®~¤àÅÆHíŠÈ’]4ZUTÂ×óã%—«ØzYÚº¢"Å~Ë1¹cD?ì­ÈÜ„Ñ$xf£ŠÆ`ߨKr)'N5¬Ûüf»úŒ»]Ën:[;©coç±UâÛM° ~£SYÛôQ±¬QN€ƒ’°É>+‰mç¾ü‘õâ²Ç²]à»\ïó<¼C“YT×* WÔ¶œ5í3ñ `Û¨Ü<"Ät˜‘jë:Òòr¨ˆ>Œ%Eøì‡Øæ:)G¾{ÃÐ…T—¶&áÚ¬W.M(Ùj˜MÔ)šVË8Û5›¬c€UÆ8gDñq«'ˆ{í‚Nã‰XÐEs/Ñ]3ìV`„ ýÒØæ{°ÓYÑ=‹gb$µ…=½8fìÔ¤º¯ x®ž?>ì*£~D§î<.êhZã¼%¤ð,Â¥ÖkÃ?c—JNlj‡;/Åô¦³9ƒm£¢òb¥þ×¹^_£ïr¬mC0ñ·k^É€ŽÜ‚e¯ù•f‰6Kѵ¶ƒ¥ÒÄÚD®¶wÔ;PV Æ,hÖÇ€}“ó€uÇȽßÔ"ÏñÌœƒ˜!h9YÚÑ ñN·Àüßh4U ?ÌKŸn‹XàèçÀ–‹ö¹]NÅ"Ÿ~ð]®<µ"{cðà8Õp½ž!eëå_Âíºv§^o6+ßêd0½Œ“°|à÷7 sô^Iø(Js ØŒÆiQD‡ÁH-ü%ƒ²Æ³]Z×CŽ6ÍIñXsµò­Á›û“*€-‘|o!hï·wìUÅ4¢+VÒ"}Ø¢óx锊`½x'€õùq.㸣lVR]ÆjB.UÕöÒý‚R°6QZ\­¸—cÊ¢žØ6ÔbåØnR›Èß3{–yìÆËÖÀrÚ ï÷xhÌ·a+X‡Á?rö컬k´¶£à2"èì¾]ofÊ|cÌì}ØŒLZñ`ŠîœL*R“°øÁ´2XÕZt°ÑôIX–¨†Ö0xã°Ü noE16á¼³Jd4Û^ÂtÜj¨¥Ï¯Í—²ÿ˜Û•×"–sDæÕ›~L~ë§X,ÆÇ›Î–ÙvŠ­å³Àƒ4ÌžŸH†´K¸…O¿òîgKËrñ˲¥j高µÿ“ÃOÂò=¤lcð] Þépû+¹ @F M/Ñã›À‚Á°ó'aIËГ°‚h%î$ƒ¨rex<Ìl)ƒE(7WMpNvã4†Ô«‘lµMc·>µC¶5P@xÀ ÀÄ`ØcϬ'³OÂjœÏ!¯A»Ã&¡€¯€‚žoâQhØ})‹å6$¢/\ðg€P $P@°ŒBÃöÁ`à…•–¡E…æ'€P ÄQ€Ï,51ŸMìÀó0Î5( ðªì·1߆Øk»C:( @Á+ àÖ¡E2º‰l|6ñƒ8 ¾ùA( @á* Ü24O&Þ%´$ËIXpážIØs( @’ À>p3ÍÝ_iã3ð€“lŒH ($ă8„, °$«'aÀ…tö`_¡€)( <ûÀ®™Å¸ ix±Å0Œ§Ð,‘ @(ÿ è!hæÃöCb8ÿOì!€P X8€—[†iÞ.BÐ~Ð+òH·ŽÀ¶}¢4( @Þ*`Ø`0Æ€}pÎÛ3; H“:€éyX˜„僾X9ÁNS“E±P @üP€<>»Ì©A0ž'ƒìƒÁÌžYXiYjYlfçÇ‚½€P ¤I`NapÊ&5Gà4µX  È”LÈ€} ×œ„%<`¦#œ'gv @(F€gXöM_9l„ —‚NcƒEÑP @|Q@ AÃö`} Η“û H§V3?cÀ>8,|¼-BÃé4‹Y“°ªŠ×­+®Jg;@ÙNÒªzŠ…§˜=“‡Û¬jU:“a[¬€°š½ à ¯#\2?E%¼ºvRÞ{.ï) ¸Ñ›»^Rä8š.ô«8*6UY.7À+âý2K¯›³eþàÆÑ$–Œº°q²¢væÁ¡€tƒÉ`ÿn,·G–„y°êp©— ÉÞÞå¨y§ôÐ8ò;‰Mò’"y äBàt8j!pÌk¯˜ÇÀÈ®×-~+JëáŒ×ðܪj« ÚmZ ÏV€92…À)xt¹,²ÔFžKü:BK`YôAFOÄûRÃ+RÝóØ,^’%óÔÌLÚ7Ž^H1sùØW3©*P[%×YËËÖ6ì³^îa}¶Ë¦Â1l—Çö=–àFñv«­˜å×n"~ÝìGŸ‰dúûEÅÚÞ› ¯¨ˆ·Ÿ¢¹=3*£5+­!‰Ä¢mYZ«ž\lX¶¹ur²Ë]Ö²Óïf•Kœ1ªçóø#X{LJÀ©˜G–“°è¦TohøÃÌ3s¬” ‡u\²“”œ‰ ÖÛª*[ŠåÉÞÑLoD\5@䣃¢¤³œ…V›€Ð/{\‘îÑš ŒÃã5€¾ S¬´ƒ»mÂ`ÿè ÀÒY±9@®1Rà MÀÙ£ÉNÍèÈTK1½îèˆÕø‘ ˾wüŒžæµ™Þ¡6 N#¥9n ë©ÜH‹/m=R6 ê ´ L(wT ­UØœts­ÇZÑv åz¸õ…øûåÒÞ„Ÿmm«Nmµrm·ì,XW\b‰ ¹·ð45 Ò¬€`Š›’ÀþÌÇ€¥MÌßüÀ7“`€K_oôeü'êˆbŒk]žGë~†È¢\W¤¹®Iñ¿Kô1¤wzÀ2§åYʳ1OÒQ‡“5EBJÙë»n6¾¦`›NNx;/&lW›¥êJQ¯œ¨!â÷¼T@¸#², ^1C£.’=•¥çÒ))ü]K2êÛ„caôõö´ÞýË‹µ²5ÏétçÍiÀ];sÿ̾Ì<k^jl_‹á+Æh‚ÛOc6C¾Ö±3×Á²ë£¹fJ!h=:®{Òv&Ø/ÉTÕðœmRí©VU¥¡3» i!ˆíºÄÕyÓ*±#…¥€ àQØyeypÇèJr°áÕx(Þ¬Ó©äïjL4Sá~±êêÅ*öÕ š“°”‹¦r²©-"³Y˜Qœ~ôâ.æÚ¹£ïŸ=ë® HºHáß–Æâߺ)ƒÀEÆAÔ¯‰ÄQuN²NÂcˆZ§Ý̦ÕÜvô…“j´}‡dp‚M_£ªëh…Öå<»x¼kŒ]ËtŽÀ)µKd†P ä½ ÀóÇ»'Žw;àû€/ËÂBГ<ŸøIXyß¼°ƒP @(Ká÷p ƒì€)”Ï£ùd0Î:( ˆ£€°¢/샾šLaÃ`œxP @(À"m<` 6=`ç€P xQ€<àèüñÞÉ…û0]Å(GçO$|’—#„4P @(— (+À)XEóà¼Ì¼t¢or•1˜§G‚Îïs{ HI `¢/·¾Ép Ž®öƒùˆ:BÐ)5Ld†P ä» À„^Á`8%÷1Àù~Þ`ÿ €)+À¼ÀBÐÊ`ÿGWÉz£ ÀS˜rëDP @ˆ#Ys8šlI‘go–åô–8Vw“°_Ë×&¯uщÄ7ºöt8êàFrGÄ­n¶ö”É#¯ò1dÔ«—ܾÛvÌÀ l&>¶åWðô‰iÓs€3`÷(°é³rÄò®¤XÆ›uuÇÍp›tOWw¤b¹ºC ](ïþ—ßæ–Mùb‹oê »ö6%9lßÍÇš=1?Š–k(—#büî̬²Çº8°µ"¦¼ÙlŠŠµ½%°¿EE «gaðüÒ‰©Uaä { A»y±¬—TO¶¤»5FàÙ ŠÊ.ÌÌå/‚Ö(’’{g‚{©mØ„󚆥”€ä¡ ‡’ú³'v lÎÑœ%s±Ýë&; Ñj` ª+‰gYö?î~¹6H‹,ÖªÚJ™õkó"ÆÐZìD‚ê¹))/†d9Án+÷:jœÅ Hر°ÛL:Îxv™¥SPô™¶5ªŸÒ\ÓˆfçĪéRp¿Ç†ç,n¬ÁVÍÓ4]+µyí¢Ç b;•´(/¼Oë¨íÐ8·¥€ë1r­›àeüV À±š–뜭u™[Œ½§qjå$±tÙ×—X§,¸¦ŒÕÈU%uMRÜV°­¥¶°ܺOÂ"xpz•‚  ö`9‘Jo‚þ¬'q¸°ϦÖ.â»ô\>Á;€Åwƒ7ñ óÚàdÍÀîÇ(vÝ‚°mëñ¯ãì©.£íâ2U(:ÔOì Øû`&p(ƒìɆlÐ×#€¹×d›„å‚V= ³Ÿ2½1#‘«_åd¼æÆy›ÍlÃ[ûÒÜÄCµàpR¿ÀáIøÐ@‘„²RpÆì‰ML釟oÙ5í>ãŽÕMÍ5ózAEÊ=Ž×´bŒUëW{R& UmOµª* 啖ݼÖªÛ®KÜQmÊÝÊ |[kßvQƒ|QöÛØ°Êôæ‹L¿Eˆµ+s•9 Kº_1{IëÄ,Ÿ“°’¹ &/N€â[=>1ª'•¿›sš´ÁFã`Úoôr$VþsQ‘1ÁN»„R÷Œ)–«V¢×Ž!jÖ€´ßl­ÈÚÔôbsžôÚº¶1}뮰ѵù‚Ž ½ª¶p·Ê®&Né¼âWÏTR&㬱)¦U[ m²—1:à öyÑö±Y¡0€ ½Â¼„ ÓÒì“kÓ²‘B*4­‚¦XxŠÙ3y½UÕKö\Eoå;CAž7€„P pÀ3‹'†fV‡¦¥!íÉ2­‡ò3 `ÓÃòxpàM) ,)Jã8yŠ…§˜=“ÍSUý˜¢ÐI¦¶•Iݰ­0̼°ÌÆÒ…ˆd³KÞ^ÆPÈ­û (`€GfV…Àþ¬è ð9…]‡P xR€<»xbdvU {j:H €©(ûÀ­ûƒ8(m^È J«D^( @( ™]UØ’å°0åc ¸Nì"€PÀ¿À£³«Êà”Ìús˜„å¿Y"'€P ÿðÜjdnu”ìÀz$Îÿ³{ HA‚ô€}ÐWÞLcÀc*9BÐ)´Id…P „ÀÇ#3æ00<` –cÀð€ â¤ÁNB(‚P€xáxd–†¹!í¿âIXäÓ@ºb0BÐA´O” È[8€W"3Ç€Çà¬&³Ày{Ò`Ç €A( xlö…_Ý€ƒh–( @PÀgY0Ùî¿ÿþøG‘=ŠraedzetöøyÀ³'0ì£u°ôâ2»~‘†Û²¾÷x Ÿ¬Q€N¹¬o/¨ ‹tàÂøÄP€N/o^fžá ž€}ð—[<·:¿Œ—1duŸ%N|Ö\ê¾à¬>UbWN8G+Ÿîj{ðìÂrdz9Bž€ýÐWÞ†DŸ[U§»}§X¾8=|pd‹¡@²î8Å–¼†Ùà8â'àéer‚Çf#í£s•0¼†}A²›€}4ô„YM=~Ä!€“mºÙ“À#ÓKäN€W`½‡ž Ξ>ÁkM` =a–¤h {m¬ÙšÀà¥Ñ™å±8aã’@xb~UÙÆ€³µ×õ€ý´ôDyàìnõ×. W¯[W\ðöÓV\µM& 'êYâþ€ƒ8êik’ùV0œR“=ì}F<à\?©b˜º²ú•Ð~Þ¹é²Í)¼—…ŠJRÜ\ŠÙµKüø‡˜ßL“°–F¥¼Œ´~Ixr~•L8Á^<à4·QËI ΆºMwßd¸ýÑõëm·vZ§úû–ôüË£›C¡Í¯È^Ù,–Í"Tô“­TµFÏ.Ò¨5>äšeœîv›UåǰDZiÖ}ç å«XÙëÖi_Rvµƒ¨­w˜Ñ—ÛØ ì§ïb^Z9]xCÙÂJâÛ̘ µ¥´´QÕ¨¦vÝCâ-}do¥1ÃÓæ›Þ×™AGË8 üb’Z²‹µC{ïVô¥8›Du #ó8ŒÙÖlóõ±µ9¯3±U¯“°bE¤y€YñW›{¥fS¿j3¬dzc &aáIX™hëiÛFjæWÿŽIXò^a娂ÆÖ}Ñ}ZË€®ÌÎøm|˜¿¡¾³y/Îy¯ÆÏòW៨93éðÊ8M¿2 öà©…Ue‹IÍ‚vÆ=\ÚŸÃaõÖFÝÆq5·Woß–¦f´Û”C1i;ýS*Ø`ó,Õi¬tÜ£ä˜B¥OÛR¸uÞ†¤ÝÛd·!áQ”)5ãµÍÀk[­ìغGx~qebvYœ9¯Y;Ñç1Ý`Ív$… ãA>zÂ,¸ )…&™{Yà8Ç NØ]•@Ž“û;½ÈljqÕ‹¼V'œ6Ë9 O¨Y«½Jr»pP­_/N²ævrNG7’l™À‚¾Â²À¹}ÒT{8ÙVî%=˜„õþÁp@ÍymŠ€ðÒÊä AOrCÚK?cK¯ÍùŸÊV` =aj²Ÿ¤œæTŽ8ò® €ƒà„Œ3ø©ö Àɾ=éÓ¤Qi?ÞØ@€ƒ09ÁÂ`Ÿ^^91³ô†²%³ ÓpF H¯ ø8ÌÈ’>¼6¤Ë&¨=xn(À” ЏèmH K+ÑyÓ`Œô€gߘæF³±0œMê @ð $;ÜP€é˜nCšœ[‰Î±¿…€}xqù½…prá a^žü ¡€P Gï/"ûðÌâ‰ÎñUeôbàÍ|3Gšª  €™V€<:½Ø80+¬i`ö àèü‰šÁUiC«‘Y8Ó­ÛƒP äàþ‰…#S‡Û£Â`Ÿžœ?Q=¸*¬jpudΡU…P dZàñ…CíS‡Ú¢ÂàTLô€3ݱ=( @®) Ü6uö^# ›-<`A_8×NÔ @(i€ †ìÄÀоp¦2¶ È5Àa A·Qš9ÁdpÀp® ¨/€P ³ €}PWË¢yÀ«UÜ0 +³-[ƒP ä˜ ÀÄ`axÀ>XlØ /x³ sì\@u¡€UÀ˜=-L§ àÊU28£ ƒP ã øè+s(KÂ'9§®7H{0=`A_8õ¦™î ðÑðØåt+Ph¯uoCÊËx]iº{!#=}¨]:Áð€} YXÑNwÃM½|q‚á‚R _lœÇ¯#Ì0€¶À>È+³À©1Ó%ˆÌÿ1GN(`UÎô9œÎíeÀ4ú;}cÀ~»8§BzÊ€ý¶väsWNÏ™º6¥f ÀüQ”Âý¥¿ÓAûè_ì®À$¬µ9k’Ø*죡#Kà$N¿¬Oºf €}t2}à¬?¿¢°†Ž,°~jc 8ÅŽ³ éRL úÀ)¶Ë dwð+›Cê³ùÑ8Ú]¯Ö­´Ý\e$ 5,ŸüM/B® ¤‘¡,W°Ëi[U¼Î<£BE%8³ƒÙDÆ<`ö(ÊvÌ‚Néä–VôMÀ%Efûô×<-MÜ[”e]qU0 5WKq˜ƒÖ„ê+›Ù2[ibÔà,­]¿yózãö•>ΔF#sJí ™sIØÀª«É©n'“>HcÀœÁdAû8çÝ<ø}À&2KмáÓÖÌõfM8÷BÖœ:ÒDx€EBµÑÔºR¤â_120ä>ªrÀ>Π|È'0õNÔÃñΧ˜ù¼»3ýã«èÁØzÑÒ[0š „óâ¥ËKºÉ<€ƒ`}Àý«Ãì´È¢"Ç)*‘¿Y@m¡©hãîÍÚhôö–œtÛÌ‹ v3W×Ṻ@™óU®×–Í”fhçRîf€… 9)-n *Ìò%Ùƒ1êÒ‡õe%E”Ïä1}§ÕFG'úº4 xML €}ô€ûW+¸y°q‰§·[G‹d-·/ö‹± 78­ýi] Ñ|íô4ÙÜâ² €ÀL`>ô+ÂÖî)`gS®f€=… õÎǶ, Ìz7FYáúJXŒÕ®‡uhY#Õ À9t6èëÀÎ 7g‹Tkœ ¢­émQgôqá9Ç`vPí5çÊq„ Ñf9 3ÍÂÕÊov°kL;‡Z5ªšœp ·5€9p¹×+Øk™30œ~"cî_<Ô>#†á'wÊ©€'æN”÷¯*ò‚v°õ`È㢘† Mn18åIXÖñbE[1wKg³¿6…\¹¦œx X“ÍÎÇ‚fEÑ:™„é#×üŸŠ8›cĽu_Ùm9Qo•1Ó,èì1XÒ‚öqÞû°e4„Å˜ÅØ†uPÄ‹l§iìBL§Ùׄ¯D­6‡~w½ I¿ãHë+M¸Ú¢Ë ÀZjL†öq.ån8Ѱuš•=€§z$m*©¹hÞ."{;gäOm^0Ö&sé»wTp‰<¼l‹kà³ûÓæXsÌÖéÖèÅ€rš¦&nÛY‘âÈ¡,'ª gʼnP%2 àƒí3 †ìãd7Ç€“ AÔTPŒ` Yâ(û9³5O¼¨è ûëaàl=b× ö×Ö‘+–pîõ‰ú‡tï00<àT:ËmH ö2 +ÝGåÇQN¥Å#¯S8Ÿ:œ {Àp*]Šö,hc"4œåg#œJ‹G^˜Np.;²üL÷W½Œ¸bñPÇ,œJ—"\5°Z)^ÆØ_«Ï`.:Á¨ïÀ ¨u"lÂk¿)8ÅcÀÞ†dX¢1 ˉ€£ó'ªW%ƒàfú³û8ÌÈ*þ–›E[ 5èB6_?÷ߺµVN0œðürM \C”N0BÐén»( @µU€•ߟtË û#®-—à¡Uå{ytº.ʇP @¬U€xépç<àTH,\;´ªœàá™Ä¯#ÌÚfŠA( @ºÐL &ðs/œ¨# 'xpNwÛEùP @œV@X8Á°úRà)ðð*s‚9ƒGàçô™ÊC(Ò¬ì¸.cÀÀä‹@4œæ¦‹â¡€¹­ðäÒ‘®yxÀ©XzÀõ`ƒÁxÀ¹}j öP @ô* ˜L†1`$6,LNpd“°ÒÛvQ:€P § L.í^N0샾æ0ÑW¢àœ>1Py( @º€ý×} Øð0œî¦‹ò¡€¹­œ‰áçö™ÚC(Ò¬€°ˆB“a Ø’-cÀ€ÓÜtS->c°-´ô§z` Œ ÀQ6 ûà®ÊâàQLÂÊî³H¼n,ÝŸ|GlvvÔ d‘p*Ü€³¨)'[•̼Nö¸ =(Dú÷€…!íÉð€ssÆP ¿ F`̵d€sï´€sÆP ¿.íY$'øXÏ"<`(€sï´€sÆP ¿Pf €ýáW½ŒAÝL …4 «ªx](TT’Ü©QR ­+®J.S€©àÅDQP øP@¸¬wI˜ cÀ>(œ‚Ì8d|’e;à~ÖϺ¢¢ué@mÊ­XV?5FißÓQOoçw·?º>ÚüJÜvÁÓˆÏúGÛͤ˜„åíh (DtƒÉàÌØæ9–ùão¸1èd£vßD*õÏîÔ÷Ë+€_ÙLH}t}b»¦€S?R( ä« À €}Ð×åYÐCб=JáKq3ì‘K+¾K×Ô:ÅrœŒ¦Ûlx æµQ#<,Kvæá'…Æ_{ —¦¿/v!— ±N]o&ü2°ÀùÚb¿ À*û#n‚gA{°[è–!JÁ‰-1ŒqLªASWŸÓÀî)¿Ap™Ëm£*8¬Jv£¥¹Nóf¹+ïÜŠ›¿«¥ÊðiàÀ¿Þ¬Æô4<à Vl äà¡èJyŸ†ìÇ>Ç€]†TmN¯`a\Z|IÓvËh5Ö6!Ç”klиV_áÝjh·ŒL[ËT%¬ ìÀæÀ.íK‚ ´ÙrtwΡÞU…V@0E¡É0ìƒÁ>ì2)3¶M}гÑDàwÔÀ°“¬®¬ÍnX5…D!h>P,ç^)·™å€3Ü£asP ‡PN0샾þÇ€¹/jŽç‘[G:X˜Ç²­£È®qo™D…Ày0Ü1ú¬âáUÅErÔXÖ¹—ükçG½xÀ¼5PåìfÕ8ÄœgËtgm´î*À9Ô¢ªP à ÀþˆÌ°ŒøÚnCŠ5*¨´m«Šî²wùý¦&áÞZýgE`s‚•L Çºí[QÌ|ÞÁ”úyâÀ)µ8õ#… @¾*§Ô½™}† ó£U¹:Æžv-•;˜ÌÆ€àà›g:K€Ó©.ʆP ± ÀSìAÊà”¬œ`xÀ‰[ßš¦ Óå |¨=­éŽbãP d©°Ü:³˜0œ¥-ÝQ­@¼ÇBrEÔ @L*{ìBã'€3Ùh±-( @>(`r‚É‚·óû H›0œ¶Æ…‚¡€P ¶ÀÇ+Âæ<,LÂòdK0Î8( H¨€01X`À‘ÙÕÍ|3á@( (Ltã>`èY¸<ÏÄ¡ .Ì3 {  ð¨€Í&'° €=6<$ƒP º°ÜƸ˜<`¸ÐO(ì?€PÀ«pÐ6Œ´×6ˆtP @‚T€<<}¼²_BÐþx¬… à‚<‘°ÓP @d`ž:^û¯‘Ë `bðÐ*<àdÛb†ÓÓ³ óãƒgMg¸å`sP („¬L®0&aù`1TƒÌ\9âmH¹þ¡—IÀ™k4ØTØnãNÂâî/<à@[iZ ËÌë“j^ɾš‰®à´4 2¢€põÀ åÃNªÏ´Ü\kÐÎHëMi#Ù `ïOÔN© 3XSÀ#Ó'jWƒÉ`ï} J)CÐðš6æä6žµö¸°G¡ d­ÂÀYÛ\ƒ¬¤š( @ä€}à6æ0yÀÊ ö9 ºªxݺ⪤dü,%E!þ)*IªPω}TØsÙiM§U^ @BXzæDõ ŒBÃöÇc3­ìÀ %$}ð,^*=žÛŠòR™8i¼dOØBÓ–Àpû£ëC¡õ¶ËcO_Í/þÚƒÏ\I è"¶¦‚¡@†®ZU FÚGïi0aØ €‰PºkZRTTâZñ˜”ë[°^¿y³¢.œ¡Î›…®€01˜F‚ÉàÌØ%ÜÌX,ÃÆ<9¨ùG¹³¦ã\TlÃÖéþ®æ\Ój³67¤§]ÌV5©ÍÒä6µ¢ÖJ»ìŸ{˜\ÞW6‡6¿Â޽0÷Œù‡{Äì«HA#µ3ÍúGÝLYTÊ$š“Í–·þSªÁ^ã„ÍC”€“èc'õé¯sº§ºS,ãÇôÏ`¤$KdbS¬´®“ Ã*ƒ±È"Ú¼o‘!€×e1fiö,Tˆª¯eë¶]H¹å¦\€À ªÀ È&’ÍUrÉ‘†óØ{yÛr† m ÖwN¹  (°Æ è¦(4<`Hö `çø¬Ž@“¬z?ìSKçÒm–•*ÍV,±Ø5pÓVóÂøEA‰æºë›PÕT>°ÝNï„°¤N&'€¥ï+lº¶¢Îœªp_Ù¬|býÐl~%µðµë°Ú€mïà¤7C,TÀâSz!hü}Ã'€]fH¹ØÆi7L]F{3`v`ÔÒ¹QWدõÙà`îën~Ô°ËT,öû+Äañ“·i0éD vª¯u Âö¡@ª À~xëÈãÀ¶0°}–ä–ï5#ËŽ4ýÚ=êø!h—ùÑ–2Ì`µ>ôÌ–Íd’¼bM›Qqç.¤ÚpSÏï `îäŠ1_¶à &3Ó„-9eÚ‘&=vÝY8õ6€ ÀÚ*¯%€Å¨«Ĥ(²Ó¶%ruÍIXŒ‹VÛ#ÏZ8–WªWÈ%€lº ^lzO¦f|©5b8XÎs»¶ ?`Ž`åàªc£¼aËT,13ËøˆÀu ·0á6¤µnØ>ȨÀt× ›´_K˜÷{¼ )£‡Ú÷Ʋ2€ì{oTF<ˆ#u Q€©(ûe®%Ÿ `Å`/÷§rä2—¤x(pæZ5¶²@`åc´‡žÒž$¯œÍ4UÈN˜jåýƒ·!¥£a L(1`¸uf€3ÖbÛP˜€šì')§90íP€A( X8Áð€} Ù`1–ž?!è ÚY–A&zåÁ‡ÚkÊ‹*A(P€‰Á0œ°ÙäC‡9k³äÃñÀ>@ÂS¤S…\x§ö @(šp ¦×Y·s!ZËDn( @ž+ÀyÞı{P @ìTÀüŽ˜„•͵‚P d0œ=­5P p`žœ§·9r÷—Æ€ è4®B(’W€™9Q§=÷!ù@2›=9N¾"€P @€}àÖýIX“s ÀŠÁ‘™ÕÍ|³@›v @() ¬œ`xÀ>Ì<à‰¹•Ê~Ó €µ=ü (h`¸u÷€Çg—Ëû–• ô‰…‡P $R@°p‚áû@2ó€Ç¦—J{«ØT,28QÛÃïP @‚VÀ`b0ìÀ£Ó‹G:çÊz—ƒG0\Ðgv @(@ØnÝCУS‹Û¦vÍ À8ù €P ŽÀëäû ƒìÉ,MÞ×Ö½P^€³üÄóòÞ{¼é/Ë"ªrZØnÝ=àÈÔâžÆñý-Ñó4<2s·!eó¹A¾?îïºÏæÃ‡ºARª,ñózLfÑ\kè¶«qz¯¿^Bœ\þ ĹÒ©€Àäc Ø‘å°09ÁÄàÉ¥„.2{ñ’¢¢’ä.üÑ¡¤vbø0S¾¨H¹½™<Þ·å=¥’Ñ#Y=&s=:Þkå=%œÚ‰€Ük¨ì‡·Ž<À{š&ƒ÷6M„Ç=XPWïM‡Øîó.©¸ˆP.óG2p' !‹²mc [[VmÚ7€JÔÕ“ø®c‰ Ee Ž0[aYŒv8-ÑlëzË7¯ÍC•«†r½½Eñ–Æ>Öö“(Y¬=ÇÞ†U3±±m¯ÄÕ©õŒv•Pºlû”gcYub¡2I( `Á`r‚Ãã L½¯½‡s½ð§tsÍÞÐÕQ0P] ÛìrJø°¡»"°\!§.}KŠlý¼LÂ~‘ÇÄ<²ò‘WƱ“ë}4s×cÔÐÙ8ÈT…ì´²€Ü–LíXŒA\Kýͦi\’hÕ¹§±ÔKè›"›ã<@p”@Ò´)àéÅ½Í“Ò nï›O`yX‡!h›7àôD¢¯W6»~ÓUK[+ÊÉ‚}ØTÛÖ$2‘’A˜)Ô15>~_ÂÄ`ŠÞt1ëmÇZ/6VóÐÊWöº8Îw‚+?U'‡óìÚV•gL'€³%‹, Ô³†ôšÇÒÇ~N6\T:®ç£¿Â0 Ú’yÚ àÞQÏfíÉèŠ-î…Ñ—¸`Uã.ìë„ô`2”ièÏ+'´õ8òÚòã­ù‹r´XZc½æaÅ“{ mWr® TåÄpüàn¬’][²òUµ_ÝÔ3bj_lí×. ù:m)P`¸1 zzIxÀÂz=xÀÒCÒ=um®õl>ʨ; ÒE½‰KJ8À1N_¶ºNB[ H43ËèÿYZŽajüµÌVC‘UÅ<©ÍCd×Xöõ>š‡¾ûT`œºîr;P¼d‰<,nºkÚ%vžfãw‹"{Óp AaþPVN0<`HðÒ¾æ¨b°;ƒkÂ7®•!¦e1åÖÒy™“øEÎ-Q)Í@ ®ôÝO?¶Nàu°v±c]´Y½,u¨mPqYï£yhûïVC«gÉÚž6ÅÛõ~\Y×dzˆÀé Û4k“ÒÄ,)£pûYà¢žåøÆÓÇÊößo"'DØnczÀ`Á`²¾±Ä“°9„.…8P® år¹`zÔFüOE‰ÈD*ꥢòf:€É &ƒìɦ gMÛNP‡9M»cþMÓVòµX¨—¯G¶Ðö öØÇOf°`ðZzÀ…ÖŠ±¿P @TÀû[¦Dš¬ÏÃ}À9Ø`Pe( F¦%¡( HJNªÁ 1€P £(€[§UÚË£(ƒ9†( @(rPÎÁf‹*C(r_80Í,h›ÙÏ`2xÀ¹v` €iT€ÓؼP4€P ÄRÀÛg™Ì`xÀ8ë €P ŽpÀ–QèÖéðø¢××¢…B( @á) àCsÊ € ïlÂC(’P€“h.H  €A)`ŠB“Áª¢( @^* `…& O,a 8/Ïì€P ààL &ë€i¡( @(§ Àpž6mì€P »€ðøÌòáÎyáþÂÎîfÚA(Ö^8mž\ÆðÚ7ðØ5xÌÇG6ïê @N+ `å÷ÀÙ}fïû ‡ÃpvCÔ ä¶pN¸ªxݺâªÜnrÙR{à8‡ß€qDœÇšäº¹^ÿléc×À³+Gº’ò€CÖOb¶Æ:1h½VTQIâ/S˜“Èä¹ô¬NèÀ¹b©wUÎc§ÊÔÌã›Ìvƒ:¾^vÓYmÇ_S ñ) ÊôR÷­[åæªzݨÇÝI©zÆÞQµ´3²¤ˆ×2Îég|hå#‹wqRSÀÄ`2¯!è¤Úº—30©Sï,rötò `ÕÓQ§§Oô.‹~¼lÇÎib»þÊ÷žËGJŸÖ÷§¤Èãu`²<ÃnzŠÕcÙ‹ŠT°‹}¥O2ÝÇáÓ³¤Xÿ·^HÙà€,œ`²cÀÖ¶îtÌ5zw//‰¦ªB?>’á5ñs—§)¦KiýÒÚ`V®ø°2lþ“Y‚‘ —O•TåBÊ»yq±Ä´v¥Îc'×hG^ë£úveO-‡LoG˜¥ù=¾¢x À^[ÞÒ´vbiÇz»1Ú«¹Ž%5öBâÙš;Þ7ÞÎI¯¸šØš½õÔpJ—úÈÊêײʴJ¶Š Ä“ÿTb 71ŠMý]Ž‚ytÜvÜÑœg·Ñ µ=Oî"/—ûµ­;œ]6[ƒè—´sŸyêLsBÔ Q:.•Í¢lÙlÑ<½£¡ŸXg-úAù??eϘ¬¶¶ÍÜmë)˜‰áêK 8Å4˜b!¢~•cDCõn]L-‹e»ò‹8V<©ó¸˜yS8¾fËÝ,4²%Ó(kÛ}QwÛe¡JîzXq”ìE'€í—¥¼Åت¡¯‘-Ê<ØEôa'KI‘hö3ŵž1Ä”iWx&bÝ 7ŽÑôÆ`\¶ç1Ï÷"üÙwžgwà,°ý"TôNZßíê|ê瘵”\ö2€äƒB¹èº]·’Ýí;Ní|X]èØÐh;pñ(k¥SUW»n7.ª]¼4ýÚÌ¶ÝøÇW€(×ÁQs뙈6؇ÈÒÒ% JXÏ}ëºìÊéugü6Nc¶Ÿƒ&xÞ:ç-Q—ŸâŠYüÕÏÉšqÏ&#»¹Û6; ×Op[«°h#f;"ùuvçJ·`ŠB“ù A«‹w{gœ‰ü$¡Ø”Ý“µô†Æ…³Š"9{O½y:;qg ǧŽóÀŹš±õ ®Ç.!BlÇ4ÖA´±j ìiÓ_²ñNÃpRûë¼VpzÀ–kM-$k,ºÕG^‡°z²dœ½b;ÎE•:úñ¯TPãI ±± wjb?ñÅiœèúÉõê*W€–kõ€³ Àúp ?åŠäÜ ƒ½®Fýœ!&m¤ƒk7d9Ù´óSà!hÛ¥w®5w½¾>=`H7‹cŠi×,αSe8ëãÉ_ç5œk•tZX.Y´ð¦óúCZÛТæ'ÛÎ1¡A¶MGɱ8çº' CiËu¾4Õ͘ E‹ôQó-äD9Yxìz:ÿpû°µE:ˆ9zaÙñ\>dz¿îp6X‡Ñ©.çÝÈ29à¤[#2@( H. æŽ]…P d0œ=­5P 0\@Í»  È`8{Z#j ( `¸€š;v @(= Àpö´FÔ @(P@ ÀAøXÏ’x nC* Ó»  H^8`+ÀÉ·Fä€P 0\@Í»  È`8{ZcFkò˜‡5ŽŒÖ ƒP €ƒ0E¡É‚Îòóˆø{ÜO8€³ü ¢zP §€àœnÀþ+/'¿GS9þ+‘§9¡I:¤Ì@ ÉÓf»»§ ÀS+›øæRlÒ›þ¬Ç­ÅvhMŠŽ²k™¢dµ+±Ò$ÜW•1aÊø vܶÚ&¥‰sïR¬LÂìÉn1YõRo¢è‡/¨2“:4Éî8Ò'¥ 'Õ`ò'±o«#“z·(J…1±¬úÊXi¼•×Kâ8iâwÜÎÚzÜœØeýN£Ö ë èÁ^/jë%ûö€=‚ÙVsá+Ò+Ú¢ÖÎðø:7äê[Ç'´íÂËÕ·Îî35ŸkàñÙE_8ûOš`,º9õQݱT¿Ú¸¢g´uß6·&ŠbyÀúFõJ*بMøèÜt4rE‹÷Ýw¡^Oµ#ñ÷"–&ñAëz(m;å<¶2½(À¶jè°)é6Î8«º&8`+'pV5tge¨'¢GmÄÿØ# q®Tkœ!V=h,òŠ­>®ÕæDúXÛÕ·îZÃøupþªêfÛ¢³±vÄV[§> w_w+uô-êJÆÚ §8ú¦m¥Ù~ÒËtÖ'a9®…{WÛ¶×6ñ¶+gKs¶±,?C ¡z°Þ,}/‡.½z“ð€à\9m<ì\Ù<«g¶9jÙVŸ<;Ü»;°Ç~8~2À.Øs ; HJ8x“L†tR ‰¡€…¦<€YÐÇñ,èB;°¿P @ï × ¯Övvýêiç|8,N!®!hØ{;DJ( @Á)r•Ü™ƒ†P ¤¨$€v/bVŠ-Ù¡€¢€°ŠB#íÉÒ€ ä´ÁnB(RWö[g8õ¦ˆ €…¥$€)þ¬œ`܆TXgö @(¤:€) M†´$›“°à$[ ’C( TØnc† Å ,b0<à=¥°ÛP @o À°·–‚TP @(¨pð–OŠ®àIX¶U È+`8¯4v @(+ Àið<à\9 PO( À(ÀkÐì°I( €`œP @(° Àð4»lØäc>Ô8²¡ª¨€y©€ð{ÄáÆ®oCÂpVŸ2Äßûã~Âá0œÕ‡•ƒ9®ìºzÆìpUñºuÅU9Þ"3V}à8‡?»¼Vw­¶›±v€ AµS^sS ŧÇN0N2%ˆ†è1±k2¾7â#÷ÉciÞ·ÐÙâÀÚÞѕĮŠ÷½ö¸ãIè["çV⬠ª½éµõ¾›ÞSúV¡@š0lD¡ñ,hHfðÄÜñÒÞå¤ßÌú‘¢¢ø®«Ç¾&¨ÑÿæJŠÌK‰’"(¥%•2ˆ³Â'€Õ¥‡qL{ßk;žT¾õñ`Ux:ªä½Lï)}«ŒP Í XL ÂË|ð÷ ÿ!hјàÒ»¹lº]¬ó7¿¿î– lð5×2pÁû«ke¹¸²_âX\p[œ9©cêÜ5­&²˜°¬5qr×~ÄU‹ÐgÏ˦žU­Å{»BJ(à]x-ìý8zJªS„LÚˆÿY³'a¥aSW,f ÙVÛl«O¥Gѹ­<€½‡ s»íd²öièR=øL­4ìow$Ûj›mõI£ô(:· Ìœ¨åw Ã8<öÌöGQªYЀo~à›¹Ý:P{( H› ÀŠÁ°—3°ø$,8mÍC(r_ØnYä£(àÜ?#°P @ )ÀjjØ €P è è¦(4BÐ>,=àò¾å#3 @(â(ûÀmÌ4Œ“ @(<*À› ’A( @ ÀX8ÁdAÙNQ€P ï€Óà!܆”wg v @( pð&'˜ °™¢(( @þ)Àùת±GP @PN €i p4T @(°v Ài0BÐkפ±e( @n(À¹ÑRQK( @ž)ÀyÖ¤½î½83Ÿ5{©°W% @µQ À“sÇ+ÂÇÅh„ ×¦9'³U¢ïýéÿ„Ãa8™Ã‚´P €€àjîú® røãhóÂnC ÀôÀìe äWöŸPN0fA{h~k™^Kõ±m(¢Qàþ$¼ É7ŒàÜ;™àÜ;f¨1È/`ßÐÕ3šVN0<à,?Sà,?@¨È{àà<¼rà„0Y0®*^·®¸*a3ô˜,a9Ù’€ö'**I®:%E¡±d©prò"5€A+ ¬¢Ðgׯžv·ÁRáÂ=`À‚ÁžÌA#>îèðHV×d ¦1i›QûRTäéº!FX‰ÉÒWE öŒ`O~e³Ü§õÆoÍí®7ö~ý£ífZL ¦•¡( À\%ø°†‹’"Wäø°Î¢…Û =V5ñF“¡¨½´$ØíÀ„ßͯðBK®:Z X&µþ'>àH U8hó(4Ùðô‰Í|3~»*²9zŒaä,'aUôËa`–ôP d€1B¨ì7Ž-[LU€Uóô˜{«™³®ç1øjlY£µÜ¢cÛ&,íÎÀbwÔ謬›ssfIf1¶}Ô/)d"7×õÂÃíIÀ,íêßšME A[|exÀþ;'ä„ù®ì·Î,V“<àÉ–­K R`ÕÄ-‡U‰±Fs9ÔTÃ[UmÌv/Üê*ê…‹ª¸®‰µ ±î0ŸA¦~Rž±áˆ›»q¦iÅ8öÑ–ËÕÛõì{0'kúÚ„€ó½ ÅþAÿ ÀY`vø¸ã ÀºglOcð2…»ñRoENŒ9ùjkuI8öT)Ç– ǯ’Áö6Ë €|M¿rŒ›#Çôì¿sBN(ï ÀÁ˜Ï‚–Qhoð:=øl åÊ›ŽD´V¹Œ±$‹«Š‹äÝI<…r”•»I«m…;CÐoÛ6b,"àZóÀÜ}II5lÛÇ*g.—´g8šÀzX™ØœÜ,~±LËÒëþ2œï](ö øWN€gOÂ2oBc¥–À¯17J¢Š»•ä>æä#ö» í1k%¶NÂ2ï0v&·­ ÀÖ=µ{ÊÀÖ}×* -rikÔ\2o°Ñ4`ÿrB|W¢—}C» ‰;ÁdÃlo]ÞÝ·¼n—.Ž­ÇýMæ¦ÄpMöxè   ÀÓ'jÙügÌ‚öÝãÀÁž;ܱõèÉꣿÞÃ…ì!CiP $­ìºzÆ€œôáCÿ Àö¯rB(„pðfO„ö6 +ˆ#ˆ2|*ûÙ HÀFâðd‹ Ô8Ó[ œ^}Q:€‰€}à6ƃ8ÄË óò(ÊDG¿§Q0ÍÊÀ‡šKwEC(³ Ài°YÐ9ÛŒr±âx…ä¢>¨3€éVÀ`ŠBâYÐûTK2·4œîÆ‹ò¡€¹¬ì‡·Ž<À'ªWÍ4œË'ê H·0œî6†ò¡€PÀEƉ €k ˜¦ëVóÑ_a¸ É’eštTQh?¢\ƒ€MB( ÀÚ( ¬ ÀkÓ±U( @A)ûÀm¬û€Y$pA?ØY( €oà€,L†´ïF‰ŒP @BP@0±ƒ !hH6Ç€àB8m°P @Ô€}à6^Z\Å̬n~à›©!” €y© çeÃÆNA(²]Îö6ŠúA(òRΈ‚P d»0œím4Mõ£×&üàM‚iÅB(@ ÀpžDßûã~èUÁp6ì6Ȉp^¸ªxݺ⪌´˜T7’5UŽsøðÚîøÚn=©F“CUMj¿ 8€×ÀëB槨$…晦>«¤( úi»–¦ª&/^Ó^S³p0UÞyÈ<î‘Çdúޏn.ù=e9|l݈òº…xi @* pW7¯âAþxly‡÷û€M·•wµþœ†îÕV£’"ÿµ³4Ð4TÕß  À‚°1¬" É2;®gIvs6Q|l=‘¬yßB €ß¡@ª €‡¦ŽW °ÇãIXþèK¹R°î£˜~ïìÙW?ò8ø²3ƒ¹ÞH¶®¨ÈðÚd)ny‹™¯«#6F‡íR~1ÏË>"¿­x·*Ùªº6Ñs`[ñQþmb«CfHeÙq¶Òª¼3YÈ Ú¼n0vÍà¢eÇõ œ‘j£Åb¤Ü~Mbw£…bh!A~”²@àepEX¢à ØŒÂZ§Þ¨õ¶²j1zRïÖÍõ¶¹ZÖè¨^¾k´Ù@ªYAû +5É˸ÿX»¹dÝUЉÍè áç>`KøW©{7vÜ’Ò¢•ð‘™>tEev·Ãàº9Évô•»¬_Ò …d´5acPÀàèrYc°p‚àÌØÏK*Ol¸&UL^&&“ÿãÿIXÉ*ïòÏ„ìÉÖ3uÂ6 @¡(À<¹\Ú»$œ`b0 Dë÷x˜}j‘$Øÿ>7›t¶$ë™tùÈ @lÀý“KÇz…L³±`=s·!¡eB( @Á*À<±t´{œ`Á`.ØÓ; ÈœÀ‹GºæÉ hÎ\ûÖ €«€09Á" À{:`Ç¡€™S€_<Ü9GN°DÀpæÚ¶ (X€uÌ’‰@4 ì逇P dN àv`òƒÉ €à̵?l @(P° p/jŸ=Ø># À{:`Ç¡€™S€Ü7¶p°m† û@¯Èâóe ™;ÎØ€P d™:€É †ìÁp–µkT @(õ h&'XD¡‚öÁ`8ë[:* È2€÷·L S €³¬‘¢:P @|T@x_sT1€ó±¥cŸ €Y¦€ ÀäÀp–5RT @( ( '˜ €ó±¥cŸ Z}ee¹ÿþûƒÌ^ž€Si˜„•ò¡È:¨Ó çéç±ÇË$€É÷%“ÁöAb8ëºT @t+ œî­¬Iù°®UxMÎl @µTNQ}‚_Øß: 8xÀ)¶Cd‡P ÷€S‰nŽ\} ÛJÞÊ ÒfEš$±@3I,/Û¦ û?…:ò ûÅ®™Ï/€’ˆÕ$‚öÒ@i&ùXHÂ,aZG©h ú¨­¾F÷›E±F,ÛRêk‚ÎǦ—?ûäi–à°p0ÌÏ sœ1`çO.‰U髚°d{ ÀÊ Æ“°|ðØ/€•wkÙM‚vŽÇZH3ÉÇBž`q<`ÕDt_ÖÕ¯U U(ÕרF”’m)óQ{ìSž(à Àl_¹ïë:|–€õaeKiÁc8aÿÈ!>Ø> ûà®Ê’2€m Ô7€c6Ð@ZK^’ðó‚vÂÕæÅ:±ªcXoyp^5²|ß™x¦NL…„e‡¦•2Z ™»ÈÞ‚, 1 ;hžöì’oÛfT¹ú¬zXÖ'[é¡fÛzÁ`õÁp Ç…¤IÏ!è4l_›Ñ•†ÒÙi˜™·!‰´ˆBÃöwàÀéh7f™in é­|úK§,á‹Ô\ùgk"TS=™ZÖ“‰4úȱžË¶Þ5qúõÀ @Ò dÀ¦Ãë!Œœôþh`,\“\YàŒ5ÐTw6äõØP²¡ª¨ÈN2àŒéy ?cÀ{f=Y8c ‚P À€Slj– /샾”…|ãäüñªÁÊFfN|öLñð ;€P k€S<4÷}ñ‹;f´ÏƒìƒÁ¡K¯â8¡ N±i";€Y®œâb6îÆ$,èYBÀsÇ+Â+ʆ§“¸)d‡P d­b>¾~20 úÞ¿ûFßø‚x ô¾–)2ò€O=ûC¾QT˜C—\yÃÄÜJYï’²¡©7kÏT @(¢ñߨ¿¦¨OÂì÷üí×{Çö6G÷4Mînœ €}\C„.þøÆñ™å#sÊ&—ÿú _Kx @( S¢¿ùß=‘¹õc¯×¾V!#ŸrÖ}@¨³„.úØõc3ˇÚg”õO,ýõßüïÂlUØk( H¨@Ñç¿Ú=2KÜ}µfDøgžWÈ4õ±ï¡õW\7:½´¿uJ ­ßýy8a D( @*ð™û¿Ú5<óJõ0ÙËUÌ`?¾ðòkG§÷4+ë›ÿÌý_ Í »  €‰øôÿúJçÐôöÊÁ—*„€O>ã\*ä,!À{š&ö6“M†ÇîþüWéß¡€P @ 'yÀUC/WJƒìãJBXxÀ{›&úÆî†\ §v @(XÏpøåÊÁíÒàûðe×D(ݨBÐpâÆ‡P @BV@X1öà ÀÑ…×ë"d;ëGw5ŒõŽÎS|¿Ûö @(â( BÐ;ª‡É^©b†´¯»äÊቹ—J{_,í}©Œ¬¯chê®{ÿ @( €«°Ü:³„>rÉ•Cã³ÛŽö¼pŒa¸cpê®{`œwP @(à®»82KOáPØ’C¾èc£ÓÏìky–l?YkkßømŸù<Ú€P @WÔ“°èaXÂð$,?>ï‚ËÂ#ÑÇwÔüú•êÇwT?þjMC×Ȧ¿ÚŒf €PöAVYBç®»´oxò—/Uþò¥Š_½\õØŽê†NðgÑì €P Àiê#YèœlèšøéÖR²Ÿ¿Pö‹—*ê:†n¸ã^4;( €ñÜ0Ž´îª,¡s?*<àª_¾Xù˜áßx<`œwP @(஀€SÁïopLþêåê_m¯¢‘àÇ_«kèŠÜ„1`œwP @(CÀƒ1 Ë‹C¼à²þÈÔ¯5<ùZýov6<µ»±©gô–Oþ/4<( € BаðYè6¤ŽÏ>¨ëùC[Žto=ÚÓ>½£è á €PÀ¡áƒyÀ£ó;'˜ƒÆáûqhÝ%WÑ“°¶—õ“í¨ÜQ5DûÄ}ø( Y €P  ÓC‹w7Mîjœû8î¡^zÍHtᵚ2ñ8èžÈܧ6( €® °GQŽÌ&Ó°üøjðŽê‘WÉj†_«ÐÆ> ã´ƒP @ üÕ}_líŸ|îpWÉ¡Naà÷v¶r–ÒâëucÂ覮žÈü§>‡·!á̃P @wn/ú›ÆÞÑÇw5’ýzgø=§žUÈ4õ±ï¡^F!èŵcÜFɺ#sŸ€qÞA( @ 6ÞuOEKß<³ÿ{dOï##ÿùûOó¡BÎúȆ«‡&^¨bV>´­|¨chö®û¾„† €PÀUßüÉCµíßüÏmÿHöÿ˜U¿úgï>¹iêcßCç_rõàÄü–Ò¡-¥ƒÌŽ ¶ÎÜqïhvP @(\¸äºÛw—7~þ»+#ÿ·?¯r–Ð/º²l½Oèù ·æðÔ­Ex0Î;( pWàüÝðòÁÊ»¾þè_ÿÙ_ÿÁYu«oÿ³¿,dšúØ÷й~¬/2ó«]­Ìv¶5ôŒßôi¼'€P ¸+ð¡Ë®}q_ÙM_~„Ù—˜€ßößÿÜ„ 9Kèì^Þ3<õŸ/×ÿçËuÿw;Y}mçèÆOàQ”8ñ €PÀ]3/üXÉ뇮¸÷®¸GÚYu'þø¿ýY!ÓÔǾ‡NÿÐÅãßæè TÈYB§}袎þ±êÙ¿‘ýæ@ysøª[‹Ðì €P ¸øüK~»}Ïw|á£Ânÿð;àä.'B§ø{àßìÿ·ßì§¿à«`œvP @(C“?¸þ7/¼~Þ¦{Ï»ñÞón`F~óÛþ[rü)øÔ¡SÏ»°½/òȯwÿzçÃÜÊ{¯¼ùÓhxP @(\xÿ¹<¹íÕs¯¿[øÞö΂Gjr„ÎøÐEý£?xzÿž>ð}öweKøšÛ‚Æy €î ¼ÿœuOlÝqÎuŸ:÷ºOÑß³¯ýðŸ$ÇŸ‚O:óÃwŽýä¹Ã?6¬ºmàº;þí @( €«ï=ûüÇ·l?óªÛ™]ÉŒø­ï(x¤&'@èœuz‡'~¾½œìgÜê;‡nü«ûÐì €P Äð‡þ¥³®¼ìLnprìå©CZyÿèÔo÷6)ké»õîûÑì €P ¸*ðž3?øëç^8ýŠMÂN»bø÷ßòv*ä,¡ó/þøàøìÖ#]ÊÚ¢wÞó·hv9¤@~·àûïw¹,À]¾/ß?9tÆ¡ªï>ãÜÇJ¶žzÙõÊ8€ß–ß'fà{úè¥WLÎï¨ÚQ-­{dæ“›ñ6¤\:ŨY„óôóØcÅpžîq8Ö.?ÿ³¤@:Ä´w¹tÊ|]ßs&xÛi—o<íòøß°³)tÁe×D¢ ;ëF_¯½Vé‰Ì~ês_.ø–KçR=×5>€=“K ã8ÿ.;ÄþÀ¹ÔF£Qð¯K¶~Å Ì>F`ü}#táå׎N-îißU?JözÝ(øÓpN pN®•Mà|ÚYÚ8è{Î<ï×Ïm;ãc72û8ý½°K˜|ßW)]5°½<Ü94õ‰û¾˜‹m¢`ë çÓ¡÷àP(D{ëàmº À%Àg~ìF26 “°’„°1\=ôrEx{yß¶£Ý4 ë®{1 +—Î 8—ŽV¢ºz°àn®Ä^ÀÎÅã¨<`F_ò€?ÎüVÌ‚NŽÀ¡n¸z˜&aU ¾\ÞÿRiïó‡ºÚú'ïÂ,èœ:'àl9\UÅëÖW¥V/Nm ÉäbâoNæxdKZþBЦ 'Çß7B¹øÊ¡ñÙŽõn9ÔYr í©ÝMͽ£·á>àliçžê‘VSLžŠøH¸èrI­/*ñTO‰Ò8 ‹×\~‚Ú påÀxÀ¶ªÆªy{ë¸ÃöqFdI–÷œÁCÐWÜÀìcÌ‚N¾üAç_ôñÁ±™­‡»ž;Ðö̾æ'w64õ€?Ÿ%‡Õð¢@úÌèkºt Yì›ê”­?{©j²iÒ`~UaR·¤( +/NVF—ôY`Q+xÀÍŒ!|9›-0ŒIX~üaàƒíÏîk€3Þ’Ø`ÚLĵFTE¯­þÚ~ `WìE¤ÀîœÔ|}¾×ý\à ‰Á§]z¹ÂAû 0» ‰fA¿Z5üJåÀËåáõv Ò}À¬ýF <+.GㆠEü5H_Èe‡Ó`ç~ V]P8q À6Üf Àž›Fì„®cÀÎú»ìx`•C:€£™ñ"Lƒ7l€}З… /ä¢Ü]?¶³Ž=ŠòÕšþ$¬¯dü€bƒþH€-TŠ2nY'aÙ~÷¿1s¦À–è2m›MÂÒØ#Yìô€í—Žhl¦œ.˜bË5•ÀÁñpΘ IþÕ3[O¹äúSÉÀ—ÂöƒàÐú+®£GQîk™Ú×<¹¯iroÓdߨÂÝŸÿß:ŒØL ¤ÀÒ3´Ý­cH¦1&ÛöK0GM¯bóÔ\3q€Ô.kAZë$,~m’)Ðj\=`›.– wß³%wpG3ãE0ø™m§^²QÚþ,è?ÆÛ’ÃpèâoŸY>Ò9¸cŽìPÇ\ÿäò=ûõŒPlпi°ÿj‘3}¢vi)ÃË$¬<à¤êÄ……sƒð€“:Y•NŽ´1R€oŸ]9Ö½H >Úµ@6]¹÷o¿‘U•‰¯œO-Ä €Ù_Û$hñÕ½äôXl p G3Ã…¼û4 Ao;åâ§^¼‘þ’ÁöäІ«nœœ;^^)ï[¦¿dÃÓÇïûâ?døpbs©(§¢^¶åõàL{ÀéÑpztÍD©Êæô½ž öàK¯Þ49¢jpUÙÈÌêæ¾™‰cˆm¤YQŒSE½rý/<à¬hsÉW‚{À[z/ºþd°üÒ,h8ù¶—u9à¬;$)TÈ#€SØBveE:»Ž‡·Ú€{zÛ)m”¾ˆyÀÿ“°’Ä0ì­¹ew*8»Orµ‹`ú5ÿ>÷ßÿ}÷Ý—œLH½¦ 0?³õÔ‹¹ûË !è$áËE xM›q0§™²Ú#ê2à.¢HŠ|ýÀÁô™*…… ŸÞJÜeðz `xÀÉ2ÎTƒMçvòµSVûå¯w™•ߟtž"(;`ø$,6¬{À0p;CqP @(`S€? ‹nCbóŸi–˜„À8S €P ½ Þø‹ÉàdÉ+Ó#ÞfŠÒ¡€ù§€¸ø”K6’ƒO†ì ÁpþØ#( @z`ð³ÛNÙ°‘ÙÅ×À¾ø‹YÐém¥( @(‡ ˜&ø’'_‚1`?†œ‡çv @(V8€·~à’ë™Áö_ܜ֊¡€yª€ð€?°AÒ÷ýöÅ`xÀyz~`· €iSàݧŸG·! ÷—è ûâ/Æ€ÓÖ@Q0€P _ð%×Óè/ÍÀz?ží‹Àð€óõÁ~A(Ò¥€‚f3°ÈÞ {0Ä‘,…€Çç,¯#œ^ýÅo_øìÿ Èè åd÷þÝ7ÈîùÛ¯KûÂ×ïq³¿þÂ×Èî¾ÿ«ŸøìwÞó…MŸÜ|Ímw_qã]]sëWnúà¥×ž½þãg^pÅ©ç_ò®ÿ9}ïYyïYç¿çŒþåéç¾çôóÞsÆyï93¦½÷Ìó„‰4¶¯zFõ“-½‘æÜwŸyî»Ï8÷/ÉN—ö§Ÿkµsþòôsþ‚ì4ÍN=ç/¸ýy’ö?O=‡Œr‰¿1íùÛŠÜ®ªáyyv×=ŸûÁÏÿÀ†d'“at²ìåéC—]sÓèŒÀmc«Ä`z+paÚðÌ »MŸ&SëÅW²©ãNš:î´Á©•ĵ§åÄÌHécØ@tÅÅ&—¬Ö?±DžXd6n·¾ñ…¾1aódáñ…þ‰ÅÁè2ÛåéÔ6"ÊfW#‰ltv5p£Š&:L664}Ây@Ý–8‚nÇK5ÝäÇ1ÆÑt_µ†haòpÇZ f°ÀrM,L.QÛšZžµ‡4›8éèŒ`Û«ýÓz’Žö¨kxº}`²¾{¤¢¥ïH]ÇþÊæÝe ;U½´¯ôÅ=Ƕ¼~ð¹ûžyyÏÓ/í|æ¥×»mÇo¶¾ü›-/?¹eû“Ï¿ôÙs/>þÜ ¿.Ù&ìq²çÛ¯ŸÛÆíÊë4ZÏmÛcd%Üž•Fsš¤=³^µË˜Ñ#/Ô²±°õ—Okö̶_š¶•/Ó_WÓSÆ[–bµzá1a%¦ýàçO|æKÿpê¥7|àÒÌ6à6$?ýÕ_ýÕóµ]•‘ãUƒ«IYõàjž™ØýÊ®VÑÜ\ߢ²ÿDEø8YyߊÍÊz—ÉJcرž%W;Ú½(,Vçz•Ŷp¤kÁi‡;ç…ê˜v°}–ì@ÛÌþÖif-Sûš£Êö6Oîiš ÛÝ8¾»aloÓľæÉCí3¥=‹áqèk„ Ù­vhÕiuC«^­³Zýðªw£¼´ Ú:?d«dý«åkd´iV>q¬w™ìhÏ’²#Ý‹Âw-XÌqÈÔQSÇŽŸ0yÅ¡4(SÛaÕ±X¦­›8豌Rîo:Ð6}¸sîXÏbyx…Ceÿñªönqtº­”õ-•õÒ´xŒÎ:_ºœv„yû,í e½ÏîoûÙöòï>¹óÿï–/þûãŸ{ègŸøÚ÷oþ»‡nü›¯ºçë—~ò‹Ýñù nº÷›þúüë?õ¡kî:ïêÛÏ»ê¶s>~ËY»ùÌË7qù§Òƒ&.¹þÔK®?mÃõ§“]vý—m<ƒýåvéõ§_zýiÊ.»þ4ÃN§d—o<]³Ó.ßxÚeO½ìúS.½þ®ûÀ%ÌNvñuïãöþ‹È®Õ욓ٚëÞ¿^ütÝû/¼î}Ò®}ß…×¾—ì‚ëÞ{!-_÷Þõd×ò¿×½÷"2Z¾æ=믡¿r­dö>má}믗YDÆ ¯gvÑõï»HL°¢]ñPó†N%»TíË §’]J{tÃÇ¿ñ0{á›ÿ‹ pžÐwÜñµŸ<¾sx±y€cxOã81øpÇ,õ€¢Ã][ΉÁT5g°Gú²K„ð‰Ò¾•œð¾–(1ø`ûÌ‘®ùÒÞ¥ò¾eâb¦,èÛ½@¬uÚaº¸l›ÙÕ0¶õX÷o÷µü¿Ëyüµø?Ïýíw½ù;ÿy××þãæ¿ý×?ÿ­«îùšðGoº÷ðuŸüàÕw}ðš;Ï»êös®¼•|úå›N»ìFö¤'6×÷:Æ`ŽaÂ-AW™¤ï†ëä0qÚ°Db°A_zt”D¯ðû%t%båÂµï¿øÚ“/&_'¬H|!a˜èËIÌ‘Ix&ˆÒL(2FM±Àˆ~íûˆÁ±¿ï[Ï ¤¿„\O™ñ\dïe$æf¬!ú¾ÿâè/Ñ—]‘Ü(ÌÑ»ñ”Ë6Þ¼ùïN쥿¸ïËðæß+`˜úÙõÐ7¾ñK>¾ñ—ÕÝ{†–À`£7wq‚°p‚°Xãt‚º¶®0yÒ fWWØ‹,<*›Ï¤;ÁÂfN0÷ƒ ÀZ§Žu/Ø`«ìêÓÊ„N0ùµI;ÁV¯•LÛõˆá²ðq¯±Õ¾¯n1`îþ&ô€mNp÷—ÚýªœàC³„@Á`rO3êsßWxºÄÚýmStY°·er÷æwó»£zøÙmïjø?[Žüë/_þÆKþ¦øWŸýöÿ½óï¦/pßûµË>ùÀE·ßOþèýáë>yîÕw|œ`àÛÎúø-g\q˜`#| 1øâëɃ¹1‡˜ó˜™±pªøª\áËiYÒ÷”K‰¾šï{1s|tuÄž¼þÚ“/ršÃÄ`É]éŸLïåå/E 9Éòùøeb<Ç<Û]<:ƒŒj"æ0sc¾˜!Y˜C/ î’Ýð² t-ÂŒy½Ìñ½<`²›7ñ’‡ÿÏÉÿùü½óOÿè-ð€“Ãp衇ºûùÜW,ï|´sê…ð‚÷@t€§\ö? íˆve°(´­3 -¢ÙÉbØ;€Eo.¢Ð±Ñ à cäïo‰’LhåôH?Ø‹ö…N À„jˆ à±è5ŠB{0ÕL~°…¦eïh¯öˆN* ­3˜ÑÄ`Šˆƒƒu‚Å¥°f,M[!háûÒ•Çžæ òt_­Þ^Þÿbyß¶ÒžËú„m9ÒõÄ®ú_î¨úaÉoÿü¥¯ýè™û‹yï·þï_ýÞ_xp#÷€/ûÄë€ïYwcð•wœwõç^uÇ9WÝ~öÇo=㊛O»lÓ)À7Ð+`Ä`†a‘6bB2P‹5§n¸žKOÝp‘˜¢ÍŒÄÂSdôeî/•CF.5÷}U´ÙX¶Ò÷_KF~°È%͈H¶… ôŠP9ûK›¾”º™†Éç¦ín`$–è¥zòŸD‚ñÉl Þø>>·Y0×L† †¯øæwÏøÕ‹Dß·m¸òþø÷ÞùÎ?HŽ?Ÿ:ô“Ÿüä_þå_>ýéO_ô±ëïþñ_¯9»~ È'Ϊ_•V·z³°Ôx÷¯¶ÿeÑþèOþôÍoþÝ·¿í÷þû»~¿à‘šœ¡Ç{ìÑGýÖ·¾õÀ\sÍ5®ÞtÞG/9ç#õ¡ `P @,QàÌ}”Ù™ñÁugœ·îôs?rê9>åì|æyï?ãÜ÷Ÿ~îûN;‡ý=ý%{Ï©g½ç”³þâäÓÿì=§üé»O~矿÷Oþç{Þößÿâ-ïúŸdôÎ?ûÃwüé›ßþ®?xÛ;ÿà­ïüý·¼ã¿þñÛÿ-qì”FÙ¼åºÉõo}Çïköo}‡nò'­£4¯5¶òöß«nl£¶mýÁÛÞÁÌQ{2-^sç2eT+å·ÿ៼ë¿þ—“Þüû¿ûÇoù/ïxûùï€ÿ)ÍAo%ÊWIEND®B`‚bitpim-1.0.7+dfsg1/help/phone-lgvx8600.htd0000644001616600161660000000106210577601275016216 0ustar amuamu#include "pagestart.h"

What works

Phonebook, wallpaper, ringers, calendar, memo, call history, SMS, and file system. BitPim can autodetect this phone if it is connected to the PC via a straight USB cable. BitPim can also make use of ringtone files stored on the microSD card.

Contents

BEGIN_TOC TOC_0 TOCITEM_0(Cables,phone-lgvx8600-cables.htm) TOCITEM_0(Notes,phone-lgvx8600-notes.htm) TOCITEM_0(Howtos,phone-lgvx8600-howtos.htm) ENDTOC_0 END_TOC #include "pageend.h"bitpim-1.0.7+dfsg1/help/phone-motok1m-notes.htd0000644001616600161660000000356710733643554017451 0ustar amuamu#include "pagestart.h"

Firmware Version

  • The firmware version is 24.1_00.25.0C.

Phonebook

  • BitPim supports all phonebook features.

  • BitPim will set the first number on the list as the Primary number. If a contact has no numbers, then the first email will be set as the Primary. The order of the numbers and emails can be set from the Edit Phonebook Entry dialog.

  • Within a single contact, BitPim can set different ringtone ID and picture ID to individual numbers/emails.

  • BitPim can use My Sounds clips as ringtone IDs (in addition to ringtones clips).

Calendar

  • All recurrent events are open-ended. When viewed or edited from BitPim, the open-ended date would show as '4000-01-01'.

  • All recurrent events are automatically converted to have an interval of 1 (ie. an every-other-day-event in BitPim becomes an every-day-event in the phone, etc.)

Ringtone

  • BitPim can read ringtones from the phone.

  • BitPim can neither add new ringtones to the phone, nor delete existing ones from the phone.

  • BitPim can add My Sounds items, which can be used as ringtone IDs for phone numbers or emails (by BitPim).

Wallpaper

  • BitPim can read, add, delete, and replace wallpapers on the phone.

SMS

  • BitPim retrieves and classifies SMS incoming messages as Inbox, sent outgoing messages as Sent, and unsent outgoing messages as Saved.

  • BitPim does not retrieve draft messages.

  • Some Sent and Saved messages may not have date time info. In those cases, the date time fields will be displayed as YYYY-MM-DD hh:mm.

  • BitPim does not save any SMS messages to the phone or send any messages through the phone.

#include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-samsungscha870-notes.htd0000644001616600161660000000350010743010415020601 0ustar amuamu#include "pagestart.h"

Firmware Version

  • The firmware version of the phone that was used for development & test, is V.A870.ZG26

  • The hardware version is V.A870.04

Phonebook

  • Groups (Categories) names cannot be added, changed, or deleted from BitPim, it must be done from the phone.

Calendar

  • BitPim supports up to 100 calendar events.

  • This phone model does not support recurrent events.

  • The alert of an event can be set either to a ringtone or to vibrate, but not both.

  • BitPim cannot set the alert of an event to 'Light Only'.

  • BitPim does not support the Reminder field. It discards the value of this field when reading calendar data from the phone, and sets this field to Once when sending calendar data to the phone.

  • BitPim can only assign builtin My Ringtones and My Sounds to calendar events.

Ringtones

  • BitPim does not delete ringtones on the phone. You must delete them manually from the phone.

  • The limit of the size of a ringtone is arbitrarily set at 290,000 bytes. Exceeding this limit will display a warning. If you have a more accurate limit, please post it to the BitPim Users list.

Wallpapers

  • The default format is JPEG.

  • The default resolutions are:

    • wallpaper: 128x128

    • outsidelcd: 96x84

    • pictureid: 96x84

    • fullscreen: 128x160

Memo/Notepad

  • BitPim supports up to 30 notepad items.

  • The maximum length of a notepad item is 130 characters.

SMS

  • BitPim can only retrieve text messages.

  • BitPim will neither deleter nor send/restore messages to the phone.

#include "pageend.h"bitpim-1.0.7+dfsg1/help/screen-importpb-menu.jpg0000644001616600161660000002361410111556437017665 0ustar amuamuÿØÿàJFIFÿÛC     ÿÛC   ÿÀ{ð"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ýñn¡ua#}šæk}÷/»Ê®qÎ>¦¹ïøHuOú ^ß÷ÿÏÓ´oÚÕ§ˆ5íKùUÙµIP çRÒœR}ät=ÍøHuOú ^ß÷ÿâüCûFøCÂ:ÅÆ“®üPÑ4]Vßoc¨ø‚'‹r†]ÈòVR29õÒW‡øgMñÍçÄŸ‹áŸx{H°$·­ O+Iý‹¦e„‘ÞÀãhÛ´œ‚wàl„{¾›ã;gNµÔ4ýv[ë ¸’{{«k³$SFÀ2º2’H ‚8 Ö/†þ3i¾.Òô½CIñx»¶Õ<¡h>ØÉ$­%¨»Hü¶!Ć݄ÞY‚ÄÍyP²Okž3Oˆ"½Ó#ð§ÙÂX¼ðý©´kf›Pq ¹çû\a¤‘ãAfUpë;?ƒ|ÐÓÇ^øEg«j:Ѷ³×ôÛ+d²Ö¯,üˆ[ÀÎË‚T)ûÀ[#y’€q,ŸÌGÞ?ðêŸô¼ÿ¿ïþ4ÂCªÐJóþÿ¿ø×+eªèšœ,—W€C¦Ko¥H×—æicÄB¥’F.Ó8šo%Üʇ’à+]JÒú{È-® ¸šÊQÌqH ¢HÀ?+’7ÁÁÚêzSv3cþSþ‚WŸ÷ýÿÆøHuOú ^ß÷ÿÏ¢•ØìhÂCªÐJóþÿ¿øÑÿ ©ÿA+ÏûþÿãYôQv4?á!Õ?è%yÿßühÿ„‡Tÿ •çýÿñ¬ú(» ðêŸô¼ÿ¿ïþ4ÂCªÐJóþÿ¿øÖ}]…øHuOú ^ß÷ÿ?á!Õ?è%yÿßük>Š.ÂÆ‡ü$:§ý¯?ïûÿðêŸô¼ÿ¿ïþ5ŸEacCþSþ‚WŸ÷ýÿÆøHuOú ^ß÷ÿÏ¢‹°±¡ÿ ©ÿA+ÏûþÿãGü$:§ý¯?ïûÿgÑEØXÐÿ„‡Tÿ •çýÿñ£þSþ‚WŸ÷ýÿƳè¢ì,hÂCªÐJóþÿ¿øÑÿ ©ÿA+ÏûþÿãYôQv4?á!Õ?è%yÿßük‡øEâ¸,¿h¿‰¶×÷%æ¡e£ym#fØ—9äÿ¼+¨¯ð¿üîµÿ^Vú•ω\ÔfŸõªº>ˆñ.•e£FÖú}½Œ¨\Ü´VÑ,jÒÊ"–YPg‘ÝÙº³3’I¬ ÙÖ4OøGtÛ}?í÷ºŸ“s7úV£7›;æ8[æl ã8t±«¡ÁS÷"î–—ïæ$ù•¸¿üøwâíbãV×|ákU¸Ûç_j:5¼ó˵B®çt,pª dð«´¯ ñ?ÆŸh7/àð¦—wá?KNúMnHïä,-ï¦h-…«#0Žãj«N™yd!«ôÞÝü7ð•ÿöÚ¼-¢ÜÿÂ=·ûÎÓáoìÝ»6ý›+ûœyqãf1±}ü7ð”þºÐ$ð¶‹&ƒuå}£K}>k7”‘¤[âÛµ¶$0ªä|¢$Fü@ѼöEÔÞö[›½æ =/M¹Ô.SnùñÉ'–¥Ð4›v©’0H. ØðÏŒôO¥ô𥩠”±Ã,öÄ´E¤·†æ2÷dV†â „©× €µ²ðO‡tÝ8iöš—k`%·Ÿì°ÙÆ‘y–Ýö…ÆèÄ=TC1±q¥k¦ÚXÏy=µ¬ó^Ê'¹’(´òHùæ`‘Æ™9;QG@+‹¸øçà«};FÔ«<¶®Ÿ­Ôu̱[ÙJ7EstɰD—Zâ9yýÛíÅñí!ámÁþ7ÖtŸ¶øŽ ZßIwoe§Ý˜VæÖF‰í¤¸XY"“ÌrV&ò¾zvbÐõj+Ñ|{¦kÞ¾Öí­u¨¬ì¼Ï6+Ý úÖé¶ såÛK Í/cb6ã•\°"¼£à¿í'ô}_Ä#½²²Ò—JÒõk}:-P´½µûkN Ì ßîdŽ(¥¶QçH,cr,=æŠóÚV¡ã=.ÖÞî OWÔuIõkyl.tù,äÓð&ŽpùW­! % NR Ƙ!ø#w.áF´ƒGÑ5×Â~'Óm® ÔQép*"M)IBý®È2*HF¥çuîS»Ÿ~ |kÏøÊk x‡Æ61•$ò´¿\iÄYÁhðßB—Q†…„ æh¢žFW‘ _ºÍè×á–·ªüøƒà׎ _^—ÅÚ™Aˆ-ííëÛÈì›°¥'Ž`È"½~Š.1|'¯ßx‹N’çPðÞ©áy’S³Õ¤µy]@ÌÚy“i$ŽX6Tð ù³IýŸÓ©ºø—_}JîâòíâÝ.¦2Ü4~réRD O:Ç#‘½¼šômø§ÅŸ´ßx2÷Âú jšy}RúÒK§¹žãO‘AŠÞYTFRÝö°’V@Ê€!“Õ¨¢ácÅþ)øY×üEãk84«ÛÝ+Ç>¶ð»jZ{[7öC+߉..#šxYã ~Œ;ØùRäÝ´–Þ%øâß ÜjþŸÂøWP—Ršyï º‹P¬îmv¾S—0âæI ³¤/„ˆy$ÈþO§QEÂÇ‹üPøk<ÿ%ñzé>'ñ-µî•k¤¾Ÿá?Ë£Ý[´\ʲ¶.í£ž7N§sîŒÆ»UÄ®c.>j÷Ö¾¶°ðö‹¡[xÖÙ4«+ˇ¼ŠþTŠ"m¼üy‹iHöÉ"ZæÞ Ì@Z¢Ü{E\,|ûàýyµŸxŠoø„ÝjzÒêuƬYÛkxm'L‹4ëo,>u¬¢H¤•ãg·€˜gB+üSðÄ ¿øÛw…ÿá'×¼càoMÿíͼV¶zŒiæ»}®h˜@Ï~› ùˆßr©Û¿èª(¸Xñ}Gáçˆ'ý›þ&xY4ýÚö±ÿ WØm<èÿ}öËËé-¾}ÛWzMùˆÛ» ‚8¿Š×:Ï„> üXðN™¡ÿÂGöÏí¥W¶Ô-’fÔÞ[”³šæà]î½Xâ†8¤-Žøüæ}9X·^ ðí÷ŠlüMs iw$²ˆÁm¬Kg^A $Åwª‘$œÎÞ¦„Âň~ÿ„ëÁú†Ž—Ù×’yw7þ_›ö;ÈdY­®<¼'•4qI±ŽÖÙµ²¤ŠóŸøF|a§ü;ûöuëëþ$Õµ¼U§ié$2C±lí'iR$)•³L2ÑA4±•Ñ«Ú(¥qŸ Ùü ñ¸ñeöµ†¯m,SU:ަ£¯JöX£¸ðÅÂBÓÍ+1žEÒ¯+¹‰$@žo•²Ví>$xÆåkÉ£ÛÜ\³És¨[A'3Aa:Ä&l–,ŒTíP»“kæùÝiÖwZ;iû‹r²F\üÂi¥•À=@ýéQÎp9¢ñ 2Ö£§Üéíylo฽Id@ñØ´0ÆG 6™ÝœŸâú×áÆ—EÓ-£ŠÚÖãSÕ,tgûMž—3J^h.æg˜Fò<ÅV7fePÎHb¨+Ú*…¥»¼¿º‘ÚI®/,³gjÇÉç'ž¼U1£ZEb ®`•-,m!¹YG™µ†X•ÔíûÌ&}ÙùH%H Zk[…™› êêÂâçOžIÚÖ{yc&ž×=Ö˜Šþ\»š4ßq°¶[„r:í«–V3AâŸô½BÛSuÑ n±·Ú¬*ZW-NÛž,®awÍõÄínðý¢êè4°HLh höì A%²[š4í*ßN¹kÃs¨ß_=›Ù´·“ÆP+I „ªGÌ=zÜ“µp7‚³2ežæÇTñ£u¨¬:VigpðGdÓÊPý¨¸LΊ¬|£ósò |¤¶“Ç©ézµ¥ûÛ\Ü]<±´V‘²$O)BìçÍc œ¨Â°l«äÒm®®e{‰.E¼è‘Ý[@b r¨_jÉæFÿ(Ê0»IÞrx“O±ŠÆ_µIs}¨ßë·ó¬‹pUŠ™Ê»äglä&•Õ‡©›ywz—z„v1ÛÉsæéЋ™$T-ssR ¹^Iv|}ÔÏpÙÛ%ã\Ȳ»µÍ…É áGú$ÒJ‹÷OÞi'ÐqëDvÑy{–VÆ«¬øp7<gÚ£åà£.zŸ˜ôâ„☩jVšÖ½u5³‚K¢¶0Bí4Ã<‘³™ FÄd… áŠòɻ屪^ßišv¡«ÌÐÅed÷l|¢óʰHñÌþ`p©óG&ÕÚÛ¶ ²oÊ˦øvÒàMVæúò7šîS¦yð-®Æ»Ñ,^aV ®TÈ2©ÂñVgÒ­µ Û‰¯¥¼¸·ÚY4ä•ÖWf,û×am¬Ç,ˆÈ¬Kdí—ˆ¿¶¢ðWˆï§½µ°š(ïâ¶‚ÚyG‘<±y7¨Cˆ˜¡ù²ÛZš³_Yø‚ïFŠæ[››\ÍqscáË«˜ÑYÙ##Žg9%$;¤‘8PbN._ZA¨érXÜ+Ï ÿiûFöÁÏ<²É÷@ÀÌÌ:9¨fÒ–æ_´IªëöV-uv²Û+ÍÔ…Ú-ö†Q˜o`l—ˆYÚ®­©F^F‹@òVš«7¹›Ï{x§höy‘m¬Ñ‚Xä± ( “¬²iÞÐ&µ‡•¤iÒÉQowO³ÂÒ„PFé ïÚ2b2zÕÙ4K).0“jVVEBÉoix› «¹ätvÞU@.›\ñÏÊ¡lÁ v–V6‡ÚZAh…Ø+K$€9!sÓ½&Õ´ JR36§=´ö§éÖ‚I.ZPa’gù¢A*–P¾ZÈìØ8SÝX:†­wo1¸p/K†kØå¹Òç±YYôÝI“lR’Ì€ÛäI‘Ø&ºFÒm—DƒMˆ)xkÁšŒzn¡{=Ư$Bài:M”úø€’¾y¶¶I%îR¾iP°»²@=]y^3Ñ>|OñÔ¾6ԠСÖe³¼Ó5ýX˜, ªÛ$"À]ɈÖdžÉþÏ»îÝÒígiá?‰º'µ»Ý7H’{‡´Óíu &xŒji®¡ò™[“G%”Ë$nªÈÀ)ùƒêëå/‰úÔþ4ø‰«j>Õl¡ð}Ö• sRÔ¬%¹°}1fñó&d…å´yÖØ´Šâ&…ŒŽ^ØÉº²IáM#ÀK¡Üø—À—ÞÖ5©ïmµ{Í-ì¼`!¶¶Cg ±»òoII–!0Îsg͵(ιõµs¾6ñ´ µÓÉÓïuGSºûŸ¥éÞPžîa“2«JñÄ»b†i wQˆÈ±Uošÿeï é^4ñ®§}¯XÁ«Í¢ið2;«mmìÌ^ ñ@ÐØÌÍöf…"D‰X-ÐÕ”Õþ;ø'þ3ñ¡#&OÊ^\Ž…¢CÕF YØ.zw†õ¯øHü;¥êßa½Òþßkרu(|›«}èË™2vH¹Ã.N"«xGÅ–ž3Ò§Ô,£ž(aÔ/´æ[…Œ–·RÛHF ùKÂÅOR¤d>'ðÖ‡>µð×Ãpø«ÅÞðÄ’øWF‡ÁÒë~—PÔâˆé6¡¦Ñ.ãÅØ»3°Ä÷;ÖØ¶ä6Ê=¿ð‰}³Xÿ…¯ý‹ÿ'ö®µý‹ÿ G“ý™ý£ÿ ¯ö¼ù¿ºóü¯±ù~gϳÏòxûE¢¹ôŸ„|Yiã=*}BÊ9â†BûNe¸PÉku-´„`Ÿ”¼,Tõ*F@9j¼§öaM>?„¡t›/ìí)uý|ZYý‘­<ˆ¶/6Gä2«Eµp<²ªW cêÕ, ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯ðŸüî·ÿ^Vú•ìÕã>ÿ“½ÖÿëÊÃÿ@’ª=LjüÒ>;ÿ_ÿo2è˜+”®§â+pæ6šâÜ™?yjȲÝAк:þjxÏCÈâÿ±¡ÿ Ïˆ?ïý—ÿ"Qb¡ð¢ÝSûú øƒþÿÙò%ØÐÿÐgÄ÷þËÿ‘)Yw.åº*§ö4?ôñýÿ²ÿäJ?±¡ÿ Ïˆ?ïý—ÿ"QeÜ.[¢ªcCÿAŸßû/þD£ûú øƒþÿÙò%]Âåº*§ö4?ôñýÿ²ÿäJ?±¡ÿ Ïˆ?ïý—ÿ"QeÜ.[¢ªcCÿAŸßû/þD£ûú øƒþÿÙò%]Âåº*§ö4?ôñýÿ²ÿäJ?±¡ÿ Ïˆ?ïý—ÿ"QeÜ.[¢ªcCÿAŸßû/þD£ûú øƒþÿÙò%]Âåº*§ö4?ôñýÿ²ÿäJ?±¡ÿ Ïˆ?ïý—ÿ"QeÜ.[¢ªcCÿAŸßû/þD£ûú øƒþÿÙò%]Âåº*§ö4?ôñýÿ²ÿäJ?±¡ÿ Ïˆ?ïý—ÿ"QeÜ.[¢ªcCÿAŸßû/þD£ûú øƒþÿÙò%]Âåº*§ö4?ôñýÿ²ÿäJ?±¡ÿ Ïˆ?ïý—ÿ"QeÜ.[¢ªcCÿAŸßû/þD£ûú øƒþÿÙò%]ÂåºñŸ ÿÉÞëõåaÿ I^·ýý|Aÿì¿ù¼“ÂòwºßýyXèU%¹•_€úGÇëÿíæOýr•Õøïýý¼Éÿ¢`®R¥—…s¶?4mGÇZŸƒà{Ó¯i¶±^ÜÆúmÊ@°Èq †ŒBûˆp¹$Ç Æc}½|Çñ·ÄšEαûFé0ê–Rê±|,ƒÌ±K„3¦ÅÕÙò€îVâÜœŽñ“÷×"W(úrŠùKâ¿ÃÏøkþ7önŸöoøG¼o¯éŸ¾‘¾Ï«7ö¶íSæcºüý–ôÆÌÿ'úÎ[:2¿Â#ñkâÂøî÷E ~Øé–ww{µ8Ñôí’iÐ+yÉ;¸!dµQ3¼q€Y£Œ+°\úrŠùEþÈòGü4Ø¿á6û.Ÿý‹öýŸjÏö}¯Ú²¾Ïÿ/oû^~Éþ‘Ÿ³cåû-i|øuŠ/ðÖ™i CÄÖt˜níãÖuµ‹X†)àd?öŽÓvÞX™@+ç˜Hï|9§x7J´Óíþ'ë^ñßìó'‡/µË³ÐMÓßß<ÑÛÅpï¬víc®çlÛ£›bc3v ŸExGÅ–ž3Ò§Ô,£ž(aÔ/´æ[…Œ–·RÛHF ùKÂÅOR¤d6«Á¾¦¡ìÃâ…øyeýª­×ŠG‡lþȶžDßÚwÿeÈ™UbÚÞXòäU Œ0"¼‚÷š äH4ßx{Pyµ ÏXÓü!£^iWí4šþ—‰µ[–¼št½M³*} ¥Æén˜Ë. ϱüIâ?Â>Õ5ÝZãìšV—k-íÝÆÆ*л¶ÕŽIÀœp h×Ë>øwGƒÄð‡ƒ4»u¿‡~%žMDÒãoïmßN6Na›4O+ùD‚ÈÒ6Ü9ÑøQàÏ„(øïâ«ßé¾Ôô+EÐî _ y,-ïþÕ©Ÿ?ˇ÷_iUH¶ÊG˜ŠÄ+(v [K…Ϥè¯ð߇µ *”Ol]•&Q£jlcp¤o±µãl«©d`ÊÌ °\õj¯¦ßŪéÖ·°,é ÌI2-Ì¡XÇ WFÁåX‚¯šþø{OÐu‡º­…¿Ùõ¯x‹A{ì]tËuÖÖßOBOîí#û%»%²b%h•Âæ¹Oƒ±øSH²øMyw>—®ø’ïEðìpéw¼^#° ej‚m6mêòiÊyáEòðúƒ<­¶Kvvϱ诔´?‡žÔn¼%ss§ù·> ø“â;U˜Í&ûË$—\˜X¹Ý“hÒ[Å#Úÿ©v ÎŒ]ËY½ÖtH>i~×¥ðö—¢?‰ÛÄV:—u[Û[‹Û{}ŒwÃÂ’¶ìmZâ‚A;ø¼mâËOø3_ñ6¡óXhº}Æ£q²†•£†6‘‚ !N g¸¯’|£ø ñ¼â‰š†$ÐaµñnŽ5/é1ØÙDÑk‘ EŽó&ßd)t!¶vÝk*…zÒñWü!ð¡|]ý¯ö/ø^?ð…êð‘ùYþ×û_ölßiûg—ó}“ú¯3ýdòxû5; ç×ÔW‹ëŸ¼1ðãâÂûÏ èvZ6£©ëóÙj:•´@^ê0'P™–êàþöãt°Å+Y‹I»ÀöŠ’‚Š( Š( ¼gÂòwºßýyXèW³WŒøOþN÷[ÿ¯+ýJ¨õ1«ðÿñ/Äú>“©}–ûV±²¹óžO&âå#}†(@lœ¬3ì}+Œÿ„ãßôÒÿð6?þ*½_ÄüâBëTÖ|áÝ_SG›{}¤Á4ÒmP«¹Ù *€2xÕò/~x&ß$^Ò!d $VˆŠ>€ jÌÆ¬’±ìðœxsþƒú_þÇÿÅQÿ LJ?è?¥ÿàlüUxü*ÿг¦à:Ñÿ ŸÁ¿ô,éŸø´ùQ~ÛÈ÷ÿøN<9ÿAý/ÿcÿâ«@¼ð‡u_jÞ$±yµíA5•–ú©"ÚÛÛ˜Æe´g'qnp@5ÿ ŸÁ¿ô,éŸø´§ðoý :gþ­¨=·‘ïÿðœxsþƒú_þÇÿÅQÿ LJ?è?¥ÿàlüUxü*ÿг¦à:Ñÿ ŸÁ¿ô,éŸø´r öÞG¿ÿÂqáÏúéøÿGü'ÿ þ—ÿ±ÿñUàð©üÿBΙÿ€ëGü*ÿг¦à:ÑʃÛyÿÿ LJ?è?¥ÿàlüUðœxsþƒú_þÇÿÅW€§ðoý :gþ­ð©üÿBΙÿ€ëG*mä{ÿü'ÿ þ—ÿ±ÿñTÂqáÏúéøÿ^ÿ ŸÁ¿ô,éŸø´§ðoý :gþ­¨=·‘ìº=ç„tm_ÖSÄ–77ṵ́¼²\_BÆâ‰cŽaI(BH\LÃÍmÂqáÏúéøÿ^ÿ ŸÁ¿ô,éŸø´§ðoý :gþ­¨=·‘ïÿðœxsþƒú_þÇÿÅQÿ LJ?è?¥ÿàlüUxü*ÿг¦à:Ñÿ ŸÁ¿ô,éŸø´r öÞG¿ÿÂqáÏúéøÿGü'ÿ þ—ÿ±ÿñUàð©üÿBΙÿ€ëGü*ÿг¦à:ÑʃÛyÿÿ LJ?è?¥ÿàlüUðœxsþƒú_þÇÿÅW€§ðoý :gþ­ð©üÿBΙÿ€ëG*mä{ÿü'ÿ þ—ÿ±ÿñTÂqáÏúéøÿ^ÿ ŸÁ¿ô,éŸø´§ðoý :gþ­¨=·‘ïÿðœxsþƒú_þÇÿÅQÿ LJ?è?¥ÿàlüUxü*ÿг¦à:Ñÿ ŸÁ¿ô,éŸø´r öÞG¿ÿÂqáÏúéøÿGü'ÿ þ—ÿ±ÿñUàð©üÿBΙÿ€ëGü*ÿг¦à:ÑʃÛyÿÿ LJ?è?¥ÿàlüUyg¯­µ/ÚÓX¹´¸ŠêÝì¬vË ‡FÂÊàòü+“ÿ…OàßútÏüZôo>ÐThere are two limits. One is fixed limits in various tables and indices. That would for example be 500 phone numbers on some phones and 30 wallpapers on other phones. BitPim always works within these numbers, such as only writing the first 500 phonebook entries or the first 30 images. Most are also part of the phone spec - see that at URL(http://www.phonescoop.com,www.phonescoop.com) or your phone manufacturers website. If neither phonescoop nor your manufacturer document some limits that matter to you then please post to the bitpim-user mailing list and we'll endeavour to add it to the documentation.

The bigger problem is that there is a finite amount of filesystem space and that space is used by phonebook entries, SMS messages, wallpapers, call history, PRLs and just about everything else. Your limit would be the combination of the two - whichever is hit first.

I have not been able to find a command that will list the amount of free filesystem space. Consequently there is no way of knowing if you are about to hit that limit. That is why the existing documentation is vague and just tells you to be careful. In the few trials I have done filling up the filesystem the phone stops responding after the write that fills it, making it hard to recover programmatically.

There is a command to find out the size of the filesystem. The obvious algorithm would then be to sum the size of all the existing files and subtract. For every phone I tried, the existing files were larger than the filesystem size! Presumably this is because it does some scheme like in Windows CE where some files are actually in ROM and presented as being present in writable space. I even checked out the BREW developer forums, and the advice there was to create a file and fill up the filesystem and then you would know how much space there was. Unfortunately that won't work over the cable.

Here are the sizes of the embedded filesystem for some phones. Note that there are already many files stored there. TABLE ModelEFS size LG VX-44001.5MB LG VX-60006MB LG VX-700038MB LG VX-8000100MB #include "pageend.h" bitpim-1.0.7+dfsg1/help/hoto-usbintro.htd0000644001616600161660000000474010360163373016423 0ustar amuamu#include "pagestart.h"

What is USB

USB (Universal Serial Bus) is a simple way of connecting a variety of devices to a computer. It has improved over the years to increase speeds and how devices can be connected. Because it is a serial bus, there are only 4 wires in the cabling. You can use hubs to extend your cabling or to enable plugging in multiple devices.

Interfaces

Each USB device has one or more interfaces. Each interface has a type:

Interrupt

This allows notification from a device to the computer. For example a cell phone may use it to indicate there is an incoming call, or a scanner may use it to indicate that a button has been pressed.

Bulk

This is bidirectional allowing data to be sent to and from the device. BitPim talks directly to the bulk interface on devices, or via device drivers that talk to tbe bulk interface.

Isochronous

This is used for devices where lots of data is generated, and where you don't need 100% reliability. An example would be a webcam sending its images.

Drivers

While the method of talking to devices is standardised (using USB request blocks), each device still needs to have its data interpreted and presented to the operating system in the correct manner.

For example, a USB modem needs to look like a communications port, USB speakers need to look like audio devices and a USB keyboard needs to look like a keyboard.

Device drivers are responsible for hooking into the right level in the host computer and for formatting URBs and interpreting the responses. The device drivers use the identification information to hook into the right device.

Identification

Each device is identified by a 16 bit vendor ID, and a 16 bit product ID. By convention these are written as 4 digit hexadecimal numbers, but usually without any sort of prefix indicating the number is hexadecimal.

There are then a number of interfaces identified by type. Each one also lists what protocol it is. For example class 7 is printer and subprotocol 2 within that is bidirectional. Some operating systems use this information to automatically assign generic device drivers. BEGIN_TOC TOC_0 TOCITEM_0(Linux USB Setup,howto-linuxusb.htm) TOCITEM_0(Mac USB Setup,howto-macusb.htm) TOCITEM_0(Windows USB Setup,howto-windowsusb.htm) TOCITEM_0(Vendor and Product ids,ref-usbids.htm) ENDTOC_0 END_TOC #include "pageend.h" bitpim-1.0.7+dfsg1/help/deviceneedsattention.png0000644001616600161660000001521607723506732020031 0ustar amuamu‰PNG  IHDR2¦À¤e%sBIT|dˆEIDATxœíÝy”+UÇñ_eét§û=ï±=}l¢ˆAv.ÀȾ=DVPPTœÇ∊‚Š;nˆÃ"»ã¨£iFq猊̰ËúÖ^Òî$óGuug©J*•ªTUçû9'§»«*·nݪ¤~¹·*mäóùŠb&—Ë)%IÃÃÃa×ÀµË/¿\’Ì #I###¡UÀ‹Tõ¹\¾q £îÃn¾Q÷wÕ¶Ë7/Ïð¹&¼m“ó1P…zLxyðVž—úy;oø[¿†ã!wì¿nî÷DàkHªõ"íY{É.¾–g†–\ñ‡†é¿®¿ÍçóŽóZ±E±E±åxL¥òŽO2’ÿä{E*“—˜e\é{ÙQRzáBIRróχ\“àMÿílIRzûëC®I­âÏ”$õíò­ÖË>r†íôÌohùÜ©ßf.»çwíçÿö]µeîý=ûå8Åœ¿ï÷æMÞÿNIRÿþ7:Öcò¾•æ2ü°vúÈʆeûs7Õ.ó«–xË¿8®«[&î=ºaZö°7.w÷Q¶ÏÏqGírwaN?òNûõýøæü£ï²?~ëá’¤Ácïv¨1K.—“dÝK³yNZ^ìk$.·~“$UÊŸP¥ô ßÃŒÑeõjС™§Ï“$¥¶ºv~ÚSçšÓ¶¾Î÷õM?vŽ$)ýš¯ÌMK¿æúXïO+ÄôíömIóß1õðéšúýé®ÂŒ™½¿§©ߥ©ßÕf¦~Ó:Ä43ù'ÛOŸ 1ýÃ7Íí£ÉüIšÌŸ¤þÍ0c…˜þ7ÿhþy¿ái…@Ì…˜]¿Ý0Ï 0S¿?½i™=¾c.÷Щ ó¦~kNËìe+ÀL=8ßKTˆ‰³ÂOêBÌ,+ÀLÜcöÔÌ…˜ÃoW=+ÀLÜydÃ<«g¦fÚloŒñÛ1@»ìÂKuˆi§7FòñöëÊÌe ÓŒôæ¼â¥æß}WÔ>gjv8©ÿJÛ¡¥ráã e&¯šŸ?~qãüEŸnZÏòúÚNO,ùLÍߥµ5,“\zuí2«?ܸ̦Ÿ«]æÅ5­$•ž¿ ¶Œå×´|Î̳l˜–ZñEsÞloŒ$Í)#m>$©2}©ç2­“È~jî!͇ëgbèªÙ‡`Ê£s½ŽÄFŸ™ 0åu™_÷Zó÷äÆW+¹ôê¹SZ3n¬“Üä³sI*½4\¬ß“›}NÉÍ쯉±BLr‹k”Ü 0¥ç.°]Ö2óìù’¤Ô+¿¨ÔŠ/ΘgÌp“Úr~8ÉZªb² 1©m¾d>fÌÌã°]wz»/+½Ý—%IÓÿ;;œôêê᤯Ø>O’¦ 6¯ýêÜC’¦ÿÒn$)ýº¯)½ã×$IÅÿyc¹Q–Ùü>¦ºW¦¾7¦fùª¡¥Ì>=1RÕu1ûýÀq½VoLÿ›œ¯ ŠbÞv³ù8èfsúϜË` ?=¶;•lbâö#l¯gõÆp] àM}hñb¤.}!žÑw…*ÅKU)^*#3ÛKSÕãV"{•oŸNý³ºýQ7¹ÙçUzñÂæË¸èI½ò šyö|Û^™ ¥_õå®5Yúu_s½lñ¿ßÝ0­ïõßð³:’ÌkcêeÞxƒ¦þó´Æé³ÃJ~›| Ú!¦]ßË”‰ÛÌá¦ÁcîŽeõ×ÄÔ_3ã–¯AÆnx)h屯á%¿Ø /5,órãðR;’[\£ÒóÔ /µ 3Õ=2Ö›¨ÕãÕÌö=0qзS]h èÄ’Ù톹ò«¯Éìþ¦ëÏìù]M=tjM¯Lf¯ïÚV´þ™V½2sÿúä†;—ꯑ™¼oeÃK¨•=òNMÜqDMOLö軯“©¿FfüÖÃ5x=4@+õÃIÕÃL¡]##™CKNÿ5s®Wfj~¸ÉÈ\ÙñI'1d]3ãð_=;Üøê&ÿõsv™Ù!¥¹™Öo )IæPSé¹ \õÌø)µÍì51|º b¬ð2õ›SÌ0Su±oÿ¾?¨ÙGv·_×÷ÄÌõÐ,ðc]èkw¯ß²ÇÜUóŸŽkn¿æ54ewML'a¦íkd¬»•ZÝ~]™¾¬£kdì”'.¶½ÀwnþØÇÚºF¦¥5Õ\#c»Ì˪¹F¦a¾Í°R}oLÌ<þÇkdz…u·’Ý÷È´º[ÉNõwɘ½1ueZ!Ææë{d ¼ý6Iß#3bf/øµÂŒÝ÷ÈXw+9Ý~=êNÛßø«k×ÈTÊ_ŒWbŒÔ'U™¹¬ahÉH_QóéÄê•‘f{cšH |JåÂÇUž¨½sɺk)1x•Êã7 -µºkÉÄÆŸQyíG†–’Kç{h’Ë>«Òê7 -Ußµ”Üôs*½ô¡¦w.yZjvÌÌÓç)µåµJmy­fž>oî®%IJmufž:·æ®¥Ô6×iæ‰s†–ªïZr#ýê¯hú±sjîZjXfûë5ýèÙ w.UßµÔMÖãÕ³BLß®ßVñ‘3T|ØþKñübb,™}¾oöÌ—ç¥~F×¶·nBMÑþ–ç¥~†Ïåy©Ÿóñ`S^@u0t§Í½m´‘«ú9—çí˜ð·~m½G8—çí=ÂEýÚzŽßÇ„·mr>&j£P /ïÞÊóR?oç ëgk/ÙÅ×ÿ~½jÕ*-¹â’¤;ö_77ÿµb«+·_€Þãõº—vd€ï†B¾³®g ×Ȁتé‘Éçs!U€NT<ÎCÜÑ#b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ Ó¦\.çj™êG'åµ*Ãi^;ÏiVW·Ûá'7í×j™NÚÝí>iöpSŽ_º¹o¢\‡¸«nðÚÓíë¢Ûõ z} ýµºPÚÏI*Ôµ/@¹\Nù|¾å´ ëàv^}ݪÿn6/(nÚ/È6vó‚ {ÿFQ··¡·y·-Ì:±î…~ õzd|äôÂÈçóŽ'Èfó¬òœ–i÷„õ®›ök§›µk;ëD=2]Òé Ò:Q;õ–„­>Øõ XËx©wXÛêG;;mw³6³«CõòvËzYO«}Ónížçv»Ü®»Y¨­.³~y§ú8ÕÕM»ûÕ¶Í>´[Ž—^M§ý×l§:ØÕ±Ýõ6[·_íÑlý õµêõXv[~}]»… v/6»¡ÙAìô7ó:Õîg·òfíZÿ¢tªS§õtÚn7mÖlžÛöídß´[G·uuZÖíºNN­Êt3ßk;·»¼Ó Ô‰_å¸ÑîkÕëqÒª?ާöhõž»_«Ëí´—}ß©DW׿Âðð!>>ìjø&—ËÍ=êÿöãM§z=n_Xa{ýÍÙ>~•ÛªœNÖô¾iV~ëö³-:­ŸÛçûµ–³NÜRc˜¯?þ£òZõã¸ig[úkµû5¬sM¤zd>Pf•Ökx8§w>U×]wzØÕêHu¢­þÛn¹ê7˜VI×)!;ñ34ʼn›v•ÂiŸ8ì/u¬>IZ‡©Ù6D­®qåDZå}±P_« eý‘ 2ÃÃ9IéÔ´2ýæ´o~ó§zó[7ѽwnå"ÀîSSõ´f¡¦ÀUÝì5éVûDéÚ‰×:6ëÒî¶v>!‡]׸ ¢7#Jû"*õh&ì:6û´È -I…‚”N&%í$IÚsÏtÐAéí‡Ýnå\ªÿDaq{btê5p:0œÖWÍÚ¯:°µZƩܰ_è­Ä¡GÍM=¢RW'ÕõkU×nm‹_ëqÓûTÿZ âuáå8 ¢­ƒÚq|­vóZ·Û =2ûï›ÓšÕ’‘Œä&’ö—*OJƨ.ºðýäÞíuòÉ·êÆ »ª’ìˆf'Ú(Žfݹn»z¶ÙúØ•åçúZ ê¾ÝmðÚíÞI[y}®C­Öíö$ì¶§º¶óú°{¾Ûzy}ð«œN´ÓÕ˶ª»ÇM³öðërS7‚~­vr,{m·mÜ)#ŸÏW†‡‡522芚Ùã 9­[/-’-ÝBÒrIë4=ñ¸ÒYéÐCÕ}¬Ð=wZ°Ä¡7i!Šk»ÇµÞAéf{ÐöÝ•ÏçµjÕªh -J©¤”ɤ$MIú‹¤ŒRIsþEçÿZ…BR§žö“k ¢&ô¡¥=^ŸÓ† Rv@êÌJš”T4&#³™4þ¢ro}^ø¤Fîß.äÚ@´tk˜5.hÞj9`÷œ^^#% iñ¢¤¤´*“ãº$¡ý^#i¹”zI2*zÿ{«Ÿç·Óé§ÿP7ܰ2Ìj]Åq8âÒîq©g·„Ùì‹p„:´T˜f&¥Á>IÙAý覲e½é² £¬gž–”YªÒzéÐÞÖþ{?©—×…Ye!¡ëÚ˜Á¬ÙsÒÊqIýÊê ’^§‹ß?(iPɤ¤ŠtáûÔèXŸN=ëæ0« ""´ ³çö9•ŠR_RÒFƒ2¯™–4¨ÅÚDÒR­-I*HC›I¤Ã}Bî÷¤^xnQXÕZ5¯Éö›½1RAK²iI*©(©¬-—$­‘´X2$¥¤³Þù{MO'tÖ»o«ê "B 2{m—SqJHJéŃRÅ .okŸ¤¥èÒ+}Ú{Ÿõ’J’ŠÒЦšY#­<áQí´ã zaõ²0ª"$” 3ºAJ&¤L6%¥ÓÒ† IÒÊãÆ%•µ|ùVÚî5ý:à€µæˆÓä©o‰R Iéü³~£ÑõzÏÙߣú "ºdöÜÚìIRf`@š.J“%©,­X^‘4®å[ï¨L¶¢;—¥ IÆ$MI‹—I륕‡ÿY»íò¬V¯¡W€^Öõ 36j®´/eH™¤46)•%I»ì$½vó„–¿rm³õ3浿32ޝ“²ƒšž‘úKgžð°Öõé¸ïéö&€ˆèjÙg«œŠ“RÒ†2R©$§¥ŠÌ/óÝ\ÚõõE]ã}:èÀgÌk€K2çšÃO©l¿¦^–ÎYù_ÚvÅz%B77DHWƒÌØØlˆé“’ýÒä´ÙS–ÙóR‘vß«"i^½å:3ÀXó‹3Ò䤌—ɘ‘Ô']xƃZ½a@Guw77DDׂ̾+ršš”Ò );”1MaÊìq™‘ùsTÚ÷ k•Ñ“ÚjÅŒy}LIóAgíz©o@}ƒ}Ò˜tÊaÒöÛ®Qª¿Ô­ÍÒµ 3>*%*R&-%‡²ÒĤ4S1CŠÕó2&í¶SA›-™Ô²MËæ?¶‚Œ$MLI“ãÒæ›kº -“Þ}ì#Z?–Ò1ÇÞÑ­MÑ• ³÷æ³½1†4¸hH2 3ÈXÃFUÃK™E%}ïšG¤>™AÆš's¾^Z-õ )½dP¥5ÒOyD¯Z±NÉ´ÑMÒ• 3ºNª”¥l_BÆ¢~i¼PÛS‘ùͽƒ’¤ÜñkÌ “™-Àê±1$Í—¿BFYRZúÈi÷kõhZGÃÿ` —döZ:ß“ì—fJÒD¡¶'¦"iHzè}2–m,c0£vÞF¥Õ2ï\ªh~ˆ©,éťДÌJë¥Þögí¸íjYzeè%™Â¸ù?•ÒIÉèï“ÆÇç/îµzZdþ<ù‚AIk%-Õ_Ÿ[ªË>½­´‘jC$M•¤Õk¥6VqJÊ.“N8øOšØÕñÇÝô&€ˆ4Èì½8§Â„yƒÒ`FRIš*Ö„—¹Ç¤ôØs£’–i×W¢­ߤTzÿÚÀS};öúõR"¡d¶O¥ÕÒyÇ<¤¡ì”2Å 7 DH Afº(•¦Í»•’ÉÙ!%f²IT= CÊH‡ï»‰¤”þþRBß¹é Úo¿ æÿZ24¿¬õÜ™iÝZ%+†¦ŠÒ¢%Ò[öxBë Ù 7 DH AfbÒ¼$¦X”6¬+©°fF륉ÑÙÇìï“ë%½(ÝuÃóúäÙYöÎQ?{€ÞãNÿ.6Ô.?1*6T4ùü˜6¬RqJÒŒ´ûÏjª˜Ðg{+v.—kxtƒ_ë餜°ž´Vu‹BÛGi=QÞ—zK*ÈÂÒË“fçÉT±"£"™ãC )•–>zúãJk|Bzú©\–*6Ï«h¶ƒ&% õKš‘~ýÇ­4Ø_V©Ü¿-ÈårÊçó®§µ¾¸ñk;J{¡ºm‚>Ù¢"Ð óp9¯í‡r+H«×'”¨TÌq¦rÝ‚ Ies„éÅ—%æíÚ’T±nD*×.+™Ë÷§¥b1¡koÙ]¿øÝ«´ñâ %Œd›""Ð #Ifòºð’oiºV*U–Ñôi»Þç'T$¥%gRzüïkñ`AÉdIÓ•®ÿSï†O¨õ]ïíί^¦¾šî¥L»å½–cÕ«zy·ÛÑlÕåÚmwýüvËuú»þùÍÚ¯ýÛ¬Mü:nœÚ¦~š›º6k7å»Yø%ð #IŸÿì™ú‡£~¦¡þ‰Ú “PíâYªÿ®T-+5ôÌ’ŒDYË6šT¢RQ1Ù§|ýØ`6Djù†-9Ÿ ëßø[=ÇédnWŽÛ2ƒ,Çív¸YG§íá¦î^¶ÅÍzZ•ãµí›Íw í®³>(YÚ)ßÍ:3üÒ• #IÿzûAÝZUàìÞø»õÆì×z¢VŽ×rý\·¶%Œ“x;íéfü(¿Ýe •®™…ªÝO¶nç{áW™AÔm¡iÖFõa ×OÜ´€ dÚä¶[¼Õ2A¼™G½—e!igÿ2”B{N÷¯ŠíQ µ‡&®½7võîd[ªŸ×6‘¼×}!#â™69]CPý Ón™væÛ­ÏM€Û2ý,Ç˰A'umÖí´»Ó²n¶¥ÝýÛÉõ)^Ž«v¯W©¯«— ~›m3CK‚däóùÊðð°FFF® b†!‚…©ÝýÊq ù|^«V­bh ÄCK@ócHÂBgœð†N÷#Ç€01´b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b‹ b+v€nÊåraWaÁÊçóm-?<<LEzœamï Î2è9•J%ì*,(†ax~îÈȈ5½ˆ ƒžÄ Ôœ8„kd@ldÐó¬ëføÙÞOˆ#ŸÏW†‡‡éjGOÈårªT*sÇ{.—cxÄ«Ýòù¼V­Z%ÉÛž¼ïøËÚÓèÖñN zoøÞÐn¢‚ ƒžÆ0‰7´€¨ È §E¡g!—ËÕ<ìæ»™ÖMQh7¯šµ];íö>`"È §…}2ª¾ÖÄz´ªS®ë »ÝÀBAO 38’fa& !FŠw €…… ƒž§ž…¨„)^íÖ‰VÃ~ÕËÕ/ ;øf_ô´¨ƒV¢b¤ø´›7Aî͛í‡úyQÛgÀBEAO‹ËÉÆnŠJ]£T/š…¿Ë,‚ zZœN>Q 3Q¨C70DDA=-*ÁÀ­¨„™(Ô¡za¸ãb_ô´0OTNw'µ nnÑZ¯žàýúþ¡G=-ìž»Pâ¦>a÷Ì„ÝnÝÐ_~¡·ô´(œlZÕÁi~Ø,®Z…¯Ë¶Z@0ZBOc8ÀÚ @TdÐÓøí í *2èiô,xC»Õ"Øá!È §qò†vô´êÿ‘ÃÏö@ØŒ|>_ÖÈÈHØu—ËåT©T8Þ}’ÏçµjÕª¹ßÛÁûŽÿ¬ýAzu¼sû5zoô°0dÐs û ˜E Ð)‚ €P(ø ƒžB@t°/ø»–@ld@ld@ld@ld@ld@ld@ld@ld@ld@l¥$éòË/»m3$U®€ÿ¤µ%œEBIEND®B`‚bitpim-1.0.7+dfsg1/help/phone-lgvx8610.htd0000644001616600161660000000102611041674517016213 0ustar amuamu#include "pagestart.h"

What works

Phonebook, calendar, wallpaper, ringers, memo, call history, SMS, and file system. BitPim can autodetect this phone if it is connected to the PC via a straight USB cable.

Cable

This phone was successfully tested with a microUSB straight data cable.

Contents

BEGIN_TOC TOC_0 TOCITEM_0(Notes,phone-lgvx8610-notes.htm) TOCITEM_0(Howtos,phone-lgvx8610-howtos.htm) ENDTOC_0 END_TOC #include "pageend.h" bitpim-1.0.7+dfsg1/help/faq-phonefeaturessupport.htd0000644001616600161660000000061310360163373020654 0ustar amuamu#include "pagestart.h"

It is our intention to support every feature of every phone. The features and phones supported depend on access to the phones, developer priorities, information and time available. There is no formal plan, so the answer is "whenever a developer gets round to it". If you would like it sooner than that then help. #include "pageend.h" bitpim-1.0.7+dfsg1/help/tour-overview.htd0000644001616600161660000000044610360163373016443 0ustar amuamu#include "pagestart.h"

BitPim is a program that allows you to view and manipulate data on cell phones. This includes the PhoneBook, Calendar, WallPapers and RingTones, as well as the embedded filesystem (for expert users).

BitPim runs on Windows, Linux and Mac. #include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-lgvx9200.htd0000644001616600161660000000102611235361770016206 0ustar amuamu#include "pagestart.h"

What works

Phonebook, calendar, wallpaper, ringers, memo, call history, SMS, and file system. BitPim can autodetect this phone if it is connected to the PC via a straight USB cable.

Cable

This phone was successfully tested with a microUSB straight data cable.

Contents

BEGIN_TOC TOC_0 TOCITEM_0(Notes,phone-lgvx9200-notes.htm) TOCITEM_0(Howtos,phone-lgvx9200-howtos.htm) ENDTOC_0 END_TOC #include "pageend.h" bitpim-1.0.7+dfsg1/help/screen-restorefiles.png0000644001616600161660000001505407726500520017600 0ustar amuamu‰PNG  IHDRiK}ssBIT|dˆãIDATxœíÝÿŽ%GuÀñêY1X`#Å$!Èäß¼@¤¹¯ƒ!cŒ™`ÇÆöZ8óy„»o¿ "(‘#áGvwnþ¸Ó³==UÕuªNuŸêþ~¤ÕνÝ]uªºçLݺ÷Vwûýþàæìv;wêœsgggKǸ¸¸pιc’vι, ÀïÎÒÂNÇOìvû'ºþÿnô\÷dÛp{7Ø©þ8Ú^XÞñ¿ñseuh—w|J·Ýôcnôãñ)ú±¸¼áþ•üÓ_ýòÆcFÒ`Ø­‘4 î¯ü¥jy]×¹O¾öÏÞm$iÈ õa‹ý~ÝÎtF’ÃHÒ`XtNúpyÜÖÝýŽz0–<úð+×?Ÿ~ö=÷èßÿæøóŸüãqû¿ýõññŸ}þà˜´ÛíœsþyæØ¶˜¤7»“¿W úä¹ûîä¹w¯“óãŸ}-ضÓ?þÞ“ŸŸ/¸ßXŸ OÿüýëÎ9÷ð'_ºÞ§OÐw_øÀÝýÂÇç~ôÅä:´aœs´s‰#éÃãogWsç©7n~Ÿ¾ÐɧÞÑ*jw¿ðæâf<=ž£–Èzãйνê}óÐ7åÑ»ó‡ÿà.÷MwùÛ—Ÿ—š~BºjÓ5GÐ’—ÕSûk—÷ÔT€¤,­zJû.E_gNÒø4þ€¤öåT,9sctÎMöAÎ5‡e¨Œ¤Ç yø¸æg«ŸÔ'»°%ûkŽSËJÙ/¶f=ÇŒïº ñÈT+>_ݱä{~*Þ”XjĸÄyE=j#é®ëÜáp˜%A/b߈&ÕøâŸ*{ sN)”ô]) }*4’´©NwÌ9‚޽LÔí…Ê^»-´µÿC<üßšbı nRI÷SZ z8íà›‚MIøæóRß$,-;sL¬}𣍔~œ«ïrçMSãK-«ôøX™SmNÝ^òfujü’ëóRîÐAǦ0rß8«ý¦\(æ©øKÚWRÏTÙ’c5Ž×,¿t ,§/5û;åIŒ¥×–Á×±I-Ìó¶#êÛô×Â[øÐŽQsº E%ŸÓžK 1b>YIš•ëÚµõ_ü¹Ú_{Z Û!NÒ¬ý ó13ÝÁ;˶"åÞ†=î̆qg0Œà]±¶îµ/žPŒKÇÞ×?‡Vœ5Ú;Wì€IzæXipíèCXÅYÀ0³wf‰­QÝ?îÿùŽ m÷½4¯9RZ¶ïñ°Þ©r}†1ŽÛPRO¬_sú.¥-Òºr§"Be¤ž»”ºÚš¼3‹/©˜/i„ö×.;5îX¹)}—ÚI=¥}'Ù_Z—¤œÐö¾½Ò2IÔXÒ*îÌ"­C²¿fü©e¥ìÛG³é1’ºc#锲Rþ@j,£Ë|5–ÔäY¦ê‘Œ|Æ¿èsµABs Ø”º$ûæÆIK޶ Ù;³Ä^R—Ö-yy¿6­´ujÊX‹&îÌ2õ&ôx­}k•3×(1uî[»LMãW>50jÇ’ÌÞ™eøË盂Ú}¿´©o––‹9&Ö¾Z}šò¸Î'WêtQ¨®œöÓ诔~æbúÎ,±)ŒÜ7Îj¿)Šy*þ’ö•Ô3Uvα±Äíöi÷ƒÆâCÌW£§6’î1çHÐSõHF!ã„2W$$£uº$û–ô½ekiÚ§:Ý1gr‹½ô,­;çåýZhõ]ëýÖrìX•éŽÚkËN½á"=^kßZåÌ5ŠKûÎ1~E’k޾¨Ù¹É£§6’ö½q£QÞøçÐãжñö!_¼%eÇbމµ¯VŸ¦<îŸóI‰+çšH‰©´>Í~pNç•´ë¦:Ý¡=‚ŽMaä¾qVûM¹PÌSñ—´¯¤ž©²KíŸ+‰9¶-ô¸´¿çèÿÒs…mà‡`wf1®öü~nù5ûN+F` ¸3ËÆ´ðZˆ˜ wfØ“ø3 ÆYÀ0¦;®Xûâ@lÌÔçç’SÿßF\º_ $éhñÓ1·Øn@Š$ †™MÒ%w±n •3¾kÆxå»’²}‡õN•ëã[H>ÔI=±~•ö]¨î”¾šŠ?µ¿c}´¨Éoú’jl‰ÌØþÚe§Æ+7uU¶”6Hê)í;_}ÎÉ—/Í)#§˜IKHç&¥«²iI-«ö"PÒý$Çh,T£  UMޤcˉ:ÇYJë’ìk¡€5k2I;ÇYjÙR[41Ý‘ú¦SêñZûÖ*g®ùÔÔ¹ïµ70fv$=œvH¹“FhÛxûo”\Rv,æ˜Xû4Gò)ýXÒw¹4ÊJi Ð"³IÚ9îÌ’ƒæÝ>´Ú.‰“;›aMLwÀV™I×ÖÂHk‹wfðwfÙ’+Ðî̆1' †qg0Œ;³€aLw\±öŇÐ2£©ûÎiÍß\Ô4Õô|HÒ+ÐÂ'6Zˆ±6ú9ª'iF¯j’Ö\dHrŽ’»‹h”í{,½cŠo»õ;³ÄÚ‘ãT9}—Úžœs’ÛIù@µoÖ¼ð|‰;³”×S³ï¦bt.|÷É9)¹RË-iK,ÀGe$1Ì1'­C²¿fü©eÕ^Jº_î1¹‹DÕª³d­¶”ÆíQI÷#ƒ9ôT=’QÉxD3W$$£uº$û.Ýwµê´x`›T§;漨c/E5Ö&•½v-ö]­:·|À•éŽÚëøN½#=^kßZåÌ5?™:÷­Y^Ž”7îæ¬s õ¡j#éþåa—›¾—ž¡QûxÛxû/Þ’²c1ÇÄÚW«OS÷ÏùHû®„äœä^ ’:5ÎIJßÎ)Owh cS¹o4Õ~S.óTü%í+©gªlɱ±}Jc¬q¾sû*·-¥çÛÄ7À0îÌb\íùýÜò[è;` ¸3ËÆ´–\[‹ÐÆYÀ0æ¤À0î̆qg0ŒéŽ+Ö¾HZ:3uß9iÔ?UÆÚ¨]çÒ}‚y¤W` Ÿ€XC´Ñ'pŽ;³€iܙťß]$µlßãa½Såúø–µERO¬_5ûnWÉù•Ä)=G’z%Û¦bÓè¬wfQ.;5îX¹)}—ÚI=5ûNR–fœ©×aNÛ§ú6õü8Ç\ÆY”ËÖ(«ö"PÒýrÑZ@¨$Nߊ‚ãÇ5â(YØI;´;³Œ~Qçjƒ„4™”Ö%Ùw©¾«1’,)ÓâuƒuàÎ,²׮•¾«Qn+mǶpg–‚}k•3×|cêÜ·Vy¹í*³厧@¦®SÉu7÷1sÒÛÁY<`rËŽÅk_­>MyÜ?ç#í»”í5âL•R¦äÚÐU§ôÖ‰;³(Šy*þ’ö•Ô3U¶äØ’òköOêñ)eæôOîù)=—X¾q†qgãjÏïÏù±8rÜ™ec–J®$u wfØ“ø3 ÆYÀ0¦;®Xûb@h)ÌÔ}çÄ·íÒÕúV&Ö‹$½V>91W‚Ñjï ÑʹB;HÒ`˜Ù$=µ¸M‡ŠÐ´@hûpMŒásãµJÊö=Ö;U®o¡øP[$õÄúUÒw¡m©e…âžêgI{CÇå¶}*†Ôk$vÞ&¿qèKªÃæ[_:uÁ›Ò²S㎕›ò ›ÚI=%}7^`+§,ߢXyÒöŸÓˆ7CJì9çÛcv$-!ç“ì¯9‡˜ZVíE ¤û•“ZVîBS«éiVs½Ò(ÛÕäHzjÉKÉ/ãx43Uö$£uº$ûÆâZzd-i2I;ÇYjYâ•€°&¦;¦Þ|‘¯µo­ræí¥Î}ÏYß–Ñ?ð1;’N;ø¦ BSãmãíC¾QrIÙ±˜cbíÓɧô£Fß ß˜K)«–P ¾7¥ñjœ—”þÌ&iç¸3Kj %õL•-9v*I\©mÌiojY9ñhî 8×Ètl•é‘tm-ŒZ´cÔš‚h¡ï€5àÎ,CrÚÂYÀ0æ¤À0î̆qg0ŒéŽ+Ö¾D[3õù¹,ñÎZ¬Çç3s‹mÂ$éàÛÆù_·êIš¿â¯j’Ö\dHrG é6|‹¯—”í{<¬wª\ߢò¡¶Hê‰õ«¤ï$}‘_ɹo·Ÿ¯_©×ÝTùhGµoÖ¼@|IµÆ6rÊN;VnJߥ¶AROiߥJOº]+^+ñùþ0Çê •¶©Œ¤cÙç˜/“Ö!Ù_3þÔ²j/%Ý/åßÊ}ãÇ%õ®=¾”}5ÏÚ¡6’ö½ì­uLÕ#=ø~Açþ#3Ecô*©K²¯…þÖLuºcÎä{ɨ±Îo¨ìµÛR[¨LwÔ^wêéñZûÖ*g®yÄÔ¹ïTý«þüÏ!¯õøÖPô©¤µ/øá´ƒo "4j÷}Ò õMÂÒ²c1ÇÄÚW«OS÷ÏùÔHn’þ ÅWsºªv|}šrNÑÕ鎿´¡²sß8«ý¦\(æ©øKÚWRÏTÙ’csê׌/eËñåžÇÒ˜aß8ø3‹qµç÷sËo¡ï€5àÎ,³æäj½mÖãƒMÜ™ cN #I€a$i0Œ$ †‘¤À0’4F’ÃHÒ`I #I€a$i0Œ$ †‘¤À0’4F’ÃHÒ`I #I€a$i0Œ$ †‘¤À0’4F’ÃHÒ`I #I€a$i0Œ$ †‘¤À0’4F’ÃHÒ`I #I€a$i0Œ$ †‘¤À0’4F’ÃHÒ`I #I€a$i0Œ$ †‘¤À0’4F’ÃNSwÜï÷îÁƒ5cŒ$%éóóóÚq<’’4#hXsÒ`I #I€a$i0Œ$ †‘¤À0’4F’ÃHÒ`XÒ7÷û}å0`[ÎÏÏ“¾ÍÍÚ`kw€aÌI€a$i0Œ$ †‘¤À0’4F’ÃHÒ`I #I€aIß8\Ân·[:„Õ’®Å¹¨Gz.ÎÎÎê²q]×™]£Èl’vιÃá°t«Òu]ö±œ ]%ç‚etYMÎ=ÓIÚ9.H-"çB‡õ¤[˜“ÃHÒÈÒÏSó¿ì@ªÛï÷‡³³3s/ew»;æâjÕ~¿w÷îÝ»þYb|.v»/Ù3ôýVr.,þ®¶®?Ö®é>.FÒ³v1·‚~C’4Äx鞇~C’´Àn·»ñÏ·=å¹ÖÍ5"Œõ¤_­œƒVFÒS×ù¬Ä±óÁ³Â7;57»Ö¹Ûµ¶«¶ú-ç:G]Œ¤„.Òý~ü ¿æ {­íªÍz¿å\稑tkNÐÎÙlß8‰„âëcî?çôµ~K5Œ;Ö×ãþõÊsÊÝ2’´²–SÍÙ¾”œô%úxÛ\çl ×EJ_‡~ïË4KIZYè‚[“9ÛK´ÚeÖ¶†ë"eêCÒÆÖûc$é Öž¨-¶«…9S‹ý&ñj•ÛHÒ•¬9Q[l—µx|,ö[ª9boµojãÓ B/ñ¦.ܵ¾+ÞÂ/“Ög¬5Yï·Ü뼄Åód #éD¾ 8åÂ]ãˆÚZ{¤ç†Ow„Mõeh{JÛbeçþ~mIZ å"Ì9®5K¿ièÛ&ÙwjÿZZ¹r®óa²í+=O©1­Óãehú 9HÒÛò¨¦ý†$iˆµ<"\2Q¶ÜoXIbŒóÐoÈA’†X?"äÿ¼ÿ nŸµ{ÅÛg¡Lɹ°ø»Úºþ|X{¥ÓÇeþ#xÖ:nË8ÀüL'é®ë–W8vðÇr[L'i7ñÇr{Ì&iF vp.ìà\lŸîÃHÒ`I #I€a$i0Œ$ †:çÜÅÅÅÒq<:çÜaé ~ÿøÚÍÚZƒ–,IEND®B`‚bitpim-1.0.7+dfsg1/help/screen-protocollog.png0000644001616600161660000014711510410665462017442 0ustar amuamu‰PNG  IHDRq×ÌDÁgAMA± üaÎIDATx^í`UþÇW=…kzÊwþïÔÓ;OÏóîÄ󬧯³ìXQ¥ª ]‘D¤ˆ…&‚” tB ’F¤÷Fz¡¥P‚÷ÿm&Œã”7ovg³³Éw}¬›Ù7oÞû¼73ŸýM;oÚª2›äõIàáóλ€&üïLûä Îëúò¢¾öÏ}.°ýä[ÇYz?ï‚ þwö¶ŽïmçŸo;ßfûþ\)ô^ †ØW:¼@¸œwš+2þ'ÝÅÐç³?sJø‹V«‹l§;luúÜéómýÄ>ÍÖaOg:mðÂÿÙl?éÌüÛ™ÿÙNÕ}ðÊ/~TÔ+ é¼'Ò)]4²¥Ï„³ý¦ýïÿ>²§?ÍýßuŸýoÀ¢ÿ Xö¿;ÛÓÝËíéÞšIÈ€ ÀO€±Bá+þ5 9ATµ& F'¾ ާLvüq"3¤D¢xÑ;¶{3m?øêlÓ¾*¥D6yþkõ$”ç¿s¬Ï¤ï)«¨•W/ø%2Ë¿}ùC"Å’t">ƒ€€€XŠ)œ„Z Ÿ5B‡‚鉉&Jÿ‚Œb‘RŸqg)Ù^:a»+óýå%”ìNi»/Ùöt…í¹Âó†7R²<,$òË Æ¶^0î4Y¦mâÙ &ü’ð™ÞʼnÂaâEã¿§0§ @@L'pÞ;ß#ð u2 "'›Îsúüá§.ÕrÁðcç iµ½qÜöJçû«ÇéÏ®)CšmBÜd§o5Ø^j´'šBéùJÛýY¶»‹»â”v§|<ÅöJééõZÛ°zÁ/É,…d÷Kdÿ–ê$¦áǨ~H    –#ðfÓ”†6ž7´SS²½Rk{©ÆžUw%’E!=WnOO—Q:o`±í1Jù¶‡óì‰>PÞvÀö»íö¥íæ½ö¯É)Ÿ+ìJ‚\vj¥h–]ÁËÑÇmb:Τ¯ìö)5YA]‘@x ÔÛ#€€€k2Ê’  eØ•H(É$)ýƧÓ))Ý—L§Tj9¥pL\zX\ðHû gm°½^oO´Sj,¨.€€€€€„À…/WXÞPÝtæ_4Í+È•ã…,k¸ð… »J>]qá³¥#¾¬©nÞ^öw/¯ÿ ñÓ!6Jô²ýñ¶!Þ6/ú“¬T›ÔÝ €€8LÀ3M  NY}òKÿSËvžš»ùääÕ'Ç®89jIûˆ/Û‡}ÞþÆ¢ö×?my~Û sÛžþ¨íÑé­÷Nn½ùíã\yÓàŠnšSHçÉ‘T“¦Ï¦ùîË£›–5¯šÛøÙä†ycfªŸ5¢~ú°ºÞ¨ûàõºÉ/×Nx¡fìÓÕ£­roÙ ›ÓúSðã7U7œêŠSÞ˜¤â”öÃätJå+¥dÞC¼||ÎÙ$i¥†Ø§ !›¤ 16oû//…S" `”€Ã;W̽œ<™™Üð/ÛWì>µ*äô‚m§¦ùœœ°êä»ËI+Oÿ®•C?kmaûËóÚžÓöÄ̶û§¶Þ6öøõoTþæ¡0šWtJ§ !§|Üî”õ³†ݺâ˜ïªæ5 šOkütBÃÜwëgª›9œ´²þáuS_«›ôr͸g«ÇS=êñêQÙ†¹·rðe/Ü’ùÄ ¾·þÎ^“[3íIpJ:Ÿ²ëØ÷Ò.‹>^1Þ6!<óG[ŒÍžH.…÷Θe§Vz{É㔽fLüp±=š    |ÈÆžý¨íƒu'§¯· åÈÅ'‡ÐÁî¹íÏÍnøaÛCS[ï›Øz縖ÛÇ’J¶ÜüNË€·[n}ìÆaUW<)uJi!ºÙÈ 9电ãžmZüAÓÒé$”mc©œÚ /×¾û\õ¨Uo=TõÆ}•¯ÞYùòí4ýD¸oÅ ¥ÏÝ”õä;î¼BÃ)ÿ/Òº¼‹â”Åö€ê jï/á\I!BIIçLR"¹´¿K´2fˆ×:ûRr>¥´UÇÚ¾O/;-ºWýѳ””*&Îròô÷5g>ÛuBwø€€@ï%ðLµ <–i]—CçP¾×¡¶è䫞ôn'¡|xj›×ÊÖ[Þm¹éí–¿n¹qtëßG·þcôñ߬îrÊÎ†Ë ÑuJy!眒®Ëiœ7¶qá{¡ éʇ«Þð"¡¬xáqzų/}öYÕœ²ërJ ]zuÞˆˆÎËTMÈ!‘È!$ùG/Ñ)»–Â…;ÂW¨|¹®+½T#,øg¿›C)8¼>WÔŸ6|$” ͧ~zë.ú¼¯ð§¿f;%¸áp;}^~L9KïÝzòýîë ÏyèƒV:{’„rø'__Ðþâœö§g¶=öAÛý“[ïßzëØ–¾Ýú·Ñ­×l½nDë £Zo}ü†aUxb4N)-D×)å…œsÊêáÑÙ“öCÞ3‡×M}],§jèýU¯Ý]ùÒ­?å“×U<}CÙ37f ¼aǰ×äö|»@þ5]rì[ê”$¿ƒª)HéC—ãt*£]";߇ØlÞ]ÑÊ.¡´Oô²_£sÁkt{ózA+E§”úâOï þ$¡œ²+Û€í?|þÝú³õ~uCÙþäô¶‡ßo»oRëã[oÛò÷·[¯Ýú瑭׌h½vdë_Gÿë›U¿\î”b!T&£úV^Èã]çS’SÖMRGWyÓû¤WkÇ>/J$=ùƒPüsÅã×T ¼¶ìé¿f?ñW¿;~ßå”ÿÎ×pJºYÝ]òåºá*oRÉsJŠSJÒn™´ßoˆ„’n*Ôé”Mö'?þÈ)ödÙï¢I‚H1H±Zô˜H©M‹Rû$;¿=yªãgvÈf¡Ò(´IËÏ~¶«Þé3M™¾¥E˜ @@@,N€ìå?Zè²nº¸ûµöërèLÊ'g¶=<­õ¾÷[ïœÔzË„Öǵ^÷NëŸÆ´ýqtÛ5£Z¯}üÚa5—?Õ§ì’%i!4Q}+/„â”+izåkÿ¡ËºíwOyΤ¬÷\õÛOÊ¢žUÏ\WõÔŸ*ŸøcåÀkÊŸº6ç±kýo»ü§B•tÛsû5:tµE/ª²ŸžÒù\p{òܵÞÂQï®cß^]ÁíÒ¹•ä”ìŠSŠZ©Œ¾n÷ÏþÙÍ~Tì!LÉgQ7íNùRã¨Õ'([fNÝÏnüN:‹0ﶘ#³¿Ê>ÏÚtdöª»³¶œ¹ð9²áÎÇ™#€‡À"ÞA€Ôå¶±-ÏÌn{q®](éýYº:‡œòöû>h»kjë-“ZoœÐö—qm×¼ÛvåÛmWi»z̉«‡ÕôôGN)-„ÊdBßÊ y¦Q8)³òåÛjß}¦n‹ut¡÷økÆ>k¿óùȇE«~ñÆêçþRýô5Õ¯¬xUÅ“Wç>zµÿ¿ûÛòîbÛ6!TI×}÷ûôÇNIûãÁMtåpq·ýŠïs}w^£cŸòÃõ:ÞÞ1>Þ­¼`È1Û«Çíé¥fQÉcâJéÏ¢’Ã}ž(”~¥õyÔêÖúcßÓ•:tbeßÿî—f‹¥¢ÄÏ>wîúÍþ” @@@,N€4ææ·[ŸÑúüœ¶>n4§®àèÝöÈŒ¶ÿNoûÏ´¶[Þoûû”¶¿Ll¿z|ûƵýáݶ?ŒiùÃКˉ¶›\§ðÈ ±;¥v!ô­¼»SÚƒ}Ïß\=úñÚ÷ž¯ÿBÝ{ƒè2ðšwÊ⃵ƒþRûìÕ5Oþ¡fà*ŸøCîCø×eöšÜUa»«Ìî”ʵÇ)íNy=¼Ø§¤S;Ò~gÊΣއ¿í*)^¦Cw¦ìÒÊÎ;ŸÓ¥wy­`·H  =•ÀK'lH à±Hcþ6¢…î=ùä¬6Áçæ´=C:8»ý‘Ym÷Ïj»{fÛ¿§·ý}Zû_¦¶_=©ý÷ãÛ7¶ýwcZú¿Q{ÉÃ1Niÿ²BèOF!ô­¼AÇlÏ¥éåOýî=Yóö“d“µãž«ûŒ(”µÃï>Ÿm9V÷üÕuOÿ¾vàïªû]Þûïp‰½&÷ÕÙ¼ÊíZùb»SþfI§SÒßv§l°ŸùÆq:K’–#D%…€eWl’,ÓþœÆÎheçQoº‘=N9´MHd–¢ðÑgÙŸÒ¯T? W‹ÿô¤ _i”Í®;¯ <”€ð“ @@ Ç ¥¹v؉»'¶<òaë“Þm²  ðçß§·ÿ僓œÚ~ùÄöþãÚûnùÕku?{ ÚnrçBx²BžœÝö¸wÛóÚþ;«í?³ÚnÕ.BsÉ !§tŒ¦—=~måëwW|¤æ'kÞ}ú¡õßÚáÿ©öÃußõO_^÷Dÿª‡ûåßû«À¿ÿ¬Ë)I+)ZùƒSRÄÒî” %¡¤D¦(<×[ˆPŠWêØïLÙõFº…%=hÇÛ'Æ‹>?ü¥óÞ²§‚ˆCN¥WØ/©¡cßöxä}uòŒ=£r:e“&±4i±ZŸeóâO°Ò˜+_;A7 úï”ÖG?ì ÆÉÌòï3Ú¯vòÊ©';ñä¥ï¶ÿrDËÏ_®½è¾Î8e§)) ylfû#3ÛœÕvŸwÛ]³ÚþMNy®Ê,/„‚ƒZhzéƒWV¼tkÕ°ÿV|T¬CͨkGÞWûÖ]uÃþÝðúßÅéõ]ZóÀ/óîúyàß.²×äá#v{´òæ½qJÁ)¯µø~ã8…yì÷§´'=¤‘n?)ÞóÜ~J%=\‡B•t¥—„RxBãùc¾?oÌiJ¶áök±Å‰cæ¡6{èñ¡Rݤϛ“»rʦ b*&¥SÊò‹d3âOžJÀ6¤ <—©Ëï^>ñQ-wŽoùïTu§¼aúÉ?O;yÅÔ“¿™xòâwNþôÍ– _¨=ÿÞÎ8eçøç)DªdòBŸ²½|’2òú]ù3ÿ Û‘V¶ìÝMSj†ß_3ü¾š·î®v{Ý›ëßÐðòŸiz[èúúG.®öúiÞ­\w~—S’V’SÞÞ`Bã¹cß¶Çé¢éfÁ)éþ”äŒv¡$w¤‡4ÆtF%éx7$øî|8ež÷MAÍ Æþï¼w¾§DrII8„Ý•lýé“ÙÂtñ+ásŸWk…<²ébfÙ,bfY~étÙ¼ø@@ ç øx.²±_¿pâÚaö‡.Þ1¾åîI­wOj»krëSZo›Úzóûm7¾ß~íÔö«¦´_>¡ýÒ±'>ªýÂ!-ç?WsÞÝ×}wŽg !1lv–üç×tø»üù•¯ÞQõúÝUoÜ]õú]Õ¯ßQýúm5¯Ý\ûêu/^[ÿüUtà›‚”uü¼êî sÿu¾ÿ_γ×ä‰]¡JrJzÊ·Ý)ÿ/Í´ìtJJ:-’d‘„R°F»PÆØí-| ƒì OÒû:”‡&^0áö4ö‡Ôó6ah€€€8O€lìâ§ÿáÕ#׿yôŸ£Žþëíc·¼slÀ;Ǽ{üãŽßðÞñkß;qÕ¸—¿ÛÒoL õî3äÄù¯µ ¬°ÝFó p²1Ø™ÛÅE÷ÿ¡ä‰ë=ûÏÒAÿ*{ñ–²AÊ^PþÂ?*ÝPõܵUO_UýÄåÕô«¾ÿ—U÷ô)»ýüŒÚ¶ýÉÖ唂V’Svûþ±S ZyÁ¨Ó”.z§£Ï¸³ö4¡3Mú^–.ÿ=¥.§ü±VJŸAØœßH¡ P}¸ãú×Kû=UúûA¥W¿Rqíàò¿¼VöçÁåz½âê×+®|½â÷oT÷½ºßk5¿ZýÓ—j~ò|ÍyOVØ̺êÉPÑ),ÄìÒA…¤ j±G…wიž9j{âݽë[:{R8R–~|컬óvBe¶»ÚîO;ïôó´'ÛcùB:o`±lO—ÙÕó銮ô\ùŸ…‰O%GWxˆî©Œ ÀM€ïñJõµæþb›Wg¢G* éžÂ®?…锄)ôNO÷¦t{~×c¾é=˜‘RÝ)ïO³;e§VŠf)ø¥, ìIÌ/™ñ‡oÅlø  M€Ö;$N]ûa§ƒ ÀA€sår$›ðlÆ®ë¾/OësKaÿ1Í}•4Õç#€€€€Û#ÇlwÚ®Þjë·ÈfƒS¤A@@@Œ€S"     à,8¥³y¢ÁÈ   =›€ Ni³Ù\ÄÈu%»¨Â(Öô¯!\È   V&`À)ɤ/j•àΘ²L),iùF—"«ªV-–Q»(ÝqVØÉÁ$­†óÝÇIU«íºLœl,fè6ÆœRµZΘ¿‡]ŠRžL¯¼LùÛ¢¬‰ÑÖ9<>8±8\¾0£¬9pJ'ybv°>§œRè#müÍVµ ­h¨0³p-­‘U’ý§Ñe‰ U Jë¯\®lYŒd_9Œ…Ý}ʶ¸¾  ŒήA6î!`Ì)µlOš2$ »’J™œ¡2™Q1”N·'Øú¥\Ò¥j¥¬¿V F™HK–ÕYUae5á_œtœˆÊ«µUºÌ‘@@@ÀRŒ9¥ªx‰Æã@ÀI©)<æÁCPV²T¡¤«Ìæ@Ì̧¥e{ íã"+_¹Ý †œRZ%­¶mCBf÷0Ó)hI7;%[Ë ˜ŠÉiÅ •&D.ÅwéåW†È««ÕÒÌÎ;%ã7‰’Œ¡F!3€€€€{ ¸Ä)–†9ñ—Éð69¥jLNœÈŽÆñXµV‹Œ2‘UIZ¬ªO;&Ù²NT5`-Uu¸Eî]‹°tÓœRPáÅUä-GZ”X ¡Â¥%ËœOVOi±Zs1Z$k¯¬¶ÊÂemTm2Cþd~ésUqWí>sR¹Ñ,kÿ0CNW0à”®® Ê—0dçžK¯—4Ós;5r§üé-…ýÇ4÷T¢œYS4E\Q¦2òçÒ0˜² ¦‘Eyú’'ë€K—nˆ‰Y¸xš<   ."`wÊ»‹mWøØú-²Ù.Oc8¥‹j€bA@@@<œÒþÜ$gÀ)!”    ΀S:KУǼ    Ð3h:åÿð>šNé»e%€€€€ð@œ’Ͻ‘ @@@@@›Î§Äù”    ΀S:K°gœW‹V€€€€€3à”pJg À)%èŒÑ›8/ÏɳBO_¨‰õGQG ¦2·¦2§ª‚Þsk«r=®þ¨0€ô`¼NùðUWQ²8¨¤‹ò;%\kV\ºÐšÊ¼¼œ?ß<ïYEO¬øÛßjûõk¼à‚¦~ýšþú×ÚOTÌœQ´c{^néEžY-’–““µ_žؘ°¤Ä¨Âüƒ®X„•ˬ«É-/M/)J)-N­,Ël¨u d6Úª¼êŠÜªòœ²’œâ¬üܬì̬¬ŒÌÌt{¢ÏyY‡Š³+Ër¬Lu^BNÙëâ”ÖwJrÄ„¸œeKó‡=ôðCÔ^qEÃ%—4öésø¼ó÷éÓtÉ%M¿ÿ}ý?ÿYóðC•C†”.]R›Kòat¥UýRT»wUSSÓÜÜ|ôèѦ¦¦¢¢"š’Eß]Šgå'}ÌÊHŒŽ Ž‹ ?x >å`Âä¸}‰Qá;÷DîÎÊH(;”®å—Å…¦Á©ªÈ)-É&e$w<°?3voFXhZ€ê¶­©›6¦nÜ`O[6§¤í‰HK9Y”ŸM³xjÔ@z¹SöPÐLsßA%²vzDÐ#*é¢äÒ¡V]±Ð²’ÜØ˜ÜéßúïêóÎ;“þõ¯š©SJb¢ò(še¯rÀÄÅFfgg544PƧäm OývwòΘô¢’òúúzšØi–‘†–“¹(?%(xGhhÀ{yò»(ONÖ>ÒǬÌÅEÙ%Å9ô^T˜E©° “R^nZZê¾} Qû"”ú˜™ê|Åè¸6…$ÓS3c¢Ów¦‘;®Z™úÅ© ¤ÍöN>=uÚ´ÔÞO{jÚôéö)Ÿ–öíúÔÈ𴜬L,ç@@ÀapJVœ²üPFfF¢4ÕרÃh¢,Íèp—86£+ôN·&¦/´¦*wÓ†ü§ž*ÿͯ›.¼°‰G()Ï…¾ôÒF:î³Î~¨T·Úb©SV”fF„‡P`2§ ôËÍq£…LY±gÁÆ„E[ö}ä³wÄ¢à÷¿Šˬ«oÌÏÏ Ùſݜå¥6ùTVVVWW§g¤îô£Ãîì¹’’âVo 8p0Q·pþ ÉIQ•ž“F9yrú¸±io¿mO£G§ÕõNÆŒI£¯(Ï’Å©Á»Ór³3­t² 0;€8LÀ˜S û`Õ$«AÂÁ€ºcA#Ý6è–ɨžc!Ì‚¼{"ƒ¤IË)eÙhFÝæÍ 8弦ëÖ=Òéæ.ôPqîÖ-ù¯ .£#Ý\@‡¹¹‚”粦£á/¿T¾iC^QïÀ“ŽŠè¨p²º¤ô‚‰KÃçoŒÛ—ZP•Y\VTµ?¯<$)oÕÎýã—†-ßOQLÒÊØ½áF{‘¿ /98dWiié¡C‡ÊÊÊBçjåŒÚ³#xoä¾Üm»£SRö™RœÌDQ(NI¡JJ¹9©ôž™‘LÇÇs³“(ÅD‡ÐŸÎ;eiqvb|ÆêoRgÎL{ï=»D’8Ž‘Niøð´‘#ÓéOá]HÂW$š&¤-[šJÇÁ‹ ²M‚B@@ŒàrJ]WSÛ‹ó®[4×hmØùÙe:PIÝêYÖ)•çDš«wDF(PkAÂtJWcDEæ>ø@åÿý_ƒA›üA=÷»†¨ŠË«­æº D3\}õ»¯¼Bǵ³òJÞ˜í?~Þæ¸äÜ‚CÕÅåµuÍÅUMyåu™Å5d–¾Ñ3VG­òK¨oh¤ægg%é!þ EwùWTTй›ä¬!¡;•óV”gí KK+‰íLßnÉÎNæ_ŠjÎŠÒ : _z(l2;ë`ò~{ÐqoLX|\dÒ¾:Þ“BǾ)N)%ýIIšš’HÙès™ž–ä¼SRr÷®T:¢MHrÇ·ÞJ$’þ|÷]»8Nžl?ê-ûž8Ѥ¤ ¤›ôNÑÊuëR&gV”òþ¨p’f0à”lpöÝóu׉y&­}Üÿàâ/¶--5í´}v™<‘HY%u‡œR+*i®S6Ôæ'ÄåNû ˜.¾aò~úéuug) xBÕ;é 8•0yR ‘Y_££•âgoºióúõµuõs×Ež½qgĜŠ’òÚ²ÊúÂCÕ‡ª›ò+ë²JjR «ö¤n‰L™º"22!£®®.(HEût#CTTPQQaqq1,ýw(sú†D$dÄ¥„2*9/`wˆ3KæÍΤ<’I£öûíØ´iãÚm[×'%FR¬´´8-/gÿ¾ÄHºj'#}?'é$•ÜŸ´w_btbB (]ÊCjžS¦ÍšewJ RR¨’Ä‘d‘,óÓ…öHä7«ÒH×û¤­]“öÕòÔ¹sSI4)NIÑJ’ÎùóRBƒÓèzú‰â<”  `ˆ€1§LMM•‡Ïy¤L×&®}<8çë‰/Ü2²¼¬ë¤+C5Sff—):%%uë§”F+¥QIs²¼4÷³EwÜ®sQN}ýY¡ËjkÏ2b™tqÏüy…¥Å9l­Lzz:ÅwǤMú:6:³¶¤îDEcKuskÝ‘¶¬¼Ò”Œ¢¢òúìCUéEU{äoNù:`ßì5QtÉÕ¤¸Pó5{t< ËCêVXXPUUEAÓа e [#öÌØ—ž˜›ºÑ7Xw ódˆŽ ¢ërÈ&·nYï»}C€ÿ檊,ÙŒtk!ºè;.6Œ<’$’â—ô!!~Å2I(éLSœÒ~ì;!ƒ¬‘®È¡ôùçv‰¤ ½R#ÂÓè°xrRFZ %ûÅàtvIZIÑJ!TIÁKº^‡®ï©®4pZ-"äÐ%`Ì))©rˆ¹S+åN¹æÑ-)¯Iœì—þùœ-Cö§©ì u+'Ë0‘Y¦¨ü•Ô­€Û’çà²Ð žœZ‡³µ88*‹ŸoâB3ÒréºÝCÞ ]NIrÉÎL÷J= câ€Ù½{7¸dsìË“¾Ùy þ@^rza%iåᶃ©y‰û³ ÊksŠ+Ó ËÃ’2ýcR·DõYHiYEé£H5ÃÖm›è^‹”~»k—/…?éîE»ƒU‚ ýBÃâÒ#÷ïŽJÞ¶32Õ¤“)ÃCÃÃv’Sî ܶ3pkêAÍkÏk*³3Òâ##vÑoŠSJ’¢˜Îû¦;™Ð}A3ÃÃÒBCÒÈI"évBtgÊ’¢lº»]ÙM†Ó…8e9”31>sÝZû¡pJ:P>v¬=–™—QŽÃß›$èNRzŽè—jN9aõÃx/‰±-n_FEckÌ^ûµVy‡*sŠÊæEîK NH Ø›:suTDb–=šèèà;wP<2'''(8à`rlzZ|pð΢Bºô›^T²¯ß6iýéLJ¿Ý!±öúìŠÞ¾7.Jwód ¤ßŽ»wm§dRâŠY*Ò ¾R†];·‘DR¨RRR2Å)©ÂtéwÙ¡lº% [’Dj]ËOfI÷¢[TÒåát œÓû¼yit'KPž¶#€€€‰œpJQÝ®»îÑYý‡/»ÒÈåwŒ\~'¥ùþoúìŸöÙž7>|’OÒó†l ûTõºiÕö-SÝ)%•¤¥xÜù”<ÒæR§$hb´R¡ºŒ§z<ÁÑÓ‹¯¿®N7NÉŸáÏ®ýà}û]ÊI0'Nœ 8å³ýÆÌò OÞÑuŸòúÁÁ1;wEæ•”eïKÏŒ=™”—6ÿ»½¾á)$…!ÁÞThïÞðüü¼òò²bº $]ó’z.Í¡À'LI/ºú;##cïÞ‚ »Cƒ"ãìÌýƒ³²’órM;M¹¶*gó¦µ ñáÙ™ûr³÷§¥ÄÒãsØèÒSãâc#èLJñÀ79¥)×}Ú´Ñ̠´… 쇿)NIWóЙ—»wáêoD(A@À ÌqÊÁ_Üà›öéW±ï¬N˜¸:qÒš}“×8æ­/Í ñ“°çç†>¿"vì!£7†|Z[ÍB0Z&œ’ÓðxŽûpžå²J·–ìß_çro™m°ý’noùØ£j~àÐ÷WmðÚêåë±Ã?¼´îø¶Í›6úå¥çd¥deìKKß{ -l_Ú'ë£wǤÓ\!jG¨yÄèP‘ý$c:ÌMçeÒñné«°°„’´’î¾³7¬¼,30¨ë^âÁ¡<…ͳ{ç6 É—•¤W–gU”e’e2J ;Ñ-„èBoJ©SÒ™Îûæ¯9%§§2ÒUÞôd?¶õ¦8%§ë{víL£ÃâüE!'€€€)Œ9eW¨ïÇ—iâs ¯X¿úÌÝÎ yúãÐgç†=gOáÏ~ö̜Чg‡<éôÄÌÝÌiiä;s7++Ó¿²Áh™Òë¾9/$Ò%¨<ö­º»¥‰®»?¥”]"#NwiœRé‹Rh<6ɧüûßk/¾XççùË1é¢ÙNù‹_4ÑóÁyœ’òlX¿žîLé½2bðäU‹–o[¿)ø» ßm (©;î³jÃ'³ædeçefäd&gd$¤¦G&¥Mù*,%3Ÿ¢›!ÁŽŸÑ‘žOK?vìØñãÇ…÷#GŽÐ!`I— Ñ0éžû[vt-ÂoW(9Ÿî u Cx¨ Ó#Å2é†G±{Ä{ ÑÁn1‘PÒeãÝ㔵Uô òº½9Lé·#õË/S§L±_'.Üxˆ.Ù¡K¿é¸¹0 €€€3 ;¥êž]øûuû>˜¶ó~ïàÇg‡>ñQØÀÂÎ øQسC›òÈŒ ‡èÛ÷½H:—íyç“ÍÃò ub´ÌÇ'ÿéö«~«¯’é‚S:¥Ìµþtõ=Ï»áþ”œî9Ÿ²_?º…þMÎù’nHDeꆫ®òPPp[ØÁ—'¯{sܧïNütꇟ'4¤–4 ~êõgz¶¤$;¿03+7#ժ̌90íëH:“¢‰öÇèŽ"FŠùEF¥¤ ÇçP¶PºV&"˜T’" ÂÌ/(ڱ˘ŒI8@ÊÊr®¿õ¡ó#¥©¤(¥¸ð๔BOʤÇ|“52R~®Î㨛l:‡’bI‰öÓ(W~mP’P 'SÒoº÷]£›Agd:¿,”  `ˆ€9Nùô‚ËW'Nžâ÷ô ûg…>èþwÄóíé¡aÿ¼ë¶qþÿµõº›¯±ùº··þã‹=oNòy85“õ$ÊóõÝi[íwþ|ÊÞã”ʰ¨òA>fÅ);…ÒL§¤Ò¨LN§¤{ ¥¥¥Ñ#Ç/‰ø.úß¾ŠƒUQ5ûòëŸxÐ3>Sr(« 0“B•‚S®ô[¿kmm-4§#ņÖ7ÕÌ¥‡Ò§U”Û‹ÊËIŽˆ ¥˜%i¥ÿî=4%6ñàVÿ:ÿÒùi•@—{Óí(ÑmJÂgJtew ÿÑ)Ù k}\í”t½NvfVDx*Ýœ’â‘ôÌFáA;d“Â:t±Î_ê%ÜKÈ çQ¹n|¢dO!`Ì)eç,R#í7î¹îº§æÿveüø ;nŸ|Ïô0¯™÷ÍŒ¼ozÄÝcwÿõ-ÿßÞzé‹~ö¼Oßg×ôyzUŸg¿ùÙkë/Ÿ¹ëѶŠ]£Eʱ2gm}áš{úP=íuë|8r_λ‹£6D¬ŠL¯‰Ï­ôØ+Ï=ö2)sò33sépo†odÒìÕчʫHCCC?ð­U·‚‚ôí»‚W|à»+’òÄ%¥Y–*?p )5Å~Ž+RxX = ‡n0)&:¨MSè0wÙ¹'zë.—niÛuÞ§nf2P„’„2h7=ÚÛ~ó 2HRIátÏsŠPÒÕ9ß®O£û•• Hé’qâ@¯a^E@î”}ä÷ÓÜwP‰”‚ŠJJuíª«ÿäÒ%1#GnºnÜÎÇíþëÛ»®y3àׯùÿâ5¿ŸÞñóW¶ÿüå­?{qãOŸ_ß÷™5}žZuÑsßü|ì¶s¶¿²pÓh-ÜŽ•9Û÷Å»Þüõ5×\#¤——W—SŠ– §´žS^sMíÏ~f¦SöíÛxõÕuœNIãdø“O¦¤¤ÐéŒË·Æ¿óåžÁý_}cJLVí O ôôPŠP’P¦f§o Û7yYXNAÝ?rõêÕ»wúš»±Ž=Ïoúʘ§'nøðóíñI©ÛÃsó‹èÖBMMö§Aæçšÿy*Vé”tÆdbÂCqG:V½gwc«l†N‘ŒŠL£³'éÉ:ÂÝ(›¤çèLŸžJwGß¶5-)1w2wL¢4à'Ðå”WúØú-²Ù.Oc;¥V¹|ÔgnØ Ï}ó‹ÁÛ~Iùºÿ/ÞØùË!»ìéÀ_¾æ÷‹Á¾?yËÏ^ØðÓçÖõyæ›>Sî´áá1ßÔVk^aê@™ïùÜ·&|6£ñÎûÞ—°'i_”,ÑD×]£#mŽìºéWf†Ë¯­*L—ÞWˆþ4k¡÷ß_EWjëÞ*HÚ^væ~ýﻯŠß)…!8rähdRî[süžýåêœç_™üüËÃ’·„%Î]ù醨â²*ºŒ†N¦¤üß|ó ½+9ÿúIs†ïeºïœéëà Þ\¸çÉI[¦ÌÛ˜–™CË¢kÃI+›››)Ž©* sJáú›ˆpý(lyi&ÝNR($1><6&ØENIWyÓÏé©9¡¤ÃÜžÆHm$›Ü¸ž²“š‘–I÷³ÄS~˜ @œ'`Ì)…#Ý´TÙ‡ûg_øqèóÏ|Ó—„’$rèî_¾rñ›¡ö4,øb2Ë×~ùªïÏ_Úò³7¶ü–.ßçé½ûUg,mÑ2_ù䟗ßôeÝ~4åÇ%×Åçö{žëÖP¦€<’Çy/!öýƒÌ=ö=n\ÉŸÿ¬J~§¼êªúwÞ>Äé”B6á8[yôèÑÂÒê‘iŸ~÷î¼ý7Ï[õâž}9GŽ£Kg²³í‡V—/_¾xñâ%K–,[öã§gfå¤óö}{ñÞ¡ c^ŸùìŒÝ¯òâ¤ov…„ —ìÐÐév˜•‘{ÂJKtîɹP1›Ì)I(é¡Þû£&G3î+TWMϼI­,Ï©®Ì)Ì?HwAOLpÕIŸ´z㪕ö¨¤x9ì^³:•îpNOk,.È®*gÝÉ(ä0JÀ SЇ¼ÏÉ™ð Äû?ºˆœòÙÕ?¥¥](C/ñ«‘ö4<üòKÒJŠVÝñ›9¡Ï¼ûÍ=ÒBkôîRi´Ì?\£8òÇ•´Ë%œrËJN§$\Ò¥t`‰Óy–ç^B«VæÓ“oLŒSþã5+–ó>GGüôÈõ×2„ZJ/:½’…Ó;æ¦!Å&é’ôÕ–-}||èqŽ›7o¦8å—_~¹råÊùóç:L,[K#cã‡ÎÚ:þ«}o,ˆ43ð¾á‹|×祙_úìÌÊ´_IM7-¢+ÓÉ,éE×ED„švÏs*Ÿœ27'Uz>%}&³¤ËtBCü3Óã«ÔîaDÓÂü´ÒCY9ÙûýwlÚ½Ë7å@´Ñ g~º:‡®õ¦kºé>”tÔ›ySÀ’•ž—›äĈl  àRÆœR«*O̽ìó¨aïúþãý¨ÆýkFâ-Þûÿ=!áÊÑ{/}éð»VNЏñ“ðç>ùîÍ̬½5Utˆ*‡nMÂh›Ñ2¥÷§Ô*NI†Ç#Ï,§LJÌ}äáJò¾û*ãcyŸ÷-=]øÑn cÍÓß{oõÊ•Ôüäädº‡>ìÚµËßÏ7å`¬`Wk׮ݾ}ûÆé¬JÒÊeË–ÑÄÂ|GNvŒŠ‹eƶw–ì}kÑÞaóÃÿûÖçw¾¶à™©Û|{]^ž}ÑÂm,©VÂóuèÖ•ù¡á>¿GµO§“‚Y¦¦$Òséé8tWóè¨=»(™›½ž÷M×w—JO=›š’•‘¼'rw`À–à ?zP¸îCuG”V†ªò\º½9I$Å)é4Jº@‡‚”Â%ÞJ‡©bF0—€1§¼éw¿ûá’jÉc¾žÞoØ’ ]:à­¯n~ë뛇}ó¬À'ç¤ÝñNÂecb/ué´Ø›> }zîwoåå&Ò^™öLºNÉ_¦@D4­JvåqîÕgKÒÄî9Ÿ’Ñ÷fé¡áeÖBçNû øZæáïk¯ýÑ=ÏéèZJ‡Ñ'N(..àuJ­&ÛØøàƒCT½Û(yä¶mÛ6mÚ´aÃ:NÑJ*'!ÎÀÁß²Ò̹_>NZ¹ò×ûÆ~ùÀˆ/þ3dÑÓS¶¼>}SJú†š“D…¯’’’ËÐÐå‡2 õ—Væ°ÐrJº.‡·Hw/'§$›Œ‰%›’ðDïð°t€Ûwû1ùíØD6@ïA»¶›RÕB„ó)é*œ3Ò(HIN¹èÓ´Èp<ƒÑUWD¹®+Q2€@&`Ì)twñ6=’KªKKè ‹òŒøæ–¹™wŽKþõ¸}ýçx`öî§ÖÌ-.8PYžY]‘EqʺjVœ’2P6ÊLv™bߨßçH­’üÝٛϧä¡d–SÖ×äíÊ:´”ªTÖG+ó믕äÕV³¢àNþ~Z,^ü¥¯¯/E+¿ûK—®X±‚&&'Eñ Û3ò£ÍƒfN^™´`Kú̵IZrû«Ÿ<5yó£c×ed”B!RšBØÉËË£Có¹¹¹ii©!&Ý̈œ²¨î±/!""|çþ¤½žœ2jO°ô÷’ðgDø.òKJa¡$”!Áþª¤çÚð4Üᘦ~ =³SÚ²²²è¶GBùth>!΄'€í LKÙ[[•Mëo\,ìÞMɽ1aöß‘A‘»)‰*)ؤ ”¡ ðßr 9ŠŽ‰7Öéx<ÿª§ÌI÷§ÌËÉ"­ôß‘¶30-!>½0?‹žÓèL™˜@@ÀD&;e—–eŒZõïÏsþ"å¹™[Ÿ‹K m’y³#”BÛÈ8)]NûƒY*Ê”QÀù”œ†gÁó)…®ÌËÉ?¯ðª.½´ñ¼óôo-ôc³<|é¥M÷Þ[ùÉÜ¢Ü,.Ï0eÀÄî ¡šÓ¹•¤•ôXÔÔT:ßqÉâÅìUtÑšÀ·D¬Ü÷mDᔯ·îöW>~øÝu'n ŠÜ˘w’ý"RI!Ýü(<|·“›Á­[ÖÓ€ì:È•JK;êOHÒJJž$¡”†'§¤ ~›ããBi.a½vV’>Ò-*SfÒ£)чCŸ·¹U‚NBÌ Ð3˜ì”¤ŒtØšöL£VþÛ'çß=Ÿt0ˆþ.Ê¡è£êùˆª(iÿD™i­2á”RœBiÍkt„†Ðð’¢Ü/¿(¸ãöê>}Œ9%=†‡bœŸ.(,Ê·ž•Ó§¤ä&ÏŸ7—.§Ït …)Ü·’‘Öl yoYì{_%¾8;tàÔí·¿2÷žá_œ²mÎW;Ø+}›Ü©•bŠqöÑ5dq{CèW)I «èÈ@Yiei1Ýñ162< $hGH°ý¤IñH7Å&é*ï ÝÛ÷Dî,ÈÛoÊûªíR§¤K¿é”Ê 4:ê½á»´Ý»RI+ËqìÛ5VâYƒ@dLvJ*ö+”žýäʹ›†–—¦ {ö‘nÝ^‘•©šß,EŽcßì®1]djó³3s¶lÎòFÙõ×éß±RU^÷—ºW_)Ûðm^fºÎͤÍ1qÀäf'-Z4Ÿ §[Hfdè\7CkDNÎÇÇoùYÔÓÓwz _~çÐ¥§îüÁ·û“ã…ˆ>ýŽåRøq%ÄìዉÙæ»yËÖ»vú–—f8¹r‘SRÉÂ"D­,/M´²¤è`NVbêÁ˜} t™NpLÔî½ÑAô™™tû¤ŠÒôÎÚfӼš®».;–®ÑÉÍÎ ðO7/mòdJéôhoºdövŒ'æW0à”Â>˜‘èêW±Š;ö,//³ß ÅÄÄ.S·zBi%uëæÑN)ÜER©}.=ömÊB+Ëswæ{èﯥG,þæ7 ¿øESŸ>‡é)Þç×Lïôù¿hüÍo꯺ªòŒ}(Ð?¿¢”+<)vº‰NIeJo{NЦ5´H¼è[ÇÝa/½¿ñåÙ»÷í£“}™°uÕ†…ùÉtÚ1]—Öuo„ê®Ð>ÞAÌÎ-&Õ£<œ—»ér!=ÿ¦ó°@EE³¬,ϰÇ,É/%‰¦Ðt²Ûλ7ü`“.z‚ŽP½Š²œÄø zd]ñM÷§>ÜþTÆùóRöÆPõôÏå„€l  ÎàrJZ€®±9S ³æõˆJšÕXY9ZîØýNIs~¡Õ—ʉŠÌ]¶4Ìè’{ï­¢;]rI %½_sMM5òÐÒ%…{"séJº¡Q°º£Å!ºu°;eç!fzN`hø£¿ylÜúÞ^7õ³yÙûKŠRHIÚd7Ûê: ¤3TùCê<Ÿ„ÿdݺQÀR0K!f)鴈ѩ–B&ҷ©,Î…Эe K¸"ÂíW|ÓSI()‘YNŸž´;­´gUšùÓ§;@T ð:%ðYœ€TãÄÇ‚ u–E+]§4}¡uz7r¾GtµÒùEh•`÷¶ªœŠ²L:^T˜*„ý:ï±eàœc×UJSPFY¢é®»GµQŒŒ‰N_° mÔ¨.§¤;ŸÓáozÌ7é¦K9 pNpÊò_攌(¦ëœ²{Ê9²‘­'¨©´_ CWçÐ=Ïß}×~ÏóiÓR}ÖÙ/Ó©ª0¢îIdа8eqJ!) JÇû[‡G¤[êpm1#€€€€‹À){ŽSºhˆ XÐ%§„S‚€€€8KNé,A]mGèñà”pJg À)%Øãv      KN §p–€¦Szã®! ½A¦k–€RA@@º•íÜYNé…˜M ;=Iæ”f/倀t+aç®ã”³Ö„!€‰TRù|pLðd“¼N)}P >ƒ€3ÈMµœrü¸·@@@<‹À±#N9effÆÒeKæ/œË™(sJJŠ3.‚y{¶SöŒ6¢   ࡚WŸ={š¿ò”ß)§ÌÌÊܹ+ ¶¶†‘”yÝú5‰‰‰ü³ g$§ì‘ÝŠF€ô äˆÔšæŽôÒŽäüSñ™í1éí{RÛ#RZC´…$·%µïÚ×êŸÐR\sŠr–V”³œ²ï€üþcšû*¡‹…èôN’& :’#VWWWv¾ªªªèsÍõ76NŸ~øÅgά߲¥&;›¦Ó·ô¢l4 ÍØ3ˆ£€S:Œ3‚€€€« NIBYÞð}aÍ÷ÙåegÓK:R‹Î&œMÊ?“Û›Õ™z:lÿ Ê™–W"wÊ{ŠmW¬·õ[d³]ž¦ë”t¼›JùÁ&KKÖ¯o3¦éí·›fÎlüì³Ãï¾ÛüÜsMÆÕØÝ³óE³3âÕ› À){sï£í  ' 8%E(I(ó+;2lr~GBNGB–](£Ò;"SN‡l¡œ{šà”öØdMM]QQãŠ_~Ù’R__ßpîU_Wר4}zãš5µ9á”FÝS=8e÷pÆR@@@À‚SÆg· Ê”¢²IJI9gH%#RÏ ‰â”‘íqÊÀØœ’4±¶¦¦!8¸1   Rx5íßßXZ*üÕ@._Þ°wo]]œÒ®íy³À){^Ÿ¢E  =†€à”Qé'íÇ»K:wçž¡4pè\RÉ𔎰”3ôNIpÊ-Ù&8%ibC^^SXXcUU½ÊÊšW¯n?¾ù7Ž Ö¼jÕášûôŒŒ¦íÛë‚Sö˜çLCà”ÎÐü   àR‚SÒE9¡L)ì R’P ‰„2¤S+) N¹!4˧¤#Ý™™M‡éU_ß¼}û‘uëŽdfin>’päÃlØÐlÿîðáÄĦ¬,-§´I^&𠾋SÄ\Ò<.ÅŠÂ]ANé ª(@@L! 8%]âMÇ»“óÏR…RøœÚ¥•áìçSú™á”tædSqñáÚÚf’Èâ⣡¡ÇŽ=F¯¦&û{eåÑåËÑ·‡ ›rsN)RlRiZÓMÁ‡Bº“œ²;icY   `ˆ€à”tÏ ñ· ’{³ì‡¿E­ ¦På{œÒ§¤ÃÚ‡H’J––ËÏ?~üø±•+üíoÇ÷ï?qâı  cäšG©«k®°ßc]õºo¥/ŠqJ!6I3ræ‘f3D™»œ²ÛPcA   `”€à”»“Úè*oQ"éslNljV¥œ꼗к LŽ}Ó1í.¡r„”‘“d­‡·µ¶úûû¿ýöÛEEEmÍÍ-……-®¤€%iåÑ£Ä)Eºç\Â)ù‡‹{sÂ)ÝËKÁ)wĵуH+ã²ì6IioÎrʬŽ]þ©gü’O&™§‚”$”d­­­mmmíííÞÓ§ß<`À´É“Û››éOšNºi?&~옓N)k?┺JÀ)=´ãPmÞ@@pJߨVº[iåÞÌ3Q”èÀ7 epÆ Rú<³cÿ©ÀóœRR’P’5 BI¯Ç{,66vöìÙ§N:yò¤ •”‡´NÙÆ¢nᔺˆ@@ÜE@pÊm1'Bœ K=c¿·yêéˆÔSaig躜)gœ"¡ôKjH°«9×èˆNIÖHîH¹wï^??¿Ï?ÿüÏþó¾}ûH+i:馪d8¥Ö}‚T¯Ñ(#Né®Ñæärá”NÄì   à:‚SUž I<ºÿ8=Ô[Hô™N ¤´3©%0ñD@üñ‚Ê6Êé“kÂ5:ÒßäŽdãÇôÑG'L˜ŸŸ?gΜӧO“hê:¥ë¸ d 0ä”F¯¸„È®5]‹r¹Ê3zÙlµòË~>)ëÉÓeº…°3ˆ¿Ê¤X¤³h}~Ë1 ççf”§‹Ñ>åÛKò8¿Û@ñ už5±Û*Œ@ @N—]ËÙ¿øjÊo²S’8RØòã?ŽˆˆX¿~ýÂ… _~ùezÐs §äì˜^’Ó)y¬HUÈTµF!ª˕ͫ[”V~éteC’¤UÆ"TµL:Qk^q:ƒƒ!nFyò«?O÷È<ºcRë× çŒœÙÌeËÌ·<ãÉãØ¯;sÛ‹Ò@À"È;±-¦|Y`ÁüÍùs6dÍðÉž¹.súº,JôYHmÈ]PÒt¼]Ç)û Èï?¦¹ï ooo///’Y;—.[R[[C‡¼…ó)…cßôN‘KºzUUUmm-ÝiˆŽwK}Ó,4£E¡î"Àé”BõTwªî¥ë=Z!4UléÑÝEñ8“VÓ8ûÅÉÙUñªV›íÁì=1[+{™ß­E«Í"þ©4]qЬ]ŒYT]œ½he¤5‘-Kì Õ*)*› ¢;8•]¯»\Fùª<9ǰ¡lœc‰±:3ƒ0•c€Ñ<ýb¨È Ö!@ŽxâXS ¥Í­-GÚZ¶·Ÿ8u²…ÎgÁÓpUãd4GË_ù[ÍV ]ÇbŒa^é;§‹ËÚ«5µ°hõ…Öø‘Nwl䨩K©.B«ãœ=5ŠÚèzÍéÊNŽéçöÍ,*ÎpƒS Õ={ö,]šCGÀé`waaaZZ]îM÷Š?xð`AAM§oébï¿ÿÞ™bÞCÀNɳs5$.Œhü=¢»¯’îÑ9‹åñBž&kyžª`±±(Éhå×-Dz¥«¶Ä,§T­¹Q§áé8žö20?<<9«ÍÙ¹J÷åaË“Gµ;xÆ$g9³â€Ì ÐÜæ”ÔH’E2K²FáôJº(Gxf#}¦)4¾íNX–Å 8ï”B<@«™Œ€ŠlF9†œ’¿>ºrÉ¿7Ò*JwJnªõ7êªà˜S²yÊ~?ðpàQönsJYëÄúK§sŽaCmW~e—É Ô-Ÿ‘ß”­Ï`æYe´˜K 0Vyi9ଦ @! ÐÜé”ÊvúnYÙDz<‹§S »ñÅ0 åWÊÝ 9ZËÕª -]é@ìš3*£ú•–ê.…s`0ê/¶N¦>ì&+Uƒ‘*O­¹° %4ÝÁ£ÕBiºÜ(_ºD¥¾H"ŠŽ²ËUåÀøÝ¥5ÒdõTíJ­5NÙ˺$ÙØíål²X+ÆÊ¥Úéüë©n=ä€ÙA › XË)l¼Íös'KÀìV&Àé”VnêÎàÑVgÊǼF  GŒCþžMÀZNédœÒv>œ²'W8eOî]´Mg(Z¯|ot‡9QJÏ"`-§t’­íüŸ8Yf·28¥•{uèå¬å”NÆ)/øåOlÚl}:ÓÏ;ß/°]ÔGÿ$§^><¥ùpJOé)Ô@@ °–S:Ù¶‹lIyá[ÂVøï]vpoäò ðMq á¶ó •N¢µÄìpJKt*  j¬å”NÆ)Úß¶ÖoÁÌ/†½òÎí,z~Òǃ&}0,$ÌïB‡B•8ùÚj« œÒj=‚ú€€€€HÀZNédÇPœrWôŠ÷?4uÁSÃ&Ý:jÊ}ͺÝv¾~œRõîNÖ³›KNi.O”  &p¿SÄf½ÿu2Ñt£í¤“)ý‚–Nùèù!ïÞ6ñ£‡§ÎyfèÈÇwîÞôÓŸs9¥¸8ñ–oF+€ü.%à¼SJï•èÒª¢pè°¾ô€ND@ ; ˜ì”}ä÷ÓÜwP‰···——I€ncÈ&UóhMgø“>¶¨Ø­±I›B£—G&|³|o‚ïÁÔÎ8¥Ò)·D2+£›Ò‰ºmGC\ê”Nžê`úM› ‘q2³Û+Ϩ€“ý"]©U—¸gµ“T=kv-â†Î³šƒÚ‚¸…€NYl»ÂÇÖo‘ÍvyšcNÙÑqæìÙ®DŸ;:N··pÀ)ϳÙÂÂ}÷'íÚ¼2nߦ°È5Akcâv:ì”JËt`Š[úµG.Ô§”=̃±ƒtÞ]œ/Á½æöÊ;_F îÀ,nì>颫¹r.Õ ¥c…[„ ª àj–pÊööÖÎÔB©­­åØÑÆêòBœò¢óúì ý‰Í³ë‚ómá›.½Ì¶jÍ¢_÷ï«Ë‘}>¥òh8cŠjðR·È KÀSÊ‚RÒNáW)«$Ϋ,D²ý.#˜Må«–#Î"sþ¡Å¨§*giåe"ÎþJ‹³Ø4N Qu­žR][œÙ_1€hñ—þ¶4ÄG†Eµ›CWw<ÈÆ¹î:%û‘,k{èòŽœ ½„€%œ²µõ˜lSXZ”IN)\®õ®ì!º;etpÄÞаĨˆÝ;6ïݳ3$d{òÁh£qJ¡dÙžÕ)½d u[3ùRÕcĉìou›#Ýå«ê—t¨(ýR©#<ùåhUX«žZ ¥ð⊠*|2¿QµN¡”­\Z%+³iÕYÖFF5´¾b×êw†¢©nUÌ•ùyÆ ƒ${`3ºØÉõEw…BCÀNyüxóÑ£M‡×65Ö4ÔWV–åt$Ni;?1":h›ßÅ?¹0>4ü§çÙb£"öD…±ktÌrJþjO.mSªF¶dêä>Rר÷K}W+Ô¤4bçô-¶»h9Ь’Z?ÀøWN·ê#¾öéäWJ§dô‹²´ø0TUµ¿Øœrà-<ë‹Ø.]åQ8€€g°„SV•ç§ågíÏËÜ—›‘˜y0&-)§¤çæìÚâ‘·/`ý¦ÈÀ à»‚ƒƒyvlŒŸé2EZ {7àYCÁúµåqJUC’‰Ã;y ¸Ú)ÖA+¿«’½\aé<«žV—±§kýðS­£œ.k´ŠÕÚ˜üÌÙŠ©åÐ<ýÂSgäèy,á”™££übC·ì ÝL)&dS\ø6œ²¯í¼=;ƒ/¹ OØŽÀ+/ëµ+ä›-))É”lÏë{k¿SªQÄaàäxp‹S2â[Z#£NÉÓ.qÌè:–ªS2lÞ “9+£½ºµU® làÒüª…ó4GFC:>uÇ*£z†ú­•ªúÈèDÛ¤ Â æp¿SšxÊ‹l¶ÜiQ;ƒwoñ ذ%yoüžˆÈÐÐÐ_þò—æRCin!`È)e»C£;iÎŽÔ±Ä}­àë ›"Z (^Òý´j|H7h¤”é,ìþÒª¹´žJ“`TIU(î«ZU‡9ȤJ«ž¦LgC`·KæÄR>¦Œ†Ió;4¿[»e›€…‚XŠ€ûRŠÃÉg3’Snÿvcöþ”ËúüœÞéÏ àÝ»wÚ¶Zª{P)œRê|ªA{Êpò”z:Ð=fËö‘îo°Óh€€‰¬å”N6ì7¿¸$xGÀÞЈÝ[wDïMÜMNùóŸÿÜÉ’1»8ã”fÕ_q4«dsËñ”zšÛjÏ* }äYý…Ú‚è°–S:§¤Öþúâ_Ñý))BùËŸô¡tôË.»L—2x+8¥G€B%A@@ û XË)»¿ýX¢€S:ÙY²“ÿ's’'f°–S:§Dïö`pÊܹh€€€§è±NiTO7ûîzõà üiƧ«Ïœ9ãéÝïYõ‡SzV¡¶  ½Š€éNYÐLsßA%ÞÞÞ^^^$†hAC…32Ïþ|Ý»3|25&æÖ†§TìÞhãžFË1Ú×FûÅh}\ćg[¬»/çg¥\œt getû§ÆháŸ]wÝú(³©º©Tseø«ÄàiHqØýbJ}D,<¥±ÛÅ?»!§Ñ!Ý Ub7—V@u•×’Z†h2Ö5ÕßZNé¢FêKN™q¨1­èGNùíò°µ«£VnÞ·uî’Kʵkb6}§Ôåé¢ pJÝmœîn†½/çß}2\MZˆ“õaèÛtK¸ÚMuk®KF·þ ºÃ†aŠœóòøc³ÀÞ)rnOdR"ŽC­=1ç0GU”.AuF­±­K‰±ÎêÎÛ=„ò¯ÝS+eŸ*·“âÓúJ6eIåå_#tsvs¿[Ë) ÙãÉPQä”y•GS‹ê·J┤’+¶ CÞk|b)ZI~åw‚ Nùñ×o® ¸aâ,®'ô¸w%qïÒM\íᔪ,ÆnLW¤û'Ù.™Ýql7÷…ºc§žÝŒÕÊÑ>]2Ò”ý®[¾Qs¾>R‡3´ÖëîyJS-„¿Qº#ÖPQªë­rŒJªYõáégòx„Sjm'Ù¥ì2Æö–1Ø”_i+é¶]¶`lOœé>a^k9¥óíq¬rÊüªc©Eu[Ã~8öíë½ey@ªïì-ËýS¾Ù¿yAß>{›à”³¿~UË)•}lh{ÄÞ80ÌZºclMœ«—;¥–;JÇ›n_w³{éö~7×§Ûøè:ŸnMTKÐ¥˙ýÿ22¿wòü02›¡ÊhÕŠáìî“Íhh}×m—Q=54ÒÈlh(:P¾“³0V@ÕšË:K9T5Ú¨S*‡c¹œCÂaPÖrJCÁEv› %qÊ ñ|J:Øý•ïº@çë-Itœ¯ñÙ»ñó݆ºŒ'3Oë´ÊáÙžtÿž!ôª•î@eå¢ü²%êv“®ÏIÍ’gä+ 4T‡nèwk9¥¡à"{Ä*Ê~>eÕ±”;%]Óy]N4F)»W%ûþöÙQGn¸áày*÷§Tö±‰SdÞÉ_2ÏÈ-þ…ò8¥°U’QbX»ó3l@Ù.­Æ²@9ŠÄM›ÖfZY QΆÚÅèO,G¶ží5v¿Zµ•;£•‘vrGÎ?~Ø{PÎFI+Ï€ÌSšêFC6)G‹›îxÖrqNÔ<íâß»4'»ªZ› n›.7´>j QQ •;qv+û]‹›ês`}7ÔéÖrJCU71s§S•9%yäªM‰t¡7Å))QR4K]§Tî³ÅÚŠ;ož)²îW>Î)<›Byº¨(N§tÑÒQ,€€¸Ž@ØS[Ë) Ùý*ÅóNÙD§Ü¹7OzÏs­Géè:¥¬nœæÇ°LåozCn*þ$rÝÊÐ %Ã)»2  ް–S:Öççœ2µ°.ú`™5Ò¨AJT4ZOÿ §t~¨£pk9¥éqJNjÂý)³J›èaßûòêb2«B’ËBÈSè2!…(óýçÝt2¥ÿôéÊE(ÕMõ„ ÝããBpQzò„Ꙍs;´¢›œX¬– NiµA}@@@@$`²Sö¹¹ ÿ˜æ¾ƒJ¼½½½¼¼H<‚µýÙŒùµ³mÿèóm³?Û:kÑ–çož¾pËŒO·Ì\´eÖg[½iúÛ?úÒwΗ¾³?Û6dü2û,´¶¶zD{F%á”=£Ñ IÀ §,±]écë·Èf»<ÍI§tcœráW;ƒ‚‚Cô^aaad“BJIIikkë‘Ú‚SZ³_P+ ÖrJwu âì%þ{ãKÔ^‡~üZ¸ÌWpÊœœœ“'Oº«Î½p¹pÊ^Øéh2€€€§°–Sº+N9ãÓÕãf®½ðÛM¾‘Û¢ºR`Ôö'ßÀ(J[ü"'L[LN™••ÕÞÞî)=Ýê §ìˆ&€€€̺ÆÔ¬rhBo˜ÅZNé.âÌ[%ÔæüššŠcßÝÙeœN©uOWwM©^¹Å¸W­¬VfC…5‘^ø%[¹¥ñérÕcØmí⩞t°Éò;LX6„´Æ3?säëÐ]/´6¡Ò&p®›ÖiuÏ«‰µœÒ]qJê×3gÎ>|8##ƒ®¼áyÑÉ”………§Nêyc²-âqJå~WUéÄl®Î¯åpZËÕ‚/ÍÏóÙh9ZâË fýâWÝ[‡ZL\Ô.݆óŒ+ÝB”?EtÇ­!hÈ !À^U“k­ÚìÕŠg¥³­†µœÒ½Ïž=KDzéRnžE(!”ÝÜ_ê”l©u@z´6‹F7—²í¸,´¦Û¹ŒjˆÑž*©æ&ê†.T+i‘vÉÂ'ʪ:N©;,‘ÁÓ 06<+‘lÓÁøõ®ÜLI×/g6AžÞÎÔßZNéÆ8%"…0ëϽœay$§7‚<ÛVBŒ<–#+uPéDYÝN×*G7t¡+”ªµr¸>FÛÅ^:'jžx§ ߺíB°>CB©:òµ~wie–º£4cck}Œn¬¡µœÒ ´õ§?ýéoç^×^{-·`={C•à”B/+7»F•‚bäHªÎg´&²æ8‡ë¶vj¦3ý§äÈééXUW.-d¬‰Ê-¡uÜÓÉ›Xk9¥ã”ÿüç?÷%í‰ûùíø×¿þeb (~pJU§4ºícä7T”Õœ²;ÛÅÊ¡Tþ~pÒ¹ù×5än&à€P2~`s®w •ä_Ç»”Åg-§´ ¬ë®»î“ys·mßjOÛ¶Ž5ü¦›n²`={C•z³Sª œV1´ÊÑŠ€-J+®æ@9ìªÊ ìÎviEATÛȳÓBœ²7lÙÐFÆúË^MxBŒ›cNih ÐÛ:×ZNiÁ8åÿøÇ{½îiì|ÕÖÖÞvû­d™½m”X¤½þØã½ýö˜±cß}oü{/¾ôÂï~÷;úŠ¢•¾¾¾œe"›)8Ò”e¡÷0KÝÌ*ǽ4¶~‹l¶ËÓœtJ·Ä))6éè¿'*b简^ôìóÏLš2áõ7ÇÇÇÇÅŽ3vÌ“O=þÒ«/:d؈7)T9söôç_xöáGš={6‡SvÛ¨…Svj,@@Œ°–S­½)ù¯¼òʦM]ÿíÚù çNý`ò—K¾x䱇oüû C‡¥Ó(_xùÅiÏŸóÙ—³>ž7òÝ÷žyéµç_záñýûÖMž2Ù1§T^‘@ £•ÊëT¯`]HÁ(ÓJV(Ni…^@@@@@•€µœÒ-qÊ«®ºê½ñc/ýb¦÷ôϾøtè›CþzÃõ»ñ†Ûï¸õÅ—_œ2ë£q“¦¼øÊ«O??èégŸüégÞxkømwÞqÍŸ®y÷ÝwTR*ˆ²Ï²>õVW½ÜL,P(Jk.™qöŒÑ§ìýˆV€€ôHÖrJ· ¾âŠ+Æ÷ËÅŸ¿ðÒó”(Hyõ5$§¼ó®ÛßxkÄSÏ záåWþú÷öûMÿk®½î±OÞq×s/¾|ýõ×½ã¨SÊn&¢4K©/ â(»ëJÝìÁggÂ)ݲ‚`¡   ÀCÀZNizœR(ýnwÊ÷TœòŽ»îôò+ÿºãÎ_÷ÿí%—\rþùç_pÁ¿éßÿŸ·ü›&¸ùæaÆþö·¿={ö¬4#©¼‚‡í”Zùµâ”2åž’Né)=…z‚€ôBÖrJ·t€à”ÏýH§ôºÿ¿ÿºã®+®¾æÿ~ÿ{ªØèÑ£…ËÃÿ9`À?ÿ}Û]÷z 6´ÿþ§NR­6ÏÕß<Ǿ:%â”nEX(€€ôrÖrJÓã”<½KN9ö½w>œþÌ)}ü1rÇþ¿»œT’„rÕªU3gμþúëïüÏnºõö[ï¼sèÐ!ýûÿæÄ‰†œ’2³}3®Ñ1tOÛ=+┞Õ_¨-€€@¯"`-§t zrÊwǽ3qÒx©Sþý»÷¾{É)¯üãÕtÔûŽ;î » úé§ÿýïâ rÊÛîúÏK/¿x饗9rÄÄjkÝÃRºž<&VÉ:EÁ)­Ó¨ €€ÈXË)ݧ¤û–ÏþÈ›B•¢S>ùÔ“Ï=÷Üè1£}óÆ›üêW¿úÓŸþDÊG}t×®]Ï¿ðÂK¯½ñÀÃß}÷ÝwÝuçÑ£GMU<¾È“ÇÄ*Y§(8¥uú5K;¥[ºgÓ¦MtK Y³fNŸ1mÆÌéô4ÿÜýšBçJÒ¥9ªü×­·Ñáoº5ú]wÝ5tØ›wÞëõ³_üâ׿þõ½÷Þ¦uìÛ-méÙ …SöìþEë@@<šâ”ÿëèèºöÚkéæç—_~9½ÏŸ?oÛ¶mô¼ïeË–]|É%¯½1dàÓÏ<6pàÀ§Ÿ}ö…/ùÕ¯FŽåããsðàÁúúz­ktÀ&»¿gá”ÝÏKNÖrJ7Æ)9y!› À)Ý‹6k9%z à”   `YÖrJ‹Ç)颜¸ø˜à€m¾ß.Y6{ÞÂñ–í×Y18eìV4 @@ g°–SZŠivv¦`ë¿ýjñÒÙ3gÿÁͲd© ÷øÊÀ){|£  žKÀZNi8åÊo>òá‹¢AÎýâ®Í;ŸØõVLÒô˜¤™qÉs#^§o=·ã=±æpJOì5Ô@@ —°–SZú{ïß¶-詨Ä’ÒíKý41e!©d@øàÍ»Ÿ¿ôî Þ›üœ²›û NÙÍÀ±8à'`-§´Nœ’œ’¬qƒß£²ƒÝã&=öÉ‚ ï}0NÉ?ÈÌÊ §4‹$ÊÓ XË)MožÃ NIB9nÒ£Ÿ9kÕê/èº:·’N²¤+uÞ{Ÿ§´I^bhšÃ•ÁŒCNi¸ÐiJÔZÓµ:EYˆêx`ô©V~qºt^ifžªª"¥ì BNYéŸZŸ¥siq–1Ñå`´‹eÍÄje"£ƒÜÄE-Šg„KǹÑò‘z3k9¥Õâ”ZG·u*銕ŠÓ)ù÷²nRÕAA†xš£å|2d%[–ø§tºÖgΪj5‡Q¬ªjkµKµ­v) UÜ«–Ï(‡§°b¢d(³êXe”À¹ZªƒnfCƒœs…RþÒ­2€@O%`-§´e1N©Z%œRØ–©þšWNTƤ[7œÉ:`© §SªJ‰8QK•ûÆ>RèÕ¶°¥Gw?ÊãLŒBtË×ÚMòÌÈcÕjr_NnºÙ8"[¥®ÉþJÖõÒ•‘gÅgWfVÝ8È6Ò1)­§¬k´ KÓÊ/ë2ž©jºn9ÒÆ*ûÔÐrÞ¤ð ÝÁ í ­Î’n|dã‡=‹ÃMÃŒ à.Örʧ·M²M°r¿«:Eº/q×Xqûrá”ÊÃó´úKuWʳ•ȓʵœIõ7€–;jMgüfÐRåŠÆóÃCY[­rüUá¨v%£½ÒÁ ÕJ·“Õß1κ¿¦8ë£,‡Ý¿fm‚Øë‘R¸y¼Y5ÖD>f5å€@w°–SvgËÙËr2N©ümÈ)e{_­ƒupuOMœwJÕ}˜”¶t[¯:]·¥ºÒÃS‚!ýbïÌtwÛª’$îteTý‰GRu]“›n9ºxuV«9ZãAºj«Î«åâJwQíw­ÁÀÓªyh¹ÊMŠL³ýÎpe-÷Òj—–›²Ç?'7Ý‘à@gqòäßÎ}!¾tëŒ `qÖrJÓã”BìwÕrÒ)U÷ÓÊM¹îÕýŸ¸²øØ2½z®pJÙþIk'ÇßN7â,G×´‰¡}¿®&΢¬¤T³tŽ'ƒÖ²x´€§Oµ\AU’dšå”ÓWÊ%2¶­Ê¯ŒNáÙÉ™Ájå8ï”B<€G¶Ø®É(‡g'$íDÎúè ÿÞH×K¤nÁªŒº…‰NÉî_YŸòpàYÝ\ê”FѬüüÃI‰ˆV—¹,ƒÕб<}ªµ†ªâåa®ÕµÚvõœòžbÛ•ëmýÙl—§9锦Ç)ùûžîä³~ù¾!ZãžÄ)ôùĉÞsÆ/]û_zpÝö|úIiŸû‡Þð}{æÌ¥V2¶;Z»[a_(~«üS¶3}SËÊ99R¤§4 †sȘ³k¹”tÑÊ”½¦UCvùª]À9$dp”c•Hõ磭Q­5‹lѪ0ßew–î¤,Gwð¨.ZhO-Ÿ3¿R—µ`JÊ`rö‹ÖðãYƒµR]ã FÝ~½pË'l1Õ$Ê¡Ëè_Îæ XŠ€µœÒh>™?uæ'·„¿²wÿ¬Œ<ŸŒÜuÛƒŸ¥G2¦§§“;FÆMÙ5‚Rpôè ~}òùhâ'óÞooo?{ö¬YÕæÙ'™µ,O,‡Ó)=±i¨3%€Í…Qb®È^pU”鹬å”nŒSÚÅ1~Rxì{ñçFïûp{Ð3³>¹ƒ&Òû¶ ë¶>¼l̓_®üïôo›öÑ­oT^^nŠSjý¾÷ÜQ墚Ã)]Åzl4ÜÞeè·w*`AÖrJ7"q\¹áõ¾„¿¾içc¡?å±iNüüóÏ—.]2äÍÒ8lø«¾Y‘PTTÔÚÚªzJ¥Òƒ §ìÁ‹¦€x:k9¥ã” q#ß¾O8™ò½)÷N˜4lÅŠ«W¯Þ³gOdddppðÎ;(l›““ÓÐÐ`âoOIÝP8e7@Æ"@@@À1ÖrJÇÚ`Ê\n<}ú4]‘Cë”––VUU‘2Ò‹þ¬­­­¨¨ ‰%%%ÅÅÅ•••MMMmmm¦,…ð€Sò³BNèfÖrJ7Æ)îd–z¤—pD[v\‡¹»ytʧt/,@@¬å”è*`€Sbx€€€€e XË)ݧ´l?¡bDÀy§oü;€`D€Ã°9Œ3‚@Ï&`-§t;ëµk×Î_8÷»ï¾kBžV:8dSè[!çšuk0†º™¿SªzŒ8‘ý­n£d* Ô Á„éÊ]²cùåhUX«žZN)óÕzj)c^]žª x$ÃËW¾bWÕniKµf7k<ˆn*£çÀrÙ¤êúŒ.c æ È à¹LwÊ‚þcšû*ñöööòò" ð4dŠôN·4§ƒà⋦DDDˆîÛ—HSΜ9óõÊ8±²›;—Ç)aRÕxT½ŠíÊrtã@üq&-ÏÓrJ-%ÒRpYUemæâ7 ­œªN#.š¡qN~¥ì8v{eTèGSÆèš²q¨¹N)“ÝnÞD`q î%`-§tWœ’ìpÑç È)·mÛFÊ(uʉ'J’¾‰‰¡œ>ß®uÒ)ùw·œ{G÷ޤnX:SjEPÞ§*ÛÅ“ÓòWÝy9GO6W;¥VKm’§žŒ —®•r¶‘Q N—5ZgÃŽÝüJµeã5ºÚê®Gœ 7º\äðÖrJw!#;\µzÅ©S§è‘9ôrʤýɳ?žKÏ¡WHhØ#ŸzàÑÇ£cöRú–â”;ü¶ùùû1*,ÝøªfslãëØ\îkîrùR5X¢åyF+ɳ_7Ý)•a3Ù/ åÀàô-Ñ9xÚ%.T×±¤f)‹Óá´ÄàÀh¯nmÙ¿Øj«Z8g3u™m¯V~·Œ±mâRŒ®•È `ÖrJwÅ)éYÞ›6o §"”>ß~÷äsƒþùïÛèyŒôç›#G}±dé‡3½æ9!=°qrÒæ-›Ù¡v;¶ýul.+ 5çë`È)eá]¡ä«úkAœ(ê¬t‰Òo¥'Š—Aö•îD¶«©ÖSëçjM¤m‘V†QO)v%Re!ŒEHëφ#ã 5ÕrŒ.W+¿VáNæWþ`¡ÓoF룻VrJ*ÿꣻDdð\ÖrJwq\»n­¿¿¯è”dd“¢S ùéç_<3èEú••INyüø±… hí¡{n¥ÜÈ„ƒ­,Ê+{/î.¤®X®N)µ ™e:\COÙ}zJ=îˆ6£Gô—róÕÃzÍp†€µœÒ]qÊ%K‡E„œ8qB<“Ræ”999¤\¶âkÊìì¬ú†ú¶¶¶9Ï6ä”2¿#CªÓµLQ5ö#Eœ ֟ק4«uʈ£Y%›[ާÔÓÜV{niè/Ïí;Ô@@$`-§tWÇ,ütA|BlKK‹ªSææå=ÿò«7o^·þۨ訤ýIÑ1ѧœ4e¢!§” eGÅc[²#w‚/ªÆÛdÇ¿ÜE¯Û–k§ì¶ÆbA   àY¬å”¦Ç)…Ùï”áÃÓ¦$9rDé”ÕÕÕ=ùôÔ> ܹiË_ß­B"§œlÄ)µLQ+îÈŽS²½Ó³† má”ü¬´~íÈη“¥çdù˜@@ 7°–Sº«'ÆO›ŸŸßØØ(:eeeåªÕkè¼ÉÇßÿèã/½öú¸ ?ûâËÕkV9Ò\SS•˜?åýIZæ7Ež¨¤Ñ<îÂèêåÂ)]M僀€€Ã¬å”¦Ç)9¹¼5rXUU¥à”õõõMMMÍÍÍô˜o:ÒΛ,¯(ÏÈL§ƒã‘Q‘䔕•;wnÙ²iÌ;£å+/µQ=öM%(¯Ñ‹U^‘£5Å#Nðçì­lpJ'bvpk9¥ëÚÉ.ùõ¡ƒ=BI§T’DžcšÇõ·GWNéÑ݇ʃ€ôlÖrJ7²~cذ™³?äHÓgζ§1cßvcm{ç¢9RõŸDÌS¦ku®ìò1›V»xÊò8s¥No8é¢w®nh5tÙ=LœÙ"u[± UÖrJwÅ)éö˜wÞÙ²åÛï¾[ýí·ß¬_¿ÊÇgåºu_¯]ûÕš5ËW¯^öÍ7KW­Zòõ׋W¬øò«¯¾X¾ü³A/½ˆßݼRñ8¥Lq¤§ŸJkkÙé ¤ªö¦Õ^†PòpàéYÙyÀ<³ €¨P½eXyk9¥»ð}ÿý÷ÓgÌxú¹ç>ýÌ£O |ð‘Çî{ð¡{ïðžÿþ÷n/¯»ïõ¢÷{ï¿ÿ¾~ðÑÇ}âÉ'ž~fäè1tÎ¥»*Ü;— §Tö»¹Né€&ªÞâ@ 3 ŠÙ;WU´ l.°Ñpuf±–Sº+NIýA‚H· ¢[¥§§ÇÇLJ‡‡Ñ£ÀýüüBBBöìÙ³oß¾ÜÜÜòòrºÇ]Ѓ8e7c8¥ÒùLtJÇ⌠àV7¯ Xx48¥GwŸPyk9¥{ž={–®õ>}ú4]÷MÊH·@§ÝTˆÞ=JSZ[[I=I%éE¡M÷Ö¶.½—;¥´ÇeþÇJ¥Ñst‡™Q©Õ-@z-)=½ë­å”nŒSRGÆûœÇùîé½î¡õ‡SЧµåÕÝ"Ã)=tð£Ú ÐènÁzn£µœÒ(ù…RȉW÷èÍNÉäÙ3œÒôcß4BxªÔý K°&­+ M·fÓzI­¬å”nŒS’)¶TDÚßsVè¾÷’Áaµfò8¥à1ª×šxÊt-ìªõç?ê-qÊøˆ'>ªrã©Ö±x« !Ô@À²´¶?ZgfãŒm v¥µœÒ]€–.[2mÚ4RÉéÓ§ËÞÇGS„÷±cÇÒûäÉ“ç/œûÅ+PrW…{çr9²wÂA«A@@À½¬å”îŠS’#ÒåÞ[·nˆˆ wºâÛÇLJÞésLLŒðù»ï¾£K¿7oÞüþûï“M67$¦í˜­ìÎá §ìNÚX€€"`-§4Tu3“SÒeÝõ¯ÚÚÚ††ú ¼ S„wzEFF’GiÜ—éû¶ÏG/À)MìÝ¢à”ºˆ@@ÜEÀZNéÆ8%ÝH¨Iï•- å†y/A(»yÔÂ)»8  ü¬å”üõ67'Å)©@A)j¼è¶ç]‡¼·ùfÖ³ ¡”8ŒóˆÍê,8¥Y$Q€€˜NÀZNéÆ8¥è”ªÁʬ¬,A(S7^÷Ñ v„Niú0 „Sº,Šç XË)oc%°ã”]Ê:»P ‡¼…üZ/á¾*Êwa¢Ô8¥ªš(nï'… §tlxc.èÖrJ Æ)»"”u‰)Ûßûvî‹$”t¸cN©¼§´8EöA™³†‚õ§´~¡†  ½–€µœÒ]Ý §"”‡k¬ñí\ûUÞt™ÎÎ;yœR UJc–²;TÃ) õ8œÒ.dî$`-§4=N)È~§ R§ϧlll´ eu|ÒºáëfÛÏ¡$¡¤×ºuëvJY×Â) u8¥!\È   ÝIÀZNÙ-—.K§ë×™²hÂINÉ Ù@@@ û XË)ݧd?Gµc˜¥û;¸'-NÙ“zmèa¬å”n„+"=}‘^ôÆÒÒÒ²²2º^§¢óEWçÐm)í¯;é¶çt)e†SvsÁ)»8  ü¬å”nSÚ…’”rÇŽòsBI6YYUYUUÕé“”vÖÖÖÕ××Á)ù™Y9á”f‘D9 žNÀf³Yª fÕǬr,§÷TÆZNéFîBБ"”$”~;üº"”vŸ´ euu5éä.J»v×Õ‘SÖÃ)»¿³ 9¥Ñ åWEkºVó•…%𗣕_:]ºÇ W­?gUeK”þ©õ™Ç.œŸg%ÙãSšÑñÃ?ºÅá{ªÙÌâÐ |º¿þ28œœÍZÛ+öª-ûVYg‡·3Z«°t‰<ˆœrΗ`VõÂr¬å”nSÚC”d”~~þþóæÏ>òÍ—^y}X»num]m}]}ƒý¹ß &:%VÎÓ)uuA¹8¡ T·‰ªÓù·ÚÊ½Ž®ëÈ6Á⟺»Τ•M橦ÔS,“ÁAµ¿´òåÉh'.ÝÁiV9º r&g%9³9S—ÎÛÍõ×Úb¸´BáZ§»•Pn^xÖ)ÝÏVE«æZ[<‡1vó0p¸ž=rFk9¥wÅ)I'ýýý&M™°ðÓùttán”ÇŽ[¸h÷ì™ õd”ôÐïF†SjýÎÓjVÎ~çtJÆ–KõW²®÷hm¾µÌ’±‰Ôík¶{òÙÞ~êäIš@‡Å=Bº §ìþUˆÓ)…ݧø’mà´¶Dªù…šr¯º××Z®VeÄ•5Ô-_už‘UR¹YW]4çT†K†ŽÝ)JÎ<ù•†Á¹§apPíGÆ b-ʹ¤9u[ÁSé"„ƒYšA jˆ»>ªã‡]¾Vm•Eɸ‰è Õ_ÚdžõˆÑ"Õš3ø°¿JÇ<‹`ÓSö»t¹ªë£ÑúH7/º^µge#YZ Ã‡M$`-§4±aF‹êrÊÚÚšÚš¯W}E—ãPT²­­­½­ýdûIJúóÓÏ~<÷£¦ÆÆ£ÇŽQùü×è(7 'Nç)G†Q·í²æ¨.‹§žZ¿ Økc:žFñ YÝŒ:¥3ýâXÃ1¸—€µœÒ]qJßMk?{OVvfaQAHèî—_}ñøñ£¤teiiqvnÆþ‰Ÿ¹ˆ¢˜$”t¼¹ù0…*éPø´‘º·ÿzÕÒ9RØ ˆ/)"ÆÞK5¿¨}Ê}‰ªK©.W«2ªN©›YÙ­š«Ž ÕvñìkµœXZYÅØ¢lO~¥îðT^dÈ^¨Õ.Pú.åàdTIU©…JJ«¤:þU'ŠKçB<ãS9°+£²þ¦lÓØíÕZ¯µ†ƒêxc·W·³L!€B@À-¬å”nA@ ÿÊ¿_òú¿Ï?_P]]µfÝ7‚S’P:Tœ•¾/9aOtآψNIºyêÔ©y >vÏOè\Keµe[^ÙNHk›â®æ{Êr9ÒSšƒz‚€Q<Æl´Läw†zÄz˜·ç°–S:§ ˆÍzÿë e¢éìž›øÄ/&<|¾VšøÈéü‰Ÿ?ñÑ (M wšB>?-%Yùë–>‘†IzÞr]‹à”®c‹’­O€?šhý¶ô€¢;z@'¢ ¦°–S:Ù<²IÕ´¦‹™ßîÿR7. )¦âySÓ·¾»ý[{W¾¾ø™°/ŸîLOKO/z|Ê3ýé,L§¤<âQÙg'[Ý{f‡Söž¾FKA@<Ž€µœÒÉ8%¹cGÇ™³g퉎>wtœno;¡ë”Ÿ¼70ôËg>»}ïÌËd)î£?ìÿü愹×D~xièÔKvMºØï½_nï²ÐÏ[8ôŠ›¾QírÙOX†MâÇ.ÿ:§äg…œ   ÐÍÌpÊÛëmýÙl—§õPÐLsßA%ÞÞÞ^^^$ÝÙrÇööÖÎÔB®F·þ9v´±º¼P×)¿]¹ÐgÚÂ>ÄwÜ/vNúeÈÔ‹Ã?ø¥„ÏnMÿö•ŒïÍHøìæ½s®Þóᯢ>¼4vÎS·ŸôXݧ~KmR OJ?ˆ|p^ŽîPSê"Bpk9¥óqÊÖÖc²+þJ‹2É)…’µÞ⢼õר¯®y«/¥uúùíŸm}÷çÁý#~ÅSÁ3®Ì šå7i÷䋃&_2í·Þ×äîúÐû•?”—•²{NiâȆSšE€€€¹¬å”N¶Üñøñæ£Gév?µ$s õ••eE¹uã”tß ©O^œ¸aÜÚá}Ö¼Õgó˜ŸE/y4ÕwrؼÛý§ü_À×}tÓ®×îÿ«]þq÷Œ?ÍøÓ¾µ¯ùÌxhÓÚņœ’•DœR·÷ᔺˆ@@ÜEÀZNé|œ²ª¼ 8?-?k?)ZnFbæÁ˜´¤]§$úSžùmòŽÙ»>¹g×ÇwÍ»wï7o¤úÏ ûüÑoGöýv”=ùM»nïªÁ~3nðz5¥àyÿ‰øz茡ÿVöœònJ_”Þ•Mv§!w ë/×y§;oýîF {-¬§½¶ëÑpO'`-§t’&¹cæÁèÄ(¿ØÐ-{C7SŠ Ù¾Ç)Éÿy;ø³§ý>º›Räׯï˜}çêá¿\9ô"J'ýÉwæÍÑß ÛòÁ«Gÿzå[—¬Ñ/èËA“^âd1;?—:¥“–éÑ? Ü^yFœìéèR]Љåódäd±¡¯à”! ࡬å”NÆ)¾?%uÞ´×þ¾kéÿùo™uצ·¯÷'ÿyîüìé/^ýÉVï»#WXø”ÿ‚'¾xå!-ò‹­Þ÷LzNÙ}#ß§”{Gå¼[8_B÷¡T,Éí•w¾<%ðä1«ºsYfÕÙ™rk¯Ö1©YÊ>;SIÌ  àRÖrJ›jTO?xéÚ€Ï_Ú:ÛkÕÛW|9ø"²ÆuÿJ~ñò;?{.fý„Ý_¾´üÍ_‰N¹äŸ¯Ÿt#œÒÄ.Ó-ÊSÊ‚R²+·{2v5Äb•A/éù Êð˜j}„¥¬2Òªj•£»ÿfÔSµÒÊËDœý•g±iºUê£Ú#J8Òb¥ßÊúW•›RS´à«V^·_¤åóÔ‡‡³XެJ²þUÅWÒQ§d(¢Óm/'ÝŠ1ÈUén(@À]¬å”FEÐDjSž¿bí”dŠ¢5 >åü/÷Y?ùï²éK^ÿéÊ1€SšØºEñ;¥ªÇˆÙßêVC¶+•íƒe†¤ôEÇò3ÊѪ°V=µœR¶ÿV­§t¢LT¿âJU§”‘ÔýS·[µ U„'›êXRêµ5çxàd«*âªó2äLµßµêÉ®¿îº£ D:t;ÔÅa—°–SšØT£z:ùéþËG\¾jÌVŽù½=ºüëQ¿ûzäoWŒì¿bÄo–ï·ü-J—-óÒÎô«eÃ.Y<ä—pJ»L·(§T¶ç©Ê £2 ÷Rzç>Xê(ÒøOü‰á”Z ¨»k×j£L4UCY¼ÒwÝžåwJ!§øÒr/­†ëJ˜VMd¢ê”J7už³¬>÷K7ŒCþßì^ÓeËXÇyFò€¸Ž€µœÒ¨šÈeÚ«7Žø'ã¹°3]Dé=J‹©ÏøGúLx´Ýç|Ò}§<öÓÉOüŒÒ”ç®0±(ŠM€Ç)µQË `îj§ä©Ïþ[×?»vÝypµSjU›'¬åŒSªö‹.¶hêr–Žg†êþxpÀ)ŽCž1©[¦îzjÊRt« ް–S:ÖÕ¹Œê)=§±±±ôСôô´½1Ñþ>ëÖ,þâ³yŸÌ™3{æ¼¹-þbÑÚÕ+·oݼ+6&ê`rRNvæá¦&댢ÌrJ!º£µur·ä§dû„jä†ÓWDkái—®»äeïÒ¹´àsNwÆt)iý ›£ŸÎÔGV¬®žšå”2b±Òét‡¡ñÆXÓ¥õ‘ý~prÍÅ@ÀÕ¬å”FEAÇPQ>ë}æ/œk(ù¬_çê¾Aù2üqJ¥úhí¨x$IV i(EfK¢NÉvÏâ,FóËö÷ÊrTP:QU¤T[$ЏLTÛ+ͬ\„T+uµ@Z¾î¢µ2Ëš¬\¨´k”|x8óÔSk¨¨ÖG·±²¹´ Qº&ÏUí­qËÃGuüènÄ´D™G u Gn&`-§4±ñ†œ’lÒ袘Åè"ßy§dÈ¥Ãx=%Xâ)õt¸#zÕŒæö¦¹¥™Øº¿ýL\Š0€µœÒ²Y*JÄC‡•———u¾ÊËÊË+*Êé?zUVTVVVѿʪ*JU•”NiúXÔ-Ð8¥n™F3hE –ãêüžROWsèå›Þ•¦Ø £ ¦0Á)ï.¶]¹ÞÖo‘ÍvyZßýÇ4÷TâíííååE`J-]]ˆ ˆ¥¥¥$ä“{:_Q{ö|·aCTçkÆ ÑÑQQÑÑ7n¬®ª†SººGTË·‚Sº¥áX(€€XŸ€µœÒPpÑô8%…')I¡Êï¾#™üáE¹qã&û¿ÎWMM œÒ-#Né$vÙˆW9ɳƒ€H XË)ÝÕ7Bœ’l’lS¨’“É/{T²ºš$2""¢¶óYW[ §tKOÁ)Ý‚ ÖrJ÷Æ)É&IéäÉÒÊè˜hŠJÒ‹…u¾èC]])N©um,O·õÎL¶™VÍÉ?J,’“Ç)µ(yÊtjžMŒî6‚1Š õ²Qž !mïTUÌávm¯Yíb8»Leó¥Stá0¶FËQíÆÄîìw6%öðfp0Ô_lž<=¥„©Õ.žÒØí2´Ê»:³cCÑÕµ’•ÏÃÜ”*©vºt·®ºÙT­­Ñm “õ·–S:ÙrÇööÖÎÔBÛÚZŽm¬./äwJ:g’B•¤“©iiéiéÛ¶mµG'›šH%›7Ó‹¾:Ò|Ä1§”ú"Ã)•cEtJ­µN9]uuÛúàd?jͧT’1º½`ä—Oþ}°TY̪§—#ÒÓZéøWFÝœºt‡!)t¾EœõQª0ÿ˜”f­=1§ï‚ÃØÓ;ÐMª‹Ë1Z ÑuÊE›qF±âž®û͹Dé¾X¶Ûe%„âø¹rˆò¯eº9»¹ß­å”ÎÇ)[[ɶ&¥E™ä”BÉZïBÐÑÏ‡à”‘ñqq ññÛ¶o£ØdÒ† [o½yÓ¥o¸à|J/ùEÀn_òÞ;Â(¤YdÃQµeãϧ·/ÊO«pÙŽÍè6ˆs5ë¶lpJåÖÇèöB+?Ê1´ÿæ_•t·øº«tƒÆocº{nž­–j!Zõa×Óh}œJÙvO—°4¿óý%Z‚’°ª=°É(ë#N14UË1Z~’ŽåTîÚ+Çus)Õ=xÛUå^›gÜò÷£Ö8qx=å¤j-§ä¬´V6rÇãÇ›m:|¸–À5ÔWV–åäŒS’MRÉô›žžž‘‘±}ûö]/<¿ùç}‡?`Âkû'½ž0apô»¯ÄŒæ{õ•«_}E˜…gCo–SŠ›Z­©µZòo€œì×ÍÞËR VÖûü› ö6Îùrজ®Æ¿>:¶ï1äpü•‘©žYƹÕj”)Õ`ïÑ !Šâô Ý &ce7T+FfCåèVØ™ Ö© Ϙd¬›ânTÓ­-¿r˜I=Rk¹ìÒœé;a^k9¥óqʪò‚âü´ü¬ý47#1ó`LZR§SÒÉ”t9½ÓÍããã}^zÑÿêߘøú¾OF<Gð³·Ûè^œ§üe:¯ƒ¦«’jü-Òêzn<£;´´Æ€é t›àìÀRž…±0:lÄݺl»Í&À^«ƒÃ4Tg´–S:Ù6rÇ̃щQ~±¡[ö†n¦²).|›Q§Œ‹§ effæ†__–üޫуî îöÝOßæÿä¿çxqêW' ~ñ—ŸèàUý.;~ü¸“Õî†Ù-¾¢rèÍNÉã4<½Ì㔲Ÿ.<û9éoi~Ý*ñÔÇ]YwǯK†í”f Šå¨ÎÂ3>y’.7Y!ìú; ÙÐHVþ&1êZ‹sF»µø8Ü_œÛj‡³iY‘E¦Ë¶º«®ÇKÍRõg-cÀë9Ý ü+‡šì”}ôÓÜwP‰···——IU(§“qJ'ïOIJºa¹gOE)éìÉ}cž }ööOݶcà¿ýFܵ|åëW~ìó;ï•÷,ÞøŸÏ}¾=ÿ|åù”†šÜ=™]1tº§æÒ¥ð8¥àâK¶™öˆéZ`UÛ¥ÕXFïèò²»X·ÎQ×Ê‘í{ŒöšrÜJKà䬺Çr¬Cë‘î(2äšÊ]¬îz!óÝõ‹sFË‘nšx6žªÅÙߪn÷íâ©O7äÑj”Vvótqq†ÖGÆ*fH(Ùå°Qhm\ѧÖrJ[hHO…kt§¬«¯£çåк¥Ïo~“9‹E6°Ý-Ö&TÚ ÎuÓR ïa•±–Sòu»¿(²Ã½qÑK—/ÙòUܾu û7ìOÝ~ Í7éà–øä‰Šÿ*"vqXÌÂíŸP27/›fÙ¤[d0—Sʶ;âŸîš.ؤrK§U-b2)‘Š”êg£åh‰/»Íúůº·04x´ø¸¨]º çoº…(ŠèŽgCÐ,B€½þ*WÆF½Zñ¬taâ¡Õ°–Sº" bRrâ·ÖEÄ|—üUÂUûÓ¿;¾1)emÜþ¯ö$|ûÉ®ÈüBÆùîšµy놽q14ËÄ)SÜRÛÞ¼PuJU­1ꔲßâªÃÀèæR5x¦-ÐUXi {ã ]}¤¿ÙœÙy(ySªm-§ä.ê6ž¿(Dÿ€K–}áë·nëŽ[w,W¦ÍÛ—RÚ´u%ÝýÛï|h–#GêÖAwïË_r8%ÊxÅË‘Žj¥ó)=Uwèªnýe-åo¡’–š›Ò.öêÏÙ"8¥îøA†žDÀèú«å”ª?´T3KÝQæ—œ+iOâï|[¬å”ηÇH?ýtþ¸ñï¼;n ¥·ßEïô§ðÞ¥èóÜysh–ÅK–h-K¹t`hjíKtµÀž2 œRè)Æf”³+µ¤¡*ÓG­ºéV‰§Ίu[»8ëã|Á)uÇ2ô¬¿ZšÈé¦b6Ƈƒ·{b-§ä.êÒá/Šqî¼Æ¼3rÔ˜á£ßAï”~4Ç›f¡›Ÿ3œR¢0´âß7;P¬.7+g€SªŽ £Ã€‘ßPQ<.È3œxÊá©Xw¶‹§>Î ¥ò÷ƒrÏÇ¿¹àé äwp@(?°9xÃ)Mïn3œ²Äv…­ß"›íò´> úiî;¨ÄÛÛÛËË‹$Àô›^ â’e_~ðá?¿í;ü}wøo£[ Mž:ÑwǶÉS'ЇñÇüò›Ã‡Ž=|ðàW|:oÜøw×}+÷‘ÒKŸUw Z Ù>C˜]È,ýl: Ø›RU¼d›TÑÑ*Ç5q… ÊÖÙo3ƘìÎvIWaÝÕ„±^í/iw³7ºµB°ÆúË^MîȳŽ8攆¶–âÜ •±–SòuÑðEv¸ò› Î Žˆ Û³'",,x¦÷‡»ƒéÒN3fôŒ™Ž{ïÝÏ>ûìýiSH:sJÙ>’E%RÚpž}’.(ÊÀã”RÕVnST-\œØ ùe=nèWnåyƃ´±Z•áßbêV‰stÉÊ+Àϧ;Û%Ž1žÖ1O90žyj…< `)ŒõW«žª³H·]Ò­‡êº&Ë ÝÉjÕGüí͹òZ r÷TÆZNÙ=m–-…ìpÕ7+}ÔJsæÎžýÑÌY³§Ó‡™ÞÓ)?ãð·ÒQÄñ§õ•r€*wEÊ=YoÖœNé–Q„…‚€˜KÀ¬}œYå˜ÛºYšµœ’?¸¨ÛBQ<ïBœrƬiüiå*»S¾ýî˜Ì¬LeM´Qñ²(+GÕ)e?’zÛz§ÔöÈ  î"`-§t ²Ã¯W~5}æüiÅÊå4×ð‘oŽy{”“N©*”ʉZaK·s×Bá”î"å‚€€€.k9¥‰qJÝ–‹ÈW|½ìÃï+ÓûÓ&“8¾2ø%ÊCïô™¦P6ÊOSvîÜùþ“ùR0Eå)bìS=TOò*=}„¿ÉšN顇jƒ€ôÖrJ·';üjÅÒiÓ§ÊÒ”÷'¾úÚËô­4ÑšNùibppмs¬so;~í .8¥3ô0/€€¸”€µœÒ]qÊå+–R2p§ÿk¯ ô{éåAtk¡ao½AâH¹'¼©©±ép#]NÒíÐǼ3Š=Sç³Ï>u²{à”üá”ü¬@@º™€µœ²›/,ŽÄqÙWK¦~0iðk¯Ž~{ä󃞣Ççb¾ôÊ ôU⾄“'ÛO:yúô©ôôTòHJô|ð-Û6Ò]*ÝRá^»P8e¯íz4@@Àú¬å”îŠSnß±méòÅ?¤e_.]öå˯¾HNyìØQÊØø½¤’¾~[›››H(É&GŒzkûöíÖïàžTC8eOêM´@@ ‡°–Sºî¬Y3e'MJÿLÚ—xêôiJ²IJBœ’2LŸñaKK‹[*Ük §ìµ]†ƒ€XŸ€µœÒ-qJꤎŽÄÚÚÚ¼¼¼ÄÄÄÈÈÈ   ŸW¿L'PFGïÉÊÊlòÍáÃrrrÚÛÛ­ßµ=¯†pÊž×§h€€@!`-§´Öï¿ÿ¾¹¹yþ‚yC‡Ù/Ö¡÷ ç;vÌR•ìU•SöªîFcA@<‹€µœÒ]qJÏê³^[[8e¯íz4@@ÀúÌqÊ+}lýÙl—§õPÐLsßA%ÞÞÞ^^^$®F°eô[×q&Êìêú |×€SºŽ-J' XË)Æ)¡¬ÏØTupm%¥k©êà:Ê ­trĸqv8¥ácÑ   À&`-§4Ú[äˆ% _•ʘ„Tšø•4UDD³] ò[„œÒ"j€€€€’€µœÒhœRpʽ3/ãL”N鹫œÒsû5èñ¬å”Fq N9kÌÕ<çSR68¥Q–ʧ´Tw 2   %`-§t,NIBɧ¤l9‘óÆ)ñWë^BÊkhdqJÕˆ£LU/Ä‘—©: œ’§ë 9¥Ñ‹¢¤?¤•Ñš®UaÕ$;}–ÝXiP\Ye}+œñI·Éºg‹c^ö£‹QU~nZ|x†G·üE!§©G€å__<¢9 `)ÖrJΧì§÷C²CÛª‡¿eY©ŒjͧäY+8’Ÿ!ûÀþ]¡[CÕå2Fˆ–ÕÉGvÏ ñvB²é±ošÑ(y¶P®Xnï)³7;¥Ì-dÎïRZ¡F¯8 §¤²]AWò*ÕΆ(Õ]£z2Ò]U;K«|ör•]`V~vwèþšÒº¬X®.peþõ…=Nt}ÚÉßH4 ³€€{ XË) ±èè蜒óº—à”ííí.ÒJCõGf£œwJ­½‹RwdÁNSQ›ûHÕ¸O9œ•ÔU@±2‘ÕڿꨋE7£NœŽ(MU-Š’¾³k¢…Kµß¿%TýŒ³]²y¥=.º»V}´Z§å‹Œvi¹©*gžÌœ«€êï]Q–RF{ù·3Œþ54ž‘,BÀZNɧ$)<}ú4 bQðT2E1¥‡|DŸé]LŸB†Â )4ËñãÇÉG-Ò¨?W8¥téZ;$gvT<.È `È¥8ëiÔEtB¹\¥`ér`g0ÄgDqº—Ô)ÙœwJ£Õ6ÚZ¤º pŽ%­Õ‡§¿´Üšg•äa¥›‡§<ÃRwlËd”g}×­<2€€5 XË)ù N¹pÁäˆô¸EY’>JGöyÆôÑ'Nœ€Sò£¶NNçRˆèJ’,ƒª3q ¨î>‰³>Zåðˆ£9†b-Jnª<ºŽP¬.(Îl<¢ ,ÎPÛu»ÉENÉé¾FN7?'F]•AÖeÎÈoʆÈèúÂ'â åé#Ç6¦4…€@w°–SòÇ)‰ya[[[CCCaaaJJJbbbddd@@ÀæÍ›7u¾6nÜHï¾¾¾û÷ïÏÊÊ***jll^©2ºãJ¶GÔÇðGe´ê©å”F]MVUYÛ…¥2užŠ eŠ/­:󸯖‹h¹ j{ tÀ)u èö©ãGµL£ãV«_õaoº¬ÅœÕp~[„@T XË)…8%Ï»ÐÑ)I(éÕØØHGºI")$IIyüÇ/8¥G¯ÿ–SÙ^ÙŠ¬ú'Ïú‹< ®#`-§4ÚN!NI'S’J’S²ã”­­­ §4´hþ-£¡b‘™MÀ§”:ŸY;!Oé}O©'†=×õ¦ëJæigé+ÎY @ û XË)‹SŠNIZI§QŠ/á|J O’Mž¶~‹l¶ËÓœtJǺ§££ƒŽwWVVæææ&''GGGïÙ³'<<<"""&&fÿþý………t §œŽ-sYœÒ ½€:€€€€*k9¥Ñ8¥)Jg•¥.¿ÓÓßMAañBà”ï T@@ 7°–Sí‰ ':ðM™'L|O¶Êc<:yÄæŒv®2?§S2nÄÍjZº»ÊÑåÀ=·U‹Òj—cÔKÆžcp0€é–×ò³lk9¥Ñ8¥Ü(g¡ìÑBI•'-¶ì3±bÑùbÇ)e—ÔPfΣÛÊœÒ)ÝpìqJ8¥¡™A@@Àt&8åÝŶ+×Ûú-²Ù.Os‹SÒɔą‚”±o1TIÑJ1LÙÖÖÖÒÒâpœRyÍò„K¡o¤*"öœ2ªuä]«@™°â|J lÃ)Mß4 @0D '8%LI*INÉŽS¶¶¶2┲ ¥•ÿT:%â”pJC«=2ƒ€€€éz”S’VÒi”âK8Ÿ’“d“'Ož¤P%#Nie‰T½{‘´Â8ŸNiú¦‚€€€!=Ä)É&µâ”$”d“ä”ííí=#N©Ô_Ä)ᔆV{dÓ Sž={š¿XÊìHåÏNO¢wÛ#Çln?Ÿ’Ž} NIw5§‹¾)NIáIº"G´ÉS§Nõ€8%#’Š8%œ’FNprD*¶¦¹#½´#9ÿT|f{Lº=íImHi¥z m×¾Vÿ„–âšS”³¶¶ÒrNiˆ‹p©¸ô%ÜŸÒ£â”pJCk2ƒ€€€é§ InMÊ=“”†ÞsÏRŠË9›ÕA)<£#8õLpÊ™°ö[ñ¬ Ê´SŽŸ0ŽÑPš>}š ¢ðNˆSÂ)Mß4 @0D@pÊÝIm 9v­Ì=“ÛaO9±)<«cWZGPÊé ýÖsJ¡©th»¢¢"99y×®]>>>_|ñÅ¢E‹æÏŸ¿`Á‚Å‹¯]»6<<<++‹n9D9•tHÈH+=ýÝP¯{hf<ïÛC;Õè z‚Sö†~B‰œÃ@@,K@pJ:ir>Oy–'朥—uvoÖJáé!)a)gÂØon­cß–ÅŠŠ¹‚œÒTQ&€€˜B€œrUP1gQÛb«¬uÝ7g½‘­g€SöŒ~D+@@z$rÄÃÇN,ó/˜³!kƺìéë²”iæúœ¹r–”4o‡SöÈaà‚SzF?¡–  ½’€gߟ²WvYïm4œ²÷ö=Z  `yª÷§nNI'YÒ=†‚’Ú¥÷§,­(gÝK¨ï€‚þcšû*ñöööòò" °<TÐcÀ)=¦«PQÞG@pJºáyyÃ÷…5ßg—wd”M/éH-:›\`¿d‡î+Dw©ŒL=Öy/¡´¼5§ô±õ[d³]ž§ì}C¨ûZ §ì>ÖX€€$ 8%=A‡„2¿²#ãÐYÁ&é2pºEeBçmÏ£Ò;"SN‡´_÷½ç@!œÒ cd7‰œÒ$(@@Ì' 8e|v»¡L)ê ›¤””s†T2"õ¬(NyЧ ŒÍSšß (‘‡œ’‡ò€€€€[N•~Ò~¼»¤óxwçÓt(‘J† w¦Lé $8å–ˆl8¥[z Å=Ï1@@@Àº§¤‹r(B™RØ1pè\!NIBI6I‰¦§Üš§´nwöìš!NÙ³û­ðhÒçè> Ix‚Npª](…$>GÇ'NéÑîÉ•‡Szrï¡î  =œ€à”tÏ áx·T+ÅÏ$—Áª<`SÂ){ø€°róà”VîÔ @@ —œrwR›ý*ïÎ$ª¤ðÁ.”©g‚RNuÞKHãy߸—P/GÝÒ|8e·`ÆB@@@À‚Sîk£{Ñ­(…$jåδ3B Ù3×eN_—E‰> é£ ¹ËJšŽ·«8å=Ŷ+ÖÛú-²Ù.OƒSº«#{ÃrÙNIC @@@À]šêó&yœNÙ|Î md;åÙ³§ U’V9ÝYVÓO®Çš@@@ WÐÝEÊö¹´W5*””NiH]Ù4ºÇ¾kš;ÒK;’óOÅg¶Ç¤·Ócì#RZ)…h£GE%µïÚ×êŸÐR\sŠêTZQNïÂ,ô-Ý÷_x§ÌÂ;eL–ù´kB^E@ÜEòïUᔦ r5]§$;,oø¾°æûìòŽŒ²³é%©EgSŠ:’ Î&埡»ùÓ-Xé¾t U5-¯„Þ…Y豤ô)á}¾ýqRôN—­Q:¤åD3€€ô*â.’¯ §tµ¡|Óè:%ý–¢¡Ÿ_Ù‘qè,Ù$©$©!ݾßþÔÑ,»PÒ-X#SN‡l¡:í9PHïÂ,dœöÞw¾'çŸÞéÞ”aƺìÖ–#H   Ыˆ»Hé^•v©BüEu¯ §4ÍxP« è:e|v»¡¤Ø$Ù¤ ”BŠH=+$û-XÚã”±9ôNGÉi»PŠéœ_ áLºT­­õ(€€ô*ö]ä÷ªâ.•4ª{U8¥«Eå›F@×)£ÒOÚw—Ø#”äˆR¡¤çD…¥œ¡wJ‚Sn‰È¦w:í’41÷,ïzÏéüœsVtÊööH   ЫÐ.R¶W•îXU÷ªpJÓŒ¹š€®SÒE9¡L)üQ„’TRH!ZIIpÊ ¡YœNyêd €€ô*ö“Ä${Uáè…'Åxr¯ §tµ¡|Óè:%]¬M#žN…GüÞ¬3”‚S»’°„°ŸOIV mÆQl2çÜ{Vçç¬â”§Nµ#€€@¯"@»Hq¯J;VJÂ.•’L+Ž*œÒ4ãAA®& ë”t3 ñ´HqÄï‘8¥].)TyÀ§œ’î4DWóÐå;±9ö‹xèÖá]¸F‡Î§Ù3×eÒ6B¢?…ôц\ =’)’SRª­­LÌ(¦kÀ•)8>Oȃ  ½€{U8¥U„ õÐ%ÀpÊcG*@@@<Žíý³Ó“èÝöÈ1û|Jò$0‹€0ìÄ_BÂ¥`º2Š   –% ï”” L' tJÓA@@º“+NiYFÅziœ²4MÐ<ö½iÃòµß|¶jÅB!­X>ÿ«¥Ÿ,_: @@@@ 7 '$3\õõB!­[óy£¦Sfåd8¸?q_¼âã÷ÆÆEW–"cöÚStŒ=ÅÄ„KRXLLXLthLt0+EíŽéLÑ)*jWtÔNõ´'  @@@@ ;øGïù!EEú )zßÞhÿøØ@!íO JOÔtÊʪÒC¥…EÅB*(ÌË/ÈíLÙùùÙyùYù©óCº"¥åçw¦ƒ€€phj(¤t¸¡àÇ)÷pé©!Ûžês(i;¥Ä ››ë(u em§/ª§æÃU’$äÙÔTNIªM‡ä©¡¸Éžìm¶¤±¡@HɉÁÒ;ÑÐåÂIønßÜô£ó)››j(nª÷Ð]›ƒ¦JÙÄÃö %½ ɾ¢6–QêüpHx§ÔØPB©óBïâÆ†"i¢‹¾ë d‰.8ÚHNÒX—+&ºFG<öm¶® < pòäÉÅ)#„Æ›8Z„ÏÒwá+駈9U?H³ñ|V­†l¢P éâdµU¢¬­˜GöAl£Œ†ôOeUç=*ݧU[YUµ†¬gU«Íh‹²7­°ìW²Vð Qe[x†«óë‘êXUŽöWÝôŒ®´ìCÅ<™@WlR¡Ô‰S66TPêTÀ rDJç^Û? ôÎoK;S‰8¥sbIc½]%ÙŠw´ûãd}m>¥†ÚÛ×&ÉŠà–ÏV¨ƒ[Ž…Z‡¡uú5éyªÊS(U–SUéJ’)û+Ë:S©=i:eÙ¡TJ¥%i‡u%áO1uM/I9¤—J‹“õSÑþRJÅIòT´¯T’„'ï•í“‹«¢x# !ÒÑ‚Ï   ü%ˆ©¤(^H”®? ãJÎ%M§,*HÖIùû‹ÔRa~"3%æŸKyñ…²”I˜(|–¤‚ÜØ‚Ü$W(ÌÝ+&ÍeåÄäD IÓ);ã‘ée‡2ÊežKôYž(Où¹TV’&OÁN•Ô•ó`Y‰v*>Pöã¤ìä ˆ"€€€€€ƒÎRŽ0%SÔóPAbIA‚ŠS^öluÿ1Í}•ôyªÁÉd/ @@@@ Ç¸»Øö÷(›ôžç¿|¸ðWÏ—þìÑ‚ŸÜ—ïd²ÝSbB¢*öŒtO±ÍÉtw‰ÍÙd˜N7ÄI’]³;=>-22_Ñœoˆóu œ¯†³+ˆÓ#³«VXÑLi‹Ó q~U5§OnˆUgOiˆ%†)0_Ñœ¯†óu0¥„bÛmé¶#mW~gë·Èfëïg»Ò§3­?÷AøÓ½‰*ãdroýÏ-ÌÝíÉ”®t¾ÎvèzsH:_ çy^Amq:9_ P8¹’vÎî< çK0&­éN·Å"=b g 1ch9[Sv"=¦!¦ÐpºÖ2§ëÐåK¦ôl(„x~gß’ÿþ›N§üõJûÿ@@@@@ÀQÿ iR;¶÷U¢IEND®B`‚bitpim-1.0.7+dfsg1/help/makehelp.sh0000755001616600161660000000317210562764212015234 0ustar amuamu#!/bin/bash # This should only run on Windows since we also need to build CHM files # although in theory it could run against the Linux and Mac versions # of helpblocks # These are what all the control files are # # HHP project file (MS Html Help workshop) # HHC table of contents file # HHK index # WXH project file (HelpBlocks) XML # windows fudge PATH=/usr/bin:$PATH if [ "$(uname -o)" = "Cygwin" ] then cygwin=true else cygwin=false fi PYTHON=python HBDIR="/c/program files/helpblocks" if $cygwin then HBDIR="/cygdrive"$HBDIR fi # version info for helpblocks pre-processor $PYTHON src/version.py > help/version.h # phone features info PYTHONPATH=src $PYTHON -O help/phone_features.py > help/phonesupporttable # update web tree of docs cd help $PYTHON contentsme.py bitpim.hhc # remove old files rm -f *.htm bitpim.chm bitpim.htb ../resources/bitpim.chm ../resources/bitpim.htb # Run helpblocks echo "Building the help files using HelpBlocks..." "$HBDIR"/helpblocks --rebuild --chm --wxhtml bitpim.wxh echo "generate various ids" # generate various ids $PYTHON genids.py bitpim_alias.h ../src/helpids.py cp bitpim.htb bitpim.chm ../resources # did anyone forget to rename files? if [ `grep doc- bitpim.hhp | wc -l` -gt 0 ] then echo "You forgot to rename some files" grep doc- bitpim.hhp exit 1 fi cd .. # copy into website if [ -d ../website/site/.svn ] then echo "Copying help into web site tree" webhelp="../website/site/help" rm -rf "$webhelp" mkdir -p "$webhelp" $PYTHON ../website/hb2web/hb2web.py --colour "#99ffcc" help/bitpim.htb "$webhelp" rm -rf "$webhelp/../testhelp" fi bitpim-1.0.7+dfsg1/help/internals-code.htd0000644001616600161660000000327210360163373016515 0ustar amuamu#include "pagestart.h"

Your rights

BitPim is distributed as URL(http://www.opensource.org/docs/definition.php,open source) and URL(http://www.gnu.org/philosophy/free-sw.html,free software) under the URL(http://www.gnu.org/copyleft/gpl.html,GNU General Public License) (aka GPL). Those links contain more detail on what those terms specifically mean, and the details of the license which is what allows you modify and redistribute BitPim.

The source code is what makes BitPim work the way it does. It has taken man years to produce and continues to grow and be added to and improved all the time. That investment of time and effort is largely due to these rights.

  • You have the right to the source code of BitPim. Anyone providing a binary version must provide the exact source code they used on request.

  • You have the right to modify that source code.

  • You have the right to give your changes in source or binary form to others.

  • You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.

  • If you give your changes to others, then you cannot take away the rights you had. (eg you must make the source available on request, and you cannot restrict them from further redistribution).

Show me the code!

You will need to get up and running with the source code. Follow the instructions at URL(http://bitpim.org/developer.html,bitpim.org/developer.html). Make sure you read the archives of the bitpim-devel mailing list. Then edit the code to make the changes you want. #include "pageend.h" bitpim-1.0.7+dfsg1/help/screen-failedtoopencomms.png0000644001616600161660000001316107727002770020604 0ustar amuamu‰PNG  IHDRÔ–gÀy¿sBIT|dˆ(IDATxœíÝy˜#eÇñoåîtÏ0Ârˆ(ˆºÀÀ0 ìÈÂŒ0Ã1Ê!"à+ .¬ˆîÎ(*+ ëÉ­rÈá —»ëâ>iD]ïg×UXa@fºgº;I§;©ý£:镤’¼¹z~ŸçÉÓIÕ[Uo]ùå}«’¶‰„ˆˆˆ4-ˆÅbÝ®‹ˆˆH_Z¿~=€¨ÃÃÃ]«ŒˆˆH¿ ¿ˆÇ¥c­¢'VùpË¥`¹ ·\Êå6ÜuY.ë.Ë}¸ë²¬’Æê`¹–«²,Ër)W­nu«Ú6oC,Ü–…ëvhzŸ•/ËÓ±WcŸyª«Ë~«º½Z¯CÕ}VkYÍ£Íì³ëà~ü{ßïmÙgUçáý<± œ«ÔÁýø÷º½Ê+_«®–e°îû¬Ú<ªÔÁã6¯Øgm°qùhṯíKÙêé_#Wlt~–e±àê_U W ŠˆÈœgê>¡D"Quœº|EDD P Šˆˆ @1 ê5TÛþ§šZOzZ€=ù1§|øSÎëôUÎëOyš¾šÜØGðÍÿç–æ#ýiò¿Þ @øÐ[Ûºœôcg9êö¶.§]RŸR1,ºò{Ã’¬v>zÒÆÒrNr†¯¾ßµ|ò¾·0xêƒLÜ»ªjÝO¨ê8‘NˆÇã€ûuÑZ㪩{S’å[OÍïüÔ›>|µç²¦åF¯À·ð³]Y¾´Oø['­ôãg9ò;…a‘å·_N§¤¾ï„iôÄÙM>¼†äCkJB5ù ¦Ñ·o ø»|ÉûO&yÿÉDO. Õf žVž}¸-en‹Çã%Á™ÓF©ËWdʇéÀ‰÷• Ïiò¡5Îß’0-•o&7ž\1.ßR-6Ó:én!Z¦´NÁÀ×fìéW ³BWÏŽ/ëòu“K~´b˜oð3¥eÆ?ÒP½ò­S€ÜÈø^[xÝzyEyÿΟ«;ÏìæË*§û«/ÎŽñC®Óv»®äõôó—T–ÙãK³ãÿ|±û|^ó/uë8õU ¾î«³ãŸú@åø7|}vüïß_9~ÿo0õ»÷^‡øfáyæ¿ß[Q>tÐ d~{Áìë7Þ8[þ×ç9þivدf†½ùfçõ/ßS1O€ð_ßRxîÖå;ùÓs*§Yú­ÙñO¼«rü²o;ã?»0,ýã³ ­T·.ßô£gVÌ'»cv|â®õ¼õ®’ש®-y=pÜݮәVhvàWdò&îYYòZݽÒ+‰„‘0-T;÷OعÄÎÎ> ãfÂÔ ~²ð°3ó\\Ê S_ôÓ3'HsWΖwžûæ]ƒoÞ5žæë[0ÛÍ[Üå›Sÿ¢kñ/¾ÿb'H³¯ü}Íùe7Ø™n×/Ù¿TÑ|N¿piaøô&'L»_ïLÇ‹ðß&|DiæƒJ»|Ë¥4°GßQx¤‡Ïp-9æN"Ç8AšþÏw†çÃtàØï2pÜwaœ^u¹½(¹a¶Ešü^íÖéàiw¯¬Y^¤“Êó™0…–®¡:7&ÙÓÇžªl¥¶“oÞ5…›’zQ`ÉuF®僴Å­Ó†¦Ûïë¯DpÿoÔ\§|˜^t­n„ð[n©_¨ÖôKo+Ô!|ø·˜|â]®­Ôv‰s§ç²N¨Vß^©œV9Íñ÷6S­ŽÊßœÔÉÖ°H£Ê¯™–_Sõª¥.ßâjaX“áêÖí;—¹uûJû·Póoî“?9»Ö$m5pìwIýpmI·o­.ß÷Ôþqð‹®¾Ÿä†“JZ¦ÑSÐuTé;åݼÅÝ¿¿†jŠ/úé™gÝ}£è”Àî×;OôÉ}‡5p¬ÓÕ‹©GÖ’zäôŽ\GÍß]Uy#’iù¯Í”Üå+Ò#Ü®™¶ª=y—onâÊ’k¨ã{¸»`úÅKë*.ÿÜÅU¯¡¶jêé ×P{Qþ†¤v˜|òœÂ5Ô^SÞ:5màçîÞòï¡ÂtæÆ¤|¨º}5y¿swoµ¯ÍDW?0û|Í®eDúAÇ®¡ÖRëªùØÌwPkó |š\ê£]¾Åwùú†>CnüʆƒÔ·à³äF¯(¹Ë׿èZ²[/¯¸Ó·Þ]¾þ]>Ovó‡É¾Tz§oñ]¾ÅŠoD ì6{M5ðêë™ÞtIE—oñ]¾Í ¾ö+Lýñ¢Š;}ó×Qƒ¯ÿ*SO]Xq§oñ]¾í:ø&2¿>¯p·¯)áCocògçTÜ雿˷Ö5ÔÉÇÏ&¼ìÛD–}‡ôãg•Üå[.rÔí¤t&éGKoBrîòõÞÛÐh—o3N¸Ô÷O!ùðš’áå?ì]µäƒ«]C5zÒÆ–zŒO}‰{Wé._éIµ‚³™Pµ‰„‹ÅÖ?o±ù;~]oJªúOx[ÿ§Åúãîu-yâáŸëŒ›©ƒþÁ¸™:èŒ×¨ƒÇmžßg#Wlô¿Í¬[·®ðïÛ6.- ëÉ._‘~Ó37%‰ˆˆ´K³×E¡@5ȿĹžjaÕ))""RÑ]ß& T™Óò×;ÛM×PEDD (i¡&ñ.UCDDJÙ‡I¯P UDDĪˆˆˆ T¨"""(PEDD P Šˆˆ @1@*""b€UDDĪˆˆˆ T¨"""(PEDD P Šˆˆ @1@*""b€UDDĪˆˆˆ T¨"""ô\ ÆbÇ‹Þíjˆˆˆ4¤§õèØ1@ØF,烼¥ÛUñ¤g5‹31n3™ž&¸ñÆãÄUv·b"""ôL NŒC*A¿8€Ã{‰+žæ„•w·r"""uôD ._'9– –g`9Øó¸ü²ÇÉNÙgÞÛÝJŠˆˆÔÐ:™„© „`ù,àI°vf* G,{™cßú Û&Ý®¦ˆˆHU=¨ãcðC8À¹~ú¿@˜€ßù¥‘Jù9çÝßïb-EDDªëz zPœÜ4DŒi Œc…w ˆ÷Vó,/o±º\[w] Ô£‰31> æÏóAìt†ÇþÝlæAÀ .zß“d¦àÜsïèf•EDD\u5PSI˜NÃ`ˆr×9|9Ž:>‡eåxþ9 ¼ˆì68qås,?üY^êf•EDD\u5Pó×N£NëôgL¢¼ ØŸ+/ñû.{ÿŒ‡8çü»»Ym‘ ] ÔÃö“Í@Èì4ˆsít d>;‹É)ڶêÿÄ1G>ËK/ÎëVµ âñxÉ£™2Õ¦s_>¯zÓ¶S#õ–öËoïfŽ‘jÇe/gåÜÖ¯¸ŽåçK#óm¶L/m¯LÕ¹WæSoßtruí»(cεÓhÄiÂ8 ¢AF“dÉ~öX’¹–º7X›!çŸõsýÉk8ÿ‚[¸ñ†s»R÷xµ¶AùÈ­>õ>¨xYZuldúZÛÀärʇU[ïNsÅû¢¼NµÖ«Öx·ýZo^µ4{´K+ç^µqåãW\¦Úò꿵Ê5{ÕªÛ²¼Ö·|8_:¨‡ígë „!<0àüDR: ó`÷%60Á’½`|Û ìþÆŒÓ㙄ù‹aËÎXõ;¾|ó&žÝÔVªIn;ºÚ'ßj’×§|ÞÕÆ5¢ÞÉP«|µçåe •z¼.×kùv/§ÑPÉó2]3o0¬W#ûÕë6jtêÍ·™íT>}½c®xX+çe#ǘ—óÙë4õöƒ©ó¨™õ¯¦™c»UÔñ1§Ÿ9° ì‡ñ Èãpðð†]},yõ~L-¸Õ¹GiçïÄ( .`ê¥-„ÂykÁÅŸXÁiïxˆ{îZÙéÕèŠFO–zóh‡ü›B·–ߎez¾SËñ:f‘F–á¥l½YíZv¯©U÷f×Ëô<9Öݯí:M_­êh ±gœ—_qzy†ÂÍBf ,œGÚÞ|P†¯Ýþ(w_ÿ¼s¯R°±$ . 0ùJš Ïø _¼y)ãÛC\…¶(þdZíM°ŸßHz]/­èÖ1RkûUkq43¯V˜œo~^^Zi­ÌßMy€/¯Ö¸fæ×(SÛ¸ŸÏÇŽêø8ø- é´Ó:µpBÓ†C–ÚÜõÈV^·Ç¨3,7óÈLC:µp1ÖÈ&Áeïy‚K>ñ6V¯~ VurU\µ«E í¥}V_­cÛäök×¾0=ßjÝ•íšwµñåû¥™ S½¦¶q?Ÿ¾N-hÙîq&ÓôAt(ì$kjÒiNãüƒeo!̳ì¹û4$g†çfÊŒlƒÐ¡ÁŒÃÙ+˾{o%Évj5ªv1¸]S©U¦Ú|«ïæ§¿F¦éÅO—Ö©Ùuèöº·ºüfŽÛvÔ£]ó21_/çp3Ëô:Îtë¾Çz'Þ³º}ΕëX ub |6„ƒàŠB2 Ó¶3Ò¢põ-¦ØeAšÅ¯Ê9ÿx&ßå œ„ôìº+SO=ÇÐÎpÁ©¿äŠÏË)§nä¾{OîȺ¸8å'™—2­,Ó˧ÊZu¨W¿âñµÞ(ÜêÕÌAîµ>ÍlçFºÉܦ÷ÊärŠ×·‘–F£ÇH½yx­gµòÕÆçëãöÜë²½jd¾¦z™š=÷Ýž^Çy­§× ^Îûf¶c3ë_þÃÄþk–•H$ìX,ÆððpÛrø®qFG!臅¯ÂÚ)##+ T 'ÞýøEÄWl½!ÉÆiKOÑì±lú3ÙíøÃ°ÿÊóÙ::»ï<©më ý©S'X·Nd/Ëíö›L¿Ðvš»Ú½o‰ëÖ­ëL—ïØ(Ø9ˆ†|Xó"0‘rZ§9 ×N±€A`â§o…ž™AþZªLdœ.Ù +áŠwÿ˜-cAÖœ¢ßø)§ðFÛIZÕö@]ºhæÚ©áÁLg!™š½Ù(ªCðÓGBX‹b †Ùï¯!»çN_›Ùk©9`óf°Á7…m°öo~Ç{oÁŠêÿ¥ÊŽÅ­‹LDfu²ç¡íššù§A?X‘LLÌÞ„”oyâü=óCƒÀ°ˆß¿¸ˆ_³7ìDiøLfaËì´Ì$DÃÚ·ý–äö(§ŸvO»WIúH§N¤n¶nÔ²©®“çG[õðùqRIç†ÞÁHÈÂd¦$D 4<ýâ°˜7ïv<{E ¸¼4x‹¿F³mø|ø£!²[àâS~ÊPt’ð@¦«$""⪭:•ì”sw¯ß?ÓÕ‹å$¬¯èaY†UËv¼ð²[.#Üîü–¯ÅlÙü´ÓÓ0:‚ß¶˜ÌÀ¼pì¡b4mç*‰ˆˆ¸jë×f’iç’i&ÛG³ý66ÖlŒçŸ“‘4x%í4&'36– ³_*-åóA ÿpî3ø¬g˜HÂsÏC.¶Ët63 Ö E€ixì×{2É‘µSí\-‘ m Ô_äì;g<[¶ùðÙ¶Óÿ›++èrNÏïæWËùš €¿q7WZœò‘ d2>¾tÏ!<ò³×²p~Ÿåoçj‰ˆˆThû/%ý!œà²«nb*$ÈaÕüf‹[ëµú6ðeÉLxæ……ÌLá÷g™²;ö‹Š"""@‡~zð Ÿ;¿]ý†"ÉÒ@¹Zøa‡¼â×vQY¨h©Z€å˱x§4>Û&ãñožÚž©¢c¿åû¯VtjQ"""§¾Q¨"""(PEDD P Šˆˆ @1@*""b€UDDĪˆˆˆ T¨"""(PEDD P Šˆˆ @1@*""b€UDDĪˆˆˆ T¨"""(PEDD P Šˆˆ @1@*""b€UDDĪˆˆˆ T¨"""(PEDD P Šˆˆ @1 Ðí Hÿ‰Çãݮœ•H$*‹ÅÚS‘œeY ï ª4ŶínWaN±,«éi‡‡‡ ÖD¤Ò,ª4Moäfè \dnÐ5T¨bDþºªþ6öWDæ+‘HرXLÝwâY<ǶíÂ1ÇÕmÙ„üvK$¬[·hî¦$»få÷‡Žiñ*̨…*-ÓOs´ÝD檴LÝ—ÍÑv™[¨Ò²^hiÅãñ’‡Ûx/Ã:©¶[³jm»F¶k·÷ˆI TiY·ß‹¯EæõêÔ ×}»½ÝDÄ,ª´¬›ÁT-k…j/„)ôw UD*)P¥eýÔÒê•0…þÚn­¨×_\®¼¼H?Ñ/%IËz% êé¥0…þÙnÕx <·m^k?”ëµ}&R‹UZÖ/ozùnà^©k/Õ¥µBÑôDZm[ÇŒ!‰D‚uëÖž7Bç®yùý¡ñ*Ìèk3Ò4½áˆˆÌR JS,Ëêvd†>؈ôªHÓ‘Þ¡@•†©EÔ;´/Dz‡îò1@*""b€UDDĪˆˆˆ T¨"""(PEDD P Šˆˆ @1@*""b@`ýúõÝ®‡ˆˆH_³»Û•éwÿž-ª¾¼²ïëIEND®B`‚bitpim-1.0.7+dfsg1/help/blank.png0000644001616600161660000000214207723006471014701 0ustar amuamu‰PNG  IHDR@ •C޶ pHYs  šœgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFPLTE€€€€€€€€€ÀÀÀÀÜÀ¦Êðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ¯m1ó tRNSÿÿÿÿÿÿÿÿÿÿÿßÎδIDATxÚbäf  …úˆbˆ_¿P@,ä @Q쀢؀¢Ø€¢Ø€¢Ø€¢Ø€¢Ø€¢Ø€¢Ø€¢Ø€¢Ø€¢Ø€¢Ø€¢Ø€¢Ø€¢Ø€¢Ø€¢Ø€¢Ø€¢Ø€¢Ø€¢Ø€¢Ø€¢Ø€¢Ø€¢Ø€¢Ø€›/Bâá[IEND®B`‚bitpim-1.0.7+dfsg1/help/phone-samsungscha950-notes.htd0000644001616600161660000000423310547564173020625 0ustar amuamu#include "pagestart.h"

Firmware Version

  • The firmware version of the loaner phone, which was used for development & test, is a950.YK24

  • The hardware version is A950.08

Phonebook

  • The phone will ignore any entries with no numbers and no emails.

  • Groups (Categories) names cannot be added, changed, or deleted from BitPim, it must be done from the phone.

Calendar

  • BitPim supports up to 100 calendar events.

  • All recurrent events are open-ended. When viewed or edited from BitPim, the open-ended date would show as '4000-01-01'.

  • All recurrent events are automatically converted to have an interval of 1 (ie. an every-other-day-event in BitPim becomes an every-day-event in the phone, etc.)

  • The alert of an event can be set either to a ringtone or to vibrate, but not both.

  • BitPim cannot set the alert of an event to 'Light Only'.

  • To assign a ringtone as an alert to an event, that ringtone must have previously been assigned to a phonebook contact or a calendar event.

Ringtones

  • BitPim does not delete ringtones on the phone. You must delete them manually from the phone.

  • The limit of the size of a ringtone is arbitrarily set at 100,000 bytes. Exceeding this limit will display a warning. If you have a more accurate limit, please post it to the BitPim Users list.

  • BitPim will not be able to retrieve ringtones purchased with GIN.

  • BitPim will neither retrieve nor send ringtones from/to the microSD card.

Wallpapers

  • BitPim only saves wallpaper images to the 'Default Album'.

  • The default format is JPEG.

  • The default resolutions are:

    • wallpaper:176x186

    • outsidelcd:128x96

    • fullscreen:176x220

  • BitPim will not be able to retrieve wallpapers purchased with GIN.

  • BitPim will neither retrieve nor send wallpapers from/to the microSD card.

Memo/Notepad

  • BitPim supports up to 30 notepad items.

  • The maximum length of a notepad item is 130 characters.

#include "pageend.h"bitpim-1.0.7+dfsg1/help/lgc2000-notes.htd0000644001616600161660000000441410547564173016014 0ustar amuamu#include "pagestart.h"

Phone Information

  • I can't seem to retrieve the ESN off the phone, so for a unique ID, I use the ID of the SIM card instead. The implication is that if a different SIM card is used with the same phone, BitPim will identify it as a different phone.

Contacts

  • The maximum number of contacts the phone can hold is 255. The SIM card can hold 250 contacts.

  • On the phone, each contact can have up to 3 numbers (mobile, home, and office), email, and memo/note. On the SIM card, each contact holds 1 number.

  • When reading contacts from the SIM card, the type of the number of each contact is set to mobile. When sending contacts to the SIM card, the first number on the list is sent regardless of the type.

  • Ringtone and Wallpaper assignments to contacts are not applicable.

  • Speed Dials cannot be set from BitPim and must be set manually on the phone. The same goes for Group Ringtone assignments.

  • Group (category) names cannot be set/updated from BitPim and must be done manually on the phone.

  • Every time BitPim updates the contacts to the phone, it rewrites the whole phonebook. This process might be improved in the future (ie only update the ones that have been changed).

Calendar

  • The maximum number of calendar events is 30.

  • Phone calendar events have no end date/time, and BitPim will set it to be the same as the start date/time.

  • Phone recurrent events are open-ended (forever).

  • When sending recurrent events to the phone, the "nth" values are discarded. For example, a daily event set to occur every 3rd day in BitPim will be sent to the phone as a every-day daily event.

  • BitPim alarm values will be approximated to the next lower valid phone alarm values. For example, a BitPim alarm value of 61(min) will be set to 1hr on the phone, while a value of 59(min) will be set to 30min on the phone.

SMS

  • SMS feature is completed. However, BitPim may not always properly parse the SMS data from the phone. This is due to the fact that I have no real SMS data with which to test. Please report/post all discrepancies to the bitpim-user mailing list.

#include "pageend.h" bitpim-1.0.7+dfsg1/help/vm4050-cable.JPG0000644001616600161660000002756510360322677015465 0ustar amuamuÿØÿàJFIF``ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ@"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ÖXv§¬J;T˜¥Åac¦ãBJpZpà(°\hZx S±LWS‚ÒN€¸Ð´à¢œSÄÚ)vÐ]GSQ½Ü)÷œ WC»%ÛíK´VtÚÝœ?zUüë>XÅŸÞ/çEÅs¡ÛK´W/Ž­—îsôYür[îFçð¦¢ßAs®çw´RíçÇÆ7÷aÎøJ5&ŸÎ«Ù˰½¢îzÑK°Wžjg¤øõs݈,M‚UÏÖ¯ÃqÂîÁ¯ž–âMùÞÀýk¨Ð<_6–ÛfftõëIÅ¡©÷=‡šTW5§øÒÂó ]A?…oG¨[Ê ¤Š†í¹k]‰¶ O,T3êöñ—–@÷¬Åñf–ÌGžœ´(ZìCcÊ,b¨Eâ >Uܳ.>µRãÅÚ\ ´Î¹úЂæÏ–=(òÇ¥fZø—MºÆÙ×ó­Hî ”’)Z4ß,zQåûTüzÑŠv”›*}´›iØD;)6ÔûhÛNÁr ´›NRšV‹ åsô¦4*{U’´…iØ.QkUçÙòHëZei…h°\pZ\S¶Ódmƒ5BÄf 9ª“]çÖ£žã‚IÀÁx—Ä­¹­­›‹ ÁÉÉÚ%ÙE]›ÏŠà²ÊFÛäôÁê:õÝû’ò§øA¬éefbÎI'¹ªÍ%o IjÌe6É‹=hÊŽ¦ Iö¥<šØ‚4Å0Ìj0„ö4ÿ)jv£§iò_ž%Tú×Qgà´”%çåÅqq4ðÿ«vO¡«I©j+Òê_Î{ hwËà­:$Ì—ÿÀªÞ•¢Ú)Ë©>ï\‹j𔋵®d#ëUK!˳îjm7ÔwŠèhêi¸­±…U†ÞiOßÇãP,MšµJÊÄV°V܉;—áÒK ¼Ø©Ž›oËJOãURÞâAƒ;VãѼÁ—˜š×Ñ[Ì£q(ÇÏü ¨™¶žõÑ®‡/Q˦[ ¨’}#næ,z”‘ŒãÒ‰nþÑÃV'°‹?-U6`R´‡¡-¬Ë ›¸5¢—¶ì>e¬cnæiNSBrBi3GPXdE1`§ ¹.KTdJ lªx¥-]Æ´'cåÆÀµP#6v‚~•*ÈÏ‹{¡m)%w •Ù÷EvR§¦)Ë.:ŠÑ’îÖt9L1]-R|ì`(it¹:g í5~ßR¿€&åˆô&¨Ii$}²)ªÅ=A¨qî;šZ†¯}s¤òœg ¬¥”w5~,˜5Z÷M{o™yZ¶@ÓÜE¸ a\¡¤/žõCy¥IxëMÄW- YUŠŸcW­µýBÛ+—ÀìNk'!ºž)Ê£$BH[ˆH>¢·­|k¤\œ‚Ÿs^=pÆ«¶MÌG v§[E¹ß.Ð(özÙ;=Þ NÊàÂÆ­Fû¬Ð×,²@ù·ÀÏUj¼šö±`à­Û‘׿9£‘¡óá¶“my]—ÄmBñ¬£Øâº Oˆö2€'‰ã?Jº;=´Òµ—gâ*ôʆ=‰­† ô¦;•¦«i¥h°°À¬û™ 8£/k PºKhžW< æ¬ì¬©÷1îHË Ä1ª¥TDåvW‘‹Põ5bHÉ(¨¶y¹˜ª¹8š¹ª¨Ý+PDD`¹=©¤ÍpýOÒ­h&\ómÓÍ( ®i¶šcÍ(R¤þÕiþrÊÛ0=ëXÓlÎSHçb(ļšÕHiTBs]e¯…­ÑúÕ½m¤®HøÕª„RÔÉÍ½Ž ? Jë“Á©ÂS×ô¯M‡F$ ÜV„ZLIÔPåZFyBø6véŸÊ¦ÁGûß•zâÚD½T‚Â*EÑ©¾¬ò„ðEß÷˜Tëà«Áÿ-Z½GË‚,zRöžCök¹æCÁDs+þt )êìôÝ‚£Ú—´aìÑæ_ðžù¤>Ý?ziUö¤!;Gµògæy{x tÔmàÅÂkÔÂ>öÚ¯$ÖK÷¤Œ}XSö«°½œ»ž`þ_z­'ƒŽ8&½"âÿILîºàb±îõí ӢϱÍW´ƒ%Âk©ç÷~ž,£8®^îÝá—„}Ez5÷ŠôþV&i?à5Ì_ê–—@âšMEꆜ¶g=å†gïa9RE]gøbÇãL/‘€‹ùTY—tGüÝ –J°~d îx¨ 7n>”ÆÜ{š9Xs"Ô ¬»Ì›±ü"–{ö˜ž85KcÆŽxPMÏPç+Lâ¡^ Xž6‰°ãö¨Bàô¡«hƒz¹дà)Ø D”ðêzŠ„ pŽQ\œ*Ã~t ¯£”G(\´Bò¤7lTð̬‡|EÏLšŠÒ&žt=N2jÍì2ÛÌéü z¨ªQdÝ_`b@Ç<Jhl iɵ¯©áxˆÛc¼ûÕª «!×ì9‘uI~ýåËÿÀCýŸtý|ö>äצOâM)T‹}2%÷5—>¿) oçÚ­S‰>ÖO¡Á&~¾[~5ÓÝNq]TÚ–ìòŠ=«:i⑉.? ®X¡sÈÂk§#Š­ðkiä€wÍ0sˆág>Ã4h;¾¦)¶'¢šAg!ãa®–-3S¸Ç‘§LG©LÖ­ kl2ñÅÿi¹©”¢·*1“Øåšç­Lº|H>rÖµµ-k f’ãP@Àpª+žàœüìßfªÆ_ n›[šîlaêÁ ¨æ™³IiÀêqXxgjõèQÝørS"}þ†®-·b%h«žW+;ÈZBK±h‹;ˆ›‚x¶¼G¡µ”îÈ¿tüÃú×=`è5”âÓ4Œ“WFôÞÔcˆMyˆFA—-•Ä,D‘2Ÿq^³à{åÔ´Ï*P ï]Îet’9ö­ã%sQÅÙž±‡b)À{W¯ÞxÖPL?!ô®n÷À—Vä”MëíC¤5U3ˆAÍJ#ÏJÕŸDžÝˆhÙ~¢«ý‘Ðò¦—-Џºrt™õ®ŽDd‘|°ÛŽ3ŠÆ±]· ‘]^—^Oä6æ½aü;i(ÃÄ+6çÁ6òƒå9CïK“°ÔÑçDU»{ $C#ü‘Žr{ÖEáë$|Iq+63Ð\¬·÷-’Jûvü¨öo¨ù×CÚõ(Ž3Šà¼Mo¹7^£qn&ˆŒs\V½¦³DèG#¥s8òÍ>†ÉÞ6<¶x¤ß…ÅQ—x8e®…PExVQ€xÏ¥Mq¥¬ƒpQ]-jb¶9£Ò˜TçŠÝŸI+У%Œ‹ü9¥f3?.:J&”w5;@ëÔfÏZ,ÀgÚœu§‹³ÝJO,zR¬[ˆ œö‹°·x꟥<]©þ šÞîêØâ9ŽÎ Ö¬#½ˆ Ö–Rö¢9ÉtX™é1þ¬Ó–ävˆþUÕ[xÈ&<ýÑǪŒV½¿Ž4 ´h ‡¹P¦…R]Â=Îf|‚"?•?uÁíªZÿßU'ü%~óµÿ¾éûV‘<ªø‘±‹_÷¤~/x’N­V&½¼cá´ëª[ßUøóÃH?ä' úsKÚH9"qiðëZõš„KôRjÌ .ývªÿð®‚o‰^‹îÝÿu ¬Û‹2ªŽáþ‰Š\ò,B/…ÖKÌ×·/ô Uè¾h1}ô–O÷¤5ÍÝ|]S‘oa!ÿy±XWŸ5‰ò!†8‡¿&‹Ôah›†|=eÊØÁ‘݆†‘§!Ú¶ñìxß‹uÛ̉/\Ù8¬y¦º¸$Ë3¹ÿi‰¤áR[±©Al]Õ>!é¶À¬RyŒ;F+‰Õ> _]åmÔD§¹ä×'å6iE¹îqBªú s{sxåæ•ÜŸSP'µYòÐtmèÞÕ5¹Ê£€õ‘†áZ¨XÍϹ™£i3jÚ„vС9#q…{ÆŸa™¦Gn ‹ÍSм9cá«< R>g=MeøÅPÛDñBàšÑ.]L›sv9oÝÂu ‡BÕç@dÖ®§¨5ôÍ‚J“’OñUH-Ì®$Ör|ÌÚ+•‰ð¶%»uwë&ÊEíšã¾é&Î3+. ô½´FN&r‚“¹„Ð0ê¨Ì9Œ×Bc°¨šÒ6긭C7K±ÍO¥ZÜ)D§>Õ‡yà«)‰1~ìûWzÖøMBÖ.½³WΙ<²G˜ÿÂ:Í”‘qØâµôÿÇ '”³ÿ³ÅvŸg`yánqœQd'&s¿ÙWpóopHþëóIæ]Cþ¾×pþòWL!âƒ=EK„YQ©$sñÝ[Jp[aôaŠŸÉ• jÑ›N‚aóƧ𪋣$Oº9}³ÅC§Ùš*«©ÀüE‡Ì6ç•V8ük DðF£ª2¸„à ë$ƒù õÉô‹K‰ãžxVI#RÃ¥]BcP  £¶)¸¶’40'JÿMK¸Š‘†ÇµBS¶{W;Šz3¢ö¥ ´í´ð´å^k#¦äb<Ó$d\0È«aivS%ž}â ¾ZöÑ~p>eþð¯8Õt´»…¤pëÃ/pkèfˆ0*à ךøÇÃí§\JÑ3ÿZƒ¸¡ê(¾SîmÚ °éU1¸d8aЊíµÝ2)íÍÜ8ØF~•ÊÅ`óM³!«;tQêk;kc[ÛSE/¬nlÓí?™ÑÀ\ƒî 9ü9 ì^v“p±“ œTæ“O·ÄP,—àÉ!ÂçØ TûU»¬°‡Ná‚•ó¦éõ‹>èϸ·¹³Ås£Ì*à×{c¬Ùj¶¿fÔã䣎¿CëTï<#ct.›|±2c˜ð?ÏÚ8i5bù9¾‘I¥ò”ž*£™”¸m§Siý9­Ñ¬”@ǦjE³¸oº­MŠr?Æ­ExW½hµØ·!w@ýÆ­²F¹Óî©I±ý)a¾äsW’é_ƒŠN24Ií¤ðÉ?é’ŸiA­‹dð#cÌŽü¼ ¬¸š&ªš»´?Õ¦irKÏïh6ŸwàkXÊC=ÌjÄ67$t«Ñj~‚S(’C!9-å¶s\¬zl/À:³‡–Sþtí/2‡—Üu?ð“x6Ýå;·©€šxøá+aû‹˜ÿ³‡ƒZL|¨?¼ŸXŒ´±/µ>F÷•ìž)ÒZ3,[{îZó ûSÎ̲ž?Þ&ŠRº³ÜºŠÎëc2g¥"Í2‹‹³ÊD~êzê}ª„×ò\Ü4×?¾cœpà*KÅ JíÜäüÒæ©pžíüª¥+h‰Œo«í ð£Ðb’K«‰"<¬PvÍ1‰'$äÓ~‚¡ë¹i[a9ü(Ç)zQÅÕfÕi’7Fã{tZ¯NЙÒ7„µXÀ*‹"žAF5 Ñ58ÏÍlõ¥àïÿbN¶ú„&ïMs†Oã‹Ý?ÿµ{…Ž“¡k1^YšÞQ•toÓØûV±æ2›Š<,5ÆbqøU¨¡¾Oáa^ìþÓ®>Qÿ§‘ÃH?ÒæNQ•ÔxOź…ï<ëGŸß[9ù$¾ÇÜW*àÓš™\†÷«Z I4}Iá¿é¾'ÓþÓc'̸ó`¿÷ž‡¡­µò΋¬Þh÷ñÞé× Èx`rôaÜ{÷ïxæÇÅ0ˆ-¾¤£/xVOQíÔ~´Þ‡4©Ûc©Çà¾Õ&ÎzSöÚ§˜žVC¶žw©mýÓN·¥K‘J Œ`tQøÒîcßJ”B{‘Nך—$Z„ŠäJ#'µZ¨íNÅ'2•.åu€÷â¤X”T˜£<Íš($ ¸¥¢‘BbŒRÑH£´PbŒRÑ@ Ú––Š%´PQKE%!§QŠn(¥¢ ¤"Š)\ p¢—Bm.1KŠ\R¸ 5ÈøžyÃä!®Ã™«ééylÃo=©I]4Š‹³»<+ÆPÌÒFòdÚÛ¸zןÜBÐÊÈÝGë^Ý©X£,¶·†FàƒÜW˜ëz;Ù\YAË[ʈzz(Jñåꊪ¬ïÜåˆæšÀu3ÆUŠ‘‚8¨Øv­ŒÈzt¤8ɧ¾”K óHcB–`É'V‡Ù¢´\ÝòÿóȺ}ñßÛ·Jh+e#fÈ=·øþ^´–:}Æ©rV=ªß‘øUç š»[ԛܧžw¬7|¡«{qüºU‰4ià³k‰¤Š= ¬Ü“žƒÔý8÷­%¸´Óãh4åVl%Ô£'>€ý~9ëPêy†À£ñ4Ž7“hùE0£ñ¥'mT€tÈàþ´À*Xãgl*’O@)¡1Ê61R*ý…ôÖ·È’!¹hãÒµ9üÙâóÇð“ßÚ±©Oª)I^ÌôhšBI®Y1©XJ“K ɶê|zŠÅaÍw—ñ>M¿*jPäÂÝ<ÅþçøW'{lLÈ…H8‘U5×ÐÇfeíNG10)Þã8¬)‹ónöÀ¡ žÚ}xD²í-–cÜÿŸóéZ’;ÉÚZ¡ŽØä*¯_SŸOV5–\à‘‘ƒƒÖšKÉ'ñ¢ì,Ëh"•„‹œí¤»z{¹¨u—RöðFñàá“þx?qôô®fêµò õõSZr"™æ›°ç¥[ò»ŽEih¶¼Ïys²Z€òdd7 ¦…nÆÇ†ô[[/í[,â8Ùyjƒ^ñúĆ(± šTc?­SÕõ©õi—sl´ˆ`^€VŽ—£Gky¨)ä&סq¼Ç²ûu?­h´ØÉë«!Ò´In­þÕ9h, m üR‘Ô(î}OA[æTHÞÖ U9HT÷õcüMî Te丕Fܱ;UQxö•r(E¹ÜʲOØU¯¹ý½RD9_A‘ÛªªI>J°ÊƧ ß_AüèÃÍ""«;±Úˆƒ$Ÿ@*Õ½¥Î¡t µŒÍ;±ÏÝi\_ØøUïX#\ã)ªý??JìJCÒÒÇÃp­Þª{ò3šBÿ´ÿçéšÈ:ýüº“Þ´ŠÅ×Ëx™s'÷ ú~¹æ²&¹–ægžyås–v9$ÔfB:VîZ;É4ËKÝ5}YL+¶î×9+âÏüšï|1«&±£A8pÒ¨Ù(îzýz׆Aur«$0M4beØâ7*\ÇÚxh¿‡î¢åmò|³[¯E_Cþ×ò¬' «FI;ž¹E1:†SFA§×9¸QEQEQEQEQEQEQEQEQEQEQEQEÚ))h Z(¢˜Ã´”´†”´PrF šóxWí5Ì ûÕçŽãÒ½.«Ý[-ÄEXg"š}¶§ÍÖÓ}ŽY!ž3%¬£dÑãÔ{ŠÎÔ´Ác:ÀäMm(ßm12úë^ƒã_ 5Ã]Ÿ»có€:{×)lÐÜ[¶™zqœÅ!ë úoZÞ2º°šêŽ=Ùæû<„ÊÇô5vöãÎD³µ.m‚ ® ·v?ŽqíV/¬%†wµ¹P.!èÇÃÔVΙ§&Ï÷îØd·h³éêqß·ëZ/#6Ò܃MÑ×M>uÚ+Þ †D_ïííÛ½h$3\Jvå˜òÄö÷&¥·¶iÜd•?3ã?€õ5¶G 8\$K‚ÀžIõ'¹­1”®ÊP[‹xÈŒòÃæ“$zAþ}ªþ“¤K©ïxØ[ÙÄ –éÆ@êÔÕ¸tȼí-ZCm`¿u?Žaè?Ͻbë¾#›T i ]:?õVéÇ­Ž¦“wØî\ÕS”ÿJ÷úÊÖ4;]^Õá™XuôªLG†[õã†á®­Áò†w¯÷O©E((˜gäÈö«¾ ðÝæ…yóØRAúUQ(º_4²õ€zúcü몹„×ThC/›ùkºH·–£øG\ Ò€YèÖé{ªººn‚ÑBÿ´Ý¿Ïzæí¯[KiUaGy@ò¦o½•¢š\ºÍœú•Œ`ù }¦-Ü©õQýßåW'e©ö(êÚ½æ¯rgº“q"ÿ @+)Ž*iF*l~” ÁjÓÓtyoJÁ„(¥Ø“´u8ôÍ]Ót%»Œ*l†6,‰ÉŠo¼9Ï;†qÍzv¡Úè¶Â8s‘óÊßyM¥évÚU¯‘l¤);‰=I÷­ æ”ï¢ØÚ1¶¬)i-fXQE (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¯@ëIKVf;4ìÓ{P) }-6—½ –’HbÑEÀ)i)i (¢Š1P\[CuŽx’D?ÂÃ"§¢€+Ekº…†ã²¨58Š1@¬%.)h v (¢…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@A§f˜)A­,d˜üÓ…34¢“(wJ\Ói šZhëN¤KIK@Š( 4´”R´RRÐEPEP0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(4¢£ž ÍlÎtH)i¹â—­Ihp¥S€¤ÊsKH¥©¥”Rê(¢€ (¢˜ ERQEQE (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÏïO*54á[³˜S³MSNÍC-œ:Ô`ÓÅ&R- ¥#ŒQKHaES¢–ŠC–Š(¢Š(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÿÙbitpim-1.0.7+dfsg1/help/phone-lgvx9900.htd0000644001616600161660000000112110560020420016171 0ustar amuamu#include "pagestart.h"

What works

Phonebook, wallpaper, ringers, calendar, call history, memo, SMS, and file system. BitPim can autodetect this phone if it is connected to the PC via a straight USB cable. BitPim can also make use of wallpaper and ringtone files stored on the miniSD card.

Contents

BEGIN_TOC TOC_0 TOCITEM_0(Cables,phone-lgvx9900-cables.htm) TOCITEM_0(Notes,phone-lgvx9900-notes.htm) TOCITEM_0(Howtos,phone-lgvx9900-howtos.htm) ENDTOC_0 END_TOC #include "pageend.h"bitpim-1.0.7+dfsg1/help/screen-comportsettings.png0000644001616600161660000002251010430541265020326 0ustar amuamu‰PNG  IHDRø" CsRGB®ÎégAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<tEXtSoftwarePaint.NET v2.61òHä¦$¢IDATxÚí ”õÇ ²Ïl6$>×Û5 ¨8x  Â §€ÂˆJˆb$î‘¬æØ¼¼¸›¸O7Éfã¾äA’5ñLôÅo£l’Ý`²*r 0WO÷ 3Ã=ôþ««§ºè®ú׿ª«º»j>Ÿ÷}PSSSǯ«?]ý¯ªiÚÌ?!Óß6£^D›ö¾žÛ¶f3«Q›Û¤ÝÙªÕ%‡ÝÓ¡Õµkw&µÅíúÀâÁ,ì$‘M7‰d¥H$“ÿî;ñý8ÛHBÿwz23È ˆ3c¦·hS[õˆýǤ>~j‡vÝÆšê{ªÏ›5uÕwï|³qîk5Sñ†ßG>¸¿jÕÀ˜/¤?þzÎýZú§ÒÕßLW;}Í3zj¾£çºï:Ƙ€D1’—•TrØucó¦c Íšÿ:E×ò‰ºöùÐ1áz­ú×/þ—y?}§nm³fZþ¤%íÂò'=Ô[õØq1©éú³ÿIÐý'ŸÎEx߈u$!„õ¯±þhøÚ8È6ôkFŒ´þh(ÚŒám‘ªGD´…û´I/¿ó·>ù_ÑßðgmV³6wû°e"Úƒ{Œé_Ù?ü‘#BýÚ熯J‹Ãâ_s¤1`Œùèqñ…À˜’Rš {è8‰bŒ×ΩaQ#ÃV9iÙááË÷_Ö;li¿vwŸvgæß»úÄÙ1K»³YÜ¥ÿ+ÆÌïȶùˆ1"óZ´)ïi5 “<=(úéïhwîÎE4ÄßÛnH_èÞˆ.}‡è¿ëdfY/!„Ϲ¯KÏ=â$¨heÑσ.lÓ3?‘0¸qÞTDœ@Õ8¬¶A»­A?Ÿjž^–ŸøÚi/Ž»â3š6áwú¯…èçnÏÆâzS÷Ù|º/säƒ{ôi¬/$ªi'„”4Âãy1œ^àñA• ÝŒav¡uÑ4_óv6ÂòBï"]­e‡nø³~¥ƒèÍäÉ]#&0.¿©³¬´ñùC!DóØÜz¨>«yĜƞI&ºŽ¦=òÀ×w˜”Q|õu±û•vÁKÑŸ÷œè[mEoÊÝâ÷dæ‚Ëä Š7¿bhÅÜíH´bú‘èÆ|ÅéÒYºå45t~ãsíÿ°4ùèü¶µ‰ni½çÆÖûnj½{²HËâI"Íw\¦gîøÆÚ‹n>«~îå{·n®×-oˆþœßè†ÿàšhÁÑ®yû¤›óE¯«Üº©û{:r#ëNüÞQøEAôD½e¦yPñÍFC86ïzêo÷þèéžç¾Ýýì×:Ÿú›Ž¯¯ìøÊòö/=Ðþø½©Ïßú|]êo%WÝѶrVbù­­K¯kœ?¡~깿œ>>Ñq${Dñ[6¢×[y¬‡óuí†Ö'Œó¹¶Û掋9¢'ˆž(Y¾¹ Út]ôí_ZÖóüw{_z¶ûûÿÔõÌ:¿±ªãk·eyê‹Ë„ëÛÿážÔß-I=¶¨í‘9‰3Zï›Ò´hâÆÛ.zᲊ¿ÕE/"Dÿ×oYD/Ü/šðÛ_ÅNcÞìjq½½õD°~.ØöˆWBˆbÄ®VË×¶èɈ>õØB¡ø½kžÚó/uþó£_]ÑþÄý©¿¯K~nQò‘ymÏN,ŸžX~›Þ˜³ôº–Å×4ÞqùÆã^ºò4]ôWnÔcˆ^´Ñ#zB©@Ñ'™ÓõÌ绾õ¸°üÁ·¯Yµ(ùðÜÄòÚÖû§¶Þ}CË]×´,ºJŒß÷_/7ϯÞ=wü{3/~ùš3Dÿñßêù“6ê—숯bÙÑ*¯o>zèÈqý{DïÀS¿>`辩똙»ÆÑRv_HÇP¼Eôâlç×Wvþógű¼yQMÆòÓZï¾^X¾ùŽËÍñÍs.Ù=çÒ÷jíDŸmº¢£®Ï\›i\å#ºÚÉÑ ›‹|yuóèK¸½¡ëO›ºG.Ü%DoÌzôÅ?̺>×A®÷œuÛ÷ôPB†ô'tè˦Šy½Åæ‹ËRWg:½õž)­KjZ^™³üÌ ›gkœ}ñ{µã^¾ú ]ôWmÕ­þ‰úèMÑÏN оk]ƒ~ çÚ·’Âò#·Œ¸¯{ôÍ5ã]Sô8í«Ã—tÑ?p½¯d?5Ç¿H)ººÏY>'úÔ–¦Ä56âßÇîJ®œgš]´Èç,_{^óôsškÏoœõ‰M3>ñÊÕ§gEÅVÑ‹"áhãp~qWÏ½Åæ+O®uûFayk² híÿŠ£Ñ'^ì×oª\ØYßxÄøUýî£z¯ ™ˆá¼‘Ïþö@{Ï€ñ·ÿd¿Ódy4u3ÿÊš7Þ;lL#þ‹pš­6§³úækýâ_ëʸNcþæô’ 7'c2GñÖ;l·šÿ˜Çõ¢ŸáŒîu›/¹V\T£_Zó·KDë|Û#sŸ™™w{Tëì [o?·eÆ_·ÔžÓtûù›o;ÿg?–½qP/î™ÒE/”/ÆŠõÃùŽl‡8K»ÍÃö‘uIуèØÒˆ6~%>žþi³èØshä‚–u;tË¿ðfç~ü®xksŸ˜Õºí6#Fÿ‡Ÿ|¯£sÿë¿k;yNs}£îÄ×ÿØmL¶¡a¿moé£'¼,ªŸ0è>,þÊú«76Öç¿e¿˜F´2­ýsûÈ™;l—n¬üók»¿üMÆðÿ³ûËÏ6ˆÞ}GÄl]'È[+³Pb[ô•ßá¸áæÄ/ülÓ÷‘«jýs‘ò÷GÏ[Ž2ˆ¾óÄè_ô[ML><;µjAJ\fóè‚¶•sôÛ¦œ–k¯_pqbî‰Yç$jÇ&jÏjžyö–[Ïþ٧ꢯiЮٖ=¨Gôc¾q¢è-/:B˵Ïdú)3E/’û X”̶<\õCßúÈÛÅÀ¡CG«nz×vdO¿>ò™ï®;y^jôÄ_UݺŜL “ºñOyVÆdÙ%Nü•õ·Æ<õ9Üô®øqÔä?TMÛh»ôÜÊgFÃ'ÏiÍÎvÂ+®ä­˜91l¬¼í¢­‹ñ#gîÊûsBÈËüÞ\]¯7™Ì›øôôägç%½#õÙùâ"œ¶‡jóŽè“ó/HÎ9»mæmµg´Ì8cËÔ3~~Ù‡uÑOjÖ&5ê¢?w‹~D¯‹þ¬ºþ…èçŠþn½'L£éF(Ó[æ‘‘+›É}ÜsÀΠ뮾Á³µ?¶ùø ‡Ä¡±Þ–8*†Í_Y“‰ñfš:2È{òæiÆu¤d•ò†]'°.B})ÆÎÄi¶„xˆèyœD=9Ýë­âM·R\#ßö™™BñÉGæ¶­œóû²càxojÞÙ©Y§'kOk½í´÷o<õµê¿ÔECJ»¾Iwý¥ ºè?ú¯Ñ‹ŸuÑw–×Eÿáú棑AXÞIôâ3À6aŇ„q ë4R XÔùúïõo‡ˆas2kŒn—ä„ç4šÃÖ ¬ ²i.Ýúç¶Ã®XQ8|à gâ4Û²DïóšR–Xt/œÐ8ýü–ºšÄƒ·´=4³íáY9Ë/¿1¹ìÚÔ½¹«nÚg},5ãÔÖic¶^÷¡W/ù@Vô"â¸>'zql¯‹>ÓNdX^¼çï?ü鋦’Þ¾Cý gøgŽno?¾¡õ¸xB•ˆ¥Uçˆ9¼ngöƒáµõúÀŸÞn}ÉsëlF6uãµ¥‡ Š1olÑ»ö»ÅdB‘Æo­©o0Î ó1†­˜sÃÛ’Ù9Ø.=w½ô°í°ëyëfŽ7–²qSÊiÃmgb~$äÍ–ÿ,¶ÄÔý|½y|÷Íc›^Ùzï‰o5Þ¶üæäƒ7$º÷ŠŽºKr®¿í¯Ún:åýIñê'Gꢟ¶WWºáz½›bSôâlïÂNÃò¢AÆh®ùâÏooÌžzmï;þƒ_wŽžýžxBUNô+Ó¹ÒG6ì:hüøÖ¶ƒb̨ÚÍâ£päOþ”ý¨hï=.|=úSωÉÖnèÒ×Oxö|ùÛŒ¿µfÃN½™è­G7ìÖu)NrŽXÒm@ÌA|,éÀ×þ·8-=·Â÷¶v oÅŒñƢźéK¹µÞvѶ31«‘7[BÔ£-=F¢ÃøÇNðþ"]&»®?­iö¥âJJáúþß½®[~Ù”¶e7´Ý_“¼÷ªÔÒ í‹Çu,:OŒ?øë5í·|0qýè÷¯ñó OÊŠ^Dˆþªý¶©Á¦›fýÙá » Ñ–Gñ"U÷÷ŽžñŽÑ–2zÊ›£èÔ"¸jÀ#(\ŸmiyèøI+Žª}ÏøqÔìmâG#…#«îJfçyÝ›#îÛ—9o×èñ?ÕG^ýº9Òc>b&ÆÀÈ%yès¸úõ¼9.ÝøQ2ì:5¦»E‹ÅI6Üv&f5 7™•hËHäcÚ±~D¸óÚˆÖ›¦yÕ-w]ÝZWÓzwMkݤDÝÕ‰º‰mK&$ïº8µàüöyg‰vq8Ÿºé/ZkFl¹ì¤Ÿ]0LýŒ}Ùƒz!zÑÃ.ú¯7Eo=œ–)žûÈ€°¹ñ$Xã9±fŒñ¹W®ÌeH½Çrg,0!¤ÈÏéŒë…R¶NüàŽ)gìœqÑ®9ŸÚ=ÿ²Æ—7ίn¼£ºéŽK›çk{~묳3>–¸eLbÊ)­“«¯:iç´ÎÕ²¢7\/DŸmº9Qô†ë³'`:fwUežîWeñ,?_$^!µ¼-=öÀ÷ú»·Ô¿~ÓEÏ}ò”—ÆÿÕ‹Õ~~ÂGžÿá—&Œyy˜Wª?ôêøS^»ô¿¸dÔ«ãF¾zÑð_\8ì•ó´—®=«cÓú¾Õë$úFSôƿ×öêÑí÷Ÿpme檣?/ÆJßHC;)!åkÏ]Š3¢îàÿ¶Ïëc]Ç„åGÜÞwB}¾èk3ªÉ>(*w‹¬èó ›Ì-²ƒ9".³É‹XãÁkHDÃU‘¾xƒDðòÊÌÙWq¥MöÚÊ´…õˆùûõcsã_cÀÌìmÆ^ý_ã·f£|^òE¯»¾Q à”õÃnªÏÕ!+E’ɰÚ#ú“Ij[rÝä> ËÚÙ&!¤4™ÚH"aÝé/ß”½¯I‘šÁLÞžýñúÁcÄ¿¢gÑ™ÑÅÑ©™°º½è§¬×EŸq½©{Ûè1§·ü!‰hŒ€D.ÃHdâŽat½êæcë«.ß~êŠîQów~éû¿!„ƒh·ôj“¶kg?¯ùf¾èÓqÜE_½â !„D4ˆžB=¢'„!%z£¹G>Ç Ö,ðyB¢¯PÑB)‘èÍáÂsØ<Éký`°ý1ï3C>¥í4„B|Š~tq¢—4¿Èç Ÿ~'„¢D/n£=su9Eo½äÑBHD_x~€¢W™¢'„ÐEïµÑBHäE_Øä’w–µðWŠM7Öùp2–BJÔFO!ÑB‰ è ½WZE?ªz¢@ôCÓ4ÅñNS úùÚ«ˆé½f¡˜ÏDŒè?¢·N ²2ˆ½gYä´~äÑþÖvúÂ)増,Ôi‰ì|PY¢×ì(Áx¢·m´‘ÿV>}Þß:ýIÞÅ•¬œòGô•xDï¤Ú<ÇÙz»ŠÞɉ’/®Ÿ8¢WÒ«¼eFr„®x0ž–6¬«4æ¸~ÕpÝ:Žè DÑWUo­À#z×ö“ðD/Y´?ѧ9C eýØXˆÞGÓM1'c *Y¥4gbÑ¢DˆÑ#úÀõÔ+çu `Ñ—å*l}‡¿zAõ\æz³UÚîR×q=„"ú J°«TÏež.¨Ï»²ÓVô¶7[±@¢wí¤¥ðGÅñy‹P¿°]¾hù4òêtÑ=—ù°¼í<ÓÊ·Ú²+@(¢—ÜêÚEAà}¨ÏÊiŒâ¦¥Ýz.Cô€èƒ½b÷dê²–Ì<]t?>DŸöØO'@¬D_üñ»¼SÉÀ;´AôPé¢÷ê¾h‰>]’žË<Œõô™è Ñ;5h88UÆ/­ÐŸ—§ U–èiA‹ÞöZ#7!z¯Ws+^ è=]^!¢çºI¨Ñ+Þçéiz×n^ï'ò-zÉr®|WìaÍõûúµüe½×ûB}Z­÷JÅ¥û£Òë™×OM€’ŠÞé¦Ö"E¯8 þ9¤Þ‚¿Nœîïõ'z,ኾÊû} D/oè(»è6MÞ_‚ÓéhöK^ô5;µ±k¼õ^©Þ·»úöÛ%™§ò…Ýt£²]%½ë9É .¯ô'DÉ Rõ6z׿)×9{mn’鳃@éDˆ= z(§è%Ï\¥”¾ ¯zt…ö¢åöÌXùm«rÄ©4×ß*šQåqƒ!ÍV½˜¶¯®ˆ”èÅ S«UEŸöø˜SOcÔ§¯„~ÐÂ84öúUIEôžžKîZ=DOÑ;ݤîÁ¸öƒætŒ/ÿö#ȸä{†ílå· +V^¥·Ÿ4wx Ñ{R§§–œ²‹>í¥4¹² »®ôq/˜¼w¯GëˆÑ{~ðˆ?ÑǦ4Û‰z7KKOÈ?üTÔ¬èÓÊ]ä#zD﹩$@чÝš¿–×>‚üÍÑ@ùEŸŽ]?h*W‚èÓOÆ:MF¿ù1½?)Ǿ4× ý5ÝHêàäq•¶)ÅË+ÕEå¢+úmˆÊK ^^t€ˆ‰~¬›èÓÊ÷æÀPp=/:@­Üoš|+/¯”´bqy%@´E¯ˆü½=Äßùµù%XD€è}œ×ËÄVô€èÑG( >¢W¹yÇõÓ^¯BqýÑiõ|÷wæº DCHôŠ7ø(NïÚm–Ñ{íÑÀP½k7Åi/—x«OïÚ›Šâݘé"ú;sZ®üÚÿ´´{2ù !úÉBôk½úJ%}Ú{g®vyCŸ½yÑ»vÂåOôŠêŸCê½#Hz –÷i[ D19¢/è];+¯è6 Ñ@TEŸVî„ËÓ.ag4ÝÀ½Jd\^éCôépú;+lžr3GôUÑ¢€Èˆž.= ú¡Ix']é>Â}ì;5sý­¢UÑÒlÕ‹iûJázDÿNÍÂ84öú UÑ{z–·“è9¨@ôC´S3§c|§5L+<˜[ò=Ãv¶®Ï[WÿUéÀ× z?ZŒb§freöCéãÆ.yW9^Ö‹½JO€èóåéNÍl'vêª,-= ÿðSQ°¢W/¢@ôž›J}ØšùkùqíðÇßL=”_ôéØuj¦2q%ˆ>íñd¬§: z€¡.úØwjæzÁ¢¿¦Iœ<®Ò6¥xy¥Ó|T&€¡%z(/%°0¢@ôg×cyDˆ}ü Åâ#úØwj¦¸ ÀEo{½£z'h!Š>~šU‚è¹Þ*EôqíÔL¥Û²´ÚÃÁó¾FȿߨwPfÑG·S3•Ž}ŒQé­Ìµ  œ¢M§f’>vT´ît¬?ÑsDwDƒNÍŠ½Ó¦Éû9p=wÍ e}:vš©ÿIPM7Šý×”Nô±ïÔLrTîãd¬?ѧ¹¼Ê%z@ô€èÑ¢¯hÂ;‰Jô®ècß©™ëoͨòÌ¿f멘öš¹^°è¯éFR'ÛªZñòJ§ù¸~+€!'z(/%°0¢@ôg×cyDˆ=”Oô;µ3=¢Dˆ= z@ôà*zB!1ˆ.ú»¦ºÚ·B‰A=!„ zB!ˆžBHôDÏ©j€x€è=ÄIôUˆÑ¢Dˆ= zDè=DZôâÁ#«=¢Ïûˬ¿*~ú¢¶jp†…e.w™V£B6Š|Q‚ÝŸc³WDhCÊf€bDïiŒÊôá•Õ鳧į–üýÍÖé¯Bý(­ð7@ñs ©bEÎÑó™„è=¢GôˆÑ—JôÆ@^ëôyhŽqutá°JÓíêåý¹ÊÚŽ±ý“Â9n©ël]ÿJ¾uò¹9­¹ë_VO¾†Š[áiÍóö:É矤åÐv×u]œÓ¾*ßL¯¯µëŽ­~¤•÷Jyªm‘»J#÷s•>•Ýi¡*»nñ5w}Ï/z×6wŽÐö­¢ø!á[ô¶/ªâ±°ëkï´™òE(îRŠw®[ço3F¹™r/ûXõo9¾_ ù¢‹\–¢ß‹}Pµ uc=•E^«V^rVÒÓú›²ÌGôN>>äÇz*~÷äkɧt1¢D.Å7Ýø½¿Y…´þ6G¥¤È]•{í0*oxyåo“`këã….r?)~åå_å9Ò odʼnÞß[.®¢/üÌ“|.†$zyCG ¢c+Šy¸–=@ÑûX–⪆*zÅÕöTX×ÊéÐ_‹VŒEïÚ8‰è+ôˆÞ߬‚=¢W?qàáméEÒ·«ßÒŠó,Í}Ø;¹o >„×#z?môc#(zO/ŒÝWe…ËØtão? ¯¾ÈåÒF¯¾Ã”àˆ>¨“®H{¹š+Àϧ ø© Omô®%-Ë®JÓÍØÐNƪ|•QôŠç{%˜öríŠë9}ß[=m¿5Wüîlû†)r+Ò^®Rp}K˯€r’‚ú&Û®†ŠU®)è½¾¾Š…õ±KÕt“v»êFbÉÒ´ÔwßS†+úØÃUƼ Tiè*¼ûó+bÃ=o^ª4DŠƒè}Zå‹? 0öÕˆVI¥1Ñ@4?ê=¢€ˆ‹~r¢@ô€èÑ¢Dˆ=À½¸aj ¢@ô€èÑ¢DˆìD? ÑÄRôg®Fôˆ= z@ôPÑwµo%„ƒ zBb¢¯ªÞŠè !$n¢¯i°Þ‹è !ÑBAô„B=!„DO!ÑBAô„‚èlú£/f¦ÉÄÆ†-ÿ³uã[6ü¶Y¿îçáÅ\ŠØœm›þ[l—Ø:ŠCq(ʼnJq,¢ôÎX±f- ÿ·üÉÕçÌûGíÚÇâ‘ÌxbáÏ&šÞmÝý6Å¡8‡âD¥8a‰^| ‰ŠÏâ‡ÿ½>>£mÞ[´üÉ5E~ºRŠCq(N)‹¢èÅçêÚwŽÇеïîÛÕÝÙ@q(Å¡8Q)NX¢MKâ{ÇÀÀ1‘ Gc£GØß'¶«¯'Aq(Å¡8Q)NˆGôbåŽèŽKõïïëéîÛµ¯¯âPŠCq¢RœpEèÐÁC‡Ä#öïëíÞÓÑ–)z’âPŠCq¢RœpEàÀþLöÅ ýý}½=©æ öÈðŠ£eðñWC¡8ì9þö(ŠSúêXœ°Eo¬q_àÑ±Ž±*ýý½½=©¦àöHoÅÑ,È'ó]ÒèÇS‰Jœ )ŽÊ‹îT·ðêYiÅ cò=«‹c#úª Š^¬«¾ºÁF®p¸p ØìßßÓ³·½#ÙÜé­8¶[-ŸÌwU#Wœð^÷ì9êEsªaxµ­¨â„´™¾g`q²¢ŸÜ ¹&xÑ›«`DÕlÇXÿ #ûöíÝÛjo lôZë¦å þ˜W“¼) '.œ *Åqzé ‹S8½ï­ŽPq‹æT“â÷Ê/ŽÓF9½¿߃ÅH)Àâ„+zsuŒ¨ší£²Á.Ëš¾¾îî=ÉTbwP{¤×âX·Î.™7FqJ§ùG¥8Öíµ]yÛâ¹ÕÑ*޼bÖÒ9U)ŒZUNq\·HeR™ ,Å [ô{Eöíë0™ªÙŒÜM»CJ_ßžî=m©Ä®àöHoÅ9ñÝh3Ò¬ƒm­l§”L­â8í$…EË«RaYâ·ç¨¿›¬;FáNUÌRùÅqÚ"×÷Wa %R®â„+zsuŒ¨šíë¿a¤··kOW"Ùº3¨=ÒkqÌM³n£S5T¦4Ç–ÎkË^É.a[=ÛbÆuÏQ79½‰ŠßC*¿8¶[T¸Éò1®oÉr'\Ñ‹¯"½½{‚(\ápá@°éééêêL´µ¶Gz-Ž|«ÍaÛÉ$î‰âØÖÊk)$U-fת´â8íT’º¿‡D¢8…¥òþ²­¡d‚²'lÑg?—ùÍÈ:Æv8¨ôôtvu¶¶µ4·Gz+NÞF™?æ•BR‡Â)ÿ°ò‹cÝœ¼ ‘ï*žö%ûU%'ʶ˜Q[¹îEycl÷õwV¹Š®èÍÕAöîmïìhI4ïj¤8'ZÅ¢8ÝslDà S™ÕíˆGÄuN©¦Öæm™¢§(ÅjÅɈžâDrÏ ÷ÎØ®Î¶Î΄H—ž¶èFlB»^ñí;7égöûÚ)Å¡8'*Å Kô;6ýN<eíº?7ïÞÒ¸kSÓ®Íb ºë¿»aãŽ÷ßùåoˆí:x`/Å¡8‡âD¥8a‰~÷¶u ö¶G¿õ£W~±¥þ£žÍõÿ³yý^ýÕ/oYùôÝ_ýÁ‘Ãý‡âPŠ•â„%ú¶–zñïÃOý(fÏo¼÷k«Ü{ìè!ŠCq(ʼnJqÂ}wçñH”CzŽ9(VñرáFWhat works

Phonebook, calendar, ringtones, wallpapers, SMS support, and phone info.

Contents

BEGIN_TOC TOC_0 TOCITEM_0(Notes,phone-motov3cm-notes.htm) ENDTOC_0 END_TOC #include "pageend.h" bitpim-1.0.7+dfsg1/help/faq-colorcodedfields.htd0000644001616600161660000000102010547564173017656 0ustar amuamu#include "pagestart.h"

The color-coded field names indicate their applicability to the current selected phone model. The meanings of the colors are:

  • Blue: This field is applicable to the current phone model.

  • Red: This field is not applicable to the current phone model.

  • Black: The applicability of this field to the current phone model is unknown.

#include "pageend.h"bitpim-1.0.7+dfsg1/help/tab-today.htd0000644001616600161660000000146310547562471015503 0ustar amuamu#include "pagestart.h"

This view dislays a summary of various BitPim events and data items. It consists of 2 sections: Today and This Week. SCREENSHOT(screen-todaytab.png,)

Today

The Today section displays a summary of the following information from your phone:

Calendar: All events that are active today.

Todo: All items with due dates on today or earlier, or items that have no due dates.

Memo, SMS Inbox, Incoming Calls, and Missed Calls: The most recent items.

This Week

The This Week section displays a summary of the following tabs:

Calendar: All events that are active this week from tomorrow through Saturday.

Todo: All items with due dates on tomorrow through Saturday. #include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-samsungsphm300-notes.htd0000644001616600161660000000531210725353451020633 0ustar amuamu#include "pagestart.h"

Firmware Version

  • The firmware version is M300 AE07.
  • The hardware version is M300.06a.

Phonebook

  • BitPim supports up to 300 phonebook contacts.
  • The field Nick Name and Memo are not supported by BitPim and will be lost upon reading/sending phonebook data from/to the phone.
  • BitPim can neither read nor set Speed Dials. All Speed Dial settings will be lost when reading phonebook data from the phone or sending to the phone.
  • BitPim can only read and set built-in ringtones for Ringer ID and built-in wallpapers for Picture ID.

Calendar

  • BitPim supports up to 70 calendar events.
  • This phone model does not support recurring (repeat) events.
  • Due to timing issues, when getting or sending calendar data from/to the phone, ONLY the calendar item should be selected (and nothing else) in the Get Data from Phone and Send Data to Phone dialog.

Task List

  • BitPim supports up to 9 task lists.
  • BitPim does not support the Due Time field. It ignores this field when reading data from the phone, and sets it to 12:00am when writing data to the phone.

Memo Pad

  • BitPim supports up to 9 memo pad items.

Camera Images

  • BitPim can retrieve In Camera pictures from the phone and place them under Media/camera-fullsize view.
  • BitPim can retrieve Saved to Phone pictures and place them under Media/camera view.
  • To avoid accidental deletion, BitPim will not write or delete pictures/images in the In Camera and Saved to Phone section. Users will have to manually delete them from the phone.

Screen Savers (Wallpapers)

  • Screen Savers (Wallpapers) can be retrieved, added, deleted and sent to the phone via the Media/images view.
  • The default format of Screen Saver images is JPEG. The default resolution is 128x160.

Ringers (Ringtones)

  • Ringers can be retrieved, added, deleted, and sent to the phone via the Media/ringers view.
  • This phone model can accept MIDI, QCP, and PMD format.

SMS

  • BitPim MAY be able to retrieve SMS Inbox text messages from the phone. However, since the loaner unit is not activated, no test data (messages) were available to develop and test this feature. Currently, the SMS reading feature is available only for data recording purposes. If you'd like to help with this effort, please do data recording and email the DR file to djpham@bitpim.org.
#include "pageend.h"bitpim-1.0.7+dfsg1/help/phone-samsungschu740-notes.htd0000644001616600161660000000563610732042171020637 0ustar amuamu#include "pagestart.h"

Firmware Version

  • The firmware version of the loaner phone, which was used for development & test, is u740.ZL05

  • The hardware version is u740.10

Phonebook

  • The phone will ignore any entries with no numbers and no emails.

  • Groups (Categories) names cannot be added, changed, or deleted from BitPim, it must be done from the phone.

  • Picture ID: BitPim cannot to use any of the phone's built-in wallpapers (Preload1 through Preloaded8) as Picture ID of a contact. BitPim can use another other wallpapers/images as Picture IDs.

Calendar

  • BitPim supports up to 100 calendar events.

  • All recurrent events are open-ended. When viewed or edited from BitPim, the open-ended date would show as '4000-01-01'.

  • All recurrent events are automatically converted to have an interval of 1 (ie. an every-other-day-event in BitPim becomes an every-day-event in the phone, etc.)

  • The alert of an event can be set either to a ringtone or to vibrate, but not both.

  • BitPim cannot set the alert of an event to 'Light Only'.

  • BitPim does not support the Reminder field. It discards the value of this field when reading calendar data from the phone, and sets this field to Once when sending calendar data to the phone.

Ringtones

  • BitPim does not delete ringtones on the phone. You must delete them manually from the phone.

  • The limit of the size of a ringtone is arbitrarily set at 100,000 bytes. Exceeding this limit will display a warning. If you have a more accurate limit, please post it to the BitPim Users list.

  • BitPim will not be able to retrieve ringtones purchased with GIN.

  • BitPim will neither retrieve nor send ringtones from/to the microSD card.

Wallpapers

  • BitPim only saves wallpaper images to the Default Album.

  • The default format is JPEG.

  • The default resolutions are:

    • wallpaper:220x184

    • outsidelcd:128x96

    • pictureid:128x96

  • BitPim will not be able to retrieve wallpapers purchased with GIN.

  • BitPim will neither retrieve nor send wallpapers from/to the microSD card.

Video

  • BitPim can retrieve video files from the phone. It does not retrieve video files stored on the microSD card.

  • The format of the video files is 3GPP2 (".3g2"), which can be played by, among other media players, QuickTime.

  • BitPim will neither delete nor send video files to the phone.

Memo/Notepad

  • BitPim supports up to 30 notepad items.

  • The maximum length of a notepad item is 130 characters.

SMS

  • BitPim can only retrieve text messages.

  • BitPim will neither deleter nor send/restore messages to the phone.

#include "pageend.h"bitpim-1.0.7+dfsg1/help/bitpim.10000644001616600161660000000206010407046626014450 0ustar amuamu.TH BITPIM 1 "2006-02-04" .SH NAME bitpim \- utility to communicate with many CDMA phones .SH SYNOPSIS .B bitpim [ \fB-c\fP\ \fIfile\fP | \fB-d\fP\ \fIdir\fP ] .SH DESCRIPTION This manual page documents briefly the .B bitpim command. .PP BitPim allows you to view and manipulate data on many phones from LG, Samsung, Sanyo, and other manufacturers that use Qualcomm CDMA chips. Depending on your phone model, you may be able to access the phone book, the calendar, wallpapers, ring tones, and the filesystem. .SH OPTIONS A summary of options is included below. .TP \fB-c\fP\ \fIfile\fP Read configuration from \fIfile\fP. .TP \fB-d\fP\ \fIdir\fP Read configuration from \fIdir\fP\fB/.bitpim\fP. .SH FILES .TP \fB$HOME/.bitpim-files/.bitpim\fP The default configuration file. .SH SEE ALSO .BR bitfling (1), http://www.bitpim.org/. .SH AUTHOR \fBbitpim\fP was primarily written by Roger Binns . .PP This manual page was written by Aaron M. Ucko , for the Debian project (but may be used by others). bitpim-1.0.7+dfsg1/help/phone-lgvx8300-cables.htd0000644001616600161660000000135710446666554017457 0ustar amuamu#include "pagestart.h"

This phone supports USB charging cables.

You can also buy from e-bay and Verizon stores (although they are a bit expensive) You can also try RS and other electronic stores. Testing done with USB cables and Bluetooth. This phone also has Bluetooth (BT). It is possible to use this to connect to BitPim. Bluetooth is a slow way to communicate with the phone, using the USB cable is faster. It also runs down the battery, turning it off after use will preserve battery power. You can also get help on a phone forum like URL(www.howardforums.com,www.howardforums.com). Autodetect does not work with BT unless you are running Windos XP SP2 and are using the native windows drivers. #include "pageend.h" bitpim-1.0.7+dfsg1/help/faq-phonesupport.htd0000644001616600161660000000213410360163373017115 0ustar amuamu#include "pagestart.h"

It is our intention to support every feature of every phone. Note that there is absolutely no documentation for most of the phones out there. The developers have to sit there and work it all out, which can take a considerable amount of time. In many cases the phone vendor only ever intended for the phonebook to be accessed and nothing else, so we have to work out techniques to reliably access the other features. Most of the phones also have various bugs and quirks we have to identify and work around.

The features and phones supported depend on access to the phones, developer priorities and time available. There is no formal plan, so the answer is "whenever a developer gets round to it, and has access to a phone".

In general if we don't have access to the phone, it will take a long time. You can see the list of phones supported and what the developers have on the phones page. You can speed things up by loaning a phone to the developers (buy them on eBay). Details. #include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-lgvx9800-howtos.htd0000644001616600161660000000626510547564173017556 0ustar amuamu#include "pagestart.h"

Access Ringtones from a miniSD card:

Transferring files to the miniSD card through the phone using BitPim is very slow, users should transfer files to the card directly from a PC.

  1. On the miniSD card, create a subdir called ringers

  2. Copy your ringtone files to the ringers subdir.

  3. Insert the card back into the phone and start BitPim.

  4. Retrieve Ringtone data from the phone:

    1. Menu Data -> Get Phone Data.

    2. Check on Ringtone, and click on OK.

  5. Write Ringtone data back to the phone:

    1. Menu Data -> Send Phone Data.

    2. Check on Ringtone and Replace All, and click on OK.

  6. All of the ringtones stored on both the phone and the card are now available for assignment.

Step 3 through 5 should be repeated for all changes made to the ringers subdir.

Ringtones stored on the miniSD card will not show up in the Ringers tab, since BitPim does not add or delete those files.

Access Wallpapers from a miniSD Card:

Transferring files to the miniSD card through the phone using BitPim is very slow, users should transfer files to the card directly from a PC.

  1. On the miniSD card, create a subdir called images

  2. Copy your wallpaper files to the images subdir.

  3. Insert the card back into the phone and start BitPim.

  4. Retrieve Wallpaper data from the phone:

    1. Menu Data -> Get Phone Data.

    2. Check on Wallpaper, and click on OK.

  5. Write Wallpaper data back to the phone:

    1. Menu Data -> Send Phone Data.

    2. Check on Wallpaper and click on OK.

  6. All of the wallpapers stored on both the phone and the card are now available for assignment.

Step 3 through 5 should be repeated for all changes made to the images subdir.

Wallpapers stored on the miniSD card will not show up in the Wallpaper tab, since BitPim does not add or delete those files.

Manage mp3 Play Lists (V2 Only)

This feature only works if:

  1. You have firmware version 2.

  2. You're using a miniSD card to store (and play) your mp3 files.

To use this feature, perform the following steps:

  1. Make sure that the miniSD card is in the phone, and you can view and play your mp3 files off the card.

  2. Retrieve the list of mp3 files and play lists from your phone:

    1. Menu Data -> Get Phone Data.

    2. Check on Play List, and click on OK.

  3. In BitPim, click on the Play List tab, and edit (and save) your play lists.

  4. Write the play lists back to the phone:

    1. Menu Data -> Send Phone Data.

    2. Check on Play List and click on OK.

  5. Verify your new play list data on the phone.

Notes:

  • BitPim will not write empty play lists to the phone.

  • BitPim will not write non-existent mp3 file(s) (as part of a play list) to the phone.

#include "pageend.h" bitpim-1.0.7+dfsg1/help/navbar.h0000644001616600161660000000053510547575030014532 0ustar amuamu #ifdef _HELP_PREVIOUS_FILE TEXTLINK(_HELP_PREVIOUS_FILE,_HELP_PREVIOUS_TITLE,Previous) #endif #ifdef _HELP_PARENT_FILE TEXTLINK(_HELP_PARENT_FILE,_HELP_PARENT_TITLE,Up) #else TEXTLINK(rootcontents.htm,Table of Contents,TOC) #endif #ifdef _HELP_NEXT_FILE TEXTLINK(_HELP_NEXT_FILE,_HELP_NEXT_TITLE,Next) #endif bitpim-1.0.7+dfsg1/help/howto-addringtone.jpg0000644001616600161660000013455510310443117017244 0ustar amuamuÿØÿàJFIF``ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀJ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?Ê‹â>¡qáË=.Þií®àv[‹˜d(Ó ÁOºG8$1 “µNîH¬È&ˆ›hOÕ®gMSö©~£ùWie¤Åý‡.±¨\Kod³­¬^D"Y&˜ÛB–P\±f qÆM~N4JɿųæqJuj$ô/£Qÿ–ß÷èSN£ÿ—Koûô*C£Ü^_]E£GsªÁíóíídÁ¡*W#¿¶AÁ=j¶•¨êû…ÕÎwcÉ…Ÿ;qžƒ¶åϦáë[©Sj÷9=œ¯fMý¥üùÛß¡Gö”_óçmÿ~…T}ã-³ 9ÊÝ1[r"8˜ƒ‚˜äÇzš]U‚ÑîæÓ/#¶Š¼ÏRi‘€wqõâªð]Pý›ó%þÒ‹þ|í¿ïУûJ/ùó¶ÿ¿BŸeáföâÆ%Ó®£KÙ!šHFÛ†AÝŽ›AlŒð ªzžq¤êw:}ÒžÞC|¤ƒÔd‚9‚ %:r—"jãt¤—3½‹?ÚQÏ·ýúiEÿ>vß÷èTšÎ‚Ú=Ž•r×–ó›øL†8‰- Â>Ö÷Ù,gþé‚iÍ¥j6ÿió¬.£û6ß?|,<­ßwvGËžÙëJ)Í^/ú½¿0•EÙ–?´¢ÿŸ;oûô(þÒ‹þ|í¿ïЫ–ÞÔ&ðåö¯,Pù&Ü[Dm›ý+Îpƒaã8ÊžÎEE{á»ÕÖol4»]GPKB¤Æß2†åÊ÷=q‘ÅBÄPrqOUÿ®ÝWõrž¢Š•ŸõúiEÿ>vß÷èQý¥üùÛß¡Uô«í=^ÊÃÌòþÕ"ßö”_óçmÿ~…ÚQÏ·ýú™EkÊŒùM?í(¿çÎÛþý ?´¢ÿŸ;oûô+2Š9PršÚQÏ·ýúiEÿ>vß÷èVer å4ÿ´¢ÿŸ;oûô(þÓ‹þ|í¿ïЬÌQŠ9PršÚqÏ·ýúiÅÿ>vß÷èVf(Ũ9M?í8¿çÎÛþý ?´âÿŸ;oûô+3bŽT¦Ÿöœ_óçmÿ~…ÚqÏ·ýú™Š1G*SOûN/ùó¶ÿ¿Bí8¿çÎÛþý ÌÅ£•)§ý§üùÛß¡Göœ_óçmÿ~…fbŒQʃ”ÓþÓ‹þ|í¿ïУûN/ùó¶ÿ¿B³1F(åAÊiÿiÅÿ>vß÷èQý§üùÛß¡Y˜£r å4ÿ´âÿŸ;oûô(þÓ‹þ|í¿ïЬÌQŠ9PršÚqÏ·ýúN/ùô¶ÿ¿B³1F(åAÊiiEÿ>–¿÷èQý¥üúZÿß¡Y˜ö£Ôr¡òšÚQÏ¥¯ýúiEÿ>–¿÷èVf=¨Çµ¨9M?í(¿çÒ×þý ?´¢ÿŸK_ûô+3ÔcÚŽT¦Ÿö”_óékÿ~…ÚQÏ¥¯ýú™j1íG*SOûJ/ùôµÿ¿Bí(¿çÒ×þý Ìǵö£•)§ý¥üúZÿß¡Gö”_óékÿ~…fcÚŒ{Qʃ”ÓþÒ‹þ}-ïЩ »ûL¢(lm™Ïo,‘Yö­M¼·»oHþŒJ™û±ºEB N×/§m4áÿm"ÿâ©¥dm´Ñÿmbÿâª;›‚I"³f•œk(ó¾ß×ÌÝЂêÍ{®µ™-í´Ûf’1™7ª¢ éË1~&¯Qm4qõ½¶ÿã•sÃS›m>õý^À}Ñ宺Ko Ç ?Ú:­Ü/ rHˆ„€YCq„>¾µÃ[8NÊ7ôMôO£ó6§ƒ„£vÿu8?ìC8zC±è‰wlÌÇÐù'ØsU,,ïµS7Ù4»R";diDq*ŸL¹)ˆŽÊÒx¢¤pHß;—ü¹ÎÐî§µïøB<[ÿ@sÿ1ñTÂâßúŸü ‹ÿЬ)G/¥UUU•×÷—k~¬Ú¤ñ“ƒƒ§¿“ïsœò=¨ò=«£ÿ„#Å¿ô?øÿGü!-ÿ 9ÿÀ˜¿øªô´0óö?z8~©‰þG÷ç‘íG‘í]ü!-ÿ 9ÿÀ˜¿øª?áñoýÏþÅÿÅQý¡ƒÿŸ±ûÐ}Süî9Ï#Ú#Úº?øB<[ÿ@sÿ1ñTÂâßúŸü ‹ÿŠ£ûCÿ?c÷ ú¦'ùÜsžGµ'k¤ÿ„#Å¿ô?øÿIÿ?‹è ð&/þ*í üýރ긟äqÎy ×Gÿ?‹è ð&/þ*øAü[ÿ@cÿ1ñTÿ´0óö?zªâ‘ýÇ9ä<ƒ]ü þ-ÿ 1ÿÀ˜¿øª?áñoýþÅÿÅQý¡ƒÿŸ±ûÐ}Wüî9Ï ÑäèÿáñoýþÅÿÅQÿ?‹è ð&/þ*í üýރ긟äqÎy ×Gÿ?‹è ð&/þ*øAü[ÿ@cÿ1ñTh`ÿçì~ôUÄÿ#ûŽsÈ4yº?øAü[ÿ@cÿ1ñTÂâßúü ‹ÿŠ£ûCÿ?c÷ ú®'ùÜsžA£È5ÑÿÂâßúü ‹ÿŠ£þÿÐÿàL_üUÚ?ùû½Õq?Èþãœò A®þÿÐÿàL_üUðƒø·þ€Çÿbÿâ¨þÐÁÿÏØýè>«‰þG÷çhò tðƒø·þ€Çÿbÿâ¨ÿ„Å¿ô?øÿGö†þ~ÇïAõ\Oò?¸ç<ƒA€×Gÿ?‹è ð&/þ*øAü[ÿ@oü™‹ÿŠ£ûCÿ?c÷¡ýWüî9¿$úQäŸJé?áñoý¿òf/þ*øAü[ÿ@oü™‹ÿŠ£ûCÿ?c÷ ú®'ùÜs~Iô£É>•ÒÂâßúäÌ_üUðƒø·þ€ßù3ÿGö†þ~ÇïAõ\Oò?¸æü“éG’}+¤ÿ„Å¿ôÿɘ¿øª?áñoý¿òf/þ*í üýރ긟äqÍù'Ò$úWIÿ?‹è ÿ“1ñTÂâßúäÌ_üUÚ?ùû½Õq?Èþã›òO¥Iô®“þÿÐÿ&bÿâ¨ÿ„Å¿ôÿɘ¿øª?´0óö?zªâ‘ýÇ7äŸJ<“é]'ü þ-ÿ 7þLÅÿÅQÿ?‹è ÿ“1ñTh`ÿçì~ôUÄÿ#ûŽoÉ>•rÅ p_7ý0ú1+cþÿÐÿ&bÿâªH¼â蘟ìEuaµ‘®bÃCóTÏ„jÞÖ?z*lB•ÜÜV¶H–ÕêêT˜çr¨àsþéíX·«K(…‹Fì'©«¦ÿ„7ÄŸô*Ûÿàoÿm¤> ñuð¥¿þÿöÚç†3 7íSÿ·£þgTéV’K‘ýÌŽÒO³è.x 6ž?ò^Z׿þÏÔ^)Ʊgú<(RD›r²ÆªAÄdu¡ªvþñ„^rMáèn`›nø%¹Œ!Û÷HÚà© `Ž  IÿƽÿB6Ÿÿƒ ù"¹§_ÏuQ|¥Éuô4Œ*òÙÅýÏ»íêeø†kKoÛYÁ}Ô‰<ò¹…\ ±÷ÕyùJßÔeO}“Úî¡ÿ´jŸü"Úø`éàm9]NUë¸×kNTý"ˆ|?ã@&~‚ýe”ÎEÍÒŒHz°)"œžüààqÀ® Î4±xGJX§ç%®·èvåue„ÅÆµH6µÙ>Öêtÿð“XhÑÅi¤ÃÕ»o$0nr0S¢ŒŸÇר6–ž5Ò‘,k-í³ì‘pb&EÊg¾=ŸSü#þ%Çü‰wþËÿÉßìÄâ[?XZܯ1ΗŒÍõPó0Ï¡ÇG5òï&­9.j´ìŸó-§Žs…„eË Ý¦¶ßÔóV‡“E^Ô´ûí'P–ÊúßʹÓz¶2ŒŽ„Q_«EÆIJ:¦|rNÌ_Èåkÿ_ÿèů¦«æ_Èåkÿ_ÿèů¥¤Ë:¦âœu8Çø×Äqñiú?Ìöð?kåù ss ¥»O;íqÎ $“€’IÉ$L³¼Šú#,K:¨m¸šˆçèàs×¥VÔ­%±ÜÛ©•ìç3ùE¹Ý ‚NÃ’3Á Fr3¯â›R–ÚâïAžâÖ%•Æc’çaIp_f¹ÎỦ 5âS§ %wø¯Éþw¶§\¥$ö:*+²ðíݼ-q<K«-Õ™€ƒ#F‰ÊCŸ›l¹‚xç—Üxzõ¬nmÕÛe²¥µš¦ÐM·˜²:ŒäP,X“ ùY'ÕW¥{{Eý|üÿ>Âö’·Âu•­Ì7–Ý[¾øfE’6ÁR2= sO‡žBÊY­g[XVwHçx‡–ÄÁ´lˆ(ìÜ2ñ©á½8iš6-b¶²Bª’”ÚîA”9!±Õ°ÜrMJ4ái]ÿÃùù/¼qœ›Õ[úFÅÏ)}_þû?ãG”¾¯ÿ}Ÿñ®cQôS<¥õûìÿRú¿ýöÆ€E3Ê_Wÿ¾ÏøÑå/«ÿßgühôS<¥õûìÿRú¿ýöÆ€E3Ê_Wÿ¾ÏøÑå/«ÿßgühôS<¥õûìÿRú¿ýöÆ€E3Ê_Wÿ¾ÏøÑå/«ÿßgühôS<¥õûìÿRú¿ýöÆ€E3Ê_Wÿ¾ÏøÑå/«ÿßgühôS<¥õûìÿRú¿ýöÆ€E3Ê_Wÿ¾ÏøÑå/«ÿßgühôS<¥õûìÿRú¿ýöÆ€E3Ê_Wÿ¾ÏøÑå/«ÿßgühôS<¥õûìÿRú¿ýöÆ€E3Ê_Wÿ¾ÏøÑå/«ÿßgühôS<¥õûìÿRú¿ýöÆ€E3Ê_Wÿ¾ÏøÑå/«ÿßgühôS<¥õûìÿRú¿ýöÆ€E3Ê_Wÿ¾ÏøÑå/«ÿßgühôS<¥õûìÿRú¿ýöÆ€E3Ê_Wÿ¾ÏøÑå/«ÿßgühôS<¥õûìÿRú¿ýöÆ€E3Ê_Wÿ¾ÏøÑå/«ÿßgühôS<¥õûìÿRú¿ýöÆ€E3Ê_Wÿ¾ÏøÑå/«ÿßgühôS<¥õûìÿRú¿ýöÆ€E3Ê_Wÿ¾ÏøÑå/«ÿßgühôS<¥õûìÿ"‚’í J°'çÇøÐ…|Eÿ‘óRÿ¶_ú)(£â/üš—ý²ÿÑIE~¥—ÿ¹Òÿ $|®#øÓõ™ÏxþG+_úý‡ÿF­}.×§û­üÅ|Ñà_ù­ëöýµô¹ÿ^Ÿî·óòGüZ~ó=¬Úù~Cè¬ßjrè¾Ô5Hm’åìàyÌ/)Œ2¨ÜÃpVÁÀ8ã“ÇQ^%±ßÙ×Lñ^ÆÑÃ>È%kxæuV ç” “½@É–QŒ+ç@Ù¢°¬üc¢^ÃÑ\̱Íåy&{I¡ó„ލŒ›Ôo]Ò ,¹z䌊'ñMœ>%ƒFXæ–I<Ä‘â†Gò¤Q ÁTáJÜ).HUÆ ç‡`7h®S^ñ—ö>¼Ú^tXvÚÇqæjz¯Ù7ïi<¶Ý/“‘÷…>߯Vþ’‚ÞEˆ[G,ÒÉ/Ÿs(P»˜o’N0ç,£ub:Š*®³ay%´pOºK˜¤–5(Àí•d ùYYÕJ¶9àâ¥Î­¨M}qk£XZÝFܽÕÛ[ª¹Up‹¶7,v²’p̸$î †lÑX×úêÛÜÀ°241j1Ùj ÊÙ„ÉcÇ©/%¸ÈÈÎq‚EKO]Èísw§C–oä°Žâ;£$žbÎ`Rñ”VpÊÌAeÈÆæWa%ŠôiW[§‹½Y­äQ:’r¿¾²cÝ’èÞ\½|I¥›K»—–hc³µû]ÀžÖXž8³ ÜQ”7ü²~1ž3ŽFU†kQXGÆ:"É*5ÌËåJñ;µ¤ÁÆ+#n+‚ˆÃ ùÚ¹ˆÈÌ—+Ñ­^èOtè–Ë#I)·“Ê>X,ê’mÚî¡_(¤°ØÜ|§€Ù¢¹»¯éÐ5žÈodóî…¼‘)ÖxÁŠYÄ&?1”˜Šä }㟔ŠÖ¶Ö,ï/æ³·3I$;·È-äòr§ ¢]»à¨bAÁÁ`/QY7¾$ÒôÙ®b½–k³ÄÒ¼’ZÊ#eT.Án×` ªI·)Ê´“nò™.‘Õ•>ÎöS-ð”ó®rŒ#ÿu°X š+›µñ;Ëá)õ··ÎË©áTehB¢Ü4JòîB€ÎHù@c·ŒSíÊ›“’ ažFê_¾Ù¥h×JÛy}uWŸhÏÙ¢‘¢]ûpü\Û£÷¸þóÝQTm5› ï°ýš}ÿoµ7vß# ñ ™nG냃ÏN dÚxšîGk›½:4³%„wÝ$ós—Œ Â³€>Vb .F72« é(¬hüW£H’ºÝ8D]êÍo"‰Ô Ã•ýð%ì—@>òåëâM,Ú]ܼ³C¯Úîö²ÄñÅ™⌡¿å“ñŒñœr2X j+øÇDY%F¹™|©^'v´˜ ØÅdmÅpQaŸ;W#q’ãÅz5«Ý îÙdi%6òyGËRM»]Ô+å–”à°4W7uã]:³Ù ìž}з’#e:Ï1K"¸„Çæ2“\¼sò‘OÕ|QµµãÙ”ز½Ô­m)…!IND˜Ή¼íV-¹HÁ ŠvÐÑY³ëÚm½ô–’Ìêð©y¥ò\à ¼ù’²3· †`pT÷ç¼Gãc¤›)3:yÞd7Ö²ÂêÖy‘¶8FÚZnÆ‘Á`;:(¬&ñ†Ž‘«;Þ¬(‰mΟp',U˜ÍûHþm¸ùž !›´VxÇDI ÌÇ1 ÖÒb!f\ÊÁq7 ¼®Ýœ`Ôz¯Š ¶¶¼{ ò›Wº•­¥0¤)"‰È“Ñ7ªÅ·)$NÀt4V5ω´Øo'²ŽáîÚx!ž6W#+Æ«’€H•vöbÈ åc´ñމyhnb¹™b1,Ñ™­&ˆÌ„€ AÔrYÈ—AÕ†U€Ý¢°—Æ;ÆÌzÒ,¦&·}Áœ0UbL[7íDù¶ãç^y"ø³C‘îR-A&6Ê/’­ ÂðTÅÄ‹° —9 ’¤ÀlÑ\÷ü%Eyq-Ø{}1tã{Ím,r‘°¸ÜŒ Â@* Þq»µâ­$Û¼¦K¤ueO³½”ËpÅ#l%<Æ+œ…#ÿÝlfŠÂ_ÛÜM£}ŠÞiíµ+©­Œî¦/!âIƒ#€û·DËŒ„’8 TÖ,ôxà{Ã7ïåòbH-ä™Ýö³`,jÇõ„Þ1Ñ5u¹š]òˆ£Hm&‘åʳ+"ª’èV7!Ô;N ÅAªx¯ìv_ZÛCqbü–çÉ–Y2ÃȆ"¥žq±‡–Ûì.s»k°Ž’Š(¤0¢Š(¢Š(¢Š(¦õéþë1O¦õéþë1@ñþGÍKþÙ褢ˆ¿ò>j_öËÿE%ú–_þçKü1ü‘ò¸ãOÕþg=à_ùíëöýµô¹ÿ^Ÿî·óóGäsµÿ¯Øôj×ÒçýzºßÌWÈqñiú?Ìö°?kåùX±,¹Òuo®.´kû[SvÂK”º´k…g ¨vÈ…NÕPFHùWŶh¤3 ^Óoî´]PC/Ú®D©y§ÀUP,ùoLsó+KI$9 ´ðÍÜnÖ×zŒ3ébþKøíãµ1Éæ4æu!s•W üª¤•\œnVé(§p9ðL¿f´·—SFM2ƒL+lT¢¤È¦oœù§6ñgo—‘¿¦FÙ5_ êÚ¥êÿlYGs¨Ø}‚öO°9C2m1¯”`&|åœ õtQq¥Ï‚¾Óeuoý¡·ÏµÔí÷y9ÛöÉ„¹ûÜìÆ1ü]xéU.¾ÛNú ôø…êÝ•¸j¥{€á·Ì[,€ÈØ à(,@;»j(»žÔ¼7-Þ»ý³k|]ưˆ°#VŒ\),)`Vå¸pT‘‘Riž{ zóR7¤sïŵœ-lYƒ%]ì²KÀ` H'9à.í\g «ü:þÕ½¹›í¶Qùßi?hm?}Ùó¡–=­7˜7"ù¿*íTEÏ­KÃrÝë¿Û6·ÉÜk€K’5hÅÂ’À2–n[€WAÉÐÑEØŒm;IÔ4Íì῵k÷žiÍÃÚ1‹t³4¬<±&qó>CÏJŽð'Ûæû}ÜÚeÞ¤òÉ$¿lÓ|ë_"O’&U‚ÛÇ‚\õ~>`³¢‹Ë46÷¶·è–²5½Â«Ú®å¸€B#oªùx3UêØe};ÃrÚxŽMjâù&šUH‘ÀQwUÅ•œFÚÑ%üØÂÄÒ0Mò¼«(aއ,{:(¸ݧ†nãv¶»ÔaŸKò_Ço©ŽO1§3¨y œª¹åU$ªäãr¶L?¼«Ñr/l–H¢ ÑéûgšEš’K™<Ïß6èâÞäÏÕ]ÊjVÌ/ÞâíHëß >Da Ik'ÊÎÄâî>o¼¡ž[Á¡ØX¬ÿé6ÑiðÉs°þõ-%(Û» “¿é»¾t”Qp0¼=£gÜê—²AäKwu&È÷îÙ‘ÙyÏ;ÞIeõvÞˆ* O ÝÆímw¨Ã>–/俎Þ;SžcNgPò9UrʪIUÉÆån’Š. ž —ìÖ–òêhɦ@i…mŠ”T’ÍóŸ4æÞ,íòò7ôÈÛ&«á}[S´½_í‹(îu°^Éö(cM¦5ó²ŒÏœ³ƒÀ䮊.)s௴Ù][ÿhmóíu;}ÞNvý²a.~÷;1Œ^:UK¯‡vÓ¾¨#}>!z·enš†é^à8móË 26…8 îÚŠ.Àçµ/ Ëw®ÿlÚß$q¬",HÕ£ KÊX¹n\$dTÁË=Ƴö‹¤Š×R‚{v·°‰ R%?4’ì¯60<Àªy9`/QE”·ðö¥¨i·I¨ÜCmµj«jî‘&ku…ÄRo*ª6.WäNF(Oðå.4Ù­„úe”’ù€ÿféKo o< •ÞX°óÉÉla@rX÷TQvíííïÚtÏì=j§Ýoöø'¶_-[+æ©ówŒgpùsíž+›OjZf¯g}¥¾‹¦ê2âÓJò ‰ ¥Þщ²ìÆu^cò¯A¢‹ÂêF÷T³°¦›¨Ø,7²µ¾ç™äšêI„XyXóÎÝÁþòýí§:GÁË=Ƴö‹¤Š×R‚{v·°‰ R%?4’ì¯60<Àªy9`/QE`röZíæòjR¥½ýõå–¥si•†X–ßtcæ9ÀFsÆîøæ Ÿ4z6‘wO,Ú6œ-á æic{y°Î7[(+¸d1ù—®¾Š.ŸAà»ýe§Õu˜tÏí n¤‘ ¿Ó–x–6ŠÎb0W͸Á0ÚÇ#-…ÝÂio£êZ|oeêîáÌž\W\¸ÅŽÙ#‰TbIûÃKRðÜ·zïöÍ­òAw ÀdZ1p¤° ¥[–àÁPrFEt4Qp9 3úÀ¶ÒZæîÖ ¬ukËÙ—ìÅ„âI'n$ýØ)3â \ô ìÜiZ­Ü×Û£µ¿7PÅäµ ³BcÈ<üÎϸúíô5­E…êZ}LJ¤Òïaylbµµyg·Üˆ[Ý'˜PH¤î3¨Úy­)¼+{&.”šº KÕoÕ­rXÌîò4$01’d`7y€œ·QE¢Š) (¢Š(¢Š(¢Š)‡ýzºßÌSé‡ýzºßÌP„üEÿ‘óRÿ¶_ú)(£â/üš—ý²ÿÑIE~¥—ÿ¹Òÿ $|®#øÓõ™ÏxþG;_úý‡ÿF­}.×§û­üÅ|Ñàoùíëöýµô¹ÿ^Ÿî·óòGüZ~ó=¬Úù~Dw—¶šu£Ýß]Ckm7Í<rp2ÇÉñ§‰âk‡·¡™]£ 7*±!I@%[¾ÓéXÞ.²þÑÐRÐÚýª9/ì¼ØL{ÃF.¢/¹{®ÐIÏ5ÄÝÛx†=Jö×v¡‹ggq¨ yæk˜ílŒ¦&YdÞ[‰ dåò6g?:‘ÞzAy{i§Z=ÝõÔ6¶Ñã|ÓÈ',x?á`³ñ[-¼÷³9žÕdŠk´–C²º+®æeó<ËU!‰‘âIwáÅu~û[hqM{ç n%šåR|ù‘G$­$q°=Q•Jôp8X z~©§êÖíq¦ßÚÞ­±¤¶™dPØ©#8#z·\-¿ö¶‘àß Égòj a±ºÞ¤’ÁhÆ hÝ›ºÄ&8ÍTµIíõûÛ[ÍvëQ³Ôlà†Ie¸xM°†ØÌd?ê7”31Ýól˜­Ñh®Ák‰~_U½½–Skþ¶“Ç\e~ëË##c÷€y ##“åŠî©1…Q@Q@Q@Q@G§ØYÝM~÷LâàÒFãËN9©+/P±¸Ôt=RÞÚ?9ô$€óâS K8z+¦…;°ÄMiKvDºZjøkY·k,i7Ð+”i-Dr¨l‚W#8 ãÜVx×<Öïpº§†Ìê ¸ƒj³TœB±¾ÓéY¨ßÍu¢Á;[ÚD–ÚŒÂÖÏvDðMää [÷"aûÀý'á¤ÛsX¿¸ñæ‚t$»‚{]L¼“jEÊÇ›[•ÉW–!r‚Ëž nÅdtpiÚ5Õ¼WövA*ŽHâFWR2 `‚9ÍIý¦Ð:Ïþü/øS4]3û#L¦o:F–[‰d ´4’ÈÒ>ÕÉÂîvÀ$0 '“¡EØY¿±ôÏúYÿß…ÿ ?±ôÏúYÿß…ÿ »EadRþÇÓ?ègÿ~ü(þÇÓ?ègÿ~ü*í]…‘KûLÿ uŸýø_ð£ûLÿ uŸýø_ð«´QvE/ì}3þÖ÷áÂì}3þÖ÷á®ÑEØY¿±ôÏúYÿß…ÿ ¥§éðl ah»9ò¶=G½mV>ºù1±`\¬TöèG#ê+JWsH™¤‘“$6«ŒZÚÿà4üMIiKwÇ 1±Ž`LqªnÅŒàS\¤~Ô„ñØÏ~í¤[0’"­‰_Ÿ• ‘œûŒvÛÖYœÜ[ÿ»?óŠº+Å*nÆP~ñ¥U5 SOÒmÖãR¿µ²…›bÉs2Æ¥°NbpÕn¹ï Xî,îžçW´»E’8®4Û¹`ŒPº0H ¨r@?/ò޳v â¹·ŽâÞT–TÝÛr ü€Õê o-á»·µy?q»ËŒI 2ÌqÑF@Üp2Ê3–ð¾V°þ+…à½ÔâµÛ}Š&´º“}®È÷ùŽÒ,JÄùÀùÊeFO–*ß‹'–ÎãÄ—kÅ1ðܯ§È¬CFÑ™ Åå^Û'Œázìà°µæ÷驼r®>µ†eƒÎ’îÙg ¶3j–[’»¾Ë÷½¼ÁZ¾³Õ›Xê7ºœ¶ðXB`£ÃŒe¹²f,#òÆ‹`©oi`;:+…Öÿ·?á"Ô²¾ÛwuöY~Éþ¾Þ&çgÞÿG¹Ý!~e-Îà¿%(µ8­¿{{­\èÆê?µyv—°L«åËždryö|ì€8È2à°‘Ep­ößíUû7öןö«Oìíÿiò~ö;ÍÝû½øûN|ïÞççeQ·´×,t=ÊmišïLŽ][Ížy¤VÚùwÑ¿–÷8Xö±#€YW€î—Y°}E¬ÿé+)„©F̬›‚Û6Ɉû­‹ÕçVpFÜ­œZ‚=ω-^Á¯Öu™Õa€ÌCOóãÊŽårO*FrôZu?ù^×ÿÐMX¼_ i÷¶÷£I¶žíö[Ç0fÈ@yc–ÔzÕ}OþAWŸõÁÿôX5²¼›QÕo¿Ó´¤µ‚;[c,wò6`¸`­äÆ<ÅùÃDq+çh)­6ÔIkS§|56©6—Ò_P…7Ëh¢3*/²uæ^Hî=j¼w¾›K›TŠçB}>Ù-ÚÉ ‰Žúó/÷µÆkšN¥©h3ø~×O»mB+Ý^åƒBÉŽxïDEf`#bÆâ/”1#qÈ[’Kyã;oCc©.Õí’Vk –\¬WêÛa(%` Ì<ª‘óî¶.ìVGg£][Åqoga4 xäŽ$eu# ‚#œÔŸØúgý¬ÿïÂÿ…Pð”A¡1š)"3ÞÞ\¢È¥[Ë–æY•<©*êvœœ"·(» #ž½³±ŽwD±´P¤-ÓÐâ¨j_öËÿE%úv_þçKü1ü‘óãOÕþg=àoùíëöýµô¹ÿ^Ÿî·óóG¿äsµÿ¯Øôj×ÒçýzºßÌWÈqñiú?Ìö°?kåù¢Š+ç@(¢ŠŽH"•ây"Gx[|lÊ FÁ\C†aŸBGz#‚(žWŽ$G™·ÈÊ lÉõ8Uôv©( Š( Š( Š( Š( Š( ¢‚[»9n|«x%IdÓ#äUÆ6ŸîúÔ´UF\¢jäßûGûGûOûw•ä}§Íýç—Û7yyÛžqÓ5cûJÿþ|­¿ð)¿øÝ%^Ñ‹”_í+ÿùò¶ÿÀ¦ÿãti_ÿÏ•·þ7ÿ¤¢hÔ_í+ÿùò¶ÿÀ¦ÿãti_ÿÏ•·þ7ÿ¤¢hÔ_í+ÿùò¶ÿÀ¦ÿãti_ÿÏ•·þ7ÿ¤¢hÔ_í+ÿùò¶ÿÀ¦ÿãti_ÿÏ•·þ7ÿ¤¢hÔ_í+ÿùò¶ÿÀ¦ÿãti_ÿÏ•·þ7ÿ¤¢hÔ_í+ÿùò¶ÿÀ¦ÿãuZíî¯v,áR™Á[£ßþÙûUŠ)ª²NèN7ÜÍ6“ùwOü ?üj¥··•'š(ãDGL\±bŸì®>í]¢œ«ÎJÌJœS¸QE‰ QEEmo½¼I1(HãBª(Àv©(¢€ (¢€ ‚îÊÒþ1å¬7ØY£9R§ƒê¬Ê}˜Žõ=QEQEQE‚&¸Kƒ‘YB£r«XÔUr;í•%P7µÅ”ð¡¤Ó$b§þÒ¿ÿŸ+oü oþ7IER“ZÕÅþÒ¿ÿŸ+oü oþ7Gö•ÿüù[àSñºJ*½£Q´¯ÿçÊÛÿ›ÿÑý¥ÿ>Vßøßün’Š=£R•Äw´Íi³c;nÎ8ÿžu ³˜õ·_ü ?üj´è«Xš‹DÉtâÊö±I™¤DMî ª9lнHÝô©Oúôÿu¿˜§Óúôÿu¿˜¬[mÝ–•• ø‹ÿ#æ¥ÿl¿ôRQGÄ_ù5/ûeÿ¢’ŠýG/ÿs¥þþHùlGñ§êÿ3žð7üŽv¿õûþZú\ÿ¯O÷[ùŠù£À¿ò9Úÿ×ì?ú5késþ½?Ýoæ+ä8ø´ýæ{Xµòü‡ÑTuKû+N7"/6F–("BÛCI$‹n88]Î2@$ C…©_ø‹G¸Ò~Ñ,:—Úoü“o§ÚÓìó¹–fyº¯Ý#œâ¾rÇ utW/¨øóHÒ¬m//Å í*?™,(Ð4M²@U¤ å[#Î8ÎW$þ8³µ·»º¹Óu­ k¨Òá„Eg{q!t@$,!‚ÁAÛÔvÔQ\½÷Žl4«y©guat­­­Ì+8påXIæy@*_¼àü˜ÆJåÔx¤{‹K˜-#²¶ŒÄî^[¤tX!?¸Æwí;>RK ص«êKg§[Û«Ú^ês¤d Íoò4’‚˼G›~òïÛœ®k“¿ñÖ·k£ko•«_ÛÏtö,bs ¶åW2|ÙÞ<†¯ÊhÆþ è´W7{ãKî®&³½û?hTºUB“É»I ûÃ*^YUNÃÊåçÅ‘£›i´­B-L²,z{y&YC‰X0Æ!˜òàþìñÊî,CEr÷~"º»}8hÐ<—nî&´”ª<€bh òüù"‡Ë„c¸Œn£е8e²BST–âð@Öé’X\*f“p[‰FA1 1À¸= ÛQ\…ÏÄÚúþÕÝìÖr|¹"f‘¡ViG¿ÌRo˪©ÛÃ|Ë™5OˆZ6$߬Öí$^{,íO%™UÊ;«¶v±Øœc ¡ˆRYÕÑXCÄÞݛ㽶ŽâY­-õXÊ4èz $°eòäåÓiòÏ'+ºÞƒ¨K©èÐÜ\ª-Ò4\Á çDí…2s³z6ÜóŒgÍ*†?¶\Ë:ÛÁHœ!2LT“µ[ SýïZš<̰êorN&&4‘Ê+7”˜€$ ÷ÁÇ¡«¦“näÈO³jóÂÏÿ[ÿÑömOþxYÿàKñº“ÃZ”ÚÏ…tRácYïl¡¸‘c(g@Ä ’q“êkR´åakÜÇû6§ÿ<,ÿð%¿øÝfÔÿç…Ÿþ·ÿ­Š(å`×¹ömOþxYÿàKñº>Í©ÿÏ ?ü oþ7[QËÁ¯sìÚŸüð³ÿÀ–ÿãt}›Sÿžøßün¶(£–=ƒ^æ?Ùµ?ùágÿ-ÿÆèû6§ÿ<,ÿð%¿øÝlQG,{½Ì³jóÂÏÿ[ÿÑömOþxYÿàKñºØ¢ŽXö {˜ÿfÔÿç…Ÿþ·ÿ¨åMB Ú ÿÓßý§[••­Jb²£9ä*‘–éÀÉó«…8ÊV±2m+Ü n®GTµÿ¿²ñº|72¼é¤;]]ƒG#6 •TxW'ÿ u¼ñ[,Vó½ô’yOf8xØ}ìçÜã>Ø8é-9¸·ÿvçkWÙ»TQ\¿‰õÛý3WÓl¬äH’æ ‰]Ι=óf6ˆÞ±ã€;×ÐuW¦xÊóP×,¬ÓOó£ž&y–Ý£o³Ÿ*ÑÁó ›dAö–Ë(Éùp§µ·ñÍ‚xf×_k;¨ìî™s$Ìá“váæÈ£×'PW ]„uW!oã»c¯<ýjЛk娉 –ïpÊå¦êÁP naƒW¬üe¦_xgP×`ÞöúzÈׯñÈÊQ7• ŒÈÇi†#œ ¡¢¹M?Y¿³ñÑõIþ×zö³yȸYIÄΧˆ* ·8 9wªh¾3ž_h¯©[][ßÝÁfâY¢‰Öè<Ç# ŽO”fdûÛHÞVÚV‹ÛQ\†—ãi.4M[½&ëûST€K ¤O™Àä|¸ÙóŒ)møçn#gT×kc™{ss³*Z˜†ÔŒ bLŽƒ¬‹Ó=è°ÔW(¿|?&«iaÎÿ´ù!%ßüÓ*´cËfœ‡NU¹#kmÒÓüMeá–ñ Eui§>Ó¾æ-¬b°Q“ÈéÎÜ®T©%€Ù¢¹KÏiúu…Õí¤Öí{¹­¢–êÑ|ØÀRdY ÞY_@÷ä5j?éóÃ-å¼7SipAçÜj ª"…|‘0K òÙʇïÔ ÐÑ\ܾ0XfŽÒMS”’¤ic˜<¬’º¾ï7ËÚD½œ¯NFhkÞ4+á­RmÎöKë{ ¦ªÅþ‚êd@dÞà6$ŠAòoÿVz‚»‹ÙÑY:uåÇöÖ©¥ÝIæ´]Ì`Ü˸*¶1ó+Ç(é÷vd–ÜkZÈ®fû=¤ÓíÝå£>Üã8©>Í©ÿÏ ?ü oþ7Uµ?ù^×ÿÐMYÕµ;Ëk@µ†ÖþîK{‰ŽôÄÈ»T rc䓯1ƒœ®°I­Q÷³jóÂÏÿ[ÿÑömOþxYÿàKñºÃñе_ Ý\Íu ¥Å²ÛÜOªE$eR8¤‘OÚ[äwo+˜•7(rß2ÆY‰õýzÓ[òͦɨ\<&+å´uŠ5‘._ šKöF/úÀqòá«–=ƒ^æçÙµ?ùágÿ-ÿÆèû6§ÿ<,ÿð%¿øÝrïãMa¬u[˜’Å?°­%¹½V…Ûíž\×1ŒïN~ÈÇ'Ìǘ;rÞG,{½Ì ZöÚñZí;ŸåDnîTµÿ¿²ñº‡Äº›ikssöigHÝw¬XÊ®[ŸAþ@ɶþ ·Ôu?³Y+ÜD"ó$~äyû ç¹çŽßž:ᆧ$›1•I&tÖó<¦U‘Z7 ò9e ª° ;7¥H×§û­üÅW²ÿYsþôú&:°×§û­üÅpTII¤otxOÄ_ù5/ûeÿ¢’Š>"ÿÈù©Û/ý”Wéùû/ðÇòGËâ??Wùœ÷äsµÿ¯Øôj×ÒçýzºßÌWÍÿ‘Î×þ¿aÿÑ«_KŸõéþë1_!Äŧèÿ3ÚÀý¯—äGygo¨Z=µÌ{â|dT‚C)«  €AVl:‚æÖâóYÔ/ÞÒ>:À¡[Ë’2?wä)ëÜ|ìÑ_8z/wà{;‹kÛxu-BÑ/–hîÌ&"gI$–B‡|m€ òà®’p1=÷ƒ´ýCH:l³],&{¹÷#(m× 2¸û¸ÀŽ;.sÎz)ÜF6¡á»kýIµ!uumz%ŠhJ Δ2²’VâE;#š¯?„ã™.Õu’êíîdo&S2)•ˆa$l¸c3dB…QŠèh¥q˜×𦑧ÛiJË¥4ob$f*¡aBNN2ñî!ˆß¸@¢O iòè׺k‡)v·hÓ|¾j-˳ȱÀËp1ü+œâ¶h¢àsw¾ ±¿ŽêÞkËß±Íö†KUd “«¬’!Ù¼±óeá™”o8.-ê¶¿Ô›RWVסbX¦„¡0˜üàC+)%n$S¸‚0­š)ÜG=eá¶³Ô%‘.œD¶m¼à©™&šW’âR ìË·’À`¨*@UøN7ss6«¨K©†FPo$KA"ª…ˆÈÄÓPŸÞx]½ \zçÂ6×6÷ö¨ê ax³ƒgˆ±ÆÓ󻘓#¶™Al…ùWïô$½¿7‘ßÞÙÉ$KÀµu_>5,UI*Y1½þhÊ·Ìyáq­E+ŒÂK[³ym<Óy2Íukc4ŠGq }ϸ!“æ2Iœ–yÂð _Ñ´ßì* F—Εw<ÓmÛæÊì^GÛ“·s³68 ½Eiñ´Ðê‘$Ò@ï1U–0¥˜“æyzƒEW’ÆÒi ’ÚÀîz³F ?\$–äµrþ‡¤¦ƒ¡Ùi1\Ïq œK rO·~ÅáAÚª8;s““ZÏfXÏ·ýú_ð£û2Ãþ|m¿ïÒÿ…_6ß÷éÂìËùñ¶ÿ¿KþsÄ,ΆŠç¿³,?çÆÛþý/øQý™aÿ>6ß÷éÂŽx…™ÐÑ\÷öe‡üøÛߥÿ ?³,?çÆÛþý/øQϳ:+žþ̰ÿŸoûô¿áGöe‡üøÛߥÿ 9âgCEsßÙ–óãmÿ~—ü(þ̰ÿŸoûô¿áGJgxÇÇÜ;yC“$Ñb}"ëN¿¹ºÔ#»WK‡¹pEeÚ@ØPmã×ïN•\g=†Út:Ó¾­äC ¼€ª•hL»&A· ì%bËÊáŠ|ËÐZxÎÞÚÊÞmKP»K†;C1ˆ9" ÙäY-“…àŒœõS¸ŽnÚÜè±è“j¯¤'Éö&XY #hX‹÷í]¼0`üçq >¯¡Þj:öŸ}m©Íaµ­Ä.öâ3#$G]¿»lô9ÛŽõ»E ϶štÑÿgÝÞÚY§”ZÊ)—#FŠˆYˆ2p±Æ È9m×ì´´Ó´m&Òâhã¶µ[h¦ùLŠB†äm-À<Œg·j½E!œÜ µ´ýõž¡{m¨4²Ë-ôK’S&Íû”ÆcçÊ‹$ 9Lç,ŧ Ú;\Çö»ÑcyŽòͤ—9ˆE¹Ý—vÅAãîƒÔ’wh§qPx^Ômõ­Bööú VEž-IUŽTT!Whóå=3“É U.ügqm{o¥¨Z%òÍÙ„ÄLé$’ÈPï°ž\ÁÃrN:Š(¸º~Ÿ,:–£¨Ý25ÅÓ,q„$ˆà;89iœd ä…´¨¢ÊºŸü‚¯?ëƒÿè&®êš(Õ/ô«³wntëƒp‘Â#Û+(CîF8Úî¿)|ž *ºu ¬0AUoìËùñ¶ÿ¿Kþ¤d’³%§qo|#g©Ï(Ôo/¯,_Í)c4£Ë‰¥GʰQ'+$€åT?ÊÕÛð|R9º›WÔ¥Õ£E¨·’%ˆ"Ȫª¢1šaó!?¼<ð»_ý™aÿ>6ß÷éÂìËùñ¶ÿ¿Kþ\ñ™ž°x½¾Ž;˜š@+GþžŒòHÂL¡Û–šcû¯/ýaÆ]½EsßÙ–óãmÿ~—ü(þ̰ÿŸoûô¿áG6ß÷éº#ŒåIXÊTnjÉ-Ò°Ã+Æô>Lu9ÿ^Ÿî·óÁ º†$IÉ  þ§ýzºßÌWåÍ+›%ecÂ~"ÿÈù©Û/ý”QñþGÍKþÙ褢¿PËÿÜé†?’>_üiú¿Ìç¼ ÿ#¯ý~Ãÿ£V¾—?ëÓýÖþb¾hð/üŽv¿õûþZú\ÿ¯O÷[ùŠù#þ-?GùžÖí|¿!ôQU4ýSOÕ­ÚãM¿µ½…[cIm2È¡° RFpGõó‡ [¢£3Ä· neA3«:ÆXneR: .OmÃÖˆ'ŠæÞ;‹yRXePñÉWR2#‚ï@QQǘ×§û­üÅxOÄ_ù5/ûeÿ¢’Š>"ÿÈù©Û/ý”WêYû/ðÇòGÊâ??Wùœ÷äsµÿ¯Øôj×ÒçýzºßÌWÍÿ‘Î×þ¿aÿÑ«_KŸõéþë1_!Äŧèÿ3ÚÀý¯—äfx’ÎâÿC–ÞÞ?5¼Ø^HrŸÊ­$\ðw dçv “\§Š.Úô®¯fº¥Œg´»‘`žÖy÷Þ[áQ@Y[jyà Ëb’\A¨æ‚+„ 4I"W ê ¤2ž{‚±×Φwœ•œ¯â]>úxõ£¤C,ðéîæçÎÅ¡Q(?½ØdŽã>oË€3ò”ªžÓµ«¨4㩾º¯q=½½Öû«ˆñÓRF<0Ø~и.0Å·)<}2Š.–G6«{¦DšèñW-µÝ¢]¯ÙÇØí|ÜGÆó!p¡—b°œQßâHuýKSÔ­-#½Y/¢¼´{?"å¡òþÍ(‰üç³ì°·ÊªÀ¾Òx|ú…\>ŸíoO³ÂAÿï•mççíž~ÜÞnÛŸßîó>ϼíÛŸ’ û&¹-–³zÍ­ ìôÃ.¢y×s ®ÌA£Î%-m·,˜ðdœúE\Š(¤0¢Š(¢Š(¢Š(¬}V §ÑoŒ1I)ƒV²¹uK7—–ò9 9bí'’lTPKwg-Ï•o©,‚@Zb„|ЏÆÓýßZÒ›Õ“#?D‡U¹ÔuMJÊHí,/u5Ÿeõ„‚Y¢[{xÎÕgFˆîŽAó©Ï cw¥YëÃÃbØ>²nlôx­®^ûOxZÀ-¼Ø¡UHžPcŽlí/ ò“c«0ÝéßÚWÿóåmÿMÿÆèþÒ¿ÿŸ+oü oþ7Z]àd[‹F¶Qw¬êQý¢cmb-¯ìšç+Pn4!\˃pv¶ã¢£¯Yàë§¾± ±ßGxÚ…ÌÒ‰šc I.%’#ïÝòŒ y} ùþjÒþÒ¿ÿŸ+oü oþ7Gö•ÿüù[àSñº.€ãUïà±6“\“D†(–Tº°’ÚKHVhG•nLqÊù·ûG#ÌL0b7XÓ//´Ía/¥Mqü8>Ó ªÉÍÄß2Ú•/ 7ßK¼4ƒ€pV@z¯í+ÿùò¶ÿÀ¦ÿãti_ÿÏ•·þ7ÿ¢èözúè°ê—o®kGw¥Byç*ahlÖà˜Xìn^ãs$0cW"ç… ¸oiWqk'RMá5Y/çÈ[¦{bDFOÝYd Cò¼pußÚWÿóåmÿMÿÆèþÒ¿ÿŸ+oü oþ7EЮ¢ UðÔ°Oý»«Ýܵ…×’Æ9$vy —ÏÆ¡E^ ¢ßäV=Äš–·k=•”6z­Þ¥oªêDc•!š—o‚¾VӺܸí;A®E|ï©ÙÉg£é÷v²c|3Ëæ#`‚2¦<áV?´¯ÿçÊÛÿ›ÿÑt”ÞÃâ7¶»ŠÆMfò;dyífûôíc~‡a¹w”œùa¶‚Ê Nzˆ!—@Óµ;å:”WöZÄ·³[É$ƨ¥¸›dq|·wŠlªFFfòƒò1]wö•ÿüù[àSñºŽk«›” >™e*W 󖕃)æ>¡€ ö .€µ¢ZÞYèðE¨Üy÷ͺ[‡YŽÅÙPž|µ,Uä(QÚ«ë ?“ÕÁÚÅOn„r>¢ý¥ÿ>Vßøßün«]½ÕîÃ%œ*S8+t{ÿÛ?jºSŒd›dÊíYL~Ô„ñØÏ~í¤[0’"­‰_Ÿ• ‘œûŒvÛÖYœÜ[ÿ»?óŠƒi1ÿ—tÿÀ³ÿƪ[{yRxÙ¢Ž4DqÄÅË)þÊãîÖÕ«BPi3(BJW.ÑEçAEPEPEPEPEPEPEPEPEPEPEPEPL?ëÓýÖþbŸL?ëÓýÖþb€<'â/üš—ý²ÿÑIEä|Ô¿í—þŠJ+õ,¿ýΗøcù#åqÆŸ«üÎ{Àßò9Úÿ×ì?ú5késþ½?Ýoæ+æÈçkÿ_°ÿèÕ¯¥Ïúôÿu¿˜¯â?âÓô™í`~×ËòEW΀QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES ±ƒ‚êÖŸX^Ñ4WN–÷SÓ-/®¤¼¹C%Ô+) “:(À £W©jÙ2“Z#kÎþz'ýô(ó£ÿž‰ÿ} þO й¤à üMPÔì<¢ù_Ú¶>°ósåýª"ߌg€Î2?1Wìãßðÿ‚O4»_q§çEÿ=þúåVÿ¥Õ~*Úø{KÍ£h¤¸`KHʬK)Îä89Æ{Ôÿ#Òd»³ðG†4(kº¡dÑÙÆ ¤=ؼ稞¤W37„türðž ¤3Ù¥ŠùÂhà ßî’ÓvrG¸îÏsûD?óÚ?ûèQöˆç´÷ЦÂ)áú4üÿ‰¨äðß„¡x’]EG™öD­g.ÛKaxäáXàvö¥ìãßðÿ‚Òíý}Äÿh‡þ{Gÿ} ñ’¡ÿ gü"žÿ¡sHÿÀÿøšCáO `ÿÅ9¤þQéOÙÇ¿áÿ9¥Ûúû‰Á 2#Úš×§û­üÅfxofX¬WW0¦ã’'‘~  ~¦×§û­üÅe%ÊÚwW<'â/üš—ý²ÿÑIEä|Ô¿í—þŠJ+õ¿ýΗøcù#åñÆŸ«üÎ{Àßò9Úÿ×ì?ú5késþ½?Ýoæ+æÈçkÿ_°ÿèÕ¯¥Ïúôÿu¿˜¯â?âÓô™í`~×ËòEW΀QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVo„›×õçþ”ËZUƒmg®éB[{§\Z´ÒL†yä‰×Ìrä#pycÎkHlÑÝ3¨Ý\v©«KáI¼G©\XÝ]Íp¢{'‚ÞI”¤p¨³"Ÿ, óazH$ïÆ‡âùôÑÿð>_þ1GâùôÑÿð>_þ1Wgý4.eý&|í¥ø«Q±:¦«%†²Þ$Ôüøç½D*©Âá;©ùO¸`€˜g%÷Œâ‹â–‘â ;JÕU-U­¯ç–âg\°}¥ØŸºÇ8të_DùÞ'ÿŸMÿåÿãçšÇ‡<_wñ‹Gñév µ¸F•.Ɉq'V(›²߃þ·ArKKïkº^›¨­æ«fn-Œ°"Z\NEážc"ü’¢*Ý“nA&w.t«©­-oµI5¹£‹^»–eŠYİ[ƒw^Rʼn6“$|®IV;èüïÿϦÿòÿñŠ<ïÿϦÿòÿñŠV~_zeý&t;© |¦¹ÿ;Äÿóé£ÿà|¿übËâr1ö]g¿ÛåÿãYÿM2þ“á¿ùÉÿ_׿úU-iŸõéþë1Ut›ÓtØíä•e”¼’ÊêRòHÒ63Ø U£þ½?Ýoæ+:Žòmh¤xOÄ_ù5/ûeÿ¢’Š>"ÿÈù©Û/ý”Wéùû/ðÇòGËâ??Wùœ÷¿äsµÿ¯Øôj×ÒÒ0IÛîà‚}3Šù§Àßò9Úÿ×ì?ú5kéªù#þ-?GùžÖí|¿!žt_óÑ?ï¡GüôOûèS诜=žt_óÑ?ï¡GüôOûèSè yÑÏDÿ¾…t_óÑ?ï¡O¢€çEÿ=þúyÑÏDÿ¾…>ŠgüôOûèQçEÿ=þúú(žt_óÑ?ï¡GüôOûèSè yÑÏDÿ¾…t_óÑ?ï¡O¢€çEÿ=þúyÑÏDÿ¾…>ŠgüôOûèQçEÿ=þúú(žt_óÑ?ï¡GüôOûèSè yÑÏDÿ¾…t_óÑ?ï¡O¢€çEÿ=þúyÑÏDÿ¾…>ŠgüôOûèQçEÿ=þúú(žt_óÑ?ï¡GüôOûèSè yÑÏDÿ¾…t_óÑ?ï¡O¢€çEÿ=þúyÑÏDÿ¾…>ŠgüôOûèQçEÿ=þúú(žt_óÑ?ï¡GüôOûèSè yÑÏDÿ¾…t_óÑ?ï¡O¢€çEÿ=þúyÑÏDÿ¾…>ŠgüôOûèQçEÿ=þúú(žt_óÑ?ï¡GüôOûèSè yÑÏDÿ¾…t_óÑ?ï¡O¢€çEÿ=þúyÑÏDÿ¾…>ŠgüôOûèQçEÿ=þúú(žt_óÑ?ï¡GüôOûèSè yÑÏDÿ¾…t_óÑ?ï¡O¢€çEÿ=þúyÑÏDÿ¾…>ŠgüôOûèQçEÿ=þúú(žt_óÑ?ï¡GüôOûèSè yÑÏDÿ¾…5XI0+ʪH铊–Šðoˆ¿ò>j_öËÿE%|Eÿ‘óRÿ¶_ú)(¯Ô²ÿ÷:_áä•Ä~¯ó9ïÈçkÿ_°ÿèÕ¯¦«æ_Èçkÿ_°ÿèÕ¯¥¤Pò"7ÝÁ$zãòGüZ~ó=¬Úù~Dw—‘ÙÄÃ;»lŠ$y²¨õàžp’$E¤Œ£íq5„ŒØH®dsŒ¨ÈÚÌ1¹Õzç$zŒ¥ý‹L¶òÛlYíeóâVá¶2lrWnGCƒƒŒÑØÞ]kZ…ýµœmkñªÇ)”‚æ<0% àûù8ðá8ëçëä¾gcr¾…£¬iŠ·,u+0¶¬à™×psòœŒsÞ¬[][Þ[­Å¬ñO çl‘8e888#Ž¢¹+­S·ÓôõA+i«omn#‘‰œ à%ßäýØœoÀ'Ÿ—ž‹M³ž¶Mx± nç4Q±uL" ˆ¸@z¸í“uhÓŒ9£/ëOø-·&“•šþ¿¯ó4(¦y1Ï4ÿ¾EL_óÍ?ï‘\¦Ãè¦y1Ï4ÿ¾EL_óÍ?ï‘@¢™äÅÿ<Óþùy1Ï4ÿ¾E>Šg“üóOûäQäÅÿ<Óþùú)žL_óÍ?ï‘G“üóOûäPè¦y1Ï4ÿ¾EL_óÍ?ï‘@¢™äÅÿ<Óþùy1Ï4ÿ¾E>Šg“üóOûäQäÅÿ<Óþùú)žL_óÍ?ï‘G“üóOûäPè¦y1Ï4ÿ¾EL_óÍ?ï‘@¢™äÅÿ<Óþùy1Ï4ÿ¾E>Šg“üóOûäQäÅÿ<Óþùú)žL_óÍ?ï‘G“üóOûäPè¦y1Ï4ÿ¾EL_óÍ?ï‘@¢™äÅÿ<Óþùy1Ï4ÿ¾E>Šg“üóOûäQäÅÿ<Óþùú)žL_óÍ?ï‘G“üóOûäPè¦y1Ï4ÿ¾EL_óÍ?ï‘@¢™äÅÿ<Óþùy1Ï4ÿ¾E>Šg“üóOûäQäÅÿ<Óþùú)žL_óÍ?ï‘G“üóOûäPè¦y1Ï4ÿ¾EL_óÍ?ï‘@¢™äÅÿ<Óþùy1Ï4ÿ¾E>Šg“üóOûäQäÅÿ<Óþùú)žL_óÍ?ï‘G“üóOûäPè¦y1Ï4ÿ¾EL_óÍ?ï‘@¢™äÅÿ<Óþùy1Ï4ÿ¾E>Šg“üóOûäQäÅÿ<Óþùú)žL_óÍ?ï‘MUÌð¬¤:db€˜×§û­üÅxOÄ_ù5/ûeÿ¢’Š>"ÿÈù©Û/ý”WêYû/ðÇòGÊâ??Wùœ÷¿äsµÿ¯Øôj×ÒçýzºßÌWÍÿ‘Î×þ¿aÿÑ«_KŸõéþë1_!Äŧèÿ3ÚÀý¯—ä>¹M{û'ûy¿á*ûö7Ùcûö†Ï³ý£tžnw|»öù[wsûxó+«¢¾pôoCaçX[j6PoÔôø´«t1¯™dÿf b_ãCº`g8#o‡ïõûÿøE>Õ¬îþÐÓP»ÛkîÛöm¨¿Ýûí¸ó&ÎêŠwå–>$ñ%å 3k±ÍpÖ‹q´‰4ÖIs mCXNÙ%]’´•àŽN’\\ZíMZ|·QÞH°£]4‹e2Âä¦Í͹ÀˆŽCè4Qp8D—[ñ®¥ ½ŽžódÚ¤w÷DÖ Ò\, !%Á¾òr«ÏpKâ-I/§òu{Q~'¼Žm:ïbÃek1†â@ JˆÞ\³1R&8rc¾¢‹ä—ÚÆ«:…Ô¨ŒÏ& âÖ@‹ÞžÏ,3GV…Av,Ê9C½FÌ.²ë~^­y¾"K )ç-ý°¢Ù Î-lÌjdd1±q$­Ó$ ÚB®+Ñh¢àyö­ëóÛ>¯{y4ǧZI¦#XSÏŽ×Ì+æ† ;‘óð@ }Š(`yÖª">7–F{Q~º¢ÛÀè ô‘÷·“9Kq™7¨Flÿ2î;5´SJ±»ñ´ÿoG†ÏQ7$Lfh”[C¸‘’Ø ’;l*Ë×ÑEÀóíOìŸð’ßyžOö÷öÅö~ì}«ì˜¶ó|¯ãò¿ããvß—ýnеµÍ^æÓźmÔ6Á/”ÎÊXMÔŒÒÍ$R)&£–Œ†\9 ŽS«¢‹åúgŠ7©eœcæãéUV‚ËPЬt­OO:d‹Ž×AkpÓHÒ°‘Ì,ýœ$˜Ûráó»—¾¢Är»¶²ð†‡e>¨÷7N±Ú¤ZÞuƒ{[Š6”Ü?Ì:N*M{û'ûy¿á*ûö7Ùcûö†Ï³ý£tžnw|»öù[wsûxó+«¢‹ä—º¬z^»|ú]í­…ƒÎŠ—pG X`a¤Ç¹”ª§—#³ÐvŒt7×ò_ü9ñ‡úwö¬6·1Úßü‡í1ý˜1mÑ€‡i*ù0yžÎîÎÞþ†æ=ñ¬±ÌHùãpèxôeSøsSÑp<³Åº+xwöúbínQ¿³´•µ8[ ³É.äœã`€XrŠÙÒ5ÍjëÆ’ZÜ_Y¾ÕqéÞpi¢… ˆäò„;ãݶ6Þò”!øºÝQEÀó=cVÔ´ïëÚßÚé¶³j,Ó^\Ý%²‡[K0‘‰$ŠUËs·nNÌ‚oZjúã õ+­IÃÁ¨ØYµŠ[ª[âhíD‡‚`CNäÀ‚Á¾¢‹ä—ºÝÞ©„2x‰Þi`†÷S´Ao*XîìËq³rÃK‘)l;³´ÖÕÅÍî­ªÙkS]@ÚÅ…¹B°´7+,6q™ITqY7 Œ qŒƒÙÛhöv—ó_F&{™we縒]ŽYP;’UpÕãå½EÀ+—¼¸²‹â~“]¢Ýˤݠ§ä6\!8…ä ‡¨^:Š) òÏ®Ž¨òêI§ÜÚ.“%Æ­Û†x O¶ü|Æk€CÅPå&Â’Çkî´„Ñí4Ë[âèÖßi½¾‚þÙZÍn ˆEU’4fH÷ÎÄdÚXn_P¢Äyy¹þÐñ¾¡u6z¬×V/„éAcd€ÉäHpÉî”:ì ìŸ,»ŽÏP¢Š¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)‡ýzºßÌSé‡ýzºßÌP„üEÿ‘óRÿ¶_ú)(£â/üš—ý²ÿÑIE~¥—ÿ¹Òÿ $|®#øÓõ™ÏxþG;_úý‡ÿF­}.×§û­üÅ|Ñàoùíëöýµô¹ÿ^Ÿî·óòGüZ~ó=¬Úù~C袊ùÃÐ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (ªâò6ݲ;—Š’–Ò0È8<…ÁäSI½„Ú[–(¨>Ö¿óÂóÿ%ÿâhûZÿÏ Ïü—ÿ‰§É.Âæ]Éè¨>Ö¿óÂóÿ%ÿâhûZÿÏ Ïü—ÿ‰£’]ƒ™w'¢ ûZÿÏ Ïü—ÿ‰£íkÿÖ¿óÂóÿ%ÿâhä—`æ]Éè¨>Ö¿óÂóÿ%ÿâhûZÿÏ Ïü—ÿ‰£’]ƒ™w'¢ ûZÿÏ Ïü—ÿ‰£íkÿÖ¿óÂóÿ%ÿâhä—`æ]Éè¨>Ö¿óÂóÿ%ÿâhûZÿÏ Ïü—ÿ‰£’]ƒ™w'¢ ûZÿÏ Ïü—ÿ‰£íkÿÖ¿óÂóÿ%ÿâhä—`æ]Éè¨>Ö¿óÂóÿ%ÿâiRê9%m™©`$…Ó c8ܨüèå—aó"jaÿ^Ÿî·óúaÿ^Ÿî·ó#<'â/üš—ý²ÿÑIEä|Ô¿í—þŠJ+õ,¿ýΗøcù#åqÆŸ«üÎ{Àßò9Úÿ×ì?ú5késþ½?Ýoæ+æÈçkÿ_°ÿèÕ¯¥Ïúôÿu¿˜¯â?âÓô™í`~×Ëò\õôGUñ4š]Ü÷PZEgÄ ms%»NåÝd%І`€GÀ8nXS TÔ4½?V·[}JÂÖömëÌ+"†ÁÁ<û×ÎçÓj—šŠ5+=5“|·‰ ItÒÌ+¥Â ãyf9c»#ï ¶zû­KQ²Öt÷º†JÎVµ[Ø ÂohREDÌßwÍic¹ã8_øSDÔ,Eœšu¬pŽ•&xÁB!‰Hîªa‹Ðéz}¾štØl-c°*ÈmRlîÆNF9ɧq):•޵§i6²=†¦÷‘É!›Q¹Ô­Þ·»Ú‘‘³º%FB¶0'×¼kªérÞÜÚÚ$ú`[¸­¦’Š'‚]o8»ð:ãËAÜ1ÀÝÖGáÝ-6]6=OK ›|–«l‚'n9)Œò¯8ì=(ŸÃº%Íô—×>Ÿ-ܪRIä¶F‘Ԯ ’ ü¸ôã¥@déÒkrxÖæ+«»U†=:ÚIí’7u ò\ãËbÀ¨f+óí'2K‹öÔ|G¨XÚ}³P²–->Ò®3R»€Ì£vf%†å!rÝ]$¶V“ÝÛÝÍk —6Û¼‰ž0^-à µ+‘ÁÇZ©w é÷÷“\]Û¥Â\@OȲE2£—Œ²°<©gÆ1÷Žs…Áp9 ¼i­2“¦ÛèGgjno'6¢Õ÷³!FÎß!b$îvŒÛ°%ߊlµ»žtÙ%¸µŠ8a"â"™£‰K¸4e× ’¼¹:ÒhšLßbótË'û>ɺÝÙñŒy||˜Ú½1ÐzU{ÿ é:‡ÛZK(cžú/"êæ(‘fš#€Ñ³ã;YT)ç t €Ap ðίw¬XY]ܽûF™iva„Ÿ1$9rT“„8P½ò¯ž•»Qˆ"[‡¸ ™ÕQ¤ 72©%A=H›¶ãëRRQEQEQEQEQEQEQEQEQETú/üƒ¿í¼ßú5ª ŸEÿwý·›ÿFµkOfKÜТŠ*ÄQEQEQEQEsñø¤¶±ma>…ªÛGuw-¤s¬"95‘‰Hd DLT”=©4[kÅ¥Ü unn쥘&Û¸\È›X•¼ŒáÂ7Î8á±sû3wˆµ¥›—iökx¶ãÊÜû¥lçæß¶‚8òøûƲô ͤ\X´÷ñÜA¦Y6Ÿ`‰nce„˜óæ±v>!•>÷ËÈÚ±ªjPé6 w2Èà:F‘Æi$wˆ2@Ë3*ärH5—ÿ deÏöu÷ö‡ÚþÅý›û¯;Îò¼í»·ù_ê¿yøÇÝòÕ‹Í&óSÐVÎúö|’Çp·[ÌŠU–<Æ]ŽÜ¢†òFpW#ÿð‹^lûgöœÛ?ÚÚÙÙüϳý›W™»o•ÛÌÎþs–€74½JZÁnáYxÞ9 ˆå VV\‚AÆA#®V~‹¦di‚ÔÍçHÒËq,v†’YGÚ¹8]ÎØ’$òt(¢Š(¢Š(¢Š(¢Š(¢Š(¬KþB¶õÂoý :Ö¬KþB¶õÂoý :À%0ÿ¯O÷[ùŠ}0ÿ¯O÷[ùŠç,🈿ò>j_öËÿE%|Eÿ‘óRÿ¶_ú)(¯Ô²ÿ÷:_áä•Ä~¯ó9ïÈçkÿ_°ÿèÕ¯¥Ïúôÿu¿˜¯š< ÿ#¯ý~Ãÿ£V¾—?ëÓýÖþb¾Cˆÿ‹OÑþgµû_/È}Q_8zEPEPEPEPEPEPEPEPEPEPEPEPEPEPQZ\^ÙÂÐ¥µ¼‹æHáŒì¤†rÝ6_Z–«6¡dŽQï-Õ”àƒ*‚çUÖÄ»¿´¯ÿçÊÛÿ›ÿÑý¥ÿ>VßøßünªiØÏõ·ýý_ñ£ûNÃþ­¿ïêÿ_4» Nå¿í+ÿùò¶ÿÀ¦ÿãti_ÿÏ•·þ7ÿªŸÚvóýmÿWühþÓ°ÿŸëoûú¿ãG4»ËÚWÿóåmÿMÿÆèþÒ¿ÿŸ+oü oþ7U?´ì?çúÛþþ¯øÑý§aÿ?Öß÷õÆŽiv ;–ÿ´¯ÿçÊÛÿ›ÿÑý¥ÿ>VßøßünªiØÏõ·ýý_ñ£ûNÃþ­¿ïêÿÒìw-ÿi_ÿÏ•·þ7ÿ£ûJÿþ|­¿ð)¿øÝTþÓ°ÿŸëoûú¿ãGö‡üÿ[ßÕÿ9¥Ø4î[þÒ¿ÿŸ+oü oþ7Gö•ÿüù[àSñº©ý§aÿ?Öß÷õÆí;ùþ¶ÿ¿«þ4sK°iÜ·ý¥ÿ>Vßøßüní+ÿùò¶ÿÀ¦ÿãuSûNÃþ­¿ïêÿÚvóýmÿWühæ—`Ó¹oûJÿþ|­¿ð)¿øÝÚWÿóåmÿMÿÆê§ö‡üÿ[ßÕÿ?´ì?çúÛþþ¯øÑÍ.Á§rßö•ÿüù[àSñº?´¯ÿçÊÛÿ›ÿÕOí;ùþ¶ÿ¿«þ4iØÏõ·ýý_ñ£š]ƒNå¿í+ÿùò¶ÿÀ¦ÿãti_ÿÏ•·þ7ÿªŸÚvóýmÿWühþÓ°ÿŸëoûú¿ãG4»ËÚWÿóåmÿMÿÆèþÒ¿ÿŸ+oü oþ7U?´ì?çúÛþþ¯øÑý§aÿ?Öß÷õÆŽiv ;–ÿ´¯ÿçÊÛÿ›ÿÑý¥ÿ>VßøßünªiØÏõ·ýý_ñ£ûNÃþ­¿ïêÿÒìw-ÿi_ÿÏ•·þ7ÿ£ûJÿþ|­¿ð)¿øÝTþÓ°ÿŸëoûú¿ãGö‡üÿ[ßÕÿ9¥Ø4î[þÒ¿ÿŸ+oü oþ7P;ÜÝ^Å4ÐÃÇ  )rK=Ôv£þÓ°ÿŸëoûú¿ãRCympå!¹†F$#‚qøRr•¶ ;“Súôÿu¿˜§Óúôÿu¿˜¬Ë<'â/üš—ý²ÿÑIEä|Ô¿í—þŠJ+õ,¿ýΗøcù#åqÆŸ«üÎ{Àßò9Úÿ×ì?ú5késþ½?Ýoæ+æÈçkÿ_°ÿèÕ¯¥Ïúôÿu¿˜¯â?âÓô™í`~×ËòXW’ÞjZôúMµüÚtv¶°Ü¼ÖéI!‘¥P¿¼VUQå1<K. í!·jŽ¥£Ùê¾Q¹,‘gd¶÷A"ƒŒ®øÙ[iÂ’¹Á*¤Ž>pô1üG¢øƒQ²6£'Ú–VæácBÅ4èm±¿5Ã?Èå¾SWgP×ïG„‹ÿ ïûo7þj̗֞¹¡EUˆ(¢Š(¢Š(¢Š(¢Š§©isª^i±¼Ÿk³HÞdh@Y7l*ÄÀía•'H8"‹ RÓR{ĵy ÙÜiÕâxÊÈ[0YHaAXövzô~5¾Ô§³ÓWO¹·ŠÔ2^»J«NÊû e¼Ð îùpyj<;g¯ZêÚÄú¥ž› …ÀºSkzó20†¶Р#Ýžàc½n__[éÖr]]I嘅,I$UQ’ÌI(’@“Yÿð”i?Ùßmó§ÛæùGÙ%ûG™Û<¾fí¿>6çgÍ÷y¨õ; KXðêEɳÎò÷}ßÞgËëòãø¨¨±¾·Ôl㺵“Ì…ò*T‚ ¬§XAR@"¬V_‡ôÙ´­'ȸhÌò\\]H#$ª4Ó<¥  _nì ã8ÀÔ Š( Š( Š( Š( Š( ²u/ù Ùÿ× ¿ô(ëZ²u/ù Ùÿ× ¿ô(è{”Ãþ½?Ýoæ)ôÃþ½?Ýoæ+œ³Â~"ÿÈù©Û/ý”QñþGÍKþÙ褢¿RËÿÜé†?’>Wüiú¿Ìç¼ ÿ#¯ý~Ãÿ£V¾—?ëÓýÖþb¾hð7üŽv¿õûþZú\ÿ¯O÷[ùŠù#þ-?GùžÖí|¿!ôQE|áèQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Gc{%•»@ö.D²0d1à†vaÕèjJ*£.Q5rOívÿ mççÿGö»Ð6óó‹ÿ‹¨èªö°¹|É?µÛþ·Ÿœ_ü]Úíÿ@ÛÏÎ/þ.£¢hû/™'ö»Ð6óó‹ÿ‹£û]¿èyùÅÿÅÔtQí`åó$þ×oúÞ~qñtk·ýo?8¿øºŽŠ=£ì¾dŸÚíÿ@ÛÏÎ/þ.ívÿ mççÿQÑG´}ƒ—Ì“û]¿èyùÅÿÅÑý®ßô ¼üâÿâê:(ö°rù’k·ýo?8¿øº?µÛþ·Ÿœ_ü]GEÑö_2Oívÿ mççÿGö»Ð6óó‹ÿ‹¨è£Ú>ÁËæIý®ßô ¼üâÿâèþ×oúÞ~qñu{GØ9|É?µÛþ·Ÿœ_ü]Úíÿ@ÛÏÎ/þ.£¢hû/™'ö»Ð6óó‹ÿ‹£û]¿èyùÅÿÅÔtQí`åó$þ×oúÞ~qñtk·ýo?8¿øºŽŠ=£ì¾dŸÚíÿ@ÛÏÎ/þ.ívÿ mççÿQÑG´}ƒ—Ì“û]¿èyùÅÿÅÕig’óP‚_²Í GŠL…9,SÚÇû¦¥¢‡QöP¦õéþë1O¦õéþë1Y”xOÄ_ù5/ûeÿ¢’Š>"ÿÈù©Û/ý”WêYû/ðÇòGÊâ??Wùœ÷¿äsµÿ¯Øôj×ÒçýzºßÌWÍÿ‘Î×þ¿aÿÑ«_KŸõéþë1_!Äŧèÿ3ÚÀý¯—ä>¹½{ÄzMÍõºG •ìM-]IóîL†"ƒÂï’Ôs·ýa9À%zJ£¤Zj7v77 ™,åóóq÷[#•ÜñýèÐÿ¯œG sÞ!ñˆ¶Ñ5y,ẅã‚î;;öXÌR\ÃŒÈql©ŠNY‡“•Íëïéú~u)aºhD÷pmERÛ­Öfs÷±‚-ß÷\ãœ2÷Áv7ñÝ[Íy{ö9¾ÐÉj¬ ’uu’D;7–>l¼32ç…Äz‡ìõ!,2êZ‚Y;\H,ã1yhóÇ"Hà˜ËäùÒ6  tÀž‚$>4±¥þг½°H7¬Ï:£äXŒÆ3å»ÞHó2\qß-OáÏiÞ'ûJÙKm´É ¸VÎÓº'tçkq»#€$½ð–›¨Érnüé#¹ºk™cß…bÖ¦Ô¯!|²O9ç=ªþ›§Icæ´ú•íü²`y—EÕÀ ª§¹9$Ð +_ºjš›ê>LZDq\Ík"#-Ere?ÆAM åAÎ]¼U¨Ç®]Gq¦ÞÙÀ?³¢X§X$1™ç–6ì—î¶Ô_¼JžvœØ‹á¿…á²²¶M2û4M MI·м,$uPNUÉ8#æÓæðœí1•µ[«Ù§žÍ¦šóÊ"¶˜Ìª‹j ,Jœô œ»KÐ .|o¤ÚiV”âhྰûtEö.´*‰l+ž1’vŽI`j ¼asg¨}³D½ŠÎÏL[ùy„É7‰H;„+·fy'q§·ðzÚIZëzœ+mjÖ–h¢-b-Ú™ˆ–â$\¹cŒóžj5ð&™›&Ÿk=Õ­¼örYܤ>X£ù‡$!i¤`(Ëc@P´CãK_í ;ÛƒzÌóª0ŽEˆÌc>[±-ä3 ÇÝòÕKOˆšn ;;«»·`¶ÓÛJß4r8bë1Œ C'÷qÓ¥{á-7Q’äÝùÒGst×2Ç¿ Å­M©^BùdžsÎ{Tøx-Í­ÕÞ©¨_\ZÏçÆó´`«’=»Qq‰\äÄã$…SKñDš§ˆä±ƒO™­Ö9_i|ˈäI2üá¡Ú6ç|ºëC©j“ÈÏö-=¡²[xÕwÏu.Æž1‰aU9Q–“wXX°ðݶ›¨ËK«¨ÞF•§L¡YÃË,¡[+æ¥O?1l ŽçÃÿh¿¿ýæÛ;ï*á¶6$†î"»%\‚!"àü Â>VÞØ4—“Æ:ßöý͖DZC<ÛbŸL{ébT†Ð…Ûlý Ûq-Ô:Ví·ˆ®£u¸¹çŠóIþÓ·¶´+;£F͉p$Ì‹aÜKòÑD~ ò¯šþ/êé~í#Irس‡XT©Sзõäæ§Ã*X–W´´ƒNþÌÓ…´¬%·ˆ½ÃžC’±ØòAÎ]€zÐÑE# (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ f—¦Ø\Y´³Y[I#O6]âROï¹úŸEÿwý·›ÿFµkMÚäKqÿØúgý¬ÿïÂÿ…Øúgý¬ÿïÂÿ…]¢´»‘KûLÿ uŸýø_ð£ûLÿ uŸýø_ð«´QvE/ì}3þÖ÷áÂì}3þÖ÷á®ÑEØY¿±ôÏúYÿß…ÿ ?±ôÏúYÿß…ÿ »EadRþÇÓ?ègÿ~ü(þÇÓ?ègÿ~ü*í]…‘KûLÿ uŸýø_ð¨Æ£5ÃÛ­]ã&åV$)#•`}§Ò´kƒðŽ…¯èÞ5Õ¤Ô¼»«k›(õ%¶XÜèÎK0óÝĤ}À¸PªQCaduséÚ5­¼·vÁ’I"ETP2I$`9ÍGcm jvqÞXA¦]ÚÉ“@‘È‚AÃ#ðªšÌWº×†£xôéí¶º6s¼~aÜ$…AWdÜËÛóc,2WœIáÛk´—X¿»µ’Ðê7¢â;yYHÕ`†,>ÂË’b$at9» "ÿö>™ÿ@ë?ûð¿áGö>™ÿ@ë?ûð¿áWh¢ì,Š_Øúgý¬ÿïÂÿ…Øúgý¬ÿïÂÿ…]¢‹°²)céŸô³ÿ¿ þcéŸô³ÿ¿ þvŠ.ÂÈ¥ý¦Ð:Ïþü/øQý¦Ð:Ïþü/øUÚ(» "—ö>™ÿ@ë?ûð¿áGö>™ÿ@ë?ûð¿áWh¢ì,Š_Øúgý¬ÿïÂÿ…Øúgý¬ÿïÂÿ…]¢‹°²)céŸô³ÿ¿ þBêÎÖÓUµû5´0î‚]ÞZÎ>¸­ÊÉÔ¿ä+gÿ\&ÿУ¤Û³ !)‡ýzºßÌSé‡ýzºßÌW9¡á?ä|Ô¿í—þŠJ(ø‹ÿ#æ¥ÿl¿ôRQ_©eÿît¿ÃÉ+ˆþ4ý_æsÞÿ‘Î×þ¿aÿÑ«_KŸõéþë1_4xþG;_úý‡ÿF­}.×§û­üÅ|‡ÿŸ£üÏkö¾_ú(¢¾pôŠ( Š( Š( Š( Š( Š( Š( Š( Šl’$Q´’:¢ ,ÌÇ@êI¬¯øJü9ÿAý+ÿ#ÿ×¢¨ÙkzN¥1†ÇS²º•WqH.Ø/LàœÎ¯PEPEPEPEPQéÚŒ–­ ËpM) [HÃF#¸<RQUX–®OýµgÿO?ø /ÿGöÕŸý<ÿà$¿üMAE_´]‚ÌŸûjÏþžð_þ&í«?úyÿÀIøš‚Š=¢ìdÿÛVôóÿ€’ÿñ4mYÿÓÏþKÿÄÔQí`³'þÚ³ÿ§Ÿü—ÿ‰£ûjÏþžð_þ& ¢h»™?öÕŸý<ÿà$¿üMÛVôóÿ€’ÿñ5{EØ,Éÿ¶¬ÿéçÿ%ÿâhþÚ³ÿ§Ÿü—ÿ‰¨(£Ú.ÁfOýµgÿO?ø /ÿGöÕŸý<ÿà$¿üMAEÑv 2í«?úyÿÀIøš?¶¬ÿéçÿ%ÿâj (ö‹°Y“ÿmYÿÓÏþKÿÄÑýµgÿO?ø /ÿPQG´]‚ÌŸûjÏþžð_þ&í«?úyÿÀIøš‚Š=¢ìdÿÛVôóÿ€’ÿñ4mYÿÓÏþKÿÄÔQí`³'þÚ³ÿ§Ÿü—ÿ‰£ûjÏþžð_þ& ¢h»™?öÕŸý<ÿà$¿üMÛVôóÿ€’ÿñ5{EØ,Éÿ¶¬ÿéçÿ%ÿâjÅÜwš»Â³mŽ…ÐJcïè*–ŠN¦›+ aÿ^Ÿî·óúaÿ^Ÿî·ó™G„üEÿ‘óRÿ¶_ú)(£â/üš—ý²ÿÑIE~¥—ÿ¹Òÿ $|®#øÓõ™ÏxþG;_úý‡ÿF­}.×§û­üÅ|Ñàoùíëöýµô¹ÿ^Ÿî·óòGüZ~ó=¬Úù~Cë&ûí7šíž•ä–i-¼·MRøFEÚ792H=+Z²‰ÇŽl?ìuÿ£mëçéü_×c¶{ÿÂ1?ý ú×åmÿÆhÿ„búõ¯ÊÛÿŒÖÖú7Ö¼ÞKîDòÿW1áŸþ†}kò¶ÿã4Â1?ý ú×åmÿÆkk}èæò_r_êæ/ü#ÿÐÏ­~VßüføF'ÿ¡ŸZü­¿øÍmo£}ÞKîAËý\Åÿ„búõ¯ÊÛÿŒÑÿÄÿô3ë_•·ÿ­­ôo£›É}È9«˜¿ðŒOÿC>µù[ñš?áŸþ†}kò¶ÿã5µ¾ôsy/¹/õsþ‰ÿègÖ¿+oþ3Gü#ÿÐÏ­~Vßüf¶·Ñ¾Žo%÷ åþ®bÿÂ1?ý ú×åmÿÆh>œÿÌÏ­ä·ÿ§øŠÎÿPÓãŠÂ\2ÊX~Ó%·ž˜#g/«eAÎͧ†5ÆÿÂ_«YÄÖº.”òÁ¦[¼×¦êèOó çÔÜO:2 ky1!|¤‹·i9¼—܃—ú¹×Â/7ý ßþKÿñš?á›þ†oÿ%ÿøÍWð„úŒÖz„··‰q Ô¯RÝ|¶F«u2᜹ 0PvŽk£ßG7’ûù«³Î~%éÒè_µ«Óâ=^Säy"9 _Ì!0q?ÅØŠå|ð/Ú߃t­ST¹ÔÒòî3¬3"  Êà'î‘Þ»_‹>Ö|[àôÒôU…¥k”’Q,›E À÷Ý·ò®bqßi°wÄú¬úŒq*¡‰Ç“ª°'p0Wè(æ &ðoAð½ûÞèú¾µmpñ™Ä°¶PHÁŒ÷QùWGÿ¼ßô4kù/ÿÆk̾ëÚ÷„þ!ÍðÿÄÏ ©k+‰ $awŒÎÒ ðIÁíèæò_rSþy¿èhÖÿò_ÿŒÑÿ¼ßô4kù/ÿÆko}èæò_r_êìÄÿ„^oú5¿ü—ÿã4Â/7ý ßþKÿñšÛßFú9¼—܃—ú»1?á›þ†oÿ%ÿøÍð‹ÍÿCF·ÿ’ÿüf¶÷ѾŽo%÷ åþ®ÌOøEæÿ¡£[ÿÉþ3U§µºÑµ]1?µî™àtºXò„DòRˆ¿óÌŒõ®“}ak­_ÃßõüÿúK= §ue÷ «4QEsš…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@0ÿ¯O÷[ùŠ}0ÿ¯O÷[ùŠðŸˆ¿ò>j_öËÿE%|Eÿ‘óRÿ¶_ú)(¯Ô²ÿ÷:_áä•Ä~¯ó9ïÿÈçkÿ_°ÿèÕ¯¥Ïúôÿu¿˜¯š< ÿ#¯ý~Ãÿ£V¾—?ëÓýÖþb¾Cˆÿ‹OÑþgµû_/È}bjM=ˆ,µ1iqqn–Ó[ÉöxšFRíµA$~ìô¨­º+ç£.WsºJêÆWü$ðÿÐ;XÿÁUÏÿ£þxè¬àªçÿÖ­|ñíøÿÀ¥ßúû̯øIáÿ v±ÿ‚«Ÿþ7Gü$ðÿÐ;XÿÁUÏÿ­Z(çoÇþZ]ÿ¯¼Êÿ„žúkø*¹ÿãtÂOýµü\ÿñºÕ¢Žxöüà¥ßúû̯øIáÿ v±ÿ‚«Ÿþ7Gü$ðÿÐ;XÿÁUÏÿ­Z(çoÇþZ]ÿ¯¼Êÿ„žúkø*¹ÿãtÂOýµü\ÿñºÕ¢Žxöüà¥ßúû̯øIáÿ v±ÿ‚«Ÿþ7Gü$ðÿÐ;XÿÁUÏÿ­Z(çoÇþZ]ÿ¯¼çµKHÕíÖßSðýõì*ûÖ;y6È Á<ûšd—zßaó|5vÿ`ÇØ÷hSŸ³còÿuòcjôÇAé]%sÇ·ãÿ-.ÿ×ÞaE¬éÐ]Ü]âj1ÜÜíóæMà<»FsòØ ô«ð“Ãÿ@ícÿW?ünµh£ž=¿øiwþ¾óÎ~!üCÖ¼=¤Ûßèš\Æ!.Û§¾Ó®"œm!˜(9稭ˉz£¦ BÝîÚØ.]ÖÎfXÎ9 Áú×Ksmå´–×0Ç4©WŽE ¬PAë\ÇÁOtf[;˜Tœ˜£¸mŸ®OëBœz ³8Ûj/|sOX[^Üi:d!<ë{Ie,v0 ¤Œ³dtZöøIáÿ v±ÿ‚«Ÿþ7Rhº—áÝ=l4›8ím”çjucêIäŸsZ4sÇ·õ÷™•ÿ j_öËÿE%|Eÿ‘óRÿ¶_ú)(¯Ô²ÿ÷:_áä•Ä~¯ó9ïÿÈçkÿ_°ÿèÕ¯¥Ïúôÿu¿˜¯š< ÿ#¯ý~Ãÿ£V¾—?ëÓýÖþb¾Cˆÿ‹OÑþgµû_/È}Q_8zEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPL?ëÓýÖþbŸL?ëÓýÖþb€<'â/üš—ý²ÿÑIEä|Ô¿í—þŠJ+õ,¿ýΗøcù#åqÆŸ«üÎ{Àßò9Úÿ×ì?ú5késþ½?Ýoæ+æÈçkÿ_°ÿèÕ¯¥Ïúôÿu¿˜¯â?âÓôýOkö¾_ú(¢¾pôŠ( Š( Š( Š( Š( ™$É–s€?ýuäæÚÕåÈÀõ'Ö¹{ÍeØ‚„•'wÞÇ×§ù5µ*Nz¸L«ëÐêa»†bU[ [ƒÇµ>Y¢„,©'»“é^S®x€Ù"Éæåå!±ƒíÜtçŠÌÕ|m4Þ!.å_Ù-ä ·…2C¶z’߇ZœDU-NêyB«YSŒº\ö8/àœáI'°3VkÎíu¹Õ²2ÉÐàýkªÑµOµÍäo ˆ÷uÉàýkÍHÇ–JŠsŽÈÚ¢Š*Ï((¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)‡ýzºßÌSé‡ýzºßÌP„üEÿ‘óRÿ¶_ú)(£â/üš—ý²ÿÑIE~¥—ÿ¹Òÿ $|®#øÓõ™ÏxþG;_úý‡ÿF­}.×§û­üÅ|Ñàoùíëöýµô¹ÿ^Ÿî·óòGüZ~Ÿ©í`~×ËòEW΀UYµH%h¥—k¯Q´ŸéV«ûH¸º¼’dx‚¶0œôÒ®š‹~ó&M¥¡sû^Çþ{ÿãþkØÿÏüq¿Â²¿°n¿ç¤?™ÿ ?°n¿ç¤?™ÿ ÛÙÑþc>iö5µìç¿þ8ßáGö½ü÷ÿÇü++ûëþzCùŸð£ûëþzCùŸð£ÙÑþ`æŸcWû^Çþ{ÿãþkØÿÏüq¿Â²¿°n¿ç¤?™ÿ ?°n¿ç¤?™ÿ =æiö5µìç¿þ8ßáGö½ü÷ÿÇü++ûëþzCùŸð£ûëþzCùŸð£ÙÑþ`æŸbõåæ™}i%´Ó¶É U`GpGµãš¨ñ5é·‚Ö{I ,+”lt9ìO¾:×§ÝéSÙÚÉpåP}ØòXöàb¹ûÝN%GŠ%¹gÎ2œúOƵ§/…žž_õ¹?ݯvúù~'ŸAá/뺸‡Sa· fvö–8ü9çÖµ¼à„Ðj^ÜU!Hä€ÊÙù@UÚ_ÑBŒg íÀ=߇´«»Í5® ‹óÊÜ:2Ž=9{þy­I<9<Ñ´r4 ­Ôn?áSR4ä­&gWVŽ%¸kfxlVþ,µòØÝ±“iVˆoÀ'øˆ'o#¾:}kÕük.“g%Öµt~Û( °ä¿”¹ÉÉ“^ƒžH®_CÕ¥µm·q^H¸?2Û’½sGùþUØéDjò´váÔª–̱²Ž1ßâ¸0ð¢õ“³=üî¦>•¯O¾—:Ÿí{ùïÿŽ7øQý¯cÿ=ÿñÆÿ ÊþÁºÿžþgü(þÁºÿžþgü+³ÙÑþcäy§ØÕþ×±ÿžÿøã…Úö?óßÿoð¬¯ì¯ùéæÂì¯ùéæÂgGùƒš}_í{ùïÿŽ7øQý¯cÿ=ÿñÆÿ ÊþÁºÿžþgü(þÁºÿžþgü(öt˜9§ØÕþ×±ÿžÿøã…Úö?óßÿoð¬¯ì¯ùéæÂì¯ùéæÂgGùƒš}_í{ùïÿŽ7øQý¯cÿ=ÿñÆÿ ÊþÁºÿžþgü(þÁºÿžþgü(öt˜9§ØÕþ×±ÿžÿøã…Úö?óßÿoð¬¯ì¯ùéæÂì¯ùéæÂgGùƒš}_í{ùïÿŽ7øQý¯cÿ=ÿñÆÿ ÊþÁºÿžþgü(þÁºÿžþgü(öt˜9§ØÕþ×±ÿžÿøã…Úö?óßÿoð¬¯ì¯ùéæÂì¯ùéæÂgGùƒš}_í{ùïÿŽ7øQý¯cÿ=ÿñÆÿ ÊþÁºÿžþgü(þÁºÿžþgü(öt˜9§ØÕþ×±ÿžÿøã…Úö?óßÿoð¬¯ì¯ùéæÂì¯ùéæÂgGùƒš}_í{ùïÿŽ7øQý¯cÿ=ÿñÆÿ ÊþÁºÿžþgü(þÁºÿžþgü(öt˜9§ØÕþ×±ÿžÿøã…Úö?óßÿoð¬¯ì¯ùéæÂì¯ùéæÂgGùƒš}_í{ùïÿŽ7øQý¯cÿ=ÿñÆÿ ÊþÁºÿžþgü(þÁºÿžþgü(öt˜9§ØÕþ×±ÿžÿøã…Úö?óßÿoð¬¯ì¯ùéæÂì¯ùéæÂgGùƒš}_í{ùïÿŽ7øQý¯cÿ=ÿñÆÿ ÊþÁºÿžþgü(þÁºÿžþgü(öt˜9§ØÕþ×±ÿžÿøã…Úö?óßÿoð¬¯ì¯ùéæÂì¯ùéæÂgGùƒš}_í{ùïÿŽ7øQý¯cÿ=ÿñÆÿ ÊþÁºÿžþgü(þÁºÿžþgü(öt˜9§ØÕþ×±ÿžÿøã…Úö?óßÿoð¬¯ì¯ùéæÂì¯ùéæÂgGùƒš}_í{ùïÿŽ7øQý¯cÿ=ÿñÆÿ ÊþÁºÿžþgü(þÁºÿžþgü(öt˜9§ØÕþ×±ÿžÿøã…*j–rH¨³e˜€Ó×ò¬Ÿì¯ù鿤·Ñnb¹ŠFxˆG pOcô¡Â•·4ûÔQEs…0ÿ¯O÷[ùŠ}0ÿ¯O÷[ùŠðŸˆ¿ò>j_öËÿE%|Eÿ‘óRÿ¶_ú)(¯Ô²ÿ÷:_áä•Ä~¯ó9ïÈçkÿ_°ÿèÕ¯¥Ïúôÿu¿˜¯š< ÿ#¯ý~Ãÿ£V¾—?ëÓýÖþb¾Cˆÿ‹OÑþgµû_/È}Q_8zEPEPEPEPEP&‰g‰£|íoJóÉ£x.¥²7#Ücé^\‡Š-VÞö;6¬Ãô…tá§iYž¾Q[–£¦öf§…¥Y4¹Tî¿xœô=N½=³Þ¶ëŸð‰Ý§]“þ”üž½º ƧÆÏ?üyzžIjq§ÄÜ´äcíÿ×®óÂv†-9®HiXíÏ÷Gøœþ•Áé#í‚ÎÖ'S#«—àdûväž•êðB¶öñ™Ù„\œœŠä¢®ù¢Ï«8GÙ.­ýÄ”QEt,QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÃþ½?Ýoæ)ôÃþ½?Ýoæ(Â~"ÿÈù©Û/ý”QñþGÍKþÙ褢¿RËÿÜé†?’>Wüiú¿Ìç¼ ÿ#¯ý~Ãÿ£V¾—?ëÓýÖþb¾hð7üŽv¿õûþZú\ÿ¯O÷[ùŠù#þ-?GùžÖí|¿!ôQE|áèQ@Q@Q@Q@Q@dø“M—UЮ-­Âý§¢Üp7ñkQM;;¢¡' )-ÑÎx/M¿ÒôI Ôc1ÎÓ³à¸bF ŸJè袉>gv›œœŸSÍüágJÖe¾ÕàªE²%2«’Oû¤ñŒõÇZôŠ(¨„U‘ÓÆÔÆVuªïäQEQÈQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÃþ½?Ýoæ)ôÃþ½?Ýoæ(Â~"ÿÈù©Û/ý”QñþGÍKþÙ褢¿RËÿÜé†?’>Wüiú¿Ìç¼ ÿ#¯ý~Ãÿ£V¾—?ëÓýÖþb¾hð7üŽv¿õûþZú\ÿ¯O÷[ùŠù#þ-?GùžÖí|¿!ôQE|áèQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@OV¾f‘y~ÊYm¡iJŽáF¥C•âg]õ6#&?ì÷}¾Û¼áŸ®\`Ú¹.VÐÒ¢³ÿ±üGÿAí7ÿoÿÇèþÇñý´ßü¿ÿ§ìüÅÍähQYÿØþ#ÿ ö›ÿ‚·ÿãôÄŸôÓ‡ýÂÛÿÑìüÛÈТ³¿±¼IÿCÿ‚¶ÿãÔcx“þ† ;ÿmÿǨö~aÍähÑYߨÞ$ÿ¡ƒNÿÁ[ñꫩůèºeÎ¥>©aw ¬fiaK‰™e°Þkpjj“{0s¶èÛ¢ŒÁëYw×ÒêÖº^Ÿ$0Í4RNÓL…Õ ƒò‚2rëÜw¬ã'dSvW5(¬ÿìÿÐ{MÿÁ[ÿñú?±üGÿAí7ÿoÿÇêýŸ™<ÞF…Ÿýâ?úi¿ø+þ?Gö?ˆÿè=¦ÿà­ÿøýÏÌ9¼ +?ûÄŸôÓ¿ðVßü~“ûÄŸô0ißø+oþ=G³óo#FŠÎþÆñ'ý wþ ÛÿQýâOú4ïü·ÿ£Ùù‡7‘£Ebjqkú.™s©OªX]ÃkšXRÅ¢fEl7šÀÚ¶ðG­)AÇQ©\(¬-wT½µ½µ±ÓÕ~ÑxŽÃR´Ö|'k¾£o.v@«nŒ>o›æ™ÿº02$þ ²Ò÷6¶±í”W2°xÔÄÞûrUlPóópÚÙ÷Úôù¶½­üd»±, Œã Î7tÍÏ}£þû^Ÿ6ÓØ¾è\þLèè®q­üd»±, Œã ócwý<÷Ú?ïµéóm“LÔ5E×KÔÌnþSȬ¾ã Wüiú¿Ìç¼ ÿ#¯ý~Ãÿ£V¾—?ëÓýÖþb¾hð7üŽv¿õûþZú\ÿ¯O÷[ùŠù#þ-?GùžÖí|¿!ôQE|áèQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@¾/ÿ‘7Zÿ¯¿ô]>úç|Mo-ß…µ[xÉ4¶’¢"Œ–b¤)ƒÆÞ Ö,£né$êŒ=ˆ' ÖÐMÇC6Ò–§I¾õÎÂká¿úiÿøŸãGü&¾ÿ æŸÿIþ5\²ì.h÷9ë­kÄZ\an®ï—X–[a­À¶Sfêå0¼hÒ¬cÍ Ÿ>ÙÁ`q¼þ*»†íÖm6mmuocy"]éq0‹hL`<`ÏX²½òðdGuàTIUõxn ‰³}Ö®ó¼cpoÝ»ÈZ3¹U²„¢žªjq\ZÕ¤aÃêŒÉ# D/¶IÕø-ò©ÏÊ0r˰sG¹§áÏ]ëÙßnÓ`³þÓ°þдò.Œÿ»^á&cM­ûäÆ7ór03Óo¯>ðÍ׃ü7§ÚC¿kssª[‰õ'Ûäa±PJ®ʽvŒoÂká¿úiÿøŸãG,»4{úÄñ‹gÁzßýxOÿ¢Ú«ÿÂká¿úiÿøŸãY¾!ñ>ªx{QÓì5k»»«i †&YÝ”¨OSUË™h)Ir½N©¾ñúÖNqã›ûÝèÛz×q‡aï\þ©{•âk BñÄ6‚ÎxgáÙâeôÝ}+ßù?‡îâ­Vâ×ÄMšêz¥´ö·RÈtËu#º<r<©\HüàrG=+2ÇÅzÆŸm¨µõ²\jï{{ó°‡ý Ù¥òÄ1ÌÛGôÛ—å²FígñG…$Ô!¾mcO70Å$1¿Úׄr…†7c“~^æ¨]j¼žißVµŽâi|מßTh$,Qèá‚•Ž<¨;IE$df´å—by£ÜгñÄ7âÙ`²Mzög ’ÒÛÏ™æ’U*±Üü¹Éò8?:ç?ĚέŠ/lôëÝDM›öVvÖBXg¸gœmžO-ŒhLqŒ—ŒcqÈÁ ±Õ¼'§êÓA®éâÚÊÁll­þÒ¿¸L‚ÿ1l¶àŽs/ƒó¾ž(ð¤z„×ˬiâæh£†GûZòˆ\¨ÆìpdÏØQË.ÁÍâÉã9¡v´§—O{‹«[sm)’æY YK¯“´‘ R“òd Çn&¡ã}Rhì¾Åö$»–UC ½ç™"êÎ6ŽmðŽLNÊFÜ $[mCÀæî[‘«Z¬’o8MQ•#g;ÆöÇ!ÜÙt¾f9ùŽc>µ'}®¾tš‘yNæ‹ –. 1mrw/–»HÀ£–]ƒš=Í|QªI¬]é6öM©$¬LsÞì‚4H-™ÂºÂXü× €Êsó¯ QØxîmD èt´]ÜZ[ùÏtEÆë˜àd>PM¸áýç@Äg€i½×\ý¯ Jή"ÕÝ&cå¤|ʲ ¬Qäg P’3S¦©àh­ä·ŠÿKŽ.!¹1Çvª¢HDb2l¢ø/NNNYvh÷6übÙð^·ÿ^ÿè¶­ûÇë\¯ˆ|O£êžÔtû FÚîîêÚH!† –Gwe*“Ô×VãÃÞ¦¢j*þ âÓ“±Éëã>2ІÐß»c‚3ÒâØÿu½=?ê;mõÀxÊàiÚÞ‘ªN­ö[upïÞdNHÀ$#c8äuDçâ‡Fq+œg¤‘s×ý¿aÿ}|mS8¸+ÿò9ãJïú²-ø«U¸µñ“fºž©cm=­Ô²2Ä]Hî\*B?8‘ÏJåõjö¾ ñJj£jÓ–‚I[§[´¦0‹'Ȳ?r/ËŒŒêÉñÂͨE|ÅÚæ¤†7ÇÂ9†7ã“}}GO›:ψ¼«Ûߤ‚tšïy’hnÄnÅ£‘•”¥b‹(~S…$dÕë+û‡í!Ýcàuïh¶þ°ÕäÓ4ønãŽDµb“\¼ÅÙŽî€$QJØ'˜ä°Æ¯‰bñOÂmŽ‘â]JëJXíÞäHÊ̾kJîrß6Þ2*/„*Òü-q¨Zk37Ú!.¶Š»¨|y¸bÀ6ã#ž›F8-ZŸ¼q x‹ÃÖúm‚µ8Ù eù#ÉÜ2¬x%Pí<”õ^#ÙÎ×¶…s.çiiã;»MJçìÒϪ%̱ Qup±#oMKmŒíæåŸär[å9{W›QÝ[%½å•ÇÙî)L±î1¤€«•RFÙªŽr9äÑ_x9|9cdÓKìÛ,×1\Ïå}Áq(ÚXY È#ÕÔXxûÂzM»ÃhÓÎ]ÞK•–I[eä,Ç  < £€0/êõ¿•ýÄûHwG¢o®98ø•?ÊëIÛ8Æx´û£==[§^ÂñGã8•Î3ÒH¹ëþß°ÿ¾‡¾+øQ‡^ñµÞ©c—µ[Yœ`€I€($q“屯IÀÇ@Õ*Œœ¢Ò±.q“I>§iL?ëÓýÖþbŸL?ëÓýÖþb¸NƒÂ~"ÿÈù©Û/ý”QñþGÍKþÙ褢¿RËÿÜé†?’>Wüiú¿Ìç¼ ÿ#¯ý~Ãÿ£V¾—?ëÓýÖþb¾hð/üŽv¿õûþZúZF ";}ÜO¦q_!Äŧèÿ3ÚÀý¯—äIE3΋þz'ýô(ó¢ÿž‰ÿ} ùÃÐE3΋þz'ýô(ó¢ÿž‰ÿ} }Ï:/ùèŸ÷У΋þz'ýô(ôS<è¿ç¢ßB:/ùèŸ÷РÑLó¢ÿž‰ÿ} <è¿ç¢ßB€E3΋þz'ýô(ó¢ÿž‰ÿ} }Ï:/ùèŸ÷У΋þz'ýô(ôS<è¿ç¢ßB:/ùèŸ÷РÑLó¢ÿž‰ÿ} <è¿ç¢ßB€E3΋þz'ýô(ó¢ÿž‰ÿ} }Ï:/ùèŸ÷У΋þz'ýô(ôS<è¿ç¢ßB:/ùèŸ÷РÑLó¢ÿž‰ÿ} <è¿ç¢ßB€E3΋þz'ýô(ó¢ÿž‰ÿ} };Ì“ûíùÔ^t_óÑ?ï¡GüôOûèP"o6Oï·çG›'÷Ûó¨|è¿ç¢ßB:/ùèŸ÷ТàMæÉýöüèódÿžùÔ>t_óÑ?ï¡GüôOûèQp&ódÿžùÑæÉÿ=ó¨|è¿ç¢ßB:/ùèŸ÷ТàMæÉÿ=ó£Í“ûíùÔ>t_óÑ?ï¡GüôOûèQpJ¯BGÒ£ó¢ÿž‰ÿ} <è¿ç¢ßB“y²}¿:<Ù?¾ßCçEÿ=þúyÑÏDÿ¾…7›'÷Ûó£Í“ûíùÔ>t_óÑ?ï¡GüôOûèQp&ódÿžùÑæÉÿ=ó¨|è¿ç¢ßB:/ùèŸ÷ТàMæÉÿ=ó£Í“þz7çPùÑÏDÿ¾…t_óÑ?ï¡EÀ›Í“ûíùÓ)žt_óÑ?ï¡GüôOûèPŠô$})ÞlŸßoΡó¢ÿž‰ÿ} <è¿ç¢ßB€&ódþû~ty²}¿:‡Î‹þz'ýô(ó¢ÿž‰ÿ} .9âøwÆ,úµŽë¥EÌNRLz:®qUü3ðÓýºu‹5âçeÄòdÿw°úšêüè¿ç¢ßB:/ùèŸ÷ЧvÞlŸóÑ¿:<Ù?ç£~uüôOûèQçEÿ=þú®ÞlŸóÑ¿:BîØsQyÑÏDÿ¾…t_óÑ?ï¡@¦õéþë1GüôOûèSU„“¼ª©Ž™8  ø‹ÿ#æ¥ÿl¿ôRQGÄ_ù5/ûeÿ¢’ŠýK/ÿs¥þþHùlGñ§êÿ3žð7üŽv¿õûþZúj¾eð7üŽv¿õûþZúj¾Cˆÿ‹OÑþgµû_/È(¢ŠùÃÐ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¬ýfö[ $ ­4“GaŽù"çÛ,3M&Ý›²¹¡Eg#Ä„s®é úf9ÇãçQýâ?úi¿ø+þ?WìüÉæò4(¬ÿìÿÐ{MÿÁ[ÿñú?±üGÿAí7ÿoÿÇèö~aÍähQYÿØÞ$ÿ þÿ‚¶ÿãôŸØÞ$ÿ¡ƒNÿÁ[ñê=Ÿ˜sy4Vwö7‰?è`Ó¿ðVßüzìoÐÁ§à­¿øõÏÌ9¼Ž ŽÞ·žH^ StlPâÆAÇ÷éŸð¾ü!ÿ<5_ûðŸü]u·šEÞ‘ä\Þ"ö ."‚ENò\ `K¶~fé^UãûÈ|]âé|7¥ÛÇ‘£F÷ZœÐ"©rƒ,¹·ÝíyÅ>MC˜öO ø‚ÏÅ:¾±`³-´å‚ ”+|¬Tä{ƒZµ§xs\°Ómímµ-*Σ–é§;ˆÀí»Îúàf¬ÿcøþƒÚoþ ßÿÑìüßÈТ³ÿ±üGÿAí7ÿoÿÇèþÇñý´ßü¿ÿ¥ìüÛÈТ³ÎâOúéÃþámÿÇé?±¼IÿCÿ‚¶ÿãÔ{?0æò4h¬ïìoÐÁ§à­¿øõØÞ$ÿ¡ƒNÿÁ[ñê=Ÿ˜sy4V&§¿¢é—:”ú¥…Ü6±™¥…,Z&dQ–Ãy¬À=«eÉHØ÷ÔÊ:Jú¢±tØuýcL¶Ô¡Ôì-!ºfбiYQ†W,%^pGjµýâ?úi¿ø+þ?WìšÑ±sßdhQYÿØþ#ÿ ö›ÿ‚·ÿãôcøþƒÚoþ ßÿÒö~aÍähQYçGñÿ˜þœ?îßü~“ûÄŸô0ißø+oþ=G³óo#FŠÎþÆñ'ý wþ ÛÿQýâOú4ïü·ÿ£Ùù‡7‘£EfI¥x–(™×ZÓeetæMÞۼ㮠YÓ/£¥Yß*•[˜`§¨ ¡€ýiJ +Jú!ñþGÍKþÙ褢ˆ¿ò>j_öËÿE%ú~_þçKü1ü‘òøãOÕþg=à_ùíëöýµôÕ|Ëà_ùíëöýµôÕ|‡ÿŸ£üÏoö¾_QEó‡xQEQEQEQEQEQEQEQEQEQEQEQEQEQEV?‰?ãÆÏþÂV_úQlV7‰ƒ &9U– ËiÜ*’B$Èìp='ð«§ñ¯Rgð³¥ßFúç?á5ðçýôñìnPçGü&¾ÿ æŸÿIþ5¯,»ÍçG¾°on/u?O¤Zêé±ÚÚÃtóÛ$o$¦W•BþñYUG”Äü¤’Ë‚¡Hh¿á5ðßý4ÿü Oñª–¹àý[Ê7:ÕªÉBKo©$Pq•ß«m8RW8%T‘0r˰sG¹FÃź¶«âit?9-^K/í+Ø’Equ­læId‹ ìwì!ý}q/ªxÒTû~–‰%¼6Ûc»T LÍM¬6.J•Á4ÿá5ðßý4ÿü Oñ£–]ƒš=Î}ëœÿ„×ÃôÓÿð)?ÆøM|7ÿAÍ?ÿ“ühå—`æs?⦬ú7€/uYDöòÛÉîî³!ʸxxéŸ5½^à{«ZÍ3»rÞXV Ï¿-ÿ¨¾9x¢ÇVðæ›¥éwÖ÷M=æ÷J¯Â©å‡å^™ªéF]éQ—1éÍm (å±Ð¥všO¸;4Ú:½ô›ë›6ðé¶±ewI'TaìA9—þ_ ÿÐsOÿÀ¤ÿ|²ìÑîK{q{©ø‚}"×PŸMŽÖÖ§žÙ#y%2¼ª÷ŠÊª<¦'å$–\ CT¿ñiÑu‹--â{è7Amqx¢C"M#]û!òTñ±Ðáò• [R×<«yFçZµY"ÈImõ#Š2»ãum§ J窒2*KuàY®!žM^ñ`î°ìÌ~Vààg Ùÿ„×ÃôÓÿð)?ƹ­OSÓnÛW†×ÅŠÇTÏÚaž&‘ß1,M—[”ê¨Ê\“<²ì>h÷$ñŽ®®4¯ÛYé·ÐÅ­ü0ßÄ“ƒ°¤€¹o,F«º6 Ë+6J| “·{OñUÝΡ \é°Ceus§ÛMÑ’F’.K¡B©9á˜ä¨Ç$ŒC?îb—íú¦Ÿ<—:\"_²@ZE++ǘV&mÏ–_›çl±ÜI4‹¯éw2]¾¿ksr×W(dÔ Ž#,Žÿ$FBˆÁ\®å[ûÄQË.ÁÍç ï£}sŸðšøoþƒšþ'øÑÿ ¯†ÿè9§ÿàR²ìÑît2?îÛé\ÿ…¿äPÑ?ìoÿ¢Ö£—ƾò›f±e#c„Žuf>À’jχíå³ðÖ“m:æŠÊ‘`«Ôjfš†¿ÖãM9hx¿Ä_ù5/ûeÿ¢’Š>"ÿÈù©Û/ý”Wé™û/ðÇòGÌâ??WùœÇƒn¡µñD7S¾Èc¹ŽGlg I<{^ïÿ Ÿô÷â_þ&¾o×ãH5fHQcO*µLjOOsY››ûÇ󯄣Œ*TºÑl×]{¬%:-¨µ÷Á>£ÿ…á1ÿ1aÿ~%ÿâhÿ…á?ú ü—ÿ‰¯—77÷çFæþñüë—û Þ_zÿäM>³WËîæ}Eÿ Âôø/ÿGü, ÿÐXà<¿üM|»¹¿¼:77÷çGö¼¾õÿȇÖjù}ÏüϨ¿ácøOþ‚Ãÿåÿâhÿ…á?ú ü—ÿ‰¯—w7÷çFæþñüèþÄÂw—Þ¿ùúÍ_/¹ÿ™õü, ÿÐXà<¿üMð±ü'ÿAaÿ€òÿñ5òîæþñüèÜÞ§ó£û Þ_zÿäCë5|¾çþgÔ_ð±ü'ÿAaÿ€òÿñ4ÂÇðŸý‡þËÿÄ×Ë»©üèÜ}OçGö&¼¾õÿȇÖjù}ÏüϨ¿ácøOþ‚Ãÿåÿâhÿ…á?ú ü—ÿ‰¯—w7©üèÜßÞ?ؘNòû×ÿ"Y«å÷?ó>¢ÿ…á?ú ü—ÿ‰£þ?„ÿè,?ð_þ&¾]Ü}OçFæõ?ØxNòû×ÿ"Y«å÷?ó>¢ÿ…á?ú ü—ÿ‰£þ?„ÿè,?ð_þ&¾]ÜßÞ?›Ôþtaá;Ëï_üˆ}f¯—ÜÿÌú‹þ?„ÿè,?ð_þ&—þ?„ÿè,?ð_þ&¾\ÜÞ§ó£sxþtaá;Ëï_üˆ}f¯—ÜÿÌú‹þ?„ÿè,?ð_þ&øXþÿ °ÿÀyøšùwsxþtnoïÎìL'y}ëÿ‘¬ÕòûŸùŸQÂÇðŸý‡þËÿÄÑÿ Âôø/ÿ_.î>§ó£szŸÎì<'y}ëÿ‘¬ÕòûŸùŸQÿÂÇðŸý‡þËÿÄÒÂÇðŸý‡þËÿÄ×Ë»›ûÇó£sxþtaá;Ëï_üˆ}f¯—ÜÿÌú‹þ?„ÿè,?ð_þ&—þ?„ÿè,?ð_þ&¾\ÜßÞ?›ûÇó£û Þ_zÿäCë5|¾çþgÔ_ð±ü'ÿAaÿ€òÿñ4ÂÇðŸý‡þËÿÄ×Ë»›Ôþtn>§ó£û Þ_zÿäCë5|¾çþgÔ_ð±ü'ÿAaÿ€òÿñ4ÂÇðŸý‡þËÿÄ×Ë»©üèÜÞ§ó£û Þ_zÿäCë5|¾çþgÔ_ð±ü'ÿAaÿ€òÿñ4£âG„ÁÈÕÇýø—ÿ‰¯—77÷çFæõ?ؘNòû×ÿ"Y«å÷?ó>¥ÿ…™áoú ûó/ÿGü,Ï Ðhÿß™øšùkqõ?›ûÇó§ý‰„ï/½ò!õо_sÿ3ê_øYžÿ Ñÿ¿2ÿñ4ÂÌð·ýýù—ÿ‰¯–·7÷çFæþñüèþÄÂw—Þ¿ùúÍ_/¹ÿ™õ/ü,Ï ÿÐhÿß™øš?áfx_þƒGþüËÿÄ×Ë[›ûÇó£sxþtba;Ëï_üˆ}f¯—ÜÿÌú—þg…ÿè4ïÌ¿üMð³³WËîæ}E'Ä K3VŽ›­å8ÿÇiádxOþ‚ãþüKÿÄ×Ë››ûÇó£sxþtba;Ëï_üˆ}f¯—ÜÿÌú—þg…¿è4ïÌ¿üMð³<-ÿA£ÿ~eÿâkå­Íýãùѹ¿¼:?±0å÷¯þD>³WËîæ}Kÿ 3Âßô?÷æ_þ&øYžÿ Ñÿ¿2ÿñ5òÖæþñüèÜßÞ?ؘNòû×ÿ"Y«å÷?ó>¥ÿ…™áú ûó/ÿGü,Ï ÿÐhÿß™øšùksxþtnoïÎìL'y}ëÿ‘¬ÕòûŸùŸRÿÂÌð¿ýýù—ÿ‰£þg…ÿè4ïÌ¿üM|µ¹¿¼:77÷çGö&¼¾õÿȇÖjù}ÏüÏ©áfx[þƒGþüËÿÄÓádxOþ‚ãþüKÿÄ×Ë››ûÇó£sxþt¿±0å÷¯þD>³WËîæ}J>%øXtÖOýù—ÿ‰£þg…¿è4ïÌ¿üM|µ¹½OçFãê:ؘNòû×ÿ"X«å÷?ó>¥ÿ…™áoú ûó/ÿGü,Ï Ðhÿß™øšùksxþtnoïÎìL'y}ëÿ‘¬ÕòûŸùŸRÿÂÌð·ýýù—ÿ‰£þg…ÿè4ïÌ¿üM|µ¹¿¼:77÷çGö&¼¾õÿȇÖjù}ÏüÏ©áfx_þƒGþüËÿÄÑÿ 3Âÿô?÷æ_þ&¾ZÜßÞ?›ûÇó£û Þ_zÿäCë5|¾çþgÔ¿ð³<-ÿA£ÿ~eÿâi§âG„ÉÉÕÁ?õÂ_þ&¾\ÜßÞ?›ûÇó£û Þ_zÿäCë5|¾çþg£x×V±Õ|]}{e8–ÞO/cí+œF ð@=A¢¼çsxþtW½Fº£N4â´ŠKî8'‡ç““{ŸÿÙbitpim-1.0.7+dfsg1/help/macros.db0000644001616600161660000000010007717413055014672 0ustar amuamu macrofile?ÿ€ macro-countENDENDbitpim-1.0.7+dfsg1/help/phone-lglx570-notes.htd0000644001616600161660000000261711050126613017240 0ustar amuamu#include "pagestart.h"

Firmware Version

  • The firmware version of the phone used for development & test is LX570V05.

Phonebook

  • BitPim supports all phonebook features of this phone except for contact ringtone and contact wallpaper.

  • For each contact, BitPim does not set its ringtone or wallpaper. The contact ringtone will always be set to Default.

Ringtones

  • BitPim can retrieve Voice Memo and My Melodies files from the phone.

  • BitPim can add new My Melodies files to the phone:

    • My Melodies file format can be either MIDI or MP3.

    • The file name extension must be ".mid"

  • BitPim does not delete My Melodies files on the phone. They must be deleted manually from the phone.

Pictures/Wallpapers

  • BitPim can retrieve My Albums pictures stored on the phone.

  • BitPim does not retrieve pictures stored on the microSD card.

SMS

  • BitPim can retrieve SMS Inbox, Outbox, and Draft messages from the phone.

  • BitPim does not save/restore SMS messages to the phone.

  • BitPim can retrive and save SMS Preset Messages from/to the phone. These Preset Messages are managed in BitPim as Canned Messages.

#include "pageend.h"bitpim-1.0.7+dfsg1/help/toolbar-detect.png0000644001616600161660000006334210410665462016531 0ustar amuamu‰PNG  IHDR¬`A•F×sRGB®ÎégAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<tIMEÖ0,Ór£tEXtCommentCreated with The GIMPïd%nf$IDATx^í}xÅõ½0P $Ô@H„š’ZB77Ü{ï½÷Þ{·å¦fI–Õ{ï½w[î6¤'ÿü’ó?gŸÇ~<$ûI–l«ï»ß®öÍîÌÎÎÎÙ{ï¹w®hÝm#þêqƒÇŸ¯¸…r“®¹ÆãÊ«[y\{Ý­®jåqÕ•Wx\Iá.·Ö¶•ö¯ðð¸‚Â]k+18·{îX}ë)g²{ÀôÀ•W¶ò¸îÚë<¾uã×_ƒÇUW]éñßÿþÇã_ÿú§Çßÿöüãÿþ÷¿=þ {pý/Žç9ã±ýv›/C 7]†-Ç˽¼ð½Nɸ¡S%®êy × ü;nùo|gìÿáΉÿÁ}SÿƒûgüÌþ/~<ï¿øÉüÿâ§ þ‹Ÿ/ü/ž\ô_<µÄI󘫰ÌÏ¿ àÿ¶Ø}`oêxr18OØb÷ûcÀ£×ˆ…x¯ÿFü¬ë|§c6®éTƒ+{œÄ5ýþŒ†´Fü·Žþn÷ÿpפãÞ©ÿ‡ïOxýÎü¢<<ë?²sò0÷u쬨ÌyˆçÙb÷=¾ácÀÌNsƒ™#ìí¹ùÒî‹/ö…Ç;½7à¹.>¸·]®k[„VkqE×£¸²çI\Ýç3\ÛÿO¸nÐ_pÃпáÆÿÀÍ£þ‰[`ßó/Ü:öÿá6 Áì;gDû·ý—%·ª ËÞ&uNnÉã¶Ø}`oôpžìý/ΑvÔßO·Ý‹û[‡âÆ÷ÓpEëbx´­‚‡@«sëZõ8ŽV½NáʾŸá*‚×ÕþŒ«ýÕ’kÿòw\CM̱/áqý62à/¸¦?¥÷ûr+éCém‹ÝöøfŽ?óý·Å;_ ÆÍ¯Åàª73àñN<>,…ÇÇðh_Mà:·áÑíÇ}þtF¸Ï㖨̧””î§ |”.”ΧpE'ÉI[ì>°ÇÀ7~ œà°Åî÷ǀǵυáª_ÅâŠWRáñÇ\\ñ^>®ü0æÁlÜøI6né’‹[»â»ÝJpW÷rÜÛ£÷ô¬Ä=ËñížE¸¡G®íž‡kºçâÚ9¸¶g>®éY‚+»Õ¤vŸì:R:PÚ…G»#Ôâl±ûÀöàüÐÖ»1<~_DÃã¥x¼‘ƒ+ßÍÄ·>ŒÇÝíðho<ÕÃ/öØWº†àíÎø sÞï×IÒx†¿?Òi;îí¼ww[{?]‡»znÇm=q]—L\ùI%AŠ“RlÔÇuðøˆÒÆ»ì1ð͇øþÛb÷AǀǣAðøy$<~• ר!½“„;ÛøáéÎóð^ŸqèÝ Æ: ;ÎÆÆ6óáùálÿh–·†Ñ톣C»x½sü¦×GxiÀ‡øEßîx¤çTÜÚ)Ww ‰±Ð“““Vgù!·¶Ø}`oà ›áC[ì>hâðxd?<~JÀú%M‚¯åáú÷pûx­Ï0 Ö+‡}„ÀÝÒº; _íŒÒßvDÉ+‘ñz;þá}¬~ÿLéú"†ýzŽþÞô2žêÞwtØŽkÚe9•¾¨m ²Úöhâde ö°hüe:«ßú tÛ†÷†÷ÁÄqobïð_#»Ãë¨{åUœxò×8þø³8ú“gqèÉPüÜ‹Hùý³iÿ,vùŒù)z~/uí„{ÚmÂ5gàÊö‡qý'‡q[·Ã¸»çÜ×ëM‡Gpg#ø6 ×µ¯ÃÕÔÀ´½¹ÓaK´ßJÚØ™/ð+¹=ÝÖÕq{y m¿ËkÞôI®áùWQƒ;ß5ìI { ØcÀÿãcÀã‘0V+¯ã¦6©x´×N´Û“ǾßþÏ!ÿ_áгϢú£èîï#ïÎûPx߃(yðÇ(òi”¾ù2»¿Š}~‹i½þ€w:ôÆoÇueázÐ}}Žâ™ÑÇð»‰Gðû‰uøíøCxiÜaübäQÜß÷îèî²Ç†Åcƒ¹ÿiÁ¬Î£›xþ­$oü Ï<3ê(^™t¯M>ŒW&ƯÇÅφµP`& 3׸»¬Ý™‡cûÌl¿¡=¾cÀ6ÍÀÍ’?¤võ³$ú°rX¥¸ùãtü¨÷N|4º?¦ ý=|;=ì—Š?¼;~€¸[nCè·nBä-· å»w¡ôÁÇpøù—pèí? õã×±úãwѱÍ@<Úfnø8‡Œ£x~ü ôZ}ã6ÁÈÕU´¼ ƒWסϪãxsúqü|øY‚å¸å£t<Ñm'ºöˆÅ]ßDøÛÏ#çégPôÀcHºí>Üpv^s5ö\w5‚oþ6²î{5?{µ/¿‚´×^ÂÚ7^G§?öÁ?؉o}”ƒ»ûÃçœÂôÝ'°tO Æ/ËÅàù˜º© ‹}ŽcÔ¦ãh=«ïÍ8ŒN £óüCx{R5Þ^‡.K£Ûòh;ÿz˜fï>†Þ1c]&®-Çœ]‡±À÷4¬;‰·¦ÅÛ3ŽòG¬k¼4¢õªÆ]ánj`2!Ê yEÛ»dR¤f' îêv ’¶Ù‹ÿûƒÙžìgh¯÷ðx”ÚÕ“4¾T7+qˇxªÃN ì4;Þ{ i¿~ù>Œ;FèMwbçµ7`íÕWcýµ×`ïM·"枇‘óøÓÈ|îüú'˜ú›gñÎkñÀ{[q=ë¾~'ÐfñgXp[j0sMF/+ÂâÝáqË|Ž ïâ*t]P‹ÞK(‹kÐqf®ªÃ|ïX@³áÆm:‚Õ¾‡°Î»cç`À‚bÌØ^‡¡Ÿa¾× |º¤ x½—B¿¥5h=¹¯¯Áï&Æ›3Nàõi'ðå•)ùýÔxiÂqüdè1ÜNàºFlÆ6¶Ø}`{ Øcà+;<~Äø«§²áñr ‡«qkëlü²Í^LyoÂ÷.Ê~þ< ~ðâo»~×ߌ-W_‹Õ×\‹u×ßÏ›nCÐßCä#"è™aÝoÁ ×žÆïþØ ÷½¿×}œ‹ûúŸ$`}~°j1gm&®*Æ:¿CØ{›aÌÊrŒ^[‹)›Qbè²JÌô<‚]´Ýǰг 3¶Ô`W–î(Cïih7©£×†àSXás#WUcäº:LÙZ‡¹ž¼æêJLØxiBœ¹û$¦î’–w“vžÆ„í'1aÇ)ŒÚríÄO‡¥¿Œ±bm(1¸Ù»ì1Ð2c  ß/[ì>hêðxŒ)™~AsàoËáñV-nc–‹—?ôÁì·†#á—o£ê±§Pxï#ˆùöíØwÝ·h¼[o¸;n¹»oû.|¿{;|p¶?yæ¿þ>}ï9¼ôa7ÜûÑ’ò X§ Xƪ Ï°7ì0Öì*Á¢íð 9ŒýñÇ \1|‹à3µ*ÏZŒ\V‚©[bKÐajeµ˜E­lòêb¬ÙSîа– ß¢ ‚¯ç 37W¡ï‚r [Ãói&Üä«v•a‹56p½¿£Ü¶ÐØìÐê–ùÇJj} ^¯R »ƒ¤ °>f *[ì>°Ç@ËøŽÙb÷ASÆ€Çã$[^jãƒé†ˆçß@ÑGþ}÷#éöÛ~ó-¼áføÝ|+î¸ A÷Þýw{p+6°Ç@ËŒ¶|¿Œ|Ì}[ì>hÌðø ³Q<Ë„·¿'£îÝø¥m~ÑÖ ƒßíí/¾Œ¸ÇFæý óÞï#ùö{qóí¹õDÝ{’}ñ~ÝÏÞƒ™ï°º½Š7û ÁÃ=üqc—rÜÇÌím–þKöÆïj ›ÎÓ‹Èô;„-¡'±Ôë0-kà±§‹vVcø‚\‚X%yVS*1|^†--ÅjïZøDÔaÝ®bL]S„¡‹ŠÑuV9^R†çÈ,ì°èy‡WH ¼ý àXˆ•Û 0ay>Ư­Âʽ5–Œ_^€qk«-Ð\¼ç>žX„ïw!`KÃêð'[ì>°Ç@KŽö|Ç$íl±û ‘cÀã .)òÍ¿'ýû½£¸±]!ë°íÚôÂôןÃÎîGä!í¡G|÷ýÔ²nG𷿃¸ï݇¼§Ÿ@Á ?CìKcÇë?ÄÜÎO`Ðà?àÝ‘£ð£A¸©g5¾Ç¥GÚ,ÿ'–ø†5Ô˜†.ÈCg‚Ì’(ÖÀ¼5è7¿ƒV¢ÝÖ0–LêûÂ]µX¶÷ Ư(˜uµXíW‡mûbêò,´›—ûgãç}™—ÚÑ£ƒNàã%ÁBß“gK µxSžWTY×¶q¡ù¿‹vÕ í„<V™‚´¯wú«-vØc ¥ÆÀ'|¿$m±û  cÀã ’-ž£vñ*ƒ»Þ?Ž;ã‘®^x«{/ üäy,hý0v½úŸý¢~ø#’,îBÀ·!ò‡÷"÷·O¢˜AÅ)m_‚W—ç°dÄó1ù´ž: ÁÍ}âžaÿÂ[‹ÿ…{O[´öqË 0pq9&m:H°¨Åú«ÚN*$ý &oªÅäõåè9-ÝæUb ³<ë0jy †­¬ÆœmU˜³¹ ]'¦ãéž9¸³C)né|×v:{©É½µðãM‡X»-Û’)˲Ð{F6z-¨Àä •Öõ]ÿwDø–㊶ÇáÑõ¶Ø}`–]ø~éÌ}[ì>hÌðx‚æÀç¹hãkÌõ÷Á Æ%•à‘Þ¾xsh?ôñLúS,ïõvü"^y ~O=ïŸß‡À—BlÛg‘ÒëDyž#^ÆÒi/aÌìÖh7k ž‰[Æw‡ý/Ìú'ú¬ÿŒ¬½ZŒYNSÞ’ŒX^†‹JñÎØB¼0¸Œ,£Ë¢Cè:§ ™‹×'T£ó’£è¿æz-ªB—ùÕèK¢E×™EøUŸ ÜѾ­˜ŽéŠ.ÁÝþŽï ú^˜ñO+vkøòrŒXmI·)Yxwt.Þ™T‰®A]ßõÿ_õÏÁíªpEÇS\Ãë_¶Ø}`–ÝùžÙb÷AcÇ€ÇO¤a °È’k}7RÓx°o0^5í'vDÿ)ïbÂäX4ºÖöm‡õíßÂê^Åê.o`ý °y\{¬žÜs&}„ñÓ?Bßé}ðÞ´¥øñ¨dÜL3Ý ƒÿßýO<7é4^_…7Fàµáyøýð¼8DàÈõµzÅCNã)¦^zjPåzZ÷¯Ã“cNâÅñÇñˆj<3¤Ï-ÇSýKp×bÜØ‰ù»¬zýŸ%7 ø?|oä?ñäèøÕˆ üjP%O÷ÉÇ{•ÐDY‹§èçÒõ]ÿ¯ïzæºöÖÑ¿¶Ø}`{ \î1àáñ¸|X¬×I8øð®ï\‹{ú$ãéá›ðûq³ðÁ”Iè4súÍZ€SçcÔ˜™6b*™‚þ§£ÿôéøtÊT|2n<ÚŽ™ˆwÇ-ÄËãýðÀ(æ%òg\=è¿øÖàãöÁ#cð~ЯŽy2ïß!|÷Ó£øVS¸®×_ñ­~ÇmýÿŒÛzÀÍÝã¦^Ÿã¶ÅÿŒ;ûÂí½OPŽã¶žô³u;Ž«»ÿ ­zýWôý%Wõû¾5àÿñÁí}Nàf·ÜƬ·ô8Ž[¸ òm}(¼¾ëÿõ]Ï\×Þ:ú×»še ôa?Úb÷AÇ€‡Çc¬géÃz€Õú®âêÀ7u¯ h¥â¡Qx|Xž‡&&á¥IÉxyB"“Î&Pó‰Ã³ãâðÌ„jBQøéˆpfˆÄ‡'âÁÅøÎð¸nÈ?ÑjàѪÿÿ¡UŸ¡UÏ¿¢æÊ®Ÿ£U7NþOÐiÕçßé¥2wˆŽ÷þŽmÏ¿9ʱ~gÙ>¼.'Ó³¢ÿÍ5\Ëú´’˜ë»þ_ßõœ¯mﱯíþ°û£‰cÀ¾&NXöyßì¾#`1Ë,š?8‰+Ú´:ÇõÝêpcÏZ|»7ƒ‰™ˆö&¡½“iŒî.9Ž;¹½}Ø1ú¨Žâ;LN{+ÕÞ:K† :Ž›‡ü ×þ®D@@éÏN¦tE_ªÔ[ì>°ÇÀ7t ôæ}Kzq>°ÅîƒFŽ`=SAZ;Y‚ï’Öý!™rŠòoGð" áŠNŸ¡UjDÝÿŒ+{þW}úW\Õëo¸ª÷ßqU ‰reŸZÒÊI® VuEo µ—+>¥ô¤ô Ï»ì1ðÍÝùþS,ÂE7Éÿ³Åî÷Ç€Ç ™š‰qX¿eàð‹õ3>¼Où@™bÌb~EÛ#¸¢ý1´êx­>9VNàÊÎ')§Ðªóišä32ö$ŸQ:Θ‡}ÂmGJ[ì>°ÇÀ7~ ˜àa{뢶Ž>°ëé2\õÛJ\ÿv%nmS†;Û—à¦Uº§S)îé\†{ºVàÞn•¸·;Sõ¨Æ½ ¾·g ¥–‹'’@aÉ!ÜSŸôäñžu¸‡ *ZÒÝ»ì1ðÍœºSèr°ÅîƒÆŽ+X­~QŠ_¯À}íËñLÿb¼Fêù;ãóñÎn'Zò.³£¿;¹ØIJðîI©%ïÔ'“yÜ’2[ì>°Ç€=ɹÀ»š8^›­}ÓŽói$®u»Ö»jÅ\ëÞt-Õ+ G½Ê™{3“¾ê5uíÀ¹\cÚaÚ%`Q=ºï5ì[‰öõñ ë¬ÑJÔ¶úä|mQ»t?º–žÛ>Wmõ!bž¹¦Ñvœ5igÍÓ˜‚›z¯®“¾&~‰îA"Al£îËô·ÙªM4´mŒ–]ø8KˆÛoµÃù>ÕWêg7õ]Á_}ãŽfþMœhì{¶¶9ÆÀK/ ^Èys&cöÌ X8ª5Ái2×q™&Sý®‰Æh&F ;Ÿ†Rß ¸Ö'@Òu¥Ei’H3PžãÇ µ¶j—Ú1cÚX ¼ÔM0î~«^£k |5 ˆœÁH÷¢ Un´š¦N3i9—kl¨_4ë^uŸêw‰öÖg&P£•hòÔïzj‹žÑ8uŽy¦Ýº?ݧÄ<7MÌ´Ìuu:G}cÄhׯ¬ÿÕ'ÕÒ@:OcÉùú¦ÿu\×6bîAõèÞŒ¦¾p•Ƙétê?eõ…ê‘h_m1cÀ¹Õ^çg¯¾w<óæx¡íkØÀðu,½xza§Nm‰&D½œšð4¡èŤ‰#¬—Ûhaš`µ¯s5±¸ëÛr­O€¥¯miš04›‰YíØ¿§RcF¶¶úß´ñ|&4ׇª²º¶Ñ 5ùhÒRû'TÕ­6™ûÔ¾ê6ujÒW[Ë5¶ŒÉÓh¶º¶Dª®e&F£‘h«ßTfÈ Þg˪œÊ;kRºM´Ò¬œK}lL¾Î ¡ò@=cg Û´Ã\ßLØés£Õê\gQŸJÃ5ÏB"Ú7cÊ‹îCÏLmwÞj¿1f:µY×Pÿ©m‰ö5ÆÌ};·Á|ؘw¹\Súâë<ÉØ÷fƒhs&–&1½ÔzQ5‘ Ú×ÚjòÖ1mõ¿&M€2+¹ÓhWÀÒÄ ‰T ¤™ØÌ„¦zUŸ&jmõ¿&bMZѰT¯êÑDnÌZ]GÇ4q›É[ÀhîÑlU§ñã©êSN÷ ðs׿'s ê(t‰öuߦï& ­&[çû׳Q{TV}¶ùÌÖÜ‹éGc4@f̽‰ê€¨~pF»5(úßÙ‡é®V«‹îÓT§®m>†¤E;)µÅhÕÆTí¼Õ¾úDšSSÆœù@0ãJc®ãZ¿éyŒ1àlÛœûÇhÃî>swÚi—±'þoúp °\¿>æ¡—ÒL&ýút³ö{÷ê‚Q|‰ €4v²výÚÕDjÌR<4‘š W‰&Õk&cJjŒïè|€¥ T»IÕ©{Tc¹¯û6þ.iXjŸîÛ”Óä¦>twU»åÑÄ«su_£åmÇÙŒfÊ©N>ªÓ˜üÌ1W—³f|*c@ÃÜ³Ñ   4ôA¢­îWÚ`c}–fÓïº'Pêk‰î©¾1¥c*«>Ñy*'P5 ¢}™øÜíïóiXú2ÏÚy\›2s3î̘4lcÚðMŸˆìû·ÁØ1à`9›ÊÌK¨ J“™HXÚ× l|.šøôkoŒ†å æKUõª>3»–ê7Ê©ÎÆVC&AÕ© Ô˜L=¤5Q™ÀÜø‡L9ó»&FwŠ&~‘&eMŒÎ¢ T×5>CÓæÃÁÔ¥ö¸Xš\¥}é©}MúÆ—dîÇ Ö§úš XΦOõ­1É™{Rõ)óŒOU[«ù_û@ÝéoWs°Æšñ ª_%®ãZmUéyØ€eO¶îŒ3»ÌÅ“ –¾R5 kq6³˜ãú•è¥6¦#M(Ú7Ì=9òÅìrç¹’L½š,M\Æü¢z5Q9“/Œã¼1&Áó‘.ŒyÌø} ß•î_e=Ý·ÚgÊirÓqw¿øEFЄ©‰×˜uMíkWßJÔ7¦ŒvaÚb˜v®&AýoüU†X`Âø°P†%©v¿¡³ Ò˜ð §)&Agr‰Úk|S¦N3ŽŒ ÐŒ)£åé^tŽÚ«óµ5×Иs×oZß7ÇjƒúGu™6—Êê¸éO™Âm“àÅORîÌv™oF?_° “Ëø)Lkîg`_¯ù'U»O[®O/Xõ%£5_ö-ñ%y©ë3ƒ«¡z[ò^Ø—«-JøÚÜ/âåzÖ®÷q1ý}©û¬¹Ÿ}½–›\í¾mþ¾µë:ky‘j|<« [Ã*‘_ZŽÓ'l±ûÀö°Ç€=¾:cÀãê³€U…63+±)¸Ù…%dXÙb÷=¾IcpG¾I}bßëWk8XŸ°fTaCP2òËpø-vØcàë<Ü'wË|ûɾ·¯ÎX„šÊ"”—³JP[‚¼ìäf—ZÛ|þ_Äãú]åêXÞæiì}«|KjU µçrÔÙ”¾¹çœ}þGŠpôp!ŽÔ9DûÇyìbžmK´ß´Gm““p U»ùqYw°‡jõ®S¸Õÿ:~©îç¼€%€*ÉCÓ/I´¯c-ÑQ—úš_ç{»Ô}©úŽʳ€'+- ±þˆ‰ðqKc‘IrG¦õRœMërŒÇËYç¹g_ˆƒœÔ«ªòQV‘’²<•桘¢}«äoµ,sX–†Ì\O¿7e ¸ÓÎ@¥÷𰀉 TSÅö³å¥lQ óóøa•‹¼œ\k[ÄÿK‹óPIrRmõ™û¸È¬óµ÷¼€UU’Ф0ø0c¸Dû:æN|ÕË|ïírô}]mŽ¥Y ¬Bö{"Àw³[z`7’‚ùBd°Šh^(möñu©Ûf&˜ºÚ"¾ÌEHM*"cãúRÌžUŽáêгG Ú·;ˆ[Âï×Y[ýߣ{ † ­Â¬™åØÀòþ%HI*f’`j\¼^c&,VI Q ðƒ¯Ï^í߇Œôø&?“¦¶Amvô#¿Þë8Ìã×|;Ÿ_ü…îÆöASË«ÍÒ j8Ù ”r‹r‘ž—‹¤ì\Ägæ"6Ã!q”Ĭ\¤pâÏ*ÈEaI.**ópè`¥­˜“ã¼Þa^¯¶&ÕÕùgojû\Ïs¶HS:HЩ,ËGqažJ™é9HIÎA|\6¢#³šÅ•ß³䨆‡fóãJ+‡ç05“Y¸r½ÆŒUwïç¼€UƤ¶aZ4qúxK´¯cî^ü«\îRÞÛÙ/$D½|zé,á¾þ×Kéj8÷Åsæ§ótŽ^Ú–M}f2Ê (ÍJ`å5Ze÷mC|Ì~”•HÃ*¦-œ6rNVÍ)—²mÆüw°ºˆ/|ÂBб~m)—Ê©@—ÎÕxóÍZ¼ð|~ò“#xø¡cøÁ÷ã{ß;Žïsûÿüñ#xþ¹:¼ùÆAt¦_yÜØ ¬[SŠÐàbš Ú–1ž¯êÓ¬^ÿÁ ©ï¼¬Œ°~;|ø0NŸ>Ï?ÿ'OžDY™ã™8°Y™{ÿ›ªá9úQ&¨¼£sᓃýñÙˆL够<œ3pձͥe¹È.ÈBf^&JËsÙ'Íò~˜yIà" */ɧyš š”c“@iŸoöìÎÄömظ1k×d`õªt¬Z™U«øÿÚ lޔݻ2˜Å¤Ù9ЉÞ.lî9ê¼€%àþk±pÄ@ÌÜ»VÎGJä>Ë4è*i-Î~.ó…tìHý“rsšÆÔw±÷Ö˜¶«]™ƒÕz™霠Ó-­¢š/`]mÞ—¾Ͼ°üMeTÖ:‡¢kèZºfcMDi·ùÊ•Jf5i*íë˜sÝM…ýû¶S+ âýe[ì<9n/ÔFGßœ~×¶¸þ^[•IQl£Á´±m3`%PÉÎ,BcÌ+£6U…W^9H0:Œ{ï=†[o=n8‰«¯>…+¯<…V­[ý¯ãú]å{ì0~÷»ƒèÞ­ óæ–qò(¦ùÔá»hÕ§Ù4Xûý‘——‡ãÇ[`Ï:ö„fbk`*ü£³iºªÁ±cǬßôlü}/øŒœŸaS´,KS!(   òSHIâ~*JùqS]‘͉»am˼sµÕyºl””ð*Ï!Øå}Aƒ¹ÐXs÷wÕ'°’™OUdª€*~ñEð/…OB9¥Þñ4ûÆ•cwLvÒìëY„‘ùØ•‹}±Ô`’ \YÙÈ'p•–ç¡ ˜šYz‚ãRŸ‚¬¼,ÔPÓr·]ç+çè#jƒÔˆdê“–L­iïžL‚P¦J‹e`îœ Ì˜žÉ“Ó1aB:?¾Ò1n\·˜8!S§²Ì\Ë ¸"²CmR¦D]¿9ç¨K“@} >–aF¿ž×¹=s¹v–@ÌUBölD\Ð䥆[ ôp>̤6Õ5i¨;”m}5Gg×w wëkŽ{kÌ=è«N_…%EiœÈâšÅÁÁe[¢ùE“@<“ƒ=ÿ ÖñÐÆÍßTFeuŽÎÕ5t-]³¥ˆ æþ\É ‘$.%`™6UqœiéW†ëïei\&¦EË|­J³Xùú”`ú´r´ý¸O?]‡{ï9Š›n:k®9…«®:M:+®ø²èø•Wž¶ÊÝxã ÜsÏ1<õd>jS©“9éy#+Ý¡i5ôõÚ@¸ViQü÷í³´©‚’*,Þ‡Î3÷£÷‚PŒ[‹ ã1teÚN À°¥¡œ4ù‘tìŠIÊÚ»wO£ÞãÆ‚–úSÚ•>ÔrV’d‚VòrÓPT˜N¿ ?öZê3^Ïú¨™TW梠0é™iHNKEzÏ+Ò„ß¼ eÌ€Ò¬VaÔªöÅS‹Š+Áio\%öÆWQª-ÙCÙW…1•Ø]í‘eØQŒíáØ‘ßè,„&f":5áIØ–‚­û“ù‘D0Ó|š×¨¾oh®R¿ª-´ÌÒŒ|}2±nm&æÏw€iÔ¨ –Áƒ30p` È@ÿþçDÿ”áÃ^éX¸ ÃÒÆ"³,MKæÁ }\5f.m°¤)‰h±}É,LèÚC>xÇ-iZ.WY>a6ÏŸ† ë‘Å¥HZµ5é(.åC DfÁ—ÅЛÅI¶e4]ÛúšãÞÖt¬¬Ë¯Ž¬xÄÆ„ $8€¾?Úƒ‘”NßO œ¹_,Óo*£²:Gç꺖®Ù˜v4f`˜²®„…†H—°L›ò² ø\ŸÌZ5à ƒõhlèY$+$"73ÊZ»¬¸ ‰åX‘¾2Wº«a8ZlMšò1É èïG°šZN¿T žxâ0nÿîq\wÝI\y¤>#X}Fê3‚Òg¸í6‡h_Çô›ÀLàuíµ'ñÝïÇO¨}ð~Z~>żN65_­ó™à\+ ÀŸ”iŠ*ÁPÒȵÑüÒ/BJQ2ËŽ µ¤qùµØSˆ™;ÐsnVì·41–ŸŸ·ÛgcMƒç4¬Läç%#3#‰€%M+Ã’ÜhÕTåX–†³f9>…TTVä ¿ ÉééˆNJCx|·©H#x•–žº&2/]ß#={ù¬dŒHÉOL5§B‚P ¶„;d{D)vF—Q³¢v[A©Ä.‚–Ä3¶ Û¢*°)¬ëƒ °>(›ƒ¨áHã6 Ë}R°‚²-(‰™,úºšò.»ž# ©®, Ÿ*—ZsM}˜F 9ÒP¦~ý2Ñ·ï9é×OÇÎIß¾èÓ'ƒeÀ5vl†Z»wf"žciQ¾Eàh.Ó`ƒ€%ó^LàN¬œ4 c:~Œá·Æø.0åÓ.˜Ô£&vëhÉdîOïÓ³ö‘±~Ö$íÚ€¼´ªádìGpÒz ÄeíAAKZWK€VuMª[õ5ǽ5†-©ª‚ö÷ôÔ„†ÀÏw/¼öî¦ÉÈ›¶âdÛ$ÒÄ—ó%ÀÒ1ý¦2*«st®®¡kéšÎ/ks b×k¸"I\JÀ2mJM<hVz$ÊŠS¬>4`•žbý–žŽ‚<‚WV,b#ýZ°,>1åk’ùîãV?9L :niK_Ô¨Àôï|†ÿè3¼øÂç–üˆû.h9´/§óo½õ¸eRlóa æÌ.§Ôx2U¯³ÿó|šŒ¬7xÚ··L|yEè<ÅCfíD\j!J*ëP^s5G?Gé!j^ÕÇ ^G-àZGEŸE¡Xë“€cÇOX“f" óµÍ2§ž!X­¶‡îPV’AÐ"5+¹¹ÙÈÉÉ&`eRÓJµ´,Y"LDX¨®"‹-?I«(j(a $Äe"Œ •šji]µ4 :kfîÞC}åD²Á"6=Þôýl$à¬ðÏÅ"ïļym‰7}=YØš‹Ý2ÿEb7? dÜU†íQåØI_eh–ï/Æ"¿<,ðÊÂü½˜G™µ3 ‹½Ó°í@*+«ÙK$',’r°‹¦¼y4ëI£’Öd@I %Íjȇ%0=Ú!Ú—ö¥ß p â¾Ì†+—gX (0¬®h>-ËãêÇÌò"UP¦ ‡%Ÿ”Ì|Ò¤&uï„™zaÁÈÁ˜;´ŸZ°¦öêŠùÃ`é¸aXúô·Y———Îw@ÚÒ9C„„RúCS2Ò•˜ŽÐxš×ØVm#Ò©q¥Q;Ì"Ò”ØL–¨ëÙ9ˆÍÀº€tÌÙ™JsjF®ŽÃص1˜ï‡-4éùÇd $‘ ;¶ÇŸ&8¯è<˵%¬ë‚‹°,° ü 1Ë+Óvå`²g¦Hvdb¡W5.VVË–|Oóç§SCJ·@H"ð’¯jòdú°f8üT f`ɇH“š9Óa:  ´$Ædy|ûÖLÄÒ*:¼Ñ²Ü3*çq•,&¿u,gRÂÔÞÝ,°Z8z(¦ôê†Á4öûãëè÷ÖòỘ֯–ŽnÉlš —S+ !£0#}?’ó|°'v.6GM–¨ÉðKZ†èLO䇢ª:Gç5hU°Ü©¯˜f"C&i꽕$ºý¢þ/–«ÏJ`•¿¡AX¯ ­Íñ"Dâ,sœâ¯.…ŸÈÕL™É˜/•VÂÖ69á’b2ýE° qÔ^s’ضYb‹–¾T‹ ŠHŠ(ÁèQøíoáî»Yæ¼s~*BŽ­4©_ücÆ|†ž§,hIÓÒoÀú"p]{í)Üu×1¼ôÒ!Œ^A–‚ÏiYî–ú0›l4™ôé+¾:Q¹GPqô/¨=ñWÔþŽ~öwj^UÈÈ)Cqõ Öa¤¦_¦+÷¥bêÖ8Œ_a1t½œ¬$·ß…†Úh…$XÈ(­ÀKfq˜+''…ô·ÑïRL{~*äÇ"1Éø®D²Ÿ’J3`:‚ "ÁÔ®BãÒ›LÐËÍ †Ò|„%Õ«8«$%¶¥`ÖöDúýb¨‰FØÃ0q]6í‹£–Gë´Ã‚[.RsrCÊxPB6vGdcýþl,öÍÁ¬½¹˜º+=s0n{6ÆïÈÁÄí™Ô¸š°d¬9cÜOíyÃú ,XÎÐ Ñb +I¤Ø¸àÃ6ˆŒ!?—ÿ¾LìóˤÅ'[6;ˆH¾IPæÁÔÊb:÷Àþ,‹y(bsh´Àz 86XÒ°¦Ñä7whLéÝÝ«Ž/<‡vÏtõ{Ù|‘ÉXNÿÞú{/ ·ˆ+ׇbé.ZUØŽü¢l+–JqV VÀ°‚ˆ3òr‘œ…ÝaXá—ŽY»¨Ñx¨¶ç`̶lŒåvü6j?-X¿+Í™üCPà"PÚé™iQÙý|3-j{Ÿ{ã°R•‘–ƒ,Æefä 9)›î š:·Ót9M„2%JË1‚àGò†7M›é©œ« ŒHwÇÉù5¬ –|V2:ÀêyÈnìáo>ø >~þ)ôjý*F h1#>ÂÌY=°Ùs ü"—R£Z‚MQã°:j(–GöǪ¨AX9;bgà@ÊZšðö¡´"þ,ƒÐ¡Àª¬2…HÌÝ‹¸ìHÈÝðôMnÕ—œè ŸÍK-óå…îí“_½€!mÞÇT‚ödš?¿î€åê³’Pš•ÀJqSÞ»×r=öyo²´-ãÓji?‘ó6þ-ä»’9P v`ÂX¢Éçd%X`uìH9'2j@4q·颺²˜/µXxõÕƒÔ®Ž[u‡våª-}f±o¿ý45¬Ó´ÿŸÂ²e'±xñIôîu O>y·ÜòåsŒ‰P×½óÎãM~êä RˆKè#h`íôôä¤Y‹óÑ{âfNêôïÄe!†f³8ÆàÔžø¢cÒ¬É%·¼YŵˆÍ*‡g°H©X럊¾4 †%ÒÔC?Øž=»ÝžˆÎ XdÄ ¨²é«0Ÿ•O³ŸLùŒA’vU^^J€(³+Ÿ~ª‚š‰Íª$Õ=ŸÀ–FrF|2?P“Ÿ„˜Dº Ò“y~†EkoNf­&ýâÒ\ǧb¡g ƬŽÀÐeá¿6 wDÃ+”œË0‚”™ÛÎ2éû’v–M3çjƒR1gW&Ó8–`5jk6FSÆ9VR3š ­]*d¶Ë&]1Xòii+ÿS>™~´ fºM]x1ÿªÉˆ,a†‹Ô”lKãZ±‚ZÕx‡ÿ«OŸLËD(s¡'ïE×S&ŒKX"VLíÕC¨I}òâóxÓ°ÞÿÅãèüþ‹è?ô5Œœõ.&¯n‡E»û`uÐP¬ Žåaý±4¢7EtwHXO¬@3áìK\†úµŠÊ¢IÆpAè W`_Â:,§bSøXlåµ6FŒq«¾€ÐUؼzfë‰Ý;ž÷ÞZ°¨ Ð?•—“Ð éB¿9|X{/‰Ë– #ù¬LÒ¬VíëX ß6š½ùåÑâ~¢ú¾¸d¾”¯C¾+™#iŒ óå]´#®ëH3gTZŒEÔˆÔì®K¹ÿýK1tHž}æ0ç„Jõ•Ž]{íiÒÜOá7/ŸàË} 3gŤ‰GñIÇã$jœÄÍ77|®®{óÍ'ð‹_ÆàAU$ãp§yïB´qóù—¿ü…ì>?KÃê<Å}'mƾÐT’:mú¸æØ_ ÿ€päЯ•ž_4]y‡§bgH*6¦aèò0NÆ8tèP³PÜEœ¨"àp $[ÄI²¤¤À2ýIJ P媪ªJ”W”ó™y(š‹É,%1£Û,ú¹RÒéH%H¥Q«³ŒÂââLN¶Íg tf%°#µlw4æl‚1Øà—Àþ!h¦¦£„¿‹˜ñ%v¡Eݧi“±Va$‡lÚŸ†y{Ò1ug&Ð$hiW4 NÚ‘EG&¶3óP3–W±RÒ´¬4L‹ÀIÀ¤ôLò?©ŒÇäTÁrjˆéÔ¸³Å`â‰Ó-FïÞ™–yPŒÃ­[lAÞÑK¥aMïÓ ó‡õ·ÌgÐú¢I°Û_€ÞobØÌ·0qǘºçcÌõïŒAݰ(´†òüðΘÖsBÛavH;Ì îˆE!=±.|¼âç#†~­ü’ÔÔf°SÎOÆ 0>g7¶FNÂòàV=KB>åõz¸Ußz¿±X¸x& !Û±÷'˜7¼á{kI“ L)ᤫg¦ÇZÁÒdÞh_Çô›Ê¨ì¥ ]“ Ì|J™$‚…|V2J³²L‚ÌNJ²Ct Ma‘dᥴ¸Ÿ¨>À2v-今%‰…€¥6•¥¨”Þ§Ä26% ‡»€¥„µÊØ£{-ì(®¿Þ˜ë×”n¸á4~øÈ ÆV¡sú ¿Bk°a] S6 /#¹BÚYýçÊ,¨ë?öã£èÖµ{v•[Érݬ¿ýíoðõõ%驽gïC×Ñk±Ý+»}#áåo_ú–þ{vîc»|™_ŽfaK$ë+&{ ZÛ¨i ZBX¶uÆhX /D®P\aey6Íz¹fŒ 6UQQF)'PUX`eVy9ÁŒþ»ffÈÍ¢6&,™YÉÈÈtˆŽüÊHa¯"9èý\Î).Ö4eΗ–¢LÑ)i؇ÍþqØœHVbªVYÔ Ë˜â IÊZ¡4K&Q¬¶¢¨§0¶Ê'2«ü¨aíNÇ4RÂRè7ÒvÊ’|Ò±ƒ ɬfŠÃÒ=†©•èö ™­I€{¶ŒYF±[dÊ7Es&͘‹9bÀR,—+Î}½Ûïnù°{µ~ÖDl%ûO4wÑØ Kpzߘ1²æ,è…©ÚcºO;Lñÿ3‚Ú`zPkÌ nƒY¡QÚ`FȘü¦xS‚ÞÁ´ýïcöþöXÒtÓhÒÛŒì¢+Èø| ÂÒÊ8DgmÃÚÐᘷ¿s£ë›µûLXøY0`ê¨.X·`"¶,šŽõÜÛÊ)c°uñL¬Ÿ3s ÚÍiôñÞC»±íÃa´ ÇZ¼$K´¯cúMeTöR–•Åž¼•‘ƒA›bŠ`!ß1 ¬2Óc¬/[Ù¦å#:XC-¦ýD_2 ²†Â.V Ì}2 †{Y©ž2Ó£Øþt ükÉ2kÉLʺ®ÄµÊøÐƒÇÎk]G K€Õ¡ýaú½ª™‹­œtørÒŠ«ñÚ«Gp×"kœß,ø ëi×ö UoU…û€¥~ÜN† â¯&¯ CÇk1Ålñ ¶íû°m‡ ÆæµÛ1sÊ\N¦Ùôo1ˆ5%“f« ì‹N‡''ή³I"(¶4µ;w4j"ª\­DÁÔ²¬l0.R¡++i T+ø™Ã$X&!!„šeu3[•š–DID:ãµ²sR ,S!3³0°Ø9“øÅN˜®çk2/¯ÈCRf|Â)I8›jõY2)èé"ZA˜G²E~QŠ˜3P€#ð’?«¨$‡þ¯4j®ÉXí—‚¥¦Å>dà‘ /¢…4«ÅÞéd¦Á‹ i9YVNÁæ¾ó]ï\06µ0¾ïEyü(̱ò Š](sàÔ)éJv b¶XÎ&ÁD™ p—Ì$(íJÄ –x­[le¼x­_‚gc£çÌÝÕ ³üÛcJ໘L¿OðÛ˜J`¢L y “ƒßÀ„ ßclào1Êÿ%Œôû5FûþýÞ¼ÀN–I/(e5Í}$Q$S&ãè—UiVL6+læ ­‘õÚõ{ Yñ; õ¦Îí„M›§bßž•عúK÷´{ƒW¶}Ù‹xÑœ€åµw—eê;ä‡ð°@úA‚¬˜+‰öuL¿9â¶v]À:#3€XD|ÑÈÁ˜¥Y ¬T'ŽUð+­Ì2m´¤ŸÈ•t¡¸/+ÞJv±¤‘.äÓ2ñY•eô´`¦‹<’”mýÃÖuVN@¥YjÈ% R¦‹@ý+©ÙüJNÍ@¸¥ee`o".±ü`9d»…6j­°“¢–ª0 E ƒ4­rÆ0VHÛ¢i~~>óí‘Ö^È´J.SJ¥e¤#)% ‰É‰hå1f«‚ššÌŒÍÁL»8È•N ˆN…OD*öE¥#„±_¡¤°‡Š˜@ I S1!ƒZƒž ² : ! £°8Q,Ÿðdì8Œí LÓŸb®Dc×V”xÏà$j´  nÆÔLº/£9>&èo£©PZ•¨ê~Ì1¸qéö¤¶Ošä Á‹p!°R°ñhRâÅ2«PfCÝ%,iX›çOEàŽ5%]=h'™EÜdŠ&Mæ»·-Àºmc1}+ÁÊû}ŒÛ÷&½†ñA¿Ã„àßa|ðo1.ø%ŒzßÁ`¿Ÿ£¿÷ãè³çGè³ëÇè·ëg¶çW˜ê׫C†À?q9Òòü­”NÒ´\;¶´2–ÖV¬ŒYm]_Ÿ?Aï ?à5¿&íôC¬ðŽÞó±Ïk5wóÞ<×RÖA`ê³ÕÚß¼pz³kXÒ˜DÒžJûkµÏïŒp_Çô›«K¡aëë+sº’†:‘ÃLvÀ2?ZŽÏNU[ k•M»%ýDÎcÀ˜-Vb1†ì߉¨p?2ÂhÆ å¾¯u,:—šŒ…-›éBëYi‰e]ÿÞ}ÇØ iIŸ1WàI¼÷îfp¯bPscë´UêS½2}ºkT?ŠÖžEÓ’Ò1 YÆ, •ðIªÅôCˆÌ9Œ¤âcøðõ6xÿÕ÷‘[H-&«„t¦ :XS6ªíÏÊ#G,óbiqÆEÖ¹Éñ hQ3®æÇ’CÛ"#”>Iù¢R’‚8²ò’ÓÈ\ËÈ¢ÏJ€EÿK#¹B¦@{)rmZàOÀJaŸzE¤lHõÎÆÎpf»8#;Âr­ãž!i$™%AÏ––ż*ns yü(P ËOe$!ƒ¹ù˜©CLÃ0åÌwhXîÓܤ •1Ä ù´DÊgž@±—-£jˆ LòW ¤D¶ÐVà¥Üƒ›6r̄ѺÁ ùšããÁ-“àLÒºe ô¤–᳑Kœ•eðÙ´ë—O¼%}0jù1Úó5Œðù5Fü#N#‚žÁð §0tÿO10àÇè³ï!ôôþºî¾<ï@Çmwà“­w£û¶‡0h糘âÓëCF#4e# K£¨:yý-VTæf¬î©þï7¡¾»Ðeóýè»õIŒÜú¦mê„¥›F°ƒgbÏ–¥ðæ=yo^a‰ÅsÅ<È48“Ù<šSÃÙ»g')¥»\äÜï¦\K»`W†HiÉ\¿ŠfãGJÏ&«½™.bBʽ˜+ùÒ„Èø«Ð ]Öñ”Ä`µ\¦ £aµþ€3¯K:Ÿ†%-KZ”´)iUÒ®«a)û꓆u!°Ò3uNˤÔJAAA8uêsÕ`À’Hæ³ã:\¬ðl&¿-<Š6hÖhgM¤«j2 .Û‹IdÀUÖ²@ÏÓs{£Àª!–³OÈ,)"ª»å×¢i/䊘¤$ø…ÄbǾ(ìðop<Âb’Ï =…&¸ Nöòi•Pk‘eÀ¡a5oòÕú&xåLÊf¶ˆðL¦UÊŪÀ+xíI!ÖìÏÃZÆ9í–æ•N!)îôi™¥i ¸äÏR¦v™å÷*'P—RÃÍJg v2cÊ’¨É1ŽŒe/`9’Y1TZûJù•'Ptu1eös•Ã8 AÑÙd«W+O¥(í|~46W\·K>«Å£‡8üX‹fœúv¶.ž…Å3‡`òô0÷e ÞüK Øûs ô{ýö=‚þ£oàýèð=ôô¿ Ý|oG'¯[Ña÷Íh·ãF|¼õF´Ýüm|²åôÝñ3LØû6VÆTNk-†æº’’ŠDdlÄÒ ^ïûf“êë°é.|ºåq ÙüŒ]Ó3—÷ÁÒÅc°aÙLl^2[–ÍÅ–¥s,‘ÿjñØa˜NànnÀ²Ò-‘PáÏÔKþ>d›9Dû:¦ßTær–+ CŒ@ƒe¤)Ð,r)ËÔM*{ðÄEï'Ó2É¢ÚV2';#Ú2aŠ,’Ì—- yYq-8œŸS‚m[*˜µâxàM~- Xºþ÷³êS½Êex!Ðr,í÷|çææËÀgŸ}†»ãÑq:öœŒG":ï>z·+Ú¼×õ,X…'¥cg4úÍ¢fVm-;²~ýz›®mVÀú"p‰Eǵ™J²›’‚Ýâ°lg$fm ÃŒu!X¼5;ü¢Z)Œ#±¦¨˜fÄÓ3q⯥?L‚–^?«œã.kAí 6±6(Ë‹±:¸ŒRŠ•A%X˜o¥µòŠÌ`&ü,+nK¬AWÐq˜ãë_ÒŠajV‚¢ Öá H¤6YA@»T€%S o5}c´”éBùÅ”F%Q °´ª 1¯_G_§_–Û¥\‚b 6[.Aw‡-ÀbÚ¥õ³'Y„s2ˬE3†`â´vè3ûEôÝðzî|˜ZÔ÷ÑÝ÷Nôð¿=¾‹n·¡kÀ·ÑyßÍøÄçFtØû-´Ûù-´Ý~:n½=¶=‚»ƒùþݰ;zÀ^¦êOàƒýr¢GVxÆz, 솑{ÓèúÚmþÚ¯¹ÝWýƒ–½‚IK;bþâAXµx6-›å¬3`µ…û-X2õÉìoù­âbBIuˆöuL¿©Ì¥òa¹~¸’0ªøåç+QÆËÏ.¸x)Ëh}iÉLý•J­Ši¢LÌ—•//I³üWÉ !Ü’BQ>Ãâ¢ü[$5Sa~ vy–s½«Z µÝ:ržÇ$x–2h<úèQ®—UkÕÛÀzñ“zÖiii­Ïž\ˆÓ|ðAŸÅX ¶Û #ó-ž@…!‹ƒ0wÙ¬Õ‡ð§?ýÉò_éüuëÖYÛ ÆP]ȼd~¿¸ó &õRšžãSÓà¹?ó·Eaìªp¶%C6zI–l A@crò9¹W²]ÕÌÆ^f‘6d¶–iPšZKjZ•Dúv<ó±Ž}·b Ö„”Ó½Qv°ö3KDT†eòÓ²!"]¸NâV ¯ÖÓ"¼˜ QÀõ©DÚØO@qG`;ÍÒÀ.`™Àb-=ƅ׈”¦I&@ùªVÚ3F1WéùBqWZ¢DAÆ%… ”&«Y³µ7 °¨il%ùâœÌæþì3€Õ½g=‡Þë†îž÷£»÷=èê÷ô¼ =‚nE÷ßF· ›Ñ5ð&tö¿ |)Ô´ºÐ4Ø›~¬Q{~‡Ý™sp6“äî¶’ä:Xÿr$%ÑK_‡ù1|ï¯]_·-¢óâ¡ÇÌç0xÊ1cΧX¾`46,ž†ÍKgA u)Kþ©à }V6öÜìx+3{qáᾎé7•¹T,ÁúXPޤ¤†Ö¬²4«³`åXÒþR–Ñú r¸Žrja>g¥Ec3PÅú])}*èÿhÉÔL¥ü²ßç[Æ/Íj<õÔak‘óÅa]ŒIP@¨eGždNÁþýª©—5°Ì36¦Aù´´XciUc­²0o[ÌòFÏÉ;1iM¸•ì6‚¦ÃÏ>ÿNœ8AâƒÃ¯¼bÅ æ”[ çÅŒÁ™`™ïÜ­ –&ce­0`µ3(³73 —Túž³ƒÐyZ>aÂÞ~³}1{ý~š ã˜Ý"Ï¢¾Ë‹ËÄY¾«†¾Š¤aY€ÅX¯a»í~}~ßÃ@ŸŸbÈÖ_¡ßœ—Ðwäï1lHkÌ4«çŒÇfš;]ïM÷çа†6»IPæ>ÅXegÄÑ”¥u”$Ò!Ú×1ý¦2*{iI®«þ:H2Zb-eï«K XFë«åÒ27HÛ;}¢’RaµÉú2”ÿƒ&!ý®—®%)÷UœÃBJ¸P~Ã<‚wÜqü‚fAWÒ…ˆ"`ˆˆ¡ßê×ÎN[×UR]å?®’¸î·‘&ÁGÅë=·7~ô# êÒÅÚM\~-™ µ•ÙOkeI£R¢[•‘póf3½ÓÎ;- K€µf͆‰Œärê‘­†Ë˜Ä³$ö\LrŠ¥UÌÙâ«n3Ðv‚7>³íÆïÆ y>X²í‚£â‘Kö`ið5¤Á ¸D/bö†fÃPŠ'å%4¬Áæžì-Àâ$m4,™×R»ZE“àrj[‹÷b¾wŽ•Àv%c­¶“èOòE4ý‚©dʧ%ê{ ³Ð‡3M“ÖÃÚÁ4דÊ>W"&lˆÆ&)ÞèO°Ë ÅÿÒ.ô) †R1ùÓħœÊÐn’ÜŽ¤¿jM€[·dpf1ãŒL€J„­„Øç4«æìo7«ßÆZú°¶œÔ Zg´­%3‡aÊÔOÐúËè·ìyôÝô$ï~C÷=…žÄ°°Ç08ò~ô‹º }"¾‹>¡w¢Ðæÿ4c¨ÞÆŠ \.zí»>ŒKˆã—†VŸ­?ß—•»‹´ö¨Œ-T·`²÷{d’àá÷†üâ<õ=h‘@¦½‡¹»»`ʼO0rPŒéÝóÇšîM÷Øb€õÌÖÞØ¯ËËX†z/SÃñ#Í/¨ëïuœ[’r¯\~ɉÅü-³ÖÀzèÁó×Gkµ]wQÝEyWWÐ’v%sãÅûï×r)C"Òjb¹ÖâêÃÒÿ†ŒñæcY&¾ñƒc=GÇS¹ ‡HÚ ¹b_AÔVÇ6nÜÈ {±cÇ ÄZË—/·~ËH‹=/hÕ‡¥†™]‰i³˜’)4. [üc V‘±,=÷Õvü^¼7b>±ݧî´5ؽŸ‹¡2£…2°W’ÉVɘ´Š G¬V“䊯ôN%d2 ´D›o¶šó{r°Îú° ±ŠË¿(ûú"ÿBÌöÎÇäÌZ±•~ž-©˜¾= ÷$1/cÁ+™ñU)Ž€lRÚWú¦`Þî–IÁØ X‹þË"1iS4v…$‘%È\ˆƒ¦¾§9Oýäаò°ŸÖr2å¿2‹6NšHr×ÐÚÏLÊ1¨`beÅ0&Àæ*ÓîFÖš™­¥CZ–ë `­˜3³¦õÄðIoaÐŒWhc~…æ·ÆŒïaBèKý†Äþƒb¾!á?Äèàç\Üš¶Þ¡ð‹YŽ„ ?:M¹(!ß;»GPÉ­¤o¦æŸI{ñ Ìß× öwÅ!7Tߘà0'ä#lfÞ]A³±fÅ8LÒ“z1#Á¸¡{³ËUÓªÿÿKi<÷ÒÑú\´=×ߥ­¶$åþM¥ù\¸qÏ® X‰çŸ?diAçò ~|ê V𰂈L¬ b•qÍÖn–yöÙ:š+I/.¡Ùر¼ˆîÙÝä·š´¬´M¯¾Š®o¿Íš†ÁgÙ²etÄï!˜y2êvË<(MK×÷õ©?¿`C1XòéȘ˜ž ß°x¬Þ™›"1jE8úÌ BÇÉÞø`ä6¼?|3:OÜŽ +ü°m_×·JaÖ R½ÏPà+è*/çRõeÒ• 7ëfqí¬<¦gböh5_ò[ÝëYÒi׿`™_Vúç0ûz6æxe[ÉlG1ãÃõL]´6ƒ×¦`øú$ &mIdöûLÚÑëã0xUú.C¯¥ñè¶(ç“èBÀšë‹Ìž¡¼…ÍÏt¡1 ß}XcÅ]M']]ËŽŒ“Î@÷tŽAI¬…Ï-!Ò@Õ(ÀšAvœ²@(xÖ{Ã2xotÐÙìZÇ8¬¥0{Ú§;æ#L˜ÒKÖ ¡ ;ë#F`vXkLˆy#ãØ؟abĢÇMÃÇ n ’2˜@[s¦#… ¿´b•¨3Öf¡°$qŒÁIbÖ¸U”•\mî—ë‹û&±¾…á°=v""©™ÅÆ‘>¾i—Lav.r¾{Ó=¶­ý«¸–;¹¾2—°¾`ª±ZY^ÄŒ\|o!od&õ3c»r žc :d)5Ó#ŸÀûïÁø±µX±¬Úíë˜~S™sK“8LÊ!øè£GЦM Ì+cp9µ‰ÒÆÖÏïºË¢¹ ˘--쌩Ðy¿¾ç-öŽ/\¸kbyYšÖ¶mÛŸ³ŒyåVY¿íôù’&P`‰Þ]V.rsîÅ⑘²>£WEb Œì6ÝmÆìÀ«N¶aÜ2lñ G™ƒ:OLB‰X•ü_Ç¥$,”0¡e¤É-77À•˜1¦@c91›:ÖÏsdºÈç\ÄåEè£ZÅŒëË}˜ x_ –{'1™B2?Þ“1t] ú¯fÒàU©è³2½W¦ ÷Š$ôY‘ˆ>Ëð©jq:-ˆC‡ùqh7—™ôçD£ë‚HŒY…M V6 Å`i¯–sªÃ°ÅøóaÖ +fÏJ'Ù7ÖR» Ì´L†&{K·ËÒ°®½@¶ö9 ÞBÍJAɤ K’œ™ÄÀLIB˜x‘âºx¦gª¦Ñ½°ií,øX¯ØXÑÓcLóKÌŒyK"»b[ôdHÜÈÔ/AT‰°¢ÓV_?††ZßÍ[Hæ`u5“^–Ðv]ÅlÈaHÏfÀhòî/×û&–EuÃÎøi4#nç"u‘ÈI=»¼È…îM÷ê½ÅÒ(çë׬´v°ÖÀÝ|}3¹´4˜Z$²µ6Õ>ßb&²-ÇÿP‹‡>b0¾ZŽä·wÜ~’‰nsí¬£xëG,ÑþO·~SX:_D‹<‚7ߨ%}¸¾Þ%–V§¥MÌ{⮆õó üY¼œ÷Àë|}ïçëФäÏ’–%mkåÊ•gý[{v1mS}mÔbŠ2z“<±p{$&p­­Q+£ÔOgÓ8n—¥Yu»£{a£wÙrÉX‰¬  ÜZ^„ UC¿fCJh"´HL…TÊôG… }p¬µ¥UŠe¼˜1å<©—‘<Ë8°-I$H$2Ÿ`<ö†Ä“Ù‹Õ^1˜¹5£×ÅR{ŠGß èµ< =—%£ûÒdtY’„N‹ÑaAÚÍ‹C[UÛ91«(t#X 'h/ÛÃtO ˆ.Òb•í°¥A÷gâ°”WD ¥bòd^Ã5«IY“nåT.ÁÂf ¾Ð3q °2%‘5«,fÄÖJ»õI—+—62ä Ìãb{6,GDä.H^‹Uý07òCKÖÄöÇÞø9ˆLÛÁ4#aŒ`çšEZ¨š•‘ÀÊhW –§€MçÈñ®åD«p}¡¾¨±.~£øçq¥c2KÅgK„»€åN_^HÃr¾ÆÞ=P’OK ¥ì™ÌÚ µ²,Xð`pm£ú®†iŠ’¹Bð–}јº>œëHEbÐÒHôš{í&ìÁ»Ã¶àÛÉ\Ü…å;paF²?›%&¡Ñ6¬¬ãô{RLÎ%4ÿ)ó{—‘ÿª Ÿ+gg'Ò„šhåȱ©9&}‡†EV_zvH †‡}áô±'Ä#<&>Á‘X熹[¹˜£îMZãr®™µ4=ÇZf¿. c©YIbÐeA4º/ŒB?‚õصá\O+ŠñWñHËJ³¨5ï5WLÓ…Æ,/ò8™E°tL§“‰÷2˜;Ê‘ÉB¾.Å5GŸž¯],MèJͤ¼)‘û •ˆëý¶{õBÌÎìéc†ÁoÛZÄÅy#pµî™Â.˜¸™óAµXiœH“4N̈́ۧgž©Ã~pÔ ­,0’©Ï¤qÒVÿë¸~W¹ïÿ(~ñtZ“y8~\9Óâ8Àªœ~«#\”²¾÷Ä€‚¶ÎÏ»¥Ku%2fP ¥}­“¥Ä¸¦ õµËh¦ZTQ äà =¢ý$¼3ÂoÚŒ6#·`ÈÜ]X»s?¢âb©5¥[–ŽÞ}#šOôΰJ‹¹$3œdgÆquÜXd0€\ûŠÛÓïš/šÃ´¦kÈL'ódÓGå’‘XPf¦êÊæB¢ÉÉ1ˆŒá*ç!¡ØåŒ^°rç,&%Þ–`ÌÙL ÛBsh(³Ž„a³_û"š«$Ç#ƒK¦”p­/™:MÖŽK¥a9“.´êð6²µ²°Ø)¢´oÞä”/ðLF‹–œg¬ª’TÄí±Ò1)K %mDVŸHS6ó̹·wã ¤1Ÿ[QaòŠÃ[µ‡‘à^ÖÒ!UÕ©®úi™þ¾hþs÷kÇ 4Wðª©áê¤gëóFNQ¨µT‰|^ÎŽÊ‹¹7/Þ[züÔVºÙ¯{µ–¸`N»”$.éÍ ãÌb¡Œi1(cfW…Ã/œbüMeTVçè\]C×Ò5›Ëy|±ƒÌ°Œör À“™Ó­EµNULÄ>ì÷ßn–Ê\ «¥ÚfÆ£XƒÒ´dôõ)!›ª }zWáí·kñËëð³Ÿá2÷Gq?Ó+)'à}Ld«­þ×ñŸò÷Yîí·j¹ qÜeðñr˜¥Y°jè}©O˺€¥1$ðqKÊéWŸvuÎZ¢Å™~‰¾Q œÌi:[€ž3¼kµíÇí@šçmðƒï0&·M°ˆ–à¤I\–‰É=(&`Í~Å…\‹ïI—êɧ1(_Ú•Î3‰qÝsz?š5ýg¬¿–¦M‹ê—YR¦Ç’¢Tk¹ œ,šõRc¨qE!":"ÂŽ}! |ŽÄ¾°(ì`B„ØX®úL Êä2C>¹:d=2àlbS/¶Ýî¼ï3÷¹8¬¥K´ve·8ÙD¼ˆ©š|¼ƒ•–k-)³ ;×nj™«Ž¦º<.=®åDZÆßÓ`-Ÿ0çNÿ¶ÕHf œrj k²ä–†ÒŠxR?9ÁrqFi®€ÓÔÆ›óÎMì´/Ô—Éü2…õbïMÚUcœ¶f­ŸêJÇ—_¿¼4ˆ•ÙBk6É,êwæx´¨YO,£²:GçêºVKÄ”4õY¸–Ñ^V9™|þÌ6¡E3Ò"™M¹ý¶X u9«%Û¦4I–¦Å1ù˜òHŒˆãTÔŽæÏ+ǘѕèÛ§>©µr*ãúûïÕY[ý¯ã}zWc̨J«üö­¥\2…KÕ“¾^SyÎ x¡ Ë´ `5f+šzSǃóyç v,)¢%×s¨¤!$:Ž Š™ë0v™ŸE__´%{C‘K­%… ÍIÜ —ßûœ†¥÷AÇd:«áǜ÷a½?ÚêCìj®‰ßù£ÙX{¢–@£÷TíÕb¬¯¢™) `ô¥ee1¥”%Œ¯¢ 1—,FT5ª*CÎÝ£|ûógsh…î>SÑç•EFk_y1àÜ¹ŽœJËdÖ¼š5‹¾;.8™’$.Aó,!r¾ö5Xê šrj,-iZ26dÔqý³7r˜ß­²D:µ(‚…äÈa­öÙò™“µv–;õ5ǽ5&øÐaúp˜.Y,« k+3†+W“ -•ùÂ9gL!-™ÍÝAmʹfu Úm%¥ÍçKèÈóWa-ƒ¡ÉCyþ´ôGðþ]LP[ö÷ÆÖ¾ò—£mÆÜ%_9—wÏÎ(¢i·˜i¶JÈð+#1£[7WXÙÖµDˆ¶ú_Ç}¼ÊX®” Qr)LöÏ×uãÔ®Ï×°j®þoÈDi4,£¡lª Bù$JÄsm«ý‘±ðކo¨´Ž8®yÅ<ÅQt”ê‹~ï3~,ã8ã"Ð{#ѵ%çÜç&þ ¿»ýðàÒ»î䪈?»4Ci`ºKh:&€ÀYóßï–n¯;÷å¬a0µÔŠå™Ì%˜Ål™81“¾,æHôaVviXVŠ´Ë¤a醬8ü— M~Ÿ†:®ßUNåuž;r9Ë|ïírô«kV÷”¤0ËÁm’ÒºæùÓ:UÉ ÁtÖןý½9ïárµÍ€–¾TE{‹P&=åTÂ\ey×Ò$Jˤ­þ/Ì+á—8×Xbà«Ê뼦f¸Pö‹æìㆮu¾68[Z¬:‹å§l\™—´ô|2ü 3É$æÄN03Lb xêq'|ÑEà`P:Ks[v\ï¹!W…4/Í7Æ×fL˜g·N~8«ì"IK·÷BÏßø°Š|“oAoXŸCàÊaÖ‹Æaes9$¦ÐŠbØó*w`c>ä/T}¿7¨a5åbö9î²~û©Á¬îǪêÍ󧸻ŠRRŸÈþÞœ}t9Ûæ:é4×½»ýs> ÇÝk4¥\cëu/˼fMô©Ïß}©û²)ýPßów÷XSêkÎsŒi[´öbf^ÏHã2*qù¨|úÓóéW{iÏ ÿ&@nyö¢ X Ä5çƒÿ&\Ë2í¸‘ÕÝÝrÍÙgîÖén¹æl[K_Ë8\™ƒ-U÷娳¥îå›|]¬ ˆc…üÀäò'eѾŽYæj–¹þ5°lÀjfóíù³ºŸ›Ü-לZ«»uº[®9ÛÖ²×j¬ÆÓÔ‰úRÕÓÔöÙçµì8kéþµË¬f¬ÿí¢¥_¸Ëyý–Ô|ZòÚ—³Ï캿Zï³ X6`Ù€õ -,-qM(¾Z@ñUyg롎•øpz9Ö"=G´kQ,m±ûàòŽÑùM¼™‰q‰BÌ?ÑÕíçsá>8|ð‹YT4ù¸‚Lc…õï:©É§¡ºígtágd÷‘{}t°ìPw&bñî4„E3IFãel±ûàòœÌHÒ¼ãéÜÍ8³†‘c5áƒÕÙ(+ffŽ=NÝŸ¹YÑV¿9ƒJC Õ”ã®`¥ºT§»í³Ë]¾÷ì©ïÏÖږⵑ™L‹‚M;vÂ×k#¼•>Ç».ÓØç³‘a>œøbù•®Ø¾2Rg¹vÁ*9!ˆÇžö8mä³ñb:,“ÇÑuë.P5tþÙã¬Ãž7ì¹³%ÆÀYÀúþÇ%øÍ d ží…9‹–bÅÒX²hª-v\¶1°f妄ـT!+äÔqeË(àºS±L¤» Û6Ûã´)ï袓1yâP ÜCõhѵtM]»)m²Ï±çZwÆÀÿ)uV\!¼›»IEND®B`‚bitpim-1.0.7+dfsg1/help/screen-importphonebook.jpg0000644001616600161660000011734210111556437020310 0ustar amuamuÿØÿàJFIFÿÛC     ÿÛC   ÿÀqX"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?>=|ZøÑÇ?h¾ ñõÆ›e²tëM-â"…DV¸"R­ÏrƒirsŠàæø«ûN[ÙAvÿ$h&²:Š21“ÌAïÔ#;Ô6à§1rràzÒGÿûð!Ä~$ñjfw }ÜÇïû®Iî{Ö¯1Ëmð¯üõlOwÿ?cñ öÔWL0xûqÔ­e½¶Y'‚"ÐG·|¾%ÛÃó¶µ_þÓ6—χÄC©ÅÚ[Kq¶áÌñÄâ5;äÌÊ<áû¼`³&@¯O—öðt÷+q/‹¼i-¿˜³I©£8l†ÜÇrϨµ>OØSÂ2´ž/ñ¤Œ°½º—ÔБ}øÆcû­Ýzâ¥æ9uþÿà>­ˆîÿð#Äu?‹?´VàÍSÄw~?¸[m:UYÑ …; lÜÄ0Qò‚¤Û°3]-–¿ûM_iö³Å㻯4É0»Þ!ÛFEp¤K³lŒÑÈíµ3þ¬àžqèÒþÁ~¸&ñ?‹¦ …Dš„l0 „…‘Ž˜$UˆaÏ [Û}ž/øÒ;+ÈòST@ž_÷6ˆñ·ýž”<Ç.kH¯üÕ±=ßþx?Œþ4~оÒ¯¨xêé´©5)´È.PDY#Ýóye`ŒA=q\zþØ_è}Ô?ïÜ_üE}Q}û x?T‰"¾ñ_Œo¢F2*]j)*«¬F@'Ö©Øáèÿ˜Çˆÿð"þ5[C3Ê’÷à›ÿ!áqwÒOï>h_ÚÿãëãÍCþýÅÿÄT‹û^|b?ó>j÷î/þ"¾–°'Ãáÿ1àD?üjœ?`‡ãþbþ"ÿÀˆøÕWöžQÿ>×þ…õ\gó~'Í)ûZü`ó ÿÂ{©GB±còÙVö¶ø¾OüZ‡ýû‹ÿˆ¯¤ìàÿ1ÿàD?üjœ?`ÿù‹x‡ÿ!ÿãT¿´òŸùö¿ð/ªã?›ñ>r_ÚÓâñÿ™æÿþýÅÿÄT‹ûY|\?ó<_ÿ߸¿øŠú,~Â~óñþCÿÆ©Ãöðÿ˜·ˆ?ð"þ5GöžSü‹ÿAõ\gó~'ÎëûX|[ÿ¡âÿþýÅÿÄT‹ûVüZ?ó;ßÿ߸¿øŠú~Ã~ó×ÿð"þ5N°÷GüÅuÿûÿÿ¥ý¥”ÿ"ÿÀP}Wü߉óÚþÕHÿ‘Úÿþø‹ÿˆ©ö¨ø±ÿCµÿýñÿ_AØ‹ÀÃþbš÷ýÿ‡ÿS‡ìKàqÿ1M{þÿÅÿÆéie?óíà(>«ŒþoÄðý©¾+Ÿùo¿ïˆ¿øŠ‘jOЧþgKïûâ?þ&½ô~Å>ó×ïü_ünœ?bÏùŠk¿÷þ/þ7KûK*þEÿ€ ú®3ù¿ÁWö¡ø¨zøÎûþøÿ‰©öžø¤ær¾ÿ¾#ÿâkÞìaà¡ÿ1=wþÿÅÿÆéãö3ðXÿ˜ž¹ÿâÿãtie?È¿ðUÆ7âx@ý¦þ(²|e}Èì‘ÿñ5$_´¿ÅP?á2¿>챓ÿ ×ºØßÁcþbzßýÿ‹ÿÓ‡ìwàÁÿ1-oþÿEÿÆèþÒÊ¿‘à(>«ŒþoÄðåý¥¾'Ÿùœ/ïˆÿøš•iO‰§þfûßûâ?þ&½¸~ÇÞ óÖ¿ïô_ünœ?d/ù‰k_÷ú/þ7KûK*þEÿ€¡}Wü߉âcö‘ø˜æo½ÿ¾cÿâjUý£þ%Ÿù›¯ï˜ÿøšö¡û#x<ÌGYÿ¿Ñÿñºpý’¼ ?æ#¬ÿßè¿øÝ/í,«ùþƒê¸ÏæüO_Ú3âIÿ™¶÷þùÿ‰©íñ ÿÌÛ{ÿ|ÇÿÄ׳Ù7Â#þb:ÏýþÿÓ‡ì£á!ÿ1 cþÿGÿÆèþÑÊ¿‘à(>«ŒþoÄñÅý¢>#Ÿù›/ï˜ÿøš‘hoˆÇþf»Ïûå?øšöû*xLÌCWÿ¿Ñÿñáû,xPÌCWÿ¿±ÿñ¿´r¿ä_ø ªã?›ñ<…h?ˆ§þf»Ïûå?øš‘hˆg¯Š¯?ï”ÿâk×Gì·áQÿ/ú·ýýÿˆ§ÙÂÃþ_õoûûÿKûG+þEÿ€ ú®3ù¿ÉWãïÄ"äi¼ÿ¾Sÿ‰§ÿÂøø€ägÅ7£›þË^²?f? ùÕ¿ïìüE8~ÌÞòýªÿߨÿøŠ?´r¿ä_ø ªã?›ñ<©~<øüÿÌÏwÿ|§ÿR/Çoù™îÿï”ÿâkÔÇìÕá…é}ªÿߨÿøŠpý›¼4?å÷Tÿ¿±ÿñ¿´r¿ä_ø ªã?›ñ<½~:xôÿÌÍwÿ|§ÿR/Ç/ù™nÿ$ÿâkÓÇìåá±ÿ/ºŸýýÿˆ§Ù×Ãcþ_u?ûúŸüE/í ³ùþƒê¸ÏæüO3_þ;#þF[¿É?øš|mñÉÿ™’ïòOð¯J³Ï‡ü¾j_÷ñ?øŠpýŸ<:?åóRÿ¿‰ÿÄQý¡–"ÿÀP}Wü߉ç ñ«Çþf;¯É?Â¥_7?ó1]~Kþèƒà‡‡ü¾j?÷ñ?øŠpøáñÿ/zýüOþ"í ³ùþƒê¸ßæüO=_Œ¾5?ó0Ý~Kþ(øÅãCÿ3 ×ä¿á^€>èþ^õûøŸüE8| ÐGü½ê÷ñ?øš_Úgò/üÕqŸÍøœ ü`ñ™ÿ™‚çò_ð©WâïŒOüÇî%ÿ îÇÀýËÕÿýüOþ&œ> hcþ^¯ÿïâñ4¿´2Ïä_ø ªã?›ñ8dø³ãIþߺ9õÛþ(ø±âóÿ1ëŸÉ»að[Dòõ}ÿÿ‰§ƒ: ÿ—«ïûøŸüMÚoò/üÕqŸÍøœZüWñqÿ˜íÏä¿áR¯Å_ùŽ\ÿã¿á]ø9¢ùy¾ÿ¾×ÿ‰§„0ÿ—›ßûíøš__Ë‘à(_TÆ7âqëñKÅgþcw?øïøT«ñ?ÅDÿÈnçÿÿ ëGÂMËÅïýö¿üM8|'Òü¼^ßkÿÄÑõü·ùþƒê˜ßæüNU~&ø¤ÿÌjãÿÿ ‘~%xœõÖn?ñßð® |+ÒGü¼]ÿßkÿÄÓÇÂý(Ë{¿ûíøš__Ë‘à(>©þoÄæWâ?‰ˆÿÅÇþ;þ"üDñ!?ò¸ý?ºAðÏKòÞïþû_þ&œ>iƒþ[ÝßkÿÄÒúþ[ü‹ÿAõLoó~'<¿¼Fæ/?éþ"ü@ñÿ˜´ÿ§øVøøu¦ùouÿ}/øS‡ÃÝ8ËkŸûé—×òïä_ø ªc›ñ0‡|BÝuiÿ1þ*xïÄÿ¬ÿ˜ÿ ÛÓÇü¶¹ÿ¾—ü)ÃÀ¶þZÜßCü(úþ]ü‹ÿAõLoó~&:øç^?óŸôÿ ‘|m®Ÿù‰Ïùð­aà›ÿ-gÿ¾‡øS‡ƒ,‡üµŸþúáKëÙwò/üÕ1¿Íø™‹ãMsþ‚sþcü*EñŽ´zêS~cü+HxBÈËIÿï¡þáá;1ÿ-&üÇøRúö]ü‹ÿAõLoó~&zø»Y?ó›ó*ø¯X?ó›ópx^ÔËI1þñá»aürþcü(úö]üŸù*Õ1¿Íø•GŠuoùÿ›ó©WÄú©ÿ—ù¿:œxzÜ¿˜ÿ pРÇ'æ?¯eßÈ¿ðTÆÿ7âD¾$Õü¿MùÖž­_\Í7u,‹- S&ÐH#©:Õ1£B?ŠOÌ…2ëAŠêÝáûMݸ|öÓ´OŒç—…lfTåE&Öžé­<6.3NnëÔà,>?IñÃï.“cw¤À÷M§Î/§ 3c4ÌB;Sr.É/ÌŸ)ÍÑjþ°†ÆâöK­NîkKy¥„]ßË*+ù.™ÚÍ‚v³ÆŠùù»ÚÎç· /uc¹Ôÿä#sÿ] p#Ä~"³HR[¹w¾–Ì?ÙÜoXÈPø_ºe$²“ò*§\°®ûSÿÏýt5[5Ìjrñf¯â-]Q´±g¦¦Ÿ òÉ4G#ܰ!áMà #)sÆ:æ¹mgâ/‹¢ÒÜiú\rÞH—RGqý™såDZU~bÁƒž½@¯X$š7SNàp:o޼A©Å«8ðûÂÖ÷ðAj’E*y‘<Œ­¿*y@¡‹.@8ÈåÐxÏ_›Ãº¢t —7O"\ÚYl0rP·8g;{šï2Oz2}içö¾1ñ^£$Z6“¾£- {¨dhã‰A;Ø+dž6çpœàt§Ùø÷W¿ÓµiãÒ“ív¦–1¬*ŸËesŒ1Ø å8àò¦»ÜŸZŽ8c„¹Ž4Œ»nrŠãêqÔûÓÌbøãDÿÃÖ¶ï4eÓˆåòâ(äò€Æw1—Ëà³qò®¶¡â¿H·¢ÎÆÚÉ-§ùî.¬ç˜Ã((.àÅ—*AA ã»êAî:J\ŸZ.¥ø×ÄZŒö s£,M©½³ –C$*ËʕȌ€[,ÿ)ØqŒŒ-ÏŒ|K7‰ï´Ë"µ·¸(·W6ÓcXdrr Y‘UH üƒÆ{ÜŸZ2}h¸yqãM}´½AìžÈÇ}g“œ­$¼»g 6öEê謽ÅP>+ñ­Î·áÛX¬ÌVwjæéÍ™Wà‚ÌedA´¼ ŸEåWÔ²}hÉõ¢ác€½ñ/Œ¬oíì“K²»Øˆ..ü‰¶3”‘˜¦ÒÑåãžò/N†õïŠõ«oÚiÑéô©®–ºò˜)‚7,€œ9û˜ÇR;ÑšWÏÛž)›Åko¥ÅýŸku4s¶—÷±+fÇÎ7îs€¼3Q'޼[  %É‘Q’@²Ä¨Yö:0qœÄÌ…ˆá•$eì+Ñr}hÍ;ç7Þ>ñ™h÷7Ze¥´M4p4ÐÏ”Xó3$É´¨s“/xƒÅ>)¶Ôn¬´Í&PTE}&òŠ/0;(ûØ)"w4}‰®ÒX#¸ %% C"†ÁÏz“4€óGƾ)‹_°ÓcÒãŽ15¨¼»S²25ÊÇ!’ì$òIR äEGÅþ*ŽmJ|×&‹W+©GdaXä—txPò¨NÝÅ‚“ÆH=+·Éõ£'Ö›x¶ú×Úž«sh‡ì7;Z4†Tfˆ2ïUVåäPH|¬G£'Žu›;öŽëC‘-ôOåÛÌïˆ˜Æ PU„޼(l65Ü2‡0 nÁ ;'Ö€8ßø¿XÑæ¿[m'ÎH`ˆÂL3I½œ¨2ƒZ!—!þRGŸáOx«WÒî/u/ Y ÅŽ”k*IæE" Ë޲nܸ€§ïgBÉf˜Oü%>!žòÂÒÖÂÖGºEj{k”…2×Ào,ù9È^j½‰|_w§³§[C,꯬öÒâÜ,JάA‹6à½1ÆAÇ=öO­¤5¥jºûC~u+;A$Iºg 9 ÊAÞNz1ØûñÏxCÇ>&ºÓ/ÛZÑŒ—VzZݯÙm%ˆÜMƒº´dÓ¸ŽoÁ^#Ô5ûkßíM?û:ê™"HÖ94k·3}î[ã8?(Á®Ž—$ÒRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEG^ÿ©ÿ^sè¶¢{þ@§ýyÍÿ¢ÚŠÒ#GÄÖÚuÕÔ÷sÇmƒ$¬Gâi‘Ÿ61$:Œ¼ƒÛ¯áU¼i¢-噸k]Ò1¢å— ®G¾ÿPFAâ'ø9e&£=Ü:Æ¥hefp°È”Ì;'÷w–ÜÜ|Ŧ9‚B¹Îœ{SPù„„;È$¼àƒ‚> õ¯=Ô~ éšÒÕµtOˆÂªoù¡¥29~@bÙÚrʪ1LOÚÓUmu˜®MÎû]BÄ['™+jZ|öŠ«Ï9•tý5SCð´z&‘q§-íÄñÍq%Ç›7ÎÈ]÷3Ôg'“Üô^ëDðòxwYÒ4í:{Hµ‰åžúin^i¦2!Œƒ$ŒÍ…B1MZÚ†£â"|ùgÌÁíç§4Ëyã»2ˆ$IŒNbFÁ¶8ê­Ž‡Ø×«ü%´×oMÕö§uáí§ýâlÊLŒ6C)ÎhV¾¡¨è5fÓã½ušÒÞC…7°½»}í£+ R2xö©^ê¤hÞhÒE(¥€ ¹!?Ú ëŽ*ŸŽ|1¤xÏCÓ´$†}+B³†8ÊÆSèãR=êw)àä•®ü ±}]õ µ½Fâw‘%-.ÒÛÕÙÃîëæÄoë·Ž´;§¥I"Å*DìYF8fÛØñ‘ŸLŠÌÕÙø[X°Ô ¿»¸6vMcS±q°ˆÇÞb[ËÈêîrr1·©ø#@ñ6¨n|AÆ¡iöe¶k¦h¢™D›ÙeÚÃÌ(Ñ0(ÊNGJj×ÔÍ5ºŒÃ¯º$>xK…1:¦Ë+`®231žjqRr3Óµdü@ð¶™ñUKËÄ’0‘¼"4 öù‘°îµr½Õô®./ƒ‘é:<¶Ö•ÅíÔ—IqçêóÉ(S».ÓóŒ Ê´ÑåuƒËóXGæ0DÞq¹ˆ$êp DZªz–±–öÑËÔó\³$0YZKs+¥› ³`I8ÅqzÁ› [³Ô“VÔ¯$µ»{ÄKÙLß;+«X»¼Ì¶ÜUxç³Ôt -vh>ß=üÄ“&t˧µŸ.›r“FÊñ‘×*}ºBµõ A5»3¥A¨Ë#ÙÙÌqÞÄöå¹#î¸ã"®—Q,QdªÍg—ˆÀÈÎ=E7Ä–6zžŸ¦Xi0¦‰e§B–öÐC1Å£ E\ð¶:ö¯2ÔgýýÁM[VµEpáaºqTÀàлyQœâ‡k†§§K*AnóÊë 4¬@U©' Å<Œ y…ïÀ=&îâþAªê)ãe­šBð¨Á,díI,§ Äœæ½AÜÈìÇ‚Ç4†6Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  :÷ü€5Oúó›ÿEµkßòÕ?ëÎoýÔV؉‡Ä–ÕuoŒº‡íÝý©â¿if;–Kp/ìæó¡þ;b;ObéÒ§±ÒôxWVÓ´; weæe—J¿•ÞBêÐú1]|Þ&³Yëm]rr3¡ß?ïÍ…ãÜç?á[ê?ôP!x¨÷â{oþ3X°ü>ðdqίgâ ^{G²‘ÿ²ï•¼·,_ieI,Üç<œÏ iÞðPt›MrQ]$Òoœ¹ÃsÞ99=O”jq?á[ê?ôP UÏøVúýÿßëoþ3ZW¾!¶—RÒÝ-uvH¥¹%÷Ê Lü±õ V‡ü$–¿óë¬àŽûÿŒÓÔ/ç;ÿ ßQÿ¢â¿ûýmÿÆj;‡÷––òÏ?ÄOÅ J]äyí€U$ŸÜ×N¾#µaÅ®°yÇ÷_ûóU5]CMÖ´ë­:îËY’Úâ#¨º-ú’§ÜC‘õ£P¼{œ†Ÿ¢Ûê·‘ÙÚüPñ<·¹ÆXRUŒ6ÒÎn Œ|ÀsZËðçPa•ø…⦢{cÿ´j炼/­Üë6>"—S¸€A5Ëh÷»D¾o?èøÎïlcŒb´¼5máÿ ɨI§Úkk&¡(šá¥Ò/›s ãÉÂŽOÍ…ãÜ‹þ¾£ÿEÅ÷úÛÿŒÑÿ ßQÿ¢â¿ûýmÿÆk ÿ„¢Ëþxjßø$¾ÿã4ÂQeÿ<5oü_ñšWax÷9;¿j_ið¯ÄlžGWÌÖÙÀ˜c÷> UÏøVúýÿßëoþ3ZWÞ"µ“RÒä[]]’)d.ÃD¾ÂƒŸÜú*÷ü%_óÃVÿÁ%÷ÿ§vs–Ô|q¤ÙÉwwñÅ‘A72¼y8*ÀXœž€U´ï Ç«Ï,6?F9çóƒèk«¼×l/bT)­BÊë"I‹zYH ŒÀGQÜW'§ø+ÁºUñ»³ÓõÈ'0¤"õUrã!­ÎNXòyúb‹°¼{“·ƒe]M4ãñÅ_lxÌ«’ Ž¿7‘·<3œq€jçü+}GþŠŠÿïõ·ÿ¨|#¡øgÀñÇ“m¯Ç!EIô»ùzã'- 989ç=+¦ÿ„¢Ëþxjßø$¾ÿã4]…ãÜâ5ojöZç‡í#øâŸ*þy¢—t¶ùÂ[É Çîxù~¯ÿ ßQÿ¢â¿ûýmÿÆjMo\†ãÄ~ž+-aá¶¹¸yœh—¸ZÖTþç»0nÂQeÿ<5oü_ñš.Âñîsÿð­õú(+ÿ¿Ößüf©_xFM2æÒÞëâ?Š¡šé¶B¦HcÀäˆQ’X€I©Åu¿ð”YÏ [ÿ—ßüf³u›+]ŠH®_Ž9`{i¾“|ždoÊO‘žÃ‘ƒEØ^=Ìx<5ÕõÕœ?,†{×1ÛÆ¦) „c?rÜà Ë’pG5ÙÂQeÿ<5oü_ñšÌÕæÐõÉàšîÏXy †x"a¢ß‚P¡ÈýÏ ò.r(» ǹHü7ÔGüÔÿßûoþ3Gü+}GþŠŠÿïõ·ÿª¾ ðß„ü<òèÖ:幚!#i7Æ5A#È €*üÒ9ù@Î@9 ¸ê¿á)²ÿž·þ /¿øÍax÷+[xZMSZ–ÆokqEc§Zö÷KLìdÝ$Ÿ!Ë£¦µ[ÿ„Ïþ†¿ÿàzÿñº½ Ê³øŸU‘C…}2Í€‘fê¬Ø€EY+.ã+UR©$£kY÷G“Z¤ÕF“2?á³ÿ¡¯Ä¿ø¿ünø@ìÿèkñ/þ¯ÿ­z+ÒþÈüþŸÞ¿ÈÇÚTþfrú¾‰¡h>WÛükâ;o7;7_»ÏH½ÅF‰¡kÞoØ=$ê×wòÂ[í‹çÂc™J°Ú¹ ü¬W pH\œŠçÇ€þ%i—reëÚƒ[N•¯nmÌ ‹T„µppÈ\}ß}Ù8KüYžð•Ñoà¶D‘•RÚÔ——~b ûß¹³‡ÁÉ9Á€(6«ñkQ²¹MOIÕ>ÒÚ}Ü:8-£H"ò˜=›*VOŸ<\樣oRÐ>,Üé«ok¬ [IJñ³1¨Œí ¬mÆÒqù€¯TðÄÖº œ:”’Ë{•’I™YÛ“‚Åx'é^Owâo‰6óJºO†õ{ hmîá·šQ)˜­!¸ûžY œ­2ßÄ?ìõ›‹§Ñ5››WXí–+P}¡Ý 1$ùN¨H#%G{~hÍrß õ={Xðu׉ln4Ý]ÑLÖ×KÈ­±wdFJãvì{c<×SPHfŒÑE Ñš( 4fŠ(Í¢Š3Fh¢€ Ñš( 4fŠ(Í¢¹¯ˆë«·ƒ¯FƒöŸíPð4?dÛæ`L…ñ¸€~@Ãò(:\ÑšðؼUñiô &ЮãÔ†ÂLV¶¦"rw™rqß äà€*Üj_õŸ G£§jÖž"PIãŸI··†ßÈG೎JäUX®Sß9£&¼Çã]Ôn?±´C‹còä“çde~=vשü'‡Y·ðÄ‘k‹©}­.œ#ê¦3;Ç…ÃŽÊrséÎxŠMX±±ã[]JûÃWPi%¾ÜÍP®² TÈ»‰Ü—9kÉß៊žÆHŒ1³‚D¼9€¦™U>pH@ÃnHË |¼8õ?Üêvž½—G¶¹¼¿SØ,öùΞjy72Û7à’9Åy¨ÿ§ÑuK}?Jñw)qm<û!7þ^~Ð ¸b‰ì|Ù Æ)l5±{ÄŸ Þú i"µ‰Jù‹µf_˜®îAÁ$)¥r’¹ôMׂø¶óâ>½¡èËm¥ëöšµ½ÌzöâÞ§€ÈJÆ6Ïvm\ö99õ«cÄ(u_µ\éÞ(¹„@±5¿›nFò™]ÿפ¶Ìx Ð⃔ú&Œšù¦ßNø Úmµ½Ì(‹‡yç‚x7ùe”¨\ËÔ dÁã-Ÿ¦‚üCKÛÖ½Ó»ü(š^ÿ’Å{ÿ`y?ô¡+Õkʼÿ%Š÷þÀòéBWª×c3­ñ…QHÀ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šñ¹?ä£x£þ½mÿô9êÒ|Å"èwš¸–öòËL’x™®íš6ÝËì ÃŽ£©¬Ý;ã.›áÉÄ1½Î“%×’¤å 3;`Ä|¡ÁÎpy’1^Ÿ×!õ_am îcì¥ÏÌ}741ÜÂñMMŠUã‘C+Ôx#Ú©¿‡´™ZF}*ÁÚBK–µŒ—ÉçŽyóÜ^-7Å»¨lc¹…Ü¥ü¯Ý©Q÷ßhÜ! ç*ž:UvøÉ}œ²Ë5üWÌa6ÌWæ"_+å“ýYù³ò†ÉÇJàYGáv5µÏvM&Â;¦ºKTºc¹§XHN1’ØÎqV«æÁûAÜKos<#Wš;xåv F3±ÀÀËwS¼²~*{ÏSi÷7pÝO¨Àm’iØÇµ• ƒžŒ°OØÈ©u9·cåg¢øÓþF ¿ÝOåXuBÓÄ2x’ÆÏUóÞU¼‚9Ñœ‚ÛYC.qÇCRùÏýó_‰É+W­:±š´›}züŽP“mܵJ¿y~¢ªyÏýóBÌû‡Ìz×?ú¿_ùãøÿ‘?W—sÜ|gÿ"½ÿýzÍÿ¢šŠòI%žÝY™]œmn¤àÀà”¿ðˆéŠðÚŽ xdT7²íÝBÃw'q$ç¯|Ñ|wŸàÁù~%ûë­3Maååµ³`8ŽiN pyö5%Üö6’.náŠE LR8mªH=2ÄêN+6ÿÁÚ«qÓéªìŠ„Ê«¨`á\†Ž‡ÔŽ„å·þ Ðõ;Ǻ{9c¹‘&–Úg‰™RA*ƒ´ŽŽ¢øï?À-ƒòüM8ä°žì[%Ì/rCe/…8n:ðAϸ¨¥Ôô«OšMFÚ™×-*¯Ì£.> uª°x[JŠûímÅÍËîfyIÛÏÞ'Œçªµÿ€¼?©8žãO‘¥+ý Jáó*•q¸ºAÀ^ƒŠ/ŽóüØ?/ÄÚ¸šÎÌ¢ÏuãiTHárŠ2Íô’{TpjmÌÉ 7ðK+çli*–lÇèAüESºðž‰¨-ªO¦‰¢¶ #‰²P†P§rç ÀœÕ]3ÀžÑu5 [öìåvl s“Ï~<Ñ|wŸàÁù~'EöUþñ¥[EÜ>cÖµ'£R­Òn7Z›ã¼ÿ­‚ò=§Æò+ßÿ׬ßú)¨£Æò+ßÿ׬ßú)¨¯;.ÿvÏóg%á/ë©¥àÿù,W¿ö“ÿJ½V¼«ÁÿòX¯ì'þ”%z­v3:ßQEŒŠ+—·øá[ ë ®Ù®šŸÏy6¡™w`ó‚U±Ç8â€:Š+'VñN•¡¾ËëØ­ÜÅ$Á\òUGаãÞ ‡Ç^žæX¯j’ÆŠÉ L©‰e ¹Æáå²¶GLÐ7h¬ãÏý¾ÞÈjÖÆæá%’þ°FèŽô$4ˆ09ùª3ñâÖÊäj°›kÖÛÃ;÷FbÛ±€¢0X±à@Xèè¬6ñ¿‡Ä>pÖ,žeŽedº %‡ÜÊ3î* þ"xnÖæH&Ö-b’9þÍ!wÂÇ'“çfè3Ì2yÈîh£¢¹ÝKâ†ôßjÖmSlBsµ÷â3*DŒü»åŒgý¯­iéZ톶×KcuɶÃ7–s±½(°ì_¢Š(QEQEQEQEQEQEfø‹Ä6Ñ.õmR³XZ®ùdÚ[ä’HiQ\,¼'qcí½åÍÝœ³Ëmŵ”Ò#H‘ù…rŒ¯+Ÿ½ÐS§øÏá;uºv¿™¡µ“Êžhí%d‰¼¯4`¸PqêA§f;3¸¢¸{Œþ½gµ»¹»·/­ì¦‘Éô,UNÐ@<ž3ÅO§|ZðÖ¯1†ÎêâyRkx$T´—÷O>|°ÿ/Ë’0Ièx4Y…™ØÑE„UmCP·Ò¬äºº”CxÜÇÜ€õ$îH®Bçã?…¬U åÕÕ‹»l]XÍîóš»Jç;Ôþ=ÉaØî(®W[ø›¡xv%›P–ê f³ûp¹û­‹r©Ë…À`]IRrN0 EÅ O¡G¬Áy5Æš÷‚Ë΂ÖGÛ!}€²…ʦì Äc‘ÍafuôWoñ“Â÷RÉ 7W2ω¦…,¥/’O-w¿/Í€}23]½ X(¢ŠQEQEQEU=_V³ÐtÛBþu¶³·]òJýtíÉ$’@®NŒþ» k›»©%¶ûZÅŒÎâ3ËÞT.@ ×==(°ìwW#¬|UðÖƒl·×ÏÕn÷›ydŒü¼6æ©äs‘Å>ã⇇l‚}®îK6}@i‹żˆÆrQ‚3´‚nœŽh°Y]ÃCñŸÃ7öÔf´¬ž|ZmáS7“Á ÉÁ‘×¥w$`â‹‚Š+™ñŸÄü?Ç]½6Båd1)œ1A’>PyÇAßÒ5Ä\|e𭦣sc=åÄð›‡YÊÄ"ów«mà ¤t=Hi²üið´vq}=¬w…E«ÜY˸ õd%~e ‘ÆHiÙŽÌîh¬/x×KñEÔ¶ö pϵ½æém¤)ƒÙY€ ­AÖí!-|¥üwâõPYŒ ÔÓ×/†µp£þ%w?烅{?üÔ¯ÿ×µ·þ‡=lf¼…™Oˆª£ïoÁÖþ#þºÿÖ¯ÿ@»Ïûðßá\?~ x“Äú•ÍíÖ£¤K=¤V»ÒÎF’’3æ' ¦?09GÇ%BàŒWÖÙ£5³â¯zkïfJMl|“àO‚Z÷ƒ4¿ÚK>§¨I­ßÏz·&ÕÑí¼ÈÕ099 ®ìñÉè*Ä |So„ [{im%!tù·~éÙ™TïÀ hÎp:澮ͥþ°ÔÿŸkïaÌÏ”|Eð{Ä:ö¥âëX†ØB±4>CeJÈ: †ê9}Óü"®ë¿ ¼I«M HgΑ†K‹9ج…ðH!Já¾î:’GõhÍ?õ†¯üû_{f|Ÿ7ÁßOá[­%îu6žyŒ¿jû# åÃ|ÀrÍÇ'w~˜U;àþ©i­Üj“Å©]]4Ò¼3›vYbGE3÷H1׺ƒ_TfŒÑþ°ÕÿŸkïaÌÏ“µ¿„~&Õ⹎n„nÚt¯µfˆF3óýàrÅ—< çcÿµÝïT¸šÚòäÞÈ’lΪ…WòNIÏä«é_LæŒÑþ°ÕÿŸkïaÌÏÿ„kWÿ ]çýøoð xkWÜ?âWy×þx7øW¿fŒÓÿXªÿϵ÷±\ÃñŸüŠú‡ýzÍÿ¢šŠ_ÿȱ¨ÿ×´ßú)¨­rï÷hüÿ6zô?„¿®¦ƒÿä±^ÿØOý(JõZò¯ÿÉb½ÿ°<ŸúP•êµØÌë|aER0 ‘Ðàú׎Ù®Átë{ñ&¦¶pK$Ɇߤ»'Ëɼs‚qœz ö:)¦ÐÓhòýwà¥ß‰áXµoë—ñ…•$†ÕVT‘ƒp±Ê] ýÝ£GRýàÕ¯Åí׊µYnvÙͽ¯Î¾H‡ û®v6þuëÔQÌÇÌÏ&“à ÊtÒþ-Õßû9JÛ†ŠÜ…‘°ß»ù¾x£›?2楼øý¡§>ãÅz“Ø€Ê KETV„Â@ÄYÆÂG¶kÕ(£™‡3<²kgykoâýZÚ+©Zwò`¶B®ÌŒY‹äù£Sòã‘îj¦­û:Úë–²[Þx›R–)&[†fµ•còÃÿªë³åü¥zõ]‡3+ÐOŠ<;¤ý²m=nã15ź¡uS׌ŽëZŠò­?à8Ò´k&ÏÅz¾Ÿ:KmmD‘U]S1£ 89õ¤²ø ºuÕÅÍ·Šµ(§Ÿ~ç¶§£1’‹í/Èé½ÿ¼sêÔS»+™žS¦|:=¸‚ÏÅú¼6ꡱDQG€¦,tw?ï1=jo ü ‡Âš´öþ"¿ÒHetžÚÙ„†5d>^A*î .ÌNs^¡EaÌŠ(¤IâßÿÂU O¦‹Étö‘â‘.`Dw£‘dR‚§æAÔóýSàëBØ_x³T¹È©’ÞØãÍ’|¬±%˜O!ˆ=kÖ(§v4Ú<ÊÿàÕæ«¦Ic{ã]Zâ mVÒ@mmhÃnÆ\dõ#’ð)ºÁá¸cNñEõ¸·#}†ÍG8@ÆìPÄÎjôú(æcæg“h¿³í¾…©[ßAâ]Iç…¢be·¶`þ[ew+“¼ÿ°‡ª‚=fŠ(nânáERQEQEQE‹ã ÿÂ[áë,_O¦´­‰wl¨ÒDñȲ+êÊ~dA¯>¶ýžà³»Šæ?j^|`ÍmjAÄþxÈò°yÏ>˜é^·E;´4Ú<›TøÚõºGªxÃU¾a·2=­¢³+J%còÄ0K€xúTóü KˆcŽO]°[•»,l,÷¼‹)˜n's#ÚN3^¥EÌ|Ìó-चC¿‹u7Š9Rm“ÛZÈ ¤"±Ýç{³gװǦÑE ÜMÜ+…ø•ð¦ßâd–ïV¼°ŽÈ9Ž;hâ#ÌlbLºqÁƒÍwTRØ[Y¨| þÔ‚(n½k¨¢Š[‰»ž9ÿ5+Ä¿õímÿ¡Ï[ÿ5+Ä¿õímÿ¡Ï[òÿ÷™|¿$sÖþ#þºQ\!EPEPEPEPEP'äXÔëÚoýÔQã_ù5úö›ÿE5öywû´~›=ŠÂ_×SGÁÿòX¯ì'þ”%z­yWƒoŒw¸ÿ‰µ):uÕ®”ò¬«sÊÎ#ª [™‹Ó‚Ûùã `…7ößþÿÛõåÛñÿ€~òøFÚëHð啦«¨¥õôJD“y…ø,J®öùŸj»Û–Û¸òMký¦ùêŸ÷ЯÀÈ®þà »­Åü’¤N²,ï;o"FÚÀ9M€JpÛ°HçZÕ¹Ô'6\-–ï܉¥%Âã£çÔŽ3ÓŠ¸ð÷7ü¼kþÝÿ‚KÇÛìþ?ðèãí0ÿÏTÿ¾…i‡þz§ýô+ù½ûKÿÏwÿ¿‡ühûKÿÏwÿ¿‡üjÿÕÏú{ÿ’ÿÁ'ûGûŸüúBûL?óÕ?ï¡GÚaÿž©ÿ} þo~ÒÿóÝÿïáÿ>ÒÿóÝÿïáÿ?ÕÏú{ÿ’ÿÁíî~?ðé í0ÿÏTÿ¾…i‡þz§ýô+ù½ûKÿÏwÿ¿‡ühûKÿÏwÿ¿‡ühÿW?éïþKÿ?´¹øÿÀ? xWS×õs¤ßXÛMöcwsJé=±çp„¯ 曪íkðŸ |Yæ¨á+Y"ÕQVfkÉ„‹?'<ÞeË7EîûÀW⯄u-lÄZÕÜq¡¸u{i%–DãiIƒ©Ý¼ 1¸ãkë? šÛN1¤¬œùÁ„á®AºÜ½ÍûÏÀ½ŠÊY+·´øüÖ>ÿgñÿ€~ÈÛøÆ1isÚÂlÉr‘"ÚêiwmÈ[Ëßp£fâ 2ó¿Ý³|)ÕÓüõOûèWó{ö—ÿžïÿøÑö—ÿžïÿøÖ¿êçý=ÿÉà‘ý£ýÏÇþý!}¦ùêŸ÷Уí0ÿÏTÿ¾…7¿iùîÿ÷ðÿiùîÿ÷ðÿêçý=ÿÉà‡ö÷?øô…ö˜çªßB±ü[ku¬h3Úé—iã7"Ȭé‘Ór_ø:¿iùîÿ÷ðÿw_õë]Ä÷úÌ©g‹u,ÛI’5RBœ• T:€FpZá¿ú{ÿ’ÿÁÌ.íËøÿÀ?nü-ð»RÑ®ä–òæÒEgiUíæ”:©¹‹~p JcÞFùF2suo„þ²šdÒëköˆ´hl.‘çp³J“G&ãÁȱ=¸aøÉ¯üP¶¼¹O±jÕµ‘-¯eŽ`×á˜n1µ¾I%}«iþ,xz_ÛCözä½…÷C(ăùŽÅƒv’çx¨|<—ü¼øÿl_××oÇþû ¯| ñí„ÑÚx±æ¹:éÖï‹mÛåŸ/iÚ•Hùq‚I›Løa«ÃqjÓÇ¥@.ž©ök¹”!—Ì)´ó¸!Âá\®–oÆoâ¦.ª†ÏSÔÚÈ]ÌÒ2M23DÒÛ²…Ôp«p«Âü¤d)<^¸øµáß;Å nu©…Ä‘=€†úTQ‰eˆa|´)AÁ9ãÿW×üüøÿl_]¿øïáê(Ü=E~Kñ‡Ã²ëºÄwº­½´6¯ ÔbFò°ÃÌtdf–BH` e\(-ÉÛ7†þ-ø:+—÷ºüw Ï;Ê\ù,¡¤å†7ä(ÁÊ ¤ ¬¼%hÿðþØ^]¿øí·Œ¬îõ?Ïmat¶·O$L¶Ýʲ+:g¶ä ¿ð*â|;ðæ÷L»3]^ÙÃ0[i¤3xÓˆFO1…8îzc“ø™à¯‹¤¾—Äú•Þ¥¤AqnÌ—’IpŠOšŠr$ ƒÐèGâ¯G«I+ÙìÏ—öhD¢…ÌlÉ/Ì Ëå Fü°!‚ç=.§ò5jßû¿ý±+ž¼¿üöoÅŸ uØh¯k¯‹¬ôß²5ŒÒ+[‰L°H$8S¸$©ÎA ¹-Kÿ ³T]h‹â™,®_Q[Åš wUs½ˆÞK,ÃwÞ?xòOâ~•âo höV·IwóÇzÒ˧êP]ÔDÀ(“hO)ذüÉ· ’r.x{Ä>³² ¨G%ÒµÀX儽ÄS3&ÝΡú9SŸ”6ÒWlßµößþÿ>¾¿—ñÿ€~ÏÅð¢T’  º5½ÒˆcÁ$ E’W%[9Œ´f<ªà¡ÍzÏÚaÿž©ÿ} ü¼ñ·ÃÉ­LqØÛÅ0ûB¼Úðá€!˜A >ê (ûÄù|äü{¯øNý¯ö²[;M¤À4hPG†TRß(ÝÉÈÉ99ÇG rvskþÝÿ‚—ÙüàÐgÚaÿž©ÿ} >ÓüõOûèWó{ö—ÿžïÿøÑö—ÿžïÿøÖßêçý=ÿÉà‘ý£ýÏÇþý!}¦ùêŸ÷Уí0ÿÏTÿ¾…7¿iùîÿ÷ðÿiùîÿ÷ðÿêçý=ÿÉà‡ö÷?øô…ö˜çªßB´Ãÿ=SþúüÞý¥ÿç»ÿßÃþ4}¥ÿç»ÿßÃþ4«Ÿô÷ÿ%ÿ‚Ú?ÜüàÒÚaÿž©ÿ} >ÓüõOûèWó{ö—ÿžïÿøÑö—ÿžïÿøÑþ®Óßü—þhÿsñÿ€H_i‡þz§ýô(ûL?óÕ?ï¡_οƒ5=:ËÅ:|úÛ™´´v3+†‘~ã,€å”9RGpÁèuu½{Â÷7dYÚÜCb`l.RpÂæFᘰϒтH?w‡švöŸù/ü–au~_Çþý ý¦ùêŸ÷Уí0ÿÏTÿ¾…?ºïˆ|?„­ Óí.âÔ£Ž ~m²´€K¹¤r¬I1d+.{FEÝ;Ä~mþ+øgKé#»û;ÛG–FiÅË)ÇÈ ©$íË—ø£ý_v¿;ÿÀàëëùøï¯Úaÿž©ÿ} >ÓüõOûèWà-çŠ<‘¥-……ÈÔ¢¶D–[$Uq:3 +”3‚»[ ¼;ã/Uîµ-$@³ÞÉ,‘Åo 눓iÚ¨Êܯ'õ}Úüïÿÿ‚_Wµ¿øïÇÚaÿž©ÿ} â~$øbóÆÅmay £¶‹¶”ƒnâXœ:… – Ç+Œ®CÂÍO_ð”Þ ¼¶µã×›ì^LÛR$Û°70ŸRË€z§ ö—ÿžïÿøÖ‘áÞoù{oûwþ /0·ÙüàЛàÍCL±ÓÒ ûki£»…å[y˜Æ±%IJ¸ã—I6ž:±ìrž"ø/®j7š”Öž)ŒËqv×qÝ]ÈYö–…¾ÎÈVc'‚§ïŸ´¿ü÷ûøÆ´¿ü÷ûøÆ«ý\ÿ§¿ù/ühÿsñÿ€~õkÿ /µŸ‰ZW‰›[ŽH,d·v·yv¬ìŒrì å°AêäîR mŸøëÂZÊ]]j±Þ¢é6ö Ævfy#À' ÑxÈç’îHÉ$ÿ?Ÿiùîÿ÷ðÿ#]>Óû÷éÿ=øÑþ®Óßü—þhÿsñÿ€~ë¹ ñ3ÄäƒomÈÿ®“ÖµyìÞwx§9Ï„4^IÏü²zõÚüO3&2¤{?Ðuæßõ°QEæQ@Q@Q@Q@Q@ž5ÿ‘cQÿ¯i¿ôSQGäXÔëÚoýÔWÙåßîÑùþlö( ]JÖßü1ñ âܶ¾(ðî•â;k}*Y!‹V²Žåbc:ÊNÒ@ÆEvßðÍÿè—ø?ÿVßüEq]½ðçÄ›»Ë e»ŸìQBѾxŽKø#v%UÙ€éÇ$ é|OñSÄš$V0Á£[ýªàHêãÍjâcq‡ ÷˜ üÛ@È<Œã±æû»¿—ü9Ðé);ØÒÿ†høGÿD¿Áÿø"¶ÿâ(ÿ†høGÿD¿Áÿø"¶ÿâ+¶[ÙŠ©bˆä ®)~Ù/÷¿AYm.òþ¾aõuÙGü3GÂ?ú%þÿÁ·ÿ^Zß ü2¾$žÎ€^ŸMži…µåƃo…P.õXˆ ¸—«AR^kè‘w18Ýú ò¯|t¾Ót½bm3J{û«]B;{E18Kˆ¡W—¦~V•ÇO­TsŽmœ¾ÿø"úº]ÁÇðãÃÀN'ý›<4 œ´Z5««9™"|€±Ú]ˆÀÀLäî]¸ø'á]7Æþ!‰þxR÷ÃñÏËð¤ Q™S8e…K‚Kä‚á1–(Öíµ?‹¾"Ô/tè<9á»§2]]Á:jG’°ˆŠ°d›æpÇs.99Qñê/ø•Ì|?® mBu¶\Ú*Éy›I0Äcrž2Än!HREk¾òûÿà‡°]‘ÆøCàç„u½SO·Ö~xGB]§A‚d)åîSæùaT†e]§“†#^‰ÿ Ñðþ‰ƒÿðEmÿÄWnnæ¿AGÛ%þ÷è+?í¥Þ_×ÌW]‘ÄÃ4|#ÿ¢_àÿü[ñÃ4|#ÿ¢_àÿü[ñÛý²_ï~‚¶KýïÐQý´»Ëúù‡Õ×dqðÍÿè—ø?ÿVßüEðÍÿè—ø?ÿVßüEvÿl—ûß £í’ÿ{ôm.òþ¾aõuÙGü3GÂ?ú%þÿÁ·ÿGü3GÂ?ú%þÿÁ·ÿ]¿Û%þ÷è(ûd¿ÞýÛK¼¿¯˜}]vGÿ Ñðþ‰ƒÿðEmÿÄQÿ Ñðþ‰ƒÿðEmÿÄWoöɽú >Ù/÷¿AGöÒï/ëæW]‘ÄÃ4|#ÿ¢_àÿü[ñÃ4|#ÿ¢_àÿü[ñÛý²_ï~‚¶KýïÐQý´»Ëúù‡Õ×dqðÍÿè—ø?ÿVßüEðÍÿè—ø?ÿVßüEvÿl—ûß £í’ÿ{ôm.òþ¾aõuÙGü3GÂ?ú%þÿÁ·ÿGü3GÂ?ú%þÿÁ·ÿ]¿Û%þ÷è(ûd¿ÞýÛK¼¿¯˜}]vGÿ Ñðþ‰ƒÿðEmÿÄQÿ Ñðþ‰ƒÿðEmÿÄWoöɽú >Ù/÷¿AGöÒï/ëæW]‘ÄÃ4|#ÿ¢_àÿü[ñkNýŸ~é´Ö?¼+g3)BðhÖèJžÙ ÓùW[öɽú ¥­k×>“w|–—Z“AqibŠÓËá@ÅA?R)¬ë]¾ÿø!õuÙ?áPxþ„¯à®þ&øTÿ¡+Ãßø+ƒÿ‰®#_ø«â½'Sx¢±°’Ó̸‰%´Œ²¢GA»¤ó•ü»ƒU­câW‹ ²Yé6…àÒí¯­žfYÝK¿çR6†r‚v 1Ý…Ûûf_Ï/¿þ{#­ÿ…AàOú¼=ÿ‚¸?øš?áPxþ„¯à®þ&¸ý â‰u?C§ÍmièÒ™šÙ£—0С̇ @v”ìTŒ°&•§Å¿j a6º\w–ÑO˜gxf/så¸a£Ê2Ÿ™r§$ƒ‚ þÙŸóËïÿ‚ÇÈïáPxþ„¯à®þ&øTÿ¡+Ãßø+ƒÿ‰¨¼âK_Ò®eÔ8®à»–Ý–Š ‚¸%˜? `qF1]Û%þ÷è*y$íÍ/¿þý‡¡À|@øGàh¼)u"|<ðΤÈñ&m A‘U¤+³ŠÌØöǯºø3¥ýƒGŸNøAá»çá7Q\x:ÎÖH¢i¤ HhÈ#R3·i,0>qô®µ¯O£é7w«iu©4—–H­4¸þ Tõ"¼ë_ø¥â½+Ä/gžžö æ$sùLí…TÇ€H1·÷#ýÞ~]ÁŠYËŸÚ—ßÿ—AvGžøƒà^„“+áw„®tù4{kˆ·†lË} N<àw[?Í$d*¸bÁFB¿¡ƒÁ1…ø3à‹Ý|ê ׇB³Qf|;,&÷"§ÁbrXêz§ÄEiyö2ѧM&Þú?‰EYë©f ò“³†;¸Æ›âÏŽN­©ZÛézk¬0Ü=·š›<ÖÙºÙYŒØ]Û]ß#äTà°j¥›_íKïÿ‚ÁvGiðRÙ§´…>ø>æÏì*ϨÍáû$yfó”;yF8Šâ<€…œîÁ#iöoøf„ôKüÿ‚+oþ"°î¾/ø€j–¶ÖæÞ}. ö»º·–-ÎÎ"¦N  ¥‰ç':~ø‰â_x‚îÏS°¶Óá¶7 ñÄŒçät¸›;0g\œÄÇ#;Bþ×i^òûÿà‡°]‘gþ£áýÿÿàŠÛÿˆ£þ£áýÿÿàŠÛÿˆ®ßí’ÿ{ô}²_ï~‚³þÚ]åý|ÇõuÙGü3GÂ?ú%þÿÁ·ÿGü3GÂ?ú%þÿÁ·ÿ]¿Û%þ÷è(ûd¿ÞýÛK¼¿¯˜}]vGÿ Ñðþ‰ƒÿðEmÿÄQÿ Ñðþ‰ƒÿðEmÿÄWoöɽú >Ù/÷¿AGöÒï/ëæW]‘ÄÃ4|#ÿ¢_àÿü[ñÃ4|#ÿ¢_àÿü[ñÛý²_ï~‚¶KýïÐQý´»Ëúù‡Õ×dqðÍÿè—ø?ÿVßüEðÍÿè—ø?ÿVßüEuzƹq¤éWw©ks¨µ¼M ´³Ei¥Àû¨¨,{Ey®­ñkÅV^1½ÓcÓm™»IËDÏ'šÐ—ŽÀR»»Œ•_—pcqÎ9¶rûÿà‰ÐK¢7ÿáš>ÿÑ/ðþ­¿øŠ?áš>ÿÑ/ðþ­¿øŠæ|GñÃĺ>•áë› É<š…”WW ÑË声$Ĥ'Þù Œœƒ"œÏ«üOñ­¦£¯ZÚéúkKe<ÑÚÅ*ñ2àýœ<à2ÅK¹ÀظÈ Uý¬ûËïÿ‚/`»#þ£áýÿÿàŠÛÿˆ£þ£áýÿÿàŠÛÿˆ¬Èþ(x´k‹Á³ö~Aû#&ؤt"ràÀ) Œ¯ßÈÎö“âí~ûÄÖöZÅ‚â[•Ž9—¶cDJØxwf~V9ÀŸí{u—ßÿ~ÁvEOøf„ôKüÿ‚+oþ"¸ŸˆŸ¾éRØC¢|2ð’M3.vxNÞì­ŒÊ!'$r3Ô}åöß¶KýïÐW9âïßèm µŒ³\\ÛÜJš„‘ehc @··aBç$GZ•œßKËïÿ‚?«®ÈðÍ3àÞ…Š´ë{σ~ŸE¸XÍ/†lá1®]$ÜC# ÃB’G;«O-6]ß ¼"÷ÐïÜ!ðµžÙ‚\.æ6d Ñ“ç9r?x=ƒEø­âKÿÛh—m²ÛÊ­3J±2ìO,ÓÌÜT¹l–W^sUm~-xÊóJÒ.ge=Òj0Ê’1EÌ,D  ÄL˜ÉÊà(Êî¯û[Î_ü{ÙÞ¡û<ømu•º ¼#e§ù–ÿgEá»+°ìÒŸ5„¢Ê¢-¹'Ç” –ü5ø áMWZ•uï…¾m-ìVh^_ ÛÚH’lF\rF€¤(Îæë´Šž'»Õa‚îÒÖ;vÔVÝŒVŒY uýË/ïNˆ,Ü-q¸î¦OñcÅGË=>ížÞI‹BŽ6’ ³á•|Ù/Ÿ¹Gö·œ¾ÿø!ìdeØé–š/5Ý?Oµ†ÆÂÖÎÒ {[xÄqüÁQTpªÀ­úç4‹»CƺÕÍåºZ]MehòÁ¾jÆÅçʇÀÝ\ èëä1ï›'Þß’×þÁüê~­†þTO·óìú·ç^a¤||ðާš³Mug{¨Å,ö¶O’WHøbB’(b cÜW¨ ¬Ÿzá4ÿŠn§ÓüCK†kÈ`{C2ˆL«#Ê‘*,Z @QÏÈxéOêØoåAí¯Ô§áoŒº‹¼9áýjÖ×SŠÛXšX#Š{r%ˆ¤RKó( ¬g•ÈÉÆx4þw´Š ïn..%Š3[Iû´y~ib¸òÃî]Àà²2kzøJ=:ÊæÆæÂêÖR×û8,Û·‰dG7#ûèk>ÿÆß¬^Qw©xzÎh‘ç6hc’<0VcžT† àÑõl7ò¡ûo2¬?¼%$ºÒI=å¿öI„\,–²yŸ¼EdX]À’ÛvU» }߯Ù[µÄº¤ßgWhÚTµ•‚àFrp‡ƒçDÿpMYÑu_hæËF¶¾Ò¥º–f·…'ºIgž\,Œ»˜–vÁCßø}«¨}/K‘P6—hÁ9PaC·€8ãÐø _VÃ*¶ó&ÓŶ§cowHa‰½J¶Ï ŒƒìjÇØ#õoΑnU*ǵG@8ö¿öçGÕ°ßʃÛù‰öý[ó£ìú·çKö¿öçGÚÿØ?VÃ*oæ'Ø#õoΰGêß/ÚÿØ?kÿ`þt}[ ü¨=¿™Êø³Æ:ƒ¾Õ=ür.›eKwtsrÁv§Wåz/<Œ9™´øéá‹ïí¶†AãÓ£IRE€‘p­mö€G'Ë…ùöüÌv> ñ§ÌòêðÄÚ/2[¹àݼg<¼˜!Áê@â¹ÏøX?.¯.î>Õ¦<Úzüïåðáíüß“ŒK˜W?.î8ïŠVÃ*¶ó'‡âß„¤Ò¿´Zêò+ ˆï;ÙÊ2pÀœÈ;ÿ¹ŽqQ[|Yðö·áí/XÐ^mZÓQÔ?³a.H‡™µØ’ Æ#<…9ÜNkBøhL‘ßèžTÉfó"ÖR|¼ÿ¼IÀ>¦…ñçƒ-të]RÒæÂæÒâìYÃ>žeiÀ“ IéßÖ«a¿•¶ó3føÏàË_ÿÂ=q¨NšÑÞœv³;’£œb>rrûØâ¥±ø·ámGÄÑh°ÏuçLcŽ)šÝÖ7•Ì£ËÉ^ ˜xmÎx«ïãÿê´rêz,.JK4K6Pür¼gÓÔ–^5ðDÞ"—zKjòyL-›Ý˜9@[ çÈ=èú¶ùP{o3®û~­ùÑöý[ó¥û_ûó£íìΗհßÊ…íüÄû~­ùÑöý[ó¥û_ûó£íìΫa¿•·óìú·çYúí埇´É/nL†5xãU^K;º¢(ú³(ÏNy­µÿ°:Ìñ&£¦Á¡ÝI«íM9@óYÉþðÛŒsÛqŽsŒsGÕ°ßʃÛùœ«ñ¢ËBŽv¾Ñµöy^YIc+:¼—¬„pE³0ÜC§A’5Ä9äL2˜äÓ῵iY݉aH†Ã¹””uDã!—Ÿ¼&›ÝÓ¡µžÞ ˆìÝ·DæS\ñåJqÕpIÆjÒxãÁºD+¶kUŽÆÂÞe‘cÜRÞGÛ̸däSú¶ùPý·˜ºŽ­õí>Îh´ûµ¸žá­¦´fíFî]Àÿ*‚£8Þ§îóIŽ ™b/aq’hb fB¬]I^çi‡ gŒTVß|ÿ寫m×þÁüèú¶ùP{0ûyÿ:>ÄŸÞεÿ°:>×þÁüèú¶ùP{uÜ>ÄŸÞÎØÆz³~t¿kÿ`þt}¯ýƒùÑõl7ò öþb}‚?Vüèû~­ùÒý¯ýƒùÑö¿öçGÕ°ßʃÛù‰öý[ó£ìú·çKö¿öçGÚÿØ?VÃ*oæ'Ø#õoΰGêß/ÚÿØ?kÿ`þt}[ ü¨=¿˜Ÿ`Õ¿:>Á«~t¿kÿ`þt}¯ýƒùÑõl7ò öþb}‚?Vüé~ÄŸÞεÿ°:>×þÁüèú¶ùP{0ûÍùÑö$Äÿkÿ`þt}¯ýƒùÑõl7ò öë¸}‰?¼ÿ'ØcõoΗíìεÿ°:>­†þTßÌO°Gê߯1Ý¿:_µÿ°:>×þÁüèú¶ùP{0ûcŸó£ìIýçüèû_ûó£íìΫa¿•·]ÃìIýçüèûyÿ:>×þÁüèû_ûó£êØoåAí×sÅYvüKñ2Ž‚ÞØsÿ]'­zÈc»âg‰­½±ÿȓֽ|–9%‰’^_’<ªúÔaEW€QEQEQEQEQE‰ã_ù5úö›ÿE5x×þEGþ½¦ÿÑME}ž]þíŸæÏb‡ð—õÔÒðbøÇz_ìy?ô¡+Ö>Í' üëÊ<4p|c½ic_ì‰XàÇÊ õÕ»…†VU#$d㨮îjkâ’OÔÒtùÈ~Í' üèû4žƒó©þÓ÷Åi‹ûâ—=æ_z#Ø¢³È:`\׈è_<²6‰âíR)n¡ŽW6¶é¡,Û Û*Y¹CÜ÷_´Åýñ^K¦þξÒî­'·Ô/åka Æ·/Á#ÝÕP2|Ÿ<²6Wol`MNŠÚkïCT¬WÒþém”–PxÇ]i–äâÆì—¶ Hªì„ƒþÒGàióÑþu÷ ö'ŽÜ|ðÅçöTÞ3Õ¤¾yH6ï¨[4í /1wÅñÏQ/<U¢øSà`¬òxæêàYÛ¦•)¹¼²‘c_¼±¸hÆy†3Ú½|+ðä^(²× ÕµôÚŽÖó'’/)˜»ý9ÀlŒç÷ü3ï‡Z+µ}JðµÝÄww‰ fIVF}Çlc³•¢õ\iûJ_ξôW³)ÁðÏé¥}|y«Ke©Iq7ï/í_í,±˜æ;Œ$¶ØÁR3À^ئC௠h¶Wçâ>§ …”дwêv¢2ß9Egò~mÁäy k¹¸ð&km£wi%¤÷·0\Dɽ$¹nW/žÅxì¹Ï9ÄÕþ h"Òd°Õo&½ˆÉo$º†4‹ÉPªžZÆŒ¬§‚@À£ÚQþu÷ öGogyo¨I4v×0Îð%XÜ 0 èpAÁìEYû4žƒó®kÁ^Ó¼©ÝÚêW¨$dÆÍÑF#Þ70UÏЀ1]gÚbþø©ç£üËïDûAöi=çGÙ¤ôOö˜¿¾*?í+Lãí1gãxèNëÅ>j?̾ôÅ û4žƒó£ìÒzΞڪ6æ%8 ‚àúSÖò¬ªÀpGQG5æ_zbˆ~Í' üèû4žƒó§.«fØÅÜ'8Æ$ç§çRý¦/ïŠ9¨ÿ2ûÐ{Aöi=çGÙ¤ôOö˜¿¾(ûL_ß¹èÿ2ûÐ{Aöi=çGÙ¤ôOö˜¿¾(ûL_ßsÑþe÷ ö(ƒìÒzγIè?:Ÿí1|Qö˜¿¾(ç£üËïAìQÙ¤ôf“Ð~u?Úbþø£í1|QÏGù—ރآ³Iè?:>Í' üê´ÅýñGÚbþø£žó/½±Df“Ð~t}šOAùÔÿi‹ûâ´ÅýñG=æ_zbˆ>Í' üèû4žƒó©þÓ÷Åi‹ûâŽz?̾ôÅ}šOAùÔwZÃ$ÓI1F¥ÞI*ª’I=êßÚbþø¬/xCAñƒ!Õ ûVËyí@óÅ0Q"¤ zç§¹£žó/½±@|M£-­ÅÉÕ콸S4ßi]‘RÇ8ŽçÒ˜|W¢¶c¬Ø¹Tx ¹Qæ«°D+Ï ³(u,=Es×´K‹rÐßܤZ¹µ[’«|¨1òqÕŽÿ½“Á_Oø% éíjWP¼d¶¶[Xyjé.UTT2*„P àsG=æ_zbŽÂë\ÓlŸeÆ£i ù¾FÙ&ù˜f?½†^=Ç­WÅÚ ·ÑY¦·§=ܰ ¤.»BFD€¸çwJf¹á8u‹è®¢Õ®,$KƒrËqH¬þXE8‘pÎsØâ¹døስM3QŠâæ;Û+(ì<ãå³KÆÉ’J’¬A•#!@Æ8£žó/½±G9©7Ä_IímYYNAçÁµ\摦¦ãMfÂ'ó#µ°³_b¦à­0j€N€]|~?ýævòü‘æ×Ò£ (¢¼ó¢Š(¢Š(¢Š(¢Š(¢Š(Æ¿ò,j?õí7þŠj(ñ¯ü‹ý{Mÿ¢šŠû<»ýÚ??ÍžÅá/ë©SûOüK»²ŒÚŒéë+ ¸ ¨U/#bÇ0äk§ðÂAà«›{‡Õæ¿’‹™•=±í›®N =ÏTü!KñŽð/'ûOý(Jõ_±Kè?:áÅÓ­*’-¯C¾-%©?Ø¥ôb—Ð~uÁõjßÈþãNh÷!Sµô5ãþø©xv÷Oš?Mp¶ÛZ*´RG¶¥–A’ Í™œ|û—i©À5ìßb—Ð~u.ˆÍ Ä ä •9¸ìpyö5q£ˆŽŠî”_SÅáCø…®-.%ñ¼×Z¤‚(æ%4l‡‘p ¸»s»q!J¯Ë]Æ£à­CUŸÛ·Q#[Ëm-º—Ù"É BJïÆàÛv3òã#&»WŠûÙ§†ãaÚÞT¶ŸCƒÅL–Ï %J°ƒ†uÝ,Cwäp¯ç‰ê¿uY$ÔWJñ¾¥aà“™åšy#fX€|™FæCGAÀ¯^Ó¬—NÓ­mä•`‰bJìîÛ@fbI'$’Mh}Š_AùÔkò¡]¶pƒœÈõ¥*8‰o÷ J+¨Ê)!h®'–§†Y¢ÿYH 'Ô‘V>Å/ üê>­[ùÜ>h÷ ¢§û¾ƒó£ìRúΫVþG÷4{QSýŠ_AùÑö)}çGÕ«#ûƒš=Ï8ñwÃ;¯xãNñ%–£ÕŒJ"/ Žû”I…8‘G–ÞgÌ1»åÀašÍ»øEâ ÛWGñÍô3ý´^%Ä *°ýÖݸó~è}­·îŠ<“ë?b—Ð~t}Š_AùÖŠŽ!}‡÷ ñîyÿ¼C5´Q¯Œe…K¹T\l}Ò«®ž€†çÓnÑwµÏêцe»°´»s[™Í»Í,ÅŠ´2 ™,7w!@xÇ}ö)}çGØ¥ôËüîãÜñgø«>êÐx›A¥{¹‚Î¥w[$#hüøÚØóK 7B~jµ?Á­rK{[x|k}l-Q;˜Þ9‚oòÕó6ÖU܇¦X§ÌX_û¾ƒó£ìRúΟ³Äÿ#û‚ñîs> ðõç†tg³¾Ô?´¦k‰&|ü+çv>çœdœ8­úŸìRúαKè?:Íáë·~G÷š=È(©þÅ/ üèû¾ƒó¥õjßÈþáóG¹?Ø¥ôG<&Ú&–gH£^®î©4}Z·ò?¸9£ÜešŒ!Ì—öˆº±k„J ¸<ðTuôïCßÙFÒ+_Ú+FJ¸3¨*@Éž09£êÕ¿‘ýÁÍäôT2ßZ@ì’_ZÆêv²´ê8Î=qÍ,w–’¸D½µw%UI%†W¿qÈõ}Z·ò?¸9£Ü–ŠŸìRúαKè?:>­[ùÜÑî`x»E›Ä>¹Óíî ¬’´G~HʬŠì„ƒT©öcÖ¼öÇà6>þ΄Ý0%ÔÖ›¼¨Zé§eA»;‡È±!vt;›>Ãö)}çGØ¥ôZ£ˆŠ²ƒû…Íç™øáGü$šdJÓÙÙê1éðÙEt¶¡Þ³,­‡È,Ÿ"¼ ®NAÅYÐ~Üéúh†÷TŠIüùg"ÆÑmí÷ºÈ¾bÇ’VB$äî íé’MzØ¥ôb—Ð~t{E­Èþà¼{žWÁ´_"sý‹êˆã-–#@ò3þ|‚ ©L’¦yÏšNI>µ?Ø¥ôb—Ð~t òÞî(®¤Tÿb—Ð~t}Š_AùÔýZ·ò?¸|ÑîAEOö)}çGØ¥ôV­üîh÷ ¢§û¾ƒó£ìRúΫVþG÷4{QSýŠ_AùÑö)}çGÕ«#ûƒš=È(©þÅ/ üèû¾ƒó£êÕ¿‘ýÁÍäTÿb—Ð~t}Š_AùÑõjßÈþàær *±Kè?:>Å/ üèúµoäpsG¹?Ø¥ôU½¸·Ó7—Vö€«03Ì©Xòzô}Z·ò?¸9£Ü}ßÙÅ+Ä÷Ö‰*,:†FæÈÏaÉö¥ŽúÎPJ_Z¸$¬êz.ãßÓŸ§4}Z·ò?¸9£ÜšÖ û}™e_·Zn`zä‚¥‡î‚ß@MZ¶Ay M‘Ï Œ¬‘¸eaêëGÕ«#ûƒš=Ï _ù)$ÿ¯koýzÙ¬}¥~$ø”¢ÞÛÿCž¶+›­]§åù#ç1ÅQEÄs…Q@Q@Q@Q@Q@ž5ÿ‘cQÿ¯i¿ôSQGäXÔëÚoýÔWÙåßîÑùþlö( ]M_°_Œ·¹ ÄžN¿õð•ëæDÄ¿|þÚMÆ·ñ*êÖÞ;i[ì #¥Ó²)D¼ŽA!†‘Û¨è>ü.¾ðV­²ÝZÝ[D×9Fï´*;1±Ú†-½˜ó•Uù±¾•lk¡'¶;9µ=ÎûëùÑçGýõüë*ŠåþÔŸò¢½’îjùÑÿ}:ò? ü_kz}æŸâkÃ) ¼±È綉ÞT€q™df-œòŽŽ=kÊfø]â˜4k‹}#Ä«¢jbâög7D€­4êÃFRÀŽ@!X@ÅÇ3“Þ(N‘Ðk´­SMµ´·Õ.ìÖ´;>GI¥–2›œo(ÎvÓk"/ÙÖÂÊmjK]Cý©t/%†P^“r9`ŠëÎåv±çv9[ï‡~+Ô4›.žËR±²6ñ\DÛÙžMÂV‘Êø_(#`ɸõÅfk_ |_¯É¦5Ç.íþÃwkpÏmu*}¤GY ®[kt9 “ƒÍRÌ¥Õ/Ä^ÌØÒþÛiÜGâ}Béc»·»e½•å ÑɼX—-ž€óƒVµúmÖ¹¥i5´ïu4“:ÎSˆv/sj8qáú›x!‘j_øKÄÚO‰nïõ˩ػ\˜í7‡Ì‘6Û´ØŠÈ9-ÕŽ;Ї™Ím?dŽ#Sø>×ú­ÅÔ&ŸO‚MEu‚Ö%Nù•îÁÝ€OvÞÇuPºøhu›Kë_XÅ +TrPœmf8Ã2b6<å1ÐF¢§ûRʇì—s‡Ð> ØxoÆ–Zížµv¶¶¡ü½0ÈÞL{“iÙó`g9lƒ©Óo>›çGýõüë*Š?µ'ü¨=’îjùÑÿ}:<èÿ¾¿eQGö¤ÿ•²]Í_:?ï¯çG÷×ó¬ª(þÔŸò öK¹«çGýõüèó£þúþu•EÚ“þTÉw5|èÿ¾¿tß_⨣ûRʃÙ.æ¯÷×ó£ÎûëùÖUjOùP{%ÜÕó£þúþtyÑÿ}:Ê¢íIÿ*d»š¾tß_ΪjÖêÚmÍœ’…IС`A#5VŠ?µ'ü¨=’îqڧƒ®[Íþº’Ä÷W׊Ñ#b'‚HQ[æ ˜ÒV€°2É2ÿ¯ó.îž}^ÞHn.ÍÃm³ 1A$q³‡ÃlÞØ%NCÇ}u”Qý©?åAì—sšÔ~[Siîu”6ßmŠíbKe²0JDX±IÈPp[9bVÒ¾ 0ÃöÄ3[Âö"ÖfZÆDdWq¼dnaó m먣ûRʃÙ.æ¯÷×ó£ÎûëùÖUjOùP{%ÜÕóSûëùÒù‰ýõüëŒñ¾£‘á{ÛÙï­´Ø òÞK›¹Ä1* pg=7 ¯Õ…sZ…æ£l%´ß³Mf&†éïÜ7”%ó ™Ùʨd –ëž™Ü"YµUµ;ýç-Vé»F-ž°%CÑÔþ4y‰ýåüëÉï´-KÅÚ~Ÿsc5¼¶ñÛ4!xâHÎìˆÎìÈ9È#Œ“Y6—ö6ú±Ôu­6鬯KÉ:Ý$¡ŽÒHL‡fí“»•ŽMOö½[ÛÙ~f>Ò|Î*›µ·þ‘íÞbÿx~tžtß_μ ÂKk}VÞ?í½"GòÚ.ü ºÊ€D3µA)€øÁ>†>%øQ­šäx‡O6êáQ0ÚäOA’ ÿ¼ õâ®­ioNßy­*©óÅÄî¼èÿ¾¿tß_θÉ|ÿu©È^Ìôy~­Åò^¾²#ºŠ x¡0Ú HŒP\DV-‘ºåÛiÈà»’zÏ hÉáØi†[wkxö¼–ðù)#K6ÍÍ‚I$òy$×Y|×-ïg–mbÞâ)¡µ‰WÍ™ZÑ£„#K\aÆ ®6ü®Ç+§ øQðÓRð ó½þ¤º’Ö8‰ÊÌÁyQò ;äätXúó)%¢AìŒÉ?|NG#ìößú2zÖ¬eÿ’‘âOúö¶ÿÐç­šð1¯›'éù#ÃÄAEW ÎQEQEQEQEQEbx×þEGþ½¦ÿÑME5ÿ‘cQÿ¯i¿ôSQ_g—»Gçù³Ø¡ü%ýu/xMK|b¼ÇýäÿÒ„¯QØÞ•æ>ÿ’Å{ÿ`y?ô¡+ÕiVÂB¬ùÛf“¯*o•" éFÆô©è¬>¡O»#ëSìˆ67¥"~ó;l§8«í ŽHæ¾|¸ø!ã¤Ñ4í;LÕl4amÅ4¶:ÅÜF僫lCò‘··©Á9k/¦ú²–&o±ïdmRÄ€£©'Jª]A\2žrEx:üøƒªXièóØ]ˆŒVwÓE $È[˜²KH<Œ8ç9¿â†ßõëc zž‹¥ÆCe©^$pþì© Áo›l€6FAMWöu/æ€þ±/#ÚBÛ­Ò¼|øŠ·Ö·#UÑ×ìš_öD0Ç©^Æ‚ѱÎÔ·–Wrà…lÍ5>|Jm*kŸé×·VúŒZµÝΣs#A4k0]¡¡#•8éû¡w?³©3üõ‰yõ°ÿ“AR'ùâ¼çà¯Ä .´æ‹SÑþÇa‚+IuKìcÉhˆÜˆ¤n ¹˜|ÄŒs4Ÿ¾!HuÅ“UÒf¶Ôô¦ÓE”š•ɶ‡!x"òpNUŽzäggRþgø ëò=Ø.åÜ0W®Aâé^ â?ƒÿõ벋XÑ4ý>e»7P_Þ,R<å‰û±©›²©ß'Â|ñ̺eµåöz Ôe¿M­Þî!á1˜Áª3¸žƒ½ÙÔ¿™þúļr(GQŒÒùmé^%¥ü2ø™¥“3kN©x5aª$š–¥u*!ò匢¯“òŒJ0»š¯£üø¡áïí=zÎâÃM¿ŽîTµì­2¬±JA¼ñ³ œ å/ìê_Ìÿ}b^G¹œ H z.y?…;ËoJàüàÍw]¾¿—H‹MoµÙÇmçÝê6²Å†bÁL(Xn ÊÊÃ'®9~|J[5‡ûnÁݤ2¾³|L Ñ‘…Äyrä`Ò8e_àSBËé3übgä{fÆ=³FÆô¯O‚¿"iJxŠÑ|Ènc!u«Õ¥?|â>X(Uúÿáµö‰Ž•¡rYþÏ%ÔïhÍæd $÷àxéKû>—ó?À>³/#¯$ å”c¯Ì(8YGü}kç‹ÙÿÆÚuž‡Ýxvq¤™64×7í¶ÿ­ýÏ$íÁõ•nóàoŒîgÕdCá¸F¡#…½»! ä—Ä~f$†è1ÐGöu/æ€}b^G¾p‰ï¡éŸå@ ã §=>a_>ÏðƳør/ìРl»º"bX–"%vñÆÒxÎ Y½ø#ãKéuIü#V¨ YEµåÐT8”Pb æàc¹æìêÌÿúÄüy=OOâúP>oºCqž±ñdž¯tMTIö  žo”ûlupAíÊŠá5ßÙÏž"Ôõ+ÝBÿZš[ùš{˜†ªÉ%\*©Tw1<±ÏuñAºñ?ƒµ-.Ê;9n®QUþI‡VËþn1‘Žøí^LŸ¼}—¥YDÞÛ§ÊLó\4“‰ãɇ°‘· c¥TpPKI?ÀŸ¬IôC5OÙÃ3xLÒ4_Ñ’Òò;>=Eå•ãCŸ'–h ÁA8﵃ÞÕX2,ñ®­p·7qÁ2¢¼‹Êã'ß$¶ì×9wðóÆ—0I ÓÑqŸ±j7)$d$kº607îÇ,¯r+–´øã+(|? Sx}SG·ŠÙ[í—%§±€ïûœ>PPÖaŒœÕ<^ó€ý¼¼C?ü(uuÔ–+…»ñÚ‚·ÆÈ€Œr@f99$žsQÉû?øNM6[³Ý%´¾O˜±Ï°¿•ÊdÉ óÔž¤Ž+‹ðßÀßiËgq'‡¤·}R Eî"º¹ó¢ (‘‘?vtÚ7„瓚ú¥à¢¾ÓÄItG?Á¯]\yóEq,žBÛÒ ¬j¤aNÜ®s“‚2qØU->øZÏG—K[{§³’å.ÊI0b%Vݹ[\ž»HôàdW¤QKêqþfOÖeÙš6‹…¥ÛØZ‡ò .ò rI9éÜš¹±½*z*>¡O»Ö§ÙloJ67¥OEP§Ý‡Ö§ÙloJ67¥OEP§Ý‡Ö§Ù x©&àg,£~aX¿t¯ø;SÒ죳–êåQoä‘!Èul±æãïŽÕã_¼oeâ5D¼ÐKÅl¶¡MÝÁ$,Mü˜OÌwœñ”{Õ,¾›ûOð)bfû@FSÿ™þT£e9éó ð-oà/е &ãK°·ðÆ`ó¤±ÇåÓ˜ÂÀ Ñu$`‘€A< Ó[àGŒßT¹¾gðç›<EåÖèG–ŠŸ+î¼{ÑýOùŸà?¬OÈ÷ñƒÑ”ôþ!ߥ*®à áèAȯžÛàJ³±ó¼;·‘d2¥ÝÉ.CHǃ3ŽÊ3“^Ùà]ÿBð͵ž¦-ù^G‘l]ÞÜìÀ!pŒÔPòúkí?ÀO5ØØØÞ”Œ6ýâŒòqV+Ëþ5|7×~!¾ŠºCiQ%„Âå俚dge ˆö¢2˜Û6yãŠK/¦ú±,TßDzGÞ_ûèQÇ÷—þú™þUà—¼gw©j„øie»ƒìûÅåÖè×c/ºÁÉ~AqŽsOMýŸ¼i§Ãc¸ðíÂZݵÖêä 7:¾Óˆ¸]¹ÀHêsOû:—ó?À¯¬KÈú ãæ^z|Úæ<z5à ð+Æ­ý«™|=»P·ŽØ¸½º XöCårx{<~uÜü!øy¯ø{¬6”ð˜˜FÚtÒ»y7°!Ñ@Uè¸çhþΧüÏðÖgäe‰%ÿ¯koýzجù©^%ÿ¯koýzد­ˆ’ôü‘å×w¨ØQEÂ`QEQEQEQEQEbx×þEGþ½¦ÿÑME5ÿ‘cQÿ¯i¿ôSQ_g—»Gçù³Ø¡ü%ýu4|ÿ%Š÷þÀòéBWª×•x?þKïýäÿÒ„¯U®Æg[ã (¢‘€QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEãŸóR¼Kÿ^Ößúõ±XÿóR¼Kÿ^Ößúõ±_!ÿy—ËòF¿ˆÿ®EWˆQEQEQEQEQE‰ã_ù5úö›ÿE5x×þEGþ½¦ÿÑME}ž]þíŸæÏb‡ð—õÔÑðü–+ßûÉÿ¥ ^«^Uàÿù,W¿ö“ÿJ½V»oŒ(¢ŠFEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPŽÍJñ/ý{[èsÖÅcÿÍJñ/ý{[èsÖÅ|†?ýæ_/ÉVþ#þºQ\!EPEPEPEPEP'äXÔëÚoýÔQã_ù5úö›ÿE5öywû´~›=ŠÂ_×SGÁÿòX¯ì'þ”%z­yWƒÿä±^ÿØOý(JõZìfu¾0¢Š)Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@9ÿ5+Ä¿õímÿ¡Ï[ÿ5+Ä¿õímÿ¡Ï[òÿ÷™|¿$a[øúèQEp…Q@Q@Q@Q@Q@ž5ÿ‘cQÿ¯i¿ôSQGäXÔëÚoýÔWÙåßîÑùþlö( ]MÿÉb½ÿ°<ŸúP•êµåþÿ’Í{ÿ`y?ô¡+Ø+ÑPæWJ|Ò½Ìú+BŠ=—™Ÿ²ó3è­ (ö^aì¼Ìú+BŠ=—˜{/3>ŠÐ¢eæËÌÏ¢´(£Ùy‡²ó3è­ (ö^aì¼Ìú+BŠ=—˜{/3>ŠÐ¢eæËÌÏ¢´(£Ùy‡²ó3è­ (ö^aì¼Ìú+BŠ=—˜{/3>ŠÐ¢eæËÌÏ¢´(£Ùy‡²ó3è­ (ö^aì¼Ìú+BŠ=—˜{/3>ŠÐ¢eæËÌÏ¢´(£Ùy‡²ó3è­ (ö^aì¼Ìú+BŠ=—˜{/3>ŠÐ¢eæËÌÏ¢´(£Ùy‡²ó3è­ (ö^aì¼Ìú+BŠ=—˜{/3>ŠÐ¢eæËÌÏ¢´(£Ùy‡²ó3è­ (ö^aì¼Ìú+BŠ=—˜{/3>ŠÐ¢eæËÌÏ¢´(£Ùù‡²ó<3þjW‰ëÚÛÿCž¶+&Où)¾'ÿ®ßú2zÖ¯‹Çÿ¼Ïåù#‚¿ñõÐ(¢ŠóÌBŠ( Š( Š( Š( Š(  Oÿȱ¨ÿ×´ßú)¨£Æ¿ò,j?õí7þŠj+ìòï÷hüÿ6{?„¿®¦N«¬êš޵»íÜÞêpèoh$ý¢AqØ÷Bî?.ãÓ5GÀ¿¼m¯^è:ï£êw~Žú÷GÆÖ馌H¸=×,™5¹®éö7z¬ò]iö÷rÈh„.s€OAœ{ ÎþÂѼÃ'öŸæÙ¿ìK»nsŒã¦yÅw&uXëÿá1×?çíÿïþÂc®ÏÛÿßü+’þÆÒ?è cÿ€kþciô±ÿÀ5ÿ .ûC­ÿ„Ç\ÿŸ·ÿ¾øQÿ ޹ÿ?oÿ|ð®KûHÿ -þ¯øQý¤ÐÇÿ×ü(»îoü&:çüý¿ýð?ÂøLuÏùûûà…r_ØÚGýlð Âìm#þ€¶?ø¿áEßpÐëá1×?çíÿïþÂc®ÏÛÿßü+’þÆÒ?è cÿ€kþciô±ÿÀ5ÿ .û†‡[ÿ ޹ÿ?oÿ|ð£þsþ~ßþøá\—ö6‘ÿ@[ü_ð£ûHÿ -þ¯øQwÜ4:ßøLuÏùûûà…ð˜ëŸóöÿ÷Àÿ 俱´úØÿàÿ…ØÚGýlð ‹¾á¡ÖÿÂc®ÏÛÿßü(ÿ„Ç\ÿŸ·ÿ¾øW%ý¤ÐÇÿ×ü(þÆÒ?è cÿ€kþ]÷ ·þsþ~ßþøá\÷ÄøŠÇÁš¤öú”ÖÓ"&Ù¢Ys"ƒƒŽ8&©ÿciô±ÿÀ5ÿ FÐôgmOqpÖJFAÈàZ}Àõɵµš@.$1ã4Ïí+¿ùù“þú®øŠð’KO*“þÏ_ü…UÌMŽóûJïþ~eÿ¾¨þÒ»ÿŸ™ïªàÿá!¼õÿÈTÂCyëÿ¨æ çö•ßüüËÿ}Qý¥wÿ?2ÿßUÁÿÂCwëÿ¨ÿ„†ó×ÿ!QÌ;Ïí+¿ùù—þú£ûJïþ~dÿ¾«ƒÿ„†ó×ÿ!Qÿ ç¯þB£˜,wŸÚWóñ/ýõGö•ßüüÉÿ}Wÿ ç¯þB£þÏ_ü…G0Xï?´®ÿçæ_ûêí+¿ùù—þú®þÏ_ü…Gü$7ž¿ù Ž`±Þi]ÿÏÌ¿÷ÕÚWóó/ýõ\ü$7ž¿ù øHo=òÁc¼þÒ»ÿŸ™?ïª?´®ÿçâ_ûê¸?øHo=òðÞzÿä*9‚Çyý¥wÿ?2ßTi]ÿÏÌ¿÷ÕpðÞzÿä*?á!¼õÿÈTsŽóûJïþ~eÿ¾¨þÒ»ÿŸ™ïªàÿá!¼õÿÈTÂCwëÿ¨æ çö•ßüüËÿ}Qý¥wÿ?2ÿßUÁÿÂCyëÿ¨ÿ„†ó×ÿ!QÌ;Ïí+¿ùù“þú£ûJïþ~%ÿ¾«ƒÿ„†ó×ÿ!Qÿ ç¯þB£˜,wŸÚWóó'ýõGö•ßüüKÿ}Wÿ ç¯þB£þÏ_ü…G0Xï?´®ÿçæ_ûêí+¿ùù—þú®þÏ_ü…Gü$7ž¿ù Ž`±Þi]ÿÏÌ¿÷ÕÚWóó'ýõ\ü$7ž¿ù øHo=òÁc¼þÒ»ÿŸ‰ïª?´®ÿçæOûê¸?øHo=òðÞzÿä*9‚Çyý¥wÿ?2ÿßTi]ÿÏÌ¿÷ÕpðÞzÿä*?á!¼õÿÈTsŽóûJïþ~eÿ¾¨þÒ»ÿŸ™ïªàÿá!»õÿÈTÂCyëÿ¨æ çö•ßüüËÿ}Qý¥wÿ?2ßUÁÿÂCyëÿ¨ÿ„†ó×ÿ!QÌ;Ïí+¿ùø—þú£ûJïþ~dÿ¾«ƒÿ„†ó×ÿ!Qÿ ç¯þB£˜,wŸÚWóó/ýõ^{â߈~4Ò“g4ÒÏ#Ú©,}IÅ.k#3áF£u¬Co}{<—W·:›4ÓÊrò;y¤±>¤× â¹½=áÒ†,ì ¶QB+`¡c@B p£'zš·ý·?÷þü冗ʽYTRµÎ ˜iNnI›8£ý·?÷þüð£ûnî'ýùá\ßÙSþdgõ9w6qF+ûnî'ýùáGöÜÿÜOûò?Âì©ÿ2©Ë¹³Š1XßÛsÿq?ïÈÿ ?¶çþâß‘þeOù}N]ÍœQŠÆþÛŸû‰ÿ~GøQý·?÷þüð£û*̃êrîlâŒV7öÜÿÜOûò?Âí¹ÿ¸Ÿ÷ä…ÙSþdS—sgb±¿¶çþâß‘þmÏýÄÿ¿#ü(þÊŸó úœ»ñ¯ü‹ý{Mÿ¢šŠ¡âKùo<;ª+…m&< _ùfÔW½„¤èRTÛ½ŽÚptà¢ÍOþB7?õÐÕZ¹©ÄçP¹Â7ß=ª·“'÷ò­‘”Sü™?¸ß•LŸÜoÊ€E?É“ûùQäÉýÆü¨”Sü™?¸ß•LŸÜoÊ€E?É“ûùQäÉýÆü¨”Sü™?¸ß•LŸÜoÊ€E?É“ûùQäÉýÆü¨”Sü™?¸ß•LŸÜoÊ€E?É“ûùQäÉýÆü¨”Sü™?¸ß•LŸÜoÊ€E?É“ûùQäÉýÆü¨”Sü™?¸ß•LŸÜoÊ€E?É“ûùQäÉýÆü¨”Sü™?¸ß•LŸÜoÊ€E?É“ûùQäÉýÆü¨"þÖöÿPhíõk68¡G"Þ_yfq’dFètÇSPajŸô4j?ø gÿÆ)úÕÆ³¦^ùºv.´³DˆÛ.¢ƒË*ÎyóÎwŽž†¨ÂAâ¿úîðmkþ5B2oüC™qSø¯ZÌ·ma &jË5Âä4Iˆ9`A™éœt_ØZ§ý þYÿñŠåïtCQ•¤ºøi4ù™®6>³o±e`Cº®ìl’Hç<õæ¶Æ¿âµÂtp1“«Ú“üèK\¼Õü5âB5»›û}SUkˆnmíÀÙö[‰r D¬è—¿L×zP)hVbyfaéèkÎõ;?x£Äž– I¤ÙéZ£_\\K¨A/ÉöYâ*“ºUü3]µõÅä8àÒç»Q’]$'|ÌjC«ëÚv‡§É}{pÚÆÈ¯!w—uEÏ=70çµc§Äÿ <×0ÿhéË5³H³F×DÄlÊîFîo›§OZ~¡Þ«hÖ×~¸ždr<8%X:ÿfP æµ?†úf¦ui?ážÖïSYÅݽÄ+)2 ;¿‚!Ž”ßÙj¶:•¤WV‘Asm*îŽh¥fW ƒU¯u j–ÑÀ‘G4s;X’Wf:ŸögÙ Í6Ùmí¼=u*ÌÁMÌLrÌY‰%òIf$“ÜÓã‡P½Ölç—L–Ò"™Y¤‘%¶`¤ÿtÐîø¢Ž0mÖF+’ÅØw>†²µéT×IwpGižêáÝ„6ÈCi·ÊÆç§ã#2^Ý_G2¤:EÅÊ*欱¨=OF`{Ö&¥£¶­3Ësá»¶wï)wn1±hÉÃŒ”bJ“КÐOˆ>’™5=%ágòÄ‹{•-·v2û£5{Iñ•¯[}§N÷¶Ä)Yá•™2†Xƒ\„°µ²[8This page displays the media items that BitPim currently maintains and allows users to perform various actions on them. The types of media items include pictures for wallpapers, sound clips for ringtones, etc. SCREENSHOT(screen-wallpapertab.jpg,) SCREENSHOT(screen-ringerstab.png,)

Actions

Add: To add new media items to BitPim, either click on the + button on the tool bar, or main menu Edit  New..., or context menu Add ..., or by pressing Ctrl+N. Users can then select one or more media files to add.

Delete: To delete the selected media items, either click on the X button on the tool bar, or main menu Edit  Delete, or context menu Delete, or pressing on the Delete or Del key.

Open: To activate the application associated with this type of media item, either double-click on the item, or conext menu Open.

Save: To save the selected media item into a file, go to context menu Save ....

Copy: To copy the selected media item into the clipboard, go to main menu Edit  Copy, or context menu Copy, or pressing Ctrl+C.

Paste: To paste one or more media items from the clipboard, go to main menu Edit  Paste, or context menu Paste, or pressing Ctrl+V.

Replace: To replace the content of the selected media item, go to context menu Replace and enter the file name of the new media content.

Refresh: Refresh the list of media items on this page.

Drag and Drop: On Windows, BitPim supports drag-and-drop media files from other applications into BitPim (which is equivalent to adding files); and drag-and-drop files from BitPim to other applications.

Move to: Move the selected items to a different media page. #include "pageend.h" bitpim-1.0.7+dfsg1/help/toolbar-senddata.png0000644001616600161660000006443110410665462017044 0ustar amuamu‰PNG  IHDR¬`A•F×sRGB®ÎégAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<tIMEÖ2=’nîtEXtCommentCreated with The GIMPïd%nh[IDATx^í}xÕµµè¡C5I€P“@Bè˜bcp7î½÷Þ{ïÝ’%[Íê½÷Þ{³ÜmJ^^^ÊŸ÷²þµæúØ×Šd]É’Áxô}û›ÑÜ33gΜ9ëì½×Þç¢=6ã¯nW»ýå¢(×¹áòËÝ.¹ìb·+®¼ÈíâK/v»ô’‹Ü.¡p—[7k{±ö/rs»ˆÂ]k+18µ{êXc)g²[À´À%—\ìvåWº]síµnW]uµÛ¥—^âöïÿŸÛ?ÿù·¿ýÏßÝþþ÷¿»ýë_ÿrû7ìÎu>öç1ã|¬¿]ço¡FN˜n#Vâ¥>ÞøQ—4\Ý¥—öþ Wþ®ý/üpüÿâ¶Éÿ‡»§ÿîõo<4÷ßxdÁ¿ñ³…ÿÆÏý¿\üo<±äßxr™“,屆Â2¿©†Û§u®ýpëzn=ŽÂ­×q¸}ñ%Üú| ·¾ßPþ ·~ÆEýþë„pŸÇ-Q™/(½(=¿&ðQºQº~…‹ºH¾´Ån»\ð}à8û€-v¸ÞÜ®x6—þ&½’·7 pÑ{E¸äÃBšópíçy¸¡[nìQ‚›{”ãöžU¸«W îì]ƒ[{Wá½Kqu¯b\ѳ—÷,À½òqEï"\Þ»—ôØG"Ø}N°ûŒÒ™òé¸u:L-λ ì>`÷Žm±Û }ÀígápûUÜ^L‡ÛóqÉ»9¸æÃ$ÜÑ)wóÁ“½|ñB¯`¼Ò=owÆ]cñ~·h¼N’ÆÓüý¡.;qW×͸£ÇFÜõÅÜÞ{'nê„+»åà’ÏkR˜,b¥>9·)Ùb·Ý.Ì>p€ß¿-v´²¸=·_ÆÀí7ip{Ò;©¸í#<ÕuÞë7}ŽÃÄ/fbñgs±ù£…ðøpv~¼+;ÎÀØN#ѹS/¼Þµ3~×çc¼8èCüªO<Ô{:nì„Ë:ÓÄØIèÉÁÉ«•ü[[ì6°ûÀØèføÐ» ZÙÜ †ÛÏ X¿¦IðµB\õ^2îýÔ¯õ!#:cõˆÔ«Ò;ôDÉ«]Qñòg(å3d¿Þ AzkßÓº¿€áÃ…Þcw†¼„'{öÆ­wâòN¹N`¥µ T6PÛ}Àî­¬l ³ÁÞíÁ0M‚¿Î"`•àšRñPxod?LžðöŒü-ò:¿Žƒ¯¼ŠãOüÇ{G~ö <ñ<Êž}éxáŸ>ƒ]Ã~…Eã~޾C_À‹Ý»àÎN[pù'Ù¸äÓC¸êóC¸©Ç!ÜÑû0îîs˜¦Ãø­×aü€„Ž+?=ˆË¨i{}—C–hÿbic'fà—pÿ*»©»ãwñÚÞÌk^÷ùA\Îó/¥w¦k؃„ v°û€ÝÎó>àöP$+‘€•·×ËpÝGx¸Ï.t?SÇ¿¿Ï¢èßàÀ3Ï î¾GPzÇ=(¼ín”Ü}?ÊïUO<…Š7^DNÏW±wÐ˘ÑçOx§s_Ü÷ÉN\ùq.®"ÝÝïž{¿Ÿ|˜|/O<€'¯FÁ½ýãÖž {tØ<:”û_$˜´Àè:ž#É?îwO9‚W¦ÁkSá•ɇðÛ Gð‹G,˜ ÈÌ5îèEëtâåØ>3Ûoh÷ïF°ÍÀ ¸ AÒí'Ô®~‘JV>«×’…ŸöÝ…ÇÄ´á€_—§÷Ò¯PýÈã(¼õÇH¼á&D\sbn¸é7ߎŠûÅ¡ç^Ä·ÿ„ŒO^ÇÚOÞÅg ÆÃyâêOòIÀ8‚ç&GŸµÇ1aëaŒ^[‹!+k1tíAô[s oÌ<†_Ž<Œ§^¯O?‚?Œž^‡À£Cá1ØãÃãå)GÑwõ1LÚ~7ïǘ0bãQô\õ%;F ;‚'FºÆcƒêq}ç}pë@óƒ=XÙm`÷»Ø}àüïn?I"é"n¿-"K° 7|œ…Ç{ìB÷ƒ±´ûˆzû9ä?õ4Jï{©7ÝÀ«¯Ã®Ë/Ãî+/CØõ?@îÝbß/^@ýK¯ óµ±þ¯£Ë›ýðÈ»pÍÇù¸£ßQ¼9ï+Ìô:Žå»÷a⊠]T„é[j±Ô÷Æl9†sâ½Y‡Ðeñ!t]xoO©Ã»3¢Ûòcè±ò8:.<Š^¦¹^G±Êg?fm(ÅäõU˜çy‹ü¾Æ  _â­™Gðö¬#¼Æaë/ŽªÁ}êpk÷¸ƒ˜Lˆ2CÞJÑöv™©ÙIƒ»¬ƒ¤möâùß™íÉ~‡vø~÷·‡©]=Asà‹¥p{£7|˜';ïÂà.ƒáþÞ[Èüíó(zø)dßö "®» »®¸ë/» ¯¸{®»ñw>ˆüÇžBγO#ð·?Ãôß=ƒw^ëŠûÞÛŽ«Xw8Ž–~ƒ•_b{à>Ì^Wˆ±+J±Ôk?<¢c…ïaô_Z‹î‹êÑweé>|6»ƒ×ÄBŸãXD·é&l9Œµ~°Á§ã—æcТ2ÌÚy›#¾ÁBïãøbÙAt%àõ]~–ïC‡©Ux}â>ü~Ò!¼1ë8^Ÿq¯Q^™æ?L?Ž'ÃφÅ-®ËÅfüÈ» ì>`÷»|gû€ÛOõdÜ^*gàpnì‡_´Óި߿‹Ê_>‡â?ޤ›î‚ÿU×cÛeW`íåW`ÃUWÃ㺛rëóÐÃyú§ØðòCòÚSøý›]p÷ûÛqå'¸{à—¬?Ÿ¬zÌ[_ˆÉkʰÁÿö&ÃÖÀ·º c××cÚÖ”ý¾¢³=Ó€æ}‹=j1kÛ>¬ó®År÷Jô‘NSJ1vÃl û «|aôš:ŒÞpÓ¶Ä|^sm &m>€É4!ÎöúÓ=¥å})»¾Æ¤_b’ûW³ík|ºäKü|øúË+öåc7Ûb·ÝÚ§|ÄïË» ZÛÜeJ¦_ÑørÜÞªÇMÌrñÒ‡¾˜ûÖH$ÿúmÔ>ú$Jîzñ?¸{¯¼†æÀ«°ýêká~ÃðºéføÝ| ü~|;v>q7¾þ¾xïY¼øaÜõ±;IE¬¯ XÁšo°'òÖy–cÉÎjx„BpÒ1×~Œ\AÀ"ø,ô¤VåQÑ+Ê1}Û~l 9D­¬s¨•M][†u»«Öòb XRMpâõŽböÖZô_T…ëx>Í„[öcg%¶Ôa÷78Êíˆ8Ž-a­n…ÿ1¬¦Ö7™àõ*µ°[Iڰ릠²Ån»´_ø˜ß˜-v´¦¸=F²ÅÓ4¾Â¬ïÀMáÅ|1ó͈~î(ýéc(ºû^¤Þr ¢®¿AW_ÿëoDà­·#ä®;|DZçÇ7bÓ·ä~‚ÿ€×º Æ}ŸûàêÏÊp÷ ÿÂGËþJ ëkø¬-°gåžzøÄÿC±²c7¡¦t«¼ë1~E &n؇µ¾õÔªê0iy>Ư$`í©Gp=–l-ÅÔõ•˜E š³}¾˜WSª0p5¯á¾Qû±'° {Ã+±Ý¯+<ª°Ì«î¡±=ä 0{R; <Œ%ÞGÐaZ-îê^Oö޲r0ÿ¡-vØ} }ú@G~_F>á¾-v´¤¸ýŒÙ(žaÂÛ?Q÷î!Üб¿êè¡ïÄÎ^Bâ£"çÞûs×=H»å.D_ Âo¼±wÝÔ‡DÒÃ÷ èÑ;°ù™;1û=VWñF¿ax°W®íV…»™¹ý£åò½_cO†ÏÏC×™¥dúÀ¶ˆ/±Üû†,kà±û –ìªÃÈE±,ñ¨£Ô`ä‚\ŒX^µ>õð>ˆ že˜¾®×”¡ûœ*¼8¬Ï’YØyÉWXâs ÞáûàP ¿ ¬ÞYŒI+‹0q}-VïÙgÉĕذ¾ÎÍ¥»à“É¥¸§[Vçÿ²Ån»´gø”ߘ¤“-v´°¸=Î%Ež¥9ð¤¿w×v*Á£÷ ÓG}0óõg±ëù{óøÈ|à!¤Ýq/µ¬[öƒ"ñGw£ð©ÇQüü/ðâcpý'˜ßõq ú'¼;z ~:(×õ®Ã¸ôÈG+ÿeß`5¦á‹ Ñ• 3Ž$Š!DZÀ},,ÇÕ°Ä‹BÀÁ2CI}_ìY{öcâªRŒÛPµþ±#x?¦¯Ìŧã³ñÒÀ<ü²?òR;zxÈq|²ì¿±ØïË“€%ÐZº¥Ð€«j­k[€¸Øü¿K<÷¡ã¤BV5™‚´¯wù«-vØ} ½úÀçü¾$ŸÙb·A+ú€Ûã$[üùsXÔáAx¾ú8¢žùbòS’,nGàm7!æ'w¡àå'PÆ âôŽ/»۳X6ê9Œšú:LGG†ãúþûqçˆâ­¥ÿĬ=_[´ö +Š1xi¦lÙO°¨Ç(ú«:N)!}?¦n©ÇÔUè=#=Ô` s<bÌÊrŒX]‡y;j1ok%ºOÎÂS½óq[ç ÜÐõ®èò5î¢&÷Öâ¿aŠûqš«±~Gž%ÓVä¢ï¬<ôYT©›j¬ë7üÿÝQ¹Là[…‹:ƒ[÷¿Ûb·ÝÚ«tã÷e¤+÷m±Û %}ÀíqšŸã¢¯1×ßÇ—TއúúááÐkÔï0iøÏ±²Ïóðúä¾ò$üŸ|>¿¼A/=€„ŽÏ ½Ï+ˆö:67 :„›Gü ÏÏùúmü†¬½zŒ[ISÞ²rŒZY‰ÁK*ðÎø¯oŽ.Àë“êÐuÙ \w}–Ô¢ÛÂ:ô'Ñ¢ûìRü¦_6ný´ 3ÓEÝþõø~8äŸx~Ö?¬Ø­‘+«0jQž%=¦åâݱxgJ ºuý†ÿÿf`>néR‹‹>ûŠkxýÓ» ì>ÐÞ} '¿3[ì6hipû™4,Yr¾ÄµÔ4îï†WÆLƧ“?ÃÀiïbÒÔÎX2¶ Ö÷¾…µ¿ŠµÝþˆC>ÀÖ ŸbíÔÏ0oÊǘ8ócôŸÙïÍXŽGƤázšé®ú¿¸gì?ð씯ñêÄZüqt1^Yˆ?Œ,Æ ÃŽ\_«ïÜ7ìk<ÉÔKO©ÆÃ\OëÁñĸ/ñÂÄcx~TžVƒç†WáÉ帷{®íÂ|ƒÝ V}þ×’«ý/~4úxbìqüfT5~3¤Ø’§úá‘>å4QÖãIú¹tý†ÿ7v=s]{ëh_[ì6°û€Ý¾í>àæö˜|X¬×I8øð+\ÕµwöKÃS#·àæàƒiSÐeö< ˜³£¦/Ęq³1bÔt 7 'ÏÄÀ™3ñÅ´éø|ÂDt7ïNXŒ—&úã¾1ÌK8ì/¸lÈ¿qÍÐá–¡ÿCÆàqüxÀAæÜϼpóGpM¯¯peŸ¿âšÃMÿ‚›úÇõ=áº>ÆMƒþŠ[ÿ· ø ·ô=N9†›zÓÏÖã.ëù_¸¸Ï?pQÿÿ³äÒÿ‡ký?^ã¿qK¿ã¸•Ù-$71«Å ½Žá®‚|S? ¯ßðÿÆ®g®koík‹ÝmÒú±m±Û •}ÀÍíQÖ3ôa½FÀêð.åêÀ×õ¬&heàÁ±xlD4žŸˆç'§âÅ)ixiR “Î&SóIÄ3ñô¤xjB±øù¨(fˆÁ##Spÿ¨2üpäq\9ì¸xð¿qñÀÿÅÅýþ‰‹{ÿh.éþg\܃€Ó‹ÿt.î÷/‡ôQ™¿9DÇûþ?Ƕ÷ÿ8ʱ~gÙ~¼.Ó“¢ÿÍ5–ÿâï¸Xb®ßðÿÆ®ç|m{ÿô¶¶ÛÃnVö øZ9`Ùç]ØmGÀb –X4 ~ð%.êDÐêr Wõ8ˆk{×ã}LÌD´·2 ímLctûHÉ1ÜÆí-#ŽÒGu?drÚ™¨öÆÁ\2dÈ1\?ì¿pÕпãÒ!¡A”ldj@õ§JMP±Ån»\ } /Ÿ[Ò‡ã-v´°8ëéjÒÚÉ|—´îÉ”S”'‚Iuùw£FÔó/¸¤÷ãÒ/þŠKûü.íû7\ÚOB`¢\Òï–\ì$Q«º¨/…ÚËE_PzSzÑŒg‹Ýv¸0û@O~ÿ‹pÑCòÿl±ÛÀõ>àöH S31ëeÿ‰±Xï0ãÃû””ù Æ,æu<Œ‹>=Š‹?;†‹??Ž‹»Ç%]¿¤|…‹»~M@“|CÆžäϧK×?3¦…ÁaŸsû¥³-vØ}à‚ï&xØÞ:‚¨mq­ ,Àzª—¾\ƒ«Þ®ÁUâ¶OËq'Ó*ÝÙ¥wv­ÄÝ«qWÜÕ“)ŒzÕá.ßÕ{¥ž‹'’@aÉÜÙ˜ôæñÞq'T´¤§-vØ}àÂízRèr°Ånƒ–ö·‹Xÿª×¾^»?­ÂÓËð©çïL,Â;“¸\bɻ̎þîÔ2')Ç»Ó$–¼Ó˜LåqK*m±ÛÀîv`<$Ç[ì6hep»øÑ\ölnÿ †¼U\KªŒÓ‹±io…[¦7:%%ܧ6”Rs’î7%ÎåìýÓÛÍn»=¾ï}àLcƒý[Óã¦Ý6VÛ¸]òh1.¾÷~ZË•~«™½¼‘©¥È/ùO)ెÒX9ûXãíg·‹Ý.v°û€ÝZßÜ.}¬W¼P™šèã95ØÆ%9 ÊÊðåQ×äè¡bÚ_€ýuyÖVÿ»zîÙ”û¶î{6u¶Ïu­Oíd÷¿ïÏ»<ú›]GGk°ôa Œ*JÓP”Ÿ€üÜ8k[Z”ŒêŠ k«ÿs²¢­2*{6ÛÔý̵ š:龦>uÕÙ´8ÞW×lxφÏÕÞƒ–©“ÚY¢gnjBÐ’º´æYÏæ6unÃ:ë½IÌ{lí»li]k»æÚÓô?}mÑï[Zg»¼ ˜bh°ôajðŽ‹öGh°'‚ÜჄ¸ ¤´âÿ{ý¶#-%ÌúxϦ!›ºŸ¹¶4]_÷Ñ1ÝW÷eýTŸÌôˆV ï«gÕ³i@ÒÀÙP´÷ ¥ëëþj{‰ö›š¸Z=‡žG×ÒóE„î¶ÞgÃö=›wèê¹ ë¬w*Ñ;Ô»4moÞ¹«×mi¹ÆÚ®¹ö4ýOý¤-ú}Kël—·ëBìÍ–>L –7,ÅÊås-qß±{¼6!œƒ§ÇzëÿõkYƒŸ i^Íi(5xS÷ÓÀ`´8SFuX¶d¶o]…-›–Ã×{«µoêq&¤á½ÞwͪùÖ³éZº¯4 ô*gžÍ úº¯¹§ÑœËµ¤¦^ÝGϽŽm+Ѿ&ºž1Á­Duh«MÎTÕKÏ£ké½mâ{ÕVóîÌ5¶ã¬I;kžÆÜÚgm8èkà—è4 aõ\¦½ÍVmlÚ ©mK´ìÆÀÇùXrb°UççT[©ÕßÔv‰µ+šù…8ÐØÏll[ôfK >Èó¦bîìIX¼pº5Ài0×q™Sý®Æh&F ;“†ÒØ4¼ŸIו¥AB"Í@uxNœ0ÜÚª^ªÇ¬ã-ðR=4À¸:;×}uŽ®%ðÕ@$ r#=‹T¸ÑN hš{šA˹\KÛ@í¢XϪçT»K´o´>3€­Dƒ§~×{P]ônŒÆ©sÌû0õÖóé9%æ½i`6 e®«çÐ9j#F»6¦`ý¯6i©–&ÒyêKÎ×7í¯ãº¶ó ºžÍhaj‹†Ò3žCí§¾¬¶Ð}$ÚW]LpnGÕ×ùÝ«íÛ§5ï¼->hû60|Ÿû@³€¥Oìôic-Ñ€¨Sžý/°˜2y”õq-L¬öu®W}[ ï'ÀÒl[Úƒ Äf`V}ìmÔ¸±C­­þ7u<“ ­áKUY]Ûh|4h©þΪî­:™çÔ¾îmî©A_uu.×Ò60&O£ÙêÚ ¨º–F¢­~S™aCúž,«r*ï¬IéY4ÐJ³r,µ±1ù:ƒ„Ê õŽ5lSs}3`·¤ÍV«sEm* ×¼ MD´oú”=‡Þ™êî¼Õ~KÌtª³®¡öÓ}Ô·%ÚW3Ïí\3±1ß„s¹Ö´Å÷y±ŸÍѶê­, bú¨õ¡j 9¼¿µÕà­cÚê .eVr¥Ò KƒR€Lf`3šî«ûi ÖVÿk Ö Õ K÷Õ}4ó£€V×Ñ1 Üfð0šg4[ÝÓøñTOµ)§gø¹êß“9P÷(t‰öõܦí& ­[çç×»Q}TVm¶õÄÖ<‹iGc4@f̽‰î'Ñý ÀíÖLPô¿³ÓU­V“‹žÓtO]ÛL†¤E;÷)ÕÅhÕÆTí¼Õ¾ÚDšSkúœ™ ˜~¥ÉXÃ~­ßô>Ft²nÎíc´aWß¹+õ´ËØÿ…Þ\¬†³O£yè£4ƒÉ€~=¬ý¾}ºa ?b -¬Îv5³” ¤fÀÕ@¢E÷5‹1%µÄwt&ÀҪ݀¤î©gÔ=Çs_Ïmü]Ò°T?=·)§ÁMmèêªzË'¢Wçê¹$FË5ÚŽ³Í”Ó= øèžÆägŽ54q9k`ƨ24Ì3 Òš@Cmõ¼Ò[ê³0›v×3€R[KôLõ)SYµ‰ÎS9ªíËÄçj{ŸIÃÒȼkç~m&dêç¦ß™>i4Ø–ÔáBˆìç·ÁØ•>à`9›ÊÌG¨JƒHXÚ×l|.øôko‰†å f¦ªûê~fnXº¿ÑhTN÷l)`5eÔ=5€3¹i ”ÆD&07þ!SÎü®Ñ•—¢_`¤AY£³hÕuÏдƒ™8˜{©>®–Wi_zF£Ej_ƒ¾ñ%™çqH£õé~­,gÓ§ÚÖ˜äÌ3éõ)óŒOU[«ù_û@]iï†æ`õ5ãT»JökÕUm¤÷a–=غÒÏì2gßOš,ÍR5kq6³˜ãšáJôQÓ‘íæžùbv¹òÂ’Ì}5X:›¸ŒùE÷Õ@åL¾0Žó–˜ÏDº0æ1ã÷1€l|Wz~•HôôܪŸ)§ÁMÇ]ñ‹Œ S¯1êšÚ× ®¶•¨mL;íÂÔÅ0íšõ¿ñWbãÃ@–¤êmü†Î&HcÂ3$œÖ˜É%ª¯ñM™{š~dL€¦O-OÏ¢sT_¯­¹†úœ«~ÓÆú¸9ÖTÔ>º—™° ¸TVÇM{Ên›Ï~reܰË\íÜ,`&—ñS˜x ™¬4À™ÃÌǪÁDƒˆ|Oº†«~ CåÖ /2 à<‡¸™•ëÞÎ÷7ÚNK ï«{k06 «AÔ ŠÎþó¼†QèLt0åT·–ÌøUƒÎÓýæ#ÀTR¦Ý]­‹ñU5$K˜ãª·´R±1u? codˆæyÉ*Ó’671aÆŒj´<ü˜ö)ÕÑÄÿé½B޶ú_¿© ]ͺÒX7L¦½M¿6uÔï†ìâLJji[Øî…1àÚïùìÞs³€%SžqŒ-ÂÌÄi¼tD0þ¦ÖÒÚu? 8 ¤¡hkL>&ÆH×nH³v¾¿êàSäJ'ix_£± ‘B¢ó½MÀ­3[Ï™Jnê¨ÁÏÄO¹Z—†mn|MfÀ4,FsæêbÞ‡ ÊU{é˜49gª¼öÍ`ìLqoH£7´ró¾[Ck×$Fˆ‰3àihö&ӶΔr›% iX/ó¿«Ú•ÞGc}¼©önH­Wû PZp› 8w¥ØeÎn`³ÛïûÙ~Í–Ly¸ôS—ÃBÓÀ§Ãs6 ®m‰ILçkÒ `êÆ$¤Ìqšx'“"Êùþ®¤2jØ¡Þ×ø‰ ÍÙP¥5 :ˆš@asOçÀáÖ’6Öæ†¡¶7>º–ÔÅ9èÖ¼£†õ3Y&Îæ½š â†Ê&`÷lÞ·ÉäąƤfÌ–†šÞØ=ÎT¯– ›>×°7ÕÞ ƒ—¶–ÚRò‰=¸~?Wû½¶ý{m°Ì,XƒGcÚEKüD®¼Às}?S§¦îk4™–źò¬M•ù¶êÒ\:¢³y¦ÆÎý¶ÞuúœM{Ÿë6këw`_¯íU»MÛ¯M›¬Æ’Ñš™}{Ì$ÏõýLçjê¾íù¬Muìo«.Í%|mëñÛz× ŸãlÚû\·Y[¿ûzí7¸ÚmÛömkÖ•Öò"uødN-¶GÖ ¨¢ _·Ån»Ø}Àîvøîô·ËNV->š]ƒ-aUÈ+)'ÃÊ» ì>`÷»Ø}à»ÓNÖç¬YµØRì¢J:`‹Ýv°û€Ýì>ðÝé'ëÖ3ª±voR³‹Q[Uô½¸¹Áù¾=·ý<߯~l¿Oû}^È}à{«a¹N®–±gXß–ý.ìwa÷ ·œæÃúø{âÃj ˆ\eí4v¾mÇþîØ±íwa¿ »\˜}à$`=ô=` 6WêLå^Óf 5ÎúêX%Ž© Y§‡”ÐZì’¨¬ÎѹºF{´ïw¹níñ¼ö5¿;¬¶ïË»øŠ¬ñ¯ŽUáK~£Î¢oKÇõû¹xV'Àª%­½ÛÂ+QPæàÏ+Æäà¾|ì«Ê²Dû®ægk °hÉ5Ú¬ÌýÛóÚ-yÆïrYõ‹ìÊøQVœŒ’ÂD—DeuÎÁú=\âR‚䖶÷Y·ãGÆ¥(Ú_Š}5¥¨*/c•£¸ …yå(È«°¶Eü¿”Çõ»Êdy˜;¤¥ÏÝÒòºÇ1¾ƒ#9ÙØ_D)䤣Èú_ÇÏEZZçïzù“ïÿp)Ž*ÁáƒÑþ1;WïÖÕv2õQÝ$G%ìƒGToN.î/Áz}ënõ¿ŽŸ«ç9#`  Ê ‘ÍôKí똫®Ê9J{Þó\ݧ=Ÿ¡½®}ø@¡<¹™QHN@|´¯K’’„¼ì|r¬âË£åmÞ¿¾º9j›KQ_[ŠòÒRäd–!>¶ÁL¤\…Û«±u3CI6ÕX[ý¯ãú]å²Y¾¼ÄqþáŽëµ4Î4ñ4õ<ÊÔ*jÆû÷b_mj«9YåVÿë¸~W¹ÖÖ£½úÞwíº§Þ} ösP¯­-BeuÊ+ QZQˆ2Šöu¬†¿Õ³Ì!Yš°“ï舴¦4×FÎ@¥ïð€‰ ´¯–õg=«*XÿÒB”rbU€Âük[Êÿ+Ê QC’^}݉çhÇIÖ«¶<©‘¾ðeÆp‰öu¬¹‡?—¿Ÿ-ˆ¼þãCâjÏö~®Þç|+w°>ßÒ¬VáÁôÛê’D„z!-9ŒD6ÄRš*\~®¶Ñ¹®›`Ö—òc.EFj)A¨ ›7V`îœ*ŒQ‹Þ½öáÓNûña‡øàýƒÖVÿ÷ê¹#†×bÎì*lbù €r¤§–1I05.^¯5`ÑÔÄÓ¡ùip*âlYNê4¸V ¸$……9()ÉCUe®"Wë@Í‹Z—ÎkÓùž®ñr6_Hà>7÷vµo5,§:KƒÚÇÁ^ TPZ€¬Â¤æ )§ ÙI¤¤ä nqJÊ P]Sˆû91pjÛc¼Þ!^¯žm_Ç÷c~omý«¯±HSÚOЩ©,BYI¡J9YùHOËGRbâbò‘Ë•ßsâØFEäqr¥•Ãó™ˆšÉ¬ËØr½ÖôÕæžëŒ€Uɤ¶‘Z4qæDK´¯cÍ]ô\ýÞàÑRÀÒ³µô¾ g±úè,áŒÕÙÜâ<œšñ8f¾*kÎû.Îte”Pš•ÀÊÛsK´w’âƒQY. «Œ¶pÚÈÙÆm)ç²næãß_Wʾ‘áeظ¾‚KåT£[×:¼ñF=žî ~ö³Ãxð£øñ=Çð£Ã=Ü>Àÿ{ì0ž{ö Þøã~t¥_yÂøjlXWˆ°2š Ú–1ºÚF 'ž)œxÖ”¥[ýêµ§šj4åù):E`9¸¦r@MÎÌGÙlͦ9€••¼òQ[“O€+´Îo/Ð2`*ª«Éå}³-©­Î%pXßBsfJsÃò§”µ•Ù¹½êl ýêš"ä—°ýrò•^€àäB$aoR üKà—P Ÿø"øÄÀ/>ÁIyˆÉà Ÿ—‡Bœ3pd+8aÈ+ÎE'Uîâ6ù≯$pPU•Ñ[·dÃË3!A¹Lšo¨÷À¶­3–L€Áîë±xÔ`ÌÚž«"=f¯el(2}Î~.3C:zø” ¼­:KKA£©»5€ÕRÐÒ3ëãÞ_§™ÃŽ‘Å:ËÒ*êøäÇßpÆzòƒåo*£²Ö9]C×jÏô—£KÎp©EI´¯cÎï²µ ¼w'µ²>_ž•]EŽÛæâSurú4ü½¾6‡þ¢„ƒiKëfÀJ ’—SŠ@Æ4.ZPImª¯¼²Ÿ`twÝu7ÞxW_ý%.»ì+\rÉW¸øbÇVÿë¸~W¹G=„ßÿ~?zö¨Å‚ù•<Êh>uøÁZZ 'žá{¶ 4?‘¨‚LQ2sóÈA3†³éðd¢ ùˆÏ³¶ú?>£€àE@+äÄ„ÚWue^»öAKSá»@¥#//…’Êý ‚k¿‰<ÜMk[曫¯+$Ð塼œßPU¾eÞtÖ`šëk®þ®û ¬dæ“FÃö N.‚R)ü’*à›\E©†O;‰UðНÄ.š}=bJ±+¦»c °7L‹ï¢ˆÀUQUˆbN’²²–˜ð¤täæb5-Wëu¦rŽ6¢6HH¦>iIaÔšöìÎ!åX ´tI6æÏËÆ¬™Ù˜:5 “&eqò•… ²¹ÍÆäIÙ˜>eæÀX^À™‹|NtdJÔõÛjÌ׳4 XŠé[ðÝ´³ôÆ„®Ÿb)—kh ÄJøîÍH ÙÂŒ(‹ ¡ó¢aí´é¨Û—‰ƒò¬YQ[4¶¬³½VkË´š«ƒfuš–—fr KDFZ,;G4—m‰ãŒ&™*xŽefi¨aé˜~S•Õ9:W×еtÍö"*˜gjHXhŠ$q.ËÔ©–ýLK4$l4ü½º2“KÂÄ·+`™Ùª4+•Ÿo9fΨBÇOêðÔSq×GpÝuÇqùå_áÒK¿&H}‹.úOÑñK.ùÚ*wíµÇqçGñäññGu˜>•ƒžwr³š–«³×Ó&žÃúÃkíb¤Ç‡pÊDn^6’Òsš ßèlì‰Ê…wL|b‹°‡â]€]4ûèx`\.bÓr‘™“‹¢â ´¤¡µ‡yPí)íJµ|‚Uv¶$ •‰Â‚L”–dÑoÂÉAKíà<Á²|‡ÔLêjdÚÌAVN&Ò23•ËóJ5à·-h3 4+U$µª½IÔ¢ËáMpÚ“Xƒ=Iµ”:KvS¼k±+¾îqÕØS‰ÑeØUŒ]Ñùðc;G¤ä .#Q©ÙØ™ŽíÁiØ‘J0ÓxZØ&c¨Úé@}‰eþ“fä盃 ës°p¡„HcÆdcĈl šÁƒ³1hP6<%úÈlŒ)ðÊÂâEÙ–6Íþ"MKæÁ–L®šK›,iJ"Zì\6“º†a¼c–4-WCY9i¶.œ]‘Ë¥HZõû²PV•À—„œâP”UÆÓ›ËAöìL Í•OäZÞǵ—jË•mcÙ\]tŽce]Î:r“Žð°@„ûÓ„Ôä(ú~Òùáü`é˜~S•Õ9:W×еtÍöfm6$,4E’8—€eêT˜GÀçúdÖª'¬GʆžK²B rb­µËÊŠSYŽ€ã×"s¥«Öñ#eÖ )“Ì€þ«éUôKíÃãÂ-7ÕW~‰KN‚Ô7«o¨Q}CPú7Ýäíë˜~˜ ¼®¸âKÜüÃcøµ³Þßg–¿oŸ‡ƒÍ¾æAËyâ9{`oLîù9ÖÌœ„0ß]ìW‰ˆå¬}otv…RÂZ±…Ô Ê–^‰Ð´Jp75€áyØ–Ÿh¢É9ÈÈ‘‹ƒgUženk«‰¨3ð84¬¦!';•€%M+Û’‚|hí«Í·, æ<½DjH¨¦ee!.5QI™Üfl3QQqèÚˆy©{Êg%3`tz>|ã ©9•„ʱ-Ê!;£+°+®’𵫄jJ < Z„Zìˆ­Æ–È l +ÆÆ|l ÉÁöÐLn3±Ò7«(;BÒÂv¯¡¯«¹Ý•ß$u5ÅôS 0 —¦¾lÌ Pí(Ó€9èßÿ”  c§¤ÿlôë—Í2à?>Û-¯]9H¢ÆXQ*¶iÛ™›,™÷âƒvaõ”1÷Ù'ùILìÖÓ¾è†)½º`rÏ,™Êý™ýzbîà>Xd”ìGZñ~$äïCXµ„¸bl¥¹hkp¼£²-M+¯€Mmmaž¶Ì©'(õÆGkùØîPYžMÐ"57¼g~~+‡šV†¥eÉaž]æ¾:2 ‹rJ°Š¥†™L‚@b" ZÉ–ÖUOÍÐY3kéwá\^$ ,²òàCßÏfΪ€,ñÉÃBš×–ùÐט‹ð’ù/®^±4Ò$è[‰±UØC_eD%V—a‰!yçbážl, ÌÙ•‰¥>™ØÁIE µÛ¶,‘œD°H¥Éד¦¼4ëI£’Öd@I %ÍjØ0‡%0;Ö!Ú—ö¥ß p á¾Ì†«Wf[ (0¬«n;-Ëí²GÍò"µP¦ ‡%»·Ì|Ò¤¦ôì‚Ùƒú`Ñ衘?|€Z°¦÷鎅#aù„X:n‚­‹g!1l;VÒ ýà“°žqóiË]ޤ¼=(*áŒ$Ë2¶Ô¾éŠF3|ÓðËZ†±?DqiR“ÀÕRs Uþá‡ÿãzÍÕÉ–Ìza¡ðñÞMGæ.‚7b¢B¨œ°ø›Ê¨¬Îѹº†®Õ€ÕÐgUS™A{t b"ö Àw ý·SS Á"¾ù³þ­så'Ò@a+-)±$$ÄîE6MÑ%…ÉôU%"3-q$ÄEû°bÛ$“`Y®%„W5,k†M¿R*µ‘uk+,Ÿ“Ìx7S³j ¬¤AI›X}òñ77Ö!s_ ¥ßŒ–e@Kþ­RÓúå/¡[·:¬YUA3N)53kYÎϱœxŽëÒK&N€û–íðö„{` ¶¦Ã›~‡¸Ì ä•íGiÍaKŠª!¯â R‹ê Z•ðˆ*Àú€Ll ÊÄÞØl3òPL2€èïòÞ ¬‹<±‚“‹”DëľÚ<‚3Íéyé(*’Ͼ2ë ³ø H[:¥qˆPAhzv&bS²‘Dódm£“³¨qe’<’k±"E’8 2犺žWœ@šU7faÞ® LÚœŠÑk1~}<z$bMzñÙO!ÃŽõ   Î;®Ðò_m‹,Á†°R¬*Å"ÿÌñ. Ï|LõÈÅ4‰{{gSã"`å¶`É÷´pa5¤, „$/ùª¦N¥k–ÃOµxq6–-sˆ4©Ù³¦Cš@K2b8A–ÇwnÏABý‡¤Ã-ëlÛÛíRXL~ë XÎvïé}{X`µxìpLëÓCiðæëðÖ1ìÃw1c@/,Ÿ8Ò’¹4®¤VNFavV0Ò }±;a>¶ÆNÁ¶Ø©ðO]¸ä—E ¶.‡º Z̓iŒa¬âµpO™‰1ßGYyZ£Ó°r¨j7ªq9TS€Õœ?ë|¬†>+UZR0"B°Þ›Z[îM ˆ&$Zæ8Å_ ?‘y¿Æ$˜Ã˜/•VÂÖ6-9©1™þ¢YÇäDj¯ù©¬pÔTÛ °4S--.%)¢cÇTãåßÀwµÌy§üT„[iR/¼ðgŒ÷ vy|e‰@Kš–~sÖéÀuÅ_áöÛâÅ`ÔÈjú³||JËjl0pžxNîÕ‹ÆŽÄö5«áãw¿XlöK†{p&BésÉ*ª#PBE«ú Š*÷£ â2K÷#&‡d¸" °Öø¥Ã#ŒÚ y¹Ô€r-ÇÙhû†`QB‚…L€òÑ ¼d€ °òó3h†d,P)ý.eô±e£Z~,‚¥ñ!Šd! *)=ƒfÀ,„D¨]E$f"! WM ¥íKº¯â¬RI”Ø’Ž9;S0|u<ú-‰Æ€Å‘˜¼![ö&RËË@¶´C21ó¶ù$²2’œG?a6ça©_>æì)ÀtÏLöÈÇ„y˜èžÉ;s¨qµ=`É$¸ï„I0˜ ¿M³±hQC/D‹%$\¬&‘bó&‚ë 2†ü\{s°×?‡ŸlÛê fL"ùB&A™Q+ˆéÜÐà\‹y(âÙLhLßvÖó\À± À’†5ƒ&¿ùÃbZßžX}öü³èôôS–|þëç0¤Ã;˜Ú¿æŒî‹©CºaÁ¤ðv_Џ$Äæì€GüLlЇu1#±-~ Ž ™I@+&;¬&•qÍRT›çuØÆ×á™Í{¦Œ‚oÞbŒÞú>‚b·þh9–4§&M„'@ëB¬†>+iV+i&¾»7ÀoÏFQËŠ¢å‹Tú9øÛÞ~"ç÷kÂÒT$°”9ЀVTø«^1Ôº’H*(*Hçì\‘ùe pLm7“ |W™éeX¿¶?ÝG-é0®¹æËÿ0:ƒP“€Ek °dÔuò“Ã$s죖UiÅhÉ—Õ”¥Âyâ9k`l^4ÞÞ ‹Çï8¬õŠÇÎÀ4j …ô3×¢¤êÁê Ëj9¸Ö ·´ÅuˆÉ®$ »X«|Ò°90ÁÔÒ³ÉÀ$pÔ’µ'_VkgІ`‘—›BU ‰i(+%•½"åeY()΢F•M7cÛ*Ê­m1}TUÔ°jÒÐä»#07? ©iˆJLGX\:ÂãÓ“”vÂ%váÙùПQí^I6_LZ6VîI¸õqè»8 }E`äÊ,÷¤U…õ(*ͳb©G¥@a +ˆ8›¬ËhšW½"³±Ê? s<©Ñx¨væcÜŽ<Œçvâj?íX¿+Í™œˆ!(p(íòȱ¨ìþ~9µ=–€šÌ8¬ 2H³êˇœl†<¤æÑ=ASçNš.P#£‰P¦DiY£FüHÞð¡i3+#ßò• [Û?ZXòYÉ è«çðÇûî;9¸¿qÿýøä¹'ѧë5¨Æú³çôÂViðYNj¶ÄNÀÚØáX3kb‡`}Ì(¸'ÌBhúzš ÷¢¢:é$ƒðL&BW5¬¡^…{æT,û«úcGêTLõìDÔúÓì4À:@|´œì¬†>+™¥Y ¬[å㵞û±×g‹¥mŸV{û‰æe¾å»’9P º‘,Ñäós“-°:z¸Š5 š¸Û‹tQWSÆZ¬Àj¼úê~jWÇ,ŠºC»j¨-}c±o¹åkjX_ÓþÿV¬øK—~‰¾}¾ÂO|nøÏsŒ‰P×½í¶cM~úÔjRˆËé#h°–ŽÆIç`ìZ» ¡A!ˆLÆÚ]ÑX¾# [}›…Œ<Òæ‹«PPRœü2d‘@’ÉtQ©ù•ˆÊ(%!#›T«}R±ao:ü¢³¨ÉÅG„eš£¦ÓÚÉ,2bTyôU‰ XD€*¢ÙO¦¿"+ˆ™eª*•`ÑOUNP3±Y5Í"[&ÉIiœ ¤¤‘T’Šø”T¤g¥ñül‹ÖÞ–ÌZ úe ´KÊÀbxŒ[á+¢0q} »ÇÁ;‚\À0‚”ÛŒ6(ß—´³<š9C© ªmçyfb*M€ã Vc¶ça,e‚`¥¶¡IÐÐÚ•¡Bf»Ý0ŒšÔç/<‡7Öû¿z ]߇¿†ÑsÞÅÔµ°Ä«Ö† Çú¨‘X9Ë£ûbItO‡DöƪÈA4NÂÞ”H¦_«´2ŽdŒ33ÖSnEï•ÏYÒgÕó”,™ë×[ÓÇcQtW,ˆúÜ’­iã0ËûƒNÎÏXÎÖn€Em€þ©Âüä&IúÍáÃÚsN|X°DXÉg%`’f%°’h_Ç‚üwÐ<èÙWt»û‰¥iÉ×!ß•Ì14 ÆFúqFçˆë:\ÍÌ5VciaR»ÑÚ•û/( ÇÕâ™§pŽ[ ÔXéØW|MšûWøÝKÇùqÅìYG0eò|þÙ15¾Äõ×7}®®{ýõÇñ«_ÂÐ!µ$ãp?‘û³±62ÖRšóç µ« ¿°D,ߎ…›B°Î#~!‰HLÍ¡ÆÄA(§IÜOL!å³ãĬ"ÆÂ?–& 4Öú¥`ƒã ÄÑO”““niBÒtZ X"NHK+%à”Ð/VÊA²¼¼Ø2ýI*PUªÚÚTUWñ™…(jwed V˜QÂm.ý\éY¤g¤2©U‰YH@-+˱ÒLµu좫”€¥©^q˜·=‹Üã±É?™íCÐÌÈB985lùФí)Ö*’ä-4Í.Ø…é»r1‰&AK»¢IpŠ{. 9ØÆÌCm Xª¿b¥¤iYi˜,“€Ié™äRŽÉ+¨<‚UÔ³¨q2f‹ÁÄ“'gYŒ¾}s,ó ‡Û·9Ø‚¼#çJÚٯŽh™ uºI°Ç›/bPß70bö[˜¼éCLßý æÐ^ÒK"zaqÏêŠù‘1/¢æ†wÂü°Ï°$¼76D‚wÒBÄÓ¯UT}õÙl”ÿ$c4¦]}¶äQxç.Àê„Ø˜<SFbSê(lNeq½0/²#æD|‚ÙábV؇X“0‹CûbÞŽTÏóNj‰êHgd ºXg2Y6åÃòó¥ ‹tõœ¬+ Xƒ>z‰öuL¿©ŒÊž Ò…1 Ȩ̂”I"XÈg%3 4+Ë$ÈìÑ$;ÄÑC^z»û‰ …]D ù®¢#Hb!`©N¥Yª2ÎjË-óak²p¸JºPÂZåìÕ³=zW]eÌkJW_ý5~òÐqÆV¦sz?g¡û°iÃ>¦l:€çŸ?Jr…´³ÆÏ•YP×ô‘#èѽ»=«¨=6ѰæÏõkhú ÅÞˆdVæ¬ À’Øæ† ðDDÑ„ŸŽÐ°8‡Æ"26ÅbÚEÑü—…¡éÔ®R±io|,ÀÊ<XlçÖ–ÈŠ+M^© ª*™1‚ÚTuu%¥Š@Um•XUU3ú™>´¼¦|„Yá`FØ{˜ú¦…¼ƒÁïcnð§X>€t3•µy¥áVqCac€Õaþ°-}"&½¡ïafïÞÁ!`føûÖý¦ñ~Sƒ ¦AÄ܈ŽX5Ã7¼u`5 Z.’.ZX¾>»9xøÓ>I»p‚E ()LµDû:¦ßTFeÏ`ÿ•‘ƒA›bŠ`!ß1 ¬r²â­™­lÓòíßG-¦ýDÿaäg(ìbÊÜ'“`T˜·•ê)'+–õϲÀ¿ž,³öÌt¡¬ëJ\«\€ÜôŒæ@ѕ԰X?=D¿Ws±U‘_EZq^{õ0n¿Md3›ïç}:uÜoÝWYÞ›NÖ0,9^VsF`*ÖíŠÂÜu˜»Æ«·b÷ÞX„%Á?(þpw÷ÁÞ pD%¤ÒG“ìYŒÕJÇæ€Tl¥ßKñ[ ŒqÊËuhXgctû2Ñ€²Á0UT ©Ð554wÖUSjÈ*®æÿ•“`¥¤’ZÓU1P7›±U™©”d1^+/?Â2’½H¿šs&ñ³0ž¯Á¼ªº©9Œa‹J¡¤2;I™Œ#=KD 2 I¶(*ÍG)s p^òg•2%V É »ÂÓ°Ö?Ë LK}ÉÀ#^D iVK}²È>Ìd8ãÈòs­œ‚mýgºÞI&-"i”rR˜oå»PæÀéÓ²0œì@Ål °œM‚)2 àΙIPÚ•ˆ,ñÞ°ÔÊx!ñÞ¸ î›çb³Ç$Ì÷ì9ŸbZл÷1=ìm̈ 0Q¦‡¿…©aĤ?`|ÐËð"Fûÿcý^Ædÿ·° ¨ 6GCHúZ’1‚P]›F5úT0mc€õÁü»°%uƼ‚©!obZØ[¼ÏÛ˜¡ûrË{N û¦„ò¾Á¯YåÆîýn+£àÍQà¹ßæòË?é¢5€å½ÇÓ2õ…†ø#*2ˆ~+æJ¢}Óoޏ-ÏsX§âad‹ˆÙ€"X3 4+•€êøÑjÎÒ*-ÓF{ú‰’.÷¥à`Å[‰Â.V €T"Ò…|Z&>«¦’>vÌtQÈåA”mý휀J³Ô”ÿJ@¤L÷ßœwˆ€SC0­ Ï­‚ZV-Þ}ç0Í…g,¥rÒ}t?ÝW÷w°ïMkÈ–Œ¢_‡3vj‹·„Y µlKvø%`OP2vz…aõªmŒ¥Ù¯Ý¾ˆˆK #0›€Å5, Û‚ÒàNF\h\&RÈÆ3ñPœÖ¤ŽAQKUТ…AšVc«¥mÑ4È¿ˆi¤Dk/a Z1¥ ƒgvRÓS‘’–bV!c¶ªÐlå<ûY}sÏ$?T$0.ƒ~ò Rþ³˜ÎJÙ*("&PÂl‘œM­‹AÏÅy†‚„QR–ǶÍ$бMCÓ, V¦?Å\‰Æ®­(ña©Šcu¦fjæ˜LÐßFS¡´*QÕý™cpó&ÒíImŸ2ÅAƒáB`¥`㱤ċe(V¡Ì†ºsXÒ°¶.œŽ ÷uˆ ]=d×k?ˆ)š$ìµc6ì™Û V>ïcÂÞ×09ä5L ù=&…ýÃ^Æ„°16äŒ zCý‰>¡ßŸç#àù ŒØýL÷áò™…VJ§cG¶ßÆë½ywÐ 8 £ý~‹‰Á¯`JØ«˜ñ¦F¾Ži–¼†Iá¿Ç¨Àg1Äïèëõ0¾Øõåa ðú¹åOë¿ö·ˆÌõtéCkkÀ’Æ$ ’ö$PÚËX«½þ'„û:¦ß X ëT'.·2§‹ùå D3Y¨eæÄlJKú†¹¿Ä{ïf÷Z5·°¾¶î£û龺ó€5ÔŠ—ô\» qáÁH Á?<}èË"Y`å®l H'ˆ%cý¶Òš×`á¼åd€y",:1©YˆÍ€U•wD:"˜……@QL€ýl³®œZÔŒë8Yrh[d„Ò')_Trzâ’Ó‘HMË$s-;—>+ý;ü-“ä ™un[û«šjc1þÒ™¸Ö›$”̲-,»¢˜íℸGXÇ=Â3ŸI-É‘^I“¼Zn ˜?#/ÇÊb¡À`ù©Œ$“…M-VLÃHå,rhX-_uœ+cˆòi‰”Åx=±W¬ jˆ LòW ¤D¶ÐVà¥Üƒ[63+J$­œTÈÖ“—hí³™KP¦@óà»™Kœ”ðݲWNÁ‚eý0få›ëñFùþcQ§Q!OcdÈ“üs |ýö>€Þ>?Bw¯;ÐÅãV|¶ãV|¾ýôÜñ†ìzÓ|;`cøXD¤oFIEìëݹ·a]Ò0 ÷yãC^ÄÄðßar$5¶¨—11ò·ôzù݅ϼnÄ';¯Æ‡[¯Ä›®À{ë¯À®ÆçÛîÀäÀ70ÅëcÜÿâ'—ùº{;ù°@FöìÞEJ©g9õ»)×Þà ;mC†H™i\¿Šfc‡+N&«ý62]$'"œ”{1Vò¥);…ñW!žÖñô”p`µ_¦ £auø€3¯K:“†%-KZ”´)iUÒ®Zªa)ûî纆5ó†öÇæ…³±×c;‚ƒD?Õšø¶ù·'ëÈþ[ç‹%kö`êôå ]ŠM[<°7,†ötì‰Hƒ'gÿ¾ÌtÆ7>™ä†´D+9­‚{›ËžîÊ i@K`#æ å×¢i¯äŠøTlÜiºtˆ'q$ ‘ñ©$ˆd’`‘CÓ c~èÓ*§Ö"Ë€CÃjÛä«=ƒr¦æ1[DTÓ*`MP±¼>TR‚uÁ…XÏ8'wÆ®…3x9ŸV=}ZfAGiZ.ù³”©]&Fù½ªÔeLNœ‘›ÅtXiŒ)K¥&Ç82–=€åH"PjÅPií+åTž@ÑÕÅ”ÙÏTSà`2Eg­]›Mö (í|4¶U\—K>+Ñb-?Ö’Y§déll_:KgÃÔ™1hþKºõ×´ç—ìÿ8ì}Dÿ {Ñ7ðGèp;zøÝ‚.Þ7¢³×õèä~->Ù~-:nýÁãNôwÿ&íykCG0•Óz‹„a^LcÖ›³o$u½úx<Œ!?ÃÔ€ÀûÑÓÿf|îw->÷½Ÿù\ƒO÷\ƒN^Wã÷«ðá¶+ñ>AëÝõ—£Ã†k0x÷˜æý ~Ýófšiî·fª¬ßýîwŽýôö“>®F2]˜NÜí¾)Ò…CÃbº%*˜z)0À—l3‡h_Çô›Ê|[€Õ„!F €Á2Òh–9—€eî•G*{Øn$Æ“i™jQmk‡“—g™0EIM ãÇ–ŠÂ\²àÚ)ÓEQ~9vl«fÖŠ¸ï¾£4ùµ/`éú÷Ý{ÔºŸî«û»¢a)‰õŠ)ã°uù"ÆInGpP(c””’‰tu¿TjYñXDÖàÌ¥»0~Ú*Lµ+7zÁ# †™0Ò™|Uæ.®Ä˜j\ ‰œÄGZþÌʲ KËn+€0~ù ÊÊóž¯ÐD¬Øƒ9›#1kC8–n€»?‰!Ó,ÎþKJËhF,'À1=~3ËBÐÉyÛ»Šý.™kA¹S›XR„•AeXVI©Àêr¬*–w Y—Ô·%Ö`CÐq˜ãë_ЊaFn6BâÖQÉH¡6YM@;W€%S o5}7c´”éBùÅ”F%Q °´ªI1oÜMKQ®Û¥\‚b ºš¨¹¹Ië€Å´KçN!@ ¤ŒÌ±kɬa˜<£úÍ}ý7=‰Þ»¤uzú݆^·¢WàÍèxºþ]÷^O ¹"»®AÇ×á³í· ×އ0ÊëwXÐ^qóØö0UòëÓ¯ Áâcϵøl7¯CpêB êpº:¤ëÞë¬û}æÍûy^w^…[®Àû®ÀìËØ1í[1 ÊÔ'`DX€å·JŒ Ô!Ú×1ý¦2çʇհÃ4$aÔræç+QÆ«N.¸x.Ëh}™iLý•Á›i¢LÌ—•¯*gršӒù%9„&¢"†$Æ´Kj¦²ô<=ª¸ÞU=ƒ†X‰n¹Ï`< K4~ø×˪·î«û»Xšx.7kçNÃŽu+±—i¾"£bNfàîàdlöIÀ RÝç¯õÇŒE;1g™;Vo Ä΀øDeÒG#óãt8šJ‰‹‹b2æÄÆ[ÌÌòRåst˜Ïv@5Ð+hzNÊÈd¾Ã$,Ü‹ñk¢0li8- ÂØeô½±¾‘ŒuÊ/âà^CÍ¥ŽÙØ+-Ò†ÌÖ2 JSk+ mJÃJ¡oÇ#*B‹±*¸ë«èÞ¨<XÁÌÁtV2ùiÙ‘.âV ¯ÖÓ"¼Œ QÌõ©DÚv+¢{P";ÓÒÀζ}›ýn‹µôH$3öo )M“L€òU ¬´?nœb®²,ò…â®´D‰‚ŒËK(M2V›fkw%Ó…¥a °æMÅv’/NÉ\îÏ=XÑwγè»ñèéq/zú܉îþ?D¯ ›Ð+äFô ýz„\îAJ? 5­n4 ö¥kÌîßcQ`OæœË$¹^V’ÜûóÎX¯L»ŒäŽ >WZ`%pÒõ{†^žaÑ=\]ü¯Cg‚VG‚VWÏÛ,Æà§³;~yé)Mʘþ¤U5¶ßD.ÁÖjXòO……ìµ²±ä%Y™ÙËJN÷uL¿©Ì¹b 6ìÈ IZ³ÊÒ¬N‚•c°<—€e´¾â‚dÖÊi¨…ùž5]Ì@ëw¥ô©¦ÿ£=S3Upf¿×¯’3Í:<ùä!k‘3ÅaIP@¨eGž`NÁê¨WrÛô‚—§X‚C-vïÖúy¬ÕK°gãéZ!Ô´CbàO Æ“à´eO4Ö»‡aã®pìôƒµ+¥7ŠgF†´,FÌÇ—˜ÇÕhÂö ¸3Ç)IìÃiVûŸ @¨Ï)k…«]!I˜»•¹ËÂÑ{nºÎÄçÓü0`®æn ¦™0‘Ù- -êûþýûX¢¾390I匿²²pœ0º2P·´Œ´ Ó‹ZÕºˆS€µ2 FóØöÐ,æ̲@«uðÈ4¨u´¤q)¸¸œä’l„V'ŽfP® ëý’°dW6ï¥FKª¼L‡ç °dÔJÂALÞ»b¹#é­!WHËš@mK9µˆc ˆEaWyiem Vz/.iXŠ¿ZB“àjXÛ¨]I¤Y ¬ `MšÞ}f?‹>ë Xî÷£·÷=èå;ú†Ü~á¥È[ñE$Á+üô ùzRëúÂïGäó8&ú¾Ž¥A}˜Åx!’r½¹ I"gtê;ÙŸ3·½2ýr °>Øx•¥YY`Eú"òø"Ê!½#x?˜@KšVwŸ[Hu_¬ywßß„ßÊ ˜ÚÓ$(sŸb¬ò²iÊÒºNJéíë˜~S•=·¤‹†ƒ ƒ„! %ÖRö§föç°ŒÖWÏ¥%dn¶÷õñJµU'kf(ÿMBú]]{Rîk98F†—s= jš’àÖ[5klHºñB 1ô[ãÚÙ×Öu•TWù'N¨¡Nï惘µ„Ï œxn[6;×,Á.ÒÜý=wÒçŒø„$2AÊ{po”( ‰Ìf‘FSV©ÛY ÄMKM¤?# ~$íܱÎõÜn¥›>ÃÔ(æäÚw,JÚ“˜b–Äž‹O# „Zżm°ê1+'ùàÃq^è4Ñ CøbÙŽP„Å&¡€ìÁZÒà÷‘/àý½”ÙŠ™ C)žD 1¬Á¶ì-Àâ m4,™×S»ZC“àJj[K÷–`¡O¾•Àv5c­vÒ@`ƒdʧ%ê{:³ÐGqR õ°Ü#è#•}¡g &mŠÃ´-ÌûD°Ë&ÅÿÜ.ô) †R1ÐħœÊÐn’ÜŽ¦¿jM€Û·e³æ2ãŒL€J„­„ا4«¶lo«ßÅzú°¶Ñ‡å,Ê mkÙì˜6ýs œù¬xý·<¡^OaøÞ'1*ô Œˆ|CcîÅ€ØÛÑ/úfô‹¸ CîÈ€§³õ6V… bž²%´ïú2.!‘3ÿ4+4Xoͺ ‹cz`÷Ï16æ LH| “R~…©éOcxò=è#úÆÞˆÞ‘Ðù3Ìf|ÖàdžÃ½ÿ‡ÕÜÕÖ,Áïb¶öæÚ ©ßÏ%`­O¦†c‡š§hÃßrlOʽrù¥¥”qZi­õÀýgnŒÖ.j»(‹ò®2 AKÚ•Ì÷Ýwï¿_Ϥ’Z cà¸h¤+€å<ñܺDϹ®ùص~%½v":4ÌÊƲ1N+(ˆ„š©â¬u¨”ǯ¸ˆ¦UægÌÉb˜Cl˜µ‚ÀÖÆHq&žÀˆÜœjµŽ8W̓Êú ììJL›Ë{E$¦’µ˜@°ŠÁ¨è5''îÁ{£vàƒQÛÑsº'fŽïÌÅP™ÑBØkÈd«©.£Ç«UÊ$¹¢Á+½Sy™´D›o ¶šs{Ÿ¬“>¬¬áò/ʾ¾$ s}Š0u³Vl§Ÿg[fîLÃâÝ$¸0{'ü£HhaŒÕRÚW3±ð¯t–IÇøÍ)¼*WÄ`Ê–8x†§’%È\ˆƒÖ~§-9Oíäа¸F5¬•dÊemœ2™ä ®¡ÌLÊ1¨`beÅ0&À¶*SïÖºÙ“­¥CZ΀µjÞXÌ™Ñ#§¼…!³^¡ù¾˜wDÌ^Æñ´¬$ËçÂcÍbxoYƒ@OjIž\vd븯Y=[Ö#6ÔE\ñW(”³¯†åå¥\½—鯤ùûx{‘ú¾Û¶m…ûÎíð÷gRäØådÖäˆÎ¬h`“OG&À”,’@¨Ù­Ý‡Ù[b0fUú-ÁgS}ðÁèxäVt¼“VùcÇÞh®o•ά¤zŸ ÀWÓ?TUÅ¥ê+idú¦b¹2—_a!Ó31û‰´ÎÞÇÖ(é‚´ë‚ò±Â?«ò™}=ó¼ó¬d¶c˜ñaØF¦.ZŸ¡ëÓ1rcªHS¶¥`úödLÙšÄå1tM"ú¯LDŸåIè±$]ÆQ ˆÁ|æ{dö å-l‹x&W¾sgV4ÁXqW3IWײ#ãÆe1Ðä$’X 5žZB¤=€ªE€%vÑ*ÒÚw’Öî³i|6;èìF<70kù$ÌñÆû“¦u² èÂNÆÆèQ˜Ù“âŸÇèÄG1.á˜ý0EÓæ¨qL\G'n “­ÕEpp«®1V‰3`i¥ÑZ.-PÉl ¥ô÷‘º¬¥ã³3ãÐký˜Uð†dÜŒ!©·bNæ0%ð-LY׫Ùä·j˜ÓÌ€.²Ï”˜÷|Z^Ä•ŽÜX™o°š6…K0U_­©*eÆ .¾·˜‹72“ú#ÌØ®œ‚§ƒŽBJÍôЃÇñþ{‡1q|=V­¨³Dû:¦ßTæÔÒ$S r>üða|ôÑ>,ZPÉàrjŽõ°ZXÎOËZBÓþΕ à¾z‘e*\;{*O…µs¦!tÏ6ç%X&>i'Ýœû­Ìt2ô´ )IA^^¼v’I¶‹þ®EF ,“ VJŸ–(ïgŠÑ½»²Jä ®zœ€¥î1˜¶1c×Ä`ð’ô˜éƹã‚U—I;0a…/¶ùEÑT™n'&¡D¬Àþ¯€ã Ê™ƒÐ2 ÒäVPIàJG3¿ËT,æ`kûºóyŽLEHäÚ`òQ­aÆõ•¾XÏäÀ+&0ß3“÷4fÖIÇÀµè¿&ýVg ïêtô]•Š~«RÐoe2¾@-MD—E‰è¼0æ' Ó¼8t_ƒqb±%0Ùʦ¡,i£í æù,âË – ¾Ìº!bÅÜ9Yd2ûÆzjWA9–ÉÐdcoïzYÖÍ,/2ÃÛ¨Y)h8…taI*ƒ3S˜)IŽôF¨÷FlZ:3G2UÓØ>ز~¸ëà°Ë¢»cf<ƒ‰ãÙño`YLw숛ŠÐ”ÍÌ£ÂN•â+š4û14Ô†ï Z€­ŽÎTZZ?Gi„”,¶÷†'0§øŒÊ¹ KŠÞÄh¯W1ss_þ–Ò$`¹Òym «i€¸Ë" ¨µ©öú•1‘mÞüS=|ð°EÀ8´Éoo½åK&º=Ƶ³Žà­7[¢ýÇ?fý¦2°t¾ˆ÷ßoü±žôá*øù”[Z–69Ó áLºhnâ© ¨Ç*ææœ>³‡ôÃÒ‰£ÄÌ6åLlîa⤔t¸œ!V¬VÄf†ÀÊËZ˜Ô‡ìÁ ‹ò®•±åÓ’_¶Is2¿e™}HžX¼3“ÖEcÌê8 [/æÒ8ÁÓÒ¬:ߎ1K½ÉfŒ$[.Í+‘4€[Ë‹´4‘­fhC9M„é‚©*˜þ¨¤8›ß¿c­-­R|6Y9V%É ŒÛ”J‚D ó &aOx™ XëÙÛã0vCµ§$ô_•Œ>+SÑ{Ez.OC·e©è²$%£Ó‚Dt$PuœO°ŠE‚ÕH‚öŠÝñL÷Ä€èR-VéÐÛôŒ&KIqE¤P*&æ5\·–DuYVAå,iÃÀàæÆa—kñ¨Áð¥f•ˌص\¬¯1Éåråêð GÁ.ö¸{ÓJDÇx"4m=Ö0 Òü˜-YÇDµ{’æ!&ÓiF"Á.³j;1ƒXíêL€¥@4£ÀBk•ÒÚVEY&¾X÷$—¼Ž%Ù0|û«Ø´¶Ñ¥­VV#Û–²¦'¶[Fôæ:ò™~oo051Cõµ¥ ¹ô¹{9FsÅ×_#h=àдdÎsPÝ¿¶„W]õ5׽₌̨ b‰öuL¿É‡¥ò:Oš•ÀêÕ?Ô3An5Üw”(˜6‹÷k.¾Å°š›xjòá³Í2÷Ï1K¹Šxð Àržu;2G¦|™eÕˆ‰¶Â/|I aš±˜($'ÇQËJ°cÔR÷½#]kÓ¥q…àm{ã0}cבŠÁå1è3?&íÆ»#¶áÃQ[1hŽ'Vº‡raF²?›%&¡Ñ6¬¬ã¬“î#Óe9ÍÊü^Ê%Eä¿*.âÊÙ4mP”#SÚƒ¾CÃ"«/+ž¡ÉÔ±7*±ÉIˆŠ‡/ƒ®7xGbþv.æ¨g“Ö¸’kf-Gï¥ –Ù¯ÛâjV’xt[‡ž‹c1€`=~}×ÓŠeüU2s3­jMè›{çgó­4c™E¼(dàplL.'%ZÐ1 ›7gaÏssÉe²¯K1dmѦgª³€%°Rj&å LÙ }‰~óZ»ó™þeѸðß±žÔWDencŽÀ±XMÐÚ7 éËcåÍDq|Ž åšÉÔp&°2á -+mKj¾fW¯/Ö<‰­Å1hÝˈØbk¬Ú °š[§ëB6 šåH”8Wb–)ÑÚZW3¢ŸÍGØ`µeÝÌl´–¦Á´”RìØNÐU?QÓúéOYËÛ‹0!°2ÀålòsÞ×ï*§x«›n:F3à!ü‘š•ÀjÛV®O•Dd¥–…h~€p¬–L<Ú(`9—úµ•Ó‘ñWé©ÑœXqYI‰1ª+)n~^ª%Æ5š‚°˜;€5mC¤eì5—`5ÙïŒØ·‡nFWšg¬õ³ —)šÌ ÇbK¤a™ìu`er M#I„š‰eyÑ¢ÉÖ¶šì[Xg;Àê|åÔšW‘Lw•”ÂôQ|v>wvv ÚÁ‘QðØŽ5̈?k(¦l£¹3#VEb×δ< )ƒ¹?œÇ&¬Ä\ÜFßF'rÉù鸦։UÏ%`iŒÕr#Z„Qæ¿-›³±|y–/he[t÷Lþ¦lCŸÍwÛØ¹M–óÒÚZ¼qùøh3`c²›`µvÆf„LødDú»3éaˆµÖ•Í‚{æqÁÆu\†;ˆs)Öò"W4TgêD´mø@j\É;3ïÀ5¯Ó$vF;u[Ö™êcê§™ŸœÕZ*Dk[úY³QeaW€°L™2‡:?·öuL¿©ŒÊê«kèZº¦®ÝÖ¢5×k Ìr$̤.ÑZZ¦ä»Xm]7½3H5ÁD å±ST÷*ËçôôÓñã±H« Œdê3iœ´Õÿ:®ßUîž{ŽàWOD2'N¨"uÜVUô[‰háÊ`ë¼âpK&ž 8Q•I0Äk3*¸øeSÚ‘&™õ .)dâYfAIK‰¦“JÀÈe;Xæ93Ð6¼†ÑLµ¨¢@È7<žz8/ §S|ñÎ(¼1d+>½ Ãæ{bý®`Ä2»F)/+¤A £ñÈÆ}3,YZ”áD~í®zÍrí+nO¿Ë$ئ5‹0B3Ì“ùLU@Fbqq¦˜ºWMK‹GL|4Ã#ç†ÍÞ¡X½+KIÉ_°- ó¶ȶ…ÓU^‘ØêͶ Öš”„l.™Rε¾47Y;Î`9“.´êð²µ²°Ø“)¢´oÝâ”/ðDF‹ÖŒ®žÓ$`Õ–g 1d·•ŽItX–:üRÒÛÍÞRVM‡=›W!“ùÜJK¹Ôvc«v3°ÎÛZ:¤¶Ž)\pÕOËôwºùÏ•°9ó›~_ê9š&ƒ3ƒ•Êq ¬†+ŸøÙ²e§}¼ÍiWºõQk‰ CÒS¹¤{3ŒÓÙ™§lü K¤ìÿ*£²:Gç꺖®ÙVÎcW;L“~δM‚F{ ô`æô ‹U¦lñÑ{°Ó-•ù64¬öª›Å”¦%ó Ÿo9ÙT•è×·o¿]_¿p¿øùa.s÷2½’rÞÍD¶Úêÿ9åÞ~«ž«×ÒÁ] _o‡Pš•+W¾—VO<ù-¯›31»PÍ ì¦Þ»¤‹9 ’Å1Cd Ç À"Bha@ͼeÆúO’ƒñ‡©ŒXŒMf¶ šÏ&¯DïYÞŒµÚ…O'¸c M 6ùÃ/4’Ém“-â„åF 8i—™LbrÊ¢RM­®¬„kbñ;)äR=E”Rúܤ]é<“ו6<Ó·áЬiéáýë©)+Ú@š¥L¦Z.(?—f=úó“cÐè(FDaox4Ÿc°72ÁL2™À…4 T9\fˆÀWÍU˜ëiz5àlbS϶ޮ|ïVýW&kù2­]Ù-fFv/aª&_Æ`eÊÂå0 ºríÖ–i°r*äÒãZND %(5X+'qáÄùÓ°c-Ò˜§Š|ÿ¾\¹e¢¢: U5`¹8£4óaŸÍ Ç p¥QZZ ¯çjÌZ?u¤øjæWÊ™—:±2[hÍ&™EÆ«œôh!G–QY£su ]«=bJ\i³ÆÊ4Ô°Œö"°ÊÏáûg¶ -ª˜ÃlêÌ•è¿Í­o°Ú³nÇ8œÕZèN>¦B#¢#Ë,íhá‚*Œ[ƒþýêÐåóz+ 2®¿ÿÞAk«ÿu¼_ß:ŒSc•ß¹½‚K¦”Yôõ}5§Ì€®Xg3ñôæÄ3+)õ59g„L_UÔÀ*ðóOƒ—¤)À–Ê‹–^@êyx\"A+³7bü ‹¾¾„é¡öE 95ZK:A›ƒ¸4~â^'´,Ý_Çî _¥ïG[ýoˆ]m5ð›1̱¢Ã,épS(—¡\ `}µ«ÀK¬Ii~ò§åæ2¥”%Œ¯¢VZ@£@ª’•|ò§žQù 6cfK¿mù¯”EFk_y3àüùŽœJËdÖ¼š3‡¾;.8™Î”]µL‡ÕÞ”û&K ´¯*Ë-iZá»77i”‰P¿Ç{!ŸùÝjÊÓÙi©Eârösˆª;W>›t-MEc¦Á–¾˜Ö”wÅèlï׳;:³²X8VÖVf V 5,3¨Ìiçœ0…´e{¶¦ œÏi˜Õ=<ÄËJJ«@SGž¿jk` Êó§¥?‚=™ ¶ñìïg[Ÿo»nÆÜ%_—wÏË.¥i·Œi¶ÊÉð«$1£ Û·V[ÙÖµDˆ¶ú_Ç}½+Y®‚ Q–ÑŒÅ6ãùºNkœÚg;ñ”vå £®á$´±ÿ3  E÷¨#‘(‘Ä%K‚c˜¿Ùäý"¤u$rÍ+NðGeioÍê”;á„ë`H£³Àó„hßPòeǹ~mÑ×N.}ë¦.'@ÔZH”&ÍP žÃšŽ `õ»5.X úóµu}]yfg +©¥V­Ìa.Á\f»pÈäÉ9ôe1G¢/³ HòR¤}K–ÔE5›3|ÍÒdZhŠp¡ãú]åTþl×Åq¥1Mƒç´ZV®>Ëù^®aV÷ôÔHËÁm’Ò6Ìó§uªÒ’Ã,¿GcÙßÛ²=¾­ºÐÒ¬S´w±eÒSî?%¬U–u-M¢´LÚêÿ’ÂrÎÄËX®Ì*¯óÎ&s@[L<Û:3„óDîÔ@¯A^,?e«àʼ¤¥‘áW\’C&1v‚™a[@Õˆ;Á4ÌòîÎÛ¶°ì4gt¾‡ãÞÊü 9åk3&Ì“['?œUö‘¤½ëÛÜ7f|Xe ¾NŒÏg8³úoÌ'på3ëE>ã°ò˜G’)´bé`þCål¯¾bêÚ¤†ÕÜÃ|W~?×àq®ï÷]içæêÑdV÷£µæùSÜ]5—Uo*û{s÷kÉïßfÝ\Ñ4Zò,­)û]Ÿxê™N胼eV:Ls©iÙ`Õtà°eڱ̞iguwµÜÙtêÆLOßÕºµåsÚ×r-ó‰ÝN®µ“R‡…@ıN0¹üI¥C´¯c–¹šeÎ…í{X A«­M„Î@ÕÖ×þþ}p°ø¬Î¬ÂÆ då‹v-Šåù!åk ´Zs¼1Ÿˆîy¾´Ïù\OÑùM¼™‰q‰@Ì?QéÏçg³ën¿?»´¬œ¬û;WãÉ%XꕉÈ8¦1ÉŽf¼Ìù#ù9±ŒkÈn2ÀÑU jnÖ¢{è^çSÛœ¯uÍω!Í;‰ÎÝìk9VÞÏT@•e ÀÌ?ÿúéùú.ìzŸ?cá÷ù]¬w¬Àk£s˜%[ÜwÁÏ{3|”>ç<o¯ ÌS·þd®:“³îì·¼&¯}¾µÇù\ß½¾[éË8¥jRÊ™Xi±ViÉ! <ö8oûéùü^캟ãâ÷å¬{>)Çaè\oÌ[²«–ϲ%ÓÏ[Y8¦NÎeúaØ^­«kèZçs[œ¯u_·zSÂlBƒ òÕ1eË(æºS L¤ë‰[Ïÿ~z¾¾»ÞçïØx>¿»ÿ{h·§6R¾IEND®B`‚bitpim-1.0.7+dfsg1/help/faq-phonenotlisted.htd0000644001616600161660000000201310360163373017402 0ustar amuamu#include "pagestart.h"

You should select your exact phone in the list, and if it isn't present then select Other CDMA Phone.

Picking "similar" phones means you are experimenting and could end up with problems such as your phone locking up with a worst case of it becoming completely inoperable. Different models from the same manufacturer usually have gratuitous differences. Note that in some cases manufacturers ship a phone with the same model number to different carriers, but internally they are very different. If there is a carrier listed, only select the model if your carrier is listed with the model.

The best action to take is to get your phone supported. You either need to do this on the developer group which requires some developer/technical skills, or get us a phone.

Phones the developers have
Loaning a phone
When will you support my phone #include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-lgvx6100.htd0000644001616600161660000000117010360163373016177 0ustar amuamu#include "pagestart.h"

What works

Phonebook, wallpaper (including camera images), ringers, reading the calendar, filesystem.

What doesn't work

Wallpaper assignments from the BitPim Phonebook editor.

FAQs and support

URL(http://www.phonescoop.com/phones/phone.php?p=504,PhoneScoop) provides useful information about the LG VX6100..

Contents

BEGIN_TOC TOC_0 TOCITEM_0(Cables,lgvx6100-cables.htm) TOCITEM_0(Notes,lgvx6100-notes.htm) TOCITEM_0(Howtos,lgvx6100-howtos.htm) ENDTOC_0 END_TOC #include "pageend.h" bitpim-1.0.7+dfsg1/help/howto-multipleusers.htd0000644001616600161660000000576710557504007017675 0ustar amuamu#include "pagestart.h"

There are three ways to use multiple users with BitPim.

Multiple users at the operating system level (recommended)

BitPim stores its settings for the current user. If you have multiple phones and users, and login to your operating system as separate users, then it will work fine. (On Windows XP, use the windows key together with L to switch users). This is the recommended way of doing things and requires no extra configuration.

One user at the operating system level, sharing phone data

BitPim is designed to allow sharing of phone data across multiple phones. You can just connect and use multiple phones without further configuration. This will effectively merge the information across the phones.

In future releases we expect to use categories to limit what gets put on each phone.

One user at the operating system level, seperate phone data

If you only login to your computer as one user, but would like to have separate BitPim data settings for multiple phones, then you will need to tell BitPim either the data directory name or the configuration file name upon initialization.

BitPim stores all of its settings in a configuration file with a default name of .bitpim. The name of the current data directory and configuration file are displayed in the settings dialog. To specify a different data directory, you can use the following command:

bitpim -d [data dir name]

To specify a different configuration file to use, use the following command:

bitpim -c [config file name]

In Windows, files with extension .bitpim are associated with the BitPim program, ie, you can double-click on such a file to launch BitPim using that file as the configuration file. As a result, to use a different data directory, Windows users can simply double-click on the associated configuration file located in that data directory.

To create and use a new BitPim data directory, Windows users can do the following steps:

  1. Create a new data directory.

  2. In that data directory, create an empty file named .bitpim

  3. Double-click on the .bitpim file to launch BitPim using the new configuration file and data directory.

If you want to create and use a new BitPim data directory, but also want to maintain previous BitPim settings, you can do the following steps:

  1. Create a new data directory.

  2. Copy the previous BitPim configuration file to the new data directory.

  3. Double-click on the copied configuration file in the new data directory.

You can also drag out the .bitpim file from a data directory with your right mouse button and drop it onto your desktop or into your menus. When prompted say that you want to create a shortcut.

Additionally, BitPim automates the above process via the Create New BitPim Data Storage wizard. #include "pageend.h" bitpim-1.0.7+dfsg1/help/errors-nomimeopencommand.htd0000644001616600161660000000035510360163373020624 0ustar amuamu#include "pagestart.h"

You have tried to view a wallpaper or ringtone but have no associated programs defined to handle them. Linux users will need to edit their MIME associations as defined in mailcap files. #include "pageend.h" bitpim-1.0.7+dfsg1/help/bitfling-security.htd0000644001616600161660000000311110360163373017241 0ustar amuamu#include "pagestart.h"

BitFling has not had a code audit/review. It is written using a language that is resistant to attacks (Python) and uses existing protocols and toolkits. However nothing is perfect and you get no warranty or guarantee of security.

BitFling has builtin firewalling and will immediately close all connections if there are no defined users for the source address.

There is currently no limiting to what ports can be opened via BitFling by an authenticated user. Unauthenticated users can't get that far.

If someone gets hold of your certificate file, they can pretend to be your machine and people on the other end will not be able to tell the difference. You should also ensure the fingerprint is securely transmitted, otherwise bad guys can pretend to be your machine and transmit the fingerprint for their certificate.

On the BitFling side, the password is stored as a secure hash. It is not possible to recover the original password, although it is possible to check if a particular password is the original password.

On the BitPim side, the password is stored obfuscated and the full original password can be obtained.

If a bad guy can get access to your BitFling machine as your user, then they can reconfigure BitFling to allow anyone access. If they can access your BitPim machine as you then they can recover the password you use for BitFling. (Mind you that will be the least of your worries).

If you are experienced in security, we always appreciate more eyes looking at the design, documentation and implementation. #include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-lgvx11000-notes.htd0000644001616600161660000000200711220076716017400 0ustar amuamu#include "pagestart.h"

Firmware Version

  • The firmware version of the phone used for development & test is VX11KV03.

Phonebook

  • BitPim supports all phonebook features of this phone.

Calendar

  • BitPim fully supports all calendar features of this phone.

  • For recurrent events, phone events have End Date and Repeat Until fields; when BitPim retrieves calendar data from the phone, it combines these 2 fields into the End Date field.

Ringtones

  • BitPim can not make use of ringtone files stored on the microSD card at this time.

Sounds, Wallpaper, and Video

  • BitPim can retrieve and save Sounds, Wallpaper, and Video media files from/to the phone memory and microSD card.

Music

  • BitPim can save music files to the phone memory or microSD card, though it would be very slow to transfer large files.

#include "pageend.h" bitpim-1.0.7+dfsg1/help/versionscheme.htd0000644001616600161660000000220610654722450016457 0ustar amuamu#include "pagestart.h"

BitPim uses a versioning scheme common with many other open source projects such as the Linux kernel.

MAJOR.MINOR.RELEASE

The major number is incremented when there are significant changes in functionality and form.

The minor number is incremented when there are new features.

The release is incremented when there are minor changes and bug fixes.

Releases

There is a new BitPim release approximately once a month. It incorporates new phone model support, new functionality and bug fixes. In between official BitPim releases, there are incremental test releases that are available approximately once a week. These test releases offer an opportunity for users and developers to try and test the upcoming bug fixes, new features, and new phone support, and provide feedbacks to the developers. The goal is to reduce the risk of having new bugs and surprises with the official releases. #include "pageend.h" bitpim-1.0.7+dfsg1/help/rootcontents.htd0000644001616600161660000004313411320164363016345 0ustar amuamu#include "pagestart.h" BEGIN_TOC TOC_0 TOCITEM_0(Table of Contents,rootcontents.htm) TOCITEM_0(Welcome,welcome.htm) TOCITEM_0(Tour,tour-master.htm) TOC_1 TOCITEM_1(What does BitPim do?,tour-overview.htm) TOCITEM_1(What do I need?,tour-prerequisites.htm) TOCITEM_1(What do I do first?,tour-gettingdata.htm) TOCITEM_1(Editing your data,tour-edit.htm) TOCITEM_1(Sending your changes to the phone,tour-saving.htm) ENDTOC_1 TOCITEM_0(Troubleshooting,troubleshooting.htm) TOC_1 TOCITEM_1(Ports/Serial communications,trouble-serial.htm) TOCITEM_1(Linux Issues,trouble-linux-issues.htm) ENDTOC_1 TOCITEM_0(Reference,reference-top.htm) TOC_1 TOCITEM_1(Dialog boxes,dialogs.htm) TOC_2 TOCITEM_2(Settings,ref-settings.htm) TOCITEM_2(Comm Port Settings,ref-commsettingsdialog.htm) TOCITEM_2(File Contents View,ref-hexviewdialog.htm) TOCITEM_2(Restore Files,dialog-restore.htm) TOCITEM_2(Get Phone Data,dialog-getphonedata.htm) TOCITEM_2(Send Phone Data,dialog-sendphonedata.htm) TOCITEM_2(Editing Calendar Events,editingcalendarevents.htm) TOCITEM_2(Merging phonebook entries,dialog-mergingphonebookentries.htm) TOCITEM_2(Audio Conversion,dialog-audioconversion.htm) TOCITEM_2(Calendar Import,dialog-calendarimport.htm) TOCITEM_2(Image Preview,dialog-imagepreview.htm) TOCITEM_2(Calendar Merge,dialog-calendarmerge.htm) TOCITEM_2(Calendar Import Wizard,dialog-calimpwiz.htm) TOCITEM_2(Calendar Import Preset,dialog-calimppreset.htm) TOCITEM_2(Create New BitPim Data Storage,dialog-newdb.htm) TOCITEM_2(Create Trouble Report,dialog-troublereport.htm) ENDTOC_2 TOCITEM_1(Tree Items,tabs.htm) TOC_2 TOCITEM_2(Phone,tab-today.htm) TOCITEM_2(Phonebook,tab-phonebook.htm) TOCITEM_2(Media,tab-media.htm) TOCITEM_2(Calendar,tab-calendar.htm) TOCITEM_2(Memo,tab-memo.htm) TOCITEM_2(Todo,tab-todo.htm) TOCITEM_2(SMS,tab-sms.htm) TOCITEM_2(Call History,tab-callhistory.htm) TOCITEM_2(Play List,tab-playlist.htm) TOCITEM_2(T9 Editor,tab-t9editor.htm) TOCITEM_2(Filesystem,tab-filesystem.htm) TOCITEM_2(Log,tab-log.htm) TOCITEM_2(Protocol Log,tab-protocollog.htm) ENDTOC_2 TOCITEM_1(Howtos,howtos.htm) TOC_2 TOCITEM_2(Backups,howto-backups.htm) TOCITEM_2(Multiple Users/Data Directories,howto-multipleusers.htm) TOCITEM_2(Import Calendar Data,howtos-calendarimport.htm) TOCITEM_2(Import Outlook Notes/Tasks,howtos-importoutlooknotes.htm) TOCITEM_2(Add Ringtones,howto-addringtones.htm) TOCITEM_2(Add Images,howto-addimages.htm) TOCITEM_2(Set category, ringtone, or wallpaper to multiple contacts,howtos-group-edit.htm) TOCITEM_2(Do Data Recording,howtos-datarecording.htm) ENDTOC_2 TOCITEM_1(USB,hoto-usbintro.htm) TOC_2 TOCITEM_2(Linux USB Setup,howto-linuxusb.htm) TOCITEM_2(Mac USB Setup,howto-macusb.htm) TOCITEM_2(Windows USB Setup,howto-windowsusb.htm) TOCITEM_2(Vendor and Product ids,ref-usbids.htm) ENDTOC_2 TOCITEM_1(BitPim Internals,bitpim-internals.htm) TOC_2 TOCITEM_2(How BitPim stores data,internals-data-storage.htm) TOCITEM_2(Phone Protocols,internals-protocols.htm) TOCITEM_2(Working with the code,internals-code.htm) ENDTOC_2 TOCITEM_1(Command Line Interface (CLI),cli.htm) ENDTOC_1 TOCITEM_0(Errors,errors.htm) TOC_1 TOCITEM_1(Device Needs Attention,errors-deviceneedsattention.htm) TOCITEM_1(Failed to open device,errors-failedtoopendevice.htm) TOCITEM_1(No associated programs,errors-nomimeopencommand.htm) TOCITEM_1(Failed to execute external command,errors-mimeexecfailed.htm) TOCITEM_1(Failed to automatically detect port,errors-failedtoautodetectport.htm) TOCITEM_1(An exception occurred,errors-exception.htm) TOCITEM_1(Invalid Image File,error-invalidimagefile.htm) TOCITEM_1(Zipfile corrupted,errors-zipfilecorrupted.htm) TOCITEM_1(A Zipfile is required,error-zipfilerequired.htm) TOCITEM_1(Failed to find PureVoice converter,error-nopvconv.htm) TOCITEM_1(Phonebook busy on phone,error-phonebookbusy.htm) TOCITEM_1(Data Communications Error,errors-datacomms.htm) TOCITEM_1(Access has been blocked,errors-access-blocked.htm) ENDTOC_1 TOCITEM_0(Phones,phones.htm) TOC_1 TOCITEM_1(Phone features supported,phones-featuressupported.htm) TOCITEM_1(What phones do the developers have?,phones-developer.htm) TOCITEM_1(What phones do the developers want?,phones-requested.htm) TOCITEM_1(Audiovox CDM8900,phone-audiovoxcdm8900.htm) TOCITEM_1(LG AX-8600,phone-lgax8600.htm) TOCITEM_1(LG C2000,phone-lgc2000.htm) TOC_2 TOCITEM_2(Cables,lgc2000-cables.htm) TOCITEM_2(Notes,lgc2000-notes.htm) ENDTOC_2 TOCITEM_1(LG G4015,phone-lgg4015.htm) TOC_2 TOCITEM_2(Cables,lgg4015-cables.htm) TOCITEM_2(Notes,lgg4015-notes.htm) TOCITEM_2(Howtos,lgg4015-howtos.htm) ENDTOC_2 TOCITEM_1(LG LX570,phone-lglx570.htm) TOC_2 TOCITEM_2(Notes,phone-lglx570-notes.htm) ENDTOC_2 TOCITEM_1(LG PM225,phone-lgpm225.htm) TOC_2 TOCITEM_2(Notes,phone-lgpm225-notes.htm) ENDTOC_2 TOCITEM_1(LG UX-5000,phones-lgux5000.htm) TOCITEM_1(LG VX-3200,phone-lgvx3200.htm) TOC_2 TOCITEM_2(Cables,phone-lgvx3200-cables.htm) TOCITEM_2(Notes,phone-lgvx3200-notes.htm) TOCITEM_2(Howtos,phone-lgvx3200-howtos.htm) ENDTOC_2 TOCITEM_1(LG VX-4400,phone-lgvx4400.htm) TOC_2 TOCITEM_2(Cables,lg4400-cables.htm) TOCITEM_2(Notes,lg4400-notes.htm) TOCITEM_2(Howtos,vx4400-howtos.htm) ENDTOC_2 TOCITEM_1(LG VX-4500,phone-lgvx4500.htm) TOC_2 TOCITEM_2(Cables,phone-lgvx4500-cables.htm) TOCITEM_2(Notes,phones-lgvx4500-notes.htm) TOCITEM_2(Howtos,phones-lgvx4500-howtos.htm) ENDTOC_2 TOCITEM_1(LG VX-4650,phone-lgvx4650.htm) TOC_2 TOCITEM_2(Cables,lgvx4650-cables.htm) TOCITEM_2(Notes,lgvx4650-notes.htm) ENDTOC_2 TOCITEM_1(LG VX-5200,phone-lgvx5200.htm) TOC_2 TOCITEM_2(Cables,phone-lgvx5200-cables.htm) TOCITEM_2(Notes,phone-lgvx5200-notes.htm) ENDTOC_2 TOCITEM_1(LG VX-5300,phone-lgvx5300.htm) TOC_2 TOCITEM_2(Notes,phone-lgvx5300-notes.htm) ENDTOC_2 TOCITEM_1(LG VX-6000,phone-lgvx6000.htm) TOC_2 TOCITEM_2(Cables,lg6000-cables.htm) TOCITEM_2(Notes,lg6000-notes.htm) TOCITEM_2(Howtos,lg6000-howtos.htm) ENDTOC_2 TOCITEM_1(LG VX-6100,phone-lgvx6100.htm) TOC_2 TOCITEM_2(Cables,lgvx6100-cables.htm) TOCITEM_2(Notes,lgvx6100-notes.htm) TOCITEM_2(Howtos,lgvx6100-howtos.htm) ENDTOC_2 TOCITEM_1(LG VX-7000,phone-lgvx7000.htm) TOC_2 TOCITEM_2(Cables,phone-lgvx7000-cables.htm) TOCITEM_2(Notes,phones-lgvx7000-notes.htm) ENDTOC_2 TOCITEM_1(LG VX-8000,phone-lgvx8000.htm) TOC_2 TOCITEM_2(Cables,phone-lgvx8000-cables.htm) TOCITEM_2(Notes,phone-lgvx8000-notes.htm) ENDTOC_2 TOCITEM_1(LG VX-8100,phone-lgvx8100.htm) TOC_2 TOCITEM_2(Cables,phone-lgvx8100-cables.htm) TOCITEM_2(Notes,phone-lgvx8100-notes.htm) TOCITEM_2(Howtos,phone-lgvx8100-howtos.htm) ENDTOC_2 TOCITEM_1(LG VX-8300,phone-lgvx8300.htm) TOC_2 TOCITEM_2(Cables,phone-lgvx8300-cables.htm) TOCITEM_2(Notes,phone-lgvx8300-notes.htm) TOCITEM_2(Howtos,phone-lgvx8300-howtos.htm) ENDTOC_2 TOCITEM_1(LG VX-8500,phone-lgvx8500.htm) TOC_2 TOCITEM_2(Cables,phone-lgvx8500-cables.htm) TOCITEM_2(Notes,phone-lgvx8500-notes.htm) TOCITEM_2(Howtos,phone-lgvx8500-howtos.htm) ENDTOC_2 TOCITEM_1(LG VX-8560,phone-lgvx8560.htm) TOC_2 TOCITEM_2(Notes,phone-lgvx8560-notes.htm) ENDTOC_2 TOCITEM_1(LG VX-8600,phone-lgvx8600.htm) TOC_2 TOCITEM_2(Cables,phone-lgvx8600-cables.htm) TOCITEM_2(Notes,phone-lgvx8600-notes.htm) TOCITEM_2(Howtos,phone-lgvx8600-howtos.htm) ENDTOC_2 TOCITEM_1(LG VX-8610,phone-lgvx8610.htm) TOC_2 TOCITEM_2(Notes,phone-lgvx8610-notes.htm) TOCITEM_2(Howtos,phone-lgvx8610-howtos.htm) ENDTOC_2 TOCITEM_1(LG VX-8700,phone-lgvx8700.htm) TOCITEM_1(LG VX-8800,phone-lgvx8800.htm) TOC_2 TOCITEM_2(Cables,phone-lgvx8800-cables.htm) TOCITEM_2(Notes,phone-lgvx8800-notes.htm) ENDTOC_2 TOCITEM_1(LG VX-9100,phone-lgvx9100.htm) TOC_2 TOCITEM_2(Notes,phone-lgvx9100-notes.htm) TOCITEM_2(Howtos,phone-lgvx9100-howtos.htm) ENDTOC_2 TOCITEM_1(LG VX-9200,phone-lgvx9200.htm) TOC_2 TOCITEM_2(Notes,phone-lgvx9200-notes.htm) TOCITEM_2(Howtos,phone-lgvx9200-howtos.htm) ENDTOC_2 TOCITEM_1(LG VX-9600,phone-lgvx9600.htm) TOC_2 TOCITEM_2(Notes,phone-lgvx9600-notes.htm) ENDTOC_2 TOCITEM_1(LG VX-9700,phone-lgvx9700.htm) TOC_2 TOCITEM_2(Notes,phone-lgvx9700-notes.htm) ENDTOC_2 TOCITEM_1(LG VX-9800,phone-lgvx9800.htm) TOC_2 TOCITEM_2(Cables,phone-lgvx9800-cables.htm) TOCITEM_2(Notes,phone-lgvx9800-notes.htm) TOCITEM_2(Howtos,phone-lgvx9800-howtos.htm) ENDTOC_2 TOCITEM_1(LG VX-9900,phone-lgvx9900.htm) TOC_2 TOCITEM_2(Cables,phone-lgvx9900-cables.htm) TOCITEM_2(Notes,phone-lgvx9900-notes.htm) TOCITEM_2(Howtos,phone-lgvx9900-howtos.htm) ENDTOC_2 TOCITEM_1(LG VX-10000,phone-lgvx10000.htm) TOC_2 TOCITEM_2(Cables,phone-lgvx10000-cables.htm) TOCITEM_2(Notes,phone-lgvx10000-notes.htm) ENDTOC_2 TOCITEM_1(LG VX-11000,phone-lgvx11000.htm) TOC_2 TOCITEM_2(Cables,phone-lgvx11000-cables.htm) TOCITEM_2(Notes,phone-lgvx11000-notes.htm) ENDTOC_2 TOCITEM_1(Motorola E815,phone-motoe815.htm) TOC_2 TOCITEM_2(Notes,phone-motoe815-notes.htm) ENDTOC_2 TOCITEM_1(Motorola E815m,phone-motoe815m.htm) TOC_2 TOCITEM_2(Notes,phone-motoe815m-notes.htm) ENDTOC_2 TOCITEM_1(Motorola K1m,phone-motok1m.htm) TOC_2 TOCITEM_2(Notes,phone-motok1m-notes.htm) ENDTOC_2 TOCITEM_1(Motorola V325,phone-motov325.htm) TOC_2 TOCITEM_2(Notes,phone-motov325-notes.htm) TOCITEM_2(Howtos,phone-motov325-howtos.htm) ENDTOC_2 TOCITEM_1(Motorola V325M,phone-motov325m.htm) TOC_2 TOCITEM_2(Notes,phone-motov325m-notes.htm) ENDTOC_2 TOCITEM_1(Motorola V3c,phone-motov3c.htm) TOC_2 TOCITEM_2(Notes,phone-motov3c-notes.htm) ENDTOC_2 TOCITEM_1(Motorola V3cm,phone-motov3cm.htm) TOC_2 TOCITEM_2(Notes,phone-motov3cm-notes.htm) ENDTOC_2 TOCITEM_1(Motorola V3m,phone-motov3m.htm) TOC_2 TOCITEM_2(Notes,phone-motov3m-notes.htm) TOCITEM_2(Howtos,phone-motov3m-howtos.htm) ENDTOC_2 TOCITEM_1(Motorola V3mM,phone-motov3mm.htm) TOC_2 TOCITEM_2(Notes,phone-motov3mm-notes.htm) ENDTOC_2 TOCITEM_1(Motorola V710,phone-motov710.htm) TOC_2 TOCITEM_2(Cables,phone-motov710-cables.htm) TOCITEM_2(Notes,phone-motov710-notes.htm) TOCITEM_2(Howtos,phone-motov710-howtos.htm) ENDTOC_2 TOCITEM_1(Motorola V710m,phone-motov710m.htm) TOC_2 TOCITEM_2(Notes,phone-motov710m-notes.htm) ENDTOC_2 TOCITEM_1(Samsung SCH-A870,phone-samsungscha870.htm) TOC_2 TOCITEM_2(Notes,phone-samsungscha870-notes.htm) ENDTOC_2 TOCITEM_1(Samsung SCH-A930,phone-samsungscha930.htm) TOC_2 TOCITEM_2(Cables,phone-samsungscha930-cables.htm) TOCITEM_2(Notes,phone-samsungscha930-notes.htm) ENDTOC_2 TOCITEM_1(Samsung SCH-A950,phone-samsungscha950.htm) TOC_2 TOCITEM_2(Cables,phone-samsungscha950-cables.htm) TOCITEM_2(Notes,phone-samsungscha950-notes.htm) ENDTOC_2 TOCITEM_1(Samsung SCH-U470,phone-samsungschu470.htm) TOC_2 TOCITEM_2(Notes,phone-samsungschu470-notes.htm) ENDTOC_2 TOCITEM_1(Samsung SCH-U740,phone-samsungschu740.htm) TOC_2 TOCITEM_2(Cables,phone-samsungschu740-cables.htm) TOCITEM_2(Notes,phone-samsungschu740-notes.htm) ENDTOC_2 TOCITEM_1(Samsung SCH-U750,phone-samsungschu750.htm) TOC_2 TOCITEM_2(Cables,phone-samsungschu750-cables.htm) TOCITEM_2(Notes,phone-samsungschu750-notes.htm) ENDTOC_2 TOCITEM_1(Samsung SPH-M300,phone-samsungsphm300.htm) TOC_2 TOCITEM_2(Cables,phone-samsungsphm300-cables.htm) TOCITEM_2(Notes,phone-samsungsphm300-notes.htm) ENDTOC_2 TOCITEM_1(Samsung Phones,phones-samsung.htm) TOC_2 TOCITEM_2(Cables,phones-samsung-cables.htm) TOCITEM_2(Notes,phones-samsung-notes.htm) TOCITEM_2(Model Specific Notes,phones-samsung-model-specific-notes.htm) ENDTOC_2 TOCITEM_1(Sanyo SCP-6600 (Katana),phones-sanyo-scp6600.htm) TOC_2 TOCITEM_2(Cables,phones-sanyo-scp6600-cables.htm) TOCITEM_2(Notes,phones-sanyo-scp6600-notes.htm) ENDTOC_2 TOCITEM_1(Other Sanyo Phones,phones-sanyo.htm) TOC_2 TOCITEM_2(Cables,phones-sanyo-cables.htm) TOCITEM_2(Notes,phones-sanyo-notes.htm) TOCITEM_2(Model Specific Notes,phones-sanyo-model-notes.htm) ENDTOC_2 TOCITEM_1(Toshiba VM-4050,phone-toshiba_vm4050.htm) TOC_2 TOCITEM_2(Cables,phone-toshiba_vm4050-cables.htm) ENDTOC_2 TOCITEM_1(Other Phones,phones-other.htm) ENDTOC_1 TOCITEM_0(BitFling,bitfling.htm) TOC_1 TOCITEM_1(Configuring BitFling,bitfling-configure.htm) TOCITEM_1(Configuring BitPim to use BitFling,bitpim-bitfling-configure.htm) TOCITEM_1(Security Considerations,bitfling-security.htm) ENDTOC_1 TOCITEM_0(Frequently Asked Questions (FAQ),faq.htm) TOC_1 TOCITEM_1(My phone is not in the list,faq-phonenotlisted.htm) TOCITEM_1(Which features will BitPim support of my phone?,faq-phonefeaturessupport.htm) TOCITEM_1(When will you support my phone?,faq-phonesupport.htm) TOCITEM_1(I get a Brew File Locked exception,faq-brewfilelockedexception.htm) TOCITEM_1(What are the memory limits of my phone,faq-limits.htm) TOCITEM_1(Why do you do this stupid thing with my phone?,faq-stupidformat.htm) TOCITEM_1(I get an IntegrityCheckFailed exception on my LG phone,phones-lg-integritycheckfailed.htm) TOCITEM_1(How do I bypass the Image Preview/Conversion Dialog?,faq-bypassimagepreview.htm) TOCITEM_1(How do I bypass the Convert Audio File Dialog?,faq-bypassaudioconversion.htm) TOCITEM_1(I do not have the Send Phone Data memu item?,faq-donthavesendphonedata.htm) TOCITEM_1(What do those colors of the color-coded field names mean?,faq-colorcodedfields.htm) TOCITEM_1(What are the differences between the Replace All and Add option when saving ringtones/wallpapers to the phone?,faq-mediaoptions.htm) TOCITEM_1(Why does BitPim show media files on SD Card as having 0-byte size?,faq-sdcard.htm) TOCITEM_1(Why did BitPim fail to detect my phone?,faq-faildetection.htm) ENDTOC_1 TOCITEM_0(About BitPim,about.htm) TOC_1 TOCITEM_1(License and Warranty,licenseandwarranty.htm) TOCITEM_1(3rd party components and licenses,3rdparty.htm) TOCITEM_1(Upgrading,upgrading.htm) TOCITEM_1(BitPim versioning scheme,versionscheme.htm) TOCITEM_1(Version History,versionhistory.htm) TOCITEM_1(Contributing to BitPim,contributing.htm) TOCITEM_1(Future Plans,futureplans.htm) TOCITEM_1(Contacts,contacts.htm) TOCITEM_1(Support,support.htm) TOCITEM_1(No support on bitpim-user,bitpim-user-no-support.htm) TOCITEM_1(Credits,credits.htm) ENDTOC_1 ENDTOC_0 END_TOC #include "pageend.h"bitpim-1.0.7+dfsg1/help/lg4400-cables.htd0000644001616600161660000000625510547562471015764 0ustar amuamu#include "pagestart.h"

The phone has two internal interfaces available. One is a serial connection and the other is a USB connection. The cables you can get usually have USB on one end, and then connect to the serial or USB connection on the other end. USB to serial cables also typically have a plastic blob in the middle which contain the USB to serial conversion chip.

DO NOT PURCHASE A STRAIGHT USB CABLE. The internal USB interface on the phone has issues that results in data stalls and other instabilities. If you decide to use any form of straight USB cable with the VX4400 then do not ask for support with BitPim or on any other support forums. The cable will initially appear to work, but you will eventually have problems. Many people seem to think that because it initially appears to work, this issue does not apply to them. When they hit the problems, they post to the various forums. Many members of the forums get very annoyed seeing the same thing crop up over and over again. You have been warned!

FutureDial Straight USB DO NOT PURCHASE THIS CABLE

Available at RadioShack as catalog# 17-789 marked as for LG 5350 and VX4400. IMAGE(cable-vx4400-usb.jpg,)

This cable connects to the USB interface inside the phone. The cable is marked as for the LG VX4400 and the LG 5350.

FutureDial USB to serial

Available at RadioShack as catalog# 17-783 marked as for LG VX1/VX10. IMAGE(cable-vx4400-usb2serial.jpg,)

This cable has a blob half way along the cable that converts from USB to serial and then connects to the serial interface in the phone. The chip inside the cable is a Prolific 2303 and this is how your operating system will report it. It is marked as for the LG VX1/10 but works fine on the VX4400.

Sometimes the phone does not respond when using this cable, and has to be manually forced to talk. Do this by Menu    8-Settings    6-Data Settings    2-Select Port RS-232C(COM Port)

Windows

This cable works well and is reliable. You will need to obtain the drivers from FutureDial's website. Note that you should select LG VX10 in their installer.

Linux

Linux has drivers builtin. Note: There is a bug in the Linux 2.4 kernel that causes many machines to crash when any program stops using the cable. This has been fixed in the kernel versions 2.4.23 and 2.6.

Mac

You will need to get drivers from the Prolific web site at URL(http://www.prolific.com.tw/eng/downloads.asp?ID=31,http://www.prolific.com.tw/eng/downloads.asp?ID=31)

Speed

The default speed the diagnostics interface runs at is 38400. You can increase this to 115200. Do this by Menu    0-Service Menu    (Service code, usually 000000)    5-Data    4-Diag Baud. You need to reboot the phone for the change to take effect. #include "pageend.h" bitpim-1.0.7+dfsg1/help/dialog-calendarimport.htd0000644001616600161660000000541410604333653020050 0ustar amuamu#include "pagestart.h" SCREENSHOT(screen-import-calendar1.png,)

This dialog allows users to initiate the import of calendar data from external sources into BitPim, set filtering parameters, preview the data items being imported, and save the data into BitPim. Currently, BitPim supports importing calendar events from either Outlook or vCalendar data source. #define DESC(title,desc) \

title: desc

Buttons

DESC(Browse,Select the data source from which to import calendar data.) DESC(Import,Import calendar data from the specified external source into the\ preview dialog.) DESC(Replace All,Discard current BitPim calendar data and replace them with \ the preview data.) DESC(Add,Add the preview data to existing BitPim calendar data. This may cause \ duplicate events.) DESC(Merge,Bring up the Calendar Merge dialog.) DESC(Cancel,Discard the preview data and close this dialog.) DESC(Filter,Bring up the Filter Setting Dialog.) DESC(Help,Bring up this dialog.)

Import Filter Parameters

SCREENSHOT(screen-import-calendar2.png,)

This dialog allows users to set various filtering paramters to tailor/limit the amount of import data. Individual parameters can be enabled or disabled by checking and unchecking their corresponding checkboxes. Furthermore, those parameters must be enabled to adjust their values. DESC(Start Date,Inclusive starting date of the periodic during which active\ calendar events would be imported.) DESC(End Date,Inclusive ending dat of the periodic during which active\ calendar events would be imported.)

Preset Duration: Select one of 3 preset durations: This Week, This Month, This Year, or Next 7 Days. The Preset Duration starts from today and lasts through the end of the week, month, year, or the next 7 days. This parameter takes precedence over the Start Date and End Date parameter. DESC(Repeat Events,Import/translate repeat events into multiple single events.\ This feature is useful for phones that do not support repeat events natively.) DESC(Disable All Alarms,Turn off the alarms of all events being imported.) DESC(Use Alarm Settings From Calender, Import as-is settings from source data.) DESC(Set Alarm On All Events, Turn on the alarms of all events being imported.)

Alarm Vibrate: Enable phone vibrate with alarm for all events. DESC(Alarm Ringtone, Select an alarm ringtone for all events.) DESC(Alert Before, Set alarm to go off X minutes before the event start time.) DESC(Categories,Define the categories against which calendar events must match\ to be imported.) DESC(OK,Save the settings and close this dialog.) DESC(Cancel,Discard the settings and close this dialog.) #include "pageend.h" bitpim-1.0.7+dfsg1/help/screen-calendartab.png0000644001616600161660000010743310462561003017327 0ustar amuamu‰PNG  IHDR Ë FCMsRGB®ÎégAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<tEXtSoftwarePaint.NET v2.64‚")ŽuIDATxÚìxTUÚÇYÅòé®e]wuímÕUP׆h^¥÷:R¥#%Eš鄚é¤÷Fzï½OKo3 ø½wN2L¦e’LÂÌäžîsï™;wî;çæœß¼ç=çð*kÿPoDl‘ $ÞtNÃ3š4¦€7¾7­„7Kȶ=æ”òf‰yÓ„¼bngF³¦”A©¨‚LASEd R®Ÿ[ÖØc™øÜv„P¶Ã—íС,gD1op 'Úá…\þàRÞ×IÊ,$ßcHôТú^«ï<½éÏíàôÚ®?ßÚÿgŸ}ö9òç¿qêgÅéëß5ŠA& -Ï9‘ð¿ ™jµL9ŒLä[MâH¦¥ˆpH<-»MxÄë¦ÌFDEÌ=°¬¦×Ú»tª^ù…Ò»ï‰P‰I1‚ ‚ ¨“D(¤xȇ¹r±ÈE™Š‡Œjäb¨Cêµò‰7¥Ž×7éñúGñÆñÆgõXPFâ-ª`"Nê¹BÒså-¢%Þš;=WÿIbû´•g²–ùЪ»ävbgBA† ËîB ˆ=ÌŒ=x0õXrë7{.®ï¹ ¦‡¹„7»–7M¶^K‡M9æ•MšQÎm)gbiSgå&ó$óúå(°ÑˆXÞ´ü{¢ ¢¹bÆIDHL'i÷*Ý“\ j ‚ ‚:WóÊ9Í)£hêþ"qaÐSœ&ò›DÐÃDaÓ$ŠŸSÐcToxN-®&0ú4š÷Ü5Ž‹xq/Ïj’É ©IßÕÞ“yŽ»È'IœQ¼‘Z6²”qO %¹‹_æò8±­Ì‡$Ã#K33°AuK6·CúÃÙÆ-ç8¦Yô[£9õíj¿]:j³tðIÿ5’/VÖ¶‚h¦þÃeõ}–Ö÷þ®æ½¹%ÿé«ÈFŠi5zZù"Íl$\9®ü·Êo!0jˆ ærVO.Ï_<ªdþà’Ùý‹§Q<õ3ʯó±/šØ'|ïäÑïÙño lô/_ΕÔ7‰äF®‰|Ë@3KÄÜEÄCÖ2$Y7Cã@s3sŠNR`#Eª%wòoÉ¿Dqõm’Ú/—¥Æ[w3ùìs©kõ-AP4‚ô/j¸)tšÂƒ¾—9{æîkœNžË£!¤f« Œ$/¯ï½´þ¿ßÕ¿÷ä¿ßIÞÿ®ö½yü&¬Qw‘VÙHù"ÍlDñ×e?¯(Ûó=yŒä'ËÀhHÉl3£¢IËó‹Æý7ÜûÉ£Ô±QSŸ±e™É& né‰|r™3ôa ô²™œšH,@›½DŽ£{‹À5±Ñ£Ïí$¹ygrw j”ƒNiEã#ÿs¡ýðÌ›DNŠlDç¯XïVZ.¥ýS^Õªo ‚ È üFƒP`1Í‚_gýÒ0ygà éð¤ÖIú­’|²¢þƒ¥’w¿“¼½HòÖBÉ;‹%ï}WûÎÜ’Fú)ú/Ò*)_¤™ø Stוf±@´a–üü’9Jfö+žòÉ=0ýVјw ƾ—<êûÏ_à.òYBÿIhé7’³ÑXîFÉidmÞDE ɶæ<že!5—iÆÅb÷œ)›"O†GrÐQ䞇?÷b‡D9 tXþ#½¯)²í[\ª¤ýšÚƇF¤)½‚ ‚ Cc#{?w?×›6ýg j½E:d£´ÿZÉ«$¯¨ÿïRÉÛßI^_$yu¡äE’ÿ,®ýϼ’çG(³‘ü"t¨å"ôªòEFÜc#Ñ&sJ£íÚéÂä0DÑE÷ÀhÔëE#^-õFÁ˜ÿ¤ŒüÃçÏ7±Ñÿ24°M@ýbSEfÍ`Ôì1²nÉF2ñX° æ—±Q9·"I 6*õK¾É@‡å·EùŠ(?doa‡<ÒÛ^麹šh§°ìö> mY·Ý›zöF‚ ‚ºLÔ ¹ºžFÑ8²™¿p¡Ói4ÚB:d“¤ÿFÉk%¯–¼·RòÖ2ÉkK¤/'}u±äïjߘ+øçÖ¸«^„µ\„^U¾ùFs4óK†Æ F[?“"+Çó—ŽVò9•Œ}«äÛ׊G¾\<êÕÂoßHþ†ã§ÿ¼ÇFÌuDÓ?rlD”D¹ƒKdN#nÝ5ÎiÔ<6MÎF™)Rì±ÑËM~#9©º¿®:¦<ò¡½ü%ŽöåØÄòŸª£ý¤Ñ#ïžW<í\ ¨´´Jaûäa²<‘ñWÝ­¿Œ+jZ.‚ô+TAšÙèÓõc·K'ïâÀˆ¶ã¶s“7Ù,íÿƒ´ïÉÇk%ï­–¾¹Rúêré‹K¥/-‘¾²¤î•¹‚g‡µ`#Å‹p¡Ùš/B¯*_dl Z*žú©pùXÑêÉ"˜¶j²`Å8nÈECîÅM~?þMþ˜Wù£^äz©hô+iÃ^qüß³ÜEúåð¾Èlr‘ßèé½-ÙH¶m yÓˆ}.À¨9ƨÙc¤—miH–f=Íkh©[NS*¡' $Ÿö³rÊ™¥ø’¦ýŧêÅÕw("›þ&Rñ%ù]J¾ÿ—q%M}s:ÐÉAu™¨ýýpiýˆ­’ ;¥“~l˜¸³Fœ²”Ý*ýf‹ôËMÒ7Jÿ»^ú暆WV5¼°RúÂré Kê_˜#xjhG$ê.†­iº½ª|Ž8OJÑ„ùß~?A¸j’èû‰4lM°l”’³F8ñMá¸W£_Œz¡xä iƒ_púè)î"}‹x} 86z-óqlôRGLÄF›Øˆ›ÙHæ1’u«ÉŒšH4³QÉf€¤mÎÖsŽ´‡¹„7Ó=è‘ÑRS¼‘Y˜|Ÿ½¤ºÏR¦à¶åñìGÞ»ø—ÉeЧi¯üã ‚ 5šRAzµ¿ï.¬§i‡Fo“ÐŒß)KX³½aè6é€mÒ~Òÿm‘þwSÛ^YÛðüª†çV4<·¤þÙÙ¿ ”±‘š‹Ð¡–‹Ð«Ê™XÃ[ÍÅÛ|û.Í]$X:š¨H¸r¼`ÅØ{H´ Û¹+©MxE4æyá¨çJ†?—þͳ.}þÊ]¤¿ˆgVÈáÑû9ýýŒè˜c£R®_lv-u“™¿Üä%b¤&_±7S¶Ì{$ëM£üœßhŽ”‰I+´¯tØê>ÓÃ"œZ¦ôv]®Az#~‚ HU\dôܺ~kê‡n–Œ¶”ªr¿¥áÍ_ÞÐðÏ5 Ï®lxú»ú¿Í=:PæòÑp‘ÑÛ¥#,¥C¶I¿Ù&ýr›ô“m ò‹Ð«Ê!6šXC;#Þ(žÕ¿h¨`ÙhÁò1÷Àhñ7Â_ŠæÞ§&óOÑÈgK†<ñõßœÿûh‘È{tȃıQ)瘚]K2çf-âÜBÌc$Èn½Ï†÷0Y[ZšÑÞ n’zÌçtÏ‘c~3¡ðëSc‡Š/QÇ™|_1_IjüF-Ï×ò^‚ ‚:OÔþ¾8³ŽêÓÒ°Ã6KÔ³ÑÖ†765¾¸¡ñkŸ\ÞðøÂúǦ ê/sùh¸Èp‹†¡ÒAÛ¤ý-¥}·IÿGlÔ|zUù"ä|šXO;ùƒ^,šòIÉÜoø‹†É?]°xpQáü¾¢¹ÿ+õß{x4üIÁÀÇÓû>æüîCÜE†TqÄðˆVQ»ÇF#„\‡ÚìZú­ÌÍoĉV“å¦/ T Ƕ”¹Ž(ÌÈŒG`ÄVy`ÉÝKn‘x î(~#@‰¹RÎ48J›hß&ò6;TÊW’¿QË󵼂 bâ™ß† ½‹ëášZ÷þâú/VÕ³A=½³¥ñõMÿÞÐø÷5O,k|d^ýƒ“„|-sùè|Ť|‘7yS9fÊ3{®pìû4\ŸðHäÆÑ‚‚ýóû ç~&2ÿP<ãÒ©¯S~ƒç9ñÐ'øf¤ò Ó[4±‰Øè³RnÈæ>µ"Þˆ2.*JÆF4¿±FÄ@´xH ÌKDýhDBÔ¡&[jÍÒ²i=5r2õ\ñgewII$yïé‘Þ¶Jfùò—Ø~¯éBù¡b¾’Ôž£i‚ Rýp… ½‹¨â™IuoÌåù|U}¿µ’~k¥}×I>_/ùtƒäÃÒ÷66¼±¡á¥õ ÿ\ÝðäŠÆÇ7ÌüP8ý=Ñä7Ä^¢5r‰>VÒïÁ´p|³w‘‘uM®#b#ZEc£ÅËÙˆÀˆÂ†z¸åfeôÃQ ·tÛ!’¹‹,Y 6C™=WÿÉiÅ=¡&‚ ‚ ÓçÅSñÂôª·çU°¸ú£¥5/«é³¬¶ÏòÚ÷WÖ¾ó}íß×½´²îŸËëŸ^ROa½Ìë˜VÍUÄû‹ޫ—‹ÈOŸ>‘=à…Ü‘oçû âG“?.˜Ø§`RŸÂIïM|§dü%c^âü'èÓü—|Õ«à³?à]}×ÄF ˆšúÔZ²ãž‹o‘Zv»×Ê;œVË´ö®’ZÅ©‰Z♀P÷Ai¿òÎÛ³òŸþ6ÿù‰ù¯L+zcFá›3 ^ŸQøÚ¬¢Wf½8«èùÙüggñŸž)xb:ÿ‘)‚¿Lô]Ä”üÒhO9uð"œóÉü6¿âNì°·c>{:æ«çã¾?äø!oÆ~=aÈk‰ƒ_Iôbê çS¿y6ÍìéÔ~O¤}þHêÿþ’Ø»Gð;¼k_¾$› ¾qcø؈†z26báÕ-¹©LH«ï0$ÒFx\ ‚ ÈäµèŒ4!«æíI!íþä@¿§ù<3Èë©^Oò}z°ßßù?>(ðÑAA ¡¸éž_öø:„××ÿ¥Ñ^ñôÞŽ_dáI c£…Ç%•i nß¾üîãv½Ÿ¼Öç©+>s¥÷Sv>mÿáÓ}þæÜûq—÷uýïÃÎï<äüvO×·z8¼Î³ûò¥Ò”ø…‡k4±QœØ–¦säÄ9ꛉiÙm¦žKÿP³“ùœ È„x‚ MzpáD'¶1‘‡ÞEïíèEŽ×=8§ì6ãæƒ³­kóEÊo=ømm‹x#e6¢EI&sKªqâ&ä™sÑÙ=Ô4‰ã$¹n±±iŠ"#›ÇD@iCQ Óþ—!“ÐŒ›,øšÆ¦qÓ#ÑþÉRÞ”N´3±žó±-Û‘kl5od·e¯ÊŒ”¤ÌFðúÅðÄ÷˜ðÀ N¼áL=Få0ñÆpE«Ò2/¼·Ï$[õ ‚ 2 .€ SÊ Ï󀞙LýšõUVÓ¡Y³Xmiõ4-˜Æ–QckÍ©g£ñÉðHNHjÅNà$?_ádbÿdìêA¦¢NüOak†4Sûg|¯³ž]RùðÄÜrqAAPwoh ¯oï•+¼§÷ ‚  ‚ ‚ÀFAAÂF<¯³n®Ó® ÄÇò… ‚Œšx-“¼mëH §zMÕ¶³}Ÿ¢å²ÑíFéëËï2‡AuuŸZûªí¢¦Æ»#~#]À®#. ÙH»óFÇï¡ãÝaªHÔ*3u¤X•ží% <‚ ‚LÇo¤=rHw¿Qg³‘–»Ý> ½°‘¦«éxÍŽ³Q«àÛA¿‘.ñj`#‚ ȤØH/ñFÊFA½øH ™Z-ÜŽ³Q«®;°Adšldh~#½¸sº Ât9³ƒCÌt¼½vSK›¾°A„Xlm1LZº½ÚÚ[§ö~4}\»ûÔtì¼ÓôA­Þm›¢”:ŽªÞzd#ÄbCA¦ÆFPW—M÷` AdÐlôˆÎãÔôÒ¤uÆ55]¹“ÚàÎû Nš•Ñо°AdplÔ/‡÷oëÖÙ‚ ‚ lAA6AA6AA6RÏF"!!!!!!!u¿¤‘ìlCAu7Áo„„„„„„„„¤ƒßÝA!ÞlAAØlAA62%ébft*¤ÆÇ:¸oÄð1Ï?ÿ6‰vè2é%½i«L”èºä»%O<ñoUýýï¯Ò9"<Ý6òÒK$7Æ(nò¾³E™ɇfý ©må¢è4:YßM2·MN  mQAbw{¢Jeß@a~bIa²°$Mïß°.JO kYÖ/òéÛfýßùß'o½úÚ«Š/+W”f¢B‡ ¨SØèá>™`#°Ñ}ÿÐŒ´Å–ïé§ÿ£JEÏ<ó®â!½E/LIa ‚ÊÊÊêêêòòòììì¦W‹’:‰¨i7„Ö]ÄOÏL ô ñ‰‰¹AÛð0_Ÿëþî™éÑüâTŽª*ÌOê 0"$Z½î37¯á™yýíÞ_-±Ó6oÚ<‚ l62I6Ê$kíþö·WÞöW_m—õž¼~èÐq‘H,Šöî=ôÔS¯Pæ Aûé:Mî0±ÑA©¥¥¥F¡±éW½ãλF¹&dçŠÅbÊŒ‹‹NŠÑ;º¹§¥„•ŠÒuìlÒ; deÄDE%'Eçd§äæ¤Ò6;+™”•™DJO‹Oˆˆ Œ‰ T 2g£"Ãýôx3¬LG~?&aŒ)*#wü/û¾zæ™Gº‚ÅiéiÑŠRû‹™2•N£7‚Ú÷¡KÄÅ·Þ·`A‰¡ÏÉ“çOÛ·ï°ÌŸô6;‡Nf·ïñSƒƒ|ÈQ”š™ÿ›mè²_½6Ÿ 8p5âCôÏ—C—ôÜtÌ×3$I$.ËÈÈ ·J¹H®AêÕk‹‹‹ù|~bR‚ËuÇVñ‘¶gm\d\¥·Ûˆ‹ Ž‹ ËËM#‘ä`”™‘˜‘ž ¨ˆð€Èpÿ’¢öÞÔ”ˆ`Ÿ¨H=ÁbÆ|F¥9fÜû„>ZÀH®‹6ƒžýÇKôÔéu5i‘RÕŸêV&N×ãêrÍ6ݤ.ÊÏMôóuS”·D¦ÒiôÆN¥Ÿ.ÀíÔ9šÉÀˆ`hР zýõ¯/Ö×KZð„HLg>õÔ›òÓè-Œ¢dx”ÙV6 ¿á_RR‘¹öˆÏA»ߨì”|az¡8µP˜[sÞ;nýï¾GínW‰ðˆâÊõÆ%™E ž®ùùùyyy~žüâdM'‡G„8y†øE¤_s”£RG=FéÑr0ÒÂFä:"¥¥ÆÑ6)1êF¨ovflNVÁ"ê‹NŸ:Jåøê«¯Æ§ŒÕŒ˜üö5ããRa:jv‚:ZeUò˜¾ç»À=úÌÐ~Ívܤñ²‘*jtiú –¯ße]iÄ7S¦¸É‰GQÏš‘è dkº²ÑÐW^Y>mõ—%§çÎÞî¸êg›¨´Ì<~N¡_^S ªÊá—§•&äðÝ"Ò~¼rÒ1L\Z¦÷ò¥n5O碢"ŠmÊÌÌ ðP3dO˜î蚟,Ó;ÏŽ4…ZSDQ~^:QQJ2u«‡†øÑç„øFFQ?Ác#ÚOM‰%¢P$Â):ÍßÏ=:*„NÓ1ÄÙ±ëK%ú ½tù'¾Kþ$«ãýUñèË~ÿë‚ .e£Ö›™·Þ’®;;Â)öÐï×× ø úºWí×lÇM‚Úä¦R½ˆ?T|­è1RìS;sæ¢jŸš1¡Ùr\×»·Í¹sB‘x×Ù€ï¶_rñ‰NÍ*Ê-‹³òøEâª\ayFqiJðFjþõ°¤-'üÂ’D"‘¯›£[È3雕““C$gÕÇ캧oXRHB#ÿ¨t/_¿2QGÝ$fD¬CΡûË—/±»vB¯Š ’J Sr³ã££<Ø9O„DÄLáaa7ü ¤(X›:ÔôËFO>ùïȸo¹Ç?x$y’£ïgÍþP‰6£|êCÍAP×±Q\\œ²'¦5”°cíÙî©Ç.‡ïúÍq™P ŸÑ+Ú¯ÙŽ›µéã:“2•bŒõõ×\,ö³Ï¾aeuJ,.¥Þ4#‹=xðoªçËc´»-åLBBõ‘¹Ư=$ÌÕ•Õó+%¢*irz~lbv°,»D”^(º‘’ë‘rÞ+v×٠ͦ÷ò‹’Û;+œ"¯•úˆ“C²²2©kœX^ÞîªÐsÅÅ7(&Ã'<Å;,Ù+$þš“w©HýGÁAžD<Ž6W¯œ·»vÑÅùН0GCúiÚPâ!‚¡ˆð@Ú¹êG¾%£à o}±QVz$•ÝgŸ¿­Ä=ƒ‡¾Gù3g˜Ó9‘aÞ¬ˆOœ xΨÑ,_aXZa# 5U2ÚPf£3Ãlc<¶Î!áÀ/öó’3}:þ [û5Ûq“†ÏFºO«ØaÑt¦Ú·³¤Ç¥ ŠXoš*è(â‘’Ô‚‘¢«I6ïQëläêêJ!>‡l‚§®=éê•ULxT!‰K‹L.–攈2Š¡I™>Q).7’–òÊ/("ïN\L`ûl{û+)©ÉQ÷¼>%ãëãB²2š5ÀÝãº2Ómœ¼‰œ}#]ý£®]×Û 0/o/b#竮ׯ¥$…k:S,HOOòóu¥5ò)²QbB¤^؈yg¶ô ‘Ó¨™w›N ñ Ã)Óú(!Ô?dÙ`#‚ºZÒ†ìXszÈ¥hËC ­‚—\ŒØ¾ÏiABºGEÇîUû5Ûq“¦ÁFú£åß®¯e<Òh|%ÄÑ>ëãO¼¨‰èRlZH]ØÈæòeŠòY±Ïu±…µg`œOH|Ph|HxbQ™$0(šN(Šr‹ù©y…É©Áñ)ÞÑ)»Îû„%“w'0°á>nnŽäJKKõöib o×ìœl¾,Ñ•¯)…£H#_Ÿ`î~ܯ8ûÄÄ…éå#‡£Ãew7û°¾Ñ‘!Á^Å­8Ãè7W;‚!r10Ò;­^û©"ñ;ù eZZlU Å4Êùfà»JlôÚ믂 ºl¤Àö=»àÈg¤EVŸ/²ú‚´Ûqžuä¦ý~³÷úÎ$YGüð‹óçCå:^kë5[½I°QûÆð˽GŠ#=²­ûÁXgîܨ¶€‘6<¢K±´,*ÂŒºº:'''òÍÞî°d›µ³w”«O$;¡P\çîèrÝ·€ÏÏ-.¢ñZ±i©I©q©íÂì¼c nÚ9˜?&:033£°° —ƃ¥¥ÄÅDz0£Y¢ÑjIIIÜP¸æó=}}ÝýBiÇÙÍ«\6Ëb™žªrÙÚœŠ  )s²âÉi$(ie Ž´”È!¾,d[ÎFú§&÷Y_(×ÂÅS&u¥)…%ÁoAá²ÑŒ_ß±‹ß{4xÙ©kN…­=¾îLøúßçÿâ3ågïÉ?yMØå9á÷à=—8*é4÷O[¯ 6ê¼ù:5ȉu¨=÷ÜGjF­ŽfÒä:¢ jïVc†D"qtt,,,\¼ÛyÎÆíü¯8úÛ9úØ;zç‹j¯Ú8_¾äPPR•Ÿ™ž›ž”™Fxš˜öëÕ×Àz/·QøÅÜÌ@Ô}FqK¢–)+++11‘ð(55%*Ê_$Hóökê>ó ì„ê™î®vôÄÒ¤\B~º $­T¨ùäÒL´OSfÓÀ4#E6¢#õ‹-/\EÉ¢»š¢ rãXæ›AŠ`: ñF݇qjj™cüžŸ‹Übá:l§Ç˜=ÇíòÏÉ{Ü^cwzŽÙî1ÚÒm¤…ëÐÝÞSŽø-ßg¿P Hl5J£­×lõ&õÂFj› Êì¼Xl¹·FmÐÞCZ¥½³º¯©Cmÿþ#íc#Ö­¦e0¿ü¹xîÍ»hyÜgƺû¬®ž»ì~á¢ó…KN¹¢ZëÚ¾§ (#¯0=;?=5;-!#5<9uëi¿Ø¤ ò6ªi¯»¢£#jjjjkkÙ¶ªªŠvh ?9(<œ&RJJNr¼îJg†F¹zùŠizŸ÷™.èï{],dKȱuK4~DA^"ÃOhrÑ=²‘šl#Zz–ýâ%ÿSrmßù%åú-jv‚îÿþq{ž?þÃ&—–î#¶{ŽÜá5j‡÷¨Þ£vxÜî9|›ÇЭnƒéÕÎf:VþË÷;.,(ŠÖ~gm½æˆu¯}öÒ?:{ ¿Ž2qj]oÄæ{Tº?j”µÜg°cÇž¶²̯ešlŧšœ4W½b¦®;;oåÞåkönØ| *³4.·|Æ·³Æ WÂO/,NÏ-H—¹ŽÒý¢·ö§%òî¤&w4è'ì†7õž¥¤rÓR¹S'9“È#EÛŒÌlûë>݈&Q'Õ?¤(Z_–Fï3QçÍ~Ä€Œà‰èG‹r³ã:»Â:wæ+÷µë?S£¸ä±o¾ùZ«1øA]ÄFc~ùç©°uëûmq°Ís¥÷`KŸ!Û9 Þêõͺ럮tü`ñ•·Ú¼±Ðæ­¥WÞÿÕoÞºsCÓ³ô{Í%ÇúùÄÛ‚:c ¿’ãJʱ•æ{”ãÑgŸ­£WÿóŸOÚÊFtAíáØŠcøãããi©U‡|.ä9„yÄ”ø' Â3ĆL;h,ŸŸQTœž×ÌF=£.¸F …B Tó;Ä+sˆ2„üTAq²X˜FmäÅS>ù]¹®´à°˜«Nž±1A×ODÃÓhX>‰zÊHl‰Y Ôwv´%6Ò1¦»³ÙˆM}DKÌ*QjÖøoǾ/[wïÕNZ ‚ îËF½úd´o¤<`þ­·¾Ýýã¡«VÛ¶Éý«-^f>ý-|ûoñé·Âõ?óŸŸqåÉÉ`ýð¸Ó½Æœè5îä£3ÏýÓâú°ŸìgÅ^Ôtgí»æ¶+“^ýª—Ú›æüFZ؈4o^,½úï¿ÛylD]Wîîî¾á©Ëó¿èŸãSâ› MM>müð©Fù…é9²>5ψø§ó K§B‚<ô[ÄlÐ¥§Ÿßñ‹Îv×}i?$"–)7¯0>.º‰¥:¡ðñvaëÈÊEÝd”CÝg%…ÚǬÝ뀣)‘ô»Ö¬’r²¢›ºY*ƒQBÊXZ’V†M/— ÒP­C¤6z±#lôÒK#~zòPà¢E—ßZéòÞJ×ÿ,½þê<§gf:þßL‡ÇfØ?6íÚcS¯<:ùÒ#Î=<öt¯oO<4þäc+®öÙe?ýˆÓ ]-íºæv»É}ç=Cóç²›433“ß$ØÈ0ÙHSŸÓüùñíc#ÝûÔh»`ôèØØX ÷±ººì ßŒ–Óg¯LNúvÎÄ1sòd`”™›v=$ö‡c>©™4ÿЩS§ü]ô +!‘+÷ºl=8ví¥Í®…FÄ]söNËȦ!ýåtBQ~Bgà‘·—³QD­"’—¯Õ“Y&¢W³Ø-Q\Hg'ùlè#Þ{÷n0ãü”ÀÈËoĽßAtߨH“îèµËkÒø“ÿ7ãêã.³ÿo¶Ëãæ×9Ív~|¦ÃÿͰ{lªí£“.>2þl¯±'{mpúzÝ¥!~Ñç´,wÐŽk~oÝÿ´÷öNíS‹Ž ŠŽRQdP°‘b\vW®§¦øqŠãù;;»ƒl¤{,6mLGGGWUUûF¤Íßé0§Úß0ךÕ4†¿ƒl¤ãþ{á2²ž5Š=ª®®ÎÊçÛûÆï½²ügû–6{Μv÷H«ª®¡é”nø½••Õo¿ýväÈaYrGÇÕçä&/üÑ~Ù¡à9{gýì;n«ë¬=¦m8íîíK7F±G4!$M§T\R,ë½JéT6"0"¿QDx@b|¨–ñüä4*ÌO ²ÄÂÌ‚¼$š 2:* ¬sï°P/*ͱã>P£CVýÙ30ÞBTåFŸš;^ziÀއˆcÆz„¼;Äx>±Ðço }9-ðþ+1 ¡ yzæØÿýG¯qߟ1KI÷kþ‘§ñWf[¯ù«½´ß$بk†¨=Y¿hšû±#l¤ûÜŠè<ôí·WšsËuQ¢ð#êb«àº²ÊÉaC¾"šyˆ^rt°=wî-3bccC~£ƒ?ÎE¦¶×C½Eá1‘ ~´[u4|ö/-œû/ømÐrë)N'¯z±sˆh$]¡,Q xP·|@»¾Ø(-5N±Oe{z8f¤EQ8v™ìV{ô²2bór’KŠ3²2ãœl\¯Û%%„vÞÎÍ‹½£¯"}øוäŽz‚ CìS¹ë©þs—Û½¿Ñ¿Ï涆}lù¿Õ7^ü.èÉÅO.ðáPf­Ï{?ûL8pmqvNQ«?µÛzÍVolÔî¹;ûC5­Òn6jÓš!Š;ÃÞy‡ú°¶|ÿý)ñDEEQÌu¹lÍ57WÇŒÔêA³·»xæÌ™k×®]ºt‰¢ŽŽ9‚ÚþfFÄFͲ´[~8xþ¾ ¹»½¿™à‹™¿ŒÝpuÈ2kÅàkº+6_6M}DëÑzèe•YE6"¢gÅņÑz 4£#ÍîààçF>¡œ¬XšD›Æ£ñ‹R’Ããbo¤$Eø»ÓÚ´în×]®¶ºØHÙˆzÐÙˆõ¦aTA÷™z?÷œ²K†­Y¶å鹇>šs¸Ïü£Î?öá‚cns½3þóe7žZüä"ÿ'7÷Þé5ö€ÝwyyÑôSžÖBj•t¿¦Ž7 62X6Ò²ÖlûبMkÍj·È AsF**H(¦Ë1…¦ùñö²·²:rõêÕË—/_¼x‘:ט÷(!V×™u¨7™œ1¬ÝÆm¼¶öxäºcá+ú\øë—æûƬ·gi›žoœ?óÓdgeÊRnn.A’€»˜ŸªG6¢~4Z„fq$6"*âÈ߃‰Í|MëÑÙ]»ÈdowÉÁžbsðôp¢­‡›}§b ¨Yÿw&Oí-W«3§CumŸš¼—ªew¿(±¸0¡(?~Ñ©w%}±2ꙕáÏþ=p§û˜+^{‹ âEüTŽd~£2n4õ•)@§‰ø)‚’dí×lÇM‚ ïC3Y;÷Ö[ã:ÎFt‘æV3S6j+LË‚äÒ==ìúÍÎÎŽ¼G.\8|øðï¿ÿN¯¦$ëÒæw#lÅ»I.ëŽGüb›`q&bðâCŸMÿéÛu6ÃWZgf%V´ØìÐÇû:qÉËÓ™ÀÈÃÝ‘\GY1ÇFl‘5UEGøblAÚ§¦ØŠŠ“ø…I‹Oüsêëâžÿ5e„…ýH;¿ýüâDbf§Qs¥¯1Ì“[g›á‘ök¶ï&ÁF†ö¡òÆOi0[Ùˆ Ý'Ñ[ÚÓl‘}b\àÁƒû)ðˆ\Gä@:zô(íŸ>}*:ÒWûG߈ŽºòÒÌ=Ø%[{en<2軣ŸÏØ=rõ%ómWÒ2ÔâÛINN¦éØ> ¬Kˆêà¨~ $¢ ¢Èˆ ÔäpZ¬&4Š÷ ðs§…Ò‚½èyöõq%É‘ˆQ#ò99Ú&㔲êN˜b€ ¤}æ™-,û*jüÄ¡‡ È ÙHF3Ð,9õÉ´!ã&ì´Ÿ›è&4S‘0]Þ›FmŒ–jN£šº™Ô\³­]$`#Cf#ù`~êSœröìPíl4mš·â|¬7MËÐ}ý>0±QÜl‡{DxDkÖÆÅÅQ<БÇ´·ôG/{КÉÇ]ÓÏûd­?6dåÙϦý8dùÙÑk/†…ké†KM¾Á¢ ält#Ô«#ÌÁžç+¶ç¢"š–BñÓøEÉ©Ia¾>.ä"<"‘»ˆÀHÑ]ÄD'ÐÄÙ‘Ü—PÊýkgh`Ñ6ú×ó/+ÍlD“@‚ 26"ô¡î0š%'?±N]¶óÊä¤4o:ä:ÑîU²%-[‰Q•õ¸q$M×™Ñ×Èæ$¾aÞ#FšØ¨OŸ~ŠxDoa`$›ï1³kب‚[~•óâÐà5ÚR¸4E)Q€¶–fžž|[7ßUV!ß ›¼ÝsÔ†kŸMÛõÕ‚c£7\ÛwÖE‘„ظ°ÿ)¢ô”¤-à,Æ¿¼½óeËÙH6/ L#0–¤ò‹SJ “Š ’ÒRƒܼ=ȱD$DTDŽ"Ö‰F£Ò<=‚ƒ<òrâè]â¦ÿîÌæÿîL°A`#åVdÂÏ/í·_(ä'—«Ä\ë¸,”êi÷®ÙiMØè¾(Ã#{ÄvFŒ˜´råFÕ3ÓÒ2æÍ[®|²æ‰°;é!<Êˉaû4-@{þÜ Mg2‡hnN¨5—í÷³ÅÅlÕsÚ`?ÇâRrr$¹H)€†~hö¡¦DGù98]½rÍÆÇÛYT’ª½{ºU¥‹s£Ï¸_ jð¨0?!+#:9ñFlt`x˜Oh°ç¯˜¨r,Ѱ5Aq FŽJ[üøß‚ îÁF­ŠFëÈ~ìroñ ?%ä'±å–*~·£ZTwMM.7ÙMØHuØ.`#}|h&ë\“«ÕáKrɺÒ2»˜ÇÓˆz_o‡+6gý}œTš-)‡ø#5 4hÆæËS·_²òü°uvÃÖ\½ìp½0/®¤(QHëÎÊ: m4G-©,öNP”Dcš¢÷ZÖ £ëHáÇ}QŽœ%)Iª¢|zUNEÌcÄݪlAP·a#]ÈÃŒ1Š›ìJ6Ò’oàªi\’µ|Ý©0Í|Ë iMbc0iÇ7(`ðÒS#¾??h™õv««ä|*)LsУ:ÉE3»¤Ý›$LvZ…–¡åH2Ëh"$$±$¹ØÉÍŽ"îLFEÑ•6‚ ÈÐÙ2"6Ò´Z§²Q'|h&›÷¨UÉæ1Ê4 ˜–y@™Ÿ&:΄üTÙz®MŽ"‘Æ!œMT…î9íC:Iò/“¡RsNf“s¨)“ IË,wÒm(³‘& A:aJ›^5ð%n ú¡þ2Š%¢©®I´C‡”©eIC–<Ⱥ¢e4ë>îlÔhKw[;_í2<A6‚´éO…ÔÖWëC!‚ lAA6‚ ‚ AA ‚ ‚ÀFAA`#‚ ‚ #c#Ý—Ê‚ 6Iqw®ØÉ‰c(Y’¿ l¤ÖoDè-.Ý45Jêk«+KÉ®êÊò™œPw¯9á«€L¦Š®ª(ÐqT$ˆ²³Ë~ÿ½ìàÁÒØX±X\ÚœÄ"Q™³sù–-e§O eg‚Ze£ÆÆ†ÆF©i¨¡ARWSYQ*Pd#S2ê†âµLøB ©¢õÈF„;B ÔݽÌÉ©”Hˆ¥ììòÈȲü|vTJ‡VV¥AA"‘l„Ô*I¥õ2Õu¨fïÔëK$µ5Õee¢"E6êJ!Hïÿ2ª _ d¤jQEë‘wJÓÓ˽¼ÊJJÊ)Tž:U¹jUåìÙUsçVž8Q!pù‰‰å×®‰óòÀFH:°{jkÛ!•*»õóÛ÷A:J"©©©.-¶d£öA÷Q<Í _dŒjQE둨­,)©<3³‚’X\yíZÕÙ³UIIU••U7nTmÞ\uñbe…,……•''kb#Åÿ1yŽ|«ý$“c#z^¹G¶Ý¢Cïg¶OõõÕÕUâRaAK6ê¨Ôõâµ–ðAF§U´Ùˆ‚ŠÊsr*„ÂJ‚¡œœjOÏšêêJååܶ¸¸Úʪ*;›^­ÈÊ*OKÓÂFíÞG216’?²í=J‡,©æÈ3U5]­Mª««ªª‰-بãBP‹§[—ZTÑzd#ê.«(-%ô©&$ÊϯÉȨ­­­9~¼êÝwk##ëêêjÜÜjˆ™ˆÌD¢Ê¢"ÝÙH¾•;Št<Ødìl$dÛ-z´ìkzU÷stWm-ý,ŠøùŠlÔq!¨+ÅkKÂבZTÑzd#ê+k£ššÚªªº¢¢úúzêG+}÷Ýú¤$Ú¯‹ˆ¨ãóéÕꊊªªªö©ib#¥€G`£¶²‘jå®z2Ø °QëlÄu¥UUq`T[K$$©¨J$ŽŽŽK—.ÍÎΖVVÖgeÕ×q‰Ã£êêvøtç'°‘©°Q©®®²Ý’ÕÎ÷uÉQûR;T[[QY!ñóZ²QG „ ®¯½ _djQEë—ˆxŒˆ~$‰TJ³4XnÙòaŸ>›Ö­k¨¬¤CÊ'lâúÚjj:ÈFjß6216’?²í=ZöuÉQÝoŸ(ò®¢œ/,ÉUd£ŽA] ^Ǿ@ÈðÕ¢ŠÖ#1§Ñ#JÇÞ¾}ûÍ›7iž;Ñ9„G`#¤VÙˆœœ¤ššŠv‹¥C–Ts䙪9ª×i‡ª«ËËËø‚âlÔq!¨³ÅÓGÂ׸ZTѺ°Q¯6²Ñ1‘PPPƒƒÃ^ýõððpÂ#Ê'lb®£¶Æ)†Wƒº 5áüý•¬fïèEª«ËÊËJÅ9-ÙÈ „ -¿¾¾LÈÕ¢ŠÖÄFýry/¶‘;Ôˆˆ„V­Z5lذիWgddìܹ“Ž"`j•ÀFr6’?²÷WT­wü"UUâ²Òb~Q¶"ˆ¤éÉ×oÂW ¬ZTÑÄF@äFúñÇ}||Î;·gÏž©S§ÒÄÙ“6BÒdl©iˆfÎ(–eÊØ¨±‘)™˜x“ðÅBFPEë…ŽX nÂí{}j´%Z¢ !KJJ„B!ð'RìS£·Ð`#-lT^&(+ã“Ê9 ŒWd‚˜û¯Ë*ÈMáÜE4ÁW®IAd2U4ý|Õ%%'¹\w"ÖѽE¤“é-‰‰‰€°‘Z6*΋yv”E@xTQ~ZA^Ja^*í¯èþós’²ÓcÝýüÈ®ºø÷‘[MÆ@‚ Ó¨¢©f®­æë9rˆúÈtԡÿ%&&€ 4±¿0~áÏÖÃW¾ààš–pÃØ•ššâìá>tÅÁ%{ÏKêËøñ ~:k2B™N]W¦6béÎ;‚M=kÔ‰–••OÃÓh hhhLLLff&åÓ«”}÷î]`’6 Rhëñ«oLÞINÓyŒ–í»X__Ú ­ñSÊD[]}}’éAd¼"Ѳ}êëÄRI¥>ÙˆAÑ ?âV–•­%Bû”Cùô*€©U6ª(ͪªÈ¯«J% ÒªFiucC'êÖ-içIáƒjo6Ö66ÔTUä•‹3«ÊÉ@´¾œ ”©‚ŒT·nJ ÈH%Œ©r¦ZšvªÊóôÌFª‰Þ@j³ßH˜Z’W˜UÙÊI î<É?…Ì¡s²‹¬Súǃ ‚ Vúg£&ï1D7d#AaÂ&+[ëS[´ÛZT’DB]AÔ}Ù¨ƒ~#Þ`£n:†ŸÀhâÖóñ¹&clj¾ˆ,Úlu~#¨ÛЦ8 C`£ûø ¢{²yŒârîšTº—MvQ4•Þ«oy2¶SÑ S2ʔʨÕ}#E Õ’2êòÒþà¾i­þ×t™ ç7êùø_xòx½dzL¶íÉ{¨VI3q6¢Ðꄺsç6I–þ0ýñÇ-i}-ÙEaæø]Û­ØÈÄJʄ٨}Fá‘»_7oÄlÔQ¿ÑC¼ˆto[¯ßƒŽ{Åœµóµró¾rÛ×xdâ~#bˆ[\ºi*j”Ô×VW–²õÔ:µQ­ÙÈi¡øc]釻’ Fç‰i)Œ«ŒÚdˆq–ö;7"rÒT9…KLííiªî=|_ýF<Ë;ãð‹Å¯s§-ûì‡}Öþ8qís=¼l—눾Aàˆ±Qcc-Ol¢utêj*+Jzg#µõ…ڪЈjs-„dŒF邯eŽv„EIr¡Ú’2ðû×þv¡ß(‡÷oký°QÇýF×~ßøÓÄ ¿|;wí'‹×÷ß±{…»ç5Þ<]HHžÀFÆÈF´øžLu& ‰¤¶¦º¬LTÔlÔjÝmŒ¿t•vºC‹kbî=µ!;`#Cð]›&o±‘±‘SpòÆcnª¢ü6³Ñƒ<·ÃëwL0_þéšC6ì;gÑ×Ë<¦)탌XÔvPòÿ¥6åÈ3;~$n2ÔêÒ2Q!ØlÔª9ÆbK«~##mÁF†ü¼±ßˆ0¨MùZÒ_zñüƒ¯G\ö °ò½qÔ#Ð*è†]L\ Ž~#U6Rò$)fjò6©žƒÔUlDHÁQEGD¥¦´¯KŽRfÇU__]]%.€:!žãŠÈFIÀF-ˆFåܹÓ$Ù [ Òºv°QÏËÛ.2âúu÷ã!á—½|O;» qi7é%©kØHNúŸ|«{Ž^TWWUU) :#»ÕÐWÓ¨Í7$VíMª ò5ÐrÓ‹ÅnµglÔeø5ý× Qä©Lõ$ ¡H ~aV;Øè¡½ü¼<ÿÂã^ïùÏÇûò“OñNœÞ÷̳w0Þ¨Ml¤Ö™„ÔÙl$§ ½ˆÊNiG¾¯6Gžôòéµµ´¸ PÄÏïT¿Ad¸lĺ$S~vå³akš¶júÔx¸ûyz…ùû¸ÚÛù¹xx\‹Š h«ßH_ž$¤®e£*R]]eÇ%CûºätPµµ•?lAÔMÙˆ~%WW—WTËË¥âââ‚Ìì´˜öøx„ù¸]uxâ/†zz?Òƒìïãçïõ@ÏûÃFमd#9UtPTjšÙ¾.9TMMyE9_X’ 6‚ ê¦lTR˜™“Ÿ‘™žž––áÓ6¢y°¯ÛÚ…xøÄ‡„;»ìëìæîrÝÝÝ]FÑ…ÔÆb·zR×°6©¦¦¢#¢RÓ’ÃöuÉé è§By_P 6‚ ê®l”æïìiäiC ô¸â}µlô0¯‡Ÿ‹û_{öò²w~ñ©gý¯{ôäñ"""€)݃š<.‘Rß®R¦êiZr:¢êê²ò²AqØ‚ ¨;²‘ç7zˆÇK‹Ž÷wqwµµsºhêçãëééùøã,LžäTaªª—•ó‹²ÁFAÝ‘S× !6ºvþRJdìS½£-z¸¹»ººÂoÔØHF¥¦!À_**,)Ê”±Q!ê‚ îËFLÿ¿¿ºÛ;yú¸^±põ ó ô 6zì±Ç&ÏFÈ_VÆ'•s¯È1FY¹)œ?¬²u AüFíOÏ<ñ7šßˆtÅÁ%{ÏKêËP×@½¨'6ê¸ß©²‘XBû[_}còNê„2 ‘ÇhÙ¾‹õõ¥ ÒJÔ5A`#=¤¶^ÊÆîúôÍu—žÓüñxÅب¢4«ª"¿®F(•T4H«¥Õ ¨[·¤'…ª½ÙXÛØPSU‘‡º‚ lÔÕiǯÖË·Z'å•…¥ ½c‹\#ó.ù¥“.ûs²ñϰ h’­L§=’6îÛY‘ÒÃÇeå¾³‘Éÿ§ñ 5™¬ßˆü@¾áé 9¥! Eñ9åW‚2­œãµÈ.$‹Øè¶x álÔlôçŸÓPó”ñS’‰e’e„’ÂÍwž!ÎF÷+…ÄÄç”:¦Åd•ÊÙèw»è ‡Ü¯í¼f·ýŠÍç—n€ÀF`#TˆhqaÌAYtÝG¿Qt:?>Glë™ g££ö1¶»Ïœ £±gÎ^ÛqõÄ¥0°Øl„ -.Lƒ9( Ó÷%æ•Åg·`£óV^gNù· ¿²Ëž ‰ÀèÌéÀË{ÁF`#°*D´¸0 æ ,Lßo”^\—-¾¢ÀF„D¿_‹¦®´ÓÖÁä=¢Ã£1Ô¹ÆØèÇcóN;½³f›N3nßßEKLfɰ‘ÁJzS™UvØ­|¾UmƒSËj$bc¯É(2„,"9F” «JM¦–/*+%£LÆVFJ2jÓèa£GŽbDÿMj BSqxY(Õi´O9ÝÑo”QR—-ºâuì,m­œâì¶ÛZ9Æž¼jó‹õ¬]Û~•±ÑöcÓ5±‘bøº~éDõÊ`#°‘!T"¬Q娭ШÝU5ŠÂ`‚ÊE =9åµbc#F®JÿMjfca#ºã* úiSfÊ~£f6J”³u¢µ‹¦@ìc¶Ô¿FÝj§­ƒ.pÕ…”öõÈFí °بSE¿¨Ø¯[V}Ó–ýäõŠ/7ÞvWn;L/æ/–›L¦ÇFj6c4þ}X3Lv±C2rè4Fsç©õ¹òÍ3‡±âw®T!t3¿QV 6" :{Êÿì ?êG;÷»÷•Ÿìmv8v5²}l¤êïQõ-érŽê§èþ.c‡$°‘!ûWTëwct¤+¥øcÝzjHÔÐÊ›1l¥­i°Q®°T©U–Ó’Ñ™Ã<”jyÂÀo^í?ˆ–:ͤãJjb[²EaËâ¯(ÌHu~£óãW½óNLmõu0§UZÒ”cÞ#°‘Ñ…€˜LfB~™¦ßîFdÃy— ØÈ0á•ÌaN#c7‡üÇj‘Îðo^õ÷«Ó4jëlÔëCcõ¥—T+±éÄå0˜F~#9tg£vŒ&ê8Q¡O lÔ•‘¤ÆÛ  ¶­ÒFÆb”b¡˜±"à“ÎË»wÑ4y«,&qdC«ÌjÈ7¯ú[ˆõ©Q~[Ø(Wol¤w¿‘.[E6r JWd#-óbëè7Ò—'©ã×ßlÔÅ¿"zT—*^Þe¼~#/OåÒjÿ ‘²‘‘/kr¸Ê©¯9tÏZœF†_ô¯ŽMûš8¯+Øèþú(Þ( ¦À0ÙH/9ˆ7u ™Ì.ÕðLµõ£áÅ Eî~0%6b¶P˜ŽÒO|#u[ÊÙH^XÆh‹šRëe1–²Pen-SÆç7jÓüFÉùå´˜Zxº(0©Ä#ªÀ#ZYžÍòŠ.°û ‘ÓÖ­íc£öÅY믭ã•ÁF`£®#£f#ã ‰e«"=˜i" c,)yÑ(z‰ŒñÁcc!5õl~Y¨ò¨vB5e¿Qt†pÛ¾k;\ݾÿʶ}¶›wÛlÙc»u¯­Å>Ûmû¯XRþ¯×v´ÛyÐnûþ«sV[qo‰Ž–H$"ÀF²1)¬+MˉÆÞîi€¹–ùL)^Þ4†°_Fmž&ïÀ5ƪ@Ó8µ6Æb›„ßhÏQ77wÖ’——Ì+•J,`#°9ŠX8‹¦ QÃÏj|µS ª¤˜£ÅKJîŸP§ftæèÒ¡Ö=Æð›„ßhû!Ç °\u)¯eÚsÄŽ±Qjjjcc#lÔÍÙˆM¾×êÏD£žûQ>Ÿ‘ÆéXË£9šº?Œ´¤äÿMrÚÓ>BÊÍa‘yÚýÇ^òv¥RÐ4Ÿ­Éú,ö^iqfÇÞ —í|¯9ù7ÉYYv2Ù:ø®Ù|ˆØ(99¹¡¡È6êæl$;mb> ÕE4ñØè¾Á3¥’bͰ¢ŒkBvldÔ.d=­bü~£Û·ooÚ}RÞY¦£âââЧ6™p|Žªît¦“g£?[. j%EÝRŒ0Ø*§ÆeŽö§ËXÊBkͿ߈ÒüQQQ‘˜˜­[¢`£¬¬¬›7oYÀFˆ7Ò]&çkòF™d¡¤pógˆÉúXºsçõ‘ItKä1ÀFhwÑâÂ4˜62Y¿‘.Éåúõ³Í6jì¸Ùsæž;w¼6¡ÝE‹ Ó`ØÈdýFj“压—,>köÄÉS¦ÏœyþüùœœœåË—ÿë_ÿúâ+3ð Øl„v-.Lƒ9`#÷íÙ»ï‡M›ÍçΛ6kÖè±ãƒ’’’222^~ùåG}4222!!á©§ž"6újÀ ð Øl„v-.Lƒ9`#mlôpŸ cô¹º¹}¿zõÌÙs¦ÏšõÃ?ìÙ³‡Ïç?~ü±Ç›;w.Å\ïß¿ÿ¡‡Z¸p¡íÕk?íÞ=`Ȱ¡#Fl±°¯€ÀFhwÑâÂ4˜6Ra£½±Ñýò36>>~íÚµ3fÌèÙ³çÉ“'AïÞ½ÿú׿_¶½òíøñ}¿î?jܸ­ÛoݺRÐ8¡Å…i0lÔélt¿õ…††º»»Ÿ:uêã?‹Å'OŸž:múÐ#ÍçÍ?tøð¥Ë—ïÞ½ :P!¢Å…i0eÑ-üF#ÇŽ¥µÒlllˆ6oÞÜû“Ï>ú¼ïÇ_|Ù·ÿ52ûF®}èë†eO Øl£`L åLŸ>œFÎÎΗ.]¢¸¢E‹}ÿý÷ÖÖÖ...GŽYµj•¥¥¥§§'°bÅŠeË–Ñ~@@ÀøISÔRŽ"è(jg#Øl£`Lôæ7r NÞxÌMU”¯ý_|mæíí½zõêõë×oܸqûöícÇŽíÑ£Ç×_MˉÐ|ÙÏ?ÿ<’o‰æ‡\¼x1íÏž=›ö¡_6B`Ìi`#°‘ÞaP›òÙˆç_¸p¡oß¾cÆŒ¡øk‘HD®£^½zµ¦¦ÆÇLJö§NZ"K4xmäÈ‘ä72|¤v’7ˆ×œ”ÈIž©åL$°jss`Ø~£6³ÑíÛܹÉn—öoß¾Õ ­k•æ-ZüÁÿ>4tXÿAƒ¾4xàà!¤o1 &Q~ÿƒÌ 4Àm¿þf‰F®Ñ»tg#%$j5þ$°ØFÁ˜6‚ߨ£~#ZM¦zº]©´¾¦ºŒ_˜Õ*Q"Ê™3oáŸ9sæéÓ§iK+¦QÒ´iÓÈ]4eÊ”³gÏNš4iâĉ´3a„ñãǛϫ…Twx-“v6R: l„ÚFÁ˜6‚ߨ=l$‘Ô(!H~vå³+kÚ26Z¾ò{ŠÈ¦p" $"*ª¯¯§®´M›6ÉÙˆvh‡ÀhܸqK—/o+iñ i÷0!P›Ã(˜ÓÀFðµ‡jk+««Ë+*„t»¥âââ‚Ìì´ýFkÖ­777'ô¹qãFCCmié4vHé¬,±r&­üþ{ílÔ¦4°Øl£`Lôï7*)ÌÌɈÏHޤÛMK KŠ ŒðÑ‘~ؼ™ ‡ºÕÈoD}j´C#öY/ ì?qâe£@lŠÑ¦ž5ȶaÆ6±Qûb±ÁF`#Ôæ0 æÀ4°üFíg£¤˜€0‡`OÛ OR Çåï«:²Ñö;&Ož|V]’»Ž›hKN#b# µl„6`Lƒ9`#ãžßˆ±Ñ/¿ü2I%M”¥ ²´nݺq²D`DCý·lÙ6Ðî¢Å…i0l¤z}˜i ób·³ˆrvïÞM4Q!MhNãe‰Q£o¿ý–VÀFhwÑâÂ4˜6êD6ÒãzjmMD9{öìÙÝœ~VH?5§›ÓY¢!l`#°Øí.Z\˜sÀF¦é7¢ü:m½ È6PF0 æ€LÐoDé?þ¨ªªÊÏÏ‹‹óóósss»~ýºƒƒÃµk×lllììì\]]ýýýh´Í XÐî¢Å…i0ld²~#–hÚ­[·jkkKKK‹e©   G–rsséP,WWWÓ9 °ØZ\˜sÀFÆä7º/.¨8«/èk2´-Øl„ FPR¸yøÚÉF4wÑî=».\8/Ï¡ÃÆÆF¶OùtH}jšÞNßQŸ%7 J„G`#°*D6BIáæá7jÏ¥¡Ï•+¶ûìSd£šš¶ÿËžŸ¬ŽZQŽ¿‘¡±üF`#Tˆ0 e„’ÂÍÃoÔžd{Å– Gw]¼t~#°Øí.Z\˜sÀF&ë7úeïOÌK¬˜¯”CûÌotÆú üF`#°Ú]´¸0 æ€LÖoDltûömâB¢ùaxxåÐhÿã'Ž©Áo6`Lƒ9`#Sðåìÿu±ÑÕ«W }ÙhÍš5ŠlD¯Ò™ç.œUe£6ùèüv°N[ß¿Ø"ŒB¡¤póðµ9åœ<}ìæÍ›B¡æu$ŠˆŒÚþã®"Yòðô:êÛÃFÑ ô*ù¯98:hñ)æßG6‚ßl„ F¡ŒPR¸yøÚ|)ÛKÄFÌ9d}þÂèñiIš#›ç-Züë¡Ã›-,GŒÏN‰DQÑ‘6¶6šüFº üF`#ÝÙ É0SëlôpŸ cô9{ÆÉÉ^ÎF”ˆŠälÄÒÞ¿Ž8™v’““ˆjkköîÝ£Öo¤ÅQ¤èFRÜQÊWu8©fª½šêGÃo6BBBBBêj6úŠØèœ~Øè~ù9äíëYWW§‰RSSÉitä÷cF))ÉâR1­§öã®jýF­ºv9F €tÌQ{5µŸ ¿úÔàH‡Q(#”n¾«ûÔôÈF÷+íÝ·çFXH}}½Z6JKOŸ0uú%›³çÎûøGDFßh݆µíó)±‘ÚüVÙHË»à7¡B„Q0%…›76Ò»ßH—-¥-›c㢫ªªTÙˆÏç=fÛœ].ÛÚÚÙ]a"6Z¯ÂFZüFšˆG“¨­ž$Ml¿Ø"ŒB¡¤póðµ9­^³233³¬¬LÎFÅÅÅ'N¦¸¢ŠŠŠÃFL™9kåê5û=xêô‰ªªJ $,,týƵšÆ©éN<'!øÀF¨aÌAIáæá7Òó¥,žÇç—06‹Åååå•••´ŒE Q\QaQabRBè`__b£ââ"g[ÛËK—§e~#-ÑÓJ4£)F[Kšî}jðºF‘Ye‡ÝÊç[U\,/*+5¢ 1!¿Œn[5_zSœÚdmÉ@Ê1|£4™£û Ûhi))ùãG[*µ‰ØxKŠ=xôÉ1¢\XeˆÿM­>E$ª´œc e¡Éöý+©ÛùfÏY]]E$D!GC4f&1¢9åç466üñÇ-êJóóó±½bãéé±|ÅÅ0/6ب۲k–Em•Q´»¬úV[ëä)Ef¸QZÌÑñƒe#MwN$¡úøQŽZ<2Š’R5GÓûeŽ.O}ÿÚÏ1„²ÐdHy­Ø°Øè~ùÎ_8?w¾y›´pñü­›;2/6ÖS™Q­á_.w«°ª_ ¼ÝÍ–jªõX¥I¿Ú™´e¨¤öG¼¥ÅO0X6Òrçìa#G {ühK¥ÆHc,)¹9ì0½¸Œùb §¤t|Šä?- ö1Óbc#µP÷òQ2Ÿ7Ïbûf´…iéÊeªßlÔ ÙˆýÌUìo¢}ÅúÝ0Û]ªø˜KmåÈ:5IˆÑ’Z˜!¥Ý]N0X6Ò~çìñSò$i²ÑðKJõ¿I»Ç¢‹ÍÑñ)¢ÓäÞ/Ã|Ì´”¶Ý=ÞˆºÆ–._nk{þÂ…SçÏŸêÛQcÇ-^²”b’à74ù ¶qÒ‘ítÌ44£Zmq4ÞHw6"oŸ!{øt4‡96´€Ñý5GÓÍ+~ù†o¤é&Ù—Ox'Š—wÚv/¿%®OC÷³³³iéÙÐÐPooo777ZjÍÁÁÁÃÃÃÏÏ/<<<--­°°ÆöSà6üF`#°‘ÀF`£ûÂFôø¯«mÉŒ¨¤Èi!ï™2À‘ Zââå¾Ucg#ÕM•)ÇQºsçM»uëS#ô©’%ÌOÛêêjÊ‘H$„P·e‰\Mjã m 6uªT ÀF÷‹Ø³gh»:‚zÌu¡¶ÇÐØˆ}ùò‚ÆËF,“‚µ5ýle©ßˆR¨u·H`#°‘Òx]Vƒ³y€Œ#ÀF&ÆFÚÁÈHÙˆõP«? ؈у"O/i:SS)t:ÝǤ;ÀF`#íÒ2ÖXØH5›5Q‹ÝÍÙˆèœu¥i™)ÑHÙÈ0¡\õ–ÔN¤e´¿1²‘&CLÙoDÄS_äËmSou L´Äb³Q† «¥Êc?‚UÇðøÄÝ“¨hX˜‹¦é°¨¤Tÿ›ØICõiÚl¤i|‰¦R0Y¿Ñ«Ã›6m"èÙ²e‹ÒvåÊ•òíŠ+h»nݺÝ{vý:­' ¼6)ÍVG<Á¦}3ü¹µTŽªs?jé¯ÝGÓ˜“R­?ÏKJ鿉šdlñFm:ÇÙH5ºˆåh*“õëÐð´+W®øøøÐ–F¨Y[[Ó–öÙþ… h¨šÍƉŠ*KÃâíWÀF`#µ‹6Ëš!ZjpU£ jzb°‘b¨²qù*Úúài"?°Q§¸Ó½LÖoDlDÃÐIJ$ KKKi‡mYÛRòõõ%ª* O²[znçd°Øl¤‹ÍjãZkVS ÎŒR\ÁÔ(ÖšínldŒý8­„âÊÍZf už!Š ·Z ¦ì7¢üå­¥””9]üy Àl6j« ¶Ý…Q¦]F()Ü|çbÊ~#®Å•¥ ‰¦lêJ»ºää¶qZÀ¨¹ÈÕ"ÀFhqaLŒÀo$g#µ)99™QÜåïÎÝc6ÀF0¦Á°‘)ûšÂ…é®C‡£wVÀF`#´»hqaÌ™f¼9«««…BaaaannnFF›Í(---===''‡2‹‹‹©[M*•¢C l6BㄦÁ”…)S£D¸sëÖ-"$B‰DR§êëë%²D/ݼy“΄Ól6BㄦÁ”…)ûÀF`#Tˆ0 lspóðµHçΟkSÈéÜykð Øl„v-.Lƒ9`#ÓôiŸêZ_oAÀF0¦Á°‘q$:v²D«ƒäççP\v‘,Q¶3K..4ý#…lƒÀF`#4NhqaÌ™¾ßˆ#;né´Âf0"**.).))‘qÉE(‰Å"°Øl„Æ -.Lƒ9`#Ó÷ÙËÈÈÁÞ¡ÉcÄqF|>Ÿ°è:麫HDl$ÀFhœÐâÂ4˜62}¿‘=##'GÇŸwïZ°hÞ”i“H´sæì)¡H(‰K¹uÕJõÈF²ç l6‚Q0¦ÀFè7",rtttrZ»~õž½»i6H6›QMMÍž}¿Xn·(åVœ¥EÕÊ´°¯eÀF`#˜Ó`ØÈXýFŽq##š,›ØhÆŒ´­««%B"<:k}º¬Œ[t¶U¿‘îÄ6`Ìi`#°‘úœœœ(æšzЪe‰ ]¸paMMmm]›,{ñ’…Fme#U7’ªoIwWØl„ FÁ”Ø~£®ð99slDFwïÞ©ªª$D½‰b‡Î©9¥FäÏN©¹CÝ:ëå%¾(v÷¼±ÑG}¤Q¤ÜÜÜM›6±&MštòäIžÙˆ. ÝŠØ—à4Òꆾá)¼n_ÁÃU£ëˆqOý"nT[[»ÿþÙsfÓb%åå篔² ÊŽzRCC]zÆù™3g€Qo¤–”Mjâ·Vb£ÒÚµÀ õ#¬ãp¶Õ³·g2]Ý ýêâœ4œRà q딆;ô«WR#´Í"|œ³QJJŠpMi*Øüùó¹e#á´³_ôÊ¢­tɈ›ídW½2Tâ¡áéÞ£Ëʇu¡ëˆAO­7¢¤¢ïL6}rÔéSαãÇÄfÿnÆ¡?Î=öââãÍÍM´ó‹­›%¹Ø«×|Ôê~°ÌŸïS£ýCnæ§Ù4!;Û2l$°ŽbǺBñ¸+ÐÏl¤í”<î¢Fœ8¥íŽñ\±‘}ä#µ¨-…šød#ÿ´v2Š“£%~ièÞ£Ëʇu¡ëˆOý"n}zíÚOnÞ¼ÙÝÝÕÚÚLl”p©xô‚ã“6$?³0Ôél¨¼V¾iËúÎÎöÞÞÞžžnzéêêZûÙÇmmm@k³‘ú¨=KDmA0ó²õ”= 6š²ÞýÌ5Q¦¶SѯFµy NœÒvGÞ׳#5øÕ·TT\\,L¥©±‘0•FGÒÚ¼Œ–hZí¤m³äb‹«ŒÅ'ÄóÑŒËi?· OÜ´Œ_V¼Õ…n}ÉF¾2Z{ì¸Wˆ{JËJ²².¥çT<97äOsŽNü8²¢²4/?gæϻº:››iYH'E’z{»?]óQì™S@k³‘âhÚ Y´{aÜR‰–L”‹­Û'Ø]?‚éÕ½¼¢;,1V>§Æ†1ÙHõÚ¸WÛÚZƒ(Ǩ¼¼$7ÿJú…´õ?§¨ͯ555R舦ÕO dñ6¢ͬY[8ÞO؈ínR3W.¶‘Nœ|Ñ™‚á‰ÓKi[öøa#65¦ÆFÚû§Õ8l~,$)\,æb#IáÍËFŽè`å¸ÑœqŒùÏ\¿~MuuÕW{v16"0*++ÉÉÍ:—‘g;óùú56õôôP¾Ñ[ø{ÊE’¡8Ì ¼•|ªx$ŒC6ú¨™”„X‹IðŸ‹m¤gÙTŠñs±›úK;}Ê·lDá"J62Â@’¸mkänóÖüØ/ Ê(ò&3ŒŸÂ›”´Ñ=Àq£ãI9 ¶GÊEûµÿpÞ3÷Ìyò5Í}êN·î˜KÛ£î$ÍåÞCOÞ‘y)CFЍ$ 2é=ü`#ùNñ/*SäbìÄÙ]B?(MÁFrZÕåWÞ%ÒÈ7"bxD¯sp¼±‘âˆk6Òå ³°‘—`dޏaGû[øÒO/š^½TPÉé%'²Ž¼›<9qÇØ³›^8³ñy·ž»­ç£>:àŇ(KÉi¼ÂÀF¦f#Öw˜eÀ£N\# Ö\l¤¶“Û\l#l¤qŸçlDíŠÍÑÈïÌ—çb³_üäbkÞ\l¤ëˆAOM7"êë»qó¦KT\Úîëëíê¼®ËF«g?½ñ…Ôu%.}@¢ä•?K_ÿpêÇ¿ˆ]üƒè€û"æÝöþ=!ï?½~ôÚ‰#BîRüBÉ4™aB76æ…ù'±„ø>5Ö›SÄÅìlddBÍÔlÄù=üÚl¤¶¾‘£Í'Q‚†[ñ´üj’ßï±?…7é:bÜSsĺº:Üj§âÒ-÷­-ŽêÊ"]6Ú»cmðâÇϬêØ¬ïŸœwÏé€{Ï.¼Ÿ”ºî‘¬½c¯ì_¹$uÝÉ«~·øþøÅ?HZõO—Ξ7únݧªÉIH;¶™ŽˆŠØïZáÇ®î=Pfa#ùb3&e#–lDÉ×’:R[ËÎ,l$Y›&Ô„Ûø‰8d#ábÑ^bT¼ö£ÆœÎ»£[x³°‘®#yjޏQGG«d¸*/Φýì›Õ^S“ã×Nù×øm㾚<œ´gÊw½óÝ#ï~/jå¿¥l{.jÉÈ‚È9aóNÍ¿7rþ½§=³üù‹WŒQYQ6ù9 ­XŠA#Ó±K62òÑó:2õ3C´ÙHû7ÞØˆÑ¶ösúä5ÅÉÕd¤ð¦`#]G<òÔq£¶¶¦–º•¬–ŠÛPo·Wç_ÔÑýú ž»/mÿ¬ÝSîþjò݇f|×¶yÔåcóϬ~,üƒ<¾ð‘+±ä¿…ξ?bñ?ZòËÈ%¿<·{BðÒ'îÞäéæ$ÁÀFfd#6ýÄH‚=Ó, ¾i;eðq"¦¸OͼϚUc£Ü&¹OM˜eS|°šÏkÊÈ3Œ XÅÏšž\áó†çјyf#]G<}Ô´ âFU•…%W3¯æ¤Sqó¯¤e_LÈ<£ËFd/þ8#tEÄ'OD|ô»ÈÕHÜõÆåðegÖÚûöð½Ó\ [ô?wŽ[ò¯Ç~NŠZýû˜í—NzD÷~íìlä!ÛDlä½ø\˜N™”Ø~šSÀHqAHÎ×Åöφg™º0GÜ(û¢-->,)úpbô!RÂéƒÉga#¢œ³»Þ‰Z÷|ØÊÇI±Û_]ñ»/§Ü³câ]¤ó~yléö]“/üÕ—Ó´cò};§þ0rãËóŸ½È6ÀFCÏFЉØ‹bƒPx³²‘¯Ö7"[üú¿Ely3üÓ§/ûƒKûjÖ/ÃW:¹îù ãþîÈòÇc¿œ~|ísákþ²aìL[Þüþ‘åOÌl6ÀF¾É7’?sMãA³`#ÞOãFÞ`Ö¢×þûñõcެøÏïŒØ8þ.¢Ÿ=sÿ…ÞnxíΓëþš<çÔÆ1oÝ/°Ñæ7¾<ïW`#°Øl6òa.6å Ï—%*VÓ¡ðˆ €¼xá¡À©?Ù9ãg;füÔ¥i?Ù>íÇÛß~hÛÛÿ°mêƒS~8™ô@à[?pëþ/&Ý·éÍ{ÀF`#°Øl6BÃY3n´xü¯ç<õ÷sFÝåÖݤ٤§ Ÿ3jøÜÑÃç?=|þ3ß xú»<ó=RÀK#,`#°Øl6BÃY0nD+\;Žò²²¬¬ÌÄÛ‰ãáA{¾Ú´aÝêOV}´rÙêWnÚðùî/w„9x:*")!þbÆù¼ÜìF§È6ÀF`#4<°‘ âF}UðÞàO×~ì‘‚÷Vü<»¬äBtÔá'ÿü_tmØ· ¹Ø`#°Ø ld¸±Ž§ßß?Yò>5Â#v‘g]ŠÀF`#4<°‘EâF tÊÊÊ*+++ÜVYQYyíZ%ýÌ~Ín·WÙ]/U¤*;Øl$ŸwÛ°nØl6¡áøõ#T^^N D\ç¶ø¸¸}û÷Ç»mÿþý6[|¼ÍvàÀêªj°ØH<³Æ.rš\ÀF`#4<°‘›J‡°D܈ÂE¢ÐѾ}Eߨ—týç¶šš°؈‰æÑæÎžŽ\l°Øl„†6,6òm܈¨ˆ&Ì(tD¢ ·¹¢DÕÕC111µn‹­«­á>5¹!n6ÐðÀFV‹QrÑéÓ§ l 6Š‘Ñ[±Ûh£®®n@ØÈÝ,n½Â,ÀF;·¯ÀF`#4<°‘¥âF¡áLj(ÛÚf³]¸pñâÅK‡ª«%ª#Tª'k¨wm44a#ñ¨iœß*~ƒBÏlD3k¸‡l6¡á¸‹OÊY°=R.Úo„hB^iíLô™Ä„D²Ã‡——”””•º-ÞßàÐg##àbœúýO€†€ˆŠÂCƒð¬Y°Øl„†6â1nDäÑ~ QF½&$$\ºì2b£Š54P$‰VÍv:ô[ [ƒ4Eâ0R?âFâo›Ú—‹¿ÓÔDÅí=üC°Fzs867ê'õõݸyÓ%*.m÷õõvu^7ÈF4¡FÓgôzöìÙ$—%9r¤¬¬”Ö=JH°•»‚Iýc#Eâ‘ÃÄŒP”|[ÎI`#°:D86ÂÕ„Âûcܨ««Ã­v*ngg{k‹£º²È8QN…Ž‹.gffef=zÄ-r: ‰š›Èè£æ¦f/ãF‰GNQÚ<¤Ž2û4ؽ9œÀFˆyÌF­’¸Kyq6íg߬öÊ@',<”±QLLlJrrjJÊÑ£+:¿ÿ‘G>øƒ{÷ßyéÀ}ß?þûÇ6¿?“ý£ô'FØH _<ÍÅ– Øl„NÀF(<âFZlÔÖÖÔÒâll¬¥â6ÔÛí…Åù ÆjÝ ÑkrrRVVÖ•+WBBB"^yéÐ÷†§Myéœ éó^O3ÞöîØ„Y“Žý|äWãDZ?1:(6ÒÍ"Rà än y´ ÑÊåô<5°Øl6BÃñ7ªª,,¹šy5'Š›%-ûbBæùƒlDÉF”vM¯´ÀcJJJjjZИWÃþã s_?7õÙ˜—þOÔ‹ן ÿç#cþxô7ÿ²kÆôÞÞ^ƒ÷ðÈœšb I-l4¨l$¾U­ /l6ÐðÀF<Ʋ/ÚÒâÃ’¢'F"%œ>˜|ö¨§l”’œBA£ìììý?z ãýq¶—wö¯zþÑðgÿýÓ©¯¼9nÎøWg¾öÒ‚‰ãwýè‡mmmüS…5nøç–°¾Øl6BÃYs}#¢"ºQŸò‡bãâR)j”–FÙEçf¼ýâc'Ÿ{4ô™›ú;^ùQЗïxbÓ߯Ú{Çò|#°‘²ÙàM®¡7‡S`#°ØÈdlôxɰ‘ü­‹Ýg†06ª«¯£õ¯iƒÖ1 zðÁŒeïE¿9*ä™ÿ}pôÿ:ñÙŸ¢c_xdÅ'/|ú?Wm=kAàý÷³#a~˜‹-yÐ,åÀF`#°Øh€ÙhŸ§æ‘©Ý»pá—#·ì½øå³ãVÍ¿tnõ…¬5§N­°%èOSßûð¡Ÿ|1q"­ jñÛûÔÊJ.ˆCG`#°Øl„†6²HÜ((xá‘¢ÿßÿÝ}÷];ž|b÷[Ï ~fÏ®§¿øôÏyü;ïºkÓèÑùùùN÷2Ù0¿½‡l6ÐðÀFŒ1ëëëkmm­¬¬ÌÍÍÍÈȠǃÄÄÄDDDlZ±âóßüf÷}÷í»óJ0¢ÀGݱf =T„¦áººº@-ˆÀF`#°ØÈRq#±Ý¸q£§§§½½.$z<ݹF³fyyylÑ#º­°°ÒŒš››éH"*P‹²Ñù´Óâ|£Á»U ½9œÀFˆù’``£þÝÎ6ÀFhx`#+Ä–-_úʘ—<ÕòåË+`#ñÙXßl6¡á,7"Ð 9xhÓEܷߥ½¤ƒ‡÷oݶ…þ °6böæc{]l ƒñifŠ7¢œc¡G6m^¿øÃLK–.’hÙòW¬XúAÀÜí;w~¹í«Ý»ÀF`£¡|ž ƒÁü”|7JL¶m Ü|òôÖäs{RÓ÷§_¹yìüÅÃ)ûl©»âS¶Æ$m:“°6äÄ'4Ê/È¥?9 XÁ}jCÆa˜€Sp®aN ùFC7:Ÿ‘¶wÿž˜„­É[S/ìLÏÚw!ëÀùK»“Ó·Æ¥®‹Iú$"vaØéYÇ"–:²?19þd^@`l6¸‹®Á°‘5ãFáÇC7±áXØž#¡ÛŽ„Êu(d éà‘´äÞ}Aô'oO›f¼0ÖxœØl„#.\ƒ;(¼¿Ä>ûìÓY³g¾;kéw§Ñ+½eô*Þ }¼zýɦ͛5HH°~³‘äO¿Áß l„ÞNÁ¸62ÝmθÑÇ«WΘùö´S¦¿3•^IoW®ZNB‹@Á¶í=!6ò¡:{êÒ‹["“é5)ÏÑÚQ/9€vÒ§¤ðóÎÚæþ;D]§Äºæh ÃxvJ×V;™bÐ2RSÔä¨á1§4ª’ÿšR¬&µÊzwŒtâh›öpXF•pÀ¾'õ¾d#_Å6±qáâÂÂBBÃ…†¥[úçÌ=zt~ÀÚ˜=÷½ñã_{kÊÄ·§O?~ìšÏVÏšý®Æ}jl¤OÒ)~ƒäÛÀF`£AêDX!íw%òÔºNÆ]#N ¢$ÁƒSºî8ÛêMÊFFjŠ‘«äÅ!™ÿšR#:Æçîèž6Œ_V>¬‹þõi„J~7Ú±kÛšµ«£ÏDÅÄž‰‹‹9s&jéòŧ"OÐ+iáâ€3¦/YºxÖûï®[·nÁ¢žúÇFû°‘‘‰6°Øh`E=û-Îze?ÐÏd:%°·vû¥Åó¸«ë”Xä çl¤ëc#Eï8g#]×hØÈGö–>RÉø¯)µ˜¥b,vˆÝÑ-< ‹Ï¼¤sà¤. öiôV l¶‡µ1?ŠíܵašV}¼bÅÊ¥ËV|HK—HÇkL«iä©}¤Or6ÒÀ)°Øh0Ä~?I~u‰Y þ™ÎLB×)AÔ? ¿ ¹… ]w°Ò«éØH×µÒÚÉx,Ð’kJ1f©ÈCïŽnáágBЛ> yæ‹yeq£%Ë׎.6šùÞ;Ù9ÙFÒ€4¢D±‘°ÀF`#J£7Ï*whÇŸ¹MÀ”;ÅB˜²1WV©5ØH×5%RüAoÆš’ˆâŠÇ;r¤À'§j8¢yŠáp+ǶïØúá҅ƵmG ýÕÔi“ß™9ÝK62xš‘)6°ØhhDá}Eúa£”ñ<îÊï1IÜaUC'¤Ì  ¦c#‰kÂx,dÎ’³<çb¼šŒ­ÏÝ‘^þ»ˆMEÑ~ÎëB±QÉãFj03Å’¸#`«)–=rM¸;Ò¤®©]Ml„ÖñàŽ¼ðÔ ˆ³˜i[í¸ª ‰# é„NLHHòù*nDÏŽ]ôa€D,˜;nÂkô©X´‡ö³gÍFEE~ºö/ÿu, 62±>BãŽV!%S±OäsÜ•;ÅöHî2 ÉÝaå§ÔÉz>–ûáí*ËD®i\M,J1â‰;Š…—S8'ÉR9"¿‘ÍÇl䫸Qà¶-:q2|„ñÇO„yíeº¥Òä7 ÅÆu:ÎFÝÂFoiYÈ3§‘hìõë?ü‡Œ€çɰFœbƒ«˜$LÄFëÈD‰ Ú®±ª‘OðïšvM±»#Õæ=}îŽbáåTÊ?§ªÕ¡6ûÇViÒN*·lÜè‹­›Î?aÜôwÞ~éå¿Ò*Ø„JcƾB¥KíîîêééîííÉʺLz€V9¯€ü„¨§`agu9¿9ŸSëïñì”%ëH×56¶™Ë5Ýšb·§ Sº\±‘FáÕR˜ùäT®U0¬7 =º%pÓ7úb#éµq¯ÒG­­-FI)‰„DÇÂŽ459 ŒˆŠ(;$$¼6ò6¢U,ùF1ÅUž·Èzvµ{:8w5œ2#yZG,¸ÂyqM¾ð ç®i»c|BÍ'îhÞ,÷ð÷ãzayñj0kÆ–/_&I*ëü¹´žÞ^#¢"‹Ñþ%K?loo¯€,ÏFì“ÆOXÉònÂâ{<çé:eü.kœ2XGòÉþsÂt]$Òòyo”Á†ÇfstãCìŽná… _Rjá_Õ…§}U›âôÙÚ>‰‘õõõèÔÖÖ¤¥¥ÅÆÆFFF›0–Œl¶¸œœlFE“§¾•——×ÕÕRù  w}kDPäëë«õ;œŒ»Fœ2麣øÎëÈxM±‘L,n—e7ØðØH¬Xò‰;º…7Ë3Cúw½øò™!\Ùßþö·¦¦¦5k?ôÖ›¯¾ö2½®ýlMkk+läWldpvIü\FžWdñÈ)³°‘wÄ×4EyTS4 ÅxBÈœ5oMé¶7_¹ãi3ãöY³Fr±Ù¯?kÖWq#Øl44âÍe8eÉ:BM¡ðƒçˆ •䛸QðÞ`6Õe\Á{ƒ`#°:D86‚;(¼9ØÈÓ¸±Ž§ãk?þ6¡CĈ ×à oޏ²²²ÊÊÊŠŠ z½æ6»Ý^uÛªomƒÀF`#tˆp lwPxëÇÊËˉ‡Œ¢ÜvZÉè´šš°Øl„Nà oý¸EŒ(PÄ"F5·öÔÊ l6¡C„S`#¸ƒÂ[?nD#6}¥nFõõõ`#°Ø"œÁÞúq#.òŠÔMƒðÌW°Ø"œÁÞ"q£ÐðclM#nÔÜÜìt:ÁF`#°:D86‚;(¼õãFì4š5«“™ÓmÄFôê »mò=)°ØƒF\¸wPüÆhQ’º5»Í8IHq l6¸‹®Á°q#šM#0¢Tky‚Q“ÛZÝÖÒÒ6Ð!Â)°ÜAáÍ72ò*a£z·9šA#¢‘ñPÛ· l6¡C„S`#¸ƒÂ[?nÊ‚Fsj×Ý6Ð!Â)°ÜAá­ÏFlQG ±y4!tD&DŒ:;;ÛÛÛµÙH’g\l°Ø"F\ÔÜAáûÉF#}ÊF”lDHDl¤7êèèøz€Ö~ÀFœ0âÂ5¸ƒº0‘µˆŒåQ¸ˆ¨¨»»›BG^²‚F`#°:DŒ¸p î .ÌÁF Œ#FFDEÄF]]]_ã™!`#°:D86‚;(¼ÿ°­îH™F1¢p›DcTÔÓÓ3 q#Øl„#.\ƒ;¨ °Ñ`ÿ l6B‡ˆ®ÁÞl¼‡XÇ#………2ÀF`#tˆp lwPxk²³¾¾>šG³Ûíùùù6›-..îìÙ³111 éééEEE4ïF³lt$l6B‡§ÀFp…·8ÁÀF`#tˆp î ¦Px° l6B‡§àj …ÁÀF`#ôæp îÀ5°Ø¡7‡Sp®ÀF0Øl§à\`0°ØNÁ¸625=Q6‚ÀF`#¸×àØl0îbÄ…kpl6‚ÀFè1âÂ5¸ƒºÁÀF`#tˆqáÜAáÁF0°lƒÁ`0> l`0 6‚0§†@ºžS©_m YÌ »fjw,S`#Øl6Á5¸ƒºÁÀF`#°Ø®ÁlÀF`#°ÜAáÁF0°ØHA=uIyŽÉ¤ðóÎ򾁦D:ézM/rÐÎÙH×)AYå®Ã,ÃF‡Ë{È+ Z¶ž›ûŠºWD¶‘_ôº;¯+¶ã¦y]#wÈÖ2·œïˆjî3iME8nh´4Î ÏοD`#ØlôôˆuÍñ-’Ø— =€þ„s6ÒuЉv²O­ÁFl¸²I0*‹ö(â‘)\“»Cµfºš¢ó¯ÝÒx.ü™¶>° l6Ò¨S  {[`w½%’Ð…^œmõô–^*)Fb8a#]§˜Jk„nÑl^{C»—7#QĈܡ@ AC%ŠµÐž™ftMp‡½=f亮Ÿ%´›®¦¨Ìfg#Å&6‚ÀFßÄWÄsdV`3Sbb´DüÁ-é:E:“éd^Xƒ¨£wñŸ{èµ±(‹$’¤æ#ÿ®1wç‰'wÌUSÔØ„è—›CRzõŽJ‡ ÁÀF~‘‹Í’oÄÜC# g´vÔ³H’Yr±åN1Z¢ýŠØdF6"(ÓH{¬µL’¬yÙH19ŒˆÖD5ÅÀBwölƒ¬ÀF,Ž¢ÈrtPã ÞØHÍ)#¾˜4ÛòlDÉËjÙ3zö–}a§ò³R!‚ h”—•’—™|âtÔSïmœñÙÞŽë°ŒG6ª«ÎuÔ]]²ýè?¿²Š"œA4¨¢ˆÑÌÏ÷µ_¯ïìhÁxd#g}a³³üzkMg»³«³Ù­‚ ª·§‚ #®šî®Öî®6Úhv–`|²ÑU‚ âA l4ü·`#Ø‚ òo6z¼dØÈ U6‚ Ø‚ 21áAƒÔìÀFAùØ@°Á31álÀ`0Œ+Se£ƒûwïZ·sÛZ¦mŸnÝòIà–!‚ ‚¬!b"œÛ×2íùjñ*åäe_¸˜žv.…)%%1)Ù–˜OJH”(–É–àRBÂY‘θd‹N°Ei)þ“Í­øø[üIeŇ ‚ òPábÅdž1ÙâÂmá)I'˜ÒÓ"³.Ǫ²‘½ª¼¬¼¨¸¤©°¨àja¾[¹W¯æ\͹ê–{#K¦Ì[* ]ú¶. *ÈÏÈÏ»p5/Ã¥|·òΓ òÎI•›V› AAÔåç¤ä&‹u5ö$‘®æ%¤0•¦V”œWe#‡³®ÁQ[W_}KuUuõ·EÛuöÛª©B¤r·JE*q©Ö­šb—j‹ÕÖ’êj ”Uw[¹AAU[•óme ª±3eÖTe1ÕV]©«ÎVe£æÇ·ÔÜÐÜ\§¤Z©šªÝ²KÔÔxÍ­ ‰å59J¾­¢Û*ôFÎER‚•—_YXh!A–”³¡ˆÔØPømå‹ålÈu©>¤ÎF"jjré ÝB55V‰tM$9•$19eR5”¸U$ˆ9à¸-oîÊËH‹ß!Ah!Aþ§|‘ò9êèÉžÄF9$6’|ã0·™vä‹F>Ú8rhÙÒ%Ó`~oÍÍÍòA–”©ûp⋆ öµ[·Í\§#=í”0ò 9ó{#6Šˆˆ·²™½‡ ŽØè›ËI®Á¼´üËÏ¥F#EŒØÐØ óo£6°bÅ y ᨲ g¾Ù?Ë9¤`ä‹>Bã©üFñ¢žN #E 0 ~k¬Pc·µ–Ì6ÄSí˜Am᱑¼Ìý+Œ‘ïñÔ/oÖèÐû{ÉFŠû5:vÅ«@~™H–ÿ¹üÛ¼¯MůRÛ£1ùhüº6RòAºLÐø˜F 4y_UCÃF࿵7n0<Òf£~oóÃFuAùÿi_±‘醟a#ã#½PYЍ¡x¤§mÌËÊR¼f=E%ã§ldA6Òº¨Ô/-‘à ¼k\Hýg£ä`#˜‰ZˆF/i·Ñø©-ÿCÅaF14eð¼byŒ£8„h8¢ûV­$Fr‡ÙH÷ä xô·æÊhö¾÷ˆÕš´Þ2ãT 2y F 챩º¼LtÇM¨l}j_ô©à¡f#mÊ1þ“¢ßJM Áëîî–°‘¸…x4§¦ÑÉjP…ÆŒƒÁëÂàÕ7 e62chü2øÃZû`ƒ'Ç£@…ÁŠ6!ñÉFÚ(cwtëh@ØÈ˹rO‡6ÝËdPGI°Qtd°{´95m°U»4 Êû*OŒÁëèè°‘¸…xÄÚüd<êû´b1i_ÅòOtåÆl#'Ç#œ2rÒÌ5‹áýœšbÄÂH$R·åxzz›´c‡ŠáCƒïée¢ý;jfW0§ÆF-6¢ÅÞæ‰é¶rïÙÈQ—OŠ={|fÛ`#Øõë×6’·&ju’mñ«üù‘Šj_®ýj£ßeV<ÆÈ†ñÒ*RÃÉ1jßfðäxz>=ªhòs¢e#ãÙH±‘ñ¼œ¡g£þåÆéÎû1’ZFƒw]Ô×ÞÊ.rÔºU—ãRm6©¡ö I•Õ¤ÌÅö4oë› öD°ŒYKK‹„Ä-Äl¤ñ¯sÈFºd£KH±‘‘´JÛþ©hÙÈÓ±¼ß‰ºÿ–§3JýËú(6òhøÃœÚ±Ñm0rñË1oë°‘Óiw©_ë†LFÓ¸óÓ`àÝðùuá!{"Ûfëá~ÜÃOFAÞB˜Ä­QØ#þH¼GüW’#%’ï—$ùwÅŸªíñ´ÌŠÇ¨•YòÏÉÿVqäSÅ·’ƒÕ¤ýoiŸÅs¥X Åôwò¯~÷á%üzIÒ½c_£„Kf_zÀÈ(3°÷ðk¯`p]ËÅü $GÈ1¢ˆ‘°­ÅFކk$r½ÿjrHì‰l›BëbcåC5Z$]ÞB¬-º¦õxˆ™1‚Äc÷àª:‹ýTv…‹„íê,U6ª¯/!Yc¡ÏÚª+$öD¶í~žÚA¹èFû“‚\TD?Ýåf£ípýAAôÃÏÿ?Ñ|8¼™6lIEND®B`‚bitpim-1.0.7+dfsg1/help/upgrading.htd0000644001616600161660000000150210654722450015563 0ustar amuamu#include "pagestart.h"

Windows

You can safely upgrade to newer versions of BitPim. When downgrading to older versions, please uninstall the newer versions first. You must also delete the contents of the data directory as the older versions do not understand the newer data formats - default My Documents\\BitPim

Linux

Install newer and older RPMs as you see fit. When downgrading to older versions, you must also delete the contents of the data directory as the older versions do not understand the newer data formats - default $HOME/.bitpim-files

Mac

You can run whichever version of the dimg you want. If you run an older version than the one you ran previously, then delete the data directory - default $HOME/.bitpim-files #include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-lgvx9700-notes.htd0000644001616600161660000000200711051132227017326 0ustar amuamu#include "pagestart.h"

Firmware Version

  • The firmware version of the phone used for development & test is VX970V03.

Phonebook

  • BitPim supports all phonebook features of this phone.

Calendar

  • BitPim fully supports all calendar features of this phone.

  • For recurrent events, phone events have End Date and Repeat Until fields; when BitPim retrieves calendar data from the phone, it combines these 2 fields into the End Date field.

Ringtones

  • BitPim can not make use of ringtone files stored on the microSD card at this time.

Sounds, Wallpaper, and Video

  • BitPim can retrieve and save Sounds, Wallpaper, and Video media files from/to the phone memory and microSD card.

Music

  • BitPim can save music files to the phone memory or microSD card, though it would be very slow to transfer large files.

#include "pageend.h" bitpim-1.0.7+dfsg1/help/phones-lgvx4500-howtos.htd0000644001616600161660000000007610360163373017711 0ustar amuamu#include "pagestart.h" Your text here #include "pageend.h" bitpim-1.0.7+dfsg1/help/trouble-linux-issues.htd0000644001616600161660000000723310547575030017735 0ustar amuamu#include "pagestart.h"

Linux issues

The Linux binary package for BitPim is built as an RPM package using RedHat 9 and has been tested on several other RedHat based distributions. While the BitPim Linux binary should be work on most modern Linux distributions, in many cases there will be issues that must be resolved by the user.

For distributions that don't use the RedHat Package Manger (RPM), the program URL(http://www.kitenet.net/programs/alien/,alien) can be used to convert the package to other formats such as the Debian package format.

Missing libraries

Some modern distributions will use later versions of shared than what were used to build BitPim. Some distributions will include older versions of standard libraries for compatibility, but in some cases the compatibility libraries, while available, are not installed by default. If BitPim fails to start because of a missing shared library, the last line of the error messages will indicate the library that must be installed.

As an example, the following shows how to get BitPim to work on a freshly installed Ubuntu Linux 5.10, a Debian based distribution. After converting the BitPim RPM package to ".deb" format with alien, the package is installed as a Debian package is. When BitPim is run, the last line of errors is:

ImportError: libstdc++.so.5: cannot open shared object file: No such file or directory

Ubuntu 5.1 uses libstdc++.so.6. The old library can co-exist with the .6 library. On a networked system the compatibility library can be installed with:

apt-get install libstdc++5

At this point, running BitPim will give the error:

ImportError: libtiff.so.3: cannot open shared object file: No such file or directory

Ubuntu 5.1 uses libtiff.so.4. In this case there is no compatibility library for the .3 version. However, forcing the system to use the newer shared library seems to work. (This may or may not work with other libraries that may be missing on other distributions.) To force the newer tiff library to be used, do the following:

cd /usr/lib
ln -s libtiff.so.4 libtiff.so.3

Fedora Core 5 also is missing libstdc++.so.5 by default. This library can be installed with:

yum install compat-libstdc++-33

USB Device Permissions

When a user logs into an X window session on the console of a Linux machine, the system changes the ownership of many devices to the user logging in. The ACM and USB devices used by phones may or may not be configured with the right ownership or permissions to be accessible by the user. The URL(howto-linuxusb.htm,Linux USB Howto) gives more information on how to configure the system to properly set these device permissions.

zipimport.ZipImportError

On some Linux systems (Fedora Core 5 for example) BitPim will install and run fine, but after a day or so, the following error will appear when bitpim is run:

zipimport.ZipImportError: not a Zip file: '/usr/lib/BitPim-X.Y.ZZ/bitpim'
Fatal Python error: cannot get zipimporter instance
Aborted

This happens because of the periodic prelink task. This task modifies binaries so that that load quicker, but has the effect of destroying the BitPim binary. The solution is to prevent prelink from modifying the BitPim binary and then to reinstall BitPim. The can be done either by disabling prelink (remove the prelink package or disable the cron job) or by configuring prelink to ignore BitPim. The latter can be done by adding this line to the prelink configuration file, which will usually be /etc/prelink.conf.

-b *bitpim*
#include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-lgvx8600-notes.htd0000644001616600161660000000220510577601275017344 0ustar amuamu#include "pagestart.h"

Phonebook

  • BitPim supports all phonebook features of this phone.

Calendar

  • BitPim now fully supports all calendar features of this phone.

  • For recurrent events, phone events have End Date and Repeat Until fields; when BitPim retrieves calendar data from the phone, it combines these 2 fields into the End Date field.

Ringtones

  • BitPim can make use of ringtone files stored on the microSD card, see section Howtos for more details.

Sounds, Wallpaper, and Video

  • BitPim can retrieve and save Sounds, Wallpaper, and Video media files from/to the phone memory and microSD card.

Music

  • BitPim can save music files to the phone memory or microSD card, though it would be very slow to transfer large files.

Known Issues

  • Reading T9 User data from the phone into BitPim may not always succeed. However, writing T9 User data from BitPim to the phone should always work.

#include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-motov325-howtos.htd0000644001616600161660000000326110735610475017640 0ustar amuamu#include "pagestart.h"

Create your own wallpapers

Since the stock V325 does not support transferring wallpaper files directly to the phone, the work-around is to install placeholder pictures, retrieve them from the phone, replace their contents with your pictures, and sending them back to the phone. To create your own wallpaper, do the following steps:
  1. Install one or more placeholder pictures. Again, there are many ways to do this. One quick way is to take random pictures using the phone camera and optionally rename them as appropriate.

  2. In BitPim, Menu -> Data -> Get Phone Data ...

  3. From the Get Data from Phone dialog, check on Wallpaper and click on OK. BitPim then retrieves the pictures from the phone.

  4. Select a placeholder picture, invoke the context menu and select Replace.

  5. From the File Selection dialog, select your custom picture file.

  6. Depending on the format of your picture file, an Image Preview dialog may appear and allow you to convert, cut, and trim your picture into an JPEG clip. Click OK when you're satisfied with your clip. (To bypass this step, select Overwrite from the context menu instead).

  7. The content of the placeholder picture will then be replaced with your new clip.

  8. Repeat step 6 through 8 for other placeholder pictures.

  9. When you're ready to send your custom pictures to the phone, click on Menu -> Data -> Send Phone Data ....

  10. From the Send Data to Phone dialog, select Wallpaper and click OK. BitPim then sends the newly "replaced" pictures to the phone.

#include "pageend.h"bitpim-1.0.7+dfsg1/help/phone-lgvx8000.htd0000644001616600161660000000102110360163373016173 0ustar amuamu#include "pagestart.h"

What works

Phonebook, wallpaper (including camera), ringers, calendar, memo, SMS, call history, filesystem. (Note: Videos are currently ignored.)

FAQs and support

If you know of a good support group, please let us know so we can add details here.

Contents

BEGIN_TOC TOC_0 TOCITEM_0(Cables,phone-lgvx8000-cables.htm) TOCITEM_0(Notes,phone-lgvx8000-notes.htm) ENDTOC_0 END_TOC #include "pageend.h" bitpim-1.0.7+dfsg1/help/trouble-serial.htd0000644001616600161660000001303410547564173016546 0ustar amuamu#include "pagestart.h"

BitPim needs to speak to your phone using the correct serial port. Your phone needs to respond on that port. Some phones have different modes that switch between talking as USB versus serial.

Unfortunately every machine is different in what port names are used, especially if you have a USB to serial cable or adapter. There can also be many reasons why things don't work. It is almost impossible for the BitPim code to work out what the problem is, since it is getting no response at all. It is not possible to tell the difference between the device not being connected at all, versus it being connected and not wanting to talk.

Also be aware that Windows, Linux and Mac name and number their ports differently. They also have differing permissions defaults.

Follow these steps to try and diagnose your issue:

  • If you are using a USB to serial cable, then you MUST use device drivers. BitPim does not speak the USB to serial protocols. This applies to ALL platforms. The drivers are specific to your operating system, the USB to serial chip and product/vendor id used by the chip.

  • If your phone uses the USB modem protocol which is normal for most phones (eg all Audiovox and Sanyo) then you MUST use device drivers on Windows. On Linux the acm kernel module should auto-bind to the phone. The Mac also uses a builtin default USB modem driver.

  • Read the section about your phone cables and drivers for any specific information. If you have a cable not listed in the phone specific section then contact whoever sold you the cable for support. Just because your cable looks like one of them, does not mean it is one. This is especially true for the "boxes" in the middle of cables. Other manufacturers may or may not have them for both straight USB or USB to serial connections.

  • You should verify from the comm port settings dialog that the relevant port is available and the correct drivers are in use. If the port you want to use is listed, but is not in the available section then BitPim cannot use it. Here are some of the usual causes:

    • Windows: The usual cause is some other program has grabbed the port such as Palm HotSync or Microsoft ActiveSync. You will need to disable or reconfigure that software.

    • All operating systems: Check permissions on the device. Note that the device may be restricted to the administrator, or it may be owned by the person logged in at the time it was connected.

    • Windows XP: Windows XP will occasionally refuse to open a device claiming it doesn't exist even though the Device Manager and BitPim show that it does. This can sometimes be cured by choosing Advanced in the Port Settings for the device in Device Manager and setting it to use a different COM port.

  • The dialog lists all known and configured ports. The ones marked with an asterisk (*) are the ones that BitPim uses when you select autodetection. Only ports in the available section are marked since they are the only ones that can be used. If you select a port that is not marked, it is extremely unlikely that port is your phone. (The only exception is if you are using a real serial cable to connect to the phone, not a USB to serial cable).

  • If the port is not listed at all, then the diagnosis is as follows:

    • Linux: On Linux you need to ensure that permissions on the device files are set so that your user can read and write to them, and that there a device driver bound. Just because the device node exists does not mean there is a device driver attached. There is some Linux information if you are using a USB cable.

    • Windows: (Note exception above) BitPim should be showing the same ports as device manager. Try unplugging all USB hubs and cables, wait till the sound effects stop, and then plug it all back in. This is often needed if you have hibernated your machine. Note that Windows is also sensitive to which ports devices are plugged into. For example if you plug a cable into one port, it may be assigned the name "COM3". If you then plug it into a different port, it becomes "COM5". Windows does this because you could have two cables at the same time, and they would need to be distinguished. Try and always use the same port.

      If you are using a hub, try to avoid changing what port it is plugged into.

    • Mac: Feel free to contribute some text!

  • Once you are using the correct port, you should check that the phone is responding. If you look in the log view you will see what errors are happening. The protocol log view gives even more details.

  • If your phone is not sending back any data at all you may need to configure something on the phone. BitPim will indicate if it is getting any data back in the protocol log. Read the section about your phone cables for any specific information.

  • If you are still reading, you are likely to be very frustrated. As stated at the top, each machine is different and the names and numbers assigned depend on how you have used the machine in the past, the drivers installed etc. It is extremely difficult for anyone to diagnose the cause on your exact setup.

  • At this point, you are out of luck. You will receive no support from the BitPim groups. Read more.

#include "pageend.h" bitpim-1.0.7+dfsg1/help/phones-developer.htd0000644001616600161660000001036711045676543017101 0ustar amuamu#include "pagestart.h"

These phones are the best supported by BitPim as the developers have them. We appreciate phone loans.

Phones that are listed here, but not in the list of supported phones are still being worked on. URL(http://bitpim.org/papers/phonespecs/,How to get phonespecs)

TABLE_GRID Manufacturer Model Notes Audiovox CDM8900 Kindly loaned by URL(misc-rpiwireless.htm,RPI Wireless). Unfortunately the internal software on this phone proved to be too fragile and the phone is not supported by BitPim. The phone is also bricked after having been replaced 3 times in prior brickings! Audiovox CDM8920 Kindly loaned by URL(misc-rpiwireless.htm,RPI Wireless). Kyocera 2235 Kindly loaned by URL(misc-rpiwireless.htm,RPI Wireless). LG G4015 Kindly donated by Rodney Myers. LG LX-570 Kindly loaned by Matt Matolesi LG VX-4400 Personal phone. LG VX-4500 Kindly loaned by URL(misc-rpiwireless.htm,RPI Wireless). LG VX-4650 Personal phone. LG VX-6000 Kindly loaned by URL(misc-rpiwireless.htm,RPI Wireless). LG VX-7000 Kindly loaned by URL(misc-rpiwireless.htm,RPI Wireless). LG VX-8000 Kindly loaned by URL(misc-rpiwireless.htm,RPI Wireless). LG VX-8610 Kindly loaned by Rachel Boyle LG VX-9100 Kindly loaned by Rachel Boyle Motorola K1m Kindly donated by David Lewanda. Motorola V60c Kindly donated by Rob Ross. Motorola V60s Kindly loaned by URL(misc-rpiwireless.htm,RPI Wireless). Motorola V3m Kindly donated by Brian Camper. Motorola V60t Kindly donated by Andy Hall. Motorola V325 Kindly donated by Alan Shields Motorola T720 Kindly loaned by URL(http://www.Ringarama.com/,Ringarama). Nokia PM-3205 Personal phone. Samsung SCH-8500 Kindly loaned by John Sabato. Samsung SCH-A310 Personal phone. Samsung SCH-A670 Personal phone. Samsung SCH-A950 Kindly loaned by URL(misc-rpiwireless.htm,RPI Wireless). Samsung SCH-U740 Kindly loaned by Adam Milnor. Samsung SGH-P107 Kindly loaned by URL(misc-rpiwireless.htm,RPI Wireless) and personal phone. Samsung SPH-A460 Kindly loaned by URL(http://www.rapidigm.com/,Rapidigm). Samsung SPH-A500 Kindly loaned by Jim Asta. Samsung SPH-A620 (VGA1000) Kindly loaned by URL(misc-rpiwireless.htm,RPI Wireless) and personal phone. Samsung SPH-A740 Kindly loaned by Christopher R. White Samsung SPH-N200 Kindly loaned by URL(http://www.craytonelectronics.com/,Crayton Electronics). Samsung SPH-N240 Kindly loaned by URL(http://www.rapidigm.com/,Rapidigm). Samsung SPH-N400 Kindly loaned by URL(http://www.craytonelectronics.com/,Crayton Electronics). Sanyo SCP-3100 Kindly loaned by URL(http://www.rpiwireless.com/,RPI Wireless) Sanyo SCP-4900 Kindly loaned by URL(http://www.rapidigm.com/,Rapidigm). Sanyo SCP-5400 Kindly loaned by URL(misc-rpiwireless.htm,RPI Wireless). Sanyo SCP-5500 (VM4500) Kindly loaned by URL(misc-rpiwireless.htm,RPI Wireless). Sanyo SCP-8100 Phones kindly loaned by URL(misc-rpiwireless.htm,RPI Wireless) and URL(http://www.rapidigm.com/,Rapidigm). Sanyo PM-8200 Personal phone. Sanyo MM-8300 Kindly loaned by the folks at URL(http://www.ringerpost.com/,Ringerpost.com). Toshiba VM4050 Kindly loaned by the folks at URL(http://www.3gcables.com/,3gcables.com). Palm Treo 650 Kindly loaned by URL(misc-rpiwireless.htm,RPI Wireless). #include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-motov325m.htd0000644001616600161660000000064110737572253016476 0ustar amuamu#include "pagestart.h"

What works

  • Phonebook, calendar, wallpapers, ringtones, SMS support, phone info, and phone detection.

Cables

  • This phone was tested with a standard mini USB cable.

Contents

BEGIN_TOC TOC_0 TOCITEM_0(Notes,phone-motov325m-notes.htm) ENDTOC_0 END_TOC #include "pageend.h"bitpim-1.0.7+dfsg1/help/phone-motov710-cables.htd0000644001616600161660000000020110547564173017537 0ustar amuamu#include "pagestart.h"

This phone was successfully tested with a Motorola OEM straight USB data cable. #include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-lgpm225.htd0000644001616600161660000000620010547564173016111 0ustar amuamu#include "pagestart.h" BEGIN_TOC TOC_0 TOCITEM_0(Notes,phone-lgpm225-notes.htm) ENDTOC_0 END_TOC

What works

  • Phonebook

  • Wallpaper

  • Ringers (including reading voice memos)

  • Filesystem

  • Call History

  • SMS (Messages)

  • Memo (Notepad)

  • Calendar (Scheduler)

Phonebook

Phonebook support  includes the ability to retrieve contact data and upload contact data. Speed dial, image icons and ring tone assignments can be assigned to individual contacts.

Wallpaper

Images can be retrieved and sent to the "Saved to Phone" section. The PM-225 automatically down converts these images to a resolution of 160x120 when saved to that section from the phone menu. Conversely, images sent to the phone can be resized with the BitPim image interface. Access to higher resolution pictures are available from the file system view. (Dcam/review) Simply select the image and choose save. It is not recommended to delete images with the file system view.

 Ringers

Ring tones can be stored in Mp3 MIDI, or Qualcomm's QCP format. While QCP tends to use less less space this comes at loss in quality when pertaining to audio files that do not predominantly feature voices. The mp3 format can provide superior quality, but when playing from the phone it will not repeat. It is recommended that the length be around 30 seconds if you wish to exploit the full length of playtime before the call is directed to voice mail.

To obtain the tools necessary for QCP audio files please visit:

http://www.cdmatech.com/products/purevoice_download.jsp

Note: To bypass the built in audio converter simply hold ctrl+shift when selecting "Add" on the ringers section.

Filesystem

File system view is fully supported, please be careful when making changes at this level!

Call History

Call history retrieval is fully supported. Incoming, outgoing, and missed histories should display properly. Deleting call history from BitPim is not supported at this time.

SMS

The SMS feature in BitPim does not support pictures or sounds in messages. If a message contains one of these it will be silently ignored and only the text part of the message will be shown.

Memo

BitPim refers to the notepad section of the PM225 as Memo. These can be added or removed using BitPim. Notepad can be accessed via "Menu -> Tools -> Notepad" from the PM225. Memos simply contain a subject and some text. The subject will identify the memo in the phone.

Calendar

Calendar entries are fully editable with BitPim. To access your calendar entries simply access your scheduler from "Menu -> Tools -> Scheduler" and review or edit entries.

 

BitPim can autodetect this phone if it is connected to the PC via a USB cable.

FAQs and support

Contents

#include "pageend.h"bitpim-1.0.7+dfsg1/help/screen-isnotavalidzip.png0000644001616600161660000001526107727002770020137 0ustar amuamu‰PNG  IHDR–YÓk pHYs  šœgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF'IDATxÚìÁ0 ßlÑ×ìV0ðÚþ8H2+€X@ {{ûÑУ`Œ‚Q0 F^ÐØØ¦ˆ&pðàÁÑP£`Œ‚Q0 FA@,ȇ¨²ŒH F,rŒhê°¨%`#©f «%ÑŒ„ÌÀçfbÝn±aG¬;ðúÈedÃÑ8ÃÑ8C Â%þFl°ùgÓhpŒ‚Q0 FÁ(£€@,£A0 FÁ(£``ï«õ©jhDãÿÿÿT7S åÍÜ 3ÐhãaŒ‚Q0 FÁ(À¨µ&ðÀ45“fÃ@N[Œ‚Q0 FÁ(£€$@£‡Q0 FÁ(£`htÚbŒ‚Q0 FÁ(@:t‰X€o*ž €p6þÿ¯Ç«‘‘¥ ¢îO-„ÏÚL±cþ}«‚³™¸Ûþ}­„°yÚ!ò_* |ÞŽ!ŸXþ<͇D€ÌDš˜ÿû^6˜fUž:š3GÁ(£`´‚³ñO œFÆF¬{cÿÿ­CkD4c áÀÄÕ·Ô€€Y?Ü‹ôÄaë·Q0 FÁ(¤b*nRF(ð™l¹fIk` Fæ¦Ñ˜£`Œ‚Q0 †`ãÖ`@n8:@D¯yÀÕp@Ÿ¶øÿ»«~FöVœfÿûŽ˜®@0qA§)Ц-°êýTÙ"âïÄë—¿ïK1Ę…{ roK0åD{Qõ¿*Âj.³D?DþE!„/Ù—ûó¬àR |´i‹?Oò1#GnDîQ.¦œÂdþŸû9£¹cŒ‚Q0 FÞ5 @D<üÿGÞˆ#[ °ÑÐ1ãg5nGp¶!Ø\mD›ÿï3t _'C ÿ>–m³P7°áÐÒp`ébH£áïëb¤†„Í,ÖÇÀ,ÞG“f‘ƆCDL~2ƒÅäb4X§€ñ(£`Œ‚Q@h‚܆Ͷj‚ƒ€›Aå¬Ñ@ `U]$9 FÁ(£ ¯q wÍ@œ¶øÿ¯ž¬Qz‚ŸÊ©jÞß7%ƒÎ掦úQ0 FÁ(Ti8 Oa:@,D5˜šõ®Ð”ġȢä;4e7cø6]ê½Ñ­£`Œ‚Q0 Ho8PÚ€ ‚ç<025’UIýÿU3 S°õLü]Ô…€®w@_4 —YDxÔºX’Ú£, Ø×7ÀÎx£`Œ‚Q@}@¨’¥Æ–Jz¹¹A  ¢§-Ðì(B ¸zÐn *w”A‡EM¢O[@N’nhÇhÑ$ú´rÃY¬¼h׎ °‰~ðŽ‹¿Ï )q›^4‰>mÙmñ#h‘$hÑä莋Q0 FÁ(x`ooOòåT´npàkð³h €H>$ŠIÒˆÀ~H|ÔM®†–]è‡D1ñt`ÅÄ×ä" ‚Ý8Õ‚·lâó7d§²}ØF`Û4q˜~HxË&Ž©¹É8îi—è Uâ‚}Œ‚Q0 F‰TуôÉŒ €Fï¶£`Œ‚Q0 HÔºöz¨€m<Œ‚Q0 FÁ(x-Fh9Ú@‘ €¢z㑵eÄ •ƒÏzÝý0 FÁ(àLb3éa62 Ñ‘‡Q0 FÁ(£h¹0ê^, €˜F“Æ(£`Œ‚Q0 H„2òpà€ÃhˆŒ‚Q0 FÁÿ‰£€r@£#£`Œ‚Q0 FÁ( ÐhãaŒ‚Q0 FÁ($€m<Œ‚Q0 FÁ(£€$@£‡Q0 FÁ(£`h´ñ0 FÁ(£`Œ’@6FÁ(£`Œ‚Q@ ÑÆÃ(£`Œ‚Q0 H4Úx£`Œ‚Q0 FI €F£`Œ‚Q0 FÁ( ÐhãaŒ‚Q0 FÁ($€m<Œ‚Q0 FÁ(£€$@£‡Q0 FÁ(£`h´ñ0 FÁ(£`Œ’@6FÁ(£`Œ‚Q@ ÑÆÃ(£`Œ‚Q0 H4Úx£`Œ‚Q0 FI €F£`Œ‚Q0 FÁ( ÐhãaŒ‚Q0 FÁ($€m<Œ‚Q0 FÁ(£€$@£‡Q0 FÁ(£`hÐ5ìí=€8l4fFÁ(£`Œ‚A hP5ììä_ þl@80äæÎ¡Q0 FÁ(£`€4Pcáë—ÿ ?üò~‚ÅæÌÙÁàí»y4–FÁ(£`Œ‚AhÐ4¾~a`øþ•™ÈÓ‹™™½dps»Ãàå³u4¦FÁ(£`Œ‚AhP4l¬¾Œÿ˜Y$ÂÀðŸ,WZtŒáï†èè5£±5 FÁ(£` @ƒ¢ñðóÃï_ ì,ÀÆ#Pä$!Âð(niõšÁÙé>Ãǯ,£±5 FÁ(£` @ƒ¢ñðå3 3°ñj=€×;Übv°”aøþ™!>aÛhŒ‚Q0 FÁ( hÀ¦º ÿþ00pÛ lÜ\@‘@üÔ¤``dc`øÊÀààò‚ÁÍñ!Ãë·Œ£16 FÁ(£` 0 m<Ø™80|6@3|¼ aV†ÿ?~1Ù rÖ; æe``JQvúI†_¿—ÆÚ(£`Œ‚Q0€ €´ñðýß Ül@7Êåÿ˜8ÿ1Øzüc`düÇðä1Pœ]ˆáïGoŸÇ 6Þ¼çµQ0 FÁ(£`@ hã¶Ö› 2êõHs0p1iM†Êln ÍÍÞ½ùŸ¡(ãÃç/l ñ)«FcnŒ‚Q0 FÁ( @Öx0Ss`øû‹ Ô0à5@k~ƒ |  íšB _ÞƒN›üÎÀÀ#ÆÀð‰Á×ûƒ£õC†—Ïy<àP0.5„ôáÓ? (#bãZq@브i…P8D G8ÑÒd³*ÎGZ¹DJ˜“6äª é Ûÿøõ3d­dÔ´@R€‹•áÃ7N†¿ ÀV3ƒ¬$há$híƒ"ã+ kSbÎ2:®À’:ŸaÎìÄKd († `SGŠþ¡’«p¹7#«Ef§8¤%È<0Pi“X{q¥­ÁG#¥Ì ¶;H1o¨”'4 #æÊ ¿~20pÛ ¬|Ü ÿA… ^.làN)&6 Ë ».€ò<¢ €íˆ¨ð[ :Z/^¾THŒ’–!¥úGÁ( ŠÑ<0 FÁÐ4 #Ÿ?100›-ì\@ëYY>}``à6 B¿2,ÛôARRŽí9ƒÝ{ÈlhôC’…é5xíCAÊq†Äü †´ÌÙ ³¦§ºÞ¬+ Ém=¢¤ØF;ðÙ¯'Ó‹,NŠĘ…n/1­prìæ—œ0'%|Ñå‘ÝF(¬q¹[¼¡ÛK6»‰õ!»ñÅ9î¥U ”®ã‚ذB×GŒß°©E·_âJ[Ć ¡‘QBaŠË^bš”4O¨Ì %ÒK¿'øÒ¡tBj˜ÐÝfò ï€mNv`ã“r´ä¿à]™2’À–ÃWIy-†/Ÿ1Èèý¶4€B¾?ø„Þ¾eˆò½Î0yÞS†‡OfôC^ÄäN`ËLø9¡LE¨Ñ„O)~Æç>B•¾.©n!ä?bâŒ{‰ 3rÒ©vãRÝK‹<@Lº"&î(ñ.µÄ6¢ˆM[ä¦OrË rÀX»ñ…¥ÓÄ”šCjÙBŒ:JÓ µÂ„@to<€vX€æJØ@ç7°3¾‚f,@KôuÔÅ™$¥5~ ,€¬Ÿüá¿~``à`øýò-› Crø9†¼&7†Ðˆ- «WøŒŽ!‘ÐhAWGI‚£FW¥N©IÍä´Èx´p/µ¬äLP3 Ñ2¬©Q Ò;P+,*]Ób½1é߈¹éœ\÷JwÃam@ѵñ`)çÀðú d¦‚“‡áï_ðÉO ƒ#Ak#Å u1L_zˆaÕÄ'u” % ‰ÏßÀ.†Ÿo~0dE]bèŸgÎðåÛ ¯Ð‡òbHZd6b{mÔ²ŸØ‚”= ô0£Gš¢¦ß)q/%#HôJ;ø*¨ÁGä裧¿hU.Ы|¡çÂßD×ÆÃ—/ ÌÀ†'°¾gæä``øñ2êÀm ±‰ù†{Þ1¨È~€ˆýƒâ_Àê…ß?e`šQ”t‚!¿É!0p3Ãúõ¾ƒ¢¢n«í©åjiÓ#ž:.2̆ʪw|a4P;èoäšK }ƒµ¬CnÌ Çòx0åQ€¢Ûn +†ŸÀ¶+ÐF.Ш¨ñý'ddát„á3PÁ{v†‡ r2@ÁoPñP5ï? œ l #) ‘XŸË jŠïX8þXZ™‰ZsÄ´n’ÛâŠ#&ôô¶uƒ)¬¨½ïÜ<@ξwJ‡«IÑ;ùÛ"Kb‡Ø{/w0RÖ2 —ò  º<€ÏuøÏÀÀÎ l7ðpÀ–ÄŸÿIFøº#ï b?„EÿA.Ø„M[€À7 À¯ ââ ¿o?fàa`H 9ÏPÖë̲a횀k@êá[ñ‹­IÈ|òèóä&*Bn ¶@ì'.ûHYhFL…KŽØðÅå?R„ÜK(ÌðÙIjÚ!&ìÈ |î¥E 4ÇŒ-¾ˆñ+)~#vº‰œ|çÕQ0 FÁ(£€† €h:mÞ :Dòèî«¿ ¬ÌÿþƒZLH#L¶Pí¦ù/Z&(2|ùñ™áëS;ëà ¿ž ÿ 3Põ #ȤO_ÀgGýÚÁ¤M4ž2¬;¨Ì”¼aÞÜ€ÑØ£`Œ‚Q0 hˆ¦N`Eÿædàç/`enüÇ>TËÂÊÀPžxؘ¸ÏðõÃã'À†¨á€Eßè`3Ð< u’@;Ž\”càæøÇð÷ÿ÷ј£`Œ‚Q0 hˆ¦‡sÿ0¨ñ80|Öåo?210ZLÿkà-ȨhöâÕð4ŨšÿŒH£HjA¤žƒ4²ÁÄ0iµ ÞÓJ ‚|߀ æÑ˜£`Œ‚Q0 hˆæ»-n±`(ªžËðû;+ Ë?p…`•`Ä«š…é/ï?, ÷Ÿ 2ðq¯­øýŸi4fGÁ(£`Œ€¢ËñÔ}=É ž»x8¾¡6`[5ÿ£µùÿ‘ÔbNÉôA˜ÿxdã3Ã’Y!£1; FÁ(£`ÐÝî¶Ø¾Þm4´GÁ(£`Œ‚aht|Œ‚Q0 FÁ($€m<Œ‚Q0 FÁ(£€$@£‡Q0 FÁ(£`h´ñ0 FÁ(£`Œ’@6FÁ(£`Œ‚Q@ ÑÆÃ(£`Œ‚Q0 H4Úx£`Œ‚Q0 FI €F£`Œ‚Q0 FÁ( ÐhãaŒ‚Q0 FÁ($€m<Œ‚Q0 FÁ(£€$@£‡Q0 FÁ(£`h´ñ0 FÁ(£`Œ’@6FÁ(£`Œ‚Q@ ÑÆÃ(£`Œ‚Q0 H4Úx£`Œ‚Q0 FI €F£`Œ‚Q0 FÁ( ÐhãaŒ‚Q0 FÁ($€m<Œ‚Q0 FÁ(£€$@£‡Q0 FÁ(£`h´ñ0 FÁ(£`Œ’@6FÁ(£`Œ‚Q@ ÑÆÃ(£`Œ‚Q0 H4Úx£`Œ‚Q0 FI €F£`Œ‚Q0 FÁ( ÐhãaŒ‚Q0 FÁ($€m<Œ‚Q0 FÁ(£€$@£‡Q0 FÁ(£`h´ñ0 FÁ(£`Œ’@6FÁ(£`Œ‚Q@ –Ñ C888ŒÀHRooo?h4ŒŒŒ$ÇÅ(h´ñ0 † øÿÿÿh P¹²"This shows the contents of a file. The left hand column is the offset into a file (in hexadecimal). The 16 bytes are then shown in hex, and finally the bytes as ASCII characters on the right. Non printable characters are replaced with a period.

If you would like to edit the contents of a file, or invoke it in another program, you should right click on the file name and save it. #include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-lgvx8700.htd0000644001616600161660000000130410626454230016206 0ustar amuamu#include "pagestart.h"

What works

Phonebook, wallpaper, ringers, calendar, memo, call history, SMS, and file system. BitPim can autodetect this phone if it is connected to the PC via a straight USB cable.

We have successfully connected to this phone using the Verizon Music Essentials Kit sold for the VX8500 and VX8600 phones. The cable that comes with this kit has a "brick" in the middle. BitPim can autodetect this phone using this cable. The drivers included with this kit work fine for the VX8700. We did not try the Verison music software.

Due to their similarities, please see the LG VX8600 Help for more details. #include "pageend.h" bitpim-1.0.7+dfsg1/help/howto-windowsusb.htd0000644001616600161660000000310410547564173017154 0ustar amuamu#include "pagestart.h"

USB drivers

Windows requires a device driver be present for any device in order to access it. It has some generic drivers, typically for storage devices such as CompactFlash readers and external hard drivers. For communication devices, the vendor must supply a device driver.

Clearing out stale USB information

For Power Users who have too many COM devices, you can remove all knowledge of existing ones by following these steps. Note that you could seriously mess your machine up (ie it won't boot) if you are not careful.

  • Device Manager - Uninstall USB Root Hubs

  • Regedit HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Enum\\USB

  • Clear out all corresponding keys (eg Vid_1004 is LG)

  • Need to right click then permissions then everyone full control first otherwise get permission denied error

  • Find classes. Click on key, right hand pane should give class. Numbered instances below that. Click on each one.

  • HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E978-E325-11CE-BFC1-08002BE10318} is ports

  • HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E96D-E325-11CE-BFC1-08002BE10318} is modems

  • HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Ports

  • HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\COM Name Arbiter COMdb key is a bitmask of which com ports are in use (8 ports per byte). Set to 3 to reserve com1 and com2

#include "pageend.h" bitpim-1.0.7+dfsg1/help/tab-todo.htd0000644001616600161660000000314210547564173015325 0ustar amuamu#include "pagestart.h" SCREENSHOT(screen-todotab.png,)

This page allows users to retrieve, maintain, and send to-do task items from/to the phone. The list of task items is displayed on the left listbox, with the detailed information of the selected item displayed in the right fields. #define DESC(title,desc) \

title: desc

Fields

The labels of these fields are color coded to indicate their applicability to the current phone:

  • Blue: Applicable to this phone.

  • Red: Not applicable to this phone.

  • Black: Unknown applicability.

DESC(Summary,The summary/title of the current task item.) DESC(Status,The current status of the selected item.) DESC(Due Date,The due date of the selected item.) DESC(% Complete,The completion percentage of the selected item.) DESC(Completion Date,The date of completion of the selected item.) DESC(Private,Turn on the private/secret flag of this memo when checked.) DESC(Priority,The priority of the selected item.) DESC(Category,The categories assigned/associated with this item.) DESC(Memo,Textual notes on this item.)

Buttons

DESC(Add,Add a new task item to the list.) DESC(Delete,Delete the selected item from the list.) DESC(Set Date,Bring up a calendar dialog allowing users to set date.) DESC(Save,Save the changes made to this item.) DESC(Help,Bring up this help page.) DESC(Revert,Dicard all changes made to this item.) #include "pageend.h" bitpim-1.0.7+dfsg1/help/parent.png0000644001616600161660000000235307723032460015104 0ustar amuamu‰PNG  IHDR22i8¸' pHYs.#.#x¥?vgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFaIDATxÚbüÿÿ?.@,0†p—:ˆ©d|[v,@L x@!KþG£Y’f ¼Æ#>×NI€bAò€¼@讄k œŽ ,N€Â© €pº €ðú dû‘½Ä Ä¿€ø4›Á¼„Ím

K¢ 0¢a˜º¸,.ƒˆ%ËHLyçpI@ÑÅ€¢K±@t± €è\DKˆÔR䨳¸J\¥0@‘ꓽ@lmõ ˆ‰D_;@Ù‡I± €H±äÛˆ9ˆÕ@ÄZ2ÐMì±–±–Á"¦mDŒ%\@lŒ§¾'ˆKŽá‘ÓÆÑpDDÈ^h°à' Y@„,9E„OA¹VŸ€Âg‰ k¨v‰r @1á‹g@œ U„Ô¼Vâ%P¾"Kà2 €Õñ äx_ÜâX¨P1ãˆË €ÂgÉiJƒ?ОV@t)êˆ.–], ºX@t± €èb @Ñ¥I@tñ @ÑÅ'ôÄÄ0L@±ªOïb6 ^EŠ&\mQ\ €XhP O¬GŠý´² €h™´‚<Á­Ð¢ie@ÑÊ#¡@¼‹8¨ÍC ˆ‰ q<µ- j{$_› ,€¶©ˆš…ò"ÔÏâtjY@ÔòH4”I3€8‹ jx”DæR *çPꀢÔ#9Ð$B)˜ Ä%”@”x$êjn .'W3@‘[³q¹ï@|Z‚†ï› â-@ü ˆƒ £ð\Xôv@·T9©â ¾ Ä{€x7âO8š(0pÚD™Œeœ43è ÄÎ@Ü«"ÅQDŽG¡˜Z4²ŠÉ4lšñ4l<@ÃÆ#4l<@ÃÆ#4l<@´îê‚fç¿Aì-- a3@Ã&i×¢·Ž'YIEND®B`‚bitpim-1.0.7+dfsg1/help/phone-lgvx5300-notes.htd0000644001616600161660000000056410554054107017333 0ustar amuamu#include "pagestart.h"

  • Tested with both Bluetooth and direct USB connections.

  • Phone does not support memos and has no SD card.

  • MP3s go in the "ringers" folder, not the MP3 folder.

  • Some problems when downloading large collections of camera pictures, may need to download them one at a time rather than as a batch.

#include "pageend.h"bitpim-1.0.7+dfsg1/help/lgvx4650-cables.htd0000644001616600161660000000047210547562471016344 0ustar amuamu#include "pagestart.h"

This phone supports both a straight USB and USB-to-Serial cable.

Susteen Universal Cable (with an adapter for LG-VX4400 and one for LG-VX4650)

IMAGE(vx4650-cable-susteen.jpg,)

Generic (eBay) USB-to-Serial cable

IMAGE(vx4650-cable-generic.jpg,) #include "pageend.h" bitpim-1.0.7+dfsg1/help/screen-importpbmergecolours.jpg0000644001616600161660000001415210111556437021347 0ustar amuamuÿØÿàJFIFÿÛC     ÿÛC   ÿÀ_Û"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ýS¢Š(¿jjÚŸ€>!|<¶ð¶±{qâ ]iÞÔ4Û+‹Ènõˆ®`kiÚ(™,• µo>åã…Ãa€†B?ñ/¤ñ®£ñÆ–ÞñzÖ«ñÂçIÕë F×Išß@†þ[O¹5žè äWD#r°²JØ€*Uø‹ðÃVÒth:7†íôÿ‡ZgÄhn?°æðƳ£ÿd7†áÈG¶hÚêíID› %ÆùØf)}•E|keðÙ“à]üwv7øqüZ5=†—QèPÚý 1Éá“t×’Z}¤I6ÀþØÉuå˜TÊþâêÚ—ì+ã½ÓÂ÷~¥sá-vÓOÑ,­îL­ÊÛ}žÒBòÛ,ÈcxìI-l²%¾•Šú*ŠùÂzO‡õо¸ð-—Ä‹£a©Ü\ë2øò/½µµ‰Ó¯"@u‘å$æâ[T o‰ü¹%êšpyÿ‚> ³ÓuoƒQé¾Ô4/‰ºV?ácø‚_ Üiï¨ãHºŠïÏÕRß©=¬‡dÓy®«8Þ±™ì (âüñWƒ~ ø:ÃÀþÖ4k?õkmJæ7–ÖîMx[iK§Çus#“ÂÏv–ë+!©–ˆ@ïþxgÂP~ÒZ­ðçáÆ±àÏ Åá-jÖòå¼7s é¯z÷šK"-œÉYÌq±i¼•óUD’ý™–¨( Š( Š( Š( Š( Š( Š( Š( Š(  z(¢¾ô[⯎?áY|/ñ‡Œ~Åý¥ÿöy«}‹Íò¾Ñä@òù{ö¶ÝÛ1»iÆsƒÒµ&ñ^‰oö¿7X°‹ìwé×;îySy^L“òÉ'Ú Ú‡æo:<½så¿´-‡Ž|Yáø#GðÏöÎâß M£Xêv“Áö]ìéq Ó_ùÓ#`²Ú²ýž9¤ýÝÆPŸ(7-ãÏxåüQâ7Ið·ö®™âxoŬÿhA ¶Vo£Ç<[¼×¹S¦É&Í‚3dJeÞ0‹JïúÓþ -÷‚>7ÿÂeâý+CþÅûÛ¿á'ÿHûVýŸØú¼:wÝØ3çyÞoQ³nߟ;‡Sàо ø›ößøC¼a x³ì;>Õý‡©Á{ö}û¶yžS6ÝÛÆvœt5àð?Ç7vºµ¶Ÿaiuu£|G²·ŸU0\ÚG>«­Ãs§â"A$rDŒì¦7T«®NéðÇÀžñ·CñM¿‚<}áý*ßFÔtk³ãO®²áîd´ž)¢VÔ®öF¿`xäÙµËÜ[üŽ‹#ÃR…;6Ÿq]›üMø‡¯xׯš?„¼áGMðÎ¥•%îµâ›‹§•ìmo cÓ§BݪçÌ$•'ŠÕ_Ú'á冴ÍgÄ^+Ò<—ó]Ú%¯‰õ{–æÒcÜ4›dhfVš6t$¬ÊÊÇ–Ò¿gÛm{â7Å {Ä2ø›NM__·¹ÓŽ‹âíKM†{dÒtø †;¨×w é¹Ô9:®ÊÀø‹ðÛÅžø Úׂ ñu‡‡.<5¦hPiß“Ãñý›ìSÞ¸Y£ÕT"Fò5ˆ[Ÿà”8P#Ëå§+/Oë¯äž¹'ÄÛ+x³AÔž—¦øw@°×îu›»¥ŽŠâ[ô}û€¬k`\¹l!È]¹:¾ øáˆú\ºŸ„¼I¤x£MŠcm%æ‹ä)(UcxÙ€`®§ns†¸¯ž¤øâm Ã׺>¤ùÖ^ðN i¨Å,÷?ÙZ…ä×¶ö÷ °•¹û; †ä¥¾%’9àd-SðÀÚŸ†~(x«]o x»ÃÚ6µ£iöQ¯‹üDºÍÜSÙÏvîZC}tË«~žZ£ÚàºÆZ34ʳiÿZ 6{ÝQ\åQ@Q@Q@Q@Q@Q@Q@Q@òdÿžmùQäÉÿ<Ûò­Z+迲áüÌæö¯±•äÉÿ<Ûò£É“þy·å^iâO÷Ú'ÆsáýŽ™o­kðézž‰¥Äí×Ü\ê1\Ëq/Ì!´…mmË˰•2íQ,²Á ôÿÅÝ#áßön‘âKCZñ!²Ž{Èü+áGPÛœ¯œðZ¥ËÛE#¤¾X•Žï.@¬æ7 þˇó0ö¯±Õù2Ï6ü¨òdÿžmùW”üJý¦´‡q JÞïþÛ ŸøG>Ïg i—wްj—Ó[¥è¸·I’h"vŽ4@Yà ½šê-ü!ý¡ôoêú¡}o‰ ñ¹£¬Ö³­±6z…ÔQ[›†/µ›[t¸k3Í1–˜F"Áö\?™‡µ}KòdÿžmùQäÉÿ<Ûò¯4ñ'íá_‡ß5ÏxÛžð†›‡ô½WN—[Ô¢²šêYîu®dÕÒÜáFTÈrN姃iß x†êçZÓõ¯ é~&AÐî¼-º¬ºžt»;·X£µó^æTy®·TíŽ,ŽF£û.ÌÃھǫy2Ï6ü¨òdÿžmùW)ÿ ßÁŸðŠÿo}·Pò~Ûý›ý›ý{ý­ö­žoÙÿ³¼Ÿµù¾Oïöy[¼ŸßcÊùë”ðoí5 k°xïT¼»ó4]'ÄÑøI‹LÓ.î5§:]ܰ5š#Ü5ÌRMv$‰bÛ¿˜Šb‘ý—æaí_cÕ¼™?ç›~Ty2Ï6ü«Íö‡Ñ¼U¯ø&×Á—Öúµž£âÙ¼1­}¢Öxf±•4K½DñÂçFŠÝdWRP´±²¬ŠÁ5uŽÞ±¶µ×ŸÄ¶ñø`øWñ9Ó.dk›+-Ö[Øe^YQþгÅ$,QIsû.ÌÃÚ¾ÇmäÉÿ<Ûò£É“þy·å\¦ñïÀš¶…«ëºï™a¦y&F6s«Ü$ÌRÖ[XÊ»ŠáÁKy-ĉpà¬-#(ÿ…ïàÏøE·¾Û¨y?mþÍþÍþƽþÖûVÏ7ìÿÙÞOÚüß'÷û<­ÞOï±å|ôeÃù˜{WØêü™?ç›~Ty2Ï6ü«‰½ý£~iž°Öoµ«>Þ÷S:$6—š]ÜßÚg{„´k7ˆN“É{£‰£ /™Œ9š ý¯…¼S¥øÓBµÖ4{¯µØ\n ÍDèèÅ$ŠHÜŠTutxÜ+££+*²ì¸3jû äÉÿ<Ûò£É“þy·åZ´Qý—æaí_c+É“þy·åG“'üóoʵh£û.ÌÃÚ¾ÆW“'üóoÊ&Oùæß•jÑGö\?™‡µ}Œ¯&Oùæß•LŸóÍ¿*Õ¢ì¸3jû^LŸóÍ¿*<™?ç›~U«EÙpþfÕö2¼™?ç›~Ty2Ï6ü«VŠ?²áüÌ=«ìThûߥhûߥ{<˹ÍÍç—kÿ?á*ø§â_ß]}Š­FµÒ5 >MºŽ™g>¨ísd(¿& ©ƒ½dS kšWü žmÖžßØ?®|ñU¿Œ5hÍ£ßêQxæ?išeõä¶°ÝD|9ŒðÏ:Ã!ƒ¦c”0Ž5;|ÂÑûÚ#þ÷éGÚ#þ÷éG2îÑîxü)ß}«þ_'Ãÿð™ÿÂgÿ wü#¿ÚsÿgÈûìÿoû7™þ«ý'Ù~÷îvã÷ÕÏëžñWÃûMcâ_‹µ¿éš•ŸŽSÆÁ}«K¦é š z(´žúHœÆÈÒ9yDLÑÇû¸|â°ý9öˆÿ½úQöˆÿ½úQÌ»‡4{ŸøOá#~Ô0ø‚ûÄWz>µá;߈ϬÞÏáRê+KOo Ǧ´w²µÊ¤òýžYF²ýžä2G“ô‰ÿ<{ñJÖ¬o5þàøÅ²ÕnYášñµÓ­ÅÌQò6Sk2LbʱT’8ÐJa‡èo´GýïÒ´GýïÒŽeÜ9£Üò?|!Õ¼IâßëG£ß[ë^Ðôû;=Fkˆ‰¸°¾Ô.\™aÃÛ1Pù7Q’ WÍÆ%Wçôÿ„4ÿ xbüÜé÷ú÷†¼M.½¦xwTñ íõ¼PI¦ÜX5£ëÀ÷Rü×S݉dŠ–àÑd_|ûDÞý(ûDÞý(æ]Ú=ÏÐþ øªãÆ?‹µ–Ñì5)|s'‹5=2Æò[¨mb“FH`¡ŒÎÅ„3ÑÄI"ÞXi=Ⴏ¼áKý3P–Þk‰üA®jªÖÌÌ¢+ÍVêò%%”Â;„ 1€Á€$`žÇíÿ{ô£íÿ{ô£™wh÷$¢£ûDÞý(ûDÞý(æ]Ú=É(¨þÑ÷¿J>Ñ÷¿J9—pærJ*?´GýïÒ´GýïÒŽeÜ9£Ü’Šíÿ{ô£íÿ{ô£™wh÷$¢£ûDÞý(ûDÞý(æ]Ú=É(¨þÑ÷¿J>Ñ÷¿J9—pærQ\‡ âóü`ÔôoÚÒO‡÷ñçÂúŸ†´ùôûËûYåÕd0m]¼ë[¤ÞÌ>÷ïL7`hß´¤Íñ'ãMÕýµÃxÁºf›ýöo-šòaw©ÚßNK„ònmÝšwXQlÚré ´•Sã?†‰4öw¾»X¬—ˆû"³X£™‘ç¸-Cç «r„‰TŸ½Ðþ+xŸ[ºÖ|MðÿÄ÷z•äÚ\ÿdéš%¤&-'UMFÕQ$ñ ÅY™ïc‘‹0"X ªy.'µý½â/|bÿ„šËà‡Äë_YÞoÖô{ó£ÙE}¬Ø.Êå!šùRæ=— Íp “NÒÌO‹cEìrø‹®k:Ÿ|3à X¸ð»ë:f£¬\kÖ1C5Ü1YËe“ O‘+H÷Ñ“$‰ Št‹,\µ‡Æý'á¾â¡«xæßâuŸ‡u=;LžãE0^kÖ·—‚Óì÷¶VqªnŽfùLQ¬Ž›ãòZHwÏ•ãßøëĦ•â/ü!ñ¶ƒâý&‹K;ûã _Z=µÃDn šÜkQVkx2I«ÃÌPÉœ žø¯kzÖ¹âøÛTÕµY¼1+­—‡­--WGÕe¿XáŒëŽáfm&I$es#†(RÒBIu=Ÿ\ý£mtõ‹«xôŸÂ’øŸSŒéæ·Ùc»š;…7bIšy¢•ͪN¤>ØÚGE¿þÐ:ƒõáWм-ÿ#ˆ¬˜³ÑñoÔžjKp—ùvÓE3}žr²]ÒAóÇÄO„z¿Ž~!x‡Ä_ð î.SÄsC>£qâ_ ø_YÕmÙ-¡µ"Êê]hG ˆ­ãdI`VV‘Ø:·–ˆŸõüBñˆ¿áAÜ\§ˆæ†}Fãľ𾳪۲[CjE•ԺЎ[ÆÈ’Á:¬­#°uo,;!ÙCÞ~Ðú%޵I¢kþN¬ÙhZ–»öD}­ÕäV¯f»Ìåó^ö±;FÇtÂ(Ù$sþOþØÇü#ÿü"¿Û?ðÿÂ_‹?ìÿ·}³ì>O•öµÿÇïú6ï³íÝóçÊýíyf±aâÝ[þïø´Þ>‹ûÆZ/‹~ÿ‡‘ýŸý—þÿ!›ÌþËûümó¾ëlù¸½7ᯤüIÁðáìß_—ÄFúçÂþŸÄh’í¯F§&´ÈLå‹o1! Šë"¬áY ÈûjŠ(© (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š›ì¯ê´}•ýV­Q]>Î'_³‰Wì¯ê´}•ýV¼'Pø™®xoöÕ_ O?Ú,xÆßNñ­¥œþñÓi6qM”À-ίhy’É!aÎûÄä/kð÷㎱ðÿüH¾ Ñ|C­ëº¦­>gwöä•bšÙRÂWo1í.]•âƒb´X³,g³ˆ{8žíöWõZ>Êþ«^?k[{›;­zË„þ °øeñûU’î¸†ÊæéÙm²wÜŸ±®q )iPÇÏoZý¢|EðßUÔ­>!øßJ·°ð–³ã¾ðÞ¸58f·ÓÚÐIo– g3‘rI‰-²9y'³ˆ{8ž×öWõZ>Êþ«^)âÏÚÅ_ 4¯Iãoèöº–Ÿá-_Åšu¾âo¡»‹NX~Ñ ÒKe™®­ÂIABvìPþ¿ámGTÕô+[ÝcHþÁ¿Ÿs¶š×+pöèXùk#§ÉæìØ]Pº+–U’UQ#Î!ìâ\û+ú­eU«TQìâÎ%_²¿ªÑöWõZµEÎ!ìâUû+ú­eU«TQìâÎ%_²¿ªÑöWõZµEÎ!ìâUû+ú­eU«TQìâÎ%_²¿ªÑöWõZµEÎ!ìâUû+ú­eU«TQìâÎ'ÿÙbitpim-1.0.7+dfsg1/help/support.htd0000644001616600161660000001525410547575030015331 0ustar amuamu#include "pagestart.h"

We do not offer ANY support for versions of BitPim that were not downloaded by following the link on the BitPim home page at URL(http://www.bitpim.org,www.bitpim.org). You MUST go back to whomever you downloaded BitPim from.

Before posting anywhere, please take the time to read this article on URL(http://www.catb.org/~esr/faqs/smart-questions.html,How to ask questions the smart way) (Note they do NOT provide support, just guidelines on how to ask questions/get support and get the best responses). Then follow the steps described below:

Before making a support request, please gather up the following information where possible. The goal is to ensure you have the relevant information so that the issue can be addressed as quickly and thoroughly as possible.

If you cannot get BitPim to talk to your phone at all, you need to follow the steps in serial troubleshooting first.

If you still cannot get BitPim to talk to your phone then you are out of luck. This page details why.

Summary

Start with the following items. If you leave them out, we will have to ask and it will delay getting to a solution for you. BitPim supports multiple phones, operating systems and cables, and they all affect issues you may have.

  • Which version of BitPim you are using

  • What operating system you are using

  • Which cell phone you are talking to (make and model)

  • What cable you are using to talk to the phone

Make notes

You will need to gather information as described in the following points. The most important notes to start with are a description of what happened and a description of what you expected to happen.

If you got an exception dialog, please copy the contents.

This will show what happened at the point of the problem. The contents of the dialog are in the Log pane. Note that you must include the other contents of the log pane in addition to the exception. This is so we can tell what BitPim was doing leading up to the exception.

Get a copy of the contents of the Log pane.

This will show the history of actions BitPim was doing

What set of steps did you take

Work out the set of steps you did. This is to enable others to do the same set of steps in order to reproduce your problem.

Is it repeatable?

Does the problem happen every time. If it does, it is far easier to track down the cause and fix. Even if it isn't repeatable, there may be enough information from the previous steps to diagnose and fix it.

What have you tried?

In your attempts to fix the issue, what have you already tried, and what happened.?

Look on the web and in archives

Do a Google search incorporating lines of the error message, symptoms or what you have tried. You can also search the mailing list archives at URL(http://sourceforge.net/mailarchive/forum.php?forum_id=31264,SourceForge) or at URL(http://news.gmane.org/gmane.comp.mobile.bitpim.user,Gmane). Phone specific groups should also have their archives and search facilities.

Where to make your request

You should check the archives at URL(http://sourceforge.net/mailarchive/forum.php?forum_id=31264,SourceForge) or URL(http://news.gmane.org/gmane.comp.mobile.bitpim.user,Gmane) to see if your problem has already been reported and solved.

BitPim Mailing list

You can post about your problem to the bitpim-user mailing list. This is read and responded to by a wide variety of BitPim users and developers, and you will get rapid responses if you have followed these guidelines fully. Please use this list for issues with BitPim itself.

Your posts should have a subject that indicates which phone you have, which operating system you are using, the type of cable you are using and an indication of the problem.

Note: The mailing list does not provide support for the various operating systems or for configuring device drivers. If you cannot get BitPim to talk to your phone then tough luck.. It only provides support for the BitPim software.

Phone specific resources

Some problems are more to do with the phones and how to use them. The help pages for the phones list various web pages, forums and mailings specific to those phones.

Do not do

Do not do any of the following. It takes up lots of other people's valuable time, and often annoys them. If you do any of them, you will likely just be ignored.

Mail individual developers

If the developer responds, the answer won't appear in any archives and so won't help other users. Other users won't be able to comment on the issue such as workarounds they have discovered or indications if the issue is unique to your configuration or affects everyone. Additionally the developers schedule their time carefully so your answer is unlikely to be timely anyway.

Mail/post in multiple locations

Some people think they will get quicker answers by posting to mailing lists, filling out SourceForge tracker items, and emailing individual developers. I can assure you that no one wants to answer/address the same issue two or more times. And if you are seen posting the same thing in more than one location, the people who can answer will wait a long time to ensure you aren't also posting in others (remember they usually participate in multiple locations as well).

Be impatient

Some people seem to get upset if their issues are not answered immediately. Remember that other people have their own lives and responsibilities and contribute as their own schedules and priorities allow. If you have given a detailed report, they may be doing research. After all, a good question deserves a good answer.

Post no information

One report consisted of "When BitPim talks to my phone, it gets some sort of exception". BitPim does fundamentally work with the phones we support. There may be some issues but we don't release software that just doesn't work. Furthermore not giving any information at all about what happened, the contents of the exception etc means no one can help. Follow the steps at the top of this page.

Ignoring archives

Many questions have already been asked and answered (multiple times). Check the archives!

#include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-samsungschu750-notes.htd0000644001616600161660000000667211321751041020637 0ustar amuamu#include "pagestart.h"

Firmware Version

  • The firmware version of the phone that was used for development & test is u750.CH07

  • The hardware version is U740.06

Phone USB Mode Setting

  • In order to use the Alias 2 with BitPim, the phone USB Mode must be set to Modem Mode. To change the phone USB Mode:

    1. Menu -> Settings & Tools -> USB Mode

    2. Select Modem Mode, then Set

Phonebook

  • The phone will ignore any entries with no numbers and no emails.

  • Groups (Categories) names cannot be added, changed, or deleted from BitPim, it must be done from the phone.

  • If a contact is assigned to multiple groups, only the first group is written to the phone.

  • Picture ID: BitPim cannot to use any of the phone's built-in wallpapers as Picture ID of a contact. BitPim can use another other wallpapers/images as Picture IDs.

  • ICE Setting: BitPim can neither set nor preserve your ICE settings. You will have to re-assign your ICE settings every time BitPim updates the phone contacts.

Calendar

  • BitPim supports up to 103 calendar events.

  • All recurrent events are open-ended. When viewed or edited from BitPim, the open-ended date would show as '4000-01-01'.

  • All recurrent events are automatically converted to have an interval of 1 (ie. an every-other-day-event in BitPim becomes an every-day-event in the phone, etc.)

  • The alert of an event can be set either to a ringtone or to vibrate, but not both.

  • BitPim cannot set the alert of an event to 'Light Only'.

  • BitPim does not support the Reminder field. It discards the value of this field when reading calendar data from the phone, and sets this field to Once when sending calendar data to the phone.

Ringtones

  • BitPim can add ringtones to the BitPim "sounds" section (My Sounds on the phone).

  • BitPim does not delete ringtones on the phone. You must delete them manually from the phone.

  • The limit of the size of a ringtone is arbitrarily set at 100,000 bytes. Exceeding this limit will display a warning. If you have a more accurate limit, please post it to the BitPim Users list.

  • BitPim will not be able to retrieve ringtones purchased with GIN.

  • BitPim will neither retrieve nor send ringtones from/to the microSD card.

Wallpapers

  • The default format is JPEG.

  • The default resolutions are:

    • wallpaper:240x274

    • pictureid:80x106

  • BitPim will not be able to retrieve wallpapers purchased with GIN.

  • BitPim will neither retrieve nor send wallpapers from/to the microSD card.

Video

  • BitPim can retrieve video files from the phone. It does not retrieve video files stored on the microSD card.

  • The format of the video files is 3GPP2 (".3g2"), which can be played by, among other media players, QuickTime.

  • BitPim will neither delete nor send video files to the phone.

Memo/Notepad

  • BitPim supports up to 35 notepad items.

  • The maximum length of a notepad item is 130 characters.

SMS

  • BitPim can only retrieve text messages.

  • BitPim will neither deleter nor send/restore messages to the phone.

#include "pageend.h"bitpim-1.0.7+dfsg1/help/phone-samsungscha950-cables.htd0000644001616600161660000000033110547564173020721 0ustar amuamu#include "pagestart.h"

This phone was successfully tested with a Samsung OEM straight USB data cable (Model: PCB113VBE) and charging straight USB data cable on loan from RPI Wireless. #include "pageend.h" bitpim-1.0.7+dfsg1/help/tour-saving.htd0000644001616600161660000000352710547564173016101 0ustar amuamu#include "pagestart.h"

Press the 'Send Phone Data' button on the toolbar. SCREENSHOT(toolbar-senddata.png,)

You will then get a choice of what to send to the phone. SCREENSHOT(screen-datasendchoices.png,)

In the left column you can choose what to send. You will generally only want to send what you have changed. For example, you would only want to send phonebook if you have made changes to the phonebook within BitPim.

In the right hand columns, you have a choice of adding or replacing (both choices aren't available on all data types)

Add

The items you have in BitPim will be added to those already on the phone. For example, if you only have mycat.bmp in the wallpaper folder, then that will be added to the existing wallpapers on the phone. Note that if there is already an item with the same name, then it will be overwritten with the new item of the same name.

Replace

All items in BitPim will replace those in the same category on the phone. For example, if you have 3 wallpaper items in BitPim, you will end up with only the same 3 items on the phone. All others will be removed.

Operations talking to your phone are done in the background. The status bar will show that BitPim is busy. You can still navigate around, but you should not make any changes until BitPim is no longer busy. BitPim will reload data after talking to the phone anyway. This is because it may have to have changed some of the data as it wrote to the phone. (For example index numbers are assigned to wallpaper and ringtones and phone numbers have all punctuation removed).

Once you have sent wallpapers and/or ringtones to the phone you can use them by selecting use downloaded on the your phone as in this example on the VX4400. #include "pageend.h" bitpim-1.0.7+dfsg1/help/bitpim-bitfling-configure.htd0000644001616600161660000000224010360163373020637 0ustar amuamu#include "pagestart.h"

You configure access to BitFling in the settings dialog. Click on the settings for BitFling.

You should have been given a username and password from when the other end of BitFling was setup. The username is typically your email address.

You will need to specify what host to contact and change the port number if necessary.

The click on Test. You will see a dialog asking you to confirm the fingerprint of the certificate of the other end. You should have received the fingerprint information from whomever setup BitFling.

You should then get a success message which includes the version number of the remote end. If you get an error message you will need to track down the problem. You may need who's ever is running BitFling to look in its log tab.

You can then tick the Enable box in the settings dialog. Go into the com port browser and you will see the ports available via BitFling. They are listed after the Inoperable Ports. If you select "Auto" for your port, it will not include the BitFling ports. You need to manually select a BitFling port if you want to use one. #include "pageend.h" bitpim-1.0.7+dfsg1/help/fulllicense.htd0000644001616600161660000004354310603030325016106 0ustar amuamu#include "pagestart.h"

BitPim is URL(http://www.gnu.org/philosophy/free-sw.html,free software) (like in "free speech") and URL(http://www.opensource.org/docs/definition.php,open source). The website is URL(http://www.bitpim.org,www.bitpim.org) where you can find newer versions, and get support (support is only offered if you download from bitpim.org).

The code in BitPim is copyright by several people. Please note the comments at the top of each file, as well as version control history.

The BitPim code is under the GNU General Public License as detailed below. Specific permission is granted for this code to be linked to OpenSSL (this is necessary because the OpenSSL license is not GPL-compatible).

In addition, as a special exception, the BitPim copyright holders give permission to link the code of this program with the OpenSSL library (or with modified versions of OpenSSL), and distribute linked combinations including the two. You must obey the GNU General Public License in all respects for all of the code used other than OpenSSL. If you modify any files, you may extend this exception to your version of the file, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.

Please also note that some code is taken from other projects with a GPL compatible license. This is noted in the specific files.

BitPim also uses several other components with GPL compatible licenses. The online help details those components, credits the authors and details the licenses.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.


GNU GENERAL PUBLIC LICENSE

Version 2, June 1991

Copyright (C) 1989, 1991 Free Software Foundation, Inc.  
51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA

Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.

Preamble

The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too.

When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.

To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.

For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.

We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.

Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.

Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.

The precise terms and conditions for copying, distribution and modification follow.

TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.

1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.

You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.

2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:

a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.

In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.

3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:

a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.

If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.

4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.

6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.

7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.

This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.

8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.

9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.

10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.

NO WARRANTY

11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

END OF TERMS AND CONDITIONS

#include "pageend.h"bitpim-1.0.7+dfsg1/help/phone-motov3mm.htd0000644001616600161660000000064010735330040016463 0ustar amuamu#include "pagestart.h"

What works

  • Phonebook, calendar, wallpapers, ringtones, SMS support, phone info, and phone detection.

Cables

  • This phone was tested with a standard mini USB cable.

Contents

BEGIN_TOC TOC_0 TOCITEM_0(Notes,phone-motov3mm-notes.htm) ENDTOC_0 END_TOC #include "pageend.h"bitpim-1.0.7+dfsg1/help/phone-motoe815m-notes.htd0000644001616600161660000000040510547564173017606 0ustar amuamu#include "pagestart.h"

The support for this phone is identical to that of the V710m. Please see the V710m Help for more details.

Phone Detection

Phone detection does not work for this model. It must be selected manually. #include "pageend.h"bitpim-1.0.7+dfsg1/help/bitpim-internals.htd0000644001616600161660000000054710360163373017071 0ustar amuamu#include "pagestart.h"

Details on various things internal to BitPim. BEGIN_TOC TOC_0 TOCITEM_0(How BitPim stores data,internals-data-storage.htm) TOCITEM_0(Phone Protocols,internals-protocols.htm) TOCITEM_0(Working with the code,internals-code.htm) ENDTOC_0 END_TOC #include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-samsungschu470.htd0000644001616600161660000000073310733643554017517 0ustar amuamu#include "pagestart.h"

What works

  • Phonebook, calendar, ringtones, wallpapers, memo (notepad), call history, SMS, and phone detection.

Cables

  • The support for this phone was successfully developed and tested with the included USB data cable.

Contents

BEGIN_TOC TOC_0 TOCITEM_0(Notes,phone-samsungschu470-notes.htm) ENDTOC_0 END_TOC #include "pageend.h"bitpim-1.0.7+dfsg1/help/howtos-calendarimport.htd0000644001616600161660000000236510604543413020133 0ustar amuamu#include "pagestart.h" SCREENSHOT(howto-importcalendar1.jpg,Import Calendar)

  1. Choose a specific calendar format to import: File  Import  [CSV Calendar, vCalendar, iCalendar, Google Calendar, or Outlook Calendar].

    SCREENSHOT(howto-importcalendar2.jpg,)

  2. From the Import Calendar Dialog, specify the source from which to import calendar data. The source can either be a file or an Outlook folder.

  3. Read all the calendar items from the source. The Import Calendar Dialog will list all the items that have been successfully read.

  4. Optionally set one or more filtering parameters to eliminate unwanted items.

  5. Import the data into BitPim by using one of the following methods:

    1. Replace All: First delete all existing calendar data in BitPim, and then import the new data.

    2. Add: Import the new data with existing data intact. This could result in duplicate data items.

    3. Merge: Bring up the Calendar Merge dialog, which allows users to merge the new data with existing BitPim data.

#include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-lgvx8300-howtos.htd0000644001616600161660000000200210547564173017531 0ustar amuamu#include "pagestart.h"

Access Ringtones from a miniSD card:

Transferring files to the miniSD card through the phone using BitPim is very slow, users should transfer files to the card directly from a PC.

  1. On the miniSD card, create a subdir called ringers

  2. Copy your ringtone files to the ringers subdir.

  3. Insert the card back into the phone and start BitPim.

  4. Retrieve Ringtone data from the phone:

    1. Menu Data -> Get Phone Data.

    2. Check on Ringtone, and click on OK.

  5. Write Ringtone data back to the phone:

    1. Menu Data -> Send Phone Data.

    2. Check on Ringtone and Replace All, and click on OK.

  6. All of the ringtones stored on both the phone and the card are now available for assignment.

Step 3 through 5 should be repeated for all changes made to the ringers subdir. #include "pageend.h" bitpim-1.0.7+dfsg1/help/screen-editget.png0000644001616600161660000000355607726031672016532 0ustar amuamu‰PNG  IHDR¹Ia?‡E pHYs  šœgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFäIDATxÚblhhøïààÀ0”€½½=ˆbħæàÁƒŒ@uÿFÁˆÄ4\=6šÀG ÓhŒ‚áh4‘‚ah4‘‚ahØ%r`‡Ó~4ZG2 bâ9pàÀ`ëpÖQ€ ˆ…ÅØ4(ñ“’ÐIU? F¥ €(n®€ìPg#  - EOô°’&Ž^šãR? F5@±Ð"£'R˜¬ÔGOà¸Ô‚Q@ @TOä¤6_F›;£€Ö €èV’SKý(¤€Ö“AdâQ@'òAÞ~V&ôÑY݈‘Ø¥¶¤La-AÎ ÄŒ®àË<Ä,µE*ÍÔ# ž¿£Ñ=2@1×õäh ]HÝêû1å#ËHð$0q_EJð@êçèzó‘hX'r`‚þLÌŒh þTNHýâß@ jÊ€ý¿ÑÄOµ°gÄÒïû‡T3AÙŒHáÏ€$Æ‹$}ŒHúþAå‘õ1A1hÀˆ9€ñù 7ewƒ0 aµh)ŒÀ3K± ƒ2Aßù (Ä8Ògé1–îÅŸŸ•¿^òvÁ›¸8®ŽÅqcÙÍÍ),ÿÓñÀ€ŽÁÅàs“_‰‰Y cL85%šó¿Âø”zÑ41w#ŸV‘ûÕ܈éÆÛޜۂ»%¸^¸Ž\B·ÆgÂ}fÇNê2ó©5{ê ó^#|ÔÜñcM~Bÿ…'næÝôzÇÑqrœ¿ˆe¤–4À ?ZÞŽ @Œÿ`¨º}4úF1 €X€ÕóPuûhÛy`èÃÏÄ­ºGCf ÐØØ¦‘9@± õ†GCh P__g j1`4tFÁ80`+´ht]Ç(ö €XFƒ` GðíÛ7fff0 ÑD> †%xûö-@6WFÁ°OŸ>exýú5¸D º–äÿÿ×cˆ126ÒÜt{@j¨m/­Ý< H/ÉA€——— €Xè‘Ø"ÔGŒzjØCo@¯°)àû÷ï ¿~ýbøû÷/@1 d‡E.®’ŒÚ‰ˆöŒt7žÚñ?lÅ @± –ÈÄW}ÃäaâÔ*±í!Ö Èö“«ŸšMBaC+w %@,ƒ/ÖcM0 1XÂ"'¢°E>.>>7PK?=†Vîj €X21Óª„!¦ƒK©}‘PHm¾Œ6w €,‘ã«R)˜ÁPRÑ"qá*™©¥~¸€”“Aá:å< €˜èá¸JbJ–áPúã‡Ñ!Aꀢ[IŽ+¡c¥À×^§¤óI‰[I±ýÄö#°™‹«óIH=%ó¡ˆñÀ íॉ£KmGÁP ¥¶ Í ÙÙÙ bbb òòò 4ºve {@£‰| {@£‰| {@£‰| {@£‰| {@,è½ÓQ0 † Ñ’| {@£‰| {@£‰| {@£‰| {@t[»‚íÊZ_¨…ïÞ!bî@l—~‘roÓ(@€b¡Wäàº@k #h0º‰ni7^ÐhsK"j…ÞjË@G¾ê[ÓY >ýÔ,©ˆµ“R7SÓݸ̅‰sÍäpÄ2% ±U.¶ˆÀÅ'iäV夨I ýÔjÂİݑJ+w @t+ɱ%@R‘õÄTáÄt†)èH(¤6_†{s €¤¹BíÒw(%@bGLhQ’SKýP4 £+ƒ1Ñ †Ñ’Q@]@ƒzt…’Òd¨–Dä¸{¤ ’ h@:žØJ1lj(iƒÓ£Im7£ŸØ~6squ> ©§¤s>@¡ld£`84ÿÐ72ÐèdÐ(ö €Fù(ö €Fù(ö €Fù(ö €Fù(ö €Fù(ö €Àãä£'§Ž‚á ˆetò(Ž@YY™AVV–ASS“ €XpÍh-^¼|á§°°0ÃÅ‹á7iT0uêTðÄ,`ïÞ½;ê×Až?¾âðÇ žñDW°{÷n†ÖÖV†ãǃgBAŠG9vpõêU†U«V1¬^½šáÚµk£~$€ATT” €°®]ab‚ôGedd¤¥¥Á~ŽìàåË—`T-~ýúuÔ¯ƒ0333ppp0pqq1á½béÃò•IEND®B`‚bitpim-1.0.7+dfsg1/help/phone-motov325m-notes.htd0000644001616600161660000000230510737572253017623 0ustar amuamu#include "pagestart.h"

OBEX File Transfer Capability

  • The V325M is basically the V325 with OBEX feature enabled (Seem 041A, record 0001, bytes 0000, offset 006A, bit 0=1). This allows BitPim to transfer files from/to the phone using OBEX protocol via the USB data cable.

Phone Detection

  • To enable automatic detection, the internal phone ID must be updated (Seem 04FF, record 0001, bytes 0022, offset 0008="M"=0x4D). Otherwise, this model must be selected manually.

Ringtone

  • BitPim can read, add, delete, and replace ringtones on the phone.

  • Though this model can play mp3 ringtones, it will not accept files with ".mp3" extension. As a result, upon transferring ringtone files to the phone, BitPim will replace all ".mp3" extensions with ".mid" extensions.

Wallpaper

  • BitPim can read wallpapers and pictures from the phone.

  • BitPim can only replace the contents of existing wallpapers on the phone. BitPim can neither add new wallpapers to the phone, nor delete existing ones from the phone. See the Howtos section for more details.

#include "pageend.h"bitpim-1.0.7+dfsg1/help/contributing.htd0000644001616600161660000000570110407163201016304 0ustar amuamu#include "pagestart.h"

You can contribute to BitPim in various ways. Any program can always be improved, so I welcome your improvements. Here are some examples.

Financially

No financial contributions are accepted for BitPim. If you really would like to do something financial, then I recommend loaning a phone (you can get them on eBay) or contributing to charity. Two areas I suggest are charities that help people get a better education and ones that campaign on behalf of political prisoners worldwide.

We will however accept sponsorship of BitPim developers or of major features. Please contact URL(mailto:djpham@bitpim.org,djpham@bitpim.org) if you would like to sponsor BitPim.

As a user

If you think something in the program could be done in a better way, post a message about it to the bitpim-user mailing list. Remember to include how you think it could be better.

You can also help out other users who post to various forums to make their experience better. Don't forget to supply feedback to bitpim-user. The goal is to have BitPim so perfect that there is no need for online documentation or for anyone to ever ask any questions :-)

As a developer

If you have technical skills, the best contribution you can make is some of your time. Please see the URL(http://www.bitpim.org/developer.html,developer site) for more information.

Loaning phones

It is a lot easier to develop support for a phone if the developers have one. We appreciate loans of phones. You will be credited in the online help, and the phone will be returned whenever you want it back. It is best if we can keep the phone indefinitely as that allows us to ensure the phone supports new features of BitPim as they get developed over time. The phones do not need to have an associated plan - we switch our own plans over to them if it is needed. eBay is a good source of phones, and you may want to pool together with other people who want the same phone supported.

Please contact djpham@bitpim.org if you have a phone you want to loan.

As a retailer

You can loan equipment to BitPim developers. You will be credited in the help and on the website for your equipment loan. Please note that the BitPim developers do not enter into affiliations and do not do deals to get hidden kickbacks.

Cables

We list the cables we have that work with each phone. If you would like your cable added, you need to send one to at least one of the developers (see the contacts). They will also be returned on request but at your expense. You should package it up exactly as purchasers get it. It is especially important that the same drivers are available. You should also state how you support all three operating systems - Windows, Linux and Mac.

#include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-toshiba_vm4050-cables.htd0000644001616600161660000000066610547564173020626 0ustar amuamu#include "pagestart.h"

You can buy from e-bay and other on-line stores. All bitpim testing and development was done with a straight through USB cable supplied by URL(http://www.3gcables.com/Data_Cables-USB_DATA_CABLE_AUDIOVOX_9900_9950_TOSHIBA_VM_4050.html, 3gcables.com). IMAGE(vm4050-cable.jpg,)

Picture reproduced with permission of the copyright owner, URL(http://www.3gcables.com, 3gcables.com) #include "pageend.h" bitpim-1.0.7+dfsg1/help/vx7000-cable.jpg0000644001616600161660000012342510407717243015625 0ustar amuamuÿØÿàJFIFHHÿá@ExifII*:N(€?1^2n<‚=CFGi‡š›œœœœžœŸœ¤¤¤¤’¤&ØC¤°¤ ¤ÿÿ ¤ ¤ÿÿPENTAX CorporationPENTAX Optio WPQuickTime 7.0.12005:06:01 22:12:32Mac OS X 10.3.9ddš‚„‚Œ'ˆ20220”¨‘‘¼’ Ä’Ì’Ä ’ ’Ô|’P܆’ , 0100    € X! 2005:06:01 22:04:042005:06:01 22:04:04 # ? AOCII(€àµ=:Ê*Õ  (  ÿÿÿÊ!2vd !"#$,%&'ÿþÿÿ)w2AþÞ 6«ÿa1 \"9 \@¸@¸ GCädì2!Ž!†!# +<AŽÖZôd'""""""""""""""""A»°1SðCîAA Œì•=æŽ6« *x0 ‹9A_™ˆˆÿèäº+ÿ[ˆV«YT+,. Õºf …¸’f_wwww&#"!&!2 í\ºéP'"bZ&"'"çÒxPA ASð'"&!>u~ AppleMark ÿÛC     ÿÛC   ÿÀ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?óˆáÈèjh¡ä9õ« Tcšµ¾ÝϽsØÎÅhíÏ$v«I`8úÕ„ˆý1V#‡>Ùô¤REd„íM¡Í\ŽØdq­YŽß×éSdR‰J+r<úUˆ­°A«q[1ê¤f®ÃeÀ¥rÒ3þËž¢¥KL ãïZIkÐuúÔéo·9)¢e¥¡ÏLÔëd2I´’ Çzš;~™çéRØÔLÔ²¿:•,qØšÓqÐäT‰84Êå3>ÊGARGhGoÆ´Ö{J¶û[JCå( v'qR¥®{Uõƒ€1‚;š“Èb8㴌նžR‹\‘ÁÞ¯-·÷õ©>ÎØ~´Æ‘HY NqÜS’ÐQо#Æ;ç­?ìÇ“Ž3Fãå3…¶HéÚ”Ûíþδ–Ü J-údhS-mAóJ aF+Ymè0/هʠãÞŸä… Od1M¹ÏZq»óô­až1Ï­/’súÓŒlwgÖ”Ûö#?jWКFƒpïG˜XË6ä)àb³¯äb´ ‡ŸZAÎ6ûÐ4gù+œiÜÕ¥ö`§8Áö¦4<úæžc?É~´ß ÷p}i~8¦‹Ryíè)XV3ZÝHèE3쪣ŽOµh¼[GB Façf‹Œï$Èǰ¤û8cê+E­±Û“Þ›äìÆsE…c9­pÚÐdút­I"ÀÉç=ª-™ÚXÊkl3Ïjiµü+H ö¦4=Çv£È,f5°9Èüj´ÔûÖ«§ËÞ¢h}‰ö¦´Ø›MhµFm²G·¥l n3ƒô¦IhÎ8SE…cKpsŽ}ê¶Î5´l$îäúÓ%±ö ŽÔX”Œ -H=0=EBÖØÉ^Õ½ö7÷¨Àòµ4K‰ˆðûÕv·ÀàcÚ·ZÀuéP¾Ÿž f…®ˆV0%‰ æ hFpG5Ð5‚ƒœ“Q=‚0ÎÖ™§=, G ÕI-²Üt®–KHÇðÕYmòƒšz¢lsrÂTãZKFa“õÒ½¿'Œ{Ô/Êž„4so§Hüíüê&Òœç8Àõ®ŠTÏQôªïÑ-ûé=‰ö¨&Ò£ROR+zHª´±ò§nij—M‡w1î?Z+JXAnG4V‰‘c¶ŠÛǵZŽ-Ú–~˜•Y†RjĈ’.xf+s»¦}ªXíØÄc¥YŠ2qRZA°eâ­%®ÀRƆ­DÔûÔØ´1-À8Æ}ªtEϽ.Ñœm©V<ãŠKRˆ¹ÆÍJ°’}3RGQÓ“S,,ilUˆV rS¤YdŒzT© wéS¤@â¥êR+,G8ñ©£·ÂýÓùU”ˆŸÐTë>£=¨cH¨±í©VHÅZX@è3RÇôëè)bªÃž‚ž! йc°©<‘Ž€ûÒ}‡b¡ƒ¥(¶?QíW–1ž˜íCGƒBò¬SXqÈžœcж¶ä‘ùÓÌdb¢T{Œv4åí´U±oêÍ8@3“šñU7sÇ•; OkËÓ¼°G­n³Ó4õ„°ÇsW±=0=èòXú‚=©Ü žHéš'½]û3í)&ž¶®ÈÒÔ Ñ#Ò˜(ûÖÙIÉÆ)E‰Ç'­6;¢<¯8†02kSìjœçšŽKxÑY¶¨êIâÕ…ŒÝ¹ã¥FbàñŠÇñÅoø9IÕüM¦YÕ$¹Rÿ9¯,ñí¿ð«E.¶××Z¼ƒŒY[6âØ*Ií¯âfå»=±c¨ãÖ“Ê¢ó_(kðQ !Y—HðÜþwp±þ€äï¿oOj‹=DÓœ†¸•œÔU¥;|/ð2u©®§ÛMnq÷I¦µ‘'îãë_ ?í…ãÛæý牼=§©ì–¥ñüê½÷í7âkˆåø£n?å•–˜9üH¥Ë>«úù!{xv‡ùŸw-‹’~aJ>Áž¬=kó­¿iß$„ÅñùÀè^Í1ü©ð~×ÿ,_÷~)†íGk‹$çôªP©Ñ/ëäOÖ!ÙŸ¢&Àp qŠ…ìW?xó_ 韷·ìY~Ýc¤j(:íFŒŸÈ×¢øgþ ¢Ü²&½á»«<õ–ÎA(Á¥i­âÿ2•jlúØ&z>ă¸Ïs\/‚ÿhχ~>Ùâxn[¥µçî_éóp^’:©B{Þ’’z'©ª´µFa´\ýÑô¦5²Œ` ÓxsÈÅDñg¶­PìQ1‚:d âÀÆ*ñhçü)ÑØZ,É3d‹ëš‚HÉ ÅiHsP4[xàçµ4‰3 ;±Ž>µDG_^õ©$>œb xF;ãÒ™62ä„·oÆ«¼[sòÖ£Â3éPÉ9Æi’̧p銅â!Oö5ªðûUv‹ëO”‹-ÿª x@'Ôö­Y-ùëš®ñ ôçµ+Ñ•,…TxB‚03í[Â@'Ç¥V– Œ÷5KbZ2$‹ ã?CU^#ŸB+]¡Ûžª²ÄGj,ŒÚ2dLuóÖªÏǦ9­i#È÷ªRÃê+Eb w‹'§çEZšµb(NsŠ|6å½¾µn;nGJÍ»ÉÇô«¨lcŒT‹f}¸«PZí ╊H†8 ê1íS¤8#½\[|§cS$#Ž3ŸN”‹¶¥e‡?ÂjÌ1CÏcS¤ŸCSÃ8èE+b€îi`Éf¥H¶’zŸJ³ä)çÖ¥–‘]-±Çj”[àŽ¢®$ À*ž;IyL®)\¢ŠÚã¶qR,€8­°fàT˦ ›­&Çc9cŽ*_'ØúUñ§¢÷$ÔñÙ¢»šEXËXãi/”1€ i¥ºƒ€¢¤1À&[C1mIퟥJ-˜ãå#ëZKÏz|öÆ{õ§äx²v9#ž,sÆ@5¥ÙŽÝ{RÑ”QxÄjCf›x'½YòóŠR¹íÅ;ŠÅAiyRjAl™áqSyyút§öѰøGåHS5ø÷Ç1ÕüSª_ë•?ï•Àý+éÍ/ö@øeàx–oxÆ]Rtå­ì¶Â‡Û'$þ•¹mãƒ_H_ ø2Òòá:Oqœäý_?¥5õx=5~Zþf2oí³ã¯ü4ñŒåJÐ5=M›þZG0ÿ¾±Šôí ö)ø£¬iô¨4¤?Å}r©ÀJ÷}Cö£ñF¥“¢i eE ‡Áx‹ã‹ç uOA§)ê:©ü‡4ÝwÒ{ÿ#;Åmwø ¦~Àš’¨}kÆ:Uˆya !ýq]%—ìUðûO#ûOÇsNÝÄ(ˆ?RkÆõOжîÍçø’îõý Vlþ'Î]üL…‰A{9õšPŸãB©Yíeòÿ0æ_ËøŸQZ~ÌßôÕhÖ.îÈþýÒ€![Vß¾Z•_³¬Äw’õ‰ý¯‹§ø…zç gûòªã ùymDEí tÓÄ?´ÿÝGÞp|øp1™l}þÖÿãROû.|ÕÐù¯?Å áþ¹¯‚‰î¹'RÔÚ?”U¨.øsâoßum>kYá»6=à×Yð×öœñßÂùR+-RK»?5é2ÆG Ï+øóyÛVvS$·l9Üœ~u?ÚÖh„wve›þ{!Áü©Jš÷“¶¨ýø?ûhxKâ‘XkXðæ¬øQç¾mä>ÏÛè:ú Mº0ta•u9zæ¿n4gXüûGó£êvõ_­w^ ý¢|wàëH4û?ß[ØÂp‰»–=ƒgjåte…Ýy¬í®§ê³ÆßÅÏ#§­~~ØþÙŸ´g@Ú¾ªÆFGÚ-‚ä}WÙi_·ÖµQªxbÆíOV´¸(OàsI¢Ý«Áï¡ö[EœûT2GŽ8¯tÛÃÁWÌ‘êºn¥¤9êÛVT—?¥z§†>:øÆAF™âk‘ºE4žSþMŠ‹Ûâе8Ëfv õ‘c·åWÓ˺ŒªòÄ@­IzUi" œÕ"L·^0;÷ªÏŒöâµOn;UYcôÇX“2X@ä «$<ZrÇÉíU¥C¶¨Í™o&©M;uõ­icî;UÔsÐÕ#6¬c\.çÈéEO4cuÈ=>ÞÅØ—Œtz=6Cÿ,Î=ëRJ´ŠN=­cÔôTLÈtÙpväÕ¸ôÉùŠñéWã#Ú¬ª`çC4Q)Ç¥xÿYM9AN;Õ¸ÇLóVTÜ«c°ˆ¶JäûÕˆì¢\|ƒZPÁ¥DÊõÎ*[*ÄQÛ(þ? ™c~ñ #ñ©6éÖ–ãBy{AéøT¨ ú})Û\~u"¨=¸ô©Íœg§µH±çšz®îØúÔ‰GÓÍ€RiëEIåv8çµ€øÕûDø7àf˜eׯĺ“®ë}*Ô‡¸›Óá_öŽÖ¿<þ5þÚÞ:ø³$öVW'Ã’¢ËOr$‘é¤OÐ`{WŒ¼ž ø“ârìouírþ^KšY\þf¾ ø}û&xwáöˆ~-êÛ•DÐâ˜ÿm_·û£ó®…J\õ_õäŽ9T•OC營ü_ñgSû?‡´‹‹óŸÞ\°ÄQû»ž}?á_Ø¿ÁÞ¶MCâW‰–îuùŽ›§¾ØþŒç“øõ¨|wûfiÓN…à[tí6²4³Œ"ý~¾ü×Íž*øÇ¯x¢éåžv%Žs#ÿëUûJ’Òš²î÷1º[+þGØ—¼ðÎÐéþðÕQ·ÏŠ1½½ËŸ˜þ&¼ƒÆ¿´¶¿â ^ëËgÿ–P·?¯š®5kýAÈ’âY þxü…YÒ¼+«kS¤6vS\JÝ4,Oà*VÍÞNì™6þ'¡Ýj?ìBî/59OñHÛÿ3X×?õÅ¥¥ˆþöÏ1ÿ6ãô¯AðWì_ñ3ÆF7] [Ÿ6ôˆF?à\þ•ï¾ ÿ‚k‘²OøŠ(ÏV†Ê"çþúlÒ·ö0‡ÄÿÆ› O‰ï|a¯ë9Yõ+¹Tÿ¹Uü‡R×BÔu@ŠÚI¿Ù$šýHðïìmð›Áhn/妥t!]µ…ï¦Ëkÿ i[{¬ð+Ç9¨öØxlͽŒúÙ—þýœþ ø¤#XxoQ•£ˆWó8éºì ñS ×6vö*Ýî.Tcð\×ÞW¿´¯Â(—ÇZ0Çh§ßûç5–ßµ×Âb?á4´?H¤Ç粡â£öcù²½”:Ïò>bÑàœZ» mC_°ƒÕb¤?®+°Ó?àú4Xû_ˆî_|›u_æM{½·íOð–ô…Çb“ÚFdþb·ôïŒÞÕÈž1Ñ&cÐ-ô`ŸÌÑõ¦»/—ù–©Rõùžì àÈyšž©)ô ‹ý*ÚþÂÞŒs.¤øõ¸á_HØêV:šî´¼‚åOF‚U|þF¬y=sõ¡b$ökð4ö4û4ØÀ@cþ&ÓþµV¸ýˆ|Á„2ê{f`¥}>`Ú:Ton =*ý¼Åìiö>%ñ¯ìX¶¼º5ÜÓcø%ÁÍ|õâÏ…zÇ…nÚ+Ë" ¼éÖ¿V$¶R¸#9ìk•ñwí/ÅvoÕª9a€Är*•dþ$a<2Þ'æÇ…>_kò`öBsü Û ª¿g¯øoG“Z“JháŒþù¡!Óžüt¯£þ"ü ¾ðEë_é{Ì*r6 l|;ø™¡lú¾‚XfS¬£!àƒš—W•ûËC‘G•ÚZ3ó÷I»‚ ”Šú6’ÔŸ˜}Åw‘x#AÔZ+ë‹Mã*Ì»—ô­OÚSáøaã&{ _E¿ýõ¬°z¯Ôt¯Ký4¿ üNƒWðv¿l¯}ý®Êà>ÎŽ¾øàƪ£qÕ= årzny#|Ôu+S´Ôxá<ÝŽÅsÚçÃxd–¼Ò®áPsæyg˜â¾Ûñ_ìvöìóøReaÊÇ'¨¯>ºµø‰ð¶CÔ3]Y¯d_22?9¥½“ô%©ÃâGÍžø¿ã‡÷ t­zúÌ)ÿRÒŒÿÀOôWÃÛîöØÅmã-!/"áZöÃä“êPð T‚ûá×ÄlÛx—Ãñé7ïÁ¼²QϸʹOþÇ—-hú—‚õ(µëLnp>³ä¥Qé£û¿áÊ„žñþ¾GÚ_þ+øSâ…ŠÏ jÐ]8{bvÌŸT<×Rð®}}Å~FlñÃtIÝèú³ðèLn¦¾¹øûj&§-¾…ãÆH®ë¨Â±ì$¿Þc(N›×TtF¢{ŸYKmÈÁü*»Ûmç“Z0ÍÜ)$N²Fãrº†SÜõ‰¸š¾Æ¦[ÁUZ“ž+^H‡=³U^-§ÖšÔ–Œ–ˆgUiaê@­,\g­U’"½ºVˆ†dË ÇÖ©ËãøV¼±ç‘ÓÞ©ÍáNÆf;Æ:özŒTŠ˜ÇúT¢<ëSb†ª`R¬YÇ8íJ"=ù5*Äy9Æ{RjÃ'#þ52Žã¦)Ë#Ž´õ@*F†„Î H=)êŒ=³Rl$s“ŠCDj ôÏ¥=åàâž éRy|ûÑq Žô»ry8>õ"§Óêh1€3Hç¯ÒœŽ)È¿ŽjM˜ëÍ‹Ê$û{P©Ž¸>‚¨ø“ĺGƒô™5MkQ¶Òtø¾ýÍÜ‚4‰ïíXßþ)øGâ¥åÏ…uë]f+9<»ƒ;£=²ìzže{6W±Ôùc# ¦œ„œzWøëö‹øoðÔ:k¾-°‚á:Ú[¿Ÿ>}6&Hüq^ âßø)'„¬ãð߆u]mº î™mc?ú~‚ªüß ¿õ÷*ŽìúýWõSUÔ-4]>âúúâ+;8#i&žf ‘ ,Iè+ó¿Ä_ðQψ:‹´zF‹¡èêßtÈáÇâXÒ¼Oâ¿íSñâÆŠt=s_7[8’X-¡HB:´TzóÍZ§Qô±‹¯³©êßµŸí«yñ.k¯ ø.â[ ©1Ïx¹Iu_uÛ©ïé_#÷²3Wb²1[‹™—!¸;±õúUqÎs±Îïjì„‘ÈåÌîÏTðÏÇ—øg£?èÖúN¡*m¸×¯Oy'„ÏËûO©¯=ñ‹u¯ß=Þ³ª]jw.r^æRß< Î7-ÿ,œþõÒ®ØñþUJ ÷êMÐØíÁ’dˆÄäþB½ž ðC¤w$ñ­½„G“ ­¬·3~JÅ«†]ñ¹)°ï‘|?1?4±¯ÐÕÙô&ë«>‡Ðüuû:øU£ðï‰|gt¿ÅwåÛBà!³ù溤ÿ‚€ØxZ³ø/áv¢Æ¼+Í.[ñتOç_2é?µfQ•¥åóžÛ[³çòéžý¾#øŒ#[x?PDoùkyˆÿ4:S’÷›·­—ábãRßü ïÁ@þ-k,ÂÖ÷MÑ£=•’’?-^o­þÒ?³ªj­¾íï/d=ZæáÜŸÌÑ798²…xÎ[šýBÑ?`φZJƒqm©¸ênnˆ’â»}7öWøa¦åø?Or:”¹ÿÇ_=(õü ú¼ßcòVÖ{ø‚Ôê€ÖŸöî²Èj£°·Oð¯×Ko¾²Éðž‘=-úнÿ «Âj¿/†ô 1ÿ>qÿ…/iI÷+êÒî~FYøÇX¶ ½Ž‘ril£?Ò¯Éãhî†/|¡ÏÎKAÂßøëcô¯Õ[Ï‚Þ ¾ &ð®’ÿöèƒúW5«~Êÿ uua'…l¢?Þ€Ïèhæ¤ú¿ëæ/«O£GæåŸŒ<3lU£Ñµqÿ-´½E¸úó®ÇBý¤¼Wáiûâ§$¥®»~„œÿ:ú¿Ä?°oõ-ÇO¸Ô4¦=J$Aø0þµäž-ÿ‚~ë–ßEÖ,õ5ˆîc11üFEO³¥>·õÿ?ø$:Ua²û‹þ ý½u»1ø§ÃÚ­¸ûך,»[êQ²?Q^ýàÚ‡áÏÄvŽ v; Aø:û<¹ô¸?5ùõãOÙÿÆŸ$y5 öÉþ^m’/Ík€ºkÅÏ.±ü`a‡ãYË mbíø¯ëæÄTƒ´¿öX¯˜»Há‡CM1àž:ü°ø[ûOxëálðæêÒ_iª~m+S&H±þÉ<¯àkí¯ƒ?µÿƒ¾*´}ë ëïòý’ñÇ—+Ó9:¡Á®i)CâZw;)ׄôٞɪij–ÏÈ®¬1‚+富 ¤ðýãj:z0;Ž;W× éù×;âÍoOš@C)àŠ¨ÊútZjkÌøã¡ÿ ¯Â‹‹k° î–Âh˜õÛчò?…xÿì¿â·ðwÇO ^‡Û ·‹i7¡I>Cÿ¡W¼üsð£øRË[ »`û<‡ôâ¾Vøn®ÿ¼4±gÌ:¾Üzù‹[Û÷n,óãu¹û3-¶Žgê:M½ü Ì1Í °¶€ÞrM1àÇ¡®XÉž§CçÿˆŸ³6‹â4{:1ctyùz^ s¦xÇྫekP}ʰ¯¼ž<ƒéX%ð¥ˆì¤·¼$WÁ³jZLä©A=c£>]–üÒ~ïÛGg¬…Ûâ$Vú÷ƾMøÉðSWøO­4W çØÈKAuù$_oCí_TüTø!{àÛ¶Ôô}þH;¾^ÕSAñVñB—ž,]\mŽw4mÙ­c7 '¬#’òNÒÜàeÚ‚_ ^ZøGÅFMf kw)ɵcÑIþáý+îÜyˆ ²°ÈaÎE~MüTø}yð×Å×Zdÿ4jÛá™z:va_j~Åߤñï…eð¶­9“WÒ]›æšß ú•éô"°©fî¶gE9tgÑN¤‚:cÒ«ºc¶sZzT2GÀëÅæd©ŽçµV•1Ó‘ïZRG¸c­U–23ÆyëW¹-’ĪÒǑڴ¥ˆ½ùUY“i#Ҩͣ*H@íT."ù»JÚ–0EP¸^H͘7 ‰9þTU«„;Æ?(¢Æg°C*8úU´‹Þ–p95b(òzG¥s³ÓHHÔwçéVR3p@õ¡#Î*t\qÎ=M&qœâ§HóÀãÚ„\üêdž¿"„XúqøÔÏ¥MûîjDÛ¥Hˆð£¿Ò¤m<óíRwcéO Hv‘ú}<~_ZxQÿׯøÃûZü=ø<“[ÞjcWÖS¥é„K oöÛî§âsíP孄䢮ÏhßÞ¼ÓâíðÿàôN¾!×à[à24ëOß\7ü~ïüŠø ãíÛãÿˆ«si¤J¾ÑÛåòlXý¡×ý©O?÷Î+æ‹»Éï§y®%y¥s¹žF%˜ú’khÒœ¾-âsJ¿ò£ô?Ä_ðSo Y±M#ÁÚ•éÇws úp¡«Ïuø)ÇŠ®—Mð¦‘d¹áæ’IˆýTWÅdæ’µXxu¿ÞcífúŸex'þ Sã;/Ã/Š4½;QÐØâk{ 3 þò1c“ìJÔñ×ü‹Wñ…µë- A“×ò² ;QŽa+Æ™ù÷† GB:~µñ héÚ±°ŽHÞ%•$ÃGÒ›¡'Rv²gg®üLñ¯<7ue¬ø›QÕ4ùîEܶ÷s™•AèpO±4\ø~Êo±j– :ù7qÚÎÑùÑç;[‘߹仒4eBUUϨ÷ëZ¨$­m ¬ÞæÌ2]ê— ™`ò3vD2?Ö“YÑu=!û@¬2IÒ(/õ*:~5¤|{wi£[ØÙ7’Bv@gè:Ÿs\Ìó¼ŽÌîd•ùwc“MsuBKÈC.ÔØ½OÞaßÚ´,ìc´·· ˜ÉýÔ=ä?á]Áÿ„÷5Všá¾É£Z6êíÇÊ«éîO@+ªñ?†tý]M+öLñ+üù>gðú ¿ nÇ™i:ߊ¯Ö+^iXíD8€W¶x[ö<ø©â£‘t¶‚&ä<Ì©_ZþÌ²í§ƒì­õmVÜ=ãÈŒ>í}]od° T@ì*e5¹Ó ÊòÐüèÐÿàžÞ8ºÚoõ‹Ûg?¥wÚ7üŠTêž.™ÿ¼¶ðcõ&¾á[pGJx'sÞ£Û>‰¬=4|¿áÿØ á¾™ƒz—ú«ŽóÜmðZôþÌ |7·ìžÓ‹¯!æ‹Í?øökÖ¼¼ry”t¨uªw4T ¶F6™á­;IO.ËO¶´ŒtX"T ­xÅZTÁ÷ô`©Î dÛ{šŒx p)Û1×9©Bõö ÇÀëRE=~”ݸ©€ôýh¯€ƒg~¢ÆAôÁ©ö“Ð`RÇ4À¯·¯znÓÎ8«r;ŠiŒO•ÃR¹ˆ¿áM1ذWhàþTÆ\ |7É$jèÃXdñψÿ²Ÿ~! em5t½Aú]Øb6Ï©å^àÚ—ž˜ÍTjJ/FD¢¦­$~h|`ý‹¼Qग़ïO‹ûLL·j¸™ý¤ïõ󆡧ÞirêΨqÈ!ÔWíÄ–Ë*FG¿zð¿_²Ÿ†¾(Á5ݼI¤k„enàA¶Cé"ôo¯ZëhÏI+3†xkk¸ùözýµ5Ÿ‡²[èþ*’}{Ã@„YXî¹´_b~úîŸÀ×è‡|Q¤xßÃöÚÆ‰}¡§].øç„äcèGpyùSñwàwˆ~k’ZjVmœ˜æ@LS¯÷‘»ý:йû?þÐÚÿÀ¿‰-™ït9Ø ý*Fù\y?ºÃ±ü sÔ ãïCîÿ"iVq÷e·ä})û|êÚƒ …J­î¥7”Š:”_™Ïò|û9hg]øÓáh¶îŠĹú*ßÒºÚ×ãe¿Æ‰"ïLiF‡clZ,£k~gb;N?à"¶¿dMìºäšÔŠC;y“éÕò£|´Å9'+£ôÛL›Ï„1ç#½^(^+#Ãd°ˆû+|¨Ç“ë\ˆôVÅ "È#¹ªòÅ€xÎ+MãÀè2*‹ŽA…_Qî­¥E©ÛIè`‚3_$|høU7…õ&Ô´õ+mÃhé_gJ„çιxr{Jš c¹H­¡.c ´ÕD| ñ6Ý>$øtˆYÒ”²¿w¸ü:׋üøsð¿â6®ÂX-¼Á.ûñžOášú7ÆÞ›Áž$–=¤@ä©SÝM|½ã­hž'¼…Ø]¼ÈÏlEj—4yçE´ìÏ×K Èu;+{»wÛÏËŽw+ ƒù|‘䞤W‰þÅþ=>5ø5ki<žeæ!³|žJuŒþY…{¤‘äöõÉÌôbù•ÌùSÓëUeLäV“ÜÕY"àŸÒµe¼cžj¬±•§,YíUfAÏ[ØÉšg‘Tg zý+^TÉÕj4­rßSÒ@ˆGÏ5:®@¥ ¿äTñÇœô ¥¸‘Æ þU:&IÏôN‡¥J¨©y DL{“Ú¥Œç¥*®zö§¾°NÐNzOAb¨…˜€£’ǰ¯ø½ûgü<øWçZC{ÿ 6´™_±iŒ½_º¿A“í_ü|ýª¼yñ/YÔt¹ïåÑ44™â]*ȘԨb?xz¹õÏÕâsÇ-àµxÖS#F9ê*•)5Í'dpËÞGÕZçÇoŠ?´rÝ¢kxÂc*ÑY–V”wpùßßµâúÏ€ü9¦O=¤º­Ü·ªsç²€Ðs×ëZxŸP²‚ÞÒÉq®Ñ¶©ßYJr²‡›×ð¯Uªª6Ÿ,^Ö·âÌŸ½«Õœ^±à+ˆ"yìæûR¨ÉGb=« ©9ë^Ù¥]!A(Ä7aÔz×êﺭÔä™X¯³^®´ê^3è&¬P œÕ»}>[¿õHJƒËúš²ðØØšO¶LGÝ„Sõï^€®f€dõì)¤æ•Ø»ëRÄ€1þèè?¼h׌.mþ: abF;U›Ë³{"í‰"E ãëîjÒZǧB&»]ó0ÌpìÍíüèֺ̱¿‡>¿ø‰âK}.Æ<†9–CÂ¢Ž¬O`5Ïiö3ê×ÐÚÛ¡’y˜*ªŽI5õeŽ“oðWÀé¢Úm“ĺŠ¾™~ô`ò"Û¿¿Ò”¥Ê®&ì†x›PµÐt»øTiÄó¨Ã\Iбöô•ôgìÁû:¥„0ëz­¾éN4qú×!û2| —ÄzŠk:œD­»çx×Ýzv™Ÿm DA€ VZÇ}Ù½ \Þü„µ´H"TE(Æ« SøTËÉiÂ×¹¬´=1+þ4{бåï@4¼„@CøÑå{ïSÀ>Ô›3ê>´×˜ÈÕ0}ñAúj]¼u4Ü}Fi‰×qšB1ǧaR”ÈÆ?E‹$æl89íé@^ØÍLP}i d{ CžF1HÉÆH÷â¬2‚AÇJiAïÀæ•€ƒÊä`‘¢Çüêr¸ R0ãšVYŽûЉ”óŸz°Ê¸÷¨šháÛæ:&æÚ 2}øR½€…¢$Síã¯Ò¬”ÛÇéL(1@Êžý*6ýjÁ—â{Oð¶{«êבXi¶Q4×S¶4IÿçHG?ñᾋñ'ÃÓé:Í¢\Àà•||ñ7fSØŠü²ý¤þÜ|ñ—ö|ò¬¿hS5¬«ÞÅ’Ûž¸â»Ú“öÁÕ>0kí¥xnò÷Eð…¹ÛJæ¼nòK´ô=ð^M|é©]ÜÝì7×Ë Pªò³9 ØrzWm.x«=:´¡7¢Ô¯§ØË¬j0Û!¾gcÂŽìO¥}ðgG‡N¾Ó¬mh`UUaü^§ñë_!¬ƒNзBwMvJJãøãßÚ¾¬ýŒ5Aâ‡6R>ûË d¥;éYÖÙÛ™£ïŸ E³OˆÞ ­ã:f¨è¶¾Uª1ÇãZ¡I ’+hz‹b¹È9õ¨äN3V™zdˆ3ÉȪV¸ÊçÆ©ÝAò°Æi¹P[5Râd\u9ïéT„|ãûBø)o4潎<:õ8æ¾ø¿¦¥î0ÈÆ'?Ê¿P~ ØÅ©è×'*@¿=¾4h†=Vßa&óð?ýzꆶlókG–wGKÿüñsi5mä"NÌÈŠOü´Œä~›«ï¹ã®=«ò›öqñ)ð§Æ¯ _îòã7‰ Ÿî¿È~ª´ÎO¯Ò¹ä­6oEèÐ’/¨UIbçÚ¤yr=EW”dsŠf¥y‚ƒÉâªIå‘דØÔìœuü S–-­òŒÖš!•çeCœçØVuÌ©Ô@«Ó!Á<Œ~Ÿp¥OLgµZF2lÌš@[…¢Ÿ* Ü (zžÓ•>ð«™RGäœUˆSß¿‹G¦…÷«1Ž00)"Û:E‚8éRÆ®O?­J±àô$Ö7мk¡xL}C_Õmt«Qüw_ÙGV>ÀùkâwíÜÄÍcà-$¾8þÕÔ×î‘V?…+ó;%r'R0ÝŸWø‡ÄšO„4Ù5kR¶Òì“ïMu(Eú õ>Úùâwíë¦YÉ&Ÿà]8êsò¿Úz‚”OªGÃ7㶸ðÞñcáUçŠ|Yã ‹ŸJŽc»Ôn± ¤‹œD#U ìsÅ|Ù¡øwQ×/L:}¤·n¼¿–>TÞf<(÷8£;ó=ŽZ•¥´z˜?…Þ³¬ÝkWA Åì4­a{œÀÆ[«Ç2H‡ ‡p5î·Z¥Zͯý³xÊWìzc*3þÔäHô@Ãýªñ­FÁ´»ç†NŸyXwZê§55drk¸Ó¼G¢jVb+ÙM”¥pÉ&v“ꫲk:‰dßE(Æà‘¶öoð¯9¶Ò.5F>T'ñHxQõ&®%¾™¦€ÌN£r?8~§½qOþ'nÅóšž ¿×á–ÛN´[;6âI8sÐVE¦i}þßqýÄûƒñïSß^^ê@¬®"ƒ§“Êœ{ ¦¶ ¼®êtÕ5h«{îSÔ5{@€ØŽ!Ò(ÆÕB·ÓH/€^õ¯Yð·ìů^xFóÆ!Eð—ƒì£óeÕ5D*ÒË _yÙŽŽäÖ¶²»Ø¨»è‘á‘F>üŸ*רR;´Î8ö *}FXg¾˜Û >Î\ˆ„¸ß·¶qÆ~•Ôø3šž£emkjך­ãµ¶UÎ3üGúRZ»¾|9Õ!øÈµg/%s9SÛBgÖAé_xsE—Ä:Õ¦Ÿ ’ó8^; WM»lS.¯sؾøj ÊçÆšŒ`˜?w`Ž>ô¿Þü:ýq^»ð“À‡Å‹›ò#I¹™» × –Ú—ºo‡4Õ&ÎÌ—gñ7søšýýŸ>Ãà @òBÔª‰Ö7æ|ÌT êË]CðW„í¼+¢ÛYÛĨˆ p:×H‘廀ië þ5(R<Y½u={[Aª€t¡EIÐdô¤ÇÓ”4®=óMòöþ=ªm£ ¤ ‘Ó4„B˟“ËϽYÚ:õúÓHP"»FGN1Iåúõ« ¼ÿ…7n=3G˜lÆ;PWè*m¼‘ëI´uàšB" o­3çš›lóÇ¥!+Ç4†BƒŽ~”Œ¸Å=Šã¨Ö™¹}NGj`!Éæ¢9CRTçšä~'|QðÿÂ?_x“ÄwbÓMµÀÁ’g?v8×ø»©8šBºD?þ(xჯ ~Ó¾øëj‰¡ê?bÖ‚î—E¿Â\¯®ÑÒAî¤û_Ž2[—Ë Š[=B}:ê)¢–Kyâ`É,LUÐŽàŽA÷¢ž°Ð!ZQÓs÷Æ~2Ñ|áËí{Äñiº]š’iŽ3èª:³G$×åoíAûXë5e³‚9ô_Z¹6úzÉ“1ÏÍŽñÐt^Ù9'ÍxoY ¾°†g?í¿\×PFPdGq\KUv{ Ý\c37^½j=…¹ŸJ~Ìpzæ—iQ€}3V"œ±n;•W™3‘Üv«Ì»3»¿éUå!»z`aêÖbâÏ+âoÚ'ÃÂÎïQ!x–þF¾éž,ÆÞ˜¯–¿imyf 9FçÆ·¥©Éˆãsóû@¹m;\Ó®Uˆ0Ü#ävÃ_°úTâ÷OµŸ9Ä’dwÈ¿Jùsÿ»'õ¯×†÷?mð‡gnLšu»úfµ5•¤Œ¨½M¹$d ªÑŽO'ªó)äsU$BIî=«5©ÔRtÉ8iõªÎ€1$dzUÉ#;¸ãëPJ¼ž?²ŸsÜö>•™:y÷­y·R>µBx˜gŽ=é£6a·Z*ÌÈò(­/sÝ{†1€jÂF0zd(qÏåV"‹Ò¹nQDëš±`úÓcP} ³p87óWí±ðö-Ávüq—½Ò¤1°Z'ÿƒøšø»LÓ¬ ·‡ˆ Ô£Ó‰+o”a~Òêù­ò¨d€Çž•ú«âŸ[x§B¼Ón£ ÂoÆ¿6>/xÿÁÞ-ŸOÕgžXmÏ—‘‰?„ ì1Ø{ÕA½®yÕáË.knsÞÓü*f³{æ¹Ô纛äÓ46Ö¹l<ØÜürD`qü`ñ^¥ñïámÿ…üe{e­Z\éÐL!½ÒtØÖ-ݾãRKúnrÍß>œ—Ãÿ‚,ø˜6¥ý‡DC¶mgRa¤Y‚Ù]Ì{ ú+ÿü=£Ëo&µ=ÇÄ-bXãŸT/ÑåÁòã¦d(?Ø55#ÊÔ¦ì»=i§4ã|­à/‚^/ø“ºm'OhôȘ,Ú­Û,áÿ~VÂçýI=®âïìå¤x[áä÷–ڥƷ®ÚȬ÷pEäÙ* q¾N£æ!ÇC_]ë|Ö‰6£t¢ UýÒ°XmíWÑ@HÇû W–kþ.“ƶ7¾ðv?Œ®îAŽIbŒ­¤YdÈx={qïY{yT’T‘»Ã¨GßzŸÞKuxvNácA´G„N8è*·T\(½ Åÿ |Oá?¾¨iV³Â…÷“Óf>ðúW¹ü!ÿ‚øËƾMï‰Y<+¦6dÃ}Ó¯´`áàD}+×QI_dpÆ2›´Qò„|—R¬qÆÒÈÇ ª2XûõôGÂØkÇßL—öÃÂúCàý§RSç2ÿ±Þü[¾ýøSû0øáQI¤éÝjj>mNûÎÝ'…ú(ê»UW 1YJ´cðêwSÂõ›<á7ìyðëàüK¨MfšÎ«ù©êÛXGŽK*Ÿ•Æsú×ÀŸ¶ÇíDÿH¤=G(\\Ð$^ÃIæØ v¨7¹ \ñÓÖ€¸ãŠˆJX1L,äçqì(ôchOZy⪰g䜚¼þB˜îX,£¸4Ö• ŸjgSɤ+´žA¡’H×Ðÿ*®÷qÇSMEÁû¿…&yÖ ×%yÇÑ;Ø¥#.G Œq@B½è² ŒíŒ¶=©¤ú}éä£ò4Á°àÓ°²ñž´ÒAïùTŽž^ æ¾!|CðÿÂï_ø—Ä—éa¤Ú.YÛ—‘ÏÝŽ5êÎÇ€£ùií¹ÄoˆºÂ_ø“Ä—Ëa¥Ú/,yy\ýØã_âvèý&¿#ÿh¿Ú+^ý¡ðd).«"¶ne•cy&ÉË Žà ˜÷àæ¼ìv;Ø5JŸÆÿ6pNvÑxf[MGG¹“Añ]¾¥©[1á‘TFÒ±ï v7¦áR:׉kþ¾Ðu9ôýRÎk+ØdÌ¥Yüÿ}Mà/ ËmŸâ ®%Ð-4øæØ=°ŽB£$«ËœK唕-ƒÇªsxŸÀŸ&“G2ßS‰H´ºš ’0û‡?2÷ØH=Æ95çaó”ç(Õ÷â·imëmŒûŸ*Fÿf]¤n^ÇÒ¡™ÖNP»߈ µ_jÄ[›9 ¾ƒ>TÃú7ªžG¸Á<Å£!,™ð+éa8ÔŠœÓ:›$Ò¬ÅΣn‡$b¤W´xÉ,V+4e1–˜. öúWˆÙÞËgr“FÛ$Z÷¿‚Œoã‚"íy’yúQYÔºÓgÚ<;bþp9’2­Ÿq_šž+¶ž'Õ`^w.£ÌE~¯|6ð²èºçÊâ2[ŸA_”~+œ]øŸT•NUîdaô,kJ:Å›ÔVŒOÕÙ6鮿g¯³rRÔÇøjõÜ8äW‘þÉöOiðÂ1‘ɶ'Ÿv&½€ œwÅr#¾ŸÀˆ¶árx¦7@JçÒ¦h»ŸÒ»€ä­=eV\ƒ»?J—$f®²–0ϽEåO8ôž‚(N¹C´WÏ_´•¶<5w!+°?ð_EJ€1‘í_?~ÔÎ,~k7ãd Œûñýkz_…m`ÏÌi?Ö1Çù×ëgÁ§ó¾øS“¦Aûö+òMWÌ‘«tükõçáeØ< áëbpb°?(Å*ÖæG-ˆèž>ï½FñàqϾkAãÈëœzõª®¼œwì+$vØÌxTrª²Â3Úµd]ÈAªrÆž¦šÐƒ2Xˆ=³T® žžÕ©$jqÓµQ¹PTõÛTŒäaÜDYó×ÞŠ–å~~:QZXËSÛ!ÎäýjÄH?úÕc ÅYvœ’>ƒ­sžŠ€ö©ã^qÜÓcYEÁ¤1ÐǸô9¯%øãðæÏS{6ÛR—M‘dšÚê/29c?2ÍŽ‡ƒ^¾‡è;RÏWQ4Rea†´jž‚”T•™á†¯sâŠ÷P¼AkxŒ¾Ø`·û¨ƒ û(°¬5CÅ?hsø†`v¶£&a°ˆÿ×CËýó¯dÒ~øb÷WkÍj{bÙu¶rÿèÐ}# }Û5ê–òiú5²[ØÚÅQª‘ G° çT£{ÍÝÿ_2âšVZ ~ÉÓø–XµˆºÔšÑzéVäÃeÿtrßS^×¢xKEðŠYévövÑŒ,pF!Ö­M«¼§¡Ç¹ª­xÌO ß™¥ËÒŒu[‰wko5ПȌJ£ &Ѹ} 8zw¨šf~õ†#98õ¡=´yÆk†øÙñcJø)ðÛZñf¦ÁÖÊÜ[“ÍÄíÄq÷›òžÕÙ+ãǵ~dÁJ>57‹~"Úø Oœÿdøty—[‰/yÏûˆBûzVrj(ʤù#sä¯xŸUø‡âíK\Õ®óVÕ.ZâyOvcž=è`¯RøWðÚçÆ$Ó<1ag–E7N;Cô­y÷‚t­&§"îòÎØT÷sÓü ýý†~ ®‡¢ÉâBÞÝqqÈÍvÝGäy±‹©>S醾²ø}á-?E²bŠÂ’Þ=Íq_¶Š$ð¿ìÏñõ¤’i¦Í<ƒ3¬?ÉÍzêÇ•áp=ëçOø(Ixÿeo(nl#Óí \ÝêzsÒ ü°¶ûEýœ]|É3_jþÌÞ !ñänɘ£ÑxñÆ€£þ $žzèUúaûx\*\ß$ƒŽEtLóai£ëm.ÐZZÅ  ÓU¯› ªÆ=jÆÐ½p~•ÏsÖ€{õ£ž‡óô<M5—¦¨¤!ê;´â„žƒÖš©ó÷?íT€ñëïO`Tö¤ ¸gø}©ã¦sžzPÑñÆAëŠ`FÈ8æšÃ ÆOµ=óÔôÕNIÎGÖ¤DlHÀà k8 1“ŽÕ4ƒ®ô¦ˆ³MPÚ3ŸZG ßÒ†\ñŒc±¡=FibWæÀö€†#µHñÿt}+œñߎ4?†¾Ô\÷v?Èu'Ià_ê~5×­ôÍ6ÜÍq'ÌÎßrîî{úôôÕìúWÀÿ @ògÔGï5 ¶9‘ÂÂI«•-¨ ìòzçÏÆã S¤¯7·—›8e.ˆØÐ-|9ð³M>µŽôùp ­CQ·„¹Mœ͑—•å[(^qM_…qÉw¨½Î·.¯¡ê˜šîÞð#º•hä©ÞexÏCY?t;ÿ^yõ6¿Ðõ)$¡wÚ]ÛÝ7Gû¼® ­±°pRrßÚ{íÀ–š[=ž“çGm|mF^+\`?»Àï_i¼G²Œýénßõu®Ç7[^6ø—©Xø¾ûÂÚn‡aw¢ÙÛF—VóL°<ðȪ”IÀžxü~ µÐ|PŒº•Ý–—s#ÿ`kDUe*d=“9‡†ÆÚÜЬtwWÒìòçƒùs^¹ñÇâ­¦¦«áíbm¨Ép€~óoöAúý:øl³™['šîËhJ”eQ襪cZq{±¯ûÇ$€>µ«ávÿšͦ«¥\½ý´‚Hæ^Ä1؃ֲ€î¯Kø5ð¶ó≴ëd„Ê.gÛÂå³u$ÿ° ÇÐö­©³vØýoŽ>ì‡?Ä Û1¤ê7Z|–éû­pY¡ ö’7AôÍ~fi–rjÚµ¼ óI<¡3_RþÛßììÆð£Ãò)Ò|7 }±£è÷pãû ’}ÜúW›þÊÇÿ4¨Ù7ÛÇ0g㢎XþCõ¨îéÜÒ¬œš‰úuð‡@økáË64QŒz3]{D[žÞÔ‘B-ÑQ(Õ:dqÚ¹‡£d‘]Ô"œË­0á=O½Z‘zœwªåÞFj÷(`ÁÉèj)þæzÓ™ƒ dñëL“Ý• @*ÈÂE=Ž;×̶¾¤ºÂAK×$J›?Ò¾¢™@V'œ÷¯‡à Þ%T³Ð4Tl<Ò=Ë®…~QüÍtÑÖZõ ÏŒsŠ)×OûÏ—EU̬ÏeK’ƒ„ÏÖ¬ ß‚F>•U*#µ^‰O—Ï5“;ÇÅ#÷Èö8,yÉojbqÓŸz–0p94Šl àz±dj08Ï5a#篔 ’7(x$TâN:äžõ\sž¡§¯ç ö¤yÈ8íHo¯¥.0þtà§oP2=¸bM8GžŸ­<[8Þ¤8ÇÚ€æüã O‡ž×|‘œMÛ(xÇr3ÇJß*7¶¨Ó”µï ‹QŽ£¦ø«ø¸ØÝ¶¨–^¿jZqCæÚÉåR.8\£‘€AÀª¾.ÃmlÞðìì ‚1owv$.[5sÉéó7áë[þ1dEqáíà‹¼¼»¿ÕÖ5?Þ#©íõéòõÝæòÞ·Áaêb¹q—¿VT"Þ¬†y‹¿\APmÉâ€2}kkÞ“Ä¥¼«XÆé¦nˆ¿ã_HtìYð¯‡F¬ïsv|­2e“ûßìzú#À4ï‚ÔüGQ¿‹¯ 6Z-¦8²„õSÁ?@;šðícͰÇml6XÛœCÿ–ýãë\Ä÷W:Íß›)idc…_AéI¦Þ¤&Óæ.¼×Þ&Ö$ši$»¾½˜É$®rÎìrXŸ©5úYûüÿ„+Áßð‘]òîý6Ûî^|®íÿ? µógì‘û7ÍãÍ}5 NMÕÁ¹”õ‡¨…O©þ/AÇzý0µ·ŠÎÒ(!bŠ%‘¯@à+³û(é¡O™ó±Àü¸Æi –Æ;qšP@lr^)È7Žƒð¬.z#Jžyÿ…£ÀÝêÄ‹ƒÁàwÏ5ÿ0ð¹ç­RÅÏj€Œ•«® Ï‘ÈéUXHëEÆTº?º?Ê¿.?lo/‹>5ê‘C ’ÛKQd…ze~ÿþ Zü3øs­øŠãhkHÉCüs7¯ýôGà ~Aê÷ój·÷7—ÒÜ\HÒ;¬ÄäŸÎºè«&Î CÚ'µ~ȺÚ¼]u©ºdF¢>ç“ü«ô{@l£}ÚøßöVð£i:}’”IJ~úN;·?Ëö–—û*©È8Ç5Ë'Í&ÉíÙeðà‚ÙÏLUFR§Œ“WŒb1Ï xÛ$ŒïKS°¡ ëÀâ©Èn88ü«NHÁïŒöNhÆÑúЭ± ’đХ2’Oµ&Œ7€;Õ+ˆF=*“!˜—pncÅfàe‡CEY‘ëq0Uu©ù0G$ñR(Ü:üÆŒàó€ Œd?J@QÀð¦ü¬>”»}1CóòËþ KãøH>?G¤$›àÐôØmöö>eý Gá^ ðçL3Ù]J£ç¹™ N§ù Ùý¦¼@|Qñ÷ÇÚ‰báõ[ˆÔõùQŠ/袺_€þþÕ¸ðí°MÞmËÈÃêõ®ˆ.X#Å“æ“ó?H¿fO/…¾iêP$’¨‘±×šö`¸©ïXþÓMЬíãV8ÕF+{hÀç§`+);³ÙŠåI ¥TÃWPPm[$úUňÁϹ¨¥„2‘ŒéP3ñŸö°ø|~|qÖü¨viÚŒíyåÎ]'ô¯Oÿ‚||[‹À'ð–£8‹Kñ nì~T¹êÿï¡•úí¯ký¾>ÂC¤CªCûDDì`?‹ÓñéùW祉ž7EÚÛR³“|N§k#„ëƒS!·F¡ûÏÊ’0;Ôñð Éâ¾yýŽ?i‹o^[-Nt‹Æš¬OrO$×@˜Èǧªåp@Ï¥8GÏ\æHôÒ²²c+ó`÷¥ 2¸Í? #hzÒ0ܽzR6LryíQï3ƒéÅN~RzôíP9$óŸZb#gêy>â£p1œr*Qó8ö¯3øûñ†Óà¯Ã»ízR 0iöìyšàƒŽ=Þ>ÃÞª+™Ø–ÒWgÈŸðP‹‹­xžËÀºtÙµÒÿÒ/ö Õ?à*6>•òç‚t!âA.è">d¿AÛñéÏJ)Ü})%zàÞ¦O@gáŽç7Þ1ñ ËòÓ_Lçñšú_öBÒEÿ‰<2eQKÿãçü+æïZµŸŒ5ëv4w“!G"¾°ý†¢[­cF'!£WSí†'ú×gØGM^Hý&³M–è<=*ÇðœàdsšŠÑc\œ€*yÜ2+™žÈÜ ¤SH#e³ØS€ä{yBݽ!œGÄß[øÛÃ7º|À7›#¡ìkòkã¿Â«ïø¦õÖÕ»“*cýbÿ|_οfŒE÷¤ ù÷ö–ýŸSâ6’úŽœ‹³–F_ãÝ5¤%Êβ¯ü²cýáòökì[;ˆu Hn­¥ŽæÚuG4NOFVQ\²M;3ÕŒ”Õâ8džx§ªî\æœPu'ò§Œ9ÊÒ(Œ)Ç+ŒÒ•z~U!à`R9Æh1µ¾n)Ŷއê)Dxaéèk7ÄÞ#Ó< ßkZÝôZf‘c žæòá¶Ççù9$€94ФôrI šü”ý®?k=[öˆñØ,Lúol&-c§·pã´OŽ®…z >¤š—ö»ý®u?Ú_:všeÓ< c.ë;ò½ÛŽÄà÷S¢êI¯ ïšè…;{Ò<úÕ¹½Øì3i=ºÖ®—¤™1#´rïRéI›K€ƒzÚ_• … `w­Î&úJllÇÔt¨Z2ÒNO\ô«·PÔÀvc#ƒëM£y›c=ÕÌËom4²Ï!Ú± ,O`5ùYûOürŸãÄ)®m¤‘<9§·Ó ðäz|6ºM¨ÜWï¹êkì?‚¾ þͰŠFQ¸ã9ÍRW9©EÎHõNK(ã-i2ôÁüMJ‘®Ý§½Å!ž‚²Z½­¡ G95¹ V$8ŽqÚ«•%Iè}©‰•\t횆eî:ÕeÛp=ÍU—;°3Fä•%MÀ‘Î;šÏ˜l?ÑaÀñš¥p£ié»Ö©ÌiÆ[¥\0ÉÉ>”Vº‘©ì š°„.Ž=*È`žõiP`uÕ‰ØO ì*xÆåùF VŽ0¼à’jÔmÑzP†?s‘RF)ñ×Þ¦Uà“ÐÓ92÷Í?cŒ~4ÔFS“À5:‚Iã¯5#PÉ£i\ÉÏ.7)$Òä7¾) bņÎr}Í,™çð)ÙàúR¹ùOˆ¥`?hý øsãÇŽtý»j·  ág,?B+Ü¿`mMO‰ÙÛ- çô`?°¿à¡~>ý nuM°kÝÇ‚ùmú¦æ¿cO/‡þ2ÙYÊû#¾ùWýñÈþµ×zšþËÚWÅ+I/¬TXëh $È1¸öο:>+|Õü«Ik®Ø>v­û»µSåËîqüÅ~Í0õµrÞ7øu¡|@Ó$±Öôø¯`qÖEù‡¸=«XI­ÎJ¸u=c£? ñ¥Íµ”7Œ´ã¯hñ °N¤-Ì 眸9윥z¿Áÿü@øs›¿ƒž2!Òó&ðµø ã¹ÿFsÏûМñ^×ñ{ö Ô¬EÅç‚®þÔ’ÇM»ëÿ?þ£_ x¯á®¯à}X¥í•÷‡u›+æ«*äwVçÞ·²’Ðâ´é=t>æðü‡@7 ¦üIð¶£á MNÉnm#k‹`ÞñœHŸL5}Cà?Šþ øŸh³øOÄÚfº„c´¸S*ÿ½ïâ~GÂçñZéßañ=‡Œ´ý»MZÝfš1þÅÀùÇÓqÔË-GáV³4sÊž#ð6ª§+w§:Ý­봔uFcYJŸõ¹Ó Cë¯à~Ð2Nx=Á &Oc_—¾ ø¡ñK@TO|}Ò|Aj˜òìºt­ ϧø O—u¥›e^öAÿ/ý:(?Þ&½?ã÷퇬|uøguàKÏÞø2âòx¤¹¹–èºId·–Ƈ—ÝøZùKD¼s¶›yGu 6ÎXzÃúVôáÖG%j×÷`ÎQ_Ax¤ø3ÁÞŽÝ&ø¯}…³Ó#Ûµ´cø¡'©'©'Ö¦÷ÔÍÒ´»ïë«,ˆÌ |«ØWÛ³çÀ…µŠ««qБTÿg_Ùô"[Þ]À Ö¾Åд(t‹tŽ8Â…®yÊìë£Fþô†èÚ$ZuºG€«úV£FŽH•.„ò'¥#>ö=ÍfzEr 1²Fp@"œ°ŒzÓØÅ1ܬܧqèjyLãµ8©µº„‚îOáV£NŸÌTHNÓÜzÔ±¾Æ0&@ýjPyõ þÀ2yç4á0DÑär@'Ú¦#§?Jj(Ú1òýjMÃøR1ëƒS(Î3ŠhŽ¿€©B ŒÔŒnÑŸSê)®œŸz™”(÷¦˜‰\‚G¹¤Ä?ðR‡O­xJñ4f}&ᣔ¨çɓɀÿ¾«óÇúåφµÝ;Xµb·s¤ÊÞàæ¿l>2x6߯¾Õô‹” Õ»ÆÀûŽú üYñw†n|â}GF¼M’ÛLÑãFx5ÓEÚñ<¬Dy'ÍÜý®øGãKOü?ÐõÛ'ßõªJ»„ã•ü#ð®Ø‚3Ë×ççüsã’Gö߆º­ÈI 5Þ’XýîòD=ÿŒf¯ÐhضÞ+9ÆÒÐô©Ëž*HbüØŠP™8©‚ó–ý)x9ô¨,Dg¯áÒ”.ìöúÓØmõ¸¦í!½½h â˜zàçŸZ”ŒQÇ×#­0#1Q“ŒzñX^&ð6‡âûG´Öt»MNà¥Ìaÿ*è±€;Rm øSO°4žçÊÞ=ÿ‚øÄ--Æs{ዦílþd9ÿu»~5ó÷Œÿàž<Ó‹>•s£x†À±¶”þ|Wé8RôÔ‚3Z*’êsËN]Æß~Éÿü4\ßx[‰Tÿ¬³ˆ]'憼êçÃ:dž' O¨hò©é,RÛ°?ˆû°Qð¸Çz£y¥Ùj(VîÖ”?Ã4aÇëVªßtcõ[|2?|¨k>$ÕF«ø†}F=²KveÙ î “Î3õÿxmõ=ÈÀ[j¶ÜÇ"ðý+õGã'À¿ ø¯Â:„Zg‡´›dÆZÚú;–HÜt!€È5ùÓ¯iK¨ÝèÚÄ'NñžÄ0+æõõSÆGÿZš’oCš¥7©äºˆ!D’ M­ÌG¿ÿZ®ØxòÎÑÌjóK Î3øž++âÅ’¯Ùîí‡ö‚ðÎ÷õÎøJçO:¤Vº¬‚Ò NéÁÚ™îØ=Å[ó2ZŸFø3ÇOŠmŽ—¨]0µ—pL¡Jg“´ô?©¬ß|9»ÑI­ÝÚ“ó:§)è¤v#Ž~•Æø«Ã7>”Gs´y‘,ÐÜFCE,lWF ¤£"½ á§ÅišÆ É‚OqlþLÂQ¼J½·üqø Æî:­‹ÑèÏ)¿„D~exØç$žµNa WÜ6’IÁàd}kÞ¼MðóJñ¼ßxj4µ»ÉvÓ\°##?»c÷¹ãþuáž#µ›A’X¯Á4go–㵄¯±<¦.«(°µII8;G©È\Î×2o’OJ³v×sđڪÏcVÁ+9Ê»¯†ŸeñŽ¥“/OW Y·®3è$ö²¼àùêzŒû÷?‡­H6ox¿Ä­â©!ð¯‡ØÚ8Æ6‰ÜqœÝÿ!ÑE}'û8þÏû¼‹ËÈ0¼GZËý›ÿg†º’Þîî F0p¾ìðφ-´[(â†5@ Ž•Ï)-‘ÕF—7½-„ðÿ‡àÒ,ãŠ(À 08é[K1ûúš•PF;óRà^85™él{ûS„`¨ÏoQV ©ç€ 5”99¥q44'éQʧpïúb¥È^7}èïàç½0èC÷‡<æšç8”çùTcœÔ\•ɃšÄ œõÈ®'âßÅ} àïƒnüG®Í²¾Hm6êS÷cŒzŸ^€dž•¡ñâ.‡ð»ÂWÞ#ñ Ø´Ó­GN¯+Ÿ»cø»Äàkò·ã—ÆÝkã·Œ$ÖõRm4è7G§ihÙKXóÿ9à³w>À Þ>}^Æ«*KÌÆø½ñ_\øÉã+¿ëÒüïû»kDcåZÂËAžORI'­Rð‚_Ä÷†êë0évä4ýïöG¹ª¾ð¥ÏŒuaþêÖ?šY›î¢×°Gm—‘¦G²Ò.,¼}ë¦råVGŠÛ“¼‰­,Û[»†ÎÎ!¤XHâNkꟂÿ ×N¶ŽycÃz‘\¯Á„Åš;›ˆr9a_OéšBXÛ$h ôâ¼öîÎü=/µ!b´ñ*È)ĸJ¶ñ`ŒŸ|u¨Øm<þtìzK˜Ç9¨ö 7ÍXs¸c•DÉ€r{t¤ÄU•vŽãÞªH â¯1ßÓò5ReÉÏOnÔÊe0Ü~f¡uIïÞ­J¸ªÌ¡×·J¡åqÇ Õ9ðsÎHíWesŒžü £?\ö¦ŒÙ—qµ_ƒE,øi éøQZYzÒ.yèoZ³ý}j€ gj6ô<šÌêDªzôw¥Uù†ìý3I!p{Ôê0ÆM2€ ÞÞõb5@Fâ ©“Éô§ ;GjB&ÇQHg9Í ¿n`d`1Œb¿3ÿnŸƒoa¯?ˆlaÃct¡Wï/¯áü«ôè)Pr+È¿h‡Qø×Âw)A®K!#ƒÇO|ЯtsW‡ðÜleOÔv¯É_‰þ¸ð^¹4‘BËfÒ*å›wSý=Ei|øÑ®üñͧŠ42ÅþªöÁØùwp“óFßÌ €k±¥Q4*û7g±ûp¬qƒÛ¸¤]Ã>žµÄü$ø³áÿ ³ñ7†î„ö“²ÀøómeÇ̓³ÈŒÁ®áxóé\–³=u¨«É=~†œÑãÄÓ|Þ¾Õ#p;cÒ€# ä ã4¬6‘íÚž#ŠSÏ)n ÿµ7Àg“øSÙ1Ž9=éLa} ÇS@œŽþõ"¨>¿SK|·ò¥Àf#޹¥ Æ‚8õ¡‡ cð4ý‡'{Lf M01¼W¯i^ðõî±®_C¦é6qù—wˆâ\¸žÃ$~uðŸü^ðv‘>›¶ëÇñÆ·ŠÖL¿èö§øå#ïnå^ã-Óúö ý¬<ðNÎOk¶²x—SÔaxæÑ­ãIR8™HÍÀriÏÜêG`9¯É=rêÈk–w–ZƒÛ¬Ž>bq=Àƒ°âµ¦îqך·)—{w¨øÆâægòä¸EÞY@^>ƒŠ¿mhúƇ µí ‚t"•G-Ó íè}~µ>³áFÐu‹›;Áæ¡/ëŒã9»æ²µ­Mu}0IŸf%€žãÒ·<ýƾ±ªéM¡Ý»ËfŒZ8˜œ!ÎILôÏq]/€^Kˆo0À(Ûœwë\·—ºÆÓ,­+Ä0 9cõ=þµÕè y¥æKx„ªÀ`aÉúz[ì6zï†|C5»E9I—î9$søt#ƒšæ¿h¹µm^ËQ•ÒFš-®ñt%Nxâ¢Ð|Agypo"^FÙr }j‰›nôk9KÆØÜ{‚©JÒ&ç–íÇÿ^¶|)á[ŸêkmoòDŸ4Ó·Ý}j @»ñ§•šo‘¹fì‹Ýµz5ä°hvIáÍ.ìsqr:ÈÝÿJ¾¶ÆjwHñÃáÝ ZEòÉ"õ‘»“ï_G~γ³êSAywŒGZ£û9~ÏSk—PÝ]ÂLy Å—­~€øCÁÖÞÒâ‚Þ ÅsÎ}ÓF;æ–Ã|+á+}Á ‚5UQŒŠê¡ ÏQQœûzTÂ0ÜÖG¦´€Ù08ïŠ{I´?ÔeÁÉ9$RÛŒ}áïQ3rJ“‚1Š„ŽOqí@‡2« Ý3H~nœÚ•AQíC/ÍÇ©ZB[#¨«žñß´_†¾½ñˆoÇK´\³ž]ÛøcAüNÇ€£ùf“â?Ä-ᇆnuï_-„<)/3öŽ5êÎ}?€ ¯ËÏÚãæ·ñßÅî÷6: ›0Óô¥l¤*ÿ½![·AÅmN›ž¯c ÕcIy•ÿhº×ÇÏFû}Ž…f̺n–­”ñ7÷¤oâoÀp+Ï|?áûÏê‘ÚZ¯ËüN~êÔ“I£è×~&Ôc´³BwOe¦½LÓ­ü9`4½3ç•¿×Ü̇Ð{WT¤ ¬R”ß3mco¢ØÇ£iK”ãΘšVõúz öσ ^úh®®£!zò*—Áï„“k7qÜ\Ævg9"¾»ðφ`Ñ-c‰#UvÅ)t:èQæ÷¥±/‡|=•h‘¢qï[eHcŽØ©°c\E4®A9ÇÓ¥BMªVVD$9>â uÂðáÍZs°äõ¨™{“óuÁ§a=qQȘ÷©g?/#½G!¸¤"¬˜ÔóÈÅV{u=êãôçŽEWq±‰nAï@Š’þß­Syj^µrrà€}{UI\úf™,‚AÇ­gÜ'\àZºy8éUn`€j‘ Ÿʿ(§LT?J)·®ÆvG­ÀwN*Üq…ù»š§íÂõÕm¶;b¦Úh² éëR ÈôúT(¹©¡CÈï¸ô#Ö®åvg—^Ÿ2Øù¯à—Ç|ñBkÞ¹ÙÍ…½Ó&$Áuþ¡˜r?0V>~Ò>ý ´/´èW¢ÛX‰¼Ñ.˜ ›sÜüièã\+ñó\ðµ×‡äk›"nl·`Œ|ÉþËßÈÓ<7«Þi:½¶© ê3èÚͳyÜ[Jb‘ÕXr+¢QSDR®éèö?xr1Å)by<_Ÿ¿?षÚ2Ûéô™.ЃÄ\@KïK Þì˜?ìšûwÀü)ñSIŸ„µûv×·Ù%ãöxγ\Î.'© Æ¢¼YÒ( ÈöÍrÝ?*\‚y'žÔì…wïR‹—ž~´2ŒÓÆGbi„äôÈí@ÄhÃLSBmÈ&AÆ3×ÒBñÜÑ  ,"\³(gs1_1~Ñ_µÞ…áÿkú_ÃÿéW~8¶•mù¿gR|±äl©pX)l‘Å{÷Žõh~ÔfñN§e¤è’Á$7ó¬Q”e*Ã,y8'Í~+x°øbÿÇs[ØÞ=Ο<Ú0ÄQ.v’ÂÜ:ç¤#Ìõ9kÔtÖLWU×üy¥\ɨyš¥ÌFÔ¥rÒ+1Ëo'ïg®O<{S´g´dƒN¾´omw0‘y[ýÿ|ztãëWÿOð¬¦J›ç\䱎Î}k—ÔRûÄÚÓ¶˜ò\½œ&U9Ã$h2qžN; ê<»ßqúÇŒÝÍÕ¤Ö{ èI™má·Ô- Ô!w¸/'—qtl[½ÁãŸSQ.ââÏíLÌSpçsïøWuàíF8õ}:;{/9QƒI‘Ë·ÓÐR°Óìq—[è¬ðù%ψíÐ+¸ðÞšÓ@.­sÿ,Û¡ü{ýð?ÀO ü[ð妡ªh‰mv€bea#ßÖ®xóöðö¥eöŸ Júª‹÷ãá—ß¿Ô`Ô󣣨M«ŸŸÚŽƒg«6ÖF´½Qœ}Öü=G¸¬]KK×® ]0wŒ6ô¯nø“ð‹Ä&hŽT[\µÕălQ•Æ{îáZi½Îfœt(4Qx3OþÇÓ1>©p1ur¾¿Ý½¯övýŸn¼M ÝÜ%°ffjÙûö¾ñ~©õô,U˜3;-~ˆøÀv~Ó"‚Þ$R‹ÔÍsÎmhŽš4œÝÞÄžðe§†tèmá‰Sb€:×[´tô¤EØ:O88\šçg¨•´AGãSÁÜqžÔÔ%[ßÔSò‚W¯zØò$÷¤~3zsÍ÷psHq´ŽMHO?8`gãÖ¹?|Oð¯Ã[¸ñ½a¦H±—K{‹…Y¥ã€©œœôÎ03Éñ‹ࣾ-ÿ„ ?‡ü?¤YèÑ6~Ë}ºâI‡¼ŠÊÿº8÷«P”µFs© ?B³íõ¯:øÕñËÃ?|4u-vãÌ»•XYi°ûEÛŽÊ?…Gw<s€|/ÄŸðPÿ ÇðÎÛRÐô™eñÒ´m£]gɲdy7¡ÎT. rÜWÂÞ7ñÖµñ Ä—^ ñ>£.§ª\œ´ŽxU숣…QÐ(àV”é9k# ¸ˆÁ{º³¤øÇñ£Ä_¼Hú߈n-ãȲӡ'ȵCü(SêÇ“ôÀN¢_x¯Q[kXÉù˜ýÔ¤ö«~ðÅç‹/vÆ VÉÌ’· ‹ï^‘Zi6ÃKѺ“‰fQóH~½‡µtÊ\ºDò$ÜÝÛ 3M¶ðÝŸöv˜<ÙÜbkžî}µ{„SëבO4lS!²EAð“àæ©â+¨§h¢Š<ç| ·òÅ}…á/I ØÇݤE畺óÿ}\rocª…7w±o·Ð-c†8ÀÚA]3ªª† úTVöRFÃ̼žoMÁãª*ÞÜ3žÜõ¬’±ë$’²"2ÓGŒ†>¾µ#¢±â‡]ØÎ*À®œ‚¸#œ‘L‚}íSȼsùšÀn})X’î T“æ$H5v@$\vª¥yfdlßÛÒ Ë2üÝê䪸<ŒŠ¨Ë·'9>ÔÉeYç ãëUˆ%zWe“ÀªR!“éN×D²¼‹¿ Q˜xÍ]v*Nzæª\¶zcž¾Ô-ÈfUÈÇ ŒQDã{ð3E]ɹëp6Ð2M[¸ÀïTa Çõ«IëÇaS³:‘dƒ­N•äŸÆª¡9ÉãØÕ„À –” c ª{ŸZ’8À$±¨#cÇò5m0ç…0Ãd ’<)ç$Ó$Gßšx ¨Ç¥-@xÏ >”ôÏýiŠxÁÈ÷ÅHî(@'€M.Уžx¥È/§jP1ޤ{І‚2ÓŠ ä÷ôÙrŠÝÄöñ×ô cYK¼ú Äñ/…mÒ! +Ö~ | ñG€e–+›šÌîoC^K©xNÂá›Ì…ì&õNWò<ÖþÑ=N`üÏ¢<ûX~Ð ‚=×¶4äถáÈôÒ"²~y¯NÑ?à§`u‹Åß ïì¦zM:ð7þ9*)÷Õ|3‡µ]&_7KÔ™r 2”oé]¯Å_ˆº>Á=ûê1 Â®¡n—+øš\©ìtÇ5»ü¿tïø)‡Â[¤j²ñ5ƒwiñÉÿ ÊjåÇüàÊFJËâOeM'ÍÅ|~:êï“àß ß99-&ˆñ´ñÒp—ðÿœîÈÓV©ö~FßY——â}§¯ÁOüo.‡àïêócåûI†ÕâÏé^iâ?Ûã‡ÄHe_øBÏÂv$Þ´&æE¾d¸Œßóœÿ|ir6iú~¥nÀÿ‰n‘$c§!søæ¹}gTñŸ‹ØWW»–,“²âs´g¯ªPKtg,DžÏî:?êþ¤uOˆ¾<ºñ>®üzÇpnJ²;{-pÚ‰“U…´íLK;7ã$nvíþ$^±¶m÷SµÔ€ýÈø™ÿ ÞѼ'«x–U²Ñ´×ÚçnÈóõ=MlŽVùÙÁÜZ\^]'š¦ä"Øâ¯øy`ÒckÓ1KµÜ±Æƒ,I}…{>ð'Ä~ñmâ *{kæ ÓòÀzJúbOØ FÖ/4ûÝ>v¶´eS$nsšNQ‰¤iÎ{#Å?eŸh_Œúv­§yÆBvÆËò)=ÿZú«á·ìWá¯kÇRhź(dükØ>üðßÃ;¡Ól£I•FéŠüÄýkÑ<‘Ô W;ö= t"—¼µ(iº\e²ÃI/qжcôPsÚ¬FÂ2i†=¸Ï^Ʋ:ÌM_ÃÖZÌ-oul“Äà†YG¡ÍxÆ«û!ø ïVkëm·n"ÝB©?N‚¾€‘“ÍBÑN?*wkb%ËâG'àÿi¾³[k8}«¥ì?*ñèx©öuÎ( å'°ÅIJËDE»±@ÉéÏjòÿ‰´ÿÃ…3Ëi¯ø®ÔjQýí:À«•>Œ‘çgüŠñ«¯ø)wÃxg1Ûh#»‹?ëš(#Ïàd&…=R%Î1ÝŸ[¯öõ ÙçŸS_†¬¨‚óa ¶Q»šÈ{“Έ߻~ÃŽks…ÝêÍ9îc* . ñï]'„¼ >ºßm½o±éªy‘ÿ‹Ù}Mp°4“ͳ®O¯iðŽŸ©ë:f›có:Ä›Ã&¢m¥rlh€“¤zn— ŠÍO ¿Æ¼}M{_Áÿ‚ê³Cqu ’"ºƒ³óJb»¾ˆÁäu¯ªt/ ZèðGQuQҸܛØî£‡r÷¦gøCÂvºŠEa6ít¼„àœãéR4[ k&ÞÕ6=K[A ‚Ö£*AàdúÔê¥s×Ò¢`wöÇ­4€k‘‘Ó©¡³»ð=/K†&Qþ³hÜïÑC´®³ŽÝH©»:aJÙ·ÞÓµ7‰®¬ã›ÊmɽÁö­í5UUÚ£ UžZRJã9çÖ‘¡‰@ÀÇ=é í žµ6ÿPöéL*3Ü})ÑÎ:cÖ£p7u#3NÝ´óÈúÓ¨ù€çëHà‘í늀¤g>ô\\Ågk-ÅÄ©om—’YX""Ž¥‰às_'ülÿ‚…x7À†ãLð\+ã]ir¿iG)§ÂÞò}éq蜷T“{)F*íŸJø»ÅzG‚|?y®kúŒV•h›çº¹}¨£°ËFI<kó_öý¹üKñ:{­ÁÓ\ø_Â\Æe‰¶__/LÈã˜ÐÿqNq÷‰èl­Mqx’\åœügÔëDy[Y±ü«*+¿4"¹Áû¤ŽI•§>Xpû¢È°äÂÉÿ”rµcJµ7Îñ3€~aØöϵn•&¢›“&P@U9=Åv.Œ4Jíž!4˜‘ž@nùþT\wÀ¾¸Ö5½)™JB˹ýO`×Ö¾ûø/ð:ÚÊ{˘‘˜…ÇWÊ ¬5½j)|¦/¼…à{WèŸÂø&M ÜN¸m£¨®:’rv;pÐRwg]§iX[ªE†*òÅŽz¼Rì8ëïNV ò:dVg¨Bù#’;”Ò}ú÷©åU8ÈëëPªdðÅi¤0ÝŽ1ëMr$88õ+)ÇL}zSO'{Ó B‹òóQ°‚{qÍNè@ãœsÇj‚B6Üâ˜HA铎†«»î^zÔŽIcojÎÞ¹ìjI#‘r3ÉÍW—ïtéÖ¦’OáU¥ŽA8NùpsŠ«#ƒÔÒÄ †<š‚b@ÓÒˆ+¸ÜÇÔUI[ qøU‰ð:pOLvªnÇ f™,‰›s U+‚r@«H@a€j”²g9;}óBº%•d^zsECpÿ?QùÑWËr\ËIëéÅN6ª°‚v•L‡9ÝÐTEÅ€: •X±çU£ ØïíSBH8ëži”YR8ÆK ½Ú½Æ}*œ}Fzб'¹¤2Þ8¥7h•ƒg§˜Ž­žOÅ<&yÎÜõ  ÀäsOA“ž¸¨ãLqžL¬^Ôð:M.íÀÀ¦‡ÁïíOÆWž((DNy?•ôUNO9 ¼ÓˆÈàqŠ6Ž=­(`N3H2U@=ù§¹-üª6ë‘J„ô9éLcÁÈ㞆‚å€ÀÏÖ‘”àsÒ›»<“L@Wfz~T(Àç'éJïЦM8€G\J"xéçî;SpQ$±©›+ù¨ÌGœšEÁ'ô¤˜àgf”áO½_7ünýºþ|)k‹ &sãOG•6zd£ìз¤·¨Ç¢î>šM»!6¢®Ùô4²$HÎÌws…QÜ’zzùƒã_íûà†&ãNðá9×Ó*RÆP,¡oöçä6=# õð¿ÆßÚ§âÇ %ƒ[Õ³´&l®…¥æ`?Ûçt§ÝÉ€W3àƒ>ÊÞ4’øŽ ˜¤´êŸio|r×ÄÚÓG¤†Ý‹` 6qúeËŸöœ±úW•™}ëM Ò>Ü'°«PéÙùå`3ÑEl¬´G¥)»É•×sd/ÍôéNX±÷Á$úv­A Ú¨8ÇJ…ÃH¨˜ÈÁQüè ̚ܕ$gƒµeË÷º7Š5o-¤2HÃýL »vì*?øDõù‘jaˆžá‚ñôÆŽa‡~EIk —„‰Ké]ÖðÁ8’þóp²Ä0âk®Òt7OŽÓû6Î+ƒ)Ï™!þÕ©çgàY[IžåÃ+ª–RAæ´ ðɳ}Bëu¿•ï/ø‹vǧ8®ÂóQ·°Gº”¶û†Äq©þéÐdóšÊòµ/Î#‘ ˆÐgéš6)è)-†•­œxòÓL%aô¯HøuðÓPÖ¯£gfÜzMv¿~_ê÷´°2¦AÉöÏÃß…V>²‡|™×`µÏ:ÓJƒž½Sá'Á«]Æ).m‘¥•íö–Ik$j¯§jš dT*‘Û¥N¨­‚}…b•V1QVDlÒ|™¦iåÀ8Ç4²¥=J"#Ó'Þ®ìtëš“:ñMΟ­4Êj¼¼§J€àŒ{ÔNüàô4ˆw~'­V›»Éþu<¤)ç“UaŽ3ÉêhÓåþUVMËžãÒ¬“Œ`梛ÎO'9¤"¤€qêj8Väâ¬ÊN:þ ‡xçЄQ“ŸÄUGrAQÁõ«’/>ÍUa¼uõ=)\’ŒÄõì=j .•j` ãŽÂ¨JXŽ}Å L­3cÀöªs c’?:±67t'RMÄŸäj‘›(K€ç…×R\äƒE]ÌÏ\…°þnjt}ÙG­P€»ÔéÖ®/È2Äýj,ŽÂìMӜՀÛ~î2;ÕX™Xü§9«T1õôïFÃD±«7$ç>•mzŒd⪆!Glzu«1É´ŒœÐ2£§ãRÅ–wéU„ƒ'¨2*ÄlTã9“‡*{`T«Œ œý*°ê{ûÔ»ºcµL¤ÛŽõ&ü½OÒ«©b@ÇøT¨»[=½N¼r:T‘¨#“ŸqQ3p;ûP’Ç·¹¤2Ry9äzЪTÚ:šÏÃNAì)Îä.T~´ÆHnÄûSòÏJ‰2 1ý*RHêµ 38nzR…çý)p äš1z@8ò1ÓÚ˜™<“Ü⃑Û?*¿9?•;hƒƒšE^¤øS™r==è”p@úS@4g`ëŠE„‘Ügô©#`GpG­.ý­ƒúÓ° ÆIœúñA\Í8G&š¤ÏçHˆÁÉÇ5^êèZZO; É m#Ô€2•XuôÁëÚ±|i8¶ðv¿(ãËÓî_ò‰©ùuñOöÜø§ñM×4ó‡´;õ{gÒôëuWŠ.TÆÓ6\’‚3Ø_2Ú_ȈЅđá8Êö¯KñÖŽ³j0ê d‚òakÝ X–&Êà §¨ÏOj/­Œ‘A-cµF¤„“N0Ø9Éô<óÁh­$òˆô«¥`Ýx†IäT°W ÎX»ÿ±úÓ/O<6ÇlŒÆLábN\Ÿ¥iXxjçR*n¤6VýD¶do«ÐW%®Åyî§*{…cÉ÷=Mw¾¸ò´ 8äi¿Ë»ž?çŠA¡«m¦Úé6â+XõQÉú÷4±º»à°-ýÜŠ§¬_€Y Åq¾K™‚+c°,EgZÞ6­¶#Hƒ%êŰhûôîj•€égV‘c…N<Ö îÒŸ-Ò[­Üäª Ïeõ?ʪMx–Îò;mH“hfõ=OçV|+àÝOÇ·°¤QH–JÙ|穤Ýj'†ü){ãM q²Â0‘ t^ßã_\|ýž·“-ä@3È­‚ßãÒc懞2H¯¨4+(QGW$¦ç¢=4>ÔŠ>ð}¦k ¸@®‘"p1íš|#Ô…IÇlzÓ‚§½8#ž´ªüdqèi|¯,uÏÖ‘s“øâ˜ ¹³ƒùâ‰:ã$~ ƒíHäŒÉü¨U6¯9 m+ži¤·}E6i>ÏŽAbŠ_ Ôàf€qÀäJñ/‹ß4}Hj? ¼#©Yëu{Y­bµŒ™-ìÁ\I%Ì‹ÂmMÇo,NÑŽkãïþØž"ø»ñ&? x§V¼ø}àf¸òî—è^uˆƒµå|uÎm“°ã.¿ûDøwÀêq|ðÐÓo¯ʺñv¬ ·—àG'h=r}¾AŠRSÚ+_ÀÁÕ…·Ð¥ñ›öYÐ~|3¿Ô5ïDœbº;ÃJ•[‹«ÍÛL“6?ÓðÉ®ùa@ª zûÓÖâ8íÀ[J“êR›ë€~éûŠ~ëK[D¹•‘&’ÝäS Æ:b´®.ÖÚ9® ;aF“¾:Jo‚~ø‡ÇÓ+F«anßòÒ`K¢ÿŽ)m¸Òlå Ñ´è§24~|ƒò±lÿJé4k+ývålô‹ ¯î:yvèH_©è£ë_Mü:ý4`aŸX{­VN ŽFòãü—“øšúWÂ_ôZÅma§[Ú@½ÂÒ±u­¢GD0ò–úxöTÖu‹¨nõò ¹mS%Wê{šú«á÷Á+‚[…)Ž‹^Á§øn T ¨=+Z5‹1Ú°nRÜï…ÀÍÒ´8ì¢P gé[‘ÄŽ9¥U\ã‘»µHÉ“÷I¦„¬t+ òcÞ¦ 2‚NÆ£X“òŽ})áv©À#B£dÜzÐÊ1ÉÀö¥GÚ Ï­)‡¤vPW$Ô"‡Æ ã­Hnx÷è F}2h¬|²HéQJpr8µ) ç×Ú fÚ8ô˜Š“eŽéK¸ûÒÌêË‚1Û5,G´ÅbÙÈät≓ϵ7xa•ç¿45‡ÎIãÞ¡v,1ÉÅ,®T``ØÕGb­×ïS¸ :oM½=ê«¶ÕÁä˜éRù¿6'Ö rèÖ™²¸e ®Ø/×èjVs¼Ž£Þ«ÈB r}…;1Á_”ž½*¤À2ŸáÇzšF gw Ud™YNãŒzÒØL­#aN#¦*”§(@8÷«àƒŒg§"ªM‚0j‘ ©»‚Ç>µ^WR¸©&“ÃU;—Æ:àö5D2¼Î¡ù&Š­<„0à7¿J)Zæw=&ܪÇašÒŠuyü+&Bç«VïÈ=qëHëLÖWg‘VPñÆF=+27ÜA݃éW`“$dãúѱEèX‚9'ëV•÷È•V7Ωb”ïÜAR)W Ü8ëSÄÛAçT7ÊzSâmç' Ô ¾Ÿ1úz÷©S' LKÁ#éRG(ÝÎN: 7h’$œ{U˜X8ÀÎG­SŽ\‚I<ô©Ðí\ž=É  *=êDpzóïUb ô'>Â¥ ÆsŽ:ÓÂÜr J‡sc°ª~nWž1ÐR­ÁPIÇ=…!è\g xÎ=;RùøoµUe-ÇáJ®yÎGÓ­ w&ó p)áÉPz Œr0E<§Œj`=¦Ç|b‘e ÃŒc±¦ýã’¸ôÍ8:óô DÛÎ\qL$: gL7$SЇ<ä})Œ•p=½Í#I'‚šÀ#Í7'r•/@d$ç§½@îÛIãð4öÊŽ8j»¸ ƒžhòËöžð7ü+ÔÖrÃk¨ÞK HÌ­¹‚ûnÝô¬o~Ïþ(ñËÇ-Ìm¤iÎ~óÞ¸öúsâÿ‡‹î-nu >««lù2È ²gÐÕk/Yزˆ¡P£¦;U)É+U¼®Þ‡Êžý‹|7 l×’Ý´©°™Û8õ#Ð׆üLøâO†þ)} ßI¼ÕUÆû)í fY£= aÀ#£dñB+õÛJHmPz[5.^»M(¶ºšK ¬´?5üû$jÞ#eŸÅ BE„?t¼ÝIúbºߨJú{€¶šË,ÂÍ— =·w÷Üz~XÀϵZM*(Ï øÑÍ+î j|¥ðçöTÓü(#ß–޵ïþðE®— ¢B€/|t®É,T7AŽâ¬.@…J]ÍãN0Ø©ke1…*•eCvSqÀôâ óšf—UW ãžy¤AŽ};Š“’Iät4`®s€(äàž}iXß·J‰K|Ä}Ò})Cýhl~ŒÏ'­9ŽW=qH[wQÎ;ñO¡$AŽr¸í@—wlæ—ð@ö58€ lò G#=&ÉÆ3‚;Šic ;‡'½ §jÜÔM žx§F¯ÍïQ3gŽÀóí@ ‘·'B1U™°Ø#ZsI<`Ô3ÈW¨Ž(ê"9ˆé­žµ !‡áÞ!Ü75B\¢6åHD3;‚=y_J­$»”ðè3E®M> €;ãš©)$pZ‘ÁÁÁϵA!ÜÙ#úÓH›•™‚–SÉê9ªòH6Œ`cŽió`Ç#½S—nîä­c$˜*0æõª¸Œäúš–á·goúÕ3.Wæäš<ÌÛ"‘º|ÀQU¦q¸ 7”SЛž‘ ƒnp0xQV"bX`ðk" J'à¶qìjäz¤H¶:ÉÊ'ZLÙ…°2H« &F2O¦+=JŒ±9ö5jJ&Úe}piÝw*Ìß·^£êÒ¿§õ…«n;ûzµ³ 6íØ?CJéõ*ÌØYI8cš°ŒNz7Ò±WV…Ÿð±©cÕ!ÜB¿'ÔžeÜfÜrŽçÞ§@gŒšœ »=­G«CÞNÝ4ù£Ü«ªÛG^Õ(•]Go¥e6§©ˆã Ÿ©/ÇÐÑx÷™¢d*H‚F28§™‰Æ3zÈ}J±ýjxu8ñ÷¹t=(æ]ÂÌÓIב‚*hÔ¸}+0jq|gØÔñê*‚_§±¥tf˜P«ó“ï@|.ÊZ£ý­o#cq'èiË©@@ÁüÁ4Ô—p³/G1CÀàúÔÈ~nx¬ã©C»;²1ïR N AõÁ§Ì»ŽÌÑ,1Üæ•’On¨kÛ÷oÐÓ×T‰¿=ùŽh÷ 2é¶àE!LqÐúŠ ºœÍ“ŸCR¶¡PIê= ˸ìËÁ{O¡r:pjˆÕbÁ<{pÕ!ÏßÿÇM˸Y“’sÏ8íQʃnç^MR#æÏÕM0ê+œÈsì >eÜ,ɤ+Æ ©‹㎟JûBß{'×›ý£‘óÈÑte¢1×'éÅ.>NàU_í8€v=€<ÐuHˆcŸ¥>eÜ,ɘ£¿½9—zú{Õ3ªEë»ð4åÕ"±éÁ¤ä»…™h.ÓÈÎ)­Á#·µCý¥ž[œzþ£æÈíx¡Iw ¬@ƒ“ëOÚwžõöœNL“S‡ ƒÓ¡¢ñ}BÌ´WœcÚ£l7Ê3õ5]u(O;ºû…µKòÝ}+®â³-08è~´<ã…Wœ(2Oèj95(•r‡ô4î‚̱»rƒÐ y =½j—öœXÆz{¥Ñóõö4s$+2Ð9ä~´,…Ï ïT´â @§¢:¤=7sœŽ &ÐY—¥eÜž&å 1œõAµ8FrÙDZ¤W‡oÞúphº™uä 0}MW•pj uh¹ù³ŸcP>«–ý ˸Y–¤n=ýê”ÎÇ•ІãV‰q‡íކª J3Õ½‰Á¥uÜM2ã͵9ëèj›’ÎGJ­=ì.¹2`v ¨Ú¤A°ŸÀФ…f].Qwg#¥AæÎ «&­ô=ªï¨D>bùÔ]Éi–œ…ÜyªÎÙÎ}ÍV›TŒƒ†ü0j¹Õ!âê1À5W]ÄÑiØÇ\ô5JéŽN0\S%Ô£cؾ SŸPˆ’7œ÷àÒæ]Éi’,‡©ÚIþUZâN dZ­s©ÂÊJž½*¬šŠ1ÜÌZ«®ä;–&!û£(ÆàNéžµÔ#|üØ9éƒU¥¿POÍŒsÀªM_rbÉ‘’AÇ­R»—*qïëKý¡àœ¥gÏ©B„€ .¯¹àí¹¹ç s{™÷±ôŠDXÿÙbitpim-1.0.7+dfsg1/help/sanyo4900-poweroff.jpg0000644001616600161660000014101407764505651017114 0ustar amuamuÿØÿàJFIFÿþXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 95, Smoothing = 0 ÿÛC     ÿÛC  ÿÀ "ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ü<’bý˜’p¹÷Óò¬ëÛëkq›©1èHË7áSjºªé¶²Mòÿê÷àú{ÿõ«˜,óÊe‘Éf?ÅÞ$jŸØ#±JÄŽA<œÿ*±eã”°¬±7IÎç·Mc :åþanÄzíàŸóΤ]V•wE§ÎÀ®á²3ÈõþU¢£VKH¿¹êS[µ÷"|[’ ºaŒfK‚súzãò¡þ0jm–š=° ó3zØZÀƒÂž!»p–ú܇vÐÙŽ ÏcùJ´¿|x/NŸÿn¦.Q·û ïß¼&ݸÎw¸ëž*–- þæCÄáã¼×Þ‰n¾!ë7¤–µ´PW¢FÇLµfϯêa‰^/Aøþ5·ÁŸ‹2ªÉÃ0xL©·F˜æ=ªÛÇËÊítlôéî*x~|d›WÂ?±!ŠíÐî9ÌÉ' y3döòŸ?táý[{r?¹‡ÖpÖ¿:ûÑÊ˨^ÊÀÈüçð¨…Äêãë]Æ›û5~ÐÁÆð?Å÷DíâÛ×N~f…|¨zµÅºS¹„òò?z<È3wQ$€d9v5é§ö2ý­Ufý˜>!Ž/5˜ø6ô•$ÛÿÕ}ß*)dÏ÷cv褋ÿðÀÿ·ÚZÓþï≕d(Ñÿ¨åXJЕ#Éàù¨ñãûÈËÔªb¿çܾæGö†þ~Çÿ_æy4sÊ‹µe#× ië=Éi¤ã .kÔÿá„?mCrÙâj¤Ê·5 ¬`e ù<ån­˜z‹ˆG\ëXÁ8¿o=FÐ^[þÇ_#Ž%¸ð}ÜA•wb7ƹÂÛ\ÿ\dþéãƒÅËjrû™3\²’¼ëÁ/9%úž*%Ÿ•iŸV¥i%'™ñ5ô,ßðIßø)©Å÷ìEñ.e«ÜxRâ0Îf…”|ÆUÀç.½˜g ÿàŸ·:F· û#|DhÞßÎIcðÓ¡O&9÷nT#)crzpNRÀcZº¥/¹™G;ɤùV"ÿÇóõÝ¿ ýÙ7}ÐÄ(àq“W7÷1TÏ2j.ÓÄAzÊ?æ|¶K/ËŸ¯4¹“œg¯¯Zú¾ÿþ™ÿ>Óì›R¼ý‘5ø"ŽÕ®ÍygXÖ ''`Oîã“Éd+÷¾ZÉ×àÿðR/ëGÃúŸì•âQsö£n o*´‚ñì¶«Ç)FÍÂÆ É*G ¤·€ÆÇzrû˜©çÙ-_ƒMúN?æ|Ë—ÈÁ8?íQ¹‡!±_UøCþ¥ÿ6ñÕ§ö‡‡eMU âv’ëWÓíÀC ´á›p§ýUäôf?Àûun?à„?ðTëO0Ïû+N<¦u/Šô†!“í{‡}A±¹XÀêÊÿgãmfþàþÞÉšúÌ.·÷ãþgÇÀ~Å(gÇ¿½}†ÿðB?ø* S­¬¿³•²»ÍJŽ´èÖšïÄwð¯‘{tÐ[®ƒñFÕäfÆ; ¹ÄŒŒ‘Q,. ·¦úÌ05&£±m쮵ô<ê O>•§á}{RðÆ·o®éM Ö²‡ŽDlA¬|í`TôüjÌnYU³É+”ëi3ëïøzÄoùàŸ÷ÏÿcE|‹ç?÷›óÿëÑK^ìžX)§ãiH{ka#l ÌPôÉ8Ï_óŠÉ¶@]NxÝßÒ´ün¤k†Æîk>Õ[~Ü~2•¬‘ûYû éž!Ô?f‡iã ~cðö•4PÙø‹YTE[ßµ-üMn‘*˜  »Ø…‹t’ËêÞð>»§ÜY²xëÅí¾kX÷A®øpÞŒ–Ä$ÿËUãR,²ƒÂ¿cÔñ6¡û,ü5’ÃÚíÕ¼^±XM·†/åBψ*éá{´|æLžQº#óîˆý‹Ñ¼7áŸ\ê–$øT;¦·Û»Á—A²eðª_Á8'"1ÐçzŒ0E{ûF]J‚Ê(ɽmÉÍ®#.&ÄÒPn*s³ÿ·Ÿáo2ýîƒâû¯ÞÞKâ[ÐnfX¦ÔüDDªt?J¥Tjòƒ~±´<ùM!›³Ñ|â+¿Ž×*ú§ã)ã3ù·Þ*/!)„1âù˜ÐdóîP~ÿÍ•xÛÃZì^æð•ú ðýÄ—?mð“€àhš´Ÿ3ÿ¹bÛ—íænF¸†Ý·5SñEô©|¾gü$‚$Y|ÕoøHeŒ¨Wð)ÆT &2ª»>í´}Tè¥9[³81˜žZŠðÞÚ6Ö®ÞWÓS¯{_ÙxÂ×M»ñ,e<'m¶ÞÉ*`8𢽞@äT¤bË‘Rªâšîtc1Ta &šõlôï Xx›Ã:Ý•¹Ðü[¾-jÈ4èþ%fßý¯á †ÑÛŒD¸ ¥ƒ*.ÂÞT Ækº¯Œ®|ð^xoÄ/hþ¬ãÚáx“þ™”gv‚U•…ÆàÛŠmbÛ¶?›,ÞðüG¯ÛÙ˧èFšõ Ìº&€ÊðB‡þ)tP»e.ÃT«´W8Z·‚~éþS¼ðdžVí¼2ÿ h?ðÚ;6?±¯ÌòC+nSó4jµ:õð«¥µo¾úuóÒ×ù.³§ø¢ûÆw—ðƒø’|KràCá­mHa¬ëî3¿ÂYàG ÆVW%AIVÎ…–“â›{}&Ö×ÁZ‹ºÏk (þÔÆâSÂi³hðcù„•@0ÞL#–Hîõ¼Y/Ák}OQLø>êúï[¾HÝ—ÃEŠ®¡âèÐm}4ôQÐ}è@^aޝ|%¸ýŸŠ4\ºðkX[ø‡N’ê/|4±Ëh·žß¿bÔy¹Ë«HÁùšgƤ1>ÍE¾¤áªeî5*[G­ù¶·Ìâu/‡Zí·…ˆõ?‡Ó¨¾Ðî% |#~<ÂtZF*Òx3•÷nà!þW¹‹BÿᆥŒ§·†0[µÇˆþ{i<*ËS®N m—ÀÇ|%s°`F FJˆ"ÐÔ~0~Ïš§€aµº_Ã-§…<” ªxlÇÃÄÌØž)4±)é¼:…P ë-jœÓ©h´ÖïnÝ­O>ð‡ÀmGÅ×úm®¥ðÇK– ¬mÙMÇ…­ÐHŸeðÔhÌÏࣕär6Èÿ¼ÚÍ%ç ÿÃ9iZ‰šþïÀ^´X¬ï¥WÃÚK()§øšb¡[‡³û¥s•Qê«gàÿŒ_<ªèú^â ¬‰qLmüS¤ádoøC—y1kË–ßc189SÈ*ò.ÇÄ_Žþ—Á2Gá]gC™G‡¯}‡ÄdŠÑ<@vø©¦}®á``¤CJv£…’³»òÖÁ:w„¼"’Ÿy¨ð–‚Uu¸­·qᬰy—kt(Ê·Uà¯Ù‹Ã!ð5–©ªøoÂPا–êâ×Ã9\ø~Æ|b]7'|…‰Ýí+–ܳN=êïH¶Ô|N_ë©×Sð”a]);êîút×§O¼éü1ð/ö{ð}Ýæ§hþ]÷·f]Ú'‡ÔLçÅ–ä0{ŒG |0¡BíÄO>°ÿ¼%â˜u{½GÂeb»·º“ÍUN¥áG-ºªdœî,%˜¸`&®Ç?¼Cà ‹ëûŸ/ÚÎ{›hÓÅrBʼQ?#þ%/òóÄò¿;úì› ö‚øÅñËìþ"Õ6A®E=®¯©7–¶|?n¼u#+yˆ˜º¯Ìýå¾4ê¨JWŽŠÊªâRƒ®µµþï_™WÆß< âO]è^Ó<3§«xRæÐOç†âwSáýB?,Çç'ˈÑHWhm[jx_ôŸˆ“k—Ö^í!Ðü·G Ï•rtl`¥RN£À_ ür·v©w¬x–7cjdK=S^BwYxQJ‘®®8¸q·É#"mÝgAÖ|' î¡â a dçæYÌVf×êra¨f4§)Ýê¿—ñÛúgžxßö…Õ¬õÈ­ÅÔs^KªCp˜ñN™–-}¦Ê¬?â¶f9{Hðw–99ó$gŠÿjÍKMøLú+øâ(Êèò#/ü&sH«ý–"â1ãÀX””¢<œ"„ÆÈëÖ>.ëÞ"-–‹ xÉñ,yñXx‰Óhñ›,D…Ë G7n@Š]¿ ᯇ¿<_à‹8µ{O­´¾Xf3ÛøÂA#I¡[«±c™6–gÎÒ>S•a眘xÓNRéÜß ³ZÕ¹Òj7[Çï[~:oã‹Þ1ñg‰¤¹ŸÅòE'ö¼·”ñ¸+³R×\.SÇ‘Œ®î @‰}¬òÜhüø_ñ{Å÷¶6‘x‹Z‚ žÊ4šOj¦2sáH±º/3#ÀÁW¨Uu‚+¢4›]Jñ¼ÒEàŸ]íig1ßè!¹ 6«¬JF±$pH’NIíÏ7ÅÏè¿|T/-tý3áŠÅi–¾×û7†—n×ðë¡£=c<7+‡IËMÑtÚ‹Z>ÿðNúù–aJµ©Ó—þ÷ôëýv9È>xžÛA¹ºÔ¼m®^Þ6ƒ$ê¿ð•k/fÒ|E6ܲœå×åp¸á¼·’Wø·þDð?ˆ¼;û$¹ýš¼/}¯h7ðø*¥Õÿ‡î-™ËAs¹|Ùü7§òL`ì[–ÈÁòJ*y<¸SP¯$ïîKÿI=܃4Ì+ç˜ÕMFSú.¾]ÿ«2Œwõ©­Ž$öÅG*œòj’Ü„€zâ¿ EñFóWÓµßDGŠžHâaá¶.ˆõÉ?Ûq¨oî•( ØÊ×8úͯŽ×áÅÌ–#ñ—/„LªÄz©WQáÃ;|XËŽß,„… Û?K Eñ\Ûx‚2wª­J®þVÛOCž›Å~¶Ñts‰t2dÒ¬£{3ªh±)Q§øV6Éÿ„‰ýÖÏÍ“µ²TÇ#Zåø—Æš!´¼…õÍ"Y'Óîbqý»¤oâ·UñGAç®v‘p„öí¹V*±Õ?iWz—…%¾kùká™^ÒmBM}•[þ½kç $ò±œÆäáø,Í›ÇZF·­|EÑôIü5<‹ëxQWEUVƥᣠ²xYhd;6…ÏT;OãÏËáï…ž'Ô<ûé¼/?˜Ã¶ìC7‡n&%™|Žp.%œãÃ,R«ˆtœwZyÓÀ`Þ><•’׳קsèmKÄ6ñj·Ëuã ¶ñZHñ·þk±±¤ˆÿ&q òŽGËþàkñÇÄ7ìô[ø¾IßÃú|R<^¼Ë!:O„['É´|rHËŒ7äÜðZÇÃÍgÄž3ŸJoØ¡¹ñ1/n|'§Œ¹Öµ…Ë4¾rFl‚ò9!r§Ã·Áسï‘6»á_\³²™ôH™„ÓvïøF _¹ÜyÁ|·Í<²Vj$Ü:÷ÿ€KÀB¦)óÖ½•íËÛ[^ÿמƦ¥{âËæ¿›X‹ÅŠ'Óîᤵñ!”ƒÅñà,º{€”¶íÝû¼ÉW½‡Åþ4²ñEábÿ·’HãmTÉ›ûkD”’%ðÚ°«‘¸ãj’±¯âßÙÿÂÚ/‡¯uk-?Ãö­o¡Op“ÚhšhJéž,˜.… 5¾Fc€0 ¢Gðá­Ï`±´‡Ãgìž'Xä‡û?CGb†2®"š¥QÅod¾]ÿ¯S'Ãß>%x‡àõÕ»xRì[¶…åDcÒ5S’Þ†-ÊÏá¢1åÍ‘—ƾb7<šQë~=¼Öæ×­<ro—YšV‡û*ð0ßë“’wxfg?½2„…<0U{Àÿ< oðóO»Ö"ð’$ÞIdimü=Å#hZríU0DÀ ¾C7·ÝÚ­§éöÿ³÷€õK›Ç—ÂI?ö¸Ýrnô´ÿiê¬N^DÁ*òä¾i„„â•›ò=YäÙÕt“Qîþ^}Ïð‚þ6ø®êÎ7ð-ºØˆíã;ì¥+±bðê È|(T|–ëò”UÂ08XœOˆß üe.‹wgqá;YtÉö Ð¢É_ì½bNU¼ròÜ|¸'qc÷ÎÓtߎŸ 4KNÐmµÏ |óé„·ö–‡0Ý𒃃vJŽHÈaŒÜ6G"ñŸÿh߆6þºº:dž>ØÞ“÷?ÛþP\hšºd]c‚Âæ!-p .ÐcCÚ:Õ_2KÈè¥CCÜ\›³Öû™:§ì©á÷Õm­u‡¾üQ›<þÒC–:Ø@ÀÉá•@Ý·c…RP¡–_ |ð÷€mïâøwá’Òhé,O'†ôB|ƒ¥hŽ£/á¢Ã‹—ኑå[FƒŸŸöÎð.«âù¦²ñ/†âøJ|Ä<_áÕiJxƒíÿ D!‰òœçi_™›;\É<_ ¾?éÚ‡ôÝ2ÛÇ1·—DŽÖ)"ñFãIðü{7ÀÌÛÊ6à ò CßR†Q‹æE¬Kyªøg 1Õo7ü5  x€ªî}‰ÄÄ cå!pË ÓðÇìåû;x{ÆÑj3Cà•žçZƒí2&“᱈d½ðÚH¥£ÓWr´2Î[*€‡l’$i/ã/×z‡Šõ·‹ì¢3\\´’[øŠÐ UÜÆ@Ëã ¥Ã}à¡_ ‘"èÞ)ñfµâûx.¾!ÝEjvÖåÿá(–Cæ CI‡§e,wpJÁ•ºº˜Ó£IR’O§bž7<Ê*¤^¯ºòéäox‡Á?³¬>yãÇ#ø]İÁeᘘÞÔŽ0¶q2Ÿ3` ¶6ü¢8¾ÿƒˆ¬¾/ìÓiÃè|7Õ¿Å –eÑ×E3ù&û_?ddŸf<“‚ïT’ŒUçúû]øšÚÂß´¯Ä¹¯&}%¥–É|{8hiÌ’„>bòv•)»_,°HOÈׂ߱tsöK𮧪øwIa„$“ΟAÓNdÞ'*KO¡Lòsm-çÈû•0û„+gô6ðãá~§ãµ‡Rµðœ¯‰¤Søwè¢?øIt¨Ù>@G–猕Øz`“þÛ–Ò®òª-7nH~HþnÎjÓ‡b×$_ï*~oç÷ñYøËUøyt·ÞÕÙÂ[ ?Øú¾ÔÝá[d8#Ân#eß÷€;ä%“qsµq¥x¾ÿÆwÚð}óOÿ “χõ âmâ9˜äø1›?+¥ ¬˜²äf…ºÃÙY¬üÿÂ&Rkƒá}^雑·³ó¸aÑù$š>–ÏUøˆu-EðnS[¹EþvVO¶xÂ54fè™ùâ ¼Á õˉT!.g§™ó_\ÁG%*q·{z+?ëK_Ãþ9¸¿Ó4/øB¶1ºÓ eOÌø:S»Á8Á&%Ç”F$,ŠËÿ¯|+ñ¬ž’ðü<‰‡ü#ís4³h €ìmvRÿ?ÐÝ»™7nLù ƒqoéÚw޾ øW^Òµ0Þ ¢Ö´Û¥1jMÿñ3ðdÄánWåKƒ¹›1|§~Jçã·€á¤Þ‰¼ÒGàÉ,Òhu ¤»‡…µ+p‹åêJÀ‡tåË*¡Ñb‡tk%5Íøö;qx¬© ´ënþ~[êlé_µ­7Ç’húßÃÏýª_ù o‰i T_MÊÕj£=>@›8K(èxWös²ñ6ƒš‡tk¦“N·{x×FÓÍ ¦øXc/… ©"üH“Îwá§šã®¶øëáøþHtMwÁ³Æ#lý¬ ù$\†Î³÷OFøà½S@Ó­D¯®4¤¬É6¬öÁáÅ&Aö²X‘¸ciùC‚¸FþN#>¥#öqOSŸÃøÉf“•J’KµîÏŸ.ü-ã¯hrèú—Ä‚ÙôV†]FÙÕ#kZ#Çü&L§ä¹˜äm*³Ð4äñF∭ìüI)ݪù®£W‘—ûRãþ·Ú|÷c¼ ñ•>µãiuo è:–¥æx†4‡D¹i.'þÚv:ËcÌeÉÆ"9ó ,Q”ïò¹ï|O×5›;/ë3Gc¬GæOi¢ëS&Z‹r#Çc %E£‚2F"–&¾?imé¡ìcpR^ë“{üZ÷Ó]?áŒ+¿øŠ×@²Ó´ïË GI‡lQjó)ÛöKŒGâ¥'ÜDp»¾òIdi8kß5KëÏø®µT‹÷òF¯vT·•âGb…|FnkAÈ•FÐà¡Ýnø_âw‹¯-íôÉ´m~igÑÒ%Ù¡ëó*ÿīÊU¶é7n$õBšÙ ½„Üů^3‹XÔaÓüâ[k‚·2NƒÂ>"@SÊñd  þ^¦UŠòAF‘;°X,=-’¿Vsæõ³)aš×ÊÏËÔìÅ–¿gâÍ6ÂÿÅZìñÿÂO`…®õ½YˆÿŠƒÃ¨õÉȲðyÜ9\†ˆ`ø¾ÇPÖþÃp3ã ­N½d'c籫ÏÊkþ'ñ®©ã.á| ®ÅøŽÚâv¾ð^¯jn³¡0\ÉàøƒÇ”HvXí@ E\ä÷ºö¯ðõà«ï5¼1„—þ‹¶yþÈã!™üÅ­Ë6L¸;˜ï ^CôÇ ª¦Ÿõ÷2±¹ÛÀ¤×+M­útëçßSÛü¢è_ð”j6’kž7’câ{ÈÑ#Ô|DÀ¨ñˆ6c½ p©n+ÎÝÙ-lž¹Òt7´³¿»ñfÙm¡TK85ó8ÿDðжà>uÃyÃmÚ»‘ ¿/¶¯%ÏŠoYþÝ^ÜE­Ü>óáÔۢꚫ.Ó/€®CA ãi ¬0¦6X9KÍýôÛK™<§ÃŸRÄ|nR%hü1óymàœ?ü|€TƬŸÆ®ÂéU£N¬-ìŸô¶5Èéf¾ÒQœmuÄï÷TüUøƒá­"ÚmOL›Å’Ht«»‰D¶!‘òt¯:aŒ_ßxa+p·|¾sgëÿ–ÿâ=¹·Ò+ñž§jlö×þÒb‘´«©§”xOŒ¨þËÖ¦.âBHdï'(X8eó­:ü6ø{?Äq£j‡í¢›ÄqA:?„|?·z(L7„‚à Q´(L¸ÚVÖ4y¹oª=\&ÓÅÂuâ¤Ô¾]÷×üŽÂóÆ5OC£>ƒâÉ¢_ ÇËŸˆ÷ºÿÂ3¥ÀÌæMPS3’vírÙ(á®~Dÿ‚Ñ®·}ðSÕ5mRþ.@”\j~©õ?°\ÞhV`¹,ù&àØG—##­¯·é~ð›àè'›Oð\1Ë¥@‘½ÖáÀK6“¢Ë†c ‚¹2JÛË|ÇÌbùó&?6ÿÁXtχ–Ÿ³…Í׆­¼9ÛøÆÄÛ¦•‚&0ý»Äêä›++iöâ;p@1îU‹‹0¡[û.³ohËÿI>Ç_  ÃF_Ä‚ÛÏKzkøŸšR¿1f¥µä§¯nôÙT’ryõïO³èsÎ:q_“¾t$ó#þèüè£1ÿÏCùÑ@‹ž)!µÉi H'€qÍW¶}²ÁÁã½Kâ_í‰~AîÝœñœÔ0/ŒœƒÉǽGìì5ãéÿ±w…£mL‚î/ ^FÈú¤m|VH`|A âu²¶$UÙ t[¯¡lü{.—ãÒtÏX}ª?# ¾$µÝ¸øŠÑ”•ÿ„ÙIæÃ,OÞs%Û|ûûê-»ý‚ô§kž(û<Õ|„Šë\û:“§xŘF-î¦NÔŒ¸°_2g›ëKMKÇÓüT»6’xØZÇã|´RÂSµ€ñ{@1w®Ü–ŒDakûf]‡©<²‡½½8=ü‘üÝœfq£Ä·ËðÕ«}/{Mí÷hxF•Ž5_ ­­ßQüß Å(ž dÊÃð¨ãÆñáâÚrTaAÁgÖý—ǬêÚÚøýÕî¥y$ׯd%ñ|Á”§$^U&?y19W“í×´/ˆ>:‹A¶´¶ÒüQå Ù,)meâXh> P¤G¥ÈÊ(ÎÖ8J´Ku³ãOŠ_^-JX¼1â…ûeá2M£xŒI6þ7ç} œÿ¥3\`büK<=Uðóú¤uëÜð¨fp–:NPv³·»ÿúûÌÉ<9ñ;Xø…o¤éÞ3Õ$•u»(U£ÖõR¥Ž³á»”§Œ›i*œd1Œ8eÚsvø£{ยOk2E…7DSTÖØ*ÿÂ0Ó*O:ƒå΋‘G–ªR =Pø‰ñ+Nñ¦µ†|D“ÂU Ò<Þ×üÄÙâ- ö 2ö± \vEØKagöh2ø‡geªê¾ÔWF´ðõ½½ü—ž¿ ,Cð"#øAÆ<§‘²®ÛÜ7« ®yêMaa:’ÕrÜr¬ñ5¢’iߢ]_OŸÎÇÒ³ïì½â­u]XÖ|Roï5éJ·ø„ìQâ-}: VF–d“vòß,ÅÞeï?gÙVÏAkoxÊ?\gç,Nú´²yÒiþuuiŒBK§ä)$nUp¥м5àÛÊ’éžP ½ß™ü,Ê]JYA›Ããä€AÌ¿,Ç&]"ïK6ú5߇!Y¦‚Þá>S½| $Â:UïÎDP¶Ÿ›K=ÆVNvmüíØûÌOá©ÓUê¦ãé¡èÞðæ—á],ôýR ®F¦ïöu—UdÃòäg ’xd9É›Ål¿ŽŒ¶>ðü:ÅÅì:µ‡˜ÖÖ:«¬ûRÁ÷Èb´bu­Ê ^"«‚²5·ƒþÓŸµn£sáWLøsáèÌ—:]ÝÓÝÏáKˆDI£ê·žj³ø[i8ºˆvÉ;÷ßq"ðŸ?c{¿Œ>>Ô¼Gã­#FŠÒoœÝjЮd—'Ö`xvÝøYH9†ƒ´€ð©0@ž¶W–VÂc+né™ãç8ü'.úµ Æ;7¢ÓmÓ×âO‰ãÑΠøÊÚ&ž¬n4Édi¾z¤z{îWý×ÊÐ6k5ð—ÄM3AÖ.õ ;ÄRJ4ýBH$:Gˆ¢™ÿÑüTwn›F9ù|È,Yq4ÑýMð'öøc§é:¬þðÁ‘t›FÍá½ؼ.åŽtm¤’e9'þZÈIý䬚?bþ$Ð/…¦á­8&z¬©á½•ÓüR‘Éòi뵃ˆ˜p¸òÀÀeP=Z¹Å&¥¦½Œ#‡oj;$¬›þ¿®‡Ê>¯ñGÓU>ñLõ葜x]D’aâ=-¾Eÿ„]º˜˜ldÎB©@Á-Ç×_³L~-_ÙÓL×n<;u8¼ðžכD½c ®‡mnv‰<*Ä#¢ÈfVpÒeƒq_?cÏÙâÏTþÔŽÏÀQ ñq¬O¤øYD°ÿÂDE‰­r‹åËçk.ÒC -Ä?³_ˆ¾ø;áL^³ñg…m ÁÝ.’ãˆç‘‰!@ Ë(&X¹OŠþø¢èÚž¡¡øedþ¹fìÿ±|]Á1ÙG†2Ä£0AãoÊbwâ?Ú[ÄZ6©e{£ê¥’)lJ2ø“O,« Ä ñ€f8„Á‡Î3¹Yd–Ûʾ |mñ‰¼?y}wñâbú3«(ñ…»(_ìs)´xѶŒNãJáDxd¶ŸºÕióîÉÌ2Üî«„ª8Æ/^¾Zt׿¶ó>£ñÏÅÙ‚ËÆvVº.àÛcÿ u»K}m.‡îWÅð‡Fd´PȉgåwÈ–ãÄæñoÁßxíøNàŸ,/$ÿðŠäÉÿÞ‚…~v‰Û$€g‘å`a•Ú >_ˆ:ÏàŽãÄzóÂÚUp<¡´íŠu§iÖŠŠ.¾ž-ìھﭺLØ¿ñ¿ìã‰/m4GðœJ5ç’ëÃ9Ùöï:0ÚH mžÐppAŒm*cŠl|Cø3º~ˆ5? ý™u˜|zLJòŸ £®SÄ;Så¶îó3€ä°ÄÓG×Z|#ø‘?ˆïåŸÅ>,·ŒÉ{+•ñ&¸Bíÿ„ÉÉÞ+ñJ|MmE/ˆ¼I„Ý­xZíUà Hqß1UYcŽ:m¹FöÔÏ›¬49•¥î»=ztß§oøÈ)â /¹¿ðóÿÅÈ€XñŽ9"›p9 7NøëKj,ØãµøÑý[­‹[íÿç“~BŠo•ÿMò¢€Ô—Ä€ÿl8#*ŽAãUmÎ%ð@õ5cÄ%Vä`ªÿè"ªBK>1Ðc!¨?Z¿b/†š¾½û xsÄÖþCðƲåô(œIåYx•‹ù’xZç8L7Ûd?»`­Bm~—?u§ñÕΜ¾Ò2(¸¼¶Ÿþ= 6½¯ÜsŸ¢Vàó¸Œ>yGV½ý³/Ã¥—á[{Ó‡þ’çßÿµñ±”Zµjš«;_‰ÆøoöT‡QÒ, èJòYÙ0eдFÜ%±ðŽ?æSoú|<™,¯4·{·ÿ³¾…£i—·Óx;ÊðX\ÉåchAÔ­‡‹ä辈0 ãj°eŒd:Æ-³ôÚbâÛPÓÓGñ-‘I§ùÛÄz:–ßÁ‘g#ÅÑò ‚ €åΆ9ËÙ>Aãé¦ÀJ[\i ±kºyXi^#/³Åò"*¥Û™UB UÛ¼ez8L¥7¢×úûŽl®…lÇ0P„[æV[oç¯™ÎøwönðŒþ.XøZx6[gñtÜGoeá„_!|SclGö,bQ±[ ¸FÆ rŸío³çÁý à†…á h>]ž‚¶Ú5»ÜÎt(C1%·;0rIÈ9$àþëÁ:_†tøíõñMC?ˆÆ¥xn¼knË·ûj+æàx®xþS°#'–-—gÆ÷ÅÚZo†ºŸð£á/Š/o.Ö oµ¸56’eœÚÒ£1Q"¶älíbÃ}~cļ[J8w(ÊÑKæÿàŸµø}ámœfð„èÉu¼“QŠ[·ä»nßAÿµ§í1ðãÀ:v¯ð/áö…ËϨÇâGu…»~ñ®¬vË´áOš’#ƒæm£ðCãïÃ_‹Û|0ñÄúDºÜK–ñ^éà^ªêqº¡H¦D€ÛÛhñ`³ƒ&G!¶™>dÓ&ñ èpÛZÜk ƒF…GÙõ •USeh1ÿ!\2½8cøBìÜiÚ­ÅÝÄs^ê%YåÝ ·÷ä€_VnGöƒ rzõÉ㓟ÄaÄXÈæY„šk§K]w?·ñ^pÍ~YD©®þÓísu~›{»YwÔg‰fÿx+Ä×úiñ†%Ò#ðýÌ |.4PDØW¶±HѦµœîPNÒH5è]?Çz ¶ª÷>û(‚Ó^–mBHuËþ* ]åb5´ÚŸëÉܬ3+ÞG&×Àߊð²l/¾übñf»ivÖsÇeâ ÍoQ†& ’!Y±z«¼½ÄI*“Ç÷ŽG´j^ðv›¾ú?ˆ 9k©di#Ôge*Ӽà ò¶YwqŽãŒvý‹,âúy­:u*Omv½üÏá_<"Íò|Î¥QçKg¸µ½×®ýÖÌù»à߈g× ¶þÊñ5–ácka5X >,|<¡Á_!;sl6Kc$±RÖþ:|oø;ð#E›\ø¯ñ&[›o%ì,uºÒÿLjšDB³•-·`Ü£*YD@|5ð_‡¬çÿ„“H×ï§û=±…<›û¡ iàìU“€>Æc÷„`‚U¿>%þÕ¾0ñOü+Kø§ñûNÔ5½;D×àÆâ®ïlííã/û¨¡¸3à¶Ó9V,H#8ÅW©N­JW••Ò]]7†¸g/U)ÑÆ%t›}ϱ>*þßÞÓ¢ÓÇ‹t¿ˆþÓu[»-WWðŽ»oài­åâx•«#‘œ.0 cçÓø7â•á=Ç^ñ½Äº]æ YÝÙø‚ýØ“@²ðxÀ(æ¸Ú!h*‹oõgüàF…ÿ+ýŽü!qû9Áe=Ή®Yß‹+e#Xv=˜1Âá ‡Q°«´g€1Å|Lý©ÿb¿Øƒörð¿Ã=KRÕ¼_ [̦é2ZßÞÛ3ù >ÕUõc€"NI'w6;ÄÒ©FTýèÙ¹.—]½O®ÆðvS<¶µ .I¹¨Ç«å¶ïe£ê´ÞçÌ—9ø•f—º–»«j€Uƶ¿½’UdñY?<ž+™·`ÉÎóÃ.0 4Þ£§øÓ\ñ_GÚãñLÒ/Š#ò–=KPo-‰ìvð|E*à’«…T\Æz+â¿ø)¿ì/i4º¬? 'ÓmÖY/ì¦c+ÅáÙ`@Ò¤aTÉüQ®À¯¬|a†å=7ï|>o±ùåêF¬êF¯ðô’ºÑ;ú³Ì'ñÇÄ1àtÒô}GWû?ü"ˆnVéµÙ£—Ñ\pšÉa#`4màüÆR&íþ|(ø…¯xûZ²Ñâñ‹XÛêÓ:\*x”Éfÿű?˜ëtĹ–H°Ýq& -æH|®ëö§ÿ‚{Ϭ^xÛI³eÓ|9,°x†K:ëNº §ÃÃÂ4gyO–«Ÿ,.D¬‡,}cöfÿ‚‚þÀ𾛝 Z?ø. I§hä×4½?ÎÔ§¹“ÎTµðûb6/‚í†S°Ÿ½ËŒâªsÂ{:Påw¶½íøn—Ó}üŸÃ `3Oo+NÑrÓUkÛϪ|Ëu½–ç‘x£öéø/§þÐsü*µðoÄ;¸luËxnS±½óKkF> :S 4A×t@ªð±z/Å‚’ü<ð Æ…¬øOijH<;sÏi¥x‹K‡5x7)“J%Fù†æ<1äüæNgö5ðÏü߯·=ÔžøW·#Is¨?‰F5-9nšDŽÂM% »™@UÆ1`]í%ÿÿ‚zxgÅÚE—€`ðw‹ì®J¦¡©.kftµ{{ˆäwGÐ :(pìç<…BAÊËø‚¥}g¼#¥ºÞ׿«Ml}p„±x,,i¾Z“\Íéf›²²énYjí~ÖZõÖ"ôx¾ãV¶øwãWò|Y$°ðî¶G”¾*Ô.Õ™F:©ÀâŒd”ømàOˆ>"6šFŸðãSkdÑ Žlé¤2døV$fðä‹÷`w ©ÈV8)¹däþ'ÿÁ[d ;ÆVºm¿ì© jÚ=åòµ¯‰M2+k¨|ù|\èI1rUo•¾c’ùö_Ú“öØýŽ?eOÙÇFøÕàø{Å·> ÓåC·K´ÓÜôµ[ÚÝüþ_©òU|:Æ**­yÞÉt½í·•ì÷¶ÞZs¿|â¡®KdþÔ×X»´Ô/-m¿áº•¾dñKXxdä·¨‚·,OÌ7.ņ¿_ZµÓm<äÈ|Kq´Ú4P‰Kkši~'Ò¼o¢êþ‡ûRûJ¼I>Ù¢Û̹մ› ]ò ‚Ó¼n“/fC›K5Í*Q—Ùz>ú&ÿ;|ޏz\)“Q¬¾ÜnÕ´Wm%Òú$ÿ¤|Åá?Ù¿_ñWÂ#«Íá1¡—Âм»´=,†OøGlßqwðS8%oŸ4Û¹Ü$š»Màf½¦øªÿPÿ„GK»kéeaý£ïMš·Š6œ·„%#þl±|Ëÿeø§âßÿÁ?5&÷ÄwÚ t7kFñ7*ª”ù#ñmÿgòæF6ÿ«6㌣—Wó§.ÿÊÏs‡±tjñ> iYºÐêºÉ>]t?gPàç=}éÖdî$ƒœSfd(ü…:ÈaŽXŽ8Å~*_¢Ç?óÒ?ÊŠ??Ëÿ­E¨¾ R5YÀÏÊOä*¬9Ýò¯JµâuiyddŽü ÕkuÜùñ“@#ö3þ ­àx¯þ ã¤ëzV«®Ãk›âXáŽËWÕÖ0a°¾wÄVúìüÂU\ a¸Ê‹ p·?VOðÿÆZ'Œõ+Kox½YtÇãŸø'·ãØ¿aýMÒ|3{§®•âXÄé¡ÞÏ )´™dÓÂ÷ëǚđvBï}ËnÚoºñµ/ˆºæ£àùaWÖog’?øG/wÉ1Ô˜™ þSà1ÿX鸗IœøÙ­üRø'¨é‰kkák¯êË Ú&¦|'¥[ù¬â)&SZnŒF“@›Ø)‘› );G瘵[ †öÕS·øoøs¾dXœ¿9Ƭ¤ú/hÕíº»£¿[ok›‘k:|P¼GÀ_³ìÊÐ.Q<7¨0?»‹åX“î…Ÿ-í¿Ùßö抷/$Þø ˆ[Âw…°Zl3gMB³çï1ùûVxÝ#Fð‰ÆÒÇîAÑ ÐY»pmAçírãÛñ«SþÚÿ´ëY.4¯øq$Ž9%&£ŽV;Æ Ä`Œ=´g¡åHêH¯ö è¤öþWÿÉŸl¸>k›ÙÃÿ¯þPÏh°ñ‡´Û¹ãŽO…0È6¢‹Â7C-æ" ,gÇ¿x"Èe=¿„çâ/„`ñ>ŸªxkQ³mA`c¤èsÄ· Q\" -Óªá†ùYy8ËyÃÚã/Ä«ÍKí4]/ú3¶§ªÿfè§Ê ½Òк—i#…ãùrSr¹ÛžGöý¬ü¯ø³VþËñ΄Þ°†=CK,‘§ü$ïyó ɯ÷²× Ã3"OôÜ9‚¯œUöÑO‘ui«ÿäÒÒçã^#æ´xr£À7lìŸ,£._î·ì¡f÷ßE¹ôÙñ÷‡|-¥5µÌsE¥Æè®Ði×2Ï-‚®me2ö”Âí;·±éóÌÿø,Oüâµ×íkð³L}OC»…¥¿ÓL¶RiM ©.Ê’Û@Ì“<ŒciçœmÿÁR>>èž øá¿xkÆÚG›®ëwÖšÒXK¥K$–‘Í`ë—­"m·oVˆ#Ì`I¨¾ þÒ¿—þ ŽžÖ|}¦¬ ðçP²-6µc³½•ñå´£e,Wjå#$‘Ó;×ê+V«CJ”#xÎ÷ù4—ÍêþGæË! ¦®.¤×´ƒKå$ÝþM/½Ál_‰_ ¿iO| Óïc½Ò¼A©ùWp^^õU™pl PoòÃ0BûAäf¸ø(¾·à¿ŒßðP™|-¡ZÙ[iR : PÆŠí­¼Â#{x ù‰e‹ç9e/ç¼ÿ‚e|ÖuïÚö÷öžøyáÆÐ<àûÙïÑ¥¾1ÙÇkö†DŒOq«Æ•6]òUsêkÁþ jZf·ûiìIâˆà±O5êÉm+mž>m_f7g-æ?s½Èäbæ°Ôñõðý!eÛ›VÚû¢™ôùuoˆË0ø§f䛾ü·ÑK½ÓmeÿÁ`ÿgÏßÿb_‡P^økëâŸZéÚTê\ؤ¬ý¦ò¦ÅTÔµ¸‡\‚A#Æ¿c}CÃVðO?Ú_®‹vº§„ìcÒ&—QÓ•ø½s©ó†1æ#|ÏóáN=¿üö‡OÚ?ã§…þü×®õÇ·´6÷–º=é»Y®Ì—G[겤Ž7²•UR3´³…TWöÑÑ&øÖúÅ–ÅìÑEî£kjþïyIU‰Woqm½÷Áù[ö ø;§üwýµ4:óW²“K²ÕÖêîÎãU†î-•˜°µDݹ }ÿ6œe¾ÉøCñWáÿìõÿ×µ=7ã:ÄmRXãÓôÍ/Å3è™õ¨VGp%/µÙ‡–ŠÛU›€ gÿ_ÅûQë¾"x™ìžÃÂ×Ó“>£q²ªobr—Avn c®ÏŸRUÖMZ¥µ«U%ÞÎJ?“=HÇŸ‰¢¢×- WWþhSrûœ¿þ ¥â/]þÙžð?‚üKØx{ÃVš<¶V~![¯±ùW÷È`š¼¯íu‰†)éèðRÏøÛörÿ‚g|'ø%¦ëóO£ø’+›]N ?Uâg­.уV™ S!Â<•ŒüßûYx²ÓãGüÅÞ%Ò|`n¼0þ:¿†Ã\mJy,Úѯ¦thå1ºyYmà! wewrÇè_ø8cÅ~-ñ߀<"žÖΧڰӵ «嵘Éa¦4–Ͱ"BÛ1‚˸’ÛWÒtÿã §EmN”ŸÏHé÷\ñÜßúµÞêµ}tÚÊê÷íÎ×›={þM øƒþľ+±×oãò|Mz²–ׯ’IØKpªkP #¯ÍÔîP §»|jýš¼yã}zÜ7Ä}Ö¡YTø£_Bë(˜?…1e/ž?à—?·—<û'^|?ðoìÙñGYMM’óÆþá˜äÓíç[YÄžcÔ€SiÓ$ ñŒWqðWþ G'í7­x¦ßOðÛê>×<Ø›NÐ.^hu(LjÛt‹©Œá‡ÍòD¿p*äZá¼F# [™i)NKç);/ÆÇ‹â&QK1ÂN¬¿‡Nœ[Õ|1ŒS;·Ã¯ÙwÅoƒcšËÄ>&†AáË|$Zæ¼âGm'Ã<,qkÁv0M¡ ¡•«®x¼uª>·¬ø˜¡¿‘§‡Uת1ã¶ûÇPÞòU·4˜–ßÉ”yÆ›ñcã‹a¶Òô¯ MöFµ¶Œùú%Ùx û/†0xFà£ÇF0ÝYpÓòÿ4ÿ‰:ÄWk®è1ÿ³îæ1]èˆÛ XøªNQü ûþ{UX0ûÁ€6ß±S£˜N‡-YjŸCù~¾#!Ã)ºPz­Ýº?ÒÚÞÝy×­ Óþ+XëZ/Œä‰L¼¤´"OŠÿà°×º¶£ÿËÔí[Añ)…Âó}ºïJ×¾Î;;dæK›3l™232–ß•fߺãÝ.>ÚÚø¦ÎÚïÁÚ~gŠÒ!xkKBY|Aa|Â'wÙשRq‚o™à©¼#¤Á9u­R×GÑâ¾K ¼Èt}.…‘¬|=#14+y°|ù²VéYˆl«þõS£ ðÀÕo­9ÿé,®Ä帜Ûì–ªµ-­ÿ?"×OéŒ3’‚(´$HAôêM,à‡Ø`ÒZÞ.NΆ¿?­KOCE/ï¼ï“Eâ@«.ÖÝÂäçý‘U­W|€Žƒœæ­ø¥vëR.ÁѨ-ž\ätâ-Õø'§Ãÿ jÿ±­j7>I.bñ/šºŒþîÞV/{hn2Ì3(ÀŒ˜Êw‡ßy7o]þænøÛáÇ‚µ­1Û_ð4Au»ßEªøY²S𫙉‹QáJy­ÁÚs¿Yž9>?hþó޳á´'…Õ¡xõ_ Æé!ðô †Æ¨¤#cC»<½È!·ì´ÝWâw‰>!éö6>/ñÃGâûPð.»ª4Љ´X0›o1©ötnUÕšß#Â>*ø›ám¥å­þ¾ÑÇàÄyDsë»UO…´¦1±‡ÄwåÛ´&Ìv²C'¡Š§R¥nZ‘]:5–ç8zX/iJ¤•®·ÿ7ç÷ûeêZGĉ/ô¯øfÒ_øIgž ºß‡M{Ä£îo…`ËÏÞ0Ápãí¿R|ý¯þüXð"ü-ñÞ­£ÜÛHÖIqa‰ô¨LÒÃk¢”v’=xe‘Ô·åXpêž ¡ü=¸³mUõ¯ø©®£»ÕRu‡SñyÔ¯áËVú…–°ÒÅß§EsɰcŽGky]1,¨H9Rc‡àoÀíkã6² Õ¼Q{cáøñ¡ª^â3,Ž. kkv:«F× ^C!GùV7V# ¨ý¿ÿk[O|"ð±4Ý_PI¼5Ú™ôÝRê¦]úôLŸj–l:»Àë!bFËclò7âgíià/…Þ ±øSð{Gñ7eäv—“¶™©Å-Ú[ßÜ[,ïöku&ñΘâI[;GÊc˜Û~*¼6«,å{­Szµþ^O¯o™ý‰/¤.!p“é_ðóéðÛâ·ól“Û®çûBþÕöþðsü?ð‰ ‹KŽßØt¯³«JF•4…â¦S)c¨HÅXij6XãüG×|m¨jÚýÖ»«Ý<–—O‹Äú”€ÿ£x…–WÄònR±ç{13%ïSy¨xÿÇ×¶—•·‰Ymì,–?"ÛZ’9A‡Â1`gHÙ» ˜‚îßsæ]ÙkÚn‘v%ðÿˆ'h—.em/UdÁÓ|C) _CÂÎÀîA€ìd<éûfU—á2Ü£¶úXþLÏs^eš{j“Ow«»½÷ó¾#ëŸÙ«Fð×ÇÄÓ~|\Ð,º‰tdOÕü+ ñ$†}eË~÷@nùÿV9QÀ.òm>|%ø{â‹[Ÿü"ðÞšçPŠÙîl|;§ÆØ7šE·ÈW@˜~ñ—#ƒ–$üù#ˆËjUÃËOG{ßæ¿ÅŸ¡å¼mK þÛZÒ|Ž6¾©Ê-s_Ê÷ù#@ý™¿dOØÒ+Ÿø/áN¹©ÙÛ\ÞØêš×…îî.mœYÞ¸d‘t¤òYd]ÙWNÖ$|¬Üÿícû1~×_m¼sñSáÇ‹µ{Í5ãÒc·¿ð½õÄ+êú«`$º<¬>h$B„S3‚hÏžñ†äñÇ…4|ß ^4ìú>‘— ¥¼ÙÌš±ÛË$úmcx+Â_ t_Œš–Ÿ6•ᥑ5ÛÅû<ÖZB‚˨øˆ tE>_î#ç¦Wná õ¸^˪a)É-^öõ¹ùô¼Kâ5‰¯Z§¼“÷^¯K[·ª>‹ýšÇŸ€Z¥Ï‡>ü<¹Ò~Ù$Imðî—ðÚÛÅvsZKáë‡v‘·4S"‡—Â8ŠB±På¤9ŒM!' ½ú믈Ú/ƒ~Þë^$ºÓ-ÖßEy¡ME4ÀË Òï€bp¡\»D¹æ(Pd•zëð…'{'n÷<*^%抺©^òogm–öÕ|­ò=Äÿ²/ìïª%Ö¾Ksf—ù6W^·’Ûþ>Ñw'ð錒®àJäïçèß²÷ì³à½Ãßt$¾‘å4–> ±‚G‚KK-é!‹Ã#ý#·WsŒMåù×Ä_ÚÃÛ“Þ_øËÃ:lK­ÀÙ¸ºÐU­TjÓ³_P@ÀÄ‚Br~VÏ û¥ò'ãÖˆN}?ÄÞ¶tø<ˆ¿¶4ƒó‹? Æ“ûzÎëP«ó©ÝÁÊ–·ˆp]çQy¤Æ Ò5åRo—­–¾_= u߃ÿ±N‘e©Åÿ +Á‰tÑÞ,‘§ƒ4¸&o(kÓðG†KFØÒçQ´<µP2±,·<_ð÷à¯ÅV³ø[ñ3á†uíÑép[̺b˜Ôêz¨Ã¦™ÍÀ9%HŠ2¹ù§Çÿ#ÔmµÝ7Mñvp·Ö›ÏXÓ¼²²[ø«r‰_¥ÓŒ¬ !Ê$‹ñ÷Śߌ Ó´¿ÁöɼI‰¬ÝŒ­­é¬p‰ãW%¼ÛuÏÜÉFç—•:ép†_ §«èï·sН‹9äñQŠÒ7»V_&µô>Ò/¾xà2xwÀ~ðÆ•¤§‚¦‘, ξHßÃÒj@$Ò’F$L~n¼’G ‘sžýŸàø‹ªhš.à}"oí÷†æG¶Ð‚$ñ yð*ÿˤjTrª#SBKä^ ñ—Å ïƒÓÛ[xšçlžXÞÞÛ[eXðþ™@‰ãH¹ò¤UÇ•ÆGÊØEÍSøÉ§xßU¼—ÅÚŬ’Í!36·uMCÅn~uñŒYHnxóHûÃv7Í.ø<—ƒœ]­?2³þ:ÅãðÒX‰ÊÒÒMY]_K»/ƒ.~x54Ø-uAØX)™/ô- ‘à"à‘v$Á7ÌXrŒÛ°<ÁÎüeøßðÇCÐîm´‹Ï3>ƒt¯o·áÆ_ùx½[ä‹YùFÛ¸P€ƒ*„;’é<1iñ/]ñvt|I«È$Ô¬’V–¢7©x>%dÛâY\…;‹°pÊ«?|3âûï„ÿÚ÷ž'ñ"Gÿ•ÃÅúö·$Cþ)^AËx‚ä0'Ìã'ª±iýgõ¥RPýœÄË$¯U5åjÿß׳9ÝGö‹ð½ÏmµëøeüZ&Þ¾,ðø ØÜòÅ °ýÁ íåw̯$¯ò§ü—âM¯ˆ?àž ð¨×´õ)¦èpÃ>#±w“ɳðâ6c‡Ä“3#âÒo¸»• `Ú~Šh¶Ï/‰åµÔ|Aâ£øÑ• ½×‰ßð”ߎ©¨º–R¹Ê‘ž&¿à©24ŸðLÿX"kŠ…4—Ù2ë&+ià#µüÖhº´¸ó„å[a“<¦&X9FË.9Y|‡ÉéãèK Òµ=ßý<ŸÜ~Ü ¬Aü4–|ÎFqòÓ®7+›#?N9¤²æs…ÎAÚhZ•Æ»¤h¶ÿñ,¼Q?ö~ŠÌ4Ÿ2¶Ñᨛ>bAÃ+ã(¢Ûö<‘b*dô÷U´?âúT>¹‰N;Íß]ïý#Ý´m?Æö¾!]R÷ÀÌÒMã ‰¼!­°8ñŽáÿ àÛ… åBlÈ[xò<âŸIðN]9| ¨Ë,¾‡x¹ðf¨p‡4¨¹-à¹Ónœ°œ¶öWi®]m¬þÎZŸ‹´í/ì>–Þ/Ú½¬ËÈR/øKØc ¢Æê¾\‘’¼§î”p³ñúSüoéÿi´ð{Èž´Vó‡‡Y`vмKð¦]]n[³òÈre’/N´1’¯?É ƒÂåË-7ewüϲÝÜ¿ãŸÞjº²iþºT†§34þž Ýn|S2Y|ÞYÌ/H*ÑŸõf'k.pxsÄ7¾,D¶ðd1%¾³©ŠËÂ1,±ãQðÔ`o¨ìTÛåáC*íÚâ Ž—Wø“û,xú­¦¯yà˜¯äÓõ_³Åo{áìM3Gã´LS*&Zk<|p!@„ù16§Å?!º†ã csã8gº’msCòã‡ûsG–D.oP:ùQ1 dPP;o(d‘³©íiÆP}ά‹W^Iµ§ßút<®ûIÔeðœp/‡4Þgó[ÃÖê»G‡šB@ÿ„_!o0È>ë7˜pnk¤ºøeö]Jš&˜Ìu™ ZËáí'o™ý­®Æ%ðº?pªp«’‹•Š+j­ãï…w^¶]CÄ~ódð´ <³ë:SlaáË(‚Œë«?šXg ¸t1Ã×ø·âÃÝJâ{kx}ŸûbiCGâ--„¤ê*—pDñ#.64`È"D°hþٌ棶zÊx‰(˵•úooÈäü9à ª[Bºƒ,¢ßOxÕô½4…§ðÏÌUô%,™$ž pÁ¥{ªzn“áX'Ð|+æ fY?²ôaäÓ5l®N–ŒrȤžNå૪<=O‡¼}£{g¦¯´¡t/ír[Ä6¹‘ÅÅQ”?¸9ÉP ¸y­8_|^¶ð‡‡¾Í§ëös™4¶…-­¼K™b ¥\D¡c‡Ä3uk¦?2 r¬¿¸\ž&RsVKÀή¶'g$ù¯k|ïsQð·N¹K˜ÃqâJÄòèAb•§¨ÎIŠo«’Tçy\¹ùÎçžiüáψ’i¯g­ê›¥û ˜u›ã»xð¤aB/‰™KšÚw"áATKª¨â)FÑV‘ðY†M_ ^P”Ú’vJßשõ:þÜ¿`µ“X¼¹ÒW1\²E&µ¤0‚ø™IûyVA¼lÏÞPFXE-ÏþÙþ]JÚEñv”5Oí;txN½¥+G jš|¬˜þÜcÏ‘!\;I¼©ihZÄW×K©êö$ÒYB&ÔæßÒ¼I) q×o–[¶Óæ)ÆÒâã×4/ x–ûÆ’Ï;ø®òÞ/˜äŠ+e×bø£É+\¾1Í»*ñõÊ—–9fx™K–Ýw9±Ø¼Ï B•(ÕæÓ_vý»_«ù#ñwíˆ~Ý^Ë«ÙØÚË¡àyêkâ»uíGY‘¦Ö­ËO:jòKM_ÃlKlæ&@–’ü™bw*FØÇ¦é^+Öõ¯‡–ò¶‰«;Åá{v wa¨– h‹ûö  º¬¬ÜH¬w» ~ñý(*.V„´k¿üãñ?ÚØX/¬ÒiŽmÚÝlt–ÕüQâ{¨ìüo®CζѬö~!ÖÊJ¿ÛZò€ èç}³áÁÈÄŒTÌ2<ð—\Ó¯4é[Äþ"‹dVQÆ©¬ø‹p2/‚QS#QÝ÷nHÚQòЉ–ú¯‰í5}^;-7T‰mod o ^\ g]G_wVþë‡d“ o ®V_ô~M[Z—SƒÎð®¯hâh ²‹Â7†&C7†Ãnø<íR cpÁ£xÑRœ}Ÿ»%£<ü\Lñ3Ué»[åóIãñÁŧ†Î³©jÞ(’GðÝÌ’ƒq¯Ëå“ xÁÑÕ¥ºçr¡??Ì|Çy’^ê‡÷2|@·×¦oÈ-<`£Š/ÏTñu™,wE,{ŠÛ1®vÑBÛü­ñ2;ˆ¼'4ö~½ŽK ÌgŽO” Tg,[ÁVåþO4Ÿ› wü­47ü? —Åo¦Zü?µkÙ|F¨Í?†míÀ‘u¹¢Ú¥ü ¼Ÿ0)#9È !\Ôjïoùu;_Õ§Š‹©Eèûµýtò=ÃÀ~,ÖGÃxt™4<¤Vú7ˆ5cáC÷¢Òæ—”u‡98r'ÃñŽ’ü©á~Âañ´gkT¦íïÅŸ•È^FsщÅ.Ÿ?û¿C,™bHõÍK§³Œ‚rñŒ×ã'ôÊ.åç‘ÿ¾è¦e}Oýôh eÏooÈyª’ öþ\U89ÎXà z¹ãwâ6%l4H@>œñþ¥U¶P­•cÓ¥[¦ðLÏhšì¿¢Û]jztŸßÆ»§[¼¿éþdl\ëÚ{® ËU;7 ˆå³õ½SÅoªè÷7zOˆlã´‰ƒÅŠ´ïÿcëÈåñcòÌ1Bþhí§äÿà“6þ-“öCðÍ÷‡F¼èž>½‚OìiµuÚXðnà>˨Ãæ2D?Õ†,#‘¼¦é­]ñ¿Â™³¦ø¢i×ÃòDfñ€áme~m×S)ÉrsœrGÈY¦ý‡#^YE;?³ø†ñ¦/ KQÎ+ãküúyœ¾‹â½[HñyñÖúây-¥ñ'Š®~×,Ò¤’jºäÛ'k¯áó&¯ [ ÌÙ>nrYÞãä/Sñ –±i6ö³cÉ8—L—!&·Ž0Øû,ù@Œ¿dê.¼L‰i$·–·o4‡Ζ„E¼š’““L;y¶wg ãæ_Ý|ëâé%%sêkð­ZuV‘ÓmöÿvÏ|ºý¢üK§Á=þ“uâ¡qö˜n<û˽`Æ«æ‰:évO/mì0‹´‚"1xOŒüGñ„ð÷ÄoAc«èO"M§AdúbéSB²øṽÃ{†Îѳc.,>{Ÿ˜?hÙçYøE¦A­Ì"¹¶rˆ×Oaåó(ÔŠ¨I4u`?rãkqØ•!¼ŸbðOÇïé°ÛX\jv2q¤É~šu¯—2Çá­çt—œ³—>aUùw'{Ç›ñsâ¯|7¾Ó5 ´oåî9¼O§VŽÇ^ÇMr"ÀJöù%3—‰BÉ ¼ØÚXu)Z~òÙöÿ€}],ç ¯ sƒt¥kùém<ÿ;z'ìé“â/h°êvZ=˜oiÿmK#OXž¿±S'>eŒ ´†Ü6°fŽOi_x~ ÚÍu†îmßB´’çíºfŒ€oдù—HŒŒÉpØebÜ1ßÖjùƒàˆ´ßü_Ñ'Ô5û4Ž/ZÍãj¶H®EÝ—ÎJëp RˆÍ¸ÍÈ‘y•ô焼}áfðeÞŸã½*6O "$pxŽ!3©Ó´ ©¹<_+½†0¼´x(6íyr¿e8ÇÞ×Cn+Xºu šiÛ^ú~^ö; ~ |²¿Ô5Y,< Gu5žû F¬R÷Ť*–°Pÿ¢ZýÀ>_'I%‡„þiž$Ó¢µÀpܾ­mçIÞfTMGÂA¤Ü¬ŠÊg98ùDŒgœïÇøƒâÿˆ`‹YÖ-þ)A™o‚HÞ'Ë„fñ&ÜH¾4!¹f|Àù¹ }³â'í+©xoVƒR½ø“©\Nº¨¸e±Öu)$–8ïty<ÅÛãbIJ€$.»™‰7*Kmê׫T¥­’î|–EÇfŸf¡yI=Ÿ]_oéz‘êÚ¿†‡…f‰üKá Uü-¾ðÂ7Ï ]îETºR®<ç^àSî‰Çþ›ãÏ h?Z´ñ/†®â:ùm!—@„^¿š4;5ˆÂˆ–!BÈ3ò3m'ì‹ûTk?²·ü4׌?h? x'ÃsømŸK·ñŽ|EkuªÂºC[¬Q)ÕäI ¬f8Õ«”'—¶½ ~Äÿ´ÏÃoOûQüzý¡t]"Þò5Ôtÿ ë9ñ*ê7ñ4··[­ámM7ÎÆw’2š6_CÉcûã^Ó?'Ä*w@ÍÇî3y‡æ¹O>ÖüyâÛo„‰|àþ(Bý޳ÝÏ$ÔÕ;m»±Œ“ÀÈ Kcõþ ]¡x[ý“ôf´ð´—¶iãk¨‹ÿd´¨åõ .ÒÿðjAŽæŒcÎloÂ7ˆ¯}òo†ÚÖ»ðÐÞZü=µd“A‘Ô¿†×?.|ìåÏ‚þf%Ì™ó~ñfJµÒüóÿš½ð]‡ìñ£^k­áápž9e5VÒVF‹û_Âìë¬HªL:ìÁ—¾vï¢|ûC|ðß„G†5 S¿²ª¡Ô¥Uå4ì÷3ðÞ;£‡–>¤š»RZZûÚûyîÏAÒfm=¬µ+ûï†ú?ŸkªÌÏçønÍ>tÕõ¨ÁÚ|¬ß46¨Sˆã,pÇç‰ðF‘l-l¼+á×IÍœÝx{HÌ*þLþ —ÉÇ;–I ç®jŸµ_Á WûgKÿ„q.£©IÃâ ËþÖñ\¨2ºÒåvݧ •Û"fE¹ã-?i‡§^´•|W ‰"¾€¥ÂøÇKB$[Ÿ¾[ÊñP-ΞÜùˆAVbÀÇ,vSsŒnÓv}ÏŒŒ°±§6´nßeùyLñOx_Àžð߈ï|5áø<Ÿ ¾$@ÑÉ£jï°_Æë'›·œä4`—FQ%·Ò¿ðF=Sáçƒ| ñ—âsü9ðóê:eÎ$6úd1´gRDU›$XÔgo ܵ+çßü+­|/ò—Æ;©ðü!â“Åš{(h3‡Š¥Úß¼ ¨c ˆŠ¬Ý=ßþiã ÁÞøÕãW¾†M?M·²¾»6úà–5¾ûÍÿ˜ð@RÁžM¼˜©ÃüGÕ­R¦1ºç ]VŸ×söï ©`©d˜ÙƧ¾©IóvÕ]ÚÞ¾©µ/ÙOþ )ÿøñ÷Æ}wàöàÏø.]:ÊÏÄrëQ_8y*ò"û»†Ô P²… Ä‘ó2üð‡ö ý©~7ü9ŸÇÞøO§_h°HD7^#Ñtéä`%aäÇ=ÜRÍò“€™Ë€ß(éŒðUý/ã·‚-bß|µðgƒïµx-5S¦ø¶úH<”š ]Ö'¿…/í&FV3gp_W~ßk¯ÙËKø3àŸØöÿÅòøFëHµ´‹PðôwW–³Ü}¢ö8 7ÞÜ&ùPÈĈþV  R®"G‡r\Ðæ›ÿ Õ¢ºif~.µ'^|•e qJí& ¹¦í®®Ö['sòbÏö9ý¥Gï< §|Ô'×ôÉ ÝÙ/ÙGÌ͆Œ›ÑêÆ6Ä‘¥W#rçl?¾üjø•i¨]|?ð-õúi–s5åÌwvê±*E.÷vkñ·jÿ wèlÿh¯ŽÖ²ÿí9ð£âGмo¨Újþ+ð½…·Œ4IµK•»6¿fg‰å¶—SWÂÜùŠL‹~a!˜²7gàÏ‚?à›žÕ¾¿Œµ ™>4êÛh6Mz^fž[híç)ÏIûë½çËóJ)Éä€s–.QårVŒ’Ÿš…›“ïtÕ½j9m ‘Ÿ³w”y ­´ª©¤•ûr¾gùŸ„~ýžþ6üPÐï5ÏxNÿPÑ4‹[››ÝL:%º¬Nò6\Þ§n잃8'èÙ‹öý¼eðu·Å_Y%ƒëF8´í&ã]òuB;{:e!¤ $qK•^ü2¿vþÕ~пàœß²Â~ɾñ³[]x«âT—f+½fí%—DŸí° CJìð—%LÌ\î ¹õŒž"øiàÏ‹>½Õ£ý¤dÕ%Ь-¼1eðÂIcÒî#k;Möè’…;ŽÃ#ì ¶ÕÜHRèãñXz±»åvœ¿íÕ%ú]jíäeý‘€Å+ÓJQ¼`Û½ù¹9äíµ“i/F~@èÿ ¿mÚ7IJ|$ðç…üSuªhúS½Ö“©‹ˆå´†;B7äºgÚñ¬`pªFÀ «_IþÈ ÿà¢ðOŠ’èžø¨xÃ[ñ†ˆ·wZU–»©‰,¢kÉ0Ò­µÄl´LÞ[dbC–Ë¿\ü*ø-çí“ñïâׇ>x×ÂZŸü"Ëýâ=k{‹ISLDŠZE*ÅC«g;dä^gÿ‹ý¦>8þÒ¶‡¼[ñWÅzî±pÖËmo7Û$ŠÂ!x¬`D{YÚ8”–Q¹Æ:yˆÎxÌv"´jU­ªSŠIùò;ü®íÜêÁ`pÔgJ(Úôyçm¾ÚåVîÒ¿§™ðÿ…d_Û_öœñ_‰¼Càÿ…^$–ê×[‘µÄ¶MLýšêiá o9Û "‚K’؉‰v+ŠÖýªÿdÛ§öLѠо,Ýk:އªÈTÝhZŽ¿-’Hò$óYÞ8Ùf¸ ¹`Ëæc*Y_íO‡:ï~~ÆŸ´&µðêïTÒu{/ì·¹Ò­n`kiÍò®ÅuÓ!Ø|˜²¹Ü€ek³Ô.ÅØÓà>/YÜx†[߈:<:–¡®hú[ä’-IØ9›Ev4„ /˜9-徕3|]]Gvïí­m?†¯øìrWÉp8¬A+K õ¾Š»O§.¶GÅà“ßðPÝsFÒþ?i:uí´“ê±\Ùi >%Šý“íî·ìиUcûÀâ`øRFÍ\·Æï‰Ÿ´/쫬§ÂŒz=ý†£i£Ú@çM›Ä©oìí ˜äûMÂä¤V±nT]»Ëí/-cû‹öÂÐÿo ÿÁ@~Çð'úˆðÆ¥¢ZÁ£èq_Ç—pë,¯åËjÚe¬PÊ"yócr Ýòˆ—â¯ø/„%Ñÿn½n×T³‚(£³²7 ­®Ï4é–„eÓãÜ9¤ìè„^–_œbðÒ•>kµË™wm+|µû75Ȱ8ú4êª))NqQ{¥ kÿoo[üÚƒöÔñ|2ø? jZ¬ñÄÓêw‰q¬‘l­>ªË<¯™ŽÀ÷Ó!X’Ì0KKæZýª?à™ß·ŸÃx¥ñ§tûhj"+›½u“ömÒÛ“{¦ÄûK„PA|ä`ü¹¯rÿ‚"ü9ÑüSû#üa ¡¶“ÇáÝR=6K]&ÖÞV“Ș[¢I.š?Àé êT‘ÞþÀžø»¤~Íß|aûsF‰á»oÛEíßöM´Ðê6ñÞ,p[ZÜáa„HÄl6„FXqÕϱøôÝI7ÍSÙ¨®‹noÁ¿3ÒÂpþY“®ZT’t鯫•’æmÆñ^‰ô×O»Oö™ýŽÿkOŠß°gÂÿ‡þÐ.a xf8üEáë¨ï /°Hçt»Õ<ÅØ·ï¨œ»à¦ß²OíQñöcð׌|/dé¦x+Á[kZkÜ]Æb[k£p|†ÑCÈÓE$ªo ª­Á@|M>‡ûüñv¯G÷ž¾–íEýŒLq©bè“H@IsÉûø`±ÿÁZuïOð+á6ˆþ/Ó-÷‚<(—¶Í§1Cj²¾á¹à²9# ¹Sr†`G&K ‹ƒQÝQ•¿Â¥×Íõ;3ç„Çέ­õ–¥u¼ýû=öÑi羇~Í~ñˆô-* þIvòjV« Ýh"áX5׆"RYü%q€2‰€dÍQ·k‘wèºìå&£áK½róÀ:D xVIOá=\ì]fçy/àÛrWÉsó.wnáã?f¯| øU&¨éšç…ãa©éÿjIõ«3&­áiÝ™¤¿2Å/ÉÀ_ŸæJãÜ“ö¼øH~  Á®x<Ë„д)Б¸µ ¬~"éÀœmÜÇûV_Fµ?,·iuÿ‚%ñF?ŠÍÕHè¹šÙ¿ÆÆû~Ë> “YºÒo¼ áEx|Tbc7‡t%ÂÂM}mµwx_æâP¡‡¦Ð¨þeá߃Ÿ ¬<:V]/ÂÝ.ÕÚÍ;꯿JðœÊXˤ•UÝw1Ϋ¹q™$¯DŸö£Ð2Úülø¥imu©ÂÑ g[XÜ£,q¤ör:F¦bª ü«…è¿à¥ÿµíY¬|>þÛÓô±}ðöV—E:“ty$ô‚ÖÎÓ€!@¡Jcq%›?'Î7é'Z]2ú{ÐKb³YùlVh×gÊHùIà'§Á+Ÿ‡ÞñÞ‡¨ê·ZZÚÇ5¼/7•§KýÝ»!ßoF“8ŒXŒ±Î8bêÅU{®Wþ£^–0§šVÀÑ“¦ß¸ùÒþúëkïÕÿáûP|Zý°ÿm¯YüUø—á8c—L²t¶“HѤ´V]Jð‚^ıaö{£’çh‰Ôóí÷ï„ðPoÛ«á—ƒ¡ðC|5ð¦¥q¦mmªë~[«è€ºŠÙ ·Û+¢¨gp>Pcøcá ß….îím<5"d˵íµ}ùrex†âº¢²|Æ3ƒ$¢™ õ‡¿ |%¥üL>%Ò4ÿÊðø‡íÊðkzDfØG¯™%Ì“>¡kÖzpÇîõ…`HxqÀmâßž¿ð¯‹ Q’ÛRË<7÷"kMaV2×Ä`»mñ"VÎrJ »¥Ù.ÊkRr½õ¿Ï¿à…?óœ5XÚ öQ×¢WÑyjÿŒù»\ý©ÿjO| ñoÂmnëÂI§øÛ]iµ¶MÑÃÝ],ÖóeeÄ.ÊÛTˆ×'h€q´Ûã‡Äh?²¯‹þ-èÚ,õ id¸°ðÖœg¶(' #I$óí Ý-¼}~ŽøÉà]cÅ/…nüEç\^ëcw7ü%^{“X°„¡YÿQÐü9ñ XÑ-5}FëíÖfµ]Òµ¢Ò6ë½ÎÄæ(ÚU’?³a—ðmJqjrè£ÙY5ª]μëÅ̾•HÖ£êåo´ÜÕìÚÝy÷×Kž+û.Þ|vý˜|Nÿ~ üGÓ´mZÛKœÃ%¥î‡~Á~Çssò¤Ú£ÌІÛj7©~Òß´×üöޱ? |uûCÛëZMÍÙ´ŸM¹ Ù¤Íý¡$JXÁª)‹|„ ØÊŸ1»øOâ4_ î.¼Zú{ø&àCľ+x#_øEïÛo7’DA?( í}ä|MÞÏŽÓâ6 öÏ⩯‰§Ä–Ö~,”…ÿ„‹_ËnŠ)=7|Ä’T¶w«˜ý)ðŽZѯ­üôüt<º3á1x8Ê£I&ÖÍÛ¯ü”ulïŠ_ ¼9ð·Å¿ÛPðv‰§Gk¡øynô°–Ví›. C¬$’e¯íw [å ]Õ¯ì~=|[°°°ø™ñ«XÕìü=¤Ç¼²ÛÁÛÙxàÚÖ$¦1­·ÊògqS• \z‚þ"ê–¶ö–Âþ1.–öоâWà[ø- m]&VÎ`ÀIÚÈ6°hDÝ?Œ>0ŤøfþÚÿÀ$Ý6…p,Þ×Xî:OŠ—qy4 @?iÝØáÛwÊò&K!– šöÖ:/$ú/#߇ˆo ýr²µF¤ïïIo'u¾¯]Êúì¯ãMWÅ6vkãÝp¬~*·„Èþ ׺ÂC£[–!|K69‰¾aƒº,îÜ¡âÙ³ýœ!!XøfÉö‘ýªè@’è#?.LFÝŽ‘û@ˆüIÜ_uÿ³Íã/ÝIqà­Zωá•\ùž2PÝ€ÛPÞ\@ðïŽ&ñ/Ãø-×AžE}²xvw'þ$Z dá×ÊâBr6€Û¶ÕÙno†µâÞ‡ðãˆß¶SZ=,íø??"–·ðÇPðï‰/tÿ¶ø¡Bø’à}¥nüBÙS©øÀ¹Äw¸Ž8Ø78ù‰9;Ó‡ðÅ¥ÿ†<]g£gã1Ô¬#ÚkìKð <›f` Àî£iÈCéž'û¿¨ßO¨øf9TMzÊn|:Y÷ñt¬B¿‡†QºE’WÈ]«€¿u¿¥¾·ðû@KíÛtd—Âv v©áè›å—ñ«‘Ù²ÐúaóÌDi¸Ô¦Þ¿×CÃÅøG’ׯJ¦Ë}“I«z¦µóüŸ|I7 øO5Ö­¢ø¦íå𴸞îÏÄdƒ'‡üH ýöœü~ùpÛ°ÛnùÇÿà —2Ô¿g/Œ7zwˆRÕô=q®î.´íu!Pu›ùJ³I *pû²^XT2ÌŒ… úGŲ§Â[áœÚ­ç‡ô'ºð5É𦓿pðÜó‚Øðò±`ÓnÁ}Ùzî‡È?o?Ù#ῆ¿eŸŒþ"·Ñ¼+hÚ‡µógÿÂâTÖ|Lˆ±¹Òc”6-" "–7å°\mêG2…jªÊÍ«}èùÌof9LéË›ž”dìúFIß}¬¯ê>—8 w ÍO¡Ç¾Y3Œˆú°ÏqP]rÍ„ïùUq¸pÊîÉäWã‡ô²ØÒÿCþêþBŠ—iþûÿàGÿZŠVC"ñº²ÍjJ‘”`=FA¡¬ûs–ïœg=ºÖ·Ä;clm œùœ7=Áÿ#òÅcÛ–$=?Jacô³þ àûoü¶A¡é—²·Žmaò¯¬lä,{¦« kô¯ÊX“¿f0­Ù?µ[|!Ð?á´ŸRð~‚&“G¶dy-43»_‡\)Ý¢Œnd$ïÜ ÉºF&IŸÄ¿àtÿü!7>$Ó,æ_Yº¥ö­alÛDöŽNÛZÅÙqçAÝûıô.ûB꧇lôëÛªÏ¤ØÆÐ'‹¬"•Ý,ü+{U|\ä *í(r£e°ý‡‡¥:9=[ußÌü‰·Ô7¼œzy/óþ¶;m'Bøcaà½R¿xVÛìö„VÀCáü¼æÛÆ›@_ìèÊíd…~éÉTP§÷P¥›Ý'á„_ Õ–ï›!ñ,/åÅsápʇĺ)SŸ:!þ§y ÇnÙXçcÉ-ÇŸë?5µðÖ¦ñøÉ÷¦‰©fÞ?@ÊQ¬"]ÇŸ°MãÙ¡8>!…Æÿ„àó˜2Hêà¶æÁ¹_W Z´í|.{—až"3ævvÑ/øjbø\øMcàSi{­øR7>„ù‹©è@Êéá}%9 «'Y”ò@`ÑžŽ‡ì´þ-ø¿Á¦¡®Ãkâ? ¼ROwå›MsHQû_‹Š`Eâ5VÇÚT*€Ùó”lÄ—]µ wRÑãƒEøƒ©4Ï ÙîŠßÅÚ›¦Ù4o !‹ÅŠ~ü FÀ«+tÒx;Å sªx‡Pñ߈Ü-½óK,~'×ò|y2çþ*Cí6ÌNç`w7ÌÊÒÉ>N½[)Ùc0ô)ÅS”å¥ÿMúŸø›XòüK¹/ô¿!n¡€²øŠÀÊ6O§³‰âÈ9bÛIV9$;¯˜]_ɪAŸ‹`Y ¡B#¾…‚‘Ãóê­”àtÉn™ÒíöwŸYñDºjÜë—’[x¾4_í õùVVÿ„“A´¨LXYJ¼•<«¨ò>@ø»û7|GÒ,lõ¿h~(“K¾Ðí§Ý¶²ñÆC²»îòŠ„Íúd/ˆ †2ß5Ÿ`'V¯==>‡ßðöoN²³³ßËM{鮨ñ ‹ýB×X‘¬|@]%š1,Æð…™Äã-òê½óÎHÝ@ ÝßÀQñ6½¦ÙÝÈRâòÚþa5¼~vŸí¸Ö5MŠÀŽXŽ80ö¿ ¿dÿŒ^,×$¿¹ð¶³o™ Ư <¿3Tw,O“yÿ@¸Sƒž~U™“è?‡¿³ˆ¾ê–z}߃u™êVB2š·§7žÀÜþ}è ©±ˆ8X”ŽN Vý¤gWD¾ó§5â:4ðÕ)QjSiꞛۿcºýžÅgÃ)®¯üE©=·ü#“¶Ë=[U™"Œøw\ŸË A lcæÈ*Z_´ô]Ã×úåÕ¼>"×¥x|O=¹[MWT_ê0*uå„=B¨ ÌíÙmñ‡¼ñ/ƒö/êN/| äIÿæ¨c•[Ãzªÿ¬—§!…ć‰XÌ2ß4éô_]|D¿›Rð-Äñǯ_<éqá;¹BÅA®88>á‹FáýØÊª°ý6+ €ÄT‹ŒìÒ_‘øžžP•Jµ)Þ.NÚéké×±ôÇŒ´K6‘/É[(…¼i÷˜ë%¶Ž›•"ÈÇ÷„p­Â´‚¡üÃ㟉|=¨øZú[|@nf±ÕÚ66Zž ¶âò­¹á%iÔçpÝó°WfÁñ‚âñ&•„tKyíäŠÄÝ}«I®5†E6•<}0£nB’2ñ>(øAfþ¿¿—Ãzt×)§ß¹•ü?`<Ÿ+BÖe¹Ñ" ÷@Qó1Ç.šye =ù™ÉW8ÇWÅF1ºÿ[ùúZäþ,ñÄÿ¯n¬4ßIÞ3Ý þÌñ¨ñ\2›û9ÏX”ñÑ“ »ÀHó>\é> ø{wá¿Üyž¶ò#§ ó…¢)V_øG¦s!;û­œ•pfçþ,üðV‘㈅džoíè—#ûC'2`îÆ0è&Uc_ÝwüEìߪ;Æ+W¯.ÍÛoML³.…o«ÚiÞ%ðׇH}GNüÍIbßÂ(#«´^W';‘¥“Ç¿þÙø}^ Âð²xnk¹Z-B]Œ<=âYNvi0ñ¾0K`žpv—ö¾ŸRñ­’Zê–m½ý”‘Ɉ´—ß"]øQ@ùãñ¬"xu$ xÈC€‚Ò6ÿVŽNCã!dÉð_ ÀVÛ3xU¦—Ãð™&’m KøÁàÏ"DÍ'Fžz1+éž;ñ²ê×–kâ[ËXGŠg¸‘Å“FI> Ö¤cº?EŸž«NsŒÍIàmOÆ“\YµŽ·®À¯ªD-¼Oz®Ø¶ðl8 Š·â' ÆBªóÔOg£±Û”C NU#í·MºôÓúûÉ~'üEø/¥\júv‰âZ´7WÉEªi ÿð›lRõ³@#ƒPw*ÐüsÒ ñ%¤¾ñ’Ú°’ÛZÒeWퟑ ø„7DÌ #iųºA‹|?âÛØÄWÞ&×M…üÞe·Šµi1ÿŸÜçÌOL9Ù ¾>sógi½<ü'ñ5ç 7>1ñ+´~6%ó5!ZzùÛÓ¶Þ]¼õðþ1ß™ÿGñæ¾w†"ˆ¬z¶” øGÖ'‹U‰Ã Ëä°?”DžiûV|uñÖ½ðâÕŒ¿m6]x_óR fò¹ñC„Êx¸— ^o”Epüyrçý+é øÅ—¿-ì ×|Rñ?ƒ`cßøŠUù¼- c½uÆûÖíÀa 'ûkx:kO€#†ïÄE¥ð·‰žO-õл|ï>]T0ÚB©"BPüÛˆ]î4~Ê¥$Ú_qÏ*ù¤qIS©6›I§-ÕÖ›ŸÎ½îï4ïRNz“Ö¬h(ŸirAáyúU{õ)+)nwÕ ,ƒ8¿?­ºhifOï:*?Þÿyÿ*(&ñ5>)FQm&gÎK`þú×5nø;±ôu®Ãâ¤^^lëå·,&:ž?qñ`Äþ´¥¿ðH+_^üºDÔ5DÙñËËŠÂçSULL]–Îö0"ÎH òƒ¼mßÔZ†„€¿Øº´‹ÞM¤;±Îå9]ÂEe3ÛôCÁ_t¿³ÝèþŠ/øIÙ‘G†4ÄŒ?öþ¡±<³á•ê \®Ø<½» µ*•TÞŠÖ>{0¥Cá¹-U­¾¿/ÃÊÆ¶7¼,¶·— Öf¶>°-ô WË“:_†J©-áÖ$æhT°È+"è.»oxsÅ~-“S–ÃÁ:¤ôû©nb¸ðÅâÆXCâÂÛLžå³,Ä|ÄçpV»­ø/ƒ`Ò‡ˆ­<- 5Ãèº;»)µðhþ FrÝ’Ä8nù¤–nÛÁ¿ ¾iÚ>­a§Å=ÿ‡n£XZÛÃñ¼'Ån¤³ÚFd-0·íÛ˜Ô€Q#‡—ÚÍQoEmý<Á¼LSwR[>åÈ>üA“Ä–ún¡ðúXÞ_+$rø;ËÊ7ˆ4ØÀ&_à è˜M p£f [6€¿gxçÂ6x^ÇÊŸÃ>|w:5’˜ @Ñd$™|"26Ì >gñ–ߟ2{¡ügá†:ŠŒ6—¾ŽãRáZïÂÑOøKVQ Ýp„â,.O ßÂXOÇþÍÿ>|=Ò"Ñ5MGÃÚ\Óx-£ɬèÑ™ü'á‹p¿ò‹~çiIÆånr²›|å‰S^Ò›ævÒÞŒója«PËÕ?†Ö¿áú~­øOþ ]­\Ú_ê:G‡|>²‹›è˜>—¢F×+æx’A–¼´9òñ¶1ò€ˆ«Ÿ«þÎZ…þ$éSÝø[AŽüO§n §èÇrÂAá‡S¶=&1ÜháÁ'%‰’_­~~Ð>ñ~‰w{á­zÆâ)5[‘oäkÚlÛ¿âa©ISX9wQ•ä,|OÅÍA®¬­u 6Šmú¾šâÕí7…߆Ä$ÅB2C,g‚ܹÎð÷?‡â L12§]i~ڣܩÞX«Ñ~÷/}Ï–¾øÇà®…ðÇKÒoÂë:xF,‹‹ÞI øBß$«Z,€†iÁ›<¬¶þïâ­+àˆï/µ-&o µÄZ¥Û~òM#«jzôjƒÏ(Íp8³€0xó~aÔl¼c«x!.l®u(`¹ð°T·‹Å¦":„A•WÆñî ’CÝç‘•'ËÙÑxÄ¿´­sRŠûĺ­£Í¨yË¿,-$lñÃ1uñ6H n_;ŸˆØ ¦ã'Õâha±>ÏBñ—_ø'Åe•ó, ­†ÅÚPѯë±Ô[üTøa xªÛF¹ñ.ˆJIlú†“òƒ?†•ˆ)|¸>_œ¤1þöXfG®[Äß>´¹³‹Ç’âçÃWð,_ð‘é1È7xoSO$¨Ö"¬²*ÊNARáWâLþ=‹Çözν©Æd½mäþÝ»g*u?`+Ÿù€†Ýæû¬‚¥ Zñz6‡ñ+Yðš%Æ¡âI-aðŒ’¦ý_Y–'1øjâ_–4ñ‘° °ídk¨Ü?±&½›‹¾ßÕŽ 4±3­ «–×kn/®ÖGK⿾øƒñBê]ÆŸË"O/Št™Cg^Ö&Pª|A;´r+u†ü®²Ï'Ã9ì'³±ˆlH‚ÛN·yáÖÕlñxB,±‹Äñ󲔎B`©Ø!ë¾x+ƶ¿Ö5×Ú1áØšÞ;K]È/¡ø}‘@_€ãý20]¹Qò4e"Žhõ/ˆZ楮¯ˆ5y!2\³°½ÕÝ•ñŒ¡·¯ˆßhÛ ¤þð¯Í’Üž÷ÃßüRñ µ¾‘'ƒ¯Œ ¦YÂØðþªå”èþ‹;ᜈãB€Cú0ûG+ñNÏ­ß,~žÚÎÿ3ÃjW0ø¡Ø o f9?.IR Û`©Ô]uG·‰Åa%FQšjþJïo4º/ëGì> ·Õfñ–“umâ»…ƒÄV ©µcÂëÞ‰±æ_Np 9 ž@_—€ˆÛßÛë_Ö{Iµù¼¿>øçƒ]›?ñIÎx]²!RÓ#}ìmcŽïò]WÂ^:Òõý>üÄÍâ;pÆëÂL¥¿â¥¹o'üð‰ IÊ ŒvÁ7Ÿ¶‰¿Ãø/uŸZ´#Ã8Io<,ª0|?b·ïa¶bÁ·õ,ÛÎMÄ—'9V³[£l7Ôå—©Q›Vn÷³Ù¯Íyj}YwâívçÆ—Pè‰Ã·‹'ãIרá|Gâi9òôÙ~m Ê•`HØZ<;Åzí•Ö“mÿ~¿q}… KáÍ]„ÄGà˜—û BFa#|¬QþvþÏðÕö«©Ýjдù-õKÆw—¶™Fkßœm›Â0¨*ã¸M¢;kº‚<>¹¥Ä-<+ O«Y.&ðö°«^xB-ÿ¼ðÒ.6L䌕˜üÁŸíYMÖöJ--Œ z³Ikn«MW—üw|câ»›9RO x…´{‰DsxcUHÌgFñ3`|.¸È¸vÎãœ1v¼‘è +â–µ¯¤¶¾ÔƒÉâeeógrs*<>Ï¥ü_ý›>ø¾DžÃÁ *˜î4?ÜíñN¢ç]¢2*ÎHÚ€‹'D§(´Ý¶80ØU­ÂîÒÕÝ_W{ìr^ øoãWÂÐKyá‚êž„†¶‘•±ü;U¼0l±Œî\ å‡Ìóù‡í1ð§_—àÿÄË¿ ØÇ·†5¿<ɦX¬ŠÉoãiï DÈÙ³¸9F„©À 1›_Jðí#ð3OÓ´Í0øŸÂËjt+8.ÅÞŽ¦x.29¸ˆ¶$Šäà7ð>xWhð¿i/Ú+àv­ðSÇg¿<8no¼!®fµ­(7Ÿ.㟕u€K·¢€ŠÍó"„,ñE$©ÑT“Öçwö6s ÝIArÝ[¾ýt¹ø'x˜Æ>>cÅM£²Ÿ0§¡çñ¨¯œ3¹LŽyý$„ÞsÁÇ·¥~_ÚÑ.ï¶þüŸ™ÿ )1oýäÿ¾…vŸlZ -Àgíj¸#Ñ[8 àõú àa`Y8äð;W£|Z‚|&“Á([…c¸ ÜäŸLž•æñ¬äs@IZLý ÿ‚PhºF·ðÄv÷ñè~cxÂÑê‡LG*m.É ×€9\¨W. ©gD—ëM/èðZZj¯†¡ {`ñ)Ôô¶¹ð w/ö迃Ì9ݾkoM2|›ÿŽñþµáO‚>-´Óµ{›4:ürƒ©$%ñ¥jlÌU5í8í-åK€NdQ˜gúïÃÞ2ñ.«¨Xý“ÆZ±‰µ Hüá®Ý•Ø5 ¨"OøK˜œå[ª¯FPöŸ¯põJˇé8ôÿ6~=ŸC>)¬¥{&ÿðùõ[ùi­k> ƒÁr?ZðÅ¾ß KÅßöÆ’›¥þŽÛÀÖcÚÄ팮ӒLeÂÀŒÔuý ãÇòkø÷D¸¸}E¤,<[¦°•?¶õ7,Äx  à© Ü®Y]^ë¡{¯Ëáù4GÅšÌvÓxZ@󾱨¼4ª¸ âãl›TmeØTy{X@ý_Œ$ñ%ϊ之Äþ/¹6ÚÃO,š–¶òC0Õ¼L~sýªÀ’±–ÎíÙ.wæÍ'­ Õ¢•ºÜðñtp“ÄóJ6³]/-3·ñjÃý•d|eiŠ+u·ñ|<ŇÃJd8ñrß»l°(G!…ÞÎÿ>?x‹ÀmWŒ_ìX «d¶ñ¼ÅFÛ-k  îÊp27aQ·ùNâ¨nìî.n<] ôæYWûuá7ƒã(¬._ç!Ypr¨–‘âÜi~$Ípéâ&ŸÃî¶ñɽå¨:¦p tæv9† ¸Ìeåç›RS#3Áañ ‚\­uõïþ~zŸi|?øÁ¥üÓ­t­?âíüZ—ü$[Ái/ïcžfþÕò‹$PøÖge"6#‚ÐÈÄ ËÄY|9×ít»]>mW]Š+«+3C­ks3Úø95³#Œ\ÆŠv¡G-|§Å/Œÿþ:Ýjï¯x .ã9úÖ;y-£Ù­Lùˆ=¢•]Ñ8€prvï GÑÿ ¿hñÂ^X<*o'ò,­ŠYèÒÀûm|ו¼=zŒ©µÀSÃ'ߟZéE6¯ªëò>_ˆxw‡Â¹ÑšNÚKò¾Žúoÿì¾üaøËðËNºñ޽∛M¸º¸ûf¡¯OòìµÐh›Kß Ùèž%KáÔX­m´=nbè^‚)†C\68aó¾a7<Åÿ×Z^·«Ëmá,³ ZU† ëƒjŸøX8ßÿÅ*H¹‰$gËvÜ«LŸ3|8ðEÞ³áKayàH$ò´HK‹ï ÛI´gøy9gðküØ•rOf'ÌpÏ%çQ〚\ú^§«ÞøCDXÒ×T¹rt1ˆ oãKá¼/Ó¾Û¨UÁŒca§W²ÃSèSŽÌó~«˜Óœþ±5kt_æ½<·=KUø¯âmwâ|Z–·àß%Ìž*ŠFhü)®)Œ&¹ Txuˆ¹d Î2Š%"bÇR‡TøAÁðãY¸?ð‰,2ÜIàKÉ2òxVÞ-¾hð”€'ïó¼Ë‚¤¶Hbç•ð/Àh¿m,u øVÒ¼S ¸ ¦h›þ*}G¢[– ›¸'i€±Y; ø3àUŸÁû{ÝVã°Oÿl)žÏÃñ³‘àÿH¥LÐ+/ïIãp9RÃÝõiÁÎ*]Qžˆ6éíÛþü?©6™öÏüGÔ%—áôñGý©<³[Ká7|º‹åæ9ÓãWOí[ä$Þ?q2 „‚¼¿ã]sà׆¼G¯½•ÿ„Â>¡y aæÑÑúgeT ãûêNDMÓxGö†ðæ­éw6^'ðÐ ¬ÙÈÍc«hª¯ÿŸç-]ÔäÃ)-»9 ÊÜXœ§‡r£4¥Øö¸k>†6–BR¤õ¿/®¿ðÆGÅ/Ù·Woƒÿn>Óâ|!3´§JÒ"ὺc“áhÆí’0'ÌÜI?6Wt:¾ý’t=GÆ×k>ð¸0x®XŒ—7‡‹³êð¼;» öM¸ ¼0‘¶Ý§ÇÏÍðÖ(.uí ÚGð‹DŒ5]'tì|5L.®À cg`6ü¢(®?ÄDx÷U½Ñ#Žaó&MCÃðÅú{ÄwÊÊ¡ “‚¿ß$‘™$ð¯ë?_ÛøWN†Oøž›F¶˜µ­]ÜcHðgÌ|qF.°ͨ+÷oJx©×‹ï§Èó1ØÑË\T]Ó}V÷][ô<Åúσ¬Q—J×¼?yÔnä.¾&ÑÖ)›â‰‡—â4 m‘0 DŠðÑ‹£Ã¿<-m¬Ù\Çã¿Cjöøx|e§¹/|3— ŒóœÀX¾ðÇmê§¶ú7QÓon­5=FÿYñí±Ô'%î´7¡xÞOáÕ%lïBÎGÎpv–wµâχ†ÏÆé«ÙxƒÆIÿ Š®GÈU_‚ý§|qâ->{¹†£â+KëÍJòðÜ] r8 _ľlÒÙ‡,[a#æC‰7aÃâ1•eJªÏ¢áŒÃáNÍ^ÚuwûöG‚kÞ)Ô5X7/Š/í óFšÝäŸ/I'rŸHA*œ® Zà|Š-<óÅß¼o¡xÄI?õ=Óé:…»\Aâ=@y‹%®¥ ‚Y*Êé<‘¶U”‰™J:³G6ûO­Þ¹I«“hbxS©I+Gb»ö q…U ‘ŒGŒ…S\ÇŽôq/ípC§^Ý2i2­À±½nM•Û0g}4€y%ž@×ãêãi¹&~çK4Ô$¯k¾ÿÖ–ùü‰e-ŒÆzz›N,öÉÕw#Ë-© Œ¬O=káO­-y“Ï/üvЇpþúÿßTP£øæU»ð´Ñ -´) ·8ƒÛ¿_^•çK´c‹³2Ën7 bÁe!K*ÍѲ~Üÿ±…Ÿ‰£x>!ø~M:;ÔÚGƒmøˆj–2äøEÃôx\ãý‡91Ü~™‘æt(ä´éάbÕôm_v~q›eu±AV²¥&šŽ¶v~ì+XõxwѦ ëñ=Ÿ‡“ý5|;¨;ƒ¯ÎÞ}™Ý¸œ‚ý¿éUÖ¼)âGS¹ŽojnñßÍ,Ï7….X³ KÄ$³™<$Îa'''1c c)cã°þÙÿ±${gÅz:¼ZG”±§ƒ#&IN§ÂS#D\mž+€væ`X°Ýæ¶–½ûy~Ã2ÛÉ{eâ;í2M+ x¼€ny¼BÊû†œƒå[»(]xHHý'œ`}Ÿñ£÷«žL‹:ÚЕ½Ww¹èöþÖ£m6Î?DÓ›«’<]ÍÞÈ—ÂG ‡Œm*A ÇùW\¦£ðòú=ƒø2Å–=3I.‰dîÑ®%S¾O )'¿ Hä™87 Ìèÿ·ÿìGcªZÜÞkÑF!Õ๒x<û°/ô™YЬI¸ˆí®›nà ÈÎX´•bÿ‚þÅÖzV/â‹Ö—ûÚ¿•á ¶S£ c† Çœ\gà€Wf0Î2øÞõc÷¢±?˜Ôåå¢öìú³¯øÁðáìü_4­àm3N·‡\šãLѳ):¦¢É‡á –†UùÓá<¨bæ¾x¯DøgâÈ-õ¯ì©å-H•ô}f„ÚUÆò³iR!\L6þ#œ†u¸ÀøËÿý”Ëø>í£“SÕ.þóje“äžØøÛ'td¿'íËð=lm£‡]×§ž;¤™Ò/#HÝc°` ªç0θlzçæ_ƒS5ÂS­í)É]k½Óþ‘êÒÈ1xœ/±­g{émm¦ÿ&Ͻ>xïÂ×˽Bõ|1 Gá{Ȥ¶h<;n ?‡5äAº;+w/½ ÙùX å{˜ñ·ì×£üJŸÄQéþ Ž o¼öò®§ ¬sF<]®>ÑæêP­¹°ªœ˜ØÍÁN~Cá9týKÅÞ)‚èYO¼z~¦ÛÖ[ ëB Mq·*œ)ä†U1¿¤ÛÿÁb¾ iº¿ÛÛâWÚâòYç†ÛMñ ²ïÕ¯®É,¾.GvÙpŒ7>UžL1“Ìžz‡e•gNQ×»?:ϸ?…55—ò¯=¾ãë/|bø@·š^™¦ÞxR8æ±³K¢5í fÞ U޽}¤Ëgq“ ÈÐl|eý¤´‹Ÿ ÞéÚg‹´-¤Ò¯-ž8üK¤J"GÓ|Z æ?É´‘¨ã íAµ¿wüwð¯þ 5û1x6êÎoø³â<Ñ[-ªÎ,lµq#…>.äñ;24»°9QÄ'…a?Ž?à¹ß±Š¼:Ú¯ñZy‰=¬s<¹IßKÖ­Kf_JÄy·ð6I'a”Nã.µ3œ¥íV6õ<—Â|[*~ÎtfÝ·äÒÿwôϯ`ý¨F³®Þ=ÑLmâÝàEã+5 ÂAË0ÙãlòmóŸ/˜îÁwlŸ†ÿïu Ù¾71)ðݽ´Â߯rÛá±¼1m’ ñ…¸d;ò¬r+‘µ>m¸ÿ‚úþÄëâ¤Õ!Òþ3Kfž!Æ&Ãy?ÛÒ_Úæ~Î꽿yäe, ÿÁzd ÃZ~“7ƒ>+­´{KiÍœ–ª¯$Zw†mØ×g(dÑ®ú¨ù&*CITó,–|¿¿ß·âyø.ã¼- °úœîžžê³ÓNõ,Owªëúö´¾<Ô'ŸìÓ*[øÖø°ÿDñ­ËÊBø¥ÀP«¿™@ÄŒA ó<¾Å7¯ˆv–²xçY¹ò|U k3uñVk†Ýâ;’yV\6Ö ƒ£¦#üÚø‰ÿØý›|T/äÐü ñ6yks•¦Ó’F2/Šb\°Æ·lHÎ~Y¾bÊŽðh_ð_„¶wÆï_øiã{¢u4¾ó!“Hw޺Η¨l-5³ØÈé¸Çò…ù#™æ95ÚŽ"+çÔïÀpïK–®#-.­¢{hÏÐo x[ħÂHcÓµŸI3øYZ%Õµ©c|øCH˜Ư"|¢è)Äg9PÆU“Ð|+§x£Àþ,Ô­íõÍ^å`×u¬7Ê5?nbë'ˆÔ‚sž¹À.?#—þ }ðVÃÃÑéð§¿PAÓ|#oáI¶±pvt`A*è.~HºÿƒþÝ^M{qû ´­-ü×%dñ„Û•îõ[€„ÉáçÚJ¹ Ü0ÛFMÇüð®m5Y¿àÖ÷sÁp$Sx«JEÂü¬ºSý”„ÇËd’ÉÓ‚âXÑiUšù1ÄžåøÊ2xoîÉ·Ûk½6>´ñ‡„¼]sipòxJþЛ;†hå𜡈k?ɼùžå °Ž’U—Í·é5ÿ„¾"ŸXN‹Àñ¢¿ˆü%ð­´j¿ñ?±ƒÞ L€à2ÁAåpDOð.§ÿíøY{áÙô[?ØÆÞYô™ìÍÂx¶Á>y4½^ÄÈV-7êžiòmÂäSÕ·ücá›?ŸCûØ÷öŒ7Ž#_)¶ßT†M5OFXw p…±ó2R\K•:îN®žü^ñ,iB0 •¯ö£×æ}7á—_í$¹ðfŽÂ_ ­Æë­H;t-.a“'„d%€œKç–ù·žN;ö…ýŠ´ë©5 JÆ=ÐXÜÝì2hZ_ðê>*;LQxvÜí-§Ð`*¨Ú¾R[üõ¢ÿÁ²è^‡ÂÖ_±Í‘H484ñ9ñýÂ91éÚ=‘ì¶RÙ]-Ÿñö®¤Ä¬yïÿÁ{¼Sãnìâý˜ôûnÉ ޵#±¥}yà®Bpü½Ù€ÀYX q\G‘Ö¢¡ÌßÉÿ‘ìä¾ñŽS]Ö¥Ë;uZ4ßgµ¬q_>kþñ柫éÚa& Ëmi§…|=¶–W!²83u„œG‹â²·ðÖ£¤^ÿfÆÑiónZÙï‘–ÚP¤0¶Ïg ¶IÎsóŽçÆðXíSÆWuOÙŸL–ÚK6KI~!x„«µØÜ%o!…ŠÆOQæ³#+ó÷i˜üao%–›ðÎÃJ¶–Î8Ú oQ™ ‹¦ýõÃe™ËË‚v‚Û@Ú×Éc±9r—6mù4ôô?gÊ!šÎ‡&>š‹³Õ4ïþ_‘å’e‡êI=ê[a… ùÍB‘¾UãߥLªÈ |áô$ž`þÿéEGˆçŸëE;r<Ýèp~ó ½G}c§kQùw>>ë/êqÇNĬŠKäÄdŸ¥:dÕ£r¤žvœzWê2²ü9žRËV$`KIàc?^}…Xá¹1ÌzÍ©#X`sÀ÷hhŽÆëËbÝŽG«k«Ó‰HÌC•óT`ó€UIëõ4ó$ß|TYu+'Ý>vzœ{éÓÖ³î¾x’Ú&šYíŽÆÙ“ôùxôæ½n!¹XxwQÏaœ!Xº»±•†xóqÀǧª´¬ytžÖSKá¸ç¶qøÔxgVI [S#±zí/Fûu”“¸Å¸{ñYŠÅ¾fê#ô­Ì¼#¬³… xã̓Ҵlþx²éÐà ·Ü ã×­oià$qº€æ:€^¦º­V9 –5 ÏÀÆr[4n5ÕÎwCø'ñ?P€Ki£[²2åU®ãÜÜdœg<^8Ç^*M[àWÅ{U2Má  ãê?—'¹'±àúsžõíßËIogºFýæÐØr8aÈã öþ¦µYU8ÿo§ùÍU–Æx۞ܑ»5ÑêàF¹AŒ‚ ÿ€äV<ÜHPtó ƒ<Á&~fçÔPc”.K8â¬H HƒO>õ,üžý¨FÈÃ’ÿ\ñškFzîëNoîöÿëÓO$ýìPÙ8nžôc¸9ZŸ3©ÿ"•€ Àz@=Í ƒµ#2AþPIu^Ù `"R;úѱOANÉôôúPàéþx W$ކ”œà°ã`ŸZ$J–äõ€¶Oî~´Q“íùQ@ÿÙbitpim-1.0.7+dfsg1/help/phones-sanyo-scp6600-cables.htd0000644001616600161660000000127610643052670020562 0ustar amuamu#include "pagestart.h"

The Sanyo SCP-6600 uses the URL(phones-sanyo-cables.htm,same straight through USB cable) as used by many other Sanyo phones.

Drivers

Windows

These cables require a driver. The Driver may be downloaded from URL(http://support.susteen.com/ics/support/default.asp?deptID=2623,DataPilot) (Go to "Downloads" and then download the "Motorola/Sanyo Phone Driver"). Other Sanyo drivers may not work with this phone.

Linux

BitPim uses direct USB access to communicate with this phone under Linux. See the URL(howto-linuxusb.htm,Linux USB Setup Howto) for information on setting up device permissions.

#include "pageend.h"bitpim-1.0.7+dfsg1/help/phones-lgux5000.htd0000644001616600161660000000061710575613467016400 0ustar amuamu#include "pagestart.h"

What works

  • Phonebook, wallpaper (including camera images), ringtones, calendar, memo, SMS, call history, and file system.

  • This phone is also very similar to the LG VX-6100.

Cables

  • Developed and tested with USB Data Cable item number DCAB-LG4270USB.

#include "pageend.h" bitpim-1.0.7+dfsg1/help/howtos.htd0000644001616600161660000000116610454641610015130 0ustar amuamu#include "pagestart.h" BEGIN_TOC TOC_0 TOCITEM_0(Backups,howto-backups.htm) TOCITEM_0(Multiple Users/Data Directories,howto-multipleusers.htm) TOCITEM_0(Import Calendar Data,howtos-calendarimport.htm) TOCITEM_0(Import Outlook Notes/Tasks,howtos-importoutlooknotes.htm) TOCITEM_0(Add Ringtones,howto-addringtones.htm) TOCITEM_0(Add Images,howto-addimages.htm) TOCITEM_0(Set category, ringtone, or wallpaper to multiple contacts,howtos-group-edit.htm) TOCITEM_0(Do Data Recording,howtos-datarecording.htm) ENDTOC_0 END_TOC #include "pageend.h" bitpim-1.0.7+dfsg1/help/tour-prerequisites.htd0000644001616600161660000000130210360163373017471 0ustar amuamu#include "pagestart.h"

You need a cell phone that BitPim can talk to (details).

You will need a cable that plugs into your computer and into the cellphone. The page for your cell phone lists details of the cables.

If you use Windows, a driver is required for your cable. The driver should be supplied by the supplier/manufacturer of the cable. Drivers may also be available online from the manufacturer of the cable or the phone. The "section" of the help pages for your phone may have pointers to these drivers. Mac OS X and most recent Linux distributions include the drivers, if required. #include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-motoe815m.htd0000644001616600161660000000047210454040563016451 0ustar amuamu#include "pagestart.h"

What works

Phonebook, calendar, ringtones, wallpapers, SMS support, and phone info.

Contents

BEGIN_TOC TOC_0 TOCITEM_0(Notes,phone-motoe815m-notes.htm) ENDTOC_0 END_TOC #include "pageend.h" bitpim-1.0.7+dfsg1/help/macros.h0000644001616600161660000000000007717413055014533 0ustar amuamubitpim-1.0.7+dfsg1/help/lg6000-notes.htd0000644001616600161660000000051710360163373015643 0ustar amuamu#include "pagestart.h"

The phone is very similar to the VX4400. Please read the notes for the 4400. The following information is in addition to those notes.

The phone has 6.5MB of memory to store files etc.

The USB bug that affects the 4400 does not affect the 6000. #include "pageend.h" bitpim-1.0.7+dfsg1/help/faq.htd0000644001616600161660000000267610732342453014365 0ustar amuamu#include "pagestart.h"

Various questions come up regularly, so their answers are placed here: BEGIN_TOC TOC_0 TOCITEM_0(My phone is not in the list,faq-phonenotlisted.htm) TOCITEM_0(Which features will BitPim support of my phone?,faq-phonefeaturessupport.htm) TOCITEM_0(When will you support my phone?,faq-phonesupport.htm) TOCITEM_0(I get a Brew File Locked exception,faq-brewfilelockedexception.htm) TOCITEM_0(What are the memory limits of my phone,faq-limits.htm) TOCITEM_0(Why do you do this stupid thing with my phone?,faq-stupidformat.htm) TOCITEM_0(I get an IntegrityCheckFailed exception on my LG phone,phones-lg-integritycheckfailed.htm) TOCITEM_0(How do I bypass the Image Preview/Conversion Dialog?,faq-bypassimagepreview.htm) TOCITEM_0(How do I bypass the Convert Audio File Dialog?,faq-bypassaudioconversion.htm) TOCITEM_0(I do not have the Send Phone Data memu item?,faq-donthavesendphonedata.htm) TOCITEM_0(What do those colors of the color-coded field names mean?,faq-colorcodedfields.htm) TOCITEM_0(What are the differences between the Replace All and Add option when saving ringtones/wallpapers to the phone?,faq-mediaoptions.htm) TOCITEM_0(Why does BitPim show media files on SD Card as having 0-byte size?,faq-sdcard.htm) TOCITEM_0(Why did BitPim fail to detect my phone?,faq-faildetection.htm) ENDTOC_0 END_TOC #include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-lgvx8610-notes.htd0000644001616600161660000000323011041674517017340 0ustar amuamu#include "pagestart.h"

Firmware Version

  • The firmware version of the phone used for development & test is VX861V01.

Phonebook

  • BitPim supports all phonebook features of this phone.

  • The phonebook can include up to 1000 entries, each entry can have up to 5 numbers for a total of 5000 numbers.

  • The phone supports up to 999 speed dials (1 through 999). If not used, BitPim sets speed dial slot 1 to Voice Mail.

Calendar

  • BitPim now fully supports all calendar features of this phone.

  • For recurrent events, phone events have End Date and Repeat Until fields; when BitPim retrieves calendar data from the phone, it combines these 2 fields into the End Date field.

  • This phone can support up to 300 calendar events.

Ringtones

  • BitPim can retrieve and add Ringtones and Sounds files from/to the phone.

  • BitPim will not delete Ringtones and Sounds files on the phone. They must be deleted manually from the phone.

  • BitPim can make use of ringtone files stored on the microSD card, see section Howtos for more details.

Pictues and Videos

  • BitPim can retrieve and save Pictures and Videos from/to the phone.

  • BitPim will not delete Pictures and Vidoes files on the phone. They must be deleted manually from the phone.

  • The default Pictures format is JPEG.

  • The default Pictures resolutions are:

    • wallpaper:240x320

#include "pageend.h"bitpim-1.0.7+dfsg1/help/screen-invalidimagefile.png0000644001616600161660000001315607727002770020371 0ustar amuamu‰PNG  IHDRE°¾BsBIT|dˆ%IDATxœíÝ}$gAÇñoÏÌîÞ¾Üårwä¼pŠH…ðR$„²Å€„T‰¢ AEª Bˆ^H !øÃ*ŲD,µJ”_Š?f)@ÄPÊB©X!ä¼Ü˾¿ÜîŽôÎÞììôLOït÷Ìì÷S5µ;ÓÝO?ýôËüöégfƒJ¥RE’$i+—Ë”&''ó®‹$IR.n»í6€0LMMåVI’¤¼•꟔˕ís ¿ͦ Ïë§7¾¯Ì “2ƒ&O:ªg1]=šlFÛzD”»ŽÛªœ¤Ìn·nwŒ2“´eТ­ºÒþÛ¶#Áq’øüHÖV±Ž‘ËLÔ–´:N¼–l㵤y™^Kâ—9 ×’mÇH ¾xÙ©Íß ©¯M’$©”ÚÏ"I’”Ÿ“·<·«åAÀþ;¾¿íuC‘$IêyÝû\©T"§yûL’$ C‘$I`(’$IZŒ)ªV€ p[f•¨.Ý@aôNÖ?>»3r™õ¹„óL|$zž™ß çÙ÷‡]©gV¹qó÷Ò¹÷°úpø¼ôä{Âé½+|~ôSÙWN’¤Œ•Ëe ù8¡VÓ¢ôü@ëÂèÍ¿«b—Y{äÝ@†jJçÞcÛH’v½r¹¼%üÔQ§¼}&I’úR³ Tˆ:é%‚zŠªë¿×ôõ ôápúê­áó¡Û·.·ò¡ðõá;¶<ßRÆž?ˆ\o³Ûgëóˆ[íèr§ß¿íµÂþ±~ê}gžŸý±-Ó×Nܼm™âÁ»¶ÎóÄ{›®¯ø¤Oœ™ç±›¶O?|wd]k½D«߸Ù[Ôxû¬™ÕÞ¹íµÒyŸŽœ_’¤~R©Tºˆ aOQPü0A±†š‡¥f6ÒÈ0 ÕÆű¾°’Æ?Ba †n?3–hèvÎtMÃwP] Ç5ª.ÝÒòSh5…±;Y_ø`æa¨xàã‘c‰ÖŽ¿—âÁ»(º‹µ'Þù 4€â9Ÿ`í±÷l»}V<ܤçh‡JG?ÅêƒïÚvûÌOŸI’A«ð“$E†¢ Øø&ë7ê ðá-ÏacÐuÐð"Û?–¿eÚðu³[~ÀÆÇó6^löåÛWÇ…}Ý2c»ÖµãuËÔ' 'n_qñPí#úÍ{‹ŠçܻޛËùdX—ºe¿¼±ôäOm+sË­³×)IÒnÒ÷·Ï$I’º¡çÿÍG¿ivëÌæK’´3IÇ uÂPÔe·Ï$IÒÎM†«¤ÁP$I’zÚþ;¾ŸÉzS$I’DCOQ¥RΩ’$奚pš=E’$IŠ$I’C‘$I`(’$I E’$I€¡H’$ 0I’$†"I’$ÀP$I’Š$I’C‘$I`(’$I E’$I€¡H’$ 0I’$†"I’$ÀP$I’Š$I’C‘$I`(’$I E’$I€¡H’$ 0I’$†¢Ž”Ëå¶Ú|­ÊH²Þݤ~{Ûm{Ôô~i³fÇL¿Ô]’M)ï ô“J¥²åy¹\ÞöZ§e¤µÌN$Ù®´$­G¯Ô¿•úvî‡úJÒ ³§H’$ {ŠRU» Rß ÐØ S«$ª·`'Ë4«CcõÓëoç4+;j¹Võmözœrš•gÛ›­«Y[tÚ6QuhUǨz6¶s«Þ¹VåõR¯ž$õ;CQJš½)·š§Õ|I—‰ªC³ej¯µzƒnµ\'’–Ó.|Ä]¶Y8ŠÓ6qêwÛÚ¡¸åˆ$©{z.MN¾ØÇÔÔ_ç]•ÉjìP«eºý†YßÛg¾¨ð·œnÕ§6o«çIÊL2¿$©wõT(º|ò Â*M39YæÂ ßÄg>s}ÞÕJMãjœ“d™n‰êµÈ«œ4t£nÝÞ–^iIt=Š&'ËÌÍÁPé4#{Â×>ûÙâ_vˆ¯|éê|+—¢$ãCúaLI}oQ¯Ö1-iôÐI’Ò×3Ÿ>›ŸƒÅE* ¸øâG¹òÊ{y嫾’oåR’´—E¡^h‹8u°çH’úCOô]vi™Ç!(@P<\Õû!˜å曾ÅW¿òL^ÿú¿åóŸ¿&ïªvU^·Ïšƒ©/'ªw'j¹¨ž n•µ\ãyÚÕ­]Úµm·êS³Ûzá$)MA¥R©NNN255•[%.z^™SÓ°wöøàpŠÓ ÷14W]u _ÿÖQ¾üÅ_Í­ŽRƒ‰$õ·J¥Â±cÇzãöÙÜ,”Š02R–ÿF(Ãé7ßø ‹¼éÍ_ͱ–’$iå~ûì¢ç”™™±Q–€E`Ž`䘌òË~Ê•WÜÏÔ7Ÿ‘sm¥ø_<)Iê/¹ö]þÂ2óóP`ßÞ"0Dui…oüs8ì…R¼ã·þ•Ópýõ™g•¥Í±Eµ‡$i0äŠ`u Ƈ±qþê ëF×yé+Ö ‚u|9ÀÚ4\õª¸ì’ûyâäDžU–$I*×PTK4>öýÆuóÀÆxð |àãÀ8Å"P…›~ûÛÌÎ ó¦úûÛ®%IRïÉ-]üÌ2k+0\Î'Ktg‡€Ì\a☫¯ú1W¼ä~}do^Õ–$I*·P4?Ž%ÛöÁ"ûdž€QÖXÖyÊ‘E±Eû JpÃþƒÓ§ Üð¶ÏåUuI’4€r E/zF™•e-Âоq¨†!è•/0ºg‚s Ã\òâi` X‰'±z®»öG\ðìGyôøÁ<ª.I’T.¡hvŠ+ÁÐÌ,pÝkçuŽ9güÜ.¿üdxWmé ï§Tªpã ÿÊìô(¿ùö?É£ú’$ieŠ.~jØK4ÀÈè(œ^¥5X‡£GªÀÄñöI’¤îÈ<Í͆+.0R„¹%Xæà¹ÀÏ.päÉÏâiO}0w½JøsþŒsz†÷Á[¯ý.§æ†yí¯9ëM$I(ÓPôâóʬ,A1€Ñ‰X[ƒ•ÓP%üëÃðüç¬ðGŸÿ:W^ñ`8þzpúlx‹­4¶‡å'àw®û/Î?:M1XÌr$IÒ€Ê4ÍÍm¢a(Žî¥Óa/Ñ:aP^ø¢*p‚Ÿ}Ê©0 Õ¦¯¬ÂÒÁÙ Va¸é-ßæøÌ(¯~õ—²Ü I’4€2 E—-³¼C› ÓÑârØ´Jøs.}ÞIF¸ŸóŽ®†ã‰Ö8šNNÃð(ÃãÃ0o|Õxæù'(íYËj3$IÒ€Ê,ÍÏB¡ #CPœƒ…%X­†§Ö#4/¸`‘sö/qðIë°Ì™P°° Kópø0§aâ ¼íšï1=Wâ5×|1«M‘$I(“PtÉá^¢Æ÷N@„¡¨vk¬îÚÈÞ5þü“߃aÂPT›F8ÇÃðCûÇY;ïzã÷xúÑS‡‚,6E’$ ¨LBÑì)¨®ÃØp`ï˜_ÜÚKT%üÆêq`ʯ;†¢‘j=I0¿xä\‚u`Þ÷æor|vˆ_{ÿM’$%“z(zÑ3½D#ã{`u ·öU øÎ׆ žM0>³.|kÇ ?VåÌm´uà±Ç  …ñ1˜†kù‡<ûüãcöI’¤dRE‹óáÿ8*B°gæçÏ ¬®õþ|ý»Ç“Àþ÷‘ÜúÑóá,¶(€å58~Î:›•e;×¾ü,ÌŒñº×þMÚ›$I’Pª¡è’}ešïÖ`yeKÚ|,Á½Ìyþ¹¯à¼ñ—Rºlkxªÿˆþô4 džY;ï|Íw˜[fdt%ÍM’$I*ÕPtzÖN‡Ÿ:+7n›„)©P÷«/=”xøñö…{xÉKfÂÿ}pfÞÚ²««pê$ÅjÀò ìÝ¿tÑ9µ8–æ&I’¤•j(ZX ‡­¬ÀÌ©5O¬²0 ³ß—¦Çà>÷Snûo~Ã,ó]ÎË/ú{V†Å™­ó/ÌÂâL•¥ŸÎ1sr™•e`^ø¬‡X^)ð–·¦ÿñür¹¼å5O»åZ-¯iÕ®i탴÷e/+íÚ¹“ùãLZÆó*”U›'].­ýR_n¯îûN÷M7Ûw§mçJã¼k,/í}[J³ðÑ<±vê,¯T ªÞÛ®P€Ò¼ÿúû(÷1¿<ëëPm²\•Ž£LìVáÿyã{ÖY«¦û¯?Êå2•J¥íkQšÍ×Éòý —·'ªnÔ¹~Þúß{u›wÏ«äêËÜéµLÙ‹ºeuü7®'­õf±=©ö}w½ÂÙ@ŽO81pbNL7¹V€ °ÎÁ³–(T«¬‡ù‹?¾& ‰©;¬ÙŽou!‰z­]ÙÍN°NÖÑlþN/zq·¹UýšÍ¥ÝIÙ®.í¶/ªœNê·ÍÚ­'ÎôvëŽSŸNëÛì͡ٳÛvãyg5­öKœõÄmƒ$ºµošÕs'Ç{’哊s\ÔD½§Îí®ÏÛ¤Ça«õ¶ÚžnÊ$üãß]™Õªv­¸K³“'íuÆY&Îb'ÛØª¬f'^'[õÝÉz’¬;ÎúÒj»´Þ\:­G’ùzå¼ÚI™.—¤ ê÷sÔÏúù’hUn^wÒZ¾Ûå$Yo­ÛªÓó´Óã)é>O*³P´[e•nÓÒ2î_Q½¤-é_GijÕfYSÝÜö¨úF½ùíiŸW½Þ¦Iê—Öõ¡åv2¯ì›4æ 0uQ/èÝ–Æ_8y·SÜõç½/ól³¼·½fPƒÓ žW»Y?¶{?Ö9 …¼+Ðo¢ºóvzAêÆ-ª^Ý”¤¼ÈY'û@ê„¡H©©V«yWa AÐñ2SSS)Ôd÷JòFì>è.ÃÒd(Rª|Cèß$)}Ž)’$IÂP¤ ÕÆù³³Ÿ’¤l•J¥:99émuU¹\¦Z­nWårÙ[@ ÔÚ­R©pìØ1 ³Öž×ÝUÛîƒütº¤8jÇ•=EÊ„°dl7IÊŽ¡H™ðVP2¶›$eÇP¤Lt»Ç£\.7}$)§—õzOQ¯·ßnÕj¿t²ÏÜ¿Úm EÊD×ÚX›úGšñ<Þ |S’¤ìŠ”‰¬z<ÒFYëõž"I$~y£2‘ç§ÏCR«zDÍ[ÿ1ùÆ×â”›T¿}j¯¾Mjµ¾½êCkãvµjÏúe³lÿÝ n;6î¿VóJýÊP¤L䈚½ù6«O«y£Þàã”»ýô¦Ó¸ýÍzì¢Ú0N{æÑþý,Ni§íØjŸHƒÀP¤LxñL¦ŸÛ­Ù­ÌlK¿¶C^Z›n—) C‘2‘çÅ4­OÛd1vÉ7¡hƒ4v,O¶£t†¡H™È³Ç£“õ¦5oRýÜS”6Û¥;lGé ?}¦Lduá"ú©ç¨Ÿß°²î°Ç£;ºõGR?²§H™H£Ç£ÙºqŒki7oý`ën—‰ÒO=EÍ>™÷M´Óö̪ýÝNÛÝ6× 1)y~*«ÝE¾“rCRÚzýM§“ök7o'˶›·ëÖ1o»k·ñö™2a·{2¶›$eÇž"e¿.“é·vó––¤~f(R&úilL/é·v맺ª3î[íÞ>S&¼ &c»IRv EÊDí¶Š?“ý”$¥/¨T*ÕÉÉI¦¦¦ò®‹H¹\¦Z­z\uI¥RáØ±c›¿ÇáyÝ}µýà>ÈO§û@Š£v\9¦H©òÂ%Iê†"¥&‚¼«°ëJóç>ú‡¡HP†Òü¹¤þb(R*üë8îƒü¹¤þâ§Ï$I’0I’$†"I’$ÀP$I’Š$I’C‘$I`(’$I E’$I€¡H’$ 0I’$†"I’$ÀP$I’Š$I’C‘$I`(’$I pÛm·å]I’¤\@5ïJH’$åíÿnM5i!$)IEND®B`‚bitpim-1.0.7+dfsg1/help/howto-addringtones.htd0000644001616600161660000000203110547564173017427 0ustar amuamu#include "pagestart.h"
  1. Switch to the Ringers tab.

  2. Click on + taskbar icon, or main menu Edit  New...

  3. Select a sound file to add. If a conversion is not required, the sound file will be added directly to the Ringers tab; otherwise the Convert Audio Dialog will be displayed.

  4. From the Convert Audio Dialog, set the appropriate conversion parameters and click on Convert.

  5. Once the conversion is done, create your sound clip by setting the Clip Start, Clip Duration, and Volume Adjustment parameters and clicking on Set.

  6. Optionally, click on Play Clip to listen to the sound clip and readjust the clip if necessary.

  7. Once you're satisfied with the sound clip, click on OK to create the clip and add it to the Ringers tab, or click on Cancel to forget the whole thing.

#include "pageend.h" bitpim-1.0.7+dfsg1/help/lgc2000-cables.htd0000644001616600161660000000025610547564173016115 0ustar amuamu#include "pagestart.h"

This phone was tested using a straight through serial cable. Other users have been able to use a straight through USB cable. #include "pageend.h" bitpim-1.0.7+dfsg1/help/pageend.h0000644001616600161660000000023510547744461014667 0ustar amuamu

BitPim Online Help built DATENOW

bitpim-1.0.7+dfsg1/help/screen-wallpapertab.jpg0000644001616600161660000023372510546621525017556 0ustar amuamuÿØÿàJFIF``ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ Š"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?òí'H‚æ!-Ó9RxEã#Þ·¢ðþ†FZ9ÿ *‡‡âk„‚-ø22®Olñšên¤Ó,Œ_èòJ…Ý–8ê¸?ôU± 8Bµ;¶¯²8p¹~;2¯(P¹{Ý#+þÿÌ7?÷ò›ÿ÷‡?¹¹ÿ¿• öж”oàšI 9 ‹€«ÓƒÜúëKi¡j:…¼aí8¶W–æ8·K€B ì 8< éÁWËñP”ÔRvÕ$pãp¸üOeZNþM™ßØ>ÿžW?÷ò“þÿuò®ïå^ŸCÕ-SPyí1§²-Ö⌱Âñœœûg‚CR[øwV¹DZùBÐÆ'72$ ýÀw‘׌}G¨®ùað)7îÛåýÜœø«ÙIýìÎþÁðïüò¹ÿ¿”`øw§•qÿ+B_êÐ]ÝÚÍhÑÍi\L”z¶s‚9íšËÁîqõ«Ž?†1q.®!=fÿcO–ÏJಖæßï(ÚÙüÅXmN2¡ ÕÑQÛ ÿÄ×?øÑÏ­L²ŒŸ3¥¹±¸µ¢«/½›s][\%¸¹`:}Ñý*&6 0e¹#Ó+þ“Ÿz3îhþÈÀÿϨýÈ>½‹ÿŸ¯ï6Ḵ·9Šk…íÑô¤¹¸µ»B“OtTö]«ü…bçÜÑŸsGöF;û(ýÈOŠ{Ôy$š‡emÏÑ>¦SBè>R Ãr0ç¥GŸsF}Íj²ü*ÑA}Æo]ý·÷šöÚM "´&}…YÙ…Ú%¹ê¿áXÙ÷4gÜÔ<¯÷¤¾äZÆb–ÕÞk±‰n5ÿ ì÷¤¹8÷_ð¬œûš3îj²p?óê?r+ëØ¿ùúþóT 8t’ëó_ðªwV…u(–d¸g÷â«gÜÑŸsV²ÌÚšû‘‰{Ôy¨‰¦Ç^ä/Le§‚âÒÝ"šààçaþ•‰ŸsF}ÍKÊpOWI}È¥Å-ª?¼Õq§HÙfœŸ\(þBž²ÙªíÝãÓ+þŸsF}ÍÙ8ùõ¹×±óõýæì7–ð)X®.@=~çøTM%“œ´×$õÏËþŸsF}ÍOöFþ}GîCúþ/þ~Ëïg@º”K’.n6zmOçŠHu­É1\Ü©>ÉÿÄÖ}Í÷4cà?çÌ~ä^ÅÿÏ×÷,š×›Ǽº+é¶?þ& [èÜ`õùSÿ‰¬ûš3îhþÆÀϘýÈ_^ÅÿÏ×÷4á·M‘]ÎÓËŒÿìµ^kÛyß|“Î[·ËÿÙk>æŒûš_ØÙüù܇õì_üýy­'ö|¿}®zð¿áTFÐ$ûétO_õ•}Í÷5¢ÊðkjkîD¼f)ÿËÇ÷š6–ÚM‹·) ÚOê*ì·ðO2âäã§ ÿÄÖ}Í÷4¥•`¥ñROäc1+jï7×P…ÅÆ?ÝOþ& º–Îõ6Ï-ËÓWù ÇçÖŽ}jVM€NêŒ~äW×±óö_yµm=œ- \ª7\í'ó ÕíX͹·7˜UdŒƒÿŽ×;Ï­úÓþÈÀÞþÊ?r¯bÿçì¾óNÞ=6Ös4]Fçц?,cô«ëªÆ£æä÷Sÿ‰®wŸZ9õ¢YF[ÒÜ…õÜWüüyÒÿl€»EÝÎ;ü©ÿÄÕ'’ÅÉ--É$äýßð¬~}hç֒ɲõµýÈ]ÅÏÇ÷›)%Œg+%À?ðð©òÙºÍpÿâk ŸZ9õ¦ò|ÿ—Qû}{ÿ?Þt1ê‘Ä0—WJ>‰ÿÄÕ{ɬµ u-Ì t ·ü+ŸZ9õ¤²|wT£÷ xì[ÿ—²ûÍ[UÓl¤ó-ÌÑ¿¨¥^:²nÜ.îw}ÿ‰®sŸZ9õ§,£'wJ?rŽÅ¯ùxþóu¯-œ’ÓÜs÷Sÿ‰©WTShº¹Çû©ÿÄ×;Ï­úÔÿceÿóæ?rÿ úö/þ~?¼è£99õÂ…?ûY{]\ƒØ…Oþ&¹Î}hçÖ—ö&]ÿ>c÷!ýÿ?e÷³~ãQ†å•¦¸¹r½>àÿÙjS¬¡>×s·Ójñ5ÍóëG>´ÿ±rÿùó¹ ëØ¿ùøþó þÒˆý¦ç?Dÿâj#qhÓùæ[3¦ï“ÿ‰¬N}hç֚ɲõµýÈ_ÅÿÏÇ÷›ßn€!Q=ÆÓÉNñÚŒÏfO3\ÿã¿áX¼úÑÏ­?ìŒüúÜ…õì_üüy°d±'&[œýWü)æâЀ ·î…bsëG>´d`çÔ~ä^ÅÿÏÇ÷›ksh½&¹ü“ÿ‰¥ûU®Ò<ëŒdÿâkŸZ9õ£û#ÿ>£÷ úö/þ~?¼ècÔ¢v­ÍÈá?øšïmÜü×'2ÿ‰¬.}hçÖ—ö>þ}GîAõü_üý—ÞÍõ¿F÷¸Hÿ—ûJ-»~Ós¢ñ5ÏóëG>´cà?çÌ~ä?¯âÿçì¾ön‹Ë`¸Üÿÿâh–á³ö‹¯üsÿ‰¬.}hçÖìlüùÜƒëø¿ùû/½›ë¨Â­¸\\ƒôOþ&”êq·7'þŸüMsüúÑŸz_ØÙüù܃ëøÏùû/½›¦úë=ÏäŸüM!¼·=g¹ü“ÿ‰¬,ûÑŸzØØùó¹×ñŸóö_{7Åü`Osù'øRJ%é=ÏäŸá\þ}èϽ/ìlüù܇ý¡ŒÿŸ²ûÙÑEª¤,Z;‹O²…ª¤¹î.Kzíü+Ͻ÷£û/ÿŸ1û¾¿ŒÿŸ²ûÙÑÿk(à]]Á?‘õe‘65ÕјOð®w>ôgÞì\¿þ|ÇîAý¡ŒÿŸ²ûÙµ4Öwä–é—ÓåÈS£»¶‰B¤×@÷?°óïF}éÿcà-oc¹×ñŸóö_{:ÔcuÁººöûŸáLû]¶ýÆk’{ä'øV}èϽØøùó¹×ñŸóö_{7–öÝT-Àý˜ÿšn­™6™î±è6éXy÷£>ôcà?çÔ~ä_ÆÏÙ}ì¿ö=#ÏóñsæzîáWþßÊ>ÓvôûŸáX9÷£>ôÞS–ô£÷!}wÿ?Þo¶¡Œ5ÅÑúìÿâj³g¼lŒ÷%OQòÿ…dçÞŒûвŒv¥¹×±óñýæ¬:e’²Û›” ÉåOô©D–C?¼¹çýßð¬|ûÑŸzo*Á=é/¹Æâ—ü¼y´³Y¨ÂËs}ŸáLÝa»;îsìWü+#>ôgÞ—öFþ}GîAõÜWüüy´³Ù¡È–ç?ðý)ÒÝZÏ·Ì–àíéÂä+>ôgÞìŒüú܃븯ùøþój)í!}ÑËr­ëòæ)Ó]Û\ešåˆöOþ&°óïF}èþÈÀÿϨýÈ_ÅÿÏÙ}ìÚóìñ2ãDÿâj-šw?5Ï>…Gò•Ÿz3ïOû+ÿ>—܉úî)ÿËÇ÷š/o¥ºlf»+é¼T ¥h€åRç?žœÐ õ?ìÜ_Ã_r'ëX—ÿ/Þh%¾”Ž3s‘Ü:ŸéV^âÍØ–ãpéÊÿ…z¡~Ö/=µ¬÷6ñ[Ìñ$pÊȪªÄ8è+ãÄw©5+ñî.ßükͧ…ÃÕWXxÿ_#¹Ïù}/ëæsLÖd¹?B¿áM•téÈ24îW¿ËþÐ[<šÜö©©H÷{u[8Îå˜$†M븜à쯭vze¾©¯@Mü•w)¸‘'²…è8¢2Ár9û(´¯·’¿eØ^Ç)%í¿×s’·J²b`ûJ“ßrŸæ)ó\XÌ›^K†R ä(úö¯Y–MF]>{Ûk˶Šˆ—O¸ }ìg…ÿëúV\×Ãhòêo¼ŠÝ\"ºpe9ÇÊ3Î?§|ðåœ`Ö¿U_‡ùA —Õž%®~íÏ»´ÓÑÖ{v‘vœÇ9­¨â¹hÕ–<©‚9ßeåÓî܆žæÐÉ3÷vJ›©Â.OsSiž Ô Òl⌉*å@ UæØ|=jt«Ó/2Øœµ¡:”fïÊÌ_¯î­Ø+7 á:Ÿóýjư›ˆšá]2Á|–8-_N?ŸµOEœ[ÙÂíÁ‘šèáñ ËÆeŒÆ®‰NéÔ{ŸÏ5êæ¹Mlo²•6•—WÿåÊó¿ìÚ•#8s) :ÚG4«Í ¸Ã6ñTðAàr8ä ê´K{™¼ f–ú2j¬ºú¹†Er¨¾OÞùX9-•²A®Uµ‚ûwL¤* @ÚAÆ:óÁ9>õJilæÌHÜŽ›”¯Z¬OV…J¬ÕÜ“ÓËî8³Ùb±^ÝEÚÖ=Ä’ÚÎÞ7¼‰-.d´¼°0NöñÈQÉA#í#8àúš¿âqÉã·Ô<ø¬Xé~[[À›¤@Êr¤•–Ê–$ãçn+Ëüû\.U0§psÈÿëÐf´,Xª–È%¶å²:¯½vÿd¥eÏ¢·þÛþ_‰Æ±ÒW÷ÎÛûN?ˆe6+ö{OH¶‚î4–e1µòs†ÜÄðHàwµ|A%–ž|]ömHÙ2Ù \Ù¯ü¶Û¼·÷¾ñöã¥y¬—Ò.ɲ·U+Á?JhšÓo ÞßÂŒnõúûÓ–U~hNËOÓüŸÞ%—/½¦÷Ž,­íר§Ïáïö"ò¨òª_µÃê(û\>¢—4{‡¿Ø‹Ê£Ê©~×3‘GÚáõsG¸{ýˆ¼ª<ª—ípúŠ>ר§Ïáïö"ò¨òª_µÃê(û\>¢ŽxwüCßìEåQåT¿k‡ÔQö¸}Eðïø‡¿Ø‹Ê£Ê©~ר£ípúŠ9áßñ±•G•Rý®QGÚáõsÿâÿb/**¥û\>¢µÃê(ç‡Ä=þÄ^UUKö¸}Ek‡ÔQÏÿˆ{ýˆ¼ª<ª—ípúŠ>ר£žÿ÷ûyTyU/Úáõ}®QG<;þ!ïö"ò½'”} Kö¸½GÚáþõñîÿb/(ú<£èj_µÃýê>×÷¨çp´ûyGÐÑåCRý®ïQö¸½G<{…§Ø‹Ê>†(ú—ípÿzµÃýê9ãÜ->Ä^Qô4yGÐÔ¿k‡ûÔ}®ïQÏáiö"ò¡£Ê>†¥û\?Þ£ípÿzŽx÷ O±”} Qô5/Úáþõk‡ûÔsǸZ}ˆ¼£èhò¡©~×÷¨û\?Þ£ž=ÂÓìEåCG”} Kö¸½GÚáþõñîŸb/(ú<£èj_µÃýê>×÷¨çp´ûyGÐÑåCRý®ïQö¸½G<{…§Ø‹Ê>†(ú—ípÿzµÃýê9ãÜ->Ä^Qô4yGÐÔ¿k‡ûÔ}®ïQÏáiö"ò¡£Ê>†¥û\?Þ£ípÿzŽx÷ O±”} Qô5/Úáþõk‡ûÔsǸZ}ˆ¼£èhò¡©~×÷¨û\?Þ£ž=ÂÓìEåCG”} Kö¸½GÚáþõñîŸb?(ú<£éR}®ïQö¸½úQÏáiö"ò¥Qô© Ü9ûߥl‡ûߥ>xw§ØÊ>”yGÒ¤ûd?Þý(ûd?Þý(ç‡p´ûùGÒ(úTŸl‡ûߥl‡ûߥðîŸb?(úQåJ“íÿ{ô£íÿ{ô£žÂÓìGåJ<£éR}²ï~”}²ï~”søZ}ˆü£éG”}*O¶CýïÒ¶CýïÒŽxw O±”}(ò¥IöȽúQöȽúQÏáiö#ò¥Qô©>Ù÷¿J>Ù÷¿J9áÜ->Ä~Qô£Ê>•'Û!þ÷éGÛ!þ÷éG<;…§ØÊ>”yGÒ¤ûd?Þý(ûd?Þý(ç‡p´ûùGÒ(úTŸl‡ûߥl‡ûߥðîŸb?(úQåJ“íÿ{ô£íÿ{ô£žÂÓìGåJ<£éR}²ï~”}²ï~”søZ}ˆü£éG”}*O¶CýïÒ¶CýïÒŽxw O±–})|¿jÚáþ÷éGÚàÇÞ—åS)FÎÖS¾Ç£Ç¦ÜxƒÄúµ•´‘+Çq;! $#ëYž&ðÍç‡Ö»–ó÷mò˜œmÇ\ÜÖÖ©¤_^Oxúõ´—.ÒI Ù,ª¬Ç-†2¯ç¥D÷Z3gþ':€úi©ÿÇ¿Î+ä§N¤o+E-¬ÿ3Ó¨ù¢ìµõ5|6U®¡Œ gNÿÚÕ§¦Eq©xné-¡–wA•‰ mg¹›MjÃHÙöf¹µÅtòO˜÷mP¡›ûÍ“ŸN)¢ëC\ùz¦¡7ü³6ûG¦ï5sõÀéÒ•HsJsÛšÖÒûy œ¹RO¡ÒYèÚ¥ÕÅÄú}Ô1-¥ÉgxYT~åÇ'¤U= @b²ĺ§úsޱ¤¸ÑdÎu‹îzÿı?øõIk®éúi¶‚ÜÜ\[ÆÓ´¯"ˆÞC4b7 BáTc“Îs×kSh5[O¥º>þ¥Qš§U9lšóê@ðì‚ÚÄמE´)ØAi˜ÿ=;’1‘[Śń:µœ»-íÂÂöD€m‰ãåž¿¨^4jÚ0µu"½0tÔ?ûZ£—SÑdWRç¯üKWŸü_ò¬'"§§©÷1Ìp ¿¶ö–~šzÞ-O6ÏF|Ë‹ÿéLõ ƒìë_›þY'ðŸAM×u+kÕ·ŠÕdö°ù1´Àä$ÀåÛ€NsÖ´ô¸åþȲù£ÿPGû"¾‡JTpXxMj“ý…E[ZpÙ½ o‚\êoÿ^²ŸíG^©{¯=¶ªúm¶¨jÇsÉöcTWgUÉ*œæ6鞃ּ¯à—”ƒþ$ÿТ¯M»ð®Ÿ©ø–çQÕtÝ>ú³‚Vê‘‘‘ægÆå8HœŽNÞ}k—6¿Wì¿# 7Ã/RHüQbouÖÖÆ8ä{™®.Zi¡Á9!y‡¹ÏÍ‚ÈM ͼSÛɰÈã’2 ²‘AŠàåð.¢o¦»ó¢­Ñ¸Š$»–ݤÌ×­ƒ* Éò]©È%YqƒººíM:N £"#’FT–I³»9ä%œåŽXã'œ àyŽM-ÒOªjiEî¥:»CgÜ:Ææ ¤àtçƒÔÕXõ´ŽÖâëU²›G¶ƒnfÔ&Q$uIqÔŽZ¤ñ„º·†õM6EšîÎXÈH]ÌŒ£vqóv氡е!´kM CÓZÆð]ÅkirÂ+†1Ioa ì 89 ÙÛŽ:ÒR}ÅdImãí! †âæXm­§¹’Ý.¾Ó„…{…G-¸¬-˜ƒ€ `8b:¬Waá-nÓP]]¿³Úñ'7+mç¾ÂÍ-ñe2yy-âvœ”#×{þ}hoÌ,ŒÝ_WH³U±¹½šîàÁ þXfo-¤ÿ–Œ«ŒFÝéƒÄzTzx»½»‡OE“È‘oeHÚ)qŸ-‰8ÝŽF >e%H4ÍzÊþæM*ëNŠÚi¬nÌæ+‰š%u0Ë7*?9æ².ü;«H¯r²$³]N×–‘_Íg˜R$M’Æ¥ÈE‹HËÂíT›Ì,lÅâM-õ Rɯ`‚ãM§IeD"?-$óqœùxÄjý妡j—V70][>vMѰqà ƒ‚1\–‘ákGÐdÓ!ž×2Alï2O"7™0Âñ .UYa`&:ïár3ZžÑï4xux¨’]Ýùê«{%ÙP!9’U Ä”' ŽÔ›óÐs€:wÁèÏôúÖ^*±š "EŠ|j¶ËuƸFxTÜÀnÌéÂç$2pçCÀç¥r'ÂFÚ‹C2“>¡k<~c“û¨îÓîÂýýòÎ8+åç1"~`tkZTò\$Zœm"Ã8YИ¤fÚùùX·ü ž;ËI¥X¢¹äo3®¤µøÿeˆÐðk†²ð%傾OÚ4ûdŽÆy/î'É‘H…‘þX´ ¹1ÁÀa·æÜѼ-ý­}¡næžÚ+St›äó$Ùç3| |ÆŸ#«É3î.ûÒpz`ý1YW:ý¥µŽ·w$s˜´}ßi £-¶˜ìçåp9Ç úV®sÖ¸Ý_À¶º´>(–{ 2mCRÝö+™¡ ðÿ£GåÊ’¸tcÆqz“?06µoØi–š«Gsiq¨iÖr^Kd“¨“ ›¹²‚6óŒrÖÕ¶³¥^ßÍak©YO{ï6Þ)ÑäiÁÜ ä`ðr8®6ûÀw—1ê–ñ˜HŸíÒÛÜM¨\áe}Ÿý\{|ò¥òÄ€NÐ[+{CÓ5YîmÍݬ6¶v½ýÜLÒ9šmò\ 2€*‘1mÛ› /6A0;,{~”`z~”QK™÷Àôý(Àôý(¢ŽgÜÓô£Óô¢Š9Ÿp OÒŒOÒŠ(æ}À0=?J0=?J(£™÷Àôý(Àôý(¢ŽgÜÓô£Óô¢Š9Ÿp OÒŒOÒŠ(æ}À0=?J0=?J(£™÷Àôý(Àôý(¢ŽgÜ4 OÒŒOÒŠ(æ}Ã@Àôý(Àôý(¢ŽgÜ4 OÒŒOÒŠ(æ}Ã@Àôý(Àôý(¢ŽgÜ4 OÒŒOÒŠ(æ}Ã@Àôý(Àôý(¢ŽgÜ4 OÒŒOÒŠ(æ}Ã@Àôý(Àôý(¢ŽgÜ4 OÒŒOÒŠ(æ}Ã@Àôý(Àôý(¢ŽgÜ4 OÒŒOÒŠ(æ}Ã@Àôý(Àôý(¢ŽgÜ4 OÒŒOÒŠ(æ}Ã@Àôý(Àôý(¢ŽgÜ4 OÒŒOÒŠ(æ}Ã@Àôý(Àôý(¢ŽgÜ4 OÒËò¢Š|ï¸hç¥QG;îEQÎû€QEs¾àQEï¸QG;îEQÎû€QEs¾àQEï¸QG;îEQÎû€QEs¾àQEï¸QG;îEQÎû€QE¹ŸpÐ1þqEQÍÜ,ƒüô¤Àôý)h§Îû€~ò£üŠ(¥ÌûŠÈ(ǰ¢Š9˜YyñÅý}¨ëàzòËíFŸll0‰r<¾œ õ?ŒŸò&Dzâíxÿ¶o^OeaXÛ¶zħ¯µzUð”ïÝþ…aïf—‘Öü/ý¦å›I>û”þ(»€•{ffÇ0Áÿ ÿÆëÄþ ÈEÿëÎOý *ëÇÄ=;Lñˆ,µ]ÊlÕ".Ø|ѹÿ:Ÿ_J¼Ýþýz/ÈæÂ+Æ^§{ºoùãþ?ÿ£tßóÆüoþ7X:?ü9¯_‹7SI®˜XÌn…ñÉÛ¹FO|qŸJÝY£w‘E-À?t‘‘ŸÀוs¥¦ž¢î›þxÁÿ ÿÆèÝ7üñƒÿÿÓºP=9úS¸†î›þxÁÿ ÿÆèÝ6qåAŸO´7ÿ¤’XáMòº¢ä ±Àäà~¦žzO“$44ǤVÿøßünÓŸ*üoþ7^{£|MÑàŸX‹\Ö”´z”ËhVËöp@L4k‚3žõÕhž.мG4°éZ‚ÜKït(èÛzd‘Ó8é‘ê(¹\¦ÿž0àCñº7Mÿ< ÿÀ–ÿãtê†âæ;d ! Ž;’Iºoùãþ7ÿ£tßóÆüoþ7I ©T3ÿ-ÿÆèÝ7üò·ÿÀ–ÿãuâþ!Ñüàý¼C'Œ®.%V_µÛ•ܱn` ¨bU¾bÝkoÂÿïþ +ÅqÄ’NÁ-õFؤ8,ƒøXúŽ9èÍW±›4UÂèôÝÓÏ?ð!¿øÝ›þxÁÿ ÿÆéÕÎë¾$mĺ Œ²ZÅeö>iÛn͈ á²É`9Íb™I]fí épßünÓÏ?ð!ÿøÝP“TSrÖ°@óÜ(DÀ)þñ?tûc4‘êedXn-åŠFá|Æ7|;ýqWÉ+\Ždhn›þxÁÿ ÿÆèÝ7üñƒÿÿÒƒ¸Ï>½½©j.PÝÓÏ?ð!¿øÝ¦ÿž0àCñºwz®÷>\ÅLm€3‘×£Û·®hmÓÏ?ð!¿øÝ¦ÿž0àCñºpÁ©È=ç5]Ã$Æ4|œeOf=ð~œÓÔ wMÿ<`ÿÀ†ÿãtn›þxÁÿ ÿÆéÔR¸Xné¿çŒøßünÓÏ(?ð%¿øÝ$²“q’pwª¦íÉ K‡8úóOp-î›þxÁÿ ÿÆèÝ7üòƒÿÿÕU»eÿZ ï'4wI4þ\|¨Ýþ~´0$Ý7üñƒÿÿѺoùãþ7ÿ§QJà7tßóÊßÿ[ŽÿóÎÓqû˜9éþßün¹ïøšOXÛÅe¹Ö/¤ò,mØàã,ÜýÕÈ' qœŽU¼?|°‹¿xçV[‡9¶»°‚}üxýkØŠtmÎõì;\ô¼Ì:ÃíÍÃñº3?x`ÿÀ‡ÿãuæ’¯‰<ö•†±{­éQ%Í•ó fÙÀ,’ã<÷zu¯F²»·¿±·¼´pö×,±0R2Œàô"ªhT4^‚µ‰wMÿ<`ÿÀ†ÿãtn›þxÁÿ ÿÆéÔV— Ý7üñƒÿÿѺoùãþ7ÿ§QEÀné¿çŒøßünÓÏ?ð!¿øÝ:Š.wMÿ<`ÿÀ†ÿãtn›þxÁÿ ÿÆéÔQpºoùãþ7ÿ£tßóÆüoþ7N¢‹€ÝÓÏ?ð!¿øÝ¦ÿž0àCñºu\î›þxÁÿ ÿÆèÝ7üñƒÿÿÓ¨¢à7tßóÆüoþ7Fé¿çŒøßünE»¦ÿž0àCñº7Mÿ<`ÿÀ†ÿãtê(¸ Ý7üñƒÿÿѺoùãþ7ÿ§QEÀné¿çŒøßünÓÏ?ð!¿øÝ:Š.wMÿ<`ÿÀ†ÿãtn›þxÁÿ ÿÆéÔQpºoùãþ7ÿ£tßóÆüoþ7N¢‹€ÝÓÏ?ð!¿øÝ¦ÿž0àCñºu\î›þxÁÿ ÿÆèÝ7üñƒÿÿÓ¨¢à7tßóÆüoþ7Fé¿çŒøßünE»¦ÿž0àCñº7Mÿ<`ÿÀ†ÿãtê(¸ Ý7üñƒÿÿѺoùãþ7ÿ§QEÀné¿çŒøßünÓÏ?ð!¿øÝ:Š.wMÿ<`ÿÀ†ÿãtn›þxÁÿ ÿÆéÔQpºoùãþ7ÿ£tßóÆüoþ7N¢‹€ÝÓÏ?ð!¿øÝ¦ÿž0àCñºu\î›þxÁÿ ÿÆèÝ7üñƒÿÿÓ¨¢à7tßóÆüoþ7Fé¿çŒøßünE»¦ÿž0àCñº7Mÿ<`ÿÀ†ÿãtê(¸ Ý7üñƒÿÿѺoùãþ7ÿ§QEÀné¿çŒøßünÓÏ?ð!¿øÝ:Š.wMÿ<`ÿÀ†ÿãtn›þxÁÿ ÿÆéÔQpºoùãþ7ÿ£tßóÆüoþ7N¢‹€ÝÓÏ?ð!¿øÝ¦ÿž0àCñºu\:øÆd> ‹ÌŽ%ípRRçý[ö(+Ìlu¯òÉ;ŸA^¡ñ—þD¸‡ý=¯þ€õåö çNµ ðbOä+Ь턧êÿBðjõ§ò:_‚DMñÿ>’8þ8»Ó5QâakªÿÂ>5,xŽûíÀ¶òp›s·æÛ÷³Û¦zŒ?à—ü„dÿ¯9?ô(ëNÊib¿ÖV9î"UÖˆµ8í3ˆWkçy£ lûÇ"´Íÿ޽äsà]¡'æfhqø¢k[d×ÍèŽÛQŠþÔ ocƒpÜóäç»ë2.¡%ì`E#¾âîÚ’@ÎqÓüŽfêêí@âiØmö‰õHî€&8‰À\Ï$·I9aO‘g’<—È<¼ÿ*ùLn*tçÊg‰­%3Ò´½V J•âŽÉ>QèsÊŽO¸ÏåÛÒ¸»Ye’8Ñ]>â çh§&Ÿw}r±C½ëøë^[ÆÔUym©Íí§í4G4Wƾ]j¢ÏÈœ0°Þ1'Ÿ&àÛ9鳯œƒ]…ÿ·¶üÿ Ú~Ñçê&/µÿ¬1ù+ÃgæûÛ±¸îÆ;b›c¨Íw¡=äW°¤úyFºÜVÛqv;\|§åÏ™ÓæeëÍjÅ$’|DÑ|Éfp5-QG™|·;TD„(Çúµþìò½ëÜŒ›Ù驹GSÒñ޽{Ön³ÿÑÿ¿ý+KßךÍÖãÚ?÷ÿ¥8îdÇé÷¥ŒjóF¬3XÔÖ}Ó«êÛ‘ƒ)uÁ# ©mtŸ¶IL¥wgŒ{ýj³Â-õˆ6í®¼š :3Ôýh õ?Z*r¿óÿ¥Ž£ÊÇ·ïR¸] ÂÚeýâÅ4/ûç5Ý|Gÿ‘Sìuûú•Ïh:ôºDeZÞÓ–Ï,d¦ìüµq”\eM»IìÙˈŸ,é»é­É5/èvÊ ¨9ì\ÿCƒ4¦m4Üå«°>0Xaã Y äœ |¤×=}â‹Û‹«­FÞîâÞ¦‡dC&2§² ‚GSÅM&°´”+%&ȯUJ\Ñ“ûÉ<c™â}~ÚÖ1K¹ 8ʱïêi~)F¯ ièW!µÔÔüÞ§ðµäwþ0ñ Ôs‰–H­Ï™·h<0<{t¨¾'‚t=4ƒý§^ÇkÒæŠ|Ý.u9^O¡Ìø{Â:V£1[ˆF'ï}±ž= ÓÔ¼¢ÛÌžM ÃrädýjÆâItëhà6v‰“÷äC—?ï篶3],¾%¼û$ÒÚivæèFv/±ÇðúûÕÊ›o¹;´*)ÒT¹½çêr0ø7G ÓÆ:ä³lü=·ŽÒÛY‚$ êR*/¬Iü«‹ñ:¯öì@%2­ŽûןÈW·ƒû$œ™É'ïjjø¯Ãž=Ò|&·>!Ö¬u NhÙ­#‘·I– 2|°[ÿtüªû(ï쥵—\c#'±ìzŒõíÖ½#âß? õ€1ÿ,x¿}yä’¤1<ÎÛQAf>ƒhÊýèM=‚¦úŸðßYŸ[ð-„÷ro¼„5¼ìI,Y Q¸ž¬T)'¹&³õ+K{Ï‹q‰í¢¸òôT‘HÃíar9„ÜzwÂ;&¶ð$7R#$š…Ä·Œ¬1ͅDZUzæ¨xªk¸<{w%“]-Çü#é·ì¶ÂâNn×;P‘œ÷ç’0ExòåGmâ›Zº±YÝ †à,²LJ.A‰$ñŒpk_KöŒ—(ß»xD¨ÀçªäÈ¿¶–þDÃ$úl;®aníŠDà.<Ðà|ªsœô<ãÐiXÛ˜4k8æasko JÙ Y(Ã~òàíÖ·”–é˜r¾ÆÝ£»ÆÅúîä\Ôõ‡¡ë rÞc²`Y”³gržNNÏ>ÝÎ+sóük–[³E±èʀÙb=8ýpi„Ÿ1Ú' |ª,}jveE,ä$“€p¾$ñ—”â9ÜFr‘à3·¨>ƒ×¿®+J4åQÚ$ÎqŽçTÒbÍlÔeöˆ‹u파w#ŸARÚØýÌŽÛߪü?â}ûþ5SDŽài–÷7é‹·@r2 ŽÜvcÞµ#‘_v8ÛÔcäRŸ»tŠZê>Š(¬Š(j6òÜÉ k! ¶â?à?âjkKH-­ÖTÎ>nåC¨æÅÓî·þËUážfP?Ù8û§ÖªÚuüq¬#ῈgŠ]1H•²;æ*Ûêˆ2gŒzqQÚÞ-åã˜ó寏Î:œƒG@.ÑGJ*Fr-ÒµõýX²°7ë`'F·ŽTGEPo!pyÏÌ8<ããK·›R¹ñ7¬¡´Ò¬­¼‹{+×I€rrϵwO  d’.}¼ëÅÖóâE¤ÅÔ §Øiëw¼îg‘×qÏ\÷Ǧ±¨£ë5v ðr&á ‰.£’ÛLÏ5¼7?z+BIPù'{ž½k_á\2Áð×GI‘ѶÈʯ×i•ÊþH¬;[KŸˆÚ…ärݬ^°¼ki!…Ï™zè!›¢Ær:}Žô¨aŠÞá‚5ŽÔ"".Ъ°µe…¤â¥9o-l6>Š(®±Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@yñ“þDÈëíô[טéΣL´ÿËÿÐEzwÆOùâõûXÿÑo^q§YHÚ]£$PŽÙèW·Ôé_¼¿BðNÕª|Ï‚_ò“þ½$ÿУ®†Ætе=rßUðŽ©¨<º­ÍÌÛéëpžTÁG Oñ/ nõ¯d]ñ¦‘¨éþ¾Ò­´÷¹šêKÛe·ód ¤rìJœŸnk¿çŽ´sß'ó­.iÌã¥QÔíå¸%ÜCdò^ç¿^üQj±%{ž8ãa†r3îj͕Ě—œ±å7)ÎG`+[ÔcÚ‹ŠÁÜÑF=¨Çµ3õ½"ß^Ò'Ó.žT†m»š" 0a‚sÜW8Ÿ ìS5­q?Ý»ù-vxö£Õ.z´îqÐü:²·(cÖu’ÄŠ­:²î W•`jþe·ˆG7Ò1’hQee@Á_h8ÀÇs^¡jP9ïŸQQRŒf•Ñ…Z›Mš†í´9în!žâi.B‡3è3ŽûÓüEáë_XEiw5ÄI«2´ ƒGR÷«_Ø£Õj)+XÖPJ(ãÃ{ o\†+Èô?/J¯¨x-+IžâÓUñ¯ e£†° Àazg¿'¯^+»ÇµƒžÿJJ*+BãdÓjé%¬Ûi6Ú«}´4Ó¯õœ9'æ$ÃqÞ3ƒÛûÀUðÞa'“5ô¿k“í2Ç &æƒíÏõ­pôÒûwô©§IAèuâñ¯g%·äcø›Ã–~)Ð&ÒïFÑH&)GŽGOpqÞ¼ĺ^³£”ѼB‰ghìÕÂI$.#Tçf1Œ÷À¾ÈõõÍ! Góþs]tëÊšilÎ'ž]ã?ø'ÅÔ4eñÀ÷!BÈös•\0ÏÉÓåë\Ï…ü/®xåm¤Ôm_Oу+O#îFºï¶<òùºÄãíVú.•gv×vº]”7-ÖX­Ñ¾¤ þµ{»}¿Î)Ó¯*i¨=Äãw©Emo¼¤PÄ# `AØWœøÂ]×ÇżL="ëEòw”“l’,áöîNxÀ'Ðc<ŸJ£8Áô9ôü« –™å:®³ðþòÆüi’´ºµÂ]µ²¤7µÅÄ{h#nÀã¥z'‡ –×Ã:UµÂæŠÎ$‘r¬ãZ]±Çò£¯ÿ^ßc&ëCµyÖâ8Ý]~#8>Øäcœ¾½sÅû8äŠÕRBKq“’'ŸP0? žŠwЃŶ—WZbµ´Fq ïx9ărÞǧã\÷„<=q>¡.­«[¸t;`IP®ÓëƒèÇ¿=†}µ9êOÔô­£]ƈÍÓN\ÌCóg¯>½ª¼pȳ«UT %³ØŒtüjÍަERmÖiã‘ÎB6ö9ÿõU+,HwFÅ¡äV¦®€Ã$¬ß4ªØsZ¶¶©i–RzšžŠ.ER¯#ÔןüRž%šÄˆE¢Z­ôÊ¡A‹,8ÉÉÅzåg_è6«:Ϩé6’ªì\Û¤ŒdàŒ“ÇNõ5!í ã{\gáÃZ}Ÿ^ƒN•N‡Qe¶I½ hØC’ÜI8ïšíÏ_z‚ÎÆÏN¶[k+X-mÔ’"*ç“…µ?ùëT´ …Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@{ñ“þDÈëñô[ןiwÒ.‘d¼qütW |dÿ‘2úü_ý%y–þÌ´äÿ©OýWv!±Òõ—è^ø³ùð)"݈f Sƒƒ$y¯o½ðn™i{n5'’FÙ}¨¥88Rkü ÿ§ýÁÿ£#¯¤õA›8ùøoý-vf¿Å^ˆàÃ|/Ôâ.´+ Äý¥!'ðæŸkáë;ÈŒ–òË2ƒ†jM»õˆsõ"·µD]:Â{ÆwL’É©‘€Ànã½Y±³qHl"º‹I¿U{ËéI—ɉ£˜®ãå È2?†¯§ŽàÏXÞÜy2²<ðÇ &êkxS .K3ô0ùrÁ›`$(,Â¥ž—zþõ¨ÿ„LÿŸ½Gÿ?úÕ¿¥j0êºz]² ,ñ¼rº9Š:deYYr 0jå9Oø@tÏùûÔð#ÿ­Gü :güýê?øÿÖ®®Šc”ÿ„LÿŸ½Gÿ?úÔ¦ÏÞ£ÿýjêè ,rŸð€éŸó÷¨ÿàGÿZø@tÏùûÔð#ÿ­]]ŽSþ3þ~õüÿëQÿ™ÿ?zþõ««¢€±Ê¦ÏÞ£ÿýj?áÓ?çïQÿÀþµutP9Oø@tÏùûÔð#ÿ­Gü :güýê?øÿÖ®®ŠÇ)ÿ™ÿ?zþõª ¼¤Á×Z‘>‚ãÿ­]•sþ$»’ÊÝî"·k‡DvX€[zgëÿÖ=*¡)XRºZmá3™õ|úxwNÑl´½^7µ–ê]öòçÏ“~0Œz}êçmÄ6WÑI¨(¸ŠìæE‹åû#öê~îw<ûë­µÿ” 2?휭jJ C8ͶbÜXÁ}â=DNefD€DªÏ’X6p—Ÿ”u=ªAáuÇüx]ç¿ïÿ$ÔÖòY[æÉ.ØÚ‘Î:Ó?á^MäE/ö‡ÄMò,…âþصޛ~îã¿7A‚ÚÛY(—sªÿ„NË8óþú›ÿŽÑÿ¥üôoûêoþ;Qx&)-¼=%¬·—WfÚþòÜOu!y]c¸‘fîptU …ÿ¥üôoûêoþ;Gü"–?óѿ奔øínÑEÀÂÿ„RÇþz7ýõ7ÿ£þKùèß÷Ôßüv·h¤ü"–?óѿ奔øíðŠXÿÏFÿ¾¦ÿãµ»E;…ÿ¥üôoûêoþ;Gü"–?óѿ奔øínÑEÀÂÿ„RÇþz7ýõ7ÿ£þKùèß÷Ôßüv·h¢àaÂ)cÿ=þú›ÿŽÑÿ¥üôoûêoþ;[´Qp0¿á±ÿžÿ}MÿÇhÿ„RÇþz7ýõ7ÿ­Ú(¸_ðŠXÿÏFÿ¾¦ÿã´Â)cÿ=þú›ÿŽÖí\ /øE,ç£ßSñÚ?á±ÿžÿ}MÿÇkvŠ.ü"–?óѿ奔øíðŠXÿÏFÿ¾¦ÿãµ»E þKùèß÷ÔßüvøE,ç£ßSñÚÝ¢‹…ÿ¥üôoûêoþ;Gü"–?óѿ奔øínÑEÀÂÿ„RÇþz7ýõ7ÿ£þKùèß÷Ôßüv·h¢àaÂ)cÿ=þú›ÿŽÑÿ¥üôoûêoþ;[´Qp0¿á±ÿžÿ}MÿÇhÿ„RÇþz7ýõ7ÿ­Ú(¸_ðŠXÿÏFÿ¾¦ÿã´Â)cÿ=þú›ÿŽÖí\ /øE,ç£ßSñÚ?á±ÿžÿ}MÿÇkvŠ.ü"–?óѿ奔øíðŠXÿÏFÿ¾¦ÿãµ»E þKùèß÷ÔßüvøE,ç£ßSñÚÝ¢‹…ÿ¥üôoûêoþ;Gü"–?óѿ奔øínÑEÀÂÿ„RÇþz7ýõ7ÿ£þKùèß÷Ôßüv·h¢àaÂ)cÿ=þú›ÿŽÑÿ¥üôoûêoþ;[´Qp0¿á±ÿžÿ}MÿÇhÿ„RÇþz7ýõ7ÿ­Ú(¸_ðŠXÿÏFÿ¾¦ÿã´Â)cÿ=þú›ÿŽÖí\ /øE,ç£ßSñÚ?á±ÿžÿ}MÿÇkvŠ.ü"–?óѿ奔øíðŠXÿÏFÿ¾¦ÿãµ»E þKùèß÷ÔßüvøE,ç£ßSñÚÝ¢‹…ÿ¥üôoûêoþ;Gü"–?óѿ奔øínÑEÀÂÿ„RÇþz7ýõ7ÿ£þKùèß÷Ôßüv·h¢àaÂ)cÿ=þú›ÿŽÑÿ¥üôoûêoþ;[´Qp0¿á±ÿžÿ}MÿÇhÿ„RÇþz7ýõ7ÿ­Ú(¸_ðŠXÿÏFÿ¾¦ÿã´Â)cÿ=þú›ÿŽÖí\ /øE,ç£ßSñÚ?á±ÿžÿ}MÿÇkvŠ.ü"–?óѿ奔øíðŠXÿÏFÿ¾¦ÿãµ»E þKùèß÷ÔßüvøE,ç£ßSñÚÝ¢‹…ÿ¥üôoûêoþ;Gü"–?óѿ奔øínÑEÀÂÿ„RÇþz7ýõ7ÿ£þKùèß÷Ôßüv·h¢àaÂ)cÿ=þú›ÿŽÑÿ¥üôoûêoþ;[´Qp0¿á±ÿžÿ}MÿÇhÿ„RÇþz7ýõ7ÿ­Ú(¸gñSNƒMð Eû÷ÊY‹1Ïîäþñ$~uæöäéÖ¸Æ<¤ÇÌ=z§Æ3ÿ<|gý5ô\•æúe¤'J³&UÀŸÄ?º+¾¶¸:~²ý +UŸÈ‡À£m±ˆ?ôduôžªv5”ÍÄpÎZFì Æë“í’+æ¿-ˆ=B ÿßÈëêB:×VküUèŽL2ÒKÌä¼G%®¯£5¶©¥+¯š'YYAÎ1žy íׯCkF¿µ²Ò-m®u+9eB.uve Óm¸Î\ÖÕäÉo)xÃŒTc'§Ðÿ#øô©Râ\G¨Îxíï^iÓ«ÐËþÇ]KÁçG½2G͇ÙfØ@t ÆÁ ŒŒŸ^k>Ø_9mZú÷R™ò²I;F$~TÑydDŠ6s)ȲÃ' êW\æ½âˆt Oµ»Wû-Õ­ÄŒðÚË<‚HÚ£†!q#ä‘×o#8&À]Ó´O°^Í{%õÕíÜÖñ[É5Ç– ,o+©Â*€|ÃÑWŒäš à:).]fºÍÅÄ7 —^;É.×/C$¬û ¼›º?‰´­jg¶³šq:).âÖ[ve¨‘T°PHÎ7.q‘[\ š^›•höÐ(×\äd4²´Œ8ì œ{b®RnÆE…-™dPÑGZ(¢Š(¢Š(¢Š(¢Š(¬V/1ƒar§ŒÈPôè­žÕ¯Xú·úèþ­ü–®š¼‰žÆSEÈÊÆ=þÐÝ}ÔÕØ‘bÔm¶‘–·˜¤0±מ˜ª2“·©üêÕ·ü„ãÿ®2è¸+|Dl·2§¹BÏþG‰¸ãt?ú*záµ½?íŸíæþÇÔï¾ÏâbÞ}›â;oÜXÒ-²¼gªð­Ï§slŒ|Y¨Ë_6nêñ÷dû1¦ÞøoIÔî伿ð¦ss1Ì“NÛ¸’c' Ç^Ø®Z5ÍÚ<«ÃþòO…ü!þ'€C®¼Ÿ½›>Gü{~öOôq˜Îßö~ã|Üü¾¡áÿùý¼}h³‡Ÿücÿ‘?úýOý%xLv¢ðFéæle~nدvøÉÿ"Àà‡Ñ0r+ŠñΪ_^é÷úe¤—Moðì†@ŽŽí £üÒF ƒ 7r$‰jêÅ/3Á ^2´û:L‘gÞgÎ’6äIj å keNy[¨Á¯Sõ#­pÐuk®¡w§\ÙA¤Öê.çI÷¼;ví’LmXpÄ‘–;€ù›ñ#¶(Q°3ǬcÖ®<¢ÞEý¥l“¦˜f›U»7kqr÷V¦9c_5Š ýéeÌyÞ£|½„ ×nõ™<=Útz»Ld½kGh¤TŽÙð!óAR~Ö£>c«<|ÃoP,-œ6¢ÒÜ[Á³ÊƒË#ØA]£J©éÒ¡¼ÐôE^;í.Æé$”NË5ºH@»œŽX( ž¸Î)êG!¥øÇWÔí—ZÙc™ö» ±y.fÿIŠÙ·yÛöü­sÓËä&8'"ß„µœ>-êº}ñ±×¼/-•ÔÊZÎ(乃Á9ÝNj®„zÍç~ø‹©Ýø–-Ä: iW µ·ïy€c® ç‘ǽG©üHÕeÕ¯,ŸRÓ£rsæ tÉù‡^Ø÷£@=KšJá­~'iOáÍnxž²%'¶q‡Gôÿ>£ÔV ŸüQd¨ê> ž Fór&RÛ}JçŒ{fž‚=bŒ­§_C©iÖ÷°6b™©ëÁ«TY˜4`ÒÑE€L0ih¢À& 4´Q`ŒZ(° ƒF -XÁ£–Š,`уKE0hÁ¥¢‹˜4`ÒÑE€L0ih¢À& 4´Q`ŒZ(° ƒF -XÁ£–Š,`уKE0hÁ¥¢‹˜4`ÒÑE€L0ih¢À& 4´Q`ŒZ(° ƒF -XÁ£–Š,`уKE0hÁ¥¢‹˜4`ÒÑE€L0ih¢À& ÒÑ@ Í4´Qd`уKE0hÁ¥¢‹˜4`ÒÑE€L0ih¢À& 4´Q`ŒZ(° Í2A”éÜ:}2f ™$G_­4µÕõë="Þ)®ådó $“ÆN`9ÿë‘V쮃èþb8M‡vàAu¿³›@‰õ¾žÊYn/$‰ºªòàd8÷õ9—HÒI·kha™ ¬„ñûÅl öÀ=»s“ÍvICÙœêO˜ç¾4`x0Ð_/þ‹–¼çL” &Ïù`Ÿú¯FøÑÿ"hÿ¯åÿÑr×™é¿ò ³ÿ® ÿ ŠËg„§ë/ÐìÁÿ!þÚf¹*~RÇ÷ö:úv¾cð¤f‹¸Tv_ÊTôåtæ?mü¨ä£¼½Y^ù<ÛˆÎ~hØ|¤ƒÓ¶2sïƒVGJ‚ìn´qœÆÜc9ãÓù¡©‡A^y¸´Ò>biÔÓÞ€#µP–¯eGLvôÀþCè*¦·$‘hzŒ±¹GKiYI§JšØL¶ÐªÅ@Š9b‚ö½:x¥®4ÇÃú˜tAþ‡/ÝrNv}>´-Äö8ÝRÆÊÚÛgem¤˜Á,v¯$ž§&³!ŽÞK…ímðǨ‰}ûVÖ³-¼¥‘n`9œTcïíY$qÊ®ÓÀBsæŽçï]«U÷™G•=N×Â7Iq¢¨Y ù;blçå"48çëS¿Šü?ßÄêÆGÓá’{¸¢d’ï–E%¸èxëÅ`|3[ÏøGîe»GE–ì¼EÓnäØƒ#ÆA¬{ïê÷þ ×Lí˜à—XžÆÊ+7YÞI Ò),XïVY˜€¨ ÜœœsæÑ‹Œ--ΙÒ\­ÞǨdPX¦¼ûR³¾Ó5V±‰µ·ðèû4×M÷3Ëó-Ða€´ß}-r±žÎg&³×e²Ö¯™µ±=Ž–fÑÔO:e„×fцY<µ¶Ü²ßt8É"µ ôÉî`µ·’{‰£ŠÉ$’0UE%‰<SÚ Óµ}7X·7f¡i{¾Ã%´Ë"†À;IRFpAǸ¯-Ö¬¼Kvöî|ÊÛ𥾣c¨Oöøn¾Ï=íø³ ¬©7SH|Åõp–Còàm ÌÀ°9QH¿tc¥-QE«ÿ®þü–¶kVÿ]ü ù-iKãDOc*_»Ví¿ä'ýq“ÿEÁU&ûµnÛþBq×?ô\щØÎžç9®uñ?ýzÁÿ³Ô_ùøY|_>ý Tºç_ÿ׬û=hüDÒdñ6ŽÚ i­Å´Û%k›¶HlíIJ¡Ïô#¼ø ä|N¨ÿ~«`©·|m‚®xìøÏà%;H>~AúU»í"÷Pñ‡õ—ð߈m D‚K²d`–ÿHôô©u:÷Xñn‹âðψ#›IÝåD²Xí}Üßéž•VCÇ#<úoÿ Öu¥×‰|m®ëè­¶…cgr`$#̯$Ÿnqœ_jè5:÷Xñf‹âðLjc›JÜ"‰d±Úû¸9ÿHÏOJÄÖ¼ Úž­6¡g¡x·Ky˜4Ëewf‹! \úqëïGÈ MOm;ã5Ý’j÷œë¢LyŠ“¼Ÿº0OÄû×aðVTOËî§PŠîqsêXHsŸÎ¨i^ :6¹m©éž×­.R…ä–K6?~Cö†cŒÀ'¯^áûFMJWñMÆ©¢k>{ SMŽTŠï @SéŽAϵì3nØ=ÏŠ¾*e2ùm“³c¯xÃþ0Õü)e6‹ñ;KU…GÙ…¢ “߯}«WáΟ-…î¹®ZøsPšÏQu†+t1$›q½„®Ÿxî=Iù³M¾ø{çÞÉq§h~.ÒVY|Ùa²¼³Dvú}§ùsOä#5<9§iúOŠ_ľ)‹WŠa¹6¶ä4€ÅG^1ÏlVbÐ|¢éKu¥ø‚×VÒö†ò/@¯¡<înœŸL×Q¥x~×IÐnôx| ®½½ÞãpÒ\Y39=I&àäýséÓŠæWá©Yi¤øÍ,vìûßÚya}úNÏJ,ÇsÑþøŒø§Áöz£[‹rùVW×Þýë¨+’Ò¯.tm2>ËÁÜVñ.ÕQ5—ù1Wá!ÔÿèM×?ïõ—ÿ$SÔGCFkžÿ„‡Sÿ¡7\ÿ¿Ö_ü‘Gü$:Ÿý ºçýþ²ÿäŠ`t9£5ÏÂC©ÿЛ®ßë/þH£þOþ„ÝsþÿYòEt9£5ÏÂC©ÿЛ®ßë/þH£þOþ„ÝsþÿYòEt9£5ÏÂC©ÿЛ®ßë/þH£þOþ„ÝsþÿYòEt9£5ÏÂC©ÿЛ®ßë/þH£þOþ„ÝsþÿYòEt9£5ÏÂC©ÿЛ®ßë/þH£þOþ„ÝsþÿYòEt9£5ÏÂC©ÿЛ®ßë/þH£þOþ„ÝsþÿYòEt9£5ÏÂC©ÿЛ®ßë/þH£þOþ„ÝsþÿYòEt9£5ÏÂC©ÿЛ®ßë/þH£þOþ„ÝsþÿYòEt9£5ÏÂC©ÿЛ®ßë/þH£þOþ„ÝsþÿYòEt9£5ÏÂC©ÿЛ®ßë/þH£þOþ„ÝsþÿYòEt9£5ÏÂC©ÿЛ®ßë/þH£þOþ„ÝsþÿYòEt9£5ÏÂC©ÿЛ®ßë/þH£þOþ„ÝsþÿYòEt9£5ÏÂC©ÿЛ®ßë/þH£þOþ„ÝsþÿYòEt9£5ÏÂC©ÿЛ®ßë/þH£þOþ„ÝsþÿYòEt9£5ÏÂC©ÿЛ®ßë/þH£þOþ„ÝsþÿYòEt9£5ÏÂC©ÿЛ®ßë/þH£þOþ„ÝsþÿYòEt4W=ÿ §ÿBn¹ÿ¬¿ù"øHu?úuÏûýeÿÉÐÑ\÷ü$:§ý ºçýþ²ÿäŠ_øHuOú5ÏûýeÿÉÐQ\ÿü$:§ý šçýþ²ÿäŠ?á!Õ?èL×?ïõ—ÿ$PAEsÿðêŸô&kŸ÷úËÿ’(ÿ„‡Tÿ¡3\ÿ¿Ö_ü‘@ÏÿÂCªЙ®ßë/þH£þSþ„ÍsþÿYòEtW?ÿ ©ÿBf¹ÿ¬¿ù"øHuOú5ÏûýeÿÉÐQ\ÿü$:§ý šçýþ²ÿäŠOøHu?ú5ÏûûeÿÉÐÑ\÷ü$Zžqÿn·ÿ¬¿ù"xRlãÁÚßôÚËÿ’(¢ÍFóF‡ ÀJç¿á)¿ÞWþ o#·eÿÉy¯j2\ÿ„OY™–Ïú\UÆzÔ¾£ƒ´}*X.£˜pp} qC[ÔAÿ‘WXÿ¿¶Ÿü~—ûsRê<)¬6ÓÿÖÎŒm Îó4W¾'ÕÔcþgúkiÿÇêÄ>-ÕÃøKXoq-žô}g*RB:ú+ž"ÔÈÈðn¸Gýv²ÿäŠ?á!Õ?èM×?ïõ—ÿ$V@t4W?ÿ ©ÿBn¹ÿ¬¿ù"øHuOú5ÏûýeÿÉÐQ\ÿü$:§ý šçýþ²ÿäŠ?á!Õ?èL×?ïõ—ÿ$PAEsÿðêŸô&kŸ÷úËÿ’(ÿ„‡Tÿ¡3\ÿ¿Ö_ü‘@ÏÿÂCªЙ®ßë/þH£þSþ„ÍsþÿYòEtW?ÿ ©ÿBf¹ÿ¬¿ù"øHuOú5ÏûýeÿÉ¿Qˤ0H޼Öü$:§ý ºçýþ²ÿäŠÐ±¼¸½¶igÓnôçErÑaÇ9Ü`ôëž:P+Gm ÞlíÓ˜ÿì´û7Ž \ÇoýÑ”‰PŒº¯P=é‹þ­~‚’õõÿF¥wN)S9×Ärß8ð`àÇòôÿ®rWi‚?ì›<Ÿù`Ÿú¯EøÓÿ"h>—Ëÿ¢ä¯/Óš¦Z0ÉLø¬1 ýŽŸ¬¿C³üYü‹>“ͺ¼“9ÞìÙúÊ•ôÝ|¹àpD.ïÏ×ÌŽ¾£®œÉZ¤W’8èo/R±ºÒuÆsqŒçLä~†¦Cv7ZN¸Îcn1œñéƒüÐÔà¯<èš{Óª­Í쮫!³‚Uc‰œ1“…÷% Ûg ãEÆ1ǦòAL¼¶KÛ;‹Y 4m`ö#Ö¢Óîàxâ¶Q"H±’HZ>ÆUAÆGAÜp*\Éká­Vê),6rɯPBý(ƒ…µX#XâÔ,äF¤´ˆ÷æ°µ?³=£Á>¿¥LNåµµ32Îâ#$€=zWâYçš=K÷·WÑ"‘îå};/ÎV8`@Ýž;gvjÓÄmõ RMOJ{¹í4è➯c{3ÿ<Àˆ—N»Š±=J®v.Uk·áy­.<5a%ÜwvÞPTž<áÀ㿸R?¯5Ïx&æÒo,1YÛÛ8"†s*a‘e1ò$Fsš¥sñH´Ò5}FKkâtË©-žÜ"yÓ„f $K»æä˜îÈâ?¸jYHì0ýTœŽý8ãÿÕU¢Õ´Ù5)t¸õ WÔ!MòÚ¬ÊeEã’™È2ò}EcXøÏJÕ¼A&›§\ÚÞÂ.m®ã‘w¸Šž [ç –ùó€4Ò`ýhÁôõOLÖ4Ý^ØÏ¦ê6—°«”i-¦Y7Œ©#8#qW¨˜=p3ASÆF~´ú((¢Š(¢Š+Vÿ]ü ù-lÖ6­þº?øòZҗƈžÆTßv­ÛÈN/úã'þ‹‚ªM÷jÝ·ü„âÿ®2è¸+£±=Îs\ëâúõƒÿg­?øº ] ¿”®í"3KÆô¬Ís¯‰ÿëÖýž¨|W¤e= ºèÃ\”\ÒjöMýÈí£zŠ=ÈGÆ ~òÓþüKKÿ xùiiÿ~%ÿòÑl„ôÅ {Öå®»¨Ú.Õ}Ê: «þ±žeR?òî?ùƒ¡)+Àôñã-hô¶³ü›ÿŠª7ÿo4ËųˆûÆçÓÐûŠóëŸês!]û9áþËí\fµª=¬Oïg|ð:cÛþªt³“•¹#øÿ˜½”¢¹¤{Gü-õÎ<ËOûñ/øÒÂß_ùéiÿ~%ÿùñµË˜dh½r2?ÕØXØ@¢Â2dÎÓ>ãÒµ©Ž•4›§}ÌQäg¬Û|U–îO.híéäÈ?™ö­x¼]®Ì›ã´´+ë†û5sº^‘o¥@%ùÞnyäúœw®‹NÚÐ`21ŸÌšÁfÍ»(Gñÿ3šUu²ÿ V¿ŒýŽÓò?üUgÜüE¾³r“ÇhŒ:Ž‘­sjŒ~î*¬VHÈnOLãÓÐÕi»ëþ?æ/h×C#þ}ÆÝشǯ•'øÓ¢ø—u<«bͺ-Çõª·¾±¹ËF¾Sžùfôÿj°%Ð&Òoàw}èÛ°pAõ'½váqô«TŒ%®í×üËŒÓv;1ã½TÿË N¸ûÿÅRÂwªÏOûå¿øªâeÔ$7ïgiÍ4(¯.évV$¤ç‚qÓÔÔ¢ú(í –ñ£´yprÈ îô8?…}Õpûr›Y—ü'z§üð´ÿ¾[ÿŠ£þ½SþxZß-ÿÅW!5í¥¼†9®¡‰Âo*ò!sŒœöÏõ¥šîÚÙCOqJA »…O_JUÃv #®ÿ„ïTÿžŸ÷ËñTÂwªÏOûå¿øªãÿ´,Œ±D.à2JãQ Ë©è@Ï ö=é?´l„’ÇöË2ZUócd’3Ç4}W ½‚Èì?á;Õ?ç§ýòßüU/ü'z¯¸´ç§ÈßüUpú~¹¦êÅ-­Ômç3¬hXb¿xmëÓèEC.»êšU­¸Žæ-@Êx¥TÆ3Æ žj~¯…ÑØ-¾ÿ„ïTÿž6÷ËñTÂwªñû‹Nz|ÿÅW5ò ½·ßÝ"‰T˜Ô äŽÃŸkâ+mF{°ySAvò«;L¨ñ”ÿVylçðíCÃa“³Adzü'z§üð´ÿ¾[ÿŠ£þ½SþxZß-ÿÅW%Õ¼³<ÏËËÆ® ÷¥2û;’¢ »yK®åòåVÈÎ20zgŒÕ}W ÙÑ;øNõOùáiÿ|·ÿGü'Z¯üð´ÿ¾ÿŠ®BÞòÖïwÙ®a›aÃyniô8è}ª Õ£Žöþ;¯³ÛÁh#ýóÜ!ݼõNpO=E'…íyEdw?ðêŸóÆÏþùoþ*—þ½SþxZß-ÿÅW&·0H"O"•ÁA>ÔÈo-nÒ ˆ¥tº£†*ÈÈ¢ŸÕ0ïD$ußðê¿óÆÓþùoþ*º¯ ê×Ο%ÅÂÆ®²”0@Æïõ¯.¯Cðü'ÿ¯ƒÿ ­rc°ôéÒæ‚ÔSI#©)h(¯È(¢Š(¢Š(¢Š(¢œPäU «Ì‘©¨îïK|æ©GZè§K¬‡aÆGrrÇ?ZDyþt7jCÔÞÈbƒ‰æœA*OaLþ!NSµ²zQ`ŠSKŒRgš7oZB8éOö¦ôÆhÙÝ"ÀøaCêj„]ÕšGç@¬ýŒoqXÒMMKaÔ¯½]ID § Ö ö©ínÍ»íl”5¢­î·š3PÅq«ÃéRŒ†¹škq EPEPEPdŸwñΞi’}ßÄ1Hc*±!y#@GÜ/ó4Ø3¹RÌ|ƒ‘þµ)YÙ`o™êvéìëMµÎçÝœ–CÏ_õ©î™¯B9—Äs??äN¿n_ý%y ”0 sƒþ©{û õï?ò&õÿ—åÿÐ%¯$±Õt˜ôûd“ï¬Jå=p=«*ÐrÁÓ·y~‡N\µgo#K„5ÍÙ»ÛT¯§+æ? \]Goý•ôåk˜üQÿ 0£ñOÕÝÖ“®3˜ÛŒgƒp>´:Ð%á_ê:^±©ß^Ä‘Gs¼QÇý«q~Ù¥,KÌ ¨"@ŒŽ ï]héI( C@ E&àFA£põ ¢°H£pÊ€ŠÈÍV6­þº?øòZÙ¬m_ýtð/äµ¥/=Œ©¾í[¶ÿœõÆOýT—îšµkÿ!8¿ëŒŸú. èÄìgOs×:øŸþ½`ÿÙê—Å%ßs·ÖÙ?ôa«ºç_ÿ׬û=Wø”7j =m×ÿCjᆩþù†øÑ<Æ;l¶­(l *ͦöÆ?Ï5è:G‡c¶·Ü&d9ùsÓ¨ì}ëâêÖ³±ôñ*šÔâm´åTÈ?íñ­í/Ã2´ÀJ»W¹Î}}뵊yisÌ–:RZ"µ½¬P…Œcù® UøËá½:èÅßiÇÞ;$Lp=R¹ßž.¸´H´;v‰7}« Õºõ^†¼NÓJ¼½BðÇ•ËüÍ{ynH«Cšjíö8oR¬­v}AῈšŠæ°M¶éË×9q?1P: ×K¢«ï Œ™=yþµñ˜i¬® ¤ˆx8ôççŠt$ŠâPú”÷ãn,ûz>èíé\™®J¨µVžÝG ’W‹Ðï1’h#ô§A{ óa 17ÔcºÇ‘Îu>•å¾$ø«á£!‚Ö_´íêÁd^ñJá~$ø®Oøˆi¶ïÓàûåã9Dnàʚ求Ö0±/Nù5ìSËéB*uµo¢=|§*¯Žnp|±]{šw_4»–Û³hõËŸý”UûX-5h Öw”ùæGóÇ¡®?VÑ㼋|C×õú×=¤ê×Z÷ŸÆ3¹p9àÔ{×·ƒ¥‡kDgšañ8:Š3wOgÜôÉtIc äæ!Õð?ƸmSZ7&ÛMlÄzIŒoà„qÞ¥ñ'Œ®5ÈÒ8¾Ïoüi•mü‚9ÚÁ­'‡ô°‘‹©-÷søƒ]ý•ó$såØj¹†!S[uô-iÚ,P¢¼à4§¿§ëZRAÑùr&WÓ?Oð©Z+Å•iÊ\ÍŸ¥ÐÀP£KÙF*Ç©Z¾•{˜Žøì?ƽ ÃúŠk6!ËfeÿX1Ó$ã· ®w_µYôòä|É÷*ÝÉ´mWý\ÿ{þ¬EwIûl??T|&c„úŽaȾmó;ÿ³|»ø~´ÿ…º2êÚÍî»rŸwËò—q?Âèzè(ÕŠÇ¥ÊäãîóSRø*îûFðäPF"'vùw+gær8ü}kÆÅ: 8ÓvnËäyøØJRQŠ.|^Ò-¯4ëxíãøïØ7»”=IÇ@jŸƒ4¯ìé-íÜï)¿’1Ô1þµ¤¶±™ ¯ó9êz\¶Që".HÍaB¤èáãE»¥Ô˜àŸ+¾çBSš±l¯†íߟ­mÙ‹{ˆ± ç>£×ü*×– týM(â»#ÎxwA ºäw§ùd©Èâ­Q¿‡Ÿ^jÌe€?JÝc`—¼Åô*JÉ–cJæuR÷.Ó7~ïã[W¯$œÖMðf|qÓùŠèÀbÕL]$»¯ÌÒvÙÈ}’};[¾Ô ¶{”¾Hê:«# #?1‚éÏ*–¯¦j7³!çÓå³0¬„R1~[`ãž:V×Ûÿân–"Âò™IÚ Rƒ ÜýñÏNÜœRãX¸°Ï¿²XíÙo—>ù2¨Ï†R•£p=GéRP³Mõ+C&ûB¾’þá„buþÂk%™™Fùòp9µ.”Zm1Y:›tº¦™|Ðí¶VìäŽ$È%HëÓ=ª;M/X:æuu_³5ÊÎѲ„ AØàc׎zWUq7‘ JQÜ®0‘Œ³pæG'R&³cÕf¹µ°û%´mqymöŸ.IŠ¢®98lœ¸ê1Á曣èßõ ì‘…¥h„~2@¥ôé.–E¸e“;XŒŽG¿ò¤ÑtNÐx_Ï·(l~×öޯɿ;zsžÙü+¡:…óÜx,¢ÇÉ*ËpU@,Áv•VÝ÷òdg ]³¹KÛ(.¢$ѬЍ 23ïJ4)·£þ´ÿ!Y½¦™¬sG»»‡Ù®D0¬ÀŠ Œ^9è*-@Ôl¦ðÜsÛ4ö»°u#Œ9É>œcšÞ¸Õ¦[†·‚Ú7”]ý•L“Sû79 qÆF1Í6MZê–)lâûZ<'%•üµ;ŠdAÏÊxÆ94½•+ïýiþA¡¤è—ö·ú{Nv­—Ú7ÌYI¸ó+ïÇ|ÏJÏÓ<;©Cmáè§´ -Òín‡˜£`!A äçŽFq]JÝÝÛÅ4ú„ÖöñÄd/ï!Àäñ±O@܃ۥÝß,ª× »œ+E&ù= (ÀÌû¹!ºPvÕŽÈÃÓ-u%g–;p±[¤PÃq4bN²±ÈÝ×ÐV7ˆ”ìñ©íÍþ^3ë]ååרáV‡•ÝcŽ0q¹‰éž¸’pH N8¬O<fÞHÚ6žtØžc2ù¹g9ÜÛ<¼;I°ŽE*´’\©ÿVEkíò{1e´ÍÃ8 §‘ÀÞG×p9©¼<®¾*ñ´H&ÛåmÎÑÇóÇ­jÜÜÍ<“ÛZZ[Ü,XIÄ»8 v)ç˜uç¤íhö¶zf—^jK+E+y2…AáU³’ýFAÆA#šj IItÿ‚øÇ•è^ÿ$ÿõðô¯*‡Ts ŠâÙb+?ÙådrêŽQ]9 dÁr@!ˆÙ¯Mð\í2œÎÇ?ð¬±ö –¨ì…-UŽñ Ü7z”Ï\î¯ –]Œ‰h¨Râ7l3Ræ“MnÑQI:E÷B/£&š‹}·EB·10áÅJ# Òi­ÀZ†á¶ÂqÔñR““Yó܉$À< ¨Fì üØ=isRL¿04Ü|ßZí[&>ZLdTx"“ûQq íô§ž€Óz6;SÇÝ4˜ Ži'4ð>Zi ÜÒbœ>õ@6Šv9¦ŸJ'Z1ê)i 1 Pv¶3Zlïå¹íYøšr8=D ¤†ttU++¿4lr7Ö®×¢âìÉ (¢Q@E2O»øæ)ôÉHÛøçGP9þ­G°¤‡ýcýcÿÑ©J§1&:`RBvúÇÿ£R½ ÿ œËâ9?ò&ÿÛòÿè¹+Æ­,"{(…ÉIãÚ½—ãGü‰ƒþ¿×ÿEÉ^5heûykßÚ²ªí„§ë/Ðè¡üI|¿ ±yrò*WÓµó„[t·-Ó,OþE޾ž­s/Ž>ˆÆ†òõ!»­'\g1·ÎxôÁþGèjaÐT7cu¤ëŒæ6ãϘ?Èý L: óÍŦžôêiï@Ú.Û8Äj1ŒcLä>‚¦¨mmœ Œb5Æ1ǦòASP[½Gl6ÄF1ó¹Æ1üGØžç©‘»Õh­axÛ|’]ó¹?3{Ì3ÉÎHu[–´ÒonQ•Z(@ÍФóùW|×FôÛ4SÅko–Wlän-Мž9Î+½»Ó-®íç†HcÄÈÈH8!‡_ø~gÔ×s¦x§FF±ŽÒßV°Æ#óq•Éõ¤m Ä÷QÛÙÍþŽ›s Ø9\ç‘Üç¦:{Ws¡Üý£L\Êeòä’ ää°W* =Îæ¼á,¼`ðÉ¢[iŠù/$l7?¶âIÕÑø®£[û9ÑÒ<²¨àüŽÅÃO$|ª`nÜxŠÎɬÚ9þÕÔÉù|Б9hÀó n1äËýÃ\Üž6žûEÓ'Ómn¤3\i©uz±EQäš6ägÇ2ýÝàyƒæÈ$u“è¶·徬éþ‘Mð¸$ôcÆw(.ç,ŸÞ5‰€lím­--µ-F8ÖW¶S-Ä–â1¹hˈb)Pvô’@+X|Nðö§ç­£É+…W·Hä†F¸ "F˜Urc%äˆ/–Fî@ Ûm§ˆåÕuk-*Ò9ì.„²I}áH£‰cb€©d,þ}¿BFÆ~UÀ©¡ðm¼Va:Ž¢ö¤ie Hl„n¯Ào*Ѧ »Ï˃Î#ð´–…¦¥it÷‚ÎÍyqtT=ÔR"#©Ø¡T 6¨Ï’‘½˜€Ekãk[ý>Û-:úâ ¹|=£xÛŽ‰OÞá0±».ÃÆ1»åªš½©Ï.q~[ÊÔooì~Ï"G¾ÞX¦£N1åDèÇ-–XñÕØÜOÛ$Ó^Fùµi%Ž_í-°,ÊQ5V!a$‘rÈN¯Ê›dÓü,ö7¶®žâÎÅî.ѧ+æËw;¹ibª¨U’P4ä ŠHJ:RÒ ãšZ+Wÿ]ü ù-lÖ6¯þº/øòZҗƈžÆT¿pýjÕ§ü„¢ÿ®è¸*¬¿pÕ«_ù Eÿ\$ÿÑpWF'c*{œî¹×ÄÿõëþÏQ|DÕPÓºÿèMRë|Oÿ^°ìôψ#:Äõî¿úWþOð¿Èô0ÿʼn›á«5šú<ò9Èçѽë¾~x¸¯ H±^¡<þ ]¹6+àdÛ‘ÝmÔ×aЏT±œûŠàxñ¤|ÛèÙ®vÃãæqt‘Üé_fˆç2}¡¤ÇÇqÆ»èàq^ÑCCÏs[añ^ïâEüyݸÆòë­¡KX(—j/Aøÿõë™ñ¹…>#Ü]Ç0– 6mlÒ%>µè¾Ð_^¼(lI÷Î3ÔwÅ~™×¥†ÁʽWd’ÔúN•4êÖŸCÏüY¤‹‹3uâHúöÎp=}ªŸÃ|h>2µ–y|»7ßç ¹Î#p½‰ê{W¯ø£ÁgM´k‹sæB1½Bã€?ˆ“ɯŸ/c“LÕ†§CÔWe,6>Öpîñ–ÔâÎaJ§.*†ÏSí1ƒÒ¸¯Š>"›Ã¾žKa‹‰6ì|— <`ç!±[~ÔÓ^ðå¥üSùË&ÿœ.ÜáØtÀôô¯.ý ¯§…t{8ßóyÞb`s(Žzõ¯ŠÁ`g*‰Íh™ãI§¢<ßÃÖBC3.OÓŠÚ=Iªzgüƒ¡ãæjÙ­ëÉÊ£lý_,£ 8HB;Y \î·¢´ÏçÛ¨$ðËÓÐWCGlv¥J¬©Jè¼vž6‹¥QÀ9 7Cž[‘ç¡XÆI9ÿë×\(Ú½/N˜¢ª¶"U]ÙŽ[•QÀA¨nú½Ã‘EV¦SÕX.›.zqüÅs^¸’ß]ãëóè-[~!”G§2çº\T¼jn5ø£ÝgqÏL£cõ¯S ­‡“gÀq,ùñð„wVüÏ[b‘¡gûƒØ×-©xÒF»65¹¸¸ã÷»ÂmàŒ¼ÿzÌñ¦¥5íÔZ5¨Ë0>jŒs°ê8üë¸ð¿†cÑ­ÖÚÝCÎßë8Ï,G‘Ðþ•¦]–S©^»´§™æ>ŸGs’_ëzÌJuDÅþÇ’‡õVƒóªWßÚ~»µ1ÞyÖ» äªãÔî=Z½V{íP3¦×é^Mñ2ñdÔííçŽíÃÞT>žÕïVÃ`*`ܨ¤×êxø|]Z•“¹íúN£º¹µ|£ç.3ÔzVúkÉÔŸþµ|ûoñQìôÈmm´íŽ™Ëy õlô)õïRÛüEñ4¡dK0ñ‘ÚHÆñÚøW“â¦Û‚Ðö¥^‹IÉžù.¦îTÇlñþI®¹fçÖ¸O|CµÖ5°º¶w\lMþfó‚Ç ïÞº©g1&¼ÜF­òTVfô”&¯ I¥œ¶yÍg^¶`ÃùŠG¹ùp R’0ìœæº2¨ÛKüKó4© E™²Á+k6³…ÌQÛÌŒÀŽ 4Xý¿*ʹŠûX†î+6â–b¶2¼m;”¨c‡,Xç…ùAÀãqm ¯îà‘^[$[V™# çæL³S°.>ñïp;g"‹ û«Å‚ãìh–s ’9mÒ# ²ÈÀà¶ ÇNkõ¹ZO–ÿ×ÜyvC`7Z¼Wog5¬qC$x™“23²~FlŒ!ÎHíךU´žæî ¡dÊîl?x°sÛfîp7ÆñSëZ¤z6™5ÛÇæ2.%n\ŒœP9$õÀ'µX¿ºûuu·x‚”¨ln 3Ò›ŒlÕÇ¡aO#çÿ­\ØÒä[-ÝX5âÛYy[+!ËPÌ”l=úí £fòýmr¯!’dß‚¢Iîúuüª{{ˆnáY­æŽh˜d‚¦¨mmœ Œb5Æ1ǦòASP[½Gl»b#n>w8Æ?ˆûóÜõ27z¯ É l¬²Û ¬Ç²Cúrr ²XµÏj>(Š×ç·€Kb«,“‘ÈùXç#ƒÉàöÏw]ºHôI‡š ÛJr‡Enøãîž~ž¢¸«‹y®]õ8¦K8€ñ«¼“ÆÜ``~˜5§ŠqËj©ƒp0Kæs´¨$uéšßFWŒI++Á”ä0õ÷â¼âÂÚÛQ¹{ÙÛÁnUÌLh0~îN1êq]‡…¯a½Ñ¼È4ByBc°.Ä vàŽ;P˜`àsFáëÛ5ÌÝ뚌"::[FÓOq ÚI±¼¿²ã33œçz˜ä\´­ÁûçŒÖ«â é—e¬v÷º,sÂÑÉ,²»µ¤Û„­&@rŒ0rv[-ÃÕ7 ã<Ð=+Í´ÿøŠæÊÞòçK‚ÞR($°2ùcËó§‚%ʬìó*‰Õ‹m‹î…2 ½†…yu&¥i~`’çOºï4˜ÒLÅ¡‚b¼K·ï•'ŒàmQH§(µ-QE« Ëü ù-lV>­þ¶?øòZҗƈžÆL¿tÕ«où Çÿ\dÿÑpUY~í[¶ÿœõÆ_ýtbv2§¹Îk|Oÿ^°ìôž=µ¸‡ý;¯þ„Ôºç_ÿ׬û=;Çò„Ó¸ÿК¼ûÚ•Wý×ùô?‹3LBXmàŽŸ­/ÄÉá¿ 3DÛ/&Ç”p0뻂?)«ZRãóÍyŸÇÓ‹­?}ü¢¯‡Êáí±ª/c·Ï.Ò´éu}CËõûÍèºÉühÑ.Më´œþmU< ¼~7)\~M^ƒ£iªêqÚ¡Àl‚qÓŸQé_°à0xhàÝzË»ôHö²¼¿ ðNµu{Üò›Ï ê6íº4órp¦kè„hñé%Ç.áÿéŠØ¹ø}¦ÉþêNíó6Õ†ü)}¡êžsOº÷þP7|¤zŸZùlv?+Ä`jªq“Z'ÖÎç¡Tj{ 4ÚÙù3­¹Xg‰¡”®:óÞ¾Rø¥fx”Œ18<ç¢/ø×Ò72»iç±é^Qñ»N"ÔT}ü’r{ykëý+Éáú­{L3ꮽWü ž& ±«BÛj¾_ð.uu˜¯<ºb©Y,3½²Nï2Iã;Äøý¦=Í–¨y€-·›òc9Ücƒð/Q¹S¼²G6náe#·­{7‰´¼K Üi“¶Ä—>   Æ~í{WÐç±óg‡®„Ö^N~húþ$Ö¹®&H¯|;ª¼ùsÅèH=FGLކºûK¨ï Y#<óý+ÉÆPp—7F~ÃÙ”1 ;N?Š'¢Š+„úKõ (¢…Qœ “Ši_a7dr¾&¸ß:Bî0 v¿ô¿³i’Þ0ÁŸo¿Ýg¿NÕÂ[ÚËâ-¼zLãþ¤÷#Ò¾”ð¿…"hÕ ixëœäÿ{=kÕ¨œiÆ’ÝŸ—b1­Œ©ˆ{I#áb5¾ ëò®>SÏX˜zJö+YþÅ¥Ow´—qÏûXúw¯%ð,FÏÄ÷¶Ò 8(1ÿs^­/ü‹wÿwÿC¯V½8¼*/á”Òä|ãJ®2žÍ¡šN§.³kq ܰ۴œzŸþµršß€à×ïþÖòÜýãÉÏâöýi¶×“Ún0I°ž§ü+¤ð½íü÷·ÃüG 1Áüzס˜eòËaVµÇÙèìÛ_qô×Ï êb¨IFÛ©§øOKѱåZañùÏê}q[ Ì …$øÖζÉ䯧ùÇé\¾¯¬ZèvFêí°?„~n@=¨­òŒgÖpмâ¢|te*ž§)âŠçÇúlœL¾iv?òÈü«×çðô̧d¹Çlñ®áo‡%ÖµFñmñÀly(@9¼mÈ#Û¨¯`•ü¸²O8¯Îø‡F7÷}£ÂJTižym=«•yø¬Ôm×*BsØÿ“]}ðƒŽ·N•ÊÉ Šô:…c•ŬU+÷_™Ø±J¬Z{™WpOw{ ,Gw©‹íѰ‡ @lïåw)qóÐæªé:SÚI¦¢éío5¨ qx]Ož¢6\¹ŠŽ˜ºJ+õwF.\ÇŒwM¿ÔìÙí¤HÏÙ$E´– N÷\}àáC•œnnH5T·žç@¼¶P²ÜIjñ¨Q´3•##$àgßêjýý”nßp±ÏÝi“2êÐÀoº†}μ齃gh,°Ç ·hñ¥¦Ç0{Éæ…¡ûEÇš±;ÊhŸ6 Ê0O_¯QDi$î (¢´QEQEQEÀ(¢Š@ÙøKþA3q‘çŸýkŒ®ÓÂþ%3×sÿ ­qã†Lу•==h¯h`;u¤ÎNZòŒ… æqÁ§•"˜Ý0x¡0³–3µŽzxù€¨Ùyô¦¬0ëR“Ž´D2 ž´ê†ÀByªòŒ=ZÇ „Çz"âžzãÖ£SÏÝÉê*˜åNÚ˜Œ¯5ù—=ÅN9Pj0Ú㎴€|ø©ef™˜¤À“£Ö"¥ÀïM?{¥J`CšŽô¹æ”cŸZ AǘÞÔýÙ4m>ÔÀé¸,}ªB7F`£åÓ¸^M5œ¹àà BI÷¥&˜Æg tÍnA2K(sXo’jH§h3´‘šŠ”ù¹¥¬»]AÞ]²cž•¦+–PpvbŠ(©TSÿª?‡ó-E?ú£ø1Hã§Íþ ÿžôÈéó¨?ç½.ƒ<ÇãGü‰Ÿöü¿ú.Jñ«6?bƒþ¹¯ò¯døÓÿ"gý¿¯þ%xt˜Kx…ùPÒ»çá)ú¿ÐŠ/÷’ùO…ãæïßoý•ôå|ÇáL‹‹°Ýw¶ïêWÓ•YÅð£*;ËÕÝÖ“®3˜ÛŒg‚¦ ·zŠÝqqûÇ8Æ?ˆóÐ}©êenõ°ÛÇïãþ#ì?ÏsÔ€:DWFWV ÷ÃÝü?¸†éæÑ5YìQÎZ!’ û`Ö»Ff·Ó®§Œáã…ÜBšáßÄÚû5ûZÚ\Mog+Äò™âSò±RqåOzj-‰´·#—áΫ© º§‰.fŒßþ¿ùÍnxGDÔ4iõ}´‰jŒ²nó ïËsÓ!”sϘ®Mþ!ê褛9Î=.cÿã5Òø;Ä—zôŽÓ¬±„2#FìÊùg ª/gªt¥vJšgXÖÑ=Â\Ï2,…~eV*YAê*¹ÿtzV{øgC’kIäÑtçžÍ-ekTÝ¡Ê8ùBž@Õ£Ä2¼©Ñ»Âû%U`Ll@`Ðíe8=ˆõ©7Z‚Ìèô&·yZMŠhgí»mÐ}§9Ï™ÇÏÍœçïSSØiÖše¢ZXÚÁkk;!‚%'' 8'5kp4n´£¥Z[ûh/-ìä—ý"ãw•RI 2ÌqÑF@Üp2Ê3–ØÈÆsÅ-Ÿ¥ëšv³’ÂçÍ(§£!1È»‘À` R3ÏL«ª@Ðë@cêßëcÿ%­ŠÇÕ¿ÖÇÿþKZRøÑØÉ—îÕ»où Çÿ\eÿÑpUI~í[¶ÿœ_õÆOýtbv3§¹Îk|Oÿ^°ìõ'F|Cý{ý ª=s¯‰ÿëÖýž§ñ‚ïñ=²ÿÓ°þo^t´£Wü2üŽê?ÄE;÷ù5ÅükÐÞûC·ÕTdYo.?ßhÔwö©üYãdð’Ÿd7L[ æìéöO÷ª®ñFÃÄÓ5,ÚYÍÑüã'L·ÝT¨ÇZøìN¤qã×ÐìĸÔn)êygƒ.Ö Aàcþ³ ú¯eð,‰ˆaWãq=Üjñx[Qðf´ ¸æ2s7Ëóà)n8ÆìsÖºÏ øgxäVÙv™ã¹öÀâ¿NÂU†+S'g%§Ìõ2œ\*agƒ›³è}¨Ý=°RƒƒœþžÕz¿gO×ÿ­Pi½¯ˆtýÄ ûëÏžäJeÍŒ–øo¼ŸZü¾¶Xz®HÚHù,|1Xz­­»v+;nrýs4ïíï#>Xçñ‘=ë¡ÏíS]Û.¥á»›SÎvœÀÁþ•×–VTqTçÒúú= 2jœ¸¸óuÐù¯á¾®ºG¬äšo*ØùžiÛž‘¾;澦‹P³a½%ǸGô¯Žu(M†«"t)Ô­{®“¨‹½>9p[wLvb; ú<}ia¥¶‡µC §RTåº4>%x_Hñ=—™ ìÔ"»“kw(÷WüšðkÿÞ´R¦Ç2dÞ¼ú׿‹¥^üþUâ.ËÄ¢•å~ãdü¼‚zc=+φ`å.Z«Fu¬,èµRƒjHà,u(/ã܇ºóÇ_oj¸>£ó®cXðíþp] –$é/Ê3Àí’zšŸNñɈîø=7ç¯àÒL*kž“º>§.âͪ8¿v]ú3 ëGJE`à2œƒÒ—ŸJãjÛŸN¤ž©…fk·eÓÈÿwðÇøÖŒŽ±ÆÎä*Žõ˸ñ6½ •¯Þr|±:.OR= uaisK™ì>ÌV áŠZ/ó=+à׆WÉ“\~vÁ·bq·b·CÎxê+è;XR dHøQžyõú×%¦YC¥iÐéök€„í݉=sê{×[jìÖÈïwÍm…ÄF­i;úÕ,TO5yä·øçz² «/—ÿŽÛ î%YäÑe¶w<˜î8Ã{×/ñ^sÄ»yƒxPWsas­«³ŸL^NkدRpÁÆP3ŒÓ±äÖªèW…X«µ¯‘BÃÂPÆ¢K¶ó ÏË‚1Ôu ïZS^Áe‘l22~^ýþ¦¹cÅö–ìVi±'üòØyéü@Sþ ×í„—dY6pqÇ™ƒìA+ú×>"œäý¾o[ÒºÕ±¹”ïVM®Ý ÏøÖ×N™£LÜ^“(˜à¸ÇCúTzÃMgĺ„ZŸŠ?wnsûPîà½ÕT×[¢ø_KÑ6ýŽßkŒüŘúö$úšî4ë…x¼§8uõæ¼|Ç=©8{ 4ybwÒËÕ]îMºZÛ¬p&Ä^ƒ¯¹ëÍV¸,Àæ´qøŸJc¬G5ó*üÚšËU¡Î̜֥ۀãñþUØ\ZxÖ¯déo$Äp¸ç>â½l¿›ët´ûKó3¤’›w9ú(¢¿\((¢Š@QEQEQEQEQEQEÚxAöé3wyþK\]v¾8Ò&àߟýkü$LŽƒ ʈ§QOÃg 2ᆠy)™ àíj‘£ ¾õ)ÿ’&ÝÁê(}ÀFÆ>õ*Ç»“NÙ¹²{Sú M€ÕÈëKÞŽ´T€„ÔrǸduö<ŠF9Ð)Ï^µ"rpi¯ÓŸZ@y{€õù_N£ Q8ÈTˆKGš†Øe4Äì)Àõ¤RhÌy sQ’I¥â‹¡zÒm9§Å+nbJ.ri‡ ñ“ž)„Œà0çµ4ÀûQ·Óšð0M1‰nœ ¤‚pM0’~´ó€}M'ÌzPÈö·ñ01ÒŸ·ù¦“ïøS„c§ZÛ±•¥·ºŽ+JÕÒä \}ÓÖ²¯ð‰—袊äTSÿª?‡ó-E?ú£ø1Hã§Íþ ÿžôÈéó¨?ç½.ƒ<ÃãGü‰¿öþ¿ú.Jòý;EÓeÓ-$x¾v…¹î@¯PøÑÿ"hÿ¯åÿÑrW™i¡ÿ²¬ðOú„ÿÐEuW›Ž»¿ÐxX©Ušô%ð£n¸»oWcÿ‘c¯§+æ/ ŒOt=ÿèØëéÚß1øãþsQÞ^¬†ìn´qœÆÜc9ãÓù¡©‡APÝÖ“®3˜ÛŒg!@·ïm[ýB„*¾ŸèèOëZ3[EÕr/è©Ùrv·\Ç'øWΓü/ñ=¥ÎÉ­¶Gÿ=<ØÏé¿Þ¯/ÃÁ×S8¼‘ÿÅ×:J|ÊOä×ù 4¥.uIßÕω:n˜úŒ·ú]Ç™`²ìeÇ?‹ñíQx]&ìé‡îï¹oë[Gáµ—–K’äÆû5X³ðF™gp’íÞëŸâaÖ¶Æf8Jñåö:\*:ê¤U½Y®²qR⥎Ø8è=)æ+ÆŒÓÔô®Sv' Œ¯¡ï\f»à¨îO`vH:§'wNìßZîž!éMØ8æ·¥^TÝâgZŒ*Ç–Hâ¼àë–÷éßeÛÍåËòì9Æá‚Èçô®Ý~x§hß  nágÈþUè UVÛP 2!8ç»Á^ÌiB¼äµg ßn•9{«¾§Ï:—Â]Y¼¥š³q–¸ÇqíW< ð›Ä^¾–îú+g—å1y3g0l‚@è}ëÜ5 Û}7O¹¿»”ÅkmM4KmE“ÉàœÖÞ&—J_;ÄVi¶r,’C*NgeÙJË**¯±¾Bë”a»;wiõhû7MlÎøÅ^)µÔìà‚8"Ý‘4à7(ª0GU=ûѨü<ñ>µ!†áã±²ãä‡dåþ»ŠíÁ¡9ÏlW²ƒ‘‘Ezp«8AÂ,ÊPRwgŸøÁPxbØ&›¢H’ÿ†àòOFvÈ«×f±rÛ¤´sí½?Æ»*+Ì«—R­>z—oÔÞ5\6GxÞMsúŒVìVEÞÓ®àK0›X§©í^={yâ-a »¾Ú§O*>? ¯ þ/IåxwÆvÏ_÷«Å,tÛ½@³Å¸}@þJä¯xM"—«>Ÿ%Àañ´¥Wöv¶Æ}‡‹¼Wá(ÃyæÚEŸÝùQ¹ï´ž¦½ïÁ~0±ñ†Ž·VëåJïaäù3ómçi¬§§Ö¬|Ô¥Ò¼q&’‹˜¯H2·dr0íÏ'ÔV2Œ1œâ•×cŸ:Êéá9*aÝá#è À¬mwþ@×wÿB·*åGßAHòÍR}€f9cMg±b{ýi}‡ÒªÝÀB¤òE7nO*¦O$ÔñÆ»‡?VC †Ù¤•F8Ï9­¨ãX× })±F¨>\z–¹jTr (¢³TSÿª?‡ó-E?ú£ø1Hã§Íþ ÿžôÈéó¨?ç½.ƒ<ÇãOü‰£þ¿—ÿ@–¼çLÀÒlþqþ¡?ô^‹ñ£þDáÿ_ëÿ K^Q`“:Ô‚qå&9öщWÁÒõ—è^ø³ù¼&s=ÖN~sÿ£c¯§kæO nïèdoý•ôÝtæ?ÂŽJ;ËÕÝÖ“®3˜ÛŒg‚¦ ·zŽØm„¸ýãœcÄ}‡ùîz™½V†(ÛexòïÂ…ù›žWß?€ää’hšÉñÌÖº,’[MåLdŽ5Jî‘T‘žø&¯ùN¯»ÎsÎpBã¿·¿þ:=óÆøƒÄbî ÛAqÛÁ8,“a›Ë„ s’¤u¬«MB…¾âMbÖ9›í-ê{ü ¤d|±Ø÷­Ïè×Îpø,[¡ˆÉç©5…^ËO´´ŠkH–ÞÚ$&hÙÙÈA’aŽr;ô­ÿG"hR3ÆèPSpÁe¢g²T×='ïÙ]­sâ] ÆâæÞïZÓ žÕÏ·H­’ åA.£'ûÃÔUÇÔ,£ó7ÝÀ¾T©™ ’6ݨ}ïLÉܾ¢¹ãá»Æñ ¿ó 0kûCnã»ËþÏû6:}íüõÆÞùâ±4ßkÚ^‘g¤Çý4&ãM¹¹¸k‡F­–Ù]Q<²mK/ßÁdöׯˆ4«@YZ_Ú]\ ƒo4pÜFÍ „vîìƒû¶àÙã ÄUÿ„§M¼{(ô{«MQîç1mr®‘*¨iÙ3€ ¨é÷ž58ß‘ËKàbûGJ’æ -:-ñ[Ù­Ë]‹XÚÒâRGDwËL‡c(Cµ°B®ûÇ«sIÕµ >hüëb²îG7”Ë1>Z$…P€¸Må€S@âM RùÛYÓ‚X8KÆ7I‹v,T 9ùàG8çŠÎÑjGøao4 ›wþŽqéèMwäø9©:O{œùž%Ò¢¤™æ^;øw{àéRQ žÍþì»U:m7Õ±^¡ðkÅ7¶‹>rûÞËo8ï4ýßoZÑ[ÑâÝ>} Vmëq·kã¦Ó¼ð¸þèï^AðïQ—Ã~=‚;œª|ÞbuÏîÛ÷«l÷.š¡(=Ö¨æË1‹髈Ræ&ŽQÏ­qrØÊ·ÆÕA-Ÿn8Ï­wmãÈm‘n| çáë_žS©(ésè)VäZ¶>¶…Uî÷î2xüh6™dÈPÃÇûíþ5lõ'®hïÒ‰I¾¦r«);¶qÚç‡ÖÔ‹eÌg¨ôèSõ¬-‹ƒŽ•é’Æ³BÑ>0Õç÷f9Y:cÞº¨Ö¶ŒîÃVrVfcÇÔÕvzÕ÷€äÿBmKìU•ŽÕ#µøjso¨¾ŸÈ×x+‰ø}ŠáþÒìÕÛ úŒ½³çq_Æ‘ZþÆßRÓîl.âó-nbhfL‘¹Ã#dpk“ñ†5}Wú½ÕújSÅepºlI ÀÆg…â +nÚϵÈàFŸ;¿wgY¨_[é–7×ryvÖÑ4Ò¾ ÚŠ 1ÀœNfÛëÂ+;›ÍbÂmÚ¹›QžÝPä㣑€à|ØÎáŒ×YÎcj>Ÿ[sy«]é×z‚¼&0úq6…c( HKô‰NwŽD||§t‰àA«ØGuo êZWöyökp× Y#RÜÜ.s„f$šéVÓZÙîP´0Çn·O ™v¬, Y άCt;O¥ëdÚœºdZ…£ê ’KU™L¨§fLä™y#¸õ  €`RÒd2(h¢Šó¾¸ÏO´Cÿ¡ æ4UHô{o+îßÏÿ×]ÆÐíðÚéc¿Ú!ÀïŠá¼¨‹Ý!Pœ˜€ürÍý|ßÓ“¦¤ºG“Ëš„ãÙßï5u›u¸Ò¦B2Ã{w¯.´µÔ´qu:é­¦PpþZ¾>]½؟ν€œŒuâ™,¼- òjððXùaÓŠW¹ë~ê¥?e^Ê÷¦¢bëÅ5å'aÀ«·per@8ü)K¾àÙäP±ˆò$õ4„Qd2õ¼é3ù{YXú¿åï7çXö˜[µ÷­Á\µ—+ÐLE]£©?ZuV" ŠõGðþb¥¨§ÿTæ)tù¿ÔóÞ™>oõü÷¥Ðg˜|hÿ‘4×úÿè¹+ÌôÝ¿ÙVõÁ;²+Ó>4ÿÈ›ÿoËÿ¢ä¯>ÒÚì‹,ã>BvÿdWUwl?Y~…á?‹?‘†?ãö÷¼n?í²WÓUó„‰3\–ûÛŽ~¾luôío˜|Qÿ üŽJ;ËÕÝÖ“®3˜ÛŒg‚¦ ·zŽÙvÄFÜ|îqŒöç¹êdnõ°ÛÇÎçÇñaþ{ž¤SY×&‘4íq>hÒ“¹¤h—$ú“ŠÑÈõ¬?€þ™ÈiaRB ¨j'k]ên§ðÍ ýüÖã»×?«úN¡§ê6&›2I 9Œ”R`Ç>ÄW%£ø<Üéö·©EÌK1K{hãÛ¸g=ëCÀ,[F¸f$±™ $äŸÜEÍe “rJKqf@êhÜSY:Ö²4²±º¾žòãìðÁmå†/弇™T±·Jϱñ¦¨ÝY[G Ò=ë¡¶.ª°¼RËÜ1Â:Á&Âå×@Ž›"šØ'¦{×7oã+;ÝU4Ë+K«‹­ò‰QZ%0¢NðX3©dßýÍÄ dÀÃþ)ôfÞÎîáÞ'¹¼TŽ8¡‘áYv”i çk¡ÂïxŽ0é×4Ò¤±4áÒ–€t¥¢ŠJÇÕ¿ÖÅÿþK[5«­þü–´£ñ¢'±“/Ý5j×þBQ× ?ô\V_»Ví¿ä'ýq—ÿEÁ]•î™SÜç5ξ'ÿ¯X?özÒל§¬XpE¹ÿÙë7\ëâúõƒÿg­FòøÒÉ#ûæßü~¹°­'/GùøŒÿx¸x[ój~q·Ê8ßó(nvœpÃò¯ð¿†õ?‰~#¸žîóiù|û-Nß…ùA_îÇÖ½ãm¼é¡Ú´­œnãïÇRüdþÅÔÂçpò·uþô¿Ò³¡Ë7s«§ÑÎëßn,Ø3PûQ?òÏÉ Çv“ëV<#áÿéý¾©kå[G³ËdmŒ±ÏÝ$õ#ó­ÍFy.5%‘²üsŒv6§zöÆÙ§Ì'øv(ïšúz[¥8ÕŒµ>F¶k*´Ý)¢¼reYà®p};WŸüDŠM?Ær_Û|‚lyxÆ#@Ÿ¥w‡¦1Åsí Æ‡§^¨Ï—æïöË Ê«:£ÏEK°ò:¼•ù{žáeu4¶Q¿›ëÐSWâ½e@ –>¹Åpÿ ¯ ¾ð¤(û烙Áãt®Gò®Ïyîâ¿$Åa%JoCôZPEØî õOÖ¤ó>çëTÒSÔu©U˜óšóß2û(N$¯rÈ2±ä½XsÉ{o›¿ÎkuO"¦ Æ*¡'}RÏåLvly·#=÷µLšV› É}¤öÃÖº`:PU{¯êk¥KÈoʾ¶ŠÖ{Èá;—lg8=rõÑ É°ùoo ¡oÜÇòƒÉåøæ­‹¹ñÿ ë¯ûê/þ.¾³þï†nòlšãÏHÖé“cHå›À1=Hèz"? jÐÛܵ•¦¥E+Å»IÓod‚B 2þtq£Fì^2v¦HT± vö?kŸþ×_÷Ôü]/Úçÿ u×ýõÿ]„fŸàK¨ì,!º‘#-qqý¥wO*Ïl÷p±³º†”†*‡xÁIn;¾jΗàë‹/ ¹U$·Šöæö9ÛP¸sºc!Ú-²"Œ¯œÃx- Ú åz¯µÏÿ@ë¯ûê?þ.µÏÿ@ë¯ûê?þ.€ ¼Áÿcû~È>ÅçoÿŸ>n?åŸú¬cŸ¿íV^hM¿Éû••·>g™—ß»¶Üy{qÎwgµ'Úçÿ u×ýõÿGÚçÿ u×ýõÿ@誟kŸþ×_÷Ôü]kŸþ×_÷Ôü]s” €Ãí1pzu¯Ÿü¬Á¥ÀVÜô<à· >µï#7¾èЖ¸åld`ûúçôÿ‡¾‹O‰?³ƒíÏŸ'=OMÕóùÆ"?r­Ýûy\ôòÜ_ÕäÝ®š¶ç;‹téW;°}·éTõoÂö¦+C—le²xÁ¸úÖ­ÏÁÝ £eµ"N0ÿ;ã‘Ø¿×ó®Vçá Õºmonãþ|Çÿ^5å²—2›^M?ÐöèætowIßÔáõýH$ mýãýî1ކ»_ø|izHº˜bê|ï^»pXAÇCéVtéÚHß'úMÇüõù“×¶OcúWR°1·’\p¸Éúœ öðøÚr¯J¹•ßÌãÆÕ©‹©*õ´ÓEØŠŠ(¯ÓO(¢Š@QEQEQEQEQEQEÜx1Õt™rqûóÿ ­põÚxAKiRã§žô®µÁëwÚÄÓÝÛÍû“þæm‡–á[rûIþ=G¥zÊxƒW¸µ×­ì–ñíbq @$w‘œsæçå ñšÊ¤9Õ¯`9“'ˆÞ~Ǩ†âŠ8g1Bóµ'vO>¢»iÓéº;%ªÉ$›ö'DPªŠ?%ÊÅãI¢ñ%¥‚ÞÜ\o»HNö޼¶ÒG’C/\óé‚9&½-x¡B1|Ý@£y¦G}u§ÜHÎÆsqÒ0XÄña½±#®+< c6e¼½‚âÆÖÚÖÖåLeâ,¨­†B¥ŠO"œ©Œ#5Ô–©Å°´^µT°ŠçP½¼·³ºkÑ éàÊóy¥–0ÊÛÜðŒ£,Æá8´¶]?Q¾Kh¢Ž9m˜ÄÉpÉÂ$v)¼6ÄAò\ ã“ž„0=hÜ3Œó@¥¤Ü1žÔ€ŠLŠ\祫­þü–¶+Vÿ]ü ù-iKãDOc&_»Ví¿ä'ýq—ÿEÁU%ûµnÛþBqÿ×ô\щØÎžç9®uñ?ýzÁÿ³Ö¾ªqãÝ<ÿÓ¹þRVF¹×ÄÿõëþÏ[˜ÝñOô˅Þ^ò:–æ?Ž4ɼEáË­,Iåyû0vçe>£ÓÖ¼Ká—ˆÿá ñTÖò ¸+çgnÈáA'%‡Jú'P¶7 ’9ÈÅyŒ¾[kûî!ýÍï-»îŽ›€/¥pÓ®¨Ô³5¯AW§dZñ&˜Úv¢Yy†Ll>¸Ä[:zó׎™¯?ð Ä1øj #û»˜AóSž2ìG8ÇNz×Ïç2ö_¾ŒT¥¢ôß[˜:j¬¹dìŽ:ÿÄÞ7ð}ìRjW^|œ.Îþè$}á^™k®.¹£Á¨ˆüµ›?.ìã Ž¸ž•Éøë÷—¡Ú.÷ç|™Ç—÷pqœíõ­KhSLÓ!±‰óYÇ»nïŸS^N#Ù×£N£ŠUm4;hÐj³åwDìû¤•·/ü#ן“ÿB®dJ­›{Õ:EÌûû1ø6Mi€ƒúíñGó:±1nž…#EWìˆQEQEQEQEQEQEQEÛø8¤ËÏü·oýkˆ®Ó F•61þ¼ÿ%®,wðÉ‘Ò#­9¾QMGÏÖ‡5ã™ "Š '5@!¦šq©Ê)i(:SI§a ¤lT>g½I%A·šL †›æsM#ÑÖ"lÕµUH"­†ØG¤€xSR*àRàc4Ñ*±*¹Èö “Å7’hÁïF@ tÒÔÖjfhŨQ“Hje\ ž(`5Ã?4…^½»Pó‹Ÿ­BA'©4ÒY†sœûTe‰ëO ɦí'ØU #=@÷­ë~ O¥a8õÈô5¹lÊÐ.ÖÎe_á@ɨ¢ŠæTSÿª?‡ó-E?ú£ø1Hã§Íþ ÿžôÈéó¨?ç½.ƒ<ÃãGü‰˜ÿ§õÿÑrW‰Úë]¤)ýØÔt>•í¿?äMõþ¿ú•áPY\4°„TóO­zŠ–û¿ÐÊ›µI|Ž»Ã­åè=¤aÿ‘’¾š¯™|3Íõ÷ýuoý•ôÕ<ÃâøWäEåêÈnÆëI×ÌmÆ3ž=0‘ú˜t ØÝi:ã9¸ÆsǦò?CS‚¸ Ŧžôêiï@Ú.Û8Äj1ŒcLä>‚¦¨mmœ Œb5Æ1ǦòASP[½W†d†6VYí…‰VcÙG¡ý99Ønõºâ"6ã÷ŽqŒç úÿSÔ€8\FdÙóîÎ9B~øÿdþž¢¸¿ÞA‹M§—¼ëæHè%Úóer$Eùã±WlÜu5ÁüEÐ.®Ä­”m,шá´n!¶÷Áb1ÎAéÅpž,hä¸Y`Ôa¼•ÌŒ# Òl\s™œddc…çÒ½¿L´þÏÒ¬ì¼Ó7ÙàH¼ÆêûT þ8¯kmSQ1ØmZXÆL’¬iÆÞ®`‘ß‚q^ѧ­êźþhÚV=v¨úr™úšæÜ9ŒœlwNÜžÎß@Òm,ä³·Òìb¶’/!áŽÝ<±ØT åÜã§ÌÞ¦™qá­îú[ëNšòT1Éq%²4Œ¥vXŒT• žG(—Óu;{^Ó4ÍJá%{V¸º¹‰l^ԤЋ}‘º»È®Ú|ÀÊJ–X™OË’Zø£\šê-.u´±Õî®#ŒZÍe!*ÑO(,Ë.ÛD ¡‘“%€  éß@ÓÖÞÂKhìc°Ÿí6Ék¢ÆÄ0l(pË$Šxþ2A ‚<3¡G¥Í¥Å¢éÑéó8ymRÕ)c’˜Á?(äŒð=qþY¬%ÑnYãk«Í_TÓ®Ú4)ª&»˜6Ü“•x¾PXíÈ:¶kÑW‘Y6~ÓôûØ.,íã·[{v·‚#Hâ…]ÃɵTY• Î~àÆ buÇJ+Vÿ]ü ù-lÖ6­þº?øòZҗƈžÆT¿v­ÛÈN/úã'þ‹‚ªM÷jÝ·ü„ãÿ®2è¸+£±=Îs\ëâúõƒÿg­GþJÿ^çù=ck|Oÿ^°ìõ³¨> iÿõî“×>â—£üŽ”nN—œW)ªëz^žÅgŸ ?‡c}{zòï‹?æ–íô=ëýqç¶ÀwðŽ¿y20wt5åzF“wâÆ;¾^79Ž;Jäž ë5c¸}eQƒ”ôHú(ê6ZÎè„; =NHÏècX3üÑ5GŒXÈlÀ'smysø¡®BiG³hfîß0Ï?ïV•¥Î™$Oa~-ŒdàùAñž¿{¯Zï‡âi.hÉ}ç•.!ÃÍò´\“àŽ·irÑØk¸ã öTôÉë'®kª?§xDMâMè;}‹ÉÿÎ+Œ²Oë‘?MÔ>Óä›0Æ›7süDg85êžð¶¡ E#ê:ŸÚ¦—S¦Ìî¤ç9¬êÂTŸ,ž¾GM°­¬bg[|ðÙ#MCOûeÈÎùüÙbÝÏ*¾:`~¡ym‰¦Å¥éÉäÚÅ«ØÉ ylž¤÷®¿p ÓÊk¯¾bÿXyIuŒ¢ùƒpoé7÷·ž Яu/@ OµÛA}k,rGvYí`iZI˜J?tªqPw#Ш)šuyï5ÝoVÔHÔïì'ó-|ë‹8§Ée6W²¬)äõpRG‘ÉA‚v9>‚:PÑEÈ|FRþU¹ŸÎ¹¶Ðb»¶C#nܽ—éØ]W9Ðcÿ¯˜ÿ­IkfÖ,¯ðŠù¼éþò'U ò­N2}c“˜-×þ¿Ö³%Я›ž¿—ø×¥}š&'+úŸñ§ >݇ÝçêƼÚP”¶;cŒåØò‰4‹øù1ÿãËþ4°Åq TÚ½É"½diöøåSY>"³Š-âDeÛƒÏv½,)ÇJëí/ÌsÇ©E«jΊ>§4WêGžQEQEQEQEQEQEQEÙøAs¥KÇü·?ÉkŒ®×ÂÒfÀÿ–çù-rc¿†LŽŽ8È<àR¸¨|×-Ö§Žy5ã4dGŠCRœ£™SÓ\M&*R½ê3Ö˜ Å&Úu(¤DS§lTL3C».i»*}´mÍVd¦ªU‚¼Ðš@,|U¤n1PÅ8`XTp ;§\O€¸Òd‘IKƒ@ E;ŒSV••Ûï59H0^ƒ5:ô¾V:Ò•Àì¢ÊXdT.XŸ˜æ­&À“1Žƒ'ÔÔlùêsô¦sIÒ©DažIÍji‹‹|㩬¢k[M9¶üMEo€vŠJ+AQOþ¨þÌTµÿêáüÅ #ŽŸ7úƒþ{Ó#§Íþ ÿžôº ó?ò&úÿ_ýJñgqk q°*öï?ò&ÛúÿèW‡[È‚Ú Oðå^¤Uðõ¡Î¿‰#©ð©Ýsv}]¿ôjWÓ•ó…..Ç£Ÿý}9Q˜üqÿ ;ËÕÝÖ“®3˜ÛŒg‚¦ ·zŽØmˆŒc÷ŽqŒöç¹êdnõZ!:ÆÂ8£Æ÷#sÉÜÇû¾¸çÜž{€&§+C¦^Kt…ÙX NkˆëÌ×íki<Öör¼O)ž%'k'Qô÷®ÃVi¿²o·$aDéµ»céùŸN|zïÅ·Zeþ«c ‹HŸlœ1YŠïýëF iN)²&Ú7â¯OØç sÅÄüfºoxŠï_•äŸÍŒ'˜²0ܾYUþýxö§â+Û¸6.” Q»vÉ2H#¨ã­zoÃo´+H/-ZÖfó_ÉfÉÛ¶ ø•?­iV1QИ6u‘Í­*E*;BÛ$ À”m¡°qÐá”àöaëOížÙÅyÞ·¼úÖ¹=¿ö¾ËX.î,|—”Ff[{3 ×üì!1.0y©u4ÔíÅæš§S‹OŠøýžð Û©ù°OÜH³H¬òNw³^Ü}ݼ67;üŒu¥¯0KíLÙé—:̺Ì:´—ZW’cÇ–æÜJ% û•&Cp Èr1¶“N‹ÄÙ×mw¬jQ\5ª‹ìiWrç2&๔–È2®m‚¨ [+ˆè°ŸÔdÖ+”ðÙ˜ø~ØÜZÏk!Þ|©î¤¸|o8%äÎF \í cÖUÀL(¢Š±cjÿë£ÿ%­ŠÇÕÿ×EÿþKZQøÑ3ØÊ—îšµkÿ!8¿ëŒŸú. «/Ü?Zµkÿ!(¿ë„Ÿú. èÄü&4÷9Ýs¯‰ÿëÖýžªüM}A/wiO²ô[§–xþùÏÞã¦:µ®uñ?ýzÁÿ³ÕŸE$Þ)¶Hþñ·ç šæÂï/Gù´ãÍ+)Á j—šŠY[Ú—¹|íMê3ž¤ã ®ë@Ð ËrFÜqúë}=Yæ_}PÞ^¬†ìn´qœÆÜc9ãÓù¡©‡APÝÖ“®3˜ÛŒg óÿë¥û,ÙÎÏåÿÖ©dÕôØuH´¹u TÔ&MñZ4Ê%uç•L䕹±ô¨ìuíS$°Õln’ILÐ\#†.ò€ƒË±×=+>D;”åЭfÔbÔdÓm¤¾…6Etñ«Kóò†<ÉèˆúÕ£m1êœöÉ·ëM“ĺ W‘YÉ­iËu3lŽtÝ·”À\äêËü@Ž¢ªßø£N¶ñ †‡ͬڅÌí–ëp¢XA$»Ù Š3ãÓ'" —M¬Üá8íÈ­¥¦ëf±M¥ê6—°«li-¦Y7eIä~utŠ¥(¢Š`%cêÿëbÿ%­šÇÕ†eþü–´£ñ¢'±“/Ü5j×þBQ× ?ô\V_ºjÝ·ü„ãÿ®2ÿè¸+£½Ó*{œæ¹×ÄÿõëþÏZ:ÿüŽÖ'þÏþÏYÚç_ÿ׬û=\ñA#Ŷ˜ÿŸêõÏ…ø¤üŸävÁ^V.I \¡Y01ÐÖ†‘¨ „h‰#öükecÉ$U»K9ø]ghôõãÁŒ¯ìR©ÒúR¥î´Íë¥ÂÆOÿª¹¹÷IÇJí1æGÏC\=üMmzÑȸéÈVX½"¦¶# ¹›L°ÅJ¬Åsš®ÀÛÈ«P¤²ü¡yúŠáUº#¥Ó°É Û’yªWA™rÝbýGøÔ¿Ù$cfÔ;TdJ¬cÔäpKp?Qw®³ûpsåþ5^úÜÙEºvÀú†}E3Jíõ˜œú«*ÌaÎ0+2û]\¬|cÛÿ­T»9o•ñÿáUìæÕÑ/u±‰7NõÆ|LýÝð#8çù%]!¼y;ǧúW1ã}i59"”FìõÿgÛÚµÃB\þñɈ©-ïà›—ÑõCÿO ÿ ×©W”ü Ïö©ž¿i_ýW«v¯Xæ ¹·†æÞh&Š9¡™JIª :‘‚ Ž*;« ;ÀEÝ´–…à>da³ãzsü-µr: Õ^Üé¾×/ìåò®mtùæ‰ðk¬lAÁÈ<×Ò¸ËÏëzEÝŒš„®,´—ž×U¤e¯¤KYç ü³>\PÉ´¤í'1šïm4­6Â8ÊÂÒÙ!WHD*ÑØ3…Ç@Ä)8ê@5 øsC’æÒáôm5ç³UKYÕ @¨r2 vÇLÖ_ü%–š‚ØjºlL²Û 䶺3F‘Ü#‰²cF,fŒ!P¸Õ·cv2çø‰ 6ÿdÐnïHáòiYížIA,7ºG»d† 7(-Ãë—JÓ’4,-j‘Fб(b;¢Žˆy_ÍšF›aqsqeaim=Óy—C £ÌÙ's2Ç,Ç'ÔÖ^©ªCãÂÉ ’ÖæÒæ[˜å”¦In7©Ř  vƒ»’8¦h^'—WžÅ'°Šu+#¨X:NdfˆÿÖ©Q±ÿ}—{æàÒ‚çŠ\Šo@2sï\'€ü[«kúïŠ4­BÂCo¥ê3ÛÛê ª¨ê$`"aÆ]TŽ@#݃‚àþ9ÃhQz˜ÿ­]³@-#ÀÇÊ*—Ž?äý|ÇýkBÏþ<ãÿtVb˜Ó8ÿÕ0~ùúÿ³^e$ Xóƒ^©ã8•b9ñÚò›N%•\þ&¸h©©5¯÷\—–ä- ¥ZÒJ"zsüUMG=z}kGL%¼@>ñÏò5éá¤Õh_º9Õ›ÐÞ¢Š+ì Š( Š( Š( Š( Š( Š( Š( »0L¹ÿžíÿ ­qÙøDãJ—þ»ŸäµÇŽ_»&GFd$b™ŸzBy¤¯ M&}è£ri{QEu4T‘§sÒ€$v‚OZ¡q#\NO¬^ÜyQìH¨í"Ú?}ùª*Ë™Œ³o†2z“P¹ËTîp;»ˆf(8¥Å ­=W4ÌT p(Ê€Š] QÈ4‡Ö€0*)f ]½zÔsMòìxÔQI¸l›“Ùª”z±–<ôÅR†g¨ªÏëEE‰!;Ÿ¥©ìҪÚa€vÎjpÄçéR­Â±Á-$$ˆÏéW>VA¨Ú!Ûš»ˆ¬ q$Ž´æˆ¨æ¢oõü÷¦GO›ýAÿ=étæäMÿ·åÿÐ$¯µ·ˆÚBKòc^ÇÒ½³ãGü‰£þ¿×ÿ@’¾sÌ` ~^­8·……»¿ÐæºUdz„c1Ks}äb§ð–:úz¾gðáÎ¥¨ÞgÿÑÉ_LVyƒ¼¢ÿº¿ ¡¼½HnÆëI×ÌmÆ3ž=0‘ú˜t ØÝi:ã9¸ÆsǦò?CS‚¸i§½:š{Ðv‹¶ÎÆ1ŒcãÓù ©ªEÛgãF1Œqéü‡ÐTÔÖïU¡Ê6Ù^<»ð¡F>fç•÷Ïà99$Ùnõ²íˆ¸ùÜãþ#ì?ÏsÔ€'’û÷yÎpz¼õö÷ý¾|ûÇ:¥þ‡â(çƒËH.-cˆ™òÉWrzr7/óº½"²uýÓ^±÷lÈ„‰"žQ‡~xèHçÖ€<ƒÄ—Zݤ1È.¥xÁ&(à>Vâ‡_ÍrÜãhÈ9â½®ÒúÚõK[J’ 8Þ‡*~‡¿á^{'ƒ|3c:É{¯‡E?4,ñ®G¦þ#Šîô{ý:þÑŸL•$…£2®ì{sÔTóÇdÀç5¯ êz®£¬Ekq§ê–òGu"ÎÓ›¦k%K@ÈE~S¹æQ'ðþ½u­§ˆd‡NŽþÝ¡Y-Û¼R,ir™iŒ`©?kc-¿ÕŽ~l¯i(ȪÏí¼«ÄÐܵŒw:Å„ðF±Ìî‘É$÷’òÅÚÊ œ†ã¦d½ðŽ­r±éÏk¦ÝiQÞß^3Iy$RN.#¹QUŒì®JïNv2vŽópõ£"€1¼9cªÙiіF”´1™Œßg‹,~iTiq‚w0Ýó`–Æã´:QÔfŠ(¢Š+Vÿ[ü ù-lV>­þ¶?øòZҗƈžÆL¿v­ÛÈN?úã/þ‹‚ªK÷jÝ·ü„ãÿ®2ÿè¸+£±=Îs\ëâúõƒÿg«ž(ÿ‘¶Óþ½ÿ«Õ=s¯‰ÿëÖýž­x¶E‹Å6®ßt[W®ZÊoÉþGe?Xu´~dÁ{ÿ*ÞÊù¡GÝÉ[jy½W„ç'ð®šWÚIÅ|Þ3•aO¥õ;1 ÇSJ9@³µûqhgA‡O×$Z¬n™çô­;´ºCc8äzþžÕïN’•7pS¨ã%#ˆ†áU€ÎEmi÷¡dŸþºÊ×lL¾ «º~€gùÔVsáÇ?çšðeMÓŸC×iNG¡FûÀ#¡§ŠÏÓnyÿõÕþ+ÙÃTç¦y3¥a° ¯8ñ¥ã´Å8oökÑ\nR=k‰ñV–dŸÔŒsî¾õÍ‹›H©l8ly%ÅÄ…ø<~áTUœIåÛ ÍÆOþ¢®êvÏ €‡ÿ­Ttë”¶…£Æ%ã“ßšë_ Ò"œ¬ËÑI©$>k\|Ývá5¯T·hæ]²£¯§µF²È\$úÔ†ÙV9z·QYÅë©ÑZ”T/z—Á+W´Ðõ%c× ÃþùÇô5ê9ç ‘Ž‘¨¨b¹•pGnֻ߱ÏÿA¯ûæ?þ"º£±È-ý¾§§ÝX]§™kuC*n+¹ar2 銊ÿI±Õ<…¾·KˆáftŽNW-ÆÙ^Œ ; 9ü¤û$ÿôºÿ¾cÿâ) ¬Ã®¥t>«ÿL ø_KN¾±1M47ð˜.ZæîY¤xÈ#g˜ì_hÜØ€71$æMKÃÚn­p³Þ@ÎûnyfL’UVTo•Á3qóÜû$ÿôºÿ¾cÿâ)>É7ýn¿ï˜ÿøŠŽïJµ¾¸µ¸\OjÛ¢’)ž&ê RPÈJ®PåNÑ‘À¨4ïiºLækH\§–§wX‘”‰Yˆ‰8_•UþêâçÙ'ÿ ×ýóÿGØçÿ ×ýóÿ@q“€j(-a¶ŒÅoP¡v}± Q¹˜³å‰'Üæ™ö9ÿè#uÿ|ÇÿÄQö9ÿè#uÿ|ÇÿÄPŽþ‹¯ü|ÇýkNÈfÎ#þÈ®gâœeàW‘¥i."ùÜ œ·°ÇJó‹\¤qù`:lá\Õfâì‘qŠjçwñAž£8'üR¼RYRk¦ñ?ˆ¯µkUüÅ;ñê=½«ŒŠ`ßzÚí“+QëZÚÛµX@éógò5€Î1Åz7…|4ÖþºÖ.SɳÊœaÙOñ{úSU•:ÔïÖI~%ÓÙg¥Q_jhQEQEQEQEQEQEQEÙxKþARÿ×sÿ ­qµÙøGþARÿ×sü–¹1ßÃ&FÿzJZ+Æ2 (¥¦QKJœRI8;°Š<ö¨›yÅgßNYÄjxiÅs0#\Ü\n¸Mi+q»Ó¥T·ˆ"óøÕ‚{ ©êì€qû¤žõ©„ …B´”´S©#äãµGOŒá©0N*œ+íïKrÆ<0ÍW+¹†j⓯üœç¡£ ©ÏQRlÊã½36+DÆMYp§†%x`j ÅN}*àîOCPô› È#ƒØÒŒ7Ö§hˆ9^•]”©¦À*}ªPÛ‡ EG÷†)½8ÍO1ׂr)<ÐF 4©^´ÒÀ.©ÅmZÛˆ#Âçžk"¾z[Àñ\õÛØLZ(¢¹ÄÿêáüÅKQOþ¨þÌR8éó¨?ç½2:|ßêùïK Ï1øÓÿ"hÿ¯åÿÑr×ÍÃ{}ké?ò&úþ_ý-|Êäoo©¯kþéVr¿â3Ôü3Íõñÿ¦¯ÿ£’¾š¯™|1ÿ·ßõÕ¿ôrWÓU͘|Qÿ ü‡CyzÝÖ“®3˜ÛŒgµÁëwÚÄ÷vóA¨<)7î`†Ôyn²„¾ÒOE=GqXÖ—,lÚGƒÍÎmxÚ‘„\D³íí£náœd ÷­±mᘒÆd$“’q5Í|A¼ýQÛ QÅ9…FÔ¬ $‚yõØx;M¸Ó4vŽåUd’Mû¢(UEû(¬)Ź«+Xï|W w×–pÛݲ½µ´žáí÷Eºg€*©Þ¹%fê3·i,9@õíø=©7†í'7»¤›ý2þßP“q$>NÐ8û§ÈL޼žG¡uà»C£éö¶ï;Í¥iÿd±2LæV…ãvmŒ7·Œçi^¹VÚ+ω:fž;û+«;Ÿh ¥ÕŬMò¤rÞÓÈÄÑðw< )ŃñF6W÷ª—Mcf‘3Ý´b8œÌ‘K‰]÷3~‚½Œ&fâ”gªÀT}O@Ô­£Ö´²Ñó èyägùW hdÕ¯áíXY\lv7ÎxôÒ­x›MOö¸†c~§>˜ÕŠå­i™ÑAºRörë±kD¹ÁÚOùæº1¹5ÅéK)>iáCëÖº43]ð§júàWé^œ3ò1ÄÓ÷®Yšícá9?Jçõ}7SÔpmòë÷}½MtpÚGɛ֧ÍuÃ^´½¦!ü—C›GHž;­x.ùlrL¯·ûUÅÜhs«‚Ñm#¾áþ5ô¤’BÍÐW–ø‹Rf»"3…ížÂ»"ªB\©Ýdõ88,&)Ÿ/>û…L-¶·åWešiøïÀ¨’6-ÿ×­Ô:°u$Õ›=3áXÆŸ¨ŽŸ½OäkÐk…ømnÖö—ÁÆ™ÿBÿ îj–Âfv¿©Ãú–«å ¾Åk-Àˆ¶Ýû¶3Î3Œt5oâ'·–þ nÞ)ìâ†vÓ5ÂÈ’³¤j>Dc!hÙv$’€[G]Ó?¶¼?©é>w“öëImüÝ»¶oB»±Æqœõ¬+¿éÏay§XEig¦Ý¼wY}‘Z´FèÈûÆ…tèÀ %‹1ÛÆš$bó/ži|ÌAró&Í›·Æ±—N$ŒüÀd:‘ECmâ¸õ[‰wÜYÛÞÇolú}¬·,èÖÑM¸ˆƒ’ üÀŒw<ãÛxGVÒ5>]ôk@¶÷bâH´±º´mµ•[$DNæwäÀ*†ÑAj¶Ö÷V—0FÉå[êÖ"î «o´a4€Aù8ÛÎh¤)Ñ|á^ùˆ!óžæ8íãMžf^p iòa¾f2Ÿâ³¦kv:·š-šu’,oŠæÚKy9Ãl‘U¶œ0 Œ¤k™±ð4Ú~‰6ˆ5XÛJ»²[kÐÖ¸™˜[%¶øß~ÔcCµ‘ùÝÎÆŸ†|0ººE¥Ç-ÆÀɦéËg »™™²Ç$±|Å€:>´R-p߇·òñþ…^ ¿¤Éò¸Æyë^ññ—'áåÀ~Ñþ…^k#RÌ ÇJÆ{šÂQQ³.Ç'™ßz7›'ÈpO·ÿ^¬ÛÄO=@­ hKãøö5Ÿ3W&1¹‹á+‹ÍjiÓÛ› ÿ #¡ö¯gñQÁáˈ¢\"íÀ§Î*—„´¦±´ûD¼»t˜$zûÕÿgûçœýÎàb¼xWö¹•ÑI~fÍ(«#ïEWê (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ìü#ÿ ©ë¹ÿÐV¸Êìü#ÿ ¹ë¹þK\xïá“#~ŠZP9¯ ÈÍ 9ˆ‰7c$ö¥YÕ‡ÝlúHªóN/å¸]„ƒÔÒùËÙþ†˜ ïšZ€Ë© Áþ€U,ó>p£sDò'Âqž1VY"ÃÏNkd¹U†,2n\•yj©Û çZ»ïS-8ÓŸQµB¦ÒŽÔSõ4ÃJ NTI\Ô~RŒ t¦† õ§‡¥¨ åŒpjc*r*ÎsҚˑ‚)ÅØ ŒG½>)J:ŠVJ‰xlzÖº42𠌎EE*÷Å2!ñž YÀ"²Ùˆ¦S#p¤ÆáïV|¼g­Wu(sV¥pzc¥ ßÂy§V\ô5$z¡ƒc<¨­->à¿îØ’{{U-žd{‡Q֖̰º@¼sƒQ4¥´QEpˆ*)ÿÕÃùŠ–¢ŸýQü?˜£ ÇO›ýAÿ=é‘ÓæÿPÏz]yÆùíùô\µó+#cŽõôׯùGý¯þ‹–¾rÜ£ŒWµ‡ÿt«9%üVz„óö‹¼œíÏýµJúv¾_ðns>NNNOýµŽ¾ ¬3%j‘ôEPÞ^¤7cu¤ëŒæ6ãϘ?Èý L: †ìn´qœÆÜc9ãÓù¡©‡A^qÐ-4÷§SOzŽÑvÙÀ¸Æ#QŒcz`!ô!㚯k*Gm {d*®G…ôP;ŽÃ¿LA©Þªi²Ç¼2[I &6=Ǹý} eÙø†òóQŸe{$T(UÐI–PËÎç×§½Dê¨Ü¹žùÆhÐín#º´Šâ2vH¡€=~‡Þ¥8ô¬½”é(«Ê$’Ƽÿ ÈÊ?@++H³]n{CQ¹½ûm­üÐ x¯&‚(’9ˆ4Hà6äÙ'ΰ“û…Tu!†:Š\Ž9ëÒ¼¿Qñ>£ªMko5·üK/î쯴ë¿%aßßÚÀ•Ù·,ÈrËû¼²ZøÛÄ×Z}µÓéÖ¶‰ª%´¶O:¦#Yn Œü©p^`|ïÄX*¹8 é†84nsÖ¸¨uývïZÇ>›£nóožÑÞ)8í¤ÂÃæ‚¤ý­F|ÆÿVxù€\Ox£P±ð÷…¢²µûN™®™c||•LÓ$@~ðÊ…š&À‰Î7v€z†áKX>Ô5-kÂÚv«©-ªM}oÀŽØ1TVH±äç-ÓŒíù±½·GJZ(¢€ (¢€ ÆÕÏï£ÿ%­šÍ»µûLç3:ŽVíèÀ×¶:UBJ2¹2WFÇå«vßòŒÓþC‚­3w/ýú‡ü‡MxD:µ²N Ÿ$õ'÷\Öµª©­Œg'­ÿÌÏÿ^°ìõ«¬ÿÈócÿ^ÇÿjVV·ÿ3?ýzÁÿ³Ö®±ÿ#Õý{ýž¹ ÿwSü/ò:#¹r@­E( ‡5fE5Zá„qsÞ¾F´—³³* ó¤swè¡Î+1‡5§xÛ˜šÎ#šå§/t÷)ì;v5Øè·k¨Ú“ó m$û’{{õÈ æµ,É(x¾úôçë]4q.ŒÔº=¡–" Qó$»’xn67ȨãÛüksE¹,›XñÛõ§jVBöØ\"þõs^F;ú ϰÌ9ÿ×^”c RS¦´‘ÊÚ©OÌê¾”SU@á§q^êJ×<Ý´(ê’˜ì\¨ôþu云)%¹=k×u†Ù”Œƒç^w¤<’eS÷ÿë×;œ#Ss¢œ‘ÊGl]€¯½tzfƒ…È>ƒ?_zÕÓ¼>Ê7¾~ŸŸ½iÈÐÛ&IÚƒ8=ê+â”bÁQ÷¬jxb/&K¡Ž©›×EXÚ>ß¶\í/•?7­€A´ÂÏÚQSîc5ïX§«ê1hú=ö©:HðÙÛÉq"ÅËE,@äsÜúU+/C?Û–öÚm.k(Vât¼h†Ø[v$.ŽÈ˜Ü}ì„Ëâ]6}cÂú¾—lѬ׶S[ÆÒ3£(-€xÉ®PðLÏiigq$]=½À{»Éšá Ö1,â&ÚÄwFÌÌîÂô’_¼ñŽœ—º5½•Þpš£¿“r÷Ê‘:£¢2ÆÊÌ—2 ¨1œ7ÌçJ_è6Ö"ò}oNŽÔ² î‘P³ u³Œ”!€î= ax—zf¹§2AbºF/fºrò`„Ë/Ìÿ-¹ì¸@ð%Ý–‰á˜m"®4­=­&‚ F{w)žA,+¸üñ´¯Í¿q ®Gâ/iÚëKuj÷ðYËwƒ\*K2¢3p:ãän@8Á=«GLÕôÝ^ØÏ¦j—°+˜Ì–³,ªq•$g{Šáî¼ ª®Ÿ}¦iOkagq¦µ¬»ndt»²ˆ#Ì.­ä!Nô‘‰È+×A¦ÜEâ‹ýL²y7VÖê üÁ£yØçŽ˜•qô?ˆ½€`…Âü[Îð4¨N¸‹ÿB¯)‡JD $ñïþ5ë_|üËÄ_μéWéô®Zí§c¢Œ‹l ¶ÊWK¡èñ¨ûMÏËϨì~©šF–ן_¯½\Õïc’eµ„ƒuÇ|€}+ƒ[ÙÓå[³|=i/#¾†T’1埗œuþµâ<ÿ`Üú|¿ú®: ù`Ê'à :çW¹º…¡’MÈØÈÚqϧõ¯-Œþ»JÿÌ¿3j˜9+Êúh¢Šý€â (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ í<#ÿ ©ë¹þK\]vžÿL¿õÜÿ%®QüêܘÉH¦J-”cu÷¦À»Üp;U=}à EÜÐu5 :TJQHPFMKYÉÜB•§µFi””´”À(¢Š@-(8¦æž«¸ÓÊNx©JqÛ­MÈ'€*°ŠÎ:ñÖ©H»dàñ[¯²íÀª2i¬ç"@)ª[Œ§UçƒÒ®USÅ(FƒÖ­•R×T•#֚ɔÁíO£“ª€²= 6HŠ7µI"‘ÍJ§zr9«½µ½»aˆìjFŒ«îCƒHÑ>bçpíV-³;•l R”º &¶º'Èï_Z»P¥¼qÀdûÔÕÉ&›ÐAQOþ¨þÌTµÿêáüÅO@#ŽŸ7úƒþ{Ó#§Íþ ÿžôº óò&úþ_ý-|Ìòíõ¯¦>4ÿÈ›ÿoËÿ¢å¯š>vú׳AÛ Wú­^£=7Â#Üã¦ãÿ£c¯§«æòóýOþ޾Ÿ¬s?âGÑizÝÖ“®3˜ÛŒgœ0þ•‡q©µË´µ)TÉívëŸóŠæ‹˜ŽÂ0Â1_ í=¦ç§Bœ-x’Ë&sUÏ­#IH5qVGbV,Û@ÓH¹þUÛYÚ%¬A@äõ5Íèjår;u}I¢:½O?7Íd= ƒÈ=k/PaŸ p܃ùV‰T7вÛ|Ëœt>œ×¡‡¯hû9|¼ŽjnÌnrJnÉhŒ×9jÃp?r@:þµí®Ì‡c¯ü Ö½Œ6"ë•°­O[¡š‘p:ú«8Z¾ ²€‘¯VÎ}ªö£¨¥¤E‚onËœg‘í\.«&±¬ÉûøLpŒa7)ÇNãµTpüÕ9™>ÕÆ6F¬úüwS ]?曦1õ¬íJwûA˰ÈÒ­XÙÃáëS{qÍËrˆ9Æ##¡¬#;—c–=k“ãªqÜîÁÓ”›œŽ¯C×þÂ]]…‚€Y±€ Àÿz®ÏãÆ·“oöDÒ´’ *âÖ\~µÔhzCɉ®@œ)ß¾k,66Tù`þqXhë4ÉÄ]£çþþð¨â|jqý‰uõÞ?º°Z¨Ûä‚?Þ5F÷ÃÖwC($ìy>žõîÆ´[³<õÕ˜ƒâ„g¦‡wÿ}­8|MFÿAZâÇ»R^¤ÈÛòÚŸ· Bàš%gˆ«ÏãP›‚šòÙ«$ˆHFïá¦y€f@­3,rÒœœñÅ=d ëÇnj¬W ÆX’GJŽÒ©•¿‡¥1¸ëõ§ò±yjØ­iªVé³1 Ê¾ÔæC"¼ifUïš“˜9ü*5ZX‘x$ýMÞ¢ƒ”o”ƒïRp¦¡î?£57 œÔMÅÒQGz(  š™bMFˆXÕ…]¼šP¸À«QD“Ö¢R°†ÃûÍø °8¢ŠÅ»€QE€àGmÄdÒ#+µ-îÀ¨ö­ü'4ϳIè>™«ÔU)°2$l–GR¤RA¤“ZW,±0#žÕR+rà `g“Z)«jÏz‰¤òäR„îqZj›äžÕB(YäØTõäÓ‹M Ô†U–0Ê~µ%GKíQRV×ÐAQOþ¨þÌTµÿêáüÅHÇO›ýAÿ=é‘ÓæÿPÏz]y‡ÆŸùíùô\µó3ïóŽç½}5ñ£þDßû~_ý-|ÒÀ—o­{xXú¿Ðå¿ï$zw…£ò®¯#Âì?ò*WÓuó…H77díƒëûÔ¯§+ËYÇчÚõ!»­'\g1·ÎxôÁþGèjaÐT7cu¤ëŒæ6ãϘ?Èý L: óÎi§½:š{Ð[a:Û«a(å°@ÀìµéÐp3Åma§þÃÔ<ÄEd“$9<ìúz¿h»là\c¨Æ1Ž=0?ú eí°»²¹¶ÜÍF[ÆA÷ wżZ…Íü¼ˆ‡Ê€à³Ú ‘Ë(Îo¥qsÈÚ½•Õä’JöÍÑØnp Îv ÉÂg¿SÉnÂi®Ûo‰´³¸ò¥¯Îj½ÄböÚH.¼Q¦yN>l*gëÜVS§ÌÕú4´;5ÆÎx¯)Ô¼yuáoÌNíi¤± sqp&Ÿìì#ÛóîY7dòL6Ä}ÊõHfŽâ%–RHÛîº6AüGZv>CùpkR*ÔâñOÚ@­R·Õ¦¾´¼Áù×fÑÇ|û{TVWÜ\²3àŒváí^Ä*S…5VgLiI'LÞ¸¹¾¾£™xò§×ýKH¾Ò­Út¾ ©ü>JŒç_zÛÐ.õd—oï?\éXž5lÝŶ:ä~ Gõ®ÿi(á]Inc'Y@äæ–[© ²’ÌGqíÿÖ›Nsš³C*O#ÐWÎÊ­åvÏbê:!4ÈÆ¡mÐç?•zBÆ=+ˆ±ÿG½ŽLtÈüÅvƒ ÃyÍrרù“G-Ý¢ìr†\gž éÐU óqO0ï^• Õ%ËQNO[¬ÖpÀxûýHÃͺƒùP厧?Ð×s©³M§É?)Çó¬ü¸ÆÕ+ÝÁVúÝ7edŽšp…ú™–º/Ù& ð{üŸ—zèÅÓYò~öï1×µf1«Úl©.ûiyllú“[ÕÁÓQ¼£œå'ï–·–×)ºr»ƒÇæ*=Bþ x³pûT{QíX i~ÁŠÃ·?í)¬‹íâsºyö/a°{z¥pÆM¯}J‚½àÂëÄ©]-žž>SÕÿ ô#Ú²|U¬+BºU³f$;ã®v°àŠ»¨ÛÜiz\,[W×#ûÀtÍpÙ=üÝ*+ÛH£·†ûrè8”»±LœEr4zƒ·ñVtÆÎ§ϯò5HŠ·¥cûJyçùéÀGýªŸªüÌ«ÛÙKÑ%Q_¥Ÿ6QEQEQEQEQEQEQEè^ÿ,ÿõðßú מסxsÿO ÿ ­yù—ð~dL馈M!ïXï ·qÉãñ«RÜ̳ù‚6Ø8Çj©$Ï,›öô¯*”Z3B4§væävžfåäR¹ˆÇJG彆>87~ó¥*àIÉÎiUÉ{ crƤ 0¹.Ç*)É*î\‚sBÆ:7ãL¤ uZZ1‰À¦7e¹§ON)X0k=€Š?õ§o½,”òB.TDŠ`4уÅL±w5 P: W‰95f(‹œ‘Å$q— ‘Å[ŠÎr›ã#¥:Š+ (¢€ (¢€ (¢€ (¢€ QE˜£Ô´PEPQOþ¨þÌTµÿêáüÅ #ŽŸ7úƒþ{Ó#§Íþ ÿžôº óò&úÿ_ý-|ÔÄ?ZúSãGü‰¿öü¿ú.Zù©þû}kÚÃ?öXú¿Ðä—ñé^åî>§ÿFÇ_O×Ì>ÿYqþñÿѱ×ÓÕ†güHú!á¾×© ØÝi:ã9¸ÆsǦò?CS‚¡»­'\g1·ÎxôÁþGèjaÐWœt‹M=éÔÓÞ€#´là\c¨Æ1Ž>ƒù ©ªÖ趇È "ü˜Pº=aÔôã$&6¥wã…ç§ öý~˜âlïïâ¹´¶¶ÎÏiXüÒ¨£ËBÎN8#ñ>õ~ÒúöâúÊyäòṌ´Dï$r¤àîU*Ø9ÁºñT œÚ\é—–¶r\KŠG8SÉFHŽW'¨(œ¼ò:ÔºEÙÖdÓRÊÎæ ;Ov`×ACƒåº*¤ðªøçžI94Óé›'ã´Üèçª6Þ!’ãÄ“è§DÔb’Y$¹vƒÊÆ@òÊ[ cl ¹d ÐÒ?ãÊOúù¸ÿÑÏY:¿†¦Õ®|B¦xáƒUÒ#Ó’@ 4l Ææ+À#)<àçPèüI¡K¦K©Å¬é¯§ÂÁ%»[¤0ÆÙ)|íæ^§¸õªºOŒ4‹û [‰µ cyuqmf¯v§í^\Í1“û°§Œýà+.ë×zÔ~"’:=BÝáX‹·xcK”É›ÊOú[ymþ¬só’¹éàÍxiÚµ» 46¹o=­Ù.E¢Éqs xÿwûâèŒ/˜úüß(¢õ¢t¥ Š( Š( Š( ª¿ú÷ü?•Zª¯þ½ÿåI-fÝÈjú÷ŸÿiV’Öm×ü† ÿ¯yÿö•Lãõ¿ù™ÿëÖýžµuŸù¬ëØÿìõ•­ÿÌÏÿ^°ìõ©¬ÿÈõcÿ^çÿg¬ßðjÿ†_‘¤~#[¹¦IH¤7õÿq#&“"¿<“¹¾©èsº…±¶ó•=+9ϺmGØwúgùŠå^lôª¦®z_4FÈØ5]äÛíNyAêj³¹c€2kª¹Ôæ¸o^j %fêju³Ævà}EG%¤ˆ2EtF›Ý¢×)§ái3*·(qŸÀ51õ8šC8ó ž)ž,—Òä`Œ#\Ÿ‡çyOÚ\’Oÿ^»Ô°é´aÊiz#Ø<%†ÚHÈù†ÜŸÅbx±¼Ýl©<'õQ[þmöìýÎ3ùµs¾"aý»1ÿwÿAÑ^wËâûœTWûK(ÃOJ¶!tªñIƒV–QŽkæfÝι\‰¡ ÈëZzv¨#)Ï ÀlV{È1D(\þ•¯¹2Š’ÔêP‰2œƒC²D»°^+™yÙGÊqø ¥<îÄ‚Ùü\(ß©Œpí½Í+­en¯Åº ±Œõxϧ­@ÌÀⱦlÉċЊ¹Ú]®ä廎•õYEHÆ—²¹´©Y{¥¢ÿ•Ü{¤™O+ŸÔT›¡¦>v“^ÖÛ˜8ÞæÎ¯â°êf±‚[¡Î?„Oz†k¥¸„ÆñŽqƒ»Þ¹¿Ýõ :á~ôžo〢¬ØÞyû2xçù׌”ÕnDýÓJTӥ̅ø™µ6Ñð‡ÌÊúýÂ?­p@`Šïþ&‚úͰþ¿÷ÊW=¥èÆñ˾V!ß=zûý*1rP›]Žœ=XÓéÌÅHÙ›å§HŒƒ,ZïㆠeÙ {@éɤm²r½r{Kô8žp¯¤O9vpjΑŸíHäk¢Õ|?ªf´dÈÊç9äzŸ­`éQ²êPär3Ÿûä×£—Ùâ)µÝ1ÅF½)8ö:Z(¢¿G<€¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯Bðügÿ¯ƒÿ ­yíwþuA¸f8á¿ô¯?2W£dLα•]pFA¬Iãš –Æ6ãWà»VM¨®ì*„–ywùl¡Gzò)Þ2³2(GòõåZyTQ®\±ã:ÙêMt°§ž”ô!sÔÐÌŠ@‘Þš[>ÿJ[Œ^ry$SÈËñØTjÛ¸Î()ò°W;_6Ve*0*Ãdô¨âuXÕKdŽõ `3È5”„FU‰©ëLó[ c©ÅXŽ&sŽÔ›²Ô #ƒpô©Ö5^€S€À–¹Ü›€RÑE (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ŠõGðþb¥¨§ÿTæ)tù¿ÔóÞ™>oõü÷¥Ðg˜|iÿ‘3þß—ÿEË_59Ûë_Jüiÿ‘3þß—ÿEË_3¿ßo­{8÷Xú¿ÐäÄg§xG&KÃqÈÿ¶±×ÓÕòÿƒœÊg‘¾óOã,uõc™ÿ>ˆxµêCv7ZN¸Îcn1œñéƒüÐÔà¨nÆëI×ÌmÆ3ž=0‘ú˜tç"ÓN3×ÚT/nåŠê!Š)$‘ÿy!@• 9ûÃÓ¿4bÓ gà¯îׂ1Ž=01ù §ÈB†bÀ($œëšÇÑuQ} ‰!6×V‚âÞXÜñá0J”]¹1Û «ZԲàê3@»¦KiZ5#ï0S­);n S™¼Ö,ôä†ÞÏU¼ž%Œíx£·1*©U{…–‚M-¾¯!»¶ŽëR½¶K…-Ž–aÁ ’¬ÄŒŽIÅr ªË,6pjXÞ%µŸÙB ™q- ‘G¯õ­+o]éR0m.Š8£_µ?Ê«1œŽOzçxÜ:_¦ßV­}´=#MÉb¿f¸³;ù ƒ¹‹o»ÇRzU½ÃÖ¹oÝÞßi÷÷7q,QÉ}+@¡‹^2 g¿œõ•¬x«WÓZšY--M½Ü¶öw:lÇÏòãvmט#rÁD… ¹x(Xo)+£&švg}¸g °kÏ¥ñ–¿öÝ6ÎßJ·šå|ëmF'Ý™v°Ìè¹8U&ܶ\dG4-›ÿ j·ZÚ…æ¡òG´ˆ†•=„‘ƒŸ™’gf*q€Ø*Ã’(GGE5>èÍ:€ (¢€ (¢€ (¢€ ªÿëßðþUjª¿ú÷ü?•&4Lµ›uÿ!¨?ëÞý¥ZKY·_òƒþ½çÿÚT!3Öÿægÿ¯X?özÓÖÈÿ„âÄ“ösÏýü¬Íoþfúõƒÿg¨¾!ÊÖú²HŒU…º`ÿÀÛüj,Ý©+üiÅÊj=ίÈ£ šá4ÿÓ˼MàgæÎ?@¿JÔ>8Óvæ!¹» ·õ_­~{*5µBXZ‘v±oÅ7bÞÁbÝó>xú®0Ü69⥽»ŸW»i¤ç9ÂäqÿÖz×ÃwSàìÛ»¾GøÖðQ¦½ç©ÛN1£ Iêd™³Ö¯Ù$#­t¶ž·E tûÛÓ&­øFì6¢íブ?Ö»ðÜ­êeSOdrLüði»=+KRÐç°>båâõãŽÞµ•×½w«4T%«¢Ö›K‰z#\O†P%[¿?Í«¸°;L‡ÓÉøVt%lg9ÿК´šåûjÏÑ©áþŒàöÇþÍYú†‘6¡­LëÄco?ðïW¼$?s?§Í«AxšO|sYâ´ÀCúîpÊ£§ZMéáÄýw?îŸñª—šDöÊYõOñ®”Š\“ÇQõ¯Å0X‰&yü®G<ÔñO›qíZz摉üèø<8²b´XÎÓ'_öj£zœe’l÷ª²HMOqm$*X|Ëê1U‚úVÑHÑ%bI5“*¼7lѧŽÃÒ»=?C–ãæ+…õÿ&´°™ß,}ÿMb£Mè/¬B:3‡MRíWÏ¿úUk«ë»ˆÊ“…'ÐWquá@˜~côÿ®~ïHxX†\`×T3)ONb¡V”ÝÒ3•z;mÍÒ´ítàÅsß·ù5ÊåªVa nHÈ·³wo—8ÿ>õ›¨xz;3%ÚÉÊãØzûסÃb‘ ãþ5‘âk%Mê`y0?àK_I–áaN¬·º:(Þ t¢¾ÜÔ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+¿ðDBmáCpô®½ÀòŸþ¾þ‚µçæO÷$Ïc£‚à(±ùÓåRÑ0Hª÷1¸•%L’J±—È(Wë^½îbgÛÙB$ÈÏB)²Z:ܪÇÈÇZÕwªö²¸GN2ÂÙ%Xž•JÚ’4lø`zVärïy#èGJ‡û:&—Ì|ï''Þ´f®¤;”d‡¸Î{Šb»¨=sZ¯:à ¸î+:X¤!ÛåÏjq©Ì±°ÅL,Q“<ƒØSQBþîqZ¥DæÖÂ)Çlþj³ô«x¥¢²m½À(¢Š@QEQEQEQEQEQEQEQEQEÿêáüÅKQOþ¨þÌR8éó¨?ç½2:|ßêùïK Ï0øÓÿ"oý¿/þ‹–¾gvÛêkéŸò&úÿ_ý-|Å!c}M{8tþ«WúøŒôÿ¢PzŽýý޾¡¯—ü ”Ï Kcë,uõc™ÿ>ˆxµêCv7ZN¸Îcn1œñéƒüÐÔà¨nÆëI×ÌmÆ3ž=0‘ú˜tç"Öˆ4†Õ•"6öw0”d’ ÅÝå•*A3Ò·)Á'çüâ€±ÈøCÂQè–V±%­’Z%®ÅX–‘™P|( ÅTÝþzƒiS˜#ç¯Ê9ÎzÿßMùŸZ[éan²33ˆÔ36rN:œ€sõè*-Vg·Ò/gˆâHàwSŽáIRÕÐðx¯mbò›ÊÞæFr ;@Ï׊lÚ‰[8¿zgœäíÁ0s‘øšô]WÃ: Dö’œ–ÿS#§^‘Ô~ðì—iXÞ#;í̱F@8Ï9Jò¥—¹;ÝÑÅÅ+ îšûÃ÷NíÂÞ2€;e#cÿ1?hj~\)©êúÕ¼©2Ãy(¶Þlod+bBHê7–ä‚@#Cö–Öº ŸÙ­¢e‰%tB‚ÅFNzÕÏéR‹ŒTN9¾i6dê ½ô°ÎŽö—Ü5ÊÍn¨Ê`x7¶å!ˆGã#ø9ÒôC§\\\Íww:$osuå‡òÓqDÄh‹€]ÎqŸ›’FÖ 09ëFáZ`b–“"—4QI‘œw£pÆhh¤0AäK@Q@Uõïø*µTæeŽVglÓ‚{ ,ÞÀXZͺÿÔõÂý¥SÿhÚ'ß”ø…VÕõ›r§ Á>?(©8µºÓ9oþfúõƒÿgªmÖ}-ÓÿC5s[ÿ™Ÿþ½`ÿÙêÅOøø?õìŸú0ÑOà©þùXoãDóQ!-Ö¯Ù.çèúõš½kWOÆåÏùë_%SH³êÐô? Ø#1ÆBûŸzêåÇ…áÆ hÀuÿö«qÌ+ÁNõ}ãÁĶæîXô¥sMö£&½HNÒæG‡²,јÜe¯Zàïí>ÉxñcŒ~@×r '¸oÞmÕ¤TêÉÿ€Ší§^/s«¤äÒ _•%÷ÛX>‡ñëÿ£´tÙžCpÌÙ#oõ¨¼ ‡þ¨Ûëÿ£»¤ùðÍ£¥ûµŸÈíü!þ®øþÍZŸ9ÿ Ïð+qžÛöjtZ±Ôå´wUÛÆ íŸåYãÜiœUbåVV4:ÒŒQ´ŽØ  rzW‚žº™îPÖÊý‡=ÇøŠää5µ­ßÇ+ˆ#9!Žô5‡# uæ´KSÐÃŨj=&#åÎWÐÔÖ6RM}°}ÓÛÒªG‚A­ý-Ñ'@x$äh©u jIÅ4ÅETÚ£t¥&—n)xÆ+‰FûžcwÜopj–¡f—“·æÿõ{ÕêG)ô¦£fT$âÕ=ñDñNرæ~®)²DRÁ›·ÿ^®ø£iðä ØnÿÐÅIwÍØ˜ÿÐ…}2‹¿$wÒ•—ÌéïpmíN½üÅS×¥[º;¬­ýÿý ªŽ•®%{íù#çê/}„Q&îÕ¯dñ¾Eg®'Žª}<…¶B ÿ’kÇ©>JÊO¡ÙJ»¹±º²ˆxw¤Ÿ™5ØÝi:ã9ŒñŒçLä~†§+6çUÓ%¶–1¨Ùè@tÁãß#óèjQ¬éxÿŸýÿ_ñ¯8é¹z±uËÿ±Ky®¢„E$Œm-Ìò’5@ŒHùÎp?J¹ý³¥ÿÐJÏþÿ¯øÕ B]'Pts«Ã *+„ƒ‚AÎs÷Gå@›2ü'âEÕìtû˜þܰÜYù¯ Ö¥|¦ÛmB#Më‡ 0lq[šÍÄo¡j*7Ÿôi€û­ßÇôõÌÑ­´M%!1êpe ª4Ñ*Ƽp¡xtw8íWu=BÂçJ»‚-Bͤ’Du%Hø¡‰hgk¨¤!Æ%9*ryúVxñv…m¨({ÖeY¹x –Dû˜?2©^¾õ.¹um«i·vèÍÒÁ$Q¿Ú-¾RÀŒŸÞ~µÂCá©ä·šIÄQH¡[Ër°"L}3ØÖU%8´¢®tÒ)½WOøs×ÍÊœŽ>¹²´‹EÖ®.u Fæô^ÚßÍ·Šòh"‰#ˆƒD¬nM’|á‹ ?¸UFoÃèÆ‰¡ÜE©ÞYC,× *À.‘üµÚ£‚FNÒxõ­Û¨<+{¡tš-Åì|›‰–'’=§+µ#’0zš×SZún¥âGSšÖÚ{\é—×vWÚu×’±o…oíœyÒ3nY”å–"1÷yÂܰ¸Ôm¼ðåt±“Ê–ñ¼R\41Ê¿`•ˆvUc€Ãå<¨éÖº(¬¼!ä·±ÛhQÝÌâIgT„;°pùf“½U³êê*à¸Ð+XRm-b´À·@ñâ Ø:/ÊJñؑӊ,MÎ& wĉâm^Ý,#¸ÔCÏåZExÒÇéÃåÞbVM$›HRNå »˜™­¼S©­Ö³­%ü¶ZvŠ·7æÎko6D–ñJ¢ÈäÀÀÄ‹+–Ú8Ô]Ãákÿ;퉣\yùó¼áù™ÙÙëþª>¿óÍ?º1*Ÿ «Ù:¶’Á vl y·R»HŒÿ*ÀÇX.`]ëþ#²×m|?»J¹¼žXÚ¾Ï$Q¤rEtßê÷±,­k»ïÁ¶üŸ~µ-u½Jã_;[ žæ{©v7—ö\fCŸ¾ÅÐdü¤ÃpÜ=œ^ÓcŽ->=Ö8å3¢Â"@²(\ÑŠ’»ºàã¥>Ö]Öúúôj–òOxÈ]¤¸CµU¬jz„scûÒ9þ*,6ÇN)j‚ë`:•™>¾zÿ/öΙÿA+?ûþ¿ã@\½EQþÙÓ?è%gÿ×ühþÙÓ?è%gÿ×üh —kÄS]Co#YF’Üír‘»mV8^ù™kGûcLÿ •Ÿýÿ_ñ¬­NúÆyQ£½‚“ƒñÈÎæè:ZÒ›JZŠ[¯‰eÕomí­,™Hæ÷ÍÊùFÑêÙ?võ–¤N猀{~îËómb²ª™"X>cŒdþ÷'€y­9-ÛQ‡Éž)‚V+ŠÛx‰FpÙ­±Œ£¡•4ï©Ïë\×¥¿òj¥ñF nn|¨Wtn›W gç>µ±=öž©¯Ø‰<è-”¹çhù멞 ©—Öò¸n’0HÙÉFQÔú«}ç\$á%$|ó•¨)ù ãýõÿз²¹²Ñãþ=ýëܳôŸúÙß¡ÿÄÑýŸ¤Ð>Ïþýþ&¹e—à¥üßzÿ#½fuµ‘纨¶.Í…={úÿtŸðéóõø…ogéô³ÿ¿Cÿ‰£û?Hÿ }ŸýúüMqË"ˤïy}ëüŽz˜—7vŒUñ.” ßþCoð§ÂK¤cþ>ÿò…lgéô³ÿ¿Cÿ‰£û?Hÿ }ŸýúüMk£•¯/½‘9‰'‰ôÄŒ´w;Üt]Œ3úW u,—73rÍŽþƒêßÙúGýìÿïÐÿâhþÏÒ?ègÿ~‡ÿT²¬ w÷¾õþFÔ±N“¼Qåúl©ŸÍm»öã¾zÔÚ–Ö~ †Êyv^&ìÇ‚zÈOQÇOzô¯ìý#þö÷èñ4géô³ÿ¿Cÿ‰®Èað‘¦é«Ùù¯ò±r”ùÙÌxo]Ó¬#›íW>[6Ü|Œznôâ¹MzoµëOjwÆÛv¶qü t?z—ö~‘ÿ@û?ûô?øš?³ôúÙÿß¡ÿÄÒž :J“½—šÿ!CáQÔ¶ç–A­ë6ëµå8Oð¦Ï¬j÷'÷‘Üa?½Wû?Hÿ }ŸýúüMÙúGýìÿïÐÿâk•åxüßzÿ#_®ÿucæbùÀVôÿõP× {×§géô³ÿ¿Cÿ‰£û?Hÿ }ŸýúüMÙxï}ëüƒëÒì4†æ5a¹ð*ìZŒ)8?t>•ßgéô³ÿ¿Cÿ‰£û?Hÿ }ŸýúüMZ˰6·½÷¯ò&XÙKtb§‰4–P^ëkwýÛ…;þ=þòÿ…lgéô³ÿ¿Cÿ‰£û?Hÿ }ŸýúüMgý“—ÿ{ï_äs9ÜÇÿ„GÿŸÏü†ÿáPÜøL1mŠï$õ;ü+{û?Hÿ }ŸýúüMÙúGýìÿïÐÿâi¬¯Ú_zÿ!ª–w<ß[ºŠë@Kh$ó'Êàâ©ã ­}GPÓ%ÐÞ.Nqòìaü@õÆ+±þÏÒ?ègÿ~‡ÿGö~‘ÿ@û?ûô?øší$cÈ“µ­¿üEˆiÜæÎ¹¥Éam^mtݸymÆOª1ªé]ï‡×Êoð®£û?Hÿ }ŸýúüMÙúGýìÿïÐÿâhtpVŸõò9¥ÉÜäŸQÓ\ý¢?ôÁªÍ†¯¥Z©GÔA^ß¹oð®“û?Hÿ }ŸýúüMÙúGýìÿïÐÿâk à2ùÞñy¬j8Ç• ¯è£ñ0ÿ®/þO]×t˽âÞÞ÷Ì•¶í_-†pÀ÷Ñÿgéô³ÿ¿Cÿ‰£û?Hÿ }ŸýúüMk‡Ã`¨MNœ]Ö»‰Îç”äzÑ‘ë^­ýŸ¤Ð>Ïþýþ&ìý#þö÷èñ5íÿkCùCœòœZ2=kÕ¿³ôúÙÿß¡ÿÄÑýŸ¤Ð>Ïþýþ&íh(sžS‘ëFG­z·ö~‘ÿ@û?ûô?øš?³ôúÙÿß¡ÿÄÑý­åsÊr=hÈõ¯VþÏÒ?ègÿ~‡ÿGö~‘ÿ@û?ûô?øš?µ¡ü¡ÎyNG­µêßÙúGýìÿïÐÿâhþÏÒ?ègÿ~‡ÿGö´?”9Ï)Èõ£#Ö½[û?Hÿ }ŸýúüMÙúGýìÿïÐÿâhþÖ‡ò‡9å9´dz׫géô³ÿ¿Cÿ‰£û?Hÿ }ŸýúüMÚÐþPç<§#ÖŒZõoìý#þö÷èñ4géô³ÿ¿Cÿ‰£ûZÊç”äzסx ìYÿëá¿ô­Oìý#þ|,ÿïÐÿâjÄeµB–ñC’¨0 úb¹ñ8ø×‡"V&R¹x)j°ºL}åüÏøRý©?¼¿™ÿ ó¹ˆ,QUþÔŸÞ_Ìÿ…jOï/æÂÐæ—5_íIýåüÏøQö¤þòþgü(ºÇUµ'÷—ó?áGÚ“ûËùŸð¥tŠ*¿Ú“ûËùŸð£íIýåüÏøSæ@X¢«ý©?¼¿™ÿ >ÔŸÞ_Ìÿ…È Uµ'÷—ó?áGÚ“ûËùŸð£™bНö¤þòþgü(ûRy3þs ,QUþÔŸÞ_Ìÿ…jOï/æÂŽdŠ*¿Ú“ûËùŸð£íIýåüÏøQÌ€±EWûRy3þ}©?¼¿™ÿ 9(ªÿjOï/æµ'÷—ó?áG2Å_íIýåüÏøQö¤þòþgü(æ@X¢«ý©?¼¿™ÿ >ÔŸÞ_Ìÿ…È Uµ'÷—ó?áGÚ“ûËùŸð£™bНö¤þòþgü(ûRy3þs '¦H~Qõ΢ûRy3þÙ'FB($çüñG2¸5¡ÀjÏ­Z\-öœßl‚D5£àÛ¢¸#ÈÎ>룡ÛÜÚ[yw—fâçr3¹`™Táx¹ü€âµÛO;‰Y­éÌ2tÿ¿•$+;倃ŽcÔðr:–ïƒøW\«ÁÂÆÍó\â>4Ș?ëýqÿ|I^5io+YÀFpcR>_jö_Œøo‚9õ?ô +Ítǽ:UžØ”¯˜96ŠÚíaanïô¯VWò7þÛ1ñ%üVÒ˜Ìqϱö+ûÄäóø×®mS?ò'þØÆöZò_†Ó;^×.2Î-íîäòâMÒI±ÐíQÜœqîjx!’ò+{»Ëë››Ö@ßj[¹2¬Ãæ0G–­Ï ´Æ01\9î6IÁϪ[z}|Æ– -ÔMݽSû6©ÿA#ÿ~bÿâi>ͪçþBgžŸ¹‹ÿ‰¬¿_\^ø|%ÓÍ4–ךBH”J•cËíR±çr¶rrk?GñUÕöºlÞ÷L¹ÍõÝ´–VÈDö‘ÄÒ…–Sæ6Tùh>ês"Ý›š3r\ÈõiÎ5 §™Ò }TôÔÉúCÿHmõQÿ1#_&?þ&±4߈:&¬/>Ë'˜m­žñs<¼‰1—ÿX|¯¼œK°óÈ[²ñņ§2Òêöíš@Ö¶ò@Ì‚=…˜¿™å°l_uÉËãV Z—c_ìú¯ýýùÿ‰¤ò5_ú ÿäÿøšÅð÷ŠÒçú[Þ ŸQ’;$dتó<Ñ£y¨£ŒeÉ qäÉ„®¯§œsJìv3¾ÏªÿÐHÿߘÿøš©$ H’1‘äGß8þcZ5CUšH4RhX‰cµÞ„uRGù“{CD¡žG¨†/þ&—ìú¯ý¿ò üM:Ëš$öPÍ-„RHêÀ$“êjøC´ú[ÿß´³…o³ê¿ôÿÈ1ÿñ4}ŸUÿ —þAÿ‰«?ð‡hô ·ÿ¾ð‡hô ·ÿ¾¬ ßgÕè%ÿcÿâhû>«ÿA/üƒÿVáÐ?èoÿ| ?áÐ?èoÿ| 9X¾ÏªÿÐKÿ ÇÿÄÑö}Wþ‚_ù?þ&¬ÿ Ð2ßþøÂ Ð2ßþør°+}ŸUÿ —þAÿ‰£ìú¯ý¿ò üMYÿ„;@ÿ e¿ýð(ÿ„;@ÿ e¿ýð(å`Vû>«ÿA/üƒÿGÙõ_ú äÿøš³ÿvÿ@ËûàQÿvÿ@ËûàQÊÀ­ö}Wþ‚_ù?þ&³ê¿ôÿÈ1ÿñ5gþíþ–ÿ÷À£þíþ–ÿ÷À¥Êû[ìú¯ý¿ò üM'Ùµ^âd}?ÔÇÓþù«_ð‡hô ·ÿ¾ð‡hô ·ÿ¾>YwŒz~¡’J—ÿ½—c˜£%°8þŸãRýŸUÿ —þA‹ÿ‰«?ð‡hô ·ÿ¾ð‡hô ·ÿ¾.F+}ŸUÿ —þ@‹ÿ‰£ìú¯ý¿ò_üMYÿ„;@ÿ e¿ýð(ÿ„;@ÿ e¿ýð(åar·Ùõ_ú ä¿øšH.›ÙsŽHÈdW'wãmGOÓoŒ3O /$26›-®ò-î%a’O1T2% ¹”U˜N£;³êÙÇö‘Ïýpÿ‰ [ꧦ§Ÿ¤1ñ5Ëjþ2¾²Ô¦‡u•Œ‘XÇrš]ò«]^Ê^aåFÑÌWqòÓn„Âo§¡Ï–7·YXãQI¹–Þ$!¤Îæx¶ƒ÷rC6ÀH˜^F¨zjù/þ&³ê£þb_ù/þ&³õ¼~MVÆÚIe7Û=´Š7‡7+ ‘ýà¡ÁÞ îÛ‘ÔŽh-·K§j½´öö× È˜ŠYÌ;pl<àNÜãcgªnZ  ÕOMKÿ EÿÄÐ-õSÓRÎé„üMg\x®8õ‰4«]+P¾»‰mü•*BìA’EÅÄc׃ØfªèÞ/´¿¾ÕsuæÚ$‰4rm –Ö†ÖD’–ÚUK3cwÌI«œiséäEÿÄÖ.¡ãXtäÝyc{g$;¥žÖhã’FˆA<¡IvŒ›wæ'*AP0½gâx.5±›O¼³•¥6íö/jL#2ùM±ÎIˆy›¹\p[wÊ @¹ö}Wþ‚ù/þ&#UÁ?Ú|úaÿY×/uidûS£C-œ:»ãl‚;‰® +ã+D;äå³ÍKÿÚÇquce›Qµº†/ M¦U71Ã&Ð’ûÁ0§$qÃ`Ô‹ÈÕè'ϧ‘ÿGÙõ^?âe×þ˜GÿÄÖD¾;Òmõ¸4{ð]»E©$Ðæ)d V6MûØå“æEeÉå°7$»‡K¹Ò´‹«»;ëÃo†€›¤ò¦rÑþôm Ä2$Ú@$cwÔ ï³ê§¦¥Ï§‘ÿGÙõ\ãûKÿ EÿÄÕ}V÷PþÖ²Òt×¶‚k‹ynZk˜Zu D»NI”Ùà)9Ȭþ!‘üg¯Cq5Ôó!Þ–âR›¤~›–0åÏÝÈCÊrA¨?gÕè$}ÔGÿÄÑö}Wþ‚_ù?þ&©x_\þÚ¶½?j³¼w_gû]Ïû´“*76Üy…OÌ~áb¢Üob<¾"o»œ©¨O‘ªšŸþA‹ÿ‰£ÈÕè%ÿ#ÿâjŸ†uÏí«[Ò×vw‚Îëìÿk²âÿw™PY¶ãÌÚ~c’§§A¹‚:õ¥v3?ÈÕè%ÿ#ÿâhò5_ú äÿøšÐ¢‹°3üWþ‚_ù?þ&#Uÿ —þ@ÿ‰­ (»?ÈÕè%ÿ#ÿâhò5_ú äÿøšÐ¢‹°3üWþ‚_ù?þ&#Uÿ —þ@ÿ‰­ (»?ÈÕè%ÿ#ÿâhò5_ú äÿøšÐ¢‹°3üWþ‚_ù?þ&#Uÿ —þ@ÿ‰­ (»?ÈÕè%ÿ#ÿâhò5_ú äÿøšÐ¢‹°3üWþ‚_ù?þ&#Uÿ —þ@ÿ‰­ (»<[ꧦ¤ïÄ|ã´5VÆ5<çþ˜ÅÿÄÖn¬©øŽ 2I®¡µŠÑîXEq$ 3—URŒŒ‚û†@X² ˆ%°¶Ð/4¹t´{x%»[yl¡‘ŒNެ19Ø6¶ÙX¨jHÄŸ˜7›S5¥O°ŽüÏî-AµÌlù¯ý¿òüMgÕsí#ŸO"?þ&“RÔ&´Ô4x# ¶öí­åi,A,™#tKŸlþ:¦¿,wk­¥hö¶S­¬“j‘—LѬ»Ty‘…z’IÝ€6å½=Y™¯ö}Wþ‚}ñþ¦/þ&ƒ¨:êxÿ¶1ñ5NóÄ–‰so•íÄq_%¦ ±Ê${máÑU9 fòÓ‘Æ[ JçCâ=b{Hg†ÖÙÿµ×Feܤ-+FÒÀ…0ä8á$ Q ¨¦ßUOöÆ/þ&#UóÿÈóÿŽ×+wâíb¯”NÊ.ã¶¶²òñ$…L˘Æ‰0뼃þ­êÌ Õ$hl£¿´{Ë«‘n†]"âÐÛ*Y7¼RK¹Õ„EAFwrÛJÑfDmµa×R8õò#ÿâiÁq´WWד£È–ö»ùjT3î«€]2OÌ0 Ìy®qý¥Ï§‘ÿGÙõ_ú ÿä¿øšËµñ¥ä¡­í/[Oó ‡û@Ä!æHÚ1´¿™óyÑ®v`ç€M\¼¼Ô.uyt­)í­å‚îfšæ™JÈÎ¨ŠŠÈI>[’K ¸ ¸í5ÇÙõP2u">°F?öZ>ϪÿÐKÛýD_üMg¥îµ{wq.ž_Nt†á§…ÇÚ¥1¤„!VýÒíuäù‡$ñ„ùðí|s¨j_5’˜.Rѳnó^dÛ> ûB¾’);r]˜gÙõSø™é„üMF«ÿA/üÿ\ž‡â­gR–ÎKé­l ¹KVMúEÁŽa$1;m¸ßå©2;ƹäÉ"»5M>-J-:KûT¾•<Èí^UºóÈBrGÊß‘¤À‹ìú¯ýý¿ÔEÿÄÑö}Wþ‚]³þ¢?þ&¹Û¯êÐkzÞž–‘>ÙÓJeÎn q9`çÏ…ä$S|µ%—ŽìÖßÃñj~\Wz­¥¼û£– ¢I@Ìži¾\„`É<1˜ÞF«ÿA?üÿGÙõ\ãûO‘ÿLbÿâkׯö—Ösͦê‹~Éj'1ž9$Ž=ÿ# ¢Ü Àë‹§Œ,4¨.¥ž9 [^-›†¸‚]¡YAVšER6¸s‘À f‹04¾ªzjYÿ¶ÿñ4y¯ý¿òüMrVÞ5i•?kÏ8è¢} †¬£±_Ú:ƒÚĨ–qLYˆÝ^=€(ÞU‘0dÞ~\†`Ì‹ÃÃ4—i­êk©I+»Þ˜C$HɴųiEÎÝß/^N~|oøŒµïŽéåÿÆ—þ¯ŒÄÞûŸúz“üi¼ºóóðcö•?“ñ>…Ó´];R°‘J5¶›§GghÄ+0Ü IÆ2«€„clÃjè>Ó8ȇ¥|²Þ:ñÿÌZøÿÛËÿ"øïÄLàk_àSÿ'—S[Õ_s´©ü¿‰õ?Ú£õ5Zí!½³½·‘±ñ˜ŽN`xï÷ºWÌMã¯('ûZûK—ÿ_øN|Doí{ïü ñ¢9m7¯µ_si7öé›}SU¶·Žia/–¡w›§]Øï,ã>™â¤þÚÕüÃôÿü þ5_0øˆ©?Ú×ßO´¿øÓ‡Ž<ñ8þÖ¾ÿÀ§ÿxñ¿ˆÉÿ½ïþ¿øÓú„ççàÁ΢Þ?‰ôçöÖ­ÿ@ý?ÿÿQý·«Ð?OÿÀÇÿãUòúøïÄLûµo¹þ^Ÿüiÿðœø‹ò½ãÒæOñ£êÿŸ¿ƒ´Ÿòþ'Ó¿Ûz·ýôÿü þ5GöÖ­ÿ@ý?ÿÿWÌIãŸ>Oöµèÿ·™?Æ•|qâ&ò½öó'øÒú„?çêû˜{Iÿ)ôçöÖ­ÿ@ý?ÿÿQýµ«Ð?OÿÀÇÿãUóü'>#Ïü…ïð%ÿÆœ|qâ0p5{Þ?éæOþ*…ƒvUÒËøŸNmjßôÓÿð1ÿøÕÛZ·ýì?ð1ÿøÕ|Ä|sâ=¤ZôÿÛËÿðœxˆÌ^÷ÿ_üi¼¾ þ^¯¹ÚOùéßí½[þöøÿüjí½Wþ|4ÿü þ5_0ÿÂsâ>Oö½ïôòÿãBøëÄlÄ ^øcþž_ühX?ùz¾æ'Rkìþ'ÓßÛZ·ýôÿü þ5PÜ\ßjA!º‚ÖVXåfŠv‘ŽÆÜ09Z(Æ'”äÙa–!@¯Ÿ¿á9ñ?ñ6¾ãþždÿ޼D?Ú×ßø'øÔ<²+þ^¯¹ÛKùé=>Â;Én俸¼¹–Þ+w–p€•åe8EQŸÞ‘À…ã©4#ð¾™—³]fâx®.¼2]=ÐÇËÓ|¬_”ü×ÏGÇž#?Ú×ßøÿãN8ñò½ÿÀ—ÿ¥•'µOÁ‰×’Þ'ÑÇG±:Dºw™0G¹{¡ #tr´ÆpËÆ>Y@ Œ(rÏìK6´½†[›‰$¼ž+©'b¡ÖhÖ ’ ªaGÆÝ»³AÛ_9ÿÂuâ"¥¿µ¯xÿ§—ÿ?á9ñp5kßü ñªy=¿åçàıdú#LÐ-´íZMQõÛËÙ|ß2[‘Íæ,*xDQÀ·Œ ç®x‹J𾛣à ÚOr²Bјº— °Å C…«$)¸Éä`ª•ù÷þŸƒÿ!{ïü ñ¥ÿ„ãÄgþb÷¿øÿãKû%ÏÅ÷1ûy)ô6© Ûj—÷72j‘Ewl–—vÑÄw)sµ‹!a‘+Œ«)烞jŽ¥áHdÒõh´ÛÙ¡¸¾¶º…Õò¦2´Î¡þRB«Ï!pppwcà­ã¯ù‹^ÿàKÿ ã¯#ûZûúyñ©þËüüü{y/â{íç„,u(¥ާ¨]ÜH¦6¹sɰÃ4A@T òç$d©õ= eŽòëNºhu6ïmÊ”K²›eÈÚ~L`ž Ï·óàñ׈ʓý¯{Çý<¿øÒÂuâ/ú _àKÿWöRµý¢û˜*Ó{Gñ>ˆƒA·²¿¶¹Óµ Ë(൷´ûО´}¡=kå³ã¯Æ­{ÿ/þ4ïøMüEÿA{ßü ñ£ûþž~ >²ÿ”úí ëIö„õ¯—Ž|Gù ßàKÿÇ>#?ó½ÿÀ—ÿ_Øÿôñ}Ì>°ÿ”ú“í ëGÚÖ¾\8ñ\ÿkÞûxñ¡|qâ6ÏüMïGý¼¿øÔ¼ª)ÛÚ~ j¼žÑ>£ûBzŠO´'¨¯–ÿá:ñqý­{ÿ/þ4áã—Ûý¯}õûLŸãCÊ£ÿ???m?å>¢ûDÞ¿hOZùhxëÄgwüMï¾_úyñ¥_x‰Æ¯z1×ý%ùýiÿeF×ö‹îaí§ü¿‰õ'ÚÖ´'­|¶Þ9ñÿÌZôÿÛÌŸã@ñψüÅï¿ð&Oñ¡e1òñ}ÌN¼—Ù>£ûBzŠ>Ñ÷…|¸|sâ5ÿ˜½÷þÉþ4xŒ®µï¿ð&Oñ£û%/ùx¾æÞ_Ê}%©éðê3[ÜG}seuxÒâØ!;ie!Õ—¢àŸ”`€H0Zi²µå½ö«©½äð$Q$)ÈU“r¯/¬À†‘†X/ÎcÇ>#9ÿ‰½èÿ·—ÿ?á:ñà?µ¯ð&Oñ¬^EBSU—2ëmJUê[áüO¥5{µu´a}ug5¤þ|3Aå– ±ÓÌVR6ÈßÃøŠ¡ªxrßR³¸·þÖÔ-…Ü Ö€C›±³fç „+Ád H 9 »~zÿ„ëÄC®­}ÿ/þ4¿ðœx‹ê÷ÇþÞ_ük줿åçàÉöÒþ_ÄúkS‚×TÓ®,¦ye\ãaʺ×S†Vì@8â¨Ýè:UÚ̘x‘¬ÖÒˆ*‹ERYZŒ#°ñÞ(ÿ¸ ùÏþîñ7¾ÿÀ™?ÆxçÄEsý­{ÿ2/ì¥ÿ?Þ_Ê}4 xekÛãn%šx­V@‹²‡HŽ Hù²u| çaJÆ|;níö™u[ùuth¯ÙaDHªDb2šQÊûÃÜ.ßžá;ñqý­|?íêOñ¥ÿ„ãÄxÿ½÷þ¿øÑý—ÿ/?5VOìŸ@¿…t׉£[ÛèÒæ6ŠÿkFMò3»°rPìËK)&=Ÿ|ã¢ãKR°Pš ˜¯î¬®àW'·ØÄ£í.…dW\ˆsŒ£çæÃãŸÝý¯}ÿ/þ4Âsâ,È^ûÿ_üifEíSð`êÍ}ŸÄú"i–XÛâ¶k›[•Mû¶qA9ÊâÎrO<ŒñkQ°†öu¹·½ºÓîÂùmqj#,ñç!H¬¤I\¶ÜÁ¾l>;ñqý­}ÿR/ü'#Àÿ‰½÷þÉþ4ÿ²ãÿ?ÜÃÛIýŸÄú.m)[rjÚŒ**ÞvŽ?¶aBî|/Êäqº=Œr6¦,Xéš^q4–ð p³Æ›T °,ò ˆMÌ:>mÿ„ãÄdãû^ûúyñ¦ŸxˆuÕ¯Oý¼¿øÔfÃþ~~ =¬ÿ—ñ>†¶ðå•¥½…ªj:ƒXÙ¬Z;¡I¾[·p Ƈʹ\íù›vø¸Œr@>œ×ËGÇ^#ó¾ÿÀ©?Æ•¼qâ1·þ&÷§?ôòÿãOû6j¯¹TŸòþ'ÒÖö6×·7{|É'ºA¤÷N!Xr‡/ȸõù›±ãßÂ6Z[[jZ„6°5¬¯n¦"³ÉoåˆÙÉBÀâÁT¹à“Ÿ7ñÎ5{ßüñ¤_x‰˜«_qërçúвØ?ùyø0ö³þ_Äú¼1¥=2×ϺL´¶Îw.Ö…ÖO»‚êÖñ‘‘ƒ‚#ŠŠ Ão4—q뺠Ԥ•ÝﱚÊÉ2mòö"¹Ûœ¯\1óùñψÇüÅï ™?Æ“þ¿€?âo}Ïý=Iþ4¿³¡·µ_sk?åüO{ƒÂ6U„ãNo´\‹-"Žü«@ù†Þ!æ¹+‹hò=ߎF7,í`ÓôTÓmnfM±lûI*Ò³œî•‰g$—$ŽX’G&¾h>:ñÇüMï¿ð*Oñ£þ¯–Çö½÷þIþ5K,‹Ú§àÄêÏùèoøGíÞCs.­¨I©FŽüˆ|ØÂ‰¢1I¥d'÷ÎBí·k¥Áiäw÷0‹Ê¸i_í@3²ïÊü»ZIì6ÜmœÇ#R£û^ôîÿ§—ÿCãŒÄÞøçÖåÿÆ“ËbOÁ‚«6¾Äú“í1qô¥ûL~¦¾ZxÚ׿…ËëJ#$ÿÄÞ÷úyñ¤9ñù ÞÿàLŸãIe°òóðcö³þ_Äú›í1ûÑö˜ýM|¶:ñÿjÞóÿO/þ4£Ç""ÿ ½÷þIþ4ã¯(ûZøçþžŸüj¿³ µö‹îdûi/â}Mö˜ýMiÔ×Ë?ðøˆcµ÷?ôôÿãCxëÄCþb×¼ÿÓËÿ -„µU?ÚËøŸS}¦?SA¸LqšùdøëÄCþb×çþÞŸüi[Ç>" öµñÏý<¿øÒylü¼üÕJìþ'ÔhOZ_´'­|´|sâ!ø›^óÿO/þ4Âuâ,ãûZ÷ÿ_üigSÿŸ¿ƒiSùêO´&zþ"£ó¼ãÜçáBq»Ϫó_0x‹8½ïLÿÇËÿ ñψÊþ×½àãi“¯çGöu?ùûø0ö“þ_Äö‹l‚` ùæC×äoº=+‹Ò¯"M"ÉJÍ•‚0p§tWâ[R…­ïog¸Xae™™AÇ\ï^©¡\G‡ôÔ0+µˆd…çäÕ÷J…tù®õèta!')JK±ÿÙbitpim-1.0.7+dfsg1/help/menu-detectphone.png0000644001616600161660000000735510274564072017072 0ustar amuamu‰PNG  IHDR˜ÜŒ h[ pHYsê꣊cqŸIDATxœípåÇ·Šùy$€L)Å¢­”ú£ZiiEèh««¨$ˆ´¦…HHPÇ’øk,¡V¸­'QŽpÓN§ŒCÇNËcƒ‚Ð@)´*t12 2ŒZ†§¤'ÇæÙwßÝ{ßÝ÷™grû¾ïî¾y÷³ï¾w·ûžuNÍiB t…uîÜOЖu÷Ç„@h ëÖƒ„@h‹ÏLÜI„®°ºßÛKcjÚC‰î÷ö"²< ‚!27 Â|Áˆ‚–e…_‘`"Áìý fYÖYfcÚ·›\úàqûs«CFæ§S!˜×† Z°ÀT® Æõl©E=žWÁìi\ï&›¦J0™}»½V)˜¨~® ÆÉâÔc©¼Dʤ9pÙmz=¸NO¶lº‚q!S‡0{a_=XØ‚É4²S9‚‰êãv°½ÖÁ©^2u€`’é%]E£zéÁœòu &[oæÒ aæw¿:$÷R‡ŒL4sä§æûLtisÊwZV1¸u‰ÛGP‚9ÕÁé”\®‚éŽ ÿÑ\Ž ¥‚`9 ‘µÁ ‘¹Áz#"JÄc„’°c9eàN¸O{0Ò…íÁºßÛ Á€ñ?ȇ`@ h%Ñw¶S׿wÒá®Ýtôð3³,+ð}¹OÕ˜Z÷DUÀ 6gÖMZù²ƒõdš(_´ž×†5I0"ç¶ 2J°_¼úÐ?hÙ+XóŸÂÿ$d¬`Ë7ïƒ`@ ¬`OoùJ`[Ùþ6J`ûÞC (,™@º°‚=ùê“ (ì–ú ö£OˆÌ WÁÚþyO¿‚ølõžJ”À öLçL”À ÖòÖ4”À öøe (ìáöÉ (ìþÍ7B0 V°š?^Á€XÁî~åZ–a˜r7®V°;~?^¹`N·<ƒþÈ>Ee_Ç˶ý¬ëV°òß^ ÁBÂËSTnù¢§Š¼l;XÁ®_õu-‚¥þå^Ë>¿—­bÊ>v—ZÖëSVnÇA5¬`_yð’@“y4 ‚©y²ÛÁtÏMÁ}¢q‡©—©Æ«`Ü2×–Nc¹ ÚÓÁDë@0=Þf­`Ée™‡H½6l¦¿‘ä«zð–ô«ÄÁR—U •i‚ûdwÖr´Á€V Ð Z`@+ h‚­@°,ÁÔã¸`¢ÇÌA\¹µ•×¶ ê8*„rÇ©üæw[* L0™²ŸMNg7ÁF6 ú?œz4QçE:]!˜“0^Ó3¯m$:鼤é$#•Édü´‘}ÙÞë{Ë©‚„ Áü¤éĈA¾ßKa6É•Äk‰ÖË©A~êÝôneSó³·6J¾¶¯ÃmÇë>T¸`^+ç'˜Z1Z0ù°‚-_·‚%$â1*¿s6U.h¤ÆèÓ´¤µ ?ÄÔ‘ˆÇ¨¥¥…6lØ@»wï¦ÞÞ^²NŸ> Á€ñ-[¶ŒÚÚÚh×®]ÔÓÓCÖ©Sÿ…`@ ‰xŒš››iýú8uvþŽû€¬O>ù‚%$â1ŠF£¯£;wPw÷ûd}ôÑI–a˜ú{"£¥K—ÐË/¿Do½µŽ=BÖÉ“*Ìéqx¯ÛÈÜfÅqZGvÛ~ÖóK"ë?ÓÏɓǵ&Zö³lDvò™|Ù¹)t’쥗ÖÐöí[éÈ‘CdY–¨`¢‰Oìg±ì¤)™ˆÛôM2s§¹m/,ÁÖ®]CÛ¶uБ#]d8ÑZæ¥Á²a&T¼Î&šæJ´½ çY;#ØjzóÍ:|ø ¾L¦§²÷Vör¢õrM0n™k'ƒì¬øðÃcÚ{0§tÑ™šm=–‚Él/ Á^|q½ñÆë}ÇóøñŒ,5-Û/‘Dúg8”ÉSIR°5k^ ­[ÛéСÁ òíy2úÔtnÝlAtióÒ››&XGG;uu «··´%$â1züñ&Z³¦•::^£®®ýdõô¼Á€’‚­^ÝJ[èàÁwÉêé9 Á€ú[D«W?ÿÁÞ!«ûýÿ@0 „D‚ _‚à´Á€VXÁæ¬x‚%°‚ÕüzJ`›÷ì (lf‚5°‚}ïÇe (lôÕcÌÔ) 3uNÓ`»xÜå‚9Í?äA”¿b©ƒ캆 -‚qËAL™ýA0u°‚Í~ö§ æ6ƒ´Ó,Ò2åEõõªÙ4{u˜°‚ÕþêÞÐz0Õé¢zäÊüûa’,yrööö’Uý”ÁdÆ`éæ6ϼ}}¦ŸD¼ï–é 6œ96U+õ÷`Néªz0™z@0ý¤^"?lêªÆŒ =˜°‚ÝÿüÂÐK¾–½¤:•·—MÍ÷ÒbïV°†Uà“| v vOn×j`ßE6¾ð Jào×yz6J`›Vù ”À 6nÜT”À VÞtJ`ûàÄ› (ìĉ½ìº„L¸ vôÐŽ~ð+Øß;Á€XÁ6ýæ)”À Öº¢‚%°‚-i¼‚%°‚Í­¸á,ÁÆÔ´#žB(XùÄ  ‘V»êÒ1 ‘V» ô³9)X.ý¯A´¥£`ƒ‹†(ÌŽî.Zש., ÁÎ/-Ñ"˜Wyt Æ-C°€;Aý»Hn;öÞƒëQdÒ¸t§rn‚ÉnßOù\Š$üì[W*˜è€ËŠ!³?¯ÛQžK!ìÜȈÀãzQ¯ *'#˜}ªsÚG®„P0«ð‚P{0·îeÛ²åU ö;„‚Eò¿è ßë”9 & –‹Â…"X*¢|.]¶W6]ÁDÛ÷R>—B(XIAn~ЊP.=ØH†H+8Á>}²;rÞ(†H+ì‚Y–u¦+-(…`ˆ´"U°ää'g+Ái…P°HÁ0ÜÑ ”À^"#…C P/z0 ö]dIAÿ,ì§…™N‚ù µpP¿‚ø¬´‚5@0 ÁJ!P+Xqjp —H ´Á€VXÁðUPE"Î}Ù­I0™ßsL-ëe˜I²;û»È¢Êó*„ÊŒÌégûì?½ÇýŸ¨WýÊ.~š/’—ȳïh-Ê×~‰LM³—¥Ë–K÷—q¾ìÖÿA«S„`,8ØKdižþûÁÜz]‚¥.C4ýú.2‚¤³¾SP ÿ9˜†ï"eã\:·,#’Ó¥½WpðŸä«6*²ú«"ôVáÃ_"ó.Ê Á@ø°‚ * Á€XÁÎÇ—Ý@¬`E‘ÏA0 V°üÔÀ Vpþ°ÐÞDdOôäJÃ.º”F¿JEÅ4(?BCò"4´¤„ Š)ï¼"ŠÒe£GÒ”kÇÑO&_Oõ·ÑŠrz`Ò½i:EgVR´f5WVÓ峨©|:-˜t3Ý7ñªúò7©úâk¨úâoÓ]#¯¦ò ®¤›¿t}ô•tëå_£©c¯¢iãÇÒ”k®¢ÆŒ¦¯ŽAÅŠ(o@1(¢È¹E4ðœb8 †D#† §‘Ã>O£F|‘.1ŠÆ_~)U]7ž)/£Go¿šfÍ ÇfL£¦Š Z|ç zbö­ù-WEÍuµÔ\_KÑúZj¾w>5ß7Ÿ¢ j©¹¾†¢ók):¯Ž–ÖWõå/¨£æó)Z_CKëæÒ’º9´¤n6-®™IMs¦ÒóʨaF-œ9•TÜFuÓË©~ê-´púº¿l2Ý[6™j§L¢9“o »nü.ýà;ãiÂå£èŠ ‡Ñ¨áCiXI ¢H^„ŠóK(’?ˆ ”ÐÀ¼ÁÉHCè’±£©ú¡Jªy¨ŽªæSuc U7VSMc-Ím¨£ª†:jii1&V®\I7n¤}ûöÑñãÇé¥N¨ÿäIEND®B`‚bitpim-1.0.7+dfsg1/help/bitfling.htd0000644001616600161660000000161610360163373015404 0ustar amuamu#include "pagestart.h"

BitFling is a way for BitPim to run on one machine and your phone to be connected to a different machine, even across the Internet. It uses a protocol over a secure connection to ensure this is safe. BEGIN_TOC TOC_0 TOCITEM_0(Configuring BitFling,bitfling-configure.htm) TOCITEM_0(Configuring BitPim to use BitFling,bitpim-bitfling-configure.htm) TOCITEM_0(Security Considerations,bitfling-security.htm) ENDTOC_0 END_TOC

The technical details are that the BitFling protocol uses URL(http://www.xmlrpc.com/,XML-RPC) over an URL(http://en.wikipedia.org/wiki/Ssh,SSH) connection. The SSH connection is provided by the URL(http://www.lag.net/~robey/paramiko/,Paramiko) library. The only channel present is for BitFling. There is no shell access or port forwarding implemented or permitted. #include "pageend.h" bitpim-1.0.7+dfsg1/help/tab-filesystem.htd0000644001616600161660000000461610547575030016545 0ustar amuamu#include "pagestart.h"

Note that the filesystem view is off by default. You need to turn it on in the view menu. This functionality is suitable for expert users only. SCREENSHOT(screen-filesystem.png,)

Note: You can cause damage to your phone in the filesystem view if you make any changes. Be very careful. (BitPim itself doesn't damage anything - it is just that the phone really cares about the contents and existence of some of those files, and deleting or changing them could upset it).

Some files don't have a date which is why none is displayed.

Menus

TABLE SCREENSHOT(screen-filesysdirmenu.png,Directory menu) Right clicking on a directory brings up this menu. Choosing New File will place the file of your choice in this directory. It will have the same name as your source file.

Filesystem backup and restore functionality is only suitable for expert users who understand what they are doing. You can easily make your phone inoperative by restoring inappropriate files.

Backing up the directory will result in a zip file of only the contents of this directory (ie subdirectories will be ignored). You can include all subdirectories by backing up the entire tree.

Restore will let you select a zip file whose contents will be placed below this directory. You will get a dialog box showing you what files will be restored and what their names will be. You will be able to choose to only restore some files.

Refresh will get the contents of the directory from the phone again. You can also close the directory and reopen to refresh the contents.

Delete will delete this directory, all the files within it, and all subdirectories. Use it with caution, and it would be prudent to make a backup first. SCREENSHOT(screen-filesysfilemenu.png,File menu) Right clicking on a file brings up this menu. Save will let you save the file onto your computer. Hexdump will show you the contents of the file like this. Overwrite will let you select a file on your computer and then replace the contents of the file on the phone with the contents of the file you selected. #include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-lgvx8100.htd0000644001616600161660000000206710360163373016207 0ustar amuamu#include "pagestart.h"

What works

Phonebook, wallpaper (including camera), ringers, filesystem, calender, call history, SMS & Memo (Note: Videos are currently ignored.) The Memo feature on the phone is limited, it does not support a subject or a category. The SMS feature in BitPim does not support pictures or sounds in messages. If a message contains one of these it will be silently ignored and only the text part of the message will be shown. BitPim can autodetect this phone if it is connected to the PC via USB. BitPim can make use of ringtone & wallpaper files stored on the miniSD card, see section Howtos for more details.

FAQs and support

If you know of a good support group, please let us know so we can add details here.

Contents

BEGIN_TOC TOC_0 TOCITEM_0(Cables,phone-lgvx8100-cables.htm) TOCITEM_0(Notes,phone-lgvx8100-notes.htm) TOCITEM_0(Howtos,phone-lgvx8100-howtos.htm) ENDTOC_0 END_TOC #include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-lgvx8600-cables.htd0000644001616600161660000000022610547564173017450 0ustar amuamu#include "pagestart.h"

This phone was successfully tested with a USB data cable as part of the Verzion Music Essential Kit. #include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-motov710-howtos.htd0000644001616600161660000000727310547564173017651 0ustar amuamu#include "pagestart.h"

Create your own ringtones

Since the stock V710 does not support transferring ringtone files directly to the phone, the work-around is to install a "placeholder" ringtone on the phone, and then replace or overwrite its content with your own ringtone. To create your own ringtones, do the following steps:
  1. Install one or more placeholder ringtones. There are many ways to do this. One quick way is to send an existing ringtone to a bogus number or email address. The send will fail, but the message is then saved in the Outbox, which allows you to save that same ringtone to a different name. As long as the saved message is available, you can re-save the same ringtone to many different names.

  2. In BitPim, Menu -> Data -> Get Phone Data ...

  3. From the Get Data from Phone dialog, check on Ringtone and click on OK. BitPim then retrieves the ringtones from the phone.

  4. Switch to the BitPim Ringers view, which should display a list of available ringtones recently retrieved from the phone.

  5. Select a placeholder ringtone, invoke the context menu by right clicking on the selection. From the context menu, select Replace.

  6. From the File Selection dialog, select your custom ringtone file.

  7. Depending on the format of your ringtone file, a Convert Audio File dialog may appear and allow you to convert, cut, and trim your ringtone into an mp3 clip. Click OK when you're satisfied with your clip. (To bypass this step, select Overwrite from the context menu instead).

  8. The content of the placeholder ringtone will then be replaced with your new clip.

  9. Repeat step 6 through 8 for other placeholder ringtones.

  10. When you're ready to send your custom ringtones to the phone, click on Menu -> Data -> Send Phone Data ....

  11. From the Send Data to Phone dialog, select Ringtone and click OK. BitPim then sends the newly "replaced" ringtones to the phone.

Create your own wallpapers

The process of creating your own wallpapers is similar to that of creating custom ringtones. The process would involve installing placeholder pictures, retrieving them from the phone, replacing their contents with your pictures, and sending them back to the phone. To create your own wallpaper, do the following steps:
  1. Install one or more placeholder pictures. Again, there are many ways to do this. One quick way is to take random pictures using the phone camera and optionally rename them as appropriate.

  2. In BitPim, Menu -> Data -> Get Phone Data ...

  3. From the Get Data from Phone dialog, check on Wallpaper and click on OK. BitPim then retrieves the pictures from the phone.

  4. Select a placeholder picture, invoke the context menu and select Replace.

  5. From the File Selection dialog, select your custom picture file.

  6. Depending on the format of your picture file, an Image Preview dialog may appear and allow you to convert, cut, and trim your picture into an JPEG clip. Click OK when you're satisfied with your clip. (To bypass this step, select Overwrite from the context menu instead).

  7. The content of the placeholder picture will then be replaced with your new clip.

  8. Repeat step 6 through 8 for other placeholder pictures.

  9. When you're ready to send your custom pictures to the phone, click on Menu -> Data -> Send Phone Data ....

  10. From the Send Data to Phone dialog, select Wallpaper and click OK. BitPim then sends the newly "replaced" pictures to the phone.

#include "pageend.h"bitpim-1.0.7+dfsg1/help/mm5600usbmenu.png0000755001616600161660000025111110477371324016144 0ustar amuamu‰PNG  IHDRíÝØUbugAMA± üa2tEXtSoftwareXV version 3.10a-jumboFix+Enh of 2005050103Ð IDATx^l¼Ù’%Ir%vŽªšû½7"r«}émt7¦{d áöÆ>Q„Ãà·p^†Ëg„B g„ƒÆR½7º«º¶Ìª\"â^w3Õÿ‘YÝ€JJÆ w»æfæjGUªÿäüëÏÞûÚýóãÍî°_OËÅá0ƨªÝn7TEdIa9„òÖÚŠ36€D²“˜â4rÉá-àæîÅ,‰iáîU ³aSÌ­ë§>5€uk«a¦{ÊÌ* @¬3«*3™YÄvÅÌ‚FrYz+›dVUf$ØÚŒ1$TPD|‘XrI‹FréÝP¬¾Žîóؤ‰¤¤1F3'IÒkžHª²¢yÕJÒb/é´.’ZkNjœrí‰Yb‹]BàÂuTóu`MeUhnc Pº´ ^’ƒ’¤H:ɪʾ¶fgïÃjÞÖ§¨›¼Ý‘TUÇa;ŸµÊJ6åQk(wŒÓÚWÜ'U´yªÛîÖtjlk;MÓ2Ž®ÂX­”#ºÓF¹Pa$ÇÚI¼ÈÕéš•\—Ø7•}è4;4.°øBaÓXW„‡r.ËvŠ™Þ|ûÓÞÜ[Ë*·qUÇ·÷xk¾øè¢ùÍRÚï2Ó̪ªªÜ}Œ>×j‹jŠªš÷‡[êÙ‰_.öäF×·ùâ©W ÏO‡O>óþöjÜN?üö×Ûm¼¿o%ó]á俹Îßüò£ïð³ï}+"0˜Ê«jÐ ¬ª"Š€™ T¦ ¥€0º™Ùi¬æ±Š¬ wº+Àt;€ ¼T,R"ÁDŒ  2É—Þ K@…é ~™U%I"Ð:¹,û@ÁXCl»D­ª",SU–¢€xéBXeP†$áì—S@¹$`™2ãP^`"©s?è@(%€Ûó¼6óêvþŒ,$T H¹=^•Ú&¥m…“ð²zÎA1O€ÑûyÀy=¥*læ1+3‘™i(P´!Ìʳu&N§Ó=Ø»óa?>ûàoþbn­ç¨Z«jå‹«e•­µ.ܯßýú7^D{pï­'ëj>ûÀ¤þ0ò~ÞÔ“O×/OœÕÇiw{°*¬Ò"ðs.eüâøñ»Ï¿yšægÙ~ÕõÛšßL·/ü8°¸–ñ0¾øâ[¿ýûïíÚxôþ‹*[‡×ÚúùÓÇÓíÍø­ÝÿÆ'/.¾Ìù“/¿]ÕúníSƒŽ`pï@Ú¦"l)SJr^&`)š™Ñ4ˆ® «y¶ÝIdbN ÇÑËk«%¦ B# ®„˜Zš03C¥.Ÿ²`í€u¶½÷PPtP¬&‰EƒŸNáîUãVŠ’ ^°‚™QRÒjHƒU#çÜÓm­ÈÏÑä(ÃRô© •£ç°¦‰>-•Pº2³æ8ø2jò#«F©Ê«Qˆfc $˜Î~ ²,GÙG]Γ s'à$3KPƒ(Z˜2U}X¡³ª$Í|Z—ÛF:Ñ{L°"ºAéûàÇkb¬‰,}©¡Ùâ8ÀIíæÍ8p|òù‡ÇÀ³þâù“ϰX;Ô-n.ãḾ~0Í®®æ×î÷¿üÛÿøÉÿû¿½ýßýÏÆÓzº½l‡õvJÝke·çíGWo}{9Ýâ4d«Uãî€ÉûÍÍ8.ªšª./ö×ëÊ6ÅñèN‡Gaoìü³KÞŒëÛù¹Z½cÿü÷>ÿOoìž¾ö½ïëá}x¼X¢~çOoÚ¯úɈOßýã÷ZkgÛTµ) î|Ó;z…›uøê•¯JUAĺ¸óå-D,‘!`[ø#iƒÚ»Ï9œ†;ÿµªUU ^yµÿHªª "L¨Úü¿W·PuHQU˜tÞ$€A*·À+WÒPŽ2¤¡:HX1 ›APÚ£êd²ªV3{äU•„úêîDD‡Ž6 ÀïûÓ›p”e ~ç}I23è÷{6³3îþ®ÌLs[3ˆÂ<°·IÕ×~;F-7ñã¿þ{Ïå8N5OÖyoâ›W»÷þó?{çÝo~ð«Ï/.æ{Ó>*ZN^é‘m6íŒìØq¿^ßþôƒo?“ò0Mð½?yö"?ÿðÇëíñbÞ½ñúÛÓ£GOû·ŠêòËÏ×.ó7¦ñþåÕOž<²Û5I¾usóðñßýáøÑ×þô_^¾ý§¯9Ï÷t3ïLqúìäOž?|†Ÿ¾#Å´;®B;èËíÔfµ%6"¤°µ÷˜je)@/µ8ÜÝ+“À¦…‚y`*d•QnÀ;“Z á(€PUR³¹RQ6lJKgµBJiYPUíÝR l~K&An•p£\H;¿!•ùò“)•‘H¹ ;Ý Eª\ƒ¦,½GÉi+$'Í…*÷DaS}ÉŒ¯¶4‡ ¤±P¬ævrÓE’êÎŽ+UPWíd³Årצ$0 À::¤ù«$’tÐ ÑWZòä…;dA.a|Œá`¯ŒëÃ(U%ÂÔ ÄB³è“æžWë·ÜqúâTýXŸ~úd,·§ã—…ùtDÄŠãxûâ­+oŸÿú£Îö‹_ýü¯™an^Š›ù~Œûº¾âþ·_Þ>˜ëã/>ýø·¿¾yòáÎl÷æÕ`~ñÑÓ_ýò—×Ï®ßØáõ~ûøþÏ~òóÆ/¢J·ãâƒ7¼Øß»ÂwñöË/o§‡·O?Û}þóã£o|ÿÏ/¾öÇÔå7¶w”ÓZoOä‚êÍN¥Þû†[yÊÌÜBõß3ÓïîiIÀWº¾‰™A43ƒLy~d„s ÿ`¼’AÉ #‚Œ)™¹ LA„ VI£n\«ÌDÂÌÈóL {I4‘0RéÎy43#\-d"μIa»»Q„Øàùޝ°Å¸cl:mU¥ÊÒZi“ä7ë“)+ òW‹ûrÃTÞ¦aèÙÙç~Ù³™má”I¶é¿lðRªªX_µi–⨫yÑÖÛãüä/O7§O?ùtv»õŽï¦a=-—öÿå_¬»‹Ïnú½\xxwGfôˆ¸Üó~ó)V-7ðX³^$ºµ©ú6’¢-eƒíT¹&º«c ÙîDþBÓÍSü+®ß}°Ï7nó7ŸÝ>ÿìËß½÷wòŸ}ï³õòÑÕîkû?ï6F»þ ½Íu?–¼±Çžy:NëH6€óÎë6i-Yè´2Tæ…ûÙã †T# r8ÜJ€*f&}a¹ —ÕƒÆV“Mèå à02¦QS¨-Êq0dórÚ`Xà~t”^ƒF’Ej7Љnp&Ü!B,À:“¬Á…*ììÜ|ñ‘³¹¬œa5Æ0\ø¬¥k’¹˜=‘i.¸©0—ËTUåeS3A*F+ ¬¤ÉÌÙ}Œ1‡Ž=lõ:NÉìR2î¶&”<´yV¨¤Y™Hªˆ5GZÍóœãv‡$–(CÌV³öÕTˆ‚BG-mÚ!û!ë-å›m¸ü³~ôóŸÝ{ñÙûQö_ÿùüæ÷Óùâôüég÷Q‡÷ÿx,Ïü›_Ùã¦:*±VÉ\ž_ß={~ûɓӵ®ÝÛkŠGsOB4<|tØ]½~Òç×7ǹß^í[¾v±(oóúÐq£aî^Óµá“ë›·vþíwþôÙZŸ~ôGo~ðÃïÿx\âf½ÃçKöáÏ{ÿÍ{ß’´Ñ[¢nžç]ìp™† +70£Ù«mMÔdd2lK 3ì| ™1}6‚ ÝYF£lšQ "ht5¸ä0rã‰msoñ¸ólß­O 0 e 2À@Ã65€ˆ‘c»BÇoÛ¯dNáp¾GnK­„¦.JÂf¦(nCŠˆm“íJÜÀlÌ–àœtS– 1ÌH˜cóCÎ>£% 3«´mœ¨r€„Cn“qã œ€5bë!ËŠ›iQN™UA RÛ˜)ÌÔ~wº:øééé—?ýÙáT÷v‡ïÿà»ßü?üôù’#£Ÿîç—ßûáyœß|ò_Ÿöñþ·õñOv­¢µÖz./n¯¿üð¯~ôøÉGÓ“ÏðßüW[òÕ‰‡÷î}íŸÿXZž=6/Úé׿öößþà×%õÞ£óV1ÆÓ]{œ—ëÊûÏ\®ónúøÁŒ×io?¼xà«jý‡/dzñ–?i“¦}Œq‹ËËËöeËÌýÔ8Nû FdV5s3*È s ™°QQ AM£2Ãæk°zî`Ù§VšÎ–Ž€ÈRvæÔŠæ1H%¥FMwÅ9Ö!pv*°í(ܘ0„€ ˆ°msI”µ4QeÕ1,Da27 çw#$lçÁ1F¸DÁ i)b7û%Ã0F#næA#H#zïÍÌú朰ˆ²\H’1YU–À.‰Æ²s’Ì)$”ˆ ²`„;1Fe&ITFƒYX×Õ£€2rÛR2Ú”ÝÝ1Æ’̬PÖÚè)Ь­€,-;$mO¢ïmÜÃñëÍÎùïõ7ÿá—‡e½¸?ï¯îÿê£ãÞÃß|ò³O?øà»oïõ_þåOxú?¿ûÏþûýâÿþ«j»¾.1/ë^óõuÿèÓÏŸ=þä[433¯íu\]ÌÌG?ûå'Ÿ|ñ›ŠEírþä÷wÿ_®ÇB‹ý~“+Ñ[G1OÌKÕÃúbpÛ&cy–Ó¡Ù´ ;ѶI’¬ªu]ǘ$}5…;pºûÌm@v§a/ÑB†’ÜýG×­5È0 i°;Ýz°;GÙ`~Ç¿b3—[à‚sÜ&‰B;£>èîéøêH¸‘g=Þ2vaÎBiB¶yµÖ^NäNíh4mÄÎ-EѸ—•2‰‹2ÅìU_’!ç &ÔæX„a mØÜ @ï4‘çéT™3’dn©Ì¡¢á•ïûrlöWiµÖ9à4jœ^Á9if´°ê­¸šykîË”(»qÿ*޵>þÉßü_óE­|±þøÇÿƒþÙñæ¦éÿà{ó¡=;Å/~úþàÍ]ßŪœ¦ÉiÛz‘|HæVUcŒÌœÌsíOûñÙóë(œ¦‰ä²,™y<w‡)úu'gµ¶ë’βÓíÊè9ñÃÇÓ“ó]ÿëßÿÏÖë°Cw\W~œè7Ç‹u×öíúÅ ´Ý `eÂæt’ `ð:å hg!‰(¸ €a 휀š¥0Á4l[ZŌù´ÍΛ›ÎÚ}ÝÖ!= +“~—=¸í„FItæîP2䄨ØÓRQ˜J%\{]Ô™OõB!e6TRÁ½R11!ˆ–0(hY&@Ä j`¾jdoÓ–†t…R´H4)ÉëÀnÉÉ# ”aHUe76³ŽZQV˜aÃj°Ì쮥fYL1¬AGU6B£DzIiÈ•Ÿ™ëìV•À‹€1æ¬á9Í[æ ‚)w±N˜ù öèИ3××£ÓO?þ«¿X¾øäÉò„½ïl~öåóŸÿûûè½·ßûÎùÂüµ‹_üêïÞxôÜÞùN!?üù|TGp ŸsÈ-GÞ^×õ©_\ã’§õ¶# ÑF«°¬ÛKæßß}Ðn’O,V$¢à¢ÚPwÈdffÜ@å¼›iU¨3«€03‘/5 ‹Ft¶ú¯äk’á9 |©Çglºëíåg3í+ùOHfVÒý÷i§ÉÑÄЛEa'¤AD&¸Ð<T%ðÒJ¼BúMHn°{×à <$7]®á(XÐ|¤™mäÉÖìe?ç_yþ¼9Ö/×ßȈ„³i™d}c(†™d#ξ Ù"lˆAQZo0h"åÞ$¬ Ì! ,$óü2‹‡Ú½~µÿÞwþøÛßû~—ûÛ:>þå¾þèÏßyí{÷}ý¦íÿ—ÿõ>ÞÞ>‡Ú6øˆ*Àkmnðýþ25Ærµç›¯¿sùÆ7Çoyi>:..§«ûï<ÖÃmM23$uýa†·Ó‹¼j}Y¬àâòâV8<.¼(›ü`fòÀ|Èš—¾NíÞ^†u¼t'æð‰ÃÕýC°pÐiÙW663­ î2&!¢ì¬mUe*ìàŽ¼«Ñ€<¿r/WŸ£YM¡¥' 7¢$7¢DIEèÚ Y_ÍuólÊ[k)˜¡´B]RsÄc³ãE˜²«2ÚDYe©Êš¡Ž%ÍY[Rf󸟲¸q·„¢ª'à´ Ùn`Ae£rÍØš¬)³U7ðQžêÍÖ¨LYj$ÍÜa*VMÈM­Çé [ (š`f6FšNm¸»Y–8ÖN8s¤!¥¬Þšn9WqxÁS ,mr¤i˜ªÐ 9k¦ªnÎüÍÃþýw¿ý<'ì^¿xòŸþíÿþõ×.=¹¿¿ÿþG·Ç÷ïþõéÙm¬-¦Ö‚Ñf‘g>œ§ëïÿà¿È¿f^‡Z¯w~ùÍ‹Ó7ÿè¿°7Ÿ|úœ¸{à§÷Þ~ïòëß;üíBS¢~·´ À0 CWr?Óí~ì¾4?"In‹uZO’bžNöàrû–™ív»¯"Ð?–WÔ2¡¦µ³n™@@†eC½Ò9`S äö‚£×ºõÄ3ÐÉÎzl€xFÇmÌ›|õó&UÅ»¼ã&I˜™mfäŒUàF¼ÂÄWbf3@öU*ö•Pió17{µ=®…Cì04‹ˆX%Á3¼=Ñ ÞH·]ÁÌ$°D3™™aóàÏ"#b¹3=¸™L‹Ä¡Œ„9¶*•—ý·Êb–@9îŪx¹>´ ¬V’¦JžS“èf¶Qø¥mßf&²–¿~þü³ÿëßlÁèͱãø4ÏþùcÆþÙm.™`qÐ8O>CHà Æã~ºÿÚo¼öà€?øä—4ŸÜÂÇRñþôæùg󰃵‡®¾¼ùäG?ÿÑ‹/Î¥‘óœsÂ)¦(ÂŽ5O>YÞ²O½í8©VÒÍóêoÑ>»#žD„ùØMûÓ=oe;YŸ¯·ßTFh˜LDU§*@ÀÐÇÑ<´ÑW´é¬[‚S +…©Fš™*å„‘Æ)SY%K2$@Jn0•••(¡dÙ0 k•&€G–¼ •š n¨õ@>lš,kT•{¸ÃŠÍ UbM8ªªXð1дd(ª™ˆ®¢ÌSK”r¡€©¹GG §‰‚qpMWK›N68Œ0V¶@¶Ò.Ì#…­³YHv'—¥M¾±ÊU¦‚ ³ŸÕTÕÉUXÚ•¶p¥«NX#Ãh5¸ºƒ¾Õ`ôMMÖÈ4$D`Gë¨ܪÛKqŒêŠÝ”c?táËJëÓ㤶6rºÅXäR`f­Ï^ŒùÄÌSk ÒÔö>5åÉROm]§uÎÃGÑÓvÈ|1® q‘/>¯cƃëñìæÉS7ù~ÇÓêvz|S/>*Ü`¤BafÆÍÍ53òìï‚£tÔ*<™sj{«Ùîœ6“éTœväþ.dA›Ê‹ ƒŸa;;|¢ñ+Ž0i2“ ܪÅa–îš hF7üÛP–Tmüó†âÂ<7È:­ªæî. w­L¦$5Ï3€ÛWŽçÝ©r£à N‰Õtî‡Ûóff±¢@2Ü)8Z@ÚðÒƒ`tÈ¡’ÒIÁÝ) k&f­¶³¢E2ä%-¦2œ( sZDØæ•A€™‡‰ª@’GHy6z:Ç-’\¸’]Ælüj5ÅÝÊÈd&Ê0Gˆ8fUÁ@PæÃb-aX&Û9/#&_9·Åt‚W™ €àÝÌi£Ë,¶yß--Í,"Ü}31Ï—ã½&,“î·~µÃb—,>¶â$¯´)n×%/gm(¦X4«”棯KCW°ÖÂU‹i$b‡#Zð~Ï–5"€êË¢c9¯—Ã)´P Z™å‘t¬w«¶ý{)£ Ö=&j„G·4ÁUH %íKmw‰ÒÃR‡ins3/˜]ܾóÆôþ7Ÿiw ̬†ÙD?f×tñô–¡W±ëOž<9³?šÝ›3­üzY/ßz{÷«j𦰧·ö^´:õ1™Þ¹ZþäýýýãëºÊ÷¯¿¸ºXîMÓþæýûÿÆ—myqzï!Çië2oï`ßb\ͦ½ëzN¶SKe¶!oÇê¾%€%‚›rWj˪À@APNå$r…à>™£ÂܨªîT V\é夋$"¼÷¾ZV’î0_œ[¸Â¼÷nmËÙ‚ƒ2bÓt uS›r ¢f ¨î ôRÃL4z*±:û³’:{æ€Ì4PUåôB8zöµ™sÌªŠ»ó/”Ír¸KJ \ )÷ch."!V:Îp–n@©Š &ŒfR­p$_Ų“ ªÜŒêCí Ãd I¨j°¬ªÖ’YìFuÇ0»8†ÀŽü‚£z¨ýîõ÷ÞøçÏÞÿÖkûý€¤Ê¬ªå”¨¼7³Sj¾æ¸ôpa÷îן^½ö©ß°Z%:ãùR¯¿{üøWûÝgû{<.½úWq*—ô”9q [F IDATsº}µ}C?ÅnË lÐVõcøQxtWßÿöÛz49¿óÞÃÓå×.Ú{ÅÝ·]½y¸×lÞÍñV›ü‹?ô¸œ½…ï.Û;Ä[7è>íó‰$ Í@77³Ž2‘‰-žãN`ã’Ðòm½ac(€›Ö¹ÚaÓÁ;dÚüË»šF€¶¥€Œ£ƒ43@Àv„êwÐËÌêÜàÌ»»Y¨èî2[rͬŒf…*ƒÉî|S3œ™ `{&$ÅVpœ¦)kÙGðeÌ`¶T@ƒ…fi£LÁˆTa4¸K&‘Úç|¸v{ fôrâ83î’à*ÌPb<ûÜÎ-þÙÖ×̶1k;@ås© ,Ð^ ¼wuùõg»1ܤ!Ž<•:IÌŒ¥5‡…QõÌv7çf&°r«ZÓ î½ýÖ›ï<J>íJf±®+ÄU+É1FÌÓ‹Û%ãdÇJºˆ@ó_áxàå4­ÝòK<¼ëM,y½3å©ðSc½þdíâiåMÖä-û±åjqÌË/:0žñÌÌ4O ÛT€,3wnÜaffÌ^ØNƒºz«š!‹²£@šÛEˆå$dœvÛ9Ëó ç&–F5‹ŽB9nUƹ½B’¥. š57Ï Ö+»!̪*¸å@ ˜M…¬ªhn†ªò`U7Ë.AnUe´0d­pË’¬tæIææ$«šUÕ:¹ C•;[–ÅÝr_q”:ë!˜9{ @Q“+*a +– Uo³çºœKó6à\vãþòв6‹hŒ„A}v­¹k V™‚ØRj¶²vbúvì6׌œX0ÜÀz_úîâ9Ñ]ÖhQÅåØËB̾xH1uN=ì¶tô´ÙµŽæa¨#N+±D»Yxb»$9´1ïrV³Ž5xt¹lì÷1MSp ›F×9ýýõ)Óvæ®AúqmÎ5ì´ ¯ÚE80è­€dÑ:C<Ѻ¥›Aó#Û¶ÞüT’0£™ª­5»ó+¬933Z ÃÀÉM…ùSznßÐQ[Ÿ\”,V:ïŠósÜÕÇ•Êhðr1|«Üà°|eÎ’6=Ø’š›€ ÀF¶"7‡ù¨ÜhŸÜ\&mµoLÇovf$›“ÍÖ¢ QUæÉ}Ug÷Â- Ý$àÎ>î4a@fvGŒ@ï¯2JÛ:leÉÛ£{®çèUÕŒ’Êì Ÿ£$-¦I‚Û~¼Ê “YdEy}±.†h Èu°4¶B€ª 3ÏZMˆÌ*™O4“2"6cÜZsàRù1Ff¹5'jtÀ6 ¶Ê:äq*j¤4\§8øÕ§/ž?¼ÑŒ+Ø-n P“i¤ÁlŸ†µ­Kn ƒ|+¹R9 ðì€3 ^£V°ª"bYŽ“™q¯šjŒ6/kÓné}ª鯙Åâ9Ì(h%g´qJ Þ@ªb5³5“²#‰rw«µîê$'k‹rA&Ñ`¬£*,Æf ŒTE•,¢œI¬Ê“d$À|† m ¥‘”û˜ªJíÔÒ¬Z'âvÚVÏ'gåaÂr«Þæj~èã6+JWS¬ëð¶LºÙN6U¡÷`ªèËpƒ¥¦Rªú]5а;æÚeÚi€mG¥LU•RYm˜È!ª†k¨AtŠÕ‡€ ÒKPíOÇ1Ÿf³ÒÈòBV¯*·©ˆÊíl™ìå´˜ª Y3¦$n¢àØOs«<íÂ÷G«ÈÜkíÝ+ÚŒQ94ïwiµxVj—@¡(‹K’cfA+eŽS­Ó´úýŠ›ÏžÍû÷“Ãæa (¥PUÊšî*Ä p/@án†S®/£ìÉ& …µˆ~BUm(èKg•yùššB̪£ƒ¼Qsº c/ä±ø9ìC!Íl'Ájã9Æ(cmù‹Íeb7£(Ïñ"€©…Äud ”Èà8sLªÔ6ÂLQL@’°hÆÈD2©6µ†¨câÕF&%×B +h” š€Ä’Ðù\`e&pK]§LŠv²t1o:€ã¾q…ᄪLRÏÌð¹ªG亮á^U”ØÝ7Zƒ\üvíkM` ܉TÛK©Ú¼zc˜Ð Y)tIT)ݨ*Á­ "”PUµw1aî¦J“9I¬¢™¬ÑE`(X£Ô å*é`· †(¡YïZCA[Áf9z”šÇÐög™°.'  I©§W sµ5ÎL3PY•©†Ò‹áŸrõèíZžÜív&·í;’¶™îª»õšÌ›ùmö¢—µ‚§çÓlfLe*±N«Puá-³E]«Ÿ(æYµšÓu®.–,+9ùÁ,VØ«Öãrœ‡ðÃÙÏãqÒ·U*çÓöžDvx’¦ænOæ k>¦ò²6,K×ÐD„s²g]ÈÖØ{ßrxU·ág A-^±4Ÿ²ÓÝ3OfâX“55:¡ ‡8Ƹt_×aÛ–ƤђÉuµpÒ4”§Ýnw¼] y˜§ãííCßWu°²*´ô‹yWK–÷‚ʘÎT÷†ÙiÄí6f P.£ûnB ]ÚEË¥k+îØþZMZd?˜ÁðÜ—VàHU‡¯Pó˜Ž~ª1æhávœr¿ÇÚ X³jj^ëu_W“Õ)ç‡^Œe‰ȋ˜\ët:"BYÓùÊÃTU*‰®–9j<»¹%fóãñöp¡Ë­í¦µ÷¨†ªFC¯cïýÁƒcŒÓrëî§Ó©÷¾ÛMcŒˆ¸>]Zزìe±÷Oß½zqµ÷yž·Øbn›ÿ4)ÑÀ0éDZEè4Èå“7ÁŒ™¹3†$w7?Çæ—Vª‘½w;tŸ¦Þ@iæÒaTiÚ0€™&ÊcÝ|€É0‡vq¨J„Ö$Q(€:€!"èî ýÃS¸Ç0€p' "ª­÷3†7Â5Ç«*±  °Á0 ˆªá%EJøþUð5·iËaˆŠá.MÓ0†m“UèÆJôÉ€cø¯á!“*àEŒÁÍF F?€‚ ˆ„;àï^ûhªîîîCl‡dR_­v/MÓÁ”A0êà£øÚ-2¢·’Rb„›«*c’€¤ŒÍ`m!Áá8<·âe„V DGD]‹ff‡:$à™ˆu<ެð`PDà@hÄýp˜‹õ)5Ë Œ+eŽÈ‚÷…Áˆº$c u«"lè* Dq*”XÏÀ»üá¡Dx•e×åœIÖ¾6%¬z˜CÅ ‘êþ»°º£ÀéU‰0w2—ps ¼Xm$ÑQÙÔÌbpì"Ü=tC  w`ÍÓ>ð´þ™Yê¾&‘Z«E˜Ò}ˆ*Š1©V¸Ñ\¢1¬†‡5š(0w#@®¬„xÑÐêÙ!*€ý€+Jdè¼v „{¸™tîI¤ r%@†( fîžsÀ8)LAê”@„JkBYÇR•Õ ÝÝ‘ÂÃ) °•¹w^+ÃÌRñˆHÊ™rV¾Þ™‘Ö üß&wGÀé ¿O#"<2È?ˆ€DFúd+ó ]Ò$|¹fM™Ò‡ àQФJ]9%D ¤¦)b¸GÕ#» ˆ%ôˆžh(É¡®Ô°ˆ €2ÀÃ(Cœö剈٪\•s6aÅ{s‘ÕuÍì»ܯá ’ß#!ש²ÿ #|ó¾Eý-8øÿ9Q‰*`bí­7§y“2&p· [ì쎑“ªVYçÿ†;Êûtï`#‰Hæ-Â!dr ‡â½EîR\w$‚1Ì4¢ÖA’CÄ)"Â]­¸Vï‘»ÿÓé'ï»yÖqT—¶éÂ4A hÀÜ<•:ôý:áá@ ”Tþö®5²C Å!ë„°‡÷æ—/;}ôøÕ:šLÆc3ƒ»0ÕО^Ë~g§™IÊ“ñVï}Ò(JŠ®,º+»p‹°¾ï·ooM¶¢÷&µžRXv‹ÝÝK«+ÝFª’Ê™ $¥–e¹Ýv³#7Z©cÒ¸“Àð~16váKb×°XtËK¯Y]Ò¡ÃFu“ž&¬ªIjƒÉZkˆ¸ÕÂéî>˜Ì€„D0¤)î€ç†Üq6L…Êl$ꉠH g@Á$Zà‚t_g¶ˆ<†ÞHF´½¢(”Ô|f^š¥‹Ë2¨iJ¸¹u–&KO¯?þ£c³ÉæÍ§ÆMWK»‹X]<÷ì¿sÿí×Lnº¯rF2ØÛ &Ü‘ðÞH2 †¹WwÍ©ö=)šÕ½c­ôJ`˜¯ÜhD`o¦ a°tºo7CG"‰Ð}O8ˆŠÝ¬]$gF"Q²9ËTk­µº ÿ…Äÿ;"B²ÞhïíÆ5E„{\Þ¹òìO-/îÝrÇ1 |/€FÌQ_|õ…Íèo¼íΩR‘v¼vßî._8óÒ™Wž}:£Ïa³C·ÝwÏ¡¯o'›z@D«Õ¾âÅ—_}õÑÇj·ë÷&-DÔ*Ù>pèÞ‡>vìæÛKš rnàŒw‰€…\wp±·œ_¼ü›×^|õ™§ú —¦’¯ºíêüÎ'f‡šÚæÜ¼¯cM‘T‡I¿'0Àz«ç 0èMïÖú`öþÖC½GÿT¹;FÌÀƒ§3ÀµÆ h ] .êoÓr¹qåµ_ËôàÑëŽÚérÙÍ/]|òg?œ>öËûîÿäìöSÞlÖùr±wîìÖ,8q²¤±ˆ˜Y™/μñú;ý_¾ø¹?:pçGͺeÌ»Ï&"¹Ô-w´t»ÝÛϽôÒ¯~4nG'mÛUÛNyîù—O?ù§÷|àÖñï4:|P¶¶zDß/Ÿ|ôÎ>õÄ?üÝwlãÀ wÈhd޾_m<üàGš]{½·›×®?óÆËýÝ7ñÓÝw`zôúÛßÏÄxO6‹Ëݹ—žî‘¿½f{zݽw½ööjXd9x͹çþöÏñŸŽ>¼uH&-’æ>lX3ó0³wqÎïÜ÷½ªºGx­µ’4@ÃÛª(º–Ø$QkM"^+9¥ˆèû¡^á·ÆD{D o¤”’RüT3 ¢p°0ÕX¼V¥””Û>üþÖ[o…˽ñ¢WqW¸ûh4ò…ÃÛ €:Ááv˽…-çÊ(VT5Mg)¥¿‘RZ¬Veg>ÖÖh{‹ bÑæq§Ëv4¤` >"0ý«­Í³ßø±Ÿýè#Gn´'­¢™LCJÎzäà!:’‚Òm4';ç~ö¬.j-ÚŽÌé¢T€Ú€Øezóõsg¾ûõëÌN}äÛןš¶Z󽯯7_éúƒ¿zíé_ÞtòÈÁ{îOÑÔg\îëÛ—wGQFÖß8ppzM·šg­J¯LËÚ_9{fsÒôÓ­7_y[7|Ún§”6Üš ,͈å(¿üó_]}d{tðš3Ï<6®»½äífvìæ;m4«ÝœnIeeË’ÛåRÞ8ý«Ý+¿Áîx›rÛÝuÓ­&­R/h|a»¢ã7úîìó¿>ÿâsãÑô°Çm§>˜]SG“Ë‹xû·_~òÛ[]÷ÒÓn¿uúÆ{îçÉ[öÊäÒ+o^~õ{×ÞxÇÖ­†æ&«°³ËÑ•ž;÷øÃuyqdeº5;qûGnùp/›)åPÛ‰É;çÞþõwÿüäÉ›¯šm?÷ø‹ìD·ßò‘w~t49¬áD¦x5@:•ä"ŒªÉKéHª¤Âî¶n6à•dŽL¬„•P"DD<ÜÑz"’›&©šýs­2EÄé$9Èž¡ÏÒ ¹ý·zÿ×h8_„ X@cͳ<ÒˆuŒŸDDb#9€ÂDM½Žz_²^Ì~œP¦Ö5áÇ’Þ÷½´¹²s^jr36)¥¦iTU“:uˆÚi“gI'Âu2ü½û˜Ùjo7ö.mîütû½:|¼)’„ ²[ÐE¼ÒÍÖÀ•wE3×ÈõµòHD Q4–´KÞkÂXb/ªI@EÄcÀ”Ò„ˆÀ ‚Ü©ê|^;ü4Ï„ !2\àd¼Ë£á7íælÖï¼Õ<"!ª‚=U(ª}Ó4 BÁìHÊYέNÎ]ÚùÕnÇùª£w2DÚJ•dýÑñøÀ]w•º§±æQÔ%€ÍÍM Ê×Õ´ªÁeÄÞ"mSn- $3(VC$’.,.¿ýÖ™§ûÈ=»ñÆéƳBèœ –ZFšŒ'·8vdÚHŠÑ*¥ ‹îùg{ú;ß8õØí§,ß<÷ÚŸ~cýÐÇ?ã£IÀ—îi2yõåú¦ì¬Þù½ßýBß›_|þñŸû«ú¥?ú󡓦AÊr¹¼pé¢îžk}ùŸû|4³wW~ñã¿ÿúÿþ¾ôoþääí§–M’fÔ×î§?ø»ñë/}þs_LËɨx~é‘'¯<úãûþç›óå.u)ü‡ï~§}ã•?þ—_š¹f··_?òä‹O?Ÿ—‹“|jãÀôö[®Ý9ÿÉKï“ûÄÑ»?qøèæž!Aº# ´%RgsƲv/>óÜß~å¹áØöÝüáÛî¾Ü5o¼øäÛ/>öòãOzÏã·Þ-³ [®êÞjç†vòáOa|ë‡ç«¸òæoÞxþg^x|2oŽGÔ$7k¹ŽK$¢è:™*•¢ˆæ\÷ ‹€Jg d(ÌŒ‰Nm¼D²Ø+ug4mÞoòþ7iðRÿñÑÿ/”†*Y‘5ÎmŸdH,¿oü”äwÝ›KýÉ·¾Þ}ó{·Üñæ57ŸÚ8pXšVUÛ¶Ž'!mŠ¡·+TõÜùó—.]šíí¹š5·—æË—^xÞ^éî;NÍ®½AD"bpGEDD pH¿ØíÞ>½5¹kºuPA@¢6`pBÃŒÕ67Å:QíöÊožùõË÷øéƒÿÝÍnÙm›ÛV‹G¿õígeõà§?_ÛͲèú2_ž¼úêýÞï½ñÞy3»¸ÜÛ•ñåÇöôS¿zè¯Y,9("nÌÚ‡>õ‰ã·ß½´tDsÁìÌw¾ýâ/v˸Ðw&/=óÂö¥‹ÿügœºÇ;ß‹fõø=íًϽôëNœº;Úͧ{–;—>óå/¾ó®R7Ñ7×Þàͧâå7ž½¥îAìðáé™f¿æ†öàUeX@­5„C“Šxùô ßûê<>š>øÑÏ^ÏýOš*l¥¹òò“ç_z"¥æÀ-wUKÒï̦ã›î|ðªœ*cXӬʑíÕ©Åé_ö«¥éh0ðU`õ ZD±-œ$\Eد:X“™‘áîñ®/ç.A‰¾¡§PÙëlÚ¨¯ ZmU™¥I†¨è›¾¯™™LÔ@ ©n5AÁdP÷û^B¥R ÑVY«l ‡»ƒL…ô–ka†­T† “œ”Ôê“%„V‘éˆ­Žš»îòô‹O<ñÄóo¿ñFÛ¸ßr×=¯¿:SÚ qÕ·Î]üÕÃýÂ?l·N.ûN›|y±xçó£+ïó§ßøÚ=w\ Wá55e<áÞ§î½é®û—Ð ÁnØõþÀßûÿ¸>&ä*òøR¿û½¿üʱՅ®ÜóÄ£ßßÒñ• "ÃøæK—^ä÷ŽÝ~ÓEŸ>÷Ķê;nºy7™è¼ÕîØµÇNn~®éš…ËŠ.³«6æãÉf>ÐÕE4ii]]5ug7MFo£Î]ß|ãÜÑÉâ÷÷ËGîù¤å¥Y¿I·ƒ[õ®ôIÏþü¯®¾ý¶•v—4¯œ'6·œ<&Í y¢e)»LjpÇ’ÚÚ©% LMU¢Fªž EÐ E$ª•¨`€È&µu›xÒšð>EÕÚFk,š;±UŸ"b¹\ºOHv]'"6äW„<àîƒG0tH JëÏ@ÃU2€‰#0Ä7ÂEá/Þ¶mÛ¶ýåÞÌÜ}ØXÃå>ìKw3ëû@8‹¤Hlg[wä;?tçî•Å™Wž}ò‰G3ñª¼ýÊåÓ׿zíïúéÑ« ½†+ˆ<:weÇv÷’K£¶ ¡I“‹{óŸÿâ‡;0ÝÌ7åi2àÎp¸A­Jn¤·2jF2Äè‘_Év“„>dhÐB“—Ëý<Æ$›¦É9·m[J‘F"DÉ*3xCË "Jò$µHÁîçPò )eÕ´&\dÖÚJ .)½{ŽÑÒV­øX™ƒ ¥ fʉc7~ìÓÿꉭ4Ê+øXˆQYtMË®£uPÑIK‰åð¢IN§ãºÚÛÐÙe›Êd·i¨-5‰¥”6ÞÈÈ\-K.‰Ö]noÜdQ…•¥[Êj¹Ù¦¦%ÄØ@²æíéÆH’¤¤Â%;öu³$eˆ8#¨’­…E¤:"<DE‘ «V:iH’LIălrr)L”Æ)[â–WÖET—•­%6BµQHj °-5mâ`„³'û}òJSšŠ'zpóÞÙ÷©Ô¨f§ÂsDSËT%K?¾êh¿qXÊ…sYT½DÄnÏË;µtvüÈQ.(‰»‹ùK¿~úòÛouVÝ}bÑXeªÚ,gêm‹Í«í®öd~‘°Y´)6lM|'O[ÓR¥l«#iq`£_uS7#¢ÉIh‰%©åè'M¾íúëoýð§žùìé{9ßSÆÁ\cT¡}¾àþêK/~ëÏþý•ç2¥šQÞysoÔ•en³ÖigrAšsomÙN¡JC4” P„Úî’ ¸‘±È¼© *ÈN8O'‰«VWc©SX+‹é(2c”#—UJÞLSÅüìÓÏœ`Ϋ½<"J,‹ç_xêÕ~IÛi,…]²€—>ç-çœßšçg~ñØoþ–-®ìÚ£®²M76[æ /“ÒpRÑ…樇¼;0 ™4]Ío¼þ˜ï=ÇFÙÏ«å¥ÅÙ_þä/_ÿéßE.z`¬ Á ön—F:QH–,^ÔÆ¥¿4KE$]É ªD²IôʚńÕÅÌ9µ­k•FéÕ­¢_U¯eìÈNB¢UQh‰’sŽ1³QÓ¦­¦Li ÙÙ„dgÿÌÁLÁu {cM²O*Ò`ÿsfÒ@T$Ò»§H¢Ì¦Ó“·Þ´\­žxä§õÊ[ k•iÙúe\z}Ö]>uêÔèà–æ¼©íñ×oÝtëéÓ¯ðÍ—Ç«Eš&SO+k–•ĪôiU£+"QD"š&OZ4‹,ºÝËFM€H-X^Öîr+)-DñÞes4¹îškÏ_¹ôÔÓ_|ñ”…'µ¶q]^.—o¾ùùŸ²{3>(!›’Ûéѧ_|þ¹ŸýxãÒ… YŽug1_ž>ýÈ׿róµ·l<[k˜Þ¿b us4É”‘æáÉÑè}ßXÙÇ-DIudÊ4µŸüô§/…}ï¯þ|ïì+3Ijá¨ϼð·ö¿~ü盢³fô{Ÿù"G›g_}Ö—;Ò´uµ<ýøßûÿú__yá©Ij6G“–+«{!9ï¶}7²ÍÂ)ºšmˆbqÇ-·¯ºú7g®<ûèão½ô¢æEÏóÏ¿zù©çŽ\uè#ÿƒÃ‡n̽°º/û±$µh j±./UUÕ¦iÚ¶ÍLÉ&d\Ù  \aKç&ŠõÊ ³~¿®N`‡v Öƒ4`ŒÐ@ªµ?èáÚ™S5»Q†Y&}e!Ð@ÅB¥rH„ÞL%\""&€èHˆ*aB "Â6’æh{ø7ÝöÃoÿÇé½m¶[˜¤Ôæòùs¯üâᙬ66OtÖ`Ô´5¶O·N<öÈÃíü̽Ÿúb{øæeë=”•í¾yz÷¹Ç¬ÌѤQಸj¹|yÇmš._Zn™"¢ª _áüé7¯¼øèÁÓÄ,¢‘÷ˆp`”«fÊ›n|ç¿óäþêã?ýq;¾jzâèxÚÌ—zæ•7žüþ×í®ÿÎÁÃÇS•‘|ñßüóÿì×?©^N>ô±¹èå7ßøé7¾zýLïÿðçNÞz粆ˆNšÕ|–Œnƒ}ažùª¤²Ø½( @[Y6i¢¾A”RV9Ñ,Z¦bh©¾êÛ¦1pƒ‰´?þ;àW_ûóï}íÏoùнùÀá7Þ¾ò«ï~禦~æ¡O꜓ñå«?pÏ~ø·ßüÖ7ï>¿³h·ß|ëõ·žüÕõ¹~þ??oôÝ|šmÕíÍÝ~ö½‡9n>õ¹ÏìÆd&ÀÞ¹NÓJ8iºöÚk·ÿËÏüâGoŸyÚÞzÓbúÂ;—VéÐÆçþè÷''o‹é›ÂUS‡ú1ƒ‹…Phfj€C}µÓ*ÒÐCÂݹæ¤ÄlÈ_øŒHCËij“€Ö‡#)‰î ‘†B $Hq¢AÈ`_„$€€©"ƒ-Â5xT`Lã¦Þ~çÝg_ûÍãO<óòsÿþÔ}w]îê´ÙºôöY+ý5¼ïðÁkFSš®£Ù7ÞxŒ<ô›Çuù¯ÿfºµ±±}ˆÒôŽÎyáì™þÊùïàÄñB³ŠRêâo¿ÿõëOÝQr6«‚0u9ûÖ…ÕÛgïÿè³ãW±II*â rÒà€Ú]÷~ød»õ£‡¿ö¿þÊ‘cWOÚY™Ïù¥ýíw|èÔG>ÞŒ'«ˆ3ÝÍ~ÿ_ÿñ¿ñ—üì‘ß¼\'³·Ïœ¾ªm>õéß?zã-½ä)[ºXøææætc&"ï š ÙhÇ⑹Ž\ñ"Y—ØèzUÛ³Í\c!œh;‘ôÉßý½T»G¿ÿ7¯¼øÕf2=xìØ÷å/ô¡¶¹‰HÚé»ÝÕîK|ÿÔñ£Çîzp–Ñ”®¾³Ø=ýì“79xí5WÏÓö*Ú‹«wž{îÑ[·7Ož¸%éTBzÆeó7ýÜÑqsèÆkD‘jõÝ¢ï^{ñv«ñÌíµ×Þâ’˜ö«EYÖEíóÙ·N:ÐN 'y:6Ö æÖwµ4ó’j™Í&EBÑ.‹RÊl<ɉû«Àž[×u«ÕJ€ж-D"ɶpǪ«uµ˜´ÀS›‡kû¾w¯â1iGYSçëø±»×P3 ¨™»¨–Ľ ÌáŠ!ob€G„yôDDX@+ˆw¥ëç$ø‡ÿòúâŸüÛc7H©uIIRP­Ñ4|œu¸ÍpãƒQÝ>FH¸€F §& ³ˆš®í `°@©¢¢±†.º…íJ«›[ÛÒ4*Íh˜ð0“NG”~Yv.ÐCRÛÙ É67¶Í†G$’”ÀjYæ/µÖJmFôhR^Í›³ñhsSG£Ü޼Z Øœ!ý.2Ü¢I²ê=µ£Þ*¥ÔÅj~aGãq;:°án‰f¤ñ  wÁb±B±ÆúbHÍ$„£©¸‘ERoµôµEý^Ú<˜S³,^ÈZû–”RrÎ= s„™åXªfBV ³›¢c›k5•¶V·dUi ¢p!•D´E¸³D˜ˆXq„‘PPEP9€ñ{·0Oµ4MZXߦi×u$åÝ>ÊæÑëð}v0Ö½ˆÌ À ×Ì,‚nº=Ñ`tš+¨”~¿6ÖÝEÖL%¸ ¬e6Ô¤Ô@qwb¿”A@÷ V"Ük@{@¢¯ÕVžV«Å8¹¢âMn DEÔð i$õµ‡Ð‡/ ©À£ ‘ðº§`@*ÙÖr: 6àôömv‚ẻŸ ™L072=È€Òœ0BEÊ€ ײÎEF“Ñh¢Ž Æ9eJrHDˆ,iŒ'i{tбté;mšÁ‡ˆ(î.ôµuBr¨†K:ÌÂÅF„¯ÆDõHí¬=¶ $º%iB÷ÌW·”ÅÌXº6µm›='ãú¾mÛܤÎöÚ”j×g%³¥Kƒñ4¼—êMÐ)ÝÝÚdŽÚ$HÉо,I£ÂY'‰‰1‹Zˆ”Ø FA·µ¯PŸŽDTVN'À@¼:T‰0Ô%+€$ÕG)W+5Ë’ÉÂÇD‰¢™¡v¬P$§'íÝÜ£ uw¨b°ˆ†‡CóG =s+‰Qˆ¼4A^Ð…Abx#©®å:ÜÝú¦MWI…î=8HJõðÁ®ÐT‹„–BB5RÛ¶ &‡PÖÝp‡ !Ì´m‡ÍÇÀ…ND îG1P‡1i€±ÖAÜÏß`¸ë²3q¡4 $$†,¼錡VyX"À•º#I w‚DãâîÂÝEÈm­$!eö¹á0 PDˆÉ¬‰p˜@b 8‚*C(2˜%Ñ RjÀb$IkH0@PÂ4@Òløv'ʨBR 1!BR$.ð`ª( ‘SVøXÊþ~ÆþÊáX¾o¸Öœk®Â`M†9z â"ïbËIŠP€Bˆ‡G Š Õ×Ãã¥aG@lÿ2 Ý"0@¬ï€F5fx½ÌÀp•ˆ™1†ŽUˆøûîHŽ€CÈ€#ü}\ïÿ.%åbqŶqßßiÁ¸xtÕº3.¹"™YU´scD²É–òþ°+¦(È‘Ñ7%˜#‹ÑFÇ«³á'7esƒ ãápOQꆇ˜u¡¦k*ÃÙj‹VMHì¢G©I=xæa¼ ”¤½ ”KDÈr¬xsv˜ç²³›ôÐaœ{´°¥®..ÑAÑÙ…ød"V^ûc€<òÞWÚœê ŽŒHs €…xn«6é)¹¤­Žd/â¨)@»7SUJí!JRs/C]š¹ ¡Ü9ëT-n3sÃzjÖM4àÂDN´[ ÖÌ1Ù-Ú$)ºm|ÄÊa¶ö:=à’Í–M$ƒ=i>Œ[êŽÎ Ù¶km:;u{]?ßk=+ãn™ÍG>\ß¾µ{ôRÑ8Ås0ÎÌÅúÙÙÙíím¦¥Ê±¥ ãÑŽ¶Ÿwut'ÐÍe?óX·±SåD|¨ÑöófÍ¢Ñè–DŒî‹¹@jĆ­E„ªž"<(2zT–››ÛI“l¾·w×´¹ŠÖ…¸·Ã¸%[Öª¥y»u÷Zë2÷2Bö#yªl»[ £ÈêG¶ x:‡Rܲ©±§‚D$3QÂ(ñplÖíæJ")Ó¦€k@7R6u¨Û!™Ö•×û)ÃêåÅQ¬:»VE²Y–²÷Y„²›Í÷-åÂWé$²@Ïvy¶‰»ãìÛ$`;-#çÑIøþ®˜TVÓ â™,ÙÖÚæ…Ãù0§mJ Dz¿øämTÎ.‰xnáî$ÂÌf CªÈÀ‰¾D9eAº¤2LhIÌýu,w÷: t²Hôðý¬ÓFZmÍØÀc½K-4_e¦uY |jH:TÖ$ã&´¦—p4ð8dÁaÊ&3ÝÖ  ½…ÃÀ{Ò 'ïœB9lnûRbüòó~leÌ3’¢Ãá>gÎü|¯/4pìÓ4ᔘvyöñí0 Èl‡¹l§ÕºDŸôûãì}•Ñ–FÂzy<Ôª G²¹†m$PÊì­ï{ïc݈JG‹¶ˆ  kÒ2Ïì9ˆöÜØ>§aÌãÁƒv¾Ì¥{·Bœ®e>[æy”R™Üj)¥´ÒúRûªŒ4)"&§Äb ’îA‰J©ììîaO‰>ñלpJˆÅ›¶¢^™O®ÏJ@ÞºŽD[µTžÝç˜?»®×Ïn¶—“éÐZ´æ¨ ç%9Yµfæ²îÇ--i%E£$“©š9%[‰ ú½ßCéIˆX¦Ö…/r³¿¹ÝÔÑÝÇ]çYÕ|o}WBLnÛ}ÖŠuA bR$D7É ÌôRb`Gñ*•ûâU&d"t-ÐdØâyÂ:šˆdh„ˆ.0¦1œ(µ–Ú^šsH‚9Ö~·Óa9CÞÉ6` !:œá.Çu_J Cn£J×­Ãï1&FÖû ¦q¶$Þ ,>2b +ÄNèÁ=%Ë™$àždpœ{ÐŒ °)Q(Þƒµµ5øþ€i`Õ$ Í'K8yç{ß{ãûÿŠ´ÑíýrwSç% µ‡˜ƒ²šHïAžLŽì­gRsæ F®é+Sd"!NH¢ÙØÍY–C”(ûùž‹s·ÞÍ‚µš‡/˜H%Y¢eï$^ØK$eH8{PK‰(hJ­dãÞ¬G&gXsòÒ% i 8ÍÑSœÓÈÜDVASÍ(°šœÄìNö…2+c ®3áÔU«7ƒ'Lª)î@OK" «Ãí$wPƒ+–¥«Š¯=ö†'Òë‚d0c¿Ï7ž/XìHë‚~„vd ,°¸Â` ±Ùbéè^ÚN´uká,.†‰ÐÎH!9qgÝ-”ÑÉèYÂÂ8Cr†„Ÿð„Qï ç ñ"GÂÈ×R4;Q€Ð"³DOgƒDØ}^ øêøä "áPê‚vz¢'"dfR€<%„A€•Ø¥W ² HJë‡ýͧç›>Lqff™€¼ûÁoÿù÷uljގã'Ÿ¾œs"aa±¾5ÒÝRê>ü ¬‹ëÜÃq › ;«8%´‰Ð˜ñòeBæM§áp×`÷XiΔ¹E‹>¯²lšÉù›íå–Ë1†.ëZVö¡UÌC¬c2Ybqb¦lI 2ZÆÄ PDÉPâ}B*œØƒRi °PÛ»$gæP˜¼%‰dq*€ñ¼aÃnPAÐ…‘ SÔ•°WH‡4¯ÌLbàÀ ëàŠ^0.¨É÷;òȪu`ê„N(+L±Ñî\ˆ—CA?t„¤# A`A   -q1-à‚à Y|\œ„Ô‘Ý¢Fa–$qdF!OªÉè "„ ʬPqæ'Ⓝ‰Ö"<)S˜§°§¥·ÞÙR¨·…%#,¢‹Ð »'+C d¥h8ªÂ•’s+`>8Ô  IDAT!aJ²ã(ZKÍ@gd"#%ääÀ GæTדåjšG§EÖ`gDáàãÊÄ]J|öΛÃÅf+NäD” H53‘*tFšÌØlÆ>W€ˆ¨¨ºûàí²¿Èë_^ú!«¨»[‹AÔ—&ÅÚø ÂP)åâîøô­ñe~bõ­êf€nÆÛ»»-•q'}³¥¡kÂÎÎЫ=Ì2¡úÀ9oÑ÷&âG$-—½KÙ9  7¯ÖºhÁkþJϪ©4P‰ bËN”sH#ÎÀƒ‚‡%¶cWaf G™Ã¹/ãŽLUé+°·$ÂQfП›Qˆ1Þ+6ãúЦ۲kvÈÍ@'ƒî€.oþøR?¼ž½^Lj‰äŒMGVpÆ.aƒ 3ˆ@•×PvkXýrWV3 Cx$ w„ØsCz"žÌ,ÿÄÆUKföÖEk¦æ×€Ì‘ r·µ{f‚$"ˆˆ‹Z˜P=y!3Qö¸€k”Qï=øµôâ_ UÍÌ̼yð¼·)ËÓJu~÷Áƒ¬;‰lZÒ#”‹¬íZòÃÛõ¿çÏq.8c4Ð:x€Z _“øÛÇó›gùã»úoÓ$ª xEM/´E€Ä»ºÿÏå×ß+?x¹ù†»cË©n@b@B+a{†ÃmÐ\ú è e”:M_B^îq~†å´¶ôH1•zèm†äSRGDiAîH"b‚¤"Ö^<Ó{°l(²);Q"ÉD™©"'e¸‚¬{­â™)ÂÙš¹Yºj±,IkH1gMéÅÈzÕ"š1E)ÔÜDD„ ,­YTF?A€qÒ1¡–±7On§D•iæé$ ¥XûÄÒ¶cÞÕÙ"MRj³xDd¦f¦ySê  K03ók‘Ï®¿ŽçÿÙ·/¾öîùîbêÍU+K¬ù¨–MkÆ!ʃ*ƒ Èxóëñ?üý?ùþúàÏ£h!D Uš—dïLþîÕH– H=qvE‚ê»o½?üðÿÅs)4|xô Þx||)ËÙÍv¹šŽžÑªúÈbPB'\!cä9]ÿ'ßÞ½ýh÷Å-v[*’8kËwß<÷òPu!¢X`ÚѺ,oj¾±å3ðY~r “øUJ ÀL¨¢÷à‰7›Íù™ìÚhZG!0CUÝÁÜqÞð`3î6<Žqvq²æ v F&"ÀŒÝ½#;$Ê‘QÂèýQÚóçjß¼jtAZ¹n¦ÃwßÃüO·¾®¹¦%Í+—±‚q»ÁESÿìÅ¡·áî¼HtÛM5»íýwGÆÓó?¼º½îºÌÓg/цƒéÂl‚©à|f™ØÃ2×”í`BŽÀóÉvx{ˆ'#îï^¾÷ãC™Ju?÷ÞåxcõÕ8Jx±{Är±Á¨ó_ºÞóFUf tŽLH¢mÐ:ö‰|OÔ´yÇÍ‘+¶[p¢ÎFÜÜ ÆgoàwŸvG©[¬Ù!Û˜ƒê‡‹žp}sÿ¨l&‘•" hîÙ½ä@Ö—yª É”k¯(èÔjÖ) J¢GÄP xWKWYÌ…0꺂€ Œua –±jc‹PVe f!Ƽ.C­Þ—µ¯[ÝŽ ‚,ÌÆQ%“ ÉÄRÒ™“N0[VÖnîˆ óÔCÈE(2ÌšfÝ\¥:d‰¸ÝWaõPñ VòpnÉÊüZ¡€ˆTµ¯$l''CUU}ÍÞ¥§÷î_¼øÃOþáïÏùßþwÿýøðì¤U¯Ü­I˜¹–‘¤J³»öÞ^½œø‘7Ó"«Ø$þŸ>o>Æ“¡ÿÅýágùŠÇìãW­¾^4B ‹{]Õ‡ÑvœrÛÅn(Ž^*èlâÊó¨¥dœowÃn:Ó’Çu”Œ0Ïxq»þãoéKÁ­?aüÕ›öÁ[õbË»ºê˜0®O‡Y…º¨SŸÊºD=ri]h8ÿmÃçs´yç TOÒ8<šp¦qÎ1muÝÆÎÖÂ;ÉU0'ð(8+x˜xr†‡$Z¯õÞ@‚‰qù°|ø eÀ9aso]ÚwÞÔÃíµ»—ÀÏ>Ž{⣌NèË2T¥Ì$ÅT‹˜ûÉ @×R5à5ÛzúÝÜ`Ŧƒ"€xpDªH"Â2_G؈P"îÊl^ý$Öˆ¡hÉ¢¥pä€Ã8Ò‰𿝿»Ë«ÇØukG ‡Ê`k+e\ŽË|î–TV7ÏØ÷õË—¿û?þñþ³ŸþåžÇ‹'š !>ÚÂ[¦1lV[¤nuºý&TÆÞC!kðÌŸõìÌQª•ðóÛ»wÇy·½~ï‚~uW‡žõ mζßñõËÛŒÁç~Fý½!ß¿ÂÓ·Æ:¼¼;æo¯Çÿ~¿´³KÉ÷ߨõ°-þõ3þ/¿ÿáãWŸúƒ¶È9{6/Ÿyý2·¾¢•òò0>zIïŸïc\ Ç®þVÍ¿Ûáêi…Ãr5.˃òOûåß8^Íñýi¾|{ûÃO—g›@§|WèkgøúÅá]Ôq¼—B÷\q§´ƒœ˜lþöƒñ›²:¬¼w±¶ûu ðæÕÜ6SÞ­ÎÉ™©¼¥åZX"8C›[±df&>åX§5qŠÄD~úËégDtë}ø‹_ÿì?|ôO¿hkfs÷ÖZ™NÊaœ.6ë§Eé!,fqK² ’™¶;佤k6 ó#ùŽiKtž y}oXßxtÎéÓc½»› ü«÷ϾõS=l6\5h‹¯_ÒÚO¿ØO¼ÝlølìE§Á×'|üà‘~±t “€©ŠòÞ¸{>c5•0ÖÕFçQ5ÏúñÏÞг'ÌÆÙÂv¯ù6éð'<¿³½?ß_>®?}AŒáÉ@ÿúëxÿê(kÕpå)CFËÈC l:¾Uðwçöµ3R-y˜ç)óÓ7ÄýÐâ*¨1 Kû˯Ÿ½õP¦O?»ÞL—k÷3Z®¶‡ÐòɧzG›ÖC¤gbîî L3¹p’[×¢™QE3R… wwÂ’°ÈãÈäÒ’E5à \4ÛlÔ±ïûR8|åÌX#ÁEJ»$Z«§»333+«$E„02b¦©9¦™çkA\Ðká.NZþÄÒ„™ìÝÒ<þ¸«ˆˆ{u¤{„y‚SãPjÆ‘À*Í%Šlîý“Beà!iY7ËBɉ……8pwóòú‹ßó/þòÓß¾–ÏT"DviNâ¬"¯4´‡ÞÆõ†Õ"Ñ <¤Wêu­‡e×}¿m¥‰™µs¦ 5Ál•km6Ú”§œÙ:ÒÐ¥<½º}:Í»;Kýâ~;”áÑÆ&ºû‹·|#øÁ ¿>nŒÝŽ_‚Ó.?¼–ÛÖ'qkG¡ªÜ®r¥®êI›‰¿ñ‰ûÒÆk;[ûRúp&¬ë¼Ë6·õ‹rþü‹µJûõíæÈjÛq"çMÓ´aüµö§Sg~uCç¿þ›3–»wÎe¸*·Œ:…Ï_{ØŸžón7mø¿æ‡å—Ûû_^žáwkŒÛ²Íã_¾-_,×ó«g×úÑ/·e#ëüå÷ß>ú¨=¢ÍwÞ¤ÿíÓ—S}è„v¸Û—R8“Ì6VWÏ…CT*WÚ¯ãvº£0J ±HΡ ÎnÎÄ£if'S‚˜³©­ð> ÕÜI, $ÂA0P²ÛH„—äÕ©‡ "YU݈ܻˆe&|$ÊЂ(Ûzn cfBº'x쌬‘ÁDæVµ´ÖÒÃ=‚•" ÓŠîØŒÜz«ì™Iy3¡ž5C2E8!OézJd#¢Ö:¯(‡Z³&RzkB›pD.ÖÄ·¾ùí÷Þ~p¬?~ë“Ïÿ÷ÿù$òúãbÐZËL˜™0$Ð{ß|•7Úãº}Ãåtv'h!~kªïŸ÷«i³Ÿãå1î;KèPê Äƒp ½±ã³í]žÝ×?ž©Ñ·žn?x2=ÞúõÓ©âÕÍñ&üªùÁðãž?[ߘ­Ò ®G~g#ÿÕŸ ;x0ÑXIúrÒ¡Þ]¯ž£)œP§±a½ûOž-?{¦Œ¼‰´®R¦ˆ99’´ îï>¤QqÓ/ÿñ·óÇ·›ø"Èôç‡û¿æ(eB™ÆØ_¿{)žð—sÿ”vÿîÙmwý‹·×—ûWC{xe,`ãsÞ¸RáÃn+õUÿëo>Má:\L}¿-û«©oîîŠ<<€à1´Ì–Ey‰î”ÙW0N¡×<IÎØ¦,œ ”fË“ŸFöÞ$bz]gq8HX‡×•§®ª”,Äð R¥Õ¤¤)ñ' 4x/¢ï É,§Sme ‰j¦NíÑÀÌÑûk gD€ÿY·øú®"" 9Í.fŽ Ó¿”RPŠe ÿ²P´Ei9½(¥´vôÜjTd] ÷ jFU šøÚ›Og<>^|öÑ­GeXf:Ñw­}¦")%upnÜ" t™8(—o¼!.0·Êv:;ݼ±áÁ×OWùðóݾù(w·Ä­Gºöx\ô݇^¶ûû½ýø³ñLJǓð'ÏŸÍÇw®Ê‹\î|à¶Ûjxö›C®ôø®×Þá<ÃŒhÜÔeS÷…á²%‚Œ÷•Çe¾Ü¾|óÁÙG{_|hÔ É^wÀ/_M¿µR Ú€3AƒE¶šãš+aºš—[%Yî¾» ¬a­êÛÇ|ïS…[¼SåA."_`üwÞ”³Ëg7øØð&íl=½•¾ô«ó<ïckÃÚ¿û>–ã3f&îÂdk^lO°RJ?fvÏÊâkßÔÒEÞI¤m÷œ©£aå¾d(ñÊÉàžÖ=D4¨X/|pcÉD’P&)ròHp€‹Žé 凜Å¡Œ¥7䆆å.Ž`V÷ðlœ)9€Fòú4×¢êKôF£6rVâGzæÔàMaÂÌDÑÂ'VJÂë>B‘ðÌtO¢Š ›½4d$’ÉÓV5³ÍfƒS=3@PQeo¶ö›ÌGár*#¢…»ÏIX{Ë̈ÀŸä7ã8 3–Þѽ¢}¬ÍÌ3Á^u}<0¡vfÎÌ ž—òb­ç£­§iÆ$,›‰V%î•»š§Ñâì/ú¯^E‹eUÝjz-n t¥7aÈM²Í9· ¬–9[ådo çÛ3û›M{üüs5 …ÃÝ=­GBE[kî…HN±*Í™œ†œ%Ž*‘Ò½µBЫݒŽÑ©/·÷å‹¥^x0@ǯ"I§ãD@çï›1s$INëÚÿp³üêÖ¥º5+™µ&$@ ,mB¢‹R±…éH€£S2îùÔö­µªjé"'D„ˆƒYܰ®+%sX@“e¸¯Â§ÊywHFd$q:Š>]2 PnA‚N8]Ý4T¤Ì291,N…ˆÈøTñöz03ˆ9ù#39á_y*txõò7Þ-»Ay.ТǾ†ƒA}ÒqÚÊaDJ0Q:,E‰dØ·!V%Ûl6§ ÉD‘X–ýÍö©WÉâ¾W,ÆdÇvƒ¾¹½o-&UÕ¹›±4§›[{v;üâþáˆhìRŒDÊ–¹‚—ÌÒP³J1$ÎëÜÐ:fç[!ª„oʲÒÒ1ºR㥥 B`S¾ì}~v¬?øyü¡-m,u ß\Èß\ŽûõÈçï]½ùÛÏb4&¡6fe&*ç§>åŒ1‘ìÆÉódx×Ujç/Gå3í­¤/¢…dñí¦¬ëqwI6cØðrÜ×Á÷i;är¿8b¶{BltЈ¾ìJQ%výÍœÿÏÇýæ6Œž|æa÷¹NüóçÛ>¬1@*ÃÈ ëzª¤È20%‚pj_ÔÑ^A+²Õê~";ÂÅ{k$Ôâ=)@À×Ã" —ˆÀ­…³1ñÖ8‰…LE›ež*½<ÌË8–ôf͈h³Ù¤-Çõäá¡â%zÀm`xÉ0Is¸¹FD# EY"38#„“²ÈB•Z‰;õ½ÒZzeâ ffÈ`Fjf'›¯&¾”iÈ ªƒÊä–8¹™™™ä2X¬–S¦ÿÇLÀ4MR4•]H@©|Êlˆœµ-îüèÓöl_tPëI|tº'D8^'⧨ "§D*""-‚»â|{aa–íT—ù¬³§E²2 cÛÛ¡'ÜXxHäýX^-Sv©>wÃ:ëgILJº;?s#0‘Ei! ™10 XXD(½†eˆh¦ ·žÈ*jND.´Rœ‘2ãöö0„s ØYÚ{øniÒî6Q)e½K9vôH´#Í˹>ýd¥¤a—Q¶ï=¼{øvIjÝ•9Éš)bÔZ­;€*+@5bÖLvhQ™—¦R#^oˆ§¯ c9ö•€àR–ÖPQ2‚Nd& "EÞj­ÍzfIt#©é‘™‘_á æÌ0ó0 ÌœùU½æÿÏÈLñ$â×W23QºG¤ R‚€'cXd(»r‹°Nœb¿Ú¼&¢Én€Vš”UB ©\.Ì®Owyšîf&Ì Ž‰w½w3“Z€‰2Ñl3ŒÎRR Ñ¹Lï’U&¹»]_ÕG¿ËݰgYH(­F¥Ÿ*ó¦¡IHk¦ÅÖE§C)3:çð)ã ã#¡ï\úÛWíùýá'¯¦½c¤i$ž‚š‚’[xC¿F# ´˜R‰µLݰië:Á¢L9p*uYZ*A½²SÁLØ0š¡Ùªª(ÄT4êíÒæ|Pú /í­â·eÛ9\žYÝV«” 8Ø~·Ù;=^ìv÷o>xðo´ßåéDU×lÄŒ,òEÇâÛ ¼³;.Óç_ê£?ü2žÐá?zcþ›wƒª¼Úο¼A±­‚R,¨J·dxa$Δ¾¶ªÃ±Ïé(ÌÖRy ÈÉ£·4e$'9‚›¢œió‘ µÊ ¹¤æ±24oÄ,c°Ü73U ‚£Tm¬EDlµS}¿sv!ɬIŽ>/m³Ùd4VÓ¨aˆÐ,ÏÌ!XƒJ)…¹·–™=4л÷”â‘ -:ŒÖZvÞèù0CÝB“$3Òˆ•Oì‡Ã¥™f2³n:™5Õp鑽Y2×8å@ TÁvpÎã²,ªú:-ˆH"bÏ¡E׉ôƒè;Fz„WdžzïwœRhÈJ ÍS—úúÝ2ˆ2\ú*·/×E—³)¾ñX^ÜßsÏ?»X?xŠÍ6øÍ’~ÐæaaœëèËD»ÐAÂ#¢ðFÛáA k“$l¾È§µ|ûòbÚÌèš½€²Y®kˆL&¦¾žd=aïad{ןù÷žêåyüÇß ÍgwZè"ìí+ÙV6w÷Œˆeg×t%ëpQÎÙ¾w~Ÿq|r¶yrÆãÆ @áøù+xæNùk~ûÙ^Ô|g»ÅžåÅÏ¿X ;Ç1ƒ¹×ÕgRQbí‘eê­õÞ &)™ùp–Á›éåu%p’pX£¬NuŽ™:"K)ͼ֙˲wedk-YÍl®µ¾¦à+ï+D"͇Aê_m8jÆõn§M fŽÓ3Ï|æfNXàžXͺT™ì5™š¹y&i¦ãŠÕZmTœ1Ô©ä‹–‰^ËyÝCרŸÁµÈ(Œ½ûÑמþ×ÿÍ4ôŒ¹dDrf «u–~Ç´úqµÍ…i/Λa:Ü«…/àch÷œ€m:H”Cœºž'|Õ–¾JÏšýz÷á>_ñ·tó½ÝxõÝ(¸Ûª›zXÛ—×zׯ ·;ßÌåÉÆþ{¾ÿõMOã>8Wz¥ÿŶXèÖdÜ…°PÝ´Z/}>çõº~k·]ŸñUt^±”qÔ—‰Ð‡í‚Wà $I½‰ú“ñôI}ì·ï_¶wMò ƒé`sâU›b§ŸßóÏŸûÛÓåƒíýC|ñý÷ý|7®Ç»"çFê}]f[ÚÑüü'_N‡›öGçïžã;g¶ßÜÉ”?~iÿëo>ý¬¿}È^£L£^tÒ<=BJU]”4Ù3z_]HrT–um¤²JFt&apP‘…\ÙUŠh@iIB@dF¶zI¯ã°prxZç`If9i}±¸#SÞrå^Àƒ’˜HgQ-”z³‘‘MiU6°$T$º¼H:,Ó $Ó)*@] Œ†e–¨¢¬¦E‘…$D3{ö!±z*3£ˆˆ ã¸_›a¼ù¨œ-zê«áÛ?ýôWO¾·ÛKqêE ÄÀ«éìòqIïãî®u¬/æûç‡Ü½ý7×2DqPç$'[Ïqm²ÂYûT.rʬO¹Z:Ê GŒ˜÷Y–T^®ÍñêH¿ü|Àë›//Ïú¹ìÈézÉOoòÇ¿ïÇ®Bôì:ž^ÒCÊwwܘËì1â Û‰ê@$+EÆjh}±Øïn.>¾‰_<‹anhòôU´{Ú,Æž"†QPÇ2~q¬›öÀr¾oÞ̯3þ¯Oã;—åkgóƒm¶ÊÎtXËËkÈë»mDz.8øòO/ŽãqùÞÙÙÅY³•¿¼;\\é¸f)…Yua8á“ùż‡=½Ü mn»ýýo_}r//yÓ‚Ô" à“!Pš¹HF„h=Ù±Q¢^'|ZiTõ5†•`NDÆ*XNÒ"æã²j8¡U|Š©'?ÍæLk9^_3‘–BÉ­;u3º;¾ÂƒÞqB9ý¤‚ff `}P/œH ¤ˆè„O,3"âO5l"RUØcPgæRÊãô¿š¶oû×jh‘<2Fª2g |1¾ÿs“—ÿÓ?|ÿ{gCÌ"eØ]4³'Yk1»øðá<Ïd6~y<ÿÅgür÷䢈’ê”[9î_Ìùë—.ehúÆ«;ï‡û`aæ!"1‹'E£öÊäÛÒd%:ïT¼æm»øÁñÑ=¾}½|í±œ÷5vŸÇÕ¾Xÿ0ë=«wüä“ëu=|÷vòòÐÖ5æãö—× \—Mmœ[¾ÈÖº^ïc];ÃQq7ÓO?yôIk¿ºYM¯¢àøé¾üú•}ãìsí›-Yn^Djé×Ï›EÙ–~q^ º¶³ÿ¼•/ÓÖ¦9=z`¼×[÷/?C`XÑð™mgÚ<ûÍóy~5<¹zÙóΟ.¹‰Š¥²®ðRJ[æ^¬&QuOÌ«3;‘gìœpÁ0 Ùí„'H-¶jfšÏáƒèV+ƒ|îÒ•z`Œ:ôy7â´~¿.Q´H °âÙm–¤B¾P‹¸ÖÔ°V ­Çý Å+™/Gå LDÂ)ÂA™@Ðé ˆˆ^„"É€ ! Ö ÖÞ!# QÙqxz4o.ÔÝ0'’Ð Vc8§…ÞÃ!ºIQ\!ò¢_ûÿ/?S?Œoœf6³Ì¤R"ž *!¶±rþ퉮º&efz–ä•}ßø÷×úû»‡¢œN‹…Åé¤ü Z‘ïñÅËPn:ÏA?†™ŸÿøÕÙ/¿œ+Ïœôj~5ËÔJjÀá¯|üÙ‹ñãÛ$Ž^¶/þÓkÿíÍè½€èà« Û‡u-E’¶3y2@Ò¼ÔÿóUÕ;ˆlzÇn+ý!pàNð£ëUBr=3€€ÃJö}ww€dż ®Jİdãʉ«"û?Ø%öëýÙƒsÅd­¿q9lKýͺùü´v¾n¯{J¹K¼Ì7ãÑúÀuÛç%ɘ ÛMfÃ0ùiv Ç©ˆƒÈ’D”$ŒÂÌäÀ)…G‹”2¬'ÑÒƒ•za0A¥¨Z?Žª'XvLjX=”RÜ=—æ`îáÌ8Å+'( ¶P¥ IDAT•þˆQ(qañOŒœ|…õ "úJ_ñ§C¾ª‡G(³®a‰,L©õ«>ÛÌÌyZ "m]æþR‘¦²Fk*S·kñ«P÷¶Ý^¸T°¯½…CÀjiÓ”œ¹öACî=°ruÏB1¡ ¨J€ÖQûUæÔ ºXKAÈ—îîNÌìˆË"©SO’˜¡y€À¨ ©¦Z<u½ÁªG ¨Y`!Tx"˜gk$¬êR™€L–@<ä…´ÁÌpµä™ÝÔWC]ØdÍ”’E!ñT)÷±æVb.E˜Ü à sP‹Z7K,F5„ A’(²Ö³>YÇ9U¥ l¢vPãaf>Èá‘*‚t¥¨!„€ÆÉážBðˆÀÊPB” J`¡4†] ¬Ñ«™)U5a jæƒD}sK!‘ä59¨N„™Áîc q¹‹ˆ‹¸»©ºcÌŠ23'br†Z22‚1À7s"å–™-XQIä1—å@ÌâN%PÜVhrÒ€.±e#FqCu GbÊŒ HÊËÕ ˜¢,*nR$Yqk¢H²kÓ/>‘Ïuþ‚SÖÔK¼J '.å¶§çÌCð™VÚçÎ-F3Šn¥º:ùt*yµ†¡mšÚa¨U‚¸#¶åsâʈ¨Öšfmq !ªDîf!‚anE›ì€µÄîãá7íç&ãTkSàÎ`6‹ÕÝLˆÆ—€< !5â<ãX5““SË|7\«æ€9D§†Ü$0E«B¹XdB0x4ñ}¢ÔŠ Å`9¹«Š:à "ÄèHÛÜ×£iDCó®îÎ’4M£ s'Wh½J4ÔÕÐ$™Ä&ˆ÷}1•ÞÙrK1šw1 *´ô ‰DÄîÐÎÎIá,ªuB‚Qc." ɪr'³a¨K­2AZD©ŒZ¨1ÆZœMUáNWgas4Pur RÕ@Á<‹¸È\ •ÙÌ‚°#"r)hÕ\X…`Ä9ÄÈîÊ Ò›QG˜ ¨L©ŠAqìÛPC/X4 ¸¢«h{ …€‚äp4©B˜Q d>Çš4‰P¸¨å™}Ù;rvò°Ý¬JÃÞªk¼\hmR{h¡R%øÙ0¬>Ô ÅÄšŽdXízj5…ýêMfw±†­š êI¬_5îëíÚn?—jjùxV̤®&©É}ZÖ&qÈ N«ahÍû>w]çV: Ü^úʈJªˆll¬mïœÈ"°L+­@³Êê¹'k&[Ëå\‚—ÅRêKñH»eÿØúto['-“’]ßõóbD4aÇPjï¥_«`aÚX_Z)%„°úêÅjõ¢“¶ LD”sSŒÁó"nõ2»†ˆ<—£º…Ñ핚™YˆC6«±I£ïÀªp€ªöäÖJ3þ>Ô`P‚1e˜»Ç˜Æë«¹ EP 1:²yI!¨[IÌfR06õaf!cb›ÆÞ}$IX̪™I 1³Bv"^Šê&`)s¸+åàɼKLD´e1»[çÌnDN,V¢±³r%etVU²¦bµYsk(öóÞãØºpïÌbq"fd*50³¸fXª%ÂÃlµr·¢Õ,Î%>„*T'óRV.]vÖ:\šµÝþürgÞ’p#f æ>ì/‡ý½Ø¥ÜÐ\vK›bÍÃ$ÐjÐÕ%K!tK¢æè´sIWžƒ«•HQ"ȹ.3ˆÍÅ­^¶Ýýíf: †Õ¼–²U% nâ"/›®º*eïñÛÔ›¡–šK’Xj˜Í1`Q‡ØV­ó ZÕÖ:I¢4Ž4®fÇ“7!Æ(Óµi$ GA$£³»fPÕ-´M’÷œs×ufV­Ä²Z2zfnÛ6FïyYjì¦cFeÔØQT5(ÊÊú²I0÷ÉúþÉ-÷¾:_wÎ>éºlSq˜{J"%oÄÔ§N¹)«>If£¶Ã:8Ê:ÔØŠ…¬Æ½&ÆØ1眛n²X­%„À%›Q–9¨Ÿ“À#­X}¥%„ ÕUµmÛ½½ùúúæ|¾3]K}?gò~¾ìbªE›éº¸7MCà #s)…˜…¬^T"*¥dÊ16MÓ™U‰ýÎÅKÓ.ç8!à©ÝsÓÍí]ê¦h»³—/¯Og/^ìºnckÓx({y:Ý ó•/ª`>”ŽS5Ä®•&™ÖyÛ¶“É$÷%ì$òÒ4 ²Š’O£¹î鲺zäéÚ4÷{y®k‡fVò“iÈ8¾1]Ym6usssý°˜LÚ£©B˜’kÓlt]···Çcß7fžÎ:MbÃÀ˜Ð ! Ã%°˜YµZ„¤·ÚHÕ›ÈJ Ib6…°šUS+581м䅔"ˆK'5Qww †‘5׺ÂA,h ÈÈ`"’‰,RPxŒáÜ¥Vu® ±ÜWrs'aQçj®Œ®ô°c€Y£ «à\ÉĪæÄF¤„ùÄÉ w§p~s{g¹Ÿû*âhÚ !ë£QÏ:<GÛÚj™cÈDT½gŽLÁª²8‡ÚÆ,äÕþd2©µ–¡ õëLBì œ‰ç!¯$cJ)!gwOR"&V…ˆ…0Ëe¿dA:´£‘rÄÌfÑQBVCŸÒ„™™BŸ•ÅCDlâ|¡‚Ó“8%"%Jw¦;}¥š+êð›G]˜_œÅIY”I3ݯóy­é¸¨“p_‹‘uMˆ1îììL&’PJaµšƒÍjÓ4j…dÐj®‘j®ˆ±©C†ŒXŠ‚˜„¯ä4õÃ0! I ¸Ž6êølÚ$1³ f^®æäˆ°ª#VÅDäDB€¡m[Te¦q 33q­Õà ¸YË!tMírÄÈ™}¢NkZuÃ=A´6M3*œ;ˆEˆ\‰ÇB 3ý•@D3Dbg&vw‰‘È«* \ÀîS|N+|£(TU µ+ȆÁ,ø²û»šKiÑ×ÎRÙfJhøÄMÇNñ‘ƒõÀΠÄẪk­Æ”„˜ù`F4€‘]äî¥m'LÉY­$D“ A܈‡8·NDQWOA±#fæD e.R£#jÅ\`·â#ÑD5q¤1Ç÷MFÇØ+×äMÔ`*hXchWËVmÙM8kuZc1GlT—J¡8Õb‰ +aðýéFë°4‹.*%6Mâê)qö@Ó‰º¯x°q‚X/!D,y¨DœŒMÕz¬\n;Âæƒ4L½$@&±0…C$CÁdFÁª.‰c2NŽ"ÎÁ˜Ôz-lʦÁ}Æ¢„jY&¢VÃÜ«6Ì"’} b⨥"l€æRÆRyVäkJ)UŒJIjî¾j¨ä ÃÄ*€¶isvs Ò˜  ‘PNd*Æ¢­ÕBIÖZ«6'2sE!W¬d‚°ÃÌl*€Kð¼êcl*r­-S[Jof1ؼˆ'1 Ì<Ú/3#b3 &Däb&f‰¨°0%˜B &PÈ„Œ"(8±»vÒž9Zî,6u22€ñl`ap¨tå:œ1™€î3Z©#˜›3LáÙH W«h½#¢"jPáh.ˆ+! ÆfÆqE æW·D ‚D&»¹“Aˆ“WïB¨æÁ ±@HÜ-ÅÄ{/8`‰Í‰Úb„ÀÑZÉ1%‡ÈAă±ØXÿ"¨VŠQ ¦4wRcÍ€3•ˆáäc î¨Nþ©ë eËÌãÃ?';˜9°Œ?%bÜ=„@æ¨J€%Ô*‹0Ü£#¥VUÝ*¬PUwO)ÄÇ–ôðƒkº!{]CÉ…K4eLpÖ²ü)!„rEñFD¿톎½Vs®˜VBe Å4kMR•ŠT ’ØFÒÚH‚!‘T }³=bê‚"÷’š@B–9%T]‘ƒ‹:ç¾í`‰àT 3p¨ƒkD wªìà@®‡VwfQŽbV™;JcWþBꤡz[œˆzwÊjmlXÉFÀ¼ŒÙmR¢Ød_¹•àÌ:0Á½À]0„`ƒ'T ¦y înLîBHó:”lšØÅLs ¾¢H˜¹z­0‡‚eP .ÌjãÁ‘[ µŽ#×`ªÌ\ð8÷…aLVk‘¹×ywvcCCɽŽãVÈs­m¸´ÜYž?—L'⮆¦³R÷W½«­­­ Cn$aßwÚéÖæáSÜ´*·Xô>áfM£C¬˜îãm÷ì c¡6f”âS0ØÕ`>7eXßž[´6MÖÉ$Yò2Ùàì¨Ãn_Ôh™mÚÆI0¸óX~-œ™‹Ml˜y5ìåýáðd#T-»¨»s›7GÖ7VûÛaâµz¨™b×yá:¯U³ý{ˆž‹_j­"cV}Œq5 ž\©°ä€Eˆ;Èb|SŒñÿ)ϹvEøˆ¥ßÁfµ‰q5¸; s-^2[‘E˪÷ah™j©I˜˜ànlB­øÐѼ³Xu²¨k›INNûço¥«±Çm‹«bk²½¾z4^Ú™2œm¾;lÑJµŠÁAî`QR'…d×6dØVàóó ×ô»}°6è¾Å⓼½è1'ѽù^ ª–,°&òEÙŸÅ5 i®eBÔ8jÑ"D HbZ¬êJ,†:КæPj&¾¼Qœ ¡Auô™e’‡’%‡ÉÌ BÀæ‹~bˆ™¶í‘åÞëï¼éª»_µo¾6ÈѤv¶yè]?ý÷ÞóÏ~ñ«û˜käUoïm¹µ9Ó¹ìåæÚ/‘6{µBºX Óµceû­R²ráâαo ©)¥$÷U­^齦Χë{>„†º­µp㽯«rþñ¯?vßýa‘kÙïû·üÀ÷uW?ÿÂþάM^\ºÍ>Ïgkíïþë³|ô«—Ï>{êª3ïø‰Ÿø¥_úåc!ÿÔßþ;ÅÓDtgXͦGzð±_øÿádqqøê›^ðýïú‘ÂÒ×>¥ú~ED!6Õ@­5„À!@M “¦­Á7¬!fÆpÓ”Ì<°JHÄæ03IpÍÅÌÕ’ d–™Xxôöƒ“{ *Ôj 8‘óÄÜÜ d¢€U%¹‹ƒæ[Ф0:1¥”1HpÅ=bÔªY!Ï4¸ÏÛÚÑ ®²Í­ýýXri)ÓépãQ?vhã#b±—LH9ëÐctn.†ñ[fnb:|ͱ›n¸±}êëgº®'œ¦æuïÜãÏ<ýÔ _z+-Ÿþ:±K}YÛÝݽtþÙ§¾òÅÖ<„»Éµ×ÞìÇN„v9˜—jõÂîî£<øä£ä|y}ÒN'›w¼üµ³ÃÇÚ LÛyùù?ûÈc÷ß»ØÝÝb¿õΗÞq÷Ýe6‹û1­5ÆèH‰K•¼bl—rm³¾™­#.x R=”þpûÖ¿þsO|è÷==mšKO=ökÿêWÓÊ>üÞßÿÌ'ÿøû¾çͳë_Ô:‘û|äȉü‡ÿ—ùà¡õ¾_uexý›ßÂ'ìïËÖÖVÎy¨öÙÏ}ú?þ£—¿ò%ï}ÿ~Áææá­Ù~ø‡<6¹ÖígŸùÀ»ÿu;ÌÁG6?ø?üþ~×fÛ‹Š\¨ýïþÖ¯ï>üPÛçHÖ¤´»Zü÷ïïÚòû¸¼'"jÝÜÜÄÞî«Þø=¾¾±l»Çö.áOþó¹¯Ü3ß¾l¶Ÿ‡³÷vöoû¾ïºÙͬ–vÒÖù (hhîÃ$…(ë÷~î‘­­?¿õµ¯)kkÃЧØ$md75ÃÕïxG“y?”“7ìÖ6|o÷̉Éu×¾øøñkYR%™Sü“ÿ[?÷Á›Ï¿õåo¸8 ;—w?ûáÿ4¡Ë´uÓfR#RÊËUY.†/}êoyÝËo|åK·±éÖe<~ß>÷»ÿôo}ûuw¾²¶KI…ÚñOþüƯüÀÏüäEY³º æøã÷?õüføù_ûå'æËL»Ûç~ï·Ó¾öÌQtÌÓ “íZçóùál·¿ðy/¸û+hÏ~ùÂå{?ð‘Ub¢;ADúahRËJDV#·†T…•¤º£2Ac ·:•^ÕÍ3C¼“ÃY˜‰HÑJêì@Çc jP2®a%4ìa®ÂL •ÕMÃjÔfrÄøH‘T s­5xY–àîµV;Hdx Ñs¾Éd2 C5 ‘iGמÜ>»â ±³½?ëùz) JKjÔÒ¡œ‘³i)¥m[ €ˆ˜™ˆË ! óôðFyuýõ§Þü–ïàŠ¬öÈ#=üåû7·Ž6'ÎäŠó>ùàç¾ôš×¼õEwÜæî³Ùìܹg>õ©?ýÂ}Ÿºæ¶—zêó÷ÊýÛ~æçd¶)¤/>sáÃôõ?ÿÜ/¿K‡’ÚÔ÷}B«\f“I{\~äoþÔ¼û·ÿàCüßÿ—û«ßü£?<÷Xs]Ÿî—CÍ;‘bõwþð|ðW~áßñ†ïxÓBúÝêmµ/}ð/|öó7œ¾éÛßò¶xèXž®?úĹó1þÁŸ~ôµ/£nÚNOž7&­Þþ²W¾ö­?±›Wˆšb7ÙïŸyòá“Çn¸îy·LŽ>?ï{ÕãGf˲|pww¯5¿ûWþ¯5Ÿ_uêäÅ•÷CéÈ1›½íGü·ÿñÏ#£<Èr¾óÿâŸÞ~æš×|û÷öì3&u;r¤½xõÉû>þánÂßv×kÁ³E§aCÇD‚1Ù1VC Òê²19úµÙ¸Vsg!w.93¾wWÀPÄeÔÇqŠ ß"!6;8ÿçÀè+ÿ? ™)‘„âV´rÑ`ÖŠUeQ2‡±€ëÔÔK&­œÚN‰ÏæÉÓ_Ûž±š­ ×¦Ã‡·µ _Û Xs¿Ò¸žsu!Ñ0°98{N"ÒïíNhH7=|á|õk}h¿àöG¿òà#÷}öæ—ÞvÕÕ×?öè#mÛ–RlP ¼Ü~¦ë—ÇOߺvâ̪Ytâõlt÷›ß,GŽšh¦µÓGæýÍgöw¾øñÞpòD¼æLÞqÅ2øâ–Û^± ‰%ä~G'ô½o{ÓFý®y? ½é¾ÿ§÷ÿ‡Ç>vöäæ£â µRtxòk·]µþýóoìí/$šX¨BYIS´xL4¸ÎøðûW IDATzúì£÷ïþ)(P561°Ó™Ñ´…  Ü¥œ-µîºX®šI#¤^KM‚W<‡‘¹ÖZ)’.Zó˜Ó'3Bqã¢8‚ ž¦‡wW7S'Tòh ¨Uv°…Bp§’ €Y™ ""2¦ëk­,–8¹CH˜ ÌDtôèÑQ÷‰HU›Øj¿ºî>ïÄúUg¤å³Ûõ‘g&Ož©ÃDbŸb1/æqS€ ¹mŠÓ®ÛÚxö‹_;Ý—:†½U(óÓWÝ™Û.Æ „ "m#×>ïÖÛ®»©oE¥-Ë|öÁ‡¿ú•\xðì)AE×2›µòþÇ>øþî/Ãí¯yÕÚT¶BRifë×(dÆ÷}é©/þÂ/\÷‚Üõ=ßuüØ©¬µ^í®ÚÐRÑHlÀÈ…áiÓ,V«5ãiì~úoÿ ÍÒëûíß ;O­Ÿøø§>óŸzåkï~þÝß]"Ò$áà»HóÕ3-wßõövó*£ÐR®(›.éÌUOl~Í4š‹u 'ðf7m T”áÄb‚‚Ÿ˜ë§ÿèCg¸9ôµZG”g Ì5ÀAæ±³à>”!§µÔ¦â˜6Ù0UoÚ°¶žËÃÀ<ëÖš}dm‹ºéEW¹Ì–ûóØ$L$É£D€ˆ\gSÙö-ÉWz13HDÄÇ$†Ú¨èìèH<fƒÄ˜M™x䀸»¹aÌ„äh@N0à¹I"·\5çBc»A€»ËÅ̸Úİâ!8ŠÌ“ËVZ³PgÍÄÛ W'_-ƒ¬„N¤|ë±áôÉÍ,|vé÷>ÅO_JÄ­ÆÊÒ4Þœ³I¹”!P¨ÌTzç©S€‡RzïrÓ/eqy™sÎÎÔ4A`*Æ‹¡%‹«~}“6Êá#ËçâO¼§]\~êÜ“;óUXô{GgÜ5A¶»¸yó/ÚýGïßÞ8öÈ—¿´´Õ /ºù®7ïú‘«g!vÁ^üº—l¯.>~Ï—îý̽=ðçù‘ë¾íÇ~ðȱë%$è0¬Víæ46Zkm,Óþñxèéù~Z›¬–+Òð½?ôãÆCŸÃðo~éç©çIÜ¿hÖqX­æPµ‡«kÏ4[¬²…Ivq*fâiêq¡™»Ö¤jì¥ĈeÖ f´ièëþåáóýÈ#ŸûäÑõY3ißñ×6Ì®þÅŸÿûÒMCÛ ¹kRÌP\#KÚ`Ô¬DV¥iRkBp qqù%·ßñüïxxM“ˆ¸öó@¡›³z!†Î•*XÑÀÁš•B*EÅL¯U@ÍÌcT3Ž©Öžì… ÁC6Q: ¼‰‚ë•¶/#€CµÂ!RØ¢ÕB©C27}QC=1Ø˜à ­B˜Y½2³8»J=òPƒ÷ÂÌp ! à ""NDÌîmäØmx=Äý·Ýx|ãÄöÐÎ/îуâÜNÈ¡îìûyµZù•z•‘1be>àn·M¼õö[Ñ_~â±'ñõ³—·/\wígnzQ6ž-OÌÚ.€\­ÕÒ?ö•?û‘åǾˆaxÝ[~àÔmw>ùØãú/SHË^m¾ê®»ï|é?ôØÇ~ï½k=¯¾øù÷üþ›~èåøꦧºÉ;~èGÃ;ü£ïÿÀWï½W—ŽËöÅ?üÔ[ò¦†Â ÖL:fžÍ&9W²Êõ÷þå»ï¸ê†Ûßøn)Ep4-V%ïÇоé?ö±ßøç[gÖ¿èÅ5t)-Ü=Æ("æ0›ÍÜUmÉÌŠ'wÛ[ÕFÂDR)Š¢)%4MŒ1†Æ@ÅÔ”ª†¿øøŸÖ¯?ü÷ÿÁß߸úº½ËsŽ«¸¶y9IÍÔ›ºg.¼„NÚÎ-)ep Ò0Ö–Ëå`)ÆÈÒ³«Ù¥³gœ:|2Më»gÏ]|ø zôX:|ü–fº7‰Àª;Ü1&Ý+ÆŠpÀ¤—™YÈŠŠ¶~ÿ§†´èˆÐJ¦ºXñP»ÕÄKDËôÈ—ï¡_Ò`Ì—[2]ôåôæÆpq‘®mÅ,Ñ>÷¥;½~ßÃ…ñ«¯{×¥4ãÔ燧yRªKf®µ”ÝßúŠ×ÿù'?ñüËï¼ë¯»ãE-ïì,Þû;﹚Ó—½ôð‰C£ZÜI„BJˬ jšÈµ• DZ CÓ¥¡d”W}‘U5€àNWX% NflQ©j÷ww÷ZŠº)%hà zƒ9‹³P€»U3‰¨;KðœóêäÕÌ£àñØA~TúRÊÈ ˆ1fwŸÍf¥_E'ë𼱕yj:Mrr ³Î4X³û{ö©KЙS ÒÀ@q°±ÜÌÌlss€˜LX$f”K«"†:ô­M¬ÔÁuÅÖ5qÐÞ÷ŸŽyyæÔÕH³aºn•RžÓ|®‹] &AÕ´ÙšhÎ-ØÚõ9¿ôÅwO·óù>[sŸÚ™-—1çÀÞ—²]*MÒ_yã·_xôë1¢”"µH¢ÔZ7oU“îûÿë¿õþùÏÛÅ{¿û‡þZžm=uþüt=Ìf³½Ó¶;=;´%­ÂÁD¹ŽÏ™ "T;+‹8yÙà/?ôûóíý[_{÷æ 79_<ñïùµµ~ÿ5ßþúk^pÛ‚CDUUW=lÀA”ƒäÙæÚþruäÐáHí$NÚÿÇÿÓÇe¿åYYõ"áäá£ßý¶·¾ÿWeÚ´[Ô ÅTO?òà¿}÷¯¯ñb%½3m¤éb=¿à–¥B_ùì'äž{ן½¸oxèÑ'ÚùüÄU‡O^}}X߬:#—ÂÜ”Rblt$xj­%×. €B)Åán^ý€Ÿ£îa¤€Œ¯\pÐuøÿMØÁN&3w3¸ÙÁ‘PU…ƒ®sÌŒ¾)Öò!f50°*‹…îJ(*Ù['S-Ì\93‰—¶pо—›N­¯ŒÁ§kÌV³µû³./òÐê\ò…Åü™½°¨^«•²«‹½ÕÞFÓ–F“¶Ì<ªQ;éÃÄWÙ¯»á¶W|çù{?ú­çÝÔž¾ÆÅQ÷VÚÇ. ¬¡ÌÖ×&ÓµÅj>aÚîWQì¾ÏüÙ?ò‰ÄTÊîî¾EàžO?ôå/¿îÛ¿sºµE)öy¸ÿs_xäã¿áäIÎå½gyè±~þ¯¾ómgn½®¯Ýîjõ‰?úÝù3ºî†§Šfs}#˜÷E—‹x6ápÑ/‡Ãë÷<ô¥å»ÿÏ¿ö3ÿ`vÍU;y¯mš~gyîâCï{ϯÞxõ1;r¢‰K,ÑF¾ÜÒ=_|8œ:Ú.—7½X×Ó-¯zÉ¡µî“¿ókuØŸ^wo“>óù6ï½õ{¿óyw¼öòþ*jÅë$ÅÊJ–µV¸ªMRüÉŸý[¿üÏ~ñ‡ü'¯]kZ邇C“ÉôÄ,nvR‡™ó³yÿt×]}óÍ÷|ýÑÏü£ÿ¹l—µ¥ ³øoüÎ{ÿüºCk&]îwO®O§yáæé#_ø³?yúžÏ®ou7>y×;ß²~ì¤wV!Šb Ys ±¾ÄMsðRÊd­ÝßÙmšÉöövÛ¶`2b!R­’‰€2¬cÎÕÆy© 3ïÝ„QÈÝt*@®Ê¨bc,Ècšaj8ƒ]˜Ô˜ÈGú‘©¹Q53G£·º‚¯z>Àãår™s¦¶af}Ž“ )„z¯eÐTgAòî²|ùa{úÜ΄û6Åê.˜È²ÚâÒ ’û!ÛP>cÓW˜9„ÈXbgêRâŽÂéÓ§ÏŸ¾êÌ©ç?vÆcT¯$1äÂÔWY ¥Í#‡_z÷«?÷ÉOíÿÅŸørÙ_º°},N×6ÖˆukC ·ÝË_=9¼ù‡ïû·ýÙ]+Õ†2kÛ­“›¯ý«ïœ¹zâ5¯x éŸüò/w}ÏóRƒ®oÌn¹ùEßõö·ÏN^Ó›‹}–¦iš¢>uûËý“k?öãÿÕGÞÿþï»ïïþíŸA6/¼Z­f\uýÕo¸ãÅ×<ïyWŸ)i+Õ뮿~ÿ ÷}üÙ§_ñ=ßqaM85ºñâ[×ü'ß÷gùµG·›ë]|ý›¾ç–;^±Ÿ(…™»7A(P:|²ˆ$®‘¦ a¿ßÿ?÷7ÿÕÿþ¿Êj¿¸=zâ¯ýôO_Zì½ï½¿ýñO~æ–—ß5m×DÛyÛ;û{Ÿûì§ûó绘]{ºt“{f\Mª·]*f!„Ó§O¯mn>ïÈ)X?=±~„â¾KÓ5Y«ÖaØ*È“ÉTsic*e(¥ÔZW«UJi†õõõœ3Ñ\ÈŒ‰žs ÜaPuœã… wDg/5ÌQkWê‚£Œæú ü&137#"b¦6:$Ïý±™¤ž2TCiD”Qm<ÊÃT±ÎòükŸÿÕÅç¿ò…ßyt{²N‡Ï>¨5í7Ф Ç´2iÖ£¬ÄK‰g6w6®ê®½ú…’FnÜ=ÆX¥š×™´Kïëj·]_÷Æ4biÕº}ëkà©×Â* àÁûU»6™­o¬O¦‹½ÏüçßK5ñ»ßõö“/xáC_¼ÿþ{ï¿“H®½ÚxëÆ[ïè÷/}ê·ß»ÕL1n;òƒ?þƒ«ÍäMÓc‘—7Þ~GËüÁßþÍÃ×kgΜyÃ÷¿Ã6Žlïï›YÓ´Ab ¾Pç«å0‘ œè«ßøÖåËïþ‹ÿQÊË–SH*›GOÞxÇ4TbGÄà¯zÇÛ—ßvÛ¡:l:žÊŠ=6’r®×Þróÿð¼ÿ¥ ¼â½õ°^Y.Q×vóBæù-o|£”×qz”hÌjdËa³™*ëûþaÍýİÝ~vxíGêg×*ôóõfÁÒ$×yØwÎÉ̪î¾Ë¿ÿ³¯Ba!ƒ…$%QdД쇤 I‡e?øÁ‡_~±­GØ´%ÛvØ~°CaÓæ"€ ¸‚A‚ †À€€g€ÙÿeþíÞÛÝU•y?TßÁ |::ªºª³*O~ù%Oæ[Óz¡T¯¿´|è¡'žüØ2MýQË¿ùë¿1½ÿ)¼_aaX¤‹Ã=],˜ºÝpµàfð´ìïLÛe^ÂQëXVý“ÛÈÅÝ÷—‹›ãvup0MÓ¼¨ €8éˆÈBDìhH %‚ªR´Æ4ë_v 0¨:' ›OBsÀ³ÀBRìt±¡éœdæÁ„poà‰ËT’åν´\ä|ôÉð ÿñqƒˆ S0USÎn©¶­Õ“gþìó_|æËzR»(©_ S¥àÔwDTÇmê’%ë»òè[|Û½£¿ô uK°%RŠÞÝgOŰ]/JèV{#9¨Ä4İÞëܯçê”bÌP"Je¥žŒ{¥ØfØcI ¼ètÜPôŒN¸gi¥œó*§ÃÕr=Œû{gÚvëɨz'}«ad÷œ¿$êòÝnGmgW˜=6‰›:R$9¥ÖÚf»Õ¬Z˜Èc«ØÖáüÙsì³â2ixOêSÉáÄ¢ÎÌŽÚ ’ãÍDÄ!»{ B„†;›Áœ<“9ƒ\µqre5³p¯µ&ê8¸²¼¾]ÿËñ‹d|äg~vsË'¯k§¾ñµçŸì!úèOý[yqÿh·:.fM§œ(<¹×`Ó(U„†E!¥,ÅÆš´EÓ0ˆÔw.4N“ˆØ0•RÜ]ÀêìÙi®™AUDsw§3i¸åÍòÌðɘ²Y„y—vq‡”’ªªzš«ÃH›ÛO$Iº¯ï͵ïûˆ‡ÉQ Ü÷W{Ã4’O«eÒ:9(qóqó²7„!6Ö™ÅQržj’wì> ‹®¥Vƒ)—ÒÏ €ƒ¸Y°y*ûÔà°‘ÌOçÞ ŠÈ ET莀Q€"D„ˆÌšïÖtˆ$@ p FC$€n|ùë9œ?ý{¿ßU«IÑÚ¢Ïÿäç~«K{{{ó#sNÓönÌ@ʳGµäS­.¤n‰…îz¸I¸H #nÄÑ")1sDd¡ÐÚÂ$çY·æŽsw0%«EDus÷ˆèr¶:TSÏ’EºÑ0W<#7ná‰(kó@sSP}ðPÀÒèØƒpj‘e€5õÑâ˜ôèú?vw"šó4(7sq÷™æ¢Âïºï¡¾tÞ4Kâ$ÑàË „ˆ-@ÑØ/\Ú¯µrA‹pwž×ÃrÎÄŒ¶ë1ÿ†w^¼³‰˜ßÈà³Ï€0˜gîïf6e]·ˆ¹¦[@[˜239yJ©ëº<—Þ"áà`µë~¿¬ã¨ªûûûVÙ}"ª>ÖšJVÁ´^§nÞ<Ój­…¤NS×uT›2—þ ¥ìÓÔw‘Â)g`fŒ7Õ–„g’b`îl š7ÑüÔæŸíýÙÚß½¢ïáŽqþìÙ÷üà»oܾqñÌþ¥ý3Ex}è¾{û¾oÁÌ,¥4µ&"s²äØZÎ9"Zk)¥RJƒ;¢µÆÌbf‹Å‚¸2%7R2/Añ´[PáÌ\Dæe1û‰™9n®ªîLó)3ã$ý¼ûT˜HÄ+‡©jÀD„¦@DN½Ñô¦¢÷`fððˆHŽDÈY,DøìÙ3¾õÐ÷‘¤5u˜¡²xFÀœjŠB •†ƒZIY-‚͈Ød~ÍÄ({Óä$–`4C Ã8ˆC§ù…03Íô‘ aaš@F@ÀpB„Ü3‡Òüûf‚H +Q t||Kºeîsƒªê2'µiœ¶CkNy0/’¶ÃIʶN†*Ûí–“L•»œ›)‹†cÙõD´vs†yJÇ‹”’©ÆiÌ»±¹#2éáHÄI« CŒ% EkÄæˆ d)¥6µ”tLHÔz¦BˆV3 QŒRÊ¥¹Yh&¸)ˆx3T]HU£€€Õt ‘…°z›¨¥Ôh®ÌN4íA”TP Vœ†£õ  „8ÌÙŽàß òš4 2n:å@¨(Š€|ÚTI)ùT”kÂä bÜÈanaTRÖHŽb±+-NB@„͈ ¦V Â@l.èëL£3fáÆª ™³h’9Íùn„Èáì&t „D$’Â5Ë9 Höiýˆƒ»E¶²CÙ ä@€ÅÑÌqzÛ¿QNUa‡|árjÛ¾Y˜yž§„º«gcfdŠÄiþZI‹eï“™Q`8© ë%g™¬²`½9¶¦,ÑZPJ™ZeÂ4M…$€:UrI)MÛÚ÷˃ýCÓ`ÙqD)¥™k’Cv,Â`c€#€H)™iúî‰D”S‡(Ç›‚b;™ç«7nÎ̵5‰ˆœ3ÚRJȦÁÂ3rw]Ç澆ͶÙlÈ#³Ì?xc~ AÀŒõ;‘@ߢr‘%j’ê /¥ˆˆ»Sð¾ee÷¬Í¦páØAJi^"õíž®è0›7qj03ƒð&L€»cN‘'8‚˜Ü=‚"<ÜÙ£„ŒÇëäîd­ߺ¹<{¹W1ÙJ„×-åŒÄn&@’Rð–áÎ`v¸‡Sh©êÆT`È‘æ¶FxÊ )“ƒ’ƒhˆDîn³R6rf–35uPW˜9æi+vy" ÄÔ<1æôQbw'"!.”TÕ“[A˜¹µÐ~AÃV‰²¶ ’¢Y'ku±èŽŽ"¢¶I$¥EW[KÄ{©°\.[kSÃò`Ûm½xx9ã8îŽC3 Js´b73@¡ð䎜ŠÎ³‚™çÂ?931p,DÌâ‰,õ’ªo831çˆp·ðè󞻡ÄÍCˆX$wTm¥ïÇÍIIÁpv ì’¥sÃUµj­•ÀîîˆHREc„ÈÈ#<„aVƒaæÆà$œ@ÛãMÉ âDÅ­MÃΊá~ÏB¡upBscJn1ÈÂYÝA-RÛœþFˆˆ€@$î^ku÷”…îÌÆ’»{˜‘³[4¦äZL•™àD64O›í.‰“ë¤ s¬‰»yÄD„»Ói>‡ª‚EDÈ\RrønXbÁ`~cÍ׆Y¸JÊ„€{PÆ<gÕdž?™ÙßTçæ_')%¢?ê®úŽˆQΙ™S*µˆ˜Å-Žn[וõɺ_t­»×:&¦Û·oÏ­(¥Tksƒ áÁ®_¿žsçÁ¬¶è{EYøX¹ºmuνrwùM”Ý„¬êÄP†`F!fwUF$¿¹¬©›2‚%vXEDÄ„Ùá ߆hf¦ fšçci­u]GQaN;š*€ˆ`f‹ì6èˆa±f)¼}ÁL‹†ðùÍ,• NF0 ê2àásØDä‰;"X(s’L§Ç=Ü4¯ù.Ùá¹U³Ö½¹ÖÑ÷ ÑÌvv›(€.a"n&©+c’ƒ"O¼÷}¼¼”KµÓ¼e3ë²Px˜ 901)±0“ÂÈL4ufÄPöѬ†„1€â®BžÉD""ˆ Š0wa»êñaó Lì$$B‡`I "AL€™»9‚`fˆ!€ððÚÀ숡ÆC@ì̬ªNÓ4ÔiÀf´¦“™»šÙr¹\.V‰œÛ¨­¶[Ã-*eÛlooµ,k°$ê'0Ùá¹stÑ%²PsukÄð0$Ú¸š["r‡²€áN3#br! $ ¡™A„©›QN!òP€fås§ ì.‰y× VfˉÝš8Bkòì㥵RóÂÉÔÈÂó{îjm‡5J”îì2‚¦“«" 6³°™TÝPb‹h:€È<Âc)âZûœà¦¨¦ËÖbFkww`Š1LK–Lh¶W{0ZdÎäð7YŸ w„¹˜"U"w0¨Ñ4C§œ¨3IƲåqS‡[¯¾–‚°pf`íí\NbMßÄÏÜ}Æ<3›7éÂÃÃÌ"âä!1+±“ô’™ LÄáÄ4Ó/IÄ wŸnÌèÆR‚“³: *‰âM»½Ó)Ãì®a8ÅòY˜YU%§”Ò\Й1Õ §c}š¦)!°Ïû’DLÓf‘år¹—DÒ™ƒ.Qš6ã¹²Ð@$îúbM·¡0§’Ñu»[ܽïûD\‚SJÃ4¾Ap‰hŽ)%",Ô,÷}tæ»)%³¹\ÎNd¶˜‰˜#¢²'™™3b¶ŽÌ/!`§ëáf²®;ãã IDATªD;ß«ˆÄœÏsDp@RÖS¬™i™ ¡`׿¹Ýdjp’Ä"¢îîÔuÝ|1›YÎóNJ´F„ùìA›g]µ^ÝZÃg–HDîîA2ñöÏMe!¢¹pÔ§ŒHr’DhdÍÛéiaòœ'ÉNÓÉÆç!J!™r×*L9É¢¦ªzÂQ±ÞÅÉÄãÄ­’OG{LÃÆ†)q`8¹“0&öjžL™\¼j]"b¨ûbÑ™ÂÒj0‰,]×±a\Zps¶ˆ óɘËR‘4 â#käMEØÆ1EÓa6ãfsÑRß/‹ý²¨µœ¨a{2vÜõ²Ø¬kNËåâp½¤ƒ­Q«L¾RžËföè%ήò˜8h±¥±¬„Ðö–y¹ÊM·¹`ªkש޲­ÎïWUUU„ÂÉ”ÔQ—Ó"E«Ó4ÍaÖˆ•g<'³:ÕµÚ‰ùÚ½mÕZh!Ï,©60%2ïx6à•ÈP€Þ-#˜©drè$¡Ÿ]½Ä¦6¤"LD^i jJ¡Ù@ê].D$AYjlDžŠ—b¹X D2%¦ÌÖùP„¹{e2±&Ö$ŽdÛ‰™‰Nɤ‡!Z81ÏùnÎ0 wשŠ»9¶â- q'D1»:|ŠØ’FÄ(šY÷-h²%ªJítNÜ}Vm>MÓ7¾ð™—¾ù|$^.ö^{íµeß›YY®rÎm¶ Í‘äÒ]—ßõÃ•¹‹â^UuGkÂN)©)Q^õ¼Ü§Õñí[†ŠðQƒÁNÈ îUÁ)›Âá ƒ»z‘D€™í …”Ö뵪ε"BD¶Û-yX4UÝÛÛs÷õ¸íJÇÑ fv||\Já$æi¼íø¿¼@ýØOü´œÛËA7¯]ÿä/ò¾ƒÕ{êï4*d³ÙÀƒw].—ã8–E?¬`¶FAsd+1[ A´ó”ÏYJ±jµÖÙ©ëîAìpáDÉç¢bPÁwÁ×7d×S,|Z?.fqG"Ü}Îì%÷ù_€ÙŸasa‘y»{8§Ì§u¼ß¸[ι“‹H„˜)ÜÜŒòmÖÉ£…5pÌ­‚Úü7Toèv•RN/N'“YÜÝÝ »vÆ<‘ÍÇ „Ž)Üàá”@UÍÌî>MSbæp=¶¶ÖŽººè¶I’.ÌZ­ïM'Û£k¯ÞÿýO<ñÙêæ­ëÓ’‹®Ží œáã;S?MKNv8 Iýä[/þÕãû«Xu¹8[uÝÕª"ò輩ê¦[w>ñ¹ßÿÖŸ}áÂÞ¹>úÖïË“^»;E–™*Œc¯^½qç•3¾åýÛ–¨f2³®¹™m|✨ð8nÎìXÓL!BКX(¥;Õú”:ŸZŒEzw÷û}QUsFZ²Xxm ÆJpÌ s¶»ÕZ«™ED·èIØÇJ9³º¹6"Óà‡¢y—¬i&bö>……™(L¸1'…:DìLL‘bu ‡!œÅ"È CTWUXDP€æ!æ„€›ÁÕ½j8fQóm8!QäʩªÖÝŸŸ/¥ÄÌä4#™» ª›ñúK¯|m_V/^‰¯¿òš¡;»Ú_ õ…3§Æ·%­®^M*iÔ軾Úú[Ïß¼yýÕwø%e2ÑÌÍÑ&‰:<ý{¿þµ/|~Ùçó«UXtÝ…o¾ºyî_þ«G{äïùáØ;›RRÕ[G·¾òúÐå3}]‡@81åœÃGJQ×uPõfZºä1æêËÌv"¢é@,CK'¸#ÄI`·6‚à^O ©Ó膻wPE$o @d µn®Õ™Ááa9R Í!W€YÒz;q_R¦­×ažD\33oŠ7ðÞÝÅ‚ƒHÌ1fÐ!˜«{è4%F†ª"v±fR¨ªZ`3rD°kž~‘ªéÑ´¾•ˆˆ9 §Íö8eµØ ØÝE„9s#LµK]ßë䈬º¿«]®ÜXig/ïËþÛöÏíÑ_¾P·57µÂ–RšMï7„™I¸éu½ºxñ-O|œ÷ÎQÏÑ‘»³ïú؇7Û;Ç×^ú3¿ýöùè4uGÇã°õ;‹ÍƒuZžlÙVÞÔ£ÅÕW^ɶ9Ê]3ì÷EÎîíŸ=#C˹¸ûk¯½öòK/,–KO}}æÖæõkÝ¢·þíK÷ÝoÍ–Ë%˜ADaöù?ù³¿úó/uÝÙîÃ?õ÷QÕTK))¥“““årYk½uëÖÅ‹ÿùûßÝ|þÑx×{èßþ¹r2 WîlFŠç^~ù—~ñ¿þ©ýÈåw¿#úIËZë7_úÖgÿðÓÿø, ,ᡪÂRǩ˅ygŠÌw§¹?O%æLNPJ»•Øo–ù÷I„à“¶kg%žÏb—f‡ˆ÷@¨j'I`ÌŸ•A 8Á(RÎ$„ࢦ"B,l»çP³œ ª"”Kê·w à@0ü}g/ËŒÙÕ@)ó¾R"2OóœW#¢ Üá>ЇÀdnµVUMF0òæÍTÜ·ÚbvdZR’L.î äˆé:Ëþ^9þþ‡Î¶É/=÷œ­×ëw>¸Xž?zà~åÖí£ç&QØ0ÑÖ¹ŠÀ@ æãñÎ^/ãMju›‡sÑ'òºïÖ'9–ƒ÷<ù£Ïá³ç._hœœ\ùÒç÷ÚËWî¼|ãů|ùÃOþàå÷ð„øädøâ~æ›ü™m{“ý²wá¡ ÷ýð;ô¡‡º\ZdMåëßüÆŸýî§9{8NíèΆs"lo\yù‰ÿ{îÄ ¶æ¦ôü—žýóÿç×(¦›í䢤[×ñÿþWn_½òÖÇìä1¬O6×jݰ|ó›/ý³ú݇\0‚>ñ[Ÿ¼ö‹ïxÛCoêgÛ¶»t¶àÌ¥ãi:wó:ΞÏ~2ªVFZä6ÔñÚÙ¸—'ÙæI˜=³xssh }ïîÚ4qrCÄ.•D)"Þ`€ 3Góð*‹¬–æuDµ±À£ºC¸ ÃÔ÷6g~FˆbfuŠLÌî޾Éüò]Y¤ê´ÈS¥N¡‰*G×Fx€&P#¢.œ¼BTÜ=ìÄ` 7R%uöPŠõz½Z­Ìypî;»Ý™ç\‹˜G‚Û4RNêžÌ¸©RA¸™Õ914¶Ó´ÙÎu?w¦kkMúˆ俉v""¹HÓ —ìºH‹t‡8éÁÕkw^yi:Ó=°¹5ì2Aû¾gf‰)I®A/)ÍžŠà@—2VÝz»ù­_ý•§~ò§qžÊ¢v«ÖZ ½÷®ûî~êg¼ø²nwJßwe‘ëöâ÷—{îIØnŸÿüŸÞúú3oûÁ¿uéòÝs|øú•믾ôúÞþÙþòED1EN‹.÷7®]ÿÁ÷¿ÿ?úÑôÅ/<ýå§?óÇŸúÄS?ùÓË‹—ËEêûW_úëå²ýã÷ß»ð}žå®%ú•_úW_úÓ?Y­MÙ&ëÊ2)å ÃýƒË÷ß÷Ÿüûÿôh½™ˆ_?þ¿ÿ·ÿãÞµf;¡½ƒ3ïgþÍ_ùïÿ«Øûyû%[¥IðÊ«W¾ùìWî¹|ùì=Kjà c~ç»Ü±7°SDL­È\&~÷ƾ žé»°ú;%çìŽp:88P­>ÊSaf æ0»ó°6#öžù‹ßùƒýÕâò}÷P)­2&J†ûñ_xËÛ7e)9=öä“{‹?ýÄÿuçèÅ3ï¦xþågŽŸ}æ?ø…Ÿ—{.›mšbŒ'ÿîÇ^~áy>¾#"UMŽÖÓúöæ]<ðÔ?úG'Çìµ  >sþã?÷ ¿õ/þ›á±ý˜µtÒ';¼ûø¥Wýû¯øÙ»Ö±¸¶¾yòÕ/=þ“£óçë(,½›ÁÂ#RêÔmÙwuXs›+'Pâð.®¡úfž¦Hä1…CT w776OBîp @ ™v5Ôæ(’3+# îÆìžÂÙ ÙÕ§RU|:׌Aª:>fójVz'Fˆ[¤$ "Š 7 2wCUu˜ú2—Õrw°‘‹¹§>¾qó¢óp0(\XÜÃŒܢΠ“Es£Òp¥€Ôv b­µÖ𙥔Ì4çLØE¼D’¥Ì£mW=7ªÊè ktfU{´œ»°æ6…÷‚¸}ûv­»2óåDäæxÇ`¶L‰–Ë|øCÐvóêu·öGŸøåkW^…Ç=>òá§žêö"—þÌþ`&%w]×uœRJR*Ù²øãï~ûwß;y‰Á¦Í­çžýÚ_ÿùg7×næ $Ù<qxfyñòÁÅ‹/\¼8"$­jG@·Äb‘ÉCï\5'\O.ÒEbA³ºuë–»[3S6%v‘(›™5 ZðhÒXrZ°ùXÛÖ£f`Ùñßýw~îS¿ø_ÄçŸ~ëŸSøX÷úż mÖB"bÞåÑÜ7îÎØy—‰§ë¥ ô½èåîä"çœ9|6"“äˆ]â¿N¾ëÎî>³YfV:«ŸÆ>™wº>KJ !µîa>87™'ùYæpd×lĦ3JÏqË”Òááá¶Ž3ÁÐZk$ä%Ü]RB›UkwóaÆqL!Ä]NGõ8wÉZu6@@‘xlÔìàÜù›Ï?ÝÙç½£4tƒ×;º~ù¢•‹g–ûýþ!_Ùúhƒ«³U¸&ô€»«“k£.ï¹?ù#O˜•“vòì—þâðòÞárïÆñßÿÝ_ÝïúØÇ§dR–+ËÕ¡ëIlEÊكˇï¼ïv›^zî«›o|ý…o|óÚë·îZž_Àåè¦ãæ|!4ŒIÜÚʹ色$«ã°è‹ku{s¬7_¸R‡Ú—åf=ô{‡M"GUnÝYö‡iyì‹Àz¯_Ýuf¿ø=ZO#ȧ6mM.½«H‰^ªn;’‡;‡?þúÓ_»rÏ=wV{/þ}×Ãû>\[,úYçy)‰s´‰sî´9—F™Y—Шò& ™1•ˆˆÈ á’ÀLÍȉE@ ¸›€²;CS˜3š3°¹°€ Í·•@¨‘»ƒ<09ŠErO˜F A0ÀîÒpQ³p¯`4orÓÂáªÆ<{‘=ZÄ(žÙAn€H"Â0EÕ’rbrqwo­5errŸ9³Qx®uëy¨U“tÃ-- j¦Nm³F¸m€ ¨m+ƒ4 Ì0§@ÔSŒ9R˜O $¼PørìîëÅá¥+ùæÕ£Gîò‡ZvÉúÄE<†MN ¶ƒ9]_PJ¦Iˆ‡«¯ðRdo?­Êá‡>ø1j6µáæöäÅo<7_½zõL·\.öÍ,çü?zö«ËW_ —Ûõ>õ‹¬ÌF‰o„¯‚`B)%ŠðSOY 7833þÿAõ»……™€†Óÿò™QÄÿ šñõ;¯Å¬Äfr;¾ù€SĈo?Û$æMmŒ0BAI|(ó] þÍ?‰¹s‡axƒét^š­Ð€’X‘˜¬ë»E¸ÀiŽá±GÌæ^­Ó4%ö …•Žo‰Y’~ðšRZeÉ[EwÔÈó’L¡SY4{øžréž›ûûí¹—nÉæV>¹¸åÞáj5nn±pÉ’¶5ê&C3û“xçáäø™¯=}ã/¼ïc?rîÌ^ª”`6NÞÉaÚ¿ç¡åŸö3ãÓùþË—ýòùa3’09zNd®GëöÕÏ=}ëåo}ô'~ì}o×À¾ÉéÖí£uk]¥ãPÆ^ºišˆÜ}š)i»µ¢Lc âÈ‹Èe¹ÜKy±Ýä4yŠ3«3'/_õЦÇLƒH‘½®æÞ«Ññ‚R“ÔvöžK+Mt$?H¨u•å¥ÍtøžúÊ—ž[¯¿rfy|ãxêÎaA{ZS ª)!å4ØèoM%%U5o‚hä–¹³š,‘wß8$nl™ˆ<æ|ÜY'Ü=‰«U A°Ï:áî,, ™Á DÂy±Í™NéÍLÀsÎÔH8käæ<3ç´Ö&:d&0ˆ«P›K"­Ö"ˆâð @ÍÜM&"ÓH§¼ÅÝ@*‰‡aÓÈ1ƒN­Ú÷KQ„;55eæ:x‡E4’7ê»Í¢ªÛíVºÿXD$h ÉÙϬDU—Ë¥™EÊÏ]Yç®Þw¶;³ìŽnÅ=—º~™oõ¯½¾îYk2'¢q—îÁ1Û¶ÑuÝþ™Ã“‹g6Ç'gn¯c¹?ÿ5‡ Gì/r_„ˆZk9¢ë:f "ê8Eðz:9:zõ®ÃþÑw¼s}á Q 8Ý>9( V'ˆ¨”2Ž#NIž{Œãèî;/™u]—RZ.—7ONòbáÍ 2 Ó8Ž«¾gf"´Ö¤OÍôõ×®×o/Ξ©>n9iøŸüÖïÝsñòê±û¦^:Àˆz§»._n¦_ùÌïMüüØâpÿ·?ùëßøã?‰;¯\‘ZM[‘:]{åå—?÷Å)O Ën¯”ÍëÛ:Ö²(°Ø7߬¯Géø˜_{ýö Ïþåµ—^·£ sÄv:Nc=Þ¬*®1MN^#‚ F ½¸ìŸøà“«ûø_þ§ÿñ‚/Îä‹–Uñé_ûåW¯<ÿz=t£ØftãöõaZ?ÿ­—>õ«¿ñÜ—¾üµ¯ÿõW?ÿå/üÞ§>ûkÿû¹ÃÅþÃoYО4÷’ˆËÙnÿîK÷ägÿ¡DíöúÛŠe*À( £6“½®ëÖÈÝÛv}äÞœ|$jGJœ³Šè¾ÛB=:P2b ̈IlœÃŠ4ª†Écp7æ™FD@#Â,Ü1»º"<ÂP€›³~[ƒ#BÝÂl®Œ1…Ma®pB23Àg033S7c5ÖSæîˆ„(ì%£4ÅÖ1›RN ‘SòÆPª7³03–´™ïÍ÷œÈU3¡Ú¶',†ìS¸SJÛÔ¦ªSx#!¬úC´UÆÙuºs zŠÇîîî›Íf±:ã3ñ&' 1›º®ÓI¯^½~áÞ6 :©Xj¤ô…¿ºs欗EÒÚ®ÜÙ¾v3 +Ñ”€Ž<±MÓàTˆ¨«îJb„žûK—.­ï¿ÿ«õµc›ö÷ÎM Qi×®]»õò•n¿ëmw_~d îiX.» ·/üÑ]úÖ oyç»ö»}ü©g¾ð¹?ý­O$ïÇKW^è wR8qâMÓä’¼_$÷yWgáþ`ÿüjyXJQ€™~ä±ßùê×ÿÓÿò?;X.:õÌyÖãÛ¼—™E8…äD9çû}èÂÃ÷ÿÁ§?}€\µ>úè÷ý³ÿüŸoÜ*:°Pâ½ &ž—M/ ­ð&ô®Rlª UâˆÝâÔÔA’sžgÕ¹¾Wˆˆ‰m^I`fîî©swþž EdŽW¿!îŽSÎðæ#³ˆÈ߸^#"<3­>ŠÝZÌDB»Â ;I))‚HH8"æù“sŸÓäÝ]ˆr·œ3<ãM'w÷ÌSD–ƒ"Üà £`Hò©®ç·df‰RS]on›9ÏŒˆ3h›âöÉññËWéÌ9"eN}sOEÚÔS‰¼”÷¾÷‡í—ÿϽ»~àVK‹È'´|éŵH%áV=§åÉPÏœ½¸¹qýÔpýñ».?p¯øX£Ë„ÙB&ò"ôÀ#o_ÊÒo]½zý·ã“‹TÜ,È/\¾ô÷½÷áï„÷V•8 {%?òýËÖǯ}õÙ»öÊ u³·¿\ñ;ÞýοøíÏÜ|þ¹Mè}=ð{j½^¿ôÒK/ýÕ_ßõøÃ}Yõ¥HY6%–¨CÐÂùòÙó/T?¾ãýEa÷ÇÛzüû>÷ûŸzõë_¹ïî‹×nÿýðSÏ=ó•áʺÞòª·$t<<ñĽÉÝ?zßÛßqa‘]»3/v{ÆLURɹŽO¨¤vgû—Ÿþä?õ¾»ßõAk·9Í}†$e´ÛI–L9"ú™‡‘cÇ)ˆ 0ffæZ+å¤áÂÌ̵…3“nÂÃØw“ÿ<ÜAàBÌBæa¦ ˜@=ŒC%‚¡f³$î0³)7ë>YÐ@œ"È.&s‡´0„›;Ôš)%Ì£Š#Ü9ÜÜÈÉS†8£ª9y 4Àa>û¸ƒ¢UKÔ 'lj`ýþjœ¦pÒˆ€4‚GˆWó6¯´ØmÆÿ³·é‘dÙ¶„ÖÚÛÌ#"«Îǽï»-$0hAK„ĈŸÑfüHð-ÌzÂÏ€)ÝMß×÷œSU™án¶×b`‘YY÷Ü÷ú5»RYžæfæÛö^¶¿üÖ¯ƒßÿ}€8Å¿óÝ÷ÿÍ?þ¯ÿÞ?üO4UU½7VÈ-Ná˜û½þú_ý‹ò¿üïQ—<=Á¥}2;ZkǸyݱ/ç§ú÷þý¿üÿñô'ö—G½ÆpðÃ:úùôåóËçŸ~NAUç¾ãéãÇóÇ'gŒìvªpÜwlò… ا¦óiˆûËýã™ÍD†{ÿr»“üþûï9n³fê4ñ1RÔ{šÃગ3犬*•ÚGDÜ¥ötž÷ýDŽù̧‹bB ȶřf\ú^>F·ÓØo!Ð6sš8æÇøgÿìŸýÓÿñøGÿùúWÿàµúÂþ´î×ëuÛII[>¬%éÂ)¯Çâã4’C;­ÄäT€¦å@«¶ÚÀ0œ>Ž ã—ÃÇ–ð°»=b*X0)OÎÛòa©ðV-©(b¨lwaÂ"|Œk +#ÈP‘f':.Å, •àŒ€$kÕ1Ú¤dÜ÷ýÃÓyX/·«„@Ø5%ÅTÉ_nØ®ÿÇÿúO>ÿŸÿWœ™‘¹Ïq¨^Æí»¸\2ïõ3NÀø¡æó‰[02òïýæ/þÛÿòÏãб¿T}ø“?ûüòòç?|?ÆXÙûqÛ÷ÛéÜœŸ~3&s”ìܰûÇÓÓ‡¿úZm•·±MäV ÈÄ©@0… nO§‘n’£ØOÍhŸî»ÉvB áÅØÛC¼ 0'¤6Àr–¯»cÛ4 Ç„|·ó›t UßBƒE¯U8êBžûõùüáÂz‡êËýþ¿ýÏÿÓÛíÓõûÖõÛ˘Ï×±Å|~ú˜MøÑ· IDATÌÍêÂešì—œGuaõôá´‚H2ØÌªG¸rD‘`¤ErNL ¯÷Òõ ­L¥4F9À9%³ì`)-xÏqš!“%sš¶; I6–2(…ÐKÅå–:"°J;€SĬ9’™*X.cw&)wª¦ cFÉcByJ»<Ùâî窗íìçý¨ªÞÚq ã"ic¾ì×ýEÄœ3¼µþèA "ªjÎÙ·Sö´£*/O>¦¢ÿì·ºß_ÎçóŸþéŸVYr„½@ÄJpxo„üñ5.€àu&ïÞ¥ìMD ,ÑÁ•zW£ÿ†´¾Ô{7â¡]#ÌèÙùHÖÅò}öÞ!×>æÒèãÐË'Æù©Å?ü/þ³¿ÿïþ‡Ðè£ZM¶l@#/À’Ðp1u éÕƒ«e%d«ýj&ÿ ‘Æy /¤ˆe¾}]Ño´ú`8¿}Çǯi¡ö\uÜ"Ö¸A¼×tißiMÜ‚Q*Âö¾ß¶ÞRÆv¿ïÙ?ªFMdlåTIOOO*fÌcŒËÓ¶cÖMRô€Yz¹ã˜yùaÞG´9îO?þ¸íÏ/N×K¡›­oçÉ{!TwzCOÇqgYKû€dCD˜ò#S<—@ 5k¡·4#Aƒ0TÔÑ#2Âxèâ˜@1\P´è1mà~ $Âm â«¡Ç 1Í4#¾áI‘ÑÀ°,3Z:f͇o F63èí²=/—Þ³|?n?üÉö_ý÷ÿ]7a¾ìDZqê§Ó^ÏÇÁÁÚÚ8wžÇ,yc.ÊÞNJ=dûNlpQVÈ ÆâŒWŠÄ+~ˆÝê 4ˆÌe|ä”bÉѰ0hÐöT‚D¶žS"Uƒ":—ýN&Ò"¬¤#‰â­f-ü“™kz#Z+€ˆ Ùž& f!"gíô˜UŠˆh£æÖ­"}N(<$ÑØ÷=¶px±æhðÓ˜ŸÍçÊZËó;ÝŸ3óØ÷/Ÿþå¸}ÆtËÌ1F?5¬’u‰È霌Ùï÷»ª2DÆ÷‚T IrÛŠ˜˜Y"L,·7™ÀÃÆ¹zÆë¢_œµ¹Îd¦‰L¤á’üˆV5!¾V!Þ®_´ê¤Ö»ÔŒ€ÑËØôN†_I²H“&ÈÀ«ló².¿ÿšd~¬ŸÌŒWû|”Útiºe18âæ.sŸ2sŒˆ“_CÍÇ{&-óUð¾K‡—­àï@’ ¬ Ùb0 Ó¿’Þ^ŰhØ®9µÔಯ4T‰ ‚Q6ÖÊu=òa{¶¹>xü9ë1˰°93é’ &°˜³÷C’2³µm°K„ølÞFŸ”\žÛ¶coíø˜ñø©Ñ@ðîRµy¿nóŽyÏ©vi/:3‡‘½©ÑE3ö38—¿1âD ­Üªsáƒ\÷á1 gD[^™ Kf†Âkb€á«b¦ÃD‘€Œ½@¬-J=Â’!÷SB3ÇÓl#±'DäQkü€äi{Ί«’‘3ríKh$\¤á±4-…Žœ¹xDsÎ ÞIޱŸóÜ"=ñ]œÛÈÛ~ô­©Ôû¥æcmTUŽºµrŸòP :¶¸Ýo§vLÌò1âvâY=«eVAZ2 B„í’´‘@º+=_$kxü‚¤]jI¼â‚i J+j“Sžadmc'ë^Dä(I“1 ®Z½ IÔÚª)»¤i ÀzåœÚ¥îÇ%«ÑG†Äí¬c|?Fã8-Ã^H¶îqDlsØÓŸ.´jä±½m^nÏûË3¹rO_év»}ÿýÏwDÞ#{çŒÖz»c%‰XÊes§à\¯cúêã‰)§Ì`[€+3#bÌ&!+2ñǼüÙüGa6ö&˜álx•;ÿzUÇxsõ…ÊŸ‹ë«)ÖþÈÞ× àhýDN xµó•Û´¸åÑκEêÌìð\çß®7è;dÀë!9ß‘$ZïƒÙ$Á_;ßèo™±-­~¯Yšs>äë;ç-/jßq,ù2ç#Šˆ9—ä^#ÎÛuNí¸^÷̶n·î54%íû>jƇf»÷®Ä1 ΚHD+á<"$µÒ=U—ž™Çó3ãÄÖçóKNìq:uFjëmîSR´ VyßW§ë¨àVš<åŒÇ¾dŒ±ºøF’¨* $—ZÁ©&¨ç‘8Ü¢$ ö’—,…³Z¿|“côÂV±$gF¨Ôƒ«:o%<áì­DÍŒtLL‰+$汦\¥Øù'[’¿AJaõŒ6ç‘™€½ >„Òœ…v5zVdÈ»Ð× ‰)#H”v3ÁÈ„Œtø›þ¬1""ÖXBN-³™d=’*2œ Ö÷ á”*’lÓ`+HªP*›íŠ*9A²Çë;ðø~€U!3sc”¼¯&ã5ŽADÄF¬üŒ™9¦7´Ç~(ù©õûó€÷šÒ1æ¾*+ ítºpÔØ`ëý6^ú‡¬kÅ99˜ªYuÜûËõ—ýË'hùAH’UõüüÜZ[ßÅ&ýt”@¶ùšô»®ÏH8—P N,ͱ!%ù(¼ÚÑæœ‘€ÿ6ÙB‹æDÊ}Áð¿3™p*8–mYëeF€€0Üßøã×D+E¶¹ðÃ+þ1r‡S’Ê ¯r—”äªÌT=^p¿ÔŪIS¥é™Ù2\¼RkÕ€di0ÞËã×üñ?×<§ôvþýl÷ÞÓû׸³Ì$9jR Г۶-,ñ·“m PeˆñX9§ÓIe›kú$M–êÚzÖ¿s^oûª%×ZbA¡ÕrkMhûqdÛÖ»÷ªêé|/ŸkÒÙ±µµ4ÐnŒÞûõeopÏl ¼WþóŸþå_¸þïc'²32=ojmƒ?ª‘9ÇÉ0`O -Z´.LÈäŒU˜9œ‚롃4àädœ™Q½qδž ©ÈÌÖ×$zÛ  ¶WÆ7b±ƒí·î(Ã+ŸsªƒªrfÒhuàÁÁ0°¸Ü~ˆ"tl•!«±aO¸[LFÎ}¢fãMs«È •=“1W„×,O§ó#b³]ž„D–‰Ì¢Œ#úÌ0kFà–£ ¡H³"VM¬˜ x!TË0([Óù`ñ Jj­%Â3&§‚r5,+É=`Õ ©Q@!3kÌÌФ»‚ÓjÞALä´š”YR]5Up`@ÄÇHíã§-§'.íIôÒåàFä2Õ™ãh;3 ì»åhjÛ>÷ÞûóóËŸÿÙßÿüËÏ®£tŒ9Š­«·þá>tÊxTy‰ˆ9§¤9çqÔù©Í9án‘M>T„wsjEþ0¼‘õÊÿHF„ªl“h LE,cÚƒ$I z1Ð:´4ß—6[Ç;\¨Çþ=ðÚ··…x0èƒ  𮲖ëÊ÷­ýš23™5‘™ÓZý ã4ð8‰o;$[ksΈsœN§eA‹ˆ\õƒ):l¯îK$L)'ÇÚVÔ·ÖÁEkŒ%áÁÇúµÆ³=kR ”$òh¬ö$½ÂI"Y“3“Šõ ôzt22"(‚\·ÊñØä1²Mýòtn:FDÇ!ÆÚ‡¬›”&£`m{Å–Ê”yR+Oéùé”c€}ßO}Ãýe¿VW´`1"Æ,×ëu©¾¶XaX˜ãÓó—Ÿ¿\ûåO—¨s¥Ö: ¥qºDO±œB8¦•[¡N0A$œRÕlÔ€f±±…¤åûi±ûš#748ލsüºG!Ù SÓ„ˆez#¾ú&ð†MƒW•LLèñ¢'p¼>c'h@Ì0#µü)x3Ô Pri.mí ætXMÚvpl¨6.¾·ûY$M×FƒÙ¢oq²1ç¼´Ž)È!;"ÆmŒé*Uª%I­0à‡OÛo‹üu±­µ·är]8€J%¨$!*µÞ¬ÓLPÉ¥¬`ƒ,í1Œ5B—XCµnP)Ž †ä¥H’üáÃeßoWÉ÷9N¸Dt"–žÌ9tŒçËS ãC•V8­ï~ø/ãùË‹ÎZ­EL}ùåç±ÌØK%óÒ\·Ÿ~ÿ;ìûô|øú³o]Ò¾ïçßœ 3YÜ«zDÏ8—†é²Á))Wö¢QV›:a­Äƒ·g¿xã=UÕ[ü@U¨ÀBdsÁ·TRE$ccØÿlûÇ(3“áYÞBiÐJ+2HÔöZ ’‰wr}é+¶ý Zú4Ój§ì>0Å•Fß`™¢ýZ3"2y¿ßW›ï!2³tüÁl™XkoÕá[Î¥·È¯·ËÖSȯÒîZSýkg—ñáe朰†ÕUÒò ˜Á%2"áµ¶×´ ùéÓ'² îEhAeð}Ì´¶³N—*DDrÀ¶}øtèŬí´&cΩqœ¶8o?ÞåÞºk/+[Û¶mΙ™ha[Lj­_¶Ó§OŸÎ>b˜™ÌsF ·dæÍ*32zMÂ$i=ïÁ îRÔhTD®U0S’ºÀ [*ef°€Âr×Àc¦àf¢ 5Âhñà“¶{éàPµ¬>ð5ï<&jñ"ÕVRZ•C³ˆšÔ‰£³ƒ¢ë2%i[µžÀ±ß2 Z5 cxd”¢OÝ'˜ìcÞ·­EMÛ¡i—´îû ÂvÀÉ¡¹g;Y # SÏØ»qžáRvh¢Ê0\ºSipV*5F†AL–b„Õ2¬ˆµ÷Hš˜u·Ö{@¼1wOghcTTYt_kÀRN’ÅE¯w­ÎÃTë$ŠœFÀ}Ì=Ú®J ×èÙúm|Êô1ž Ï1磺ÍyÜ/Ù¸ïÏÙkfEÁ“º Àª94O§þr{Þ²Ùã>£µŒcž.ù¬ÃÌëõþò¼{¾Œq¿ûZ?AÒý~ß÷ýCfàÁ°0Öœi€hA–H6Ü @ÈSx|!3#²ÞGµúMZø«ò~;e/õˆ‡®$,|‹V33 Õ”_eOD)0Â7@`µIýJ7ü!Èe´]ËÌ˹úw"IÛ–ú:̯d;"}œN'é ù:·¥p™ f¢==féf¶ý°ªÙ’¹Xïõ!>¼ÐëkÞ^Ðk˜›‰€ÀÀWùð˜ŠhéPÈ4ÊæŠÿT ·õÔ–£€9eN§}¿‘ØÛ÷-™émÚó‡/L~º½PÞ¶í|j¿;’tþüÓË–ÑOÛ64lÿö·¿ýüüÅ6ƒcŒ•)m›@K#Œ"lÇñù§ßÿÙõ:·hU`ЮY7¸¹ÕðȈf¶ƒ\¶M; õ‚3€s\N§—›VŒDÓ„»*Œ¸cå©þFáyáíïÅ\B%¯3¾~§QaÙ·VØH"¢UÔZ”ðª“@jàÚÀ”«ÌR HjNxÎ) ­@ˆPd#RŠÈ-X×ûΖ™YUUõØ÷ŒyéÛ°È´gßÂuÔqôÖ,l=ïÇLæ97Ú˜,¸ÜçEÊèZ:ž†±"†õºLFÄq’eÀ¦Ê­µå& ©zÌž)"ÂS Ë;³ æQز_ƨÀX>ç9ƒ'{YÐdM¨Œ¹m§1ï$mdû¾D…n·yT žíÁ8jÞæ|¼ß-Á·S°ƒ"£{úôEfïO_ŽÏÕ¶›^Ž—Ƚï-3#^Á«z[Ñ%ü–«""Ëy.½ú’@‹U$›e.Cz[œ¢jÀ¯ÿo¢Å£ø*½ø{É•EoÇz•ò£å@“,‚ï„ÊâãwíðM®3k0ß04ðêMxtèíØ~LD­B'$cô|ƒ’Mëâ°zk;^cHV—«WDH¢aR²V§IéWºÐ+Ùk ÷ ÕÑ·kg–Å€{ ‚Õj€Sx Øð°Ñ&ÜJÊœ[Ëû.Ø’‚¼ßï ‘ë¶mÎʦhûœš+± dÄBÆ!UôOXË5ŽA³3N¥1瑱f&3 Ð̶¢ŽÆ}ª÷ívÛgùËõeÄ‘çË5IÛíP‘®\·Òm¿ïø‡Ÿo§çÍ?˜U1ÁR­å¥!Q±ú§ª 3çÁcÖqÉïæˆž§Ì­ÆsC0S´½ )#!!˜ó”+&}ΛWÿheg°Ï†•@eô|Íõå+n&Iºa,ÆMaËVÖD 8Fe±ªú_¹ÁQµç£ŠWψC*ƒÊŽvb¹½¾V6vëe¸Ò‰ÁZžïyÔÍ"DT€Ü„€”‘Œahº oÑuŒÆ Ãb@,Æ¥°ðŠq$ E °ŒzA„ ‰AFsRH2£$a±ù²…Ãah¤ Ôõ†éQ§ŒcìÖlT2LFâ€Æmœƒ³¦rf{çœÇ|>¾ïÇuz:ÏpïyÉØ®·/O¶ã¸÷Íûñóvúñz5ØgÏ’&mæ=R6^®÷Ëw¿½~yn3N-Íýå˜ÑR0ÏÏ/mŽy½^/ßÿÆúA·«í œëÛø ÛÏÏŸwŧÌìùcT7U@óã:.·mÉb€™£yŽÃ¨ò€ÑŒ(ITË$ra)¼ÊËq·l®!ô̇àyˈÌÖ†€—’X׬וä 3øÊÌ"}@ù!·htCƇÁ+3ªŒ¶ðÉ«0HI\ßúƒ»KD¾Z'T%ô­ùUðlÛ¶zRU-óU<¾û¯Ëc¯þó7Z³±¨ªÖæø=I"‰G=¸¥KƒLÐ’€Ì pVs åiÛ0Æ‚¿@Èe»µÔxš“a)N€ì15VÖzÕ`¹åÓ/¿|éípùÏçe%[žžNåãtÎ-ÚÖÚ<ˆtYó8ÎÐËœ÷†ƒúøñû‰a\¯÷¿žËá ´AÜ AÇñóçŸûéØç¥–ÏÞể hš·Øf¹Öƒl™ª°WB/ù—‰1@Âù‚ paº‘-KÈèC³õ>j²±ÂHæahËŸLÒ„†QÎzãccÖâÝu¼ÄêzŠK2¯cI&*†Çì;°Ãƒ€j§½6ŸÀ‚ —¬íÙüÀÆ1€ˆå~·[K@~‡ zï™ÛqÜ–¢¼ßï—ów*GÁ˜®¼×8m[€(%ØÖ T¶·e¶ÚŒˆÖÚ1æ:ó†IÖ§ ±öŽýÐc$#Ò˜jÕ2kL„S™Ì0Ê»´ Ö˜Ù ãn´ÖZÍc–À–qÊ~9ö*)H2wÔEUS_¸µŒ¬¬ã>³o€a‹­õÞOŸ>}zúÀËù;¸]_öÃ×í‰ûqëÛ£àM•4}ìàÌ~úôûóé»9âú²Ÿûvÿ ­ûÔ¯ãzùpÒ1©éûqbÞ|•ÐZ $‹Ç1U}=þò}mBƒ–Õ"PU5*ú(bíP ¯õ}Yœá·‡ñ4çd®mõk4÷’ï¤Æ/šð4ëÊE‹›[ëï÷HR¬eþ«óÁþãÆÓWâTÙàãRK=®!I¨ªÞ¹xx•Ö¿’§z—·¨ª¶í´|DñŠê¿ÒjmÛßdgЈzÌÕÛõ«ŸúÕæ½OÐïžÏœ“ì*®9—‘¸ª^H€óŸLƒ•ÍU‡àµo-ëGEÁp ;àÒ.)ãLhΙÑáâùå—㸷sÞ÷ãéòƒq‚'ˆíD»¶sç}½=]_îÇq´/ãÖŸþ„ôyëqyúåËý´}¼_9FÍU Êji¤0QbüæüñóOÏTŽýö{ƒÍƒØ=÷Öº¨Û®­Ÿ5ÒšzuA÷G”Lh‚è@TôDÉ.mtU;Бcéõr'iDĘ@'Á,Q}ÂÑÒ@²³Ós‡Ó8–N @šX>pT)™Ç¼g ¢­ÜŠ“2;MF$°Bz ³R W€C&èPÎ|l#åŽì۾߷m‹h’朗ËeÎIÊv­·µ"ÆÜX¦[œ]¸ß~>³÷½m ÙL®õYŽÑ™‰ÂÜ›€´Ò‡”@Ý1£GÒÀÒJÙè @à´g¯'à6-L£J6`)ˆ4̘‚çÕéãPkO gΚ‡ÇNÌè5eLÅ–—9¢·íØ÷~ÂmÜÛ¹µNïÏÃ4hö+[“{f‹Qzþò|=NÎ>xþXç`|9~NÜtïÆÔÞ$ÕqÜnŸ÷ºFÿ8çöôÝ/žµÿòTËmΘÂûدí¶RmßÈö2üZmÄÓ¡ŠÄ<·'둳°ö°ï‘î:XÂ&ù0g½§µŪ&@Ùë|<ö³0ÜÖNyù0ßS<¤ë7Âìí»k-IZªülú;Ñ`xCÉߊÌ7ú*¿¥¥÷×ñ„ ‘®~,CÒú¨m­õŽãѾö sÕG›ßÞ×çCO­zÅï¯j­Q–D_U'°ÖZõj*^×§àRsþ¤óùìQsÎédd\N¬Ì-4ÁìäÇ.€žZ´µuÚtˆ˜sºaìþðôcU]N[CŽÚ}ìg·Œ~>mC{ß÷9gU=¹ÿÅßû·?_o?þæ7cêdÎ9½µã8T5}CúóóïH¶Ö€jŠÈ© ÿ>÷ŸÿÓýós|÷çpã$}GŠé"Ì, VOƒ3rl>°o_ÏéBkÅ׉WOµ¥7FûJDD´73|#fÃfB’Q0H!F`v’ÖuxìádºÊfKÍ!ÍXxšê ÈÖhÌ<†zžfÝæ£20µ¢ã&\ÊLIC+Eg#BÇl‘sβ[¬@™šs2’û~9=ÞÍ(XdLÍ9hËÖbƒ¥)#Ã%£2OÒúlLOÃ$8¯;Õ±9gY3°@öâc–Z$Í9&€× ‹ÇÞ€KZ1¼«ÊÒŒÞ$Ün{hEÿ@BÖŒC÷9"xÊLó*í£~™žÎ ˜ÚäBžÅ ÖHïç.Ädî[7åíÜž?¿œ3T&ŸŸ¸d2úSÿíÓGô®v|¾秺>WèíÔî_n¥6Ârßÿߺîå³^¥È"’£æ L¸ˆAõºÁP@.i;£ËFÜ"zð2Ç#“¯èp‘$ú±—;³®ô›9÷ëG¦:€Uíô=I‚) I‘‚IÒ2Œ1è‡$W¾T•ào†÷F`ƒ'ð¨À¹Äý’v­efªlC’‰ q ¯SR†#“Sªª%ÎßHRfÚ^þ†–¦æœê½¿×’hÛ˜«f5 zXo}ÓôëdþQz•Í"=‚^? [UHH^#ÛË…y‡+d40+¢Q—Ö,òî­çœ†s.q„ ¼¯»”kZ2ZûèhóvLí´©Æq˜W¾þr;Ÿy»_ÏOý:æØÇ‡Óv¿_·ÓÓå²ó¸Ý¿ i¯1Æ!Íícã6)%IN¶6¬ˆ˜-²öó—cò¾ÿðC\ç Žc¶ÞÀ±E»9"/l›ã¦"ƒh$â½? K­Fî7Õ[km[³,•b&ÒsÈf¡‰a‘Ø fª‘³‘¦FDØ[R{cáÀ°Ö: ¼*îeà´,} ‘àLE,,]1IªŠäô²\zjµÃ‹w³\¨ºEÂqbW ­ßî3ç¬së5ÄŒûœN“>EÕtï—½i®pïÖÚ1îÙº¤žñÔ‚%xT4*lkV‹c¿¶vÆôŠb‘$Ï3ÜYX<0Ø£‡ÛI4ÇC–MN›A:]Êbg[±P’ˆ‘’z4­¼¯ Sò,úˆˆûýÈ´}-_˜›12[Ÿn·Yl°vhT>Á’tKV•tˆ1î¶m³#ñýÐ-Õ½µÏJûñqŒÓ6¼µ>æmn_nãœíruùîòá7—븶'½ì¨xÚ~÷å§–3‘¹mßö÷ùòËOûç9Àðœ/ͶÆl‘L=¿ûÝïþì‡?Ç;Q½¤ÈbЪ*;2±Š*e¥HU#¹js´Ù{71,}¶¹þ(•$࣠Kpûõ?éóª*^c†ÞÓj€‹·¶d®ó̈7½ÜÌ`,Œît‘眆áõV;oí¯y€€®}(úˆeŠz»þa9Ž£ªâÕŽž^ÄUä‡IVzôdÝÿÒãëï†n[`ðÑÒêl˜bÄûæÖÌHa>tšgm «z~âfÕ@Œw)¡®¦/0f€éi—DZæAÒÊÚ´²5Îù¹4|4[æÓ̈c;^^^žþÅÄöáÇÓ¶Ññ¡õ©ÿ85JS?ÿòKïïmJ—§ÓËõ¥ŸÎ¼ßæËóŒKí±;‘ÓA%º&8ªzR,iÖ¡D²oݘs?¤›µ/Df^–¸J €|ñ´Ã:PÒ#—0[_ÏIÒ<ì\žY/™šË3B–´–Ú´ícìÌ( ¥A#WDP„ IiÐÈ€d ¬f7c¦Ã³Âç$ØS@y¼ícÙnÇ„ l×Ô%.ŠY’©àâ„ãhް¥aÑ•ÑO‘0¬*DK»Övö8Ž% Ö@œOßqGÏ` jßሡlWWT—a8ðXb°MPžûñÜòÜÀaÛv•2ÏsÞšQ5jY“à’ˆÇZ²cŒx0}€ ™çsÖAÎíÙúíþœÈS0H¹`E1î¡&Ø•Æ0mF´Ì¬ÉŒóœR]W IDATÔó¹< ʲ·é ç—OôØŽš½?ÙúÖã“B5˜€2N@\?”Ú¿ÿþûûM§€„Iæ1žÏ§ã¦c×¼þóa¹µÌüá‡$e߸mÇ®A›Ù Ç}¹Ý©*-q±Tž36¦—‰ù»ÿç?Èùy7ú9¬yÎaçDG¤¡Ñ–4c®}‚f¹’J÷ˆˆÌ}ß‘[khPǘ-7š ØvÐv:(!XtL˜Æ2ûœít:ÛF`#".—ËcŒqýrürû¹2žF-Ï¿ýÍ5‘W¸ÄœŠ6_nWèÔ{»•o­UÕœ³²UULE ‡³j+îêbWý¾ÍVÛåÊyŠ#|rEæ6«ÈÈØÌ<¨„=hK\ Øiv=æÚ¡J€% ’å×¼1.!WT­˜‹O–Þm·^1Ãò‰Àª_]j48¥ *Ñ,ûNìÁ.Ÿê|´C„7@òÀòî¡aÌÌ`[!vG‘m¿«åe£ž¶íeìµm›ocÖ°Ñ rªo혣€¡Š–sÎýv#“EÎÂI¥ÉñIºj¼lÓé¼ßHNͰ‚à#–SBÉ‹i”‘Cx ­}­¹@#1l@ ƒ½o[_ªfD,tÛZ“•¬‡É8Ž9Kw™ˆNä÷Å*ÜÀÖ*k˜’ MÇa][Ó¹ÿvŸQ}ëû~Û÷Ûùü›GЍßÿô/â”§ÓwÄ©s{:_öÆγó¯þ ÁÖZ‹|þüÒ2³ÇP}.ü2ÏÅoû‘×ô6~‰sÎÛíÆ~žFàC7pÌÎ„Ï [‹$Fív£L<¶hœ2`';(h@°vÌ^S¸È¶õ7âÝ÷‘oôÚÕןo$¨a.~~p'¼Á„Wá­÷×  PpÈÃ8è´fF”¦WÎ0ªánÜÈ<ÞôËêí’~Òã· ¨m§Ìœ€ˆx‰¨%¶×Å[Õ²òÑG²¥4‘´üþé,µàXX€V “õh`¼3ýŒ -TËIîšî|¨2~µm  ¤L w˜¤¡x)g©#\ñ‰^²Ùv•KšÁmÛÎöÉöý~œ.Ù¯×_z»dž¾|ù2ÆøôéSßÎ5ÎhúøñÒò¼¿\«j —õååKD\ï7I?|÷ýo~ó›ã8Êóûßíc¿Þÿzê‹ô–jª{FL ÌÙêŠï~üáçû½ `¹ÈZ;Ú–÷}ÈìL Ú¹³Ô€ƒEÞBƒBg+‚a °¥è½8$È[Õq3S„¨á¹ejßIÞõyãÖÛ6*†³ºF´RHQûšCÉ­ ž §¥Ì”çäÝu†Ýâÿ#íM›É‘l±ãî@—Ë»dV.µôôôÔ¼g-“žÌdúúÿŸdÒ›ÑSÏtMW×–ÛÍ»‘ŒîG@feõô7yš¥ñ†‘ ?îð%Bóé\&@#9ÏSι+k Aá9"‹­ªÏ†Å EZ©^=¥’rm­y/,çÓü¤ªI·*ëpS—ÇVÛ‹ë—Ùï-’)ö÷ïóE˜m†aÈãæúòÚKݤ‹qÓÛRZ=æiù`ùŠä¸½¨Ze‰6Œ÷¥æÃ¡5bŸKjj4‰ÿ|àóòTJ Ï¢â%+rZ‚ž²P9q\¯m%ˆèöôL½]Dú*43UiH@/qÖ÷4šŸ±>IDðÌ'NwùŒ^¤¬à XõËÌî!gæKzJ7BDUq í§t$Ɉ’äÄ•”d#É“DBDúZù {¬Âé>=¶!¥ô›öß^l=%gØ9ZdDOñ„ªRУŸ»ôáõ×}EEÍöñG§zN @úîU­'ýwé!Ý"èÞwUUOßZÇSp@Mv¢HfÕ[JI‡Ê0é™|­N­5ﳑÜ]>ÃêЖRJ}ªTͱZj\\\H²|½Ý «ŸþúÃR2sþøáÃíáq{sµž¯..Ö¦”ê<ɘ繌‹ÛzuHl“€n*‰>7õdV5µy²Ò®M'Ñ!©xDK²ks1MÐâ91›6ŠFRŒuw”˜ô(ÕL ¥±Ï $ ‘[%¨†îß@@©fT%ØHAr ©Ûi‹JîÚ ”)\Ì2W·DŠS°Àj”h H'BˆÁÃA ¤Ò%i9ÙXœ|Œj>dÃõS${Í«®C;'ü×ÍÐ7˜œòS´ÿÀ]ÅG„‰Ð#ÂM%J,ÐÞãÍ£´âQÀd–LR‹®­•¤–° €B¡G%söî‘’1Y@Œ€¨2"Y:ñŽpw¥åÈU"T*E¥¹7B1×_ÑAΜ'¢si*mi‰Åé ¡uí"° 0¸ÒU“J ÁØJ»Ùåý2ÍËÑëÍÅáp”÷Oïâ›4ìv;z¬¶›iš.¯®š—Z¿{ÿóÅêâãÛ{Mvùì&¥¼.¨zw«Šëõúöî:\êt|\wmZ”bWô™sVÍá ¶§ýÇýá#¶+ ‘¹µffš|Œ€‡‡”œ7mLpÚÒf4¢æ”!Â^Ñ,0ø脤¾Z»PÃ7†Òº €ÏêÍœ$"è ÿæúß¼6Ñ’ €‘â h/øûŸqÍôéä2’$5EÄ!âT¤†`¯°ü鳟^.ªJEk!ç;Ç5EäsMò¹|‚gt ŽöŽƒ¿Êç£åÙGûIL3$ÈÞ,P£ƒ:caDA÷på´Áú À†Ï¤â7Ÿj‚I±R@ÔV9@ÆqPM­µ”Ôò< ²,®¢&OOOŒ˜÷&z=fùòbw˜ŽÏŸ?/¥|üø±V¯”œ¶?Þ/å˜Ö«õv“Vc­MDDu½^ÏóñÝýGBƒµ1_™> òÆB ›¿‚Ic#RkM64pÆRîߌ—_62Å Y€dæAAJ´ã,¦Ìi G ˆÆ½Ä~%×­µ>/"­û!jw'\¨@H0K2 šª1$&g QRÅ´"Ô™E&É]â!fîM¤WuP¦˜†ÄŠp[ƒC`"Cé‘NA˜T¥0ÎÁn€ÇH"Þ8 MbTéÜáD*z2’»›æ6‡Š²5;…¬F³ÁT[Jr8<‰ÁUµ²›Wýe°¶ jÕÆH'º¥ Š3@JT÷^³4Ü©=*)‰ææahÚCÕÇGDŠéGŒ$Ùˆ*‡^øtçâî9g§2 ꩌˆ¨ªFÂV” Š ‘%8…´C4„ªd³ÁÃSJµVƒh]ÄT`sõÕ8–§’$ÝßÈ;®óųë›RB6aVï>^ï^¿ûñçÓ›ãÃÇüéa÷ì%ó¸}ùÚ)\A _\_¿yØÏû’ÓêpŒûû›×_©Œ±Ì¢÷|ûx¼•væKª)€ÁÑÐDzaA­%Z•æB!²‘EO Üýwïx#0™ rŽÃTÕÏwvÇ B WÄìœ8>'qŸID0B l*©Ã^‡ð~ßó'Àn JÚžüÒ@Á qO=ŽI‚gT #õ8Ö¿Úï ‘ÁßÀZ‡ËišV«UWSîB'Ó`@‡ÞTk3Xt®j–)ì„k­Axöjw9¡ß wª¶VÀ„!zΠÁ `UôP‰`ôoÈqk­ É4©$ˆEµVåÉwDRu`Hs£jõ2©©„ä´Ô›€6 6Ïó0 Ñ\D–R’ îõí»›Íæîþ6ÜW¼ÊºÒ!ß<Å(´‡åþñéýííO?äa°E¾úö]–ùùͳeYŠæ–½ìµ§ãa?§4¤œ®®nRF­ûq´RrÒí<ÏíÓÉlr…ÅÝAµ$ –OÏ›ªhMa\y›“„$©ÒЋ~2 "FUñ\Œ )$…!-YN%<"2\UK«€çÔ‹æ¶ âÜc¢5ª.DrŠ‹'À$ ðdÕîó:-e ÐÔ% ‘¢B ÛdJx‘'%¨æhÖÇæN>l­.„GôbMîfÚ@§™éâ añè‹x=Z8€!%q†u¶ˆÎ„5"RRKFZ®ªŽaЇ§§a52X¼ép:NbdFô©HYˆˆš²Uw†Ã»S-¼szüT <†ˆè}â¬A•'š‡žTYçyVU@„H%›{Œ ÇqÚÌ2ÄHÌóbº–¼iþXÊǤ6­Üx!ójµVU!YJéMº¼ÔÑ€ýáÒÖÙïnnž¿w®‡2ýþ÷/ß½{£C:<Åáøøðøn»¾Úl6ã8n/¯òz딋‹«·oÿœ..ýx<²–üþü• oëqûôôd"5|qNŸ|vï_Rýì¯ i–@€ÚŠMÓTÊ´Ûá:8àìŒL)õ¢ŸýÏObfÒù|³_t?—òpf¢¿Q _ùD#‚=pwŠ4‰31¡žãŒt(èÞ£•™6/PgóFH˜)D:òG„Ý¥ "ªÚïCãt=}v\‡³O‚ôåóutýcŸYÑ%:/È–î÷KsD¨©7·ó¨HêÉï{V_d°³h"€V¤ˆ0I€öñä”#¢ûUz§‹ˆPéa#`ÇyTa)x3‘äAñ8EBw c¦ÀäÜ‹Á°Côƒ)ÛUÚï÷Œ$bÛí–d#ÝÝÝSJ»Ú}±]—q¿þêw÷Oûœóû·¸{óþöãû!¯Ö«ëÍõnLjØ]] ›Íý^þrûƒotÞïq\[Úl.Ö—×ëõ¶,1®ÓÓü´»x¶,‹»ÃÛÓþ®ù¢Ÿ5ÀN+±Ö$‰ˆ([q|z}y…¡8@o¡*DkDвŠ;TFRÃŽzžýƒ—q¸Qa›‘LNŽ0i­…Š`ˆº†,Ð h&ë!f´h,$ 5" Ã’4V‘ÔŠªÃÊÝÍŒlG¡©dˆ6s%Ê2 %ÙJeðG?­ÝDõÚ¨*££(šÂ¢4š6¬RNƒP]jC÷^™T9FMH 1©2ÂÃLÈÒ¢Hh‹†@©­,±Z³%+œ‡Qu”êÍÝAX•Ò>Û3I¥GÆ¡ƒ´¹jHSέÔÑ’˜.ÉsõžE[ôÈopiW^b”o£%‹H°.Á:#6äyž³š#Ô†…êî„©6¬‡Ú¦žÐ  ù4WuÍ€a¿_„HFÅ\¸–ë©ì·×i¸ÕA›Ow·ÓÑêÓÃ&¥ÛòÕe@_ýÕRËz»Ý «Ùë÷oß,M Õ‡Cåúb—SZJqC›Ÿ¦iJ©WÂýÓ£cIð8.Ó#úæRido‡ýi­ÝÞÞþO›W"$ F4 Øs‚f§zô=Þ4ØÌ²bN’!íD'A]ûG„jÝàSºIP€$h w_)>ûuE¤¹GVš@æßVY®µÚÂõ·Ö:PU·8=KqÆN!1 ”§ü t=@ôŠá$¡úY]Ê~w¾Ûùhk­…§³“øÌ°1  FTÀ@õ¦¡B¤œ³÷Vã@„ã7…Ýz†":Íiãµu_o¿3›Œ(Q]ÌrH¬<<¢ŠÙEEçp B“t b¨ ä w~púÖL)%Ó%JkÐeaÈþS¤ ‰Šˆ?î7ª4¯P½¹¹ÖÖY9dwñr\Þ¼}È›ÕR‡»»6Ž———5¥?þñ9çgãpœçÇÇÇ©¢\ßߟ?{v½1W0§õîbš­Î¹»»sp³»@Jež´…QåT†è4¹k„Ó—!Z¥kÖ¡X‚̬â=*”•¡á9km³jFpôšò µV³ä^a¢§°Y¸»3¨â¾˜AFh,H¦Ñ<$tH*ƒ7B@°šõØb sbÕ#%²&í¾e@akE¢ª2š ÄD‚†èf""¥ Eèt”`IHŽp1ðÒ3·{TdÀè6¬ÖUš/eÔ,l–Ä’š™Gê­…æ!I)ÝñÂ$¨îº¸„ 5iºwh³ÊªU‚©¡$Zs@›@S I ‚ÑÖZdTµÒI9q)ðð2ÈÐ,Ã,ÔÅÉ0u‰ Rœ¡ª ‰FhîQ©Ǭ–È$"ÞDU—e)цÕj5^ )/õøìêbÿxÏ(3ü8Ï)¥y9Eíîéþ!ɳçϟ㨪/žÝDÄ0 ï?|ÜÏånÿ‘Ûû‡o¾üfZæ/®Ÿ¯òfwqñîÝ^ÉT·‘æF‘^¼~~{û°Jcõ&l  ©Aiìõk½ÍÏ¥”S«R!NÕRïò÷7o¨Bš{Ô¸"aìN6œøèg[_Ï9ÀÚ ¿ êÐa­É¥"„;WQë¢=йéù¸ÝCNœ•§ð•¾âÃ,‚~"‹^Òi ’, ø”±ÜãàN/NøíÞó‡g †ÜûSº3¸ë!’µÖV½¦¹k2Õ”³V`8Õ ‰€È AZ_‘€€T@B¢5ŠH×TŠ&B‚Š^+ ÒÎ|ÖH² Cx"Ëw8¡»¨È'ו&ÜkH´¨á&²q*$" e©jãT-,§¦úl÷L‡íõ‡»ûÕv“ ?ýøÓÍÕΣª¬_<û"¥´Z­¾þúë»»»¹–wïމȼÔ°Z­^¿^‹Èþð‡ûûûˆ˜¼Únóøt×JÒš†ÕFsJë?þñÞßš¯'/K´ùÔÒR3Q5a€ JÕkIãj$ˆj¤ºÃ,GTH˜lAÌ ’¥`kþDÉ ¡–S.Z‚Í`Ï´‘ÀÐ@•Ît""Ñyˆd"§êÝQjvÌ)JŠAÐUµ`u…3PhAÚ`½Ü@[@‚I³Ÿö¤ª*`0mÍMUÁmµÖÅ,Gˆ:f‰`JÃRöq¹Ùzmbr¨ *V«E¶Ζ$™P[óêšrH˜ÒK1Õ¨5¨d2Ë$½±‚–’‹*ÌBÉÍ‹k”@¨BA¶’Ârn@Lsx(›£BÌTµ5JR€äWÅQr´ ˜Ì&4œÓ¦”’ƺÌM5Á°Ä ¢Ûe©yLÐ #0‹,s“”/mÌÁi%|õêê?¾û~{ýzš&omžçÉëûŸÚn·WWWDz<{ölG}ñìyþåßÿrœŽ·Û‹›·ﮞ±¶Û͵(ÿá¿øîÏ?Ôsiêó<Ïî¡’Ì,­ÆÃúB騂r˜äX†õo71ã°>és)€¹ou¼€0¥$úŸŸÏBZ@(DS²ô=ú¹˜™~†»€ˆXKo¹u3üé$?CœO¢Ñ6@ù<e 9'Í‹WœpºG}hDˆˆªš ¥cêßÜ®K7ê?½F×9¢F‹!i!:='ÙZhÊ*`ß­}žÍR@ÌLµÖ€šèé—8‰z#$u×~ "MPH˜ÉŠJÏUvˆ§¨Íà0AÔ¢i¥@„»{FURŽ”Ò÷sk ìÇóEd×Z«÷g™Œ¶»X-Ík=æÒøþí>||zzRçí‡_|ñ…»Ïó|yyIòw¯¿zýúõÝÝÝÅÅÅ_ÿúׇýÓTËýý£‘ÛfË?üã·W_|qww›³»×ÿ÷üép8ˆŠÖÒv»m­åÞ¤pÈûéøt<¤4xÒûý“8«kßLÞNqªª ’£•X *N†1Íóã´¿å0¨Œˆ­¦RZƒ¸oV¹LK¥ VTw?ôc3³”½ix8ÔQ’¨‹º AQ“Hj @à–¤Ö šzÅÏ%"(г⫵I/ð 願àÙéã„&ô÷§žÇ]ú „½Ýs]j6Ó/IMÜ]D* Ÿ¨Ž$ðÔÛÐ /€ZB¢DÌ¥|â$}œªêœF³»7úZG°Î‹® &FjáOåéùÕ5«G„¬œµª ‚ Ï¢ƒÚÄáé8ZÊ–¡–—ZÕ)GôÃHÚDM]f‘¤Dâ}D@5 .0¯æ¬c!;…p_@„3¢±)Є›û'w¡ùb¸ßlVÃjL²^—õfwÀÑF¶ÞDZD™«ÀRúøø°Þn^<{~µ½¨µn/wËqÚ¸»ûåÝÞâû_~²Õ°½ÜíÖ›ad²õåÕîþáýÝýÇÕj5OË4-)óðô "/žÿ#M§iJðŸ'ÔÅAI6Ïó€1RZÕ»Ùf/LA,ðKIDTS®¸{­õx<æËf>k‘–R:l!çÞxfvt²µ¨šÔhThD‡R•”Önë+I!Z•îŸîq÷]HBÎh×…$ð+îÆéÁHô?Bâ„X@{ó$Ed¿ß·ðâMsjB’¹ ðæ5Xžö÷ÁY4A¬»¦’ª¦€¨‹°I¨êÃáÅþ¡êÆ­Ö•£%Kjô˜a0†èJ¯µ½§€!p–€Ñ§eŒ­Nf ø©ð„#ÛDCA4Ñ4B$"f¯4ϰZ[ öÓ &¥tFˆ`U %6Œ©ÀZÅEHTC¡Ô­°a€xbМ˜–(Ù²ª† ¡Ž VÀÞk*±N Àç¥í³%C© ö½ÝZ‹ jJÃæp\ÔFFƒbZŽy´i:²ç,eT{ª®hš%«ŽÝzS@õ¨ô–‚ÁÅ=~š©Õê0s¯ª¢‘Íg·‚ÈAµ°ÑìDuš›´ˆ P‰@H˜YNÒZ+Â`kóLb¶Ó´Ø0¼]­6Ym®e.‡1Äk ¯÷íøÛw?IBÎ/òêÕ–RzõêéïÞ¿;b>NÓñþp˜ž½~¹’<<_ï®®¿xý»¯Çõê»ï¾3³§§½›—y_Ølm/¿x=¦1\+¤z•AJY\ÐÂm0]°Jk2q~xÚív¥úz~rÊHo€!Úû§#¢ F„»9ã\ç=Y†dsÊSØ«€=‰™A¤»öDèìð7rFÍ_?E¿uatä ^•>äÏ$ 28vnèüéï‰êi¼ R! A@Š@2,08H,]KDx“Õj'TÀÙ›ñ™hm&æÓ†Z;-1•QT†ahሠUÏ)72¥Ô#R>—”´µ,LѪe8)=6â›èü5KF„»#µ‹»ÿÍĉˆ»7´O°7 ƒˆ¶êëõ:©(j­ÆÈ­8©¸Ù IDATj˜çÃåîÙj³3Ëf¹,í«¯¿Üï÷ÇãñíÛ_Äp|¨‡§}«‡ívWk½¹¹qb·Ý}¼»»»»{øë£»OÓÔG5äq³Ú@$ ÃW¯¿ú᯿´ÖRJ÷O÷õ·œK)’r×ÃŰÚ›Ž÷ß«9°ÀpvÃ,¥¡†#‹®Z…®6ãÿò_¿Í×/ÕÖ`˜H­E5K·< U*B$3"xrÞIƒ§“£Šd§‘‚("MR"àIWj¢BAéë> }¢ÃÝ ¨ˆFDB¥ z¶ŠÁ=‚¦UO^EBz‚ˆAU!½4ª©×µèPQ±VáÊbRT»oÙ—0É‘…j°<¦¼Žn,Ék8 ""£>–Ãz5JÀÉ+ßw¼ÙàÍI•*j4žˆ5ÉaZkÃ0ÔºDP08RèlÕKH­á¦*H¨å¨>„fd Û9qXµKH˜¦ Á¦€PM¡©yD¤4¸Ç<‡”Œ`y¨·‡‡q°§÷aÄåÍs×¼¹|YJ}vó êoîßÖÖÞüòÆÇV›×«g—y_|ù<¯7¯^éŽÃáp8ê¼ÜÝ~ĘçR,çœóv³µ!¿zýú8-ïß}˜çéxÜ—ºPЫ‹­˜^¯6€zÄRëÒ–e¿ÌÇ@ÎÓþí_ÿïÿSj°Wé'õ³°Z…´@µð‹ˆžúÒZëṲ́ú½RED€ €&*ûú)㓜 !'lÖp9¿Á`‡Âø<Ÿ,>‹¸øtý‰€×hQ@\µØ "!N;E#÷ç!¦ÖjëG[§Aá;(Ý9®ìøYhoAýį¶pQMªh>! "¢ºGŸZ«Œæ§M†”8šµE…¾7éz%΄»~²qî– t¯B ò·Ù¥IiU™pŽ:쉴}ÎK)v®¢½TDŸËRª©ÒŸÆ(¥><˜¨›õÍ‹ÍvМ¶—»¹ùaŠeY~üñÇãñ8;ßüôo/¾¸Ç|ùüù* ëq¼¹º>N°ñûï¿ÿp{·|ê÷ÅËUäòòr½^__^½ùé—¥´Ÿþù¸”2•ˆØív­5¤q0³œÒíí­äUÍlñ†XV›tä´L¦2Hû¤ç“.¡Ã0ìë²Wìëã¶$X-5¯×@RW$bšÄ´@"ÚJX½INm4˜ˆD0$`ÔÂLUE³T­C‰$AZk•%QàqjTƒîªÃ †N\"B(†äJHBªÅ…-4¡sž’•A“‘Õ"¨ÙJbÂbÌM£¹×¬I@Ð@ŒyP†§ª-ž  *‘M‡e*$›åˆœ–qLÕ$-†½X¥Ò3¼zÔjf-<çl¥%‚UËžbI e6%YÕD¤Ñ–¦¡FQ ¬ 䔚]Sf²1ÁhÕµ—m¦5Iç0$ˆ¶¨(-&Ñ@„sÔà ´`#õI×x:<­-kLIÒ¸Ùmÿp‘¡*²Y­Çq,¥ÜþòöØÚ<<‡yž?>Ü_Ü\ݽ½}õò÷››ËúÄÕvóü÷Ï×›Í?ÿåçï"bYêýíÃz½Þn·ÿô_þ°Äq÷õ«gϾXæúç¾Ô¼¶ëëëÃrìžœo­•ý>ÀýT¹øâê@C@@òr·s¯ p`ä§Çy·Û•RºGý“|ZšÙZËÃJšL‡ÙÛ“å5°aˆÃEÆÚ¦œSó9Ù š7#³ˆìHü&GÐû0 {‚+ÑÄ ŸÒiè1‡¢EP óg¥b6”V`™ŒV=à0 IÌè¢E `Í9·[h’$ˆª&3ˆ~L DœžÀçšÓ‘J¨*̦¢KYrV@#¨*+³ IÓ0æ¥6ŽA™¦£™©šÓEÄ­FD y¨sU(¼©=‡‰(Í-Ebn¢fDÏØD‰è1„5ÞÔ”Rk'c."’’¤ÊJ¥9ç¥I1äÀ Jx+‘V}y:0f@ãPVš¶››Ç2§‹ ¯÷c’ÇÇ{ë«do~þéñ¸/-Zkûý~·Ù^®·«o¿Ýëo^ù?ýPëòþíO%üçýOÕªLÇåúÅ KxysyóìY«rûøáðó/··ïSàÐ`–'+’d^ÉCMb9Iu”6ýrëAvBVÐZ%Uaµˆ ,­Ý}Lý'ƒâlÊŸRÐúfÖ×_ˆ<==]_=?î’‡43#ÏQfIÄÝ{­€ªz^7G""Ù§5úëÅèñó«¿wÏ9SDE;ÛVU%N®Ivø<‹Y¯Ü£B8–yÏ[Õ~–R"©°¤ZÑM¥Óú"¸¤¬=ÚATT;7çœÔ”rÍAiÅAMè)k‹z¬õb»á)_Û/ª `$&U³XkïSD–ªg'ž«†z/ax~¼±Éƒ™VøDo$ªXsRm¼XoHzùõ‹vœËüòÙ³Ý8΃ //næ‡û_î>¬®¶wOc^]__ýõ×˲ð¾ý§·?þüoßÿ‡›¼ùðNUIn†|_Ž/¾úÝz½M’..VOûÇyž§c[–åqÿxuuYöÇ‹ív×"R8—­5M¹”"-1¦q­Ù·*šoÆÍ|£ÇiòÖ)ØŽÇc­ €”R—¤]ÌΑn" VWC<_ÿíÿ?–Z„&”@ñRgMB5<¢×RhªÎ­ A@2Wéì-‰"(Ö™ tò@z—'ˆH€~Šp@T†p¨$X:&’Tˆ€®îâÔ€0«‰ˆš"4ÄA£IBƒ™Ð AÐ,‡š‹4¨8Sâ”ÿ Hß—˜Àš5ªscT‰…Ô„“ 9T ¡Z‰]›¡yq©Í+Ð1ªE+ÑŠ)J[TÓ0®EŒËÌ”JÖ9<€›PC¼‘\L³†!bGKJ–4”:K¢™Ù .JMªÑNù?Ûîz7—åÕÍWY¶_¿zó¡-óT—óáa™Žû§›q±Þ6: ³/¶ZÕð p•u¶i4IEûYº*$ˆùpôÚZ‰„l«"öïü··ÿþ“ö惧¢™"¢Šæl­1³µVJ™¦ rNw'„ÝA Ô¬Ìþ¨*nZý}Ûõ`n‡vž‘æó÷ôgiÃ=ìŸ!Àg·ì÷A§¿ÞAÃ]¤BЈ_ý'îîrÚÂÚSL"€Sß’¢²"ü„Çff ~懩l %$3zîI×i­ªÈ(Ðaêq>ó%DÄ o W„óü|&®4Tçy^!­Å¡Y<ÕÖ€@…*˜ .];uQU¡z÷먪á¡"Ã0…ˆ”ò)¯d³Ù‡Zë~¿ŸæéÇ_~\­6 }óÍ7—×Û«««ÍfóâÅ«ËgÏyóæ‡~È9ßß~¼_Ž›4î^|ñåÍóg®Èy½Ùl†|ñÝwß={¾;§û7iÔôbsq\æÍ¸QM‡§c¸MµYNµÖaØ|ƈx˜'3kÞFK­-áx<–Ýn·ßïÕd\a)ò†k>=„éhôf¿®œ¯èš]Tšéå\ï.9ˆÇ ÛÔZ×›a)ÇÕzefµÖˆ¦–ùi%™‰d¨Î@2X(BS^JÉi zÏJúdŒˆè°Ú@! ‚Pá9pB“¡ä ¨ˆ~àךÊÉ7ÜÜ‘N+F“­ ¨¬»bœêê1"X—±«\TáÊh±³ ÐkA(’”¡H“¶¨[$ ©IÄ©v´LR}öTE¤‰ÅÈåT?OU‘ ’y˜$§*ááƒû jNÄUš;$ÖÙ– 6¯èuþRòÒÔD4 ’1p€ÊlÓ@F­FTS#µÛ&='ⳞI£FnjÉõz¼»»K)EÔýþhfÝË»ÝÝXâÕÕΣ~ùÍïžTòw?ü‚Ÿ~zxûx<Œ›r˜vÇýñåW//o.~ÿÍï>ÞýüËÛ_žîP«cúÿú×W_ýNDž]]‡×a€ÊjYš*H·4Ô†eiƒ Ãf£ÖjöañF'_$–’éÒ*.v륷+£æX¸zÔÄexi¥’†a½^«ª—ZÊT¼=ìŸæãSYÅJ ÀÙV1±q7Õ‘EZÒ­fÈò¿ý󮿉ðR¦qض:œÉ™qT¥¨†Š{€UÅOúÂh†”47gïˆÑ¥1 чT'Ø ±¡Î ª’hÎÆ%) T4–ê…ÖŒ)æÔd8•*`KAF/diP J Ç¢=¿9œÃÈVa@ãͨæ•!)$ Ô0hJ­!’ŠÒÝ‘D»š6EeˆY·h$ ’ó ÑÐVb¡z…IS‡X ¯â DÏíjPEbðÊ1ÚDBs¯" ªƒ "&š  i„“.@ÒÔÜ ÐÎ>J’ÑÚs¸«¢bi¨H|{÷þnZöOÇ«íeNÃæjw±Ùþã—ß\ï.]áïßüéçwßÿüó_øQ“Þ?Þþþw_§qxùò5ˆç¿{å¢ëõÅßÿPÚ²Ÿß¿ý¹*×ëÍz³Ùí®[«ë«õÅfòúû_Ò Ór¬¬ÕfÃj]k ¤KkÅ«‰×¤ˆE³1BÆqŠ/ÓawûÓq?—V¯n®ùåÍOÿö\Ù»(!Ÿ—ÉÁÙþʼnðYÎ9"T»ï¶BHx‚¨`…H ‚‚@¯NŽÏÜÌúmõ;öÿGâ“w…˜?3Ê»¨7ôÅÀ»‡Ï@;X «˜X2g× ¨µ*˜-Ñô”ísÚ•PÕÒѲ™B[)¥î‘Â4‹4†õ¯¹Ýn½M"¢jÒ70`( ŸxÎg@NpÒó>€”’{ëFAD„€èo²ëôD¢€óIÞ鳪­µiš”ÖTµµùæò‹çª)%gü‡o~7—å~šîßß×¥¼ÿþp8l6DüÃ×ß¼zõª”ëíêòòúÃû»‡§ÇÛ?ß{åôx,}¸ÿêË×ß~ûíRKNCÏÅÅÅíímõzÒ'¹÷¤¢šå¾Dî¥4M&£ÃÕ­ŽÞ"@¥Jb„¦åþaQ¬×Û*ªõÉ<n}`fYÅ AB5bÉçÕ0ü·þV®/LÇpˆVض‚ !’AU,7œsk%õqGðäÖˆ®ÓN 2T„vš~!Ñë8(ªz¸¨™Ø &A§C4œ€™B$ÑhŽ`⊄;T…(ÀPWšb„« °”~xׇ†u²œºÙ>SÍ_}õ2ç¼ÇZê÷?ÿxxzsûý?ÿÒZË«ñúù3IéÕËož?»yqól>&ևǧwwÄÿWØ·µI’׈UÕ==3Ë劔dÙ¤,‰~òÿÿ~ð÷Éi®É%¹—ÙééKUˆ8áTÏ )ZާîªJ$ NÜôw¿ÿv\žþÕO‡ò¿ü…#öú awÛùñ¼Ÿ»Dα{Õ(Ò¶CQ˜0g8Ɉð1‹š$²•s&²ÖVÛ.¡`ÕÏOî³j9µíîæF­ÐÅÇyÃå»ùýñ¢RS*@@@”Ì$SMŸOfŒ+sÎ÷ïßÿ4"Kªj±ê!)÷f†ÔÀºfm)e)AëÃRŠÀ³»T´µXÉ«ãzñŸã7¹ÌÑ™äš×öQDd5dàœÀ‚äµÉB2‘ph I¾¼|Ö‚3ô¸¹Ì´f ¬>/pX…BHûD„™Ù{OQÕd2! $SÔ!ë$ðñ†c [ df$C„¤…"I½êÖÌÔ¼‚èúÄÝ3\)jÿRì%³ò’9炽9çÕÀ$Ò{¿¹¹‘à(V‹Ö¯¾z½æú7ßý ÀÃÃá¶ßÿï¯?<>noþó?ü§ãv8wwwZ µöç‡ý?¿½ìÏçyyz<_.ãt¼}ûöíÏ¿úâùááxhËgãûï¿oV¾ýöÛ Õk«AoÇc.ÏÃ…T³9®18îÞJ]»ÜVJµšb—¾«D÷.¦çó9"^¿¾5³ekÔ9ç×_íîmÛ êG·¢NF*@ÑA@´5©Vâ©¿ûûÛí©ïoQ;C²eΡ “:.ãxþðý·ÇÓÉ_ýýßþÜþëW¯"âÍÛ»Woò?ÿׯ/s°Œwß~wÜš±7o¿üÛ¿»5«ÖðÅë­–q~öýüðþýÓÖ}Þ¼>E‰Íc9¶‡Ë}&u0Ï~² Åd«jYÛöv<~—þ|a~1Ó9üT^ÉóåÍÝ&§»~ÿ|w÷ö|¾ìs¢ä˜ÏHØs¸oVŒá¢DF‰ˆbH™0C¾83Œ1° ª]‚DU©" àx<~šÿ?ÉÌD~ÄÈÌÌlµªjĪÚýWÑ$E‹™™,RjhYp™V6PÑpÕM0׺}Þ¦ˆ,‹¥Pf.mæÊd_;¨º&Ír£#dEmɧ\;–˾]J CÉ¿ôÎ[bf™YÔ2“AJ^ðúÍÇß‹Hb"rí‰}¦û®“ò4AB±:±ʬ¨ê«W¯Þ¿ߎ­÷þîÝ»TëÁÞûýýýóÃã¡m_}õÕáx<ÝÞÚv8Zk¿ýíoÿøÇ?þúëßýðî½#YÆÝ首ZD[;lítw÷æréï~x÷Ý}Qõ©çq¹»{óøp^ðñxP-žöO»¸Ë~釒IÇ’V¬™Hx€Å“ûþ§ˆ ªU+õ(‚›Ã Ãö­Ð§=xD<>>>?ŸŸžžJUÕ –RJ)É\è´äZW¹ö÷"¢Äð”s?ÜŸHB ª;¤º»ªšjÌA²µÆ…@™"¢j™Áë©ÎÂ%W±••€K¡²ÖLBõ©_ŽÔh6ÀÒ(–9¡ÉT•6#gf%§_"UWÒ‡¤™ÐGO©®|<$²î;M¡˜&®°Z ðè‡ ·œ¢„Œ­6Žið B¤ÖmD–ÿÐ=máÇÚzï<]6Ug‰ÌD˜(CsÀ[݈ÈGk3jês¢’ ’”4¯Ç†5zœS‚Ì,UýºQ¬oU5‚™%E#f‘`aQ-I ºK+—ˆfÈîàáýý?ÞÞ|xxÌmÛÞ¼}{ûêÕíííápøÅ/~ñ›ßüÆ%ûÍï2óñññwßü>3ùË_öÞþ³_þðïo_ß½zõøxÿøððÃû{¤¾ûáw¯[»+··§Ó ¦©¼\.©Àíx´Î=6„c„¦_T¬:)xÔˆ&˜iÁ 5R·ãq ÏÜ“»d½|ReÌC©í§_¾Îçýrº¹}ÿþý¾ïî½*WÍKþ|wï½gf"Ý}»ÝƸ¨"Â$×kø¨“)òéøL* „Gµ`ÎYkÅRB$Ñ Z±£Ë'?¸ü+ðFWºR0±TEý̤…xLd¦8ĶÀžs´0Ѹ|›Ð{oj/ÝÁÑ«›ÑºÕzÊŘ™©õ•¿ËLRDušp’k™Ç5 «A’š(žÂTò‚ßôå`€Å~ èq½#°hŽÉÈÌë‘/a­rͨ¤ËtšiªÓ/~‚sÎ Þßßo§#ÉÓéôÕéՇ7¯Óô믿~÷îÉûçÇ1Æóóó¶m¿üå/_¿~­ª777ÇÃét:}óÍ7ç¾?úóãûÇf-vûöíᨭžL[p/¥=|xw`¦L÷Ö„™µVHfNS³T”ð‚”ëXJQ ÷‚î3"uÎÚJßçíÍkQ‰VÉÃH‰.»PD¬ðÏ|xJàJë A‚¤Ô «Ä^ßRß ½´ÄESûò'ÅtcŽÞ/Èhõ’3©­u÷px‚¡O[À©"˜‚:g˜´šbZ|º#Õ´g\PóØZá4º@ë™C&˜¢ TD2Ev–Ô ¨e·•{\Õ}Ì$JÄV‘È`™&¢jY“™U"µm}ޱ:¹7Ñz8x>Cj›RdŸ°FŒPANÉ‘jm[AH‚H-!RÊà’ga¶´båì³Ö±«jj)£Öp$M´ÞJÉÈœÆRÊœ3"4Aõ)©Ì&YH¦®:äêºcfæóå¼mÛ—óÕÖÚ©nªåðæÍyöÇ~ùðÝ}N÷LJóí«×§Û›|Æß}ñö¼ïoþ7‡Rÿðûo¾ûᇻ·?áã|ÞÏOû¥ ýâ¶i;ÆÛVÒ¾úù—øÃ7 –Ž‘™™³ã¼šô¤‘ZÞ³/~éG«kÌ…(ÉÚn÷KH¨ãÌKìgÝŠ ÕRmD…^úþ<ƒûý)<Ï}DWgª¹^C=?ç—4""""(n¨ lH*ŒäôYŠª”dýh'[àý—-þ?„/ì2‘Kñý(÷Ü¢j“)P—&š€€©HAˆd¦ñVõI‡Åô¯öÄÌŠ\«ˆˆfÆgü™þŽ+oàUésVÒ™a!@’ PD£”–L÷À‹žº:ï/å3>¶Vl3-IO&’nº[N²xFD­õsuÀb>ÿd Éu ¾êAÆv8f¦nJ)¯^oN'Ìøþûwß?>>žŸ~|ÿþÕ›[Eîû¸¹¹™sOÇ_ýêW?þøcݶwïÞJ=ŸÏ Üÿøži¥ÕÓœo¾úò¦ÉÓ>Qï>|ÿý÷½÷ðýthá¢RGr:ÌX±ÝW\%(€o&S·ÈR®Î’’`²÷®Ú.Ok8Ê<žfÛë»·øî{dd )ûÙ´K¹ìý|™¼Ÿ‰->Y*/³I©­âÔôŸþÛ¯žm;f¶Ÿì¦ïç­Z¤[ÙÊ@ˆM+&¥H´£œ};^²ªhì^Ê6fˆ–ÉÔJësNÉ*‘5§æD2 ,V®ñdK/1 QŠš¤ÊCa¢é’!Z¨•ê"Ã,N¦f BJª$Ek+1]E¦‡Y9Á¹ç¬ü ¢‰Æ\%Ô½jqˆƒj<ò\ʱÀ¤ŠŠÌÙE%“$“  “\üqD¤"¦+ HhN¦$ÏZ¶ÑSÐ……K!ˈ¦…¤»ç5Òñº’q-y¡jÆtM Ñ=’&b¥*ébyAËA.csŠªÖòááý‡?}ÿáòüÍ»t’™Z‹ª|y÷:€×?ýé%¼˜þéOzzzºœÏë Ø¶VJ=+–uk¥l[­÷?~_QŽh—þI…f“Ìz¼!äx¼q²çÈ6dE79nhÔQÓzNÀYȤ¦n2fmRÑZ¿Œ }ºïyñ12ΣaöáÃý·ÿý_¼Ÿ¹VŠ\yÒÌôû¹¬WR¶ñ9öÂ7IDATpµ!‘T@˜½@UÊ$ZeN•±¼ÖU«…ˆˆ•™óŠF*å WŸßhIfæËÙ|Mb)pÃJ¹‚϶ˆ…fn €¿ ÒhëÞër-úÒÆuY˜Ptr‘àXêõ^µ”œ|郴zØEnŸuíº¬¿K)I1…™ÐÌÖWf&–¹’8gŠéÍôHp1›´RKDÌ õÓ‘€d¾0îkÀI~ófVlÛ÷ ‰H2xÒƒ&ì¸yŸG«½wžŒ]yî¶ãéx “MÁôZë«W¯îïï{³GD¼{÷NDÞþôËZëëׯ3¸Y>/sœÏç…OOOqÛjU+d²‰¶bBçóyd9ˆTµ€ôÕb̉¬“§""è<»_È»msw«MD2©jsÎ9cι™=??§G¹i¥U=l'ì>-ña–*$‘‹(ÀÇ€Ÿ+«( /_ $šÈÛÃñÿù¿ìvÒÄЮÓ$‡Õ¢’ª!8%Éé!¢!…¶"0¡fJB(¦¹…–TƒÒXØÎÉanî @ש<´Ö末ô¤ÇLF1AˆP$`‚NIGv$T DÊ>ƒH…QBàaj™™Pu/‰fú4f1J†Â!z¾\¨âIÉÈLw„›\¸›d£P•L¸ÚÒÌQ´ªH&Ó#CªZö}L´hiŽd"ª"} ˜™»G2Æ,¢+!ËZošÀp3[<ÏŠS–9IÌêœA& g QeРdxÌó~6½rJbJÍZ«ÕbÛvxózŸcÎÙíß˧þ|Þëi ï¦õp¸yóæ‹VS!7‡Û¾Ï>÷ï¾ÿ}µÚϽ–ÌDÛZJR”†^,'ÝÃ"ÅgeªÖX†2Df)•˜]ÎáSõU’͈”é¤ Ië.>»ÇNU6ƒo—³€ê‡çû>ŸÏ—îÿðão=ž˜H ×9)‘/÷ m^ÄÝ/—Ë¢çœQ¦Oœ0)”ªªªk7YºrD˜ú¾x_¤™LfŠª yQ&Qƒ½øe‘­ÇˆÏÀ{ÎÉÐR*–Õ -r«ýµ á“xB $J"aàñx‡ˆ"­5ËLSHQËÄQÀˆ*fK7ÖÚš^}5¯ZµVèÒÌÿ ­÷}7Åæ‘¢HŒ¼>¹ý?ó‘²rÚ¾HfzÄ‚U5³ˆø¸Ñ-™s*ÌWp´ˆ©¬ áŠXÃ×Iâýû÷½÷Rʇ÷÷­Ôç1KkG-Ç»»¤îû‘1Fk‡wïÞ¹³sk-"Þ¾}«ê1çTC$‘-Cƒ9c036¯núX”⃒ªzQZ°8Òó dæ6KTkŒ,Ð!"ÇãQ;Ç:vÁ¡ea‘ëX¹{kõPêZíׇחðù9ÌRÖ$’håž½ókµQ£1'g@޵‰¢‡›Yw?Õãì}Eø 1³dX`HP å“Ï €ÌAD$K‚i]U¦‚gv?Ø6Á$—¿²Gì`=@A‚”€03<Š)yur292ŠÍ¼FD(„&f%èîž0áT %’[)×¼ÙHFBÕ’4HS«bS³Ú¨™@‚ ¡h”PÃFÊ‹V€¤’ @2W]:’kI‹hD¬9 @DÎû¥ÖÊy¥ðXÄEš]9òRJDpTU‘”­ªÔÑ!ˆµ™¬[k±èóüx?˜[m¦z°­á···sND†FpŒ9Šñ8UÝdom[uÂg1HÊnµ¸»@àÈÌÔÏTù QA„»×jï|<ÞD„B‹‚™‡›Óù|¬Ö:<†G‰°H6±Z«¢ÃýÒ‡Ÿ³ÒŽMéþööÐ{²˜¹µ.™…¬ÕºðïÓ<^,¨]¿°¬ð_ö,ª²Þ€«"Kr۶̬µfæßxÑä<Ü` $kmàÊ’d:ð ¡E477–:%é\ß®«^ þúw¬L/¹ë5W¤ÈËï?½H¢F:2‹æ*,I—¤}ÆKLFw·D)•G[Ón5µhlwWCïóp¼íA\™HY.X8!©d+ÅlõÍÌâé«A昭µ\ÇvSaf.ËÔU?þˆåKÌÌÉ«¬åå|£ª€"ÕÙ¡TÉUtk­Š¾ï)ÀÍV)_нýÉ÷—çžžžôÞçœ@†"$.½ŸN’©1ÛÚpHš•Þ÷ÌŒ"K­l¥‘ÔUˆ83ƒJFº r‚_|ñÅ.™Iòáá!3Ídz±â43;6²ÏÞ;ÉÖÚ¤sÎ-Új×\6"êîK;XÎ5‹_ÞdIÊšy’ „Ø‚›rÙs> Ž÷šw*MTÔØçžÁRZ ]ÄÝ›Z®s‰Á¥[T…EpØd°”"4•²îm„]e­"!¬Ô*¥,Úž‚•¶¤ÖŒ£U4VÈeCU§ hj¤˜3$× ^Xè”1P"Íp°9IZ5"kŠ/2ƒxemxH‘O•Éìäyî­š÷s­‡N?ÝG0%RªIR”¤”)0W efnpNï«",éªj¦¡ØŸ{+[L¯粕V{žs³’L™}„ªˆD?W(²&ܱkÛ29äTkÙˆ`ìON•'ïwwwëÅ{µ}{ÿãˆ[‘àÎ’»Ï²6ZÙ¼Í9#ÎÓáðøtOË8ÈÐËÆ×‰"SŽõÈö¼ï¦`‹`)¥<«žYÍŽR.}‡J à$™™ªÖÁÓB“þe9>]RÅÓ\ëaôç"2ŸžÃÇ«W·Ò4‘ ¯PïCE¢¥ÏÀ~~O’JLyñxÿsþX>Ó9HRòr¹ÔZSU®¦¨?“Å`¬5©ª@)zDøœŸ¥½á Rf ~^"™)H¦‡/Ç‚õ˵ÎR®xÀW1×6?Ýp>Ÿ¡²Õ¶~|un½BBª(23) f¾4εÆZ«cðÈõDf¥”2ÆH‰ŒpƬµ”’ƒ–²÷Ëáp‘@FŸY­ˆ"¹à– ~âzWÿ#‚ÖšBùBÌ»{m’©™¤È5¬c]˜‘Èå¥$×ÈcYï2W˪ U1½Ùn末Ο@zÄR`Öh¬¿·RI¢û¼ìi*¹jb˜™-S®ˆˆË o#´(¢ð9Fb¢Z0—¾^ÙfŪš38|h±µ{®{ ÐÔæsöE4rÆÔ óyFfm-’‡CƒÈœ³‡–Ëècô,Ã?méÿVL^N/óãj Pµjú³Ÿ¾ùÛÿø Hc¤Òèh[‹Ü™ÊÐZ´‡»$EL·Ùg-ME‘¦[Ò>®­¥+Lµd–LSS‘ˆ   T5NW˜š˜ á’ ® ^Ô°f%D§ÈH‚d1Cp±t$S¢ YŽŽ¹¹ ÕS PŠš©dR$ULAbiA̘ó¸2!0K1Ó$„ T-Ùª‰‘ÌTY<ÔWé›<ÄÓ“Tˆînf£Ï"¥ÞwIb½r$‹€ Kê¶ÕÞ»™…OõIf@yÍû‘)*UÄTŠÕ-ÅŠÕ‰e£Öáœ"—Þc>f³âcš¤G”ZNÇÓ¼ô9gQSb¬¤¤Š(£¶Cу°•} g>Ó‡‹ãÅ'G‹¥µcNŸ"& g$0欥¬ókµZ½ˆz(Sò²ï®¦Œ^šÛM1Ù6}žc2J)>\RD$ÈÒj&.—þøíøú÷’•«Fñ¢Cþ{ü±%ôqWçCmã‹§¶ˆŒ1öyÙN­¶æ¾‹HÁ©ÜÕ‚Ù0™ ’ÈEW€¤L擞¡ˆ1U-¥@¥ûÌÄšþ™ÉäÚ»ëgøH’ ®ìÇZŠ¥ý”É`U-‡»«ˆ»e‰¬žip5yi\狯ýyºùËåK-V¨bÁð8KzfÒ«Z5ª£ˆà¥Ú*8‡«&ç n)"’÷1÷+FFþ¥éq[Äõ$@ÒI‘UÁ©Ëñ $j¹ÚPÖò£ÇäLR ŒX6JÉÌR Ä×ßÏÏÏ"²œ½ˆÉõU¸/Rˆ™~¬+•¢l ©‚ëé´ Ñ|xТˆõÔÈãñr=Bƒ(£_Ιq{{·pzÎ IaÄ`\Älu ©™)/n†bzww÷›ççü £ë‹,@LH"ä:gˆˆ ãg_Ô¿ÿÇzn?¹ìV,3!œ€Z›ýâ¾ouË™MÚ˜@À¤&ŽDÇÜe¤hFÌÌÙlf0 ¼ºÂ”Z39!ôZ,TÓçsÓ"1™32$±fÛŒÉT`BD2DbFzD!lV”)‰Ššik¨ ™jå"!LM©PdÎ-6Û½a™*23#èÅ:3LDŠdæƒÌ2 …9…,™%€ $FŒêáЊÉY˦Z¦31kÄè[À¥ï)8Oû~P€¬ÆDˆ;fH„³A=ÂJY§eÑœ³1|³o¥"àW£•(/2’žuZ¤¸{ìÈhesŸ¡ZJiA޽•ŠV6UyFH³ &sÎZ«Ï™ûSSUˆ¹ÕfØ=:X %‰ ib›nܬcmŽþÜ/ûÌ4”­ z”âî­Ô"Ö{<>ÿøÇ_ÿkÿðËÖá_œ¹ëUå ÝþI2“ɵ@I2¹þ]Ü@‚|ÑùÌŒäZÍëZ’&*ÈnHA ˆÉ Èf¦ž2W¼ôºÖ—Å ¢"š+k‘SÑ…P±D ¬“I’© ?êÈ‚e,äB8„DÔÄêÛêôúH.ÝÝÝé~MAf  š×ï…åëR’¹²Ûé7I¤çDj%6ý Ф–ÑÝ (ö‘W&1çÜôàáÇíà±?å¨R[,MòÚÂBë—öþR2S׉ùÅ5%x5þ©ª†èÖvM«ýÆGĺËgÃ×ÎF5]˜R„äC`¹ÎýŸù¨ÈÚÜ,EDDæ\…Šqh-33sÎÑê!"æœ$‰Œ$†+Ã$RR¥÷~¨zívæétŠˆ’¢ªWÿÕ1F©õùùl‡Ó ÉLŸ1jWùŒåÉõÎ$3°(­Ì·§úÏÿõŸºœŒŽ&ÐB@Õ,¥¸{fŠ$ fÂ$S Å")L1©¢uyw.žPS5Ð#)2`¤«€ˆ´2ÓªrhZb)­"I0ej!×QJÄ“‘‘ »!™‡Ö›Œé.™¢šjZ 8*ÅÒÉ¢PE0&j‘-u2¨ª@U’’© ŠA-¡"šlbM²qÐLÝ««{>ådF/Ì"l’RlE3bFh-šclµ)¡L5cær»‘—S èunY)Ž r èšmªêî©â’=|0DT€ô çLÁŒ@jµ bµ<É]…Aƒ¨ÖÑ{1®ÞØIÃ̆ fT›ðô]òF¥’CKOU3K[:z¿ôRʘ3©R+ƒiz´yDl)MËåy7k)Hô­¶˜R·òf;õð³ÌŒÝFôžVß?Ýÿð‡o.÷à’€_À¿¯ãÅß*"‚‘‘„gJÕ®‹83ËN­äÒ}I®›dм )ƒ½Rc‹î‚+öpI’T)¢:„C2óSltf23´L˜¹([Ñ:A˜D.ªØÌ`JP$¦\{hÐNßgV+ɨ¦krÌj|=°Œ¡Œ¸¨ê:~Õºòà|>ë¡—r™BHÕÞ`áiV%®:ñj™ä³õob¬eRY(Â¥Z¿I{á1–¬KÜ ¹kr Ó–…¨–—s\ F¾|ñ X禚¶v-¥šWAfB ªk3UcXQA±¬’ ¶ÍÌÌD¤µ62*/‹Š­×zƒ)É7oÞ\zôDªªJîç˃?Œ1¶V¬U3ót:MØápØ÷ýc@Þ_ÈÿnãÑ­êJtIMEÖ 3’±Ç~IEND®B`‚bitpim-1.0.7+dfsg1/help/screen-callhistorytab2.png0000644001616600161660000016320110410665462020177 0ustar amuamu‰PNG  IHDR *k!Ö pHYs  šœtIMEÖ ‘ütÂtEXtCommentCreated with The GIMPïd%n IDATxÚìÝwœœW}èÿÏyÊ”í½i%­dɪ–›llc[K³M0Õ˜‚I„$÷—Þ~p“vo’{óú…„Ø&¹pÓL ÁÆÆ+Û¸ÉM–Õµj»«]mß)O;ç÷Ç3³M+i%í®Ú÷ ãÕÌ(©ÁdƦ¦+Ž…Ñm…XnHÅC°â—†Ä½¨Š‡PlpK‡¨ÐfJÂEò B!"àK ÄùÉ+|½©ñ5ºÐŸH4òq…€‰4èBå@¶ð˜˜IIFñßQü¼ŠBLTˆÚ a+ðËÃþí®BqÕfCÓ"PÃ*Ÿ(0éNI”mMiqÀr§UaLí¥´ÆöÔLFqž’D_!„X0Çt¤MÜ=c'“_0­ŸR11 ‡ô¤É|A6þ÷Á}…–…žÃP™F©,&YrÂãV“ÜÌøœ‰4ʨxf$t<#RñuZšD…B!ÄÙç*ÃÇntù³÷WÓRëœQYŸüB÷þ, 0jîËþ§>î},O „׊øØÍIþìôԹgVöÿÜǽÿ1@ðPä³fp9 ‹Žw g•8˜¨LJÌôD¦˜$D’,q^2Ò2(„|o…¸°|¬=ɾ«–¿ÿn@ÿHH&oÈû„?Œg$ò uãÅp7˜ñûyr^@}É0÷ü~ hÍ—;¼ù)Ûh¾üˆh>vs’Ï¿;Ëð}BïP?:›ÁxyL`?.<ô qzÜÌ`üÂhæ(BûyÂ|ޱŠzþæ¯îjøò·z&.LÞËoЦû - PZŠ•rÐqËÂ]ý—ÒÖÞNÐ ´uÀGÛÚ§^`î £3Þ¨ý.èì„¶v¸ï¡î©ILÚ-„BI„8›_‘o/áþÕ£¥VáØ0œ1 eânû~`Ð:îEi0‚ÈEàGàù†¬£ÙˆááaÊ9Àþ¿kYôÉ®ù+ûWÇeo)ýÿGØ -(ÛA a||S˜c5N „&Š0¡ñ=L>K˜ehx˜.·œËï}šEo9Î^ ²Ã`õCïkS×YÐVanÔ¤Ëx–ÐÖÑ^¸ß1±qÜËÝ|¬ãnÚÛ¡íîÂöÐyÐ2Ã;¢d¨•t!„çŽÁ1ò&…mÇA½ë˜8€×а+èQ` –ÛR8–ÁµÁµáp÷Ø1Ýæ¥ìbkÄÈ Në2”mƒí t„Ñ…äÀØ(c0–A0Êkb{Ëqë9LK}".4áB®Œ“Š‹²¬D<:J€oÃ¥…B@GáçT÷¶µC[;_íìˆ[ Ú crRQ$Ý„8¿I²/„|o…¸f #YplCÖ3ä<ðü¸öß!ã®C‘?4âµ ‚¨Ð ã^?vq Ë™¿²£‰•œMf=6‚rL>‹ñrÏÃø>&ð1AwKÒQÜ5 ÿŒ GX–]˜ŒÈ ( n¶“’…´…¶IÿæI Ã&ÚÙÜy7›ÚÚ¡£ƒ¶µóÕöBÂÀŒy…B!„ç?„¡ŒÁ¶ “—ð|õ¡Á÷Á AÿÔ&î>¤)´hƒ¥nq‚”ý÷ŸHÎú¸®úÍÌ Ë6ËÆä2”¾ñݤ¯¾‰žßû>:ð1¡AÿÔšÖ¯?ÅØO¾Ãà¿üF”eÅ-'à`UÇMa!w°U\ÑÜÝ #ÿÎÉI@œÐÙÁ&Ú>ÚÑÎf:èlkÚ }kj¿¤‘œa_oÈÐ7þØ‘i ñã=3ìä2¼À°ÿhÄŸÏó{ÿ62ë2„Bˆ‹F(—@ˆ“ Â8·,ð}‚‰›Ä¿Äc üÉã P(ˆÿ«ÔŒß»éeŸÒ×W«cËž’,˜ll ãù¤¯¾ €¦ÿýuº>õLèCàÇãŸÅß|€²·ÜÁà? (8QÇŸÂtªq›†I‚[˜2µÐdÙÖ t´ó(w³ ¸a’¶Éÿhk‡hoÓš@K›ÿ’Òæ¿ä‰Ÿíæò¥.>_;åy¥CÒû·ðÔ_Õ1üÕæc޽´ù/ùÃÏü˜êdÈïÞ^Æ¿~¼ì¸e!„-Gnr“Û oÄÐ~PHB#CA¨ãn@¡6DBc´š¸Eq/{ hc0¨©ß»Ê>3–=%Yðоñâ.GGþø£ãϵüó AG…ã‰ÀÁw®¡Œ £«a¼ÛQjÊýc»!E8ñ¸ƒöblî耶xv¤û ÉDÐV³@g›;:¸¯=n}°‡È®â´„!{Ó/ó ÿæ-°¸!IúðVr‹ÖÓøñž)Aþu+ãƒ,Ùý$Ù7L)ãsû.§êÁ<Ÿý`Š;¯Kò©Ïuá§+Ž)C!„BˆÉûqw]H"/™Âhwâ‡Åû¦L«‰˜ûDeÜùy|ßà…q7'/?2x‘"(´\ìúb ÁLeO›kÄxùxÁd­!Šèù­;iú‡ûXtÏÃúÈëiý¿OO$ ïXokt<ÈÙ€šÜ¼`@þ˜:‡ ‰$ãÖ€»:ÚÙÐ ›a¼ËÑL6wttÜÝNgGÀb;>;5}ÊT—Gþ´ €ÑQµ÷Ì·s!Ôûú0ߪß:³å½¨÷õSÆŸ/ೄDÒÁ9¼ oË{Ž)ã§[6^âP‘V8ªùöÏ=Þ{]’%u#9Ãßý Ë_~'+ß!„Bˆ‹PÖ3xÁ±Br` ³a™‰hY©¸ãLF©xuc@ÆB×þ»Ç-fW6@÷qšZ¶Uˆ¯ÏbûØ0Zc”¡ë7ßIËç õߟ?–ÃïYeLavCe@é© .Pn)P¥…]&Êâf†D ” ‘Ʀ³Iƒ™§jÚÛÛèììˆoº%uN ޶à(0öDàßýÌ·êyãúøB>øÈnhY‡úàÑñmJÿÒ”û¥ÍIÉã_šz¶â×nM°s÷Q²Ç”ðÆõ.>3ÌŸÿó6–ÔYüîíiîùÉþ/{©H+þðö$®ÎÇ+7¹Éíø7!„â„ñh~/ ¦M×›BR(»¨Û c+Œ Ú‚ÈR„J2±°Ú‰Ê†Ù• Ç)ÛISè±/w92q—"e ]¿vÛ”ãèúÀe(Ë ”ÁR‹eB”)tUppU¡uxg·b†nH¶GM°¹³#N ÉC礤 ³s|3:içî»ÛéèìàñN—((á”Àà?ïÿE6ÝØÆš‰ZãYÒ¤™šõµÿÆ”û¿öæ>{g/0|å«[Ð —ÎPFì®|žhãûùÓOÅ÷ÿîw?Oðú_æO?å¥î¾ç .Ý$ß!NÄ–K „âL¢¸;mŵúÆ×è[…ÚwJ)PqM{ÛžZ 3Cù'º/„˜&!—@!Ä…§XûïÚÓfšIaeBާYÕ¡!,¶ä%œ–F AÊ2¦ØÚ0Q6ÏŒ4½lÛo14~¡eÁqEËÿs|¿ÝŸº%î–d┤ÿêË4|¯‹Þ·Õ`E!&ÔP솔H‚ â?øå@®¤,¹Ñxd®”M{;t[»¯-Î Ú ­ P·ÐÞÁ¦Î»¡:î›:®×ÅÆ*˜`êg/„Wöå¸îõ_Àl¸ 5-VW|ïÍ®±Ètëãþ1ÏŸŠ™Ê?“ò„Bˆs ¥Õ\ˆ“ñ ƒÛw´¢È¨ñ]¸FqPéb¢aŸ°ì}65«ãš±l'v ^ÁÙxù¸eÈ<ö#Jo~ÝŸx3 1&ŒÇ%è£#ú>´’ú¯ï"÷à¿Å…!!&œ4k©r/^kÁO’…0$n§t¦œ\Ggm´ÓI;ímítÞÕAÛÝwÓvw<^»Ûé舆8qh;wÆÝ‘T…º7Y.Ø¿aH}÷¯¦^…æK1×¾¯u-Š©Û¨„ˇþ¡û‘¯ìßøô”çg2¹Œéåì¾BqA% ÊÈEâ$Âr>Ø6 7ÿAPh×þkRø(0„0TDaܲES è]uZe{|SH0ŽW¶cSÔ`Âãçжe Cÿú7 Ýó7`Ší:n)Ð>„DAÜÉÏcÂ…˜(Чr…x s‚kApu!Y¦® ”¥mmqðßtRX  è¼ ÚÚîŽ : S¬¶ÓYÜÜÖwÝÕοÿ,TapD\¶÷¾Ï`ÂÿâÊ¿çÓSî•“›þüÉʘ¾ýÉî !„ Ë•ÎBœŒïûä< [)tŽ­P "âÇ‘÷ÔPq0¯~TH|CäGh?„(8æ{7×eO$ >:ŸÃR6Jk”í ,O…ª@¦Gµt‘ }㥤MA¨§¦®@*($ 3ÐÆð›ÿs¼[’}Ôâ¼Pì+õßáeÀRP÷§üß^T÷§Pfþúmì0yæT”#¿¸„8,ÑB!Î7]-#ô Çyx®SX@…±ÔøªÍ‘² LÜ=(« âå üòÃ,­3ó_¶« 0t DdjZ0ƒ}ìDaq6Tܲ  Êh”‰°‰ P:ÂD*Œ»…a8Õ¼tJÙS“ïØdÁÑøÌ@¦0ò:Bck–Ï& 3fjMîïJ°!„B!Î=Ÿý¾Ç7>SÃ>ó2‡Œâ¸I”ÒXh´‰{Ü â©K£x)3´±ÐQD¤Acc€¥µßÿÛkøä=Y =?e%3Qö·óüÏÿý žú>Àp÷a®¯*­,ÐÛŠ#ve"l¡t„e4Q¤AGØFãGÝ´”M_ü>ŸüÇaŽÓ†P|tê’s&ïÙ¶)4y„.QRƒVqÒqÅøú †È?0…¥èÆ}Bœw¢HJ !„¸°Üût´áµoÞxFåt D|ö»yî}61¾dÀœ–ýí,÷þܯpïÏl—󥟼vfe÷G|æëcÜû°Š—®ÂÂŒH-/–UCU)XyH2Þj|ÝÇã`'&%öôÀ!>Î|Î&°ã変ÏQq>’dAˆó0Í—K Äù(,Äãa/¶ ¢xQcOÌØd =„Líö?½ ãîE®lj·+v7 Ž˜à¿ûŸ™TÜPª€#G!a£”?í¦Æå¨I«$ۉע¶''fÆ#¬")„B,,O’!ÎK.€Íô‰ˆ¦Ö„õ“7S:^.bj=Ÿ.<®õø*ÐhCL¼m$R@ÉøËŽíœ”°Ç³SŸ`ù‰ç'/ò6903ÜQjê¿…ç-cdÌ‘çùË+Äy*‚YýÕµ§ýœé¹™¶¾bÀäE«ó)ÈŽÄY‚•ÄÁ@Òó©¼¶Ž‘¾AÝ“–7H!„Bˆ‹PÝG«#ÐÕÚÇ’K"„B!„˜‰$ B!„BI„B!„g!Y¨k\}VNàlíWùü !„B’…IAÑôÛ|KÇÛßÉ‚¶3=žSÙçBŒóu,§s® pÏ÷gëT®$B!„¸˜9§²ñÑ#ÛgõØ\9•²çò8&—U׸z^Ïñlèçúy]ˆ×]!„â‚MftN®€ïx5ÀÅ}ŸŸ‹}=²}ƲgJ*&?6W×`ú¾gú÷ÉÎÿTŽåxåN¿æ3û\¿ß'»î³½6óñ¹;Ñg^!„B\”ÉÂl¢±sœÍTþLþ|9Þ¹MßçÙl8Ѿ‹÷§'³9¾ã%gzn“Ë9^ò¹P×óxÝŽfs C‹”B!$Y˜U°x:×™½çŠseÃ|%' ÜÏÅë>׉Ëñö+ã„B!ÉÂäÏUÀz²VSÙn¶òô€õb¬±>ÎYZ „Bq±™÷uÎ÷ÚØ³œkû‹·…ÚçÙè:5Û}N“1½+ØB·´2!„âb0ç- §Ó~¶ÙL}íO´ÿ¹+1Ó¹oŸ';Æù¸Î³=–™ ŸÉµšË÷ûlîc.Žál£B!Ä\S4¿`’‹J©¼¶Ž‘¾A}>«r‘“Á¹rÍ„Bq‘Æ4m†Ñ#ÐõŒœ}ËÂñjÊzVšùÈNÖj±Ðè¹r,gã<åz !„Bœ]³N:X:[ÁÙ¹^,×à\¹ægr’L!„âBdÉ%B!„B7YŒA!„Bg„9$OB!„B×1cjVÉUB!„â¢4râdá;ßü²\#!„B!.J8q²pÇû?!×H!„Bˆ‹Ñ}'iYèïÝ!I!„Bˆ‹Ró”{2ÀY!„B1#I„B!„3r䈹ÔñèæÓz]û6]ÔÇ&ÄùÀ÷5`ÐFa)P \W꜄â¢O>|í­|í™/¸ p!ŸÛù¤¶aÕ9;^f.ŽÍ÷ Ã#š×^³xù‡-[’ìÙëÒÓã04¤¨ª‚††€—\y¥ÇåBÖ¬6TU) µ ç{¤w˜‘‘1‚ $‘p©©© ¦ºL>¤g ïG d½ˆ„£H%l*Ë\ûÜ ´ƒÀ µÁCBéøgÆŒ‰·³,…ëF¸®Âué´-o¶B\ŒÉ‚âô“„}š^´y~Kš®Ã½}.GÚŒŒ(òy ­al̆.##:<ýtDsKÈÕWù\yEIJ6H&Ï,°16fÖŒŒFG ™ d²àûŠ|‚´£Æ€ã‚ëÊËuu!-ÍŠæfSŽ´2!„$ âT>¾á­Ç<¾qQ;Ž=óÖ0ŠxîpÇ1/«\Oce£\Ôs”hž|Êâ›÷§yò‰R††O¯œ—_N²w¯Ë¶m9î¸#Ã[ޤϸ…¡(›õÙ±ë0Wo|Ý}Ã|ý‘l?×EM‰Kûe\qi3µuðÜ–]l¼jå¼_ÇLÖãé-¯°é¦7aY}G{yâém¬X¶ˆÆ†ÊY•±{_[÷ôsùª–-®™÷cþÎc=D©:®Z[‡Ö3ñSÇ?1X–EMU9uÕå€á§»zÙüjo½ºšæº4?ßÇÖÞ$u®7?ŸU?"“ÑéÕ>¬éí…ÑQÈæ ,|ÏF*NLû;ΪÕëóùç¶¡ÇúyýÊZV6WP‘²©*KSžNQQ’dQ]%—¯lâõë›èöùþÏvQ]SËÚÕKèéšÿ÷·¦‚•Ë›yyë‹8ŽC´-YΎ݇Žûšl>à©-ÝZš[I¤’4-Z«{‡èé™—ã<:äñòAÍÚeõcèêáÕ=}<ñâ~ß²Ÿg_=̶==ô!Ÿó Á÷DÒiÃh.d(o(¯«cón›¾P[_‹êy»¾~`Œ8|Ž…\NáyñçK)pC*¥¥†òr¨®2TWAU%”–B:e°¬x t6 ]ÝpàfhX“ÍFòËR!Îs³nY˜m­ú‡¯½•ßüN¾öØã-n\AEcÿþØxׯR^2¿$OugrnâìûÎ7¿ L´ œî©gJkØ»Ïðð# žy6M6{ò×¼ó_üb\;þñgùáÃãnÛßoóì³)ú‰G2é±êR°m5ëÏnQIe%7Üz+ʲùÁÏPB–7l¼”šª2Û¶,òÙN2‰² ÓcÚ6Õ•iÖµUò®A^ÙÕÅúKÙ`'M Uó~m««Ê(/Màyy”²H&“ä½à¸Û?óâ!*ëZH•–c ýeÂÀ§" MõórŒ»»²45Ô24’ãg/`ÇGóT¦,~ac ×­©ÆRŠÑQ^=˜çàbíòzª+ËÍ Œùdò!^ ÑÆP^UFmmG†rT¤Ë¦7PÌ1….\'Ç1¤Ó Û†dR“L@I‰"6$“ ÇÕXÊ"Š Ÿ7 A¿"—‹[#FGáH¡¹1¢²ÂÂu ®«ä•B\èÉÀÃYþäÝï>ö‰Tê„´’é$ ‹¸ÿé/óþë~ÒtzÞNêtöwºç&Îg{úÕ\^óó§m}4ÍÈÈìº }éK%ØìàË_^IKËñk½ÃÐbd6oNQ[±¸5 ¤ÄšuÂPLŒuçI¥R<¿½‹AÏæ}ï~#KÊpm…m+l¥í9Âèh–Šª B¥±il–5—òÄö~.[ÑÄë6^ÊÐp–ªÊ’9¹†{éëàš«Vó\:•ÄC:ÏÔ”N¥Ž­pH$“äsYŒ1è,fˆº IDAT0 ¿·‡[oZ>oïÿS»r¬¾¤†{ø#Ù€dÂeQUŠ¿¾k9•å‰I•pùŠ ò^Ä–]ý¼¼½ãVPRš&,LWªµa8 µ!Ò ”ÂÌS¶p55mm!%%ñgÉu åeŠÒÒ¸õ ¤JKl§¸®BÜõ(“ÕtwǪz(²¡!`hÈ¢·ÏÐÔ¤))·Bq' &šÝ¡?ùàg~"Ÿ?q»ÑŒä’g˜«Wño?ÿnYu'—´\2OÙ©ïï´Ïíu²Úùbm~ÑÙÃÐþ†MÔ6¬?–éÇtÇû?± Ç34=žâçOÏ>pV“º[³ì­ôìs%TWknysHyù©a‡býúõìíîåðîdV¤éöÊH¸6Í‹ZÀRx¹<~¢)CiFF>ŽRT•º¼¸gˆlΓ¤«k?U•KçäîÙ{ˆµk×óòÖ½lX?5°?Ú?IJåë±m¥atü..Q‘ÏåÈ{>¶¥ÈްfYõü¾ÿYÍ“/FcS_ÆVšÛ¯.™’(L©‡HÚܰ¾–Ë–¼¸{„Ÿnå’¥ eƒñ¤¡Ø*bÍc¬LZÔ×lËeQK„ÖJY”¤©T¼Î‡ë*, [¡¬øC«5xž"ášx&¥Qð|CC6}Èd ÕÕ†dBþØ !Äy,ÌZ>?í¯]êØÇfŠÝ&Ò!˜|˜¡miîý¡y'«Í}òÓÚßiž›ˆ­Zý“ís!iç.‹¾ÞSûJ}êS9¾ð…xV¡O~2;û󰨾ÃbÉiŒ/Á²,v¡²ÄÅqlrù<‘»÷°tÅ ÆFÇX¿ºœ¾L&" l‘tA)‹†Ê$»»†Y×VK6çÏÙ5L¥’TWÕ`)›§ŸßNc] ŽkÑÕ=ÀªÕˆ¢ˆ(ŠPJ‘Ÿáû™Í<÷Ê!êê¸òÒ4›Ÿ"4×:,™ÇÍy/âpï(•¥I®½´Š²´ÅÀPŽÕ‹NÞå²¼Äå¦ µ,®Ïð¹îæÆkWsðh–0šXüL©ùË 0¸®¡¶6Þm)GaYꄳoYTVFÔÔÄ-#£ µEFÇcMù)„M²p’û#_¸™%×~úÛ£Øô¼¬e ö "/Ì‘õGiZÔÊc¾Çþ¾u¼é²·p1¢ãùÈn¦µ>ÞŸ¥ÔÜîO…óÆô†…nQ(zùe‡S›¥è»ß øîwƒSÞ×ÐÅ+[mnyË© M–,"]²­5ßRžb+Õâ©H3Z“Ídxò™aV®]Ö!A#áQ<Ç~IÒfxÌGk=ÐÎ…ªÊrÆÆF)++eÕ¥ëÈ{ž—gåÊ58ŽC.—+©+/YÅ«Û÷³nõD«Æ–W“L•qåªr:žÜ˪u8¶M}íüŽ“2Æ04æ±i}-Ëš’¤\ÅÑ2sJS‡îéαbIGG=‚(¾®ÅK«æ¹O"a“8ڥ⇄ ‰„Á±ž§ C ßÓÂhù%„o²0MmU·¾þzG÷“°“ J)Šá\/¡ö ó‹GÚEMM G2{yø¥ñÆ oÅuœÝŸ¸pLoA8­/¾˜``pöIo_Ï‘c«ošÝt¸ÃC./½”²§tŒ–eaŒA)E:i“òõ¡ãɆ«®oalx˜PG˜( ó$lFa€È€ÖšTÂ&Š"æräíâ–z**Æ*EkMYÙ±eŒŒÉd(//Ƕ-¶nßϲ¥Í¼øj7^ÓÀ3/¤ý†å öÞ§SKÒl\QJu™ƒã(–Ô»”¦f÷yزsˆW$(«,gpÌ/$ çn©s¯Ï¿ïkW}pµÑ­éÙII¢Šk?÷<ö÷|øúߤ,=ûþÞ¹`ôŒöw*ç6Ÿ"­Oë¹ùT¬­/:ÛãNdúøŠé³#-”Îý.ùüì“…njæÉÇ»Ok_¹<ì?àžúëÆ’)tCjª.aw?ô9J}u–@4¥«»‹+6®Ä± Edcƒ†2>Í5©BŸú¹ +*Ò:|”ÖEJ5Ç{ ÉMEX–Åèè(xžGCC#‘Ö<õü>Þ|cüy}ì™N®Ù°hÁ?‡õe6­õ ÊKNí}Ùqp”'v‡¬ZÞJ.ˆ¨.K@œ›a/zVUê2|Ž|ß‚@ã†L&bhzŽ„tuÃÈ„aœHZ–"‘×™ÿV!„çP²P ªÇ Ñ:"Ô~¡v)®å/üƒ‰·)ü/ÒC¹‚Džê†V¾þÔçyÏÕ¿J]åìVY=Óý9ïsèÿÖØ¬Îm>Ý÷Ú§ÏÉǹ4àt,ô8Š®.—\nö‘Ñ®]§Ÿzôô¸§õÚÛn{#™€µmÕìØ}ˆ×vîg¿%)›;~éÎø<ü£‡ÈæÆxÿ/þA'ÝŽ‘VdòŽeS_UÂàà uµ•sz[ÕÑÛ7DWϪ«°‡Ö¦4Ͻ°Ëv¹âòär9jkkéb÷þ^Þ|ã*¶î%;:Ä5ZI§~qú¿¡…Á‘€Á‘‰ne‘1=‘L•å.u•ñjeA¨yfû U.ôÜyܲ‡ Ë+Îúw*ïEäršþ~ÑވžCßQ ƒ™aϨ•J*+ ¬ÌÂq$[Bˆ‹*Y8m4‘ #Ë›BM¿RñheuH>Èà‡y·(ƒ¢8À6z{ó¬ZTŽëºìÝ»—«¯œûYÍê«h¨¯b4“ÇhC6ï³ñÊUôᥗ·ðºko`pp×v`Óµ‹Ù¶gŒ#½Giª±ÏJ¢ð·tqãåmq5…™¨Ò(ü6b,ðük‡ø‹_œcá:yËÉ×彈‡FÏê÷-—‹Ñt÷<¨èî1 Yd³†(¢°²s¼NC]-47Ce¥*Lµ*„â¢HŠÝt&wÙùÚ3òá›ß @êcñ,D¡p”eÅ}mh2â%Œ÷³GjtdÐXÊf$ßDzÚ+øákÿÆÕCoàu«^Âã)ÎztFû[t?Ûù]>ù[eåþ¦ãž›¬µp~˜©%a¡ZJJ ÙìÂ$ –ïït´´´ðÜsÏñº×-ám×´ðÀ3¼î²%$ݺ°’°²],Û!ãyþµ1„÷çèéùÈ[–ÑÓÓC:eQ’ž¿y1ËK§®¥`9 †rš¯=ðSê«Êh¿¶•×öeèfãåkèïæÀ¡>–´Ö/øg¯¦}gëx«Â©ðüˆ-»F¸ü’ª³ò½Ê{q¢°ÿ@Àž=ŠînU…nGqW)Ë2$“ñ ÏK–(Z9”—Y$’,!ÄE“,œø¯IžPûxa–Œ7H亠#Bã‘FðML\ã¦-°\âά*î.E!Y„¡\õV5¯zî¤ÉÂ\í¯Ö® ye9»MÌ\â-[6åÜ„8™ÚÚ€ H,H²àºšššè´^û‘k®aÉå—ÓØØÈÕ«—³ãÀ ?y?C¯>Žñ³|ü÷å&±„Q1Q0ìíÉñü®îzË**JSüô'Ï/ÈêÍEÏmë埥¶¦†­;X·( ©¾†ž#ý¬[µŒtÊeÙ²K êçhÿ(uµå úþ›Â€ÞéJS6»ô±iM‚Ö†Ó[¼®Äg,Eæ”á›»_ïšÞÞ]»áàAÈdâõl[á8NJJ 55кH±d±E]EY™#¿„âbJ&÷éŸòïB­û¾t9£Þ G3‡I; ìx ›*¬ ñ4z*2˜B¯cˆûôjÅŠúDc).o}׬¼á¤Çã…Ù3ÞŸ7dÑÚ²–þú³'<·ùÔ˜\†mÍ\;iŸ#Þ¾³þA™>àù\2}°õô©Tʲe£#†Âìžóª´ÚÚN?+ydëVþGk)»wïæC·¬çù]|ct]Ø}h]ZFÓ5g`,dÏá,‰D‚OÞ¾Žúêr†‡‡y×Ûoä{?x<&½€TÒ·óݲý(ÿöH/kÖ¬`I]šîáˆWºú}¾í ÊJ’ضï¤R ÔÕ‘Þ!ªÎêgÓµù\ŽÁþ^6¼iö³3u”&m*JãZù'¶ ‘:K5ô¾¯Éf GzáHbt4tnY‰„¡¼ÜPW ÐÐ õ6å©”Bˆ‹,Y˜Ü%g¦›iŒÑhB°mlDzÁ²Uq „8x·@G ƒÆi§Š¥eWâMñö5a]ÛºY1g¶¿Ý/wóè·^å3þóIÏm>“†ÛW|‚¤;s åÿúꟜ–sy@ó¹0uêúõû÷;íŸÿ ©¬L³níé-†VL†µª¡¯o/®ë²quK+yeÏ2övÐ|Ùuä=ŸçwŽQW•âº5Í\µ¦•0ð9xð Mõßüö#„aÈ׿ù–qÇ»oÁuæþÜ»fùÆ£=T×׳÷ð»e,›§ªª’ýý‡8tø0‹š® —Ëá8ÙlmJèîÝOIIŠò²Ô‚¼ÿñ¼PS›BmH¹.µuüèçGxÃåµ”¤Oük7çE f áÀp&¢g Ïs×.·ÏJ«B¤ ž£…š!îv”Nª« ­­ÐÚªh¨·(/³I¥”$ Bq±& Sºãäóñ*Ç“ïæÈ‹êQqàî¨x´ñàÝ63­H¸%,/½ÞƒýüÒÆßfQCëìç ÷÷ØW¶³!Z4»s眓µv,tkȺµO<-Ⱦ*+£ÓN&'ÀŸûÝßeÕu×ñßÿæÑ´_¹„7^m[‹kmÛ&—ËyÝ<òèóäóuuuÔÔÔ066F&“!™,á«ÿþ}ÞõŽ7ÏéìH/î8Ê×9LUãFód3#íîÄIU’¨®âúõ´-ªÄ2“Âóó Y¯„ÿóÅ¿§mÍÞõ®MìÝ?‚ëº,nIóÄ»%K¸ñú ¤R.?øÑ“”——SRR‚Rб±1ÊÊ*©«­d`p”šê3/ðòΣÜó“.jê›ÍúØ& ¿kžPUÓLÿ ·~ð êkŠk3Ô‘õJðýx*å|>Ï’%ËØÝ¹‹—¯\°Ïm)R…™¥‚Hsd0G&ÑØXÏc{ò<¾ã(Ëj k—°bQ9®­è yzG^UQáizöûú²¸¥eϺ%µgå;¦T<.!™ŒÚ¶…eR©xŒB]­$ B!ÉBÁ›/o§1™œ˜1¨°`Yñßܩغõ%Œ²Éõ*° CKs+ÕKüìtd0Æ¢>¹”T¶ ÓWÍ{®þeÊKËãvüSher§·¿OÞòû§|n’4ˆ“ih€«®òسÇe÷ž“Ïx³bűþÊ•ÖI×_¸ä«®ô˜åbϳLú³üöŸüc¹ÿôéÿ†•JñÇû§\í±ö;Þv߸ÿaPJ‘J¥èïïç;ßßÌïÚÄŽXué’Ó:¾±¬Ï×ÜËsû|.Y¾e4–ΰmç«ø¡¦¡y)ånÈg>¾žúš4¯Íp¤oˆÆzÈåUaeip—KW¬ã¹¶²æÒ¥”–&çïPhUH;ÐÓ7D}m%?â`o–|a4d|ƒ…C*]ÃþœáÅgÇyäc¹È¨¸£¤9‚ãØ”W–“(«Æ÷=j>K›KÏÊçÚ² ‘€ÊÊx¬L.Ÿhi©¢²Ò)I„B’…‚Æä¤?´©ÔD eáß_ûoOŒ×_üÏoEFþîñO±tYÛµ°-‹Åé øGJi ¯áæko!™JR<ëÕ>ý äžOt AGm̬ö÷Ž[î8­sâdJK¯¿! »'7«d᩟»zó“wS’,à†ëóÜ|s@iÙéõ_ŸMbܳs'¤RÔÖÌÜBEšÜùf¾ö³hQ+žçQSSÃÐÐ÷÷Qî|ÏØ»¯‹åËZNéØž|¹‡=ÕÍ@PŠåK¨«L’ÉæyéÅmŒer4¶,ÃËçø½\Æ¢†²©ßáú*öìeéâGlÂ0$´Ö46¶²mG'×\5ŸÝÒ åi‡_ë¡>1–­ý477à:Š|XÈ% „Æ0š‹ns’ijÒTkCi"¯ ­uX–…Âç¤Æ¬d϶Þ¶æc,i\w9b"Q8Õ³ø¦×ÂYñ¼ß'ÜŸ ¤¦Zqç{CR© ™1Å–’øþé—ç8péJÛ!Ç»ÞR^~nïÚÕËèïaÏî45/â¦Ö04ê ”"]2ûEȪ˔咼v`î¾²ÙQ†ûºH”Ö‘H—rm›ÍƵ³[™¹mI#{÷u³|YóøcË–”“ËôÏÛu¸íòRÞöºz,ÛBGñlRŽe±rqË›K9xd”§wî¥/ë’7¥`'PÊÂhCdÀèˆ Ð”Ûy–T…Üvs Íue8…ÙŒ9ÅA]s( M¼Ö‘ˆAƒ1Šª*8ØvDi‰ŒYBˆ Õ¼% ®k£ óööáðK~õÆO“J&Q… gZCVl](ši¥%iy—Å‚²mEy™âÍo ijåÇ?øùÏSìØyêƒk/]é±qcž·Þ–cÃMe¥uVj–O¦¶¶‚w¼ýMüç;Æ<¿û7ÍêõQ¤¹n]ß}j­­-xÏè@/V²‚Êšz*­ ·l\Ž„X¡Â²âëP¬dкØÇ`´AkMSS [·í£·iJÓI6\¶rÞjçß·i‰„Žt¡•Sa,…m,p`IS-õ¥ ŽäÊ ŽfÌjò…eAM™M}y‚†êrj«Ó$]˶ÆÇsJËë\ò}ÍèXÄÞ}!¯mW ÄTYÙl„ë‚ã(’ iaBˆ‹:Yøðµ·ÎºÐ_øõ_Ÿ’ |øuÄÆKn 4=¿ûéîïtÎMœšâ*Ë ½ªòÙ:6Ë‚¦F›ÊJMIIŽÊJ›0Œ)ÆÆ,r9‹ P„!h­°,ƒã€ëjÒiMI‰¢¢"â¦sÜz‹Ï•WJÎñÚÛ†ú*>üÁ·ÇÉ‚;Æ¢¦$¾’H8'M¢HSQ–äS·5òí&® WRN:QB„Ü|U)Õ ‚ Ķ,lŒQhc -”ŒOvP쮣µféâF–-mƲ­¸Û£¯s›tY–¢¬4Iéxü•6hea¶4valBBRÉÍ ¯oaµâŸ¶UèÂYÃU\GælW#ÃÐaï>8t<ϦËÇÑ46ZTT’ ù='„e²0>cÊ,Mî]´iý›ô¤f»¿¹8·S±¶ik›þ×)½&éºüúÿë‚ø°O+@Ï•tÊâê+5+.ÉñÎwäÙöšÅ¶m.¯nKrø°C_ŸÃØ”•jkC/Y³ÚgݺµkCš¡¢R©¹ ç;1ž>èúd‰Â¤ˆK)Ö­¨çƒÆðì'‘HàgG¹zy‚›®höíñ€ßšXý‘FÙ6ƒ¥§)t{œï Û.L¶`”A)Sh]°âÆÄ]“¦SJÅÇlYã‰Oq,×ÙLŠt™¬ft|TaÌBÆ2ccz¼UW!ÄE˜,ÌE|.»Ïí\P¬µ/*®ª|.´0,Ô±%“5Õ††zņ˂Âíd¬9ýœ/db|ªv1 v›k×/âžÕMŒf<®M:é`YV!¡°Ž;ÆélÕãïZ¡{¤=)W)v“*Ît4=Y3%A8—( \W‘JƒmÇ«9¯w*iH$âÖ!„q² Ä™˜^k.µ0,Ô±9Î٦·Ä8Nâ1O%é §_ËôñUçךj‹ÖE!ccŠ¡!ƒÖPYihm…ÚG¦OBˆ –¢ù“lJSy}#}ƒú| WEœ‘Ú†U³ Àg»ÝÅrlB!„g[ÝG›!Óû™£Ò² æÞlë³€ŸËÇ&„Bq®‘¹î„B!„’,!„B!$YB!„BH² „B!„dA!„B±`Ž™ ©ãÑÍrU„8;Þÿ‰)³%ÉwF!„JŒ#'NžxêY¹ZBÌàÓÿïï#ß!„B\,1Îq×Y¨Øp§\5!æàK&„Bq¾:á¢lwÿò-r…„(~îyH.‚B!$Y8™W^y™Ím&“=­––”sÃõ¯çª«®’w@!„Bˆ %Yxeë+tîßÇ{ïx/MMͧµÓžžn~üÐáy×_½¼ B!„B\ÉÂæÍ¼÷Ž÷¢µáСC(¥â[WöÎX¯½†µkzÕ*ôÚµDë×cª«1Æ`Œá¶[ÞÊ·¿ómI„B!„¸P’…Lv”¦¦f:4‘$ø>Îca=ý4(µµèk¯Åêìľÿ~ì‡"zÇ;ˆ®¹SH.šššO»“B!„âLŠ,ËB)…•É`?ü0xúW~ÓÚŠR €0Zc=ý4ö³Ïbõ÷Þv¦ð¼B!„âL”R(ÀÚµ š›1×]‡²mÀÐj`ÓЀ*+ƒn@¯]‹õÐCØ»w£W­’+/„B!Ä…š,X–…58ˆeÛ˜±ÆÆ°~^}P¶¹î:Ìí·cª«áƱvîÄ,^,W^!„Bˆ 5YPJ¡‚ÚÚ°ÒiCþöÎ<^’ª>ûOUõÞ}·Yï, ƒÀÀ *‹,Ê¢F\ÀÄ%y‰à#"àBŒ1oŒˆ—¼ˆ7–‘`Ѐ ¢ìÂÌÀ0Ãìwßo÷½Ý]ÛûGßê©[SkwUßîÛÏw>5Ý÷t:U§NÕù=çwá±Ç Hpé¥ÀÚµÀöí~þs÷ÝýÍo†¾v-P(@*|ߌ18Zèº^ýô»?!„B!¤‘b!“ÍV¾OOCèè€ð†7T9Ë2°i°nôŸþ–.…¾l (¾Ò°Š]×] ÿ ûB!„BœkŽ(Š:;!$“•.I’aýz¢üøÇÐÎ=ÂóÏCì~=DA¨ì×Ù 1—«ù„Íc6&?ûWgn²üM!„B Y,‚!«ÎŠ$twCÌd Š"´l21®Ì˜´tiõ»CèèðŸÆÜfç!ê90ö7{(©e«ÌB!„bÁÛb<1›…(øu6‹:ï<ô§ÓËeK–@è쬋XÌ·nô~z/qAH+âF˜›‘^«–á¿ìbuÞeÚviE&!„ÒnÄê‰l œ÷à™'žÀoy]™ þáSŸ‚tÄÐ4 ˆ¸%Ÿ´#7KM}Ló±–]¬Fr¾Q—B!ó ͳ`ðû'ŸÄW¿ö5$s9ˆs «Ý•8V€º eówk+¾ÓßÖ0»O¯cm‘¹Yòuœ°Ò r,7„ßü#„B;Mái IDAT±0b¿ûÝïð¾÷½?þ8n¾ùfœþù8ùä“«]‰‚t2‹ ks×$zH+r Àü²»vÕ*ß©Sëº[˾ùo»øµ3¨x°;Žõx^éYEˆùw¿Çòs A®õ@? 5!„&@€ èXÓ»jaÅ‚‡@ü÷ÿ7žþylܸwÝun»í6œrÊ)Ç8íkwún·Ðx„D+ú!Šq¬^¹Ì—aí$Â2ÜýÍa昿¦Þsw+VÌBBYHú‡Fp ¿?”º)VÑõ£ë:fff°téR\~ùåèëëÃOúSlÛ¶ cccH$H¥R¼{¤í980Q”\…Bcß0†£êÃoçˆò8a¥Ʊ•Ç„BH˜¬Z± ýC£880€5½½Á Ð…Cb!ÙLúÑÙÙEQæ­[H$ðáår7n„$Ixï{ß‹x<Žx<>¯` ÙLï&i;tXÓ»"´ãY»ä4‹e ²ÝØ B!Í-–âà@ý]d‹…sÏ==þ{œvê«Ð[c_¨~<öøïqÎÙçòN’v” ¡âfcÖjÔŽÜ,¹öí÷cÛ£–ór5^çì•Fëšf¼#„BšÎâÁä,6oÚ ¸ýöÛP˜Í×”h:•Åy瞇“N:‰w‘£Ý)Ìk€®ŸþõnûøÙ?H˜Ÿßýœ³ßßý«–|¢p „ÒnÔ4Àyó¦Íؼi34Mƒ¢((‹˜™™Áôô4 …ŠÅ"dY†(ŠH¥Rèèè@gg'2™ Òé4bf#„B!„´X0Eñx±X étPªªV§6•$ ±X ñx’$AEæ:!„B!-@Ý–»±àZ<G&“Agg'zzzpÿ/oGOOOÕ£Ç)!„Bi'±àÄÛþüoB?¦ äxÇ!„Biu±°å–Zèl !„B! 3¿£ð,%Þ1B!„BZ],DáY²€ ¤æ¶ÜÜgL@2ÅÙ•!„B “XTŽÂ³ –<ú‡_`Ͼ]H¦Dd² LOÌ ­õ 3» ‚(@×tÞUB!„BšY,l¹å†ÐCºضý)ìÙûvîÚ†#ׯ…\€B^Þ…ˆ'ÂIGè:E!„BioZjÌÂì°¼§åÙiqÄJ ìC~j]9èº Y. Ì!„B!ä¡yî|è9<ºmŸãïgœ°½©¾Dt@žQ ):†ú°tybB»wïÂ+6tº†Cš<ô(B!„XxtÛ>üëÞâøû§®ÿyÝb!&Ý+páù†™ÙqÄdYG&¾Ùô2ÌΆ—1fOƒUPXí^ ¯ý !„Bi+±ªªÀl7Wlcr9œ)OÕ %dLÎN#›ê€ªÌb¢0]K„š1v«çÁüwÐý !„BivÄŠ9²\F¹\F¹\ªn…ü$ƆûC9~\H"¦çðê3ÞŠ®Ìjœ÷ê¿„¨¥qÉÅïÁŽ;°lY*ð1Íc¢0ä9&‚Ô˲•ÇÏÛv˜çÕèó'„BH è ˜ÄBXhš‚t:‹t:‡t:‡L&‡®îå(—‹­½àõéx|]ƒ¨J¸÷î{ÓR¸ó¶!!åðÃ܆W¼üŒŒƒç…®W·HòÚt|zH-ÆúÈàóó¶fÂ|^„BÈâ#T± ª*&&F0:Ú‘á> îÇþ=/@‘ËÍäõé|²*’ñòS¼éü· ;»oú£?F6Ùé©2Ä&o¼§wÔ"œ~³ûÛëÓønõ¸y üz¬‚ÁïñÊkB!„oB³05>Œâì ¹ ]× ë:¹ U‘C9¾ £££èîêÂ÷?ˆ½/íÆÿü÷ÏϘM6³Œqæ¿ÃÜŸ(D†ùo·ßü„Áïñœö#„BÈ" cÃ}ÈOC)—¡ãÐÀ_IŠȆ d2\xá…¸õÖ[ñ‘ 7ÞtÞúÖ ðð£Ödüû 7ÿm'èþ„D‰›1nä-aîG!„ gœ°?||€äÜvøïõ¢AǪU«pÇw`ff_ÿúבëìÀ/~ù+LLL ££ƒw”€b"*¡`õÔ³!„BZ\,\tö¦yë(l¹å†HVqÞº}6w<Î9ç<øàƒ8ùôSpçÏ~U×0==Í;J•Qu·œ0Ï.D„BÅ‚o¢ ]¹.d³YŒŽá{ßû†‡‡ñë{² #?S@6›å%‹R0XÃj}ÈÏ˸7ïo·¯Ó±œÎÏz<΢D!„´©XˆÂ³04=å]=˜˜š€ KbV)Aгd òù<ï(Y”‚Áo¸×x…ZâI¿–ó¦7‚BiC±…g†'Çy×!„BibTöZ`B!„ÒÜÄZùäëíêôã-wá®§&kŽtwŸýØ»‹ÅX’!„BÅB3QPøü¿Ýˆ‘qW½÷ä‹ ò³2ÊŠ‚É| `¬¥&@L /_ Å2^Üz'¦^Hà‰]ïÇþøz–&B!„²¨[ùäëéê´c4Ž?~ó« i:Ô²Œå]Š2&òEL䋟®lcÓ³›:´Îm]¹ kùE8eò$B!„EGË p3T:ÀØDéLj¾Š’äú†‘š,@Ð4Èé¦×,ƒœË°ÔB!„¶ ¥8×›F* c¶Xž.(*zv€œMcø„£0´ùÌ.ëBÏ®ƒˆçgYj!„BH[æuÉVð,$’ hªvXxn`3˺ gRXúü^è’©,czÍ äú†1~ì:–R³€B!Ñ[5›: ëÚܳˆÇ¡Û˜nɉVdœë]¡±iÌ7¦uQ„ ¨ÐE RIFr²AבœÊ£ÜÜ‹ Ï¹q #Þüw”,TºÄ›µ«Vá@ÿô÷33!„"AÇÚU«B9Z[φT±¨*ç2HOL#¿r –½°…=4 ÙþQLlXÞ­4µø[ {k¸Õ;àµXéZãQp„)z™ „BijÚzÌ‚n¯_µ¹¾è’ˆ¡Í_½#'ÑŽ‚šLT÷;êø³Oÿçó3µ¥¯ëÕÍ0Ô ƒÜ^ËþænHfÑô8 „B!íI›{ì_%“Âø1k‘;8ŒÎ•¨J"ŽÑŽª)• -ÿõß*FÂ0ö)!„BÚ“EáYúi%J&gÓ?v_q,_qlÍBÁ0Ú- ÌÇ" ;O!„B¡X¨™Fz‚~štdÓ‹æ†FeÔS0B!„´í=’Äã1twçP”¬ìÉ¢3tœ’V°~ßµ»¶oÇþÏ|§Dd”{y Üö· wÚßOºÆ>ì’D!„B±P­0f!_˜Å]wý’Xé¾£é:E‡ Ìmó×+hª†Ý† _ø|ìÛ_Áù'œàjÌû 7ÿíd¨×³-çä•.!„B¡X¨‰Vð,ÜßcxÕÆ,DÑ÷Qñ½‡LwõovÏ!„B! hϬ¢"×¹ kW¯tÜÇN¼üÅi<Ó_Y½9•JAE–$B!„B±à—f÷,Ý]ÄØH¿þí4^vô â1“Áï1faÝên ômÅ °š¦±k!„B¡XB³{þñã—à®ý.vL&°ã©à–dY¦X „B! AhvÏ‚$Iøü'.ÅÔÔ8€r¹ø¢("—ËA’$–$B!„B±à—V³‹ÅÐÝÝL&MÓÇ’$!‘H°$B!„EÇ\Gýðgóiä Îue€("•J!“ÉØn‰Dù|¾º™K§Ó „B!dñ1'ÚÚ³àÅý÷ß÷¿ÿýH¥RÕ°r¹ŒÛo¿'t !„BYÔ´÷ Î|üãÇ÷ð}œqúÕ°;îø Þóž÷àñÇgé!ž|㮽ÌB!„4wá‘ /ƒg¡X,âþûïÃþýû*:pï}¿‚ªª,eÄ7Ÿ{ÏùÌB!„4‡]òÝ_ÚŸžJ¥î¹ç¼ÿ}•4EÁu_¹³³³,i$#Ã;™ „BH ¡I…¥tu/‡(ÆkŠ>>Ö‡ž%«Ç£gaŽ áñÇÃ7¿ù-,Y²›6ŸMÓñ¹Ïý#$I‚(IX¿~=Øó N=õT¨ªŠ«¯¾o{ÛÛødB!„HÅ8úÇU Må’ŠrYƒ¢ªhºU ë:4M„¦kP4›Šcê& z–O³m= †8xøá‡ño|š¦áÄOÀYg½þð‡±dé<õô“xèÁ04<ˆT*‰l.‹xB‡þîC€tvuâöÛoÃ’%KðÚ×¾6’k„ÊM7> !„BHû24 ôdE”’"ʲU «:4M€b ª ”e »ö—°aU¥¦ôÚÒ³pÿý÷ã½ï}/¦¦¦ðŽw¾W^uÖ®]‹d2b±ˆß>ò(vî܉²ZÂ[/º‚(BEˆs‹¯  T,"×™ÁkÎ>ozÓ›P*•\}¿B±óÅí8㬷²ï/a^2ÿHÃÊÁøð M}žå’ŠRR„¦jPÕŠ(Pæ< Š @ •ï: H•9PÇòµu¯jKχ>ô!|å«_AgG…BßÿÁ ( Ž>ú( áoÞÿ·Ðu·Üö#Ü÷«_!“ëD,‘D".!±båJ¼¸s'ž|òiœu櫱dÉ>a„À,_ñ2ÀðÐ‹Ì B!þÄ‚¢U= Š:'誎’,@Õ­Ÿ&€8×(Ÿ•kJOŒêBšÙ³P(ðûß=ŠöcÛö­8ê¨õ8çœsðÜs[ñä“Oâ;ßù~üãahx›N;'ž|:6l8ñdNJض}fg‹E¾ízA¨n~ö±îg^ËþæOÒƦñIZëÞéº]×yÿøù!„Ö PUTÆ(h:tMÇ¿|ùK‡Æ,èÚÜç!S¶T[O–ÈÄB3¯à,fgg119‰™™Y¬X±Ï<ó öîÙ ]¶?¿#c£Xì‰(LŒá¹'Ã3O?‰ÁƒP.æ‘Íuadt££ã(zÌŒdŒ70ÒµûÛ¼¯±¹ëNû 7Ò¶ÛŸ]£Þ€1oa§ £Z®»‘ùcó3JÃÕß=¥±ß<ï?ÏÑb¼G,‹d¡Ñ5ªVñ$èºAð/×~ ðõo|:th Ïý3PÔÚl»¶³ iZ%û4Ï?ÿ<`jjÅb™L¢("•í Ï=‹d"ŽgŸÛŠ¡~tu÷àøãÃŽ/bíë196†0Mêz[óƒÆwÚŸBaa+¡°º¤Ç ó˜­„ùš›)¬BÁÚ°À.Id1=,Ï„„<×õH€À?_óÅy¿ÿû¿ ü»+¡éDèÐtaN,Ô–Þ¢ð,ý¬ÔÌ.Š f yè;ˆûî½}ûö`|t{_Ú‰Ç~÷(ff سo/Ò™,f …¹)ª´º }sK#â›÷§@h~¡VK S‹˜[kc«{'†‡^œwî^×Õu; ó3ÉJÿ÷1H™¶»¿~Ê‚µ<Ø¥·˜òÕ-/­¿ûy޼öoUï§SYôsAË"!¶ö›V±=ÍBá—_Yýþ­o| º £2ƹ>oQx‚~äóöã ’©4^Ú³CHÄcœÀe—]†»ï¾SSS€ª@Dä::¡ÏÝ4EQH$oª¹kO3N…Ê®G­Q9ùa¦aMk1x*œ®Çí:ë½nÃ0þñ#ÉàøãŽCG.‹ƒúp 9Õ( Å8iT…[Oël+a´DÓjÏg¥î=»¼4_Yäû†¸a,¾¦¨•ÕšeN@h¯ƒ1•*´¹F`µ¾ôb G`ç6³gáÆoÄå—_Ž|àoÐÙÑ A1<<‚çž{;_Ü MÓP*•°þØã±áØã06<A055…ŸÜñßèÂÓO<ŽL*…O<W_}5¤¹ÕQ@¢ÜŸ4_Å3<ôbÃŒ#sæ~¶vá­`Ù³S^šÃíòœÆÔâ4ØS™òùð›çÖçÈiÿÅú<ÕZù¾!AÐ4 ª¦BDhÚ!¯‚¦‰Ð5ÊÜ>šºV«P™;É/Â|±͈£Þ€B¡€B¡€Oæ3¸èOþ«WCUHR“ù<¶>ó4.~×»pæg`Ó¦M8âˆ#ê¯@ˆµÒðî6 Ð-žSKb´[1ƒ^'+ìæ½§~î•Ó`ÜZŸ›ÅRjy>j}_8}oåg.вÈ÷ Â+7ısº&@5õ:t¨º€œ‡aã‘s¿3[[Ãv[ŽY$ o|ã›ðì³Ïbvv¶*fggQ.—Q*• ( n¿í6¼ëâ‹Q.—+7A×!‰¾ø¯_ÄÑG…Õ«WcùòåÈår ó,B!„öä7[ðš{qÌÚd xw<܇ó6w5—XhöÙDQD"‘@,C*•Bgg'dYF¹\†¢T,kš†G~¸:s¦iÉd²º¥R)Äãqˆ¢ÈLZ†Vi5=æe12¼sQÞŽsZÜ÷—yÉü#­[š¹ù÷„#r¸í}š,"?£CVe”‚®A›ó2˜ë—xLÄ’\ñºÕ€<Ö\b¡ÙgC22S’$H’„d2YYÙyn2c‘5]×!ŠbÅ« IUÁ DQ¤H ¾˜ÍO1H•}/=ÁrB!$¹®$PÂ[^™ÄŽª=*ˆDA ¢(Ào ŠÂ<á01^[ºmëYp„DA>_`&B!¤±°0é¶µgFQ(Ì0!„Òrг€ÁÁA¼¸óyLOO _˜ÂÀÀnf&ðÉ+¾Â’D\9õŒ72!„R3ãc}‹K,´²gaëÖg1>1†éé ÷abr£c}˜.>Æ’J!„BÚz,Üðí/cמÇ!k‡f†Y¶"¯ìAGîdä2½DHbc“/â×÷=ÇRD!„B(‚Ъž…í»nÇYg÷bYÏ‘I/­ÎŽT–ó˜˜z ýÃOaïž) ð'ý ŠB!„B±ˆV³Ð»üì;ð[<ñØàa¿ir/V.? šv?Ki[A€®ëÌSSSPUµºÞM©TB©TB±XD¹\®®£ªê¼²'Šâ¡éçÊ¥¦ió6£ÑÇ\~­›1¶±ÓjÇb±êwQ±yófÞ,Â÷)¡XƒVŸ é‰Ç¡É+qäÚW!—ëFw÷Rä²XwÄÑX¶l¾øÕ_û~ ˜±VX|Az+»re„µC3?cvùà7Ü)?ëM/ŠøNçí×îv‹Ã9Ã+ïÂ.kÆñ cߺŽ5MëþAĂݵØm^ÏŸð yÞˆg…Ô–‡ÌGB±P'‹a6¤¯^ûóP+Yd–CõÛ¢ð,ý R¹ÀMßû&v¼ô;LNîE2“Ÿ{9…ÙÁê~~*”¨f§ñ:&Ýí#ü–A¿å£Ù f9¿…êzä·–AÛN¿52¯Í-ý’$U[ôEQ´mÝ·Eš¦U§YõÜìw ëÞP@´æû•÷´+m=Òàà î¾g ^Øñ{µg«"@V*‚ P(ຯ~K×<ƒ3Î^‹®ŽóNõ@×uô?‰±ñÝUU!IRè‚ÁɈóÛ½©ˆ[Y° s*[Í,8ŒÅz®ÏÍ[E|§ëpºVkW¡zžõ0Ï= Ñdî ‹ÅªÇ³ Nçiìg·¿—°+áõ,½¯õÞ³zŒ]Ö áå¡Óýä=  >i…1 ß½ñßPÔÀéçž®·¢»ó(@×±cÏÿ`ÙŠ4víÚ…É™ðš—ýŠòò3˜™ÆØø^ìÛ3…áá,ï<Š¢8º«Ýúü:upêÛêõ’q;Y¼•—[¸Ÿ¾çõ†7ãõGy}QÄ*m¿áaïW«P0$é0¡àgF"§µ¬iØ ‡°ó –ò¹PÏ AèÏ`=a„´…XhÏÂðä/qÁ¯ƒ¦)¤Æ&^ÄÈØ6<÷̦¦KØ»w/`lj; ù2 y Š¢bd¸MÓQ.lÀ_ýí#½F¶BBÚ'¡`„yõ ·˜í$ì¾Ó¸&„‹…V™ iמ§‘JÅÐÕ9†™âvïšÄÔDÒñصkŽ^} ~þ“ÿEÏŠájœÉ‘Õ8ãUàÄן„r¹\N¯‘­„²Xł븷øn3™÷³Š¾ !dÄB+xÞ~á×ð½~™Î1CÐÕˆÚq8vÃiˆÇã8ꨣ ë:6l8Š¢TEA"‘@6›Eww7ºººJ¥8€˜BB †Á fVw'»ï „Ò`±Ð ž…3Ï|5N;í”J% ÌÎÎV§ÑPmÉ’eªªVÿN&“H§ÓÈd2H§Ó,E„¢o æµÂHÇm@¹Ó‚p„B±"­àY¡:·v&“©†Ù-¨dT&¬0!¤qXWRvZhÎï»Ùn60s¸õwóä|ÿB(B¤•Vp¶ë»ê5e!„èŪªUÏ®!¬½1ïg} '¡`®ÜVu&„Š…:hÏ!„æ Š¢T7«`°õNkPøñD8‰óêц` „Š…h%ÏÂý×ah¤kVw½ëâjø5×~ûÈß#™L¾ÿý›q°?ÞtþxùË_ÎÒCÚ®dJ¢ fo‚¢(e²,Ï fÏ‚Ý: vbÁÜÔIX˜÷¡*b±Xõ;!„´‘5“l¹å†ÈO>Œ4úûû14ÒõëŽÆàÐàa¿—J¥ê÷ƒ}û‘Ëváî_üŒ%‡4Ñn×…®úX;-ª4Ü)?ëM/Šøµü涟ߴÊï$ ±`ö,b¡\.£T*¡T*¡X,¶¿Ùí3;;[ý46s¸ÛñÊårU¬(Šây­a”ÃF?+$x™o—÷+!@›{n¹õìÙ» °gßK*Þ3ߺþßMo _˜¬î·vÍ:üÕ_¾‹¥ˆ4-‹½õßêá0ON$ÜîXa¤Eü(„‚Ÿ´ÃŠï%ìº!bÁð.˜oŒ%0ÁæÁÐvÝ–ì„¡S$«—ÂíZýæMXyƳB! &ZaÌž½»pÕŸÆ5×~¯>ël¼æÕgÏûÝ.ü7?„‡y›ô¬÷ IDATW]ñi|÷Æï²‘¦V#Ä®›…aä7,ˆ1ÚŠb¨^éÞóðßiF6§ÜÜŒÕzÅX÷Òê]0‹£k’ÑÉ8cýóLvnbÁ,ìž³X0÷j‘·Ëã탟w©Y̺Å#¤mÄB«ŒYPUŸ. ¿¿ÿ°ß‹³¥yá1©’eŠ¢@.—ñÌ3Ïpüi‰ŠÌÎ`ò sk m…k¬·²¯õõžGø~÷wÚϯۈ–h'Á`÷·yl±à4(Úi&<ë1ŒÍî>ûõÆÐ\<‚ÀÏ{Ó©Œ,¤‡‰ZhÛ1 Ï<ó b±Šáôú—á™gŸ“SSuWõü^o:|QBš'¡`£`×3È;ÒK0؉c3O§J!íÄ¢³ô&§&‘J¥ ˲kÅò‰«>… ë×#›É"™L`ltöïÅèÈP¥b©³rôÇÆX?éBH3‰ó8ëëØ?c‰’É$’Édõ»Ÿq Æxã“BÚEáYú 3…Pĺ#Ž@Wgoû³·cvvÏ=÷,Ñ].„9&€]†!‹]0^óìGæp·¸~±ë¦gÕ,`8µ%!„b!š}ÌÂt!\.[ýÛ<€íÏßñöjEõÝ뿉‰‰qLOO¡X*cÏî—ÏçñÔSOaf¦€|>ï«bªeÞí ƒŸœŽÇù½ !­  Ì‚ÁÀ¯à'¾Ÿ÷ªÝŠçvÇ£G–B±Í>f¡\.#—ËA’bH§Ó‡õK’$aÝë°îˆu(•Š$ ¯:õ4<öØï13;ƒîUU=ÝÓA¹4åg¿Ç!„fúª³Óàä “6Ø zæ;“B,šÝ³ðG¯;—âãõe^,†ËW°+!„D$TU…ªªÕÙܦ>5 ?BÁíÓz.ô0B(B¦Ù= ¿ëbÜ{ÿ¯qä‘«ÆŠ…:ivÏ‚ ø‡«¯F>ŸÇÌÌ ŠÅ" …BõoY–«•D:F"‘@&“AWW²Ù,’É$²Ù,…ijÚA(ø]ÍÜ-¼CÙë¸aǯõ>ûY!>¨¡f9së†$Ë2ÊårÕh7§gžœÂ¯Xp f/‚ÙÃa|·»7µÜ×F?›~ËñŸ‡„P,ÔI³{ ‘H »»ÕJÂh½2^æFåcL«j^˜Ç¨ YhAà4¤Õ¶J~Ãü“­*†ê5ê=¿ñƒNƒì÷ºœ¦µÆrf7ƒÝl¬[[ø5M³ AòÔÚõÈ*Ìé¹×4,ÛG(8½K­¢‘ÞÒŠ,Šœëá·7WV ýý++{>³¥ÝÝÝØzçôôô`ëKÐÕÕ…g¶t"“Éà±¥ªk2P(V«è¬3Éx…YEG3ÏS¯ÁÆâ[Öi<uõœ{­¥a-\æ$¼þ¶ó8ýnžQÉüÝO×$sRÐkµkÙçbo‹«ÑÆný$;寧u–i:± DPù·‚gáá›D¼úÝZMŸ„4[E¤åË+¬ÕŒ˜0 ^'‘tàl=ñk¹;cÖü[cßZ&üÄwK¿Þû`g¤[×ñó†ø4Æ1ülFQ,«éZí<44_ƒŒ]y¤÷€´n¡®þGÏBaÿ½•Ïmÿè“VfƒË)ÌÎi¡àÇp:þBõ‡¶kYo6ÌÎh7š7ó~Öpã7süX,†x<î¸% $ $“ïs3•OÒ\ï ®ÅA+m;fáßÿß7Ðß÷)oÀÝ;?à²Ã>o{ê#ó>o}òï\†;·~¿¹ö H>ýYÀÇ~ °$‘¦~ö±kùrkmæÊ¯YÎo!ºù‰ÛˆóŠâX‚q|Q]Wqö:¦u_k<ët©ÖîLµt«uÖ)Ò|ïWÞ7B±2Í>Raf—^z)ž|òå8÷Ü%88¶çœÓƒ}ÇàœsVãàøfü韮ÄÎ=¯Ä¬ÆîÁSqÑE«±èLHÒ3H>ýY¼û«aïC·ã«£` MßÌNÝX𹫄øñ{^á^b+¬øN×áfð†™vм®%ý "Áì0~s2ØÝÄ®]˜ÓÚ Nc!¼ºy½¯aæYPc·‘i.VÁàu?yÅ‚OZaÌBoo/Î;ï¼j‹’$IxùË_>¯"<î¸ãª­YÆÃ½rßµ¸äk¿Áþ¾g¶ ³‘­¼ÜÂݺ–xÅõÞŒ×åõE?ª´Öð{|¿ñÃ(fãÝÉ£`~ûNBÇɳ`7+’ßnZAïëBu9#Ѿsà #¤-ÄB³{ “É T*€ãz F¸$IÀ³ß}cU(üáÅQŒ?¿…^B I,X…‚æÖ'<,±`nV‘@cŽB±­àYÅCã»÷ìÙãºïðð0ž¿ùB¼û«aÏý7ãñ­È¿x§§PðZa—BÈ|±`}OK’ä:f ±`}'Ûm„B±­àY0³~ýzÇßúûû …_ÝŒgvŽø „B‚ Ë`ˆ³ˆð;5°ÛtªNBÁ,¬ß !„b!ZÁ³`ÆÉ³Põ(|¥"¶íÇÄó?AéŸ÷}l·ví*+»07…5œBZQ(˜ƒ1^Á+®—8p æ÷¬›ø „v¢í×Y0X¿~ýa[2™¬ …ÝÝŠçvaøÙÛÐsþwB­ ÝfÚ0 ·uY™B#ÖUšíVj¶[™Ùn°²Ó*ÐNÇc—$BH;CÏÂVÏ‚áQøë/?ˆ]÷܈í&0ºu ÞðégðÒK/a`è`à ÏmÎmB!ÎâÀjÀ›ßnãܾ[Óµût M!íÀ¢ð,ý´ÃìQ8òÈ#+BáÚðâ=7â¹=ãU¡£££‘UŽl¹"„P$TD‚¢(P²,£\.£\.£T*U·b±8ïocó~^q¬›±¿ùXæBÚEáYúi‡áYÐu·Ývdñtl}äìí›ÄÄ ?ÁÆ¿þ†††ª«{ÖZzÁ"I+ÀrJ¢ fo‚!dY†¢(Uƒ¹Õßn5?3ÎùõØ—¾O ÅB´êlHªªbÕëpßà1¸uËlǺ·ÝŠB¡€|>ŽŽ‹ÅP+ÇZ*s%HâdYi.ö²ágå\¿52k™p Œønݽî·]ü ïk|;º–2gö*˜= †X0ƒyq6óLIv ¬Ù}Ö2S’1來•ga=+¤¶Š…:iÅ1 º®£T*áòiøÊÿÙ‰Gä?ÃÒãÞ„W,YX²d J¥Rµ¢Ò4í°9ÁýVæp¯ý|'$Hù[L·Õ0³I^ánFx=éE?ˆ€ðßoÚné‡QÎütC2¼ æôDQ¬Š§ãY»xZ‚ÓfþÝüÝNl½¯~6ƒÜg‚ºž3B(|ÒŠž£B„®ëøKT< Æ*΂ @Qôööâ¥=Ó|i¦NSóZa«qç7ÌÍP\ b¨^# Þó¨Õ£èǸ·60iõ?Ì{iõ.˜Eƒu$ãüŒF»™ä¬³ Y¯Á*Œã˜=Vñä^³Žh¡àô.µŠFzwÅ‚‰fö,¸U¬ÖŠÐ ñxÉd’%‡´|EWo i«Uæ~â×[‰‡±:{-×±Ðç–ä$ìþ6Ê¥‘_f/¯Ó”©Ö2l À¡5œDU­×êö Ñh\6v÷ÚÍ{IOi1±~Åß ž…ññq<òÈ#5WŒìFš©¢òÓòåW0,1FeÔ ³kQ ¿Ö룫‹AäšÃºv݇ÌÂ@Ehšæ9¥©W«®“wÁHÃìepSAº¹u!¥Ñ¸8dü<„´°XŸf³Içp÷¿Usüt*K±@ZJLX »°V¬Ü¢4´Õ½ˆ£sž˜wI’ªÛu'² CX¿ÓÚ æ4ŒtÌ‚¡ž5x_Û£œ6»ç•¦ ÍìYºìÃeÅb³³³ÕÁsÆŒªE<‡ H$H§ÓÈd2H$|!¦^ûØu¯¨wàìb <¨®£–AÛaƯç¼Í†»q|Ãø·k™· ÖïVcÎüi¼ïÍBÁ*ÂÊ ˆÖ|¿ò¾Š…ivÏ‚(ŠˆÅbÈd2H¥Róú·:UBFEbT&„´ ~2;u‰r`k˜×f6ë¹>·YÌ¢ˆïtN×jí*tÚÖ…ŠD$B!‹U³ Nùçt>nÓ£š»Ù‰·éYƒÜ×…˜úšÓm‡Ÿ‡N÷“÷€P,ø¤Æ,†?!­\y¹…»u-ò3­¯Ÿðf¼þ(¯/ŠøQ¥m otü BÁÜ%ÈΣ`4æx³ ò·S—$ëØ§iSk½¯ ñ<Ñ8þV!m!Za…›¾wÖuŒÞ•«ñ„%‰BB V¡`£àÖ¥ÈKøÝßkUB¡X‰Vð, ÄUW|º®s¸æÚ/°BHˆbÁŒ!üvAò³"³—ØðZ¨B(B •VpÞ²eË\%œ|ò)¶+x>ùä“FM‚ÓN=‚  ··—%ˆBB †Á<û‘9Ü-nï~Ä‚x „v#²Qº[n¹!ò“3 ¢µ%I4W•)A„(²Ò „0…‚Ó˜§•ýlæc{ 3vã5Ø·œҎг0'ª‚Á¨Tan©:Ëß‚8·?Å!„DuUg¯ÙüŠ»ßíÄ…õ;!„P,„D+ŒY0UUÛÿ©'ŸÄö¶á¥Ý/azzÐÑÑ3Ï8o~ó!Ή‡ÆÜ ÎëLigq ª*TU­Î†d·  “çÀï4«vƒœÍß)! ÐJž˜*„ß<ò V,_k¯¹¹\¢(bzz×ÿçàúë¿…ËþöCsûû7öýV`„B‘pH$(ŠRݬ‚ÁjÜ;­SáÇá5•ª› !„ÅÇ,çF,<ÿüV¬X¾ù€K.¹SSSEŸ¸ü d²Yüìï Tix­$JH+B£‰D%ÌÞEQ Ë2Êå2J¥ŠÅâ¼­T*ÙnÆï³³³®›õxæÍi?Bø>%í= @uóK»_µ×\‡ééihš†L&A¡CÀìì,>øËpÅU·^xQ(·ß?½ö'¬dìʱZèb/+~ž#?áNùYozQÄw[ÝÙÏý¶;F²â¿žw“Ù«`ö,Ȳ\ÝE™·8›Ý€f»1ænKÖAÔ~Þ¹æÖ^ÏŸð…ò8³ ß°g>Š…:h©1 sÏþôô4:;;099Y™C I¢ñ†@6›ÅÄÄD(îhkekümî¶?!^Øb¯¸ý>Gná~Ÿ©ZŽvü ±ãvÜ ñë-knÝ ï‚ÑÉœ–Ý ËæîJænKN«3»=3VqáGhù¹¯~6Y‡„Ÿ‡„P,ÔIKyæVæ¦F‘ë訄ˆ•)U½0DÐkHšIX;‘éÕÂéÔ l51T¯†¡ä^û=w7#Öë¸~ã‡e@YÅ‚ÕÃ`tM2Æ.ikš6¯Çß, ƒ_’¤Ã¦dµ;;±äZiX¶Ppz—ZE#½;¤Yc‚~Z9íÔÓpÚi§¡»»ÓÓÓˆÅbÿô¹ÂW^I¨xfffÐÑÑAdCÒšÕò ³ŠŽfwS¯ÑÆÂ[N-ÏQ_‡Ÿsò¼ÂZ´ÌI0xýmæ1æ¿fUrKß·Ökµ^4½¸m¬ïM»§ýiK±ÐHÏBÐÏÃs¡2ê+^ñ \ÿŸÿL&Qª´:ýÛuÿAO$ð­ë¿‰#× UV@×i¶Š*HË—WX«1awƒqšÇï1j_ëu8 N]jœî½ÝqýÄÓ2Ëz\k7"»üu:G»{b^ôÍX1Úêu°zj¹Vë}µ»6Òú 2n³rB±`CK͆$r¹Œ—o~%öíÛ‹/åZ¨ªŠd*‰D2YQpÝ¿}{÷ìAïÊÕ(•ËP¿abígkîµ?!AX«ÑãÖ £ÊY”ÏC½ù$~Ôϵõ\‚¦Uoüz 0«1‹ÅªßýlÆþæx±X¬ºÅãqÇÍØÇˆ×Lå“4×;ˆ3’Å Ç,xüñ' È2FFGñÚs_gŸû>vùGP(étG®;oyÓ8ê裑J¥ ŠÁ* »ˆÓK%h8!~ËGþê­`è4Ëù-D×£V>/?éš‚yÌÛ*ÎfƒM’¤yÝÌÂÃ*&Ì­¤Ýf0ª5ÿ( ZóýÊûF(B¦•fCÄãq,[¶ ë׉t&ãÛˆ§Ÿ~º®#‘Hà”S^…£Þ€å+—#OÐmLZ ¿™º±4sW ;ñã÷:¼Â½ÄVXñ®ÃéZí¼‘õ4*8ͺĈ £QÃÚ5Èð¿Ù »ó±N›ê&¬¦]u{–‚Þ×0ól!îS» ¯ûÉ{@(|ÒR³!ÍÍn”L&±zõjtuõ`zz €l&‹—Ÿtºº:!JpPižÊË-Ü­ËÈbðl¹ST×Eü¨ÒöUü BÁjÐ[= Æ,H~< N†¾YˆŸF¸õvéÉ«ZÊçB=/¡?ƒõ„Òb¡•< ¯:ý4‡*ª®®8r9¼ýío‡ ˆI1ÒÜïà „6NBÁóên·†Ûš ÖÍmÜ9BÅB´’gaéÒe, „Ò$bÁŒ!¼º ÙÍ8䔆uQ6§É&(!¤Í= +W¬Â5×~¡®s8ö˜ãYŠ!$$Á`xÌ]„Ìáa»Í*:rµeBi ±Ð ž…KÞ})@UUäóyLOOczzù|…B¡º ˆÇãH§ÓèééAgg'²Ù,ÒétMSéB9Ü70 cü@½Ç· Nc0(!„c’$¡«« ]]],„ÒDX; nöGfáÇÏÄ„B±­4fÁàÒKß U×ë3kfùòå¸öš/³äBHĪªPUÕuí§U¥ÍßíöµÎ¢dýN!„ž àÞ{ïÅãO<Žb¹ˆÿû/×`dJ¤Ö,ËT+Ý{öà{7ÝÄRC!  Š¢T7«`0°w` N3"¹¥O±@!  ÍîY¸ï¾ûpû–CÓ4üñÿ þáê«ñwý0ö +øì#“Ž£3Ãw>q4MÃnù!òùiqäÚyƒ¢5MÇ>øtvv²4‘¶+™’¨ƒÙ› ( dY†,ËóƒµK‘UØþæ…ÙŒ¸VQA±@!  ÍîYå2Ö¹ŸøÄ'!Ëe”JÅJ†H@wg½+—bxhªª 0S€ª*øÈ‡?ŠX,]× TUÃ7þý+\s,¨Ñn6x¬aí`ÔûY9×O¸S~Ö›^ñÝVv‹ïµ’·[|·ýÂX•ÖìU0{ ±`óâlv³Ùq°Ë/»iRýœ¿×µºÝŸZîw#žR[ MÅB4»gáä“OÆ÷nþ/¨ªŠƒ}1=5 H'âPeû÷÷cíÒ,ò…i 3Ð4 ‚ ¢P˜ž3ÂDd³hšŽßÿöA¼þü XšHÓÑBÁj€Ù‰$¯p¿-Ç ;¾×=vj¼pJÃoü Æq-åέ’,Ë(—ËUï‚ùøÖµÌ‚Ã,ìÆ98 h6qpË/áVïýnijB! &šÝ³ðà¯î‚8;€vNïUÖó¤Yi)ÏÂ=‡G·ísüýŒÖᢳ7ùSISÛ±:9ƒ÷| ×Ýó)À*Ÿ{Çm­:>sϧq®e€0ç\èNëØ»gz–, ­âgÅB‚Y~ ?}n[±Â ãyqê.b÷»×1j_ÏuØÅµ;–“ëß©ì„í°46RÆJΆ7Á­‘ÅZ–í¾»ýî¶Ê³]Ú^yNZï=ö»’´µXˆÂ³ðè¶}ø×¼Åñ÷O]ÿsßb!žìÄ;ÿêbtõ,?ìe —Ë(gP*΢8÷yè%a~YP¿~ø1œ¸ùuxvÆ!aWrvóÊÛÍ ÓnBÁ¯qe|’öybQ!IRõo»EÖÌïUóov-º^ݹŒtüxx9€,Ô;†– QYPUÆûZ’âP€¹\ tœÎ#NÁÐàfûž‚2¹Ãv1–A*·±Ù ÌÎŒCQ4ȪYÑ¡"ŽŽug๭Ïâôwü âñ¸« úb`ßWE¥c'HÝDj³>Ír~ ÝõÈÏ€j·4êE~š‚‘®áUp›ÅÊØ$Iò\—Á­Ü›7³hhÅòIØðAHSŠ…¨Æ,ÈrÙ0qår ryùÉñ@ÇY»ñl ìý)„eݘž,#—Hs«7g—‹ìòc "ÒKŽÂðó?ƒ23ŽxqBR@,Õ‰ÜÚã0ô«{qù;/õmÄÙ¹§^l­"aVBÖrå4ÈÓOx³^›Ù`¬çúœžµ¨â;]‡ÓµÖò>¨·¢Þk* ¡‹Åª¿Ù »ó4O›j7¸Ù0þíòÝN0X= ~¯µyÖ¨ûOÂÏ[ÞÒ*D6ÀyË-7Dr\MSNg‘Nç™L]ÝËQ.ç¥ëõ¹á„S184Šxz)& †'d ŒÉ*c¡2j*.¢÷¸sѵz†_|ûƒ ¥ðÒw@“ (+"™nè¢M&‡÷aý†ðð}?źK?ºÁG!í‚U(˜=`Æ7£ÊiÝ»õܺ9uÔ`v" IDATY2{#!„b!¢³05>Œâì ”¹îH#û¡Èe¨Šè8]ÝÝÐ¥4bé%X~Ô逦@”âÓ+)${0=ù4 ïCnÉ‘X¶ñBŒîZy0>¸kÖ¼ >ô}ÀA,øéZf$2ÝÀÜßs±+ž…™ID8-!„´­HP¥ºYƒ“ño'Ües FzV‘B! M`È7Bij+°sïó¨. ¹U@«ÿU«Be7Q 5ºXÙ_Lv³$‘¶‚}ºIT‚ÁìMP²,C–åy‚ÁìYðò X½N«3›§Fµž‡Ù»Aß§„b¡I ùF’Ïßô4ÆÇÇ‘ŸžÆäÔ$&'&011ññ1LNL`fvŠ,#‹!“É ££Èut ›ÉVîÉdÐÛ»š%‰,X%c6„¬aíP ùYÙO¸S~Ö›žßø~ §ßýÜëz®ÝmM‚0V¡µ¶æ[Å‚!Œßí #¬Ç²ëºd ƬKÆ€j]×ólbÅë¹óîµ¾C£ŸR[2 ÅÂòQsÓ÷nÂÀàA÷—BLD¾y5#ms÷!·®K†P°NÓjN¿\.Ï+v×WK¹hô³ÉŸÂÏCB(ꤙ… ÄUW|º®c\síX‚HS«qb7%¤W §W+q3Î3VÅ]¯ÆyXïÛ½ö^‹Z(ãÈÎ#`6Úíº†½¹’Õ;a>–Q«›$IUÑ`\³Y¤›¢(òƒ†eû§w©U4Ò»C(L4»gÁ`÷îÝ$éЃ c`‚^ù.TÂL!€ cÍšµ,=¤¥+ºz[H[­2÷¿ÞJÜO7¦…6Êë¹ö¨ 'Áà4ØØnÌ‚Uh˜Ç9Øy$Œ÷¿±®ƒq/¬ž c«5Üž!‹£ÑÆî^»yðè© m/!ÂHãëصkçœ`ö÷cÍêÊX„¾¾>¬Y³:ô÷õá¼sÏcÉ!MWQÕÒ×Ý)l1ˆ¡0*û ]‹¢ßøæ}Ã2"üÃOW?e'lÁ`ÞÌ]‡ o‚ù^˳bãà4ƒ’Ÿ¼ R>•—daw-Ï !ÍLds~n¹å†ÈO>Œ4µJUDA?úúû!àÐß‚ ¢¯¯ýý•}E%‡´œ˜0\NavÆZ;?†k”ñíŒU2l¹»P,«~÷Úb±Ø¼ýíâš»$™Ó1ljÇãH$MU>Is½ƒ8½.Y¬Ð³`ra¯Y³¹\ðâ‹/â¼ó΃ غu+6mª¬½uëVˆÅiNAàg»Ù<ÜÎ6så×,ç׬ùF׬ ƒ Ã:o³án¤kxÜfr2wY’$Éq«16ã:ͳ%‰¢ˆX,EQBÉ ˆÖ|¿ò¾Š…iĘ…0Ò0*]ÓQ*•*ab¥)ä €P© òùü¡J)b±àÔOœzÊ”UT8­vë'¼Y¯Íl0Ös}n]P¢ˆôZú¿»½3úÚƒŠC(Äb±êovBÁî<Æ88-Îf]kÁˆÇ¡( âñxuüCÐ<R>aì62ÍÅ*¼î'ï¡XðI«x{â÷8óô³ R©r¹‚€a•΂0ï» ï½ÖÜÌnýΛeVÒØÊË-Ü­[‹Ÿ>Ùa”Ù…¸þ(¯/ªø¸¦FÇún³Nijõ(XX³¾_Æ;Øuñ2 ,óô«æk²’v+Až±…zžXDÿÎ +Œ¶ Qxî|è9<ºmŸãïgœ°½)Ð1O?í ¬Zµ }}}(—ʘ UQÏç«^ó€ 2ÔùÂ!„´*NB¡êýõèn˜íg°²9]k£ŽÙCa^ šB(B" Ï£Ûöá_?ðÇß?uýÏ‹A000H¦’Èuv@ÐßßÎÎ`®"éìì„ ¢ BÄ@ÇoÔT„~çÔ÷ÚÇn¶F BHûŠ3†xðê‚ä4ãßÙŠ¬ïD³`ààUBÅBD5fAU•y-û•w·¹\ª«‚år…|@åï|ÁøŽÈÆ,Ô: _-Åk娅ÈH!æ÷áE°®ªl„×óŽu{:-vg „B±"QYå²ñ¯Š¹<‹üäx]TuÌBGD::ºPÑ"º:»ªÝ“D!¼gk4êg^üz ~kë\B! Ì‚Á Ön@NïG?ïaNeK!-¸Î‚¦)H§³H§sH§sÈdrèê^Žr¹8/]¯OƒG÷Ûê÷R©Œ™|…Be¬B>?wß+>Ž»YŸ/_†}¯=??êÜyö™ÈôõWã ÕT‰EáÞvš?ŸBZ ëªÎÆ€c»Çv›yV$ëæ6ÚnåhŽ[ „´#-çYPU#PUº¦CÓT”fgPœ™ž—®×§Á™gœ…+V```©T¹ŽÊlHB¿€ç®ºùŸÝ…#ÿòBÄ_s"4Q€¢i(Ë1åΟâ;Ãc¸àËס··×±¢[¨ù°¦»¤W²ÐâÀn½ëX§iM­˜»Ÿšÿ¶;ŽY „P,DDTc¦Æ‡Qœ"—¡ë•ŠC‘ËP¹¦ã ‚€ááa‚€R© AÈCD¶ÜŽØc¿Á1ûN(Ó˜Øw²¦¡¬êº–@Ö4¨§‹Î­Oá>ÿO¸äk_G<÷m´™›¹–k²«0íVîµîG!Í"E©nNÓ—Z »wŸÓšnÓ¦š½ ªªR,B(Â&*ÏÂØpòSãPÊeè8THR @¶®c§’)tÌyb¿ú%Ö¼ëÍÈïÛY ²¦á…Þ£1^ŽAÖ”¹Wöâè[oEñš/9Š7cÜm rÐ9š½ú×ú™3«¿‚”e‚D!ÌÞEQ Ë2dYž'Ìž;±`æw›5ŽuA6§ó0!„P,„Dž…3NX‡>¾@rn;ü÷Z AP,— äç*ñ ¨åY”ÔCBAX•@Ç)I|søu(+%Û“ƒ¦Ê8á¦bvv,Q¤áF»Uä™ÃÚÁ¨÷³r®Ÿp§ü¬7=?ñÝfâñ+Ôüœ»Ó1‚zëï$¬­ùf±`óØ«áof×uÉϼZ´±çbõl‚ÁëZýæÍBxvéM·„&„b¡N¢ð,\tö¦yë(„)HtèØ¼yDA„(رd)¤åk™Y”F‡!«:²/Ë`ÆiôôaÍÚã°½GìÅTGdY^´…„/CÞ»V©À½Ö©wÊàZŽë'¾ŸμÂýÞk»™€‚Lá\o|/±`× I–e”ËeÛ~s7"#m§ÁÌvbA’¤Ã¦i5§_.—牯)¨Ã,/xV!dÁÄBTcÂ$+W®´ _û¾÷áÿõ=uéÛ°týñÐ¥º_³ZZÄgOpËîi±;N¾ó6èú§œuˆ,¨ °[LÏÎ¶Š¿an†êbCõNa]nçb7ÎÉm7cÕϹ׿±`õ0Xg@2ÎGÓ´yÝ¬Þ §™ŒÌÞI’ª¢Á¸F³H16EQ<óŠ­÷퉟w©›'˜å…´¥XˆZ(Ô+HV®X…k®ý‚ó=9t¼ì8ìýâ@>ï Ä×vcp‡ŽRYCaTÆøÏ4¼ãwbæõ¯Ç민Éd’¥‰4uEæÇ…¤%´®±ÞʾÖc4ºÒ÷sîµxN‚ÄãÚƒÝßæé¡ÍbÁ*4Ìãì<’$U3‹«gÃØì®µyCšKøyo:•‘…ô0ÒTb¡Ù= —¼ûR•©X …&&&0==™™ÌÌÌ@–e7ž„]gŸùŽ;°ä·OC½1IÒ¹ÞtüñÐ>ÿyœsþùX²d ²Ù,KY0üŒO"ƒª%íDRag ‰_O7CÅîÞú1T‚Äkx§)KÍ]‡ o‚‘^2k牳Nê5ó‘“uÞ…φý®d¯ÒÖb¡Ù= ’$¡³³™Lš¦Í›uCUUœ|òÉ/¹…B²,W+¦d2‰l6‹l6‹L&I’XšHÓWrÖés­a~ÚÅ&üŽÕµÔÒ¢¹- ÖÈÆ¸c…g;±`·†‚Ó¸»ÎæcišI’‹Å\§ºfë0Y ïB.áY5#b•¬H$‘\G>?'žx¥™ýˆi;!‡jâ(ô¬z=N9õ,–Fy¥ã´æGg›PhôyDq-Qw=Šò¼ÍÁ8¾áUp›ÅÊÜeI’¤À3"×cžRUEÄb1×1 ­øü¾ÏYP±ÐJB¡×188aú°F¾݉ƒ@ª>#g±·_@±@¢­„¬¢Âkñ>·ðf½6³ÁXÏõù`Vü ×jíjTïx §ÍüŠÔ°iZw£UßøÍN(ØÓ§Åܬk-ñãñ8EA<¯z›ƒ\k½å%ìÆ¦m®¼å=!m/ZͳõuìûÃu86ñC” HTæò.Ïhˆa’>Ä’Hj®¤Üƒ.ðWKx3^”×·ñú&»þôõ7Œ²a5Þí< ÖÖ¬bÇi¼ƒu<‚UxYWr¶[óÁº œß” Àmq!Òž´ƒP0„Ö®(~í¿…•žßøn†­“±çtÜ cs+¾—X°ë†dxŒÖ}¯ïÆß~¼NaÖ8Ƨ۵úÍ›°ò,Œg…B¼ gÁgA?í8ê˜S1~Ò;ÐùÂ0Øw©¬†üÔ>ì|ò6l:éU¡…¬ÚK˜gn±3J¬e"hX³–©°ÄP½-„aŠ2·sq2Pýz!¬å#è¹_X°zŒ®IæÆ‚ @Ó´yžëÌIN3(9y¬+G[= ^yÅÖûöÄÏ»ÔÍÌòBÚR,l¹å†ÈùVK£·w5Ž{Õ%Üñ,ì;€½}ÀÊ. Ãÿ¿½7“ã¬ï}¿U]ݳh¤YËŒŒoZÐØ’W q8çH\³ØÉÉe Kîa \Â’Ü`’Ãî@8, ãsHÂÅÆñ¹÷žðÜK–'ç8Ø2ÆÙBFÈ‹K#–ͨ§»k»tWëíwÞÚ«»«»¿=¥ž~»ªÞ·Þzë­ß÷ý½Ëƒ_À?ŽO`åº]8}l?ÜÅÇP]…5—ý:®ÛõR–RÒ4J˜,Bò,ÒüY¼´»5}q”´ûåOT·].üƒê»—nyó Aƒ¢ýÄ‚(TžÛ¨“JpZëþQêM¿2T¯²Œ•xÀm³Xà˜5“S›qéwàØîïáÙ³@ÕÎÌ:8wïÝ€ÊÙy˜5ÀZ‰é×ÛY‰­[w„¾`ýÂäOÒŸDŸG0ôƒJ’‡*‘G@¨Œ8Ç'½Ž0CEuo£,QŽÏÚÓ o ]×›Þ•áï÷©ºž {äýí‰ Ñ³àgúÝGÎT×?õlÖu%{^€c:ÇØØJ¬Ý´Û^~ ÆJÀ±àìpâø<NÌ£j5*s{¿õ yükØó£GXRI&˜hT©ÂTÆÚ …(†k7ŽoçµÄMSÐñíºN¹u_\QYü· Õ—½-låfU7¥ ëK›·„us¯Ô·d0¡g¡ qlݶó§îÆ5‡>€ÝÆ©*05XÐu@w€²<ùÝ{1=±ÀM,­$ô¥eUí¨îõA NG;®%‹®YqŽÏêdàÓó*øAŸ?E”g(«dzË ¡X€c‚¹åÖÛ¡iÀÌñ÷ã™ÃG1³Œ•£QOè;süùyLíx5 +I÷’ "U˜_·Œ<Ïž¢?Q¯#,% ) g¡•'f -ü6™ÿŒ‰ÒóÀp=¼l®À¡ã&ŽK É^2²1$† «@„ IDATKÈo=¸á~ù™6¾vÔ?ÊýZÁ¹ib¨{ÞY,x‚A\œM5[QÒ$ýÄŸ,RÒ”·8ã%:ñ¬dyÈ|$ƒÇ,t(ŽÃ{ÿ—iQëH3¬Vv`˜ (X'YI[¡ xâ`×8áòoYÅ׎ãÃÎרéTÚãìr7$qÜ@µZUþ­ÚâŽGðÎY©TP­V±´´„r¹Œr¹ŒóçÏcqqQ™×IòFµÒt7ž’<)È `@;Š;= ­Ì8‡ó5Lm6Ô[Å,0 ,„$½ ð^bâ§ør“ĸaA†j?ˆ¡´˜N *#/(í*‚Êh’/í¾FY,ȯk’×ÉKŸã8¾ž…(e×Ï‹ Æ'Æ›düé¡E„‹u©ìá¥w‡ô"ô,t(ŽJÙÅ™SÊ *5 \©‹…ssœÊy–DÒ‘Ø%̯…´_æQŽO»ðVÒÕʽ¼Nz|”´G1v¢ÄÝÎÙýCØw9ÜoÜJ$‰Õ؉¤åD%ܸÐ[5Úy,ƒêWBòÇ,t(Ëʧœ[ëÀ(•Æ |FÐÇ&XIêUcPÕG߯ß~/Š¡´y(Ÿ/n+ ªE1Êñ~€4iWÅégĨÒî—fÕ~í2ºdÃÊŸà8βõ‚ºOɆ¹ßu«Œwy6¤$÷É/¯³,¿¤ûuPسIH¯BÏB‡â0  VfŽX¨™À¹ÓΜ´p´ºWïú(K"i»˜ .¿0•±6B!ŠáÚãÛy-½roÅ•• … … ÃP~Ê[P¸ü›¸j³|nqËSù$ùªƒ8Žô+ô,t(ŽÑ5/Àìðf”ËGqrÆÂÔF£+u̬¾#õ: ÝèÉ`>A”}T-§aƒZQ(ôÃóµ[Q”1¼FY xñz^U˼(z忽1 "~]˜¼¿mÛF¡P€mÛ0 £e¬DÚügýÙ›õ+ïTèYèPc­AÕùy ²T;9õ—¸õUïÎÌHìd%Æ ³·Põ‡W…ùõ—Ãózmò´±I¯Ï¯|wûxU—›´ã:•ö¸"Alá7 ÅbÅb¥R CCC˶R©ÔüMü[üîmÞyäM<ßÈÈHsÅŠ+°bÅŠØy§|vÂØídœý*Âî'ïé7èYèP“;±nò[8ø¬ƒƒûjX»ö_ÜÙãÉϰO:#ŽÜ×WÕ';(. ŒÎŠ6Õ*´q픦v]_7ÏêšTƒ}³Ü/­èóó(x-ûªzFõé·`›ß ê°õ‚º™Äyƺõ<±n›U!y‚ž…Å1qÑ&L~Î1¬Cú,..´­B‹2£M”yÀÅ}üêÅÙs!ùA ~… ςʋ¶‰çÆððp‹WÁó(ŒallŒ7Š2pгС8&§6áèøfŒOèxþ¤ƒõ Ô¾÷EÜöú?dI$„P,4Ä‚ˆ'üÖ8gx’Ï'ÿ-7p üšÁˆBz"Æ÷Sfll%J£«1yÅÅÐàè3jUàôž{ðäÞ²$B(„ÁÈâìGªY‰äüþö›íH>o±XlñdÈã<ï!„P,dD¿yâ~ª¸ôò¸hû°jr3NÌ×d;qà0þø~–DBÈÀ Ñ» vVAÛ¢Æ'OÑ*o¢¸ „A£mݸïëm7æ{-Ž©©¸òú·àÄ'pôðQ:LŽ;˜}ð øÇñ ¬\· §í‡»øJ£«°æ²_Çu»^é%ë}† ¨ó“ †eW§$„dU—ȃýê?U8ë3BÉ©Xà˜5“S›qéwàØîïáÙ³@ÕÎÌ:8wïÝ€ÊÙy˜5ÀZ‰é×ÛY‰­[w„¾È¢~O2;ƒêo¿YvüŽã‹–’DضÝ\ã@ž‘ÈoLB\¢Ë:Œ2¨pÌB‡ã[‰µ›¶`ÛË/ÁX 8¶œNŸÇ‰yT­Æ‹É\ÀÞo}Gÿöü葞,\œOš’F$X–˲`š&jµjµªÕjs«T*-ßå}*•ŠróÛ?hóŽ%„Aƒž….ıuÛNÌŸº×úv?z§ªÀÔ`9@×ÝÊðäwïÅôÄ7õäËŸô'€¤]u†èMð„‚iš°,«éaP-,¨Z×Åoêæ¨‰(ë•BÅBB8f!˜[n½šÌ?ž9|3KÀX 0ï"½qgŽ??©ýO¯fa%ð5zT]¾Ä52!üò!j¸_~¦¯Çû¥;ªA«Ze¸i âBi²Xðƒ¸8›<8Y%T‚!Ld¨ÄFÔ1^Qó¶cÅ’>+$Y MÅBJèYçEWÞ€í¯¹KÜ‹CÏ­‹0tfÝÓ°nj3&¯¼™%•$6Àé.®,'<ê‹?Éy³>>ê9£ŒqŽO›ö¨b!¨’ç]Ï/Ï”äK^y9H(ˆiö[ÁY%<‚„A'ò,‹g…BÂà˜….Æ1µan¼í}¸õí¦‹7£RÊ&°X«wAZ³q3v¼â%Ø~ÃëXRI ‘å7#–j‘ª$aAáý †ÒN2ºâÆf¼†³“÷Z6Ðeƒ×5Iâߢ°Ú¼q Þ¦ “Ç),--5·8eˆÆøà¥.í•z•Féu= ]ŽcjÃ&àúÛQ>s3ÏF¥â¢P†F4\|õ%Øñ²ßÁÔÔF–Y’¹1%,¨%´®1©aôyé³žÕ ¼[éÈkþ¤ÉÃn]—ç9Ðu…B†aÀ0 ‹ÅæV*•Z¾Ë¿EÝTÇŠçjnÃÃÃ}Q.zöy%¤pÌB‡â˜yúh¦6ê‚Á²£üœ?þÊÍxÛ¾üª…³7åù%$¯~+†ùucÉsŠ(]>â^ŸŸñÜíãýfïI;fÀoúÐ,ÓW$ˆBÁûMžÙ(J9ú[•fU÷#•7#ʵv"Ïâ4&pêÔ|å-ï éèYèP‹çœ9å ¼à RÊ•ºX87çÀ^œKtNzHQ*ÊF’_׌(áyy©u3Is}QãìôñI®)¬Ü„åa–×&Äq žPðZùÅÖ}±µ?(ldd¤ù©úÛÛÄïÞïÞ6::Š+V4·°kídž¥y^Húº6¬¾‰ú7ï É;ô,t(ŽZ ˜;íàÜZF¨Ô7 .šJtNz!ý‚,D˜®ë ¬Å1ö¢zÂö%„Až…ÅQ*µ*0sÄBÍζp椅p°ê’»³Û-ø~¢€žBHZ± ŽSǨÆD› {T›ì¡½ £££å"„ ô,t(ÓÆéÅE”†€“3¦6]©ã¡‡6à·ÿFbcýmû.í¢‘.†ýø+7wÔ€§g’T0x^O4ˆ""«ÁøQ<ª©e !d¡g¡CqŒ®Y…¹9çæJcÐÿ¼{ŸøóŸ'>gTÐé–~z!I„‚j-o Z?!Í&Æ!Çç oó[BH·[…«Ö`ÅØjŒ®˜ÀÈè8†‡ÇPZRi†1Ã(Á0JÐõ"4ÍhnI¡g¡CqT ;°aó1œ>â`ãFàà¾.]õDªsŠcD‚øéíçðb«Ü09<(]„’~ £‰"Cü ;—ê»ßú ªÅß!¤›èzÇÏÚ89Ôª6j5VcV~Û×iü­Á´\XŽ‹m—qÙ†ª5'_báû¾Þvc¾—☺x'Žžy#Æ,?çàEW¸f¢‚½{ÇöíÓ‰Îyí»wcú]ñÄ…Üê%L!a¢àÚwï†û.>ЄôâÀ¶í–…ÑÄ®CªEÙüÄêoU˜wO$ èºÞ #„nsrX½BGuHGÍt`»Å%mŽSÿÛr€JÍEÍtðô‘*.ÛP³'«˜J0§= ŠãÖ—¿ß|ò;Ÿ8çO:X¿à`qÁÁ?þÙmØ~ÏÉDç”gCŠ2>!Ž`H = „,D‚eYÍM r«¿¼…j¤ ÑàCî‚$ŠBé&Çg«¨,•êƒ Ài¬Øl»\§^ŸUÀ²]ÀÕPhT]?;ZÆMÛãÇÇ1 ãˆû)³}û4 cë1¶N‡îGŸqP«—–æðñ?|G¢´Åpí»w7…8Zý­é"½»cv Ñ›`YLÓD­VCµZE¥RiÙªÕê²Í ÷[ZZÂÒÒÊåróóüùó-ŸÞæí+ÆQ«Õ`š&,ËâM"„tÛÑêÞ„F¯"·ñO‡[·ì›­ipá6»)%¥mb¡ß< q?UÜø‹oÇ1{ Žœ˜¯/ȶ8ë`ñ™û¥MÕ‚ÅPWíæH›.Ò>£]5kKœ~Üý’~ù5Ü/?ÓÆUlE9¾›qgPWLÅ‚(T¢A²H7QømÞ¾Þù¼4˜¦z­Y”ÃN?+‰ŸBºQ¨oº®: ¹4WƒãÔ= ®ã6`8€ E=]Y嘅Æqûí¿#‡~sö“8uÔÆ¡cÀ七+V-â~{ gͨه«.žƒV,à„ö|êîoýqÇ,Èâ@&Ž JÇ,äƒ~_HJìr"~®:WñÅ1:ÂŽïfÜYÅE,¨º!ybÁëŽ$ž_5Y^·%q¼CÐoÞ8…B¡Ðëkü¿mŸ¿W@4òÅOÕ>iÃýD éŒ Uÿmщæghö‹Jk8Å9V¼?Sª¸ÃÖ.š1(Ë{ ‹ÙÃàuMòÆ.xés§E,¨Î! ïx¿± ¢H§R’×~Ïéo¢Ô¥¢è :ŽüìF£L»ÎÏuÔlß>‰¾ —ï40VŽ-g瀳sªçT]b‡‹@áðFOþ>úáÿØpï³Ï™Üš%LA‹XååÓŸ¶‹†h°vZ,fwÔãý<Yˆ.•±ö=Ê&Š ?eS]kØuw£\öÔ1ªz¯ÞË´¸_½ÊnM$¯pÌBâøØÌ\‡lÖa9À©*PB}š+§!t(;@íHÇRž'¯-øô,tU×Õ‹.jX¯õkÎÂóIqò"íñYÁ¤-•ª<ŒÒÉïÚ³¸òuÉ ¶©Œ·°EØ¢ìt¬ßµ¢1Ø?õlÖ&GBZ,гÌŸÝóŽ­Ü…‹†ë"af X´Š,ÖêBNŸqpäGêUžéY q_rr¿n9¬]/ļ …(ÆA7ŽÏ[vºu\^eY\IYü”§7õö5 £¹‹Åe[”ßÄsúM*ßgzH7!YÃ1 ]Œã–÷n}ª÷ ×­±(4ÀÕ\Ø.P@ºrEÏBã¸ý¿‰›þ—/cøÊ‹1:Tª@Ù¼àYÐ `òša¼ìµŸTOωóRõ³–Ãüú¿Ëáy½6Ñ`Ls}AƒyÓï¥WüŒz|»âöËôyV$ÈޯſT*ahh¨e+•JÍM ÆÈÈFFFZþm~z›÷›·ïððp˹½øã\k÷,Kã¢Óq’á–$oyOH¯@ÏB—ã¸ý¿ x¤úÌ[Âùót^©cÓ•cØòo¾„Ûoÿ å±õ•—oi®Àœ§OÒ¹—TPxP·ˆ¸³ÛäñE”¦v]_7O{MqÊü[’¼N*úü< A³…¥Mî&4ujÐ ÎQB^Ÿ'£Ùæ]Øóá÷{Ô犾 \g¡•ÅÅìÙó0ªå#0œƒÐ*³»t)^ø¢—ãöûæbŸsú]7×3ÈÛ'!„$ ²Pð‚ ü¸ŸêS5øYôpD™>•B(b@ÏB+'NÌ@[ø;l2ÿ¥çázxÙ\CÇMl'„P,ȃˆ=c]5V!H0­'Ô²+wµ×Y X „ "³Ð¡8ïýS\¦ý5F­#ͰZÙa. `dI$„P0HS£Š]€Ä™ä-ìwyÆ#q ‚8ÞÁ —Ï-¦…B z:Ç܉s80_ÃÔfõ¡ë€eß=„ÒÒjïu;½ Þx…°cUߣã÷;= „A‡ž…ÅQ)»8sÊAyÁA¥”+u±pnÎS9Ï’H! ä©O啘å–U«='ÙÄcåœ !d g¡CqXP>íàÜZF¨Ô7 èc,‰„ dãðoýOâiQBÈ BÏB‡â0  VfŽX¨™À¹ÓΜ´p´ºWïú(K"!„"A –eÁ²,˜¦‰Z­†Z­†jµÚÜ*•JËwqïoÕ÷°MŒÏûÛ4M˜¦ÉE8èYèP£k^€ÙáÍ(—â䌅©FWê˜Y}¦¦6¦:wЬAÇp~g’¦Ì±üvÑ›à Ó4aYVÓàZXP5¶ÀÏÛwL= „õ)dèYèPc­AÕùy ²T;9õ—¸õUïÎì%ëm|¡ ÖKÆo5ÞA1n‚ Å8á~ù™6¾(?ÎñiM“vÕ~a{Ü:Ìën$‹Ñ«P©TZ6•wAöBˆ¿«Â£[­VCŸ»(áYåYVÏ I–‡ÌG2(гС8&&wbÝä·pðY7÷Õ°ví¿¸3ó4{‚Aî×ëý&aû‘Þ¥ßï£Ü"ç}®:WñÅ1ö£ŸöØ4i÷Û/Í"i~ ~Ý<ï‚gÔu‚f7ò;ÎÏ» ºæ¸yÛég3N%ÑòAž…Å1qÑ&L~Î1¬Cú,..tÄ`Tyä=½½+ü ¿Ö̸aAáý †ÒqŽUíõø¸iŒÒtθ iòQ ²‡AœÉâßòæy$ÄMîÖ¤ÚWîýmYVê{MúS(øÕ¥QêaBâb;lWófâ‡Ûø§Ã­[öÍÖ4¸pa%™ÈM»PÞéYèP“S›pt|3Æ't<ÒÁú‹ jßû"n{ý¶½’Ër?Ò/º´-¤½ö2ϰŽzŽ´éh§‘”ƨq·+~‚Áo:T¹Ëxm~+3ËG­U†_œ<z†(*ú£ÑFu¯ƒ¼—ôT^ž…ˆqÄý”[‰ÒèjL^q1t8úŒƒZ8½ç<¹÷‡m7 T/Ï$û‘ü¾¨¢´|E ëµ–¯,^º*ÏZܼH{|ÖÆƒŸCå=TÅGPd•v¿u¼|WxVå­Ÿ·4í¦Z·!é}U]éý™°òHÅ‚D¿yâ~ª¸ôò¸hû°jr3NÌ×d;qà0þøþÜN¤ÿĄܫ S2ƒ ¢®í>¾›Ïm·= a˜7.¡P( P(À0Œ–Ooóö7Õ`â4ëcâwÙØFú•¶uCzྯ·Ý˜ïDY25µW^ÿœ8ðŽ>ŠCÇ€Éq³~ÿ8>•ëváô±ýpCitÖ\öë¸n×K#WVª– ¿V+1œ­[ý#¢ì£jù êz‘ç—_^Ò—E¨v\G”Üaƒ±£ Ï:ý²@ðέëzËÔ©ªú/Hðvz¦°v{aHgëWÞ7B±1ýâYȚɩ͸ôÆ;pl÷÷ðìY jgfœ»÷n@åì<Ì`­Äôëm ¬ÄÖ­;R‰Q6²ì_TbR¦&(òtm~â7îõ=3iŽÓ6$h6$yV4iwœý² žP0 £ù›J(¨ ð ±V(ĽÿqÊg'Œ]Ö÷Ùå¡ßýä=  ¡gAÍØØJ¬Ý´Û^~ fÿûs8¶¬­ιyŒê€£×û†iæö~ëÖQ­¼ ×í¼‰¥•Ä‚AÓ4Æ'/¶ 4µëúÚq|»âŽÒ 5“äu\#\ìv¤ò(8Ž£ŒO´Ô•.­èsÚgY>/¤3÷?ÍóOHÓx/Ô7 :8Ðìz½f;€ëM‘dk0@‡MOWïѳжnÛ‰ùSwãšCÀîGãT˜A}j+Ðu@w€²<ùÝ{1=±Å!¤ñ ^XXŸpÕYô!§!GxqÒ®Ó³Ì-·ÞMfŽ¿Ï>Š™%`¬÷’Þ¸3ÇŸŸÇÔþ§W³°BC,ˆxâ!¨ ’,dÁfôsBé‚X g!œ]y¶¿æN,=p/=w´þbtC`Ö= ë¦6còÊ›YR !!.蹋žUžeõ¬dyÈ|$yàŠ‹å‰êeôGO;ù y³°nýzŸ9n¹«'F ëEÅ!èšÛ¶`9&L³×5a;&§ŠsóÃ0—ƱãÅ;p×Çï›þ×·²”’\3BA6ÌT"),<Š‘ž$¾¨Æh”ߢ™A­äiÒî·_V+$uC2MµZ­é]ã”gK Ë»8Ý•ü„†êšãæm§ŸÍ8e”Äù„t‹‡mtfÍ,Ìϳ…‚ôì‹.m i¯½Ì£Ÿö%¥S^냨iOziƒê»W.UÀÏã‘T,È‚!I9 z†ø.èFÕ½ò^Ò Y@ÏBã8øóŸãè±£øùÏë-T^ë”®ë°, º®7[¯Ä¿À¶ëoÙ²%–’õK!ªÈŠi0^Tqûº…õƒÊâe× Sµ(F=^îò’…àHÒ æMh·á# qÇ'8Žã;þ@LC–õ*O¢^³¼_œz›ôNV¯’¶£Áv5×߳𬃪è®+åð…õ,Ô¬LÓl¾t\×…mÛÍ‘8ã†×ªÕÜϪ+¸_úÅ_LÕâÐîÖ BTžhÉa½X†ÚùLe)@òRGôÚ½Wb. Íïrw;U9–ËyÏBË'ÉgÄ™³H' ò,\ùÂlÌüõ,¬\¹ ãã‹ØuÝ.¸šÀ\ ?xô¸áúñ› IDATðè@ƒe™˜=1‹¡‘a†ó ç1té6lØ€O|êOpß·ïÏ´E"m«]Ô>ê|yõ¯ ÛGÕuPì …^JGÔAÉqÓuxÖ×/ ïÜ^cN˜7LöJÈâ£S]šûBòW¿ò¾‘<æYȵXÈ»gahhã«1ºb …tM‡e™ÆððFFF¦i`Õª ¬Y{Î;‡+.¿ ³§Oàe/}îûÎ}™yYUF~çaE7˜DÈì×u&l`m^®M4Ó\Ÿßs’öx1½I»%=¶]מõ½ôD‚' Ãhþ¦ ª:/H,¤ qó0Nù성ËwAvyèw?yH'¡g¡qhΗ±û‘‡—ýöÃÇ~Øü»X4°aÓÛÆÄêq”+‹(•J8}º>#ÒÞ½{±}ûöØ/— cGnÅH* Ø 2/¯ ð(}ÏÓ†çñúÛy}í:¾×ÔéããÖWb·#•GÁ;¶>†ŸXH+âæA’{Ù­ç…tæþ³´ƒ›®h˜ó.àÉ†ŠƒÌ< z»þÀ}_o{æxqÄýlä§ï@:y«Õª°ìúb@µZ®ëÀ{¶¿þ—_ÃO>Z¹¨^Z¢Aï÷{š Mž-„BòŠ, Àa(‹(‹(•Jj~Š›*lxxX¹Éû…m¥R©e#„A£/< q?ÀuÒçŽ[oáªÕªø‹¿ø*¾òå?oK Fó¿S,BzI,ˆxâ!¨ ’w¼jÆ¡(÷¹*/!¤§Œ÷B}Ó ÃÍ®×a¶¸hL}dk0@‡MOgöô˜…t†xð‹Ç¶mœ>}çÏŸ‡eY0 +V¬Àš5¡P(Às-¼úW^ƒÝ|¿kÆ|”~²ª~µ|Bò(¼™ŽÄÙÄð¸õkÒz™BH›ÅBž…‚÷2ð{!X–…çŸ?Ó4[ÂæççQ.—±iÓÆæ±†QÀøÄDì—N”¹Àü A}{©ß9!„ˆ ¢`ð׺IrNB!Éèé1 ©ÄBãåsÃõ7âÈ¡çqý®ðÌÓÏÀu]œ:u ¦i¢X,âïx'¾úå?ÇW¿òçøíwü6 Z­âÉ}û°víZì}ò'(ìÇJ!m©«¥UmÛnÙäU“l„BüxÏÂý÷ÿ-V®ÃßüÍ·°aã$\×E¹¼x÷»Þƒk§¯mºÁ׬YƒmÛ¶~é—nÅsÏ=‹Gùþìóÿ©mi$„Šƒå¢@¤EÖÄýâ C/!„b!cò>farr ®ëbóæÔ®As¡C‡[®ÙMÓðècb÷î‡pùå—ãoÿm8xßþö·±´´„ûòÛXŠ!¤ "Á²¬æ& ш·8~A±@¡XȘ< …«¯¼÷ßÿÐýöÿô§˜¾n'vï~ï|{½ Ò×ÿòk€ãÇãŠ_¸¯|å+YŠÈÀÁ5#„Š…òìY¸ë®Ã¶mT*,,,`nngÏžE¹\FµZÅìì,þáŸþ_úê—ðößz;~啯nŠ„Ÿÿüi|àý¿‹÷½÷f "]7Ú=#K6KœÁ‚Âýò3m|q ɰøÓÆÝ®´g±*­èU= žXðƒ¸8›8S’,T+•GYÁYõ[+?çùY!„ô^Êë¸pupP_it@s_4ÀÕ\Ø.P@ºçÝ€G–ä}ÌB¡PÀŠ+°bÅ LMM-» ¿ök¿†¯ãkø«¿þ+œ/ŸÇŠÑ¸êª«ñù»¿€U«V±¤’ž©Pú](ÈF¯J$……ðiâ‹jŒF‰?mÜíJ{œã£ˆU7$Ó4Q«ÕšÞñüº®·ˆ…0C9Nw¥4ž…^yV!$ b¾ ÚAÞÇ,„Uª«W¯ÆG>ü{,(¤'lø‰†‘ª…5nX^¥¬Œ,?Œ{¿²Œ?ÍuÅ]è¬] ˜ÉbAö0È3 yésG)TÞ(¢£xzé!„´äzÌÂÿîÃ÷¾û±DǾâW?Ž_{ͼÄÀ¿ëHXXPës/\cÜãÓÀi=ÌC‘,ò0­èR Õw¯\ª€jJÔ4bA ½úŒBH®ÄBZÏ‚'îzïÇ`š•zo«ˆ/!MÓñ‰¿¨‹ 2DŸG0ôƒJ’‡*0Ž/wiŠs|Ò."A«ÀÇÉUœiO+ÄMŸà8Žï8‚( ^fQ>!„b!%i= ßûîÇðÁ·¾åòœ:áÕSÍ¿­ÒÚe¿ôßÿ{|ê[£X Ë»©æª[ý»Ÿ…B±ÇwÊí¶G!輞@Ðu…B¡ù]în§*Çr9OãYèÆ}%„¾ YY8üÿýa¢ã6ßöywÉ@ ‚°}T-±IÝö³Pè‡t$´÷ºÚqí²@ðÎïy¼a~+4Ë‚¡Ÿî=!dp° ¶«¡à4G³él½u?Ýu`99 Y nþçSã8Y+Å:f}©†7±,¢4¦‚2ûu yº6ÑPLs}~Æ_ÚãÅôŠFf”ãƒö‰2V"Êñaéê·W¸†‰O(†ÑüM%TF»ŸX¯!©(ïµg$n%„Žˆ…¬< 'k%ܹq6Ö1÷[‡ÊÒ¹LŒV¨$ϵªÏ8ÇF Ïãõ·óúºy|ÚkŠS²8>n}+v;Ry¼YÂÖLj"ÒÔù½ôŒôRú!&ò0mªaC_NªÊ´S"b„BZÅ‚,Ä1 *ã_UŸŠûÅ „B:$º½Î‚^ˆviíl)#„_,´Ôå ñÔI%ü„‚ß±YìC! 1h§P¸÷غ–ïq»)Ey)µDùõÕ²B¬|Ù}¥oyš¹Ü !$Ï‚Áó"ˆ³‰áQˆÒ O%¢®ìL! •ga}©¶L„‰‡ ŽmÁ²ÌH/'ÕK&H<ø-ÂW€¨„‡ßwyþö sBH/ Q0xxãâÔ·QLSý´b3!„tÝx/Ô7 :8Ðìze;€‹F]ik0@‡MOW‡åÞ³ðËkçÛšáqŒý(" ìeBB!êTqUç(³E³ Z«kÊr˜¬Ê†jêRÙ£ày’ÃÆÙø Õó¶r³(ÄîLQò IùìÖóBùó›&Œ lGƒíj(8:­1Û‘ÀÖ[÷Ó]–“S±vç™Ïã#úýTiøÌç>ÉE!=€ŸPg( [¬N6¾ÂÙôŽ×kƒ·±/:!$…ú¦A‡š­5Äࢡ l †èРééê®Ü¯àüì³Ï6_â@6ÕÌâ‹`Ó¦M,M„ÒƒbAÄQº ù ÕwUÜA^¿Ù‘!¤Ó\6¥ãà‘óÐ 4H% /ƒé6êMÇÅÕ/¬›û“ãÉ–È­gA®Ä`ß¾}¾/;vÐ¥G!=*Ä)O½ÙäÚoh!„t“oü¿O㯺 —oŽ7¦÷þï?³eU¾ÄBVžQ,lݺµeê:Û¶•SÙ±B'„Þ ¢`ððÆ+D9>‹÷MP!„t‹×½d_ù¿àìùj¦Öô$¨ÐuC`|lwþòFÀ<“/±µgAÓ4ìÝ»7tÿééiN•J!}‚j*T•HÈJ,ˆŸ¢h¡h „䉱!¼ûµW$:öl2­Ðž¯Â~ñ‹_ (‹™›]–!$¿âÀ¶mضݲƎjY0DYÅ:L0¨:BH7Ñõ"ŽŸµqr¨UmÔjõÙŽlp\¶£5êOŽëÀr\l»´ˆË6”0ÞÂê‹r$²ò,<¶ç‡¸é†›¡i~ò“Ÿ„îÓM7Á¶m–&Béq‘`YVs“ƒhÜ«Zý£ˆ… #O(xÓ¦rOBH^89¬^¡£:¤£f:°] ®íÂq4X‚h°m f:xúH—m(a(¾Ü{nØu#6lØ€™™\{íµê‹í‘_Iˆ³¸!ƒ½r¤]‚Aô&X–Ó4ašf‹`= *± ZMbî·þ‚·Æ‚¸BH·©UmT‡t8¶Û®‹«áQ°lލÿíZ¡^×YLÖ˜Þcfff i8ºÿ¶mÛRµþÈF÷]NHŒv?Q«*·ýœAâ>J¸_~¦/j=£2œÛqlÒ´‡Å“¶¬‰^ѳà‰O0ˆ‹³©f-RqðªUŸ=¼nG†a47ov¦ ¼ º?IËK»Ÿ’¬„&¤kbÁršËn®í¢jj°у èrº¸d& ò­YõlHš¦áª«®R_Dóàµúðá%d0 ‚8â>(<ê‹?ÉyãÝAiM›ö8×”T,¨º!Õjµï‚lÔËbÁ~bAžUöDxû†ÑÒýI\,.ŠpË"ÏÛý¬BzQ,h°,ÀA}•f×›-NCsÌ‚ 4¸Ðá5¡/Uã>óV†n Ü÷õDŸA/"¯’7 Åb¥R CCCÍV¿E}éwA >#~Æ‹ª»FÔ° ð~CY´Šgµoc=ªñš$_:ud± zÄnIÞæ‰ïSöB˜¦‰Z­†jµŠZ­¶l“÷õö—÷³,+Ö}£1>8D©K{¥^%=ðÞwÜújͶ‹?ùô§¡éõUš*õAÍ.\|ùËŸ…ÛøçaÙÉꤶYˆû)óƒGÁ-7¿š¦aÿþý¡ñNOO³Á‰ÖKÝðÒüYtшҩ×ËQ; a±ë<’8^Áû½ bÞ‹BCãàÍ®ç8βcD/„×è$΄$vó ¬ìõ{¹¤z4ªH—ÇÁ¨¼˜ôö¤˜®Gÿñ3ŸPÿüà>ŒRÑÅyøó/}ðå/ïyχá¸ZC,$‹/÷cnºñf¬_¿§NjvCò*nïÁ …ÐÅ{‚^~âKG|ÐåpBrÕÊa|BÁÐb(IªDRãXe Ä9>Íu´£e[<¾ýµÅúV4ÞýƨŽ÷ÛTõ¼Ÿ¼¯ß±A _ÞÄéêFò]Ïf]WÒ® IË¢ë¸øƒ}Ÿø\]ÜýùÏâƒøpS(Àxï‡a»@éêžXgavvš¦á©§ž Ý?΢lq]ýàLzý%'è”ò00{Q(Ä­#:uü –QÙ`ï³ØÕTî~ç÷é×-DôJXæ9ÇBuaë0aA:‰íh°Þ‚ßûàGðé»?Ó ¢P.¬Fº‹œuCÊʳ rõÕW/[M°׳´€8éÅ—ŽÊCä5˻ᓗôe‘ެ½ Y¤+îð,˲ª×kŠ:¥µ,ä…ÖÄë’ãóÖVðÖWH2ŽÂ°¼¶ˆ·¾›×±æ÷>ô|úsŸiþþŽßù0¼V® ènº±¼¹÷,ˆ/ƒ 1 ×]w]fë,°€ôãKH.ÇQºÛõB7<•±õ:ÂÂÃÄVÜãÅô&1 ÒÛ®kO›®¨×-úaÞ_Ѩ÷ ª©SE…,DÑõEyÉòýů|å-ï IŠe] Aƒ«»øÐ?‚ÏÝý¼÷w?Û,§> ¹^¬Ò5¢÷”gaË–-ÍJ\lé‘_"|àÈ ½¤‚ƒº¥é†—÷ëoçõuóø´×Ôéã³ ªÅÔTéðg :—jQ,¨¶(!¯ÏßÙæ]Иž ßÃŽ#$JyôÄBAw`[õºìýø0jn}¶$שk×u;]|¹÷,LNN²TBHŸ3>>ÎL „8ŽÛ±áj:ÇS¤:Ž×qa5öq@kL¥ $_W-·ž…Éõð™Ï}2U®¸ü*–(B!„Ò7L_VÄÁ#¸Ž[.\Øn.4§>kÒÕ/¬›û«Vò%ÒzÞòæ·lÛÆââ"°°°€ÅÅEœ?¾9‡¶¦i(‹ÁêÕ«±jÕ*¬X±###-SªB!„ÒË<´o/Ù2…Ë7Å:îÿzø~i[2nîÇ, ŒÓEM!„Bšk^0†û<Œ“ó,–]˜¶‰š¥As8X>®«hè¸hlwþòFÀ<“/±V(|󯾉™ϧ:ÇÔäF¼ùMoaÉ"„B!=Íê‹6Þð‹c ϰ1_b!­gaæÄóøÈ‡~?UÒŽy $ îºç˜ „BéIr?Ò³Ï>‹B¡ÐœÎ.heN×u±iÓ&Þ]ÒuÞû«/d&B!„bA&«1 ¢(Ø·oß2a ³cÇÎ[L!„BHžÅBVžQ,lݺ†q!ɶm·|!„B!„d Ü6ØÖY{4MÃÞ½{C÷Ÿžž†®ë={C¼U¨ !„BéŽAzA ô„gA×u¸®‹¿øÅ€b±˜Ù¹Eâé2ì) !„BH7Èý˜…Çöü7Ýp34MÃO~ò“Ðýoºé&ضùü¢N£œB!„ˆ…¬< 7ìº6lÀÌÌ ®½öZõE4Æ-ˆ3%¥Á ¢xg[÷ÃÂö‹²oœt†Å•ôÜ„B!„ôÄlH333Ð4 ÝÛ¶m™ŒY…‚Ÿ"È3¡aû&I_P\ìMÖN^…S'žJ½O–ñå5ŽN¤½—Ë !¤Cb!ëÙ4MÃUW]¥¾ˆ†g¡P(,3ࣜßC<Ž­ñ„âoph1ºÂŒ°¬ u‘8é ý'FzMÒk´mÚ îûz¢Ï ƒÞìlŠÅ"J¥†††` ÃhŠŠ8ž×u›!„Þ0pÅÍO8`˜W„(´Ý³÷Sæ>‚[n~ 4MÃþýûCãžžæ]%„š~­°bË¿Üê/†íçwÞ8]ü·|Lœóxßåc‚®=ÈpËË$áAi ;.JžÄ¹×Iò^L·¼_Ø=ͲœB±nºñf¬_¿§NjvCÒuº®7=^÷#ïoÇq2Mƒ7@ü.‡{Þ‰°ýÂöõ#êñr8!„t?ã9LdÝý#è|qÄHštÊÆmœüQqóXµÒx¢æAÜ{7ïåߢÞë(5È[ÅnJ„b!‡hš†ÙÙYhš†§ž @ã,Êæg «Â£î›öœiâV…S8BÚEw!ªAfh¶[Ìô²(‹Þ ù˜Dˆµ#»•§„P,dÀÕW_½lA6qœ‚¦imñ,ôi§d%„N‰^8yλ(„,ãêú“‡sÆ&Aâ«yJÅBFÆoИ…ë®».³uz BH§ï,· .9Yúý"ü Ú^»÷í>'!dĂǖ-[š^Ï“ rf#BÉxû‹­Æ~û%1&ƒ„…ß>*Á :&êyò–ÇY¤Ñ︰û–ä^G¹¿2¢@v QÂUi'„b!‡LNNò.BHÎAœïi÷‹ò»jpj’t& ‹ó{”A´QÒ7ï¢æYPÿgß`&B!¤ÿÅ·¿õUT–*°,»f;\Ç —9Fˆ‚¯~ù“ÌB!„ô4hºŽBáÂðåb±ˆ¡¡€ß  Û¦_ŠÊÒLÓl†9¶ Çuàºu±à*5ƒÓüËû]¿;8Ñ®Æuä£áÂ…&\\‡%B!„ ËídW0à5 Ðu­U,††‡–·L,LŒ¯„9: Û¾pBÇq„Àõ ö ÉÑ`‡'Ö…Hp¥‹qàºt4UG‹ðõp¸®2s!„B©àºÐ´å6±¦ipö´¦iÐt­ù[A×` ábaxxCCÃp§Õ×dÛ^L€¢fÜàý\ÑØ ¹J%¤…y#Z¼  „B!d°D‚"TÚÇûË®»õ)|j·²\B!„€ãj ã_eGÛËd€ëÙᮦ<ßò©S%C¼Ùد5DA„±Ë|WaØû_ŒŸH¸Ð ©5 Þñ-~…ƹ§õ\üí·ñØþ·ÝvKé¾óïࡇÂäš‚²\B!„ˆv·+ÙÝ~vù[߉(ú,£džxbS(LOO³<‘žáûßÿ>^ùow2#!„Ò1SÚèßëS‹¯ë‘'&&&XH®™››Ãôô4¾óïpúbB!„t½_/ÌqÃ* ’w,Ëj)§QÊu¯³vòªLö”¼àõÞBÅB"ØK§\¯¼ªe“_öòK?lÿ^5(ü®·iWå_–áIÓ™öš²<–¢ÎÿY :>è¹RnüÂ’–¿(×' „Îc0 É/¶mÃ0¢=¦§N<Õòò=uâ©–°´û÷qÓŸôz½ü’¿gÞk†r¯–›v§½]ç*7~B!mù‹ó[œëî‡g€~§= œ-†ô‰XHS®U­wQö—[ú¢´|Ë­¡a­£IZ\UqúyFTéò¼Ä¹ÞNˆ’(FSÔÖÜ8­Áq[™£\[œ{·õ:ìï óys;Z´³0z½ôÅ9_V†¶,@âˆ1ÝI¯ƒÒ9öüèqìùÑßßûֳв¨!}RŽƒÊµürÎÊÀb4ÈaI ›¸-Œaû}Ú?ª‘”Ä(ôîQVÆ’ß5EÉר÷2«kˆs¯³öÂD‰+ë{“D¨®3(,k@`4`Íú­8}òÉÁ –mñÆ“žGö,•븆T;´çS†Ý4Œüâ3⢰¬Ò•d¿¸éhG«p–y$‚’ˆãv•Ÿ´å¹»îøÝ›°g†Ò~®Û9µ“[|_&\iݵÆÒf–׿‡£IDATÍa•êE¤Æ¾zã{}/ÍgæWúËõY”Móù½¾ µÛÜoù¯6LËlœ‹Ò»È •k9Ìû.zÌÎüTy¬j¿¿Ã⎚69|væ§X;yU3ª´Æ½Þ8ûË«â_7u fg~˜¯ë¦®ñ­ƒ¢¤3(ß½øUq¥I¾&ÏPó¾Õ™Þ}Q3¬lD½×IÊKÔÏ t®›º¦™ž$ï k÷®Í»Gqž=ï>GÍ£¬žÁ(Ï}ØoQë’¨Ï !$9ŽëB×ÜVC¼ùÝÅ©™'|§g_6fÁulÔ—‚®o.l¸Â?Oˆ› .,ỼÕw]®k_ØÏmþ®ÓP*ÞÖr™Ðà6·°ùæÇW޳dž§P( l¹žùiӀ˲¡¶Ož®CNKØu¨î‹wo²º®4÷Ú;V–Qî˜Þþqó"ËkR¥[u]y{U¿ùåœg†Ò¡Pßöìy{ö\£°gÏ¿bÏžÇ}_îY€ZÑk® W \©5Œÿú¹ôf˜ºÙÁ(qäe©]W“~w¥¸lOÕ¿kb‹†Ör.BúA,•kñ…=;ó¤°ƒÙ™'…–Ó'Cž Gñ»ßß=·ø{pËýc/œ7ùõíçzýn/ž­ËâóÀûÍ/|ÝÔV)ËÓï—¯òµÅ”Už«¯÷ßô¨ó9ø^ûíëwþ÷)ü· ùœþ]±ÃššÁm™ƒÕw,AØlJMWED‘ỎƒË’B!„B€çž~ P* 7¾? ¸JÅž9øhŽ Ãò ÖÌVM­ÆÕ¿¸µ•™&°Zâ]"„B!$æ/ æùópNÖ Ÿ·P«œÉ6R»˜Ý¹ÜóhžËÕ2Nœ; ‡p¯X·Ó—ççBËñµjy¿ZŽŸ±¼×Å9®ï2Oëv^kÞc™–;wÀÊIÎëöÚb½«¿VhˆûYTNŸCå´—x¾ø>îƒ[‘w#PËqæ¹&´Ê~Îs9ÉyÞ±2æµ’öÕƒôžÈÿPàv­!œYàüó†B!„ÒÂÿBEíµ¾|IEND®B`‚bitpim-1.0.7+dfsg1/help/phones-sanyo-scp6600.htd0000644001616600161660000000071410575414563017336 0ustar amuamu#include "pagestart.h"

What works

Reading and writing of the phonebook and calendar are supported. Wallpaper (including camera pictures), ringers, call history, SMS messages and todos can be read from the phone.

Contents

BEGIN_TOC TOC_0 TOCITEM_0(Cables,phones-sanyo-scp6600-cables.htm) TOCITEM_0(Notes,phones-sanyo-scp6600-notes.htm) ENDTOC_0 END_TOC #include "pageend.h"bitpim-1.0.7+dfsg1/help/phone-lgvx8800.htd0000644001616600161660000000067310721731463016221 0ustar amuamu#include "pagestart.h"

What works

Phonebook, wallpaper, ringers, calendar, memo, call history, SMS, and file system. BitPim can autodetect this phone if it is connected to the PC via a straight USB cable.

Contents

BEGIN_TOC TOC_0 TOCITEM_0(Cables,phone-lgvx8800-cables.htm) TOCITEM_0(Notes,phone-lgvx8800-notes.htm) ENDTOC_0 END_TOC #include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-toshiba_vm4050.htd0000644001616600161660000000055110360660467017364 0ustar amuamu#include "pagestart.h"

What works

Phonebook read and write (no support for speeddials). BitPim can autodetect this phone if it is connected to the PC via USB.

Contents

BEGIN_TOC TOC_0 TOCITEM_0(Cables,phone-toshiba_vm4050-cables.htm) ENDTOC_0 END_TOC #include "pageend.h" bitpim-1.0.7+dfsg1/help/screen-troublereport.png0000644001616600161660000002656110652173461020011 0ustar amuamu‰PNG  IHDR3.5çwsRGB®ÎégAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<,ïIDATx^í ”Õ½ðka0ï$Ÿ/ŽFEqCq à.. ¨€‚0,.€D b0ÆcHÎÓãqÃïhŒÏ%‰è—|¢¸GŒq‰KLÌSdt†Y{ºgßfæûWßžššê­hº»ºªsîêš[wùMßÿ¯î­ê®œÞÞ^Íô“3uSNN®ìèíÎÓwçæ„~9d¨¾—«’«íë‘srs{{zµ}ûµAƒ´Aš¶¿¯”}ò‚Ðßü¸ž@N—ë»@z̓Q¶{ Ù«^ÉzˆÖµOŒÅ]ƒ´!‡èû´}zêFòÁí f>DëîÕöz?Ò+I¬pÚýIô ’y'Û€ t~UR%«mÖÕ)»ŠÒF’æ—êäÞH*¼KÊ»³G’6·E¿M‰@÷végÚô2mæ×9‹k$i·Ö©$nÈ]Þ–{g—BûIOî]½’Ô¶ükìTjçûez¡r’ Ç äܾŸävò.’.¨ ¬‚­J9˺-Þ›»´5wqSÎÂ6mA³v}ðßšåehÏÂzM¥kõå·ÕÚÜ=ÉI³Êµ‰_jù…&LùB»¾¸?Í÷k‹ª”Ä *énˆ’ôßJ›Œ´¸IÚG‚ ”øam®¤›krn®–¥IÚõ~mn¥ž |¡$^¥™¥zš^")gZ¡vµ¤]Úä¯ô$"ƒó>׎x5x-yÜGú¯Å3¿%%†  +„& ?jÖŒÔ7_éæ0[Hi‡änUÚ$@ 3H¸·¤`è<»|ÉSU¾Únã€Í%– ¾ä -£.±€¤ï­ú@Ò¥ŸÉÅäh>PëHæ¥$å}L#n®ÖæWéI‡j±Ò €ž€q¦¯ÎýÕKYäŸ^²äIWiaÍc?©ºo¡EAå²i¾%WVÜ|YÅ'U,˜ ©üÆñ’ÊfŸ¥§™cJ¦Rxù±[fžÝ°kÛ’‡Šåb²ÿGÿE;y]Ð'þ1’*ÌóÆLðë9 qY&,ÆÌ… ×0Þ‚l¸š€Z+ yƒ€±þ”,þÈl öñ{^z¢ñ¿©þÁšÇZýÐòêÿ\Zõ«%U¿X¸wAàÞùŸÎóß5»rùtßÒ«*^\R0nË'¼5eŒ¯zoÈÇÿUÁwVj²l¤û ã ËÍóÝú‰¿:ý^KÐÓÍÕý;ÍóœÀÕƒ‡ÆCÀc¼é…¾ú/wýÈe1.ÃU¿Zܸö™¦uÏ×ÿþ‘Ú'^óØ]ÕÞQõŸK¿\,J¨ºïæÀܸ{^å×ù–M­øáÄÒyçm»ú”WÎúž~Á@æ§ÿK ÷~mA.!è‚“ƒùº Œ¤.\¨ký D׈\w"Lƒ#ðXXÌÚîI=@ äe‚>L)Ѧ”HLÜ=WLаæñº§UóèŠê–U­¼%ð³ùþŸÌóß9«ò޾¥S|K¯ÖW^\~ã…%³ÏÞ6uôºsÐ} ÄÇýË4?EȧäB³8G†œìË•€à%³ÌײõËÙçÄV@H.>“ Ê´iåzêóÿÎëjŸ¼·ö©_ˆ :6~,QÞ×<ÿ3}K§UÜrEÅ‚KËo¸°|Þù²¿åÝ×Ê ÆÏóå5§¿vá1ºÎÝò\?Ð׋¾ÿž®ˆñâƒB}2"ݸÞo¾B]XÕýÜí"•6îéú|O—ºÃ)t“SðâqH]˾µÿhwO•qÛÓç…{%õßeT´«äZNxþw¶vH#íïÏ9€¿ûž—¾U””PBò e‚>kÈ5-¯yôÇ230BSP“+\"2(›}¶±¿ìº3Н;óËia>]?ˆ". Þ”*“ Öóêàoñ€¤Û~²A¶ßûWÀðÁÆ/«òN~FdððŸZ Ý’ß|È‘'?úÅÖJ9dÒÏ Õû[d°q[UÞ‰ÿu owÕscÔž-Ç’_xèÑÛÜͪ1«~ý‰”öüëA•¦&=ôFs¡¿;E…S, é ŸEòoñrµ@_&úåâÀÌ7BÅÍ+nÊ/Ÿ{n¿ ®U6}tɌӿœ6úµ ŽÍNÝ¢¯õÏ H­} Ÿ*O=¨â†žöÂàÖ‹†žüŒ¤Ü›úö÷„¬/Q[n3¹¤T^× šô™-2HÀêØþ’“m£h¿"KNõrð˜WRô® ñ?ö‰•O±€€ H|îŸô¯‰?_»‰äß»oð/Ÿe@®ôË`Ú‰eSŽ/›vRÉôS·O=õõ ŽÒ}pÎ.-²ä2…Ü-*'û¦àž»°éÞWÛTp7NÕå¥!U™|ô¬?DJ Õò²¾¡}è±O­Q;ïy©ENueã­ãî©“e[öŒ¼­Vÿu¤d ¾¡ jϳï´Ïšõ²mì4 µ-˜!|[z$;z£Õ’?8ÿˆ\`ÄœFgc¨j7:n”£ÙFï €:ç(ˆØxŸ€1K˜âï[2*—°P~ÓErû~Ñ=7É•ƒÊ;gún»Æ7d»bƨŠkO(Ÿz\ù´ãK¯=iÇÕ'½qÞ‘!È|@” AЯÈLáü]Úú"£ú^‹¾àn.ñ†[^=ôø_ËÞÑYTal›Wu¤„ÃÕȯ~÷âÆC~D^ÙÔÆœû6Ÿ’ÿ‚Ú>þæ¯GMzE6ŠJr®- }«†ún¾dnÙ#Mš|ëGC{â¡7ucÍùé§W¼$¼ð•Êi>0âö²Ÿ½+ûïýõKþgßÕí²ôþªÀç×Yf.íž?´ÈËûxO:í@#¿ªñ·/ë-ŒÝl£wæŽèÊ'…/q QfÔh’>]Ð}0ï<ÿ3wÍ È E+æT.¿NÿTÚ­“î›sºoæÉ¾éÇû¦ðM;¶ìš‘;¯ùÆ9Ãu\¸;4Eõ¢a ôú†£…õæ@/‘N^®[¿#oê¦h>¯O29lQýçEÝrÁV.$ ûš6·¿´~—\ö™±sm±ÚzÜ“’9<™‚oè·ærMÞZ×Ò#{$Væ‹•yÉàs6˜ë½-…C.|ל§¿À 숑 Ðjã‘÷HíRH´Í]0 ŒÛléŽôÎÒøˆˆØ xœ@A“f$“$ž”ÍçûÑÿgùWÌü¸@n7ª¼}š%Fù Nö_7²òš£+§]>õèWýæYßÕ}0¾D÷Á ;õùîƒc·É7ÛéóYW>XÐÜåËó$…âõ¸µC–…¶õà{sh‰F¶å‹ôÌÕ¯ýgǨKÿ OfW›UÑMþ0gíðd>JýÖ²'¼X½êèU„ç×UdÊoA)/UF2JPÛe&4øÜ·Œ̇Gk‰ì·ÓìˆýH‰ˆL@¾Í˜ä%ýVhÔf4J)½ö4ùlAåm׈ üwά\>ÃAþÅùj{[S`ÖÈÀô£üÓŽ¨¸úˆ¯.þ§±ÿK÷Á%¥ºÎ,Ô}ð½_} ¯uT+˜}»´K’¹øÀ´ßìu×ͼ?ßwë••·_SyÇô~,½Ì¿ø¢À¢þû‹ª¦˜:¼bò°]¶þŒoé>¸4 /3ù@f ºªõ•©  Ì:÷¶îç>Þ/‡Éz‘åoß×ï†Û÷յ꿒ýÆB_à^¸×’Â} úÏŽnÇ8Üø•ùXÙùÐýµ,¸/þ?ººäÐC~TöVéëH£Ï}jâ#ýJ3W­ò«®Éþº–PwîY«( e’AvJùÑz$û[ÖYר)!~ÐÔÝÑ4¬j ^Yy4Z³-½37,{ ï¸q¯f$å'] r/Œ~A·øòesÏ­Xt™ïÖ« T.½Üë¥þ[ÆS=ÿ cÕÕÿ^9éÛ_ÿ·õ§ Ñ} ‘_)Aÿ~S™(ÈkY, ÊÀ8ÙWEHÐÿí%1‡žýŠSE ­­ÐŸ†6xº~r­ÇÙÛCû-ÛžTÙolÄØŽq¸ñ+s9jçó7„–ÿž‘ík¶zÌ£²?oÜ«–ª=²aäÏU(ù¹j£ì<éïêØ¡Ç?•» ÎÒ*Kä@UKÄ/Eéú9ƒQZÄf‡÷N:¾3"jvBÀL@[ÜCòCðA+è'š.KF¥³Æ–ßpAÅüüŠùóÇûæ_à›^åMãü7œ˜sRÕ¬ce±H&IÿV‘?xçYƒÞ89'ä™"ˆä[‹t|³>Yú@M”d¥hˆ<)óÎ úê)˜JFRûû¸¼7·/1 - @€@bX­Ï [v÷o&]4õ”=×ý ¸à¬’9g—Œ-™=¶tö™e£+fžT1ýXßÔ#}WóMüvÅ„¼’ómýöÊ Á‡%OmѧâƒÐzÑ@(%¨ËÈrµ@=pY—A˜ÔÓ’£)ÁpBÀð‹h$ö–å(@ u•à«ëùâªS6ž?lã„£6O¹yòI›'Ÿ¼ùŠ·L>aë#·]>bÇåGí¸løÎK†íÈÿÎÎ ÝqÎ![Çä|Ðï75ù@=…YMÔ,An(²Zá®ÐŒ!š RÇÂÕ%³Úãê?‡€ã¬«^Á)Â’gZêwnùó¤SþxÚ·×ù÷WÇ~wí¸Ã׎ùîºqÃ^7ìõ±‡­óí?ù­ g ]?zÈúSr7ŒÊyýDmÝEÇVo߼䩦óƒ>Èõäàõ¹Å>ø¯|öXOúD¡5dCÐ *ÉjRxR¼ÔÜ‚ävžZre  Z#ê»3xý`ð íKþ+ô‘¬ÐB„ÿ|µû–<Ñ4øÚf}±H]?õ¢>oJ’ï7 =ê3ôAe¹Âœ»¸)”t7©Kî)²$‰ êÞïßþvO­»Ì})Þ Àxt? ý"uO‘ºÙtN»Ü\¤'ÙOgè÷žêÿª #ÍhÔ¦6ÈÇÖB¿•«ê‚%Y} ßrZ"OÍÔ&nΙ´Ež©?>SžLò”N•ôæˆ6Œgôô?¼­ï©=æ¯cepœÀòé"’Ë è¾)üwœX¨?­@’|Í„J¾½Tû%©=ò¯|[‘$ùÂ:õµE²!ÿJð색›u•`XA¹Á’T=ùMöÿÖÈÆ†ÛÈ;䡪†'ɵRøVTßW¡î/Ê;ûëáËê‡ÕVí"A€@¶ÐÆ­\« […°  ¬&€²úÏŸm§?ôˆAà@Ð àÞ€ €¸r@}˜p^@Ì8/€ æÜf@fýëE‡òy4N d1ý[.ŽY­ ¤áLáW¿ÿ+ p@†¹{«Ài½Ž$ÃÀÆwÐ’H €î Öih9>À)x $€bKàƒ ¶4 )!€ðAZ#~lܬ¥d”S(ìÀøØ+ä‚€× à|€¼>ÊéìÀIöü1 5o§áò·Û«`½ÈÞ°%RBØõÁб»í< Œ“ðAJF9…BÀ||è_“Ý7E0o˜U¡¶ÕoÃ’µRÁö†-¹ ø M>°¬ E†Y$¥r0§Þ®8¤d”S(ìÀ)ñÍÃçÆœ@Ulƒ1o°L\;‘øÀÞ°%RB¤ÃáW˜íÌ>¼º®|’QN¡°G¤Êæ ‰ù Ü®‹ïÚ`|`oØ’ )!€Òáà ækÈ׋Ì9³ð¦U|’QN¡°G$ÙzFL~3|`oØ’ )!€ðŸONÉТP¸Ž>°ëƒ¼±»ì|óýƒ!ÀüÀu„{‰>ˆïƒÁç£áƒƒ ô6Å^ .ôÅuð>`½ÈuÖC %ð>È,È;’8EÀæT>;³éÏGc½(;ÿöô€€™>È ÙoM@Àø€‚_7Çz‘ƒ6¦j@™Cp^@Ì‚ßÈM‚ Ö‹ „°^Ä[€X/b±€ú0?ༀ˜¤ý¼À©ÏèS/  pÝ8æi=/àûMSò-e {ðßg—Öˆ7>°7lÉ”Àv}0”çá¤~ù¤d”S(ìÀq|0¡P;fþ<|†…E|`oØ’ )!€ðëE)Z ×ÀçMÓÒp&ž™U0?p]¡Á^"€2ÈÊøÀKŒ¾@ÀEðAù@5¸hüÐTx‰>H¾$ «#¾/ÍûUè·ä4û ÅÀz‘—‚ }q|d˜ƒ¸eýÇlK­æœ1²eæ¢[…\Ah°—àƒäûÀ8ë냈9³pZ`ü ð—‚ }q|`×yö>ÍÃÏ÷ïGœ$ñ¼Û-Eá×Eì%ø Þç“‹´ÁÏ£%àƒØóƒh+K¬yi€Ñ¸ˆ>H²¢]%Žx¡8özQ.1?pQì ©Þ#€’ï·,Îd`;ñ÷B =r|€ø¾  Xš Àø¤p€Q4\Dà|à¢KS!Bøàƒ0І€‹à|Y>Pq%AŽÈÀÛL2§IZ~ßçxNæüUh  ôÐòåùh«y>ZÍ!Òÿ& F@úgÈðï@ÀL @ D€ùo@>¬Œõ"所 €8)€ Ö‹‚s&A€€"ÀzJ€ «v_V?´ UB€@Ðç#BŸGÜ#@YMÀïÛV¸ó“]ÛÞß¹õ½4¤ÍŸ¾™ºd´_º³{û‡Ò/é]lÉჴ¾ûùÂ*… ±¢ÍòÂÏ—>¼úøY÷kÝítøÔ•sW>ï+ÝTQ¼¤5âÇÆÍóÑ\ô]˜4Õ{â~¿©œG‹ V¾øáæ"ÏtGq@z´ôá5Ì2H¢ |à™1FGÜHÀŽdfðÁ¦Âýžúéù`Ó7Ò¯úšBæ¤|àÆ B›=C ®d©]ÖˆzzöI þt{ uwwµ·6K¿š}øxf8Ó¸>õ"‰›]úÏ^¯¤Î¶ÖæÆújéWKs%>À5„8ž!`ÓíÞHm-MõuÕ•AøÓäMÓ²ðvÝí2ëEž‰,tÄlú ½½5˜Z<ÚÚš›kje惼q¶> qßü£Ä9h‚¸>PG4nþ µ®ÈÜDh³gØö2AsÄd€ÑòdÎþ¶¶¦¦Æêš@©=Èó2ƒŸG³ïƒˆ‘7n|ÇÜ_ä™°BG\JÀ¶šå´Z"iÄ$¡ÌØoÞŽ–ßÙý­­ UÕþ’4ùÀ2?0äiÑFx¶Ð7(õþ2\!n— ó—Æší 6} "¸DÒˆI¢±_m›ÿU/ÕÊ{Ã’Óü2ZhKKCC} ª2e>0O—,ëE1V„¢ùÀ²‚d”`ÙˆXrÜII¦-"áo„záR6} ®DÒˆÉUµÇØ6ŽR;ÃeÙíÀh 8 ýÍÍõõuþ€¯Øù™”%XG‹ïíb¾ aˆÄ’3Ób½öà—Æší ¶}ÐÐÚ*¾>b FóЯÔvø•ÁüÛˆÛ–š&ríÑZmss]}]eÀ·ÇD ‹}~Öog~`'òff|à°B/\JÀ¦Tl•H1IŒ2ö«íð=*ƒù·áÛFžðB¢UÀþ¦¦ÚºZŸ¿¢ÈaD›¨s㬟õ"—-š ×°éYc‘ÔÔT1Iì2ö«íð=*ƒ±?Zs6;y,ÅZªŽØÚÆÆÚÚ_e¹>0b½E–R ˜ó[ q¢`>ÐÎM®™6K`~àºBƒ½DÀ¶ô³{9³Ž˜Ì«:*C0”÷g62;ÍŒíˆÙÔÎðz#–^uø5µ5•å…6?:vÏÃIµ?ð—‚ }q›>PQU"©RCCUMu¹¯ì{>è>Hù7[à×Eì%6}Ô@µ7’ÜlZ(­(ÛôAÀþ÷Uà|ॱO_ `%`Óµ5•55>I²ò.ÛîMÒ…*]_—m´6WეGyû«LÌQp@\|³ý#yšØŸ~VV¼³dÏöÒ=;dýIÚ_\¸í›¯¾xëý÷¥_í ø88©D ®Šw:çÏ_½â©—^ß°sË?ÜžvlùdÇæ¿¯ÿË[W.bÁ/tímÙåyG’ §Äˆ•å[$ÿä±ç'/zpuGGþîN|A>°¿²DN@ ýêk¾‘‡ˆu¶7vwuHôÜ·ooJÓþý=©KFË{öu÷ôȃ޺šËñ>€ ø´|î7­Š)ýç)Ô@ Íú}`óùinÕA€@zà&€  À¼ @på€ú0?ༀ˜p^@ÌÒs½žZ ¸…ëEÌ!@€õ¢´ÏúÎê…·œª;ÒN>ŸœÖó¾ï:ƒ¾ë’¦d|çû‹&È÷U¬Ñ†­Òx^f„Œ²/Ñã "€ðAZg±qãƒ Š 4%ûà|€²oÜÓcD"€ð> 6@:|€ð±Àñ#¡Æõä4\F6ªàúa `~Àü ¾Ó¦|à`, jà|€ˆ€ëEñ#¡y½h÷ðeõC ŠÒv²œ…1? ,AÀAÌìÏðA|¤Ãðƒ±€ª!€ðAÊ£¼}IàB$€ð>ppR52ˆ>Àø ƒ$M€ƒð>À@ª†@ÀødЀ¤)p>ÀøÀÁHÕÈ øàƒ 4Àø88©Dà|A’¦@ÀAøà UC ƒà|€2h@Ò8Hà|àà¤jd|€ðA Hš à|€€T "€ð>È IS à |€ðƒª!Að>À4 i $€ð>ppR52ˆ>Àø ƒ$M€ƒð>À@ª†@ÀødЀ¤)p>ÀøÀÁHÕÈ øàƒ 4Àø88©Dà|A’¦@ÀAøà UC ƒà|€2h@Ò8Hà|àà¤jd|€ðA Hš à|€€T "€ð>È IS à |€ðƒª!Að>À4 i $€2Κ¦YÚ¾'v£Ýû[y;:8¨YN$Ù»Í? „æ|p5†72šÌûSa)|åñˆî;K$Ùª¸ƒ‰•‰ùÀèÆÁT×^)-\jÇΆjÏrø å>P1Ôˆ¤Æ¹|¸9ŒœÑòXöGs@´ºT3ÔQ»ñÒÜÎ-±äQf“ |åñˆî;K¤Ãæøk âáA3ÚžáÕrÚn1a£ˆÙÌí±´Ó~ÛÌn‹ØN› |àl8 ö,'€Ò჈'òv¢¶åœÝ8»Ùͧíæ3z›R9жÅõAÜ•(•dy<¢ûÎÀnòA´¶Æ˜ _ð‰±r•ðl&±ë(øÀÙp@íYN¸Ò1æ1Ö¦bwË5ð¤ÏX/Êò@C÷]A¤ÕáW_- ;á/c\‹¶,ý'þáûïG»žlYù1V¨Â/3D¼(Ñ+–1ˆ3?pEÔ ‘^%€Râ›ËåžÍæI}{¼hè—+àƒx>(ÒŽY£ [¥ »{ø²ú¡EI ^>pŦ‘H|€øþ¢d&Ê€» à|€Ü=†i=’Eà|¬ÑD9p7|€ð»Ç0­‡@²à|€’5š(î&€ð>p÷¦õH|€ðA²Få@ÀÝð>ÀîôÉ"€âø ¿P‘­ŸGKÿÇåø|r²6å@ ø0?H`àp°ëƒ¼ì{Ÿ?ðàˆ§KˆNàæD@@'€ð> @ø ~$ÔŒï«`½( ËG|_a `~Àü ¾Ó`U>p0P5ð>ÀÄ@€õ¢ø‘õ¢øŒ’8{`~@X‚€ƒ˜0?HkÄ8 ¨øàâ ÀzQüHÈzQ|F¬K à ÌâÍŠ´cVkÃViÜošÄ¸­(Ö‹¼Vè…K à|Ö×\)hv6ÀødÃH§ˆOà|œÙ@à| #>B >|€ðAüqBd|€ðA6Œtúøð>ÀñÇ 9 ðA|ŒàóÁ/MCâóÙtècÆÀø Þ¦KðAÆF – ð>ÀÙ0Òé#âÀøÄ'ä€@6ÀødÃH§ˆOà|œÙ@à| #>B >|€ðAüqBd|€ðA6ŒtúøðAL(Ôø<šÍO|6y;’  ü(öp >ðð_—®A°OdÐj’ý?9!$>À€  À¼ @¤å;M“>§£@@© Àü€ó@`~Àü€ú0?ༀÔü H±F¶JË»{ø²ú¡E©X–¢L@Èpø€ó@`~Àº! ô_?`½ˆw pý ×óh ´àú놀 Àõfˆ€ Àõƒ´MÁ¨€€+ô¯ åóœ&@ÈbºŽY­ÍðÁº—Ÿ#A€@VÇFðAü‡’€À€ ¼~Àz‘ãN¦€2>ༀ˜ðù@0ž‡ÃzQ&LÓh Ç °^Ä<€®ñ|4ÇåL 8H 8?ø|4[CÕ€ à|à¦yb•GEñ¦Ò¢ÏJ ÿ' ©pçÇ©KFû¥;e{>—~Iï‡]Nõ:ub)Ùhü®mïïÞþaáÎOü¾mN;êK¸É4+K·üüé—Ošó€vÑÝÞHçýòÖ‡W*¶I ¿Òeoü•ŸºrîÊç}¥›*Š7ÆJdpŠ>p“ä¥vY=xç˶Ùž¹Oÿéö@š=þŒw¾l—~5Ô‡Õåžž}’<Óåîî®öÖæììrs£Ï‘HG¥và7ù@N–%ˆüeKëÛ[[»ºöz"u¾½µíí-mÒ¯Æú’ˆóùU—þãþJ/:ÛZ›뫳³Ë-Í•vy!Ðq»yŽ#û•*lø¢eÞ¨Ó:;Û=::ÚæŽ:íÏ›ZbÇÎÎtVuAºÜÒT_W]™]niöÛÓ3Í´ …Ú1k´a«4|fô T§|°þófIíí-Hmmz_ÖoÔObÌÚÛ[ƒ)ƒº¬iZbí‘.75ÖÔÊ2­Ë ÷(.s—ñA?m‡à÷­½ö¯ÆKÏ<µ½]”ä$Aý%GÛNVÕmmM—žyʺOãGe‚ûkôËÜ„KS&\”t¹©±º&PšÒ.›{gij´–'Ü£¸$Í]Æi î T„Ü烵ÿhxùŸ2Æ’›$ÛáÉ­´µµQº#)^pl–sÌĪ6÷+±"•p±Ò密ªjIêºli°¥©ÑZžpâR5w$¦Óv>pŸþðQÝ•§#c,‰Ib¥4µÇüo«3Šjii¸jô¹ø¸>vpT'„÷KbÌ,/Íù£å1I =rˆt¹¡>PUÇ w9¼UÆËðšÉDC—@¯Í]Æi î T„ÜçƒÕ«•$c,‰I¿¥4µG…Œ$Vd)ª¹¹~ÍßêÖü­6¶T J qotÓ(<|â;ƒý¶I—ëëü_qŠºÞ#î1zÞSû]‹–ÓÜe|@˜NÛ!øÀ}>øÝ»Õ+ Îji©Ob Fª=}>Hf]抚›ëV\wÖïÞ­‰Z[ÅÜŒð~©BÌ!R½4 7:n®ÎR-‡PäËõu•ßžu9¼1濬É!á(¨w3›»ŒÒܨ¸ÏϾ]ýìÛU2Æ’˜$ XJS{Ìÿ&±:£¨¦¦Úç‚݉U”I áý2:¥J ï`Ä.Gã“@“¤Ëuµ>EQŠºÞ$Kã£ýM£¡H –CÌ]Æ „é´‚Üçƒßlüìú1MMuÉMŒíðäVÚØX{ïMcžÞˆeÁARbU›û¥Jïiì=q9 †I—kk|•åq|p0]¶´ÇB@½ŒÖåˆoƒê`xfs—ñAÚ‚{õû€çá$€/͇¨Ï<¹ÞÿäúJ9çJz2VŒ’ƒÑ!T‘y;YU76Ö¨îÄó~.Ÿp¥æÕUˆeOÄnZh„¿L¬=ÒåÚšŠÊò”vÙÜ6ËÎx±Gá¬ë¦ù(s—ñAšƒÆUÇ÷U¸o~ð¿ß¨\49_ƘRCCÕ¢+&<þ†/vpTÁÅý•.H—kªË}eßdf—ÅIçlî2>8 æÌøÀ}>xìµ IÕHrç¥ÞJÃßýjJŒP^è¯ôBº\(­(ÛôA:ºl>å7¶£ñ ú ɨÍ]ni¤9ÆQ}øÀ}>x䵊œ.ª©ñÉ2tmM¥{“t¡*P*}‘Iplª/‹æé£döL—+ʾ.)Úž]nm®²žÈ™føÀM>(ß³Qž&&ÑS)Á3ÿJG¤_-M¾ùRuùƒO?++ÞY²g{éž²áÞ$í/.ÜöÍW_¼õþûYØeyJZG{CšcÕÙ'€Üä_éæ%­–§‰M[ùÑî¯÷L’-{ìŶ֚ð7®êòÕ+žzéõ ;·üÃíiÇ–Ovlþûú¿¼uåò'²°Ë x¡ko›ýðDÎ4ÀnòAUåvy¬|î=?ùöUÿ·µµº£½>üÝO—eYÉIf‹\ÝÑѰ¯»3Í1ŽêìÀnò€ €îƒcVëÏGãóÉYu"@g!XàÎ @€ùAo@`~À[€˜0?€ >Ì8/€ æœ@€ón5ƒ 3þõ"íÈÍò„ï^羬~hAQÞµÕv’ve €\O@>ŒvÆßBŸGÓ†¿®XLkú6Ôˤ$)ÓNJJ]}…Èí’˜lr°Y£-kì¶ßfiv» õÚH6K³Û6;o­²Ór#Í.Ø,3¹=µÙ6»Ùìáµ[šÍqêH¥6Ûf/›Ý?½½Ò’ü±‰×f6éÂKz”>ê·ú瓵ßÓÿ#A€@–èå€ ÐÛûÿ ½:‰¡[IEND®B`‚bitpim-1.0.7+dfsg1/help/phone-lgg4015.htd0000644001616600161660000000104210360163373015771 0ustar amuamu#include "pagestart.h"

What works

Phonebook, wallpaper, ringers, calendar, call history, SMS. The SMS feature supports text messages only and will silently ignore other parts of the message. BitPim can autodetect this phone if it is connected to the PC via a USB-to-Serial cable.

Contents

BEGIN_TOC TOC_0 TOCITEM_0(Cables,lgg4015-cables.htm) TOCITEM_0(Notes,lgg4015-notes.htm) TOCITEM_0(Howtos,lgg4015-howtos.htm) ENDTOC_0 END_TOC #include "pageend.h" bitpim-1.0.7+dfsg1/help/credits.htd0000644001616600161660000000350711045676543015255 0ustar amuamu#include "pagestart.h"

Note: I hope I have everyone listed here who have made contributions. If I left you out, or you want your details added, changed or removed, please let me know.

BitPim incorporates and depends on components and products from other people.

The project manager is Joe Pham <djpham@bitpim.org>

The following people made notable recent contributions: TABLE Sean Burke Mac Builds Nathan Hjelm LG VX Support Joe Pham Samsung support, LG VX support, Windows/Linux Builds Stephen Wood Sanyo support, Samsung support

The following people/companies loaned or donated phones or cables:

  • URL(http://www.Ringarama.com,Ringarama.com)

  • URL(http://www.3gcables.com/,3gcables.com)

  • RPI Wireless

  • Rob Ross

  • Jim Asta

  • URL(http://www.ahcellular.com,A & H Cellular) of Idaho

  • John Sabato

  • Rodney Meyers

  • URL(http://www.rapidigm.com/,Rapidigm)

  • URL(http://www.craytonelectronics.com/,Crayton Electronics)

  • Andy Hall

  • URL(http://www.bdipert.com/,Brian Dipert)

  • The folks at URL(http://www.ringerpost.com/,Ringerpost.com)

  • Christopher R. White

  • Michael Freed

  • Alan Shields

  • Adam Milnor

  • Brian Camper

  • David Lewanda

  • Paul Kronenwetter

  • Matt Matolesi

  • Rachel Boyle

The following people made contributions in the past:

  • Anthony Bellissimo, Billy, Simon Capper, crackedvzw, Scott Craig, Jordan Foley, Alan Gonzalez, Vic Heintz, Christina Lee, Tim Lowery, Bart Massey, Caesar Naples, Steven Palm, Adit Panchal, Alan Pinstein, Michael Smith, Fiz Stein.

#include "pageend.h" bitpim-1.0.7+dfsg1/help/errors-exception.htd0000644001616600161660000000135310652173461017117 0ustar amuamu#include "pagestart.h" SCREENSHOT(exceptiondialog.png,)

An internal error has occurred and this dialog is reporting it. Please scroll to the end of it to see the most pertinent details.

Buttons

Abort BitPim:

Abort the current operation and exit BitPim immediately.

Help:

Bring up this Help page.

Continue:

Ignore this error/exception and continue running BitPim.

Create Trouble Report:

Create a trouble report for this error/exception.

Unless you believe the problem to be a one off, you should report it. See support for more details. #include "pageend.h" bitpim-1.0.7+dfsg1/help/phones-lg-integritycheckfailed.htd0000644001616600161660000000641310360163373021661 0ustar amuamu#include "pagestart.h"

LG phones store their phonebook data in a way that makes it easy to synchronise and in particular tell if an entry is new or just changed. It does this by attaching a unique serial number to an entry. If you edit the entry, this number remains the same. If you create a new entry then it assigns a new number.

For example if you change an entry name from "Lauren Smith" to "Lauren Jones" and a work phone number (such as if they got married and a new job) then sync software can tell it is the same person and not a new entry. Sync software can also tell when entries have been removed. This also helps distinguish people. For example you may know two people named Tom Jones and sync software can the difference between there being two people or one person whose details get changed.

The numbers are allocated by the phone, starting from one. Erasing all your entries does not reset it back to one.

There is some sync software (notably that used in Verizon stores) that does not talk to the phone correctly. It transfers entries to the phone, but doesn't do so correctly and leaves the phone with entries with a higher serial number than the next one the phone will hand out to software that does synchronize properly.

Later on, as other software such as BitPim does correctly sync with the phone, the phone allocates new serial numbers that overlap those of entries already on the phone. You then end up with multiple entries with the same serial number.

When reading from the phone, BitPim will detect when entries have the same serial number, list which ones they are and refuse to read the phonebook into BitPim since the data on your phone is corrupt.

In order to recover you must erase the phonebook on the phone using the phone menus to do so. You can do this by doing Settings & Tools, System, Security, (your lock code is the last 4 digits of your phone number by default), Erase Contacts.

You will want to make sure you have written down or have all your contacts information in BitPim or some other program. You can also get some data from your phone. When BitPim lists entries with duplicate serial numbers, delete all but one of the entries. Repeat this until the phoneback can be successfully read and then reenter the entries you erased into BitPim. Erase the phonebook on the phone and then sync from BitPim.

Why not make BitPim fix the corrupted data?

You are welcome to contribute code that does so. It was other programs that corrupted the data in the first place so they really should be the ones fixing this.

I can see various files on my phone and can hack things that way

That is exactly likely what the programs that corrupted things did in the first place. This is why BitPim always tries to use the correct protocol as intended by the handset manufacturer since that will do all the necessary updates and tracking of relevant files and information for that phone. We only directly manipulate the phone internals when there is no other way provided by the manufacturer, and are very careful when we do so. The integrity of the data on the phone is more important to us than only getting a tickbox for a particular model in order to sell the program.

#include "pageend.h" bitpim-1.0.7+dfsg1/help/cable-sanyo4900-usb2.jpg0000644001616600161660000012325107764505651017207 0ustar amuamuÿØÿàJFIFÿþXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 90, Smoothing = 0 ÿÛC     ÿÛC   ÿÀÑ["ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?éòs:óM“.~ö1ÅHFcëëHW/ÏN ÿZ ¼‡NIF,àœgÚn„ ®I„–#sÒœ±–öãé@hÀúŠW±FXŸ½š¶ŠAŸ­D¥‚“€½YA¹Td šIýï—åÏåSXòM1 FA*Ô0­–Á<¢œ©ÇjBœç<ý=iËàà g­<ð?jLmRpM=¹-žOëL‘¼ÁÇÞ›îGYwuô&Ÿ .zñŒóB.Í }iî½1Ó±¦OR0¡NÒÜ‘Ó54}G^*8ò\dqëS°'§&ÜCziÍóG~‡Ò›ŒðAǦ)Äðè òÓrc§z#xÏI§‚I§Ž”Ñ«~&n±sžÃ9§Æ>N¹ïšl£ Æ8ôèrÀgŠn£œû³ÇçRÞ»‡\f™"öç§!ùG Ð?R Kqœc‚*aÈÀçhû¤Ç|ÓˆœcLÐ DÇçNpX\c|¶3Èæ¥ÝÆìò U9·é SéIŒ7$sÚ‡9\Ÿ¥{ŽWÌg?•1‰f>§¿lR©=8¥òŽ ÈÆÜŒŠ®+),ØëÖ›±g @å³Ú¤C–* hÇn0zçÚ‚Š.€—§`jœç=}+NX¶åxâª"fBàv -vW(\ݺý(9ÝÐãÚ¥m~cšŒnqܘ Dr®F§J`/<žõ$‹ÈÍsŒë@–åY† {w©27g¸ëô©$m¤÷úŠb©9ô4ÌÜƒŽ´H ‚3jLàœâœX0<ç½Ô…†sü©¬˜ä-J˜%°i]BÆ <ö :…Ï L ‰cÛ½H‡§AÛ4ÙŽÞ´v‡¯½1Ðîà6=ºT‚C•Çht%OÊ€²0™FáÆžB÷èJŒ¿ ôì)ã%°iŠ×Ð’ B`ýî”ð r8ïLv<ñHìwƒŒrh \t‡öŸ®)˜ÀÁ“ÍL@Ûœ~"‚»Iʃ“šê@©•Á9ÉÎzS¶ª)ŽôldtëOxòœ’F(ÃV!ÁÉ`9敇Ê1È¥¡ÏLb˜Ã ËŽ´ädà à±ëMYAç¡=é¤ðSμ?ã/í1ÂOÅ¢E¢ ZaM3µÇ–6pçŒþ5-ØÎRäG·9Î?ídø™m·¨ý´°¶û<žf×*ÛqÎäq^GàÿÚïÁ^#ž(oEÞ…9ùqv¡“ðe=+­ø«ã (>\ßYÝÅwovV(æÃ),z{Ö§œNqhù*=E4›Í L­—Ùbf%¼°HgßükÍg ±©vù󾂵w>;Ôµ„–AƒÉu(–FŒö£ÜŸÒ¸[Û“zÁ°´AŒ ´'©XazçÐפx7ão<(ñµ¶»su#ÖýŒñ‘éódÀןÛ@å†1ŽäÔ·’„EU““ŠM&KIê}{à?ÚÓÃÚüK‰ørõp<à­-¼žû”¿ˆ¯gÑõÛ ~Î;­:úÞþÕùY­¥¤väüÎó3ÑqǧZØð¿Œ5ŸêÞèšÆŸ:0cå7Èÿï'Ýaõ6kaÞIw?K"aîM8uÏoS_/x3öÅ–;U&мüu»ÓXrcb?C^ÿà¯èž?Òc¿ÑoRæ2>hIÛ$gÑò)ów.5.µÜèãù½Àô¤FÚäc…¥2é±¶óŒr=8«-vÀ¹Á?FÀdõn)ìå¹÷ œ{wô¤=,8 žœð*Üe8ÏLdž•_8`À9¥1냊NHSòà/qþŽY6q’=i‚BÒsù¤rÞcnð=¨ï ä‘ØtϽZ‰ò tlñQD…(çÓŠ|Kóó×±Çjh[L  TņÞ3õ¨cϵ9A= ÷Ï4¬p9ëéN(xõÏ~)p«ÈÔ£…ÉüèK®AÅ #¹æ•†GzPzr( Æ+†¦*vb¡Æ×Î3Ÿz±ƒÈúqH»‘&‘ÉÏ•0 mÀÃò©pF?•0³Ù#æÈ?/šAÁÆ íŠ~Ð=úÔÕaŒæ^䊸?Ò’>Ã<ääfŸã§'ŒSŠFç4•ÕÄu G|Ò)ÁÁïOWÞ=1Àæš+c“Çs@t\‚;Žƒ4±áÉã4Œ™éÍ,YÎ7vëúP ØRÀv ¾\úÿZÜnúö¡cŽýá=Æsš›a:ku=BðzÔåNß”ñõ e|ç§p*Im9÷¦Œy‡ XúšxPÑŽpi_¹ÊöNO¦jMÅŠ€:œ}}©¨6»t=óN8 Ÿ_ze_ª&´T2þð…Q“øÖª•?{ÅbDIbIÀ=*Äwf6’YHíÚ“Í)-ó‚½ S1lvb)w) w:Ô  wuÍî;ö(MÞøÅWEØÄ‡šÒxŽßSíUŒŽsŒ~TØ«'ò¨•Žsކ¬MÊœ§µCÔçÞ˜´!ϯëJXc‘ü©Ì™ç4c ¸Ž¿_Z¥È¦$¨$ã&œŠv’sÐÔŒ„0>´/ʸê:s@´"Xʱÿ s ËØ sžù¦HÀáHôé@õ±ƒøÿœR•¶~”ò6’3Å#œœbì#.zã RˆÁqøÒÞŸ³w;€ ”ÎYKç‚:qš6AÇ5·'<qOŽ@$Ç'Öí¡!pqÇáBHN9úýiÿ|c‘!ÆpzúÓ ]"ÀÆçÖ£.T¯qŸÊœ`d×¥B[9ÏŒPìHÜGqMˆ‡^AÙIÀÉ< z"`SŒí=ÿ* »\ÆëÏâ0çƒÒƒìwÇ™syrëµ¼m,ŒÇ5ù£ñOÆ“øëÇz®­+dM.áAÂÀ_iþÖ~!máähJË}zQ@z‘ƒ=iùÚ%ª<~ìŒR…ùTŽàŸZL­òÐ}ir ‘ÐÔk”sN_›ž:ŠÚŠƒw_ZzçðiGeàûSø9ãÐ'د/ 3Üàf¦· "›*–uõ4øSiöêh 4 Q€AÃ{T«Œ çÖ -ÏnæœÊ2¥úŠ}é’pWŠzPÖ‘þeÐŒŠm…ŒsÁȧ3àìŒu¦Æ£$×·Ö•þR§ƒÞl8(Á¯¥0+ƒ÷EJdéŽh3ž¤ó@˜¹Â|§¨Í(ÛŒRàìàö"›g{zÐ1dPª=i½êFœŠjÇ´`}û(}ª¶©­YhßêWpØÙÀ…¥žá‚¢rjÍÝÜ}Œ÷wR¬6öñ´ÒÈü* $ŸÀ×çßíCûCÃñnöÓNÑRX¼=`ÆDy”£\ÉÓy^À íÔŸ¤ß¡œ¥g¦å¯Œ¿µˆ¼QâÙãðÞ©q¦xn Ã8î1Õݾö þ˜Å{Ïüw¬è–öÚ”Ç͉\üá°p29Ïzüûi òNsÖ½ÿögñȆò] åÎ ñÜGåü« ²LÎ))^ÇÙ~ñ¥ÑÔílõ&Y ¸%à€ ¿sÏã^åà`W†ª¥ý«Ænà0Àr§±úŽ+Ö¼¬gÃÖÏ++]D¾DøìëÁüúþ5TåÑ (µcT Œç>ô€ î-R• œ*!•óŸJÜH’)6ܧœUا&TãéYÙÉçð§¯`ã2Û”¯¯z†p x¨£Ÿ ‚FO)“ÉòŸ›>¾ÝéÈ$䜞µ8Éú‘Nãœ{g½C#ŒÓ Ô`‰ëŽô‚2)ã FË Žs@ía¡~QAœÓHÏ¿?•H@…éF0:Ð "- :Œbc§µ=OcÁ4ƒ Ç9 mÇ»“Q€9ì3NQמúÔmäãZ`\qƒNó6ñ’i£< Œœ¿çšz’Æ1ô =T|ËÓdñRÄ2ëLN~÷µIF@ç­rdP>”’ü¤<žÇ¥69~b¤äû n¦O›%±Ó¦*¼¹,N9ãüýjt!ºõúRÎ~îh §j.qŒdf¤¶@pã¯JeÄ^aÀÈãÓùÓÐìsƒÁâï¨çÊe½=ª#7}§~U/,x{ç> ø’xYÕ®$’µ¶r$‰:±Rë‚G›±|±»>!ý£~.ß|Añ-Þž’ãDÓç1[ÂßaÒ1îN?^$Þ¶5‹Ç¹Igº-5ÜòNXœ± ÆR œSJ*ÈÂ*ÊÃÆ=yô§6Cc΢ûÒõ9&¨¢V;‰sÓŠa*¿µ#à)PyïÜR.;¦høÜx¤`Aã·zT`Gìpsí@K‰"ÆN}hé7P%ÔeÎÓ‘’~µ˜y^zúÓY0~_­>”Ðí-eÒ­¡’î ³Ÿ>fßÀP:c×ñþî?<% ÛÜx±Ž^ý|‹8ñÄVÈÄõb3ùWÁZMíÊ$žKâ%]ΙÀ¯°¾ ~Ò~‡ÃV‰­Ûì°$ p€¼m´u`ïÖ¡èîËöœˆúNÔäž޵EׯQ¦ë~±¦Åq¦Þ[ß@ÿ7o u<ð2?•XfwmäsŠ«ßRï}J‘’¼ŽHä’s‘Ž:sìPü€zÓC+·åÍ–¨hE$7SéR*tïïPí"FŽx⥃Ç`( IˆÎìóšèpIçŠýiÞ^0@àô” .äj¿6s;Óü­àŽÄSÂã·¾}h?/9ã;‚¦W+ø§Œ¸ãŽ:T*'µIp{Ð4õ&x~})ʾX;{T_˜N )ÉÏ8Éí@6(ê¼`ŽÆž£ƒƒHp:‘NQÏõ ¯N‡ÖéÐŒP?Q˜;Î8§Ç¹ A'=;SO\zÇzzüÜcéÖ€¸ `“ìiJe=éIÀ8m4Œœc=ñH:)O\óΟòóÀÏҢ݆)êÀã×Ðu¦-É6dþ”ª Jhày$u"œA 5Ÿ›¨¡# ¤…$Ÿ¥ ò€ØÁ÷¥ÏÞÎ:óý(I-êMG<émÍ+ªEîwc€ u$þ¢¾¾¶Ó­'»ºš;kkt2K4­µ@É$ž€WÂ?µ?í¿u8´/ _Ì<;jšH‰U¾“ÔŽèAÐò}))ÛN¥Ú+ö¢¾ñÔš·†4ŽÛÃi1î¢$É|«ÁÉì„öGÖ¾q¹Ú6eÛ9@:T-†W9ê3šìùOáBFIX¦X+ÔÖσ¼CqáŸYê0žÎßQÜ~U”ñ€DŒ¿&:sȲÀ[hzv¡¤Õ˜}øÄ‘ø‡D¶¾€å&PGzî¼­K£xš(GÏg©0ŽLÿË9@ùX}pŸjù/öfñ”pGu£]N¨ÅÄ££úWÒ ¾âÎUŠC˜ÝÊ0åOàpk‘7c¡{êÇÐ<)ãâ¢uc9°<â´ñNÎvßÃû«¸‰å$Ô{ß|î'±•ÖÂúXB'¦1Å‚^ô¾F(Î f˜\BÙ''t;oUÏÓ¥7óNtè:Ò7£œR¶9ý3HpõûSÐ’.zÌÓ‰áqÁñëAù³œzô¤äã?•!j7#žßçü) Çv¥8²sQí<þtÀyääã?Î…ÂŒwy#Ò®NOUÇ~”Ñã'¥näñH ’­ÈàõÇ&Œc½ J Œ÷ü(îrŠ2¸Æ}A©™=óÏ4ÈÈÜ>P@<û {äº:ri‡¨ð ¨ü¿aŠ‘@QÀúP€ŒŸ¥µÉac8Á=éì®L}ªèù$H®wóÏ]*A>¸â‘@$9,eKsƒJƒ¨aÆq@ﮣ8 §¯JøsöÀñ½ö±ñm ™¢Ó4uMªáäd ’?àX¯¶õKÈ4ûYî®$X ‰KÉ!8 É?¥~j|jø€ÿ> jÚ¢œZ4Å-“b5Tœu$ Ô=]Œ*4ä£ó8{ËÆ¹ØáÍV9#8ç4¤çßÚŒãÞ¬`qøÐ}áL?Jlt Œú P¤d‚ ô¡S8&€zzP @{Ž 8?MÔ€qŸÒšÝN9ç© d«!\ã¡ïQ»ÆKp)Tþ~µ>Ÿ›{;@`KŸáœÐ#rïFGÓì’¼Ù¯T<˜#äÇQùŸÒ¯ÙDQR07mÀÅQŠèꚤ×0Šƽ€í[VLʬ9íÁÇáHjÇÓ²m–£ý¥¨Î’lÒü²C¼02np;w¯¥æC»k`ÅyìÕàÿøG¼&÷óÃäÝj'Ì$®`á3úŸÆ½}”rÄœþ”ZÆöåv+Io¹OjbBG˜úÕ’¼’qžàÔmòŸ”q@ž„(åýõ,k¸Á÷§rا,f7ƒŠ’2K`¡ î×­¯'ð ‚H‚iTdàéŸJbb®’:pzô§Fw v¤Ø àŒdS•@+Ï­&€yãÞ—«sŠ`#¿Lt©×ks@í¨ˆ¸Û€GJqàäôëF:ñÅ.8ÿ>Ô„‡~ôò¸ÁñL0)êû~” j0§z\nÀ>˜4î¸þ´»F§µ0zh"(Ûè( “Ç^œÓ”íaøSTqÈϵ B'2xã=) éÇj@Ø'4ÑQÀñLihIžIÎ:ÒçQÏ4Ô^¹™§ÁëÅØx$€OëJÜ1Æ(ÇBO•~eÇCïž)óí©â¿é>·ÒlcHt]C‹¹×>cxÐ)ê}kዃå\óŽ}ëõã¯âñßÃ=jÀÀ³]¤&kbG+"ò1ùb¿0u›I-.$ŠDex˜©V"ªÝQ3в’@Áè1ïUœåN06úŠ) ˜àtɧ†)/cÚ‘‰+¼·VqC’æ"B'±9ÀüI¤hÒ0ctŸÆÞ‡ÐSI’'&6+ÏQL Ž´ ÑðÞ»?†õ›kË|"pÃ5÷'ƒÓâÒ¬– ­ãc†˜±Æz‚8¬*Bîñ*2ågܾ × ðߌ#Üqm¬nç$Ê2‡>ã ÿÀkÚd{WçM·í}}“yc/ ²D쥫 çpk鯇¿µ·„5-ÂÛZ¸»²Ô%IæhwFÌ-xúw¥ÇâQ^ç½Ö™#cޝ¥exwÅšWЬa»Òï »‰Æ@Ž@Y~ tõükW;¸=Mlšjèµ$õB`Óž¹§»‘é@cÆzR 99PüÄê0H¥Ûž}¨ÈÚÏÔÒ¸äöjam¬ã‘ÅDÒŒŒ¼qRÊ Œõ÷ªÁ<¶àq‘õ¤4NÇå8äži ÈàñÔSC|¡¶ô4#ä’M’cqãÖ8\vÇJs>¦1úÒ<ޏ ´FÙ禠 ÜSœcÁ¨¦ÁÀü© Âgô§áO'ƒLÆ×©7(ãh>ù¦MìrCŒõç’)B`AÈïLy<²$Š–O qžŸZ`‰¼vïM \d }{T`2_^µ2Æ@Á=:ÂúúÒ¨ÈÀç4ÜàLt4,ð£#¶M-€À8<û •\“ÁÎ>• ‚1ó cÖ†]Ùlž <öÅñÓxcáÔ:\m¸Õæ1œDiË~ghüëàÉy$õ5íßµŽÛÅŸf²ŽPö:Pû<@cº±üÿ•xa‚jWs™>k˸ÐÁ¦““ÿ×¥'ß4c$çUIr)êÖ¦rÙæŠHÿ&”œžÜúSóähÝ–ç¥Ìq“Ïj°zRtRÜc¥&ÞÎO¥9XñùUé‚3oÉØwöü(Ñà„‰e›$D»€ìO`ëK§„¹ÔQ®^D‡~éd‰wºŽ¤ÆN3Þ—âÑ.m.íEÀ’4¸O1pvü¹ÆEzWÃ_\ø›Äºvñ¿(ùÜídQóû€;W[jSEvgvk¥Ç–„€Ttù{}+Þ¿f ]x‹Ç–º€Žh¬,PÜ4ÛHV~Š™ÆSŸ¥#JQ»>аAå²Ä9êj}áNLäŸÎ¡‰Y““špò~nœÓ+[‡˜ #§”¸<ç§"(L€7f“h^¹¤>¢d¢äù¤ÉóG§¸°ÿõR ‚ üO½¸Ö ‘ÎGãJP2qÁ÷¨‰ÀÁÏ>½éŠÄ¡ƒý}¨ÈLpzÿ*b÷ÀÚ:`ÓÕn½ûP2@‡içŒÒªðHëJr«ŒŒu昒ÐqëŠBvسŒv’ié åÒ¡æEN§#éAbä¨ésJŸ8ã¥!ÏnžÔGG­ ê<ŒtÅ|‘ЃF=ø÷¥URÔÉÖä¡@\žô0Ú1žÔæÏΌ燭iÔ‹pÁÀéÅ9P€1×ÔR…ÉúñC¾ƒœÐ$€)<úóF ýßz°G¡¥`pOJC½œŽɧ§ÌÁ¤,1ÓŸZ‘{÷¦É]( ÀS×’¾¦›žÇ§ZSÓ'テ1Ü~uúÍžþ•å´WÂø~%øæ5ˆÉ¨ÙšÜ©ä2G¾j—b£ï{­Ÿ™Ú”PÉvël²,<W ·¶qÆj9q¹S;ŠŒ3Sê&}>êKwC±nÎåÆ=A§ ¯Å/S•«=I—ž„uÇ¥"F$c¼à/<ÒA™§Ü>ïrxâ¡¿¿ßû¸ð±2;Ð!—Wa¾HÉõ9îj´o†ã¥DÇszRŽ)½§\†ã\ÖÕ½Ã#©+“µ¸ÚàçÒ·í¦ÜЧPh×>|M¾ðˆà¾¶fdû³Cœ S¸¯¿¼+â[oèZ½‘&Þê!"ƒÔ{¡¯ËÝ>çËt`çð=+ìoÙ+â47zlÞ¹•VHÙ§µ ~ò“ó(ú78÷¬_»+÷ìî}$3œ`ÒÈ0zvÏ5l â7’sÇéZ›è<6N1‘ž4îWàb›ÏLçëI4€:õú š–89ÀÏÝ¥Øv®20~ñ¡q…?­=Oï6ž1þP˜ÎîOLÔQ©VPGcëVŽ8ç4ÆLc¦z‵˜®¡“ž=©±È^xééJê c·j0£±š{ç$qÀ¥Qò’ÆiXsȧ&9Éü}¨ ±’©pF8¨PÁ@‘ô¥`‚NJVÝúѨZû’‚ÿ|nÇJ´„!9Ç|T.ÅU@^p*8¦2’9ãÒ˜¶Ð²A#‘iÀ0O$p:Œ²‘ÈëÒ”Fq×”-lá»ryÍ3FHävÖg8ìOõ§leQŽ™Îiˆ‰D‡©¬ŸkkáÏ jÚ¤§h´µ’ce8ýq[,p}—Œ×‘~Ôþ"OüÕ£V 5ù[TÄ‚Çò­&Lì¢Ï€u»öÔõ;›© ;M#9'©$泈½M!õÎ*A< úS3Jʃ@ëNaŽ;RcéÞ†sùÒ Ž=i¤‘žE)õÍ;< ~tz~&š9§tÎí§ uéLßœ™qš¼‡Mqýì„•Š?­kh¶Z|Ú©5ÕñŽë÷qÙÚ#|ÓH\d‘ŒmU O¹Jê×÷Q –ẋ¯rqú ƒE6°j.¤x°ØûÐ C ¶Ð.ÌÉUÊ• 0üú×èGÁ ÜøGáΧݴßiTó$YÙXÆÌwIÉ8Á5ñ†´Ÿx‚ÇGÓ\Os|à !ù¼´ÈËœtÞ¿B´--4}"ÊÉ¥[XR#òÌ“ïÅ#h¦£~æ€F½8ô °až=€õ¥x~RqÐTB1»¦qŠÈ™´Ó×½O»Ç¡¨L¤àwÎqþÏ4ì£è½'ß’ÙàÐÒ^Üö¦•R8&ñœðA4µ' „À¨Æï §¬à±QøÓÜoêz ,2"Û8<çõ©×ñȤ’>Ž1ÓÒœ €zóLè5Ç?¨‘prßZ•Žþß^:S%»ph Ô¹ ó‚3‘R«ü§ŒTq)Ù‚9§8ÛŽGéHC‘‡ON:Sñ¸œ}=i ÃÒžŽyéHiØ)\{ÒœzW“Ï4âû{sÒ˜¬„ð:S·`xZ†ÝïŽ*\…ÐÐ+ZâƒÇnÔ¤‚$ñêiñœ÷ÿ8§@À#ék è¯§Zr®2 ô¦9<~‘Y™‰Æ0y8¦.¢íÈÁ'ê7ëÝ?Sss 2~ðüó^0´§s’Àu$õúGûK|2ƒâ'ÃË×U ¦Ä÷0IŽÁI ŸN+ó^öQyJÛ€êM7©5-{¢+Û„bRµ;ç½g³nÈ=i]‹qÚü£úÐd&8£ ÿ ==(n˜þTäoÌÖæ›8hÕ{JÀRAÅ^³”ÆÀòAàúP#¨‚@±8_jí|âKŸê¶7önËuk*ʘ<uˆâ¸dÈ_qZÚtÆ2¤zŠ–®ƒÈý<🈠ñN‡cªY°0ÝD²)î Çá[g,™êkåÏÙKâ{-Éðá9Oc#7CüIÏn⾤Q‘Œ¿L[k]˦ï§b8~VlàûbŸ*e‡rh †=~´â¤ŒãŽ•f£¢û¹èi²µ Îî3ïD;‡ ?>´öO|ã¶( QžÔÒ¬rÜZ•AtÆzi£q ‘À94 ì/ÓS `mÉ9ëÅ;8$7zaääÇÒ€A"~H¹-Ç8§³aOJA‚ ô m!Œ3×#¯¿jg•!é‚=ÍNH sP´…NîÇ~( ô9S¹ó»·µ$j:`…êG­H9'=) d'\g®:Ð+ˆS Ià”ý£h^àu¦ÆÌc¹ÿôåV'dvþtÄõ>B‹ÜR™²zdc¨¤x±ë“éKeXz  ‡; Þ¾3ý´¼]ö¿éú 3oKH¼ÙP·¯á_hË…_­~d|añø§â.¿~çpk§TöPÄÐTµvc;Ý#†rbÝ*8ÉoéO‘ œÅmP=P†1çÖšxãùÓ˜çü)§æ `àúÑŒóNìI£¯J 'ëJO\PN&yþ´å`O?^Òm’ëQ…$!b ¾F'€£“úVx1­t­f4­) +——ÁN:¼({wl~T$sÿiß\^2Vl"ÀQÀ•hÚXExÇÍäsUí¡@ªzÏÔxoC›VÔ¬4Û|‰îæHQ‚ç ÌqíœÒ›ÑQþÉÞû„/µn±‹ÙöÂûYqÁëŒæ½ànUárzËð§‡íü+¡XiVÿê-!XÔ‘ÉÀäþ<þuµ!ôèAä~TÍÛ×B1;c“Ÿ¥W•²x9>”ùU㎾”ÄŒœŒõ…æ0p2sœR ÈCçlÒ(;3Æ~•#(àÏ­5eÛÜšcm‰ž¹ü©X üêĹqÞ¥n3ÆFi n|GûbüsÔ¯5ûi3Mc§Ù—ï(×R„÷@Næ¾H˜ǡ¯«?mO†o¡x¹åîOZH#i4ÈÒÂà÷xñR*àŽ¡}*0¹È§~¸©€ÛÉ=}é”¶ŒãZL`çïHìT LÝØr}"€FOµ94¯k7‘dËœ®›zä)Å~]^J×K#ÎìI'Üó_ª—vÉk4(h¥£‘XpA5ù»ñsáv­ð»Å:}üÛ;—µºPLsFO_QØÒ1jîçW‚z{Tl1ÔT(ÝÈüé®À©Êàžàô¦"3×ô DÌ›ö6Àq»·çOEmÇa Ÿóš`|’8 ÐÔ‚½*NÜÐ18©éFQùgŸ~\ãt«Úv6­}¬ ¾Y“øÐÍ NR²ê~Ík†*çVÏ=}ǦjýŒrÞO%õÞdšSž˜ÿõ})’*_=µœ6–`‚äc{“–oä²ŠÕØITŒÇš@IiÚ%#æ!zã¦}+Ý?fÉâ.³,mýŸ¤ ÁÏ Ó‘…ýÑÏå^A¥éóM=µ•¬F{»‰(£]ÉÀ¯¿~x6øGLÑáUÍ´cÎp1æHGÌ߉¦k’ægS ¹ü³I÷†O©Å=ÆÐÍF @={g¥ ÙØd¤àc 5[qÀƒÓŠ–pJã*&£ÆrÇ>”ú Nÿ\ûÓ¢bA,M2"SnN:Õ„|.zž´Tî"1\dp¾”õ,ë’ß—ZÂíÆ; Òzuôì(ûŠ$ÛÎp;€jhÂÌ<ž˜÷¨dRËÀüèDËņīìã>UŽ3íZštÉ,×·-ºyÉf'’Ië@YÛ-Œ猓ŽsZzm»?ï¤ÎXáAôõªqD÷W+ò8.{®çÂÞ¿ñž½e¢iø[‹·Û½Žh9v·P1œþ\T›°ÝÀõ¨n|œuìzSÜnÈä;JÔèôç<ðE=›r2EíëÎ{вÙÚ@8 v!]Äc$Ÿþµ›i=EI|ç×?•)MÇ9ã­1!±‹Ôä~TÆ|ÿ©pOLÿ!dý(…]¸#’øS2W…J‘H4Ñ‚})tŽãäÔmQÏ^ôŽ<Îz{ÒŸ¿84èXu àqRDøã=iˆ@ŒzzÔÑp¿wza}‡c#ž‡®i±Œš“¡ì;äô¦I½(Äd`AíÒ•F7sÈíK¸œ9Î8¬ïÞϦxsR¼Š–h ’Hãw ;ô¤&ú£À¾,þÕ÷_ |au¤Ûx~×R··mŽÏrÑÉœ à€@ëé_.ügø‰¢üLñ7öÞ• I¡ÜO7‚I„žl½Û€¶{ûW;â­R]O\½º¹•®¥¸•¤yXœ’Mc¥±”‘ËžÔ’9Òkr‡åfùPœn­ûéíììbµ…£¸^XÈìŸÆ«[XC¼†òW‚uæ$dʱ÷=1U\¤·#z¨Êð QEöÊØ«ºvƒw¨ÊR õF køkÁú¯Šonaдë[ìéæËöhË2¯®:â·­ü)«Kuk¢.wýÜËŠHÇB=OéAj-쌫_ÜÆÛî›ý_T^•nê/² Q–$…U95õåï쩤]øfÊÞÓP¼ÒõH­Ñd•%g‰¤ 7„ôÎzW+¥þËž(Ó¦òÅþ€êN>Ó=»´‡õ ÑA>§icZ@e”aÛæsØJú—öcøc.Ÿf)ÙÊãâ•ÁÆhì)ý¢~Eñ?áõÌcR± sjÀ}ãŽS>ø¥~aß[›k‡Fᕈ#Ð×ì‹0xÀçù·ûU|*›À¯gŠº^£#\ÛJÊw²þôúUn‚Kšt<+=¿2GJR¹ÃÚ‘Ü•…š8Ûpê¹4Ÿ×½sžÔ=¹$œuµcqæF¹;ŠÏÐáûUúÆbÁ°=xÍO6òË …\ü¤P#Cín×xCÆWžÕlµkFÛsc u\ò+ˆ,qÎ3W´† tŽ8éÒ¥« jú©|]<#¦ëPÔ`²ŽÌ>ðüÅu,™À<ó_%þþ8ótÍ[Ã3ÈÅàcq ±Î 0}h’#ÔAégи]!±©^1íO/€N9ÅGÉ$cŒâœGÊp2qZ Tž>cëR}áŽøÉüûTY_1†z~´ðÄŽ˜ÁôüèAѱL’9ì8ç“óg¥06ãÉÁ4Éx‘HäPU®J[ è}ª6+ôÈËËgÐN%rsü¨D=v8ó N0=èØ:ô$r)¡÷¹ô©å{Ð7°í¥PÿwÒ¦‰@QÜcëL@Û½zŽƒ¶)‚Ô—q9äÓšz6T{zÔ^_ÊI&”e—ìñKŒ…ëŽõ€œ:¶ìö®ºÕ4ÿ IÅÓ麼d‰Z=É0ÇÝcŽ>¹ôâ…¡+Í™zìæÞf¶Y ¼…Nâ íqë†äV)m°äö°*å•­¾£tèζêžXçüªH4y.ošÚÖuQ¸­´fCŽü(4ƵÐè¾øƒPðn½g®iwOi=£onNɺ2ÿ=0Jû»àçÄH>,øU5©t¨ìï"™ q·#pîFëŽGÒ¾Ðt 5ýWKÐ-cµÞÜ$EBœ¨Î9¯á_¡¾ ð‡‚¼9i¥iñ,VöË·+ÕÏv'Ôâƒx®TäÍÁaòŒg¾)Œ6O>¸ïS +Îzv¥ÚÐÐA1@ŒŒäš¶€*¨äÀªÎ¼Œ ÌÔŠÃ` cÔR)jH r1ÒžíÐã*ª®||lYH''µÜ¤I€8ô¦K¸¿$î')¥ð~aœf…b[ƒ‘ך`…Pc’½ ’¹$óȧ+Ëc?¥9#Úr{äÒ¸‘òô£nÕ?…(ÉÛõæžêJ÷ ”™pqSÁÆFqÏøÓ ã=;ŠH‡˜I$é@Ñ4j;äæžådõ&¢ €Ã?1dÞWiôBâÈ ÷¥V98Ž*”ØÏNµ$G1ñ‘@‰”“Ç;ÒœààcéH‡~9§àlô ]qdç¿zz’{`ÿ*@AàSÑ>€F(+´ç'>ƤǞi6àäp:qÅ ½ÄÈ*ÃÓž´Å¼$žÿ€§®qƒHp9É4ǰü™È©¨¤:uÎ)ç8ÐyçÆ1@¯¥…ä·#'=jE^3œR8ÔèŽG¿ S\+džyâvùG¯JHRÙô¥ ïšnÓ…çœç¥Z“(ÝüªCÎ3ÓÔTq¨}z⟸é‘ë@´[‹*dm"¼kö¨øl~ ü*¼ò¾£¦¶A·«>uü‰?Q^Ì­×¢š5’2¬2¤`ƒÐçµ FZzÜür¼€Bäl*G<óU˜’;ã½{ßío𶇿Œº|N™©Gö˜B•NHeCüÅx<øŒ¸õªzJ<®Ä>a\ª±ð}ê|~F€Õˆ¯´zTƒ ÿQžj9c1šHA'ùçÀ´I+†â¡g(ÿ60Rq@«ÿ3ØÓ[ø#Ž´‰µÊº¦­o¡éWWײˆí­É#žÊ+ãÚGXøsñM—_Òõ+ËB€d¶câä  Àt9íŠúö•’þ…ZÓÕ˜3(Ÿ`Éÿúñ_œóJòÌÀ· yñK[™6ÛÕO˜ ¸_¯JÕ¿ÕX¶ó@ÜÞ ƒMfŠM½{Æj´‘DUS,²ón#ªÈ`Y¤Ä_1Ï :šê|¨ÝxkR‡X±»–ÂîÙ·,©ÁìAàƒÓ…˜DðÆ ÜI ÈHT³~Cšétm ï]Ô¬4k+;ƒqq(VÌlIÇLväæ‚â›z{|ñŒü#iâ 4hì/I1;”;¬§Ð× `”É8ÅcøK@ƒÂþ°Ò,%µœ+ñŒàrO©<šÜ…xbH»ÐlÝØÇÜ=±Ò£ó68 X Ô+Ýp¸çé[!†9ÑÜ:úæ˜/"D;SOPÁŠ&r6õÅ*'ñ=i ͹xü3J¨6·=:zŠ1´ޏ÷枤qÈæ2$9ã$“ëO²ñÔŽýé¾`/Œ€Tt§‡,¹aŸÃšl`¦§=zSÕ·t÷Å€Sž”â–ã¯AL¸Ö9Fè öïL`ÛO1à“N*0qÛ“NbÅsÇ•©»¹ž§Ðu§dðOB1ÍFÍûÌÒœrr3Æ9 ö¨`{ãiN]A~4‹ÛÔšwEëƒHwîD$á¸#SÄe€%CRqP²±Áè3š”6ÐIú ¡nqѮ܎9ô§®s˜¬ŒúÔŒiã=q@¬ÅIw š®[p=ºÖ«…ÇËÉ=ýªÂØN¿Öí ¡Cgž”1Žþ´¡GÔu¥Ú¦~´ r †X¢w-AÉn˜ç9¯Ì?‰–ïŽõ‹.Þ;KinähÒ%Ú n88íë_u~Ò‡Ãÿ\y$ í@5¼\ýÑ¿.?üüÒb{Ëï3Ôäÿ::˜¹sIù¹ºe¨ŽxÃÂãå‘?§øÖQ̲dç×½lj·_iŸÊL2犿¥E¦iöï%©K·!q¿!ô¦jW>Ö-µ‹IÍÅ©óDPØ=:¹éø×èÁ_Š^³×îl£µ½ÞðMµ 댲ûƾPð·ì¿ãŸÜXÇykm¤é7e{’û˜!¯sÏL×ÙÞðŸÃÿ Yh:~^ÞÕ1æ7ØòXãÔæ•ŽŽWïno©ÚÄc·çK§œc“Å7Ì$džœÔ¹\€w {S'v5—h$ãŠrÈú€S°ïp;b(€q×îÄH2éSŽÉÁ÷ïMmlM8·7ËŽzt .Ъ¥T‘ÊÓÕ8ÿlNNFG4¢Aù´‚Ú\ã¯×œTaÂü¸ãùÔ„î€G#DH'9ÇJêBªZ\‚3ŒqS¡ç€Í" CÁëÔЀŒxúõ D†x8¤Võü1AÁŒçéLCrrìhR =F3»ôÏ43`°'€xâ…>”ôDrDZ\öëHŒ¶3º§Pcb1ÓƒMÃ;aˆþ”TBÊAïéA!@SÜàûQ¹•‚Üf–@×­wê4Ø\wü©cMŠ:¥ ¤ªöúSت ã bÜ3“¸ò{q@S¿¯ä s>告r õy ÃóG\C`%À=sNˆ|£>”‹Ýnyc¾)²e3ÀïRg L•_z¾âÆ1Î9æžx8èZhl;v¤ä8;³ëLKÈ•X®~”nܹ=>”Ð0søÓ!zq@ßqG݃99ÈØ—Á>¤Š”Ÿ—± V e#¦}ª6P ÷Í:,¤ûâ•Æ[8ãÿ¯AwºÐ1úSUÈ­ ÜuŽ3K´’x —f<¸Qý G’H w§HÞM ÎÎyúP?"»îWÀÆ{óX¾<ðf›ñÃÚ­’Îê=¥€ãnξààÖó¢³ôƒæfÏ4m¨îït~m|fý˜üCðºâK„xµM!ØùW0‚¬ûJz¦zW‰Kˆ#‘Æ=ëö \Ð,¼K§Éa Ïo ÚT€GJüÉý¡>ÿ´ø¬iQûÿ6ÙˆÆca¸~YÇáU¾¤Ê)«£ËXä÷ÔÒr9§04Þœ:F#O<Ð?ZRÏõ  q¥ÜA¥Ûê,„@îQ[ÔŠ·ã=ºÕ6ÕæºÓílB-à$¢À$äÕ˜• ¬ü¨`]ã’?­w™®[çɪӟ³ØF8ÜògïùÔÉ]X-sõ_@Ö­¼E£Ùêvry–×1‰Vêrõó¿ìoâ‰õ¿†rY\°&ÆèÅI$¡PØýkèh¹Š¦qÔÖ7kPfËr?*VÎï›"37j]Ÿ(`Õ}Èã•r§0 qéU° øÇãV¨<žÇÚ½ÄÈfÓØ.~èü*p2H8ÅK€Ü–Á4ögçnì€p)ð¾W§õ¡°ÈqN)‹ ‰ûÜò=(ÉŽŽ3DX ÉíÒ–% qÏ ,3éÖ™#÷=óŠŽFu>”…ö¾1ŒÖ/ŠüA†|7«MÂZÂÒãè8ýqH–Õ›>9ý´<`šÇì´«y·Ç§Ûì‘AàHÍ“øãh¯ ·XélÀaÜ`qÒãOOâŸßj±y'•œœúž•Jîrʱàa@-ŒRÓRÎn./÷Ë MüÌ–ǹö®ÿៅåñßÅ-K‚ß}¬3¤’¢¯Ê¨¤3’>œW% Û›+IæfH™ rªÈØäwÈ?ã_V~ÆþÚ5÷‹ný¦ýÚ(>ì`üÄ}O…Ô÷»è}#d®Ý» {@rJóïžÕ$gÊã†Û­=d‚O…2‘ ¹r3þ•>BBà.{ Sq™8éÓÛOâhÈ•!Î3è)ûóÔÔA€ÂŽž¢–<#œŒ“Ò€VdÃkO•lç cÞ”1SŽù<ÒåC >ß…"„Ú ä`õ§*rHÀÍ5£Þ ©àò}©ÿy1÷x#4Ånƒ™2Ç>´¢P¼9ã2HëPlØwtçzÐ È—†$t§ºFxíšaL©äí;iÛØ÷¤7 Æ—bFH=©cä6óLdº’3R(*2Hæn‰GRÆLpqMprã¾iar$?/N”ÔtŸ2àr;Mô={œ§Ê[úSó@+õâ€V"T&FÈÆ;ÓÙ B2ž«°`¦•Aã:± Šʧ9§ÈáFG ¢%ù0G4;€ÇLsRñŒŽÿçñ¡#ùùÅ9÷&[RD¨‚hèàÅ9Ø3Ó­.ÐO^OzAa¤0;ñŸJl‡÷g}j{ cçùÒ1ÈaÖ€Ød$”õúÒ‚£?Ze³ä¶nÔù¸éŒP?2PTò¡4nÀ½±L‰÷ÓéøRªgààÛºc“O0J†S·§"Ÿ“aÞÈ$.M<£•ãÒ”¿ÏƒÐóš\ù‹Å Ô8ÉìjBN͸ã<úÒØ¨ë×ñ©2¤ð3ͳ[‘À{ã©©]¸$ðI¦"„^3×<Ñ3ç äqÖ‚Iâ`S¶{éOaó*(› I©C¼Ÿ­5ðXð28Ç¥5Xù;‰É4Ø—·åí@üÇlÜnàR$xv8àqõ§3aŽA Ô„`ž…b2¸äu"¾|ý²~|?:í¨“SÒ»í_™ çw=öõüëèE]ã=ý* JÆ-ZÂêÎu ÄM©ÂÀƒúSNÌiÛsñ¶XÊ’àT$ {W£üløkqðËÇZž‹1/R ¤cÌŒò­ù~¢¼ì®ßzmXÆQåvd[wcš‘Ц.ßcAM«ÏZ‘$FìzÒ$œ¦1 Œì?ÄzU»˜Ë÷œš´‘Éqj]Ý!ˆFæ °õ¬Öòô謭ím̲¸|pª¼–?ÓëT,m®õ½J8bŽK‰¥m©c$ú)|1sþ’†PŸ˜r>•õïìÉðŸÂú.§·¨^­Î ÿñí ÆÔSŒ®*°Õºž¯û0|9»ðÃXàÔaò/¯&7c( €Ãõ¯fH°{Ò"‚ƒiãŒS×*1žÿ YÅhÓšx\ç’?*dƒæ~T ¤ž8üêŠÜ¢ƒÎx©œþ5FÎãÂôÅL°Œv ~ty‹[•7°xë“S…8/ëJ@eÛž¹æ¡x*=EM#ÀóLXùù¹Ç­J­–cƒ¶’CƒŽ´ÄL.îßÖœ¿zp ´tõ4¸$àüÇÔÓÚf\Œr}«Â?k_áL–é/—-ýÂÄu*2Íøp+݉õ¯ˆ¿lÏ&¹âøthŒ:p(Àž<ÃËAHÊo§sç{žBÇ9©-‘®.Tl-–û£5lYõ­o Ù´÷~`—Ê1Û²¹ü›¯Ò˜½B)Þ(Öùe,rÝÛ·¯ð×è_ÂÏ ÿÂ%à-HØíí8ï¼ÍŸÄšù özð€ñ§ÅÛD›k¢¡¹›?Äá‡þÌGýó_tðlóŠFéZ ÷䌑ډ3Œäðh9.¨ìhŒ± )’•‡£Â¥ÉóÇ+làŒúR‚œŽzCHw³ îœçŒsíRJ£ÏÌ9â…Âã-ÖŸŒ©<óLp¦F(hÉ;•²z –Ý SƒßŠUë×ô¤R¹ e—®·µJ8 ŽÜñNÆ0äcŠfyéí@Ý»9+ Œç§JFn8èN8¦+œzsAê*|Üž˜è:TÛrïéUÖM )ã=9©¼Ì ?:·IØ0yÏoóô¡¾Töœå㑚kpûsÁï@+ð=;Ó¢;¥#¨ÇSÆ)‘à!Gz™pã¸É +…V^‡Ø~\œíRcÌÉýi0@é@`$Prq×9¦¾Ÿji,ߥ2C•'®}hƒÛ€;ý(ÀûÃ#Ö” ã¯OZ6ƒž;ÐU»  {š&œôÇj Û€?jp8SžÂ\XGœûšSדÀ¦ÀyëŠ$l7^Ô ÚjHH+ëéÍ1GrM5=G94å;‰c·´ г‘Ò–L²*5@¬Œš˜üÉìhØ]xÛÓ=*B~qŽÔĈ'ç­H‰Áô>ôl=õ#lž1ojHËãóÍ9òy\‚z{Ócaœ‚0Gô ±#nãœPœòOÖœìCsíNHÃŒZÀBsŸQO8 Ï'֓ʳÐÓÂáxê{Ò(³‚1ôÍ#1ò¼R*À‘ƒô ‚±õ¦£ävïš” ŸN*($åSÉ×4ÔB¸Ïjh+ž½EHÇ‚x¨‘7‘“Ç ¤Uû ‘r°8·­KåFsŠGÆ’iÑ“ò÷Ó®pßJ ׯ¿47-òž~´Ä~§Ö]žMñÿöÓ>5èq¢ÉŸ¯[ãìÚƒ!#oxß‘Ïá_x÷àF³ðß^m3[šÊÞLIDùÔô!ˆúŒÇ¸<θï‰_ ôŸˆúa¶ÔáVÚ0¯ŽEUô³Ô½Ù—:ÿ‡—LŒl’;…À̱8e'ØŠæðW8Èç­}Mñçöp¼øsá$¾²—íšjM±Üd´[‰+ŸcÒ¾au0;_aÅ#)AÄ|+e9öëS\Ī#Há‰æ—J¿‚Âî9g·ûR©É„¶ÐÞÄúTÚž©s«Z(máSòE mQýOÔÐf3K”At’rØaOZì´ýSVѵ{=FÎúoš@PÂÄ`ÿw¹-20Ò*8ÏZê`ÔŽ ¼¡A1ܤˆ¤ç%j$®ŠGéÿ‚u[ÁúEÝÊ´wS[#ÈÃÇ5¾™lõ>•㟳ÆEø·á»Ã-»[\é쑺– ŽÇÐ×±Á’‡"”6.èYÃßÞžØàv¢˜ž¼ r:7%G¸«/D)~qžM8 '4ÉG! ŽÂŸ»v08¥¹;î%”rG¿J”@#Ÿ­3`F8ô©\|Ý}Í2‘Ç£r{Ë4ÆÈ'ß¡ý(> s@!A u¦HóÁ<ç9 ü£Ž‚)ùOý)FFOJCÝXŽyVžWuDK3€©¯Ë¿ˆÚüž$ñ–«$Úk™?V&¾úý¡|^žøiªH[l÷‹öX°yËN=†kóæ/;¾~ñ9u9Ûn~€GAÔzf¶tH‚Mç°B¦@¨ÿ Æ\–èEuM£Ib±F»ç¼‘ G$’Fi”•ô>®ýŒ|$ö^ÕüE:0–þU†6nê§$ÿßGô¯¥( qÈôé\ßà ¯„|£høPֶʯÏñžOêMu$9I;".¸À¤E ›COÚÀqÉìi˜8aÀ¤FÚ‘1óž äBF3(H@mÜðsZÈÚp8µ!1ôÆ2(>rx#šB2?úÔÅmÀçŒç¿ô§3¦»i3ÆzR32yíQ‚1ºðiÅ[>¼þ” a¶¤D]¬£Ò¡3 ½³üêXß+“øÐ ñƒ‚ÀqŠå‰È{Ñ$I 1Ò¢úg8î)†›“ï#hô¡Ÿæ$qJnÒz€ËœâžFî÷¤=‡¡Ê@óN† ÐØÓ#!zúSþï|vë@…YcÏt+¾ÔpÈíP°+œ¨*M)1¯¥ Ç›Žÿ‡Z~”‚8¦«(a:ñNÁP[ =¨[ÎÎ:R«wO¥V-•8Æ1H'Á+ÓŽ†\²[Bx AíÅ00`¤Ç¤<œsÀÅ!½4ÔŒŽiÌëNŒ´õÿçëK¤8¦'®äAr;t©'#<ãõ¦çæ\ ~5*äŸAŠEk»"Ù¸Œúö© `Œ~4åÆáÀÇLÒç¦1@t¹ä)éRòŽiI<ƒïÒ—àöïé@!®AÜ1PmÚÀ `•i”zÞp{´ÉÜkwœtÅMíOja_±=)Q08è(BIlç©Å¬³Úß[¡H¯lÜ yÚA0ë×Ö©=,^’VgåI‹ÉnF©bÊIÇjõߟdøg⬒I.­Tþîæe Ò g$3Ïjñõg¦=è0”y]™oLœÃqpv°85»âXdÑ2¶`‘wF?„ÔW0„«‚0=«®­÷†À—µ8ìžô¤ÉGÙ_±ï4/ êú½Ú4+¨º,(ÃEÏÍùšú~#Ç8â¼'öHñ²x·á„V¹ãKqnà£Sý+Ü£VÇn¢³ƒÐ¸= Xlã9çœSQÏÒ£vÀÀàç­HŒ¡@ô犳M8ùˆÝÇJr®Õ#9üi€êOSœf•çÒ˜ ·<þ¡A-lÓ[®q“JP?Z@qÄ•n{ðNive€Áö¨÷|ø*HÍ<>\çL•®£À<Jzó†çš®[9ÈÇ¥9ØØ4æ|›ûox¥ÒçHÑT€¢#pãÔ± è5òJrÿ­{Gío¯&³ñzý#“tV±Çö!yýI¯å#–:Ý÷.éHx†@Z=Ù äW¯|*Ñ¡ñÆ éÈ›m ˜\2¨Ç 7ôú(¯8ð}„73Èfi0 /—Â2Ùõ'’=…}û ødßøÃ^ñ ˆ £ìпûMžŸð(7¦¯+ö>µ…@fb1ߪpÃh'­B;ƒÈõÅI“’OLñLo`89Âò:ŠsÁïÏ4…aÉç¯)ʯNÔÌxàr=Ç­Ó O=i% àŒþFšpAPrh(8>™¦4’Ù<þ¸§*î9ÎéƒC7`þ”\’Þ1·žÕ3 +Ÿn˜¦+ÀüýjRp£#ŸóŠŠ‹ÝÎ}­LÑüƒ=ºb”(q‘òñÔsœãŠÈªÈ “€{ÔÊHÆéíAÎAaӟ“ÌUÇL÷ÍzaÆyÎ)ª™ùq‘I¸$¥*>yQߌÐ%¹2®ØË)Î;gŠBHQ‘·µ ÁˆãŒÿŸóïN##hžÔ ÈEm zçšBø_zˆ¹ ·öEJ1!8ÇJ¹kda³ƒÛÜSV0ò穦F¥cé:RÅ!,©'Ië@Ó "Ù!lç'üÿZ gùIÀ+m)Á=qJF] ƒÞ€ê~R}zqPå±Î:þu;.âçÃ4ÁÅqÍ ñœqЊz·#šXÁq‘Ž”Ž<” …€þU0`Ã'§­UL£GçRç g‚h<‚xíô§€óéŠb^™ëÜT¤r¤v ®—#xœúsO<~µ˜É vw …8= "VƒãÈ cëN#æ¿dyÈÝǸ¡‰$cMÜ_â㟯j„ÈwmêGcR€OOëQ±Á'9é@±Âgô!,¾œb‘AeáIñN ´zÐ+ØiÃu8Ç_J™+ž¸õªÒ(ÝÏoOóíR#AõæõZ2AߥJÇjúç¯z…bT`Ô³ƒÉéL.">Ï8¥ÈÀúÔíÛžrzÔáw:ÒùÚ¡O晤稧õúu¨$ù\ ~TÄJ[pcÞš«É#®1Æœ¤N9”ÝÀp óí@ö;gúÓ”g¦x¤|…ö4ªÁÉÍöxSÈ98¥ÆÕÇOjcùGãO •îq×üþt ‘®[wíR–'?Zˆ¬?.jW9wùñ@÷Ôñ/Ú«áÔ>0øk¨Eºj™÷*Œ²5ù³qŠRcŽköÿOUÓ.ìæPb¹…¢`za¿'þ$øRëÂ)¿Ó.â1Om3DÃä­ÐM7ö9cž£9öÒøFdšàÚK‘êc'Ó=á\â`¡ÍYÓ.>ÍxŒ&º3qМ:ŒRF§#íN‰KãpíÚ÷IÈϧùü+S{éfDÊw0)Ê›Uy-õ£oÝsëNnƒŒö£qk°Çá$dö┆ÏÅç§ZvÜzΑKS†a@ƚϳ=¾•>Ü6ã𨶩îéž*‰º¶¤ˆAAŸN¦«j®ŸiqrHXá¾€VÁ#5Ã|nñðçÃ-jå$Ù#ÀÐ+¼1ÇëRÙ•¢Ú?<~!k/¯xËT¾‘·´ó³“õ5‚ëšuÛ™®ÝÉÜKgëH„™1ýjŒ–‰#¡ðʬf{¦Áè\wÉÇ®+ï/Ù¯ÂKá…^å"âùMä„ÿ·Êþ˜¯…4xZM,[GóMy2B wçüq_¥ºˆÒt{ DP‹mpªúP?¥D4‹ó4üÀW8ëR¨G9oSP§Ì2z÷Å9€àŽž´ ÌVQ´0=ê&”Áü)Àúg9íÞ”¨| ŠCé¡ÈLªÅ;‹8aÇ"‰v:ç®)W™q»ƒÁ>´ r\nëOl:== 79ÉÇ5)näó@ȲNÝÜ€x©»€x‘QƹÇ3Æ=;PPÓÂŒtëÅ8€^œõ ¶³sÇQM-Ï'„P-.!Œ¿¿Z®Ðóxõö«;÷ò2=h*FO KB¾|¶ù©ÒI³.ìžqN’-áNî#.N;gj{ˆ£Ëb@Ü:*^28Í\ Q#F1Œ÷ 4Jâ¿»T‹çÏqH»P‚{ý(bK [QSéèh pOCMƒÔÐKÜO9àÐR6.;dñFâdwã>æ;³ëõ§+prGøR×Ô{7BF>´Ý…XžªiwÀÉãüæ‡}£'#ŒS%»’ 6ŒŠ8ßš‰×wLŒûT3ÝÃdŸ¾¹Š&Yÿ3H4[²òáœút¸Á®vïâ…´ãºëÄÚ=°CßÇ×麹ÍGöƒøw¤äKâËIÎzZƒ7ê¼Qr=¤okžŒc¨ã!Ÿ~kÂuÛ áÝ–ï!õ;ævÁüXŠæïÿnm!‹/ ]\cþ~n•ÿ¾A£qªˆúVb ˜Æ8ëR&>^äWÈ··\æCäxRÑW³I|ÄþAEf¿íÓ®mýÞ‡¥F1À/#æ(!T»>ÉYxŒÔùÇåÛé_¿íÃâG‘¦é cûŽöj?á¹´æ8 õ&¾8µý»µ8ø›Âútƒþ™ÝÈ¿û)­½;öìµrï„özµ½þáøeh´µ´>¬* Á?ç°‘‘è |ÿ¦þÚž½Ú·VZ¥‡«lYüuZoí?ðÓUQ›Séuléý(ºCö‹©êhã‚J²Fr5ÈÙ|Sð^¥·ì¾-Ñ¥fwí¨­ù]¦³e¨mo-î{f •Àü+¦Zœ^ˆ²rÇq×=1S§ËÓ’çLRI$ä¹õ§¡‰äãô§¹z1@9œ ‚àª2jÊFOÔ×!ù#üÿõé“a‘½zz{RÄ #ާ­RO ØSÔÀûôö z1Å‚?h„ŽüšxaÓÿÕNz{hE–“ŽÔ*ùxg5)ù‚ã󦟘cóÅ!^ãZ!òœtéBÉÎ)NG~´€}iƒwØ1‘é_~ÝžO×tßÀ9ÔU£˜z:üÁ¯·ÆÇý+Æ¿kü%½x¢ón´éî?—'ØüéN;ظûÞïsó+$NF)&jkø7,§·­Až‡Ÿ¥1Õ[ Ô<=#<ÛWÞ=Ôð¯¸?cOˆgÄ^ }á”O§` ÎIJøsÁ·kö–‚Sû©‡–ÀôÁ¯Zý•¼[7„>/XÚ¼¨/ÛJ¹À=‡ëXÏO{°¶I®‡èÊœŽ¤þô¤gß¡"£•Rr3Á¥RKuǵhn‡ŽX¾Ôg¢÷¤ëƒj7v'=é‚@¼’8ö"ŒÔŒÒ0<3LÞW€¹˜m©Çgy'#­FÙÛ’y¦¾ Õ?mˆœ „ö:rÈvªÚÚ)9ÿy÷þ5Áx›â‰üUO«xŽóT *Ç$FFØ Ï@~_ÒYm­¿}º‰¬#™AÌ0¿šÃð\×k_¶Wôá'Ù­uMC–$‰OâÏŸÒ¾-½µ†ÛìfIž?1È“ç.?ݪ7ÐÃe§C0ò>ÙæœÆ³y£obFMi=Ï«µ?Û²É7.—áBïЛ̟ÉSú× ­þÙ¿538°·µÒQW$Am–AÛ%ɯ MRÕ¤µ}ï•›ìñìù³Ðm+ÛÞ£º×•¤¹ò£vŽXÖ,Êß6¹äÿ:,‰jú3¶×¾4|Aךå5êbÚ^3så»§ \žº57ÜÝÜyÓ2Ä3ç>ŽF g^øŠóRIRSŠN±¨àcÓÿ¯PÜësÜÛ›v1Ç`JÄA#×ì„—‘XßLãï½ÏJE¸•ˆËœŒ9›òzÐ]ŽÖûÃÖv¶RÈÐ:d 3Jrà‘œgÈU]KO´… _&tiÞ²eÊwÉ r=ð+”9ã‚F(ToáàñNâz´4Ãa(·[Xî"œ¢y?xÇØŸ_­s¼äsJ!“FxR­¤Äݰ¤1ri@Û€Z¥SŽ lqíH,¦þã@ȳœòOãJ¯OZÚN:Æß•7ìÒàjh'±Z]Î3ófà ÎU¿L*GPztÅ.]O_Ã5*_I·!V)–ïøÓƒ• ¾š´¨X‘éš³o¯I †RQ‡u8?cîíG#$ö¥`Üõ ~О4ð®Á§xŠþÓDòù‰×¦ {_„ÿnÝbåëú5¦¦¸Inæüx`!_3ƒJ²2œç¯½.TO*Ý¢¾ý²¼®m[è¯ôiXàùÈ%OûéNJö¯ø“Jñ-¢\éZ¶§.C[ÈQÔWä<7ÒÅ‚NæºxûXð½ê^iwóXܧI!r§è}GÖ•šØw’µ™úØ¿7^;ö¥À…| àÿÛoÆÚ?—¨ÖzÜŒý¦ ’cýäÇê+éφŸ´çƒ>!Ã2ßG£j²}ë[Ç ¬ßì¿Cøâ‹ÛsOiÑèzòñ»œÒ•sǨj(eIÐ::ÈÑä~TŒØÁü? «šhÖ„™ óÉÅ&p1Ó'®)¹ËäqÇ¥86R+A#ïRÁëÒ›ƒÁÀÍ;*‘ÝIÊþ„Wìú‡öåð·Ø>%Ǫ¬L±jhåÇBë”? _ξ_SƒŽ•os9üE­:s ‘úW`oBñE†­ É.—+õ$~`× ŒRL×c)þŽN²Z¸²zþ¸üê%®„+j™úðãÅPøÃÁÚn«ÿ_''8=ë¦ ž¾ÕòßìCãiu_êz²l™d‰OP­œÿ*úŒ@üþµÚÏ¡­7u¨åÉ8ÏãJFÅ#?"ü£'“Nê¸ëVWR0~b v¤+Ï­<  1üé7î· i#œ×ŠUá¼GíM`_‘ÇZpsÈÈÁêqL„ sÞ¾ý²õÏí/‰_e JÚD±cÐã'ù×Üò¬HÇJüÚøñ­â>±uCÜ>0sÀ8Ê—S9î>_»ÇëZþ·óõ;xñŸš²ÉVÿ†?ss%Æ3åDÏëÚ¨çÙ²«/„|C¨•?éz‰ ÀuTPó¯~PÁÇ^óÙïÃÿðü&Ñ!eij¡¹ã»œÿ…z8ù›¦h6’³å†vÊ{Ô¥J¸9ãÒ¢\oã±ïþ}êrÄ’1œR 46D °ÇËÎ)‘à`¶§‘Qªå”°ž…„ Ï"˜Üd7 ùKžÔÒÀö1ߊ¼ÁPÞ:Š™fÈ탟Z›`>‡¿z]›YInlu <‡° ÄöþTÖ%ðHÎ/jkËûÎy'°©1¹?•Ða ŒuÀ¦ìf\ç€x5e°À6qPÝI•«Ï<©ooÜóJÁU@îI º5ä#ÔñJ¼? ñÏ~Ô ðh,î›Ä7ŠpRËåõñùf¼{Ä?µÿŠuXîSK³Ó´8Ñ3æ Í0q‚Ø\ãÚƒ/hžÚŸ[jºÞáë3sª_[éö«È–æ@‹ž½ëÌuÿÚ›ÀZ<†¯nui“ŒXÛ’§èÍ€ ׯ^$ñV¡¯jç]Õnµ/‘\‰ a¸öœ`sŽÕÍj¥´7IbÏçBÖ‘ ë“ß9È¢ÄsIî}5âïÛĪ<5¥Ã£Ç&vÏp³0À<È׋øÅ~&ñµü¯â VóPhñ•irª<+`(÷é\=Ö½sqx·1í• *˜zõª7R]HdšFv=yÇœQd+7«-_Kjð6Ùg7[±°0hñŸ_ðÍfífë×Þžep 4yÅ2&è™\1BAjåÞ³{~\ÞM*ƒœã>¸õ÷¦C¥Ïq÷TçéÖµ¡ðuÖÏ‹tîÓƒó4Ƙ3“ó1êÇ“ùÒb@Áü«¶Ñ>K­È©aö¬äãmœ“¯ýößÖ½#Bý•|mª<_ñN>çÎÔîâ‹hõ*»˜}(/‘Ú炬r²ãkb¤L¹˜ü‘–>‚¾Äðïìe2)¦¹a Ž‚ÖÑç?÷Ñu¥uV²7‡¡tûGˆu™Ó¡ŠÛȶCí•pÿ¾¨"êψ¡ð†§*çÈeQÝþQúӓ²,‚9.-Ñóþ¬H ÀJýÑ?gO‡º[ï>Q‘T~óQžK“ŸøúWi¦xOCÑT&Ÿ¢éÖ*¼(‚ÑõÅ!¨Ç©ùÓ üñ¾ê¶:.¡wž†;9vÿßL ~µÝ鿲W®T4 áí™%…?C%}âªèª:Ž*dÁòO^´Ñ[#â{_ØóÅ€©k+8Çq5úýZ¶¬ÿcÉ“$º#Þi¥þH+ëçc€qÆ})𞤌Óë@ü¬|³gûê ·Ï×´¸‡*ÎGÿК·¬ÿc«$Üøˆ·ýqÓâÿ¾³_FœÈ Ž9'Ž”öØùþ/ÙD¯ÞŸt´€ìµ#~Èz).½z>¶ñ5ïaJ¯$‘iàî9ú ¦ÏŸö@Ò‘ý½>=>ÅøVmßìedû¿ˆWwa-ŠàýpE}''$wõ©è€`ÿ:Ÿ*Ü~Å×KŸ+XÓeÇw¶‘3ù1¬{¿ØÃY$ùSé8)4¨T5ö6ÝÙãÚ,/N§œÔÍ÷Ý~Æ>(Áòímå'þyÞ!øöÚæµÙƶ€´z$³/_ݾ¾”€s×î1Ïa@Ïžlÿ¶½ðÑ5H“tÚ\ÛœŽ¾[ ×ùÝ )!#ŸZýpø—¢Gâ_x‡MqŸ>ÆU_]ÁIü@¯É­^ßì÷޾Œjú=cTeJé|;8šÒîÔà´0=ÀÈþUÍã+Î=ëSÃW?fÕ-Øò¥ÆyíRÌv=¿öDñzx_â”QLû!½ŒÛŸ®Aú½3’A÷¯Êõü)ã(¦…Žmn©¼×éwÅ=Lé?|EtO+a2ƒîTüëóâO2ᛩ&ƒ/xŒ}áë]—4—Ö/!³X½ÜÑ@1þÔŠ?ƸþŒkÛfýu?øue>Ôfb?$lßáLÒš¼‘÷~—iŸgml†5Eà1WÇ\>µÛž ,jØ ñè1H½n!Œ.~SÜÔê8 úb¢“(ÙOR*D•v¦4m`.1úÔR€0ù½ªa‘“ØŽ)“ŽFç×½k¹fÜsÇ4â ç¥#‚^@ýjU@é,zúÐ[Ë•R9¦¹=¹nÔó…PÄ€zäñÓÖ¼âwí-៖²³‘uý[%ZÞÖP±Çþü˜#¨è4)(êÏ]Ȥ*ô‘Ú¸ï|cðoƒüÄ¿×mÚásþh|ùIôÚ™ÇãŠù+âí#âï*ÛIvš„ͱ¬ôÖ#rw-)ù^ØÕã3ëÉi{(µ4wÌY6–9äôü(±—;{l}AñöÁÕ/DÐx?Nû¤ccÞÞ¢´Ù>Š~QúׂxÆš·ˆ"šmcSÔo ‰æ,·7,P±äBpGÒ¸yoçt– ÅasŸ/9óª{Q sE‰I¦Û:-KXµo³ \¬d1FO-Oýyÿ<Ö3^Îf’a+ÄîI%¯_¥A¼¶6ç?Jš)g#¦QI–%˜»žIc“I’Ý9®†ßÂr¬"k©ÖÑçm ý= î¼ð?]ñš$š‹w¨ÁœÙ±ml>Œÿ1ú…¥r”[Ôò¸ì§›#ô­¼5q³Ì™DÿzRÄšúïÃ_±ä‘ÛÄÚ§ˆ#³røôÛ`Òè%rGã²½GÂ?³·ü*é9Òγ|¤w¬?ÚOû €«ëÀ ¾Tž¬ø‹Â¿ 5¢K§èú†§tkKWdo¤„üsŠõþÊ>/Ö&âÂÇÃV€ßj2­ÌÇéd¨üM}¤ Ê0±Ä£ kµW€ð6®àrqAI%©áÞý‘|-¥*>·©êZõÆrU$û$M‘ã#êkÓtŸ†Ñ6/ iVì½$û"3øZéã%Æ{c¨íJ_½èí¡( Ž$‹Ð Àü…#D ¼ž™íSG'ÜÓNÇè&Ð:qÇçDj¬˜= YóÛëJ§å8îq\Õ}¤¶ïSŒ ±äžN}h$V‹v9<ÔŠ€9S|¿ÈS‰<Ò+b7'T¥FJjò*EÎ1éÒ€KR6Á“Ó†@õÁÏN´€Ç’EK¸‡ŒÓ Ûq‹€ãÏLS¿‡'ëQ3sÎsš‘Û¸ž´‡¸üäÒ—=&šdàöÀ§ÇÀ'ø}ŠÜã·ëJ§šF[qíMûp:P=‰Ç|÷¥=H=}…4gpÓ,Íê:f€ ÀøÒ0ÉãÔ7zõ¤ÉçÓ /ÐR¹Ï^p1üë™ñ?Ã_ x¶Ù¢Ô4‹g-Éš(ÂH=÷ ê×­0>îœÐ Ed|©ñö7Š÷7MÁ&6£ä |¹ã¿ƒ>"ðEÔÑßi—„þ2™õ¯ÔÕùùÎ;œU {ÚoŠ4ém5+T¹ÔŒ2ò>‡µ;•£V‘ù,/nûdR§ÜSUÇ~õ÷ÅÿØÎÖúÎ[ï K#L¹f´”ütŠøãľ¾ð¾¥qkw ‘MeuƦe(5ªØÉV1ß•w_>,k¿µît­F{`^-ç˪ô5À«•1íOÆNwsúRjû™=OÓÿ„´†þ'X[Å ÚÁ¬˜Ç™c' [íÏQ^¤’N}ˆé_‘^ñM÷†µ[[ûͽÌdS‚þu÷·ìóûIAñ"ßû+Y0Újñ`+…œzýj>FN;žÿ¼à9éŒRƒÎ}i¨å²21ŸJy=<šfö"’/67B2}¯Êÿž øëV°xŒ^M˪ƒýÜñøb¿UÏóšø;öêðÂéþ8·ÔãRúÝ“ÓpàŸåZGf]¯¾gËQô5%›ù7(ÜŒÓ`ûøïÛŠO¹&yäæ‘Êu¾%ÃÉcv£ýt 1Þ,Wè7ì¿âTñÁÍ <ÉmPÛ¿<ŒÓùß$ÿjðüDòÐKŒã³þµ}cû x³}¶¯¡ÈÙ*ñóϽbôhwM^!M#ä1PI¤Cœ`ãÖŽs´rOSVtt$SÀö¥Â÷<ý(Û‘¸±À?1F@%4ÄÕ´8ÙÓŽªzâ’4ÆìsïëJO˜Ø=?ÏôBrçÖ˜Xò?ÚƒWm/ᢡ¶5ˬCœdrH¯Ï"ræ¾Öýµµ¯#ÂúNž $’JØôÖ¾)UÊ’y„s-e&99ôÍ}=û%éë'Žì¤#"ÚÂi‰ô,Qã‚kæÆHç­}›û!èä]ë‹’+h-WŽç.¥3¢žíŸLDK(-ÆjÂಌò•@À8P8ÇZ“#@) "iP:‘ŒÃÒ¡bM8ËžÝ Fá˜àtëÖØ°9ÏN”)äg¥CòK“Њæ<{ñG@øoj$ÕîÉžEÝ œ ºi~‹Ø{œ &–¬ëK/RG''µy—Äþø{·I—ZÕŸ!,låý·/Ó¯µ|ÝñOö‘×¼wk¨YZFúÈöèã̓лŽp}óõæ ÷!–bz'°ü¨0rrÛCÚ<ñÿÅ~0–E¸ÖÚÇIšcé–ß»P ãxÁqØäõ¯%Õõø.í„öáQ¹mÜmoUÇõõ¬‹‹‰®æó.%i_¦[üñQ³r1¥0±$·2Ü,bYZEAµCàzT%À.Á¹”À¤,Gn•Ø¢$h¨ª¨€`"Œ=©@&1Ï8éè)­ùÛŠ}, Û’âžË„ˆ$Òð t¤ó2Þ¹ôÿ?Z ±0~¼~Tî0÷aA;÷g™ÅDÎ@äòZɃlAú‘MäО0j%oŸ'šž‡×ŒfØ#Ë $äô§!ÝןcL\ƒÇ9§ù@íÍÇ¡1UÕ›-ÏAOV.sÐg¯áMo—[Ra&åÚ:ã­0§¯¥6& ýqÇSRª¬HÀ<æ5Ô•SåÆOJ|`Øâ¡Ý´vn=jÌMžÃò $ñϵ<ÄS>è=éÁ±šÇ;uõ+ÔóH§æ'#>Ôå,AÏ~ãšE!ôãÐSЧM+£~¸§!à(ã¸4œ óOášL þ˜“wÊ=;Ð'£´7$àS‚ZfÜžXóÅJŒç§¥¸IÈAÇáQ¤d•¡<ý*N™=û p d÷ö¨¤apOséH§çŽzÐyÆÓŠvTgúR£º{P¤3 œzSÇ\`úR{ñÀ¦Ê¤ò@Ï"šÁì¼ñëCnÞ1Æ*E\ý1A,bŒNI§ÌÛSßÛ½ V޼Z$\ó{šq‹ÈÁÁ$Wœ|Kø'៉÷"óOŠ-EÔì¼EÃÇúŠô•QÑ@‡4"üÙàäzQ{›Gåçů‚:çÃ;ùöÑŶìG:!ØãÔó>TàŒýyñ_…4ïè—V§n.,çärb¨¯ÏÚöz½ø_®mäû^“qóA8B1×åoB*·&QRÖ'‡ír+SA×.ô‹Èç¶¹’Þt9YcløÖVLgkqƒNîH Â×Ðý ý›~?ÛøßI¶Ñµ›´]f$ ²HÛL¼ãñ8¯¡8`ô¯ÈŸ ø†}Q¶¸…ÌrÂá••°x5ú5ðãm¯Å-Â䮫k2î#/Ø·òüÅeð»t´g­“€+æ?Û«CKßéš§ï-îŒ,øçk ùŠúmOÉØ{W~Õ+jÿ5…P x§ƒcúÖ«s¦+[w?3U¶È}(䃂)×Qùsºœppieù”AËÔÝЀºÓuxb#óúÿ*ôïÙsÅmᯊšRù»!»qnã±É¯-ðlá5O-þ䀯sÛ<ZÐðµóh~-Óî3ƒmvÇuÅg5tÃ}ÖUÁÚ:v¦È¬§‚|Õm:ì_XÛΧ+*ê*ÈbǨõ¦µÔÙl8 (9ühTÞ3¼bisÎ3ŒÐ²¨P `Ó•¶8Òvò9"œ’ ç50>†”Œ‚GÐÓ™ñÇí±«|Qaf­…ŠØg»¾aÝòŸOjößÚßS[ïŠúŒ`çÉ äƒükÄ[ t¡ñ&²C$ñ®3’~~ËúBiÿ%ºÛ‡º¼‘‰ÏP¸Qü«àm36£n€d—¥~’üÓIøm FFKe™‡¦ì·õΘ;E¼i´dM"ðÜôíþÏZM§æž í8ôçð¤=ìÐâ ¿SUæž;$žâd‚—t’ÊÁUW¹'¦+žøƒñ3Bøa£&£¯\É sÅo–C×åÞ§z×Ã_>?ëu›‹t’[ 'Ž‚¿yñ÷˜õôÊ}íßÿkËm"itáN$ÔåPÈ?ëšž§Üñ_/x£Ç—þ*Õ§¿Ô/'Õ®gP$’fØIöÇoaŠågÉ=}iT„û¼ž´Ì­Õ“O+\Ìe”Œœ`ÞÔÖ“# ÏáN‚Ò[–©95Ó辸¸»··É5Ôç÷vÐFd•þŠSH¤¯±ÏZiÓ^¸X“ØµÖøsÀ·­â[ÚØÝj—ÒÒÅ ’vþè÷5ô'ÃÏÙ;WÕ$‚oÉ‹¤3X[¾û¹—û²0â1ì ¯§¼/àíÁZjéú—f£îÀ =Ë7Rh6QQø›þ~È÷6‹yâÛ—Ò•¹]/Oe2íÿ¦“pO¢Æ½÷Á¿<5ðö+ÃÚ5¶™¸ò¢æY?Þs–?uLxb1Öœë¼/ã94Ç{l È_\ûÐê†ùÐÀ¯zÒ*eNÓ€yúP-Åiöüéù,r 4à®À=;SÁêäñH}nFÌB=Æ1B±$vç½ p6œrhqÀuÉs•_áô4Ï,žýi»ÇWžjU9¯aE °œŽÇ5] àõàç½XãœrjàPs×Ú€Dx,«ß½9"ã¿¥FXŒ’)È•r3êh ص Ç'šÈT=rOõ4$3ëÉÍ ’q¥!nÄG$n鑟Â9$ôüiÅJx Q3à õ {ÓD±¦Jx<Õ'ËŽÞ‡­U@C Hã5+ŸlçšCõ&Pv€*ÊGAU•€êsŸ­Kob}³@öØa†ÓÐ¥8*éÖ•eçœzÒ¶y#<ûÐXCOÁ$:Rdœ}iÁÀ`1ŸZˆfùá’AâdàzcšYù#¿cNx^1@¬î¶ì``õ¡Fþ™ö©HÜIéé@ápç"«ˆ£Ë÷⟎}ûÐÏ<‘KÉ>”yíÇmÚ?¥áàã<Š`ÓÙ祜 rO<ÓÆ>˜â‚0sž(Ân1ߤÏÊsHqŒ¼zÐs‚yâ€[“Æ X 6õªÜd猞jd8R ?çÿ×A:߀N MßÞõ=éñò¯ø©¬øÛX–ÿW»kËçßÂÙÄ„c<é\3«9Üç'©4æŒD œi`·’áÀãùÓ¬¬ˆ—t¬ƶ´¯½âùŒBD9i…·|-àÛÍ_SŠÆÂÂmKR‘KGen3#SýÕØâ¾¼ø3û6Øèðêþ/²†ÿ[q˜ì_[Z/`£?rÜÒ4Œ/¹â?¿gÍkÇò¥ÚÂú6…ÛU¹LÉ(õ†>:ö$þõ§Ã/„^øSi0Ò¡{‹ùÏïõ¶q/7cì0+°D… €J\¨À^(4Ñh…\ñœÓ˜‘ÁmëMzFîäcžh“¹›ŒcŽ}iVFp@Aõ§1VbF0zHÌàñÍn¤é󢟽èqJ8çŸLÔhRvþ´çó’1Þúo˜È=0*,üÜtÆ >áœqéëM.£$ç=‰ö$ŒzsíCF Á=Fhà “ŒrE‘ŠE1HÂôÉéŠDH$S™Œb``u>ýé¢vÇ$ÿë§ *ûŠd„®äç§­ FÕÇn(¤ƒ×¡4 mϧz`^JUŒ‘œ{u ¡ë€Ùî;Ѹzqüé@è =?:q\ñ×ð HnàG  QŽôÒ¤ nãÖž€.?Lz Œs“ŠRÄðH8úÒ“òã<ÒKœp}©‰-‚GL÷Í >§Œ~4›v7ô 6#uûă¶•W;»ú R #ßóÎèGjƒ7Þ‘OrBñÒ™Lü§éO‘†ÜZbO[ŽV ’GzFo˜ƒn)ªÙÉ ŽÀ7ü=;ÒM¤“ž´ÖRyÎyÍ!,äœqéJ™ã'§SŒP5¸%zù·ö¸ø"¢¾i´c»Ž•¥ï©¥Gy\‹%úWI¨.‰§MŒ ëŸë\íÈÄž™®–1çxGÕ¢˜{dRd£éØK]1ø£WÓ†Ù­¼ÁÏuaþ5ö‹1-ŒJüóýŽõ/±|cÓã.\C,G'Ôqü«ô-Ÿ9PJŸzÊ:6ЇbQýà;SKòs€irxéQÉ'i9ïŠÐ»XãcÉ ãðªäÆÏHÔ'l‚Fü”šÐ„ŸCX>=¹ò<­IÀe³”ç?ìšdÉ{¬üÈ×$3ëwŽrKJÙüꔋ†§½Z¿%õIÏ\ÈW¸ÍïB2G«þÍZrê?ô¨›§ ;¿¥}ûHþÑ+ðöÑü? Lâ9—÷Ó¯"ÉàûÈsÀíÔöògÃj^Ö§Ô4xmßPX˜E%Ù8IoÁà‘ž¬-k\½Ö¦]L×s¼,÷ï#“’wwæ¹6”z·73j¼Ó;K+±w’BY$’z“OØ Qƒ–4¡VÙF@,{f§²²{É”`±$p)ˆe¥œ—r€2Oa^™ðÏáž§ã[é:M±‘Ôƒw{"þæÍ}[ûÍŽ‹ô«ß þ_üD×—NÓ›ìöðâKýD/'÷ô.L}kî_ø'Ið6ƒ•¤Z%½¬` eä~îíÔ±9ëHÞ1KVcü1ø9 ü*Óž=-$¸ÔgÿBèîš_lö_öEw‘„Ú¡ÀzzRÄø$Ž8 ¹`…¯síPÈÙÈþTy€Œã¡ïBüɓͺñú)éÆ3’ …}8¥Ú7q@ØÒ ã¿SQ´¡v’ *V8ÎxÀªÌ§pÎ=õ%YdqŽ•3Œ§_Ω<`ŒÓš¹·<`ñÇó ]F`(89@¨‹/§jUI¸Ç¬LûóßÞ9lŒ MOÆÒùê{R*ü¸ëNUHè3Ï=(ƒ# €¸v§ä‘OJ) Œ sÖ¢eÚÊAùO_­} ºcž9 |ªLÓ•A·=j)‰äÛŒRóÒHvð3ž”Á–nCFÓ•ÇAùS¶aŽþ¢ŽƒSrýy¥eö uDr„®O­„ð:{w¤ bäzUS¸ž½)"]ˆ;ÓD¼žvãŠJß2Ò"ùyü8§*ŽÿÒ˜ŽX¶ztëM‰npÿ¾Ú|IðF¡¥ÏòΤ·“ºÈÀüzWå®»¤Ë¢êS[L¥©`×ì¦ò23õ¯ˆm„Ðhš¯‰4Ûo.×e™cjÈ9öÏ_ΚÕXæ¡ò‚©xøäTšuÉ·¸ 'T1±V#=ûÒÎ6Ãz ¯\Õîu? Ák+—‚ÒFh?wÞÛ#?S\ˆÌêRkkO›íMÚó*‚ZÄÓÎ.Ó'Ô‰uŒRóÅtZ'ï¼=¨ÄNHŒ8ô<ÖWˆ£ $l0r:Ö…²öWÑgï[?òÍ g]û?ê¿Ù¼;p€.þ`Šý6Îg“Ž•ùEà[æø«L¸RU£zs_ªº|ÆêÆÖu9W‰ ät¬×ÆÂ.̾#Qº£<œäTŠ8ÇÖ£;AãúU›Û›s’e@šã~.Ü}›á¿ˆ¤Î?Ñ~¹®»z×þÐw_cøM®0?}9ï“Lʦ‘gç\ŒR—<þðò~´4-uz1îIÀ÷ŽrÙâ´$¼ŠÊÖx!æœmžF=©‘Ðmùrý’݆â›&(Áƒç‚? 1i’céM±±Eç8Ú;™¨ð÷³`ô϶öíy0>§êß ¾^|D׎b¯ ´xû~¤ä·Nê¾®z­sÞðn©â-fËHÒ-ZmJé†_nVÞ>îÞƒ¯_Jýøà 'á߆áÒ4˜„q&Y/3ãæv>¤Ðm¯‰–¼!á/Á ®‘¤@¶öp/Ë“–sÆYrks' ïÅ5”1Áàûp(óG®?>”о£¾òã8ô¦“‚£w>¢™¨qëRÆzÿJ³NåÚ8õ§o?wæ¢S–8Ï\}jaòÉzÿ:î9לŒõ§#à;‹q‘p?*Rr2 aávóßÒ‘¢GæˆÆTsšiÜ[±Í [º»#Ôª¿» œŒ`±ÏJtm¹=ø4"q‚i]CéÉ©C`÷×CÇ=zÓ»‚޽:qR¨ ž¾ô͸`8<ŽiìpN3ÏjBµµ·?<ÒíÞFAsAþ÷4ª0§®MÃ]‚¡p3MS¹¹\NQ…çðÏjQ„LÏ~)•µÅ É象ÀÝÛLã#“éJ¬Aäg ëHB¯ÓÓNâ£ÐsÇz7ylXŽ G™ÜAÆh¸…ÉFƒÍFùãg ÓÔ° ‘‘Úš~g9èzâ˜ßaœ’G@}ªÊ–$p:ƒQªà€x⥋;ð})’&ˆ’Ä”ÈHô œ†æ¦C¸ äŸ~(J •¤'qäõ¦GÀíɧmùè>´£S’1NÖW$dbƒ€ïÍ5pÆ) •Õ†éééKtì) ½rrzQ a²[Ž‚˜\6{ޏ¡NÕî}1HF3Ïšh-´çõ ]5&WäqëN8È8úU`ÄmçŒsS£d{ã¤ËFLÔOõÆ}QS¸þU®p=©’Ñ*®FèsÖ¤1ã¦=0 E<œŽx©<àûu ],5À¥/AŒñŽ´0Ïó4>wuàP"p¸ã§µ8.1Ç9üê'·éëRçpÁïÞ!Áðqê}{Q $˜cÞ£^X Lb¥`tÆh¸› )sÔÔeÊäc;Ôª„±¸ç4úœ°<€*Øùß0ãÖ¥BG¦(P¼ôÏJJÀ•ë€zTq‚¯Ž3Oc´΄Ø@Áãë@‚Àï\‡Å/Añ#ÁšŽ‹!U’U °û²Ÿá]ƒ°^3ØàSSçÝCÀºÈÁó-PÊ¿)à%.Áî ~þÏÚ—öŸÂJN[È)Ÿ£Y?^ñèƒ>XTˆÑýH¨¢û¿7sMg'ó«Ôè9'P#ðï^?ûRÝ}›áUÒ“2d@=q“^»#œœ`õ㵓?m žu†7¹ä“צ)ØÎ¦±³>EM:Ù¦~nf_‘zíSßñ¤Ñ,üÙüɨɤ¿ «È«»Ê(^˜ V†¤£M Œ’øäŠ£2 Véngòâc^ihzeÃËÁjnngq´ 2eôã×ÿ¯T4?íîlÕØôQë_QþË? d¼½‡ÇšùpÆ­—jËÔcSŸQ)ó=OLýŸ¾Oð×Â÷Tt—]Ô¤]:r»=Àçñ5ëÈØB¸è*eùñÚ™³wÕ d•ôÒ/ÊNõ©DD?aM1…\õ'Ž{R²啽qJÅWð÷¨Ô``uö§¸ƒÔŽÔ¤ˆ:ÈümίCLÎÀ8䎤ÓòN2sÍÓ@êNqŠ]„O¨RB†8Î3R™Bäç§ZCª@à⣠Äý1R–S_æÝ޾”lHÓv0jEL`ušn:Ð Àb™.×Ѝ+ ýj3©=½i|ôçô¤;Šr²?Q'ÎM"Hv©äu¤Ù»ŽOjæ+üëÇ\ãÖ‘ŽÔëœSTÊ} +2Ž·ùþ´{»ŒÞJñœ Bå— œ÷Å9°‘drIéëJ©¸üÃiâŒÆ <Ò +ŽùíNëÈãµ1¨PŒ™ÁëÅ4FJô¦ž®8â€>S‚zñ@t°Õ@>S“È¥dÏ@îjO,ý(+€{QpØbƒ¼g¯)L¸íM1é‘Onxþt ê(8'ëœæ¥„~ï‘Ï­1nÇaSƸõÇJ“ÏzéM(xŠR2üt bòG§½+Ç¿héíFqÔ{ b¹3m<ãÒ'}1+:gŒŠtG*9èNsD˜8'¥6#öÍ×RlÏ|æ‘ÏÈO|f…$°=3Í+a{÷ ehÜœ‚9û ŸÌãŒõô¨V=™÷õ©±•'ô ÃѲAã½)o›p{⚉€nƒ²‡<“ÔŠ Ñ(GaÞ€¸#žôŠp¾¹õ¥g9ë׿ã@uŇLQéÛØPH^1Á8âŒí!}E ÛQŽYß8##µ=IȦ3àž£<)áwƒƒL<ƆV“põ©ºãÖ¢TÚFáÇ~9§±%XŽHéÎ3CäsŽi'ëÓœ~TÄ#o=iÅ÷gôÉ «óÛ42wsŒñƒH£åÈéÓšnü8§^”jmI[ž ¨brÌ@½*F“cÈ¢8Â÷&€ßae$ŒG‘¶|óšI› åHŒ1€wb‹ Dyÿǧ¾jÖ)û¨¢3Áë¹FqøŒ×åÍí³Ø^:ºàƒŠý†dÊm8ea‚=«ógö¢ød~øîå#V— çBO+ráTµEIsCÐó ·ÞÄG®9úV0âñÅZ~h@¤ÿžÊýÇ$ù‡ùÒ9Ž×_‰¥ð¤›H@Ø®oÂí·V€uËú×s®YøWv²àÿ¬àöÆ=?/θöj°ž™gó¥Ð: ù[·\tsÅ~ŽþÊWm?Á-ù’IWð3_œ×è#Ôî:H{û×è7ì}!—àÅ–î]L¹?\Ô?‰¾+žëàã‘Þ rw±äzœTË•ާˆ±'jŸsн¾gìIX=ÍeG¾úà³Ù5¡â¼¹’Å8XFÓš]-#µS3`‘€ªxÜßç4 jw? ¾ê?¼Kk¡ZÅ$v(V}Fäp#= õ# õ>Õ÷Öa›eomB8 bp Àöå_³…ocðü_¢¶_ÌÍ4‡©Û€ÓŽžõì1á€==è:4’8ù±je”Ó#Þšp9Í(‘ô­®L=ûTRîó8éÔóO`+œµDÒ¹'·n§w=iê»qMá‡ûÒù 0ÿëÒ'É“·EèN:Ówg¿â˜$È þtŒJÉžœõ¦MG¯¸ïÞž9Þµ_%ˆÁ—z’6%‡¯~(^„ÛðqÛ¬ÀöãéÖ¢e''¹§(ܧ9ö }(ÞN2TzÔË€y=»šŽ5Üô'­p¹'ë@[K±r9Á=j<08ÏinÛÁ8õ¦%s‘Àõ¤=Ér=2zÓ¢—p'œÓr@sŠvÝ‹Œ}h 0ËOJRpyæ”6xô­ÓŽÝs@–£YK9Ç+žp8¤SŸOLSÔ‘žÜô¤Vœtíž8 LÝÈ'óRn ‚qL\üݨ$)àþ” 1o›ŒcžÔ‘?l᱌RªNNê1ÖœÄÆ{c­¥‰8äÏÒ—8^On•üÄåyôëR t<}( ¤Á1<õéŠQÓ¡¡0‹ÇCÇ4ªAlô1Y1Â=œüÞ¾µm*Kw犪‡qäŽ XÉ $c4ÏAÙÎGJ\œŽÃ©ÿ bƒ×€sOS»@¤WA]ÁR§˜€SïO#žµ¶@Æ1è)¡ÈÁF1“I1ƒÜÒÜïŠ|I·œäcð Z“gN)©ã¯|R€0Ü{Ž) `΂†¶20jNÜt#“Θ€¤`v9©‚‘Ôô¤Ä„N0;lÔLpÀu¥Ï#5 Üä¨ëÐæ˜ÓîNŒ z |Ù´Æ‘A#“TjíÔøïöÏÿ‘OIÿ®Ïü…|³àù ­SG2Þ^¥wþC7?õÓúÕÕÿH?ë¢ÿè&Š)”¼gù$úgûòW¨ÅÕ~¢Š)2߯ü ž:¯ùíEÇq$ê>‡ùÕuÿR?(¡ÇaéÛüö¨‡ü³úåEÅ-‘*ýåúçS¹øçE…"â_óéSŸ½øÑE1!Íþ¹~µ/ü³?QE™¢Ùˆÿ}>ŸãQ¿Ý_÷Pñ½Öuÿ€ÑE¢C÷KþJ(¤è)û߀þf–?»ùQE au¿ÕÍõÊ¢³ÿsþèþTQMÕú…¨¢Š #³ÿTßçÖƒ×þE‘/aãï¿Óúz}Åÿ{ú(¡n7ñ¿y~´åûߟóQTDwB·OÄT¿Àh¢¥îZÜ“þY¯õ©cûô4QH¥³ûÇüö¨“¨¢Š§±œ·dï÷ûÂUúÑEOAÇqÉþ¯óþ´7ú¹>´QM•Б~âýEÁùQEèŸ_ð¨-~ñ¢Š]AìMY>§ùÔÓòþtQTt#ìä*eéÿ?Ί)1¢»uç½MØ}R)‘¯ú±õ¥—îþ_ÖŠ)³8Ž‹ïŸÂœÕ (¡‚ô?îŸëL~£ëEö'º¿_ñ¨aè~£ùš(¡lKØ’^Ôïùfÿç±¢Šb[¿;¹úQE"¾Áù±ûRÿÉdÕ¿ëãú×’j¿ò¸ÿ®§ùÑEh÷1«ñ³×/ÿä‘Û×aü«Æí?ä"?ë þtQY­ˆû(Öñü†n¾£ùWÛß°×ü“Gþ¿›ÿAZ(¬Þ说} ?*‚O¾h¢µEOcÿÙbitpim-1.0.7+dfsg1/help/tour-master.htd0000644001616600161660000000076410360163373016073 0ustar amuamu#include "pagestart.h"

Welcome to BitPim. This brief tour takes you step by step through how to use BitPim. BEGIN_TOC TOC_0 TOCITEM_0(What does BitPim do?,tour-overview.htm) TOCITEM_0(What do I need?,tour-prerequisites.htm) TOCITEM_0(What do I do first?,tour-gettingdata.htm) TOCITEM_0(Editing your data,tour-edit.htm) TOCITEM_0(Sending your changes to the phone,tour-saving.htm) ENDTOC_0 END_TOC #include "pageend.h" bitpim-1.0.7+dfsg1/help/phones-sanyo-scp6600-notes.htd0000644001616600161660000000171610575414563020467 0ustar amuamu#include "pagestart.h"

The SCP-6600 (Katana) is a thin flip phone with VGA camera. current supports read/write of the calendar, and reading of wallpaper (and camera images), ringers, call history and messages.

  • URL(http://www.sanyo.com/wireless/handsets/index.cfm?productID=1319, Katana product information)
  • URL(http://www.sanyo.com/wireless/handsets/downloads/Sprint_Katana_Users_Guide.pdf, Katana Users Guide)

In addition to directly supporting phonebook reading and writing over the cable, BitPim can write Sanyo compatible vCard files that can be sent to the Katana over Bluetooth. To send contacts from BitPim to the phone, select "vCards..." from the "File/Export" menu. In the vCard dialog, select the "Sanyo SCP-6600 (Katana)" dialect. The resulting "vcf" file can then be sent to the phone with Bluetooth software. Bluetooth software is often included with Bluetooth adapters or included with operating systems. #include "pageend.h"bitpim-1.0.7+dfsg1/help/faq-donthavesendphonedata.htd0000644001616600161660000000021110547564173020721 0ustar amuamu#include "pagestart.h"

Make sure that the Read Only option in the Settings dialog is turned off. #include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-motov3c.htd0000644001616600161660000000051110454040563016277 0ustar amuamu#include "pagestart.h"

What works

Phonebook, calendar, ringtones, wallpapers, SMS support, phone info, and phone detection.

Contents

BEGIN_TOC TOC_0 TOCITEM_0(Notes,phone-motov3c-notes.htm) ENDTOC_0 END_TOC #include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-motov710m.htd0000644001616600161660000000114310454040563016460 0ustar amuamu#include "pagestart.h"

What works

Phonebook, calendar, ringtones, wallpapers, SMS support, phone info. This model is the same as the V710 with the OBEX capability turned on, which allows transferring and deleting of ringtones and wallpapersvia the USB interface. Phone detection of this model requires appropriate changes to the model name ,ie V710M vice V710; otherwise, it must be selected manually.

Contents

BEGIN_TOC TOC_0 TOCITEM_0(Notes,phone-motov710m-notes.htm) ENDTOC_0 END_TOC #include "pageend.h" bitpim-1.0.7+dfsg1/help/scha670-cable.jpg0000644001616600161660000030325310407717243016033 0ustar amuamuÿØÿàJFIF´´ÿá˜ExifII*æì2º»ÎÎÏÌFGÏÍi‡›œ´´œœ¨¦œ ¥žœº»ŸœÎΤÏ̤ÏͤÄ䤨¦CanonCanon PowerShot G2Ÿ2005:09:09 20:59:12ààš‚N‚V0220^r‘‘†’ Ž’–’ ž’¦’ ’Y ’®|’¶†’x 0100   žC¢€¢ˆ¢¦{¢¦}£Ƥw< 2005:09:09 20:59:122005:09:09 20:59:12½ @ à (D”œ¤Úæ îò¸  & FP0ÿÿÿÿ à CÀ ÿÿààà׌6€èÿ@½”0ŒCÀúIMG:PowerShot G2 JPEGFirmware Version 1.10*€ˆ€h ãÿýÿ ¥T ¸ ÒÿÛC     ÿÛC   ÿÀü"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ç­%Y±@ÆO1[™‹(€ 9ª~Z[—lä¾Ñ×ëJß»Ga&ï—?^•ðGÙ¤K¸¤‘ˆ·lÉÈë[|ò $*b'ñÅfدȎ‘ÎÞœU­“o΋tJk±vlÒ{o&áÊóo”OëK ™¹ÞŒ0Ý@éùSÔ™-R£¡ƒKml#ã‚9¤Ó¹Vв°,N†2]˜ôZ 1o0»ËŽ1ÔTG¤‘”äÔÕƒÜÌJ)Œ cš›\[ÅçJ®m£;[Šß µä©éO¶µ6ùØAÁ ¸HïW!†$&0¼ž¹ëš‡¸Â(1Ý„ò þ•*A»(¤#/ ž3ëV­DJçïgZ«Þýâ6Œg×úÒm¡XŽÐ•p¸FI‡ó­ÝŠ *+JGQÓl¸1 àÞ®Ú_ðþYÛœíO˜$®jÚ©Œ €gwô¥˜¥wî¨Só tãæ^0*@ëž„†9Z-qX¡u¦´ûš>*JÌ»ÓÚ1iˆäüë°‰u!?vŹï‘MºŠ5i"+—ÀùÇ¥ ö8ÈBÊŽ—£Ú ]ñ±lù‡ÔtÅM"+F ¶~cëL’]¸Ù‘Ϲ¤Õ„GæHAPC±•=ä°È–íšÆð1’7ò K$Va‚’½±MyŽÄ *H~øÚ*D¢1äb¬âUÙHÛÔ¹¨Ç%ÒȪÀ·÷¸¦Ãb2¿d·ŒN=MÜ™<¹#äíû§ «3BJ€§Þýj«\Ȫ˜lã :…°÷ûžI%]Ä7COÛÌGaÚåéH#x\†CŽ£žöȇËA€O9éøUz’W‘TmØÀî'ŒäcÓó¦³In¨®ÇË~îjÉ´pÞ$qÓò¨¼’ínÑÜÔj9™Çc÷wáH±Ìª=X)%S&×'-üE{ E•Žï,€GQÜŠ}kDÐ…Ø¢`G3n’,0ÁÇ~¢ƒpe6f-£8#¦Êà“’zƒßÚ–Ár„¬=@cÐÉ© „ ÉÇqPβJÃ'jãלû½GËŒ ®͓ɧ`d7ˆÃpÀèi"Úã,½Ö¬HÍ)&Ô{æªìûÌøÁla)3ËœlׇJFMèr½iÈ`#c©ê2ìŒwwå… Èˆd* œg&ò¸c·Œt£ícÕ]î7(ëþÏÒ¦AÊT²‘ŽÕf58`9+Ú£#{€‚*(@6ÞbÑ…þ÷­J😹Ï~Ùª¡Úw±(xÐÔ–ò™f8®ä»ghã&@ è íUH¥Š°?Ò¥¸Ý¿9Á§ª~ì2 šw"Åy›b§˜™ãœUI™ØK1àV¯¸@©ÏB§ ±à wî Pª`ùƒ°æ¡ž6l9Ài ‹‚cÔš%‹|x$`õRô£ÄXÞx<zT,qq‚„ô§ˆÂpÇ­,€"7ÚO$71"¨ÈÝÓŽ”ÂûI>jiSï,8±ô¨årª@ÃçéB³$‚' ûC‘¹È\J#T—•½x¥ Ë»øOlŸ¥A;;dž]Äp1×î–¢µÉ–cµ|À[ûاùç²ñÚ«Â /L ýìÔ¾Qÿžëÿ|ñªÇσ2íÝûzÕŸ+ÌV<(^©ê=ª¼Q³:²€º“Ò´¬mÃ,»‡ç•mØ´µ#…Q˜1=¿]Žé¡r¨r¯=±Ú«Ãqï·£qÉ¥ó±Ï#Æ2*.]˶sîÆöÊžþµ­ ¿Úv´|cî·ozÀ³¶,ÃË`ÏŒçh3çùÆGqBaÐÝŠåcd—!ê3Ú¢¸™$pãp}ÄYûÃ…e‹nG.9ÏÖ­XÌ®êdVÉl6)§q[©b5Ÿ*ð€ÁºœÔsè. ;>Q»<ô­fòÇËÊžç¯N?•Y2ùP… ŒÃ5zö8ùì¢UxÈÚ@=}EQž'XBï Ï Ü×Gyn·Hë·ãƒXMo ¸ToäocÛñ¬ÔiÚÕÙD0719«B‘¨(cË›±«¤‘½_.Iço‘Z4¬Ì7yC…¹ÔY‚E‹{VÀdä1á‰À×K§FÓFCº“ßÞ•€¡I­’^k¦Ó£X—cE’£‚Oz¸í“Èèðàg’½4Ì2´Äè}+Vê7FÅ8Ç%湟´$²Ë(Ì ûǦièƒ} b^Ù”à±óÎ=k[ObäGƒŒóT¬I¶}æ4|€ ‘Ík[Zm=~PzFãèW6Æ,>ðªç9ÿ•"lð}ïZ² If³ŒÅhGBŠƒq•4^IJ´vå•|p?$T¸ä7˜­v¼Ÿtó¹}GjfÌ¢ìsÎ}*n5ÜbA½C”×®i Q»É#Ó×Ò‡Úo0àà•õ£r‚Iaœ1=(ꉙü¼c¼M9bcÀ,;zSb‰‰'°æ‡#ÚE…TåË61ùÔßQ6–å¿-#.I Žþ”ɤ]À•ÀìÝë•Õþ'ø_é9¾Öía³ÊçÍyæ±ûXøLÜß> ÊNÞ2àûd Þ Õ¹Ì%Zœwg®Ü\´s¢í,@?wÓµ2¹I!Ò$æ$õ#Ú¾pÔk·»”ÿbxVîå³ò4ƒSþ¿ÅÿL¤øi,³ÀÂþ‚½ yF6zò[ÔÂXÚQ> Šq¹™ÊÏ=~•³Û,Šdެà_6/ÿ(|ÜêM¦ÆýB…@?<ÕÛÙOÆZ‹ÿÄ÷Ç/Ç9¹#ð"ºÖISíÔKñ8åšSOCÞæñN‹§¢4Ú¥­²Ži…fÜübð^ž]n:Æ3ŸÎµm¿iÿ„qG'ؼ Îã ò+Oì¬XIüÄó)>ç&¿µõ¿Í jx-¸€ƒŸNõp~ضC#þmM8è~µ¸¿¶GÛV?Âàt ãùU{ßÛ+áÍØýç‚-Îr±.qùUÿf`ÿçÛûÉY”»3%l K¢êQ ‚wŸåZqþØ~•Mk}nx L xü«=¿k…/ûÿD«ÝDKþÁûCü ¿n|&±†=K‘úÖo*¿²×Ì¥™Éo¸èíjŸ] ŸÚrAŽòÄÃùŠ×°øõà{éâ?ð’[¯¨$kŒ3ý›õщ,ÑS°äMGqà¯ÙÛÄ‹mcì®zÄ1XK'Ã=œ—ÜËY§wøÁiñÃwÌZ×Är!UMlYê¶·ÌZ+Øe=‚¸â¼f…ZÄŒt¿Ço‘òn™sôíN—ö4Ô£·7ñ×™ÈÂGrÃÀÖSÉiÛÝ«oTkÖ/K£èq:²í8b¿u‡zl‘ (Êw6y8ãó¯›dø ñ·Ã‡:oˆ¥¹Uè Šÿ΃¬ü|ðƒƒy¤.¦‘ÿzr> ×²jßòîiüÎÈãâϤÒÝÞë ”¨#¥:hÂøùû‘_6AûSø£G¦¿à먀ûÆF?ŠêtoÚÓÁºÙ¨6SÞæ2úž•ÇS,ÅÓÞô:*sÙ¥+å«8ÙŒòµ!ä\‚[.7s\æ‹ñ?Ã$U6:ݤû‡H+¢I¦bOßBœ×(J›´•ޏU„¶e›eF®JŒôÇJuç–¯ÉËvÁ¨ãqŽ_E9‚»o^Tô©¹}H È‘“æ| ò sQnVu1“Žàw©¤ 9TÀ‡;Ž9ª‚)#‘Iå;óI‘(sÙÇ9Á¤0™á~™\(Üw·c”éfHÀDl–íØP-†£!Œ^æ­Bù@P(sÔŠ®fÛ¶0ÿ€äÓ•ûY³ÀÁ£Q2ËÅ´+ëÇ?ç½6m¤ô,=j)‡’'vyãš„³£±ÍC¼òÎ1Áç‘Þ¤h™T œ£=ª¸”´l¥v·b?Æ•î8Žá†(ã:î;9Ý’Xzš«{rQ~V<1¨%ó›’|¸Ôr{š`DòÀBÜõ=MZÜ-a¾FîxŽ˜ªñ‡+&9`qÍX é Á$禟ªÒï pNqNÃzIo¶2J¶ùsOŽßc™(¬^´¦³¿'yç‘ǵK:±8ç=ÀëRèCrªÀfËulu¨6YH;ˆ<M-à U‘Æ9¤#jùƒÃ¹ÿëP>…S‘ˆ'¡ãš€HÊÅBAéê*Ã+•,±…èþuäÄ[œ–•=*ˆã!Whc'#§ù✲™0ÄOº=?*dMæ¢#¸ÝŽ@8Å ìò‡?NM;‰>äf0\áØçoµ4¨W¹ã‘Ž~µ/%•@åj<Æ|ïqíÍ+‰+”n¢,ãc÷ç#šrÛ>öàz¯_­ P¬Ü9‘éMbÈŒÊ6{šhnÅI¡¿÷*ÃG¼ŒzÅO(adýé=»Õe…äÁ(œô6GA²&éAußôè&á¤$lP~PzÓ§ “ß½&ԙà vÏ_j¤ÅÔ®ÎHOR?*UquÕv…ëÅ;`,ÅöŽÂ‘¡@·\ìC$RoÚ§ç×/–£ø¿•9ˆnNt©¥ÆOï#…h\ùý™#˜€7€½ªKiƒü=ñÞ›™2F )Þa-¸œyã•ÍÇE”¡w.îuúUË;?µ¿Ïò¨Õf¶&4`ÈÄä7cYŠÁX Pʽ ÕÈdÊ,£ ­/R¶7¬íıM0u O œgó¥¼|±åʰè fZÞ £‰²ìHéŒV¢ –»›+Ç=¢ÀîTY|Ç",îà‘Ð}kVÑšX°Ä(ÎNî;S"·HP2§ý3W¢L rOqÒ‹ØcâPBɸ ½J÷« {4“½e g½>BY@qÜUuh /›Y\òIÔ½r4›ìBRäí~Êzf¡º¹ edl<Q|ácSºG/ÈŠ‚w1«îRŽN1ކõRÀ»–…ƒ±^ükFùHŽ*ŒŸ”g¯¥f@DÓ!ǘ~`N*ºÄÅ2áX? 8Å æŒzŽWWËDW…þµ«¡_Ç)Xöç}«›’çÏÜbl2§¶kWG‘`ñ0½Í ÈLìÙc–>ž[']¾•RKÆy9`AÆþ¸ö5M5=ê¥X?;H?Ò¤{•¸ "W8 ͹+RHÂÈTÄìÀž¾‚ªÝ,~c•@ø=A«VI”ò×÷x$Œô Ðïh~R1Ÿz™jR3¤´.…œÈã³ “ËÜbq*åÎ~Ï…í–Îj´RyoÉܹ鎔!ÖZzÏ(àîÇž¾õÓAC*Æä‘ÍeéÒ¬R3©ß±p 8úÖ ÔV(œyžƒúV©$„ßB-^dH‰Ü# †°œy0£[6ràV…ÞË–¤P Œ€A$ÕJ.Â…%Nz Í»±¡,îÜNèpÀ¶q]T2²(PyëÓÚ¹Hc&ð(ä˜ðzî,c€¹ò˜0ÆA=ª•­¨›±%­¬ÑBÎÏ€Ãø¹ ÔÈægùmÎÒSøW=≅ÖVÔµ{6AÊÉ äŽýkÆüSû_øfÁš"ÞãVŸ êBg×5½:«»S‹g4ëÓ‡ÄÏ¡`U*ü¹ÚyÿõT7ZŒ6 ¼ÒG_ßv Ó­|‹sñÇâ—‰ƒCÓ?² cÃí,øìIª²|ñÏŠI›Å>'šÞ3óyŠ¨Ï°5ëÒÉkÏZ²Q<ê¹8l}â_> ðªIöÝrÞIÿ¨„îcjóMköÍÑStz.…yªÊNC°Ø¹þuŸ†¿ <õMaoææ ÙϵAyñËáσÿw£øz;§@kÕ§“á¡ñ·/Àòêf²–E믎ÿ|hÆ=J]2àlŒ³õ8¦CðâÇŽ[~µ®ÝÃõ /”?!ŠãµoÚãÄ2ƒ§ÁaðìŒ?å/~*|Kñ³2Ey{(oá¶ ôô!G ‡ø`—®¦øÌGÁ{͇ìµá'eÇŠkß¶Äd8þÐ’ z8ëô®>óâ7ÄO‰%jW+üLˆì÷8¯¡5Œ>²žKOü=‚þã$%ËÁ…ÏåÏåZ:/Ë¿cdPø{LsŸ.V0×ééŠí„±U7"Œ|Ý¿9að”Ö—oî>?¹×¼E<äMqr8!˜Š}½†¯~@i§b{ “_zé±ßü/¶ïƾ(G¼àÈ3ŸÆµ[Ç_¾ÆñÛé°jוÙwGLçÒ»¢à·nOÈáæ¤ž‡Ãº/Âkl¿fÒ¯.ÙŽz.…û üFÕÝBhA¸g÷ão{Lj?à¡:V“·ð߆쭕xVTÎ=8W”x“öôñî±4m:Ù« b$Uªö‰m½Xœ¿’774ïØdzÁçMö8Ç 0Ïé[Úwì ♋ëv0¯F_0ÿ…x.¥ûS|BÕ7 æyUíñ[ÂÇ÷×:”A9ýú¸ë¸Wk þÞ;Ó~Ù²ñG]è }ðÿâ×~$À±Â-b½ ù–×1€Ý=Ånêÿ|¯ÄÍuáë7cüIŽkÊ–i*rå­JÇoöv¶°m5¡~ÞÚ-úˆ¼GáKKßy‚€O¯Q[‹ñ{àÄ(ÂjZ"és;rè¸Çåþ>·ûx3V.ÖË6žÃ²6GäkÏ5¿ØJVgm#\L`af^1Šé†i‡o[£7•T†´ªìÿ³Áÿm¸ð—Œ#°»oº†l{w³.¿g‹>i%ð·‰Î­hœªw†€7ø×ˆë²ÏÄ JÏgÝÆœ‡µ—<}*–™ãÿ‹ ¦ò–ëS´:¬¡Šà~•Þ±4+«s'ë©“Ãcikneýv=¤|iøŸðþQ‰ü.÷‘Æy‘#+Çù÷®³Ã¿µ¯…®¶Ç©¤úD¤á’hÈQëÍyŽûrk±@¶¾'Ò Õ  JÇô®çOø©ð#â”^N³¥ òN ñá\õ2ì-my-éþFQÆÕ¤íQ4{ƒã­Å*ÒiZ¥­Ð89®™Ã¦ü2Ž2:WÏ×?²o†|@ßnøã5Šsó I°0k2{¿Ø$°O„ñÕò>¢¼Š¹+ÿ—3¿“Ñž¥,Æ3ó>“ž6ŽÐ±´«ŒÒC– Ò¼Dý­lñ-üK¤ÜèÒŽB„¦{×±xw⇼Yl¯¥jv÷!ÇÝGúb¼ZØJøâFÇ¥ D'ÔÜDc¹±Éã&£7 $…>´4R‡”Ćõã’Ѿi r=kŒéV{±Y$% Uâ£h„¡9Î9ëŸzWr‰’0¾Ýª¹™CºÆIï>:S¬Xnw“Ž;R0 C²60ÀöúUS+;¢«eG|U¦Üp8GzAa&·2Ä]œ`š-šÞà d¹«P—hÔ{88¤Y>AÃ)çškQ7mÕ‘ev¶A?JjÛù‡'+î *m„’Ñ~ówæ?¥$°¸,èĤÿJ,!Îa»1늨Ò6p¥ŽqÏ3üÈù ŒÚœ~@Ì>ÊÏ€RBÈGgãmÛ´àò¼ÿúêÌÒ¯ÆÓéùÔd»“‰20ãœP2‘\:‘’ëLuÙ*« ¸úÕ…³¿$Ž„zTR\ [qù½#±ÈK¦Žàò*ʤí8py=¿ýunâ_‘|¸ÀrG\Ô6[æç§zz‘jß÷QýÜ–ã#·Ö¢•V26`º l.7•$©=Î¥4„€™õj4cHƒ)  1'ŸSP\Ê0ÅäÃàás‘VJîݹ \àíªÒˆü²6ƒ&qŽ¿LÓØM uÛœŽ†œ2ß1ÚǤæùŒp0OçíQ%øW0VcБùÑ º‘\òNrª?‹&¢M’¯$gëVf—Ë<>ïክÀ—Ì< éŽ2h½†õ£iOÍÉîÙÿ<ÐÌQˆF {œsRÊÛ<*îõ Øä3.Ç_Z«™²?•\î;Ûo_JÊ_QùSƒGIý®)Û£?Áú Òâ>{GV8bw)ÉQ$¢E|.½º¬Qèa… þ)ñJ>fÈa‘‘Þ•îÍ-Ô¹ ²ù9^4¶òKÃÌl)ÏËÞ‘°8]ê½vö¨’FWùNìã#¸¦Ý€»Êƒr8=Å[ÞÛaaŒg€G¨¬ËxÙYX³3œnùsý*Xä̎˸ùëô¥n…-Y«§evù¨ “Þ•Ñiòᕞ<§äw®nÞUTO¾ç=·ãZÐÜJZ-û| @ œfØØÜžh؇o¨çZµ bpUXìïU »MŸ*ÈÎîÕ~ÙÖUlF¿)ù²psíY†Ä±Êb\? ŽVN£éYº‰i “"4£ƒS½ØžõUÆû œ`ÒÜ¡kgPèãp Á­Ô™™3l§˜D‡æP3‚*¤‹2ª»'–ì}°jÓC"JÃÁ䊹idè!.Ë ë·µZH„vÖê†I!S#(ù²:qQyŽ×JÇhÜ;vÅh¼b#.6·ËØæ¨IG6æ?.3ÇjMÙ…îO áØüîxî?µ æìªAúŒVj;®Ø¸Çvãþ5}-¥*ÍY@Ãc8Çb?:ô-X!@6¶2KmÆs׊éí6ÃhۑǸ®^Ûó+ÀÅ%ܧîþ©òLÒn@Òç§Š¤ì"ûÉ"ÜáY¢ŒŒ‡ê[@y’ ± [¶)‘Ý $ à§}ñéCJ=€¢‚ ¡ü(cBÍ y<£1òú To Ž%XçiÈÒ)a»” qÔ}*Í»<‘¢† ¦Nò9öâ¡«u^b²á×·w©›2*…Œ¯}â’ÝÂï+\’_ý s.øÃáïÚ2j:„;öñ 6æ>ÀV‘Œ¦ùa«2œá d΢ø(–¤`î}Žk[Õôí]FöÞÚ\¸wýy¯žµ¿ÚÄÞ3¸{/iE·R)$QU¬þkþ$a¨øÏ]hmÏÌVixükÛ¡“V¨¹ª¾UøžM|Ê="w~!ýª<5¡C5¶i.·¨6oÄiÏsþÃMñâÇħ1ièú=”‡ƒ àþñÈT·ßÃ/†Hc³·]^í?ŒŽ3\—ˆi{PO³hÖñéöøÂùKƒ­{ô°\>¼¼Ï»rNà1^wñãß„>Ç$77éw|Ùonw1=¼6ãÇß>>]ÙË£i8 ;/©=¸®£Ãÿ>|&·þÙø…­E¨Þ0ó MÌ[¸#­{Ø|›ib¥o%¹á×Ìt‰ƒ/Å¿Šï —ƒt‰´«;Lá2ØõÏA]>ûØiØ×>&ø¥Dß}ãžl’{Œ“ü«œñçíÏaáÛ¤xGƒO‚1µgTŽ:` ù‹Æ_|[ñQw¿Ô®n$˜œB„³ú_AN4°ÊÔb¢»îÏ%Õ¯‰• ®}¥­|zø=ð^Ñí¼1¤E¨^Æ0'e${žJðïþܾ/ñÉ”L¶9 å ¸ZóÏ~Í~=ø…²htÖÓíXŒÝjiǨ^¿Ê¾‹ðì#¢X´sø—PŸW˜šÿwü¿©®Ù…OÞwyèRÊjOÞ­+]‘µOˆ^(ñ…ÙßÞ_Ü?ü³‡s±þµÐø_öø‰ãFV¶Ðn"Fÿ–×í°~]kô7¿ <)àtiZ žÑ´²Ä ~uÐÌo•8ý†?Jñêæó=zy~ŸK³â}öñ ËGýµ®ÁbªZǸþf½KCý„ü`c:ö¡©1!¥Ø õÂâ¾’;xׂQŽw/½,vï+<„ç#‚¼ÉcëËíXíP„~¥ò<£Fý•>iƒåðݵÆßâ¸c!Ïãšê->ø ÍÇ“ám2Ô®ÖÞÕ!$`î<í$‡÷!FGE‘Ísºõ%¼™\ÒèÎJ†ÞäÓð:2À0k:_…Þ¹Íðõƒ ÈÚ± šìš}˜އ֠1Œ6xnOcšÏÚK¸Ô¥ÜóÛïÙûÀÁ·øVȃÔyJü@®gUý~j æ+ItÙpÔL߇Å{>]Ä~è=jÁ‚n)½€Îæ«j‘ÚL§9w>Q×?ak9QŽâ "sÊ%ÊSùb¼³Äÿ²_Ž|'Ëmnº’¯I,¤ÁÇÐÿ~\F »N9À84ô””ªî5ÕOˆ¦÷¹„éÓª­8&~gi^;ñçÂëß)¦¾³ØÜÅ8eóà×µøCö¨Ó¼Inl¼_§Çu¼m2:Œþ¾«ñ?ƒ´oÙµ®©¦Áwõi>†¾{øûX^Cquᛳk8ù…¬¼©ôö¯r†sZ5‘ãÖÉéT÷¨¾VrÚÿÂ]Æý­àÍGì·CçH‘¶•?QV|ñûÅŸ 5Ò¼_o-þž¬]`ïQëžâ¼OQÒ‡ Œeg¹èÍ 26àŽ?­W¼±²¼Œ¬ö°ÌHÁÞ³Hb•šGßJK­J(•®dK|ôg`8¯#›±èè;ñOÀox¥œÝèÐÁ+u–ÚçñükÈü[ûé×~dú¡5¿ 7?Ëšú Tø‰áÍ«\êö©“Œ3Ï5Çêÿ´¯´²è5qtOQÞ?LסB¦.:Ò¹”êSjÒ³>^¿ø ñGá¼æëGšâáæi!ííšÚðÇíƒñ'á½ÂÙköïy áZ;ØŽqõ#5ëš§í}á¨?wcc{t;°¿?ë\/ŠhÍÅq¼Wž7ªü4cŸÆ¾‚†#ÕªRº!|Qø1v–Þ'ÑTÓc82(Áú†éž ý¡¼'ã´¥×öeÿüû\§>ƒ?Ò¼—Ÿ¶ˆ¬ì³üSáõñ ‰XÊŸ¼ÇÔõ¯<ø©ãx¢éo¼?¡_hWy”¦Ð¯í‚kÏÄe´«kËgÝ‘ÝG(n·Ót„±!¢aÁVÊÔÇ$NpÁPöõ¯‰¾~Ò~"ðLþT÷-ªYp<«ƒÈƾšð?Ç? øæ%ÿL[K®7C+cÓ¥|¾#Wïk£Û£Oˆô(ÓÊà€8Îâ)MÉÉa@êzf£Šî+±†â9W8P¬ M$‘™”à:cŒ×šì·Gr’–ÌžwDX®W°ªêCÈÜmUôý*µÈRß =»SžfË2ÈÅT… b‰Õ“v Pqž*3t7a€NGS£(Гª¡hs„l‚=iØZYBb~˜éLùáASÆâqÿê¥#«#)Êÿ±)ü͘óÂ÷â1%‰ÃŒãµ$Q,L|¶ 3È•W ƒ¸±¨SÔŠŽFFÁ,rOTÜ<Ó•.ã8?=­É‘wçå½M‡av4Ô’§ƒÓvÞeã$RgËzÉl†1·=ê[YG–Œ3¼ƒ¸Æ„ì"åÅÀlyqž8=ªÂ†›jœg$S™šE”nÏ9ÊŽ•T$޹ %Ç=iÞëA4C4 3n–OAÐþÑd¤‚?I#—&)Ó_ARHV2ª¯–#%OcQâ'op*®Ñ˜{s#˜žqÀüª!Ð|£ò$“3L€å“Ð È ‘åÕn=œ …[äbY¶îVÏJj¯”¨Ê¬ryP)‰+ pŠ:1iÂr¤–pçÔÚ¾ÃZ ·'6' Ú¥X†[{)_\cô¦ùEãó6¨³–<çÚ¤Œ'˜àx;©ì46 €ó*²”QX~µf–Q„/Ÿâ¢«<†o™‡õ³ioä°(@g8æ±töTv–u8ô®‚ÞhÝU8玼Ul' ôS»°Ø‚wÙÚ28ÆH<ÀÕ"LLÌ„l•ﯫàãî%øžTcŠÆ¿uhuúÿí £xjÜÙxKK†,p&*7~¼ÜÞ|@ø·{¶»¸Ïü³ ^•ô‡€ÿdÏøqa¸ÕeÅÏœ"Ÿ§z÷M;Ãv=´vövqZ£€1é^5|Ú1ºW=zM8kUó3å~Æ·÷¢ÞëÄZŒvѱ ÐDwÉÏ©< ÷¿ ~Ͼ ðxYé+w0ë.¾sŸjôU…”*åO8Ï?CS°€²Rs±¸¼:¸ÊÕ¾&{0„)+AX¥m¦¥º*EGºŠô«qGkò3oaÓ9§°ebFÒ õS÷i‘ÂŽª_"@NãÆîÙ¡=²¬ç¶EûÀ÷$á{+ßpõÅ5[É”…Élu§ù€J7/ŽÆ= ÒÓl‡<`uDz¼Gâ]/ÁÚl—úÚZZ¢ŸÞ;€?¼ïâßí¡ü9W´µíMnAˆìà9 ûמx'à_Ž?hÝIuÿß6á |Õ†C¶0£Ð§Í{8<²¦+ß“å‡ò<¼F.4ôL§âß~'ø¥­I¡ü:±›É—÷mzP’GªÿœWCáÏÙ‹AøbX#诊߶•ž—lÚ€4è¬-cÊ ?Ôb¾YÕ1×ü;:ßiúÝà•NæF™˜¨&»W;k#‹{¥Q"‘Ø€êÊA楞I œ8?6=+ÿgߎ#â•û¬:„k‚ë׵£dÄäq‘Á5åT¥*2å‘èSš¨¹‘\۲ăÉ,z‘mÂ0WR >˜¬oIc;+1ŸçI&ï¿&hê§9µƒ6l«2yDe@`?z™wYtUÆÁ>µNóS²±í7²¬v.Øüs~#ø¿áO Ú%ÍÆ©ŽÑ³ïV„åð«™J¤cñ3ªòc&¬È‡æÚ›¶ŸºÃ¥døoÄúo‹ô¸/´ËŸ‚L*FGÔVÕÍí®™K4ñÛ®9i Óqqvk^Áí#k¡Á8ù5™YË.\õ¯6ñOí ௠‰’m^9'L‘?31ôÀ¯#Ö¿kcS¸h½ÿ¥vRÀbk¿r æ–*œ7gѾ"ðΓâ­>[]ZÒ;›yÒ%Pqøšø‹öƒýž-¾¬šï‡µ8Eº¹?e|ëÏlWhíñ‹â$…f¼“L‚A÷bPSSÃû6ÆUnüQâF•ÇÞL[ëÔ×Ða2ÚØisJ¢^KS̯˜Ó”\$®'ðÆÉàÒJñ »_Ú…Àã$V&—¬jz?ŒF±áˆn,ðùUᇡ•í×Zg¯ß\¥ä‹ÔšÄÕ?hŸhN˜èX ú(ÉZJçÍÂjnšeÉþ&üUñV1¥lR3ŸçP7ÿø¡ÃêÚõÎO'3m}p:Ïícª\‰?³ìâ¶ÕGJà5Ú+ÄÚ‹oä)ÅsÆ…[A#£ë‰è aø!£Ú“&¯¬£0<—“&¬6‰ðÓ@ÏwÃ/¾k忈WÚŽMΡ4…º¨cYí¯™Øãšv=¹4¥]GkšG ‰«Ôú®çâGÃ-™ ²Yèp:VSüqðœlV%0;íó­®“â-U¿ÐtÉóÇËé]›ð‡âN¬»í¼1vÕ£ÛüÍa,dV¯ñgTršòÞç¬Íñ÷EV;4„ÛŸîŠ~>h®Ä¶”‹ÿ¯<_ÙÇâ¤ÅAÐdMÃ#,¿ãR·ìÃñ`ǹtV#Ðȹþu—×éw_y§ö5Uÿz,ü93þ÷O@§ÑjÃ|JðF¢½š¡=öד?ìÝñbû´6b½Få?Ö²oþ|NÒy¸ðÓ.3”Lÿ*Ò8Úoi/¼ÍåUãµÏsX¼«¨Ã$e©á—†µ[OÕ'þ»ó}í§‰4BN¡áýBÓäÂÀ*4ïÊ%Ø·3[Iý×È®•Z2þ®rË ‰§ßî>‘ƒÁ¾.ðó‡Ñ|C;÷TK¸~µ±¦ücøà÷Ú#S~ñÚCc×5àz_ÄÍwH!’üºŽ€·Ýè_´uݱê6‘Ý'rÃ5”èáëé(¦%[Gt{¾ûWè·›"Õ,&ÓfÏͽr?:õŸ |Að÷Š-Ö[ F ·°Ïå_1XxïÀ>7A¡j–“IÕ€<ÿí®GÛ¼'®ä 2¬Ràþ†¼º¹E Øî¥šµ¤¿ëRÉ2©Æé’pƦxäÜwíPGQ_%ÛxÿâgÃIV=RÙµ{(ñË }{תx+ö˜ðÿ‰äŽ ù™yŒ§A>ƒµx•òÜE muä{”±°©«=f@@,g'q¦*e„p\‚1Æ*¥…å¶«ln"‘fü¬¤mǵh)T@™ÁÇ%FkÌ}™Ü¤¤®ˆ‰ÚÁq’zP2ä!ääàœŒSž)QÈ`ÍÃB¢I@R#æ&“-hDë¹A.;ÓÉîzÓ®r°àä€x=ª3(pÄîä€=)Úè:ª†fl.8ÇRk?ÍóæË|©ÐÔþµaˆmÁLl23ëU&µùw#p4ZäõˆŸ(ÙU™§Á XÈ„?ÅÜþ4GlתáT€2O9«—6‡hT‘F?ˆ3S¹W!‚&p¸Á R;Io&>U_¼~•$4q$¡HêOz§=ÓM(ó_n¤®„!‘d°Oœñ×µFg(Àµ9®CȪ"ažxã4ˆë;yn2Tt<âž‚êG##<)Ç,O_¥5b|¸Î{ñSÝÄLjU`sŠˆ@ÈÞc7\uXˆÊ®í¾?˜qœÓ#“òçÓ­)ŒÒ˜S$í ù«DX{Ã)ˆFÂp5ÿóÕ1NYƒ!R9ªßgóÙ¿*i…£P¨ÇvöÎzÔ“¡2dä¹ÈÏ,˜œãh.0G|TÏ2¬Dîi w~µ»hd¶Ñ¸òÇÊïm' úý*Ð’)¢*¦_…*ÍÃ*¸Zr2aÐÌN=*Zhä­“HÑ!ÕÍ9mÂË÷CíèòiÖù1³Iº0xÇZ$ŠŒdd~oQP›/añá##9y'±©c-’Ž¥·£ üj h”§Ì2rI«Ð É‘‰ :ÆG¨¡êRZ¥V'¢ã‘ÀÏzE&42RIÀdu¢IžM›\ˆÂõb¨-· ˆ£nsÎ99ô¥¾ƒeÂC"ÈÅx Œ“ïíZöÑÇd#û¤(äœúU[ am›—;Û!Ür1S\8s4°íg# tÔü™$—lÊñ¢Ÿ,ÿòAïõ«Q1>vÁÉ5^ÂÌ}–&b<ÂsŽ T‰ ÎòâF7chéŸJVÖÂe–Rñ!LœáŽOÔTJ¾ZÊeFeûÙëZ2éÅmDŠv•N{óëT¼‹s‚œåwóJÝ2;‹µ*7(PàßQëÖ™e™á ¸©ÜTŒ°ü;ŠçgÞ#Ž3´gÒ§µ@I'y8íÓ=)ZÃ.é (‘-Ã+®'µA­x’Ã@´’}Bæ+8U7bú ל|GøÓ§øQ[OÓÏöŽªíòÅݰú+šðçÁïü_™uÏß7E6ÙŽÕ è{<²®+ߟ»畊ÇB’´^£Ø=+[[øÅàÏ‚útš?ƒ,bº¾Û±¯Xn9õ¼u-ƒ¿ò¯{øUû-èžX/µ§[ûÜåºüŠ~ëÚì—û61 i»j*(W·ãâ3Uv©oÜö0ùe:Oš¦¬óÿ†?³7…¼åOyö­ø‡œ|«ë^Ç-¼6vŒ*FPª1Œ{Tv›x/ïÇÔû…eP$`éë_=V¬ê»ÍžÊ²VEx-q+4j¬1’:UถDØOçU`‘ƒ0Ž=¿)Én‚¯ÛÉ%ÄXbHW±¬ lKwYWÌe‚òE+ŰÅŽ=j@€]\(Æ yâ¤ÀŒ¨UÜã€Ç §±0±•œÓ¹©Ö<à`GÔl»wo˜á…ã_é~ Ñ¥Ô5iÒÚÔᙾföÖ„œ£¸¥%©©ªjVúe¬·2GŒn.쯛~ ü{×~!j¿ð‰|<·73HÞ\—È™ÁÎ>SÞ°å¾ñ¿ícâ•Ò4(åÓü5iTº÷,}1^»¬ø³À±—…›NÒ WÅì›d˜aŠ6?JúÜW)UÅ+ˤÌùüV?^XÞøá/€úwü%Ÿo“Q×›÷‚ÖfÜźò3^ñûöÃÖ¼|Òhú 3EBUa…°6û‘Ö¼ÇÆÿ$x_Àzb«\AoáG Ø ¹ðSâ6Ÿñ_Æsi65²BIJcçŽGç_>ž'0’j'·í¨a)Ú™ØM ËÁBv LSáðü—)qŽª«Å{U·Ã2Ý–Iåy@2œkF[ïøVßs5½¸EÛ¸ã8¤×¥K+¡wy3Ì©™NKM ×¼ ¬iö’\ÚÚHŽ)¸px¯†¾%|Yñ‹ëwZ}Íè³HÉå@#úU­üJ¹ñ”ðxkL}@}ßµKò@¤ÿ¶x?A“_)øßöyøgáÝjëÅ|o]\Èdm6ÖQº ·áŠïŽƒ•ä­ø³—ërzMŸÜkŒÅ®îe»‘G,j埄uíUCØhZÔoÑ µvñôn­ûY|øsÙxáäzŒÖònKÉàXƒ{î`ÎJâ|Eû|xÛ\…mt½#IÒ¢$„U¦|ƒ“ƒùWgÕéÇHÇïvüÎñ ¤oø™Èé>"jF&OÏgƒpkÙR pÇ?¥tÖ²‡Š Ž5]cJÓCn>cÊAƒü v=ëžñGįŠÚ†ŸÕ߉ç¶I+‹@¶PækÅuÍXÔn˜ßê7—nOÍçÎÏŸN¦£’i÷™“¯Qì’>‚›á‚td}oâ ¹›?<í8úfÿÇkÄV_ ííÌV¥y{?O4ïÁüÑ­x!¹+.’GJ½otUÁ{f›Qf.¥G¼Žÿúôþ×c¾Ógsn\ò+ëÿ~Ô~›E´{ÙXÜ•Ub£¿©¯…m§{•mÍ•#¥{‹Zk Ù_¼ƒ<×™_Oý㾆6t£cŸfð%–™>—wk{› ü¸ãükÆSåäú‘ÿÖ¬»?í/x~ßC»ŽKÇ·Ûü¹*½ÇJé|=ð-¯'·‡P›ìvW–IŒn ~5|¶•(þñjk[9ÙÅØÜø‘ñËâWÂm*D¹j`Mn¤ƒ»äš?„u zÞ[3’1]è<ô¯bÓ~è>¿†îþHîì™ ¤uì‘­ 2ý°µíWrÙEœ\·Œ ñ¿|gÖ5–v½Õîê¡ó^áØkÆþ"†9µ­R.&ÆbtŸ–Ez÷…`ÿèó!Õîîu)@ Al)ü±^mLΔ4RûB–Q­ä|]/ˆäÔe5šêFôÉÍoi_|Yâ¢Ð/VØ.ï7É cñ¯Ò | ðW„¡Ž-3ÃÖq¨ÆÆ gë]ÜdÀ‘GIÜ ÿysÍ›—»ú³ÔŽ_B ÏSó»áG‡tkE»ÑîìÑ55Ü 8Ãf¹þévÿ,ô}yäµÒ¦›cMÁôæ½ÇöŠøw'ˆ¶þ%Òã1éwòn «õ?rÿ4x|O C­ZàÈ 1+Ô­}:±ÅÑæSç*ÂX`^G·µ;clñÇì]á]SM•´}úeÉÎÀX•د¾!|ñÃVH.ˬ!ŽÙ€%}kõ2õS»×šåüYá]/Å6/a©ÛÇq €yú×¥CR“÷µG=Z0®­?¼üâð‡ÂßøÀÄ¥ ¼˜õk&Ö?Oþ½h\Oão…Z˜‚þÝ2d?rpvŸ¡Àײ|LýŸuoâË3YÆÛÌQ“¾>kWÁß´‰šhð×Ä Hd¹#Ë[¹PnÜõ¯­Ãb!^<ÔßÈùlNxwûØÞ=ÑÌx;ö¤u‰-¼Af—±µÆMz>øsñŽ5…ÔzeûŒ…8\ñÏ‹³×„Cêº ›ý%þe+ÎxÝŸˆ/|?yº9$µ•Of#šéo—S‰S·½FGÕÓø{âÁ‰LšmËêú8?svà±í^¡ðÿöÐüJb²¿Oì­IWi†àà3{ýkçß…Ÿµ~§¡yvzÊ.£`ß)sÅ{ï<ñÛOûg‡n£Óµ¦¼°ÁêàÄ`¨bUä¬û¯Ô꣎©FJ3Ð÷k{¤‘RHdVGxAúF1Ú‘î,zõò½·ŒŸçÖ@}£€LŠ^œóŸ¯åOvI‘³‚ùä ¨ƒË‘²JŽ=~µ*4;Kl!³Zc%•œÇ±”4xéšÎÞgs´Ž9àV'!I"L+tô¨$}q¸ó‘S¯Qj@Â0à³G¡â™ÌlØPc?ÄÞôà$—P#‚Õ$Vë *àÇÞíšLD¾b’å[z`隤fÕ•Î<Ö¤SäÀÊØPOÔR|à*¨ç©ïŠ9euŒ!P¸ç$rj¬Î>aŽWùÕ›¤V’7Cµt5±nv–ÏsÇåW±— ù@nõ aïSÊr|ªªjvàƒõ§è#ç5œ®Á”îž Ó™Xd»‰ÜLûT`ùXä ßTÑD¸BxBr2N+pVh°Êʹ0•À†Èüªh‘c¸Ó€Z‰\HyçïJµÞ[8(;ži;Ük}G¹cÆâr¥ZIVMæ08ƒþÖùI ÍÆ1Æ?ƬDÛ)h°Á¹Ç§­BEˆwI4[TeW“ëR1*•ÜÙÀP2Ò¥7*—L3•UÇò4ÀSp „p{šOQ¢´qùŽñm,rrÿõÖÍ•ŸÚ$„ 7GîeïÇj©ef늈FNwœÖÍÂÛÂÑ@0Ägyn‡ü)ÚÅ]\©(U°›¶GÌ ¦YÆÍ,Ìã‡#ÓJo•J³ýölòÒ´-"s…ÏïŽÀü JÜV²/XG,">#Byà·A£ ¥¾nèòí8ýéÅÞÑw#¾G|Sõ!—´žj+n  {ûVmÖžñ¼NÍŽþP­hb&À"Êgs r=ó\ŸÄo‰ÚGÃû%Ì‚[¿»‰NKzqWJrQŠÕ™N¤i«²Î½­ÙhZt—:Œ‚Þ%|0œgñ¯Ö|uâ?Šº²è¾ ¶¸†ØrË}1Ð{ÔÞðW‹ÿh]_íz“>ŸáØ›yCò \õ>§ßø¯âÇ…gý!´Oà ޯ·kÞ&0q_[ƒÊᇵLF²íþgÎâ³/r™_DøaáaÖ|YpšŽ¶Få·î;½ëÊ~!üwñ'Äûñ¥é½µ“‘Û[‚:déz‹~•p§:³Tà®Ù”æ©®iŸþ-i? 4¦¼¿•e¹p|›t?4‡°Åxoƒþø¿ö£ñ!× ê¿µ¼}ñìÙé*|ÕYŽÕÀì ŸÖ±þ>~ÔââÀø/Àˆ4ýå4°ü¦^Ç>ƾÓ† sKZŸ‚>kŒ•ir@î~/þÒ>ø% |4HÅÐʸÔ#ÆâÝõ¯˜|ðóÅŸ ~Íz¯ÄkÔÕµÁ-¦•åå=Ǩ_Aï_mø[ÃOƒ´„Ót›$µµˆp¨£'ÜšåÆæ •ãyw;p¸ÞVWg!ð“àw‡þYiºÔÈkÉ1¼ŸoAÅq¶¯©é>³{K™m ivÉå1é’? ÷À¡íŠ‘¼“×¾+Î>>ø8x»á¦¥F%{eó“þså_9N£u£9»êzÕàÏt-xËÁ±º–{ÛwÄP)ÜòÓŒòsí^Áû?ü%ø½àÍvÓĶº*éÖØ*WTœDYÜå¿JòËŽ–5¦oáÿC£ÜY€Æá6å݈€£¸îOáXÞ-ý¥þ$øÂÔÙ]ø¢êÞÀŒ}šÇ!Ø?‰¯Ð¨ûšÆß?øÄÕ©¼RûÏÐ_üSÕ4(×þßé‡hc»€äw¹òS^_ãÚûáGƒœK¦.¡ãMyN[Êýéþ†¿?g¹¸¼%ä‘åõwbIüMEJÁ‰8s] ªíߦ†ºÐú7âíÕñÇ+-®•$>Óvy~|Ö_yŸûç󦥫^j×ouu-ÍÌŸziœ»·ÔžkÑ<û:|AøŠëý‘áÛÉ`í<©åÇÿ}6å\g|¨ø#Ä7š6¯ ¶¿µm’GœàÕU£RгÓȧ ZíýÄŠ\3õ­ ]F9XaLž+;!$qšlײ)¢×‘õE†›á}KàÝìÚ´³Ep’Xª3䇌¯÷xô9ǽx'Ž8gEH¶69f›áŸ8䇕ömLÇê+ VÕ%Ô®ÚVc¸ö=ª,ù®Æå} Ù$“Ö•.FÑê)$n¶sTUðzýª¸µ:+;ô@CUÿ êði0Óo§Û,€KŽ»O_Ð×'çpqOk“,YnR1U{GØzŸÅ¯h1Á>Šªn—îÈ@<‚+›×¿hýUN˜jŸè’ @ÜÿZ«ð+àæ‡ñ‹Çw:­ìŠ#@á!8Ôf»?ƒŸ²N·ñ óRŸÅ‰y¢Û§ËBOÒ¾šøû,h¯¤Ô­¯%Ôu÷²œz` ñ±9„\c-O —ºšoSoÀß³wÃÿB­g [Ë:Œ¦]ìÍz)Òí,mãð"'AjùþUr’;),ªvã¥6è7”qó0?/Çá_1:’ŸÄîz÷¾—3e ¸ª¸\‚GJ¡‘§bÊ\øëþ5¡0ÜàÁœqšˆÚùËÎG9ïY¢®D–‘JÁÉÈ?ÁíZ6ñ,©·i{œÕD”ŠÉÛŒgo?ýz±nÅå·ºxÅQ ³øÕà¾"|;Õ, JnV2ðìæ?*øƒáõô—·Ú îCź2¯Øƒƒ_£ñ€cˆ(Ãx¯ÏÏ/ü+ß:JZÞ0¹hÀ!Žê ükèòjüµ³<\Î’«G›¬J?|Y'Ã?Œ‘D\ÇktþL€ð'Œ×è]¬Ív›“ ¬2ô>•ù‘ñ N›â{]F S,®JýøG¯ü<Ñuêd’‘×$ RÍé(ÉTDåÕ\¡c©™ü˜WÌ]¹þ/Z?x„äJšá¼ÕÀÁbz7Aôª¦E©=º1Ò¾uÒhq&Jƒ´óÓR`Ìàü¨)íjåËÆüœ“Ïò¦/”7F®¸Èç=JCe‰V0›Ilä·sKœƒ•ùñc5_Κ3µÆäíÇJ”Ïj‚;ž„­õ'¸·ò_Ãc`àiäPѺ£{ŒT +äïu‘O@; î#‰qŽq×·ÐTìgÚY„Ž9ô¨š8çvÉÀ# ×C ƒÏã^A$d˜y¨ª¿aXmô #›77ðœýkÀ>5þÌ–Þ+yµoF–zùŠ)¹ÿú%™N6íêN9ãúÔÈW¨ Wç¿Ò·¥Vt¤§a4¤¹eª>ð7Åíoᦡ/†|WnòÙgcG8ÎÑê §|Pø7¥xÇNøT¬±0,ð¯$WÑ¿~ é,Ù¦)i~£÷ScŸašùNÞãÄßÒ„±˜=öõ‰ö¹Cì@¯ŸMÒiêA„–O›!€Î{JÃG!*ÙÈç=*ÓFD$võSëíT„ÃÍÚs»°ê ;ö!Û+ïÛó. ª(ÓÎʰ—Ÿ­JÏ#>æ_,(àŽFzr®bùæîþµ>£Ø‰wÛM‡`ÉŽ²iFø›ƒì¼SÌ[7õ=qøÒ£—œ×<ÓÜ›d¹ŒN %A<)短…CµYûž£éR™âe8ù°8ã‘U¤ŒKóÀ¤ÕŠÑxK–Mø'¦ÓœŠv÷•#a'lw¥á0C!ã¡© ¶WÀǹïNäY ¸Ã`U› ÇûS˜º¿÷ÝJáŸiÞaí)QØg§éU{‘k47™ç˜·y±ªç>•¡dHÁ`Ë´áqÀ5BÇ™$e†@C”nŒ{UÖ\ÈÅÉp<{ѱH¹†#sydŒsVd2Ãå ©‰¹Ý@ªˆÀÌÍòîˆmaÔҀ̯L<ÜüÄ©íôíS¹C²ªòMÊÌå­x ~2Ùª°ÄûJ*ù[Ÿj¾{~½b]Òa,y>ÿ&6ìVe6êŒN\üØ_áªÓ^$ærqæ3òãš’I°’Ä©áP¢¶ó¼c™})Zã]ÉíI[˜ƒärÝÉô5Ñé6.ÿ½DP½ÈükÞÌ›†ÞìHä/Q]>j°@;FÝØþÓHRò%Ô$Àwp,¿uqÏjÊ Ï•‰t'o"®Jë*J<Ì?(ëõ¯ø¡ñ€ø]F¡0º×$%2ƒ;3ÆMmFŒëMBš»9jÕ(ÞGAñ;ã%ŸlZÂÙ¿´5©‰U…ÝÈã>˜®Cá§ÁkÿÞøòé­ìW÷€ÏÓ€Õwá—ÁË Ù·Ž~!Íæ3þõb™€g=xùWñgãž³ñgT‹BУht¸Ï— ¼|WÛa°Ôð¾óêû-[S>H?ÅïÚ9E¡ð§¢6Zr~í¤„a¥ükšøkðû]tÖüDí Cˆ›—¯µwÿ¾ÃáAoªëh—zŒ£r@ü„÷5ìŒÊ#Fs…c?Jñ±¹‹w'ó=œ_ ôµ‘›áýßMxaÓ¢KxQB„AŠèžXí&C¹Îv=µH¶¾TŠì6n\*÷ö5U›Ì"¨.¬71àÿõëæå)=ÏfÈq$Ë `¶3J½Z†È‰n¹úT6¶²e¼Ðy<sŠÔŽ8Õ?ï\qž˜¡D90ÁË n—q«ì]É >æ û@ó]D¡‡ `UkÄe»W¸/ÌÄs‘Ž•"zš\³3n>`èëøT¯rÑÍ·wïAÁAô5JɤòüÂù°ôÅ^»‰¢ÆÒåç°ª¾ƒ³-éÅ"E'‡cÎyÇÖ´Œ‹·–A‡úV-„‚Ì*“vç­y¯Ç«ðþËìVd]kw#ð nxÉ­éÓi*tÕÛ2©5N<Ò-üløëmðçO6%ouëŸõ'%OLšä¾ü[…¸ø—ñVèÇjs2C9å‡Pì)> ü·Ò`ŸâoÅ)~VýüV÷\õµy?Ç¿º·ÆM|iZO›ùVÖ‘w©¯¶Âáa†šÍîûy#å±牟$ /ÚöÔ¾(ÞøyZÃÃÐ*!Þ:@ê}«©ýžÿeó8·ñŠ¡Ú¹Ce ÎãØ¿øWAû=þÍ0xn;]wÄpyÚ–‘[D^™õ5ôwž²GåŒ,cŒ(Ư˜^ôé?V{<h.ik"Òìm¢¶†(áT"¢€zqíPßßÁ¤E%ÝÜ©C¬ÐXd*Í„YŽpxÿ&¹ŸˆVãSð½Ú¿Ì±ƒ&ÁßàÅ)Ms=Îù]&ÑQþ*i²JÍjVhÔç€HükÖþ- ^ÆêÃìï#·‡m¦­×ey©ýH#ò¯¸õ½Q4Ÿ¥“íG!› cÉÆ:^æ¼ëöøð ø‡û?MªA 7ºS%ê2v¼?ï’kš)ŦÞä)ó6š?%desU%|goCéV'@­À$Ч+ àõ¬$­&‰ÙŽ´¸0ËÉÁ5u¦.äõ÷¬°T8ÅZK°óÐRlC®eÊäŸÂ¨I"€O~¢¤–Lž*¿Ý$õ‡½+2¬H®dÍIrã¹Pfr#pAÍ11›e“`õ>•é_<§üJñÝÖžå¼¹-˜¤€‚WðóIÓ5ïi¶š´f[9n7àá«ô§á÷Âß ü7±4m6;`ê?{Œ»}M|î?é^:Üúl¿NQçgËß cíSVñ…ä¾2K ÑBÈf›ò¯¨~üð·ÂXfD¶hî¤û÷6XLšô‘ðY#g¥Bã~ã´’K\×ÎÏRª´™ïÚÊÑV(6ª‚øQÓéû£†UÈ Žxïô¤F¯( œñïI$¦FË|£QŠä¹($ºC!t%÷qÞ.õPåÔçvÒy"¡@' »†Ç5z² ÿÞ§¸ö"ÙöÈÝJdCb²º€ê½êãB˜ejœ…z l¤UiMÀBßxpqÅ1‡œ¤î/Ê޵1…’ýXœU[™£‚E›}ÓëSa“[FÈvÆy=sOb™%ÁcÈ x¤ŽF„©l)?Ä9¥`óFLNw3ô W•ä_˜l㎀Uy­äE! OÞjøvD,Xm^3õü*­äÆ0o®j—`¹nMƒÍÝÈÆ9¨îd`£W¹«~b0UˆàcûÕc eÝþ±ùkAد¤ò|¼œg ڹψÿ ô¯ˆš ¶:”K¸Ñ̸ܭŽ9í]#Ûy p0O\sš’"páTò·õ­c&š’ݱðV©¥øà‹\$¦HçË”ƒ²EÏó­ïèVŸtdñ)·¿L;$M´äsžµõÇÄiß|5.Ÿ¨F’®Óå¹äÆ}E|Ky§ë_|^Ö7Jí¦Êß#°;}E}v_öëÙÔø›Ç`œ_·¢½QÇ3â¯ø¥¼K0U¶]‘¼§péøšÔø×û4Úx‡ÎÕü>«a«Œ¾Ñ÷$ö"¼#Ä~µ’þÏÅzS2la#Oá_SüøŽt8¡»f{ø”«¯¨õ®hü<¨ô‚ç{ˆ¼3âÝêpþî)Ü`7n}ëè%ܱïè®xô¯žþ)ü2±ø“ xM•.Áó$ŠO~óZ~6I­ìð߈ËÕí†Äi  W—˜à9oZ’Óª:0XÅ$“ØöËŸ–@¬ '™t3*œg5,’«33& %Òyq€I ã>Õó–¾§Ð'}JaLeû½Ëò)|´I8%}Ò¤Ž¿0Ç–=è0,±±'çœæ–€Bñº;sÔõÅ2K`…c Ä·j– ð¹PÀFGaÒ•@æLo^Äž¥,-m$˜Ã™¨U€™ÚXå¸â¬Ï2±‘ƒíåþ•^g‘åù ýò¸Í HtÖ¡ÈÝŒŒÍ=a’ß ¼ãj&•ÀÜ 8#ëS±wFÚÇ'ÔS!•„fåvŽycÅHß_ûèÔ‡n=Û<Ó~Í'÷GéNÁsæÆ¤0IÁ÷ÅLì‘ÄÁ[q=?: £˜ÁV'Ù‡4–¶‚Þ9ddêq“ÐVËP5,wUdT``ãoµf)FíÝz¥i ˆb9ä{qRF ב&1Á8>ÿ…7q¢îì$¬¡•»œu©íf *¸3';zæ©´¯fIæ0r+VÑVè™ *là'éïSt‹Ü·oX‹8 êx¸öª÷×ÙS½›†Ú£vHö©.o’DV ‘€HÉÇ­Shã¹.©'®îçÚ¡±Ø‘f+4,Îp%qž=~µd8(»‚€NA÷þ•ZÊ'ŒºD™®ÒNHëWm×ÈØ¤‚yÊcŸê)ƒf®›9ĸ€¤·P=«j;…R›œ2ÉSƒ\ØAj„—TÝÓô¯6ø£ñb{IAðú‹­bàyGjäÆõ®Œ=â&©ÓÝœõjªQæeŠ?§Ò¦—ÃþSs«Ý6ÀSæ1çÜw­o‡ ´¯ƒú/ü&þ?u¸ÔçS,VÒŸ˜¶22 l|1øc£|ð©ñÏÊ^k“)xmfåƒFA¯ñï|Eû@ø×h2rûc…r5ÿ ûj4©à)òÃ~¬ù:•*ã*ò@µãψ~#øóâ°Ø$‹g»l6ñ“µ”Ö"áš'u3€ ã5eJÚ±•铃øR´+ö‚ÙPä ‚¼Ÿ¥O©] ¶Pýž,m^qŒž´öhRvf–ù@n Ó!Y$Æö!CdW#ñG⟀ô[›û­¦EL[¨ûÎçÇùëU¹ÉF:¶e)(&ÙñkâŧÃÍ ¤}“ê“å-­ÔüÄö${W9ð/á KñOânï²ç͆ ú1êµAû;ü›â߈gø‰ãÙL‘3"ÏœrÏoZä¿jŸÚoˆºÈð߇³…fÞL1B0À¯ºÂac—Óï7»íä|¾*¼ëÏ’9ûC|}Ô~1x‹û3K•ùVÖ°ž1œzõÙûàD´‹\Ö¡IµYh£dB?©ª¿³ßÀðý¼>#ÖíÄ—ÒFd†|±Ž¸õ¯ lR&rÀ‚pªz ñ1ØÞgìé½cƒXxÝît·^VÒJ䌒{ýTvóÚ#œ·$T”M¹JœäàúÕ°‚H2.yÈ8æ¼&ÏI"Ð&eXðY>^sõª2Æ“[´/“æ¸ÁàÒ‰]åû‡+Ã1?­,²´p«®H<=j/ØVÐø§â„Þñ~¡hñâ?0²} ­{ ÍÎÂ3Q;¸/oóõ®Óö‘ðó¼Öz´H@9ŽB={W‹Y)IvóNõ÷Ù}_mAy¦éVvêië:Ž¥§ÜÚkör±¸Ò®c»ƒ±ùX~ _«¾ ø…aâo†Ú_ŠaZÊæÉ.·“Ø®:ü»·ðÕåÕ“G4m ¼ˆFé8­}aûø–=áæ»ðûVÛptyÚ4ŽC@ù cÐr+Üv©FßÊÿÎâÍ«ßÛ—L…Z+}&{©sq€…cp9èG5ìzÇŠuÍVßL“HÓݬg ,³)ì=@…áoÙ›Áþñ-ΧmaÑM†Ky@e‰»•Èãð®ïÅ:¬þÓ!û ±‘NP,c;}8¬Ü©h©ÇSg3ñîy¨Ámyo fý_J—H³Ç µ=6ã÷ð\C,lAíÅYÒ4ë¿i×–zê´–ÌUýÒAíÖ·<9á; [4õ0ÁÚ<ü£è+95â÷%&ÝÑøeñÃø'ÆZ·:{+™"à p¦+ïíϽ}uÿøwÿ·ÆA«Å[Mb&à8󆑾BgažsŠÆ£»LÑØc/ÍZî<à{mfÊ[‹»¿ ‘û¨•rÒßä\8|€ {gÀŸÛøÅš»-¤:šéó,ÆÒcò¾8Æpp}8ëS7fÁXóßxHéÑ»ÄKûÊG"¹ ›ºu¯£h_Zø×ÅZïˆì´x4KMJ_2;XH!NÕ°äXð9'ŠùÕ÷o8 «Ù ÚúWæÏ4„´ƒñëš<¢Ìsò§¿wHѯµÛ´´ÒìæÔ.\à$([ùVr©­NŠT*Vv‚6¼¯sâ="ÊÝ\ÞMyM½q‘þ¿[´›A‹eæ>$XT®+ãïÙWöa½ðþ¨ž*ñ<;oc¶´'%=Ͻ}ˆ™R…P  ÓñùxÖšQÖÇÖá°ò¡nZ °ÆT·òÅFUö0Bã®y&­Æ±Î(3¼Ý)®â6(«óg¸Åxö:“)¬dÆÄwÇt⢎"$dœ÷VÌ-v$Œþ4Á—^FƧ¨î@ƒË”ª…ëÈê+F Ì ÆÒ³¡DŽ Ò „ž¸ëWÖ@TaŽçKBd>F*~Põ¢$Œ†Ën §ãJåTcÛŒw¨¼Õ`&2qÇô«ZI<>qÜ@À/§ÒªÉ.ÀezqSLÌX.0:µŽXlïá@äU!¡c“.Pr>œWÌ·Uò x~ÕOïë8Ç\_QˆÃBÉ$b¾9ý¶uUÔ|Uá#‘iX¹'¾æ»°1æÄÁ#Ÿ+R“ò<«Åÿ¹ðœg*:W¸þÂ+³JñÚ¬Ð`޼ ð?ˆ3›}Ö× TWÒ¿°î”`ð.­y·™î°§Øþ°¯¡ÍgjLðòÈÛSéFF+ò¶Ìs·¥2Di‚å@9úS•Ž ÆsÞ›½Ôry>•ñ¬úd2â=Å~l‘ùT,»Ã(ãÔŽsV6àãv{dÑ«!U8cÎsR4ʦØ2Š®ðE#|ûTã皚YB’Ç 9â š#$ƒûÝÉ?¥MÊ»#-ò>?Ïõ¨™„%|æf_áïOwÄ®i^¾†œÜáÛž3À£¨y‰4î†DÎ~• Jdß¾<¶x9⤞w„Œàö^)ÞJ’HnàSSvq·zoõQ$«Ê ¯cÀµ,ŠYŒg$ç`Õy_7Æ Íc„n[ÌV-؃ÐÓ¦…\‚¶¨­÷¼2>Î3ÉÝùâŸ܇;²ëÙ·túÕê…bHÑœmÂìQÒ¸/Šÿ í>%xRk ¸•nYà˜€ °é]ì.7ÞOg§øS'Qæ$ÁÒ´„Ü$¤·3gç¾}{ðëÄw~×#o$±A¿§ "¶aÔo>xŠßR°’Vµ,5FÀ籯~ý¥>Cã]cO‰WUµfð ot¯š|!¯&³i.ƒ¨· ò¡~ ×Ü`±QÅR´·ê|¦? õyªÔþ}·àZøÓBµ¼"˜ 3Dqû¶År¿>ÛxêÈ\Û„QƒçŠ] îÿd×€ü2øŽÿ ¼DaÕ.·[K ‰ÑÏs€E}wgq°Ewg"Ë®P©ìE|Î.„°Uù©íÐö°X…ˆ§Ë-O“< ãÍcá_‰®"ÔSʳy|»›Þì¥oünøgÕ½¿Ž¼Åc8”˜O({ô¯IøÅð²Ù6¥c ^ÝIÆ9zWü)øÿN©/†5¹<Ë ¢RKg'x:ûᇊ ñ†K }å£û¥O88¯¢~|@±ø…¡[ßÛeۉОT޹Zù¼Çì%í)ü,ö0˜•4¢ÙÕ± UBr«žOÒ Š²?Þ ·$óùS®ÑZåX§±8úÔÐ˹X8 Ž8WcÖlb©•öœBä«pÇfÐß*žGsVæÄ-¸Çæ\ô¨ùå±³?§җ ýJò¯î÷(?6(OÞ°%€Èç=ji•—åsô=úš¨ÀBì@V#8+CwÌy`LQñÆ›$ Y‡ÞÍ5dmŠç qœÒÈŠ•$}þ¢›ÔÄòy„Qär*¾ù;?éVÝ™ã+»{uªd‘¹Þ9úU\[>¢+OÒä… óÅ:i–8‚ü¤–è Uid^eù p3š‰'ŠHÐmo0ž‡­k¸‹-3Jd °8 `uÅX‚Qo*ÊçnÑŒg‡µR·Œ[’îs&s·¥]ŠU¹¹_17 ^ ôÍ;ê5±=´i¨AµØG½ø$ãCWÚ³G¹ÈcàÈ2}ÅGEFJGŽÜœêER…ãHª¦8Ëžs‘Ÿj–Z} $¸IŒ^`år@S‘ŸOZžÚ×h³ùº¯_¡ªÀ¡+´’S‚všÖ‚häŠ8÷„pIf9'ÜT h9ÎåI)…ÉØHþTèØÊUAÛƒœœý C*-+l© `õë”ø‰ãKoi¯$&95 q䯣–'¹¥:s©%+¶gR¤iÇ™”~(|Oÿ„~Ðé:yiõ©Ûjo¹žäWoðWáFðŸÂó|Hñá  ßoÏÞv=0 eþÍ¿´åK¯‰_fXtûpgŽ;ƒ1‡!F{W›|øß«|wñ˜²Ó£x4x[Ë´²‹ QÆN+îhP†_K–?Ýöò>N½j˜ªœ‘2¾'|Iñǯ¼ÊílîVdåQsÇé^½ðÃÀv¾ÑLMk¶<§ƒ»ÐVoÂÿ‡Ö¾ Óã–ES©IÌ’1éì+¼s¸nWC»k汘·UòGoÌú&8hù³zÖiH*ÍtVãìñåÜàã ÇµsV°¬òn,û¸\àû×M Ž5È%F7z òÐíhœC”r’C´‡jH]™ÆÀ\m/_­2îXÌK—ffÆsÆ\¶‰f`Ñ…Îx`}qBóÔ«q¥ÜL’}¤›vÈÀ¨õâ¯ÚBÁ$BÁ‚©åy#Šœ‘=ÄQ‘¸÷qVMž‘Ž6Û¨ô枃3íÔÁò ×4Ù³#66H Nµ\™ âFP äc§½*܃¹vî9  !Ü®¬²ªåÆAê{b…‘¦,8ÝœßáR–2¶nrzÂ’åÅ…¼ŒÌ:gÌõ4™-Ûrޱâ[? éÓ^_Éä[B…ÙÜóœtµà¼!«~Õ?Væc$>±rùü«êOnj‡ÄMSøáã»?ø|™lP³Ý|I×›]Ö>)7/ü¶oO¥}³•¾Ÿi ÐìDQWÅsãñŠ?ºƒ×©ÝÂ{%í'»)JªavF« qT˜·©#–ÇÑ]Ú€†ÎGçÞ²¦³!T¶Þ[ ¯™±ì"¢\–2ž™«ñNñ@rŒpA橼!ˆPªˆ+ž¿ Ãb¬qŸîÿž)\¹yå ;Œ‚0ç­håb‰rWï)‘¢¨)äw¦<‚Þâ6 w±ÁžÕ=DÌ_ˆþÿ„ŸÂvap†D 9 ù"Ç\ ÞÈñÛÅ5»eçojûp1ftbC0ÆßQô¯Žþ6x&ãÃ>7ºhã?eœù¨øùyê+èòŒB„Ý9lÏ4¡Ï4ck^5Ôu×l¸ýßüò õÿôÙ[â"ø;öÑP~âËX„ØÊ ð\ ©?‘üëµûøGìa¼¼uŠ ©“ì++ÂMã s_´Ôü?¢Þ\ý†uºŽëË* ¡ÝÁ8ô¯²£Z){ÎÉŸ5 =Z¿[±û‰¼‘ÿ먦’1dÚwnŸ­|â_ø)’ÛéQ[èþœêQGåÎײ*"H8=2O?Jù§Çß¶Äÿ´±Ï¯>™hÄâßN_+BÜ·ê+5M^îJÂnKKª~7øëàŸ‡V²M­ø‚ÊÈ'ðFãôOá_4|Cÿ‚˜xSIIbð¾—u­N¹YG•~­ó~K_›WúÖ­s$÷WÜLÇ-$ÎY˜û’rj6#ïzÓýÜvW¯vz¯íûJx—ö†½µ—Z·µ´µ³-öxmÕ²¹õbyàv¼`ÂQzdÖ°‰îlq“Æ0ƒ5&­¥^èÖÉ-Í´G'Üy¨o§„åßCXSœ´Šf0µK¾ô5%¶¡-»*G¡«Ú7„µß]¬V—y©JÇA+øžŸ{§ÃÿØÆ^&)&·4~´lƒç“ž?qUÅÒ£ñÉ•,º½MZ²ó<Vñî§Q^NY#ác$ÿ*è|ð{Æî4}a cý*áJ £=_vøöHð7€áK‰¬N±~¤fêëæ9ƒ ü1^Çk§[鑬6°$ã…UÇáÿë¯ ¾m})/™íÑËhÒÖz³ä‡¿°5¼b+¯êfîLƒökcµ>„÷¯§üð£ÃžµK}I¶³@ÄRù÷?ÖºAjQpO#=ªÌqÅ „fáºüº×‡SV³÷äzi(«EY خ챠‡ñc¯Ò¦Ûò,ZRGqÍ>d>vK*®Þ™ÍC嬪ۈö<ãüú×7(®N±aI Ô‚qÍBçÎC)?¼i^ôðÊp'N 1£f;£aÓùf„7ÏbÓ#“Þ¡HY‹‘Ó¡«?gÄg!xù‰Ï…Dæ&Ùž¤g=¾”ÑBWP².@ê{TâHòÞž”ؓˈž½01JdŒ#µÜG¹ÚŽ_§=i¨?™²[¨×…dÃ1À4í¸u nÁÛŽÕ[„‘¶÷È×­=Õ¥}¤Æ>qÖ›Ÿ,ÀdöÅp?~*Áð×ÂÓ\̓<ªÉŽìUÂ.rQ]LäùUÎsâí= |?ñ è÷k%Ôˆ>w‡œCß¿¥|Ûã\|Qø˜úÚ«¥¡Â²0×§&¹ 7Q±ñ¦·=Ýí³³ÊåÞMÙ9'­zÆ“¨ìƒ`«Tì+ ÷?Ê¾ß ‚§†´íï)ŠÆÊ£p[7ñOwÛ™äDñ_j~ÊÚšÁÍ(2í’}Ó°èyé_øšpú©Špëo#€|ÎH\ú×è¯ÃK>çÀº:éÒ¬ö±[¢)^œ†¼ÜÙµG.´U™ÓÇ *8 É =ÈmÅ~`G ñQ%¼’9dr¼€W¥G5Ã#ym…cÓžÕòÍží»ÀÈÀy€ dëQû€ G_¥+UB>e¢•7– ªNp:RܤQÍîqÏÝ=)ës•`9À©§¶ ªdžGÒ—ËÛR§çrñšMr%„I¸dúòùö§´>U±—pñ qøÓéjpøëÅ{÷ìŸñLx‡Co ê¨ÙœÆò]; ùéì.¾xÒûA½G¼¨$pAèEix]î| ã«}^ÁNàÁÁ®y¯®ÄÒŽ2ãò>N“–³„»ŸzJvÉ¿++|ÛûL|kð|S¡ÄEä3¢ŒgÖ½ïÃþ$‡Ä:=¶£móÇ0 Ž:÷sPh5x¥L†\:¿ þã_N¤ðÕT£º>±8V§g³>lø ñ×ǺLžñ ¼ˆÉ×8#¿á\ÌÑ곟Äö‚uìK—ùÔ”©<“âÏé>ø…µýHša ‘8s’?zו§~ÒŸæ•™?á%ÓÓ?}°?:ûhÊž.7G¹òsŒ°5ù>ËØõ Y´Ö4¸/m@xePCŽ{Tð´x“ç ìs·šùÃöuø…7†õ©ü¯\4&&?gi?,WѲ©éæŒç¦ |N&„°Õ\%ò>¢…UV>a1‘€QÆzà⣠±)’GZÐYckŒºŽz ‚hZI28nøô®FìuØ«pé3¢ª²‚}•G5ºî ¹ÚFH«FavQ¸¯ˆàSbhä`w.æîi mÊkkQnW9$Óð©]‚F£9Ïvª÷ªÑÊûd qŽ¿ç5¹ í. ûÃÕÜ–‹R"«>~dìØý*3ÉæAí“UÚWp¡—òÿ ¶©QÃtõ¥kŠÌù‚ê}Šñ‚R#Ýù©­às°îMÛOÌQPÚ2®õ_ÁïÍXhØÈÎ# ££ªý+¡aáüµU AÏß^ÇÞ´‘þËlòó#‡9À5JÊ3çGæGòulzUËÉ"‘¼Äaövàò=(~E&!™ä’_ùm0\ðz­Z†%¡XY]ˆ$)ýj¬QFQÞ<+`†ê*ì#+†…ÔeNî©/bå¬m$yݸŒŽœ­_’Þ)Dj“hå+Šª2mÁR»ò70=jÉCœ—324JŒÎ éŠ@ÚJì¥âM^Ëø¾½p°ã¹cŽ1\gÀ?…‡ÇßÍâ=týŸÃö‘ä“„D¹ãœW/åꟾ YxsIÿ² p áŽycøW®~Ð_´ïƒ^·øoá)•gh¶ê0œ8åOë_c—á>§KÛÔøå·‘òøÜS«.HGíIñÕ|i©ÛøGÂ߸ðî›û˜R!þµº8©þü3Ã:lzô êS¯Ë¿øTú{×%ðCá²ê×_ÕFè”ïHØàž~õ}6[ËDI…þéì? ò±ø¦ÿwêÏO…TcÍ-Ù™:üѲ}ÌuEã>†­Ù¤­n¬ƒ«d8úT÷¡ƒ2€5Àm«ÆkGF°2¤lAŒÆyÇÖ¼ÏWrîš|¨€ßê[T×N«*ìubNç^Ì {Q‘‡eÛøVU½ÃOv¬cÚ‘'ÊÄr¥êÀÑ{¥bÁÄó´WM§Hec&B²öÏ zW#k†pTå‰ÎXàÖ¼7‰¼r6Y°Å@ÈÏÖ­$NŽÉV+‚Ê ‚ Ç=kJi$û!ï4 ±_O¡¬hî£vYì9Uï·ìŒHFqÑMRAÔ†kpŽ‘©õ'•4ÉUÕ÷H@\’ TªÀ¾gÚ»ÏðŸÊš¬²*«—9Á)l=‰ãµ7޲9#ÿtWˆþÑß%ÐtÔð®’ÁµkÑ´˜ŽJ)àæ½KÇž1_xRïW¼•Dq)§vlpx§ì×ðý¾$øËTø“ã)£Ø±œºqʨ¯g-Â}b§µ©ðDòqØeTw <7§~Ë? $ñƺˆþ%Ôc?c·—ï©a÷±øŠù“I²Ö¿h‰qy3:Ï)’YŸ%Tg§ôÒþÐ?5O?RÃOWk_ìÖv©Â…?Zú3áÃ+o‡Þ‚‹¦P×20ä·§á^Î?ì•ú½?…u%í§±Öø?ö^Ó Ó¬¡X † ¡W€N:Öõ¤Yc½Û#æ5Z%vÚUyÀÖŠ[ Xƒ'^œjøÖÜŸ3gÓ_ <Ïóù`ŽäÒ¢ ·ÆAfo•³Œ £c0;CÚ™+´F`g¡¤ä·+Nªc¾çuûÃ×"¬Q~éW$…Ls!|8'æ"¨ìV*r÷¬Øì8‡o9À¦Üw¨ÒÙ¦Tq6ÓŽ]ßþªjIƒ6Þ7sߟ‹Ñ}™lô¯W´ðöŸ£…kK8-p1û¤þEE\ߥ$i º”-y\ùç¿.VOðý‡‡Õ£θQ,çžHëƒø×nŸ³æ‡qª¥ÿˆs®ÌŠ5¸A±1èÿë׫ÌS 7«6søzSÝDÌìGl•Íxuq•ªîìz4éS¥¬Q‰¦øwIÑš±Óíí‚p 1€«’Ä\1ÈÜxà TK=óÚŸ$ª²…*ÄŸâ#µp»½N‹êS[BªÙa´°$1éVáWEv×ÛÇHíKäHÛq€˜ôéLy è:{Š.RȘÊp¢'b* £Q¸ÁǰúSü´–Ûîñ¨ÌLÿw?/|Ð% ‘Îc 8&CÆìqа¡Õ–S÷p)ÄlíC¥Äl¥ ÎIùݤÍà?j:5ÆBÇ+F¤ñ•Ïñõ™V'š.›é±àæ´9¢ªÇ¡ïß²—ĸ¦Kß Ü³c>dÏ>â¾”+³€¸ù‰aŒ×çn®ËàˆZv­”‹Í]øî¤ó_¡Z-ü:ÆŸk{’â0à‚1ƒü«ÌÌè{:¼ëfk—ÖN<·2¼Wá[ohwVsÄ`nþìkåï kÿþ+"ÜetÙdÙ*ò²“×ò¯°æc0P:ç§á^ûLü/øiõKÿâcf<Ì(å—¸÷¨Ë±_WŸ,¾ubðËMǪ0¿i߇?d“Oø…ᤠm3,Û¡ ÝNq^“ðwÇ‘øãÂ6÷eÁ¸TòçE?2·JçÿeˆV>ê_üAµä|3¨?ýjòÿ ½÷ÀŒ—èdÓ.¥(UþèÏB+ÝÇáÕzWKUù& ´ ùeº>©Q$N2ÈëÙxÈÿëÔòJŒ¯“’¼ŒqŠ£ «:Å<(Ø#ƒ×#ÛÚ­…,6†ïÇOl×ŵÜú¨µ%r%AqØÅ <—èiL ›qŽÌTQ:aÕƒÈ隉å "…ù¦í`¹¶%Ç–ÊÜwê+x ra‰Á äJÖ¸`Ì ¹ª’D_kÈÃéëTõ3nÄ_gKè3Ž)||þ" Ÿ1‘Pàò[9kÍ“û‹ùšC>iVSû”æÎ þU~>ÐŒüÅ{zÎI¸WR]¤À㨓´(ò![†\ŽO¥oæ!×%V5Š7;Ðd|¹ýiÖà  Éû㚆ä–9 UŒ7 9äý«vó ¨} …ùp1šÈ[¨”`ü£&5ûU˜í w,ˆ §ƒQ•ß`˜aüo‘îjhƒ$m,hT·­#EcBÚxÌG1±ãåÉë^añ‹ÆS9ƒÂÚJ–Õ._Égå=°+±ñ·‰ìüáÏ·–o=ʃÇÓ›û6ø.î5?‰þ+@m`c,K'Fn  ×·•aj޵EîÄò1ø¥N<‹s¼ðýŽ™û)|7Ò”êñŠqº G_ZùÇÀÞ¿ø¥ãfÔµóZùÞdÒ?!‰=*ÏÅOjŸ¾"ɱ™âi<¸•p8úWÐ^ðÄ~ðÕ¥”1D’Ä»šQÖL÷>â½,~-Å7}_àpeøg'í¦]ŸLŠkxb[x¢|¸Îÿ^•Ûª§ÝDÁìOáRÝ^N|æd ­»éŠK;'Ôf‹kñœb¾=¶ÝÛ>™2þŸk,¯æ! ‘’}ÈÍmý¹c‘RXʬqÇáP.Ûxñ! 8U=ÿ*¡sxd,FC(á½i=D:yÞE‘$Ï˜Ì ¸ôúQBe‡B£…QÞ¤µˆ©TùQ™wG_¥[Š ªæ=‚Lô=þ´ãm¥‘'Œ2ü˜ÇA“éVU¸’ãî‚và÷÷ö¦«¼L Œ°ÀçË¢`s‘éïL7ØÔ Ë‚Ê'€}Mi$ÀSËÿ<~°•ÖÚåRGJõ>¸«qÞ aE`X†àŽ8\f¨ŒÊÇÍ$:ž2Ý~µz(ÓjÈË“Ž@=+'Æçe%RN:×ñßâü:øzÆΫ}û›p<ðN+XS•Y¨CveVjœ\™äÿµ«ÿެü¤¹}6Î`²”û¬Ù䟥uÿ´Ä;O†þ °ømáÖXü¤l’ûíŽszƒà–ÁφZŽue «_+ 3ïäŽ[õ¯$ø}áËÏ_^êü¼–Þašw9¤™€üž¹ïSn9kž„zTÞhÀ'n@Å$±¬…Š8zæ‹û‘:J¡N1á¨ìX(Út B¬›Y‰ôlñŸJ”™‰2aˆèzS° •Äjc ó:f›¼ªKp ÇZ{2à¼cæŒÔŠˆ¦02 犤V&˜†GjHí#‘‹;6þäô©—än¥@ìÝ)²Ìí÷7÷zS±ì2aYߣ’;{ÿú«ãïÚ‹ãx“VohSfÒ6ÿJ–3Ãî×§þÓÓÁZizs†Ö/ËTPzšù+Ã:4…žêîC%ÄÌ]ݹ$ž¤×¿–`¹ß¶žÈññØ¥J<©êÍ]#M’ÒÙ`Œ\rGZÔ‚‘ëíQM›f½Z°›rɸcŽ+ëÓ>Q»»‘Å($ž{b‰¬¨HN}MNQT¨“ÉÅLwlý‹ôû×ñN½-˜Î‹ éË?±úb¾¾iŒsÔp+È?fÏj^øy¦©§Åc4†i6ÏSÀ'Ö½uXap0ñžµñªŠ¥VÑõÔ éÅ+ óƒ° ÑÖ•,•>_Z[Œl$¼öëQˆÓ"äõÝ\G@éFièFAªÙAÎC‚:1V® ùxB>½j¼P`?LP#}¹ùqÈSIŽRxo_Z&„œ‚ÛÕO­FÁã‹hoSŽ´†$ŒÙù”NCvþU àãyÏ$Žô˜g ‘û¾žæ¥i€")YOùúT•kä l9µ<#òTá¸'8À©6˜Ø+Or@’¸$c²Õ ©H[1báÎÅíŒóVŒ‹-¸øê{Ò‘… ¤*ŸçPÈÛ$S’ËÜR¸Ã¬}0IëÚ¢¸d!\¾zž¿†*Øq,d¡îÔRGç1P€1¦$ÌåÊbdɺúóëM½„·ïbCœóÏj³%®FwîÛÅ"‘•MÇ¿z}FgÄ7̈WhÆHÏJœÙGo—6:w¥t :nM¤Ž¾¿çÚ‰b’%Ã.x=sT'äRšvGQ Âÿ²2käÛÁ¢Ã]³ñ¨fù%#®î ××—2¥ #ïq^añïÂ#Å?52ˆ¦X“Í\u$sÅwa*û*ÊHƤH8>§Ä:êÿiè‘N§çEç}uû*xÚ?ü8K;†g¹°càäãŒ1_!hnf±¹µ`r3Á¯Lý“|]Y²ßŸ<ÂEaÇò+Û?iO CñGá~ãÝ#纉Ï)Ô_­||ð2xçÁp.­G™ti"ŒÌÛ‰ÀÚ:Õy£c’yÇlU‹ÈùÎÒvŽ£ÖªK(VÃ)SŠónvìEFÄîåÚè)ÞXfÚc¸ëLUÜ( è)æ×ËÛ!p=1Á«Q,· ŽÝsLÛì)âEbä‚§Î=©¤ÎQ©e•XîÆK/N;TÒ‘sŒ()»'id›ì±•%A+òãƒN´@ÅĨê}*Õ«‚&‚ ¶æPv0“þ}êI6,ÅÔ¨üètxíÕб]Ùö¡@Ž7 ûQòN1“íŠ4þœLh«åFá—€ã8ÿ °@Kf•ÜBê ò§é‰"ÛnP˜Eçw^:b¸ŸŒ~0]Ã4uûußîÒ0ÜóÆqZ›«5îÈ©5N-¾‡ ÏÆïŠvzŽ_N¶+²ò ’}«ÐÿiŸˆö>Ðì>è"‚Î0“<'ß¾j—ÂK8>ü3½ñEîѪ^)XCýî{×–ü>Ðî>&üA7·DËn’ùӱ䞕öÕ90”Uì·õ>J XÚþG¦|ø~º6›&¯¨Û†¸¸wUS^ÏlNãÔcÞ«ÚAmch‘yLÑ–Âó…vü«E."’LÛ…B‹ƒ»­|Ez®¬Ü™õñ$RD7š[OtÄäò1ƯEk³¨ÖÀ|­!;H v&µl’;‹qæ Ž0FGËYzµï›æ¤‘ìeö¶CW6Úô2n¥)*IØÄæˆ÷\$„°l W °–`aç ŽçV­•ÌR›u8/÷X`Ÿ¡¡+ eÈ º©'$çè [†O0¯˜B¾HçDh¼©ü«'áÖÁ¿ƒ7zÕÒìÕµ%"2ýëê²z©âeÓcçs,E¿w–ý¤|x5Ýj×Ã:9Å…’‹t:8Î>µí_¼¾ð}²É[û´\yç úcóÿÀoÉãÿˆ/ªÞ©{;Wó›ÍØWÖòDï9 ŸQÆ+Ÿ3Ä6Õ4ýN¬»ì¡Ì÷dö׌ÎÎBí\azÕ¹Ô Ô(‘ĹÇ'’‘ÇoÆùœžwâ­´Òùj’a#†2+çÖ‡²ÑzÝ>Õ4qìVf?(­ûK)B§s }ÑÓÿÕXV·#ÛíPÃŒ~5±ý¤mãf IúÓM+½‡]\v0©ÄdöÆ’Ö&pShRG~j£¸hwHí–Á椆$ÎAQÉÛ×Ò•Ø­cñŸÅxÅ×X¼H.³Äüíôó§j}WÄ/5·‡ M>Üdåv£ó­ÛWÁH!Ò|Sn]ÆÞçh<Ð×Ïú-’Mf¯nÁä~úWµ‚ÃÒ©v®Ï/VqvFŠÝê¾"¹k›«éoBYƒ¹#ò­§IþÊÒùVå‹^…½j;? ]X*Í;¡ûĵtþÒBÞ–"¡º2OÒ½¨Ã•Øó%)=ʲøBêêî;{ i¯/n~HmáBï!# ¯zíÿgÏ]øk]m[ymî­¦1}’àdÔƒÓžÕö¯Ã/iðòÇ[𥮛yot¼ºˆI3Á½º÷ǰ¯ˆ¾-Å>“ñn}rkÑs¨M?q"( I#<8þ”«ªN—VmB¤SV>Lj¤‘ïF>[óëR[Ȇr#…`xX‹^ð½¬ÈûÎÁÀôǺ]È eRO ø©Ç’VgЧt8ƹ'呌S%µó”+dàñÏ^@Ð+€A|çÜÔÖŽòH¬Ã•íS{ŽÝnG$8W•éŽ8©¡UD%›Ëô¨edyÝTÊrAéL¹hæÚSç|r™'5:rÓ,qÉœg#ʆ‘ePËÀÎx?¥WGd<²àðÈGJd%«´n¤ÿú¨ágv\¨BzcœŠ–íbªCzŽ"YPîrhIÀå·€3‘ÐÓ¹ \[ˆJIԑɪÂÂKÛ»#}ê!remã¯CŠW“`$sÉ5BÔ0L·ÝÔè‚DSÐÿxS#}ÏÁÈãŠÌ€ÉçÄõБAv#å8ë¸ó\·Ä¯Ù|>ðÕÞ«u(A€õcØc­n]ê0XÚÍ<ÄF±.æb{Jø‡ã®~*x²K{i$mÑÊ¢çåbZïÂaž*¢E¹Çˆ¬¨A¶cØéZ—Å¿j>#Ôf –-n~êç¥Iy¤µÑ@¤ªðOjØðä,?½(Ú§ªú¤·×Rºü‘Àµ}ä!Ê”"¬‘ñ•jº³rf{ÄÄàà’p3E¥»(•dlîŠÐKrÐo_™ZÒÓ4ï0‡†lŽ ]ŒV·1-á‘d ƒÇAŽÕi’Dq”äúצ®‘§Í§¤[¬s“¸ÊOAÒ¹Ý[DòŠå‡Eâª÷ò99â(£'­UH  Iõ­;Ë#Q¹H¨ƒy#ƒŒö¡Æt‘ùYfÁnÀŠÈÔô¨õ2wƤ‘é]Åæ˜ƒžôƷŠMwnç“ë e•ž±×Ò½3öhñ|>ø‹mý«r–0özÓbXB—|zP¬«+³(Ãu¨ÝA?»ÁöçšóŽå¨žV%¶G§¥X‘²áS ¾½êù¨ÎOéH8`G9úRAfG6äeÉÝ“ŒTo?”œ±Ïðö§ÊJ¦ ¸94Ù¤P¹ÎÓßw1¡« tfÙ€:Ôøáy±óž:šbÄpŸ¯#ˆÜ©“·aI\åÂÈqò°È=MF®±1.AÉîx©#æ'åÿ¢•EÀ € ãŠoRˆ¦cÊ…ýIÿ µm ·Îçž¿7Jdp“%O=E=£B $î`r)"[²­”]ÛºœRDùƒg¨©$ß I¯Ò‚á†[ ÝÀ§°Ê(22G…\t8ŽŠ#UœúöÍ$ÛÙØå{œr)’È˱ O<žÔípô {r 4›ŠŽ„ö¨gŽCíwõ`³KpPñœ`‘Á¨®dR…áxÏcôÿëSI›tLޝ¸(Æ2zÕ[»Dº´»†E‰##ctËíÔý"²¿áŽYS*ê är8«j¬&#r”$a‚ðrŸ .[ÄôkÓ ÁAœ‘Åu vŒÜòqÅ|K\²q>’“¼D7ö¿j‚T˜ #pAëÅ|qã_?á/Æ‹[ë0ðÆe+tšû&xšXÎèμ+öªð‰Õ<­{®l32Žvž¿çÚ½,cYvf8š ½'/ÚÛN‹ÄZG†¼}¦mI;0ÇZô߃Þ/Æž ²¿.ÅGã$;×›ü6˜|KýŸµ-Uó®,”º/R0+’ý•üj|?¯j^¼$£b@z7LW³šPU(ó­âx¹}V½×ÓCêy$iA±SøUX&ãå‡CÇåùT©(–'Ï'š…”Û" Á¯> ‰¦ÜŠ«{u4³H΋¼í ~4å c#ŒƒÁïùÔRbN_¦sک¤*ÃþY½šo’ãþY¯åMy$U-½vãÓŽi¾DÍÎ>Õ[ùæ°ïŸ Æ1Óñ«ÒÆ&’!€¡;SúÔˆ=XüjÚ«´LË”¤sZµ`ݪ,ä)¨ê9'ò«5DHЉ 7oÍŠXù¤*äŽëV ”[¢>ÜKœsïïNå+–侂Ò6lª¤hĖȆ¼"×Îø¿ñJ5a‹ G*1÷@šë¾,x©¼=á»ÛuɼºÂ£)Î=y¬¯‡0§€¾]jó··hDdõ¯£Ê(Úø—Ócçs:ö^Î=Jß¼dÚ­ý·‡ì>[{P" é^™ð›Á²x'«&Ò×—*B@ôÒ¼K᎑ÿ ŸŽ…Íá>LOæ»rsÀ¯§…ʲJ yiÚ¸ö¬s*í¾DveÔ:|ÝY£os!±T ÍpO žÕ­¢Ä’£ ï$à qŸsYšU£áU–0>V+Óè}+fgû(%ÂM¸t½HÅ|ìa–%¿ò­Ã•窗-ä-ÐÌünꬪËrZVYcQäšÐÒ£Žh—h̬ß*¯ò¤•ȳE->׃‘—Œîo™Z%d†¸‘XœîçÐÔŒDs»Æ…bÜõ§¤°•„0U$d2ð3M±ÜˆFŠÍ.Ñ¿0ïŸÎ¦Š-¨P¾^ãÁ$ôÿëÔ²„fRP±”>´è`$¦ç2„ÇoÊÀ|Vÿgw`„ ÎyúSÜ Êònw „\p-¼s*\#J6çî÷§$™FËžCþqK]È%IŒŽ¤$~g 3þqV ·ŰŠ>ó63ë‘ުʒ U¼ƒÊªç#ë\÷ÄïÂà­OP# °ŒŒ¹âœ"äÔì™Ë’7<;Zñg㕾Ÿ™´Ý:AAÊðy"¬þÒ/š½·‡¬¥Ýkh¢% À'øà¿ø@üfò&Û«ÿßKÇ ö–+¼ŒÈ’4Ž„nSÆ{Ô+l°Ç+3ÀééZ-+± \€ ¾¬ý¤ÜŸSìTRZ$ŽS2üîOúTÉòÉ“ Ê:uâ¦E2mÄ#ÜSà´xç•ðpÁÏO­d]È¡VˆÀìX碌‘ZqMçb$ì# ÅV·*|°õ=0)V]®ÈYFÎz敵 ÑܰÀªQ—ªgÓµY†çʈ¬§¡Áÿ†Ú .å]¤.;“I³æ˜¡¶ã'qTF‡7ñwÂqøßáÖ±¦á‹´e(ÈÜA¾aý“<'£jþ4ºÒµ»)/¯¡Œ›KS&ÄiTä‡9`?JûBV |ìÇ èF9¯‘b)!qèTp÷?ƒ_4„Þ¸³»ÒëΓÌYí€3`­žÜ~¯­ÃÆ 7SV|ãÖVg ­øƒÇŸ tGðåÝíΓƒÌ;‡8=‡Ò¼KÄ>uİ #M’]¹9ú×¶|Oñ&¯ñ«Äï«Ibl­BˆâBĈÀ>¼ ò;W#q'‡4[`¿¸G¹\b(ù'éþMsT|òÑu N§öoñÀ¹³]2âV퀉·uÍÒ”äsþ•G•eŒ1!ÀÆ?çð§*LK6ÒÛG¾?*‚+ÀX3®¯½UÄ_D|”íÛž´—0!Aµ#qŒRÁq$é€ ) ´Ñt®^T2:e׸5æö?kÔ5)5KâZêWÞKsœ×sw¯É}§‹s Àܼqþ}+ô aé(-úŸÄÊ´ì¶2¥!îIUïV%.@óÆ*(ì¤ay<óZYe^IÀ¯Av<ö?N…Üî\ô®³AÒšÎG–AÃ/Ê=)š&“ÔŠÅAD™­‰!H›h%sÁéíRôÐÄê•ÆÐB÷ïTRg¿¹HàPY³ÃœqþEI¨Ç\Âû½EdO1†àye‘½AÁ’C±«©YÇuoäíXçN Ír÷ ±,7¥nyªb9Éô5=º´‘l˜o¾?­°Y-à6ÑòôUäÚÊOzé¼a¢fìÁ£dmí\¾ä‘q¸d*´jèWm–– Å2æXÙ<°5· á=:…¡g‘B`þ4ïæd_éâf®[éÚ·~ üEºøSãØâ•‹i·„+Ç»€}Ï¥F°,iµ—H®_Åö«&½¥¤g2â¸ñQŒ©µ-Žì$šª¹OÑkJbÊâÌ‘H¡Á^˜««.¯õé^Eû5xŽ]_Á“ÙM¸Éc)‹'Ó·õ¯_ ùp1Î}üîqä•·ŽÚŠ]¶ªžýÅA.S,HÁïžµ,«å¤þìuÍQdbáÁ%IÆ IDë"Æ@bHìE;ÊIŽî œj5 lÎXóœÔȽA8ÏVÎhHeo-f}ØÂã{ÕSÂF;ŸJµ4$crì;Ô.¯Ìaˆp>µ%j9$3!L ¨ù©²0Ýžœ`ö¨D2C*å±»ø»Õ¶‰Ê¨?>OSÚ‹ØZ ‘ò©»*;zT©åƉÚÇø©ŽAsp?P€Ìv*G¯JHV$’bîI|’z‘Å7Íó ‘êsÅC‰]Â|Œ™æ¥¸d.;ç¥6Ép»•89n?#¦ü:rséO0Fà«êyÍ!Ž8ÑP1V0{œU Ø‚L3‘˜ûUVm±¾æF_­M1Ù.óÉ=­R’Û9`ä)­JHs¹P²™É$TMSÎÛIM£ îjXÈld ôÍU¶O'. ¶Ž@­ >Sý´´Ó«¢_ªó´¡>Ýkç¿?M¶qòŽM}Wûjiçþ}.åˆfIp õï_)jmçèt¯°Ë[–ݛ̕ªÂGÙ?²Ö«.©ð¦Ý@ÞÖîbü?ȯ`•¹Œ¨$cŠùÏö-ÔãÂz­“8Xâ›~3Ïoñ¯¢Üâ@ÌÇÊí·šù\Ly+ÉyžÆóSW+\!CÃá‰õëô¬Y¦±¡ßXË‘fˆ¡Víüë~k8Ø™bÃý£Ê©Ì%‰ mÏ>§éP¥gs­Ù:~ÊZü#Ÿõ Þ"›|% Æ}+Ͼ é× ~4½À is’W€Tžk°ñx?>Ã&×<óŠVwµ€2©ºÖn³{›¥ßjS°ýÄ,À\qúҵ݉“åMž7ãK¦ñÄht¸œKmÄr3Þ­ü]Ö–í´{bVèÓ¥TøS’mO]œß3«8îk&“Å5Y|Ñ$Üç¦3Í}ŠÃaãÛSäWûN$ö?ƒ‡Hð¼w3BÆîå‹¶{/jõK+5—Üf,2¹ã¬Ý6Â6Xm€mE œ€8Áí]m†-­Â¬ ÆI\¶{Œ×ÅÖ©í&äϲŠPŠH½otÚT!›ý[ Q$sÿêªïr³”pÀ!|l?ÓÖ¨Ëy%Ëï12ÛÆ „@Éîy©­$«˜·8ë\Í \¶°–(XeNOzUÛ+³É Ч¸)j5GÙ4nžQ`NüägÒjêÊñã*œr­M¬Çk£Uâ0¼Í¹  zR°HÊå>P¼_Ö ³-2?šÌ§w‡ó«SJÍu¹†P{cM;“bx#Žx·q;IƒW¼¯³L]]X…û½«n|Û48Ü7m=óÒ­Ü\`í £ ´ö-3y¬“’r˜ôïPºëÍ‘J;W'ŒÔ+véÕ1¸-Ç…^æ©£2…þe”F™vVÈ?ýzñ¯ÚÂaáË}y4ö²ùS£þ©·§&½ˆBâe‰R\rÊxÅx/ƉR%å߃­­VI@šYz€}+§ Ô«Os›8›s9=¡K8æó„ìØóŽŸ×ò«÷8Ót’ÖöYÕÝpaÏÂZxuã…!–êIc"ß.~•¬–Ú¦ØÓË®x¯»ÕŸ:îþéµ­xû]×âÞ`Ól˜çÉ€äþxãYvZH$eÝ+òI÷&¢`#bÁ€P9ÜqŠžÖâ9”ûðzÀ­ÒŒU‘Îæäõ,L“ylÊ¡½1Xž"¶ilEЖÜz½u=ËHá_d+Øt§GÛm™d9ÏM«eÉ4Ñô¯À_Gâ_Z!“uůîÛ'9åŠõMÀa”¹êGA_ þÏ~)>ñÉÒ.e)mvJ)=uõÒ[2ɽ0{ŸóùWÁc¨ûϳ>óUU¦™Âϕج9ùª¼(w÷Y3ŽxþueÕ›!‰E=}êçPméÏ_ʼËhló—ˆÿ:œ£ö¤‰#‘2zަ¤{b¶òrªÍÐõ5É4Q¢… =zñ@_±}PÆÉ¼¨öCŠO³«·Þ ƒžO4€ÆHÉÝŸZc [– íÏ·Ö©’ËýèÁ¨ïNˆ¨!²£ÔÔ Í‹20nÆ›<‘Z†–FPª 6xÀ —±ŸãÛxOD»Ôoc†!¸’@ÏùÅ|Eâ_|Kñ5ίvÌm‘ŠÛ£v_ò+°øóñ>O‰^']N”¦‘fؘ©áÛ=>ŸçµsvvqÚÚ¬Ôôï_c•àýœ}¬Ö¬ùŒÇÿ.âÈ-­ƒF Ø¡ml¤€N§†´:®7â­›=€’1î+èü¾ƒá‹÷ƒ€Õ±¦XK<âcÜXòqÒŸ§h2Ý[‰S¸Ú¸ë]Λ§6b%(Äs‘KHúŽ7fPŒi°¬x_nõŸu);ŽÒ ì+GP¸iœ–»šÅ¼ÜŒòéÑOJ†‹(\\²ÌSn>µBâ&¸‘™HëŠ}ÝËLrIÔ1ÆÑÈpZ`0y¦##:ãµz¤ÛÝÄ€¨!Dg©¿äTw”&IG<…Öª]m³s*ó00j^å%aÞ*Ös·ÎüžG¥r²Éœ2& :þä´ûÎM4ÎvÀ*–šÔïí5,o±öç,Z®>sïÚ¦“0 ;FïZ:‡¨Û›Õˆùò¾ÕN}?ÏC\Î…{ÿ ‹éSö[PXÜVO‹µi¯ïWO¶rÛÍ´×_áÿ Ík£Çgg{ûÖ"¯Þ$õ?Jñ3 BŒySÞÀaܤ¦Ï¦¿dt•ü©jn¤ ËÇhÁTJ÷„î;×)ðÇ‘ø#Àº^’0Þ ŒØä×F¥†6ã É=+ã&Ó“gÔ¤X$08l uÇJ‚dxK‚§ôúS¦`ÊÈIëšc#2a¸uÏ¥gÔbÆc‘F@Ç÷ºS$RŽÄ7p)Ó¸Wh ëŠ`ç•#ëŠcCo½·,N 2BBUpã©Çó§X•ýæzŽiძ*ó]öü6=zTÑ܇\²«sÅ!UH•cÔT2ÆQT<³ÙG>Ô˜÷4À/9ÜN5““ u©“I’§8ÏPGJtrß»8ïK@$WòÀpÏLŽ 4ï¸q” ƒÊçšI0ÊØ… 9eRÄu c5i ’eLc¦1Q¶ЯûB¤y„¥ƒ³nãîÓgÝÝŸ32ÔXJåkˆuM¸98¬Û™ãòÔãÔçýjíÜó$;vªðÚ´ùöÙ'·ài®Å_B¨T€£ã¯Ö¾%l© "¼×m‰Étrxßò¯¬ãc,o® íãñ¿ìY;/ŒuTððò?:û5Ñcb¥›‘ÂŽ§×ùWÏc•«³ÑÁ¿rÅX¡[—/¾I¤¹Ø­•ÎÜð})Ž Íò€»yÜý*wC€@ ÷q\w;Ùà_µ'‡~Ó¡[k6ÑŸ:Ê@Åú¹ÅvºmÜÿf%í„xÎ1]'4¼Eá-KMUŒ‘7ÝõŠðßÙ[Äriz†±ákÒJ>øŠŒ‘‘Ò¾«*¨åÇÎæ°åå­‡3û5jm¢xÏQÑ%ÎÉÎBƒŒŸ¥}G’µÖQˆ@9ŒzøûP-àOŽÐ±Ì ö’§èM}… ¶TÁGP¼¼Ú—&#™u;°戯mÖ!Æ=1ΛæUÛƒï×-Ą̈ Xœr3L-ýF=1ÆkÄ=@¤l(?&9 š­äî‘WÍÞ˜‚à¨JŒžŸ­|û䔑~p8š³c1É(Ø6’ 7&¨Ã"²e_æéÏ5bpñ7È‚TQóg¨5ÔÌlƒ•ÎB7c\Çfm;ÂId’m{Ù6”ÔW¡YCæKG ýæßÇë^#ñ“Q]wÇz~Ÿ€°(Ý´’ Ï¥w੪µãpãj{:L„Éÿ÷Ãø¡_–YÆO­i|ðôšŽ·s¨4[’1´1n5ÎxöìæÖÑXíDŠ÷o~o‚mnŽ|éØÊTŒqž+è3*¼°g—•R¼œÙéV“öS+a†ÓÐŽ¸÷©ïnþìHJ¸œóùÔWZ–Õ’(ÛkÆ0sYq,®ñ*9P,s’:øÍϧܻ79óUNҤ䚿kÂc]ã~ì†ôªvxA˜œ»`0\gëŠÒ³‘ ¹|€X@<“]Yæhå,r7gîœûÔXŒ$/úÃŒg<ÜUuW¸€T%O=²3O€Í’¶ÐÊÝê z{Sè+“A˜¸v½Jç¯jwu6ýkê²hÚ3¨|Îm-LŸX¿Œ>2Yê@¹ó o@süñ_m_l*#ÚsÐ󡯑eý8ßxòò÷$411g’q_Z]ƒå²'Ìr@8ýkÎ̧z‰v=Œ 9(Ä|mr:¦I«wúT±ºÜÜB‘Æ3Ö¡·™Š‹reêH«Ín±’ ’IlW¹è‹"ÝÊá¸úóê}ª¤ ¢Åµ†áÔmÈ?Y@T;1TÏ êE2v)*P8 éP!’B…Œ‡€3³Þ¤µ…î,ÑÝšX]dY(6°É sW,­í÷—!z2÷Ïj6)ì\€¢FXãåä烜U&—ržr™ãå§K"¼ n(§æÞyÅSžá˜1EÄdýþœ})²,Ë3¹gÎ9Û· |õûAx{û7Å:oˆ’-±\"SþÐï_BǾ)ÄŠÀäc'šåþ*øFøöÙÛˆ“ÎwŽƺ°µ}…hÌåÄÓö´ÜO›¼’û¤ î.EQ:€òÜ€dÆæ«:MÌ—ÚcC‚¬ £qÔ~”Ë(¢kc¼¨*ÛHõ¯Ð£i+Ÿ(ò»=Ì}^ÞëRá¢NÓŽ•wJœiú{¶Vbƒ Z³qwOrŽ6ô$vªz3Åm},rÇòËÐãƒôâ­#'©¡§jssûèŠÚ62 sW­a¾;Ôˆ[î·lÔo ‡T+˜åµY¼ž´PªZ]Ù,:ZCµÌ/tfËY·C• n8ä×Ûž ñ4>*𥆫'…YžŽE|‰¨ØGGtÆñ·+ŽÆ½?öWñk>óóÈO”ÆH”Ž™<Àäþ5óÙ­j|él}&WWzg½‹¥bÊÃÌ*xíÖž.¾P*œn=ª)ˆ wî£ü)ÑÊ*¶Lx$*òOÿZ¾A4Ϧ{D¹bÇ隈ÚLpÎ>oSŠL$Œùc¿ Œ`SQÄDÌ7G^(#QbbáT˜gšG›ø#ý)Δa[æ0íõ¨î'Tm#úÒ®<íxÁûý1“_?~ÒŸ[DAáÍØêWKµŠœìÉ®÷â—Ä«†Þº¾r¿ie) g©cÓò^k{â=Zã_ÔœËwpåsœ ôíå˜/o?i?…V;¨BËvOáï:Ôo!§îfn¹ïšèí,–6Ë6ùÕ‘a½ ¸äqW,Ñ%ûË•Í}ÊŠKCâ§6ÝÙ„H€ÇzвÒÚõ˜d^ã¥\Ó¢‚Fùc22ö¥túN“ûv¡åùéObS¹>£ˆ‘.Œ|€zúô£\Ö–Ì™åa•þ õýjþ«y—f~q¶1Šò½U{ûÃq o$ðª8Íg¬™¥Ò:ëMjr#.<¦ì¤Ö5ÜD9?{žkGDÑc‚ËÍ`Ë$¨¯¡L2ß!íBIìó1nDr‚¨Ü#ÊÀ!àu•vö#¹¤À ;ŠÍŽ'½‘¡Ë#KÆ),M pǼ(ÝŽsƒ\Ƴr\;ð9­ÍJ|+øcw©®Zt’æfçÐgEí½ ô;Ôÿ/qÆON¢¦û 65f(p q“ØÕ‘±GÈt íÇ¡õ¬jߨúyw}ÒÊ>Ešéu+¸,,ÞiÎÀ¯0³†ãÆ~ 32Ÿ³£|Š}+UR…Û:ðÔ]ií¡§à}É#j7|³då»WÕß³§Ã¶ÌÞ)Ô"Ú‹òØ£ÀîØ¯4øYðêOxŽÛJ…JX[%äÊ8Àè•öuž—iœˆá‰B¢¯¾#YÍ·ÜûZ0PIÍ6I@x?0ëP»ŒŽëK!;™ÈzP@8bà)çé^j:„?+î@4¯&Ü‚3ž¥xæ“?; ŒQ3ç‚2x$Ó[…„$Ivû:ÓmÛå`9çéM™ÆðHÜ£°:’/—‘øSc±aS`$à¯SÜÔ #LwsŒóíSJÅ£_/ŸR?ÏjE! ÈÁäŸéIˆdЉàqÁÏz­:´1úcÒ­ùjŒÊ2£©Áâ£e zƒè:ÔØhÍ–Û € ëÏùü*Ì¢6îGJј¼’1 n¢ªËnèw©9þët¦Š½Æ#3D¢L<ÔÍt¢+p:cš¢²î“$e‡P?ÏÿZ•å$nÎØ[·ÒÄ÷,¦LeÈPsÁÇSôÿdÓîr ’OJFÂ!8ó:ôÅBbÂ’¨Nxõ4ÅaLžT ¤ã$‘Jò)S»v[¦ÞƒŽõY?xØ' 8ç©5j(ü¸H|©<`ðjžŒ‰Ûjž?„ÓKæ& ‚ùàš’â5Vc‚N@R?Z€8Úà•È8Ï¥1 ûaÝy? K¾e€kãURÞ$ñ_XþÚ—æ?i–ÙR%›#xÍ|›{›DÈɯ®Ê•¨6x›÷ eý‹Oß¶ìoÐu=kìÉö¬Í"°V¡¯¿bh ø“Xœ©"8%zŒæ¾ÀxL‘HÛØ÷óØçzìôðkÜ#f/¸²eñÈÏjƒÈyAmB:÷ö«DsƒŽ1ÜÕ{³!ˆa¶óÀëšáZ—3¯"7,'Óåô¯“ïc“á÷ÇùUIŽ9¥VÎ}x5õ´H·Sv@É9â¾^ý¦¬ÞÇÆú6¬!òÃ`;œ÷¯g-©É].矌¦ªP”LŸÚ›O^1²Õ¢Èó‚M¸ dðM}#àk¿íè÷(ÆS,;O§á^ûF¨Ö< áýD‘ ©>àW¦þÌú¡Õ~Ù12ÔÚyÆ8þ•ÝœFñŒÏ;,žˆôe*îw¹'ÓÒ˜ûc`Š ¹þí>X–Iu“=ãQQž% WŸZùkê}˜«#ƒ†lR8¦å»?î ŽHš<²’Iþu¥^à~å!þ÷i°X™Ä‹Ý‚ äÔê2άÀn¯Z¯33tjä`|¹Î*ÄP¬¨MÎKd~ïµtîf‘fDòƒF£.|Σ¯ljŸõ ËnXä ÜW¾k7ñ¦™zØÚc‰ØvÇšùÛÀs—ºÔ¯Xo$±ÜkÞÊ#ûÙO±áf³j $>$™µ8SÕ ûœ úóF‰t¯é–‘–ذ¨À;þuòO…í[[ñµ¾ón—ß¡Ïô¯²šÒ{VX¼£¶5˜p?K3–ÈéËcËJýÈ,Y·Ê6À#¯¶jh-•æ—r˜Šò3ÐÓ¡šetÎÀN2*ìFYÃìÔAE|õÏdžÒ$+ü£ ’§‘ø~ÉGw‰2§æ¡´XÝÐ…QµJœp~µ£m*ˆ”*4€9sŸÐTÝÜd¶ÙBUrê};Õ‹ˆ¾bR6ÏÊÍœàuâ˜`Ž;€Ä»œ²çµ[_2îßÌr3Ð.xªè-Œà±!ˆ0†v;&#¯9¨î¥Oœs‚Tb¦I-âDò׸'ŸþµV»Ž'Œ*/,AÊžãPÕnNH"RwIÀeÒ¢Š\"(RrÆ r'hÜ…Ú0@î}Í%ìfÞ16âq‘AdKlê¨á‰NäàÃҬǺ§!¾\taïïO”ý¡ÒÜð ÆF FáVÍY «ä’ª:b•õ$óoÚ–õ¢ø[$-‚Ó\ƘîEy}­ËX|mÚ_»/Ú©eÀvNĆ{ÅïŽ85Áêï„VûxÁ¯±Êݤüϓ̵­v²LIÚÕË’rŠƒô›H%ÚI&01Å|íû'I-¶—«H» ~b­×¥}iäÊÿ0!\pG5àcŸï™ô¸ujqô$M².…Ž~RÜ|½½jÅ:îŽÄ;÷¬²<–;ؾޅ¹«2ÎQ†NÍyý4:<‡]ȳ;•pr9©kF€I€GG\þU]îcØKBžÿJ·´êÛO@¤´Ü{ mÙÜÁ‡&§˜…·XøF àŽçÔÓ¤‘Vß÷ n*Äqø«;ý¨Œ qœŽßçŠ[j4)eufr1÷ÀS"Pñ¦Fñ‘ò…íE›Ë²\38îHÆ*ͪª•bçÍÏÞ { ’Æ¢:¹…#¥>9•ÕËó6äG~)ÞC `­ÆíRB" >R1þEI=5>Pñ®‡'…>#jšx]–÷íz`ž@ý?:Ë’îÈ ݳž½k×ÿhï *iö>"„þöÒA¹ë´ú¼¾îT¾°IT è:ÔŸç_y–Vö¸u}Ññy…/gY¾ŒçäµHî £r966æªUÛ+(8Æ3¿®*´­ž6Œr:Ô¡Ab—Ëø:óþEd¬]DZ¢±%ßw^œU}wRƒFÓ®/o_Ȇ4.ÌÍÇbFŠ%cœ“ŸJùWö’ø¡/‰õDð†;<)µÊÆ»ÅuáèKQS‰ÏZª¥)qã¿]ü[ñ´·›û"ÝÈ…[£`ýã]f‹¦-µºãîáö¬Ï è+c A°'LœWc5©³‰Jü¥GàE~‹BŒhÓP‰ðxšò­7+•VÑB¦¥¶µ&VPGÉØ÷©aw.j“Þ·´$Ïëï»Öº-mNU®„:VŸ02 ;þP­«Ô]ÑSÍ(XþðƒÎ*yîáÐ › $¼&`ê÷MvÒ½Ãü‹ó ëíY¶÷-$´35YMË}‘d"9Xî~î}úõvO [B-$7ët€`àã§ô¬Peˆù¥Ü½@+GÃ6—3[Þå‚ÂQ[ÿ×JÚn;Øß¸¿¢`(ô¬KØšýËŒª¯åW,¢IU¼ÞíÔf«jWQÆ¿fˆ’ÍèqŠV°•äÌ×±–æ! He‹?9ÇOçéÜ Kˆ#°‚m† ô­+4ŸKÓeóv¾ #ŽÏó®GP¼–íÙ™¾ñàRJì¦í¡Rø<…—p+T"€ÆÀ®r{ŠÒh—‚§Þ™{X~ìŠÑD‡äBtÙ M þHªâÖ6;Ù¶÷'õòáä’¼r;ÓÛÎbå”äôíšde&ŸŽÇ½;Ú”Œ,òeÝŽ¯Ö£eb7l$š·$r €6ª–«´%B&åqœ/j 2»á˜"ÿJI €Á·¨¦|»†yô¤Û´äq}*¶b Af CÎEFX•Ìn?7¥X°UpOqž•[ç‹… ­V„õÔé›  g€sš‚îÌŒ¿…<°y6Ž 2æ_™ÙбQשÿl­IŽ«¤i¦C&ÀdÇOóÖ¾×äÛ§Ã0p8¯Eý¢õÓ⟋×j§÷vÛc?μÇIJ†¸®>^+í°qöXe~§Ìãe͉Qì}3ûiì5ë ’U3þ~µõ)…”oLváÿ²’úgÃ9›¹‹±=p+Ýd12ªµAä ù D¹ªÉžî8ħ"®Ò˜fp>õSyU£!ƒqÐç¡t# ¿qè;¨È¦2eMÇ';{ÖêÑ‘;¬rÆdùPŽ0x¯ý«l Þ²»R¯äNe{Ô‰¹Qömˆ`|ܜג~Ñz_Ú>_8LˆÈlŸc]¸YZ¬_™ŒÕâבæ~1Ûl'ÆãÁ ZÓý51s ê¶ ä4ïP??êk+FS¨ü¸¹ˆž½«3öDÔM¯Šu‹<í2FíëÿÖ¯¥Ìã|;¹ó8v^Œú©Ï1Û>gPHíþqMdv@Kn¼T°¶¦q†ä“M[¤óÜ0úq_}^ätŒÄI€¼ñM̧»~b¬O>2V5oî÷¨?r¼#ÚžmåòX¿$qšœÎÖÑI¶4?Är ­jŽïò±¨zS¯Ÿ{¨ÉÚœdk¥ë¡•ÎÇWEá­JUÊ~ä‚JúŽ•áþ y!郒kÝ|nŒþ×ä9 "-‘é^áRG…§ðË_G”$£3ç3MZFïÁXëâV˜ÑFf)!r§žÝq_bHeŸ{» Jøÿà3ÌK¡¿‡ÿ¯^`¹k³é0Ïš”KђȲd:ŒpiEÒ£3¢ìnpi ˜¢m cwÞÇzz–Y¤Nß3t¯<ì$'x-÷€#•¤Ò¬Øò¤Ä‡ŽÔË[H‚Çæ¨RàsÔzŠlʉ$y¦OQð…“,Þ~þ%…#¡Å"7Þ Œ/8Áüꤊʆ@ϰ5z4{4,F÷ebµ Šªþnà¬U7pæ¯$h ÂCÜñªk"É›Œ¹#c#ÿ­WãÜ»Œ&yéIjK'DXØ‚LmÛ¸ÿ=:SEÓ‡Ø3Èç?J“l`0]Ê_®y?†j)‡”ÈÎ~ö ϵ1Þ5ГľÔl]†x›fáѱ~¼~µò§‡Ãˆn,e$MlÆ^ç¾Ê1#‰Wåc§¡pk忊z ðoÅ9 JRÓSŒJÛwqš÷²ŠÜµ]'ÔðóJ<ôù—CØ$qI ?>@?Ò§’íâ·–Úx¥8âFëý(–À}¹g6þ9õõ­ètI‘É‘B‡\ï_`Ï’Üã4ýêí“6À³˜ã¥u¶>–ÊãÉœm8ê¾¹§ÜLÐ2D¬iãiÆkZ Ae´–Iäa0ÀFbNïÆ©êÙM¢"[0•ò«÷ö©_J[Ý:Kf!Ñã?1úS,­n5Kynd˜yq°_'88õª¾6ñ=·„¼5<±Ç™çËŒ{ÖsvZ‚M»"ìõâoìOÏ£´¸Gs Hûµõ« ßql‘Á$q_›ÞÖî´=~-VVd4HXŸ~µú á­B]SE±»…ƒGq¶åã¨ë_™S´ù×Sî0rnšLÜœùnÞ ÆiD9#s«Ö™g;K9Ûk#Ç>3´ð†îu[çDH×åÏRØà ñ£'ËÎù5vyÇÇߊßð†èÇN°%õ«¼Æ‘ç•}êùûÂ^ž7s1šîvó$”òI<“V¬d½øƒâKÏê –•¿rѰü«¼Ó-c·ŒaI'¦Ñ_ eØ5†§ª÷™ñY†/ÚË–; ±´@ŽìwJ£¡î=ªygûXTÛ„^*Õ¥¦ö;ˆR;󨤶h$~@Ï­{6G‰'rK ä*®Tž®¯L´x"gpª‘‚yã5KÂÖ£Ës'ÌÇî÷â¤ñ¤wvªÖìÞXm¹àöÏ­fîÝcd®PפmZhZHö¤}3Óæê +»2ÇÇ–;ß§JÉ{ù5+ˆ–Ú>þ:g§wðßNmäa´|Äy 2®PÓ1¨êrÛ«2¢ýÇö®žkQgÛÄürGz‘4Û=:y‚ÞÜ⦆Ø4›¶–nÇÒŸK‚Õ˜–6l&s&7f­Cáëeº7¯Sž™®4¤Š!.±ê1YÞ)ž8ÀŽÜ‘•Ëvîj_¼Æ½ÔqÞ#¾7%‘rœg<äZIŸÎº™c7 FÜç‡O ¹tr+T¬bÛ0 …‰mà…ÇU˜#!Tí݃Àkpi‚HPO5rM4}:K»Œ"D7dãŸÎ†ÒwÐá¼a¯Áá½>Iç[oÈ\â¼cúmÏŠõ¦Ô.ÁÃ6T{ÕïësxûÄÿf€“g ~ò¯MøàYµkÛ=.É3,¤l}ÄîM|ö?ʽœYô™~ÞüŽÿà§Ã#â½f9æˆÿdÙ°.ØâW½ëë©gÆŠ¡ÀQ·«Â§ƒ|?—n«å¢ŒœrÍÝhLC«¸ï_R|Ò>‘DK©˜Œ Ú}ºVuÄŒ .@$\Ô¬*Cô>´Æƒ2î+‘êF1Xš¤H½°<£)©©$°,IÅ:5ò¢lyîx§+ {ñGQî"(G`0¤Ž§¥4åÔªáXu# ©7ìÜN}iŠÊW#ê)¬Ö`….ÅØðxüiÍ0!¶Žù=)Ë’s{Ó‚ù¹zži¤6îGö_-šMÛ‡Lj%2€ bTœsÆ*g$F6?0;Ö¢xà‘˜Æ;G—PmÏÝ$àt9æ#@Jœ²­éR+›ŒòœSeçæãŒØÓ¸µ*ù¬ªwËÛ"šbM»Â çió³!P0àè*¢<›\–$çîûÓZêQ,‡dYȹ;ùãüýj2ŠrXthHŒòov;‡E&’xË–BõSŒUn'©RL2Ÿ›hÏâibl²îÈ<Ž˜þ”û˜hÉáφÚ5¢¨YVfg9æºà¢UÜ+7B§ʪéö?f´Š=þXB*ãÐwÍYxÙˆç§9Å|+Õ¶}D¢ÉÙX•%™AëéP8tQ´o\c“Oó »ºŸÞnþíWv*AË'â„Àò³åÔºO¸yðÛ\]œ¥»1Çl ï)FàCõÈ|R—>× f!ÞÙóŽüÒº)ükÔ†x/ÂøÎ¡ð?ÄOú±œâÿf»Å±ø¤cuܲF˃ëšî¾ —á'‰âà¶+Î> 1µø¿h(w°"¾Çá›>KíZKÌûP²ÎžS*îÏAýi­P»#wÉâ6%S"d°èGõªóÌË ØÉÁçò¯„HúåªÔ’G²rØþ%éPý»Ó§n T–26`ã©ëP‰cÀùýóMè3Ãçcen ª‡nØàqTtÕ’âý,ñ’ITÎ3R_ºË1…\®ÁÄôö÷­/ XÅitc9αµ×ÜË­Ì±ü?Õ‚¦Ù$‡µó_†ä?ðŽL¹Ážké?°Ôt-VÛ;ŠÂÛ@íÓ•|Óá5Í…Ì ÷—#J÷ò‡nt|öhµLè> \-¿Žm2qãë_WØÝÈLx$p0?øóáÔ†ÓÇzqéûý¹K5yÓ>o6†Š]Ž›öj¼m7âKرf ÏéŠúà¢##“Ô‘Ò¾*Ò§oüYµŸvÄûJ’{`œÜ×ÙIrŽ­åá”`ã‚Ö¹3HZ¢‘èåõ9è¢À@έ)G(£ ŠÍ#‚›r uçÖª@¬HW.Ç$tæ´!Ä',ªÃÖ¼3Õ¹4ʉoãkúŽ@ªS;’fbÑãž?R]LÊê#e” c=qß°³2HÌ3¸cdqS«ƒx_,F‹ó¼žÞ”ûûÏ4yIòàe¶õÅGµ Ž ÊwO§åMeY ²©ó ëÏáNö*ÝKV…fT1òü¸àþ5°oÎîœvɬ«" Ú³g)Á5¥ Ä6IRO|S³èCDìHÄŒ§ €qš„ÅûÍ«ó¨9ÉþB•ÚâBÙÁ@zœÒ…‰Ü8Ù„Ü3Õ¨‡2†w6Þ0U…ywíà÷Ö¼$·öñ3]é„L29ÛžGôükÓ¢™®Â¸`ƒÔ ]FßíöÒÙÌ<Ø'ŒÄÊ:àŒV”æéMT] jS烋>`ÑÂjš]¼½°xíVÒòiçXD›Š[ ¸ÿ6µð¯^¸± ôÆbalc#=[ð‹—ĆUòü™cçi<×èxzñ¯(»ÜøLE ГRZÞ„Ñ7ÏpѺҪ<[„­¹ õ©¢Gßæ¶YGnõ~8b»V¥AÜO_­utîq²¤¼HþH`Û±®{âM“êþld‡æë]Úcµ€¡ÁÆví?ýj…bÂɆ^{š™+¦T]šhòøþ"ø—FÓ—"=ûî‰èHÈú“ŠûÞ . +kd#…h©À ñG€õ‰>üKHä; yG^êNþF¾Ú²¹YÕ<¦ÊH=«áó8Î3K¡öø)RM ’Ù¢@ÀdÐŽÕógíQ¬ËªøƒFðóK²Û‹‰½èùí_M]+ª¡*±¯‘?hø¤Óþ4éÎ¥!¸·Ú¤ôqùÖlc,TS4ÆJ^Ÿ—4{/²éñG?èlcò-œŽН 8‰nYzü«F+Eš¡¾UêG­~ˆ|ÞåUI3D@vÎéPiÞ#Ÿ™²N­( ÜFÄ;W†lçŠl—+a0UÉVõ)îK·Q4=BméÞh‰Lzô®ÚÒ[mrÝ™6¾x*k–ú9n¶4Œ£§µIi©Ïg0x?s“÷M'©iÙõϧ\ykmdnHê=³Wt­:×Mæ[)~è'½kiZÌZŒžUÈ ëß­iÍ¢dâ?•füËZìr“Áæ\ùŸuã5¿¥éè…C|ëýáUî´C)Ù‚¤šé|=§-¶Ù†èÇ©=ˆµŒýZî-*ÍÝ•FAÚ Ïô¯5½ÔÚâlÉýÜë|c"ê·&$o–6Ú¸Ç5åÂÀ]xÆ2 TcmÇ&a*«Ê¬Tc¿«JKO7*¨÷«JÓÃŒçÌe=±Zpè[Ѓ•lü©ëÈÿëÕ&®f“kSJÒe¸¸H[î˜5ä_´ͱÒÜùÍòÊÊyÒ½s⟎l>ø]Üú„ªV%SÐãôí_-xoN¹ñ«6¯ºI¥bû˜çÊ®©AÉžžêÉ>Æç<0º|*ïùXŽ;±ì+ìï‚?—šiÔoP Fíw6G(½€¯.øðäk—ë¬\Æ…£b%eáÛÖ¾›;ÛÀ ˜žµð¸ŠÎM÷gÙB °Én§n5\ÿ©+¸’;–ãå2`€*A¸€ç"¸§B!ØÁ‰À ïëHаW=9«Uáù‰ýÓR˜ÌH2äp{Jå6@`‚¥vôÉâ§Wî2:zRÅS¸è8ª®ÔÎ[°#•Q7 y<ç\'ãéHÛŠœ\qƒR"˜øU#-ׯåRåÆÕÃæÜ¯%¿•"8c÷£4Å+ ‘Ó¿xÓÌB‚ÌNÉè+ï¯Ù‡Àk࿆ºzÈŒº…Øóä¹­³*­GN§ •‘ë+ Ê¡Jó×Òˆ‹"%Þ*Ie`âãë›A­Û“ÀäuÑKY¢‡Œ~Ïò‡ð½¡éÞ¼ûáRø]¿.ÿÞžÿª»‚2O‡ÚÓd Àñ\Át_-Ëv9×Úc4ÃI>ÇÈaëËÔû:gÞ©Ûðj¼¶å¾l†ƒŠ|±¬nÍæ+“׌ÔÄ’ Ìxî£_¶>¾;{ÀT©ýßëÿÖ©$Y£`Eû¬85Öþðü¿úôšE%o¦Jñ‘A K‚k^ýRÓb Â*à6ìQZæÕ4èI’)D¤`”#`ükÔ¯2Á‰G8ú×O¡žÆ-ìks«2³y‡ºgñ¯œtÈ—NñN©e‚‘€üëé™íäjÎÍÆ9ãë_;|D°ÿ„sâTØÇ—>Zör©ò×q}O2‡5;œüR5Žº%ÜPÅ*¾GÁ¯°ô #k+Ið%ŽhCnc€IòµŠø¶0®95ôÂ]iuŸØ…`ÏnžTÏÝÅuf”Ý“CÊê^§¥Ú¤l= )û¨ÜšÐHÞÜHÌprÉ:šÉÓð<±¹£ Îä^Þƒ=ëOÍËe òíÃ)<±õ¯—h÷oܽuu¬ Ñmu\eIÆ=)ÉæÞ«èËZ‹Mt¡ö˜ÂdvÁ«6‹4PW•cÆõ¤/ÊYÙT™­X‚Vn# ¶G#¹Ï½À.±28p |§{÷æ­¤B$±–È¥fVÄéb»á‘ò²àQÐýH¶Ââ' 9ÜJ±8ïH·œ³æ+×ò¢Õ›È.dÙ“Æ{ý*ÐîE{ Ʊ¬Q˜ˆ9ǽCS;„0•äc{Ö‹ùyMÒa×¥B…2l`[9É㯽OQjÆ­‘¶Hœ+3ü½yíM‡†’F®§ Ëe¼å–O™†- C%¸œ7,Óvؘçëßÿ­UmFežxð3Ž+ãÏ‹zdž øëöÌ‚õ„Áç¯Jû"Þ6Ž$YT ’ßϵóßígáC}áÍ?ÄP!2ØÍ²N1òv?zuoaŠ‹{3ÍÇSö”Yç_tñÅ–©0 Yzó_Mü(ÖÛÄþ³ºó:F¨Ù<’ë_4$£ÅÒE}Ò¸ë“À¯Jý”â8f Á÷ŒãüæsœJ¬ìÁÊœŒý*ÅÅ¿“0`òÁP«Üžæ¨Ë,²³;”Ÿºœ‘éÍ|[Ôú¤ˆ£’S,*‰Ž€z1Z18HŒ¥LX$#T¢¡V.3’:çµ]œ”•ÝNà2¹éBЫw3‡Ù´ðNIê:T›~Ö“€Fп½U…V}‘¡Ûóm A>•rÖ̧›+Èp§ lPöh¼¸™K1S‚3—c.×»u«:ïÄ¿„¿ ,åGc¯ëi¬CxëÐ~´îŸºµÔñŒ¾»‡OƒÄP[º¤,äcë^ëðÆ+âŸÛ3×6ß»$ýáÇ×󯙾&þÑ~ ø©k&™gk›£ó˜£˜sþÑ~Ì^4mİé T¾Ì`7BÀgùWÎf”ù¡n¨úl²rW‹>Åp²¨ÌŠXñŸzðïÚá•ïŠü1ýšo¾Ó ’7XwZöô‰cŽ—¨QÞ¯Ý[ŨZ4n™V Œóõ¯‘§RTf§Ñô3Š”\YñGÈvšÅ¢i÷çì×ñüŒ’qϵz”PAm#~óqŽk‰øãðKùµ- ±'z¼cõ®Â5 ܦ•âx›ËU¸ÛÆ=ëô,&2ž. ¤»ŠÀÊ„œ¡ª=½ v¡ÝÜ)×:BÌýy^æ¤Ðn­up·Ö· =»Ž·"µ.,%ó‹:°ã?•wêy60.ÔF”Lß)i,¬×Îa0f8à n®‚ážN„ä*ãŸOëVn-7»¹bc÷sÔPãÚ‹•gÐç`´•¯ü´Vº`ÿ_Ê»]+Y–Å<¹ÛtC³Ö³,lÊHÌ\éS-‰¿Ÿ½#ê;šO³­Ôí-¡¶¿ÄêÃiN*¾¹•dñC"É$£×¥T·vŽ&³ 2¡CŽZÍ:'•9%šTÏç?΢Ȥم§éòËrWùI'üö­+(d¶2‡E“q8b=ëV;.œƒéZqY5ÛǼ(P1œ~Yªz…ŒkKIža½AÏM ÖÕì–¾Ð.µ-@ªÁ—,ÌlútàÖÝŽ€°;m£'8‡ó¨”¢•ßCJtåR\¨ó_ø®ïâßæ¹$® â$$à(\7îÔyŠ8#¥[òò›šL8£3Ž u°"ìÉf<ƒÖŸ¡±$±1Qœ/¸äÓÌF=¥È8èÇ­8˜”l’:P3îR§'ùPôÓr r=G"œXm—p=µ<ásŽAïQI(bWÏrsÍB±€ORjíÀqŒSÊf ä‚}?úÕðuàt¡¡‰R/v¢ir¢6m¬Ü‚JkFç0§jI€V·Ûj5Õ˜ƒÇÞé…ÆNƒþªžVùT¨âôªòOŒí0ì=:ÐpE,pq!þQ3ùˆQ“€q“Å"¶Y² ¹üé%ÄËÀÚÃØŸçBÛ¸$ Ž;Ÿñ¦ImÏVôlsRÀ\¨\.NáQʦmÌÇ9þTýЏt}¬6îôô¨åEuÃzôãúÔ’ÀáIÜ6ç–'¥I¨`©îOzi”þ`Ͷ0F@'±RæC; rÇçҭɺ(ü¨ïšó/ŽŸm¾x2îa ûdÈRÝÌz~]8:’QP½•Ùógí=ñþ/Ç¢Y6,ìÈÞðXú×ës¦f!RŸ®*k9$žKNíÌ“ÊÅË7ROZå%iÖk™R f=€ÏúY§YE§[AeQG`+çØ×á‹è>›Ä7Ð…»¿bSw/júJÞ5WᙎH¾G[ÚÔ²ÙC†‡,Bé 3JÏ•8ÀN¦ 0ùRî$“ÜÇãW&+ °PÀv\äæ³dpêA%›¯pk‰¢?ïnÈ6¯|àR¼4 ´ç Iö}ŒœcœñQJIµWjö‹R’)ä8ä}ÞÞÜך~Ð7ËᆪKãrl#9êkÔÞ#+'Ì8&¼3öµ¿[_Å œçQ·×½vá•êÅ.æSi&Ï.øowö/‡wÌhe9¬¿ÙïüV’á“xTnžçÿ­SiÒ 3ᄹàÈ:Š×ý”,žóÄz­øMþRg¿ÌWÕæRåóå0+š¤Ÿ™ôüq–ù•‚ <¯z”GÀU'’{ŸÂª˜¶†'9oá5cÏO(C¸«yëáQõéY <¿f™ˆ!†8\qPÿi¯üó_Ò˜ÛÚr¤ç£úTßÙÀóÇ?Oð§§P<çQž[—š-àí\®ÿÿUbì¸)(ÜGðÖÑİ*#žã'èyªæÅRg•†Q†cò®„š'ÔÇ6‚àbL†ÎT>xí£áìudÂÂ7À¯z“ln‹µf÷ë·Ú¸_ˆZ)ñ/†õ;i!Vp¥£;±†뢅_eV3ó9±ùé´|ÿw*^é°\d9¯Lø­EÆ¡§HTyª$FlžGQŠòo’ö—rŸÞFJ‘ïZ>Ö›ÃÚõµÊáZAèGzû \jw]Qó˜û¼¬û;O˜<ËüØâ¯¡ŒÇåìó·ÞW-£k‘ÞÛÚãYMÛ‚’ mÁz¶Œydÿ@}«á§¬}zÔÕ³+Ûù®ŽÀR8•·eGL’ `ñÏzʵ³Xày\#)ºõíZšpWxϘ€Óiæ–ãLß‹ÊbÊ@TÆ1Ç4ùaQQ6` =j¬2Bl’yïÚ™<²M"³ñ¯Ý=3EÖÂ'G_5÷‚$×¥Z¸ö’ /ð«õFI‹@ç`œ3Ö­FsUppN;ÒºOa‰öu61¹—8ëV%x’7Û&y#ƒUm­DÌò8ÚJýîéWâ @‚8;¹™DÙ2I¿ëïZv–øA±HúœÖ«¡Á+'΋¬:SžanŠË#:öZh7â4{Œœ•S´:~5ÏøÃÃvþ)ðÝþ•(%Ì,‹æð7c×Ö¨I–fEu ¹9æ¨Ã—1„ÎÞïŸ_z{¢%dÓ>øq+ø{[Ô¼3~6É´d8ô8«º-íÏÈ–÷ñ¶þhÜWƒÖºŸÚÏÁòx7â ŸŠtõÛoxª&egΰõ¤‹Å~‹Q€ï™W-ŠûÊ3 ¤÷ÙŸ4ð˜žn‡ØzV­¯eos ‚X¥PûÔò2;¾ÊòDÎW ’qɯýš|iý«¤áÇÚ­Ê3ÉôõîÌo*¢Häo¼Oò¯ˆÄÑtj8³ìéMTŠ’mûÐe!zŽ>†šÊÝs’GÒ‡“í1ps‚F:ä{ŠcD $gwÔŒqIrrI |ÜóŠ­È>`º‹KøqñSV‡YœYéWLgŽA÷Iîi_~Ö^ðMÿކ5¼m3 >¹êkÒ¾2ü3µøƒá™"F/bH‰1>™¯ˆ5½1´d¼ÒgŒCvŒ~\rq_a—ãã(*sWhùÌn ¹:‘êzª|xñgÄÍBV¾ÔBÑà;Q3Øë\GÄ^Yµ\Ç"‰y&rG¨ÏZå|w¡êðÎ+ ³ ÷#ø«HMCT¹‡ìj>@__Ä×ÑJ|ÑVÐùÆ9ê|åÔÖ7?ºáø t¯©¿e‚+¬ /ßê>sÀíäÚEÑIã'ÔõïøW‡ÅðûYñž¦é éìÑJFØÔvÉéëÒ¾«ý–lcøyo}á­_RCª<žrZ–ãçnyÇOμÁIRn;ŸA–Îí=Ï Û— ôn§¥>9T“å±e8#½E8óQƒÐT(ÝÀŽàWÅ\úK½Ó­µ[f†dÁdf¼GâÏìùo¬Y³ÁÈ‹æ_¥{¼%aRBF8©îåQo#mË*?ÚÀé[Rœ©»Å™Í'£?8î5à~·åG+\iìy‚Np=«èï…4ˆrÄeX¯ñ)#éþðˆš§Å‹7:lÖíg ÊbPWã?Ö£ñwìéâ†Å©iRÈè£ptÎG~Õú>nt£íÞ¯©ñXªqU_.ŒúòÿCDÀ rJœÕyl[QHÄ‘ýÎð=ûö¯Ÿþ~ÑsC|šgŠ +´Jp9÷¯§|;©YkÖI,²Â@ÚU²1]Rƒš8:ÚG3ä‹W1y<6@lqý+OKÒ¤¾õìñ“øfº×ÑÖd.õ… çòÿ½c§¬˜Ä˜qßúÖnh|¦E¦ƒÕ±‘F%䕟>œñHw¡` ^‡šî ²óãT‰Bâ#Uä²¶{"©N>n;Æ£˜¾[œZ°·´&6Ü:ŠÜ´ÓIu*ªÛ€Êñ[ÙÜFÌÅ7Ÿáè+7Å͇Ã_ ^뺃â… PN7AïTšNç‘þÓŸ¿áUø[û6Õöê÷êDj*:ŽÀf¾<ð‡¥¼º}Bñ‹ÜLw³·'“É«Þ'ñ>£ñÇ×Zþ¤ÌÐîÛLrEëß ~Éâ½j+p YC‡¸AØWÏæX•ì¢ýO¦Àaù3Üôìׯ ;S嵇þ=óÞ½éÖaœ`dÞ ±´N³ŠÚÝQ% R²¸ÆØ“ÿŸóÞ¾:rr•Ï}yïæy>Æ£x°£¯²Ò:#w™r]F^2r~òÿEî˰òrPž{ÐÌÊNSh·J±¿—“´ç±ëJÏÎHc»ž¿çô>Ár¼20BU¶Ž¤*v`ËÐçòæ«gu", q’@"­E-´OZ§îèr9¦<Ä£r£µ30òتïÞ¡.¥#%¸È¦ÉBÅr #81Í »Nâ¼1Èš‘ýŸnrBÿ(ž;«†ã9Å-JЕã û7w5UÅ+…ù·v©A>x!c×#¥J¡pw¾„PÄ´+¬ æ9ÏoJ‰íðw𲎙8&¬ºc¶à;ƒL™Ø•~¹ïAW!hË Å°Àtôªi ,ìÌ í‘Wå#ªÄã’E1œ¹;OÈ~´‡r ¤º1 ¹ˆÒ1À(Á¡©„ Üùþ@ªïóÉ#t°¦´-Ã@ÿõÔ $»·äc§qR‚,¤±Löª¡Är•ùœ½Š.Á\tãz“ƒ·9Û×5sù ‘“µ[øx?þª¹!É>_*G õª¾R)Þ¸nù<Òå{Ë‹k;9®äaq©f,}zø#ãdø±ãébØévnVÝôxÔï†ì‘Ê­kÄrEÛva„£k#Ýt=& K‚Å#ò ‚5‰ tÎkE#²í²9¯áPÉ|åÈ1+/g=MK5àVYFyQ’¢¾M&} VVå^á€6ûTQH3°ç‚E=ei|ϘƸÉ\u¤V%6²AǦªÅZà :¾ÕÝž3ÚªçÈeO/oFÎGçV%ˆÇ)1ÊáŒf¢žÒ`… Qù¶÷4h&SxÀÛó`·*G"¾Zý¬õ†¼×4$>í§y\þ\WÕ,aF;Tޏ5ñoÄýHøÓã4褴vì#üGZõòØs×O±Ã‹Ÿ³£)Ö_áµ@QÑûdg °ëR·›í<*žÇüûR\6U1œ t<ó_(})JóÜ.n;aþðÿ¾¿úô$æF3j60ªÛGüô?• #워X8t9 ó‘íŠ{Æ%7R(++aL{°÷fdĈÛ3ÎáÉ'éRDi"H<ÉÁÆTpGùÅtóYØçæ¶1I‘µÇ‘ƒÇkòßÍaæ1èËÅuW–‹$ѳ”ˆ»°`þ#½cÞBIe!Sœ†`0Æ“ÕCå_ˆúøGƯ(ì÷Gx*8ɬ=bÝ•ÒỎ•ïß¼¾(ðœÒE†öØ…ãJðm%Î¥§Ik)Û4\`ûW×åÕý½Gº>WIÑ­ííÿ¼d/´µ²•·Kj02zŽÕêÖ®e’)$$F?€ú×É¿õÇðLjây²vÖƾ½Ó v6àc¸¯CÙTæèÏ¡Á×ö´Ó7íî<Ø }¤À»kx²œ„d ´03ý+ž°³ ¥ÈØ¤ãŽæ´<⣠&Ð>ï%¾•äÛ- 6f»·e'gÍÆoJ¹o ó•vª„\”ÎGµgÚÜ#˜–?™AÁ VÄEᔈÔr –$}}*v5¢³Û°`™ñ´ñ} <²ˆ¡dU+ÊíäÔ6ñìE7vî8pÜî*üÆnÛ aý)”®EL-‹C1p¾Y#‘V$Q<ÄݓԘúÓ­Ñ­ßøËnÁôö§N¡ï\–¤}à0=èbÔš71+ÅånÜsM‘U"63/-rG½USæ Œdã‘íÏçWqa@e”v&õ+mÅY%;ÈØR8SÁ>ÕvßÉòâUP2>|jŒI¼¸–O›¡H ûV€ýÀb‘mb9Ïzi°µŽã‚í~ x7RÓgUi=Ð69WƒšøËáÆ®ú¯uáíU6”c Ç?á_}Oܤ¥þTb:@¯•j/…­¡ÝÁâý&9Bßé` wûÜt¯c*Åû ÞÎ 1Ã*´ù£º8¸/.¾øâßU´Ü°Ȩ̈¨¯¶|?«Úxözžžëqèn¿n¾µñn›¨AñÂÞ[¸7±/õ®Çötø˜þ×—Ã:¤¥,å“çÓëÅ{Yž ÚCž+Tqe˜¦¿s3êè !m¥ºç×Ò™ ²@GÏÌ{²–ÛœJrêÜäýZt0`³s÷@çñ/M¨L‚â=‘„Èvþš[Dò¢!•Il·J°pÍ€Ÿ"ŒnéϵFÊb‰–a¹‡* dýM$Ů¼Mp±¯ÈÊzã¥XžX)“Ç­"ÛùÒJQ=Ï\úæœÑ ÜøoI‰…›|· »@ç¯å]O‚þÛî!îWY»P÷“)cž:ú×{ûXÙjšFuí´1\*á£8?Ž;WÊñ¦¿¦±M.g·•ÏÍ1ê=ó_}—b#Z‚¼µGÆã¨JKCÞ~0ÞꟖK[ma,L©±ã³ = ä׆xâN£áßÚêr\É?Ùä ½‰?.y•tzƒÎ±¢I©ß_K¨^·ÌÌîO5Ài.£â^ÛÃÚMº Ë©DA‰è;šè¬×+OTeƒÒ¢å?Qt-^x~ÇS¶e1ÜF²+)ã ^ ]\CÊÿZå>ø6ãáï´½â_µÏo«>xÎ>µØDXeÙ@'ŒÇÚ¿<¨’›åØûU±ó@ÊúŒ×‹||øç¨|<{+-stÇ|»†T/§ÿúõì¬×+¤ÞD&u¼µ=Kcµ|cá]kYÖRž/ë^ðëãLj>j1Ç$5lØäcÚ¤ø…ãûíoRû<Ú„—~ê9Ëé\•ž“ow/©°‚Ú1’ïÀ«_e»¿*RšÕ ÿ¾>h?’Ú+yã†ó´OÔ~ì¯m}£7mµù‰¥x>ëKºÏ‡îæ¶.<Ȧñíë_Güýª¤Ò¯"Ñügº)ò.\|§·5Q•,CýÛ³]xyÑ\Öº>¥Û, éµÿdàý2+FËN¸ †n¡»þu©á‹­7ŰCug'ø¼øSH¸Î…§K†xÏË+§=ÀÉï_¶?íY§hºUǼz·z¼ã˼»´pR=P0êǾ:WǾðËFžtÃtòÎO$“Xbë}RŸ4´“Ù® Ï>f´:oøYîšÖÊÒ<Í!€Ì×Ù|‚tHí£@Ó‘™¤îÍ^}ðKáÑÑ-F±¨ÄâeýÒ7ü³_QõükÚ-î"’¼NÜæ¿=¯UÎZ3êãÙË"È>Qø…ã Ä•éß°§1ŽzaróÚOn™®vW ,ˆüun ÒN„à3£­1¡RJ“‚àã¥H¶êˆp玊)n2(X¯nù¨æCõ¬,#;W¯'5ZÙ=z`Ž”h4$A¶¸±#¨©Õ·G±8=Ç­B°¾@2«ØTäÛpÈ=ˆõ¡ ‘y¸Rzö§çl+)= WY÷—m»¿*“Êó>Ð0FNj<îAümß'¥>68dÀÁïïKÔ£!ùX/­# ¸!·ËØô5²ûXu ’*ªþìçžXv ¤5·Jî¤HüêŠXbAãzÕȆÐI_ŸÔS70nôêqIùåX“É“pÂ’8¥;w’Êžâ–xˆU,ÿ6xô§¼‚4pø`ÃŒv¦+•\bä?˰Ž1Ò 7žXölRzãüÿJYáh˜ÿ þx”ƶ'Àìi;¬#ZàžåùW™|lø©mðÓÃ4¨oe]¶ñÃ3vãù×YñÇ€<9q©j)*„ä±ìõ¯„õÿj?¼Y6³©Héa*6ûª½°:W­—àž*|ÒøQÅŠÄÇ O™îfÙNòïÄ»—šV2çÖ¼ÿÆ^#:ÃÀF¾…t~=ñBìû¡  ¼WáÏ _üBñ-®§#Hò¸8g“_YZq¥ l‘ó4c:ÕInÏNý˜~Kñ+Ʊj—p–Òlœ1Ü8b ~Š[ÅŸf‘@€E ˆ«¢¸„í>xZËK‚5F <×ÇÞnõßÌ“*TtR8'ó¯ˆÄWuê7Ðúš¹U yùVÎp(•JŒÆ 2õ?Js¯Ëæ ÚÄñކŒ;Ê@XðÌ;{~µŽçS] €Ø GLsP³o1%:¯± -Ë¡&Gç‘Ú¡RÊB¶ì/N8…%q"W7‰´©ì;Uw¸Y¤q¾LãíS+ÈòäÁÆ*¢–F\g©«%Üæ¼©Çá¿ j7ÒH$,ß7Óµ|sðúÞKûíG\œd³4…<“šöÏÚ¯Åæ×D´Ðá‹¶b©þòË’žøuäð³Ü.Nzô¯«Ê¨¸Óu%ÔùìÖ§ÃEuÜóø­äñ—Ä[;HÆñ,àž;šû§J³]7O‚Ûh"Á¦:~òÇì³áC¬ø¶÷\•~K^°þ#þE}jÊq•ã=Xt5âfu}¥~UÐôpTù"B!.Xù˜ p¤R‹S3<ÜSв£g¤´¢C4_(1žMy)’DÆ Èþu_ì¿_ÌU‰@h°Í• ¯O΢ûBÿsô¦Ò§7"$Ç'r2 *×ôÔ Qã,;:ç!½ [e󥂥“!G\÷5<ÇÍdbÇ9ÞxÈì+ ÎæmìBYvŒ•9<7ò®nâØÉ+¿ýX8âºû¨|›ÉL,ÅHsƒX·(V"°5ØóϤksŸ¹³Ža0Hȸ!È'ó/ů x¸ßXïm:vä‘€¬zŠú›PU•™ˆ &pF0 â¼ ÃâÍãN›j f7t–õÏjëÂ×–ªšÛ©ËŠ¢«Ó·Sæíf1yw°óÀÎÚöÿ€~9mR%ѧróªâ1Ý”v¯²Y´ VmQLb¼ô#ÔUµ{Ÿ ë0ßÙ±E 2ð}~"Œ1T¯§ÍàëË WÙÏcíXƒ ‹zïÃàŠ¹®ò5•qŒó\ßÛø»L¶!‰¸R7’qƒ^‡`¾sK$‰¸Á`1Oå_Rœ©ÉÆGØÆJJèÕµÓ~ÇOæn›ŒsW-£h£˜‡ Ç‚O_j† V` 91Œ`tÿ"§¶‘Á}áTè!¿È¬5{›-G( ‘–ÃŽƒn*ÔNÎìÇ*6e–áp»”¯AV`˜ÚÂÆ=1÷µ4>…¤ÄÛNÃÇŽj93æ#)‘sÀ÷¢i&I"Yt?.sR4,!Ý‘ðH<ó@"í£ „m°ç•c˜úUÈŠý¤‡bÀ¾{U+[gyÕQ†KE€=jð‡É`ÆÁëê)èÊ.ÙÅŒÄ9QʾРZI‚Ùð9ªÖåæ+ùFá×5mâÜPUü¯Þ§[ˆ§5¡Ž'È düiámKà_ž éÒÉû©Ýe'¦k¢ñ.‹¿§E®é„ pìê }Kñwá¾›ñ+·V·1†kyö «cŸC_xGT¾øqâkë¨ÑÂi1ØŠû\³±TýO‰~'Èã°²¡?kLú‡öwøÇŠô£¡êsõ›5C¶<äÆ{Ž+Û¼µc~Àù›ð§ŠôŸjþ$ðüò0‘Z.}ðkê¿­¾$é) ò-¾¯[cÕ¸ûÃÚ¼¬ËâÝZkC×ÀãUxòÉêIf ¬Ÿtœ€8ô#HcXö‡{9Èÿ8©§‘V6wʇ;N;úQö`Ê«ã€I"¾pö¤,采ëži<ðÂû HÊuõ©)",Yé<+O°¢ÍãwÚ¤ªôP:šW)ŽŽ&IU”Œgñõ§7—¬r3Ÿ˜sS±‘w2psþqH7DªïŒ¶#žjwdÞâÛ¡šB®ÊF>Ub¥ùQÝJÄ`ŸëQ³’A 0Љn %$žãÖ¨V¦4™W–ÀãÐÓC0‘·(޹æ’EãÈÉ4&Zá¤ÀuÏjÅæ^ó#Š%b3ê[¿ùâš‘G§J|a ueù»)éŠ$ELl]«Üw¦IâßYx³CŸL¾·Y ™qÇAî+ãO~ÏÞ9°Ö.ôíD†ãJ,Y.wá€÷öÚœFYr9ÆÉüiK#IRyfîEkF½L<¹ gR”*+M\üíðÍõ߆õk¿kJÐN„‚¬{ûV³öŸx¾×Y²,žL¡Á_c_FþØÜüi£ÆDð· çhïúׇYOŽ<:#* Ìk‚:’kîðxˆã(s½úŸ#‰¥,e(ìÏ»>üGµø‡á[ô`Ï娔È=ë´Ìj ªÀdå°ùûû<|V›á7Œ×KÔ™¿²®¤ CŸ•cü«ëß‹wº®¥ðÓSŸÂ§Í½x7$‰ÉÚGQ_+Â:5ÒÚ,úJÕZ|Èòo‹¿üQáßšºË¤Û¶Ù3È÷Áíò+¨Ñ|c¬Á¯#arðƒ þðÇSøWŽxÄ7š×‡ŸFÖ,D³ 0.0Kƒï^Å‘¬ü0´°¾Õ@›G™GŒÈïù×Öáð”¨B6JýûŸ1‰ÄÔªÜ[Ðét?Eà±{©é—ЦÆ"kV`È꿵yŠî#ø·â GRÓ®#¶»‘w5ºon>‚¹ÿø§HÕ-g±µ hÊÍ LóϿךðíSÖãÔQ´K¸m ¢Ýª°\ƒÎ tÊqÄìsÒ¥:Ÿ¹Üø-;á×Ŷx»LIíÀ1?œ3°÷€ïÒ¾‹ñìÁá/Šn±¦Þ5¾ŽÌ'{x0RQ×Ûò¯ðw„ohßÙ,Ï4šEš†½º1…YXc¯rkïM Fµðæ‘m§XÄ!¶…jŠ08ö¯•Ì+(Í8KÞò>§ IÆšçG7ð£C»Ó-,¿³ÓÉ´M² â¼Gâ‡ìòÏ —шÇu_Jú¦ùÀ*JÈ4®‰2òàõ¸¯jÁóFZÒŠ’´‘ùécqãO‡·t?jpCÂ$Ìü*}sâßÅ/Ø½Ž©ãJâÑÆÖŒLTè@<×Ù>-øE¢ø˜™$·³±ÿZƒ¯ÔWžÝ~Ì‚;€Ñj1„?ÄWŸå_AK?ÅÓ/>¾‹ó8þ¥FüÉXùoÃÞòdó¥R{™©5ô/Á¿†mâ ˜õ Ës— ›Æ<ÖíøW¤xkà‘¥Ï÷ŽÚ„«•ø@~Ÿþªô›{§Â#XÄ(¿uBà^&#S')»·Ôì§N4ô‰‰!¶ Wj¯¥C½cŒ•rew¾aÆ1Ó¥RòœÊÀ"íÇæ}k϶¦ëQÍp»pwcsø~´èfP `zzÒ-«[ü²*¶y‘Pº(*ìsNÖ…ïºW\S^@p ‚ÞÕ ²œ®r½ûлXò>zDùŽÊ =I==)6bÛØdö?ÃK¹VLô§±c±¤å{cš« Ûbº©V+¸ÍH°1c‘ÈëDÈŽÅ£á‡~ôã&Õ?1ÏL¢„‰»!|Jã~=­5À yÇô©Äa ã޵ Eµ~ï¯j`5÷ü¨¼±õïO,ÔdTƒËÈ$õ'©V BƒÉçq©º{ @1éŽÿJiPeôcÓž•¸È$“ÇN)þgi O¥ }HØ|ì¹â¥uXãV@sž„ôª±¸Þû¹<0ïéJ¬ZE\ã>ŸÊ–ÃÔ}¸mï“€yëÒ•Ìl­…ù—Ó­3åˆýâþu#Ê #ÜÇÞ„"9’ #±éQJÂG<çZ.$i;AüÅEn†7*‡,yÁô¡ŽÄLaæ‚xu“âÏiÞÒno¯¦KxbBß9ÆïaSxŸÅ¶Ò'¿ÔäK{xÁr[¸¯‰¾&üFÕ~8x’HmÞK@ÿ"ž7üDJô0x9â禑êsâ1ÃÚl¡ãïjŸ|T]Ù Ñ-؈ãÉÁÞ>ø®CÆÞ&·Ð,³lH 3-Zñ_‰-<§ Q.0εâÚί5ìù$Ë<‡ ½É5öéC MF;#å猩Ï!—·7Z­âZZ†šêv ª¼òkî¿Ùö~Oè1ëŒ?ñ4¸·0å3Ú¼ÿöQýœXüMâfY[ rqëŠû.Ò1 d…Çð+ã±Ø·VNzI…Ãò+±˜fNÍÐzÔW2GÆ01$›áħ yàÖªÉ4²±*0 ¯)y–Ë#0Eãïdâ‰ÆÙ“ò‘‚2 ÿ? x$®:†ÿõUxÑV6Žâ3ïT· ¦L² ™3ÇCž”Ž|öWi@ Ø÷53B®˜äw¨]¨b-»§½4Ñ6,H®GdçŽß皆þqmjÓϵa%ˆààzÓ—th¡²Íx¯í%ñ ¼5á¥Òí$"òÿ1¨Vù€<þ}k¦ŒjŠ ©œä ¹žÇk×Çâ_Å;«¥ùì-ä):`¿r_uö¼Ô“N¶9Xÿv}k°ðì àoͨ\·3¯Ëž¼×ð»ÃÓ|Cø È ÛÇ'šäò1šûZŽ8Zˆùmâ±£>¢øáoøBþ[$ˆâäy²9çÿ×^ŠX¡ÆHF\‚i«vöÁc4U `p8¦)–I6àr:|¢¿?”œääϯ¥H$N!Þ;“ÝsŠrÊcI'ÊzädÒÊêË"±èpi²¬Åx¯$AOr´¡Ã6UOzÕS3dá†*Ç”’ÌD#.y;›€i†IÁ÷¾(Z–¬y7Å¿†¯Z6©aÇ}l70%”Zòéu{i,.ŽÉÓ›Ö¾º—bÁµbR¥NQ—<}k翌Ÿ §ÐîSÄPeù¥†>«ø ÷rÜo±—±©ð³ÃÌ0|ëÚCsÁ~*¼øwâÞY­€u¯°¼-­ÛxF†÷O˜yç8oB+âÍ>þÛÄÖ^T¸[•Éë]7ÃO‰:ŸÃ\A$¬ús¸ó#<äg¨ô¯_‚U£Í ÿ3—q~Ê¡öí£™I$jøå#õ«Ú«&Âàú`šÇ🈴ïéê|á‘“;}>µÐ@@uŠL6A<ý+ã' BM=ôéßR…Ã*¸`™+ƒŽÕ£‰UwmrXô>™8IÇ :ƒÎÞà*9 ;v² mȬ85™¦åéÜ3îQÈùy"r¡![äÈÀïB†;X,GÕ¨¡eEYœrwQBÈ-ᵎ6d.ç ö'ÿÕWmía¸>èÉÆsëþM<*:’ mÆÏ'׊–×ý2¾Y% {S¸‰Ú« |ÄœÕ9K“Ëo—îî~JÖ„¥ †Á'ŠÍŒ™®³å éÚ¢÷Qa"ÍÛ¹nÿ•LÓ—V~Þ€”Û˜^Œµ˜õ¦[M°þõ ØÅª­c’:ñÿÚ+à•·Äm-®l#Xu«eݨÁƽ˜Ã÷cçk~ŸZb‰·dÁûØíU Ê”•H=QH*‘ågç÷€|gqáýBO x†6M§Ë"NƒµkëÚ¥àbxrvPŒZ#ÛÒ½ÏãçÀ?ØË«èÐý“[€dókç¿øâóÃWòøkÄð´aÂ&ê;w¯½Ác!…ž“껟‰ÂÔÁÏÚSØú³à¿Æí?âvˆ,.åK}f»Ðî`ñ'†.Y$V#Â{úWºüý¡mËÈϘ6‘Ý…G4kj±[‚Z)xÿà_âΉs!hœ—žÕú¬ò:®ÔAü«ø¥ðËOø©áytˤRøc ãî7jô0X¹a*óô{œXœAN¦N žÛám ]Ò¬Oå´„C!ó%³aÃŒçŒÔž9øó§ø‘ííŒÍœ×·”äÆ{þ­xç‰?j_]øËÃv±[Mi‡í y€ dŽÇ¥qŸ ¼ âŸz´ÐhÖçÈ‹&[¹8R}éEJ ¯;$Š£BuÛåÜô‹ÒÒ85þ;‹6¸WÈë²§Ž,€P®&‹É²Uer2Ž”ß" à Ç­F±xÉryú{TeËÚzdÕ¶M‹2IÆ~\Ðöª³—g‰ r2{Õ ¤`c±5JáX”*~QI ™·È3UQÏÖ¡Bàz·+osÎ=j¹VþQ€:z‹qK±œ¶wžÇúTrÄ t犳öRŽ«c'+(…²œzv¡è#¶O1 –½*Ã’È äTMŒaˆÃsi$uŽœdô¤Â×¹Ûóc$ô«1¸xÊùgŽ„Õ'mˆ­»w9EX4Š\.ïëþ}†$…X©=íRª¬`™2z¯¨´R·~y$ÿ=¤ÜA#pïB`HͽX ùTlè°^XtžŠªrÀ0Æ@ ¥ZAœ)>”1®Ï¡üÅ#ȲÉÊ÷½4BƒõÇQJ¥‹±É튛–‰ùÏìæ‰WËP¨Œv9¨æo-²‡v{ã¥8.ñƒƒïš¥°Šá0£ŽÏ¬£ß€ÄñŽÔýØ}ßÁúR2FÓÇÌz´‚ã&rS$í¾*»`Ãê;U™ƒKÊ~Z Åâ,£NsúqSrÒдÏ@_ ÏQÖ¹ÿxËJðF“q©j¬0Æ › žÀ ç¾&üYÒ>iÆ{Ù7\íýÜ*Afo@+äŸø‡]øÕâ¾Ô^Km%1AŸ”_¯½zØñRæzDâÄ⡆4™wÇõŸŽºÛB[OÂçË„“óû·¿ò®sÅþ'Ó¼¥‹ "¾nÜ^´ž3ñ¦àí4Øi…|иf^µàZÞ·6¡rešYü©žM}ª<5>Xì|¬LmNiíØv¹¬IwpÓHK»Ÿ•{“_AþË_³t¾&Ôáñ7‰ d±ƒÅ ¿ùö¨¿f¯Ù¢ïź…¿‰CÃP¼Cv!§žµHŠ ¦æFÎNqÅ7!B©;Hïךtž[·ÞÁ'‘Pn’ Ãr4dpzcÖš]X™·«Å¢iW7×SáaŒ»ÓךøÆïQ¹ø·ñ}NWf°È‹pà(-"F¡UGaŠáͱ<òöQ{à0ü©;.)ÚänÏiŠ2t=ý)×N %Æ\öA‘Tåi÷náAä_=¡ï3ªJ@ù”œîJ“Wd×<ÿžiž`@6¨~Üæ¢bY `Ç´_¹6C•THvõϽW:lù?¼oÈÓ–P&œ/=óíV áÉùGùüi&#ÒUÃyŒ‹Ž àý+¤ÓmÕ™™€\vc“õ®sJY•¡ Ø‘ŽìÉ‚òÒ$©rJÌ…Ž*¼ç×…u5ØE&ï–4 “»¹íȪ×,žf~`Àœ)È'Ó5rúvo)#‹õ~ãÞ³îcÌ‘ªœŒŒŸ¼{óP.§7q’iø¿ð‚ßoDV{F9–”=ÏÒ¹+KËoXìpñFï_hË µü~TàÙJ8` õ¯š>1ü¸ðÍëë¾RÖe‰xªûâ¾/Ì\R£YéÑŸ;ŽÀݺ”÷0þ|LÖ¾ë ›Ýì¿y aÔ}j{g.Èܤõ=*­[l¬kg v©˜´üGˆˆŽ9õ¡Xßdîñ—ìçâ ¦û­7vVDåzWÛ`s:x´©ÖvŸæ|ž+:2ö”v=[áOíyàÙ“Ãþ8…ä[lwÄe—ýïñ¯§4ý^ÓĶV·v¥Í¤Ê ÉåÒ¾NÓõO ünÒ€uŠÃVÛó)ã'Ú±ô­GÆßõm>G¼ÒKe휖ŒŽäzqYcr¸U|ÔýÙ~ éÂf›B±ö½ß–§ÌÜHUÆ­F‘ùˆg%‚œwÁÍyŸÃ_þø‹VÆeÓõ2¸’Úá¶’Ù9çðü«Ó$Km±•tå#¨¯­F¦\³VgÒF¤f¯$ñ‘ Â’Àd†©m±“Ëf?ÄxR9žy0áG¿¥`K~K«° œw§© ¥”n+ÑzsUÖVir¤èzzvJ>Æ*4Ñ,€¸;׃‘Îj…#Ë $÷•,¯)DXÇCÈ'ŒT°±T*;¹ ó@µ!tòª¯ÝAâ¥óš‘ªïwÿ?IF@aX}ìÖV±¯XhZ|÷zœék ’æF|qUÛ²!´_cµ ‘‚3Êñ‘^Wñoã¶Ÿà}=ì´ûˆî5—Ž9úW•x÷ö…Ö¾!êá¿Z»#¹F½IaÓÓñ®¯Á_ô…v#Ƶ¼Ô|ĆfÜséŽõõ8«j¸…§EÕž63 ¹ õ8?f_ã“«xÛÅWÇG™b2ÂeãvF}«Ä|ã±áÍVmþ_>Ý$1ç‘­Ââ%m¬¯œb»ýgÁZWÄ0_é.‹qÛTàæ³«FŽ2ž±}Bj˜*–š>êy£Y"ÚàŒSÅ9>pw›=GjøËá_í®ü-¹‹AñlR^iˆvExù-ìÔ{××^ñ.Ÿâ½*í:â9â‘wƒñX¼ ð’×X÷>¶…xV4MÐÁ³0!ºgÖŸ¼Q°0ÇCÚƒφcÂi‚¾Ÿjó­}Ž«’!qYO!{3Í Ý€N0zI·Ý·ëÅí|«(Ú“¸‡¬»£ôÇoj´eŒ†5EËo$ „õ9û§Ò„ÃBÏšDx+»>¼šarìÍ€ŽqÍ29K.G>Æ¥oœ~¼ÓnâØŽdÉÆ{p)ÐÄ#ŒŸºÞ™æ€Ùr ÆiZem­œ ç¥4/"9÷¨FÜÎyúUef˜uÏ«l )¦8çùÔRD­v‘ЕR‘ÓŽO8Àø9*Á\Õˆð©‡`XwZâ`?)?•IK±)ec¸e~½ÿ t+ª«(_~™µ DÒ‚CÏÒš¥‹+7 ú¨ò \²³¼’Û•Ïõ§yl§%AqÁÏøÕy@ ÂzT‘©1ñ•õ'‘Nıñ9,sNµÊ#“q?6x#ž)¼p·¥D‡ÍPÓüÆ‘"`£ù|ñQ´…þLo¥HahŸ(#¹4ÈrNÞœííQ°+ƒ . …þuN«']£¿RËóHI9LpÆ>´"¾US…ÇzjÃ$‰: ëQ”܉´sÓ8¦L›cÊkÅ~>Ò¼b÷zìPG« “éŠ\£¸¶6ä”ÄÎK…ŒœšñŒ¿´&™à¸dÓô©QÕ›*"ˆä!ÿhöúuúW—üEý µ¯ˆ×Ré~†K[;dº#æ ì+ŠƒÃZ_‚ mCXœ\^0ÜCœ’képYCmN¾žG‘‹Ì¡Gܧ¬Š£KÕmǵwÞN$%пÞsPM”hÈ\žæ™$y›~íŒO;9üÇjøIÎNO©õЂ‚åCÞ7pò+üêzb£šž4.Ü“S­äQ‡VXúúÔ æJ¾”ö4z•#M¨Ù*1Ðæ’PfÄ„8Áb{U—³G¹þ\Oz¨øl©ÁñÇJ-ru*KqÁˆCÐ`ƒº ß/aR GpÄaÂg É“À¤Ð"¶›nlhÚ¨òzúV„“Ç{‘ƒNv.çZ>—B™m®ô5¼·2.g†` !ìç'¿ZÂÓÖU„ýܶTóŸ¥vÎ<¯S˘ҖêLÄâíó{}*¤¾ÕEUà’¹ÁÿO8 T8r¾qÿÖ¬FôÁòÑÉ;S¨¬ÛìU®:{Ñr#3ʹ²àãëYBÓ±•›$1Í[äÈJÆ žyã½>&Y£SϹ°@àZ’’1Ì3}²G˜–OÊ·Jвwòø@+Óšº4æŠY7+)ËqU¼¨ìØÃ,¹* çð¥q²=n^Ó“Ó;I«§±0H«8'ÃhhÏ–<ͨXž™«¨yU¡ ÜàŸZ-¦¢Ñž#ñ{övþÐë^Câ2H8½Åx•†¿q¥Ntí^Ý••¶°WÝSJn¶‡%n;Wñ/à¶•ñݧŠ%ƒPTÀt\}ëØÁfSÃ{•5‰äb°­ïGF|×.‡üi3æ0ØØ>¼W¨|0ý¦5?χ‰!{»Aò‰ÀùÔzŸZòïx+ÄŸ §"êc¶aÊ‘L±ñ™â(|»°!˜Ž§Ö¾ªÔ1Ôû¯Äð£V¾V{{øKÇZ/­~Ó¤j1Ü™àƒèEulJÂBÃz­~tXÙêÞº[í P’=§ ÄÄgê;ŠöOþÖ—Ú|ÙøªÓí'|C ©ëçñ9DãwEßó>‡™Ó«¤´gÖp@¹SûÂsŽÀ{{Ôè¤Á@9lJá<+ñ[Ãþ5·ótÝJ&“ø£g ÀPy®ºÎ`Jº;8#çp5àΜé»MYž¬f¤®™zY›É1!Êz‘Kkä¬j¹#ÖAëý*¥D2í`²v×…Kry*27€cœÖ.åÕ–"d2… Éé³?›ÂãåìjUU}ÃŽ†¤‰w[ÆãÇ;=(¸¶4m¡PÌW` Äðhd2[B_’ü:sŸËùT0NLÙÆÇV·,JèW DZÿ>Ô\Š9\…ÆOL 6N1Óó©L±àï<õè)³Ë,¯›ݨ ùHUw?^G½fø‡ÂºwŠlZÓP·ŠêÕ”þîEëž85iBE(’#æ?ð¯`jØÞ\d~xÁ¡èKÏþ)~Ë:¿„®e×<îÑ.d6Ê~eÇ¥søñ$4_Ù“·÷lò¯ ô¯¹` r<¶ÉCÁbqí^Wñ[özðçÄhg™¢[=KxÿàF .줞çMS•š” zŠíüñûÃÞ:…4ÏYÆ’‘´Í°©¯¨QÃã©Þ’íÔñ±8®ÇÒ¾2xkâ¦lïá[’ëIÙ3ôï]ãJ¦$(»C¯ñ®µð;‡m[Áz±|è!|2š—üqðÒíl¼SdÚ­Œ/˜ã]Øù¿}ëç±9;ÕÐ&{x|ÒM'£>Æ0Xí%€Ç¥+Û%à üIÜô¯8ð/íá?„[{Èìïlû4çczœ×€zf»ùµk 0óKv‘DÉÎÀ_=R…JRåœZg­ŠK™2È‚O”–Sýà¼þ4 ã·ÜÌWc€+Ä|ûQèce¥1Öu!òˆ­¾e_bÃóÒ¼Ö)>(|l“2ÊÚŽÝc‡äÚ=ëÒÃeuëûÒ÷cÝœuñt¨­YëiÁòKe¦8Ö5òª@w{Šó‹?|@ý¡åKÏÌt#´mþµzÓÃÿþÀo5›ˆõ=YFï-ˆbO½y'ÅoÚ÷\ñT/¦hÇû+K*¤XzúÌ. Ž^ _æ¢>n¶:¦!Ú#Ûu߉¿¿fÍôí5-uWiŸ† ú羕ò?Å?Œ^ ø¡©5Ö©{#DIÙ “ ÎxA×þ$ë¿cÒlî5}FFù˜dª{³töÀoØçOð”–úÏ‹JjšºáÒÝ¿ÕÅøzÖX¬Â–>Wwø8l¦ùªhxßÀÙ3Røñjþ$It½Ht¶#l—¯>‚¾ïðß…´¿èÐéúM’ZZD„@:zšÑ‰N‡Ë‚5H‚€¨ƒ*z”ŸOù‰­|V#’ãN<±ZKñ¯àF“ñKOfŽ4ƒRQ”™@äú_ÜAâž%{[¸äXøî¬=½kô¢h1 …aïÆ+ø‹ðÃEø•¥½¦¥¬¬>IÂüÀöæ¶Ácê`Ÿxö9±Xb#g¹óŸ†uß üeÒ¾Ëv"·¾eÆN5„Ú7gÝTÞh²Éw£–Üöù%ïO¸_ˆ¿üIðkZ{Ë1,–Jû’â<ð=ñ^—ð—ö™´º4[¬öî6g³šûº5(ãiÞ•šìÏ—*øÝl{¿ÂßÚ3ß#Ï7öv¤³¸ù\žäv#éù õHeDXÁºÓó¯›|Yû7h­?¶ü¨$w?}V'ÃíƒÅqúgÅ?ˆß/—Mñ5”ú¾›ÇœÀù~½ x8œ¡I·‡ß³=œ6e šTÑŸeG!`~`F;Ô áÎJíÈÆG­yÏÃïþñͲ‹-I ¼?zÚ‘רƒÿׯH‰â¼Œ2È:m ƒ_7VJ/–¢³=ˆÊ2Õ±-Û¦;ÓÜ n­ž2éP—hØ„¶x'¨¦gUÜp<Šæ.Å 9*Ž?#øTèÁ›q{©5eŒ`ç€9µ5JÈ-Îr@ä ¥ ž¤Ä*˸ ŸQOˆ—'¨<Ò0ÈAËÍB~ñ I>ž”Ú® ë— rGQLbÎFÒOSÓíC=GT%Ù€ `ƒÇ­C) *„rY@þB€ªì2Á¸¤“$“!õ¥5-ŒÃ*v‘ÓÒ³êP· áOVU|\ŽyíR+2ò?‰¸œS¿=qNÀ4»LãvÓÚ]¨SnX÷¤pUÊ‚y&šd ¤cžIéU~âÜ®T´‡åÝì)ÒFa³ž?§­2TTç4‰ó1v,ǰjCèY»)lbL±’Þ÷¨L¾dŒ»±Ž£­bkÞ0Ò<5m-Æ£{1¯Vg©''h­EcqÁb ·ÐÖ~¯­Xè–¯=åÌVñ ,ÅØù×€ø¿ö²³F’ÃÂVj—-òùìÀ}Ašói<'ã_Šwmñ6¥,ä@ª(ôÅ{X|¢µ[J§º¿‚¾:ï;³Ð¾"~Ôö;éÞ‚MRð¦eºSëžÿ‡ç^PÞñÄ;¿í__Éä/Ì"f ö¹{yà¿…6åCGwxƒ#95âß¾>j%/mhßfµèN8¯©Ãà¨ácx¯›>v¾:¶)òÇDwþ$øƒ øÅìô„InmÜ1Ö¼ÅÞ8¾ñ5åÃ'€Ms7ZÄ·w~\;îîœð£š÷?‚Ÿ²F»ñêßRñ m?L,cŒ3aYbqС¦äîy_€~ø‹âαŸ¢ÙÉä3$ÄÜæ¾ûøû-èß m’{èb¿Õ˜f8!O ¯QðÃᾆ–Z=¢@y@›ñ®¡#PWç%—ÇšøìN6x‡e¢>’ÓC-­Â¨ÀS€LUyå_99ù±éõ¥¹pAÈç<THØåÜôêõ®±Ú´I„jQò};UFE]ò;AûÕ=Ò*28 §ióô¨V8Þ)9±ïÚ‘HkØùˆÉÝ» ŠFɸŸ»Ü uÉhv}Bšd8àsÔñMМ±pp¤“ÔS”òŒ’ÝŽµ¿Ÿ¸/ÞÁ'©‰Å€W‚Gz²[`6‚uÆxú×›üZø«¥|5ÒEd›R|ˆ¡%Ž==+ã'Çí;ÀÖÓiÖ!nµ†àFÂqÆkæ» [ïjÒëZü¦Fs»ç<ØcÒ½¼_*ÍN¢´3ËÅã#†vH°êõÉuírB"$•F<(ôÏüEñÚYÛ6bÃf6üµwâÄ[}6§i¬ Û·äíIð;àeÿÄímu E$‹I÷<„}þz újõ©àé_·Cç)Ó©‹©í'©wöyøsãÍQ5ÍViP¶Hqþ°ûJû:ËK[#†!´AµTqŠ“JÑ-<5§EaeŽÚ%Ú¨½8ïS÷ Ž@ç _ ˆ¯‡ dâ•ÜvÉ­$qrA$w³ÿ”[$¶-$û9…c‰aÊŒqõ´Ÿ`ÙÎ@ÎpF{ÓкÜ ó \ª*ãñ¬ÖÖ6ô-¼-4R§–vÉÃâ¨MkäIÈSÀëŽ:UÖ¸m‘” Á†4·w} ÆŠ^2H\àÔ=ô ³.8œÉ¹B©/—󨢡õ’ ¬2¤ô5§:¥¨Ý mcÜ¿…Q‘ É Ï<ÑvM,1Ì©þ¹­KÞYƦLu#“X –\ŸÝc†ÁÉ•jZ¿Ùˆåñ÷CzÐÆI¨i^!Òä±ÔlbºVSëÓÞ¾uø•û&™Øê˜opXÚg‘ì }/…SsEŒž€õ«Æ#I ‘Ï;@àjÚ•Z”eÍMØÂ¥UV’?;'“Ä~¿k]NÚUpVA] ˆô[í»a˜úŒWÛz×€ô_ÙÉo¬XEr²†_ƼâìvL’Üøfè‚îN@b}¯¥Ãg)®\Bùž#*ך“<¼'-¼«s¤^²09R‚>•Ûx_ãw<Ѥ³NÚ>°\äŒ}G5æz·†|aðòì¥Õ­Ä!>u;OÐÕÍ;âk*쿵V©#5í§C¦¤6ø¼#ÒçÓ^ý¬ôIâMvÂ}2BFçLº{Ž‹ñ7ž&´VÓuk{Œ.p®¨ë_Á«øk\ǘ.ÝêÀð\°›IÔDmÔ|Ò¼ÚÙ= ëÄ拏ÉiV'èL3Gr‚H6°#ëǵ9¦ýè*‡Xz~Uð~Ÿª|Ið~ÖÓõ«·Eè …Çäk£Òÿh¿ˆšH—VQ^¢œüÑxúé^Lòj«à’g©O3¡=ݶáPÑ3H™œŒS~ÒPÍžGøWÊ:_í›qhãûOÃ3gøŒãùŠÜÓÿlÏ 4¥î´ëød8ÈÚqË+ÅGìkB[HúZ#*Ü6Ó»|ä sƒS˜LÀÜXŠkÁ4ïÛ À†`Ïqu{´-Ç×Ö”µÏøpɪNÄ“Á…ÇãÓüúV?PÅ/ùvþãO¬Sé#Ú _0SÎÜ7Ì;äÑsmgqü]±^1qû^ø˜©JÊ3°#ó©?íwà(¢l_ÜJøí g?\TýGÿ>ßÜ?oO¬‘í耰1°Þx ŒzTä,»’&ø['ŒýkçÖý²üi#4÷óäsˆq“øâ±'ýµì[Î>½™˜ÿÕÓø¿¥m³- Èxª+íK>›o{ –×0¥ÔL1±Ô0¯ ø±û!è)Þè¸Ò/È$ûŒ}í\-Çíiã[õt %³¯üµ‘‹ç>ÛG󬻿ˆ_üi”û@Ó£n·„=ËdúW} §NJq’‹õÿ#†¶7 kIÜób?ˆ³Öµ^O"ÀǺ¾UÅzV‘ûLxkĺWÙ¼[¤y¯·l)óf³®~x«Æ2G?‰õùçDíu9*¿@Ná[Ÿ‡^ n­ªEq$x;8¯®¥*Ž 5ýçÝ)]Ñ”ïyN­%ž½­;x_Eº1îÌlë´ûõéÞøKãÿZñ«\Yi¨0!ô<ÕÛÿÚÁ^ ¡Ð4ا‘>Um¢¼ÇÆ´¿Šé&t"P=˜ävÿë×ÒÞ ýªü¯4p_Lú5㬷‰…ÙºzW–9«ÓŽ÷>‡°é&·;ÿ‡¿ ¼?ðÎÂ+NŽØªãÌÚ7·Ô×OpË–-ÔppzU}?\²×#Ú^Cs €‘éþ{Õ©œ2` Ž0+ã䤛çßÌ÷S¸Ôg’… ˜;Oþ4ȧeUTSy?:sn•V4'ä1£Z`¶àG8¬îQ3¸”¨Øû8éJ"@ä9ƱQÛ…XŒ„œô©2 1Ï=€íM"Jz¦ƒi®YËi}n—PÃ#®z÷¯“þ2~ÇÒ¹Õ|(NdkCÁJúú=ŽùMÑœ”ÉXÈÁÞ}EkJ­Jç¤ìÈ”T×,•Ñù¥á_‰~0ø;®„Y®-&‰¹†\àã¶ }SàoÚ»Á¿¬Jñ¶ sÉ…7\ú‘^…ñ'à·‡|}hðjº|ipÙÙuá”ãé_"|Eý—ý°ô{Œ[ø“O¸ÑîǤRÑÿß@ü8‘¾Ãy6³oLŸ4ìzÕdý >"ø<ù#ðl®GXC)ÇЃüëÇ©‘×ZÒ’—Ìô©ã)Ëv}QLб;TbR%#h*GsÈ÷¯ž´¯ÛD±j]þžÃïy’?0» 'ö—𦠶±³À“ä?®+Ï©€ÅSø©³¥U„¶gªFdüùSëÚ›;§jàwõÄZ|kð•à ³jãfÞà`_JòÏþÓ¾ð×™­ßö•È8Ûmó¦G濳/Œ¼NßhñN½'–yey —JÕáçÆ1yÚ­ü7—1õPÁº~5êÐÉ)ÿËÉ9?#Ê«›Â?ÃÌM[ö€ñçŽÜÚøcFk˜à\J›Ÿòéùæ³ì~ø‡Ä×CRñ–³3!ù˜Lÿ(N‚“Äÿµ‡¼7–þÓcR¼,›Ex?>?ø‹Æ 1–ùâŒçäSùW½O G ½Ô£ø³Êž/‰{ÙDê-øqð–ÞX­+ûÔF~µâ>ý¥µ|Imb~ÇmÎqÅxV£âc,Ž^F¸•½óúÖß‚~øÇâ…ìvúNŸ/’çc)÷¬ªâ©RÕ}ìº89Íêeë~*–êV{‰ÚyøAÍt? þ xÃã£Zm“ÁfHÝ;© ×½}[ðƒöÓñçÇÀˆñÏ*ÍzËo ÄöxúÖô©J¤¹b®É”’Wggu}m¥XOqu:Û¢¹Ù°=ó_5ü[ý¥f–wѼ'!fûtƒ|Wã/x¯ã¤aËÚi…²!CÆ=[Ö«7Døygç]È“^c;Išú¼V Ôëjû=‹Ì”_%YŸ¥xeÄ«kr‘Évi[$ŸSšç|kñnÓôܤkÁdïY:ÿŒõ_ [4,œ,h:þî¿f=’Ûë%A–Ã¥³wúס‹ÆSÂG}z#ÌÃá*WŸ<Î+à—ìõãëÕÕuex4ÐÁŽþAíšû[EðÕ—‡´¸¬l#X-ã\*/_­-•¼xŽ"Žx”( S”ÉY998äãðÕëÏ.i³ëhÐ%d(”Gò 1=Ny?Z„J¨ï!V(?„šGPŒD\“Žh[”Fòäá‡÷…atu\†é„ª„ +œŒj»0±±õçõ«s;¬€mSˈBÀrOJ‘™¬Ê$ç*ÄòäóM¸…VDºô!ö º»Žúêw‰ÈqÇJé|9âYôû" äZ»´½?µÉ±XÆ\ håèG~µÐC,^R³‚3Œž)©8j„ÒjÍ~5¼¶ÖµG–Òí£”†1Z¡¾½k5,ö£‘ÉaŒœÐ ,5)-¦I‘‡˜2Œ¦Aí]å‡öOŒ.åŽöá4‹×J¨N}ÀéMCÚ+­Èø=²N¨§å*qÆ2 Bʨ²²mŒã†a»?…jkciW_fˆ¤à1̱ò­î>•B;9'Gfþ#þ¯¡ük™«nkžÅ."«æ °Æ:ÕA $ªÊ7¶îSÓüæµn#&ø„jƒóúV8”At€/ä>~éõ4u-Â!b TËß>µq´¢\DÆTúÒY±gpdÞÏéÈ©ÕY\׌ä€:ûb¥î6É£#R6óó;Tå­ãÎé¸òEV¸–S¹å—z”!ãŸ3¯— |¨ eˆ8ªZˆ™n$Kr€l~~ ÔöòË2åbWÀÆìò@ªÐÊ$PÂ`€äa°søU˜Õ`¹L6@ö§äPº†‰iªiÍݲ]¡Ïîå@Bç¯ZòŸþË~×VRɦÜ7!à9P{|¿á^Ám¨™$† Ô¬dýìsZën“9)¹‹žJŽ€tçó§h;ÅØÎPŒ´gľ'ýŒüE§1“H¸ƒQˆüʶ9ü y†¡àOx>á„ÖwöÆ>¤ÆJ©úVöH¬ ¶g’2=ª 섈ÐÜ@· ë†B½~ ×§K3ÅRÒ÷8*eôjt?7­~%øL»™ìÕ»añÂá-å’¸NÚûGÄŸ¼%¯ô͇Ìñ®×ÏÔb¸MwöBð]û³Iy¦3 ådÜ9éÁéSÏÕ yòÊ"þx%·ÅŸßö­:1ë•«kâ?ê.|ûe=Ô íõØ—f~Ãâ O8[˜?¨®^ûö+ñlJZÚÿN¹ôŠz×t3|$·ÐâyMEð²²øqsÄ»Њðüœ‹¥ëš©/ì{ñ -ËÇme"³uóÚ³$ý•þ$B@(œÇpWBÌð¯í~&o-Äw:£ü;‹éJH©m­~Zó$žgâ¹ ?fψ±Éå·‡äÔÊ*Ì_²¿Äi£ßýŠª¤ÿàSþÓÂÿ7â%–b;bë¿,w2[+óÁ8©“â÷tlm!%#Œm¬]?ö;ø‰~¥Œ*yKšè,ÿaŸJÿé:†•l£©V.Efó\$zßæh²ª·Õ•.?i»;y6éÚ“Âü£ŠÀÖ¿ioÜ;GGj;mQúW§é_°mé@Ú‡‰Ö<Ÿ»mæs]¾‹û ø6Ì+j7ú†¤ý[|»ü+šyÝü1ü˜å y3ä=oâljulý¯YuøÈþU•a¡x‹ÅR±iúž¨Xà4q6Óøž+ôcAýž<ásؼ9he‹K2ïb~§ú× Yiv¶Çö‘B>Tˆ(ü€æ¼ê¹åIéc¾ž[F½OÏÏ~ÇÿüV‰,öÖº ³Ãî“NŸ­{„?aMN·•uÍjãT‡ð` >¾žXü²qó1ôéô#½HªÌËòã8¯&¦;Wwcº4)ÅZ(øËƱ–­¡K-Ï…¯¼ø×æX›*ß…qšŽ~&|"½ò®ã»hcãd™+øWèíiDc#½è*®©áË eL7vÐÝÆã %@Ïá]Ølç‡\²÷—™Ë[F¯K3å þ×´‚ÛÅzÑ]<žøGñf6m7Q‡N¼pG!r}+¡ñÇì§à¿n6¶í¥Üœå¢û¹>Õá~'ý¼_áé$¹Ð®–ò(ùQ•ʽú9¶­¹Óƒü¦WVôÙÙj³_‹ü 'Û<-­LÑ/΢ ‰Søg–Çã¯Äß8‡\ÒT.c1ÈqîOJò‹ˆß~ÍäÞä‰6L R>§ŠôöɳÔ"Kohp\6´p~µéJ…Tnœf¿W†ÒG¦ø[ö¶ð®©åÁ«C>r͆i×äçÜZõmƾñk.™©ÛÜ&:Ç(9ýkÁ „£ÊÍq û¯€úÕ=GöPyí¾×Ãgæ_&\Ð×_'¢õWƒûÑÝK5éQNª X4d:xéRÅ(Õq×½|‘öo? œ¯.£lœ…¸]ùQÏëZºGíe­èn-üEá¹TÉoœcéækÉžO^:ÓjHõiã¨ÔëcêUº- … ?Jg—•RFnµäžý¦<â7D“RlÿÝ»Rƒóé^“¤ø—LÖ£Qi¨[\‚2 rŸÇ5åTÃÖ£¤âÑÙÁëi$[г“ëŠ0cù—ƒÆÖî ,*e,é÷`¿‡¥NÈ¡p3ÐW=¯¹Zañ ö~ð‡ÄHŸûGIH®ââÃë+å±'ˆ&Ô‹6w7šù'ó¯w“ÎVu¼ºžM|Ê•-#«6üwûBkÞ<¸k[=…§Ý¨ùØJäôÏ¥³>£âÂîß3[$Ÿrh×¾'è·k]"Þ9§Q0×—j^&ñÄ ñ "Y ‡ c?ʾš 8Hé¢üO uñ×m‘Ûø«âÍ–Yh‘G×½rð_‰~-ëH‘E,¾cdÈÙÚ£ë^Ëð“öIº¿hu/Ÿ""C c÷Ÿë_ShÒ¼/i¶•§Çm |¿(ù¾¤×…‹Í’NO —[Þ™ç ÿgÝ áÅœSÜÄ·º«e‘r¨}«ÕÒ7L®0sN}ªNXçè†óŽHãžÕó”ª>i»³èaÁYg‰b¸Ý´`þT)òÌaÔcžM\aJò3׫Ü@"Gòù ãzûÔ2ýJಮW`–¢WR ,€ŒüÓOXÉ@ŒŒ¹ig‘Ð…`1ŠØf­¼Î˜<*'-.ÿ-¶¯p¥XŠ2m¤ láHÿ ®"(âCæ„;•âŒ2… †S†>´—hðéמԻä[‚¨…·zeÁ`w6\tÁ=)ìK(´²ÆHˆm x=3þx©¤”}•C ¾zõªíŽÏÁHÇ#œš‘U¼•|3ÉÇô Lµn¦c–?(ä µÇ÷?J‚07`…`xàÔ†ò~ïýõOÔNæ§iæÝ›h„0œ¨Ù þÈ=ë9푤Pï-’xàg¾}jöâ3i»ÌtÚ[”#*EuÖÒüem+ÙÞç]"îò®_jHÙ?Ò»ùyµ‰ÌýÍö9K}:Îд—ω‡9¨.n-ÚBÖ "*áGCøU zÛK·Ó‚7žŽúÕÍLˆ25Ò‡tþGò¬Y¢wÔšÒxþƤ¹ó`³œšÓÓ£d¹$d}Üg5ðXÜe‚¤NàXã&¨Í¨È‰$q²á†p§9¥¯Mµ:+k«Y¯í›Àq€cnPv5±wàË¥°7–¿éð>Üä;ŽÄWiv.æB“üÀu®‡Ãž(ÔtY¥’Öõ­Ÿ&;ØF+KÆJÒVµ‰Ì늙ŠcŽxÎ+6ÚØÝ€‚3e·a¹®ºóC!»eŽ!<À;ÌORk-tyì]KÄË"œ0¬\yG\–Þ<,»~ï<Õ ªé&èÈÛ’„àþ5ÅûG—T™‰à~”;ô!L[‹ÉÆÖö©¬¥‘å1É(¹Ê“ŽÄSÚ?>Þ#3Ÿ¾À`aU.ЉX«ùªF náEÝÆlÚ¹w ‚p0¼ŠÞÓ¦²…à Ë…sVíæÇGq^HàgëZö-3s&`N}êüîÁd<`|¬rQ¶–}ü–`ãµ"• ¹ÿCÍ}̹ÆNôBÊ‹’\ i4‰°«m¬Í‡-ŽXŽŸZ’(Õ“q%›8ýEòšB¥¾n0?Z´ ¹d‘T€7|§t©h{¼í!Å”\rqÖ®,ÅäE Åq›“U¡‰ÝÂ(ŽxÛÞ§ßp¹ ª®€.áÅ;h&8»E°…Ë9 ÐUÁÎÆËpEWvÚÈH:ùÿZ– Þ49å{f¨—ªÐš4b¤‚{”Ç$Áì=*ºÈË’ßxäçða"ó¹mÅ»” ‰”HKƒµG=³S²Ìy¦¤m<°ÝýÓÚ˜èûÔ1mƒ¾Þ:Sâ²ãíÑS³«F¨£i uþuŠw 1%sŸñ¤ŸçP§ž ÐÈŒ¤•Î:w59ÜǸ= S÷r¹Ç=*  å²ã‚9ÏÖ†]c@°ñ]í”c§ï8úòßþË^ñX”ÇbtûƒüPðúW±+f/Ý6ö=GøÐ Œªü£ŒŽÕP”©»Á´L¢šÕx·ö Ö4Ç2øTYÎrÛiöæ¼öã@ø±ð®äí[ø„g¬lÅJý •Ì¡—‚TƒŽÔû¨ ¸…VEIF>ëFO±¯jŽsŒ¢­Í̼Ï>¦ Œ÷V>ð÷íãMQµfšŒkÃ-Ê|ØïÍz6‰ûS|4ñ€ø—ÿdfº*°ìþ#ø7áOÇ Ô4h<ÖîTÚò+Ë|KûxWR_2Âê{#þ}…z´óÚ3Ò½+y£ÏžV¯î2oøV_~&+>®[ØÊü„‘‚žØ5•ûkv.¼+â&änSÅIüy®¿ûø¯ÃÒ<Ú.¢· FÇ*Çð¬ãÃÉ7@u$XúËÈõ)ã0u´§ZÞLäxLM'¡êr辑\Ë©À„³ ”ÄsVl¿iÏøjDOøMæ1ždˆ²=ù×£~Ú¿ü5¶ ^Ø_<‹˜¾oé]ö™ûsxc[Èñ„áù¸2 ~V²ÀÓ¯¯,eèì%ŠÄÒÒW7ôÏÛÂ÷ £c¦ËÐï‹ ~UÞèŸ<â£Þ!´YðJáäq^ukãO~7R³Å„Òž¥ñéÿg_…^-léõ²;ò£Ì~µæTÊ(uŒ£øPÌåö¢{d Óµ(÷Ao0 G ïZÊ:ª“ÇnA÷¯œnb}RÞãÃ^'ò±Êù3Ïäk'þ§Æÿ ~¯uv£¦éŸ£g5çË'‹ø*/™ÙÊ“ÝXú—åuf,@Ï4¯".¿2žªW#òeÇ‹~=xSr^iFí$½¹ÉPjÅ—í_ã]<½gÁ%ãÇ>\ŒŸ¡SÇã\²ÉqfÏæt,eu>ŽÕ|¢k0•¾Ò¬îñó¿θ­[öjøq¬£}§Ã™=ãkÏàýµ´¼}áF×B…aõë]—í‡àkæFº´$t’Çã€k’Yn2“ºƒ7U齤¾ó3Tý‡¾ë ^:[!Ðùr?•r—ßðO_É3¯¯" äW°hÿ´€u<ƒ¯[Û±ÿžß'óÅoY|^ð…êÿ£øŠÆV-À/?­fá§¿2û̓>j“þ áá€äfì¦záN‹þ áál‡mfèÇž˜+ê´ñ>þ§Rµe8ÿW 5+ÞZ3˜Öâãæ°~›­Š_i–Ÿd|ÍüûÀ¶ÎÝÝN8þ,Zê´ÏØÃá®™,_ñ)’àϘÙϽ{¼ñ»mKˆ‹1îÀÕ¤+plƒÀÅc*µžóeòÅlyÖ‡ð+ÀÚE§‡­Ž„Ç“]¦…c§¢-•¤6ÛG8À­=¥”l±÷Í v «¿íõë›ø™ZGjñòÄûâ¦ÃíÁ1c¨¦À·MÄòiË!݆`@ÏJi åÔƒƒÓ8¨dfO¾Asšk]DѶdXHõaUn5KÜ,·ñгJÍè4Ñ·«Ü²¶ råÒ½y-G­I$yÕs:ÙÜúOÅ?|#áhž9µh'˜pb…·7ä+Ê|Gû]}¡¼¯h²ÜKÈÎp¹íÓŸå\=¿ÂOè“TÔ"r½UŸš­ª|IðWƒÑ£°….%N„^½¢„5iÉž]LÞsÒ”Gßë~%Ïæ^ÞÉclßòÎÝ®?ŸæháÞƒá¥ûF³~³ËŒï“šàuïÚUÔŧ@-£< £ÊÚéž,øznoCŒF ú×¢Ý 4uj+Èâk‹z¶z޹ñ“EðÜFÛG…AÀeë˵x‡Æ÷¾J4ϼñ`“ùW±xö6Õo¦†N4ØNÄ>iøWѾø=áÂg÷#þ[\(gú׉_8§Nñ ®ÏN†Ymf|¯ð×öP×|S$WzÑ:u™9&O¾ÃØWÕŸþxwÀvŠš}”Fàu¹71õ>ÕÝ¥»1óxÚ:Œ›ÆÆÖàm<×ÍÖÅUÄ»Î_#Þ¥‡§IZ(£<2ÕÔçiɃS«4±Œ(Qœ“Žj  ÅÜ—ÊôàóCÌÒ®€>¦¹´:Qì ó7íUxóï$/n•l;ƤU'qÞ¢ÿ[¾îãƒÎ‚†–g·$(-ž3Ö‹8£0|þñI*l) GÔ-rëò•ÃâïRÕÅ©4‘Ær©Á=rj¤Ê0±üÊ:‡=ÅK#,±¤˜eÛÜSY–à*ÄçÓR²Ä…%£ruªËæZ²»…ÛžsÍ]hÒÁ*ô&ª^±íc¹›¢Šƒ¥ˆ'`"2dsèpi’:—©8?/ ?m€mà)ã5nßËŠ(Ý“'û†¨‚;ØÒ83!ç?t UhmÚc€Ç¯µ^¼”êE²éž¨"„B­*e‰8Àjè$±$*»ƒ8Éû¢«m¶*æv}ÀÇË·œÓ|ÓÞ6Ï~i¶-O=D$vë¶_ö-]–˜³mäbÛ›F*çü5n‘Ëæ 7F ÃùÖô7“ÆdßÔŽÐWc“ŽˆÍ›«eo¯Ü+O3[ÝHWn{g¨¬ÿh—:D™ž@ämnJ°õ›qxÑI´®Ãïc}+¨ÑWÏ C]¥Žµ¤ø‚Ñ—[‚o·¢.îÈÍÇF q6‹˜® LR%ü–'°æ­[*Dy7ðà ¸Ï—F®L¢žä7VÌ.åˆ!ûÜ#Ó8¤Õ˜í mÊŒε4«Ø ½“íöæâݾW ÃŽ ×A'ßík#y£]-Ý´`³@H§ÔPàÚæŠ¹üºHâ–(`ŒË1l =*Ë4W>dcv{í`â*Ô±Ap`òÏ™¤ OJ³Ê¥†ùq`{VfêÃü¤†*Ûq²€˜ä„¹«w7 …;2Ç8ÇAêMW³onд„Œds^iZá³5l 6ð®6õ?)•©J»±´ŒÊÛôæ«CÀ Aa€2jå´@Èý__¬h±¦\F“¬bEbÀ©ã¡«÷Q™€S(|£gP?•‰!"Bçw§=ªôy`̨DzÒc°¯¶a`Hl M9ÝLÿ2ˆð>]§4Å/•,€È+Э8Æ·$«pO HȱE#¾™¹ `~Áq$òö$‘ô¥32çv<³òóÓð¦4GÌ.™ G?7#Ž´ípÔ;[ÍŒuÿ ¹oÑŒ¸êúþJ*yr,“¸ŸZº‘Ãl›q†árK¨Ù=¢)v–,3‚:{U(˜ãXò>ëU"_3s\Ð÷9üªé‘ )có}â1Š6%²XWÊeÚùëVv4»œà3üÇ¥WC–Ú…³ž­I ˜äœ‘Õyýi‰»Šñ©—ïì# ÆáOŽ1#’ï÷‡§çI1ó¦Að*Ÿ4ïQŸóÖ‡a…,]ønœgüö©Bù­»y*$}äc…p©aemå±>§µ¶ûç 0׎• Y€…³ƒëQ0ÉcaôjxË(,aŽ«ÔÓ@ËHò¨.Ø\^¦Ÿ´—\¨SŽ˜¨£œÉ€1†ìiÍ)WÛ¸’qÆx¡²<[[$ŒŽ8$w‘pTäŒÒLehÀ^þô‘#áT.ÙKÿŸéSp_+˜·Ï œŸ/;ÉëQ$óù†Ð$R«…v,2ºñ¦˜† ƒ³ã"œ¯œ)¨ïK3¬dà€8æ’5ʲckNIÿ?+Œ{|ÒnàT«·.N? ™c*[=<ŽÕŠÓîú™þTï àªp äc¡$V‘¼n †Ï%XeÒ¡‰œÚ£hêzãëR¬¾c`?Ì8=ªlžàÑ­|5ðçˆÙî“k)#æo, ó¯þʾ×#;tç±”ÿ ¯dŽf ÈF} K,¦mÌ```t­c9ÃXI¢yÝh|‹â/ØvÚI Ò5†Œº“ý?ƸMWöRø‹áÀÒi×-:§#ʘ‚kï(Äd>T‚ žô²'îTm ÏÞ•éRÍq´~ŸyÍ<5ïóÂ;Œ¾ rûV0§øI?ÈÖÞ—ûUü\ð›ª]Mw CÒâ2<ŠûÉbÆ7!#0ȬËß éZóMµ“Ÿ¼ÐŽ*ôáÄ8ªAHãž]J[h|£aÿñT` SH¶º sºgò­ûÛÓÃÚ€)¬øBÚPz”_ñ½[øàvsöØ1êѿθMWö;ð>§$¯sÚ!û¡Oå]QÏ°ïø”>ãžY_òÈ΋öˆøâ–S©øtYn•‰N?,V´_³_Šì¿]>Vìû—üÅqZÇì/¦È Øk/=«ÿÖ®CTý†õÛsÿýVÚe=vÿZì†o—K~hüÌ]V;3Ú"øð_\2ý‹Å¶i‚6fuÏÖ¤ö'ð†¨û´ÿÛʲʭü|ãª~Èÿt—B‰×±‚bsø Ç“á‡Å_ 2ìµÔcôØçük²ìþízØÅàñÙNßÁ?$YKYxŠ5'¦ÃëX³~ľ1°™þÃâi7't¹eçð5óÈñ?Ų×ÌA;eÈý 8üwø£§'TÔÐ÷ß¼:èu(Oᮟª%ÓÅC£=õÿd‹¶äÉiâI˜[¶'õ¨ÇìóñÞÂP‘k7`vëï^ÿ OñBÑ]zñëûÆ«¶¿¶gÅ{6Êø†èÿ¼AþuJ oRä ®&;Üö‹¿„ß´5˜æþå‡` D* þý Y¼—»»lŽ‚8ÆJóx¿nß‹mcÌ+Ó̉Oô©‡íóñK~ãs7L›uÿ ‹ÙÓûƒë…Õž•oðßãä‹°_Þ"ž¹DÇÓ¥YOƒÿ/€I5›¸¸Î2‹ü…y‘ÿ‚‚|Ron{gìê?¥QŸöðø¥p5â)è ÂÅU¤–ðþ¾DýcÞž¼¿³ŽQsqâK¥Ï÷§#•6_ØïÆw$CŲñ÷·\¹μ*ïöÆø¡z6¬ñ†ë·Šæ5Ú Çš£?W‹u !©ötaÿ/"½®.]YôuÏìcl¡õ/@ño™súšÍŸà_Ã} æ÷Å–²‘Ô, ÿ!_.ê~>ñ6¦äϨÌÙí¼ãéYcN×µ‰ $wsn?òÎ&9ý*e[­O¹¨bªw>ªx~ èæÔÛî.kRøÝðãA%tý3ÏaЕ¼'Mø'ãmi‡Ùô+ùsÎY6Ö»ö=ñÖ¦Q§²‚À7S<œŒûb¸jf8*z¹_æm ¶´þ#KXý¬B!IÒ¢„z…ÍpºßÇÿk@„—ÈCžíºì,Ñ•m_\{¥ªsù‘^±áŸÙOÀ>*íc&¡  rùÉúf¼Ú™å(ÿ u<¦ÚÉŸ ÛÛø£Æ3“^^³‘«Ÿ¯JôþÊ^.ñ3¬·VƒN„ó¾äá¿*û«Kðî ÃåZXCi `Ï­$6Ò„¢áÍxõ³|E]Nž•>‡€x3öHð΂ªú¤’jwŠGÊFØóüëÛô_ é¾´Ž :ÂÞÍÆ"@ Ç¿ZÑ,‚N€äð}½$“ùM»p¯&¤çQûîç¡QвCd´GˆëŒŠª,Õ ‰8wü)³ÝH&cTri±\ àcËJ¸ëÒ²²[ZÄÓ‚5)ûÀ:ãµWkß%–8À,zw©QåŽ3œ"žzg5ˆ†Uuþ"9ýj[©]$HäaNz°ïMZ%ć’‡œýidBîãny摤tOïè¤søÓk¨ÚÜ–,Xq€i¥Ò4‘‰Ã“òþu)Q+¶ÕÚGðŽZ†M¢CÓsŽ¢ýÂã#˜ÆÌ¥ˆsÓ=)¬‹r8?JuŽmjê‘Çä.z÷®ßN}'WQ êùrœ1õ¨µïê:dr]ÉŸ¦•»€e@÷=«7µèŸ.ŒÆ’h/Aˆeƒ'÷Ï­W†æ[K¥;DŽ£®r~¢³&NV(C œüÉ­›i­¡ÓVÊHÑåÏ.õ¬¯©«]‰ ˜_!òÉ‘Üçw¡þµÔYO%Œ^`©Çü³8üù®kK,Í9ÄJ@]£}qRêÔSÜlŒŒµi¸ìÓSSJðð×ï&xæˆ\qœöÖŸ©i—º;kˆ¥· Û€ÃúÕ-= ZîˆáÝœàýk³Óüqq¦Ëc}mo©]±Éwó:q†­a4õ³3’œ_»ª<®ö6fUr -üœý*îŸjc@£äP:©Á4ù4Ù¾ÖìÊYCrª h¤ ÝöÄØ ŠÃ$ûÿú럖ۚ)\ž×d¯ó¼¡«O‰I ûÃŽ‡ê²\ࢫù9nßZ½et,쯕I<óCE¦="‘bU '-³ùVŒš9@䃴 rG­A5œ‘_0nîŽ9t ÛלƒÇãRÂ÷*?›)qåûc?…U•M£VÀeêG•O<ÌX…€e ?P¸fŽ$‰ß*§ï‘Í@'™ÙãÝ+o>R¹Á9êj%bó)p¤€@õõ¬èg’Y|˜œ›¶œëZV«¶wqŒcõªJå&]¶‡b¹ 1Æ29ÿ&¥¼‰¤;£qµ úÓå€FTd…#ïuÉö …n7õÈô©hAon."hã}€Œc°© Se"¬Ÿ8 ãü)–èVI:ön;U«%Ëd•Î3µºŸÒŽ ™ïõ47jÉc‡ ­æ,r³ ‘ºG­,q®ÍÈB¹êÃ<ÔˆÓb%$ ŽõÊ 989=~•¸¸ÜÃkðFy>•9[%wЂi‰è=YV!•Úº{RF¦4sÀ'¡R˰l` `9R•@±ùŒJçjœçé[°ºÅ#(êwÿµÓÚ­<.=3ëQ”-O_Ëüþ”èœÛŽ1œŠa¸‹+Ã!eñÛ½L$óv¾#¨#Ö›ç†8*F~•)v$2¸ÆzПqXVÜ¥waÁùiT~ëî=M$LNæf,€ôÇ8¤iTîP6‘ÓŽ´XDêw==3šÌ¨PPuúþuRyª Žœuõ§DHJ6Aì~•(VUÞ™.9Áçó¨ gdsÎ1ëþx§ÊT(\zR¤*ŒàS4Š¥G$uúSJué·=GR)ÑÇígÆ@õþtÍñüáHÞÝ2)¤$Lîªì„pqÖ T™qîjdw’&:àu¢# wpÀâ®× ŠìåS# <ŽôäùLä[î€yÍJáUÜzqÏùúT811ŽT5a òK»ïu4¹u;T’¸ãž)ÛÉ »‘Ž|úÓb“Ëä‚ý‚з Xô·*cu;ÏaN˜€ä$ŒŠrð`2G¯Jk2Í.æ;ˆFNOùüëD“ Ô7—´…?ÇךVmˆÊfÍ$¸R ]¸à¨ÂîÚù,{÷ǧù÷¨v°ÖO3üئI”ØÛ£<óúÕ„,ÈùP¸ïQÉ+¾7ÐRh»‰VM›ŽÝÜsNŠÝä.@麃BŒÙ›‚;cüi˜R¡ˆúw¢É Ù–Ú °ÛàÀë½A­eOáîGIô»BAï ÿ…j†XÔç’} 昪%rX`ã’:TYV9Gág…/c`Ú ”Š9b#Çõ†>x&yäðí»(ßֽ)UŠ*ä·~™¨Õü©‡ W¸éMJKfÇÊ-“öløwv‡v€‘ž9F<}xªó~Éÿ$R?²¤…%Çô¯UIçu~t5)SËã-Ü µR§ó?¼žDxÌ¿²'ÃÃŒXÌ:‰³ÏåQAû"ü>w=„òúíÇò¯m\¸ÏðŽ[#&žòþäùƒtõªöµ?™ýáÈ‹ö\øy Rš;9ÿjSƒZv?³ßÃøL~µ'¡2*ô×V€ãh(>µ¬N§$ät¬ÝIÿ3ûÆ¢Ž@|1ð£D–Ú „[{¬ ×Ci é¶±m¶ÓíãpBD ƒùU£¹¤eÀPK¼£eW'ûÙþµ _r¹Wb³€²ª0oLcЬ¨®0Ü÷ëÒ¯±ÞK•ù€ëž• Úa¶ó’O Ð’E-E#± ‚ÎW£ã±þT¢]Ò¨@AŽ™¨Zm³™@Éê(¸® Xîfn¥sÐRý™OqùÓf¿ÚûPõãš~#?Àïš°Ðã­ÂˆÜ­# >µ±iiª–%p£çÖ±ìÑìÏ^ÿçÞ´tÙHE™Ž;šéfkSBî6Kd£Ëõ³§ù'‰’V¯ G´'¹iVÝ)]ÙÆ:ÔWC̽(xUè¬ï­¶*[§–QQÛ~ï™JŒ ÷«‰ŽéƒT Ûó¦²8lçžsRÜÆ% ¹*0ÊzѺ(ŠyÖ$ÔŸ5΂qô®¦Ï_º]>]>K¦’ÎE ÐnùsÛŒó\ô,lGAßš½i #™ùz¸Tq÷A¤Õ™¯„(Åݲ‹µe9Ø>e?OJ¹ҕgóeù™zŽŸ§øÖ¥ž³yiuÃ1‰¸å—Ò½SÄz&Ÿðñµ‡³Š=Eýô@©<Ž£¡­]®tÌe7N×êxå¥ÄzT&"]ÇpVíùÖs…Ô$ûDDDPÀè)n¡#Jä»gôééUtsæêÎ$EPpsµÔÞæíž¬ÑØªI4JŠ8@yǽli·Pp8ùˆCßëK«i–ßÙ‹0…L•P8®vÒfA>Ó´àŽ;SµÊ¹ÛèÚ—öMÒܘ#¹·'÷L7+Víï…¼?®i“ê6÷ɦ]!ɱ›ž1ü&¸ý2fžÞ$oºzõ­+!²IcûÊÜÜæ·Œâ—,•Ìå »§fsW3m¼‰E8;G'5¯c$¤•Ø”õnÃëZº5«ØOtP‰UØ *´H¹`H$ààÖ [bã+¢yYšO1ÜÉ ÈéÇ@*Uf–SrîûÃéU‚îIÁgв„‚ëÔc½f˰ÉÒ%„Êß#nõÉïÒ³/‡Í¼ÈÙÁÏéZw¹e “µz\õæRá$«it¡&—Däs‚KÜÖ½®íï(V`WÀüꦟðÀ`‘Î+rÊ%KîqíÓ4\r¥œÂ]Œê]Aãiêjühd‘{ºÃ“UáD8Ç=*ü0!…dÆ8éOÐMÈîcx‚mÎã‘ô=ºÓ­Á\oo˜ݽé#I)%Ê8ÅE½¼ìg…n*Cȹ4jªdRãŠF9er:Ô{w»$í#µA¤K*õíE®5¡z5`þc0W®95e$ O–å‰õªq7–î€ œ– gÅ-˜žäîáѼs‘ÓŠeªáŠ9ϧ_£`6:÷©b‘³ èyíFÁжP8î$ž½My*ylGqþyªVî\¶yÜǯo¥iÉÆÈ@þâŠòC¸eyn€T‘;GÁÚöî? z¹h‹àÜFG¥1Ô¹"_ Ó¸–ºu\Q„³+`qøÓâÔdFh^UB¬pE+˜aI늘(@`£wö¤ˆï‘Oò¥·@asÈÉì~´lEƼýÕ$ dõ­0¿–êäuÀ©IÁÈã+È*N·V±k¹a[1>á‚O¯4ÖD2©`SÔÛhüÖ!‰ b¥ßºÏ¥0Ø ÕAòM2xã•|’0Êr9üé¢FŽa´ã ÚrÄË’~÷&¯]è܈×h²:ÿŸóíMEX± tÿ?S¼vô~‰!gò äZÍJã³/y¹LŒôÀ ¡UGe?)è;ÒZD ¶Ü^*i£ùÂî;vç¡,prÒdà÷Å9vF[rÝA*$)•ÀïNœçjžAõ£›Aî¼ ÔÔj [ˆùA'¯øÿŸ¥;&#…'ïÍ,ƒÎn@©bØ‚IÙÙ•3±FMJ³‰QÝMäÓ×}ê¨Ú3Ål “-!!‘£QÎàj2Ë#«‘úR…Ùǰè)zʉÐuȤÇÔdhŠçvÐzàóPÈT)}½óÅN‘‡!%‡Zk¨hÁëE‡Ô‰d×re={®àI1ËdòIÇëVZ5XÈâ«8ÚÀ‚sÒ‘K¹ Ü㤣h`*ÂÄ/0±¹çš«+yrPú*ë@¾ZŒŸ”ñÍJÐ k.⪹SÛ?Ò3"Û9áYz×ò©@ù‡ÊxéM¸J×8«æ¢#ùÑïU ¸`–ã4‹{[q {§ya¡rzŠŠ>wÉ©¶¡aª|ÏŒ¨ëšd‘7&Öì(Y ¶N Mnv£îžÔt B `žyÖ¢˜ŽzsÀ©äŒnÏ|â‰G QÈ4$2‰S4ˆÅ¶²Ž)6DΓ!ÿj­ìV#Œar1ôªèc“¿8拎÷Y™ìœ›Î*'tŒ»mÞOqýjC)Œ×Zlí±Â(X àSëbŠ˜(›˜yjܯ956æu;ŽáŽ¿áúÔR¨ßìyÅKr2€‚WéCŠRîX†ù@­³ãO%‚„1õ4$cŒ‘Ï­Uo’>yïUwe“What works

Phonebook, wallpaper, ringers, calendar, filesystem.

FAQs and support

URL(http://www.rogerbinns.com/vx4400/vx4400faq.html,Frequently Asked Questions) about the VX4400. There is also an excellent URL(http://groups.yahoo.com/group/vx4400support/,Yahoo support group).

Contents

BEGIN_TOC TOC_0 TOCITEM_0(Cables,lg4400-cables.htm) TOCITEM_0(Notes,lg4400-notes.htm) TOCITEM_0(Howtos,vx4400-howtos.htm) ENDTOC_0 END_TOC #include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-motov325.htd0000644001616600161660000000070510735610475016317 0ustar amuamu#include "pagestart.h"

What works

  • Phonebook, calendar, wallpapers, SMS support, phone info, and phone detection.

Cables

  • This phone was tested with a standard mini USB cable.

Contents

BEGIN_TOC TOC_0 TOCITEM_0(Notes,phone-motov325-notes.htm) TOCITEM_0(Howtos,phone-motov325-howtos.htm) ENDTOC_0 END_TOC #include "pageend.h"bitpim-1.0.7+dfsg1/help/tab-t9editor.htd0000644001616600161660000000247410547564173016132 0ustar amuamu#include "pagestart.h" SCREENSHOT(screen-t9editortab.png,T9 Editor)

This page allows users to retrieve, manage, and send their T9 User Database Words from/to the phone. #define DESC(title,desc) \

title: desc

Fields

T9 Keys: Equivalent phone keys pressed to generate the words (ie. "43556" for "hello"). Selecting a key sequence in this field displays a list of available T9 words in the T9 Words field.

T9 Words: The list of words that can be "predicted" by pressing the phone key sequence in the T9 Keys field. This list of words is displayed in order of preference. The list order can be changed by selecting the word, and moving it up or down within the list by clicking on the up or down arrow.

To delete a word, select it from the list and click on the X taskbar icon (or alternately, main menu Edit  Delete)

To add a new word to the list, click on the + taskbar icon (or alternately, main menu Edit  New...). The new word will be automatically added to the appropriate T9 Keys sequence.

Buttons

DESC(Save,Save the changes made to the T9 words.) DESC(Help,Bring up this help page.) DESC(Revert,Discard all changes.) #include "pageend.h"bitpim-1.0.7+dfsg1/help/phone-motov3m.htd0000644001616600161660000000070310735277231016322 0ustar amuamu#include "pagestart.h"

What works

  • Phonebook, calendar, wallpapers, SMS support, phone info, and phone detection.

Cables

  • This phone was tested with a standard mini USB cable.

Contents

BEGIN_TOC TOC_0 TOCITEM_0(Notes,phone-motov3m-notes.htm) TOCITEM_0(Howtos,phone-motov3m-howtos.htm) ENDTOC_0 END_TOC #include "pageend.h"bitpim-1.0.7+dfsg1/help/ref-usbids.htd0000644001616600161660000000244610643052670015654 0ustar amuamu#include "pagestart.h"

This page lists the USB vendor and product ids for the various phones and USB to serial cables BitPim knows about. For USB to serial cables, the vendor and product id will be that of the USB to serial converter chip. For straight USB cables the vendor and product id will be that of the phone. Note that some phones, such as many models from LG, can be accessed with a straight USB cable or a USB to serial cable. TABLE ManufacturerModelsVendor idProduct id Some OEM USB to serial cables FTDI USB to serial chip is used in some cables 0x0403 0x6001 FutureDial USB to serial Prolific PL2303 is used in all FutureDial USB to serial cables. 0x067b 0x2303 LG All straight USB 0x1004 0x6000 Samsung All USB 0x04e8 0x6601 Sanyo All USB 0x0474 0x0701 #include "pageend.h" bitpim-1.0.7+dfsg1/help/cable-samsungvga1000-usb.jpg0000644001616600161660000021571210407717243020125 0ustar amuamuÿØÿàJFIF``ÿáàExifII*FGºÿi‡b›œ¦ÿœœºÿœ¾ÿžœªÿŸœÛÿP†’W€CREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 95, Smoothing = 0 ~ÿÛC     ÿÛC   ÿÀýJ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?߇\Ô,Ì×SH©§’3s¦Œ¨r¹,ñ°m½OÞ“ÏSV¡Xma{۸ŤNªðêZr…G$ÆõÉ Ÿ˜ä=ªO¦­Œ–­dòh:ŒŒÀKé-_1±¨9’Tv9Æ+Z}1¬"šê-Di÷òÚ’Óġ윅œr~Q”*ÜŽ sFëä~QÓµ££×õùºhô{‰æ¹€Ûq(K½,“É‘Gš˜8<Jç<ð V†âeW»™E·ž#U±‘&ÄœBäƒ÷€Ï'ã%±ŠÓU¹c!°[«’Í+±’Úøb`Ø9 0KH9®*ªß[Çz«o º¸òüÎÑòñ­œ¨ sƒèrh½‡nö·Oëúü ¡käÜ%ülq#±û}¬›•x‡TΡm늯 ÍÜÐhM~7ÉKý«§†a/1’FOPpNñÇ94JWO*Œ?±.%UDQ—¶º!Xv† FÖîN&‘ãjÅ,¨4›¥´?éPÆ^È‚7eíÎN[¸rAýD®¿Oëúô±G§È.u*ë“§aZ2¯3ƒòýàW“ŽØµ9’ÝŸR¹‰#bêZSýf”9àŸb8íšÊ¸ôû”ËI O!$\@K9I#û½ã9Éà’µ¥­¬ tÉJÈé©éùh>g—8^Fà¿Þn5)ô5åÚRëý_‘¸ ó5¸ex#ÔIE¨X)ŽH‰$bD‚O'*HÀuÅD6z€Cj¶[c#Y´ÂÊ„I%SœŒ¯Ì£×*rq< 7 4÷>DsN¥o´õÊÌÄ‚Lª28ãæëÆ f[ZÍö‘zò³‰‘6êzZ°@Gš™Á8Ɇî Õ3FòÕíý_‘fÚ jÌK,[¶Y—uŠ“†„‡PÍõÚ~Ppi‹r5 «x£Kmv8aOÝÜ,qÝ[às¸¶ ga‡­6Òêk¦¶½[h5(b’8Þ÷N;'å‡"D#qûÄíprXdŽÒî®tó=É{Èc¹¶SìhCT-´dŸ—päóÒ—¡rNíúzÿ^†©yàÚHÑë_fiÕåg sj M„Nœ†îãŠeíŠÝ£ÆD:¡YÛÅ;®bLrH  Û‘Œþ0\ÛÜ_ÂóÎ ê—6ͲkxÊÊJ€¸ä‚Tñž„Š·~Âê)gŠÞÛVµq‘ƒâåŽÉH±I˹Úܶzicμ•­ý_";«;é¤{XdP²ýà×a£š5ß9ÌlÈ$)Ê®w¾û@\Á7Œ¬RÉîLI:È—8/}¡øÝÁ €¸Ü3Ç\W²]éK©iú¬²]\j `•–Æé¶ß)V›p ŒœòðAã­x×ÇýãÆºz½ïÚP[1H›%íÁ™ÉFÏ9îOë^&lÿÙ$}A}~ž½ÿ/ëüÏ;Ô´éTZÞ4„¤$a é´!'Û;ǧÝ=h# é×úÓõ]^IåM=d"VV„(ÆàV±!˜yùsÐSPc©Ç¯éú×çRÜý’¶¤ói+qfneÀ ‘$d¾A ô ¼“ì=¨D@güçéÏéQÜCuyˆ‚˜ ÄÒ‚ 7*Ÿ«®>¿Z–(Âã’OáÅ6 úêYk)oí%·…Ö2êFãÀÎâF?š}¤ßBvêx9ôãÓñ?ç4¯¨ 3K¸•DeÈ|ÁÆAÎ?üi-äy47fà‘ÐôÙ­¡¥‘Œ¯ï3êÝ>+­*òÒ4úuªˆ„pN ¶ón}Öþ #å'¨¬ÓeÒ­½´ú-Ì’º>Ug²»Î@Øzr €AíÐÓô©"Ò¤OÓ.$³f„Éö=IÕâ|4Ùò\6ÐNNpFIäf5mä^å²WºG}?Qİ’dÈòŒòF7¸Æ1_¨ÂÜ©‡×¿´“·õýzü‹‘Û¬w$G)Ñïg„¦]‘5«98 p2K>áç€{ÂÆçGÔ^x¤›D»y¡/ ÂùÖS³el A$á°I:Ã$«ÈU WmЖÛ.:ÉÃsŒtªW×ïe|¶fîKQ²&û«¶[Y·,YU~OLƒœã'óZ5ÔóéÍÊVþ¿¯¿ÔÍG“K¼Šå™´KÙx–ò(„¶rŒBÃpÏÂ䑨óš¿{0±ºóâÔJšuší6½Ól>PòHÛîÕ*Û_ÊI¡Ü?èÒ±{K¬¨rr1דòŽ88­)*t†íc´¹û9ÿA˜†³<ÈI Õ1ƒÏÝ9û¹4£¦†Õdš_×õêS½³ÕÙ’ÙcƒHV†´ÈKi.Ñ.3Æ8có ¼Ÿ¥Yš;‹l™Z{!$ ,¶½´sûѰ€2¤°GË’TÔú•ÑÓ5 c¶‚KYsç’ÖL‰ƒF ””‘ÙšËkÈô;ÑŸéܲʢà¬ÖS|ä¥sÎùƒ/ü ž‰‰9J 6þ¿¯SFö)LuM*C,vSi1ggŒ«)yŒ–8ÁÏ‘ŒeF1Yþ ¦M5ÍÔ mcue/,ãÚº‰ë‘Ð88;OÞ냎›NÖ"²O³DE´w3an!kSò[àH3Æ6䂦iGÍŠ¼Ü}Úq¹”nm¼)u}–}+Ïòí–¿½µ’B±}åà‚`ptæ³u¥°¾’fÒ%’UÔôÌ=³Œ& м àu}[##NõHDÍšf† /o³ãËʲœ„ÎÁ’@rO4\ Õ šÖ- 8w[›`ÊF(Ø.0ÛTìî äryf\%î©%«ü¯Ÿ¡“rãKžK—žm9åDc¨éÿ5¬ .0É“·8û¤mï“[PÚý’CuqwÔçk¥MKMlq’%]’§©Éê¤|£æ\ Q¼i‹s+©Ó#•éiEšÍˆ®YW#ž9Rè­.Ö ™š5Òüù¦£láàºf ºr@$@ãŽXdÒŠ³¹¥I6’]wþ¿¯C*òòK{Ö½¸Ü—RcÝ‚´¶ÓáæR89 ã’J¶rAøPO§JËM(_ˆ®”ÿmyr‘ý²,PdÛÂ`7qÉÏÍMmZiïÞå#œO¼=Õšíºˆbrƒ‰1½GÊ>¼š¸«¡¨¤ shdâïKg[…'Ë @ÁÈb§<Ž9ÍL#”’_×§õ÷ÛÛlÒñ®¥¼¡µmcQ*ÈJÈ Ž`2Fzäg¶×"ÄÄ$+om<™k«dY-%'fL‘·Ý'y‰“ÇQSÂo¬VÞò8Rî+rc–œ¨#º,£Ç¹å‰äç™4–¶sÅ}g`3F.$±`E+a, ¸);rN qÐwwìaËÌýå{ÿ_×äRU‹O´FšÎÖ„–ò"±yì®3å1Œ‚ ¸„¹â£b±Åe¦É¯™ xt«€$‚Vß “ýìã¨B£Œv8mŒ‘Úé2ÝXÝ[GdbE¸¸¶;¡Âí$É%”íA’Ç##¦I©]iöñ$±Ý#éÓHYžåL\npè>LÄ(Üx¥st›|©_×ôˆf¼ŽóR´1‰n®QÿãÊgHîaAî>VûÄ»dƒššÏL™×íó´Ò£yiö»hLWP¶#;fA•2¯E$‚yLñ~Ò++§Ó•æ‰àŽ¥·K‹†&2 €#Ÿø€ôùFó^QñköŸøuð³Shë°+¶:\Åe¶”2²\ íÌ`Ÿ7Lîæ„¯­ÌjW8Ùéý_ðNòÚ!k¥Dæâ!¡3^Y¨[pû6&ÈBD¤|Ä·\zS$Iµx¬í–×eÀ˜GbQZ †%ã|0\6\¯=W“_žÿÿjŸ|G¸’8gÃÚc'’m4¤™ ‘× ùعàœu¯eý„>'N×óø:ûS…-üÔ»²¶¾l«1uIR-ÙU‚$Pð¿ñM[}ŽZyŒ*UQ_‰õEýÍÅÔ ûË}#,Iÿ#"râËæ.sÆd.{SgÜ’›Ì.£‘5­Ô ûÝ¢P¸ó……Âü£’*ÀÒL¹’–þqÈp>Ý <üÀ¹”ôÑqyÕ³\E¨2ÎåÚ]J, Šþô4gæ”|àÁS©ÀÏ Ìö¡Q;rõþ¿¯Ôñ_LÚŽ›w,îdó^Y•ÎTí8€Î÷sž1ä[[Ïq7›"ÄÈ¥ÐIs÷vƒÏ÷‹ÿwð>×ñ÷LXaѯqgi§´mÐKµ‰ 8óÐ p0x¯ ¹‚VÔctªç Œã#ž?_Ÿç ý¯ä~ÁÉK¼ÿ0ž—åP3Ð~u4§Ÿ§>Ô›[ßõ¯šw>œúéÚ¿Ù¬¤šÁ®CöØŒ¶“>×$!y;G*TõÈÁ5bèÉmc%¬6ñé—r#auëYØyÿ*±Àn€=:õÏ,7¶Ídò„Bª4­K!™rr~b0p tkU˜^=ÆrO–ÆTþÎÔÆá( .6» ‘ƒ‘ó+ötºÍ󓲿[_׿DÖ¶v7>Y¸:c¼¸WêÃÚ¤öÁ^½óÉçPZiº¬b D”lAiuóZN<ÄÈRI ¸=˜äÖº\%ÜOa ¹H’C¥ê±é+\ž£8'pÉ\àYÊdBG)a¤êQíCóE»Ê›ÉÆÒWÈ5تS•õþ—õÿ.¶œM­½ÁÑ%Y›k¯šÚ`D'1ž6‚ 8RW§N1 ĶÖ(e²fÓ/FëiÔ)û¬ Ç̹àr£5=¤s6–B¶÷‘E'ö. ˜h×€#|Û†N:äsNŠ6žIáiEÛ4rFúV¡†aIÊ?ñ 0èsÏ=8V5oÞ»×õÿ2ؤËlXiO)k{[³[\³e”‚:g’„¨Ýš½iC 2îÒk†•w,–Óyó–<î0üÀc&³#û<Ú}娳ÅÃ>²µA”KÊ9À$'©"­˜¬á·¹Óìäû »eó¬5,²Í4† ÙápŽFz AT³Ñ_×Ìd×NÕ¶,K¡ÜK2¼‰ YÍ–S’É$eð@^4ý&Htu–yt÷ÓL–ê¦çK•ž<ÛR @:q­¹pHÅKæÇg"Úù×Z9Vˆ{¥/m"ž«“¹ç©ÆFp+=ï_D’ÊUò´kéc¶ÑüÖeCÆN@Bpq´çŸ»È¥¶¤«Ír%¿õýnKkb>Þ—“¦ u®›˜Œ þŽ H “µX(ï óKsö‹i­eÔÌñIn‚sML0@ÐÃvÖÆàÛ”BRiW6ú|é*]¾‰%ÅÄ2I,Ÿ5¤ò²[·  Ëü²tÙ Mômqý‘¬QùÖ‡}¬ùh‰$tÎÈ|>äŽriÐÖÒ“N]?¯êßq2Hf·7,µôï2UšîÍBKaÎôà33¡]ãŒcŠÛšêÖ+¯/WûbÙ¼µ·žCLS‚çã$ðÀõ#ŒšÏkòA¼rï´µciˆˆ3(à’rqÇZÉH¯EÀ¶ÌW²“03 «Eœ€2T‡€*“èrJŸ>Ú_×ùM’G§$´“MvË7“ªÚ†cĘ ÀnÉÎ2§ŽœãÄhµ'ÆÚXQjêlÉ[›\í™|ùpØÉ`ޝ=kØÚìi¶-| °Èä7\kÆÍ­õI/Cé8~þЦý#ϵˆ- ¡ ¯˜ÈÄ¥] v!òsüKÇ|ôü¿ÏãLÔíï„’¶`*œ÷F}²8úTÑœq×…~u-î~Ñe½É/µkˆl-­a%b2“!XÁ •<7®0 œpAÇ5,g%=}O?ˆ¥¼ºµ¶ÓÑ?2æRC³8ÁQ×±SÈàž*KpŽÝ#×MêÑ)-Y¡g¥.¥i"I±"8Œ¼œÞvõ…W‰öml.àv·#>ãðý=)š¤3\éÃo·6“ ;*’@ëÎÆGdâ’^- ä›°õÏø×D^±F |M³ê¨­~Çnmmí„…W÷šN¤ÛŠe˜f9O®Fîzc½[Òííæ¸¹µKVÚ쌚^¡æ"ÆwÇòÇ#r86Í%ÔvZÌ-§BÒÜ<™ÛUÒAó¸ MØüÀ Î=ê &çí­=—ö v ©ý—©&ljwÂ@Y81ÃËÀÏ'Կ•kÕrïwý_yfÓQš)Ū[´…. )iªt‘s•I1ÕŽpÃlV´™ìg[Ui˜žÏYËEÀBÅdÏL¯œC¦Í<÷&Ä8‚åF]P`I`#Ë|œ`ŒðHùFäTf¿„iÑ]k†è9ÎîNjÛ{™û8ÅÛúþ¿«š2º[Ësh†Kh¤Q!µÕh9ËC É䡉=GÊFêwbÎÝíâó4ÇxäQi¹á ”ÁIÜá×̇¥'†Ùì’{x]ü¶}2û/à³å¹$1$0Cd žNeñÂÚòK 9ãYd3Óõ@LR yrVCÇ;ŽÓžw¤qMu1‹ŠšŠþ¿¯éˆ¦8n%‚ÒæKtí!²¾E’Þè3”“ù·(8?@j²³iwOmÂé³È“MÔ¿ye+y‹÷]ø$“Æyë´u΂C§ßšÛÊmð‰-µ H ùNÄüø Àô@àÓ$µ¢M*;³Eyimªª´lÅâá\á†r'†#»¶šíR©åý_©FËQ 4–SLšUÏ–™ÓïXIiqŸ €Kgå!pCã©ÃzÛ²·½óÃÉf𰯳(Û›GC /ÌêFsŒàäA䓆=µØŠÂâÔØKoåÇökÆ$ê* ãp:am%H"­$š4¨»N›uûØ%ÀÀädŒ|§<“ÊJé8µî¯ëúõõ(à 74È?°îÕÞ'šßkYHÊ‹ dÃõQгpɧÍ+ì“FšfÔc}¥É+2œ1óAaÎq;è][>q)³¹mYæ¸f¶xÃØÌYgÉP‡jîåvœ“{çË`t;W·ûRi—“áä´¸mö2Ò†ÚÄc,@%O®x5@¥-ÿ¯òûÉå¼M*àG1‹G7d)§™ar ›s1`Ø2à*¬².Ÿ«E%ÉÓîn§‰dW]ö1+… €$¨€=jUó ¿’ÁÒ*éÙã}Üeí®²pXœ&NÌ~€g5—6“s¼úkhÑÍ4*mnšÚBDe€cÌa¹ûÁ‡Üù<&Ù¬ ”­}ÿëæiiÚÀÒ²ƒÊÒï$Q7;‹Ø;Ž éÇ7MüqQ¬ ¥]Jò*h²Ü²3*FÓZÝ)HI F6ò¥²ø$å· Ô?°,æEÑÖBTÛ\³Ie2î…Ë)ÏîòûÀ§SŒ‹vòý•抎3$R®•¥µpc ˆØ/;G9–µF2J ¸õþ¿­Èî´©.tåWŠM*èA•·‘÷X²€IbqÁY³‚8 ±<¦Û;Chy¿¤1ß4çÔ®´»éQTéÎ̱5¼Ù{6fY€XßnS«òdsŒqE,V÷1ª5”ð‡2iš‘/£d‡1?\«†À*TC§Ýýš†²wÁuö&…†e#”dc•èpy9éIÝì\#«½¯ë¹fHîlï.äkoì‹»Ÿ28ç‚?6ÊA¾BÌ1ƒÀ# ô©nV×J¦…›J7’¤†ú%ÙÜgáT‚¡qËdÔ­ é× •̺tR;D–×›§´™œîÀlƒŒ±ÀÀß>ÛQ–¸ ¶•{/•‹;·ØÍóǸ#ö8 FF1’j¶ÜÁ7Sm¿¯ë©[L¾–ÆR«&ƒ±‰æ!çÚNTÂAcÃd ±8åç´ällêBšv$.ôÒd‰³$^€ £ï |£œÔJ²hºZHšƒèÓ1‘ŠNö“䩽: VrÉ&—}…íü?É¢k+°m@q¶3Á<üƒ' œÔóXèöq©¬¯ëælX2éÖÍsû£w%¬‡ûf³nªÄ:)á†Ì°Ç8΄vÿb¼ÅÔɧ¸b·6Rn†ðâ` œAöû¸àóBy-4ùÕ¤è·fU·*Þä0˜îcÎÈúð Y”­®§[ÛKÃï’G*f³˜ù±cw>œü¤@’;¤ŽòÚÊFžûâg…”´)?¤xÜGLà“Œé…+8k¯õýw [Û6Kö¹ƒL–Híå}M›i1Ä1‘òòÀ)Á4ÈØBó 8àѯ +1½ˆ–²‘B¡``£ï¼Ž¼eЪà ‚h#Óeˆ²ïM©QµDŒø!sŒüÜtÉ&£¸¸+{6f–úmÒE&t‹è·œ8‡d…!‰#•ùr)y³Dù›Q_ð߯ä,·2éײ¬öË¢_£¶ì–û-ßFì•È\î\ƒ€̶©®™eŽçÃ7¬Êј1,üò¼Èt$‘V%›í5•©ŽÆA3»è÷쮲\Ÿ,úÇ%xËE6‰"ûKé7¨7„Ki0óWìy8‹ºÙ­¯ë¨è®ÜÒ»q LÄÇ­ih0=®ä œdžJò¸ä®—v¶²µìòË$WÆ?·4¢T¦¬Š2N23ü#qäæhu£Æþk¯…§yrí?ÏerBÁÌà,ŽÙâ¼â?íqáOýª?³ßë訳G¥¸m<·–r>lm9 œŸ˜ÕjÎyU…ùÝ—õýi÷í”WSÃ<ÌZK®³a (ÚÛdUQ8÷Î+Åþ"þÒßü}"Ë}ý¿­Ûª[Ãíå4…AÇšpQ3Æà¹<×Ê~;øÓâj_Á«+MTéZZùœüØá°H1= ò¢B<’"”=žN:7õ=»úU(w¥ÜF #u9öÀê{ÒÃl÷L0òNÜ$jšCœ®Žqžã@øc{¨\Çû5´Ò`ÇajžuÜ€€@8\Œà±›Œw0„1Ùi©Ã¤D€¡Ù°«´w$cÀŽÕîÿ³ÂÿÃñÃþ)…H²Ó/¡šinÉ\¦ÿ™ òpÃrpN®óÀ?³N±6’5(l“ÃÚnÂdºR·:‹'Ì)P§8äÏÒÿü,ÒîN‰¼×"XúêO´C~@œ<ç ªL´áÏ|\¥-Ç¿†ÊaJ«æ}‘ÜÝ^]jz¬PÉkä\º«%¤åVBɲ·ú¢N’qü8 ÃâK„ŸP´—íC©BÈ÷DÖÊV7!ÿX„æC§#«‡O”XiW[ˆÙ’,õE¸\‡$¨Ú0ˆÓvÛšëRkY$´µkˆ’IY­nþKˆAYÈÚÙ8êÇ9#‚N0uÛøõ­,YÛÇ$÷n[ìò¿“t‡ç\©J’8EIÁ¹6òÈú½Å½Ã´û¼›ˆFË‚Ä$ÈÙÚÇ#®gºZ#ù«’u!Í5¯õýt!–YµLQG-ìÀ¶‘xÂ;´Ä„‚¯œü¸àƒÎ9ëÍè-£Ôá²±wS>r±»b—üÄWnz² 6““Á#šÍ_^áN¦0[•ýÕäl$#…ÇÍŒž‡Û.LW‹¶öÜ~ùK!\“Çu?Âzæ¯Z\}§íiÒa ”.Ÿª(K­˜Ÿ €’ví#<ààTjçÊ-Çúþ¿¦Iy妧$v×ÙÅŒ@Ùj?5¹9b#“Î £wºŠÎŠ m2 #K¥fò¬oÜ=¬å^0Hnƒ'= °ù¹­;Y¢’[ËFSvHU]3T)Q™²œǸ^ƒ¯^꣑á³v‰A#û;U$¨ÆY$'pP õ,¸#­SØŠrpj×õý\¥n'ÓõýÔÚ ‰v¶ÊO–Ü0$´œ`†ùx<祽.v²M ¦ÊÖðªÝY°šÊEÝmÆÜçild‚Ë…<`pøm/tˆâH¥:féb/g| ¶ò9Žv8=ùkòò½*´n4»û2! ËÂ,…{|$0laN 9<Œ/'3kŽj§º¿¯ëæk Yt¸¬.§‚+)Ex¯ôôc¹Ò.>î0>S›…9æ’°Ï5”ú0TGwhË-œÌU]G¨9?0ôæÍ²¥ƒ&é—Ã÷wWÞ6Ê屺/ÎÇã‚xÅCo.›:,r:âH"M¥~Ók0 íÉ*0Ýu=ÞÆ»½ÿ¯ëæiܵ¦4S¼fÎúïÏO´Z6ÕÆÇ¸=øiÇÝÀnkÁ~<$Iã7ËŠÞ3%ŠÈÏls¹š_FQ€2O¡Á÷d{Í:Eâ—K’@øò¤µuhaƒ´ “ÐŒ±ú×€üo‚Dñ¶ž$ŠÖ7k,±²}зúDãrúùW#‚AÀñsp²>ƒ‡ãl}={þG¬êBâxmEhà,ÛBà‚àüö/_Ozj§¡9èsš“TÓb³–ÒhÊ$£•TåÆ-’=6ȃðnr F€}{àüöw½×éÛ—BÝΓmý›åÍÄI8p°EÕÝóÏ=€PÇ“é€y!öÃa]…€õþUVúÖækHçÜÞDl Q·äç×;zzŸz·` ã#®3ŸóÍSÝX˜ß[—Åô:}¨–H¾Óó®` 53ó&}Á# wU8ç3ij:qÇØãð©'²†þÕÖTgMŽF!'Ð1Rsü©ªªšZ*rAÇcè·øÖ‰»¦díïZDϯ"YYÙC¨ÙÅÂ|Ç{Y!NæàgŒ “Yºi·¾»û&øoÀ ŽªS.Á%ï·p=r¹5¡b%y¾Ó-ÇöÖœTÅ,ö‘ùW‘2"p˜##¦dñPiØê¬!:¹×í$DÝge÷š’Æä]hHŒ¢Þ1Øçs€c‘þðÀ ô8ÛɤÔ.íÖ2ìÂTʘô]V<ʇsÆ|³’sµcËg#œÛ[I—ͱ±Õänh¿³5+.Ü‚ÞC»iÞFP°ää‚)Ý‚QŒm×úþ¿S6s ÉP³×í,IÔˆˆ;J˜ßŒç=XuÉÔ׃OX-­æþÉc26›¨&m‰ý×Å™PðHàqŽ–´ÒQ`dšI® †eÑ5)P¸~V$œ ’ œ|Ø+’qJÿO7ó+(“RLùGKÔØ‰U¶¡ÄN{°¯<“f–†êjSJ[_×ê;OºšÞxí¡ºé,¬Ï£êm„”M¢&árB„·_”sš6Í.šnlZ8#óì]Q‹,œ8&)sƒŒÁ!³ŽjÚéVáì'ýþèÕ†“¨ YܤFäó÷OÉì9æÜ¶ÐÍ æ™v³\[ì–l5DU‘‰Âùrô VÏ,v“JÌ¿iÝ/ëúÿ‡*E ¥ýÕ”[n#™ä-¦jêYS‰ðL`œà àü¤üØj=0&«smiÚt!ÒY´ÍIwDÔyrr ¨ƒÉlc&£mAîã¼Ó®.†[v“¬edBLÀm”ç8ÜÄ` u^0ûy‚Çs§¾¤ëpÒ8K=PHñ®Òr]ËÁ An3»o"…aÔsÝ^×ÞYÒ ·Ón–ÀÝ=¥“Ü4Zj?*Ì 1IŒsœíç§$j$Êêßa·»e…‘Béú¤_ºp­ÛchbHÃ\·¸¹šÖW£’K{ÕÌAI„*t$*¶XsÈ'¡gzoeÄ.¶ÈZM?S˜Å2’!*°0õ 8ûçZ·mŽHFWæ§ßý}äV/­è²Ó®Eµ¸`dÒµ8T“Ä$y\‘‚TžIÂç5Ë YÛX ‰. Ž±õòåÈSóG! ±ÂFwtè*µÞ=Õœ‘ZÛ—·).¨ÊÑ\ÀÅ&7'œíÎ3øŽÕº°¸¸¶÷Gr‘¬ª4ýUs|ÅÊ¿*År>§ƒ‰ô:%(é¯õýÙw‹ˆÌù;æÛ§ëJ¬ ²ÌŽLàò‡r~l’svx¯î$k(>Ï1<ÕÑõ1€€;gcœí‚Ã×qF®ŸjI´ÔÝr¾r4–z‰+4 ùœ,üm­Á9lä Ô6+›¿±A;ÜÈ»ÇØµxJà2àG&:òàÍÜŸsgbÜß%×õýL¿sp-*0¢Y%"âÖý$a %>XÛʉ1¸ô?xUK{abÆ8€Žhµ–¸|ÛvPcÀIs“ŽåkOÕ ‚PÈD´v:¤>dApƒb?ÍÓkc!º/È5–Ï%¢­„–²[‰@EÓï\Ok?*@I3”aódŸ˜ ¦ºœÐnü±ßúþ¿SNÞ[[v6Û=Ã>Û Ä&œªà£ðH'‘“ߌU:Î5eVÒÇt"̺%öJ”‚b~GlmÁ9š£=ÝåÅÑ­Â2È–¦’ƒf•'#qÚ„sœƒÉ4íFþW´²©8ò\›}Aʃµ¤ÚÑKòç#$´äŒ©ÅE×Sª4§Ñïý_™±¾KÍGOÒnñ–Qýƒ¨’U3ç;ÈãpàŸ1É= *Ùl.Bé³J%܆mù·+ à)ß®3Œ‚=³Q¼•nàxVw[†V²ÔÕVP˜†^C`’rØäýÑŠIÁÔ•m‘¤¹µ€Bí¦Ý)7!–U•Ø)~ØÞGO”Mò¼´¿¯õýzšQ]Ãs§Mc,ÚZ†š|ûÄǘX„Î Œp@ÆYö„]=DvÞé–ñ¦-$–,sŸ”üǽ‚k-nREÔëaX³U/lþX ’Ç*70=É=j;É^þÚ&†ËûMím¼Âð‚îD€°>áHÜ28<Fk›©°µ’7bWíF£já¾Ãv Sp²p¬ù8ÈÀpz£…Ùìg¹µÓC]ÀË;6‘|Þ]Ôó÷Î7$1ÏãÄ~4ñ¦¦i·úޝ¨E—i$Ä›éE•Í£˜*!ÜrÌs÷zŒð9ÏË_?l{†:Wƒ¬®|S2o0ꚬFËœ¨F à+gqÙË©ÀÈýï„Ê5ia“ueo/ëúó>¤¼zéW&mmN›kq’G­Éä5²–lî’B cvA`:žõóÏ¿mx5ŸHð˜¨Úz„dÚÄÊSiÞ[|¹ÚÀ‚Þ;\¿(ø÷⋾$Ê—(ñÞ§jLQI#y1ð1„è23ïžüŠ(HJ*¬aT†ã$¶2 9è0 <öõ­ŒðëæÕ$ÜiìwÞ2ø×ã?ŠHšæ§5ų\ Òa‘Å·@ŒGŸ› (Îs€9àW"ËJˆîTÆVE wX ÇnBü£‘å ŠÏuV•Mì˜m„m^¼®zí;€É=ÈíZHe‡*÷ ı>Ð~RÁŸŽ@É“8+hðçRUäʶ‘ˆOž€˜ƒ4,NJÊ~]ç+NÐ=$n85^æ6µ˜€I /,;`uÈ8þµ¥¸…ãdhDën͸•˜€sŒ€W+:,„rEöêÑ3+¼¨Œ"óf]¦@PÁI''!ŠäãÌLW¹¦Z²K"ÄA,Ü3ƒþñ<œÔö?ö¿Št«8ÔÜÆŠÜGj€;;à*`€7î ƒ““’5QïRVÝå$œ. ò}9àIôí^õû.| “Çþ&´ÖõiTÙi÷1Êšy$Izct-°®å.O?Ãk9;+Xj¯QF+CÔ>þÈZ•ÕÉ]dÇáÈQ’)­ p.ßpB¸™¾^w+m208¯}ð'ÁÏ øFÈ[éQ<°æ’PŠ5w- Ë“‚ÌÇsýÞ£;z}Í®¢ÆÖw6–ÞI]8·“ubÃÉ,èØ%Æv¡l÷ t[mHKi ݽؾ[6~Ü?qud7[à°åP2rŽ?‡šÁXû¸Òœ,4^Ÿ×õÜѳ\Û ’Ž%™UßR²F,øÛ–’& ¾2W,qóäÔZž™j×’\Ë4vÍÿ"ok[°ÑmUùA‘z¨çƒZÜÉsooz÷*øn­g±¯ú6Ñ7#x2ÐmÁ5FÆIÚý|È"¶¹¹–6šyQä´ÔIŽ€ŽFüeÊôà×C)7£±VûaK‹H¬¤3HH]&ð«Ã2¸?¸“‚1¸°T!AO¼*{fŽîa"°¸6êâið·p²þA´ Ê6ãÎ]²)/£–ÿK¶´Xã¶¶’!+iׯv€,’n.ª AÎ*¤öÑM¦½¼ªÚ”™£*‹ØŽòË´`ùŠª6¦ry¨³¾‡TZqWßúþ¿SøãalÞ7°ÀÁ缎Y.lܽ£×’8üô žóµêÌnãøfÝ’¤g€9'è?…}ñz¥ð%ÆÈã¹+0“í–dyxÞ¹œ?¼ÆqÚ¾wšëìW1I„'îíq€Ê~R#¨'¿zø\õ´CÓõ?V᫬½DA8$óÉßýj‹{zÕ‹†’8Ó§_åUñìÕò¯F}’ØúzÒA>ž`û9ÔÇ•½m.TGy³i#c½Ôr¤NriÂdÔ%–ÆXÿ¶"YЬS?Ùï#À› ǘ<í8ä“Å\{+}SOEGMmto4ò®!;cgp$œ¶ƒ“ÅMöx5'½Q$ZÊZHï—sÛ&71#“Ü‘šý™#ù¹×Ž·_×õècÝÞ[ÝhñI¬ˆüÀË(ò¯Q·1sÃ@ãîŽMixSšI ¶‚çζŽDZêjRòVâ©à‚¼à“NÔ žîÎæFŒêö±,ªð»l½·;ä8;±Éûų…ÇzrÛ¶©v²j)ÑdWÊ»µ9@$ç#=øÈ¤“¹«•9CUý^ž¤:F%å¸}2yžkxÔ¬WkäÝÀ¡ àÎ$ÇÉÈÉãR([U‘I­®Ú'ŽQ Ë k˜›jž~`(#¸ S4•/w:$çR·Ž0 WeÜXòrªÀ ßxŒ­ÏCš‘Œ3y j®¯›kv¡fOݦYKm$î=ÆîÏ¥¥¥ÑÍ:Êß×õý\ÆŠá5kû‹mZÞ‰ZÿcìÒŒ8¯÷‹ FOŠÒxŠê×6ÒÝÅyj¦á$Šö2—†[œwáÉÉÆðiô|–ÂâÞXDBþÞ;cÿkã²ã€Ü‡<à€ N) ž ë=B­ÿµD/&Ý6ëj]A…¸,c$ìÇÀÉ©±£Ÿ2M/—ëý}å¡â%éò^¶U’I,õ-ìašà.ÀžI¶áÓiCP‚ãQ¿ÅökëgyÊiú¢2JHù1’:uBG##Ñ–vv<¿eš{´’6hl5²t!®òØ‘ÎBçaÏ=«B|˜>ÏyöiËÏ)]6îEY”ù’cË“;\€ àÇrõ¥êRn2M_/ëÔ†á·ÔRÎÖðÚ+Iý7P ðÈJÆ39;ùNrãNêâm°Å›NÄh­§ê¹x'!¡R~RFVÇNç7îÑî]VrBÒµ)0Ðã`»+È =0Ø"ƒ©-– ¼¬êÖœ»YŽaËG&8P |ëÏQØz¢âÜd¯ý_æ65½’m6ðË$*¶Ì >HAETätà ŠtµÓôtf‘´‡kti@$¶lpt³` ŽG«¾§ˆ¶ºeœw[©-ŠYê?4E`TçåPp>RW+À©æ¹z¥ƒ¯öy1•N½Mg8`GLdäxÀ¤­±sö¯øÿ_2[¿#Jº’Kk©ty Ãu­Öè܃v'#åçƒø|ùñª#oãÛdkhm™mAe¶e13¥bÉŽ0r{ê=}ÛXadgQéîÄGö[¸Ä¶2°GÎÆàLdsjð‹±y_e¬Ÿ"ÇóÆ&2£Ÿ2B]Iç…=0~§ÃÎû3>Ÿ‡bÖ6~—õÜã/s~Þda€Ñ¶Ò ®XnÙÜ8ô>øž6ÀÇAÀõöþu&±© »‹kq6ñ•Y‡u'!ÇfÞÙÏü´íŽaC¸Œñž¹8ö¯Ï§¹úävØ›PÔ.&†Ú\B­Œ#aK7 ïÂ=‡µX‡¼äô9ïÚ‹ÝN(ì ³Š87±&F|ï<©÷#§ñ5$Lq»=yïêzoKº«4ÂÅŸ‘Ž Œ!`‹ó3}çØšX¦œ™€z>˜5zßQLçrðblŒámüušªFÞm”Y )n‡¨ã×üýjâµD»ê«­/®b¶²¼Ô Žð,‚8õ½+à#Ê!eŒä+ñópE[Òî¯5&Šy–×_Š1‹% Ù< ù!w#˜$Ü|Ç“ÐÖµ¸g³¸ŠâK8ÒIu -Ïk>LJ|Ø×”É “–^9< [«ÈÂ)níšÎæXQ¬hêΣo•µ²2y8 Žp qÕ)»E‡âæíßõý/¸³öÛpºÜØA¬éñ$’ â]Ô@*{ §,²Žä¶’ÞÞÚµµˆ¶ü }F ?{³ 9cŽÒFÍPÐnÛS‘.ྉ¿°MyeŽøÓ“œ`ü»†9È'mÛùWQŽâe’ \•¾×¦b ØÕD¸c#$qÕO}wW8¹])r/ëúù“KþÙygšµW‰¶F#EÔ º_¾Tàpv¨ÁÁÉàÖlþV¡¨$Ï¿²¶l»_’öWC"ãpPz: "´,ä‹VŒÍ ÈÔXüæBðÞº@ ƒøÈðvöàõ©wmyv&°"æöa/”þMÙ;âÆTà1Ëzyâ’MÓ­8O–×ý »Ù-5;KgžßûbÁ|•im²/ -Á$’ 6äUÔ™dŠîLkpZǷγ_*þÜŸ+¨#Ó·'­Nò-þ²ú…¦Û¹aû4žUÜ]Œ(úœ’*Õí!¼ „ÜÞ˾9o,¢1ÜÆ- 8$gqË joÜÚ0ÓÝWû§{˜ê)F¦ñÇ.h~Í &0ÄT£•(sÁæ¶¡‰5cw1ê2.Æ[{ök¨3ç,F»@#‚F–šÜy­5ÝíºÜ-±¸_³^FBÌp¡[¸W#d.MDñÚÊ¢(âKNØ)’;˜|™vî|mpv°'?t’x5kMN9Ôæ\‰Y¯ëúØ‚Ý§ŽøÛ[Ù-é'̇IÔv’¡eò› °ŒÝÁ9ÅQ{ík‹ˆ¢‡ûOìó žÆðbh¿ÕœÄüeˆ8z Ü’øênVœ4²yÖÚÉ8”´Mˆelg¦H<Œ I¦ÛÜßBmä[VÝÜîKȘy$»ˆõ œœâ•¯èl›¦”Ú×úþ¿S&Þì^ª£Þͫċkx¤Ý£ˆ-‰ˆ*U°£“În\ZýºìãSK˜‰aö B#Ëû°B«“Ü…äŒ|ÜœäT³éÓM˜n°L.©ù†ê5_',²X9ÜÁfÍT†m_\º–ÞâÔ]ÛXI­¥â˜.• m–WÉdóÈ#9PHÌí£7æR|Ñ{_׿Gc§î v7ÜÀMP˜UTÎ>Fb~P¼¯#$gfìºk2ÙÚjê.%Y4ËÕh÷Ùò‰€Œ¨b=ð+X`¿¼{ŠKØ#YäH.ã w O4ã¡ÜŒq‚kfÞÂKéÚØÜ­ìHêU.sosm_e<“Ž@Î~ösMk¢C¬Ò÷¥/ëúÿ‡3„Föå´ûhÒì4Ö:¯É4+¹·Øƒrà#pr_$Ñnm«ËaeÖá¤(úF±µ¡¸Ç)‡Ì2?»ƒÈàÕ«§mÖÑÚ›miö’ÃS]³–YüŽB’A#¸Î8''-³†âüÉä¬z„M"†ÒµµÌ±1ò³²Cóp:ü§æšéÔ¨Ô÷nÞŸ×õú”ío¡’h-ˆ›NŒš&¤1›L!ŒrdÜ6ôÎ"¶Ä"yFªmJ‘i01^Ú`!ù…b žT€@?9ª·(Ób·i#žÙmؾ›­–WÀXË4r`ʦ ùqŒ“SKu4·íÙ/ÞÎa¿Ýmq…ud'qŽi^Ú2¤®¯ëúþ™4SÞ[ÊÔ:ê¬96Z†Ø/aM­•'®ÓœŽp0IäË2Ûk—óB÷{(–_7OÕcdš<¬£HÈ##¡n§‘Å.©¨Ùëaí%´Xµ Ål¯Sk0A&LS.1“ƒ•$r7`*¢_¬sÛX\§Ú —Qˆ!Ôö†@ ÑʹVÁ ÿ$õæ¯Kœ‘RånÖ—õý~£/o"¼¶Ë#1èÚ®å‘q!R@FI,Á=ù5imq:[X:Ç<îí¶ÇWŠ`GŸ&\`•,½÷ð9ëžåˆH »´Û ´–º»•Ÿ£ ,øÛ·, .zUH‘|H†Ù&hà‰¢+a©Z–`¾R.PxLî#’8dòš7£W– ÛOëúýF ©´{WI¤– %Ž"‘êßé¸ $($‚>\–¨§Žâ[?&Rš;NÒ+X_“,ä”dØë× ¤³”ÁÞŸmo%„µÔ€šÑÈÝ» œãŽ›—¡â´ )§¼ÑN_L™ä%¡º_6Òàþó; ÆÒY€ÎTýÜâšìc/u¹uþ¿®§9¨NÖó.“$FÂÜìÛݳ[6KœÇ. ìÜ‚GC¹r).íàÓ–E–'°ºh§„iÚ‹acûÏõŽ@p'¹Ü1‘wZ¾K3wi%±Ó]÷ŠñÌÖ“ Ò ©ûÊ[#æ88Î=-ji$esµ72ÈÖôù–׋‚¨çîÎ;ð2*9w;ÕUÅ=/ý_™NÝSQ¿þÍ’äK*H²6™~åLeƒ’`ä’7u$ônpN4Zˆ-áŠ{ÉíaZ;£²úÙ²™1Œd€¬À•;x9Î8‰~>ðßÂí%Û_ÔD°Çräy³`ò  ãžy psšùâ?í{ãoZ-Ÿ‡­Ç‡´èÜËi¨\×â6_`!TåWWŒnMOt^T*KœŒpAŸ¯'׎ùï¾ü ñ¯Ä™"ŸMÒ\E%éR#O<ûc°¨rKszT*Vv‚9Û½\³æ—.­ü´PìFâ0T(TÎŽºÏ|ñ¿Åé&þÄÑî.íãuiœ|¨Œp²@äädlg¾«øYûxgÁ·‘\x”Ÿ çûFÓýU™ÄlKÅÏ 1À9Œâ¾ˆÒ´ë=$šÁ^X=[K"!1ßP~TÈ$xà Ï™½v–X©ÙÕw>søSûè:=„zޝ³Å®Ð Æ›` @H_¼àa¸ñÀÁl׿èž›¤ -"Æ+» V/ö)#1\Ú.ÎY©?#0§ŒŠ³ww¤Üx~+繎êÍmÞA}i †ä d nÎ~O»Íxf±ûi|7ÓüQ6™}y©kºl í³§Z…e#¤³!“q=p橱骴hÅëeý]îÖòG­éQbg'hC–aÎ8(MMº¼­==¯ë¹È|ex5Ÿ\ÞÀ–×A0×p0Še ùe]£~6ȨùºK4¼¸†) Dd;CJpªHàŸLŸÄâ¾’øµj÷þ¿»7©©ÉÅ{Ë)6ùŠ\‘çGÁ Ç#Žxù—QYdˆrd8ÉöÏ^G矉ϕªÓ’?Rá÷iÆýAgO-ö‚6õãüôªÇ¯Ý©Ëƒ ‚1ÜwëPsè?þ½|‹nçÛ-©a³]ÓÅ|Ú‰Ž}»OÇt±í‹ É“•‚Tã®i°LÚ’JÑ4µÌ«$[E½Ô?+dòAä0åN0O¾!ÒåŽî.±½’-¡îlH·» y2EÀ-’rWþø9щßR†7“mðP®'²ýÕÜgjýå=zž˜ûÜ ïû*ÖÌþs¨¹4þ—õò$6Ò\´’«½úÀn6Ïkû»Ëo–R@Q÷±>^p9VKµèvDMPDk«Ý!ݹ2F <ŽƒŽj·ö”Ҽ̱ ^PÓš%]CÄÀà8l}у֋¸íµ+¹c’_µÞÄÑ—1Iök— Èwº°…ÁÆãѾRqÍ_±ŠNM&‡E<šˆ´Lº«‚É”›É¼‰·B0W 7#ø‡a†«pMö³îõf·’ÝÚd\Û.È3?xàü¹'i¶«ou{/<³ÜÂYcžu0Þ ! *ŽwcySÇ ¬ßëVV…Ñî@–6—ª1-• 0÷L¯'‚h¸Ekkh¿¯ëb¤-4òÊm®f¿E¶th¤f¿·ÉT8npr  âÜ:x¾3Ä’®­‚Á"¸aäŽSò7ÎÒOÊF2sžjK{› ›©Váa¿»‰Y!a#Û\’\d' ó)_`YŒÖí©Mk›{‡*ªVvN?vàüç呆xkg8æ„»±¹¶­Óúþ´+ÜÀÚ•µÌ@K{#[8]>ü3~öä1€ŒÉNƒ%»\,îµôø¤öðÏ º†þ2³B M°!?1åHùŒªº„÷WÖ÷¶æò{Ø Íµ¿ Ó8’²ç0#Ok¨²\ø‚Õg+8‚i[Èä†êß+sÈlç¸ÈÁgÒëaëkÉùÿ_×ÌÉ1Ë$’[Û²jöéƒöÿÝßDႱç’$p9äV…ˆ†îÚ&Kkâ²2Ǧ^À‘λ|œÈ 0)¼r8«Ú½­ÝóZO wó&0n£òf|ÉÃ#ƒ€Ë÷1Ér1FÚÍ{ln¯EÅ´/å­¦¢ÛLļl|.óq“»ž¤âú Ѩ’–Ÿ×õþdVw1´1[[‰†¡1‚A¤êŽ|–'Èa=Xq‚s€vž*uÕ#½µM» •7ý£NÕæmÊ»‚9 gp§=EVÔÁ,l%dHB@Ÿ«å¤rÜY¸Ûžp$9Æ~jÞû vïoiy^Y³©|ƒÍ‰|•ÈYqÁÀèÀ›¯JËœ¢•Úôþ¿¯S7P´”Ø›[{¤¶·Ž4iº¼Glk‰U‘çoRW E|ïñžÑ4ÿ‰W6ñÛ5¬QÄ¡"g, nbäœ/'=ÎÍ}7¬í´µº´†Ý<¥ƒwصåòÆD@”1Û’1»¯AÛåÏ‹ÁgñOW†®#dâ@äŽÄ„#Ö¼,é[ þGÑðÄÜñ±~¿—õÜæ/ô¦±š9ˆb.¾Xqs“Ð?ð!QïËÀsÉöõÿ=* ï^òúpW Œ÷cß>üùT«ÈÇN0O\ž+óén~ÇÛRõͽ¤V æH îÂ]rA_”)8à1‰ÉtsB0`0·‡^çI¸–ïq)N29M á‰ú3F:\ã2CÐr@é‘éš%ºz’^ÙɨZŽSËò¤ƒÀ$ÈŸ^jżx†ìYG?‡J£©ê`µ@™ Ò. €yÈõªþšw}7È€“È"®;Åy‘4ÔdÏ®m¬åÓc¤1é*Æc¼Wo}¹£0A99ÚAù¹­fBti"“F¿df$²—"6$.p É?.=tÛ:ÛâwÜÃL·*g²8hq÷Î0!pÃ`SR•tÝ2Þ{MN+D™v¶ü\Ù2U‰ÏŒ`sÚ¿XŒtÐüUÿxùº¶Œ=c¹g¼–Â9ä Uu- ùøš<çå |§`œœóvâX5 »i>Âú£¬’ 5M4l1¾é¶B7 8`ÅE¨ØÏ§Cqwurº– Ý&6ò$*² ƒó9l`g)©éÚ‰ž[ÙKG(ºhäÔt™‰i’^ Xõ'8ÏS–žÂ¼jJ÷ôþ¿¯B3y þ¤æÎÞ=ZÕPy³Z1‚õIÐ÷èAäv9Æj從ºÄ‰öÚÚB>ö†îÅt S0 ’Tägs“go5ÍÒÜÉ$wá_·ilaºQ¼fNH”«õÎxÜÀ“X°º[huZhLW:f ±«,!L¡NüÊvœ¯«Næu#È×/õý|Œ’–w–2ÜÏ,—‘Cf›Ud½·p#x-œ‘œ0ùx¡œ.Ù®xuçÃ牄þéŽ9àІ9QÒ¨Ýi·Z¬k©^ÍçÁ³Çöûü¹ƒ ¹ ™##ØëÔbÖ“akªê“êÑÛ.¯nÒ6n˜."%%ÀnÆBá_ó†<úËÜo›úíýX™l Ü>L“]L¦ D"Ý®VvùÉÀä†èNãQ$:›Ê-šÔí¤\麜ž\ñ1Qû̓vpFXºpWË$¶úµ½Ë¥ÕƲ`”Ì¢ »RD “•ù›ЇôÁ dKáÑ&«!„^^(ⓆÝï™\d£¸Î9ú˜9J1mÿ_×ȧw¨ZA«Ae˜LêÑ•Òuñå.Ô$$¼ãñ ½~aOÒõ¥´qmè¦6ð…Óµ2žb¬™<pWÓž‘iËþ©œëÌ1Ü@ÑYj‚ãiXÕ>GsFsÏÊ AïEÀe½²]"Âc:Uðò§S„?»~„€8ƒÀ9TÝ®§B¡ÅE«éý_‰»¤¤›­ÒÕÞÐí”}‹TbÓKÂàG'RBO'å5JïQ»¼O± #Ê@ãFÕAY 4ŽMܰ d*¹¼Yž–)/ÝI?Ù÷ê#ž¡Ï–ÍÃmÉ#$vùºT÷÷PkÝZ[[.¢–huðÞ©ß&¾0p¥1‘Ÿ˜c©ËoB!K–|Öºþ¿¯ÔµjoeÖî%†áZx䜶™©º–W>`$°aƒÓÀÀâw×®­õµŽûD~R½Ž¦Nå€Ágä’wŒÏm¬f[ê²&¡4vÌnBHÅìuòîÔ°91Èzðă’yn™«6¶AäŠÚ÷Ò­´Lºuó.aXÆUÀÆÐHÉŽ™Éà—ÓANš“ýâþ¿¯øríì‘K§ÆcúÏÅž¥òÎ@eb•³‚0p#ælU8%Šk8¬â‘ï“d&M+XŒ¤¨¸Œ ²0ìUŽåùN3Å&› :œ©dóÅwsm/ʺ¶R±‘å·9 t##“€´¹¯ô‰,üõÔm¡ˆì³B]ÆÀ aòF2{@4õz¢$+þ¿¯é™jVŒçOŠì™!ßö^®Å˜à*J¼dÎA'¦Tc‹éBâI­go5¶áluVV$:—Šu8 aÇÊFN3œâ£hÔ[yÃ]„¹q-¶ªË·dÙ ü«Ž#©å¸«’\Ûê–gIû ]–}7Rb—@†“îI¸]À Ù## 9©õ:§% {=úÿ_רMm&u5”%à·‰m…auó,¥fS¸Ýò’G$ã¢ä€+A‘àŽK óiÖ©!A2‰­_1©fÜ ØÀs€rx¬¯µÜi0ÜÝKntØÚŽ7‰„ö<;nnR}À¦ÅJ2i«ÿ_ש£,fËLkŸLÁL¶,£z€W'g$œ)ÁÜpÀ× ã¿Šøe¤Þ^êí®šXLa²Óœ]Çv¿rˆ”»‹IU;†sÎ~Dø¯ûdx²kûHµ_›]öò>VWŸæÎæ!¶¯\€ƒðHÅ5vsV¯Kœg+³êŸ|~ð—Ã]%ÖmR4¼ŒL£LµD»Žç •-˜÷IËñ_2üTý³§â[ö¹¼¹–æVÀ>d…‰ ëèä+Ò|=v¾%𜄘ît–ûÄ¥g‰Ë˜Î:ð¥Ó®6…ëžK°ŽÂÕZçi% Ü"ñ´“ø7ö¯àrÏMñ{Ã( a¨'”Ûð61#èÝzÑK““¼ÙgYÓÝ2é‰pùg:ô¡Ïb?ø°—‚[o"`²3§;v·[€0GÞ8ìséØëV¦ÙÍ´À+ÄåNÜ'òOÓ¾8®2îúÚ€Ìî¹*¨p qŽ{c-Øÿ< ›t±èþ,ÓŽ©q¥x…a5¸Èñ(.fa“Œ¸/ƒÿ=:/³tïYøcl³^2Mnèë ?1a»%sž6Œg‘È#޵ËÚjšÑÓ"Ó×ýÜ3KJ¹‘œã$/ÞäçÀçƒ]ž…û4xÇÄz1×omDðà$Ë«Þ)ò£é–el à=is£ª–­O…uâ/Ùî–ÙD²¾Bî%ˆ• {ã$tî}«š7ÿi”¼†FÜrqÉ9䜓ëEÝ´úì[ËæÚÄäG!àºç€<ó×àj6Rp ôâõ9šå“Otz‚þ&xGÁ6ñ\Áà©5mf%$]j7êÖá²pÆ+Ÿáà±èyç@½ý»~!´‘>…e¢xfPW3i¶îXí`pD²2m$ ü£©õ5óX%AÇýºÔÑ.rOQÓŸ~ßÖ•‘Óõª©(§dz­÷íñ;Ä„—ÆšuÄ™ŸMhôðAÃûvƒÇ^1’k’¼ñ«¯çû_YÔ/Îå®îžQÑTg$žÐð§8±ÚOûA*ÚK3Aꬺ„fMØÚHWR@É"š57Û(!YŸåÉ#x=rqúŸjVò2•j“·4ö‚¤18Ç~¹{ö"™%º<»HGWàœsèN{þxª_k$c' $ûЃÜvæ¦k˜ÎጜaJƒ†úKëë;…Ô¿•kK…æRÑÌ]9 ±äƒŠø öMøÙ¦|Õ|Lºµ´—6Ú•¤bHD…¤Šu!OÎŒ¹G“ ¬9ÇÍ}®þÚþ‚ÚÊ-+GÕï#‰¿x·Ñª:/î‰1N²’…Š7E9ÈpàáÉvì}^01ŒÞǯøþÀ\øSÄÚYßÍ”Þé’þêO™˜yÈ[*pÁIaœ“޼üÐuìÙ`¼K@ë(Þ¹RAwGkÒáý¬¼/ñ.ÛPðÌ:.¤%¹´Îk„HØÈ‘©}Æ6=B1éÏ99Æ|ÃÉ Q*d§ø±ŒNkã8‚*>Îþgì\#ŠXªUZÛA·2¤¬ÍŽBr<ôçùUr¼õýE\žÈY+zK³åÞŒ ±Î2¡ÅUeýkâå£?E‹ÓCéë[–H.VçûJ–=VÇ+,%Z Œþð¤äÝ:ç›)²ÛÅuÔzÔkåÄo´Öjû±a1†ç)óךÓ[.›ªIs Iç³yÐþþÚáU‰Ç©Ú8`:žNxŒ] 7·šx›FÕËXµ @^ И:ªÊr½2Gû*v?ž5¨Õ¿¯»ôû‰\½Ô"–æ{%Õ­#Þ‘Ïa”¹„pCÄäç9ëÓ¥>¡×#®Äšé¶b|“—wm—œd‘‚A8³ŽÙæ6—sÁ5Û6Ÿ<Šc:¾™>è_*¼ºõ^H|§œf¥¿š9ocÔ®fò&Y VÓHh§ ç’ èØ ê8Æh¸ÒKHééý~V~E»{=]NËq®A ÅL3¨K«p1€yÁ\eNxç‘T|=o³4F&¬HÑ,]€—–ì¾N7BãŒ`†Ï8ã{F{MN›½9,o$iUu 5ó"¸Ûæœ2‚2>Vì0zäç5/¦ò®[PÕm¢ÒHš-_MÜF|Ä8'‘À7lüÜu2§)GE×ç¯õÛRx[X.‰;jácÉÒõö8 wrî*•ÌjrÅóÍéåÿþ]!‡[µkg˜]”hÁ{¾ âoÝUº±È$ “Š¥¥´ú;Ù@ϪGíï•x€a¶£°Ã ªŒ}ÞÌE:þ{Ù¬RhºåœpÃ"ÙLÍì!|¼3w#å=G¯&Ÿaq%ÝÚC)‹U[y$•|ÄÞYå[ÎâÀs÷sÛåÉ¥»T”tz_×OVG=ãK3Áæ>«)Óï]¢»µùeÉFb TñÊôÔ&½£Ýjˆe½dŽYLÕ#d¹Aæ>ð„rqóÊdúEtl¯d™ÚXõ«–d’”‹kÈðf_~‡ ‘×>”ýE¾ÐÎ7Mum¼Å’¼E{2P¬HÈ'’Fj‡¶§JM8ò¿ëúôõ$–Ê[½@$*/[Ï…¥ÚùÁ€¤´mœœ–\ô™ëÜŸB¬¯fvú^‰®øÖá¯5)Bªíã,  03Ï^kÞþ~Çî¹5¤šÕå—‡"‘R²É 3Ë|+gÉ^uÏ>wâ¯ÚSYšßB¶ð%§ü “Ag_F‰®ç³x@S g#sd¶9O üeñŽâÍ2úmcPÕmì'[©4Û«·0OTÉ\ñ¿3ÐŽ@¨i½OR\5&”“~gèÃoÙÿÁ ‘âÒl%¾ºVc-ÅÑS·uh°b\Űœ7ÞaÁáÿiÿ%χ4ë;-JÎâ=Yqw©YÍå¼°$vÿ»xóŒîp2½pÛ³Å|Eâïë|I¬x¢æîO´\ÊÂÈÙO“‹É;B¨ôv®rËG}JÌÌf ç=2:Œç¯#·ëG)Ù,Ò1NŽ…#Ù縀å$eÈÁ}ñQI•ùAÈêqêíøš £óÓŒ£I8öÆ?ÒŸ!.ܶON~¹àgÜևηvÞÄ|ûúž‡4ø¤ "°zsƒþFý}Y#–'=@Ç$“Áµqïü™!'«â `±äýìnëÞ¡!3÷‡ùüká§ncö˜½¦õ!>$óŒé—ï$ç¹{9St™îÛA;@9#ŽÕVÞ4ÑõhËG.3ßȹO´XÜñå“æà‡•÷ùx¡n›M¾ŽÞÑ®,Ùã–CkxL¶ŒÊ³åpQ•ÇSkRòù¶ÑM/Ù%›j› µf_Ï*pëÆã°à‚¿CÅ~Æ;'*vÓëÏõ*Åw$WVÞuºè&à…_&{K¶Ù©ÈËwÎäðOX®ì„ÊÁ[A–HTI´#ÙÊJ¿S·h<žºÖ…£Ùɽ šÚæIJ½– 7[NØ€ìŠN™É )ŒuîÊ—C…Z3F•¡Uk[Õ l¯*­“·æcÔ²ò9Í;Ì“÷¯ëæM¨[C¥\×gGI>Æ æZr'Àpßp‘‚Œd¤qPê–W:kK$Rÿd32½µÃÙKûÏâï€@nrG•[•‡ÅTÂËš/Cõ–ÚâËÄÚT•¥ôZþ—<7Esm'—u´‰z`Aû¸`Ã…àcž¾$.ωšÆù§¹ "“%ÈSûµá‡·Jùá‡Æ/|#Õb’'–ëK ŬÌÏù£4l¤|1ù‡p2p}¸üF±ø¥âGY³¹šf¹e’EºTYÚÜå'#†3Çž>k;ƒú¶‹©úÇ c©b1isYÙèÿBÅî¤u[ÆpÌɈ”å@9 L“OO˜ÔŸóб®Gi¨Rͳ†=À‚pª­‘ޤ‚üvqß8¬ƒwI=IëÇùùäþ+3öšvåº.ÞÍk µ´PÄÆâB¯,¥—ÀP:ó¸ÞǽGzŽÃóŠmÖ— 1C<Ž†íˆØŠrÅ`Iú^?ÛÏLÐ79ëßïÎiËtò$›S:t#i@ì?›'!”©Bqô±ár³øƒBYYòÝXH2¥|Å#Ó¬Õ·†x%YÂÀÏÔlùð«l ÿ÷­_áü[áõEBçQ¶?*s2õö5­-gæcY¥N^‡Ôšå¨Åsév΃t%üÛþXÎA òž2qÎsži,näÐ.å†'™4ÅŒbÙ7\Û2ìPx'ÍÆÒ1î ÍC§Ü^[_6×O:Vûr¿eÔKËj̦ B±?(#¦xù°IÅ:æù4[9aÓ¡A¿ò•|Ù€kk‚¨A@ç'œ1×Þ¿XŽÈü"´y++§ý_ú¹VÖ;)Œšt×~–VSº@³Zʹ˜Hl €@ {¹È«ºlÚë¶²5ØÑon&˜7”åí¯An§9Ã6IêÇÎ;X‚ÌØ‹‰.4ØôXü£gs’Öeo5CÆAùNP)#!‹c<¨’[S Á‰HfYâŽ9m V\sŒ¯t<ò~bMR]Nz•uqOñ¿õø—­ :4öÂ{ˆô‹¸âyÉ éÌîñ‚I 8$!$8ç5OR¶û~¡÷h‚àù>]õ—¸ ]Ã<`¹çpÂŽ´Øî••-¯->Þf„ ½‚[K’|’ÉŒ‚¤å‡[1Ò«Ã5§„í¢€4º4~d’nLÍi;ãçqå …#<ŸJg-8¸·/µý]GiÓ]Ø>ªËuj7¼7Ú`Üd!\•vëÉõäô¥ÕuiïãöR.ï·i‘e•Ãʤ¾ä·€û¤aºÕkY1*ÜZFñ F‰§ÓnDÆ_c´gœÈ=ñƒRÚêvöWâ=Í·ÌÖ¿×ÝýhK&¡‰®ï¢’þ$2uHŠÜ[Áv²}ìòrHíÎ*kMõ›x„’é”QzŒ2ùqdÇœôã“·ƒ×!5[d¼÷:”1²¤ðâÚå@˜» Ú0[Ùš"žšÖÈj7vsƒp¶ìmnÄ\•ãÌcÏCž¿-]ŽWUÚÐZÿ_×OCÚ õ‹x“Qµ …†9c’ö{èA®yè`ßÂß/¥ÝfÒëQ”Xõ›(<Õi`;o­p²’ î#à…nGYõDÔíƒÅm<ð¤y’hÛÉÔbé9H£[j±”ù ÿ¯Oøa'†9ÿ³Mä7æeŒÃ¨[)òÈpTÈHn¡—#ƒ“ZÖúŽ«âKé/oáØ©q`ÞUÚ)Ž27‘´áTq×…ù@æ±l]¯.¬ÔM=öÕòþÙhoí—l{²½3Éàq\/ÄOžðQ cT³½uŽ3逋õ) ÎÚ ã†+ÔóÐSZô"^Î*òå=.(TK‰.¤´ÄÆÖòJ]ÄÈvÃ1ã9Sž»Í>øK¨ÞÉ1’ vÏ”H6ß[£Nü3³q9 ¿w$×â/þÞš÷ˆn%ÃÚ¤NÌ…ì~eÄJÌçå…èËÃû€çšñÏüIøƒñ úkí{Äw’<Ù2.Àï `}xúÕòÜñç™S¦Þ·ôØýñGŽ<;£ƒµ¯iÖa°ÆçP†ßQŒ« ‡!÷@”dç8Á®{Yý£¾é¢Ùÿá%ÑuònI7 ‘1•ÈÃg c_›ÿÙºirouf•Ïð¦\¶:þZ†ý¼9gòÅÅÌùdîOSø{ÕrO5“jÑÛúè~‹~¹´·’ÇŶàF?³u&òç…‚•$e ¨P7cŽs\wÅÿÚ÷Ã?måÓ4‰í¼k|ï&m¥]ðÙ1(p I÷ÞŸxcŸ‚ìm¯µ ÂÆßì‘ ƒ©9Ë…Yò4í ÷NÂúçû€ägÜ÷ÿ?‚Tí¨êg%T•ΛÇ|eñ’ñn¼E«ÝOio*¥c(ÌXª‚zry<œJæMý®–:|bâã ™†@>ÃüERºÔoµ—1¢11û¸Æp2{ƒ&¥ðæ‡w®_5”7v¶RÜ|ùV#Œs†n3Ï@1ZZÛ§*’æ™Zò)Ÿ|×^dó°'o8óóÇ5SGµó&c! fc…\rOÆ»[¯hšRçRñ<381Ú«9ëÓŽ:Îx<#g¸F——Ž{ýÑßsÏOÊŸV+«¦‘•&©g) óqÁpãØc¥užø›¤x2Cp|c®êO2)õì¨qÁجÁóè+µ-5Hû6ˆ8Æ ’9î*u×®"lÚéÖéóg&.{“úTÙu5ŒêEÞ=ýÔšïˆÞîî¶:…Ñ‘Õj.÷€‡ÍÐz 2»ÔìÜÆ3"˜æ ¼°.®2{àªsØtZ»¶ÛÝšòé¶óÊ.-  1\£œ‚¼gŽ=ñŸË¨®M³»µñ2ËqnRUˆ…á‚‚0ô Ž1ýh¼Ôå{Ë ¸áq ™ŠH.Nì)8ÆHVëÔ!ô¢?ω,îœ ˆaÞÉnÙÚ¹ =RO^â z—Út·pDZµä²ªGäÜ&.¡Tc£=ñÚ¢ðއq¥.¡§ßÁä]Ú\:ÉðÊví#9ëžGÒ±,µYtéuCÀ–íDŠÑ°%X‚?xd©=;;Ãþ$¼ÒP*ÆY&2ó»†ÎF{çœñÀö£Ì>F>§nmõÍF1ûÆ<óœÿZUÁÜ898©®.äºÖ§”Œ»ŒvÇˤš6ÆàÈÉ$dsœŸË?—²Ÿ*îçòsøà/Ò£Áð8íþ5zb²,KI*ùlÀœ¿ÌÇsdžp@à…òLvà89äPj3Ç'8ç¯ùëAåp2yéÛÐT†?,aŒôÿý^õ!¶/º2¤Æyãüý1@ wFrŒš˜GÀÉw þPzã¥2ÝráÎ2:øTŠpÚ[q==:ð>„×ÓË9±rcØvü8À¤\‚:pzg‘þ{SŒg{ ¬p:㯛ª™ êy€ ©$ç·¯\S@40r‡ï–ù›Æqß°#¯LŸJöï/‡­¢ 2xì?¼>òdÎ0ÉÇVêGç×õ潓áÜÍ'†ÓÔ÷ÈÜqŸÀ޵ò|E áã.Ìý_Ãú¶ÆU§Ý~LêŸMăE$k20`sž#'Á‡=€è*¹e­Ga$ò™|íÀ+arr1ŒŒsî:{÷©ŠŒô_È×À6ÛÔýæ)¤}!2ÛivåY×HóÖA%µÖ&µ¹Ìls’W{<²ŸPy«WBíçŽ4•A“§Ý¶ûS$¤m‘½€ûûzžZµÿð+,Q€"¹{Kè³nùUÆç;p_ õ51Ó ¬ćû;Ì ÚÿkÀ3•ù##È¢¿cågó—·…–¿×õêf˨[i÷à Bmå§ÃqMlã1) ݱŒŽvñîq­.£qw¥ iaŽÔ,1Ê—‚kIC€ óŽ£ùx5”è,îÅ‘Q¥Ìó1]:î?6Öq¿Æý¸ õ9ŸMŠ;A’Ò¯ÝCc1k‹I 0e”ã†8 *Ý0¤b’¾ÌÖq§$¥mWõýn_oÑZÝ(íí®Lƒ22½³~íÈÚAdã cït<Ö•ì³ÛYβ¢Çc©±–14 |ÉÆVA€NXœ§ dŒVÝêøwÃ÷š…Å×ü#‘G»ÏŠäùÖ“%—¡ç'µ¸c¯Ä?iý[_¹¼Ó<4dÐ4Iw$[ÎäÌ wÄí%Ê9ïNïdpâq©^rzŸ\xÇâwƒôhï"×(k›¦]ÄQÔ Œnb;qÁ¹û»ë«×f–F‘‰É$äÕG ü\©BÎíŸ9‹Ì%‰\¼¶F÷†5øE¼K¥ëÓFóé÷Q]ÆN #‡\ñê£?}§þÛ¾ŸÌ–]/VÑîeEY”Ë„oÉd,¼|çî!_ò¿µ9_±«q¹Í‡ÆUÃ+@ýöªøYã6¸‡R½mGY¿ÓÍ™eÜ$Ú$Œ Ë äœs‚kÅ>6|2ð¿zúŸƒ~Àjô$#·$÷Ç5ÂÞü8ðçÆ&]wÀE¦x’ºëòÊ›‚wÀI³´äÛÝsÍøCâ}Þ}ýâh¤Šh›ËH0ÈsŒ0Çë_™ä^®îÿ#ö®ã8ÔQÂæ.Ϥ¿ÏüÏ^žÞêM“¼›­ƒ4k9S€Ã>™ÿ¾O¥Nó ŒþqT›W›Phü¦ce´2:¾cvô 7_sëV¢#<Žã¿¡üÍ|}DâìÖ¨ývœ”ã̶}„¼Šâ䇉i2p@$.ï|+¡ð`1ø¿ÃÛPJënV6;C~ñN ÁÆpqëÅaË© HŒ:+\(ãa’ë¸6Ñ‘}»æºÀ·ž6ðôr/˜¯eç$oçŽÕµz­=:˜×ҔﵨSVkøm­m¤”J±døTi,<¢¬’dúuåx\z6ÐIq1µ‚ò6 }TV1ª¬ON À9àÒXÚZêö«s¨ÛAæF‘]‚/ƒªÇ•Œœ‚H!°y8ªOi ·)˜5S >É}¶¨ÉG$ †'hàúuâ¿WìÁªró8§¯õý~§CËé—wðÚܶŸs5Ì…-õ Ñ>r’Žq÷Îy>ªÕ—ö¸ô[$‘´©Þ6XôÛ¹3jÍæ'‰Æ;FN1Ð ¯¦]1šKkK¹­îטÚ^»¹Žš”ç;N '#å#&œ ÑÈúm‚Gmq}Tùâ–ùlNHCy«¾šÞË–Zÿ_×ÏÔ›ûGìrZ´`X_H°etìlXb ¡[Ðq£§òÛÝ·rO££å§Šá<ûb»Ôgæ!sŽƒ›hc´¹²Òm›uë¤'P%áàC‘áŠà}‘j­îµglF5ĺSñ­ž ¿h¶s…# Ð '‘÷ˆÀÇ%ì;)?v7ÿ/ëÔ¯{ö/¼R_Úg!r!½Ñpf"@ÁÔyQÜðjÊE¥x&¹¶¹¿)&Ë‹@¶×N ’gv©ãÚ@ä|¤æ™•¥í…§î¤Ù=¦©–´˜•©G`ëœsГÀ[ëH­­RÔ*Z\Äfª¬Ë½YÀ+)<0 y$‘ÆÜ ‹k¡ÒœeOVîÿ¯_л{W‰G¬3.ÕI6¦ ¸xÙ@ ®q‚xœ›­=a¾Gg²=r8– †¶½”Çu •h-€8=@ïó1Ê©"K;Co*5»‰ÚÏ~n"PÑöò`$KwùZºË(EæŸ$7á5°A,pŸÜÞ€#R7ÜàïCeWµE©;Ö¦èÁ6ïý]½Lû»´Žùí •u;¸‘Ø[_†xÇ—&à’ÐõàašÓ\êîÒÔÈóŠtÛüG*¯ï³åI¸äd‘’Ù#"² x®§–Êþ¹ˆMkð—ŽuoÀñB‘ͦÌÙ–)4nqü^øǰæ¶5 'Fñ½¹¼Ñ²Ô—æ{&aÉ=JÏóï^ÿñ³ö4¹ðî˜u_jW¢ÃoÓi‰¶å¢3¤ ©-Ê•  õò|«q¡ß4öþe¥Í³bXOÊc9#¾2pAé*”»œõ°Ó£¹Ðü9ðD¾8ñÅŸ†ZâÚÊþì´pI{7“:©`›ˆ#sc ¸åˆ –+Ÿ©|/û Ë×0x“TƒIXÅý½³\[1É ûÂãˆ\e{ŸÇäíSPm~ÕaýÍäd §wf¯cÒ¿Fe߉ËñGᦓz5ƒ§ë6Ìúuí•ÒùÖ³J¾Yó àëî"2Ë ` ÎwOCÒË])©BkÞéýÀ8Ø¿cÏ hQYVâþúÒy.©¦´b)äËlXË(! ¿@}«¢ÑgŸ[hJ÷>¸Ö-šd¾ÓnåiIÌeƒ¡8Î r<”q]ÔÝ4 ,'kk­±‚e¿³f’Îq²ÀйpÜŽ§Y[:i¿nŽ41$R/Ût‚®Ð>üx³´äFAÎeoxú¨¨FŠ—*Õÿ_ÕþGç§Ç߆šw‡ï9çG„|;|b¹“ÃV˜ŒH‘j]ŠEuü­$d’DZɪMÇC‚¾Ž*^Ñ]}ÇæÿŠ~jÚ‡‡µ…WMR&©ËÁ¶B»]qXaìÚ¥£xP×µ}>ÊÊÚI.§“È\‚Y€SÀÏsœçõúqw¡i>1µntëMzÖ/&H®­ànâË&UcÁù°ì0àòŒq‡áÍ"'´Õ4í&ÎÞ[W‘¯§YÅÄ_êÃ3G°pOÊXòpMW3ÙÒÊhèïê~gø“Ꭱá_júDÉæIi3EæF§kŽªÀã£Ï÷…PºðÔ¦K›ž\rÈdËqŒòGÐkôöoøgVÔ›ZšÏLšTHšmSìÑO¢ X\8\r9åÈÎ%ïÃm ûò-;DÓ äkqû˜ÞÚmèß27ÄåT•9ùòiólKÊi6Úm—é6sCs,e ’f]ºÁ<þ=~µ,ð´lѰ#iÁAé‚>¿ÈW¯|EÑÒâK› £ò1tpQ³“ÇC¸\|éɤKcâ *åï#M¶šµ„ 2®FXØ*€daž¬ThµÜùüNЕ–§ɸÙ  zgšŒÆ½œ‚9?—5­|¶¥È†i*XJœgŒ€O©ïÿÖªmay6‹ˆöñ´pzãŒg8¦pY¢›vDŽà6LãåV‘ÁÇŽ„uÎmŒ¶ò!iá}ŠñÌ2È žAVÇ äcJß0Φ'¶uHU†GO•³žý»t´é¥gÙ01áŽzcÎÏ8=­ФŒØ•V<.A#¹ãéúÓÆJ/¹ àž$LúäÔöºuÄJð‹vw”®“¸õÀÛžùg…Ç™ÿ³/'™ˆ¶mã ‡R0Çs‘“‚}(ž]ñµ²qÀ{’üóSq¼ä^œuãØÿ<ÔæÀ fy B¤<Å-’pÚá€a‘GQõÅT6¹ò¸ÉóÔ%š/!™$RÀÙÜàžß¯~˜5UÀ#ýPŸ½Î_kü%ý–¼ãÿé"MBöYu ð]ºªy€KæF¬8$2c–‚0Iã¶—öEøtlʶ›yar7€·w%¡q½Ô&03÷€ëÀ5Z­ÍÖ_)-ùÃ4Ž’2œ½ªkyD‘žÏž½ˆé^…ñ3ÀÏðÛâ=Æ©Z¬‹À´r‹Æ2}x=ÅgüIÐtÝ;]ŽïG€[éWщà‰[rÇž¨2sïžÜš¤ù•ÑåNœ¹ç&£Ÿ|bž¥‚‡¾3øóü«èkOØÓÄZÖƒ¥êšEåµÌZº]YG81„hŒ€¡#kp¬Aà`× âßÙ»âƒ^A¨xví MÙžóa;X©!×#¨#¯cS{nt¼-EecÎḒكC1BAÎ u7ÄkG øîá&)Ð0#ïÈ®gPÐïôÉ w²Û8À+"×¥Sñ>dÿdô?…5.Ƨ(;IXö ?â/‚uÔø“Âb<:Ss’Gz}kE>xÅÁßÃ>0‚ÚcÊZêcÊ'Ø6vñÀëô¯ûK/ïëJ/<¢ÊTóœvüÿ•Uû‘f•ÏV¾øOãi©ÙÛÍ"DàÇ{bÞbžuãÇz‡ÇŸÄ+U*ÑcMv0ûb×1K&>jc N:€½òI®sÂÿ|OáÙšÍÄ ùfBPóÈ+ÓŒñ]Dÿ4ß Oh“ÉÐÝZ ‰ýOAƒE®.cÁ5 J†7únIòƒd©8Û8ðì¼sŒõ?Ÿ®1íüe£ø“ƺ(³Ô#’A:ºÇç$$) +`œcêE|’Ëq8zÐ玗è~¿Gˆ2Ü}û*Êílô{U[ê0ê1*ÓSxA&Öù„W¶ÊD*lဠy$F5-䉪ö6·¿D®§¾˜²¬Ê¨ç ß;‡¡ÆpMRÂ%SÀšÈ%™íµ\BÄCÂ6HcŒ”çæû¤ 5‹D³ŠÙµ1,‡už· Ø£ËÎLqÔòÄchéÒ¿A‹èÏÍ*ÓWæ‚¿õý™ÑCq{cu$°±&C´ØjraÈÄ›š3ÈÁ9Û€H;‡­‘¼ƒk)im$‘ˆÑoØ4êDœœœãv@9Ђ I!·…n`–HÅ„Œ8¿fkR›)+«´H3ÓnÜ$ºd i³½³É+Çêî9à€³ä0 ‰8žœk¾Çžì›rþ¿¯é‘æ}R-#•o Ž8Y´D2]DH$à“8'›¨ÞÄ5=bßJ· —i’G8ìÀú W±¤ æìEs©êìÃ.îz^˜íùW¡xöeñ÷Ä6MÐæH[hóîÀ0ÄC>;‡Lרü9ñ¿À†3XÏ=­÷Šå’0'iáØðH®¤7=Ê\ÇlÆPÏ<"HÎæ@‡÷I#$ãt‘Mû§Îa#Ë‹QGèM¬O ?³LP‡ó[ý*Ì .Ä” üý8äàÕ­BÎòÚæqa-Œç2ê:#ŠJÌ7I ä®w)#åþq¶™os3i§F‘­¤Î¥kº[V fPHì†÷à Õ;ðú,¯3ÝÿdE,ÙÖ¿5´åž@7Ç€Ã,òj±ö <î×þ¿¯_BĶp^Ê÷+$WÄüëS…rC°¡\Iàc§|a4Ë õ[·TŠÇT±ikÛW0ÜÂHL–.OÌIÉs*M%ÉÜ]ÂѼèÊ5]Ý™9ò˜3¦s»æ:žƒ•ùA£ýž÷jágÜ¥¢OfÞMÔ%Q@'ç6Ð)vf‰;¸Ê_×õéè-•õ±IQ-XyڣɾgM¥”޳´òqŒ¹&›,8žFC=”Í(†Ü˜®m”#½T" œc0ç6´íÚx~Ä’Á¨Û[ÇÛylG›Ó$oÁVù²:A&«Â_VY…œÒkVŠªÃ b¿B$q†l)` –ÚÃòú´Ùœ¢”›Zÿ_×c!nÿi½fûeß“$¨é§È¹B ¤y‘äðÇîÕ$—É WŽk7šÒH×qŒC—2an"' °]äƒótn2º^“.¿©—v:¬01 Îø/£$‚>l®àw÷+Ó©éM´1ÜÝA!W¾š#hâ“d7°P6FÕY–Æ@Äæ³èv'µý_ó÷íðîMV]_D´º»†îy%’¡˜#+€ËºE‘€E|é…n^ñÕ”eI[ƒîÅ~‹j×¶¶úa]$_ A¸‰,#'“ÂŒãúó_¡z—Âo Ë0²þð.Áœ[=°ŽTŒ,¼©Ôb]»S×ï6\W;©üð]ýÓÙG¦5ü‚6еµuiïàŽØrI>„ƒCmG NHø5üg/&ïu$wôϽR›áý™Cû™S¾GÒ¾û¿ýƒáõ¼®0nTº`ã§J¡­øBÚÀE ¸™îåÏ–²¶ Õ²n¾™¯¹´ÙÃ@:Í”wo©ÅÀayñ¼7] ˜î ׳ûíÏ7ý—t[«¡¨\hzÐŽ&´ƒSRÅÄJT±Âà³äþÜâ¥Lº™\~®‡Å–ÞÓ’ÆÐ^I{¦deš(­C¡Y_xî ‚;s×!ËáÛEŸ¶±efìè¼þù9Î?Ï_ª|=û(ê:¥¢<ú¨¾Í’m=bv”…E)°›ÉÉÙ½6ì„©fYuéf¼0¦ëxôüI å™”ÉÊü˜`sÔUó_SÎþÊ´¬ÙñÍ÷„eÔÚ;}'O¼{†#÷®é´ŒuÀÆ1êOcÚºý;¦ÇJ,öks5ºùfQGÆp=q‘Ϲî>ÆøEû>èÞ¿–öùÛÅèñ8†+h„ÀUÈmð³äÙ°:|½gþŸÞÞÉyýƒg}Wa„°Û¥½Ý¸;I$˰݀œ šŽg-Nê9liKSóïáÁýgÅz€²´·êw?é$¦E¼{€ŇN8Å~„ivZ_ƒ­llm¬£Ô.,°‚Ó+kwn‚(òw‡À@ppy9#$Vv¦[j1îYjRÛ†_23öKØÀU·!ºŸïŸR²7–Í`Ҥɒ G0_DÃÌ]¡Ší'Œñžs‚¢²½õg¯K ‘=:ÿ_ðÅÃmg«ÂàÄóÜ$2*踶¹L+à+‡\ªNy8,q_=ügüAžP·hf……é%ÃrÉ<öäžç5ô¥¼—ò)…ŸÎ†y6Çe«ÄÈH`ØL@ÜHÁcÏ<×Ï¿쟉tpmÍ¿³ãVˆÌ&PFxVúŸ©r•›G›6}GÔäÇÆ-÷±å«4ÿm1•ÛåXãäý21øõ«Oÿ)ÆXuh÷ÌpUÀU Ÿ©+ÎGCëJTg¨üÿúÕù¤­¡úòv>“²†ê{„Š6mN(ž@Öš˜i„‡ncn7µä‘йá釚ºUË“lñ¢Ég¬dÍó— ç¯$& Î3ŠÆ•¿µÖ[©äÄ{dýâ Ü$‰N’¹çoßôt¢ÏUšKÜÅ$!0Oò/Ƚƒ'RFIùz’GçþÄ¥mÏçÉRu_×õëoSfögÓd6‘Ý+¬¦Eû§’<¶ÈŠNz–»¯&²ntµŽÞòÉn>Áq42Òµóm›q›&688?t·#æK]`j;ímžKpf–Îý¶N‰åÕ}#qó;ÕsueزKä]SR²åÄŸbr…[¡\¹¾ÕçZ„oÄ0 ƒŒ#·×"¾òý¢~Úøñg»ÑD–ZÌR°û¢¡\—%c~„…RÜíø—ÄZ]柨Ke©ÛIk¨FvÉÊU˜úœ÷#÷ã©¢œ¾Ë>g1ºo™lÏFýžhMGá°`–Y&Ð.ŸuŰ‚¹FA SÁ 7 àp;½|?âXü_ñOÁûéK»ŠM:áqs§Ýöó0w.A ƒ€ÊCžy9ÕÆýG‚ÌÝû:ªëñÿ‚}ûn|7€ÚAâ+kQkX®íáˆ.׌màƒŒÿq¸ ù4êm©èÒS™-[r׃Í}ãoÛGñ/†ï4¨<&d¶½÷–sÜŠÝòÄyM³v*æ óšù’ÒÎââcö[i$gãœú R‚iêsf¥9©Òwî}»û |L·Ô¼}á[­a4íGO¹3À“€Ë5¹ŽL®à•rÜå~òà×Ñ:Õñ·¹kIxn]Ò$p\€ö—Yi1¹˜qÛ‡üÿ.{~oxáĽNaqá½SåFFšÒ'C°õ¸8=Æ~µÒë_¾%]JnWcïÚŸ/™æÔ®§¯*FWٹϘŸ‰§¤L‡ýjwêúÕu¾Ì¹Ú‘šˆ¬''kúg5V9®»  ƒæÇŸfæ´íõ›aò^ Ýf$yÿ>õ“µ0¦Œnè§ò ]ÿ¶Áví>AaüJpOéQ{%pð_¬M×<ñøÖÂ?„Ÿñ¤1•þQb”­Ðõ |cñ_…"†ÞÛÅ=ŒD쳺Ý<+’ Â8* Ú2@ì=+Ûü/ûw^éšrÙkzu–µl±„Xü¢ `0I=8ÀÁ(ãŠøûxúÒy€H8÷æ§•7sЧ˜×¥DôóÔû+Vý¼mVAý‹á‰¬­pêös^ù°²1mÀ.ÅÛ䤓\¥ÏíÓâk{„m'I°Óa@GÙÓÍhˆÏB!PÆ€=:šù€Î=Éïߥ4ÎXàu¨äKaË3ÄÉ[šÈôÿ‰ÿ´‹>,Z¥¶·t­lŒ²%¼"‰S``Šä(ÆqœÏZóûNæÎàH’°uàHÈ÷ü ª »{ÍM »—’8üj¬yò«9»É–.dšâcºG—¸.Npy?B?hFFGšÿÝ3îÕ!€¤ °(ÏïY»H`‰çšC€¨ <פÙü<Òüf·þ*¹SrT4zl, ‡=7zò+CRñ¦ƒðîÈiþˆO¨Ž&Õdl÷9ãÍyV«¬]j·rOw;Ï3’XÈÙ'<œÓБ»â?Ϫ–†Ö4°°^¸gŒž¹®v;9g!˜ˆ•¹ÜýOÐUIDg%²Ã¦úSÚëw_לÒ`\MµL™.rsÉïV63ó;¿n>•–²#(c!Ð)<}sZ–‰¢´ln/5|+T`I#p$È1žÞ™ˆÒ1æÐз»ÐÓe¼²¨Ö¥¶¥á%é·.Ü|ÂPØ>Ýø¨M·€b9]KÄSâ0ÛL…79+‘px88ì8ç'¶ø`ðDb¾ñ*Ëæ,–1Œ…a>{·$Ý3ÁÍmltF‡7ÛF†›¨ü7|-Þ©F ´R©ôÏî?úõ½‡~êŠL>"Õ´©H%~Ñj¬£Ðd6søzšÄ—Ãÿ ï,à{/ëvW%}¡¤üªÄœt‘²0’£ïŽn¯Â_jñ²hŸôg¹ù•aÕ`¸³WÁÀÚïÜÜG^zp¯},„¢¹”—Þ\?†—:^xKǶwSÄÀÇåÜ5¼ËÈÁã׌ƺ-ö¥ø±ðú!cªÞé™é¯9‚$ì:7¦F+É5O†úî•+ I-µh”%Ò^:œÆÌïÉÏË«jV äÜ4«Œ.l®3Ç­;§ Ú¯†jnë±úðÇö×ðÏŒâLÕeþÁ¸™fI¡Õe $%bºÆc°ù\éÈÀÆïíeñËÃÿuHÞrF¢¢}#SEbªÌ¬L,p8žF1ùª÷KrÙ+å‘ÎGV•߈5-sN°Ónu «3Nßöh'‘™"ÞAr«’q8öïÖyNøæ“å´–¥;yI%¸–y bORIÉþuö§ìá¦éþ)ñ}ÜŸeGDÓ­ç‘I@HódÎ2F6D2>c“Ò¾Bð¾uâ­vÓL±ˆË4Î#UÄœ I'Ðæ¿S~xB‡¾Ò<8‚{mjÊÜ ì¯gmò“Èäa”¯îq2{$V]‡u&ëËduZŽ¡Ÿw8³¸µÍÌÄ$êÊí]¦ä£váó),Àæ­D‡…W<”UÉm¡´œÛ5Ü:‹´±0´ÕIã$F@V!·c9Á,ÍR’)ímåQ,;ÚÓS—˽  *ä¸_,೜dÓZnsÊnz/ò"—vÁå$°¹ÄÚ(H’7bmä$s¹ðwIÔ‘F"Z¯‘y_iæe- bQ䉨ɏ™cèÌI`~ðƨws sË;K žZ­É1ÏÈÙJ‰@hÏ çï` ÌmA.nÝÐÉæ¼FO>Ú6ƒP,"üË·äìù†â6XC²Ô¨sJ-Ù¤Ö¨Ü]ÛÖë-Ò‚’þí•r…!ws’Ùù¯5ض¤Š|ÜŒÄòÛÄD 1BFÉUD+ÈfÁlÇ&³ÒñÛMÔlá1¤I#Ou °e”Ȳ†ûDDæ âP Þ7g©Æ*¼SÛýˆI²µŸËh’@ò[£—$…(xq甪¯Ê0¤ç%×AòËyi±ÝYÜ‹ˆ#ŽHwE#ÝX!xå ]âc¼ [1$´gî`“jýaûPÜÇ鑦b3dÊ¥”º7X\ð$týãU%òßO¶þÓx^þ}ñ¬ñÏå\„b¥|¹—å”í˜ ¸b>líêe†æÖêå§™æ˜\þòo³CûøÖEG´Â_ç\\X“ÇÍž*tØÙÊMÞÛµ†ÛP–ÛÈkÆI%1Ú_ºù‰þ´!¶¸ÉrÜ Œà›ß½ûÓj/j¨E½ÜM£ó%|_†^8Î<ÒòìfÒ­e‚8PNRF–ijù#vƒ ÃK¨¼îÝæu©omPY[Mz–¶Îò4PÙË)–äÆG—.wFN ’Hå]Í9£;]j\³d½6÷ ·ÒÍæF±;,WêF¸²w½ ç(ï&£lb‘Eýͬq‘k0û=òìæ`ÃïÈz ½sГjâùæþÎ;Uï—c,WìO—ŵvMƒÉ)ÆæbH?)În¡<©§Ì¦¡¤ ¢Án£ Ò…HddŒ–m6¬‰…IU–Ö,j²ÛÜjPA4Öz”á™~Å~|«ˆ8“1«. c€Hàdç8–=ÖîÞÚÖúy!ûPxÒÃUŒÌˆCn&P¤€ ÄŠÓF²G(’)F႘' c€Õ}ðÃÅ:k>ƒsësú~µ¯ÅÚ€!×ïŒyç¦>µ©Æ¿€ë—.xgÝÛÊo²9[¯êÐ1ó,dAžèßƨ½…ê±ýÑãO_óšî¥ø¯â»”+=ÃLœü¥Aù&©Ïã½Vv&kh¤cÉcÏ>žßΖÊÎ)­®×‚~AqÇZë.çÊÏ­BÓ•ûÍ·§P yÇ8Ž´ï²ó“ϵ:9¼ç ƒÍ~Ê ±'é[6¾ ñ ›àÒæØ‰×g¸êGò ,c"Ær}©²_íR ƒïÇ5Ó…^(“9Óä8ä…ÁÇ_z¯/¿ ´«‚ÎB?ÏÒ2Й<=áÍrÿw¨Û}à8.¤«¨ þ^µÅ,O. >qÇs^©kvº×ìõ%Œ¬­}áÝhªžIó¦TÈÀ‘&>œÕÿ xgHø{ Úx—ÄUÕÝÄIqa§±Îõ`]¸èAgÆÊ>øee¥i£]ñ\ßc²Aº+AÄ×àm^¸<ò}\gøïâµÇˆ!M7O‰4Ý/–+X8Ïl±ïŸ_ZÂñŸõ?ê/ss#0 ýÄ€=?*æ‘Z6ÞÈÙ=©ÑMæe #%°<áØÆOJ‘ttáî£ôà“T>Ñž¥ý2kKG²ÓïîR+½R=6#Öiâ‘” w¬ß4 EÉÙIÓ#Ï™wœvU$ûT«2J}†®ïÂß |ª]Ko¨üGÒ4ðˆ¬“nJÈHÉPL#tç¡®ïGø+ð¦çGYeøŸ§X!“ìSmHÜ Ùnü8\9Ü2AÆcŸÈôá—Ô•›’ûÑá¢} ?d‘À=Ûb-SH®–[rßNkê-3à·Àh#’âÚÝ´LCÙf˜ãqÜ’|ÈxP6óÔ|Ã<Ù³ðoìù£5¼òj–z¼R¹ŽKY¯„R@À¦NõVR§q€= ÁÇ=·FðÊå-=¤~óåè¼A¢¦ö#¾é9'üâ´m¼Sáˆð&ðÎàNxïÀüýnÕôÜöŸ³5³­ÜZž=³Æ{{¥•8Á*ê¬98=óœ À×ußÙ“Hž)ìlïõ˜ ¸’Ð[²J‡/·v«u^p;dprs¾ÄK£½Dxí·‰>Ln|1y-Ð]œ #×?h®ŸðVBPÕô¹ cYô'õÆqúæ«øÓÅ? fÖæ“Ã^ Ö¥Ó$ÁŽ+Ûõ‚HÎA(¬G@½NÞjš=ö­zía¦Ë1ùcŸhì3íþ5iß¡ÃVœiÚÒLôMGá?†¥†KÇs"ñ¶è›vk`õþïZ†áô}!@´Sy:ày¯ÀANÆÍ«–šDŽ¢KÝB;äý*ieYÊ„áXÿ2}j=GQšó÷އ€ý?N•rÏ” ᶨ8ž>¾ô½ Øú;ö0ñÆá¿ŒVVm¬sêMgo}x¬Ê“: … €Ä…È=Xg€Aý ‚Úæî]F–C*ݶëYØÈä²¾BrIù‚ŽŸw5øçáÛÉ,µk9âÄñȬ¬¼A¯Ø_ë–:Ö›¦^ ˆì!¿Ýÿeê0¯“‰|·7ÇØÉ*rwv-OªÊê¹Sqì7D¶³´‚+Ô[ ™!ŠVù™íÏIê÷‰mÉT2\}‰Ì£è®²LæÝ|ÛY~C‚S8É* ç ûÕé4ë?OŠ+YEgµUk •Y q‚I QŒà (À¨î4»m ${&ÑŒÌZIÓmÅ•Îa‚•<|Ã#¬šgÒÆ¤ew{·ý[—ôZ¥ÝÜéöiÑ$Ö4ìÏo. ÀnB1˜/ÍÈìIéX"ë:„W°ÂÂÐJu "VI~gˆ³²õPKH$|ÃQíOÔÅÚ÷§ý_"d†×PT²Ç{GNÔTÃ1a-µÉåWx_”œw$äêš}¾Ë+‚ÏSo-°ŒU$*>`¬He?Â3…$ŒûŠî+q4¶úùeK J*è¡òJàœn$‡ÁO_QvðŒö:c%Ž«6W)‰ìµcì#ÉPØ%r#ãŽ1ÍZ×dsÔåƒ÷çm¯ëñ1¯Váv²J©KiúÎ\CòIœnù'œc89‘ô¸žH,®LpDg™³¯ø¤˜)G`J‘‘‚ÇpçŽ,Þ c" ‡L!v¼3µZƒ½”¨|gœ¨!IO˜–²ÚÊÍq âI‘Úæ<ÏkrÌTA“£#'4_¸å–_×™RþÊ;i$—z>ÉRËSlÛÞª ÊI€¿9Ü;œŠâÅR²·•r°Ÿ3ìZ"»Lû~` ·$ôÎN R»gmÚ5¶æÄ¶j·6²?È@hòÞ[~ï’1œÄš½©Þ]Y…š[é¡¶Äb»²AshÛV@ÇÖ2v®ù¸\ hºfŽ”ãdŸOëúÜlpO%äHÎÑÞGw ûÁ Úª,á‚ì‘@ˆŽª‘óõ¥:|QEv³\¡¸µIUäòŒ3*…,ÃÂÈ ·' d’0-L¼2‹qewµ²‰¤µQ5‘åÔ†n„’à|ÅzuÈ4FÚ¼›®í|÷Œ¤‘Z]Р,î®UU—‰_‚S§ñw/ÑrIY¶S-gc[t´ŠÉ%òå–%w¶¹&¬‡&,l’Bò?wœí­¬[ÚèÓ¬ n¶²|òZyÓŸ3™2-îGÊ@T‡ä1z ÐC ·0,‘Ì—«˜äù|«‰qä±Ppb” òcä'‘òœóguhö€¤rœbºc5“I~ѤÊÒÛ®Xï$!ùI9¡9qÉühu“Àw‘gqÂhïtñþ‹&æe&E pÜ3Àãœ×.&*Tf¼™éå²°VÃOúµ_¼î*£¹ÉÀÿëš·~UÐý·KŸ@ǧK§_3mk)å™?Ó´·-hY]ù;z+gtê1X¾;ñ*øÂÚ§ˆPA=äp?•{e*ˆüæDTFÙΆ`Aúšè5;:Ñ/µxA´‚9£îÀ3E0&Vdy8ÆáòGËŒs_üQø·7‰¼vö2[E¦G¾Üµ®V>|8Ã*’sÐýzÝüçˆÄòÃÞÑíý_#Ç*­'Ï36Ce`H–Q,ƒ?$\óîz~_•Vmm³¶’;Ž[óÿ*¸Š2TƒAHû)8ª±Ì娿K‡.ì]$±É£ïgƒŸQJ±îÆð«ÛNìq’}¹4É+ˆÿ…¡ïþx§ý†gÆ"ŽÜfº ?Ã:Ý×ü{A!' vÓYü,ñ}üE·´iы̀=G^¼ô ,yËéó©ÉGsœ`TfÞ@0Ù#Ðâ½H|ºŒƒ­Y[Iß/#ëQÍà? i¹ûOˆ–äñÄ ’F;úÐ w<¼Ù‚~f õ ÿJ_±D1‡f>€tâ»É„lXlŠâèŒs¸('ñ—q¯iñ·ú&›`qûÂ[èÈ <Žj;ÿr~ùbqVK¼#"ã÷ ùÖ“ë—w@¬j tÂ(Ò«¸¹“>cïÉÉäf¥´´l¨ÂrÖ(¬ú}âºê5í·ô¨+¨z]ãý×5oÉEûÌì?*‰–ï‘ÝŽGåëSth©ÎÚ•×ËÒîCô‘©|ËöÏúL§?íš¶%•~ì1©ö\ÿ:GšåÉ‘ì£hü‡\V’Þä)öðAûTÀzï?ãC5Ó =ë‘ï!ÿ]¬y+“ü¨Â÷_ÇðªV%Ü¡Œ‘¾bçÜ’iÈŒä`‘ßnjÆÔÎJ(EŒ6zdÈs‘Óüâ¨GA«Mn?u#¢î 8«Å7ËŒ]Ì÷=sõªžDx?63Ú²§uéß"€¹§5tÁŽþè`cCÀôÏâjÓxÿÄw°5¢ê—{%„d|ó\ôöâ- Ž+½ð>i£Y¶¹ª¨x£ÿS u‘»qèüi€Û­óÁÞò¦(Ö"-$!°Ê#d1±åߨìk¿Ö.nã‚)çyVF²G@>Ÿ¥hkþ(ºñ6±surå‹‚AáFF…c;ÄÄ‚¤›†iìô/‰hÖÖƒDÓåŽ% ³¦ZRG,ç<œ¦3Àâ·m¾+hÄR÷ÂVŒÉUºóÜõú\ù^ g(û—Žõ®—Â>µñ}ÚÙÿhÙé×-Ê ÇØ¯ì§$ä`~T›¶¦Ô©Ê´¹#¹Ü¯‹þ^ óü5, x&° êN?§¿r9XgøYv34:¥£ù絇ëùuw±'ĈOk§Ùêp™gxŒpFAÛ¸Ç$€qÞ¹‘û-øââíímt…¹¸Wòü„¹MìÙ7d±$`yéÅO:ÙqÀb$£±4:'Âk”?ñ:ÔàbHùâSéõþŸ^µz?ü)¸`Æ3Äœ½©Î~ƒ5}û:øâÊûì“xkQ ' ‚ ç·óª7ß|e¦Ìñ\xgW·–2–HNâqÔàñì}(çR~§ˆÛìOÃ_…Á†ß:Ù¾@õëëŸÂ‘¾|+Ž3¿Çs9À­‘Ÿ>ã­q—_7É+%ÉiO·íôïí\íÿÅ/jJñÙE…»1m–±““üúå_Axö%žGD½ñ²],út6Ì&ÈÚ «0PHÏE$ôÏ5ê~ý•¾Ú—˜Cuâ™ãÚ­§ê’ý–hNÒX®>VÁè zT{^ˆìŽQ]®iè…¬|=¯xÃQKxÅÍýܹ+ *Ò»zàsÒ½ûá—ìI®ë³Ã6¹qm¢Ä&Ö×lLïÓ!ÎxÏ|f¾ÅѼ/áíìtíÒkHªm–%‡Q¶lÊX`¹U nÈc•Âohï¤ÝÍs*ßi– ·0k2­³[¦èÉo1¶§;Ë•^ßœRæoFwG.¥I)5sÂõ/Ùáö£áè4ët¾°ÕþÎåcº‘L¥þB> H£seT‚?‹5ðů‡^8Ô<=$ÑÍqbÁd1€ÄÆ}@a‘_U|qý´ôë}hêá1>£ª&ñkÀ@xÜT© °Ú0¸ +âë¹g¾º–{‰{‰Yä‘‹3“œ±'’NI$ûÕÅ4yùL;÷)-I´+W¼Ôàxùõï_r~É´Íλ«ÅàMföÒ[e¸I}U£FÛyÆv¨Úqü%@9¾)‚Ú]7MyR6/(Ùæm8PzàôÉΫéZ¤ú>¥m{k+Ás¬‘É*ÊÀ‚ ŽAÁÈ5M\óðõå…jÝOØ¿‚ÐÇg%´úJ’ÄtËÜ5­Á(à‚OÊ`x$tàž÷-õ³žk\>™¨¸ öA‹Ø·ÌÀ`8m¬p¸8,Iàó‚ߤñïÃ3Z±¹atд…¶¢¥í~ѱÕÂÉ·1nV ©’ì`W¤ÁöèФMmŽÚý„Ö’FI8ŠòŠC6ŸN¬5¹÷+‘ÁK£þ¿­ÈáDÓµX~Äëa|’+µ¤ÅšÞxÚHX˜ŽHœ‚™Çp{è2=µÄ¿`vÑe¹gW†ê Ã<žQÀVÆÞv“ާ¥dË{ki¥–4‡0©†;£ö›À£d8öÉ$¼Ý¿ÖÚ­Þæêâà ä«çZΛhné‘ü,PAㆬŒªs¹-?RŽ¡=ÞŽóÏo<ú;M4`8{V d_ºeÈÁ*AûÀŽ2i·i<ßfÔõ4å&PÐÆ×U- ¨à¼ýÂÈàã5£w{6Ÿel÷V±A(Ñ.4Õg´@$ÈÜ™ùGÌ~ïLsšÍYàµõ ׸Ò≟YÓdA3‹–R1ÕAÉ8 g#^eÓ“·5¾}ÿ¯é>­sw¥;Oukâ+AjÒy¤,wHBA $¦ NkWEÕm®{ >ùµwóö=¾¡þ²5tNÎ Æp2§iÆ2*¤ú,ZÓ\Ku¦ÛÜCNŸÚ:{„˜à2€p§å!8Û€k6[(5i‘m¶ë¶X€‹jÞF‚nvøÞOy'¹*éšÊ*‘iïø_q­ož ¼V³I¦ïii:ŒLbº;Ѐ ?í… ÛÖL‘ i–xç—ÃWñ¢?—u2µœ *ãqÉ!`2FâMiéÈ5›!¾¡¿ \^ #ý›ˆ#å·±KyeÖ—,ÑL»L 5¼êü+ ž3÷é«}¡)Ó%ò^ i C.n,$jî„–rKníÓ ˆµ( ¶XåXb{¡,¢ÿu͵ÙÛ‡Y Ü )!Ë0c‚Yå7H¾»’Þ…×..[ÙaºóŸE†æÜJÎíͱ—§ÌÌI2ǚǴÃÉpÉ%¼Îì±»Ø#=”±¹ ¤ìó!Â\vªƒò½:ÔÜO2[,ÛÞÃ:Ú]LË*]íîA¡œøl±¤–êïe°†SŠ)bRÊ!»]¡Ø†ÜBL 'w?pƒI¾åB·‰©|V[[e¶Ù 7ŒñÚZÉp²ZüÌ ¸Qû¶bB¨b6p#À¥Ñ¯c¾Õm[Pie¹/‹ î±On®±³6íÀJ˜òǪ·Ìq—¦A2JªYÄQ’¯5O™lX²7ú:r€ 6ÌÚ°Óôø²GEäµ³šçÎciUZŒá§Fb3íÒû:q^ëÔ‚ÇSŽm@½´ÓË8d:žžÞ\À L‰mÏß ªŽ¤kzÞI °’êS ÜPD¯-þ¦ UÕIÚñ¬v6@ñŒP¤pÝÞù[îmµ£HeM·p²íÁLU8là•j}³ÅxÈë$º­ÐßÛl3 ûw9*Ðào Ê0 ;¨©w¹•V¥eoëÔª-mÅËÝÇ/Ú•¤–'Ôtõ1ÏOõÈ£–=pO#ñçþ$Dux†i$ŽîŒÏ匠 _Ìyñ8oÞ,Û‰ÁèTcdÜXZ^E¨´K¨0–"×V™†è1ã|cïd …é®hxŽ-.ëÂÚ«ÛÚ¥Ë>Ÿ$ÚZn åD±Á%O* 9<äŠÆiJ-3ÔÃ7 –¶ºþ¿¯¸ù^[é,¢G¸È‡r”àç±Ï^ݽ)‡Vº˜™ ,_æ$÷Í>E*…¸Ê“€pG3øãõ«íi¢LÆHüCkmË‘¹hÁè§ÇJü¦))4ûŸ¹J^ìYì³YGkc~ÓôÉdv,öñ´ÖΦ3Ÿ” Œ³žG#“_|_ø©øOÅrÏ{K‰d–»q˜¤]ÌÓÓ‚åìkôF6r±…&Э‹ºá–k)N"PGK/Ír9çŸñ‚|?­øzíõ[8ìaxw}½f¶f!ñ€A#†Áã×ëkT;bèÇÉÙéæ~vXx²æÖÝmocp( Žà`úB;SoÃPRÑÝ xIƒùŒŒ}M}“âÿÙ'Á7 =ê}³A¶yEqjþ|’ãæ˜ÀÚxbsØô®:ëöû>.ˆ|Ý3ìæayimæŽ@ÊïbK ôïž/›Èñ¼—+±ò¤ž.IŠX\r~IöôÍB<;y’&o÷FyõRþÃr¤‹p|F.ôÆŸí6¾l±Ÿ,°ßàpX($Ôðqƒqÿag‚úÜIâ5»²–Rqgónrp\nèÉ9㌊¾wµŽoìÊuøŸ%¦‰|¤m†Bx=J™-5%ÏRé_]Gûi¹OϬéMcse£Ç/?)'qÃôzrG5§iûxJÅ~Ò·7zý°ä¬7 ’… ä’¡ðBð3רæ—;.Tä“ýO"¿Õ“„¿HöñÄÊ?­y¨Êͺ»Ð1˜úàòkî­öZøuæ/I:­©ŽC¶iäŠ÷>d…HMÀp¨ ¦IãcDø/á=21i†´íV/*(䳚%]A ò³†ä1œ”9;J9åØÚMß,¤~{ǧKt@ó®g'œÇz烎ÀŸÂº+„ž&¾ÛäxgV>½ÄfÉáFâ1Éé“Í~‡XèÚe¼ºv›e¦j– $ß§K†âG&$’YFYIÀ<ÖŒ&@³Ú[Ì%ŠL»h:ª¾SH@I=ðþ¿y2jyÙÛ žš^óþ¿¯—™ù]â-:ëE»{Yí~Í"œÙ-‘ÔpAc±ô¬›få ÅŠ€ëŒó__~Öß­l/µcÚ¥ì¦&µš0žTÀ Èø+Á8eƾ?ž†BŒ`Hçµi̬ÏÅaþ­Q5¬O­uoÙûÂzgÃÄö7­ÀÔ'·ò>Ø›a¹…ÖàïB“û¥ÈÝòœŒJÔ´øsáöÓîÞ[%FLnI¶àFG|€W¾7qŠàþ|N¿¹ðºø"êáÞÆÅ¿´W‘T•Yô&RÝ:îõ5ê²C;Ù0¶I),¨'Ü!æ¾9­Rž%F-¥c÷~Ãa1X VäÛû¶ÐæáöŠyû õ<~´äøq¤ÎDPi«=ćË<Æ™ˆ Î{’+¤CÀé€*dÔ"Ó¡–i#20‚…à‚AÁãƒ_9U~eï³î¥—a…¹u§ÃMXõ«!‘w²=9ÏO΃ð›IŸ=ÊÎS×µvrݹä—ÊX‘™™R<…PI yÀÏ'ëNPIÇLúñô­>½ˆRÒlÉå8GÞ£¹¡ðWJG!¿¹2„ÌÈ 1c€8èWaüMjø[öWÕ¼j—Si·Ð‹[fXæw¶Þë¹$`B*’Ty|žÀƒÍt–Ö·±.Í)ù†îH ó(üˆâ½ãà#ZØøU»¹{Û@nö‹Ë_š5"!dB œî8Èãœq^æYŒ¯[ìç+£ås¬›G*¤”&ý‰ü[8wÑõëûWpŠ 9[æ*R«×ñÞ¹I¿e/ˆ …‹Ã6sOµ\ڥʤÊ+Uœ¸uùˆÇ'œŽ>øžÊÊöê+Év_ù36¡¦«CwoÈvLɓޣƒŠÔ½T¾Š åˆêv6öèÑ\Y‚·¶ÇìÏ!ˆÊŒ|ØÙŒšû„ßsòz˜ 1÷m¿áý|Ì-Gà·Š¬%ÏàíQ'ÜÊ#EbÇh$6F=z\gˆ¼9yáé_é·VXGsCŒãŒÇf¿YnVMON¹µÔ,âñm¼s–Yìœ ˆ—+d9lrAôô¯…?lÏŠÓø·ÄöþK”¿ƒK‘¤šåà1Íç’À£†áO ÔtÅT[¾ç•‹ÁÒ¥Kiý[žá= ëZÞvB¿3¹è«Îjß‹¼Aý£:[[å,í×b"sœN?>jÌÓaè oâç—aÁüŸçWµ‡Úǃ<-£xŠþÑ H—Ž)Õ•™6©Bx ­¸`œúŒìÝŸ…9T»CµÓî%ˬ ñF¥˜¨'ž >>¾õ2Í@²EÈà1Ånx[Äï£Yk6FÌ]G©Z o›ïG‰c8> Æâk ð¯ÂxÇD:¾“£}¿O h²e ´r bpzñI´µ*•×—$ÎÛZÌN×Ùœƒ¤3`Ç&à}Á®ŸXð£¢lþÒе oùj#,§€Fb:ÇTyýÍÚ‡é¶@P©<~¾´s&\°õ`õG_àß?ø}¼:^³8µ¶ehíçD]¸À»8ãÜçÙ4ŸÛÏÄ4~,ð†“¯Y8 ÑÛ—µ—;_çÆBžÇ®kçC§jö 0¤ˆý×L2°í‚?¡4°êó[±høìËÎ}ø¢É›¬V*šK™è}{¤þÝ^¸D‡Sðæ¦–cì’˜îÊ .c Í´à(©#Ò¬¿l/„º¼VÑø‚[=-’E’ÇYÓ¦y‘'ʯp †&HääŒqð$ZÖ(çK ã£ÛV•²ø*ì+^Zdà€cñã½ (èYwnk;~i?´/»ý:šö™©ÁͶZ¡ò'ˆo +¨SБÏlÖ´Ÿ¼¨:O‰ô RÕHu‚mN [‹2UrѶà‚X`ñü<çà‹/|>¿ ¿ÅrÙÉÚ±c¾ ï‘Àô­¾xâ"ËñÕ_Ÿ•­äôÁÇz^Í3ª½HýŸÄû¸üUðEæšïsã U²HÝÖáõmïa`®Cu &>\g“ÐÈÅ{¯‰Þ KÔ¼ŸÆ^×á†é$WºÕ †ì‚êFrç–Ën #œ|4> x@óÿ Näs„OáÿÄ Í»øká+"7xÂÖuà =@ät?¥O³-g5"Ý¢}ï~Ò¿ dÓ yüOg{n–Þ\±N“Íx§÷xòäT9a†à•/ ÜgÎõÛ_Àa–ÜÙjž$ˆ*ýžèB–÷À6CHO#q;O€ |y¡øVË;5I.Hî¨@'üÿJɹ—GˆŸ³C#·«œ~˜÷ªä[˜¼âº‹„VŒú Æ¿·‰õës¢Yimak¨Nï5ì KÁU<2Ê{æ¼Æ¿üWñQ7~#Ö®õ)0¬Òˆ1€Ê£Ž€ È–ãqÂ"F:ý8«zO‡/õ«¸­­­¦¸šB¢©É=°9'ðš²<éâ1Œ„¶FO¯ÿ_ó®ÿá?Áýo⎴–:E©”¨ó%œà*/BA$dŒôÏ¥{oŸاÄôi{âUTJ¥×N„w «ƒ‚ØÀÜ;€E}gðëáÝ—ƒÄ6šVºq‰”ÿgê*É"]ÀIÄa»o#iꢢRjÉŽ/SýåW±æ^;ø5á=;àÿ…mVKXÚú# Šé¦òãÝ"¶wp² 0  ¤•Q_œ÷P=¥Ü±6#lt¾+õoâN»aáÏ ë_j¸,°i³4š.¢Þ|)v²Ð¹ùXõÀUé_”ú¥ßÛõ+‹‚2ÈÎ@éבþJ#~¦™­:p„\™ö—ìâ‰Ã>)Ò忆;d– ÆìÎñ"H ûËÀApxÝ»\ê0[éÛ[ùËh—eUô›Ã¾Õ†Sr+¨À8pA€yøóþ ùg,WÚüÂKmhÖ·RK•,wÄÀ$‘Œë_^Üjö¶1=Œ‹$Ϊ—¬eãqˆö—' vðåm\Ô6zØÉцŸ×õÿ>K¥ÚÍ¡uhVÒôm&%8ÿ‡¡+œu9éDóßi7QÉ´ú+HÍeÒe©%3¸`ìÜõZ]*çNÑÞk[)“y6æû¢à“!ÔùrƒÑ‰+yÏ#ƒUoödè·‰£$­*5ÜfkI±('k …S¿8\p>\g™v=H¹9r½oßúÿ2ý–±e£D‹2É †Œ<ûK¢|²v·%p}ÐèG¥¹K`ëkw7†Ä±(Ú¸šÍ¾R£ 0íaŽKR^ê²édVövÿÙqIåKöÍâ{C”\«7@3»¦pYš˜úµÞ‰t–rÝ¥±’9s Ò¬äϘ1 ¨ÏE%p[8Æ)6¶4…'«Šü{}ÿ©zêÚA ¼ÒdÓæ[›Í‹D7oÎcl•8*aëËl¬á½‚ÎKw¥²Æu;)0 cl:gr¬ppàƒ‘’rß2-:ñæ– g–În-åehÛæû¥¸ùH#½=-Ù¤‹RxM” H‹{¤6UŒàÊ'¨ –ÃÆ[#;µtþ¿®¿#M&»–Ý-­5ËÉ–ò„»ÈW]ì˜'ËÎìyÀêLóYÍ3›T¸†êÅÞU[-N2²ó))É'nâ0 ªƒÁ<ë{¨iÅX£2뺰‰NéT‚@ÚP g<œ ÐÞEªi^{I‰ì–E–Yú¦É˜9_”€yÀ$cŠqjÒKúþ½ ‹®Eio$(H»’Þ&û´Û­†<¢TJÃ$Wžœz¨e3YùÖÖðǦ^KrZKkü¼!–L˜[® ùxë£u4E¥ô)nñ2úB—#Àì|ÎTa—*^iòiª$ŠÚÒVxeec¢kH 2|¶'Ÿ¾rª{Ÿ½Œ ælÙBœ^¯úþ¿áÊ—‚ëJt1Å}¢+,¬‘5Õˆ>cn Ù œp¸<O%™4ÈÄ—&m‰Òo:Ú6’ÚwhÓs0ÆqŒ#sÍUÓô©4›4‹ûQm%pñIaª?›˜¹ò§#ž£qÎ^m(,š%Ë…d7erØa„l‚éÇÞ'“f’„eð»ÿ_×r+Íú{º^@,Ý#–¥µÄ¶À“XñòŒFá‚A5ç•Ë$A4‘–™ô¹‰2(|ŸõlI\Aà稫S^„½yg¶>/u¿íP=É%Á$Œ0ÙÂqÂòÄ Ï½¹6—pm´þÉó”:ù çXKµ¢bYB±9bvƒœœà­°{4ß-Š‘èÎ’˜g/›,±%µÂ³ÚHØŸ+&D§‚W¯CÐ.¥y „ÖW q(i­•ËSÌ1†[{„Î~Y²B(ÿhc8Ö³…-™nåƒûI•Š"d³˜yjùWqˆd’Ø ·5—©%¦žZVIZÙ§ÏóÙOåïÉ“ø3åŒ ª{)ZËCHÏž¢æWCtûÁ¨'úa¸¹‘,—5ŽöÛˆIÜ»¶º…i>r[ãghà¼[‰×Wqˆg™ —ÖèÆ;‚ñÄ1,e„ˆÅ|Îp£$e› ’â?XŠÊÑK„Uhìžé`–Èìœ+A6ìŒc?ÃÃŽ•%Ñž÷OžxäŸí!¥Q¶_Þ$ŠÓ/úE±lUã1ËÿvLŒ­K|»´U·ŠgŠÞÚh–Ñ$xWû>þ\ÛžKH"—æU'dŸ. 9'ËñsË’öÕ-$·šæk6IÚÆã"úUŒ’­¸‰QLr|ÎH<¯Jdz|±<Ë CÜ´ËÀC%Œ¥„ƒË1€^2¢EUpƒ—®nI^d²½¸2XÞ†,±œL‡ï–ÏG-4!ûïNš’=Ü—~u´Þ|ñÚÛ‰DÑDaÔF0»J3É_”ÿ{«½«]µÔ‘ݰ€3 Ô´Ø„SD u pNA$€‡æã‹Úµ³^Ý5«´ú½Û³¸YÁŠú%wÎèÛå2)óóóÎ:¶EVµœùQY.ˆ!XßÚá/#q°‘4d‚Ê n{Œ¶NSGE«hõþ¿¯ó>N¹‹ "# @=OÃ5 ¿õ‰­â’7c¨e;{ÇjÖñM»YøƒV…œÈÑÝH…š/(± rJ‘òôÿs@äHÄl“h"3Á ÔàU†£¶kUߦݽ¬P5•ØÍ”ªD@*6p3¸Žp£$Ö\Z…å¤ ˆ-¬„3yšeûcp +|²í= Ø9"åÜóÛ!f´·Šá z~©–w© ²|ÇË d·Fé_«§¡øL©ûÉ»]ÿ§êhX,ZmµÈ¹It(ƒ3EfkbI#2ŒŠI'*$œñŒfÚ,%ªÜ,BÃÌcJÁD¶Í‰‚PnÀ;YsŒFM-´¨–²@–×:#¶2Ó1žÍÇ– dò$“ÁsÇJšXÞÊ;™åCWÌ:Ëa/Í!éèX…ëŒv Å;½ÑÖ\ݯëA \Âú¤“5„· ‘­æ– ‹rJ(Dõû|J½ ö„±_:bPÒ±Ôt¶PŒ¸•“ÍCÄ’¼0<Žª1‹Om…q)Õ þÆo6=Ú…‹á%%ã]²+€TÀ3Yšˆ¸ko–ÚX­ŒO(Ô43“"¼8%“v@;Î dœz;[s>hì´þ¶þ¾â{kiíÜÆc¼UK]é,Sæ®íÊNy+žAçv¤Mý¯p·Î=QÒpæÚCmu)€S9Q'@OQˆúåš™ŸUÒã™!‹W´ƒ÷±Üé¬!¸ˆ—•Ètݵså œt9æå‘ž{8Q=}í®ŠïŒ'€«Ç€©.O•Œ2Ä/ –ô‹ïý]ðYî'p5v[wÜl:‚¸Yˆ}Ó‚ÀAo— $Šž{Hn|ðæ«&‰¬Ú^Äpñ8nüúƒìyõ­®»m6€¹¯7Áècá× sþðîkãÀ6°>œý+é?†j´ë¯4µÌW2ÛMvP¨Ñ‘ÿ}HÐsÍ|Þ}AJš¬·GÖð;’½Lž’Õz£­=ùÿ?ãW¬#µy—›¤J†,ù!~^ÙÁÈÎ;~Q²G#÷iü$0 òÔ÷Ë5jXØ9ÁŸ¦ ëëP ÂŒcŒtõ=*xÓÌR¹ôôæ¡=GÒÂÚ^ù<ó/›¹FÖÁ ` {àqÆ+Þ~ÎÚw„¯n¤žþÎu ûE²†‰˜Ã€rN2OÝî9Î1áî–ðßÜ Gßmæ=BuŽ9Ÿ­{ÇÁ•x-H½¼Òç‘î$ª3Á*…eŒ`m;Áþ¾%\ض×cåx†VÀÛ̓º䚘¶ŠY$šF]oL}¦%€F  ì$qÓ5FÆÔÉêPI1Wˆ,z¶ŸÙäaåmÇ“ÃîàV½šñ’YžÞäE#»ÑäVÏÏ. Ф+ØÊ8ÇÌ9u¬ëªiSÜÅjÞ]¹Syb<‹€@B°<áÎà$dâ¿AQº? Og.ý?¯éziñwÅïðûÀºžªqnñ…D½ÓÄÂFY £'‘ó†©à_šçP¹ñ7‰nõ;é^iî&3Í,‡q$’I'¿¦kê¯Û‡âTWV°xvÒhäWÏp efF Á’;KŽ:c#ò“}M–LÒqšÒ n|ži]ÎJ›èvß| ÿ¾-èÚ<€‹ .®›q`æú‘ÀË W³~Ù¾$¾´“Hð]­Ã>…o¼0ÉÖb„;vñ‘œc$šë?a¿ Zé^Õ¼C=½¥Åþ£w¤1_ÆÊ†%š6m¯‚¹b†ã÷G=FxßÛ8õߊºF§-áÕdŠ56Ó6ð»Âì(rNÒ À#wvF°£ìpŽOv|çá}>ûR×tÛ[…­Íäék­ªd;9=ˆççµ~ øáí‡Ã_iZ’ï§$ƒÍ+,ö·/æ"´ŽÙÀÝ´rœø¯Î_éðxfKGŽÜ$Ò}–ú#ÃFcx·œ©ÈÉ$pAx5úð‡Çÿð²|¥k–é=– fh®¦…¼ëspAó×øK‚²c︆îV_MR›‹øŽ¢ßë«2Ý,“ì ¾ïOh³¸l?/ü§vFp§ûíÐñº·ìÛàÏ_7›á›-þd›®ô‰R4`UÜïˆ0!†Ð0#Ö»í1ÒëL¶ºh D›nô9˜ÀÁ‚b9<œ Ì9ùW­Z²‹‰šâ `[¹½¹ònme¬GnàcšÎÉžüùõÕ^סòŸÿb§X®'ð^©¤‹¹ÿ³gSæ» •à†<€:ޝ˜üQàÍgA¼kkÔ¼Ó®Píòn÷l<ñµŸæM~ŸêZd—ú›^ÈÒN‘Ž ›­õ+ $2pNvœ†žõÖh“üKøN¾f‹}s«2H[f‰±À Žç‘ês^ËáoÛ¿Qµ¶’ׯ¶½¸t1ÿhé¬`¹@HÄ ÀW¨=G0Ô»ž…8áenfÑáÚ/Àë²O¯†oË[€fV‡ËhÁäd0ö8úf»O~ÇÞ9Õà3ÜA ¤1JÑN“M™a*HpÈ9ÈÚx#=8=¾Šðÿí›ðã\ÞºÝÍý³ žMÔ–~LÑŒ6Ah™‰°=FqÓ¥t·_´'É5Spž)²Ôl¼ù 76’5ݺ36Õ¶îO@1Óï¹¾d{˜|& »]?Ÿõúwàߨ‡D±K{½cUºÕí=Ò&—¶ž,8Ra’>eçär{{¯ƒ¾xWáÕ¡ƒDÒ-/&‰¤œ)ŠùI o$9 9ÁÈ<, ¹»ñ.ƒ«Æ¨®—0ß%­ü)’WqÉå°Pnùy`ñOí9ð«O¶ â{-e»£ŠÖ){}È@!‘6±\ŒŽÙÎ9j7:%ìhY+%ý]@¼³‹PµbIªÛZÛ&ÖL¥ô_4ƒ*Ãi c$© N2 ªQêv¦:…í½åµ³¬®š„ÞDö ˆÝ˜;$®6!Tüøéón? @n-ü9¡Þø… ~îûX“È•1!‰‰`ó`œõóOÄŽ~5ø®ÈšÖ¨æÊ3û»HFØÀéÏ$¶?Ú'8À&ŽFÞ¤ÕÌpô Ô]û[¡éÿµWí)oñ<%áë©ï´KL µ+¤Q=Ã~@ÃAÆr9*9=OÍÖ2]Α ±é×ÒŸ£É.ĘñŽÙïÍ}aû"þÍÿð”k‘kºå¼/il{}>ï*/Ûx]œíÉÛÉÁü4ºZ#æ¯WSš[ëû3|7»ð?€tý:æÊ»Ô÷\]Úê ðK°˜ŒmmÉùNb77Ê1“ìZhKäM‚<Ù,$ÚFªxÄ.FÆb:«Þ˜n!KÈÆŸŸQ[y÷ Ù‚M 4Sqòž2ÏsÍËu¿B‘Kt·©vÚÌ^T±¾ÉN›‡ gßc5‡Sí#RQŽŸÖÿ×ÞV½-Ò]>8a‰+dêñä Ë©Ù1'$c†cžOëVÞUÑ£‰o'û´²kªÄ’Â˶6(åàv³mŽ Í-Ü×ÑH •”¬Vþo—«Â²BŽdä Äe·çŒä‘ˆuM¼‹§ºk62’§ÄÖ²~è (<ŽAçwPqÅ6»¨¥hÏüÊ;àÓ ¸o.5Ä îÜe±pªÀ‚W d299À¡Óž8µ¸,à»]Ëpñý†÷3Ú̆LN%ÏÊÎN4ÝMÏIXÒ'°±v‘’Ë=”ÄJ»8’78Áà‹úT-¥ØÅ út1E=Ð c©¦mäݱˆÀ錶ÆÈ5líº„º¿ëÏúì.§¥Å¤ÄòA2ÚK-²+K#´¶F|¶bBœn Ã%ºU})?³Òi•î|/30B ¶“†2|£và2 ïœTËmmf©h](ÏFºEë Ÿ ~ãŽTaÉ=þè˜Xj+gmK¦Q•¨J¯a*4¸FÀc?0ÆÝ£$ÓµÞì9 Z9! y§ñ“ŒgœiC2[Í ¤–“iÎûãŽÂíÍÅ£±(ÊDåGÌÄ…Ç$†Æ*-Ri-nw1¤Îªéi~álט˜ä#Ÿ,2pAÀ$s6GGµ|Ü–ÜÏÓ ž+{U´¸¶)Ó¯ÉYNco0Úç·@y\‘ŒºÎÊkeµiLmi!”Åwo¹cgµÔyHPÌØ$†#&[ûÞ´ÿ³,—!ž(ôËõÚñ)I‡ú<›rFP`’WŒmÉÈmÌ_Z˜—RžòèD¢ÚÖâQͺ‘$›~o¼¹ ¤prM$…97ý~?×ÞCäö7—7b9eŠ4ç—ObU@¹6å‰À﹎6çS¶uí”Å™ÒÞÖ@dˆ²nÓæ AƒºÄ ¡@Ý5ºU˘¤¾¸Ü¯<æ ]f¾€*Oi¹†Ó2üÈW Kðî^•n{õ†½‚èZÁ>¥nŒaŸÎ Ÿ6ܸt;nnb3œ’Ý™¥¹å3§–h&û-ØµÄ {p "2«Ep(I‰>ùÜ2ÌQ³Wïlïõk…³wk‹€%ŠÊÖð4w ~ô"E"ãÍ^íàc^ O¥Akž›˜E¥Ë¼Q¬ŒóÙ^3N(1“TKŸ"+ðfWûf“2E:xA2G»i ÇŒ®ÓÉ保jñj‘ZÙ‚òæKqE´¹*Æ pÜÌ„œ“ÌÜáôV’åëø_"ê[Mª]ù72*´WÃ$ì+ʱ;D¬ª7Áp¼Ž9¤Óî„WL×W:<çÉa|¦H¤!cá]¹D!‰¼/Èk$ù±]ý™î%µR ¥ž»+ òÞLÄãʰ$æ5®tÉ4›»H` ¦i$KY”ÏnÇ;dùJOü³À8Á=Z×TME«Kúþ¾~¦dM$„Í¥!…äû=ê‰lä e%Q÷t$äW;‡€zY§“GÛqn©§ÙI>\` ùXeBñŽ™Íf½ä6z[i÷&;i.-cm®$3Y1*ˆ0ØÊŒ’ 8’Y‰ÅNë.™jûÄ^2L„mm¥ÚäÛœ€ ¯`ÓÛCžkÚ%u§çý|Ê÷z¤ÞDI1NyfuÜ_N¸b«¸çœ9ÉÈvqÀ×ʵΎlï|:]. "Âò®Êð2iFð'$61ÀÀ澸Ä6 ݪh§t†KVígä`36;KmcÐñœ|•û_k‚âÛÉ ½å„ØM/Øî>hÕ0ªÈÝHÌ„gp1ÇI–èŠêÔ$”lX|ǰ¯jø!}"í G( cGPà?ʼYÏ8ü1^Õð>•zäpò(Éäý yyÕ¾§+˜ðRÛ·gù¦¸¦sÇËÔÓäûCÂþK„TÃHÎàX):üßäš‹i#…ç¯Oz™õ+‹ks¢<Ÿ¼Ú@Ü¥XG^z1ƒŠüÊšÔþ•žÚ ½É>õ0YeP‘98SŒ€OãÓ§G®zÈò=þ¿Î¥[ϱƒ(ÄËÊÈ20݈ǧ1ø¶ØfœÄŒܖ8rzãñö¯§>Ï.‘ð¢Ä½Äšds<…nB‰ãœaqÀãÀö¯š£¸72¼­¡f,QrsÀôžÜæ¾£ðÌh~Ó%x/ôèM´R}ºÑÄð°h£%š3Ó yÀ~ñíõy ýõIyÅýšœ_ëúÔè,¡Š+‹‹¬ïás£¦ß1‹\cÌLãÏúÅÎåà)Åssì¢8uW´2nšmo­ða©ÁÎâAã𤓉Á® ³¬+ªGµ–çM-©Ä䌀p…b'8À¬xŽmÁúÞ¥w5ž£v× oyÛ[… ÈTÛÜ„uäñÏÜ#òº’µåk¿ëúè~p|yñMÏ‹þ!ßÝ\O%Á´jò€j 62 ¶N;ž™®.åÉH RyÇãþsNÖ§7ºô²³¼¥˜12œ±8²xçq'êkwáÖÿ oÄÏi[ÍB9àO ?oh£áë¿o‰~lý ðÌ0|ø¦Cyxöé\RMc©Û)ŠYÚE’UV8 –.2¤Ÿa“‡¼)ªêŸ>2%Ìs›mG\¼0Gp~ag™FdôHÉ<ôÚzq©ÿm>›àx4{˜nu‡´›l¨ª’d²È0Iáz…ïòòXùçìCð÷ÎÔuoÝÉim  6OneˆÈΞi$&#p„ßëˆÚN17êzõ"êÕ§C¢0ÿm/ #Äú%ÐÓ­lÖ"=Úy&)+(ú„Ø3ù8õØ^æâMźnnb6·:uÔrÛÅZxåV„©&N;sÛoí›ouªëÓΟ¢È$†k0h$P ‘Œä0:ôôOÙƒJ’Ã\øžl%¹Š CJµY­¾eýÒ\©Þ™ÃŽzçœMÚåNƤ¡¿²bº°‚æX]° 6FÛ¶"ã zeXc8ùºTóé0]Ë-ÝÌ_ª¢k2ÑÝÁòH¤°6OÝã®p giß\*Þ!‘!¾©¤ÈbFÈIûÄä 1³9© Þ\ÁvìbÔ Ž4s{¥€·[‚6C¦à¾ÅIumeƤ_ÆJºt,Ÿ,ª›C,1êv¯‹˜~c…1†ç^ñ·ìmk¬G{wàË·ŠX™h€ËE•L€IÜ>fbHzmfȯœ|Kð/Ä^ó^ãHº€B[ÌxGœ‰‚À– ’£åb½+ôšm þì"» XÇå?•p>Íw²FpHPy$ýÓ€¤â¢Ô´Yîîž ¯#Ö åWo‘{ "¯–FÒê7O7n©÷–¨º˜l=ovV¹ù£êþ%ðËľö`‹ÉX°üW¨ïÔ ém¾1%ÛüIám;Wë’üuåqïÎ?:û·]øáßÜÅ«¤Yë8IR”A~ªdÁ!У;nÝòçw˜ë±ß‡µ}Nåto\@S™,/Õ%š³wðJä‘ǦXõÑMöQ—Èf"ÚÙŽx¹üqZ¾ðµâËøm,¬¥žYN~ñô¿…}Ïá?ØçÃzV ‘Ü:ëæFÀ…XÚœdÈ–;+¯ L¶ˆ‹¥Gu"²Ãq™íd;ä ªÙ%OpIÎAÝɵjkÞ[ÿ_×_P‚Ö+;‡¹I§Òe–I&G[‹̃ ‡l¡%‰äò2 â¬K¶ZeÌ6H’"¼R%¬î|’»P‰"a÷Xí®Hʶт ˜Ûɦ]ÀþLZ\·S0=¥Áo-Rîò áyÎr½sB} A;C:<ò@@²—XLÀ0 ¥™zrFU¶†\üîíÿ_˜Ÿ-¬^RÝ-Â,¬ËWúH¹Š]¸8çæÏ8xÆÆ†ñ%±ÝºTl¶êYCü„3ðØ ƒ¸‘ÈÁ+t›c}u§ÛL@Û™YDö-ä¶6`¾2ǸÛ](éZ|0AtÂÅ`óä’2.¬ PŒAF¯+Ñx'î㤯{•V1œ9yµ4 ìsÜ¿—çø{QbŸº’FšÒP#8‡¨qŒqÀ‚âßQkÕIl/^Y}>O>Òà³·ÎʼdœvÇNâX잃[Û&œ6ä–ßý&Òãw˜¤:pnÀÛ·#q¥´‚-cxÖéR]DЫOlw¼LY‡^Hln}~mµZ·s$áʺÿ_Öå{û¥ÛüÖR[_ÉïÕ´)<ȟ労|¶Ñ·8`Ãq<¶1RÅz›–âÞÎ NÙË}f¿é •‘YŽH96H8åAk}:îHÉÓ‰›W`’É&•+"•(Ä·Àò¯fƒŒ V…¼IyâB+­HÎÉpùûË—ÚXŒr¸¨è>èë)³¡Ó‡-ïý_ðijj6ž$¶’;;{}dÃ◘﷯FÀ†lîÃÉÇ" †¾€iaînå‡i]/RµÛ.&Ý’Á”sòàd~kPCÓ›q$·7²[nk=Bßì×¹T ¥dJƒÔýÀG­›;ëHÖ];\èÊm—Q˜Î>IÇ §9aŒrwxÑ‹PÖþ×õr-3\ ’è—3Ÿ´;¬jÉïλVE_%³¸œ¶¹7­¤ˆ&*FÛVT6¤ï‹ Nœ·ÊäžA¥âKá¡ùfgßTÌðMʉ0H$’~pW¦ UM>úÙ8ຸÒËR¶çε”8+''F«»·p8ÞÏ”ËÙs/mkÿ_Öþ¥ûC{¤Á ÈútSNË,Ãíå‚d^FB62çœcˆ5ØeH ” om¦$'Ë‚ð‰¬Hi$U .?tAaŒg¸cÅ\û%´wíacwwfžfÛPO6ÒtËòX~À#¯“UZlð%º%Îm*È ¼È$´™÷.•;€Üì# ŸK#(µÎ¦ÿ¯ëæY²³N¿Ey6[™áÅž¤ÄT)ŽG&SÃõÆbX¡@–’¢ºKjXê’ªH <|©ö‚À8ÜW¨ç­KÝ?M:|V¾D©Iö;é‘­ˆ¨[¸ÍäîÀçZÒÔ w°–Ëì¤ÜÜ án¨ã2ÆDÛV)GNIïéZèÙ¾Fï³þ¯ý}æiC«Å{qûûë6ÚÚÌße¼¶*Ùcq€øh˜íA’XüÇ<Õ»ÝÎdµ·¹k¤Y³y ºæ ‚F 5¹ŒÄ $JŒ©9ÍíVÑeÑ®,®/nHåŠÚò@“ÅydÆæÈ£äÈO²>.ìÝn–K™-™Á¿XÄ6¨ØÇÊw+¨œ›‚q†ÍO‘¢—*R[íý_xšF™+¶ Ñº‹«ŒÊd·Ì¶i‰ÁÈŸ%¸œ+‰#œh À•D,ÝF1Œmuj2lÊM$L–çJê#A#!È'æÝ×>†­=leV”`½£zÿ_×R”º\–0‹›fŠÕãwKÍ3æ…€uÌ‚X¶ß%‰*ÏŒu8δ´K˜'›M™¦’C2_in!-&Á“"1)\’xûÇ.¢¬ ¥Ôuµ’3mw y&òȈ‹îóÛæL|OÎûŒ Oâ[L×µhîR+“§ßD«4 måf.HmêIò‡$“Ïc¶Œí¥)5Èõ§õè@"›[.¤†ít2Ü(6—{BÎêF .>ïÏó/ ó€jà{u³¹/|‘H™´Ö¶¡7¶ KµAqä“»rn#«4>Š'𭜗}¹&HbXîãW •‹$’T°,s“óuª>»}_EÕ&G– ìî'„ù’yñÉ̇%_>½É<› ¡+; ¾h·Ò.ޟב³k%ªÇöYÆáKÁ®+9|ˆùR}Õà±Ëcø²Ý*{Wþεó´Õ–ÖÚHžY´ÝB610>i%dçníÊA\©ST Š!i$ÖPEe)V2F| þˆÉùx±ÏÌ}jŃLºEÇØ-cŒ¢M‘ù°ÉòD¤ª»¨Éã“Þ­i©„àÛj/ï´[ÙÞ«iw3è!ÝZ85(ƒÙÊ !OÌ£0J–䜜ƒ‹Vñ¾›g(Ú¾2Ίé;›iAEÆÓ´1fèx8@ëtÚš5ͱ}=!k‡šÙ|S²y‡%OBv€:ãЊ£eª6¡¢Ç¬[D–SK$‘IúÈŸj#ä©è2‡sór0¯mJ唟'oëúÜÞÔͦ•v–Ó®œŒ×}ŽíH&Œ4ŒÅJçhÈê €Ü;…¿l¯WÄéf°Éeµœ¢ÔJ²D Ý‘—lD¦yÍ}—{zfðÅæ­b‚Ñã…L¶²þú6f6““Ï8üN5þ5êí«øÛP—kD+Ê#i ˜ ä“èŒû /yYV`•;¾ÿ×õÔó¼op1ßôWÂÝ%ôß ÚHĤîqÔÅyüPñ_>ØD%½OBkéÏÀ,ô›(”îT‰Tv¯â –è.§Ðø†ö˜Ù×e~fÂà’?B?ÏùpßÚGh-Dî\i ¦ …ÀÇN_#ÜqTÓæÁUéà…4»9x¥”;ƒ÷—m{`ÿß^Õùü:¶~õSer`ý=ÿ,Töúrê“-¹dMÿ(y"ƒü;›(É$qÏLUeŽ3Pjw2Z¶á$>xü‡ëJ ò*_ £k€8ã<åß½}ce&™à{ha’çLH¶‡šË7U1„„9Áç8ò‡äÀ$üwl›ÈBz‚s__x$×­m'“Gº]\Û™­ŽRF>H ñŸ”€­£¸#·×pþ’¨ÏÏø¶ Ò¤ÓÑ?ò#Ô.†¡¦K3ÚÁ¬Û„Pd´c Ø%%!NFAll¼pq䟵>¤&øS­I%ÔzË\É2«Cs´«…`yn@ÎóÝx¯£Ùë_ð’ê7º]ÄÚêXhر·™Ûl€“·¶r@÷<šñÛ–â]7ÂZ\S”¼2ßI$R´j’F©#¤®'ä ä}•Ô•ÏÌë'J-=ëÓúô> &Ôg—Fo~¹¯hý´«M[㮜÷ín¶Öö·sbí‚Æïä²¢’U€Ë0ên•âÖ*‘º×Ò°„n>#x†å |š4©$r!e‘€+Á?(ç§b0Mtmâp«ÚbUû“þÙÚÉÕ>$ÛéÀ tF")ZHƒ31ùyôÇ\ôë‚úÏàOƒ$øsð÷JÑ ´ÒI‘É3Á‹¸f™Ì,ûGl´”ù°>ðÈÇÇþµ‡Ç´M½Ä°Ç_nº¿ξlyµ¦T#•ˆÚG÷ÿ‡4+_E.¯aæh—or‹w/±krK!á‡Ì>S×9¬“ì}5:|Žu'×OëúgË?´F“¤ø‹ãwË <Äy p"Dh’IøH Ç©ï×­tŸ²}£kzu˜í'¸’ëا´œ$Ø;XeIË(ÜsŒõmÀdg—ø½¤_Ü||ÓÖ F+[ñ¥ÆŸl[EmÊÈwnBpI“À‚Œ öß„~Ò|a¦øB $’, …ìDÅ3I½Ë3œÜô8ÁëMI; §…œk:ÍÝ[æuÖ..ຂqz.]~Õ§¯‘s Q‚ð7rù;qZcL¹ûy#†{³h<Ë›vò/ ØŸw‚xêr Aq{o‹¬ì§²Žw{±w*v:@rzîÆ9ƒÁÀÅYñ^¢¶61\ÃöØ&¶!I‘’d`6îdŸâ 84%Ôê•IIÅEnhÿkj>kYÅsö©’w‚umÖs©Ýœ¨}Ø 9cŽäô®vÒîóR±ž»—XÛ–“L¾ˆEuÂÊà8Æãr8®çЬãѵÍ?L¼/ªEuuû‰lRZí™±°¢Œr3òíò¬ÿBÚ<ú}ãF;²-ã¸Ø"¹€2Br²Fy;rqÉïRß[—F_ W—õýlîâêmå¾§jˆ-›I¶öÐyr ŒO9}îCÅ6ÖYo#ŽG‚]vÒR_+mì² îvƒ” ÷n š.¢šTñ&¡(·ßJ6̘ã W±¸sþÏ9ãVcyâ/O¿Š ¹u Ù ŽìG²X3°†Ü[‡#¨$óžÂõz„šO–13T²›O`.[HâFËä]ƪ“€Ç#''¾ây±y=®±k:´ê±Áq†“Ý“bL•ò~cž¬½fïf£ôQßÁqU—hŠt.?x£$d 0: éu;=ºìš\ò£µŸ÷)+$d1' óÁÉç¯QI6̪{8¥5êP°°3ÀŒIÖôå ÝÊ^ņR <ü@ îç­Vce|öòÈ­¬Ã£¡hÙo`X aþSÎ;m9È5sR¹ºÓóc öÁçœg’ö±PÞƒ¨´G 3±òç…™8êpH#¸àV5볡ë6ö÷qC©Ã43‘#B±ÎdU!dã†=»ž j2J+_ëúèVLÚÆoÇÙ$Fû=Ô/ èýÚíÁoȘù[pJ]êv÷Ë4ªêIR)ó“ɾ‰s*ü»ŽHܘ^p$Ѫ¤V7ÐÅqw¶ÒEE¸–hÁݼG|ÔuÇoX…!K©nÔÚîröÓòæµ <ˆñ’ûv端—-º²ÄTÆØ#“·Œsò€y1k*šödÆ[û5$M$›f…R`Ž@2§p@àäÔþ'Ô#‰ ±¼´†öÎdµ)Ö9cwòFíààNNÏ#<ЗrŽœ«GëúûÊf/µ2i‰sÞ×y#²×a]»YIŽN§•8$õÆxhÙ™¬Þ;+‹Ï0ÜÄ«ý™ª á˜6#ã~ dðAÊçš~+Õî<yh&+«ZJÆaÊD;åEÃàò¹ÈlddàÓõ{´Ò4m>v5 >èN¯eyóýà Ÿ©Ÿ”ä¾”|7YTŒm³þ¿¯Ìn¡4Ö´z™‰a(d·Ö2a‘v!%étÈ^‡v ³{½"Ú;¤m;ÍDt­X´¶ìy‚Ë€>è©9QŠ­«Ä ðêj»VçLd¶Æ—w™–ŽB—!²6~9éÅkkÚrhqÛ]A$·¢VV²¼Ê› ‡ ‡ ¦3ü>üsšW7J0J3ÝÿZÿ_1-ŒZ-Ôh—Vh¥ {7Ç;1¸áÁ=GËŒš†8WOÓâK¨›Gp$´üKdëµ¾üd`ÆrsÁä‘Z{¾¡¥Eªi2>'”¬ –%!†UÀÚÜ}å úç…nÚÝÖ¥i4šTñÏäIG|3ad”<×цM]Ž^k«Ë§õýn+]D×^eš\E,¬¯tØÚ{gĘãÜs‘œ©<[ÓOVžîãB·K™žóȆºÑ°¥”¤îOïeNy#’@Qšæ¼%r5{MHÇiú´bF¼´UMÿ¼¢…lƒÈìÄ:ÖF‡¨½íÔðê#͹ºaº³>CnR鹇ÌwÁéÏ5*zK ÌÜ¿—_?ëú±·+ U–M–úʬCFÿg½Ý½¸ÈàíRvúc€J_Ë-ܰ[Å%µüˆ±Ï…æû{ȈÎVBylr[$zðjÿcÿ„sÄÃM½fÕ˜Irëxsq–K®2yä|Ûºó»‹â¹&ƒNOºhoí®-Ëy’Bu8Æw )íü<ã’zSzMsòµ×oëþ¿­dI…ÇÙo§†ÝMv—6ÑŠ6žTuã€H¨ ÿ‰I_í »:¹6ZœFê݆ðƒã€wŒê07O×$›KÑ<É$]GLFŽSez‚F ¹y‡’@s†`O¦Ú$ qg3ÛŸìÒ,k÷Êù~áÎ9;±Kw 9F?yéý}ßw̬òaiJ *ɈOnßi·e*YAP ŒàŽOË€«P[¥«°¶…-.Ç Xž2„ÈẄóa†qÓ9©t!ñ†5Kxÿ³.RÒT1G†ÌO2)hÈŒ¨ã9ã=éþÒ£×®¦–:n¨Ò#IwÌ’*“º2pÙÉÎâÙö«]Âåtïóþ¿¯C>ä9ÑÚ)¡X-¦“t—t--°Úå€xô Ì ä}ìî=*ÇšºJ}ž+Iä±’Ý#ífÝ g^²EÔ ¡ .8a’;ÓÓîWT¸1D­§M‰òöo±¶¯ÎÉÈcò)žH¦øVñ¦¯}÷ØßÛ$QýºÑ¶™™ÎWøH#Nï»×&ÌÑŸ¶öZ¿ëúô"}1ô4–<%¥££#ÛÜ»\Ø)ê¸n|¥;”#¸ù}[±iª©Žð7xMÍé ¬c*a,6)aÿXp{`Læÿw†õmjÎí¤´¹”Knã|weqƒð¸Ç¸ë…c4:W†/u;+d‚Úµ>œß<,JÅQ[ˆÉ1Žp}q×%¬ìr«)z 8]Ã6ñ<òüŒÚv´X¸Dh›1Hvû­Ä•ì´<ˆÚdw¹šå-%ÿQ+¼²—ÉÈ1ÉÀòÊ ¿N[C¤\&¥áXnîàŠâÊwÍ%JÎÊŒ”F>éÏÝ«š®™oiyr—Hoíc*•ÈšæJVPs°'`Ƕ8Â]ËœÔféϧõý~f.«=´‘Ë}e–Éÿ! %Vž ˆââ,ƒä&[®@ýØÆDóÞG¦‹–3Ggöql›ôûÞ'À`Xã&8ÁõŒÖÚhßm×®`¾•%¼˜G+ª„ÛŽTðÄeõëX¾Gñeü°ÌËiz“¬Kql¥RCû LÑç÷ŸyñÈ#vâ¥èͩԌ¡ä¿¯ëò8ŒfïáíÜþEÆ›sÅp-"&{gÝ8|Ÿ+ÔãœñÉç9“œŸóø×Öž+hõÿ…zÖøRÝ¢†XÀ…@ry,XG©’3ò''%»|¢a9?9ýƾ#ˆ)Úp—‘úo Ö”¨Ô…¶gÿÙbitpim-1.0.7+dfsg1/help/faq-brewfilelockedexception.htd0000644001616600161660000000261210360163373021250 0ustar amuamu#include "pagestart.h"

Locked files are that way for two reasons. (Note it is the phone that has locked them, not BitPim). One is because their presence is fundamental to the operation of the phone, and if they were deleted would cause the fail to be unable to boot or operate. That covers files containing the ESN and stuff like that.

The other reason seems to be that the file is in use by a program running on the phone. There are usually all sorts of programs running such as SMS listeners, schedulers, contacts etc.

I believe there is a filesystem command to unlock files, but I haven't had the time to look into it.

So consider the whole thing a warning from your phone that they don't want you to change those files by directly overwriting them.

Can't I just offline my phone?

Taking the phone offline just means no unexpected external events will happen. For example if the phone wasn't offline and a phone call came in, the phone would have to look in your contacts to display the caller. If BitPim were busy updating the contacts then the display code may look at incomplete information and worst case crash. So the phone manufacturer just solves that problem by requiring the phone to be offlined while changes are made, and usually require a reboot afterwards since they don't want to deal with the internal programs re-reading the updated data. #include "pageend.h" bitpim-1.0.7+dfsg1/help/tab-playlist.htd0000644001616600161660000000066110547562471016223 0ustar amuamu#include "pagestart.h" SCREENSHOT(screen-playlisttab.jpg,)

This page allows users to retrieve, edit, and send their mp3 playlists from/to the phone. #define DESC(title,desc) \

title: desc

Buttons

DESC(Add,Add the selected song to the current playlist.) DESC(Save,Save the changes made to the current playlist.) DESC(Help,Bring up this help page.) DESC(Revert,Discard all changes.) #include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-motov710m-notes.htd0000644001616600161660000000146010737572253017622 0ustar amuamu#include "pagestart.h"

OBEX File Transfer Capability

The V710m is basically the V710 with the OBEX feature enabled (Seem 041A, record 0001, bytes 0000, offset 006A, bit 0=1). This allows BitPim to transfer files from/to the phone using OBEX protocol via the USB data cable.

Phone Detection

To enable automatic detection, the internal phone ID must be updated (Seem 04FF, record 0001, bytes 0022, offset 0008="M"=0x4D). Otherwise, this model must be selected manually.

Ringtone

  • BitPim can read, add, delete, and replace ringtones on the phone.

Wallpaper

  • BitPim can read, add, delete, and replace wallpapers on the phone.

  • The image currentled selected as the phone's wallpaper may not be updated properly.

#include "pageend.h"bitpim-1.0.7+dfsg1/help/phone-lgvx10000-notes.htd0000644001616600161660000000200710721731463017401 0ustar amuamu#include "pagestart.h"

Firmware Version

  • The firmware version of the phone used for development & test is VX10KV03.

Phonebook

  • BitPim supports all phonebook features of this phone.

Calendar

  • BitPim fully supports all calendar features of this phone.

  • For recurrent events, phone events have End Date and Repeat Until fields; when BitPim retrieves calendar data from the phone, it combines these 2 fields into the End Date field.

Ringtones

  • BitPim can not make use of ringtone files stored on the microSD card at this time.

Sounds, Wallpaper, and Video

  • BitPim can retrieve and save Sounds, Wallpaper, and Video media files from/to the phone memory and microSD card.

Music

  • BitPim can save music files to the phone memory or microSD card, though it would be very slow to transfer large files.

#include "pageend.h" bitpim-1.0.7+dfsg1/help/licenseandwarranty.htd0000644001616600161660000000210410602623525017473 0ustar amuamu#include "pagestart.h"

BitPim is distributed as URL(http://www.opensource.org/docs/definition.php,open source) and URL(http://www.gnu.org/philosophy/free-sw.html,free software) under the URL(http://www.gnu.org/copyleft/gpl.html,GNU General Public License). Please see the LICENSE file in the source for specifics.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

There are no warranties as stated above (ie this software may damage your phone). This software is in no way associated with Audiovox, LG Electronics, Qualcomm, Samsung, Sanyo, Sprint, Verizon Wireless or any other handset manufacturer or wireless carrier. It has not been certified or endorsed by them, nor was it written using information directly supplied by them.

#include "pageend.h" bitpim-1.0.7+dfsg1/help/screen-memotab.png0000644001616600161660000010603210462561003016505 0ustar amuamu‰PNG  IHDRá¾?ZsRGB®ÎégAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<tEXtSoftwarePaint.NET v2.64‚")‹tIDATxÚì|“Õúǃ¨¸Ð¿ãz½W¯¸zëB¤ÈÞ³ìQ@†LÙÈ(D‘%E6e¶@7Ý{ѽ÷¤3£{&-ûÿ¼9mYMÒ´tüžÏ—÷óæäÍIš†¼ß>ç9çåÝ{8x#¢:Œ%xCR8†§Ö36‡7!—7­€7Kȶæñfò¦ y3 ¹ L) ÕS@ëeª€Vâ×éÃ_°ã|n;B(ÝáKw覴eD>opíp7…\ûà"^¿xE'±¶:Æ`jòäš.«î¾¼ñþ¿·s¼»óþ‡ûî÷Ü{¿çáûßþÅÑל£ßßjaКÑðà‘ƒÿ¡ Í}‹R 3ÙVœQ< ™AâñäÒ;¤)¼žÁ23á1U!;ylf! ÊcK+»¬¹G‡Ê4åí?8ÈT>9ðR†|#Ú=¤ ù›L5Xjƒ™ƒ j”¿ÉìBS¢ËŠ»oJ5¯O}B…WR˜ÊëΛǛÞi~1Á[XÊ _é¼\ÜyÅ-²Þê»WÝ'Ø>mel‡5>¹ò¥aØ‘ô ÓÒ{´fا”9F§Å·›³ó¢šÎó+;™ˆy³«xÓ¤ÛéUt³¾Å¤¬ž%Ü–ZŒ‹ê‰¨…˜˜ÏÀë›ÉùI½£ŒˆâMË~Ì-d¾B¦Âà|E ܽôšd̯@Ga^ ÇœbªU¥a‚+W"à0æ×CòÁ òV‚ê\Çæt•ɞɕ½Êª`IP¾Šà½v•ó^/înr” éõÈiŠÌTêù©ê²Æ…¥Ü1òf@k§€þ‚(ÀtDIA,¤ÁEd0)!#!¨ ¥od=$(d&Ä?,xõ{ýù¹^g²·ÖøWÉ(SÉÐâÖ‰n¿š£ÏJŽ/–Ö=×|ôcM·™å½æÄgTÑc Ó UµŽååVnfñžÕ…›L„+‹Gñ -˜óCÁ¼³¿'ògô!ò&}Á1¡GΨ2u‹Ð»<5ž4…æ(ï¸sròü ùp·ûF>6¨ÞQLŒxffFfFÜÖÈ辉™ ñ–ï­·x&f<#ºI–£;Á÷ ÀQ@KAyˆu'ëØÝ<ìxs§eÝÚ“uËÿ®[t°vÁÚ¹ûkgï­µ§vê.ɤ’±Û%Ã6‹û­÷ZRõîŒü3®SÎÃ0HGv¨“’}ëÊϨ¸t¸ìøÎâ}k‹~_^´mQáÖ…›çŠ~™-úe–híTáªI‚åcù‹†˜ôË1î;ø]—=øE·êó(Ÿ†ªpnXHšD! 131²°h°Ò† ×bò§)f~<3 nÇÈHÉQð7:@8 hAG™ öo§›Ç]oýqåæF‹ºUÇë–™“aÔÍÿ“3Œ9ûjgî®ú»düÉHSÉ€õ⯖W}4;ÿƒÝ鱆é„eç(…[çW\þ»ÒúxÙ©?JþÚX¼gUÑÎe…Û‰L瓦nš#Z?S´fª`Åxþâ‘óäNý*~øGW¾ø× 9 AŽòV¨œ£¶P¹ [Lvb¾ eP,¤Žb$”·0jh13£{éJ´¼¥à(8ù-ݧü&!±Øgssëùº•Çêªûqí,RŠßj'n—Œ3“ŒØ,¾™¸¡üÇ·«jz/­ê>'ÿµ¡žœ¤“QùÌQDk¦”ŸÝWj¾µx÷Ê¢‹ ·ü(Ú0K¸zªpÅDÁ²qüE#ø‹†s£?&ýòg|›3©wüÈîÖ_¾Æuòe<sªGQé(fRÿð3ã±ô‰ß[ñܤ JøóÍüŒX­ KŸ—XH!Y±h¦)~&F&T½"ç(ò?@…ønlö-Ù›XXq‡Pù沨»u/{¯cu£€öÌ8t€N TâJå#?K“s÷ÖM§Ì‡Y- Êõ£U$(âÞËjz,©ùïO5Ÿþ$þïOâÏ~ªút¿^/TuÒ¨£(vÒà(T'[üûòâÝ?SEv°TP†Ì6"AÉ›Ô[Öž7þ¿Ùã?K¥ÊQêÇzÈQ¨ÉH:q™ÆAù” 1a Â\ä-#™£Ô'TX!-»‹).2Tï(ϼ¶ƒpöHã^¨N&E¥uOÿÏ‘öCÒn’ÁÈ; ¿|sQ‰„öOºW(?*ÿÔü‹˜ GÈ-æÿY7ëÚÉ;jÇšJ†ÿ"°VÜw¥øËå5Ÿ/ò“ø£…∻/úSU÷¹oŒô–Ï£ÈwÒ¨£(vÒà(üùƒ©ú„â1/Z?Kv|Áœ3ûæOùò Œþ0ol÷œqŸ&ŒênóÍ\'_§rBòqìÃy™£Œã^(%Q,Lêí„“éÖ„Ç3«7•zAḚÙÎ3¥+bI5E&òþñÔ7îì&ÙÖþt«òŽBû¦Ëh¿²ªîÉÉ €:G¡9Ãs÷q£<Ó§ò‘ÚÑ›%C6Hú¯»RÜ{yÍ—ˆ?úIüÞBñ; Äï/¼¨êãy¯PtY'tSC't¯b'#8Šh£‰ˆfñÐvÍtáò‰2)¡ê“‚2ê½¼ïäz?gìlj#?¶ýæõzGù_ªG¡ÉÍ4^3UägÔ ( ‹‡E £Ð$d©£”p+í?ä(EÞ 7™pÐMÙË¢vy“Ýda7ëên?ÝÃFáêR/´“[|g¯£˜¶l8i³e { С³áw«jhÆ Í»™ùWâJ•(£M%C6Šûo»FÜ{•øÓâ—Šß],yë'É;‹ÄïÿTõþ\Á¿Fø°“¬r'tSC't¯b'”G•ωÈÌïhÚ7ygÝLªD¬˜À_2Z!S0îÂ1ïæ|+Ô;¹cÞOþ¾ÝWÿzà(,•B˸qŽB¶B­ƒ ¤Iîº>\¥a.ÌQ8;1’»Iµ)ä(oÕçQdš¢œºb—øt/Ù]œ‹ÈíËô…µ/:YMûñ‰¢§?9'Û¹ì[ffžÈö)ãbv<“s ê[Ï«¿Z‚ï5@;r”¯–׌Û&™¼“ÚŽßÆ-Â6d“¤ÿ/’>ëŽ׈?]%ù`…äe’7—Hº-–¼½¸úí¹‚W‡=ä(òp%´ê;¡{;WÌŠZò§~%\6N´j²ˆ&ò¬œ,X>ž[Émáµ)“?åOø€?öþ¨7ù£ºå~;yØÛvÿ{•ë¤o&ïÛ´úT åQ^Þó°£H¯:ègR?Ó˜+@i¨AiÈ ÈÕÏš™ùÑ?3£Î&•tICŽ)eòòá˜Mûé™%OŽL—¿KÝþ¢“5…w©r– Sžú!Lþ.Ùu%Û||Aý˜Q/[:è€Ðy°×’š[ÄwH&ýZk¼£–fèŒ2“ Ý"ùa³ä»’Þ$ÿ]'ù`uíÛ+kßX!yc™äÅ5o̼4Ô—3U°i>ê:¡{;á…Ë,äMìÅÿi„ðç‰Â•“D?Ó4ÁÒQ É ¡ñÂño F¿!õFþÈ7’¿aÿÅK\'}òx}r8Gy7™Ë£pŽÒ-ž3rãzGáVF‘fP¤Ã=Ò”†„ ­ŒR¯)ҕܨ´–¦ÿtž#á.¸<ã|H­¥¾Å(X¶ÏîRÞg‘&¸cv,ãéO/<>¹Xþ0Í•=´¦T =tüdA -[2z«„ÄbÂÉ8Ò‹mµC·Jl•ô5•üo³ä¿k?X_ûöšÚ×WÖ¾¶¼öµÅ5¯Î¾0ÄOê(*:¡›:¡{;1®ä«àê1Æ|BkŸ–Œ&;®˜ X>îšÌïËvî‰+Eß}]8굂ᯥüðªcϸNú‹xF¹œ¦|–É9Ê?J…nsŽRÄ×Ì®¢á“·ê³&,¡RŸ;!GáVž•fS¤£<4ñ˜Ë£Ì‘0ÈTdÒ@û 7Ýg<5 ô‰©Å צ´‡)5´¸ Ö¹Õ}W× Ý$m&Q=Uxsí¿Ô½µ¾ö_«k_]QûòO5ÿ7SôÌ@i DM'£·IF˜I†l•ü°UòÝVÉ—[keÐ½Š£WÒNΈ÷ógõå/*X:Z°lìAYôƒpþw¢¹æõŽý—hä«C^Ní÷ÿ}¦ÞQʦÏ:|ò$×ÉrÎF˜¦ÐUz8Ê!7Ð3»ŠþÄäÖGá «rËŸøÉ—ÍšIS)T†bÄ#Aa+â?¶ø^§Å·Þü»òï‰H\–„K —×Ú· »Ãn*´+ "òðñ mžÉ´‡y™ZýÙ¢šoWÖü°^µ£tß\÷ÞÆºÿ¬¯ûÇêºç—Ö==¯æ‰IÂÇúIS Zw"ŠÌ¸É›Ê¹Ë £×rÇ}FÓŒISÄþΜ Ì ˜ß_ðc_áܯE&½ gt/šúµ×º-ú<ßèé”/Ÿ°ÿð±zG!ÈQ¾.âVrkëÉã(æªf¤ŽB룃p‚B.B‹âûI³&4¾CFB=ÒKù˜™Õ_¯‡’.—ßï´ôA²BÈFmˆ§{X=5*µËîbû]¦ e7åÛPyŒº}hÐß{hÝ_™Týþ\n‘ûoVÖô]#î»FÒg­ø›uâ¯Ö‹{m|º¡öýõµÝÖÕþkUí‹Ëëž]Tû„IÍcúJ§ä¤\â ë»Wh¸'wbÏüéßÌê[0»oÁ¬>üYßðg}%˜ÙK8ýSÑä÷ 'v£J¢ˆ>[Ð÷‰ä/³û ×ÉÈêúT 9 ]¥‡s”ÇÈ……ÊJH>¸Ë J-„?îÒ1c³t 5v^uŸcùð´ \VcléÓË?šWñù¢Š/–Tö^ZÙsiUÏeUŸ­¨êþsÕû?Ww[Qý¯e5//®¡š.&ÕM«àÊã}Ë]²Ø È’1©_=Ÿ1଑Ýÿy¶ñ9“{ç÷Ì™Ô3wÒgyÆÝ &¼_0¶ä¿øC_æèZð}—œ¯‹ûœwå]^½£0M!G©ëyØQ˜¦t^t‹xré.+îr¬’²æžO®ä¨w”‡5€Ö ¾Ôí~ÙÝfe¿<&ûuãì·§å½?#÷ƒ™9ïÍÈ}wVÞÛ³òÞœ•÷úlþ«³ø/ÏéjÝãÅ«=_ºÜë•Ë=^²îõ²M¯—m{þŸC®ŽŸ=ãôß§º?éðQg§;پdzþ®[QbÌ‚C•ê%Gæ(lK˲qp •šzSa,½Ãè¼ä¶2ìçd9Z3À´žXp›,ᾎA9z=¶©«~bN-79hÆÍ'fÕ.8R­s'%wHPžSõP=Š¢£ÐbûtÝcºd·˜Ï„«¢í<¿²ÎWdÜbsy䡲¡(€Væ€Ö þ‡‚ÖÍŒ›¬H–æòpË«ÐÄãÉÞ”ZÚ1®á2"lËvdŒ«à,ç¶ì^YŠŠŽÂiJ¯o$o@L§± âà Oet•ÉàÍáT†®>Șû`Ÿ!½ªýœ@«†„a„šê€Lî*ÅDß¾O¯¿iÔk¡-]‡  ò°Ëô°k ’¨v”1œ£H5Ef**apÈŽ—{ ­öQ uÒ €VO3þ`ká×ÏëùWL—Þé¯..{Ê8«¤0àQÁZÉë“Î{û2ïå½pÀQà(èpŽÂãñšëÅ5[Ï U|øðû`Gá=²sLSÎ4Ê}*ŸÃô{ Ý6Çi²éO¤å 6 4ý×§å«î)à( æ(?Óh^×ÃQ´yl+q”;[7å-…£h3Ž¢ð‡¸i•«ËÖèÔ¹ºÓ¤B?šoêú\Ê;ê^¿òMmÊ/¯)o‹æ_ŸæÊPo~‹%tܱýþ@W>?©;‰6%¢`5åO|-Es2CË÷¡éÃ4ÊjÒ¨»4åתðiÑü›…¦0|Ese‰öy”æv 'N½ÿ¦7ˆ£¨ëMË>›î( hó(ÚÔ3ÁQ4‹£¤¥Y¥)ê`œAkv”F¹Mw”FSYpÍë(­-bôF‹É6G6qJŽ–/Oo{Ðé=£h¥5³*KRTæ$tERùzÔ=Þc=Z*©{¢F_­NU,M8å‚\: jf4—£€–þÝtŒs6Ô€ò(úÆêZÌa¨3_óuÞ2OÔL««µ¶÷Žy´YGyŽ€Vâ(}3yÿ±€£Ž Ÿ£ÜG xt¡ÖQ¬­Ž<*GA Ѧò(jfà(€£ÐD I1‘¾ì1|ìë¯DÐݤFº ïOû¦X”àç´ø§ÅÏ?ÿeþñwè>tpGÒ­Ñʘ6ñ"Ö¤‘…‘¨<9É è0:ØÐ§Fn›áKÛ¼œ¸ŽöþIßÜ츂ÜaA²ÁßamHI ~øwýÖ—_}dÔ¿ûÿ¾üðwß‘¿‹œµ´( ÿk€£ÀQ M™¾¥£°0A¯ÈÊjR*.59Tþ ôòË+ÛÉ+¯|"“bLAn½Ž‚²²²ŠŠŠ’’’ŒŒŒú{óâ›élM§ØÖp–ñSÒR"ýýÜ‚=##‚¢"¯Ó6$ØÇËóš¯KZJ??‰ œ2¹ÙñÍ!(¤&«Ö~íì><íÆDy‚#ÆìÙ߬…¶iãFh p8JÛs½5eîܹõ zÆãÇë—>¡¿‰ÙYçÿþïíÏ>›ýý÷Û¤Yý÷<& …¢={¾ôÒÛÔ8hÐ>:€“ý1­“@(`¢"üSS“ŠŠŠHP‚¢R®xDŸs wô‹ÍÈÊ%]£Æèèˆø˜@ƒÛ ‰‘ŸŸS€¿Krbp‘(EËAƒŸ’ÓS#ÃÃüâ#23³2“h›‘ž@¤§Å)É1±1¡a!~‘á~ :RÌiexXˆ·_ ûŽýYdìX;‘'5kÂ{¿å•7¡)ÀQ:–£ò“S’#äQù$5*FlA¡ÉâÊ;Ú;R×'½téR||<=0''‡ò"´S^^®ý“êñ“R­ ;9}øáøùóc ¦ 'Nœ•?lïÞCÒüÊGì:˜=Š®ßFÄO ð÷¤ÄIRZö_VAKÿtßtÂwÿ•Ѓ¶¿_ ZrÀmãQ/·ÀxQaqjj*¥JD†K]’®\½ŸŸÏçóãâc¯Ù5ªq´=cé(õƒ½ŒèÈ€è¨àYÉ !”´Ô¸Ô”XyBC|ÃB| òÙc“C<ÃÃ| $m©Ÿþ5ý6ÇŽÿŒDƒ È¸`9èÕv£‡à;€Žë(PøŠ‰Ir..L1èßš÷©Ó‹Ô†ì¬8o/gyÔü™ž¦p=°EvS>Y"ÛʧOšè(ôð1cÆÐÎ /¼@íd*ÔB²ræÌ;;î„zðàAº—Z¨îÕ×QÒ˜ ” ´ŸÉs”^x³¦FüÐy]THG¾ôÒ²Ãè!Ìf¤š’¦«£„\÷)((M[sØó€u¨WTFb¶0%·0)W›Uà›yÎ#zÝß^G¬¯S–…4…êTJ æiy9±®nNÙÙÙ7nÜ #ôöuãç'¨;8$4ÐÞ-Ð;4媋ŸLYššAI‰ ŠG¡T ‘œMÛø¸ðëA^iQ™éÑ$mtÓPŽrêäú=¾óÎ;1‰ã´Æþ¿ú1O-¦à›€öé(OõLSv”FÏýÊ0}wwk¿Ý†¹×ܧ/²í:ŠÊ›*Û™šÄQÈHhKíŸþ9µìß¿¿_¿~ä(Ë–,¥:Œî%Maûz8 â!Ϙ2ÅYfê…F|… 2M‘úhë(Cß~{Ù´i4Ž“’5{›ÝÊß-ÓÓnð3s…ü’ÊQy&¿$%¯(6“ïšüëùÀvÁ…EÅÿ¯HÃ=®nyyyTû’––æë몢iJ©$2:%8,!GX”Y JÍŧy†':^_zÐ=;'²Ñ‘~ú}°ml.'&%„‡>È‚P…—§#¥gè §ÙÎ.®×-A˜biïNjâàæä~õšÁ&Ñxº;z¸;’£8:\qºv51>Dí\tAJJR¸·— ôPEÞQâbà â(,£6óá %Q¼³þ° @Wº9eZO•ù§´rŽ@‡t”‡ÏúNÿ«O ¹avÐoyÀâ ¡ÛöÚÏMq-mÚkÕܧ/²­õh®JQN®èG¡³¦X¤&d$ä+ÔHûÔB^BÓev¯l«“£°…Úh±‚jh^½íùçßTç(Ô[ÞMG±¼t‰~¨å{™Z¸ùE{ÆøÅ†Äå‹ýü#¸Ô‘P”•ÏOº‘š“葸ó\€gp½~~z–ƒ8;ÛQ¾$99ÉóÞE<=œ223øÒ žmí®ÊO¢JWO/Ïîõغø]vðŒŒ6ÈG‹$v¶—\œm‚¯{E„ù¸çç4’¢œ¬IJ(•ÂÅàŽ²jÍWòæqôÄÔhfºEÎØ’©å‡Ÿ(8Ê»ï½GŽò ÛúêüÃ_ Í¿Yhþ-±ËnžEØÆ}Þ³÷xÍ$,BùÃaŽCàÁ­'ûèÚg£/²ƒäQ”•¥‰se^B;$+,¡B;t﬩ÆóÇ~7}Ø'%ÒÏØ½,´wZÏž9ÇܹẊ&M¡®ØËgŒêêj{{{Ê£ÌÞf»x«…ƒG¸“g; ·°ÚÅÅÏñšWŸŸ•ŸGó[¢’“Bã“ü¢“X[{D‘døúê9 92Â/--57—&ug&%'FÇD±2”LiÐìz繩C Ç»yy¹xÑŽƒ³{‰tµ´b}´(5bey&<Ì—–nËL¡$Š  ‘¥å“îz±ÒZ™£j^,bq~ Œ‹zS# ñ(”­ ¥ñÓÿŒ?»[Çì9°ôäõÕ'ƒ×œ Y{:dÝ_~?þá9åwÉ¿¹OÜé6ñï€åÜ;,iµvˆ®}ÂQä P ¸> Í!ÿ f*TwBe³ý¿éj³Mè¾›L¥)룰ž×^ûBe¥ÑÙêR)Ô¡æáöÁ ”MMÊÍÍ]´ËaΆã¬}.ÛùXÛyÚØyd‹ª®X:\ºh›S“ž–’•Ÿ–Lš—üç•@'¿Xz™êç ü|nezW©®Eôp¤§§ÇÅÅ‘¦$%%†‡ûˆÉÞõÃ:>~~Í0±6ÍÅÉš>±´¨Ÿ"(H.ª?¸(&Ó´4‘‡EÞQhå7CÕÌÊ~¹òH«ê«Ðr²¢YãyËAò‚â4 õ(tèy=*ÏývÿçlØfS§a;\Çþê6~§ûñ¿ºÛá6v›ëh3瑦NCwyL9ì½l¯Í ®ÑQ|]ûlôEÄQT~}Sckså‡ëí(â†`ƒ8”r ™;!'ÆOßëÀêI6»²‚Y½…M9V7гoßaý… ÷h˜„,ûÀ\8{–ÖO3;æ9cíñ½æWÎ^r9ÁáüEû,Q•Åñ ¿mÛ“—z#7%#;%)#965)$!iË)ï¨x®|ØOÕ a퉈­¬¬¬ªªb[’?Ú¡¹Ç”P¡ Zˆ%>!ÞîšéîäîU(H6ø:ªÔ¡×µB!»D[_íSä܈#AasipG ÍL6 £¨°ºA¡K ²_ý¢ÅÿSH¢lÛñµ:ßì`îñÆï~ýLÈ/˜¹ŒØæ6r»û¨í£vxŒÚî>r›Ûð­®C·8¦{78‘p˜û,Ûg· '/Bó+ÓµÏkßýºÛ?›{î±–4_=мh(’5 £È?)D)}òÛ÷bŸÅ1ëHS¾ÿ²g×™eë¶)O95ÊBö7ôöí»uu6 Yò³òŸjJZ\qœºö̼{–­Þ³~Óþð´¢è¬’cf<¾€Ÿ’›Ÿ’•“"M¥¤xGÄm=åC¹%Êv$%4µ($øºê$&qÓéýý]hðˆ’+”¡áJ•Ó2l®yr‚r=‚2($(Íô-@õ%òÐuiÖ1ƒ•hõ&F$1d!Èʈnî/¬³§²ßûšu_+Jt¸>x·ÑZi@‡s”±üëdðÚuv}7;Øê6ÈÌc°™çmƒ·¸ÿ°öÚW+ì>_tùÖï/°üpÉåÏþôž·öìД _Ãö¹øh_Ï«vì(:]ÇP5³t²¬ý}_/(ÖdŽBåau*´•Ò²}-…Ì*¬Û&Ó”¯¿^K÷~üñ—º: u¨¹lV~î1Í—¦%ðWô<ï{Ã6$Ï5²À'N’Z8qˆñ¸AãøüÔ¼ü” ŽrÁ-ü¼S¸P(¤B–B~“¼;÷‹R…ü$A~B¡0™®Í¹ÁM𦜠iŠ7ÄyÅÞ-*Ò¿ùÆ/h:M'&h‡`—$h‚±ƒ•ô¢ÇZÕÞ6·£0A¡¥SèR‚ ‚’”>a̸Ϥ×uzç‘\¢ÐZêQ'ú~øá˜]ÿ<´r•Í×]¾ßìndêÙßÔ«ÿfϾË>þÑîõ—_œ|ᙉO?Õeìñ.ãO<3óì¿L¯ ûÍf¶Ôu¯L¿>·^žôÎ÷]T¾Èå(ZŽi9ÖCe(ÉÉÉ}z~²òñ‰ÌQ¨T–…Ý++¤¥š6 È ŽBÌ›E÷þç?Ÿ4Ÿ£ÐŠ‹‹Kii©WHÒ²¿|.ød:GxÅ ‚’EÆÃ§M>•%;7%S:Öã³ã”ßÜÒš@WÃþ–Ù$57oïc¬¯yÑ~`h™JÖܘèˆz§i†oOGv½@4|C-4¬S«yŽÏƒ!ZRŰ×T 3=¢~øï€¢ Ä&Ž£KJõå­¢fË6Ú¦£të6â·ú-\xéÃŽŸ®púxɵwæÙ¿2Óî¹™¶ÏΰyvÚÕg§^~fòŧ'ž}jÜ©.cŽ?9áij˯ôÜi3ý°ýrµCzõ¹ÍzrŸy¯Ðz”ìEÉ^$Eïy=´¥1¹o‰w÷fŽB‚BkᓎäIƒŽ Ù²/èËoe="‡kŸ÷* hüÁêÆz?þ£Ÿ£h?ÖCÛù£GGEEÑH–ùå ¥¼gÌ7›>{_‚pÒ˜9ÆcçÜ JZVòµÀ¨_Žz&¥åÐú%'Ožôõq4¬4†…®Øã¸å¸ß¸57í¿}ÕÁ#95ƒ°´´„ÈËŽmMñpwPpª8¡ÕñodÆhÌI¤‹èÞtö’h`(Ðß­™rôŸ~ò%7ùëÇ/ÅÝ{Äç=>€ GQÛËÀí]vºOšpâ¹Wº’@̲{n¶cW“k³ºÎ´}n†õ³S­ž™táé gºŒ;Ñe½}¿µ‡xGœÕ°Œ·}þlÑÿ”Ƕfë‰óW"Ì¿; M<¡ JèÄH6|ÀeÆ7ÿ¤‹²9>”2Iqp$;Ixí9"}ÇNz¢[ååÞo¼ž6æùðnÏEOѯf¶‰Ž¢}Í,m™ÔFDD”—Wx…&ÿ¸ÃvüONº&Mœ¶vâÔÕ×cã®Fî½ä¿÷b`fN•µ’–Ññ'Nœp´·4Ôy1("l†©ÍŽ‹±gÝÓæíö½Æjý®K± Éô\ô+ w›®É̦´4·£°zXo§F' RŠEéE¢´â´ˆ0ßÐ`¯ægáÖþg7…òéÏ.wüÎÛŸi9aÐ~ó(²A“‡wl{âW·‰ãNd®ßÜã&:Š–s”SHG|¨6…Ä+=›oã³ç|à²ßmæ›Yî>ç{Ê!Ä'4¹¼¢’RG‰‰Ü´assó¿þúëðáCÒbÒ¦ÎÎÌJXð«ÍÒƒsvûÍúÝkü§Y¿ºN[ÊÅË^Õ¦ÐÂn´K~A¾tT%±Y……ò(¡!¾q1Aæ!S%7;Q$H/¦å܈§UÝ"Â}‹›ç{*8È~›ãÆ./(Íû³ÏÀóà«8ÊÃ;²Ó·n¶?I>1þäÓ”íàdÂíùžÿ·À‹c¾Ç 䤔ù˜có_ÝÇÿ|Ú(1Å»áµuéÚçïtÑü"KÚãú(æÔ4ÝQΞ=Ûãõ;ÿ÷Ùê‰ÿÇeüÛ﫜i|}ÐЂ>Wñés9?çùAwJŸzžò(ÔÞ賨[í)Ž¢ýnò ;ô£V˜p—ƒ¡ òú)å†XJ(A¹Z¹„î²³µ¢·…–Ï·´´¤<ÊŽãÊnrõMoÐ(FHdØü_­W ™ý‡¯±©Cÿù Zf1ÅÔþÄwv 9 Í<Ê•Õêúû{È&âÊQèjÆòc=ÌT¨xÖÍÕ.59œÊf‹¥/U~¤)=5êFfBA~jzZ´½­¥Ó5ëøØ æûªâÖ™ÝÞGÞQz}Á ñù»à{8Ц±ž‘;_Úï3w™õg|zn übKpo³°ÿ­ºþæOþ/.ò}q¾'§kÛñu½®ƒAÚ<)¥(ƒrþŸÏPF„9ʦo_T· åNüÿý:9 ¥RHS †>/˜ò¼÷?Ÿ«ŠÓêTªn-|½E§µðåw†uïN)¢Í?ÿ|RjáááìJŠ$%ÎNv©I¡4²cc}áôéÓW¯^½xñ"U¥¦>|˜‹èþËM Ÿef½ìPÀ{ýçîòøáÇýßÎücÜú+C–ZÈÉÒ«bëÏÒÒ)tÝA_?Wƒ\MPÞQHJèÊ‚LPèÊÆ´Î=­ÌF«´ùùºùz;SŽ$3=Š¥¥ù;ü¼Ä„¸è¨ë‰ñ¾>.t BgÛkŽW]D¿‰ŽB#;òŽÂFy0‹€ä(]z¦jp”¯½¦˜¢`×ÄÙüò܃_Ì9ÔóÇ#½~<ÚkþÑ^[Fïˆùféõ—¼¸ÐçÅ=v¸ÛoýÓô§-]k£QGѾO-_du”¦W¢è‘S!A¡””Ϻ2G!A¡"YÙÅ)Ø>ô¡JªG!G)ý¡+%Qâ{w½:fœ–?£†k êç(:]SPÜùƒÍ5*/'¶X˜"ÓZ&ÄÃÝÆÜüð•+Wh8ìÂ… 4èò)±QÚ®ÌA£œ”œØoá<~ÃÕ5ÇÂÖ Y~Àkà‚?¿3Ù;vÕ<3«”Ô˜ó“YÞ"#=M4yŠdÅÇ×¥Ÿd@G¡ñZÞžVc#G!;áÔÄÇ•ÁV’¥ë’ˆÐ…‘6ÖmmèB?¶n®ö´uu¶iV] _¨Qÿî“§öÑèJÄ€vâ(ojç( Óy”‡Qøyqù¹±yÙ1 OöÞÿíŠðWV„¼ú{ÄÀ.c/»ïÉωñ“8G‘æQ¤¦OS³ÖB2&â' 4÷©Ç‹lCŽ¢ù¢<²­®¥*š……V’¥aåaŽbÞëY–Aa“Š©&£>}ÒL\h”GØó9rÊ£PÍìÖ5k´O'°ó͇Žoº£P' g¯4mEW©•Q¥¸¹Z<ø—µµ5eSΟ?èС¿ÿþ›îMŒ Ðf|ÇûzðòÝÖ“L× ýÃ*ÖôtèàE¿žþÛ˜µ–ÃWX¤¥Ç•>||JR(íÐ5)))d„4œVu¡FI‘a%#=.Ááïåy]ˆ‡9Š·‹ü›Ýôô¸æ!½T²»› Š«‹¥RÒS#›ÏQØE|”‰õÂ\à(: £òãù¹ñ‹Nõþ=é۵ѯÿ™8ÂÔf¤µ÷>~~9GCå¡!T•ãq×5eš¢¹Oý^d[w•kµÊQ–-YJ‰s÷9¦Ô•²)4‹'K,wB# ä%´Ÿ×Ô!ULøôìÍ…ò(TE»wé2=NB “uu6嘠ÿ0è%µ¬Ð› ;.ÚïÀ}T˜B©J¨9r„öO:æ¥ù©¯G„ ]qqæ¯nû­,ÜÓ6 ôÓ‘ofì¹ê¢ÉÖËÉ©±*µ†íPÖŠ¦I³}šˆãßÄÙÈThBE'a¡þI !t1 Z%4ÄË×Û….ÄãïçNšBŸg/O'B¦&ÌN˜ PÅÞÎ*6&°ˆý§n†©ÑôÒ/ô•WÞ45ë#ÏãÏ™¦à{8ŠV§©Upb±øä—û“‡ˆž¸ÃÆ8*ÎY$h°aŠl”‡¾ë5|½ÒaôÙ`**úÔ5uß.E?MiÄQfÌ«øÛ› M¡šY¶’,[=¶Xì²Æ,§ÂÒ*´·h1•ÊÒXi +˜¥´ŠN?,›„LÃ4òë¹Íž¤ÙQ¦Mó_·òh˜rlØLT8·jÕ¦¦Ðµ £££©^ä𡃚ϸG.¹Òµ19¥œóL_w4xÈŠ3_OûuȲ3£×\ò Ñ0<””pUÉÈåz{SÎýìó|Ùêlxhý¥vDüd~^BR|°—§#%HHSJŸ È§Ot-Dʽ EÜíTÍ…ðMq”¿þ–ÂÊ(´˜8Šßæ¤ 4LCb±øÄ—IKw\žŸìA7¹Á_a©ÒK—5’ü—Žq u}ÂQš©ÅÁÁaÚ׃ÉQ~Ÿ¸˜2(¤&¬î„ò(lŸ-)Ë–nc7Ùôc6¯‡¦ÓðÕÌj3ñXámd빑g°l uŽÒ³g_yM¡‡0A‘®Û–Ö2ŽRÊ]f/ŠÍâ¦gfR Òj8ÝÒ'ßÊÙk¥yàÏG‚'osµþê×Óv~?ÿèèõW÷žq”76æ¡ÿ)¢”ÄøëIR¤O‰¾ëÏÊEº® M°J&A$Ñ5™ rãósâ“Cü}=Üì)ÑBFBvB‰6¸C³xÜ\mü]odFÓ£ ëÿw§5üïNƒ£ZãXcâïÝöÙ,òJ”jcµ¼ìˆòaúl¶SN+¬™Õ£ÖDÝÜcùÐFæÎË®×êbÉQX©,miŸYK_@“z¸õQ>}Žvh…YšÑCe¶´>Šß»¯Ó”~^¦)¬6…íŒ1iÅŠ ÊG&'§Î›·Lñ`õ Ë6Ó†4åFf$Û§%LèBƒçÎWw$KfeÆŽZ}qá>Ÿ±›æ›;çШõ6sL/&$„QÊ ,ÈËÕç#½mí¯\¾jééá *HÒuJ(=Ž‚ÐÉQð^=Â_´mG!í E..ÅööEd$,22Jг³Ù­"ºin^äï/‰à(]¥çâë %£Ú‰£v¥¤”¸»”Pää”GpEÑQ¨è¤$3³T(,#)É̬ps«¬¨¨¤()á¶ùùææåtoizzIr²GÑ{Ñ…]µAv•ß× å~ôî Ž­ÚQh§´¨ˆ¤‚Ô$;»25µªªªòرòO>© «®®®tv®$w©¨(‰Êòò´wÙV–8Ñòè ŽG´gGyJ;G¡1œzA©¬¬*/¯ÎË«©©¡ñ¢O>©‰§ýêÐÐj>Ÿî­(--//oâX:GQ8šÒ.E^Mäwä=CÃŽr?Ê}*t%»©ÒlÚ«ÜÀQ­ÑQ¾Ïäýç¬nŽÂ ñ”—s‚RUEF".-•ˆÅvvvK–,ÉÈÈ”•Õ¤§×TsÁiJE…yí=ŽÒÑE9³¢·£hß•AÒ9ph G!ó A! ‹Å‰¤¶¶Ölóæ^={n\»¶¶¬ŒnR;é 7TYÙDGQù(8JÇqe±§QùÐl*»‚£@[u–D!A! a‚B1|øð€€€m۶ݼy³®®Ži CšGAÖQ”ËMôv•]ÁQZ3X€Ž°†µ…,„\„ŒÄßßßÖÖvÿþýï½÷^HHi µ“¾°TŠ®õ(òe°p8ŠB¡«J]Ðìšµc=mÎQð¿ hs_þ-ç(ò=ä"d$+W®6lتU«RSSwìØqëÖ-—FGÑÃQT–¯êç(:•ߢfVè/8 h-ŽB"Bi•_ýÕÓÓóìÙ³»wïž:u*-DK5+pD´6G!‘¡½£h).ZGA à(ªå°ù!¡P@j"?ÖC[²ZØ.†, if2y‰üX=„ˆß>¦p”6í(Ú8DSò(pŽÒ$G‰Oˆw¼fOΡý‹£ƒé!qqqø=ácŠë·éïe‡oaûʉå}…GÉZ”GA à(:8 ӔÇÒØ–<ôW\\,~I8J;øÑ 2ÏP6uw)Xˆæ›ÊŸ…¦õ®šWîøD[uwïÞ¥RYñ¡Áôôô˜˜šÎCsƒ‚‚"##ÓÒÒ¨î¥âÙ{÷îá7„€£´³ïm´CÙQ²,ZJ €£èæ($d*d!¬<…»‚ t|Ú§j§{ñ»AÀQà(*Ä Žr_Í2êV4Pi3Ê‹3ièJÝeÂŽD ØQ”ƒ…_ŽGi±±eóP·2¤Ž¢}W¸<;Ñ¥‰Áã=‹ß%ŽÒj¿GTNÎ{‚Çë"åYé¶3ïÉ.øGA´íÿøAnOwâøxzû¸?ÖùÑ8 |ŽG€¶í(¹i™©1© a)ñ!ÉqÁñ‘~1¡žz8 ­+{ÍÊ:ÐÕ3&0Äþì%/gÇk...Ú¸‚6Žr_ýª‘÷±^$¿ 8  ý9J|¤o°m€›•¿›%áçz)Ð㊎ò¯“·£Ë »¸Û8¼ùÒ«>×\;óx¡¡¡Ð8 Ž€£<ÊõQžäñ’#b|]œ¬¬í/X…ûy{z¹¹¹uíÚç8 Ž€£<²µðÉQ®ž»˜õR—giK7]]œœœG£ à(8Ê£\ ÿϽàbcïïæétÙÆ×É-ØÛÏÏÇ—åÙgŸÅùŽ‚€£à(,BñÊóÿGë£P¥ëã]h‡Vu{饗pò€£ à(€Žî(O=Ò< ŽG£€œ£dòþcaGizG£ÀQ U;Š®]YZ_›¾é‚ö˜î=uûömœ–à(8 ŽÒŒ±ýO‹e[,âo' =¢òœÂn\ôN!.ùpXú¤ZúÖc%å”kü†½;J;y:.Ä™ Ž‚€£à(ÍÕåE¼BRb3‹cób2K.û§™;ÄhÀ:0åNáXÒœ™à(ˆvæ(´Z¾ß€£´– G ŒÉ‰É,rðKŽL/’9ÊßÖçº\ÝqÕzÛeËÝÇ/^‡£ÀQz; ]'B†æÃZÀBXhï( š{Ðp˜6-²Fý:lÊñÀQZc%"…“Yhå+s”#6‘V»ìNŸò¥#¶Q§Oû]Ý~åøÅ`8 ¡·£h#"÷[êô©½£(ŸæµIº(¦M‹–/LÃÃõ>8J+Í£ÄÝ(ŽÉxÈQΙ»Ÿ>ésÌ2äòN’”Ó§ü.íq€£ÀQMwù› ÉÍ7 (1ÚxC£^¢å™^{Gi¢ôh~ýpGi“y””üŠèŒÂËrŽBjò÷Õâ9e@ÙºyÄ6’}˜£üztÞ)ûî«·jµ‚í£]Œ¿Ý\ ŽÒ^E¡EŽÈ[KÛr•ö áÙÕ Çèí(^p”6GI-¨ŒÎ]và(ÖfVæöÑÖÛ¬Ìí¢N\²üÞF|®n»ÂeÛÑéêEþ+ư– Ü3ŽÒžò(*EË*––tÍ&¡“Üè4£ÎHt*¯Ñþ•Gi-y”G‰“9  ‚Ù£V¡4îCÃ=§,ü/îwÒÆQö è(z˜ÑšE9SÒÃ:w-³JFÓE§R_L_p”6›GIÈQHGΜô9sÜ›ÆwÎþíqù7«ßm^ ÓÏQ”óʹmŽQ~íÕÖeŽÒžEåÀM[ëÑ[šÏQtª½… 8J[«G)¨ŒzØQ¨ZVZ'ëKe(Ê룜¿¨¼{÷ÈNtÍ£4±¥QkQ×Ò²)p”và(*Gm”Û›µfVÃt\uŽ¢î!ÚÌRx¬Þ³‘õx%^N`ŽÒ–ò() ŽB¿Ly(BPE{GÑÛ$ÔIÓÍc=ˆGî(íœø@E·®´ÙÊ;Š£м£hXgVË<Š¡2+Mïy‚@w”´¶›G¡zßÈœÖé(iA= ŽèpŽò¦åÑ®’]Bë IùŸ†ç¸F(âÖ€{DŽõç}IPì·lÑÏQô«‡Õ¦®VËžá(8 ŽÒ6ò(©Â­{¯nßeÛ¾Ë[÷ZmÚe¹y·Õ–=V¦{­¶î»lFí^Ý~ÀzÇëmû®ÌYeÎ=$"B,ãÌGAÀQÈ£4ce÷GggׯÂÝÝfDEEI$œ™à(8 y”fÌ£l;h眥*n<»[3GIJJª««Ã™ Ž‚€£Gi®®L÷žZazzûžó—¬½®ÚûÔã ˆµ+[¯Õ›’£$$$ÔÖÖâÌGAÀQÈ£4Wܹsg㮲A-‰ŽŽÆXG r¿Y»º}ûviii\\\„vAÅ(ééé7oÞÄ™ Ž‚€£GiÞ¸{÷.݈µ Ê @Pà(8 y”fÏ£hŽ×®Í˜m2pè°QãÆÏž3÷ìÙ³8-ÁQpò(&̶ïX´xÉôY³'O™>sæ¹sç233—-[öïÿûÛïpZ‚£ Úœ£¼1ÎLð¥ÕåQvïÙûËÆM&sçM›5kô¸ñ¤#ñññ©©©o½õÖ3Ï<ûÒK/‘£|?`NKpD[t”ÌÌÆi99yy7øü<‘ˆ_RRX^^RYYGŽÒZÂÉÙùçU«fΞ3}Ö¬_~ùe÷îÝ|>ÿرcÏ>ûìܹs©6vß¾}O>ùä‚ ¬®\ým×®C† 1b³©)NKpDÛuu‚R]] GŽÒZò(£ÆŽ‹‰‰Y³fÍŒ3:wî|âÄ @УG^x! à’Õå1&ôé×Ôøñ[L·úúùݺu '$8 BWG¡ëEÉPy¯¶_=M»È0s ‚"×ÀQ€£´– 1   —“'OöîÝ»°°ðÄ©SS§M:b¤É¼:tñÒ¥{÷îá$GA4ÑQ âMwÍ‚R[+£Gi-y”‘ãÆÑµx,--ÉT6mÚÔã˯¿ø¦Oïo¿ëÓ€ Œ~±wÿ~C½à6}Eb8 B?GQ·U8^!û¢ùf£Cþ¡YPnÞ¬ƒ£Ð¥K¯6™G!Û˜>}:%Q.^¼Hu' .üùçŸ-,,>¼råJ333777:`ùòåK—.¥}__ß “¦¨´ yáP¸©ÙQ`*p”Žæ(òªÑh®Eó1 ]ipÍ‚rûö-8 íÅQ² æ(MÌ£Ø$l8ê¬ µk~à·ýŒ<<cÇŽ¥:Y‘HD©”^¹r¥²²ÒÓÓ“ö§NZ šì3räHÊ£ >RsFD!;Âkƒ‘5j8GiOyíEݑ޵)äš…ŠÏà(ÀQ œG!¹sçöÝ»tv§ý;wnÕJªu”y }þ¿¯ ÖР 8xñà Æ`‚Úûd4` ÑnÛï‡Íô¡Giï( jÒh ò+p”Žé(î7}¬G³ ÐÏGŽbø< ]oGJ Ú%’šÊŠb~nz£ŽBA¶1gÞ|š{4ñgýúõ:9Š~5³p8 ÚC%>Ò7ØÇ6ÀÍÊßÍ’ðs½èqEKGÙ¶}ûäɓϨ Y*…ô…¶”D!G155Ué(8 Gy(ô^…9Êü1I)Œ¥1Qk×®/ š¢¼yóf8 G r¿Yu‡lc×®]$"Ær1±!&HƒÙ ”1cÆÐªùp8 Ž@¥yƒlc÷îÝ»âw¹ø­!~mˆíÒ )?p8 Ž@¥yó(4ñ˜„CWèQ83ÁQpò(Í·oß.//ÏÎÎŽŽŽööövvv¾víš­­íÕ«Wé’ÈÖÖÖNNN>>>±±±4»‡VxÃ9 Ž‚€£Giö< š¶sëÖ­ªªª¢¢¢|iääädJ#++‹nVTTÐ18!ÁQp@[r”§z¦¶’<Ê£MÉ à(phŽ’i0GyäyZûd×îçÏŸ“µÐͺº:¶Oít“Æzp6‚£ à(€Žå(6"HA._¶Ú·¯¼£TVV²ý?vÿf~ÄœZp6‚£ à(äQZ(¬.[‘|hÏ…‹çqN‚£ à(äQš=òÇžßXÖ$0(@¾]¡…öYå´Åiœ“à(8 y”fr”;wº ä‚Z<==e7CB‚©…f);~…)p€tÔ˜ÃFøúùÓt/åQlí®ÚÚÙj– YÀQà(p@EŸ®-­.’£°d‰Å¹ó£'ÓR÷´æ,Ýœ·pÑŸm251n;@$…G„YZY6Å$à(p8 ÒHœ>sÚÞÞFæ(d'2Ga±gÿŸãŒ'ÓNBB<9JUUåž=»uÒ…´ŠüŽB»rF¹QeoíÛ`à(pèpy”C‡zx¹UWW«s”¤¤$J¢þû( JbbBaQ!]¯ç×ÛõKuÈû„‚ˆhÙ¢²·vŸb£´{G¡Ï± uà›бò({öî¾XSS£ÒQ’SR&N~ÑÒòÌÙs>¾>¡a¡¾~¾”GY»~~yGQÙÞ¨£hxºÐEÿ€£ÚOE›-ÅfÓMQÑtÑceGáóùÃG]ÿË&{ÇKVVÖÖ—ä(ëtquæ¡./¢kfŽGiÓŽ¢!q"ŸVÑ|Se&Fù¦Âö¥UǪÕ+ÒÒÒŠ‹‹eŽB—8>~òÕ”––6bÊÌY+V­Þ÷ç“§Ž——— ÁÁAë6¬Ñ¾²UG1T ºÐš%6Ö/6ÖW†–Š Ù*ÔÝ«²EÁW”÷å_àÑáç‹z”ûóÍãó ˜£–”””••Ñez¨B…êNrórãâcƒ®xùx‘£äçç9::XY]Z²ì'ÍE'š‹a5W¿jÙÁX¥: }ïÄÇé‘GQéšïm´E]# •$ûK¦ãæQfÏYQQNFB%)$%t¡cšãC‹ ÐZm²cêêjoß¾EC<ÞÞžV—-ÝÜ\—-_,Ž‚_毌¸8¿øøíÇz´q]‡£ÐÖ4å:}uÆQºôJk‹y”sçÏÍýÑD',úq‹é&œ–à(í…2·:•¤hï(zçQ (´~ôñ1¼£<Â0™7ÏtÛ&-ØÌX²b)ÎIp„ŽŽâ«ëÜcu-M¬™…£Ð†Ðo¸§ýäQhÈfɲeVVçΟ?yî܉³g[X;sæèéÓGN2?yòð‰‡Ž?xôè_ÿ}àÈ‘?ÍÍ÷O™Œ8 °ŽbÈ’~íÌ‚¥µÇ½{÷¶˜šŽ›hZÈ£´t…Ì£&Ï‹Û&ýÝèŽGAÀQZ?tBäÆn4·zòÞwk@Sxu”éÂ]¢‚x-äQZ4›Ú¸q#ÉÇæÍ›¶+V¬m—/_NÛµk×îÚ½óÏi 8 GiµÐßý$(Æ[ÎùÅdáóÙÄHÊÑ;¹Éü2ò(È£´t…œƒ¦ó\¾|ÙÓÓ“¶4£Ç‚¶´ïççÇöÏŸ?OS{,--7lØ@vRVc³JASà(p8 ¥U9 eP|£3ï! w}£3èý,-JÇG y” rš¶S( ¡PXTTD;lËZØ–ÂËË‹¼¤¼8$ÞzÉÙ“á(p¥ÕB%4Hq÷îB·ÞФOIM½Ÿå¥Ùøh!ÒÒyšx\ÒX$&&ÊåÂïS0ÖGAÀQZy…Ω·¸¸ šF¸¦ª¢¬ˆÞÏŠ²|´Gié< wæ“F¤š eÜê‡x®,>±u¼² ÈÎŽGº; b¹³¬•ÍÒUµq•æ!p8 ´€£ÈβòЋÊ-Ûa¡pSÖ¢|ŒÊÔ‘je4?\gÔæ§S÷(¸ ¸•‰ p”Ží(Ï£h³U—G)..æ…zfþ™mÆLP(Μ9£·£(¼ƒp8 4·£ÈβòЋʭºcä[´9Fã”;ÑéyµFfÚ?JÃË«ª*++ŠøÙpäQZE%""bݺu+g|pu÷yiÅÍÍÍÇLJ–q;yò¤–Ž¢ndc=p8 hAG)'ª«Ë䑞‰ÕîÈB¾]§cÒÆ*ŸZù%ièS›gÔ¦E¹u¯GžªªÒ²RˆŽ‚u=^ûWžlÕ½`¢²²¤´„/,ÈjG1øTPƒwˆ<ʣ̣P%((¨S§Nd'ÆÆÆ[·nõ•F\\\xxøÁƒÙšoêk¸ÁQà(Mÿ¢Ñ{¿Þ_Ç åbíà‹ž9 S••¥òÐÏ¢²E¾Ý°-Ú<»6=4Ó«’ÝT~mDE ÿóù†qC}Ò´ÿ@ª<² }à‘Gy(B•(EÒ`ká ¶C-´åÊ:ž–•†£ÀQíÆQ´yT›u”úL€<Ò3±êùS—‘êŽÑÜ¢ðDºö ®·FŸQó+×Эò«­¨(.).äg6ÝQ øIkŠ£´­|‡Î£Ð¥¢]ÃM^_à(pD 8Š–ë ©\jHó«Â—¯†¿#5w¥îehóì–ÊQdgÙ–~–{®{ÆòòÂâ¢|~^F39І2½?ê2%­ç¯å'¿CçQ˜£”••9jë£ ¡£h¨F×pîW¹X¢–_”š­¢Ñ¢x•ÏÞbŽ"=Ë57²“S ð¨GAÀQíÊQÔõ¨›¤aì¿Ñ©˜êZšXBØbŽR(H¤í–cWÞŸ¼ƒ)@S  ÊÒ½jjŠj%eŸx¬_ͬÈÖöG=жqöÜYJRˆ³ç,pZ‚£ šÉQÚ4ͽ”‹–”¥——fWW %âÒZIy¤¢®¶•rë–¤u"÷"«nÖUÕÕV–—ÞÀò€-üG徺¥c ûŽÒ¾¿©µ_Ç¥¬þ  &-ó7 £¤µÑ< kiЪ÷ÙÙÙ999T?›' ª–u`áèH˸Qi-Ž‚€£ÚÖnim: Š5wižÜA!;É/È/((ú á(Š Ep8 Žè@ŽòÈó(6RC±µ±­Ï p~ ŸÏ'=¹F\s‰ÈQ á(p€ØÈ£Ô ‡½½=ÕÆÒÈN…4èBƒ ,¨¬¬ªª®f‹Ï.Z¼€¥´´TWGQN«(çZ´O½ÀQà(ÁQð–ÂQÚ¥£àƒÝVå‘çQì8G¡”{÷î–——‘¦,Z¸°F´>¥Rè.rEy_›Ž‚·'u8 >ØÈ£Ô [Eê(÷HPªªªÖ¬Y#qmm-s”²²r 8 G£8 ò(úçQ´ÙÊ;Š€O+´ h@‡Šd¹äIu¸FüÓâŸêjkoÖÕQ •W”“¾ÀQà(8J;v”BaRAvtnVxNfX ™Ð|Èž…~œ¼ôsÑOG£´½< ­ + Ž?Bå±”5¡ ×JjëjëHPèæž}»ݹ½¤¸¸¢²ŽGAÀQÚ±£Ð‰\»Ñܪ=]® ¸p—…¨ ž€£ÀQÚ^=ŠH$ÌÍÍ Yº|1i ÉÞ“ePHP–.[|òäIZÏ­²R·<Ê}ÔÌÂQð½GiSŽBùã-çüb²ÚÍû™”-¢Ÿh“ùeäQà(m2âääD«·‘ˆÐZnf۶Λ?‡­á6gÞlZÅÅÙ9%%…jfÉ]îcY8 ŽÒ®…2(¾Ñ™÷ÚUÜõΠŸ‹® G£´½<г“A3ccc\\]¬¬¬6lذ~ýú-[¶\srJMI--ã…Ò*p8 ŽÒŽ…J7hpäîÝ;„4n·nß¾%©©¢Ÿ«¼4ŽGi{yg2WW×¢¢Bºòq||üQiœ?wž®ÞCC<Õ5œ ÐZ)p8 ŽÒ¾ó(t.¿ÅÅÍöB¸¦ª¢¬ˆ~®Š²8 ¥íåQJJŠÙmeÒ®(Ëݬ¬¨¬ª®’ ÕÒÂQà(8J»w”:š2P'iÔÖŠ«+ËJ‹p8J[Í£4÷Cp8 ¾ÊÛ£H$5Rª Í h´ÅàˆÅU•ÅÅ¢<8 ¥íåQ,Ξ!çÐ [[|Ôà(8J»vv‚¯Ò6KQÝ]¶±˜†ë‹ŠE¹p8JÛË£° Â0ZŸ-???999<<Ü×××ÛÛÛÃÃÃÓÓÓÏÏ/,,,==]$QÙ,‰ÏGiïŽB§vîì®ÌQÔÝÕh‹ö÷jIMMEEya‘0ŽGi{yG£(8Šìì®+d ;l_êZ4tØè1𩮦‹°‰ p8J›Í£°˜3gö,“™&sg+³vý|¼à(8JqÙÙ]WÈ'ÔíÈö•[´éVË#•©ª*++ŠøÙp8J›Ì£… .¬\µ’mËÌÎË$bS²‹‹ ‰¢"QXxèÒ¥‹ññ‚£ à(ÆQʉêê2]‘š„êÙ¾r‹üÍÑÔ¹NTUÑúVÿßÞy€ÇUÞùÚì)B’l‚ŸMòd÷î>É>Iî]àfÙ{o²€³ PlÅcZ06Æ6î°qÁ6¶Á–Ü«lc[.ªV³%uɪ#iT§jÔÝðýÏk¦©ÒŒÞ_^&GgÎŒæ;s|¾Wÿï›3Í­Mµ8 Žeu™t2ñ¥ñ^—xäÙlzbìcÉyU¿œ¸ý7oìyhÆ~©ÊÊW¯p›3»`ÑßlŽ/î!8 ÁQbÒQœ½»_Œðˆ²Òu¯k4>³¿¯GÁf3™MM-58 Žeu”£G,^üî•+Wäb6›U%ýlÕ¨·ö?ûAæèi{M&C}ƒnùÊ¥ò<ûõŒ.ôÉMooïâ÷ÞéèèàhÃQŽ«Ž"ã#‚Ífö ÑÏ]WúZ£þœn£N{»\«©Y£à(ÑVG‘«Ê>1æÏâ5µÕgÅQr‹ëî{c÷o'ízæÃuõ5¥eÅ,¿··Çj•Ë»™¤²"—,\¸èoÉÇq´á(G‰]G¹Vð ‡Lxùѵ²âk–' Œöv£ÉØØ¬¯ÆQp”(«£ìÙöÉ“úuqIQeUÅ‘£‡óhGG»èˆÌAÑéªKÊ sOç,]ö¾TYDPdÜGf^I)E†{fLÅц£%VÅÙ»ÇVk›Ñ oj¨ÂQp”(«£LsçcÿùK—.jjjüdãzÅQDPjk«‹K Næe§¤{é"§£ˆ¾\¸pAæ£<÷ë¿—¹*žOèúÇóG·{½nIp…÷qè8Š£w7ÄòÁcCk}cC…ÃQêq%Òu”ýÅo}tØY¯þÀÉ£ožtßu¾xãþë\÷†,?p½0éÇY¸ïºü³yž‚âUY<ÄKp…SùPv“±ÙhlLvš£iB›]P*ëjJìõ!KŽ‚£DºŽ":â×zg¦=ü½sÛ_¬9:ËIõ‘™å¦ì|%7~܉µO_þÇcËþààÁ~þøþï¦>ôm™Å¢ÅQTn Ž‚£p*jŽ¢¯=sûèYi'óteuµ%õµ¥²½Èë×UU•ŸMLI‘vuÚšq%Òuq‘Ë—/]¹bGºY¾|ùboO瀎²àõß]öÇì%wŸ˜u›™ó¾Ÿ»ôÙïü0yÆ×N½åàä¯%üõæÝ½íèÒQ‹Ÿ¹cï¶õ^ŸÐmøFÅNèÁQpNåCÐQšêóÇ/ˆõúÊÍ ‡Ê ²£Ò‚¬ÒüÌGïuÙÄ÷6uwqeê(òíÛºßPÕ%ßrÙT_9 £lZ»8~Æ=ǖ޿絯~:ùæ#S¿v|Ú­Bö’; 6=Q¸ylåá™ÙK~qbþRfÜš:ãëóÿñÜ®×'ºqÀoíñ4õZ ÁQpÞÇ¡à(mÍ%r;sí®?:_Gb© ¼üþ–®.CoGÁQ¡Žâü"+gtUE²^yf_·Ù™©‹Ÿÿ×Ô5c>w“°ñù/méË;_ùJâ¼ËZó`âÌ‘å‡ç'L>4åk‡§|íÈôo'ÍùaÙÁsÇÜQ_§ÃQp‚£Äž£˜ •V³®ÓÖÒÓm–«.ôõ´÷õ†‘‹{‡Ë/ê¸Ð×!—Á²škqeê(r¹!¹PÙÜ"]¾¡M¯¯«¨*;3`E>güÖƒ·älymÃó7~2îÆí¿œ¶âs{¦[p÷¾7ÿaÿ´ž÷³ƒ3¼÷õ[ÎøÇC3txæNnx2~Ö}Û6,÷ËQTŒGÁQpÞÇ¡ã(€£à(¡¯£4ÖWTŸÏ?_œ+]~YaNÑ™ôüSI:ŠdêCßÉÛ;÷à»÷üÛ//øõ‰õ9·oö±¥lzá¦Mì$LÿçëÆ&Ìü×=S $.øUÒGÏÌzöN¯^âu>ŠWwa> Ž‚£p*ÇQpìaQG):“–“šqtlj£Û…ô#Û2ïÒâ(bÇ׿”¸ä óî’?zjïÜ_~üüÍkŸ¹AØ:ùG{fý"mý³;¦ýä㿹vÜ-ëÆãð²G¦üþVŽ6…à(8 p`SG _E2ã©;¸òé} ·cöl›y÷'¯ýhß‚>]ò‡ÆüÝÎ9÷$üâþÅî[ôßÏV{¶Ùÿs¤¹¹GÁQŽóŽ"”´sÕŸÅT®¤«’vÉ·:ã(8J”ÕQÄNd GJ)R8ÉsÄ^5ij)IJJjq$99¹µ¥GÁQŽÛŽ"S7dpäʕ˂#—b€K—.ötuH»¬fŽ‚£DYEìDtD&Ÿ9rD4%-=Mª&••ú©rDZ[[Câ(ί>æxÅQpNåC°Ž"}ùE{.Ä }Ý]탴«ÝR‡£à(QVGÙ»o8ŠÌŠMKK;}úÌ™3g·oßÞÚ"NÒ*ÊÒ&1´Ù -Ž2Â%ÚÅë^ŸaÊ Ž‚£°K#ì(}}½}}=±Aoow§Íb64ã(8J”}ï±"2Ð#·2¸sìè±é'$;v쨮ª®®®5©q$5-Õ`ØQ´„vG øWà(GÁQ‚q”žž.1@ww‡­ÝhlmÀQp”Á©£ˆŽøµÞÍQÄNdƉܦ§§Ÿ=g8ŠAª'ƒTVä*´&“QîR®-«â(*…ײJu×gð|6_OîúœQm68 ŽÂ.¸£(|G0¸•ƒ|ª`èî¶ÙÚ ÆÖzGœ:ЏˆÌŠºrÅŽücpL’ºØÛÓ©ÑQd G†uäöøñãödîܹ³¶¶F®›’žž¦sDŠ+f³90GñjžRâ-6ã¹ìé+8 ÁQpÿEºv{ï> rnÑr—Êfᦫ«½ÝÚfh©ÃQp”A«£Èˆ£ƒ.‡°wIe¯©¾R»£Èœ)¥ˆžœËÏ/È/صk§½zb2‰šX̉ÜeµXƒ¬£h4O›Q÷’Ë3Ñ><„£ 7GAwgﮂrjRßÀײëc]t{NÏ-=ŸÐmO:;­VKk[óà; ß:Šâé®ÑUÉzå™}Ý*‘°o¯â(IIÉY™™ÙYY»vï’ÚÉ©-[vÞù‹m_ÿږ믶ÞòÕý¿º{Å__V~©€eW¤Än265ëq%:¯"v"0–ù%É))ÙREÉÉ‘Ù'''>tô¡»?}𮽣ÿ=aü¬ZûÔÈ¿Å}gÎÚ{—oýÕÒ¸M×]ç9GÁQp%VåZb@f é.çÎê¯çzõ-}=­ç6®´·MÆÆf}5Ž‚£ þuf¸¾â(­m­r=YYë Ä}ë[y³_=úô»Gÿ¯m£þç÷~{4ùwÎ}÷ïýó׌zí­U·Þª\ùà(G‰=Gqöî1€ÕÚf4蛪peð¿¯Ç¯øú qò´iü^ÊìWS缞2ÊÙ“ N,:thñ“+ã~;þÕ·¿ýÝŸyF®ùFç„£%&ÅÑ»bùౡµ¾±¡Âá(õ¼Å8JÔÔQââ7ЦxeÕÿû¿n¼aí}÷nxî÷ÛâGo\ÿ»þ×ßó›u7ܰ|Ô¨²²2“ã²³G!8Jì9ŠÉØl46 &;ÍÑ‹4¡Í.(•u5%öú¥·G‰š:Šùöq›ÍV___RR’——'—½OJJ:xðàò¹sßÿÙÏ6ÜrËæë¯“ (²°ê®»Ö.Z$Ë—á¡ÞÞ^:'…à(1†¾öÌí£g¥ÌkЕÕÕ–Ô×–ÊBô"¯_W]TU~61%EÚÕikæ-ÆQ¢¦ŽâšK—.]¸p¡Ë~Ùäv¹ì½|ÒGFsêêêJKK•‹¦Èç}***dŠÕj•-Ålèœp‚£ÄMõùãÄz}åæ„CeÙÑNiAVi~æ#‰÷¿ºlâ{›º»Œ¼Å8Ê`ÖQ·$CpG‰jÚšKävæÚ]?~t¾ ŽÄRAyùý-]]†Þ o1Žu”Ùsfýù±‡ýeΜÙôI8 ñÓQÒ9ÛF fC¥Õ¬ë´µôt›{{¬}=í}½aäâÅžðáò‹:.ôuôõÚ¬æZÞâ(¢°p×QD8ö&ìÞ¶}³ÂV¯lÛ¼ÅÎ&aÛŽ-«×¬”GÑ'á(Ä/G),L/*Êà„ Ú).ΖSG¬ÕQ´GlcÏÞËW,ñö[ 3gMwcöœ·çÎõæÔ7>Z·jÝÇk>Ù°GÁQˆ¿Ž¢Ôl‹Š²8í€6AÉ xŒ8vê('2ÓV®Zñé‘Õ™'7fçnÉ=·ûtþžSgvdåmNË^Ÿšµ:)cù±ôÅ»¼+E”²òyȡÇé“p⯣(#>rÒˆôÀFyb­Žr*/gÓ–Ié«3óVgŸ^—[°ùtÁÖSg7dæ®NÉ^’”ñîÁäi G^Ûspöö[Nd¦ËC&OJŸ„£ ÄNeßþ½+>ü`OÂÆ{×ìܻʓí»W Ûv®•«ºmÚ'yaÂí/&6¾.G!8 _G¬:Ê{ï-|íõ—_ym¢ðÒ+äV~TäÖuAxgÁ|yÈò+TŒÄ™€Åí!^Ÿa¸©Ž‚£ »:Ê; æM|ù… Ÿñ¥ñr+¨ü8oþyˆ\ÌM‹^(ËÁ; åGŽu”.›6ãÍ„„Ý{÷íÙ»o—|yÊÔ7öìÝ5eê$YxýWÇŽ}ü¹çŸyáÅçÇŽ}bÑ{ ^{ý•Ïõ¨8ŠJ}E½pâõÜž GÁQp€X«£¬]¿fÑâG%&%KII:v,qÖœ‡[aÚŒ©'¾8sÖŒ×þúÊ’%KÞšþ¦HL`Ž¢²^‹£hÂQp vê(ëÖ¯QtÄóß™;wÞ¬Ùsß–…YsÞ–íU†{Tæ£øºË—Äx:ŠŠÖà(8 Ž5u-·JeæìéÚY»Îî(/¿úRQq‘–i"*U¿ÅUtpGˆý:ÊGkW¿=kšvÖ¬]%?aÜK/¿¤£\Õö™-C?8 Ž‚£DAÅ/GYóч3f¾åÉ[Ó§<ÿÂsOŒ}L¶‘[Y–5²^¶—5Ÿ~úé´éojw¯c=*Žâ6=öª·I²Ì™ÅQp€X®£ÈwN{ªo¾õƘ'wûºcY#ë•ïLL<¼pñ»Aþv.à(ÔQ|:ʪ5+¥@ràÓ}O>9vÿ„ÇD>Šü츿(R’œrÜd2šÌFùÈü(—w›øòA®9»téû8 ŽBpªŽR3âŽ(¯£|¸zÅÔi“Ç>9æÅ—^xø‘?ÉUeEY{âÏrWÎÉì¾¾Þ ú.^¼PPpN¼Dï÷Ù±k«\%…n G!8 G¬:Êî½»V®Zþ9.ó¨Üe³µ‹ dd5Ù“°Ób1‰ ˆÈ„ÙÝ»wÓ-á($$Ž"õDÁ×ôŽ2gÎl·I'®œ:™sáâE±A©£Èú™³Þîêê¢[ÂQŽÔQ˜˗/‹p´´´”——çää$''>|8..nÌ“OÈ”´´”ââ"ÅNÆ®´´´··— G!¡u¯·N_ñú£W³An vê(¾òÙgŸY,–E‹>ûÜÓ>þˆÜ.~o‘Íf£+ÂQH0ŽRP^PæDÝQÜÄÍ]¼®w[vý]U¤¦QG!8 ‰£Èy§¨(ËWÅ«y¸€£@ôR\œåüK&*ë(öïxqÜ?kD6¦#ÁQÈ`9JaazQQ†ÊXºyhßGˆ!MÉ–SGTÖQAi+ÜÖxfƒ^8ý‰ g6¢)8 DG‘Ê­ú|_3T‚ë€h'°ŸÁ¯£ˆsÔd¯ÖtGŸ>OA—³Ú•†´yòú… ’£¤ùë(^ç̪,0g öl¸gðë(Š£œ˜u›FdcG!CÐQ†º£VG™=ñZ&£Èf8 ŽBpÀQ"WG‘[-EÙ¬4y¡¿ŽÂ÷éà(G%À:Š_ŽòÊ„Ÿør×8í$TŽ‚ëà(8 ŽÔQ|:JyÚû*ŽV·ÀQpG€á^GqƒŒ£¸ÕQ\K,žkÜÖ{ÝÀõá*?ºý‚£à(€£è(÷T9¨usf'¿ð#•ù(êc=ž â¦làË„¨»à(8 Às”Àê(Ú?{¬î(*u¯ãÕBÜJ#¾¼Ä«á(8 Ž0¤ë(ZnŽ"Ã7Ú?{Œ£¨T_ÔË'*ƒA^‡‡pGˆ…:Š8Šö9³EÇß ÞQ4⨠ý0Öƒ£à(±?%2Ž2à¤W•_EÏ Ž‚£à(ÔQB¬Gá æD#€aK¬ÕQ®\¹â¼t¬ÆÏ+Ž"ÄQp2…}Hg©£\¾|YqíŸ=V¥··7LšBpÞ …ዹéòå‹Ú·7™š¢ÆQ´×QD2.^¼(ÂQ•8UÌÃIÁ‘yÊ­çJ¡òð›òŽŽñŽ$…à(„;ŠÜöövÙlF‹¥EÄhÔ ­­:¡¥¥Vhn®il¬èì´È–MMU1XGQå½ÅÓÅ9äÒ±n¨TSfÍœØÙÙ‰£à(G!„„ÉQDPz{;»»m""f›ÍäÀØÞn°ZÛîÒ(¦"[êtE1XG¹êëééé1 •••gÏžÍÉÉINNÞ¿ÿöíÛ·9²uëV¹Ý³gORRRnnnqqqUU•Ñhìëëc¬G!±á(¾®šHDG Aéêjï”kv¢ŠÙÜìt”óçs¯Æä|ñ ÑŽ®.©)ÙÚÛÛ-‹ÉdkikkisDÌf³Ü+åq©¾ (8 ‰1GÁNRŽ"C<ý»(8Ô¤©ŸFô‘-‹‹3b³ŽBpGÁQ‚Ž"P\Çw„ÜÜ EMœ(Ž’ŸŸ›uIü¦ø…‹ßñ‹øMqC8 ⎢þ5ãW¿ø¥WW}\S‘2¨ŽbtQ™B«Ü*ŽrölrÌÖQÄ9üÝ}<„à(d°ê(}Í8!dpE>Â#j¢hŠSPÄNG9sæxäåÆÈÖQᨭ­­¯¯¯««“ÛGôz}cšú#Ë8 ŽB¢«ŽâõkÆqB†¸£ˆ¸UPd2Š«¦H¡E™3MŽXE§Ó‰—ˆ $:rÄ[ZZZš››q… }GQÑ_ßЉ£2¤EüC>Âã”’þÏ79×8¥Úá(Çb¼Ž")œ(”æþÈšà(8 ‰^G¹êû[ÄqB†˜£T‹”(š¢ŠrMQEPÚÚê¢ÏQ«£HEÖIôù2Ž‚£¡ï(W5L‰õÜ€ýOÈÐq¹z¬ î(j¢ \EåA‘ +Êfc¿Ž¢”OœóN ¾£â(œãp2t…íŽ"F"^âD¹(¾ÓQdŠ\XÔQöîÛ£Œï¨ÔQ¬V«\Þ GÁQŽB ·£44”‹‹(3VÊ'®å+{ôúóW‡Ãçz”ìÈhN«GLŽÈufÅQäÖ/G°¼Lp‚£B<E®0+¥™qÒOsYÖ "(ò±dÙ²¨èDŒ×Qd|G” ß±:¢ÝQÔ'åá(8 ÁQ!^EŠ(7–oÛ“1 ¯£È(ŠL‰õœ€bqÄæˆ|eŽ‚£…VG‘oê)/?%ƒ8¹¹‰ÙÙ²²öy°?'ç œä{£ÉQ”:Š–[7Gq~} Œìˆ”HÉDŒD¼¤ã‹ÁQp‚£BÂë(6S—Ðiéî²öt·÷öv^èëºp¡÷Ò¥¾K—.W®\üì³K ÊØP,×QöíUŠ(*c=Žà(8 ÁQ!8JäE¹8›Q”ñg)E⬠ôôôtuu©;Н/-SÙ†à(G!„à(>E&£ˆšˆ£¨×Qº»»¯†èn8 ŽBpBŽâ‡£HÚ]¢ÌG‘ò‰ØI__Ÿ”R‚tŠ(8 ÁQ!8ŠŽ¢Š× ŠŠØ‰8JooïU®…£…‚£DÞQä*m2E*(R>Qw;¹páBHê(G!8 !GñÃQÂý‚£…ŽR3⎸Áq”¸øâ~‘°—cG!8 !G‰ÄIçòåË2¾£×ëËÊÊòòòÒÒÒRRRŽ?ž”””žžž››[YY)ãA2ú#[rá(G!„à(ã8éGÁQÁQp‚£ÐÕá(„G!8 ÁQ!8 !8 ŽBÁQp‚£…‚£‚£à(¼q„à(8 ÁQŽBÁQp‚£à(8 !8 ŽBpº:…‚£à(G!8 !G!GÁQ!8 ŽBp‚£BpBp…7Ž%¼Ž2G!8 oŽBŽ‚£GÁQ!8 ŽBp‚£BpBp…‚£à(G!8 !G!GÁQpBp…à(G!„à(8 ÁQŽBÁQŽ‚£à(„G!8 ÁQ!8 !8 ŽBÁQp‚£…‚£‚£à(8 !8 ŽBpöŽBÁQp‚£…‚£º@G!„ mG¹|ù¢öíM¦0;ʽÕ8 ÁQŽB¹ªÔEz{»l6£ÅÒ" b4ê ††ÖVÐÒR+47×46VtvZd˦¦*…à(G!„DÈQDPdˆ§»Û&"ÒÑa¶ÙLŒíí«µÍá.b*²¥NW„£…à(„9ŠXˆJWW{¿ \³EPÌæf§£œ?Ÿ‹£…à(„9Š ñôWPìv¢àP“¦~eÐG¶,.ÎÀQŽBpBH„E& ¸Žï((jâDq”üüT…à(G!„DÒQŒBnn†› È¹•‰´Š£œ=›Œ£…à(„9Š|„G¼DtDAFyñç§£œ9sG!8 ÁQ!rñ¥|âª)®‚"…eÎ,ŽBp‚£B"ç(âʧx§š8¥ßQªŽr G!8 ÁQ!s”jùŒ±§¦ˆš(´µÕá(G!8 !$ÒŽ"W•ÁÑ'Ω²Š È„å ³8 ÁQŽB‰¨£ˆ‘(Se”‹â;E&¬Èåðq‚£…QGih(#Q>oìj'Ê·öÈ„½þüUæÌ…à(„H:Š\aVJ)2㤟粬DPäê)²eQÑ …à(G!„DÂQ¤ˆ¢qãÊʳ2fG©12G!8 oŽBŽbÿ¦žòòS2ˆ“››˜} +kŸûsrÊ A¾wG!8 ÁQ!ÑzöÀQŽBßQ`Ø‚£… ]GÀQŽBpÀQè-Ž‚£à(€£GÁQGÁQŽBpÀQÁQpÀQp‚£ð8J:g[ð—ÂB…à($ÌŽRX˜^T”Á ´S\œ-§…à($¼Ž¢Ôl‹Š²8í€6AÉ xŒG!8 ñÏQ”9é Dz`£<8 ÁQH€Žp‚£¢ÄQnÂQŽ‚£ G¹#G!8 oŽ8 ÁQpG!Qç(0XpZ…à(>G!8 à(GÁQG!8 à(„à(€£p…à(€£G!8 à(„à(€£pBpˆ€£Üøóó8 ÁQ`H8Ê=Õ#FÆã(G…à(8 à(dˆ;ŠÜ((ÝŽB†„£°g!„¸G!Œõc=„à(€£pBpÀQŽ8 ŽBpÀQŽ€£pBpÀQޱè(7ý¼G!8 G‰ÃQŽ8 ÁQpÀQŽ8 !8 à(GpÒÖRÚ¨;W_“WWªË2‡ó·HsjOK»¤u4ŸæŽBŽ•È©¼¹¾`úª?~tþˆ_MŽ n=ë……q­Eͧù€£‚£D%ò§tQÌÜ”ž_3Ça©®UZ4cÕÎÿ’¦ùùù€£GêŽ"C§«þ,¦r%í\•´Ël¨¤ù4pBp”¨Dï¥<~åÊeÁ‘K1À¥K{º:¤]V³ŽæÓ|ÀQÁQ¢µŽ"gó‹ö\ˆúº»:Ú-iW»¥ŽæÓ|ÀQÁQ¢ØQúúzûúzbƒÞÞîN›ÅlhÖÞIÓüáÙ|ÀQŽ‚£D£ôôt9茺»;líFckƒöN:òÍ1bÄpnþy÷G!8 ŽŽ¢œâ;‚d„K‚¶Àèî¶ÙÚ ÆÖz:éÐ4_Ù*?¸>ºš¦·;˜gó«ù€£G‰ G‘“»ýü Òµù !¡««½ÝÚfh©ó§“Aó½î_û$|û*’ÍwmE[ÌSùÕ|ÀQŽ‚£D£8ÏïÁ ]‹×•J<·q]éºMtvZ­–Ö¶f?:é4ßëNðÕFeÁµ’ßáæ{}7{Ó;$ÈãÁ¯æÃPt”£¾ÐK9ÏïAâì]¼Þå¼U_$‹¹¥µI§½“Uó]÷€ë®ðÕê·=ÂÍ÷úúµ¼Å^×x}†°6†Š£Ü[=âŽx…à(à«—² –Páèf®-¸ôÖŸßåuçÊ`èè0[ÌÍ­MµþtÒ!k¾[œuk£ÛNð|`T4ßëçõ ðMÕ®ð«ù€£G‰GqžßC…t3Î[×5žw¹nl6“ÙÔÔÒX£½“aóÝšã¹Ü?QÔ|¯o¢×† ø¦‡jWøÕ|ÀQŽ‚£D£H…\°ÙÌ¡Bºç­ëíËÓÞn2›šõ~tÒ!l¾[|íõý-Í÷úú{ÓCµ+üj>à(GÁQ¢ÂQ®ý  ®ÕûWz}`/@¡½Ýh266ë«ýé¤CÐ|_MóÚFeÁëΉ¢ækl¬–7Ýë½án>à(GÁQ¢ÀQœç÷Àjm3ôM UÚ;éÁj¾tÃùùƒþîŽBp% Åq~7ÄòÑSCk}cC…£—ªÊÍw8Êðmþ ¿û€£G‰G1›Æ&Ád§9z‘&´Ù»¨Êºš{…ÀÒ@ói>à(„à(Q‰¾öÌí£g¥ÌkЕÕÕ–Ô×–ÊBô"¯_W]TU~61%EÚÕik¦ù4pBp”¨¤©>ü‚¸Q¯¯Üœp¨¬ ;Ú)-È*ÍÏeÛ–UÖ/Y·f±ÂšU W¯|wÕÊwB‹8†˜Æº+lüäñŸŽR\ZtúLnÎÉ,…¬¬™i'2R…ôn$+¤¥ÛIO?îÂ1;iGÓÓÕH=¤æ 5õ`Zê§ÞIÙQË>WR“ÒRN¤íËÊ8 ›s¸à\²OGÑ7êju•UÕ •åç+Ê”œ?_R~¾ø¼ÇBù×(Î~‘3NÊËòÊJOŸ/ͳSæ ô”P^zÒ’œò’lˆjÊŠ³ÊK2]9_*k2„ó¥™åY ÕÙuÕ§|:ŠÑÔj0¶´¶5]£µ±µ­YnÕ÷SïB :5.TÛiqÐ\e§¥ÒIKs…ÐÚ\î¦Ò~J êhi,þ"ENšõ ùÍ -…­ME>ÅÚnüVƒÕÚêw,MônXÌ êÜ0›tnXŒÕ_¤²ŸŠ`8}ò°LÀ òI †á+&C¥`6T|‘2WL†;m¥‚oGq‹ÅÎ5#¹¦ ^°˜]hpÁî"&S½àê"&c­;†j•N”û æSLy9‰®Ÿ(à<Ê\(ubl-LmÅÂŽâöŒ#‰Úè°³’…=»·Ïž5sö±Z­žGÀ%ªÏáw”Î\uПèÚ¹9‡œ=ОÝÛ¦NšJ†}ÄQ<èy„ M5‰öó0@ Žr‡oGùüŸ„'áüçò'?™}ÐÙIE颬dxG޹sçz!C¿»ŠØ?œ<óð|~ Ê`œ‡8eĈ8~åSg$=;… ù Û(€ žGˆ¯#YYp=8}mÖ#Ü/Gñ|ͽ-Ïão»‚ÙXåüƒ£øÚ*'g¯G²ç¡î¶±çÃ=Ÿ-øwÄëSùZ£2(¦ýߦ–W¦CG‰„£¿»#ã(ôÓÃ6—.]R4EÝQ^:ŽªPƒè(^õ`9Ê t!!qí=®s‡{íò½néïqä÷úïÎ_eѾ+p”!ê(jÿ0|ÿóP9ƒka• ;Jæ…¨9ŠË¢rÖv;n5n£òg«ç½v^K5ÿöúz´lãµPiÈ€?úz%Zæ‡zu”wŽ–?Áýzläg­öW.}–Z¼GcÝÎWÑÅ_AÑø‚ý2'_».„‡ú€}ßpv”£‡6=iGQ· íz0Ù'öá(Ä™¾¾>7Gq=BüëQ9Qªôî*Utÿ.4þë ÉkÖ2’¥ýiü#U}c;ǯ?ú5¾Ñ6•¡é(êJ¡Q;ÜÏ!q” Çaýíž<ÔÃÚÓň£Žwœ#8Åë𤖪I¨*‡'Rwã(Ä™îîn7Gq=BüêïÕ=F££øuþRÿs-ÂŽ¢þ¯Øó^-§cí®–ã—ÖhÙi‘¯Ì?Öãõ/x-Õµß}wQ¸E½æµ$¦Ñ†ý=ÔÕÿ& ÓˆAlŒõ(gi5G‘‹¶™MÁÎGÑR;ðH ÞQŒ­eBòñmÒfeG!NGñí¦± ¬yÿÚ5M¹Ò¹²¬\…ÏóÙc‰ žGˆ‚ëÑè\ãz—ë×G¹mé¶àöüžw¹ý^×{}­ñ÷5{ÝÆ×kvûužõºÆí^¯?ºmì õߥ¾s¼î+¯/Ãëfê+#CÀça¿&fú[Yð“Æ*¯PåãúÚ?2­¥§ígÕ?í¬ñóØÑ8g6üy±sŠTPœËjŽb44CáÌÁÿFCs± \é\Y– áËuf¹‚‘Ã@.:ìy„Ä6òo*¬ÛCháZø0¸Dâ8o*Pþt´—OœËM>¥­­Zˆ‹îÉW< ʕΕeÇ÷õlãûz†yä[u®GHl#ÿ¦Âº=„úH\B{<·69n ú,pÿ9úsN|:J“¾ÌNcy?¥vô®”9il(ñ Ø‰¾¡ÈƆBA_ï ÁNc}ƒ|A_w åÇÏ×ÔŸ åJçA> Ä0!a¥Ñ¾î´ Ì;iÔ”eÇúÜk˺\Á§£ÔÕžt5ùµµ×P~trm}ÍÙÑUç LU®êSîTt¥&”«ˆÖ÷$Ãp„„›Úªl缓šª,ïË•™>¥ª"oÎçz¥ò|Ž*ÙŸSžåNY†×e*ì¤@4RYv‰ü¨Ì;Qîú|¹´¹4Õ§£8Š%uµ…uµEýz"ÛÔ÷SW“ã…kœQ£ú´šê1M8GN#*UyörKENME¶G¹í¡&ESn|Ðö'”Ÿ¦~ÁQn¾¯òÖ‡u_~ âïþÏùÀqoM ÈK‰ î ”{j"òm èu¼[;Z"ÀDøuÂn©‰,ÑpTü:#}–ˆõýù×o_äß…ˆŸ%î*ñ“ä#7;åö„#ãÄ÷/D’ø@‰ìë¼#²Dþuö.Dø×ü¾ß ƒp`öFD–ÀÏÀ~]äá4Õ¯3½C„ÿÅÇ:qv;‘…ï­w8Ê7×Úÿ`(ñÿ¸ùÚâ&ŠªIEND®B`‚bitpim-1.0.7+dfsg1/help/ref-settings.htd0000644001616600161660000000607510667371563016240 0ustar amuamu#include "pagestart.h" SCREENSHOT(screenshot-settingsdialog.png,)

Read Only

If you tick this box then all actions that could write to the phone are disabled, both in the user interface as well as within the phone modules. Note that if you switch off read only mode (ie allow writing to the phone), then you must restart BitPim for the change to take effect. (This is by design).

Note that changing phone modes remains enabled. This is because reading information from most phone models requires mode changes. Rebooting your phone will reset the phone back to its normal mode.

Disk Storage

This is where BitPim stores the data it is working on. By default it is a subdirectory named bitpim of your My Documents folder. It contains necessary folders such as phonebook, calendar and wallpaper. You should not put other files in these folders. Every time you download data from the phone it deletes ALL the contents of these folders and puts new content in them.

Config File

This is the name and path of the configuration file that BitPim is using.

Phone Type

Select the model name of your phone. Only select the model that exactly matches your phone. Selecting a "similar" model number could damage your phone. Use the "Phone Wizard" button to have BitPim help you choose your phone and select how it is connected to your computer

Com port

This is the serial port that will be used to talk to your phone. Click the browse button to see the list of valid ports on your machine. The "Phone Wizard" will let you choose and test the Com port.

Com Timeout

This sets the timeout value for transferring data from/to the phone. The default value is 3.0 seconds. For some phone models, increasing this value may help to reduce/eliminate "Timeout" conditions.

Check for Update

This sets the frequency with which BitPim automatically checks for any program updates.

Startup

Enabling this option forces BitPim to display the "Today" tab upon startup. When disabled, BitPim displays the last tab that was previously viewed.

TaskBar Icon (Windows only)

Enabling this option places the BitPim icon in the System Tray when BitPim is minimized.

Autodetect at Startup

Enabling this option causes BitPim to automatically detect the phone at startup. If disabled BitPim will use the phone settings from the previous time it was run. Disable this option if you run BitPim without your phone connected to prevent error messages.

Splash Screen Time

This sets the period of time (in seconds) that the BitPim splash screen will be displayed. Enter 0 to disable the display of the splash screen.

BitFling

BitFling is a way for BitPim to run on one machine and communicate with a phone on a different machine. The checkbox and the settings button should not be used if you are connecting your phone to the computer you are running BitPim on. (The usual case.) For more information see the BitFling help. #include "pageend.h" bitpim-1.0.7+dfsg1/help/error-zipfilerequired.htd0000644001616600161660000000025110547562471020143 0ustar amuamu#include "pagestart.h" SCREENSHOT(screen-isnotavalidzip.png,)

BitPim only restores from zip files. You need to select a file in zip format. #include "pageend.h" bitpim-1.0.7+dfsg1/help/screen-smstab.png0000644001616600161660000017267510410665462016401 0ustar amuamu‰PNG  IHDRéúô‚š4gAMA± üaõtIDATx^ì œÅõÇGb¢ÿ$MŒ&1‰˜Ä3êïÅE”[@î¹ïKîEnX`ï›Ýeïû¾ö>Yövÿo¶°m«»««g¦wzfßPÌg¦§ªúÕ¯ª»¿õöuõu³6—˜D¯¯}¯»îØð]{/óæ®»öãM7›?÷ºÁô“Lð~Ý 7|×ù©ãªéúëM×›LW¿¯¥¾à @BóÁŽ/T0´×]1´yh*€ ¾_Rás焹L¾Áá|“éJ‡é¦.n¾r½é¦Ÿ˜·™:Ì©½‹ºoüÎdúIW柘ڿ3]®õêŸû]G ÷wW;¿»ú ؤëÞHƒtÓÈæ^“:{ÏúîÿšÓ÷Àªïú®ü®ïÆïž\gNOo2§g·(&’*€ _ÆŒ?¡¨€A0þ™-DPY<†„œ…wÂÒÒd&í' pHä7}Ñaz6ÃÔ7ÆcÑn×'æn½Æî@í×\à~ýM½¦\…¬¾ß»ì;H@ð[ûC”'I¼?£¨*€  ¨*€  =P@e’HÛÉg‚àÄNˆZH°Qü•8Í…DPR¯ L/šžÊ81{óñM³·”šžK0õ/7½[pÝð3L#Ï’Ãø–&\š7Mî¼aÒwÈgx6’dãM¯‚ÛžäÄ„  ¨*€  V*pÝW1¡¨€ñ€#Œ$ÀLÀ˜¤ëÆ\¹~øåF5ß0¼éº!-¦O/˜>ìzÿè|½¶eH£‰¤Á æwøu@½iàs‚-Þ«0=Ÿizºèø´uß³ûëɦK~HŸÔ˜†ÕŽ‚'ÉÌñ Éü+Ø$¤áM`&T@PT@PT ‡*ðYà †ž¹nh=„·@2}XcXmNª®%€r’Þ-3§þ¥®ëWdz Ržéå\s‚î%šîtUÛÇËÛ-i}gQëóZŸŸÞòØø ~Zñë—¡¬ÀîVUìþº™Ýëæ?xK“û¶ÆËÖÍ:³bRýâqu FÕÎø^7{híôk§ ªžðNÕ˜7*?{¾lÐc¯=xä_¿6[13€Ýÿ'ò»ƒ+Âá!@öñ^Åð¸»u±»‹«Ùÿð}2|×WWøò€c|ð?ò»#!¡¨*€  ¨*€  vU¨wà×­@í«Ž]ž¿÷ÒÄ­—Æl¸ôùê¶O€×¿n{oaëÛ®­¯ÏiymŽ9ŠœîONjþ÷þ:´âÎW‚ÍÄÜe¼µ•ô« ì^;e Pû¹=«ÎnšfùÄúEcêæ~^;㓚Ƀj&¼W=îíªQ¯WzÍE3äÙŠÁO–¾ÿïŒ7þêþèfKÍ0'Âîï~-fæÇìn†r7—pWq·‡ÿÁn2'€xòÞåƒïÂwWÚïn×~úaÁ4@PT@PT §*ÔûÎÂÖ™»/ÍÙc÷‘ë. ™Åmï.hí7»õ¥é-ÏMnyrBóããÙ›ù¢¹ïØæ‡G7=4¬ò÷o„ˆÙ]\‰êͦt%ß³{Í„wÖÍlØ0À½5)ê©™4¨fÜ»U£úU~þRå§ÏU|ôdÅ ÇaûÅ ÷ò}KÞ}8ó͇Ž=ù{vÿ¿³+þ)ð»™ÿ@0 Ê5܅IJ;ð:Ä´Cˆ7¿‹ð=|ˆËˆŽÅ»‹[ÕÔz5­ôŠÀÓuç;!IñZ(réÊÕüêöUÞU‹ ££¨*€  =E·«L˜PT@£€—p*ĸÙåq¶òÒGànwmpyz«Ë$÷–k~xlóßG7?4ºåï£[þ1úÂCŸU]c÷®ÝQ•¨²;]É÷ì÷§žY2þÌò/Áã.TÒî/W~êà^þþ¿…íåïü½ädö“c÷k÷ª»ƒ+Þ¥kIˆ#Põ!]žõpâbÿƒ‹Àî×ðäVò8ÞÕ^K«ÉŽvç"H~Að¹¼î9½¸×7^þé£Þð9¶à2½ð÷Rdü4¿ú³mðygP“´HO9G÷Ôù1ö/*€  ¨*€  ¶Rxò¥™-Ýà>|Í¥O–µ}°¨­ÿ¼Ö×f¶>?µåé‰-ŽoþçØ–¿nypdË#Zþ:ªå¡Ñþ:¬òwoœûÝÅ•¨²;]É÷ì^5ü%ˆn7‡ÊÌ^;ý¡žÊ¡ÏW~ütÅÀG÷7(ïÿ×Ò·Êì÷×cOüÎlÉãyfPÿKš(fFÌî0ÉPNw7¸-µ ÍͰÞõ>Ädr½æ}¿îæ.æ{UoøÃTGð]`w1—ÿôÉ@òÀ°ûµl}þðùÎEðyÞsðÓ… —nz#—*b«¾ÄzPT@PT@œ[Âî°@ä°Uæh™–@Œ{Û›sZ_žÑúÜ”–''¶ü{|óßǶ<8ºåO#[îÑrÿÈ–¿Œºð—Ï*û:ÍîB%P'£ø•®äõkñîÀîµ³†Ôª2ð>壚ñï °Ñí?€{¿?•¿~_y¿ûKûÿ%ë¿â·×Øý?y ì‹PÂêìƒjÃɪ2€ìß{ÜÁï.fw3ÍÿÁ¼Ž$€;,ÙÅî ¦g~Ìîõ'3ͫЈƒO]0Ë4 ^C‚æ+=V3îíÚIÔÂÂ2?¨ÿŽù M#_°¹êƒ‡ªÞýsUÿûªúÝ]Õïžò7ïÍyõÞÿécf÷§‹LO曈ëÖ™é½âÇì<¸î@%‹É˜W˜ù~‘™®{UÍ[~¸oÕÕ5Üͼï7 i2}tÁœ6 €,Y_ ‹Ïöz£@ü“ÒçQ;Zꚮ«ø~óÿâÅÙ„j¡*áóï~{óÈ ÈŒ @PT@PT ùÈØæ×ç¶¼·¨õý¯Ú,jƒcú¹¶¾2·õsZÿ;«õß3Zÿ>­õÏ“ÛîØö» ­¿×ú»1Í¿ZýËWÂÌÄÜ–T%fvW®~¥+1³»Ùy]þÞ#U£_¯ùò½š‰ï×~9–©þ¢åï®ðçšwî­~ówÕý~WñÆïr^úÇ¿~i¶ä©rÓS¥fvÿcŽÙïnf÷{2ÌD~wIïbwóÊî]Ñ2]a3fdnW…•ݯá{ךà–VXŽæ†¡­× i1}hN?8×»hž|ýés±Âg³ýûíâÏ$gAuÇ‚­…?ûûþŸ|Ð Î&®Véóµù™E`BPT@œCM˜PT@£€‹Ñ k·¿9¿€ûÝE­ov/h{e~ëóó[Ÿž×úŸ9­ŸÕöçém÷NiûíĶ;Ç·Ý9¦¹Ï§5·¿ÞÅîæãŽª¾2*_éJ4™Þ>ÛËÞú¬Ý^=öM öš ïV[÷šáO“ÏÍMµïÝ[Ûÿ·5ýî¬|íÎÜÿõñê{»Ù’çjM.ef|ÿG‘™Ý½¾‹Ýá»™ÝëÍaëŸ^€(vxx*ñ²ü5_;Ð<,/3¤ËûÞ- DšýîC[I‚À>S_Å?É~&«Óüô…¸?®ýÙ afbþÞ%MUòæ‚Ö×][_žßú¿ù­ÿßúèü6¡(EWì>  ¶—¾~Å'OW|¥ú‹7«ÇõÿÜGý¯føk‡ý°ÎL]ÿ»jßèSùrï¼gáù÷Ÿ]cwÀwð¾ÿÀîà7³{=xõÜ!‘›}êC®yÜ…;VÍ+»“ÛXaùHz7W·pøtýðË®ûÜœ~pйœVn¾µbfÌþõ!?úéR»9£t;d'¡6qµJŸ©²ø@PT@PT g*¸x÷Ça!ÈÿMkyuö5ç2EðŸÛvÿ¬KwO¿ô›É—î×vëˆæŸª¹é¹.¿{‘J+ym^Û+óZ_œßúœkëSó[ÿìþ}%™®œ÷ša{É‹w—|´rØÿªF¾*ØP=êÅš‘ÏÕ|þTí°ÿÔòwa{ÝkwT¿pkîS?÷üÛMfK^>g¦t‚ïœêò»v½Æ0óépÚ™×w7'ÓWóòí³™Ì!ïð°Up½C˜»‹ ÀÝühU7—ëÇ\½nÌH¦áæµ_„zÆéV³+ý¥D1ÖÃçƒ ×rRÛÉ@HRv§ò ¨‚ø@PTpLC:0¡¨€Vïtñ£šŸœØü¿éòìþ×9—þ4ëÒï§_úõäK·}qé§Ÿ5ßø~ÍõÏvùÝ»Ž;žJÄèKW2ø²iÐ%ÈpÚåβ·ÿËA¾7Ÿò-Õ߯þ\õçO× {¼vÈ#uƒÿZ?èO°½5`OÝ+·U¹ü4÷Ñ=¸þ»¾»?^oz(Nˆ™)7½ë´4v‡õÝÍÍàŒîæÞåe‡8 u˜qëBvW3µ›³ q¹aüw×}q@<$úr-õ=üÓ7³Èvá'ò¹×G5$µ]ÈL2SùÅÛ©²ø@PTptÀ/† @´*Ôû«÷/Þ?¬¹ïØæ'&6?=¥åé)­OMmybZËcÓ[™ÑúÐŒ¶û§·Ý3­í®ImwŒ¿ôóQm7i¾þÝêëžîZg¦ë¸³¶˜ 6;ï‹ÿû+›){¯oÅGOT~òtå§OW~òTÕ'OT}òXõÇÔ|ôPí÷×½wÌ€Ó½ö…ŸW>}cο®?ñçëÌ–¼qñšëؽoL»ÿ_ªÙ ßÅîî¶PàNèÜ îá®ëäz—»>˜oT…<°ñ†IߙӸ’£Ÿ(Ñ~T@PT@PÇU¨÷¶þg÷ѹ?;ÿÏQçÿ5¶éß_4õýâBßqþ1áÂ_¿¼pÿ—ï™pñ®qͽÇ4C´L¯!¯ÿð¼©_¹éÉ@(Kne%‚ó>ï±Û Ÿÿ]ñž~çŸ%þUúÁ¿Kô-}¿oÙûÿ(ð×Êwï¯ìOÕwU½Ò»êù[+ŸéUúøõéÿ4ù£é»|v¿3ócv'ø~è+nú¢£×„NsšÔ•¦\¥ÒM¯BºÆî?Æw1ÊãgT0¦Ž{RFËQT@P†Ug;ü¤¤÷[%¿Prï‡å÷.ûóÇ¥\öÇOÊïý¤üîOÊûiUŸOªz\}ÛGU?Xý“÷ª¯{³Üôbæ=oìne%fçý¨$ùÕ“ïôÌoS_¸7õåûS_þsêKJ{ùé/Ý›ñâÝÙ/þ6û}r\zg?}[Î?ÍþÏOÒ¾.⯦£ÿ½ÇÌîo7_s½v7¯)bwXZ‘°;¹ýÔŒïc.Ó?©“ »¸ãHBPT@PT@ì¨Àˆ-iM¾yë³~w¼pò—/ÿêÅÀ_¾ØûÅÞ/üÅ‹¡·¾þ³OÝüB$Üœzóá×=iz*ôž7SóÎBYb¹U•lo&ì>bkscNšï øÛ­îßq´ï/?ò«ÃÿÒý‘ÞÇé}¼ï/<¾Õë?óùûÍž½ÉóÁ|¸îøŸLîÿ½§>+uÄúóJì÷ªvÅ»w=_ ÞáqKædvÀ7_#x€ø.Ž'醱íÒDÚI|ö˜PTÀø h Äü¨*€  ¨€C(pãˆöÛÍk¼hzJAYÒFË+ÙzáÆ¡mæÅj_¾ñã¶›®=òˆß˜ª†÷ßlúQ¼»ÈïÞÅîý*LïU˜Vw%óCšLCÌw¯Þ0¼éZ2s¼Ì ËP Inêa«QTׯ@Pã+€WUTp`U™®›Samóòð°@ä­¦mæ4›=èä|ÒÛçMoœƒ§8]û¢ÛI€;•~3SÚµLd©éé$Óó©×½vý‹ædz-¤ëú‘dê_jFüþå×Ò»e?|&áWL¨*€  ¨*`+^‚g°`BPÃ+ ýz…üÑú|‘É¥+=ý}z¦àÚW²ÙïOæ›Óãyæ÷ÿä™?À;€º<»?Ÿjf÷.|žp<•Hsò‹ þð« ? ¨€ñ€ã*€ \k×Yr‘Å„  V@Ç“ °;ÙÎY¹>RF²¿jÝ—°SY÷¶Ø~é~©}1j ~²Xv÷IÛ¢‡øô-9œ]ƒÙPT@PTp&´ùÝ•¨šrµj‚<ÅŠá’¿NN×/E® tVío6æJw$år1ÂJíWªA«&âš)›e§ ”%ü»aj¡´ Y5T5Ç ¨*€  ¨*€ ô@´±»,à diUŠƒ<„ÇÓOTÍbTϤÙ,ðÛ„Ý…F)Q5¯y¡ê—îEub¦‰ÝÅ&)ö¬FS£03*€  ¨*€  =A[²»zu3»³ñ×2°&³’O]Jº°…B[½Ù=1ìáéeÙ‰“R_[&;˜@PT@P'S@v·ØAK¢^ùëdð±Nì.ëcVòs˶Q–Ý9¥kMã’S‹©Z•Ý•zVk/kj5fFPT@PTÀѰ»Ð$/~Q(§µ€Ý⪄ 5U.®™"cÊNqµJ¥-’åT±²öËÚ m =SujÒ\iJ í>Û²»t„oÁÈác˜@PT@P§Q@»;M›¥!Z‰ÜQÚEÙÙCšé ½ƒf£¨*€  ¨€¡ÐÀî”Ü&È¥GRç½®n]il¢ å·Õ ÑOp¥?n¨Šo+¹l%Öƒ  ¨*€  ¨€a Ùý§ÿ.è3¦ñæņµ CPT@PT@z¦fvºÈô{7Sï•&Ó]©Èî=s`«QT@PT@Œ¯²{žñ; -DPT@PT@@dwdwT@PT@PTÀ1Pd÷ïð…  ¨*€  ¨*€  FR@‘ÝÝmÅ„  ¨*€  ¨*€  ÆQýîFšI¡-¨*€  ¨*€  ¨€²ïî±Mxs*€  ¨*€  ¨*€ìŽìŽ  ¨*€  ¨*€ 8†ÈîŽÑO8ËDPT@PT@Ý„Ýùo¡ÀA 8®Õ9ÕÙ•åðžSS™ã¸ AËQT@PËàe÷—ï¹’eûè¶Ra¤Njð³;Üü “ ¶­¶º"77;û¸{®ëüÂ7û•ÿío5½{Ÿ¹á††Þ½þò—š~o”Ï›[xìhnN&`\®mwMjËÎŒ>Z—¤Ç.Œ\geEvvnZbZrzVJ~Azmµ@¹¦2·ª<§²,»´8»¨ 3/'3+#33=##Íœàs~næé¢¬ŠÒl#+‰¶¡¨*€  6TÙ½ÇùÝÏîÀâÑ‘Ù7ä zúå—Êûö­ùýïëo¿ýL¯^g¯»îl¯^ ·ßÞðÛßÖýóŸÕ/¿T1dHɆõùQ9yZ ÙÉ^a~rÄ©“PUuuuccãùóç aKtT(üªu/Ž•???Ý;4vÖ¶0×=1ë=27yg¯=ž¾ô`Ò„ aS6…xžŒÉÈN­Sàøød›Íp*˳KгÍÑã3"N¥¤zœH9r8åÀþ”ýûÌéÐÁOÔ“Á©É‰…yYPı¤FkQT@P @vGv7–¥Å9á9sf=úŸªë®;Ç“þõ¯êéÓŠÃCsÁ;«é²{dDHVVf}}=€{Trî‘ ”o}¼ÂÓ ‹Ëêêê`cÁ‡hÚ OæÂ¼d_¿c‰‰§xòë”' "våá¸oC üSªÓjRªý’«}’ª½«¼«ŽF—mõËYr aýÁP)¦ŸŽ\±'Èzà \ìi)áai^ž©ÀèÛ¶¦¬Y“²lYê×”9sRfÍJ™9#uÆôÔ9sÌ[V¯JývOJHPjvf:à­×k@PT0¸Èî,rÍ.8哸Iœj«eè6RÙ `7w¼qbf2J7zç¼87àƒe¡ZE¨®Ì9°/ï­·Ê~ý«†olàwÈsãgï¸ã DѸí6‡XðïTÌîå%ÁAþàhÏÎ/Y{0rÔJÿi[N.Û½òPìB·S#VúÍØ™Q[w&///Àß›/ª9ËJÒ÷p«¨¨¨ªªJKOõô:á:ìRqq‘;ö{$&ŨVΟaëÑðÍÞY¡™µ!éµAiµ©5]à^å•På_y"®âXlÅÑóû±Øò%‡’–š™Jê?ä9Ç-aí~kg5˾vð²<ºnmêW‹RÔ§NM›0>uìXs=:uÔ¨kïða̘Tø ò¬_—â瓚“•ÞwþÇœ¨*€  ލÍî7÷Íï3¦ñæÅTcå0•?:ÉCs­ÑHµN­Fª‘~daàâTU™)-©lPPµr­Ät.-k_v/«oÞZ4bCÔÿ =ü›É^w Ú¿Ä=í_<4µñtQÎáCy.…™n€ð.§û÷ÙÎBÍ eöåæózßÅìô—–?yCÐÒý‘>ѹ)ù•EU©…•ñ¹eþq¹Û¼â'nÜt4 ¼ò€ï§làcôÉÏMðó÷.))9}útiii@ßé¢%õBBOó;›sÄ',99V“ÈJ™ýNŸŸÌ¨=™Ylf÷Ý=ªNÄW«p©8]~(ªì`d|Ø”ÿ•[t`DlHTÜ´mQ»BŠ×î¶Ò˜’¢¬˜¨ôÛSæÍKýòK3¬ ‘iøðÔ‘#Óà+y'‰ü@?iRêÆ )?S”Ÿe¥ X@PT0²\ì®ÊÄÒØƒ–<°Çw±m[ήÓ#UÍ3,»KcÖíÂîYµÓv&<>Åý/S½!Ý»8>ƒÇ½ììùÑ›£ ƒªÈ$Ü•’óâ ÿ÷õ©ýÄ¿óÎú^¨ Ì­©âº{•Œ™Wî½w܇Ba±nAy1¥S¶Dô›éñß/½>åÈ&hjzrjFÊÉè„õ‡"¦~¹òÄWî /dÿÚ={þÁ̹2–ÏYå™7mOª™Ý÷Yëwïb÷ÔùóÍìNwp½ ”ͯXnö¬oß– €¾Ç-u×ÎÔÍ›R/N ¿;xßî—.IðK…ûVa*h½,X*€  ¨*`@´±{JJ íÞþž×),ž¼ëu¿ìoöÇ|µüÐȲÒkA±V¶Ÿ]§ÀîüFªÚƒìN$jj¹ìP!1ÀåÀë#¶Å,òÊX˜3Û7k¬{ê燒_Ø üîôåg ëÎåÕœ.ªå ›)+ÉYµ2ÿ‰ÇUnN­«ë$öÔÔt2|óp“ëÒ%%EÙl|LZZø¹}ÂS§|–QS\{±üLsUcKí¹ÖÌÜ’äô²º¬Ó•i…•'óކ%ã»`g(ܺ –(F¶°GWRR„¿?SRP_YY ô•ÖpÈ3øTR^plVPLf@DÊ~w?Õ1Ì“aö¶Ð½'óßšåùÜ—î¯Lóü`ŽGqQUâȽNFµ'|Ñ”Už¹ dÍ;1{_úŒ½éÓö¤MÞúM`Ñš}ÖÆ™cf¢ÓÎáÎTH«W›a–ñôH J…pš„¸ôÔdHæÅgàfV‹|ï;q½ƒ3î[…û\«*4ÜöÀ#æAPT@ ¢€6vϺLhJ¾Óì¾óÕCÉ_팙z€{võٌʆ¤²z( ܯªszjÜŸª*S_ÝâÙ™aíÈ”DzŒ„˜¯?1hÊvŸÄ¨ÄÜ„´‚ À÷³­I)¹1ñ™ùe5ÙEieq'ÂS'Zå_RZÞqXý]µu²9k•‡žü|{{»ƒ;ÿÌ™3°*¥ŸŒSÿñ€ÀÈTÏxŸÐ„#^!)6 v»6dôšÐ~³|Þ_4haÀ~ߥF•”džŽ·áÔZ¯<×C™³ö¥Oÿ6mª[*°û¶ °;iÇËû]ׇØ1fo¬ëÒcâS<­”]çìÎm¤ª=Áî„ÅmÅîä®S‰—9¼CÜ ¸ÏS+âO×*¨ñÏ®<–ZìþMT!°;¸Þvû tp·µ“üPpð†¨MUç£Gòž|B}EÈwßmj‡Á3lvÿ÷¿«`½ö~…sðÀˆ2¿ÒgÔ<·€ð”àÈÔSQ©‘±éågZÂO%B%¹§+² K“² CbSý¢Se·™Ý·[ïw a©™ÒÓY°L$$pì+­–ú°Ä;,G66ïK–¤ÂJðúª£3 ¨*€  ލ€ì. ò¼:¿ÏðC¹é‰‘›ž„´ôÄgnñ³VütEÈÇÜâf.ñr p…ÒS]¤Úi­SžÝEFÂ..Þ‡ÈmËîàbý«`ð ƒÇà›D¿@ 8ÑÝsª<ÓËÁõ¾-ºh]x¾6Ñ2à˜w;P;ä„‚$ó¦à\ˆ´Q=0æÎ)zðZU¿;†?ý©fæ óÓ”‰ ˜‹/zxx€ßýÓÇÇÌwó Jð ¾¶>cYÝE?¿p/ïÜâÒÌü¢Ø´ŒˆÄÔ¸ßÈÔ¥{O¹%|ûûY¸Xä©SAyy¹ee¥EE…YÙYÉ)Ip‹*8ò!Ø^°ÚLzzú©S?8õ=||C"Í“´~™™ ¹96»¤¢,Ëeü¡5"ø:ð½Åïm‰¿Æô~ÿ5U\.1­u"»ó€¾jÌ  vXfð:Yä8¼éÀâÄ8NÂfvÇ»/ Îê•ñÌ×!M𵵇䚳Êç y‡¥ÙûôQY^†:®ØËÿöj9»·´´œ8q¢¬¬lÔRÏ¡3¶ís=|"ÔýDð±A%µŽô<°ÿxNAaZvfrfzljÚ©ÄÔÀØÔ¯÷„ù„§A)¹ÈžSÀéBóM qó'#~¸¾ÃS¢ÂO–•fxú:ý¬½TÖ¶O¾òŒLHÎÊIÏ+ÈÈÉK/+•YU(7Ï-aù‰Ü™{Í3Sºf í:yÚ&~wõ Dל.Ê‚UeàI«_}eŽ–¿;DÎÀ}®Þ^©NÃYfCPT@Kmìm“½WõÝå¿ß?gžÏ«‹üûðÎâÀwÍ)è¯ß^Ðÿ›®¾oÌóyeiÐÀ !_,>8¬´Tý?­uŠ×™á¼¡Vµ«¤13ååéÒR°Q¿õÝÁ­N^b46’fwlW,;ObÇ»Cˆ xÜëš.’È_Á ñ3ñÀå¾Y$lfs¤9lfè®8pÕÃv÷'óª!®¨òìO,lð&Xš†-õßÿ^sÛm*ObúóŸ›Ä•°Ùý–[þö·v‡<ûöì•Ý]·žºmå¦#{øíÝç¹w¿Gqí·mû¾^°<'?3+7#=;#!==:%-$.uÚæÀäŒ<ðÖûûY ––bþ‹DSSÓ… Èû¹sçàqÀÃí³°|zFú¡c×vqÜ; ¢L$¼ÖÙUÈ”8wÔþS¥àe‡ ™íAÅÛ‚‹w¸ÃðÝÃî5•9Îa‚`÷ãÇRÖ®M™6ͼ. YPn]…¥f Þ†§9˜@PTp84³»l ßYþÛݱ3gy=ïê÷ú‚x˜Q¿…Aýõ¢]ðÚ|ÿWæú¾¿Îðt¸ßxò‹¯Ë+Py$¤Ö:_ŸúÇÇïù:®‰²Tí-)»SŒ®ôUïg3é·¾;Ä»m ì.|g<¬×N"jÀ%\!ï3Ž$@˜;xÙÝI ¸ÛÚÉý¬W·´BÈ;¬)É–ºwoXRýaLüì MBêƒáž{Hpr L4u÷gVŒ›¼búìÕ ùõ)Å ƒßúä—Þ).·tfNzŠÙõžîž8뛑ïxb|¸ê(bdÈÉŠ ñMNN„Ç©B¶€Ï `?@vðèƒK>/¿ð˜·ÙÑwn±f_Œ²)é)┘–œ’DR|rR^ÁµùjMUÐ9#Œ±å‚÷²CŒ;øÔãbÌaî[¿1{ÜÜI°;ÌÀš’p¯jTD:DÌë¤V‹  ¨*€ ØWÛ°{ÿew툙:íÄÓs|ŸŸð¢kÐK®Á//0§—æþoª÷cNüsÔáF¼ÄÁÆþÇš“ŸMq{9%ƒµ¢œuŽùæéàÔC A­wwzvõ`qŠÝ«›` ,Ù~úÌ9¸{|ðà‰ˆ”ßQÔîvðÇ“ Àú1Åà•_fªE$!'{”w»-Ùjƒ:9ÙÖˆLMMÍÎ/™¸>xoØéã±åþI•¡éÕ±yuï½<àíß.>™_®wÂî[ODîñޝ©©`›òRz-E Žç’Ói§‹RËËÌUåf'‡€ðý„ÏIØ“tø„?ÄÇ[P3g‘ }6zfmôÌÜàARÆFLHK¦ ˜ç%°;»6 j½Ùî[ÍÊÈ JÅÝÁ¿>uªùæTòð&r£*Ü´zÌz ׈ÄfPT@œVmìNŔõܼ ã¼µô7[£&N:öø,¿gæºÌ ~n^Èss‚Ÿïó—ÏOüvðá;>Ø÷³÷Ün~gg¯þÛz½³ýgï¹kž÷« öØ©–Õ9ÿðû÷=Ó ì4ÛÖu3¢`äµ-èwa$x Dάd‡wHàp‡8xá†T¡UÞÁé.ÉÇC|÷µAàtÏÎËÈÈI‡˜÷¸;ÂN—Uîø[0£d[~~ÚQo¿-{=ܽC Od\2|ñé²Äĸ”dó½ªz¤1kN‰.‡Ú…´-¨øpTÙü]‘i™êámÄ$X~Å'07p÷õIY¿Î¼($: ;,ëïðl&ð¸Ã]ªßîI…õ%K‹Ñé®Ë8Ñcìa¨*€  Z°»ßsÏë_ß±>|äÈLðzh‚Ï_Æzß÷™Ç¯>>qËÇÇ>øØÏ?<úóA‡öÁþŸ¾·çæ·wözkÛMïnÿùø#}ýpùÑJ[Vç÷žúìW÷Ýw!u—kì.Ð<²»»Ã²î€ïÄõn¦ö.w»xÕv²^$ m‚dŽNYèþÈÚÉÚ‘Km‡¯ð«¿ƒ#Ö}g Íûî«ùÙÏlÉî7ß|æÞ{k9ÙÆÉð7ßLNN†póM‡£¾X{rðp×>žYóþ[Cô w÷”¬´C±S7fç—Âúë;vìðñr×z¼±ó„EŒ^r|ÎÖðþ“÷Í^}4*.å¨gPN^!,ÙÐpÊæå˜×ˆ´y½úäᨱûþˆÒÅ’Bc¯-¹Ã³G°™¿Õ_õq¶èÐÏÞß÷Óww÷z{{¯éÏNÙ÷²WøöšªlÖù¥Ûs;ƒ0t·>ffkø¸“©õ»WUÜñ-ªT3yîRå6xÊÅÔN­ÚÔ.„¶C„Ìýþ€é™wÞiçЉàk‡8xÿßÜYÐï¶È?ߺãÉWþ¾ü$Lýòüó•°2ŒêâØ™{÷>óÜs•üìN&{‰‰‰çΉËù|ÑñwF¯ÝáŸýÞ‡Sß49(:áP`Ìâ]!+öE•VÂí¤ìù·oßï•å¶¹-2èTÔ‡sÜíOÛ˜ÿÙò“oN94mÉþÔŒlجEøÞØh¾å7;Óö1å»ï )Þ˜;eƒúC[3s3OŸ¾v3Ú}!KvêÄî°ª <¡ ž¢ ww;¼—:k–™Ú÷®¦¤§fÀzð5•¹qæE#QT@PËÐÆî$BöD}x~Á_¼÷öö›ÜÖ‡úÜú™ÿmŸ˜Ó0¿Û€à?ñ¸õ#÷Ÿ<ô³Oýœ™áÖÿTü1¶ÅZëüðëÞõðO¤¶ýh DÑXçw¯ª”5ØØ=ìÎP̶ìíà}§‚dȪí$#„¶Ã ©Úî¶t[Ìm·ÔÜuËùÇn úù-sv¯¸W»=áá[ úò…­Ñàzg?aBñŸþ¤¾¾;?»ßsOÝcOs²;ÉF"g öýüùó%UÇBRWì·äØp׃Kv‡n?s26ûÜù&¸…4+Ë’±iÓ¦uëÖ­_¿~ãÆ5Œ)(ça™™2ÌÕ}ìºSC—‡²$ä¹>Ÿ|åÿÁ”íÞþAäÖUx`,'_^Qr2°¤XeýuÎ ÙF­>y(ªL˜ÙT´'´hÉÁä=ž§ÊKãO*ʳ#’2ó sŠOgG'%ôUàºæ8=REYvb|ƶ­f/»p[*ÉìÜ‘ObJMN‡Ý+Ëz˜„u¢¨*€  vQ@#» äßC°âï¹çù…7»¿³ã§àq7ƒ{Àm#‚1"Äœ†ÝøÞ÷¡Ç~½(àíqÛŸIL ¨V[å]k¿»Oæþc#Íì~h+{H2 aeg‡ÐvxH*/»+YÞîO_|qh¿~ù¹2P¼~äÈ‘ìÛ·‚gÀûõDGjXh¥´$cñ7€éS¶ÆOý&vüÚF¬ùï•ý§údÎä´všeŽqÏ/È'¯ââb€ø€¯²Ó2îpÁ©<£V™Ù}_XñÊ£©{BO»µÝ–4曤Qß$Âû¤]©Sv¥|¶&bÀÿWgx¿4Ýç…éÞ/Lóze–ï€eWƾóuø%¬°( ¬!ñîp7êܹ©àtv_¹"5$(Be¬¬‹£¨*€  Ž¥€6vÿѪ‹Âò‹¢%\JŠá‰†I…y‰#¶ÿ{qÆ“~5!¶Ï’Äø¼µËcqQ~bEYFUy&øÝk«X~wÈÙ sÙé4v‚ÜòëWÊÉßCÒg3õxwhƨíaùÔªí$ÔNV’w;P;,ß>`Oü3_‡ÀŠïnwÜ]Ó×ìt‡þÇß¶Ÿÿm3d‡}½s‡-a¸Þ¥Å•2òq©§GnM•Ê=‹ÖLöêªÍƒuëÖº»»ƒ÷}ïÞ½6lزe lLˆ å`^Áá#0×sêÖ¸e‡ÒæíŠ{iÔúÇ?úú­©_¿;=3‰ª\þ°¹š›› !=999©©)þ6Z¤rÔª浪E{ã¿9ŠWmÏ™2nQp\ï€òš†fnvÎÒ%/¼PyÇg®»N}ÉÈüÙ;îhxöÙŠ¯ædrñœMLÄ)h#ľ¾ÃcVSRR }ýºu솯Üéùù²à­>¹ßLû&æå »ÿð«—Çíî7ù€oÈ)FÙø¸0‚ì$,jdm¤ kÿûòèº}Að7.˜'ß¹òr¼ƒ'­ñº*€  ¨€C+€ìî$ì£Pp·ËzÖÙ¿:ô FãQT@PTè! »;»÷!‹ÍDPT@PT Ç*€ìŽìŽ  ¨*€  ¨*€ 8†ÈîŽÑO=vr‰ GPT@PT@vGvGPT@PT@CdwÇè'œn¢¨*€  ¨*€  ÈîÈî¨*€  ¨*€  ¨€c( Èî®øêa ˆW–ìaMÇæ¢¨*€  ¨*à ­±ØÝ_=F¬´8ŠÝ{LÓ±¡¨*€  ¨*€ 8€„ÖTØ}þÎ@L=AYvÇ2T@PT@Pƒ(ÀËîâçqâg§T&'Èî9,Ñ T@PT@d°œÝ32Ò7l\¿tùbΙ“““’z£QÈîxŽ@PT@PTÀà XÈî™^Þ55ÕüØ ™wïÙÃ_sv§Èî?VÑþLI ùV_7mª?uª¶¶ÙÙÝàÇš‡  ¨*€  ¨€‘°ŠÝÇëssÏTV6À«´´qǎƉ?ýôܰaÛ¶­®6oOOo8z´îôidwdw# h*€  ¨*€  WÀ*v‡™3 ùùgáUW×xôè¹Ý»Ïedœkl<}nöìsûö5š;{6&¦!3S‰ÝM¢¡[Ø ¼ [„\â6²µÈîx:@PT@PTÀà üÀîÏ™~¿ÇÔ{¥ÉtW*'»C8ÌÙúz@óó€ì%%Myy.\hÚºõÜßþv!>þâÅ‹M¾¾MÀôçÏŸ«­m,/çgwÁïN|íR¼Ø7/Î#F|#ƒ²mCv7ø±Šæ¡¨*€  ¨*`»C,Ì5pojºpîÜÅòòææfˆ“©ÿÛßš32à󟸋UUà‚?öì¹s笌™¡üñÓ ÔŽønÙÄÀ™ØÝôR6Û¨*€  ¨*€ 8ŸV±»9TæÜ9@sp·©·œ=ÛÚÒrâĉ±cǶ6664ƒûð€ïçÏ[àwóºl¼»Ù‘Ý Âî@“¯²TÍÚœ9¥»†-$1ŽaÎÊI+ÄÚªZç;¿`‹PT@PTÀ¶ XËî@äî@ç---­­­mmm®sæ<ҷ﬩SÛá+l¬7ÇÒ45YÉî’¢ßÝ2FW*es¿»,»Ë_~hæýŒ]3öÅi†4²;g¿`6T@PT°R«Ø8ÝÜÎ ¸Ãëµ×^‹ˆˆX°`ÁåË—/]ºDðò¾#»Û–¶m[[÷°»€¹”ßZì§|äb‡½lq±#œìi%²®zYvgÛ/ü*.Ë0ÃÊ£‹£¨*€  ¨€³*`v:FR?uêÔñãÇW¯^ý§?ý)66ð¶Ö×»ÖxwrCªô^Uñ*43c+‚·†ÝÓÒÂÓÒ„$´8¶DÁ¥¨-¥[ ‹¥h.>8Å{¶«þ@¶”RqÕ©UP–×…V¨zñÅÂâgT@PTpRÂÓÓÃxæV±»8`H}âĉ¯¾úê¤I“òòò-ZtåÊzUv·}b=Ö(`1»Ã!”‘%m²Ä,P2›hÅL/KóÔîÄ“ üîJÄOý@©Ò–RUÈJÁsÐbT@PTp>23£€©TÛe3v@‡š¯¾ú*88xÏž=Ë—/4hÃØ¿v3†âî,PÙO%¨*€  ¨*€ ØWî`w)&ºÚj;bû*€ìnßc÷Ž  ¨*€  ¨€…ìÞ«o^Ÿ17(vuuuqqªëN¬4™~Þ»Ã}Ýñ|  ¨*€  ¨€}ÐÀîO›îÞcê½Òdº+ÕJv·ÒïnºÙÝ dwû«¸wT@PT@ìÃîV‚§éúŸXY·@dw<_ ¨*€  ¨*`_ìÃîVúÝo¸õ'¦M¦^]éç]ï7˜nêe²€G±¿Èîö=Vqï¨*€  ¨*€ ؇ÝùyQ6§é&S\nСÀ-'Nm LÚí²É7è@dté:Äw+¥eGvÇó*€  ¨*€  öUÀ>ìn¥ßý§}L»Ž/›·f؇_<>så{S¾0eæ0ÿÀã7Zäz7™ø¹ˆÙݾÇ*î@PT@Pû°;**g¿»wØ–_˜¾ì­aS5í¹…KÇû5]¯Ná@ê‹ìÙ³;Ýñ|  ¨*€  ¨€}è>v÷ˆÈœñ¯4ÁvNv²A°ûqß Ó¾7dÜc“¾<}ÑÛCG¾îåsà§?çb÷êéò¸#»sêìnßc÷Ž  ¨*€  ¨@÷±;P»,#*mgåOz™B#GÄÛ½Ù?|Ó©h÷¤”pN¿»”Ý)O<zò|óªy8 Øq³!»ãù@PT@Pû*ЭìÞÑÑÞÙy-Á玎+m­-`÷ëL¦À ÷ø8oo¿­‘±Cvzúî ô²˜Ýžx‚ïbß¼ÒÇ…rNË‘Ýí{¬âÞQT@PTèVvokkéJÍZ[››ÎŸ©*+°€Ýoº®×ÉÀ€Ÿ˜LáÞ7\o :pÇ/MÛv®üUŸ›U1”ïÎOêâzzHÔ~ì.ÓæÇ$T.­“s²emn!Vˆ  ¨*€  ¨§ÝÊî--Mò–f»“eg”Þ¥8«»‡ùŸ Œ ö9vðÔI/ÿ£ IaZýîÒ{U5±»ê<ÁÉ2èÄîzó±» Gýmãìn½ß »û@v×ï8ÄšQT@PTàQÀáÙ]ë4à »÷G³÷ñ§¹+v´··w?(pÈîì®ÉYÎfwMU»'æV¥Õ HØ}ó±¤CKOìÚ6OÞµ+üèÂ#ÛöÇ »SÊ#»óQ˜@PT@Pý°»ÛЕ®©*`÷ôÓgR Äîßn ܵ#tëÁØÃ‹Ä¸ïÚ~`…'²»Ø=\¿á‹5£¨*€  ¨*УHOc·7+-ÎôJ“éi#=›IÀJ­~÷ÜŠó)…u‡E~w@ö-G!Tf§[xßáëæãIÛéñ×Éó¹žØ ÝÔ4—°mf½÷n™ß===<##¢GTØXT@PT@ôP 33ÈÊìn[få¯ üîy•M)…µ‡ˆ™qw=´É#Å}Á¡M'’·ï‹:¸Ì"gŽ.8BØ}Á7)±;°²ð"6ØŠž¥5ó´ÑV{·í³™`xÁw22¢ôÁX'*€  ¨*€  =DÌÌ(Õ€ÂÙüîß³{ºïA2›ÝáFÕoÅAü „Íìt;µµ» ˜K¸ÙVô,®‡¿Nþœ<3iËüîäpJK ‡Ñ† @PT@PTÀ"ÂU£etéÂî–±£õ¥®ùÝ Àïþ»¦ïÞº{ÛIˆ“Ù³%èð×Ç-9þÍ‘xËØòÄ '/Á7Ï“‡šHë‘­Ù¶î›Ä»÷©06@PT@P#( Äîù}Æ4Þ< ØÕÕÕÅÅ<²šÀZSºmיɭlJþ1»Ã]ª]÷§†A˜;µÖ;ÄÌ|ûΨsýkÒu2ë»K½ã6܈ƑúøÅ[ôó¾[ãw7ÂPFPT@PTpz~Äîw»™z¯4™îJ½¹¯Uì® ôm˜üç)v^ßv –¿;$pº ¯Êî¶ØA.Žngs9UJ±£¸Ã¾ÝþhÇ¢¨*€  ¨€£+  »ÛÜïN*d¿CݽN功ͤôhUUv§æÖûÝ¥A/Zi^?|GvwôƒíGPT@P§W@v·¡+]SU„ÝS jÃ’JÉîZI]Ö¯¾#»;ýÑŽ DPT@PGW@v·¹ß“àÍì^q>³¤!µ¨!6·6<£Ò?¡Ô?‘N‰¥$&–ºÿóiv?1gŽtRD–]F5®Æ²ûY÷ªÚpÅq«‘Ýý`FûQT@PTÀéÐ…Ý9QÛæÙ€Ýójæ¯<ºpõ‘«Ï_yhöÒƒs–š»â앇æ¯:ì Û×]¸Ö}ÑZ÷«Ž ™¸Ñ\$1±¥¥ÅæÆ8\…ÈîN´cQT@PTÀÑÐ…Ýíèw_¾ÙË××Ï_íÔNRrrrkk«Ã¡¶Í FvwôƒíGPT@P§W@v·9VrV ¾`ý‰S‘1År¯Ó?~-ßèNØ=;;ûÒ¥Kœ»pâlÈîN´cQT@PTÀÑÐ…ÝíåwŸ»bÇ„y»,ÿö€{ÈQÐkÉ3ôè“»g(¤CÇC&ÍZìž™™ÙÖÖæÄPÎÙ4dwG?˜Ñ~T@PTpztawNX´y¶ŽŽŽ™K¶ Á0œRRR0f×wwúCˆ  ¨*€  N €.ìn/¿;h{{ûÙ³gÓÓÓáTž»\¾|Ùæ ‡«ýîNpÔ±u¨*€  ¨*à ˆØ½Øt·›©÷J“é®T+ÙÝ€~÷?üáϺsêÚõk^yíå‡þþסC‡B˜ûûƒ>˜õÕÒE«ÖÎÿjÉÈq_¾=ðã÷¾ÿz¿×þó迦N›j»ƒ£¼H{Å~wá'ÊaOå§j •(Õ©·ªÈîx²@PT@PTÀà èÂîvñ»ßsÏ=_N¿nÚy®sV­Y1ô³!ùëƒ{è¯?ñèƒ>˜6á„)Ó>øð£þï èÿÎ{¯÷ûÓχ?öä÷ýñ¾qã¾ew)Ž+…³SÔNe“FÀK£k[º-€ÙÝàÇ*š‡  ¨*€  ¨€.ì®·‡X¶þßÿþ÷&Ž[»nõû߃N÷{ïû°û“O=þéç#ÞzwÀûƒ>üËßÿÙû×}î»ÿ×ú½ùÄ3.ï~0èÁøÂRv§œëR‚ûãÅ>u6©‹]ïÝî`²;žPT@PT0¸º°»Íýî¤Bö»™Ý¿”a÷'žzbÀ ÿõÄ“¿êó›Ûo¿ýú믿á†~ݧÏ?ÿýØØ÷‘G† ú›ßü¦³³S)ä]Ê¥w¯²Ù])¿4ÞFzÿk÷Ì…lÂîP &T@z²¿ê£y¨*àè èÂîÝÚÔ^»µx!åwwyþÿzâ©ßß{ßÿýö·PdôèÑd9šöíûÏÿ<öÔ³.C‡ íÓ§ÏåË—eÍVZaFov—úæõVÕVì®·X?*€  †UN¤ŽŽh?*€ \]ØÝæ~wžÓ4°ûø/¿˜=g&Åþ0zŸ;ïdpß¶mÛ¼yó|ðÁ'ÿû߇}üÑ'Ÿ:tHŸ>¿¾xñ¢&vWŠ˜›q*O*Þ†G+óØÝÏÔbBPTÀh¬Ï»–ÎVuv^á?¯6ž­"Á‡¿êÛË<¸ðñìZS6’™³ÏÞ1*à èÂîü';æv7á‹ÉS&ŠÙýïÿøÛ³Ï= ì~÷î…h™'žxžÖ´bÅŠÿýﯿñ°ûcOýwà î¸ãŽsçÎÙО8už<64Iµ*dwGä ´@l«€˜Ýá´YÝØ‘VÒ‘w9*£-<­ídJ[prK@b«B‹o\›wlË‰èæ¢jóŸmKÊˬgwñmT¤Ä`w0ÍÓž{òY—ŸÝr˯~õ«gŸ}600P)fÆK´²»}9#6Ú FŽ}mè {G{B/[ÖF26(v;€{^EGúéNBíñyÑÙÑ™fpMëI¾”Ô O&èÁîR³—?=qEK]àzpƒ¸NYÿ·`ež,vKèB6¥–Êáç~½5ÁúQ½g÷›ûæõÓxó€bWWW :MÀvø€Ô.hh/v'(#à_!iñWòY׋·+×ÄQÚ±uÆÙµVÅR Ÿ¥Žyñà¤Æ°ì0vâ‘lœ¾Öj‰,»Ã’2'“× IwòÁ/å¾%šãÝÝ|ÅîÝ〧þ, Êî²ø. òa°»Ò.º§½ˆ¨€Ð…Ýíèw7´ÁAmè6v§¸‡‚ʵ,fzæµ^’"¿V¦”Â5 ’…N‡BW#Uu–NxÄR3DVú‰ê)¤v]ûךÊeÙÖ‚Be²ŸÊ4‡Íøî®÷D³ß½Ø]8•烮¨Á`wÊZ*§lP¾´6qÉÅBÕg¯k{±rTÀ èÂî ¯=Üìncwêâ*#1£#»+ÅɈ•;z)=©™’5dãeyØ]i)ö»KûE`wéìT,²»a’,»ûĵª2¬ÃçˆìŽ“"|÷M¾âÛµFänß ëcfŒ€ÝfƒÔSn±ïÜâ‚ÝÖXÜ*`CtawƒûÝáæÔȨp?#î߮߸`Éò‰=œÚIó‘Ý틪L)ë¾åt Û·i†Ú»ªÎRÎæYêw—ýK²»¡ÆƒØYv÷Œm…µ a)wÀwxÌîvÊêðJ5{ßáÝ3ñŠw\ ²»\" ÜP¸E,°‹ ÆQ@v7 geeRßóíæuÌ[0râÌG¨d(ƒíe ²»}‘B•)eÿ@Á‰•TüŒ}[jß½«êlCv—¥ydwûÆÞeÙýXd+¬ ø™i¦vH§²ÛÝý3;¼Ó;N¤´O¸â‡~wó³N1¡¨@÷(  »Çï¾uûŠi³?H}ñš§z½áúyxÜœð¸y‘ ‹<ƒ?_í…ˆگØj, ž1,Xf˜*S*E¿H·“-‚ÓWüÕ2Ûœ©”e:KÃ`ÄqJ”]ö'i§8“ªÎÑYvwhU ßOe´‡¦w@‚€w¿ôvpºŸHj?Ù3ÙÁ@ºO]ØÝ8HúåŒÇŽø¾33.uelÊŠ˜äå€ìAƒz¿¾tÃÓ“f?‘°Ù½;cfœã­@¤  CÝ9Fõ\Õ#áý/¦´›ŸÁ”r%8år`j;ÜŸê•Üî‘xÀýx\›Gô[Ý«Ú=N;Ü *€ 8´º°»qüîÀî@çûŽ¿JÉL˜òÚ×Ë&}9³/²»kD–ŸNÆ„ ô(Ü{T{{BcÏVÁé±°â’LS@ü…Àø‹$Ágp‡ä×ìsÑ#êB~E+ä<žƒ÷ª:4¡ñ¨€£(  »ÊïNè|”WW¯¿mǸ?bß!îXýrËï.þ+¹Ð"ØhœÖÙÖÆÌädD`BPTÀ¡v̪á<ͪ"¬'RG¹ü£¨*à  èÂîFó»+EŨ²{O@v=ü˜PTph€ÅÏ6]<^¶Ñ3éÁ¼Eû2çºeÍÛ1gw&$øLÒÂ}9=Š.´!»;(¡Ù¨€Ã)  »s:*º!‰™±!»¿»’K^ØNš&ýJ6ÊþÚ j°waC¿»5mq¸C FPgR@8}‹wv^á?›!»;Ó0À¶ FV@vwb¿»Àî”K^KÃÈ#wþKB÷äDv7òж¡¨@÷( fwø\ÝØ‘VÒ‘w9*£-<ÍœN¦´'·@ HlõŽm9Ý\T}rÖÔTt[Ì YÑ\ü®I\]“\˜0šòìÞë‘ü>coPìêêêââT×=øhó½Xéw§ç‚לŸÔÅ5P¥Œ:ìn´ƒíAPîW€bw÷²ú«ÕW³Ê:ÒK;!¥w¤vBJÈï„ußañ¸JŤÙŠÝÅÚ•U@ov·xVÐýý…{Dz º°»Íýî¤Bö»,÷[ÉîBp‹e^vÊ$)¬“´Íg,–UˆìÞl2*€ P PìîŸÐ—Ó—×ï19ÌVÍ4?­)(½Ã/ż^d`¢-×wçqŠ#»ã¸Ez²º°»eì¨G)ݯv½v»mœ9ïã1ž–Œô?5>ÃOÒ½KëZýî â§~Ò£íZëtPvç¹Î \V=Ô­¼"ªÖPTÀà Pìî×ÝaÆ÷œöèœsêzº*¤ x´jj‡oòß.¿ûnß ëýîJ'4ÁOÔ£ÎTÔ¯$y j‹·Û¥»»üÅ5pži Þ¹h*à èÂî6÷»óc(¬üè¶gÓÌÙŸ t~2f|¾xñ¢ë¢‰vý¤ gŠO[—ºúDÐàý¯Á¯íííR|§<â䫸òÊ‹OyÂObÏ:50”Ó\rÈhF6‰˜Ò4Э¯®LÔUG‰¿y®((v‡ öø<ˆwï×{Lv'¤ÈÌÎS™í‚Ò:ü“;“Ûƒ›õfwñA-ewêWêà’žÊÈhW:1ÊþÊu¾!-BŒ¦€.ìÎÚ6ÏùõÒéó¾~Ü#èÃSñóÓsÝÒsvõ{gñš§ÒÒÒ€ÑC"§ù„Ž€ä6zßñ×¾^ý_Øøõ’mmm¶2†‚~[U«w=Ægw%U=¨ø¯:ÔE‹¿ ª g`Ïa¤WY!?Ãxž:¥—Ùé cb ËR«´#=gýœÊ#»s åôÙŒÉîÔTY|àË]ÙüâCFõü`„³ŸÓ6l *`™º°»ýîf@šñeTÒâ°ØÙG}ßžÿõ°ÑÓÓÞøöÛ}øå;_\»õs¾zlÖÂGÇŽPVVfvΕzC¶NõÝÅn!)Rµy(×uÑ®P•lC]À”H¿ÒS›Sµâµ¦9{jÁ?Qj‚5ý%»wñð¦ ÖìŲ35–ê6 ÈîJ¸Å'iAaf.†~çÝ6êpG¨€&tawà’§Zô­û^ØãþŠGÐ'¼^ûÄi¯Íš=yõêÕ6¬òÙ«B,ͰáolÛ¾%::º°°°¥¥E6ägN“ÇQغœÈ¼’‡X¶¬43m5`6Ì,K½Œ‹·p ægwŠSŽmñž“Ý¥Ld4P“Ýe''—3.½ìË0ÏEš‡õ-`tÊfÙ¯RóÄ g¶àDÏ9mP²Ê‚=b£)`v7š&h*€ J]ØÝŽ~wrÚ‚W:¼H$ ƒá1²sc²»à‚;™¤´Í`t)¹«y®Ûcòæñ»ËŠ&«ªe{d°»¬žÂFžÝQýËÙÝô§;ÙÝm¥²»£ôÚ‰ ôXtawC¹“ÑN…ÝšgøÈÙŽjqäƒôÓb.4¢‰ÿö-æ]q+(Mo4•‡ÂwÕ,ÎÏø ¾P§´-Œ~‘º&ãùÏïÒ‘Ã¶Š¿fÌé( »;JO¡¨@U@v·»ß“V1›XC±»5$OgýF`wNS1*€ ØDdw›Èˆ• ¨€~ èÂîvgâ]»v-]¾xïÞoKàë¥K—ÈWØ_aÅw»Ûi(œ˜Ý)¯-çá„àÎ)fCœIdwgêMl *à” èÂîöõ»WWWš:tpåªbvojj"_—.[¼qÓFÈc(t¶»1NÃîNy b£PT {@vïq/¨*`±º°»1ôÐáCåüißþ½v´ÖP»Fv·ø(‚¨*à4 PìîŸÐ—Ó—×ï19"³;#2; ¥wø¥´û%·&^„R»}3àN¤N#6@Œ©€.ìnG¿;ñ¦Ã{dT„˜Œ©-ð+ɹs÷NC´1»ÛQÜ5*€  ÈîÆ„´ @äÙýæ¾y}Æ4Þ< ØÕÕÕÅŨÎQNè@äð^‚àá[‚ƒƒ…¯±±1°¥½½ý›­[0ðt.²»£ r´@ºAƳU°ô»#0¡¨€ÑøÝŸ)2ݽÇÔ{¥ÉtWª•ìn/¿;PøÊÕË€Ý9h.f÷É“'‹Ù~ ‡œnßî²’ÝáŽF ®"–•²`GüEÝùµÂœ¨*àô –Ýñ6z£Úƒ t³º°»½Îé@áÛvl¹|ù2¢)õùœ¹³œãJce+ŒÆî„`„—Àyâ-÷H3ËÒ!ÉFU(ÎÉÀD+E¶ ¸X%³ÅZ‰9RÜR)ÞQ¿RêY“_Z•솩ŒüRAd%²@jYhV2RLðâ}ñXª7•WítiKÙÇ…ì‘%=R,ЙJ9»#¸[ƒAXp8taw;ž¾?6lÞ‚Ùiμæ4füX;Zk¨]Ým¥¬k“§r‹ òTŽyP´B­ùylè™yˆÝŽ<Ð`T°F]ØÝ^~w}óŇ}»wïŽo¿Ý¾gÏ67·­»w³k׿;7íØ±qûö Û¶­ÿæ›u[¶¬Ý¼yͦM« üfÈ…Ù‰Ùò§r‚2§P˜MØaìÇ­­ºÙݶÀ²¨* Ÿº°»­NZë¹zõꜹsû¿û^¿þo¿úF¿_yí¹_zöùŸùßÿžvqyúYxöùçŸ{ñå_}íÕ7Þ|£ÿÛ#G˜x­;rÊüÎÍîNÙeØ(TÐOdwýÈkFPkPb÷ü>coPìêêêââT§éüh/¿; ËAÂÒ………iiiQQQAAA¾¾¾^^^Ç÷÷÷?yòdlllNNNYY¬ 7¶¢ß½'øÝ5 `ÌŒ  ¨²»5leQT@?tawûžô;;;am™+W®À:3€æð¨&xÁb‘ð~þüyØÒÒÒˆÈ/pÕÛ×ZãìýîÆé ´@쮲»~ä5£¨€5 èÂîvô»Ãé>Êí:Îw»_ e²»¡ºAPû*€ìn [`YTÐO]ØÝŽ'\~p'9ñ%(€ìŽƒ@PAdwýÈkFPkÐ…Ýíèw"o.1¿goQ}Ç«”Xdw¨*€ Pìî×Ý—Ó):§Ãœ²;"ºRPf‡wj‡oòßø‹Pj·o¼Ã‰ÔšK2–EPT@U]ØÝ^gÿ ×Ïš5 }Μ9Ôû„ ` y?~<¼O:uéòÅk>¼’½ 6Ô~”Ý9WÄÓ”Mé±;†ê/4Æ™àŸÎÔdã·…øÝ»™ÝÅc\¿ õ0&ÁfÁ`ž-™d“m&g TYê1mÒš©ÝI÷".b šêWå3Ì€ ()  »ÛËï,ËË>|888Þa…777x‡ÏáááäóÞ½{a©™ƒΘ1¨½±>&õØ$Äwâ."£A+d•!MÖ%‰”®ßä¤)üÊ€ièáÉCöE툿 ® "]ê[u u “5OÚ:v{©_¥6ˆ÷¢©rÙª¨1@U.!Œü<½#oâ!ÁSƒÖSf0§jµªUI1=­ãÖi(vçôC³TW¦‘ݵõмÔ*‹’-(ÔÌé˜'ùë`´ Ù]×…•3Ð…Ýíu²¿;ìš {’ Ït-TæÈ˜íóßa€»øªI.rc½Ñ´_GawY´ 줸F¶(aœ&=mžYSeY2I:žÙ#\IÙRª•³›#SMÍ·L|qïS#sH¥Ö ¶±õ”œ–U«4ΑÝÙãÄPì.>¢¥q)Ô¯Ý=àrÆÌHó M­ M‘þå=` ¹ðw UÖWj£Ô6iâ²Ýß;¸GçS@v·£ß]`wYç{ff&÷”£w/Àö¸“S‰øBË&ËpÁ8¥ Èî[H¡ŠÑ/üÔ%¾à)í ®•ó(¯°0ùd3¨tÀ3ò‹Õ“c©nJJ2ÈRõT_+ùì92é³2£½ÔO²2RçÆQ0ÃVÕ*)Ì8¬8sîlÆaw)5òpd·ñ ¦<Ö²íçÿ•ÑFÊ*~FW}Í•òÈÓm„;r>taw{ÐÙ~÷k÷Z3¸“P’_éÅs!'e…K¬ð™"Kƒð»_—Ýe1HL]²žN²·û‡75~¬])Ó³·ðü*;¼ÝÙ' áTÀ€rª¥a&ˆ+—~V­ÙݲcÖîì. SlÚm°(ݵütNròp3O6U¶–ÕœáGW·°ç ÎǔآîQ@v7 ßýšÇ½6&ùè—ß.þÀ–±ŒÝäDñ¢ÑÐÙ]<’eUFgô›iT!É2 ÐZŠ ÁRM”¶H÷Ë× )”楪•3:N¶Ë´æ×ª3›-EªÀÍÏîì>¥¤fœ Äó Ç:;YÖ›V–²»C׌Amç‘¡ŠëÇ®Uí¡%ÛL±Ï[S~FAMu ºñ·KSýúuÖܣЅݭ):1ø5ÏPìnVâHYŠ¿riUüe1'*€ 8´Èî–Q–BP½Ð…Ýíu¾–úݧM›6qð“G—ïíò¸„††Âã™vìØÁÉî”wJJäÈîÂ0µÕ³™¬B²Àm…[Pij±,*€ JÂñy yqyí1Ù"3;Oe¶C JëðOîLnJl†œ»}3àÎz_¶±~Tèá èÂî6÷»sžÐ¥~wxðz¿çøbàcðáX×ËÝÝ=00pãÆ–±»ô¯çJì.ÍÉÙ»ds¿»]Ô⨀“)€ìÞÃñ› V]ØÝ^gpÊïN÷¨¨¨ë®»¨}À€óçÏëz¥§§'$$¬_¿òóœìe­Ñö‹ìn´A{PTÀŽ »\Ð0T ‡+  »Äï‘îõ]/ð¾Ã«ººš|€-ðùÈ‘#Àîv¼6j×Èî†ê4@쫲{Ç#l>*`Xtaw»œp¯^½*{¯ªìCšë===‘ÝÅ=…ìn—q‹;EPc*€ìnXpAÃP®€.ìn¿;a÷ÆÆFXü‘ó…13ÈîÆ„´ @쮲{Ç#l>*`Xtaw»œsÝ×oX8Ο֭_ ¥ìb­wŠ~wv š„  öRÙÝ°à‚†¡=\]ØÝ.~w8¿Ã§—.]:þ|MMMYYYqqq^^YÍ='''77·¨¨6VTT@ Mkk+»;ßs%GMÙ¤O}²=à~í¨ç˜±£…dײOhÒÛ*GÇÝíŽG0Ììn€ P]ØÝšÓ¥•eǯ\¹hÞÒÒrQôjnn†-ð‚Ÿ._¾ 9ÑénXv—>e“0Štxð0OƒÄ;â/hå¸eç|L©X4ñ“>•Z¡õ!VœÏõ+)´KÚªÉZ‘Ž+;Kª˜•ê:$ÄÂvÏŽTûË.fèºS»°»xJ‰‡eIžœ6!b°P•m÷kÛÚlÒ^¬0‚º°»½üǾrCÅÌȲ»lðOò»ØxòYë%ÝdY\iœ3zD»¥FÊ2½°Q“1Rg3ežÅG«’ÙW¨wAþ±m[Kìµ_Û¶‚]›½ØÝ&ÜmÔ‹ìn’Czšº°{wž^©}¹íqãw'9Ýöì¶£ÁÆÙµÑØ] ©³ ®)Fá'Y(6Š«’-b(F±!»KýÖ²[ÄãS+Ž ee Jû…íÙeÏXTç<Ш½PÃC˜3ÈŽ !3ct s é\Hu‹xž£´ iÎj¥M“6GœÇPÇgçjÍfv'.~'_ÅÐ,Í#Î@~%Iø,Þh ÷H vİPøIœG©]Ö˜‡eQ§T@v·£ßý¨TÙs·E´^"¿£°»,ó‰Q†BFYpG63£ˆ»RSeÁ‹ Ǫø«$‹ÈêÄî²:¨ÏÙqì6jKÒiÔr²EZ­sæäß‘¬,ò³¾ >ìÚ½£¦¶¦®¶®¾®^6dw› C7s¡xwÆô»KÙ]Ø¢„­R° ˆG˜ PU ¥ŒeÇ~!Ö /Å­6Dv‹¸T…çg8Œ²S}Äc ›Ý¥5XÖe²Ó ±µŒ1º‰«²Ï–ŒŽ“=íÈÖ¯4r„Ê)ûe¥¶Ñ2¢”aýî„zÉK‰ï…<Й¥E¬qµ”I<RƈÆÌXÓ/XֹЅÝíx^¾æwl?qℇǔi“–¯X Ok"«¹755-_¹ÌuÁ¼ú: ÷3ðb°»ø$"{¤šÉ“ǎʨîÚPì®j-#ò4Õìè}ª©±˜ÙV à°±•’ö­Ç.ì®pPà®Ó^°ZTètaw»ûÝO˜ÉÝìqp‡‡­»<Þ/^¼ø¾Ûmç™3ðpÕ» n*Î뇣_°˜Ý)/oéPÎfb6[)`+ß¿­ìÁz¬T€b÷Ææ«TÒc.üÈî: ‹Õ¢vQ@v·òŒiMqâw÷ðð€{R!Bx^#FŒhjºpáâEò°ÕQcF¸Ÿ={V+»K/ÏŒ?”[Óî/ë4ìÞýÒáQTÀùúÝWz\¢’Í׈´ àNQTÀ±Ð…Ýíîw÷ð4³;¸_½Úyî\#àû¨‘#›»^-­­àz‡ŸÜé5±»4”g‹£\ÒÝ¥§ÐNTèœÉïîX\‚Ö¢¨[]ؽΪJ» ~w²†{»_p¿pá”)SºÀ½¥­­°{cã9x!» J"»ÛqÜâ®QTÀh  ßù @Œ©€.ìns¿;©ýNÎû„Ý««àÉKÕ7§ší›[š[F}©­íò¥K°ÂiÎ?XìŽìn4b@{PTÀ  ßݘԂV¡¨€.ìnÇÓî5v¯©©®©þfÛf¸-¼ì­­­m­m—Ú.¸Ã׫–µxaÙ3盚ݑÝí8\qר*`X»ûĵFgwÄå´C’Æ»{§vø&_ñ¿9wûfÀ;üÁ@P]Ð…Ýmîwç?¹v¯­­)++ýbüÀw¸9^àqpÿbܘ;vÀsššš´ùÝ¡f¼W•=áºÅßY˜@PÃ*@±»Ì:3™Èî¿{Û•'éÊ1X9*ÐÓÐ…Ýíx.&ìîããOe@‡g4¹.˜ÿÙð¡äÙLC?ûw÷óõÍÍÍ…{UéUýîvlK7ïÚAãÝ9—æÔ”dæ,ÒÍÝ„»ë6,ü¥ˆ#À²æX\вÝõÌRèwçá!÷òòb’**JªªÊjj*êë«êÎkhj:wñbä᩠󠨧º°»Ýýî¾>>`¥È´´T?¿C‡͘1cúôésçÎõöñÉËÍ;ÛhwpÃ#»3f†ÂLó@ O¢µ#þ‚ºÂ ã¯=Â~egÐ!OâFQùÅK£ÊªDmT]ûœ§‹ËÓ;ÒYÖûœ¥8³Q] V€§Q˜Ç¤ìÓaNÙ])Ȩ~w]œ`}6Ý•À–eFv·^g¬+  »[sº´²,ñ»ûù±ûùûû××ו””fdd|ÓõÚûíÞòòr•¹·¯Â²3--ÈîÄî²cƒ‡xò–ÝÅÆKç0J[Ø7à©“MlIe§^b…©®”c(M<¤Æ³«é”"[¹Å50 òIY^· ¸¦V`fPÀ.ì.žCZ +„Ý…ª,®‡§ awYp¿wϽîmm­Èî Õ*íQ<¶­çœÃÉÈSYþnµ,§¡Ø]äb²'¥[”Ø]ˆ.'1î@êBŒ;|& ÀýÊ•ËÈîüL†9Qtaw;úÝw»í×”Ž?fÙ™ÝÉJÝ)^—Ò’àS”R#M¤~J•€Ìî}ÍfJ¥IÅvT3¥hM~¦+íH‰õÅ,.EXF_S iA¯©²;5OUžÚ(Ûþå™q ‚`C[)ŽK%m‚lÍ(ì@EŒÃî S—vò«RvYJ`ç.'7§X‡›S)pïèhGv·^g¬pæxwraèèè€ç.UTTäää$$$„……>¾   ¶¶nW…œt-ÑÕTÇewY× '»Ë§Wéª?£r þ8I]–ù¤-%KöžüR†f#¸ss–²añ#µÒ4Oº]k6OS'éxà·1R2[vw²m±×QÐýûµ» Ó$Y‡ºÀââ—»‹Á]'ô.'«ÊÈ.ö¸¸wvv"»ë$>VÛcp6¿{÷ŸßfÆdw1÷(Q›G`§Á6dAë‡Ióм&G¬õð§ª!cB";ë`LÆT÷Åß ü|ÌfwÕÙ ÿŽØj;²`œ«NäøAŸ_aÊi/v'8"Æn)‚K•Íß=ì®*CÀž¬‚ìÞc®“º°»AÎÎC†|òñ§ƒ?ú‰4M™6Ù FÇ Gawæ`ÁàBÁY%€ Ù"ëõ”rs÷÷—Ø»&¶Sl6¥‰lÓ¤8®Z…ûüù•D–JÍ6•¸üÆhê26R‹uVewif¥é“´û”žÐjY;)ÙÅÐ/íFçJëQªY“¶—™°{@bk|^GB^g\^{Lv'¤ÈÌÎS™í‚Ò:ü“;“ÛƒÍË Û乪ªN2p²»ltma¸\XÇV•bÜpeÝm«9Ö† èÂîvŒw‡ÓDMM;}û¾œø%<Œ©¨¤$.½RZnÉ™3uêëkãâÆŽíp½ 6»[ÓX)÷XŒà´Æ~,‹ ØVÆ–éiwv3º0}bÜ™*žçK÷ñÛŠ~€ËɘÈräæT1¸#»ÛJj¬Ð…Ý-;QZ_ ‚ÚG>rÔg¾~ÞgÏ6|8x`HBá“c¾0ÙýÙçÎ5ÂÆ›×Sw²~½tQSS“õ{wôœ˜Ý‰_SkYPDë.0?*Ð àH¶Ld»°»ÃÑ °;ܑݮOÑ`ã+  »ÛËïà¿lÙb°»t© <ÀîáÉ…¯Íð¶&²ßÌc õeå%ë6¬nmm¾ž.÷@[[Ûò‹/\¸`ÙÉÝ™J9 »;S§`[PTÀ^ »ó °;O⩠󠨧º°»½NµðÕ?z¸¼øtQZZ2°{|féË“¾8éÈО¥eÅÙ9™kÖ­„¿ë;mjOü•+—–.û*$ÐÇ^6g¿ÈîÆé ´@쮲;'F`6Tèftaw{ùÝÝìüÎ3™Y…ùþ>ƒ>úàÂ…ó€éã^RR”•“Ÿ³zíJðʸCüLcãYp½Cͬ‘¯Úý:awÝíÞh*€ Gd÷nÆÜ*€ p*  »Ûëä;ñÃÿ tù¿Õ«—UUUîܽ°;€ûéÓE™Yi± Ñ'ÃW®^&°;`ýåË——,ûjØ3?Xx©Ùâ[HÌ4µ¼ƒð•Êi/¬Ù/²»5êaYTp2Ý91³¡¨@7+  »[éw÷ˆÈœñ¯4Ávöµaò·Lzùz¥4ù•ºÒõ“_¾~ò«7@šï°>¼|}jrU¹ìr%²ìî·‚!»;y`sPTÀÝ»Gpw¨*À©€.ìnÍéʵËÖ ´]È<ãÝÿK98º8`žŠüçæzNO;<.~Ïç§¶~´îíÀµý»Ò[ß§þ~+_Ÿövˆ’çawâ}—}·²Õv/Žìn÷.@PTÀ8 »sbfCPnV@v·ÒïŒÞµ:쵟;:®´µ^Te÷¯¿ì°öíèUŸš÷K*E.ü]üêG¢ß2ûŽ€é·{O¹íø—·ýò—«_[>ô÷Çl—½`È>ÐDÊîB8C;àÝeŸ_Ã&ÙÎ5L %¨*Ðm »óàÏ"3øl&%1*À¯€.ìnå¹½­­¥+5C‚%›ÎŸ©*+Pe÷o·.w›õßÀÕ¯¸O¸ÅkÊ­þÓo šù HÑ«MûöÃô½ƒ |çF¯zäÔ¢{OÎþEèì;"ý!åÈÄ)¯õêèèàG:Áé.þ w\|7 »[yønÎ1)fwÙþå¬Ç¶Ù¨9¤ì\Q:ÏTUOÓC¬4ÕÏc°T"i@šÒÑdYýª"½¿Eµˆ½2ðk%¶Pi6ËÖâÏi/el¸_dw’./*Ê%éôéüÒÒÂòòÓUUåµµU uä‘«ÈîÿKè–v~~3¤ÝÃzpìÏû¹ßÂDmyËoîݹ¾ 2Oñ™z›ïÔÛügý&Øõ¾ïÙ®þ®¬´ÙÝhìn=%8»KyKëÆß”(°c°25;eôy²à.Û_ì 5ײfºeýx³!5ªV%k­jÝU…g ìîŸÐ—Ó—×ï19"³;#2; ¥wø¥´û%·&^„œ»}3àN¤ü`ësBŸòW¢)3gµ»+;<¹ ÙSL̆ p*  »k:?J3£_¸Ðxþ<,ãXÓp¦º¾®¢¢4¿0'IÕïëANó¶˜}v ïµóó^Çü,lý«)îS—<~bÚÿy̼ÏwáÃÞsï?6ñÞ³ÿà3÷¾sÿ»ëc·¹/صN»3¼ìª—O+Åѯ¸¡ØÓáJ¡›Ô7,…9%ÿ1Ö†,¨GO)™ÇÆe%KØXÌ.e=»3l–EL­*!©¦.PRC<`Ègñá/Þ"ääœoPCQö¬"TÅ·âÑËhµ*»KMâÙ¯&(³]Ø]+^kʯ)3'Cvg€{KK3²;§˜˜ àT@v·Þï^Y–_”—š—Ÿ››““‘ž¬ÊîpU˜ööoŽ-ðþúﯞô]òì©íŸ¦œ˜¸úÕoGÞüí(s:>ëSÛŸûW÷é÷Bò[òßào†Îú%G um¦² ,¥tv  •C°;Å7J½#f\Ø)á£MXÐæ]/Æ8©²ÊP¬);zÅeùX6ƒVN•‚©´9ŒJç`â-¶ê/)§ÊîE<º8§|J#M–¹y2³§ªø.{€°e”¶Úæ#Üh"»ó`p9ÜáaˆÈîìÐ̇vŒþÕÖÏoß6¢·ïÚSúÝn¥ÍNPÜ!ØBF¶Q‰±¤~SqU‹Ø«£yZªä|¥f˜²þ]iYétT‰ì©í²¦²Y_ú+#¿¬©ŒFYÐel´Õ›Ý… ƒx2Ãù²¥VK›ÆØ ©Y<”Æ€"¿ˆAØ]Ð_¸®‹·Àg²]üdæ—fæg¥œÀå²1î*w÷Ë—/!»[¯3Ö€ ˆÐ…Ý­ô»[¼¾;\ f}üwï CN,}ýÐü§Ì}|ç„?žXòª×ªþk>úÉa×§CvŒöXþÖ‰eo¬ùð’6 ¹å°ë3SÞ@v7‡i’Ñ ŒWWWM Tb“K²,"H¡‡h•ò0\¹Œ"6iÖJTá˜m°oI·3ÈŒÿ'ËŒQPÕ‘@´ \JW¼ñ¯â‰çHS*.TÕžâoµ´iBYö^¤fkÆ—ßìN!¸˜ÑÅÈ. åd£´i%šNòTfàréÍ©bpoo¿‚ìnÂX*  »Ûð­u0sàý«^à²mìï×¾ è|÷ä¿À×5ƒnðZõnøžI>knú컯ÿôç{¦<„ì]f(vg€5-ɲ—´N¥É€¡Ø]+Qñ !ÛC/=~ylõ|«Î:¤Àª´EbZy ²;»3&$Ö3´ÒðV:”Ž8+E6~qGawŠÎá«ðRbwÂp9µª îÈî6«B@]Ø]+pÛð$>í½ßïšÖˆ\ sòaõ‡×¯ÜkÏÔ¿SÛ×òÓ­c~‡ìn@v'ø"¼€o‘¢!ù•bS J¨<Ò" L´áXå¬J,‚Ø0±Ùb­Ä Må¡°XµiU éx*×DêJÜÏ)§¼²m”¥UÙq%;Þ”fžÔÐ¥Æ6e0{l =®4 c4Ÿ:x:NÚïZåuÄüŽÂîTÀ E6Ðwâà›sp¹x9H)¸_½zÙÝæ²c…=\]ØÝ†§i­Ó€©ýûlq×¶1¿Û:æ·æ4ê®oFÝùÍÈßlÙgˈ_oÞ{Óç~¹é³;ºÒ/6»}Ý[‘ÝÉî¶HñWkqAþ]`Ξ©{háÀ3¨p vð]Jê²ì.Þh%™¹üûuÜeÁºÙÝJ‘±8*@)  »knž¦g}ôÐÄ—2ñ•»ÒM¾„ô²zM|¥×¤W{Á󘦼qó´×~:õŸAšöîïmhƒƒVe´˜ÛÊh YPĶ6cmN¬²»ñ;×^ì.üAFˆh'[Äîsa‹,¬+å2Û–Ýɘ”ÀÙ¹°¹º°» OÊZ§ð„Ô3gΔœ>––z*<ÌÓã„ÛîëÖ¬Zòõ¢E æ-Y¼pÝš•»vl=zø€¿ŸwDxhRB\vVÆÙ†Úì U97»;h§ Ù¨*`/ìÂî6¿Æë]!øÔÙàŽì®w`ý=P]Ø]+p3NÍÆ©jêÔ©K—/'Ø¢zQ÷Fʦ'õ~W5ƒ'²;J˜@zˆÈîq­ÑÙq9í¢s:Ì)»#¢+evx§vø&_ñ¿9wûfÀ;œH9¯¾˜ @PËÐ…ÝmÜF¨jâÄ €épR>Ûõ‚˜œºººÚÚZØÛÇÿ‚qŰÖÜ¡r˜Øä’‰ìn±TpÝ-£ ,…  z+  »;lj›´b„ÀP{uuueeeyy9|%ø¥Ôdô»;Ó`À¶ ¨@ÏQÙ]oþÀúQTÀ2taw#8Ë¥ ¬šéO!dç'Â^”Ø]<i”ñÔüAIFÕª(Ãd%ª’Gj€J:Mdw˨K¡¨€Þ ˆØ½Øôû=¦Þ+M¦»Roî›ßgLãÍŠ]]]]\\À#ë4§cΆv/¯,j|onn†'¶^‡¸vxµ´´ÀÆ‹/^¸p¡¨¸¢á¯^í$¥Ä/!Þ]tñ¯Ö Ç<µEÌ÷ëÛ .æwWbwª½JÈ%W"NY0âDFÎQdÛlRêe´Qà0Æð`ó¨ÔxýØ] FÙ}Ç9 àìÙdÁà‘r3Á¥ƒœ²VjÏv§ò0ZÊ) óeCv×›?°~T°L]Ø]“‡›}Æ·WU„ÂÐó òò ò)Xojj:þü¹sç32Òáë¾C~)»Ã‘ò»K)œg‹à¹§ÀÝY×w§°LÌURv×Jóbj¡×°ìÎæf6x ¢¼ªlv§xšPòUš‡Ÿ\e|ÊTÊ`¥é„ØÆ\…}ªa 9RPv˜‰bg•‹‡˜e'Jûe J‘VÍÑ•Z„ìnU`)TÐ[]ØÝ Nî„ÂÁ­˜îèWZZ"À:ð:zCC, àž“ D k½Sm—õ»‹ëT8 As)Í3o,†ÊTúÝ`b³;ÅUª¬#Ë—œ0d—±­‰ÙD.¶Ÿ?§,¼2d”ív%ª|Ì`}¶%œ]¦7»«Ú¯t «ŽgÆ@zàPµQ‡§V=$²»Þüõ£¨€e èÂîör–³¯(Ä*žwÈFØÀ^µuµGIÏH‹‹%)6.&66ÆËÛóØñ£°‚$y ¥(<²•ß])hÞ‰ãÝžSewNXä„`oh·á ›°yPŒ …lšWý•§rY=)VVew­ùµve¤’°²óifžÉ€rÊx¥©j¤’Ò 5æµöNù »$¶Æçu$äuÆåµÇdwBŠÌì<•Ù)(­Ã?¹#0¹=(±rîöÍ€wp‚Xv1ÆR¨*€ p*  »ët&íÎj »CT Œ)>]|øÈAØ(NkÖ­„0÷ÚÚZXG^²ìnC¿;Ô/‹ïÎíw'ð!¥éF1¦°](+T.ës¥¸§;‡EÌÄ`†ÙÒ†Èn‘­V £â]Hñ‘úÕ‚Ì •­ÍšüZûK–Ý2²ñW˜Šˆ‡ÕƒÒi€’¤Òñ,ÛüÊ K1­:_~dwNŒÀl¨*ÐÍ èÂîFö»s^`»Cl ‰Š‰<ì~¢ÞáþTž-ëž>GÜUWWÑð’ew¸RkD;ãÅ&Yp¯ªSúÝ9»I6:Ö ¸´*k ò¨€ à ´@4›1»Ã/ ˆ@}íftÀÝ¡¨€Ð…ÝmrÞ´o%„Ý!Š^áaI)‰û.vâe^'È|äØ!X^²ìŽÏUíþ~”e È‚"ÝßXÜ£Ó+€ãÐ^]ŒìnG4Á]£¨C]ØÝiüîpjt¬yHâh¨¢e²Á———3üîÖ<6Uµ,úÝíuiÇý¢¨€+`@v‡k9q½‹ßÉW±^üUÖ[/öß#!¡¨€Ã)  »;úÙüäÉ“Äï^U]à.¥vw€uáUVVOØ=((HÜ|ô»;ú`@ûQT g*`GvOK OK  )µS/ËôÒ²â-ä³x_ø@ºQðôô0 fº°»£ûÝáAªÒ•Úy®^Pª¤¤Dœ“Ä»ëšÐïÎÓ5˜@PM Ø‹Ý22¢¤—sÁYN}¼ì‚‹‘S.o1`T°­™™QpÈk­Sv×t~4fæAƒ> V•Qý:gÎŒ?þˆjúÝÙ¿h*€  lìÂîééá²r"§|êRÊGv× I˜Ð[ÌÌh8ð5íEvwt¿»pB¿|ùrRRRDDÄþýûW¯^=sæÌ±]¯qãÆÁç¹sç®_¿ÞÓÓ3+++''Gö2€~wäT@Q»°;DË(]Â¥Aê¶Š™Ñ ˜@l®€ÖÈ]ØÝOÓ:Ù ~wÀw½ßmb¼¡ž«j“a%¨*€ X¬€Ø]ñ¯çJìNÂÜ©{Ux\\Òæà…¢V* 5lFvw¿»ø¤N…ÍÀ‹¯ ,è|ì®ôd†ø¤ˆøÝ€=…&9„Z×vTÊÏSôQMÂ0fkÅS¹C¨­‡‘„ÝýZârÚᡪð“Ó )2»3"³RPz‡_J»_r{`âEÈi“çªj½„[I X@Œ €Ö_v×ã4jß:a噣î‡)å ß Èîƒ-# ñ#-9ÇEí–í—s_üÙ¤¼TÝ"–Ž ÙÕTÝ#Õþ'dIMÕj»ó8)¥ÄIWl~²‰ÂWbCWÖÃÍÆkû²‘N¶ ,éª*ÀÏŽ–ÕÏ0ÀvÆŒxâ§êWêi%JóIöŒK@pY«Ø€Î¯¿jW:Ad÷žÀLØFTÀ ‚Ýà¬MÀ=>!^Jíþ^^žá§Â€Ý/µ6@{ß/^¼ äP”:>ÙBYéGÔÚ †bwŠ0Ä`ÍÙJÐà Á†"6¤²Oª•ÆŒ¦ùÒN•Ä—­\Í]©uäóÌ>-`wþŽSÊ©:Iàߣ*ËÄtŽRÈîF`´è ‚ÝÀïNØ=9%):: |íááa>>Þ°¤LbbB[[ø×ÛÛÛ!ÆýR[+°;p<¤«gV®Z¨î\Ìz8»|§&<Ô)À‘ QtHå‘‘Ö`A÷Ùªˆ¸ÉbÃÄf‹µs•‡wY”ŠP!ì‘=SeÃèž™›´ùV Ξ-ÈŒJš0h›QDÚ¹T=Ò²ì9-Ïh‘mµÒެTØáŠ#»÷fÂ6¢FPÀìîpçh©Á„ÝË+ËÚß›››!œðzk׫¥¥6^7û… EÅ… õj')%}ñ\ø)*•¥1]…5šß݆•ÕŸ§~‹ òTŽyEŽÒS¶µÙÝLƒ6 =AC°»ÓøÝÐó òò ò)Xojj:þü¹sç32ÒáuöìY¸l(±»Ä)§#åh”úíl{M’­Í‰Ù]Ö«*)›ªD=$Ž„ÒÑT3‘Ý{3aQ#(`vw‚=¡pp«¦ûú•––°¼¤ÞÐÐ D¸gçdÁúîÂZïªm¸œr´³i^µZë387»[¯Ö€  =JÂî>q­ÑÙq9í¢s:Ì)»#¢+evx§vø&_ñ¿9wûfÀ;œH­Aö%*Ç„  ªãÌ`v7²ßØÆ~<èî𪭫=züHzFZ\|,I±q1±±1^ޞǎ…$É‹íw®yJ>ud÷…ØXT0¸„Ý[ãó:ò:ãòÚc²;!EfvžÊl‡”ÖáŸÜ˜Ü”ØÜmìnpÑÐGÜUWWÑðb°»ô>TÈL-æ õ» y8m¶2²»•bqTp&à ½Í·ˆ³EG"* ëë3ÃifCP Gz[[sSÓ™ÆÆ@ó3g*êëËkkK ÕÔœ†T]]\Y™ñb#䬪*T=3 ßÝ6EØ¢Øá–”’±ïàb'^vàu‚ì!¡ÁGŽ‚5àáÅ`wÛØ¤s-Èî: ŒÕ£¨€#)Wè³M7žÈ_´/sîî¬9»3¥iÞžìÅû²7z7\hCvw¤ÞE[QK G:€{[ÛÅ––&ô Î655t¥3çÏן;W×Åô•@ð³¤DýNC°»ÓøÝá&ÔèXó‘ÄÑ. ;P;DËd/,*‚///Gv‡û0``éá€åPT0p…¾ØÔÐ ébcKó¹Ö–óp©¾|©ùòå6X.¸½ý2¤ÎÎ+W¯¶“„ìn ÎCSPÝ G:Ð9€;„b|îר€ûÙ³Õ»çåÅw“ß½Wßü>coPìêêêââÒÓ€ 0øÝ«ª«Ü¥Ôà°.¼ÊÊÊ€à »ßë6`ô­Øùüî²aHlÅ÷tóýúö.ÖîP è=öHÀžCIbcÌîœÜì  îpF»C¨Ì÷w3µ“Ô…ìUß§Jžœ™™ŽÁîŽîw‡ðÆJ팡¥€õt¬Ýeïà—Wü\IÎRÔ}ÃáêÖh‹ê±tJ­ng·—ÂF祥'íj×ÒÄE,¨Ÿg°wJÕ ëØà©œ'¬ÍäQÏùò »;_Ÿb‹Pë ìîâ8÷øøˆ.j¯a÷ÔÔPÇ`w륱{ Û·o£V•Qÿºtñûín¹ÅÝ­' ç`w©ƒMëÙ!!õ¼²}±Œ_¥Ø-쑚 ‘Y‡,¸+ùÙ Îú5œ3›¦]SºYVVµ”®–«îÝ2™Ý…CIvF-HìãÚºME ¢€ˆÝÏwî$¸Ã­«ä°{rrˆc°»£ûÝ…ñÑÙÙ ëÌÀÚíÅÅű±±a]¯ððpøŸ••‘3°ò ,oQe±†bw†«X|)¢Ðò›JÁŽ\ð¨*±¦Å"[YP UÙ4¯´S6Ë6çFvW%~R‰tÆ3u±FgÆ|@ Ÿa;$wX>rfdœ‚w¸WÕ üîdU¨½¢¢¢¬¬ŒP{AAA^^^vvfzZ¢ß×®[ëÁ[0,+bs²tnv·Ld,…  =Vd÷ÛõØpT€¡œÀéÎ)QAA2ÄÒ8»s6ÉÈÙ¸Ç'ÄK©= ÐßËË3üT°û¥ÖHbïûÅ‹dÛeóXRdw#´ @]dwGïA´ÐCó™ábcnnÃÄÇûEG{FE$˜ï´´°––&‡aw'ð»vONIŠŽŽ_{xx˜7,)“˜˜ÐÖÖþõöövˆq¿ÔÖ ìéjÇ™•«*»Í²»Í%Å QT@vÇÁ€  Rô83å7Ôåñ§¬´80ÌôJ“éé"ÓÝ{L½WšLw¥âúî„ÝË+ËÚß›››!œðzk׫¥¥6^7û… EÅ… õj')%}Ér¶Ò¢(æþP^äËæþ{ÁZŒ™Á“*€  Èî8PT€¡€Ó²»ÓøÝÐó òò ò)Xojj:þü¹sç32ÒáuöìYèi%v'8N-0'Œ a: ¶ØðCv·¡˜X*€ 8ºz\¡Uýjl÷œ¥]U´ptô83Xáw/6ýÞ ýîסpp«¦ûú•––°¼¤ÞÐÐ D¸gçdÁúîÂZ廙RêSo‘uº Ð/]ÝYuwüÝùµÂœ¨*àô èq…Fvwúaƒ tzô83‚Ýìw'¶±ß:€;¼jëj?’ž‘KRl\LllŒ—·ç±ãGaIòbûÝU}êµS(/> z8»S¡GÔ“n,Gü›ß?àôç/'n aƒa sÊÁ ÇÙÝ)‡ 6ªG) Ç™Áìî½HüîCcŠO>r6ŠÓšu+!̽¶¶Ö‘„—õì.vºË~¶Oùû€~w*¸_ µ¥LÏÙj*Zɰ`$ ¸âÙB†R£8kÏ9©ÚØa`ü™©i-ùʨ\È@õ2£±<ãA¼GýF‚•5óW=WÈVÅ_?¤ŽžG+4²»£ ´ÐãÌ`v7¦ß]Ó€#ì±1$<&*&ò°û!ˆz‡ûS!x¶¬{úxq?T]] kD‹ÁîƒRt¸Ê2ËæWY£±»´JB97»K[ͳ…šûI1—"f6êqîQJÕÔìˆa•˜¼y¸ÓâNgœ„:m~pi:ùðX¨Z¡jT3¨îÂé3èq…Fvwúaƒ tzô83‚Ý ç»C;¼Â#Â’R!ö\ìÄ˼N=$4øÈ±C°<¼ìÝNAÚcxL©Éô+E“%f³µtøñ“ºRYö„“gbÀ°Y¶r¬Ûª×¤» Æ˜¬Ô¬Cü•Œ.é´DØHµ”Ê,–Qu$32ˆç$²G Õ_q¾ê#õ¸B#»wCÇá.P]ÐãÌ`vw¿;Ü„k^ ’8Údj‡h‚ì…E…@ðåååÈîpY²Õ2<ì. 0%du=hª\L`ªp,K‡ªŠQ3ô[ 3©MÚ ÆÙüT=b>¶╦²ÊKµbÌF„Ì$ONFgñgçQêh+Ô4žŸY+4²»ñû-DØ èqf0»;zǦ¿{Uu€»”ÚÜÖ…WYYqc) ÅÂRRË’:Õ²{dìZj‰ê|€ ëT…Ts,èi bµ¥s NÍ¥:SóRiŸ²õgŒdÊHA"á‘M¬•1 zÓ&Eô¸B#»Û¤k°TÀŽ èqf0»ÛQSܵŠÝ-k‹ÅüaqAËìÄR¨€¬8 20ô¸B#»¤sÑ TÀbô83‚ÝíåwwÛã¦Ùòãç+¹íÙmqÿ9YA§awʯÉÙMLœBa6°þO:Öc«Õã ìÞc‡6ÜiÐãÌ`v·WYpƒ©EìÕ:½÷ëLì®·VX?*€ 8½z\¡‘Ý~Ø`^=Î †`w{ùÝ ˆŸ>}m,íz••–••——Á?xU”Ãrì]«²ÃÚìæõÙ!3²»p˜!»;ýˆ  ü èq…Fvç×s¢ÆT@3ƒ!ØÝ^r/))Pn?Ùõ =yrï¾}¡]¯}ûö………††…íß¿¿ª² Ù]ÜSÈîö·¸_T0 z\¡‘Ý ØÑh* I=Î V±ûÝn¦Þ+M¦»R{õÍï3¦ñæÅ®®®...Z–i_¿;¸ÛÁµ®÷½{Úx¯ïßÀü¿ëE¢„~wô»k:h13*€ ôô¸B#»÷ÁƒÍtbô83‚ÝíÕgÄÚÉsOÁÑžÐõ2{Ù«ªÖƒƒƒá!©ð ©­©AvG¿»½Æ*î@ ®€Whdwƒw:š‡ ¨* Ç™Áìn_¿;P;`:·ûûû¾‡…‡—½ ¿^BSØõ‚µµµ6awaídÕþ6xŒ™1x¡y¨*Ð èq…FvïÎÄ}¡z( Ç™Á쮇X’†²D–Ýe+#» ¡q–&4>»KU¥žk#t §ªâ¾ã,Â31£+`“aüe| í;ô¸B#»Û·Oq切õ èqf0»[éw÷ˆÈœñ¯4Áv¶è„Ý!`Þ!H&0 ðTø)x:t¨¨°¨¨¨ž ¯Ð°Ðú3êìÎsmãgwYãyvaýPã©Á€ìNMœ”ˆJv¦ÄÓdªïŒÓÒù¡ì1ÅË®N•W«”_I7i~özä²-¥é«t†¬Z¹lÓ¬éAñ»™ÝeÏ!<XiœpŠc\˜çpEô¸B#»;Ü0@ƒQJ=Î †`w+{¨]¶¥íBfÂî@íÑïáááÉ)æ°{=xÛëëÁæÌ™††3ðÓÙ†È̸WUéÂFQ?» R” ¾Ð2*§@ÍJ‘¥ÅÆîRý•pnv—¶šg ô/ƒÌd•dƒ¾0`¤^¶§8;KÖNöPgÔl%ŒŠPÁ0‹ëÔZPk~é!¬µ­ùm~Î1x…z\¡‘Ý Þéh* ª€gC°»•~w`ôŽŽöÎNs‚« |îè¸ÒÖz‘“Ý!`Âcà=(((ÂüŠ<|øðéÓŰî{xx¬ /pÆŸ={Ö2v—…)> . ‘*åË2Ådïz\t Åî²  (žäPŸÅžø'¢›˜Py0Tõ0îÎ JËŽ†aü`͈ŒÎb—ØÒáÍÈ&>d.­]#=Š¥Çštà‰OÒÑE)Î =“(ýJUK cªjüK'!âS“V‰zT~=®ÐÈî=jacR=Î †`w+{ ½­­¥+5Ãe¦µµ¹éü™ª²~v‡˜vp½¶§¤¦¦¥¦9rØìmohdo<Û/øé\ã9ËØºò©9uí¤.ÏlŠâ +ÕŠ;»Ë"‹’ž„QÓýØJ^ëë‘¥XÍ+ž¬Rh–5X: eÁ]мl(§L•íD鎤‚(Ã)>ÏáÆ³SÙÑ¥:2e—–b×#=;Q3ŠsªÔs²éq…Fvï9ã[ê¬ èqf0»[ïwoii_„àsIa°;©YéÀ?qŒ°{ppHTddtTÔ‘£GÀ×·oßáG9pÇmûn¸ÒþÛoñøïãë¿ü‚ /(B3M—RÙ«>E„ÔUS‰ºÄ”ö:úaó”?ÄW\­ì.\Vù™Œ€,Ó¿'°»ìôÌø4Ã] R—å?¥a¬:º”ÀD¥2Š‹;EšM¶ ¦Yÿá` »KGÕ5ªª¶T©¯5u´ñG;éS+4²»Þ½†õ£z+ Ç™Áìn½ß½²,¿(/5/3®49é1Iá©qÁœìÁîp[*¼Ã˜¢¢¢¢£cÜ~pâÞ;';âÍà÷žð{ç1·õþä•ãƒ_:<ð…#ÿeÛèQW®\QÂwÊŸ'õ®Iñ…Tm¤¬_º/YÜÔchŠÝe‰Pi²ÄžÿÈ’ OUzˆlAlœívç±1PÙTÊ IÙŸT!Ø‘e§.RmÅÃR|ÌRÃU–ÚU›‰ìnqÇéTP+4²»N…Õ¢ݦ€gC°»• £g$…Å„8t*à ¤pÿ‘AG´²{Td8Ý322öýê— _~6àÉ w÷éÿ؉7ÿ³tÄÓ‡|4ið_ zoÆÐÁÛzÿòÂ… VšÝ ÅÔbýÞÆî¬F˜Ûp7IªS# ¬WÒ¶5ˆçŠJs<±V⹊¸íR¶¦~•Î*¥U1Ä×/‚Š[!e鮥–KÛÎÈcAÈÚ CJG‹¬aJ4/Û#T ìžRP!»Jû¹zB=®ÐÈî=aä`[=Î †`w+ýîV®ïwXâ×CNžŒ¯{L D·ÇŽy'àǽÞzìX¿ÿñÔ¦­ŸÜý•Û®[ŸY·ÿ¿«Ý¾½þzi¼»_Ocw˺Àb•,.h™X @Œ¬€Whdw#÷8Ú† ð( Ç™ÁìÎÓxÎ<š¦ä^UÂîµuµðüTøë¸»ýú× óÇ yõh¿xí_ž+^ yûÑ_¿½ã؃‹¶¼6aÆÆÛo'OtêÉ/úÝ-î (Ü‚"›‡QTÀø èq…Fv7~¿£…¨[=Î †`wMÀmÃQ¢ô ¥™3wÜýÛ“óLJºN<¹hjrì’Ä´e>>Ë?Þàöâˆñs~s׆!CàYN6´Ä«r&vwDýÑfT0”z\¡‘Ý ÕÅh *`zœ,g÷gŠLw»™z¯4™îJíÕ7¿Ï˜Æ›»ººº¸¸ÕYÐ<›Ñ4 Øí¶ ð]6mzþ»zÝ´õågv}öæ=ývo}ãÒ—Þxú…m7Ý´öÕWsrr`õw›츕 »;nß¡å¨*`sô¸B#»Û¼›°BT ›ÐãÌ`v×Ü6½£££©©©¬¬,+++!!!<<<88ØÛÛ{­«ëŠþsçm·í½ázp‡}ô›¥KSRR ̦­­Íæ–8V…ÈîŽÕ_h-*€ 誀Whdw]» +GºA=Î †`wjgñ4 ½½ýòåËÍÍÍçÏŸ?{ö,¬ Q1¥¥¥ÙÙÙdÑwX&??ÂÜÏ;9ømh¶#V…ì†6£¨€N èq…Fvש³°ZT ÛÐãÌ`v·¸¥ÒÛ°ªnëWݲ»ƒvš  z( ÇÙ]žÂ:QîT@3ƒ!ØÝ†"ò³û¼ùsßøžÖ4þ<ZëÐU!»;t÷¡ñ¨*`[ô¸B#»Û¶°6T ûÐãÌ`vçnUÑù«j?vüèƒ{IÚ/›ìÝgNßB:phßæ- ”ª =$ƒƒ²;çÚŽš²‰ÕCz›Ùm È>RŠs|v›‘¸#P@+4²;-TÀÑÐãÌ`v·KÇ…»;¼nýêÙsf4wÞ,*Íw³`Á¼iÓ'³mÓ¶[vì܆ì.t–¡Ø]úÈO°S–ox ‡'Ñ¢vþ‚ºŽy¥ÇŽRØÔ…¶åð±MÒtðèHo…ç7}»× ŠŒ9RÕ6Žð7xNGaw פXOõƒ2•WLíÒ•Ô,EŒY² ¡ˆM‰Îeõ”m ’,²¬¯ºQSs(ÄWEmË:ˆ1µVµ ¤fðϲØýBÕ£IL¥¹‚;Õ_z\¡‘Ý-;6±*`ô83‚Ýí"1€øŠK'LübÜ„1ÆŽïð•|€wñø¼xÉ"(²nýz%kôa\¶U[ÊFìK©ê.l•Á€ì.姤0T+Í‹ážêej& ‹Œ¶\S=lnf¡Ð(ÒXªQŒš…ü²T'=@”¦l(ä1ž Á¶‚N%v—~²#G‰æÅCŽú,½BÍŒq®Úkâ¾f˜J ks‘¦CC¿Ìz\¡‘Ýõë/¬èô83‚ÝùåªBóW ¾xÉÂ1_Œ5føè±#àãëÂE®PÒÄ`wöUVÕxNò3ÈõÒqÙ]FžHYR¢.#ôc¨ÄâJl'Å\Y¡dǶ’²Û•8˜Máœs'þÊyRÎñ KðÂØcÏ@8ÙÝkd_ü³/¥)¦~Ô$ “eÖã ìîdƒ›ÓÐãÌ`v·K_ˆ¯ß¸væìiÇ=vÂý؉#°däÔé“Ý™:}|˜8yüàÁƒ>>täèჸlÅ’ Ç1Ö™a\Œ)Ç㊫D]âdÝlݯ¡1Ù]Ê+ I„$Ë1J]¬ŠPÝÙ;lNµ»óLQ8]Uj*›z¥S À]i¦-;xlV•K+…óL/mbXwo#ïK+4²»‘{mCxÐãÌ`vçw–«ÊÄ_PøÖí[–-_èxòdp` ß<×Ù>¾žðiæìécÆŒž;oö„/Ç­ZµjƬi÷–±;ňZÙ]‰>UÕÐ5ƒ£°»@ó ôa(,w ¾L©•‡huíqc);Å_)MÈ£òˆMUÒA©ˆt†É_¹,SG Os¨v EÛ&©v“´ÒIˆ¬ÍìqÈŠReÄmaô—tN+>)ñˆ)5LiתÒ9k=®ÐÈîÎ:Z°]=G=Î †`w»t!Pø¶í[¦+¥E‹,X8oþ‚9ðažëÈÏ›‘^É„«ÒORÔ“½rK¯¬vQŒÚ©¡ØÝAT{¿r#°;¿µ˜@l¨€WhdwvV… ØE=Î V°{±éî=¦Þ+M¦»R{õÍï3¦ñæÅ®®®...@ušâw–«VKªây'~÷¹ógñ§­ÛÌì>vܘŒÌ ©%JHùÞÄÎ9Uj”úíd]’ª²è‘Á‰ÙÝ2‘ÜõfX'*à( èq…Fvw”ÞG;Q%ô83‚ÝíÒå@áßlÝþx°‡çñƒÀ’‘Ã>ÿ`=ädPCÙ†³g` ø móÅ(HðŒÕU«VX9þÝÉ5Ië­VÊŽÅQTÐI=®ÐÈî:uV‹ t›zœ Áîݦ xGè7¯Ÿ>sÊà?=vä{Þ…Ç©Êüð}ø)&6úÒ¥¶Ë—/]¹r9--xR\BÌ¡#ûa•w»l´¢ßÝh=‚ö ¨€Ðã ìnÇÅ]£6Q@3ƒ!ØÝ^~÷£ÇŽlشqí†k}ô°{SÓy÷ˆ¨S€ìîÇ766¸µõùÑ£GmÒŽ^ ²»£÷ Ú  6T@+4²» ;«B좀gC°»]Ôœ?Ô.þsùÊw vHÄïæÌÝÜÜlƒ¶SçcwÙÕ<Ù²‹Ÿ³ãqPFc=Á6NÓËz\¡‘Ýfx`Cz¬zœ Áîvñ»Ã0êè诩©ÉÍ͉‰ ñõõussûpð p ;™™™A¨ý³áò³³ÛÚÚzìà“6Ü€ìnåƒÅÏÒâìh1»Cƒp˜ì¢F²K‰›¬ªžtSªN±h<6PùÙÅ…_ÅvJí—í8­Æðô¾´NžRÒ<–þRü9Å [Ö–^J+4²{TØ|'P@3ƒ!ØÝP}sõêÕÆÆÆ¥Ë– f¾iÞ—-_ÚÔÔd(#`ŒÑØÝF¡dtv—þõ@ëþÊâTyž=JIÝ‚ÊIöL´ÃpY?äŒ3ßcÌ£øéá9õ¸B#»÷ðA…Íwô83‚Ýíåww‚1aÇ&ŠÝ•(ŠrŽJÝäbÏ1õ«À…Tv›ðœ­ºUÚ"ž-J{gˆ¬4 Ø”× þ–N¨x¦ JL¬Ô|Ë—D:ä„#9â‰ŠÔ…ÏØ"n‚M¬’Ò˜W­Sj’ì! t1Ë„uÐRz\¡‘Ýt0 Ù¨€ €gC°»}ìéqhôçp&ÈlÁ.°[‡`w1Žž“² Å— Ê”þd[´íSm©@f‚2²pIiÈÀtÙœR¬”m¦’ì²ì.‹§âæÈ²;µ vcyúBi2C Ë6LiPÉV¢:Vù‡¨¦qN5AúÕÈOWÚ$Whdw›t V‚ ØQ=Î †`w­~wîué*“vU@JÜÉH•I»!3â»Í®C°;å˜d¢*ˆk£ÜŸlÀµ¹øªò´TÈÄtHÑ­U•h˜‡GÙsªã”Ú«Úeìé„,â«j«:™O-dçâ]Èj¥:n•nwvçì8~‘(§Whdwh** «€gC°»Öþ/ŽÞ\K§Šð…$•Äl§ò°…PDë^0?[ã³;?Ar‚¸¼2\˜vE”ü:(Ѽìv†×Yë ­É·­Tª –u“êdFl⥪J‰œ‡Gg~Ê×:ÏaïÝ2Iº”Whdw‡h<* èqf0»kõ»v?5ï—œ 2#»Ûü2»ËBÙˆÙHÕ‰ËïÔ´¹ÚüjJA7žéO•ÅqÕ²ìËè2%V¦† {nÀ–]“Ô–±;›¼yF¸½ØÝaùG»¡rêq…Fv7T£1¨€ èqf° »ßÜ7¿Ï˜Æ›»ººº¸¸èý {ÂîóÇÜËïÙÝ-mªEŒÆî„É„—‘â-Rÿ+ù•"N ‰¨<Ò" LT•ÑæÄ"ˆ ›-ÖJìm¥òˆmc«„ݪ{dìZj £S”š# A´v%ˆ´-43Ø]Zc‹¸ZJÙi e†8ôx¡ZA (•HZƒ’,ZåuÄüz\¡‘Ýq$ Í¨€X=Î V±ûïÝL½WšLw¥ZÉî–ùÝÜyüî-;d©V¿»,Žàp+`@v·UYÜû´•åXÓ+ Ç³¾Nëkp‚ŽÓã ìî›ÐÃÐãÌ`v×Ú¯ÄﮉÝÇzHv/R'¥ÔM¥Õ<Ê[iMq#—ubv§ü—œ½€øÂ)f³@=üÙÖ×i} HaØ"z\¡‘Ý ÛÝh*À©€gC°»Þ~÷ܰ• vWbzÎ^agsbžsnv·Iïc%¨*ÐsÐã ìÞsƶÔYÐãÌ`v×Úa²~wqì»8–¶kbwi”*#lWoJ\¶BÊ/ÅøJíE«&ÝŸÙ½û5Ç=¢¨€aÐã ìnØîFÃPNô83‚Ý-ó»sÞ«:eäñîì˜ö­`ӅΓ ¶‘…{¡ ð«ô瘰c6dw;Š»FP£) ÇÙÝh½Œö ZÐãÌ`v×*„Ö5"ÙìNí]Œà²dO…ÁÈúé) '_•æ â9€ÅØ »k·˜@œX=®ÐÈîN<`°i=D=Î †`wâwçy'=MÂ`8ýîÍv—[âø%w»t»”ËÑï®÷r¢=äÔ€ÍDP»+ ÇÙÝîÝŠ V* Ç™Áì®UÂîüëÌd-VZ#R‰§UÉ[)†ò¸cÌ ûÚƒì®uðc~T0¦z\¡‘ÝÙ×h*À¯€gC°»ñîÝÃîÐ7ì›MIçQ€NÝuJ9é¥>{q 3Ã<Ø<§ê|LºG*ÂÊæ&a…N¯€òNßV6P+4²»•‚ÅQ»+ Ç™Áì®UYúݵîZ‰Þ¬¯Çáj0`¼»øŽ ô´àŽaéÝì׿E¨ §t *»EØ(kOâ‚äg~•Þ7¢Ôi²E¶­½À¾ïEº#¥ú­aw©ÈŒVX³#"šð.´N«hÎ_+4²»sl]OP@3ƒ!Ø]“ß½³³SxT*µ¤°L$µÄÌ@A=F‰•WD=Lêž:ÆîÖw„s°»ô¯<[(,£†g bV¦>³ÿ¦!ýS•lUJȨZ¹¦Ú8YvWÕMZ¹ Ç-ÛrëwÄ$œº9q6=®ÐÈîN<`°i=D=Î †`wMý×ÑÑAØó^UX#’°{[[›Nø®É~§Él(vWâÊ1)u“‹©QêY$°Båa± !Ùj(ùJÙ,ÎæKiÙ[xò3 P:¡b+Ìž€ñ7§ø²U1ê&;¢¨N¡æ3 «”z™½ÔH¦&B²:Ëua£°_Ùš9et¦lp…îì¼Âß"È™áDª èŒ ìK8ÞPÄߘÐI§ew~¿;À÷•+WÄ ý¦‘ )Í!|†w!‘¯$Cï4(ráÂà~ú¦VëìN9\¥,"&Q #°¦j; YŠeÐ<ƒÀ¤¬/"KÒJùy]Üe²õvJA™±_Ù]³§ì¾›Aá,Õ% gô5nU-¡Z'­YIyYd§v'®Mª0[s;Žÿîß5añêÆŽ´’Ž„¼ËQmáim'SÚ‚“[[ýZ|ãÚ¼c[ND7U_†œ%åeÈîÝßM¸GT ›pZvçב°ûòe3ÅÇzˆJâG«RŸçÎ}ñâEdw~©Us:»SœÇ`P Ç¥°N2ÈVh@|ái©tÞBm‘ER)ï l§šŸÁÊJ?±ñZÉéèåÏ©:ò•Ɔ”yæ²4¬4?‘µ1P™R.Ó¼`ãèPݧžN°;€{YýÕ‚ê«Yeé¥iÅ)… ùqyíÑ9™!)Wã/BÎÔÜbdw'èwl*ÀVÀ¸ìÞ«o^Ÿ17(vuuuqqÑúw:~¿;üÝÚÚZ___PPœœâááqðàÁ]¯ýû÷û»»{ppp|||fffaaá™3g.]º„136<ÆŒÏîü>B¶gQ­Œ<6Ôœ³*ÊNØÆÿ«”kÅ,Ȱ_Wv—­œ=+P•ZVd›(¯Õ0%vúBš® ‚§¨g,©J笻ƒÇÀ=¯¢#ýt'¡öø¼ŽèìŽèL3¸‡¦u„$_ Jj†œ' Ýu0`»PAc±ûÓE¦»÷˜z¯4™îJµ’Ý5õ1ð7à;€xsssSSÓùóç€æëêê€Ñá|8{ö,ü îv`}ðÖ#¸kÒY5³¡Ø] ±Ùüœa»sQ•ÑæØf†VuŠ"ær~šg€#»³¨i€ì€­ì9ƒV>–vS÷°;Ï̇Íî|³¢*2ÿ1eómü »Geµ{raP;¤¸ìv@öà”N’Àï’dö»{Fd#»¿[ÑBTÀJœ–Ý5ùÝ­‹ÛJ£±;aá%Ÿx‹”·È¯J˜(®“ªPd­'Bë{G,‚¸iâ–JÛ%»…bkÕùe­ÏT+§¨‘?¿’ VJÍÉîÔ€”ŽRé UêÊ`þš)¥õˆ3H;…šÊ«Î¬TØáŠvM»dŽ“)Éi' =(¹#0¹Þ!v?œ…ìîp½Œ£ZpZv×*„Û·¥ËkJn{vkÝ æg+`@v·U—YŒà´•åX³*€CËø=KØnNýÿöή·+½ã¼(°FESŠä´éM¯¸WM/ŠEóö®ÈÈMwë´Øb±HÑ‹Ýt»»èZÁI±‰e;ŽÄ/%K²^,ë…z#õ.’"ER’eY–©@Î!Î93s†œÏpþƒ2=:xNO„$}ù¿ÁùS Ò÷;s§ßdNoΜ^{|Ò;þýQäÝcº“ÑlL kÝ=( –wgév>¯žïî¶x¸;>>/woÞ Ð}˜»9xDO$}˜=é›9¥¸Ÿ9!q¿=SOº_{truìåa¸{÷íôôºÖÝ[Ë»_½ö%›'ã‘wßßß§¯m‚»GqHÁÝ£ Š:AbJ€¹ûïÓ‡ßL¼üîñIý;˜÷ñËï¦êŸOýjòäúÄK÷ÞÑãëÃO©$>«Ófƒ@ tf8=ýÞü-µZýLâýI˜ééþÚÎ’yÌMR©wRú^U.âì24+¦¬,äë´Ð÷ª’»ÓÏ@îîû'æ; »KvŸ»Kßþc²ûį§ÁßpLˆ¡ '££¦vp€1w_οøfäàÛ±§ß² ×4Áâ«Ñg7F¯=ÍæŸSÉÞô‚ïÚ÷Úì} §³t`Ó D€ŽŸT÷öJ¤æÕj¾RÙ*—×)J¥5ŠííÕB!{x¸G%‹Åeß3ƒîÞZÞfË0qt_ÈÝi1wwÕÞZ𹄠V Ý]û•æ»CüRÃw©_9iøÆH‹yÜŠâ(}5iý¦ÜY´mSëdåÝ:bÒñ½Òæ½+ƒV®mj›>*½½…ÚZxK¤ÃÆ£ró¦jÇI§š}ÎÛ¥+ôƒ¹’áF{‡ŠìŠŽçÌC1ˆ)v¤“¸ ?}º{pPs¢úäIeÇqú<•\_÷•ît°ùî4[†Ä>ŠªNsßs–gyòä Ü=(a“ò¶¹»¹^xè&û•yUº»Éý§öŽÔ[ÄEé甽ù‹ÙŸ~¾ôoŸf~Ô3÷ã+³ÿ|%CA¯Yüë§ ¿¸¾Z{z w‹<ê› °#ìœÄýÙ³'MqoX;÷ÝÝmîîKKc¾wõV¸;Ë»›üd»‡»;‰;-Õj•fȬSŠL|ýéÙî۶ÍÝ£è#êH ï)^T'ÀܦÊ43îukgá({±šÝ¥)14£½«ü5­§ q§§¿SÉÙÙúƒÏªÝ%=Ÿôš0C…{>¹t+(ïMîÞþu÷Šô€÷ÒõèO×#¾#ÄwéôwéþoÓý·½¢ïë´ýNôõÝìïûJ÷¯÷#@@@@@ {\ë¿ÿ*úîõ²è¿ß;Ðmhð‹±‘[Óﹺ{¾°¾¶ž[^É²Èæ—² NÌ--Í-.e–œp^L+1µ´äÄ"ÅäÙx´´ØˆÅ…ñ…ù‰¥ùñz,81?J±8ÿP޹‘Źa€€€€t…ÌÐâÜ1–æiÍ ÅÒüƒìâ‹•ìðÆÊ¨«»WkåJµTÞ)6¢\(ï4ƒ^—óÍØ,—yl”Ë<ÖËeŠU!VÊå•rɉíåz”rŠóåFÌ•‹ˆ=R!s6fK…Flçg˜Ú.L³(fÊÅYWwßR=û•ýý².Jûûgc¯¸_¼{»[NlH±[[—b¯ºr6r{UÙ‰‡·h’?½àñåÿþ Œ u„ˆ£¯A@@@À*µJŽb·’= »•WQ«ÌÕcgžÂÝÝSßÛ+S8â^r¼\{»!˜©¿òõZm“BÔôZuMŽÊJ­õ>ˆ=©V²,ÆGn‹2¤ç¢0cûò‹ÏÿåÇ?ú', &°¿¿O#A!Éyì+z    s µuSgQ-ÏQÔv2 w£'õÚG©ÔëSÞÊ^|ïÂ{«bŠÝ&w¯çÝŽRO¸~ñÙ|Ї%ÁèžåæÍ›Ž»Ë#ÄÚc8•J¹µÍãWv'.­K;-ÜÅhRX0Ã"‰z@ { t»|­º;eÜ™µRæK2 ÐÞÿðÃil¨#„.–|a‡:»|ŠQ·2¾§†v®ÄÜ]m³Ú¶@‘˜0 lá5›¬ÑòÔr Ú<_øb;ÅÂn Ô󭣤=´»X=ºµ#G{Zàg éÐN †‡ïiÇ£é¨Kªm³g % Á t»?®çVE”w§œ+÷y*âF€Ý®Ð0 †«#D’Q˶hö†[;:ÈÝ[h›GT&­­[å‹Â·€‰KÒÞÒtÊÝuÐp€¡X ê.ðÞ)-{õ.W:±øžvÜn3Ô”öŽZ½y …A,&Ð…îþ•‡»ÇÍ9ÑÞœœœP-‚»Ë#Äíò,&• ËhÍ€_YEÔV(nQ¼ôzTËÅ+7§­Pê—¯Pªúë&@Z‘Z(ù·¨jkµR¢öT{†•jV½ŸoNm¡´ ©_ÚšÝv„ÄJê‘Å׆ú º/ÔÝáÝG!­ØÚò’F{P‹ÖÅŪÜ^wßND@ ñàî!È!ª°š€‰»»9®šââWPéìvÑUµOM»]ËÕõæíñÐ7Uu3`·óõÞã­#båÞÞcn]ªkß«nÎmŸJ;]ÛfÕݵ;K…–ø‹Ð¹Þ!˜"i÷y¿Q:ø2ÚÃÓûv½5w×6 C@ æÚpwú|ên­{µò^m›Ån­(F­–§`k¯«[»g£VÝâÕ³eª•U çÁ2+Õʲô™êNV úàíÃ7H$«å✫‹†À‹/ÎäÝ•B—7>ZØkñ'û¿òÂRi½T!¯Äc½¶ÒJÖ ÞB±Z·õeÔ¾ðúÕk!h¹Iïu#£V¨í¬Øe‘x¤kÛìÖ7†n›0Áî1xÔvJ ÐÀÊÐ ˆûWÜü‡¥zì´p\»ûÚ‘æq°hŒáYƒ-ô„ A ³vJ§ÊTKsõ(gêQ𥍔f(\Ÿ3#9ºêëÌÔÙ“Ï„bê Gwž©úºàîYþhÈú!uî>

¥„ µtš@#×.fÜ}òîÕÊÖ«hèxcê ³óje]ˆúì—3±³RåÁæÃ¸8úNi‰¢RZ¤`¦^.Õƒî<Ô¸wç3µÊv†¹;{F${ØHHBˆjâD€ízÔhu„0Éc 6â öš¯áãJZ¯¾W,©­DÚ®¸ µ¼ÔÃ6kû¥í¦xȰþj7áÖ ©³ZnJä%ønÿå”Z®v„ïS·½Ì÷¯´ Ô="’‘F‚:rÔê(òn<~:uJ£]»EíHPOêø ´F{’‘­ïÔžÁ0ðBH¨l!Pœ®P8ódê/šá:gfgg…¢²³FÑx]^®8Q_/¼®ÿ¶”;u×órMçËÅùRqNˆL©x6 3ìïK…Îw3}NßÍ”Ì皣׌ úŠ.êGK7½¦ vÇ»cC: 8XL(¡ $–@¹0K}/¦záÄÔ«È?.7ÃÕÝ‹ù…z›1_,Ìób8œ(lÍ)‘)l5"¿5+Eak†"¿é½ ÿnN;1E‘ßhûï«5›“ìïó›“<ÈÝi y¥]é ßXH€v=Ý¿±¿¨#D-ÝôšT ãݱ¡ ‡€€€ ,&”P’I °9I‘ߘàQXŸ ÖŒå7œX¯‡«»o¬=¦X_Z[kû/ÆúÕÉ5¿X_÷å±uŠ•Q9–® Á¾ñ~uù!8Íí@[£' Žq´à5€€€ØF`my˜Çêò ¶¦ñß܃Õf¸ºûrvÜ'–Æ–u‘[ñŒáÜR3‡rR, æ(ØJöZˆìÂ`v!î [àáÚ£ùtv¾…«»;ùõéµ™µÙfÐk9¨Ìf36V§äp’÷šh”|´±ê+gÃ?yo’àG°š@s* ›™²ÇYÏ6u*:¼¼¯{_õD¦þ0?ãÒÛþý aÔ¢ÿŸ;oûô)·¯d–6qÀ‰íó:ÆI‘’»ž„ç=lØxJÖòß@3jWÜkM2‘Y‰?-ö’í¼ŽBœsžk¯.Í©â°î½Hò{Í[Yl¯Ñ.Ÿ‘æc²Š¸vß÷èQý¥üùÛß¡Z àë×òàŒL÷’jO`ж²[nàÒ q·‘p¤ö5`ø69&Öµ),Y5C¦amw¨m›Ä„–S°ŽAÁã½z‡]3aj¾†?ö”_óçmÿ~…ÚQÏ·ýú¥àÛ½:MV>Ñ,öSÅBÞÒIvr¼o@t8=w+4xo],ª4]G,7(û+ò=Gp¯Fjé¯é\‰Pœti‡ö”_óçmÿ~…ÚQÏ·ýúšÈÈ쎥YN ‘‚ %mÊŒùM?í(¿çÎÛþý ?´¢ÿŸ;oûô+2Š9PršÚQÏ·ýúiEÿ>vß÷èVer å4ÿ´¢ÿŸ;oûô(þÒ‹þ|í¿ïЬÊ(åAÊiÿiEÿ>vß÷èQý¥üùÛß¡Y”Qʃ”ÓþÒ‹þ|í¿ïУûJ/ùó¶ÿ¿B³(£•)§ý¥üùÛß¡Gö”_óçmÿ~…fQG*SOûJ/ùó¶ÿ¿Bí(¿çÎÛþý Ì¢ŽT¦Ÿö”_óçmÿ~…ÚQÏ·ýú™E¨9M?í(¿çÎÛþý ?´¢ÿŸ;oûô+2Š9PršÚQÏ·ýúiEÿ>vß÷èVer å4ÿ´¢ÿŸ;oûô(þÒ‹þ|í¿ïЬÊ(åAÊiÿiEÿ>vß÷èQý¥üùÛß¡Y”Qʃ”ÓþÒ‹þ|í¿ïУûJ/ùó¶ÿ¿B³(£•)§ý¥üùÛß¡Göœ_óçmÿ~…fQŠ9PršÚqÏ·ýúiÅÿ>vß÷èVf(Ũ9M?í8¿çÎÛþý ?´âÿŸ;oûô+3bŽT¦Ÿöœ_óçmÿ~…ÚqÏ·ýú™Š1G*SOûN/ùó¶ÿ¿Bí8¿çÎÛþý ÌÅ£•)§ý§üùÛß¡Göœ_óçmÿ~…fbŒQʃ”ÓþÓ‹þ|í¿ïУûN/ùó¶ÿ¿B³1F(åAÊiÿiÅÿ>vß÷èQý§üùÛß¡Y˜£r å4ÿ´âÿŸ;oûô(þÓ‹þ|í¿ïЬÌQŠ9PršÚqÏ·ýúiÅÿ>vß÷èVf(Ũ9M?í8¿çÎÛþý ?´âÿŸ;oûô+3bŽT¦Ÿöœ_óçmÿ~…ÚqÏ·ýú™Š1G*SOûN/ùó¶ÿ¿Bí8¿çÎÛþý ÌÅ£•)§ý§üùÛß¡Göœ_óçmÿ~…fbŒQʃ”ÓþÓ‹þ|í¿ïУûN/ùó¶ÿ¿B³1F(åAÊiÿiÅÿ>vß÷èQý§üùÛß¡Y˜£r å4ÿ´âÿŸ;oûô(þÓ‹þ|í¿ïЬÌQŠ9PršÚqÏ·ýúŸÚQÏ¥¯ýú›ŠL{Qʃ”ÓþÒ‹þ}-ïУûJ/ùôµÿ¿B³1íF=¨åCå4ÿ´¢ÿŸK_ûô(þÒ‹þ}-ïЬÌ{Qj9PršÚQÏ¥¯ýúiEÿ>–¿÷èVf=¨Çµ¨9M?í(¿çÒ×þý ?´¢ÿŸK_ûô+3ÔcÚŽT¦Ÿö”_óékÿ~…ÚQÏ¥¯ýú™j1íG*SOûJ/ùôµÿ¿Bí(¿çÒ×þý Ìǵö£•)§ý¥üúZÿß¡Gö”_óékÿ~…fcÚŒ{Qʃ”ÓþÒ‹þ}-ïУûJ/ùôµÿ¿B³1íF=¨åAÊiÿiEÿ>–¿÷èQý¥üúZÿß¡Y˜ö£Ôr å4ÿ´¢ÿŸK_ûô(þÒ‹þ}-ïЬÌ{Qj9PršÚQÏ¥¯ýúiEÿ>–¿÷èVf=¨Çµ¨9M?í(¿çÒ×þý ?´¢ÿŸK_ûô+3ÔcÚŽT¦Ÿö”_óékÿ~…ÚQÏ¥¯ýú™j1íG*SOûJ/ùôµÿ¿Bí(¿çÒ×þý Ìǵö£•)ÖÇ£jrB’;N‰]C<ðDØ=>VpGåJtm@uµÑ‡ý¾ÛñÊéuËãý£mÜÃÿ5ËÜßH úWŸJµjŠö_sÿ3¶xjQêþÿøkØnlFk &Y[j<9”·÷r„Œôã­^:¨ oÓô¸Ïu’æÝ{\}OáÓºêÙ¿ê9¦ÿízê4ì›Ý>Yõ‹©­â‡ËEh†rÌóòŸîÖu±u)ÝY;y>¾W<%9uyÇüuµÑ‡ý¾ÚÿñÊ¥qÜZ2ÙæŸýO’©*ÉÛåe$}Þ]Ùø>âÒél5{Ù¯ÞYb€Å›’c|¾µÎx}¶¶˜ã¨›T?ù'KÇMS•G“vi­“}_‘qÀÂSŒ·io}Ú_©Eü=¬ƒÎ¤cwl?öz‰ô Xrl4qÿo¶¿ür½ÚÚ=j ¢‚pºšüÑBø *ÈûßçÔŒ­SM]3EYu)š=Jà†‚ÑTecîÒzg°ÿëíùyqN1.eÛçþgÓÆpn\Žr¿oémæy~³çi÷F »8à¸@Û¬BÈ`}FEeoGÿ<Çä+ƃ÷&ü¸·þ”Ï^}^å\=Â,MhûÒ]?¯¸ó)©`êT¡ iÖ§q¢Æî#Tà¸$¥hM ß »K—±iaf-<Àü¦0>lã Æsǰô¨|7 ë:Õ©:]—ÚJ¥Ïš‰ŒçxîŸÊºðO‹TÈÿ&bÿâª3¬·ŒÄóÏ ÒJÎÝÛ¾ë¸ò¬ã—BP¥Oš2mþ¼ŒétHì-®`YĆ ±ù ²Û’_¨ã¶HúWS¤øŽÒÂË‘ÂA5ŠiÍp÷ÖÉ ÃyÁäW…€Ã“òîÈæ²?á ñgýþÅÿÅRx´ÿÌÿàL_üU<‡Ã}^xˆËÞr¾‹ukY¶qb±xÌF%â&›V¶½î\ƒÄ:wÙlK !øJΩäyD˜í¶¶ #+‘1œæ–÷ÄZu¦{ŠZjrø–}F!qm?–±´lD‡îdŒ…Á$g8ÕøB<[ÿ@sÿ1ñTÂâßúŸü ‹ÿŠ®Ïg—^þÙàKËüŽiŒµ½Ÿàüÿ̽¡x’—U¹Ö.˜Þ_jZtù3nÜsòƒ€¨;örjÊx¶ÕÌÔ.¾o½ñÜ’ÿǘ݂r8_»„<ûVGü!-ÿ 9ÿÀ˜¿øª?áñoýÏþÅÿÅQ:yl¦çíR½´ºéeújcc^G×£ëó1µISPÖõ;ÈK43ÞÏ,LÊT”21S‚c­Uò=«£ÿ„#Å¿ô?øÿGü!-ÿ 9ÿÀ˜¿øªï§Á *¬tóG$ðø™IË‘ëäsžGµGµtð„x·þ€çÿbÿâ¨ÿ„#Å¿ô?øÿWý¡ƒÿŸ±ûÑTÄÿ#ûŽsÈö£Èö®þÿÐÿàL_üUð„x·þ€çÿbÿâ¨þÐÁÿÏØýè>©‰þG÷ç‘íG‘í]ü!-ÿ 9ÿÀ˜¿øª?áñoýÏþÅÿÅQý¡ƒÿŸ±ûÐ}Süî9Ï#Ú#Úº?øB<[ÿ@sÿ1ñTÂâßúŸü ‹ÿŠ£ûCÿ?c÷ ú¦'ùÜsžGµGµtð„x·þ€çÿbÿâ¨ÿ„#Å¿ô?øÿGö†þ~ÇïAõLOò?¸ç©‰þG÷ç‘íG‘í]ü!-ÿ 9ÿÀ˜¿øª?áñoýÏþÅÿÅQý¡ƒÿŸ±ûÐ}Süî9Ï#Ú#Úº?øB<[ÿ@sÿ1ñTÂâßúŸü ‹ÿŠ£ûCÿ?c÷ ú¦'ùÜsžGµGµtð„x·þ€çÿbÿâ¨ÿ„#Å¿ô?øÿGö†þ~ÇïAõLOò?¸ç«‰þG÷çhò tðƒø·þ€Çÿbÿâ¨ÿ„Å¿ô?øÿGö†þ~ÇïAõ\Oò?¸ç<ƒGk£ÿ„Å¿ô?øÿGü þ-ÿ 1ÿÀ˜¿øª?´0óö?zªâ‘ýÇ9ä<ƒ]ü þ-ÿ 1ÿÀ˜¿øª?áñoýþÅÿÅQý¡ƒÿŸ±ûÐ}Wüî9Ï ÑäèÿáñoýþÅÿÅQÿ?‹è ð&/þ*í üýރ긟äqÎy ×Gÿ?‹è ð&/þ*øAü[ÿ@cÿ1ñTh`ÿçì~ôUÄÿ#ûŽsÈ4yº?øAü[ÿ@cÿ1ñTÂâßúü ‹ÿŠ£ûCÿ?c÷ ú®'ùÜsžA£È5ÑÿÂâßúü ‹ÿŠ£þÿÐÿàL_üUÚ?ùû½Õq?Èþãœò A®þÿÐÿàL_üUðƒø·þ€Çÿbÿâ¨þÐÁÿÏØýè>«‰þG÷çhò tðƒø·þ€Çÿbÿâ¨ÿ„Å¿ô?øÿGö†þ~ÇïAõ\Oò?¸ç<ƒGk£ÿ„Å¿ô?øÿGü þ-ÿ 1ÿÀ˜¿øª?´0óö?zªâ‘ýÇ9äO$úWIÿ?‹è ð&/þ*øAü[ÿ@oü™‹ÿŠ£ûCÿ?c÷¡ýWüî9¿$úQäŸJé?áñoý¿òf/þ*øAü[ÿ@oü™‹ÿŠ£ûCÿ?c÷ ú®'ùÜs~Iô£É>•ÒÂâßúäÌ_üUðƒø·þ€ßù3ÿGö†þ~ÇïAõ\Oò?¸æü“éG’}+¤ÿ„Å¿ôÿɘ¿øª?áñoý¿òf/þ*í üýރ긟äqÍù'Ò$úWIÿ?‹è ÿ“1ñTÂâßúäÌ_üUÚ?ùû½Õq?Èþã›òO¥Iô®“þÿÐÿ&bÿâ¨ÿ„Å¿ôÿɘ¿øª?´0óö?zªâ‘ýÇ7äŸJ<“é]'ü þ-ÿ 7þLÅÿÅQÿ?‹è ÿ“1ñTh`ÿçì~ôUÄÿ#ûŽoÉ>”y'ÒºOøAü[ÿ@oü™‹ÿŠ£þÿÐÿ&bÿâ¨þÐÁÿÏØýè>«‰þG÷ß’}(òO¥tŸðƒø·þ€ßù3ÿGü þ-ÿ 7þLÅÿÅQý¡ƒÿŸ±ûÐ}Wüî9¿$úQäŸJé?áñoý¿òf/þ*øAü[ÿ@oü™‹ÿŠ£ûCÿ?c÷ ú®'ùÜs~Iô£É>•ÒÂâßúäÌ_üUðƒø·þ€ßù3ÿGö†þ~ÇïAõ\Oò?¸æü“éG’}+¤ÿ„Å¿ôÿɘ¿øª?áñoý¿òf/þ*í üýރ긟äqÍù'Ò$úWIÿ?‹è ÿ“1ñTÂâßúäÌ_üUÚ?ùû½Õq?Èþã›òO¥Iô®“þÿÐÿ&bÿâ¨ÿ„Å¿ôÿɘ¿øª?´0óö?zªâ‘ýÇ7äŸJ<“é]'ü þ-ÿ 7þLÅÿÅQÿ?‹è ÿ“1ñTh`ÿçì~ôUÄÿ#ûކ94yü_­C­]Ëmn·W^!’_Í8töÏj¡âx|;Ûþk¢Û¼ï4·¦Ü|«ïëÒ•ü;âiÜËwà뛆ÿY;Þ²4‡Ô„™W>§õ<ÓO…õã×Àºþ %ÿäŠòa^„&¥íV9£oÎç¥R'Müʾo6ê,·¦ÿíz±¤ÝÚ\è7³ßCm#M ŠeW!‚¬€ýÕ?Þá¿Ʊ¥‡a°D•gÛov§2/Ýb^F$Œœs“êjC᯻éÌìrÌ/]2}p³€>€íWa‡Îç%·IàÐVujЫNPöªí5w(õ‹Ko6UÔ¥R3ävM=îŸ_CkDÕtÍ>ÕïæhÔQ€¶—äSõ„÷ǧÿ¬C®jÚvµ¥}®äù:Ô;P²'Ët½2q÷XóýÚ?ðx—þ„7ÿäÿäŠkxsÄŒ9ð>šíþ_þH¯Š–M]Ç“ÚÓ·ø—ßê}¤s¬"©í9*_Óðßoës’ñZù¶#ÿÓ‹ÿéTõçøé-ѼEgh—º¾›¢o E*2Æ9` 'ûÇ'©$““^m_w…„iàéSRRåVm;«Ÿ+V£«‰«RÍ)6õó=ïà¿üxêîCüä®þ-JO^éË2GkmyE¹¸.­NIËC™ù‡Ê'Šç> ÿÇŽ¡þäÎJìM¾·§êš”ºn›§ÜC{:ÎÏs©¼gæ3¿÷úŸ/ÉX?௟æÎ~Ãâ=­½¤—:œÞk\ËZG˜mq´¶•Že(ù¦ÎÒìß7 H-õ këI<Ëk˜–hŸnFƒƒÈàŽµÏYxÏL†!§jZ…¥ÄJ±­Ê™öaˆ¦2¸"Þ&'nrŠé …míã… ”B)‘ÙØ€1Ë1$ŸrI5å;&Wе[@’òÓgçÛÄ Àó$™#'ËBÈ HPrN*¥®¿w ¥²Ï Ú¥õ×™,0ZX'!Ufd¸”c ËÕ;Æ€M^ñ&qªèrÚÚ·"Xf‰¼á׎UÆ9ÁPyCžò2¬4nãêÚ”Ö÷Ðn[{Û[˜gÆûKÆU­Qæ8Îv–È<Á:™áêZŒº-¤¶Ï|÷j÷RGFÑ¿“fåÎd§úKµAèü¤·}\ޙ໭žÆòö)mö(²1xÄPÄc`SX[ÄI6AÁPq]% -^óVþÞÓô½.âÊßϵ¸¸’K«g›ý[B ²&3擜ž‚¨Ýø÷NÒôë[½N?³¬²Ï ¸¸‡4ä*Õä]À‘±K”Oâm'W¼¿°¾Ñfònmâšµ$?#˜Ékyæ1ýÜc¾x©ÿ{jmŽË>Œn 6w ¦Ý-À¹„î?;Ííû¥”–q.If8Á Ûx¶Hô]ORÔl(l¯&eó Š9•n TÉ(€«årOËžmhÚ½¦»¥A©Y>è%ÜÈ8eb¬2¤ƒ†eIŒ þ„ïòu Û|]5Ý·—埲ÊûüÆMÈs¿Í“!÷»å ‹ú>–š>œ,ÒâkÞË3K>ÝîòHÒ1;B¼ç hõI/bÒ/dÓaI¯Òkh¤8W”)Ú§‘Á8GÔW7'Ž-EÚݬéý…¶3ö‘Üm¦¹pFAD°0![ïÆs³«œÊ¶ò5º$“&4‘Ê+68€$ ÷ÁÇ¡®BËÂOslºv«¥Y[éé,ÓâÖý¤i ‘¼>[&<"Å)EÁʈãBÆñCÔYTIä·›åÈZx$H—Ê–PîñÈÈlF@ÕÒ_ ¤å¢*egFùrÊ중€/ØišuÝõͺbKÉ|Çà|¼}ÕÀáw|zG?ÄhÐ ÕÆÂnßeÙöi¾Ùý±ö ý‚#Ëûo‘Ÿ77y|ýìnãÃ]réÚÚI§[éš|–ƒQ7ÑÉ&ªé#7Ú~Ð2±nã8džh@Toˆºv¯ã\íœÝZmðÉæÀ÷PÆçj³ò²‰7ÍÀÊ»ºŠ!×>ËÿûÛ/¶Zý®×í^YóâùrÃËvÆ<Èøl˜`G„m¢¶†Ðê:„––͵·i%ºÅ"HˆPXf4}Í€pÀ³Ï ø^MÃMû~¡5íå‚Ú&í‚8 ½cÚŠJ“rù8QÈÉÉ %QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPžüdÿ‘.úü_ýëçJú/ã'ü‰q×âÿè¹+çJû §ýÎ>¬óªÿ_#Þ~ ‚lu K"|ýÀ‡<Éýå5ê[þ~gÿ¾bÿãuåßÿãÇPÿrç%AáÿjEõü:5¬–Æ£s{k-Þ¯ohÌ¥¶‘±Îr óõüOßëõ>_’:01½óüÙëþ~gÿ¾bÿãtlùùŸþù‹ÿ×-¡øÂ}BúÒ×SÒ’Çíë#XKôwqÜÿÖ ÑýÒ=ø8#¨ÁÞ³ÔἚXpc•×kV+¸~_Q^C•™ÒÕ™ocÿÏÌÿ÷Ì_ünÿ?3ÿß1ñºuîÄ7cÿÏÌÿ÷Ì_ünÿ?3ÿß1ñº­~–xÝ–I6¼íùIÎ;ôíÍšŒZEƦÄÉo 9òðK*©cŽÙÀ¥Í­Y»v?üüÏÿ|ÅÿÆèØÿóó?ýóÿ¯'ðÇŠ5 x[LÓfÑ, ˜|ø¤¸×-­ÚHäbêÛä›ô®ã@ñ<º¥éÓõ;û>ù­ÖòÒå.kv;D‹"q×·¡gµj[ƒGA±ÿçæûæ/þ7FÇÿŸ™ÿøÝ:±µ}^âÂíb‰"*P7Ìs“ïíJìƒ_cÿÏÌÿ÷Ì_ünÿ?3ÿß1ñºƒOî´ø.$ @I 8b?¥cYë×w7Öð2BI r8õ¢ìƒcÿÏÌÿ÷Ì_ünÿ?3ÿß1ñºu]€Ýÿ?3ÿß1ñº6?üüÏÿ|ÅÿÆéÕŠ‘Mw4Œn.75Ô¨[-T*î=ý)¦ÀØØÿóó?ýóÿ£cÿÏÌÿ÷Ì_ün¹×¼²PÚ5R23þ”™ÁŒ×ßÓ¿…³ÖôFSŽ¿ÔƒªA=»ŸÈ%hìùùŸþù‹ÿׇüMð„|<šÑ [‹» ƒ!’"9—’HÁÇ#ŽzU ø×Qð¦£o§ëw¯{¡Îþ\wS¶dµcÓs«õéíŒú´Ý7R:¤.e{ѱÿçæûæ/þ7FÇÿŸ™ÿøÝ:¸{vâ?Šk¾¹³‹OH'Hƒyó»—W“8Qò¼2{v8åM²Ò¹ÛlùùŸþù‹ÿѱÿçæûæ/þ7XÉyª•6ClIâÜdÿh)8 éÔЗWVW‰m92DÑåU÷J’vç±ëc;ûH›{þ~gÿ¾bÿãtlùùŸþù‹ÿÑ‹,K"ôašuavXÝÿ?3ÿß1ñº6?üüÏÿ|ÅÿÆè.ŠÊ¬Ê¾è'“ôª/5ÌÌ]÷lÊí)ÏNàñß4ÕØ¶?üüÏÿ|ÅÿÆèØÿóó?ýóÿ¦Ï:A •²TcÔç¥T³¾–{–ŽD\¸þcM)5pº½‹»þ~gÿ¾bÿãtlùùŸþù‹ÿÓ¨©»»þ~gÿ¾bÿãtlùùŸþù‹ÿÖ&¿¨Ï¥´,cÜ¡ÙÔàõ<{t¬?²^M\ýžwŒåŒ» Ôçó§vo±ÿçæûæ/þ7FÇÿŸ™ÿøÝq¶ºµå¡%.€cdœŒvú~¯¡]]__ÝK3; ‹8ؤ°Ç:gõ¢ì ½ÿ?3ÿß1ñº6?üüÏÿ|ÅÿÆéÔR»›X ›©ÿøŠÇ—Å^‚VŠ_XÇ"œ2=ݰ ûµËxÚâïÄ>'µð]¼Ò[ص·Û5)£8gvÑ=²zûèAÌ¿—ÀÞ˜é‡CŠgŠ!$â+/<Ã÷¤b ÇÔŸÖ¹«býœÕ8ÅÊ[ÙvL²½´ÔíþÑaª‹¨IÇ™Á"çêgcÿÏÌÿ÷Ì_ün¼—TÒ­¼?h¾4ðiH Q‰§·ˆâ ¸:°+Ûž:cÖ½SO½‡RÓmo­É0Ü“FHÁÚÀúÒ†"5¡Íø`µ‰¶?üüÏÿ|ÅÿÆèØÿóó?ýóÿ§QZ݈nÇÿŸ™ÿøÝþ~gÿ¾bÿãtê(»»þ~gÿ¾bÿãtlùùŸþù‹ÿÓ¨¢ììùùŸþù‹ÿѱÿçæûæ/þ7N¢‹°±ÿçæûæ/þ7FÇÿŸ™ÿøÝ:Š.ÀnÇÿŸ™ÿøÝþ~gÿ¾bÿãtê(»»þ~gÿ¾bÿãtlùùŸþù‹ÿÓ¨¢ììùùŸþù‹ÿѱÿçæûæ/þ7N¢‹°±ÿçæûæ/þ7FÇÿŸ™ÿøÝ:Š.ÀnÇÿŸ™ÿøÝþ~gÿ¾bÿãtê(»»þ~gÿ¾bÿãtlùùŸþù‹ÿÓ¨¢ììùùŸþù‹ÿѱÿçæûæ/þ7N¢‹°±ÿçæûæ/þ7FÇÿŸ™ÿøÝ:Š.ÀnÇÿŸ™ÿøÝþ~gÿ¾bÿãtê(»»þ~gÿ¾bÿãtlùùŸþù‹ÿÓ¨¢ììùùŸþù‹ÿѱÿçæûæ/þ7N¢‹°±ÿçæûæ/þ7FÇÿŸ™ÿøÝ:Š.ÀnÇÿŸ™ÿøÝþ~gÿ¾bÿãtê(»»þ~gÿ¾bÿãtlùùŸþù‹ÿÓ¨¢ììùùŸþù‹ÿѱÿçæûæ/þ7N¢‹°±ÿçæûæ/þ7FÇÿŸ™ÿøÝ:Š.ÀnÇÿŸ™ÿøÝþ~gÿ¾bÿãtê(»»þ~gÿ¾bÿãtlùùŸþù‹ÿÓ¨¢ììùùŸþù‹ÿѱÿçæûæ/þ7N¢‹°±ÿçæûæ/þ7FÇÿŸ™ÿøÝ:Š.ÀnÇÿŸ™ÿøÝþ~gÿ¾bÿãtê(»»þ~gÿ¾bÿãtlùùŸþù‹ÿÓ¨¢ììùùŸþù‹ÿѱÿçæûæ/þ7N¢‹°<ïã°ð\YšWÿK^ êäþêƒ_;WÑ?äK‹þ¾×ÿEÉ_:WØe?îqõgŸWø²ùõð_þ<5÷!þr×+ƒ¿á!ðŽ}½¤Y<R¬ÐßÜyE]JN‡å,ûydNxê¾ ÿdž¡þä?ÎZÏðí½Ä¾¶1Z]ʧIe …à'íäà3œ³cŸ,ðÏÔW‹œÿ¿Ôù~HëËݨ/Wù±ú&€|1,0>«ow{a,’²pÉo,€Ç"G-¶$È`1žÎÄš‰„! ¸¾âpwI™] ~>•‘üŒþÿ°Ý¯þ…^å`}ת2¥ã†ZGÃû=+TÑïu'ž}J+G[™”ÆêäðsòŠÈÔ­V÷L¹·`øÈìzƒùâ½/ã‡ü‹Zý‡-ÿô +Ëu«³k¦È±«=Äÿ¹†4fvà`w­2ù/a>m…=Ïcøy©>­ðÿE»”³Hmü¦f9,P”$ŸS·5‘i “øÓÆÑÄpÌl”BÖÒ(ýH®“Âz9Ð<'¥énIon«.Ó‘¼òØÿ\MÊÛ?Ä=a.~ˇÖ4•O´‡Ìa žWñõÆÿ“®{WƒiÝ ]4hǪÜi^¸¸žHíâD %›r¯@xǾ+cRÝswçiSo° ?€×)uªhWš¿Õå‚ââK!<ï¦ PÉÚ<¬âDüás’sÁžÆæÂæÖÒi-áWvR®]¼ÉJž¸àôšêubŸ20tåk3bÇ&Ô7gfuú$~†¬W£kÒÙ:Û]±–Ôð’–Øû~£ùv ÊêHe# ƒEqÉYš¢½Ôc#ìß´Tt÷ÈohÝž?8m/;¸c¦sšn«­Ûi*«&én$Ë‚1–oðõæ÷—º—ˆuÓm ¬Ó¿ÊÁyX€çöÇsÿꮚe5w¢îeRªŽ‹VwûæÔfK}åaS÷±‚ØïõöükRÚÖ+D+<œ’NIªPBöVPÚ\>ü(aÁ-ÜûþunÖäM˜Ù‘z‘ч¨¬g¶›/2ÍQY”r:üMªìHÄŠ¬1éŒJÙÓµxîVÚÒ(.^Eá €=xïY!–9u ƒl@­ŽÇ'ÖªØj3iÏ#B±ë´ï\ñœõëL Ú–y,Þq¶¶¶‹î GG$gæëåW¼? ÚI}m>Õ˜ÎÍÀñ†ôúαïµ{‹øDR¤ACnùAÎp}ýêÿ†¤‹í7IžÑ„Iê½Oåµ ttQE!œv¹ámfo6·¡êpM-²ÛÌ·p³Œ)ÈÛ‚=N æåšëÂsßéÑuëØwX“l0ÆUwÏE<§5êµã°ø›OÑüyâ«««kÛ«‰nÖ–Ö5UۑЃÔ{sXÕ~Î2«Þ@]Ö|3] ¥ûMìÖÍeH i¥“ í^¤ßËÖ½ÃÖ2é~Ò´ùñçZÙÅ íé¹PÄWðßG‡T¶Æ¤†ïZ¸2*ï`Ëh¡ˆ€p§Ïq’8ç>‰S† èÅ©;É»¿PnáEW@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@{ñ“þD¸¿ëíô\•ó¥}ñ“þD¸¿ëíô\•ó¥}†SþçVyÕ‹/‘ï_ÿãÃPÿrç-mhz_<1¤E£é’ønk+fq —"q#+9l°^ùºž§­s_ 5;-7N½kË……]a [<àÉ^ÿ N‡ÿA(Zñs¶Ö>¥¼¿$t`¨¯ŸæÌ¨t_júöŸªx–m)?³D¢Þ-9dýá‘v¶òçŒ1SZöšµ´²JY¤‘Øp3ùõëMÿ„§Cÿ ”?­ð”èô‡õ¯!®gvt»3U#XÆb”€ÀƒÐÖOü%:ý¡ýhÿ„§Cÿ ”?­0%¾Ñ¡¾òA‘£ɼíêÃc=ºõ§_éQ]èšL$[Çqm$ Áwlܤgç®zÔð”èô‡õ£þþ‚Pþ´¹Rwê$’w14Øþ"éz]¦Ÿð³Ck@Œÿh,UT(Î1Î]Ò4}jOÉâOaöß²}Š8lü±ýû‰sÙÈÇLUïøJt?ú CúÑÿ N‡ÿA(Z«²¹zÌÔ4eÔnVf¹1m@¸îÏ$úZþþ‚Pþ´ÂS¡ÿÐJÖKu³²†Ù\¸Œ¸®Üå‰é“ëY¶žŽÚî ƒxÌbu}¾O\ã;©á)Ðÿè%ëGü%:ý¡ýiˆ×¢²?á)Ðÿè%ëGü%:ý¡ýi ׬ϰ^£H±IjbiÚeóE`X`òžÜu¨ÿá)Ðÿè%ëGü%:ý¡ýi€³i·s¤i*i®‘îÚ ÏÆNIÎry¬øt ³¨Fe·ìÞpß¶PÌóŒØÇãWÿá)Ðÿè%ëGü%:ý¡ýh¸8-േʷˆF›‹`y8Éô%dÂS¡ÿÐJÖøJt?ú CúÒ±i×ñC+%™Hƒ*yQˆ-žvþ^ÚêÒÙy½˜@ª!. QÆ2ݱïIÿ N‡ÿA(Z?á)Ðÿè%ëNâ(E êvÓÁ$2D$<–Y1åýsׯl÷®°í9â±ÿá)Ðÿè%ëVì5[M¤W ?–}€ásÓ4¿ Øx“GŸKÔ¢ó-åAÃ#Œ§±çŠò7ð7‰¼/â+=A¬fñ6Ÿ`â{T·º[yEe*dIn„`gê:ZŸÄZE´ï×ñG*¬­œƒLÿ„§Cÿ ”?­\*N ¤ô`Ògžx—Ä^$ø£I¤KðßR·‘Í·¸{Ó“0+åãPq¸ñž}GZÔðWÃi´Ëèu¯]%î§ýÄQÿª€ÿ{ ÜÞøÀ÷à×_ÿ N‡ÿA(Z?á)Ðÿè%ëMÕ—/*Ñ1YõÅ‘âOxË\Ô´ß&­mª-¹V[ä€ÄcB¤Ã’sž8Æ=ÀÝÿ„§Cÿ ”?­ð”èô‡õ¬ÕÑiØçuùüYã }ã±épÝßy&¥¢ ®î*äçn?îk#þþ‚Pþ´ÂS¡ÿÐJÖ†ÛÜ$›GC}öËVHf?|2nV÷ÆGÍïš¿o·¶Š$¬hÔ€1YŸð”èô‡õ£þþ‚Pþ´]’fø›@¿ÔØOe*¤á<³–+¹sž¿ŸçQøWÃWZ-¿Êó¤ûìxôÏëZßð”èô‡õ£þþ‚Pþµ§¶Ÿ'³èG³77RåÄÍMë‚9TVz|–ÒiwcžÕü%:ý¡ýhÿ„§Cÿ ”?­g©f½‘ÿ N‡ÿA(Z?á)Ðÿè%ëHeŸ Τµ´«"öFù[¯ONò+<éZ€b>ÅppHÊÆX~pk{þþ‚Pþ´ÂS¡ÿÐJÖ˜Œ(ô}JW,§÷t*?3€+gMðñ¶./%RÈUÒ(ŽyÎ~cŒ~YúÔŸð”èô‡õ£þþ‚Pþ´¯EdÂS¡ÿÐJÖøJt?ú CúÒ¯^O§êWþÕ|Ciuá~ëí:½ÅÜSYYyÑ´o‚¤08Î;vèyȯAÿ„§Cÿ ”?­ð”èô‡õ¬êÑ…XrMhWë;»? ÿ¦ÚMk$÷Sΰ̻]UܲîŽJë+#þþ‚Pþ´ÂS¡ÿÐJÖ´¯EdÂS¡ÿÐJÖøJt?ú CúÐ3^ŠÈÿ„§Cÿ ”?­ð”èô‡õ  z+#þþ‚Pþ´ÂS¡ÿÐJÖ€5è¬øJt?ú CúÑÿ N‡ÿA(Z×¢²?á)Ðÿè%ëGü%:ý¡ýh^ŠÈÿ„§Cÿ ”?­ð”èô‡õ  z+#þþ‚Pþ´ÂS¡ÿÐJÖ€5è¬øJt?ú CúÑÿ N‡ÿA(Z×¢²?á)Ðÿè%ëGü%:ý¡ýh^ŠÈÿ„§Cÿ ”?­ð”èô‡õ  z+#þþ‚Pþ´ÂS¡ÿÐJÖ€5è¬øJt?ú CúÑÿ N‡ÿA(Z×¢²?á)Ðÿè%ëGü%:ý¡ýh^ŠÈÿ„§Cÿ ”?­ð”èô‡õ  z+#þþ‚Pþ´ÂS¡ÿÐJÖ€5è¬øJt?ú CúÑÿ N‡ÿA(Z×¢²?á)Ðÿè%ëGü%:ý¡ýh^ŠÈÿ„§Cÿ ”?­ð”èô‡õ  z+#þþ‚Pþ´ÂS¡ÿÐJÖ€5è¬øJt?ú CúÑÿ N‡ÿA(Z×¢²?á)Ðÿè%ëGü%:ý¡ýh^ŠÈÿ„§Cÿ ”?­ð”èô‡õ  z+#þþ‚Pþ´ÂS¡ÿÐJÖ€5è¬øJt?ú CúÑÿ N‡ÿA(Z×¢²?á)Ðÿè%ëGü%:ý¡ýh^ŠÈÿ„§Cÿ ”?­ð”èô‡õ  z+#þþ‚Pþ´ÂS¡ÿÐJÖ€5è¬øJt?ú CúÑÿ N‡ÿA(Zå>2È—ý}¯þ‹’¾t¯ ¾+jº—V[9„Ñ¥ê«2ƒ€|¹+çÚû §ýÎ>¬óªÿ_#Ö¾¢És`Ž¡‘®` ¬2&N {f¥§Ù-Ä6ÐÙZž7‘¤[xËaJ ©ïôí^+ðÓþ?tïúúƒùÉ^é~»µ{e=ígÿÐá¯/8mcjz¯ÉaöKçù³œšÕr~Ée$ê ´v±©>Ù‹ŸåNX Kiçû6Ù­£i^ÞæÚœePg8ê Mâi-´Û;{‰àŠeyã€$‘— §%ÈQÜ('=±Wol…¾‰x9ýÝ´á2rB•8¯%9ßsÑ’£ìôZÿ^¢5±ôÏúYÿß…ÿ ?±ôÏúYÿß…ÿ ÈñÓܯ…™lÞEž[Û(FË—·,ê%+æ'Ì€† ‘’<áï5MfÊìhñ]ÉouêF»îçº[|Üi‡g˜Ì­:pÄ—†öHQ–»³žÈôÿì}3þÖ÷áÂì}3þÖ÷ḋXõ«¯j‚?í).íu;TkÔ»1ØG·¶y£û9˜òÊÒãäl4Šw7-x¯Ä:Ž˜Ë¦Â—Ome›o4Ͷž—m#³M™ß@ Å›1vGý¦Ð:Ïþü/øQý¦Ð:Ïþü/øS4-OûoÃÚf­äù?n´ŠçÊÝ»fô ·8Æqœ Тì,Š_Øúgý¬ÿïÂÿ…Øúgý¬ÿïÂÿ…]¢‹°²)céŸô³ÿ¿ þcéŸô³ÿ¿ þvŠ.ÂÈ¥ý¦Ð:Ïþü/øQý¦Ð:Ïþü/øUÚ(» "—ö>™ÿ@ë?ûð¿áGö>™ÿ@ë?ûð¿áWh¢ì,Š_Øúgý¬ÿïÂÿ…Øúgý¬ÿïÂÿ…]¢‹°²)céŸô³ÿ¿ þcéŸô³ÿ¿ þvŠ.ÂÈ¥ý¦Ð:Ïþü/øQý¦Ð:Ïþü/øUÚ(» "—ö>™ÿ@ë?ûð¿áT…´º­Ú[Á(mb%c@ ïϵY3Èfïþ½"ÿÐÞ”›åaetcè_ëµû?þ€•¯Yúí_þÂÿ %?\¹¹¶µ·û$«²ÜÇöMÀ8é\憥‘ösþƒpÿàÿâèû¹ÿA¸ðñt¯Ed}‡\ÿ Ü?ø?øº>îÐnüü]kÑYa×?è7þþ.°ëŸô‡ÿ‡ÿ@ôVGØuÏú Ãÿ€Cÿ‹£ì:çýáÿÀ!ÿÅн‘ösþƒpÿàÿâèû¹ÿA¸ðñt¯Ed}‡\ÿ Ü?ø?øº>îÐnüü]kÑYa×?è7þþ.°ëŸô‡ÿ‡ÿ@ôVGØuÏú Ãÿ€Cÿ‹£ì:çýáÿÀ!ÿÅн‘ösþƒpÿàÿâéÑØë>jyšÌL›†à¶`;àî8üjÑN•Àè ¡F&ât'åTŒé’ùþB€$¢ŠŽ[ˆ`Ç,qç¦ö4%_íöó÷ýü}¾Ïþ~àÿ¿‚€,QUþßgÿ?pßÁGÛìÿçîûø(Å_íöó÷ýü}¾Ïþ~àÿ¿‚€,QUþßgÿ?pßÁGÛìÿçîûø(Å_íöó÷ýü}¾Ïþ~àÿ¿‚€,QUþßgÿ?pßÁGÛìÿçîûø(Å_íöó÷ýü}¾Ïþ~àÿ¿‚€,QUþßgÿ?pßÁGÛìÿçîûø(Å_íöó÷ýü}¾Ïþ~àÿ¿‚€,QUþßgÿ?pßÁGÛìÿçîûø(Å_íöó÷ýü©yk#ª%Ì,ÌpH &€'¢Šk:)Ã2© QLó£ÿž‰ÿ} <èÿç¢ßB€E3Îþz'ýô(ó¢ÿž‰ÿ} }Ú!ÿžÑÿßB´Cÿ=£ÿ¾…IEGöˆç´÷Уτô•?ï¡@QH®­÷X¡¡™QK1@É$ð-_íöó÷ýü}¾Ïþ~àÿ¿‚€,QUþßgÿ?pßÁGÛìÿçîûø(Å_íöó÷ýü}¾Ïþ~àÿ¿‚€,QUþßgÿ?pßÁGÛìÿçîûø(Å_íöó÷ýü}¾Ïþ~àÿ¿‚€,QUþßgÿ?pßÁGÛìÿçîûø(Å_íöó÷ýü}¾Ïþ~àÿ¿‚€,QUþßgÿ?pßÁGÛìÿçîûø(Å_íöó÷ýü}¾Ïþ~àÿ¿‚€,QUþßgÿ?pßÁGÛìÿçîûø(Å_íöó÷ýü}¾Ïþ~àÿ¿‚€,QMGI:0dnŒ§ Ó¨€øÇÿ"*×êè¹kçú;ãüˆ©ÿ_©ÿ¢å¯œkìrŸ÷8ú¿Ìóªÿ_#×>Çîÿ_P9+Þ/á˜]Aw M7—ÆÑ©ˆb‡#$6z÷¯øiÿºwý}Aü䯢+ÊÎßjz¯Éa?„¾›9zÒ]aŽ÷MÕvE»žQFÎ>òï!‡G'Šº‰ss¤gGgzAäy÷F1€Wnãµ²O~Zܹ¢QŒþñLÿö?ç¸ê%¯,ê+ßXYêvrYßÚAwk&7ÃÒ‡ŒG ®Æù@ŒäÏ÷xéÅbøOÅâ7»‚{8í®-Ò9q æhÚ9 ªÌˆwf'ÈÛŒm œ:)ç†ÖÞ[‹‰c†¼’HÁU ’Ià9Í4îÚÛÅoopÁŽ8Ô*¢€©+.ÛÄš-ð¶k-RÒí.n ¬Ok(•L¢6¡eÈb“Î;zŒêPEPEPEPEPEPEPEPY3Èfïþ½"ÿÐÞµ«&où Ýÿפ_úÐþQ¡®Õÿì ÿúQâõ6ö·ÿÐÅúí_þÂÿ % ÿSaÿa ý W9f½G ñ\!xeI3!d`@e%XqÜAˆ"¸]D—[ñ®¥ ½ŽžódÚ¤w÷DÖ Ò\, !%Á¾òr«Ïq©xšóBÑ®Êö9-nµ; ·w1ÃáûdøDí+ Ÿ2£F@‘>o˜vêôW7iy«ÉâVÒe“÷v’Éu4øOß[È‚=¿Ãóp9ÿEÉÿZ+ TÖ¬l­~ Ù›Û%ԛ͚I™äO„çËlî_”ç Ž{Ñ`=Šó=gT»¿¸Õ,¥ÕŽä³éò[Ëmcw°üÒždS*+3 7'Ë!)TÙ²Ö¦“Æ6Ö[þжh”–3[É”òCn” tÜÇ*ñ‡(\å€ìèª:$ÿjÐtë¶ý»Íµ‰þ×åy^~Tû?‡w\vÎ*õ!ˆÜ#}+BÐìõ}OÔïçÔ$¹¼·ŽâCüñ(.¡°qÒ¶Ÿî7Ò¸KÛHx/Á¶¶–÷BÒkhÕí°¹‘­öÛå—lé#Ñš’æF6å×Wæ^G0õRnÚ}<Þ"8Œ^5ž‘õœÀO,7 œ‘ŒÄ-!þÃÒ?ècÿ€éþaéô ±ÿÀtÿ £{ã/ØL‘Í«YÇ×Ù&asÛi6HÀJK|™ò™yç8¸¿©j‰§ùQ­¼×wsgʵ·Ûæ8Üß1U 22Ì@ÉQœ²‚Ä'ö‘ÿ@«üOð£ûHÿ Uþ§øS\³‰,Ƥé¥Ý^1H-/g‰evP®Á‰Êð¤ýáߊ‚ïÅz%µ¾¦é¨ÚÝM¦Á,÷6¶Ó£Ì‹ùLäxçœP¯ì=#þV?øŸáGö‘ÿ@«üOð¦/ˆ´FK7]cO)zÅ-\¦.¤'?1žN* ¿è–Öú›¦£ku6›³ÜÚÛN2,cæ3AãœrqF ZþÃÒ?ècÿ€éþaéô ±ÿÀtÿ ’ÓTÓïÒ³¿µ¹IÕÞ&†eq"© Åpy  ­Ò&£EHúe‚¢Œ’`@ü«)gðã¨hôåCÑâÑ%uopÂ2úUï<­pEŒÜÿÀ /ˆ|gÿ®¡_i7gFx†íJÝw¤¼.×P2ª=Np9­"£ËÍ!F3œ¹a¹GÍÐ?è\»ÿÁ ÿüj¬YÃáëé^(ô¨c•3Gq§˜_»]Aǽjj>"h¤:M·ö¥ÝÞÆb“$M“æÉ("`6 b0 óŠzÃnñ]Ÿýƒ/?ô;ñ?W,íý~jq³á¤hädiÄz‹0öZ_ì}#þ€ößø?øš›Ä¾%Òü%¢Mªê³ùVñüª«ËÊç¢ îÇ¡'<“Á´|MsiâHರ»—ýe?-¯‘»©Æwñ†'8SòG(\õFÒ´DVgÓ, ÜÛí•p=y˜³øqÔ4z ò¡èñh’º·¸a}*ÿ<1ª‘Áþιä»]0}ª@ ;UF1µÙ-»Ù_› йwÿ‚ÿøÕ_ÑN‰6¤¿cÓ’Úê,6%±6òxÈ  ã¨È¬ÏøãRñGõÍ2Ê[}D³Ü4ÊÍq<ÙuÊÛU2‡¨'{åܹmÞ:ÒÿëÂëÿF[ÿ‰üê¹#Ð’Ü»X‘éö:¿‹oáÔía¼†ÚÎÝâŠtŠÎÒ†;OÂ/>Õ·YzqÇŒµúñ³ÿÐî*i;6Ðç­‘wþO й¤à üMðŠxcþ…Í#ÿcÿâkGu«Oi.äòG±ÿ§†?è\Ò?ð?þ&«Þè^ ÓmîÿFÐmm£Æù§µ…r@b09 ~55µðñ›Y‚êþÄÜ)³kis±ÈÚe€ÄîÙ†&`Kþäp*k¶~"¿›JÓ.mt½b/6k«¡$rZÚÉ D…ÔùÛ˜¼¾`ϹàddÒ]Ã’=ËíÂnŸsw iÛ[DÓLÿ`ŒíE±À\žéEƃá Yí!›@ÒK¹L0°Fw¸Fr8^>Tcϧ®+ÏuHõ›¯]Xë¶úÜ—1èÏeh¶FêAqwž)O(Ë XyÃiqŸœÖÜq\Mã &K¸µwÔ¡Õîžfe¸6‰må\¬%å€;•ù²H?1j9åÜ9#ØëÿáðÇý šGþÇÿÄÑÿ§†?è\Ò?ð?þ&´wQºi.áÉÇ;aim§ø›S²±-­µ´ËJÙ¦V!G"5ééZÿòºÿ®OüR„çÆ:¯ýxÚèwzõK„E,Í d“ŠÊ®²û¿"¡±Íù^àëköÒ,în ´+mƒ<ÎQ q¹ÙFãÀÎO©´–Ðu(lÖM&Æ é╞ÛÈVòÞXæ]ÛpvHÁsߨȩî<+&­¡è¶7­q vm³Å ®†B‘«½¶BŽ'˜ÇÔU‡Ð6—s¦ù· k-ùº&y%1# IãÜÎIó§Ëgƒ1# MŠÇ…%û%„UüQËo9ÓXBË'ÜB››€ˆ$1’3›¤jz-í…ÝõÎjÖë<1Áö :K‚VKXfÉ ìfFНr«ú¿eÔõèõ/2Ó康¹ßqcç\Eå27— »Ç–³•Úyw?ÅF†’Ûi°Úý¦ÒóÊòÇ•¨iþ}»m·‚Æ-ãçýÆU·|¢G\æ‹ý?RðåÖ¯g.Ÿcå%ÔQZ\Å`Z H"uÌÁL{™¤ Ã9@$dÐõ/_ézKÝéö)yyko$¦+`ŽYQX!“iDc¹p¬ÛŽäë¸fM+À:†›mƒjqK¦¬¶sȂȬÍ%¼p*áü–·BFÂpHÏB#Ó>G¦ÜØÊ>Ã9mŒ“ͦ#Ü—†8ã\ŒÄF„D§XŒ¾ –úÔúv«Ûé¶ú.‚&™TÆÚŒËj³31P‘b728#æÞwq=Åÿƒí^égµµD¶YINžÞQòÁgT“f×u ùE%†Æãå8Ó×´=WY·žÁ.íàÓ. h.ckFyа!ŠIæS´ñ”lyéYZ€îµ;­=¯ÂX;]Ín¢Ô™cšá%W.ûðè>Ñ! OÝùŽâÀ8_xHÛ¼§OYSìï¥H· X6Âcó®rŒ#ÿu°[_xJðÛ­¶Ÿ¯;šT…£"FŒù£ËÌCz8Ëí#tâ]×í©>¿`%–þ€[Û¬*ãr}¡ !¤Œ0)tüo\'îšG‚µR4ûËé-ín’yngkkvŽå·ÜI8ˆÊ²‘åà4DH¿{ NրݴÓôøZkm:ÅãYd„Ÿ³(ùãrŽ9™X~TÿØzGý¬ð?­ÚYÞC -Ì­q!–Få„Â%ûªUsßnOZ±äKÿ<Ûò¥fgö‘ÿ@«üOð£ûHÿ Uþ§øVŸ‘/üóoÊ"_ùæß•`faéô ±ÿÀtÿ ?°ôúXÿà:…iùÿÏ6ü¨ò%ÿžmùQfgö‘ÿ@«üOð£ûHÿ Uþ§øVŸ‘/üóoÊ"_ùæß•`faéô ±ÿÀtÿ ?°ôúXÿà:…iùÿÏ6ü¨ò%ÿžmùQfgö‘ÿ@«üOð£ûHÿ Uþ§øVŸ‘/üóoÊ"_ùæß•`4Æ‘C q¢¢,aUT` À›RJ ˆÁ;z©¨è`pÿäEOúýOý-|ã_G|cÿ‘?ëõ?ô\µó}†SþçWùž}_âËäzçÃOøýÓ¿ëêç%}_;ü4ÿÝ;þ¾ þrWÑågïµ=Wä0Â_?Íœ~±<±jWf /I¾; oî EÊq™-é|ñ£áÙ§’Öé’ÖÖ!çÝE)Øå)!NÁ‘»àg$àt7õ TMqgŽdw´A.çƒßÿ¬zUÈ-àµË·†8“9Û…ú ó:R …ŽõP;ÙÏ'ÛÓ™ôÉòïLøÞì»Ú.tËL}¥—‡»9å×îãyç;U€äz¥r^&ð•Æ©©NËSKILÅ:Ëjó†X6„‘9w|Ûs-&¬Ê^fG÷YkŒ£ œœÈO jÍz­ßág1ÿÙj'ñ„c,· zý‚þ"˜eÍ—‰-tç¾ÒUmfëPÕ!Û<òIÆÙ·"9IŽ5Ü–û[`œ1cÀ°ßEöÿ:úúêÐù~WÚìîmö¿Í¿j•æ/îÝàßüM|_ݺÿÀ9¿øš¯g.Âæ]Æ[ÙÛÚÍu41í’êQ4Ç$îpŠ€óÓåEz}jzÏ‹û·_ø7ÿGŸ÷n¿ðoþ&ŽIveÜ’ŠÏ‹û·_ø7ÿGŸ÷n¿ðoþ&g.ÁÌ»’QQùñvëÿæÿâhóâþí×þÍÿÄÑìåØ9—qì2¤{W9£k ¤h–e曩‹‹;xà*ÂiT”P¹ ŠAµÐyñvëÿæÿâhóâþí×þÍÿÄÕÅI+4Ki»¦spÝi0jgQNñÚ‹³3µµûÎ~R¤` ËB6¡f*'6$»—\ÕôÃoc{V“<òÉsk$  ‘€7¨É%ÇOC[ž|_ݺÿÀ9¿øš<ø¿»uÿ€sñ4õéý|…¾ìæ,o×Ãú~“¨ØkI5ºÀæÖÞç Df2CÂ0F #ž&}CO—~lüJ7îÎØ/×ïoÎ08ÿZØÇL&1±6ô>|_ݺÿÀ9¿øš<ø¿»uÿ€sñ4ÝÛ»‹þ¾@´VM_3ŸI¥¤A§é—V¶z{´‡Í³{xÑ2F¨¡Õ{¸À¬›‹=?Qð¦™áÿi³›„0‚ÎwRñ®Ü‡H*ÃpëÑ»Ûyñvëÿæÿâhóâþí×þÍÿÄÐîÕœtþ¿Ìqn2挬̋½zÎþÝà¸Ó5‡È']ÒAÈ`BeX#Á wêú¦Ž±Ûj,ei§¹¼´x7~æHÿ‰T%ÁÂŒué[¾|_ݺÿÀ9¿øšQq9Ûuÿ€sñ4µ[Eÿ_ ½Õ›Ðš_õÏþñªñÿÇÝÏýs‹ùÉR‰’àyÑ6èäùÔã‘QGÿw?õÎ/ç%cÔ²ZÈÔÿä=¡ÿ×Y¿ôSV½djòÐÿë¬ßú)© «káx?·õ=Rð¼¦âò;ˆ"2ù@$1 /DeÃÆX SœŽ~/k‘Úh¶rÏ ñÙgæA¨ÏB°‹¢À«²\˜Ýƒ¾Îz î#›ðΑö[›Û¶I’$–KKg0[¬ŒHUÇʬù ·ƒpwZ©‡­›)tÉ!ÓÖÔjßÚÜ-Ó—eûp¹ÚSË›‡Þ<ØäuôQp8› ëvPÙ¼FÕ"ÓgI,4§½y¢D2ÄÃí &ÈR¯,@l'AªX]µý®«§d¼¶ŠXã’9 ù•X«pÆ>`Ë­EÕ4=oTM@´:|O«éÃN»éØZª™±",y¤‰‰Ú|¼ÆNr#Ô|w©h)¥µÌ1n¿Ôg’A–ÛÂÝ*àq–hBF@àóÓ=\'X𮥭Þ=ÝÕ½¨{Ë5³¹5[”Š%W”îÄjŸhKÊ6Ìm 7ÌH~£àÛ½KAM-®a‹uþ£<’ ¶ØîéWŒ°ûB2ž™ìè¢àfÛǨKyguyi§ÄëÉ/•#JèÅШG*¿! K!:ã5¥E†cø·þDíoþ¼fÿÐ TñÖ±¨ZÙÚhúU€¸¼Öd6i4Ño‚GÌÒ ü¤œF‰ÈRÝõœZ……Å”ùòn#hŸiçk çY«§øU×mGɧ31ú‘0þ´Vqµì—%Nf®cø{ÃGáÓ¨·¸K"åGö„ó I-äPq(*9ˆž ±>^wnÆó[:¡ÏŠí?ìyÿ¡ÛÑö/ÿÐrÃÿÿÇêK="áo^÷Q¿[¹ü–‚1J"1RÜbI*½ûU.X­U©*¯šK^æäò46òH¼ÎˆYbŒ¨g }Ѹ“Ó’©Á|4ð¦­¢Þø“\ÖaKK­vôÜ}d›u#Î8b|ÃӰɵ\23îPÿ/›qýø¿ïÙÿâª9‰±‘ã_ùµoû\ÿèkĺ3øƒDšÆN÷LœüÐÝÙLѼn:´Ëꧯ±Á¾²]NÒâÖí·E<- ~V>¼Özéþ @uÛFQÀ2iÌÌ~¤L?€«‹MZä´Ó½%ðÃÁâíJmoUÔtû(î3tö·²#jo÷¤Ÿ1%?1Q†ÜWØå9ñÖ™ÿ^_ú2Þ«ý‹Ä?ô°ÿÁcÿñú³¥iW1j˨_­ÝÊÆaˆE’ˆ¬Ê[‚ÌI%¿j¤Òê'wÐЬ{«N b]GLkI ðÇ ±\ÈÑýÂÅHeVþûdcÒ¶(¬c.SF®dyÞ'ÿŸMÿåÿãyÞ'ÿŸMÿåÿã¯EW´òüÿÌžWßò2<ïÿϦÿòÿñŠ<ïÿϦÿòÿñŠ×¢iåùÿ˜r¾ÿ‘‘çxŸþ}4ü—ÿŒQçxŸþ}4ü—ÿŒV½{O/ÏüÕ÷üŒ;Äÿóé£ÿà|¿üb;Äÿóé£ÿà|¿übµè£Úy~毿äfiv7‘^^j‹Ûý¦ábˆEnÌꈅÈù™T’LØtgSÿUçýpýÕª«©ÿÈ*óþ¸?þ‚issI1ÚѱcV‡FÑ´kíRãK·h,­ä¸‘c·BÅQK3œQYðj> xu]&ßE{4ŽI—Q[u ŒÊ½“ Èêìåy#:¾%ÓfÖ|+«évíÏ{e5¼m!!C:àŒŸC\½¯„u+;¨µ+;FÓžÚâ9¡Ò-'eµvOÈd.×e¸ÄgˆÏɵÙ6FÛÞø:;‹Kw¹Ð–{ÔGµ¤„4êçPu`Ç€FsÚ«Þê>¶ñ¡E“>¡upb–ÙZ?6I.öL‘G8ûàç±ÌOjCIñ< =§Ÿ¬é’@€;mŠi&¼•;rQMÒ¨ldí'héW-ü=¬[ël[,[L²Õnõ/´}¡ÄÏç­ÇÉåy{FÖ¸Æwœ„Îp °²:?ì}3þÖ÷á±þÙ ÂQýƒý“åoûOÙ£ò<Ìnò7ÏmŸ¼ÙŒìùºVÌzdj“j+%ÙžTØÈ×r´@q÷b-±OÊ9 _SžOþ½[ûGû[ûz·mÿh}Ÿ}ŸËÏ“õ[÷}“äÆìoç?ÅEØYÓ™ÿ@ë?ûð¿áGö>™ÿ@ë?ûð¿áWh¢ì,Š_Øúgý¬ÿïÂÿ…Øúgý¬ÿïÂÿ…]¢‹°²0'·°‰Š®aw[©êþµVÙ¬.&ƒn¦¼R•Ã%ºòpj‰¬®u9MœWŸg·fQs´|î› {g¡úþ®ƒ¥É¤jÂnwiÍ*40°%¢bÜ€»þ?R{aMr]ö0r÷¬oX¬J÷^LifD`¨¡@ÌQžƒëW*Ž™÷%ÿ¶_ú&:½^eO‰0Øà>1ÿÈŠŸõúŸú.ZùÆ¾ŽøÇÿ"*×êè¹kçúì§ýÎ>¯ó8*ÿ_#×>Çîÿ_P9+èŠùßá§ü~éßõõ󒾈¯+9ÿ}©ê¿$iƒþùþlŠän‰F3ûÄ=3üCØÿžã¨–¢¹¢QŒþñLÿö?ç¸ê%¯,ê Šèn³˜c9†1œñ郟Èý KQ] Ös g1°Æ3ž=0sù¡  k”øŒÍ‚u7F*ËitUÁìÒó]1…Îqs(Îz㯷¸ÿ¾G¾yÛM?„5!2M4ö×Å%š ‚É$øùÈ”ÝéÚešDóè6H“ xÜÙǵàùXÿ Êš] F°o²ÇÿÆê‘º×omcÓµ]7Y°ÓáU+žŠ[|€ÜàìËœ±'éX—ÝÃrëmaªIÆ×ŸOh˜ñÎTœ÷5Êá.„YŸ@ü‘¥ðDnÌY‰‡$œ’~Í tÖ:ñÔ¯#[M*ú]>L˜õ0a8üÊ žaRFÃdJÕË|ŽHü ©*2:ÈŠC Dú‚? Ñ>Ö?á›Â,Ft÷ÓâÔ Ãù눢‡ËÚÌ>PHÁ`;GQfÇü%žþÎþÑÿ„ƒJû›ä}§í±ù~f7lÝœnÇ8늱.»£Ãö7U±ûCbÝpƒí9Æ<¾~|î^™ûÃÖ¹ôðö±}â«-~ý,m¤†XƒÛApó.8nÔ0se‹]—h&wp+ÙøSX±Ö"¹´– V{¹¤º¼ŽíØËn×sN 6íC•—`eu,Ø$ 8åïŠtØb”Ù]Z_Ïo{mgs 7*Zšu‡ç%H,N3´Ž;hYêÚn¡quoe¨Z\Ïhû.c†ev…²F•9R0}¥qqø/X{mÖg±Hô8­­mäIÔqÜÚÈÎÊPym¶×…Á/À.MÏx:ãÃׯácaceög:ÍÃL¹L°ŽBÜ)IDÝÔÀ/ÌÚQEQEQEQEVLßò»ÿ¯H¿ô7­jÉ›þC7õéþ†ô?…‡Tcè_ëµû?þ€•¦ä#§×vÿÑOYšúí_þÂÿ %iŸùéßõÝ¿ôSÖPø‡-Ž+â=¸›Ä)4¯"Û[éâY„g ãÍ(c$ÈNp 8=‘Hmµ ZÊ;¨¤k»{u3Nf?¼nûˆ2I뎸¯Añ¯‡õ½O_·ºÓ-"ž²ˆfY$P² ä•aqÈ9‚20@5ƒ…¼UdµÐ¬m¢‘”ÉNX0 èA-!8+3ƒƒÛŒO·†«J4R“Wÿ‚yõ¡7Qµ·üŸŸÃz³ÎnîDñ¢»\J³ÖQ•Ù¼d‡eßæ‰t{¥XÍÐÍk%ÊÛï‘_ËòÃîØTƒƒÀ$òAÁÉL^ñd÷Ú¼¶ÑyvÍËf™˜‘™NNdl†ÜÜcc‡Ã/‚Å,íô›X`Úþb‹ÁÙ¢1 ¹¶»}Ü9 +¬Rî¿ëúé×?e>ÌËÔ4¸Õ.¬´ÇI ½À¶ÌrJOI‹V\³íF'g•X·.¼?e+‹ëÔ¶€*Ÿ>a( _~Ý›Á;d꣡õè×Ã>27“ÿfÚæöãÏ™L˃•ueûÙ VgœñÁbxKÄÃ|gÃúy´}‡ì¾vYs†Ü$ÞHó«ã \%Z’Ó™[Ó›èÎO\_²ëú•´,ë WRÆ‹¼œ(fdòx'ó>µDÏ)Îesž¿1÷ÿùšë¯| â½Bþâò]>%’âV•ÂΘŽN>cÇ'ò>Ù€|9ñ9Çú ûnœt÷÷?‘öÎñ¯†QI´e*U®ì™Ìå9Ì®s׿>ÿâ3AžSœÊç=~cïþ'ó5Ó‡>'8ÿAAÿmÓŽžþçò>Ùßœ  ÿ¶éÇOsùl×Ö0½Ð½•~Ìæ òœæW9ëóñ?™ Ï)Îesž¿1÷ÿùšéÇßœ  ÿ¶éÇOsùlƒáωÎ?ÐPÛtã§¿¹ü¶O¬a{ öUû3˜3Ês™\ç¯Ì}ÿÄþfƒ<§9•ÎzüÇßüOæk§|Nqþ‚ƒþÛ§=ýÏä}²‡>'8ÿAAÿmÓŽžþçò>Ù>±…îƒÙWìÎ`Ï)Îesž¿1÷ÿùšôÿ„¬ï¬ÎÌÇt\ž¾zãß׿nü¸øsâsôöÝ8éïî#ížëá߇µ=-@jVë ˜ÆS­œÏOLúÿõøñÕhN• ÕÍðЫ—•ìvôQExÇ¢sÚgü‚¬ÿë‚è"¥þ>îëœ_ÎJ‹LÿUŸýpOýT±ÿÇÝÏýs‹ùÉXËâc["Z®ÐµÆ©lˆ¶âEŽII£/·G0ÆCuÿV)-¿ä7ý{Kÿ¡GNŸÄØ$Žî7(gµÈôµoþ;LÅ×ü÷µÿÀVÿãµÅüEO“ÅÚ2êWZ¼?c¼*úÕ²Í mÖÜ*³ Œàç¦xô¥¦ëº”b¯î­ïѬ ‡G»(ó\ÀñÃçM&仦ùòêUA„å~W¹?é‘è8ºÿžö¿ø ßüv™ÒJò¤w–Nð¶ÉmØ”lÁýï §„õçÖúö·i¡è·jó\¶«¦Gyq4ðÂ>Æ<ÛU’DØŠª\Hä¸`<µ'€Àìø>q4~&›OÔ“Y'QÌWRKY˜Z[à‰6€Ë•^1К9˜Y^.¿ç½¯þ·ÿ£_óÞ×ÿ[ÿŽÖ¿©êºƒnî…²E¬:ˆ-¢µ”J«<Ž#„†‘P¹Ðœ€=qÏ)§ßIáøeðüp]xoK†ò7YgxÙÚK Œ˜ZD®auËç‰@%vœÌ,E†i.¼7–R fBÉnÄRU‡õGb§âëþ{Úÿà+ñÚòYX•mý6°]…‘éøºÿžö¿ø ßüvŒ]Ï{_üoþ;\…†¹y7‰a·mK̹’þæ ­+lè¶È%ò§ÚÌ]Û!ù™ŠŸ;€7. ´ðÿö‡õÍKÉÑ[ìúœ?=Ö™ç\ ¶ÖíòKæ xùNO=(æÒ ¶.¿ç½¯þ·ÿ£_óÞ×ÿ[ÿŽ×›¯‰õ™-,Íž²“^Ý-±¾ŠHc‘t»‡¹¶È(YAÌ»dbÿºáV5ÔxªÚÇûÖ-WX²‚8åOÞêÊË…a¶XòŠù傸eVåÅÏúAdtºÿžö¿ø ßüvŒ]Ï{_üoþ;^X·ÇL‡UÔl®!ÑÙ4)>ÁokQÛßJ ¹Þ¥£$¹pG͸mc€ÉÑ|_}©ËËëiý¡,ö4HÄ[Z¡¶y\.ß8…óf|ïÀÙÎ@ œÏÈ,HÅ×ü÷µÿÀVÿãµ4V×’©e¸´8æÕ¿øåpþRøÅΊö¯nÖrl…%Ž@Ñ`^K<Äù…KíeÄ †$‘è–_êOûÔã+±X­ö+ïùø³ÿÀWÿã• ÜwöVsÝ ìØÃI·ìÎ3œ¬ö­Š¥¬Èÿþ½¤ÿÐMh­}„ö*ÑEÌhQEQEQEQEWSÿUçýpýÕª«©ÿÈ*óþ¸?þ‚j£ñ!Kbï‰u)´o êú¥ºÆÓÙYMqÈ RÈ…€8 ã#ÔW?¦øÆå^kkØd¿¹g‰mRÞÁì%™ÝebžMËåB¬.Þc0Vù•~d õ¶›³£_iw "Á{o%¼‚º•$dœCXçÁñHæêm_R—T¤ÞH– ‹"ªªˆÄDbi‡Ì„þðóÂíØ’»xúÉLìºf¤ðZ[ý¢þum²Q$±¸pdÜÅ så‡Îß—vFKOsâ-ÒÂÒí,&Ôç´šõ„^TÆ8.7F£q,]v€vÝa|¦­†«içÝ‘ªY;© ®æÜó;È>\f¸‘G($~‚-bÚõ5áomw-ìVºòViV@ížaÉšFÁ|ÜR=[M›T›K‹P´}Bß-¢Ì¦T^9dÎ@ù—’;Zâìüwu£s.§$ ¦Ãw} ˜Ó§‡ÉŠÜÍûÁ;1IÛl<ÇÝó1é ô åÿá°—φööúöÂYn¦[š5Ž'¸ó…Ydé4ª71ÀP%ñ¢ÁòÝ4¹µ–òÜ©t"DuÁ(‡8ÏÊ0@$vÞÒìôé,-¼ø­ZîÖéP>vqA ¸·Lç$å¹ä`Äþ-ÔôÝZZùg´Óâ¼1½„ÒùÌÏ0*× Â;eÄCç‹Ö…÷ެ4ø®îg²¾û iT»UŒ¤òÀ²4± ß¼0ËË*©ØpÜ®ljÞƒWÔnneÔo¡†òÑ,¯-!ò¼»˜TÈv±d.¹¸%Nš¯}à[ B+»iïo¾Ã?ÚY-£ ³¬‹,¨vo,DÒðÌÊ7œ/ € Œ"ͬÚF¥¨]-5¼“,¡ÖFVV€Ä3™ÁýÙã•ÝNÓÄš‰ð=Ƨ$xÔ¤Ô.,­¢¹UÄr5ãÛÀ²ygT” T“…$=u5/ Ûj£j‚îîÖü$+ð&œ(ue$­Äªw0F ŒøY³h±_NÓ4¯uìê¬érf3¬¥T*²ÛpÆ  =OÇèZŠ •.î¯4t+k7ötÒ$¤ZE(iž$òÔ—vÎ 1ÀÕÆø—ḵ‹Í>kŸ/ì¾xy|Èß- ³J<¥s0Ú#“–@§oî]ÚáØotjÖðÉëˆMêÃ(q4 Ø¨È ƒ¯\œv·„låûd^_I¦]yåôß4$!¦Ý未‰ã$‡ åAl€6®Ð ÿð“êGÄ:]ƒxvúîâ¸iW·2F#x—+1_/÷Í2ù ޲xwÅC^†ÈÛY]Ü$–ñ=Íâ¤qE Ì‘¤. WCòïxŽ#ðì‹qiw6·©\^[;¹‘` йBð±ØÆ498Ç ÅG¢øNµ²éÚôv±ErÛ7”ÉpÉ®ä¦àÛ?¸Ê¿ 8ää ¢³ìô¯±ÿgÿ§ßOö;Ckûé·yùÙûÉ8ù¤ýßÞÿmýjÅ…¯Øtëk?´OqäD‘y×¾I6€7;wcŒ“ÜбûCn3ºñÐG~¬¤ÓâÒU\7Ú¥8ôŽ%ýB?SÅÐU•¦ªJÖŠ1 nïU@J€Û÷QÔõ_ñù}ÿ]SÿEGSÖܨìpÿäEOúýOý-|ã_G|cÿ‘?ëõ?ô\µó}~SþçWùœ‹/‘ëŸ ?ã÷Nÿ¯¨?œ•ôE|ïðÓþ?tïúúƒùÉ_DW•œÿ¾Ôõ_’4Áÿ |ÿ6Er7D£ýâ™þ!ìÏqÔKQ\Ñ(Æx‡¦ˆ{óÜu×–uEt7YÌ1œÆÃÎxôÁÏä~†¥¨®†ë9†3˜ØcϘ9üÐеGX¹‚ÓK–k‹as*¢ÞÅ‚¨çޤUêÊñΑƒÿ?6ÿú9)Å]¤&ì®qú’Ù–ÄÚ¤yÏ1]?ôUR‡û"i?°mnbë“Ö*±­ç÷dz¾ï£ýqYcˆn$'ä>Nìÿÿ¯ó®—N·±šæj÷=SNËcÚ[­¼!bU ŽƒŠµX^¾mGÂö·M'˜]æù¶ã8•ÇO¸‹Oˆ:½î…awÞ›©Ïr–SÍ“V³g¹·F¶“|®»äYdU,cÇ”ÇÝx(JR¥Ov•ýlo8¸ÉÅ«XõJ+›0ŠG°é”º wYtÕòD±XÙ™˜È"#B~W'÷ƒŽlvž:°¾œ5½•óé¦[x´¶Æ!ß:Dñ ¥üߛψ}Î s€ ’uWÝ|TÓot냡K»nagUº ÜEIäÃ!%R#}ŽI †SLñıil'Ôu,Š‘ÙÀ-^H‘bf‘¢¸‘L;LÈ»Y·6UÀÚÜvW7tÛ§†KX.çÓäx#mAQDQÉ:£DŒ¬ÂL°–.B<Á’0ÛOëíâ/ é·nÒO)²·k‹½ª±Ë9@dUÇR­Ã`mí*Á@:J(¢€ (¢€ (¢€ É›þC7õéþ†õ­Y3Èfïþ½"ÿÐÞ‡ð°êŒ} ýv¯ÿaÿдÏü„tïúîßú)ë3Bÿ]«ÿØAÿô­3ÿ!;þ»·þŠzÊå±ã‡›>‚(µ)Ò}L¤¶úuÙ¶–eÓ¶7ù‘ðUˆ,>ï~•ˆõø´ÏI¶’òîñ/.•ymàŠeT†Uy¢ýꬨŽLŒÁã`CXvšµþ¦Eæ³wcirþâkÉ0²aò³tb¥Çà·lÔsi:»d}?MÔ-.]nƒ<)*JÛ¬œ‚ìÀ éÒµÉÙx³Ä­ÜKiV±ÝÝÅg šçÉv±KÆs"J«*ýôBõVÜ@ÚÑéÞ9¹—JŸ\0ZGo5Ä öiî\2Ù[Ì9È›Üɵ‡“FÞ}‚ÏÏóþÉæùþg–7y›<½ùþöÏ—=vñÒ£µÒtÛW´Óí-Ýb´0ª»Qp0:mŽ1DQü#›øŸÄQøìÅ„XY]ÛXÝÜ…Ž$y$H˜º³Î1ç.#È[Ë|±è7ú–¯â¯ê÷²Úy†…uumo »Ù¶ÇräH@ n Ç8bhZï:ætI$Üw6æ'$sÔÐ…Q@Q@Q@Q@Q@Q@ö™ÿ «?úàŸú©cÿ»Ÿúçó’¢Ó?ägÿ\ÿA,ñ÷sÿ\âþrV2ø˜ÖÈ–’ÛþCp×´¿út´–ßòƒþ½¥ÿУ§Oâ l7XÕôÍ*òoõ®.QÞ8­læ¸b©´1ÄhÄ]9>¢®Á­Õ¼Wó‰ •Ç$n]HÈ Ž#œ×9âÍ.âïÄ:Eêéš­õ¬—QH4Ëñk";¼rÞtD©¿<ÇJDzð®­m=œwZdjqË`ñkâ$ŽÒ’< ÷dEsøDM„OÎ7>4åB¹ßýŠ?ï?æ*”¶·×Z¼B`öÞRØÁcrå}¶È£œrÔð–Þ½Ó´ ÞÃH‚݆•ë0@cO¶J’Ú³E&³"] ,vüì äž“ÂZ<–VšúC¥Iáè/oL–°F°…~Ï eÂÆ^0w£œú‘Í.T;šú¤ö5ƒ^ÞÉ2À®‰û¸šV,î@TRÄ–`0ëF›=†­nÓZI1å$Ibh¤°C)ÁCЃT5ý7Pÿ„Z+xïW»‚öÒà—0¤³,wQÊÃy ¤~kÿÃW~#ñ†¯¨i’Ch÷G=ŒÓ!u†(/é61Rî˜Á`W²•NT;?±GýçüÅQÿ„kO:¯ö“}¦K‘÷—.ñÆvíÜ‘’QnFåᛟ˜ç޵ð¶·iâ‹íNÞ)ΧæÝÍåÃÛ-¤ªâO"'dCu"®èG!G—•'bŸ¤øáõ«x.tÆ€·pÏ%®¥€M Äwò­¿vy{q’7Ê0ùP®zØ£þóþb°âñ…1ÊM{åá¬fX$2H±¦ÉJlpÌ낤‚©àQѱöË#ÎÒ¬MÎO™|<ß´HØ't‡1ns÷°98ãó׺´¶öš õž’¾L—^£wÉpc¹†UŽÈ‘¨Ž9“fcCæ < ¢åC¹ßýŠ?ï?æ(ûÞÌWªøT¹ñ—{g¢Ïköil–ÐÚÇd‰kh®†X¥r|àÀ—l,c*Ts—ÏAá&ãÃ~ðöœšn'h¢MIŒà´N åÉ$ïÃ"F<)\|ª¨.oýŠ?ï?æ*½ñ²Ó¬äºº™ã…0 q$U@%˜’P $€&¸ À÷º]Ž–`Ò ¶ºµ´ÑÎèŒjÑγ·0 ýæˆ*»õŠ届<cug¡èš®“ᯱƚ$ktà„êr7’Ë"ìc¹•Vb »e 3•9P\ë³´O[¤¬÷²E ´r[¼“[ò@%&„íÜ í;dR ¶q†çkìQÿyÿ1YÓî,moÚ{iíc¸»ó`†êa5Â'•6@Ͻ‹#K¶ È*ôùP®VûÞÌTú5¬×SB®²]J&˜îÎç¨=>TQǧִ(£•ÊßbûÏùŠš(–%*¤‘œóO¢„’ªZÇü/ÿëÚOýÕÚ¥¬Èÿþ½¤ÿÐMTwØ«EW1 QEQEQEQEU]OþAWŸõÁÿôVª®§ÿ «Ïúàÿú ªÄ…-‰|i<Ö¾ñ ż²CÉäý§ïþfß›ïã9ïŒó@Ü>-ñ]Þáç·Óí%Ô5{&Ô ÚÂ%XbU„`¬“Ã’Í6ìîùx\?2U‡ñ¶§%Æ›ukcº{½•½úÆ#‘mç¸1áDâa¸*Ïe"ulýá’S¬ºÐ´{í: :óJ±¸±ƒo“m5º_Été¥M«ÅåD°8…žÞMÒÜUÆä‘÷Èäõm›»@äßiâý.æßPž{[û¹­¥—íÍ*¼‹Ì`ò8Š%O(~ñ~}Ñí`w;WaYs[hºf¨5I,í ¿½uµkÑn¹8 •UŽ Ø£’ êPENóVÓtû‹[{ÝBÒÚ{·ÙmÓ*4Í0€œ±Ëê=håQ@âè*ÊÕhº ²µ(lÄ‹þ?/¿ëªè¨êz‚/øü¾ÿ®©ÿ¢£©ë9îØà>1ÿÈŠŸõúŸú.ZùÆ¾ŽøÇÿ"*×êè¹kçúü§ýÎ>¯ó8*ÿ_#×>Çîÿ_P9+èŠùßá§ü~éßõõ󒾈¯+9ÿ}©ê¿$iƒþùþlŠän‰F3ûÄ=3üCØÿžã¨–¢¹¢QŒþñLÿö?ç¸ê%¯,ê Šèn³˜c9†1œñ郟Èý KQ] Ös g1°Æ3ž=0sù¡ ÚÛ¶sG9ÎPsœçÿBoûèúÖO‰[èÃnã’)X"òBÊ®søüI­º©©jév/w:»"²¦Ô–f`ªp9$u¦ÄÕÕ;—P·ºÚï©iÃŽ›\c<úÖ~­wzt¢ÞîÆfpc"=Û€ ‚FMjê_-c¶šâ×AÎ.’Ñ~Ô|·óX’»HÚ ‚Nà0G š£>¥ã ]õ$Ñôফc,vk7'?;1”0Àä 0'«UWúþ‘QèžÒàÑ´ K fvŠ5,ÎI,ʼn8¹5xnÎ?iÚ’²éÿeòœ°ÞßgttÜqŽLkœÔã{LCJ³Ê‹yä'žD›Fìc¶sV«’VFÒ”§');¶s÷‚MNãS´Ôo¬o畤kˆ<¦*­1²‘vŸ³Äy²¼ [x;K³Ó¤°¶óâµk»[¥@ùØmÄ5‚vâÝ3œ“–瑎‚Šdœ¹ðLÙƒN]gUKX|‘e¼X³X¤I òðø1 Ì»Ûóó6dŠ7Pêú”Z¡wiu%òL²‡XÕ•”ÆbÂ>T÷cž[wIEspø+Mµxcµžî >7‚FÓÕÔÅ$*,NÌÊdʈ¢à8Ë-ºæ‹á»=+h¬dcŠÒ;WF`DþZª$Ž1þ°*íÜ1‘€r6ìQ@Q@Q@Q@dÍÿ!›¿úô‹ÿCzÖ¬™¿ä3wÿ^‘èoCøXuF>…þ»Wÿ°ƒÿè ZgþB:wýwoýõ™¡®Õÿì ÿúV™ÿŽÿ]ÛÿE=eˆrØ­â¹M­ç‡/ZÞîh-u6y¾Ëm$ìŠmn±«67:Œã¸®oT‡Qû-ÃGõ†™¨j^A$6÷$ÊB4®’/šþ|Ç'ýõ>°ñ‰,ü7Œ·±ÎñÝÝ­¨x”U¤’6ƪŒÌÝ€'¥G?Š-£º¼²‚ÒîîþÞãìâÒ›å"(åf]Ì"¬É–b£$/%”6¢8ýͦnøë#Xûn–†7’eÊx¬ÅÇú>DxËÜdìùHcÁ^#‘5Y<3h±Ï®A©™aÿ„‚I¡¾”+yRnòI_?oüz°\`œÇÅz&›©C©Û´‘¬‘I˜ç·”$ G‘œA‚e%H&åcøY/#ðå¢ßO<ó ø’xLNɽ¶eY™‡É·ï±~ï†Ü+bŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(žÓ?ägÿ\ÿA,ñ÷sÿ\âþrTZgü‚¬ÿë‚è"¥þ>îëœ_ÎJÆ_ÙÒ[Ènúö—ÿBŽ–’ÛþCp×´¿útéüA-Œÿø»þÍGO³ÿ‰R}²)¥óµ=Kìq¯–cCyo¹™œqš¹oâÍ2wµŠAwm=ÂDZ9ídÝäPV)œ‘Êw(ØÌ , ¹rk>¥u¬Øêš^£ii=­¼öì·Vm:ºÊÑ6FÙ‚ #¹êk.ÏÀ¿ÙÑC§Új?ñ(Ym.%ŠX7NÒ[,+ÙCU?g‹p(IùðFFÝDhYø×A¾³7Q]N°˜–hÌösBgF º.K rè:²æOëÇ^—XeŠHà´½ð‰mä‚B¾D2é é1õ9oà]Úfƒj5I£iék† ‰$I-¤GeÝ÷wZ®TÄfµ4khuuÖ.-5Õ.<ÙÕ- Qòc‡fÆwÈ+9<äñ@x£\ÿ„sA—Sòà}’Ã.'ò#_2Ts¾ÖÚ«¿$àð*¾›â‹y´ènõ+*çóZ ìïų¤c.|∡†íôF<…m²j~†o¦“£‹M-!¸‚â– Äë6<µ+Áeçu&£¸ÐõMVÎ;m_W•%ó·XYùºhOïO¸ê_ý¢”2¸‘x»GšÿìBK´”}>úÎéïàE¶» gelÐZ Í#ˆÈâ6c9f*pÛGËœ±ŽO‡v?Ø0éÑý’CïÚâ¶¿h€‚$’"ÃpH6 !-¹ÉÈ —Þ!·ƒÃ’jökö¬â;xI1™gg¤-‘˜ØÈBÀl9ÝŒ®ÚΨg’ÖÇOƒR’ÃdzŒ¢o³fRŠå!F ¹¶²¶ÕFõÉÜV9¼2Ñx0hö&Ñ.`u¹¶ÙÛÛ‰ÒQ: ˆ>X¼Å–Ûœ±o˜ÈÚN¢óÉ{¦^ÿehì–ú í–yö*nƒíI*©Ï˜™E!~öðãñƇxŠtûØî}¨`É*„[†‹Ë$ì8,³)Pq¸†\¬ã] ’cu?–› g1û@gXÕ¡ù?|¥è÷yà ׇÁvöšuÅ…œþM«êWp¦ÂÞR[ `±ä¶["Ø|Ǧî‡Ó‹À“yZlê±¼JA€KR¬!Žx%"R\‡r-£]Ê ±Úrè^´ŸF»Ô­"»¹¨æKT·u¸Ü«»g”áX9 §¡«øwÄpë¶ä±´Y÷¸O²Ý á¸UYá“ dE2*±Ú0á—¶I/†¡º´ñ%¥ÅĆ uØÉ倭µ¼p È'îÎ;ãs_Mðåõ·ˆ[¼Ôm%»• SGocåDéó]Ýe%c Ûˆd®UY@)é>7þÒÕ¯àèvö¶Ý-Îí_70Ç Œ†G‡ÊT•%ð“ÐèhÞ%׈u+(!ž;[[KiTÜÙÍo!y`ß,¡I\F¸ u-ÉíM<)©5†¥£ÜjÖ¢êzdŠ;K…[‡‘È™JåL|¾@éÞ¬ZhZÔz•æ£u­Z5ÝÊZCºÖÀÆ«2»²ò¾K¬®¹ÈÛÁ"€:J+>KME¾Ó³TÙæ]Å,_èê|¨WËßû[öÉóG™ÇÝ¡@RÖ?ä ÿ^Òè&®Õ-cþ@—ÿõí'þ‚iÇq=Š´QEsQ@Q@Q@Q@UÔÿäyÿ\ÿA5jªêò ¼ÿ®ÿ š¨üHRØ—ÆMuà_ÛÛÅ$Ó˦\¤qÆ¥™ØÄÀ$“Æ+){%ü·¦_]é=¼W·²ZKmzñª]-cŠ8䨲½¹ÝdùŽ 2© è¶¥£_j— #Aeo%ċТ– dœQYðx¦È%áÕc“E{4ŽI—Q–% ŒÊ½“ Èêìåy#;qb×å±Öï™õÁqc¥´eλ˜Mxa q,žZÛnY1à8É ÜŽ ‰¼g¤=ÜZËêpëo32Ü›Dµò®V¿òîÆ€e~l’ÌZ»ñ.ƒÅ¥»ëzjÏzˆö±µÒ\á åƒÏj¯{â6ÛÄZv…Õ¤ú…ÕÁŠ[e¹_6I.öNN>EãÄB8õ!ªM$·v§”ÄP-³,ªÜrÒy„0ûÜG•žÞ%…^ô‹y$ŠgmåÏyq´—H—¡ ÷KÀ).í‚2Ä/Äz4Zí—…ìâKï²}¬·œCùöëö;€’–IÊÏóÛŸš¹õѵ=/ÅQÏv—ηqC.¯s`&"F0êM"« U¡Ty@„v×qoâ[ŠOíþʸ‹™m¯äÖpÙ U”¢;nV#äpH(ÀHÛoæL-í®dÚ^5òÞ=Í!Æòw†ÖkZ¼VZ¦fº%Þ©xé5Ô n!Ì"=¨Ï™]8œ/8fíQêÞ.°Ò‰ ‹S¼–Ö4Óf¹giV2v‚Û¶îbv䇞ôÐQEN.‚¬­V‹ «+R†ÌH¿ãòûþº§þŠŽ§¨"ÿËïúêŸú*:ž³žáŽãüˆ©ÿ_©ÿ¢å¯œkèïŒò"§ý~§þ‹–¾q¯¯ÊÜãêÿ3‚¯ñeò=sá§ü~éßõõ󒾈¯þÇîÿ_P9+èŠò³Ÿ÷Úž«òF˜?á/ŸæÈ®Fè”c?¼CÓ?Ä=ùî:‰j+‘º%ÏïôÏñcþ{Ž¢ZòΠ®SÆÿö†¥w+]´6Ö~jÁm™æ±œ9òßb‘ˆ 3Íuu®è–ڽēË"«[˜äA°£¨ Ã#æ=ÀçšhLf‹«­ìÒ…šöX|´d7V€—e ®Å p:Ž™=*·OÚ|¨´jù‚5»!ƒÇ¹bd•”68$ ¡Æ¶›¤Å¦´¬“M+Ë´3JA8ÀàSLñœÚ‡†u[+e =ÅœÑF À,È@çêh{‚Øñt½KYûfM> ͬ¤Ÿ5Ô¬Ñ&?tWa$Ç û­éTo-Ú+ö:[†n yw[®ì[1aÔõà㜚ןþ*µ/ì»´‹{º§—náwpÜï=@ú€)Dñv¥eýžtû¦ƒržMºr£ãHg©|?¸^ ´˜B°+Kq¶9XÇŸ =€à}+…Òäñ'ü"¾óõ+浊].øÞ´òn¾Ó4*a‘Ϫ^çrv_³r~jôé·zO„í,ï¡ònUævpm»¥v ‘чC[ÂÍlá³ XvyPˆÆÈöSjôJ©鎔çú޼Escowu¥Am©X4¾Xòü顉~UÞuQp¬[l?tÈ6×´ÖoôOk°ÞÜA=ܲ϶H ‘Qç0é‘¢6Ó–™W,ßð4RÕèhZÓœçÌãçÎæëŸ¼}j;o h6vò[ÚèšlH’#Ǫ*²¸Pà€0C@G}£=S𞳨êÖ·ñjÖŸf¾°»û4ƒb¦üÅ¡¶¬’âP0ºgŒíSÓt7F·k}/O´±œ»Gk Ä¥°HPpϰ«”QEQEQEQEVLßò»ÿ¯H¿ô7­jÉ›þC7õéþ†ô?…‡Tcè_ëµû?þ€•¦ä#§×vÿÑOYšúí_þÂÿ %iŸùéßõÝ¿ôSÖPø‡-‡ëš7öÅΑæ$ZÚݼ·1L2$­¦ˆ®0AÉ”d1Ÿ¡æô_ kÚ-ÕΩö‹KíA.%ŽÝn. íZ+hÁ–M„¬ÿè±±`¬¤îMkwº,:X±hÑï/~ÎîÖ2Þ_&Y2±DÁØæ08<IéUÏ‹ÛMC¡iwxmì’þöúÚÕm¢·ÚL3E,¦PBÄĨ ÜtÉÛZˆ¹á0òZßß\Á=½ýíßyo,,‹ ¢(ãòаbª¢1IW`̸hè+‡ñGŽŽ‹©µ…•ò0ŠöMKl&´Á ÎÃi}ÿ+A å0J÷¡aã(/5EÒ¡·žòûÍŸÍXDQy¥Ì ^\²æ2 MÇŒ•]Ê´ÔQ\Ÿ‚¼Q>±£hÑj–—pjZdwk,Â-·`,~d‰å±Ú7H‡ üノ²€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9í3þAVõÁ?ôRÇÿw?õÎ/ç%E¦È*Ïþ¸'þ‚*Xÿãîçþ¹Åüä¬eñ1­‘-%·ü†àÿ¯iô(éi-¿ä7ý{Kÿ¡GNŸÄØÇñeö¯ˆt‹ 2MTG5¥ÔÒ¦˜¶žcx’n~]£ÌnœäŽÂ£Óϰm¿.*1á[¼F;·wu´É};Ü)P@Û9s"€Æ€Ã¸þ6Î¥¾g­¬~\)’bÄ’Iff9,Ä’KI$’I4bŠ( Š( Š( ©kò¿ÿ¯i?ôWj–±ÿ Kÿúö“ÿA4㸞ÅZ(¢¹Š( Š( Š( Š( ªêò ¼ÿ®ÿ šµUu?ù^×ÿÐMT~$)l]ñ.›6³á]_K·hÖ{Û)­ãi Ш'œdúåí|#©YÝE©XéÚ6œö×Í‘i;-«°ŠxžC ‰v»-ÀÎ#<@€ž~N£Äº”Ú7…u}RÝci쬦¸d©dBÀq‘ê+ŸÓ|cr¯5µì2_ܳĶ©o`öÌî²±O&åò¡Vo1˜+|Ê¿2v$®ž Ô†“âx{O?YÓ$vÛÒMy+v䢛¥PØÉÚNÑÒ®[ø{X·Ö4ضX¶™eªÝê_hûC‰ŸÏ[“Êòö­qŒï9 œ àHÞ>²S;.™©<–ÿh¿D[l”I,n71F‚\ùaó·åÝ‘’ãÅÜø‹F´°´»K µ9í&½a•1Ž Ñ¨ÜdK] ‡‚7téEªM¨¬—fySc#]ÊÑÇ݈¶Å?(ä(=}Ny}ÃÚ–…©j0øÃï=ÅÅä¿Ú+tÉq*É+Ë> '(§ç8 ®¢=[M›T›K‹P´}Bß-¢Ì¦T^9dÎ@ù—’;Zåô?ë:¦¥¨hä‚ÒâñœZ<èÒ¬R¼hé䳪HúŽ0H§6¬hRhpi¶v7ÞVªnC öÈ7Z\#+íY6F™DŒó…òãþÌ[x/X±Õ“X‰ìfºŽQt¶Ï3¢4%óH†M„…Q|0ÛIo/•\ñ¹?Œ­€·6Zn¥ö›k“G¾_.I?|é‚‹ œa¾_¼®«ŸDšõÌqÁwpoo¶ž‰—í^eâΛ™‚eE³d—Ûû³´Ãpv^Ö,uK[«Y`µšYZkû¨®Ý÷#ÜËpÖÞCG±ÔYD¹G$2&‹à©´á ¤óÆ`´²·°FçËšêÄq>Ò¸a†bK|Ù‚ÜŒl­ oÙ_jVÚu•ÝÅäˆ^âh•­eh\¸ià²#©1ïû¾Œ›£ÒR’‰»¨€_šKmñ<ëh“mÞ•ªÍ©ØÉ0"¥¸óX«ÜyóGÁ,¥B¥X#Xðß´Oê2YiÒîDgˆù±?› ÚŽÍÞO–@ótÈlIsã Õ®tèôJæXn¢4^HYç0¬æ4Ý ˆ˜±,~R'€S—Âך¦½§kš¬V"⸤–ÕËqÃÈ‹k2òy—÷ ]ÍŸ'‚õ„¶Öía{\ŠæÖâG™ÔÚÇ%ÍԊꡘÛn¹RP˜ÜCdlZxêÂúpÖöWϦ™máþÒÛ‡|éÄ6—ó~o>!÷8-Î$I¥jú«x–M+Rû#nÓâ y"SäWâäbNdEP¥@eÔí|7yöNé ?cÖïu 0ǘæûVÐ8ûÃÏLŽœ7'ŒçëÞ¿Õµ=DÅöš†ßÌò ƒËT{_-@ó!}®Hó )`7¢±î( ?Äž¼Öõþ}CÔþÍi1ÿÈŠŸõúŸú.ZùÆ¾ŽøÇÿ"*×êè¹kçúì§ýÎ>¯ó8*ÿ_#×>Çîÿ_P9+èŠùßá§ü~éßõõ󒾈¯+9ÿ}©ê¿$iƒþùþlŠän‰F3ûÄ=3üCØÿžã¨–¢¹¢QŒþñLÿö?ç¸ê%¯,ê ‚õ¶7Hh™HÏ#Øä~•=Et7YÌ1œÆÃÎxôÁÏä~†€%ªº•ѱÓ.n”ÑDÌ ô$çR–¸çDzã2ëáÿwó>œåø„ÊtiQ•@y¡ŒmbIÝ2¯§¡™ôÉÄóuk{mXɨ¹šF•"¡l¡ˆ1|üd00:àÐuKùï!¾´Ôá¸Å"ÏQŸ- ¡l8~làv>ÝE\Ô´‰/µ*ö(½­Ë»ÈÀb‘pû̼Væ›wsy}¥‹q³|[FÅUÈ»r ÃLœžÐâ‘f…%Oºê} RþÝÑÿ¶?²?µl´ÿçËí ç}Ýßs;¾ï=:sF‚æOéŽNKZDIÿ€ çôMF}ÃÐh‡L¾¸×­-:}šU†îáP³?ÚvÿzÙmÌÙËüÀ6V€:‹‹ë{Ií!žM’]Êa€m'{„iã§ÊŒyôõÅX¯X|P÷ •&¥xmŸÏ±šâÂîÃY_§[Çv#wÙÇ-°Q€I'SLÓu[»›WÔuË*MA|â"¾±(µÉl¼Ó4ûKyåcÎйbôé÷Öúfsy'—kkÍ3í'j(%Ž'•b¼_ƒT¹ðî·gªÅâ “ìWvÚDv«tÆI{”Q/•˃µÃMÀ’ Ë“'Š.ÒI¸Ö(ªö6¿b³ŽÜÜOpË’ÓNûØ’I=†I<t±@Q@Q@Q@dÍÿ!›¿úô‹ÿCzÖ¬™¿ä3wÿ^‘èoCøXuF>…þ»Wÿ°ƒÿè ZgþB:wýwoýõ™¡®Õÿì ÿúV™ÿŽÿ]ÛÿE=eˆrØŸZÑF²,™oîìg²¸ûD3ÚˆËòÞ2‘H+#vôªrxN ›=R ÝFúîMOO}ÄòyJæ0f €ˆª÷ì3Œ|«ÆrOAEj#ƒÔ¼ w«jÒÚËy%¿‡KÜÌ Žtv2\C,r¦Èw\Jù2¸í°6l7ƒ,¤š×μ»–ÒÚõõ´uˆ§Úg˜I»Ëó !k€È-»¤¢€1ôß ÙéÙD“·öVžÚ|ØÑŸ+%°[÷+ÈÀäñÓQ@Q@Q@Q@Q@Q@Q@ö™ÿ «?úàŸú©cÿ»Ÿúçó’¢Ó?ägÿ\ÿA,ñ÷sÿ\âþrV2ø˜ÖÈ–’ÛþCp×´¿út´–ßòƒþ½¥ÿУ§Oâ lrcÓeñV€º¥ß‡í ûéW×m–x o¶áU¤@ÁÏ@ÜsÅ}/ÄœCN‚mBîÛPGÓà‡E¼1¼÷PItÒnA+ºy“åÔªƒÊü®qªøƒOÑ®-íîþÖÓÜ#¼QÚÙMrÅP¨bDHÄ]N:ŠÐ‚xn­â¸·–9 •Ç$l]HÈ Ž#œÖ¢<ÎÛÄ:õžƒ¡\M¬ÏtÚÆ•íÌóÃûómVY#ØŠª\ÊäÈ-Ià0mÏ\ £ñTúv©¶N§˜näš0³°³·À/m—*§èO^Ò©ÙjPß]j6ñ,ì.¼¥€Ácråyé¶Eã~¤›ñœ7š‡ÒÞþÚÆ+©õ ÞMÔ7‘»"2êF2¸\äŒ÷¬wÑ5Z±‡I‹JKåÓï®c‡LÓÖÎ9öÍbLEYÜ!O3?(`qòóè·Öú| 5Ôž\m,pƒ´œ¼Ž± ãÕ™G¶yâ©êiš“ÝxzìI1¸· q Ç&<©VP7:Œ(")r9pYrÍê÷ׯÂÏê’É›[Ý>îkÚ>Ko ˆÎx'x_7毛´ýÚÏ®<4ºÂÅccá÷“슶–x4,÷¨J"îT›¹>O"2ùF\÷—º”67Zu¼«!{ûƒoP0E$¹nzm‡ä¨#Ô¡—Y¹ÒÕdóííá¸v m+#Hª9ÎblñÜuìæo­C7Š,d¼ñŸØì!Šú=k̵_¶&,\퉰í*üŠ?Õc¨lØðþ¥¯kÞ —Óè³OÝ]Çgk ?š¶šqÚÞlnx3È9ù¾è' zEõõ¾g%ÕÔž\)€HRÄ’@UU,Ä€I$ 5NÃÄ~£q¼?kŽyRGH·fXÌaÈ"œ* ÷ÉÆppÇëw‹ü3à9®!ÓLúÄWGwhn-÷5ŒîAˆ¸$g§ÍÁÁçGqá=júhŒVºnŸc5ô6bÞ¶3_y…Ss”ØÍ;I,c }þ="«ÞØÛê,7Qù‘¬±Ìâ0ñºÈ‡FU>øçŠåõMoQÒ¼ %åÇ‘âÒ¯u(¢Ø­äl¶dåbLŸ¿ØäãŸ×üC¯h6šÉ‹Yžá¬å¸±§†åtÖ¼YŽÔ_ÞÂs`åKe«Ô*½ý¾§§\Ø^GæZÝDðÌ›ˆÜŒa‘ÈÈ'¥pm©éZ…¾£k©köšÎ‡Bðêw˶«râ`cœÂ&EÙ|Ò'͹£ÇIà¯ùm€æ1,â&_õm™Â4Cøa+´Æ ¨P`7‚²ôßéšµÃAg<Œá ˆ^ #Y ÄÌ Jœ¯Ì…‡Ì¼üà ”QEQEKXÿ%ÿý{Iÿ š»Tµù_ÿ×´Ÿú §Äö*ÑEÌhQEQEQEQEWSÿUçýpýÕª«©ÿÈ*óþ¸?þ‚j£ñ!KcWVÓaÖtkí.á¤X/mä·‘£ 0WR¤Œ‚3ƒèkø>)ÝM«êRêÑ¢Ô›ÉÄdUUQˆŒM0ùŸÞx]¶Ëâ-V+y¥¸˜[¶)ÌÎìT˜KpîXe@GR;ÙßTšÑ´Ë¸àDÜ·¬ÑyR>UËç“Õ@ùO=3å÷öz¥Ï„ü[©Ï’Û„ÖPNúíӪףì¥|¬ wëÅvþ c.˜4JîÂkßµI‰FCäM:y¨ùwiT¾ìƒó7ßff‘| a¢æÞöú á±–í2ë(k†y@d)¹ÍÔùvß*®$´×5)ü@4gµg‚âgº“ËaÙq˜Jç{#\‘´˜n@û‚¹»‹»ÁãmH¡ÕceÖí-¢½kÓöc0[»Âñy˜ àȪLd•`ÄÒY9ÓÒk˹­¬®>Ø-äXŠÉuæ4¦rÞ^õrîN•‡nÒTØÓü)¦é¯¤ÅQU²€»^Mì6ðymÖ?á³þÕþÑó'ó¿´?´6î|ϲý›>îÎq×w|qQè÷ú—öÍö‘ªKiq=µ¼Kqk@¥eiWaFw9wnçpÉóý&ÏT> Ðõ;øäatúC›‰5Û«¶•šîÙ²a‘B!<œ©8è2  £EðÓ%š 5;¹4´¸µ’ÞÈö¿Ùà#y˼<°¬í\ŽXÍ?Ãéc¨‹Ù5 ëÙ"‰ ¶n­öx˜©e 3çËæ»|ƒœ–Î~âK˹]uà´M´íy¤Sip»f1ÿÈŠŸõúŸú.ZùÆ¾ŽøÇÿ"*×êè¹kçúܧýÎ>¯ó8jÿ_#×>Çîÿ_P9+èŠùßá§ü~éßõõ󒾈¯+9ÿ}©ê¿$iƒþùþlŠän‰F3ûÄ=3üCØÿžã¨–¢¹¢QŒþñLÿö?ç¸ê%¯,ê Šèn³˜c9†1œñ郟Èý KQ] Ös g1°Æ3ž=0sù¡  jž¯iþyi;¬qÍ £Hà™{ŸN¿…\¬íq<Ý-¡,Ê²Í Oµˆ%ZEV ‘IÞÚæ³xû­GNÇ}öR.>¿?ç>›[?u°ëo‡ÏtâÔì#v–nßO׃Ǫ·÷N:itì¯=á'9ÿI9Î{çø›ó5…|-à½l./šC6ÄÛs†žBHؤY·6F2@îWŽS¯ gËoÍcKEsÓ£"‰#UU€JuRÒ-îí4«x/®ÅÊ.AŸ^O''“ŒžMs–¿ô{ÍGÔc¶¾Ú—qÚ¥±Dó ÞÊ«$«»å÷‘Üñ4ߨÕÌÞŒì(¬¶ñ.‚©zí­é¡,%ã¤Å»*œü„°#ŒTëº=ÄW2êØÉ¬K=Ã¥Âl»Õ؃ò©_˜Áô¦#BНcg©ÙÇyawݬ™Ù4 °H8aÁÁ~b€ (¢€ (¢€ (¢€ (¢€ É›þC7õéþ†õ­Y3Èfïþ½"ÿÐÞ‡ð°êŒ} ýv¯ÿaÿдÏü„tïúîßú)ë3Bÿ]«ÿØAÿô­3ÿ!;þ»·þŠzÊå±·EV¢ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9í3þAVõÁ?ôRÇÿw?õÎ/ç%E¦È*Ïþ¸'þ‚*Xÿãîçþ¹Åüä¬eñ1­‘-%·ü†àÿ¯iô(éi-¿ä7ý{Kÿ¡GNŸÄØÇñf—qwâ"õtÍVúÖ K¨¤eøµ‘Þ¹o:"TˆßŒž@ã¥cÙxWV¶žÎ;­2 µ8å°xµ‹qGiIžû²"¹Ž|"&Â'矊|]ÿ棧ÙÿÄ©>ÙÒùÚž¥ö8×Ë1¡¼·ÜÇÌÎ8áM\·ñf™;ÚÅ »¶žá"-ö²nò(+ÎHå;”lf–PܹÔGmà{Ý;AЭì4ˆ-ØiQ.³4ûd©-«4R`+2%ÒÇoÎÀ°Ié<%£Éei¯¤:Tž‚öôÉkkhWìðÆ\,eãz9ÁÏ©ÕË?è7Öfê+©ÖÍžÎhLèÄbW@eÉt`n]V\ÉáÝxëÒë ±I—¢Þ-¼HWȆB]$Ý#cÆ>¤¾¿¡ÝßxZ-/íWwòý¶ÑääHe1­Ôr9Ý@¥P6 €~QŒž¼¾¹à}WûvgОíKtX¯.µ%heû6¡àÎí"…iàû¿Þ$»kpø{IþѸòü…¸·ŠF’AƲL‘—,xCîü:޵Ÿaã}SñévWÖ—I²Ŭâe’W±ŒíÈR©n[$ó¸tã ¤h¾*ñRÜi^±@Š[Su[I vXoÁ'Éw˜`ÈÎá•$ƒZDÔt3}ªMoåIg, ¤ u!Ø^Þ$Vê!๎ HÛ”œvx×AŽéíÚêrÑn3H¶s4p…–H™¤&ØÔ\ÿø÷OÑa¸›H‚-v+½(Gr fd‚8lãD€ä.áJçæ°n{‹/i7ú‹XÁ4þp–HKi,qÉ$eƒ¢HÊØ~“…cÐ CÅN—¨› ¹§[ÌDv’È¡\² ,ªT322ªçs6Ÿø_m§ˆUtÝ oJÑ.­õ;ˆ'·?o¼<ÉQ™•㔃0VåŽ2—>¾+¹¾»Ñí'‚ëX q$©yÖbÁT+ƒË ¸D!ñ(lp n?t•c7SœÄ&‘ÖÎfH³¦fp›aÃG o0®Ý»4/ˆ®Åé0"ϼÄìIr¨¡¿}$!p±Bï<´`€X…àü5¢ê^J—:,â kÝ7í:Ü 4>]­›O—y”–Q"ü «y¼œ#´Ó-uRçLžÅVÒH.<û¥$´[M¾”¾ï–"ùBÊHùzŠ(¢Š(¢Š(ªZÇü/ÿëÚOýÕÚ¥¬Èÿþ½¤ÿÐM8î'±VŠ(®c@¢Š(¢Š(¢Š(¢Š(ªºŸü‚¯?ëƒÿè&­U]OþAWŸõÁÿôU‰ [7ÿcþιþÑò>Ãå?Ú>Ñ/ËÁÝ¿…£Éyuy&•b÷Wq.fkt/4dQÛeÀŽS‡HðÍ»ßHÓPk§µŠÍB(e1`h,¥g–ÀÈVÆý§ÿ Dÿµ~Ýý¡uöÿ7Îû'Øq7‘³?¸Ýÿ¿êþ½»þZQ}cq}yâ«%λ{»‘ a™ìt Ÿ—k´WŠˆ\»n¾âÒiZ¶ƒ¬Ü\\i†›}:¢$òZL’°\±@ÅI8Érõlw£ÎÑc¸‹A"Ñá³hªŒ»E°Œ³»¼¯—ž0 aëÚáÕ´9bÓmõX”ʉqpúuô/ÌQrË–EB#n7îo”x»dñ“¸º²MI¯Í»A ò[IFº°ƒx›'6Ç÷¤œ²$œT¶Ñ¬íìï-dO´Ç{,²Üý¤2ù„å[™Bá9Â*¯AR4Ö¿p±ZÄuºp|ÅfCÈ{‚UYw GAŠó½3MÕnîlm_Q×.4©5óˆŠúÄ ×%²óLÓí-äg•;Bå‹ÑŽ·þ«v±ê£V:}Åž‹!iJ3Ã=èÎÏÈß»x ¼ÿ{vA'q ÓOð†ƒ¦êÓj–úe ¼wSÆÝn« B2*›S¦‰»Qa?…lÓûSN—F5k€Ÿk·h”^ÌY°7¯úÇÝ¿Œ“Þõ—àXo¢û}}uh|¿+ívw6û_æßµJó<¿DrÅñËé¾ ¼µð¯‡ehg1ÛÿdÏS›kƒ5¿Ú\Ç·äÚ±îÏPe¹-ÃPªA<7Vñ\[ËÐJã’6 ®¤dGÎj;ë}FÎ;«Y<È_ ¥H ÊÊpU A+‡ðÿöÇÙt¶ÿn}Ÿì–Ú~fýÿlò“oÞýç—œy»~]Û3ÇÚkc@ºòoµC ¼òXÞërÅlЦc‡d LÌ?MÄS‚qó;çûˆQEgǪùŸfÿ@¾_>î[_šy~_™ûÇçˆÛËù[¾ôþõX³ºûd /Ùçƒl²E²tÚÇc²nû­·ržêAï@Å”RïsÎ#¸t’*dÓ`Ï-rø{™¨-ƒN‹ «+B”»‰Å‘Çå÷ýuOýOPEÿ—ßõÕ?ôTu=c=ÊŽÇñþDTÿ¯ÔÿÑr×Î5ôwÆ?ùSþ¿SÿEË_8××å?îqõ™ÁWø²ù¹ðÓþ?tïúúƒùÉ_DWÎÿ ?ã÷Nÿ¯¨?œ•ôEyYÏûíOUù#Lð—ÏódW#tJ1ŸÞ!éŸâÇü÷DµÈÝŒg÷ˆzgø‡±ÿ=ÇQ-ygPTWCuœÃÌl1ŒçLþGèjZŠèn³˜c9†1œñ郟Èý 9ÅÌ£9è޾Þãþùù¥ª#-¢#07Vø?~§°÷Çà=ó¥U55·:eÃ]«´§šÁ†ù~l‚9Èõ cÄßÛdUÒ-æI&U „x·Ì\c8 ÀÏÍøŒ‹]&îÊãN¹¼…ò^@¤‚?t»†@à(Àé×€¯ý—¦<Ž©§ßîC†Q{*}ïj[[ :+´)¥ÞÉ!ËcnŠ(­DQEQEQEQEQEQEQEQEsÚgü‚¬ÿë‚è"¥þ>îëœ_ÎJ‹LÿUŸýpOýT±ÿÇÝÏýs‹ùÉXËâc["ZKoù Áÿ^ÒÿèQÒÒ[Ènúö—ÿBŽ?ˆ%±±£êWZÍŽ©¥ê6–“ÚÛÏnËufÓ«¬­dm‘ Â;ž¦²ìü ý:}¦£ÿ…–ÒâX¥ƒtí%²Â±í”0USöx·„ŸŸdm]•€Ýò’£v¢$îÓ4Q¨âMOKX¤0dI"Im";.ﻺÕr ä† 0#5©¤h3[C«®±qi¨>©qæÎ©hbˆ¯“;63¾AXùÉç'ŠÃ´ñíãišuÕö2jÖ‘\éñÁze æIaecù5ÌY*稴<9¨ß™³e-¬’ÇjQci&º”¸Rä‘›¬mÏðuçŠw>ÖnµèôȤžÛB‚îêô^*¤s¸ŠpÞT«+Ê÷,W0®ýâ@ßc^¾×$ñ•͆Ÿ&¸maÓí¦Ù¥-Êï$à—7<ò#\mô9ê*=;ÅÓiÖ7ðÝC%ÍÁ¸¾m?|ç7R BX àùaYí3q‰GdlI£|>þËסÕ|í*.X¤û>™¥ý’6ÙÌ|1¾cöœîôŒ s‘_Yøiý«cumöë>Óö¡ºÿNûOټ饗|Ì_.Aç`·;¼¸ÎÜOëÃI²±±‹^´Ðîõ;ƒw÷2-Õ¤gØø Õ’0eSœàø~'ØÉ¥Û_›xü¹¬­/É÷„yí:ä/Xc¶™v(TØrßÃgþÍÿLÝö-VïRÿUþÚ>N¼mûG^s³ ÏäðÅÓ‰¯5_>é¢Ói~ÎÌ{K†Ÿày…ˆÀû¾ý+?Søˆ4ë¼wŸ¼·bò8ši$†(&x„˜ŽQ¿Êr<Ær¤n 1¾'ûN±’,ñ|.î"¸‹ÍÿS jeÎ0Û„¶§h9}€þQµMnÍ/àHÕ- W25¶é$ÜÞJé Œ«pæVqÁÒ6‹}q­ÚÝ^jqÏgep÷6°‹m’«²Yf0ÅuQEQEU-cþ@—ÿõí'þ‚jíRÖ?ä ÿ^Òè&œwØ«EW1 QEQEQEQEU]OþAWŸõÁÿôVª®§ÿ «Ïúàÿú ªÄ…-][R‡FѯµK…‘ ²·’âEŒÅQK2@Ψ¬ø'§´óõ2Hm±M$×’°'nJ)ºU Œ¤í*忇µ‹}cM‹e‹i–Z­Þ¥ö´8™üõ¸ù<¯/hÚ×Îó™ÀÎaXÿð’Yÿehùsù?ÚÙûvÞgھ͞¿w9ë·¶x«‘éEªM¨¬—fySc#]ÊÑÇ݈¶Å?(ä(=}Ny?øWÖdóÿ³´¯íŸí¿í·yÌòþÝçãÌÛ»w•òã¦xÎ9 ‚?èýŸú¥µÕüQËok5Ü^d‚O»´!òxIŽ ®~?øoĺ‘¯ýJÔ¯¢–Ç÷lsɧÉs,i÷°J2“žŠI·l;}YÐmôÏ Çi鸸Òîî.#…‡ìâÙ$¼£µ-óHŒw`);wl7‚µ#§xJßϴߣÙ[ÛÜí†hî,¥%>^FÛiÎ9+êHí!¿³¸û?‘w¿iˆÏÉy±¹uÇÞ_y|ÃÔW?wâ›X>Ûªÿa_Og¦ÅtSEƒhgÎE “ï÷î€YAÎÜ5ѾÉu}xé:C²ÙéðÎ0míÖV$*ãåV|…ÛÁŠ;~2µŸ­øBóÄ7×Ŭ´­'í\A&¥k!–æê7…áT•|´ùF䓨F$~%Ðe·ëzkÀP¸‘n©P“œãŠSŸúfÿÝ8“P×t}#?ÚZ­–6çí7 7nÛ÷ˆë±ñëµ½ s÷^¼×%×.u8¬lîµ=t¥xÜ>i÷̈J‘$Gd®;c@ׯ¼gk¯j0é¶©À<›{·œ•H¯œ´IÉk¤ãÑ[ž€€tž%Ðtû{[‹ÝoM¶‚í7ÛI5Ò"̸(Ià 09£Ö¬jZ¶›£[­Æ©¨ZXÀÎdº™bRØ'±8ãØ×›ëú³£iÚÝ¥¤z…LjmîíOˆwÜ\ÉÞ±2EØÌ1¨(~b2W¸½Óu+ícN¸•­½†¦n" [y„ÚIŒoódcÆÐ;ð@,Oâ]ÖÞ[‹oM†® ¬’ItŠ©01’NÎÞµ_RñE¶Ÿn·‰iwy§‹qw5õ¨F‚0O˜X°Þ6†lF°2îãÇ…õíó“ZÛÚ^Ïiocdëç:F­­ò»³ˆØª2;y<2+RïÂÚÄú Ò¼­*_´Kquö‡wi·K,žl'aó<Ü)ýÑÊg#~¸¨à‚­íâŽ"@‘Ç…TP0€ã%QEN.‚¬­V‹ «+R†ÌH¿ãòûþº§þŠŽ§¨"ÿËïúêŸú*:ž³žáŽãüˆ©ÿ_©ÿ¢å¯œkèïŒò"§ý~§þ‹–¾q¯¯ÊÜãêÿ3‚¯ñeò=sá§ü~éßõõ󒾈¯þÇîÿ_P9+èŠò³Ÿ÷Úž«òF˜?á/ŸæÈ®Fè”c?¼CÓ?Ä=ùî:‰j+‘º%ÏïôÏñcþ{Ž¢ZòΠ¨®†ë9†3˜ØcϘ9üÐÔµÐÝg0Æs c9ãÓ?‘ú–¨kòÔëÖ_ýÕ£knÙÌç9AÎsŸý ¿ï£ëTõ˜£BÔÙ#U-k.HÏÊÇù’@„ïrºŽ½$¼1Ù£ÜJ# ¾C™6¨,¬ÜlœÜVÕ«Øx†8e™®MÄM$sHq±2¶Ðýå €;Ô7¶zðÔîoì$‘Ac‘w$ë’FìÈÏ#©©´-3R1ßj‚8¥H¼ˆ­­ÓlP¦Gs×hïØzP¾‰ÿ ;þ½bÿÐEsÖö±g>·&µucso§ÝÇcV6/“Í"@Ñà¼Ì£-8L ዚètOùißõëþ‚*´þ³¸‹SF’ukû¸ïYÕ†bš5‰cdã)‚6ÃAÅS0ŠG°é”º wYtÕòD±XÙ™˜È"#B~W'÷ƒŽn†üj.´KØ.çy-ìã½Ô#Gu…þ»Wÿ°ƒÿè ZgþB:wýwoýõ™¡®Õÿì ÿúV™ÿŽÿ]ÛÿE=eˆrØÛ¢Š+QQ@Q@Q@Q@Q@Q@Q@Q@ö™ÿ «?úàŸú©cÿ»Ÿúçó’¢Ó?ägÿ\ÿA,ñ÷sÿ\âþrV2ø˜ÖÈ–’ÛþCp×´¿út´–ßòƒþ½¥ÿУ§Oâ lIªøOÖn-î.þÖ³Û£¤RZÞÍlÁ\©`LN¤‚Qz Œx[F[Ènc³ò¼­…`ŠWH @3B¤FÌ¡Sk$lLµqÉüAM—ÅZê—~¶ƒìW¥_]¶Yà-¾Û…V‘|g=qÏô¿jq : µ »mAO‚ðÆóÝA$pyÓI¹®éæO—Rª +ò¸:ˆíÂÚ3YÙÚ›?ÜÙZ}ŽØ \¢Ìdmlä00ÆCçp( Ôš.™¦iBö 6IÚã}Ñ–îK‰<ß-ÞÒ30;xôÇ­pvÞ!׬ô âmf{¦Ö4¨¯ngžG؇›j²ÉÄPRæW&@àyjOƒnx*àMЧӵHõ²u<Ãw$Ñ……¾x“hü¹U8ÇBz€u®—i­iwmúHö—)²TI^2ËÜnBB3ÈÈ<Uî<=¦]›&¹‚IžÉ y'‘˜’)X¶Xï‚#–É;yêsâË©¡ð}½Þ°¶–O§`óì¸/j/a9óS£$1Ϧk/Ä~9‚ÂÏ^¼µ×¬RÕ´A67›Iî”Ü1âFaFq•ãæä°´:\úµÕÕ¤ðK|Ñ$79·‘É(PT0æaÓ¨`~ïÓE±]fÍ`ž5KžôÙ¹¼û†|LNrÍrû§yÇÜó»-R].ïÄO ÏØäšS¼y’­ÿâe©¶é$xäTS·`%,ê¼ȯgâ«©®5 Y¼CZºéJ–v°K‰«I ÕòF£(]Û~èF[Ìà.T`{y5oÚ<ÝCÆûÊŽP°ÇNLiù{š¯k¢iÖwQÜÛÛìš?´lmìqçÊ%—‚‰Ôl``qXöwÚÌž(mY?wg,—s\mOß[H[Ç·ø~c"î?è™#ŠÇÕ|C{yª}«IÖg‹M’ÓJh8cÚâöæHL§z k(È”nV ºðVƒy§Aa%¬ék ¢Ù‚òhwÀ£ …p8ÜßÞ9дÓ>Ϭj:”“y³]ùQ§Ë·Ê†5ùcëó|ï+îÆyŽŠ+Íæñ~¤—œrx“ɾ°´iömÁÕ'Žê7»8‚V"¼¹Ú#˜ÒÄ;Òä´kãq2ßž_ÝÊwÎìKµ¾|°¨T.L,­´*’/ hÐA1ÙíŽ(­!Aæ¹Â[9’×øX“ïß"³Ï4—Ö®¯¤óͼñ*5šÜJ‘»§šC"‡Û*»N~G@ÈèÄWQEeÃáí2ßT:ŒpH'ÞÒ*ä1FíΑØŽw6YT½ò~fÎ¥PEPEPTµù_ÿ×´Ÿú «µKXÿ%ÿý{Iÿ šqÜOb­Q\ÆEPEPEPEPUu?ù^×ÿÐMZªºŸü‚¯?ëƒÿè&ª?¶.ø—R›F𮯪[¬m=•”׬€•,ˆX‚2=EsúoŒnUæ¶½†Kû–x–Õ-ìÂYÖV)äܾT*Âíæ3o™WæBQ«i°ë:5ö—pÒ,¶ò[ÈÑ+©RFAÁô5Ž|Žn¦Õõ)u@èÑjMä‰b²*ª¨ŒDF&˜|ÈOï<.݉+·¬”Î˦jO¥¿Ú/çQÛ%K‡MÌQ —>X|íùwdd¸ñD÷>"Ñ­,-.ÒÂmN{I¯XEåLc‚ãtj7Å×haÁ ÖÁZjØj¶ž}Ù¥‘³ººîmÏ3¼ƒåÀvk‰ñ´p€1RGá8"Ö-¯SQ¾ö×rÞÅaû¯%f•dÙÙæ™¤lÀ-À5#Õ´ÙµI´¸µ GÔ!MòÚ,ÊeEã–Lä™y#¸õ®OþÖû&ϳOöïí¿ìüÿgÜ}ŸËûw‘Ÿ7nÍÞ_9Ýücøk¸¬øFìÿ²¿³¼ÉüŸíí Û†ï3í_iÇO»¿ŒuÛß<Ð[xúÉmc¸þÌÔŠ]$rià³}ËJñþó姈âM‡Ó†—â•kk=Åí½Ýœq£”3ù`Jé*Ã"UJLég*¹;ƒ„‘xÂ5¶ïo¥†ËÊ[Ý£Ò(åŠQ€²“@—,ØNI’oi³Éží^'¹’'¹I&¹K­ãåÁ),hTŒ 0lÐ{éú½¼gJ²»Ô.ÝäV´µ–ÝÙb2ìdó|¢Ýr~p1•`²_xêÃOŠîæ{+ï°Áö•KµXÊO, #K ûà ¼²ª‡ ÊæÃøX·“:뺪êQyƒûCt-##ìÜ›3©ò£û¨¼¦s–rÕï¼ a¨Ewm=í÷ØgûK%¢´a –u‘e•Í刚^™Fó…áp_Pñävï6Ÿ}c5´SgŽ)B\$ ?”U%ù›Êg ƒ·xnøN¬"óæ½²¾²°Š[¨Vúe£•íüà UGi:C+ Ê2Ô€dÕ¼¦ë1ß%Ä÷j/n$¸“Ëug³6„ ©ãË9ïósÓŠ’çÁÚ]æ…ÏŸ-ªÝÝ]2Æóp') ·Œ`Œ/<€XÒuã©ê7véWÚuÕ¬QLÉva;’C R R8ëuÇjË“ÇÖQ†—LÔ’ä´äDTÃo!Žâ`›¶#mÈÆó¸mVçè^ÖVêúû\Õ§7WdEò.ÙR ^P ¤®d*˳îçæ;°·.<¦ÜÚÜ[¼÷a'·Ô-؇\…¼”K)/Pà è:ç­x´]Ü5¼UÜFK‹‹;;‹§`¹¸„ÈFwAû©æ@0§¹ÉáíVþïQÔ´ýBH&’Ïaóâ´’ÓqbêWÊ‘™Š/"Pv>â”j§¥ø5¢2¶§©]΂ööêÞÚ)8íÌòM‡GDYCùs09rbGE#cJÑF›qqw5ýÞ¡yp‰ÜÝÃyhX¢"àsœgæ9$¥Q@Q@âè*ÊÕhº ²µ(lÄ‹þ?/¿ëªè¨êz‚/øü¾ÿ®©ÿ¢£©ë9îØà>1ÿÈŠŸõúŸú.ZùÆ¾ŽøÇÿ"*×êè¹kçúü§ýÎ>¯ó8*ÿ_#×>Çîÿ_P9+èŠùßá§ü~éßõõ󒾈¯+9ÿ}©ê¿$iƒþùþlŠän‰F3ûÄ=3üCØÿžã¨–¢¹¢QŒþñLÿö?ç¸ê%¯,ê Šèn³˜c9†1œñ郟Èý K\§Œ5ÿì+ JîV»hm¬üÕ‚Ú3Íb%8så¾Å"07gš-q^ÇWU5;¸ltË›«˜ÚH"Œ´ˆ ¯~ghººÞÍ(Y¯e‡ËFCuhÑH vR ìR¨é“Ò«xÔ ßj0©™Æ®ä#!ù#—?¯¡¥7Ê›*:»Æ¿¨AczÈú.m¤d'%|±“ïmtQþ¯ Ý×­kiö £2K£Y^ÛF6··T"O”‰%9'ÓœWo«ÞGwsäjë#ŠiÊ# ¹ý×O=óSC¬ë·}f\LâBÁa<Ncã€8ö®í:Z3§êUoº=vÂâ½>ÞâÝvÃ$a‘pÑŽœp1Ò¬W=à{f¶ð}‚´ÆS"´¹=W{ÛõÁ÷¸ÍjÏPÓàMýþ¥¥¨½º.§e¬\1‘>ÛmÒ› níç) €— 7|]Òg3Vv=RŠó0ž*Õ|GÚod²¹¹Ó.!ûRËöyíDŒË!•žáVUËž&p õž`–·öM ñ]YÝùW+.¡5êï1G Ù,¿1]ŽœapÛ¸îXŽ‚Š( Š( Š( Š( Š( ²fÿÍßýzEÿ¡½kVLßò»ÿ¯H¿ô7¡ü,:£Bÿ]«ÿØAÿô­3ÿ!;þ»·þŠzÌп×jÿöý+LÿÈGNÿ®íÿ¢ž²‡Ä9lmÑE¨‚Š( Š( Š( Š( Š( Š( Š( Š( {LÿUŸýpOýT±ÿÇÝÏýs‹ùÉQiŸò ³ÿ® ÿ Š–?øû¹ÿ®q9+|LkdKImÿ!¸?ëÚ_ý :ZKoù Áÿ^ÒÿèQÓ§ñ¶$Õ|A§è×ö÷kiîÞ(íl¦¹b¨T1"$b.ƒ'EhA<7Vñ\[ËÐJã’6 ®¤dGÎk“ñf—qwâ"õtÍVúÖ K¨¤eøµ‘Þ¹o:"TˆßŒž@ã¥cÙxWV¶žÎ;­2 µ8å°xµ‹qGiIžû²"¹Ž|"&Â'矈ôЧe©C}u¨ÛIJ°¸ò–ŒQË•ç¦ÙsŽAúŸ;¶ð=î èVöDì4¨—Y‚}²T–Õš)0@•™éc·ç`X$ôžÑä²´×Ò*OA{zdµ‚5€4+öxc.2ñƒ½àçÔŽhs[ÖôïhóêÚµÇÙì`ÛæK±Ÿnæ 8PIäÀ¨æñ™¼47žC©uºò ùM ˆ>UHÆãÏ< “€ ªzÆ“{/‡íl£¹ŸP¸‹P³™æŸËGdK¸äbvª/ÊŠzœw=y{¿Üi÷ºRiPyðC(y_x]ˆ·–$Ã6NË{]¹{ÊÉù›òMJµ›m-–O>âÞk„`б´jÀóœæUÇNö Ê· otgFÅp¤–Æù†9<ã88òøB/.$Òà—ÂѬ°Ûí}'ÙÊêN/,ÞI ^@Vß2('<Œ¶*æ«ákÛFþh,à¶Ð-|×HD±ÅÙs§É,AI «'‘vmªImÄÉï#’ÇOñXÅ ‹wª$·Ò89V1"$äðv´@1ò“×­Ë{ë{¹îá‚MòZJ!œm#c”Yç¯ÊêxõõÍy…<9¤ø‡^ŸQ_ Øy·fÞ b·–vŠÁC š3“ÿ2‚EtÐot‹™.5/~­uinÒêŒÑÈà­´<û·–ó"wà9vN(qõ=×IJªÇw&¥:Ck4–ö“̈fDwE)io˜ƒ‡ñƒ[•ÃÍcâ=.âÚÇKŽù¡þÕk§¸·k_"H'ºóeY–_Þ+"´Š<¼çå9ÉÚ¼Ûx?]ºÕY¤ÓnàûSÅ&¦ð½­¼Ì/m¤/ BVfà«KûÀ3€z†§©C¥Z¥Äë##ÜAnNéeX”òGœíž½*åyÞ­ái?¶q†£º#S°šÂþ5€.Ÿk [ï„n`è•3mJþóÔ°ú€u³÷v7w³Ù¦¤×Mf ¾eºäÔ<ÃlrÓør6±vÀ®Q\Þ‹aw¡Þ^ÚZi‘ǥͩÿ£¤N‘ÇmoöT%‘@gW@2õ'“Ѽ{¥Øéf " k«[MîˆÆ­ë1ûsÞh‚«°ÿX .[ H¾¾·Ó¬äºº“Ë…0 X’H ª£%˜’P $€&£ÓuKMZݦ´yG)"KÅ$m€pèà2œ@ d0=5ç~±º³ÐôMWIðרãM5º@ðBu9Ée‘v1ÜÊ«1]‡2ÊöÓî,moÚ{iíc¸»ó`†êa5Â'•6@Ͻ‹#K¶ È*€tQEKXÿ%ÿý{Iÿ š»Tµù_ÿ×´Ÿú §Äö*ÑEÌhQEQEQEQEWSÿUçýpýÕª«©ÿÈ*óþ¸?þ‚j£ñ!Kb_O5¯|Cqo,Ï™rñÉdaA‚9®^ÊûYÑõ³ £Gowxöâ%¸¼ŸRŠßr]9“|…$bÂÛg—•U°$³-w—ÿcþιþÑò>Ãå?Ú>Ñ/ËÁÝ¿[¡7“ŒžÀi:jÛ½ºéö‚·[WŒB»Z,dcfz ÇÖ©Üiþ´×­5ôëÕîå0ÁwöU3;ˆ˜‘æ‘û´n§ Ç   ‘ÞÎú¤Ö¦]Ç&å½f‹Êñò¨_<žªÊyéžûWÄŸØÛ¼¸>Ãÿ /‘öÏí>ÑåÿjìÙåùxÛ“f6ß5éÍÝøÂV÷Ë}¦´v×óÃY|™IpÅÑ*àÃ+ä€w!þ*ùñ¦°t_ Ïl–1Ýk:|4»¤rI=œ\(pJrçÏ Ï\܃_×®õ¹<;Úlz…»Ìe¾kGh¤XÒÙð°ù ©?kQ“#«'6A-¼mÞ¾lôkTûC¥Íü¶ñÙR|6÷`2DÈ$òÊÏ©ê0øSÆÑ&i©XÎÓÊ÷%œ6×BF‰R6,dŽDÜX‡8lÁÆh.ÏÇz½Ý¾‡œsÙΖê^\V‹‘À‘¦ÜÄØ89ÆðI(Zx»Uk RÔVÒ;OG–æíVGQ+½¢B…LŠ®Yæþ-»wÞgn²? x~?ìóý‹c$štQÃg4Ð,’B‘ýÀ®À°ÇQÏ^zÔ–Ðh:…¼–ö±i·0Z$šsÇ£¬+……T=†G€9=3ÄÞ)Õµ„ÑvXé·Ð}§í2]Ù7ùkjëˆã¸!2.¿ç£ýÐxÎÑ©qâ¹®¼§êšq´ƒP¾M9ü‰ó0n¥HÁeR…€Üø9\”>†·4ý GÒ1ý›¥XÙcv>Ín‘ãvÝßt»>»WÐT‰¤é±¢"iöŠˆ‘"¨…@U‰·Dc•Ây okÑ$Q¦™îîÖ >Ìûbho᳑Ù|̸s1‘TÙ¤¿Þ­ $½×ö—suº¦›pbX-oåÓc»ýÜ Œ¼ªg €Ì¤Håvnj¾Ñõ›guc“æ‰HX“æýòNêrUÞ5.?‹¿<Ô’xkA›K‡K—DÓ_O…÷ÅhÖ¨bFç•L`™¹¹õ ÃW¨øWH¾{‰.æÊši"XÚBÈâŠHRsœ@è jU=KVÓtku¸Õ5 KÂ,—S,J[à gœ{¹@Q@Q@âè*ÊÕhº ²µ(lÄ‹þ?/¿ëªè¨êz‚/øü¾ÿ®©ÿ¢£©ë9îØà>1ÿÈŠŸõúŸú.ZùÆ¾ŽøÇÿ"*×êè¹kçúü§ýÎ>¯ó8*ÿ_#×>Çîÿ_P9+èŠùßá§ü~éßõõ󒾈¯+9ÿ}©ê¿$iƒþùþlŠän‰F3ûÄ=3üCØÿžã¨–¢¹¢QŒþñLÿö?ç¸ê%¯,ê Æ×tKmNÞâIå‘U­Ìr ØQÔრóàsÍlÔ¨%±¸Œ‚CDÊ@ÎyÀÿ#ô  ún“šÒ²M4¯.ÐÍ)àg€=M3Ä1É7†µX¢¤‘ìæTE,J;šÒ¬ýiM=QÔ2=Ä Êà ƒ*µ'ª°- ½ŸSC0šÆîäðH§>§Ò«»Þ\ˆã³²¹XÓœ$NÄž2sjõ[´‚)£K}7Mup¸f¶_â8ì´Ù-”Ù^tý96ÚÎÊÐÛ€Á”qÇùé^sË¢þÓ:Ö.K¡«àTž?Ù ˜¤ŠbÓ1I« Êädb*õ—†´5$K MµI7u‚Õ3#nBp9*܃Øò+R³ÿ·tíìí[í?ùòûByßwwÜÎï»ÏNœ×¡òÅG±Ë'vÙ%þ“¦ê©³QÓí/¡M·¬ƒieb>`x܈qêª{ ’ÆÂÏL³ŽÎÂÒ KXó²#¢ä’p£’Iüj¾¯­éÚ ªÜêWD-¿ ±›îDò· DÏᎤ ¸g…nÝ¥ŒNèΑ–™T€Ä¤Ê í¸zÕ’Нogw,‘[]Á4‘¬Hä SædäŸ2:ýQ‡PjHç†g™"–7x_dª¬ FÚ èv²œÄô%Q@Q@Q@Q@dÍÿ!›¿úô‹ÿCzÖ¬™¿ä3wÿ^‘èoCøXuF>…þ»Wÿ°ƒÿè ZgþB:wýwoýõ™¡®Õÿì ÿúV™ÿŽÿ]ÛÿE=eˆrØÛ¢Š+QQ@Q@Q@Q@Q@Q@Q@Q@ö™ÿ «?úàŸú©cÿ»Ÿúçó’¢Ó?ägÿ\ÿA,ñ÷sÿ\âþrV2ø˜ÖÈ–’ÛþCp×´¿út´–ßòƒþ½¥ÿУ§Oâ lgø§ÅßðŽj:}ŸüJ“í‘M/©ê_c|³ÚË}Ì|ÌãŽÕËi“½¬R »iî"ÑÏk ï"‚±LàŽS¹FÆ`IeË“XÑõ+­fÇTÒõKIímç·eº³iÕÖV‰²6È„aÏSYv~þΊ>ÓQÿ‰BËiq,RÁºv’ÙaXöÊ*©û<[BOÏ‚26ê#BÏÆº õ™ºŠêu„ijFg³š:1•Ðr]Ø—AÕ—2xw^:ôºÃ,RG¥è·„Ko$ò!—I`wHØàq©ËîÓ4Q¨âMOKX¤0dI"Im";.ﻺÕr ä† 0#5©¤h3[C«®±qi¨>©qæÎ©hbˆ¯“;63¾AXùÉç'й­êØÚ<÷þO›åm-±sÞ탲5ÎçlªàãŸcâ`úz¥ìpK ²˜ám¦ÔÑÀÏ9Ž G!ùp09ÉÅhfýƒGûŽ›³ýJý—t1å²ß»FN¹n„rsÏCÍÞxkð÷wšmÝä÷ =ÄwºišÉ˜Ça–&UÕa@»c|½œÔoè"y!Žê{†M€5µœÓ$…‘dU‘‘¶8}¨IÛ–Æ"¾›ã;+½kP²–_Ü¥ÜQYÝEo#A"I2&éÀ1îf”…†r€HÍ} À¿Øé‘ÿhùßa»Šç>FÝû,žß¼qœoÏ?Ý÷ªúG€¯4»X´æÖ`›LYl®$ŒY™¤¶Š\Iæ ZÙ„à°ÏFE®µey¨ÏaN—Pî%'¶’áN£. H ‘–L¹yù†iÜø»G´¿¹±’K¶¸¶q¤V3É—(® ¡û9UÉ –# HÃÓ|q¥j3ÞÙêV0]>{8nâÓ¹wÆV{‰ ‘<€Æ %WqfôvL3#¨³•ä ŒìIÅý‹_–Ç[¾g×ÅŽ”fÑ”O:îa5á„4yIJykm¹d Ç€ã$ƒr8.&ñž÷qk/©Ã¬]¼ÌËrm×ʹXJÿ˸;•ù²H?1jìĺ w–ï­é«=ê#ÚÆ×Hus„(3– xg=ª½ïŠtÛoiÚWV“êW)m–å|ØA$»Ù98ùs¾{ ãÔ†©4’ÝÚ6žS@¶Ì²«qËIæÃïpuñÏ©ÚOEø é—r\™ìüÛÈÆÁ Ì%”n%–DÊg ú0Ï¢V߉¢±×“J¸Óîã2 xnYáX¥d1¤É¸Ó§pBî8ŸŸL¾›ÀÒÙ¤wp\?ˆÌªÑÅ™­¿Í”ŒùòAääQ­é®¥o:ëwr½¶™{:ê7Æ8b‰Ö[I9^$@"o)· d§™Ï§Qgâ]P·º¸²ÖôÛ˜-}ÌÝ#¬+‚rä(““è}+=üS êwÉ.´Ûý.{+¹n®Vå$#t~«‚³ääð#ž +ÍJ׺–½5¥ÝÅåÂKšÛƒ¢„TH%ª&åýã>2ÇÙé^*ðìO –1ãìV·sÍ¥ÜK+\Ík:=Ã0ò“3ÜÆä`’_ËÃ9sâ6 ]x‚ ˜ïtûkyn –޲XÁ,ƒ‚~R:õªðx¦È%áÕc“E{4ŽI—Q–% ŒÊ½“ Èêìåy# »CâÛCsÙ’çɲ‘¥ky'(ZêH‹2`‡sK¢¨¤8ŒÂªw9"ž™wâ+qÜ÷&¡&Ÿc¡ouÜ$ÐDÊþ\ÌÓ?—0bY™¶Ä'+ÀP:Çñt?ð“Øé6ðÇqâ@ñÝÇ8*VXî¤#½sÏ™žÜ—%²þÛ{[&í¢°½ŠØê,±4PÜJˆ(ßæd‹…MÁ1óœœdÐ}n”ТÐm³+Û¾š’_ I4Mr©'ïP†.œŒ`8=øäõc«i¶Q4óë‰i=ÜÝ2ÍpÏåGª[ÃB uf·iɆ—%Žöæ½2=[M›T›K‹P´}Bß-¢Ì¦T^9dÎ@ù—’;ZÇoè:•ìñ]i·Úy·žò[ŹI"­Þó@#ÍWÉ#nÐ{äcÚÎm¬®¤tñpÑéz‚ØÉuw%!gFYRI€yV^dB0ƒ<¬õ¶šËºE¥Å¬v“Áe r[FÅ–T $± ŒäôêzÔš†§ö;Ë 8¡óî¯%*©»#QºI‚Bœ`»Æ¤®ìŒ½ÆvZ²Y¼öwzb_[­Í›_4@\FÌŠ ì‘°wKÚÛI2ç%Ÿ}®èúdRKªØÚG¢yî0²’xb¤6:àç¥I­¦ÍªM¥Å¨Z>¡ o–ÑfS*/²g |ËÉÇ­\¢Š(œ]YZ­AVV¥ ˜‘Çå÷ýuOýOPEÿ—ßõÕ?ôTu=g=Â;Æ?ùSþ¿SÿEË_8×ÑßÿäEOúýOý-|ã__”ÿ¹ÇÕþg_âËäzçÃOøýÓ¿ëêç%}_;ü4ÿÝ;þ¾ þrWÑåg?ïµ=Wä0Â_?Í‘\Ñ(Æx‡¦ˆ{óÜuÔW#tJ1ŸÞ!éŸâÇü÷DµåA\GŽîní¬µYtû+K«äÓÁ€\rc8›æv8wÈ\!7s]½PÕm,¦³žk«Xe1ÄÄ3Æ‚xè">´Ó°š¹“á¹æ–æäý†ÆÕ¼¨¼È­f-ïÈ;q+ÏÝ€=ëKTiœ^dq¨ûM¾v¹<ù±ûùü‡¯mí-­ kx¡ É \þUSZ–Ö+n¯íì”ËInÞ¬HÏÝéŸZOPZÞ½wžåÖvD±3‰;þè㓞r·=cÄ_Ù‘,rC,y7_8ßì›±ï]»%ޱ§KfÞ!ðîi¬€:•`ÊFd#¨ÆAlö£Tð²–}ßiŽHí‡ñã5ŒÜù•¶:é{JM«Ë¢nÈö]#U¶ÖôÈu 6& Û¸`‚#ÔGá\扨Ϣøz é—×õ¥£O³J°ÝÜ*gûNÃï[-¹›9˜ÊÖLJ4tð߇íôó3IåežFþ&f,Çó&´¾Õ÷ÿCZß¹Ï+]ÛcÅuK-v÷MÔ,¡®¥h‘I$&M:ö"%{ B6í.ò|Ãm˨3Þ‘®iwº‡Œ´y-o¯¬#‹O½uim‚Ò[a ‘Fv±è Øpp t_j‡ûÿ¡£íPÿô4]yLšå„„]k)l—ð-nI¼&÷Pf­”4%Á̈¸fU•‚,u 1¬LÖZÍž¡vöS<1ÜÜ\*Ùˆí#¸E%puÜ?~våz©¯FûT?ßý j‡ûÿ¡¢èFµÔîüQjã\‹Ãñ}ª[e¸y‘¤Uec/ïÖý €ä1P@Ìd©ÔðªjRÞÊ.¯džÓIGÓaJÍö¶ –BxwTX°Æ%ûHÆ1]JJ’gaÎ:ñI Û!H"Ž$.ÎU(,ÌYËIîI4À’Š( Š( Š( ²fÿÍßýzEÿ¡½kVLßò»ÿ¯H¿ô7¡ü,:£Bÿ]«ÿØAÿô­3ÿ!;þ»·þŠzÌп×jÿöý+LÿÈGNÿ®íÿ¢ž²‡Ä9lmÑE¨‚Š( Š( Š( Š( Š( Š( Š( Š( {LÿUŸýpOýT±ÿÇÝÏýs‹ùÉQiŸò ³ÿ® ÿ Š–?øû¹ÿ®q9+|LkdKImÿ!¸?ëÚ_ý :ZKoù Áÿ^ÒÿèQÓ§ñ¶1üY}«Çâ"ÃL“UÍiu4©¦-§˜Å¤›Ÿ—hó§9#°¨ôÏ\ÝÙZ]µ¥¤öaì­®îà™Ð™îS L™1fâ>]•€Ýò’£wAªøOÖn-î.þÖ³Û£¤RZÞÍlÁ\©`LN¤‚Qz Œx[F[Ènc³ò¼­…`ŠWH @3B¤FÌ¡Sk$lLµq¨Ž~ÓÇ·¦i×WÚ4É«ZEs§Çé”7™$…•Œkåü×1d¨~7ž Ððæ£~dñDÚºl’×Pȶ–K¥¥»mäVlä¶Ð¿yŽ<ð¶ŒÖvv¦Ï÷6VŸc¶W(³[9 1ùÜ 5&‹¦išP½ƒM’Gv¸ßte»’âO7Ë@7´ŒÌÁ=1ë@ß^Þj’ëDIÒwÆÁ4‚‡ö¤ÀbM¡¶oKm'åÍaé¾ Ô×HµK½CX/3͵46æÝcXIRöÑ21"x˜`²À®Úë/¬¢Ô,äµ™çHß0Nð¸Á‡BtìyéҲτtsn‘îÑÑÙþÓôépÅ€táÄŒTf#ƒøúŸŽæÓ,®õ&Ò£}=ö fDK$ÖÉ38tÙ„Cöy@`Ì~æTdíÔ‡\Õ.uhôø´ˆ#š8¢¹¼[‹Í¦¥’EM»ƒÉˆœ²ä(8ØÂKŸhwotÓÚI"]$«$&â_(yŠVFH÷lG`Ï—Pï~~c›—Z-•æ£ü‹:]C´‚æHw…9U#"‚Nòæãæ9áô?ê–ÞðÌ:¤éÖ–2Asçœó!šÚ)_2/•Ú7g/ó)I ø¢m^âÅg°ŽÞ Nɵ Kƒ#4 ÇŸ5J(ñ4|)q÷¾në‡ÂÚ1ƒM„ÙþïM‰!´kþíâ‘G^pÐDyÏÝô'1§„44·»·û$Õ»Ú´oq+,p¸ÃG,D(FØö•º¸Ï¹ñ^¤šíΛi¤ÚJôiöòË|Ñù“}™nNð"mˆ#.‰`Ð a_OñÜÚðéQ®Šn,íü÷º"ãuÌp4gÊ ·Ü ?¼èŒàÒbißnûoÙÿÒ>×öÝûÛýw“änÆqþ¯åÇNøÏ5¥xIÒï¦<÷‡Í…í­MľL+1D€Æ\¤Œ Aƒ²îou€ 2ãV´ñiÓ/ï§¹ŽkI.OHŽÊÑöq̱¯šC ‰o¹´°ÕÔV^›áí3I¸iìà‘\¡Ï$‹  H•˜ˆ“…ùP(ùW”cR€ (¢€ (¢€ (¢€ ¥¬Èÿþ½¤ÿÐM]ªZÇü/ÿëÚOýÓŽâ{h¢Šæ4 (¢€ (¢€ (¢€ (¢€ «©ÿÈ*óþ¸?þ‚jÕUÔÿäyÿ\ÿA5Qø¥±wĺlÚÏ…u}.Ý£Yïl¦·¤$(gB œq“èk—µðŽ¥gu¥c§hÚsÛ\G4:E¤ì¶®Â)ây ‚%Úì·8Œñyù:êShÞÕõKu§²²šâ5¥‘ pAÆG¨®MñʼÖ×°ÉrÏÚ¥½ƒØK3ºÊÅ<›—Ê…X]¼Æ`­ó*üÈAØ’ºx+RO‰àií<ýgL’ÛlSI5ä¬ Û’Šn•Cc'i;GJ¹oáíbßXÓbÙbÚe–«w©}£í&=n>O+ËÚ6µÆ3¼ä&p3#xúÉLìºf¤ðZ[ý¢þum²Q$±¸pdÜÅ så‡Îß—vFKOsâ-ÒÂÒí,&Ôç´šõ„^TÆ8.7F£q,]v€vÜÐG¦A©6¢²]™åMŒw+Dv"Ûü£ õõ9æõŸkö±oy2XÚÇc,bÜ%ÃÈgívÓ³6c]ŒÛFàKýàOI­¦ÍªM¥Å¨Z>¡ o–ÑfS*/²g |ËÉÇ­eÙø“þ$m¨ßGÿ1Y4õXþŸZÚ2rÝ,~¸s÷^¿·Ð|;ºXMJHäT?›,RÚLB©b­öV\…,7—…õŸÜ_ë6ñØ îX¡3O>Ó§²áŒi,`›)±@ËÊ`x¶î[iÚtÒBÜ%½ÐhЇf¹Ó¹Rrqå]ºöäŸ@hÖ>![ù—zv˜$:¥¥íºcšÚVž?¶E  ‘„d‰â_,üückm¸žº>ñ”/µx§kÙî‚»Â"RóK—~y ¸nl¹< { [ˆ,4Ý,CqÑiZeô¶ð;,sÆÒyñF°sµD ¤ß/I‹ì"ö)ôÙÎý°Æ©nñ¢JQÝX¦ã‚A´Ÿ•\’ ,]ø,ü9o¬É§ß?ìá,Ê*NgDT`ÌX3€rÜsÍsz_‚/lwÖµ=f9÷]I¨Gymm%Ì¿f•R£ ,t6ô,®™JÆß6݆I<}eE›LÔ¼Æqâ-ÓÈ'KyO™´æ•‹ª—^jK¿_ÝiÓO§ÇýŸ%œ¾Uôwv2^ÍŒ¨"·Ÿrȯ¹\íd¶À ½GÁZ–©e>‹,öiÿh¿ºŠñ]žVk¤¸]Ð/Ú›æùc»å¹}áíc^Õ´íGPK ¬"œB°\=ÒKwZ8è1>Tà••ƒÉÒi7­©hÖ7ïq=ͼs4q̳*–Ppxp3÷‡¨«”ÏÞÃy¹¡kÛneŠ[¨ &Aå·˜e 'ÝI¼íkÃÀ#Oð†gùš½¤VdÉ=ÜÓF^ "•£Œ¹>TnÑv(À v WqEyüÞñ%ÅõÞ§ØéúµÍÛ¼wvÚŒö8ÚxîÚ“äÁ’Ž .™u,ôm{N½Ö&ÓžÒÖÞT¸’ÒÎ[§¸Š[©¸™òŠðŒçtḩy#ÝeŸyý±ÿ±}‡þ=Ø|íÿññóçÌÇü³ÿU÷yûþÕ¡EN.‚¬­V‹ «+R†ÌH¿ãòûþº§þŠŽ§¨"ÿËïúêŸú*:ž³žáŽãüˆ©ÿ_©ÿ¢å¯œkèïŒò"§ý~§þ‹–¾q¯¯ÊÜãêÿ3‚¯ñeò=sá§ü~éßõõ󒾈¯þÇîÿ_P9+èŠò³Ÿ÷Úž«òF˜?á/ŸæÈ®Fè”c?¼CÓ?Ä=ùî:‰j+‘º%ÏïôÏñcþ{Ž¢ZòΠ¨®†ë9†3˜ØcϘ9üÐÔµÐÝg0Æs c9ãÓ?‘ú–¹ˆS,M„®¬Áo ×ýLµÕ\ç2Œç ^:û{ûä{çøŒ¬š5›]¿Ó8~êcØ{ãðù@q¯©ØÄŸ¼Óu8Îæw×Ü~u›«Û\XÜÃg ‚W@£Îí096ùñœ6ÒrîGIáû‹Ë¿ZO|ì÷ Ÿ3²à¸ B·â¸9ïœ×'aàqcá.Í_~¥mö6Y®¥•C,RH±o'b·—÷T(8L‚v¸ÑÒÅ­é3Éq:”’[J°Î©p„Å#6ÕFü¬[åòOj½¦¥êWîþlztO%ÂBC:íO0®3Ãm €qÔz×'…µ¤»¾Õüë¨áÓ.bi­/¦žæyKDë,0ºìóeT$*Ý·eðýÜÞÕ4Ç’ªêv³ý¢mÇË7¡æÆí‹«HDQÎ*,†lÜê6Öw;‰$ò%¸id‘Q#+¸œœãç `c’23FÓÅz%þ®šm®£k,ÒÀ³ÀÉ:2Ü)iˆðrÅLM»Ž=ñ“ªèz¾¹4WúvŸ¾%‰m¢Õ&@Ìf¶‘L±+!<¡yäâÞ¤ëZ~¨——×PßÉsj]ÊìâòÞgM¡c 'úà„â?¹»6ÐØXÿËOÃúÕº©cÿ-?ëVëXl&QEP‚Š( Š( ²fÿÍßýzEÿ¡½kVLßò»ÿ¯H¿ô7¡ü,:£Bÿ]«ÿØAÿô­3ÿ!;þ»·þŠzÌп×jÿöý+LÿÈGNÿ®íÿ¢ž²‡Ä9lmÑE¨‚Š( Š( Š( Š( Š( Š( Š( Š( {LÿUŸýpOýT±ÿÇÝÏýs‹ùÉQiŸò ³ÿ® ÿ Š–?øû¹ÿ®q9+|LkdKImÿ!¸?ëÚ_ý :ZKoù Áÿ^ÒÿèQÓ§ñ¶9?ˆ1é²ø«@]RïÃöÐ}Šô«ë¶Ë<·ÛpªÒ Œàç n9â¾—â N!§A6¡wm¨#éðC¢ÞÞ{¨$Ž:i7 •Ý<ÉòêUA€å~WÓ(­Dy}·ˆuë=B¸›Yžéµ*+Û™ç†ö!æÚ¬²G±T¹•É8Z“À`Ûž ¸Gâ©ôíR=lO0ÝÉ4agago€^$Ú?.UN1О½¥ÏëköŸN5û›#;LÎn<Ëeăj;8|o…WRpf\óšàÛZŸL²‚ÓDŸÃúN–×—Õìš->ÒíÕ +å³Ç:dù’!^I6ìC.ÖJõÊ(Îìõ}…Æ©wªH ON±}=-Õ-ñ…ã=CU–©5Øÿ´¦¸Ó„zb¯ Ð[<Îi˜…óf|ïÀÙÎB}R«ÛØÛÚOw4ì’îQ4çq;Ü"Æ=>TQǧ®h‹ðÐÒÆ®t)-$·{) ȵB’Å(h°/Kï9&B¦Mޏ˜ıåPEPEPEPTµù_ÿ×´Ÿú «µKXÿ%ÿý{Iÿ šqÜOb­Q\ÆEPEPEPEPUu?ù^×ÿÐMZªºŸü‚¯?ëƒÿè&ª?¶5um6gF¾ÒîE‚öÞKy2u*HÈ#8>†±Ïƒâ‘ÍÔÚ¾¥.¨-I¼‘,AEUUˆˆÄÓ™ ýáç…ÛcÆ“Íkà_Ü[Ë$3Ŧ\¼rFÅYDÄG ƒÎk—²¾Öt}lè(ÑÛÝÞ=¸‰n/'Ô¢·Ü—Ndß!I°¶ÙååUp¬ ,Ë[t à­5l5[O>ìRÈÙÝH]w6ç™ÞAòà;5ÄŒxÚ8@©#ðœkש¨ß {k¹ob°ý×’³J²lìóLÒ6 ààÛxË^hµ‹´:jÁ¡Ù=ÅÔMlå®Ú)î¢pæak‘‘&ÝüîÇ6$¿Ôµ_xvöYmO]vòÖ+e¼Õh`¼‹{K¿-ŽÐƒ€ÉÆHy\Úx>%ŠîÜêú“ÚOp÷qÛ·“¶ÞvŸíD"=Ĭœ€å—±VÄw³¾©5£i—qÀ‰¹oY¢ò¤<|ª—Ï'ªòžzgÊõId1˜¸Xã„màüϺ?Ë4º¥†šßkW÷2²ÚN`–âhü³ .åÚYL¯€ÊO•ÉØnïÆWn‚fÐ4ûé£Ó"¸¸ÔmoÈžhÒ9eL4ïsÆZ À+ç`(ùq´0 XXÛéšuµ…œ~]­¬I )¸¨ <œ:ÕŠâàñ½t‘ª6½Ö.´Û9 O(`k’d‘w.âË] ŒŸqÎÅæôïø‹J´»³±°‚óìÞÞßM¶8ã}××`ÒNžBþåŽïÞà7#åùÀ=bŠãôÏëê6xö2Xßj·šl0ÃnñÉ’n6»9‘ƒä[@Uåóž0cÕüQ©G«ºéWlšx·ÓÙ¡iL­y<#«¬€l]¨øÁÜ2.CÒŠó¶ñ–¼ÑkhtÕƒC²{‹¨šÙË]´SÝDáÌ Â×#"M»ùÝŽu$ßiâý.æßPž{[û¹­¥—íÍ*¼‹Ì`ò8Š%O(~ñ~}Ñí`w;PaEP8º ²µZ.‚¬­J1"ÿËïúêŸú*:ž ‹þ?/¿ëªè¨êzÎ{„v8Œò"§ý~§þ‹–¾q¯£¾1ÿÈŠŸõúŸú.Zùƾ¿)ÿs«üÎ ¿Å—ÈõφŸñû§×ÔÎJú"¾wøiÿºwý}Aü䯢+ÊÎßjz¯É`ÿ„¾›"¹¢QŒþñLÿö?ç¸ê%¨®Fè”c?¼CÓ?Ä=ùî:‰kË:‚¢º¬æÎcaŒgc‚̪BìIèIÓVÝí×O´=ºÚ¼bÚШ!c#(0 Ðn>µNãOðý¦½i¨Ï§X¦¯w)† ¿²©™ÜDÄ0 Ý£u==pÿb×å±Öï™õÁqc¥´eλ˜Mxa q,žZÛnY1à8É ÜŽ ‰¼g¤=ÜZËêpëo32Ü›Dµò®V¿òîÆ€e~l’ÌZ€=±Íÿ†Úòo½(ÝM¿ÍÓ ‘ï“x.û¢êwf9ä“Ö®G¤5I¤–îÑ´ò˜Š¶e•[ŽZO0†{€ƒ¨çŽy?´ÞiºÄñxnVõD·RÜi·V†ÞØ1Y$-òD¹g¸Ø>û®%bh@:Kß h:’F—ú&›t‘¼Ž‹=ª8VvÜädpY¹'¹äÑ}m¢ ´°½³´d¼¸• …íÃ+ÊñÊòqŒÉçdž»˜îÁó½&ÓX½Ö­ôÉ/5Éôcw ’L!Ô,H& Íà¼Ò4»w%¶pû2T`wFÐj’>·ˆ$´d²¿½h饊êKkÕ›o•ûÈÆï Ó »€Ú€wøF¼ñ<ºíäÜÎèWÊ’Ú ¼Çå°ŒHà¡aµÝ—æéÂãbóIÓu/´ûK¤&YáW*1d ‘ÈV$€zH¯3×®^ös7®> õ…ž§g%ý¤v²c|3Æ$FÁeOøV¥¤ø&Ù4Ý/TÓü?dÓí.¡…Afa¸DŒ:–+£’Epí>©n|<šÜ¾ KK䲸½XëÍk©-¯Zd_+÷ŠG1&0ÕçSP[ɼ!qc%–ªu اŠÕ¾Ædûm¿™0·¶¹“ix×Ëx÷4†7ÉÞH@y>“¦ÝXKaq§ÚMg+—’ÞHU£v/¼’¤`’ß6}yëU×ÃZ ¥’.‰¦„°röj-SìX11ñòÀŒr3Z”Pu°³O/m¤ åJóLjÀÙ#îÜãÑŽ÷Éêw7©¨ÓIÓcDDÓí"EQ €«nˆ8Ç*?„ò1W(  3á õã¬Ë¦ZKvFH„,²I.ôùr®Ï+3y ¼ô6RmR->Ñ5 “d·k ‰]xáŸ#å^ ì=*åQEN.‚¬­U‘¾D^3ó0,w6ìÁVx‹€8$ÒQvØFL_ñù}ÿ]SÿEGSÔÇå÷ýuOýOYOqÇc€øÇÿ"*×êè¹kçú;ãüˆ©ÿ_©ÿ¢å¯œkëòŸ÷8ú¿Ìà«üY|\øiÿºwý}Aü䯢+熟ñû§×ÔÎJú"¼¬çýö§ªü‘¦øKçù²+‘º%ÏïôÏñcþ{Ž¢ZŠän‰F3ûÄ=3üCØÿžã¨–¼³¨)Ddu ¬0TŒ‚*®£q-µ¦øv XãRêHÝW$3ŒúÖkjèpn éŸ—Osü¤  ƒknÙÌç9AÎsŸý ¿ï£ëT5è£Ãš³$j¥¬æÉùXÿ2Oâjœºž¡¥ÄëqnÞLM&Ö²tÝ€N2dö÷­é#I¢x¥ExÜeaÀõw-ÄõG•階qÏ9ô­ë»ß3Ã×ëžM¬£§ûºoøG´Oúéÿø ŸáGü#Ú'ýôÿüOð­H¶f¡+X<=ÿ"Ö•ÿ^pÿè’–íªÉos»w6—gww0’òÖÓS¿,Y&¶t@,k$‰˜ ®˜ì#¯Óµ;-ZÎ;» ”žTpW¨ ŠëyRU”ààá…O ñ\!xeI3!d`@e%XqÜAˆ"¼£Nƒ]¶ðí¼±jîbX-1VêßÎ"ÊÕ@ûD_ê¿›Ãü…‹nÁ]ËÛøNÌX>­ ‘Þ¥Û_ÜM ˜ÊaÙ$ò¼f-ß»åòûŸ›šJ?h’ÞKg±§½Ô-²HVå £o ‚¹È;ÙW¤¦´«Ï£{ècµ±Ð_Z“J†[E)udöíj‹uXã-;¡‹ÎÞ[~ ÄdþãK’ãOŸÄpÍuÚ­ï!Ô&{{p’íÆYewi {ü–Âü îUfrÀz…Fg‰nÝ¥A3«:ÆXneR: .OmÃÖ¹ÿ¥Ú.”·³êsL-nq$˜¢)æÇ³ÌVf`ûvìÞÅöù›þlŠ.–4ø¦L¶sy¦\Ã%ÊZ9Nd‰£F”.Ñ÷% ÆÚ,ͦ©§ßÜ\ÛÙßÚÜMjÛ.#†ev…²F•9ƒèjÝršBùþ)†kk;Ø--l$·0\Úy bÅ¡(HP²+ylI@<µÚÊ ÕÒc (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ «©ÿÈ*óþ¸?þ‚jÕUÔÿäyÿ\ÿA5Qø¥±««jPèÚ5ö©p²4Vò\H±€Xª)bHÀõŸŠl‚^V94W³Hä™ubP±Ę̀ûÑÙ0ÌŽ nÎW23cĺlÚÏ…u}.Ý£Yïl¦·¤$(gB œq“èk—µðŽ¥gu¥c§hÚsÛ\G4:E¤ì¶®Â)ây ‚%Úì·8Œñyù6$êĺ w–ï­é«=ê#ÚÆ×Hus„(3– xg=ª½ïŠtÛoiÚWV“êW)m–å|ØA$»Ù98ùs¾{}<© 'Äð4öž~³¦Ií¶)¤šòVíÉE7J¡±“´£¥\·ðö±o¬i±l±m2ËU»Ô¾Ñö‡?ž·'•åíZãÞr8Àì+Ï^:†¢ÐZéWÒY¬²Bu Â!eq´ÉæpêÉ÷9##åùªäzdj“j+%ÙžTØÈ×r´@q÷b-±OÊ9 _SžO[ð…çˆo¯‹YiZOÚ"¸‚MJÖC-ÍÔo ©*ùiòÉ&7°%Œ:øK<7ýý£ÿ •ö7ÈûOÛcòüÌnÙ»8ÝŽq×r][M…çIu HÞÝæW™AQU˜·<²!$ô§¸¬9­|I.£e¬ÿgéBúÚ)í~Éý¡'–ÑÊamþo‘Àû0CgpÆ^™à´òÎ)m%»ûF,7 –Î;`©!Á*à~›¶‰3‚r(bßÇ Ƽ4ÕÕtÝ“[Ã-œâõºi$–2‘ŒüÅZ 8'–Æ9Ð"ÒÛ¥Íý¥¬·7Û[Å5Ìa¦tÆBÇqÝŽ# @ÃÔ<=¬k~$k”±¶ºÕ´EÓãŽ;‡•#‘MÏ%Œjvâdçn~ðÇœù<¬%¶·k ؼzäW6·<ΦÖ9.n¤WU|ÆÛuÊ’€Æâ °Õ¯ô}2(/5›»Hã—÷^H‘…«•›£.8ç»f£ŸÄº ­¼·Þ› \Y$’éR`2c$œ½j½î›©_kuÄ­h-ì53qRÛÌ&ÒH°Üc›#06ៀ ëÚç…&µ·´½žÒÞÆÉ×ÎtZ [åwg±T&d vòx dPa©x¢ÛO·[Ä´»¼ÓŸ»šúÔ#A 'Ì,XoC6#Ø™wnWwámb}é^V•/Ú%¸ºûC»‰4Û‰¥–O6°ùŒžnþèå3‘¿ ÜPEPEPEPâmtyI •í™Õe•D ¨Á#¯\úð =ZTÖš+xÝíà•í#óÊ\qÏÿ[;…±–iC£´r(VF·‘Á@ íR?ÖªéÚrY5´VðºC ±­´£¡ÏVP2}I÷5ß‘Ï+ó´ö/ç±êLgÿ ÇWj¥”M —17ÞFOÔC«uåÔø™Ó Žãüˆ©ÿ_©ÿ¢å¯œkèïŒò"§ý~§þ‹–¾q¯®ÊÜãêÿ3‚¯ñeò=sá§ü~éßõõ󒾈¯þÇîÿ_P9+èŠò³Ÿ÷Úž«òF˜?á/ŸæÈ®Fè”c?¼CÓ?Ä=ùî:€\£c /8ë¸öÿh~¾‡ÈÝŒg÷ˆzgø‡±ÿ=ÇQ-ygQ©È²ØÆT0j¶ûÈWþZÆ{ýk*â¤hÛÍ„üƒ #&[ß•5±«†6ª;ìž!±ÂʤàOÖ=Æ¡h$K‰âÀÆÖà (²Â‘èÚ™V‰¿ÑdÏ–TÿuйãIæµð/ˆn-å’âÓ.^9#b¬Œ"b#Aç5R[Û["ò fºžy`t\[LA%Hæ¾µÑÏ7VòÛÜEÐJ…$ŽE ®¤`‚Æ(X¿Ô¿¶lt.[Kyîmçºk‹¨u D»+¡É3»wHÁÎG7iãMcVÓ­õ›4±µ±zu´Ö“BóHÿiÌ̲‡P»EÈ<¦‹¨ÿ„OÃÙßÙßðé_aó|ÿ³}Š?/ÌÆÝûqØã=qUõ_éšÏˆlµ›Ñ¾k?,ÆžD?yº0§š0Ä+…8Á ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¬™¿ä3wÿ^‘èoZÕ“7ü†nÿëÒ/ý è ¨Çп×jÿöý+Bfxî-'H^Q¥™P€pQ—¹©Ÿ¡®Õÿì ÿúV½`ÊjäŸÚíÿ@ÛÏÎ/þ.ívÿ mççÿQÑWíarù’k·ýo?8¿øº?µÛþ·Ÿœ_ü]GEÑö_2Oívÿ mççÿGö»Ð6óó‹ÿ‹¨è£Ú>ÁËæIý®ßô ¼üâÿâèþ×oúÞ~qñu{GØ9|É?µÛþ·Ÿœ_ü]Úíÿ@ÛÏÎ/þ.£¢hû/™'ö»Ð6óó‹ÿ‹£û]¿èyùÅÿÅÔtQí`åó$þ×oúÞ~qñtk·ýo?8¿øºŽŠ=£ì¾dŸÚíÿ@ÛÏÎ/þ.ívÿ mççÿQÑG´}ƒ—Ì“û]¿èyùÅÿÅÑý®ßô ¼üâÿâê:(ö°rù•ìcxtûh¤t‰U†zjTŒ¬²ÈXaÕünÏþ„)ôT7wqØ(¢ŠC ŒAÜ=ÂÄ‚gUF(Üʤ•õ lÛ­IEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEŒªèQÔ2°ÁdKEUþ̰ÿŸoûô¿áGöe‡üøÛߥÿ µEW4»‹•³,?çÆÛþý/øQý™aÿ>6ß÷é­QG4»‡**ÿfXÏ·ýú_ð£û2Ãþ|m¿ïÒÿ…Z¢ŽiwTUþ̰ÿŸoûô¿áGöe‡üøÛߥÿ µEÒý™aÿ>6ß÷éÂìËùñ¶ÿ¿KþjŠ9¥Ü9QWû2Ãþ|m¿ïÒÿ…Ù–óãmÿ~—ü*ÕsK¸r¢¯öe‡üøÛߥÿ ?³,?çÆÛþý/øUª(æ—påE_ìËùñ¶ÿ¿KþfXÏ·ýú_ð«TQÍ.áÊŠ¿Ù–óãmÿ~—ü(þ̰ÿŸoûô¿áV¨£š]Õ³,?çÆÛþý/øQý™aÿ>6ß÷é­QG4»‡**ÿfXÏ·ýú_ð£û2Ãþ|m¿ïÒÿ…Z¢ŽiwTG Û¡HbHÔœŠÏáRQEHÆ?ùSþ¿SÿEË_8×ÑßÿäEOúýOý-|ã_c”ÿ¹ÇÕþgŸWø²ù¹ðÓþ?tïúúƒùÉ_DWÎÿ ?ã÷Nÿ¯¨?œ•ôEyYÏûíOUù#Lð—ÏódW#tJ1ŸÞ!éŸâÇü÷DµÈdŒ(áÕ¹Çf¸>ŸýqÖ5ÇŠ!Ó8ŸLÿûßõãË:ŠÚ¹a`»¦ùáBQŠœ4ªäpMcJ¾[€«tÃÏÛ.¡5­©™ Œ~bªŸµ[p­»þZǞþÏ™q¾èÄ‘…>XÂâ.§4Á¿³¯eSw‘@îö»ŽRG @<ë]<óÃko-ÅıÃH^I$`ªŠI$ðæ¹ÙR¢ê†?ãÖLýÏî7÷­Zñ¤]xÄ6öñI4òé—)q©fv10É$ñŠÐÓum7Y·k/P´¾\£Ik2Ê¡° RFpAǸ«Ï ­¼·Ç !y$‘‚ª($“ÀsšâõkkZmÍΫ;Í{v–÷²iP½ª-¬p]2«eÜŒ¼¸-¸uM»X¬}rÇ[Ôíu[ hõY5{¯ínRV”Z5£E8¶_ý1&×î|ÿ{wü´ P¢¼ßTûO‘/ö_ü${³ÿâE»í»¾Ý¾mßhßÎÜýŸiù6ç.ê±7Û¼½SöçöÇÚÛÏÙöŸ'ìk\ù;uæ}—ò¿{œãçÍw}o£ ƒI‹©¢’hÓiù‘ 9éÁ‘??cRC<7(^ c•²F +aÇpÀ‚;Epþ‚õ¼cÀ‹R:B[Þ¥”—Ë/˜±·ØNËûÀL«p@“’” ŽÞîê?jZ]½¶« äz­ÌÓ•²ž=Ö¨3Hb“h Æb¾[çåù€ @¢¼Ý~Óç¶ÂGÿ·›?Ù|¯¶ý¯vË}›ö¤íßöÏ¿òýÞÞ]už žk¯øzââY&ž]2Ùä’F,ÎÆ%$’y$žs@”QEQEQEQE“7ü†nÿëÒ/ý ëZ²fÿÍßýzEÿ¡½áaÕz+È·¸HAö÷å]ð'÷˜V·™?üùËÿ"ÿâë7Bÿ]«ÿØAÿô­zÀ²/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4/2ùó—þþEÿÅÑæOÿ>rÿßÈ¿øº–Š4Ïþ1n>Œ²”&õ>RA#÷rú+ç*ú;ãüˆ©ÿ_©ÿ¢å¯œkì2Ÿ÷8ú¿Ìóªÿ_#×>Çîÿ_P9+èŠùßá§ü~éßõõ󒾈¯+9ÿ}©ê¿$iƒþùþl(¢Šò΢¦£o-ÍžÈvXäPì@;[€qœzVdÑê¸Óû~ïP*?ô[ÔP ê·z|ögO‚–6{Þ+¸Ÿ¹Ï_ZÞ¢Š(¢Š(¢Š(¢Š§©i:n³n¶ú¦Ÿi}¸uŽê•C`Œ€ÀŒà‘ŸsW(¢€ (¢€ (¢€ (¢€ (¢€ É›þC7õéþ†õ­Y3Èfïþ½"ÿÐÞ‡ð°êŒ} ýv¯ÿaÿеë#Bÿ]«ÿØAÿô­zç,(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š NïQý¢ùíýô)eªƒÈ.€ÿßB¯SJâ(}¢ùíýô(ûD?óÚ?ûèUúd’$1—s…Ùú;Ÿj|¡rŸÚ!ÿžÑÿßB´Cÿ=£ÿ¾…[†e qóÆÈ"IG(\¡öˆç´÷УíÿÏhÿï¡W裔.PûD?óÚ?ûèR¬Ñ;mYŸ@¯U{À ‘ÈtÇýô(°\eS¾Õ´í1U¯ïmíUŽš@€þur³4À§ÆÚ£²†h¬m|²GÝÜónÇ×jþTáÞ¢“¶Äð—øoþƒÚoþ§øÑÿ †ÿè=¦ÿàJuži£Í5|°&ò9?øKü7ÿAí7ÿSühÿ„¿ÃôÓð%?ƺKJÞÖ{Hf“l—r˜`'{„g#ŽŸ*1çÓ×[êV÷SÝà ›¤´”C8Á¢¸õù]O¾¹£–y×ü&>ÿ öÿ þ4Âcá¯úißø¿ã] ž­íÖ¡o¸{o)`0XÄ’ey鉮9ëW<ÓG,ò9/øL|5ÿAí;ÿühÿ„ÇÃGþcÚwþ/ø×[æš<ÓG,ò1,µ =J:Êê+˜³ñ8eÏÔUšÌŒ(ñ–­µB†³´v»œõ¨üiÖs+²*.èŒÏ’ ¨ê >ÑüöþúfÐg2€þ”Û{Ø.±å3r»—r2î£ dr:zZ,;}¢ùíýô(ûD?óÚ?ûèUú(å ”>Ñüöþú}¢ùíýô*ãÈ‘´jÇFÚ¼u8'ùA‘Ë?;)`1Øc?ÌQÊ)ý¢ùíýô(ûD?óÚ?ûèUúnâyü¥ó²FáÈëócÝzñG(\¯öˆç´÷УíÿÏhÿï¡W裔.PûD?óÚ?ûèR¬Ñ;mYŸ@­I2Äñ#™_bã×inj;À ‘ÈtÇýô(°\eQR0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(€øÇÿ"*×êè¹kçú;ãüˆ©ÿ_©ÿ¢å¯œkìrŸ÷8ú¿Ìóªÿ_#×>Çîÿ_P9+èŠùßá§ü~éßõõ󒾈¯+9ÿ}©ê¿$iƒþùþl(¢ŠòΠ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¬™¿ä3wÿ^‘èoZÕ“7ü†nÿëÒ/ý è ¨Çп×jÿöý+^²4/õÚ¿ý„ÿ@J×®rŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( IÑ?ë¢èB¯U']ë€pr>„Ӽ˟ïÅÿ~ÏøÕ&&[ª÷¯vr<˺1ŒÁ{ŒI÷Í3͸þü_÷ìÿñTy·ß‹þýŸþ*Ьfôè !ûD &á¼SK —$c;ÏRyàY·²¸g“µ’9'ä™P×9äí ÿ åþ ÿѧÌ.û€çÆ:¯ýxÚèw«Yúf™%œ×7WWŸj¼¸¬ë”Љ»j…ÜÇ«±É'­hVurШ+-ImãÎúæ¿Ê³a°»ŠÊ4ó¥6†%€ò¯<¨ädy#®N-ÆgŠ0‹"Q¹ 8üéÞmÇ÷âÿ¿gÿŠ¥t)Aa$1I$1JŽŒ²Eùk–È £p;rr!M¸Òå.ƒ÷²~ïÓ`Û!$³üÀ•É åyãØUÿ6ãûñß³ÿÅQæÜ~/ûöøª.‚ÅFÓ¿t®ö¢b.¤•ã8bêKíÆN?ˆqß½Z¹·ó/­ghËeÆ(IRŸM§§<Òù·ß‹þýŸþ*6ãûñß³ÿÅQt Óíd†hËA判ϑû÷ù~nOFå°~osJÑÜ –kH$…²Ä™dÌOÁÆ1Æ[8¯¯3y·ß‹þýŸþ*6ãûñß³ÿÅQt([ØÏœñC*y{$…Ë]Î7O”eH\Ÿ_aEÆ—)t½“÷x›Ù %Ÿæ®I+ϯù·ß‹þýŸþ*6ãûñß³ÿÅQt*¥£Bk\ȳ»½ÏËÊûFs»Œ¨Æ;Uë¿ø÷ÿ§þ„*?6ãûñß³ÿÅS_Δ‘Óh ©ŒãŸSEÐì:Š(©QEQEQEQEQEQEQEQEQEQEQEÀ|cÿ‘?ëõ?ô\µó}ñþDTÿ¯ÔÿÑr×Î5ö9Oûœ}_æyÕ‹/‘ë¿ ÍÅœ‹Ž°Ï ’lBÅT2p+Ýÿ¶¬ÿéçÿ%ÿâkÈ~Û>ÿCµ!æ)Y3ÌpkÐÌ0}¿ìÛ“ý³Êó¾ÏöÖó<¼ã~ÝÙÛž3Ó5äç.ØêŸ/Éaî—ÏófßöÕŸý<ÿà$¿üMÛVôóÿ€’ÿñ5•ý™'ý¯ð%ÿÆìÉ?è%}ÿ/þ5ås#ªÌÕþÚ³ÿ§Ÿü—ÿ‰£ûjÏþžð_þ&²³%ÿ •÷þ¿øÒfKÿA+ïü ñ£™¯ýµgÿO?ø /ÿGöÕŸý<ÿà$¿üMdfËÿA+ïü ñ£û6oú _àKÿ.tf¿öÕŸý<ÿà$¿üMÛVôóÿ€’ÿñ5‘ý›7ý¯¿ð%ÿÆ“û>M®ÇS¾ „‚MËñ€ =z`ÑÎ‚ÌØþÚ³ÿ§Ÿü—ÿ‰£ûjÏþžð_þ&¹ƒw¦ƒƒâ|ûŸþ*µé¿ô4åDÿñTù×`³:í«?úyÿÀIøš?¶¬ÿéçÿ%ÿâk˜û^›ÿCGþTOÿGÚôßú?ò¢øª9×`³:í«?úyÿÀIøš?¶¬ÿéçÿ%ÿâk˜û^›ÿCGþTOÿGÚôßú?ò¢øª9×`³:í«?úyÿÀIøš?¶¬ÿéçÿ%ÿâk˜û^›ÿCGþTOÿGÚôßú?ò¢øª9×`³:í«?úyÿÀIøš?¶¬ÿéçÿ%ÿâk˜û^›ÿCGþTOÿGÚôßú?ò¢øª9×`³:í«?úyÿÀIøš?¶¬ÿéçÿ%ÿâk˜û^›ÿCGþTOÿGÚôßú?ò¢øª9×`³:í«?úyÿÀIøš?¶¬ÿéçÿ%ÿâk˜û^›ÿCGþTOÿGÚôßú?ò¢øª9×`³:í«?úyÿÀIøšª³¥Ö¥w4K/—öx“/&Hv'ïê?:Âû^›ÿCGþTOÿHn´Æ>'zGÿ²¤çuk™kBÿ]«ÿØAÿô­zçRãJv§‰UW$áu žOñS¾×¦ÿÐÑÿ•ÿÅVv(è(®ízoý ùQ?üUkÓèhÿʉÿ⨰Ïý¯Mÿ¡£ÿ*'ÿŠ©­¾Í{!Ž×ÄÎàn+ó1×½ÅjŠÎt¬ŠßÚWØe ?Ò_¸Ï­/ölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠËžÏìÖò\\j÷qC—’I.ÝU ’I8ôAgö›xî-õ{¹a•CÇ$wnÊêFAGz4RŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4BŠÏþÍ›þ‚WßøÿãGölßô¾ÿÀ—ÿ4øÇÿ"*×êè¹kçú âݳÁàØË]\K›µ–V`>GìM|û__”ÿ¹ÇÕž}_âËä{în->ø¢kVtYÆ Ñ¾Ö ”4 õ%—ÀäíÀ䊻ý‹¥}—ì¿Ù–_gßæy^BìÝŒnÆ1œqšŸá C6“ª[ÜB“C41$‘º†WRex ƒÒº¯øA´O7ýf©ö}¿ñïöùq¿ûû÷y™Çwíï·<×Éñ^¦'/g+[ü‘åâòÚØÚTÝ)òò¹~~FŸƒnn.ü¤ÍtÎò5²4¹§@0²“ÔP‘»k–ðÇ‹n¿²¥{¨jÁ¢hê+qf°´/µY?$aÑÀŸœ°ýÚüÃ?7w‚ÚÞ8-àX¡‰BGjQ@ÀµQ]#I[;;O°+[ÙÀm¡F%‡’Sa³÷Ѐ2­J©<€D-7>++øÎéôÛ¹gÑÞ ¸š5‚)éRä¶r©ºÜJΪŽÄ,LÁÎ7mÍÕüe}ªøCX}"ËÈžßLžk©&¸x܃4Yˆy{™ƒA!ù„gîg½ðî-Þ# Û»2¿Úöf¸R ¶bþb€Æ‡ï6`—Â:Ö?ck[± ,‰&ËéÕ¦Wfv°pÒÎçN7¶1“EÐËVÞ#ûF«–-1x.§Šâ?3ýLQ¨a.q†Ü%¶;AÈó¿ØlnÖU­°·Õu BG2Ëuå¢|»|¸‘~T÷ùÚVÏ_Þc¢Š½ö‘ýÃHdõ‘¯Ÿø‘Ü ÝĬ=Ah‘­´î­yw¶ÛÈ]wɼ©JžÚ^žÔÓÔFÔZe‰Ù¢<JæŸý›eÿ>±ß"°Eî¶öÈÙ²sÿµi~Ý®Ïíþ¿ÿ­yâ+¿Ù¶_óëýò(þͲÿŸX¿ï‘X_n×?çöÇÿ_ÿŽÑöísþlðÿøíñ ¿Ù¶_óëýò(þͲÿŸX¿ï‘X_n×?çöÇÿ_ÿŽÑöísþlðÿøíñ ¿Ù¶_óëýò(þͲÿŸX¿ï‘X_n×?çöÇÿ_ÿŽÑöísþlðÿøíñ ¿Ù¶_óëýò(þͲÿŸX¿ï‘X_n×?çöÇÿ_ÿŽÑöísþlðÿøíñ ¿Ù¶_óëýò(þͲÿŸX¿ï‘X_n×?çöÇÿ_ÿŽÑöísþlðÿøíñ ¿Ù¶_óëýò(þͲÿŸX¿ï‘X_n×?çöÇÿ_ÿŽÑöísþlðÿøíñ ¿Ù¶_óëýò(þͲÿŸX¿ï‘X_n×?çöÇÿ_ÿŽÑöísþlðÿøíñ ¿Ù¶_óëýò(þͲÿŸX¿ï‘X_n×?çöÇÿ_ÿŽÑöísþlðÿøíñ ¿Ù¶_óëýò(þͲÿŸX¿ï‘X_n×?çöÇÿ_ÿŽÑöísþlðÿøíñ ¿Ù¶_óëýò+W´·¶Ô´‰ …#srñ’£S ’?5Sø ‹íÚçüþØÿà ÿñÚfëË‹ˆf¿¸Ž_ —a€Æ7·',ÄðXq޽ø¤æ¬)ø®öòDZÍa$ÉrÒYD¦‰&‰/™òn*Ä Üd×+qânÕÖÅ%™¯RécT¼0£àÏb6NcFMÅn[ dÎÞÛQ´´Õtå±¼ŽG‡1òäxØ:e!”†2ƒ{UáÝ g#¾×_6IäyNã2,\bÚäî_-v‘YÝ Ç‹WÖ¦ñ5íºÜÞ›˜/­¡ûV¡ìÖ&Š˜›(ÊVu$„ùNB“Fñ®¥¨ÚYt¸%k"Þ./¶´“5¢]7™²*ì,7(9`Õ+ÓØÚÚé¢am€ÌÊò´’<Œì±¬`–bI;QF{ã'’MT²Ð´9-ÖÒÈÆ¶Ò¬Ñ1Î×X¸<žtóõëÍ@QÔõ«»ëO j:,yþк,˜ãkIœ,…CôÀ8ÁQõ¬Ù|]ªÞk¶6ºl&3¬3ÛOpeé ".ûPCcæ~TËg ŸCÒçÒì4ãÄvÚ~ß²ù2ÄñmCãû¬G'œóQŸèÅ[9ö¢ù±Ï"J6™00`äÍ.çsy¸œš.€ËÔ¼i{k¤_ÞK§¤6»¯í­f·»Ý1–Ýf9eh¶ " åðJåH'›Æ÷vëu4šLfƒí³n[Â]­í%òæm¾^ä©TÎN]p3=·„´´†ñ/VâóírÝ;¬“Ëå¢ÎîX${Ê£m¦õ[¦ãW¥Ð´‰¡–,‰ŽX®¡qæ?)ráæ‰€>ݱEÐu^hi¶º4.×Q6óÇ{ ¶ÑJ¾Dí…‘¢9Œ =8j’ËÅWvèúg“Ƨq§G)¸±ˆ\(tù`rÍÆÑÔ-muKu†ê9FÞ‘¶ʺÊpHÈ# ‘БPK¤é²ØýŒÛÈ‘yò\«E+Ç"JìÌ쮤2’]úÃÐâ•ÐÏã{½úœ±i05ž•³ÝÈ×…dòÒ{ˆ–žY ضfÁe`3Þ¤ðÿ‰‘©Gp—S¥•åß I%—›¹V%HÕYÝ©€Ú6íÚû.ÁáÝÚÆòÎ;9 7°5½Ç™<ŽÒ£4ŽAfbÙ-4§9ÏÍ׋péöòC$6Å$†Y¥F Ù +žU™·mîÝc†3»1;œlœîiö–ZU»Ccj°£·™!Q–‘È»±åÜàe˜’{“Jè :*¿Ú?Ù?•hÿdþT®2Å_íìŸÊ´²*.Š*¿Ú?Ù?•hÿdþT\ U´²*>ÑþÉü¨¸bµÔüi~ú¬3Ka±²ŽhÄžR’íç¡?q™Ã!Ÿôu'‚¸>Åk¦xÒÁôëXa–þ+“{1ˆüÕÏr>û+•@?é G³wPÓ-5ÖäµÝµÚ.Õ¸µân +¸¶@¤’Ã/-Æ‚iÚež;\ƒwsvëµ®.§y[’ míŒ1•@«Âñ…xÙuÿ´þ¹í=ÞÝvµ»[úßSNuÉËbK‹Ë„ñnb²bÚk ©¤L]$· s×#þ~±†²Ó]A}w«j6òj2YCkkf²ÂÆ;ƒód19Rî:îA†r¥Ž¶§¥éúµÄIv³[«¤r[]ÍnÁ\©`Ll¤‚Qx>•Þ‰¥__­ìö÷h–9ŠÇs,q¼‘QÞ5`ŽÃjòÀœ*Ž€W½tdQÔü]ƒ[j¥oF”"ºŽh$³xeiR/=X,ª§hŽ)†AÁfQÎ Xí¯5Ë[ë ÿTµ’þá`žK• <°Š¾tA6Œ™Lr”<¦bò@n†í-¯áXna/ËÀdž7‡FU?‡5^K >_´oµ'íQ]Ëó·Í,~^ÆëÆ<¨ø¼ŽNK 8Ø5Ÿ_YCöIï^{ûXîÓ j7 š1¬ò0Ë‘ø¸ÃóZVWº…þ¥ŠºÎ¯m0[™nžx­ Ì/ÙöÅ”¢(Và>@'7 ­hü;¢Æ’¢ÙJQ×b«O#ÀC–ýÈPÜB>êà>Ò ºD »GVgûB^η XwLÌ`B Áb0‰ýÕÁt=¥ø—WÔô¸uÉ.ü­—Zu³YEy „¶gcdÜ ËcÈ™æÝÐk~$—J¸¼XlRxtë5¾¾wœÆË 2cÊP¤;â)8bƒîóÉăCÑÖî+ˆìL~VͰÅ#¤ Â™B®©#b`«‰5 +LÕ.k»iYöùngfL“²UR‰Ë|®ù›˜äº¥‡‰®îoáK:lîoîl-¥ŽèÉ!’.K¡E ¤@ç†c’£’Mö·ªjPAªÝiéÓ­°©4ÌbŽRÌdGb@ 1†$À-¸ì4ø¾Ï²Ô³ÝKwÎß,²y›Û¯9ódàð7p8f¡¥éúÂÜN—qÌa’ÖîkveÆÊXNÎ761“’è ›­WRþÆÕɮƟçG·Bî8ÚW’(¡™ã„‰”nòÜ1£\‚71WÚV™¨\Iqqm/ÚcO:)ž9!}»YH({ ÊHrAÅP—ÂZÖ?ck[± ,‰&ËéÕ¦Wfv°pÒÎçN7¶1“EÐÚ¿wm¯ß‹¹&¸´k¡nÍ$Ä‹}÷×ñ¡ ÎrËxRxZé?´¯õ hiQyrÜ|öøe,öåøt܇h¾eÀfPÜP]ø{O–ÊúÞÖ#oý¡„»l³ù±žY“òïó¦#ÌÈû  kņþÑí¦ûBÆøÉ‚g…ø9áІ;j.€äÿá.¸Ò£ŽÅaÔõ-Qå—ÍŠþ1¾Ü"ÄJ“g €äMœ‚À€µ­á½gRÕõ=Y¦µò´øå‹ÉYÛeÄ%­ ÄÑ…ÇF$—$Œ`RiÝ"]£«3ý¡/g[†,;¦æ0!P`±DþêâÕ¥†Ÿavn,íM»–#.ÉÐËfપÚ¡sŠ.€Ö¢ ûHþá£í#û†Éè¨>Ò?¸hûHþá  è¨>Ò?¸hûHþá  è¨>Ò?¸hûHþá  è¨>Ò?¸hûHþá  è¨>Ò?¸i Èþé  U´²*>ÑþÉü©\ U´²*sÌз±>T4¸ã?áFàpß à”.?Ó€Q¸@ùö¯ëè/‹XLB±î¿-Ãd·ÈüŸO¥|û_c”ÿ¹ÇÕžu_âËä[]Jé#XÖL*ô¥þÔ»ÿž¿¥W¬ç.ç?${ö¥ßüõý)§tå§éE{Iw³‡`þÒºÿžŸ¥ÚW_óÓô¢Š~Ò}Ø{8ví+¯ùéúQý¥uÿ=?J(£ÚO»gÁý¥uÿ=?J?´®¿ç§éE{I÷aìáØ?´®¿ç§éGö•×üôý(¢i>ì=œ;ö•×üôý(þÒºÿžŸ¥Qí'݇³‡`þÒºÿžŸ¥ÚW_óÓô¢Š^Ò}Øýœ;ö•×üôý(þÒºÿžŸ¥Qí'݇³‡dÚW_óÓô£ûJëþz~”QOÚO»gÈ?´®¿ç§éGö•×üôý(¢i>ì^΃ûJëþz~”i]ÏOÒŠ(ö“îÇìáØ?´®¿ç§éGö•×üôý(¢i>ì=œ;ö•×üôý(þÒºÿžŸ¥Qí'Ý‹Ùði]ÏOÒí+¯ùéúQE/i>ì~΃ûJëþz~”i]ÏOÒŠ)ûI÷böpìÚW_óÓô£ûJëþz~”QG´Ÿv΃ûJëþz~”i]ÏOÒŠ(ö“îÃÙði]ÏOÒí+¯ùéúQEÒ}Øýœ;ö•×üôý(þÒºÿžŸ¥Qí'݇³‡`þÒºÿžŸ¥ÚW_óÓô¢Š=¤û±{8ví+¯ùéúQý¥uÿ=?J(£ÚO»gÁý¥uÿ=?J?´®¿ç§éE{I÷aìáØ?´®¿ç§éGö•×üôý(¢i>ì=œ;ö•×üôý(þÒºÿžŸ¥Qí'ÝÙði]ÏOÒí+¯ùéúQEÒ}Ø{8vAý¥uÿ=?J?´®¿ç§éE{I÷aìáØ?´®¿ç§éGö•×üôý(¢i>ì^΃ûJëþz~”i]ÏOÒŠ(ö“îÇìáØ?´®¿ç§éGö•×üôý(¢i>ì=œ;ö•×üôý(þÒºÿžŸ¥Qí'Ý‹Ùði]ÏOÒí+¯ùéúQEÒ}Ø{8ví+¯ùéúQý¥uÿ=?J(£ÚO»gÁý¥uÿ=?J?´®¿ç§éE½¤û°öpìÚW_óÓô£ûJëþz~”QOÚO»gÁý¥uÿ=?J?´®¿ç§éE{I÷aìáØ?´®¿ç§éGö•×üôý(¢i>ì=œ;ö•×üôý(þÒºÿžŸ¥Qí'݇³‡`þÒºÿžŸ¥ÚW_óÓô¢Š=¤û°öpìÚW_óÓô£ûJëþz~”QG´Ÿv΃ûJëþz~”i]ÏOÒŠ(ö“îÃÙði]ÏOÒí+¯ùéúQEÒ}Ø{8ví+¯ùéúQý¥uÿ=?J(£ÚO»gÁý¥uÿ=?J?´®¿ç§éE{I÷aìáØ?´®¿ç§éGö•×üôý(¢—´Ÿv΃ûJëþz~”i]ÏOÒŠ(ö“îÃÙði]ÏOÒí+¯ùéúQE?i>ì~Îi]ÏOÒí+¯ùéúQEÒ}Ø{8ví+¯ùéúQý¥uÿ=?J(£ÚO»³‡`þÒºÿžŸ¥ÚW_óÓô¢Š=¤û°öpìÚW_óÓô£ûJëþz~”QG´Ÿv΃ûJëþz~”i]ÏOÒŠ(ö“îÃÙði]ÏOÒí+¯ùéúQEÒ}Ø{8ví+¯ùéúQý¥uÿ=?J(£ÚO»gÃ^þâE*Ï{b«QEDäÞì¸E-ÿÙbitpim-1.0.7+dfsg1/help/errors-access-blocked.htd0000644001616600161660000000052010413137635017754 0ustar amuamu#include "pagestart.h"

The phone has blocked access to the specified file or directory. There is nothing BitPim can do to get access as the block is on the phone itself. These blocks are usually because the carrier wants customers to update content via their services rather than using a program like BitPim. #include "pageend.h"bitpim-1.0.7+dfsg1/help/previous.png0000644001616600161660000000240007723032460015460 0ustar amuamu‰PNG  IHDR22i8¸' pHYs.#.#x¥?vgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFvIDATxÚbüÿÿ?.@L x@±€á.ud #ˆñ¶ì&@± 2 ±&Ɉ®ˆŸƒ¯ƒ§N€Â© €½ÀÄ` œÎ &$§_âgP6#@á´ €pZ@x=Š ÌaÈ $€ø²(2Ý PßÀ0'6“]Ó4þlš]“ ,x ø6MDV@Éšˆ‰Tˆd Ä‚'^@ ˆ—#Ç @±àPxˆÕ‘ó º“.@#§•³á<`‘GBF€‚Ù`Ĭ؂ 3²“þ@¹ñ…@a ÖoPB@lŠ. @$Ç4@‘qD²€"+Å’ ˆ‰ €èb @¡¤s<ˆñ) V„&Ä?¸‚21>áâ+Hßk¨KðY€ ›% ×@2ôkcQKlp Kw±9} ˈ0ˆ tKþ±#Zqˆ± ¸™CŒOˆPœüb¤Ò„ZøÀlbƒ €è’ˆ.ù €èb @Ñ%¸ˆ.> ºX@t± €èb @ÑÅ€"Ô>ÅÚ€¸ ŸXQ@äø¤Z@z« €XH0<ˆ'#ñ+ˆÕ@ÄX’Ä3°ˆï$Ö€ÂgI</À!÷”ð l–DC«V| ‚K9âຄ}“Ð:<Øðw˜b€BöÉ* þÄ뉰¤ˆ/PóÆ ,u2¨ …ZŠ ¸q3±Á@¸òÉj¨eq8ämI‰€"”C-KÆ"ÇG¬%DlŽŸµ,I¬XKˆÔbe Ô²" .$V@Ñ¥ú ºõDKˆ.–], ºX@tI]ôÄÄ0L@ аñ@ аñ@am ’Ñ ˆq ´U-ß8G®a°   46šÄ@¬Œ&×K‰'°€¢¦G@¼h'Iº'@ÜHíP J<Âó5&uIÐê|¦¶Gˆ°C;y X†Ó‰ñt )„Ï# ¡Ô`¨Ã-©`¨-tˆÃ©`¨¸Y €py$:Ú`AÍv×Pɬoè \õÈh,0B= MJAæ<9cš €ˆ©ÿB}o5„ šÉO“á‘V,E1U@‘S³ƒ†V±Ôc\@œÀ™ú#8IU 5š( ™…@lõh' ÏX (6=©í€¢E[ë d–Cê1 .bä6E'öyX²@Ñ£Ñøˆ'±b¾h-´N¢ aÓÕ aÓŒ aã€6 aã€60¯²Žx¶þ£IEND®B`‚bitpim-1.0.7+dfsg1/help/phone-samsungsphm300-cables.htd0000644001616600161660000000057210722065775020745 0ustar amuamu#include "pagestart.h"

BitPim support for this model was developed and tested with a Susteen straight USB data cable. To the OS, the data cable appears as 2 ports: a modem port and a diag port. You MUST use/set the modem port with the SPH-M300PIM model, and the diag port with the SPH-M300MEDIA model. #include "pageend.h"bitpim-1.0.7+dfsg1/help/faq-stupidformat.htd0000644001616600161660000000331210360163373017067 0ustar amuamu#include "pagestart.h"

Users frequently ask why BitPim picks particular formats or does particular actions on phones, especially since some users think they are less efficient or even stupid. One example would be using BMP as the image format for LG VX6000 phones instead of JPG which the phone appears to support.

The reason is that the BitPim developers have thoroughly investigated the actual details. Our goal is for things to "just work". We thoroughly test our decisions and the alternatives. This includes taking the phone beyond normal usage limits (eg what happens if every field is filled in for a phonebook, what happens if we preview an image in all functionality of the phone such as wallpaper, sending it, deleting it etc)

If you think it could be done better, we would love to know! However please make sure you thoroughly test your suggestions against all the relevant functionality of your phone, and that you do it with a wide variety of examples. The BitPim developer code includes a test data generator that may be help. Let us know if you would like to work with that or need it extended.

And the reason for the use of BMP instead of JPG on the LG VX6000 is because although JPG images preview fine, the phone doesn't set them correctly as wallpaper.

It is usually preferable that you do your investigative work using the BitPim source code. In many cases you can just change one line of code. For example to make the LG VX6000 use jpg instead of bmp as the format, you can edit one line near the bottom of URL(http://bitpim.org/pyxr/c/projects/bitpim/com_lgvx6000.py.html#0097,com_lgvx6000.py). Get started with the code! #include "pageend.h" bitpim-1.0.7+dfsg1/help/screen-ringerstab.png0000644001616600161660000502760610546621525017250 0ustar amuamuBM†/6(düÄÄ*pÄ™ŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒ U§:Ö®  ¡                                             ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡                                                                                                                                    ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡                      ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡                      ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡                      ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡                      ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡                                            ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡                                            ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡                                                                                       ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡                      ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ £¡›Œ b±<ÛÏÙ1ÚG ßTÙI ØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAØAÝ>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ý>Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ü>Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ü=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ý=Ü=Ð7¼,£ŒxÇ0tÑÏÙ1åRîjÝUêOêOêOêOêOêOêOêOêOêOêOêOêOêOêOêOêOêOêOêOêOêOñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHñHÜ=¾- Œ%ŽÜ[¹ÏÙ1îjÝUÏÝßÐÝßÑÞàÒÞàÒÞàÒÞàÑÞàÑÞàÑÞàÑÞàÑÞàÑÞàÑÞàÐÝßÐÝáÐÝáÐÝáÏÝàÏÝàÏÝàÏÝàÏÝàÏÝàÎÞàÎÞàÎÞàÎÞàÎÞàÎÞàÎÞàÎÞàÏÝàÏÝàÌÝàÌÝàÌÝàÌÝàÌÝàÌÝàÌÝàÌÝàÌÝàÌÝàËÜàËÜàËÜàËÜàËÜàËÜàÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÈÜßÈÜßÈÜßÉÛßÉÛßÊÛßÇÛÝÆÙÞÅÙÝñHÜ= Œ'•àG¥ÏÙ1îjÝUÊÙÛÊÙÛÊÙÛÊÙÛÊÙÛÊÙÛÊÙÛÊÙÛÊÙÛÊÙÛÊÙÛÉØÛÉØÛÉØÛÉØÛÉØÛÉØÛÉØÛÉØÛÆØÚÆØÚÆØÚÆØÚÆØÚÆØÚÆØÚÆØÚÆØÚÆØÚÅØÚÅØÚÅØÚÅØÚÄ×ÚÄ×ÚÄ×ÚÄ×ÚÄ×ÚÄ×ÚÂÖÚÂÖÚÄ×ÚÄ×ÚÂÖÚÂÖÚÂÖÚÂÖÚÂÖÚÂÖÚÂÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÀÖÙÁÖÚÁÖÚÁÖÚÁÖÚÀÖÙÿÿÿÿÿÿÀÖÙÀÖÙÿÿÿÿÿÿÀÖÙÀÕÙÿÿÿÿÿÿ¾ÕÙñHÜ= Œ q»<˜ÏÙ1îjÝUÎÞàÎÞàÏÝßÏÞÞÏÞÞÏÞÞÎÞàÏÝßÏÝßÏÝßÏÝßÏÞÞÏÞÞÍÝÞÍÝÞÍÝÞÍÝÞÍÝÞÍÝÞÍÝÞÍÝÞÍÝÞÍÝÞÍÝÞÍÝÞÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÊÜßÉÛßÉÛßÈÜßÈÜßÈÜßÈÜßÈÜßÈÜßÇÛßÇÛßÇÛßÇÛßÇÛßÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛݲÅÇÿÿÿÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛݲÅÇÿÿÿÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÇÛÝÅÛÞÅÛÞÅÛÞ£´¸¡µ¸ÿÿÿÄÛÝ£´¸¡µ¸ÿÿÿÄÛÝ£´¸¡µ¸ÿÿÿÃÚÝñHÜ= Œc«@™ÏÙ1îjÝUÖãåÖãå×äå×äå×äåÕäåÕäåÕãåÕãåÕãåÕãåÖãåÖãåÖãåÖãåÔâäÔâäÔâäÔâäÔâäÔâäÓâäÓâäÓâäÓâäÒâãÒâãÒâãÒâãÒâãÒâãÑâäÑâäÑáãÑáãÑâãÑâãÐáäÐáäÏáäÏáäÏàãÏàãÏàãÏáäÏáäÏáäÏàãÏàãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáã³ÅÇÿÿÿÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáã³ÅÇÿÿÿÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáãÍáäÍáäËàãËà㣴¸¡´¸ËßäËß䣴¸¡´¸ËàãÉà㣴¸¡´¸ÉßãÉßãñHÜ= Œe«Y®ÏÙ1îjÝUÜééÜééØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÑäçÑäç´ÆÉÿÿÿÑäçÑäçÿÿÿ¦«¬}~hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh}~§«¬ÿÿÿÑäçÑäç´ÆÉÿÿÿÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÑäçÒäèÑäçÐäèÑäçÑäçÐäèÐäèÏäèÏäèÏäèÏäèÎãèÎãèÎãèÎãèñHÜ= Œe«l¾ÏÙ1îjÝUâêëâêëØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÓæêÓæêµÆÊÿÿÿÓæêÓæê§«¬wwwïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïwww¦«¬ÓæêÓæêµÆÊÿÿÿÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÓæêÐåêÿÿÿÿÿÿÑçêÐåêÿÿÿÿÿÿÐåêñHÜ= Œ h²uÂÏÙ1îjÝUãììãììØéìØéìÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÔèëÔèë¶ÆÊÿÿÿÔèëÔèë}~¾¾¾ïïïïïïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïïïïïï}~ÔèëÔèë¶ÆÊÿÿÿÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëØéìØéìÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÔèëÓè룴¸¡µ¸ÿÿÿÒç룴¸¡µ¸ÿÿÿÑçêñHÜ= Œs¿}ÅÏÙ1îjÝUåìíåìíØéìÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÖèëÖèëµÇËÿÿÿÖèëÖèëhhh¾¾¾ïïïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðððÿÿÿïïïhhhÖèëÖèëµÇËÿÿÿÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÕçéÔèëÓèëÓè룴¸¡´¸ÓèëÓè룴¸¡´¸ÑçêÑçêñHÜ= Œ-Ð#•ÚÏÙ1îjÝUèîîèìíØéìÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÖèëÖè릺¼ÿÿÿÖèëÖèëhhh¾¾¾ïïïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóóÿÿÿïïïhhhÖèëÖè릺¼ÿÿÿÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÖèëÕçéÔèëÔèëÔçëÔçëÓèëÓèëÒçëÒçëÑçêÑçêñHÜ= Œ?à/¦èÏÙ1îjÝUèïïèïïØéìÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé쫾ÁÿÿÿØéìØéìhhh¾¾¾ïïïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõõõÿÿÿïïïhhhØéìØé쫾ÁÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÖéìÖéìÖéìÖéìÕéìÕéìÕéìÕéìÔèëÿÿÿÿÿÿÓéìñHÜ= ŒAâ,ŸÝÏÙ1îjÝUèïïèïïÿÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì¯ÁÅÿÿÿØéìØéìhhh¾¾¾ïïïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøøøÿÿÿïïïhhhØéìØéì¯ÁÅÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÖéìÖéìÖéìÖéìÕéìÕéìÕéìÕé죴¸¡µ¸ÿÿÿÓéìñHÜ= Œ;…Ú3™ÒÏÙ1îjÝUèïïèïïÿÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì±ÃÇÿÿÿØéìØéìhhh¾¾¾ïïïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûÿÿÿïïïhhhØéìØéì±ÃÇÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÖéìÖéìÖéìÖéìÕéìÕéìÕéìÕé죴¸¡´¸ÓéìÓéìñHÜ= Œ/yÌqÂóÏÙ1îjÝUèïïèïïØéìÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì²ÅÇÿÿÿØéìØéìhhh¾¾¾ïïïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûÿÿÿïïïhhhØéìØéì²ÅÇÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÖéìÖéìÖéìÖéìÕéìÕéìÕéìÕéìÔèëÔèëÓéìÓéìñHÜ= Œj¹n±àÏÙ1îjÝUèïïèïïØéìÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì²ÅÇÿÿÿØéìØéìhhh¾¾¾ïïïïïïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïïïïïïhhhØéìØéì²ÅÇÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÖéìÖéìÖéìÖéìÕéìÕéìÕéìÕéìÔèëÔèëÓéìÓéìñHÜ= Œ-wÃ^›ÉÏÙ1îjÝUèïïèïïØéìÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì³ÅÇÿÿÿØéìØéì}~¾¾¾¾¾¾ïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïï¾¾¾ØéìØéì³ÅÇÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÖéìÖéìÖéìÖéìÕéìÕéìÕéìÕéìÔèëÔèëÓéìÓéìñHÜ= Œ:‚ËM‰·ÏÙ1îjÝUèïïèïïØéìØéìÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì´ÆÉÿÿÿØéìØé즫¬www¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾hhh³³³ØéìØéì´ÆÉÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÖéìÖéìÖéìÖéìÕéìÕéìÕéìÕéìÔèëÔèëÓéìÓéìñHÜ= ŒA†ÍI‚¯ÏÙ1îjÝUèïïèïïØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìµÆÊÿÿÿØéìØéìÿÿÿ§«¬}~hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhïïïØéìØéìµÆÊÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÖéìÖéìÖéìÖéìÕéìÕéìÕéìÕéìÔèëÔèëÓéìÓéìñHÜ= ŒAÅR‰µÏÙ1îjÝUèïïèïïèïïèïïèîîèîîèïïçïïåîïåîïåîïåîïåîïåîïåîïåîïåîïäíîäíîäíîäíîâíîâíîâíîâíîàíîàíîáììáììßìíßìíßìíßìíÞëìÞëìÞëìÞëìÞëìÞëìÜêìÜêìÚêìÚêìÚêìÚêìÙêíÙêíÙêëÙêëÙêëØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì¶ÆÊÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì¶ÆÊÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÖéìÖéìÖéìÖéìÕéìÕéìÕéìÕéìÔèëÔèëÓéìÓéìñHÜ= ŒI…ÅZºÏÙ1îjÝUëðïëðïëðïëðïëðïêïïèïïèïïèïïèïïèïïèïïèïïçïïçïïçïïçïïçïïçïïåîïåîïãîïãîïãîïãîïãîïãîïâíîâíîàíîàíîàíîàíîàíîàíîßìíßìíßìíßìíßìíßìíÜëîÜëîÜëîÜëîÜëîÚëîÚëîÚëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîµÇËÿÿÿÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîµÇËÿÿÿÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÙëîÚêìÚêìÙêíÙêíÙêíÙêíÙêíÖêíÖêíÖêíÖêíÖêíÔêìÔêìÕéìÕéìñHÜ= ŒVŽÌ^’»ÏÙ1îjÝUèìëçëêåéèåéèåéèäèèäéèäéèäéèäèèãèèãèèãèèáèèáèèáèèáèèàèèàèèàèèàèèßèèßèèÝèèÝèèÝèèÝèèÜèèÜèèÜçèÜçèÛæèÛæèÚçèÚçèÚçèÚçèÙæçÙæç׿è׿è׿è׿è׿è׿è׿è׿èÕåèÕåèÕåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÔåèÓäçÓäçÓäçÓäçÓäçÒäçÒäçÒäçÒäçÒãæÒãæÏãæÐäæÐäæÐäæÑäçÒåèñHÜ= Œb˜ÓY‹µÏÙ1îjÝUßäãÚßÞÙÜÛÙÜÛÙÜÛ×ÚÙÖÙØÖÙØÔÙØÔØØÓØ×ÓØØÓØØÓØ×ÐØØÐØØÐØØÐØØÐØØÐØØÏØØÏØØÏØØÏרÍרÍרÍרÍרÍרÌרÌרÌרÌרÊÖ×ËÕÖÊÕØÊÕØÊÖØÊÖØÈÕØÈÕØÇÕ×ÇÕ×ÇÕ×ÇÕ×ÇÕ×ÇÕׯÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÅÔ×ÄÓÖÃÔ×ÃÔ×ÃÔ×ÃÔ×ÃÔ×ÄÕØÂÔ×ÂÔ×ÃÕØÄ×ÙÄ×ÙÄ×ÙÅÙÜÈÜàñHÜ= Œe˜ÐPªÏÙ1îjÝUÒÕÓÉÌËÄÇÆÄÇÆÄÇÆÁÄĿþÂÁ¾ÂÁ¾ÁÀ¾ÁÀ¾ÁÀ¾ÁÀ¾ÁÀ¼ÁÀ¼ÁÀ¼ÁÀ¼À¿¼À¿ºÀÀºÀÀºÀÀºÀÀ¹ÀÀ¹ÀÀ¸¿À¶¿À¶¿À¶¿À¶¿À¶¿À¶¿À¶¿À¶¿À¶¿À¶¿À´¾À´¾À´¾À´¾¿´¾¿³¾¾²¾¿²¾¿²¾¿²¾¿²¾¿²¾¿²¾¿²¾¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿°½¿¯½¿¯½¿¯½¿¯½¿¯½¿®¼¾®¼¾®¼¾®½¿¯¿Á±ÂıÂıÂĵÆÉ¼ÎÐñHÜ= Œ_ÄO¨ÏÙ1îjÝU•¤¦›žŠ—šŠ—šŠ—šˆ•—†“–…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•…“•†“–ˆ•—Š˜šŠ˜šŠ˜šŸ•¤¦ñHÜ= Œk›ËL~¤ÏÙ1îjÝUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØéìØéìØé왨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñHÜ= Œw§Ò1fŠÏÙ1îjÝU™¨¬ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿØéìØéìØé왨¬doqØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÜ= Œ^޳+`‚ÏÙ1îjÝU™¨¬doq¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÜ= Œ:kˆ7nÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÜ= Œ&XkJ†¦ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…ŠˆÿÿÿÞÞÞáááààààààáàáââááâáââââãâãããããääããäãäãääÿÿÿ…ŠˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîóñíáÀªÙ±”اˆÓ¤ƒÔ }ÒŸ~ÓŸ|ÓŸ|Ô }Ô }Ô }Ö¤‚ݰ”÷òìåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ&X`U”³ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…Šˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…ŠˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîçÔÃÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåÄ®åíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬âïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ=omE†£ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡¢¡…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ ¢¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿøãÛñÆ·òɸóɹóɹóɹòɸõȳõȳôȲóƱòİöãÙÿÿÿÖÀ®ÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþýýýýýýýýýýýýýýýýýýýýýýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒJ|q.qŽÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüëëëÞÞßÏÐпÀÁ¯°±Ÿ ‘ƒ†‡‚„‚…‡Œ‘™œž¦©«³¶·¾ÀÂÈÊÌÒÔÕììíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿóÀªùË·ûιúμúμùλûϹûͶûͲù˰ùÉ­÷È®òŰÿÿÿÓµ ÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýýýýüüüüüüûûûûûûúúúúúúùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùúúúúúúûûûûûûüüüüüüýýýýýýýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒK}j^yÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ-\{HrIrIrIrIrIqHqHqHqHqIrJsKu Mu Kw Mv MvTwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõ¬üͺüоûÒÁüѾüѾûÓ½üÓ·ûѶûϲû̯ùÉ­óűÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýüüüûûûúúúùùùøøø÷÷÷öööõõõôôôóóóóóóòòòññññññññññññññññññññññññòòòòòòóóóôôôõõõõõõööö÷÷÷ùùùùùùúúúûûûüüüýýýýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒFv^VlÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿQvf•jšj™j™h™h˜g˜g—f—e•d•d•c•c•c•b” `‘MuÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöíüоüÓÂýÓÃüÕÂüÕÂ…aMüÔºüÓ·üѳûίúÊ®óȱÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýüüüûûûúúúùùù÷÷÷õõõóóóñññðððîîîíííëëëêêêéééèèèççççççççççççççççççççççççççççççèèèéééêêêëëëìììîîîïïïðððòòòóóóõõõöööøøøùùùûûûüüüýýýýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒBrWOaÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿUw1vž _’ZZZZZZŽ\-u¡ZZZZZ ^’j™MuÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöDZüÓÂüÖÅüÖÅüÖÅ…aM…aM…aMûϲûϲûϲú˱õȳÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýüüüûûûùùù÷÷÷õõõóóóñññîîîìììéééçççåååãããáááßßßÝÝÝÜÜÜÛÛÛÚÚÚÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÛÛÛÛÛÛÝÝÝÞÞÞàààâââãããåååçççéééëëëîîîðððòòòôôôööö÷÷÷ùùùûûûüüüýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒCrZR_ÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ&YzXް@©kš\Z)sŸ@©YS²r¡ÀX´c•ZZZ _’,t¡MuÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅüÕÅüÕÅ…aM…aM…aM…aM…aMûζûζú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýüüüúúú÷÷÷õõõòòòïïïìììéééæææãããßßßÝÝÝÙÙÙ×××ÕÕÕÒÒÒÐÐÐÏÏÏÍÍÍÌÌÌÌÌÌËËËËËËËËËËËËËËËËËËËËËËËËÌÌÌÌÌÌÍÍÍÏÏÏÐÐÐÑÑÑÓÓÓÕÕÕ×××ÚÚÚÝÝÝßßßâââåååçççêêêíííïïïòòòõõõ÷÷÷ùùùûûûüüüýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ@nYYcÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓ°µ˜xµ˜xµ˜xµ˜xµ˜xµ˜xµ˜xÓ°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.^{`“³Kˆ¯;¨8}¦#oI‡¯P²[=€©iœ¼OаL‰¯ZZZ `“>€©MuÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûÖÈ…aM…aM…aMûÓÁ…aM…aM…aMûζûͶó˹ÿÿÿÓµ ÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýûûûùùù÷÷÷óóóðððìììèèèäääàààÜÜÜØØØÕÕÕÑÑÑÏÏÏÌÌÌÉÉÉÇÇÇÆÆÆÄÄÄÃÃÃÂÂÂÁÁÁÁÁÁÁÁÁÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÁÁÁÁÁÁÁÁÁÂÂÂÃÃÃÄÄÄÅÅÅÆÆÆÈÈÈÊÊÊÌÌÌÎÎÎÑÑÑÓÓÓ×××ÚÚÚÝÝÝáááäääèèèëëëîîîñññôôôöööùùùûûûüüüýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ:hT\eÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµ˜x¿ÌÒ®¾Æ¨¸Â§¸Á§¸Á¦·ÀªºÃµ˜xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6b~k›ºP¶=‚®=‚®^˜¼:­ eœa™a™#t¥2~¬b›¿,y¨iœd™fšUµNuÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉ…aM…aM…aMûÓÁûÓÁûζ…aM…aM…aMû͹ô˺ÿÿÿÓµ ÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýûûûùùùöööóóóîîîêêêåååàààÛÛÛ×××ÒÒÒÏÏÏËËËÈÈÈÅÅÅÃÃÃÆÅÇÉÇËÉÅÊÓÍÖÒÌÕÒÌÕÒËÕÑËÔÑËÔÑËÔÑËÔÑËÔÑËÔÑËÔÑËÔÈÄÊÅÂÇÂÀù¹¹ºººººº»»»¼¼¼½½½¾¾¾¿¿¿ÁÁÁÃÃÃÅÅÅÇÇÇÊÊÊÌÌÌÏÏÏÓÓÓ×××ÛÛÛßßßãããçççêêêîîîñññôôô÷÷÷ùùùûûûýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ6dP"]fÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµ˜xÙáäÏØÜÉÓØÆÑÖÀÌÒ»Èϵ˜xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRw­Ê>†³:„³?‡µ_›Á¯ÎI޹g¢h¢h¢'z®\šÁ*}®!w¬!w¬<‡¶a˜»6b~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿ÷νüÛÍüÚÍ…aMüØÉüØÉýλû͹û͹…aMû͹û͹ó̼ÿÿÿÓ¸¤ÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýüüüùùùöööòòòîîîéééãããÝÝÝØØØÓÓÓÎÎÎÊÊÊÈÈÉÌÉÎÕÏØÛÓßá×åéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïæÚëÜÓáÕÎÙÏÉÓÃÀÅ»º»¸¸¸¹¹¹ººº¼¼¼½½½¿¿¿ÁÁÁÄÄÄÆÆÆÊÊÊÍÍÍÑÑÑÕÕÕÙÙÙÞÞÞãããçççëëëïïïóóóõõõøøøûûûüüüýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ6dO,dnÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµ˜xîòòìððçííãéêÙàãÌÖÛµ˜xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïïðOxo¤Æežd j§I’¿u¬Î8‡¹v¯"y°0‚µ%}³q­ {³#}´#}µ]žÇG~¡‘ž¦ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿøÐ¾üÝÐýÝÎýÙÊûÖÈûÖÈûÖÈýλüͺû͹üͺüͺó̼ÿÿÿÔ»¨ÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüúúú÷÷÷óóóîîîéééãããÜÜÜÖÖÖÑÑÑÍÌÍÑÍÓØÑÛá׿éÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïâ×çÙÐÝÌÆÏ¿½Á···¸¸¸¹¹¹»»»½½½¿¿¿ÂÂÂÅÅÅÉÉÉÌÌÌÑÑÑÕÕÕÚÚÚßßßãããèèèíííñññôôô÷÷÷úúúüüüýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ7eO¡Œ8fPOÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµ˜xõ÷÷õ÷÷ô÷÷ôööëðñÚá嵘xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠ™¢={¡H޹ o¬ t²w·yºyº6ÅZ¢Ð\£Ñ}µÚ2Å!ƒÁ{½{¾ ƒÂqªÎJtüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿùØÊþæÚüãØýÞÑýÛÎýÙÊüØÉüÕÅüÓÅüÓÂüоúͼô̺ÿÿÿÚ˽ÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýûûû÷÷÷óóóíííåååÞÞÞ×××ÕÒÖÝÕáçÛìéÝïéÝïéÝïéÝïéÝïéÝïéÝïíâñðçôóí÷÷òùú÷ûûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúüüúýüúýüúýúöû÷óùóëöðçôíâòéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïßÕäËÆÎ»º¼¶¶¶¸¸¸¹¹¹¼¼¼¿¿¿ÂÂÂÅÅÅÊÊÊÏÏÏÔÔÔÙÙÙßßßåååêêêïïïóóó÷÷÷úúúüüüýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ7cMRŒÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµ˜xûüüûýýûýýûüüúüüóö÷µ˜xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿNq‡Q¸8Å~Á~Á~Á~Á~Á~Á‚Ã2ŽÉ"…Å{¼w¸t³ p®p«JޏaŠ›¦­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿüßÐþêáþæÚüáÔýàÑüÝÐýÛÎýÙÊûØÈüÖÅüÓÂúμóɹÿÿÿÝ×Ïÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüúúúöööðððéééâââÚÚÚØÕÙáØæéÝïéÝïéÝïéÝïéÝïéÝïëàññéõöïøú÷ûûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúüüúýüúýüúýüúýüúýüúýüúý÷óùôí÷ïæóêßðéÝïéÝïéÝïéÝïéÝïéÝïéÝïßÕäËÆÎ»º¼¶¶¶¸¸¸ººº½½½¿¿¿ÃÃÃÇÇÇÍÍÍÒÒÒØØØÞÞÞäääêêêïïïóóó÷÷÷úúúüüüýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ/\FKwƒÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµ˜xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµ˜xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTyi§Î~¸Ý~¸Ý~¸Ý~¸Ý}·Üw±×m©Ðd¡ÉZ™ÁQ‘ºP¹P¹O¹O¹O¹P¹KŒ¶RwúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿüîæüßÐùØÊ÷ÒÄ÷ÐÀ÷νõÍ»ö˸õÊ·÷ȵõdzôůùæÜÿÿÿáâßÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüùùùõõõïïïçççßßßÛØÝâÙçéÝïéÝïéÝïéÝïéÝïëàññéõøóùûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýùõúóëöíâòéÝïéÝïéÝïéÝïéÝïéÝïéÝïØÏÜÅÁǵµµ···¹¹¹»»»¾¾¾ÂÂÂÆÆÆËËËÑÑÑ×××ÞÞÞäääêêêïïïôôôøøøûûûýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ'U?AjwÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓ°µ˜xµ˜xµ˜xµ˜xµ˜xµ˜xµ˜xÓ°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ MtGrGrGrGrGrGrGrGrGrHsHsHsGsIsIsIrHsIsGrÊÍÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîúýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüùùùôôôíííåååÞÜßãÚèéÝïéÝïéÝïéÝïéÝïíãòõïøûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýú÷ûõïøïæóéÝïéÝïéÝïéÝïéÝïéÝïâ×çÎÈÑ··¸¶¶¶¸¸¸ººº½½½ÁÁÁÆÆÆËËËÑÑÑ×××ÞÞÞåååëëëñññõõõùùùûûûýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ$Q=?eqÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6[r@X‰ŽŽäå囟W[YðòòèêêÜÞÞÐÔÓÅÊǹ¿½‰ŽŒ÷øøìîîìíííïïùùù„‰‡?cííîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüùùùóóóíííäääâÜåéÝïéÝïéÝïéÝïéÝïðçôùõúûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýú÷ûôí÷íâòéÝïéÝïéÝïéÝïéÝïæÚëÕÍÙ»¹»µµµ···¹¹¹½½½ÁÁÁÆÆÆËËËÒÒÒÙÙÙàààçççíííòòò÷÷÷úúúüüüþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ0\I-P]ÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¦¬?S]ÒÔÓÙÛÚ´¸·W[YðòòíïïèêêÜßßÑÖÔÆËÉŒŽ÷øøìîîìíííîîùúú…ŠˆJh{ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüùùùôôôìììäâåæÜëéÝïéÝïéÝïéÝïíãòùôúûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýùõúðèôêßðéÝïéÝïéÝïéÝïéÝïÕÍÙ»¹»µµµ···¹¹¹½½½ÁÁÁÆÆÆÌÌÌÓÓÓÛÛÛâââéééïïïôôôøøøûûûýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ3_N=JÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéêêV[ZúúúÜÞÝÍÐÐX\ZàÓÉ«sGªrEµ…aÝáàÓÖÕŒ‘ö÷÷íïïìîîîïïøúú„‰ˆ´¹¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýùùùôôôíííåâæèÜîéÝïéÝïéÝïëàñöñøû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýûùüôí÷ëàñéÝïéÝïéÝïéÝïéÝïÕÍÙ»¹»µµµ···ººº½½½ÂÂÂÈÈÈÏÏÏÖÖÖÝÝÝåååìììñññöööúúúüüüþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ4^P0>ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ·¸¸†ŠŠýýý÷øøïññX\ZÛÍÀ°xJÃb­yMêììßâ᎓‘ôööúúúøùùùúú÷÷÷…‹Šòòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýúúúõõõîîîæáééÝïéÝïéÝïéÝïñèõùõûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýõïøëàñéÝïéÝïéÝïéÝïéÝïÎÈÑ··¸µµµ···ººº¿¿¿ÄÄÄÊÊÊÑÑÑÙÙÙáááèèèïïïõõõùùùûûûýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ1ZN/:ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½½½fkjdih´·¶ìííX\ZÛʼ§j:¬sD°{Rîïïìíí’–”…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ„‰‡ñññÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþûûû÷÷÷ðððèáëéÝïéÝïéÝïêÞðõï÷ú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýøóùíâòéÝïéÝïéÝïéÝïæÚëÇÃÉ´´´¶¶¶¸¸¸¼¼¼ÀÀÀÆÆÆÍÍÍÕÕÕÝÝÝåååìììóóó÷÷÷ûûûýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ*PI $0ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçç礤¤qrqVZXßßÜÜÑÈÜÑÈß×ÐéëëéëëèêêÈÊÉjllÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüùùùòòòéáíéÝïéÝïéÝïìáñ÷òùú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýõïøëàñéÝïéÝïéÝïéÝïÛÒཻ¿µµµ···¹¹¹¾¾¾ÃÃÃÊÊÊÑÑÑÙÙÙâââéééðððöööúúúüüüþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ"GD%ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ_aa]`^_b`_b`_b`_b`_b`_b`_b`twuÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýúúúõõõëåíéÝïéÝïéÝïìáñùõúú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýôí÷êßðéÝïéÝïéÝïéÝïÎÈÑ´´´µµµ¸¸¸»»»ÀÀÀÆÆÆÎÎÎÖÖÖßßßçççïïïõõõùùùüüüýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒA@ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüü÷÷÷íèïéÝïéÝïéÝïìáñùõúú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýûùüðèôéÝïéÝïéÝïéÝïßÕä½»¿´´´···¹¹¹¾¾¾ÄÄÄËËËÓÓÓÜÜÜåååíííóóóøøøûûûýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ>> *ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüðððãããÖÖÖÊÊÊ¿¿¿½½½ººº»»»ÀÀÀÉÉÉÚÚÚèèèóóóüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýùùùñïòéÝïéÝïéÝïìáñùõúú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýøóùíâòéÝïéÝïéÝïéÝïÎÈÑ´´´µµµ¸¸¸¼¼¼ÁÁÁÉÉÉÑÑÑÚÚÚãããëëëòòò÷÷÷ûûûýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ=>6CÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸ¡ …Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ­®®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþûûûöööêàïéÝïéÝïêÞðøóùúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýóìöéÝïéÝïéÝïéÝïÛÒà·¶·µµµ···»»»ÀÀÀÇÇÇÏÏÏØØØáááêêêñññ÷÷÷ûûûýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ;>=MÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…Šˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…Šˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýùùùîçñéÝïéÝïéÝïöïøúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýùõúíâòéÝïéÝïéÝïæÚëÁ½Â´´´¶¶¶¹¹¹¾¾¾ÅÅÅÍÍÍ×××àààéééñññ÷÷÷ûûûýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ#>B8KÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…Šˆÿÿÿëìììììíííîîîîîîììëìììíííñðñòóòóôóôôôõõõöööÿÿÿ…Šˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüõôöéÝïéÝïéÝïñéõúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýûùüðèôéÝïéÝïéÝïéÝïËÅÍ´´´µµµ¹¹¹½½½ÄÄÄÌÌÌÖÖÖßßßéééñññ÷÷÷ûûûýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ,AE Œ‹93ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþ…Šˆîîî²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²…Šˆýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéÝïéÝïéÝï÷òùøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùü÷òùéÝïéÝïéÝﺸ»µµµºººÂÂÂÍÍÍÛÛÛçççñññùùùýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ> Œ¢ž D;ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþ…Šˆÿÿÿììììììììììììììììììììììììììììììììììììëëë±±±…Šˆüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíãòéÝïéÝïõî÷øóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüîäòéÝïéÝïÕÍÙ´´´¸¸¸¿¿¿ÉÉÉÕÕÕãããîîî÷÷÷üüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ> Œžš‹LEÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…Šˆÿÿÿìììììììììëëëêêêêêêééééééæææééééééêêêæææªªª…Šˆüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñéõéÝïéÝïñèõøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüöñøéÝïéÝïéÝï¶¶·¶¶¶¼¼¼ÅÅÅÑÑÑÞÞÞëëëôôôûûûþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ> Œ‚sNIÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…ŠˆÿÿÿììììììÌÌÌËËËÄÄÄZUUU¿¿¿¿¿¿ÑÑÑÊÊÊ’’’…Šˆýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷òùéÝïéÝïíâòøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüëàñéÝïéÝïËÅ͵µµºººÁÁÁÌÌÌÚÚÚçççñññùùùýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ> ŒSTGJGÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…ŠˆÿÿÿììììììììììììéééZ'CM7XlZ­­­­­­¬¬¬¹¹¹”””…Šˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüûýéÝïéÝïéÝï÷òùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüóí÷éÝïéÝïßÕä´´´¸¸¸¿¿¿ÉÉÉÕÕÕãããïïï÷÷÷üüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ> Œ58/FDÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…ŠˆÿÿÿììììììÌÌÌÌÌÌËËËvvv:\qŠ«ÂV…£Z¸¸¸¾¾¾½½½œœœ…Šˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìáñéÝïéÝïóëõøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüùõûéÝïéÝïéÝﺸ»¶¶¶¼¼¼ÅÅÅÑÑÑßßßëëëõõõûûûþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýýýýýýýüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüýýýýýýýýýýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ> Œ%+%DBÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿÿÿÿ…ŠˆÿÿÿìììììììììììììììëëëZÄåíeŸÈUŸZÔÔÔÔÔÔŸŸŸ…Šˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóëöéÝïéÝïîäòøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüîäòéÝïéÝïËÅ͵µµºººÃÃÃÎÎÎÜÜÜéééóóóúúúþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýýýýüüüûûûúúúúúúùùùøøø÷÷÷÷÷÷÷÷÷ööööööööööööööööööööööööööö÷÷÷÷÷÷øøøùùùùùùúúúûûûûûûüüüýýýýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ> Œ '%#EEÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…ŠˆÿÿÿììììììÌÌÌÌÌÌÌÌÌÌÌÌ···ZÅæíf¡ËV…¢ZÔÔÔ²²²…Šˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûùüéÝïéÝïéÝïöðøøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüóí÷éÝïéÝïÛÒà´´´¹¹¹ÀÀÀËËËÙÙÙçççñññùùùýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýüüüûûûúúúùùù÷÷÷öööõõõôôôóóóñññðððïïïîîîîîîíííííííííííííííííííííííííííîîîïïïðððñññòòòóóóôôôõõõööö÷÷÷ùùùúúúûûûüüüýýýýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ> Œ!)-(HHÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…ŠˆÿÿÿìììììììììììììììììììììÓÓÓZÆèîp«ÍW…¢Z   …Šˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíãòéÝïéÝïñèôøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüùõûéÝïéÝïéÝï´´´¸¸¸¿¿¿ÉÉÉÖÖÖåååðððøøøýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýüüüûûûùùù÷÷÷õõõóóóñññïïïíííëëëêêêèèèçççåååäääãããâââááááááááááááááááááááááááââââââãããäääæææçççéééêêêìììîîîïïïñññóóóõõõöööøøøùùùûûûüüüýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ> Œ(29*IKÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…ŠˆÿÿÿììììììÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ···ZÆèîi¦ÎX‡¤Z…Šˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷òùéÝïéÝïëßðøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüëàñéÝïéÝïÎÈÑ···¾¾¾ÇÇÇÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýüüüûûûùùù÷÷÷ôôôòòòïïïíííéééçççäääáááßßßÝÝÝÛÛÛÙÙÙ×××ÕÕÕÔÔÔÓÓÓÒÒÒÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÒÒÒÒÒÒÓÓÓÕÕÕÖÖÖØØØÙÙÙÛÛÛÝÝÝàààâââäääçççéééëëëîîîðððòòòõõõ÷÷÷ùùùúúúûûûýýýýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ> Œ*3+JMÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…ŠˆÿÿÿìììììììììììììììììììììììììììÓÓÓZÆêîi¦ÎU‚ŸZÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýþêßðéÝïéÝïòêõøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüïåóéÝïéÝïÛÒà···½½½ÇÇÇÓÓÓâââîîî÷÷÷üüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýüüüúúú÷÷÷õõõñññîîîëëëçççäääàààÝÝÝÙÙÙÖÖÖÓÓÓÑÑÑÏÏÏÍÍÍËËËÉÉÉÈÈÈÇÇÇÆÆÆÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÆÆÆÇÇÇÈÈÈÉÉÉÊÊÊÌÌÌÍÍÍÏÏÏÑÑÑÓÓÓÖÖÖÙÙÙÜÜÜßßßâââåååèèèëëëîîîñññóóóöööøøøúúúûûûýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ> Œ #*HMÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…ŠˆÿÿÿììììììÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ···ZÆêîjªÏR›Zÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôí÷éÝïéÝïëßðøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüòëöéÝïéÝïÛÒà¶¶¶½½½ÆÆÆÒÒÒáááíííöööüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýûûûùùùöööóóóïïïëëëçççãããÞÞÞÚÚÚÖÖÖÒÒÒÏÏÏËËËÉÉÉÇÇÇÅÅÅÃÃÃÁÁÁÀÀÀ¿¿¿¾¾¾½½½½½½¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼½½½½½½¾¾¾¿¿¿ÀÀÀÁÁÁÂÂÂÃÃÃÅÅÅÇÇÇÉÉÉËËËÎÎÎÑÑÑÔÔÔ×××ÛÛÛßßßâââæææéééíííðððóóóöööøøøúúúüüüýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ> Œ#'GMÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…ŠˆýýýìììììììììììììììììììììììììììììììììÔÔÔZÇëïk¬ÒX‡¤Zÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýþêßðéÝïéÝïòêõøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùü÷òùéÝïéÝïÛÒà¶¶¶¼¼¼ÅÅÅÒÒÒáááíííöööüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýûûûùùùöööóóóîîîéééåååßßßÚÚÚÕÕÕÑÑÑÍÍÍÉÉÉÆÆÆÈÆÉËÈÌÑÌÔÓÍÖÛÒßÝÔâàÖåéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïãØèÜÓáÜÓáÓÌÖÐÊÓÇÃÉÄÁƸ¸¸¹¹¹ººº»»»¼¼¼½½½¿¿¿ÀÀÀÃÃÃÅÅÅÇÇÇÊÊÊÍÍÍÑÑÑÕÕÕÙÙÙÝÝÝáááåååéééíííðððôôô÷÷÷ùùùûûûýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ> Œ!&GMÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…Šˆóóóééééééçççêêêéééêêêééééééçççéééçççççç¼¼¼ZÇëïk¬ÒWƒ¡Zÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôí÷éÝïéÝïêÞð÷ñøøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøü÷ñùéÝïéÝïâ×ç¶¶¶¼¼¼ÅÅÅÑÑÑáááíííöööüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýüüüúúú÷÷÷óóóîîîéééãããÝÝÝ×××ÒÒÒÍÍÍÉÉÉÎËÏÕÏØßÕãæÛìéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïâ×èÜÓàÏÉÒÆÂȽ»¾¸¸¸¹¹¹ººº»»»¾¾¾ÀÀÀÂÂÂÅÅÅÈÈÈËËËÏÏÏÓÓÓØØØÝÝÝáááæææêêêîîîòòòõõõøøøûûûüüüýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ> Œ $GMÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…ŠˆÛÛÛ©©©»»»©©©ººº   ººº©©©ÀÀÀ   ººº£££½½½§§§xxxZÆêîr­ÏZÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýþêßðéÝïéÝïñèôøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüéÝïéÝïéÝï¶¶¶¼¼¼ÅÅÅÑÑÑáááíííöööüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýûûûøøøôôôïïïéééãããÝÝÝÖÖÖÐÐÐÏÍÏÕÐØßÖäéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïâ×çÕÍÙÉÄ˼»½···¸¸¸ººº¼¼¼¾¾¾ÁÁÁÄÄÄÇÇÇËËËÏÏÏÔÔÔÙÙÙÞÞÞãããèèèíííñññôôô÷÷÷úúúüüüýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ$JNÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ“•”zzz Ä||| Ä||| Ä||| Äooo Äooo Ännn Äuuu…ŠˆZZÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôí÷éÝïéÝïéÝïõî÷øóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüéÝïéÝïéÝï¶¶¶¼¼¼ÅÅÅÒÒÒáááíííöööüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüúúúöööñññëëëåååÞÞÞ×××ÑÑÒ×ÒÚâØçéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïîåóïçôóí÷öñøùõúùõúýûýþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿùõûùõû÷óúôí÷ôí÷ïåóíãòéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïßÕäÒËÕ¿½À¶¶¶···¹¹¹»»»½½½ÀÀÀÄÄÄÇÇÇÌÌÌÑÑÑÖÖÖÛÛÛáááæææëëëðððôôô÷÷÷úúúüüüýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ&NTÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ Ä¼âô Ä—Õô Ä—Õô Ä—Õô Ä—Õô Ä—Õô Ä—Õô Äÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìáñéÝïéÝïìáñøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüéÝïéÝïéÝï¶¶¶½½½ÆÆÆÒÒÒáááíííöööüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýüüüùùùôôôïïïèèèáááÙÙÙÖÓ×ÝÖáéÝïéÝïéÝïéÝïéÝïéÝïéÝïìáññéõöñøú÷ûþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿûøü÷òùóëöíãòéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïæÚëÕÍÙÁ¾Ãµµµ···¹¹¹»»»¾¾¾ÁÁÁÅÅÅÉÉÉÎÎÎÔÔÔÙÙÙßßßåååëëëïïïôôô÷÷÷úúúüüüýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ'RYÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ Äÿÿÿ Äÿÿÿ Äÿÿÿ Äÿÿÿ Äÿÿÿ Äÿÿÿ Äÿÿÿ Äÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùöûéÝïéÝïéÝïñçôøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüéÝïéÝïéÝï···½½½ÆÆÆÓÓÓâââîîî÷÷÷üüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýûûûøøøóóóíííåååÝÝÝÚ×ÛâÙçéÝïéÝïéÝïéÝïéÝïéÝïíãòõî÷ûøüþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿùöûôí÷íãòéÝïéÝïéÝïéÝïéÝïéÝïéÝïâ×çÑËÕ»¹»µµµ···¹¹¹¼¼¼¿¿¿ÃÃÃÇÇÇÍÍÍÒÒÒÙÙÙßßßåååëëëðððôôôøøøûûûýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ!&U^ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ Äÿÿÿ Äÿÿÿ Äÿÿÿ Äÿÿÿ Äÿÿÿ Äÿÿÿ Äÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóëöéÝïéÝïéÝïõî÷øòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüéÝïéÝïéÝï···½½½ÇÇÇÓÓÓãããîîî÷÷÷üüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýûûû÷÷÷òòòëëëãããÜÚÝãÚçéÝïéÝïéÝïéÝïéÝïëáñõî÷ûøüýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿýýþ÷òùñéõêßðéÝïéÝïéÝïéÝïéÝïéÝïÛÒàÈÃʵµµ¶¶¶¸¸¸»»»¾¾¾ÂÂÂÇÇÇÌÌÌÒÒÒØØØßßßåååëëëñññõõõùùùûûûýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ#YdÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýûûûúúúøøøóóóïïïïïïîîîïïïðððóóóõõõùùùüüüüüüþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýþìáñéÝïéÝïëßð÷ñøøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüéÝïéÝïéÝï···¾¾¾ÇÇÇÔÔÔãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýûûû÷÷÷ñññêêêáàááÚåéÝïéÝïéÝïéÝïéÝïîåóøôúýüýýüýýüýýüþýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿÿÿÿÿÿÿÿÿøôúñéõêßðéÝïéÝïéÝïéÝïéÝïâ×çÎÈÑ··¸µµµ¸¸¸ººº½½½ÁÁÁÆÆÆÌÌÌÒÒÒÙÙÙàààçççíííòòòöööúúúüüüýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ$ :QÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùùùíííãããÛÛÛÐÐÐÄÄĺººµµµ²²²®®®···½½½ÇÇÇÖÖÖáááèèèóóóüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûøüéÝïéÝïéÝïîãòøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüøóùéÝïéÝïæÚë···¾¾¾ÇÇÇÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýûûû÷÷÷ñññéééâßäçÜìéÝïéÝïéÝïéÝïîäóøôúýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿÿÿÿÿÿÿÿÿýýþ÷òùïåóéÝïéÝïéÝïéÝïéÝïæÚëÎÈÑ»¹»µµµ···ººº½½½ÁÁÁÇÇÇÍÍÍÓÓÓÛÛÛâââèèèîîîôôô÷÷÷ûûûýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ 5UÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþ~~}UTQRQNNMJKIFGFBFD@CC?AA>A@>AA>DD@HFBKJFOMJRQMkjhùùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõðøéÝïéÝïéÝïðçôøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüöñùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýûûû÷÷÷ñññéééäÞçéÝïéÝïéÝïéÝïëáñøôúýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿüúýñéõêßðéÝïéÝïéÝïéÝïéÝïÑÊÕ··¸µµµ···ººº¾¾¾ÂÂÂÈÈÈÎÎÎÕÕÕÝÝÝäääëëëñññõõõùùùüüüýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡ŒHmÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüümmk¢¨¨œ££›¢¢š¡¡™  ˜ŸŸ–žž•”œœ“››’šš‘˜˜——––••WXUüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñéõéÝïéÝïéÝïòêõøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüöñùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüøøøòòòêéêæÞêéÝïéÝïéÝïéÝïóìöýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿýýþõðøìáñéÝïéÝïéÝïéÝïæÚëÎÈÑ··¸µµµ¸¸¸ººº¿¿¿ÄÄÄÊÊÊÑÑÑØØØßßßçççîîîóóóøøøûûûýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ[ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿcc`{~{~{~{~{~{~{~{~{~{~{~{~|~|~|~lokÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýþíãòéÝïéÝïéÝïôí÷÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüöñùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüùùùóóóëêëçÝìéÝïéÝïéÝïíâòùõûýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷òùìáñéÝïéÝïéÝïéÝïæÚëÇÃÉ´´´¶¶¶¸¸¸»»»ÀÀÀÅÅÅÌÌÌÓÓÓÛÛÛãããëëëñññöööúúúüüüþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ ^ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢£¢`db`db`db`db`db`db`db`db`db`db`db`db`db`db`db`dbdhf{~}ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüûýêßðéÝïéÝïêÞðõî÷÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûöñøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýúúúõõõíìíèÞíéÝïéÝïéÝïðèôûùüýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷òùìáñéÝïéÝïéÝïéÝïßÕäÁ¾Âµµµ···¹¹¹½½½ÂÂÂÉÉÉÐÐÐØØØàààèèèïïïõõõùùùüüüýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ"W{ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ]b_ïððóóóôôôöööøøøùùùûûûüüüÿÿÿÿÿÿÿÿÿ÷øøúûûñòò»½½§©¨·¸¸jnmüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûøüêßðéÝïéÝïêÞðõî÷÷òù÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûöñøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþûûû÷÷÷ïîïèÞíéÝïéÝïéÝïóìöýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõðøêßðéÝïéÝïéÝïéÝïÑÊÕ·¶·µµµ···»»»¿¿¿ÅÅÅÌÌÌÔÔÔÝÝÝåååíííóóóøøøûûûýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ "- NqÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿcheäååëëëæææéééìììîîîñññóóóöööáâáÐÒÑÂÅļ¾¼šœâãã±²²¦¨¨imkÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûøüêßðéÝïéÝïêÞðõî÷÷òù÷òù÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûöñøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýùùùòñòéßîéÝïéÝïéÝïõïøýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýþóëöéÝïéÝïéÝïéÝïæÚëÄÀÆ´´´¶¶¶¹¹¹½½½ÃÃÃÉÉÉÑÑÑÚÚÚãããëëëñññ÷÷÷ûûûýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ/7MmÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿosrÙÙÙëëëæææææææææãã㜚èèèíííKIC^]Xsrošœîïï俿įÆtxvÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷òùéÝïéÝïéÝïêÞðõî÷÷òù÷òù÷òù÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûöñøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýûûûõõõêâîéÝïéÝïéÝïõïøüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûøüïåóéÝïéÝïéÝïéÝïÕÍÙ·¶·µµµ···»»»ÀÀÀÇÇÇÏÏÏ×××àààéééðððöööúúúýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ6?!XwÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿÿÿÿ{~|ËÎÍïïïæææææææææßßß75/ßßßåååPNJ{yw²±°¨¨¦©¬¬©¬¬©¬¬ñòòtwvÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷òùéÝïéÝïéÝïêÞðóëö÷òù÷òù÷òù÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûöñøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüøøøíèðéÝïéÝïéÝïóëöüúýüúýüúýüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõðøêßðéÝïéÝïéÝïâ×ç½»¿´´´···¹¹¹¾¾¾ÅÅÅÌÌÌÕÕÕÞÞÞçççïïïõõõúúúüüüþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ5@7g„ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠŒ‹ÃÆÅôôôæææææææææßßß75/ßßßæææ××Ö[YT§§¥¢¡Ÿ¾¿¾ÈÉÈ¿À¿ñòòtwuÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøôúêßðéÝïéÝïéÝïòêõ÷òù÷òù÷òù÷òù÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûöñøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþûûûóñôéÝïéÝïéÝïïæóüúýüúýüúýüúýüúýüúýüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüúýïåóéÝïéÝïéÝïéÝïËÅÍ´´´µµµ¹¹¹½½½ÃÃÃÊÊÊÓÓÓÝÝÝæææîîîõõõùùùüüüþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ2>@l‡ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’”“¸¼ºóóóæææææææææßßß75/ßßßææææææÕÕÕSQK˜—”ÒÓÓÓÔÔéêéööö‚…„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûøüêßðéÝïéÝïéÝïïæó÷òù÷òù÷òù÷òù÷òù÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûöñøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýøøøëáïéÝïéÝïëàñûøüüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõðøéÝïéÝïéÝïéÝïØÏÜ·¶·µµµ¸¸¸»»»ÁÁÁÉÉÉÒÒÒÛÛÛåååíííôôôùùùüüüþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ> Œ0@H_ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿžŸž­°°ùùùæææææææææßßß75/ßßßæææææææææŽ‹WUQæææÒÓÓèèèñòòŠ‹‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûøüìáñéÝïéÝïéÝïíâñ÷ñø÷òù÷òù÷òù÷òù÷òù÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûöñøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþûûûñìóéÝïéÝïéÝï÷óùüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûøüìáñéÝïéÝïéÝïßÕ亹»µµµ···»»»ÀÀÀÈÈÈÑÑÑÛÛÛäääíííôôôùùùüüüþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ> Œ:O?TÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²²²¥¨§ùùùææææææ£¢ USN75/ßßßæææhgc“’€~{SQKææææææèèèÉËʧ¨§ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýþíãòéÝïéÝïéÝïëßðõî÷÷òù÷òù÷òù÷òù÷òù÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûöðøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýø÷ùêÞïéÝïéÝïñéõüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿýýþðçôéÝïéÝïéÝïæÚë½»¾´´´···ºººÀÀÀÇÇÇÐÐÐÚÚÚäääíííôôôùùùüüüþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ> ŒE_;MÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐÐИ›ùùùçççäääæææÊÉÈ…„âââââ⹸·OMHKIDÁÀ¿çççæææûûû«¯®®¯®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýþñéõéÝïéÝïéÝïéÝïñèõ÷òù÷òù÷òù÷òù÷òù÷òù÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûöðøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüðêóéÝïéÝïêßðûøûüùüüùüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿôî÷éÝïéÝïéÝïåÚëÇÃÉ´´´¶¶¶ººº¿¿¿ÇÇÇÐÐÐÚÚÚäääíííõõõùùùýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ> ŒRp9HÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐÐЊüüüªªª…Šˆææææææææææææsss»»»æææææææææ…ŠˆÀÀÀüüüŸ£¡ÐÐÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõðøéÝïéÝïéÝïéÝïíâñöï÷÷òù÷òù÷òù÷òù÷òù÷òù÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûöðøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûëàðéÝïéÝïóëöüùüüùüüùüüùüüúüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿ÷òùêßðéÝïéÝïéÝïÇÃÉ´´´¶¶¶¹¹¹¿¿¿ÇÇÇÐÐÐÛÛÛåååîîîõõõúúúýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ> Œ$aƒ9FÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†‹‰üüü…Šˆ···ææææææææææææ…Šˆ»»»æææææææææÆÇÇ…Šˆûûû˜š™ÐÐÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûøüìáñéÝïéÝïéÝïêÞðòêõ÷ñù÷òù÷òù÷òù÷òù÷òù÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûöðøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþóïöéÝïéÝïêÞðû÷ûüùüüùüüùüüùüüùüüùüüúüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿÿÿÿÿÿÿÿÿûøüêßðéÝïéÝïéÝïÇÃÉ´´´¶¶¶¹¹¹¿¿¿ÇÇÇÑÑÑÛÛÛåååïïïöööûûûýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ> Œ-o”=GÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†‹‰ÿÿÿ…ŠˆÂÄÃÿÿÿÿÿÿÿÿÿÿÿÿ…ŠˆÂÄÃÿÿÿÿÿÿÿÿÿÂÄÃ…Šˆÿÿÿž žÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýþðçôéÝïéÝïéÝïéÝïíâñöï÷÷òù÷òù÷òù÷òù÷òù÷òù÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûöðøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýîåòéÝïéÝïðçôüùüüùüüùüüùüüùüüùüüùüüùüüùüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿÿÿÿÿÿûøüêßðéÝïéÝïéÝïÇÃÉ´´´¶¶¶ººº¿¿¿ÇÇÇÑÑÑÝÝÝçççððð÷÷÷ûûûýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ> Œ3yž?GÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¨©¨…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ£¥¤ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøôúêßðéÝïéÝïéÝïéÝïðçô÷ðø÷òù÷òù÷òù÷òù÷òù÷òù÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûöïøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûúûéÝïéÝïéÝïøôúüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿÿÿýýþíãòéÝïéÝïéÝïÇÃÉ´´´¶¶¶ºººÀÀÀÉÉÉÓÓÓÞÞÞéééñññ÷÷÷üüüþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ> Œ9‚¨@DÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæææ…Šˆ¨©©ŒŽÿÿÿÿÿÿÿÿÿ…Šˆñññÿÿÿÿÿÿ†Š‰•–•…Šˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýþðçôéÝïéÝïéÝïéÝïëßðòêõ÷ñù÷òù÷òù÷òù÷òù÷òù÷òù÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûöïøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöòøéÝïéÝïëàñüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿÿÿýýþíãòéÝïéÝïéÝïÇÃÉ´´´···»»»ÁÁÁÊÊÊÕÕÕàààêêêóóóùùùüüüþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ> Œ?Œ±=?ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸŸŸ…Šˆ¢££ÿÿÿÿÿÿÿÿÿ…Šˆøøøÿÿÿÿÿÿ¢££…ŠˆÐÐÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùöûìáñéÝïéÝïéÝïéÝïíâñôìö÷òù÷òù÷òù÷òù÷òù÷òù÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûöïøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðèóéÝïéÝïñéõûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿýüþìáñéÝïéÝïéÝï½»¾´´´···»»»ÃÃÃÌÌÌ×××ãããíííõõõúúúýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ> ŒG•º9:ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôí÷êßðéÝïéÝïéÝïéÝïíâñôìö÷òù÷òù÷òù÷òù÷òù÷òù÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûöïøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþìâñéÝïéÝïöðøûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿÿþÿÿþÿÿþÿûøüêßðéÝïéÝïåÚë½»¾µµµ···½½½ÅÅÅÏÏÏÚÚÚåååïïïöööûûûýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ> ŒQž¿ECÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüúýñéõéÝïéÝïéÝïéÝïéÝïíâñóëö÷òù÷òù÷òù÷òù÷òù÷òù÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûöïøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþéÝïéÝïéÝïú÷ûûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿÿþÿÿþÿûøüêßðéÝïéÝïßÕä·¶·µµµ¹¹¹¾¾¾ÇÇÇÑÑÑÝÝÝèèèñññøøøüüüþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ> ŒX ¹'ZSÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýýýýþþþÿÿÿþþþÿÿÿÿÿÿÿÿÿÿÿÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüúýðçôéÝïéÝïéÝïéÝïéÝïëßðòêõ÷ñø÷òù÷òù÷òù÷òù÷òù÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûöïøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùõúéÝïéÝïëàñûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿÿþÿÿþÿøôúéÝïéÝïéÝïØÏܳ³³µµµºººÀÀÀÊÊÊÕÕÕáááëëëôôôúúúýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ> ŒZ›¬'ZSÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúóóóèèèßßßäääêêêêêêèèèçççâââßßßÝÝÝÜÜÜãããìììöööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùöûðçôéÝïéÝïéÝïéÝïéÝïêÞðïåóõî÷÷òù÷òù÷òù÷òù÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûöïøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøõúéÝïéÝïîãòûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿÿþÿõïøéÝïéÝïéÝïËÅÍ´´´···»»»ÃÃÃÍÍÍÙÙÙåååïïï÷÷÷ûûûþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ> ŒU’ž([TÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÃÅÅBlh2yq2yq@wqcus———œœœ½½½¼¼¼¶¶¶²²²°°°±±±···ÂÂÂÕÕÕêêêýýýÿÿÿÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîìñóìñôîóôïôõðõöó÷÷ôøù÷ùùøûûùûûùûûúýýûþþûþþûþþåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüúýñéõéÝïéÝïéÝïéÝïéÝïéÝïìáññéõöï÷÷òù÷òù÷òù÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûõïøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõï÷éÝïéÝïðçôûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿÿþÿðçôéÝïéÝïéÝï½»¾´´´¸¸¸¾¾¾ÆÆÆÑÑÑÝÝÝéééóóóùùùýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ> ŒQ‰•)\VÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2yqD¤™H¬¡^º°K³§;…Kwrt|{ŽŽŽ’““Jda2yq2yq2yqMfc—›šÅÅÅÛÛÛõõõþþþÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîóñíÙ¯”Ó¤ƒÔŸ}ÓŸ|ÓŸ|ÓŸ|ÓŸ|ÓŸ|ÓŸ|ÓŸ|Õ¡~Õ¤…ݰ”÷òìåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüúýóí÷ëáñéÝïéÝïéÝïéÝïéÝïéÝïíãòñéõöïø÷òù÷òù÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûõïøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïòëõûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿÿþÿýüþìáñéÝïéÝïßÕä·¶·µµµ¹¹¹ÁÁÁÊÊÊÖÖÖâââíííõõõûûûþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ= ŒM€Œ+]YÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2yqtļpº…ÌÄ{Ç¿Qµ«:‡€2yq±±±2yqMµªHª Fž•Cš‘7„|6‚zVolááá÷÷÷ýýýÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîܵšÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäªåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷òùïçóéÝïéÝïéÝïéÝïéÝïéÝïéÝïìáñïæóôí÷÷òù÷òùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúöðøñéõóëöùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûõïøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïòêõûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿÿþÿûøüéÝïéÝïéÝïÎÈÑ´´´···¼¼¼ÄÄÄÏÏÏÛÛÛçççñññùùùýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ= ŒGr~-^\ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿx‰‡8†~Zº°ÉÁ ×ÑŸÖÑR¶«;…ÐÐÐ2yqwĽf¾´f¾´i¿¶J®¤<ކ2yqyˆ‡÷÷÷ýýýÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿøãÛñÆ·òɸóɹóɹóɹóɹòɸòɸõȳóƱòİöãÙÿÿÿ×Ķÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüúýõï÷íãòéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïíâñðçôôí÷÷ñøøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúøòùôí÷ïåóëßðéÝïéÝïñéõùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúõïøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóí÷éÝïéÝïòêõûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿôí÷éÝïéÝïéÝï½»¾µµµ¹¹¹¿¿¿ÉÉÉÕÕÕáááíííõõõûûûþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ= Œ6Zd0`aÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèèè•¡ `|z2yq2yq2yqvƽ2yqóóór„Bž“^»±~ÈÀÐÉŽÏÈ\º¯J°¥2yqûûûþþþÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüúýõï÷íãòéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïëßðíâññçôòêõôí÷÷ñøøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúõïøõî÷ñèõîäòëßðéÝïéÝïéÝïéÝïéÝïéÝïñèõùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúõï÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôí÷éÝïéÝïòêõûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿþþÿþþÿíãòéÝïéÝïÛÒà³³³¶¶¶»»»ÃÃÃÎÎÎÛÛÛçççñññùùùýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ= Œ"@I4bfÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8yq‚ÊÂ2yqþþþþþþ” Ÿ^z?pk2yq2yq2yqkÁ·2yqþþþÿÿÿÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýþöñøñéõëáñéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïêÞðíâñíâñíâññèôñèôñèôñèôñèôñèôðçóíâòíâòíâòéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïñèõùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúõï÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôí÷éÝïéÝïòêõûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿùõûéÝïéÝïéÝïÇÃÉ´´´¸¸¸¿¿¿ÉÉÉÕÕÕáááíííõõõûûûþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ= Œ198dkÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûúüöñøñéôíãñéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïëàïíæñìãðéÝïéÝïñèõùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúõï÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøôúéÝïéÝïíãòûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿþþÿþþÿñéõéÝïéÝïâ×ç³³³¶¶¶»»»ÃÃÃÏÏÏÛÛÛèèèòòòùùùýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ= Œ.79dnÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþùõúõñøóìõîäòíäòéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïêÞïìãðîçòðëóóðõ÷÷÷ùùùúúúñëôéÝïéÝïñèõùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúõï÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùöûéÝïéÝïíãòûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿþþÿûúýêßðéÝïéÝïÇÃÉ´´´¸¸¸¿¿¿ÉÉÉÕÕÕãããîîîöööüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ= Œ/9BHr~ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýù÷úøõù÷ôùöòøòìõòëõñëõñëôñëôñëôñëôõò÷õò÷õò÷øöùúúúúúúûûûûûûüüüüüüýýýýýýþþþóíöéÝïéÝïñèõùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúõï÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýþéÝïéÝïéÝïûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿþþÿôí÷éÝïéÝïâ×ç³³³¶¶¶¼¼¼ÅÅÅÐÐÐÝÝÝêêêóóóúúúýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ= Œ-4>Lu„ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþýýýýýýýýýýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñèõøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúõï÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêßðéÝïéÝïùôúûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿþýÿýûþêßðéÝïéÝïÇÃɵµµ¹¹¹ÁÁÁËËËØØØåååðððøøøýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ= Œ(-7FmÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñèõøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúõï÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïåóéÝïéÝïôí÷û÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿþýÿþýÿòëöéÝïéÝïßÕä´´´···½½½ÇÇÇÓÓÓáááíííöööûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ= Œ%*3Fk~ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8yq‚ÊÂ2yqJup€‘œš¢¬ª°·¶ÒÔÔèèè3yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñèõøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúõï÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôí÷éÝïéÝïðçôû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýüúýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýûýýüýýüýýüýýüýýüýýüýýüýýüýýüþýüþýüþýüþýüþýüþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýþþýÿþýÿþýÿûùýéÝïéÝïéÝï½»¾µµµ»»»ÃÃÃÏÏÏÝÝÝéééóóóúúúþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ= Œ,/?J"z­ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœžœåååcH8uUBuTArQ>oM9kI5kH4kH4kH4kH4kH4hF3X;+N5&Y<+O5&eD1cH9ää䜞œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðæôöðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñù÷ñù÷ñùóìöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýþñéõéÝïéÝïéÝïéÝïéÝïïæóöïøúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúýüúýüúý÷óùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ=¡Œ15C$yªÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿœžœæææcH8nO>nP>nP>nO>lM4W5#X5!^C4ãã㜞œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðæóöðøöðøöðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñùóìöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûøüîåóéÝïéÝïéÝïéÝïéÝïíãòöïøúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüúüüúý÷óùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ=¡Œ,4Fl›ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœžœæææoUF»©Ÿ»©Ÿ»©Ÿ»©Ÿº©žº¨ž¹§œ´ •´ •­™gb`[YXwqXWV¡„¯šŽqZLââ✞œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðæóöðøöðøöðøöðøöðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñøóìöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùöûîåóéÝïéÝïéÝïéÝïéÝïëàñóìöùôúúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùü÷óùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ=¡ŒUey^ŠÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœžœçççtZJÑ·¨Ò¸¨Ò¸¨Ñ·¨Ñ·§Ñ¶¦Ðµ¥Ï´¤Ï´¤Î³¢¯™ŒTTS‘€vRRRˆzqǧ”x_PàààœžœÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðæóöðøöðøöðøöðøöðøöðøöðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñøóìöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùöûîåóéÝïéÝïéÝïéÝïéÝïêÞðïæóöïøúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùü÷òùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ=¡Œi~–PzÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœžœçççtXIʬšÇ¯·Â³±ÑÅó¡É«˜È©–Ǩ•Ǩ•Ʀ“Ť‘‹~u†vlRRR•~o¼–€v[KàààœžœÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðæóöïøöðøöðøöðøöðøöðøöðøöðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñøóìöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûøüñéõéÝïéÝïéÝïéÝïéÝïéÝïëàñðèô÷ñùúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùüüùü÷òùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ=¡Œn‡¡FpÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœžœçççtXHģ޲Ŷßú÷îýü±ÜÑÁ¡ŒÁžˆ¿œ†¿œ†¾šƒ½˜¸”~Šzoukd³‰o±†ksWFßßßœžœÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðæóöïøöïøöïøöðøöðøöðøöðøöðøöðøöðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ñø÷ñø÷ñø÷ñøóìöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýþóí÷ëáñéÝïéÝïéÝïéÝïéÝïéÝïëàñðèôöïøúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüùõúûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùüüùüüùü÷òùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ=¡Œ`}›IpÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœžœèèèsWF½™¯ÑÄùþþþÿÿ¾ë⸚¹’y·v·v¶s´‹p²ˆm£i®ƒf­c¬`sUDßßßœžœÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðæóöïøöïøöïøöïøöïøöðøöðøöðøöðøöðøöðøöðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ñø÷ñøóìöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøôúñéõéÝïéÝïéÝïéÝïéÝïéÝïéÝïêÞðîåóóëõ÷ñùúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüúöûõïøðçôêÞðòêõûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùüüùüüùü÷òùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ=¡Œ<]} UyÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœžœèèèqUD¶Žt¯¦¹åÜËó¤³‰n±†j¯ƒf¯ƒf­b«~_©{[§xW¥uS£rP¡oLpR?àààœžœÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïæóöïøöïøöïøöïøöïøöïøöïøöðøöðøöðøöðøöðøöðøöðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýþöñùïçóéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïêÞðíãòñéõõî÷øóùúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüùöûõïøòêõíãòéÝïéÝïéÝïéÝïòêõûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùüüùüüùü÷òùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ=¡Œ+Oq_ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœžœèèèpR@«€b­dª„i§rª`¨|\¦yX¤vU¤vU£sQ pMžlIœiEšfA˜c=–_9mN:àààœžœÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïæóöïøöïøöïøöïøöïøöïøöïøöïøöðøöðøöðøöðøöðøöðøöðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýþöñùñéõêßðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïíãòîåóòéõòêõöðøöðøöðøú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûöñøöñøõï÷òêõñèõíãòêÞðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïòêõûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùüüùü÷òùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ=¡Œ.Sxc„ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœžœçç瘆{tXGtXHtXHtXGtWFsWFrUEqUDqUDqTDpSCoSAoRAnQ@mQ?mP>‰tgßßßœžœÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïæóöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöðøöðøöðøöðøöðøöðøöðø÷ðø÷ðø÷ðø÷ðøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúøûõï÷ïçóêßðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïòêõûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùüüùüüùü÷òùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ=¡Œ=c‰]}ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœžœéééææææææææææææææææææææææææååååååååååååååååååååååååääääääéé霞œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïæóöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöðøöðøöðøöðøöðøöðøöðø÷ðø÷ðøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúøûöñøòëõîåòéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïëáðíçñðëóôóõïéòéÝïéÝïòêõûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùüûùüûùü÷òùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ=¡ŒBjRsÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§§§œžœœžœœžœœžœœžœœžœœžœœžœœžœœžœœžœœžœœžœœžœœžœœžœœžœœžœœžœœžœ§§§ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïæóöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöðøöðøöðøöðøöðøöðøöðøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýüýøõúõñ÷óìõðèóíäòíäòìâñéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïëáðìãñìãñïéóðêóôñõõóöùùùùùùúúúûûûüüüòìõéÝïéÝïòêõûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùüûùüûùü÷òùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ=¡Œ9^‡ SxÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïæóöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöðøöðøöðøöðøöðøöðøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýýýýýýýüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüýýýýýýýýýýýýþþþþþþÿÿÿÿÿÿóíöéÝïéÝïòêõûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùüûùü÷òùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ=¡Œ9Xƒ\…ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïæóöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöðøöðøöðøöðøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïòêõûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûùüûùü÷òùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ@[ˆ T~ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåååËÌÌÈÈÈÃÃÃÀÀÀÂÂÂÅÅÅÈÉÉâââÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïæóöï÷öïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöðøöðøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïòêõû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøü÷ñùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ:XˆGsÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ççç‚fhg\^]TXVTXVTXVTXVabb•–•ÛÛÛìììþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïæóöï÷öï÷öï÷öïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïòêõû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøü÷ñùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ6];gÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöööçççxzxTXVŒŒŒŒŒŒŒŒŒxyyxyyxyyTXVƒƒƒ×××åååüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïæóõï÷õï÷öï÷öï÷öï÷öïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïòêõû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøü÷ñùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ1`–3^ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöööæææTXV………lnmhjilqofiheigptreig{~}TXVÒÒÒºººìììÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïæóõï÷õï÷õï÷öï÷öï÷öï÷öïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïòêõû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøü÷ñùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ)aœ8bÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ|~~TXVTXVTXVglj£¨¥˜ž›› žž£ŸŸ¤¢¥«©¥«©hljœ±±±ßßßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïæóõï÷õï÷õï÷õï÷õï÷öï÷öï÷öï÷öïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïòêõû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøü÷ñùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ!b¢MwÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ”••ikj‘‘‘{||hlj¯µ²…Їcedgihrts€€TXV^a_ÿÿÿÏÏÏÅÆÅâââßßßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõï÷õï÷õï÷õï÷õï÷õï÷õï÷öï÷öï÷öï÷öïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïòêõú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøüûøüûøü÷ñùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ-t¶k•ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTXV‘‘‘TXVglj¥«©€„‚TXVTXVTXVTXVTXV€€TXVÿÿÿÿÿÿÿÿÿîîîñññÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõî÷õî÷õï÷õï÷õï÷õï÷õï÷õï÷õï÷öï÷öï÷öï÷öïøöïøöïøöïøöïøöïøöïøöïøöïøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïòêõú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøüûøüûøü÷ñùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ1|¾3Ž·ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTXV‘‘‘TXVvxwv{yTXVÿÿÿÿÿÿÿÿÿÿÿÿTXV‘‘‘TXVÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõî÷õî÷õî÷õï÷õï÷õï÷õï÷õï÷õï÷õï÷öï÷öï÷öï÷öïøöïøöïøöïøöïøöïøöïøöïøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïòêõú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøüûøü÷ñùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ(q²M©ÒÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTXVTXVTXVTXVTXVTXVTXVTXVTXVTXV‘‘‘TXVÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõî÷õî÷õî÷õî÷õî÷õï÷õï÷õï÷õï÷õï÷õï÷õï÷öï÷öï÷öï÷öïøöïøöïøöïøöïøöïøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïòêõú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüûøüûøü÷ñùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡ŒKŠ-‰²ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTXVfigÎÏÎåååãããâââàààÜÜÜÊËÊW[YTXVTXVÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõî÷õî÷õî÷õî÷õî÷õî÷õî÷õï÷õï÷õï÷õï÷õï÷õï÷õï÷öï÷öï÷öï÷öïøöïøöïøöïøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïòêõú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüûøüûøüöñùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ;vtÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTXVÏÑÐçç縸¸¸¸¸°°°¯¯¯«««©©©‹‹TXVkkkTXVÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õï÷õï÷õï÷õï÷õï÷õï÷öï÷öï÷öï÷öï÷öïøöïøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïòêõú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûûøüûøüöñùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ5kršÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTXVçççìììëëëÕÕÕãããééééééæææ¶¶¶TXVLLLTXVÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õï÷õï÷õï÷õï÷õï÷õï÷õï÷öï÷öï÷öï÷öïøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïòéõú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûöñùéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ4el—ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTXV°°°;;;;;;êêê¡¡¡;;;CCCCCCCCCcdcGHHFGGtuuÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õï÷õï÷õï÷õï÷õï÷õï÷õï÷öï÷öï÷óêõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñéõúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûû÷ûöñøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ1\h‘ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ“””õõõÕÕÕäääèèèçççâââÚÚÚÌÌÌUYWvyxNOOEEEÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õï÷õï÷õï÷õï÷õï÷õï÷õï÷óêõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñéõúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûû÷ûû÷ûöñøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ>¡Œ /Ta‹ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTXV°°°;;;;;;ïï簾¦CCCCCCCCCCCCRUS¦¨§vyxEFEÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõí÷õí÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õï÷õï÷õï÷õï÷õï÷õï÷òêõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñéõúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûû÷ûöñøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ.N YƒÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ”••ñññÐÐÐçççêêêéééåååÌÌ̸¸¸~~fhgORQIJJ‚ƒƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõí÷õí÷õí÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õï÷õï÷õï÷õï÷òêõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñéõúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûû÷ûû÷ûöñøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ0KO|ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTXV°°°;;;;;;ïï£;;;;;;;;;BCCGIHTXVÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõí÷õí÷õí÷õí÷õí÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õï÷õï÷òêõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñéõúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûöñøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ3KHtÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ”••ñññÐÐÐãããèèèèèèãããÌÌ̸¸¸—˜˜twvTXVÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõí÷õí÷õí÷õí÷õí÷õí÷õí÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷òêõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñéõúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûöñøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ7MBoÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTXVßßß;;;;;;ïï便¥;;;;;;;;;BCCJMLTXVÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷òêõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñéõúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûöñøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ:RAqÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTXVÆÈÇââââââââââââßßßÚÚÚ­®®ª««ÊËËTXVÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿ™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷òêõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñéõúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûú÷ûöñøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ ;ZP„ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ”••‰Œ‹ÃÄÃóóóóóóóóóóóóââââââÍÎÍTXV ¡ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷òêõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñéõúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûú÷ûöðøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ9gR‰ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ”••TXVTXVTXVTXVTXVTXVTXVƒ…„”••ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷òêõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñéõùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûú÷ûú÷ûöðøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒAwR‹ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õî÷õî÷õî÷õî÷õî÷õî÷òéõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñéõùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûú÷ûú÷ûöðøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ JƒTŒÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýýýýþþþÿÿÿþþþÿÿÿÿÿÿÿÿÿÿÿÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õî÷õî÷õî÷õî÷òéõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñéõùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûöðøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒQŠVŒÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúóóóèèèßßßäääêêêêêêèèèçççâââßßßÝÝÝÜÜÜãããìììöööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõíöõíöõí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õî÷õî÷òéõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñéõùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûöðøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒO‡ZÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÃÅÅBlh2yq2yq@wqcus———œœœ½½½¼¼¼¶¶¶²²²°°°±±±···ÂÂÂÕÕÕêêêýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõíöõíöõíöõí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷òéõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñéõùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûöïøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒF~^“ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2yqD¤™H¬¡^º°K³§;…Kwrt|{ŽŽŽ’““Jda2yq2yq2yqMfc—›šÅÅÅÛÛÛõõõþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóôìöôìöõíöõíöõíöõí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷òéõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñéõùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûúöûöïøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ@vb—ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2yqtļpº…ÌÄ{Ç¿Qµ«:‡€2yq±±±2yqMµªHª Fž•Cš‘7„|6‚zVolááá÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóôìöôìöôìöõíöõíöõíöõíöõí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷òéõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñéõùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûúöûúöûöïøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ>sg›ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿx‰‡8†~Zº°ÉÁ ×ÑŸÖÑR¶«;…ÐÐÐ2yqwĽf¾´f¾´i¿¶J®¤<ކ2yqyˆ‡÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóôìöôìöôìöôìöôìöõíöõíöõíöõíöõí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷òéõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñéõùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûúöûúöûöïøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒDyjÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèèè•¡ `|z2yq2yq2yqvƽ2yqóóór„Bž“^»±~ÈÀÐÉŽÏÈ\º¯J°¥2yqûûûþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóôìöôìöôìöôìöôìöôìöôìöõíöõíöõíöõí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷òéõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñéõùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûúöûúöûöïøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒN‚ lŸÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8yq‚ÊÂ2yqþþþþþþ” Ÿ^z?pk2yq2yq2yqkÁ·2yqþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóôìöôìöôìöôìöôìöôìöôìöôìöõíöõíöõíöõíöõí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷òéõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñéõùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûúöûöïøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒO‚kŸÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöõíöõíöõíöõíöõí÷õí÷õí÷õí÷õí÷õí÷õí÷òéõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñéõùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûúöûúöûöïøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒJ{e™ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöõíöõíöõíöõí÷õí÷õí÷õí÷õí÷õí÷òéõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñéõùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûùõûùõûõïøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒPa–ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïäóôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöõíöõíöõíöõí÷õí÷õí÷õí÷òéõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñéõùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûùõûõïøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒWˆb˜ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïäóôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöõíöõíöõíöõíöõí÷õí÷òéõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñéõùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõûùõûõïøéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ!Y‰hžÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïäóôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöõíöõíöõíöõíöòéõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñéõùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúõï÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒV„n¥ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8yq‚ÊÂ2yqJup€‘œš¢¬ª°·¶ÒÔÔèèè3yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïäóôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöõíöõíöòéõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñèõùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúõï÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒMyl£ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8yq‚ÊÂI®¤2yq2yq2yq2yq2yqKupsЇ2zq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïäóôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöòéõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñèõùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúõï÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒEra˜ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8yqOµªyƾŒÏÈ‹ÎÇŠÍÆ~ÈÀ\º°K³§=“ˆ2{r‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïäóôëöôëöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöñèõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñèõùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúùõúõï÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ BnN†ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒœšX|w2yq2yq2yq;…M³¨d¾´|ÈÀ~ÈÀƒÊÃ^»±2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïäóôëöôëöôëöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöñèõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñèõùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúùõúùõúõï÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ Bn=sÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒÔÔÀÄð·¶–¢¡‚”’h‚2yq2yq2yq2yq2yq2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïäóôëöôëöôëöôëöôëöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöñèõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñèõùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúùõúùõúõï÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒEp/dÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèèèÀÄð·¶¢¬ª‚•“r‹ˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîäóôëöôëöôëöôëöôëöôëöôëöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöñèõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñèõøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúùõúùõúõï÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒFq*]ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîäóóëöóëöôëöôëöôëöôëöôëöôëöôëöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöñèõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñèõøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúùõúõï÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒFo,_ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîäóóëöóëöóëöôëöôëöôëöôëöôëöôëöôëöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöñèõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñèõøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùõúùõúõï÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒEm/aÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîäóóëöóëöóëöóëöóëöôëöôëöôëöôëöôëöôëöôëöôìöôìöôìöôìöôìöôìöôìöôìöôìöñèõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñèôøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúõï÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒCl2eÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýýýýþþþÿÿÿþþþÿÿÿÿÿÿÿÿÿÿÿÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîäóóëöóëöóëöóëöóëöóëöóëöôëöôëöôëöôëöôëöôëöôëöôìöôìöôìöôìöôìöôìöôìöñèõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñèôøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúõî÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒAj6hÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúóóóèèèßßßäääêêêêêêèèèçççâââßßßÝÝÝÜÜÜãããìììöööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîäóóëöóëöóëöóëöóëöóëöóëöóëöóëöôëöôëöôëöôëöôëöôëöôëöôìöôìöôìöôìöôìöñèõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñèôøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúùôúùôúùôúùôúùôúõî÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ>g¡Œ ¡Œ9`IyÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2yqtļpº…ÌÄ{Ç¿Qµ«:‡€2yq±±±2yqMµªHª Fž•Cš‘7„|6‚zVolááá÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîãòóëõóëõóëõóëõóëöóëöóëöóëöóëöóëöóëöóëöóëöóëöôëöôëöôëöôëöôëöôëöôëöñèôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñèôøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúùôúùôúõî÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ7_QÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿx‰‡8†~Zº°ÉÁ ×ÑŸÖÑR¶«;…ÐÐÐ2yqwĽf¾´f¾´i¿¶J®¤<ކ2yqyˆ‡÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîãòóêõóêõóëõóëõóëõóëõóëöóëöóëöóëöóëöóëöóëöóëöóëöôëöôëöôëöôëöôëöôëöñèôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñèôøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúùôúõî÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ5^W‡ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèèè•¡ `|z2yq2yq2yqvƽ2yqóóór„Bž“^»±~ÈÀÐÉŽÏÈ\º¯J°¥2yqûûûþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîãòóêõóêõóêõóëõóëõóëõóëõóëöóëöóëöóëöóëöóëöóëöóëöóëöóëöôëöôëöôëöôëöñèôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñèôøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúùôúùôúõî÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ4]b“ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8yq‚ÊÂ2yqþþþþþþ” Ÿ^z?pk2yq2yq2yqkÁ·2yqþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîãòóêõóêõóêõóêõóêõóëõóëõóëõóëõóëöóëöóëöóëöóëöóëöóëöóëöóëöóëöôëöôëöñèôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñçôøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúøóúøóúõî÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ3_Z‹ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîãòóêõóêõóêõóêõóêõóêõóêõóëõóëõóëõóëõóëöóëöóëöóëöóëöóëöóëöóëöóëöóëöñèôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñçôøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúøóúøóúõî÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ4cNÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîãòóêõóêõóêõóêõóêõóêõóêõóêõóêõóëõóëõóëõóëõóëöóëöóëöóëöóëöóëöóëöóëöñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñçôøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúøóúõî÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ6fBuÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîãòóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóëõóëõóëõóëõóëöóëöóëöóëöóëöóëöóëöñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïñçôøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóúøóúõî÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ7i¡Œ8m=rÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîãòóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóëõóëõóëõóëõóëöóëöóëöñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðçô÷òù÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùõí÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ?x@uÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8yq‚ÊÂ2yqJup€‘œš¢¬ª°·¶ÒÔÔèèè3yq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîãòóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóëõóëõóëõóëõóëõóëöñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðçô÷òù÷òù÷òù÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùøóùõí÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒI…AyÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8yq‚ÊÂI®¤2yq2yq2yq2yq2yqKupsЇ2zq‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîãòóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóëõóëõóëõóëõñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðçô÷òù÷òù÷òù÷òù÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùøóùøóùõí÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ S@yÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8yqOµªyƾŒÏÈ‹ÎÇŠÍÆ~ÈÀ\º°K³§=“ˆ2{r‚ÊÂ2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîãòóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóëõóëõñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðçô÷òù÷òù÷òù÷òù÷òù÷òù÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùøóùøóùôí÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ U”>wÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒœšX|w2yq2yq2yq;…M³¨d¾´|ÈÀ~ÈÀƒÊÃ^»±2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîãòóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðçô÷ñù÷ñù÷òù÷òù÷òù÷òù÷òù÷òù÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùøóùøóùôí÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒR“DzÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒÔÔÀÄð·¶–¢¡‚”’h‚2yq2yq2yq2yq2yq2yqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîãòóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðçô÷ñù÷ñù÷ñù÷ñù÷òù÷òù÷òù÷òù÷òù÷òù÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùøóùôí÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒM‘T‡ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèèèÀÄð·¶¢¬ª‚•“r‹ˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîãòóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðçô÷ñù÷ñù÷ñù÷ñù÷ñù÷òù÷òù÷òù÷òù÷òù÷òù÷òùøòùøòùøòùøòùøòùøòùøòùøóùøóùôí÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒHv§ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîãòóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðçô÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷òù÷òù÷òù÷òù÷òù÷òù÷òùøòùøòùøòùøòùøòùøòùøòùôí÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒN›2оÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîãòóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðçô÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷òù÷òù÷òù÷òù÷òù÷òù÷òùøòùøòùøòùøòùøòùôí÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒY¥0‰¿ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýýýýþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîãòóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðçô÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷òù÷òù÷òù÷òù÷òù÷òù÷òùøòùøòùøòùôí÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ `¬u¬ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüøøøõõõóóóóóóõõõõõõöööõõõöööööööööõõõööö÷÷÷ùùùýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈø°Œø°Œø°Œø°Œø°Œø°Œüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîãòóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðçô÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷òù÷òù÷òù÷òù÷òù÷òù÷òùøòùøòùôí÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ a°]–ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúúúóóóêêêâââÝÝÝÙÙÙÖÖÖÓÓÓÐÐÐÌÌÌÏÏÏÓÓÓÖÖÖÚÚÚÞÞÞãããíííõõõüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈþôîþôîþôîþôîþôîþôîüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîãòóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðçô÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷òù÷òù÷òù÷òù÷òù÷òù÷òùôí÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ[©W“ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥¦¥œžœœžœœžœœžœœžœœžœœžœœžœœžœœžœœžœœžœœžœœžœœžœœžœœžœ‘ÔÔÔôôôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈø°Œø°Œø°Œø°Œø°Œø°Œüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîãòóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðçô÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷òù÷òù÷òù÷òù÷òùôí÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒQ \›ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœžœíííççççççççççèççèçèèèèèèèéèèéèèéèééééééééééééèèè­¯®œžœ———ñññÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈþôîþôîþôîþôîþôîþôîüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîãòòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõñçóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðçô÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷òù÷òù÷òùôí÷éÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒNœi©ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœžœäää‰yqkQAkQAkQAkQAkQAkQAkQAkQAkQAlQBlQBlQBlQBlQBºº¸ÂœžœžŸŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈø°Œø°Œø°Œø°Œø°Œø°ŒûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîãòòéôòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõðæóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðçô÷ñø÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷òù÷òùôíöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒQŸ rµÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœžœäääfJ:lZlZlZlZlZlZlZlZlZlZlZlZ€[I€[I»·³ÄÄÄÉÉÉœžœ¯°°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈþôîþôîþôîþôîþôîþôîüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïîãòòéôòéôòéôòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõðæóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðçô÷ñø÷ñø÷ñø÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñùôìöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒX§`¤ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœžœäääcG7~ZG~ZG~ZG~ZG~ZG~ZG~ZG~ZG~ZG~ZG~ZG~ZGwUCiK;ƒul}s†€ÊÌËœžœÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈø°Œø°Œø°Œø°Œø°Œø°ŒûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíãòòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõðæóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðçô÷ñø÷ñø÷ñø÷ñø÷ñø÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñùôìöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒU¥S–ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœžœåååcH8uUBuTArQ>oM9kI5kH4kH4kH4kH4kH4hF3X;+N5&Y<+O5&eD1cH9ää䜞œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈþôîþôîþôîþôîþôîþôîüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíãòòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõðæóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðçô÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñùôìöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒT¦S“ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿœžœæææcH8nO>nP>nP>nO>lM4W5#X5!^C4ãã㜞œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíãòòèôòèôòèôòéôòéôòéôòéôòéôòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõðæóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðçô÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñùôìöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒXª[™ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœžœæææoUF»©Ÿ»©Ÿ»©Ÿ»©Ÿº©žº¨ž¹§œ´ •´ •­™gb`[YXwqXWV¡„¯šŽqZLââ✞œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíãòòèôòèôòèôòèôòèôòéôòéôòéôòéôòéôòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõðæóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðçô÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñùôìöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ^°nªÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœžœçççtZJÑ·¨Ò¸¨Ò¸¨Ñ·¨Ñ·§Ñ¶¦Ðµ¥Ï´¤Ï´¤Î³¢¯™ŒTTS‘€vRRRˆzqǧ”x_PàààœžœÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíâòòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõóéõóéõóéõóéõðæóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðçô÷ðø÷ðø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñùóìöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ`³%ƒ¼ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœžœçççtXIʬšÇ¯·Â³±ÑÅó¡É«˜È©–Ǩ•Ǩ•Ʀ“Ť‘‹~u†vlRRR•~o¼–€v[KàààœžœÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíâòòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõóéõóéõðæóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðçô÷ðø÷ðø÷ðø÷ðø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñù÷ñù÷ñù÷ñù÷ñù÷ñù÷ñùóìöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œbµ8’ÉÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœžœçççtXHģ޲Ŷßú÷îýü±ÜÑÁ¡ŒÁžˆ¿œ†¿œ†¾šƒ½˜¸”~Šzoukd³‰o±†ksWFßßßœžœÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíâòòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéôòéõòéõóéõóéõóéõóéõðæóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðçô÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñù÷ñù÷ñù÷ñù÷ñù÷ñùóìöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œb¶9’ÈÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœžœèèèsWF½™¯ÑÄùþþþÿÿ¾ë⸚¹’y·v·v¶s´‹p²ˆm£i®ƒf­c¬`sUDßßßœžœÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíâòòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõðæóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðæô÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñù÷ñù÷ñù÷ñùóìöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œd¸,ƒ¶ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœžœèèèqUD¶Žt¯¦¹åÜËó¤³‰n±†j¯ƒf¯ƒf­b«~_©{[§xW¥uS£rP¡oLpR?àààœžœÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíâòòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõðæóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðæôöðøöðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñù÷ñùóìöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ h¼r¢ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœžœèèèpR@«€b­dª„i§rª`¨|\¦yX¤vU¤vU£sQ pMžlIœiEšfA˜c=–_9mN:àààœžœÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíâñòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõðæóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðæóöðøöðøöðøöðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñùóìöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒlÁ[‹ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœžœçç瘆{tXGtXHtXHtXGtWFsWFrUEqUDqUDqTDpSCoSAoRAnQ@mQ?mP>‰tgßßßœžœÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíâññçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôðæóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðæóöðøöðøöðøöðøöðøöðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñøóìöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒrÅ)ZÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœžœéééææææææææææææææææææææææææååååååååååååååååååååååååääääääéé霞œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíâññçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôðæóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðæóöðøöðøöðøöðøöðøöðøöðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñø÷ñøóìöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒzË=oÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§§§œžœœžœœžœœžœœžœœžœœžœœžœœžœœžœœžœœžœœžœœžœœžœœžœœžœœžœœžœœžœ§§§ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíâññçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôðåóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðæóöïøöïøöðøöðøöðøöðøöðøöðøöðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ñø÷ñø÷ñø÷ñø÷ñøóìöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ k»YŒÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíâññçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôðåóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðæóöïøöïøöïøöïøöðøöðøöðøöðøöðøöðøöðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ñø÷ñø÷ñøóìöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ\© iÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíâññçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôðåóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïðæóöïøöïøöïøöïøöïøöïøöðøöðøöðøöðøöðøöðøöðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ñø÷ñøóìöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒT^‘ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíâññçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôðåóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïæóöïøöïøöïøöïøöïøöïøöïøöðøöðøöðøöðøöðøöðøöðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðø÷ðøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ_£ R‡ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþüüüúúúüüüüüüýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíâññçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôðåóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïæóöïøöïøöïøöïøöïøöïøöïøöïøöïøöðøöðøöðøöðøöðøöðøöðø÷ðø÷ðø÷ðø÷ðø÷ðøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œj«N…ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúóóóðððíííëëëëëëëëëíííñññ÷÷÷úúúþþþÿÿÿÿÿÿ¯°¯z|{ÐÑÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíâññçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôðåóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïæóöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöðøöðøöðøöðøöðøöðøöðø÷ðø÷ðø÷ðøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ"m© PˆÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüòòòçççÝÝÝÓÓÓÎÎÎÊÊÊÊÊÊÉÉÉÍÍÍÕÕÕØØØãããððð÷÷÷———’’’[]\ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíâññçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôðåóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïæóöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöðøöðøöðøöðøöðøöðøöðø÷ðø÷ðøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ!fI‚ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúúúìììÜÜÜžžknmced_ca_ba\`^]a_]a_aecill–––—˜—‹ŒŒ~€ƒ„ƒ¡¢¢___ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíâññçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôðåóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïæóöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöðøöðøöðøöðøöðøöðøöðøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒU‰8rÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúúúììì³³³gji\_^]a_bdcgki_b`Z^\VZXSVTQTSSVUVZX]a`ORPˆˆˆ©ªª\]\ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíâññçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôðåóéÝïéÝïÛÒà···¾¾¾ÇÇÇÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïæóöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöðøöðøöðøöðøöðøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ Iz6qÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððð–—–_cabedrvt€ƒy~|ƒƒˆ†„‰‡ƒˆ†„ƒy|{kmlUVVQRRZ^\wxw‰‰‰žžž_a`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíâññçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôðåóéÝïéÝïÛÒà···½½½ÇÇÇÓÓÓáááìììõõõúúúýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïæóöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöðøöðøöðøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ2aEÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¸¸¸fhgnqo€„‚„ˆ†¹½»ÛÞÞèêêëííèêêëííèêêÛÞÞ¹½»…ƒlpnXZYª¬ª®¯¯tut‡‡‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíâññçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôïåóéÝïéÝïÛÒà···¼¼¼ÅÅÅÐÐÐÝÝÝçççïïïõõõùùùúúúûûûüüüýýýýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïæóöï÷öï÷öïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöðøöðøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒBD‚ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmookml…ƒ·»ºçêêèëêÝâßÐ×Ô³º·˜›•›˜¬²¯ØÜÚæéèçêê·»º„‚kllfih   úúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿ™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíâññçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôïåóéÝïéÝïÛÒ൵µºººÁÁÁËËËÖÖÖßßßçççíííñññóóóõõõ÷÷÷øøøùùùûûûüüüýýýýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïæóöï÷öï÷öï÷öï÷öïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡ŒHA‚ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿbdd}‚€ÊÍÍìîîÕÛÙÏ×ÓÏ×ÓŸ¥¢y~{|~txvhljˆŠÇÎËÜáßìîîÊÍÍ{}†††×××øøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíáññçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôïåóéÝïéÝïÛÒ൵µ¹¹¹¾¾¾ÅÅÅÎÎÎÖÖÖÝÝÝâââæææéééëëëîîîðððòòòôôôööö÷÷÷ùùùúúúûûûüüüýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïæóõï÷õï÷öï÷öï÷öï÷öïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ Q@‚ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿprr³·µìîîÒÙÖÌÔÐÏ×ÓÏ×Óž£¡«®­®±°²µ´¬¯®|¯¶³Ï×ÓÖÝÚìîî³·µ‰‹ŠØØØøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíáññæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôïåóéÝïéÝïÛÒà´´´···ººº¿¿¿ÅÅÅËËËÐÐÐÕÕÕØØØÜÜÜßßßâââåååèèèëëëíííïïïñññôôôõõõ÷÷÷ùùùúúúûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïæóõï÷õï÷õï÷õï÷öï÷öï÷öï÷öïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ'ZA„ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~‚ãååÊÏΜ¢Ÿ†ƒ”™—¥ª¨¬²¯›Ÿž§«©«®­­°¯¢ ÈÐÌÏ×ÓÏ×Óßäâãå倃‚âââûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ŽŽŽ«««ÔÔÔñññüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíáññæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôïåóéÝïéÝïÛÒà³³³µµµ···ººº½½½ÁÁÁÅÅÅÈÈÈËËËÎÎÎÑÑÑÔÔÔ×××ÛÛÛÞÞÞáááäääçççêêêíííïïïñññóóóõõõ÷÷÷øøøúúúûûûüüüýýýýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïæóõï÷õï÷õï÷õï÷õï÷õï÷öï÷öï÷öï÷öïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ.cB…ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„‰‡ëííš ¡Ÿw|z“—–—𙥫¨¸À¼ž£¡¢§¥ª±®µ¼¹¥«©·¾»ÍÕÑÒÙÖëí탈†ñññýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬…CY QkÆe„ár–ëxîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíáññæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôïåóéÝïéÝïâ×çÎÈÑÁ¾Âµµµ¶¶¶¸¸¸ººº¼¼¼¾¾¾ÀÀÀÃÃÃÅÅÅÇÇÇÊÊÊÍÍÍÐÐÐÓÓÓÖÖÖÙÙÙÝÝÝàààãããæææéééëëëîîîðððóóóôôôöööøøøùùùûûûüüüýýýýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõï÷õï÷õï÷õï÷õï÷õï÷õï÷öï÷öï÷öï÷öïøöïøöïøöïøöïøöïøöïøöïøöïøöïøöïøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ3kEŠÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„‰‡ëí혛ž¢ {€}Œ‘”’£¨¦Ï×ÓÏ×ÓÏ×Ó¢ ¡ ¨¬ª‰Ž‹˜›ÈÐÌëíí…‰‡øøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬…CY QkÆe„ár–ëxîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíáññæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôïåóéÝïéÝïéÝïéÝïéÝïéÝïÛÒàÏÉÒÅÂǹ¹º···¹¹¹ººº¼¼¼¾¾¾¿¿¿ÁÁÁÄÄÄÆÆÆÉÉÉÌÌÌÏÏÏÒÒÒÕÕÕÙÙÙÜÜÜßßßâââåååèèèëëëíííðððòòòôôôööö÷÷÷ùùùúúúûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõî÷õî÷õï÷õï÷õï÷õï÷õï÷õï÷õï÷öï÷öï÷öï÷öïøöïøöïøöïøöïøöïøöïøöïøöïøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ4pIŽÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿˆ‹Šãå帿¼›¡ŸˆŽ‹•“ž¤¡ÌÔÐÀÈÄÏ×ÓÈÐÌ–›™ž¡ —›™•’†ˆˆ´º·ãå剌‹ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬…CY QkÆe„ár–ëxîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíáññæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôïåóéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïßÕäÕÍÙÉÄ˼»½···¸¸¸ººº»»»½½½¿¿¿ÁÁÁÃÃÃÆÆÆÉÉÉËËËÎÎÎÑÑÑÕÕÕØØØÛÛÛÞÞÞáááäääçççêêêíííïïïñññóóóõõõ÷÷÷ùùùúúúûûûüüüýýýýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõî÷õî÷õî÷õî÷õï÷õï÷õï÷õï÷õï÷õï÷õï÷öï÷öï÷öï÷öïøöïøöïøöïøöïøöïøöïøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ2s M‘ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°±°³·µÚßÝÏ×ÓÈÐÌÏ×Ó£ •’ŠŽ‘–”­µ±ž£¡Š‚†„}€ŒÔØÖ³·µ±±±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬…CY QkÆe„ár–ëxîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíáññæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôïåóíãòìàñêÞðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïæÚëÙÐÝÌÆÎ¿½À···¸¸¸¹¹¹»»»½½½¾¾¾ÀÀÀÃÃÃÅÅÅÇÇÇÊÊÊÍÍÍÐÐÐÓÓÓ×××ÚÚÚÝÝÝáááãããçççéééìììîîîñññóóóõõõöööøøøùùùûûûüüüýýýýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõî÷õî÷õî÷õî÷õî÷õî÷õï÷õï÷õï÷õï÷õï÷õï÷õï÷öï÷öï÷öï÷öïøöïøöïøöïøöïøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ0sN’ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒÊÍÍÕÛØÏ×ÓÁÈÄ€…ƒz|}‚€€…ƒŒ’ÎÖÒ·¿»™žœ²¹¶ÏÕÒÊÍÍ’‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬…CY QkÆe„ár–ëxîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíáññæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôðæóîãòíáñëßðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïÜÒàÏÉÒ¿Ĺ¹º···¹¹¹ººº¼¼¼¾¾¾ÀÀÀÂÂÂÄÄÄÇÇÇÉÉÉÌÌÌÏÏÏÒÒÒÖÖÖÙÙÙÜÜÜßßßãããåååéééëëëíííðððòòòôôôööö÷÷÷ùùùúúúûûûüüüýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõî÷õî÷õî÷õî÷õî÷õî÷õî÷õï÷õï÷õï÷õï÷õï÷õï÷õï÷öï÷öï÷öï÷öïøöïøöïøöïøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ>¡Œ0rK‹ÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹·»ºÖÜÙÍÔÐŒëëëÙÙÙ¥¦¦—œšÏ×ÓÏ×ÓÑÙÕÓØÖ·»º‘‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬…CY QkÆe„ár–ëxîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíáññæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñæóïäòíâñëßðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïßÕäÒËÕÉÄ˼»½···¹¹¹ººº»»»½½½¿¿¿ÁÁÁÄÄÄÆÆÆÉÉÉËËËÎÎÎÑÑÑÕÕÕØØØÛÛÛÞÞÞâââåååèèèêêêíííïïïñññóóóõõõ÷÷÷ùùùúúúûûûüüüýýýýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õï÷õï÷õï÷õï÷õï÷õï÷õï÷öï÷öï÷öï÷öïøöïøóëöéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ>€ E‚ÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¦§¦†‹‰µ¹·ÄÊÈœ Ÿ—›™£¨¦ÒØÕÐÖÓÄÉǯ³±…Šˆ©«ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬…CY QkÆe„ár–ëxîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíáñðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôïåóîãòìàñéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïâ×çÕÍÙÌÆÎ¿½À···¸¸¸¹¹¹ÈÈÈËËËÐÐÐÓÓÓ×××çççéééìììïïïñññóóóõõõøøøùùùûûûýýýýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õï÷õï÷õï÷õï÷õï÷õï÷õï÷öï÷öï÷öï÷óêõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒN?yÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²²²Œ‡Š‰†‹‰…Šˆ…Šˆ‡Š‰Ž···ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬…CY QkÆe„ár–ëxîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíáñðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôðæóîãòìáñêÞðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïæÚëÜÒàÏÉÒ¿ĸ¸¸¹¹¹ººº¼¼¼¾¾¾ÀÀÀÂÂÂÅÅÅÇÇÇÌÌÌÏÏÏÓÓÓÖÖÖÝÝÝàààãããæææéééëëëðððòòòööö÷÷÷ùùùûûûüüüýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õï÷õï÷õï÷õï÷õï÷õï÷õï÷öï÷óêõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ Y™9rÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬…CY QkÆe„ár–ëxîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíáñðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôïäóíáñëßðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïÒËÕÅÂǽ»½···¹¹¹ººº»»»½½½ÁÁÁÄÄÄÆÆÆÉÉÉÏÏÏÒÒÒÕÕÕØØØÜÜÜßßßåååèèèíííïïïñññõõõ÷÷÷ùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õï÷õï÷õï÷õï÷õï÷õï÷õï÷óêõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ W˜6oÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬…CY QkÆe„ár–ëxîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíáñðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôðåóíâòìàñéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïâ×çÕÍÙÉÄË¿½Á···¹¹¹»»»½½½¿¿¿ÃÃÃÅÅÅÈÈÈËËËÍÍÍÑÑÑÞÞÞáááäääçççìììïïïñññõõõ÷÷÷øøøúúúûûûüüüýýýýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõí÷õí÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õï÷õï÷õï÷õï÷õï÷òêõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ P‘8qÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬…CY QkÆe„ár–ëxîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíáñðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôðæóîãòìáñêÞðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïæÚë¿ķ··¸¸¸»»»¼¼¼¾¾¾ÀÀÀÃÃÃÅÅÅÊÊÊÐÐÐÓÓÓÖÖÖÙÙÙàààãããæææëëëîîîðððóóóôôôööö÷÷÷ùùùûûûûûûýýýýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõí÷õí÷õí÷õí÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õï÷õï÷õï÷òêõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒLŽ>wÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþüüüúúúüüüüüüýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬…CY QkÆe„ár–ëxîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíáñðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôñçóïäóíâñëßðéÝïéÝïéÝïéÝïéÝïéÝïÒËÕÅÂǹ¹º···¹¹¹ººº¼¼¼¿¿¿ÁÁÁÆÆÆÉÉÉÌÌÌÕÕÕÙÙÙßßßâââåååèèèëëëíííïïïñññôôôõõõ÷÷÷ùùùúúúûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõí÷õí÷õí÷õí÷õí÷õí÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õï÷òêõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒIŒE}ÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúóóóðððíííëëëëëëëëëíííñññ÷÷÷úúúþþþÿÿÿÿÿÿ¯°¯z|{ÐÑÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬…CY QkÆe„ár–ëxîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíáñðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôðåóíãòëßðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïßÕäÕÍÙÉÄ˼»½¸¸¸ººº»»»¿¿¿ÁÁÁÆÆÆÎÎÎÑÑÑÕÕÕØØØÛÛÛÞÞÞáááäääçççêêêíííïïïñññóóóõõõ÷÷÷ùùùúúúûûûüüüýýýýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõí÷õí÷õí÷õí÷õí÷õí÷õí÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷òêõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒB„HÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüòòòçççÝÝÝÓÓÓÎÎÎÊÊÊÊÊÊÉÉÉÍÍÍÕÕÕØØØãããððð÷÷÷———’’’[]\ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬…CY QkÆe„ár–ëxîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíáñðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôðæóìàñêÞðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïÙÐÝÌÆÎ¿ķ··¸¸¸¹¹¹½½½¾¾¾ÀÀÀÃÃÃÅÅÅÇÇÇÊÊÊÍÍÍÐÐÐÓÓÓ×××ÚÚÚÝÝÝáááãããçççéééìììîîîñññóóóõõõöööøøøùùùûûûüüüýýýýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷òêõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ3tIÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúúúìììÜÜÜžžknmced_ca_ba\`^]a_]a_aecill–––—˜—‹ŒŒ~€ƒ„ƒ¡¢¢___ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬…CY QkÆe„ár–ëxîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíáñðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôñçóïäòëßðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïÜÒàÏÉÒ¹¹º···¹¹¹ººº¼¼¼¾¾¾ÀÀÀÂÂÂÄÄÄÇÇÇÉÉÉÌÌÌÏÏÏÒÒÒÖÖÖÙÙÙÜÜÜßßßãããåååéééëëëíííðððòòòôôôööö÷÷÷ùùùúúúûûûüüüýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷òêõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ%fJ€ÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúúúììì³³³gji\_^]a_bdcgki_b`Z^\VZXSVTQTSSVUVZX]a`ORPˆˆˆ©ªª\]\ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬…CY QkÆe„ár–ëxîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíáñðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòéôòèôïåóîãòëàðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïßÕäÒËÕÉÄ˼»½···¸¸¸ººº»»»½½½¿¿¿ÁÁÁÃÃÃÆÆÆÉÉÉËËËÎÎÎÑÑÑÕÕÕØØØÛÛÛÞÞÞâââåååèèèêêêíííïïïñññóóóõõõ÷÷÷ùùùúúúûûûüüüýýýýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷òêõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒbUŒÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððð–—–_cabedrvt€ƒy~|ƒƒˆ†„‰‡ƒˆ†„ƒy|{kmlUVVQRRZ^\wxw‰‰‰žžž_a`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬…CY QkÆe„ár–ëxîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíáñðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéôðæóîãòìàñéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïâ×çÙÐÝÌÆÎ¿½À···¸¸¸¹¹¹»»»½½½¿¿¿ÁÁÁÃÃÃÅÅÅÈÈÈËËËÍÍÍÐÐÐÓÓÓ×××ÚÚÚÝÝÝáááäääçççéééìììïïïñññóóóõõõöööøøøùùùûûûüüüýýýýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õî÷õî÷õî÷õî÷õî÷õî÷õî÷òêõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ8y [’ÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¸¸¸fhgnqo€„‚„ˆ†¹½»ÛÞÞèêêëííèêêëííèêêÛÞÞ¹½»…ƒlpnXZYª¬ª®¯¯tut‡‡‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬…CY QkÆe„ár–ëxîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíáñðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéôòéõòéõñçôïäóíáñêÞðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïæÚëÜÒàÏÉÒ¿ķ··¸¸¸¹¹¹ººº¼¼¼¾¾¾ÀÀÀÂÂÂÅÅÅÇÇÇÊÊÊÌÌÌÏÏÏÓÓÓÖÖÖÙÙÙÝÝÝàààãããæææéééëëëîîîðððòòòôôôööö÷÷÷ùùùúúúûûûüüüýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õî÷õî÷õî÷õî÷õî÷òéõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒJ‹_–ÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmookml…ƒ·»ºçêêèëêÝâßÐ×Ô³º·˜›•›˜¬²¯ØÜÚæéèçêê·»º„‚kllfih   úúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬…CY QkÆe„ár–ëxîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíáñðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõòèôðåóíâñëàñéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïßÕäÒËÕÅÂǽ»½···¹¹¹ººº»»»½½½¿¿¿ÁÁÁÄÄÄÆÆÆÉÉÉËËËÏÏÏÒÒÒÕÕÕØØØÜÜÜßßßâââåååèèèëëëíííïïïñññôôôõõõ÷÷÷ùùùúúúûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õî÷õî÷õî÷òéõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒW˜bšÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿbdd}‚€ÊÍÍìîîÕÛÙÏ×ÓÏ×ÓŸ¥¢y~{|~txvhljˆŠÇÎËÜáßìîîÊÍÍ{}†††×××øøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬…CY QkÆe„ár–ëxîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíáñðäóðäóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõóéõîãòìáñêÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïâ×çÕÍÙÉÄË¿½Á···¸¸¸¹¹¹»»»½½½¿¿¿ÁÁÁÃÃÃÅÅÅÈÈÈËËËÍÍÍÑÑÑÔÔÔ×××ÛÛÛÞÞÞáááäääçççìììïïïñññóóóõõõ÷÷÷øøøúúúûûûüüüýýýýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõíöõíöõí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õî÷òéõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ]žbšÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿprr³·µìîîÒÙÖÌÔÐÏ×ÓÏ×Óž£¡«®­®±°²µ´¬¯®|¯¶³Ï×ÓÖÝÚìîî³·µ‰‹ŠØØØøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬…CY QkÆe„ár–ëxîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïíáñðäóðäóðäóðäóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéôòéõòéõóéõóéõóéõóéõóéõóéõóéõñçóïåóêÞðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïæÚëÙÐÝÏÉÒ¿ķ··¸¸¸¹¹¹»»»¼¼¼¾¾¾ÀÀÀÃÃÃÅÅÅÇÇÇÊÊÊÍÍÍÐÐÐÓÓÓÖÖÖÝÝÝàààãããæææéééëëëîîîðððóóóôôôööö÷÷÷ùùùûûûûûûýýýýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóõíöõíöõíöõíöõí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷òéõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒP‘]•ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~‚ãååÊÏΜ¢Ÿ†ƒ”™—¥ª¨¬²¯›Ÿž§«©«®­­°¯¢ ÈÐÌÏ×ÓÏ×Óßäâãå倃‚âââûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬…CY QkÆe„ár–ëxîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïìáñðäóðäóðäóðäóðäóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõñèôðåóíâñëßðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïÜÒàÒËÕÅÂǹ¹º···¹¹¹ººº¼¼¼¾¾¾¿¿¿ÁÁÁÄÄÄÆÆÆÉÉÉÏÏÏÒÒÒÕÕÕÙÙÙÜÜÜßßßâââåååèèèëëëíííïïïñññôôôõõõ÷÷÷ùùùúúúûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïïåóôìöôìöõíöõíöõíöõíöõí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷òéõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒAƒTŒÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„‰‡ëííš ¡Ÿw|z“—–—𙥫¨¸À¼ž£¡¢§¥ª±®µ¼¹¥«©·¾»ÍÕÑÒÙÖëí탈†ñññýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬…CYëxîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïìáñïäóïäóðäóðäóðäóðäóðäóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéõòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõðæóéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïÕÍÙÉÄ˼»½···¸¸¸ººº»»»½½½ÁÁÁÃÃÃÆÆÆÕÕÕØØØÛÛÛÞÞÞáááäääçççïïïñññõõõ÷÷÷ùùùúúúýýýþþþÿÿÿÿÿÿéÝïéÝïïåóôìöôìöôìöõíöõíöõí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷òéõ¾¾¾ÈÈÈÕÕÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ9|IÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„‰‡ëí혛ž¢ {€}Œ‘”’£¨¦Ï×ÓÏ×ÓÏ×Ó¢ ¡ ¨¬ª‰Ž‹˜›ÈÐÌëíí…‰‡øøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ QkÆe„ár–îyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïìáñïäóïäóïäóðäóðäóðäóðäóðäóðäóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõïäòìáñêÞðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïæÚëÙÐÝÌÆÎ¿ķ··¹¹¹»»»¾¾¾ÀÀÀÃÃÃÅÅÅÊÊÊÍÍÍÐÐÐÓÓÓ×××ÚÚÚàààãããçççìììîîîñññõõõöööûûûüüüýýýþþþóíöéÝïïåóôìöôìöôìöôìöõíöõíöõí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷éÝïéÝïÛÒà···ÈÈÈãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ=;tÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿˆ‹Šãå帿¼›¡ŸˆŽ‹•“ž¤¡ÌÔÐÀÈÄÏ×ÓÈÐÌ–›™ž¡ —›™•’†ˆˆ´º·ãå剌‹ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ QkÆe„ár–ëxîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïìáñïäóïäóïäóïäóïäóðäóðäóðäóðäóðäóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõñèôïåóíâòëßðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïÏÉÒ¿ķ··¹¹¹ººº¼¼¼ÀÀÀÂÂÂÄÄÄÇÇÇÉÉÉÌÌÌÒÒÒÕÕÕÙÙÙßßßãããåååëëëíííðððôôôöööùùùúúúñëôéÝïéÝïïåóôìöôìöôìöôìöôìöõíöõíöõíöõíöõí÷õí÷õí÷õí÷õí÷õí÷õí÷õí÷òéõéÝïéÝïÛÒà···ÈÈÈãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒLŽ2iÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°±°³·µÚßÝÏ×ÓÈÐÌÏ×Ó£ •’ŠŽ‘–”­µ±ž£¡Š‚†„}€ŒÔØÖ³·µ±±±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬îyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïìàñïäóïäóïäóïäóïäóïäóïäóðäóðäóðäóðäóðäóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõòéõîãòëàñéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïßÕäÒËÕÉÄ˼»½¸¸¸ººº»»»½½½¿¿¿ÁÁÁÆÆÆÉÉÉËËËÑÑÑÕÕÕØØØÛÛÛêêêíííñññóóóîèñéÝïéÝïïåóôìöôìöôìöôìöôìöõíöõíöõí÷õí÷õí÷õí÷õí÷õí÷õí÷òéõéÝïéÝïÛÒà···ÈÈÈãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒVœ3fÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒÊÍÍÕÛØÏ×ÓÁÈÄ€…ƒz|}‚€€…ƒŒ’ÎÖÒ·¿»™žœ²¹¶ÏÕÒÊÍÍ’‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ QkÆe„ár–îyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïìàñïäóïäóïäóïäóïäóïäóïäóïäóïäóðäóðäóðäóðäóðäóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõñçôïäóìáñêÝïéÝïéÝïéÝïéÝïéÝïéÝïÙÐÝÌÆÎ¿½À···¸¸¸¹¹¹½½½¿¿¿ÁÁÁÅÅÅÈÈÈËËËÍÍÍÐÐÐÓÓÓ×××ÝÝÝáááçççéééêãíéÝïéÝïïåóôìöôìöôìöôìöôìöôìöôìöôìöõíöõíöõíöõí÷õí÷õí÷õí÷õí÷õí÷òéõéÝïéÝïÛÒà···ÈÈÈïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒSž>jÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹·»ºÖÜÙÍÔÐŒëëëÙÙÙ¥¦¦—œšÏ×ÓÏ×ÓÑÙÕÓØÖ·»º‘‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸÒkŒîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬¡RkÇe…ár–îyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáááÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïìàñïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóðäóðäóðäóðäóðäóðäóðåóðåóðåóðåóðåóðåóðåóÔÊÖðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõòéõíâñëßðéÝïéÝïéÝïéÝïéÝïéÝïÜÒàÏÉÒ······¹¹¹¾¾¾ÀÀÀÄÄÄÇÇÇÊÊÊÏÏÏÓÓÓÙÙÙÝÝÝäÝçéÝïïåóôìöôìöôìöôìöôìöôìöôìöôìöôìöõíöõíöõí÷õí÷õí÷õí÷õí÷òéõéÝï¾¾¾ÈÈÈãããÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒD“>hÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¦§¦†‹‰µ¹·ÄÊÈœ Ÿ—›™£¨¦ÒØÕÐÖÓÄÉǯ³±…Šˆ©«ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸÒkŒîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬‘IaìxžîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáááÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïìàñïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóðäóðäóðäóðäóðäóðåóðåóðåóðåóðåóðåóðåóÔÊÖðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõðæóíãòëàñéÝïéÝïéÝïéÝïéÝïéÝïéÝïßÕäÒËÕ½»½¹¹¹ºººÁÁÁÄÄÄÆÆÆÉÉÉéÝïéÝïïäóôìöôìöôìöôìöôìöôìöôìöôìöôìöõíöõíöõíöõí÷õí÷õí÷òéõéÝïéÝïÛÒà···ÈÈÈãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒA’?kÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²²²Œ‡Š‰†‹‰…Šˆ…Šˆ‡Š‰Ž···ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸÒkŒîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬¨Upº^|ÔlŽåt™ìxžîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáááÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïìàñïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóðäóðäóðäóðäóðäóðåóðåóðåóðåóðåóðåóÔÊÖðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõñçôîãòìáñêÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïâ×çÕÍÙÌÆÏ¿½Á···¸¸¸¹¹¹»»»½½½¿¿¿ÁÁÁÃÃÃ×ÑÚéÝïéÝïïäóôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöõíöõíöõíöõíöõí÷òéõéÝïéÝïÛÒà···ÈÈÈãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒIœ?nÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸ-îyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬Ëg‡ÔlŽár–éwœíyžîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ000ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïìàñïãóïãóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóðäóðäóðäóðäóðäóðåóðåóðåóðåó-+.ðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõñèôïåóíâñéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïæÚëØÐÝÏÉÒ¿ķ··¸¸¸¹¹¹»»»ÓÌÕéÝïéÝïïäóôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöõíöõíöõíöéÝïéÝïÛÒà···ÈÈÈãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒS§?pÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬âs—æu™éwœìxžíyžîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïìàñïãòïãòïãóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóðäóðäóðäóðäóðäóðäóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéôòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóëõòéõðæóíãòëßðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïÜÒàÒËÕÅÂÇÓËÖéÝïéÝïïäóôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöõíöõíöòéõ¾¾¾ÈÈÈÕÕÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ[®?sÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýúúúòòòêêêããããããàààÜÜÜÜÜÜÝÝÝãããéééðððúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸÓkîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬îyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâââÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïìàñïãòïãòïãòïãòïãóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóðäóðäóðäóðåóÕË×ðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéôòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóëõóëõóëõóëõñçôîäóìàñêÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïïäóôëöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöñéõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒU¨?uÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûïïïßßßÎÎν½½µµµ³³³®®®«««§§§¬¬¬´´´¾¾¾ÐÐÐäääöööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸÒkŒîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬îyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáááÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïìàñïãòïãòïãòïãòïãòïãòïãóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóðäóðäóðäóÔÊÖðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóëõóëõóëõóëõóëöóëöóëöñèõïåóìáñêßðéÝïéÝïéÝïéÝïéÝïéÝïéÝïïäóôëöôëöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöñèõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒO£?xÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpom75/75/75/75/75/75/75/75/75/75/75/75/75/75/75/75/75/pomÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸÒkŒîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬îyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáááÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïìàñïãòïãòïãòïãòïãòïãòïãòïãóïãóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóðäóðäóÔÉÖðäóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóëõóëõóëõóëõóëöóëöóëöóëöóëöòéõïæóíãòëßðéÝïéÝïéÝïïäóôëöôëöôëöôëöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöñèõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒO£>zÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ75/ŠŠŠˆˆˆˆˆˆˆˆˆ‡‡‡‡‡‡‡‡‡‡‡‡†††††††††„„„„„„„„„‚‚‚‚‚‚zzz75/ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸÒkŒîyŸìxžîyŸëxíyžÎiŠìxž»_}Ìh‰¸]{¹^{µ\y¸]{ÓkžPi±Zv½`~ËgˆÂc‚Ãc‚Ìh‰Üp“ÒkŒîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸa1A°YvîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬îyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáááÿÿÿýýýÿÿÿüüüþþþÝÝÝýýýÈÈÈÛÛÛÅÅÅÆÆÆÂÂÂÅÅÅâââ©©©¾¾¾ÊÊÊÚÚÚÐÐÐÑÑÑÛÛÛìììáááÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïìàñïãòïãòïãòïãòïãòïãòïãòïãòïãòïãóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóðäóÔÉÖðäóîãñðåóíâðïäòÐÆÓîãñ¼´¿ÎÅѹ±¼º²½·®¹¹±¼ÕËן˜¡³«µ¾µÀÍÄÐÄ»ÆÅ¼ÇÎÅÑÞÔáÔÊÖñæóñæóñæóñæóñæóÍÃÎb^c„~†ÜÒÞñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéôòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóëõóëõóëõóëõóëöóëöóëöóëöóëöóëöóëöóêõñçôîäóðæóôëöôëöôëöôëöôëöôëöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöñèõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒT¨>zÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ75/ˆˆˆTTTUUUUUUUUUUUUTTTTTTTTTSSSSSSRRRQQQQQQPPPOOO{{{75/ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÙn‘H$0ÂbîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬îyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóíöéÝïéÝïìàñïãòïãòïãòïãòïãòïãòïãòïãòïãòïãòïãòïãóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóïäóðäóðäóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóIEI¼³½ñæóÜÒÞ’‹“ñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóëõóëõóëõóëõóëöóëöóëöóëöóëöóëöóëöóëöóëöóëöôëöôëöôëöôëöôëöôëöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöñèõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ= ŒW¬>{ÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓ°µ˜xµ˜xµ˜xµ˜xµ˜xµ˜xµ˜xÓ°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ75/‰‰‰VVVVVVVVVVVVVVVVVVUUUUUUTTTTTTuuuRRRRRRQQQPPP|||75/ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸÒkŒîyŸîyŸîyŸÒkŒ8%îyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸt:Mt:MîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáááÿÿÿÿÿÿÿÿÿááá<<<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóí÷éÝïéÝïìàñïãòïãòïãòïãòïãòïãòïãòïãòïãòïãòïãòïãòïãòïãóïäóïäóïäóïäóïäóïäóïäóïäóïäóÓÉÖïäóðäóðäóÔÉÖ869ðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóëõóëõóëõóëõóëöóëöóëöóëöóëöóëöóëöóëöóëöóëöôëöôëöôëöôëöôëöôëöôëöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöñèõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ= ŒT§=zÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµ˜x¿ÌÒ®¾Æ¨¸Â§¸Á§¸Á¦·ÀªºÃµ˜xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ75/‚‚WWWŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸÅÅÅÅÅÅŸŸŸýýýŸŸŸRRRQQQ~~~75/ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸÒkŒîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸœOha1A°YvîyŸîyŸÂbH$0H$0¦ToîyŸîyŸîyŸîyŸîyŸîyŸîyŸ¦ToH$0H$0¦ToîyŸîyŸîyŸÂbƒBWîyŸîyŸîyŸîyŸàr–îyŸîyŸîyŸ¦ToH$0H$0¦ToîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ¦ToH$0H$0¦ToîyŸîyŸîyŸîyŸœOhœOhîyŸîyŸîyŸîyŸœOhƒBWÙn‘îyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÂbƒBWîyŸîyŸÙn‘ƒBWH$0¦ToîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáááÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒŒŒMMMÐÐÐÿÿÿÿÿÿÿÿÿ²²²MMMMMM²²²ÿÿÿÿÿÿÿÿÿÿÿÿ²²²MMMMMM²²²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿhhhéééÿÿÿÿÿÿÿÿÿéééhhhÿÿÿšššÙÙÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙÙÙMMM|||ÿÿÿÿÿÿÿÿÿÿÿÿ§§§ŒŒŒéééÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐÐÐŒŒŒÿÿÿÿÿÿéé錌ŒMMM²²²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôí÷éÝïéÝïêÝïëßðíáñîâñïãòïãòïãòïãòïãòïãòïãòïãòïãòïãòïãòïãóïãóïäóïäóïäóïäóïäóïäóïäóïäóÓÉÖïäóïäóðäóðäóðäóðäóðäóðäóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæó„~†b^cÄ»Æñæóñæóñæó©¡ªIEIIEI©¡ªñæóñçóñçóñçó„†IFIļÇñçôñçôñçôñçôļÇIFJIFJ©¢«ñçôñçôļÇupvòèôòèôòèôòèôòèôòèôž˜ …†ÝÔßòèôòèôòéôòéôòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõ†‡IGJÆ¿ÈóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóëõóëõóëõóëõóëöóëöóëöóëöóëöóëöóëöóëöóëöóëöôëöôëöôëöôëöôëöôëöôëöôìöôìöôìöôìöôìöôìöôìöôìöôìöôìöñèõéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ= ŒQ¢ƒ6dÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿB@;[[[œœœ±±±¥¥¥fffgggppp   ²²²”””qqq€€€¸¸¸±±±nnnlll¸¸¸¿¿¿XVSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸÒkŒîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ àr–îyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸt:Ma1Aàr–îyŸ¹^|ƒBWîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸH$0îyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸI`Ùn‘ÒjŒƒBWîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáááÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙÙÙÙÙÙÿÿÿÿÿÿŒŒŒÿÿÿÿÿÿÿÿÿÿÿÿ|||ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿšššéééááጌŒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûúüöñøðéôíãñéÝïÎÃÓéÝïéÝïéÝïéÝïéÝïéÝïëßðìàñîâòïäóïäóïäóïäóïäóðäó â×åðäóðäóðäóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóIEIñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôÕÌׄ†ñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéôòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóëõóëõóëõóëõóëöóëöóëöóëöóëöóëöóëöóëöóëöóëöôëöôëöôëöñèôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ= Œ8z-UÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿQQL···§§§ÄÄÄ{{{860;93<:4CA;CA;CA;CA;CA;CA;CA;B@;B@;B@;B@;ŽŽŒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸÒkŒîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸ_0@_0@_0@9&îyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸœOhH$0a1AœOhîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÂbH$0t:MîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÙn‘I`I`îyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáááÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿfffffffff===ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáááMMMÿÿÿÿÿÿÿÿÿÿÿÿ½½½½½½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéééššššššÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýüýÖÏØéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïêÞðìàñ`[a`[a`[a97:ðäóðäóðäóðäóðäóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóÄ»ÆIEIupvñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéôòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóëõóëõóëõóëõóëöóëöóëöóëöóëöóëöóëöóëöóëöóëöôëöñèôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ= Œ7t:ÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRQNÄÄͶ¶œœœ444ééé›[ZYLKHdc`““’¦¦¥þþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÇe…I_I_I_šNgîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕÕÕ™™™™™™™™™¥¥¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùõúóíöïçóêßðéÝïéÝïéÝïéÝïéÝïéÝïéÝïùȌ…Œ…†™’œîãòïäóðäóðäóðäóðäóðäóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóëõóëõóëõóëõóëöóëöóëöóëöóëöóëöóëöóëöóëöóëöñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ= Œ=t";ÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿQPMÏÏÏttt\\\›››æææ000©¨¦SSOA?;RRM~}ÀÀ¿úúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðððŒŒŒŒŒŒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúøûöñøðéôëáñéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïëßðìáñîâòðäóðäóðäóðäóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóëõóëõóëõóëõóëöóëöóëöóëöóëöóëöóëöóëöñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ= Œ?r-HÏÙ2îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµµ´rrpa_]^^[yyyŠŠŠååå™™™ bbbÚÚÚfff«ª¨ˆˆ†IGCKKH~~|ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒŒŒŒŒŒðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûúü÷óùòëõíãñéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïëßðìàñîâñïäòðäóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéôòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóëõóëõóëõóëõóëöóëöóëöóëöóëöóëöñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ= Œ ?q:\ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒ‹Š{zycb`^^ZRQNmmmÒÒÒØØØ ÉÉÉÐÐÐEC>ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþùõúóíöîåòêßðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïêÝïëßðíáñïäóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóëõóëõóëõóëõóëöóëöóëöóëöñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ?sIqÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƒ‚€kjh_^[XWU]][¢¢¢ÜÜÜmmm@>:ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú÷ûõï÷ïçóëáñéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïëßðíáñîãòðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóëõóëõóëõóëõóëöóëöóëöñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ?u!RÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³³²`_\IHDRQMba_¡¡¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûúüöñøòëõíãñéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïëßðíáñîâòïåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóëõóëõóëõóëõóëöñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒAz!UŒÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýý÷÷÷õõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõöööùùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýüýùõúóíöîåòéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïêÞðìàñíâñïäóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéôòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóëõóëõóëõñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒC}RÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûíííÑÑÑËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËÍÍÍÚÚÚùùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùõúõï÷ïçóêßðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïêÞïëßðíáñïãòðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóëõñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒBIŽÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüü›ˆz¤{[¤{[¤{[¤{[¤{[¤{[¤{[¤{[¤{[¤{[¤{[¤{[¤{[¤{[¤{[¤{[ÎÎÎöööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸîyŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûúüöñøðéôíãñéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïëßðíáñïãòðåóðåóðåóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ@€BŒÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒ~ž~o£‹‚¼¬¦¾°«¾°«¾°«¾±«¾±«¾±«¾±«¾±«¾±«¾±¬¾±¬¼®¨’{s¤{[ÓÓÓ÷÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýüý÷óùòëõîåòéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïêÞðìàñîãòïäóðåóðåóðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ=€A‘ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤{[¯’ÆÃÁÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞ¬”Ф{[¤{[ÕÕÕøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùõúóíöïçóêßðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïêÞïìàñíáñïäòðåóðåóðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéôòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ:~ I›ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤{[²–жµµ·································¹¹¹¤{[¤{[¤{[ÍÍÍöööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìïïÆÎЙ¨¬™¨¬™¨¬™¨¬™¨¬½ÇÉäèéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúøûöñøðéôëáñéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïëßðíáñïãòðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõóêõñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ8~ JœÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤{[çØË«ŒªŽ‚©¨Œ§ˆ{¨Š|¨‹}¨Œ~©ªŽ€«¬‚¬ƒª•ra¤{[ËËËõõõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑ×Ù™¨¬}‰ŒT\^JQSq|™¨¬µÀÂö÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûúü÷óùòëõíãñéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïëßðìáñîãòðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõóêõñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒB‰H™ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤{[ðã×ìßÓìÜÏè×ÇäÒÀàÊ·àË·àË·àË·àË·àË·àË·à˸à˸à˸à˹=/¬Ì}}°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäè陨¬T\^.34‹™³¾ÁùúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþùõúóíöîåòêßðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïêÞïìàñîâòðåóñæóñæóñæóñæóñæóñæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéôòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõóêõóêõóêõóêõñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ HC“ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤{[ðä×èÚÎàÌ¿êÚÌÙÁ©Ï±•ϱ•ϱ•ϱ•ϱ•ϱ•ϱ•ϱ•ϱ•ϱ•ÚìhR¢**ïÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿ–¥©q|q|ž¢™¨¬™¨¬‡”˜\eh.34ž¢…’•ÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ H>‹ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿÿÿÿ¤{[ðä×èÚÍ×Á²êÚÌÙÁ©Ï±•ϱ•ϱ•ϱ•ϱ•ϱ•ϱ•ϱ•ϱ•ϱ•ÚìhR¢**ïÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬>DFwƒ†™¨¬àäåùúúóôõÎÕØ™¨¬kuxkux½ÇÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûúüöñøòëõíãñéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïëßðíáñîãòðæóñæóñæóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõóêõóêõñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒB‰?‡ÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤{[ðä×èÚÍѹ©êÚÌÙÁ©Ï±•ϱ•Æ¦š±‹¦©¬©¬®‡¨Ï±•ϱ•ϱ•ÚìhR¢**ïÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬™¨¬™¨¬ÿÿÿÿÿÿ™¨¬™¨¬™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬™¨¬™¨¬ÿÿÿ™¨¬™¨¬¶ÀÄ™¨¬™¨¬™¨¬·ÂÄÊÒÔž¢T\^¤²µÿÿÿÿÿÿÿÿÿÿÿÿïòòÌÔÖ¨´¸™¨¬™¨¬™¨¬™¨¬¹ÃÆÜáâùúúÿÿÿÿÿÿÿÿÿ™¨¬™¨¬™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿö÷÷ÕÜݰ¼À™¨¬™¨¬™¨¬™¨¬©µ¹ÏÖØóôõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýüýùõúóíöîåòéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïëßðìáñîãòðåóñæóñçóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõóêõñçôéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ<ƒEˆÏÙ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤{[ñä×èÚÍѹ©êÚÌÙÁ©Ï±•ǧ™ª‚«¿žÌ®–ϱ•ϱ•ϱ•ϱ•ϱ•ÚìhR¢**ïÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿ™¨¬™¨¬™¨¬™¨¬wƒ†JQS>DFq|™¨¬™¨¬.34™¨¬ÿÿÿÿÿÿÿÿÿÛá♨¬‚’\eh.34JQSkuxž¢™¨¬ìïïÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìï¬‹™dnp>DF.34\eh‡”˜™¨¬Ûáâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú÷ûõï÷ïçóêßðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïêÞïëàðíâñïåóñçóñçóñçóñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéôòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóêõñçóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ=„I‡ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤{[ñäØèÚÎѹ©êÚÌÙÁ©Ï±•´Ž¥¾œŸ½šŸ©¬º—¡­†©®‡¨Éª˜Ï±•Úì[˜*° sÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿàåæ™¨¬JQS.34}‰Œ™¨¬ÿÿÿÿÿÿÛá♨¬dnp}‰Œ™¨¬óôõÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿùúú™¨¬}‰Œdnp™¨¬èëìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûúüöñøðéôíãñéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïëßðíâñïäòñçóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõðæóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒBˆH„ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤{[ñäØèÛÎѹ©êÚÌÙÁ©Ï±•ª‚«Ë¬–«ƒ«È¨˜¹•¢¯ˆ¨Á ´Ž¥Ï±•Úì[˜*° sÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿö÷÷™¨¬kux>DF‚’™¨¬™¨¬ž¢q|™¨¬ÿÿÿóôõ™¨¬dnpq|ž¢™¨¬™¨¬‹™dnp‡”˜ÊÑÔÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿØÝßž¢\eh‹™™¨¬™¨¬™¨¬}‰Œ.34wƒ†¹ÃÆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýüý÷óùóíöîåòéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïëßðíáñïãòðåóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõðæóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ H‹D{ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤{[ñäØèÛÎй©êÚÌÙÁ©Ï±•¨€¬Î°•¨¬Í¯•Ĥ›°‰§Í®–ª«Ï±•Úì[˜*° sÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÚßà‹™.34™¨¬¼ÆÈïòòùúúßä器¬dnp™¨¬ÿÿÿÔÙÛ‡”˜}‰Œ™¨¬àäåùúúö÷÷ÕÜÝ™¨¬}‰ŒT\^ÊÑÔÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿ¬¸»dnpdnp™¨¬Ñ×Ùö÷÷ÿÿÿìïﯹ½‡”˜>DF™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùõúóíöïçóêßðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïêÞðìáñíãòïåóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõðæóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒMˆBsÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤{[ðã×éÛÎи©êÚÌÙÁ©Ï±•­…©Ë«—±Š§Â ¿ž­…©Ì®–©¬Ï±•Úìc˜„*° sÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿ¸ÂÅkuxq|®¹¼ÿÿÿÿÿÿÿÿÿÿÿÿÍÕÖ‚’™¨¬ÿÿÿµ¿Âdnpdnp™¨¬ìïïÿÿÿÿÿÿÿÿÿÿÿÿìï¬™¨¬™¨¬Ñ×Ùÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿ­¹¼.34ž¢×ÝÞÿÿÿÿÿÿÿÿÿïòò½ÇÉ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúøûöñøðéôëáñéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïëàñíâñïåóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéôòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõðæóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒAp AkÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤{[ëÞÑéÛÏи¨êÚÌÙÁ©Ï±•¹•¢¾œžÇ§™­…©¯ˆ¨ª‚«Àž±‹¦Ï±•Ú샌xPéüÔíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿ™¨¬JQS‹™Ýâãÿÿÿÿÿÿÿÿÿÿÿÿêí™¨¬ÿÿÿ™¨¬JQS‡”˜ÓÚÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿ¸ÂÅ™¨¬™¨¬™¨¬íïðÛàá½ÆÉ™¨¬™¨¬‚’JQS>DF™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýüý÷óùòëõíãñéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïëßðíáñïäòñæóñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõóéõóéõðæóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ,Q@dÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤{[å×ËéÜÏи¨êÚÌÙÁ©Ï±•Ì­–¯ˆ¨¿žÌ­–Í®–Àžžª‚«Æ¥šÏ±•Ú샌xPéüÔíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿ™¨¬™¨¬ö÷÷ÿÿÿÿÿÿÿÿÿÿÿÿùúú™¨¬™¨¬ÿÿÿ™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿö÷÷Ð×Ù™¨¬™¨¬‡”˜q|T\^q|·ÁÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùõúóíöîåòêßðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïêÞðìáñîãòðåóñçôñçôñçôñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõóéõóéõóéõóéõóéõðæóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ 4<^ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤{[àÏÃêÜÏÖÀ±êÚÌÙÁ©Ï±•ϱ•ˬ—¶’£«ƒ«©¬±Š§Å¥šÏ±•ϱ•Ú샌xPéüÔíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿ™¨¬™¨¬ÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿö÷÷²½À‹™\eh.34q|™¨¬äèéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú÷ûõï÷ðéôëáñéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïìàñîãòïåóñçôñçôñçôñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõóéõóéõóéõóéõóéõóéõóéõðæóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ%4RÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤{[×ǼêÜÐâÐÃìÜÏÙÁ©Ï±•ϱ•ϱ•ϱ•ϱ•ϱ•ϱ•ϱ•ϱ•ϱ•Ú샌xPéüÔíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿ™¨¬™¨¬ö÷÷ÿÿÿÿÿÿÿÿÿÿÿÿùúú™¨¬™¨¬ÿÿÿ™¨¬™¨¬ÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÌÓÕ‹™.34>DFdnp‚’™¨¬¯»¾äèéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûúüöñøòëõíãñéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïëßðíâñïäòñçóñçôñçôñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéôòéõòéõóéõóéõóéõóéõóéõðæóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ 0 &AÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ‚ }mëÞÒçÖÆâͺÞÉ´×½¥×½¥×¾¦×¾¦Ø¾§Ø¿§Ø¿§Ø¿§Ø¿¨Ø¿¨Ò·ƒŒxÔíg²»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬óôõÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿ™¨¬™¨¬ïòòÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿ™¨¬T\^‹™Þâãÿÿÿÿÿÿÿÿÿÿÿÿçë랢™¨¬ÿÿÿ™¨¬JQS™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬>DF™¨¬ÿÿÿ™¨¬™¨¬óôõÿÿÿÿÿÿÿÿÿ™¨¬T\^dnp}‰Œž¢™¨¬¯»¾ÑØÙïòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýüýùõúóíöîåòéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïëßðìáñîãòðæóñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõóéõóéõðæóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒJ.ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³¬§¤{[¤{[¤{[¤{[¤{[¤{[¤{[¤{[¤{[¤{[¤{[¤{[¤{[¤{[¤{[Œ~ûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬‡”˜ØÝßÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿ™¨¬‚’ÈÐÒÿÿÿÿÿÿÿÿÿìï¬™¨¬ÿÿÿ¼ÅÈkuxq|¬¸»ùúúÿÿÿÿÿÿÿÿÿ¿ÈÊ}‰Œ™¨¬ÿÿÿ¹ÃÆkux}‰Œ°¼¿ùúúÿÿÿÿÿÿÿÿÿÿÿÿ»ÅÇ}‰Œdnp¯»¿ÿÿÿ™¨¬‡”˜ØÝßÿÿÿÿÿÿÿÿÿ™¨¬‹™™¨¬ÌÓÕçëëùúúö÷÷™¨¬™¨¬™¨¬ÂËÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú÷ûõï÷ïçóêßðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïêÞðìàñîãòðæóòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéõòéõòéõóéõðæóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= Œ9l ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬kux™¨¬ãèèðòòðòòö÷÷™¨¬™¨¬ÿÿÿÿÿÿ™¨¬T\^™¨¬ÊÑÔóôõìïï­¹¼}‰Œ>DF™¨¬ÿÿÿÙßá‹™.34ž¢±¼Àïòòö÷÷Ð×Ù™¨¬JQS™¨¬ÿÿÿÜá➢.34ž¢°¼¿ìïïÿÿÿìïïºÄÇ™¨¬>DF‡”˜ÓÚÛÿÿÿ™¨¬kux™¨¬ãèèðòòðòò™¨¬.34™¨¬ÀÉÌóôõÿÿÿïòò¹ÃÅ‹™>DF·ÁÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûúüöñøðéôíãñéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïëßðíâòðåóñçôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéôòéõòéõðæóéÝïéÝïÛÒà···¾¾¾ÈÈÈÕÕÕãããïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒJƒÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬wƒ†™¨¬ž¢‹™ÖÛÝ™¨¬™¨¬ÿÿÿÿÿÿ™¨¬T\^‡”˜™¨¬™¨¬}‰Œ.34kuxµÀÃÿÿÿö÷÷™¨¬\eh.34‚’™¨¬™¨¬‹™\eh™¨¬ÿÿÿùúú™¨¬kux.34}‰Œ™¨¬™¨¬™¨¬}‰Œ>DF\eh™¨¬óôõÿÿÿ™¨¬wƒ†™¨¬ž¢‹™¤±µdnpJQS‡”˜™¨¬™¨¬™¨¬‚’>DFq|·ÁÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýüý÷óùóíöîåòéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïëßðíáñïäóñçóòèôòèôòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôòéôòéôðæóéÝïéÝïÜÓá¹¹¹¿¿¿ÉÉÉÕÕÕäääïïï÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒNŽ &ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬\ehdnpÁÉÌ™¨¬™¨¬ÿÿÿÿÿÿ™¨¬dnp.34™¨¬àåæÿÿÿÿÿÿÖÜÞ™¨¬JQSwƒ†™¨¬ÿÿÿÿÿÿàåæ™¨¬dnpT\^™¨¬ÖÜÞÿÿÿÿÿÿ™¨¬\ehdnp²¾Á™¨¬JQSJQS™¨¬äèéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùõúóíöïçóêßðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïêÞðìáñîãòðæóòèôòèôòèôòèôòèôòèôòèôòéôòéôòéôðæóéÝïéÝïÝÔâ½½½ÃÃÃËËË×××åååððð÷÷÷ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒL’5ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ °­¶»¸Á­©´¸´¿À½Æ¿¾À´´´ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬dnpdnpÄÍÏ™¨¬™¨¬ÿÿÿÿÿÿ™¨¬™¨¬‚’\eh>DFkux™¨¬¸ÂÅÿÿÿÿÿÿÿÿÿÿÿÿÊÒÔ™¨¬wƒ†JQS>DFdnpž¢™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÛá♨¬‡”˜\eh.34T\^}‰Œ™¨¬Ñ×Ùÿÿÿÿÿÿÿÿÿ™¨¬™¨¬dnpdnpÄÍÏÊÒÔ™¨¬wƒ†T\^T\^}‰Œ™¨¬ÊÒÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúøûöñøðéôëáñéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïëßðíãòðåóòèôòèôòèôòèôòèôòéôðæóéÝïéÝïßÖäÅÅÅÉÉÉÐÐÐÛÛÛçççñññøøøýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒG’ 0RÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥¢«ÍÉÔ ÍÉÔ¶µ·´´´ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬Ûá♨¬™¨¬™¨¬™¨¬ÿÿÿÿÿÿ™¨¬™¨¬™¨¬™¨¬ÌÔÖ™¨¬™¨¬™¨¬™¨¬¶ÀÃàåæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèëì¿ÈË™¨¬™¨¬™¨¬²½ÀØÝß™¨¬™¨¬™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿóôõÎÕØ¨µ¹™¨¬™¨¬™¨¬™¨¬ÆÏÐìïïÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÛáâÿÿÿèëìÄÌÏ™¨¬™¨¬™¨¬™¨¬™¨¬ÆÏÐìïïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýüý÷óùòëõíãñéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïëßðíâñïåóñçôòèôðåóéÝïéÝïâÙçÏÏÏÒÒÒ×××àààêêêóóóùùùýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÜ= ŒL–=eÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓ°µ˜xµ˜xµ˜xµ˜xµ˜xµ˜xµ˜xÓ°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏËÖ¶²¾¬¨´¨¤°ÄÁʼ»½¸¸¸ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùõúóíöîåòêßðéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïêÞðëßðéÝïéÝïæÝêÜÜÜÝÝÝáááçççïïïõõõúúúýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ=¡ŒEŽKwÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµ˜x¿ÌÒ®¾Æ¨¸Â§¸Á§¸Á¦·ÀªºÃµ˜xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶²½±­¹·³¾ÈÈÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú÷ûõï÷ðéôëáñéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéÝïéàíééééééëëëïïïôôôùùùüüüþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ=¡Œ;‚]ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµ˜xÙáäÏØÜÉÓØÇÒׯÑÖÀÌÒ»Èϵ˜xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬¨³»·ÃÇÃϦ¡°µ±¼³²¶¶¶¶ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûúü÷óùòëõíãñéÝïéÝïéÝïéÝïéÝïìâðóóóóóóóóóõõõùùùûûûýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ=¡Œ3v-o¢ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµ˜xîòòìððçííæëìãéêÙàãÌÖÛµ˜xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿»Æ®ªµº¸Ä »¾Â¹¾½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýüýùõúóíöîåòéÝïíäòùùùùùùùùùúúúüüüýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ=¡Œ3v/w«ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµ˜xñõõÒÛßµ˜x™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ»¶¿¹¸Á»¾Æ§­´²½Á«··¿ÌÊÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûúüýýýýýýýýýýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ=¡Œ;~'t¨ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµ˜xõ÷÷õ÷÷ô÷÷ô÷÷ôööëðñÚá嵘xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¸¹½³À¦º»Œšÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ=¡ŒEŠc™ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµ˜xûüüûýýûýýûýýûüüúüüóö÷µ˜xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬º¹³ÈÉ™¶³¦Çü¹žµ±²ÃÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ=¡Œ N–H~ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµ˜xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµ˜xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©Â¾¦È•¿¸–ż•À·¬ÅÁÀÎÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ=¡Œ Q1eÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓ°µ˜xµ˜xµ˜xµ˜xµ˜xµ˜xµ˜xÓ°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ“µ®T‚v7m`G‚sQƒwKga¦´² ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ=¡Œ P 4hÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ—¿³U†xO‰w6tbAvhnˆ‚«¸¶ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØé왨¬doqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâïñÿÿÿØéìØéìØéìÿÿÿñHÝ=¡ŒO£S†ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ‰®žb~8lZTŒyU„tbyt®¹·ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØéìØéìØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìÿÿÿñHÝ=¡ŒR¦S…ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿº×È—¹¨™Á¯ŸÌ¹•¼¬¦ºµºÅÃÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÝ=¡ŒR¦S…ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÝ=¡ŒQ¤T†ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÝ=¡ŒP¢S…ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØéìÖÕ˾¯˜¯˜z¯˜z¯˜z¯˜z¯˜z¯˜z¯˜z¯˜z¯˜z¯˜z¯˜z¯˜z¯˜z¯˜z¯˜z¯˜z¯˜z¯˜z¯˜z¹§ŽÑÎÁØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÝ=¡ŒP¢QƒÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìÎɺʺ¦ëæÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòîéʺ¦ÎɺØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÝ=¡ŒS£N€ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊûØÈýÕÆýÕÆýÓÃûÓÁûÓÁüкüÍ·û͹ô˺ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìµ¢ˆöôðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöô𵢈ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÜ>¡ŒV¤J{ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýúúúõõõñññîîîíííîîîñññõõõúúúýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅûÖÈûÖÈüÖÅüÖÅüÕÅüÕÂüÕÂüÓºüϳú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØé쯘zÿÿÿÿÿÿÿÿÿÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÿÿÿÿÿÿ¯˜zØéìØéìØéìÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÜ>¡ŒY¦CvÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýùùùñññçççÚÚÚÏÏÏÇÇÇÂÂÂÄÄÄÌÌÌÙÙÙçççñññúúúþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûØÈûÖÈýÖÆýÖÆýÕÃüÓÂüÓÂüѺûζûͶó˹ÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØé쯘zÿÿÿÿÿÿÿÿÿÈÐÔÈÐÔÿÿÿÿÿÿ¯˜zØéìØéìØéìÈÐÔÈÐÔØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÜ>¡Œ \©@rÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒÓÒ’””…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ‘“’ÐÑÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿüßÐþêáþæÚüáÔýàÑýàÑüÝÐýÛÎýÛÎýÙÊüÓÂúμóɹÿÿÿÜÑÆÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØé쯘zÿÿÿÿÿÿÿÿÿÈÐÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÐÔÿÿÿÿÿÿ¯˜zØéìØéìØéìÈÐÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÐÔØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÜ>¡Œ ]«;mÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒÓÒ°³²æççÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæçç°³²ÑÑÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿüîæüßÐùØÊ÷ÒÄ÷ÐÀ÷ÐÀ÷νõÍ»õÍ»ö˸õdzôůùæÜÿÿÿãççÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØé쯘zÿÿÿÿÿÿÿÿÿÈÐÔÿÿÿ„„„ÿÿÿ„„„ÿÿÿ„„„ÿÿÿÿÿÿÈÐÔÿÿÿÿÿÿ¯˜zØéìØéìØéìÈÐÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÐÔØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÜ>¡ŒT¢¡ŒMFxÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…Šˆÿÿÿðððòòòóóóõõõöööïïï„„„»»»¡¡¡ŠŠŠYYYèèèîîîöööôôôòòòÿÿÿ…ŠˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîóñíáÀªÙ±”اˆÓ¤ƒÔ }ÒŸ~ÓŸ|ÓŸ|Ô }Ô }Ô }Ö¤‚ݰ”÷òìåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØé쯘zÿÿÿÿÿÿÿÿÿÈÐÔÿÿÿ„„„ÿÿÿ„„„ÿÿÿ„„„ÿÿÿÿÿÿÈÐÔÿÿÿÿÿÿ¯˜zØéìØéìØéìÈÐÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÐÔØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÜ>¡ŒMŸFxÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…Šˆÿÿÿðððòòòóóóõõõ÷÷÷ùùùqqqIIIrrrØØØƒƒƒúúúøøøöööôôôòòòÿÿÿ…ŠˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîçÔÃÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåÄ®åíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØé쯘zÿÿÿÿÿÿÿÿÿÈÐÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÐÔÿÿÿÿÿÿ¯˜zØéìØéìØéìÈÐÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÐÔØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÜ>¡ŒLŸ;nÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…Šˆÿÿÿïïïñññóóóõõõ÷÷÷øøøÁÁÁ®®®ŽŽŽ$$$ÇÇÇùùù÷÷÷öööôôôòòòÿÿÿ…ŠˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿøãÛñÆ·òɸóɹóɹóɹòɸõȳõȳôȲóƱòİöãÙÿÿÿÖÀ®ÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØé쯘zÿÿÿÿÿÿÿÿÿÈÐÔÿÿÿ„„„ÿÿÿ„„„ÿÿÿ„„„ÿÿÿÿÿÿÈÐÔÿÿÿÿÿÿ¯˜zØéìØéìØéìÈÐÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÐÔØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÜ>¡ŒKŸ1fÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…Šˆÿÿÿïïïñññóóóôôôööö÷÷÷÷÷÷JJJÂÂÂùùùøøø÷÷÷õõõóóóòòòÿÿÿ…ŠˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿóÀªùË·ûιúμúμùλûϹûͶûͲù˰ùÉ­÷È®òŰÿÿÿÓµ ÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØé쯘zÿÿÿÿÿÿÿÿÿÈÐÔÿÿÿ„„„ÿÿÿ„„„ÿÿÿ„„„ÿÿÿÿÿÿÈÐÔÿÿÿÿÿÿ¯˜zØéìØéìØéìÈÐÔÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿÿÿÿÈÐÔØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÜ>¡ŒM¤0dÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…Šˆÿÿÿîîîðððòòòóóóõõõööö÷÷÷||€112uuzîî÷÷÷÷õõõôôôòòòñññÿÿÿ…Šˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõ¬üͺüоûÒÁüѾüѾûÓ½üÓ·ûѶûϲû̯ùÉ­óűÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØé쯘zÿÿÿÿÿÿÿÿÿÈÐÔÿÿÿ„„„ÿÿÿ„„„ÿÿÿ„„„ÿÿÿÿÿÿÈÐÔÿÿÿÿÿÿ¯˜zØéìØéìØéìÈÐÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÐÔØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÜ>¡ŒT®:nÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…Šˆÿÿÿîîîïïïñññòòòôôôííõõõö¯¯¯kkkÛÛÛîîöÚÚôóóôóóóñññðððÿÿÿ…ŠˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöíüоüÓÂýÓÃüÕÂüÕÂûÕÁüÔºüÓ·üѳûίúÊ®óȱÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØé쯘zÿÿÿÿÿÿÿÿÿÈÐÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÐÔÿÿÿÿÿÿ¯˜zØéìØéìØéìÈÐÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÐÔØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÜ>¡Œ]¸?uÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…Šˆÿÿÿíííîîîðððñññïïòââóôôô¤¤ï++êÒÒôôôôÈÈóååóñññííðïïïÿÿÿ…ŠˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöDZüÓÂüÖÅ…aMüÖÅýÕÃüÕÂüÔºûϲ…aMûϲú˱õȳÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØé쯘zÿÿÿÿÿÿÿÿÿÈÐÔÿÿÿ„„„ÿÿÿ„„„ÿÿÿ„„„ÿÿÿÿÿÿÈÐÔÿÿÿÿÿÿ¯˜zØéìØéìØéìÈÐÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÐÔØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÜ>¡Œ[¸@tÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…ŠˆÿÿÿìììêêíîîîðððßßñØØñòòò™™ñ++ïÉÉòóóóµµñÜÜñðððèèïââîÿÿÿ…ŠˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿöÈ´üÕÅ…aM…aM…aMüÕÅüÕÂûÓ½…aM…aM…aMú͵óɵÿÿÿÒµŸÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØé쯘zÿÿÿÿÿÿÿÿÿÈÐÔÿÿÿ„„„ÿÿÿ„„„ÿÿÿ„„„ÿÿÿÿÿÿÈÐÔÿÿÿÿÿÿ¯˜zØéìØéìØéìÈÐÔÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿ™¨¬ÿÿÿÈÐÔØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÜ>¡Œ T±>oÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…ŠˆÿÿÿêêêÜÜìççíîîîÜÜ︸ðððññññììññññããñ••ðÛÛïîîîÚÚíÖÖìÿÿÿ…ŠˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿõÊ·ûÖÈûÖÈ…aM…aM…aMûÓÁ…aM…aM…aMûζûͶó˹ÿÿÿÓµ ÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØé쯘zÿÿÿÿÿÿÿÿÿÈÐÔÿÿÿ„„„ÿÿÿ„„„ÿÿÿ„„„ÿÿÿÿÿÿÈÐÔÿÿÿÿÿÿ¯˜zØéìØéìØéìÈÐÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÐÔØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÜ>¡ŒJ¥Q~ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…ŠˆÿÿÿéééÒÒëÙÙìíííééí««îŸŸïÒÒïîîïÅÅï{{襤ïííîíííÆÆíÓÓìÿÿÿ…Šˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿö˸üØÉýØÊýØÊ…aM…aM…aM…aM…aMûζüÍ·û͹ô˺ÿÿÿÓµ ÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØé쯘zÿÿÿÿÿÿÿÿÿÈÐÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÐÔÿÿÿÿÿÿ¯˜zØéìØéìØéìÈÐÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÐÔØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÜ= Œ@–S~ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…Šˆÿÿÿèèè××ê¹¹ìääëìììàà윜îqqî__îbbïššîææíìììÑÑì««ìÞÞéÿÿÿ…Šˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿ÷νüÛÍüÚÍüØÉüØÉ…aM…aM…aMû͹üÍ·û͹û͹ó̼ÿÿÿÓ¸¤ÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØé쯘zÿÿÿÿÿÿÿÿÿÈÐÔÈÐÔÿÿÿÿÿÿ¯˜zØéìØéìØéìÈÐÔÈÐÔØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÜ= Œ?’PzÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…Šˆÿÿÿæææææç¶¶ê°°ëèèêëëëëëëÛÛëÉÉìßßëëëëëëëÛÛê••ìÁÁêèèèÿÿÿ…ŠˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿøÐ¾üÝÐýÝÎýÙÊûÖÈûÖÈ…aMýλüͺû͹üͺüͺó̼ÿÿÿÔ»¨ÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØé쯘zÿÿÿÿÿÿÿÿÿÈÐÔÈÐÔÿÿÿÿÿÿ¯˜zØéìØéìØéìÈÐÔÈÐÔØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÜ= Œ?‘MvÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…ŠˆÿÿÿåååæææÛÛè——ëëÍÍêéééêêêêêêêêêèèé±±ë||ìëååçæææÿÿÿ…Šˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿ÷ÔÄüáÔýàÑüÛÍüØÉüØÉûÕÈüоýλýλýλúμó̼ÿÿÿÕ±ÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØé쯘zÿÿÿÿÿÿÿÿÿÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÿÿÿÿÿÿ¯˜zØéìØéìØéìÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔÈÐÔØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÜ= Œ?ŽKtÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…Šˆÿÿÿãããäääåååßßæ¡¡êjjìkkì~~ìëmmíSSîbbì°°éååæååååååÿÿÿ…ŠˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿùØÊþæÚüãØýÞÑýÛÎýÙÊüØÉüÕÅüÓÅüÓÂüоúͼô̺ÿÿÿÚ˽ÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéì¹§Žòîéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòîé¹§ŽØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÜ= Œ?ŽHnÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ“•”æççåååããããããäääåååËËæ¥¥é||ëWWí~~먨éÔÔæåååääääääãããæçç“•”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿüßÐþêáþæÚüáÔýàÑüÝÐýÛÎýÙÊûØÈüÖÅüÓÂúμóɹÿÿÿÝ×Ïÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìÑÎÁʺ¦ëæÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòîéʺ¦ÑÎÁØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÜ= ŒE“?cÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒÓÒ°³²æççÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæçç¡ŸÆÆÆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿüîæüßÐùØÊ÷ÒÄ÷ÐÀ÷νõÍ»ö˸õÊ·÷ȵõdzôůùæÜÿÿÿáâßÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØéìÖÕ˾¯˜¯˜z¯˜z¯˜z¯˜z¯˜z¯˜z¯˜z¯˜z¯˜z¯˜z¯˜z¯˜z¯˜z¯˜z¯˜z¯˜z¯˜z¯˜z¯˜z¹§ŽÑÎÁØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÜ= Œ Nœ/SÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑÒÒ“•”…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ…Šˆ“•”ÍÍÍÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîúýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíîÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØéìØéìÿÿÿñHÜ= ŒY¦;ÏØ1îjÝU™¨¬doq¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹ØéìÿÿÿØéìØéìØé왨¬doqØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ØéìØéìÿÿÿñHÜ= ŒY¨'ÏØ1îjÝU™¨¬doq¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹¹ØéìÿÿÿØéìØéìØé왨¬doqØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿñHÜ= Œ U¤ÏØ1îjÝU™¨¬doqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqØéìÿÿÿØéìØéìØé왨¬doqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqdoqØéìÿÿÿñHÜ= ŒT¤ #ÏØ1îjÝU™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿñHÜ= Œ X© ÏØ1îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒP¢ ÏØ1îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒMœÏØ1îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒN›ÏØ1îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒU ÏØ1îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒY¡ÏØ1îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒQ•ÏØ1îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= Œ =}ÏØ1îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÁÎÐ’˜ša]^8..""8..a]^’˜šÁÎÐØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì×èëÖçêÕæéÔäçÓäæÓäæÓäæÔäçÕåèÕæé×èëØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿÿÿÿ™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì×èë       ”•ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= Œ\ÏØ1îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì^›](z'(z'(z'(z'ÊÞÊØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìááögeÑÃÂíØéìØéìØéì´²ègeÑááöØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÓãæ’˜š            ’˜šÓãæØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìFFFFFFFFFFFØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÕæéÑâåÎÞáÉÙÛÅÕØÀË˶¹³Øéì¿ÍÏÀÏÒÃÒÕÇ×ÙÊÚÝÐàãÔäçØéìØéìØéìØéìÖçêÕåèÔäçÓäæÓäæÔäçÕåèÖçêØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿÿÿÿ™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì×èë         ”•ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= Œ?ÏØ1îjÝUØéìØéìØéìØéìØéìFFFFFFFFFFFØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìFFFFFFFFFFFØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì^›].96®O2 B(z'ÊÞÊØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé솄ÛÀ Õ:6ÄØéìØéìñðû½ @Ó ¾geÑØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì ¨ª                 ¨ªØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìFFFFFFFFFFFFF‘‘‘ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÕæéÕåèÏßâ×èëØéìØéìØéìØéìØéìØéìØéìØéìÐáäÊÚÝÄÓÖ¿ÎÐØé쥖ˆše?¡lEŸh?šw[©³³¯¼¿µÃźÈËÀÏÒÆÖÙÌÜßÐàãÏßâÊÚÝÇ×ÙÅÔ×ÂÑÔÀÏÒÀÏÒÁÐÓÄÓÖÆÖÙÊÙÜÎÞáÔäçÖçêØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÿÿÿ™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿ™¨¬™¨¬™¨¬™¨¬ÿÿÿÿÿÿ™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì×èë SÞÙSÞÙSÞÙSÞÙSÞÙ> ”•ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒUÏØ1îjÝUØéìØéìØéìØéìFFFFFFFFFFFFF‘‘‘ÕæéÕåèÓäæg©ŒµÓÍÒãæÒãæÔäçÕåèÖçê×èëØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÖçêÕæéÕåèÓäæg©ŒµÓÍÒãæØéìØéìØéìØéìØéìØéìØéìFFFFFFFFFFFFF‘‘‘ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìâͻЮ‘Ю‘Ю‘âÍ»ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì^›]2˜B:³X6®O(z'ÊÞÊØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìâͻЮ‘Ю‘Ю‘âÍ»ØéìØéìØéìØéìØéìØéìØéìØéìØéìXUÍ ã !õ ц„ÛØéìwtÖ 2ÉbäLÔXUÍØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÓãæa]^    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    a]^ÓãæØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìFFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿF&&FØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÕæéÈ×Ú‹“”‰ŽŽ–—ÇÖØØéìØéìØéìØéìØéìØéìØéìÎÞáÉÙÛÁÐÓ»ÊÍ¥˜‹¢rO³€X¢nF¬tHªrH˜„r©¶¸°¾À¶ÄƽÌÎÂÑÔÅÔ×Ç×ÙÉÙÛÅÔ×ÀÎѼËÍØéì´ÂijÁöÄÇ»ÉÌ¿ÎÐÄÓÖÈØÚÍÝàÒãæØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì×èë SÞÙSÞÙSÞÙSÞÙSÞÙ> ”•ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= Œ.mÏØ1îjÝUØéìØéìØéìØéìFFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿF&&FÎÞáÌÜßËÛÞ…PEœsµÏËÊÙÜËÛÞÌÜßÎÞáÐáäÓäæÕæéØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÕåèÓäæÐàãÎÞáÌÜßËÛÞ…PEœsµÏËØéìØéìØéìØéìØéìØéìØéìFFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿF&&FØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅Z \#šLšLœP  \#¬p?è×ÉØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì^›]4šG>·a:³X(z'ÊÞÊØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅Z \#šLšLœQ  \#¬p?è×ÉØéìØéìØéìØéìØéìØéìØéìñðûÀ í *îÀ´²è ¾Wç\á#ÀááöØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÎÝà8..  Q&&  UJJwnnÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØÖÖlbb  Q&&  8..ÎÝàØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìFFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿF&&FØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÔä笸º™¨¬ØéìäääÑÑÑŠŽØéìØéìØéìØéìØéìØéìØéìÔäçÐàãÉÙÛ¹¹³¤qJ¾f²{O•d?“`9­vLnL«ª¢»ÊÍÀÎÑÅÕØÊÚÝÎÞáÏßâÌÜßÉÙÛÅÔ×ÂÑÔ¾ÍϼÊͨ±²¦ª¨¥©§£ªªÁÏÑËÛÞÐáäÔäçØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì×èë SÞÙSÞÙSÞÙSÞÙSÞÙ> ”•ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= Œ2tÏØ1îjÝUØéìØéìØéìØéìFFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿF&&FÅÕØÃÒÕÁÐÓ2šgkÕ Ažq‰¶¦ÁÐÓÃÒÕÅÕØÇ×ÙÊÚÝÎÞáÑâåÕæéØéìØéìØéìØéìØéìØéìØéìØéìØéìÑâåÍÝàÊÚÝÇ×ÙÅÕØÃÒÕÁÐÓ2šgkÕ Ažq‰¶¦ÁÐÓØéìØéìØéìØéìØéìFFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿF&&FØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÖ¸ŸžX")ŠŠ Š +šJ \#Ü­ØéìØéìØéìØéìò÷òÊÞÊÊÞÊÊÞÊÊÞÊP“P7œLB¼j>·a(z'¡Å¡ÊÞÊÊÞÊÊÞÊåïåØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÖ¸ŸžT )ŠŠ Š )šI \#Ü­ØéìØéìØéìØéìØéìØéìØéìÃÂí Æ -ò 'Þ º@àWç .Ê•“ߨéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÓãæ8.. ŽDDÐddÄ^^  *ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ<00  ºYYÐddŽDD  8..ÓãæØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìFFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿF&&FØéìØéìØéìØéìØéìØéìØéìØéìØéìÔä篼¾™¨¬¡¡¡ØéìÜÜÜàààœœœØéìØéìØéìØéìØéìØéìØéìØéìÖçêÕåè¨wÄ•qÆ–o¸V«vL…Y7˜d=«vM¢cÊÚÝÎÞáÓäæÕæé×èë×èëÕæéÓäæÐáäÎÞáËÛÝ®¸ºØéìØéìØéìØé쪴µÔåçÖçêØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬ÿÿÿ™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì×èë SÞÙSÞÙSÞÙSÞÙSÞÙ> ”•ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= Œ >ÏØ1îjÝUØéìØéìØéìØéìFFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿF&&F¿ÎлÊͺÈË2›gFÖŽTÏD¦v‚¯Ÿ»ÊÌ¿ÎÐÁÐÓÅÕØÈØÚÌÜßÐàãÕåè×èëØéìØéìØéìØéìØéìØéìØéìÌÜßÈØÚÅÔ×ÁÐÓ¿ÎлÊͺÈË2›gFÖŽTÏD¦v‚¯ŸØéìØéìØéìØéìØéìFFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿF&&FØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìЮ‘šLŠ Œ#Œ#$&Ž'˜G¦f1ùõòØéìØéìØéìÊÞÊ(z'(z'(z'(z'(z'9ŸPGÀsB¼j(z'(z'(z'(z'(z'”½“ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìЮ‘šLŠ Œ#Œ#%%)˜G¦f1ùõòØéìØéìØéìØéìØéìØéìØéìwtÖ Î 7ð 0ÜMê HÞ:6ÄØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìa]^ µWWÐddÐddÐddÄ^^ *ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ºYYÐddÐddÐddµWW  a]^ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìFFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿF&&FØéìØéìØéìØéìØéìØéìØéìØéìÔå皤¥™¨¬«««¤¤¤¯¯¯ÎÎÎßßߎØéìØéìØéìØéìØéìØéìØéìØéìØéì×èꥂh»‰c×´™Ú»¢Æ˜uŸnF„Y7ŸlF¥rK´ŸÕäåØéìØéìØéìØéìØéìØéìØéì×ç굿ÀØéìÊÊÊØéìØéìËËˬ³³ÓãæØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿÿÿÿ™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿ™¨¬™¨¬™¨¬™¨¬™¨¬ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì×èë SÞÙSÞÙSÞÙSÞÙSÞÙ> ”•ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒLÏØ1îjÝUØéìØéìØéìØéìFFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿF&&FØéì´Âı¿Á1œf9Õ‡ÎtJÔE«x^ ƒ°Â»ÉÌ¿ÎÐÂÑÔÇ×ÙËÛÞÐàãÔäçØéìØéìØéìØéìØéìØéìØéìÇ×ÙÂÑÔ¿ÎлÉÌØéì´Âı¿Á1œf9Õ‡ÎtJÔE«x^ ƒ°ÂÂØéìØéìØéìFFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿF&&FØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÖ¸ŸžX"&Œ#$Ž'))‘.žX"Ü­ØéìØéìØéì¾Ê®(z'gÚªaÖ¡[Ò˜VÎPʆKÅ|GÀsB¼j>·a:³X6®O+†/”½“ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÖ¸ŸžT %Œ#%%))‘-ŸY"Ü­ØéìØéìØéìè×Éʤ„¸…ZÄ™vƨš3,¶ -ã BíMê ¾ÒÑòØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì ¨ª  ŽDDÐddÐddÐddÐddÏcc *ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÐddÐddÐddÐddÐddŽDD   ¨ªØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìFFÿÿÿFFÿÿÿ&&FFÿÿÿ&&FFÿÿÿF&&FØéìØéìØéìØéìØéìÕæéÐáäÎÞᜦ¨™¨¬§§§¤¤¤¦¦¦–––§§§›œœž§¨ØéìØéìØéìØéìØéìØéìØéìØéìØéìØé쵤’¤mE¸„\Ó¬ŽÙ¹ Ã™w–hDˆ[8¥qK¤tP¾µ©ØéìØéìØéìØéìØéìØéì×èëØéìØéìÓÓÓÍÍÍØéìØéìÌÌ̯¹º×èëØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì×èë :}:}:}:}:}.TR ”•ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒVœ ÏØ1îjÝUØéìØéìØéìØéìFFÿÿÿFFÿÿÿ&&FFÿÿÿ&&FFÿÿÿF&&F²À®¼¾«¹»1›e9Ò…ÊnÇnCˇMµ€Yš~ª¿¾»ÊÍ¿ÎÐÄÓÖÈØÚÍÝàÑâåØéìØéìØéìØéìØéìØéìØéìÄÓÖ¿ÎлÉ̶ÄDzÀ®¼¾«¹»1›e9Ò…ÊnÇnCˇMµ€Yš~ØéìØéìØéìFFÿÿÿFFÿÿÿ&&FFÿÿÿ&&FFÿÿÿF&&FØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìùõò¦f1˜GŽ'Ž'++‘.‘.œP Ю‘ØéìØéìÄ™v‚c$(z'mÞ³gÚªaÖ¡[Ò˜VÎPʆKÅ|GÀsB¼j>·a:³X,‡1”½“ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìùõò¦f1˜G))‘-)‘-‘-œQ Ю‘ØéìØéìÄ™v \#ŸY"šIžT ŸY"£ 2è BíIç½ñðûØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÓãæ  Q&&ÐddÐddÐddÐddÐddÏcc *ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÐddÐddÐddÐddÐddÐddQ&&  ÓãæØéìØéìØéìØéìØéìØéìØéìØéìØéìFFÿÿÿ/FÿÿÿF&&FÿÿÿF&&FÿÿÿF&&FØéìØéìØéìØéìØéìÕåèÍÝߌ“”¬¬¬¥¥¥£££“““———™¨¬ ª¬ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØèë²žŠ¢uR²}UÈ™tШ‰Èž}’gE†Z7§tNŸkDÀ¹¯×åèØéìØéìØéì×èëØéìØéìÛÛÛ×××ØØØÖÖÖÐÑÑ­³³ÔäçØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì ¨ª       ”•ÂÐÒØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒX¢ ÏØ1îjÝUØéìØéìØéìØéìFFÿÿÿ/FÿÿÿF&&FÿÿÿF&&F{F2’a0“`1–c1˜c1˜dM±~8σÅkÂi¾f/ÂyP¹ƒHšs¡½·½ÌÎÂÑÔÆÖÙËÛÞÐáäØéìØéìØéìØéìØéìØéìØéìØéì{F2’a0“`1–c1˜c1˜dM±~8σÅkÂi¾f/ÂyP¹ƒHšsØéìØéìFFÿÿÿ/FÿÿÿF&&FÿÿÿF&&FÿÿÿF&&FØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìíáÖ¦f1R •:+‘.“2”6œP Ю‘ØéìíáÖ \#~W(z'M­pJ«kG©gD§cN»{VÎPʆ9ŸP7œL4šG2˜B*-”½“ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìíáÖ¦f1œQ •:)‘-“2”6œQ Ю‘ØéìíáÖ \#›G—<˜=˜=U)h Õ 7ð BíMê 4ÒwtÖØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì’˜š ÐddÐddÐddÐddÐddÐddÏcc *ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÐddÐddÐddÐddÐddÐddÐdd  ’˜šØéìØéìØéìØéìØéìØéìØéìØéìØéìFFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààDD^LL`¿ÊÌÍÜß×èëØéìØéìÍÝߌ“•“””ªªª¦¦¦¤¤¤‘‘‘™™™™¨¬Ÿ©ªØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì׿èËÎɦf«wPÉ™sǘt¼meCŒ_;¨uO¢rQ¾µªØéìØéì×èëØéìØéìÛÜÛÙÙÙÙÙÙÝÝÝÞÞÞ¯¶µÇרØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬ )@?/XV/XV/XV/XV  ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒT¡ ÏØ1îjÝUØéìØéìØéìØéìFFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…Ka¾Ž-¬l0¾w2Ãz3Æ|4ÉÅqÁh¿g»d ·b+»sS»‡F™q™»²ÃÒÕÆÖÙÌÜßÐáäØéìØéìØéìØéìØéìØéìØéìØéì…Ka¾Ž-¬l0¾w2Ãz3Æ|4ÉÅqÁh¿g»d ·b+»sS»‡F™q™»²FFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿF&&FØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìóëäÄ™v \# \# \# \#šHR Ю‘Øéìè×É \#ƒHDk#Dk#El#El#/v&D§c[Ò˜VÎ(z'P“P^›]^›]^›]¯Í¯ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìóëäÄ™v \# \# \# \#˜GžT Ю‘Øéìè×É \#˜=šAšAˆ:,³ *î 7ð ÎIçWç ¾ÒÑòØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì" ^--ÐddÐddÐddÐddÐddÐddÏcc *ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÐddÐddÐddÐddÐddÐddÐdd^-- "ØéìØéìØéìØéìØéìØéìØéìØéìØéìFFÿÿÿFFÿÿÿF))Hâââoo{™™œØéìÊÊÊÏÏÏØéì´´´¨««³½¾ÇÖØ•–žžž«««¥¥¥œœœ”””™¨¬µÁÄØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÕäæ·¦–©yTÓmÁŒcºˆaŽcA‰\9ªvPžiBØéìØéìØéìØéìâââÜÜÜÞÞÞßßßÚÛÛ±¸¶ÍÜߨéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬ @–“SÞÙSÞÙSÞÙSÞÙ ÓãæØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒT£ÏÙ1îjÝUØéìØéìØéìØéìFFÿÿÿFFÿÿÿF&&Fÿÿÿ&&FF‚BS¸„œQ ¯] ´` ¸b»e¼e¼eºd ·b ³_ ®\­`R¹„7ši¸©ÄÖ×ÎÞáÒãæØéìØéìØéìØéìØéìØéìØéìØéì‚BS¸„œQ ¯] ´` ¸b»e¼e¼eºd ·b ³_ ®\­`R¹„7ši!FÿÿÿFFÿÿÿF&&Fÿÿÿ&&FFÿÿÿF&&FØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìùõòè×Éè×ɲ{LšHR Ю‘ØéìíáÖ \#›F•:›B›BœEEl#G©gaÖ¡[Ò˜(z'ÊÞÊØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìùõòè×Éè×ɰzNšIœQ Ю‘ØéìíáÖ \#›GšAšA-“ å -ò -㣠ÆWçQÛIFÈØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÁÎÐ  ÊaaÐddÐddÐddÐddÐddÐddÏcc *ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÐddÐddÐddÐddÐddÐddÐddÊaa  ÁÎÐØéìØéìØéìØéìØéìØéìØéìØéìFFÿÿÿ&&F&&Fÿÿÿ''G__nØéìØØØíííïïïíííìììîîîñññèèèØéìž¡¡¡¡¡´´´§§§›››™™™™¨¬³¿ÁØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì×çé·§–§yVÇ–p¿‰^±}T‘d@ lD°}W§‡mØéìØéìâââÞÞÞááááááçççµ»¹ÂÐÒØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬ :‚SÞÙSÞÙSÞÙSÞÙ%21 ˆ‹ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒW¨ÏÙ1îjÝUØéìØéìØéìØéìFFÿÿÿ&&F&&Fÿÿÿ&&F&&Fÿÿÿ&&F&&FBS¸„›P ­[ ±^ ´` ·b ¸b ¸b ¶a ³_ °] ¬Z ¨W¨^G´}Cp´ ÐáäÕåèØéìØéìØéìØéìØéìØéìØéìØéìBS¸„›P ­[ ±^ ´` ·b ¸b ¸b ¶a ³_ °] ¬Z ¨W¨^G´}.†Y/ÿÿÿ&&F&&Fÿÿÿ&&F&&Fÿÿÿ&&F&&FÿÿÿF&&FØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅ZšJžT Ю‘ØéìØé츅ZŸZ"šHœEHHEn#J«kgÚªaÖ¡(z'ÊÞÊØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅ZšIžT Ю‘ØéìØé츅ZŸY"œHo2I Æ !õ -ò ºœQ :"ˆ ?×bä 2É•“ߨéìØéìØéìØéìØéìØéìØéìØéìØéìØéì’˜š 2ÐddÐddÐddÐddÐddÐddÐddÏcc *ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÐddÐddÐddÐddÐddÐddÐddÐdd2 ’˜šØéìØéìØéìØéìØéìØéìØéìØéìFFÿÿÿÿÿÿÿÿÿêêê¶¶¶ÐÐÐðððåßÚϼ­Ã£‹­‡l§d¾œÇ°œ×ɾñðïëëëÔÔÔØéì•••‘‘‘‘’’™¨¬ËÚÝØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì¼²©zWÃ’lÀŠ`¼‡]´|Q·„]™oP»·³êêêáááåååääääåäØéìÅÓÕØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé싎 .QPSÞÙSÞÙSÞÙSÞÙ@•’  E=>ÑáäØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= Œ\°ÏÙ1îjÝUØéìØéìØéìØéìFFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚CU¹… ›R ª[ ­[ ¯] ²^ ³_ ³_ ±^ ®\ ¬[ ¨X¤UŸR›P>°vD¤sp°”ÅßÝØéìØéìØéìØéìØéìØéìØéìØéì‚CU¹… ›R ª[ ­[ ¯] ²^ ³_ ³_ ±^ ®\ ¬[ ¨X¤UŸR›P>°v@ oºÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿF&&FØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅ZœMžT Ю‘ØéìØéìùõò²{LŸZ"ŸTŸLŸLEn#M­pmÞ³gÚª(z'ÊÞÊØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅ZœMžT Ю‘ØéìØéìùõò°zNŸY"ˆI6-“ Ñ ÑU)hžQ°zN½QÛ &ÃXUÍØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìa]^ ^--ÐddÐddÐddÐddÐddÐddÐddÏcc *ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÐddÐddÐddÐddÐddÐddÐddÐdd^-- a]^ØéìØéìØéìØéìØéìØéìØéìØéìFFÿÿÿF!!!ØéìËËËðïïÖȼ®ƒchQÕ·œtYSrXS˸¢Åª¼–uÃ¥‹äàÜñññâââØéì›››’”ÅÔרéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì·¥”«yTÐ¥ƒÙ¹¡½Šb¨sM¦ˆw×ÔÑâââéééæææîîîØéì½ÉËØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì NÎÉSÞÙSÞÙSÞÙSÞÙ@–“ %ÆÓÖØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒS©ÏÙ1îjÝUØéìØéìØéìØéìFFÿÿÿFFÿÿÿFFÿÿÿ&&FF†JfÀ’&¦f+²n(´n!³j°b ¯\ ®\ ­[ «Y ©X¥V¡SPšN ›R0ªmT«FšsØéìØéìØéìØéìØéìØéìØéìØéì†JfÀ’&¦f+²n(´n!³j°b ¯\ ®\ ­[ «Y ©X¥V¡SPšN ›R0ªmV¬€b:!!!ÿÿÿF???ÿÿÿ&&FFÿÿÿF&&FØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅ZœMžT Ю‘ØéìØéìØéìØéìЮ‘¦f1 \# \#Fr&1‡:9“J9“J(z'ÊÞÊØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅ZœMžT Ю‘ØéìØéìØéìØéìЮ‘¦f1 \#_7c-“ Y ¥Z¸…Z´²èIFÈÃÂíØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì8.. ŽDDÐddÐddÐddÐddÐddÐddÐddÏcc *ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÐddÐddÐddÐddÐddÐddÐddÐddŽDD 8..ØéìØéìØéìØéìØéìØéìØéìØéìFFÿÿÿFMMdÍÍÍïïïÄ©•½kd[u^ZçÓÀ`NU`OTÔÏÁÔÍ¿ÔË»ÆªŽ¹nàÙÕìì윜œ™ ¡ÖçêØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÖæçµ¢‘­`À™{¥tQ«ŽzÎÈĺ±«ÛØÖæææíîîØéì¾ËÌØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬Øé왨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì×èë) 2caSÞÙSÞÙSÞÙSÞÙSÞÙJ½¹%/. ÂÐÒØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒO¨ÏÙ1îjÝUØéìØéìØéìØéìFFÿÿÿFFÿÿÿFFÿÿÿ&&F&&FˆNpÄ™7­q=¶y?¹{@»}@¼}<»{(´m¯c©[ ¤V SQšO ›Q¡\H³}S§|q±•ØéìØéìØéìØéìØéìØéìØéìØéìˆNpÄ™7­q=¶y?¹{@»}@¼}<»{(´m¯c©[ ¤V SQšO ›Q¡\H³}U©~=!FÿÿÿFFÿÿÿ&&F&&FÿÿÿF&&FØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅ZžQžT Ю‘ØéìØéìØéìØéìØéìØéìíáÖè×É‘šiej#ej#p@”½“åïåØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅ZžQžT Ю‘ØéìØéìØéìØéìØéìØéìíáÖè×ÉÄ™v Y  W¸…ZØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì" µWWÐddÐddÐddÐddÐddÐddÐddÍbb *ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÐddÐddÐddÐddÐddÐddÐddÐddµWW "ØéìØéìØéìØéìØéìØéìØéìØéìFFÿÿÿêêê¶¶¶íííÕǼ¾‘lܾ¤ä̵æÐ¼èÖÄYITXIRÔÒÇÕÐÃÔÍ¿ÓǶȰ”¿›€äáÞÏÏϧ­®ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì׿èØé쪟’°¢—¼³¬ØéìÍÈý´¯áÞÝÊÍÍØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿÿÿÿÿÿÿØéìØéìØéìØéìØé왨¬™¨¬™¨¬ØéìØé왨¬™¨¬™¨¬ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé즯±  >SÞÙSÞÙSÞÙSÞÙSÞÙPÔÐ-ML ÂÐÒØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒN¨ÏÙ1îjÝUØéìØéìØéìØéìFFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‰OtÆœ<¯uBµ{D¸~EºF»F»€E»€A¹|6³t.¯n&©g$§e&§e-©jb½CŸqÁ°ÐååØéìØéìØéìØéìØéìØéìØéìØéì‰OtÆœ<¯uBµ{D¸~EºF»F»€E»€A¹|6³t.¯n&©g$§e&§e-©jb½<˜i¨Ï»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿF&&FØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅ZžQŸW Ю‘ØéìØéìØéìØéìØéìØéìØéìØéìЮ‘¢[¢[¸…ZØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅ZžQ WЮ‘ØéìØéìØéìØéìØéìØéìØéìØéìЮ‘¡\ ¢\¸…ZØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì" µWWÐddÐddÐddÐddÐddÐdd LLt77 5((ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÐddÐddÐddÐddÐddÐddÐddÐddµWW "ØéìØéìØéìØéìØéìØéìØéìØéìFFÿÿÿÐÐÐÏÏÏßÙÕ»’pÞ¿£âÇ®äÌ·æÑ¾éØÇTFSPDPÕ×ÏÔÒÈÔÎÁÓÊºÔÆ³Ã£„ɳ¡ççç°°°ÈÖØØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÐáäÇÕÖÄÒÔÊÙÚÔäç¾ÊÌØéìòòòááá½´¯ØéìÌÆÂ¸°ª°·µ×çêØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìjij >Ž‹SÞÙSÞÙSÞÙSÞÙSÞÙRÚÕ-PN ÓãæØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒL¨ÏÙ1îjÝUØéìØéìØéìØéìFFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠQxÇŸB²yJ¶K¸L¹‚Lº‚LºƒK¹‚I¸€G·~Eµ|B²y?±wO·ƒl¾•J¡v¡Ë¾ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìŠQxÇŸB²yJ¶K¸L¹‚Lº‚LºƒK¹‚I¸€G·~Eµ|B²y?±wO·ƒl¾•"tJ7ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿF&&FØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅ZžQŸW Ю‘ØéìØéìØéìØéìØéìØéìØéìØéìЮ‘¡\ ¢[¸…ZØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅ZžQžT Ю‘ØéìØéìØéìØéìØéìØéìØéìØéìЮ‘¡\ ¢Y¸…ZØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì8.. ŽDDÐddÐddÐddÐddÐdd LL   Š‚‚ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÐddÐddÐddÐddÐddÐddÐddÐddŽDD 8..ØéìØéìØéìØéìØéìØéìØéìØéìFFÿÿÿØéìÞÞÞ̹ªŸtX‹nb‹rlŽzvêÙÊìÝÎ]N[QEQÕÕÍÔÒÇÕÍÀÓÊºÔÆ³Í¶œ¼“râââÑÑѱº¼ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé쯷·ÌÐÏÐÔÓØé쨰¯´ººìììáááëëëÛÙØ»³­ØéìËÅÀ¹´°ÎÙÚØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬Øé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìjij  7usSÞÙSÞÙSÞÙSÞÙSÞÙPÓÎ"%% ’˜šØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒL¨ÏÙ1îjÝUØéìØéìØéìØéìFFÿÿÿÿÿÿFFFFF&&FÿÿÿŠR{É¡H´}O·ƒQ¸„R¹…R¹…Qº…P¹„O¸ƒM·KµG´}Wºˆl½”L w±ÔËÖèêØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìŠR{É¡H´}O·ƒQ¸„R¹…R¹…Qº…P¹„O¸ƒM·KµG´}Wºˆl½”L wFFÿÿÿÿÿÿFFFFF&&FÿÿÿÿÿÿF&&FØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅ZžQŸW Ю‘ØéìØéìØéìØéìØéìØéìØéìØéìЮ‘¡\ ¤^¸…ZØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅ZžQŸY"Ю‘ØéìØéìØéìØéìØéìØéìØéìØéìЮ‘¡\ ¤^¸…ZØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìa]^ ^--ÐddÐddÐddÐddÐdd  ”Øéìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÐddÐddÐddÐddÐddÐddÐddÐdd^-- a]^ØéìØéìØéìØéìØéìØéìØéìØéìFFÿÿÿ¡¡¤ããã»™št[ª•Œ¶¦¡±¤£°¥£òèÝ¤š Š€†Ù×ÌÔÏÂÔ̾ÔɶÓűÒÀ¨¸ŒdØÒÍààà©®®ÕåèØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÕæéØéìÈËËñññòòòñññòòòïïïñññÛÛÛßßßØØØêêêÒÓÒ­¨£ØéìÊÄÀ¸±«ÎÚÚØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬µÀÂØéìØé솊‹  4igSÞÙSÞÙSÞÙSÞÙSÞÙ;ƒ 7--ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒK¨ÏÙ1îjÝUØéìØéìØéìØéìFFÿÿÿFFFFFFF&&F)[‹Ï¬k–rÅœsÆœtÇuÇžcÀ‘W»‰Vº‡S¹†S¸…m—i¸a§ˆÂÝÚØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì)[‹Ï¬k–rÅœsÆœtÇuÇžcÀ‘W»‰Vº‡S¹†S¸…m—i¸a§ˆÂÝÚFFÿÿÿFFFFFFF&&FÿÿÿF&&FØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅ZŸT X Ю‘ØéìØéìØéìØéìØéìØéìØéìØéìЮ‘¢] ¤^¸…ZØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅ZžT  WЮ‘ØéìØéìØéìØéìØéìØéìØéìØéìЮ‘¢] ¤^¸…ZØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì’˜š 2ÐddÐddÐddÐddÐdd  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÐddÐddÐddÐddÐddÐddÐddÐdd2 ’˜šØéìØéìØéìØéìØéìØéìØéìØéìFFõõõ¯¯¯áá᱈gšw`¾¬¤¾¯©»¯¬º¯­òèß±§ª®¥¦åâÚÚÓÆÔÊ¹ÓÆ³Òíӿ¥½—tÐÀ´ááᬱ±ÑàãØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÄÑÓØéìëëëéééèèèèèèèèèèèèèèèÚÚÚÑÑÑÞÞÞÔÕÕ±¹¸Ìרµ°ªØéìØéì·²®ÎÛÜØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬      ™¨¬µÀÂØéìØé쬵¸  D§£SÞÙSÞÙSÞÙSÞÙLÄÀ  ÕæéØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒK¨ÏÙ1îjÝUØéìØéìØéìØéìFFÿÿÿFFFFFFF&&F~H7”d7”d8•f9•f9•fb¯ˆyÉ ^½\¼‹\¼‹xÈ ^°‡e«‹ÊáàØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì~H7”d7”d8•f9•f9•fb¯ˆyÉ ^½\¼‹\¼‹xÈ ^°‡e«‹ÊáàØéìFFÿÿÿFFFFFFF&&FÿÿÿF&&FØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅Z U Y Ю‘ØéìØéìØéìØéìØéìØéìØéìØéìЮ‘ \"¥`¸…ZØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅Z W Y Ю‘ØéìØéìØéìØéìØéìØéìØéìØéìЮ‘ \"¥`¸…ZØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÁÎÐ  ÊaaÐddÐddÐddÐdd             ÐddÐddÐddÐddÐddÐddÐddÊaa  ÁÎÐØéìØéìØéìØéìØéìØéìØéìØéìFFóóó°°°ààà®^ ~iʺ±É»´ØéìØéìóéáÀ¶¶¼³²êåÜçàÖÙνÒîÒÀ©Ò¼¢Àšvͺ¬ää䮲³ÏÞáØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìµ¼¼ÙÚÚàááÝÞÞÔÖÕÍÏÎÝÝÝßßßÜÜÜÜÜÜÞÞÞÒÒÒ®··ÒãåØéìÔãæ´¯ªÄ½¶Øéìµ­¨ØéìÅËÊÒàâØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì ¨ª 1^\C£ C£ C£ C£ 3ge ‘“ØéìØéìØé왨¬ 0YWSÞÙSÞÙSÞÙSÞÙSÞÙ ÕåèØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒL©ÏÙ1îjÝUØéìØéìØéìØéìFFÿÿÿFFFF&&FFF&&FÿÿÿF&&FØéìØéìÐååDœqË¥eÀ’i•ɤ[«ƒ„»¦ÔæèØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÐååDœqË¥eÀ’i•ɤ[«ƒ„»¦ÔæèØéìØéìFFÿÿÿFFFF&&FFF&&FÿÿÿF&&FØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅Z¡X Y Ю‘ØéìØéìØéìØéìØéìØéìØéìØéìЮ‘£^!¥`¸…ZØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅Z W Y Ю‘ØéìØéìØéìØéìØéìØéìØéìØéìЮ‘£^!¥`¸…ZØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì" ^--ÐddÐddÐddÐddÐdd           ÐddÐddÐddÐddÐddÐddÐddÐdd^-- "ØéìØéìØéìØéìØéìØéìØéìØéìØéìFFÿÿÿ¦¦§âââ´Œm }gÎÀ¸ÏûÏÄÁÑÇÃõëâËÁÀØéììæÝéâÙåÚÌÒÀªÒ½¤Òºž½“nÓÆ»æææ¬°±ÓâåØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé쬱±äääÖ××®´²ØéìØé쯳´ÜÝÜååååååæææª®­ÑáäØéìØéìØéìÍÙÙµ¯©Ë»ØéìÀ¶®»±©·¹´ÖåèØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìÿÿÿÿÿÿ™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì ¨ª 6sqSÞÙSÞÙSÞÙSÞÙA›˜ UOPØéìØéìØéìÅÒÕ *CASÞÙSÞÙSÞÙSÞÙSÞÙ!#" ÕåèØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒL©ÏÙ1îjÝUØéìØéìØéìØéìFFÿÿÿ&&FFFFFFF&&FÿÿÿF&&FØéìØéìÐååFr„ͨtƎЮR¤{‹À«ÖèêØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÐååFr„ͨtƎЮR¤{‹À«ÖèêØéìØéìØéìFFÿÿÿ&&FFFFFFF&&FÿÿÿF&&FØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅Z¡X¡\  \#¸…ZЮ‘è×ÉùõòØéìØéìØéìØéìЮ‘£^!§c¸…ZØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅Z W¡\  \#¸…ZЮ‘è×ÉùõòØéìØéìØéìØéìЮ‘£^!§c¸…ZØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì’˜š ÐddÐddÐddÐddÐddÐddÐddÐdd>>      ‘EEÐddÐddÐddÐddÐddÐddÐddÐdd  ’˜šØéìØéìØéìØéìØéìØéìØéìØéìØéìFFÿÿÿ´´´ààà§’›sX˼´×ËÄÚÐÊôëãöíå×ÎÌÓÉÆîæÝìãØéßÓÙÆ°Ò¹žÏ´—¶†]âàßßßß­´¶ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé즪©ÓÕÔ­µ¶ÏßáØéìØéìÌÛݦ®­èèèëëëììì²¶µÒâåØéìØéìØéìØéìÏÛݸ¯¦Ïùɼ±Ê¾´½±©ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿÿÿÿØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì ¨ª 1^\SÞÙSÞÙSÞÙSÞÙK¾  ÎÝàØéìØé쉌Ž 0YWSÞÙSÞÙSÞÙSÞÙSÞÙ ÕåèØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= Œ N©ÏÙ1îjÝUØéìØéìØéìØéìFFÿÿÿÎÎÎFFFFF&&FÿÿÿÿÿÿF&&FØéìØéìÐååHžr˜Õ¶…ǦQ¢{´ÕÍØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÐååHžr˜Õ¶…ǦQ¢{´ÕÍØéìØéìØéìØéìØéìFFÿÿÿÎÎÎFFFFF&&FÿÿÿÿÿÿF&&FØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅Z¢Y¥Z¤[¢\ \" \# \#²{Lʤ„âÍ»óëäЮ‘£^!§c¸…ZØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅Z¢Y¢Y¤[¢\¡\  \# \#°zNʤ„âÍ»óëäЮ‘£^!§c¸…ZØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÓãæ  Q&&ÐddÐddÐddÐddÐddÐdd>> $œ••êéééè蓌Œ  ‘EEÐddÐddÐddÐddÐddÐddQ&&  ÓãæØéìØéìØéìØéìØéìØéìØéìØéìØéìFFÿÿÿÐÐÐØØØÏÀ´Â˜sçÒ¿óèÝôëâõîåöïèß×ÓÛÑÍðçÞìãØëßÒÞ̹ѸšÉ¨‡¿œéééØéìÂÎÐØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìµÀÀ§¯®ÐßâØéìØéìØéìØé쯺»ÙÚÚäääæææµ¸·ÎÞàØéìØéìØéìØéìÓâä¼°§ØÌÁÔÇ»ÓÆºÐŶª£ÐÜÞØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé좪¬ '87SÞÙSÞÙSÞÙSÞÙSÞÙ+GE A99Øéì‘“  BžšSÞÙSÞÙSÞÙSÞÙMÊÅ  ÕæéØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= Œ P§ ÏÙ1îjÝUØéìØéìØéìØéìFFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿF&&FØéìØéìÐååHžs’ͰR¡|°ÒÊØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÐååHžs’ͰR¡|°ÒÊØéìØéìØéìØéìØéìØéìFFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿF&&FØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅Z¢[§]§]¨_¨_©a§a¥`£^! \# \# \#£`!§e ¸…ZØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅Z¢\§]§]¨_¨_©a§a¥`£^! \# \# \#£`!§e ¸…ZØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì ¨ª  ŽDDÐddÐddÐddÐddÐdd  ¤žžÿÿÿÿÿÿÿÿÿÿÿÿ“ŒŒ %ÐddÐddÐddÐddÐddŽDD   ¨ªØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìFFF//Q¡¡§éè翟…¥hË»²âÚÕçáÝéãàåÞÚñêáïèÜíâÕêßÐàϻж˜¼‘nÓǽèèè®±²×èëØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì×çꩳ²ÚÛÛÜÜÜßß߬°®ÒãæØéìØéìØéìØéìÖæéµ­¦ÒƼÞÐÃÝÏÂÝÏÂ×ʾ³­¨ÑßàØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì NÎÉSÞÙSÞÙSÞÙSÞÙK¾!!!    1^]SÞÙSÞÙSÞÙSÞÙSÞÙ?“ +ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= Œ P¤ ÏÙ1îjÝUØéìØéìØéìØéìFFFFFFFFFFFFFØéìØéìØéìÐåå …R_¨‡ÑæçØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÐåå …R_¨‡ÑæçØéìØéìØéìØéìØéìØéìØéìFFFFFFFFFFFFFØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅Z \# \"¢] ¤^§a©a¬g¬g­j­j¬g©f§e ¨f ¸…ZØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé츅Z \# \"¢] ¤^§a©a¬g¬g­j­j¬g©f¨f ¨f ¸…ZØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìa]^ µWWÐddÐddÐddÐdd õôôÿÿÿÿÿÿÿÿÿÿÿÿèçç %ÐddÐddÐddÐddµWW  a]^ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìFF GYYlæææÝ×Ó¯^§‡pÖÊÃåÞÙçáÜôìåñéßïæÛíáÔèÚËÕ¼¡¾”nǯ›ëêéØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÀÍϬ±°âââÛÛÛÚÚÚ®´³ØéìØéìØéìØéìØéìØéìÍÙÙ·±¬ÑĹÝÏÃÝÏÂÝϸª¡ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÔäæ  ;…‚SÞÙSÞÙSÞÙSÞÙSÞÙMÈÄ5lj*CB-QO@™•SÞÙSÞÙSÞÙSÞÙSÞÙSÞÙ(<; ™¨¬ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒT§ ÏÙ1îjÝUØéìØéìØéìØéìØéìFFFFFFFFFFFØéìØéìØéìØéìÕçꂹ¤ÈáÞØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÕçꂹ¤ÈáÞØéìØéìØéìØéìØéìØéìØéìØéìØéìFFFFFFFFFFFØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìíáÖÜ­ęv¬p? \# \#£^!§c©f®l°o±q±q«j¸…ZØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìíáÖÜ­ęv¬p? \# \#£^!§c©f®l°o±q±q«j¸…ZØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÓãæ8.. ŽDDÐddÐddÐdd õôôÿÿÿÿÿÿÿÿÿÿÿÿéèè %ÐddÐddÐddŽDD  8..ÓãæØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìFFØéìÕæéµ¹ºåååÙÐÈ»“sÄŸ|ÜÆ±êÝÐìáÔêàÑçÚËÝɳʬ‹¹ŽhƬ–êêêØØØ­µ¶ÔäçØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÖçê¿ËÍ´·¶ßßßÞÞÞààൺ¸ÃÒÓØéìØéìØéìØéìØéìØéìØéìÖç鸵±Â¶­ØÉ½¿´¨ØéìÖæéØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìhfg !!!PÔÏSÞÙSÞÙSÞÙSÞÙSÞÙSÞÙSÞÙSÞÙSÞÙSÞÙSÞÙSÞÙSÞÙSÞÙ>‘Ž  ÈÕØØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒX¯ ÏÚ4 îjÝUØéìØéìØéìØéìØéìFFØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìFFØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìùõòâͻʤ„²{L \# \#£`!¦d «j§e ¸…ZØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìùõòâͻʤ„°zN \# \#£`!¦d «j§e ¸…ZØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÎÝà8..  Q&&ÐddÐdd  ¡››ÿÿÿÿÿÿÿÿÿÿÿÿ“ŒŒ 'ÐddÐddQ&&  8..ÎÝàØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìFFØéìØéìÉÖÙµ¸¸îîîßÙÕĨ‘·ˆc¼‘lÅ¡Ȥ‚Á›vµ…\»”tÒøëéèØØØ­±²ÑáäØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÈÖÙš žãããåååÐÒÑ®±°ØéìÕæéØéìØéìØéìØéìØéìØéìØéìØéìÔâäØéì°¤›Øéì×çêØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÕåè+ -QORÝØSÞÙSÞÙSÞÙSÞÙSÞÙSÞÙSÞÙSÞÙSÞÙSÞÙSÞÙSÞÙD§¤ ™¨¬ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= Œ\¶ ÏÚ4 îjÝUØéìØéìØéìØéìØéìFFØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìFFØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìè×ÉЮ‘¸…Z¦f1 \#¸…ZØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìè×ÉЮ‘¸…Z¦f1 \#¸…ZØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÓãæa]^  ^--€== #™’’éèèèçç’‹‹  DD^--   a]^ÓãæØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìFFØéìØéìØéìÒâå¶»½Õ××êêêæææ×ÍÄκªÊ´¢ÐÀ²áÝÛéééæææÊË˰¸¹ÓâåØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÁÍÏ¡«ª¤¬¬³¾¾ÍÜߨéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÑßàØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ØéìØéìØé왨¬™¨¬™¨¬™¨¬ÿÿÿØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì  -MLOÐÌSÞÙSÞÙSÞÙSÞÙSÞÙSÞÙSÞÙSÞÙSÞÙRÝØ=Œ‰ SMM×èëØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= Œ]¹ ÏÚ4 îjÝUØéìØéìØéìØéìØéìFFØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìFFØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìíáÖâÍ»ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìíáÖâÍ»ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéì ¨ª    (      *     ¨ªØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìFFØéìØéìØéìØéìÓãæÃÎÑØéìØéìæææîîîðððìììÛÛÛØéìØéìÂÎÐÖçêØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ØéìØéìØéìØéìØéìØé왨¬™¨¬™¨¬ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé쟦¨  7tqI¹µSÞÙSÞÙSÞÙSÞÙSÞÙNËÆ>Ž‹'65  SMMÖçêØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒT³ ÏÚ4 îjÝUØéìØéìØéìØéìØéìFFØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìFFØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÓãæ’˜š"          "’˜šÓãæØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÑàãØéì°¸º¬³µ°¸º¿ËÍÓãåØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé왨¬™¨¬Øé왨¬™¨¬™¨¬™¨¬™¨¬ØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØé쟦¨    '65)@?&54!"!    a]^ÖçêØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒK­ ÏÚ4 îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÁÎÐ’˜ša]^8..""8..a]^’˜šÁÎÐØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìÊÙÛ†Š‹HAA       ™¨¬¿ËÎØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒG¬ ÏÚ4 îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= Œ J± ÏÚ4 îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒS½ ÏÚ4 îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒYÄÏÚ4 îjÝUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñHÜ= Œ\ÆÏÚ4 îjÝU™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬™¨¬ñHÜ= Œ[à ÏÚ4 îjÝUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñHÜ= ŒQ¸ ÏÚ4 îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒG« ÏÚ4 îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒC¤ ÏÚ4 îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒI¥ ÏÚ4 îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÜ= ŒV¯ ÏÚ4îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÚ;©!Œ\² ÏÚ4îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÚ;©!Œ[­ ÏÚ4îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÚ;©!ŒR  ÏÚ4îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÚ;©!Œ*t ÏÚ4îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÚ;©!Œ^ ÏÚ4îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÚ;©!ŒZ ÏÚ4îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÚ;©!Œf ÏÚ4îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÚ;©!Œ<Š ÏÚ4îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÚ;©!ŒU¥ ÏÚ4îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÚ;©!Œ_´ ÏÚ4îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÚ;©!ŒZ³ ÏÚ4îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÚ;©!Œ R­ ÏÚ4îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÚ;©!ŒP® ÏÚ4îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÚ;©!Œ Q± ÏÚ4îjÝUØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìØéìñHÚ;©!ŒP³ Ïà;à;àKÏCÏCÏCÐDÐDÐEÐEÐEÐEÐEÐEÐEÐEÐEÐDÐDÐDÏCÏCÐDÏCÏCÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCÏCà;Ü.Á2’H® Ïà;à;àKÌ=ÏCÐDÐEÐEØJØJØJÜMÜMÜMàPãMâPâPâPáSâPâPâPâPâPãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMãMàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàFàKãKàFàFàFàFàFàFàFÜCÜ@Ü@Ü=Ü=Ü=Ú>Ü@Ü=Ü@Ü@Ü@Ú>Ü@Ú>Ù:Ù:Ø8Ù:Ø5Ø8Ø5à;ê8Á2‹E¬ Ïà;ëKãMãTæXæXëXì\î`ò_ñeñeñeôhôhôhôhúhújújújújújújýeùdùdù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù\ü`ù\øYõZóXöW÷X÷XöWôUôQôUôQôQôUôUôUôUðQïLðQôUôQóLóLïGïGïGïGïGïGê8Á2‹E®Ïà;ëKîXò[îXò[ñ`ñ`öaôhúhùjùjùjülülülûkûkûkûkûkûkûkþjþjúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhúhýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeûfõ›fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýíåõ›fûfýeýeûfõ›fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýíåó™f÷aù`ù\÷^ó–fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüìåñ’fòOóLïGêFê8Á2‹H³Ïâ;ëKîXò[õ`öaùeùeúhùjülýoýoýrýrýrþqþqþqþqÿrÿrÿrÿnÿnÿnþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjögñÚÐÃV(¶? ½D»E¹E¹D¼E½F¾EÀE ÁE ÃDÀAÀ?Ã?¾;¹NíØÏögþjþjögñÚÐÃV(¶? ½D»E¹E¹D¼E½F¾EÀE ÁE ÃDÀAÀ?Ã?¾;¹NíØÏõ›fýeü`õ™fÐÖî(Dµ +¦0¬1«2©0©2¬2­1® 0± .²-´*±(±'´$®<¬ÏÔêñ’fôQóLïGê8Á2‹H³Ïâ;ëKîXõ`õ`öaúhúhülýoýoýrýrþtþtþtþtþtþtþqþqÿrÿrÿrÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnÿnþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjýîåß^(ßOßUâZ!á\%à]&á\$â^#â^!â^å_å^æ]å[æX æTâNÓE¸Nÿÿÿþjþjýîåß^(ßOßUâZ!á\%à]&á\$â^#â^!â^å_å^æ]å[æX æTâNÓE¸Nÿÿÿýeü`ýíå(IÍ8Ì>Ì!DÏ%GÏ&GÏ$FÏ#GÐ!FÑEÒEÕBÕ@Ö=Õ 9Ö5Õ0Ñ*Â<«ÿÿÿôQóLïGê8Á2‹E°Ïâ;ëKîXõ`öa@ €@€`@€€@ €€ÀÀ€ÀÀ@  €ÀÀ€ÀÀ@``@À €  ``@@`@€€€ÀÀÿrÿrÿnÿnÿnÿnþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjÿÿÿíPï[ðc(ðh/ñk3ñl4òl1òm1òo.òp*óp%óoômôjôf ó`ðZâM¹:ÿÿÿþjþjÿÿÿíPï[ðc(ðh/ñk3ñl4òl1òm1òo.òp*óp%óoômôjôf ó`ðZâM¹:ÿÿÿü`ü`ÿÿÿ7ØCÛ(LÝ/RÞ3Uß4Wà1Uà1Và.Vá*Uâ%SäPäLåHå Cå>ä8à/Ñ#ªÿÿÿóLóLïGê8Á2’D®Òâ;ëKîXò_õ`€`@€€@€`€  @ €€ÀÀ@@À  @  @`€@ À@  @€€@ €@€€@``ÿnþlþlþjþjƒ ƒ ƒ ƒ ¨0 ÓMþjþjþjƒ ƒ þjþjç[ƒ ƒ þjƒ ƒ þjþjþjþjþjþjþjƒ ƒ þjƒ ƒ þjþjƒ ƒ þjþjƒ ƒ þjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjþjýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeýeÿÿÿóVôb%ôk1ôq9õt=öt=õu;õv9õw7öx2÷x,÷w%÷v÷røn÷h ô`æS¾=ÿÿÿýeýeÿÿÿóVôb%ôk1ôq9õt=öt=õu;õv9õw7öx2÷x,÷w%÷v÷røn÷h ô`æS¾=ÿÿÿü`ù\ÿÿÿ<Ý%Kà1Tá9[ã=^ä=_ä;^ä9^å7^å2]æ,[ç%WèTéPéJé Dè=ä3Ö&¯ÿÿÿóLïGêFê8Æ1’F°Ö#à;çKëXò_õ`@  @ ` `@€`@@ À   €À€`ÿ€ ÿ@€@À @  @ €þjújújýeÿÿÿÿÿÿÿÿÿÿÿÿþúøöÝу ÊFùdÿÿÿÿÿÿƒ ùdüɧÿÿÿÿÿÿùdÿÿÿÿÿÿƒ ùdùdùdùdùdùdÿÿÿÿÿÿƒ ÿÿÿÿÿÿƒ ùdÿÿÿÿÿÿƒ ùdÿÿÿÿÿÿƒ ùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdùdü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ü`ÿÿÿóYôh.ôq:õwBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø|*øz$øwøsølôc çV¿?ÿÿÿü`ü`ÿÿÿóYôh.ôq:õwBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿølôc çV¿?ÿÿÿù\øYÿÿÿ@Þ.Qá:\ãBbäµÁõÿÿÿCeæAeæ=dæ8bç2`è*\é$Yêÿÿÿ¡¸÷Hé @å6×'°ÿÿÿïGïGèAê8È,’ M¸Ö#à;êFëQò_ò_@``````@ À@ ÿ@ À  À@@ÿ@@ÿ€`ÿ@@À€  @À @À€ùeùeùdùdÿÿÿÿÿÿƒ ù`ýáÐÿÿÿìÜÚƒ ù`ÿÿÿÿÿÿƒ ù`þúøÿÿÿƒ ù`ÿÿÿÿÿÿƒ ù`ù`ù`ù`ù`ù`ÿÿÿÿÿÿƒ ÿÿÿÿÿÿƒ ù`ÿÿÿÿÿÿƒ ù`ÿÿÿÿÿÿƒ ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ù`ÿÿÿó]ôn6õvBõ{Iÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷}-øz%øwøs÷môf çY ÀAÿÿÿù`ù`ÿÿÿó]ôn6õvBõ{Iÿÿÿ÷~Jö~HöEö€Aö;÷5÷}-øz%øwÿÿÿ÷môf çY ÀAÿÿÿóXôUÿÿÿEß6XâBbäIgåÿÿÿÿÿÿÿÿÿEhæAgç;dç5bè-^êÿÿÿÿÿÿÿÿÿJé Dæ ;×+±ÿÿÿïGêFèAâ;Á2’ L¸ Òà;äFêUì\ò_@@ `@ À À@ ÿ@@ÿ  À€`ÿ@`ÿ À  @@@``@€€öaöaöaõ`ÿÿÿÿÿÿƒ õ`õ`ÿÿÿÿÿÿƒ õ`ÿÿÿÿÿÿƒ õ`ÿÿÿÿÿÿƒ õ`ÿÿÿÿÿÿƒ ƒ ƒ ÈCëYõ`õ`ÿÿÿÿÿÿƒ ÿÿÿÿÿÿƒ õ`ÿÿÿÿÿÿƒ õ`ÿÿÿÿÿÿƒ õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õ`õZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZõZÿÿÿób%ôs=õ{Hö€Nÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷|-øy&÷w ÷s÷oôiè]¿D ÿÿÿõZõZÿÿÿób%ôs=õ{Hö€NÿÿÿöNö€KöGöBö<÷6÷|-øy&÷w ÿÿÿ÷oôiè]¿D ÿÿÿñUñUÿÿÿ%Kà=^ãHgåNlæPmæÿÿÿÿÿÿÿÿÿBhç¡«Æ1Ò?ØJàPãT@€`@ €@  €@ÿ@@ÿ@ ÿ@ ÿ@ ÿ@@ÿ€@ÿ@@ÿ€€ÿ@  @ €@€€@ çZçZæXæXåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUÿÿÿö†Xùª‰ù­ø£ø™qø“j÷Žd÷Š^÷†Yö‚Tö€Qõ|Kõ|JõxDõu?ôr:òl4ãa*»HÿÿÿåUåUÿÿÿö†Xùª‰ù­ø£ø™qø“j÷Žd÷Š^÷†Yö‚Tö€Qõ|Kõ|JõxDõu?ôr:òl4ãa*»HÿÿÿãMàKÿÿÿXtè‰î¡ï•íqŠëjƒêd}é^xèYsçToçQmæKhåJhåDcä?`ä:\ã4Và*LÒ6¬ÿÿÿÒ6Ò6È,È ¬&}=Ÿ«Á2Ì=×GÚSßZ``@`€@  €`ÿ€`ÿ@@ÿ@@ÿ@@ÿ@`ÿ€`ÿ ```À€ €``@@çZçZæXæXæXåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSÿÿÿ÷eù´—ú·šùª‰ø zøšrø•mø’h÷e÷Žb÷a÷Š]ö‡YöƒRö~LõwCòn7ã_(¹FÿÿÿáSáSÿÿÿ÷eù´—ú·šùª‰ø zøšrø•mø’h÷e÷Žb÷a÷Š]ö‡YöƒRö~LõwCòn7ã_(¹FÿÿÿàPàKÿÿÿeé—©ðš¬ñ‰îz‘ìr‹ëm…êhée~èb|éa{é]wèYtèRoæLjåCcä7Yá(JÒ3ªÿÿÿË7Ë7È,È ¦$}B¥«Á2Ì=ÐEÚSÚS@`@€€@€ @€€@@ €`ÿ€`ÿ€`ÿ€`ÿ````@ €``@ `çZçZæXæXæXãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSÿÿÿøœvù¯ù²”ø§…øœuø—n÷’h÷f÷Žb÷Œ_÷‹^öˆYö…Vö‚Põ|Iõu?òk2ã\#Å\0ûìåáSáSÿÿÿøœvù¯ù²”ø§…øœuø—n÷’h÷f÷Žb÷Œ_÷‹^öˆYö…Vö‚Põ|Iõu?òk2ã\#Å\0ûìåàPàPÿÿÿvì£ï”¦ð…šîuën‡êhêféb|é_yè^yèYuèVrçPnæIhå?`ä2Uà#FÐ0K¶úêåË7Æ1È,¹"¦$}B§¦$Á2ÊAÐLÚSÚSßZäZç^ébébëeëeëeëeëeëeébébêaé^ç^ç^çZçZçZæXæXåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUåUãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTãTáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSáSé“fýåÜøšs÷Œ`ö„Uö~MõzHõvBõxDõs>õs>õq;õq;ôl3ôl3ôj0ôd(ï]àg4òÛÒé“fáSáSé“fýåÜøšs÷Œ`ö„Uö~MõzHõvBõxDõs>õs>õq;õq;ôl3ôl3ôj0ôd(ï]àg4òÛÒé“fâPàPç‘fÜáús‹ë`{éUqçMjæHfåBaäDcä>_ä>_ä;\ã;\ã3Vâ3Vâ0Sâ(MàEÜ4SÐÒØï߇fÆ1Æ1Á2¹"¦$}A§Á2Á2ÊAÐLÚSÚSßZßZç^ébébëeëeëeëeígígígígëeëeébêaé^é^é\çZçZæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXæXåZë•fûíåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿë•fåZæXæXåZë•fûíåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿë”fãVãTâPàRç‘fûìåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ߇fÌ;Ë7Æ1Á2·*¬& ?ªÁ2ÜJÍKÚSÚSÚSßZßZç^ébébëeígígígòiòiòiòiígígígígëeî`î`î`ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\ì\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\é\çZçZçZçZçZçZæXåUãTáSáSàPàPÜMÜMÜJÜJÜJØJØJØJØJ×G×GÓCÓCÒ?Ì=Ì=Ì=Ë7Á2Á2 A±ÊAÍKßZßZßZßZç^ébëeígñlñlñlõnõnõnõnõnõnõnõnõnñlôhôhôhôhñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeñeìcìcëaêaé]é]çZæXæXåUåUåUãTãTãTáSáSàPàPÜMÜJØJ×G×GØJÓCË7«NÄF¸ÊAâPÚSëeëeígígígñlõnúoþtýsÿrÿrþtýsþtþtýsÿrþtýsýsþtþqýrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrÿrþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlþlÿrþlýsÿrýsýsýsýsújùeôhñeõ`ò_õZò_ò[õ`õ`ò_î`î`î`ì\î`ò_êUëXëXì\ì\ãTÓCÜ=SÌJÀÐLé]ôgñlþtÿzÿzÿ‚ÿ‚ÿ‰!ÿ‰!ÿ'ÿ+ÿ+ÿ+ÿ+ÿ”1ÿ”1ÿ”1ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ'ÿ'ÿ'ÿ+ÿ+ÿ'ÿ'ÿ…#ÿ…#ÿ…#ÿ'ÿ‰!ÿ‰!ÿ‰!ÿ‰!ÿ‰!ÿ…#ÿ‰!ÿ‰!ÿ‰!ÿ‰!ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿzÿzÿzýoýoóXÒ;SÐTÏKÆÐLÐLôgýrÿzÿ‚ÿ‚ÿ…#ÿ'ÿŒ1ÿ”1ÿ‘:ÿ‘:ÿ•=ÿ•=ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ•=ÿ—?ÿ—?ÿ—?ÿ—?ÿ—?ÿ•=ÿ‘:ÿ•=ÿ‘:ÿ•=ÿ‘:ÿ‘:ÿ‘:ÿ‘:ÿ‘:ÿ‘:ÿ‘:ÿ‘:ÿ‘:ÿŒ1ÿŒ1ÿŒ1ÿŒ1ÿŒ1ÿŒ1ÿ…#ÿ…#ÿzülÒ?Æ1NÍ MÍMÌKÆÍKÐLÐL×G×GØJØJØJàPáSäZç^äZç^êaé^çZé\é^é\é\é\ëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXëXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXîXèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYèYëXëXëXëXîXëXëXëXëXëXëQëQåQëQçKåQåQçKëQëKçKãKäFäFãKçKçKëKêFÒ? LÆ KÇ IÆHÄGÃKÄ                        , 8GTjmˆ%‚¡#µ!›Ç¢Ó£Ú¢Ý¡Þ Ÿß ޘؒьʉƾ%†¼/†¹9‡·`ŒA…GŒT™Q•K Q– W› ]  f¨n¯v¶{¼¿†Ä‰ÈÊÍ…Äf¨\ŸXšS•P“P’OLD…A‚D„QW”W“U’U’ Y• b k¤m¦k¤ ež^–Z‘X‘^—e g¤h¥g¥a¡ ]œ X™ W™ Wš X› Xœ X› Y Y›V—S“OŽNŠL‡K„JH~F|Cz>v)f#c*k+k+j$c!` _&f-l3r4q5t<{?}@€CC‚E„E…D‚A€?}<{9y2r&f'g)i,m0q3u5x5z5z4z4y4z,r$j,t6~>ˆ@Š?ˆ;ƒ6~3z5|8~<=<}:w5r1o1o2p4s6u7v4t2r0q9y:{5v0q,m.n3t:zB‚HˆLMM’J’N˜T [©b¯ c°]ªV£QœRžX£ b¬ aªTœRšR™Q˜SšTšV›U›T™R•M’KŽR’ ]›ae g¥f£d¢ `ž ^œ ^ c¡h§n­uµw¸ g©XšJF‰FŠJŽQ”X›_¤e© j®g¬f«i®k°m²l±j°h®i°k² pµs¹q·^¤WU›V›Y^£fªl°o²m±k®f¨h©s´uµ u¶{¼€ÃˆÉ…Ç~À v·qµqµvº l°[ _¤c§eªdªcª`©aªd­ kµs½zÆ k·[§Y¦W¤V£Z§^¬e²i¶ lº mºl¹j¸b°]¬`®c°e²e³c±`­]«]ª\©\«]¯dºd¿b¿b¿dÂiÈ pÎwÕzØy×vÔrÐqÏtÒrÐpÍmË lÉjÈkÉlÉnÊmËnËmÌmÍmÐrÕvÚzÝyÜwÚsÓpÎmË pÍsÑwÔ#|Ø&{ÙhÆ]¼ X¶`¿bÂ\¼L¬?Ÿ@ L­_¿]¼\¹Y³X±X²aºlÅxÓ ‚Ú ˆà ˆá …Þ‚ÚÚ}×xÑ zÔ |×|Ö tÐ mÊ kÇ jÇjÈ d¿^¸]³T¨ Iœ=5ˆ2…9D—S¥`²m¿tÈvË tÊ vÌ uËpÈfÀ]¹Y¶Z¸]½ aÁ cÃbÀ oÉzÑ tÊnÅg½eºc¸d¹e»f¼f¼f»e» sÈzÐ wÌ pÄh¾d¸d¸fºnÂtÇvÊuÉsÆnÂmÁoÄqÈrÊsËpÉmÇgÀ_ºXµS°S±[º[ºY¸Y¸Y»\¾bÄfÈhÊfÉcÅ^ÁaÄ kÍ kÍ jËfÇ_ÀW¸O¯J©H¨L«Q°W·bÁmÍ pÐ wÔ~ÛƒÝ€Ø tÊ^±F–3&s l;‹P£T¨ X­ [±\´ [µ Y´ X¶Y¹[¼ ]¿ _à _ _à _ÃY¼UºY¾ `ÆgÍ _ÄY¾V»fÈsÐrÊrÆrÄtÈwÌ yÏtÌnÇe¿d¾gÀqÈ tÊqÆ sÅwÅyÅxÁu¹j«^œ RQ‹R‹YYX[^a“_’\ŽUˆNH|J|M€R…VˆT‡H|?s7k2f1d2f;oGzVŠ+f›6s¦RƒApAp@o?o?o@qAsEwHzKM O†S‹TŒR‹M‡H‚@{>yF(T 8bDtWŽo¯i®d«a¦e©l±z¼…ÇÏ’Ï ’Í ÊzµdŸb_™[•VPŒLˆF„B~@}?~@I‡N‹I†LŠPR‘LŒC„D†FˆIŒC…>LY™e£ m« r¯r¯n¬l¨q­ }ºŽÊ, Ü+¡Þ ‚À ƒÅr´b¥S–T˜R–F‹90u;~IŒ[ž k­z¼&‰Ë)ŒÍ&ŠÊ{¼ m¬\œT•O‘ONN]ž f¨j­_¤TšL”N˜SžZ¥]©\ªf±k´ f­b§_ _ž^›_š\’VŠL€Bw8n)d)i6wC…LOIˆ@€;{<{AJˆPQ‘R’ S“ S” R’ OHŠ>€3u(jaYS K[+i-l%dY_(m>„DŠ Bˆ3z1z6€44‚3‚3ƒ2ƒ3ƒ4„5†6‡7‡9†A‰JQ‘W—^žd¤g¨ i© f¨ c¥ ^ŸY›Wšd¦hªd§ _¢[XšX›[žc¤j«r´xºzÀxÀo¹e°`¬b­ g² f±c®Y¤V¡X£ c­ d®\¥W R›O˜QšSZ£^§`§[¢T›M•^¢&yº!t²mªd£ _[™\š `žh¥p® x¶'½/‡Æ.‡Çq° _ŸPR‘S’U•S“R’T”Y™a e§f§c£_ ]ž_ b£h¨m® r³ v¶ w· s³a Zš[š_žd£l«s²y·y¶u³o­h¦p®‹ÈˆÃ }ºs±n­m«r±v¶ z¹ x¹ u·qµf«\¡[¡\¢]¥`§c¬h³ p»xÃÊ…Ñ#Š×ÍtÂrÁo¿l¼i¹f·e·e¶f¸iºj¼j½\®V¨\¯bµf¹d¸a´[¯Y­[¯aµ h¼ nÃoÆnÇmÉkÇjÇiÆhÅgÅgÅfÅgÅhÆbÀU³R°S°Vµ^»gÅ qÎyր܀Ü~Û |ÛqÕdÍmØuáê …íˆïˆë…ä €Þ|ØzÕyÓvÐnÉX´G£:—A J©T´V·W¹Xº[¼^¿dÂfÀ`¸]´\´f½sÊ ‚Û‰á‹â „Ü{ÓuÌ |Õ×|ÔxÒtÏpÊkÈhÅdÁb¿`Àa¾d¿nÆh¿ ]²O¤C˜978Ž>“HS§\² jÁ{ÒxÏrÊ mÄf¾`¹\¶Z´Y´[¶]·_¹ kÄuÍpÈlÃg¾k oÇtÌsË oÇbºW®J¢ f¾}ԇߊá‰ß }ÒtÈmÂsÈyÍ~Ñ|ÑyÎrÇrÉwÏzÔ |Ö zÔrÌkÅb»[¶W³V´]»vÓxÖsÑpÍ nÌnÎsÔv×uÖ mÍ`ÁR´S¶`Æ_Å]ÄZÀ[¿[¿\À[¿X»S·N²I¯Z¿ oÕ pÖ xÜ†æ Žì Œä sÆQž/w&h(k7z O–]ªY©X© Wª\±bºhÄjÈiÈaÄY½T·]À _Ã[¿Z¾[½[¾W¹S³N­O¬ V²e½rÃyÃz¿wºt·s¸t»yÂzÆ xÆrÀh¸`¯\¬_­mºzÃ&~Æ!u¹g¨ [˜ VY_”!c— d–d“ b`aŒc f’ e’\ŠPDuFvM~ YŠ V‡QƒFy>r8l)`)a7nUŒ-l¤5s«9x¯8x®Tˆ@r=n8i3d0b1c3e;mBtJ} OƒR† NƒG|Av?tAwE{Cy?u5m1h/g3n3w1~8‹?–H¢K¨M¬IªD¨?¥=¦;¨<¬ I¹YÊVÇSÅPÁN½LºJ¶K¶LµNµO·O¸R½bitpim-1.0.7+dfsg1/help/phone-lgvx9800-notes.htd0000644001616600161660000000373610547564173017363 0ustar amuamu#include "pagestart.h"

Calendar

  • BitPim now fully supports all calendar features of this phone.

Filesystem

  • LG/Verizon appear to lock out access to the nvm sudirectory. Though it would show up under the Filesystem view, users will not be able to access its contents.

Ringtones

  • BitPim can make use of ringtone files stored on the miniSD card, see section Howtos for more details.

  • As far as I could determine, this phone supports up to about 150 ringtones (both on the phone and on miniSD card).

  • The ringtone formats include MIDI, QCP, SMAF, and MP3.

  • All ringtones added through BitPim would be stored on the phone.

  • BitPim can now retrieve and send My Sounds media files.

Video

  • BitPim can now retrieve video files shot from the phone. These files are retrieved along with the wallpapers files, and would show up under the Wallpaper tab with video origin.

  • The format of these video files is 3GPP2, which can be played on your PC with an appropriate software player.

  • Users can use BitPim to delete video files from the phone in a similar manner to wallpapers and ringtones.

Wallpapers

  • BitPim can make use of wallpaper files stored on the miniSD card, see section Howtos for more details.

  • By default, BitPim converts all wallpaper images to JPEG format.

  • The image resolution is 320x230 for the main display, and 320x198 for the outer display.

  • All wallpaper images added through BitPim would be stored on the phone.

MP3 Play Lists (fimware V2 only)

  • Users can now retrieve, manage, and save their mp3 playlists to the phones. See section Howtos for more details.

#include "pageend.h" bitpim-1.0.7+dfsg1/help/exceptiondialog.png0000644001616600161660000006337010652173461017001 0ustar amuamu‰PNG  IHDRv ¨¹½sRGB®ÎégAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<fvIDATx^í ¸]E•ïOÀf D"0%ÌCœ I‘LH "(¢8´ï>_kÛ¶ j7è{6(ŠØ<û9·c‹ †€ ™î<%wÎÌ«}ë¦RÔ°öÚ{Ÿ}Î>ûüùê çî[{ÕªßZµþUçœ{Π֦Õí¿Ãô 4X\xgǰàòàA¿:yqÓ¸…MÇÏoêºß?ø•õÒˆ8»>ð­_zvÛ?ühÛgÿu뇿±uù×¶.ýû¾Å_ê[ð¿úæ>Ú7ç }³þgïŒÏöÞôéÞkî¹ôÃ=gßÝyü›Îºã÷âØ*_XFZ¿øÀæoiËwþ¡ýñ϶|ñÃÍ5Ë›?µ´é‘ÅM/hüèÜÆÎiüð¬†ûfÔ/¿©néµµó.]?ýì—¯:þÇןU×¼}à{Ú<§,^Ž ^ˆí?ÂÎ ÄU5ù"°|xï3ÃÎ'‡C+èN K-n¯NØÊ'PóݶóV4Þô©¦©Ÿn¾ö¡¦‰n¼xeã…ËÏ¿§ñ¼e çÞUÎÒúñ‹êμ³öÔù›Nš³éøYš¶îðë^ÏÅ¿ªù†øs˜‰]ô¥¾¯=¿íñßþ¹ïn{艭÷=¾õÞ¯ •ݺèï•ÿžٟï›UÓ;õ3½7|¢÷Š{Î_ÞyÒÜM‡_õ¡¬Ä^HlÓ#‹¶<ýµŽgoÿæçZ¿üPËîkþì½MŸZÚø‰EBe›>6¿ñÁÙ÷Ϫ_1µnÙ µw^±aÖù¯\wÒwÏ9<0"ž(MHì1ÔN±â`+^ª/ÞŠ1Ä*GRñªjÿË«ºÄêoµ Þmå<ÅB<@@@ ñªê™w5^û±¦ënºâ@_/¸WˆkãÙKÏ\ÔpÚ‚úSçÕ4»îÄÙµ'ܶéØ[7™±qôÔõ#¯_}À„_×|c“|»¯P¸[ÿG¯×/~Û#ßÞºò±­Ë¾²uáÿê›#dõôÝòéÞ›?Ù{ýÃ=×=ÜtùMB_Åáõœ»„¸6ž¶ ñä¹ cg×w[ݘ™uGϨ}KíûD›V;êæ ï½á­ƒ.ûmÍ7j•ÄNýtïGÿeëÃOúúž§ñwwŸuWÇi jºáçºÄ6¬˜Úúå¶~åa¡¯}/þFüªá¾Y ÷N«[:¹váUµs'nºýÂM³.×»~öýÓǯ›vÖ«SNûþ…Gy$ö}?¶‰Slÿ‹ÆVÿ)VœS Å)V6ù7C{ÿrHqbÖÖ­Ù&Ä @BÜ\W@«p5Oo>yaó…+›/ZÙ|Á½Mç.k:kqÓi šNžÛ4nvãq·5Œ™Y?zzý¨[ê˜VÿÞ©õGL­;âæMï²æ Ë~Wóz™B°Ä[œÄë¯ì?¿†JìéwõœqWçiwÖ+ÞâÔR³¼åóçWe¤__¯®{™Ð×3ÎU×7N=}ÝÔ3^ì’Ø·; ‰ÛËúÿâGíÎþ#ìMÇÝÖ8æÖÆÑ3ޏ¥ñði#¦6zsÃaSFÞ,$ví—ýgÍ7u‰±³à‹[ç}¡OÊ-Ÿî›òpïÕéxÏ…+{Î]Þ}úÝ='ÝÕsÂ’ñÛ±KzN^ÚyòµG^ß/±×¼+$¶ñ¡yâýÃâßûooX~‹ÒTñÊë^}|ÂÆëÛ8yìú›NþË 'ÿàGHìy«=+þ*HCå¶ÿ£•Ä*}ýÞŸ‚­Á¤Ïoú:©f‹xüÝ?nø×î5ÁßꊯøÛ¶à§7ÿÓO{¥ñ@^M^VñïOÿ{«~QþJõ‘ ;Oÿ¾¯­k—´sìÝ­j<¨ Bb™Ý|æÒ–ñwíÌÅý;¯iÜœ¦ãf7¹­iô¬Æ÷Îl<|zãˆ[š™ÖxèT¡²u‡Myû€‰/Ô|³IéÈÅ÷u‹7 ‹· Ïþ\ ±Ó>Õ;å½W?Ô3ñ#=Þßsî}=§­è9ñžžã—ÚtÜÒž±wuŽ]P?êú_r#Þî4y“x°iöÅâ ÃÁÛ†˜-^…­_1­îî)JYåƒÚ›O¬½ñøM7³iòqnûÚucŸ=Ô^‰•YñéÁÛÄŸÄÙöªÚàélùYÆýú:x^‡nT| lk7u¶oî=lækBÞÖÖoÏ!?ôw=?÷í·‡ó¥gž{í¡šßîsõŸÿégÁ–~úÅë¦[nNó˜ÙÍ£oo~ï¬æÃf6:£ùàéÍBÛpÈ”õsÙŸjþ¹EIìùË»oþTïÌÏo!º0õSÁP\ý±Þ‰í½èÁžsïï9í¾Þq+z»7§1Ëz]Öuì‚ú‘×öKìÍ-òÝM³Îo¸÷æÆûf6Š·¯œY¿|jðK®V‚X7ó´ºiãên:®nòÑu“Çlœrìë×ûìy##Ö.|³ ²âÅ#¾ðn‰Ý£¯â«ÄW (9”¯ÅJ‰=ÿo®‹ß y~ì—×4픪9ä¼ç ·¶=íÿì{áÏäùR\|ÉoÅ¡ÊCÆ_üVÙ”×õn{í\þ§þý£(;ƒn\';éŸÅu4Ê"PóÝÎ÷ÝÞzÒÂÖÓ–´±¤íôÅ­§.j9ùΖqó[ŽŸßrÌÜÖѳ[¸£õ°ÛZ™ÕzÐÌ–ƒf´4­é 7îÙK5ÿÒ*'+Tàì»»¯ÿxÏ-Ÿéñ·ýûéÞÉŸì½æã½—?Ü{ñC½ç~¤÷ôzÇ}¨ïØ•ÁoGßÛ;zY÷èùõ‡^ó«=7ÞrvÝ]×7|𖆕3?8]¼Á¸þžÉJ_僆éã¦[?etýäÑ›nýúU£xΡ‘‹6.ZHìñ¯§Ø@bLj/^œbÅ«°Rbûõuðü§y™\º}è²mª=þÓà)âo|ëÅàWS.8}Š/ý¹=øÒÑ ‡ÄûþœºtÞÓǾ®wÛ+Éþþzå€TñÝœhN æ{ÝïÕ~‚ö“‰¿Þi?mIû©‹ƒÇãîl;þÎÖcæ·Žž×zÄܶÃf·r{û³Ú˜ÙvÀôÖ¿¹±vøÄU5O} r@Á©‹»Åß¼Ny¤Wˆ«øñf!±Ÿê»æ‘Þ+éð‰Þóî=ý¡¾qö{ ±G,ï;bY÷ȹ ]ý:Nï(ÜHÛ†OóZ÷!® +¦Õ/¿YÉYâ òñÆ[Žm¼éȆÉGÔ^wÄ—üÑøƒ# —mTöŒ5Äþ÷ý+~$¶Yêk ± ·‰ïÌSÒ¥Kì¸\¿wÓÏD7uД_§'›º¨¿!Y?ËÇâ+:×õuã¾þÊOÝ<®8Á @ úÔ|¯ï°[·3o˸…[N^²åÑo6Øíˆùí‡ÍÝ|ÈœÍܱùofmÞzÛð†L|¹æ[[dÝB0vAׄu_ó±ž)Ÿ $vʧz¯ÿdïÕô^þHïÅô¾ÿ‘¾Óî÷Ñ­Ç<HìÈ}#îê>xvãþWþj@b§/®¿~ì¦9ê–\SÏ”ú{oÚ«¯K/oXtqソï(nºiTã #k¯±úÒƒŸ;}ÿ‰*+β{%Vœg‰mž‰–ú*4ÒØ»w ½g§lk›w Ù»pÒ×…:®]×¶ïìæŸ Þ»ô±Ïü\Üõô ;kžßQ˜·í§..ú—ím]»åEÑ”Šëâ±8 ï7úóâºè#~ N·ïî&n×o_ø=ÙÿÑ¿ÿì¿÷äúîÇòv4J!Póý­Ïè8jnÇñwvœ¸¨Ã-±wn9l~ÇÁs;þfvç~³:†MßG¨lϯÿ¯¸R¿èŠúEëNhXpAã¼³›î8¥yÖ âzßÿ{²éšë.Ûï÷ùá‰û H¬PY!±4£¸ç‰â…ëÅ›oÛ¥ÄJ}|÷Ñô§yÅãa÷ï~ñóÁƒ©ºr·ø7xԅϺg÷I¿~ÜWÄâßÁsÛ„îŠ6äÊß 1Ö/*9”‡^ð¼ì)Ú¾Sk¢ÉõÇ¢ÛÀ[®&ü\õ÷uVð@ ÷ ‹v¡U:šnÏŒîÃîè~ßüî£v³¨[´1‹º^ÔuÔ®÷-ì~ïžÃö|gÏóº÷›Ý3tV÷àé]ƒ&· šøZÍÿé‘ÓârØŒ®± ºÅ'#~`e÷„û{&Üß{ч{>ð@Ïùöœý‘ÞÓ>Ò7öÁ¾1ôº¯ïå[ß³´oȼî}¦ÕšÐÿŽb¡Ów¶µ&ž+ÞpËøM· v΄ڹjç\T7çusίŸ}vÃí§5ÎÛtËñ,±8Â6^ùžÚ C^?gŸgÇ ŒÜÐ5p+>™8Ø÷­ Ž´ý«a…¾]±]œ\…”jzß.¡¯z“×ß÷Î@[þÎà=XÕJbs¿ò1Ašçv»¥ó Û:ŸÓ9j^ç‘ :G/è|ßü.ÑŽXÐ9rAça ºžß%ôuÿ9ÝÃnïÞwf× i…ÄS²¯ÖükŸBˆË7µ¾}óIwn9sé–sîî8÷žŽñ÷tŽ¿·óŒ§|°sì»Æ¬èuo÷ˆeÝâ)âaóºö¹mKaòÆÂ…ýß´³ç(¼úüÿzÅèµ7œôöÔ3×M?gýÌs×O¿~Æø 3ÎØ8ý”ÚickoSwèºkFÔ]q@í%ÃÖ_°ÏŸYøîñ…‰•*+$và‰âwK¬TÙà+ÞE|ÏN!±AújI¬[Be•Ü”Äú:àzÕà,EôÈŸÞyøì–ý§·xkË!·‰?Îim„h·‹[¾­å ÛÛþæ¶¶ýgµ »µuÈŒ¶}¦µ šÒ\¸vÓÁ“÷Jl]û®“æ¬qãº#§¯;ö¶cïØ0nöúîØp¼ø~Ù9ž³ñȹu#çÔ˜]àíuûÝZ¿ï-õƒ¦l,LzuÌ”ÿ¨£8 ÏÛY×¶ë¥kOzñ‚/^räª+]uõØUW[uÕ /_}ü_uì+“Ž~mÒ‘¯]>òõËF¼6áÀ×?°ßkçíûßg úÍ)…ï]<&0rs÷ÀAVJlðG;šÄŠ·ø«ƒ¬|º8øCChï8×úô54üú¼¡Ñ@@ ßNýÄÎåÿÒsø¬µÃ&¿¾ßoî?eõ{¦¼±ÐV‹¶ß”Õæ¼9tÊ[ûNþëàëßÜçÚ7]óפÕOymù?n9õþ­Î’î}ù­Ž“füö€K|È•¿8tÒÏ›ô“C¯üɈI?qÕ/žôË&ýÇþ“~=üÊߊ÷7 ¾ô?]úÛÂE¿3å'«V·-þzÿ³Íóv.~¬§ýõ—ÿï•'}çÔž9ëï?ôé³{ú¬CŸ9{Ä÷Ïñƒñ?wÖ?:cÿçOþÜ)CŸ;iðó'úÁ …g.Óü—U‹¿"þìÇ-±âíNý¯ÅŠ?iíÿW|´SЂãl÷»þ(vÏûŠå+µF“ó”'`4ˆJ Ò_O‚ÿ 1 ,ÜyÊÇvÔühWÍvŠ'÷´5Ïõ·jíÙí5¢ý`{Í÷·?ø­m§Ü¿­pçN9èÅ;„RúÞÜä».Ž­‹ë2¿/x[òÛ†Ìé[üÁŸØFú¯®u§Ð×!7v¾ëµXíÛ/±âÅ7íÈoËÑ>æið¢ŽÈ­jÛ-3›˜¤|c¥¼S~fŒÞ 1 à€@tâýÃýïoï"þ¬VüÅÎÌÞ­}A¦wçQù¯| ÚÍ[ 7lR1ð[ñÊ«|ñÕhï~¢x}ÿßí¬/Lx±pŪAW¾¼Ï¤ ®[-Û Ékd+Ü´>Pbñ…²‰ï—UåƒþORF¸JüY?D$ ôN|µŽ3s®X|»«hâse»ä­åuÑäñ¯øDbÑÄçüË&Ä¿BOÝ{Ū@bûUV ­”[£ÉASýµ÷þVuÃ# r ¢(A²þ ›@ÔL‹Ð_~€âÀ;ŠG­vî[#—µŸ¾¶µi5€€€@l…k: ½U8öéˆG H,6   P$XÖA@@ ØT°Æ~V7‚€ä†$   ©àJì3O=†   à# >¤Â8GØ•+¢€€Ø:6ßµšHb#}Ž:ƒ€€@%ho«Û¹Óü¢tb"­­uÅ‘ØB!øšü  y% $VL­¯¯»££¥½½A(hK˦ææëDkhx[´úúµµµovuµ‹žuu…Äæ50/b+ôµ¯¯«§§Cèhgg[GGkkÙ²¥yóæ¦~é­B+z®[÷ $¶˜0l‡ûRžû“Œ•ä^'Y¾A»'ÿÞƒ Ó ÕJ@J¬Q¡¯ÝÝ[öè뀸J}mk«W»zõ Å‘X1ª(ò? _>Ðk¢ê`ôI;X ër’Û#I¬MÌ&Ï™xwéq,bŒ8ÎøPpî-¢«0 :)±âùá=ç×@\eëWÖº=­Vó«x!Vi­ü3ùŽâRK¬Ý8]E’X§)ã˜HKóx”Pb'cŽ|rú„³u‹æA“¶oa‰IAbsY’0)È)±B>Å›‡•¦îùC:u¥_b×ôKìOJzŠeÖwfiޤœs˜S“K,Ó¬±áHUb£NŠCîch¶/vö®ˆ¹ÊÓ2Æ\@²I`Ä®œ#UVê«ü[X¡¬âŠø·©i}ñ%Öù ¤Ô [<œ–8“Ù*åNh[£oÑ]²·Î)èO«2ÏgºÒpˆ9û8§fg¤ážMÆ9eÚ+}h£'A^÷ÍöJ¿Ñ–Xû·Ù\{ð @ ÷¤ÄŠÏlÏ Ke•Mþ-¬|ŠXè«x±Vô=‹vŠuž;s;í f™j–}K;.° P”Ä A²ªšü$E%±âÅZñŠØ¬'I–e,˾e=®ð@ 2 H‰Ý¸ñ qZ•Ÿ#¯úùU~Lñ¦M«û%6…wW&:x   )±âsÅóÀâÕÖ=m­z,®‹&ôUü=èùÊ+¿.þÛ"È!±âËœ×[o½D}™]ìOwbŸýnñ\hE8iĺ}Î~ºÂC´ ‰ŸNüÆÏ¿ðÂÿûç~÷»g­öÃ?üáß^~ùW⫊,±êÍÃiÏ3‰}~}ç÷,–?1FŒqKo‹ro%ú\”‰Ã€@E$¶£µ[´®öžîͽ=[Ä·ÚmÛÚ½m[ߎ[wìØ&Ú®]ÛwïÞ!›èÏz¢xøø7G.k>}mkÓj½_‰‘= õ&áí1N~K%úœ|Ö° PéÊ)±Äß¡Ú%U¿¢þ2ÒßYòïAÕ-Û÷iì œ¸)3þWeŒ>}Ý o8gÿP#N’¡ÜlÏu·}Ó·§ìŒš4nüë‘[é þƒTÌI¬­@ªp¿ò•o£¿^ÍUY×ûÐvœ·Ð·;§`ì'ìíE’i2Qø†ÐÝÀe¬H¬|´mâÕ° 1G<È›Ä:Ï=¶0iÜeœüŒÛ‰Îö‘üÑOrê¤È‘ONŸPá×¶Æ9•¸—`ÅÜШXðÁæib. 9&P6‰Õë)!'Ìâõìå;†Ú'*âz(4ä‡9çÐL•J(±Ä„ÞmîÑ?Ú1ò 6Ç SÈrJ¬Î‘®¿±•FÝè|bÖ7h¨®øšs£1hè-ùäô‰´YqvB±$–Hß®%OksÈ Š‘XY¾'3m%Ð;ø$Áè£[Ö êO–Ú U³m*6îåøìÎQŸ`èÄé3´ÍV÷ÁØ ¿²‡&ü'N®D\œ;¤Ü,BL@ ¯Ê&±åZqÇ Šs¸\‘Ÿ  5جEÄô›õÁ?ð¨:‰E&€€€@i@bK T Il–Ÿä§3³§›3gcß(¬%¹—¹€J0„ò¤”c1§n UB -‰6~5ýÅÆ[XKSÙ#•xï+m‡SÓCû„vˆçmVþ6áÐÈœ!œ}87ĸ…3ôPE–Ø£Ÿ(Œx´PµŠ#±Æ9#k¥° %VF¤à ‰ ]½è qY”Xâï#uU–Ý”*è?êÐ kã¶MûÌ-¥È9(§³:/†qNÐwÜ´‡¦§oÿV—ب¾Ù¢¨H×o&"oh4í á$IÆW)ܨP™“Xúìè”â£èÛ=™÷&¼Ñw{’Ñ =S2I»mlDŒ»lûöׇ¸¡µ1¢ìÝyòޝ ]ºp@ ûÊ)±¾#qÓÎóŠ]âjk× Õcß9,ôF{¾8éÇJ§vêŒÇ¾q}G=Ý+y¯Á‘ÔË0Hh¿þ¬€ ‡˜#$6ûU‚@Õ(§ÄÐ}…ÕwâQà;oBbh•³4Û;ÎÑÍ9CC'ªÓ´A¦0}úêq$åK,­Üت­P˜8T4LK,ó¨G”xûTz…YÍCuŧˆ¶ê0Ïa %–†éóÊÞ—D:Å:…?t7P²Slèæ¬¢×6œ(;ÌI¬¬¿Æ³”úžtû°è3¥K)ñ¤(¡L¶Ÿ¾#¯í³2Ë1â»ÝÎÁJ¹ª;`-Eé½ÅqþÖwÑ át@¿è£§O\÷ÓN†²¯@8 ce“Ø3åO §(>+ôŠ#‰-gÈ ±å¤±A@ eØ”Ã<€€@µ€ÄVkä1o” @bS ó  ÕJ[­‘ǼA@R&‰M0̃€T+HlµFóH™$6eÀ0  P­ ±ÕyÌ@@ eØ”Ã<€€@µ€ÄVkä1o” @bS ó  ÕJ[­‘ǼA@R&‰M0̃€T+HlµFóH™$6eÀ0  P­Ò’ØáãW\Ö>|úÚÖ¦Õz{æ©ÇV®X˜íß½JßÃ`óJ朚1ÁóqKÓMÈ&bJì%k G=Yñh¡0jU¨ÄŠê¬ÿ—œNŒrOÜÚ1…ä8Lâ’Db“ 3g^è 9 P6‰•ìâ)„“{ SX$ $6ËS( I¬q´Rg\¸âûQ×ÚˆêIȆnA>öù#w ª=´ÚRèãÒ6CçèÅðÄù£½¿azåDZô Si²£€€@ª²%±ÎƒT賚vÛaÄ×Ù C ­%Ë8):u=ö bÄY?t8}îÄþÇ(Õ”…q¨Ù’X[ôC¡ï·„Ī#—OTB%ÊVDßpöyÔNC˜9îé§ÆP]÷&ù´ÓîlkÄ¢RÒ~‚€@) dTbCµ„sôdá˜Ò©ô¡Ù·'°Å×>Wœ›§Äú88%Ö§¦Ä¼œÛ”R&1ÆlȃÄÇJ~j”x.”Š¥Ç¢%–vO‰kè¦!=‰uú` ­Íæ"‡W å"Q‰•]ŽT¿¢*»:Z9û‡!žÿô)«qœu: k-!ÞöŒ8s4„\Ýb$®å>ß ò†)cD‚a¹rã‚€@F”Yb3BÁv2fhŠ Ý@ª$ÖtˆGèz¢PDè PÍ ±Õ}Ì@@ EiIì°’FqŠ`@@¢(¦ÄNX[8zÏgQbCŸt¾·:_^ e=C"ߑЇ„·Gv·´7Dš3±“Ì íw«Eš¯šH¼»¢rÅ[7¢º]úþ‘8Dê\ú¹”~Ä I¬þFVâ¯>í ­QMì7Ê–˜~¨Ã1ü±mo¦wE)¸ö•¥ÌéØaÒ+o¨Ðù2ÝHÒp2Ô}ÜP H⤼—Ž8ÇzF‘擌¬xÆ ¶òG}!ØåÎîãŒ/ÓN}³—jŒÕÍtÏ(Þ]Éó¿²%±1¬R94H¾jzcJaHc\æš±ë¸]pcÏÚ9/þd“KlìJ{ÊüzÁçÀOì$nÓ›<+"Í·Ä Ý@Äs^AãÛ“$C‡îœ|œ}ƒÒÎ@bé˜i‰52³/sîí”òI‘=„~Å^3ÆomyPWTOûо&íl6\²íèSæH¬Ï NÁ'˜sñ©MبézØýÈr’DŸQàBsƒÎ›¶mÐÎ fg·W'…ŒY8—¡oN?#mŒ”ã¤.góÊ\¤¾ÂM,Lßì|·0 ] B³ˆS“m¶I6Ž™º7[ë\Kz¢‡®»Ù ÒØå9 ö Î½¡^ |eÑç¿Ó1"9âÙ -4>7øÃÑÌ£bÑ95Žˆ½1-ÊD#Ä´)N®Ú9cgµ=qºj%X¾©q2Ä·ìhê‘ò¡ðÝÅ™& 3´€ØÉÔ^Îrá³||^E2茯^ré™Ò…ÔJ>:'ÀL)elg²%±Æ4ŒB£g½Å ý­QN*D•XÃÛÐÒìK²¨vè¹sVTTQ”6í*À© ¶?Îòê«à¡å)ƒ‘õéŠ/4Dõ‰‘D°|)ꬭÆvÇ #š´)g ….caú$Ö¹?ão\œnЉ3Ùж=ô¥´o—霸mDïæÌ+çtˆ¸3Çuz[Ï2xc%I,Qœµ›/'Q%Ö¹]ð §®ZÅQ ºó‹Q¤åa;ï+t¹´kDhá­Ph%Ž,!±ÎœñÅ4ªöýùűXkä‰Ï¬¡‘Q§YJ‰å(4á½éòE«"Jlhªe¥‹1g­qúpê|õ©H‰ =ôæË§»Ä.Ï™èFÁŠWè%ÇÉÎP2ÇøÛ߆ žÄÒEŸ.UÎúâ³²G–#±º“iH¬3í}¹Q\‰%voÎeËÉXÎvÁÎbl/Ž„ÁÐ*äÜþ{bæ%F}ã§sùs@Ñ}*H>9®VŒÄÊ\‘ÿ…nõn¾5_iЇó í Y(aŸÀó%6û‘5€øÑWy g lƒ¾! Úv¶ëé5Þ™ÿƾÇgܘ‹½[2–€í±úô…éÔHc¥;×]‘8ynûæœ)á±op:`GÄ·­±kW¨oF)ãÔgåáèVõÉÄ–†š‘Ö¥4¯£0r½=´C–™§ä¼m–9³-Qp¾}gÅ·E74¸Îi7â9êIÂÙñ*;ž$DZâÛ!±%ž‡áì ²sŸdª¡ë9´C’ÑÓ¾7†óúBßûE“øþð{ÒŽq«±8ùæ<êq.AŽ“©ö‰G;%—2åLJsLÃlZ;ŸQœF¸`@@ rUb׎z¢0âÑBaÔ*Hlåä<H…@ÕIlÚOwäÃ~Q^µ2žèù›6œT–Œ‚€@\/±QÅ€_åù=“¿ìÄ_Ú^IûÄ(|œ¦ø·ó™ '€d“@ÅKlT¬üÏï ‰uF59Ñ@ g².±ú)Ó•^Áõç$e„ŒúnØ‘Œw*FúÑUy¯Ó¬~Q÷MŸ}jTÆ£Ú×9èFì$öq&ø;çe¸j÷¡È9[]˜€@•È´ÄêÂc‰øË·ã”gZ uŒ4–½3 Ò‘&@{NŸÈ}>sæ¢æ1vU¾ö0}ÜÈ•ÄÚ¢I–ˆq4~Å‘%ŸŸÎl£½2äŸ3_çÖPJŽ{âNWmu§õ>÷K¨Xó)eç±L¿|ò ô¦¸Ë·VúS¬ÁÄ'¥Øê©&˜)€€A 'ë<Ì©‹É…ÊÖ]Ž¢øÎ‚>oùçK¾ Ú>ðG¡¹9¾¶cXª%i‰•R¤þÓMö©ÑÖ]ÉBíècéâ¡$Ê÷„°ížSCŸOö¥ ýì«1"á¹>¨á€1œó9^#.§ºãY⪭5˜8T!¬K¬-WEŠ>©!œœ[œ}@;6:Ü Pq².±ö‰­XˆÓ³ÛCý(I:caLCGqRŠ-“±oL2_Ü  å"žÄ¾9rYûðék[›Vëí™§[¹ba¹f‹qA@@ dŠ,±GïýHlÉ‚ˆ@@²H $6ôÙEçÛjlØ¡v²Ÿˆ>eaŽ }Hx{D`¥îivÌÄN2ÝŸH¾1g3Þ]L—äk%üÎÅêͲxU¬Ù);iÏ¢4ö‹8J†$Öx%R­„ÐÙ†æ® ¿QMÊþZlè¼bd¿mS§ê4è+²±Ý3nŒÊÙ“¾zC½ o ªQo!œ õ_‹™ØQݳ‡°ˆ~…ö9Éo}žG¢*™ÎEÁ„ÕÂlh4C;ÐÆeæ‹…¾ŠŽÓÁðªˆÄBë3ˆ‘f‘$ N²%±ñ˜2¡]KøŽ7¯ömy 5âÃzc¤úÈ_xÉ%V¯2±g‘äÆÜH¬Ozùpøq÷ ?,~O¾Wüž¡£‡–©ØcÙK˜sE OìA#-ÿP8üñæß&¾«²g¦%Ö˜­LˆPXF7§„ø¤ÈB¿âL\å’á›í†ïŠ*dÎÙ…ÚQKžÝÉŠpÞ¬ºbÌ=t.¾½-MبézØýÈ:I:sÀÈ{m‡æ>›¶síYÁìãÜè8Œ˜»ñ+ˆ3+a£¿Mƒ¸âóŠ^¤ÆÐ‘ö(Æ\8+Å™² üí+Lß”W¶?ú KÔ” u#4Éõh[3ü'vvr¥•/´Ù’X#<̪ªÏÖ¨°Îl3.ª鼤×·ª™Æm·“/Nåòñ‰ä6Í\OzæÊwÂd&ƒá ]”}2 c)zdU˜È®âæ,_tèêl¶gGÌ×÷+'ÿМô ÍÉ~gme&6]—é ÷EÁYýœ ­ Õ6zå:×S݉$!ñcZÉQ¢f>__EÏlI¬s抬J¢èÐõˆ®n¡!:Ø…Øð6tú8öu§e:Ûõºšc*˜u™Ÿ!ÌÙú ½s©úüѯÓCs›.±Hí\²½M(±öJñ-:N&Qbé°úœ±#åÛ¾ÄHr#Ä"bîni Dd+Ib9{&JgÕ£ó’Þ E*ý¾µ'3‰^6üÅCìW’¬Lb99ËbhQ³Ãʬ×FDœ%ƒ.Êñ$–uNd}”ìÔ¥k4'"‹.…6^g‰$b§,ø‚Iøí¼²ýñqfVøÌ)>_Úó}ó­bºR9K”VN°¤MŽçtŒˆR ÜŽ—övÈ8eÖ·|8J¤úT¤Ä¼"e¿sIø$!¶Är2ÏYë™K…™7⥯íŸétõ-"# }ɬßnô!péÑô­_ª8§i»an¬¦"c£zZ—í°ò×Q%ôœ×Q‰ÇYz´WÎIÙ)gK—sh»›S´|ÕFw•˜šÄ9Q¶qŸçõ Il$¿cw& Vl›U{#]ý“` Sh‡$£§}oJÎûêcètøþð{êƒë®xvB§¯ë1§³ÝÇéímzs‰7…Ð=A³9¸7v¼Ò’Øaggôc“ÊA–k œm]BΡ·‡v(ÖdÓ°Ãyã¤Â¬é̘ÝbKß¾S˜9ù/LÅ²Ì óÜo.ÉäãêXŒÅF%ê»-â¡“wEr̘©1ß$nà^È>LK¬}ô‘Ç2£Öoú¢ßæ;„©±ìÛmûF\ígAu'mŸmAµÅP2Ú+ç”m-tΦ§~ëœ1M: ±¥:û+ ‚€€"u‰%ÎgN¡ò)¨}p4ª¼m¸â”%%üγš.áœã`èV@Ob%§0ë·…ÜwîTwÙŽq®„î!°&A@ ².±†èša‹–”ûàE¨‘¡£Nµ0 2O‡L ÷¥”á‰íC¤Í„€-±Äd#íBœ{šÐmAþf PÍ*FbCJÎCmèá‰#±†‘²H¬3G¥ZIÛˆS¬}Ô†ÄVs¥ÀÜAbȉÄOc&HZÚ}:Ä×'æ)Ö'œQ%–ØR0Ý¡{§Ð½NŒÜÅ-  q#±²p«ÿtMU‡9%lÆ=¡gP}§AÝ ßÁNWDÝ™ÐS#!¥†笙†>ë«S ¬1)]J h¶ ‡nt2¾Nà€Ä –Ä¿zä²öáÓ×¶6­ÖÛ3O=¶rÅÂަt _óÒpÀÖû4FIb3%S2›d¦¸@ŠN ¨»fïgCb™¡Ê¸Ø¤á^6™´Ñ @JI Ú%¶”¬1€€@U€ÄVU¸1YҀĖŽ5F¨*e“Xû}¹ñ¸ËŽsôÆ/4ưáúÆ]ŽôH‰@Ù$VÎ'ù;_’[%iŸÄ†Ž£C$ÇbØÇ-  IdHbí3™ñgJ•‰¿4U²­ÿŪ²ìüóMý·¾³¬~Ý0"GT.Ù¿uî$œPÛ=c¦DbŽN—’$ îàȺĪ9è’©Ÿ€m¶eÉ>1+kœçZ}}l—|çrß^AïoIÐ>œ´@ä2$±ÆÔ+]S£AVDCž9 ƒ†^êŠNHlèùØ–X{ Pùä3gÊè  œ@åI,!¨¾Ó*qŠådžt‡Z{h}D²¡¸¾ G ÑåL}@@’È–Ä:…ÄwîôIZìS¬­j|ÍVž;õ×PiõåœP9}’' ,€€pd]bí·êWôgSmÑõ=ûê<\r$VJ©þä°ÏCC/CŸõ µlXPS0fm»gœt9i>  É ¤%±ÃÎ~3Æ×ØŠ˜|†¹±àÛäf‚˜€äŒ$¶b ‰­˜PÁQè'-‰EP@@@ 7 ±¹ %&  -ØlÅÞ€€ä†$67¡ÄD@@²E›­xÀ܀Ŀ&”˜€€@¶@b³x  ØÜ„ÈHl¶âo@@rC››Pb"  Ù"–Ä¿:Ægg‹ ¼Š)±—¬)ýdaÄ£…¨UØAÁ­  y ‰ÍC1 €Äf0(p @@  ±yˆ"æ  A/±ö·¨Fý^ÕHý#uŽoa9=ã‘<){gp({à€@Q”Mbõ2Ê)©¾>Ù”XÂ[§”r%Þ†‘r«Üp:ÀôŠÙ- n°  #±¾ÉTÄ»ŠªU H,g•¢€@…È–ÄÊž*»òþ¯üÑèã¼Ëîé¼¢_4Æ•54@ïcœGu7 —lS¶Ye9_å¹~"$\r&¨+”ª“¼Ýc3”1r…®C¸  Ke“X[;u¾zéwJóv§$Ó"jÈ!±º°qº©YzãT_C€õ>ö>Àç³Óˆ‘Äœ{‰>>gB£cÐszåÌûb.—%& Ù’XuF!¤.´}2³ÛW© ͰUJï`Ÿ¨øÊaŸb}÷úæk»j÷ UÙHJ^ßjp„ÙÞšzF¡³ËÇÅ,@*—@†$V¯˜‘J¿ó@é«¿ö!Ò—8øÚ/ï²;8µ“)±“ÐÝ€~nö%h<ÎΓ·­Ž†‚s åŒK(äÊ]Šð@ Ò“Ø79ŸQL”QgæË°Ï²}r¢}0BNK,¡Í„ÞÐRäÜ@p΋¶´ÛÛŽxK@ „ß¹«pî„’@ÎßÅŒ@*—@†$VPœgA½v˪ë?Ú£ºéÆmÕ4,ا4§\9ÝÐ{:%MwÉ6ëÜ9Ï‹öíI%‘X§}BÅíx)· 6ÐXÓ+w5Âsœ(³Äf–¦ót•Yo™ŽårR̹£€”ž$ÖÍ<j”¿•~µ`DˆD :ƒ€€—$–K ý@@@ Hl$\è   \X.)ôH ±‘p¡3€€p @b¹¤Ð@@"€ÄFÂ…Î   À%‰å’B?ˆD :ƒ€€—$–K ý@@@ Hl$\è   \X.)ôH ±‘p¡3€€p @b¹¤Ð@@"€ÄFÂ…Î   À%‰å’ý"}åj¤ÎœˆØ5#nDô:Z÷,Ì1¡ oÆ«ä½#ÍNvŽtKÔ éÆÓ(žÍxwE{ÔþÙô*ê,ÊØ¿l+"§ÿ—5 1„‘F¾¬¢³M¤F‰—šÎ»â™’ž.qh¤‹”J§Í'4µ|‘ŠÚN!#hªv˜ôD õ*t¾©ÆÔÎ4c¸Pÿõþ²s¤[¢ÎŽ^§BKAT—bL¹èˆˆâ{,z]èy«z–½FňqK9%¶¸3qZcjž¡ÖìFI—”ñîbî˜4RKÑ'h×&ÎEGA”'Ïä›poÇq’¿K¨h‰ Ý1„²âd ³€„ZNµCÂŽTí±ìM<Œ©"Ša2œ)Ó‹o™®Fí£W>ÇmgsJ,Çš&}âDâ9wh%ެs]>Øxí<áLÓ™Ò¾Ea3·ñ:ûøV„1A¥‚Ψq¼ •Xfž‡&ªÓ3“}2£VgG)c{RN‰u†Y­R>gò©\×ÒÝ¢bè.-uÄ#n¤S–¿ZèzDW·Pˆ†e1¾Ïs#¦1Ö¶1h¨A~†è‰;ßì¤å”éPÁàÏ"ªÄ†4bdD–HB§e"¥£zb›!o¾ÔòéfÈhSÎâ$¼È9/gÉÓÞ Ø¹äôÊÎä¨KO$¶¶eäÆŒJ,‘aFZÓK1t³æÌ-º…æ™}{¼+•(±Ä¶‰ ê+Ç‘v'ÎE‡Ò¨¶1†SåÉY¡8q7¢Lì&îÙS`Î"ªÄ&Œ¬­FNω9¦¬´%V¹íK†rI,­âÎâü%¡Ä%=#ªÉ\Il¤m½G •4fÅätãô õÇ®ÎÎ+ÎêF\ä ±Ý‰1AÂyzm‡n³ø·sÜöññ¥stŸ9µ0Tðh •«¢G–#±:|_L90í>œ}Œ¡î>#N'íÙñ“!¹ÄÒ Ü¹ù㤇]!9ð9™éÜGú¶\‘ô,ƒ3*±2ê?gHôÄ’=|u#¡•Åè`Ü«V—󺭈Ρ Wiª‰Û (:.g¦úçò`ñ©§èöC%ÖPúвâtÕ)Š’FY´‹µÓ‚a¨'΄M)Ôy[«t#„¤9»Ñ^rBK¬í†¾RT(‰¹øÒ‰ï] %váìïsÆW[BƒkìˆAh‹¢pe7’s‰52ÞÐKbF LŒšH˧S½B/ÄúÞÖ0[b+¾½q#gûbW1"šöt|WŠ(±ÎP:áÄB³Î©‚6[Ãg}A§åÐÖ!5–/ÃåuÚ¥PeuŽâË þ8rË‘X"úΘ2윾ïÆHu Ó g‰5¶vk¬sù#]©í‚ª1>—ìä[ºÎeOˆ„=å¨W|Õ6›«J¶/v>VQqÖ>O[ð|šêÌ4Ní¶ý1œa±ÕˆCƒHfÃ1ŸWÄzdÖ>æ9béÛÌE½£,ü£V&+t+ üK¬³´1u"j t%¦W;]e|5N_ÞD)wV4ûÞ¨WBÍÚnÓCÕÊYa“è §T)û¡›»¶Õ6’5¢ ;e˜¢Ø:çÜ.päÄ 0ÞtJsc‰ M?"¦ü0qÊ‚¢qå=ã}ò,±RðŒœ¶UÎãñÓ‹Žáƒú1ªÄÊ ¨[£ë‘³» Û¾~…¨ „ðØs·5ÏY }Î3o'B¦ 9sÞ&JÂ'L]Ã8™i§%ÍSwžˆ~èÐ6=§5û¢Óa'¥Ðä·ä/Cc™¨X˜vÐ ¶v a&ƒ®†ýGb»ã\‰|8èYzy–ØÒÓôhWŸìøVOBËk¼Q2È-‰KIî- ÀÒ;Ïmܹ!‰M1”I6ã)ºUlÓÎÂ]”j^#E™nòP–e.Æ eñ¡(üa*”$¶B·A@²N›õÁ? %‰­ÐÀU¤Û¹¢ÒxÓJyƒTÚ©N¹4S(z˜Jæ¶óhEŸ &!‰MB¯ÂîµßlYâ ¨·’Å“’2&¥¨þ0!0ÍÚ¯'yœ?¨ ‡y/‡j… -;iÕ61Û :dttœÇ;;7T·Ð´QÃ}<íþ¾˜*6¢ì´L1R‰ÔNT"u ×·t¼œ™à›)}=Synˆ±ºí¬Sœ}9OŒRœšS+X3°za¢W¾¾,ûèТI'QI富bç\6ú‚4†#*”á¹o"ö¬9*å,ý†óL;NìtùpŠ\è|õBo#UáðT”îž3‚Ng|…ÏvŒ®•¶«Nçõ”)itæDÖ—¨¡ *ªÛ¡q· rêË“^¤ÎIëÚNB"?ÁŠ—9•ȤӂÄ&"H,i=M‰úH o]¶t¢k”fcQñK1h¨“NI°UA7Ë)jNŒg|zIH~T‰%J¤nÊNf ñe@çLŽŽ‘í3±usFÖfK¤®aÁ— „äi<§7vJã‰bº ˆ\¢Z7CbÍ Å]ß„úê¸S ™õ±ˆË7*ÌÒÃÑ0ºOÉ|²Zßu÷B‹‹]ÓCéÙ ³ˆ#®ö\ töÄ·p¦Sz‰¥+­OhìB#•<÷Õ%ßâ¢×ˆo³â¬rU ‘I§‰MJPe¤¯ò ½á ‘Ó̽"õùòÐzݬµ3úöE'[_¤*1ÏùË·Þù1% …3Ž|ߪ§'$¶zbó™ÚÂ㔢¨Šb$ê tÿ$.%¹7Þ,ŒKï@<·q…@•J¬¾£·ÏE¡Ì1’A—8ng¤ï`—ܽìH‚}îŒ:»²Ì5LèŸ'U*±y !æ  MØlÆ^€T<HlŇÈ&Hl6ã¯@@*ž$¶âCˆ €€d“$6›qW  O[ñ!Ä@@²I ¨»¶pÔ“… £V ÿæÈeíç¯mmZ­·gžzl劅Ùd¯@@@ ˆ ±E„ S   °—$Ù  ©€Ä¦‚FA@@‹T@bSÁ £   ‰E€€€@* ±©`…Q¨"‰MûË2Kc?ÕQR5ž‘Å–…9&ô!áí „ÏH³“#Ýuúºñ4Šg3Þ]ü¹§mŸï ѳ"œ,›Äß@^â´‘´ãÏ>ÿ.f5á´qÕ$ùw€' k’¹ð+¸žŠÎ»|E6¶{ö·”K˜¸ì0©9vBçËt#I7b²|J\#ÝÕmZb9«’v/žóQïŠêß>¿gTòzç(øD0‹]îœ0ê|Ë)±IˆÇ¸7*š¨CijϿ+I>1çRt-aŽË—Äí‡?]dc¸DÔ Žµä«K2gÄ¢÷ÉÄJ2œ,*n’'‘M¾}~Oθ‘(ÅÚ^Ñœ+2ÐQÍÄbì ôCwƦ^Yݧ(|ö;ö>í è´fxºÛòñ1BNLÖ‰Å(¾‰ë× þÎLUýéÀ)ž¾±ìð©§[¶í¨µa¯ç‚ Í==Ìál›FÄ™„šnx¢¢iÂ'«ÌqKYz±¦.t‘Òá³i;ã¨_t¦±žv¥öÍW®aÁ^¶†F¸mSúÔìà\¡WŸÞİ—!±}S³ëƒ¯bè¾dBW³b»‡bJì„5…£ÙŸQ¬'¢š¤¯Þéù¤ÇÞ'ÆÂ° ÅjŒBï¿B­a£æ¬kœYó+l$‰õùã,ßÌUÍ„ÃÉl~ Œ5&³‘Ÿ'ÎòÄœˆ39™÷ÚNêS¶‡.æ¸Î$¡‰ŠÈ®zÆ „ÅÍ g¹§s÷ܜñqsΗ(D‘2–³éÕoqq*ƒ=qZ}ë¼î[nÆugeY0ò“lºÿå”XC·ì™è3$Ö³êæ´)ƾ‚å”XcÜä jâ³é[ÒDÅtr Ft&=Ǩ…8*@_rGµãŒ¦Ž.Ô`Týà,T¢„Ùî[zlƒ„âf*²öì”çÎÐU/4”ΉûªjÔõh×;@ÆßÒ¶çè¤Dd‘QèZÇÏFÃab‘Ú%È—¢ÒUõŸOƒx‰…L(ÿ¾ ø*IH,1a#±ˆÕ¥/Kºú‡&_üb_"NQ—teIlhÆ;ËŠ¯üsg®ß‚§«^¤Åé,‹üœñ)¢p¥9Ò¸I–$ÈX§Î¹87ΈëIÅ \;XQ×£Sh³J]œ%Ë9;þ4mBUÊH¹ÐtÒý§cA„“0΢íKiº€3ÕÁ—„´Ðfôo=ûäÖ.¾+¡im׸H•™:¡£šAL®SÆoC„úŸ$p¡ÆþóëKè ‰”'‘âNH#QÂ8YJ—<çŠÈ~d}ŽÂKb‰]‹]Ç ¶ó$Tb‰ÔJ(±¾úÆÏü¨‹ÔJ¢|Ù‹Ôö͹d8uÀYW9#†:L¨lF%Vm…ÄÜ ÄÎU݌ԯû*‹q/Ÿ¦¼Q÷PÿQEζots:¯gƒ1ŠaYw˜¿8}dt ötô¸Ø:sÆË ‡sÜPDF•¤§cŒîŒšî6Ú—v‰Œ”3ÎÛåšÀ†o¾8ÚÌíIåI5séù"K˜²-KÀYd{îÄ"Xά&†0R‘(ëô´ÓÒW BƒåsÉY ¯|«Ã™ÌœzeK”/.¾%@T;=tã¾LãÔ:ÛmûJÙ$–ãúpõ…s»3¹ã݈»"ÁL¸ÐÛC;d9^)9זּ|ø=mµàxBßotθ -;oOh“ãvÙû@bY!0v=)eF¤Qì #k&ŒN)ÍŽ1r~ºp¢“sèí¡²Œ;†óœå“W‰åä[¼pË2$¶»«½§{soÏ–¾¾®m[»·mëÛ±cëŽÛDÛµkûîÝ;d’ܱy£VkÓj½®é(Dú£xñÆ]   P)pŠ­”HÁO #‰­°€•×ÝOß•×a9º|²+ žHgJàIªS.ÍbPÒ+—“å7.ÜRX rW‹óE#£‚øÜã\·‹g²œ>%ÈÚHCDõYIˆiÖ~)+É‹RüAmÏ™÷rØF5e¼JÊ"jé’ýoŒ2_}¤W™sÊL˺Ï1n‰ŠýS%–ÄÿæÈeíç¯5^³}æ©ÇV®X˜ê”ŠhøÆL‰:=tÎ]£ñ˜8ë8óV¿èÌ7"î´ÞÑšÌö¼ W ƒÆRÒÃd§G JÆÎÀžŽ½‚œËX:1#ýèÌד„¨õNDQµý‹B Wk¬ cu©e@kŒ½b кÞ8k™³¿íŒo _™Ð¯óû8×¹mJÂQÿò}³õ†¨,y£Ln;t†ž.¸F>èœeÎ)$¾úk8IódÂwÚ A&j”íÄöŚ؅¨_Ù[›C¨xû\¢‹#‘΀:ûó¥—Spœ!²Ë—½FqB¦áà·Å%s‰ÕåÐ.Fôo}-Rˆ:Â/pt!S‹M ƒO,æTG{Uó¯8•ÛÆÅ1è«J†`ØxiãFâbßþ¦èKäd%–3ýW†3„ )çtÛœoÖ¶ÄÒ.…TÝ·i§"œéõi|hE¢W“súPÙH»èó,±üRi›©/}Åúb£”χbI¬ošÎ¥î“ »æÆ¸RY«¶&DàˆM -*„®„Æ…Ø8Ë%sWa«šî$Óˆí›/èÄæÃ€C mKlì Èœ G S’ØõŠ–O»òĦ‡c€Äè|岈@=Ý9kÉ(.‘J6]ýé"É7ºFó·ÿ¡uÍžÿD_%²C`Ï7†0%¶èS¶9DÍúÅQJb—éÜqVÃÛ$ "¦ÌµsÛAâ[óJ|c®$VÖJ#/õ‹F^ý}ë$êb&B¨— {t§«ÎBo¨—ºQ¯tõíÄ :['êЪ%ÈËZcŒÅ´lØ÷i¼3@ sjD(£“¾PêS¶ÉÛúá#f;ãƒéœ¸á|¨n…J…3(Îvnàl'ùÓEe¦t;Lô‚õ%±4ì[è)±^ñÙ¢§@®$¶Üûõ`O°(S.Š‘â&L—’Üoƈ¥w žÛ¸ *‹$¶<ñJ²/DZFuî¢Tó¢‰5'ó¦ä¡,Ë\ ±E‰>Œ€M ?‹Hƒ€€@¦@b38  ØüÄ3ÈHl¦Âg@@òC›ŸXb&  ™"PT‰][8ê‰ÂˆG …Q«òñM;™ œ¨,ØÊм¨ØŠ ¨,ØÊм¨ØŠ ¨,ØÊм¨ØŠ ¨,ØÊм¨ØŠ ¨,ØÊм¨ØŠ ¨,ØÊм¨E–Ø£ñÅz8   .Hlº|a@@ j @b«6ô˜8€€@º ±éò…uª%‰­ÚÐcâ  é€Ä¦ËÖA@ª–$¶jC‰ƒ€¤K›._X¨Zت =&  .Hlº|a@@ j @b«6ô˜8€€@º ±éò…uª%PL‰½dMŸQ\µ™„‰ƒ€ ±H H…$6¬0   X䀀¤B› V!±;wnçshm­ëؼQôomZ­·Â5¼Ý‰Ï=A@rO@H¬˜c__wGGK{{ƒPЖ–MÍÍ׉ÖÐð¶hõõkkkßìêj=ëêþ ‰Í}V`‚  E %Vèk__WOO‡ÐÑÎÎ¶ŽŽÖþÖ²eKóæÍMýÒ[+„Vô\·îHl¸Ã€€@î H‰"*ôµ»{Ë}W©¯mmõJbW¯~›û¬ÀA@Š@@J¬x~xÏù5WÙú•µnO«Ï‹ž¯¾úHl¸Ã€€@î H‰/¾êOK‰í×ZդĮZõKHlî³(Mb[Ä‹¯/¼ðC_Å¡²â=PRb_zéçØ"p‡ Ü+Þ<,”U¨©lâ)bÑ„¬ª+Jb_|ñ§ØÜg&  PRbÅ U^u•ÕõU<“,ßQLJìÚÂÑOFXöÕ§syŠÍeÔò2¡.ˆZ%Jl.£–ÙJ»dZbÅùõW^³;oÿíúÕŸÿ*¦ÖÖüV%.lÚg±ìóµ<‡LJ,¢Vq‹1§QËl¹Y²+±â5Kñ¤Á®];EëÿoG>ÚŽÛ{»;ÅÔ6·­«¸Uêp.£–"j¡‰Á¹ŒZf‹|ì"]‰{4¡CÛƒÿ¶å¨míéîÜÒÞ,¦¶¥}}×mB—òµœ‡Lžbs·Öµ<•ͲÏ%~:e]b·níÛºµ77­¯¯§«£½­¹>ß›§¨å>dJbµ„ûËß.7FyŠZfë|’"u‰íííîo]¡­P(„ö){‡žžÎŽ---ó-±ü¨+"éE?÷!S[ú¨+ú¶D-=¶E·l/Þô–s<瓤Sö%VŠk§ÝDú#1ð+ý±³¿qÑÙ_ÚÔ-ËnÆ@Î>œA{z::¶4·4nÈ»Äz£Æ¡¤÷1Âä‹rÔèóÝÈ}È4‰5{±„RM²`Cë5YµŒJ‰!sMé£0o -Å¡vNÍÇÁ7n’tʾÄvŠ„˜¡Ý$eu]ììo\tö÷ä\ç ÚݽeËæ¦æ†õy—XoÔ8”ô>F˜|QŽ}¾¹™&±¢x¼»øÁR=µä¨#YˆÔ9´‡ZKRù‰tò›$².±‡˜¡Ñ yE ¶6ª³qEvVÿÊßê–õ}™} Ër”®®Í›Û›ês.±¾¨Ùq ½â /²v„AwÈ}È”Äò£æÌm¹²ô5¥~´©½ íí\ÝÌhVyÔœÒ š,"|ªÒÚS¯´ÆcgÐõ˜rrÀ·œí"ìtÒÎ@ç4iQHX·³.±J™ÄšÑ›`'´¨‹êWúgeY‰nß6eÿ–vIöïìlookh¬[—ïS¬/jF9?ê‘õ ±ö…‰3¯OîC¦$–5³¾vŒÇÎX”>¡­ò¨ùDTK»ºÒEÏWå’ŒZ–YA,gç¯bç- ëvö%vsw·§v£õC .ÚÔEõ+âŠÏ¬q‹aJÕ}ÝÚ%Ù³³³­½­¾±îí¼K¬;jvC¯èäõ ¼{34vÄCí‡vÈ}È4‰åFÍб#-@Î"5¶Y¡!«†…FG cɨé•ÍWô8ÆUŒ˜ñ5úË»ˆ¸ÛÎ;ûÇÝN°$EÀ”Øáã³òÅò-éJ™Ä$U3Ћů俲ñ¯èf #¶qÃý^ÕY¿Köïèhmk­k¨]›o‰uFÍ@ÍüÑ`hG–Ž8s¢[îC¦Š5?jvbÇ^€Q—-3 U5f€ì"{5ù*dÔøê Ü9 ÝCgÖE]Û“×íì~ÓŽ”Xñ„hBœö6ÅþQ¿(s®–u#¶)ÂÕÙðSܲeKkkK]ý¦œK¬3jjæ‘bM‡‰9¢Ñ-÷!S)jvns–[±ú„†QãHbŒZ-mËÎb«:Ï%wçJO/»’¤Sö%vàð'¶¥ªõ£4ÕzOyQ^±ot^qÞ¢.·(³ö(vÏ-[ZZ[jë7­É÷)Vmýô0Å{쌵dn‡É™ñÆUwå>dšÄ:ÖAÏ¦í Š±ôŒu¤ÇW_A¶)=Ü¡1EÔô5"Áúj]-@¨!pÆÑw£‘9ÎD¢å—#‘|¥Ã€`$X’tʺÄÊ©Šæ£mÞÜÔÒ¼©nã_ó-±åŠšXNEϓ܇LIl¹¢Vô ƒˆZT+Îf± B’tʺÄöµ97MüÅNsã†ÚoöKì†âZ †“Oï—+jý+ªÈÙ’û)‰-WÔŠ2aQKƒjÅÙ,VAH’NY—ØÖ–ú––:ÑÄK˜âqE71‹¦@_ßZ¿ö/B‡:Ú7–@óJ<„”ØÜD­B¦$Q+ñbI8\ÎÖZfk{Â"]‰Ýôö‹â‹æõŸÚ¸îõõoÿeÃÛ¯‰ÝÄÖ­yå¯o¼ôã_üBL­«£>áËàí9‹Z5„Ld¢–Á¥êR΢–ÙÚž°dWbë6¬Z\óÄu+¿òí<ÿúË¿ÏA{íåß½¶ê·Ïýû¯Yþ¥e_øVOwKè*ª¸9‹Z5„Lä¢Vq -QËl…OX²+±MõiôñǾ;vægÄs¹iâüzÏ£ÿ»»»¹¯·½6ís.£–"j•¸sµÌÖùØE »ÛÖüÖæ¶u] ½=m}½›·önÙÚ—nÛ¾½7½¦9ß¹mkçÖ¾ŽÍmoWâ¦}.qÔÒ‹—°\%!EÔ*q%–8jÅ-¿©®Ü"O^²+±•˜ôð@@Hìjd€€¤A ‰T@bSÁšÆn6A@*‹À€ÄõDaÄ£…¨UÙù¦ÊâoA@@À ‰Å)@@R!‰M+¶r   ‰…Ä‚€€@* ±©`ÅÞ @@ ±XH…$6¬Ø»€€$   ©€Ä¦‚{7€ÄBbA@@ ØT°bï  ‰=tjÝÈeíç¯vcs¤ØB&¬)œþË‚þÅ\ýÖÁ·¬ÛÿÚ7÷¸:R+\²6Zcg§]²¦©MX[ˆÖÒžlD"M6蜱àFò'jšE2.:Gµ-s"F60ž±d‹êO¤äŒ ³ÂáD…•O$ø¢sTûÑüšüQƒÕ~Ôþk ç¿\8íç…£¿Ýÿ5#P8ú‰þöäžòÇ”š%RKÉ~³b—‘j‹Ê0ª3ÑH>y²QíGž¯p)J‹f?RšEïÉó£MVdr’¢säàF½%Í•ÙùT‘Å3RKÛŸ”íGN¶HþD"™ÁÎb²ßòáȯ÷KìaÿC(*ÿM™Ý«,_òíIEND®B`‚bitpim-1.0.7+dfsg1/help/phones-samsung-model-specific-notes.htd0000644001616600161660000000460410547564173022576 0ustar amuamu#include "pagestart.h"

SPH-A620 (VGA1000), SPH-A660, SPH-A740, SPH-A840 (Sprint)

BitPim can read and write the phonebook and calendar. Wallpaper and ringers can be read and written to the phone. For phones with cameras, pictures and videos are read with the wallpaper.

Many of these Samsung models are also available from carriers other than Sprint in the Americas. While these phones are not officially supported by BitPim, many of the capabilities may work. In many cases, the phonebook and calendar can be transferred, but media (photos, wallpaper, ringers) transfer does work.

These phones have a limit of 300 numbers, urls and emails. There is an internal counter of numbers, urls of emails. This counter can become corrupted (particularly in BitPim version 0.7.26), such that the phone thinks that there are more numbers on the phone than there actually are. This then limits how many numbers can be saved to the phone. The only way to reset this counter to a correct value is to wipe the phonebook and rewrite it. The phonebook can be wiped using an option in the phones security menu. Make sure you have good backup of the phonebook.

Ringer and wallpaper assignments for phonebook entries are not preserved when writing the phonebook to the phone.

  • URL(http://product.samsung.com/cgi-bin/nabc/product/b2c_product_detail.jsp?eUser=&prod_id=VGA1000,SPH-A620/VGA1000 product page)

  • URL(http://www.samsung.com/search/search.asp?qt=A620&la=en&col=wu+wsimsi+download&tabpage=1&radio=1&select=0&x=0&y=0#,Manual)

SPH-A840 on Telus (Canada)

BitPim supports the phonebook and calendar on this phone. Groups are not read or restored. Email addresses and "Other" entries are not saved to the phone. The default number for a given contact may sometimes change on saving the phonebook.

SPH-A460

BitPim can read and write the phonebook and calendar on this older Sprint phone. The phone does not support up/downloading of ringtones and wallpaper and does not have a filesystem. The phone can go into an odd state after writing the phonebook to the phone. The internal LCD screen may be blank even though the phone is on. Power cycling the phone may be sufficient to restore the phone to normal operation. If this doesn't help, remove and replace the battery.

SPH-N400

Only reading the phonebook is supported for this phone. #include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-motoe815-notes.htd0000644001616600161660000000026210547564173017432 0ustar amuamu#include "pagestart.h"

The support for this phone is identical to that of the V710 including auto-detection. Please see the V710 Help for more details. #include "pageend.h"bitpim-1.0.7+dfsg1/help/tour-edit.htd0000644001616600161660000000145010547564173015530 0ustar amuamu#include "pagestart.h"

There is a tree view on the main screen. Selecting an item in the tree allows you to view the contents of a specific feature. SCREENSHOT(tabs.png,)

If you select a item in the tree you can view and edit it's data.

For wallpaper and ringtones you can right click on items to get a menu or you can just drag and drop new files into BitPim.

For phonebook and calendar, you double click on the item you want to edit.

More detailed help is available in the Tree Items reference.

BitPim automatically saves all changes to your hard disk. There is no need to manually save or load information from disk.

When you are happy with changes you have made you can send them to the phone. #include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-lgvx8300-notes.htd0000644001616600161660000000207610577601275017347 0ustar amuamu#include "pagestart.h"

This phone returns the number of phonebook entries in an unreliable way to BitPim. There is a workaround in the BitPim code for it. However the workaround does not work if the phonebook on the phone is completely empty. To reliably read or write the phonebook with BitPim, you must ensure there is at least one entry on the phone already.

The videos taken by the phone use MPEG 4 for the video and Qualcomm's proprietary PureVoice format for the audio. Most media players have no problem with the video but won't know how to do the audio. Apple's QuickTime software (even on Windows) does understand the PureVoice format so you can use it to listen to the video as well.

Ringtones

  • BitPim can make use of ringtone files stored on the miniSD card, see section Howtos for more details.

Known Issues

  • When writing phonebook contacts from BitPim to the phone, contacts' wallpaper and ringtone assignments may not always be set correctly.

#include "pageend.h" bitpim-1.0.7+dfsg1/help/howto-linuxusb.htd0000644001616600161660000001053410631144036016610 0ustar amuamu#include "pagestart.h"

USB drivers

Linux provides device drivers that can talk to the modem interface on phones. This driver is named acm and is usually autodetected and used.

Linux also provides device drivers for USB to serial converters. There is a builtin database of which vendor and product ids are applicable. Since there is a wide variety of converter chips, there is also a wide variety of drivers.

Direct USB access

BitPim can access USB devices directly. This is done using libusb which accesses the usb filesystem. You need to ensure the filesystem (usbdevfs) is mounted, usually below /proc/bus/usb.

By default Linux configures USB devices so that they are owned by root. You should be running BitPim as yourself, not root. Most recent Linux distributions use hotplug, and these instructions show you how to configure it.
 

  1. Edit /etc/hotplug/usb.usermap

    Add a line to the bottom.

    usbcell 0x0003 VID PID 0 0 0 0 0 0 0 0 0

    You need to replace VID and PID with the relevant vendor and product ids. The VID and PID can also be obtained from the Comm Port Settings dialog.

    Note For more recent versions of hotplug, it is considered better form to create the file /etc/hotplug/usb/usbcell.usermap.

  2. Create /etc/hotplug/usb/usbcell

    This script is executed whenever the device is inserted. Here is a simple example that makes the device be owned by root, group owned by cellusers and readable/writable by root and the members of cellusers.

    #!/bin/bash
    
    if [ "${ACTION}" = "add" ] && [ -f "${DEVICE}" ]
    then
            chown root "${DEVICE}"
            chgrp cellusers "${DEVICE}"
            chmod 660 "${DEVICE}"
    fi
    

    You can adjust that script as you see fit. Don't forget to make it executable. On many versions of Linux, there is a script named usbcam in the same directory that changes the device to be owned by the same person who is logged into the console. If you prefer that behavior, then copy usbcam to usbcell

Direct USB access - udev

Recent Linux distributions (based on 2.6 kernel) may use "udev" instead of hotplug. With udev, the usb device ownership and permission can be set by a method that is similar in concept, but different in implementation. The following will work on Fedora Core 5. A similar procedure should work on other distributions that use udev.

  1. As done with the hotplug method above, create a cellusers group and put the users that will use BitPim in that group.

  2. Create /etc/udev/rules.d/60-cell.rules

    SUBSYSTEM!="usb_device", ACTION!="add", GOTO="cell_rules_end"
    # LG Phone
    SYSFS{idVendor}=="1004", SYSFS{idProduct}=="6000", GROUP="cellusers", MODE="0660"
    LABEL="cell_rules_end"
    

    1004 and 6000 should of course be replaced with the relevant VID and PID. (For the Sanyo SCP-3100 the VID/PID is 0474/071f).

    If you have a single user machine, you may find it easier to use a mode of 0666 and leave off the GROUP item.

Auto Port and Phone Detection

BitPim can now auto-detect known USB devices (cell phones with USB cables) being connected to the computer (it is not aware if a device is disconnected from the computer). This feature is only available on systems runing udev version 095 or later (udevinfo -V) when BitPim is installed.

In order to take advantage of this feature, make sure that the followings are in place:

  • File /etc/udev/rules.d/60-bitpim.rules exists.
  • File /usr/bin/bpudev exists.
  • Group cellusers exists and you belong to that group.

When a known device is connected, this feature sets the the device group to cellusers, permission to 0664, and initiates the BitPim phone detection process. The end result is that BitPim will be able to:

  1. Detect that a known device is connected,
  2. Set the appropriate group and permission for that device,
  3. Try to detect the phone model of that device.
#include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-samsungschu740-cables.htd0000644001616600161660000000016310731601141020723 0ustar amuamu#include "pagestart.h"

This phone was successfully tested with a straight USB data cable. #include "pageend.h"bitpim-1.0.7+dfsg1/help/phone-samsungsphm300.htd0000644001616600161660000000136010722655526017511 0ustar amuamu#include "pagestart.h"

What works

The support for the Samsung SPH-M300 (Sprint) is divided into 2 separate models: SPH-M300PIM and SPH-M300MDEDIA. SPH-M300PIM provides support for Phonebook, Calendar, Memo (Notepad), and To-do (Task List) feature. SPH-M300MEDIA provides support for ringtones and wallpapers (including camera images) feature. BitPim can auto-detect model SPH-M300MEDIA via the diag port. Users will have to manually select model SPH-300MPIM via the modem port.

Contents

BEGIN_TOC TOC_0 TOCITEM_0(Cables,phone-samsungsphm300-cables.htm) TOCITEM_0(Notes,phone-samsungsphm300-notes.htm) ENDTOC_0 END_TOC #include "pageend.h" bitpim-1.0.7+dfsg1/help/errors-datacomms.htd0000644001616600161660000000503710414126360017064 0ustar amuamu#include "pagestart.h"

BitPim speaks two major protocols with your phone. One is the official vendor sync protocol which usually only covers most of the phonebook information and the other is to access the embedded filesystem in the phone.

For CDMA phones, the latter protocol has a checksum for each command and response transmitted and received. Some of the synchronization protocols also have the checksum such as the protocol used for CDMA LG phones.

If you encounter this error, then it means the data the phone thinks it sent is not the same as the data received by BitPim. BitPim detects the problem and immediately stops.

The usual cause is in your cabling and where you plugged it in. You should ensure your cable is plugged directly into a port on your computer, not going through a hub. Do not use cable extenders, gender changes or converters. If you still have problems, use a different host port. Try reseating your cable at the phone end. If none of these solve the problem, then the problem may be your cable.

Multi-processor machines: Sometimes this problem is caused by poor driver behaviour on multi-processor machines. Your machine is multi processor if you have hyper-threading turned on, or it is dual-core. You can also tell by running the Task Manager (press ctrl-alt-delete) and looking in the View menu. If there is a submenu labelled CPU History that lets you choose one graph or one graph per CPU then you have a multi-processor machine.

Editting your boot.ini could result in your machine not booting if you make mistakes. If you run bootcfg from a command prompt, it will list the current operating settings.

You can reboot your machine and tell Windows to only use one cpu even if there is more than one in your machine. To do so you will need to add a line to boot.ini and specify the /onecpu switch. Microsoft has a guide for editting boot.ini in URL(http://support.microsoft.com/?kbid=289022,KB289022). In general you should copy the first line in the [operating systems] section, add /onecpu on the end and edit the text between quotes to say it is the onecpu line. You may also want to increase the timeout (seconds) in the [boot loader] section. When you reboot, you'll have that many seconds to pick the onecpu line. You can tell if it worked by running Task Manager as detailed in the previous paragraph and looking for the View > CPU History sub-menu. #include "pageend.h"bitpim-1.0.7+dfsg1/help/errors-zipfilecorrupted.htd0000644001616600161660000000060010360163373020502 0ustar amuamu#include "pagestart.h"

The zip file you selected has corrupted contents. This may have been caused by transmission errors in email, between machines, or over the Internet.

You should get a clean copy of the archive that has no errors. Restoring from one that has been repaired could result in something different being restored than you think will be. #include "pageend.h" bitpim-1.0.7+dfsg1/help/dialog-calimpwiz.htd0000644001616600161660000000146110572171305017037 0ustar amuamu#include "pagestart.h"

This wizard helps users through the process of importing calendar data into BitPim.


SCREENSHOT(screen-calimpwiz1.png,)

  • First, select the type of calendar data to import.


SCREENSHOT(screen-calimpwiz2.png,)

  • Next, select the source of calendar data from which to import.


SCREENSHOT(screen-calimpwiz3.png,)

  • Then, BitPim reads and displays a preview of the data. At this point, users may also set/change various filtering paramters.


SCREENSHOT(screen-calimpwiz4.png,)

  • Finally, select an import option and click Finish to import data into BitPim. Click Cancel to quit without importing any data.
#include "pageend.h"bitpim-1.0.7+dfsg1/help/cable-vx4400-usb2serial.jpg0000644001616600161660000007013707726167550017712 0ustar amuamuÿØÿàJFIFÿÛC     ÿÛC   ÿÀ,?"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?øá#éV8ãõ¤DÏáڬƜóÅy~óZèwX>ý=ëkÃ,Z­Üp» AÓ8É5˜‹Ç½vÞµ66(˜ùßæcßš¸[v=‰ÁzYñíø©×ÀúIÀGnÖœ2±ŒÔ¥˜Ž=«©Ú÷B»1Á:òE>ÏUÛÁzi?'š?àCü+£nëÖ¤HžzÒpOAô9˜ü`HÏšàB§_éË’CõjèÖôT¢)*q‹ºÂ:hÿ–Mÿ}°žÓÙóÿ5Ð$#=?J•`P5»|-¦)ÿE?M†tßùôñ¸±.AÛÍHb\ƒ·’[S<;§©âÊ{­XA°òå}ÐV’Æ2N)ÛBZ}t¥¢Øòœ9ì pÒm3Ŭ?÷ìUñÀû´»r8ªh.ÊCKµROÙâD*YÀ8òcúleS4íœã¡ö£PÔ€ZƤb$@)ÞJà^=…MŒw§È4FÌ%ÇÝ•/”™ù”qÓŠ›f=…ü. DSŽ™ªò¨5uÀªsƒžµ-Ü7*:{ b '§>õ;ùëJ‰œ f•®÷è¢qŠ˜(Þ…ùp*ÛÛm6šêxí¡^KÌáGæi»!m¹;c8ǧ©®[øåà½ÚÌwn?å’™Oæ8ýkÔ?j="VÏKÔ.€îû#ÌÔß±Ÿ´Šê{KH3Ö¢g^|÷{ûRÎùû/‡‘c5É? ƒwûJx¢c˜mtëqÿ\Ùÿ›R¼»íb}6îOåP°ÜyÁ¯•çøûã9ù–Ñ×;eþµRO^5“®²Ëþì(?¥ 7¸{UØú¹£SÐr=ª·V?t~Uòø¹ã69þß¹çÑWü)Ñü]ñœgvfÿyÿJ,í`ö˱õ3éèßÀ¤ŽŸ-Fl#˜“þùól?¼g¾·›þº[¯ôÅhÛ~Ð^'Œæ{M>à{#!ý f¡ËÐj²>ªÜ_ûæƒ ÝQÿ¯µý¤$ ߇É÷‚èElYþÐÞ˜skh}âähå{4W´sÓJ'üóQÿ¥TN|´ÿ¾k—Ó~(ø[VÇ‘­[#7ðNÞ[ãØ®’+˜î#‹,g£! â(ó-I=™z&ˆË5üªÁxVb¹äæ§Žè¡Á¡>QêK% aÀý*„öä{Ö¼S ’GŸáð«v˜óF{ÔoZÞ’ØýÜ}*´¶@Ÿz‡01 zª‘ôªÍk 70¡ÿ€ŠÕ–Ô£tªÒÄG8â³WJè~†sé¶Ö÷»P¾‹dØ}+I“ŠazóRЕÌÇðý‹g÷8úP7†ì‰8WýêØê§Ò„œÑeµ®˜ŸðŒÙ“ƒæþõ1¼+kÙß8õ¸ÉøÒ.:sƒJJ-Û¨'Âäñ3Œý)àÈ»NÿLWHÚ—nG¥œR½ƒc”“Á¨3‹ž}Ö«·ƒt¸_Åk°ÙŽÔ׌“þr©ÛMDqOàéGIþ¡“Á×xÈxÏã]«EŽzfÜB‚NÝFpá+ÞÂ6ú5W›Â×êÕôjô „sÒ˜F9íS&IçxnüË»}j¬šâmŸþù¯KuÀ<þ•¹P8ÅZ‚Þá¡æRi—)ÖðU^ÖQÿ,Ûò¯N“ò*@¸ãô©äOáb²<Áàqü$~DèÍzsÀ‡ƒò¨M¬yË_®Ú¥O*¹}"§TÕ^:U„\Z¾u²4¼?¤>­|v…A½·Wj4ˈø!?Yþµû-‹ÎFcÇû¢·Zcë]‹áÞÄ Ã÷Àªe9ǘó9-šc¥+ˆtjA« ŠãФ cš™ÿתó±}EH±‚:ЪGÞà{Tª™Ø0XÎG¥;ËÇZxB©Aúдè;1ߊpAß56Üdô§lŒvïLd^_§J]›»T€S‡õ¤­wØLdzÿ…8¡#¥MÛšon)Zú “ëK·ÿÕK‚O¯n”à„㚦¯Ðñõ¥ ÆiÁHêy§p8¤½î¸ÅLživmíO Š6ͽtA©^eã×Þ©ÈO~•v~„ô®âÅ áÝžýFc5ãŒÅc W÷ÿe}Í6í ›QÜêjå˜á@ÉcÀ¼ÓÆ?´†<(ïom#kW‰ÁŽÌ-O¡ñùf¾}øƒñÄ=šHæ¸k /?%»¸í¼õcõãÚ¸û=>[¡‘„Oï7‹|ŽwUíÒ¼SûEx·Ä%ã´4KR~U³¼Ç¡sÏåŠóÛ«ýG\ŸuÕÕÍüÎzÍ#9'ñ®»ÁŸ¼O⦆x4ß&Ìþ}éòãaíÜþ½‡GýâRVÔ²™Ü °`c?¥-”%-Ïš &6*À«‚Pjhlæ¸`±Dò1ìŠM}‰¤ü)𶑃òç&[¡æ¹?S]5¶›kf»a¶†:ã ü…J•õ4T{³ã‡~%Ô@6úôŠ‹É`?3[ö_¼ezW‘Ÿùï"¯õ¯­ñŽ3Å#É.Y‚þ4”›Ü¿eåÈgH2ß`‹ýëŒÿ!VSölñ9#u枃þº1ÿÙkèÛrÆÐfK”Qß&°ï¾#èVd‰/c$zC©rA*¿³Oˆ;êv ø¿øPß³oˆWîj¶ ìwé^Ÿuñ¯ÃðåÈþ謩þ>hÑ“µ%§Ÿ]¹aØóÉg¿Ä—q¦ÍÿmHþb³n¾ xÎÄgû2 ¡ÿL&SýkÒ$ý ´á÷m%o¡?´ƒlåð§í¹`yçƒkk{W?ÅnLMúqYW? ´+¿›Dñ$¶­Ù&a ý0i&ž—³¾Æ™ñ;Æ:ymuª‹ü7)–?ˆÁ®¿Mý ­2©¬i6-ÞHH‘?#ƒüëš»øyâí! û»n¼mC—#èp#\½î£ö ;£§Ï¦ËÞ9“+ùéUʺ½èÿx÷Dñ©Óµ8.$#>Ní²ø æºÔvðkä¶´Ò¯1"£‘-«`ø þ†º Å~*ÐT ;VM^Üqö[¢YÀö‘ø›KdËUSéq|žŸZ® 'Þ¼‡Døë§É"ÚëVsé9Áb7Æó•z>›¬ZêÖ«=¥ÌWp7I"`ÀÒ»[š))l_’RÝqùUwÉ4íû»Ó}jnQZDŒT,n*Ù\úñQ8Ïn´›ZjR¸¤æ¤hÈ&™ìzÔÙß@"Î:þ‡Ž¼úS™AïšiùG­Eµ¸:úSÕ³€j2ÀŸzLöçôX]¾Ÿ¥B­ß*·¯_j½Œ€Š…ãÁõ«=½iŒ ƒŽ´íØEF^sÚ¢uçÒ­ºŒôÍC"c³C×Tslæ¢1g‚8«piŽIŽ}hM¹j€¥,§Eo†$GÊŠ'9üjAjx<ã5Û{ìH¤üªpĹ©RÜ1Î*hí9õ¡E­29ÈÆFjä+ r "ZRlUè9§°"UäZ” v¦ õ5(\ Õ5ÜO›ÜÓñùÓGËÛð§§‚Ô¼_¦i*Æ{”P=ë‰Ö>:iv…–Ø4ì;Ž•âZ/‰c~C¸-o⯊¼@¬·ZÌëÿ–Vø‰ñÚj lŒÜà¶W;{Ï„§I@Ú®·a§úm(Sùu®P´ð–—•o5óŽÖp™À¯?‘ä¸}ò‘ÏVrI£ÈsÛ¢‚3u;#¢»Öt4$[ÛÞÌ?½#*fͬÄÄùv¥}7Iš‚×Gº½ÿQ“¸¹u|%¨ççb÷–dOæÔíîÉnL¢Ú›ÿÏ0?hÔŸ?t~u¤Þ¹UËÜX'û×±ÿBj…Æ’öÙkVÿrujiG µjDS?CRǬ´g*dŒû5g:8Ú?š[AZ|©‹™FŸã}Jă£2{3é`ø¯¨M“¨Amª[ô+qoç^d$Ry4¡†~RGÐÔ:K¡Jm…s'„µ¶.¶×:˱Ý?îèEU¸ðΣyÚ}Ô:Ô¡·lJ?àŸË5ƤòŽŒ{Õ«mR[W ¥âaüHi8˦£æOsi<@e“ÈÔàûR'ÊRàbEöÝÔU6I´Û£wá½N[‡&ÙßöôoÆ©¿ˆÆ©Çw꽆%_£:©-œ[·YÎJçýLÜ0ú7CúRkäï=oÃ_>Îéiâ[7µ˜¨(}Êõ†kÔôÍ^ÓY´[«¨®íÛ$Lõ«åƒ(G†P.í㤣 £Ú¦Ò5ä]èòXÜ Ù íè‡M-KF·>©Ý…$ÓŠò¯ üq·™ÖÏÄpÿg\ôûJå7Ôu_ÔW©ÛÝCyM‰4R.ä‘U‡¨#­g$í±Ñ)l ÔN ‘ØUŒnãµFP‘ŠJÍX­ÊÅqÛŠc§CÚ¬í$Tn00)h“w¹L{ÓHÈëSëŒS0sCKt@8íOWÛÏZZiã¶>•-´,)Ïó Œô¦#:sïRvÉéëWÍÙ‰‘²â uÏ^I«n¼{TO"›’Ø Œ0JùeâÏQøUwR ©m«ÜD >^œÔ.¹ç5knGLâ¡u44›LefRqÚ¡eÇÿ^­p8ëLdŸZ´´½ÄXÿNµéF˜4í:°Ë}OZã¼9aöÝV0Fc÷øW¡2y®ŠiÅ_©$KN1ÅN­=#ÅXŽ-¼âµwØ5úÔ騧¤|r*UN=;SZìÆˆ<¾:R$¿ ”E“ëRªÕ[ ºDBÜæ¤X‡AR¤e…J‘†€+ˆwc#?Jp· x­ª/nõ"àjMj2ªG‚1Oòý*v޾(¼õ¥k CŒöÍ&Þ}*q4†>ñU¦›)’òÌ?å”kÏúà{‘VŽ97RVG{ð+àâx¶äjº´%´kvÀSÇÚdÁþêž§¿OZú¦(Ò%XÕBF€*¢ŒÚªéZM®‡¦[XXÆ ´¶ŒEÊ?™=Iõ5‹ãÙxZÂIf™T¨îk6µgZJ ÆÎ­â]ÙåžUPpMxÄoŽÏu$–š[äAtçþ;ø›¨xÆõâ™m‹aQzµoü5ø9yâ £¸½–îÁ-9/x‹¹?tæô_ ë~9¿ß‰\ó#W¸ø+àe†”‰5òyÓuÚk¢¿Ö¼%ðLn»‚ÞP¿,üó9öQÏç^!ã¯ÚK\׌–úÿaØ0a®ßwEü?:jÙ‹š4üÙîºÿ‹|)ðÚÜ%ýä’…ÊÛF7ÌßEþuã.ý¦õÂðøvÆ=:@¸¹IO¸ë^),òÞLÒHï<ÎrÏ#$û“S%‹`XF=êùRZ˜º’‘k]ñF­â{“>©¨Ü_Ê竜 è+>;i%8Uâ¬ùÅÂ.æþó…=<럕ßÙ©i±™´TÿXàN¦¼)÷#g>§ŠÓƒA½” ¶¬¾ïÅ^¶ðõË ¡E^MCåg8óLsµ°¨L2Èrì:õ'àoˆõq˜,&e?ÄÀ(?‰5¿ìÇâi~ôVñöçÓ4”»©Éž&"P¸fvöÝH#Œkß ý•õw¾Ô,áüY¿¥[OÙV_ùi®B¿î[“ýh沑óÎcÁHvÏ<ú=?e›eÌ×$?î[ýiÇö^Óºl\“ÿ\Wüi\~ÆGÍàD:ÇK¶Õükèi¿eÛB ]‘qÓu¸?Ö³®eÛ…Å®ÀÄv{vÈÓæe#ÂM½¹èHúÒ}[îH ô5ë×ß³gˆ`Rmî,®‡´…ê+›Ô~ ø»N¶‘,ª;ÛºÉüŽiß³%Ó’èp†Êxú|ÃÔÓDòGÃ.G¡­=CDÔtiJ]ÚÏjãøfB‡õª¾k(ýânâÈi¢8䶘üàļµdYÜ-lâå8^µ“m7sS~Ë=»oÉôd<Ô½DJ×yýÜêTŽÍÚ„Ce\”íê?Ʀ[݈µe¹N›¾ëÆ—û>ÞèîÓ®°Ý|‰¸?èhØcþØ^!ÒùðŽ«øÖ߆üS¬ø-¼ýëízy;¤µ”eØûŠå¤y-¤Ù:›Üpiñ]R²Ã'–ãÐä5&´ ØúSÁ?´*ÅýP-g1ù¾ªˆW\~lsǵ|‹æC"Ëû òÊÈv«7¨=z¿Ã&]+ÄÍåϱ߰À>‚Oþ+ó¬e .º«ÑžÄ@ö¦àcšPÊÀ0äÇ9¥pr1X¶Ö‡I^HÎN*"3WŠH9â x¹È¡ÆÝT`Aî ' zÔŒ¤u¦ãü¨Ø¥L²v=?•BzRAêqItAæ[­5°WúTað9íA9MÛBD8¨›1ùö§±ŠgLÒÕ$‡±¨-Çz†E+‘V¶g¨¨¤NIäb‹»]è"©…FG&¬²Ô(Åh´z±ïƒ´ÿ"Å®|ó3ýÑ]‚ž±‚8úÔÉ&ŸMFF±ž {ÔËj–Z‘P0àcë@ÈÂcŒu§y9äŒT›}FqN\ãÚÀ‡Ê š]‡Œzw©öúöô¦ô#!Ô‹#8ô¤`>‚¤8àþ´ÆõõÜd Ž• `ž*FàsÖ w¨ÑŒc¸^•VWÀõ©[$c©ö¦³Û¶Ðæ¼Ûãß‚þ^´2Ô5ô;o_˜|ì>‹ŸÄŠõ6‡åàWÉŸµgˆ¿´ü{c¡ÆÙ‡J· "öódÃüt%$õ3©+Dð×\mŒpM}sû8ø <3àµÕ¥Œ ý\ AaÊ@>âþ<·â+åïè âïéºRÿËÝÂBOM¨OÌÙí…Éü+ë/üsðo€->ÁgxºÍºbµ°!Â*ŒÏ÷FóU+Ù4cNÑ÷™¿ãZxOM–id Ê×ÈÞ:ñÝçŒu’Y Ú†ùž*?üOÔ|y|ÒÌ«mmœ¤ îÇÔ÷®K™O^Xö¬ÔwbKìtz'ˆí4Ãb/îû4ǧéÔÖ¶«ñ›Åz•©´]Kì6ØÇ‘`‚%Ç»˜þuóðUx_^椳±›P"†6‘Ü…UA’IìzÓ•Í'î‰,òÝLd–FšVêîI5j×L–ã©Ç°Í{ÇÃïÙSTÔ­á¼×nJ‰ÀaæÇ¸è§Ø×¥Ïá‡_ -Ä— FñWí/¼çÙG6j©1ó.…ðû]×[f›¦ÊËÞM…±ùt­™þ>”wj×J²ÿÏ ãwä3Šô¯|_Ô5…km9M±(Ž ÇáY^ð†±âÛ-à‘ÃeaÅg_dZ‚{M¿‡,-)l„ÿy¾cú×G£x?S×eXì,ÁîW½øOàE†ž©6¨ßh˜s°tézE¦™ ÅkB€tQOT·4QHð¿ ü–@²jól¬IÖ½3Døy¡ø}GÙlÈ?ÆMuŽíPÈÝqŠ}J·b·–#P;Ú£ñÓ5$éÅBäŽõ;Я)ªï“ØU™aÒ¡* ÷Í;¶ì4Š®9¨ÙpzgéVŠŽ™æ£òúóSª\¦A5F1ô«.œf›åçµ+ÝÝ‹©M¢ïQ2r@殺žxȨÂãëI.ˆ= û»o#)<1·‚² `\F¹ð[ÂÚÎöûØ¥n|ËF)ÏÓ‘úW¢´$ž¸¨Ú<ÿ-o¨šî|åâ?Ù¾úÜ<šEìw‹Ÿ–‡–øúô?¥y޹á gÂÓm¿²žÓœuùOÐô5ö¹Aß5RòÂèš)áIân H ƒøµ+-L8½Oˆ Èí¸w¿CQK`ï¶}À <Šú_Åßt]ad“L'Jº<…_š#ÿíøW…x³áî·à»‚/­]#ÏËqÍ}új”“ØÂTÜuÜæ×P•Êœy©èýGÐÒ4(ã}³ýcj•¥K²uÃtÞ?­TžÙí˜r½˜VˆÈ|æIC!ÇƯ+Ç.-ïy^‰2òGøŠÎó–à”a»5òÛ¨Žø³‘CWéßþ)Üø>X´­ašãI'N>f€{z¯·nÕïv—Q^[Å<¤ÐJ¡ÒD9VSЃ_ Û]#À`˜o… ݵv~#]øñlï ]hr¶â«É‹?ÆŸÕ{Ö…õŽæð©Ë£ØúHp}©CqPÙ_A¨ZEuk*Ïo2ŽD9V½O×<ñ\ò·Â‘Ù¹VHñÚ tÂäU×Áìj&AøRZ«!Ø“Ž)¹õ©ä:TeïBMhÀ@Àg=)áÁÇ8âš8?Z9*Vþ@.6Ž˜¦6}})Û³LèqŠ­„9F¦ºñŒÓ¶ûqN#>ô;l„VeäT/F?\uÝî*Œãžµ¢|®Ás×Ò<öb8ùãò§¤;zõ©T`Šï“V$jFAÎ2OÔÁ8#…Û5,mŒSNãP➪Hô©BûsëNsÒ! Xøf¥Tâ”GŽ?•J‰…æ•ÄU✧ª¤àôÇj‘dÒœ–<*(êÌ{*^š’•Ý‘ƒ|ªxçZƒMÓ-ZââCÐtQݘö¹¯²~|Ð>éãP»xîõ}Ÿ¼½ac㕌ƒß©ö©ômÃ_ü ÈŽtÊâí†$½=—Ñ­x7¾+j^:»’0Ížå‰O-õ¬œ•ì÷:’Põ=â/Ç×w–ÃCíkŽß…y=”:§Šõµe¼¹‘¹'&º‡? u/Ü£²4}LŒ:×Óþøw¥x6Ñcµ…ZP9”ŽsS¾å(¿´yŸÃÿ€"5ŠóZ|·_ ZöÍ;JµÒíÖX$^EX ;"¯E¡¦ˆCéQ>Tg5+=E Ï=)niÒAëP79þub@Ny5^}ª9Ÿ@±]€üê)Ÿði—=qŠŒ¯éÚÓZŒ¨ÉéL+튴㚈¦}jX]0{nÜ“WóÖ¢t"š·PEV^øéQíç'8«%=i¬0© +4džBñî=?*·åñß”݃‚E¹•Ê*…'!>þÕe>£ð¦4y“ëŰЦ?›úÓY;c$zÕ¢œtÀ¨Ypq×Þ¢ÖÐÊÌ€Õk›8¯-ä†xÖhœmdd0÷¯4`Œ`æšc#äûÓBG‡xÿö~·ºY/<<~Ï(6N~F?ì·o¡ãé^ ¨i÷z=Ô–·pI ¨pñH¸#𯹙zä ä|wðãLñݞ˨ü‹ÄŠíΞÇûÃÛùV‘‘”é©jæ…X–§¥29Šü®7/¡®·Æßµ?j& È–Ù1NŸrQì}}5ÊH³‘†­Ó8šqv`E"°$ÂO8ê*Úº˜ü©NèØnR;Vz±Œàô=E?Ì1! F9÷Ú¸BøYñ!ü¨gêÒh· Éëä1þ1íê+é¤IcI#`ñ¸ ¬§!èE|m G:làºÃ±¯Yø1ñ!´›˜ü5«Ì³œYÎçý[vBº{z­sT‚~òZ›Ó´g¸21ö.=sVXsЉ€ºW"µ­kˆ®F;TLx8úU¦QŒÔ[y4ö²”ÑÍNSvIüê"úÔ(ûº¡ñŸLRžÔæ\Í=;ÒÛÐŽ”à1Ž;Ó—ƒH~•w]DÈØuÇ_Jc:Ô¥pI¨™¹<Õ%v#ÛR2Üb¦Hx⤠{ûÔˆ¹÷¯G^„ûp;Ô‚1ÓÔ˜éÅ=cÝëS¦ƒ#6Ž2 œšr¡‡ãR„õiÙŒbãœÊ”¯öô§„ÏNiÉcŽôöZ€Å*;T‚29è*e‹Öœ¦jlÄBËŽ™¦8ü*vZÛhó Ž3øT°õ,Ç€j¤¯Žô›WŽqÇåU¥|žN :G9¨ÀÜÜÔ|À’$ r8¨¼Aâ+ÁÚ<Ú¦µ{…„#&I,º£«7 ×=ñâ^‹ð·B7ú¬†Iä[YF{pðô»Ö¾'ø•ñG[ø¥®hjÒ†<­µ”_ê­×ÑGsêÇ“T­} §S—E¹Ýüaý¦uŸˆv™¢ùº€r¬ˆøžäÓFû#ñÍx´q ùUýC»×o¢´³‚K‰åm©k’M{‡„~Ùh;%ÔÙo/Ç&%æ8ϦˆþŸZi]ØçQswg•èßõ+í:çR1y–ñ4ÆI7màzô¬VQý„ÍÜËý+ê}C@¸Ö4 ^ÞÊ•…„ìBŽˆØŸå_/"+øeÛ©ƒøb‰YZÁ$–ˆõ¿‚VøðMÌÙ7¬¸Ï?qƹߌZøŽXô¨[÷Œ“zËý*Ûøv‘x?R2¶Ø »i½– ?¯"ñ¬Úîµ}¨>sq+8²ÿü±VõC“÷QNÖÝï.c†5,ì@ “ô¯³|¡iŸ>›»à£[¼d¹-Ë‘•ˆ};úœú ðÿٷ¶÷Þ&ŸÄ”`éº,i;þëKÿ,Çç–ÿ€Ò|EøsãÏLÛÏØ£r"\ð}ëõ4‚åWêÇøÏÆ‡ŽõG¸¸fòrLpƒÂŠôƒß®ý }lé“Öªêl:¤Ö×$ÐJ¥$ÆCÔ#.R%%cà¹b*Hn´Íäò¦½KâϹ<{çÛ—K™±¤sÏ6?È÷úט•ò\‡RAàŽ•Ò¥s†Qqvccàl8ò§Þ¤fûD[Oß^‡ÔT2¦Òèy1VëÓš«}%ðgâ/ü%zaÒ¯ÜjYF0Äÿ¯Œq»ýáÐþ½üÝ+ã}#WºÐuKmNÊCÄOóØô¯®|1®Ûø£A³Ôíòîq@så·ñ)÷¸j®Nš”§uÊË¥1íQȽ¹ÏÒ¬˜òO­/OQXêÞŸ×ànSázPÈ"­ˆvÇãQÉÁïTÓ°lS`s’ 4/þ•+‚ î:Txdæ‹'¾áa»HÏ¥!<úÒ’¨Øõãš}´¬äœôúÔNÀ‚8ž{Ôyÿ&’m+­Ä{ê¦G·µLŠ1Å1#,¹?­L‘•öö¯Srªcœþ8§¯¡?…(AÇ!çÀ¥Ôhê@ƒ©äЫƒëš•çÛÞ“ØX‡ðŠ O ÏSÒ¤T8QQxAº×o£µ¶BÎÄ ãî×Ò^ ð…·„ôô†$ ; É'ri莄‘†üg¡è·|KæKuÃ$¤rÛ©þuù «C¦êvöï‚?Ý$ýd‰Œr#NÒå_›¿ü,<'ñÇÅú_ÜÍw7”ê²þñ?ô!PÝ•ÙÚ9/ ë§Kð‹-‘±$ÞJ¯¶òQ¿Jâ[®?J·#Ikö›^PùÇ®­VÆeL÷"®÷HåÜöiu#áƒn—nû.õ™òr:„"ÈιO‡Þ—ÄÞ$´²K+0ßJŸÅ7/u šc÷p[¤H=ã^×û+ø-Y¥ÕæŒî–¬ÖÉqW—¡ô§‚t<;¢ZÙ¡v  Çzê#ˆwâ³m)«|½kM:› bt¦´ã>Õj1Ÿp}jC*N3I¦†g4\cÔ2ÃÀéZÆ ƒœT3[“KÐf;BÖ«É'éZÏœàÕSnsýáÛ4_¨nf¼{Aàš€¯9íéZ“EŽœæ«OsVJ`úšc.s€3Jïp*<{[ÔL‡¨ëô«eXãÔw¦ǵW@*íç¦1Þ™·“ÅZÛùTl€šVVHY—"£+èjÃ!“LeÇ‹ˆ¬Ùè9×úU–Œ1Ö¢eç(×A•ˆ¦”;sÒ§ S[‚éCÓq9éôÅ7où5hZaLôýilî?3[Ñ-µ­:âÊò!5´èRE>Ÿã_%|Gø}uàí^KYs,, ÛÏõ‰žÿíâ¾ÊhóÅrž=ðe¿‹ô9¬¥UYÀÝØæ7ì~žµw×De8s+€1·àj³Vÿ‰´Y´{ùa–3±9G_B:Ö«¹³ƒÜ×D]õ8Z³³8㱯Sø ãìMu´K©H²Ô³Ñ'è¿@Ýá^VW1†¸¥Y6WF(êA §Z%%aŸ»£î%qäþUr+^85Í|,ñ"øßÂV:ŽA¸ɹ’¨üø?win1œgÞ¸cnÏAI5tdIkßÕ) Ær>•½u:VU×\cM«1™FW¡ªò žzÕéÎÍQ“8<â²o}@…†?FÙZ”tõÆô¥£VB#'ù÷¤cÜšSÇ8¦¸ÈíøÓNÂ>ŠDç“S§ô‡è>µ"¡ô#Ò½K4G´*A¨É©ãÜúT±®P´–öR(áöâ¥TÕ*Ä@sO(GS@(ÚÃMJÚQïz”&ÁÍ7¸Èœ½1U'aÎp1V'nOLö¬Û¹ºœÒØ —SàœÖt’–§]L\ñÅVû§žµ›wÔhy‚³|Iâ; hwz¶§0‚ÆÕ7ÈýÏ¢¨îÄð]–t†%–E†(Ô³É#ª d’{_ütø½/Ä­pÙØJéá»&ÄxûC÷•‡þ‚;sOgs)Ë•×Äïˆ×ß|M.©y˜-䳳ݕ‚?þ(õ'¹ú Ãðdž/ü_¬Úéšu»\]\8DG$ÿAê{U+K9u”Š$gf!UTd“Ø ú·Á^µøá&»»D“źŒxÀÁ6¨Gú°}OV?…03»,éÚŸðoÇBÒåKzíGö†¡ÿÈhz…©çÒ¡ÑtÉonR(É,‡ÜÖ>š—…ÛO34³JÙ$õ$×Ñ¿¾¥…ºê7‘ƒ+«t­£îêô:’:‡^‹Ãz<ˆ¦ò@ 1ê+´Xñ“R¤`þ>´á9?¬ÛobˆBþUñ—íÁáWÑ|iáßÚ&ŽƒìòºùmàŸª2ÿß5ö˜ˆôãé^}ñïá øðÃUÒ#P‰~×dØäJ€£ýá•üEdÖ—ìD•Ñùµâ­4 Z+ȰmïãóTŽÌG#óÍsrÆ@+¶°¶›S±¸Ñå/íËn®0w)ù“ñÇOjçuKC Á‘Ãp‡¸üE•ÑÇ%ÔéQ«i¶’§;•Q‡£¯³þ è‹£x&ȺsÞ¾ðö°4KµKÏdî€ä©Å~ƒü6º´Ô¼¥ÜYËÅ´°‚’!È<:M&ΪM4ζ݆Fxþ•­jwsÔVB€¸ÏåWmeØzÑÐØÙ‰9«Q¦x<ÕKyÁÀO­^ƒæü} ®¢ågŠ©¨Ë…¥ÅÕÌ«omoM,¯÷Qf>ÀkI+Æÿk¿¯ƒ~ëb9.õ‡M.?9Ý'þCVRWÐ$ì®y­ûxèÐêóEcá;»Í1X¬w/t±I þöͤ{sëVí?nŸʺðæ·mž¦6Š@?ñá_<%sÇOCO·²žõÊAJ껊¯\S²±Åí$}Õeûcü6¼9šãT²'´Ö%±ÿ|“Zöß´ÇÃ=Q‚Åâˆ!'§Ú`–/æµð è÷ʤ›Ið:Ÿ)°?J­$OĈџF4r¢•Y#ôšÇâWƒµL5¯ŠôisÛíÑ©ü‰¹o©X_¨û-í­Îzy£ÿ#_—!Aì >)݃Dïy©ý)($R®û©r[> ll} E¤îÍ~hÚxÛÄzxe×õK|tò¯dP?&®‚ÃãŸôà>/Õ6ŽÒMæèY¥È?lº£ô0àƒŠÓó¯„ìj?‰dn×Rìב7òQ]-í—ã;pΛ£^{˜]þ:ôœ4±J´O°öŒûúÔNœäw¯—´ÿÛ^ð8û…-Ý{›[¶_Ñ®Š×öÏðÔÀ}§ÃÚ¬¿•$ræ)r»lZ«ç¾:ä‘Ò£)€kÈlÿk?Ý®“S³Ïil÷cþùc[–´OýE€OÅ =®`’?Ô­+6Rœ_S½e¦² œw¬{/ˆ^Ôˆû7‰4™óÐ-äyü‰­°Ë"+£+ÆÃ!”‚õ“)5Ð…£ãÖ¢eæ®ã­BË‘ïßo \®Pž¤ÔLy«l¹\óQ2 «$†T)ƒÇzŒ©Ï·z¶b?0ÄHÀúTE&Rœƒš>*ÆÂ¤ä`ûSJFGš]L|Ô¡aœr=k@ÇŒ?…âܽ Wóïí à”kA­ÛÆ2HIð;öjùÉ×÷l?ºq_uxÓD]gÂÚµ£‡¶“ìÁIô¯…î˜Ç4ª;žkhœ•–ÌÒ𖎺,Û ÿ"·£Åe^ÙK§^Ïi:š1ºžÄWSðÞ&“_¶tûñÍûê»OÚWÁ?Ø&³Ö!Œ%®©[¤«÷³õΪ-¹4f£xÜ»û,øŸì>(¾Ñ&ÜßEæÄ¤ñæ'§¹R*ú¢Ààb¿>ü5­ÍáŸiú¬óm&Y@õò?‘_ :=ôZÆ“k{ ‡Šx–E#ÐŒÖrÑúšÒzX©t¸RGÞ±/Ÿå]ôcms—ÀäŒÖmYHÊœÇYׂHfLî=I÷¨˜dà×:’z0+2c¥FÞ˜ÅNëƒÅDëœ÷¡÷ ŒžG“žz•”4®sÏJQMi`ÜúeSpÏ¿j™cÏ?¥,iƒÎáR¨q^¢½ÌÄò³Ö¤X¶œã”­H2FÞ)kÐbÚ9+hAƒÇZÖ Ç¥\¯rìFÓzrÇ׌THÇ¿µ8/ G·óô¦ùlO r9ãµX íŠx^ý©ZÌkO„Òø'ÆÏâ&#•üžsˆÆS–DZ<ýI¯"ÔììµÍ=J [¸Ï[yÏGì?F¯Òω^´ñÿ…î´Ûˆ–BêJgÖ¿:¼uà}Kág‰na’ÜËbå¢tqòºªÞÿþºÍ«jŽyÆÇ™ÝYÉk#A2aï]ÏÂO:ç Clê:­›6F;sÝÐÿ {ô=ëiìä[]9[R?Ñ®›–ˆvGõ¦j½Î=ƒ†dÄFUוaêz³uª>úøqñ[Ã_ìmýZä Ëc9 qï•î?ÚÛ!+Çá_™ÖvÍäw67Ré—ˆr’Äå ŸfŠõÿ þÒ?<% q_}—ÄöHƒr¿¼Çýt\øæ§ÝNÇDjw>Ý·™”àßJѶ»mÛv¶î¸Å|ñKöƒñ?Ä›ˆ?³%»ð¾™i^ÚÖå•ä” »;® €íõ®GEøƒâ}o²h­â-U’K¯:]÷r“hÚ¹ÏBÙ?€¡« öªö?NÒóxþ•ñÿíÛâÏí½gÁÞµ&ЦÔfXØ0ÞÇËPqÜoξuð§üAi¹¢ÚëÚ„V:ŠùS·-¶A»“Éê@Æ} t_|!Šþ(Ûéùòí-À dn‡¹'êMÜЇ>}] dܾVïöÀ5FH§ÓnÜÆZ) ¹O=3_ ú§ìÙáøí>ÑÒ€qŒžƒÔûò+¹ÿ‚yøÿXðæŸ¯ZéR]Ûê± ØL ì”–ŒAØV²…G-,¤Òº>0Äš­¿ výyʃý*Áñžªå|÷K½<ÔÎ+èÝgöø¥y‚_ j_(È+nÌ?:óý_ödñ–ŽÛfÑ/äŒy-þ|ÐOTgÉ3ÌfñcÜæéölÇ’Â1“ùæ¡:µ„ª|Ý1õŒ]]ÿÁÿXgÍÒîW·Ü=këÀú²ös!¨j¯+‰©-̹fÒ]Xg‰ÁäõÏëLX´·Îég_ áS\ønúÝ7Éo _\túúU)4éS9‡§I§³#QÍejÇ÷w÷ÒÓ[Màž&Z®Ð0ìG®i…ªùˆ˜ØIÔ>û©>ÁqÆ#'¿ÊsQ á"½ÇñΞ ,–ÓÅ÷âtÿyH¨ðzUˆîgSö=3RÝ+LÂVÆöàQp(:+êØëÄ×·¶Ö‡u;ÏgÉ­Ø‘_1G 9SZùrT( #õOìm¢ìÝKPÏ$2ŸmÌ ~‘š‰½45¥ñD4^”Á#®4|z ˆ§~žâ°Õå_,àñÅFc;†êß–¶>´ñxÆ oâ—[±žAÇ©öS€qÖž¶DæšWÐ v·Èô¦bG#5´,Ç$ƒ‘JlóÚ©¤Ä`H>”rW§½no¥xŸÆÚLøyÚ^Šðê¾ •ƒÃj}\Ž­þÈüj’èˆnÚ³ ö‰ø›…´øG¬f «ßáey‚×>…ºéšùV÷jÞÜ‚@Ž)o5K½[’úúw¹»¸—Ì–iI9É5^ð‰$y rÌHµªV8ç.fvßÐ>¿6ߓ ú/ã΀¾-ø9=Üh$¸ÓJ^!îpÿ¡ý+篃°½Ô¥Ã.~¬Oô¯¬|! ~%ðÖ•8Ìw6ïlßFR?­BøÍ)ì|GË_^þÍ>-mgÀQYÈû¦°c þÊþ‡ô¯‘ïmÚÎî{w¾•/Wp“QW<£öŸø§>­¯Iá[&x,4é ܲ±h—‚?º½©Ïµx1¸'ä  SIÒÈdicÎéIúÕY3¿æPªÕ¤p·wrX#ów÷Tgÿ­]‚DöRµÄlÂB¸ŠPz‚<þb¹˜l·I„ï¸Û¸ï¤½/ú8DDU;@}ù¡«šA]_‚ü3.±}!i€p3ø×Û < oá="4í€,kÈgmOYŒ’&ë x$WÓñí`·e¡Ú¬‡¢a@þU*«HÅ9TãÓ Rzþµ `P>ž” d€qRlÏQJ¸#Ž£µ+[@CBsOUÀ9ãÞ” JsøKG¨Æ,g·Cɯ5ø¿ðrÇâ•3-²Ìr30}{7¡¯Obœ«œÿZk°š¹ùmñ3àæ¡á ÉÐÃ#Ú«K/̇чjó»[­K@VE{<ó£+øz¥~²øÓáÆ‘ãkg[¨„wp'@ >Ì?ˆ}k䊿²Õþ‰$÷6~äœîAºþª}³Ðæ•>¨ù¦ËQÒ5\3ìS÷†àà£t?Ž+vÃIHÙf’ O‡+þ¹ðñm§0ß[I¦ÜgÙsV,Þ ñ‰Ÿ§K,–ýžÙË/âøR’LÏTõF~¬ÒEe¨HIÌŽÙ>¹jÚžÍtP©åÅGe‡cgvcÜûò*kÝ.}s· k’ô„2[c÷ªAç ×ò©õÏÇo¢ÞÊ«:²[¥Á䄃Ÿp Vè+3ÃÚT6ú.zÐJ—)31ùYÀö=j÷Ãÿ7†µkËèÛd¯!ÃzsQèV·xzÍ·<±Ç ŒôL»Ôk—€¹¤â›l[Y£è”øÿý“w Îò·”n-ÉùN9ú×¢xgþ cñÃV:Vì iam ¢Fð‚6GAü«ã£$ÂÚa“·nãÅPqµó¸S[a¹¶~–øoþ ïDÔ´Ë)€êv•ÏäkÒôø*…5%ŒjÚ%»‘†ÇÓ5ù$`r?p¼•z1;Jû‰JÇìí¯íßð?ÄJSÑ-Õ›®ûHÛõ«üOý—ëI6ã»kPßwÍu Ò¿/añ¾¯n¡Vúpûf¯Çñ;_@êW @$5.<Ú4Z«ÜúïÆÿ°¾•§ºOŠ´íMzïŠ^¿§¼/ų&©¢HñC"]¹l/–søWiñ›ÄvçhÔ¦eéË¿Æÿb/X°à1çñªŒlµ%Ê/¡v÷ࡦéÞló/Ú3Ì#¢¯­pš„î4ùLl›‰èEt—_õ;în'.¤î*OqYSxº[¢w`OR9£fGºcZè3I0U˜“€ë]eß‚åHbÂdìÇþµ±ðßÅ–ZGˆôËÛ›x®Öå. N>WÚÁ¶Ÿb@×G­éÿgPüÉÕ™qϨúÖMËrá³Ã|I¥ÿf[GžÛ¥{¿ìéñ»Â>Ðÿ±õ†¹°wÙ›Ï$¼;rwÉ|sŠòo‹·QIªC@mD=qÍr¶@.3‘Ó85ªWй7ä–‡édw¶—) ‘]Á"N3$ªDœgåçŸÂ¦1s´ŒWç$S¶«¡iˆ$h¥²W]ñ±–ãñÀ®ÛÂ?½Ól,…«Í¢còq"‘ò¼Àœ`g"½CYýªþèɘõ‰µ7Áci#gñ`£õ§ÊhªE£Ô˜\dbœ-BóÆ{×κçíÍ Å#Âú•Ü£î½Ü©þK¸×™øƒöÏñÞ«¹4Ë=/DCüQÅç?æäÒšŠêK©}£:­¼ ,Œ±Â£-#~¤ð?òÿþѾðTr$šÂj—«À´Ó?|Äú(üëâ/üDñWŒäc­ø†öù[““‘ýð>QùW.QWÙú ´ŒÝnÈö¿‰Ÿµg‰¼köJ¯‡t§Ê‘q"ÿµ'o¢â¼D†‘‰å‰9$Ô€ ä,ÞçŠG•œt =¨ÁÉËpÝö~,G'ÛÚ™$¦SÏv¦â½?àÿÁkïJú¥ìR[xz׿yØcí ?åšzûžßZ6MèÏ…ú7öW†ÄҨݷšAë·¢ÿSø×³xoÄçÂþ×5dŒK&Ÿi%ÊFO Ãîƒíœf¸»›u¶•ãBÆ¿*¨èè+CÎxþø°«*±Óf~0xéÍd¯ÌθǗCæBþmSP¹º”(šâF–VPbIú ž•H;A:º¹ §!Ðò±§¸Þùõ穲.Ñ‘Ålr=O±>xÑ|màk;—“ͽ¶Úè·z½øŒκ)ÏÓð¯“~üS¼øu-ÚÅkå¥ÙS4LJW8*GCɯ¥üâ»?è0ê¶aÒ) Fþò0êéù× H¸³²œÓVf£¯9¨Bäb¬ÆJ‰ÇZŽ] ÷+>>•°éSÁ¨g­f+™sL#Ƨe#ÓJ V°§€ãŸÂ¦Dd~´(ØyëïOQ‘^–æb§¸ïS.1“LDÉéSªŽ™Å ŒsÖ¢–M¢§bzzλ¸ =é_MFQÔ.¶ƒÍx?Çïñü7°ŽÒÃ˹ñÚî†7å`Oùèã¿p£¹°¯MñÇ‹l¼% ê¾¡&Ë;8̼ފ=ÉÀZüîñ‹/|mâkýoP}÷RØNDkü(=Œ ŸC)Ï•Y ×¼i­ø’ò[KU»»–C–ó&m£Ø(à`+¦v<œýM#7ÐROz«¢27§z}¬qÍ„bóÁ'ƒìi Ù 9åøJAÍ0; hoç–‘ @CDþ„ä^ÇáÍs²BF@êkÉ|â8­çŠÒðp²Õö_ÀßÚjR£Mgæw Cp*£©ÙNÖÐõŸ…¾±Ð´¸®-àxäqŸÞu¯EXHè1ïMµµ[hR4\*Œj²#=€üi=^†ãDcëJ'Þ¤TìiÁyéÍÓõ¥N*C’qŒÓ‚㓌žÕ;Œ‰Wž}éáéß5"Ç»ý’;Š”FúôÖ£! GcNÛÁÏJ—ËÏSùS‚ñþ"–¨– 8çÒœñ‚Œ¬¡”ŒFAõsœÒ„ÛžÙîh¸{ã‚þñT“fHüª þéà~¯Ÿ¼Yû.\è’¼ÚT×§9Y?_bªÏ4’¢Ê ¸ÜźԗŸžú¿€|GdUo4« qWøÕ|¹‡ãÁ®|éúnŸ$£RÓµ½)‡\™áçÙ¿Æ¿BuiZ c-²†#ªŒW†øÿÉáÝPÇ 9‡u§Êž‰™8ØùwS±ð¹Ño¿³µ¨ØÃjí´¶å°^vœgë\o…¾›ÿÛ_È»¼Ð\/9#&½ïâN™§ÿ娆 o´-«²Mä(un™ï^·û9| ‹Åü;|ÑîólÒBÅA=SŠÎQ³µÈå»>ñ€aÓ¥HíÞ7ó#QÇ\µq÷%Äls¿Nds[7".Õ„ªîñ ª¹ÀÀýMgh8:}Êw³ä\Y¦š¸Ìë„j¦~ñÁÅ]m>Îæµ4 ^kÚÂX‹J–cÀéšê&øk¯-Ií"ÿUÆ¢Ùç/§¢·F5Z"ôS^’>k³u‚4íH*Tø;ª?ß–Ý»“ý)&Û$ŸC˼ƒÐ- c4‡  ¯a¶ø50e2ßB=‘ ?­tº_Áhnfº¹9û¨¡E—D5Mõ>}má~úmúÖž‹àkÄ3¬V\<0\/ækëÏ þÎPIg³HW®éþvýk×´/鞉VÞ2÷ŠŒÓNFŠ‘ó_ÂÏÙ bÔ5µð^»rnýö5‰‰þ ÿ:šºÄ¸;IPÇJ‰ñÏò¤µ»ŽþÝ&‰·#Œ‚(eǽp«­GB\ž:Ty#ÛÞ¦aÜŒa’m脈`ò3Làö¦ÆsëÓš¹àÓÑì>¡U¤úWÏîrÇ<Õ‰]å‘ÝÙÜ–gc’IêMBP–¡MÝÜ`» z¡$(êM(\T‘æ8Þl௠îM;ˆ†b ˜uxF™ô¦…ÏzW¥^Ðô‹sW´Óì×uÕÌ‚8Àõ=ëõwá?‡-4_ é±Án"h­ã„¾yrªoČ׳·€È â;•ùß1ÚätÄßJúÓÁÞ5¾Ò&‚'6@Ú{Vуå¹ÙMr£Ýã {Tʘ?W³—í6ÑL €ã5eFy•g¶†èrxÆ)Êœ´ð¹9É?JrÆ^E©’01Úœ©ŸÿU=b)Œg ^;Ò›O^}±Jª@Á5 Lcšq\cúÓ]ÆFŸéN òóÉéK³éjUàḥ+Í»GCùÒùyäT¥>¿CK´¹üi5f[{õ'Ö§ã§=é<¼{ÓHdF!·ƒTo´MMKþðÍj"`{{Ô‹ÎAëR¼„x߯‚ âÿkvz4 §-£‹tè$p2ñÆ?ñ/†µ/…Þ°ðÍí½Í£iè x¥R¬Œ8 úwö ò=«ø¯àZÑ/õ+ë<^Å bæµÛŽ7 a¿šM]܇Ï´oÛJ×`KˆÃ¨ˆÈ•Þhß¶‡®Uw#û¥Îà½8ÇqÅ|yðö†fû\ŠO$-ÓùÛ±êÄ1S¡<ÍŸpêÞðÍò ­’N_¥yÞµð?Â:˜&âÂÅÙ¾è’Ù×=³Ú¾pƒã¯Š`+¹<ݽĀÿZ»í «Ä1-”È}rM;¦&ÏBÖ¿eŸ˹ƙ’HÝÌGñÚGùç!ý˜´k7ýÅÖ¡n¡FvÝ1õÃf§Ú>g ·È6Œ8Å$Ÿ ÔbÉÆGÌÌy4ôKBt9 oÙ¾[å˜Ûx†)Aâ[D׊åu?€Z•«0X´ŸD¶Ì˜ü‰¯ZÓ¾0ØY—ÀÎÿÄ lþ?Óõ!¶|Ç ‚8¬÷W¾„Ú,ñ‹†º9¸7mm8–0‘ù²yÎ@®[Ä>—LMì„)=q_H sKxI °È¹ïšáþ"êzuÎ’è ª¡Ï?•M›ÕJÇÏZNœºž¶öìpXgÐô­{…ŸÁ[Taíó\ÀcH¶އ95æ 4åÕ|imÂ<ª}7ƒü…}D;‡'œzÕÅ)n*i4yøøQ¥¬™YçHñ÷õÅMkð›Ã¶Y0ÚJ7rI”‘]Ë éÛÒ¢VØpGj®X£k#/Dð¥¦ŒŽ–6̦Có‘ÉoNk¡µð~¥}'îm˜äõ5 ½Ë[µëBÏÄ7VÓ[†8= ¦£Ê´+cVÏàþµr7?—ï¸ÖÍ—À¹3›«ñ´òB-mx{â<B­Ëå‡õ­‡ø§©9j‡ÌÕŠÐÏÓ¾h¶L¬ê×.½ÛŠéì´[-5ÛÛGöQšæçø›b¼‡z̺ø«l£åä}j9^釠>:ñY·×Û«ÃÍy¥ÿÅY!3\¶§ãÝDŸ˜®}ê¹P®wÞ&ñ¥½¬L±¶HAé^A­ßIª\¼ŽÄƒÓš|¾mÓƒ–rOÖ¶4oϨJ !ÁöâžÀÙ…¢xyõ+¥N;WûSZÛéÏá[59»[yäuôBÊþ%[ò¯©|?á(t؆Pn®+ã¿Ú£R{ÏŒº¹R©imon™ìaæ\Ô¤ír%ð¶xóü¤Šˆ©éS·jaCÁι4lqn÷yªêjìàltÇz +E°U|Õ[Tð-™‘‹Ih‹öO¦+¿eã#kÅ?fía †¡§;É0‘G¨#ÿ­^Þ@"¸³iôÝ⊮qíLn9ëS2àç )`qøÔ+ìk§B#Û<ša@Ç® =”©Æ2}©˜$õ§†ÄŸP¢äñǽZH{ã5kµx9>˜«h¾ÃßšôvH#B:ŸÎ¦ …¥U TžQÚhÔG!â{謭¥–iV£S$’1ª’OÐ üãø¿ño‰^5¼ÔòËc`²ˆÿ œz·Þ?_júköÓøž4=2ØM·QÔPM}°ó¶~U?ï‘ù/½|\çAY½YÍ9]؉äTÆXúv¤V ȨÒ-ÌYºgó©z})ØÈ’Þ»ž8PfG8&¤cˆ!;¡„`7÷sùÕ¨æþÈÓŒŠ1yr ¯ª'øš¢¶$"³67ŽtVô4ïÔdh†º?øNox–ÏKˆ²6é\¸ƒ–?•aF 6Æa_T~ÏŸ¿áðØÕï""ûQÕXr‘úž¿•TbäË„nîÏHдht>ÞÎÝPÄG ®»Âú1ÔõharƳb·Àé^Áð·Ãd‡í’½ºdW\Ÿ)Ö•ÝÎãNµû-¤Pç!*Ø„óRªôäcéOTôük™»š Tã8§Ï+OQÛÖž"Ï@MHÆÇQNÛŽG½HÈφ<Ówè1ÏN8¡ää ž¸¥ÚPgŠ2ø#ôÅ&‹³ž;Q·åÁûÒí €yÇëOD$ š7ÌqŒR¯šsqÈÈ !ë‚—d+\k¤P¹¨"‚ 7Qšx^¸Áúãü)ÛG^G½ <ñõ¤/ƒ‚qKO˜Ï''µsÞ5ÓßSðíä‚YÐŽ+¢_›©ü)p®p@çµRçÈ×z4Ö²4rFASƒÇ5IìŽ:‘í_[]øWMÔ imQ‰êp3XW¿ tk¯ùe°ŸJÕNÆ\§ËÏnÝ3Àö¦ooʾ„Ô>ÚIþ¢m¿…swÿo Ï— N*œÓBågùXÏ-Å6KX˜Ñ¡í(5ßj õ›2Ä@[­`ÜøgRƒ‡µu#Ú×BlÎF} N—hšÆÜp1þFãÁ:[“¶ÔÇï°®º]-ãù^6õàж›‡Í’GZ­@8ŸYÍ÷$š>=Aþb²®>@àâeoO2kÓÞнIïU¥¶QÛ>Ø©öi†ç\ü. å|†únCúVM×ˈŽ7'þ™ÍŸç^Õ5°rp S—Mã¨ö¬]5ºB²Äf›§­¹â ¼úf»ÉFdÌ’M´…ÎÒG¯'?…{3FHÈàzÕ˜â6ãÙGójÊ£iϵ hRVE ¤7O­FU™òF®¿B𔚻 çžzWf¿ ¶ùèÔ=4¹I\ñ·CÏZfÜœc'Ò½Ž„{ŽÖßÖÂù­+ùŽÌòÓî›ûPtû±ÁôNà«KH€xƒÉÈëV_ÃV9'ÈLû¨¨ç[°±óxÓ.œå5Hž»—É WÑðÙ.Hr?Ù¥M¼@ö¡Ï°ùO³ðMìÇ™¶l¾ÝJG˜qìÕìËm Ž#})6Ž6®·*[¾Ác‚ÒþÁkƒ"äý+§µÒ`²Pª cÐV”@¦c#Ò„Óab¼£å8Šøoö¸°ÿn%Æß>ÆÚ^;›Oþƒ_s° œŸ¥|mûjص·´ÁÂ]é¾Y>¥$oþ*­k‘øYóÁàõzätÀÅØƒÉµ+(Ûè*6pÝÆ8ëÖ áë‘Y§‚kLóïYó JØõ«ˆ7Ãýv]^ŠXبbzŠúÓCÔ—RÓ¢˜s¹A¯‹4é<»¸ÛÞ¾²ø_x·^‹œ¸æ¸ê§šu:h¾‡Züç¹ô5aÐþUfA‘ýj»O­FšYD 9¤+ýHÀÒ sRÒ}sêdo­XL(ÁÏ/àO¥NˆXzlÌ‘:tükœøñJøUàCÄz±¸Ù°8k™Ø‘/¦HäöšéãBä(RIàÞ¿>?kߌ©ñ+ÇcGÒç2x{Ag‚&vâç8–Qê8 ¾Àžõ}Œç+-ño‰¯üiâ]K^Õg7•üÍ4®zO ¾Š‚±XÓª2sIš’Úš]ògËŒnj†®´ˆ¶BØ¡Šc‡Èä7_½éÆ1Š`E¢öøÍ.Ò£¢1!O Èéõ­ Øvrwæ÷öèÕ<Xê¶²·Y—X†âY¥ó%S±•P¡nC ­’Xä€0sÅåü6‰4Ŷ&,3ü$w¦(ô)-lzÂ/†ïãOÁöˆ›û2ɼë€ã;Gžù?¦këÛ{UEPlht±X_ | ¼'i§ˆÕoy—,;¹íŸE~×$%prNz$moS¥FÚÑÛSÔáˆ.WvI½ïN²[ H AÂŒq\oÃ_}޵HóКô%L¨ʰ›7JÈ`Hè*Tºv§,xõ<Ô¨:žÞµ›ÞÅ çëJ«íÍKŒõïÞ•WΆ2<?úô¡wð©2GÿZ€˜Õh $ O,gv}}iÛ¨ñœœŒúRˆ›q85cN)‡þ)[¨í`9ãé@yZvá’3ùS±ž $!cb ÷©Žçši? ôÈÁȪ»àrN8lóšØnçå4Ó#dGÒ—"@ wqBˆž0㑟¨ª³éÖòŒ¼)ø­\ÈÎzjk ÍHÌ ¯é·@î¶NÙ¬;¿…Ú]Æâ¨#÷+ºÜ¾iÁwg<Ó‘åÿ-äÅ&Ó\å÷Áû´BÁ¿÷fŒçïȨ]@ÏLSRlžT|á{ðÇT¶ˆ· væ±.¼#¨Û¾ÙŽ? úâ_âÆ9ÅT—N‚U įžzSön.Så­&x›&"¾¹ªOkå±Êãœò+ê{¯ é×JCÛ!ü+ ûáž—tØU3è)ª‹°¹OUb“€}ªÝ®ž·R¢ÆÁ²zdW®ê-X)¶þµSNøJ¶RAÇ:š Ý˾ м˜UÊã=3Ú»sË´t¦iöbÊÝc ÐuêÃ.GëX¿{rÒ+<x#ƒëŠiBWæëžÕ``ç4`cŒ}*Ã(Êœôüªˆ3c“Å_p=0EA"‚qšg,#5 »œb§91ð9ÅB Ü®éƒíJçÅ‚zU+ûÌúÖ‰òNryªW‰·æª""¶È§Þ¾•ø#¨‰tÁ<ŽÆ¾h^0kÜ~ß•ŸÊÏ^ÕψÒÒ6¤õ=å†O·¥Fã×51È£#=?*ÁwGq]† Îy㊑cÜœäÓ„EÏLâ­ClEU“Ö±ôâDN0zU˜ÐŸ¥*Dx9ÅOò+ÐßS3+ĺ,ú]2Úú]2âöÖ[xïa?< Ê@qôÍ~rxçàm×€µ™4½V+˜®•t’EìêÙäÿ^+ôÙc8è÷¯ý®u]3BøW-ö¥iÌ‘ÉäØ8‘nl#œ`döÂóXT‹ø‘J×?<µMÎÆsI4Œ8 €1YæÊúj?#Q=Ì¥ÙšMìNKÉ>´Ÿiuì¿•Z9KvzL3ÜÆ’JÑFä)‘ÔíLô'Ȫú¤Ð_γ&É–©ˆ=Åv^ð~«yá-WÅbÔ>a4Vm!`¡¦—vÄòÄícÇ@ 5¯qá›kÝ>8fá—•=LDöÒ¡J÷³¹~ÍÚìó( B¹%\r1ÛèkÞ¿fÜø—įâ+à¯g¦‘å±@ ³ãåÉï·¯×å1x/T¸×ítxmüû«¹p…èÄôçµ}ÉðÿÁPx šv‰$G™¦l§—oÏôºéFþóè\"Ö¦ò&s¹~‡½nxWK–©2ï@ÜñY±G™¯Þ< W¬øËil. Ǧky=.Íâ®uVvQYÀ‘¢`VÕ@ä}êx^8àѷ߯¥súšŠ£=¿ ÑJ¨;ÓÕ1Îh Ð x\õêiêpF=)å'Ö‹XdJ¸àã4¥pÀqŸnõ)_@@õ4¢1éùÒ2¸ c@9 ÓÕAíŒúR*€@ p8úS°¹À<Žx£@°†>£ ŸçM*““ø ”dž¹¡°OÇ4o¨YI#¿¥'’zçð©Äa8 ‚ÜdzTÛP+ˆöäG¥èüj|r?­3nNIý*la1Ú‚A9ÛœëéHGž½óOA‰±qÓüi†6\ûàT»FÓÆ€:ŽÔ]l"ÉÏåL<çŒTå;‘Å5“*ÃnEKó]ÇBqì J¼Çž4 '¡ï@ùh$7àŸåLÏjY{b£.=sЧ¦ƒ!Ú Æ=ÅBûyíS¶ ç§j…ÀêH©i­DBǹõâšvŒ`ñéOtù³ÈäToÂ’Z›ö Ê1ž§ß½T(–ÏZ¸ù~¼Š”ô¥¸Šì¸ÎQ·9üêWÀã¥DÝ ãŸ~A¥v•À‡Ì-¸co?¥7Î3ÒžAV9z‰ŽÑúâ„ìÄ5‰Ï5r9<ÓÙˆäóíQïOP˜ç‘Óš…ÀRxü*bF3ž•0cŒçúÑkl" òy5]ÀaÀëVrøéšŒŒž84÷w¬‰òŒãš­*íâ¯4}sÓÖ¢’/AšZî Í‘1ž yGí7¦Wà—‰0$W=?¹ þ„×°Ëp28È®/âÎý§ðÓÅv»w4š]Æ©HþU´7µÅmO͸©Î(‘wò~ösSYYM,j¡sê{ é4Ÿ 4¬FnS…ùGøÖ’†¬àQmØçìô‰îŽà6¦~ûtü*Ö¹ác‰öÈ£b‘0ód'žx™¯N‹Áé§—ó$K‚¸ÃFÛ£¦Ùô­-?L‡N³‚ÖÚ4†G/ð¨´-íÚY5‰ô5ÕÆ1å±»m³ÇÁÚ&ŸyÝ®“gÜYÙ:B.x8=¸­¡ eézè_—°À²IÜ3À¦iþ»¸¾Ž7‚“ÐU'ß”v/x3Â'S¸[‡1Ôu¯[³´X HãùQF3Pi:biöqÅmäZÓ{dw¬›MÜÕh Œÿ…:5ÛÉZvÐ0riáFAž¾µ="¯=?JpŒäT»N2N1KƒŽåMi°ÈÒ0zÊŸ÷[ŒúTŠ:úûÓŠå†á’9Ò‹XŒ}1N »=? ”Fjp@ÄœcëGK—Ç4y|œÔê™Æ9¹§ÇP:ô4/ )ˆ†N;ÒãŒöÅLªXôúzÓŠw©Wo$óŠ\Éê M·æ'“ËܼþY©·AƒÏ Š0úäÔ¡0ãŒzѳ#§_ZvldC(Æ'š®9úRÔñÏz]DBÈ c?ZkŽ}ûTûq‚»A?*V°P7dRlçU‚ œsýE7a>¹>”\d$œ ƒÖšÓÖ¦òÉÎ3ŸSQ²`œÿú¨ó¬‘ÊGµ½sMu<|¹#¸ Ÿñ¤2àç®{Œ¦z~U389ãŸ~”ÒãnqÏ ©óAÖ¢u•æ~#ð—‡|="ÙB#1lg}ç+ÜûÔÃ’Kr*)=Ò~]N4lqxk‘Õ¾É^Ðù«ýÚôÄþ"&äÖ´M§ ùS<6ãJžÉŠK Gﶺx{í7k<ˆ|µ=Åz=Γm|˜–5cߊžÒÂ8öDÐ VÜÔ•`] lZ#·r"ƒ×¦*P¸À#œT€q‚½j:èPª¤Š•S ƒü¨ž ©U:z÷ªÔQÓϵMx³NXöà‘Ÿ^)ê¹3íŠV}€jÆH9£ðâ*N¼j ¯­P" Ç)á÷#ÖŸ†'± ÒíuȤÆ{uõ¥ÙÛó§y|ôÿëQ·#æ‹420½¸“0P'qÇLÔƒ§{P~bÀ>“ÚÈ<ÄE;qŽ)PyéÍ;$t9¬}B¹Ó5zú}jûS‡Rž9`±ºÛåiê¨ÇpÇ,Iîhê€Ö+裞ùÍ&9犑OÝ÷┨-÷w{‘Å/@!ÀÎqÏO­ zc§áŠœœúÐ#Éç€i42QŽ9ïM 0xØT¥ öúPÏOj.[sÐtëMèÃÖ¥eçŽ=)6uO¥+ˆ„®á8ëÇza#‚2qŠŸfÐHãÞ˜@ŸzLváHËuéïLÏ~O°« c¯=áU¸È[$“·=±Ld¹'Þ¦ “È{SH#¨9Å!•\€ I~•ÜTœ¨ëV°ï_@i» #ŒdõÍEºˆ¬Ç#8íM)Î?<аcÚOçð¨ØcôÆç¯çÚ­8ÏÒ 1øƒHEFAž{Ô2FÆ*Ó®å$ô¨_•õ¡«;T¯ÍÓŸQQº‘ž¼zU†éÈätïÒ…aÛƒÓ‚r)Œ~~N=ªg—8¨AÏÊxô£PÌAèOj|}O8™¨¤°ÙÆ3Ú“ÚÂ'ÔmÅæ}_6L}T×ÊëàOñ- &­u'˜×üžÀ~í}c™Àn‡ƒô¯ž|E5®ö‰ï.a³¶‰Ø<×ÔÖ6V5I=Îbú-êX:s\'‹t?J¼ó¤ŠÒÕ£`nnœ$J~§ù Ó iu+™´BÓY¶@{vd.vŒ•W‘œô¯¨>N˦éþlm¯ïG*À`ä~Åi4Ý,¹Q˜w™v>‰ßñ¯@ð|žN­àm®¥ÌÝÞÈÂ0³¹ì®¡ñÔvªÎ¤6úU¤mÑ„V{b´óÇ#°©ÊŒŸcC 84yžx=iå §c›Ãµ-€FQ¸ö>´Í=ºU“ÊŽE Úíwú {zŸ`!~”À2¤’N8¥aÿëR2ƒñ©“–'>ÔÍ¡ö¢ÀBËÏ^ب[9Æ9<€ÇbqA@¤€OËŒRÐd$¹ïŽ¢šT1íš™ÀÙŸlÔ*0ì}j/`FÑÀÍ1ø©:ägŽiŒ:ý*­¥ÀgÊ9ü=)­Ç<þtò»ø$Óro¥ Ü¢£qÓœ~øÛÌBHäœdTl3““Ö‡ 2žúTD1í“Бڬm  ‘ÎM3hÈ÷57‘Škœ’ äõÍLx"¢nTK}AjWh^:ñQËÏgÓeÎW=ø¨\ä~´ž€BõÁíϽ#ÈÁð:HçŒõ¢í€ÇùFzgÚ«È s€MX<†ö5R_•IÐ1ŒÄtüê)'ž}êgQ°7SïUeµ+qúÔLÁÇ9©NÀFX}ûb™¿qíN~žê'î)¸Û¨u,%ÆÂ1Î+çoŽ? ñŸˆdÔ"}Ln•CyÖêOÞ3Ó>ƽñþW TEØ©ùˆúQm},|ƒ§ü!»±šöeàb!è¿ã[MopV†@Àùqý+éÇ][pŽõ•q¦ZÊ¿<à"”c숲ZSomething has gone wrong while talking to the phone. The dialog gives the details. If BitPim can't talk to your phone then you need to follow the instructions in port/serial trouble shooting.

The most frequent issue for LG VX4400 users are the drivers with the straight USB cable #include "pageend.h" bitpim-1.0.7+dfsg1/help/screen-smstab2.PNG0000644001616600161660000014113110410665462016302 0ustar amuamu‰PNG  IHDRúª-¼àgAMA± üaÂIDATx^í€ÕýljBLÔ(‘è?Q£ÆhŒ&bŒ=+6EPÚѤw8@¤÷Þ~ÀqŽë½7®÷Þ;wÜqfþ¿Ýw ÃÌìì¼ÙÙö›<7»s¯~_™¿÷æ½nówkX×/ç»uë7þw­‡öv÷n]¼«§ö{îšßt×\¿ŸÝºwÿßÿi®ÿª¹ãÍͯ7c¹?ðB¬TmãÇ °>º]µ¾=ÄiÑGÓþòĸ1Í?t¨*€  ¨*€ Ð)ðCCwp£ê»ªƒy'pš¡ÕšÁUZ7¨²ËÇ7°T딀ëÖ¿@ó ¸M¿l­ƒ/À:¯$h:=G‰Fób˜öÏ€;óºáñ0ÐÓeò™Ð¢aÜM#üI FlÈ"T…°>j5ÃС¨*€ ¨¨Ð DzáÑÌM ¹‰54ľ¸Kvú&v9`€p:ëpÜ;ñ°NYîI.ö<Aí0ªÓŒ¨Õ:xN C‡  ¨*€  Ö£ÀC*Çn¯«l¸ö?Ê BAXòÜ7>’muw~S¦¥œew~U.㘛»~A¬BÆ@Š_PëR€˜ôÑ¡ò»µ¦ òÆŒ=#×u ú¹½ÿâöæ·½;»íý¹moÍк7¦iÝ&µ‚{Á±õ™[ÞôÒ¸’´üKZ ÜH`1ñ€`«¥õkgÔ.Y=mP•cÿʱUŒz·â‡÷+¾ \ù°7À•}ó­øBIÿg >x,eàKM9i@DQT@PTÀ:PüK;€Îú3W–霶»Óqkç:FâüÒñõ²ö/Ú?]ØöÉBíô˜v^ŸÞúÒ¤–gG•?ôQ€2t¥–Iÿr‚;53è4Zqû’ú5Óê–;Ö.ú±fîˆêCª§~]5ùËÊñŸVŽÿD;½5òíòa¯—|óRÚgϺ¾ü6'/§iÁX»Ó5™u;îh9ÆÙ!ÔICŒ:¡Õ„j´¸‡|ê,=:âqràZw¬³‚o½Û†ùGPT@ìU…¯–µÏ;عð–uÆmî ³W+:.mï¿ ýÃ9mïÌh{}jë«S€rZ_œÔÚgbë šŸ]ñÈglÜaGbp­17’›¸S=õ«†Íó¶.ÖiO ‡xª§©ž<°r|ÿŠ?¬øþòï^/ò*Ü¿ìïZ6¨OñÀÒ?îÌëèÁÿ Ô|ÞëNÖ 5¨Ò)Ô¬Ë!v@XŸ¸GûÉ"žÐ‘#a¥kí»TÍí¿¦”\eH¢öÒ p|°`‚t^ý5·êÚús— A:APT¸M/+5èPÙ À–'ÃzŸtvÑë:¿£ŽS°N¿9íÓuÚ^šÜúÂÄÖç'´>7¡íù mÿšÐòÜ•]¸£Ë'ƒ¸Ãä&îÀòäú•Sê×üv&ëô«øÞX§ì›—˜ûe_=_üÕ¿Òû áN×ReÀ0ø8èÞb‡9ïA•`¶©³ß„CÎ_Üé2óõËäO`ÞRÓåW‘„ï~h98oÿ<ø^VÛIú$°N]ã•ß¾|¾Çä]b¬^$È”ÙÞu;àû~ÿf~ÚPT@PTÀ¤ À#øÃym°RXgÌÆÎ«;¾]Þ1`qû'óÚß›ÕÖwZÛËSZÿ=±íŸÚž×öôضgÇ·=7¡åÙÑù,ˆmÝaGbw¸‘ÜÄÊ1ÂJíÖâ15sF0ñTŒz¯bxßòÁ/ßbÏŸ.ðlÉ—Ï¥÷öÌkÑæäÕ-Ûü#…5™ÅÆà²A•`Úq†UÉ:šÑòîs¤FãÔeãébíMíRåîÃaGÁZB< î°Qæ·¯û‘ŸÀ:wº¼õ9}ëûCËáûâãM𧖖λ>Ëæ1icä¨*€  ¨*@pÞB½^;õÝJX¯ÓñùÂö~sÛß™Ùöú´¶—¦´>?±í™ m×öÄØ¶§Æµýc|Ë?~¨øó§\Üa"8E"¿r#ù´kíàNÍü‘5ð|Îü®zÊ× ßÀJ[¬ÓÿoeŸ>QÖÿ©’ÿÈøìn¯ý¹ wþ›£wàMwØ5gHM(y (ç¦]¬;lÜÑÐ_µ/«ëÀé:ÜiÐQqîÔ¥kwvË “-8Ï‚ zÌOð£=êB÷×Î+×ïîs†bƒÜ,­¿±þ\;|Âw¸³Ð¥•D‡  ¨*€  r€ë›Ó[áÅ+xýjøjíòdXµóùâö~óÛÞ™Ûöú̶—¦·=7µíéImO:¶ÿuBûãÛžšÐòÔ誇? ÖYwºžãìHà¾H$ðWn$`Ýé_÷ˇ¿ /^i_¿š=VíTMX9ñsŽ­¨â˧+¾x²ü³¿–÷¢ô‹§2?yÊý•‡oá1ðÀNƒÚ¥Ê°hl>Vhç}ugkiM;7߯"ÓX]“Y]³ZÚŸ°Žpç¯]Ö†xø6«Óîw¿èÑÞ2ü°¾3$¤ÅÁõã÷]oi™5w?w„„„=Ú´tG&ù¾äxÓÒ=…Zœj½vç@5Ý‘`èP™ 7£¨*`Ç ÀSõ•)­_.mÿv…–uàó+X¤ ¸³ ýyíoÌi{ifÛsÓÛÿ>µý‰ÉíNḻýqÇË®êýñm¸ÃŽâ‰þÊäËz²¨|È+Õ“¿¬™þm ¼Š5íÛª)_i7×!ÊoŸ«ø÷ÊOTö´²ÿceŸ?žõñãîÿí­Å¾š×s5ÄÀofõZ{;îè…Èäõ+í;Y7_ËÒ-UÖÞ¹µlÙÉ)ÔÙ l<ÝG6à ¥Z7¸‘aÀ—Јbø™_x±Çgyì?éû>~_[mó¯°`ñô|7Ží‰¢b¾ß9ðæ¤Ø‹îà*€  ¨*€ ÈQž°/NlýtQÛ×ËÛ¿ù¹cÐòxǪ¿SûG‹Úß]Øþæüö—æ¶??»ýï3:ŸÖñ—©í™ÜþÇÖ¿Œªzà£-dèžÅœH´¸£?ø+7-îhM$e_¿X9áÓꟾ®žöMÍOƒàE­ªIý9V•êA¯þêñªÏÿRÕÿ/åŸý%ëÿxüçmNÞ(Ó¼Q¢Å'³´Ö-î<‡ih­;°¼F‡;ÚwtÓXºù,-å0«•aÇ.âÑm6+šá®î£ÚµG±ÃÉìCÛn™ptD~þöæ»ÖŠsó>û;ñ™Wu}éîü»Ÿ?ö›oØÞØÑêûÞ…\¼Ð¡¨*`W ¾¬A‡ ÈVž°ÿÛ {ê|¾¤eàòö/T–v|´¤ý½%í}·ÿwaûóó;þ>§ãñ™žÖñÐ”Ž‡[{_}_¿PîhÛ!'ø) ü•É fÍ——à~éÿ„=uª&~ S=u`Õ”/Ö©Ó—|¿ÑÚ\óõã5þ\Ýÿ¡ŠOÊ~·÷Ù>÷isòNÆ¡TK<ÿ*Ðâ΃[t¸¿µ¸S§]‚ó} ¬È­“‰-‡˜yº,:@Ú%t6Ý4¼…®µîŒj' ‡aøÎùÉþ“àwò>×oß½sh='¸Á°Ä?:T@¦„ÚÑ¡¨*`Ÿ ÀÓö©Ñ—ûÎhýhAÛçNíS ùùüÂŽ¿Ïëü뜎‡gtôžÚÑkBë†×Üý~ˆ2n>8‘|¾´ýS§ö~KÚß]Òþæ’ö——t0‘@(n$€;ƒšá~ɧO•è[9IŸWMp‹uÆ¿[=æÍšÑ·Þ̪ðpÍg½+úõÊyûžÏßÝ…;@<`ã¹…;`çÑâNØŽ€uÀij±ˆ]‡Y°¬Ýq§ë4 Øš¶]vru€owŒ¹®ÛZwËô2òJJ™ve1Lfi­8#oûS§î°Uþ}ðÆvLlìhõ}ç„ÅŸ¨*€  ¨*@¥ZÜþÁ’öwœÚßXÒþ_À›‘€gn$`"Ô ÷‹?x´lðˣ߭÷1“‡ªñT{§úÇ7jFÿ·nÄóÌýÚOî¯zÿžì7~çùÏ»´9éפBL`“|?ßå“sŸ0ãø¸ÃñÏxàÄŸ¨*€ Ø•š‘×Ñ¡ò€§êCC.ÿk|ëëÓZß#Œ;Ï.ìüÛüÎGæt>8£óÞI¿ý¡õÎoªïx[gÝѵC)‘°iɰ+š!à¡Èá¡Ò/ÿïœñ´†yÁª1ïUy§êǾգ_­ùbí°gë†ü î·ûªýèÞJ‡ßf¿|§ÇÓwtáàΫuÚ£$nNf•i>…ך îÀ¾;€3ZÖ¬Ó$Bu¶˜À¸™,ÝqZàœ™¦ îSþ×mÒ¯à€{À‘9©.×çäo?Ï ÷™?‘ï=¾«&~8÷Ïœ ŒgŽö}NXü‰  ¨€(ÿÚD‡ ÈW@áß\~j´ötˆ×¦µöÙÖwfû³Ú^›ÝöÊœ¶ç¶?7·ã©9ÍîxxzÇýS:7¾ãΑ­w ¬êÖW÷f–®Ê˜i˜ÖDTøæa>«ôë>åß½V1¢oÅ÷}+F¼Q9âµÊ¯T ±ú»çj¾}ªöëÇ`& L;5ïÿ®¢ïYÿ¹ÃýïÝ´9ùìr—pNÊÒâÎÿ%kM=:ÜÖ%8À1ÚSBu@£ePíñXä ÀΨ_´ë”ÁÜì>ýZ7å–³“ñ‹‰  ¨*€ Ø’ ÷¸ø—ïšžùáÒ¿Ç_úÏÄæ—&5÷™ÔÒgrË¿¦¶<ûSËS?]~lêå‡'·örl…i¬#/ß1ô’¦™æuí‰èD ™‘0&¢œWîÍï/…Ÿ=SôÕ¿‹ý§äÛ—Jõ)ù¦Oé7ÿ*ôlÅÀ§*÷epGf$ZÑÈëÉ…ŸI|µWâ[N~ÿñä~O%÷û{ò‡Ké÷dꇧ}ðhæÎ|·w–C¯Ì¾÷f½öÛÌÿþ&õ…náÏjN¿ù˜w¾lí2ðÜѾˆÎÂx›àY}¬%Ç+\è™~ƒPŽ>Ö¡ý£¨*€  ¨€%(0v[J^ó3ßDÜó¶÷ýï=ðAÀ?ð{à}¿^öú0èßóAèÝ„õ|?Ö&w;´ÛÛš7‚ûÜ/9ç"„%EÉÞV‚;cw·6f¥œÿ™ãÿ¼Çõ…ûO÷yàä‹<ù®/ö:ób/·>ð|áž³ÿºÛëùžžÏÞåùLw¯§»¹ýMãúæcuÉc·\Ò‡;°TY·vG·U |ÂÎZ§5ó´vAp}ˆë>ñß‘rË:TÀ?ó1 ¨*`½ Ü9öÚØ½Ú·¢¨.°Ä@(K n|$»[îÕ¡}½kØ•;‡wŒÝÞµ{ŸôÌT6\Ö¹óóæÛÖî°¬;:ÜS*àDt86Kë´û jFj/wÓÜå´èÃ8í«X…$¯BP½ö†žQKR_oA¬TxQëTÞÃÒ­M†·±´ÛöÀ[èß¶kwh|ÔªµÓOò…q_^Ò|ÖvýVêÅ:wûdV‰î]ôMßDÍ{ÉÝÞO¹ã­Ó|’C\·þÄi”h©%n`é­ïäŽîd/t¨*€  ª*ð!lŸ†°B€=àtÁÖû^ÆAçàìâÞÊëúIîƒ#wàNÈg€’£²à |ÛãÎ{ÉZÜÑ=}8ŽxÐ:Æ?+à­¿2Þð *` @ûG‡ X£]C1‡Ñ¡V¥€ {9D¢ëͬ‡“{¼”×Û±±ç Â†Út¨*€  ¨*€ Ø€šš5oäi?©éµN£AÜAÈCPT@P›SqX¨*€  ¨*`ã îØxÛ€‹€  ¨*€ ÈT@ÜÑh423¡/¸éb6Q†1Z*°~©äBϨ*€  F+@;ðpb_$y\Éyhñãd—„?m*œ¬šš¨Hr"Õ`0ÿ3ltM“€ìlȯ>‰ªê+»AMdƒ£¨*€  ]?éK•MñÐ’Ž´Fþs]°Êi£yÀK/ ?¥²a°YK”Å`<â8Å1EË‘™C Ž  ¨*`W ÐYw8ÒpÌŒ}Bº‚‚B}6$ƒ¾eˆ¹Ã$ÄɤøO‰aG.bDa矟® ¶ìØÍ?´š‹Xwôe‰_:ƒ²èÃÁ$Ëe0 ô€  ¨*€ HW€wô¤gœÙ€ÿ¨Ó÷<¦µ40pXM„6 ª)wøìÅÖM€øYϼÓ 'ÏâÄg8ƒI°kV<ÿƵƒ•‚PT@P[O^9“YìÇÿñ&Ee>Ęw‰ "´ö²ˆXwÄq‡ÿW%ˆ‰©9ñóqÇ ËJ'NAÖÔ@ˆ;TÕ‡žQT@ŒP€Îº#h‘oi`GkRÜ'ãž»œ§¸KŒxBúì.¦Æƒ•+wD’ 5 ÑÖ1*€  ¨€Ý*`Ü1ú¹È¶”0ßÃ)A¤0îðqMNBú`H)Ü™ÃÆñ'~N=²“Ї†vÛ±à¨*€  &R@1Ü!O5rIÏ+‚ƒçqH9;fŽpòÉŽV_(‘qÊ˶ÍHIˆyü ªg}ŒÐ\w«OYÜá'ÁÔ¯q¥ÞÌÐ'*€  ¨€+@;v®”úŧGõ³§TŠvRL¥äÂxPT@ŒP€w8–EžR¦ˆ“o/1©ñ€_E”áØ`Œ¨ZÁ ¦\Ÿ Í øJÉ¥”D*€  ¨€í)@;¶Wx,*€  ¨*€ ؃\ÜùíKy½{*´‡ÂcQT@PTÀÐâNßÍ#Κ^ë4š‡“wì¡Ö±Œ¨*€  ¨€])€¸£=8*€  ¨*€ ذzqçx¡¨*€  ¨*` èÅW—ÝèPT@PT°кcÔŠ…@PT@Pý àÚ\¸ƒ  ¨*€  6®âŽW° ¯;⡨*€  @ÜAÜAPT@PWqÇÆ+X"ö¢7TÀ*¨*Ϫ*Ϭ(ƒÏ¬êŠ,«È3f@,A©¸Óï±ÇÀYBŽEò`™´p -'{UåÙÙ™™n®ÙNKò?ï_öÏV÷êUß½{C¯^ ÿøGuÿÏÊ/Ê?s:;+ž|Ù¦Èvfz\LTPx¨_ltp^N¢)’°ä8+Ê33³SR.¤f$忥ÖT™-ª+²+˲*J3K 3 òÒs²Ò3ÒÒÓSÓÒR´¾çf§d”—dZ²’˜7T°wкcq ¾DEdnÛš3jTQ¿Ëúô©~䑺ûî«ïÑãb·n{ôh¸ï¾†?ÿ¹ößÿ®ê÷aùÈ‘Å[·äF†gÁs‘¶G òq~î…ð° ˆªªªª±±ñÒ¥K ùùùp'*2þJ›ŠuùÏÍM=3OˆÓ¡è-éÛÏenrK]u"qêÖ™Û=ƒ¢Ó2“kõ OÜÅ °¢,³¸0h°&!.-<,ÕÏ7ÙÃ=éÔɤãÇ’ŽÕ:—IžÉAÉÒòs2 ˆuI¹EP5@ܱ¸‡½šÕoi•f…‡f-\Pðò+»uk’âþóŸª9³ Cƒ³Á@U">îD„fd¤×ÕÕëD^È>åŸtØ+þlhJ~aimm-ÜÔAO U*R<çç\8ï}Æ××#!!LŠùñ Yw2öp`žOR•_JµoR•÷…*¯Äªs •g*OG•îöÎZy<~ˉ`>Ù¸D¬=ä/?c0Q†œ”¤´Ð”³žÉ€5{v'mܘ´zuòR§¤… “æÏOš77yîœä… µw6¬O>|()Ð?93= Í<òõÇP[UqG w2ó¼¶³]M•Ànr¼A@Kh1ì¡TËœD«*²ŽÍùâ‹ÒÿØpç RXüÜyçÅû﯇é-çƒÚ¹é%eãNYqZ€¿˜s2s‹7ˆ¿ÎgöΠÕÇ¢Ö¹Ä,s»Î{îŽßˆ´šÚúœœ_ŸsÒS1è³´8õèqçòòòÊÊÊ”Ôdϳn0&*66bß1„Ähƒ‘K÷°ûtèŽsÁé5©5þ)5¾ÉÕ:Ö©<_éWá[~&¦üt´öóLLÙJ—Ä5‡ƒÓ3“Iü.Þ ã7“ ‚°.,:`Ë9q‰#š>=yÛÖ$˜Ø*ÈÍ™ Ž  6©wzöÉííØØsP!»´1‚ß®|úÐùÊJ&§™4˜=+Â);|,/­…E©ÁY¼_þÿWG :·¨è¡‡êÞ¿"À/»ºRÒâeÒf>züñÉC‡ÂDUzvá÷Kݧ­<Ÿ•[TYPZ]VÓXPÑ]Z“VPÐã’ºh_ð·¨ÚºzÐ*#=–V1ÿù¹‰žçÜËÊÊ`à”ïY¾ç²Òôs>þ¾)É…á:wø´OFF¼Ìlä䦮:šQ˜Z}$(o“[úçØûc—NXsòÂ^ïì¡…ñ`×9U¬s4¬d`ц³9›½rçˆÿi{Äj÷ì¾ùòqL;^ç’`Š Ì6€5?þ˜Dø~Nž¬ešY³´ÓXd2kÆ ­i< Á'Øx¼ŸVV,•weê†ÁQTÀŠ ÀñRiŸO?Íø™yàS÷ÄÍOO).Vli§xœRì7œL¬' Ç)´Áö£ˆÇ‰ÖUçDEdÍŸWkEæ° ¸\Ss\ÿþ—‘fµ †Y3 aõOm•âaøø«^8qèPuM튃!–;™WVXZ]R^›WTYTÙS^“^X•”W””çxaÎÎÀÀ¨ÔšššóçˆÄ`£ñ|>??¯  Ì<îžgø>]=}¢R#RŠëÇg{xùÈI‘„õ ‰qöÏñˆ.™¹3¼ÿ<7'¹|:óÔv(jê…ä´¤ ¨ø-.á³vE?qGB‹r~qÍ\r"}Ññ´•nYë=sfJÖâÎQ¹Öî$/Y¢Å0퀘8hí­ýfïžd`šCÎÉö'ïØž´bE0XwÀÆ<´jå_ïdX¶ ô,_Œ@lI:ÜIJJâQn"‡$føÔ;s×±èŸ×¸Œ+-éšà—)œxœ îHϤÁüX îÐÒ†"¸cêDK‹³Ö¯Ë}íUk“kko*«®¾!b‚5ΫVædŠÓ`RRRÀšâš65ù8íëZ°––øñ€‡xÀäË–a™se9Å.)¡T°vèpì7sF:âáâÎþ].ü¼?z–[ʆå.#ã’ÆnZífˆÆÉ<½¤gÒ`,wä‡Ñk‡UK459 –'œÃª«ëÂàqÏð‚zR‚Ó`¼¼¼`¹Ì–áCfîõ LˆLÈŽOÉ+â¹Øž˜”—ž[ZYPž’Wê›æšä8~½OqIØ``Wƒ­HÐÃÉSÇa™à ÛxåÜ9W0Õ××ëï^Þ¦£cn¾~Éžq^Áñ§Î&)´pgâ¦À ƒûÏ÷úf©ÿe¾Ç·ë+Tqqº{@Ôä­a›Îæ8¹¤Ï?š:çpÊ,çdÀ=þ àl˜Ÿ û¥ùû%ûú$ÐßÀ»è°ãNa~¼šï^Á«[À^e%™à3:2íàíܰÌ|M™¢µEE¤–â|–îèPT€Q€wØë”ôÂéûúKpÚ:v{¸ã‘§UgFG%yÊÔ]<Î[¸#9“óc^ÜQŠ6¨ ¬;°¨VùÀê|?KºŒè°”ÁaŸuM^»#|Ò¾¨û¢gî™u föæÐW ^éÿí/~_¯ðýzgø”>Žù¬­®”ô/Ú8w¤ ‰Aò ­ƒ‰Â–9½{x!‹Ó!ÅѶíùäã2)¸ÓÖÖæîî^ZZ:~•稹{ŽºŸtvu8ãî_\Órê„çñcnYyù)™éÒSc’SÂ’ýb’9âš¡|„¦œ¤ŒEùÚm0ok€`‹}åååëñÀ†‡¡a~¥%ižç}IœÞ¾r× æmÄÏžñ2²RsòÒ²rRKKv[`úGÄ.vŽ_ãž=ïˆv&k¦n& Ü "E¬;RÔÓ²àøx öYþùgí4Xw`J –9Ÿ;› ó\ãAo¨*`' ÐáN—äöÙ"¸9pÍ#‡â.öúx¹Ï€Ÿ}¿Zá7Pëü¿úÙïËå¾–ú|îtþ³Å^­ò¼5pÒŠ£KJ /ð¤“ýf–ÄõÔë˜oÝ)+K凂›¦Øw‡–*$ú/µÄHh½‰'úüóÕ÷Þk`SÁ¿ÿ½™‰8îüþ÷ pÆ–Ü?G‚wœv ›µgÝöS‡Ž{9êyä˜GaM‹óž£¿,]“•›ž‘–š™Ÿš•”›<{‡ß…´° ùx?E›’ ©777·´´Ï¦¦&øBÌ<°z6øIMKu9Ó•„Û9ßòR“<Åglò‚E9»xˆJLXr0òXX Ør`öj¯កÂ}…À:°1:¸'ƒÂÒØQî¸IÚ´)iölí›\ä­uX¹ /gÁD˜”â T°¨qGPš¯Öüù`̼ùgßsòþt©/ìË×™ÿåþý–ú~²Äç£Eç?„¿ÎõtÚ4é—£sò lKç§³ž|õ±?~±ޖ7XÍ|Üá`¾ŸŠl3H‹ý‹ÛZ$FBëMÆÏdéË[nnÊésÞ;x¸žÓž?{ §°¨4!!6é‚v©²)œãÆ 86ÎaÜÿ“‘¥KD¤¤žw&Y‚­z9"T_§€uÎ{ÁñXÚ7Ïn€rÈÉ°Í Øu`‘òáCÉð{I!švLÒNLÑö0NT@5”ÀÇûô—û·„Žwüé©gŸ›êõ‰çžøÁãÃÝ?ÜíwÃÎünèéß 9y÷·Ç~ûõ¡ž_îïñÅž»îýÝ”S}–Ÿºæø}E5.Î¥®ß¾ñßxâ 7]¸ÃÝãfÄ›­åF¢‘DŸx¢úĞ=ë¼F"î@;óùç.\€¥3ÛOFNÚ4lŒÓwßÏM¯þæ‹QƒŒ»°NRFŠ‹_̬m~™¹%°/ξ}û¼Îº*ÛQ}CÂ'¬t[¸;tÀŒ£ 6œŽŒM:í韕“¯=‰½A{lEN–öEtÅÝ„ A'#oÃcá%+Ž'Ç8©”˜ùZ²ÛÇàfÖFg–ã&ÃJØg™ì²C@vU†cÒaCÂS'“c£Sñt£Æ€¨€m+@‡;ú´xY~ß Üûûa§î¾áþûïÏÞ3òœÖ}ïyÏp·ßsýÝ—»¿9úÛ{|¹·Ç·gíw6tou¥ÞÓmŒˆó'çwöû/©0ù“Y»C'ï ŸÁqpÓK•IA$•7K›Ïzï½ x—JÁµ;½zÕ¿óN…tÜ!|œÐÔt)06ëÇån_MØ´Ï'ó롳¾2Ã?*ÞÅ/zÅÀµGà J*`51,Üÿ{÷î…ÏŠ2eVÅú‡E]èºüXÊ!¿ÜÖ}>ÓeöÊcÉi™¼½Ä§µCr™ŠÔE$âàÎþÀÂý~Ù3·Þ²9=;½¨¨k;ÇGWô3îÀ{X°Ù ì¡ vr\(95ΗÐ9vö\NJMNƒ}zðøÛ~baéP£ Ã2uÕe/a}yoé?û~ýåÞžÀ:À7£¼îùÁçÞ|µn´÷½=#<îùÎõwƒ]îþÞåOðŠÖ\çaqG±‹AçÐ_þýð ¿áçí¶;·ìeP5óî»c?¸3ujáßþfxßv}‰³ÑcÕNšX$wˆ72¥ëx.]º”W\y&0y푈É+ÏŒq:±ò`ð^÷蠘̦KͰ‚8#C;W²}ûöÍ›7oÙ²eÛ¶"Ôn°é™I£\'nµ&tÄÊÀ¯yøÙçÛ™{á@P²rö„m~ÊÊ˃üŠ ì‹#1QÆÛø ApÎ93“µÛ¿àPpÁÊy†••è*/Ë OLÏÍÏ*,ÊŒJ¼ðÝÏ~›k'àLáÊK3áÔˆ=»µ¶fU2Ì^íß—› ±°ÑNE)ž jñMQ¡'* ¾”¸Ã¬†¹É äĆ÷–ݸóվ߂]GË:¾÷Ž øÃØ@­ã ØxFyp¹ï—“÷¾•ì[eh÷Ú8ÿòoÉÎí™ÔrâŽËnbojT¶"éžõ%ºgw샬 uç_ÿªÚ¹]ê®Ê ÄôÌ3SGŽ„LÂKy`n >aÞ Ì*`Ñ­qàO..Çœá܉'N€ugÓ¦M»wï^µjENżG‡ÀðÈQKNNÛóýêA‹=ß³ùƒÉ΃{lr>›ž¦Þx‡wÇzà‚%Ò>yŠm3ñîèÂ8és‡oþvŸ|xÏ|ƒGÆèµîQyùû/œ ¿àŸ—˜‘í~áó^_.>|VÖ{j"m)ÃÛXðÖì¯ÓX0‡f8N+$8%;#AGý'¦ˆ Xt¸£¯xŸ­x`CðèÉ®ÿšÜgAÄE¿ä÷ßéQN»|Èýc´Ä33à¹_üþr䇴ô°ª °9gÖU‹ZL§­žˆ.&¨|ZÔëè±ÑYõ+WwÞy§<2\ê™Yìø?û,L-üé§}»µDK’á˹sçÜÝ\/$†Wèv¾9pàÀéÓ§;+x€x¶mÛ7órŒYX9tÑ©I[Â~\6z•ÿ»?nx}øê/çœú`âÁìlmÒd{ÈÙm¶äÉÍÍñõ7r7gÁ.LpøN;'¸³É+NÇQN™¶;vúö ­'#£KŠÓ+Ë2Ò2SöžÛz.÷P@ÎŒí¡_9yü%ôó¥þOŸ0z|¬(Í‚oÀºKv`2˜vÈKXÈ:F«ŠQ»R€‹;=úäôvlì9¨­ó?îxñÇ]/ŽÙõâÏÏ—'¿6)êÇðûÇß??ü…e¾Vù1;+Uå†qGzœ$«3i¥ÖÈ6ÇHñ ¬£Úò’s ö®¢‚¬ùó žÏzê©Û¶„]õá̋͘^P+wôuxíÉ|0ªÿÜlŽÄ9uêÔñãÇ= ³Z`ãx¢"(^/)N[±ËÈfæî¸Y»b¦l |ìÆ7G®0ÛeÄÂãRn%š™¡ÝÏ&7/—\………À=¾¾gK‹Œ.FŒ_ã×kqçhHáºÓɇ‚‹wt&îItÜ•8~W|N?<ó@ÒÃ-õùxî¹çx½?çÜû³Ï~4ÿü Õáƒ×Å|õKèÈ•^F$-1Y»‹‘-JÓàκµÉþxXÎ^¡¨€TºpçQgM¯uÍÃÉâ¸Ã9u\ ºÉ,†$Š a?ÓÄüœ„±{_Z‘öúÔø?Né½2áý¥^_ðXQ›P^šVY–ÖšJ1ëxo๴(E?m ÿiGô·K}ûÏ9ýêÐoÙÕö©å;Έwøk¼ŽxÚuXº”" ú޶æ wA~2™;+lAn"¼h–™íà·tûéIk=F® ¹>lÔ†ˆá뇮 ²:ä럃F­<¿d§gL\t%.È3:“^΂å;>ç“aëè‘d¯sI@xÀ³c¶¿>jkÿ9g†Í;Iì €ø ÷î'–Î ˜Û-I ñ9åzÂåä±sg]aúI~ç*)J…È] ó/Àò; ž¬ô˜´”Ȱð@OçSžÝWîõ\½ßsïI/oÿè˜ðÜœð¡È‚<éÿ˜‘Þ$ˆOXª G {¸'­\™X÷ûß7ôèqNÂêÖ­>áûï_ÿàƒµ=V~'yºç”K2ê09Qw NöNƒÀ%úÊ @¦ñò <÷Ø¥çúM=üñ,צŸÜsôL^N<WÀÄÒe,©ì2ˆBäÀp“¬c+Öù‘¸ê_¢ò,¢J'Ð9îKO^vÁ'c×1ë@ÊJ2£#Saex' öÝ3F{|Ī•ÂBSÑÀ#±ŠÑ*`ç HÂÐÈ LX‚ŽV‘Iu„R w¤ä–3MÆŸY“8wÆN«² þ5Ÿ˜µmkŽã„·߮€×ËáÔOröçOÔÀñ㊶nÉ Ì‚Å:°/‹”¬²ýl-Fð±ÁÕTqÇV;9– @PTÀHÜS àKeee¹îª¨¨€ïU µÇŽÕ/\xñÛoë/®uq©ÊÈ€ûðW¸À€j>Â1-é îàp€  ¨*`« ‰;0ÏÑ[ S\\wèPƒ£cÃĉ ‹ׯ_qòäÆF®õðÐb‘î‚ $ ^¨âŽ­vr,*€  ¨€,ÜÑZtªªjòóëwî¬ß´©îÂ…ÚÚÚº›WmMM½§gÃÂ…õû÷Wë|"îX å0YBÜÁá@PTÀV…;@0ÕUUuÞÞõu7äÊÏoˆ‹«/.&¿êàçöíuaa555ˆ;ˆ;¶Ú‘°\¨*€  –¬€,Ü‚©ËÎnð󫯨h€«¤¤qß¾ÆiÓ¿ÿ¾iôèÆ={.VUi罹6œ>][T„¸ƒ¸cÉó†  ¨*`« ȘºªOKkÈͽWmmãéÓM6¥¥5566EE5-XÐtôh£öo/FG7¤§ëà ë"@7˜Oæã‹íÇ’ºò†“Y¶Úɱ\¨*€  ²pVé4\¬®n¾)(¸äëÛ|éR3\ ÚÏòòKÛ·7åçÃ_/æå5de‰àCtø@£ï¾u!…%çq‡T@P[U@îÀ<Õź: ™K@9ÅÅÍ99---Í»w7ýóŸ-qq—/_n>¾0èÒ¥¦ššÆ²2é¸ÃXwˆE‡oéa[€Ø~ØTdÉlayCܱÕNŽåBPTÆž}rz;6öTG£Â‰að ä<žÉûä0IÕÅ:ÍÍ-MM—ËÊZ[[a«îŸÿlMKƒï—cc/WV‚¡çÒÅ‹MMM2'³8V1 ƒÄcKÙîh>Ìľ  ¨*€ 0 Ü· 4ÒôZ§Ñ<œ,w´sXMM@3`Ô¸i»x±½­ÍÝÝ}âĉùùùí­yy­`ä3Ï¥KFXw؈#¸v‡O9ˆ;‚;æ ?AD:HôÉOî'Òù%FNJÁŽP©hq`BPT0‘rq X€¦­­­½½½££ÃiáÂûô™?kVGc#ü„û@BÚI®æf™¸ÃyŠ£uÇ8¬ÑJqëŽ î¶céœ!±ˆ$-’–Älð½!îH¬ô†  ¨€¹…;Ä´¬@CX®O>ù$<<|éÒ¥W®\éìì$Ä~€xw”ecSw2àXGئŽ%†m Î6·Ž$NZÒ#4 âŽxþ™¿²ÃŠdÃ\æ‹  ¨€­*  îÐÖÜ„……¹¹¹mذáoû[LL Ü"Úµ;d=2©2û½-œÌR zäàNJJhJJãæ`OúR ŸNø@À! }3bì¨$âÓ«Ùyãwu)|#bµD¦mElañ;*€  ¨Àí „¦¦†HA4Y¸ÃžÉ¬¸™6mÚÇ<}úôœœœåË—_½zÈ î(õÀÆxä(`4î@ËKK‹4H ܇}ì¢KØ\e„uG0ZNœ†mjâG+sRz,úAPT`+ž !ƒš(†;À40·õóÏ?:thÍš5C† m—a93⎠Q-¬q¸“šš–.‚"ñ)Aû‡>.·Ó{ɃßøÄ)©D 1­à¬™ÁÞ‹PT@@ôô(x‰Ka$îlݶ¥ºº æ°ÈÚ2™Ÿ`ï½+**ª««á5u˜ÀbOfA¨Úó¢RÀ8Üi,}-Ì dˆ •uG\8ÆöŠqdá;“üé-ÎPT@Ä08¥e$§=çø"ý ž!Hjjªô èSMŒÅ½&DÜaæ‰ØH!e鮈vœü¤ù)ÂàÜg[YôMf Þ(òWA)p\CPT RÀà|–‘¸a ž­[7Ã~ƒÝæ-›RSSÔ|~cZT (Ž;T-=£¨*€  F+`BÜ!Ò7nÀ e˜Ò‚Ù«¼¼¼äädx! ^DŒŒLLLÌÍÍ…ûðWX³ü믿R=}Ñ³Ê îÝÍ0 *€  ¨€y09îÀ#8 €†,åѪ;\¾Ã¸UùÉÉ¡âŽyû*¦Ž  ¨*`´jàÿÉêê²ÛˆÇ-1¯ˆ;Fw3 ˆ  ¨*`^̃;2ÛÍïdÆ€ÁPqǼ}SGPT0ZóàŽLëŽæÄ#pEnÄ£»DPT0¯æÁ™^Í¿‘7BÄóöUL@PTÀhŒÄ}rz;6öTèäääààBªÇ§LëN÷{~£¹S£é¡s¿Ó}v×ÜÕCC•ôL«âŽÑÝ ¢¨*€ ˜W Üé[¨yô¦×:æád™¸Cû åø×Ü¥‰ÍöwñÛé¶Û/ñ kàöóþÇ#¢ü5ÝxdJ+qǼ}SGPT0ZóàŽLëÎo{k¸­^¼qôÐI¯Î[÷õÌŸÍœ7ÚÇÏíN£ <Ì‘é&$›ˆqÇèn†QT@Ì«€ypGæÓ¬;çBvÎýeМÕ_ŒžùòøÙï,[5ÅÛ÷´æÃÖ€æ"Ù@Ü‘Xˆ;æí«˜:*€  ¨€Ñ ¨‡;áéswç;¸/ñqËxƒ…;nç·Î^öõÈɯÌXÖoÎò/Gûô¬×ñßþNîÜŠG£õ¸#QÄ£»DPT0¯êဎàcUß}‘gðozh‚ÃO†Ç÷ ÙµÃ't{X”kbR¨Dëw8öÂ@äb,@ýH„ëõ†¸cÞ¾Š©£¨*€ ­€ª¸sýúµ7º|¿~ýjGûe#p§›Fãçï{îœ÷ã~û=Ï8k4îˆØ{ñ°-@úîX/ÇHÌ9âŽÑÝ ¢¨*€ ˜WUq§££MçZÁµ··6_ª¯,Í3wîêÖ#ÈÏ÷7Mxè¹îwhüßÿ€fÏþuìÝÓà“[|íŽt¸aÇc'Óa¦Ã¶˜Š÷ˆœ§ÄÃ*žCŒ@PTÀÔ ¨Š;pB(‡ŠóÓwÈ‹Zú>ù»î„x„ùúEx9tÖÇçt|b­u‡¿T™ w ¢•y0î˜)ôáÓµD2`ê¼™º{cü¨*€  DUq§¥¥ñÒ¥†‹«ê«êjËËKró³±îhîˆ9ÊíÞßÜéëÿÛnšðà€ `¿;ºÓ-UV wк#ÒÄ[˜D!ÞøŸä&¹HøfŽÆ;ÏüàœØâ ‚  ¨*`- ¨Š;¥¹9É9éqÙi1Y©Ñi‰¡É±Fàì¢|ÎÅ5Â' 9"ÆãÐñ@ÏóÞgÏy{{KÁ¾þºÁ¥Êœõ=|?6fËáÇÖé¸Ã!>µ°aˆýWƒI0 Å }Ö´úXˇùDPTÀ Ö´Äè`·p_—0ßàB}ŽGøŸ2wzjºõ¾¯{¿3ž>Ð;øœOw&66V îØ<”˜®€æÅ¦Ç²Qƒ37Ê> FÂÅ1q°†o:Âq@PTÀ*PϺ£à¾;wi4Y ÉÁg½½\\=ŽºÄ‡EúúúÞsÏ=¦{ØcÌ–‰;œnÆ!AË ÿ¦Ë?f«èá˜IT@PP@=Üaã‚ÌC$wN>–wῃOøésÞÛËË ­;&e2SàŽÈD’¾ )}Ø!Yô™ˆØiѦ‹ã*€  ¨€å+`Ü‘ùT~ð÷÷yŸñó ð:y&ÄË7:(448pçw¿û̘1¸ˆ&ÂB<œÅ"“Jú&˜ô! ?»7ê›–Ò—&rÁ…Ï–ßÏ1‡¨*€ عFâNÏ>9½{*trrrpp€!(È´î@Z¼÷°ïØuîùMø>ðÀTy@Ï´ ˜wì¼bñQT@L­ îhqÖôZ§Ñ<œ,wh´èß@Ü1uoÄøQT@L¤€ypG¾uÇÿö–ÄuBŒ@PTÀÔ X=îÐ’Ó ×sß-8*Ý-Z»ïÚµköF6‚åEÜ1uoÄøQT@L¤€Õãˆ,Ýppò"ç´¢úè¬jÿ e^qEÇ‚²ÁÖºÁ9'BºœKH¸ý>is×-¿˜ÑÍßs,UB6éqÇD£EPT0µV;TÖ0êDg¥ÔE¤”%4œ ËÝî™,â\#òw®×â±I‚¡*⎩{#Æ  ¨*`"̃;TOY=îD$—$Ôy†f%æÕ1¸³Ó5áÈïÓËO».=ybçžcQ„wØâ#b´¨*€  ¦VÀ<¸Ce’Ǫ¨w²+“ j]|SÜÙq&Ñe•ûý!ðe‡Û…BO/;µçX4âGyÄS÷FŒ@PTÀD ˜w4ØPE¸“ZTŸœîÞîw`_ðî1'WœîÖ9°?ôøZOÄ…p'ÔDm£EPT@$*š"î3#%žzšš5}•Ûw‡Ê$£¬u'»üRR~íI–u(gçé˜ÃÚï6ø¹Ã-fµîü¼ë‡ýÏÎX"i¿fóžbaêԳ†¦¥…KlŽè @PTP\ôô(x™w¨L2 zëNNEsR~ÍI¿[“Y®N.Û=’\—ºlw¿°÷hä‰Õ0¥uzé)‚;Kw}§wØL*ü˜¥ˆ TêúÒ2w y 1--Rñæ‹¢¨*€  HO48“‘Øšuç&î¤2kw`öj‡k¬SÞå [0Ÿµß9ìØ/)¸ÃA ¥€ƒô8¥û”O|?F㎎xB¡µ¡CPT@ÔU Ôà4&“àŽq[ù¡º¬;y`ݹ…;@6÷ÜX‡vúŸüåŒËJ·]§âŒÃÆ0Ã&!r“±IñÃ)ÂRìxøwØIÈ×JYÜ1Hßè@PT0£&Ás®Ý©h¾p;îÀ"eÝòäX²ÃÙƒ&³5¾éÙg» ì»Ã·Á(x‡7Òc6GŽuÇŒ-“FPT@ *`Ü1…íAJœ`ÝÉ®¸ÄÁ@œ=Ç£áU,°î€Ó=qÇh(a¯õa¯ÔáOŠQÝ1ë@†w öô€  ¨*`¥ ˜w·îÅ?Áƒ;gòÙÛ êÛXÙ îpKº †ƒ; Æc:âAܱÒ>ŒÙFPT0¨€>ÜÉííØØsP¡“““ƒƒ<¥WÌî‡àNR^MHb‰eâ•-GßBiâŽÁÞ‚PT@¬TÛpçQgM¯uÍÃÉ=ûÈÂÅ­;AJ‹;å—Ò‹àÀ¬˜ìšÐ´ ŸøŸ®óM(!Î/¡Äõß}aáŽûÂ…ü$øT!øF•Á /ÁEÇ&‹,UVð1v©w¬´c¶QT@ *`Ü‘H'Š{Ó"‘S½dÝéeN-]rÉ:—«N,\ã²h­Ëâu.KÖŸt‚ûO/Ûäº|“ëÒõ§FNÛ¦ ’ÐÖÖ¦xf¬.Bă½= ¨*€ X©&Á3ZwÖì8{þ¼·¡ËÏÏ@‡¸ .´··[(žaÄ+íØmT@Pƒ ˜wKŒØeé÷°ˆèB¡«èökÍ6W‚;™™™“°aoˆ;{ z@PT°RL‚;æ²î,Z»oêâK×>îxÚ#¸ËyŸ¾Ý¹zƒsq œ>3àNzzzGG‡ sŒÄ¢!îXiÆl£¨*€ TÀ$¸#ñùª¸·ëׯÏ[¹‡™¥’ø%)) '³p߃]= ¨*€ X¯&ÁsYwà™}íÚµ‹/¦¦¦Âd),ÜÉËË»råŠâìeu¢uÇz»1æ@PT@\“àŽyŸô7nÜ€É)xÙJÊvdR_ˆ;8X ¨*€ ت&Á3ZwDH ?µ7/ó™e¦Ž¸c«Ë…  ¨*`ܱÀÇyppð“O>ùÏ›×SO=^˜O3f q‡T@P[UÀ$¸cÖÿûß1±1 L¸¹ùÏþcF¶°À¤wlµ“c¹PT@L‚;ø,úé§Y¹âÔé“Zwêä¸ñc^xá ̧³„¸ƒÃ*€  ¨€­*`ܱ@ëÎ_ÿú×·Þª×]ÕÕÕ¯¼ú2Ù“¶"ÜÑ|˜i«Ë…  ¨*` L‚;–ð,¦Õ9û÷ïƒI«>øà³þŸ~òé'':N™2ù§i?};ø›‡zþ6WWWKȰÙó î‹0ÎMâäàIŽI‹óÓDyÀhQT@¬H“àŽ¹¬;qvìØñüŒ7_}õåºuë<èyÖÓiÙ’÷ÞwôÍÀá#†Žw3lÄå+–õyËæÁƒ¿……Ìòiƒœ—Î?G]~ÌêÄ î¨cwAܱ¢!³Š  ¨€%( Œ;=^ÌííØØsP¡“““ƒƒ<ÕyâÊIåñÇïÕ«×ø ã:ôõð]ºÔiÁ‚³æÎÜ´uãæí›·íܺcÏpNËÏ›?{ãæõÛ¶o»ë®»øI³ÁEßwv(Ä}¬Ã1öðÍ?‚!¾‰HŸÝˆ¤Ëÿ$7m?LVõåc+bG"%NKèÛ˜T@PFîjuÖôZ§Ñ<œ,wÌbÝ‹Ž»§{PpÀÙsß ôÕ×_Μ=}Ä÷Ã"###""&Mqüü‹O7dب‘£ÇþžÅK~ýÍWý>úpéÒ¥0±…¸CeÝII MI aiOM;l"aáLEq¢ÒŠM$‚¸#­x†Ëª l¡ð;*€  ¨€)MM „<“àŽ#Ña}ôÑyóç:|`ÕšsæÍÚ´eãGŸô{îùgGKv¾òíüŸW-_¿iÉÏ+ÇMþéËÁÿüͧý?ùïËÿ™5{–q¸ær‘<³­;ÌŸ8f!ŽN $}q­ŒÄ€ÒqZjZZ$¿=´îP1Ç–Ãgî°ñ…Iˆ‰ø*ƒ‰²=°SÁB¡¨*€ X‚éé‘ðâçÄ$¸cëÎc=öÓ´)›·n\ì´pýƵ£~ùgŸùçsϾúÚËßùvö’eSgÎþvèw¾4૯?ðå÷?Žyåõמxò‰É“' âŸ`ô-Íá€Ç5ÚKäŽj‹$âNjjhZZ¸`›Äã,7ü¨ŒÃ}ù„Ú¬²#çL™YBŸÇ< ¨*`Ÿ ¤§GÁ£ŠSv“àŽDs‚²Þyä‘©Ó&oÚ¼á›Á_ƒÓÎãOüpçõ7^ýþDZ_ ôÍ¡ÿxþß½ìýÄSOÒÿó×Þrøígžyz’±¸Ã1áð¡‡mõa[nÄá†màQu {q¦±DúL¡¥ ‰“Yøœã„ŸSŸ#³Ï¡K  ¨€Ê ð§´L‚;Š[wH„âŸZÜùIw^{ãµAC†þçµ×ÿØûO÷ÝwßwÜѽ{÷{÷þ÷Kÿ…›}^|qôèQúÓŸà`Q}Ëw9†¿xYwôùçO„ñ—?+Ë…úb“Œ;ÂÓ¢l’зþWúdŽÉ„3Ó¤]ØÀ¡/' åL‚Ÿ¨xœˆ;*j˜*€  |øóY&ÁuÏœTîü¼bǺãðÞ»ÿyíGâÿþüg2aÂò׿ûôù÷_yãm‡Q£GõîÝ[ß¹èúÞÉ25îð-@¦VU)ܱՎ§oe’­–Ë…  ¨€õ* î(nÝ‘ò¤Ü™òÓ¤ çqpçãO?¬éýÐÃ@9À:{öìY¼xñ3Ï<óú›o¾ðò«/¿þú¨Q#{÷~ðòåË‚©èÃ}“S ¦ˆ,C–â‡3&E™~w;6ßÈd½ýsŽ  ¨€( îÈ|îpgòÔI3fNcãÎóÿúçÛï¼ ¸óè_‡i¬×^{ 6\»ví»ï¾ûégŸî¼òÆ›ƒ‡|{ÿý÷755—®AHÒ­šër¤ qÇNF,&*€  6¯€J¸cël¸t™xÜùü‹Ï8Áq°Q?<÷BŸ?üáO>ù$Øu>þøãsçÎ}ýÍ7ƒ‡ÿ~¿~}ûö}ã×/]º$… $ú‘‚2RüHLNoˆ;6ßÿ±€¨*€ ؉*áŽ"O_ÚHŽ?ï“/Y²xá¢ù‹/„½•ßìû&Üu9°B <ÿyù˜Ï‚ÝßxãQ£xým‡»ÿû?þño¿ý¶ŸŸŸ¾É,ÚlX¯Ä;°˜¨*€ ؼ*áŽY¬;ׯ_÷ö>ÿÔSOÁ~ƒ?ü0|®ZµòÔ©SpfÖ¶mÛî½ï¾áßì?àËOú÷ï?૯¾ùö¾?üaÜøñÎÎΉ‰‰µµµú–*[/¾ÐæqÇæû?@P;Q@%Ü¡}Ð*å^&ïìì„U8¹¹¹)))ñññp‚DHHˆ¿¿ï?ýé÷ß@çzíܹ Œ:ééé555mmm@KJeÃJãAܱ“Q‹‰  ¨€Í+ î˜ÅºC ã×_péèèhii¹xñ"œ‘^^^^\\\XXXPPŸŸŸyyy𥬬 Œ:°dIpÓ+¥£³¸cóý ˆ  ¨€( îýÄU0 ážk×®]½z€.` ˜±‚/p¾À}ø‚ Ãhޏc'£@P›W@*îôì“ÓÛ±±ç B'''xRˆ­;TùDÏlwl¾ÿcQT°Dq§@󨳦×:æád™¸ƒa îØÉ(€ÅDPTÀæP w,ܺk“#"C½}1u{P@%ܱëÎî½kg/ø–›ß8qö3¯àCc†Æ.Žˆ_î0þj3È"§ âŽ=ô%,#*`œ¦ÆخݸŒ©ÊZò©²,˜œR ¨„;rºÊ†ýiî+§Î=/6y]LÒÚè k€r<ü‡8÷骭}§/x1<~âÑqG©n†ñ " ‡;Ì‘Ã"”@þÄþägC"dHINf-srBRdâäü”™·CTÂ˱îîÐuû˜3{5uæ'¿¬žþÓ¼>ˆ;ʾˆU6|;ìZXdT@¢FãDÒÇ)™”ˆDR¢2˜O}|ƒ¸#S^ ®î(k¡‘Á`©3?Þ°iÉž}ay2¬ã=°`ù§¹bÖö¿o˜ã‡‰6P|•pdž­; îp ? Ä0@#x‡Í:rÐÄawl ‡Ë)Á”Œ”X£wŒŽÚv<êã»UHÇ~(ZË  ¤X•ø¸#تúar%ÅrÃ÷Ã)&Bœ1Ģª„;¦x§LëÇ<#Ž2|â8Äþi\é” …¸cQ}UýÌ îèC4eñËÂq‡cáÏìGF`m9ã·{Ô‚”MQ%ÜQܺC"ÿÔ3]ÕµTYÎd–Dˈ½‡™½âdƒð²Ôbtlˆ;Êv6«‹ qÇÂq‡ùçûÙ̾ÉyÞsìâ¶NsåÌõHœ!„A3 ?o"¦ NÁÅò³*~‡m1>Y]wÆ «„;F?qÈXwà€t¸:o›·x¸ãÔ·˜÷Ò}Â&Âwø?i>åÐZw {)âe§qÇÎÄKÆ;oœJm6J)iùñ¨„;Š[w¤?¹áõrçCÛç-øžš èÙðýòåËN˧m=ð.l£ ; Æ¥lŒMÞàî?ì˜Ç'ð×k×®ñ‰‡cw!?ÙŸ› gêŠxfÛo8üdQ¦È-âŽåw`“æPwHs `¾ðá@pÒgÉ’%Ä'|$n~ÑF¥^HÁ8R4EòÃôz}ú7™eÒª·ùÈù†1›/2P%Ü‘N'Šûüe՜ſ¼êá?4,nIj¶sjÖÁÓÞ_ÁÙ)))€5³½‚Ç‚ó™pÔí“_6¼ 7Y9·££ãÆJeÆr槨JdK¸#hÆ—ÞÿÍõO@s¥K”1âÑᎆ|2äDø‰CÂØ¤Ñ,Ñý“C”À_9$®¹agF0r‰ñ0,¨žä¼™%½õ¢OT¤âNs{;6öTèäääààBª§­;Z¦‰œéþSd⊘§Ï¹ä—×ধ§'|ž:ßÿàÉ~Ûö°i÷» ~eþ²—'NTZZªîpl9TŠY‚gáç.ç‰Î¶Ÿ‰ôgvÆ%'Jbêrãr+'EvXÓáC9Z#"ëbØ‚Ã"¸Ãgš.Ó‘ IÁqð"‘K‰Ç ë0ñ uG©‹ñ " ¨„;f|xÓì>úþ!×<üG?û Øu¦Íþdþ‚6lغuËÈn&1zÌg{öŠÊÏÏokk\¾cÆ‚¨Ÿ´UàÓ¸EÈ@>4ðc§”ITôå„;:„èräÁÏp ÿOú°€ÁðÜÎà;êúðâVnn7óèc ƒ˜ÂgAÃŒÁxqDfúw¤tôƒ (¥€J¸cFëNTTĸ‰ï…;?Í~{úÌÑ;wîÜ·o_PPP`` ··÷Ù³g=<<ÀØãããž™™YWW§àL–ú˜¢TŠ*ãg6ÿ½¸eˆù«HTÄ a†JŸ7~6ØÈE"!wø©ÈLW©n/1ëw˜Ÿº;]±‚Ä!SZÄÒÃ!)Ö&=]+ôÏp‰cŠ>ÖáâŽÄ&„ÞPËQ@%ÜQêlD<`¤¹zõ*,L†5ËÅÅÅ@3pÁÏêêê²²2¸YXXXPPP^^ÞÐÐÐÞÞnD*6DMÜá6 pzŽ`(öM&,Çdœ)–$t8T$''æ/Ä­;|Üáxô-U&AVí4íH™ó’ ¦ˆ®m`~awdŽQÜΰDÜ1{•8p`ÕšGŽfr?;;;ÉO¸?a'³çÓ¢2`"Ü!DÂ\l»Žà|–à¼'ßúBâ×g/DN–óÉ!}¥nÝa§ÂÆ8~fŒà™ADç2±@AëŽà–Ñof1oTÉ´6‘¥?ìKdr͸É,‹+03¨€Y°DÜ1¯u§ªª hÆÅåĺõkÙ¸ÓÜÜL~®Z½bÛömàÇ,f±‰šwd>†1¸: ˜w .O–hÝY¯#hà‘bÝ‘‚bRâa¾ò¢uÇbG?̘U(`‰¸cFá\NºÇHwG1cn-*iÄu¨ÂbSÇbº`êTKƒ™€Ì Pü;R–<‹/OæDL1HcÒã‡'Ä‹ñ03V§€%⎭;ÄfŸ‘áìºäÜ¿Ÿûî·º*7Q†w,DÔɘëŽüIƒl!¾˜F$Î_¥cŠšåÂÉ,`­Í+`‰¸cFÑb®_¿Ÿ°‹ Ìj1Ü `~ÆÄDÃ8t×‡ÔâŽ:Ta±©XîH¡%ÆâއbLP\KÄsYw\ÖmX ¸sêÔ) 6î̘1ƒ;ð×ÐÐPðé|ø€LÜóµ•j\(#’qÇbADŒ!¹QJ´îH”Ð'*ÀVÀqÇ\5à²gßÎ+W®ÀʰŸ2àNl\üÒŸWÀfÊpùøú}Ôÿ‹÷?þ4$4 <À_ÁºsÆí”›»›H†Ùo[z3\Œ eRawÔ¡ ‹ME©Ç9ƃK•M:Raäv«€%⎹¬;pÖñGwˆ]Çùð‘Ïú÷_ƒ#àçãÆoܲuÁb§O¿H<ÀÉqñ±'\Nèk=R DŠ~üÆ…2i+GܱXQ'cк çÊtÓ¦þˆñˆhú uǤãFnà ˜wzöÉéíØØsP¡“““ƒƒƒµìéyààwwWwhtÜ!ˆ³vÃÆ/} _ÒÓÓwZZš×¬YMe¶aì=$.üûœ;ij>oìØÌCˆ;êP…ŦObt*(€¸cÃÏc,šIP wÞ*Ðp>(³j‡ƒ;pþ9˜v¶íܬ“‘‘^[W G„.ÿy)î0ž ”°?õ!‹>?ìt?faÈ âŽÅ‚fÌ–@Ü1é#·a,wÌ%÷šµ«#£Â[[[q'+;ûë!ß;qâà¡ÃÁ!Á±q±!¡!`Ý™9{îp,4lLa[nØÔ"‚;‚±™E@Ä[z¦bY,VijŒo˜¨ (`‰¸£¸u‡D(þ ,šŸx!¾©©‰;•••Ÿ|>`μžg»¸¸ºž$pg î胾IF îˆûQ¹u"îXì3fK î¨<²ar6£€%⎹Ä6}JNNN}}=ƒ;ååå{öí‡5:/^|ïãO1uúŒõ7íÛ¿§©©±ªª"::röÜ™ú2,bäà ߤ²Œˆ;¶ôLŲX¬ˆ;*l˜œÍ(`‰¸£¸uGbmý8ntEE9ÁÚÚÚ†††ÆÆF8* VóÀÒ²ÒÔ´˜í Ü)//;{ÖÓÅå¸ã¤ñ"ñ‹,.抾%ÌÌúòE|E³¹î(¸vFst¨* ¢t7*³–—E$Ôè 0NKÄãJ"?ÔˆQÃ.]j¸å;À7p:¼¥›ëÀv‚Lä×®]…9¬  —“'|}}&MžÀö ?Vƒ"Ö+-;fPYÄ•Çäl@KÄsYw9<úÇ‘Tnìø.šoí@~Áˆ*€ TqGþ…1Ø›–ˆ;f¬ƒïG^¼t·pñR­sœ2ÑŒ¹µ¨¤•‹*f°@¨Fm#œÌ²ÀJÄ,©¯UÇII áü£¶;‡jÖØÀ¾;0'å8i’‹Ëá#Gö>¼÷С=ÎλÜuàÀŽýû·ïÛ·mïÞ­{ölÙµkóΛvìØ¸}ûúAƒ¿Å™,ÒjM„;TÿŠEϨ€µ( g¬§µwäHamIªŽ£î˜Kß_ýuá¢E~ÝÀ—Öÿƒ>yçƒß~Þ}·¯ƒCß·àóí÷Þ{çƒ~|üÉÇŸ}þÙ€/ÇMp„õ=æÊ°E¥‹¸c-Z̧%( §óRÚˆ;r¤Æ°¶¤UÇQ w̵vêØÞ9‡÷ÏóóóáÄÐÈÈHÿóçÏÃqZnnn>>>AAA111YYY¥¥¥ð‚:¬kFëŽÙ­;ð>ÕŒÖ?Uä袀œ§Õ¨¸#Gj kK Pu•pǼúÞ¸qÞÆºzõ*¼™4»Âo¤Ãç¥K—àN[[PP\`2on-'u“ZwØ€Âÿ._ôÅ åÉÄ÷Ãl`\p … Èé¹T£6⎩1¬-)@ÕqTÂ3Zw j#»Iü´¥v ¿,v…;ÌÓZ iá£à+ §ÇQÚˆ;r¤Æ°¶¤UÇQ w̨¯tÖ!>ñb0/îðÍ-œ;‚ö}794ÃÞÝ‘óÜBÜA”1N9CÕ¨¸#Gj kK Pu•pnjր˜Ö²@ígæNƒŸ¶Ôä—Ť¸C6 þ's“lݶeþüù@9 .ä|N:îÏ)S¦Àç¬Y³V­Y±qhwp¶Ô Œ.‹¥áÇ$#ˆA‚Ä#wЮcÌaÆ"ÝÑ Õ¨¸#Gj kK Pu•pÇ\ÖÀx!ëäÉ“ð ïd9;;Ã'| %ß9/g8qbîܹ:uÑÉg¦#ñ!˜ìÂÄ«ß2ÄxFÜ1#+Ø@Òrž"T£6⎩1¬-)@ÕqTÂsé ¸/^Áá pUWW×ÕÕÁòIîO¸qšêcÒ\':/ûqGÜ™´’b¡ãpÇž¸X3* g”£µwäHamIªŽ£î˜Ñºo¡ÃAèâWFFÃ:GWFÖ!ýÁÔÖ*Ü!žW+³ÍE|Ó³ˆVp©2ZwÌÈ 6´œ§Õ¨¸#Gj kK Pu•pÇ\ú‚uG;£»õ\°Ó`×Ö)ǽK¾aòŒdÊÂùi®2š.]pÇ\9$s)oÃéÊé‰T£6⎩1¬-)@ÕqTÂ3ZwÜ4𤧧ÖI:>áà²AâvÄe×î˜ñɇ¸cFñm5i9OªQqGŽÔÖ– ê8*Ꮉô·îtÙuj´¬Cæ°ˆ}1íð?ÉM6 ± BÛJd.q ¦kÃÖ[}âb¹Ì¨€Á%âjÔFÜ‘#5†µ%¨:ŽJ¸cÖ.»NMô…Ó?^ñ-°¼¨eîpf¸$âáû´ä–g"ܱä"cÞP³(@5j#Ž0Q T€ªã¨„;æ’IŸu‡Øu.VE%{x…ö=,X­ ‡†JÁAˆa/}EÜaÿ ÛZ¶h2WÅtQP€jÔFÜÁ6ƒ ¨:ŽJ¸£¸u‡D(þ ظìݩ¯¯×²NedìÁ1—j×ëëÀuðàA£q‡Óø+ç ZwÄ{©s|R‚HñƒÃ*`F¨FmÄ3Ö&mQ Pu•pÇ\ñ­; ³gÏž6ìõðÓkŽèì:¾¾¾ÁÁÁ°Óà¾}û$âSö:r“sqGܺ£Ï*&½ÁèCq²”@œäG(½ÈèÓö µwl¯`‰ŒS€ªã¨„;Š[w$J÷îÀ¾‚€8ýß{zÒàWàËÝåêêêçç·mÛ6ãp‡Pg©2›~ âû”X³x3õÚ>" ÆáŽ|=wäkˆ10 PÚˆ;ØrP¢UÇQ wÌU7ë˜v"##»uë 3hР%K–„è®ÔÔÔøøø-[¶€Ø–Ð\¹µ´tMŠ;‚˜Â1ö0È(òvÞŠ-;'rÁDù¶"}€ki•ˆù± ¨FmÄ«¨S̤ Pu•pÇB¬;°jN`‘¨ªª"§IÀø~êÔ)Àëׯ«PIV‘„Yp‡QÆàD!Û~&n(„¶ÉSúü‹¤h„]Ê*ÚfR¨FmÄu*S±|¨:ŽJ¸cÕ~ýõWÁ¥Ê‚û  yzz"î°kÊBpG|} m†ƒ2"¸£ÏÈdu™¥c¢6 Õ¨¸c5ŽEPDªŽ£î˜ÅºCp§±±Þ0—xád–⎈é…Áã¬;ŒµFd!•‘I‘Œ‘Ø¡T£6⎶,² TG%Ü1KUîlÙºFºÛ¼e„2Kn-0Q“Zwç’äÌ"DéSQFdë³dE PÚˆ;VT³˜U“*@ÕqT³Xw@eXwÜÙÙyéÒ¥êêêÒÒÒœœ²ËNVVVvvvAAÜ,//‡®ööv\¸£šu‡mYa&¤øœA¨HÊRe>?‰DËØlDæÂô%ÊYæÌ¦(“vlŒÜ† µwl¸%`Ѩ ê8*áU”õ sõêU€ ™¶¶¶Ë¬«µµîÀºrå øDӎʸ£l]cl¨€•*@5j#îXi-c¶W€ªã¨„;æ²î(.®]EhêÉ,» ‹ ˆ(@5j#î`[BˆTG%Ü1cÝ8ÒüIåœ4c†-'iÄË© ̉m+@5j#îØvcÀÒIW€ªã¨„;f´îˆo”,(«A¤WùDܱ¢Ê¬ZµT£6âŽU×5f^A¨:ŽJ¸£`ñh£"ìÇDÀÇE—””À²å2Ý‹”a»íuö,ì4+šÁ3âc'ÌH‰…ïÌ çNNNìÏá;¿ á‰è´­ýÛ¹T£6⎷,>£UÇQ wÌnÝѲÐΙ3¥7Y@§¼¢¼¢¢B‡:àÎVW×ÔÖÖ î°[’¹pLjMŠBJjt@tP¥ µw”’ã±v¨:ŽJ¸cFM‰©ì:À:ngܺì:ZÔѲNee%Î9pç¼jjwjwÔÁÁwÎø0AŒ"Ž;Ò#ä¿*oÆI[£T£6âŽ5V1æÙ Pu•pÇìÖ­a`ÇÍÍÃÝ}åªcÆý0xè7àà˃ûªkªkkjë´ggÕ)ˆ;ÒŸ—¦hòã4éÚËÇ#´ö7¢ÈD¨FmÄE4ÇHl@ªŽ£î˜QÖ.뎻»»‡ÇÌÙÓ׬]’]vš››×¬[í´tqö P88«^w؇7Iy°IñcFe &m^Üß]1̰÷”„)5»6ù±±íL"ÑŠlålP^ô€ °-©œ%qâ?¡o¢z¨*`‰¸cv뎻v´v`Øjpgذaðyùr @ÏAçýõõÚÃC Zw¤CŒtŸ–ÙjMŠ;lžà|g~2ÂчÙ™}_Ÿ¹H0¾g}w¤øÔ—OˬVÌ•*@5j£uÇk³d¨:޽Xw<<<`I2L]âÀ熎;¶¹¹¥åòe²ÕòxDZÀ:/^¤Å)ÿô·Òµ–†;{Œˆe…sÎcb›v8ße⎵£­Y†*L­;ØP9 X"î˜Ýºãá©ÅX¬óë¯7ššxƇHhÏ‘hoü X0ˆ w¤üÓ_Üê §¦MÖ¢pG\jAƒˆòÒ+NŠONꦮŒßö µÑºc{ KdœTÇ^¬;doîü ¬ÓÒÒ2sæLë´uttÜill‚ q‡ý/NS¿ˆ.¾`™=Idá¸c\_ÅP¨Q€jÔFÜÁfƒ ÑqTÂÅ­;$BñO"Yª\U ›VÁŒ¬MÖšt.·¶µ¶MpœÐÙÑq¥³nÀãíããSWW g¢§¥¥íÒ]GsÑaë2¬^†µÚÚwwÌØ\1iûT€jÔFܱÏF‚¥œ‚¾¹J¸cvëNCƒvËd²³\ºý“µ?›/5·\naX–0#î˜ wŒ[ök\(8P‹RqÇ¢ª3c- Pu•pÇŒÚëÕeDªø­Å³I'³Øïd1\Œ e-U€ù´¨Fm´îØI«ÀbT€ªã¨„;f´ît>øBåÜÜÎTÙ<˜wˆ€ò·œFܱ‡¦hóe¤µwl¾=`%*@ÕqT‰Y778ÿ¶,//ÏÊÊŠ ò÷÷ ‹‹ËËË«©©ÕÊàÓtÙ°®˜ÕÇþ Þúöd(Gð e]jcníYªQqÇž› –­UÇQ wÌhÝQ¤q$mŸ ~*’+SG¢>î0%âà ‹}‡=¦ãGT€jÔFÜQPyŒÊª ê8*ᎅ:räˆáßû~Ô¾›9{†H&áiÚÇ1J)g-†KÀÎQüÉ/Ž!í:Ò×0T PÚˆ;TÚ¢gV€ªã¨„;æµîTWW=zô§i?Á¾‚Åű©àR²‹ëëkÁÕÕÕÄÅÇNœ8A¤M€]G)Öx 6«hfÇA¸áX€—9#ôXEÃL2 PÚˆ;ØrP¢UÇQ wÌU7°@g‚ã˜qã8ï}îâņ¡ÃÆç¿îxâý®_-ðhjj„›Ûvlá,dþeÕr8I”g´î½ œœœ8ûðÛÛ4Gq³™à–øÔ Âññ™Y‹ Í\]Óµ(¨FmÄ‹ª;ÌŒ ê8*Ꮉ¬;¾¾>«W¯¸qãFggGssàNè…üOæzŒÞÑÞ™††ºÒ²âÍ[7´··^½zõÊ•NøèèèX³vEKK » ѺcÜ!LÃ^­lÐÞÃ_ìlÆ®ˆI£ µw$ªŠÞl^ªŽ£î˜KtØCyèwßʤ¤\܉K/é7ãôÓOZq¾¤´03+}ãæuíMM°aØ{®^í\µúç@?/´î¨0™e®†é¢¥Õ¨¸cQu‡™1£TG%Ü1—uÇõøþa_½•ž‘–—Ÿëãë5ä»o[Z.ÙÀzâ₌¬Ô¸„è ›ÖíX&¶/‚æ¶æû­;ˆ;fìÆ˜´])@5j#îØUÛÀŠ(@ÕqTÂsUØ´¡ÿìð6¬®¬¬Øp/Á`¢¢‚ôŒ”˜ø¨ ¿uV3¸$tåÊ••«ýÖo`]“mfí» °è˜üdV1³r|²W:[˲Äsµ[L×Þ µwì­y`yõ)@ÕqT™Öðô¹»ÎóÜo3>ûýô~wès3>ê®swÌèwÇŒ»ƒ›Ÿp¾ô»#ùB<9Y»Ã&‚/úp‡ï“;øfö^T`+@5j#î`ãAˆTG%Ü‘Y7:‚1è»Ïxž;ðÿ’NL(ô]̸ŸEÙžsRNNŽ;ôcØî¡þ›¿ôÛ4@羸éx¯ûtö—½aÅǺ#ˆ; ‘¿²?õ½»ŽÖ™íƒ£6¦Õ¨¸ccµÅ1ZªŽ£îÈ´îÖ\¿~íÆ.߯_¿ÚÑ~Ù îüòSßM_F­5lñ±ì/q^ŒZñDà‚û}çÜwnæ½n?Ýsú§|7|²fÔ#gŽïeWófs“±îâcø4ó uÇ`ãV„‰Ä`V‰éiI÷)1iôf PÚˆ;6PãXE ê8*áŽÌ‚Ött´é\+8xo¼ùR}eižAÜ9¼{óü7ý6|ä:õ÷ggÞã3ç^ÿyµþå”ÃCS Ë;¿(jý‹aËZð‡à÷‡/ÿkÒ©i3?éÁ99‹¿ïÇŠÃ`> ®Ýá´þ+ålnÂýô ³Yê+‚8ñ÷ÂMeV„ §µwl Æ±Š(@ÕqTÂùÖ¶¶fö,ð½8? p‡Ä¬ï3*"xõÿÞùÝþ{‚;8æ·'&Þ}ròï¼—ý+rçÞ‹Í>¿4Ým¦×¬{ÏϺ×gþŸœžÈ:·Àiè_JKŠ­;ìUÉìÕÉ}‰ß†ëyx¼Ö¹Í:lÏ0·EϺÎyœ÷Ê7vZ4ê¿|ëû{ínø>ñÍ,~+'Ï{þ§ˆí‡ÁŽA"aÇÌHåYÄ„cØ ÂÏ•¾²(;.`l–¬Õ¨¸cÉU‰ySSªŽ£îÈ,?`MZbHt°[¸¯K˜ï p¡>Ç#üOIÁÿ½½×p[Ö\à®g–¾¾oÌ=»GÝîØÌ']¿²w´Ë¼çöMøãîïÛ3¶×ùMƒfö¿g¾uGΉ¡hÝáS Äí.‚ÄÀƒ¸Ã-:‘HKúÊŹv™‚í§µwl¯`‰ŒS€ªã¨„;2­;Fï» Îþü¹­#ÝW}ê²äã‹^Ý?õI÷•Ÿ]?`ãw¿9éÔ7pß5_¸¯þlãÐîÄmùû“NoÍüì6ÜÁ3³Lqf•u‡@‚Ô(îÄ f©`ݱü5n<ÂPR µw¤HŠ~ìAªŽ£î(¨;-9Íü”džÁ'—:ì™øÈ¦awМñø¹qH÷³ë†šîµiðöþÀàΖïwhæsÜAëŽ)pGК"ÝH£î̃‰p‡“®‚£²F¨FmÄk¬b̳) ê8*á-£(¨Ëì¯90»@ 4䈡wlÖãЬç9÷·ŒøínÇ¿ uªÀ¤K•õaÈ}Áe¿‚þê`rG°]ñ§–8žùé2ñ0>õY•¤X›Ðº£`·Ò¨¨FmÄ+­e̶â Pu•pGÁBÒ’Ó¬½·}xã_v;þYëÆ?¼küC»Æýiç¸Þ;Ç>¸}L¯í?‚{`û÷ëܶ¾oóÈ{к£î(Ø0Œ‹ QÃ8Ý0”² PÚˆ;ÊŠ±Y¯TG%Ü¡eÕŸÿÝsÓúýfÚGwêÜ]à~×q=¦}ÔcúÇ=`kÁ™ŸõœýÉog}v7¸Ùaç×î˜h2KÁŠ6.*ÄãtÃPÊ*@5j#î(+>Æf½ Pu•pGA5iÉ öG®¯¯/.*JII ñôpw>¸óÆõ+Y¾|éâ•+–mÞ¸îÀ¾Ý§O÷ñ>œ›™‘v±¡gx(ñ(ø©  ¦‹J…É,ÓecF¬HªQqÇŠj³jR¨:ŽJ¸CË("YNT¡¡¡«Ö¬`;¸cÒªU9rÄ•ÇäìVªQqÇnÛ œ£UÇQ w¬$qGN®‚‚‚N»žäÄècKă¸#§…`XT@ºT£6âŽtaѧm+@ÕqTÂÅ¢ ²ftQwÁdYmmmMM Üûþ¶ÑÂ,w,g© UN¨<[Qã±Õr©_T£6âŽú„)Z¦TG%ܱL¥ŒËU`à-Ö! SUUUQQQVV? ñÔÕÕ¹E…2)îˆìg#"‚‰ž¯Fd†*'TžÅÛ€‚QABFÄ&®•ZT›7Wf¨FmÄsU¦ki Pu•pÇL2üz2"W!¡!ĮÒ’’‚ÊÊJBâñ³C _¸ˆ3(ÊB݌݇*iªQq‡J[ôlà Pu•pÇ\&ñj¦ÊÁ I‰QQ‘`Ñ ñò:/a%$Äwtt€çÚµk°^§³£pÐܯ×ë×­_¦/"Ï yTXîHÑ™ÿ×w‡ÏRpǸ<LKÜl#‚ƒŠ_î0Y²–lùÃ=Õ¨¸cùŠ9TGªŽ£î¨Sr“¦Bp§¬¢ @ˆ§µµ–æÄi×]mmmpó2sZZ óaeϯ¿Þ ¡/AËû9Á1Tp BRæ_d bɸ#h21øàW w¨ØH:r)[j&6qƒ §I±î0AØ\fk´íàT£6âŽm7,t¨:ŽJ¸CeG/ª¹¢"àL““—“›—Ëá›æææK—.555566¦¥¥Âûñ€‰¸Ãy, &ÄÆMôdg•SY‚yD~”‚SNöø*…ùÌÍŽGŸm†)£¾†*XRšœÝú¡µwì¶`Á9 Pu•pÇ*‰€ o€l|ü¼KJоďihh€·Ðu2³2`ßf}eü‡¯óƒâ"«€;ŠçY¹½{*trrrpp€4¨2j3ÖXƒ£} ˜sÊÐi,B9ùù=p¾âŽIÇeƒïjQ5Q¾gìg2sH\ßkkT‘ˆ«$3*9Á­}¥Õ¨mÒn%§0,* ²TG%ÜQYÅ“²!ÖʪJ`>èó³˜ Î—è!¸H¤x~ԉФÖ}0!ý¹¥îÐ.’“R­ÒcÞ L§xn%¦(ÑSR‘wã9jp˜‰hOzˆû¤µw”’ã±v¨:ŽJ¸cíÖ˜·ÙAG¤Å@(À#+mRˆ;Ÿ²kíyö+Û¥ó‡`º´¸£/óÙW©ä”Õb£µw×#´R¨:ŽJ¸c¥R²³½wïÎ{X†®Zqüø1ë-»yq‡³X[pA7c`|Õ\Ѐd0Zâp¬;Lœ‚)Û Û î“¶½„ (ø g’à-ŒË•> –¾ØØÅÔ'•#a{¬t¾\›„EuLªQqÇ¢ê3cF¨:ŽJ¸cíÖ¦:ál,ØQöÔ),,LKK‹‰‰ Ñ]p^:|‹‹ËÈÈ€)-xW ¶ç1c#P$i“âyd ~279qá„¢Š„H*ü‡®”D#çœ_RAVãDÅÉ” úd7{pþ*’H¹DDæÿ‰O`üÖ"¥y°;‚xé2FGB5j#î­3´1¨:ŽJ¸ccÛIq¬wø^þsÚ "0OYŽO}Ö} iD˜Ì`ÆØaÙ™4hÕÃÒc㢈\ú²*¥EÍû/Õ¨¸c5ˆY2‹TG%ܱë»FÁ¢Ã™Ï‚;f©r%ЏÃ&AëG|ó⎾– ž+A³‡Þ2h£ÒgÙbò)=c2­;–lÚ5¨FmÄx­Õ)@ÕqT«Ñ`†ƒ‚‚N»žäxú±%â15îÚ6øHÚy *þ0øP礮/3ŸßÛ‰âÖÁlÔYMÜ1ºH·ÙH÷i°#[ˆªQqÇBj ³av¨:ŽJ¸ccÖ  @ö&˰ñ ¬æý¡îá~@€¿Ù"0#î'4¹ØpöM¶­EpÎEд`0Z1ˆÀ'{œ|2©‹xô#¨øÖ&}:ð!ƒ+}–&6¾þŸôÝ‘¢¿* R/'9>1MH°(ÒAŒ„jÔFÜQPyŒÊª ê8*áŽU ÊÉ|`à-Ö! ;ë}w˜SÐa7B(² ¸cj•ô=ÈM®”ø-9oRòo!~lCFªQqÇBÚfÃì Pu•pÇf¬;!¡!ÌilÐ)))),,€½• ñ¬Y»²³³ÓìMAfwd (Ü6Ò¦ÓÇ`Ì"ö<ƒa-ÐÕ¨¸c5ˆY2‹TG%Ü1‹Š'zè3aØX™XttŠŠŠ rs3Á1Ä>¯_¿®xÔŒÐpGM¹0-TÀh¨FmÄ£uÆ€6¦UÇQ wlÀºCÞ¶ LgcÁItòòòrrr23ÓSSØÄ³ióFاÇz›âŽõÖæÜº µw¬«r1·¦S€ªã¨„;¦+­j1Ö‰‹ãƒŽ¯ŸÏÙ³ž¡a!€;í àØ6žË—[3)²T_¡TžAÜQ­uaBv®Õ¨¸cç­‹Ï(@ÕqT°îܹ” ÐÐ/¯sðVBB|GGXq®]»ëu:;Úw}Àýz½~ÝúeúXLj&‹¸c„h°|¨FmÄ˯PÌ¡: Pu•pG’›4‚;ee:@â`þå+@5j#îÈc° ¨:ŽJ¸cÊëLW‘«Â¢Â“§NpŽݸy,ÙÓ$àeu¸ŒÆ{˜Ì±îÐâcà“£ªàÒ(Ž­ÈÚ-Á* µw¬¢N1“*(@ÕqTÂK¶îH¬ö!Y0oqÒÕVðÀòd˜Õ‚;À7ž^§\]àL x.Üœ²‘2½BüH̳Lo&]»c^Ü4ñ)S¦€¨Õ¨¸#QUôfó Pu•pÇDgÎŽ€E9¡á!‰I °Ž 9Ä–ˆC('08àÔØ›.‰Ö‹Ǥ¸Ã±£ðÙð -" qD¬2"dC”—2f±u„³ ¨FmÄÛ¨t,…|¨:ŽJ¸c3ÖXƒ£} ˜sÊÐi,B9ùù=p¾âŽÁq™cÐ’R؈éHúhFŸÝU3¤ÉïöƒU+@5jìVV-f®UÇQ w¤çÞ2}ÙëNeU%°tÈùYÌçKôÜ$²ÌBÌ•©­;3 ݃"\¢H$ÒóŒ>QFªQq[*@ ê8*Ꮅ[w`ÞJd‘–¡¬´i"îXiÅa¶­NªQqÇêê3l"¨:ŽJ¸c¢¢ªíÞ½{8ïaþ¹jÅñãÇÔ̤²iYî([pŒ PYªQqGåÚÁä,VªŽ£îX»u‡©l8 v„=u ÓÒÒbbbBtœ—ßãââ222`J ÞÕ‚íy,¶‰HÌâŽD¡Ð* SªQqG¦ÚÜf ê8*áŽÍˆkWAܱ«êÆÂšQªQqÇŒ5…I[”TG%ܱ뻦Á¢Ã™Ï‚;ÕdfqG¦€¨Õ¨¸#QUôfó Pu•pÇöD :íz’S. ["ÄÛk·X"ËT€jÔFܱÌJÄ\©¯UÇ‘Š;=ìþDtvE²7Y†a5ì7~à~@€¿úµnŠwL¡*Ɖ ð µw° ¡DªŽ£îØRÝÞb:°³Ùw‡9v#´"#îØ@%b¬BªQqÇ*ê3©‚TG%ܱ™µ;!¡!ÌilÐ)))),,€½• ñ¬Y»²³³S…Ê6iˆ;&•#G¨FmÄl9¨ZwLÛr&¬ +‹€NQQQAAAnn&8†xÀçõë×M›!ÇŽ¸cb1zT KÄl ¨€ Pu´îHU˜¼‡¾t€iàl,8)‚€N^^^NNNffzjJ›x6mÞûôHM@¶?ÅÏ@@Ü‘]'* IªQ­;’4EOv UÇQ wl@vÂ:qñq|Ðñõó9{Ö34,p§³½ÛÆsùr‹`ñ¨”#âŽõ0,*`F¨FmÄ3Ö&mQ Pu•pÇÖîܹ” ÐÐ/¯sðVBB|GGXq®]»ëu:;Úw}Àýz½~ÝúeúXGñFƒ¸£¸¤!* ŽT£6âŽ:•‚©X¾TG%ܱ|Õ æàNYE€ü Ksâ´ë®¶¶6¸ ‡‰¶´´æÃÊž_½¡ï`QA4aì=$3l?ÌwŽâÓ`q¤xÀÉ,)*¡T@¾T£6âŽ|Á1ÛP€ªã¨„;6cݦÉÉËÉÍËåð œçd555566¦¥¥ÂGkA{9G]„QÜðqGÊ1⎂bbT¨€ˆT£6â¶%T€(@ÕqT¨.`¼²ññó.))føড¡ÞBÖÉÌÊ€}w˜=x –o¹aßasÛ£‰ &'ÝâŽt­Ð'* GªQqGŽÔÖ– ê8*áŽ%[wHÞÄ?; °\5µ5§ÝN¥¦¥ÄÆÅ}öœç·Óðš:¹Ä­;L›ΟøS`‚^JµfÄ¥”ÄxPq¨FmÄlN¨ZwL؈u¦«ÈŒUaQáÉS'8G„nܼ–ìÀið²:\òq‡mÚüޏcÂ*ǨQµ@ÜQKiLǦ ê8vmÝ¡ªvö!Y0oqÒÕVðÀòd˜Õ‚;À7ž^§\]àL x.Ü\_¬ï&;Ÿ¸T™ªÖÐ3*` PÚhݱŠ:ÅLª UÇQ wT(¶©“`ÎŽ€E9¡á!‰I °Ž 9Ä–ˆC('08àÔØ›.‰ÖSçÜèøq2Ëhé0 *@¥Õ¨¸C¥-z¶a¨:ŽJ¸c™kw¨ÁXƒ£} ˜sÊÐi,B9ùù=p¾âŽËTm =Û­T£6v+»m'XpŽTG%ܱöJ²!¸SYU ¬Ãr~sÁù=w‰¬´øhݱҊÃl[T£6âŽÕÕ/fØD Pu•pÇÚ­;0o%²ƒŽHEB(À#Õ´©£EÜ1µÂ?*@ µw°Ù FtQÜ)Ô<â¬éµN£y8¹GŸÜÞŽ=:99988@ç´7¹÷îÝÃyËðÏU+Ž?f½B!îXoÝaέKÄëª/Ì­…(@ÕqTÂk·î0U gcÁŽ‚°§NaaaZZZLLLˆî‚óÒá{\\\FFLiÁ»Z°=…4£³¸c´t R€jÔFë•¶èÙ† ê8*ᎠËmÃECܱáÊÅ¢Y”T£6âŽEÕfÆŒ Pu•pÇ\ÖçCΆ§œÖ¬`ûq>tÐŒ•gQI#îXTu`flXªQqdž[JªŽ£îP@AÏF¬/6"ˆ‚¶¨¨w,ª:036¬Õ¨¸cÃ-‹F¥UÇQ wÌeÝ!ìRTTo†—è®Ò’ÒÒ²²Rø\åe°MŽn·Ø3G»oxFÜaZâUÇCϨ€Ñ PÚˆ;FëŒmLªŽ£î˜KbÂ.ÅÅÅÀ6€:Aº+8(èÈÑ£ÁºëèÑ£!!ÁÁ!!ÇŽ«¬;öÁ\E0cºˆ;f“¶+¨FmÄ»jXX¨:ŽJ¸c^ëuÀ€ž#G€sn]€8ÇŽ×þ§»È~€hÝAëŽ/¨€Ê PÚˆ;*×&g± Pu•pÇ\bvÐ!»ƒ9'^wim9••À7äôòÀÀ@8û q‡]ShÝ1W»ÅtíMªQqÇÞš–WŸTG%Ü1¯u@Èêøøøñ„„†€-'/7.˜ÛÊ×]ðûTwàÐrˆ‡|Zõ…¸cÕÕ‡™·"¨FmÄ+ªY̪I ê8*áŽI ,9±îœqwÜÅȰ`BBbbâ…'NÔTk3ú=këjµ_êê¤àp s &-ˆ;úA"Ëá$Äsµ[L×Þ µwì­y`yíȺãž>w×y¾ƒûâí€àÌdÁ'Ì^ùùú……†ÁåââR_PPP”û#Ã\Wow¤°ˆtÜ¡%Kh߈;–P ˜{PqÇj˨¸TÇ:¬;:‚2é»Ïxî:Ƽ²VçîÀQ’´àNØtêêÀÞS__ßÐPºØÐ nÝÑÇ:ctÜa"dÇÀÜ!…bGÎΣmjˆ;´Š¡TÀ8¨Fm´î'2†²=¨:ŽJ¸#sí`Íõë×nÜÐ:x®Ã÷ëׯv´_–ˆ;0“óVðéï﮽"Nža/ÁÈÈȨ¨hçÁߺ?þPÂŒ1c?øú5ï¯^ñøâås#>röáÉÁïŸzá{&Œ¿zõª>âÑ·šX|í;6ŽOþ|{û¯â¼¥l@ÜQVOŒ Чը¸ƒ °\Ü‘Y7€5i‰!ÑÁná¾.a¾'À…úð?E‹;‘‘`ÚIKK;úÇâú.dÐëþ_õðŠûçÿ]5öÛ9#¿›>ìÛIC¾ž;jØž^´´´È̶ ÁMñB“mÄj“@hÿ‘Џƒm°\Ü‘iÝ‘¹ïØuàmsX‹¶èhX©ãø•ïW¯žýâ•3ýÿë6öí»G<ú³óCN»ßÚ|ìÍ Î‡ï¸ƒ¿vÇ[âŽV f  U­;´Š¡T€öß *Mf)X1TäD–*Ü©©­Ý“á ì¯ãüàƒñK¦øŽüøtÿ—Žòϵø~ùòÒ_¾Üwæ™å;?™:wÛ}÷‘Í íùBëŽ=×>–]MwÔTÓ²¨:ŽJ¸CÅ( Ö„¾ãÍçÍÛ÷蟃–L vš´|Ö…˜• )«½¼Ö ßêüÁØ) ÿôðÖ‘#a[BsbQ!îXc­až­QªQ'³¬±Š1ϦP€ªã¨„; –“Šœ:âtÛß{÷@»v÷{ëÀŸ?ÔÿàÞO·­úð³¾ïï¹ë®Mœ••»ò(˜mkŒ qÇk ól PÚˆ;ÖXŘgS(@ÕqTÂ*FQ\”ëׯ777—––fddÄÇÇÃyçÎÛää´ößÿÞï½Gºß‹uà˶—_Þµjœ2ó_Šçĺ"Dܱ®úÂÜZ¯T£6âŽõV4æ\Y¨:ŽJ¸£` &§k×®]¹r¥µµõÒ¥Kp^¼šÓU%%%™™™d3xc+77–ì455O€$³mQ!îXc­až­QªQqÇ«ól ¨:ŽJ¸c4£ðR0*S¨oKq"îØRmbY,YªQqÇ’«ó¦¦TG%ÜQ°üÒqgñ’Eß þšÖ-Y²XÁÜZuTˆ;V]}˜y+R€jÔFܱ¢šÅ¬šTªŽ£îHgƒÒH @çŒÛéã'ŽwLÐ?rTëƒ;îrtÇέÊ`ìÄâŽT4Óì PÚˆ;f¯/Ì€…(@ÕqT³Hàâzæäæ-,œKÜ¢Åó9n‰ÓÂ¥KÏž3cמí{öíÜ·âSYˆ;fi·˜¨*@5j#îØa Á" *@ÕqTÂé&ƒ•*=*—°ˆ­Û·œõÙs0*îh\Òé„dרD—Èø#!Q{ƒ#w„oö ]sÚó0ídeg@¯óç æÁN< îØIEc1ͮը¸cöú XˆTG%Ü1‹4À.±ñч Ý¿#*aO\Ê‘„”c±DÄíŠZþ˹Àyn>S]Ï-9qòhXD(™1{¶Yrk‰"îX`¥`–lRªQqÇ&Ûʨ:Žî¼U yÔYÓkFópr>¹½{*trrrpp€4¨r&Ý$c0ZéQ»¸{œÙ²m£«ÛÁ“gvž<³ïNœÞ îøÉݰáá#Îdì¸qóÀx0é‘UÒ³a"Ÿˆ;&£E8 PÚˆ;Ø~P¢UÇQ wÌR7À.k×®š:mÒ䩎à&NŸð“|Oöø¾bår²yË}¹¸a.âÇÜáŒÁˆhM¡0âŽ)TÅ8Q¾T£6â6!TÀrqGºIÆ`-J ØeÅÊeŽ“Æw3aâXø'òsÙr'û ŠàÇ®c—H "ÅA¡ä{@Ü‘¯!Æ€ HQqGŠJèà(@Õqlܺ³eÛ¦y f»¹>ãîzÆý¼—>kÎ ×3§fÍ™_¦Í˜2lØÆŒ7a̰aCW¯]9uÚd‘7³ØB¾3wD¬>âæÁ8±™«‰#î˜KyL×Þ µÑºcoÍË«OªŽ£îH7ɬWéQ¸ìÞ»sõš•¾~Þ~AA~~Þ‹x÷„OpóÌqtœ°hñ‚©?M^¿~ýÜù³‡ŒÃ«Ü‘2ÃePÅ= î(.)Fˆ *@5j#î`+B,w2Ë,uà²gïNB6úÜòK—.[¼déBø²Øi!ø™ÏY»£ïOüi)A²!Á9ÌdÑØ‰" 0v¢âŽT4SY¨:޵ZwˆGü“Xw-™/Ýíޣʼn“ÓÒÓøµ¢]I…3Û¥e8aõ…R¶‰HŒ qG¢Pè ©Õ¨Ö™jcp›Q€ªã¨„;fÀe×î Ï“îvîÞ¡ÆŒûÁqâx™¸Á¥¼u¥ÏØcÅ8‰"îXB-`ìAªQqÇš–QŠTG%Ü‘¾àFJ %úpÙ¹kÛ‚EsùnîüYÀ4C‡ ?ð ßáxÿpçìÙ³sçÍ’Ž;„løë‹õáÛ'cÎáÏg —XvE¼!î("#F‚ T€jÔFÜ1¨'z°¨:ŽJ¸cé\àÈÏù çpÜì¹3¾>„sR:ÜûäˆPoïó+W¯™g³ÃŠÌüCpÄùb ¨€¨FmÄ)’¢{P€ªã¨„;æ²îlß¹Ì6žg݇æáé6xÈ x/}ôßÓßù74Ô7\¬‡—¶à'ì@è8i<8Øayýúµ2Û â Ê8.ËlEÜN µ±[ÙI«ÀbT€ªã¨„;3m À4Ûvl™3oæ°áßM˜8îëAa3e ŸÁC¿?EÇDuvv\¹Òyõê•””$@ppÆ–Ë©c°ûŽ)òcuq¢uÇêª 3l¥ PÚˆ;VZ˘mÅ ê8*Ꮉ¬;§ÏœÚº}ó-·mÓÖm›†|÷-àNsó%`ðÈ0 W·“ À::cÇÿxúôiÅkÅ#DܱÆZÃ<[£T£6âŽ5V1æÙ Pu•pÇå4ç’%‹9 tØ?cc¢¯\½ ¬ ŽXwÀÃÂE Z[[ Fnwì¡–±Œ– Õ¨¸c U†y°¨:ŽJ¸cëTÆõë×]ª««³³³£££ÏŸ?ïìì¹½{*trrrpp€4¨rl.ëU&Ñ3GÄl¨€: PÚˆ;êT ¦bù Pu•pÇÕ<=\&üø´DžHƒˆ+€¸ƒ-PGªQqGJÁT,_ªŽ£îÐZwëÔ¦¯HÍp¬5Fx`¸‡Ðû'ûŽå7bÄ˯#Ì¡m(@5j#îØF¥c)ä+@ÕqTÂÚRѾˆ.Ž;œÔÙÖA$Žý†m â›…{âíy#´Mý£6 Õ¨¸c5ŽEPDªŽ£î뎔O"™Ÿ’hÝorpGPtÎüß*ÃAË ââŽ"½#±m¨FmÄÛn X:é Pu•pGzîÙ¸#}©ršÿ }/¢ó—s¬;‚v»®Gæ¬ ‚¸ƒ¸CÛøÑ¿*@5j#îØa Á" *@Õq¤âNOuOD'Öp‡0ŠÈZc"1gÛ?ã“obÇ HN–Ù”qíŽeÖ æÊö µwl¯`‰ŒS€ªãÀGœ5½Öi4'ËÄÚ’(ˆ;´Ióý[ È/,;ÄeõÄØP} PÚˆ;ØP¢UÇQ w¨Þ̺qã³Q2ç…sæ]tÎ}2™MÑw˜MtœœœØÛêÀwÜwÇ­ã´+¨FmÄ»jXX¨:ŽJ¸CUaׯ_'¸#q©2¼ˆNp§££ÃDÄC•›ñŒÖ›©J,ˆ…+@5j#îXxmböTS€ªã¨„;Ò­;À+W¯^vÉ÷žøŸeð>G~yçgC––@%Õ„¶ù„wl¾Š±€¢Õ¨¸c!µ†Ù0»TG%Ü‘. Á5«ç¾À¹'r@ú¢…._¾Œ¸#]jƒ>w J„PE µwÑ#±¨:ŽJ¸#ݺÈÒÞÞ^WW———wáÂ…èèèÀÀ@'N×]ÇŽƒOWW×€€€¸¸¸ôôôüüüúúúÎÎNœÌR°#î((&F… ˆ(@5j#î`[BˆTG%Ü¡ª@ `—ÖÖÖæææK—.566644ÕÖÖÖÀ'ùrñâEø+uÀ&„¬C¥³Aψ;%B¨€" PÚˆ;ŠhŽ‘Ø€TG%Ü¡²îØ@ØFwl£±–¯Õ¨¸cùŠ9TGªŽ£îЖÜùóª5+¨œó¡ƒ´© qw°… ê(@5j#î¨S)˜Šå+@ÕqTÂZ뀭ÐF¡MÂÞü#îØ[cyÍ¥Õ¨¸c®jÂt-MªŽ£îÐjDØ¥¨¨¨´´´¤¤>ËtWyyyÅÍ«òæ7À3â­Èý#î”= Š(@5j#î(¢9Fb Pu•pÇ8ëNqq1 °Ž·îòºª«««ªªwLÑpwL¡*Ɖ ð µw° ¡DªŽ£îÐÖ 1Õ€]Ì9Ä®LC.¸ˆÃ¹wh–âqGŠJè¯Õ¨¸#_pŒÁ6 ê8*áŽqÖ°ë™+bݼ€{à¥tÄS´]ÄS¨Šq¢hÝÁ6€ (¢€%âmÁˆu‡u˜5:°ï޾Kwìö€OZÍ‡àŒ”X¸G„Êc@D µÑºƒm  Pu©Ö}rz;6öTHÎĆ4¨ä6κsÆÝ•L`‰Xwššš`BĪêè­;…Bo¨€L¨FmÄ™jcp›Q€ªãˆáNßÍ£‡4½Öi4'ËÄZq‰u‡¼rÓU5¼ .ØUp>©pì=äbrÅÜAS»¦whÛ-úGŒS€jÔFÜ1Nd e{ Pu•pÇ8ëLcÖ ×îÀ%w8”ùwl¯MW"ÄãtÃP¨­T£6Át¨*@ÕqTÂÚÎO¬;0¬+‘ùKvà-¸àD-r¨â­ÂRü#îHQ ý ò µ™µtø@¤+ î뎔O2p0¸Ãœ SWÀ7`ȸÄi¹ýBÜ‘?àòc@Ü1…ª'* Ø×¤Úè@ŒP@%Ü¡àŸ!¦‘É,8.ÄZ…¥øGÜ‘¢úAä+€Ö#ž^ R@%Ü1ní,Üq¤¾¾žLf1°ñ0ÆöööÖÖVqÜá¬MÆ¥ÊGgĉB¡7T@¦ˆ;TÏ-ôŒ ¡€J¸C;ë,ÜÊÜ·î´µµ‰àUÒøf[.¥p×Ó¡¨€AŒ¾1*€ HW@%Ü1κÃà,Ùa.²vŒ::`à‘‰;|{$ÙªgEpGz[DŸ¨*€  ¨€‰P wh€±îèè³îëèîtttÈÄÚìÙ‰Äõ:Œ@PT@eT£­;w`#Ax- ¬;`Ô…É è\¹rEëŽà m1wTî˜*€  ¨€‰P wh´ÄºCu„*~;ôŒ¸c¢^‡Ñ¢¨*€ ¨¬€J¸CkÝ9è|ð…ʹ¹±C"1i‘wTî˜*€  ¨€‰P wŒ{*_¿~&°ÊË˳²²âããCBB‚‚‚üýýBCCãââòòò`93LoOã’ÀP" ×a´¨*€  *+ îÐZwB,Aɸªr«ÅäPT@P*RSC8þ3RbáQ«ù¨YcÆÑ9SÍdgçC-l)q'554--œªÙ¡gT@PT@5ÒÓ£àQ% wzöÉííØØsP¡“““ƒƒ<©žë´Ö#Ö„ªvèY"î@#aZZ¤j BPT@$*žÉŸÉ‚°·[wœ5½Öi4'ËÄZV ìRTTTZZZRRŸeº ÖñTܼ*o^p÷Ý¡UXŠ鸣#žPhOèPT@PKR ”?E8É$¸cœu§¸¸XÇ[wù]p®VUUâŽ|¡õC…;)½¡¨*€  – €Ip‡öAK¬;`×s±ëÓ îâp.ÄZ…¥øGܱ„‰y@PT0…&Áã¬;`×!3Wĺ#x÷ÔÖÖZîØÒ!£ˆ;¦è`'*€  ¨€%(`Ü‘bK`û!ÖbÔaÖèÀéèú.ÜaŽÿ”"½é+'¸ÌØhuSÖ?âŽ%tHÌ*€  ¨€)0 îgÝ9ãîJ&°D¬;MMM â¸Ã@€øâG„*wLÑ(1NT@PT@YL‚;´VbÝ!¯\Átl̹qà‚£Cwà“ w‘0\˜H&Åô`w8ñ³#”IZ´"ôÖe»Ɔ  ¨*`9 ˜wŒ³îÀ4apýà\´¸ÃfŽí‡Íüï"4á(žØT!!âŽåtÌ *€  ¨€m+`Ü1hHàx Ö˜ÆÖ•Èü%;º«YwÁ¹ZTkw¤ âi L‹'›LÚvÀÒ¡¨*€ ؃&ÁbÝ‘òI¸‡Á`¸êëëaê ø 97€8-·_­;|‹‹ts‹AãAì4æ»>ö¢DSøÇÉ,{èðXFT@ìS“àíÃ˜àŽ›ûbڙ̂ãÐáBÜ¡UXŠÄû°Ô¨*€ ؃„;°pžÊ`Ú!“YŒl<Œq§½½½µµÕhÜá/=fî0¦ ²¸˜½Ä‡}‡¿´™³XGúÚg\»c Ëh ÔVe”_(-ˆ+ÉWÃåg…›Î1E€â”&@¹ tÖX)˜gT@¦„;°p(pGܺÓÖÖ&‚;RÌâqGfÛÅ਀‰&¨*M™·ýÄß¾Y®ys¦m¸?[4våÁšŠ´êŠTé†Ñ¢–¬€%â,Ùa.²vŒ::`à±jÜῚn!ø…“Y–ÜQ1oj*V`A‹‡&ZH÷”ŸÌâ(Ñüí.hÝQ³-aZ–£€0îôx1··ccÏA…äÝxÊïl"1µ;`ÝÐÑgÝÖÐÜéèè°jÜ1©’r"Gܱœn‰91¯€;`× I*øÕ¦®!IùP®†º\óÊ‹©£fQàî¼U yä¦×:æádóâl$¯euŒ:°0™+W®Ø€uG‘˜4,âŽYz &j À2˜Àºqã:8ÝuÍܵkWÛ[[ \M E¨9f 0µ„;TÏrbÂKAwLÝÙ0~kQ¬;€Wµ×[qm­-—ë \—.–XKE`>Q°Ü9è|ð…ʹ¹QðIQˆ; ö+ŒÊª ¸3ç°VÐ6\GGÛ忯‹uUˆ;VÝ21ór°Ü!´&c˜À*//ÏÊÊŠ ò÷÷ ‹‹ËË˃õ=0½>PWqGNG°¶¤ÁØõBç.Û€kkki¾T__S†¸cK ËB¥€áŽâÏoŒJĪžƒžmX›¸C@§E¦c^Æ„/2£2:x[œ¿SW_SЏcÃí‹&®âزgÄ,P¢ÀMÜi£€‚ˆ#'¸Ra[[/]jª­«.AÜÁFn· îØ2ÁP• qÇnG,8G‚;5ä8À~pÆÞCþÄöÃ|çø‘“{ùrSScMmâŽgÑÙ§ˆ;TH`ËžwìsÀRó ¸C@A¦cÀ…ü n’OâôÝ‘™‡––ÆÆ‹Õ5•ÅhÝÁo· îØ2ÁP• qÇnG,¸ u§µµ ÜåËJ9Êhcc¯æaîû|ÌM9Ùhi¹Øx±ª¦²q[»Ý*€¸C…¶ìqÇnG,¸ î¼PPʸ@Tä“8æ;çOl?ФÞÜÜp±¡²º¢q[»Ý*€¸cËCU6Ä»°à‚¸@àš›/*åb *òIíw£sréRCC}eU9â.ܱ_w¨À–=#îàS`¿™EÌ*`‘ãØóVL<ún²büÈI {éR}C}EUyZw°‘Û­ˆ;¶L0TeCܱÛQ .hÝ!¬ `®©©¶¾®¼²,q[»Ý*€¸C…¶ìqÇnG,¸ îè(§Î6¼…^WSZQ–«ÅF<3Ë~'tì¹³#îØ2ÁP• qÇž,;[ò"zC}U}}%8Xõß­×Ajµ¬“WR˜¡ÃR¬nTÀÆž}r{;6öTèäääààBª'z¶Fwì°ÿc‘(/J|ð³E!1ñeÅY%E¥E™ðÅz俸 -?û‚wP”«åR%Ö;*`‡ ܾšG5½Öi4'#îX#¯ÈÌ3âŽö,² •%Éc~9øÉ´­Gܼ²R¢¬Ýe¦Df&Gxúx4e“ãšÃm­õX切*€¸#l'8âŽö,² 5•pÑ®Sûf9Ìþ؆»Î¤uGZ/×¶·]ÄzGìPÄÛá™%AܱÃþEÖ£@nÓÅâËÍÕm­ ímíM&uW¯´™ÎÝÌù¥ÎŽæÎŽ–ŽöKM EX切*€¸#l'8âŽö,2*€  v¢âŽíðŠÌ’ îØIŸÇb¢¨*`‡ îÈ„Û Ž¸c‡ý‹Œ  ¨€(€¸c;¼"³$ˆ;vÒ籘¨*€ Ø¡Rqž…èl^Ò˜n@v]²Ã^EFPT°1 ãø@g? ðqÇ~ÊŽ%EPT°aà§ù¨Y#¸Í Ìù n °­;Ö˜Ì3*€  ¨* ¨€^Ü9~tû½ë÷ì\CÜÎí«vlýeûÖèPT@PT°XWZöìZCÜÁýiôâNzfZBb\tL$q‘‘aá!aáÁàBÃ8.04LëBBµ.4ÔŸåüBCýBC|CC¼Å\°W¨Î…è\pð¹à³Â.È#*€  ¨*€  Aî!,èF\H[Xˆ{d¸'qqÑçS’õâNyEqQq^~A.q¹yÙ9¹Y:—‘““‘“ž£sº/)<—œ“£sÙà.Üîs²»\vV|VfBNf¼Öeé\f,¸ìÌ®ËˆÎΈB‡  ¨*€  ¨Q +=2;#‚ír2áN8¸œÌˆÜìHâ r£J bõâN}CM]}uMme—«©¨©½éà{MùMWZSø’šÆ×Ô€+d¹‚šš‚šj«Ê׺ê<ÆUWå‚«©Êv•™5].µA‡  ¨*€  v«@uEúí.­º¢ËU•§é\rUE qÕ©5•izq§éRým®©®©©FÈU75Ýî+›´®œã/–é\ Ç]l(æ¸Æú‚Û]^c=q¹ 1ça |aœ«Ënt¨QÚ¿…°[ ~GPT° êòÀ]¬Ë½Ýe]¬»åê2´®6\î<â¬éµN£y8¹gŸÜÞŽ=²É¦±±œîNµe„]ãÅ –#ps qJÁ±É¦¡¾ˆëê ´N[vIêër‰‹öf¿/ o‘‡œëéK/—+ÐÔÔ-ßBll ,*€  ¨O¬†ZÆiᆸúš p µéà¬w´Öv9µÿ¬?}|Μ9ÁxÙ±€yçÎÓá·…X츠ÑhôåMäOXkÉ­µäÓ\UŒú˜KyLW lw⢽ø¸vò ‡ßãeŸ @í/]ºÚ¿…À Î\¤S‘a=¸ëóc°ÊyBPá?Ïü¼Qe†£ „\LÌRîê)¨mö ŠÏÎ'Û³¾„¨2 =u‰>Sç7<ÁB ¶X¦1sjÓ¶%Ö¬Á!§Á°}òó&Q.ô† P*`s¸¥ý<[°îÀ¿ìÖÁí•ìPBxÐ  ìüÂy~‹û™$!ÇXÂø‰–㇓gÁù~ÄG}R¾½DßÃUŠñ³Ç~:rþÊ1ðÿÊ)'*ÁÜŠ Îü•S.Á˜õU§î8~®iÛ òSçknb ¡­GA|á·v}í_ÆLk‹E‡ HSqqÀÖ‚;ú°@ÄÒÃ}hÂRê{ ¾KñlÐN þ3]Ÿ‚ñðorüiIð,nà#Ÿ981>‰õ È®A}ÅÔÇLX¾‚™¤%Q¾2œ¶-ƒÔÁÁŒI{n!â F( wàU¬‹ ]®±¡¦±¡Š¸‹ •l×ÐPŽÜéú^_vñv×P_Âr·Þƪ¯+§{« ¾.Ÿí൬úÚ\Žƒu×1žðø®¯Éb{2ËÖŸìX>:;;o³îðZ »Lk!ßÙŸäOÌÐÌxæøáÜçDÈD"r_0œ›$LÙÑê»/â‡_&~~†EÔVŸ2ü Ë.2_"vO̳¾‚èÓP_Rdi<ü|r2 ò“i{lÅøÕjD“Ó×,E©G~æùH¼êƒ7Qe¨­îz«¾:CëjÒµ®: \]u*8½ofq°†8nÈëå·9Ütaîµs>â°p'—yÿ\ûÚ¹îD…¹#î õ°hkkcã¿…HÄNÇSw$&ÂÁJyNóŸmìJA‰4Ã'~ÎÙQé# ƒõ®Ïƒ>‚”Ž;¬a2Aˆ1H™‚š‹“œ>~âGÅÑVeJì úZ¸²Ï9Œ ¸É::Äa;)¸s“fÓèL8õeps“u`C²‰N}} 8ö†:ú­8ºÝtjÁ#lËs©Eæ}ú°àÓ:ÜѾIOZwìœ~._¾ÌÆ~ ÑË]­…|g’?±ý°ï0÷ù_øù FÅÏ€¾ÔùÁ¥$a0Ï‚ååHÄñ#¢˜teÄ3/XGìžÎù~)ªO_n9YÕ×085+˜m‘²ðkS¼éû«”&ER9ÅdknPñÖ.R•ø'T@Qº,:l»ŽëN}]Ù-×E0]sRhêëŠYN;-u›«-¨g™¨Òƒ5µÕ9àꪳÁ¸©©Ö:€5¾ ô?϶ºªtÆîÑÉë9vþì·Ï⓪‡fÅç·ò\$i6ì/ä;s‡iWœûü°lŸ‚‘pÒe'Á÷ÏÉ€Ä< –K°˜ì.CÊ+˜„¾lp +¨†¾9ÊsÄ×÷“É$'çü‚0uª¯–™úåT¿FØÊpZ¿åð=ð[;·|}8!XRÁLòÛ0¿hTwÛ?GOƒâv.qMÄ+ÿŠ ©@eJ8Ý–öËM§w2«¶¶\]m¸®ï5ùu:§½Ïú®ýkuÞíNK0‚Ž Œ€Ó‰U]™ÁréÕ•·»ŠTrDœÁ8Ý6ƒ'`›AûÜoKM€»MBÛà·vk±¥ïð 1{q,!fÁ2€õh•hŸE¨Ñž“•Z£;‹|ѹä[®<©æ¦Ó‹;•åYZW‘}ÓeVVdV–³ÎƒÎU”eð\zEY—+/K㸊²Tpå¥:_àgiŠÎ%ƒ+/éräç­;¥Èå¥wó‰ãxˆ„Ý UÈK,[üÂn-¶ôQf/Ž%äÁì"Ø@°m í°¥À•—$0®¢8ëN\y‰Îk^Ü))JW\˜\TÔåÈOÆuÝ/¼PdÈÄvùqÅà b¹.?¦˜åÈ…ù1Œ³Ïé,µ>ø-„ÝZð;*€  ¨€Í(P”ŸÂüHâÈ®Ÿy…7^ÜÉÏ7àrâò…\^N´¨‹Ê˹é²#ó8.+<¹I¾³\nVxnV(:T@PT°sò²Â§WŠÌÐÜÌ`âôâŽÎŠ“RR”ZR”vÓÁw®?¥7]Ia2×éLD®ËgbI¡~WPr»3l"’bFB?¨*€  ¨*`› Üœ#"SFùñ`Ê*Ê.ÌÀ¾ªìíØØsPa/êŒsÚHÑ¡¨*€  ¨*`! ô-Ð<¬yÄYÓkFóprÏ>¹÷ôËûÃ×Åwœû›wrŒsš· w!kqohŒv} 5F:³èclnÖÇè&d–Æc–Üš!Qc›‘M$§~ƒ7º˜2²jtO1^[¹5¾RÌ¡­ú¹5CmÊé)êWŠÑ)Ê X y%Eó\ æÑ#:Üéí¦yÔYçÝüB~ªé i㜚™Ô¥¨¾3º.ädÕÈ9d¼>F§h´>Ú … åŒOÔ¸¦./”qe”Êx}äTŠ<•ŒiªA]cµq%ÅÜšEÑDÍÓËŒk?V ”?¢¥‹?ïÕáÎwkÿ*€  ¨*€  6ªÀÿùj)Ú?j IEND®B`‚bitpim-1.0.7+dfsg1/help/screen-logtab.png0000644001616600161660000012236710462561003016342 0ustar amuamu‰PNG  IHDR/Ê…YãsRGB®ÎégAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<tEXtSoftwarePaint.NET v2.64‚")¤QIDATxÚì|WòÇEHBÊ?¹K¹\rÉ…ôBr B0¡×Ð{1PC'@ŒÐCh¡cª{ï½÷Þ ®²äÞeýgµ¶²µz[dËòÌçg}Ö«ÕÓÓêíîWófgD=kD³k)ͨ”Ëå¢11=ÆÆƒD#Ò(NoÑ„<Ñä|Ѭ"Ñ< ýØcA©h^‰h–D4§„Z˜Óªe(T7S% Õ]4SŠBu#©Ÿê>ùO¤%¦ÇH bÅü«X3¦P4¼ˆ,PÿJ¨õÃKEƒ­-ΨJÔs¬‡qƒhV a/«ïµþÞ ÛäÿÙMéí½ò÷Ëû’÷;!ÿö/JORô·FÑ PÝG ‡ e`ÂãÕÍÏð°†f!å£&Qìô°€©@€X¯j õ }ˆÆ( ÿÈÜ@±GVÕôÚx6UÙ›û)“}tôÎh©®D¡P( …2üÐRý—†*Ú]E3’R°Rõ_𣔢á Ôkí=hFh@‹“LôÈ’Û¢Á‘¢ ¢É™=–”DË*h™õ\ÓÐsíà3ц{=×ËAô2<*WÒ ôÊÇ×Ý×½% …B¡ L=VÝG¡ºè1OÓ:´z¬¸øÔsy}Ï%5ÔãüZ˜c¤g׿-kŒ+[4§œz„5SK[¦8a hJ¡hH’h`¶‚ÆVܧhlLŒhVîApØÂšÌ€ÉhQd¦AÔ³Ð'¥–Ô P( …Bš•SZPÑó0©¢ègSš*n`-¸Aäý„¼ã²E£³©@|e\> ØWQ¢—­(õ ž›œÙ" S2Y‹~ª} åÊeÔ6ª ˆBu/• P(Ê0°¥&¼ÚÀV+oµR—R4~{ \l`t‹Å€Á@ÿ2µ, ޤî£Ô@cJ©µ6 o®œ§ÒiQ( …B¡Òc³ÄKO•‰+îÊY¼ ^Ë·‘eMSx¼&<6)oé_q9ûFþÈ}l€‚Ãú…RôÕÇMôžµ‚ÆÞ¹ÑµKcJS0‰"ç…ä!S:ëP¨î ¥S…2xÑΪ3´ôxI¶øÞ†³MƇ§þ&g"¹­á‡Í C·6|¿Ò€u”>[U껢þƒÅõ½çV}¾,/1«^+L#g?B±;ùÙe7”l7–¬›Z¼bœxéÈ¢?-Z4ÿ{Pᜠ‚iŸQšÜ7oÜÙÃzÇOþ¼*=€ŒB1šÆÞò 0ìÙ_E0aIý?0ú‘a-4fl$255235¢ŒäƦJ‹@o‰ÞxCdl*2‚çÔüax¶B¡P(¤1Jhoióù¦£v·O8ÞÞkÞ´é|Óš¿›–k\z´qá‘Æù‡çlœ¹O6m¯lÂnÙ¨ ƒ65ô_YûöœÂ¾sBÀ%L#ŠyIh¤üðæª«G«oœ¨<»·ìð¦Ò?Ö”îZ^²siÉŽ…Ò_æK™'Ý4S²~Zñš â壊ŒåMí?üm×1}Å¥wZ|c‡·CcÔ¤¦Â1¼ejldfÖÊad´Œ©5ÆoP@fê/25£ŒŒÚÐzJPèC¡ÆP(ÐØ’£;ß>ëvg¿åímfMëÏ6­> ,Õ´äOŠ¥nœ{ qæ²I{dcMdC¶4|µ¦öƒù…ÿîAå·¤ ±1•ì\R}óï볕ö—ÿµ­ìàúÒ½«Kv-—š, +Ù¾@ºe®tãÌⵓÄ+Æ-’?ó«ÄÑX~ö/ª 1ÐØá*4€aetÂý)…Æà3SИ‘ÅÞh•QëSSx¶çÙj4†f …B¡P:pÌŒße€P‡mnï¼Ú´îLÓŠãM‹4Îxú½qÊnÙDSÙ˜ £wPÓŽàÓúv}ýç«jû,(|y¤Å@‚42®¦1éÆÀaU—WœÜYv`]éž%¿.–n'Ù0S²vJñê‰âåcÄËGSs—ƃ ç|›7íóı}¬¿|™jäËDJ4AÜX»4fª -SíóCä/¢@F?*üd 352BC¡P( Õ!46i·ì—KM;.Sµì¯&c˜UÜÛ8y—lÜvÙð- ƒ74|»¶þë5ÀOõýWÕ÷[Yß÷§šýw¬·*©6¢5î^½‘V“¬Tþ×/åÇwŠ5FRkÖÏ”¬ž,^>®hñð¢ùƒ g[8ókX_çeS0µ_îä¾Iã?¶ùö¿hì?Þ”»l@"uC&8ñ¦ŠMýè˜0Ú%f¦`™Y+–Ñ@æold Qf*4¦úªîÅçÞQîÄ’êfP»;—¶¦;÷3Äw9Öi} …B¡:GQ¨N ÝC˜×Ï ‡ÖÂCM³Á›eÚ(6b‹Ìh= XÃç«ëû®¬ÿßOõÿÔð¿Ÿ>ù©öãEâj¯­4¦ÞH+Aä~ÙkÊü ^1åÆ Q4ßP¬`ÚçÊõ“þ—;铤qíÑXËL%Ь2R¤Ç€˜€©bpzÓ°ES×FJkq’Ñ¡ýôSà{P\³…ÆžzyÈÅ3ƒê´I‰V¥MO~áËa·ÕTi ¶_³Ù¥´\Ëç=ªÛ¾…B¡P(T7÷ ÿ¥¼€¢–üÙ4oãô=Ld£‘ ÙÔ0p]×kê?]ÙðÑO ,kxiCŸå ÿTÛgaÑkc}T}cªh¥1õFZiL¼d8D‰Q”&K¤[æ)·/Z0¤hîÀÂ_>@±ñïLè“7ñã¤q}l¾yjäët ½>ŒØ7¦¤±‰TGÁ1ffÜÂa~)E"Ó&kA1j¥Åßs®"û¥È”h¥JZO|ãAÿ \E£½þɾVª4Ë&×+a¹¦¶éñ1©j/A¡P( …4™)¦æ(gÿa^ãwÈFl• ÞØðíº†Ï×ÔÿoeÃ?5¼³¬á­¥ ï.køpy퇋Š^£NcÊFà_†FàYõFÆ< 1é6c)ÜA gKÖLQâD‰=@±qïŒy«`Ü»y>Lû¡í7¯¶ÐØéh RhÀlãL©¿Q+еzÅ̦1…DtФºPÐX9Uwé!+õIºM£ü«ì¬WENå¿ôK蛚î>Ù×Fmh Üi°_Ö|ȱéÉÐæõô Q( …B°àºÿÝúz¸Ûîyœ»Ÿ º‡ˆ±ñ&²ÛomøvcÃçë>^Ûðþª†·WÈÞøIöÖò†wª}wañ+c|iœhÛüËÐ<«ÞøÆÆRÈ5÷;¸e’ºqró\ˆ+^;Y¼r¼š_­hâûE?¾]8öÂqoåÿønÊèwí¾zåÑî1HKÑp¬^¤pŒQõ,)ÇXë}”J£8ÌHå_ˆ!{£Å7¦²¶.>K»ä'ûÛ(Ÿ¢¨KeY jôúåçë`91YúäGWT7£núUšžL¦—Á‹fz6›¢½º;N*h)ÉBuŠð,‰B¡PBc_­©Ÿ¸K6}/…bð8i•¾uÄvÙà_d¶4|¾±áãõ²÷ÖÊÞZ-{}¥¬÷ Ù›+êÞ\XüÒ¨‡hLµ*¨_s#ð¬z#Ëèà³Â™_IVO”®Ÿ.…›(×M/^3‰Ê»lă²é‹'¿'žð–xÜëâq½ Æ¿™:êM»/^¢˜-ú6£Å=¾±>LcŠºâþÆ-ù,¨@±ÖX±V¯˜JD¿©©?ü™õ4®¢å”fTªb–_P.,gf—?>6Sõ)MËËÏ×—T߃X~ {â‡Õ§” ДrùÑIE-3žýmac …B¡P,¸â÷_Y?æ×†){dÓ~kœº§îŽg*ù«ì‡²ï¶É>ß*ûßfÙ{ß\×øÚZÙk«e¯­¨mAñó#ý(j¯úKMÀ³êP4Fy‹ ¦ôÿ4FòóɺiÒŸ§Â-–ūƩ9¤$Sß“Lz³xükÅã^+ûZêð×ì?{žjd@h@Eco§R¾1ŠÆz'RŒ46µ…ƨLc ¯˜b²R(Öê$ƒLc-@¦È ÁþpëeÏ²Æ ¢Y”`–‚ÏZâÆŒB•ËôSm—iË(n6=“õäÇ×^¦ºók•o‡B¡P(ÝjF ÕY‚+þGKë! Øø2@¨É{d¤v5ŽÜ)²S6ÐDöÅÙÿ¶5¾·¥ñͯ®k|yMãË+ê_š/ùǵÓüËÐ<«ÞÈÔÑÄj*nêÇ —XñÊñÀa’µ“‹×L|aKÒ ÷j¤SÞ”NxU2îå¢Ñ/§ýð’c¿P –ŠŒò) û$›¢±SÐüOÑX)5Û8¿&ßhñ„ÑN²Ð•_á!SÌQBz Ê7¶@F ˜L‰G°¬ö¯ÖeZO lf™ÚËIÚA¡:KôO …BéTTLýºêGnoo*k?!ÅŽÆ÷~izcKã+_ZÛøÂOõÿœ+}j¨Â­¥¡‘ñ»dcLe#vÊ~Ø)ûn§ìËÊFàYõF€Æ¦ÖÀBÞ˜w ç /Y¼j|ñê Plù’%ßI>¸§²dÂ+Ò±/x!}Ð?þ÷T ÀCö€ÆÀKFÑX)å|›_ 2¦²ˆQ®/Ú+¦ŒåoÉmA'¿D335ó7‚¥G–ÜõXLé³Êøv|þ=z¦’þWõ)˜ŽT.«®WS;¾±‡·gx- …B¡P(C\ñ_Ÿ[i, È÷¨í íÓØ¯ïnkz}KÓ¿74=·ºñ™¥õOÏ”<>XáÖÒÐÈh“Æ‘&²a;eƒMevʾkmžUolSëa!wØë3¾,ZøƒxÙ(å»/&Y6X²x€tá¥óþ÷ÈF?W<ô™´O;|ô8ÕȈ*Š»h ƒê”hlŒ„š¦œ_ ?ô©|c” .8•NÌ_5ßTáƒp1# ]é‘÷{¬¸-¹§ºG¹rd”»kx¤*¨Á²yD3ý¯Úz5µã{x{†×¢P(Jp‰Œ›Q¨Î5o8³î“åõß®«ÿaKû4ÖgGÓ;Ûšþ»¥é_šž]Õôä¢úǦI¤pk7¢jê̹-šIQÚ-£—ó'~É,È\([2¤xÉàâÅ% ¿–÷/™Ó§tæ;°¾ÑýrÉÈgÅFO¦}ù˜ýû´ÐhìëR*lëLehLݦ 1È7´E¡P”HòWxÂ`vØ ¦)%,MM[êT‚#­çyU÷A€e åœ#èɾOŒK¢×+Ÿ¢—{Í–(ÿU]¯¦v·Ñ´ŒB¡P( ~u£P%à˜§Õ½»*yôͺún” ØÔðÍæ†¯¶4ôß*ûxkã»[{on|e}ãskšž^Þø˜qý#“‹{ TÜ)H#€ts(gPÎw/Âdeþ”~…³¿)š7°hþÀ¢yÄó¾ÏûªxnÉì¥Óß-™Ò¦)Á1&útÑÀÇR?{Äî½T#cëZÜc@cP’¢±ÿÄ)i P ¿³¨Âá Þ¢PÌŸ*II/{)\b¦t?l+{®—SZó@xÂB¡P( %¬(OÕ„Š×fW}°¨úÓåÕŸ­¬ù|UM¿UµýV×~²¶¶Ïϵïþ\×{mÝ+«ë_XQÓ‹½Œë™U-W úÖ^+H#J[úWÏf y-gì·&}š;õ³¼éŸçMí—7­_þ´O ¦ö)šünÑ„ÞⱯˆG¾ òLÑ÷½ò¾~$áS‘åÛ¢£ h¬e¦òa£¬çò; ÇW5÷Z{Òz…6ÞWÓãë(µÐØÃ@†Buá)…B¡:@âÊ{ÌË}áÇÜW§æ¾9«àÝ9ùïÍÍ{gNþÛó ÞœWðú¼‚Wç‹_š'~anñ³³ÅOÎ(~tJqñ¢aI½Ç»+iŒg#”ƒÍ¸Y\q/fÔÑ_¿ýý«qCߌñn܈÷↿?âí„áo&{=eØ«)?¼”jôBÊÀgS¿y2å‹Gúöì#²ú®·"MFýC4Fe¸P¡1¸{™¦1:0Ÿ²·Õ™lý=Â4¡ …B¡P‚kÙEY|fÍÓ‚žäúÜPŸç‡y½8Ìãù¡/ ó~a¸Ï?‡ù>3Ìÿ©aO ‚ˆûžƒü{  ðí=Þ#.½^Ë¿‘¥çh[z¦¡25Þeè7>zƺïsVýž¿ÙÿÅ›}Ÿ·îÿ‚MÿlûýÓ¡ï3ŽŸ<åü¿'ú<îðAOç÷{ؾ#²þ®wirÜÒã5šh,OIcô#$t¥D9Éê[˜ŒÖªfZ=WÞm+úsÒ~5ªûƒ9P(ªôØÒ»ÀCr–~,x¼–o#gê[ÐHݘ9çöc󗞪cÝHy3 Øc?Ö>7¦NcPziJ!Uª’•VdLÅõ÷\RÓ"ŠÌ”ºCßG©*ø­7Ý PÝJx¯ªûwTwÒœÛtØ>ÜGI¥+ƒôÓe¢”`aj=åå¢é¥&V‹ÆVQô³Ê@15©Ódy¢Ñ¢!q=†Æ?2Œ’ht:­ã²i‰&äQÐõÅiMΰLKQM…B¡P†©áy(T7 Ñ Ã~H¶ÈH¡­ú>³å_£VÑkàªR‚ %]ž’®èÕ> ‰£hLdJ&kWô””Û«¼…êV¢ª;¨ ÕͤÊ®ŒÔrOå+q½>Ï|iEåSsÊKÒQ( …B¡Pº–hdh@¦èÍ›¢!¡P( …B!¡P( …B!!¡P( …Bu‰DºêœÎZFéÅàÃï…B¡P(V4&zØ”WS>×Ô¶m¶½Zs{†fuü߈°Ãÿ¯ðÃjz ¤1 …B¡XÓ˜à×Tr‚á@c$¯Õë0.á³K‘ÆP( …Ò;Ss®ppí´»±&«Æ5Z;Ìÿ²}¯¶ šúßö_'VÛîñÙ-Ì_ó‡jçw˜S…B¡P(ß©äæti{%Ö„ ||c$(ÉÇmCHcÌ*ÂýÀ’±-„i¥4>_«ÚhaþfÈP( …4ÆÝ7ÆFîÓ51 g? 4¦©5Â6ùÓ˜VÔæé#‰;DC¡P(Ò/$nL§4Æ’ñé3iýrùÓ˜V÷$Ò …B¡Æ„¡1}ó â²ê0ì#Ù’çí„ÝãÌI¬ö Ò …B¡Æ:9Š¿ÝбvýLlç@Ûí¦·ãv†þNÇÿ$:~‚‡©*=gòþCß¿øâëd( iÌ0i¬¸05-5JUíz`¥ÚfðB¤1no 1aôeøý÷'-Y¢aëܹ˪›:t\á3û€Þ6¦_/ç6`¤â”À/p†¥däþe¼êOíçüŽX†³úãFðÊ£îÛN{»%JKÊÒÓÓÁuT.ÎUœbiu­°°P,'$Æ;:ÙiVx¼dî¨ 9Áºz+'(R¢XFzBzZ¼ªÂÃü"Â|‹ ’éצ$‡zEFø „§éŸ~ú5|›&}°Å€bJ]3öÒ¿{ÃKðœŽB¡ ŸÆ¤v2Kq)+I°£$m²ê$‰rs|¼]T¥Áõ’¡¶¼P§¼Õ`ÄüFºyÓ Å¿† ;BcMcÿøÇëõõ Œ´¶|þù÷”›ÁKhnSY[ ñ-** ÏØxÂë¨u¸wLVr®$-¿$%_ŸSäŸ}Å3vóßÞ§¬CÀs@ñdå‚‘PFA^¼›»snnî­[·òòò|üÜÅ…Iš6 ²wò O³rõWÂ_¯XZ”Åh Üc Ô”XxLLˆ öÎʈÉÎŒ<……¢± çOÁ÷øÖ[oÅ%O$A1ZGþDy©$ Ïì(ÊiL+å´eÙúXû6†¹Mìº4ÖntDcšÞˆ^/ì›Ò”@T3f¸(KÁ|¥à…4)¦,Iilä›o®ž5 f!“Òræï²[÷‡yPdjÆ-qv¾D\^“'­Ê—§”Æg‹]ÂS»tÎ.´¤´Lðï&+ÝÜ F-##ÃÏÏ­í6%’4?à„ ¸œ@…®Z»ók҇ȰÜ[iÀaÉI0Yäï䳓€_Àd4ÁrJr °„”ÀÁf¾>®Q‘A°™P4FCÕî½ß©ñVpøø•«¿2ô#ð™<3¸-}7ðCt¡P(§1í¶÷ßWþ»éÒû˜c;m,Ç ÕWæ69tiŒ•+®m#¾©2l_Õ+¦:Syñâµ¶3•j4F{ȃú•€>©o_óË—%Ò’½—ü~ÚuÝÑ+*%³ '_’WX’yK\PR•#)O/,MΓ„¤ä:…&î8ççš(•J½½\ŒRïod„wVVfvv68ÉmÛ3'w/ïÐÄ ø[4ŠùF¦yxû”Iùº‚ \ è `~¾n¶67n\¿hmuBè ò‹ò“s²â¢"ýýýÜèm×€ÒÂBýBC|Ý Ì¦)…¥±çžûoD쪤å8¼eª÷mÌ›ß_ÆŽ7‚õ0ˉgv eÈ4«îmj…5ÐÙxiŒkÊéa{ÿ²[%)æN+æ69tiŒÕÛé’Æ2ÔbÅT5hÅÿÒKïžB ¸¡2$Ø  ð+<ÌB‚}À(à)e¦EÀw÷õ7¨‘Öð‘Ãú¹sŒa›ˆPOú+>{qˆê6!‘ãéõ†Ó¡P(”ÞÑ L;Ó ¾Q§±‹£,b~»ºÉ6þÈ~›EI^ü½Ìmrè¤þÓybU]ÔÃ–í¾œ6߆Ñs”mÑJÈÔÔ.Š©ºÓyÈ´Ó˜³³3„j3œ¹ñœ³wTpTZd|f!Y…,:6-4")ORš]$M/(NÌðŠLv I\uÌ#7¯ûìëšh š¢ÒИù­µæór3wÿX¯ ¸€à¸ °„‚²ÿ€(Ø O"Í)§ÜÊOJ ŒKöŒJÞ{%Ð+4 dÃùÐÂ6] Ûü—ÿâý^3þðœþ»Ç”½îSþ\sÔ}…Cà±R)Q..¶m"é.ߘNƒÕèiÊ—_þ¬]ǘÖ;ï4¹Ç AæÉJz`444ØÙÙåçç/ßç°`ëÙkÖ¾7í|­í¼lì|‚Ñ“• ©.”æÚåËyÕôŒ×œMg´¼|Ãõê5‡«×ís¤µfg¯ý¾ë@^Aú­ü´¬Ü´”¬Ôøô”°¤”_/øÄ$¦ƒGÍ¿½<䊊 ¯©©©­­¥«ªª`2\€“ n,€Äf‰I‰vNΰ¥p¤³‡wIqªà¹æ¡A_o§ ]š“®Î¤ñ-òn%ŠÑ.`jR)@1È! µÃ¯­(EÄé¯~ùŠ/Ôc»ö|ëGüÏì(ÊÀi¬]M:ðꥰ_¶91u³Ë}ìnq»=Çíñ·Ûcì.÷Ñ;ÝFþê2žÝê`huÒwõa»¥yQÌ=cÛæ˜MoÝûßÚ“ð£1BÀ=•7Fg|m›ØbÜ83¥_d÷îliŒNuÁš_uTƒ#ÊÒ#zæ¦K‹Ö\½áà–íG"3JcsÊçü8oÒðIEâ´ü´œ¼4…{,Í'*aç_5VJßà­ÐO˜“LN¡’¶¸ÂÔ'8ÌÀëéY6N^Š…DW PLGgˆST ‡Ü´`J²‘Ѹ¼Å œ¬X]Ÿ°._þèKêÆÛÅŸ©¡˜‡Ï˜Oû¾‡(†B¡ºiÒÐݽözL›|îÿæX>¨4Ïîÿæ;>cìDi¾Ã3smÿoŽõÓ3-žšvíÉÉ—zM<×k‹ý M×GøD]f(ê¡͟Í_ðܥәʨˆ€¨È6ŠèSèïÈ:•ªo§šíB×Qü9™JNqòäÉ¿þúëĉãŠðv¾Y'²s’–þf³êXà‚þóþðžô«ó¼ßÜfm¹àêé ƒ2H éÍ ‹ s‚É:¥1@1ð…‡ù%Ä3d»ÇX~n²´8³D’‘w+òÁFEú•éfx‡{À·9qÒ§ª(vìä`z ,^´Oå(ª»ÎT*A§wï!»rštþIð`QØäþìR¯.õ¦´Äó@QOàÍZ`ó¯ß<&ý|Ñ(9ͧõ‡¬Æ_ÒlÛ|í­^ÌDãP©Ý…M«¡)û+#Ïþª ë#?ø`­1U ÂÈ`Ⲃš ,§øÃ û5ôsÓˆ/Ö‡¼þSÀsËýž[âEÁÓF¯ÿðšrÄjyVv( ˜VwÛ6µviŒsöW]¿©¦ÊHœiŒUe$Õ…Q}úÀÌàŽŸ>¯`¬ÈÈHˆÖ/WÔ²tq¶KO ‡yIëk/^´²²º~ý:D8q‚êb¿3Âc"ç™Z¯>¸øPÀÂ}ž?,>òíÜý·XŽXe¦¶½¢sôC*2¨,îçï&H½pUü‚Úá4ŠÅÆ„BÕ#Èé ù]ýýÜý|\ÀûáÞIqArRBXlLHrb”Ÿ¯+Twu±ur´ÔZR‰'Á¼¤*Ñs”x% …êv4Ö÷å—ÕÝNt-È/,<öÙ‚ãýŸê¿øtÿ%§ûït¿'î›U!ϯ|n™ïsÛûîñ˜xÄú§[·¢À]5æ´Òy›„DÓ[c¨ÎÆXU ×$ª\Ò°a Æ+È‹/“¤)ÁÒnyzØœ4a³Å"S‹´ô8¥ó¬Å••™¡°œœÀ2_?×qŠ€4³“Pìò¸‡QæëF‹Î¶•ʬ­®Ñ²±¾nk.mÝÝìáÑÍÅF§`_¨Ñà>ÓgöUJkµ …2ô™JåÜßӀ₄Âüø‚ܸeç?ß›øíÚÈ׆½ôGÔÐ=®nz,Ì‹“ŠS(SøÆÊ¨ú’퟾aØL*N..Jbn“C'‘ÆôïM3è+ëûïOâOcÐHëu:ƒ„ÆØâ»"Ø1ÍÝÍúر¿¬­­ÁCvõêÕãÇÿý÷ßðlrB Éì¤OHèšÖÓL7 ßoor1|øòc_ÏþýÇMæ£×šed&T<¼}ZJ8,@šþ´´4˜HMMM…,ià—*/†Æ²2“ ôdLT€·—]€’¦1_WÕMÿëåédòpwssµ÷Xfz´îhŒ.^ÙVQáÞx% …™Êv&‹ Åù‰Ë/|þGÊ·›b_ý3yŒ‰ÍXkŸÃâ «VÇXëeFc€0”j2æ6¹uiLßÞTy¹UKuÁ–ÆèÄ hPû`à„ïô­'ð["!ÖÿèÑÃ@î1p’:u –/\8áÍüÖ!Q#×^Ÿû›ûë$3Œ­g‚†ýtê›9ûÆ®¿n¼ófjz|»G/$%%A2zn à™ó 8,"< %) Š`B‚±ð0o?W(@àï@ãÙÛˤ„0šÃh¯˜½E|\P)}Pë |@øB_|ñuÓªš<õSÈð<ŽB¡Æ?Qµâü—GRG²ÇfjL‚‹´¸•Ã$iÊ9J¸ª1\H`3¸6´2Y;m²xBÓg+oMu“Œª™`çÏf¦±Y³«iKÚ雓?nÃõe‡}'ìp4ZròÛÇÇm±Y`r=))ÜÀ¿@4û‰“£"}lí-oZ™{y:H‹R˜'ýµ04NÝ)IýæiÈòsã3Ó£’Bb¢üÃB½‚ÝC‚<¢#ýÀy·X&S(VLÑXéC?·Ð7†B¡Pº¡1­‚;Ë?è©—x„—ˆé2v*?ô9œˆÛkSãÅ•¤“Ý„ÆÚ–úîâM3è)K¥´Þj§”b‚2£ƒiŒþåù&¼=moš_òõ²oë¸}˜«€xRü‚æl¿1s—ÓˆµWFm²µÁò†­Sþ­Ø¢‚ TWLëÓ|Ó‚b'¥Ð1”ʼnpwKK¦¶bÝcŠHMꀫ”LV\” XÖV°žUrí£ºZ‚4†B¡P:£1ÖчÓ%:Ù‘4ư^ÏßTÓ=t Ò¶¯S|§~3<n¯Iôý°àà7|åù1?_¶Êl×IKp°åÇR˜Õ6L+-¥>´O±Y…Å)'™þÒ[˜Let$™RôÆ­Î0jKšÃt1A‰4†B¡Ærp×t]ÓT\R§4¦ƒ7Í ói•"¯XF—Àw…——öE¥Át¤Dœ¢¨ÌÞâ “j¼Ý¸ÅI¬2éÉ| ,SîLÎZ×d´8ÀZVÒ·Of”—è¨ê4¦IHc( i ¥§4ÆêY=S à-˜…„˜0H¯‚øV2>Òg)Ãó+Ž*£'åu 7l&19>Ûa@†(†B¡ÆPú%¹Š±}¶k½) …B¡PHc( …B¡P(¤1 …B¡P(¤1 …B¡P(Ò …B¡P(Ò …B¡P( i …B¡P(Ê@hŒ¼! ÅJªÙ.po P( /‹L4¶níbJX•+’©Òî …BuóË¢ÛyÁ…PíÒþ0B¡P(T·,"¢19š@Æ@cøó…B¡PÝJ5Uiì KLL8qòø¾{ ÇÄÄ ‹ 1Óî4444´.j•â{÷î°Ú^ƾÏý÷2)%&%::ÙK$Åäo _º|!44¿-¤1¤144444ƒ¤1x,®lŽÏmŽL¿œØèßèÛèÓà%s‹lp ot k° ©Ï.¾ [æäó¢1pt]‰ÅâB…ÁrqTTÉõëe;vTLŸ^fbRbaQœœ ë‹›ÁKà…øm!!¡¡¡¡¡*Šå—ÞÏ,¾Ÿœßœw/>§96ë^dƽðô»!©ÍIÍÞ±w<"ê`˸´^43ðø€ÃrsK/_._±¢|åÊr“²Ã‡+V¯®œ<¹|áÂ{{ŠÚ¦|!ÒÒšAÒxÅÅÒ ›nÝ£9,"½9$¥9$‰B1ßøfï˜;žÑõ°¥OT¦4FqXq±4+«ìï¿ËŽ-‰))))mµ©´ÌÁ¡|ÇŽ² $Š-‘ÆÐÆÐÐÐ ØD"àäFÚ+“Õ  O¹ æ{øÆ¼£)ߘC`Š4€%)..uu-³·/ö¢-+«<"¢,7—þ¯þ=y²4 @*•"¡‘Ó˜HÅO‚ óoGô°‘·£¶½Öö…ú°$­‘tRíY¶ýg»ß8|^/úp)e5À:¸ÿ¶ßñý×z¼°ÿí6HÒCû Ç/r^¢1ßø&jv2G1;™z4nÁ^€0Ϙf˜»ð¢iÌÂ+YÀ*MK+÷ð(+**ËË«<¾rݺÊùó«.¬<{¶¢¸˜ZŸPneUrëÒ!±= ©ËÚ}–ð §©¶§B’35aÿÙ^ZX5ÅÐ Õ«çþë'u‰KÏ1€n$’í ÌoÑîqļ^ׇZЄíƒW,&³Å1(F PÌMd 𯮹' @c0/Y–˜Xž‘QVRRieUuéRUbbUeeUHHÕöíU×®UV(,4´<)Iµý)Ðöò©i´nHc¬Ü$ †[;B]iHpŠÏ¥…C?I®lûϼ‡É;LîØ`ðÉ18êV¶ÛÕ¶î B÷^Ûþ´»ÌÜ%†3$Cÿ5QYùz ÷I;|úÏvü0üNÓzº ¿èð¤1æöñ’×…h nŸ‹L¿R¢-ר óŒ¢âÆÌ\„ 1+ÏήH*¿²³«ÝÝkª«kÀÊË©ÇÂÂê“'«²²àÙŠÌÌòÔTÓ…ó­Òáé•[;Ü&y¾o'Ò˜&·¢PûM#0ÜÚÑt±Ôê#!«¾à¾A~iîÂÁƹÿFc$~’C²ÝvÚ®G3ƒLÊ JZIwUÌÜcQu‚ÑLBV”–lU„åæÖ¤§×ÖÖÖœ9SõÑGµuuu5..5@iÕÕURieA9µ;¹N² ŽWà19§x#­¡&€ŸµäÐ,«˜ÔÈ@cœûÏçðäFQlƒo˜?”¦«&Û8BÎík}_ò/…[0áþáÍü þƒJ+±…Zi ­ јs¸ î Tâ,¦4û¨™KÌE†‹K.‰ÐÌ@¶ XMMmUU]AA}}=ÌN–~ôQ}b",×…‡×‰ÅðluEEUU•œßL%á8Æm4Æáj' ò^hŒO›<)•ÏŒOÿ…¢1¶×lž¾1Aö3[ߘ®iL@ßÒ‡m¸Í„¢us“A& H-F¡XjsPÊ= 1ÏäfÇ8 ÈàÑ!êŽSxƒ`4FMPVUQ(V[ ìÕPQ!kh°³³[¹reVV–¬²²>3³¾Ž2 Ȫ«9øÆÈ‰ ´¡ÒÉäÛÓ"ÛvØÎœ’\MŒâçÓ««Ï >q?¬hŒÛ×ÊÆ„š©ÔC&ç=S)à/iŒOÿ9ŒnÇQÛ« ÛcÏ!ƒ×²®Kc6A2Èg@”Dq( å.И[R³SB³]ì]ÛÈ;áÂùÆhÇ ðVCCƒL&kll4ݱ£¿~Û6mj¬¬„a=€5ƒYSÓÆÚ}Ò˜AÒó4 Ch3óKH(Jk”7yhÛhqÎé3HÞ‚¹†õ$.Üol?/Ûh}VO¦òï·í[Gñ3dV;ÃGÐÚ[æ!ǹÿÒóQ éòÄ€e$Ça† ¼Xt]³l€d‰w}šA0M (æšpcvÑwm"n;„Gc´c P x‹F1°Ñ£GîÚµëöíÛMMM4Á6dHchrÌþŠfp†ç¸ÐTiÌÒ¿Î-ê¶Gì]*Ëkì¯ØÛqTä¾cÌ]û¨Û€b¶áö!i‰âïÅ’Æ€·€º€½lmm9òÎ;ï„……Áz5Ú=&g7¦ö«i i M.ÀèÃ@CCk—Ʋ ›ÜBkÜ#j¡%-X†@1cx½Ch}pmF¡ ¶´õOU§±9¢×YÒ˜ê4%P°×ºuëFµ~ýúôôô={öܹsM+¡!!¡¡¡¡¡%K7¶ ÃöÓ ¸Ê~ûí7//¯Ë—/8p`æÌ™¬bËÆÐÆÐÐÐÐкUÔÔYúçŸpÈØgž¾çZÒ¯fÉ&—w\JÁ2­Ý×ROØç”×6ò¥±'K$Åaª3•ð|)a‹ŠŠ$ ä¿S©„—À ñÛBCCCCCC3H««)¯ÕU6ÔWɪën7ÕCÜÖÝ»MwïÞÝ»wçþý»´øÒXbR¢£“=ÐyacxIBB~[HcHchhhhhHc|iŒ²'ŽÁÌ#¡Žÿ+!!¿*4¤144444¤1ahŒ¶{÷îAð>ÌWÂÔdfff\\ÜJ .‚ƒƒ£££322`=< áü÷ïßÇï i Í€ ï±EëÌ&Þ¢ÃȨኊI° k`=<‹ß[㜒áY>ípH˜)gLíHž%•Û‡e[¤RSþI’쯂ï7VŸWÀK >\JYî¿€íw|ÿIr´²ÿäµbÉÛGžCãNcm ^…_ c[¹…U¢`níp8E’ðéÈú’„ÛkJ˜NòB}æ¤.q©°¦*º‘˜ßŽsI•´_HcHcÓïcæiüF‘Ƙ!†ÜM˜[;BúuAc<‘‘ðjAŽƒráê ’;6ÜlËI1_2µî"Âþ´»,'«ŒÄªÿ|Š#±Ý?$íð鿜}e$VðÄ­ª7ÒšAùÆD !q¤1ÂÓ+·v8×õë¢4&×àVj¿ Bc„†[;š\ƒº¨.'¨NÍÍ7öÈ:ÿýC8Ø8÷¿ÃhŒ9h'?¾ð24¦¾±GÅo´›Ó˜œkacf‡„P@œg™¯Êl}$W;V>›¶MÆÇ¸ß¡1­Ÿ‹§oƒ=kíÖöµ¾/ù—Â-˜Ü÷ÃÍoÚé‘dZiŒ-Ôr>¾ÐÆ:ß7Öó™GE‰D½zZñØSôx/¯Ý‹Æñq8­ ò^<¯âºnŸmXͺv±½fóô ²ŸÙúÆtMcúÆÆ8˶4Ö|c‹ÂÓ<-<þ¶ 8ã}ÉÚû¤‹ç OQ²Ý‘ÆH&/¸ÉÛá0sÊù*Î »ÍÿjÁöMùÄÿñ¡1n_+7j¦RS ™\¸(r>$-8ñé?‡ñÃí8R£1†À¤14ÐØê{ò%ÑEÛý&.œµêë_MÙøÛÔ¿,tó°}Œ“{ zW¤1æiæôÌóœÛáÿDÞŸ 4€tævÖ“d¸v¿±ú¼l£õY}>™ÈÇgÛ· âgþȬv‡ µ·ÌCŽsÿ¤1æ£@¢æ¤àp|¡!‰f‹þk& ñ÷9ùý½õ÷©[öÿ¸pã—Ë7Þ½o«»•è.Á8Ê»ºo MÏ O28p' é Ù&m=íÒV°žõÈ~Ldër|óî)Æ«¿Ú°{Ä–=,ãè|ãɧ¹Óàq‚4††¦‹ 0z5ÐÐÐôŽÆ¼X­g°G{‰|o†ßp÷;érÊÍÿd@ˆut¬?¡o¬-1§B&Ü i Mßi¬¹ùî½{-‚åææ;²:4ÖC$òð´Žwrr=vÃÃû‚ƒËEÿ GÎ4&È4¤1444444}§±ÆÆ…êA2Y}Mu™8?“=Þ£—‡û£"Q ¿SÏGD^ž7ž{^tö¡_z‚„ÆâÆXÑÎD ¡¡¡¡¡¡u1ƒ¢áj“›•ëé[,5=¶5È6æçêàîêëålcàãèæfíÇÖ7Æ“ÆpT!¡¡¡¡¡¡u1«­­¬®.¯¨”——–æed¥Fsñ‰ õòs±´}öÑÇ‚Ý=Ÿì! ôõòñõx¤gçÐ’ÒZ× ±¢üŒìô¸ô¤ˆ´Ä°Ô„ÐÄhÿ¸p/4¹÷,¬ƒÜ¼â‚Âì/ßðvpqutruuå–Ê’!Ñ¢Ö±8M‰4††††FnB]2ðÒƒ4ÆÆ£ýB}mÝ-ÜÍAþn7‚<-9ÐØ¢>Ž®ÿèÙËÃÆáõç_òurë)…‡‡ãèìV4Æ9;%óBµÃ§.!ó©–C M¶o­iKM7“d%YÏç·Ö—Ò%Õëàþ Ø~Ç÷Ÿü ã“õ—$Ë.IöWVY”ñ²‚4öÀÌ7ö¸H”çëèêlamÍ"2 ØÇËÛÝÝý™gžÁoº›ÐÛÊ-$ån8äpÖ#©ÎóR'TņJ/í&L'y¡>sR—¸t XSµ;¸‘ø¼«!ͳ²“Öã‹ð ÒÑ!†f 4¦j<+#Y]¹žó|¯§áþusquvvÆ1‡4Fâ< ¬¸Ì¹ž4Æõ/-Ú!¿Zȉ ó UgsñÂJ;̵³È+iuïiªGÙ–zI*#±ê?ŸâHl÷I;|ú/g_‰ÕaHRg–í[ !u±ÊHÿú¿¸Úظ{9ß´ñsvõñ÷÷õ{úé§ñ›Fc> ž^¹µÃêÒÅá2ÀvfV×4¦É­(Ô~„ÆØ^®Xµ£É5¨‹ªár‚êÔÜ|3l/öü÷á`ãÜÿ£1jäP üøâghFcè{ñÙB¾1ðŠ=óh/X€|°Ï?ÿ<~Í݇Æä\ 3;$„>W_¶¿¡ùt’­Ï¦mS„ñ1œ=<}(C;ZÉžO!«öô¹r æã9n;ÀgÌsPi¥1¶TÄáøžÑº*½.¡¡ñ§1W;AP@x¬¦1ž”Àíó ø^||xl«³hŒ­oL×4& o iŒœØÈÇÒÒ˜^øÆÐÆ´º=øŸYµÃüÛ©јP>69Y3Ûð‰ûaEclgùИP3•šbÈäÂE‘ó¿º Hc|úÏaüp;ŽÔhLÓ÷‚4†fø4ƶ)sk§ÙÛ¯‘ËäÐ…»wïâÒ7Óš‚áöoæù>í°ŠÒ-NHÎp°†õ$.H:Ã'nŒáó²Ögõød:`;®Úî+’(~æÌj§qø$™´-žß£ 24d¨›G‚\¬Ž/­è‰)0‘ƺ†ol÷Ÿf«5K¼Uš*ñŒ)pޏuÝ' t×’¹oº¹_‹,ºà–¸õОŠä^ŽËp é­o MÏ /8p ¡¡oì¯Ë;,->»4(¾ .»üf@ÆI‡8Ye5—L Ã1„4††ÆÁ¡‚WP444=¥±Î2 ± ¸¼¸ìRÿÔèÌR%ýmuõ˜«Õ+ë]7Í8œ½‚4†4††††††fÈ4Ö‰¾±¨4q\v‰…{¼’ÆNÙD[ì³»xÁNÙÆ\¼èoµÛòìõP¤1¤1444444ƒ¥±Î2 ±„[eqYÑØ•“Ïûž1»¹×° PìâÿÆÆÐÐÐÐÐÐ –Æ:Ñ7–VX›UrS…ÆÂþ¶Š‚ Ê fà!ƒOÙFÔ%Mc¿^tÁ¾Ï†DYþ;7@Ä`ÂSÆÐÐÐÐÐÆ Ù7–^T›%½éñ€Æ¬M-NÚÇZï²8isîZ°ù~{˜¯´ÚeIÓØ®Ó³5ÑX»·[ ÅU‚dÁFCCCCCCCkß:Ñ7ÖJc Jƒ©ÉSÖQÂÚ"f-a²ò‚YÀõ#Î$4¦¶¬‹Û˜…ªÓ‡4††††Öé†Ù.ÆÐ7ÖJc™Ñ€×¥ó¾—ÎúÀìäå¿=oþncñ‡íiËn4ÆGQí_æmÚ¾ ù«ºúQÊ¡N%áÉKÃ$íð¬KÈ*±-ŸNrÎJÊ6û+Éz>É ´¾Ü.¬Æ@÷_Àö;¾ÿä5Ÿ¬¿$YvI²æ‡EnCÓSßXZQMÌÃ4ñûŠÈ}?k›oìʤåU}úD÷èÁÖ7ÆsV>ÓZ£Ã°iŒm%’r7|Ê ±=ëq«3Èê+¤ž¦œ±BK» ÓI^¨ÏœÔ%Ž žc »¹‘ø¼«!ͳ²“Ö㋹†ŸpÈ@Kc½úwUßXZQµÎÞ…›(Á7Ç9qf&MìÅŸá `°ò§1VnŸ"·vtDcl}ŸB—¹]-äÄ…ù„ª3ȹø a¥æÚYäŠX¹!–åd•‘XõŸOq$¶û‡¤>ýçpJdOÜŽMÝÑúƺåFc‚ûÆHUiÌ1 M•ÆrñúÆ„ò–ño}cÌgaÂÓ+·vX]º €Æ4:¡ö› 4FîtäÐŽ&× .ª†Ë ªSsóͰ-²Îÿ6Îýï0c Fs‹äÇ—®z´îBc냸1¿è<ý¤1AÖtø1΀Â\]›ó)çÕW«Ï†ð1¼¹Ï¦mS„ñ1œ=|.¥Ü(C;¬¨šÛ~&l_ëû²ò²rg·PÇçAÅÇ8Ð[¨åp|u@|$úÆ8úÆXÐXauRn9© K“ú'¹Eæ¹E©Ë½UQyÖŸ³ÿõW>çe¶ú$‘þ„-0q¸Ú ‚‚Äcž^ùüÒ¸}^ß‹-cu±õéšÆô!±=ÆåÄa—HcHc]Õ7•.ÙyÈj÷Ë]‡oîÃIgøÄ1|^¶Ñú¬>ŸLlÇUÛ}EÅÏü‘Yí4$SƒÖ¡Åó{ÄCÆ€† 7f‘ «ãK+zò̃†¾±Žóí:fšÓžÝzØœ°¦i,%%¥©© ÇÞúÆÐÐôÜðêˆúƘɡ kM.î>xõ†µ·•½o‹Ôe­…­÷†íǀƒ’’q !¡¡qp¨à MOi¬³¬¹¹yÛ¾sÊ)HBÅÆÆâL%ÒšAÑXgùÆÀîÞ½[QQ‘Ef4–™™yûömCHchhhhhh†Cck÷î݃™Ç2¯¢Òš¡ÑX'úÆHÌÑÉiÎ|ã¡#G›8iþ‚…—/_Æ„4††††††fP4¦‡fº{Ïò+gÏ›?uúŒÙsç^¹r%;;{õêÕÿùϾýÞÒšAј>øÆ<ôË¶íÆ Íš7oüÄI^‰‰‰éééo¼ñÆSO=ÿüóÏ}?d ¤14444þ†Ù.Æ„¤±'ú¥wEߘ³‹ËÏë×Ï¿`ö¼y¿üòËÄbñ™3gž~úé… B´þáÇüñ¥K—ZXZý¾oߣF޳ÃÄÒçì” Ï Õÿ*ËÌÙ8Y¥Ðdx–sVR¶Ù_IÖóI¡õå†t d•¹·ƒû/`ûßòƒšOÖ_’,»$YsÉS:#·e Fcå7ab\\ÜÆç̙ӳgÏsçÎ÷íÛ÷ÿøG``à ‹›?Nž<`Ðàq“&ýj²ÓÏßÿÎ;8tô“ÆØVn!)wöLÏKIÉêN©/I¸½¦„é$/ÔgNê—.ž5U»›‰ÏÛ±Ò<+;i=¾H¢ŽGp´.Lce0#ìêêzþüùÏ?ÿ¼¤¤äÜ… 3gÍ9f¬ñ¢ÅÇŽ¿~ãÆýû÷q¸tucå&ÑD<œÛásàSMœí¥…CɯäªÎ çâ3„•v˜kg‘W(ÒJçšêQ¶¥^’ÊH¬úϧ8ÛýCÒŸþËÙWFbO$ÕÜÙ¾gcû)ÐÆ:Ù76vâD¨AinnL¶}ûö¾_~ýÙ7>ÿö»ƒ‡´#£”:täHýµ‡4ÆíôÊ­ÓmÚáã–Æ4¹…Úo‚Ð[êe[•¹]× .ª†Ë ªSsóͰ-²Îÿ6Îýï0c FÚÉ/]õhèÓ­WÍž=cׯ_‡ø°eË–ýüóÏfffŽŽŽ'NœX·n©©©»»;l°fÍšU«VÁ²ŸŸßäi3´êä¿ ñðàOcr®…™Bç«ÉiWÀN²õÙhÉ„ýäà9êw9rhG+Ù³ò-‘çmò/EÀ_œŸþëèdzVãp8³=¾xþNCCÌ7f˜´õ´K[Ázæ~;ÈÈÓÓsýúõ›7oÞºuë®]»&NœØ£GAƒAÑ$ÈÑÿꫯ¿à?ƒ ±Ë—/‡åùóçÃòðÑc„¥14þ4Æáj'ÈW#T<7ãÖr§ÄŸ ø^||xl«³hŒ­oL×4& o iŒB†]â•i¬3}c^¬Ö«Ò¤®¸zõê€&L˜‘ûR©ÜcC‡µ´´¬©©ñòò‚å™3g) n´;v,øÆFŒËìåR;&™ƒ0˜·DcKc$“ÜNg¬Úa~ŠÛ¯gÁiLÎ/ŠŸ…ðèç>ܰ8zôÆØVn!)wöL.ÊÉ5'Xgû.BÕÓd¨ÐÒnÂt’ê3'u‰KÏ1ÐÝÜH|ÞŽÕæYÙIëñEra¡¤±®á£ n™¼sçNmmmiii¡Âòòò²–““ÿ–””TWWÃ68tº"±r“hª¸Ì¹Á¯^‰9t’ÛÕBN\˜O¨:ƒœ‹ÏVÚa®E^¡H«{OS=ʶÔKR‰UÿùGb»HÚáÓ9ûÊH¬à‰¤š;Û·àLcl?Ò˜ð¾±Îu³¡u9#<½rk‡ít«öù¸ßtDcšÜŠBí7AhŒpÀpkG“kPUÃåÕ©¹ùfØYç¿çþw1P#‡íäǫϋ4†4¦¿¾1È%¶ïÀÞ«W¯(×À¿MMMô2¬‡a¦ÇÞÒ˜œkacf‡„Pn'ž×AXŠýç0~¸GíVºëxÃ’ÇHc]Ï7¶ÿàï´',(8Pu½ÚX¦}cÍ.âèÑCcžFamf~ Eis"Í$ºœá:Ä* ¹†õ$.H:Ã'nŒáórØŸäO¦¶ãJÞ^¹[ò»XínÓ÷¬öÉãÜiL®-ÇD»ˆÆ€e|Ž/­è‰(†4Öe|c@cÍÍÍ@ZnnnÅ*k¼¼¼”ÿ†……ÂÈ…qæìi Ósßšž^#qà@BCߨ®:üç 1KKK€-UÛ°aƒ*Á³þþþ°åå«—xÒ·ã§;uHch†qFwš^ÓXgpÕ¹ §oß¾-‘H ³+PWxDä®ßö(ÌÍÝc万ŽãçÀ³à³µ³²µ³åsÎECCCCCCCžÆžè—Þ}cŽŽŽæׯh˜Ù•«ã'O…ÂG—þ]´lùŸÇŽo713q2½T*ŒŠ0·0çÃLHcHchhhhhhÂÐØ÷@c—…¡±Î²‹—.ÚÛÛ(i 8LIc´<òçÄ©Óa!))h¬¶¶æàÁ¬€©mœ©¦õÌÁ³ ­6«!¡¡¡¡¡!éœÆ:Ë7vüÄ1Oo÷ºº:M4–’’ޱŸKNN*)-:•¿íÝÍŠÆÔ6`¸ïFëšv[3x·ÒÒ˜ÁúÆ:T__ß.¥¦¥M™9ûº¹ù¥ËW|ý|Ã#ÂýüýÀ7¶iËFV4Öö.ty{wbÒëÆÐÐÐÐÐÐÆôÅ7Fò¶Ãd{LlTUUU[‹Å£ÇOØòËv{ÇÖÖ7imfCc„…Æä\½eHcx0£¡¡¡¡!uaߨú k322ÊÊÊ”4VXXxöüˆ«¨¨2jÌŒ¹óÖ®ßpøÏ£ç/œ­ªª,.. Þ¼u£¦É‹?{!1Ô©$iVë­¯¶#HbU>¥* ;É9+)Ûì¯r–ÙnÙšÖ—RÂ'V¬ƒû/`ûßæ$ÉüKÙrÏl³O#ë u¸±%ˉÅE4•”””——WVVByJˆ$ƒø°ü‚ü„Äøà@o_o ±ÂÂGG ‹+WÿÄê°Ñ4·¨)º_®y^RŽ3•šsñ³: Æä±:Éò9r¨Ä–W„ª§ÉÐÕv¦óùŒúÀ]âë&è*Swo§£±Êª3ÜŠ³¡!éµÍ_8·ºº Ø BÇ¿šššàþJH*Y^•Û45Á¹”>>^7ÍÝÝÝV¯Y¡ºšþÓ+7‰¦³çvø\8TMfu%ãÐIV4ÆåÂÕä\|†°Òsí,ò E$¿ë´Ö¦$¯ŒÄªÿ|Š#±Ý?$íð鿜ý=O¬hŒmÙ1­Ÿ‹CíT¤1¤±®ê»rõÊÂÅÆ¬´tùâ_M¶ã2c8á²¢1¶3Œ„´ÑµhL“[Q¨ý&níhr ê¢j¸œ :5·ªÛú„÷á`ãÜ¡hŒaßòÄ8nß»Öã/Hc]¦N¥ñ¢E&»¶h­•kWáèÑC“s-lÌìà3Äv%ùŸpI:ÉÖgÓ¶)†I^çs9áFQZ˜Õ‡"¹ÊrÛÏ„ís yþÁ…ö7hæùû„縊ÆÏ?|chHc]Æ7Ž+W¯¶°¸rõêù+WÎ]¾|ÖÌìÌ¥K§/^¯€ïÅLJǖ±:‹ÆØúÆtMcúÆÆ8ÔÍCC3dߨýû÷51™8eêø‰“F?|Ô˜†0:|Ð!ßü½Ñ`x4:ô‡á#‡3zÜã&NZ¾b%Ä–áÒg#™¼ 9…ñl‡ù)Aú#úFÁiŒç{>q?¬hŒÃ gj¦RS ™œ÷L¥ $-8ñé?‡ñÃÜ+ž䱪¬i i¬«úÆÀ­ ™$¶ÈÊÊ‚"âÁÁÁžžž...PÂÒÖÖÖÍÍÍÇÇ',,,555??2_@È?úÆôÆ´¦`5ý''ŽÖ:Hÿ¤õvMÛs ' 4&Ü-rö.H:Ã'nŒyƇU´>«@¸8gQÛmï°&¿{€Õ~à6}Ïjÿ 9Îý×5ÉÙ'¡`µ=· hHc])n ìÞ½{på;wàžJ€­*…Aª x¬®®†5 mÍ wŽ=÷¡¡é¹á… MG4–ÑE}c`Áf=ÑÆÐÐø8TЇ††¦¿4Ö‰FŽbdHchhhhhhKcèƪ/ð¦SþÖúˆãi Í0i¬³ìÄÉãÛ¶mÌÚ±c‡ÚãÚµk•kÖ¬ÇM›6í;°÷ÏY=A8€ÆÐÐÐÐÐÐ ŠÆ:Ë7t·RÞ¼yÓËË ánJ333x„ezùêÕ«p[¥¹¹ùÖ­[Ã*KCãlÖ#!¡¡¡¡¡¡u–Á-“% “H$¥¥¥°@?ÒkèG0ooo °ª²°Dë•—÷LGCCCCCCC3(ëDߤ·(×fÉÉÉJ»öÇ D1¤1444´.ax/ÒX0 1ê#),ZƒAØ– JËçvNb@±v“ûáPë0㜒äÛäÙÛº„š²YV æÜIÎYIÙf%YÏçÒúr¡ŽM}8ÆYî¿€íw|ÿ™“$ó/eËao¶ã¯_èÒ7ÖⓆÆXý|e/¶·Xr£±¶Ã´í5UÓ–hº¦1†³+#¯[Grõ%¤þs%ÂÒ˜&·¢PûM#0ÜÚÑäÔEÕp¹† ârÞUÃô îÂÁƹÿBÑþå‰qܾw­Ç ·ó€Öî1/xñBߘ`¾1Ú+VQuy镽Ó`ù¡Ž8 µËXm‹û" Kcr®…™BŽ ~2ž³{$m²õÙ0ÿáü3]£€E±½´0(ž¾Lr çmž¾žî%>TÊyPñ4ÁiŒðü#Ô¤?á[ >žÑº©oŒäQ“o¬¬¬ŒB1qpø¥%—vM¥Q ìÒ¥KœiŒÃ–8¾ÙÒ˜ tÂá#T<Ÿ³9çx¯ŽŒ?ð½øøðØ2VgÑ[ߘ®iL@ßÒ¹«˜3±:N9øb‘ÆÐ7¦[ßXTTÔæÍ›×Íù6ÐêÀU…WÌÝÝÝ××Àž?žÆÚõ´»iL4F2yÁö´Å¡æ§ØÒ•ŽhLÎ/ŠŸÕYžÿ{Î3•|ö'Ÿ¸ÎTjŠ!“óž©„¤§1>ýç0~´º-uqü’Ðç±Êm| 2žÑº¯oŒÑé^ÀÆ yÕŒ¯`ÁFaÖÖÖ'NœàFcòö¢øpps 1æiw†F3·Ã*þIkXmϰ1y 1án‘³ÏpAÒ>qc„™AH¢õY}ÂýÀ9“ˆÚ~hAmÍj?p›¾gµH†çþëšÆäì“P°ÚžC㜠¹†›!øŒg4ô±óc,88¸GÀaS§Nݹs§ŸÂ"##;Fg‹ÅÑ£ç¾144=7¼z¡ÒÃñŒ¾1}c1Vª0º2Rqq1½k`ÙÒÒ¶onnÆÑƒ4††ÆÍ¡‚žo4ÏhúKcb÷ïßךýUÔÆÆÐÐÐÐÐÐ “Æ:Å7FÓXee¥#±áL%ÒšaÒX§ÐØñT(¹Žÿ ^…£i ÍÐh¬³âÆÀÑÕÔÔT]]-‘HòóósrrÒÓÓéìb©©©iiiÙÙÙ°²°°&+e2NS"¡¡¡¡¡¡&u¢`ݹs˜ `«¡¡¡NÅêëëOݾ}¶DÇÒšaÒXgùÆÐÆÐÐÐÐ Ø:ëžG¼×²KÒX'Úå+—Y…Ž._1ä‡4Æ9;%óœÛáPï’C6Tò~’|X¶E*™SGjMh¬u=Ÿ›çµ¾\¨K…>\rXî¿€íw|ÿ™“$ó/eËa<³Íb-çT‹V×{Ow`uÒÖ“ƒ}c-Æœ^_¨— éšÆØVn!)w#T¹!9z|$U:¸ž&ÃGn7aºàûªƒ9 KüÄï&ènnÎå&uÚVEÞ:ž¿I:©'¿aÆôËh´²VÔ@ÊÍÍÍË˃ˆþ…Aü¾mŽŽ‚ý‘ƺ"±ú%ÄP3Žó/*]ÐIm;­}àpÞaEclqP.\A­Ž@ŸÛrR ;AS…wˆÖڔ䕑XõŸOq$¶û‡¤>ýçÀ¬hŒmÙ1­Ÿ‹C=J>4Æàóæ0žÉ«¤kmŸCH܇ ã}cé£PÌš*I™ßŠbÀa…E…EEE 9J$Ò’)Ò˜ÑsuQràùKË0hL“»Žíþ¤Î ó–ܪ†“÷Ÿá;ªj¸\Cq9ïªáú„÷á`ãÜ¡hŒaßòÄ8nß»Öã…Ûy@k÷˜¿æÊ¿ 'ÂýÀ|Šv·£o¬£}c6 ³µ±mñŠQ$F¡˜X,s99K¥@c%HcúIcr®…™H 2ćÆ}6Þ‚áÈ}6m›b˜<åð”Ïi‘E^Z?ŸÓ=+ ·™nþ¾žî%>TÊyPñ4ÁiŒðü#Ô¤?á[óÏœEH|±|¬|oèS£1‹ÙÚÚÛÙý±oï’e‹fÌš‚…‹—ÎK¤’iI)U¯²T@Ã[N„¥1žÄù âb¬NÖ‚¼OJ`u†åã_ŠÆØ^³yúÆÙÏl}cº¦1}cHc<]ìÜf-¹O>Û >žut\#é“o @ÌÎÎÎÞ~ãæõîƒ|°tv±ššš‡ö›î2)¥j‡C±Ê2ÄWÆŸÆH&/Øž¶8·Cx#$ϵ‚\ÑuAcÂþ¸çùäS”‰Âcô'B1¢4!ó÷‹3ó5h ŠÊÏ]ê³y´4ë±1cN1']"˜3gŽņGGG ëíí#Æ@cA…4¦=6Æyu§±³ghn׳ÔIÃö±Á¡á¡á§f=56::>6F+¨³ïbh 4AAQHc!Ôeëì<Ûyöà Ѐ}Š„ŒŒŒŽŒŽŽŠÑ?ß|{å–-í¾páb?h 4AAQHc!7vî\g{{Û±cÇžùÝ,2¶É)ŠŠŠ=óì¬>úˆf‚íï‹Ù1Š4AAAc!”V¤y_ ¹hØÅK=öÄ#Æì¯<ö[šl,%9¹®®ŽFñ¥Ù1?h ‚ ‚¢ÆBK>xLó\”—ŸHIMÙ¹sç¼yóæÎ»`Á‚¤ƒëëê{z(F¡2Ðh ‚ (Rª^ôöD$…PZ¥$ƒ¥¤¦¦vuomm«¬¬üЩmŸl£¬•ÔA98ä@1š{ 4¶4&=;¥É_¥÷#—GRWvm¹ƒ•˜EÖçþ™ñ–ëUºï-ß®«©‡&G¨¹ü÷üò›;јʖ_ŸEgŸ¶Kå¢Õ~öäòÿJTx¡›v˜\Ôˆ]CcÝÝŒÉ]{rκïøgÿÅþÁŠÑè~ÐXxÒ˜®´µîk´$\S/'•u@óKòÙç„éÚÏU9 "ñƒÃ±æ‘N7ÐÂ%g >s>W½ ÝCLÓXÈcc~ Zz2™WZú‰Jèò–H(McŠsg[Ò˜(ÚõåÍ%%šiÇRÔИɥ(DcE±H¡1Ë{.óükÉ3h¾¥\va~ùMê’®¬áv?ÄíÊYÃ5Æ„˜ç‡Y٤˯‹ÆLέ"ÆÉ}ï–׋úÞD}ægþ•¾^Ôï“ÌÓŽØX°e³Ùhf×ŽŽŽÚÚÚââ⬬¬#Gޤ¥¥¥§§ggg566ž;wŽòÓ–À£0¤1»lbcó)-@ZB}|•å]Xb蘿g_f3 %ÒÔ¨Bû±${¡Ø§…fÆwµÇNÃK*T*]©¥Æ˜÷]þÌV©Ï&Ÿ«ëzQº Ÿ™>ƒ¢Æ´ÄŠ$nëA@1-Ÿ¢‘„bfÚãyŠ1<Ñó*šÆ4ÆÆ@cŠ!v¹^K¹ú©²½ô}C#‰žÃX§±0Ñ#üö¡‡|øÑßzûŹs@E‘BcœÎ ¹Û‡Ä~L‚öêû‘¦F•»’ô]Uýá^º§R´uÔ5.' =•þÆÙ•{*µ´vS)¿Dý± [ªP#¬ª:9)ÖO•í¥ï?Áé©…]l¬³³3..îùÙÏÓt¯Í­­…ÍäòºÖ Γ»ºÎ>óÌ,PQ8Ó˜y7ŠÄ/Ù£€9ûQ,åèr~û!:ИyZìâ3\0Wº55ïñ­/tÌó =“ˆÇyð؆3Šßü…NšÄ!X–Ö¼ÊI—?Ð4fŸ„BËõÎé^½.ì~~ Á©Ï¢Ÿ+q½h¹®%ê!bc ›õôŒ™O=ž’z°§§ûþé÷f7ýpÖŽ½°÷îù‰}}½´rÍïyŒâ_¾âý΄•PxÆÆ (Ì…‰1¡hª`üŸeàzAlÌ·J]¹òõ©©©±±Ñþþ>¢±ìÒ¦;æ%>úNî/ïëîîj?ÕºúýU##Cããcô2::ºòÍe¸àAc$PAFZõ×KøÒX¨D3ïßÿÀ¯‰´ZN6———Uµýø…=ÿ1{÷#Ë’ÛÚ[jj«ÞYýÖèèH_M ÛMѲ‰‰±7Vü!ãðA\ 1‚ Š Ullïöüå¿UUW665¤:xß¿¸HàEcÅZ[›«k+ŠJ V½ûEÎŨײ··‡ÂcÔY9æ¨C 1‚ Š •f?ð½{ÿý¯V­ZqæÌé7o4hŒPìäÉæªêòcÅùG²¿µj…‹ÆÔÆÇÇiÜØcÿöÇ4¦Ì{‡>ÕzüÕç–h ‚ Epl,1§jÞ‡ÉÞ¦õæoœsçfÿø:~á'ŸqúºhùöÏgßî\C ?¾îDi±7Šù„3ï‚À@cAU±1/¡õ.½|Ï×Ëv<Õrh¡ËÍ© êöÏ-ßõlÑÖÇ®¿?mõ/¿ûs§ïºâŸ§¼õÓ¹w•F›qhÌäAA ±(‰uÙl“SSèвÍ61:2hIcËŸÿÙ¡w‘ÿöŽ.ü²‡s—þuѪïæ/ûÛŒù_:4÷Ƥ9_ŒÿýöüþˇVݱò‘›÷mßès‡Þ“øã0tS‚Æ ‚-´2 ±à‰¨kttØé!ªy4!EÿÅ gÚ-iì“õ+·Î¿õðªŸì}îOÌùBêÜ/¦½|9ÿíï•rŶéÉ òßþîÑ×¾qdþM™ó¿”óÚß”í~~Î×[f«ô7'^ÈÓÅG1IÏNiòWéýHä»´œzT(¯ÄÁŠ&©dΦ(4¥ª]j¢Q‰Ó¢ëº ‡ëW¨‚¹ü÷üò›O’¬1•-¿>‹Î>mI¬.±Íbcž46<ÜïQ/[›*i½±g¯ù¹™+Ÿø‡Ìu|üø äÍOüÉŽ§?·ëÙϧ,ý§¼uw¥,¸¥.yIUüœƒ/~1ùÅ/¦¾òÕôÅ[›4É7··µ‚ÆÂŠÆD3·pÒÝH'ÔX‰ì¼¢íJf$Ã"¥3#…!'EÄ&ˆµ0tºÉ€F(©šJÖHËõh¼óAc½/ÒÏ;©~tïèhkhª=n£Ù,æÝucAÜs›ž¸þãǯß1ësYïÝ^¶÷ÅÃËðÒ_%¾ü·ÉK¿´à¿í{þ¦¤ùspÁ7“|óئ·.üñöM«…hLâj4Ò˜P˜ÄåÂ-ÒØ$‘^S¨ ÕOˆÆ$nôºò Z919ÑtR&'Áä×Öü0¤É²—I¨ü*É‘DÏg?*å·‹gF¢1Ñ´cœÌ?¢lBYGU.R4^ˆù¥±Óí Íõ'꫊¨~ÔVTÏ>Q˜nIc¤¹w­xß’¤×oKúÓ—ÿÛÑ¿-KXtxÕíŸ~î› Ëo?ðöÏßyàv-¾5㣧WÞ•°â¿Þ¹ÿ3†ßøOw-¾íÅ;AcaGc­(Рť$Þ+G BeS‰¯è¢1Ñ6[16¦å<‹ÆÆMccc 1Å»\¯%ç¹ 4†Ø˜6‰‚Ý+÷ý÷ÄU÷îZòïž¾ùÝéŸ%ÞÚüÂßÓ?ß¹ï3ÞþeöÖÙß½wíc7¹hì½ß~~ëœoÆÂ™Æ8œÛ––ý0£$Q£ïGczî¥{*E[G•q9r=†ßµ¿1dvåžJ-$­ÆTÊ/Q,Ö*ÔÈ«*DØ¢·õQÿbcÚ4÷W·lzé;ÄX.Þ2¼êþëÞ~ýÖÿÑcý{ýÉúY  7ãLáóéPhæ¹ý¨”GËôv«XÓpØyp £2n̼ÇGh´¾Ð!0σôL"çÁg*6毄΃\÷½ÐùáT9éòšÆìâ“Pm/±sæÉ ÄW!6&v/ýâ«kgüå†Y½~Öמù—ÎüÚ‡O~uÝ“±nÆŸ¯}âÏÖ>NþòÚǾäôMk½qõÃ_…sl ‚Â\hÕ T0±±k4ú?ÎþÉϾý³N_O~žü—o˜}û /ÜqË?½áÅ;ÿdîO?÷ÒŸ'ϽçÔ!ЉT`€ (|iL£DÁŽfÕ¿páBëÉ“åå'ŽfgíOLزùãÕï¼½üõ×þ°tÑòeKW¿óÖ¦ÖïÙµ=5%)';óxqaMueOw7êh ‚ ‚¢‡Æ4ÆÆ„vµõ“­o¬\&ä­ŸlAíAAP´Ñ˜F ÑÑ•èþ%ÞÆ ‚ (Üi,T±1­Nž<ÙÞÞÞæT{[{û©Síô?RÇ©ŽŽŽÓŽ—ÓäÓ 1ÐA…µL»9übcB2Ъµµ•ЋHìˆS™GŽl‹‹Ët*...++33+ëÓO?=sú h 4AAÑIc¡QHŒÂ_Û¶0ìª>uh»ã?§Îž= AE‚–œŠ • ´"£nH Q0¬Ø)G$ì̯ôôôN§222Îuv‚ÆÂ™Æ¤g§4ù«ô~$ò]r¦^”ž•‘s°¢I*ýå¸äÌþÊY¯2„åÛu5!áÐ U°Èmªƒ_~óI’5¦²•»90/þ,¸¢ë½÷œ©b£Œÿ»JcÄa^4H,55•€,+;‹"a $ê¸lrŠÎ;§…Ƙ“qCB4&š¹…“DcâHéL8ŠÙ8eИaÉç„éÚÏUoÙq©‡ ¢>ÌÃá˜P•Gîž šéH}} 2­Æb%6¶/a/ÑÓÏÊÊ*)9~üxéŽ;Îu}#8;Oê:ïXèêâÐóI…“¶L(«+hÌò¡V‘„D÷£…Æït–û”¨NB4&qÛÕ•g“Æ2Ì šNÊä$øËð#†4Y¶ó2# •_%ì!z~8ûQ)¿]<3’‰¦³<.‰|”BYGµd çÓ˜P€ß2Ãh,Lcc‰9Uó>Lö6­çÐuSÒ+uM>tøhöQÒÎ;››š››[ÂZœÊÌÊìº`McüGѤ³ ±Ñ˜É¥.Dcê_™hƒDÏl i̤z‹v£¨ç4ßR.k8¿ü&uIWÖp»Ÿ âvå¬ácBÌóìlÒå×Ec&çVãä¾wËë…ßIИåJ•?bc#ðZïAcÄa42Œ^³³³KË"뢈XWEËh¦þîî ô'cþ}c>‹KÄÆøƒrüµˆ]}%ÆIŠÄx/‰[.>¤x{âÜ:Ec6þ*-³ü¢P¢ ” @‰ýµFr癹QJàÜÇ4†—ÔcÆ! §‹Æ˜÷þ¦1] Îc$ÜU±1¢.›mrjÊaú iÙf›dÒuSR§$½¦¥¥å8”»k×®“'[h²ìì¬V§(`ÖÓÓ#GcüàGeµä6Ÿ‘ ÎÍ"*iL ÈÅ´´ïD´‘ï%G B13•øŠ.S9Ÿ¡¢1ÑØX iLcl 4¦’ëµäÑØ0 ˆ•8Q~¢|÷î]ŽˆXw7AXoO/‰þÔ×Û§c2–7·ñ¯=þø³(¦1Nç…Üí@b?Ìß()ÞÍuýà@;é}¸—î©T9Ÿ¢T'×c(ÑzùCfWî©ÔBÒÚiL¥üõÇ2lˆë—CcÒuUå)E#©Çü@caî÷ˆ-µ6UÒzcÏþ^ ´ŠOØgÐXzzF^nn~^Þî=»)V·ë{ßÝþ¥/Æ}æ:ò§7þiâ¿þà½ß?c|(½E¢ÚeGñûï 󉼜»'ç-–4ÀÙ³UÝôôüÆü§jÑ.8…Q7&:3ˆå¨aæ!0σôL"Þw“OôW$‰ó ×}/t~8UNºü¦1»TD½Rïþ³¬ŸÌëE"êæï7¢“à€ÆÂ:660Ð{ñbwOO'}s]ç;:Úšj3ccΉÄè577§¼¼¼¢¢bÏž=I¿¾gÇço(xâž’ÙÍy(öô¬gïÏ~îѽ߸åãéo‘{”þM¥EÇSf…¢L˜àŠè † ŒØ˜_;ÝÞÐ\¢¾ªˆjImEAåñì…éL£Ac4`Ÿ^iŠ×¼¼¼üü‚-÷þ&á_+yá¡c3~–~ÏÿN¹ûû‰w}/顟ÄOÿÏ]÷þh÷·ÿ~㬧&&&,Ÿ}®‘ë©4ù Žù# h ‚¤Œ‘g}‚"•ÆEÔUy<« 3>çÐΣ‡v³S·ç¦í¥±¼Ü< ŒUVVÆ}åËÅ¿ ëW?Lûåþüû ?ûç7füfîÃÌžþ›gî»gÞ#Ó7~åÏð„ƒ ‚ (¡±ÐÎ7FFÓXÐ8°Œ#Gò)2VP@£ÄŽÍºûÐÝ?8p×÷÷ÝùÏñ3þeíú‡nùÖ¯-^ÛêOÿuÕ–O®»Î{Üh 4AAA¥±[›§Ý~sñKdF2hìÜùs4ç>-мb[þüÏ‹ýîÐ÷ï¹óm¿ãîó?eüâ{K^ÿÅGûþÇkëîxnÞÚ›n2挅@cA 4¦1O¥üMW‘ñòËÝòõ#‹~—¹øù#¯½XzlyIùŠƒW>øþ–ÿ˜ñ»W¿ú—ky„f‹E5AAP”ИF Ý–­› È|zíÿû¿›®ÿìú߶鱟mßzçæ?]óÆþ×­?ÚðÙÏ®¾ãŽÚÚÚnçÔüh ‚ ‚¢ÆB3d³ÙúûûÛÛÛ«««‹‹‹) RzzzRRÒê%KÞúö·7Ýxã¶Ï\GÅhaí÷¿¿~Å JD›£££¨F 1‚ pf»…FÒ`7IG<>>44tñâEJ‚D¿²¤¾È¶¶¶ššc2ú­eCC ëëë£-‰áPŠƤg§4ù«ô~$ò]ŠÎF+·s‰69.ŸûçÌþÊY¯2„åÛu5!áÐ ÕÈmªƒ_~óI’5¦²•¾9p.þ,¸¢ë½÷?Í—À‘Dccc¡ ³A¡¢1ÑÌ-œô ºÒ Ù•óñI§½ãl£’É_ºéÌHaÈIqëD}˜‡Ã1¡*hf$þU¯q½w!Acˆ1ÚøÅ }ï=¢^¼xð(âhL(Lb>•®\¸EK^Â@ИÄ}MˆÆTnèÒA ËãÇäDÓI™œ“Ì0–áËÜ”üÌHBåWIŽ$z~8ûQ)¿]<3’‰¦³<.‰|”BYG³†‹®çœþ¥‹ªØ¡Õ¾ø=Ûwl3ü©Ooßçð'äí;ã>X÷>½ xM4frÿ¢1ÅN1Ñ»|xҘݪ õ»¶. F íÇ_h0YÃí~2ˆÛ•³†kŒ 1ϳ²I—_™œ[EŒ“ûÞ-¯“ãR§1‰G\fýí+…clŒ/⪽ûv­~oÕüWç^°ð/Züê’% _šû‡ÖnøhÝÇ›6‚ÆÂ“Æì²‰ÍZ:€T²,3ïÂZhLb蘿[.=.4ñ±±£¹Yï¯}ï@ê¹Ç6çÅ•í)9±·ðøÎ¼âmYù3ó>HÏY}8{åžý¯S`¬¶®šÞr09xž4¦%V$GQÚy‚ß!w¼Š” Tfíñ<Ås(ú­…ŠÆDcc¦1±1Иbˆ]®×’óÜ%ч +6¦xEvl¬°¸à“¸ÍéÙä_²¡¨|[Iù§…¥›r‹>8’ÿvzÎëI/ǧ>·7iÑŽ]qGs³é-sæÎ…9q:/äGb?Š¿Q’þõ»¹Óûp/ÝS)Ú:ªŒË‘ë1”¨þÆÙ•{*µ´vS)¿Dý± [ªP#¬ªÁˆÞÖTFýKӘɯ|t=½€Æ"/6–¸ï½5ïìß¼kߺ]ûÖz{Çž÷ÉÛw­§ù`?Ù¶…ÞòäÌ™rO´P@iŒ3=„ϧCþŒÒû-§0ÒÓy 4æ?U‹ÎpÁ)ŒÊ¸1ó¡ÑúB‡À<Ò3‰xœmÔGI 4‰C°,­y•“. iÌ.> …Ðö;gžL¹¯ÞÅ$ê¡÷“z*c(6öæ›o<÷ü3Ï>7‹üô³3é•þi,ЫûyÙò×è-«ß{s÷‘¦1Î3A¬Af…¢LxNƒ"º‚hÿ±y]h¦±ë#36¶lùÒYÏ<9sÖO==ƒ^É&ÿ\úÚbz MË©Iü «$ª#h 4Eb#Ïú„ë"Ri,$"´zoÍ»/Ï)>~Ͼ„½ûvÓ„/Î}aï¾Ý/ÎM Ï¿ð»éÓï{ì‰Gž|ê‰éÓï_ñæòçžÖä7•&4f3ã'ðƒÆ ‚ 4ÆU¨bcë7®[±rù¡Ã)é‡I?|8eáâù“÷Ó+ùåùsgÍzjÁÂùÏýþÙ·ß~{Þ+/®ÉјÉzÅÔFÐA‹¡ØØ†ë ðòç×–-Y²tá¢%¯ÒÂÂůÒö&•&ãÆüý‰ùÓæMÐAÆÂ%6Æy5bc ½Â÷ú {æwOWVUú¤1ŸkL~y.7e3h 4AÆ¢$6öáú^]ø2ßëÖ¯¥w͘ùøÓÏ<¥Hcv©y}@c 1‚ 4î±1![÷ášù æy{Þ+/>ñäc÷O¿—¶¡WZ¦5´ž¶§5xù•—ø4fç¥ô¹¥y_Ðh ‚ ÈD:Ûh,¶bc”ü•Wçzø¥y/<ðà}ôWwÓZod OII~cåë¨ÁáFcÒ³SšüUe?*³eú\©2,ç`E“TúËqÉ™ý•yÞ¤/Ë·ëºÃáBª‘ÛT¿üæ“$kLe+ws`^,üYpE×{ï?´¿ýÐV±1­]÷>½öHxðÁé‰ûãï½ïW4áÅ£ÿÖÀ¯Œ#iÝݺ{.ÐÏ-éŸ41ì¬gf’i^þU«Þ…‰þ씓D:ù£byì:òò«œJf$ã¥3#…!'EÄ¥&ˆú0‡cBUÑÌHü«^ïzŸ÷Ðbc4¶æƒ÷æ¾ÁÙ½÷ÿšþTp,llt||lbb¼¼¼ŒŒLy-wîþ”f!EÉå…ͬ“¸# ݪ'(¶¤1‰º®<ƒœä0–aÑtR&'Á_fN8Ä27%?3’PùU’#‰žÎ~TÊ/Á¿²â§³<.‰|”BYG³†‹Ò˜Ie6I[)šT 4©±±=ûv¿¿võU¯y—|ß¿¡?õ÷_$ËÉ;J¶7~Woo7¡q áß³g)jhÌ|´Ÿ{*%2bIô„šÆìþgÈÓr޴гÂÈíÇ_h0YÃí~2ˆÛ•³†kŒ 1ϳ²I—_™œ[EŒ“ûÞ-¯“ãR§1KÔãÄø=ÐÍ|ŠMÑdí ±Èˆ-^¼Ècp˜» ŒOLЇ‘Ø­_°ðÕ¡¡!R¸Ñ˜]6±±y@Be?Úccн{œ}ŠÆl,ïÂBgI ,*R”è·ùA)Æ2ù1ém¡&\b$óüH_! §‹Æ˜÷þ!¡1óìãæs?I—EFlŒd³Ù­:;;ëêê 222’““·lÙòÀƒ÷Ó@±¬¬#UU•‡=>㱚ššÑÑQ°QØÒ˜:‘¸­KÌT¢Þê(ÒXHÆŸiü,•ž(c…ŠÆDcc¦1±1Иh‡ Yöø+Ò˜Ð}€?ôB(ýLtbc~uéÒ¥ÞÞÞ+ßxô±‡s߯èuå›+úûûAE‘BcœÎ ÎmKe?¢=§¡¢1»Ú(~¡»°úýtO¥Êù¥:¹C~ñ,ÇÙ•{*µ´vS)¿Dý± [âúåИt]UyJ ‹Ê$:h¬eÚÍ[";6E ™‡¯%~ÎÌåÍš#ôÌ*7¤Zh 1ÿ©Zt† çMôxEGë óê\h{‰3O¦ÜW¯eÿ>¿YËI:ÑSX“ÐþÄO=þwLÓÆ`šØ‰AP˜ Ü@]ÁP»ÅÎWl?}|S¹äcŸ>¾@ƒ 7QöLAP´Ñ˜¨ˆ®Zò?h=æéŽì¥†[ >p÷©¬¥ô|ë 1‚ ù–hlÌ ±£ ¿Ì4m AAhL› [4ëœAc´h 4AA 13ÉÅÆè•£Íj2Þ¥1ŒíAAP ј¨$hìÙ™ßòG]Þ?»µÇXÊaÐAÅ::6V—õ– ”¢@c 1‚ Š•Os+¦Bcþæ sßÀç,Ž¢3@ÚýOlIИôì”&UÙOpÊ£8k«hQ-§ˆ´ófež7é+Âòí‘ò¸%”:÷ûJtÐÂãÆ Æ.K.6ÆÅ?çÉošŒ3ï©ô†-ˬBi+L’§BB4¦’Ò’È%öœòõªKç—ä²Ï ÓµŸ« sC/I‰Ž¬HK ƒ@c‰ñg¸0§1“Î_2ËXšIså3´ ( …IL¾ þ~TC4G›Æìæ¢û±¤1‰¶PWžANò˘œh:)ó?ÎÉìÄ¿¡‰&§âŸ7‰Ð¾Iß‚åþUò–‚Æ Ð76ÆyuÑu>òg¸P¡1ËVÁ_H̤+Ó¤AÅ}!È4ÆùR¤÷#ÚÝfÞwþ4fy9(ž7-4Ƭ0rûñÍÎS•ãÒ›œ_å²€«'A ±@ÅÆˆÆø£ø+Ó–©Ó˜èýÚ|ˆé¥1»lbc~LBt?ZbcþÊ#QNK“:&ô#1HHår£(Ç%÷Õ+ÒÍZ­RÕE¿P&áÆ,hì–Ð ÙyC’Í›4óQü 1]4&z×…òè¼D9U(Azü™ÆÏR‰á‰2V¤Ó˜:¹‚Æ (Vh,„±1uáfn4Æéìà4!*ûí9•+:ÙÕFñ Qˆúˆ~éžJÑà%ÿüHÐX{*ÕŸ4Ò¿§Òdo¸ýB ±ÅƦ¦¦\Óë3g¸0hŒÞ‹V3ïv‘ÂÌ5ÌåÍ Ü„Bè]þÊÉ.] f8Y×y=^ÑÑúB‡À<*ß—–õrÝñBÇË©B–Eâ|/¸CB ±ÐÄÆl6›Acü.  Aaƒ 0‚ ÈŽNMLLZ5¥Ì%Ær¹ÝøÌÄj—͆ò&-"šFíù(#ú0úqAÈ) EXlŒ¢b 3¢bg¯ˆÖtz 4ã4&&1¹Ûš?k¤Š@dSVç9 ÅA»¾¼„Ò9¦˜™yÌsg™o/†4Y¶[epâP¾Iš#ј¥èùáìG¥üv©€·hý7)§÷ˆ[‹4v[sˆcc3:%Sü‹PŒf»Æ„Rƒë¢1¹N &ÊHôÌšÆL„¢©ÙÕóšo)—5œ_~“ºÁD1þ9÷Þ'ÿsE+¹hµažfe“. iÌ_9Mžô<¨T4D ÆBcr±1#$æÖå_&4Fõ44f—M„lPï%q{åÓ˜Ðþ9M‹è!{ïʤ“W"¼§7¾(GûÑ7唇Óê늹Ê=](Ö[å×%ÎùçÄ8ù{€@cáÛ—°×è4‰õõõÑİ ±X 1‰ÖN/ h3.ó+Œ÷’£¡˜™J|E‰¶Ùб1-çY46hÓ‹³ü^@cÑÁ–Ðöa3~,I}‘ç¼ÔíÍÅO4F¯B4æzˆñ^ãÝP™ÂÆ8œ&A´§Œ?2]"Š Óc³ózpD  2îGˆÆD{UhLWO¥¿1dvåžJ-$­ÆTÊ/Q,‹Ä©·–=˜ 1ˆèŠ^ÏöÚÊ[mÅõãy•£Ùå)M/&*I:6œ?Ô|vÜÉ<a£ÞIÅrü«Ï)>y@˜Ï5 ±0¤1ón‰é'DG›zæ· B3>H ©Öµ“õœ.8…Q7fr¼¢£õ…y¤gñ8ÛpFñ›²ÐI“8ËÒšW9éòë¢1N%±<ÿ>4ã4F(ÖÞu©ñì¥êv[EÛ¹¼ÅVÖ4E.n˜Ê©²e”M.¤- *šÃ.6F}”„b4Hß{ X¯SýNQªJÐXLÅÆ (Ì…¦‚ wK-.¬,¬Ÿ¤×‚Ú)rnÂÈi¶”²É”ÒÉÃ%Ûœ\ðØçÕƒÆ\ ©_’ð‹Â`Ä^D`× 4ƒ X&… (iì`áH~Ídµ“ùµ6‡kl9N§UÙ’NØ’K'’‹Oc¢2Ð*>aŸ3é©t 4ƒ ‚ ð¤1VTOãÆ¦(×ãøÀ¤¥>ƒÆBHcjsñƒÆ °¡1»lbc~LB"†!t›ã$2—.'³)=dËÖE®iÑÒ<ÈQ”¿ãÚ.úÑBcœDà*gU¨žKÐF0GÂq°Ò_ Õœç˜4&¾úÞѦ€Æ (€4&z׎ÒñÅ8–DÓ®B ÒãÏ4~–J O”±"ÆÔÉ4fY~&–…*6†h ‚B@cœÎN"ÚSÆÿþ~äÊ)½[í4&ú¡*ãÿThŒùÝI “žJEhÓKcüžJó0•.ãÔCËL4¦SÒ€‚IcjsñƒÆ °¡1Ë>>Ñ!Ì¢£†…&§0/gÏÌ¿ú;^¡I4øGÄŸá‚S•qcÌ:Îh}¡C`žÅpõõrÝúBÇË©B–Eâ|/Š(ÆùU‡eU÷7nŒXeþÚCW}ºÞ¡àÓXïÐ%ƒÆ HAP˜ !¾hò{+qÌà14AÚfÄ$ òIc®.|ÄÆ0à ‚  Ñ½zÇÆ@ch ‚ ‚‚DcˆA 1‚  ¹Ïpá˜áâЃ ‚ óãÌ7vóЃ ‚ ySýM%h Ai~{³4&3û+h “žÍÒä¯B·NÅ<’þJÅ™zThÊM“¿ŠÎJêsÿœÙ_9ëU&ƒ°|»®¦.šL¡™{ƒ\~û~ù…RÚôÓ%fÙ5©ºÊ^A 1sñ Ý&8énDÓÅð3üÝý9eh~I~‘|N ˆc fSMŽö|”Ù­Ò­%΃b:5;R^‹ÆÜg¸(¨"çÖLåTÙȬßT‚Æ ˆ 1¹ü’ÌL,œ»s ³˜Kï_â~*Dc ƒ®¼„¢¹¤D3ó˜çÎâdÔá6|–Ç粑ž‹sµ›ÆhU’h ½å·K¼Eë¿I9½¿8ó[èçª\tþöc™™ Íh é¡1!º’£1‰<€B¢ÑKcvÓÔ{*­‚FcV¹ýØ­’IóQŒÎí¾:Ê™Ÿ+ZÉÕ#+þB§œÊ&]þ@Ó˜e6qß—?€ó÷¹æ§+Ë8³þƒÆ@chÌbܘJÏ Üx,‰ÇS&åH<æJ7-¢‡lÙZÈ5Zn÷rå︄öcIêB±%NKÉŒïŠÆ`˜”¬~~ä Y®R)Šsþ91NsžcÒ˜tøŠ?ÈsŸo,¿Öæp-ÇiÌpEI´vzQ@1ø$GcŠûæø3Ÿ¥~>ùŒ*šÆ4ÆÆb‡Æ,¿s, Ul 0Ði 1Nç§IÐÒcÈÿM§$´§2Š_ºür#ú¥{*E»ÞøçGî{ÔÒSéo ™]¹§R Ik§1•òKÔË"qê­e¦FSŒ©?™@ 14f=”Õ<2ïï-BãŸøwC‰Õ8(Mô#˜‡)4ç0*ãÆÌ{^„Fë ó ²Üª©œ[Ž3B–VmK­²%UØÊ&ã‹'ö"6Æ ‚ (04¶7g˜æ° ;Z9™Ya#©š$K©pÆŽOî+ߟƒ@cAÛ=˜Z2~¸lÒ1ËkÙDzÙøáŽ‘ûJ'KÆ Åâ GóìÅÆ ‚ (4ÖÔ1–ZШh€’Q¦e(F>P8´¿`01o ¡c„¶ŒÏ®A 1‚ ÒIc¹ÕÌãóÎÐö 14AA:i¬§pwvûšý oì¨-®jÁ–ê…›+_Ý\E¦eÃKãj×$¶tŒ‚Æ 0¥1ªš0 Ã0‰vµk|ƒÆ p¤±©© ÑÑ·XjCr3=Ü öwÃ0 Ã1k‰ö4EOOåÙ^[y«­¸~<¯r4»|”Ò¯¦—“)ó¥›H.M:6œ?Ô|vœ6n=Õîz ý•f@¦ÍŒ- »¯¡eŸÿtß’F_Ò×$4 õwÃ0 Ã1k‰öH3]ÿ]Ð2£ªßÞu©ñì¥êv[EÛTy‹­¬iª´ÉVÜ0UX?IóÓ”zô›áÃδ'êZ\o¡¤`”†‚rµ’akŒ<Þÿtß’~C;¤Îþ¡Á^†a8f-Ñi ±Ûš§Ý¼4…žÆè)„ª~}‡­âäÕ{ªôI4‘±žªUŸ¦ÔË(H;>D)it½…® ‚ªâú)²cÙ°ûšZßÿtß’~‡L;\°¹zx¨†aŽYûl¨1ºü0ï«=AÑCcyÕ£ÆS=q,W’¯ô²)ÃŽ)õŽ;žEöçÔ8ÞRéxËåxØ´2Ü;ä 4Çk­Û«ÛËÆ#ýøedø" Ã0³ön\A˜Ïö4Ee–9¢Á-ާ"$w£\‡K'é•lÔþéÕôJÝùtµÔNQܸ fÊáÚË&öz+qÌûÕØøòöµWß뢱ÑÑA†a8fíݹ7I>Û#Ð=4FÃ$é)¤´ñšªô†SÙ¨ýq‡ªDcãcC0 ÃpÌÚ£=2LqWÃäÝÆ è¡1ú­ ÕxÂåªñG«&É)e—m\i%ŽK…’| =¾äÖLQ_~nÕ”Ã5—íÆŒ/oïÜÒX¾Jcã£0 ÃpÌÚ½=2l4Fd sµG 1(zhŒ~6ìÈåªñGÜhÌaz)tÑýÞ˜ÆWҀʜ›q©ä8ÇW’ýј±±±ýåËÆ(~¢±ÉÉ1†a8fMmÍ|d<·»L-…«a2Ú£äÒ‰dçcüæäJÐ=4¶ÿر‘ÑH¾ÚI_m;pbÒðþ’ J¿jÔþ€ÑØ8 Ã0³ön¨ÅÕ$ùl@cPôÐØ¾Üú¹ ]Ôo˜síƒHj•-©Â–P6_<±¿pÐEcL¦!–i¶´*[Z¹ÓW\e#ö¢5ŽW÷ecã*·ËÆEƒay´GîÑŸíh ŠÛ›3L?Q¡ àhådf…|ÄÙIOU?¥Âñ ’p|r_Ñøþü«4F³!ÓÕBã¤6êÅ'»ú4Ý×вϺo¹¿À±Û…[k(' Ã0³öÙ9~à_5å¯=AÑCc»³SKÆ—M:&q)›H/?|bòЉ +v t2±dœª~|áhbþ€kÜ%¦ -iê¿7~á’rÅîk½û¾þé¾ebžc·Ëâj.]š„a†cÖíh Š£L‘”žˆÆoÑÏ Ó2™úÉ ‡(|EÌÔÐ1BÇg×Ò+åslY2HC)é·-dZ6쾆–}þÓ}Kc·k[p'‚aŽqm@cP”ÐXnu'Wñygz{Îh/áîœÓÝ£¸Á0 Dz%Ú#Ð%4ÖÓ?¸;»}Íþ†7vÔSêî[ªn®¤1õ†éŸ†—ÆÕRøŠ˜‰j?¹³³£ ¢™úìÕ’Wgì†aŽeK´Gšiì†ï€Æ ÐUJ†aŽ)_Cc·6O»e‹_ƒaöIcàT‚ (6eMca7¶´7áœÀ0 ñÜ,ú¥1à*ÐGál@A1.¿4¶=ní¦ooX·Òðºµo|ðþëkß_Ã0 Ã0 Ë™hŠ˜jÇ+ oþø".¿4VUSYr¼¨àXžá¼¼£9¹YGs2ÉÙG=œa8+Ûáìì47v8ëPvVŠ™3Îr:33)+ó€oI„a†a{'¸;3#ÞpÖ‘ø£Y y9û $——eø¥±ŽÓ­'[›š 74ÖÕ7Ô:]]__]W_Uï´s¡ÜË'.»Ž\z­»\W[\[SR_Sìp­Ó5…亚cž®.¨«Î‡a†aŽ×VåÕU纻¾†Öäëkrêò 77ä·5ú¥± Ýçº.tž;æ²Ï>wþŠiù\Ç·»¹ÍÍ­N·¸¹ÙáN§Ï69ÜÙèrçÙò¹³u¾}¦æŠ«a†a†ÃÖ§«®u¥Ëg; Ÿ8{ºÜpçéŠsg*ýÒXߊ׸¯«¯ïœ/wzº÷ŒÓîí9åt›‡{º[=Ü{¡ùZ7^qƒŠKŽ%Ó@9ÅÀQlÔ†aX‹»»É=] ׺ÖÝÝ]ÕŸ¯!û§17äêíuø2{]†-îí9íæSnvPWww;Ùºº/œôtW³Ó.páŠU~AZ\âþk>F a†ïZ7׸|á\5¹ûwîÜL(æE4–””ä]C`Žš›? G]½½ÈkRûÎå'¹ÚZŠŠqÛ¢:°dÉïþmdÐ.œ ì96Ë(Š›?Œ«4¦‡Æ¦MÓð;àjk)"âB1L³2*Uïâ¯& î•Óß6­áB4æ]f¹Âpö#z\*›Üp÷ù\oÒ"ø¼|¼¯/½ßî½7õjàsWþÖ˜téòoœ’èúÂU.4v³nSÿŽƒCc ’˜Õää¤dæ4&½>4¦ë‚ !ùüèPÑXì´[ZhŒÏ®oÙ'ÜøÜR´r*~Ë>/vQ8㟠Ðhì*™]þ¯I“¶ŠùœarÊÓXî~ÐdFcn5Ĥ©ð¨·ÌmL¢ÞoôÙ>ù ¿1ƒ >ËÃÙÆgÛcr –ÿôWÎàqŸ4fyr8¡÷ÆÈvõ›¿(»û»8„Ç û ¤‰¢³ÀBŒèïÔi¼¾,\8È4vèà¶C·›ÆÌ¹Šÿô#íü£  1È¥±±1s¯!B=•&wgŽ1éŽa^Ì«OK™9ý°übÆÌ7fž¡˜ ó‹Ž& O3‡'&`Y~¹ZhLqè‚h›hy}´y…åi,y«³Ý XO¥9ƒû»xL0N½®Í܃\ö 1÷"D6æÄƤ1¡›¦ùÓpiÌü*öþ+§ à·ôœ“#pœ“#]<ê=•>£2œ0­e•ý^McæUŸ±UæÃ†èõeþÈ ®'Xº§ÒhÌhŒ¦{íéV7Ɖ‡Y^ê4vá\-9#m;³± ƒ]4æ]C S­óXvõÞÆ{KŸ þvnþ¡æÅ.³Ïm8 üÒú,¤É!xlãooÌ“#z>…¾h“òGºõÒT™ñÇWŸÆäGZö½ò[U‰&Üu¾óò(± NŸ«r¸³’ÜÕYAöKc=ÝgÈGñ‹ŽÁÔXQŒsaä½A†.^¼èAcî5$"hÌäÓÃÆ,YÊ’É„hŒ³9´™Ks˜F¥éq,–Ÿ%ÚO'7G µ›è© »‚b3ÆŠ¹/[ÐXww‡ÃR2G#šü¼™ÙÁ>¿ 5òÞËÆ|c˜á3\¨2x×ÃîµÑµÆýOîkÜß履ǂÇþ½ÿäñ¹îõ·F´Ì>·ñWfó~¯Ï5õùOýÙü³ÌOŽÏså³>73_Å–¾ù –YÎgaRB“™høspš'½3\˜Ï©Áœõ£ø…h!®r£¨˜kÙŒÆ.t"‡Ã¨UõOì:[E6òÞË”‰æâÇܧUJÌà]C¢ÛtMt{8 S?Y€awZ¬Ï”áGH̵|¦Ü/?ßLŽŽ9‚;OW¼7Ʋ3Oåv䩌qQ .wÕ ÷ݦk* ÛÃQ`4Ìp ZïEtît¥óµüÊ?Ë>qÕe.û¥±3µŸ®»â‡;Ü]ëòéSÕ^®r¹ãT¥‡OŸª w´;}ÊáÓíåNŸ w´]¶ñÏ«kÚKUlä½QÜ ÅF a†µø´Óm%dc|ØéÖ²±ì\_ty¹µˆì—ÆÚN–‘[[NœSCP-3100

This phone only is known to work with the driver from URL(http://support.susteen.com/ics/support/DLSplash.asp?task=download,DataPilot).

The filesystem is not available on this phone and BitPim currently does not support downloading of photos from the phone.

SCP-4900

To transfer wallpaper and ringers to this phone, the phone must be placed in "PC Sync" mode before such transfers will work. To enter PC Sync mode, choose "Tools/Extras" in the phone's menu, followed by "PC Sync" and "PC Sync Mode".

  • The URL(http://us.sanyo.com/wireless/handsets/downloads/Scp-4900_user.pdf,Sanyo 4900 Users' Manual) contains substantially more information about operating the phone than the manual that comes in the retail packaging.

  • The URL(http://us.sanyo.com/wireless/handsets/downloads/PCS-4900_spec.pdf,Sanyo 4900 Specifications) is a two page flyer that summarizes the features of the phone.

IMAGE(sanyo4900.jpg,)

RL-4920

The RL-4920 is a bar phone that supports ReadyLink(tm), Sprint's "Walkie-Talkie" service.

  • URL(http://us.sanyo.com/wireless/handsets/downloads/RL-4920-UsersGuide.pdf,RL-4920 User's Guide)

  • URL(http://us.sanyo.com/wireless/handsets/downloads/RL-4920SpecSheetF.pdf,RL-4920 Specifications)

SCP-5300

The SCP-5300 is a flip phone with a built-in camera.

To transfer wallpaper and ringers to this phone, the phone must be placed in "PC Sync" mode before such transfers will work. To enter PC Sync mode, choose "Tools/Extras" in the phone's menu, followed by "PC Sync" and "PC Sync Mode".

There is no known method of reading pictures from the 5300's camera using the data cable. Camera pictures can only be transferred using Sprint's Vision service.

  • URL(http://us.sanyo.com/wireless/handsets/downloads/5300%20Online%20Guide_E.pdf,Sanyo 5300 User's Manual)

  • URL(http://us.sanyo.com/wireless/handsets/downloads/PCS-5300%20SINGLE.pdf,Sanyo 5300 Specifications)

SCP-5400

The SCP-5400, also known as the RL2500 is a flip phone which supports ReadyLink.

  • URL(http://us.sanyo.com/wireless/handsets/downloads/RL2500-UsersGuide-121603.pdf, SCP-5400 User's Guide)

  • URL(http://us.sanyo.com/wireless/handsets/downloads/PCS-5400_SINGLE.pdf, SCP-5400 Specifications)

SCP-5500

The SCP-5500, also known as the VM4500 is a flip phone with a built-in camera that supports ReadyLink. It is possible to take still pictures and video with this camera.

  • URL(http://us.sanyo.com/wireless/handsets/downloads/VM4500-UsersGuide-English-121703.pdf,VM4500 User's Guide)

  • URL(http://us.sanyo.com/wireless/handsets/downloads/PCS-5500_SINGLE.pdf,SCP-5500 Specifications)

IMAGE(sanyo5500.jpg,)

MM-5600

The MM-5600 is a 1.3 MegaPixel Camera phone with a removable memory card. When connected to a computer with a USB cable, the phone can be accessed with several different protocols. To use the phone with BitPim, select the "Standby" option in the USB Connection menu. IMAGE(mm5600usbmenu.png,)

SCP-7200

The SCP-7200, also known as the RL2000 is a rugged phone which supports ReadyLink.

To transfer wallpaper and ringers to this phone, the phone must be placed in "PC Sync" mode before such transfers will work. To enter PC Sync mode, choose "Tools/Extras" in the phone's menu, followed by "PC Sync" and "PC Sync Mode".

  • URL(http://us.sanyo.com/wireless/handsets/downloads/RL2000-UsersGuide-121603.pdf, SCP-7200 User's Guide)

  • URL(http://us.sanyo.com/wireless/handsets/downloads/PCS-7200_SINGLE.pdf, SCP-7200 Specifications)

SCP-7300

The SCP-7300, also known as the RL7300 is a rugged flip phone which supports ReadyLink.

  • URL(http://us.sanyo.com/wireless/handsets/downloads/SCP7300-RL7300-UsersGuide.pdf, SCP-7300 User's Guide)

  • URL(http://us.sanyo.com/wireless/handsets/downloads/RL7300-SpecSheetF.pdf, SCP-7300 Specifications)

SCP-8100

The SCP-8100 is a flip phone with a built-in camera.

  • URL(http://us.sanyo.com/wireless/handsets/downloads/8100_online_guide.pdf,Sanyo 8100 User's Manual)

  • URL(http://us.sanyo.com/wireless/handsets/downloads/scp-8100_specs.pdf,Sanyo 8100 Specifications)

IMAGE(sanyo8100.jpg,)

SCP-8100 (Bell Mobility)

Bell Mobility, which covers parts of Canada, offers the Sanyo SCP-8100. This phone, while functionally similar to the Sprint 8100, has different firmware, so it is important to the "SCP-8100 (Bell Mobility)" in the settings menu when using this phone.

It has been reported that this version of the 8100 has media uploads crippled. It is possible to transfer wallpaper and ringers to the phone, however, these media files can not be viewed or assigned to contacts. Because media transfered to the phone over the cable can not be used, BitPim will not transfer images and ringers to this phone.

PM-8200

The PM-8200 is a flip phone with a built-in camera that supports ReadyLink.

  • URL(http://us.sanyo.com/wireless/handsets/downloads/PM-8200%20Users%20Guide-040704.pdf,PM-8200 User's Guide)

  • URL(http://us.sanyo.com/wireless/handsets/downloads/PM-8200SpecSheetHRF.pdf,Sanyo PM-8200 Specifications)

MM-8300

The MM-8300 is a flip phone with a built-in still/video camera that supports ReadyLink. The filesystem is not available on this phone.

  • URL(http://us.sanyo.com/wireless/handsets/downloads/MM-8300UsersGuide.pdf,MM-8300 User's Guide)

  • URL(http://us.sanyo.com/wireless/handsets/downloads/MM-8300%20SpecSheet-R081205.pdf,Sanyo MM-8300 Specifications)

#include "pageend.h" bitpim-1.0.7+dfsg1/help/lgg4015-cables.htd0000644001616600161660000000033610547564173016130 0ustar amuamu#include "pagestart.h"

This phone only supports a USB-to-serial cable. A straight USB cable WILL NOT work even though the connector may appear to fit.

Generic (eBay) USB-to-Serial cable

#include "pageend.h" bitpim-1.0.7+dfsg1/help/phone-lgvx8600-howtos.htd0000644001616600161660000000216010577601275017537 0ustar amuamu#include "pagestart.h"

Access Ringtones from a microSD card:

Transferring files to the microSD card through the phone using BitPim is very slow, users should transfer files to the card directly from a PC.

  1. On the microSD card, create a subdir called ringers

  2. Copy your ringtone files to the ringers subdir.

  3. Insert the card back into the phone and start BitPim.

  4. Retrieve Ringtone data from the phone:

    1. Menu Data -> Get Phone Data.

    2. Check on Ringtone, and click on OK.

  5. Write Ringtone data back to the phone:

    1. Menu Data -> Send Phone Data.

    2. Check on Ringtone and Replace All, and click on OK.

  6. All of the ringtones stored on both the phone and the card are now available for assignment.

Step 3 through 5 should be repeated for all changes made to the ringers subdir.

Ringtones stored on the microSD card will not show up in the Ringers tab, since BitPim does not add or delete those files. #include "pageend.h"bitpim-1.0.7+dfsg1/help/screen-filecontentshex.png0000644001616600161660000004535510430541265020300 0ustar amuamu‰PNG  IHDR’-‚âsRGB®ÎégAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<tEXtSoftwarePaint.NET v2.61òHä¦JGIDATxÚí |Õ}ï¯!`;ý$¯ i>IÈ#{ÉRL’° ›Y8†„„ MÛ×Ò6ùðš¦Éç%/¤iÉ4¼,¼`dcãÝ–-[Ö¾X’%kßeÙ’,ÉÒ½×óÎܹî2÷Ì9ÿ3sfîï÷ù}àjô¦>°?SS®ïŽ]Ócš}0ÿì7§_3ûtm&¦íO­ÏýÚ©Å&ÏûãϾcúOïý¡±ìƲ'OþØôòŸšþôÏòÚš† íRß`XÌ8¬`Õg*6Å‚¦ýß|6!»Ð ¾ÌŒÅç>”`äŽ-ÛŸ‰mì³îdÌ>롱Åß:ÃfµÉ}á¿™fð~ÿæÍ(nÙ9†a†‹ÓŒ’–ZôµÀLm³‰Î?-àÚ¶(̼ø‘$s쎉ØeµóØŽ}æPìÆ®Ø--‹îfŽ}í¸e†ð³ž<û‘YòØ_'Ï~Ô`¶>³ÿÚ­ÖÄs¿y†5Ö­9a†µõ¢‡ÎÀ0¡­JeaÑb¢åEΞuÿÌÙœ:ûþ±Ek&c_}1õß»ÆÙŸé)kFÓ¾{Äü/›²j(ݻΦ0ßÚ»ª.¶¼Õíë+b_lŸ7»}ß …poË&ÂóØüWV&Û÷Á0 ÃpQûË#¦ïf‚±þlfói°;úL¯êM›ñØ2{zŒ™=FvcÇ¢•­±ëZͧÊì‡Ì³/-½ùC}õ±Ø%»Ífؾ¥%m¹mx§ý—ãó¶'~í¸9ób†‰=Ã0¬»•3l:‹Ês`žÃ³m‹Ó ÒÌì–öòÃi3f3X3ÿé3±ô§Ï2ŸσmÛ¨6§°¬GÊW; m]MÀ0 Ãp‘Øn7;›Ñ7vssÇWÜß;7<ê«ÿÚ~Îe)`/Ûobú¢Í±÷¼Âö»~“ Û=9±m£ÚAëþÔ+aý €m7ÿa˜ÄöñÃT¶Z?0Ln»‚±‡Æn4™=ÛÙ:üï=økú¿¹ªïÁ•½_ý\ϽWö|ù³=_ºœ¹ûnû°é[.îXù¾Ö«ß^}ËGN4Õ2r›Ì¶°ýŽ-&¯_ÿxŒõ•›/?|ÖÕ™Ø6ÁláÙ†÷½CóW/ìȾâ€a¶áâ±ÙÞ5ì.«Kœµ›G~ø·'~ý£“¿yrô©'†ø7Cÿúðп<0øO_|쾿ÿÒÀ߯ø›;û½­ïá{ø|ÏšOw¬º¤úšwnºþâÞ¡Ùtkûe9°mö§;›Ú«-H[¶nª[÷Õç{ÅsvŒ£i£µ ÛpÑ1»+˱ëMlþÓý'ÿ³±žýå¿üø†ÿýÑ¡'¾1ø/ |û~FîÁ¼wàïîøÖ}ÜÜûàŠž/_Õy祵׽ïùÿ©ùÌ8Ã63Ãöÿ,s`›‘œÝú¶†BcµÙøÌAn†mçãpæq9[Û Ã0\„f£ž9™½²Ût Ûߺƒûij?<þÓþþ7‡¾ûààã_ø_«ûÿúÎþGníûÆM½\ßûÀuf·ùšOwßýÉŽÛ>R»â¢>öfÛ«5ma›ÝÛæÁ¶9 ° Ã0 ÃBØîäæ‘ÿýÈOcÌž>¼Çœòèý߸¥÷•=_¹¦çKŸé¾ë“Ýw~œMŸxõÅ®UËÚo¹¸î†¼øÉóó`û϶™ ðËjÍÇÐY3Ÿýv Û Ì½018–d_;}:ÞÜŸøù®iFnë ·yx±?=nK ÛÕí³§gϰ?›{ãöÊdާºpÊÉÉäöºÓî›Ãž™-œýDö?¹/3g©2lÏ3x2ñƒ—&Pa8ú'YVa Øl³ÇІÿõááïÿkgÛœJ1ûÚž/]Á˜ÝuÛGìé]7°ýæÕ­Ì…ít'9Ã6›tEêí1ëÉu6$zªµÝ9’`ßùÕ†Î×¾ù»¿z¡¥¥{rñmG­å²)6¹í)ÃæüÿüËŽ=]ÏHßÒ5é$+›Á¶sÊÁÃÝìsMÛdAl³™þÛ’±‰™Ó3ÉìÊ·ÌÎáxÎR9Í€ÍÌæYzÑ3-­#kGÏYÙìõ,p y†].ˆAd¾ Ã0 kt!˜…íÞû¯aw²Í¾ñoß?ðw«mB÷Ü{UÏ=Ë»ïøØ<³oxo×uÜôº•½ø‰·™Øþx“Éè?¯^ØÚ¶±}Sï¶ÍñÕl.¾½õœ/.¹ýØÒ«÷ÚϾgÄr68_ó…V†=†À%Ëw8ÉšÍZçŸK®Ø[Ûìó/¶Ž³ÏµMÇóa;c™ùJåD&›agYû'6›ÂfX|å¯ûÌú¡¥ÿA`Ë|†aÖÞóÌžÇöÀ?¬`ϳÿ~ë®þ‡oµ9ÍîdÏ3{建®G×ÊwwÜøçõ+þ|í'ÞšÆöG›ò`›õųŽn«©ÂöÉ)³Ó¸¶~€1Û¶ ¶Y{ÑšßLÕaPsO±úá3¸/}?½äŠýÎÊ·Ì|¥²mÍð/ßÛ¹øêªŒªnO¿ Ï>8 Ã:Û­uÖÁðØoOÙŘ뱗úîSÛ¦O&­®~k†a8¶ÛÜ,y3o“Í÷|Š=(n>.þ·÷°»Ú}ÜÒûõ2n÷ÜôÞž/¼³{Åÿì^ùŽÎ/¼»áºw¯»ô-óضÜlÄÛ àl*Ëø4›ÚCéË׌ž½fìç»Xw´Ùï=v*ñ˽³,ŒyÛkÆL;°ýÔöé¹ùãì³3ºKŽ)&bïÞ^Ÿjìîm_úþÿηìœßþsé%/:ÿ)ß2ó•*{᯹¹Ë9ý@Ë,›þüŽá_=WÉ>”5Œ;çÿç_´ÿèéóúh`Úú¢³—¾ºÃdvÉþQë»5­§ø¿kAýß«>U²»/£TEjœ `¶‡ÚìLí¾óÒþoÜ4ðèíìÑñoÞÞ÷ðÍæ +_»vþ>÷íè½å=½7¾£wå½+ßÞuÃ…Ÿ¿pÝGßdBsykì“Íé7kmŸ÷ï ±=Çl?b%“<ô‹‘®¾4ªŸß?™ÛkƼýú Ûóÿ~Ï„GŸqoÛžb«¬qÒ슿¶6_ ½ó'2þÌÀvÎeæ,U¾…Û¶ðɦŸ»¢Åj»/þl¥sþ×ÜܓlGÆrìï.þ|£õÝ%WäüîÉIó»?þÙ×Ü:°ôÒÍl ù6 Ã0¬‘WÍ{ŽÜf íÖKzÿòúþ¿ºµÿ›· üÕ*ö`yßC+3˜Õ¿ê=ý7_ØwÃÛúV¾­{ÅÛ¯yÛú¿ÁÄöe]±Ë:Ll¿³Ñlm›Ø~{­ s†íUsØN1ûì{§}e†Å³f¼¶õTº_ú®îylß;ey9,Œì®ñ×Ü>\stÂbÕ¹7´±)ó3Ü5nÙžR²µÙêÁ^|Mµý¯Ùv.á±çO³Ï¬%jý™ÝÚιÌìRÙ¶0é,^ö¦Û÷x.çô|Ÿâÿ.[Á±‰Y«;}vÙ,0 ‹›ð"ÏÃû¤yKô ïgïd÷}ýìþGné{ø¦yZß¿ÜúpfrlàÖ n|kÿÊ7÷\÷æ#W¾é¥eÿ#Ñ9»¢Ó$÷‡ZMlÿéÿMa›ýmb{Èb¶‰í°S¡³–ÓìùÄF»É&ZóØw‘­ºåôüüögç Î)]CæÂ¹iØùõ ;çßX•Hw€_¶ÕùO<Ët–Êvu§y#ùùuõ3Ûkj}Ñ^Gçåûl×iÎï2ŸsçpÉóÍ:öÌ<ûì²eŠÄæ! ÃpXì€7;“w\ÿîîÕË{¿ö¹¾‡nèûÆóÌ~àÊþû?5pßü“äƒ7¾e`Å›z®=¯éӼჯMc›™µ¹ç±ÍÚÝ&¶S=ò³Ù‰2…íêî3?Ü–<ëAó¿ìËì­*Æ•ÍéçÔÎ}(ÁÈÍæ±˜·ô/~SÝ•;[3óØ‹qk³ù¸ff¾)¹fƲsÊÏÆœÌFðª~{† Ûó³%3"²W«Íþç•-ÎÊ·LF圥²mÍÌú¾þŸ,xt¦¹ÿ û ûp 5ó—ªÒ«¿ôƒ¿É(¼ó³jöy{cÒº¶`ßeÓÙ¢²W<ßw;GÒó[× ÖÂ0 ÃZûn‡mx¯2ûªÛ¯¾ ëŽõÜweï×>oºï«û¿ö™þ¯\6pßG‡VpžÜ×ýIßg_wä²?ÚðþsMl_{´En3¸ÓÆ6{æíŽa»{Üjgÿîprl2õ0×Ô™³ *KW5-~$ù«íc¬Úúæ3?Z7lÞ¾«ç±õÉ®ÁkP”²£fÛtÉç«Ù@Fw±=Ål\~e†ù»Ì)-cÖŸÙžGeêÌŽ†Yv‰°tù6ç?-hm/\æcëâ9Kåô·_<ÍæLo²±3¿Ü4dÍSsl:}§¼yÚüâʆŒÂ;?ÿö`Â^Aæ5“ ºæÖ›Lþó“5üßµ?³’°çÛÙÊæÛ,0 ;¶&ä¶øX@ñ;Í»ºÇ®xsçMbïz1rOî.1™}ÿU}÷¦ï+ËûïûøÀšKï¾hèÎw±éÓ¯<;ø¹×÷^±ôÈÇÎYÿÞ³ÒØffØþø9èÊ\'yWìúaóvz Ûé¾ñ¯Ç™—ÜÝk¡eé§J–~±mñ·Î˜~4¹äËÃK¯Úaõý.YQyÎ}'=t†µËÏùòÄÒ«÷›ó_ü»%75³)–3º‹í)ö çÞ3œj…=%Ãöw—~¢dñ­Ç²ÿÉe™ùJå4›‡Í™þ‰Oï`ßµ¦/YY—^ͬÕÉþ¼ø®þÞzŒý¢Uf¶|þïÚŸYIì/Â0LèØýIVe›åw›-´¶O½‘õ“wÞº¬û®Oô¬^Þó¥å=«/ë]ý‰ÞÕ—öÝsIÿ]¸ý݃·¾õ³¦öÀgÿ¨gù9>kÝ{™Ø^1‘np3l³‘ÈMlÿY•mgS›1ûÜGfYÛúÜošta¨N3{Îl:óÙi?Եꢞ[ÞÝsãÛ{W¼¥÷sçõ^õºžËw|ü¬š¿ˆ=ÿÎXÛ¹¶Óä ±m‘Ûz ݽfØ6ýh2ÛîävF»Ü6ÉÂáç†CJîÞãÉŠÏ¿ïðÇÏ;|ù[«>{aյ﮺ö=U×¼«úÚwÖ\saíÕ4\ýÖ†+ßÔxÅy Ë_ßø‰¥ }MÍÅ‹ö\ûçÞnbû¦S °m¾æÀ6{)Ânp[mîsœÉ„÷£I‹Öù˜}Ã0 ƒÙ¶¿ú_“£Õ%Ÿ}ßoÞÿº.þ“?,{Ãï/yãï/~à —œ÷â%ç­]öÇ.~ÝKzíË\²á¢s7¼ïì—ß»hí»b/|êíCõU_ýÉX>lwØØ¶þ›JÅlvŸJÃÛòC ËÖï […¶ßƒa*ãV ẫ=ÿxù9«§¿ú†GõŽ$³ÏùÂø‚{Û™Øf£§²0+6Û1\ÚÙ÷¥m"Üöì¢3ÍJ<÷ˆ& өŠžû…aºÀRÏ ±§ÇÓoÝ>»cÚ4û°ê”Ùn¶þk}°}ÓÉØŠæ­µofg8Û&¹;bËÇ®ªZôÙê³®6»®Éò¢•­–c7v˜t·cÀY>·3܇aÖÜ×tÀ0¥C¯ÏS¯®j5󺘗Ïùò–ôŸWÌÙšÂþËF gfƒŽ[C‘[Q"ŒÑ¹±}U•‰í¹mxç´5ƒi{~Ça˜ÖVÍ„aB/‚aj+¬±Öà¦é'ÉßRµø#-ozptɪ¶‘Á&†a†µrìsc±ËZbþ>vÞ€m†a¶a†a¶a†aضa†a8ÌØ6 ‚B£XÈ …«žxÐèñÞdrÖÓüÀ6A8ÛP`Ø6Ã:GÕí‰CM3ûj§wUOo¯œ~µbò•ò©Í‡&Kʦ7˜\WzªµÏL kïê¶!Âé؆‚Ä6cvçЙ–¾3õ‰šŽdu[¢òhòPs²¬)^Ú˜ØS—ØV9»å 9 jÕ‘6`‚ œŽm vR,•zâ۬͘ÝÔ¨9–´€}°)QÚ(­3™½£:±­bvëáSlÎíå-RØŽ9”±õC1] V‘,?ŒËáßtóDzÄ_˜œó–Gl bëÔ~”YßÕóùSªã+±\»±À¹àüœËá)°]<ØÞW?mµ³+Ž&°™ËâŒÖ¯V&-³Öö¶Ãfk{ÞqlgB97½¶Ó%«”ðòò±m•ó+ž–é^~¯Er/ÏÒ\ /¹­üß^×7Bõ|Š9Áé>C¾™ þÉÃl—‰Ž³#ŽíÕ§ÍŽñ¶TÇxcœyå½O0Zo­Hl©ˆ³ÿ2[ØþÝ«õÀ6°M†¢|ó[ÓŶ¼ºò,3ç¶’ïÂñs?F¦~ `;S­é^‰+€|fçY¦Ž”µëvWV¾î:—+HM°m÷säìÉÙã’ëJË3¶Ù3h¬]Ñ’nj3f[fÌÞœ"7³…íç^©+€í¥Àvqc›¶3S~›S•G >Èw×Ûc;g¶×nm—¦¶§E¹”Glg»àþÊÀQ ÛìE/»oÜò“Ü›Xƒ»|Ø&CHT[Û´Ø–Üàb[f›ÛzÔO^LÊtqÛbØÖ†ÙAbûå²)öܸÍiöyOCb»ƒÜ%³%©Àž.©¶)±]Äü·nýÁ6á#i¡Àv”ê§Çá“Z`[þ‘´|ý$ÓÝ‚€§Z*-®éö£Ë Ilo80Å^ôb¯h›ÌnLìmH2lo­O¼Te’›ýwCùìÆ²IYlxLtáQ}‘ÌÈu»WøE)—ÃŒª<^7NÎå/€)^¯¼·±½¾Vð!p™·¿È_S‡½ŒÍrî—™9ï1ùíŒÍrOòÞö‹{§Øë^ŒÜ{ëL`3ïnˆ3lo®Kl¬I¬«Œ¯=4»¡l‚ÛAa†[ÑuÇÄbQ¬'ž±ýžIöŠ#÷îÚøŽš3ë!gÌÞTgMíu‡ã/œÙP lClÛØ~~×Äæò™-•qsX•ÊÙW+g¶T™¡½T__>ؽ¶lz}é¸!ùHA° l£žÈcûh÷éÍûÇ^98ηÌ>³›ÙÌ/•Ú°bý¾ñæî)6çÚ]À6A8ÛP`ØÞ[ßÏ9óÚ}½¹ƒ;í(öQ5AúŸ¯ 7l›x~W瓚¿÷Û¦ï>W÷ø3õß~ºö±§ë˜ÙgËßy®ñÉõm#ãÓÀ6° lCÎW8NƒÄv29ëiþØ^²¬Ø¶mÂù Ç©"l³ÿö&Xä6‹ïÜW;½«Ú4¥üÕŠIf6î鯓ëJOµöͰ9ûû»m`؆ (Ÿ¯Ä†“ÏD ûqêÏËi¶³;‡Î°Èm+¾“Ù ;šÎÞfïs³ÇË·¤FIÛ_Ó*…m=‡Oq‰|Ø yÇR®!„¹¿ÞÆŽÛ>#8GÒmøÕ˧-'rÓ½®—§"ñ,Ø.l§Ç$o2‡%ßߘd6J«3`ÙZ“pŽI^ø½mlk8XiÁ¸'‰=Q`Ä;¯GHhsE IÖ+ÏtÞC.ðÁ>U/Ÿ¶œÈM×aI63´av(±íÛ80Î1É­46¸©éÔXiæ§l ´ª„‡1ÉÃ…mç ž«W¯ BaÎýOF» QŠmÿq l#7]`QJ¯K±M”'­¶Uçç\~öt]–ÜÉÜû’Ìl”SƼµ:á î¶i®^…;“C˜û+±à©0ÀvàØFnºäµˆÌeEk¯ðÀéryÒ^O †Ÿäæäˆ×üïœË7òxlë‚m—Îd1°…-÷W¼³ØÛ†Ç<ø‚Û ¹é>`[º‡Väfœ—`JM±ÍSL ÿ›6˜Øö Û<ÉòØÖ;÷W¶³ØöÛ2äÈMÛàTµ2ØözóË+¶½×a¶כ2À¶¾Øæ|äŠ ÛºæþÊ>’¦¶‹á‘4B"7=@l>’&ðÌ wžtã:_ðh¨ó¿£€mž{`N—|çÇõþZÞÈUOp gî/ï i2Û/€Þ&yûË@nº—{ä’ÏÇQ¯ éyÒŽhÿ±íCþwÁãKlùíb6Áp+šó•ï}…ï8uǶŠ_¶m`‚ § ®ƒ¤ûÕ|ÂöâeMÀ6° lCÎW8Nµnm_lÛÀ6á|…ãÔl n lCA° AA° AAÀ6° AIùr±õ¢]¾ßØÖv¸•ì­Løø¾üÈ$¹¿†~Ãtè–­Uþ4O!‹-—Z渓nE¦<º¿Ø¶5Ü”sä9ù­Ü'z„RçÜ_# A@£š?-°ý®\jù¡Öhëgs»…fk²ü¢Æ¶À¡EÎl’S¶H”b;Œ¸Õ<Z€ $'èÀs©©®™Tl+É…rü†Ûªs²ó}Ýe9{¿€í°D‰¸u&SN^;ý€mß°M›?Í_æèåRótÞ*]/ùòhuüúߨPGnÎó¿§œl¯ËQ‡`ÛÃfUÔÚöÔAçéX¶}X¯`ó§%÷…X9å¸TyÛ2…!Ia’o€êsüFÛüçX±œl—æVξ5µm® ª¶Iº­€máõhm“tÌ ´ÞÁ¶Ò\êÀ±M[žÀ_Éz%l{ªÛœ_Ww¼ÛŽgrljIÓ ÛQz$M‡Ö^PØÖ-—šjû“8>o=±­4Û"'Ûë×Ū‡ÌͲ¢~Ì¥ç“ü… ™ÛZ„oÅà0ÖË ÍŸöÚ™á\jªíïgy4<~=Õ}™þc[uNv¾à²g˜Â„m‚ (DÂ{_º-؆ ‚ Ð؆ ‚ `؆ ‚ `‚ ‚€m`‚ ‚€m`‚ ‚H±ýrÙTiCÂ$wc¼´1aº!±'å­u‰U‰’ŠÙ’ƒÀ6A¤¢úrš^Ø.¶¼í¨æIó,‡$_964ÉŸj?"7³>æšû¨Ž>ò¡aj¯4{fÎë ±­(À—Û—·ÆÎ6¬Øvå¶Iª)U Õkg/Ér ò§í °íO§½×.YEÑG¾‘›³ÛÀSN¶äö´_€í0µ¶ ï÷€Ã‚máí&[ùílhœ? l“_VR]Yú™¿NUÏuh˜ò÷öóçdÛÀ¶BlGµµ-¶Ýä{;xŽçðæOÛ_V*Å6öBÑÚ&Á¶¶ùßÀvdI“aIÄ:!}öŸ9ͪ;0ñHZ°ÇÎØ¦ V4Ýl’ÿmÝl ¶ ¼&ºð¨¾`ãR¡ƒz+FÃüiŸ÷#rÓy¾BX?Åv=ùÉÊls¾8*“­¶ ¢eóaû•ò©ƒM‰CMI6PÚþ†$óÞºäîº8óÖêÄæŠÄ–ŠøÖòS؆ ‚ŠS*z›ŠPÀ6Aä³Ã> ° AA° AAÀ6° AAQÃ6À ‚ Hkl/o‹]lCA° AEIxžôjÒvŠúŒ1`[slw†°¿’Ë”Dxä±-S€m½°-ù| T`[Ñ#iÀv€Ø.ò\êÈ¿õÊkÝãÜ\áÍÉ&ÜnbØ=u&ÔØ6ô~LQ„-ɽ:ƒã])ÉEÔ/êð]þí÷V%;W‹ö0ÚJeKáãW¬^å<Þ9¢‚?­ÉtU“ßn2­í¬?aJlCAE( ±B%úÖ6¢D ‚ Èl‹¶¶Y”È3À6Aùí—˦JŒÙ9ZÛu‰U‰’ŠÙ’ƒÀ6Aé„휭m`‚ ‚ÐÚ† ‚ ­m‚ *l—6&L7$ö¤ŒÖ6AdJõK\xILGlë6ÜŠ××ç…ë¢&¹ÔùÊ#vÌP !¿œPävSmøÝ!9tr»9—#yÜQI.“M5ì‰&Ø0‡[Slëœæ~¶•¿~Ô!—:_y ÑQŸ<UÝrÂ’Û–ÁMU¬/r»uËíöz(ÞGT¥šl‚†À¶Zlk•KmÐnR;ÈÏA¡È펶© ‹Ün¶!¶]6iô°­:‡ØæÅ6I.¯jLvBRaÛë˜ÃJ—C²}4ÄX°T.5r»Åª–לl*l#‡Û+¶_)Ÿ:Ø”8Ô”d¥íoH2ï­K3o­Nl®Hl©ˆo-?AlÓž¶\ŽMr© Þ;”¹*—lmK¦â„(·»¨°M[7 äv«l³ \Û[LòYØn¶I:Ö”v+v’ë€íHævÛŠ°MÕi,_ž°`»`à¦$¶‘à ¶/!¶Uç"«>é†mE§WªGÒ€mŸ×W¦2Èí½ÌõÛT°!‡[_lz¿Æ3]ø`Ð$—:ß:mÔå+{]Nˆr»©Ž[Ý^£ÚÈí–\Õ[…œÌv>oÅsŠË—?]°TšLWšÃ­/¶!‚  C¬è&`‚ ‚€m`‚ ‚€m‚ ¶m‚ ¶m‚ "ÅöæC“æÈ¦Mæà¦û“Ì{’{êÌ[k›*ã›*â[Ê'€m‚ ¶!‚ ÐªØ^ ¶<ôØ^|I˜†[ÉøWÎùö±|Ê‚ÜnõËQº}h+•A—»ì2V†Ly¼n7—ùƒªç:ç‘Ë—G`á:äp» ól{Áv¶õ¬”*O×}çû¯#G"·[ÝrüÙ>T‡½?Ù©„—$ƒ­úYÏuË#÷a0f±°cÿs¸3°]T̶ËÛözZDn·?ËQ½}HòI ¿r©…‰"¼ÝÈ÷iXò×uö§‚ÿ9Üù°säÔŒ’È> lí@ò¶i±Ün­r»ýÁ¶ê1ÉÅZ“ò½/^;]ÕíGÝ¢e‚ŶV9ÜÎ…óœc3ï©'LE²°MÖÚö-o›ðžŸÜnÒå¨Þ>*ZÛ*%ƒÊ·&ìNKþº|ÀZ°­m­°íU’ñÁksØ. lûЫ‰ÜnuËQ±}ŠÛT{Á{ÐÁÐ/È5ØòÈׇ r¸=ïØVqÌÛÀ6å¹Õ@n·_Û‡ê‘4ªzëõXÛAÕó°ä‘øHZP9ÜJ±-¶›hŸœçÁöËeS¥ “ÜñÒÆ„é†Äž”·Ö%6V%J*fKJcÛÐò0ÿó¶y.Hy–ƒÜnÚå¨Þ>>T*’·æ¨ò¤Éolûþm(Î#—9Xtx,¨nOËÏþœ¯_]x}£m‚ (Â+A ؆ ‚ Ð؆ ‚ `؆ ‚ ý±½dY° AAc»؆ ‚ `‚ ‚ `‚ **õíïZØ~¥|ê`SâPS’ ”¶¿!ɼ·.¹».μµ:±¹"±¥"¾µü¶µn…'ßW~4+u‘’ùÁª‡ 9ÖüÓÅjá$Ùœ‡€×RÒ9îTõS渓ÜÎJ‡[!Ù¶>0Œ*ÜÏ-blë6¸©êÁ©–/9Ð çoF’xZ UÞ¹ûr‚Ê•ÏYç_¾žùëòûÑÐ,Ç]æøÕ$ÿ[ŠülÈR傇‘ÙÅŽmª '¶}‹ä\-#%/Gä™!³}TI®sþ:a” ɵáñ"¼©µÊÿV‡m¯A®Cò,G ãiÌó|]n{¹äCmÞj`Œ„$¶ÅºûÔå4Ë—G Ûîgÿ·O€ØÖ$*7] Ûêê'³ ó¿µz –§à M¸—Ñkà¦×fƒ{¨?̶£€mƒ"g)¨|ežÃO²¿W¸µ-|¦¦ÊY÷º|ÂŽ’|qªVÉÖ¶ŠúIÕêÖ¶ lsÖsª\pΟv_¾ûÛª°­h»û|o[lS¦å˶ù{k•vTR<ÂNruض·ÐüüØ>>6ñäºæï>W÷øÓõ=]—ío?ÛðÄs O®oŸ–¶Q|/€¹wBò·¹u{̽ST¾<ò¿å–H.8ò¿…땟ùߺaÛ@>·wlOŒœbžOš¤“Üëv$ÔÊ× Û†f/tñ¼’!Ù$RLþ–”ÿ¹¿>ämË?øCž·­I½Rš¿Ž\yO§ùz®ŽÙ^÷o¾¢Fl5ÝëCÁŸöó2÷3Ý®0¸iáÈ#¨r©©r  ‰aÀ93þ<-‡pdS¹æ’Ùª“šhë•áqðNÉíF²R´ƒ›RíGÝrîý¡ §ú îW¬Â´@"ØÚÖÛîØ0D>HŽ%.sáFžû˹ͽ.G¾`2׆ô€Ïü¡´×éA妓oÂM'ƒmªý¨tÑž¯ ŽÀÊÓÊ?ÜÓèåùº éüo÷u_¾@y€m±M’íµ“_¦ÿJlû?–8!¶©ÆlÛ$å4ˆBÊIÊ#<Œ¿¢ãÎ+nÕí/òÖ¶|Ð5O®p/ ×â¹·žÝ{Srî/O= .§8`;­m™{ÉJó­Z<’íLµ¿Tœ¬8¢àÍ2¯=ÛüðÙ|yÍÿ.øœ _¼–Gl¯a¸‚ (0ùü†Õ3+ ؆ ‚"~e ß!¡O‚8° AA¡° AAÀ6° AAÀ6AÛÀ6AÛÀ6AP¤®¼ê°¯†[‰?’½ËiG‘iAE.²Ìv+æå¨ÉGì\#9Öa=Gýôg9ÕØ.RlÛ঴ƒ5ê“‹L•g\lË¡= ø“M•oígn:ê§Ïô³íHIÎ~”ÿ®o¹È8-Žmr …Ûîòg@ÔÏ@°í>þ¨º ZÚŽì®#Ãuqª^+`Û?lû_käY¸:ÊtŽIŽ"ŽÓ¢ ¶i$W—Mr9håd£~‚mù˜m­Ç9ÉíD¸|Ò °ñÖ¶dRa9Ir©ýÄ[”°MØ*r‡œär±MÒ€úék›³¾i…·|Ñ&.B×Ô¶}Â6g0­ØV‘±8Þ€mM°M[ÏQ?ýǶÒKº[Ûî[Lóõ¶µÀvP9Ù~æ"S©‰2"wÒlSå[û™›Žú©ô4Ź[]îà(š^°W?ãƒXuU½^ÚaÛ(²ÀÜO¬þçdû™‹,óB‹L(rñ¼¨ãO´Ÿõõ3ØzÅnÍsÏÂlç+ªË½mOùßÅ‹m‚ (Â{_A ؆ ‚ Ð؆ ‚ `؆ ‚ `‚ ‚€m`‚ ‚€m`‚ ‚€m‚ (ŒŠêËcÑĶVí¸ü“êȯc+ÍíF¾2ç9%¨òø¿¾2É.M¸>äû]áí£â¸3Dó×UŒàQlØÎWÇ|(¼üIƒ›·m(¬‘$ªÁ(î|e÷£Wx ’ã.³¾’ƒïJžã¨Æ‹–ϧçYÕqçuûä+U(°­I!ÌD<Ø.Ð¨Ò Û„Ç?ò•IÎø‘Á6t©âRÜ—CËH™èÀ·×sUÛ4ß@¡Fs¬vyú“8—#³5€íÀ°M;ì³|ç* ¢Œ0ç+ó”ÇÏèˆÀ±­á˜Û2å‘éPw܉Uu?±ákžžBOÝ6œÁäÀv(±MÕ’“¹êG¾²¢~Ñh`›¤xT÷MdZÛ2÷’ –_ò¸óڲϗ'-v\¬µíRñB—cMŽmžýl¶åvÈW¶éέê°-_Ö¶>Ø&?p¨PÞkÕØ–©À¶^¤Q^©r» ä+ÛDû1,ئʹ§ZŽ>Øv¿ƒÆƒm=s¬År»°Ís. Ó#i†Þ/€qÎ/ß¹d÷¢Ž|e¡"ɬšÎõЧÓU¦<Å;*Þ¶’YÕqG[$á Ń1—Jb„$ÇZ,·›óÅ]Oó‡ì0‚ ¨8…!V¨lCA° lCA¦Øn‹lCA° AA° AAÀ6° AAÀ6A T¿ÄÔKbáz9Íolk5ÜŠ×n™:A¯Ty½ë%?‚„ürTäv˧¤¨–Yrljä¦ûV ‡]òZùÝÚÓI†ÔO†[¶C<¸)Õ@›ù*„Š ‰qIF}òTTuË!Ü>O(òù„ׂîSHaEnº|y4ÌGØ•†÷U%§sŽy^l̶ՎInx-;•œ‰hÏhŠ6{ŠpûxÝžVdàhò“rÓõÇ6çÅ¥ŸØvÙÅê0Ï31ÿx½À6°­“Tc„Øö:æ°Òån÷üÝ]Þƒ§ÎL±Mççöjnº†ùèõÊýGå±Í-ÂÙKĹÃ8ä*°­6Ì=š‚ª1$–!sÕ)ŸF»’íãr‰C›ÓLÛÚVtEHØSä¹éšç£sn}°mäèpY—È4µmå­mªK<òëkÂNr°­¢ý¡._Y5¶©j—Üô`›ð!G¯ÛJ WÉkùÅ‚2y~=¤é&4Ø^þ¼mu¤ 2—À`ÛP“¯LõHÉ¥U1`¹éᶤ‰!Ðlçkmó·ÂÝ/GüŸ®¶â~L8Ϙ0—:ße"–ù¯¾-LJÜnzÊ땯T´­m䦫+ùzQU*¯9ÙÙÏ,Oç¶§ãÈÈó虑ÿ&ÿµ°áV ‚§±âµ$D¶!‚ ˆ\a¨˜؆ ‚ ؆ ‚ `؆ ‚ `‚ ‚ `‚ ‚€m`‚  VQÍÿÖ ÛÚ·Â?‹×½Î3¨‹×¥,¿§å¹¿$#À ÿbÐl [>ºÀúJn#¢¹éTõÜÓvæÉX)’ô—‚çØÆsÒÖ0ÿ;RØ^Œ1Éù¾Kž«(|Œ‰­¯äÈ‘üëåi9ùJåµ<úä£{Z_ä¦óW*Éõ’O6óZ?©–#¶|µžö»ÏùßTõP~ÛÛ1Ce²›º\E&É®T#‘oùÀM¥;NþÜÊSNä¦ûSÏå£ê4IÏã9Oz)6ç £G0®§+fÿó¿]ÊÆße(ßj¶ GjR ó+ÓI2À²Á—oíµ¿N¦§Žpûø€mÿóÑ}Àvñä¦ÓÖs’ëaÜR-‡§^ÜnQü¨Ö*ÿÛkï,ZÛ¡lm{­¦bß%Iî"Ì“6ˆ’²ø[ö< ÂË!ì !im#7¼V¬~Êo(á†ÕrTc›³Þ ´¶ƒÂ¶§ÛðÀ¶ò{ÛáŶ|hOg>c[¦L ÃÐÏb¨î.ªÜôÀ±Mõ¤ á3>c[æü¦Cþ·W^Ûá{$M S(plËàVò9&’í¯Û:ä£û‰m#¢¹éÀ6_Ž'*sÎÏSlÉs¦êüožžsÂK-°m÷ `üW…œW‘*Þ¶’YŽ!±Ì¹Ý¼.Ê ~ÑÎk'¶äþÞ•ÈM÷ç­6ÉåÄ65Ér8±-Ö9Ì??aϳÒüo÷v|ÎüoÂã+HlCAmSˆ–//`‚ ‚B#`‚ ‚€m`‚ ‚€m‚ ¶m‚ *l·ÅÎ؆ ‚ `‚ òQú¿íòë…í¢n%_aF¢à™Žådÿ«Ì^#Ù†XØ~î•:`‚ ŠŽÂõ’›…möÐ8C5#´åÝuqæM•q{ŠÙæ.7ïm?SRÊáVÜ÷ ·@mP= ˆXĂˢ„S s©ÅV͇¼ç@Ö‹}…‡[‘¬¢Èƒ×g½ü'PP¿ë‰Áî% #¶Ù‹^VǸ“ÜögÆïM¬Á]>‘Û,JäÙðåms¸%k&ƒnú–G)¹^úä=æXó¯¯X½¥ÝÈ·Ö9¶S•æ;øvêÓÛ/—M™Ï§lÓzžÙ•ñ’ŠÙ’Ô `O—Ô†Ûžv[¸°-"DËlI&éœ÷T޵0k ïÃw“¯¬„:/ß}†gïOo‡Ëüù> 1lo80Å^ôb¯h[¶™ýRUÜò†òÙe“Àv°íO§Ÿ¢måµ<Â{P“k¯¥Øö:ö²×äÁë,«¢áK•{-|Éå ÏaºÕÂö‹{§Øë^ŒÜ{ë’{{Rmî­õ‰Íu‰5‰u•ñµ‡f7”¡µ­Ö¶p+¤àw%1©sÞ³áo޵Àö—ßn„=hmÛ’¹×Àv>l¿°g’½âÅȽ»6¾£&Á¼½.Θ½©Ælj¯;ñà̆R`[Wl‹5hÔaÛFú–÷løˆ)¶¾’û‘ð*A™†ÆÁ²hm‡4%ÅÂöó»&6—Ïl©Œ›ÃªTξZ9³¥Ê| í¥ŠøúòÆìµeÓëKÇð>’Ul«À-°MUĶŸ—qÈ·Ž¶(%·¾ûÙóðïGlûHêÛG»OoÞ?öÊÁq6ð¸eö™ÝÌf~©ìÔ†ýë÷7wO±9×îjǶ¡wÞ¶ü‹4î?<Ó=-';,Vø]Cúí/ƒîƶpG‚yÏþçX lª·æÞÚB| Ë Û^Iã9NsÚeºÌy^·qOØÞ[ßÏ9óÚ}½y‚;¹± AA+¼9â ÃÇÇ&žßÕù䆿ïý¶é»ÏÕ=þLý·Ÿ®}ìé:föÙòwžk|r}ÛÈø´8¶a†aÜÀ6 Ã0 Û0 Ã0 «Æö`†a†5ÇöùÏÛ0 Ã0 lÃ0 Ã0 lÃ0 Ã0° lÃ0 Ã0° Ã0 Ã0° Ã0 ÃÀö‚ù^øÝÁ0 Ã0ì§Ùx¨‚ØÆ¸Aä¿ÐIÃ0 ø· Ã0 Ã°ÏØ^¼¬ ؆a†a}±½¼Õ%lÃ0 Ã0° Ã0 Ã0° Ã0 ÃÀ6¶ Ã0 Û0 Ã0 Û0 Ã0 lÃ0 Ã0 lÃpQº¿·¶µq_SíöÆšm>¸êÀzu¶…­Nsý.¶^lí°‹a؆á蘱­»µüï=óŽ[¿ûÔ·¢á7®xüŽÇŸêí¬ìi?Œ] ÃÀ6 GǬUʘ½êñÿÞUÕ™´ƒ†ö¶F|ïY´¶a؆á¨a›µ³wV¶ž‰”’;+²õnÅ.†aÿ°(Vmv˜õ*'“ æ”âp<>;ujœ­×øÉ^ìbVm$€Á°­m†·YS3QñéÉSã'G‡ØzMŒ÷aÃ0° ÃQÃöéÓÓ§OOEÃÓÓ“c£Ç‡úRØîÇ.†a`†£†í©©S)ODÀ““ãc'‡‡º€m¶a8ªØ¶˜7NîØœœSr~¦òä䨨ɡáN`†mŽ*¶íLàÑšQ9ûsöZŸ:uòä‰Á¡þ`†mŽ&¶màšQ9ççUxbâĉÑÁ>`†mŽ(¶màš9ç«Ïœö·œ=Þ?ÐÛlÃ0° ÃQÅö 扉QB§ØœcʶGy|üøèñ¾ÞcÀ6 Û0MlÛÀ#4csÎ)ÎÿªðØØÈñ‘Þþž6`†mŽ&¶YÇ2óØØqZ36gÎþ@ë“'GF†{ûºm¶a8²ØN·SÉm¿æœ’ó3•Ožîéën¶aØol/¾؆a?°m/>qbpx¨»·ë(° Ã~`ûòÖØùÏÛ0ì+¶SÀІÙÛ_C=]Í)l`Ã0° ÃQÃöÈpßðp/óˆé¾ðš­Â Éì–Ž¶zó ùñAìb¶a8:>Z¿û+ßyàPW{cDZúÎc ìCxÍÊßÞZ{ôHŦíÛÙzMOÀ.†a`†£ãöæ·?öÔußüɯ׾ÜX]v7Tïk¨Ú»aó¦Ï=ü£/}÷W³3“ØÅ0 lÃptÜ×]Íþûþú·~‡õ*Gì}ßÏLOŸHÄOcÃ0° ÃÑñèðÑñ“½§§NÆg§ä‰¥>s&©Îö¯$ñd2žHÌŽŸìÆ.†a`†a†a`†a†m†a†m†a¶m†a¶í(‘ß<÷Ó_ýü‡Oýìû–öÓïýÇOþ÷Oò Ã0 Ã>˜a—Á÷©ÿü¾å§ùšó&€Õ5Ô–>¸ÿÀ>ËûöíÞ³wçî=;˜wíÎð6Ë;w™Þµk«Ã[Lï|e×ÎMnÞñ²å)ïØ±q玗r{ûz†aŽ–×9½cÛZË;·¯Ý½sݾ=,Ü_R]¹-/¶»{Úµ·mm¶ÜÜr¤©¹1åú¦¦ú#MuM)§>Tg¹*í#Ì }Øö‘ÆC åM ‡L7¦ÜPÆ|¤á@¦ë÷©/…a†áè¹±nß‘ú½N75°){˜›ö6Ùg¹µ¹´£µ,/¶‡G††û{Óèœ3û<Ð=çN‡;nO¹ÍáVÓý)÷5Ýßb»¿¯™y ïHn÷6̹†a†£áþžº…®µÝ×m¹ª¯§ÚrOÍ@om^lŸ`ºNŸ:qb —û3=Ú›rw†Gw¥Ü‘áã#ín]è–97Ã9]~ Ä0 lU†Cç‘¡æãCÍ ÝèôÈP½éÁæüØv°ytÔtÒi*çðèñ‡»6ñ<2ÒÉìÄóÈð±Lµ¦ÜbÛZá9ãœ>´;Wb;À¨Š0r7:Ü`{x žyd°Ž؎ƹ²çJU†m`;>¸ÿeœ+aTE¶ípø@éFse,æ#ÁßMJþsò DU„ေsHÛörܱmÀsÌŽ-”;¶íÙŠðtp ô¥ìs¥sÓ œ+ݿ˳ü‚¿˜ïëžÈSç •J`ù<Û“gùü[OfCy=$™ìª˜±YTTEçl{9g8ëª×#%»’¬B¾…¬“„«™=ÏŠ»Ì n‹åœ³`áy¾åiŠBlÛ­íÔgAl›EœkmÛäÎÆvzeØælmç<5x"Jİ-yB÷zªågÏ×9÷g\~W`ù<—A´[OrC…Ûü{Yx-ÜaÀ¿ <íž áŠÊ3…|5ÝTxÉ*¶Xö·8 /°½.Y¶çÛßsÀ¶§XÌN}(€msŠƒÖùZÛäbçèpc{ïlg_'òœ•O!î—ü7¶3hmÿ×ÙÚæÁ¶Mn'¿]:É-lÇr‰üú+t.ݽΥ“¼`½ä<°Ý¿•³© 8yÌ^ð’Â¥›K¦R,³ËÖsßt’'Sþë ’£&_Utÿ-ùªè²Oyö²•P¦Àœ«P'Âäò«™]ɽb›|‹ñØv¹2Çvɳ©ƒ‹Û÷¶sbÛú ÐI¾€ÙYØv>’VðÞ6ákè¼{Ç\žÊwcF gRQ‡-g¿™Øl·T=-Ml‹y½s)À ÷[†’ÏpVÅœŠª"_ƒFak[lò«àskÛëÂ9÷”Ø.&Ùé<œ¦ú,voÛHÉ Û¬y}|d …ØQÓ}–SSz-§`ÜÍl}¶þ<>Ü•á‘ᶇ;RžGõðP[ ÒæÓãÃCG-§ð|”{x°ÙéÔJ6æ¼zhd¶?8sbô¼mëoØîÌ÷¯ÖFÈÞ.ÇùO<Ÿ¿’o¹übÎEqþbÁÙ þ.I¥Øbž6ÿÈØÝœà™M¸*,aUt©ížj¦ÒJè^`±Up_ÉÑíi6Οø!ª-Æy:òºÅ8×ÈŃýé;ÙÃý)Ô™î¯eê¯a΋mÌ6¤3PÍl·¡-§ÿ\éy§³®§LÌ÷­ÈØQ2ßÉžhÿ™ñ!ç²ç±>çü ,OöÌœ³¹ÒëïÊT*žM]0þMç^Â|%qߘ97mUt)’ýÓ’UÑe½<íh™ºZ°x^Ô‡U ]Íìs.‡§«Øb2ž£ƒ§ ùJ^èhª³ïg³v¶ýÙ ÛÃC]óîN·žM[µ;Ü–éÁÖy[àƒ-)7gx°¿‰y¨ÿ³u¹1Ðoš]td{¨¯ζ5¢$¶C°fÇaŠ!ùuTE&soµu?ÛldÛŸ{«ób{p°•yhðsúóÀQËŸM÷·,tS>[HÎáT.g?K1›w]¦{jàœ¶F”ÄvÜŒy¡.ƒ|ùQaXÀfR'ûoõÜŸÕ)WÍ»»Òv^l÷v7šî92çÓÝN7ÚîéªÏríî®Ú ÷tÕ0ww¦Üeº§³:å*æîŽ´­?ç§tVÀ9m(‰í£*ÂpèÜ“rwG9³u»§½œÙúœš~0ý¹ý s^lw«dno«:v,mëOÛéémÝÞz¨°4ÝZ–飜nƒsÙš ÛFU„á0úØÑRËö=ì¶£ûrnÙ›ÛG›pÓÁœniÚïêÒyÙ—éÆ=¦Ÿn6½ †a†#ã–ÆÝ¶ÙŸÖ=lëŸæ?7Ì}nؑ۩&uuDZšŽcµs®É6›§sÎmU™N5Ùs8=Ãa7·–g˜«ÕÃ0 á·ÝåœêŠ>zÈl”7ïok.Íí7ÜÜk‘{ñ†¼Ú\ Ã0 Ê̘ýÁ °ýºk[þøÖö×~¾ù5ŸiòêØåmÞÌ~^C_îÝËÛ<ÚŸuñX*×sûP*?V¼M½µ¬‡>³šn«¨”JÓÝ¡áO­ø¥Õ±l‹]ðë¶ß´ÖÌ3ýìÜÕ~Ö»Õ—ê|õö§T^·­?!²âÏz¶õÐë¶õÅ~l[\¬gMKåÃ)ׇcÜ—Ãܧ£ã׿‡·þ<…í7þ—ù?†a†µ÷ÿ¬¯ø¬{]FùIEND®B`‚bitpim-1.0.7+dfsg1/help/phone-lgvx3200-notes.htd0000644001616600161660000000543410547564173017344 0ustar amuamu#include "pagestart.h"

DO NOT PULL THE CABLE OUT OF THE PHONE WHILE OPERATIONS ARE TAKING PLACE (even just reads). If you do, you could end up with bad data when you read the phone book. You can only fix that by writing good data back again.

The LG-VX3200 is a simpler (less featured) phone compared to the other LG phones supported by BitPim. The manufacturer has taken some shortcuts related to some of the inner workings of the phone that in turn make some of the BitPim media handling a little trickier. This is especially true for the Wallpaper handling. Please see the Howtos help section for this phone for important information.

Remember to examine the "Log" tab in BitPim for useful messages if an operation does not appear to have worked correctly.

PHONEBOOK NOTES

The LG-VX3200 imposes some limitations on what can be written to the phone when updating the phone's Phonebook. Note that this is a limitation of the phone and not BitPim. In addition there are other items of note related to Phonebook support. Here are the specifics: